Magellan Linux

Annotation of /trunk/kernel26-magellan/patches-2.6.39-r2/0102-2.6.39.3-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1424 - (hide annotations) (download)
Mon Jul 18 14:29:21 2011 UTC (12 years, 10 months ago) by niro
File size: 121531 byte(s)
-2.6.39-magellan-r2: -using linux-2.6.39.3 and removed deprecated acpi procfs options from config
1 niro 1424 diff --git a/Documentation/filesystems/caching/netfs-api.txt b/Documentation/filesystems/caching/netfs-api.txt
2     index a167ab8..7cc6bf2 100644
3     --- a/Documentation/filesystems/caching/netfs-api.txt
4     +++ b/Documentation/filesystems/caching/netfs-api.txt
5     @@ -673,6 +673,22 @@ storage request to complete, or it may attempt to cancel the storage request -
6     in which case the page will not be stored in the cache this time.
7    
8    
9     +BULK INODE PAGE UNCACHE
10     +-----------------------
11     +
12     +A convenience routine is provided to perform an uncache on all the pages
13     +attached to an inode. This assumes that the pages on the inode correspond on a
14     +1:1 basis with the pages in the cache.
15     +
16     + void fscache_uncache_all_inode_pages(struct fscache_cookie *cookie,
17     + struct inode *inode);
18     +
19     +This takes the netfs cookie that the pages were cached with and the inode that
20     +the pages are attached to. This function will wait for pages to finish being
21     +written to the cache and for the cache to finish with the page generally. No
22     +error is returned.
23     +
24     +
25     ==========================
26     INDEX AND DATA FILE UPDATE
27     ==========================
28     diff --git a/arch/arm/mach-exynos4/init.c b/arch/arm/mach-exynos4/init.c
29     index cf91f50..a8a83e3 100644
30     --- a/arch/arm/mach-exynos4/init.c
31     +++ b/arch/arm/mach-exynos4/init.c
32     @@ -35,6 +35,7 @@ void __init exynos4_common_init_uarts(struct s3c2410_uartcfg *cfg, int no)
33     tcfg->clocks = exynos4_serial_clocks;
34     tcfg->clocks_size = ARRAY_SIZE(exynos4_serial_clocks);
35     }
36     + tcfg->flags |= NO_NEED_CHECK_CLKSRC;
37     }
38    
39     s3c24xx_init_uartdevs("s5pv210-uart", s5p_uart_resources, cfg, no);
40     diff --git a/arch/arm/plat-samsung/include/plat/regs-serial.h b/arch/arm/plat-samsung/include/plat/regs-serial.h
41     index 788837e..d2ef07f 100644
42     --- a/arch/arm/plat-samsung/include/plat/regs-serial.h
43     +++ b/arch/arm/plat-samsung/include/plat/regs-serial.h
44     @@ -224,6 +224,8 @@
45     #define S5PV210_UFSTAT_RXMASK (255<<0)
46     #define S5PV210_UFSTAT_RXSHIFT (0)
47    
48     +#define NO_NEED_CHECK_CLKSRC 1
49     +
50     #ifndef __ASSEMBLY__
51    
52     /* struct s3c24xx_uart_clksrc
53     diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
54     index 31d84ac..a518c0a 100644
55     --- a/arch/x86/include/asm/pvclock.h
56     +++ b/arch/x86/include/asm/pvclock.h
57     @@ -22,6 +22,8 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
58     u64 product;
59     #ifdef __i386__
60     u32 tmp1, tmp2;
61     +#else
62     + ulong tmp;
63     #endif
64    
65     if (shift < 0)
66     @@ -42,8 +44,11 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
67     : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) );
68     #elif defined(__x86_64__)
69     __asm__ (
70     - "mul %%rdx ; shrd $32,%%rdx,%%rax"
71     - : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) );
72     + "mul %[mul_frac] ; shrd $32, %[hi], %[lo]"
73     + : [lo]"=a"(product),
74     + [hi]"=d"(tmp)
75     + : "0"(delta),
76     + [mul_frac]"rm"((u64)mul_frac));
77     #else
78     #error implement me!
79     #endif
80     diff --git a/arch/x86/kernel/acpi/realmode/wakeup.S b/arch/x86/kernel/acpi/realmode/wakeup.S
81     index ead21b6..b4fd836 100644
82     --- a/arch/x86/kernel/acpi/realmode/wakeup.S
83     +++ b/arch/x86/kernel/acpi/realmode/wakeup.S
84     @@ -28,6 +28,8 @@ pmode_cr3: .long 0 /* Saved %cr3 */
85     pmode_cr4: .long 0 /* Saved %cr4 */
86     pmode_efer: .quad 0 /* Saved EFER */
87     pmode_gdt: .quad 0
88     +pmode_misc_en: .quad 0 /* Saved MISC_ENABLE MSR */
89     +pmode_behavior: .long 0 /* Wakeup behavior flags */
90     realmode_flags: .long 0
91     real_magic: .long 0
92     trampoline_segment: .word 0
93     @@ -91,6 +93,18 @@ wakeup_code:
94     /* Call the C code */
95     calll main
96    
97     + /* Restore MISC_ENABLE before entering protected mode, in case
98     + BIOS decided to clear XD_DISABLE during S3. */
99     + movl pmode_behavior, %eax
100     + btl $WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE, %eax
101     + jnc 1f
102     +
103     + movl pmode_misc_en, %eax
104     + movl pmode_misc_en + 4, %edx
105     + movl $MSR_IA32_MISC_ENABLE, %ecx
106     + wrmsr
107     +1:
108     +
109     /* Do any other stuff... */
110    
111     #ifndef CONFIG_64BIT
112     diff --git a/arch/x86/kernel/acpi/realmode/wakeup.h b/arch/x86/kernel/acpi/realmode/wakeup.h
113     index e1828c0..97a29e1 100644
114     --- a/arch/x86/kernel/acpi/realmode/wakeup.h
115     +++ b/arch/x86/kernel/acpi/realmode/wakeup.h
116     @@ -21,6 +21,9 @@ struct wakeup_header {
117     u32 pmode_efer_low; /* Protected mode EFER */
118     u32 pmode_efer_high;
119     u64 pmode_gdt;
120     + u32 pmode_misc_en_low; /* Protected mode MISC_ENABLE */
121     + u32 pmode_misc_en_high;
122     + u32 pmode_behavior; /* Wakeup routine behavior flags */
123     u32 realmode_flags;
124     u32 real_magic;
125     u16 trampoline_segment; /* segment with trampoline code, 64-bit only */
126     @@ -39,4 +42,7 @@ extern struct wakeup_header wakeup_header;
127     #define WAKEUP_HEADER_SIGNATURE 0x51ee1111
128     #define WAKEUP_END_SIGNATURE 0x65a22c82
129    
130     +/* Wakeup behavior bits */
131     +#define WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE 0
132     +
133     #endif /* ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H */
134     diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
135     index ff93bc1..cdddffc 100644
136     --- a/arch/x86/kernel/acpi/sleep.c
137     +++ b/arch/x86/kernel/acpi/sleep.c
138     @@ -77,6 +77,12 @@ int acpi_suspend_lowlevel(void)
139    
140     header->pmode_cr0 = read_cr0();
141     header->pmode_cr4 = read_cr4_safe();
142     + header->pmode_behavior = 0;
143     + if (!rdmsr_safe(MSR_IA32_MISC_ENABLE,
144     + &header->pmode_misc_en_low,
145     + &header->pmode_misc_en_high))
146     + header->pmode_behavior |=
147     + (1 << WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE);
148     header->realmode_flags = acpi_realmode_flags;
149     header->real_magic = 0x12345678;
150    
151     diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
152     index cf97500..68894fd 100644
153     --- a/arch/x86/oprofile/nmi_int.c
154     +++ b/arch/x86/oprofile/nmi_int.c
155     @@ -112,8 +112,10 @@ static void nmi_cpu_start(void *dummy)
156     static int nmi_start(void)
157     {
158     get_online_cpus();
159     - on_each_cpu(nmi_cpu_start, NULL, 1);
160     ctr_running = 1;
161     + /* make ctr_running visible to the nmi handler: */
162     + smp_mb();
163     + on_each_cpu(nmi_cpu_start, NULL, 1);
164     put_online_cpus();
165     return 0;
166     }
167     @@ -504,15 +506,18 @@ static int nmi_setup(void)
168    
169     nmi_enabled = 0;
170     ctr_running = 0;
171     - barrier();
172     + /* make variables visible to the nmi handler: */
173     + smp_mb();
174     err = register_die_notifier(&profile_exceptions_nb);
175     if (err)
176     goto fail;
177    
178     get_online_cpus();
179     register_cpu_notifier(&oprofile_cpu_nb);
180     - on_each_cpu(nmi_cpu_setup, NULL, 1);
181     nmi_enabled = 1;
182     + /* make nmi_enabled visible to the nmi handler: */
183     + smp_mb();
184     + on_each_cpu(nmi_cpu_setup, NULL, 1);
185     put_online_cpus();
186    
187     return 0;
188     @@ -531,7 +536,8 @@ static void nmi_shutdown(void)
189     nmi_enabled = 0;
190     ctr_running = 0;
191     put_online_cpus();
192     - barrier();
193     + /* make variables visible to the nmi handler: */
194     + smp_mb();
195     unregister_die_notifier(&profile_exceptions_nb);
196     msrs = &get_cpu_var(cpu_msrs);
197     model->shutdown(msrs);
198     diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
199     index e37b407..632ba33 100644
200     --- a/arch/x86/pci/xen.c
201     +++ b/arch/x86/pci/xen.c
202     @@ -316,7 +316,7 @@ int __init pci_xen_hvm_init(void)
203     }
204    
205     #ifdef CONFIG_XEN_DOM0
206     -static int xen_register_pirq(u32 gsi, int triggering)
207     +static int xen_register_pirq(u32 gsi, int gsi_override, int triggering)
208     {
209     int rc, pirq, irq = -1;
210     struct physdev_map_pirq map_irq;
211     @@ -333,16 +333,18 @@ static int xen_register_pirq(u32 gsi, int triggering)
212     shareable = 1;
213     name = "ioapic-level";
214     }
215     -
216     pirq = xen_allocate_pirq_gsi(gsi);
217     if (pirq < 0)
218     goto out;
219    
220     - irq = xen_bind_pirq_gsi_to_irq(gsi, pirq, shareable, name);
221     + if (gsi_override >= 0)
222     + irq = xen_bind_pirq_gsi_to_irq(gsi_override, pirq, shareable, name);
223     + else
224     + irq = xen_bind_pirq_gsi_to_irq(gsi, pirq, shareable, name);
225     if (irq < 0)
226     goto out;
227    
228     - printk(KERN_DEBUG "xen: --> pirq=%d -> irq=%d\n", pirq, irq);
229     + printk(KERN_DEBUG "xen: --> pirq=%d -> irq=%d (gsi=%d)\n", pirq, irq, gsi);
230    
231     map_irq.domid = DOMID_SELF;
232     map_irq.type = MAP_PIRQ_TYPE_GSI;
233     @@ -359,7 +361,7 @@ out:
234     return irq;
235     }
236    
237     -static int xen_register_gsi(u32 gsi, int triggering, int polarity)
238     +static int xen_register_gsi(u32 gsi, int gsi_override, int triggering, int polarity)
239     {
240     int rc, irq;
241     struct physdev_setup_gsi setup_gsi;
242     @@ -370,7 +372,7 @@ static int xen_register_gsi(u32 gsi, int triggering, int polarity)
243     printk(KERN_DEBUG "xen: registering gsi %u triggering %d polarity %d\n",
244     gsi, triggering, polarity);
245    
246     - irq = xen_register_pirq(gsi, triggering);
247     + irq = xen_register_pirq(gsi, gsi_override, triggering);
248    
249     setup_gsi.gsi = gsi;
250     setup_gsi.triggering = (triggering == ACPI_EDGE_SENSITIVE ? 0 : 1);
251     @@ -392,6 +394,8 @@ static __init void xen_setup_acpi_sci(void)
252     int rc;
253     int trigger, polarity;
254     int gsi = acpi_sci_override_gsi;
255     + int irq = -1;
256     + int gsi_override = -1;
257    
258     if (!gsi)
259     return;
260     @@ -408,7 +412,25 @@ static __init void xen_setup_acpi_sci(void)
261     printk(KERN_INFO "xen: sci override: global_irq=%d trigger=%d "
262     "polarity=%d\n", gsi, trigger, polarity);
263    
264     - gsi = xen_register_gsi(gsi, trigger, polarity);
265     + /* Before we bind the GSI to a Linux IRQ, check whether
266     + * we need to override it with bus_irq (IRQ) value. Usually for
267     + * IRQs below IRQ_LEGACY_IRQ this holds IRQ == GSI, as so:
268     + * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
269     + * but there are oddballs where the IRQ != GSI:
270     + * ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 20 low level)
271     + * which ends up being: gsi_to_irq[9] == 20
272     + * (which is what acpi_gsi_to_irq ends up calling when starting the
273     + * the ACPI interpreter and keels over since IRQ 9 has not been
274     + * setup as we had setup IRQ 20 for it).
275     + */
276     + /* Check whether the GSI != IRQ */
277     + if (acpi_gsi_to_irq(gsi, &irq) == 0) {
278     + if (irq >= 0 && irq != gsi)
279     + /* Bugger, we MUST have that IRQ. */
280     + gsi_override = irq;
281     + }
282     +
283     + gsi = xen_register_gsi(gsi, gsi_override, trigger, polarity);
284     printk(KERN_INFO "xen: acpi sci %d\n", gsi);
285    
286     return;
287     @@ -417,7 +439,7 @@ static __init void xen_setup_acpi_sci(void)
288     static int acpi_register_gsi_xen(struct device *dev, u32 gsi,
289     int trigger, int polarity)
290     {
291     - return xen_register_gsi(gsi, trigger, polarity);
292     + return xen_register_gsi(gsi, -1 /* no GSI override */, trigger, polarity);
293     }
294    
295     static int __init pci_xen_initial_domain(void)
296     @@ -456,7 +478,7 @@ void __init xen_setup_pirqs(void)
297     if (acpi_get_override_irq(irq, &trigger, &polarity) == -1)
298     continue;
299    
300     - xen_register_pirq(irq,
301     + xen_register_pirq(irq, -1 /* no GSI override */,
302     trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE);
303     }
304     }
305     diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
306     index f298bd7..0d668d1 100644
307     --- a/arch/x86/xen/mmu.c
308     +++ b/arch/x86/xen/mmu.c
309     @@ -59,6 +59,7 @@
310     #include <asm/page.h>
311     #include <asm/init.h>
312     #include <asm/pat.h>
313     +#include <asm/smp.h>
314    
315     #include <asm/xen/hypercall.h>
316     #include <asm/xen/hypervisor.h>
317     @@ -1353,7 +1354,11 @@ static void xen_flush_tlb_others(const struct cpumask *cpus,
318     {
319     struct {
320     struct mmuext_op op;
321     +#ifdef CONFIG_SMP
322     + DECLARE_BITMAP(mask, num_processors);
323     +#else
324     DECLARE_BITMAP(mask, NR_CPUS);
325     +#endif
326     } *args;
327     struct multicall_space mcs;
328    
329     @@ -1721,6 +1726,11 @@ static __init void xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn)
330     for (pteidx = 0; pteidx < PTRS_PER_PTE; pteidx++, pfn++) {
331     pte_t pte;
332    
333     +#ifdef CONFIG_X86_32
334     + if (pfn > max_pfn_mapped)
335     + max_pfn_mapped = pfn;
336     +#endif
337     +
338     if (!pte_none(pte_page[pteidx]))
339     continue;
340    
341     @@ -1888,7 +1898,9 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
342     initial_kernel_pmd =
343     extend_brk(sizeof(pmd_t) * PTRS_PER_PMD, PAGE_SIZE);
344    
345     - max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->mfn_list));
346     + max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->pt_base) +
347     + xen_start_info->nr_pt_frames * PAGE_SIZE +
348     + 512*1024);
349    
350     kernel_pmd = m2v(pgd[KERNEL_PGD_BOUNDARY].pgd);
351     memcpy(initial_kernel_pmd, kernel_pmd, sizeof(pmd_t) * PTRS_PER_PMD);
352     diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
353     index 3061244..ae49046 100644
354     --- a/arch/x86/xen/smp.c
355     +++ b/arch/x86/xen/smp.c
356     @@ -206,11 +206,18 @@ static void __init xen_smp_prepare_boot_cpu(void)
357     static void __init xen_smp_prepare_cpus(unsigned int max_cpus)
358     {
359     unsigned cpu;
360     + unsigned int i;
361    
362     xen_init_lock_cpu(0);
363    
364     smp_store_cpu_info(0);
365     cpu_data(0).x86_max_cores = 1;
366     +
367     + for_each_possible_cpu(i) {
368     + zalloc_cpumask_var(&per_cpu(cpu_sibling_map, i), GFP_KERNEL);
369     + zalloc_cpumask_var(&per_cpu(cpu_core_map, i), GFP_KERNEL);
370     + zalloc_cpumask_var(&per_cpu(cpu_llc_shared_map, i), GFP_KERNEL);
371     + }
372     set_cpu_sibling_map(0);
373    
374     if (xen_smp_intr_init(0))
375     diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
376     index ab7a9e6..bd2fa5f 100644
377     --- a/block/cfq-iosched.c
378     +++ b/block/cfq-iosched.c
379     @@ -2704,8 +2704,14 @@ static void __cfq_exit_single_io_context(struct cfq_data *cfqd,
380     smp_wmb();
381     cic->key = cfqd_dead_key(cfqd);
382    
383     - if (ioc->ioc_data == cic)
384     + rcu_read_lock();
385     + if (rcu_dereference(ioc->ioc_data) == cic) {
386     + rcu_read_unlock();
387     + spin_lock(&ioc->lock);
388     rcu_assign_pointer(ioc->ioc_data, NULL);
389     + spin_unlock(&ioc->lock);
390     + } else
391     + rcu_read_unlock();
392    
393     if (cic->cfqq[BLK_RW_ASYNC]) {
394     cfq_exit_cfqq(cfqd, cic->cfqq[BLK_RW_ASYNC]);
395     @@ -3012,7 +3018,8 @@ cfq_drop_dead_cic(struct cfq_data *cfqd, struct io_context *ioc,
396    
397     spin_lock_irqsave(&ioc->lock, flags);
398    
399     - BUG_ON(ioc->ioc_data == cic);
400     + BUG_ON(rcu_dereference_check(ioc->ioc_data,
401     + lockdep_is_held(&ioc->lock)) == cic);
402    
403     radix_tree_delete(&ioc->radix_root, cfqd->cic_index);
404     hlist_del_rcu(&cic->cic_list);
405     diff --git a/drivers/base/platform.c b/drivers/base/platform.c
406     index 9e0e4fc..5d5bd1a 100644
407     --- a/drivers/base/platform.c
408     +++ b/drivers/base/platform.c
409     @@ -367,7 +367,7 @@ EXPORT_SYMBOL_GPL(platform_device_unregister);
410     *
411     * Returns &struct platform_device pointer on success, or ERR_PTR() on error.
412     */
413     -struct platform_device *__init_or_module platform_device_register_resndata(
414     +struct platform_device *platform_device_register_resndata(
415     struct device *parent,
416     const char *name, int id,
417     const struct resource *res, unsigned int num,
418     diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
419     index abe3ab7..631b5d3 100644
420     --- a/drivers/base/power/main.c
421     +++ b/drivers/base/power/main.c
422     @@ -57,7 +57,8 @@ static int async_error;
423     */
424     void device_pm_init(struct device *dev)
425     {
426     - dev->power.in_suspend = false;
427     + dev->power.is_prepared = false;
428     + dev->power.is_suspended = false;
429     init_completion(&dev->power.completion);
430     complete_all(&dev->power.completion);
431     dev->power.wakeup = NULL;
432     @@ -91,7 +92,7 @@ void device_pm_add(struct device *dev)
433     pr_debug("PM: Adding info for %s:%s\n",
434     dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
435     mutex_lock(&dpm_list_mtx);
436     - if (dev->parent && dev->parent->power.in_suspend)
437     + if (dev->parent && dev->parent->power.is_prepared)
438     dev_warn(dev, "parent %s should not be sleeping\n",
439     dev_name(dev->parent));
440     list_add_tail(&dev->power.entry, &dpm_list);
441     @@ -513,7 +514,14 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
442     dpm_wait(dev->parent, async);
443     device_lock(dev);
444    
445     - dev->power.in_suspend = false;
446     + /*
447     + * This is a fib. But we'll allow new children to be added below
448     + * a resumed device, even if the device hasn't been completed yet.
449     + */
450     + dev->power.is_prepared = false;
451     +
452     + if (!dev->power.is_suspended)
453     + goto Unlock;
454    
455     if (dev->pwr_domain) {
456     pm_dev_dbg(dev, state, "power domain ");
457     @@ -549,6 +557,9 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
458     }
459    
460     End:
461     + dev->power.is_suspended = false;
462     +
463     + Unlock:
464     device_unlock(dev);
465     complete_all(&dev->power.completion);
466    
467     @@ -668,7 +679,7 @@ static void dpm_complete(pm_message_t state)
468     struct device *dev = to_device(dpm_prepared_list.prev);
469    
470     get_device(dev);
471     - dev->power.in_suspend = false;
472     + dev->power.is_prepared = false;
473     list_move(&dev->power.entry, &list);
474     mutex_unlock(&dpm_list_mtx);
475    
476     @@ -834,11 +845,11 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
477     device_lock(dev);
478    
479     if (async_error)
480     - goto End;
481     + goto Unlock;
482    
483     if (pm_wakeup_pending()) {
484     async_error = -EBUSY;
485     - goto End;
486     + goto Unlock;
487     }
488    
489     if (dev->type && dev->type->pm) {
490     @@ -876,6 +887,9 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
491     }
492    
493     End:
494     + dev->power.is_suspended = !error;
495     +
496     + Unlock:
497     device_unlock(dev);
498     complete_all(&dev->power.completion);
499    
500     @@ -1037,7 +1051,7 @@ static int dpm_prepare(pm_message_t state)
501     put_device(dev);
502     break;
503     }
504     - dev->power.in_suspend = true;
505     + dev->power.is_prepared = true;
506     if (!list_empty(&dev->power.entry))
507     list_move_tail(&dev->power.entry, &dpm_prepared_list);
508     put_device(dev);
509     diff --git a/drivers/connector/connector.c b/drivers/connector/connector.c
510     index 219d88a..dde6a0f 100644
511     --- a/drivers/connector/connector.c
512     +++ b/drivers/connector/connector.c
513     @@ -139,6 +139,7 @@ static int cn_call_callback(struct sk_buff *skb)
514     spin_unlock_bh(&dev->cbdev->queue_lock);
515    
516     if (cbq != NULL) {
517     + err = 0;
518     cbq->callback(msg, nsp);
519     kfree_skb(skb);
520     cn_queue_release_callback(cbq);
521     diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
522     index e1aee4f..b6a19cb 100644
523     --- a/drivers/gpu/drm/drm_pci.c
524     +++ b/drivers/gpu/drm/drm_pci.c
525     @@ -251,7 +251,7 @@ err:
526     }
527    
528    
529     -int drm_pci_irq_by_busid(struct drm_device *dev, struct drm_irq_busid *p)
530     +static int drm_pci_irq_by_busid(struct drm_device *dev, struct drm_irq_busid *p)
531     {
532     if ((p->busnum >> 8) != drm_get_pci_domain(dev) ||
533     (p->busnum & 0xff) != dev->pdev->bus->number ||
534     @@ -292,6 +292,7 @@ static struct drm_bus drm_pci_bus = {
535     .get_name = drm_pci_get_name,
536     .set_busid = drm_pci_set_busid,
537     .set_unique = drm_pci_set_unique,
538     + .irq_by_busid = drm_pci_irq_by_busid,
539     .agp_init = drm_pci_agp_init,
540     };
541    
542     diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
543     index 188b497..58c7f27 100644
544     --- a/drivers/gpu/drm/i915/i915_irq.c
545     +++ b/drivers/gpu/drm/i915/i915_irq.c
546     @@ -1567,6 +1567,17 @@ static void ironlake_irq_preinstall(struct drm_device *dev)
547     drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
548    
549     I915_WRITE(HWSTAM, 0xeffe);
550     + if (IS_GEN6(dev)) {
551     + /* Workaround stalls observed on Sandy Bridge GPUs by
552     + * making the blitter command streamer generate a
553     + * write to the Hardware Status Page for
554     + * MI_USER_INTERRUPT. This appears to serialize the
555     + * previous seqno write out before the interrupt
556     + * happens.
557     + */
558     + I915_WRITE(GEN6_BLITTER_HWSTAM, ~GEN6_BLITTER_USER_INTERRUPT);
559     + I915_WRITE(GEN6_BSD_HWSTAM, ~GEN6_BSD_USER_INTERRUPT);
560     + }
561    
562     /* XXX hotplug from PCH */
563    
564     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
565     index f39ac3a..5a96fd1 100644
566     --- a/drivers/gpu/drm/i915/i915_reg.h
567     +++ b/drivers/gpu/drm/i915/i915_reg.h
568     @@ -528,6 +528,7 @@
569     #define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_ENABLE 0
570     #define GEN6_BSD_SLEEP_PSMI_CONTROL_IDLE_INDICATOR (1 << 3)
571    
572     +#define GEN6_BSD_HWSTAM 0x12098
573     #define GEN6_BSD_IMR 0x120a8
574     #define GEN6_BSD_USER_INTERRUPT (1 << 12)
575    
576     diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
577     index d3b903b..d98cee6 100644
578     --- a/drivers/gpu/drm/i915/intel_i2c.c
579     +++ b/drivers/gpu/drm/i915/intel_i2c.c
580     @@ -401,8 +401,7 @@ int intel_setup_gmbus(struct drm_device *dev)
581     bus->reg0 = i | GMBUS_RATE_100KHZ;
582    
583     /* XXX force bit banging until GMBUS is fully debugged */
584     - if (IS_GEN2(dev))
585     - bus->force_bit = intel_gpio_create(dev_priv, i);
586     + bus->force_bit = intel_gpio_create(dev_priv, i);
587     }
588    
589     intel_i2c_reset(dev_priv->dev);
590     diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
591     index b427488..9423fba 100644
592     --- a/drivers/gpu/drm/radeon/radeon_encoders.c
593     +++ b/drivers/gpu/drm/radeon/radeon_encoders.c
594     @@ -1294,7 +1294,11 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
595     if (is_dig) {
596     switch (mode) {
597     case DRM_MODE_DPMS_ON:
598     - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
599     + /* some early dce3.2 boards have a bug in their transmitter control table */
600     + if ((rdev->family == CHIP_RV710) || (rdev->family == CHIP_RV730))
601     + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
602     + else
603     + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
604     if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) {
605     struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
606    
607     diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
608     index ef8a5ba..05aa674 100644
609     --- a/drivers/gpu/drm/radeon/rv770.c
610     +++ b/drivers/gpu/drm/radeon/rv770.c
611     @@ -572,6 +572,12 @@ static void rv770_program_channel_remap(struct radeon_device *rdev)
612     else
613     tcp_chan_steer = 0x00fac688;
614    
615     + /* RV770 CE has special chremap setup */
616     + if (rdev->pdev->device == 0x944e) {
617     + tcp_chan_steer = 0x00b08b08;
618     + mc_shared_chremap = 0x00b08b08;
619     + }
620     +
621     WREG32(TCP_CHAN_STEER, tcp_chan_steer);
622     WREG32(MC_SHARED_CHREMAP, mc_shared_chremap);
623     }
624     diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c
625     index bc6e2ab..affc17e 100644
626     --- a/drivers/hwmon/ibmaem.c
627     +++ b/drivers/hwmon/ibmaem.c
628     @@ -947,6 +947,7 @@ static int aem_register_sensors(struct aem_data *data,
629    
630     /* Set up read-only sensors */
631     while (ro->label) {
632     + sysfs_attr_init(&sensors->dev_attr.attr);
633     sensors->dev_attr.attr.name = ro->label;
634     sensors->dev_attr.attr.mode = S_IRUGO;
635     sensors->dev_attr.show = ro->show;
636     @@ -963,6 +964,7 @@ static int aem_register_sensors(struct aem_data *data,
637    
638     /* Set up read-write sensors */
639     while (rw->label) {
640     + sysfs_attr_init(&sensors->dev_attr.attr);
641     sensors->dev_attr.attr.name = rw->label;
642     sensors->dev_attr.attr.mode = S_IRUGO | S_IWUSR;
643     sensors->dev_attr.show = rw->show;
644     diff --git a/drivers/hwmon/ibmpex.c b/drivers/hwmon/ibmpex.c
645     index 06d4eaf..41dbf81 100644
646     --- a/drivers/hwmon/ibmpex.c
647     +++ b/drivers/hwmon/ibmpex.c
648     @@ -358,6 +358,7 @@ static int create_sensor(struct ibmpex_bmc_data *data, int type,
649     else if (type == POWER_SENSOR)
650     sprintf(n, power_sensor_name_templates[func], "power", counter);
651    
652     + sysfs_attr_init(&data->sensors[sensor].attr[func].dev_attr.attr);
653     data->sensors[sensor].attr[func].dev_attr.attr.name = n;
654     data->sensors[sensor].attr[func].dev_attr.attr.mode = S_IRUGO;
655     data->sensors[sensor].attr[func].dev_attr.show = ibmpex_show_sensor;
656     diff --git a/drivers/hwmon/s3c-hwmon.c b/drivers/hwmon/s3c-hwmon.c
657     index 92b42db..b39f52e 100644
658     --- a/drivers/hwmon/s3c-hwmon.c
659     +++ b/drivers/hwmon/s3c-hwmon.c
660     @@ -232,6 +232,7 @@ static int s3c_hwmon_create_attr(struct device *dev,
661    
662     attr = &attrs->in;
663     attr->index = channel;
664     + sysfs_attr_init(&attr->dev_attr.attr);
665     attr->dev_attr.attr.name = attrs->in_name;
666     attr->dev_attr.attr.mode = S_IRUGO;
667     attr->dev_attr.show = s3c_hwmon_ch_show;
668     @@ -249,6 +250,7 @@ static int s3c_hwmon_create_attr(struct device *dev,
669    
670     attr = &attrs->label;
671     attr->index = channel;
672     + sysfs_attr_init(&attr->dev_attr.attr);
673     attr->dev_attr.attr.name = attrs->label_name;
674     attr->dev_attr.attr.mode = S_IRUGO;
675     attr->dev_attr.show = s3c_hwmon_label_show;
676     diff --git a/drivers/i2c/busses/i2c-taos-evm.c b/drivers/i2c/busses/i2c-taos-evm.c
677     index dd39c1e..26c352a 100644
678     --- a/drivers/i2c/busses/i2c-taos-evm.c
679     +++ b/drivers/i2c/busses/i2c-taos-evm.c
680     @@ -234,7 +234,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv)
681    
682     if (taos->state != TAOS_STATE_IDLE) {
683     err = -ENODEV;
684     - dev_dbg(&serio->dev, "TAOS EVM reset failed (state=%d, "
685     + dev_err(&serio->dev, "TAOS EVM reset failed (state=%d, "
686     "pos=%d)\n", taos->state, taos->pos);
687     goto exit_close;
688     }
689     @@ -255,7 +255,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv)
690     msecs_to_jiffies(250));
691     if (taos->state != TAOS_STATE_IDLE) {
692     err = -ENODEV;
693     - dev_err(&adapter->dev, "Echo off failed "
694     + dev_err(&serio->dev, "TAOS EVM echo off failed "
695     "(state=%d)\n", taos->state);
696     goto exit_close;
697     }
698     @@ -263,7 +263,7 @@ static int taos_connect(struct serio *serio, struct serio_driver *drv)
699     err = i2c_add_adapter(adapter);
700     if (err)
701     goto exit_close;
702     - dev_dbg(&serio->dev, "Connected to TAOS EVM\n");
703     + dev_info(&serio->dev, "Connected to TAOS EVM\n");
704    
705     taos->client = taos_instantiate_device(adapter);
706     return 0;
707     @@ -288,7 +288,7 @@ static void taos_disconnect(struct serio *serio)
708     serio_set_drvdata(serio, NULL);
709     kfree(taos);
710    
711     - dev_dbg(&serio->dev, "Disconnected from TAOS EVM\n");
712     + dev_info(&serio->dev, "Disconnected from TAOS EVM\n");
713     }
714    
715     static struct serio_device_id taos_serio_ids[] = {
716     diff --git a/drivers/i2c/muxes/pca954x.c b/drivers/i2c/muxes/pca954x.c
717     index 54e1ce7..6f89536 100644
718     --- a/drivers/i2c/muxes/pca954x.c
719     +++ b/drivers/i2c/muxes/pca954x.c
720     @@ -201,10 +201,11 @@ static int pca954x_probe(struct i2c_client *client,
721    
722     i2c_set_clientdata(client, data);
723    
724     - /* Read the mux register at addr to verify
725     - * that the mux is in fact present.
726     + /* Write the mux register at addr to verify
727     + * that the mux is in fact present. This also
728     + * initializes the mux to disconnected state.
729     */
730     - if (i2c_smbus_read_byte(client) < 0) {
731     + if (i2c_smbus_write_byte(client, 0) < 0) {
732     dev_warn(&client->dev, "probe failed\n");
733     goto exit_free;
734     }
735     diff --git a/drivers/input/input.c b/drivers/input/input.c
736     index ebbceed..e3c88fc 100644
737     --- a/drivers/input/input.c
738     +++ b/drivers/input/input.c
739     @@ -1757,7 +1757,7 @@ static unsigned int input_estimate_events_per_packet(struct input_dev *dev)
740     } else if (test_bit(ABS_MT_TRACKING_ID, dev->absbit)) {
741     mt_slots = dev->absinfo[ABS_MT_TRACKING_ID].maximum -
742     dev->absinfo[ABS_MT_TRACKING_ID].minimum + 1,
743     - clamp(mt_slots, 2, 32);
744     + mt_slots = clamp(mt_slots, 2, 32);
745     } else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) {
746     mt_slots = 2;
747     } else {
748     diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c
749     index 7630273..f8ba7c9 100644
750     --- a/drivers/input/mousedev.c
751     +++ b/drivers/input/mousedev.c
752     @@ -187,7 +187,7 @@ static void mousedev_abs_event(struct input_dev *dev, struct mousedev *mousedev,
753     if (size == 0)
754     size = xres ? : 1;
755    
756     - clamp(value, min, max);
757     + value = clamp(value, min, max);
758    
759     mousedev->packet.x = ((value - min) * xres) / size;
760     mousedev->packet.abs_event = 1;
761     @@ -201,7 +201,7 @@ static void mousedev_abs_event(struct input_dev *dev, struct mousedev *mousedev,
762     if (size == 0)
763     size = yres ? : 1;
764    
765     - clamp(value, min, max);
766     + value = clamp(value, min, max);
767    
768     mousedev->packet.y = yres - ((value - min) * yres) / size;
769     mousedev->packet.abs_event = 1;
770     diff --git a/drivers/md/md.c b/drivers/md/md.c
771     index 9930792..a7ed02c 100644
772     --- a/drivers/md/md.c
773     +++ b/drivers/md/md.c
774     @@ -7062,6 +7062,7 @@ static int remove_and_add_spares(mddev_t *mddev)
775     list_for_each_entry(rdev, &mddev->disks, same_set) {
776     if (rdev->raid_disk >= 0 &&
777     !test_bit(In_sync, &rdev->flags) &&
778     + !test_bit(Faulty, &rdev->flags) &&
779     !test_bit(Blocked, &rdev->flags))
780     spares++;
781     if (rdev->raid_disk < 0
782     diff --git a/drivers/media/rc/ir-raw.c b/drivers/media/rc/ir-raw.c
783     index 11c19d8..423ed45 100644
784     --- a/drivers/media/rc/ir-raw.c
785     +++ b/drivers/media/rc/ir-raw.c
786     @@ -114,18 +114,20 @@ int ir_raw_event_store_edge(struct rc_dev *dev, enum raw_event_type type)
787     s64 delta; /* ns */
788     DEFINE_IR_RAW_EVENT(ev);
789     int rc = 0;
790     + int delay;
791    
792     if (!dev->raw)
793     return -EINVAL;
794    
795     now = ktime_get();
796     delta = ktime_to_ns(ktime_sub(now, dev->raw->last_event));
797     + delay = MS_TO_NS(dev->input_dev->rep[REP_DELAY]);
798    
799     /* Check for a long duration since last event or if we're
800     * being called for the first time, note that delta can't
801     * possibly be negative.
802     */
803     - if (delta > IR_MAX_DURATION || !dev->raw->last_type)
804     + if (delta > delay || !dev->raw->last_type)
805     type |= IR_START_EVENT;
806     else
807     ev.duration = delta;
808     diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c
809     index 43908a7..c1717bf 100644
810     --- a/drivers/media/rc/ite-cir.c
811     +++ b/drivers/media/rc/ite-cir.c
812     @@ -1357,6 +1357,7 @@ static const struct ite_dev_params ite_dev_descs[] = {
813     { /* 0: ITE8704 */
814     .model = "ITE8704 CIR transceiver",
815     .io_region_size = IT87_IOREG_LENGTH,
816     + .io_rsrc_no = 0,
817     .hw_tx_capable = true,
818     .sample_period = (u32) (1000000000ULL / 115200),
819     .tx_carrier_freq = 38000,
820     @@ -1381,6 +1382,7 @@ static const struct ite_dev_params ite_dev_descs[] = {
821     { /* 1: ITE8713 */
822     .model = "ITE8713 CIR transceiver",
823     .io_region_size = IT87_IOREG_LENGTH,
824     + .io_rsrc_no = 0,
825     .hw_tx_capable = true,
826     .sample_period = (u32) (1000000000ULL / 115200),
827     .tx_carrier_freq = 38000,
828     @@ -1405,6 +1407,7 @@ static const struct ite_dev_params ite_dev_descs[] = {
829     { /* 2: ITE8708 */
830     .model = "ITE8708 CIR transceiver",
831     .io_region_size = IT8708_IOREG_LENGTH,
832     + .io_rsrc_no = 0,
833     .hw_tx_capable = true,
834     .sample_period = (u32) (1000000000ULL / 115200),
835     .tx_carrier_freq = 38000,
836     @@ -1430,6 +1433,7 @@ static const struct ite_dev_params ite_dev_descs[] = {
837     { /* 3: ITE8709 */
838     .model = "ITE8709 CIR transceiver",
839     .io_region_size = IT8709_IOREG_LENGTH,
840     + .io_rsrc_no = 2,
841     .hw_tx_capable = true,
842     .sample_period = (u32) (1000000000ULL / 115200),
843     .tx_carrier_freq = 38000,
844     @@ -1471,6 +1475,7 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
845     struct rc_dev *rdev = NULL;
846     int ret = -ENOMEM;
847     int model_no;
848     + int io_rsrc_no;
849    
850     ite_dbg("%s called", __func__);
851    
852     @@ -1500,10 +1505,11 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
853    
854     /* get the description for the device */
855     dev_desc = &ite_dev_descs[model_no];
856     + io_rsrc_no = dev_desc->io_rsrc_no;
857    
858     /* validate pnp resources */
859     - if (!pnp_port_valid(pdev, 0) ||
860     - pnp_port_len(pdev, 0) != dev_desc->io_region_size) {
861     + if (!pnp_port_valid(pdev, io_rsrc_no) ||
862     + pnp_port_len(pdev, io_rsrc_no) != dev_desc->io_region_size) {
863     dev_err(&pdev->dev, "IR PNP Port not valid!\n");
864     goto failure;
865     }
866     @@ -1514,7 +1520,7 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
867     }
868    
869     /* store resource values */
870     - itdev->cir_addr = pnp_port_start(pdev, 0);
871     + itdev->cir_addr = pnp_port_start(pdev, io_rsrc_no);
872     itdev->cir_irq = pnp_irq(pdev, 0);
873    
874     /* initialize spinlocks */
875     diff --git a/drivers/media/rc/ite-cir.h b/drivers/media/rc/ite-cir.h
876     index 16a19f5..aa899a0 100644
877     --- a/drivers/media/rc/ite-cir.h
878     +++ b/drivers/media/rc/ite-cir.h
879     @@ -57,6 +57,9 @@ struct ite_dev_params {
880     /* size of the I/O region */
881     int io_region_size;
882    
883     + /* IR pnp I/O resource number */
884     + int io_rsrc_no;
885     +
886     /* true if the hardware supports transmission */
887     bool hw_tx_capable;
888    
889     diff --git a/drivers/media/rc/keymaps/rc-pinnacle-pctv-hd.c b/drivers/media/rc/keymaps/rc-pinnacle-pctv-hd.c
890     index bb10ffe..8d558ae 100644
891     --- a/drivers/media/rc/keymaps/rc-pinnacle-pctv-hd.c
892     +++ b/drivers/media/rc/keymaps/rc-pinnacle-pctv-hd.c
893     @@ -15,43 +15,39 @@
894     /* Pinnacle PCTV HD 800i mini remote */
895    
896     static struct rc_map_table pinnacle_pctv_hd[] = {
897     -
898     - { 0x0f, KEY_1 },
899     - { 0x15, KEY_2 },
900     - { 0x10, KEY_3 },
901     - { 0x18, KEY_4 },
902     - { 0x1b, KEY_5 },
903     - { 0x1e, KEY_6 },
904     - { 0x11, KEY_7 },
905     - { 0x21, KEY_8 },
906     - { 0x12, KEY_9 },
907     - { 0x27, KEY_0 },
908     -
909     - { 0x24, KEY_ZOOM },
910     - { 0x2a, KEY_SUBTITLE },
911     -
912     - { 0x00, KEY_MUTE },
913     - { 0x01, KEY_ENTER }, /* Pinnacle Logo */
914     - { 0x39, KEY_POWER },
915     -
916     - { 0x03, KEY_VOLUMEUP },
917     - { 0x09, KEY_VOLUMEDOWN },
918     - { 0x06, KEY_CHANNELUP },
919     - { 0x0c, KEY_CHANNELDOWN },
920     -
921     - { 0x2d, KEY_REWIND },
922     - { 0x30, KEY_PLAYPAUSE },
923     - { 0x33, KEY_FASTFORWARD },
924     - { 0x3c, KEY_STOP },
925     - { 0x36, KEY_RECORD },
926     - { 0x3f, KEY_EPG }, /* Labeled "?" */
927     + /* Key codes for the tiny Pinnacle remote*/
928     + { 0x0700, KEY_MUTE },
929     + { 0x0701, KEY_MENU }, /* Pinnacle logo */
930     + { 0x0739, KEY_POWER },
931     + { 0x0703, KEY_VOLUMEUP },
932     + { 0x0709, KEY_VOLUMEDOWN },
933     + { 0x0706, KEY_CHANNELUP },
934     + { 0x070c, KEY_CHANNELDOWN },
935     + { 0x070f, KEY_1 },
936     + { 0x0715, KEY_2 },
937     + { 0x0710, KEY_3 },
938     + { 0x0718, KEY_4 },
939     + { 0x071b, KEY_5 },
940     + { 0x071e, KEY_6 },
941     + { 0x0711, KEY_7 },
942     + { 0x0721, KEY_8 },
943     + { 0x0712, KEY_9 },
944     + { 0x0727, KEY_0 },
945     + { 0x0724, KEY_ZOOM }, /* 'Square' key */
946     + { 0x072a, KEY_SUBTITLE }, /* 'T' key */
947     + { 0x072d, KEY_REWIND },
948     + { 0x0730, KEY_PLAYPAUSE },
949     + { 0x0733, KEY_FASTFORWARD },
950     + { 0x0736, KEY_RECORD },
951     + { 0x073c, KEY_STOP },
952     + { 0x073f, KEY_HELP }, /* '?' key */
953     };
954    
955     static struct rc_map_list pinnacle_pctv_hd_map = {
956     .map = {
957     .scan = pinnacle_pctv_hd,
958     .size = ARRAY_SIZE(pinnacle_pctv_hd),
959     - .rc_type = RC_TYPE_UNKNOWN, /* Legacy IR type */
960     + .rc_type = RC_TYPE_RC5,
961     .name = RC_MAP_PINNACLE_PCTV_HD,
962     }
963     };
964     diff --git a/drivers/media/video/uvc/uvc_queue.c b/drivers/media/video/uvc/uvc_queue.c
965     index f14581b..48c5c57 100644
966     --- a/drivers/media/video/uvc/uvc_queue.c
967     +++ b/drivers/media/video/uvc/uvc_queue.c
968     @@ -104,6 +104,8 @@ static int __uvc_free_buffers(struct uvc_video_queue *queue)
969     }
970    
971     if (queue->count) {
972     + uvc_queue_cancel(queue, 0);
973     + INIT_LIST_HEAD(&queue->mainqueue);
974     vfree(queue->mem);
975     queue->count = 0;
976     }
977     diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c
978     index 81d7fa4..150cd70 100644
979     --- a/drivers/misc/lkdtm.c
980     +++ b/drivers/misc/lkdtm.c
981     @@ -120,6 +120,7 @@ static int recur_count = REC_NUM_DEFAULT;
982     static enum cname cpoint = CN_INVALID;
983     static enum ctype cptype = CT_NONE;
984     static int count = DEFAULT_COUNT;
985     +static DEFINE_SPINLOCK(count_lock);
986    
987     module_param(recur_count, int, 0644);
988     MODULE_PARM_DESC(recur_count, " Recursion level for the stack overflow test, "\
989     @@ -230,11 +231,14 @@ static const char *cp_name_to_str(enum cname name)
990     static int lkdtm_parse_commandline(void)
991     {
992     int i;
993     + unsigned long flags;
994    
995     if (cpoint_count < 1 || recur_count < 1)
996     return -EINVAL;
997    
998     + spin_lock_irqsave(&count_lock, flags);
999     count = cpoint_count;
1000     + spin_unlock_irqrestore(&count_lock, flags);
1001    
1002     /* No special parameters */
1003     if (!cpoint_type && !cpoint_name)
1004     @@ -349,6 +353,9 @@ static void lkdtm_do_action(enum ctype which)
1005    
1006     static void lkdtm_handler(void)
1007     {
1008     + unsigned long flags;
1009     +
1010     + spin_lock_irqsave(&count_lock, flags);
1011     count--;
1012     printk(KERN_INFO "lkdtm: Crash point %s of type %s hit, trigger in %d rounds\n",
1013     cp_name_to_str(cpoint), cp_type_to_str(cptype), count);
1014     @@ -357,6 +364,7 @@ static void lkdtm_handler(void)
1015     lkdtm_do_action(cptype);
1016     count = cpoint_count;
1017     }
1018     + spin_unlock_irqrestore(&count_lock, flags);
1019     }
1020    
1021     static int lkdtm_register_cpoint(enum cname which)
1022     diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
1023     index 710339a..b98196c 100644
1024     --- a/drivers/mmc/host/tmio_mmc_pio.c
1025     +++ b/drivers/mmc/host/tmio_mmc_pio.c
1026     @@ -760,8 +760,8 @@ static int tmio_mmc_get_ro(struct mmc_host *mmc)
1027     struct tmio_mmc_host *host = mmc_priv(mmc);
1028     struct tmio_mmc_data *pdata = host->pdata;
1029    
1030     - return ((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) ||
1031     - !(sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT));
1032     + return !((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) ||
1033     + (sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT));
1034     }
1035    
1036     static int tmio_mmc_get_cd(struct mmc_host *mmc)
1037     diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c
1038     index 3e5d0b6..0d28378 100644
1039     --- a/drivers/net/hamradio/6pack.c
1040     +++ b/drivers/net/hamradio/6pack.c
1041     @@ -692,10 +692,10 @@ static void sixpack_close(struct tty_struct *tty)
1042     {
1043     struct sixpack *sp;
1044    
1045     - write_lock(&disc_data_lock);
1046     + write_lock_bh(&disc_data_lock);
1047     sp = tty->disc_data;
1048     tty->disc_data = NULL;
1049     - write_unlock(&disc_data_lock);
1050     + write_unlock_bh(&disc_data_lock);
1051     if (!sp)
1052     return;
1053    
1054     diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
1055     index 4c62839..bc02968 100644
1056     --- a/drivers/net/hamradio/mkiss.c
1057     +++ b/drivers/net/hamradio/mkiss.c
1058     @@ -813,10 +813,10 @@ static void mkiss_close(struct tty_struct *tty)
1059     {
1060     struct mkiss *ax;
1061    
1062     - write_lock(&disc_data_lock);
1063     + write_lock_bh(&disc_data_lock);
1064     ax = tty->disc_data;
1065     tty->disc_data = NULL;
1066     - write_unlock(&disc_data_lock);
1067     + write_unlock_bh(&disc_data_lock);
1068    
1069     if (!ax)
1070     return;
1071     diff --git a/drivers/net/pxa168_eth.c b/drivers/net/pxa168_eth.c
1072     index 89f7540..5f597ca 100644
1073     --- a/drivers/net/pxa168_eth.c
1074     +++ b/drivers/net/pxa168_eth.c
1075     @@ -1273,7 +1273,7 @@ static int pxa168_eth_start_xmit(struct sk_buff *skb, struct net_device *dev)
1076     wmb();
1077     wrl(pep, SDMA_CMD, SDMA_CMD_TXDH | SDMA_CMD_ERD);
1078    
1079     - stats->tx_bytes += skb->len;
1080     + stats->tx_bytes += length;
1081     stats->tx_packets++;
1082     dev->trans_start = jiffies;
1083     if (pep->tx_ring_size - pep->tx_desc_count <= 1) {
1084     diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
1085     index 349a596..76d5089 100644
1086     --- a/drivers/net/wireless/ath/ath5k/base.c
1087     +++ b/drivers/net/wireless/ath/ath5k/base.c
1088     @@ -72,6 +72,11 @@ static int modparam_all_channels;
1089     module_param_named(all_channels, modparam_all_channels, bool, S_IRUGO);
1090     MODULE_PARM_DESC(all_channels, "Expose all channels the device can use.");
1091    
1092     +static int modparam_fastchanswitch;
1093     +module_param_named(fastchanswitch, modparam_fastchanswitch, bool, S_IRUGO);
1094     +MODULE_PARM_DESC(fastchanswitch, "Enable fast channel switching for AR2413/AR5413 radios.");
1095     +
1096     +
1097     /* Module info */
1098     MODULE_AUTHOR("Jiri Slaby");
1099     MODULE_AUTHOR("Nick Kossifidis");
1100     @@ -2644,6 +2649,7 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
1101     struct ath5k_hw *ah = sc->ah;
1102     struct ath_common *common = ath5k_hw_common(ah);
1103     int ret, ani_mode;
1104     + bool fast;
1105    
1106     ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
1107    
1108     @@ -2663,7 +2669,10 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
1109     ath5k_drain_tx_buffs(sc);
1110     if (chan)
1111     sc->curchan = chan;
1112     - ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, chan != NULL,
1113     +
1114     + fast = ((chan != NULL) && modparam_fastchanswitch) ? 1 : 0;
1115     +
1116     + ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, fast,
1117     skip_pcu);
1118     if (ret) {
1119     ATH5K_ERR(sc, "can't reset hardware (%d)\n", ret);
1120     diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c b/drivers/net/wireless/ath/ath5k/eeprom.c
1121     index efb672c..a33ae01 100644
1122     --- a/drivers/net/wireless/ath/ath5k/eeprom.c
1123     +++ b/drivers/net/wireless/ath/ath5k/eeprom.c
1124     @@ -1565,14 +1565,12 @@ ath5k_eeprom_free_pcal_info(struct ath5k_hw *ah, int mode)
1125     if (!chinfo[pier].pd_curves)
1126     continue;
1127    
1128     - for (pdg = 0; pdg < ee->ee_pd_gains[mode]; pdg++) {
1129     + for (pdg = 0; pdg < AR5K_EEPROM_N_PD_CURVES; pdg++) {
1130     struct ath5k_pdgain_info *pd =
1131     &chinfo[pier].pd_curves[pdg];
1132    
1133     - if (pd != NULL) {
1134     - kfree(pd->pd_step);
1135     - kfree(pd->pd_pwr);
1136     - }
1137     + kfree(pd->pd_step);
1138     + kfree(pd->pd_pwr);
1139     }
1140    
1141     kfree(chinfo[pier].pd_curves);
1142     diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
1143     index 8420689..6f53d2b 100644
1144     --- a/drivers/net/wireless/ath/ath5k/reset.c
1145     +++ b/drivers/net/wireless/ath/ath5k/reset.c
1146     @@ -1119,8 +1119,11 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
1147     /* Non fatal, can happen eg.
1148     * on mode change */
1149     ret = 0;
1150     - } else
1151     + } else {
1152     + ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_RESET,
1153     + "fast chan change successful\n");
1154     return 0;
1155     + }
1156     }
1157    
1158     /*
1159     diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
1160     index 9c65459..e137212 100644
1161     --- a/drivers/net/wireless/ath/ath9k/pci.c
1162     +++ b/drivers/net/wireless/ath/ath9k/pci.c
1163     @@ -278,6 +278,12 @@ static int ath_pci_suspend(struct device *device)
1164    
1165     ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
1166    
1167     + /* The device has to be moved to FULLSLEEP forcibly.
1168     + * Otherwise the chip never moved to full sleep,
1169     + * when no interface is up.
1170     + */
1171     + ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP);
1172     +
1173     return 0;
1174     }
1175    
1176     diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
1177     index 7950bc4..7fd7fe6 100644
1178     --- a/drivers/net/wireless/iwlwifi/iwl-core.c
1179     +++ b/drivers/net/wireless/iwlwifi/iwl-core.c
1180     @@ -1772,6 +1772,7 @@ int iwl_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1181     struct iwl_priv *priv = hw->priv;
1182     struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
1183     struct iwl_rxon_context *tmp;
1184     + enum nl80211_iftype newviftype = newtype;
1185     u32 interface_modes;
1186     int err;
1187    
1188     @@ -1814,7 +1815,7 @@ int iwl_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1189    
1190     /* success */
1191     iwl_teardown_interface(priv, vif, true);
1192     - vif->type = newtype;
1193     + vif->type = newviftype;
1194     vif->p2p = newp2p;
1195     err = iwl_setup_interface(priv, ctx);
1196     WARN_ON(err);
1197     diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
1198     index 135df16..46767c5 100644
1199     --- a/drivers/pci/pci-driver.c
1200     +++ b/drivers/pci/pci-driver.c
1201     @@ -624,7 +624,7 @@ static int pci_pm_prepare(struct device *dev)
1202     * system from the sleep state, we'll have to prevent it from signaling
1203     * wake-up.
1204     */
1205     - pm_runtime_resume(dev);
1206     + pm_runtime_get_sync(dev);
1207    
1208     if (drv && drv->pm && drv->pm->prepare)
1209     error = drv->pm->prepare(dev);
1210     @@ -638,6 +638,8 @@ static void pci_pm_complete(struct device *dev)
1211    
1212     if (drv && drv->pm && drv->pm->complete)
1213     drv->pm->complete(dev);
1214     +
1215     + pm_runtime_put_sync(dev);
1216     }
1217    
1218     #else /* !CONFIG_PM_SLEEP */
1219     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
1220     index 4b2bbe8..a5747c2 100644
1221     --- a/drivers/pci/quirks.c
1222     +++ b/drivers/pci/quirks.c
1223     @@ -2758,6 +2758,8 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
1224     }
1225     DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
1226     DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
1227     +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
1228     +DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
1229     #endif /*CONFIG_MMC_RICOH_MMC*/
1230    
1231     #if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP)
1232     diff --git a/drivers/staging/lirc/lirc_zilog.c b/drivers/staging/lirc/lirc_zilog.c
1233     index dd6a57c..4e051f6 100644
1234     --- a/drivers/staging/lirc/lirc_zilog.c
1235     +++ b/drivers/staging/lirc/lirc_zilog.c
1236     @@ -475,14 +475,14 @@ static int lirc_thread(void *arg)
1237     dprintk("poll thread started\n");
1238    
1239     while (!kthread_should_stop()) {
1240     + set_current_state(TASK_INTERRUPTIBLE);
1241     +
1242     /* if device not opened, we can sleep half a second */
1243     if (atomic_read(&ir->open_count) == 0) {
1244     schedule_timeout(HZ/2);
1245     continue;
1246     }
1247    
1248     - set_current_state(TASK_INTERRUPTIBLE);
1249     -
1250     /*
1251     * This is ~113*2 + 24 + jitter (2*repeat gap + code length).
1252     * We use this interval as the chip resets every time you poll
1253     diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
1254     index 26403b8..da9270e 100644
1255     --- a/drivers/tty/serial/pch_uart.c
1256     +++ b/drivers/tty/serial/pch_uart.c
1257     @@ -1392,6 +1392,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,
1258     int fifosize, base_baud;
1259     int port_type;
1260     struct pch_uart_driver_data *board;
1261     + const char *board_name;
1262    
1263     board = &drv_dat[id->driver_data];
1264     port_type = board->port_type;
1265     @@ -1407,7 +1408,8 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,
1266     base_baud = 1843200; /* 1.8432MHz */
1267    
1268     /* quirk for CM-iTC board */
1269     - if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC"))
1270     + board_name = dmi_get_system_info(DMI_BOARD_NAME);
1271     + if (board_name && strstr(board_name, "CM-iTC"))
1272     base_baud = 192000000; /* 192.0MHz */
1273    
1274     switch (port_type) {
1275     diff --git a/drivers/tty/serial/s5pv210.c b/drivers/tty/serial/s5pv210.c
1276     index 6ebccd7..453e5b7 100644
1277     --- a/drivers/tty/serial/s5pv210.c
1278     +++ b/drivers/tty/serial/s5pv210.c
1279     @@ -31,7 +31,7 @@ static int s5pv210_serial_setsource(struct uart_port *port,
1280     struct s3c2410_uartcfg *cfg = port->dev->platform_data;
1281     unsigned long ucon = rd_regl(port, S3C2410_UCON);
1282    
1283     - if ((cfg->clocks_size) == 1)
1284     + if (cfg->flags & NO_NEED_CHECK_CLKSRC)
1285     return 0;
1286    
1287     if (strcmp(clk->name, "pclk") == 0)
1288     @@ -56,7 +56,7 @@ static int s5pv210_serial_getsource(struct uart_port *port,
1289    
1290     clk->divisor = 1;
1291    
1292     - if ((cfg->clocks_size) == 1)
1293     + if (cfg->flags & NO_NEED_CHECK_CLKSRC)
1294     return 0;
1295    
1296     switch (ucon & S5PV210_UCON_CLKMASK) {
1297     diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
1298     index e19e136..1104c9d 100644
1299     --- a/drivers/tty/tty_ldisc.c
1300     +++ b/drivers/tty/tty_ldisc.c
1301     @@ -555,7 +555,7 @@ static void tty_ldisc_flush_works(struct tty_struct *tty)
1302     static int tty_ldisc_wait_idle(struct tty_struct *tty)
1303     {
1304     int ret;
1305     - ret = wait_event_interruptible_timeout(tty_ldisc_idle,
1306     + ret = wait_event_timeout(tty_ldisc_idle,
1307     atomic_read(&tty->ldisc->users) == 1, 5 * HZ);
1308     if (ret < 0)
1309     return ret;
1310     @@ -763,6 +763,8 @@ static int tty_ldisc_reinit(struct tty_struct *tty, int ldisc)
1311     if (IS_ERR(ld))
1312     return -1;
1313    
1314     + WARN_ON_ONCE(tty_ldisc_wait_idle(tty));
1315     +
1316     tty_ldisc_close(tty, tty->ldisc);
1317     tty_ldisc_put(tty->ldisc);
1318     tty->ldisc = NULL;
1319     diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
1320     index e35a176..34e3da5 100644
1321     --- a/drivers/usb/core/driver.c
1322     +++ b/drivers/usb/core/driver.c
1323     @@ -375,7 +375,7 @@ static int usb_unbind_interface(struct device *dev)
1324     * Just re-enable it without affecting the endpoint toggles.
1325     */
1326     usb_enable_interface(udev, intf, false);
1327     - } else if (!error && !intf->dev.power.in_suspend) {
1328     + } else if (!error && !intf->dev.power.is_prepared) {
1329     r = usb_set_interface(udev, intf->altsetting[0].
1330     desc.bInterfaceNumber, 0);
1331     if (r < 0)
1332     @@ -960,7 +960,7 @@ void usb_rebind_intf(struct usb_interface *intf)
1333     }
1334    
1335     /* Try to rebind the interface */
1336     - if (!intf->dev.power.in_suspend) {
1337     + if (!intf->dev.power.is_prepared) {
1338     intf->needs_binding = 0;
1339     rc = device_attach(&intf->dev);
1340     if (rc < 0)
1341     @@ -1107,7 +1107,7 @@ static int usb_resume_interface(struct usb_device *udev,
1342     if (intf->condition == USB_INTERFACE_UNBOUND) {
1343    
1344     /* Carry out a deferred switch to altsetting 0 */
1345     - if (intf->needs_altsetting0 && !intf->dev.power.in_suspend) {
1346     + if (intf->needs_altsetting0 && !intf->dev.power.is_prepared) {
1347     usb_set_interface(udev, intf->altsetting[0].
1348     desc.bInterfaceNumber, 0);
1349     intf->needs_altsetting0 = 0;
1350     @@ -1187,13 +1187,22 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg)
1351     for (i = n - 1; i >= 0; --i) {
1352     intf = udev->actconfig->interface[i];
1353     status = usb_suspend_interface(udev, intf, msg);
1354     +
1355     + /* Ignore errors during system sleep transitions */
1356     + if (!(msg.event & PM_EVENT_AUTO))
1357     + status = 0;
1358     if (status != 0)
1359     break;
1360     }
1361     }
1362     - if (status == 0)
1363     + if (status == 0) {
1364     status = usb_suspend_device(udev, msg);
1365    
1366     + /* Again, ignore errors during system sleep transitions */
1367     + if (!(msg.event & PM_EVENT_AUTO))
1368     + status = 0;
1369     + }
1370     +
1371     /* If the suspend failed, resume interfaces that did get suspended */
1372     if (status != 0) {
1373     msg.event ^= (PM_EVENT_SUSPEND | PM_EVENT_RESUME);
1374     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1375     index 78e7f25..64edb30 100644
1376     --- a/drivers/usb/core/hub.c
1377     +++ b/drivers/usb/core/hub.c
1378     @@ -1643,6 +1643,7 @@ void usb_disconnect(struct usb_device **pdev)
1379     {
1380     struct usb_device *udev = *pdev;
1381     int i;
1382     + struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1383    
1384     if (!udev) {
1385     pr_debug ("%s nodev\n", __func__);
1386     @@ -1670,7 +1671,9 @@ void usb_disconnect(struct usb_device **pdev)
1387     * so that the hardware is now fully quiesced.
1388     */
1389     dev_dbg (&udev->dev, "unregistering device\n");
1390     + mutex_lock(hcd->bandwidth_mutex);
1391     usb_disable_device(udev, 0);
1392     + mutex_unlock(hcd->bandwidth_mutex);
1393     usb_hcd_synchronize_unlinks(udev);
1394    
1395     usb_remove_ep_devs(&udev->ep0);
1396     @@ -2308,6 +2311,10 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
1397     USB_DEVICE_REMOTE_WAKEUP, 0,
1398     NULL, 0,
1399     USB_CTRL_SET_TIMEOUT);
1400     +
1401     + /* System sleep transitions should never fail */
1402     + if (!(msg.event & PM_EVENT_AUTO))
1403     + status = 0;
1404     } else {
1405     /* device has up to 10 msec to fully suspend */
1406     dev_dbg(&udev->dev, "usb %ssuspend\n",
1407     @@ -2546,16 +2553,15 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
1408     struct usb_device *hdev = hub->hdev;
1409     unsigned port1;
1410    
1411     - /* fail if children aren't already suspended */
1412     + /* Warn if children aren't already suspended */
1413     for (port1 = 1; port1 <= hdev->maxchild; port1++) {
1414     struct usb_device *udev;
1415    
1416     udev = hdev->children [port1-1];
1417     if (udev && udev->can_submit) {
1418     - if (!(msg.event & PM_EVENT_AUTO))
1419     - dev_dbg(&intf->dev, "port %d nyet suspended\n",
1420     - port1);
1421     - return -EBUSY;
1422     + dev_warn(&intf->dev, "port %d nyet suspended\n", port1);
1423     + if (msg.event & PM_EVENT_AUTO)
1424     + return -EBUSY;
1425     }
1426     }
1427    
1428     diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
1429     index 5701e85..0b5ec23 100644
1430     --- a/drivers/usb/core/message.c
1431     +++ b/drivers/usb/core/message.c
1432     @@ -1135,15 +1135,26 @@ void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf,
1433     * Deallocates hcd/hardware state for the endpoints (nuking all or most
1434     * pending urbs) and usbcore state for the interfaces, so that usbcore
1435     * must usb_set_configuration() before any interfaces could be used.
1436     + *
1437     + * Must be called with hcd->bandwidth_mutex held.
1438     */
1439     void usb_disable_device(struct usb_device *dev, int skip_ep0)
1440     {
1441     int i;
1442     + struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1443    
1444     /* getting rid of interfaces will disconnect
1445     * any drivers bound to them (a key side effect)
1446     */
1447     if (dev->actconfig) {
1448     + /*
1449     + * FIXME: In order to avoid self-deadlock involving the
1450     + * bandwidth_mutex, we have to mark all the interfaces
1451     + * before unregistering any of them.
1452     + */
1453     + for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
1454     + dev->actconfig->interface[i]->unregistering = 1;
1455     +
1456     for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1457     struct usb_interface *interface;
1458    
1459     @@ -1153,7 +1164,6 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1460     continue;
1461     dev_dbg(&dev->dev, "unregistering interface %s\n",
1462     dev_name(&interface->dev));
1463     - interface->unregistering = 1;
1464     remove_intf_ep_devs(interface);
1465     device_del(&interface->dev);
1466     }
1467     @@ -1172,6 +1182,16 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1468    
1469     dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__,
1470     skip_ep0 ? "non-ep0" : "all");
1471     + if (hcd->driver->check_bandwidth) {
1472     + /* First pass: Cancel URBs, leave endpoint pointers intact. */
1473     + for (i = skip_ep0; i < 16; ++i) {
1474     + usb_disable_endpoint(dev, i, false);
1475     + usb_disable_endpoint(dev, i + USB_DIR_IN, false);
1476     + }
1477     + /* Remove endpoints from the host controller internal state */
1478     + usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1479     + /* Second pass: remove endpoint pointers */
1480     + }
1481     for (i = skip_ep0; i < 16; ++i) {
1482     usb_disable_endpoint(dev, i, true);
1483     usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1484     @@ -1273,6 +1293,8 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1485     interface);
1486     return -EINVAL;
1487     }
1488     + if (iface->unregistering)
1489     + return -ENODEV;
1490    
1491     alt = usb_altnum_to_altsetting(iface, alternate);
1492     if (!alt) {
1493     @@ -1727,6 +1749,7 @@ free_interfaces:
1494     /* if it's already configured, clear out old state first.
1495     * getting rid of old interfaces means unbinding their drivers.
1496     */
1497     + mutex_lock(hcd->bandwidth_mutex);
1498     if (dev->state != USB_STATE_ADDRESS)
1499     usb_disable_device(dev, 1); /* Skip ep0 */
1500    
1501     @@ -1739,7 +1762,6 @@ free_interfaces:
1502     * host controller will not allow submissions to dropped endpoints. If
1503     * this call fails, the device state is unchanged.
1504     */
1505     - mutex_lock(hcd->bandwidth_mutex);
1506     ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
1507     if (ret < 0) {
1508     mutex_unlock(hcd->bandwidth_mutex);
1509     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1510     index 4940717..6fce318 100644
1511     --- a/drivers/usb/host/xhci-pci.c
1512     +++ b/drivers/usb/host/xhci-pci.c
1513     @@ -28,6 +28,9 @@
1514     #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
1515     #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000
1516    
1517     +#define PCI_VENDOR_ID_ETRON 0x1b6f
1518     +#define PCI_DEVICE_ID_ASROCK_P67 0x7023
1519     +
1520     static const char hcd_name[] = "xhci_hcd";
1521    
1522     /* called after powerup, by probe or system-pm "wakeup" */
1523     @@ -120,6 +123,11 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
1524     "has broken MSI implementation\n",
1525     pdev->revision);
1526     }
1527     + if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
1528     + pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
1529     + xhci->quirks |= XHCI_RESET_ON_RESUME;
1530     + xhci_dbg(xhci, "QUIRK: Resetting on resume\n");
1531     + }
1532    
1533     if (pdev->vendor == PCI_VENDOR_ID_NEC)
1534     xhci->quirks |= XHCI_NEC_HOST;
1535     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1536     index 078b566..a5e96cb 100644
1537     --- a/drivers/usb/host/xhci-ring.c
1538     +++ b/drivers/usb/host/xhci-ring.c
1539     @@ -1768,9 +1768,6 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
1540     }
1541     }
1542    
1543     - if ((idx == urb_priv->length - 1) && *status == -EINPROGRESS)
1544     - *status = 0;
1545     -
1546     return finish_td(xhci, td, event_trb, event, ep, status, false);
1547     }
1548    
1549     @@ -1788,8 +1785,7 @@ static int skip_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
1550     idx = urb_priv->td_cnt;
1551     frame = &td->urb->iso_frame_desc[idx];
1552    
1553     - /* The transfer is partly done */
1554     - *status = -EXDEV;
1555     + /* The transfer is partly done. */
1556     frame->status = -EXDEV;
1557    
1558     /* calc actual length */
1559     @@ -2139,6 +2135,11 @@ cleanup:
1560     "status = %d\n",
1561     urb, urb->actual_length, status);
1562     spin_unlock(&xhci->lock);
1563     + /* EHCI, UHCI, and OHCI always unconditionally set the
1564     + * urb->status of an isochronous endpoint to 0.
1565     + */
1566     + if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
1567     + status = 0;
1568     usb_hcd_giveback_urb(bus_to_hcd(urb->dev->bus), urb, status);
1569     spin_lock(&xhci->lock);
1570     }
1571     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
1572     index e5c4861..4209b02 100644
1573     --- a/drivers/usb/host/xhci.c
1574     +++ b/drivers/usb/host/xhci.c
1575     @@ -759,6 +759,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
1576     msleep(100);
1577    
1578     spin_lock_irq(&xhci->lock);
1579     + if (xhci->quirks & XHCI_RESET_ON_RESUME)
1580     + hibernated = true;
1581    
1582     if (!hibernated) {
1583     /* step 1: restore register */
1584     @@ -1396,6 +1398,7 @@ int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
1585     u32 added_ctxs;
1586     unsigned int last_ctx;
1587     u32 new_add_flags, new_drop_flags, new_slot_info;
1588     + struct xhci_virt_device *virt_dev;
1589     int ret = 0;
1590    
1591     ret = xhci_check_args(hcd, udev, ep, 1, true, __func__);
1592     @@ -1418,11 +1421,25 @@ int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
1593     return 0;
1594     }
1595    
1596     - in_ctx = xhci->devs[udev->slot_id]->in_ctx;
1597     - out_ctx = xhci->devs[udev->slot_id]->out_ctx;
1598     + virt_dev = xhci->devs[udev->slot_id];
1599     + in_ctx = virt_dev->in_ctx;
1600     + out_ctx = virt_dev->out_ctx;
1601     ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
1602     ep_index = xhci_get_endpoint_index(&ep->desc);
1603     ep_ctx = xhci_get_ep_ctx(xhci, out_ctx, ep_index);
1604     +
1605     + /* If this endpoint is already in use, and the upper layers are trying
1606     + * to add it again without dropping it, reject the addition.
1607     + */
1608     + if (virt_dev->eps[ep_index].ring &&
1609     + !(le32_to_cpu(ctrl_ctx->drop_flags) &
1610     + xhci_get_endpoint_flag(&ep->desc))) {
1611     + xhci_warn(xhci, "Trying to add endpoint 0x%x "
1612     + "without dropping it.\n",
1613     + (unsigned int) ep->desc.bEndpointAddress);
1614     + return -EINVAL;
1615     + }
1616     +
1617     /* If the HCD has already noted the endpoint is enabled,
1618     * ignore this request.
1619     */
1620     @@ -1437,8 +1454,7 @@ int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
1621     * process context, not interrupt context (or so documenation
1622     * for usb_set_interface() and usb_set_configuration() claim).
1623     */
1624     - if (xhci_endpoint_init(xhci, xhci->devs[udev->slot_id],
1625     - udev, ep, GFP_NOIO) < 0) {
1626     + if (xhci_endpoint_init(xhci, virt_dev, udev, ep, GFP_NOIO) < 0) {
1627     dev_dbg(&udev->dev, "%s - could not initialize ep %#x\n",
1628     __func__, ep->desc.bEndpointAddress);
1629     return -ENOMEM;
1630     diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
1631     index fb85ce3..1e52d5e 100644
1632     --- a/drivers/usb/host/xhci.h
1633     +++ b/drivers/usb/host/xhci.h
1634     @@ -1287,6 +1287,7 @@ struct xhci_hcd {
1635     #define XHCI_NEC_HOST (1 << 2)
1636     #define XHCI_AMD_PLL_FIX (1 << 3)
1637     #define XHCI_BROKEN_MSI (1 << 6)
1638     +#define XHCI_RESET_ON_RESUME (1 << 7)
1639     /* There are two roothubs to keep track of bus suspend info for */
1640     struct xhci_bus_state bus_state[2];
1641     /* Is each xHCI roothub port a USB 3.0, USB 2.0, or USB 1.1 port? */
1642     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1643     index 1627289..2e06b90 100644
1644     --- a/drivers/usb/serial/ftdi_sio.c
1645     +++ b/drivers/usb/serial/ftdi_sio.c
1646     @@ -179,6 +179,7 @@ static struct usb_device_id id_table_combined [] = {
1647     { USB_DEVICE(FTDI_VID, FTDI_232RL_PID) },
1648     { USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) },
1649     { USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },
1650     + { USB_DEVICE(FTDI_VID, FTDI_232H_PID) },
1651     { USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },
1652     { USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
1653     { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) },
1654     @@ -848,7 +849,8 @@ static const char *ftdi_chip_name[] = {
1655     [FT2232C] = "FT2232C",
1656     [FT232RL] = "FT232RL",
1657     [FT2232H] = "FT2232H",
1658     - [FT4232H] = "FT4232H"
1659     + [FT4232H] = "FT4232H",
1660     + [FT232H] = "FT232H"
1661     };
1662    
1663    
1664     @@ -1168,6 +1170,7 @@ static __u32 get_ftdi_divisor(struct tty_struct *tty,
1665     break;
1666     case FT2232H: /* FT2232H chip */
1667     case FT4232H: /* FT4232H chip */
1668     + case FT232H: /* FT232H chip */
1669     if ((baud <= 12000000) & (baud >= 1200)) {
1670     div_value = ftdi_2232h_baud_to_divisor(baud);
1671     } else if (baud < 1200) {
1672     @@ -1429,9 +1432,12 @@ static void ftdi_determine_type(struct usb_serial_port *port)
1673     } else if (version < 0x600) {
1674     /* Assume it's an FT232BM (or FT245BM) */
1675     priv->chip_type = FT232BM;
1676     - } else {
1677     - /* Assume it's an FT232R */
1678     + } else if (version < 0x900) {
1679     + /* Assume it's an FT232RL */
1680     priv->chip_type = FT232RL;
1681     + } else {
1682     + /* Assume it's an FT232H */
1683     + priv->chip_type = FT232H;
1684     }
1685     dev_info(&udev->dev, "Detected %s\n", ftdi_chip_name[priv->chip_type]);
1686     }
1687     @@ -1559,7 +1565,8 @@ static int create_sysfs_attrs(struct usb_serial_port *port)
1688     priv->chip_type == FT2232C ||
1689     priv->chip_type == FT232RL ||
1690     priv->chip_type == FT2232H ||
1691     - priv->chip_type == FT4232H)) {
1692     + priv->chip_type == FT4232H ||
1693     + priv->chip_type == FT232H)) {
1694     retval = device_create_file(&port->dev,
1695     &dev_attr_latency_timer);
1696     }
1697     @@ -1580,7 +1587,8 @@ static void remove_sysfs_attrs(struct usb_serial_port *port)
1698     priv->chip_type == FT2232C ||
1699     priv->chip_type == FT232RL ||
1700     priv->chip_type == FT2232H ||
1701     - priv->chip_type == FT4232H) {
1702     + priv->chip_type == FT4232H ||
1703     + priv->chip_type == FT232H) {
1704     device_remove_file(&port->dev, &dev_attr_latency_timer);
1705     }
1706     }
1707     @@ -2212,6 +2220,7 @@ static int ftdi_tiocmget(struct tty_struct *tty)
1708     case FT232RL:
1709     case FT2232H:
1710     case FT4232H:
1711     + case FT232H:
1712     len = 2;
1713     break;
1714     default:
1715     diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h
1716     index 213fe3d..19584fa 100644
1717     --- a/drivers/usb/serial/ftdi_sio.h
1718     +++ b/drivers/usb/serial/ftdi_sio.h
1719     @@ -156,7 +156,8 @@ enum ftdi_chip_type {
1720     FT2232C = 4,
1721     FT232RL = 5,
1722     FT2232H = 6,
1723     - FT4232H = 7
1724     + FT4232H = 7,
1725     + FT232H = 8
1726     };
1727    
1728     enum ftdi_sio_baudrate {
1729     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1730     index ab1fcdf..19156d1 100644
1731     --- a/drivers/usb/serial/ftdi_sio_ids.h
1732     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1733     @@ -22,6 +22,7 @@
1734     #define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */
1735     #define FTDI_8U2232C_PID 0x6010 /* Dual channel device */
1736     #define FTDI_4232H_PID 0x6011 /* Quad channel hi-speed device */
1737     +#define FTDI_232H_PID 0x6014 /* Single channel hi-speed device */
1738     #define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */
1739     #define FTDI_232RL_PID 0xFBFA /* Product ID for FT232RL */
1740    
1741     diff --git a/drivers/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c
1742     index 5ec5ac1..befbe80 100644
1743     --- a/drivers/watchdog/mtx-1_wdt.c
1744     +++ b/drivers/watchdog/mtx-1_wdt.c
1745     @@ -211,6 +211,12 @@ static int __devinit mtx1_wdt_probe(struct platform_device *pdev)
1746     int ret;
1747    
1748     mtx1_wdt_device.gpio = pdev->resource[0].start;
1749     + ret = gpio_request_one(mtx1_wdt_device.gpio,
1750     + GPIOF_OUT_INIT_HIGH, "mtx1-wdt");
1751     + if (ret < 0) {
1752     + dev_err(&pdev->dev, "failed to request gpio");
1753     + return ret;
1754     + }
1755    
1756     spin_lock_init(&mtx1_wdt_device.lock);
1757     init_completion(&mtx1_wdt_device.stop);
1758     @@ -236,6 +242,8 @@ static int __devexit mtx1_wdt_remove(struct platform_device *pdev)
1759     mtx1_wdt_device.queue = 0;
1760     wait_for_completion(&mtx1_wdt_device.stop);
1761     }
1762     +
1763     + gpio_free(mtx1_wdt_device.gpio);
1764     misc_deregister(&mtx1_wdt_misc);
1765     return 0;
1766     }
1767     diff --git a/fs/block_dev.c b/fs/block_dev.c
1768     index 1a2421f..610e8e0 100644
1769     --- a/fs/block_dev.c
1770     +++ b/fs/block_dev.c
1771     @@ -762,7 +762,19 @@ static struct block_device *bd_start_claiming(struct block_device *bdev,
1772     if (!disk)
1773     return ERR_PTR(-ENXIO);
1774    
1775     - whole = bdget_disk(disk, 0);
1776     + /*
1777     + * Normally, @bdev should equal what's returned from bdget_disk()
1778     + * if partno is 0; however, some drivers (floppy) use multiple
1779     + * bdev's for the same physical device and @bdev may be one of the
1780     + * aliases. Keep @bdev if partno is 0. This means claimer
1781     + * tracking is broken for those devices but it has always been that
1782     + * way.
1783     + */
1784     + if (partno)
1785     + whole = bdget_disk(disk, 0);
1786     + else
1787     + whole = bdgrab(bdev);
1788     +
1789     module_put(disk->fops->owner);
1790     put_disk(disk);
1791     if (!whole)
1792     diff --git a/fs/cifs/fscache.c b/fs/cifs/fscache.c
1793     index 297a43d..05268cf 100644
1794     --- a/fs/cifs/fscache.c
1795     +++ b/fs/cifs/fscache.c
1796     @@ -94,6 +94,7 @@ static void cifs_fscache_disable_inode_cookie(struct inode *inode)
1797     if (cifsi->fscache) {
1798     cFYI(1, "CIFS disabling inode cookie (0x%p)",
1799     cifsi->fscache);
1800     + fscache_uncache_all_inode_pages(cifsi->fscache, inode);
1801     fscache_relinquish_cookie(cifsi->fscache, 1);
1802     cifsi->fscache = NULL;
1803     }
1804     diff --git a/fs/fscache/page.c b/fs/fscache/page.c
1805     index 41c441c..52b59e2 100644
1806     --- a/fs/fscache/page.c
1807     +++ b/fs/fscache/page.c
1808     @@ -967,3 +967,47 @@ void fscache_mark_pages_cached(struct fscache_retrieval *op,
1809     pagevec_reinit(pagevec);
1810     }
1811     EXPORT_SYMBOL(fscache_mark_pages_cached);
1812     +
1813     +/*
1814     + * Uncache all the pages in an inode that are marked PG_fscache, assuming them
1815     + * to be associated with the given cookie.
1816     + */
1817     +void __fscache_uncache_all_inode_pages(struct fscache_cookie *cookie,
1818     + struct inode *inode)
1819     +{
1820     + struct address_space *mapping = inode->i_mapping;
1821     + struct pagevec pvec;
1822     + pgoff_t next;
1823     + int i;
1824     +
1825     + _enter("%p,%p", cookie, inode);
1826     +
1827     + if (!mapping || mapping->nrpages == 0) {
1828     + _leave(" [no pages]");
1829     + return;
1830     + }
1831     +
1832     + pagevec_init(&pvec, 0);
1833     + next = 0;
1834     + while (next <= (loff_t)-1 &&
1835     + pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)
1836     + ) {
1837     + for (i = 0; i < pagevec_count(&pvec); i++) {
1838     + struct page *page = pvec.pages[i];
1839     + pgoff_t page_index = page->index;
1840     +
1841     + ASSERTCMP(page_index, >=, next);
1842     + next = page_index + 1;
1843     +
1844     + if (PageFsCache(page)) {
1845     + __fscache_wait_on_page_write(cookie, page);
1846     + __fscache_uncache_page(cookie, page);
1847     + }
1848     + }
1849     + pagevec_release(&pvec);
1850     + cond_resched();
1851     + }
1852     +
1853     + _leave("");
1854     +}
1855     +EXPORT_SYMBOL(__fscache_uncache_all_inode_pages);
1856     diff --git a/fs/hfsplus/wrapper.c b/fs/hfsplus/wrapper.c
1857     index 3031d81..4ac88ff 100644
1858     --- a/fs/hfsplus/wrapper.c
1859     +++ b/fs/hfsplus/wrapper.c
1860     @@ -36,6 +36,7 @@ int hfsplus_submit_bio(struct block_device *bdev, sector_t sector,
1861     {
1862     DECLARE_COMPLETION_ONSTACK(wait);
1863     struct bio *bio;
1864     + int ret = 0;
1865    
1866     bio = bio_alloc(GFP_NOIO, 1);
1867     bio->bi_sector = sector;
1868     @@ -54,8 +55,10 @@ int hfsplus_submit_bio(struct block_device *bdev, sector_t sector,
1869     wait_for_completion(&wait);
1870    
1871     if (!bio_flagged(bio, BIO_UPTODATE))
1872     - return -EIO;
1873     - return 0;
1874     + ret = -EIO;
1875     +
1876     + bio_put(bio);
1877     + return ret;
1878     }
1879    
1880     static int hfsplus_read_mdb(void *bufptr, struct hfsplus_wd *wd)
1881     diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
1882     index adb45ec..e374050 100644
1883     --- a/fs/lockd/clntproc.c
1884     +++ b/fs/lockd/clntproc.c
1885     @@ -708,7 +708,13 @@ static void nlmclnt_unlock_callback(struct rpc_task *task, void *data)
1886    
1887     if (task->tk_status < 0) {
1888     dprintk("lockd: unlock failed (err = %d)\n", -task->tk_status);
1889     - goto retry_rebind;
1890     + switch (task->tk_status) {
1891     + case -EACCES:
1892     + case -EIO:
1893     + goto die;
1894     + default:
1895     + goto retry_rebind;
1896     + }
1897     }
1898     if (status == NLM_LCK_DENIED_GRACE_PERIOD) {
1899     rpc_delay(task, NLMCLNT_GRACE_WAIT);
1900     diff --git a/fs/locks.c b/fs/locks.c
1901     index 0a4f50d..b286539 100644
1902     --- a/fs/locks.c
1903     +++ b/fs/locks.c
1904     @@ -160,10 +160,28 @@ EXPORT_SYMBOL_GPL(unlock_flocks);
1905    
1906     static struct kmem_cache *filelock_cache __read_mostly;
1907    
1908     +static void locks_init_lock_always(struct file_lock *fl)
1909     +{
1910     + fl->fl_next = NULL;
1911     + fl->fl_fasync = NULL;
1912     + fl->fl_owner = NULL;
1913     + fl->fl_pid = 0;
1914     + fl->fl_nspid = NULL;
1915     + fl->fl_file = NULL;
1916     + fl->fl_flags = 0;
1917     + fl->fl_type = 0;
1918     + fl->fl_start = fl->fl_end = 0;
1919     +}
1920     +
1921     /* Allocate an empty lock structure. */
1922     struct file_lock *locks_alloc_lock(void)
1923     {
1924     - return kmem_cache_alloc(filelock_cache, GFP_KERNEL);
1925     + struct file_lock *fl = kmem_cache_alloc(filelock_cache, GFP_KERNEL);
1926     +
1927     + if (fl)
1928     + locks_init_lock_always(fl);
1929     +
1930     + return fl;
1931     }
1932     EXPORT_SYMBOL_GPL(locks_alloc_lock);
1933    
1934     @@ -200,17 +218,9 @@ void locks_init_lock(struct file_lock *fl)
1935     INIT_LIST_HEAD(&fl->fl_link);
1936     INIT_LIST_HEAD(&fl->fl_block);
1937     init_waitqueue_head(&fl->fl_wait);
1938     - fl->fl_next = NULL;
1939     - fl->fl_fasync = NULL;
1940     - fl->fl_owner = NULL;
1941     - fl->fl_pid = 0;
1942     - fl->fl_nspid = NULL;
1943     - fl->fl_file = NULL;
1944     - fl->fl_flags = 0;
1945     - fl->fl_type = 0;
1946     - fl->fl_start = fl->fl_end = 0;
1947     fl->fl_ops = NULL;
1948     fl->fl_lmops = NULL;
1949     + locks_init_lock_always(fl);
1950     }
1951    
1952     EXPORT_SYMBOL(locks_init_lock);
1953     diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c
1954     index ce153a6..419119c 100644
1955     --- a/fs/nfs/fscache.c
1956     +++ b/fs/nfs/fscache.c
1957     @@ -259,12 +259,10 @@ static void nfs_fscache_disable_inode_cookie(struct inode *inode)
1958     dfprintk(FSCACHE,
1959     "NFS: nfsi 0x%p turning cache off\n", NFS_I(inode));
1960    
1961     - /* Need to invalidate any mapped pages that were read in before
1962     - * turning off the cache.
1963     + /* Need to uncache any pages attached to this inode that
1964     + * fscache knows about before turning off the cache.
1965     */
1966     - if (inode->i_mapping && inode->i_mapping->nrpages)
1967     - invalidate_inode_pages2(inode->i_mapping);
1968     -
1969     + fscache_uncache_all_inode_pages(NFS_I(inode)->fscache, inode);
1970     nfs_fscache_zap_inode_cookie(inode);
1971     }
1972     }
1973     diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
1974     index 57bb31a..19877db 100644
1975     --- a/fs/nfs/inode.c
1976     +++ b/fs/nfs/inode.c
1977     @@ -256,7 +256,8 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
1978    
1979     nfs_attr_check_mountpoint(sb, fattr);
1980    
1981     - if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0 && (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT) == 0)
1982     + if (((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0) &&
1983     + !nfs_attr_use_mounted_on_fileid(fattr))
1984     goto out_no_inode;
1985     if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
1986     goto out_no_inode;
1987     @@ -1294,7 +1295,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1988     if (new_isize != cur_isize) {
1989     /* Do we perhaps have any outstanding writes, or has
1990     * the file grown beyond our last write? */
1991     - if (nfsi->npages == 0 || new_isize > cur_isize) {
1992     + if ((nfsi->npages == 0 && !test_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) ||
1993     + new_isize > cur_isize) {
1994     i_size_write(inode, new_isize);
1995     invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
1996     }
1997     diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
1998     index ce118ce..d10eb7e 100644
1999     --- a/fs/nfs/internal.h
2000     +++ b/fs/nfs/internal.h
2001     @@ -45,6 +45,17 @@ static inline void nfs_attr_check_mountpoint(struct super_block *parent, struct
2002     fattr->valid |= NFS_ATTR_FATTR_MOUNTPOINT;
2003     }
2004    
2005     +static inline int nfs_attr_use_mounted_on_fileid(struct nfs_fattr *fattr)
2006     +{
2007     + if (((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) == 0) ||
2008     + (((fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT) == 0) &&
2009     + ((fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) == 0)))
2010     + return 0;
2011     +
2012     + fattr->fileid = fattr->mounted_on_fileid;
2013     + return 1;
2014     +}
2015     +
2016     struct nfs_clone_mount {
2017     const struct super_block *sb;
2018     const struct dentry *dentry;
2019     diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
2020     index be79dc9..590c09c 100644
2021     --- a/fs/nfs/nfs4filelayout.c
2022     +++ b/fs/nfs/nfs4filelayout.c
2023     @@ -554,13 +554,18 @@ filelayout_decode_layout(struct pnfs_layout_hdr *flo,
2024     __func__, nfl_util, fl->num_fh, fl->first_stripe_index,
2025     fl->pattern_offset);
2026    
2027     - if (!fl->num_fh)
2028     + /* Note that a zero value for num_fh is legal for STRIPE_SPARSE.
2029     + * Futher checking is done in filelayout_check_layout */
2030     + if (fl->num_fh < 0 || fl->num_fh >
2031     + max(NFS4_PNFS_MAX_STRIPE_CNT, NFS4_PNFS_MAX_MULTI_CNT))
2032     goto out_err;
2033    
2034     - fl->fh_array = kzalloc(fl->num_fh * sizeof(struct nfs_fh *),
2035     - gfp_flags);
2036     - if (!fl->fh_array)
2037     - goto out_err;
2038     + if (fl->num_fh > 0) {
2039     + fl->fh_array = kzalloc(fl->num_fh * sizeof(struct nfs_fh *),
2040     + gfp_flags);
2041     + if (!fl->fh_array)
2042     + goto out_err;
2043     + }
2044    
2045     for (i = 0; i < fl->num_fh; i++) {
2046     /* Do we want to use a mempool here? */
2047     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
2048     index d0e15db..d348326 100644
2049     --- a/fs/nfs/nfs4proc.c
2050     +++ b/fs/nfs/nfs4proc.c
2051     @@ -2265,12 +2265,14 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
2052     return nfs4_map_errors(status);
2053     }
2054    
2055     +static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr);
2056     /*
2057     * Get locations and (maybe) other attributes of a referral.
2058     * Note that we'll actually follow the referral later when
2059     * we detect fsid mismatch in inode revalidation
2060     */
2061     -static int nfs4_get_referral(struct inode *dir, const struct qstr *name, struct nfs_fattr *fattr, struct nfs_fh *fhandle)
2062     +static int nfs4_get_referral(struct inode *dir, const struct qstr *name,
2063     + struct nfs_fattr *fattr, struct nfs_fh *fhandle)
2064     {
2065     int status = -ENOMEM;
2066     struct page *page = NULL;
2067     @@ -2288,15 +2290,16 @@ static int nfs4_get_referral(struct inode *dir, const struct qstr *name, struct
2068     goto out;
2069     /* Make sure server returned a different fsid for the referral */
2070     if (nfs_fsid_equal(&NFS_SERVER(dir)->fsid, &locations->fattr.fsid)) {
2071     - dprintk("%s: server did not return a different fsid for a referral at %s\n", __func__, name->name);
2072     + dprintk("%s: server did not return a different fsid for"
2073     + " a referral at %s\n", __func__, name->name);
2074     status = -EIO;
2075     goto out;
2076     }
2077     + /* Fixup attributes for the nfs_lookup() call to nfs_fhget() */
2078     + nfs_fixup_referral_attributes(&locations->fattr);
2079    
2080     + /* replace the lookup nfs_fattr with the locations nfs_fattr */
2081     memcpy(fattr, &locations->fattr, sizeof(struct nfs_fattr));
2082     - fattr->valid |= NFS_ATTR_FATTR_V4_REFERRAL;
2083     - if (!fattr->mode)
2084     - fattr->mode = S_IFDIR;
2085     memset(fhandle, 0, sizeof(struct nfs_fh));
2086     out:
2087     if (page)
2088     @@ -4657,11 +4660,15 @@ static size_t nfs4_xattr_list_nfs4_acl(struct dentry *dentry, char *list,
2089     return len;
2090     }
2091    
2092     +/*
2093     + * nfs_fhget will use either the mounted_on_fileid or the fileid
2094     + */
2095     static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr)
2096     {
2097     - if (!((fattr->valid & NFS_ATTR_FATTR_FILEID) &&
2098     - (fattr->valid & NFS_ATTR_FATTR_FSID) &&
2099     - (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)))
2100     + if (!(((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) ||
2101     + (fattr->valid & NFS_ATTR_FATTR_FILEID)) &&
2102     + (fattr->valid & NFS_ATTR_FATTR_FSID) &&
2103     + (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)))
2104     return;
2105    
2106     fattr->valid |= NFS_ATTR_FATTR_TYPE | NFS_ATTR_FATTR_MODE |
2107     @@ -4676,7 +4683,6 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name,
2108     struct nfs_server *server = NFS_SERVER(dir);
2109     u32 bitmask[2] = {
2110     [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS,
2111     - [1] = FATTR4_WORD1_MOUNTED_ON_FILEID,
2112     };
2113     struct nfs4_fs_locations_arg args = {
2114     .dir_fh = NFS_FH(dir),
2115     @@ -4695,11 +4701,18 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name,
2116     int status;
2117    
2118     dprintk("%s: start\n", __func__);
2119     +
2120     + /* Ask for the fileid of the absent filesystem if mounted_on_fileid
2121     + * is not supported */
2122     + if (NFS_SERVER(dir)->attr_bitmask[1] & FATTR4_WORD1_MOUNTED_ON_FILEID)
2123     + bitmask[1] |= FATTR4_WORD1_MOUNTED_ON_FILEID;
2124     + else
2125     + bitmask[0] |= FATTR4_WORD0_FILEID;
2126     +
2127     nfs_fattr_init(&fs_locations->fattr);
2128     fs_locations->server = server;
2129     fs_locations->nlocations = 0;
2130     status = nfs4_call_sync(server->client, server, &msg, &args.seq_args, &res.seq_res, 0);
2131     - nfs_fixup_referral_attributes(&fs_locations->fattr);
2132     dprintk("%s: returned status = %d\n", __func__, status);
2133     return status;
2134     }
2135     diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
2136     index c3ccd2c..7685279 100644
2137     --- a/fs/nfs/nfs4xdr.c
2138     +++ b/fs/nfs/nfs4xdr.c
2139     @@ -3030,7 +3030,7 @@ out_overflow:
2140     return -EIO;
2141     }
2142    
2143     -static int decode_attr_error(struct xdr_stream *xdr, uint32_t *bitmap)
2144     +static int decode_attr_error(struct xdr_stream *xdr, uint32_t *bitmap, int32_t *res)
2145     {
2146     __be32 *p;
2147    
2148     @@ -3041,7 +3041,7 @@ static int decode_attr_error(struct xdr_stream *xdr, uint32_t *bitmap)
2149     if (unlikely(!p))
2150     goto out_overflow;
2151     bitmap[0] &= ~FATTR4_WORD0_RDATTR_ERROR;
2152     - return -be32_to_cpup(p);
2153     + *res = -be32_to_cpup(p);
2154     }
2155     return 0;
2156     out_overflow:
2157     @@ -4002,6 +4002,7 @@ static int decode_getfattr_attrs(struct xdr_stream *xdr, uint32_t *bitmap,
2158     int status;
2159     umode_t fmode = 0;
2160     uint32_t type;
2161     + int32_t err;
2162    
2163     status = decode_attr_type(xdr, bitmap, &type);
2164     if (status < 0)
2165     @@ -4027,13 +4028,12 @@ static int decode_getfattr_attrs(struct xdr_stream *xdr, uint32_t *bitmap,
2166     goto xdr_error;
2167     fattr->valid |= status;
2168    
2169     - status = decode_attr_error(xdr, bitmap);
2170     - if (status == -NFS4ERR_WRONGSEC) {
2171     - nfs_fixup_secinfo_attributes(fattr, fh);
2172     - status = 0;
2173     - }
2174     + err = 0;
2175     + status = decode_attr_error(xdr, bitmap, &err);
2176     if (status < 0)
2177     goto xdr_error;
2178     + if (err == -NFS4ERR_WRONGSEC)
2179     + nfs_fixup_secinfo_attributes(fattr, fh);
2180    
2181     status = decode_attr_filehandle(xdr, bitmap, fh);
2182     if (status < 0)
2183     diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
2184     index 18b3e89..fbb2a5e 100644
2185     --- a/fs/nfsd/Kconfig
2186     +++ b/fs/nfsd/Kconfig
2187     @@ -82,6 +82,7 @@ config NFSD_V4
2188     select NFSD_V3
2189     select FS_POSIX_ACL
2190     select SUNRPC_GSS
2191     + select CRYPTO
2192     help
2193     This option enables support in your system's NFS server for
2194     version 4 of the NFS protocol (RFC 3530).
2195     diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
2196     index 1f5eae4..2b1449d 100644
2197     --- a/fs/nfsd/nfsctl.c
2198     +++ b/fs/nfsd/nfsctl.c
2199     @@ -13,6 +13,7 @@
2200     #include <linux/lockd/lockd.h>
2201     #include <linux/sunrpc/clnt.h>
2202     #include <linux/sunrpc/gss_api.h>
2203     +#include <linux/sunrpc/gss_krb5_enctypes.h>
2204    
2205     #include "idmap.h"
2206     #include "nfsd.h"
2207     @@ -189,18 +190,10 @@ static struct file_operations export_features_operations = {
2208     .release = single_release,
2209     };
2210    
2211     -#ifdef CONFIG_SUNRPC_GSS
2212     +#if defined(CONFIG_SUNRPC_GSS) || defined(CONFIG_SUNRPC_GSS_MODULE)
2213     static int supported_enctypes_show(struct seq_file *m, void *v)
2214     {
2215     - struct gss_api_mech *k5mech;
2216     -
2217     - k5mech = gss_mech_get_by_name("krb5");
2218     - if (k5mech == NULL)
2219     - goto out;
2220     - if (k5mech->gm_upcall_enctypes != NULL)
2221     - seq_printf(m, k5mech->gm_upcall_enctypes);
2222     - gss_mech_put(k5mech);
2223     -out:
2224     + seq_printf(m, KRB5_SUPPORTED_ENCTYPES);
2225     return 0;
2226     }
2227    
2228     @@ -215,7 +208,7 @@ static struct file_operations supported_enctypes_ops = {
2229     .llseek = seq_lseek,
2230     .release = single_release,
2231     };
2232     -#endif /* CONFIG_SUNRPC_GSS */
2233     +#endif /* CONFIG_SUNRPC_GSS or CONFIG_SUNRPC_GSS_MODULE */
2234    
2235     extern int nfsd_pool_stats_open(struct inode *inode, struct file *file);
2236     extern int nfsd_pool_stats_release(struct inode *inode, struct file *file);
2237     @@ -1427,9 +1420,9 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
2238     [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR},
2239     [NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO},
2240     [NFSD_MaxBlkSize] = {"max_block_size", &transaction_ops, S_IWUSR|S_IRUGO},
2241     -#ifdef CONFIG_SUNRPC_GSS
2242     +#if defined(CONFIG_SUNRPC_GSS) || defined(CONFIG_SUNRPC_GSS_MODULE)
2243     [NFSD_SupportedEnctypes] = {"supported_krb5_enctypes", &supported_enctypes_ops, S_IRUGO},
2244     -#endif /* CONFIG_SUNRPC_GSS */
2245     +#endif /* CONFIG_SUNRPC_GSS or CONFIG_SUNRPC_GSS_MODULE */
2246     #ifdef CONFIG_NFSD_V4
2247     [NFSD_Leasetime] = {"nfsv4leasetime", &transaction_ops, S_IWUSR|S_IRUSR},
2248     [NFSD_Gracetime] = {"nfsv4gracetime", &transaction_ops, S_IWUSR|S_IRUSR},
2249     diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
2250     index 129f3c9..d80b2d8 100644
2251     --- a/fs/nfsd/vfs.c
2252     +++ b/fs/nfsd/vfs.c
2253     @@ -699,7 +699,15 @@ nfsd_access(struct svc_rqst *rqstp, struct svc_fh *fhp, u32 *access, u32 *suppor
2254     }
2255     #endif /* CONFIG_NFSD_V3 */
2256    
2257     +static int nfsd_open_break_lease(struct inode *inode, int access)
2258     +{
2259     + unsigned int mode;
2260    
2261     + if (access & NFSD_MAY_NOT_BREAK_LEASE)
2262     + return 0;
2263     + mode = (access & NFSD_MAY_WRITE) ? O_WRONLY : O_RDONLY;
2264     + return break_lease(inode, mode | O_NONBLOCK);
2265     +}
2266    
2267     /*
2268     * Open an existing file or directory.
2269     @@ -747,12 +755,7 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
2270     if (!inode->i_fop)
2271     goto out;
2272    
2273     - /*
2274     - * Check to see if there are any leases on this file.
2275     - * This may block while leases are broken.
2276     - */
2277     - if (!(access & NFSD_MAY_NOT_BREAK_LEASE))
2278     - host_err = break_lease(inode, O_NONBLOCK | ((access & NFSD_MAY_WRITE) ? O_WRONLY : 0));
2279     + host_err = nfsd_open_break_lease(inode, access);
2280     if (host_err) /* NOMEM or WOULDBLOCK */
2281     goto out_nfserr;
2282    
2283     @@ -1653,8 +1656,10 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,
2284     if (!dold->d_inode)
2285     goto out_drop_write;
2286     host_err = nfsd_break_lease(dold->d_inode);
2287     - if (host_err)
2288     + if (host_err) {
2289     + err = nfserrno(host_err);
2290     goto out_drop_write;
2291     + }
2292     host_err = vfs_link(dold, dirp, dnew);
2293     if (!host_err) {
2294     err = nfserrno(commit_metadata(ffhp));
2295     diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
2296     index e5a3f58..dfb0ec6 100644
2297     --- a/include/asm-generic/bug.h
2298     +++ b/include/asm-generic/bug.h
2299     @@ -162,9 +162,6 @@ extern void warn_slowpath_null(const char *file, const int line);
2300     unlikely(__ret_warn_once); \
2301     })
2302    
2303     -#define WARN_ON_RATELIMIT(condition, state) \
2304     - WARN_ON((condition) && __ratelimit(state))
2305     -
2306     /*
2307     * WARN_ON_SMP() is for cases that the warning is either
2308     * meaningless for !SMP or may even cause failures.
2309     diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
2310     index be50d9e..acdb143 100644
2311     --- a/include/linux/blk_types.h
2312     +++ b/include/linux/blk_types.h
2313     @@ -168,7 +168,7 @@ enum rq_flag_bits {
2314     (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
2315     #define REQ_COMMON_MASK \
2316     (REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_DISCARD | \
2317     - REQ_NOIDLE | REQ_FLUSH | REQ_FUA)
2318     + REQ_NOIDLE | REQ_FLUSH | REQ_FUA | REQ_SECURE)
2319     #define REQ_CLONE_MASK REQ_COMMON_MASK
2320    
2321     #define REQ_RAHEAD (1 << __REQ_RAHEAD)
2322     diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
2323     index c37b21a..24e2932 100644
2324     --- a/include/linux/clocksource.h
2325     +++ b/include/linux/clocksource.h
2326     @@ -192,6 +192,7 @@ struct clocksource {
2327     #ifdef CONFIG_CLOCKSOURCE_WATCHDOG
2328     /* Watchdog related data, used by the framework */
2329     struct list_head wd_list;
2330     + cycle_t cs_last;
2331     cycle_t wd_last;
2332     #endif
2333     };
2334     diff --git a/include/linux/connector.h b/include/linux/connector.h
2335     index 7c60d09..f696bcc 100644
2336     --- a/include/linux/connector.h
2337     +++ b/include/linux/connector.h
2338     @@ -44,7 +44,7 @@
2339     #define CN_VAL_DRBD 0x1
2340     #define CN_KVP_IDX 0x9 /* HyperV KVP */
2341    
2342     -#define CN_NETLINK_USERS 9
2343     +#define CN_NETLINK_USERS 10 /* Highest index + 1 */
2344    
2345     /*
2346     * Maximum connector's message size.
2347     diff --git a/include/linux/device.h b/include/linux/device.h
2348     index d08399d..779e860 100644
2349     --- a/include/linux/device.h
2350     +++ b/include/linux/device.h
2351     @@ -506,13 +506,13 @@ static inline int device_is_registered(struct device *dev)
2352    
2353     static inline void device_enable_async_suspend(struct device *dev)
2354     {
2355     - if (!dev->power.in_suspend)
2356     + if (!dev->power.is_prepared)
2357     dev->power.async_suspend = true;
2358     }
2359    
2360     static inline void device_disable_async_suspend(struct device *dev)
2361     {
2362     - if (!dev->power.in_suspend)
2363     + if (!dev->power.is_prepared)
2364     dev->power.async_suspend = false;
2365     }
2366    
2367     diff --git a/include/linux/fscache.h b/include/linux/fscache.h
2368     index 7c4d72f..9ec20de 100644
2369     --- a/include/linux/fscache.h
2370     +++ b/include/linux/fscache.h
2371     @@ -204,6 +204,8 @@ extern bool __fscache_check_page_write(struct fscache_cookie *, struct page *);
2372     extern void __fscache_wait_on_page_write(struct fscache_cookie *, struct page *);
2373     extern bool __fscache_maybe_release_page(struct fscache_cookie *, struct page *,
2374     gfp_t);
2375     +extern void __fscache_uncache_all_inode_pages(struct fscache_cookie *,
2376     + struct inode *);
2377    
2378     /**
2379     * fscache_register_netfs - Register a filesystem as desiring caching services
2380     @@ -643,4 +645,23 @@ bool fscache_maybe_release_page(struct fscache_cookie *cookie,
2381     return false;
2382     }
2383    
2384     +/**
2385     + * fscache_uncache_all_inode_pages - Uncache all an inode's pages
2386     + * @cookie: The cookie representing the inode's cache object.
2387     + * @inode: The inode to uncache pages from.
2388     + *
2389     + * Uncache all the pages in an inode that are marked PG_fscache, assuming them
2390     + * to be associated with the given cookie.
2391     + *
2392     + * This function may sleep. It will wait for pages that are being written out
2393     + * and will wait whilst the PG_fscache mark is removed by the cache.
2394     + */
2395     +static inline
2396     +void fscache_uncache_all_inode_pages(struct fscache_cookie *cookie,
2397     + struct inode *inode)
2398     +{
2399     + if (fscache_cookie_valid(cookie))
2400     + __fscache_uncache_all_inode_pages(cookie, inode);
2401     +}
2402     +
2403     #endif /* _LINUX_FSCACHE_H */
2404     diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h
2405     index 72bfa5a..8e37fba 100644
2406     --- a/include/linux/if_packet.h
2407     +++ b/include/linux/if_packet.h
2408     @@ -62,6 +62,7 @@ struct tpacket_auxdata {
2409     __u16 tp_mac;
2410     __u16 tp_net;
2411     __u16 tp_vlan_tci;
2412     + __u16 tp_padding;
2413     };
2414    
2415     /* Rx ring - header status */
2416     @@ -100,6 +101,7 @@ struct tpacket2_hdr {
2417     __u32 tp_sec;
2418     __u32 tp_nsec;
2419     __u16 tp_vlan_tci;
2420     + __u16 tp_padding;
2421     };
2422    
2423     #define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
2424     diff --git a/include/linux/netfilter/ipset/ip_set_ahash.h b/include/linux/netfilter/ipset/ip_set_ahash.h
2425     index a0196ac..ac3c822 100644
2426     --- a/include/linux/netfilter/ipset/ip_set_ahash.h
2427     +++ b/include/linux/netfilter/ipset/ip_set_ahash.h
2428     @@ -839,7 +839,7 @@ type_pf_tdel(struct ip_set *set, void *value, u32 timeout)
2429     struct htable *t = h->table;
2430     const struct type_pf_elem *d = value;
2431     struct hbucket *n;
2432     - int i, ret = 0;
2433     + int i;
2434     struct type_pf_elem *data;
2435     u32 key;
2436    
2437     @@ -850,7 +850,7 @@ type_pf_tdel(struct ip_set *set, void *value, u32 timeout)
2438     if (!type_pf_data_equal(data, d))
2439     continue;
2440     if (type_pf_data_expired(data))
2441     - ret = -IPSET_ERR_EXIST;
2442     + return -IPSET_ERR_EXIST;
2443     if (i != n->pos - 1)
2444     /* Not last one */
2445     type_pf_data_copy(data, ahash_tdata(n, n->pos - 1));
2446     diff --git a/include/linux/netfilter/ipset/ip_set_timeout.h b/include/linux/netfilter/ipset/ip_set_timeout.h
2447     index 9f30c5f..bb773c1 100644
2448     --- a/include/linux/netfilter/ipset/ip_set_timeout.h
2449     +++ b/include/linux/netfilter/ipset/ip_set_timeout.h
2450     @@ -45,7 +45,7 @@ ip_set_timeout_test(unsigned long timeout)
2451     {
2452     return timeout != IPSET_ELEM_UNSET &&
2453     (timeout == IPSET_ELEM_PERMANENT ||
2454     - time_after(timeout, jiffies));
2455     + time_is_after_jiffies(timeout));
2456     }
2457    
2458     static inline bool
2459     @@ -53,7 +53,7 @@ ip_set_timeout_expired(unsigned long timeout)
2460     {
2461     return timeout != IPSET_ELEM_UNSET &&
2462     timeout != IPSET_ELEM_PERMANENT &&
2463     - time_before(timeout, jiffies);
2464     + time_is_before_jiffies(timeout);
2465     }
2466    
2467     static inline unsigned long
2468     @@ -64,7 +64,7 @@ ip_set_timeout_set(u32 timeout)
2469     if (!timeout)
2470     return IPSET_ELEM_PERMANENT;
2471    
2472     - t = timeout * HZ + jiffies;
2473     + t = msecs_to_jiffies(timeout * 1000) + jiffies;
2474     if (t == IPSET_ELEM_UNSET || t == IPSET_ELEM_PERMANENT)
2475     /* Bingo! */
2476     t++;
2477     @@ -75,7 +75,8 @@ ip_set_timeout_set(u32 timeout)
2478     static inline u32
2479     ip_set_timeout_get(unsigned long timeout)
2480     {
2481     - return timeout == IPSET_ELEM_PERMANENT ? 0 : (timeout - jiffies)/HZ;
2482     + return timeout == IPSET_ELEM_PERMANENT ? 0 :
2483     + jiffies_to_msecs(timeout - jiffies)/1000;
2484     }
2485    
2486     #else
2487     @@ -89,14 +90,14 @@ static inline bool
2488     ip_set_timeout_test(unsigned long timeout)
2489     {
2490     return timeout == IPSET_ELEM_PERMANENT ||
2491     - time_after(timeout, jiffies);
2492     + time_is_after_jiffies(timeout);
2493     }
2494    
2495     static inline bool
2496     ip_set_timeout_expired(unsigned long timeout)
2497     {
2498     return timeout != IPSET_ELEM_PERMANENT &&
2499     - time_before(timeout, jiffies);
2500     + time_is_before_jiffies(timeout);
2501     }
2502    
2503     static inline unsigned long
2504     @@ -107,7 +108,7 @@ ip_set_timeout_set(u32 timeout)
2505     if (!timeout)
2506     return IPSET_ELEM_PERMANENT;
2507    
2508     - t = timeout * HZ + jiffies;
2509     + t = msecs_to_jiffies(timeout * 1000) + jiffies;
2510     if (t == IPSET_ELEM_PERMANENT)
2511     /* Bingo! :-) */
2512     t++;
2513     @@ -118,7 +119,8 @@ ip_set_timeout_set(u32 timeout)
2514     static inline u32
2515     ip_set_timeout_get(unsigned long timeout)
2516     {
2517     - return timeout == IPSET_ELEM_PERMANENT ? 0 : (timeout - jiffies)/HZ;
2518     + return timeout == IPSET_ELEM_PERMANENT ? 0 :
2519     + jiffies_to_msecs(timeout - jiffies)/1000;
2520     }
2521     #endif /* ! IP_SET_BITMAP_TIMEOUT */
2522    
2523     diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
2524     index 8652a4f..d041a4a 100644
2525     --- a/include/linux/pci_ids.h
2526     +++ b/include/linux/pci_ids.h
2527     @@ -1537,6 +1537,7 @@
2528     #define PCI_DEVICE_ID_RICOH_RL5C476 0x0476
2529     #define PCI_DEVICE_ID_RICOH_RL5C478 0x0478
2530     #define PCI_DEVICE_ID_RICOH_R5C822 0x0822
2531     +#define PCI_DEVICE_ID_RICOH_R5CE823 0xe823
2532     #define PCI_DEVICE_ID_RICOH_R5C832 0x0832
2533     #define PCI_DEVICE_ID_RICOH_R5C843 0x0843
2534    
2535     diff --git a/include/linux/pm.h b/include/linux/pm.h
2536     index 512e091..fffb12f 100644
2537     --- a/include/linux/pm.h
2538     +++ b/include/linux/pm.h
2539     @@ -425,7 +425,8 @@ struct dev_pm_info {
2540     pm_message_t power_state;
2541     unsigned int can_wakeup:1;
2542     unsigned int async_suspend:1;
2543     - unsigned int in_suspend:1; /* Owned by the PM core */
2544     + bool is_prepared:1; /* Owned by the PM core */
2545     + bool is_suspended:1; /* Ditto */
2546     spinlock_t lock;
2547     #ifdef CONFIG_PM_SLEEP
2548     struct list_head entry;
2549     diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h
2550     index 03ff67b..2f00715 100644
2551     --- a/include/linux/ratelimit.h
2552     +++ b/include/linux/ratelimit.h
2553     @@ -41,4 +41,44 @@ extern struct ratelimit_state printk_ratelimit_state;
2554     extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
2555     #define __ratelimit(state) ___ratelimit(state, __func__)
2556    
2557     +#ifdef CONFIG_PRINTK
2558     +
2559     +#define WARN_ON_RATELIMIT(condition, state) \
2560     + WARN_ON((condition) && __ratelimit(state))
2561     +
2562     +#define __WARN_RATELIMIT(condition, state, format...) \
2563     +({ \
2564     + int rtn = 0; \
2565     + if (unlikely(__ratelimit(state))) \
2566     + rtn = WARN(condition, format); \
2567     + rtn; \
2568     +})
2569     +
2570     +#define WARN_RATELIMIT(condition, format...) \
2571     +({ \
2572     + static DEFINE_RATELIMIT_STATE(_rs, \
2573     + DEFAULT_RATELIMIT_INTERVAL, \
2574     + DEFAULT_RATELIMIT_BURST); \
2575     + __WARN_RATELIMIT(condition, &_rs, format); \
2576     +})
2577     +
2578     +#else
2579     +
2580     +#define WARN_ON_RATELIMIT(condition, state) \
2581     + WARN_ON(condition)
2582     +
2583     +#define __WARN_RATELIMIT(condition, state, format...) \
2584     +({ \
2585     + int rtn = WARN(condition, format); \
2586     + rtn; \
2587     +})
2588     +
2589     +#define WARN_RATELIMIT(condition, format...) \
2590     +({ \
2591     + int rtn = WARN(condition, format); \
2592     + rtn; \
2593     +})
2594     +
2595     +#endif
2596     +
2597     #endif /* _LINUX_RATELIMIT_H */
2598     diff --git a/include/linux/sunrpc/gss_krb5_enctypes.h b/include/linux/sunrpc/gss_krb5_enctypes.h
2599     new file mode 100644
2600     index 0000000..ec6234e
2601     --- /dev/null
2602     +++ b/include/linux/sunrpc/gss_krb5_enctypes.h
2603     @@ -0,0 +1,4 @@
2604     +/*
2605     + * Dumb way to share this static piece of information with nfsd
2606     + */
2607     +#define KRB5_SUPPORTED_ENCTYPES "18,17,16,23,3,1,2"
2608     diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h
2609     index f73c482..fe2d8e6 100644
2610     --- a/include/linux/sunrpc/sched.h
2611     +++ b/include/linux/sunrpc/sched.h
2612     @@ -84,7 +84,8 @@ struct rpc_task {
2613     #endif
2614     unsigned char tk_priority : 2,/* Task priority */
2615     tk_garb_retry : 2,
2616     - tk_cred_retry : 2;
2617     + tk_cred_retry : 2,
2618     + tk_rebind_retry : 2;
2619     };
2620     #define tk_xprt tk_client->cl_xprt
2621    
2622     diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
2623     index 86aefed..e5bf4c8 100644
2624     --- a/include/net/ip_vs.h
2625     +++ b/include/net/ip_vs.h
2626     @@ -802,7 +802,8 @@ struct netns_ipvs {
2627     struct list_head rs_table[IP_VS_RTAB_SIZE];
2628     /* ip_vs_app */
2629     struct list_head app_list;
2630     -
2631     + /* ip_vs_ftp */
2632     + struct ip_vs_app *ftp_app;
2633     /* ip_vs_proto */
2634     #define IP_VS_PROTO_TAB_SIZE 32 /* must be power of 2 */
2635     struct ip_vs_proto_data *proto_data_table[IP_VS_PROTO_TAB_SIZE];
2636     diff --git a/init/calibrate.c b/init/calibrate.c
2637     index 76ac919..30a44cd 100644
2638     --- a/init/calibrate.c
2639     +++ b/init/calibrate.c
2640     @@ -185,30 +185,32 @@ recalibrate:
2641    
2642     void __cpuinit calibrate_delay(void)
2643     {
2644     + unsigned long lpj;
2645     static bool printed;
2646    
2647     if (preset_lpj) {
2648     - loops_per_jiffy = preset_lpj;
2649     + lpj = preset_lpj;
2650     if (!printed)
2651     pr_info("Calibrating delay loop (skipped) "
2652     "preset value.. ");
2653     } else if ((!printed) && lpj_fine) {
2654     - loops_per_jiffy = lpj_fine;
2655     + lpj = lpj_fine;
2656     pr_info("Calibrating delay loop (skipped), "
2657     "value calculated using timer frequency.. ");
2658     - } else if ((loops_per_jiffy = calibrate_delay_direct()) != 0) {
2659     + } else if ((lpj = calibrate_delay_direct()) != 0) {
2660     if (!printed)
2661     pr_info("Calibrating delay using timer "
2662     "specific routine.. ");
2663     } else {
2664     if (!printed)
2665     pr_info("Calibrating delay loop... ");
2666     - loops_per_jiffy = calibrate_delay_converge();
2667     + lpj = calibrate_delay_converge();
2668     }
2669     if (!printed)
2670     pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n",
2671     - loops_per_jiffy/(500000/HZ),
2672     - (loops_per_jiffy/(5000/HZ)) % 100, loops_per_jiffy);
2673     + lpj/(500000/HZ),
2674     + (lpj/(5000/HZ)) % 100, lpj);
2675    
2676     + loops_per_jiffy = lpj;
2677     printed = true;
2678     }
2679     diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
2680     index ca0aacc..1a78c1a 100644
2681     --- a/kernel/power/snapshot.c
2682     +++ b/kernel/power/snapshot.c
2683     @@ -1199,7 +1199,11 @@ static void free_unnecessary_pages(void)
2684     to_free_highmem = alloc_highmem - save;
2685     } else {
2686     to_free_highmem = 0;
2687     - to_free_normal -= save - alloc_highmem;
2688     + save -= alloc_highmem;
2689     + if (to_free_normal > save)
2690     + to_free_normal -= save;
2691     + else
2692     + to_free_normal = 0;
2693     }
2694    
2695     memory_bm_position_reset(&copy_bm);
2696     diff --git a/kernel/power/user.c b/kernel/power/user.c
2697     index 7d02d33..42ddbc6 100644
2698     --- a/kernel/power/user.c
2699     +++ b/kernel/power/user.c
2700     @@ -113,8 +113,10 @@ static int snapshot_open(struct inode *inode, struct file *filp)
2701     if (error)
2702     pm_notifier_call_chain(PM_POST_RESTORE);
2703     }
2704     - if (error)
2705     + if (error) {
2706     + free_basic_memory_bitmaps();
2707     atomic_inc(&snapshot_device_available);
2708     + }
2709     data->frozen = 0;
2710     data->ready = 0;
2711     data->platform_support = 0;
2712     diff --git a/kernel/taskstats.c b/kernel/taskstats.c
2713     index 9ffea36..fc0f220 100644
2714     --- a/kernel/taskstats.c
2715     +++ b/kernel/taskstats.c
2716     @@ -285,16 +285,18 @@ ret:
2717     static int add_del_listener(pid_t pid, const struct cpumask *mask, int isadd)
2718     {
2719     struct listener_list *listeners;
2720     - struct listener *s, *tmp;
2721     + struct listener *s, *tmp, *s2;
2722     unsigned int cpu;
2723    
2724     if (!cpumask_subset(mask, cpu_possible_mask))
2725     return -EINVAL;
2726    
2727     + s = NULL;
2728     if (isadd == REGISTER) {
2729     for_each_cpu(cpu, mask) {
2730     - s = kmalloc_node(sizeof(struct listener), GFP_KERNEL,
2731     - cpu_to_node(cpu));
2732     + if (!s)
2733     + s = kmalloc_node(sizeof(struct listener),
2734     + GFP_KERNEL, cpu_to_node(cpu));
2735     if (!s)
2736     goto cleanup;
2737     s->pid = pid;
2738     @@ -303,9 +305,16 @@ static int add_del_listener(pid_t pid, const struct cpumask *mask, int isadd)
2739    
2740     listeners = &per_cpu(listener_array, cpu);
2741     down_write(&listeners->sem);
2742     + list_for_each_entry_safe(s2, tmp, &listeners->list, list) {
2743     + if (s2->pid == pid)
2744     + goto next_cpu;
2745     + }
2746     list_add(&s->list, &listeners->list);
2747     + s = NULL;
2748     +next_cpu:
2749     up_write(&listeners->sem);
2750     }
2751     + kfree(s);
2752     return 0;
2753     }
2754    
2755     diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
2756     index 0e17c10..727da92 100644
2757     --- a/kernel/time/clocksource.c
2758     +++ b/kernel/time/clocksource.c
2759     @@ -185,7 +185,6 @@ static struct clocksource *watchdog;
2760     static struct timer_list watchdog_timer;
2761     static DECLARE_WORK(watchdog_work, clocksource_watchdog_work);
2762     static DEFINE_SPINLOCK(watchdog_lock);
2763     -static cycle_t watchdog_last;
2764     static int watchdog_running;
2765    
2766     static int clocksource_watchdog_kthread(void *data);
2767     @@ -254,11 +253,6 @@ static void clocksource_watchdog(unsigned long data)
2768     if (!watchdog_running)
2769     goto out;
2770    
2771     - wdnow = watchdog->read(watchdog);
2772     - wd_nsec = clocksource_cyc2ns((wdnow - watchdog_last) & watchdog->mask,
2773     - watchdog->mult, watchdog->shift);
2774     - watchdog_last = wdnow;
2775     -
2776     list_for_each_entry(cs, &watchdog_list, wd_list) {
2777    
2778     /* Clocksource already marked unstable? */
2779     @@ -268,19 +262,28 @@ static void clocksource_watchdog(unsigned long data)
2780     continue;
2781     }
2782    
2783     + local_irq_disable();
2784     csnow = cs->read(cs);
2785     + wdnow = watchdog->read(watchdog);
2786     + local_irq_enable();
2787    
2788     /* Clocksource initialized ? */
2789     if (!(cs->flags & CLOCK_SOURCE_WATCHDOG)) {
2790     cs->flags |= CLOCK_SOURCE_WATCHDOG;
2791     - cs->wd_last = csnow;
2792     + cs->wd_last = wdnow;
2793     + cs->cs_last = csnow;
2794     continue;
2795     }
2796    
2797     - /* Check the deviation from the watchdog clocksource. */
2798     - cs_nsec = clocksource_cyc2ns((csnow - cs->wd_last) &
2799     + wd_nsec = clocksource_cyc2ns((wdnow - cs->wd_last) & watchdog->mask,
2800     + watchdog->mult, watchdog->shift);
2801     +
2802     + cs_nsec = clocksource_cyc2ns((csnow - cs->cs_last) &
2803     cs->mask, cs->mult, cs->shift);
2804     - cs->wd_last = csnow;
2805     + cs->cs_last = csnow;
2806     + cs->wd_last = wdnow;
2807     +
2808     + /* Check the deviation from the watchdog clocksource. */
2809     if (abs(cs_nsec - wd_nsec) > WATCHDOG_THRESHOLD) {
2810     clocksource_unstable(cs, cs_nsec - wd_nsec);
2811     continue;
2812     @@ -318,7 +321,6 @@ static inline void clocksource_start_watchdog(void)
2813     return;
2814     init_timer(&watchdog_timer);
2815     watchdog_timer.function = clocksource_watchdog;
2816     - watchdog_last = watchdog->read(watchdog);
2817     watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL;
2818     add_timer_on(&watchdog_timer, cpumask_first(cpu_online_mask));
2819     watchdog_running = 1;
2820     diff --git a/lib/debugobjects.c b/lib/debugobjects.c
2821     index 9d86e45..a78b7c6 100644
2822     --- a/lib/debugobjects.c
2823     +++ b/lib/debugobjects.c
2824     @@ -198,7 +198,7 @@ static void free_object(struct debug_obj *obj)
2825     * initialized:
2826     */
2827     if (obj_pool_free > ODEBUG_POOL_SIZE && obj_cache)
2828     - sched = !work_pending(&debug_obj_work);
2829     + sched = keventd_up() && !work_pending(&debug_obj_work);
2830     hlist_add_head(&obj->node, &obj_pool);
2831     obj_pool_free++;
2832     obj_pool_used--;
2833     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
2834     index 39f86fc..f7c32fb 100644
2835     --- a/mm/hugetlb.c
2836     +++ b/mm/hugetlb.c
2837     @@ -1111,6 +1111,14 @@ static void __init gather_bootmem_prealloc(void)
2838     WARN_ON(page_count(page) != 1);
2839     prep_compound_huge_page(page, h->order);
2840     prep_new_huge_page(h, page, page_to_nid(page));
2841     + /*
2842     + * If we had gigantic hugepages allocated at boot time, we need
2843     + * to restore the 'stolen' pages to totalram_pages in order to
2844     + * fix confusing memory reports from free(1) and another
2845     + * side-effects, like CommitLimit going negative.
2846     + */
2847     + if (h->order > (MAX_ORDER - 1))
2848     + totalram_pages += 1 << h->order;
2849     }
2850     }
2851    
2852     diff --git a/mm/ksm.c b/mm/ksm.c
2853     index 942dfc7..e48c86e 100644
2854     --- a/mm/ksm.c
2855     +++ b/mm/ksm.c
2856     @@ -1301,6 +1301,12 @@ static struct rmap_item *scan_get_next_rmap_item(struct page **page)
2857     slot = list_entry(slot->mm_list.next, struct mm_slot, mm_list);
2858     ksm_scan.mm_slot = slot;
2859     spin_unlock(&ksm_mmlist_lock);
2860     + /*
2861     + * Although we tested list_empty() above, a racing __ksm_exit
2862     + * of the last mm on the list may have removed it since then.
2863     + */
2864     + if (slot == &ksm_mm_head)
2865     + return NULL;
2866     next_mm:
2867     ksm_scan.address = 0;
2868     ksm_scan.rmap_list = &slot->rmap_list;
2869     diff --git a/mm/memory-failure.c b/mm/memory-failure.c
2870     index 2b9a5ee..9568e0b 100644
2871     --- a/mm/memory-failure.c
2872     +++ b/mm/memory-failure.c
2873     @@ -52,6 +52,7 @@
2874     #include <linux/swapops.h>
2875     #include <linux/hugetlb.h>
2876     #include <linux/memory_hotplug.h>
2877     +#include <linux/mm_inline.h>
2878     #include "internal.h"
2879    
2880     int sysctl_memory_failure_early_kill __read_mostly = 0;
2881     @@ -1463,7 +1464,8 @@ int soft_offline_page(struct page *page, int flags)
2882     ret = isolate_lru_page(page);
2883     if (!ret) {
2884     LIST_HEAD(pagelist);
2885     -
2886     + inc_zone_page_state(page, NR_ISOLATED_ANON +
2887     + page_is_file_cache(page));
2888     list_add(&page->lru, &pagelist);
2889     ret = migrate_pages(&pagelist, new_page, MPOL_MF_MOVE_ALL,
2890     0, true);
2891     diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
2892     index 9ca1d60..fc5e0ba 100644
2893     --- a/mm/memory_hotplug.c
2894     +++ b/mm/memory_hotplug.c
2895     @@ -518,7 +518,7 @@ int mem_online_node(int nid)
2896    
2897     lock_memory_hotplug();
2898     pgdat = hotadd_new_pgdat(nid, 0);
2899     - if (pgdat) {
2900     + if (!pgdat) {
2901     ret = -ENOMEM;
2902     goto out;
2903     }
2904     diff --git a/mm/migrate.c b/mm/migrate.c
2905     index 34132f8..3179891 100644
2906     --- a/mm/migrate.c
2907     +++ b/mm/migrate.c
2908     @@ -288,7 +288,7 @@ static int migrate_page_move_mapping(struct address_space *mapping,
2909     */
2910     __dec_zone_page_state(page, NR_FILE_PAGES);
2911     __inc_zone_page_state(newpage, NR_FILE_PAGES);
2912     - if (PageSwapBacked(page)) {
2913     + if (!PageSwapCache(page) && PageSwapBacked(page)) {
2914     __dec_zone_page_state(page, NR_SHMEM);
2915     __inc_zone_page_state(newpage, NR_SHMEM);
2916     }
2917     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
2918     index b2ff6c8..f11e61e 100644
2919     --- a/net/8021q/vlan_dev.c
2920     +++ b/net/8021q/vlan_dev.c
2921     @@ -338,7 +338,7 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
2922     u64_stats_update_begin(&stats->syncp);
2923     stats->tx_packets++;
2924     stats->tx_bytes += len;
2925     - u64_stats_update_begin(&stats->syncp);
2926     + u64_stats_update_end(&stats->syncp);
2927     } else {
2928     this_cpu_inc(vlan_dev_info(dev)->vlan_pcpu_stats->tx_dropped);
2929     }
2930     diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
2931     index 5f9c091..ecaaa00 100644
2932     --- a/net/bridge/br_netfilter.c
2933     +++ b/net/bridge/br_netfilter.c
2934     @@ -104,10 +104,16 @@ static void fake_update_pmtu(struct dst_entry *dst, u32 mtu)
2935     {
2936     }
2937    
2938     +static u32 *fake_cow_metrics(struct dst_entry *dst, unsigned long old)
2939     +{
2940     + return NULL;
2941     +}
2942     +
2943     static struct dst_ops fake_dst_ops = {
2944     .family = AF_INET,
2945     .protocol = cpu_to_be16(ETH_P_IP),
2946     .update_pmtu = fake_update_pmtu,
2947     + .cow_metrics = fake_cow_metrics,
2948     };
2949    
2950     /*
2951     diff --git a/net/core/ethtool.c b/net/core/ethtool.c
2952     index f337525..76ed645 100644
2953     --- a/net/core/ethtool.c
2954     +++ b/net/core/ethtool.c
2955     @@ -231,6 +231,29 @@ static int ethtool_set_feature_compat(struct net_device *dev,
2956     return 1;
2957     }
2958    
2959     +static int ethtool_set_flags_compat(struct net_device *dev,
2960     + int (*legacy_set)(struct net_device *, u32),
2961     + struct ethtool_set_features_block *features, u32 mask)
2962     +{
2963     + u32 value;
2964     +
2965     + if (!legacy_set)
2966     + return 0;
2967     +
2968     + if (!(features[0].valid & mask))
2969     + return 0;
2970     +
2971     + value = dev->features & ~features[0].valid;
2972     + value |= features[0].requested;
2973     +
2974     + features[0].valid &= ~mask;
2975     +
2976     + if (legacy_set(dev, value & mask) < 0)
2977     + netdev_info(dev, "Legacy flags change failed\n");
2978     +
2979     + return 1;
2980     +}
2981     +
2982     static int ethtool_set_features_compat(struct net_device *dev,
2983     struct ethtool_set_features_block *features)
2984     {
2985     @@ -247,7 +270,7 @@ static int ethtool_set_features_compat(struct net_device *dev,
2986     features, NETIF_F_ALL_TSO);
2987     compat |= ethtool_set_feature_compat(dev, dev->ethtool_ops->set_rx_csum,
2988     features, NETIF_F_RXCSUM);
2989     - compat |= ethtool_set_feature_compat(dev, dev->ethtool_ops->set_flags,
2990     + compat |= ethtool_set_flags_compat(dev, dev->ethtool_ops->set_flags,
2991     features, flags_dup_features);
2992    
2993     return compat;
2994     diff --git a/net/core/filter.c b/net/core/filter.c
2995     index afb8afb..1238cbd 100644
2996     --- a/net/core/filter.c
2997     +++ b/net/core/filter.c
2998     @@ -38,6 +38,7 @@
2999     #include <asm/unaligned.h>
3000     #include <linux/filter.h>
3001     #include <linux/reciprocal_div.h>
3002     +#include <linux/ratelimit.h>
3003    
3004     enum {
3005     BPF_S_RET_K = 1,
3006     @@ -409,7 +410,9 @@ load_b:
3007     continue;
3008     }
3009     default:
3010     - WARN_ON(1);
3011     + WARN_RATELIMIT(1, "Unknown code:%u jt:%u tf:%u k:%u\n",
3012     + fentry->code, fentry->jt,
3013     + fentry->jf, fentry->k);
3014     return 0;
3015     }
3016     }
3017     diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
3018     index 807d83c..6bab50e 100644
3019     --- a/net/ipv4/af_inet.c
3020     +++ b/net/ipv4/af_inet.c
3021     @@ -464,6 +464,9 @@ int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
3022     if (addr_len < sizeof(struct sockaddr_in))
3023     goto out;
3024    
3025     + if (addr->sin_family != AF_INET)
3026     + goto out;
3027     +
3028     chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr);
3029    
3030     /* Not specified by any standard per-se, however it breaks too
3031     diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
3032     index 2ada171..65c23d9 100644
3033     --- a/net/ipv4/inet_diag.c
3034     +++ b/net/ipv4/inet_diag.c
3035     @@ -437,7 +437,7 @@ static int valid_cc(const void *bc, int len, int cc)
3036     return 0;
3037     if (cc == len)
3038     return 1;
3039     - if (op->yes < 4)
3040     + if (op->yes < 4 || op->yes & 3)
3041     return 0;
3042     len -= op->yes;
3043     bc += op->yes;
3044     @@ -447,11 +447,11 @@ static int valid_cc(const void *bc, int len, int cc)
3045    
3046     static int inet_diag_bc_audit(const void *bytecode, int bytecode_len)
3047     {
3048     - const unsigned char *bc = bytecode;
3049     + const void *bc = bytecode;
3050     int len = bytecode_len;
3051    
3052     while (len > 0) {
3053     - struct inet_diag_bc_op *op = (struct inet_diag_bc_op *)bc;
3054     + const struct inet_diag_bc_op *op = bc;
3055    
3056     //printk("BC: %d %d %d {%d} / %d\n", op->code, op->yes, op->no, op[1].no, len);
3057     switch (op->code) {
3058     @@ -462,22 +462,20 @@ static int inet_diag_bc_audit(const void *bytecode, int bytecode_len)
3059     case INET_DIAG_BC_S_LE:
3060     case INET_DIAG_BC_D_GE:
3061     case INET_DIAG_BC_D_LE:
3062     - if (op->yes < 4 || op->yes > len + 4)
3063     - return -EINVAL;
3064     case INET_DIAG_BC_JMP:
3065     - if (op->no < 4 || op->no > len + 4)
3066     + if (op->no < 4 || op->no > len + 4 || op->no & 3)
3067     return -EINVAL;
3068     if (op->no < len &&
3069     !valid_cc(bytecode, bytecode_len, len - op->no))
3070     return -EINVAL;
3071     break;
3072     case INET_DIAG_BC_NOP:
3073     - if (op->yes < 4 || op->yes > len + 4)
3074     - return -EINVAL;
3075     break;
3076     default:
3077     return -EINVAL;
3078     }
3079     + if (op->yes < 4 || op->yes > len + 4 || op->yes & 3)
3080     + return -EINVAL;
3081     bc += op->yes;
3082     len -= op->yes;
3083     }
3084     diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
3085     index 9df4e63..ce616d9 100644
3086     --- a/net/ipv4/inetpeer.c
3087     +++ b/net/ipv4/inetpeer.c
3088     @@ -154,11 +154,9 @@ void __init inet_initpeers(void)
3089     /* Called with or without local BH being disabled. */
3090     static void unlink_from_unused(struct inet_peer *p)
3091     {
3092     - if (!list_empty(&p->unused)) {
3093     - spin_lock_bh(&unused_peers.lock);
3094     - list_del_init(&p->unused);
3095     - spin_unlock_bh(&unused_peers.lock);
3096     - }
3097     + spin_lock_bh(&unused_peers.lock);
3098     + list_del_init(&p->unused);
3099     + spin_unlock_bh(&unused_peers.lock);
3100     }
3101    
3102     static int addr_compare(const struct inetpeer_addr *a,
3103     @@ -205,6 +203,20 @@ static int addr_compare(const struct inetpeer_addr *a,
3104     u; \
3105     })
3106    
3107     +static bool atomic_add_unless_return(atomic_t *ptr, int a, int u, int *newv)
3108     +{
3109     + int cur, old = atomic_read(ptr);
3110     +
3111     + while (old != u) {
3112     + *newv = old + a;
3113     + cur = atomic_cmpxchg(ptr, old, *newv);
3114     + if (cur == old)
3115     + return true;
3116     + old = cur;
3117     + }
3118     + return false;
3119     +}
3120     +
3121     /*
3122     * Called with rcu_read_lock()
3123     * Because we hold no lock against a writer, its quite possible we fall
3124     @@ -213,7 +225,8 @@ static int addr_compare(const struct inetpeer_addr *a,
3125     * We exit from this function if number of links exceeds PEER_MAXDEPTH
3126     */
3127     static struct inet_peer *lookup_rcu(const struct inetpeer_addr *daddr,
3128     - struct inet_peer_base *base)
3129     + struct inet_peer_base *base,
3130     + int *newrefcnt)
3131     {
3132     struct inet_peer *u = rcu_dereference(base->root);
3133     int count = 0;
3134     @@ -226,7 +239,7 @@ static struct inet_peer *lookup_rcu(const struct inetpeer_addr *daddr,
3135     * distinction between an unused entry (refcnt=0) and
3136     * a freed one.
3137     */
3138     - if (unlikely(!atomic_add_unless(&u->refcnt, 1, -1)))
3139     + if (!atomic_add_unless_return(&u->refcnt, 1, -1, newrefcnt))
3140     u = NULL;
3141     return u;
3142     }
3143     @@ -465,22 +478,23 @@ struct inet_peer *inet_getpeer(struct inetpeer_addr *daddr, int create)
3144     struct inet_peer_base *base = family_to_base(daddr->family);
3145     struct inet_peer *p;
3146     unsigned int sequence;
3147     - int invalidated;
3148     + int invalidated, newrefcnt = 0;
3149    
3150     /* Look up for the address quickly, lockless.
3151     * Because of a concurrent writer, we might not find an existing entry.
3152     */
3153     rcu_read_lock();
3154     sequence = read_seqbegin(&base->lock);
3155     - p = lookup_rcu(daddr, base);
3156     + p = lookup_rcu(daddr, base, &newrefcnt);
3157     invalidated = read_seqretry(&base->lock, sequence);
3158     rcu_read_unlock();
3159    
3160     if (p) {
3161     - /* The existing node has been found.
3162     +found: /* The existing node has been found.
3163     * Remove the entry from unused list if it was there.
3164     */
3165     - unlink_from_unused(p);
3166     + if (newrefcnt == 1)
3167     + unlink_from_unused(p);
3168     return p;
3169     }
3170    
3171     @@ -494,11 +508,9 @@ struct inet_peer *inet_getpeer(struct inetpeer_addr *daddr, int create)
3172     write_seqlock_bh(&base->lock);
3173     p = lookup(daddr, stack, base);
3174     if (p != peer_avl_empty) {
3175     - atomic_inc(&p->refcnt);
3176     + newrefcnt = atomic_inc_return(&p->refcnt);
3177     write_sequnlock_bh(&base->lock);
3178     - /* Remove the entry from unused list if it was there. */
3179     - unlink_from_unused(p);
3180     - return p;
3181     + goto found;
3182     }
3183     p = create ? kmem_cache_alloc(peer_cachep, GFP_ATOMIC) : NULL;
3184     if (p) {
3185     diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c
3186     index 4614bab..2e97e3e 100644
3187     --- a/net/ipv4/netfilter.c
3188     +++ b/net/ipv4/netfilter.c
3189     @@ -17,51 +17,35 @@ int ip_route_me_harder(struct sk_buff *skb, unsigned addr_type)
3190     const struct iphdr *iph = ip_hdr(skb);
3191     struct rtable *rt;
3192     struct flowi4 fl4 = {};
3193     - unsigned long orefdst;
3194     + __be32 saddr = iph->saddr;
3195     + __u8 flags = 0;
3196     unsigned int hh_len;
3197     - unsigned int type;
3198    
3199     - type = inet_addr_type(net, iph->saddr);
3200     - if (skb->sk && inet_sk(skb->sk)->transparent)
3201     - type = RTN_LOCAL;
3202     - if (addr_type == RTN_UNSPEC)
3203     - addr_type = type;
3204     + if (!skb->sk && addr_type != RTN_LOCAL) {
3205     + if (addr_type == RTN_UNSPEC)
3206     + addr_type = inet_addr_type(net, saddr);
3207     + if (addr_type == RTN_LOCAL || addr_type == RTN_UNICAST)
3208     + flags |= FLOWI_FLAG_ANYSRC;
3209     + else
3210     + saddr = 0;
3211     + }
3212    
3213     /* some non-standard hacks like ipt_REJECT.c:send_reset() can cause
3214     * packets with foreign saddr to appear on the NF_INET_LOCAL_OUT hook.
3215     */
3216     - if (addr_type == RTN_LOCAL) {
3217     - fl4.daddr = iph->daddr;
3218     - if (type == RTN_LOCAL)
3219     - fl4.saddr = iph->saddr;
3220     - fl4.flowi4_tos = RT_TOS(iph->tos);
3221     - fl4.flowi4_oif = skb->sk ? skb->sk->sk_bound_dev_if : 0;
3222     - fl4.flowi4_mark = skb->mark;
3223     - fl4.flowi4_flags = skb->sk ? inet_sk_flowi_flags(skb->sk) : 0;
3224     - rt = ip_route_output_key(net, &fl4);
3225     - if (IS_ERR(rt))
3226     - return -1;
3227     -
3228     - /* Drop old route. */
3229     - skb_dst_drop(skb);
3230     - skb_dst_set(skb, &rt->dst);
3231     - } else {
3232     - /* non-local src, find valid iif to satisfy
3233     - * rp-filter when calling ip_route_input. */
3234     - fl4.daddr = iph->saddr;
3235     - rt = ip_route_output_key(net, &fl4);
3236     - if (IS_ERR(rt))
3237     - return -1;
3238     + fl4.daddr = iph->daddr;
3239     + fl4.saddr = saddr;
3240     + fl4.flowi4_tos = RT_TOS(iph->tos);
3241     + fl4.flowi4_oif = skb->sk ? skb->sk->sk_bound_dev_if : 0;
3242     + fl4.flowi4_mark = skb->mark;
3243     + fl4.flowi4_flags = skb->sk ? inet_sk_flowi_flags(skb->sk) : flags;
3244     + rt = ip_route_output_key(net, &fl4);
3245     + if (IS_ERR(rt))
3246     + return -1;
3247    
3248     - orefdst = skb->_skb_refdst;
3249     - if (ip_route_input(skb, iph->daddr, iph->saddr,
3250     - RT_TOS(iph->tos), rt->dst.dev) != 0) {
3251     - dst_release(&rt->dst);
3252     - return -1;
3253     - }
3254     - dst_release(&rt->dst);
3255     - refdst_drop(orefdst);
3256     - }
3257     + /* Drop old route. */
3258     + skb_dst_drop(skb);
3259     + skb_dst_set(skb, &rt->dst);
3260    
3261     if (skb_dst(skb)->error)
3262     return -1;
3263     diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c
3264     index 1ff79e5..51f13f8 100644
3265     --- a/net/ipv4/netfilter/ipt_REJECT.c
3266     +++ b/net/ipv4/netfilter/ipt_REJECT.c
3267     @@ -40,7 +40,6 @@ static void send_reset(struct sk_buff *oldskb, int hook)
3268     struct iphdr *niph;
3269     const struct tcphdr *oth;
3270     struct tcphdr _otcph, *tcph;
3271     - unsigned int addr_type;
3272    
3273     /* IP header checks: fragment. */
3274     if (ip_hdr(oldskb)->frag_off & htons(IP_OFFSET))
3275     @@ -55,6 +54,9 @@ static void send_reset(struct sk_buff *oldskb, int hook)
3276     if (oth->rst)
3277     return;
3278    
3279     + if (skb_rtable(oldskb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))
3280     + return;
3281     +
3282     /* Check checksum */
3283     if (nf_ip_checksum(oldskb, hook, ip_hdrlen(oldskb), IPPROTO_TCP))
3284     return;
3285     @@ -101,19 +103,11 @@ static void send_reset(struct sk_buff *oldskb, int hook)
3286     nskb->csum_start = (unsigned char *)tcph - nskb->head;
3287     nskb->csum_offset = offsetof(struct tcphdr, check);
3288    
3289     - addr_type = RTN_UNSPEC;
3290     - if (hook != NF_INET_FORWARD
3291     -#ifdef CONFIG_BRIDGE_NETFILTER
3292     - || (nskb->nf_bridge && nskb->nf_bridge->mask & BRNF_BRIDGED)
3293     -#endif
3294     - )
3295     - addr_type = RTN_LOCAL;
3296     -
3297     /* ip_route_me_harder expects skb->dst to be set */
3298     skb_dst_set_noref(nskb, skb_dst(oldskb));
3299    
3300     nskb->protocol = htons(ETH_P_IP);
3301     - if (ip_route_me_harder(nskb, addr_type))
3302     + if (ip_route_me_harder(nskb, RTN_UNSPEC))
3303     goto free_nskb;
3304    
3305     niph->ttl = ip4_dst_hoplimit(skb_dst(nskb));
3306     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
3307     index 99e6e4b..b8b5c3f 100644
3308     --- a/net/ipv4/route.c
3309     +++ b/net/ipv4/route.c
3310     @@ -1914,9 +1914,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
3311    
3312     hash = rt_hash(daddr, saddr, dev->ifindex, rt_genid(dev_net(dev)));
3313     rth = rt_intern_hash(hash, rth, skb, dev->ifindex);
3314     - err = 0;
3315     - if (IS_ERR(rth))
3316     - err = PTR_ERR(rth);
3317     + return IS_ERR(rth) ? PTR_ERR(rth) : 0;
3318    
3319     e_nobufs:
3320     return -ENOBUFS;
3321     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
3322     index f87a8eb..0e33e34 100644
3323     --- a/net/ipv4/udp.c
3324     +++ b/net/ipv4/udp.c
3325     @@ -1241,6 +1241,9 @@ csum_copy_err:
3326    
3327     if (noblock)
3328     return -EAGAIN;
3329     +
3330     + /* starting over for a new packet */
3331     + msg->msg_flags &= ~MSG_TRUNC;
3332     goto try_again;
3333     }
3334    
3335     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
3336     index 9e305d74..b31a2f3 100644
3337     --- a/net/ipv6/udp.c
3338     +++ b/net/ipv6/udp.c
3339     @@ -453,8 +453,11 @@ csum_copy_err:
3340     }
3341     unlock_sock_fast(sk, slow);
3342    
3343     - if (flags & MSG_DONTWAIT)
3344     + if (noblock)
3345     return -EAGAIN;
3346     +
3347     + /* starting over for a new packet */
3348     + msg->msg_flags &= ~MSG_TRUNC;
3349     goto try_again;
3350     }
3351    
3352     diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
3353     index 72d1ac6..8041bef 100644
3354     --- a/net/netfilter/ipset/ip_set_core.c
3355     +++ b/net/netfilter/ipset/ip_set_core.c
3356     @@ -815,7 +815,7 @@ ip_set_flush(struct sock *ctnl, struct sk_buff *skb,
3357     ip_set_id_t i;
3358    
3359     if (unlikely(protocol_failed(attr)))
3360     - return -EPROTO;
3361     + return -IPSET_ERR_PROTOCOL;
3362    
3363     if (!attr[IPSET_ATTR_SETNAME]) {
3364     for (i = 0; i < ip_set_max; i++)
3365     diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
3366     index bf28ac2..782db27 100644
3367     --- a/net/netfilter/ipvs/ip_vs_conn.c
3368     +++ b/net/netfilter/ipvs/ip_vs_conn.c
3369     @@ -776,8 +776,16 @@ static void ip_vs_conn_expire(unsigned long data)
3370     if (cp->control)
3371     ip_vs_control_del(cp);
3372    
3373     - if (cp->flags & IP_VS_CONN_F_NFCT)
3374     + if (cp->flags & IP_VS_CONN_F_NFCT) {
3375     ip_vs_conn_drop_conntrack(cp);
3376     + /* Do not access conntracks during subsys cleanup
3377     + * because nf_conntrack_find_get can not be used after
3378     + * conntrack cleanup for the net.
3379     + */
3380     + smp_rmb();
3381     + if (ipvs->enable)
3382     + ip_vs_conn_drop_conntrack(cp);
3383     + }
3384    
3385     ip_vs_pe_put(cp->pe);
3386     kfree(cp->pe_data);
3387     diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
3388     index a74dae6..7729eae 100644
3389     --- a/net/netfilter/ipvs/ip_vs_core.c
3390     +++ b/net/netfilter/ipvs/ip_vs_core.c
3391     @@ -1965,6 +1965,7 @@ static void __net_exit __ip_vs_dev_cleanup(struct net *net)
3392     {
3393     EnterFunction(2);
3394     net_ipvs(net)->enable = 0; /* Disable packet reception */
3395     + smp_wmb();
3396     __ip_vs_sync_cleanup(net);
3397     LeaveFunction(2);
3398     }
3399     diff --git a/net/netfilter/ipvs/ip_vs_ftp.c b/net/netfilter/ipvs/ip_vs_ftp.c
3400     index 6b5dd6d..af63553 100644
3401     --- a/net/netfilter/ipvs/ip_vs_ftp.c
3402     +++ b/net/netfilter/ipvs/ip_vs_ftp.c
3403     @@ -411,25 +411,35 @@ static struct ip_vs_app ip_vs_ftp = {
3404     static int __net_init __ip_vs_ftp_init(struct net *net)
3405     {
3406     int i, ret;
3407     - struct ip_vs_app *app = &ip_vs_ftp;
3408     + struct ip_vs_app *app;
3409     + struct netns_ipvs *ipvs = net_ipvs(net);
3410     +
3411     + app = kmemdup(&ip_vs_ftp, sizeof(struct ip_vs_app), GFP_KERNEL);
3412     + if (!app)
3413     + return -ENOMEM;
3414     + INIT_LIST_HEAD(&app->a_list);
3415     + INIT_LIST_HEAD(&app->incs_list);
3416     + ipvs->ftp_app = app;
3417    
3418     ret = register_ip_vs_app(net, app);
3419     if (ret)
3420     - return ret;
3421     + goto err_exit;
3422    
3423     for (i=0; i<IP_VS_APP_MAX_PORTS; i++) {
3424     if (!ports[i])
3425     continue;
3426     ret = register_ip_vs_app_inc(net, app, app->protocol, ports[i]);
3427     if (ret)
3428     - break;
3429     + goto err_unreg;
3430     pr_info("%s: loaded support on port[%d] = %d\n",
3431     app->name, i, ports[i]);
3432     }
3433     + return 0;
3434    
3435     - if (ret)
3436     - unregister_ip_vs_app(net, app);
3437     -
3438     +err_unreg:
3439     + unregister_ip_vs_app(net, app);
3440     +err_exit:
3441     + kfree(ipvs->ftp_app);
3442     return ret;
3443     }
3444     /*
3445     @@ -437,9 +447,10 @@ static int __net_init __ip_vs_ftp_init(struct net *net)
3446     */
3447     static void __ip_vs_ftp_exit(struct net *net)
3448     {
3449     - struct ip_vs_app *app = &ip_vs_ftp;
3450     + struct netns_ipvs *ipvs = net_ipvs(net);
3451    
3452     - unregister_ip_vs_app(net, app);
3453     + unregister_ip_vs_app(net, ipvs->ftp_app);
3454     + kfree(ipvs->ftp_app);
3455     }
3456    
3457     static struct pernet_operations ip_vs_ftp_ops = {
3458     diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
3459     index b5362e9..04098c2 100644
3460     --- a/net/packet/af_packet.c
3461     +++ b/net/packet/af_packet.c
3462     @@ -799,6 +799,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
3463     h.h2->tp_sec = ts.tv_sec;
3464     h.h2->tp_nsec = ts.tv_nsec;
3465     h.h2->tp_vlan_tci = vlan_tx_tag_get(skb);
3466     + h.h2->tp_padding = 0;
3467     hdrlen = sizeof(*h.h2);
3468     break;
3469     default:
3470     @@ -1727,6 +1728,7 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
3471     aux.tp_net = skb_network_offset(skb);
3472     aux.tp_vlan_tci = vlan_tx_tag_get(skb);
3473    
3474     + aux.tp_padding = 0;
3475     put_cmsg(msg, SOL_PACKET, PACKET_AUXDATA, sizeof(aux), &aux);
3476     }
3477    
3478     diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
3479     index 339ba64..5daf6cc 100644
3480     --- a/net/sunrpc/auth_gss/auth_gss.c
3481     +++ b/net/sunrpc/auth_gss/auth_gss.c
3482     @@ -577,13 +577,13 @@ retry:
3483     }
3484     inode = &gss_msg->inode->vfs_inode;
3485     for (;;) {
3486     - prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_INTERRUPTIBLE);
3487     + prepare_to_wait(&gss_msg->waitqueue, &wait, TASK_KILLABLE);
3488     spin_lock(&inode->i_lock);
3489     if (gss_msg->ctx != NULL || gss_msg->msg.errno < 0) {
3490     break;
3491     }
3492     spin_unlock(&inode->i_lock);
3493     - if (signalled()) {
3494     + if (fatal_signal_pending(current)) {
3495     err = -ERESTARTSYS;
3496     goto out_intr;
3497     }
3498     diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c
3499     index 0a9a2ec..c3b7533 100644
3500     --- a/net/sunrpc/auth_gss/gss_krb5_mech.c
3501     +++ b/net/sunrpc/auth_gss/gss_krb5_mech.c
3502     @@ -43,6 +43,7 @@
3503     #include <linux/sunrpc/gss_krb5.h>
3504     #include <linux/sunrpc/xdr.h>
3505     #include <linux/crypto.h>
3506     +#include <linux/sunrpc/gss_krb5_enctypes.h>
3507    
3508     #ifdef RPC_DEBUG
3509     # define RPCDBG_FACILITY RPCDBG_AUTH
3510     @@ -750,7 +751,7 @@ static struct gss_api_mech gss_kerberos_mech = {
3511     .gm_ops = &gss_kerberos_ops,
3512     .gm_pf_num = ARRAY_SIZE(gss_kerberos_pfs),
3513     .gm_pfs = gss_kerberos_pfs,
3514     - .gm_upcall_enctypes = "18,17,16,23,3,1,2",
3515     + .gm_upcall_enctypes = KRB5_SUPPORTED_ENCTYPES,
3516     };
3517    
3518     static int __init init_kerberos_module(void)
3519     diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
3520     index 8d83f9d..00df09b 100644
3521     --- a/net/sunrpc/clnt.c
3522     +++ b/net/sunrpc/clnt.c
3523     @@ -1058,7 +1058,7 @@ call_allocate(struct rpc_task *task)
3524    
3525     dprintk("RPC: %5u rpc_buffer allocation failed\n", task->tk_pid);
3526    
3527     - if (RPC_IS_ASYNC(task) || !signalled()) {
3528     + if (RPC_IS_ASYNC(task) || !fatal_signal_pending(current)) {
3529     task->tk_action = call_allocate;
3530     rpc_delay(task, HZ>>4);
3531     return;
3532     @@ -1172,6 +1172,9 @@ call_bind_status(struct rpc_task *task)
3533     status = -EOPNOTSUPP;
3534     break;
3535     }
3536     + if (task->tk_rebind_retry == 0)
3537     + break;
3538     + task->tk_rebind_retry--;
3539     rpc_delay(task, 3*HZ);
3540     goto retry_timeout;
3541     case -ETIMEDOUT:
3542     diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
3543     index 6b43ee7..a27406b 100644
3544     --- a/net/sunrpc/sched.c
3545     +++ b/net/sunrpc/sched.c
3546     @@ -792,6 +792,7 @@ static void rpc_init_task(struct rpc_task *task, const struct rpc_task_setup *ta
3547     /* Initialize retry counters */
3548     task->tk_garb_retry = 2;
3549     task->tk_cred_retry = 2;
3550     + task->tk_rebind_retry = 2;
3551    
3552     task->tk_priority = task_setup_data->priority - RPC_PRIORITY_LOW;
3553     task->tk_owner = current->tgid;
3554     diff --git a/net/xfrm/xfrm_replay.c b/net/xfrm/xfrm_replay.c
3555     index 47f1b86..b11ea69 100644
3556     --- a/net/xfrm/xfrm_replay.c
3557     +++ b/net/xfrm/xfrm_replay.c
3558     @@ -265,7 +265,7 @@ static void xfrm_replay_advance_bmp(struct xfrm_state *x, __be32 net_seq)
3559     bitnr = bitnr & 0x1F;
3560     replay_esn->bmp[nr] |= (1U << bitnr);
3561     } else {
3562     - nr = replay_esn->replay_window >> 5;
3563     + nr = (replay_esn->replay_window - 1) >> 5;
3564     for (i = 0; i <= nr; i++)
3565     replay_esn->bmp[i] = 0;
3566    
3567     @@ -471,7 +471,7 @@ static void xfrm_replay_advance_esn(struct xfrm_state *x, __be32 net_seq)
3568     bitnr = bitnr & 0x1F;
3569     replay_esn->bmp[nr] |= (1U << bitnr);
3570     } else {
3571     - nr = replay_esn->replay_window >> 5;
3572     + nr = (replay_esn->replay_window - 1) >> 5;
3573     for (i = 0; i <= nr; i++)
3574     replay_esn->bmp[i] = 0;
3575    
3576     diff --git a/security/keys/request_key.c b/security/keys/request_key.c
3577     index df3c041..6197a26 100644
3578     --- a/security/keys/request_key.c
3579     +++ b/security/keys/request_key.c
3580     @@ -470,7 +470,7 @@ static struct key *construct_key_and_link(struct key_type *type,
3581     } else if (ret == -EINPROGRESS) {
3582     ret = 0;
3583     } else {
3584     - key = ERR_PTR(ret);
3585     + goto couldnt_alloc_key;
3586     }
3587    
3588     key_put(dest_keyring);
3589     @@ -480,6 +480,7 @@ static struct key *construct_key_and_link(struct key_type *type,
3590     construction_failed:
3591     key_negate_and_link(key, key_negative_timeout, NULL, NULL);
3592     key_put(key);
3593     +couldnt_alloc_key:
3594     key_put(dest_keyring);
3595     kleave(" = %d", ret);
3596     return ERR_PTR(ret);
3597     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
3598     index 15b9d16..e47f22c 100644
3599     --- a/sound/pci/hda/patch_conexant.c
3600     +++ b/sound/pci/hda/patch_conexant.c
3601     @@ -3846,6 +3846,8 @@ static struct hda_codec_preset snd_hda_preset_conexant[] = {
3602     .patch = patch_cxt5066 },
3603     { .id = 0x14f15069, .name = "CX20585",
3604     .patch = patch_cxt5066 },
3605     + { .id = 0x14f1506c, .name = "CX20588",
3606     + .patch = patch_cxt5066 },
3607     { .id = 0x14f1506e, .name = "CX20590",
3608     .patch = patch_cxt5066 },
3609     { .id = 0x14f15097, .name = "CX20631",
3610     @@ -3874,6 +3876,7 @@ MODULE_ALIAS("snd-hda-codec-id:14f15066");
3611     MODULE_ALIAS("snd-hda-codec-id:14f15067");
3612     MODULE_ALIAS("snd-hda-codec-id:14f15068");
3613     MODULE_ALIAS("snd-hda-codec-id:14f15069");
3614     +MODULE_ALIAS("snd-hda-codec-id:14f1506c");
3615     MODULE_ALIAS("snd-hda-codec-id:14f1506e");
3616     MODULE_ALIAS("snd-hda-codec-id:14f15097");
3617     MODULE_ALIAS("snd-hda-codec-id:14f15098");
3618     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3619     index 2e95f01..4145c3c 100644
3620     --- a/sound/pci/hda/patch_realtek.c
3621     +++ b/sound/pci/hda/patch_realtek.c
3622     @@ -4607,7 +4607,6 @@ static struct snd_pci_quirk alc880_cfg_tbl[] = {
3623     SND_PCI_QUIRK(0x1025, 0xe309, "ULI", ALC880_3ST_DIG),
3624     SND_PCI_QUIRK(0x1025, 0xe310, "ULI", ALC880_3ST),
3625     SND_PCI_QUIRK(0x1039, 0x1234, NULL, ALC880_6ST_DIG),
3626     - SND_PCI_QUIRK(0x103c, 0x2a09, "HP", ALC880_5ST),
3627     SND_PCI_QUIRK(0x1043, 0x10b3, "ASUS W1V", ALC880_ASUS_W1V),
3628     SND_PCI_QUIRK(0x1043, 0x10c2, "ASUS W6A", ALC880_ASUS_DIG),
3629     SND_PCI_QUIRK(0x1043, 0x10c3, "ASUS Wxx", ALC880_ASUS_DIG),
3630     diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c
3631     index 2ce0b2d..fab20a5 100644
3632     --- a/sound/soc/pxa/pxa2xx-pcm.c
3633     +++ b/sound/soc/pxa/pxa2xx-pcm.c
3634     @@ -95,14 +95,14 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
3635     if (!card->dev->coherent_dma_mask)
3636     card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
3637    
3638     - if (dai->driver->playback.channels_min) {
3639     + if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
3640     ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
3641     SNDRV_PCM_STREAM_PLAYBACK);
3642     if (ret)
3643     goto out;
3644     }
3645    
3646     - if (dai->driver->capture.channels_min) {
3647     + if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
3648     ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
3649     SNDRV_PCM_STREAM_CAPTURE);
3650     if (ret)
3651     diff --git a/virt/kvm/assigned-dev.c b/virt/kvm/assigned-dev.c
3652     index ae72ae6..e3f1235 100644
3653     --- a/virt/kvm/assigned-dev.c
3654     +++ b/virt/kvm/assigned-dev.c
3655     @@ -197,8 +197,7 @@ static void kvm_free_assigned_device(struct kvm *kvm,
3656     {
3657     kvm_free_assigned_irq(kvm, assigned_dev);
3658    
3659     - __pci_reset_function(assigned_dev->dev);
3660     - pci_restore_state(assigned_dev->dev);
3661     + pci_reset_function(assigned_dev->dev);
3662    
3663     pci_release_regions(assigned_dev->dev);
3664     pci_disable_device(assigned_dev->dev);
3665     @@ -515,7 +514,6 @@ static int kvm_vm_ioctl_assign_device(struct kvm *kvm,
3666     }
3667    
3668     pci_reset_function(dev);
3669     - pci_save_state(dev);
3670    
3671     match->assigned_dev_id = assigned_dev->assigned_dev_id;
3672     match->host_segnr = assigned_dev->segnr;
3673     @@ -546,7 +544,6 @@ out:
3674     mutex_unlock(&kvm->lock);
3675     return r;
3676     out_list_del:
3677     - pci_restore_state(dev);
3678     list_del(&match->list);
3679     pci_release_regions(dev);
3680     out_disable: