Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1788 - (show annotations) (download)
Wed May 30 11:03:02 2012 UTC (11 years, 11 months ago) by niro
File size: 59900 byte(s)
-linux-3.2.18
1 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