Contents of /trunk/kernel-lts/patches-3.4/0120-3.4.21-all-fixes.patch
Parent Directory | Revision Log
Revision 1984 -
(show annotations)
(download)
Tue Dec 4 09:24:22 2012 UTC (11 years, 11 months ago) by niro
File size: 53970 byte(s)
Tue Dec 4 09:24:22 2012 UTC (11 years, 11 months ago) by niro
File size: 53970 byte(s)
-linux-3.4.21
1 | diff --git a/Documentation/dvb/get_dvb_firmware b/Documentation/dvb/get_dvb_firmware |
2 | index d1d4a17..b361e08 100755 |
3 | --- a/Documentation/dvb/get_dvb_firmware |
4 | +++ b/Documentation/dvb/get_dvb_firmware |
5 | @@ -115,7 +115,7 @@ sub tda10045 { |
6 | |
7 | sub tda10046 { |
8 | my $sourcefile = "TT_PCI_2.19h_28_11_2006.zip"; |
9 | - my $url = "http://www.tt-download.com/download/updates/219/$sourcefile"; |
10 | + my $url = "http://technotrend.com.ua/download/software/219/$sourcefile"; |
11 | my $hash = "6a7e1e2f2644b162ff0502367553c72d"; |
12 | my $outfile = "dvb-fe-tda10046.fw"; |
13 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); |
14 | diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c |
15 | index 5068fe5..fd433e7 100644 |
16 | --- a/arch/arm/plat-omap/counter_32k.c |
17 | +++ b/arch/arm/plat-omap/counter_32k.c |
18 | @@ -50,22 +50,29 @@ static u32 notrace omap_32k_read_sched_clock(void) |
19 | * nsecs and adds to a monotonically increasing timespec. |
20 | */ |
21 | static struct timespec persistent_ts; |
22 | -static cycles_t cycles, last_cycles; |
23 | +static cycles_t cycles; |
24 | static unsigned int persistent_mult, persistent_shift; |
25 | +static DEFINE_SPINLOCK(read_persistent_clock_lock); |
26 | + |
27 | void read_persistent_clock(struct timespec *ts) |
28 | { |
29 | unsigned long long nsecs; |
30 | - cycles_t delta; |
31 | - struct timespec *tsp = &persistent_ts; |
32 | + cycles_t last_cycles; |
33 | + unsigned long flags; |
34 | + |
35 | + spin_lock_irqsave(&read_persistent_clock_lock, flags); |
36 | |
37 | last_cycles = cycles; |
38 | cycles = timer_32k_base ? __raw_readl(timer_32k_base) : 0; |
39 | - delta = cycles - last_cycles; |
40 | |
41 | - nsecs = clocksource_cyc2ns(delta, persistent_mult, persistent_shift); |
42 | + nsecs = clocksource_cyc2ns(cycles - last_cycles, |
43 | + persistent_mult, persistent_shift); |
44 | + |
45 | + timespec_add_ns(&persistent_ts, nsecs); |
46 | + |
47 | + *ts = persistent_ts; |
48 | |
49 | - timespec_add_ns(tsp, nsecs); |
50 | - *ts = *tsp; |
51 | + spin_unlock_irqrestore(&read_persistent_clock_lock, flags); |
52 | } |
53 | |
54 | int __init omap_init_clocksource_32k(void) |
55 | diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c |
56 | index e141324..d0ea054 100644 |
57 | --- a/arch/parisc/kernel/signal32.c |
58 | +++ b/arch/parisc/kernel/signal32.c |
59 | @@ -67,7 +67,8 @@ put_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz) |
60 | { |
61 | compat_sigset_t s; |
62 | |
63 | - if (sz != sizeof *set) panic("put_sigset32()"); |
64 | + if (sz != sizeof *set) |
65 | + return -EINVAL; |
66 | sigset_64to32(&s, set); |
67 | |
68 | return copy_to_user(up, &s, sizeof s); |
69 | @@ -79,7 +80,8 @@ get_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz) |
70 | compat_sigset_t s; |
71 | int r; |
72 | |
73 | - if (sz != sizeof *set) panic("put_sigset32()"); |
74 | + if (sz != sizeof *set) |
75 | + return -EINVAL; |
76 | |
77 | if ((r = copy_from_user(&s, up, sz)) == 0) { |
78 | sigset_32to64(set, &s); |
79 | diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c |
80 | index c9b9322..7ea75d1 100644 |
81 | --- a/arch/parisc/kernel/sys_parisc.c |
82 | +++ b/arch/parisc/kernel/sys_parisc.c |
83 | @@ -73,6 +73,8 @@ static unsigned long get_shared_area(struct address_space *mapping, |
84 | struct vm_area_struct *vma; |
85 | int offset = mapping ? get_offset(mapping) : 0; |
86 | |
87 | + offset = (offset + (pgoff << PAGE_SHIFT)) & 0x3FF000; |
88 | + |
89 | addr = DCACHE_ALIGN(addr - offset) + offset; |
90 | |
91 | for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) { |
92 | diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c |
93 | index baf92cd..041e28d 100644 |
94 | --- a/arch/powerpc/platforms/pseries/eeh_driver.c |
95 | +++ b/arch/powerpc/platforms/pseries/eeh_driver.c |
96 | @@ -25,6 +25,7 @@ |
97 | #include <linux/delay.h> |
98 | #include <linux/interrupt.h> |
99 | #include <linux/irq.h> |
100 | +#include <linux/module.h> |
101 | #include <linux/pci.h> |
102 | #include <asm/eeh.h> |
103 | #include <asm/eeh_event.h> |
104 | @@ -47,6 +48,41 @@ static inline const char *eeh_pcid_name(struct pci_dev *pdev) |
105 | return ""; |
106 | } |
107 | |
108 | +/** |
109 | + * eeh_pcid_get - Get the PCI device driver |
110 | + * @pdev: PCI device |
111 | + * |
112 | + * The function is used to retrieve the PCI device driver for |
113 | + * the indicated PCI device. Besides, we will increase the reference |
114 | + * of the PCI device driver to prevent that being unloaded on |
115 | + * the fly. Otherwise, kernel crash would be seen. |
116 | + */ |
117 | +static inline struct pci_driver *eeh_pcid_get(struct pci_dev *pdev) |
118 | +{ |
119 | + if (!pdev || !pdev->driver) |
120 | + return NULL; |
121 | + |
122 | + if (!try_module_get(pdev->driver->driver.owner)) |
123 | + return NULL; |
124 | + |
125 | + return pdev->driver; |
126 | +} |
127 | + |
128 | +/** |
129 | + * eeh_pcid_put - Dereference on the PCI device driver |
130 | + * @pdev: PCI device |
131 | + * |
132 | + * The function is called to do dereference on the PCI device |
133 | + * driver of the indicated PCI device. |
134 | + */ |
135 | +static inline void eeh_pcid_put(struct pci_dev *pdev) |
136 | +{ |
137 | + if (!pdev || !pdev->driver) |
138 | + return; |
139 | + |
140 | + module_put(pdev->driver->driver.owner); |
141 | +} |
142 | + |
143 | #if 0 |
144 | static void print_device_node_tree(struct pci_dn *pdn, int dent) |
145 | { |
146 | @@ -126,18 +162,20 @@ static void eeh_enable_irq(struct pci_dev *dev) |
147 | static int eeh_report_error(struct pci_dev *dev, void *userdata) |
148 | { |
149 | enum pci_ers_result rc, *res = userdata; |
150 | - struct pci_driver *driver = dev->driver; |
151 | + struct pci_driver *driver; |
152 | |
153 | dev->error_state = pci_channel_io_frozen; |
154 | |
155 | - if (!driver) |
156 | - return 0; |
157 | + driver = eeh_pcid_get(dev); |
158 | + if (!driver) return 0; |
159 | |
160 | eeh_disable_irq(dev); |
161 | |
162 | if (!driver->err_handler || |
163 | - !driver->err_handler->error_detected) |
164 | + !driver->err_handler->error_detected) { |
165 | + eeh_pcid_put(dev); |
166 | return 0; |
167 | + } |
168 | |
169 | rc = driver->err_handler->error_detected(dev, pci_channel_io_frozen); |
170 | |
171 | @@ -145,6 +183,7 @@ static int eeh_report_error(struct pci_dev *dev, void *userdata) |
172 | if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; |
173 | if (*res == PCI_ERS_RESULT_NONE) *res = rc; |
174 | |
175 | + eeh_pcid_put(dev); |
176 | return 0; |
177 | } |
178 | |
179 | @@ -160,12 +199,16 @@ static int eeh_report_error(struct pci_dev *dev, void *userdata) |
180 | static int eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata) |
181 | { |
182 | enum pci_ers_result rc, *res = userdata; |
183 | - struct pci_driver *driver = dev->driver; |
184 | + struct pci_driver *driver; |
185 | + |
186 | + driver = eeh_pcid_get(dev); |
187 | + if (!driver) return 0; |
188 | |
189 | - if (!driver || |
190 | - !driver->err_handler || |
191 | - !driver->err_handler->mmio_enabled) |
192 | + if (!driver->err_handler || |
193 | + !driver->err_handler->mmio_enabled) { |
194 | + eeh_pcid_put(dev); |
195 | return 0; |
196 | + } |
197 | |
198 | rc = driver->err_handler->mmio_enabled(dev); |
199 | |
200 | @@ -173,6 +216,7 @@ static int eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata) |
201 | if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; |
202 | if (*res == PCI_ERS_RESULT_NONE) *res = rc; |
203 | |
204 | + eeh_pcid_put(dev); |
205 | return 0; |
206 | } |
207 | |
208 | @@ -189,18 +233,20 @@ static int eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata) |
209 | static int eeh_report_reset(struct pci_dev *dev, void *userdata) |
210 | { |
211 | enum pci_ers_result rc, *res = userdata; |
212 | - struct pci_driver *driver = dev->driver; |
213 | - |
214 | - if (!driver) |
215 | - return 0; |
216 | + struct pci_driver *driver; |
217 | |
218 | dev->error_state = pci_channel_io_normal; |
219 | |
220 | + driver = eeh_pcid_get(dev); |
221 | + if (!driver) return 0; |
222 | + |
223 | eeh_enable_irq(dev); |
224 | |
225 | if (!driver->err_handler || |
226 | - !driver->err_handler->slot_reset) |
227 | + !driver->err_handler->slot_reset) { |
228 | + eeh_pcid_put(dev); |
229 | return 0; |
230 | + } |
231 | |
232 | rc = driver->err_handler->slot_reset(dev); |
233 | if ((*res == PCI_ERS_RESULT_NONE) || |
234 | @@ -208,6 +254,7 @@ static int eeh_report_reset(struct pci_dev *dev, void *userdata) |
235 | if (*res == PCI_ERS_RESULT_DISCONNECT && |
236 | rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; |
237 | |
238 | + eeh_pcid_put(dev); |
239 | return 0; |
240 | } |
241 | |
242 | @@ -222,21 +269,24 @@ static int eeh_report_reset(struct pci_dev *dev, void *userdata) |
243 | */ |
244 | static int eeh_report_resume(struct pci_dev *dev, void *userdata) |
245 | { |
246 | - struct pci_driver *driver = dev->driver; |
247 | + struct pci_driver *driver; |
248 | |
249 | dev->error_state = pci_channel_io_normal; |
250 | |
251 | - if (!driver) |
252 | - return 0; |
253 | + driver = eeh_pcid_get(dev); |
254 | + if (!driver) return 0; |
255 | |
256 | eeh_enable_irq(dev); |
257 | |
258 | if (!driver->err_handler || |
259 | - !driver->err_handler->resume) |
260 | + !driver->err_handler->resume) { |
261 | + eeh_pcid_put(dev); |
262 | return 0; |
263 | + } |
264 | |
265 | driver->err_handler->resume(dev); |
266 | |
267 | + eeh_pcid_put(dev); |
268 | return 0; |
269 | } |
270 | |
271 | @@ -250,21 +300,24 @@ static int eeh_report_resume(struct pci_dev *dev, void *userdata) |
272 | */ |
273 | static int eeh_report_failure(struct pci_dev *dev, void *userdata) |
274 | { |
275 | - struct pci_driver *driver = dev->driver; |
276 | + struct pci_driver *driver; |
277 | |
278 | dev->error_state = pci_channel_io_perm_failure; |
279 | |
280 | - if (!driver) |
281 | - return 0; |
282 | + driver = eeh_pcid_get(dev); |
283 | + if (!driver) return 0; |
284 | |
285 | eeh_disable_irq(dev); |
286 | |
287 | if (!driver->err_handler || |
288 | - !driver->err_handler->error_detected) |
289 | + !driver->err_handler->error_detected) { |
290 | + eeh_pcid_put(dev); |
291 | return 0; |
292 | + } |
293 | |
294 | driver->err_handler->error_detected(dev, pci_channel_io_perm_failure); |
295 | |
296 | + eeh_pcid_put(dev); |
297 | return 0; |
298 | } |
299 | |
300 | diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c |
301 | index 48b0f57..40837f0 100644 |
302 | --- a/arch/sparc/kernel/signal_64.c |
303 | +++ b/arch/sparc/kernel/signal_64.c |
304 | @@ -309,9 +309,7 @@ void do_rt_sigreturn(struct pt_regs *regs) |
305 | err |= restore_fpu_state(regs, fpu_save); |
306 | |
307 | err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t)); |
308 | - err |= do_sigaltstack(&sf->stack, NULL, (unsigned long)sf); |
309 | - |
310 | - if (err) |
311 | + if (err || do_sigaltstack(&sf->stack, NULL, (unsigned long)sf) == -EFAULT) |
312 | goto segv; |
313 | |
314 | err |= __get_user(rwin_save, &sf->rwin_save); |
315 | diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c |
316 | index 0cdfc0d..8bb9070 100644 |
317 | --- a/arch/x86/boot/compressed/eboot.c |
318 | +++ b/arch/x86/boot/compressed/eboot.c |
319 | @@ -12,6 +12,8 @@ |
320 | #include <asm/setup.h> |
321 | #include <asm/desc.h> |
322 | |
323 | +#undef memcpy /* Use memcpy from misc.c */ |
324 | + |
325 | #include "eboot.h" |
326 | |
327 | static efi_system_table_t *sys_table; |
328 | diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h |
329 | index dcfde52..19f16eb 100644 |
330 | --- a/arch/x86/include/asm/ptrace.h |
331 | +++ b/arch/x86/include/asm/ptrace.h |
332 | @@ -205,21 +205,14 @@ static inline bool user_64bit_mode(struct pt_regs *regs) |
333 | } |
334 | #endif |
335 | |
336 | -/* |
337 | - * X86_32 CPUs don't save ss and esp if the CPU is already in kernel mode |
338 | - * when it traps. The previous stack will be directly underneath the saved |
339 | - * registers, and 'sp/ss' won't even have been saved. Thus the '®s->sp'. |
340 | - * |
341 | - * This is valid only for kernel mode traps. |
342 | - */ |
343 | -static inline unsigned long kernel_stack_pointer(struct pt_regs *regs) |
344 | -{ |
345 | #ifdef CONFIG_X86_32 |
346 | - return (unsigned long)(®s->sp); |
347 | +extern unsigned long kernel_stack_pointer(struct pt_regs *regs); |
348 | #else |
349 | +static inline unsigned long kernel_stack_pointer(struct pt_regs *regs) |
350 | +{ |
351 | return regs->sp; |
352 | -#endif |
353 | } |
354 | +#endif |
355 | |
356 | #define GET_IP(regs) ((regs)->ip) |
357 | #define GET_FP(regs) ((regs)->bp) |
358 | diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c |
359 | index 82746f9..5d8cf0d 100644 |
360 | --- a/arch/x86/kernel/microcode_amd.c |
361 | +++ b/arch/x86/kernel/microcode_amd.c |
362 | @@ -97,6 +97,7 @@ static unsigned int verify_ucode_size(int cpu, u32 patch_size, |
363 | #define F1XH_MPB_MAX_SIZE 2048 |
364 | #define F14H_MPB_MAX_SIZE 1824 |
365 | #define F15H_MPB_MAX_SIZE 4096 |
366 | +#define F16H_MPB_MAX_SIZE 3458 |
367 | |
368 | switch (c->x86) { |
369 | case 0x14: |
370 | @@ -105,6 +106,9 @@ static unsigned int verify_ucode_size(int cpu, u32 patch_size, |
371 | case 0x15: |
372 | max_size = F15H_MPB_MAX_SIZE; |
373 | break; |
374 | + case 0x16: |
375 | + max_size = F16H_MPB_MAX_SIZE; |
376 | + break; |
377 | default: |
378 | max_size = F1XH_MPB_MAX_SIZE; |
379 | break; |
380 | diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c |
381 | index cf11783..d3e1152 100644 |
382 | --- a/arch/x86/kernel/ptrace.c |
383 | +++ b/arch/x86/kernel/ptrace.c |
384 | @@ -165,6 +165,34 @@ static inline bool invalid_selector(u16 value) |
385 | |
386 | #define FLAG_MASK FLAG_MASK_32 |
387 | |
388 | +/* |
389 | + * X86_32 CPUs don't save ss and esp if the CPU is already in kernel mode |
390 | + * when it traps. The previous stack will be directly underneath the saved |
391 | + * registers, and 'sp/ss' won't even have been saved. Thus the '®s->sp'. |
392 | + * |
393 | + * Now, if the stack is empty, '®s->sp' is out of range. In this |
394 | + * case we try to take the previous stack. To always return a non-null |
395 | + * stack pointer we fall back to regs as stack if no previous stack |
396 | + * exists. |
397 | + * |
398 | + * This is valid only for kernel mode traps. |
399 | + */ |
400 | +unsigned long kernel_stack_pointer(struct pt_regs *regs) |
401 | +{ |
402 | + unsigned long context = (unsigned long)regs & ~(THREAD_SIZE - 1); |
403 | + unsigned long sp = (unsigned long)®s->sp; |
404 | + struct thread_info *tinfo; |
405 | + |
406 | + if (context == (sp & ~(THREAD_SIZE - 1))) |
407 | + return sp; |
408 | + |
409 | + tinfo = (struct thread_info *)context; |
410 | + if (tinfo->previous_esp) |
411 | + return tinfo->previous_esp; |
412 | + |
413 | + return (unsigned long)regs; |
414 | +} |
415 | + |
416 | static unsigned long *pt_regs_access(struct pt_regs *regs, unsigned long regno) |
417 | { |
418 | BUILD_BUG_ON(offsetof(struct pt_regs, bx) != 0); |
419 | diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h |
420 | index 26d1fb4..638de3e 100644 |
421 | --- a/arch/x86/kvm/cpuid.h |
422 | +++ b/arch/x86/kvm/cpuid.h |
423 | @@ -23,6 +23,9 @@ static inline bool guest_cpuid_has_xsave(struct kvm_vcpu *vcpu) |
424 | { |
425 | struct kvm_cpuid_entry2 *best; |
426 | |
427 | + if (!static_cpu_has(X86_FEATURE_XSAVE)) |
428 | + return 0; |
429 | + |
430 | best = kvm_find_cpuid_entry(vcpu, 1, 0); |
431 | return best && (best->ecx & bit(X86_FEATURE_XSAVE)); |
432 | } |
433 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c |
434 | index 185a2b8..e28fb97 100644 |
435 | --- a/arch/x86/kvm/x86.c |
436 | +++ b/arch/x86/kvm/x86.c |
437 | @@ -5697,6 +5697,9 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, |
438 | int pending_vec, max_bits, idx; |
439 | struct desc_ptr dt; |
440 | |
441 | + if (!guest_cpuid_has_xsave(vcpu) && (sregs->cr4 & X86_CR4_OSXSAVE)) |
442 | + return -EINVAL; |
443 | + |
444 | dt.size = sregs->idt.limit; |
445 | dt.address = sregs->idt.base; |
446 | kvm_x86_ops->set_idt(vcpu, &dt); |
447 | diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c |
448 | index 260fa80..9a87daa 100644 |
449 | --- a/block/scsi_ioctl.c |
450 | +++ b/block/scsi_ioctl.c |
451 | @@ -721,11 +721,14 @@ int scsi_verify_blk_ioctl(struct block_device *bd, unsigned int cmd) |
452 | break; |
453 | } |
454 | |
455 | + if (capable(CAP_SYS_RAWIO)) |
456 | + return 0; |
457 | + |
458 | /* In particular, rule out all resets and host-specific ioctls. */ |
459 | printk_ratelimited(KERN_WARNING |
460 | "%s: sending ioctl %x to a partition!\n", current->comm, cmd); |
461 | |
462 | - return capable(CAP_SYS_RAWIO) ? 0 : -ENOIOCTLCMD; |
463 | + return -ENOIOCTLCMD; |
464 | } |
465 | EXPORT_SYMBOL(scsi_verify_blk_ioctl); |
466 | |
467 | diff --git a/drivers/ata/sata_svw.c b/drivers/ata/sata_svw.c |
468 | index c646118..833607f 100644 |
469 | --- a/drivers/ata/sata_svw.c |
470 | +++ b/drivers/ata/sata_svw.c |
471 | @@ -142,6 +142,39 @@ static int k2_sata_scr_write(struct ata_link *link, |
472 | return 0; |
473 | } |
474 | |
475 | +static int k2_sata_softreset(struct ata_link *link, |
476 | + unsigned int *class, unsigned long deadline) |
477 | +{ |
478 | + u8 dmactl; |
479 | + void __iomem *mmio = link->ap->ioaddr.bmdma_addr; |
480 | + |
481 | + dmactl = readb(mmio + ATA_DMA_CMD); |
482 | + |
483 | + /* Clear the start bit */ |
484 | + if (dmactl & ATA_DMA_START) { |
485 | + dmactl &= ~ATA_DMA_START; |
486 | + writeb(dmactl, mmio + ATA_DMA_CMD); |
487 | + } |
488 | + |
489 | + return ata_sff_softreset(link, class, deadline); |
490 | +} |
491 | + |
492 | +static int k2_sata_hardreset(struct ata_link *link, |
493 | + unsigned int *class, unsigned long deadline) |
494 | +{ |
495 | + u8 dmactl; |
496 | + void __iomem *mmio = link->ap->ioaddr.bmdma_addr; |
497 | + |
498 | + dmactl = readb(mmio + ATA_DMA_CMD); |
499 | + |
500 | + /* Clear the start bit */ |
501 | + if (dmactl & ATA_DMA_START) { |
502 | + dmactl &= ~ATA_DMA_START; |
503 | + writeb(dmactl, mmio + ATA_DMA_CMD); |
504 | + } |
505 | + |
506 | + return sata_sff_hardreset(link, class, deadline); |
507 | +} |
508 | |
509 | static void k2_sata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) |
510 | { |
511 | @@ -346,6 +379,8 @@ static struct scsi_host_template k2_sata_sht = { |
512 | |
513 | static struct ata_port_operations k2_sata_ops = { |
514 | .inherits = &ata_bmdma_port_ops, |
515 | + .softreset = k2_sata_softreset, |
516 | + .hardreset = k2_sata_hardreset, |
517 | .sff_tf_load = k2_sata_tf_load, |
518 | .sff_tf_read = k2_sata_tf_read, |
519 | .sff_check_status = k2_stat_check_status, |
520 | diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c |
521 | index 7185557..c365c93 100644 |
522 | --- a/drivers/base/power/qos.c |
523 | +++ b/drivers/base/power/qos.c |
524 | @@ -446,7 +446,7 @@ int dev_pm_qos_add_ancestor_request(struct device *dev, |
525 | if (ancestor) |
526 | error = dev_pm_qos_add_request(ancestor, req, value); |
527 | |
528 | - if (error) |
529 | + if (error < 0) |
530 | req->dev = NULL; |
531 | |
532 | return error; |
533 | diff --git a/drivers/block/nvme.c b/drivers/block/nvme.c |
534 | index 38a2d06..9782340 100644 |
535 | --- a/drivers/block/nvme.c |
536 | +++ b/drivers/block/nvme.c |
537 | @@ -1153,7 +1153,7 @@ static int nvme_user_admin_cmd(struct nvme_ns *ns, |
538 | struct nvme_admin_cmd cmd; |
539 | struct nvme_command c; |
540 | int status, length; |
541 | - struct nvme_iod *iod; |
542 | + struct nvme_iod *uninitialized_var(iod); |
543 | |
544 | if (!capable(CAP_SYS_ADMIN)) |
545 | return -EACCES; |
546 | diff --git a/drivers/gpu/drm/radeon/radeon_agp.c b/drivers/gpu/drm/radeon/radeon_agp.c |
547 | index bd2f33e..bc6b64f 100644 |
548 | --- a/drivers/gpu/drm/radeon/radeon_agp.c |
549 | +++ b/drivers/gpu/drm/radeon/radeon_agp.c |
550 | @@ -70,9 +70,12 @@ static struct radeon_agpmode_quirk radeon_agpmode_quirk_list[] = { |
551 | /* Intel 82830 830 Chipset Host Bridge / Mobility M6 LY Needs AGPMode 2 (fdo #17360)*/ |
552 | { PCI_VENDOR_ID_INTEL, 0x3575, PCI_VENDOR_ID_ATI, 0x4c59, |
553 | PCI_VENDOR_ID_DELL, 0x00e3, 2}, |
554 | - /* Intel 82852/82855 host bridge / Mobility FireGL 9000 R250 Needs AGPMode 1 (lp #296617) */ |
555 | + /* Intel 82852/82855 host bridge / Mobility FireGL 9000 RV250 Needs AGPMode 1 (lp #296617) */ |
556 | { PCI_VENDOR_ID_INTEL, 0x3580, PCI_VENDOR_ID_ATI, 0x4c66, |
557 | PCI_VENDOR_ID_DELL, 0x0149, 1}, |
558 | + /* Intel 82855PM host bridge / Mobility FireGL 9000 RV250 Needs AGPMode 1 for suspend/resume */ |
559 | + { PCI_VENDOR_ID_INTEL, 0x3340, PCI_VENDOR_ID_ATI, 0x4c66, |
560 | + PCI_VENDOR_ID_IBM, 0x0531, 1}, |
561 | /* Intel 82852/82855 host bridge / Mobility 9600 M10 RV350 Needs AGPMode 1 (deb #467460) */ |
562 | { PCI_VENDOR_ID_INTEL, 0x3580, PCI_VENDOR_ID_ATI, 0x4e50, |
563 | 0x1025, 0x0061, 1}, |
564 | diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c |
565 | index afa0802..5e1bf61 100644 |
566 | --- a/drivers/isdn/gigaset/bas-gigaset.c |
567 | +++ b/drivers/isdn/gigaset/bas-gigaset.c |
568 | @@ -616,7 +616,13 @@ static void int_in_work(struct work_struct *work) |
569 | if (rc == 0) |
570 | /* success, resubmit interrupt read URB */ |
571 | rc = usb_submit_urb(urb, GFP_ATOMIC); |
572 | - if (rc != 0 && rc != -ENODEV) { |
573 | + |
574 | + switch (rc) { |
575 | + case 0: /* success */ |
576 | + case -ENODEV: /* device gone */ |
577 | + case -EINVAL: /* URB already resubmitted, or terminal badness */ |
578 | + break; |
579 | + default: /* failure: try to recover by resetting the device */ |
580 | dev_err(cs->dev, "clear halt failed: %s\n", get_usb_rcmsg(rc)); |
581 | rc = usb_lock_device_for_reset(ucs->udev, ucs->interface); |
582 | if (rc == 0) { |
583 | @@ -2437,7 +2443,9 @@ static void gigaset_disconnect(struct usb_interface *interface) |
584 | } |
585 | |
586 | /* gigaset_suspend |
587 | - * This function is called before the USB connection is suspended. |
588 | + * This function is called before the USB connection is suspended |
589 | + * or before the USB device is reset. |
590 | + * In the latter case, message == PMSG_ON. |
591 | */ |
592 | static int gigaset_suspend(struct usb_interface *intf, pm_message_t message) |
593 | { |
594 | @@ -2493,7 +2501,12 @@ static int gigaset_suspend(struct usb_interface *intf, pm_message_t message) |
595 | del_timer_sync(&ucs->timer_atrdy); |
596 | del_timer_sync(&ucs->timer_cmd_in); |
597 | del_timer_sync(&ucs->timer_int_in); |
598 | - cancel_work_sync(&ucs->int_in_wq); |
599 | + |
600 | + /* don't try to cancel int_in_wq from within reset as it |
601 | + * might be the one requesting the reset |
602 | + */ |
603 | + if (message.event != PM_EVENT_ON) |
604 | + cancel_work_sync(&ucs->int_in_wq); |
605 | |
606 | gig_dbg(DEBUG_SUSPEND, "suspend complete"); |
607 | return 0; |
608 | diff --git a/drivers/leds/leds-lp5521.c b/drivers/leds/leds-lp5521.c |
609 | index 410a723..2381562 100644 |
610 | --- a/drivers/leds/leds-lp5521.c |
611 | +++ b/drivers/leds/leds-lp5521.c |
612 | @@ -193,9 +193,14 @@ static int lp5521_load_program(struct lp5521_engine *eng, const u8 *pattern) |
613 | |
614 | /* move current engine to direct mode and remember the state */ |
615 | ret = lp5521_set_engine_mode(eng, LP5521_CMD_DIRECT); |
616 | + if (ret) |
617 | + return ret; |
618 | + |
619 | /* Mode change requires min 500 us delay. 1 - 2 ms with margin */ |
620 | usleep_range(1000, 2000); |
621 | - ret |= lp5521_read(client, LP5521_REG_OP_MODE, &mode); |
622 | + ret = lp5521_read(client, LP5521_REG_OP_MODE, &mode); |
623 | + if (ret) |
624 | + return ret; |
625 | |
626 | /* For loading, all the engines to load mode */ |
627 | lp5521_write(client, LP5521_REG_OP_MODE, LP5521_CMD_DIRECT); |
628 | @@ -211,8 +216,7 @@ static int lp5521_load_program(struct lp5521_engine *eng, const u8 *pattern) |
629 | LP5521_PROG_MEM_SIZE, |
630 | pattern); |
631 | |
632 | - ret |= lp5521_write(client, LP5521_REG_OP_MODE, mode); |
633 | - return ret; |
634 | + return lp5521_write(client, LP5521_REG_OP_MODE, mode); |
635 | } |
636 | |
637 | static int lp5521_set_led_current(struct lp5521_chip *chip, int led, u8 curr) |
638 | @@ -785,7 +789,7 @@ static int __devinit lp5521_probe(struct i2c_client *client, |
639 | * LP5521_REG_ENABLE register will not have any effect - strange! |
640 | */ |
641 | ret = lp5521_read(client, LP5521_REG_R_CURRENT, &buf); |
642 | - if (buf != LP5521_REG_R_CURR_DEFAULT) { |
643 | + if (ret || buf != LP5521_REG_R_CURR_DEFAULT) { |
644 | dev_err(&client->dev, "error in resetting chip\n"); |
645 | goto fail2; |
646 | } |
647 | diff --git a/drivers/md/dm.c b/drivers/md/dm.c |
648 | index 9ff3019..32370ea 100644 |
649 | --- a/drivers/md/dm.c |
650 | +++ b/drivers/md/dm.c |
651 | @@ -754,8 +754,14 @@ static void rq_completed(struct mapped_device *md, int rw, int run_queue) |
652 | if (!md_in_flight(md)) |
653 | wake_up(&md->wait); |
654 | |
655 | + /* |
656 | + * Run this off this callpath, as drivers could invoke end_io while |
657 | + * inside their request_fn (and holding the queue lock). Calling |
658 | + * back into ->request_fn() could deadlock attempting to grab the |
659 | + * queue lock again. |
660 | + */ |
661 | if (run_queue) |
662 | - blk_run_queue(md->queue); |
663 | + blk_run_queue_async(md->queue); |
664 | |
665 | /* |
666 | * dm_put() must be at the end of this function. See the comment above |
667 | diff --git a/drivers/md/md.c b/drivers/md/md.c |
668 | index 529ce89..0a447a1 100644 |
669 | --- a/drivers/md/md.c |
670 | +++ b/drivers/md/md.c |
671 | @@ -1805,10 +1805,10 @@ retry: |
672 | memset(bbp, 0xff, PAGE_SIZE); |
673 | |
674 | for (i = 0 ; i < bb->count ; i++) { |
675 | - u64 internal_bb = *p++; |
676 | + u64 internal_bb = p[i]; |
677 | u64 store_bb = ((BB_OFFSET(internal_bb) << 10) |
678 | | BB_LEN(internal_bb)); |
679 | - *bbp++ = cpu_to_le64(store_bb); |
680 | + bbp[i] = cpu_to_le64(store_bb); |
681 | } |
682 | bb->changed = 0; |
683 | if (read_seqretry(&bb->lock, seq)) |
684 | @@ -7694,9 +7694,9 @@ int md_is_badblock(struct badblocks *bb, sector_t s, int sectors, |
685 | sector_t *first_bad, int *bad_sectors) |
686 | { |
687 | int hi; |
688 | - int lo = 0; |
689 | + int lo; |
690 | u64 *p = bb->page; |
691 | - int rv = 0; |
692 | + int rv; |
693 | sector_t target = s + sectors; |
694 | unsigned seq; |
695 | |
696 | @@ -7711,7 +7711,8 @@ int md_is_badblock(struct badblocks *bb, sector_t s, int sectors, |
697 | |
698 | retry: |
699 | seq = read_seqbegin(&bb->lock); |
700 | - |
701 | + lo = 0; |
702 | + rv = 0; |
703 | hi = bb->count; |
704 | |
705 | /* Binary search between lo and hi for 'target' |
706 | diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c |
707 | index 4a038cd..a2b5304 100644 |
708 | --- a/drivers/md/raid10.c |
709 | +++ b/drivers/md/raid10.c |
710 | @@ -476,7 +476,7 @@ static void raid10_end_write_request(struct bio *bio, int error) |
711 | */ |
712 | one_write_done(r10_bio); |
713 | if (dec_rdev) |
714 | - rdev_dec_pending(conf->mirrors[dev].rdev, conf->mddev); |
715 | + rdev_dec_pending(rdev, conf->mddev); |
716 | } |
717 | |
718 | /* |
719 | diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c |
720 | index 55a164f..9e2c558 100644 |
721 | --- a/drivers/mmc/host/sdhci-s3c.c |
722 | +++ b/drivers/mmc/host/sdhci-s3c.c |
723 | @@ -656,7 +656,7 @@ static int __devexit sdhci_s3c_remove(struct platform_device *pdev) |
724 | |
725 | pm_runtime_disable(&pdev->dev); |
726 | |
727 | - for (ptr = 0; ptr < 3; ptr++) { |
728 | + for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) { |
729 | if (sc->clk_bus[ptr]) { |
730 | clk_disable(sc->clk_bus[ptr]); |
731 | clk_put(sc->clk_bus[ptr]); |
732 | diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c |
733 | index 8f52fc8..5a5cd2a 100644 |
734 | --- a/drivers/mtd/devices/slram.c |
735 | +++ b/drivers/mtd/devices/slram.c |
736 | @@ -240,7 +240,7 @@ static int parse_cmdline(char *devname, char *szstart, char *szlength) |
737 | |
738 | if (*(szlength) != '+') { |
739 | devlength = simple_strtoul(szlength, &buffer, 0); |
740 | - devlength = handle_unit(devlength, buffer) - devstart; |
741 | + devlength = handle_unit(devlength, buffer); |
742 | if (devlength < devstart) |
743 | goto err_out; |
744 | |
745 | diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c |
746 | index 64be8f0..d9127e2 100644 |
747 | --- a/drivers/mtd/ofpart.c |
748 | +++ b/drivers/mtd/ofpart.c |
749 | @@ -121,7 +121,7 @@ static int parse_ofoldpart_partitions(struct mtd_info *master, |
750 | nr_parts = plen / sizeof(part[0]); |
751 | |
752 | *pparts = kzalloc(nr_parts * sizeof(*(*pparts)), GFP_KERNEL); |
753 | - if (!pparts) |
754 | + if (!*pparts) |
755 | return -ENOMEM; |
756 | |
757 | names = of_get_property(dp, "partition-names", &plen); |
758 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c |
759 | index 86f26a1..25723d8 100644 |
760 | --- a/drivers/net/can/usb/peak_usb/pcan_usb.c |
761 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c |
762 | @@ -519,8 +519,10 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, |
763 | mc->pdev->dev.can.state = new_state; |
764 | |
765 | if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) { |
766 | + struct skb_shared_hwtstamps *hwts = skb_hwtstamps(skb); |
767 | + |
768 | peak_usb_get_ts_tv(&mc->pdev->time_ref, mc->ts16, &tv); |
769 | - skb->tstamp = timeval_to_ktime(tv); |
770 | + hwts->hwtstamp = timeval_to_ktime(tv); |
771 | } |
772 | |
773 | netif_rx(skb); |
774 | @@ -605,6 +607,7 @@ static int pcan_usb_decode_data(struct pcan_usb_msg_context *mc, u8 status_len) |
775 | struct sk_buff *skb; |
776 | struct can_frame *cf; |
777 | struct timeval tv; |
778 | + struct skb_shared_hwtstamps *hwts; |
779 | |
780 | skb = alloc_can_skb(mc->netdev, &cf); |
781 | if (!skb) |
782 | @@ -652,7 +655,8 @@ static int pcan_usb_decode_data(struct pcan_usb_msg_context *mc, u8 status_len) |
783 | |
784 | /* convert timestamp into kernel time */ |
785 | peak_usb_get_ts_tv(&mc->pdev->time_ref, mc->ts16, &tv); |
786 | - skb->tstamp = timeval_to_ktime(tv); |
787 | + hwts = skb_hwtstamps(skb); |
788 | + hwts->hwtstamp = timeval_to_ktime(tv); |
789 | |
790 | /* push the skb */ |
791 | netif_rx(skb); |
792 | diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c |
793 | index 629c4ba..c95913a 100644 |
794 | --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c |
795 | +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c |
796 | @@ -532,6 +532,7 @@ static int pcan_usb_pro_handle_canmsg(struct pcan_usb_pro_interface *usb_if, |
797 | struct can_frame *can_frame; |
798 | struct sk_buff *skb; |
799 | struct timeval tv; |
800 | + struct skb_shared_hwtstamps *hwts; |
801 | |
802 | skb = alloc_can_skb(netdev, &can_frame); |
803 | if (!skb) |
804 | @@ -549,7 +550,8 @@ static int pcan_usb_pro_handle_canmsg(struct pcan_usb_pro_interface *usb_if, |
805 | memcpy(can_frame->data, rx->data, can_frame->can_dlc); |
806 | |
807 | peak_usb_get_ts_tv(&usb_if->time_ref, le32_to_cpu(rx->ts32), &tv); |
808 | - skb->tstamp = timeval_to_ktime(tv); |
809 | + hwts = skb_hwtstamps(skb); |
810 | + hwts->hwtstamp = timeval_to_ktime(tv); |
811 | |
812 | netif_rx(skb); |
813 | netdev->stats.rx_packets++; |
814 | @@ -570,6 +572,7 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if, |
815 | u8 err_mask = 0; |
816 | struct sk_buff *skb; |
817 | struct timeval tv; |
818 | + struct skb_shared_hwtstamps *hwts; |
819 | |
820 | /* nothing should be sent while in BUS_OFF state */ |
821 | if (dev->can.state == CAN_STATE_BUS_OFF) |
822 | @@ -664,7 +667,8 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if, |
823 | dev->can.state = new_state; |
824 | |
825 | peak_usb_get_ts_tv(&usb_if->time_ref, le32_to_cpu(er->ts32), &tv); |
826 | - skb->tstamp = timeval_to_ktime(tv); |
827 | + hwts = skb_hwtstamps(skb); |
828 | + hwts->hwtstamp = timeval_to_ktime(tv); |
829 | netif_rx(skb); |
830 | netdev->stats.rx_packets++; |
831 | netdev->stats.rx_bytes += can_frame->can_dlc; |
832 | diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c |
833 | index 49aa41f..ab4d4d2 100644 |
834 | --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c |
835 | +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c |
836 | @@ -3216,6 +3216,7 @@ static s32 ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw) |
837 | |
838 | switch (hw->device_id) { |
839 | case IXGBE_DEV_ID_X540T: |
840 | + case IXGBE_DEV_ID_X540T1: |
841 | return 0; |
842 | case IXGBE_DEV_ID_82599_T3_LOM: |
843 | return 0; |
844 | diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c |
845 | index cfe7d26..6757d6c 100644 |
846 | --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c |
847 | +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c |
848 | @@ -2006,6 +2006,7 @@ static int ixgbe_wol_exclusion(struct ixgbe_adapter *adapter, |
849 | retval = 0; |
850 | break; |
851 | case IXGBE_DEV_ID_X540T: |
852 | + case IXGBE_DEV_ID_X540T1: |
853 | /* check eeprom to see if enabled wol */ |
854 | if ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0_1) || |
855 | ((wol_cap == IXGBE_DEVICE_CAPS_WOL_PORT0) && |
856 | diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |
857 | index a66c215..6d1f6c5 100644 |
858 | --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |
859 | +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |
860 | @@ -114,6 +114,7 @@ static DEFINE_PCI_DEVICE_TABLE(ixgbe_pci_tbl) = { |
861 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_LS), board_82599 }, |
862 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599EN_SFP), board_82599 }, |
863 | {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_SFP_SF_QP), board_82599 }, |
864 | + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X540T1), board_X540 }, |
865 | /* required last entry */ |
866 | {0, } |
867 | }; |
868 | @@ -7060,6 +7061,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev, |
869 | adapter->wol = IXGBE_WUFC_MAG; |
870 | break; |
871 | case IXGBE_DEV_ID_X540T: |
872 | + case IXGBE_DEV_ID_X540T1: |
873 | /* Check eeprom to see if it is enabled */ |
874 | hw->eeprom.ops.read(hw, 0x2c, &adapter->eeprom_cap); |
875 | wol_cap = adapter->eeprom_cap & IXGBE_DEVICE_CAPS_WOL_MASK; |
876 | diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h |
877 | index 8636e83..37eb39c 100644 |
878 | --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h |
879 | +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h |
880 | @@ -67,6 +67,7 @@ |
881 | #define IXGBE_DEV_ID_82599_LS 0x154F |
882 | #define IXGBE_DEV_ID_X540T 0x1528 |
883 | #define IXGBE_DEV_ID_82599_SFP_SF_QP 0x154A |
884 | +#define IXGBE_DEV_ID_X540T1 0x1560 |
885 | |
886 | /* VF Device IDs */ |
887 | #define IXGBE_DEV_ID_82599_VF 0x10ED |
888 | diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c |
889 | index 3a6b991..3dd80df 100644 |
890 | --- a/drivers/net/wireless/ipw2x00/ipw2200.c |
891 | +++ b/drivers/net/wireless/ipw2x00/ipw2200.c |
892 | @@ -10471,7 +10471,7 @@ static void ipw_handle_promiscuous_tx(struct ipw_priv *priv, |
893 | } else |
894 | len = src->len; |
895 | |
896 | - dst = alloc_skb(len + sizeof(*rt_hdr), GFP_ATOMIC); |
897 | + dst = alloc_skb(len + sizeof(*rt_hdr) + sizeof(u16)*2, GFP_ATOMIC); |
898 | if (!dst) |
899 | continue; |
900 | |
901 | diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c |
902 | index c0cfa4e..2067bdf 100644 |
903 | --- a/drivers/net/wireless/iwlwifi/iwl-6000.c |
904 | +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c |
905 | @@ -170,7 +170,7 @@ static int iwl6000_hw_channel_switch(struct iwl_priv *priv, |
906 | * See iwlagn_mac_channel_switch. |
907 | */ |
908 | struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; |
909 | - struct iwl6000_channel_switch_cmd cmd; |
910 | + struct iwl6000_channel_switch_cmd *cmd; |
911 | const struct iwl_channel_info *ch_info; |
912 | u32 switch_time_in_usec, ucode_switch_time; |
913 | u16 ch; |
914 | @@ -180,18 +180,25 @@ static int iwl6000_hw_channel_switch(struct iwl_priv *priv, |
915 | struct ieee80211_vif *vif = ctx->vif; |
916 | struct iwl_host_cmd hcmd = { |
917 | .id = REPLY_CHANNEL_SWITCH, |
918 | - .len = { sizeof(cmd), }, |
919 | + .len = { sizeof(*cmd), }, |
920 | .flags = CMD_SYNC, |
921 | - .data = { &cmd, }, |
922 | + .dataflags[0] = IWL_HCMD_DFL_NOCOPY, |
923 | }; |
924 | + int err; |
925 | |
926 | - cmd.band = priv->band == IEEE80211_BAND_2GHZ; |
927 | + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); |
928 | + if (!cmd) |
929 | + return -ENOMEM; |
930 | + |
931 | + hcmd.data[0] = cmd; |
932 | + |
933 | + cmd->band = priv->band == IEEE80211_BAND_2GHZ; |
934 | ch = ch_switch->channel->hw_value; |
935 | IWL_DEBUG_11H(priv, "channel switch from %u to %u\n", |
936 | ctx->active.channel, ch); |
937 | - cmd.channel = cpu_to_le16(ch); |
938 | - cmd.rxon_flags = ctx->staging.flags; |
939 | - cmd.rxon_filter_flags = ctx->staging.filter_flags; |
940 | + cmd->channel = cpu_to_le16(ch); |
941 | + cmd->rxon_flags = ctx->staging.flags; |
942 | + cmd->rxon_filter_flags = ctx->staging.filter_flags; |
943 | switch_count = ch_switch->count; |
944 | tsf_low = ch_switch->timestamp & 0x0ffffffff; |
945 | /* |
946 | @@ -207,30 +214,32 @@ static int iwl6000_hw_channel_switch(struct iwl_priv *priv, |
947 | switch_count = 0; |
948 | } |
949 | if (switch_count <= 1) |
950 | - cmd.switch_time = cpu_to_le32(priv->ucode_beacon_time); |
951 | + cmd->switch_time = cpu_to_le32(priv->ucode_beacon_time); |
952 | else { |
953 | switch_time_in_usec = |
954 | vif->bss_conf.beacon_int * switch_count * TIME_UNIT; |
955 | ucode_switch_time = iwl_usecs_to_beacons(priv, |
956 | switch_time_in_usec, |
957 | beacon_interval); |
958 | - cmd.switch_time = iwl_add_beacon_time(priv, |
959 | + cmd->switch_time = iwl_add_beacon_time(priv, |
960 | priv->ucode_beacon_time, |
961 | ucode_switch_time, |
962 | beacon_interval); |
963 | } |
964 | IWL_DEBUG_11H(priv, "uCode time for the switch is 0x%x\n", |
965 | - cmd.switch_time); |
966 | + cmd->switch_time); |
967 | ch_info = iwl_get_channel_info(priv, priv->band, ch); |
968 | if (ch_info) |
969 | - cmd.expect_beacon = is_channel_radar(ch_info); |
970 | + cmd->expect_beacon = is_channel_radar(ch_info); |
971 | else { |
972 | IWL_ERR(priv, "invalid channel switch from %u to %u\n", |
973 | ctx->active.channel, ch); |
974 | return -EFAULT; |
975 | } |
976 | |
977 | - return iwl_dvm_send_cmd(priv, &hcmd); |
978 | + err = iwl_dvm_send_cmd(priv, &hcmd); |
979 | + kfree(cmd); |
980 | + return err; |
981 | } |
982 | |
983 | static struct iwl_lib_ops iwl6000_lib = { |
984 | diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c |
985 | index 07f6e00..2977a12 100644 |
986 | --- a/drivers/net/wireless/mwifiex/cmdevt.c |
987 | +++ b/drivers/net/wireless/mwifiex/cmdevt.c |
988 | @@ -816,9 +816,6 @@ mwifiex_cmd_timeout_func(unsigned long function_context) |
989 | return; |
990 | } |
991 | cmd_node = adapter->curr_cmd; |
992 | - if (cmd_node->wait_q_enabled) |
993 | - adapter->cmd_wait_q.status = -ETIMEDOUT; |
994 | - |
995 | if (cmd_node) { |
996 | adapter->dbg.timeout_cmd_id = |
997 | adapter->dbg.last_cmd_id[adapter->dbg.last_cmd_index]; |
998 | @@ -864,6 +861,14 @@ mwifiex_cmd_timeout_func(unsigned long function_context) |
999 | |
1000 | dev_err(adapter->dev, "ps_mode=%d ps_state=%d\n", |
1001 | adapter->ps_mode, adapter->ps_state); |
1002 | + |
1003 | + if (cmd_node->wait_q_enabled) { |
1004 | + adapter->cmd_wait_q.status = -ETIMEDOUT; |
1005 | + wake_up_interruptible(&adapter->cmd_wait_q.wait); |
1006 | + mwifiex_cancel_pending_ioctl(adapter); |
1007 | + /* reset cmd_sent flag to unblock new commands */ |
1008 | + adapter->cmd_sent = false; |
1009 | + } |
1010 | } |
1011 | if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING) |
1012 | mwifiex_init_fw_complete(adapter); |
1013 | diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c |
1014 | index f8012e2..7d00a87 100644 |
1015 | --- a/drivers/net/wireless/mwifiex/sdio.c |
1016 | +++ b/drivers/net/wireless/mwifiex/sdio.c |
1017 | @@ -158,7 +158,6 @@ static int mwifiex_sdio_suspend(struct device *dev) |
1018 | struct sdio_mmc_card *card; |
1019 | struct mwifiex_adapter *adapter; |
1020 | mmc_pm_flag_t pm_flag = 0; |
1021 | - int hs_actived = 0; |
1022 | int i; |
1023 | int ret = 0; |
1024 | |
1025 | @@ -185,12 +184,14 @@ static int mwifiex_sdio_suspend(struct device *dev) |
1026 | adapter = card->adapter; |
1027 | |
1028 | /* Enable the Host Sleep */ |
1029 | - hs_actived = mwifiex_enable_hs(adapter); |
1030 | - if (hs_actived) { |
1031 | - pr_debug("cmd: suspend with MMC_PM_KEEP_POWER\n"); |
1032 | - ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER); |
1033 | + if (!mwifiex_enable_hs(adapter)) { |
1034 | + dev_err(adapter->dev, "cmd: failed to suspend\n"); |
1035 | + return -EFAULT; |
1036 | } |
1037 | |
1038 | + dev_dbg(adapter->dev, "cmd: suspend with MMC_PM_KEEP_POWER\n"); |
1039 | + ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER); |
1040 | + |
1041 | /* Indicate device suspended */ |
1042 | adapter->is_suspended = true; |
1043 | |
1044 | diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c |
1045 | index 5bd4085..61e5768 100644 |
1046 | --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c |
1047 | +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c |
1048 | @@ -297,6 +297,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = { |
1049 | /*=== Customer ID ===*/ |
1050 | /****** 8188CU ********/ |
1051 | {RTL_USB_DEVICE(0x050d, 0x1102, rtl92cu_hal_cfg)}, /*Belkin - Edimax*/ |
1052 | + {RTL_USB_DEVICE(0x050d, 0x11f2, rtl92cu_hal_cfg)}, /*Belkin - ISY*/ |
1053 | {RTL_USB_DEVICE(0x06f8, 0xe033, rtl92cu_hal_cfg)}, /*Hercules - Edimax*/ |
1054 | {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/ |
1055 | {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/ |
1056 | diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/phy.c b/drivers/net/wireless/rtlwifi/rtl8192se/phy.c |
1057 | index 4a49992..a2a5c92 100644 |
1058 | --- a/drivers/net/wireless/rtlwifi/rtl8192se/phy.c |
1059 | +++ b/drivers/net/wireless/rtlwifi/rtl8192se/phy.c |
1060 | @@ -1247,6 +1247,9 @@ static void _rtl92s_phy_get_txpower_index(struct ieee80211_hw *hw, u8 channel, |
1061 | /* Read HT 40 OFDM TX power */ |
1062 | ofdmpowerLevel[0] = rtlefuse->txpwrlevel_ht40_2s[0][index]; |
1063 | ofdmpowerLevel[1] = rtlefuse->txpwrlevel_ht40_2s[1][index]; |
1064 | + } else { |
1065 | + ofdmpowerLevel[0] = 0; |
1066 | + ofdmpowerLevel[1] = 0; |
1067 | } |
1068 | } |
1069 | |
1070 | diff --git a/drivers/nfc/pn533.c b/drivers/nfc/pn533.c |
1071 | index cb6204f..692bd1e 100644 |
1072 | --- a/drivers/nfc/pn533.c |
1073 | +++ b/drivers/nfc/pn533.c |
1074 | @@ -1278,11 +1278,14 @@ static void pn533_deactivate_target(struct nfc_dev *nfc_dev, u32 target_idx) |
1075 | static int pn533_in_dep_link_up_complete(struct pn533 *dev, void *arg, |
1076 | u8 *params, int params_len) |
1077 | { |
1078 | - struct pn533_cmd_jump_dep *cmd; |
1079 | struct pn533_cmd_jump_dep_response *resp; |
1080 | struct nfc_target nfc_target; |
1081 | u8 target_gt_len; |
1082 | int rc; |
1083 | + struct pn533_cmd_jump_dep *cmd = (struct pn533_cmd_jump_dep *)arg; |
1084 | + u8 active = cmd->active; |
1085 | + |
1086 | + kfree(arg); |
1087 | |
1088 | if (params_len == -ENOENT) { |
1089 | nfc_dev_dbg(&dev->interface->dev, ""); |
1090 | @@ -1304,7 +1307,6 @@ static int pn533_in_dep_link_up_complete(struct pn533 *dev, void *arg, |
1091 | } |
1092 | |
1093 | resp = (struct pn533_cmd_jump_dep_response *) params; |
1094 | - cmd = (struct pn533_cmd_jump_dep *) arg; |
1095 | rc = resp->status & PN533_CMD_RET_MASK; |
1096 | if (rc != PN533_CMD_RET_SUCCESS) { |
1097 | nfc_dev_err(&dev->interface->dev, |
1098 | @@ -1334,7 +1336,7 @@ static int pn533_in_dep_link_up_complete(struct pn533 *dev, void *arg, |
1099 | if (rc == 0) |
1100 | rc = nfc_dep_link_is_up(dev->nfc_dev, |
1101 | dev->nfc_dev->targets[0].idx, |
1102 | - !cmd->active, NFC_RF_INITIATOR); |
1103 | + !active, NFC_RF_INITIATOR); |
1104 | |
1105 | return 0; |
1106 | } |
1107 | @@ -1385,12 +1387,8 @@ static int pn533_dep_link_up(struct nfc_dev *nfc_dev, int target_idx, |
1108 | rc = pn533_send_cmd_frame_async(dev, dev->out_frame, dev->in_frame, |
1109 | dev->in_maxlen, pn533_in_dep_link_up_complete, |
1110 | cmd, GFP_KERNEL); |
1111 | - if (rc) |
1112 | - goto out; |
1113 | - |
1114 | - |
1115 | -out: |
1116 | - kfree(cmd); |
1117 | + if (rc < 0) |
1118 | + kfree(cmd); |
1119 | |
1120 | return rc; |
1121 | } |
1122 | diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c |
1123 | index 19a3694..dd4547b 100644 |
1124 | --- a/drivers/scsi/aha152x.c |
1125 | +++ b/drivers/scsi/aha152x.c |
1126 | @@ -2984,8 +2984,8 @@ static int get_command(char *pos, Scsi_Cmnd * ptr) |
1127 | char *start = pos; |
1128 | int i; |
1129 | |
1130 | - SPRINTF("0x%08x: target=%d; lun=%d; cmnd=( ", |
1131 | - (unsigned int) ptr, ptr->device->id, ptr->device->lun); |
1132 | + SPRINTF("%p: target=%d; lun=%d; cmnd=( ", |
1133 | + ptr, ptr->device->id, ptr->device->lun); |
1134 | |
1135 | for (i = 0; i < COMMAND_SIZE(ptr->cmnd[0]); i++) |
1136 | SPRINTF("0x%02x ", ptr->cmnd[i]); |
1137 | diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c |
1138 | index 2def1e3..05c3fc0 100644 |
1139 | --- a/drivers/scsi/isci/request.c |
1140 | +++ b/drivers/scsi/isci/request.c |
1141 | @@ -1970,7 +1970,7 @@ sci_io_request_frame_handler(struct isci_request *ireq, |
1142 | frame_index, |
1143 | (void **)&frame_buffer); |
1144 | |
1145 | - sci_controller_copy_sata_response(&ireq->stp.req, |
1146 | + sci_controller_copy_sata_response(&ireq->stp.rsp, |
1147 | frame_header, |
1148 | frame_buffer); |
1149 | |
1150 | diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c |
1151 | index fd3b283..3006ec9 100644 |
1152 | --- a/drivers/scsi/mvsas/mv_sas.c |
1153 | +++ b/drivers/scsi/mvsas/mv_sas.c |
1154 | @@ -885,7 +885,6 @@ static int mvs_task_exec(struct sas_task *task, const int num, gfp_t gfp_flags, |
1155 | struct completion *completion, int is_tmf, |
1156 | struct mvs_tmf_task *tmf) |
1157 | { |
1158 | - struct domain_device *dev = task->dev; |
1159 | struct mvs_info *mvi = NULL; |
1160 | u32 rc = 0; |
1161 | u32 pass = 0; |
1162 | diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c |
1163 | index ef4d7ad..d0bf56d 100644 |
1164 | --- a/drivers/usb/serial/mct_u232.c |
1165 | +++ b/drivers/usb/serial/mct_u232.c |
1166 | @@ -533,12 +533,14 @@ static void mct_u232_close(struct usb_serial_port *port) |
1167 | { |
1168 | dbg("%s port %d", __func__, port->number); |
1169 | |
1170 | - if (port->serial->dev) { |
1171 | - /* shutdown our urbs */ |
1172 | - usb_kill_urb(port->write_urb); |
1173 | - usb_kill_urb(port->read_urb); |
1174 | - usb_kill_urb(port->interrupt_in_urb); |
1175 | - } |
1176 | + /* |
1177 | + * Must kill the read urb as it is actually an interrupt urb, which |
1178 | + * generic close thus fails to kill. |
1179 | + */ |
1180 | + usb_kill_urb(port->read_urb); |
1181 | + usb_kill_urb(port->interrupt_in_urb); |
1182 | + |
1183 | + usb_serial_generic_close(port); |
1184 | } /* mct_u232_close */ |
1185 | |
1186 | |
1187 | diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c |
1188 | index 841cabc..ee959a9 100644 |
1189 | --- a/fs/jbd/transaction.c |
1190 | +++ b/fs/jbd/transaction.c |
1191 | @@ -1963,7 +1963,9 @@ retry: |
1192 | spin_unlock(&journal->j_list_lock); |
1193 | jbd_unlock_bh_state(bh); |
1194 | spin_unlock(&journal->j_state_lock); |
1195 | + unlock_buffer(bh); |
1196 | log_wait_commit(journal, tid); |
1197 | + lock_buffer(bh); |
1198 | goto retry; |
1199 | } |
1200 | /* |
1201 | diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c |
1202 | index db3889b..8608f87 100644 |
1203 | --- a/fs/jffs2/file.c |
1204 | +++ b/fs/jffs2/file.c |
1205 | @@ -138,33 +138,39 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, |
1206 | struct page *pg; |
1207 | struct inode *inode = mapping->host; |
1208 | struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); |
1209 | + struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); |
1210 | + struct jffs2_raw_inode ri; |
1211 | + uint32_t alloc_len = 0; |
1212 | pgoff_t index = pos >> PAGE_CACHE_SHIFT; |
1213 | uint32_t pageofs = index << PAGE_CACHE_SHIFT; |
1214 | int ret = 0; |
1215 | |
1216 | + jffs2_dbg(1, "%s()\n", __func__); |
1217 | + |
1218 | + if (pageofs > inode->i_size) { |
1219 | + ret = jffs2_reserve_space(c, sizeof(ri), &alloc_len, |
1220 | + ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE); |
1221 | + if (ret) |
1222 | + return ret; |
1223 | + } |
1224 | + |
1225 | + mutex_lock(&f->sem); |
1226 | pg = grab_cache_page_write_begin(mapping, index, flags); |
1227 | - if (!pg) |
1228 | + if (!pg) { |
1229 | + if (alloc_len) |
1230 | + jffs2_complete_reservation(c); |
1231 | + mutex_unlock(&f->sem); |
1232 | return -ENOMEM; |
1233 | + } |
1234 | *pagep = pg; |
1235 | |
1236 | - jffs2_dbg(1, "%s()\n", __func__); |
1237 | - |
1238 | - if (pageofs > inode->i_size) { |
1239 | + if (alloc_len) { |
1240 | /* Make new hole frag from old EOF to new page */ |
1241 | - struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); |
1242 | - struct jffs2_raw_inode ri; |
1243 | struct jffs2_full_dnode *fn; |
1244 | - uint32_t alloc_len; |
1245 | |
1246 | jffs2_dbg(1, "Writing new hole frag 0x%x-0x%x between current EOF and new page\n", |
1247 | (unsigned int)inode->i_size, pageofs); |
1248 | |
1249 | - ret = jffs2_reserve_space(c, sizeof(ri), &alloc_len, |
1250 | - ALLOC_NORMAL, JFFS2_SUMMARY_INODE_SIZE); |
1251 | - if (ret) |
1252 | - goto out_page; |
1253 | - |
1254 | - mutex_lock(&f->sem); |
1255 | memset(&ri, 0, sizeof(ri)); |
1256 | |
1257 | ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); |
1258 | @@ -191,7 +197,6 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, |
1259 | if (IS_ERR(fn)) { |
1260 | ret = PTR_ERR(fn); |
1261 | jffs2_complete_reservation(c); |
1262 | - mutex_unlock(&f->sem); |
1263 | goto out_page; |
1264 | } |
1265 | ret = jffs2_add_full_dnode_to_inode(c, f, fn); |
1266 | @@ -206,12 +211,10 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, |
1267 | jffs2_mark_node_obsolete(c, fn->raw); |
1268 | jffs2_free_full_dnode(fn); |
1269 | jffs2_complete_reservation(c); |
1270 | - mutex_unlock(&f->sem); |
1271 | goto out_page; |
1272 | } |
1273 | jffs2_complete_reservation(c); |
1274 | inode->i_size = pageofs; |
1275 | - mutex_unlock(&f->sem); |
1276 | } |
1277 | |
1278 | /* |
1279 | @@ -220,18 +223,18 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, |
1280 | * case of a short-copy. |
1281 | */ |
1282 | if (!PageUptodate(pg)) { |
1283 | - mutex_lock(&f->sem); |
1284 | ret = jffs2_do_readpage_nolock(inode, pg); |
1285 | - mutex_unlock(&f->sem); |
1286 | if (ret) |
1287 | goto out_page; |
1288 | } |
1289 | + mutex_unlock(&f->sem); |
1290 | jffs2_dbg(1, "end write_begin(). pg->flags %lx\n", pg->flags); |
1291 | return ret; |
1292 | |
1293 | out_page: |
1294 | unlock_page(pg); |
1295 | page_cache_release(pg); |
1296 | + mutex_unlock(&f->sem); |
1297 | return ret; |
1298 | } |
1299 | |
1300 | diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c |
1301 | index ec9f187..8640a12 100644 |
1302 | --- a/fs/ubifs/dir.c |
1303 | +++ b/fs/ubifs/dir.c |
1304 | @@ -977,7 +977,7 @@ static int ubifs_rename(struct inode *old_dir, struct dentry *old_dentry, |
1305 | struct ubifs_budget_req ino_req = { .dirtied_ino = 1, |
1306 | .dirtied_ino_d = ALIGN(old_inode_ui->data_len, 8) }; |
1307 | struct timespec time; |
1308 | - unsigned int saved_nlink; |
1309 | + unsigned int uninitialized_var(saved_nlink); |
1310 | |
1311 | /* |
1312 | * Budget request settings: deletion direntry, new direntry, removing |
1313 | diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h |
1314 | index efc66f2..7207a99 100644 |
1315 | --- a/include/drm/drm_pciids.h |
1316 | +++ b/include/drm/drm_pciids.h |
1317 | @@ -214,6 +214,7 @@ |
1318 | {0x1002, 0x6798, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
1319 | {0x1002, 0x6799, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
1320 | {0x1002, 0x679A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
1321 | + {0x1002, 0x679B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
1322 | {0x1002, 0x679E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
1323 | {0x1002, 0x679F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ |
1324 | {0x1002, 0x6800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
1325 | diff --git a/kernel/futex.c b/kernel/futex.c |
1326 | index 20ef219..19eb089 100644 |
1327 | --- a/kernel/futex.c |
1328 | +++ b/kernel/futex.c |
1329 | @@ -843,6 +843,9 @@ static void wake_futex(struct futex_q *q) |
1330 | { |
1331 | struct task_struct *p = q->task; |
1332 | |
1333 | + if (WARN(q->pi_state || q->rt_waiter, "refusing to wake PI futex\n")) |
1334 | + return; |
1335 | + |
1336 | /* |
1337 | * We set q->lock_ptr = NULL _before_ we wake up the task. If |
1338 | * a non-futex wake up happens on another CPU then the task |
1339 | @@ -1078,6 +1081,10 @@ retry_private: |
1340 | |
1341 | plist_for_each_entry_safe(this, next, head, list) { |
1342 | if (match_futex (&this->key, &key1)) { |
1343 | + if (this->pi_state || this->rt_waiter) { |
1344 | + ret = -EINVAL; |
1345 | + goto out_unlock; |
1346 | + } |
1347 | wake_futex(this); |
1348 | if (++ret >= nr_wake) |
1349 | break; |
1350 | @@ -1090,6 +1097,10 @@ retry_private: |
1351 | op_ret = 0; |
1352 | plist_for_each_entry_safe(this, next, head, list) { |
1353 | if (match_futex (&this->key, &key2)) { |
1354 | + if (this->pi_state || this->rt_waiter) { |
1355 | + ret = -EINVAL; |
1356 | + goto out_unlock; |
1357 | + } |
1358 | wake_futex(this); |
1359 | if (++op_ret >= nr_wake2) |
1360 | break; |
1361 | @@ -1098,6 +1109,7 @@ retry_private: |
1362 | ret += op_ret; |
1363 | } |
1364 | |
1365 | +out_unlock: |
1366 | double_unlock_hb(hb1, hb2); |
1367 | out_put_keys: |
1368 | put_futex_key(&key2); |
1369 | @@ -1387,9 +1399,13 @@ retry_private: |
1370 | /* |
1371 | * FUTEX_WAIT_REQEUE_PI and FUTEX_CMP_REQUEUE_PI should always |
1372 | * be paired with each other and no other futex ops. |
1373 | + * |
1374 | + * We should never be requeueing a futex_q with a pi_state, |
1375 | + * which is awaiting a futex_unlock_pi(). |
1376 | */ |
1377 | if ((requeue_pi && !this->rt_waiter) || |
1378 | - (!requeue_pi && this->rt_waiter)) { |
1379 | + (!requeue_pi && this->rt_waiter) || |
1380 | + this->pi_state) { |
1381 | ret = -EINVAL; |
1382 | break; |
1383 | } |
1384 | diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c |
1385 | index 12843e9..eff0b1e 100644 |
1386 | --- a/kernel/time/timekeeping.c |
1387 | +++ b/kernel/time/timekeeping.c |
1388 | @@ -1014,7 +1014,7 @@ static cycle_t logarithmic_accumulation(cycle_t offset, int shift) |
1389 | } |
1390 | |
1391 | /* Accumulate raw time */ |
1392 | - raw_nsecs = timekeeper.raw_interval << shift; |
1393 | + raw_nsecs = (u64)timekeeper.raw_interval << shift; |
1394 | raw_nsecs += timekeeper.raw_time.tv_nsec; |
1395 | if (raw_nsecs >= NSEC_PER_SEC) { |
1396 | u64 raw_secs = raw_nsecs; |
1397 | diff --git a/kernel/watchdog.c b/kernel/watchdog.c |
1398 | index df30ee0..991aa93 100644 |
1399 | --- a/kernel/watchdog.c |
1400 | +++ b/kernel/watchdog.c |
1401 | @@ -112,7 +112,7 @@ static unsigned long get_timestamp(int this_cpu) |
1402 | return cpu_clock(this_cpu) >> 30LL; /* 2^30 ~= 10^9 */ |
1403 | } |
1404 | |
1405 | -static unsigned long get_sample_period(void) |
1406 | +static u64 get_sample_period(void) |
1407 | { |
1408 | /* |
1409 | * convert watchdog_thresh from seconds to ns |
1410 | @@ -121,7 +121,7 @@ static unsigned long get_sample_period(void) |
1411 | * and hard thresholds) to increment before the |
1412 | * hardlockup detector generates a warning |
1413 | */ |
1414 | - return get_softlockup_thresh() * (NSEC_PER_SEC / 5); |
1415 | + return get_softlockup_thresh() * ((u64)NSEC_PER_SEC / 5); |
1416 | } |
1417 | |
1418 | /* Commands for resetting the watchdog */ |
1419 | diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h |
1420 | index 29f9862..280405b 100644 |
1421 | --- a/lib/mpi/longlong.h |
1422 | +++ b/lib/mpi/longlong.h |
1423 | @@ -703,7 +703,14 @@ do { \ |
1424 | ************** MIPS ***************** |
1425 | ***************************************/ |
1426 | #if defined(__mips__) && W_TYPE_SIZE == 32 |
1427 | -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 |
1428 | +#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 |
1429 | +#define umul_ppmm(w1, w0, u, v) \ |
1430 | +do { \ |
1431 | + UDItype __ll = (UDItype)(u) * (v); \ |
1432 | + w1 = __ll >> 32; \ |
1433 | + w0 = __ll; \ |
1434 | +} while (0) |
1435 | +#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 |
1436 | #define umul_ppmm(w1, w0, u, v) \ |
1437 | __asm__ ("multu %2,%3" \ |
1438 | : "=l" ((USItype)(w0)), \ |
1439 | @@ -728,7 +735,15 @@ do { \ |
1440 | ************** MIPS/64 ************** |
1441 | ***************************************/ |
1442 | #if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64 |
1443 | -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 |
1444 | +#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 |
1445 | +#define umul_ppmm(w1, w0, u, v) \ |
1446 | +do { \ |
1447 | + typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \ |
1448 | + __ll_UTItype __ll = (__ll_UTItype)(u) * (v); \ |
1449 | + w1 = __ll >> 64; \ |
1450 | + w0 = __ll; \ |
1451 | +} while (0) |
1452 | +#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 |
1453 | #define umul_ppmm(w1, w0, u, v) \ |
1454 | __asm__ ("dmultu %2,%3" \ |
1455 | : "=l" ((UDItype)(w0)), \ |
1456 | diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c |
1457 | index 627c354..fa07aed 100644 |
1458 | --- a/net/bluetooth/l2cap_core.c |
1459 | +++ b/net/bluetooth/l2cap_core.c |
1460 | @@ -2585,12 +2585,14 @@ static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len) |
1461 | while (len >= L2CAP_CONF_OPT_SIZE) { |
1462 | len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val); |
1463 | |
1464 | - switch (type) { |
1465 | - case L2CAP_CONF_RFC: |
1466 | - if (olen == sizeof(rfc)) |
1467 | - memcpy(&rfc, (void *)val, olen); |
1468 | - goto done; |
1469 | - } |
1470 | + if (type != L2CAP_CONF_RFC) |
1471 | + continue; |
1472 | + |
1473 | + if (olen != sizeof(rfc)) |
1474 | + break; |
1475 | + |
1476 | + memcpy(&rfc, (void *)val, olen); |
1477 | + goto done; |
1478 | } |
1479 | |
1480 | /* Use sane default values in case a misbehaving remote device |
1481 | diff --git a/net/can/bcm.c b/net/can/bcm.c |
1482 | index 151b773..3910c1f 100644 |
1483 | --- a/net/can/bcm.c |
1484 | +++ b/net/can/bcm.c |
1485 | @@ -1084,6 +1084,9 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg, |
1486 | op->sk = sk; |
1487 | op->ifindex = ifindex; |
1488 | |
1489 | + /* ifindex for timeout events w/o previous frame reception */ |
1490 | + op->rx_ifindex = ifindex; |
1491 | + |
1492 | /* initialize uninitialized (kzalloc) structure */ |
1493 | hrtimer_init(&op->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
1494 | op->timer.function = bcm_rx_timeout_handler; |
1495 | diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c |
1496 | index 4a3666b..7c51bae 100644 |
1497 | --- a/net/mac80211/ibss.c |
1498 | +++ b/net/mac80211/ibss.c |
1499 | @@ -1153,10 +1153,6 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) |
1500 | |
1501 | mutex_lock(&sdata->u.ibss.mtx); |
1502 | |
1503 | - sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; |
1504 | - memset(sdata->u.ibss.bssid, 0, ETH_ALEN); |
1505 | - sdata->u.ibss.ssid_len = 0; |
1506 | - |
1507 | active_ibss = ieee80211_sta_active_ibss(sdata); |
1508 | |
1509 | if (!active_ibss && !is_zero_ether_addr(ifibss->bssid)) { |
1510 | @@ -1177,6 +1173,10 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) |
1511 | } |
1512 | } |
1513 | |
1514 | + ifibss->state = IEEE80211_IBSS_MLME_SEARCH; |
1515 | + memset(ifibss->bssid, 0, ETH_ALEN); |
1516 | + ifibss->ssid_len = 0; |
1517 | + |
1518 | sta_info_flush(sdata->local, sdata); |
1519 | |
1520 | spin_lock_bh(&ifibss->incomplete_lock); |
1521 | diff --git a/net/nfc/llcp/llcp.c b/net/nfc/llcp/llcp.c |
1522 | index 17a578f..c40112c 100644 |
1523 | --- a/net/nfc/llcp/llcp.c |
1524 | +++ b/net/nfc/llcp/llcp.c |
1525 | @@ -966,7 +966,7 @@ int nfc_llcp_register_device(struct nfc_dev *ndev) |
1526 | local->remote_lto = LLCP_DEFAULT_LTO; |
1527 | local->remote_rw = LLCP_DEFAULT_RW; |
1528 | |
1529 | - list_add(&llcp_devices, &local->list); |
1530 | + list_add(&local->list, &llcp_devices); |
1531 | |
1532 | return 0; |
1533 | |
1534 | diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c |
1535 | index 057f95a2..3605fbb 100644 |
1536 | --- a/sound/pci/hda/patch_cirrus.c |
1537 | +++ b/sound/pci/hda/patch_cirrus.c |
1538 | @@ -460,6 +460,7 @@ static int parse_output(struct hda_codec *codec) |
1539 | memcpy(cfg->speaker_pins, cfg->line_out_pins, |
1540 | sizeof(cfg->speaker_pins)); |
1541 | cfg->line_outs = 0; |
1542 | + memset(cfg->line_out_pins, 0, sizeof(cfg->line_out_pins)); |
1543 | } |
1544 | |
1545 | return 0; |
1546 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c |
1547 | index 257fe87..29774e2 100644 |
1548 | --- a/sound/pci/hda/patch_realtek.c |
1549 | +++ b/sound/pci/hda/patch_realtek.c |
1550 | @@ -4322,6 +4322,7 @@ static void alc_auto_init_std(struct hda_codec *codec) |
1551 | ((spec)->beep_amp = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir)) |
1552 | |
1553 | static const struct snd_pci_quirk beep_white_list[] = { |
1554 | + SND_PCI_QUIRK(0x1043, 0x103c, "ASUS", 1), |
1555 | SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1), |
1556 | SND_PCI_QUIRK(0x1043, 0x83ce, "EeePC", 1), |
1557 | SND_PCI_QUIRK(0x1043, 0x831a, "EeePC", 1), |
1558 | @@ -7035,6 +7036,9 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { |
1559 | { .id = 0x10ec0276, .name = "ALC276", .patch = patch_alc269 }, |
1560 | { .id = 0x10ec0280, .name = "ALC280", .patch = patch_alc269 }, |
1561 | { .id = 0x10ec0282, .name = "ALC282", .patch = patch_alc269 }, |
1562 | + { .id = 0x10ec0283, .name = "ALC283", .patch = patch_alc269 }, |
1563 | + { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 }, |
1564 | + { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 }, |
1565 | { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", |
1566 | .patch = patch_alc861 }, |
1567 | { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd }, |
1568 | diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c |
1569 | index 64aed43..7da0d0a 100644 |
1570 | --- a/sound/usb/caiaq/device.c |
1571 | +++ b/sound/usb/caiaq/device.c |
1572 | @@ -485,7 +485,7 @@ static int __devinit snd_probe(struct usb_interface *intf, |
1573 | const struct usb_device_id *id) |
1574 | { |
1575 | int ret; |
1576 | - struct snd_card *card; |
1577 | + struct snd_card *card = NULL; |
1578 | struct usb_device *device = interface_to_usbdev(intf); |
1579 | |
1580 | ret = create_card(device, intf, &card); |
1581 | diff --git a/sound/usb/midi.c b/sound/usb/midi.c |
1582 | index c83f614..eeefbce 100644 |
1583 | --- a/sound/usb/midi.c |
1584 | +++ b/sound/usb/midi.c |
1585 | @@ -148,6 +148,7 @@ struct snd_usb_midi_out_endpoint { |
1586 | struct snd_usb_midi_out_endpoint* ep; |
1587 | struct snd_rawmidi_substream *substream; |
1588 | int active; |
1589 | + bool autopm_reference; |
1590 | uint8_t cable; /* cable number << 4 */ |
1591 | uint8_t state; |
1592 | #define STATE_UNKNOWN 0 |
1593 | @@ -1076,7 +1077,8 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream) |
1594 | return -ENXIO; |
1595 | } |
1596 | err = usb_autopm_get_interface(umidi->iface); |
1597 | - if (err < 0) |
1598 | + port->autopm_reference = err >= 0; |
1599 | + if (err < 0 && err != -EACCES) |
1600 | return -EIO; |
1601 | substream->runtime->private_data = port; |
1602 | port->state = STATE_UNKNOWN; |
1603 | @@ -1087,9 +1089,11 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream) |
1604 | static int snd_usbmidi_output_close(struct snd_rawmidi_substream *substream) |
1605 | { |
1606 | struct snd_usb_midi* umidi = substream->rmidi->private_data; |
1607 | + struct usbmidi_out_port *port = substream->runtime->private_data; |
1608 | |
1609 | substream_open(substream, 0); |
1610 | - usb_autopm_put_interface(umidi->iface); |
1611 | + if (port->autopm_reference) |
1612 | + usb_autopm_put_interface(umidi->iface); |
1613 | return 0; |
1614 | } |
1615 |