Contents of /trunk/kernel26-mcore/patches-2.6.36-r3/0100-2.6.36.1-all-fixes.patch
Parent Directory | Revision Log
Revision 1231 -
(show annotations)
(download)
Fri Dec 10 22:38:07 2010 UTC (13 years, 9 months ago) by niro
File size: 65138 byte(s)
Fri Dec 10 22:38:07 2010 UTC (13 years, 9 months ago) by niro
File size: 65138 byte(s)
-2.6.36-mcore-r3: -using linux-2.6.36.2 -enabled ipv6 support
1 | diff --git a/arch/arm/include/asm/kgdb.h b/arch/arm/include/asm/kgdb.h |
2 | index 0826599..48066ce 100644 |
3 | --- a/arch/arm/include/asm/kgdb.h |
4 | +++ b/arch/arm/include/asm/kgdb.h |
5 | @@ -70,7 +70,8 @@ extern int kgdb_fault_expected; |
6 | #define _GP_REGS 16 |
7 | #define _FP_REGS 8 |
8 | #define _EXTRA_REGS 2 |
9 | -#define DBG_MAX_REG_NUM (_GP_REGS + (_FP_REGS * 3) + _EXTRA_REGS) |
10 | +#define GDB_MAX_REGS (_GP_REGS + (_FP_REGS * 3) + _EXTRA_REGS) |
11 | +#define DBG_MAX_REG_NUM (_GP_REGS + _FP_REGS + _EXTRA_REGS) |
12 | |
13 | #define KGDB_MAX_NO_CPUS 1 |
14 | #define BUFMAX 400 |
15 | @@ -93,7 +94,7 @@ extern int kgdb_fault_expected; |
16 | #define _SPT 13 |
17 | #define _LR 14 |
18 | #define _PC 15 |
19 | -#define _CPSR (DBG_MAX_REG_NUM - 1) |
20 | +#define _CPSR (GDB_MAX_REGS - 1) |
21 | |
22 | /* |
23 | * So that we can denote the end of a frame for tracing, |
24 | diff --git a/arch/arm/kernel/kgdb.c b/arch/arm/kernel/kgdb.c |
25 | index d6e8b4d..778c2f7 100644 |
26 | --- a/arch/arm/kernel/kgdb.c |
27 | +++ b/arch/arm/kernel/kgdb.c |
28 | @@ -79,7 +79,7 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task) |
29 | return; |
30 | |
31 | /* Initialize to zero */ |
32 | - for (regno = 0; regno < DBG_MAX_REG_NUM; regno++) |
33 | + for (regno = 0; regno < GDB_MAX_REGS; regno++) |
34 | gdb_regs[regno] = 0; |
35 | |
36 | /* Otherwise, we have only some registers from switch_to() */ |
37 | diff --git a/arch/arm/mach-cns3xxx/include/mach/debug-macro.S b/arch/arm/mach-cns3xxx/include/mach/debug-macro.S |
38 | index d16ce7e..9b50442 100644 |
39 | --- a/arch/arm/mach-cns3xxx/include/mach/debug-macro.S |
40 | +++ b/arch/arm/mach-cns3xxx/include/mach/debug-macro.S |
41 | @@ -10,7 +10,7 @@ |
42 | * published by the Free Software Foundation. |
43 | */ |
44 | |
45 | - .macro addruart,rx |
46 | + .macro addruart,rx,rtmp |
47 | mrc p15, 0, \rx, c1, c0 |
48 | tst \rx, #1 @ MMU enabled? |
49 | moveq \rx, #0x10000000 |
50 | diff --git a/arch/powerpc/kernel/ppc970-pmu.c b/arch/powerpc/kernel/ppc970-pmu.c |
51 | index 8eff48e..3fee685 100644 |
52 | --- a/arch/powerpc/kernel/ppc970-pmu.c |
53 | +++ b/arch/powerpc/kernel/ppc970-pmu.c |
54 | @@ -169,9 +169,11 @@ static int p970_marked_instr_event(u64 event) |
55 | switch (unit) { |
56 | case PM_VPU: |
57 | mask = 0x4c; /* byte 0 bits 2,3,6 */ |
58 | + break; |
59 | case PM_LSU0: |
60 | /* byte 2 bits 0,2,3,4,6; all of byte 1 */ |
61 | mask = 0x085dff00; |
62 | + break; |
63 | case PM_LSU1L: |
64 | mask = 0x50 << 24; /* byte 3 bits 4,6 */ |
65 | break; |
66 | diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h |
67 | index 3f76523..f857bd3 100644 |
68 | --- a/arch/x86/include/asm/cpufeature.h |
69 | +++ b/arch/x86/include/asm/cpufeature.h |
70 | @@ -152,7 +152,7 @@ |
71 | #define X86_FEATURE_3DNOWPREFETCH (6*32+ 8) /* 3DNow prefetch instructions */ |
72 | #define X86_FEATURE_OSVW (6*32+ 9) /* OS Visible Workaround */ |
73 | #define X86_FEATURE_IBS (6*32+10) /* Instruction Based Sampling */ |
74 | -#define X86_FEATURE_SSE5 (6*32+11) /* SSE-5 */ |
75 | +#define X86_FEATURE_XOP (6*32+11) /* extended AVX instructions */ |
76 | #define X86_FEATURE_SKINIT (6*32+12) /* SKINIT/STGI instructions */ |
77 | #define X86_FEATURE_WDT (6*32+13) /* Watchdog timer */ |
78 | #define X86_FEATURE_NODEID_MSR (6*32+19) /* NodeId MSR */ |
79 | diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h |
80 | index 30a3e97..6a45ec4 100644 |
81 | --- a/arch/x86/include/asm/io.h |
82 | +++ b/arch/x86/include/asm/io.h |
83 | @@ -206,6 +206,7 @@ static inline void __iomem *ioremap(resource_size_t offset, unsigned long size) |
84 | |
85 | extern void iounmap(volatile void __iomem *addr); |
86 | |
87 | +extern void set_iounmap_nonlazy(void); |
88 | |
89 | #ifdef __KERNEL__ |
90 | |
91 | diff --git a/arch/x86/include/asm/mrst.h b/arch/x86/include/asm/mrst.h |
92 | index 1635074..33fc296 100644 |
93 | --- a/arch/x86/include/asm/mrst.h |
94 | +++ b/arch/x86/include/asm/mrst.h |
95 | @@ -26,7 +26,7 @@ enum mrst_cpu_type { |
96 | }; |
97 | |
98 | extern enum mrst_cpu_type __mrst_cpu_chip; |
99 | -static enum mrst_cpu_type mrst_identify_cpu(void) |
100 | +static inline enum mrst_cpu_type mrst_identify_cpu(void) |
101 | { |
102 | return __mrst_cpu_chip; |
103 | } |
104 | diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h |
105 | index 4cfc908..4c2f63c 100644 |
106 | --- a/arch/x86/include/asm/smp.h |
107 | +++ b/arch/x86/include/asm/smp.h |
108 | @@ -50,7 +50,7 @@ struct smp_ops { |
109 | void (*smp_prepare_cpus)(unsigned max_cpus); |
110 | void (*smp_cpus_done)(unsigned max_cpus); |
111 | |
112 | - void (*smp_send_stop)(void); |
113 | + void (*stop_other_cpus)(int wait); |
114 | void (*smp_send_reschedule)(int cpu); |
115 | |
116 | int (*cpu_up)(unsigned cpu); |
117 | @@ -73,7 +73,12 @@ extern struct smp_ops smp_ops; |
118 | |
119 | static inline void smp_send_stop(void) |
120 | { |
121 | - smp_ops.smp_send_stop(); |
122 | + smp_ops.stop_other_cpus(0); |
123 | +} |
124 | + |
125 | +static inline void stop_other_cpus(void) |
126 | +{ |
127 | + smp_ops.stop_other_cpus(1); |
128 | } |
129 | |
130 | static inline void smp_prepare_boot_cpu(void) |
131 | diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c |
132 | index 5c5b8f3..ad1515d 100644 |
133 | --- a/arch/x86/kernel/apic/io_apic.c |
134 | +++ b/arch/x86/kernel/apic/io_apic.c |
135 | @@ -1397,6 +1397,7 @@ int setup_ioapic_entry(int apic_id, int irq, |
136 | irte.dlvry_mode = apic->irq_delivery_mode; |
137 | irte.vector = vector; |
138 | irte.dest_id = IRTE_DEST(destination); |
139 | + irte.redir_hint = 1; |
140 | |
141 | /* Set source-id of interrupt request */ |
142 | set_ioapic_sid(&irte, apic_id); |
143 | @@ -3348,6 +3349,7 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, |
144 | irte.dlvry_mode = apic->irq_delivery_mode; |
145 | irte.vector = cfg->vector; |
146 | irte.dest_id = IRTE_DEST(dest); |
147 | + irte.redir_hint = 1; |
148 | |
149 | /* Set source-id of interrupt request */ |
150 | if (pdev) |
151 | diff --git a/arch/x86/kernel/cpu/mtrr/cleanup.c b/arch/x86/kernel/cpu/mtrr/cleanup.c |
152 | index c5f59d0..ac140c7 100644 |
153 | --- a/arch/x86/kernel/cpu/mtrr/cleanup.c |
154 | +++ b/arch/x86/kernel/cpu/mtrr/cleanup.c |
155 | @@ -827,7 +827,7 @@ int __init amd_special_default_mtrr(void) |
156 | |
157 | if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) |
158 | return 0; |
159 | - if (boot_cpu_data.x86 < 0xf || boot_cpu_data.x86 > 0x11) |
160 | + if (boot_cpu_data.x86 < 0xf) |
161 | return 0; |
162 | /* In case some hypervisor doesn't pass SYSCFG through: */ |
163 | if (rdmsr_safe(MSR_K8_SYSCFG, &l, &h) < 0) |
164 | diff --git a/arch/x86/kernel/cpu/perf_event_amd.c b/arch/x86/kernel/cpu/perf_event_amd.c |
165 | index c2897b7..46d5844 100644 |
166 | --- a/arch/x86/kernel/cpu/perf_event_amd.c |
167 | +++ b/arch/x86/kernel/cpu/perf_event_amd.c |
168 | @@ -52,7 +52,7 @@ static __initconst const u64 amd_hw_cache_event_ids |
169 | [ C(DTLB) ] = { |
170 | [ C(OP_READ) ] = { |
171 | [ C(RESULT_ACCESS) ] = 0x0040, /* Data Cache Accesses */ |
172 | - [ C(RESULT_MISS) ] = 0x0046, /* L1 DTLB and L2 DLTB Miss */ |
173 | + [ C(RESULT_MISS) ] = 0x0746, /* L1_DTLB_AND_L2_DLTB_MISS.ALL */ |
174 | }, |
175 | [ C(OP_WRITE) ] = { |
176 | [ C(RESULT_ACCESS) ] = 0, |
177 | @@ -66,7 +66,7 @@ static __initconst const u64 amd_hw_cache_event_ids |
178 | [ C(ITLB) ] = { |
179 | [ C(OP_READ) ] = { |
180 | [ C(RESULT_ACCESS) ] = 0x0080, /* Instruction fecthes */ |
181 | - [ C(RESULT_MISS) ] = 0x0085, /* Instr. fetch ITLB misses */ |
182 | + [ C(RESULT_MISS) ] = 0x0385, /* L1_ITLB_AND_L2_ITLB_MISS.ALL */ |
183 | }, |
184 | [ C(OP_WRITE) ] = { |
185 | [ C(RESULT_ACCESS) ] = -1, |
186 | diff --git a/arch/x86/kernel/crash_dump_64.c b/arch/x86/kernel/crash_dump_64.c |
187 | index 045b36c..9948288 100644 |
188 | --- a/arch/x86/kernel/crash_dump_64.c |
189 | +++ b/arch/x86/kernel/crash_dump_64.c |
190 | @@ -34,7 +34,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, |
191 | if (!csize) |
192 | return 0; |
193 | |
194 | - vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE); |
195 | + vaddr = ioremap_cache(pfn << PAGE_SHIFT, PAGE_SIZE); |
196 | if (!vaddr) |
197 | return -ENOMEM; |
198 | |
199 | @@ -46,6 +46,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, |
200 | } else |
201 | memcpy(buf, vaddr + offset, csize); |
202 | |
203 | + set_iounmap_nonlazy(); |
204 | iounmap(vaddr); |
205 | return csize; |
206 | } |
207 | diff --git a/arch/x86/kernel/olpc.c b/arch/x86/kernel/olpc.c |
208 | index 0e0cdde..a2bd899 100644 |
209 | --- a/arch/x86/kernel/olpc.c |
210 | +++ b/arch/x86/kernel/olpc.c |
211 | @@ -114,6 +114,7 @@ int olpc_ec_cmd(unsigned char cmd, unsigned char *inbuf, size_t inlen, |
212 | unsigned long flags; |
213 | int ret = -EIO; |
214 | int i; |
215 | + int restarts = 0; |
216 | |
217 | spin_lock_irqsave(&ec_lock, flags); |
218 | |
219 | @@ -169,7 +170,9 @@ restart: |
220 | if (wait_on_obf(0x6c, 1)) { |
221 | printk(KERN_ERR "olpc-ec: timeout waiting for" |
222 | " EC to provide data!\n"); |
223 | - goto restart; |
224 | + if (restarts++ < 10) |
225 | + goto restart; |
226 | + goto err; |
227 | } |
228 | outbuf[i] = inb(0x68); |
229 | pr_devel("olpc-ec: received 0x%x\n", outbuf[i]); |
230 | diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c |
231 | index e3af342..76a0d71 100644 |
232 | --- a/arch/x86/kernel/reboot.c |
233 | +++ b/arch/x86/kernel/reboot.c |
234 | @@ -641,7 +641,7 @@ void native_machine_shutdown(void) |
235 | /* O.K Now that I'm on the appropriate processor, |
236 | * stop all of the others. |
237 | */ |
238 | - smp_send_stop(); |
239 | + stop_other_cpus(); |
240 | #endif |
241 | |
242 | lapic_shutdown(); |
243 | diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c |
244 | index d801210..513deac 100644 |
245 | --- a/arch/x86/kernel/smp.c |
246 | +++ b/arch/x86/kernel/smp.c |
247 | @@ -159,10 +159,10 @@ asmlinkage void smp_reboot_interrupt(void) |
248 | irq_exit(); |
249 | } |
250 | |
251 | -static void native_smp_send_stop(void) |
252 | +static void native_stop_other_cpus(int wait) |
253 | { |
254 | unsigned long flags; |
255 | - unsigned long wait; |
256 | + unsigned long timeout; |
257 | |
258 | if (reboot_force) |
259 | return; |
260 | @@ -179,9 +179,12 @@ static void native_smp_send_stop(void) |
261 | if (num_online_cpus() > 1) { |
262 | apic->send_IPI_allbutself(REBOOT_VECTOR); |
263 | |
264 | - /* Don't wait longer than a second */ |
265 | - wait = USEC_PER_SEC; |
266 | - while (num_online_cpus() > 1 && wait--) |
267 | + /* |
268 | + * Don't wait longer than a second if the caller |
269 | + * didn't ask us to wait. |
270 | + */ |
271 | + timeout = USEC_PER_SEC; |
272 | + while (num_online_cpus() > 1 && (wait || timeout--)) |
273 | udelay(1); |
274 | } |
275 | |
276 | @@ -227,7 +230,7 @@ struct smp_ops smp_ops = { |
277 | .smp_prepare_cpus = native_smp_prepare_cpus, |
278 | .smp_cpus_done = native_smp_cpus_done, |
279 | |
280 | - .smp_send_stop = native_smp_send_stop, |
281 | + .stop_other_cpus = native_stop_other_cpus, |
282 | .smp_send_reschedule = native_smp_send_reschedule, |
283 | |
284 | .cpu_up = native_cpu_up, |
285 | diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c |
286 | index 60788de..9f4edeb 100644 |
287 | --- a/arch/x86/kernel/traps.c |
288 | +++ b/arch/x86/kernel/traps.c |
289 | @@ -575,6 +575,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code) |
290 | if (regs->flags & X86_VM_MASK) { |
291 | handle_vm86_trap((struct kernel_vm86_regs *) regs, |
292 | error_code, 1); |
293 | + preempt_conditional_cli(regs); |
294 | return; |
295 | } |
296 | |
297 | diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c |
298 | index 5ffb562..61fb985 100644 |
299 | --- a/arch/x86/kernel/vm86_32.c |
300 | +++ b/arch/x86/kernel/vm86_32.c |
301 | @@ -551,8 +551,14 @@ cannot_handle: |
302 | int handle_vm86_trap(struct kernel_vm86_regs *regs, long error_code, int trapno) |
303 | { |
304 | if (VMPI.is_vm86pus) { |
305 | - if ((trapno == 3) || (trapno == 1)) |
306 | - return_to_32bit(regs, VM86_TRAP + (trapno << 8)); |
307 | + if ((trapno == 3) || (trapno == 1)) { |
308 | + KVM86->regs32->ax = VM86_TRAP + (trapno << 8); |
309 | + /* setting this flag forces the code in entry_32.S to |
310 | + call save_v86_state() and change the stack pointer |
311 | + to KVM86->regs32 */ |
312 | + set_thread_flag(TIF_IRET); |
313 | + return 0; |
314 | + } |
315 | do_int(regs, trapno, (unsigned char __user *) (regs->pt.ss << 4), SP(regs)); |
316 | return 0; |
317 | } |
318 | diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c |
319 | index 8a3f9f6..2a02a65 100644 |
320 | --- a/arch/x86/kvm/svm.c |
321 | +++ b/arch/x86/kvm/svm.c |
322 | @@ -88,6 +88,14 @@ struct nested_state { |
323 | /* A VMEXIT is required but not yet emulated */ |
324 | bool exit_required; |
325 | |
326 | + /* |
327 | + * If we vmexit during an instruction emulation we need this to restore |
328 | + * the l1 guest rip after the emulation |
329 | + */ |
330 | + unsigned long vmexit_rip; |
331 | + unsigned long vmexit_rsp; |
332 | + unsigned long vmexit_rax; |
333 | + |
334 | /* cache for intercepts of the guest */ |
335 | u16 intercept_cr_read; |
336 | u16 intercept_cr_write; |
337 | @@ -1206,8 +1214,12 @@ static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0) |
338 | if (old == new) { |
339 | /* cr0 write with ts and mp unchanged */ |
340 | svm->vmcb->control.exit_code = SVM_EXIT_CR0_SEL_WRITE; |
341 | - if (nested_svm_exit_handled(svm) == NESTED_EXIT_DONE) |
342 | + if (nested_svm_exit_handled(svm) == NESTED_EXIT_DONE) { |
343 | + svm->nested.vmexit_rip = kvm_rip_read(vcpu); |
344 | + svm->nested.vmexit_rsp = kvm_register_read(vcpu, VCPU_REGS_RSP); |
345 | + svm->nested.vmexit_rax = kvm_register_read(vcpu, VCPU_REGS_RAX); |
346 | return; |
347 | + } |
348 | } |
349 | } |
350 | |
351 | @@ -2399,6 +2411,23 @@ static int emulate_on_interception(struct vcpu_svm *svm) |
352 | return emulate_instruction(&svm->vcpu, 0, 0, 0) == EMULATE_DONE; |
353 | } |
354 | |
355 | +static int cr0_write_interception(struct vcpu_svm *svm) |
356 | +{ |
357 | + struct kvm_vcpu *vcpu = &svm->vcpu; |
358 | + int r; |
359 | + |
360 | + r = emulate_instruction(&svm->vcpu, 0, 0, 0); |
361 | + |
362 | + if (svm->nested.vmexit_rip) { |
363 | + kvm_register_write(vcpu, VCPU_REGS_RIP, svm->nested.vmexit_rip); |
364 | + kvm_register_write(vcpu, VCPU_REGS_RSP, svm->nested.vmexit_rsp); |
365 | + kvm_register_write(vcpu, VCPU_REGS_RAX, svm->nested.vmexit_rax); |
366 | + svm->nested.vmexit_rip = 0; |
367 | + } |
368 | + |
369 | + return r == EMULATE_DONE; |
370 | +} |
371 | + |
372 | static int cr8_write_interception(struct vcpu_svm *svm) |
373 | { |
374 | struct kvm_run *kvm_run = svm->vcpu.run; |
375 | @@ -2672,7 +2701,7 @@ static int (*svm_exit_handlers[])(struct vcpu_svm *svm) = { |
376 | [SVM_EXIT_READ_CR4] = emulate_on_interception, |
377 | [SVM_EXIT_READ_CR8] = emulate_on_interception, |
378 | [SVM_EXIT_CR0_SEL_WRITE] = emulate_on_interception, |
379 | - [SVM_EXIT_WRITE_CR0] = emulate_on_interception, |
380 | + [SVM_EXIT_WRITE_CR0] = cr0_write_interception, |
381 | [SVM_EXIT_WRITE_CR3] = emulate_on_interception, |
382 | [SVM_EXIT_WRITE_CR4] = emulate_on_interception, |
383 | [SVM_EXIT_WRITE_CR8] = cr8_write_interception, |
384 | @@ -3354,6 +3383,10 @@ static void svm_cpuid_update(struct kvm_vcpu *vcpu) |
385 | static void svm_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry) |
386 | { |
387 | switch (func) { |
388 | + case 0x80000001: |
389 | + if (nested) |
390 | + entry->ecx |= (1 << 2); /* Set SVM bit */ |
391 | + break; |
392 | case 0x8000000A: |
393 | entry->eax = 1; /* SVM revision 1 */ |
394 | entry->ebx = 8; /* Lets support 8 ASIDs in case we add proper |
395 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c |
396 | index 3a09c62..a4a427b 100644 |
397 | --- a/arch/x86/kvm/x86.c |
398 | +++ b/arch/x86/kvm/x86.c |
399 | @@ -1994,9 +1994,9 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, |
400 | 0 /* Reserved, AES */ | F(XSAVE) | 0 /* OSXSAVE */ | F(AVX); |
401 | /* cpuid 0x80000001.ecx */ |
402 | const u32 kvm_supported_word6_x86_features = |
403 | - F(LAHF_LM) | F(CMP_LEGACY) | F(SVM) | 0 /* ExtApicSpace */ | |
404 | + F(LAHF_LM) | F(CMP_LEGACY) | 0 /*SVM*/ | 0 /* ExtApicSpace */ | |
405 | F(CR8_LEGACY) | F(ABM) | F(SSE4A) | F(MISALIGNSSE) | |
406 | - F(3DNOWPREFETCH) | 0 /* OSVW */ | 0 /* IBS */ | F(SSE5) | |
407 | + F(3DNOWPREFETCH) | 0 /* OSVW */ | 0 /* IBS */ | F(XOP) | |
408 | 0 /* SKINIT */ | 0 /* WDT */; |
409 | |
410 | /* all calls to cpuid_count() should be made on the same cpu */ |
411 | diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c |
412 | index 7d46c84..44f8086 100644 |
413 | --- a/arch/x86/xen/enlighten.c |
414 | +++ b/arch/x86/xen/enlighten.c |
415 | @@ -1018,7 +1018,7 @@ static void xen_reboot(int reason) |
416 | struct sched_shutdown r = { .reason = reason }; |
417 | |
418 | #ifdef CONFIG_SMP |
419 | - smp_send_stop(); |
420 | + stop_other_cpus(); |
421 | #endif |
422 | |
423 | if (HYPERVISOR_sched_op(SCHEDOP_shutdown, &r)) |
424 | diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c |
425 | index 25f232b..f4d0100 100644 |
426 | --- a/arch/x86/xen/smp.c |
427 | +++ b/arch/x86/xen/smp.c |
428 | @@ -400,9 +400,9 @@ static void stop_self(void *v) |
429 | BUG(); |
430 | } |
431 | |
432 | -static void xen_smp_send_stop(void) |
433 | +static void xen_stop_other_cpus(int wait) |
434 | { |
435 | - smp_call_function(stop_self, NULL, 0); |
436 | + smp_call_function(stop_self, NULL, wait); |
437 | } |
438 | |
439 | static void xen_smp_send_reschedule(int cpu) |
440 | @@ -470,7 +470,7 @@ static const struct smp_ops xen_smp_ops __initdata = { |
441 | .cpu_disable = xen_cpu_disable, |
442 | .play_dead = xen_play_dead, |
443 | |
444 | - .smp_send_stop = xen_smp_send_stop, |
445 | + .stop_other_cpus = xen_stop_other_cpus, |
446 | .smp_send_reschedule = xen_smp_send_reschedule, |
447 | |
448 | .send_call_func_ipi = xen_smp_send_call_function_ipi, |
449 | diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h |
450 | index e5fdeeb..d1a0f5b 100644 |
451 | --- a/drivers/ata/ahci.h |
452 | +++ b/drivers/ata/ahci.h |
453 | @@ -72,6 +72,7 @@ enum { |
454 | AHCI_CMD_RESET = (1 << 8), |
455 | AHCI_CMD_CLR_BUSY = (1 << 10), |
456 | |
457 | + RX_FIS_PIO_SETUP = 0x20, /* offset of PIO Setup FIS data */ |
458 | RX_FIS_D2H_REG = 0x40, /* offset of D2H Register FIS data */ |
459 | RX_FIS_SDB = 0x58, /* offset of SDB FIS data */ |
460 | RX_FIS_UNK = 0x60, /* offset of Unknown FIS data */ |
461 | diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c |
462 | index 8eea309..137514d 100644 |
463 | --- a/drivers/ata/libahci.c |
464 | +++ b/drivers/ata/libahci.c |
465 | @@ -1830,12 +1830,24 @@ static unsigned int ahci_qc_issue(struct ata_queued_cmd *qc) |
466 | static bool ahci_qc_fill_rtf(struct ata_queued_cmd *qc) |
467 | { |
468 | struct ahci_port_priv *pp = qc->ap->private_data; |
469 | - u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; |
470 | + u8 *rx_fis = pp->rx_fis; |
471 | |
472 | if (pp->fbs_enabled) |
473 | - d2h_fis += qc->dev->link->pmp * AHCI_RX_FIS_SZ; |
474 | + rx_fis += qc->dev->link->pmp * AHCI_RX_FIS_SZ; |
475 | + |
476 | + /* |
477 | + * After a successful execution of an ATA PIO data-in command, |
478 | + * the device doesn't send D2H Reg FIS to update the TF and |
479 | + * the host should take TF and E_Status from the preceding PIO |
480 | + * Setup FIS. |
481 | + */ |
482 | + if (qc->tf.protocol == ATA_PROT_PIO && qc->dma_dir == DMA_FROM_DEVICE && |
483 | + !(qc->flags & ATA_QCFLAG_FAILED)) { |
484 | + ata_tf_from_fis(rx_fis + RX_FIS_PIO_SETUP, &qc->result_tf); |
485 | + qc->result_tf.command = (rx_fis + RX_FIS_PIO_SETUP)[15]; |
486 | + } else |
487 | + ata_tf_from_fis(rx_fis + RX_FIS_D2H_REG, &qc->result_tf); |
488 | |
489 | - ata_tf_from_fis(d2h_fis, &qc->result_tf); |
490 | return true; |
491 | } |
492 | |
493 | diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c |
494 | index 998833d..17361ba 100644 |
495 | --- a/drivers/bluetooth/hci_ldisc.c |
496 | +++ b/drivers/bluetooth/hci_ldisc.c |
497 | @@ -256,9 +256,16 @@ static int hci_uart_tty_open(struct tty_struct *tty) |
498 | |
499 | BT_DBG("tty %p", tty); |
500 | |
501 | + /* FIXME: This btw is bogus, nothing requires the old ldisc to clear |
502 | + the pointer */ |
503 | if (hu) |
504 | return -EEXIST; |
505 | |
506 | + /* Error if the tty has no write op instead of leaving an exploitable |
507 | + hole */ |
508 | + if (tty->ops->write == NULL) |
509 | + return -EOPNOTSUPP; |
510 | + |
511 | if (!(hu = kzalloc(sizeof(struct hci_uart), GFP_KERNEL))) { |
512 | BT_ERR("Can't allocate control structure"); |
513 | return -ENFILE; |
514 | diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c |
515 | index 9ecd6be..45f9fad 100644 |
516 | --- a/drivers/char/pcmcia/synclink_cs.c |
517 | +++ b/drivers/char/pcmcia/synclink_cs.c |
518 | @@ -4127,6 +4127,8 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
519 | if (cmd != SIOCWANDEV) |
520 | return hdlc_ioctl(dev, ifr, cmd); |
521 | |
522 | + memset(&new_line, 0, size); |
523 | + |
524 | switch(ifr->ifr_settings.type) { |
525 | case IF_GET_IFACE: /* return current sync_serial_settings */ |
526 | |
527 | diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c |
528 | index c37ef64..cf88588 100644 |
529 | --- a/drivers/idle/intel_idle.c |
530 | +++ b/drivers/idle/intel_idle.c |
531 | @@ -276,7 +276,7 @@ static int intel_idle_probe(void) |
532 | |
533 | case 0x1C: /* 28 - Atom Processor */ |
534 | case 0x26: /* 38 - Lincroft Atom Processor */ |
535 | - lapic_timer_reliable_states = (1 << 2) | (1 << 1); /* C2, C1 */ |
536 | + lapic_timer_reliable_states = (1 << 1); /* C1 */ |
537 | cpuidle_state_table = atom_cstates; |
538 | break; |
539 | #ifdef FUTURE_USE |
540 | diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c |
541 | index 1f59ee2..17bbacb 100644 |
542 | --- a/drivers/misc/sgi-xp/xpc_uv.c |
543 | +++ b/drivers/misc/sgi-xp/xpc_uv.c |
544 | @@ -417,6 +417,7 @@ xpc_process_activate_IRQ_rcvd_uv(void) |
545 | static void |
546 | xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, |
547 | struct xpc_activate_mq_msghdr_uv *msg_hdr, |
548 | + int part_setup, |
549 | int *wakeup_hb_checker) |
550 | { |
551 | unsigned long irq_flags; |
552 | @@ -481,6 +482,9 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, |
553 | case XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREQUEST_UV: { |
554 | struct xpc_activate_mq_msg_chctl_closerequest_uv *msg; |
555 | |
556 | + if (!part_setup) |
557 | + break; |
558 | + |
559 | msg = container_of(msg_hdr, struct |
560 | xpc_activate_mq_msg_chctl_closerequest_uv, |
561 | hdr); |
562 | @@ -497,6 +501,9 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, |
563 | case XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREPLY_UV: { |
564 | struct xpc_activate_mq_msg_chctl_closereply_uv *msg; |
565 | |
566 | + if (!part_setup) |
567 | + break; |
568 | + |
569 | msg = container_of(msg_hdr, struct |
570 | xpc_activate_mq_msg_chctl_closereply_uv, |
571 | hdr); |
572 | @@ -511,6 +518,9 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, |
573 | case XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREQUEST_UV: { |
574 | struct xpc_activate_mq_msg_chctl_openrequest_uv *msg; |
575 | |
576 | + if (!part_setup) |
577 | + break; |
578 | + |
579 | msg = container_of(msg_hdr, struct |
580 | xpc_activate_mq_msg_chctl_openrequest_uv, |
581 | hdr); |
582 | @@ -528,6 +538,9 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, |
583 | case XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV: { |
584 | struct xpc_activate_mq_msg_chctl_openreply_uv *msg; |
585 | |
586 | + if (!part_setup) |
587 | + break; |
588 | + |
589 | msg = container_of(msg_hdr, struct |
590 | xpc_activate_mq_msg_chctl_openreply_uv, hdr); |
591 | args = &part->remote_openclose_args[msg->ch_number]; |
592 | @@ -545,6 +558,9 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, |
593 | case XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV: { |
594 | struct xpc_activate_mq_msg_chctl_opencomplete_uv *msg; |
595 | |
596 | + if (!part_setup) |
597 | + break; |
598 | + |
599 | msg = container_of(msg_hdr, struct |
600 | xpc_activate_mq_msg_chctl_opencomplete_uv, hdr); |
601 | spin_lock_irqsave(&part->chctl_lock, irq_flags); |
602 | @@ -621,6 +637,7 @@ xpc_handle_activate_IRQ_uv(int irq, void *dev_id) |
603 | |
604 | part_referenced = xpc_part_ref(part); |
605 | xpc_handle_activate_mq_msg_uv(part, msg_hdr, |
606 | + part_referenced, |
607 | &wakeup_hb_checker); |
608 | if (part_referenced) |
609 | xpc_part_deref(part); |
610 | diff --git a/drivers/net/wireless/p54/eeprom.c b/drivers/net/wireless/p54/eeprom.c |
611 | index 78347041..0a7ce37 100644 |
612 | --- a/drivers/net/wireless/p54/eeprom.c |
613 | +++ b/drivers/net/wireless/p54/eeprom.c |
614 | @@ -260,8 +260,10 @@ static int p54_generate_channel_lists(struct ieee80211_hw *dev) |
615 | list->max_entries = max_channel_num; |
616 | list->channels = kzalloc(sizeof(struct p54_channel_entry) * |
617 | max_channel_num, GFP_KERNEL); |
618 | - if (!list->channels) |
619 | + if (!list->channels) { |
620 | + ret = -ENOMEM; |
621 | goto free; |
622 | + } |
623 | |
624 | for (i = 0; i < max_channel_num; i++) { |
625 | if (i < priv->iq_autocal_len) { |
626 | diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c |
627 | index ad59595..d5bc21e 100644 |
628 | --- a/drivers/net/wireless/p54/p54usb.c |
629 | +++ b/drivers/net/wireless/p54/p54usb.c |
630 | @@ -33,8 +33,17 @@ MODULE_ALIAS("prism54usb"); |
631 | MODULE_FIRMWARE("isl3886usb"); |
632 | MODULE_FIRMWARE("isl3887usb"); |
633 | |
634 | +/* |
635 | + * Note: |
636 | + * |
637 | + * Always update our wiki's device list (located at: |
638 | + * http://wireless.kernel.org/en/users/Drivers/p54/devices ), |
639 | + * whenever you add a new device. |
640 | + */ |
641 | + |
642 | static struct usb_device_id p54u_table[] __devinitdata = { |
643 | /* Version 1 devices (pci chip + net2280) */ |
644 | + {USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */ |
645 | {USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */ |
646 | {USB_DEVICE(0x06b9, 0x0120)}, /* Thomson SpeedTouch 120g */ |
647 | {USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */ |
648 | @@ -47,7 +56,9 @@ static struct usb_device_id p54u_table[] __devinitdata = { |
649 | {USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */ |
650 | {USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */ |
651 | {USB_DEVICE(0x0cde, 0x0006)}, /* Medion 40900, Roper Europe */ |
652 | + {USB_DEVICE(0x107b, 0x55f2)}, /* Gateway WGU-210 (Gemtek) */ |
653 | {USB_DEVICE(0x124a, 0x4023)}, /* Shuttle PN15, Airvast WM168g, IOGear GWU513 */ |
654 | + {USB_DEVICE(0x1630, 0x0005)}, /* 2Wire 802.11g USB (v1) / Z-Com */ |
655 | {USB_DEVICE(0x1915, 0x2234)}, /* Linksys WUSB54G OEM */ |
656 | {USB_DEVICE(0x1915, 0x2235)}, /* Linksys WUSB54G Portable OEM */ |
657 | {USB_DEVICE(0x2001, 0x3701)}, /* DLink DWL-G120 Spinnaker */ |
658 | @@ -60,6 +71,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { |
659 | {USB_DEVICE(0x050d, 0x7050)}, /* Belkin F5D7050 ver 1000 */ |
660 | {USB_DEVICE(0x0572, 0x2000)}, /* Cohiba Proto board */ |
661 | {USB_DEVICE(0x0572, 0x2002)}, /* Cohiba Proto board */ |
662 | + {USB_DEVICE(0x06a9, 0x000e)}, /* Westell 802.11g USB (A90-211WG-01) */ |
663 | {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */ |
664 | {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */ |
665 | {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */ |
666 | @@ -80,6 +92,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { |
667 | {USB_DEVICE(0x13B1, 0x000C)}, /* Linksys WUSB54AG */ |
668 | {USB_DEVICE(0x1413, 0x5400)}, /* Telsey 802.11g USB2.0 Adapter */ |
669 | {USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */ |
670 | + {USB_DEVICE(0x1668, 0x1050)}, /* Actiontec 802UIG-1 */ |
671 | {USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */ |
672 | {USB_DEVICE(0x413c, 0x5513)}, /* Dell WLA3310 USB Wireless Adapter */ |
673 | {USB_DEVICE(0x413c, 0x8102)}, /* Spinnaker DUT */ |
674 | @@ -930,8 +943,8 @@ static int __devinit p54u_probe(struct usb_interface *intf, |
675 | #ifdef CONFIG_PM |
676 | /* ISL3887 needs a full reset on resume */ |
677 | udev->reset_resume = 1; |
678 | +#endif /* CONFIG_PM */ |
679 | err = p54u_device_reset(dev); |
680 | -#endif |
681 | |
682 | priv->hw_type = P54U_3887; |
683 | dev->extra_tx_headroom += sizeof(struct lm87_tx_hdr); |
684 | diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c |
685 | index b756e07..e8acb1c 100644 |
686 | --- a/drivers/platform/x86/asus-laptop.c |
687 | +++ b/drivers/platform/x86/asus-laptop.c |
688 | @@ -1065,9 +1065,9 @@ static ssize_t store_gps(struct device *dev, struct device_attribute *attr, |
689 | */ |
690 | static int asus_gps_rfkill_set(void *data, bool blocked) |
691 | { |
692 | - acpi_handle handle = data; |
693 | + struct asus_laptop *asus = data; |
694 | |
695 | - return asus_gps_switch(handle, !blocked); |
696 | + return asus_gps_switch(asus, !blocked); |
697 | } |
698 | |
699 | static const struct rfkill_ops asus_gps_rfkill_ops = { |
700 | @@ -1094,7 +1094,7 @@ static int asus_rfkill_init(struct asus_laptop *asus) |
701 | |
702 | asus->gps_rfkill = rfkill_alloc("asus-gps", &asus->platform_device->dev, |
703 | RFKILL_TYPE_GPS, |
704 | - &asus_gps_rfkill_ops, NULL); |
705 | + &asus_gps_rfkill_ops, asus); |
706 | if (!asus->gps_rfkill) |
707 | return -EINVAL; |
708 | |
709 | diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c |
710 | index b860d65..4cf7ffa 100644 |
711 | --- a/drivers/scsi/gdth.c |
712 | +++ b/drivers/scsi/gdth.c |
713 | @@ -4175,6 +4175,14 @@ static int ioc_general(void __user *arg, char *cmnd) |
714 | ha = gdth_find_ha(gen.ionode); |
715 | if (!ha) |
716 | return -EFAULT; |
717 | + |
718 | + if (gen.data_len > INT_MAX) |
719 | + return -EINVAL; |
720 | + if (gen.sense_len > INT_MAX) |
721 | + return -EINVAL; |
722 | + if (gen.data_len + gen.sense_len > INT_MAX) |
723 | + return -EINVAL; |
724 | + |
725 | if (gen.data_len + gen.sense_len != 0) { |
726 | if (!(buf = gdth_ioctl_alloc(ha, gen.data_len + gen.sense_len, |
727 | FALSE, &paddr))) |
728 | diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c |
729 | index 042153c..ddbade7 100644 |
730 | --- a/drivers/scsi/libsas/sas_ata.c |
731 | +++ b/drivers/scsi/libsas/sas_ata.c |
732 | @@ -347,6 +347,7 @@ static int sas_ata_scr_read(struct ata_link *link, unsigned int sc_reg_in, |
733 | static struct ata_port_operations sas_sata_ops = { |
734 | .phy_reset = sas_ata_phy_reset, |
735 | .post_internal_cmd = sas_ata_post_internal, |
736 | + .qc_defer = ata_std_qc_defer, |
737 | .qc_prep = ata_noop_qc_prep, |
738 | .qc_issue = sas_ata_qc_issue, |
739 | .qc_fill_rtf = sas_ata_qc_fill_rtf, |
740 | diff --git a/drivers/scsi/pmcraid.h b/drivers/scsi/pmcraid.h |
741 | index 6cfa014..dd78f9e 100644 |
742 | --- a/drivers/scsi/pmcraid.h |
743 | +++ b/drivers/scsi/pmcraid.h |
744 | @@ -568,7 +568,6 @@ struct pmcraid_cmd { |
745 | struct pmcraid_control_block *ioa_cb; |
746 | dma_addr_t ioa_cb_bus_addr; |
747 | dma_addr_t dma_handle; |
748 | - u8 *sense_buffer; |
749 | |
750 | /* pointer to mid layer structure of SCSI commands */ |
751 | struct scsi_cmnd *scsi_cmd; |
752 | diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c |
753 | index 5d4a382..449256f 100644 |
754 | --- a/drivers/scsi/qla4xxx/ql4_nx.c |
755 | +++ b/drivers/scsi/qla4xxx/ql4_nx.c |
756 | @@ -5,6 +5,7 @@ |
757 | * See LICENSE.qla4xxx for copyright and licensing details. |
758 | */ |
759 | #include <linux/delay.h> |
760 | +#include <linux/io.h> |
761 | #include <linux/pci.h> |
762 | #include "ql4_def.h" |
763 | #include "ql4_glbl.h" |
764 | diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c |
765 | index ee02d38..71c4cf7 100644 |
766 | --- a/drivers/scsi/scsi_lib.c |
767 | +++ b/drivers/scsi/scsi_lib.c |
768 | @@ -2428,7 +2428,8 @@ scsi_internal_device_unblock(struct scsi_device *sdev) |
769 | sdev->sdev_state = SDEV_RUNNING; |
770 | else if (sdev->sdev_state == SDEV_CREATED_BLOCK) |
771 | sdev->sdev_state = SDEV_CREATED; |
772 | - else |
773 | + else if (sdev->sdev_state != SDEV_CANCEL && |
774 | + sdev->sdev_state != SDEV_OFFLINE) |
775 | return -EINVAL; |
776 | |
777 | spin_lock_irqsave(q->queue_lock, flags); |
778 | diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c |
779 | index c3f6737..7a0ca6f 100644 |
780 | --- a/drivers/scsi/scsi_sysfs.c |
781 | +++ b/drivers/scsi/scsi_sysfs.c |
782 | @@ -962,10 +962,11 @@ static void __scsi_remove_target(struct scsi_target *starget) |
783 | list_for_each_entry(sdev, &shost->__devices, siblings) { |
784 | if (sdev->channel != starget->channel || |
785 | sdev->id != starget->id || |
786 | - sdev->sdev_state == SDEV_DEL) |
787 | + scsi_device_get(sdev)) |
788 | continue; |
789 | spin_unlock_irqrestore(shost->host_lock, flags); |
790 | scsi_remove_device(sdev); |
791 | + scsi_device_put(sdev); |
792 | spin_lock_irqsave(shost->host_lock, flags); |
793 | goto restart; |
794 | } |
795 | diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c |
796 | index ffa0689..0eb0af5 100644 |
797 | --- a/drivers/scsi/sd.c |
798 | +++ b/drivers/scsi/sd.c |
799 | @@ -2252,11 +2252,10 @@ static void sd_probe_async(void *data, async_cookie_t cookie) |
800 | index = sdkp->index; |
801 | dev = &sdp->sdev_gendev; |
802 | |
803 | - if (index < SD_MAX_DISKS) { |
804 | - gd->major = sd_major((index & 0xf0) >> 4); |
805 | - gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00); |
806 | - gd->minors = SD_MINORS; |
807 | - } |
808 | + gd->major = sd_major((index & 0xf0) >> 4); |
809 | + gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00); |
810 | + gd->minors = SD_MINORS; |
811 | + |
812 | gd->fops = &sd_fops; |
813 | gd->private_data = &sdkp->driver; |
814 | gd->queue = sdkp->device->request_queue; |
815 | @@ -2346,6 +2345,12 @@ static int sd_probe(struct device *dev) |
816 | if (error) |
817 | goto out_put; |
818 | |
819 | + if (index >= SD_MAX_DISKS) { |
820 | + error = -ENODEV; |
821 | + sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name space exhausted.\n"); |
822 | + goto out_free_index; |
823 | + } |
824 | + |
825 | error = sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN); |
826 | if (error) |
827 | goto out_free_index; |
828 | diff --git a/drivers/staging/phison/phison.c b/drivers/staging/phison/phison.c |
829 | index 42783d7..6771520 100644 |
830 | --- a/drivers/staging/phison/phison.c |
831 | +++ b/drivers/staging/phison/phison.c |
832 | @@ -62,7 +62,7 @@ static int phison_init_one(struct pci_dev *pdev, const struct pci_device_id *id) |
833 | }; |
834 | const struct ata_port_info *ppi[] = { &info, NULL }; |
835 | |
836 | - ret = ata_pci_sff_init_one(pdev, ppi, &phison_sht, NULL, 0); |
837 | + ret = ata_pci_bmdma_init_one(pdev, ppi, &phison_sht, NULL, 0); |
838 | |
839 | dev_dbg(&pdev->dev, "phison_init_one(), ret = %x\n", ret); |
840 | |
841 | diff --git a/drivers/staging/usbip/usbip_event.c b/drivers/staging/usbip/usbip_event.c |
842 | index a2566f1..af3832b 100644 |
843 | --- a/drivers/staging/usbip/usbip_event.c |
844 | +++ b/drivers/staging/usbip/usbip_event.c |
845 | @@ -38,21 +38,13 @@ static int event_handler(struct usbip_device *ud) |
846 | ud->eh_ops.shutdown(ud); |
847 | |
848 | ud->event &= ~USBIP_EH_SHUTDOWN; |
849 | - |
850 | - break; |
851 | } |
852 | |
853 | - /* Stop the error handler. */ |
854 | - if (ud->event & USBIP_EH_BYE) |
855 | - return -1; |
856 | - |
857 | /* Reset the device. */ |
858 | if (ud->event & USBIP_EH_RESET) { |
859 | ud->eh_ops.reset(ud); |
860 | |
861 | ud->event &= ~USBIP_EH_RESET; |
862 | - |
863 | - break; |
864 | } |
865 | |
866 | /* Mark the device as unusable. */ |
867 | @@ -60,13 +52,11 @@ static int event_handler(struct usbip_device *ud) |
868 | ud->eh_ops.unusable(ud); |
869 | |
870 | ud->event &= ~USBIP_EH_UNUSABLE; |
871 | - |
872 | - break; |
873 | } |
874 | |
875 | - /* NOTREACHED */ |
876 | - printk(KERN_ERR "%s: unknown event\n", __func__); |
877 | - return -1; |
878 | + /* Stop the error handler. */ |
879 | + if (ud->event & USBIP_EH_BYE) |
880 | + return -1; |
881 | } |
882 | |
883 | return 0; |
884 | diff --git a/drivers/staging/usbip/vhci_hcd.c b/drivers/staging/usbip/vhci_hcd.c |
885 | index 0574d84..832608d 100644 |
886 | --- a/drivers/staging/usbip/vhci_hcd.c |
887 | +++ b/drivers/staging/usbip/vhci_hcd.c |
888 | @@ -164,6 +164,8 @@ void rh_port_disconnect(int rhport) |
889 | * spin_unlock(&vdev->ud.lock); */ |
890 | |
891 | spin_unlock_irqrestore(&the_controller->lock, flags); |
892 | + |
893 | + usb_hcd_poll_rh_status(vhci_to_hcd(the_controller)); |
894 | } |
895 | |
896 | |
897 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c |
898 | index 84c18971..566c183 100644 |
899 | --- a/drivers/usb/core/hub.c |
900 | +++ b/drivers/usb/core/hub.c |
901 | @@ -2860,13 +2860,16 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1, |
902 | else |
903 | i = udev->descriptor.bMaxPacketSize0; |
904 | if (le16_to_cpu(udev->ep0.desc.wMaxPacketSize) != i) { |
905 | - if (udev->speed != USB_SPEED_FULL || |
906 | + if (udev->speed == USB_SPEED_LOW || |
907 | !(i == 8 || i == 16 || i == 32 || i == 64)) { |
908 | - dev_err(&udev->dev, "ep0 maxpacket = %d\n", i); |
909 | + dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i); |
910 | retval = -EMSGSIZE; |
911 | goto fail; |
912 | } |
913 | - dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i); |
914 | + if (udev->speed == USB_SPEED_FULL) |
915 | + dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i); |
916 | + else |
917 | + dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i); |
918 | udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i); |
919 | usb_ep0_reinit(udev); |
920 | } |
921 | diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c |
922 | index 9f0ce7d..d6e3e41 100644 |
923 | --- a/drivers/usb/core/message.c |
924 | +++ b/drivers/usb/core/message.c |
925 | @@ -1140,13 +1140,6 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0) |
926 | { |
927 | int i; |
928 | |
929 | - dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__, |
930 | - skip_ep0 ? "non-ep0" : "all"); |
931 | - for (i = skip_ep0; i < 16; ++i) { |
932 | - usb_disable_endpoint(dev, i, true); |
933 | - usb_disable_endpoint(dev, i + USB_DIR_IN, true); |
934 | - } |
935 | - |
936 | /* getting rid of interfaces will disconnect |
937 | * any drivers bound to them (a key side effect) |
938 | */ |
939 | @@ -1176,6 +1169,13 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0) |
940 | if (dev->state == USB_STATE_CONFIGURED) |
941 | usb_set_device_state(dev, USB_STATE_ADDRESS); |
942 | } |
943 | + |
944 | + dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__, |
945 | + skip_ep0 ? "non-ep0" : "all"); |
946 | + for (i = skip_ep0; i < 16; ++i) { |
947 | + usb_disable_endpoint(dev, i, true); |
948 | + usb_disable_endpoint(dev, i + USB_DIR_IN, true); |
949 | + } |
950 | } |
951 | |
952 | /** |
953 | diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c |
954 | index d623c7b..959f062 100644 |
955 | --- a/drivers/usb/gadget/atmel_usba_udc.c |
956 | +++ b/drivers/usb/gadget/atmel_usba_udc.c |
957 | @@ -2014,6 +2014,9 @@ static int __init usba_udc_probe(struct platform_device *pdev) |
958 | } else { |
959 | disable_irq(gpio_to_irq(udc->vbus_pin)); |
960 | } |
961 | + } else { |
962 | + /* gpio_request fail so use -EINVAL for gpio_is_valid */ |
963 | + ubc->vbus_pin = -EINVAL; |
964 | } |
965 | } |
966 | |
967 | diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c |
968 | index 1160c55..9a98c38 100644 |
969 | --- a/drivers/usb/gadget/composite.c |
970 | +++ b/drivers/usb/gadget/composite.c |
971 | @@ -901,7 +901,8 @@ unknown: |
972 | */ |
973 | switch (ctrl->bRequestType & USB_RECIP_MASK) { |
974 | case USB_RECIP_INTERFACE: |
975 | - f = cdev->config->interface[intf]; |
976 | + if (cdev->config) |
977 | + f = cdev->config->interface[intf]; |
978 | break; |
979 | |
980 | case USB_RECIP_ENDPOINT: |
981 | diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c |
982 | index d47a123..bd6226c 100644 |
983 | --- a/drivers/usb/gadget/f_acm.c |
984 | +++ b/drivers/usb/gadget/f_acm.c |
985 | @@ -111,7 +111,7 @@ acm_iad_descriptor = { |
986 | .bInterfaceCount = 2, // control + data |
987 | .bFunctionClass = USB_CLASS_COMM, |
988 | .bFunctionSubClass = USB_CDC_SUBCLASS_ACM, |
989 | - .bFunctionProtocol = USB_CDC_PROTO_NONE, |
990 | + .bFunctionProtocol = USB_CDC_ACM_PROTO_AT_V25TER, |
991 | /* .iFunction = DYNAMIC */ |
992 | }; |
993 | |
994 | diff --git a/drivers/usb/gadget/g_ffs.c b/drivers/usb/gadget/g_ffs.c |
995 | index a9474f8..3c2f0a4 100644 |
996 | --- a/drivers/usb/gadget/g_ffs.c |
997 | +++ b/drivers/usb/gadget/g_ffs.c |
998 | @@ -53,8 +53,8 @@ MODULE_AUTHOR("Michal Nazarewicz"); |
999 | MODULE_LICENSE("GPL"); |
1000 | |
1001 | |
1002 | -static unsigned short gfs_vendor_id = 0x0525; /* XXX NetChip */ |
1003 | -static unsigned short gfs_product_id = 0xa4ac; /* XXX */ |
1004 | +static unsigned short gfs_vendor_id = 0x1d6b; /* Linux Foundation */ |
1005 | +static unsigned short gfs_product_id = 0x0105; /* FunctionFS Gadget */ |
1006 | |
1007 | static struct usb_device_descriptor gfs_dev_desc = { |
1008 | .bLength = sizeof gfs_dev_desc, |
1009 | diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c |
1010 | index 795d762..36d67a3 100644 |
1011 | --- a/drivers/usb/gadget/multi.c |
1012 | +++ b/drivers/usb/gadget/multi.c |
1013 | @@ -74,8 +74,8 @@ MODULE_LICENSE("GPL"); |
1014 | |
1015 | /***************************** Device Descriptor ****************************/ |
1016 | |
1017 | -#define MULTI_VENDOR_NUM 0x0525 /* XXX NetChip */ |
1018 | -#define MULTI_PRODUCT_NUM 0xa4ab /* XXX */ |
1019 | +#define MULTI_VENDOR_NUM 0x1d6b /* Linux Foundation */ |
1020 | +#define MULTI_PRODUCT_NUM 0x0104 /* Multifunction Composite Gadget */ |
1021 | |
1022 | |
1023 | enum { |
1024 | diff --git a/drivers/usb/host/r8a66597.h b/drivers/usb/host/r8a66597.h |
1025 | index 95d0f5a..25563e9 100644 |
1026 | --- a/drivers/usb/host/r8a66597.h |
1027 | +++ b/drivers/usb/host/r8a66597.h |
1028 | @@ -227,7 +227,7 @@ static inline void r8a66597_write_fifo(struct r8a66597 *r8a66597, |
1029 | int odd = len & 0x0001; |
1030 | |
1031 | len = len / 2; |
1032 | - ioread16_rep(fifoaddr, buf, len); |
1033 | + iowrite16_rep(fifoaddr, buf, len); |
1034 | if (unlikely(odd)) { |
1035 | buf = &buf[len]; |
1036 | iowrite8((unsigned char)*buf, fifoaddr); |
1037 | diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c |
1038 | index b611420..611a9d2 100644 |
1039 | --- a/drivers/usb/musb/blackfin.c |
1040 | +++ b/drivers/usb/musb/blackfin.c |
1041 | @@ -342,8 +342,10 @@ int __init musb_platform_init(struct musb *musb, void *board_data) |
1042 | |
1043 | usb_nop_xceiv_register(); |
1044 | musb->xceiv = otg_get_transceiver(); |
1045 | - if (!musb->xceiv) |
1046 | + if (!musb->xceiv) { |
1047 | + gpio_free(musb->config->gpio_vrsel); |
1048 | return -ENODEV; |
1049 | + } |
1050 | |
1051 | if (ANOMALY_05000346) { |
1052 | bfin_write_USB_APHY_CALIB(ANOMALY_05000346_value); |
1053 | @@ -394,8 +396,9 @@ int __init musb_platform_init(struct musb *musb, void *board_data) |
1054 | |
1055 | int musb_platform_exit(struct musb *musb) |
1056 | { |
1057 | - |
1058 | gpio_free(musb->config->gpio_vrsel); |
1059 | |
1060 | + otg_put_transceiver(musb->xceiv); |
1061 | + usb_nop_xceiv_unregister(); |
1062 | return 0; |
1063 | } |
1064 | diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c |
1065 | index 5762436..6e67629 100644 |
1066 | --- a/drivers/usb/musb/davinci.c |
1067 | +++ b/drivers/usb/musb/davinci.c |
1068 | @@ -446,6 +446,7 @@ int __init musb_platform_init(struct musb *musb, void *board_data) |
1069 | fail: |
1070 | clk_disable(musb->clock); |
1071 | |
1072 | + otg_put_transceiver(musb->xceiv); |
1073 | usb_nop_xceiv_unregister(); |
1074 | return -ENODEV; |
1075 | } |
1076 | @@ -496,6 +497,7 @@ int musb_platform_exit(struct musb *musb) |
1077 | |
1078 | clk_disable(musb->clock); |
1079 | |
1080 | + otg_put_transceiver(musb->xceiv); |
1081 | usb_nop_xceiv_unregister(); |
1082 | |
1083 | return 0; |
1084 | diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c |
1085 | index 540c766..513d6bd 100644 |
1086 | --- a/drivers/usb/musb/musb_core.c |
1087 | +++ b/drivers/usb/musb/musb_core.c |
1088 | @@ -1921,10 +1921,6 @@ static void musb_free(struct musb *musb) |
1089 | dma_controller_destroy(c); |
1090 | } |
1091 | |
1092 | -#ifdef CONFIG_USB_MUSB_OTG |
1093 | - put_device(musb->xceiv->dev); |
1094 | -#endif |
1095 | - |
1096 | #ifdef CONFIG_USB_MUSB_HDRC_HCD |
1097 | usb_put_hcd(musb_to_hcd(musb)); |
1098 | #else |
1099 | diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c |
1100 | index 2111a24..ed618bd 100644 |
1101 | --- a/drivers/usb/musb/omap2430.c |
1102 | +++ b/drivers/usb/musb/omap2430.c |
1103 | @@ -320,5 +320,6 @@ int musb_platform_exit(struct musb *musb) |
1104 | |
1105 | musb_platform_suspend(musb); |
1106 | |
1107 | + otg_put_transceiver(musb->xceiv); |
1108 | return 0; |
1109 | } |
1110 | diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c |
1111 | index 3c48e77..bde40ef 100644 |
1112 | --- a/drivers/usb/musb/tusb6010.c |
1113 | +++ b/drivers/usb/musb/tusb6010.c |
1114 | @@ -1152,6 +1152,8 @@ done: |
1115 | if (ret < 0) { |
1116 | if (sync) |
1117 | iounmap(sync); |
1118 | + |
1119 | + otg_put_transceiver(musb->xceiv); |
1120 | usb_nop_xceiv_unregister(); |
1121 | } |
1122 | return ret; |
1123 | @@ -1166,6 +1168,8 @@ int musb_platform_exit(struct musb *musb) |
1124 | musb->board_set_power(0); |
1125 | |
1126 | iounmap(musb->sync_va); |
1127 | + |
1128 | + otg_put_transceiver(musb->xceiv); |
1129 | usb_nop_xceiv_unregister(); |
1130 | return 0; |
1131 | } |
1132 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c |
1133 | index 4f1744c..8d7731d 100644 |
1134 | --- a/drivers/usb/serial/cp210x.c |
1135 | +++ b/drivers/usb/serial/cp210x.c |
1136 | @@ -54,6 +54,7 @@ static int cp210x_carrier_raised(struct usb_serial_port *p); |
1137 | static int debug; |
1138 | |
1139 | static const struct usb_device_id id_table[] = { |
1140 | + { USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */ |
1141 | { USB_DEVICE(0x0471, 0x066A) }, /* AKTAKOM ACE-1001 cable */ |
1142 | { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ |
1143 | { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ |
1144 | @@ -132,6 +133,7 @@ static const struct usb_device_id id_table[] = { |
1145 | { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */ |
1146 | { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ |
1147 | { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ |
1148 | + { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ |
1149 | { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */ |
1150 | { } /* Terminating Entry */ |
1151 | }; |
1152 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c |
1153 | index 97cc87d..01ba740 100644 |
1154 | --- a/drivers/usb/serial/ftdi_sio.c |
1155 | +++ b/drivers/usb/serial/ftdi_sio.c |
1156 | @@ -177,6 +177,7 @@ static struct usb_device_id id_table_combined [] = { |
1157 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_SNIFFER_PID) }, |
1158 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) }, |
1159 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) }, |
1160 | + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) }, |
1161 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, |
1162 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, |
1163 | { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) }, |
1164 | @@ -674,7 +675,6 @@ static struct usb_device_id id_table_combined [] = { |
1165 | { USB_DEVICE(FTDI_VID, FTDI_RRCIRKITS_LOCOBUFFER_PID) }, |
1166 | { USB_DEVICE(FTDI_VID, FTDI_ASK_RDR400_PID) }, |
1167 | { USB_DEVICE(ICOM_ID1_VID, ICOM_ID1_PID) }, |
1168 | - { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) }, |
1169 | { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) }, |
1170 | { USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) }, |
1171 | { USB_DEVICE(FTDI_VID, FTDI_THORLABS_PID) }, |
1172 | @@ -715,8 +715,37 @@ static struct usb_device_id id_table_combined [] = { |
1173 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
1174 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, |
1175 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, |
1176 | + |
1177 | + /* Papouch devices based on FTDI chip */ |
1178 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_PID) }, |
1179 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_PID) }, |
1180 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_PID) }, |
1181 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_2_PID) }, |
1182 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_2_PID) }, |
1183 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_2_PID) }, |
1184 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485S_PID) }, |
1185 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485C_PID) }, |
1186 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_LEC_PID) }, |
1187 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB232_PID) }, |
1188 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) }, |
1189 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_IRAMP_PID) }, |
1190 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK5_PID) }, |
1191 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO8x8_PID) }, |
1192 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, |
1193 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x2_PID) }, |
1194 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO10x1_PID) }, |
1195 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO30x3_PID) }, |
1196 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO60x3_PID) }, |
1197 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x16_PID) }, |
1198 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO3x32_PID) }, |
1199 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK6_PID) }, |
1200 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_UPSUSB_PID) }, |
1201 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_MU_PID) }, |
1202 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SIMUKEY_PID) }, |
1203 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AD4USB_PID) }, |
1204 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMUX_PID) }, |
1205 | + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMSR_PID) }, |
1206 | + |
1207 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, |
1208 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, |
1209 | { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, |
1210 | @@ -751,6 +780,7 @@ static struct usb_device_id id_table_combined [] = { |
1211 | { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID), |
1212 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
1213 | { USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) }, |
1214 | + { USB_DEVICE(FTDI_VID, ACCESIO_COM4SM_PID) }, |
1215 | { USB_DEVICE(IONICS_VID, IONICS_PLUGCOMPUTER_PID), |
1216 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
1217 | { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_24_MASTER_WING_PID) }, |
1218 | @@ -761,6 +791,9 @@ static struct usb_device_id id_table_combined [] = { |
1219 | { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MAXI_WING_PID) }, |
1220 | { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MEDIA_WING_PID) }, |
1221 | { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_WING_PID) }, |
1222 | + { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LOGBOOKML_PID) }, |
1223 | + { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) }, |
1224 | + { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) }, |
1225 | { }, /* Optional parameter entry */ |
1226 | { } /* Terminating entry */ |
1227 | }; |
1228 | @@ -2028,8 +2061,6 @@ static void ftdi_set_termios(struct tty_struct *tty, |
1229 | "urb failed to set to rts/cts flow control\n"); |
1230 | } |
1231 | |
1232 | - /* raise DTR/RTS */ |
1233 | - set_mctrl(port, TIOCM_DTR | TIOCM_RTS); |
1234 | } else { |
1235 | /* |
1236 | * Xon/Xoff code |
1237 | @@ -2077,8 +2108,6 @@ static void ftdi_set_termios(struct tty_struct *tty, |
1238 | } |
1239 | } |
1240 | |
1241 | - /* lower DTR/RTS */ |
1242 | - clear_mctrl(port, TIOCM_DTR | TIOCM_RTS); |
1243 | } |
1244 | return; |
1245 | } |
1246 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h |
1247 | index 15a4583..cf1aea1b 100644 |
1248 | --- a/drivers/usb/serial/ftdi_sio_ids.h |
1249 | +++ b/drivers/usb/serial/ftdi_sio_ids.h |
1250 | @@ -61,6 +61,7 @@ |
1251 | #define FTDI_OPENDCC_SNIFFER_PID 0xBFD9 |
1252 | #define FTDI_OPENDCC_THROTTLE_PID 0xBFDA |
1253 | #define FTDI_OPENDCC_GATEWAY_PID 0xBFDB |
1254 | +#define FTDI_OPENDCC_GBM_PID 0xBFDC |
1255 | |
1256 | /* |
1257 | * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com) |
1258 | @@ -1022,9 +1023,34 @@ |
1259 | */ |
1260 | |
1261 | #define PAPOUCH_VID 0x5050 /* Vendor ID */ |
1262 | +#define PAPOUCH_SB485_PID 0x0100 /* Papouch SB485 USB-485/422 Converter */ |
1263 | +#define PAPOUCH_AP485_PID 0x0101 /* AP485 USB-RS485 Converter */ |
1264 | +#define PAPOUCH_SB422_PID 0x0102 /* Papouch SB422 USB-RS422 Converter */ |
1265 | +#define PAPOUCH_SB485_2_PID 0x0103 /* Papouch SB485 USB-485/422 Converter */ |
1266 | +#define PAPOUCH_AP485_2_PID 0x0104 /* AP485 USB-RS485 Converter */ |
1267 | +#define PAPOUCH_SB422_2_PID 0x0105 /* Papouch SB422 USB-RS422 Converter */ |
1268 | +#define PAPOUCH_SB485S_PID 0x0106 /* Papouch SB485S USB-485/422 Converter */ |
1269 | +#define PAPOUCH_SB485C_PID 0x0107 /* Papouch SB485C USB-485/422 Converter */ |
1270 | +#define PAPOUCH_LEC_PID 0x0300 /* LEC USB Converter */ |
1271 | +#define PAPOUCH_SB232_PID 0x0301 /* Papouch SB232 USB-RS232 Converter */ |
1272 | #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ |
1273 | -#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */ |
1274 | +#define PAPOUCH_IRAMP_PID 0x0500 /* Papouch IRAmp Duplex */ |
1275 | +#define PAPOUCH_DRAK5_PID 0x0700 /* Papouch DRAK5 */ |
1276 | +#define PAPOUCH_QUIDO8x8_PID 0x0800 /* Papouch Quido 8/8 Module */ |
1277 | +#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Papouch Quido 4/4 Module */ |
1278 | +#define PAPOUCH_QUIDO2x2_PID 0x0a00 /* Papouch Quido 2/2 Module */ |
1279 | +#define PAPOUCH_QUIDO10x1_PID 0x0b00 /* Papouch Quido 10/1 Module */ |
1280 | +#define PAPOUCH_QUIDO30x3_PID 0x0c00 /* Papouch Quido 30/3 Module */ |
1281 | +#define PAPOUCH_QUIDO60x3_PID 0x0d00 /* Papouch Quido 60(100)/3 Module */ |
1282 | +#define PAPOUCH_QUIDO2x16_PID 0x0e00 /* Papouch Quido 2/16 Module */ |
1283 | +#define PAPOUCH_QUIDO3x32_PID 0x0f00 /* Papouch Quido 3/32 Module */ |
1284 | +#define PAPOUCH_DRAK6_PID 0x1000 /* Papouch DRAK6 */ |
1285 | +#define PAPOUCH_UPSUSB_PID 0x8000 /* Papouch UPS-USB adapter */ |
1286 | +#define PAPOUCH_MU_PID 0x8001 /* MU controller */ |
1287 | +#define PAPOUCH_SIMUKEY_PID 0x8002 /* Papouch SimuKey */ |
1288 | #define PAPOUCH_AD4USB_PID 0x8003 /* AD4USB Measurement Module */ |
1289 | +#define PAPOUCH_GMUX_PID 0x8004 /* Papouch GOLIATH MUX */ |
1290 | +#define PAPOUCH_GMSR_PID 0x8005 /* Papouch GOLIATH MSR */ |
1291 | |
1292 | /* |
1293 | * Marvell SheevaPlug |
1294 | @@ -1063,3 +1089,14 @@ |
1295 | * Submitted by John G. Rogers |
1296 | */ |
1297 | #define SEGWAY_RMP200_PID 0xe729 |
1298 | + |
1299 | + |
1300 | +/* |
1301 | + * Accesio USB Data Acquisition products (http://www.accesio.com/) |
1302 | + */ |
1303 | +#define ACCESIO_COM4SM_PID 0xD578 |
1304 | + |
1305 | +/* www.sciencescope.co.uk educational dataloggers */ |
1306 | +#define FTDI_SCIENCESCOPE_LOGBOOKML_PID 0xFF18 |
1307 | +#define FTDI_SCIENCESCOPE_LS_LOGBOOK_PID 0xFF1C |
1308 | +#define FTDI_SCIENCESCOPE_HS_LOGBOOK_PID 0xFF1D |
1309 | diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c |
1310 | index 7aa01b9..2849f8c 100644 |
1311 | --- a/drivers/usb/serial/mct_u232.c |
1312 | +++ b/drivers/usb/serial/mct_u232.c |
1313 | @@ -549,9 +549,12 @@ static void mct_u232_close(struct usb_serial_port *port) |
1314 | { |
1315 | dbg("%s port %d", __func__, port->number); |
1316 | |
1317 | - usb_serial_generic_close(port); |
1318 | - if (port->serial->dev) |
1319 | + if (port->serial->dev) { |
1320 | + /* shutdown our urbs */ |
1321 | + usb_kill_urb(port->write_urb); |
1322 | + usb_kill_urb(port->read_urb); |
1323 | usb_kill_urb(port->interrupt_in_urb); |
1324 | + } |
1325 | } /* mct_u232_close */ |
1326 | |
1327 | |
1328 | diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c |
1329 | index ed01f3b..9ff19c8 100644 |
1330 | --- a/drivers/usb/serial/opticon.c |
1331 | +++ b/drivers/usb/serial/opticon.c |
1332 | @@ -96,8 +96,8 @@ static void opticon_bulk_callback(struct urb *urb) |
1333 | /* real data, send it to the tty layer */ |
1334 | tty = tty_port_tty_get(&port->port); |
1335 | if (tty) { |
1336 | - tty_insert_flip_string(tty, data, |
1337 | - data_length); |
1338 | + tty_insert_flip_string(tty, data + 2, |
1339 | + data_length); |
1340 | tty_flip_buffer_push(tty); |
1341 | tty_kref_put(tty); |
1342 | } |
1343 | @@ -130,7 +130,7 @@ exit: |
1344 | priv->bulk_address), |
1345 | priv->bulk_in_buffer, priv->buffer_size, |
1346 | opticon_bulk_callback, priv); |
1347 | - result = usb_submit_urb(port->read_urb, GFP_ATOMIC); |
1348 | + result = usb_submit_urb(priv->bulk_read_urb, GFP_ATOMIC); |
1349 | if (result) |
1350 | dev_err(&port->dev, |
1351 | "%s - failed resubmitting read urb, error %d\n", |
1352 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c |
1353 | index c46911a..51de0dd 100644 |
1354 | --- a/drivers/usb/serial/option.c |
1355 | +++ b/drivers/usb/serial/option.c |
1356 | @@ -622,6 +622,7 @@ static const struct usb_device_id option_ids[] = { |
1357 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0011, 0xff, 0xff, 0xff) }, |
1358 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0012, 0xff, 0xff, 0xff) }, |
1359 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0013, 0xff, 0xff, 0xff) }, |
1360 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, |
1361 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628, 0xff, 0xff, 0xff) }, |
1362 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0016, 0xff, 0xff, 0xff) }, |
1363 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff) }, |
1364 | @@ -633,38 +634,52 @@ static const struct usb_device_id option_ids[] = { |
1365 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0023, 0xff, 0xff, 0xff) }, |
1366 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0024, 0xff, 0xff, 0xff) }, |
1367 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0025, 0xff, 0xff, 0xff) }, |
1368 | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0026, 0xff, 0xff, 0xff) }, |
1369 | + /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0026, 0xff, 0xff, 0xff) }, */ |
1370 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0028, 0xff, 0xff, 0xff) }, |
1371 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0029, 0xff, 0xff, 0xff) }, |
1372 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0030, 0xff, 0xff, 0xff) }, |
1373 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626, 0xff, 0xff, 0xff) }, |
1374 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0032, 0xff, 0xff, 0xff) }, |
1375 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0033, 0xff, 0xff, 0xff) }, |
1376 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0034, 0xff, 0xff, 0xff) }, |
1377 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0037, 0xff, 0xff, 0xff) }, |
1378 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0038, 0xff, 0xff, 0xff) }, |
1379 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0039, 0xff, 0xff, 0xff) }, |
1380 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0040, 0xff, 0xff, 0xff) }, |
1381 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0042, 0xff, 0xff, 0xff) }, |
1382 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0043, 0xff, 0xff, 0xff) }, |
1383 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0044, 0xff, 0xff, 0xff) }, |
1384 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0048, 0xff, 0xff, 0xff) }, |
1385 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0049, 0xff, 0xff, 0xff) }, |
1386 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0050, 0xff, 0xff, 0xff) }, |
1387 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0051, 0xff, 0xff, 0xff) }, |
1388 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0052, 0xff, 0xff, 0xff) }, |
1389 | + /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0053, 0xff, 0xff, 0xff) }, */ |
1390 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0054, 0xff, 0xff, 0xff) }, |
1391 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0055, 0xff, 0xff, 0xff) }, |
1392 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0056, 0xff, 0xff, 0xff) }, |
1393 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0057, 0xff, 0xff, 0xff) }, |
1394 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0058, 0xff, 0xff, 0xff) }, |
1395 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) }, |
1396 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0061, 0xff, 0xff, 0xff) }, |
1397 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0062, 0xff, 0xff, 0xff) }, |
1398 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0063, 0xff, 0xff, 0xff) }, |
1399 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0064, 0xff, 0xff, 0xff) }, |
1400 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0065, 0xff, 0xff, 0xff) }, |
1401 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0066, 0xff, 0xff, 0xff) }, |
1402 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0067, 0xff, 0xff, 0xff) }, |
1403 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0069, 0xff, 0xff, 0xff) }, |
1404 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0070, 0xff, 0xff, 0xff) }, |
1405 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0076, 0xff, 0xff, 0xff) }, |
1406 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0077, 0xff, 0xff, 0xff) }, |
1407 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0078, 0xff, 0xff, 0xff) }, |
1408 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0079, 0xff, 0xff, 0xff) }, |
1409 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0082, 0xff, 0xff, 0xff) }, |
1410 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0083, 0xff, 0xff, 0xff) }, |
1411 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) }, |
1412 | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 0xff, 0xff) }, |
1413 | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) }, |
1414 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0087, 0xff, 0xff, 0xff) }, |
1415 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff) }, |
1416 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0105, 0xff, 0xff, 0xff) }, |
1417 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0106, 0xff, 0xff, 0xff) }, |
1418 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0108, 0xff, 0xff, 0xff) }, |
1419 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0113, 0xff, 0xff, 0xff) }, |
1420 | @@ -880,6 +895,8 @@ static const struct usb_device_id option_ids[] = { |
1421 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0073, 0xff, 0xff, 0xff) }, |
1422 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0130, 0xff, 0xff, 0xff) }, |
1423 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0141, 0xff, 0xff, 0xff) }, |
1424 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 0xff, 0xff) }, |
1425 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) }, |
1426 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) }, |
1427 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) }, |
1428 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) }, |
1429 | diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c |
1430 | index eb76aae..15a5d89 100644 |
1431 | --- a/drivers/usb/serial/visor.c |
1432 | +++ b/drivers/usb/serial/visor.c |
1433 | @@ -606,6 +606,10 @@ static int treo_attach(struct usb_serial *serial) |
1434 | |
1435 | static int clie_5_attach(struct usb_serial *serial) |
1436 | { |
1437 | + struct usb_serial_port *port; |
1438 | + unsigned int pipe; |
1439 | + int j; |
1440 | + |
1441 | dbg("%s", __func__); |
1442 | |
1443 | /* TH55 registers 2 ports. |
1444 | @@ -621,9 +625,14 @@ static int clie_5_attach(struct usb_serial *serial) |
1445 | return -1; |
1446 | |
1447 | /* port 0 now uses the modified endpoint Address */ |
1448 | - serial->port[0]->bulk_out_endpointAddress = |
1449 | + port = serial->port[0]; |
1450 | + port->bulk_out_endpointAddress = |
1451 | serial->port[1]->bulk_out_endpointAddress; |
1452 | |
1453 | + pipe = usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress); |
1454 | + for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) |
1455 | + port->write_urbs[j]->pipe = pipe; |
1456 | + |
1457 | return 0; |
1458 | } |
1459 | |
1460 | diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h |
1461 | index 1d60c65..f110e0e 100644 |
1462 | --- a/fs/cifs/cifsproto.h |
1463 | +++ b/fs/cifs/cifsproto.h |
1464 | @@ -107,7 +107,8 @@ extern struct timespec cnvrtDosUnixTm(__le16 le_date, __le16 le_time, |
1465 | |
1466 | extern struct cifsFileInfo *cifs_new_fileinfo(struct inode *newinode, |
1467 | __u16 fileHandle, struct file *file, |
1468 | - struct vfsmount *mnt, unsigned int oflags); |
1469 | + struct vfsmount *mnt, unsigned int oflags, |
1470 | + __u32 oplock); |
1471 | extern int cifs_posix_open(char *full_path, struct inode **pinode, |
1472 | struct super_block *sb, |
1473 | int mode, int oflags, |
1474 | diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c |
1475 | index f9ed075..0f947bf 100644 |
1476 | --- a/fs/cifs/dir.c |
1477 | +++ b/fs/cifs/dir.c |
1478 | @@ -132,9 +132,9 @@ cifs_bp_rename_retry: |
1479 | |
1480 | struct cifsFileInfo * |
1481 | cifs_new_fileinfo(struct inode *newinode, __u16 fileHandle, |
1482 | - struct file *file, struct vfsmount *mnt, unsigned int oflags) |
1483 | + struct file *file, struct vfsmount *mnt, unsigned int oflags, |
1484 | + __u32 oplock) |
1485 | { |
1486 | - int oplock = 0; |
1487 | struct cifsFileInfo *pCifsFile; |
1488 | struct cifsInodeInfo *pCifsInode; |
1489 | struct cifs_sb_info *cifs_sb = CIFS_SB(mnt->mnt_sb); |
1490 | @@ -143,9 +143,6 @@ cifs_new_fileinfo(struct inode *newinode, __u16 fileHandle, |
1491 | if (pCifsFile == NULL) |
1492 | return pCifsFile; |
1493 | |
1494 | - if (oplockEnabled) |
1495 | - oplock = REQ_OPLOCK; |
1496 | - |
1497 | pCifsFile->netfid = fileHandle; |
1498 | pCifsFile->pid = current->tgid; |
1499 | pCifsFile->pInode = igrab(newinode); |
1500 | @@ -468,7 +465,7 @@ cifs_create_set_dentry: |
1501 | } |
1502 | |
1503 | pfile_info = cifs_new_fileinfo(newinode, fileHandle, filp, |
1504 | - nd->path.mnt, oflags); |
1505 | + nd->path.mnt, oflags, oplock); |
1506 | if (pfile_info == NULL) { |
1507 | fput(filp); |
1508 | CIFSSMBClose(xid, tcon, fileHandle); |
1509 | @@ -729,7 +726,8 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, |
1510 | |
1511 | cfile = cifs_new_fileinfo(newInode, fileHandle, filp, |
1512 | nd->path.mnt, |
1513 | - nd->intent.open.flags); |
1514 | + nd->intent.open.flags, |
1515 | + oplock); |
1516 | if (cfile == NULL) { |
1517 | fput(filp); |
1518 | CIFSSMBClose(xid, pTcon, fileHandle); |
1519 | diff --git a/fs/cifs/file.c b/fs/cifs/file.c |
1520 | index de748c6..681761c 100644 |
1521 | --- a/fs/cifs/file.c |
1522 | +++ b/fs/cifs/file.c |
1523 | @@ -277,7 +277,7 @@ int cifs_open(struct inode *inode, struct file *file) |
1524 | |
1525 | pCifsFile = cifs_new_fileinfo(inode, netfid, file, |
1526 | file->f_path.mnt, |
1527 | - oflags); |
1528 | + oflags, oplock); |
1529 | if (pCifsFile == NULL) { |
1530 | CIFSSMBClose(xid, tcon, netfid); |
1531 | rc = -ENOMEM; |
1532 | @@ -370,7 +370,7 @@ int cifs_open(struct inode *inode, struct file *file) |
1533 | goto out; |
1534 | |
1535 | pCifsFile = cifs_new_fileinfo(inode, netfid, file, file->f_path.mnt, |
1536 | - file->f_flags); |
1537 | + file->f_flags, oplock); |
1538 | if (pCifsFile == NULL) { |
1539 | rc = -ENOMEM; |
1540 | goto out; |
1541 | diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c |
1542 | index 064a809..84d3c8b 100644 |
1543 | --- a/fs/nfs/direct.c |
1544 | +++ b/fs/nfs/direct.c |
1545 | @@ -873,7 +873,7 @@ static ssize_t nfs_direct_write(struct kiocb *iocb, const struct iovec *iov, |
1546 | dreq->inode = inode; |
1547 | dreq->ctx = get_nfs_open_context(nfs_file_open_context(iocb->ki_filp)); |
1548 | dreq->l_ctx = nfs_get_lock_context(dreq->ctx); |
1549 | - if (dreq->l_ctx != NULL) |
1550 | + if (dreq->l_ctx == NULL) |
1551 | goto out_release; |
1552 | if (!is_sync_kiocb(iocb)) |
1553 | dreq->iocb = iocb; |
1554 | diff --git a/fs/pipe.c b/fs/pipe.c |
1555 | index 279eef9..37eb1eb 100644 |
1556 | --- a/fs/pipe.c |
1557 | +++ b/fs/pipe.c |
1558 | @@ -382,7 +382,7 @@ pipe_read(struct kiocb *iocb, const struct iovec *_iov, |
1559 | error = ops->confirm(pipe, buf); |
1560 | if (error) { |
1561 | if (!ret) |
1562 | - error = ret; |
1563 | + ret = error; |
1564 | break; |
1565 | } |
1566 | |
1567 | diff --git a/kernel/futex.c b/kernel/futex.c |
1568 | index 6a3a5fa..e328f57 100644 |
1569 | --- a/kernel/futex.c |
1570 | +++ b/kernel/futex.c |
1571 | @@ -1363,7 +1363,6 @@ static inline struct futex_hash_bucket *queue_lock(struct futex_q *q) |
1572 | { |
1573 | struct futex_hash_bucket *hb; |
1574 | |
1575 | - get_futex_key_refs(&q->key); |
1576 | hb = hash_futex(&q->key); |
1577 | q->lock_ptr = &hb->lock; |
1578 | |
1579 | @@ -1375,7 +1374,6 @@ static inline void |
1580 | queue_unlock(struct futex_q *q, struct futex_hash_bucket *hb) |
1581 | { |
1582 | spin_unlock(&hb->lock); |
1583 | - drop_futex_key_refs(&q->key); |
1584 | } |
1585 | |
1586 | /** |
1587 | @@ -1480,8 +1478,6 @@ static void unqueue_me_pi(struct futex_q *q) |
1588 | q->pi_state = NULL; |
1589 | |
1590 | spin_unlock(q->lock_ptr); |
1591 | - |
1592 | - drop_futex_key_refs(&q->key); |
1593 | } |
1594 | |
1595 | /* |
1596 | @@ -1812,7 +1808,10 @@ static int futex_wait(u32 __user *uaddr, int fshared, |
1597 | } |
1598 | |
1599 | retry: |
1600 | - /* Prepare to wait on uaddr. */ |
1601 | + /* |
1602 | + * Prepare to wait on uaddr. On success, holds hb lock and increments |
1603 | + * q.key refs. |
1604 | + */ |
1605 | ret = futex_wait_setup(uaddr, val, fshared, &q, &hb); |
1606 | if (ret) |
1607 | goto out; |
1608 | @@ -1822,24 +1821,23 @@ retry: |
1609 | |
1610 | /* If we were woken (and unqueued), we succeeded, whatever. */ |
1611 | ret = 0; |
1612 | + /* unqueue_me() drops q.key ref */ |
1613 | if (!unqueue_me(&q)) |
1614 | - goto out_put_key; |
1615 | + goto out; |
1616 | ret = -ETIMEDOUT; |
1617 | if (to && !to->task) |
1618 | - goto out_put_key; |
1619 | + goto out; |
1620 | |
1621 | /* |
1622 | * We expect signal_pending(current), but we might be the |
1623 | * victim of a spurious wakeup as well. |
1624 | */ |
1625 | - if (!signal_pending(current)) { |
1626 | - put_futex_key(fshared, &q.key); |
1627 | + if (!signal_pending(current)) |
1628 | goto retry; |
1629 | - } |
1630 | |
1631 | ret = -ERESTARTSYS; |
1632 | if (!abs_time) |
1633 | - goto out_put_key; |
1634 | + goto out; |
1635 | |
1636 | restart = ¤t_thread_info()->restart_block; |
1637 | restart->fn = futex_wait_restart; |
1638 | @@ -1856,8 +1854,6 @@ retry: |
1639 | |
1640 | ret = -ERESTART_RESTARTBLOCK; |
1641 | |
1642 | -out_put_key: |
1643 | - put_futex_key(fshared, &q.key); |
1644 | out: |
1645 | if (to) { |
1646 | hrtimer_cancel(&to->timer); |
1647 | @@ -2236,7 +2232,10 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, int fshared, |
1648 | q.rt_waiter = &rt_waiter; |
1649 | q.requeue_pi_key = &key2; |
1650 | |
1651 | - /* Prepare to wait on uaddr. */ |
1652 | + /* |
1653 | + * Prepare to wait on uaddr. On success, increments q.key (key1) ref |
1654 | + * count. |
1655 | + */ |
1656 | ret = futex_wait_setup(uaddr, val, fshared, &q, &hb); |
1657 | if (ret) |
1658 | goto out_key2; |
1659 | @@ -2254,7 +2253,9 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, int fshared, |
1660 | * In order for us to be here, we know our q.key == key2, and since |
1661 | * we took the hb->lock above, we also know that futex_requeue() has |
1662 | * completed and we no longer have to concern ourselves with a wakeup |
1663 | - * race with the atomic proxy lock acquition by the requeue code. |
1664 | + * race with the atomic proxy lock acquisition by the requeue code. The |
1665 | + * futex_requeue dropped our key1 reference and incremented our key2 |
1666 | + * reference count. |
1667 | */ |
1668 | |
1669 | /* Check if the requeue code acquired the second futex for us. */ |
1670 | diff --git a/kernel/perf_event.c b/kernel/perf_event.c |
1671 | index b98bed3..03bb897 100644 |
1672 | --- a/kernel/perf_event.c |
1673 | +++ b/kernel/perf_event.c |
1674 | @@ -1773,7 +1773,13 @@ static u64 perf_event_read(struct perf_event *event) |
1675 | unsigned long flags; |
1676 | |
1677 | raw_spin_lock_irqsave(&ctx->lock, flags); |
1678 | - update_context_time(ctx); |
1679 | + /* |
1680 | + * may read while context is not active |
1681 | + * (e.g., thread is blocked), in that case |
1682 | + * we cannot update context time |
1683 | + */ |
1684 | + if (ctx->is_active) |
1685 | + update_context_time(ctx); |
1686 | update_event_times(event); |
1687 | raw_spin_unlock_irqrestore(&ctx->lock, flags); |
1688 | } |
1689 | diff --git a/kernel/sched.c b/kernel/sched.c |
1690 | index dc85ceb..3fd774c 100644 |
1691 | --- a/kernel/sched.c |
1692 | +++ b/kernel/sched.c |
1693 | @@ -723,7 +723,7 @@ sched_feat_write(struct file *filp, const char __user *ubuf, |
1694 | size_t cnt, loff_t *ppos) |
1695 | { |
1696 | char buf[64]; |
1697 | - char *cmp = buf; |
1698 | + char *cmp; |
1699 | int neg = 0; |
1700 | int i; |
1701 | |
1702 | @@ -734,6 +734,7 @@ sched_feat_write(struct file *filp, const char __user *ubuf, |
1703 | return -EFAULT; |
1704 | |
1705 | buf[cnt] = 0; |
1706 | + cmp = strstrip(buf); |
1707 | |
1708 | if (strncmp(buf, "NO_", 3) == 0) { |
1709 | neg = 1; |
1710 | @@ -741,9 +742,7 @@ sched_feat_write(struct file *filp, const char __user *ubuf, |
1711 | } |
1712 | |
1713 | for (i = 0; sched_feat_names[i]; i++) { |
1714 | - int len = strlen(sched_feat_names[i]); |
1715 | - |
1716 | - if (strncmp(cmp, sched_feat_names[i], len) == 0) { |
1717 | + if (strcmp(cmp, sched_feat_names[i]) == 0) { |
1718 | if (neg) |
1719 | sysctl_sched_features &= ~(1UL << i); |
1720 | else |
1721 | @@ -1858,12 +1857,6 @@ static void dec_nr_running(struct rq *rq) |
1722 | |
1723 | static void set_load_weight(struct task_struct *p) |
1724 | { |
1725 | - if (task_has_rt_policy(p)) { |
1726 | - p->se.load.weight = 0; |
1727 | - p->se.load.inv_weight = WMULT_CONST; |
1728 | - return; |
1729 | - } |
1730 | - |
1731 | /* |
1732 | * SCHED_IDLE tasks get minimal weight: |
1733 | */ |
1734 | diff --git a/mm/vmalloc.c b/mm/vmalloc.c |
1735 | index 6b8889d..d8087f0 100644 |
1736 | --- a/mm/vmalloc.c |
1737 | +++ b/mm/vmalloc.c |
1738 | @@ -517,6 +517,15 @@ static atomic_t vmap_lazy_nr = ATOMIC_INIT(0); |
1739 | static void purge_fragmented_blocks_allcpus(void); |
1740 | |
1741 | /* |
1742 | + * called before a call to iounmap() if the caller wants vm_area_struct's |
1743 | + * immediately freed. |
1744 | + */ |
1745 | +void set_iounmap_nonlazy(void) |
1746 | +{ |
1747 | + atomic_set(&vmap_lazy_nr, lazy_max_pages()+1); |
1748 | +} |
1749 | + |
1750 | +/* |
1751 | * Purges all lazily-freed vmap areas. |
1752 | * |
1753 | * If sync is 0 then don't purge if there is already a purge in progress. |
1754 | diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c |
1755 | index 0b54b7d..dc60205 100644 |
1756 | --- a/net/bluetooth/l2cap.c |
1757 | +++ b/net/bluetooth/l2cap.c |
1758 | @@ -2891,7 +2891,7 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd |
1759 | struct l2cap_chan_list *list = &conn->chan_list; |
1760 | struct l2cap_conn_req *req = (struct l2cap_conn_req *) data; |
1761 | struct l2cap_conn_rsp rsp; |
1762 | - struct sock *parent, *uninitialized_var(sk); |
1763 | + struct sock *parent, *sk = NULL; |
1764 | int result, status = L2CAP_CS_NO_INFO; |
1765 | |
1766 | u16 dcid = 0, scid = __le16_to_cpu(req->scid); |
1767 | @@ -3000,7 +3000,7 @@ sendresp: |
1768 | L2CAP_INFO_REQ, sizeof(info), &info); |
1769 | } |
1770 | |
1771 | - if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT) && |
1772 | + if (sk && !(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT) && |
1773 | result == L2CAP_CR_SUCCESS) { |
1774 | u8 buf[128]; |
1775 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT; |
1776 | diff --git a/net/netfilter/xt_SECMARK.c b/net/netfilter/xt_SECMARK.c |
1777 | index 23b2d6c..364ad16 100644 |
1778 | --- a/net/netfilter/xt_SECMARK.c |
1779 | +++ b/net/netfilter/xt_SECMARK.c |
1780 | @@ -101,7 +101,7 @@ static int secmark_tg_check(const struct xt_tgchk_param *par) |
1781 | switch (info->mode) { |
1782 | case SECMARK_MODE_SEL: |
1783 | err = checkentry_selinux(info); |
1784 | - if (err <= 0) |
1785 | + if (err) |
1786 | return err; |
1787 | break; |
1788 |