Annotation of /trunk/kernel-magellan/patches-3.2/0117-3.2.18-all-fixes.patch
Parent Directory | Revision Log
Revision 1788 -
(hide annotations)
(download)
Wed May 30 11:03:02 2012 UTC (12 years, 4 months ago) by niro
File size: 59900 byte(s)
Wed May 30 11:03:02 2012 UTC (12 years, 4 months 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 |