Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.2/0117-3.2.18-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1788 - (hide annotations) (download)
Wed May 30 11:03:02 2012 UTC (12 years ago) by niro
File size: 59900 byte(s)
-linux-3.2.18
1 niro 1788 diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
2     index 589f2da..a4399f5 100644
3     --- a/Documentation/networking/ip-sysctl.txt
4     +++ b/Documentation/networking/ip-sysctl.txt
5     @@ -137,7 +137,7 @@ tcp_adv_win_scale - INTEGER
6     (if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale),
7     if it is <= 0.
8     Possible values are [-31, 31], inclusive.
9     - Default: 2
10     + Default: 1
11    
12     tcp_allowed_congestion_control - STRING
13     Show/set the congestion control choices available to non-privileged
14     @@ -397,7 +397,7 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max
15     net.core.rmem_max. Calling setsockopt() with SO_RCVBUF disables
16     automatic tuning of that socket's receive buffer size, in which
17     case this value is ignored.
18     - Default: between 87380B and 4MB, depending on RAM size.
19     + Default: between 87380B and 6MB, depending on RAM size.
20    
21     tcp_sack - BOOLEAN
22     Enable select acknowledgments (SACKS).
23     diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h
24     index 1e2d332..c88420d 100644
25     --- a/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h
26     +++ b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h
27     @@ -941,10 +941,10 @@
28     #define OMAP4_DSI2_LANEENABLE_MASK (0x7 << 29)
29     #define OMAP4_DSI1_LANEENABLE_SHIFT 24
30     #define OMAP4_DSI1_LANEENABLE_MASK (0x1f << 24)
31     -#define OMAP4_DSI2_PIPD_SHIFT 19
32     -#define OMAP4_DSI2_PIPD_MASK (0x1f << 19)
33     -#define OMAP4_DSI1_PIPD_SHIFT 14
34     -#define OMAP4_DSI1_PIPD_MASK (0x1f << 14)
35     +#define OMAP4_DSI1_PIPD_SHIFT 19
36     +#define OMAP4_DSI1_PIPD_MASK (0x1f << 19)
37     +#define OMAP4_DSI2_PIPD_SHIFT 14
38     +#define OMAP4_DSI2_PIPD_MASK (0x1f << 14)
39    
40     /* CONTROL_MCBSPLP */
41     #define OMAP4_ALBCTRLRX_FSX_SHIFT 31
42     diff --git a/arch/arm/mach-orion5x/mpp.h b/arch/arm/mach-orion5x/mpp.h
43     index eac6897..db70e79 100644
44     --- a/arch/arm/mach-orion5x/mpp.h
45     +++ b/arch/arm/mach-orion5x/mpp.h
46     @@ -65,8 +65,8 @@
47     #define MPP8_GIGE MPP(8, 0x1, 0, 0, 1, 1, 1)
48    
49     #define MPP9_UNUSED MPP(9, 0x0, 0, 0, 1, 1, 1)
50     -#define MPP9_GPIO MPP(9, 0x0, 0, 0, 1, 1, 1)
51     -#define MPP9_GIGE MPP(9, 0x1, 1, 1, 1, 1, 1)
52     +#define MPP9_GPIO MPP(9, 0x0, 1, 1, 1, 1, 1)
53     +#define MPP9_GIGE MPP(9, 0x1, 0, 0, 1, 1, 1)
54    
55     #define MPP10_UNUSED MPP(10, 0x0, 0, 0, 1, 1, 1)
56     #define MPP10_GPIO MPP(10, 0x0, 1, 1, 1, 1, 1)
57     diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
58     index aa33949..4b0bc37 100644
59     --- a/arch/arm/mm/fault.c
60     +++ b/arch/arm/mm/fault.c
61     @@ -267,7 +267,9 @@ good_area:
62     return fault;
63    
64     check_stack:
65     - if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
66     + /* Don't allow expansion below FIRST_USER_ADDRESS */
67     + if (vma->vm_flags & VM_GROWSDOWN &&
68     + addr >= FIRST_USER_ADDRESS && !expand_stack(vma, addr))
69     goto good_area;
70     out:
71     return fault;
72     diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
73     index 8f3ccdd..8ea07e4 100644
74     --- a/arch/arm/vfp/vfpmodule.c
75     +++ b/arch/arm/vfp/vfpmodule.c
76     @@ -11,6 +11,7 @@
77     #include <linux/types.h>
78     #include <linux/cpu.h>
79     #include <linux/cpu_pm.h>
80     +#include <linux/hardirq.h>
81     #include <linux/kernel.h>
82     #include <linux/notifier.h>
83     #include <linux/signal.h>
84     @@ -428,7 +429,10 @@ void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs)
85    
86     static void vfp_enable(void *unused)
87     {
88     - u32 access = get_copro_access();
89     + u32 access;
90     +
91     + BUG_ON(preemptible());
92     + access = get_copro_access();
93    
94     /*
95     * Enable full access to VFP (cp10 and cp11)
96     @@ -556,7 +560,7 @@ static int __init vfp_init(void)
97     unsigned int cpu_arch = cpu_architecture();
98    
99     if (cpu_arch >= CPU_ARCH_ARMv6)
100     - vfp_enable(NULL);
101     + on_each_cpu(vfp_enable, NULL, 1);
102    
103     /*
104     * First check that there is a VFP that we can use.
105     @@ -577,8 +581,6 @@ static int __init vfp_init(void)
106     } else {
107     hotcpu_notifier(vfp_hotplug, 0);
108    
109     - smp_call_function(vfp_enable, NULL, 1);
110     -
111     VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */
112     printk("implementor %02x architecture %d part %02x variant %x rev %x\n",
113     (vfpsid & FPSID_IMPLEMENTER_MASK) >> FPSID_IMPLEMENTER_BIT,
114     diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h
115     index 7617248..7a3bd25 100644
116     --- a/arch/ia64/include/asm/unistd.h
117     +++ b/arch/ia64/include/asm/unistd.h
118     @@ -323,11 +323,12 @@
119     #define __NR_sendmmsg 1331
120     #define __NR_process_vm_readv 1332
121     #define __NR_process_vm_writev 1333
122     +#define __NR_accept4 1334
123    
124     #ifdef __KERNEL__
125    
126    
127     -#define NR_syscalls 310 /* length of syscall table */
128     +#define NR_syscalls 311 /* length of syscall table */
129    
130     /*
131     * The following defines stop scripts/checksyscalls.sh from complaining about
132     diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
133     index 5b31d46..1ccbe12 100644
134     --- a/arch/ia64/kernel/entry.S
135     +++ b/arch/ia64/kernel/entry.S
136     @@ -1779,6 +1779,7 @@ sys_call_table:
137     data8 sys_sendmmsg
138     data8 sys_process_vm_readv
139     data8 sys_process_vm_writev
140     + data8 sys_accept4
141    
142     .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
143     #endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
144     diff --git a/arch/sparc/kernel/central.c b/arch/sparc/kernel/central.c
145     index 38d48a5..9708851 100644
146     --- a/arch/sparc/kernel/central.c
147     +++ b/arch/sparc/kernel/central.c
148     @@ -269,4 +269,4 @@ static int __init sunfire_init(void)
149     return 0;
150     }
151    
152     -subsys_initcall(sunfire_init);
153     +fs_initcall(sunfire_init);
154     diff --git a/arch/sparc/mm/ultra.S b/arch/sparc/mm/ultra.S
155     index b57a594..874162a 100644
156     --- a/arch/sparc/mm/ultra.S
157     +++ b/arch/sparc/mm/ultra.S
158     @@ -495,11 +495,11 @@ xcall_fetch_glob_regs:
159     stx %o7, [%g1 + GR_SNAP_O7]
160     stx %i7, [%g1 + GR_SNAP_I7]
161     /* Don't try this at home kids... */
162     - rdpr %cwp, %g2
163     - sub %g2, 1, %g7
164     + rdpr %cwp, %g3
165     + sub %g3, 1, %g7
166     wrpr %g7, %cwp
167     mov %i7, %g7
168     - wrpr %g2, %cwp
169     + wrpr %g3, %cwp
170     stx %g7, [%g1 + GR_SNAP_RPC]
171     sethi %hi(trap_block), %g7
172     or %g7, %lo(trap_block), %g7
173     diff --git a/arch/tile/kernel/compat_signal.c b/arch/tile/kernel/compat_signal.c
174     index a7869ad..41459d8 100644
175     --- a/arch/tile/kernel/compat_signal.c
176     +++ b/arch/tile/kernel/compat_signal.c
177     @@ -406,19 +406,17 @@ int compat_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
178     * Set up registers for signal handler.
179     * Registers that we don't modify keep the value they had from
180     * user-space at the time we took the signal.
181     + * We always pass siginfo and mcontext, regardless of SA_SIGINFO,
182     + * since some things rely on this (e.g. glibc's debug/segfault.c).
183     */
184     regs->pc = ptr_to_compat_reg(ka->sa.sa_handler);
185     regs->ex1 = PL_ICS_EX1(USER_PL, 1); /* set crit sec in handler */
186     regs->sp = ptr_to_compat_reg(frame);
187     regs->lr = restorer;
188     regs->regs[0] = (unsigned long) usig;
189     -
190     - if (ka->sa.sa_flags & SA_SIGINFO) {
191     - /* Need extra arguments, so mark to restore caller-saves. */
192     - regs->regs[1] = ptr_to_compat_reg(&frame->info);
193     - regs->regs[2] = ptr_to_compat_reg(&frame->uc);
194     - regs->flags |= PT_FLAGS_CALLER_SAVES;
195     - }
196     + regs->regs[1] = ptr_to_compat_reg(&frame->info);
197     + regs->regs[2] = ptr_to_compat_reg(&frame->uc);
198     + regs->flags |= PT_FLAGS_CALLER_SAVES;
199    
200     /*
201     * Notify any tracer that was single-stepping it.
202     diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
203     index 6d16b4b..7e3002b 100644
204     --- a/drivers/crypto/Kconfig
205     +++ b/drivers/crypto/Kconfig
206     @@ -173,6 +173,7 @@ config CRYPTO_DEV_MV_CESA
207     select CRYPTO_ALGAPI
208     select CRYPTO_AES
209     select CRYPTO_BLKCIPHER2
210     + select CRYPTO_HASH
211     help
212     This driver allows you to utilize the Cryptographic Engines and
213     Security Accelerator (CESA) which can be found on the Marvell Orion
214     diff --git a/drivers/gpio/gpio-ml-ioh.c b/drivers/gpio/gpio-ml-ioh.c
215     index 461958f..271fd49 100644
216     --- a/drivers/gpio/gpio-ml-ioh.c
217     +++ b/drivers/gpio/gpio-ml-ioh.c
218     @@ -448,6 +448,7 @@ static int __devinit ioh_gpio_probe(struct pci_dev *pdev,
219     chip->reg = chip->base;
220     chip->ch = i;
221     mutex_init(&chip->lock);
222     + spin_lock_init(&chip->spinlock);
223     ioh_gpio_setup(chip, num_ports[i]);
224     ret = gpiochip_add(&chip->gpio);
225     if (ret) {
226     diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
227     index 801d92d..a417f94 100644
228     --- a/drivers/md/dm-mpath.c
229     +++ b/drivers/md/dm-mpath.c
230     @@ -698,8 +698,8 @@ static int parse_hw_handler(struct dm_arg_set *as, struct multipath *m)
231     return 0;
232    
233     m->hw_handler_name = kstrdup(dm_shift_arg(as), GFP_KERNEL);
234     - request_module("scsi_dh_%s", m->hw_handler_name);
235     - if (scsi_dh_handler_exist(m->hw_handler_name) == 0) {
236     + if (!try_then_request_module(scsi_dh_handler_exist(m->hw_handler_name),
237     + "scsi_dh_%s", m->hw_handler_name)) {
238     ti->error = "unknown hardware handler type";
239     ret = -EINVAL;
240     goto fail;
241     diff --git a/drivers/md/md.c b/drivers/md/md.c
242     index 065ab4f..adcd850 100644
243     --- a/drivers/md/md.c
244     +++ b/drivers/md/md.c
245     @@ -392,6 +392,8 @@ void mddev_suspend(struct mddev *mddev)
246     synchronize_rcu();
247     wait_event(mddev->sb_wait, atomic_read(&mddev->active_io) == 0);
248     mddev->pers->quiesce(mddev, 1);
249     +
250     + del_timer_sync(&mddev->safemode_timer);
251     }
252     EXPORT_SYMBOL_GPL(mddev_suspend);
253    
254     diff --git a/drivers/media/rc/ene_ir.c b/drivers/media/rc/ene_ir.c
255     index cf10ecf..ed77c6d 100644
256     --- a/drivers/media/rc/ene_ir.c
257     +++ b/drivers/media/rc/ene_ir.c
258     @@ -1018,22 +1018,6 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
259    
260     spin_lock_init(&dev->hw_lock);
261    
262     - /* claim the resources */
263     - error = -EBUSY;
264     - dev->hw_io = pnp_port_start(pnp_dev, 0);
265     - if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
266     - dev->hw_io = -1;
267     - dev->irq = -1;
268     - goto error;
269     - }
270     -
271     - dev->irq = pnp_irq(pnp_dev, 0);
272     - if (request_irq(dev->irq, ene_isr,
273     - IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
274     - dev->irq = -1;
275     - goto error;
276     - }
277     -
278     pnp_set_drvdata(pnp_dev, dev);
279     dev->pnp_dev = pnp_dev;
280    
281     @@ -1086,6 +1070,22 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
282     device_set_wakeup_capable(&pnp_dev->dev, true);
283     device_set_wakeup_enable(&pnp_dev->dev, true);
284    
285     + /* claim the resources */
286     + error = -EBUSY;
287     + dev->hw_io = pnp_port_start(pnp_dev, 0);
288     + if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
289     + dev->hw_io = -1;
290     + dev->irq = -1;
291     + goto error;
292     + }
293     +
294     + dev->irq = pnp_irq(pnp_dev, 0);
295     + if (request_irq(dev->irq, ene_isr,
296     + IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
297     + dev->irq = -1;
298     + goto error;
299     + }
300     +
301     error = rc_register_device(rdev);
302     if (error < 0)
303     goto error;
304     diff --git a/drivers/media/rc/fintek-cir.c b/drivers/media/rc/fintek-cir.c
305     index 7f7079b..4218f73 100644
306     --- a/drivers/media/rc/fintek-cir.c
307     +++ b/drivers/media/rc/fintek-cir.c
308     @@ -504,16 +504,6 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
309    
310     spin_lock_init(&fintek->fintek_lock);
311    
312     - ret = -EBUSY;
313     - /* now claim resources */
314     - if (!request_region(fintek->cir_addr,
315     - fintek->cir_port_len, FINTEK_DRIVER_NAME))
316     - goto failure;
317     -
318     - if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED,
319     - FINTEK_DRIVER_NAME, (void *)fintek))
320     - goto failure;
321     -
322     pnp_set_drvdata(pdev, fintek);
323     fintek->pdev = pdev;
324    
325     @@ -548,6 +538,16 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
326     /* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
327     rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
328    
329     + ret = -EBUSY;
330     + /* now claim resources */
331     + if (!request_region(fintek->cir_addr,
332     + fintek->cir_port_len, FINTEK_DRIVER_NAME))
333     + goto failure;
334     +
335     + if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED,
336     + FINTEK_DRIVER_NAME, (void *)fintek))
337     + goto failure;
338     +
339     ret = rc_register_device(rdev);
340     if (ret)
341     goto failure;
342     diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c
343     index 682009d..0e49c99 100644
344     --- a/drivers/media/rc/ite-cir.c
345     +++ b/drivers/media/rc/ite-cir.c
346     @@ -1515,16 +1515,6 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
347     /* initialize raw event */
348     init_ir_raw_event(&itdev->rawir);
349    
350     - ret = -EBUSY;
351     - /* now claim resources */
352     - if (!request_region(itdev->cir_addr,
353     - dev_desc->io_region_size, ITE_DRIVER_NAME))
354     - goto failure;
355     -
356     - if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
357     - ITE_DRIVER_NAME, (void *)itdev))
358     - goto failure;
359     -
360     /* set driver data into the pnp device */
361     pnp_set_drvdata(pdev, itdev);
362     itdev->pdev = pdev;
363     @@ -1600,6 +1590,16 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
364     rdev->driver_name = ITE_DRIVER_NAME;
365     rdev->map_name = RC_MAP_RC6_MCE;
366    
367     + ret = -EBUSY;
368     + /* now claim resources */
369     + if (!request_region(itdev->cir_addr,
370     + dev_desc->io_region_size, ITE_DRIVER_NAME))
371     + goto failure;
372     +
373     + if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
374     + ITE_DRIVER_NAME, (void *)itdev))
375     + goto failure;
376     +
377     ret = rc_register_device(rdev);
378     if (ret)
379     goto failure;
380     diff --git a/drivers/media/rc/nuvoton-cir.c b/drivers/media/rc/nuvoton-cir.c
381     index 144f3f5..8b2c071 100644
382     --- a/drivers/media/rc/nuvoton-cir.c
383     +++ b/drivers/media/rc/nuvoton-cir.c
384     @@ -1021,24 +1021,6 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
385     spin_lock_init(&nvt->nvt_lock);
386     spin_lock_init(&nvt->tx.lock);
387    
388     - ret = -EBUSY;
389     - /* now claim resources */
390     - if (!request_region(nvt->cir_addr,
391     - CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
392     - goto failure;
393     -
394     - if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED,
395     - NVT_DRIVER_NAME, (void *)nvt))
396     - goto failure;
397     -
398     - if (!request_region(nvt->cir_wake_addr,
399     - CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
400     - goto failure;
401     -
402     - if (request_irq(nvt->cir_wake_irq, nvt_cir_wake_isr, IRQF_SHARED,
403     - NVT_DRIVER_NAME, (void *)nvt))
404     - goto failure;
405     -
406     pnp_set_drvdata(pdev, nvt);
407     nvt->pdev = pdev;
408    
409     @@ -1085,6 +1067,24 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
410     rdev->tx_resolution = XYZ;
411     #endif
412    
413     + ret = -EBUSY;
414     + /* now claim resources */
415     + if (!request_region(nvt->cir_addr,
416     + CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
417     + goto failure;
418     +
419     + if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED,
420     + NVT_DRIVER_NAME, (void *)nvt))
421     + goto failure;
422     +
423     + if (!request_region(nvt->cir_wake_addr,
424     + CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
425     + goto failure;
426     +
427     + if (request_irq(nvt->cir_wake_irq, nvt_cir_wake_isr, IRQF_SHARED,
428     + NVT_DRIVER_NAME, (void *)nvt))
429     + goto failure;
430     +
431     ret = rc_register_device(rdev);
432     if (ret)
433     goto failure;
434     diff --git a/drivers/media/rc/winbond-cir.c b/drivers/media/rc/winbond-cir.c
435     index a7e7d6f..4591770 100644
436     --- a/drivers/media/rc/winbond-cir.c
437     +++ b/drivers/media/rc/winbond-cir.c
438     @@ -991,39 +991,10 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
439     "(w: 0x%lX, e: 0x%lX, s: 0x%lX, i: %u)\n",
440     data->wbase, data->ebase, data->sbase, data->irq);
441    
442     - if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
443     - dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
444     - data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1);
445     - err = -EBUSY;
446     - goto exit_free_data;
447     - }
448     -
449     - if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) {
450     - dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
451     - data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1);
452     - err = -EBUSY;
453     - goto exit_release_wbase;
454     - }
455     -
456     - if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) {
457     - dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
458     - data->sbase, data->sbase + SP_IOMEM_LEN - 1);
459     - err = -EBUSY;
460     - goto exit_release_ebase;
461     - }
462     -
463     - err = request_irq(data->irq, wbcir_irq_handler,
464     - IRQF_DISABLED, DRVNAME, device);
465     - if (err) {
466     - dev_err(dev, "Failed to claim IRQ %u\n", data->irq);
467     - err = -EBUSY;
468     - goto exit_release_sbase;
469     - }
470     -
471     led_trigger_register_simple("cir-tx", &data->txtrigger);
472     if (!data->txtrigger) {
473     err = -ENOMEM;
474     - goto exit_free_irq;
475     + goto exit_free_data;
476     }
477    
478     led_trigger_register_simple("cir-rx", &data->rxtrigger);
479     @@ -1062,9 +1033,38 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
480     data->dev->priv = data;
481     data->dev->dev.parent = &device->dev;
482    
483     + if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
484     + dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
485     + data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1);
486     + err = -EBUSY;
487     + goto exit_free_rc;
488     + }
489     +
490     + if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) {
491     + dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
492     + data->ebase, data->ebase + EHFUNC_IOMEM_LEN - 1);
493     + err = -EBUSY;
494     + goto exit_release_wbase;
495     + }
496     +
497     + if (!request_region(data->sbase, SP_IOMEM_LEN, DRVNAME)) {
498     + dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
499     + data->sbase, data->sbase + SP_IOMEM_LEN - 1);
500     + err = -EBUSY;
501     + goto exit_release_ebase;
502     + }
503     +
504     + err = request_irq(data->irq, wbcir_irq_handler,
505     + IRQF_DISABLED, DRVNAME, device);
506     + if (err) {
507     + dev_err(dev, "Failed to claim IRQ %u\n", data->irq);
508     + err = -EBUSY;
509     + goto exit_release_sbase;
510     + }
511     +
512     err = rc_register_device(data->dev);
513     if (err)
514     - goto exit_free_rc;
515     + goto exit_free_irq;
516    
517     device_init_wakeup(&device->dev, 1);
518    
519     @@ -1072,14 +1072,6 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
520    
521     return 0;
522    
523     -exit_free_rc:
524     - rc_free_device(data->dev);
525     -exit_unregister_led:
526     - led_classdev_unregister(&data->led);
527     -exit_unregister_rxtrigger:
528     - led_trigger_unregister_simple(data->rxtrigger);
529     -exit_unregister_txtrigger:
530     - led_trigger_unregister_simple(data->txtrigger);
531     exit_free_irq:
532     free_irq(data->irq, device);
533     exit_release_sbase:
534     @@ -1088,6 +1080,14 @@ exit_release_ebase:
535     release_region(data->ebase, EHFUNC_IOMEM_LEN);
536     exit_release_wbase:
537     release_region(data->wbase, WAKEUP_IOMEM_LEN);
538     +exit_free_rc:
539     + rc_free_device(data->dev);
540     +exit_unregister_led:
541     + led_classdev_unregister(&data->led);
542     +exit_unregister_rxtrigger:
543     + led_trigger_unregister_simple(data->rxtrigger);
544     +exit_unregister_txtrigger:
545     + led_trigger_unregister_simple(data->txtrigger);
546     exit_free_data:
547     kfree(data);
548     pnp_set_drvdata(device, NULL);
549     diff --git a/drivers/media/video/marvell-ccic/mmp-driver.c b/drivers/media/video/marvell-ccic/mmp-driver.c
550     index fb0b124..a6b7657 100644
551     --- a/drivers/media/video/marvell-ccic/mmp-driver.c
552     +++ b/drivers/media/video/marvell-ccic/mmp-driver.c
553     @@ -175,7 +175,6 @@ static int mmpcam_probe(struct platform_device *pdev)
554     INIT_LIST_HEAD(&cam->devlist);
555    
556     mcam = &cam->mcam;
557     - mcam->platform = MHP_Armada610;
558     mcam->plat_power_up = mmpcam_power_up;
559     mcam->plat_power_down = mmpcam_power_down;
560     mcam->dev = &pdev->dev;
561     diff --git a/drivers/media/video/s5p-fimc/fimc-capture.c b/drivers/media/video/s5p-fimc/fimc-capture.c
562     index 2cc3b91..327a81f 100644
563     --- a/drivers/media/video/s5p-fimc/fimc-capture.c
564     +++ b/drivers/media/video/s5p-fimc/fimc-capture.c
565     @@ -1304,7 +1304,7 @@ static int fimc_subdev_set_crop(struct v4l2_subdev *sd,
566     fimc_capture_try_crop(ctx, r, crop->pad);
567    
568     if (crop->which == V4L2_SUBDEV_FORMAT_TRY) {
569     - mutex_lock(&fimc->lock);
570     + mutex_unlock(&fimc->lock);
571     *v4l2_subdev_get_try_crop(fh, crop->pad) = *r;
572     return 0;
573     }
574     diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
575     index 3d55883..2dcac28 100644
576     --- a/drivers/net/ethernet/broadcom/tg3.c
577     +++ b/drivers/net/ethernet/broadcom/tg3.c
578     @@ -879,8 +879,13 @@ static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
579     if (sblk->status & SD_STATUS_LINK_CHG)
580     work_exists = 1;
581     }
582     - /* check for RX/TX work to do */
583     - if (sblk->idx[0].tx_consumer != tnapi->tx_cons ||
584     +
585     + /* check for TX work to do */
586     + if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
587     + work_exists = 1;
588     +
589     + /* check for RX work to do */
590     + if (tnapi->rx_rcb_prod_idx &&
591     *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
592     work_exists = 1;
593    
594     @@ -5895,6 +5900,9 @@ static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
595     return work_done;
596     }
597    
598     + if (!tnapi->rx_rcb_prod_idx)
599     + return work_done;
600     +
601     /* run RX thread, within the bounds set by NAPI.
602     * All RX "locking" is done by ensuring outside
603     * code synchronizes with tg3->napi.poll()
604     @@ -7448,6 +7456,12 @@ static int tg3_alloc_consistent(struct tg3 *tp)
605     */
606     switch (i) {
607     default:
608     + if (tg3_flag(tp, ENABLE_RSS)) {
609     + tnapi->rx_rcb_prod_idx = NULL;
610     + break;
611     + }
612     + /* Fall through */
613     + case 1:
614     tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
615     break;
616     case 2:
617     diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
618     index cf480b5..de00805 100644
619     --- a/drivers/net/ethernet/intel/e1000/e1000_main.c
620     +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
621     @@ -494,7 +494,11 @@ out:
622     static void e1000_down_and_stop(struct e1000_adapter *adapter)
623     {
624     set_bit(__E1000_DOWN, &adapter->flags);
625     - cancel_work_sync(&adapter->reset_task);
626     +
627     + /* Only kill reset task if adapter is not resetting */
628     + if (!test_bit(__E1000_RESETTING, &adapter->flags))
629     + cancel_work_sync(&adapter->reset_task);
630     +
631     cancel_delayed_work_sync(&adapter->watchdog_task);
632     cancel_delayed_work_sync(&adapter->phy_info_task);
633     cancel_delayed_work_sync(&adapter->fifo_stall_task);
634     diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
635     index 7eb8a00..65c51ff 100644
636     --- a/drivers/net/ethernet/marvell/sky2.c
637     +++ b/drivers/net/ethernet/marvell/sky2.c
638     @@ -2475,8 +2475,13 @@ static struct sk_buff *receive_copy(struct sky2_port *sky2,
639     skb_copy_from_linear_data(re->skb, skb->data, length);
640     skb->ip_summed = re->skb->ip_summed;
641     skb->csum = re->skb->csum;
642     + skb->rxhash = re->skb->rxhash;
643     + skb->vlan_tci = re->skb->vlan_tci;
644     +
645     pci_dma_sync_single_for_device(sky2->hw->pdev, re->data_addr,
646     length, PCI_DMA_FROMDEVICE);
647     + re->skb->vlan_tci = 0;
648     + re->skb->rxhash = 0;
649     re->skb->ip_summed = CHECKSUM_NONE;
650     skb_put(skb, length);
651     }
652     @@ -2561,9 +2566,6 @@ static struct sk_buff *sky2_receive(struct net_device *dev,
653     struct sk_buff *skb = NULL;
654     u16 count = (status & GMR_FS_LEN) >> 16;
655    
656     - if (status & GMR_FS_VLAN)
657     - count -= VLAN_HLEN; /* Account for vlan tag */
658     -
659     netif_printk(sky2, rx_status, KERN_DEBUG, dev,
660     "rx slot %u status 0x%x len %d\n",
661     sky2->rx_next, status, length);
662     @@ -2571,6 +2573,9 @@ static struct sk_buff *sky2_receive(struct net_device *dev,
663     sky2->rx_next = (sky2->rx_next + 1) % sky2->rx_pending;
664     prefetch(sky2->rx_ring + sky2->rx_next);
665    
666     + if (vlan_tx_tag_present(re->skb))
667     + count -= VLAN_HLEN; /* Account for vlan tag */
668     +
669     /* This chip has hardware problems that generates bogus status.
670     * So do only marginal checking and expect higher level protocols
671     * to handle crap frames.
672     @@ -2628,11 +2633,8 @@ static inline void sky2_tx_done(struct net_device *dev, u16 last)
673     }
674    
675     static inline void sky2_skb_rx(const struct sky2_port *sky2,
676     - u32 status, struct sk_buff *skb)
677     + struct sk_buff *skb)
678     {
679     - if (status & GMR_FS_VLAN)
680     - __vlan_hwaccel_put_tag(skb, be16_to_cpu(sky2->rx_tag));
681     -
682     if (skb->ip_summed == CHECKSUM_NONE)
683     netif_receive_skb(skb);
684     else
685     @@ -2686,6 +2688,14 @@ static void sky2_rx_checksum(struct sky2_port *sky2, u32 status)
686     }
687     }
688    
689     +static void sky2_rx_tag(struct sky2_port *sky2, u16 length)
690     +{
691     + struct sk_buff *skb;
692     +
693     + skb = sky2->rx_ring[sky2->rx_next].skb;
694     + __vlan_hwaccel_put_tag(skb, be16_to_cpu(length));
695     +}
696     +
697     static void sky2_rx_hash(struct sky2_port *sky2, u32 status)
698     {
699     struct sk_buff *skb;
700     @@ -2744,8 +2754,7 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do, u16 idx)
701     }
702    
703     skb->protocol = eth_type_trans(skb, dev);
704     -
705     - sky2_skb_rx(sky2, status, skb);
706     + sky2_skb_rx(sky2, skb);
707    
708     /* Stop after net poll weight */
709     if (++work_done >= to_do)
710     @@ -2753,11 +2762,11 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do, u16 idx)
711     break;
712    
713     case OP_RXVLAN:
714     - sky2->rx_tag = length;
715     + sky2_rx_tag(sky2, length);
716     break;
717    
718     case OP_RXCHKSVLAN:
719     - sky2->rx_tag = length;
720     + sky2_rx_tag(sky2, length);
721     /* fall through */
722     case OP_RXCHKS:
723     if (likely(dev->features & NETIF_F_RXCSUM))
724     diff --git a/drivers/net/ethernet/marvell/sky2.h b/drivers/net/ethernet/marvell/sky2.h
725     index ff6f58b..3c896ce 100644
726     --- a/drivers/net/ethernet/marvell/sky2.h
727     +++ b/drivers/net/ethernet/marvell/sky2.h
728     @@ -2241,7 +2241,6 @@ struct sky2_port {
729     u16 rx_pending;
730     u16 rx_data_size;
731     u16 rx_nfrags;
732     - u16 rx_tag;
733    
734     struct {
735     unsigned long last;
736     diff --git a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
737     index 41e6b33..c07cfe9 100644
738     --- a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
739     +++ b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
740     @@ -22,6 +22,7 @@
741     Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
742     *******************************************************************************/
743    
744     +#include <linux/kernel.h>
745     #include <linux/io.h>
746     #include "mmc.h"
747    
748     diff --git a/drivers/net/ethernet/sun/sungem.c b/drivers/net/ethernet/sun/sungem.c
749     index ceab215..c508d6a 100644
750     --- a/drivers/net/ethernet/sun/sungem.c
751     +++ b/drivers/net/ethernet/sun/sungem.c
752     @@ -2340,7 +2340,7 @@ static int gem_suspend(struct pci_dev *pdev, pm_message_t state)
753     netif_device_detach(dev);
754    
755     /* Switch off chip, remember WOL setting */
756     - gp->asleep_wol = gp->wake_on_lan;
757     + gp->asleep_wol = !!gp->wake_on_lan;
758     gem_do_stop(dev, gp->asleep_wol);
759    
760     /* Unlock the network stack */
761     diff --git a/drivers/net/phy/icplus.c b/drivers/net/phy/icplus.c
762     index c81f136..b142300 100644
763     --- a/drivers/net/phy/icplus.c
764     +++ b/drivers/net/phy/icplus.c
765     @@ -150,7 +150,8 @@ static int ip101a_config_init(struct phy_device *phydev)
766     /* Enable Auto Power Saving mode */
767     c = phy_read(phydev, IP10XX_SPEC_CTRL_STATUS);
768     c |= IP101A_APS_ON;
769     - return c;
770     +
771     + return phy_write(phydev, IP10XX_SPEC_CTRL_STATUS, c);
772     }
773    
774     static int ip175c_read_status(struct phy_device *phydev)
775     diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c
776     index fda4be2..a9abee8 100644
777     --- a/drivers/net/usb/asix.c
778     +++ b/drivers/net/usb/asix.c
779     @@ -403,7 +403,7 @@ static struct sk_buff *asix_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
780     u32 packet_len;
781     u32 padbytes = 0xffff0000;
782    
783     - padlen = ((skb->len + 4) % 512) ? 0 : 4;
784     + padlen = ((skb->len + 4) & (dev->maxpacket - 1)) ? 0 : 4;
785    
786     if ((!skb_cloned(skb)) &&
787     ((headroom + tailroom) >= (4 + padlen))) {
788     @@ -425,7 +425,7 @@ static struct sk_buff *asix_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
789     cpu_to_le32s(&packet_len);
790     skb_copy_to_linear_data(skb, &packet_len, sizeof(packet_len));
791    
792     - if ((skb->len % 512) == 0) {
793     + if (padlen) {
794     cpu_to_le32s(&padbytes);
795     memcpy(skb_tail_pointer(skb), &padbytes, sizeof(padbytes));
796     skb_put(skb, sizeof(padbytes));
797     diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
798     index 4fd4144..2ba40cf 100644
799     --- a/drivers/net/usb/cdc_ether.c
800     +++ b/drivers/net/usb/cdc_ether.c
801     @@ -83,6 +83,7 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)
802     struct cdc_state *info = (void *) &dev->data;
803     int status;
804     int rndis;
805     + bool android_rndis_quirk = false;
806     struct usb_driver *driver = driver_of(intf);
807     struct usb_cdc_mdlm_desc *desc = NULL;
808     struct usb_cdc_mdlm_detail_desc *detail = NULL;
809     @@ -195,6 +196,11 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)
810     info->control,
811     info->u->bSlaveInterface0,
812     info->data);
813     + /* fall back to hard-wiring for RNDIS */
814     + if (rndis) {
815     + android_rndis_quirk = true;
816     + goto next_desc;
817     + }
818     goto bad_desc;
819     }
820     if (info->control != intf) {
821     @@ -271,11 +277,15 @@ next_desc:
822     /* Microsoft ActiveSync based and some regular RNDIS devices lack the
823     * CDC descriptors, so we'll hard-wire the interfaces and not check
824     * for descriptors.
825     + *
826     + * Some Android RNDIS devices have a CDC Union descriptor pointing
827     + * to non-existing interfaces. Ignore that and attempt the same
828     + * hard-wired 0 and 1 interfaces.
829     */
830     - if (rndis && !info->u) {
831     + if (rndis && (!info->u || android_rndis_quirk)) {
832     info->control = usb_ifnum_to_if(dev->udev, 0);
833     info->data = usb_ifnum_to_if(dev->udev, 1);
834     - if (!info->control || !info->data) {
835     + if (!info->control || !info->data || info->control != intf) {
836     dev_dbg(&intf->dev,
837     "rndis: master #0/%p slave #1/%p\n",
838     info->control,
839     @@ -472,6 +482,7 @@ static const struct driver_info wwan_info = {
840     /*-------------------------------------------------------------------------*/
841    
842     #define HUAWEI_VENDOR_ID 0x12D1
843     +#define NOVATEL_VENDOR_ID 0x1410
844    
845     static const struct usb_device_id products [] = {
846     /*
847     @@ -589,6 +600,21 @@ static const struct usb_device_id products [] = {
848     * because of bugs/quirks in a given product (like Zaurus, above).
849     */
850     {
851     + /* Novatel USB551L */
852     + /* This match must come *before* the generic CDC-ETHER match so that
853     + * we get FLAG_WWAN set on the device, since it's descriptors are
854     + * generic CDC-ETHER.
855     + */
856     + .match_flags = USB_DEVICE_ID_MATCH_VENDOR
857     + | USB_DEVICE_ID_MATCH_PRODUCT
858     + | USB_DEVICE_ID_MATCH_INT_INFO,
859     + .idVendor = NOVATEL_VENDOR_ID,
860     + .idProduct = 0xB001,
861     + .bInterfaceClass = USB_CLASS_COMM,
862     + .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET,
863     + .bInterfaceProtocol = USB_CDC_PROTO_NONE,
864     + .driver_info = (unsigned long)&wwan_info,
865     +}, {
866     USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET,
867     USB_CDC_PROTO_NONE),
868     .driver_info = (unsigned long) &cdc_info,
869     diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
870     index 750e330..b873b5d 100644
871     --- a/drivers/net/usb/usbnet.c
872     +++ b/drivers/net/usb/usbnet.c
873     @@ -281,17 +281,32 @@ int usbnet_change_mtu (struct net_device *net, int new_mtu)
874     }
875     EXPORT_SYMBOL_GPL(usbnet_change_mtu);
876    
877     +/* The caller must hold list->lock */
878     +static void __usbnet_queue_skb(struct sk_buff_head *list,
879     + struct sk_buff *newsk, enum skb_state state)
880     +{
881     + struct skb_data *entry = (struct skb_data *) newsk->cb;
882     +
883     + __skb_queue_tail(list, newsk);
884     + entry->state = state;
885     +}
886     +
887     /*-------------------------------------------------------------------------*/
888    
889     /* some LK 2.4 HCDs oopsed if we freed or resubmitted urbs from
890     * completion callbacks. 2.5 should have fixed those bugs...
891     */
892    
893     -static void defer_bh(struct usbnet *dev, struct sk_buff *skb, struct sk_buff_head *list)
894     +static enum skb_state defer_bh(struct usbnet *dev, struct sk_buff *skb,
895     + struct sk_buff_head *list, enum skb_state state)
896     {
897     unsigned long flags;
898     + enum skb_state old_state;
899     + struct skb_data *entry = (struct skb_data *) skb->cb;
900    
901     spin_lock_irqsave(&list->lock, flags);
902     + old_state = entry->state;
903     + entry->state = state;
904     __skb_unlink(skb, list);
905     spin_unlock(&list->lock);
906     spin_lock(&dev->done.lock);
907     @@ -299,6 +314,7 @@ static void defer_bh(struct usbnet *dev, struct sk_buff *skb, struct sk_buff_hea
908     if (dev->done.qlen == 1)
909     tasklet_schedule(&dev->bh);
910     spin_unlock_irqrestore(&dev->done.lock, flags);
911     + return old_state;
912     }
913    
914     /* some work can't be done in tasklets, so we use keventd
915     @@ -339,7 +355,6 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
916     entry = (struct skb_data *) skb->cb;
917     entry->urb = urb;
918     entry->dev = dev;
919     - entry->state = rx_start;
920     entry->length = 0;
921    
922     usb_fill_bulk_urb (urb, dev->udev, dev->in,
923     @@ -371,7 +386,7 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
924     tasklet_schedule (&dev->bh);
925     break;
926     case 0:
927     - __skb_queue_tail (&dev->rxq, skb);
928     + __usbnet_queue_skb(&dev->rxq, skb, rx_start);
929     }
930     } else {
931     netif_dbg(dev, ifdown, dev->net, "rx: stopped\n");
932     @@ -422,16 +437,17 @@ static void rx_complete (struct urb *urb)
933     struct skb_data *entry = (struct skb_data *) skb->cb;
934     struct usbnet *dev = entry->dev;
935     int urb_status = urb->status;
936     + enum skb_state state;
937    
938     skb_put (skb, urb->actual_length);
939     - entry->state = rx_done;
940     + state = rx_done;
941     entry->urb = NULL;
942    
943     switch (urb_status) {
944     /* success */
945     case 0:
946     if (skb->len < dev->net->hard_header_len) {
947     - entry->state = rx_cleanup;
948     + state = rx_cleanup;
949     dev->net->stats.rx_errors++;
950     dev->net->stats.rx_length_errors++;
951     netif_dbg(dev, rx_err, dev->net,
952     @@ -470,7 +486,7 @@ static void rx_complete (struct urb *urb)
953     "rx throttle %d\n", urb_status);
954     }
955     block:
956     - entry->state = rx_cleanup;
957     + state = rx_cleanup;
958     entry->urb = urb;
959     urb = NULL;
960     break;
961     @@ -481,17 +497,18 @@ block:
962     // FALLTHROUGH
963    
964     default:
965     - entry->state = rx_cleanup;
966     + state = rx_cleanup;
967     dev->net->stats.rx_errors++;
968     netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status);
969     break;
970     }
971    
972     - defer_bh(dev, skb, &dev->rxq);
973     + state = defer_bh(dev, skb, &dev->rxq, state);
974    
975     if (urb) {
976     if (netif_running (dev->net) &&
977     - !test_bit (EVENT_RX_HALT, &dev->flags)) {
978     + !test_bit (EVENT_RX_HALT, &dev->flags) &&
979     + state != unlink_start) {
980     rx_submit (dev, urb, GFP_ATOMIC);
981     return;
982     }
983     @@ -577,16 +594,23 @@ EXPORT_SYMBOL_GPL(usbnet_purge_paused_rxq);
984     static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
985     {
986     unsigned long flags;
987     - struct sk_buff *skb, *skbnext;
988     + struct sk_buff *skb;
989     int count = 0;
990    
991     spin_lock_irqsave (&q->lock, flags);
992     - skb_queue_walk_safe(q, skb, skbnext) {
993     + while (!skb_queue_empty(q)) {
994     struct skb_data *entry;
995     struct urb *urb;
996     int retval;
997    
998     - entry = (struct skb_data *) skb->cb;
999     + skb_queue_walk(q, skb) {
1000     + entry = (struct skb_data *) skb->cb;
1001     + if (entry->state != unlink_start)
1002     + goto found;
1003     + }
1004     + break;
1005     +found:
1006     + entry->state = unlink_start;
1007     urb = entry->urb;
1008    
1009     /*
1010     @@ -1037,8 +1061,7 @@ static void tx_complete (struct urb *urb)
1011     }
1012    
1013     usb_autopm_put_interface_async(dev->intf);
1014     - entry->state = tx_done;
1015     - defer_bh(dev, skb, &dev->txq);
1016     + (void) defer_bh(dev, skb, &dev->txq, tx_done);
1017     }
1018    
1019     /*-------------------------------------------------------------------------*/
1020     @@ -1094,7 +1117,6 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
1021     entry = (struct skb_data *) skb->cb;
1022     entry->urb = urb;
1023     entry->dev = dev;
1024     - entry->state = tx_start;
1025     entry->length = length;
1026    
1027     usb_fill_bulk_urb (urb, dev->udev, dev->out,
1028     @@ -1153,7 +1175,7 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
1029     break;
1030     case 0:
1031     net->trans_start = jiffies;
1032     - __skb_queue_tail (&dev->txq, skb);
1033     + __usbnet_queue_skb(&dev->txq, skb, tx_start);
1034     if (dev->txq.qlen >= TX_QLEN (dev))
1035     netif_stop_queue (net);
1036     }
1037     diff --git a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
1038     index 7f27dbd..0515862 100644
1039     --- a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
1040     +++ b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
1041     @@ -1053,17 +1053,13 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,
1042     }
1043     /* either retransmit or send bar if ack not recd */
1044     if (!ack_recd) {
1045     - struct ieee80211_tx_rate *txrate =
1046     - tx_info->status.rates;
1047     - if (retry && (txrate[0].count < (int)retry_limit)) {
1048     + if (retry && (ini->txretry[index] < (int)retry_limit)) {
1049     ini->txretry[index]++;
1050     ini->tx_in_transit--;
1051     /*
1052     * Use high prededence for retransmit to
1053     * give some punch
1054     */
1055     - /* brcms_c_txq_enq(wlc, scb, p,
1056     - * BRCMS_PRIO_TO_PREC(tid)); */
1057     brcms_c_txq_enq(wlc, scb, p,
1058     BRCMS_PRIO_TO_HI_PREC(tid));
1059     } else {
1060     diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
1061     index f98becc..833cbef 100644
1062     --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
1063     +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
1064     @@ -7879,7 +7879,7 @@ brcms_c_recvctl(struct brcms_c_info *wlc, struct d11rxhdr *rxh,
1065     if (wlc->hw->suspended_fifos) {
1066     hdr = (struct ieee80211_hdr *)p->data;
1067     if (ieee80211_is_beacon(hdr->frame_control))
1068     - brcms_b_mute(wlc->hw, false);
1069     + brcms_b_mute(wlc->hw, false, 0);
1070     }
1071    
1072     memcpy(IEEE80211_SKB_RXCB(p), &rx_status, sizeof(rx_status));
1073     diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c
1074     index 6176129..8cba82d 100644
1075     --- a/drivers/regulator/max8997.c
1076     +++ b/drivers/regulator/max8997.c
1077     @@ -689,7 +689,7 @@ static int max8997_set_voltage_buck(struct regulator_dev *rdev,
1078     }
1079    
1080     new_val++;
1081     - } while (desc->min + desc->step + new_val <= desc->max);
1082     + } while (desc->min + desc->step * new_val <= desc->max);
1083    
1084     new_idx = tmp_idx;
1085     new_val = tmp_val;
1086     diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c
1087     index 54b9d2e..1590dbd 100644
1088     --- a/drivers/spi/spi-topcliff-pch.c
1089     +++ b/drivers/spi/spi-topcliff-pch.c
1090     @@ -196,6 +196,7 @@ struct pch_spi_data {
1091     struct pch_spi_dma_ctrl dma;
1092     int use_dma;
1093     u8 irq_reg_sts;
1094     + int save_total_len;
1095     };
1096    
1097     /**
1098     @@ -823,11 +824,13 @@ static void pch_spi_copy_rx_data_for_dma(struct pch_spi_data *data, int bpw)
1099     rx_dma_buf = data->dma.rx_buf_virt;
1100     for (j = 0; j < data->bpw_len; j++)
1101     *rx_buf++ = *rx_dma_buf++ & 0xFF;
1102     + data->cur_trans->rx_buf = rx_buf;
1103     } else {
1104     rx_sbuf = data->cur_trans->rx_buf;
1105     rx_dma_sbuf = data->dma.rx_buf_virt;
1106     for (j = 0; j < data->bpw_len; j++)
1107     *rx_sbuf++ = *rx_dma_sbuf++;
1108     + data->cur_trans->rx_buf = rx_sbuf;
1109     }
1110     }
1111    
1112     @@ -853,6 +856,9 @@ static int pch_spi_start_transfer(struct pch_spi_data *data)
1113     rtn = wait_event_interruptible_timeout(data->wait,
1114     data->transfer_complete,
1115     msecs_to_jiffies(2 * HZ));
1116     + if (!rtn)
1117     + dev_err(&data->master->dev,
1118     + "%s wait-event timeout\n", __func__);
1119    
1120     dma_sync_sg_for_cpu(&data->master->dev, dma->sg_rx_p, dma->nent,
1121     DMA_FROM_DEVICE);
1122     @@ -924,7 +930,8 @@ static void pch_spi_request_dma(struct pch_spi_data *data, int bpw)
1123     dma_cap_set(DMA_SLAVE, mask);
1124    
1125     /* Get DMA's dev information */
1126     - dma_dev = pci_get_bus_and_slot(2, PCI_DEVFN(12, 0));
1127     + dma_dev = pci_get_bus_and_slot(data->board_dat->pdev->bus->number,
1128     + PCI_DEVFN(12, 0));
1129    
1130     /* Set Tx DMA */
1131     param = &dma->param_tx;
1132     @@ -988,6 +995,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
1133     int i;
1134     int size;
1135     int rem;
1136     + int head;
1137     unsigned long flags;
1138     struct pch_spi_dma_ctrl *dma;
1139    
1140     @@ -1016,6 +1024,11 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
1141     }
1142     data->bpw_len = data->cur_trans->len / (*bpw / 8);
1143    
1144     + if (data->bpw_len > PCH_BUF_SIZE) {
1145     + data->bpw_len = PCH_BUF_SIZE;
1146     + data->cur_trans->len -= PCH_BUF_SIZE;
1147     + }
1148     +
1149     /* copy Tx Data */
1150     if (data->cur_trans->tx_buf != NULL) {
1151     if (*bpw == 8) {
1152     @@ -1030,10 +1043,17 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
1153     *tx_dma_sbuf++ = *tx_sbuf++;
1154     }
1155     }
1156     +
1157     + /* Calculate Rx parameter for DMA transmitting */
1158     if (data->bpw_len > PCH_DMA_TRANS_SIZE) {
1159     - num = data->bpw_len / PCH_DMA_TRANS_SIZE + 1;
1160     + if (data->bpw_len % PCH_DMA_TRANS_SIZE) {
1161     + num = data->bpw_len / PCH_DMA_TRANS_SIZE + 1;
1162     + rem = data->bpw_len % PCH_DMA_TRANS_SIZE;
1163     + } else {
1164     + num = data->bpw_len / PCH_DMA_TRANS_SIZE;
1165     + rem = PCH_DMA_TRANS_SIZE;
1166     + }
1167     size = PCH_DMA_TRANS_SIZE;
1168     - rem = data->bpw_len % PCH_DMA_TRANS_SIZE;
1169     } else {
1170     num = 1;
1171     size = data->bpw_len;
1172     @@ -1093,15 +1113,23 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
1173     dma->nent = num;
1174     dma->desc_rx = desc_rx;
1175    
1176     - /* TX */
1177     - if (data->bpw_len > PCH_DMA_TRANS_SIZE) {
1178     - num = data->bpw_len / PCH_DMA_TRANS_SIZE;
1179     + /* Calculate Tx parameter for DMA transmitting */
1180     + if (data->bpw_len > PCH_MAX_FIFO_DEPTH) {
1181     + head = PCH_MAX_FIFO_DEPTH - PCH_DMA_TRANS_SIZE;
1182     + if (data->bpw_len % PCH_DMA_TRANS_SIZE > 4) {
1183     + num = data->bpw_len / PCH_DMA_TRANS_SIZE + 1;
1184     + rem = data->bpw_len % PCH_DMA_TRANS_SIZE - head;
1185     + } else {
1186     + num = data->bpw_len / PCH_DMA_TRANS_SIZE;
1187     + rem = data->bpw_len % PCH_DMA_TRANS_SIZE +
1188     + PCH_DMA_TRANS_SIZE - head;
1189     + }
1190     size = PCH_DMA_TRANS_SIZE;
1191     - rem = 16;
1192     } else {
1193     num = 1;
1194     size = data->bpw_len;
1195     rem = data->bpw_len;
1196     + head = 0;
1197     }
1198    
1199     dma->sg_tx_p = kzalloc(sizeof(struct scatterlist)*num, GFP_ATOMIC);
1200     @@ -1111,11 +1139,17 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
1201     for (i = 0; i < num; i++, sg++) {
1202     if (i == 0) {
1203     sg->offset = 0;
1204     + sg_set_page(sg, virt_to_page(dma->tx_buf_virt), size + head,
1205     + sg->offset);
1206     + sg_dma_len(sg) = size + head;
1207     + } else if (i == (num - 1)) {
1208     + sg->offset = head + size * i;
1209     + sg->offset = sg->offset * (*bpw / 8);
1210     sg_set_page(sg, virt_to_page(dma->tx_buf_virt), rem,
1211     sg->offset);
1212     sg_dma_len(sg) = rem;
1213     } else {
1214     - sg->offset = rem + size * (i - 1);
1215     + sg->offset = head + size * i;
1216     sg->offset = sg->offset * (*bpw / 8);
1217     sg_set_page(sg, virt_to_page(dma->tx_buf_virt), size,
1218     sg->offset);
1219     @@ -1203,6 +1237,7 @@ static void pch_spi_process_messages(struct work_struct *pwork)
1220     data->current_msg->spi->bits_per_word);
1221     pch_spi_writereg(data->master, PCH_SSNXCR, SSN_NO_CONTROL);
1222     do {
1223     + int cnt;
1224     /* If we are already processing a message get the next
1225     transfer structure from the message otherwise retrieve
1226     the 1st transfer request from the message. */
1227     @@ -1222,11 +1257,28 @@ static void pch_spi_process_messages(struct work_struct *pwork)
1228     }
1229     spin_unlock(&data->lock);
1230    
1231     + if (!data->cur_trans->len)
1232     + goto out;
1233     + cnt = (data->cur_trans->len - 1) / PCH_BUF_SIZE + 1;
1234     + data->save_total_len = data->cur_trans->len;
1235     if (data->use_dma) {
1236     - pch_spi_handle_dma(data, &bpw);
1237     - if (!pch_spi_start_transfer(data))
1238     - goto out;
1239     - pch_spi_copy_rx_data_for_dma(data, bpw);
1240     + int i;
1241     + char *save_rx_buf = data->cur_trans->rx_buf;
1242     + for (i = 0; i < cnt; i ++) {
1243     + pch_spi_handle_dma(data, &bpw);
1244     + if (!pch_spi_start_transfer(data)) {
1245     + data->transfer_complete = true;
1246     + data->current_msg->status = -EIO;
1247     + data->current_msg->complete
1248     + (data->current_msg->context);
1249     + data->bcurrent_msg_processing = false;
1250     + data->current_msg = NULL;
1251     + data->cur_trans = NULL;
1252     + goto out;
1253     + }
1254     + pch_spi_copy_rx_data_for_dma(data, bpw);
1255     + }
1256     + data->cur_trans->rx_buf = save_rx_buf;
1257     } else {
1258     pch_spi_set_tx(data, &bpw);
1259     pch_spi_set_ir(data);
1260     @@ -1237,6 +1289,7 @@ static void pch_spi_process_messages(struct work_struct *pwork)
1261     data->pkt_tx_buff = NULL;
1262     }
1263     /* increment message count */
1264     + data->cur_trans->len = data->save_total_len;
1265     data->current_msg->actual_length += data->cur_trans->len;
1266    
1267     dev_dbg(&data->master->dev,
1268     @@ -1389,6 +1442,7 @@ static int __devinit pch_spi_pd_probe(struct platform_device *plat_dev)
1269     master->num_chipselect = PCH_MAX_CS;
1270     master->setup = pch_spi_setup;
1271     master->transfer = pch_spi_transfer;
1272     + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
1273    
1274     data->board_dat = board_dat;
1275     data->plat_dev = plat_dev;
1276     diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
1277     index b4864fb..cad8b92 100644
1278     --- a/drivers/target/target_core_file.c
1279     +++ b/drivers/target/target_core_file.c
1280     @@ -170,6 +170,7 @@ static struct se_device *fd_create_virtdevice(
1281     inode = file->f_mapping->host;
1282     if (S_ISBLK(inode->i_mode)) {
1283     struct request_queue *q;
1284     + unsigned long long dev_size;
1285     /*
1286     * Setup the local scope queue_limits from struct request_queue->limits
1287     * to pass into transport_add_device_to_core_hba() as struct se_dev_limits.
1288     @@ -184,13 +185,12 @@ static struct se_device *fd_create_virtdevice(
1289     * one (1) logical sector from underlying struct block_device
1290     */
1291     fd_dev->fd_block_size = bdev_logical_block_size(inode->i_bdev);
1292     - fd_dev->fd_dev_size = (i_size_read(file->f_mapping->host) -
1293     + dev_size = (i_size_read(file->f_mapping->host) -
1294     fd_dev->fd_block_size);
1295    
1296     pr_debug("FILEIO: Using size: %llu bytes from struct"
1297     " block_device blocks: %llu logical_block_size: %d\n",
1298     - fd_dev->fd_dev_size,
1299     - div_u64(fd_dev->fd_dev_size, fd_dev->fd_block_size),
1300     + dev_size, div_u64(dev_size, fd_dev->fd_block_size),
1301     fd_dev->fd_block_size);
1302     } else {
1303     if (!(fd_dev->fbd_flags & FBDF_HAS_SIZE)) {
1304     @@ -606,10 +606,20 @@ static u32 fd_get_device_type(struct se_device *dev)
1305     static sector_t fd_get_blocks(struct se_device *dev)
1306     {
1307     struct fd_dev *fd_dev = dev->dev_ptr;
1308     - unsigned long long blocks_long = div_u64(fd_dev->fd_dev_size,
1309     - dev->se_sub_dev->se_dev_attrib.block_size);
1310     + struct file *f = fd_dev->fd_file;
1311     + struct inode *i = f->f_mapping->host;
1312     + unsigned long long dev_size;
1313     + /*
1314     + * When using a file that references an underlying struct block_device,
1315     + * ensure dev_size is always based on the current inode size in order
1316     + * to handle underlying block_device resize operations.
1317     + */
1318     + if (S_ISBLK(i->i_mode))
1319     + dev_size = (i_size_read(i) - fd_dev->fd_block_size);
1320     + else
1321     + dev_size = fd_dev->fd_dev_size;
1322    
1323     - return blocks_long;
1324     + return div_u64(dev_size, dev->se_sub_dev->se_dev_attrib.block_size);
1325     }
1326    
1327     static struct se_subsystem_api fileio_template = {
1328     diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
1329     index 6cf6ff4..b75bc92 100644
1330     --- a/drivers/target/target_core_pr.c
1331     +++ b/drivers/target/target_core_pr.c
1332     @@ -223,6 +223,9 @@ int target_scsi2_reservation_release(struct se_task *task)
1333     if (dev->dev_reserved_node_acl != sess->se_node_acl)
1334     goto out_unlock;
1335    
1336     + if (dev->dev_res_bin_isid != sess->sess_bin_isid)
1337     + goto out_unlock;
1338     +
1339     dev->dev_reserved_node_acl = NULL;
1340     dev->dev_flags &= ~DF_SPC2_RESERVATIONS;
1341     if (dev->dev_flags & DF_SPC2_RESERVATIONS_WITH_ISID) {
1342     diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c
1343     index 8ddd133..d91fe44 100644
1344     --- a/drivers/target/target_core_tpg.c
1345     +++ b/drivers/target/target_core_tpg.c
1346     @@ -63,7 +63,6 @@ static void core_clear_initiator_node_from_tpg(
1347     int i;
1348     struct se_dev_entry *deve;
1349     struct se_lun *lun;
1350     - struct se_lun_acl *acl, *acl_tmp;
1351    
1352     spin_lock_irq(&nacl->device_list_lock);
1353     for (i = 0; i < TRANSPORT_MAX_LUNS_PER_TPG; i++) {
1354     @@ -84,28 +83,7 @@ static void core_clear_initiator_node_from_tpg(
1355     core_update_device_list_for_node(lun, NULL, deve->mapped_lun,
1356     TRANSPORT_LUNFLAGS_NO_ACCESS, nacl, tpg, 0);
1357    
1358     - spin_lock(&lun->lun_acl_lock);
1359     - list_for_each_entry_safe(acl, acl_tmp,
1360     - &lun->lun_acl_list, lacl_list) {
1361     - if (!strcmp(acl->initiatorname, nacl->initiatorname) &&
1362     - (acl->mapped_lun == deve->mapped_lun))
1363     - break;
1364     - }
1365     -
1366     - if (!acl) {
1367     - pr_err("Unable to locate struct se_lun_acl for %s,"
1368     - " mapped_lun: %u\n", nacl->initiatorname,
1369     - deve->mapped_lun);
1370     - spin_unlock(&lun->lun_acl_lock);
1371     - spin_lock_irq(&nacl->device_list_lock);
1372     - continue;
1373     - }
1374     -
1375     - list_del(&acl->lacl_list);
1376     - spin_unlock(&lun->lun_acl_lock);
1377     -
1378     spin_lock_irq(&nacl->device_list_lock);
1379     - kfree(acl);
1380     }
1381     spin_unlock_irq(&nacl->device_list_lock);
1382     }
1383     diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
1384     index 93a00d8..4410ae7 100644
1385     --- a/fs/ext4/xattr.c
1386     +++ b/fs/ext4/xattr.c
1387     @@ -487,18 +487,19 @@ ext4_xattr_release_block(handle_t *handle, struct inode *inode,
1388     ext4_free_blocks(handle, inode, bh, 0, 1,
1389     EXT4_FREE_BLOCKS_METADATA |
1390     EXT4_FREE_BLOCKS_FORGET);
1391     + unlock_buffer(bh);
1392     } else {
1393     le32_add_cpu(&BHDR(bh)->h_refcount, -1);
1394     + if (ce)
1395     + mb_cache_entry_release(ce);
1396     + unlock_buffer(bh);
1397     error = ext4_handle_dirty_metadata(handle, inode, bh);
1398     if (IS_SYNC(inode))
1399     ext4_handle_sync(handle);
1400     dquot_free_block(inode, 1);
1401     ea_bdebug(bh, "refcount now=%d; releasing",
1402     le32_to_cpu(BHDR(bh)->h_refcount));
1403     - if (ce)
1404     - mb_cache_entry_release(ce);
1405     }
1406     - unlock_buffer(bh);
1407     out:
1408     ext4_std_error(inode->i_sb, error);
1409     return;
1410     diff --git a/fs/jffs2/gc.c b/fs/jffs2/gc.c
1411     index 31dce61..4bbd521 100644
1412     --- a/fs/jffs2/gc.c
1413     +++ b/fs/jffs2/gc.c
1414     @@ -225,8 +225,8 @@ int jffs2_garbage_collect_pass(struct jffs2_sb_info *c)
1415     return 0;
1416    
1417     D1(printk(KERN_DEBUG "No progress from erasing blocks; doing GC anyway\n"));
1418     - spin_lock(&c->erase_completion_lock);
1419     mutex_lock(&c->alloc_sem);
1420     + spin_lock(&c->erase_completion_lock);
1421     }
1422    
1423     /* First, work out which block we're garbage-collecting */
1424     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1425     index 51f6a40..bab7c58 100644
1426     --- a/fs/nfs/nfs4proc.c
1427     +++ b/fs/nfs/nfs4proc.c
1428     @@ -1802,6 +1802,7 @@ static int _nfs4_do_open(struct inode *dir, struct dentry *dentry, fmode_t fmode
1429     nfs_setattr_update_inode(state->inode, sattr);
1430     nfs_post_op_update_inode(state->inode, opendata->o_res.f_attr);
1431     }
1432     + nfs_revalidate_inode(server, state->inode);
1433     nfs4_opendata_put(opendata);
1434     nfs4_put_state_owner(sp);
1435     *res = state;
1436     diff --git a/include/linux/mtd/map.h b/include/linux/mtd/map.h
1437     index a9e6ba4..daad4e6 100644
1438     --- a/include/linux/mtd/map.h
1439     +++ b/include/linux/mtd/map.h
1440     @@ -26,7 +26,7 @@
1441     #include <linux/list.h>
1442     #include <linux/string.h>
1443     #include <linux/bug.h>
1444     -
1445     +#include <linux/kernel.h>
1446    
1447     #include <asm/unaligned.h>
1448     #include <asm/system.h>
1449     diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
1450     index 605b0aa..76f4396 100644
1451     --- a/include/linux/usb/usbnet.h
1452     +++ b/include/linux/usb/usbnet.h
1453     @@ -191,7 +191,8 @@ extern void usbnet_cdc_status(struct usbnet *, struct urb *);
1454     enum skb_state {
1455     illegal = 0,
1456     tx_start, tx_done,
1457     - rx_start, rx_done, rx_cleanup
1458     + rx_start, rx_done, rx_cleanup,
1459     + unlink_start
1460     };
1461    
1462     struct skb_data { /* skb->cb is one of these */
1463     diff --git a/kernel/fork.c b/kernel/fork.c
1464     index 0acf42c0..26f1ab0 100644
1465     --- a/kernel/fork.c
1466     +++ b/kernel/fork.c
1467     @@ -47,6 +47,7 @@
1468     #include <linux/audit.h>
1469     #include <linux/memcontrol.h>
1470     #include <linux/ftrace.h>
1471     +#include <linux/proc_fs.h>
1472     #include <linux/profile.h>
1473     #include <linux/rmap.h>
1474     #include <linux/ksm.h>
1475     @@ -1387,6 +1388,8 @@ bad_fork_cleanup_io:
1476     if (p->io_context)
1477     exit_io_context(p);
1478     bad_fork_cleanup_namespaces:
1479     + if (unlikely(clone_flags & CLONE_NEWPID))
1480     + pid_ns_release_proc(p->nsproxy->pid_ns);
1481     exit_task_namespaces(p);
1482     bad_fork_cleanup_mm:
1483     if (p->mm)
1484     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1485     index bd936ed..7120c2e 100644
1486     --- a/mm/hugetlb.c
1487     +++ b/mm/hugetlb.c
1488     @@ -2405,7 +2405,6 @@ retry_avoidcopy:
1489     if (outside_reserve) {
1490     BUG_ON(huge_pte_none(pte));
1491     if (unmap_ref_private(mm, vma, old_page, address)) {
1492     - BUG_ON(page_count(old_page) != 1);
1493     BUG_ON(huge_pte_none(pte));
1494     spin_lock(&mm->page_table_lock);
1495     goto retry_avoidcopy;
1496     diff --git a/mm/nobootmem.c b/mm/nobootmem.c
1497     index 7fa41b4..07c08c4 100644
1498     --- a/mm/nobootmem.c
1499     +++ b/mm/nobootmem.c
1500     @@ -83,8 +83,7 @@ void __init free_bootmem_late(unsigned long addr, unsigned long size)
1501    
1502     static void __init __free_pages_memory(unsigned long start, unsigned long end)
1503     {
1504     - int i;
1505     - unsigned long start_aligned, end_aligned;
1506     + unsigned long i, start_aligned, end_aligned;
1507     int order = ilog2(BITS_PER_LONG);
1508    
1509     start_aligned = (start + (BITS_PER_LONG - 1)) & ~(BITS_PER_LONG - 1);
1510     diff --git a/mm/percpu.c b/mm/percpu.c
1511     index 716eb4a..5c29750 100644
1512     --- a/mm/percpu.c
1513     +++ b/mm/percpu.c
1514     @@ -1642,6 +1642,16 @@ int __init pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size,
1515     areas[group] = ptr;
1516    
1517     base = min(ptr, base);
1518     + }
1519     +
1520     + /*
1521     + * Copy data and free unused parts. This should happen after all
1522     + * allocations are complete; otherwise, we may end up with
1523     + * overlapping groups.
1524     + */
1525     + for (group = 0; group < ai->nr_groups; group++) {
1526     + struct pcpu_group_info *gi = &ai->groups[group];
1527     + void *ptr = areas[group];
1528    
1529     for (i = 0; i < gi->nr_units; i++, ptr += ai->unit_size) {
1530     if (gi->cpu_map[i] == NR_CPUS) {
1531     diff --git a/net/core/dev.c b/net/core/dev.c
1532     index cd5050e..61a7baa 100644
1533     --- a/net/core/dev.c
1534     +++ b/net/core/dev.c
1535     @@ -1421,14 +1421,34 @@ EXPORT_SYMBOL(register_netdevice_notifier);
1536     * register_netdevice_notifier(). The notifier is unlinked into the
1537     * kernel structures and may then be reused. A negative errno code
1538     * is returned on a failure.
1539     + *
1540     + * After unregistering unregister and down device events are synthesized
1541     + * for all devices on the device list to the removed notifier to remove
1542     + * the need for special case cleanup code.
1543     */
1544    
1545     int unregister_netdevice_notifier(struct notifier_block *nb)
1546     {
1547     + struct net_device *dev;
1548     + struct net *net;
1549     int err;
1550    
1551     rtnl_lock();
1552     err = raw_notifier_chain_unregister(&netdev_chain, nb);
1553     + if (err)
1554     + goto unlock;
1555     +
1556     + for_each_net(net) {
1557     + for_each_netdev(net, dev) {
1558     + if (dev->flags & IFF_UP) {
1559     + nb->notifier_call(nb, NETDEV_GOING_DOWN, dev);
1560     + nb->notifier_call(nb, NETDEV_DOWN, dev);
1561     + }
1562     + nb->notifier_call(nb, NETDEV_UNREGISTER, dev);
1563     + nb->notifier_call(nb, NETDEV_UNREGISTER_BATCH, dev);
1564     + }
1565     + }
1566     +unlock:
1567     rtnl_unlock();
1568     return err;
1569     }
1570     diff --git a/net/core/pktgen.c b/net/core/pktgen.c
1571     index 0001c24..df878de 100644
1572     --- a/net/core/pktgen.c
1573     +++ b/net/core/pktgen.c
1574     @@ -1932,7 +1932,7 @@ static int pktgen_device_event(struct notifier_block *unused,
1575     {
1576     struct net_device *dev = ptr;
1577    
1578     - if (!net_eq(dev_net(dev), &init_net))
1579     + if (!net_eq(dev_net(dev), &init_net) || pktgen_exiting)
1580     return NOTIFY_DONE;
1581    
1582     /* It is OK that we do not hold the group lock right now,
1583     @@ -3758,12 +3758,18 @@ static void __exit pg_cleanup(void)
1584     {
1585     struct pktgen_thread *t;
1586     struct list_head *q, *n;
1587     + LIST_HEAD(list);
1588    
1589     /* Stop all interfaces & threads */
1590     pktgen_exiting = true;
1591    
1592     - list_for_each_safe(q, n, &pktgen_threads) {
1593     + mutex_lock(&pktgen_thread_lock);
1594     + list_splice_init(&pktgen_threads, &list);
1595     + mutex_unlock(&pktgen_thread_lock);
1596     +
1597     + list_for_each_safe(q, n, &list) {
1598     t = list_entry(q, struct pktgen_thread, th_list);
1599     + list_del(&t->th_list);
1600     kthread_stop(t->tsk);
1601     kfree(t);
1602     }
1603     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
1604     index 7904db4..11ba922 100644
1605     --- a/net/ipv4/tcp.c
1606     +++ b/net/ipv4/tcp.c
1607     @@ -851,8 +851,7 @@ new_segment:
1608     wait_for_sndbuf:
1609     set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
1610     wait_for_memory:
1611     - if (copied)
1612     - tcp_push(sk, flags & ~MSG_MORE, mss_now, TCP_NAGLE_PUSH);
1613     + tcp_push(sk, flags & ~MSG_MORE, mss_now, TCP_NAGLE_PUSH);
1614    
1615     if ((err = sk_stream_wait_memory(sk, &timeo)) != 0)
1616     goto do_error;
1617     @@ -3216,7 +3215,7 @@ void __init tcp_init(void)
1618     {
1619     struct sk_buff *skb = NULL;
1620     unsigned long limit;
1621     - int i, max_share, cnt;
1622     + int i, max_rshare, max_wshare, cnt;
1623     unsigned long jiffy = jiffies;
1624    
1625     BUILD_BUG_ON(sizeof(struct tcp_skb_cb) > sizeof(skb->cb));
1626     @@ -3280,15 +3279,16 @@ void __init tcp_init(void)
1627    
1628     /* Set per-socket limits to no more than 1/128 the pressure threshold */
1629     limit = ((unsigned long)sysctl_tcp_mem[1]) << (PAGE_SHIFT - 7);
1630     - max_share = min(4UL*1024*1024, limit);
1631     + max_wshare = min(4UL*1024*1024, limit);
1632     + max_rshare = min(6UL*1024*1024, limit);
1633    
1634     sysctl_tcp_wmem[0] = SK_MEM_QUANTUM;
1635     sysctl_tcp_wmem[1] = 16*1024;
1636     - sysctl_tcp_wmem[2] = max(64*1024, max_share);
1637     + sysctl_tcp_wmem[2] = max(64*1024, max_wshare);
1638    
1639     sysctl_tcp_rmem[0] = SK_MEM_QUANTUM;
1640     sysctl_tcp_rmem[1] = 87380;
1641     - sysctl_tcp_rmem[2] = max(87380, max_share);
1642     + sysctl_tcp_rmem[2] = max(87380, max_rshare);
1643    
1644     printk(KERN_INFO "TCP: Hash tables configured "
1645     "(established %u bind %u)\n",
1646     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
1647     index daedc07..9726927 100644
1648     --- a/net/ipv4/tcp_input.c
1649     +++ b/net/ipv4/tcp_input.c
1650     @@ -83,7 +83,7 @@ int sysctl_tcp_ecn __read_mostly = 2;
1651     EXPORT_SYMBOL(sysctl_tcp_ecn);
1652     int sysctl_tcp_dsack __read_mostly = 1;
1653     int sysctl_tcp_app_win __read_mostly = 31;
1654     -int sysctl_tcp_adv_win_scale __read_mostly = 2;
1655     +int sysctl_tcp_adv_win_scale __read_mostly = 1;
1656     EXPORT_SYMBOL(sysctl_tcp_adv_win_scale);
1657    
1658     int sysctl_tcp_stdurg __read_mostly;
1659     @@ -2868,11 +2868,14 @@ static inline void tcp_complete_cwr(struct sock *sk)
1660    
1661     /* Do not moderate cwnd if it's already undone in cwr or recovery. */
1662     if (tp->undo_marker) {
1663     - if (inet_csk(sk)->icsk_ca_state == TCP_CA_CWR)
1664     + if (inet_csk(sk)->icsk_ca_state == TCP_CA_CWR) {
1665     tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh);
1666     - else /* PRR */
1667     + tp->snd_cwnd_stamp = tcp_time_stamp;
1668     + } else if (tp->snd_ssthresh < TCP_INFINITE_SSTHRESH) {
1669     + /* PRR algorithm. */
1670     tp->snd_cwnd = tp->snd_ssthresh;
1671     - tp->snd_cwnd_stamp = tcp_time_stamp;
1672     + tp->snd_cwnd_stamp = tcp_time_stamp;
1673     + }
1674     }
1675     tcp_ca_event(sk, CA_EVENT_COMPLETE_CWR);
1676     }
1677     diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
1678     index 55670ec..2a2a3e7 100644
1679     --- a/net/l2tp/l2tp_ip.c
1680     +++ b/net/l2tp/l2tp_ip.c
1681     @@ -441,8 +441,9 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
1682    
1683     daddr = lip->l2tp_addr.s_addr;
1684     } else {
1685     + rc = -EDESTADDRREQ;
1686     if (sk->sk_state != TCP_ESTABLISHED)
1687     - return -EDESTADDRREQ;
1688     + goto out;
1689    
1690     daddr = inet->inet_daddr;
1691     connected = 1;
1692     diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
1693     index 7801b15..a489d8b 100644
1694     --- a/net/sched/sch_netem.c
1695     +++ b/net/sched/sch_netem.c
1696     @@ -351,10 +351,8 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
1697     if (q->corrupt && q->corrupt >= get_crandom(&q->corrupt_cor)) {
1698     if (!(skb = skb_unshare(skb, GFP_ATOMIC)) ||
1699     (skb->ip_summed == CHECKSUM_PARTIAL &&
1700     - skb_checksum_help(skb))) {
1701     - sch->qstats.drops++;
1702     - return NET_XMIT_DROP;
1703     - }
1704     + skb_checksum_help(skb)))
1705     + return qdisc_drop(skb, sch);
1706    
1707     skb->data[net_random() % skb_headlen(skb)] ^= 1<<(net_random() % 8);
1708     }
1709     diff --git a/sound/pci/echoaudio/echoaudio_dsp.c b/sound/pci/echoaudio/echoaudio_dsp.c
1710     index 64417a7..d8c670c 100644
1711     --- a/sound/pci/echoaudio/echoaudio_dsp.c
1712     +++ b/sound/pci/echoaudio/echoaudio_dsp.c
1713     @@ -475,7 +475,7 @@ static int load_firmware(struct echoaudio *chip)
1714     const struct firmware *fw;
1715     int box_type, err;
1716    
1717     - if (snd_BUG_ON(!chip->dsp_code_to_load || !chip->comm_page))
1718     + if (snd_BUG_ON(!chip->comm_page))
1719     return -EPERM;
1720    
1721     /* See if the ASIC is present and working - only if the DSP is already loaded */
1722     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
1723     index 192e6c0..53345bc 100644
1724     --- a/sound/pci/hda/hda_intel.c
1725     +++ b/sound/pci/hda/hda_intel.c
1726     @@ -769,11 +769,13 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
1727     {
1728     struct azx *chip = bus->private_data;
1729     unsigned long timeout;
1730     + unsigned long loopcounter;
1731     int do_poll = 0;
1732    
1733     again:
1734     timeout = jiffies + msecs_to_jiffies(1000);
1735     - for (;;) {
1736     +
1737     + for (loopcounter = 0;; loopcounter++) {
1738     if (chip->polling_mode || do_poll) {
1739     spin_lock_irq(&chip->reg_lock);
1740     azx_update_rirb(chip);
1741     @@ -789,7 +791,7 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
1742     }
1743     if (time_after(jiffies, timeout))
1744     break;
1745     - if (bus->needs_damn_long_delay)
1746     + if (bus->needs_damn_long_delay || loopcounter > 3000)
1747     msleep(2); /* temporary workaround */
1748     else {
1749     udelay(10);
1750     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
1751     index ed67698..7b7a516 100644
1752     --- a/sound/pci/hda/patch_sigmatel.c
1753     +++ b/sound/pci/hda/patch_sigmatel.c
1754     @@ -4484,9 +4484,9 @@ static int stac92xx_init(struct hda_codec *codec)
1755     def_conf = get_defcfg_connect(def_conf);
1756     /* skip any ports that don't have jacks since presence
1757     * detection is useless */
1758     - if (def_conf != AC_JACK_PORT_COMPLEX) {
1759     - if (def_conf != AC_JACK_PORT_NONE)
1760     - stac_toggle_power_map(codec, nid, 1);
1761     + if (def_conf != AC_JACK_PORT_NONE &&
1762     + !is_jack_detectable(codec, nid)) {
1763     + stac_toggle_power_map(codec, nid, 1);
1764     continue;
1765     }
1766     if (enable_pin_detect(codec, nid, STAC_PWR_EVENT)) {
1767     diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
1768     index 7806301..3e7aa22 100644
1769     --- a/sound/soc/codecs/wm8994.c
1770     +++ b/sound/soc/codecs/wm8994.c
1771     @@ -1027,7 +1027,7 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w,
1772     snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
1773     WM8994_AIF2DACL_ENA |
1774     WM8994_AIF2DACR_ENA, 0);
1775     - snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
1776     + snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_4,
1777     WM8994_AIF2ADCL_ENA |
1778     WM8994_AIF2ADCR_ENA, 0);
1779