Annotation of /trunk/kernel26-alx/patches-2.6.31-r1/0103-2.6.31.4-all-fixes.patch
Parent Directory | Revision Log
Revision 965 -
(hide annotations)
(download)
Tue Dec 29 19:31:51 2009 UTC (14 years, 9 months ago) by niro
File size: 41817 byte(s)
Tue Dec 29 19:31:51 2009 UTC (14 years, 9 months ago) by niro
File size: 41817 byte(s)
-2.6.31-alx-r1
1 | niro | 965 | diff --git a/Documentation/networking/timestamping/timestamping.c b/Documentation/networking/timestamping/timestamping.c |
2 | index 43d1431..a7936fe 100644 | ||
3 | --- a/Documentation/networking/timestamping/timestamping.c | ||
4 | +++ b/Documentation/networking/timestamping/timestamping.c | ||
5 | @@ -381,7 +381,7 @@ int main(int argc, char **argv) | ||
6 | memset(&hwtstamp, 0, sizeof(hwtstamp)); | ||
7 | strncpy(hwtstamp.ifr_name, interface, sizeof(hwtstamp.ifr_name)); | ||
8 | hwtstamp.ifr_data = (void *)&hwconfig; | ||
9 | - memset(&hwconfig, 0, sizeof(&hwconfig)); | ||
10 | + memset(&hwconfig, 0, sizeof(hwconfig)); | ||
11 | hwconfig.tx_type = | ||
12 | (so_timestamping_flags & SOF_TIMESTAMPING_TX_HARDWARE) ? | ||
13 | HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF; | ||
14 | diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S | ||
15 | index e590261..d76b026 100644 | ||
16 | --- a/arch/x86/ia32/ia32entry.S | ||
17 | +++ b/arch/x86/ia32/ia32entry.S | ||
18 | @@ -21,8 +21,8 @@ | ||
19 | #define __AUDIT_ARCH_LE 0x40000000 | ||
20 | |||
21 | #ifndef CONFIG_AUDITSYSCALL | ||
22 | -#define sysexit_audit int_ret_from_sys_call | ||
23 | -#define sysretl_audit int_ret_from_sys_call | ||
24 | +#define sysexit_audit ia32_ret_from_sys_call | ||
25 | +#define sysretl_audit ia32_ret_from_sys_call | ||
26 | #endif | ||
27 | |||
28 | #define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8) | ||
29 | @@ -39,12 +39,12 @@ | ||
30 | .endm | ||
31 | |||
32 | /* clobbers %eax */ | ||
33 | - .macro CLEAR_RREGS _r9=rax | ||
34 | + .macro CLEAR_RREGS offset=0, _r9=rax | ||
35 | xorl %eax,%eax | ||
36 | - movq %rax,R11(%rsp) | ||
37 | - movq %rax,R10(%rsp) | ||
38 | - movq %\_r9,R9(%rsp) | ||
39 | - movq %rax,R8(%rsp) | ||
40 | + movq %rax,\offset+R11(%rsp) | ||
41 | + movq %rax,\offset+R10(%rsp) | ||
42 | + movq %\_r9,\offset+R9(%rsp) | ||
43 | + movq %rax,\offset+R8(%rsp) | ||
44 | .endm | ||
45 | |||
46 | /* | ||
47 | @@ -172,6 +172,10 @@ sysexit_from_sys_call: | ||
48 | movl RIP-R11(%rsp),%edx /* User %eip */ | ||
49 | CFI_REGISTER rip,rdx | ||
50 | RESTORE_ARGS 1,24,1,1,1,1 | ||
51 | + xorq %r8,%r8 | ||
52 | + xorq %r9,%r9 | ||
53 | + xorq %r10,%r10 | ||
54 | + xorq %r11,%r11 | ||
55 | popfq | ||
56 | CFI_ADJUST_CFA_OFFSET -8 | ||
57 | /*CFI_RESTORE rflags*/ | ||
58 | @@ -202,7 +206,7 @@ sysexit_from_sys_call: | ||
59 | |||
60 | .macro auditsys_exit exit,ebpsave=RBP | ||
61 | testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) | ||
62 | - jnz int_ret_from_sys_call | ||
63 | + jnz ia32_ret_from_sys_call | ||
64 | TRACE_IRQS_ON | ||
65 | sti | ||
66 | movl %eax,%esi /* second arg, syscall return value */ | ||
67 | @@ -218,8 +222,9 @@ sysexit_from_sys_call: | ||
68 | cli | ||
69 | TRACE_IRQS_OFF | ||
70 | testl %edi,TI_flags(%r10) | ||
71 | - jnz int_with_check | ||
72 | - jmp \exit | ||
73 | + jz \exit | ||
74 | + CLEAR_RREGS -ARGOFFSET | ||
75 | + jmp int_with_check | ||
76 | .endm | ||
77 | |||
78 | sysenter_auditsys: | ||
79 | @@ -329,6 +334,9 @@ sysretl_from_sys_call: | ||
80 | CFI_REGISTER rip,rcx | ||
81 | movl EFLAGS-ARGOFFSET(%rsp),%r11d | ||
82 | /*CFI_REGISTER rflags,r11*/ | ||
83 | + xorq %r10,%r10 | ||
84 | + xorq %r9,%r9 | ||
85 | + xorq %r8,%r8 | ||
86 | TRACE_IRQS_ON | ||
87 | movl RSP-ARGOFFSET(%rsp),%esp | ||
88 | CFI_RESTORE rsp | ||
89 | @@ -353,7 +361,7 @@ cstar_tracesys: | ||
90 | #endif | ||
91 | xchgl %r9d,%ebp | ||
92 | SAVE_REST | ||
93 | - CLEAR_RREGS r9 | ||
94 | + CLEAR_RREGS 0, r9 | ||
95 | movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */ | ||
96 | movq %rsp,%rdi /* &pt_regs -> arg1 */ | ||
97 | call syscall_trace_enter | ||
98 | @@ -425,6 +433,8 @@ ia32_do_call: | ||
99 | call *ia32_sys_call_table(,%rax,8) # xxx: rip relative | ||
100 | ia32_sysret: | ||
101 | movq %rax,RAX-ARGOFFSET(%rsp) | ||
102 | +ia32_ret_from_sys_call: | ||
103 | + CLEAR_RREGS -ARGOFFSET | ||
104 | jmp int_ret_from_sys_call | ||
105 | |||
106 | ia32_tracesys: | ||
107 | @@ -442,8 +452,8 @@ END(ia32_syscall) | ||
108 | |||
109 | ia32_badsys: | ||
110 | movq $0,ORIG_RAX-ARGOFFSET(%rsp) | ||
111 | - movq $-ENOSYS,RAX-ARGOFFSET(%rsp) | ||
112 | - jmp int_ret_from_sys_call | ||
113 | + movq $-ENOSYS,%rax | ||
114 | + jmp ia32_sysret | ||
115 | |||
116 | quiet_ni_syscall: | ||
117 | movq $-ENOSYS,%rax | ||
118 | diff --git a/arch/x86/include/asm/checksum_32.h b/arch/x86/include/asm/checksum_32.h | ||
119 | index 7c5ef8b..46fc474 100644 | ||
120 | --- a/arch/x86/include/asm/checksum_32.h | ||
121 | +++ b/arch/x86/include/asm/checksum_32.h | ||
122 | @@ -161,7 +161,8 @@ static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, | ||
123 | "adcl $0, %0 ;\n" | ||
124 | : "=&r" (sum) | ||
125 | : "r" (saddr), "r" (daddr), | ||
126 | - "r" (htonl(len)), "r" (htonl(proto)), "0" (sum)); | ||
127 | + "r" (htonl(len)), "r" (htonl(proto)), "0" (sum) | ||
128 | + : "memory"); | ||
129 | |||
130 | return csum_fold(sum); | ||
131 | } | ||
132 | diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c | ||
133 | index 8c44c23..59cdfa4 100644 | ||
134 | --- a/arch/x86/kernel/acpi/cstate.c | ||
135 | +++ b/arch/x86/kernel/acpi/cstate.c | ||
136 | @@ -48,7 +48,7 @@ void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, | ||
137 | * P4, Core and beyond CPUs | ||
138 | */ | ||
139 | if (c->x86_vendor == X86_VENDOR_INTEL && | ||
140 | - (c->x86 > 0x6 || (c->x86 == 6 && c->x86_model >= 14))) | ||
141 | + (c->x86 > 0xf || (c->x86 == 6 && c->x86_model >= 14))) | ||
142 | flags->bm_control = 0; | ||
143 | } | ||
144 | EXPORT_SYMBOL(acpi_processor_power_init_bm_check); | ||
145 | diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c | ||
146 | index 5cf36c0..da890f0 100644 | ||
147 | --- a/arch/x86/kernel/i8253.c | ||
148 | +++ b/arch/x86/kernel/i8253.c | ||
149 | @@ -21,8 +21,10 @@ EXPORT_SYMBOL(i8253_lock); | ||
150 | |||
151 | #ifdef CONFIG_X86_32 | ||
152 | static void pit_disable_clocksource(void); | ||
153 | +static void pit_enable_clocksource(void); | ||
154 | #else | ||
155 | static inline void pit_disable_clocksource(void) { } | ||
156 | +static inline void pit_enable_clocksource(void) { } | ||
157 | #endif | ||
158 | |||
159 | /* | ||
160 | @@ -67,7 +69,7 @@ static void init_pit_timer(enum clock_event_mode mode, | ||
161 | break; | ||
162 | |||
163 | case CLOCK_EVT_MODE_RESUME: | ||
164 | - /* Nothing to do here */ | ||
165 | + pit_enable_clocksource(); | ||
166 | break; | ||
167 | } | ||
168 | spin_unlock(&i8253_lock); | ||
169 | @@ -200,19 +202,27 @@ static struct clocksource pit_cs = { | ||
170 | .shift = 20, | ||
171 | }; | ||
172 | |||
173 | +int pit_cs_registered; | ||
174 | static void pit_disable_clocksource(void) | ||
175 | { | ||
176 | - /* | ||
177 | - * Use mult to check whether it is registered or not | ||
178 | - */ | ||
179 | - if (pit_cs.mult) { | ||
180 | + if (pit_cs_registered) { | ||
181 | clocksource_unregister(&pit_cs); | ||
182 | - pit_cs.mult = 0; | ||
183 | + pit_cs_registered = 0; | ||
184 | + } | ||
185 | +} | ||
186 | + | ||
187 | +static void pit_enable_clocksource(void) | ||
188 | +{ | ||
189 | + if (!pit_cs_registered && !clocksource_register(&pit_cs)) { | ||
190 | + pit_cs_registered = 1; | ||
191 | } | ||
192 | } | ||
193 | |||
194 | + | ||
195 | + | ||
196 | static int __init init_pit_clocksource(void) | ||
197 | { | ||
198 | + int ret; | ||
199 | /* | ||
200 | * Several reasons not to register PIT as a clocksource: | ||
201 | * | ||
202 | @@ -226,7 +236,10 @@ static int __init init_pit_clocksource(void) | ||
203 | |||
204 | pit_cs.mult = clocksource_hz2mult(CLOCK_TICK_RATE, pit_cs.shift); | ||
205 | |||
206 | - return clocksource_register(&pit_cs); | ||
207 | + ret = clocksource_register(&pit_cs); | ||
208 | + if (!ret) | ||
209 | + pit_cs_registered = 1; | ||
210 | + return ret; | ||
211 | } | ||
212 | arch_initcall(init_pit_clocksource); | ||
213 | |||
214 | diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c | ||
215 | index bb6277d..b225176 100644 | ||
216 | --- a/arch/x86/kvm/lapic.c | ||
217 | +++ b/arch/x86/kvm/lapic.c | ||
218 | @@ -567,7 +567,7 @@ static void start_apic_timer(struct kvm_lapic *apic) | ||
219 | { | ||
220 | ktime_t now = apic->lapic_timer.timer.base->get_time(); | ||
221 | |||
222 | - apic->lapic_timer.period = apic_get_reg(apic, APIC_TMICT) * | ||
223 | + apic->lapic_timer.period = (u64)apic_get_reg(apic, APIC_TMICT) * | ||
224 | APIC_BUS_CYCLE_NS * apic->divide_count; | ||
225 | atomic_set(&apic->lapic_timer.pending, 0); | ||
226 | |||
227 | diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c | ||
228 | index b1f658a..4ac6899 100644 | ||
229 | --- a/arch/x86/kvm/svm.c | ||
230 | +++ b/arch/x86/kvm/svm.c | ||
231 | @@ -709,6 +709,8 @@ static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu) | ||
232 | rdtscll(tsc_this); | ||
233 | delta = vcpu->arch.host_tsc - tsc_this; | ||
234 | svm->vmcb->control.tsc_offset += delta; | ||
235 | + if (is_nested(svm)) | ||
236 | + svm->hsave->control.tsc_offset += delta; | ||
237 | vcpu->cpu = cpu; | ||
238 | kvm_migrate_timers(vcpu); | ||
239 | svm->asid_generation = 0; | ||
240 | @@ -1954,10 +1956,14 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 *data) | ||
241 | |||
242 | switch (ecx) { | ||
243 | case MSR_IA32_TIME_STAMP_COUNTER: { | ||
244 | - u64 tsc; | ||
245 | + u64 tsc_offset; | ||
246 | |||
247 | - rdtscll(tsc); | ||
248 | - *data = svm->vmcb->control.tsc_offset + tsc; | ||
249 | + if (is_nested(svm)) | ||
250 | + tsc_offset = svm->hsave->control.tsc_offset; | ||
251 | + else | ||
252 | + tsc_offset = svm->vmcb->control.tsc_offset; | ||
253 | + | ||
254 | + *data = tsc_offset + native_read_tsc(); | ||
255 | break; | ||
256 | } | ||
257 | case MSR_K6_STAR: | ||
258 | @@ -2044,10 +2050,17 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data) | ||
259 | |||
260 | switch (ecx) { | ||
261 | case MSR_IA32_TIME_STAMP_COUNTER: { | ||
262 | - u64 tsc; | ||
263 | + u64 tsc_offset = data - native_read_tsc(); | ||
264 | + u64 g_tsc_offset = 0; | ||
265 | + | ||
266 | + if (is_nested(svm)) { | ||
267 | + g_tsc_offset = svm->vmcb->control.tsc_offset - | ||
268 | + svm->hsave->control.tsc_offset; | ||
269 | + svm->hsave->control.tsc_offset = tsc_offset; | ||
270 | + } | ||
271 | + | ||
272 | + svm->vmcb->control.tsc_offset = tsc_offset + g_tsc_offset; | ||
273 | |||
274 | - rdtscll(tsc); | ||
275 | - svm->vmcb->control.tsc_offset = data - tsc; | ||
276 | break; | ||
277 | } | ||
278 | case MSR_K6_STAR: | ||
279 | diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c | ||
280 | index 6a768ff..ff72e4d 100644 | ||
281 | --- a/arch/x86/kvm/vmx.c | ||
282 | +++ b/arch/x86/kvm/vmx.c | ||
283 | @@ -661,7 +661,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) | ||
284 | if (vcpu->cpu != cpu) { | ||
285 | vcpu_clear(vmx); | ||
286 | kvm_migrate_timers(vcpu); | ||
287 | - vpid_sync_vcpu_all(vmx); | ||
288 | + set_bit(KVM_REQ_TLB_FLUSH, &vcpu->requests); | ||
289 | local_irq_disable(); | ||
290 | list_add(&vmx->local_vcpus_link, | ||
291 | &per_cpu(vcpus_on_cpu, cpu)); | ||
292 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c | ||
293 | index 91a077f..8aafb62 100644 | ||
294 | --- a/arch/x86/kvm/x86.c | ||
295 | +++ b/arch/x86/kvm/x86.c | ||
296 | @@ -1429,6 +1429,8 @@ static int kvm_dev_ioctl_get_supported_cpuid(struct kvm_cpuid2 *cpuid, | ||
297 | |||
298 | if (cpuid->nent < 1) | ||
299 | goto out; | ||
300 | + if (cpuid->nent > KVM_MAX_CPUID_ENTRIES) | ||
301 | + cpuid->nent = KVM_MAX_CPUID_ENTRIES; | ||
302 | r = -ENOMEM; | ||
303 | cpuid_entries = vmalloc(sizeof(struct kvm_cpuid_entry2) * cpuid->nent); | ||
304 | if (!cpuid_entries) | ||
305 | diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c | ||
306 | index 5691f16..8dff236 100644 | ||
307 | --- a/drivers/acpi/osl.c | ||
308 | +++ b/drivers/acpi/osl.c | ||
309 | @@ -1182,7 +1182,13 @@ int acpi_check_resource_conflict(struct resource *res) | ||
310 | res_list_elem->name, | ||
311 | (long long) res_list_elem->start, | ||
312 | (long long) res_list_elem->end); | ||
313 | - printk(KERN_INFO "ACPI: Device needs an ACPI driver\n"); | ||
314 | + if (acpi_enforce_resources == ENFORCE_RESOURCES_LAX) | ||
315 | + printk(KERN_NOTICE "ACPI: This conflict may" | ||
316 | + " cause random problems and system" | ||
317 | + " instability\n"); | ||
318 | + printk(KERN_INFO "ACPI: If an ACPI driver is available" | ||
319 | + " for this device, you should use it instead of" | ||
320 | + " the native driver\n"); | ||
321 | } | ||
322 | if (acpi_enforce_resources == ENFORCE_RESOURCES_STRICT) | ||
323 | return -EBUSY; | ||
324 | diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c | ||
325 | index 79711b6..c644fec 100644 | ||
326 | --- a/drivers/ata/libata-eh.c | ||
327 | +++ b/drivers/ata/libata-eh.c | ||
328 | @@ -2541,14 +2541,14 @@ int ata_eh_reset(struct ata_link *link, int classify, | ||
329 | dev->pio_mode = XFER_PIO_0; | ||
330 | dev->flags &= ~ATA_DFLAG_SLEEPING; | ||
331 | |||
332 | - if (!ata_phys_link_offline(ata_dev_phys_link(dev))) { | ||
333 | - /* apply class override */ | ||
334 | - if (lflags & ATA_LFLAG_ASSUME_ATA) | ||
335 | - classes[dev->devno] = ATA_DEV_ATA; | ||
336 | - else if (lflags & ATA_LFLAG_ASSUME_SEMB) | ||
337 | - classes[dev->devno] = ATA_DEV_SEMB_UNSUP; | ||
338 | - } else | ||
339 | - classes[dev->devno] = ATA_DEV_NONE; | ||
340 | + if (ata_phys_link_offline(ata_dev_phys_link(dev))) | ||
341 | + continue; | ||
342 | + | ||
343 | + /* apply class override */ | ||
344 | + if (lflags & ATA_LFLAG_ASSUME_ATA) | ||
345 | + classes[dev->devno] = ATA_DEV_ATA; | ||
346 | + else if (lflags & ATA_LFLAG_ASSUME_SEMB) | ||
347 | + classes[dev->devno] = ATA_DEV_SEMB_UNSUP; | ||
348 | } | ||
349 | |||
350 | /* record current link speed */ | ||
351 | @@ -2581,34 +2581,48 @@ int ata_eh_reset(struct ata_link *link, int classify, | ||
352 | slave->eh_info.serror = 0; | ||
353 | spin_unlock_irqrestore(link->ap->lock, flags); | ||
354 | |||
355 | - /* Make sure onlineness and classification result correspond. | ||
356 | + /* | ||
357 | + * Make sure onlineness and classification result correspond. | ||
358 | * Hotplug could have happened during reset and some | ||
359 | * controllers fail to wait while a drive is spinning up after | ||
360 | * being hotplugged causing misdetection. By cross checking | ||
361 | - * link onlineness and classification result, those conditions | ||
362 | - * can be reliably detected and retried. | ||
363 | + * link on/offlineness and classification result, those | ||
364 | + * conditions can be reliably detected and retried. | ||
365 | */ | ||
366 | nr_unknown = 0; | ||
367 | ata_for_each_dev(dev, link, ALL) { | ||
368 | - /* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */ | ||
369 | - if (classes[dev->devno] == ATA_DEV_UNKNOWN) { | ||
370 | - classes[dev->devno] = ATA_DEV_NONE; | ||
371 | - if (ata_phys_link_online(ata_dev_phys_link(dev))) | ||
372 | + if (ata_phys_link_online(ata_dev_phys_link(dev))) { | ||
373 | + if (classes[dev->devno] == ATA_DEV_UNKNOWN) { | ||
374 | + ata_dev_printk(dev, KERN_DEBUG, "link online " | ||
375 | + "but device misclassifed\n"); | ||
376 | + classes[dev->devno] = ATA_DEV_NONE; | ||
377 | nr_unknown++; | ||
378 | + } | ||
379 | + } else if (ata_phys_link_offline(ata_dev_phys_link(dev))) { | ||
380 | + if (ata_class_enabled(classes[dev->devno])) | ||
381 | + ata_dev_printk(dev, KERN_DEBUG, "link offline, " | ||
382 | + "clearing class %d to NONE\n", | ||
383 | + classes[dev->devno]); | ||
384 | + classes[dev->devno] = ATA_DEV_NONE; | ||
385 | + } else if (classes[dev->devno] == ATA_DEV_UNKNOWN) { | ||
386 | + ata_dev_printk(dev, KERN_DEBUG, "link status unknown, " | ||
387 | + "clearing UNKNOWN to NONE\n"); | ||
388 | + classes[dev->devno] = ATA_DEV_NONE; | ||
389 | } | ||
390 | } | ||
391 | |||
392 | if (classify && nr_unknown) { | ||
393 | if (try < max_tries) { | ||
394 | ata_link_printk(link, KERN_WARNING, "link online but " | ||
395 | - "device misclassified, retrying\n"); | ||
396 | + "%d devices misclassified, retrying\n", | ||
397 | + nr_unknown); | ||
398 | failed_link = link; | ||
399 | rc = -EAGAIN; | ||
400 | goto fail; | ||
401 | } | ||
402 | ata_link_printk(link, KERN_WARNING, | ||
403 | - "link online but device misclassified, " | ||
404 | - "device detection might fail\n"); | ||
405 | + "link online but %d devices misclassified, " | ||
406 | + "device detection might fail\n", nr_unknown); | ||
407 | } | ||
408 | |||
409 | /* reset successful, schedule revalidation */ | ||
410 | diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c | ||
411 | index e48af9f..414372a 100644 | ||
412 | --- a/drivers/char/tty_ldisc.c | ||
413 | +++ b/drivers/char/tty_ldisc.c | ||
414 | @@ -516,7 +516,7 @@ static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old) | ||
415 | static int tty_ldisc_halt(struct tty_struct *tty) | ||
416 | { | ||
417 | clear_bit(TTY_LDISC, &tty->flags); | ||
418 | - return cancel_delayed_work(&tty->buf.work); | ||
419 | + return cancel_delayed_work_sync(&tty->buf.work); | ||
420 | } | ||
421 | |||
422 | /** | ||
423 | @@ -754,12 +754,9 @@ void tty_ldisc_hangup(struct tty_struct *tty) | ||
424 | * N_TTY. | ||
425 | */ | ||
426 | if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { | ||
427 | - /* Make sure the old ldisc is quiescent */ | ||
428 | - tty_ldisc_halt(tty); | ||
429 | - flush_scheduled_work(); | ||
430 | - | ||
431 | /* Avoid racing set_ldisc or tty_ldisc_release */ | ||
432 | mutex_lock(&tty->ldisc_mutex); | ||
433 | + tty_ldisc_halt(tty); | ||
434 | if (tty->ldisc) { /* Not yet closed */ | ||
435 | /* Switch back to N_TTY */ | ||
436 | tty_ldisc_reinit(tty); | ||
437 | diff --git a/drivers/ide/sis5513.c b/drivers/ide/sis5513.c | ||
438 | index afca22b..3b88eba 100644 | ||
439 | --- a/drivers/ide/sis5513.c | ||
440 | +++ b/drivers/ide/sis5513.c | ||
441 | @@ -2,7 +2,7 @@ | ||
442 | * Copyright (C) 1999-2000 Andre Hedrick <andre@linux-ide.org> | ||
443 | * Copyright (C) 2002 Lionel Bouton <Lionel.Bouton@inet6.fr>, Maintainer | ||
444 | * Copyright (C) 2003 Vojtech Pavlik <vojtech@suse.cz> | ||
445 | - * Copyright (C) 2007 Bartlomiej Zolnierkiewicz | ||
446 | + * Copyright (C) 2007-2009 Bartlomiej Zolnierkiewicz | ||
447 | * | ||
448 | * May be copied or modified under the terms of the GNU General Public License | ||
449 | * | ||
450 | @@ -281,11 +281,13 @@ static void config_drive_art_rwp(ide_drive_t *drive) | ||
451 | |||
452 | pci_read_config_byte(dev, 0x4b, ®4bh); | ||
453 | |||
454 | + rw_prefetch = reg4bh & ~(0x11 << drive->dn); | ||
455 | + | ||
456 | if (drive->media == ide_disk) | ||
457 | - rw_prefetch = 0x11 << drive->dn; | ||
458 | + rw_prefetch |= 0x11 << drive->dn; | ||
459 | |||
460 | - if ((reg4bh & (0x11 << drive->dn)) != rw_prefetch) | ||
461 | - pci_write_config_byte(dev, 0x4b, reg4bh|rw_prefetch); | ||
462 | + if (reg4bh != rw_prefetch) | ||
463 | + pci_write_config_byte(dev, 0x4b, rw_prefetch); | ||
464 | } | ||
465 | |||
466 | static void sis_set_pio_mode(ide_drive_t *drive, const u8 pio) | ||
467 | diff --git a/drivers/net/appletalk/ipddp.c b/drivers/net/appletalk/ipddp.c | ||
468 | index 78cea5e..bf9ab65 100644 | ||
469 | --- a/drivers/net/appletalk/ipddp.c | ||
470 | +++ b/drivers/net/appletalk/ipddp.c | ||
471 | @@ -176,8 +176,7 @@ static int ipddp_xmit(struct sk_buff *skb, struct net_device *dev) | ||
472 | dev->stats.tx_packets++; | ||
473 | dev->stats.tx_bytes += skb->len; | ||
474 | |||
475 | - if(aarp_send_ddp(rt->dev, skb, &rt->at, NULL) < 0) | ||
476 | - dev_kfree_skb(skb); | ||
477 | + aarp_send_ddp(rt->dev, skb, &rt->at, NULL); | ||
478 | |||
479 | spin_unlock(&ipddp_route_lock); | ||
480 | |||
481 | diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c | ||
482 | index e44215c..9048718 100644 | ||
483 | --- a/drivers/net/iseries_veth.c | ||
484 | +++ b/drivers/net/iseries_veth.c | ||
485 | @@ -495,7 +495,7 @@ static void veth_take_cap_ack(struct veth_lpar_connection *cnx, | ||
486 | cnx->remote_lp); | ||
487 | } else { | ||
488 | memcpy(&cnx->cap_ack_event, event, | ||
489 | - sizeof(&cnx->cap_ack_event)); | ||
490 | + sizeof(cnx->cap_ack_event)); | ||
491 | cnx->state |= VETH_STATE_GOTCAPACK; | ||
492 | veth_kick_statemachine(cnx); | ||
493 | } | ||
494 | diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c | ||
495 | index 0a551d8..a606e7f 100644 | ||
496 | --- a/drivers/net/sky2.c | ||
497 | +++ b/drivers/net/sky2.c | ||
498 | @@ -1455,7 +1455,6 @@ static int sky2_up(struct net_device *dev) | ||
499 | if (ramsize > 0) { | ||
500 | u32 rxspace; | ||
501 | |||
502 | - hw->flags |= SKY2_HW_RAM_BUFFER; | ||
503 | pr_debug(PFX "%s: ram buffer %dK\n", dev->name, ramsize); | ||
504 | if (ramsize < 16) | ||
505 | rxspace = ramsize / 2; | ||
506 | @@ -2942,6 +2941,9 @@ static int __devinit sky2_init(struct sky2_hw *hw) | ||
507 | ++hw->ports; | ||
508 | } | ||
509 | |||
510 | + if (sky2_read8(hw, B2_E_0)) | ||
511 | + hw->flags |= SKY2_HW_RAM_BUFFER; | ||
512 | + | ||
513 | return 0; | ||
514 | } | ||
515 | |||
516 | diff --git a/drivers/net/tun.c b/drivers/net/tun.c | ||
517 | index 42b6c63..156f59b 100644 | ||
518 | --- a/drivers/net/tun.c | ||
519 | +++ b/drivers/net/tun.c | ||
520 | @@ -943,8 +943,6 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) | ||
521 | char *name; | ||
522 | unsigned long flags = 0; | ||
523 | |||
524 | - err = -EINVAL; | ||
525 | - | ||
526 | if (!capable(CAP_NET_ADMIN)) | ||
527 | return -EPERM; | ||
528 | |||
529 | @@ -958,7 +956,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) | ||
530 | flags |= TUN_TAP_DEV; | ||
531 | name = "tap%d"; | ||
532 | } else | ||
533 | - goto failed; | ||
534 | + return -EINVAL; | ||
535 | |||
536 | if (*ifr->ifr_name) | ||
537 | name = ifr->ifr_name; | ||
538 | diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c | ||
539 | index fe04589..df49d0d 100644 | ||
540 | --- a/drivers/net/usb/smsc95xx.c | ||
541 | +++ b/drivers/net/usb/smsc95xx.c | ||
542 | @@ -1232,7 +1232,7 @@ static const struct driver_info smsc95xx_info = { | ||
543 | .rx_fixup = smsc95xx_rx_fixup, | ||
544 | .tx_fixup = smsc95xx_tx_fixup, | ||
545 | .status = smsc95xx_status, | ||
546 | - .flags = FLAG_ETHER, | ||
547 | + .flags = FLAG_ETHER | FLAG_SEND_ZLP, | ||
548 | }; | ||
549 | |||
550 | static const struct usb_device_id products[] = { | ||
551 | diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c | ||
552 | index edfd9e1..d49df73 100644 | ||
553 | --- a/drivers/net/usb/usbnet.c | ||
554 | +++ b/drivers/net/usb/usbnet.c | ||
555 | @@ -988,7 +988,7 @@ int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net) | ||
556 | * NOTE: strictly conforming cdc-ether devices should expect | ||
557 | * the ZLP here, but ignore the one-byte packet. | ||
558 | */ | ||
559 | - if ((length % dev->maxpacket) == 0) { | ||
560 | + if (!(info->flags & FLAG_SEND_ZLP) && (length % dev->maxpacket) == 0) { | ||
561 | urb->transfer_buffer_length++; | ||
562 | if (skb_tailroom(skb)) { | ||
563 | skb->data[skb->len] = 0; | ||
564 | diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c | ||
565 | index 101fe4c..c6ac85d 100644 | ||
566 | --- a/fs/ecryptfs/main.c | ||
567 | +++ b/fs/ecryptfs/main.c | ||
568 | @@ -35,6 +35,7 @@ | ||
569 | #include <linux/key.h> | ||
570 | #include <linux/parser.h> | ||
571 | #include <linux/fs_stack.h> | ||
572 | +#include <linux/ima.h> | ||
573 | #include "ecryptfs_kernel.h" | ||
574 | |||
575 | /** | ||
576 | @@ -118,6 +119,7 @@ int ecryptfs_init_persistent_file(struct dentry *ecryptfs_dentry) | ||
577 | const struct cred *cred = current_cred(); | ||
578 | struct ecryptfs_inode_info *inode_info = | ||
579 | ecryptfs_inode_to_private(ecryptfs_dentry->d_inode); | ||
580 | + int opened_lower_file = 0; | ||
581 | int rc = 0; | ||
582 | |||
583 | mutex_lock(&inode_info->lower_file_mutex); | ||
584 | @@ -134,9 +136,12 @@ int ecryptfs_init_persistent_file(struct dentry *ecryptfs_dentry) | ||
585 | "for lower_dentry [0x%p] and lower_mnt [0x%p]; " | ||
586 | "rc = [%d]\n", lower_dentry, lower_mnt, rc); | ||
587 | inode_info->lower_file = NULL; | ||
588 | - } | ||
589 | + } else | ||
590 | + opened_lower_file = 1; | ||
591 | } | ||
592 | mutex_unlock(&inode_info->lower_file_mutex); | ||
593 | + if (opened_lower_file) | ||
594 | + ima_counts_get(inode_info->lower_file); | ||
595 | return rc; | ||
596 | } | ||
597 | |||
598 | diff --git a/fs/namei.c b/fs/namei.c | ||
599 | index 1f13751..fcfc553 100644 | ||
600 | --- a/fs/namei.c | ||
601 | +++ b/fs/namei.c | ||
602 | @@ -1533,9 +1533,11 @@ int may_open(struct path *path, int acc_mode, int flag) | ||
603 | if (error) | ||
604 | return error; | ||
605 | |||
606 | - error = ima_path_check(path, | ||
607 | - acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC), | ||
608 | + error = ima_path_check(path, acc_mode ? | ||
609 | + acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC) : | ||
610 | + ACC_MODE(flag) & (MAY_READ | MAY_WRITE), | ||
611 | IMA_COUNT_UPDATE); | ||
612 | + | ||
613 | if (error) | ||
614 | return error; | ||
615 | /* | ||
616 | diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h | ||
617 | index dc3b132..708085a 100644 | ||
618 | --- a/include/linux/ftrace.h | ||
619 | +++ b/include/linux/ftrace.h | ||
620 | @@ -241,7 +241,7 @@ extern void ftrace_enable_daemon(void); | ||
621 | # define ftrace_set_filter(buf, len, reset) do { } while (0) | ||
622 | # define ftrace_disable_daemon() do { } while (0) | ||
623 | # define ftrace_enable_daemon() do { } while (0) | ||
624 | -static inline void ftrace_release(void *start, unsigned long size) { } | ||
625 | +static inline void ftrace_release_mod(struct module *mod) {} | ||
626 | static inline int register_ftrace_command(struct ftrace_func_command *cmd) | ||
627 | { | ||
628 | return -EINVAL; | ||
629 | diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h | ||
630 | index 310e18a..c42eeb3 100644 | ||
631 | --- a/include/linux/usb/usbnet.h | ||
632 | +++ b/include/linux/usb/usbnet.h | ||
633 | @@ -86,6 +86,7 @@ struct driver_info { | ||
634 | |||
635 | #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ | ||
636 | #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ | ||
637 | +#define FLAG_SEND_ZLP 0x0200 /* hw requires ZLPs are sent */ | ||
638 | |||
639 | |||
640 | /* init device ... can sleep, or cause probe() failure */ | ||
641 | diff --git a/kernel/exit.c b/kernel/exit.c | ||
642 | index 869dc22..b8606f0 100644 | ||
643 | --- a/kernel/exit.c | ||
644 | +++ b/kernel/exit.c | ||
645 | @@ -987,8 +987,6 @@ NORET_TYPE void do_exit(long code) | ||
646 | tsk->mempolicy = NULL; | ||
647 | #endif | ||
648 | #ifdef CONFIG_FUTEX | ||
649 | - if (unlikely(!list_empty(&tsk->pi_state_list))) | ||
650 | - exit_pi_state_list(tsk); | ||
651 | if (unlikely(current->pi_state_cache)) | ||
652 | kfree(current->pi_state_cache); | ||
653 | #endif | ||
654 | diff --git a/kernel/fork.c b/kernel/fork.c | ||
655 | index e6c04d4..4b36858 100644 | ||
656 | --- a/kernel/fork.c | ||
657 | +++ b/kernel/fork.c | ||
658 | @@ -544,12 +544,18 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm) | ||
659 | |||
660 | /* Get rid of any futexes when releasing the mm */ | ||
661 | #ifdef CONFIG_FUTEX | ||
662 | - if (unlikely(tsk->robust_list)) | ||
663 | + if (unlikely(tsk->robust_list)) { | ||
664 | exit_robust_list(tsk); | ||
665 | + tsk->robust_list = NULL; | ||
666 | + } | ||
667 | #ifdef CONFIG_COMPAT | ||
668 | - if (unlikely(tsk->compat_robust_list)) | ||
669 | + if (unlikely(tsk->compat_robust_list)) { | ||
670 | compat_exit_robust_list(tsk); | ||
671 | + tsk->compat_robust_list = NULL; | ||
672 | + } | ||
673 | #endif | ||
674 | + if (unlikely(!list_empty(&tsk->pi_state_list))) | ||
675 | + exit_pi_state_list(tsk); | ||
676 | #endif | ||
677 | |||
678 | /* Get rid of any cached register state */ | ||
679 | diff --git a/kernel/futex.c b/kernel/futex.c | ||
680 | index e18cfbd..2362d06 100644 | ||
681 | --- a/kernel/futex.c | ||
682 | +++ b/kernel/futex.c | ||
683 | @@ -912,8 +912,8 @@ retry: | ||
684 | hb1 = hash_futex(&key1); | ||
685 | hb2 = hash_futex(&key2); | ||
686 | |||
687 | - double_lock_hb(hb1, hb2); | ||
688 | retry_private: | ||
689 | + double_lock_hb(hb1, hb2); | ||
690 | op_ret = futex_atomic_op_inuser(op, uaddr2); | ||
691 | if (unlikely(op_ret < 0)) { | ||
692 | |||
693 | @@ -2087,7 +2087,6 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, | ||
694 | * Unqueue the futex_q and determine which it was. | ||
695 | */ | ||
696 | plist_del(&q->list, &q->list.plist); | ||
697 | - drop_futex_key_refs(&q->key); | ||
698 | |||
699 | if (timeout && !timeout->task) | ||
700 | ret = -ETIMEDOUT; | ||
701 | diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c | ||
702 | index e0f59a2..89aed59 100644 | ||
703 | --- a/kernel/time/tick-sched.c | ||
704 | +++ b/kernel/time/tick-sched.c | ||
705 | @@ -231,6 +231,13 @@ void tick_nohz_stop_sched_tick(int inidle) | ||
706 | if (!inidle && !ts->inidle) | ||
707 | goto end; | ||
708 | |||
709 | + /* | ||
710 | + * Set ts->inidle unconditionally. Even if the system did not | ||
711 | + * switch to NOHZ mode the cpu frequency governers rely on the | ||
712 | + * update of the idle time accounting in tick_nohz_start_idle(). | ||
713 | + */ | ||
714 | + ts->inidle = 1; | ||
715 | + | ||
716 | now = tick_nohz_start_idle(ts); | ||
717 | |||
718 | /* | ||
719 | @@ -248,8 +255,6 @@ void tick_nohz_stop_sched_tick(int inidle) | ||
720 | if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE)) | ||
721 | goto end; | ||
722 | |||
723 | - ts->inidle = 1; | ||
724 | - | ||
725 | if (need_resched()) | ||
726 | goto end; | ||
727 | |||
728 | diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c | ||
729 | index 25edd5c..52eb251 100644 | ||
730 | --- a/kernel/trace/ftrace.c | ||
731 | +++ b/kernel/trace/ftrace.c | ||
732 | @@ -1110,14 +1110,9 @@ static void ftrace_replace_code(int enable) | ||
733 | failed = __ftrace_replace_code(rec, enable); | ||
734 | if (failed) { | ||
735 | rec->flags |= FTRACE_FL_FAILED; | ||
736 | - if ((system_state == SYSTEM_BOOTING) || | ||
737 | - !core_kernel_text(rec->ip)) { | ||
738 | - ftrace_free_rec(rec); | ||
739 | - } else { | ||
740 | - ftrace_bug(failed, rec->ip); | ||
741 | - /* Stop processing */ | ||
742 | - return; | ||
743 | - } | ||
744 | + ftrace_bug(failed, rec->ip); | ||
745 | + /* Stop processing */ | ||
746 | + return; | ||
747 | } | ||
748 | } while_for_each_ftrace_rec(); | ||
749 | } | ||
750 | @@ -2801,19 +2796,17 @@ static int ftrace_convert_nops(struct module *mod, | ||
751 | } | ||
752 | |||
753 | #ifdef CONFIG_MODULES | ||
754 | -void ftrace_release(void *start, void *end) | ||
755 | +void ftrace_release_mod(struct module *mod) | ||
756 | { | ||
757 | struct dyn_ftrace *rec; | ||
758 | struct ftrace_page *pg; | ||
759 | - unsigned long s = (unsigned long)start; | ||
760 | - unsigned long e = (unsigned long)end; | ||
761 | |||
762 | - if (ftrace_disabled || !start || start == end) | ||
763 | + if (ftrace_disabled) | ||
764 | return; | ||
765 | |||
766 | mutex_lock(&ftrace_lock); | ||
767 | do_for_each_ftrace_rec(pg, rec) { | ||
768 | - if ((rec->ip >= s) && (rec->ip < e)) { | ||
769 | + if (within_module_core(rec->ip, mod)) { | ||
770 | /* | ||
771 | * rec->ip is changed in ftrace_free_rec() | ||
772 | * It should not between s and e if record was freed. | ||
773 | @@ -2845,9 +2838,7 @@ static int ftrace_module_notify(struct notifier_block *self, | ||
774 | mod->num_ftrace_callsites); | ||
775 | break; | ||
776 | case MODULE_STATE_GOING: | ||
777 | - ftrace_release(mod->ftrace_callsites, | ||
778 | - mod->ftrace_callsites + | ||
779 | - mod->num_ftrace_callsites); | ||
780 | + ftrace_release_mod(mod); | ||
781 | break; | ||
782 | } | ||
783 | |||
784 | diff --git a/mm/swap_state.c b/mm/swap_state.c | ||
785 | index 42cd38e..0313a13 100644 | ||
786 | --- a/mm/swap_state.c | ||
787 | +++ b/mm/swap_state.c | ||
788 | @@ -66,10 +66,10 @@ void show_swap_cache_info(void) | ||
789 | } | ||
790 | |||
791 | /* | ||
792 | - * add_to_swap_cache resembles add_to_page_cache_locked on swapper_space, | ||
793 | + * __add_to_swap_cache resembles add_to_page_cache_locked on swapper_space, | ||
794 | * but sets SwapCache flag and private instead of mapping and index. | ||
795 | */ | ||
796 | -int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask) | ||
797 | +static int __add_to_swap_cache(struct page *page, swp_entry_t entry) | ||
798 | { | ||
799 | int error; | ||
800 | |||
801 | @@ -77,28 +77,37 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask) | ||
802 | VM_BUG_ON(PageSwapCache(page)); | ||
803 | VM_BUG_ON(!PageSwapBacked(page)); | ||
804 | |||
805 | + page_cache_get(page); | ||
806 | + SetPageSwapCache(page); | ||
807 | + set_page_private(page, entry.val); | ||
808 | + | ||
809 | + spin_lock_irq(&swapper_space.tree_lock); | ||
810 | + error = radix_tree_insert(&swapper_space.page_tree, entry.val, page); | ||
811 | + if (likely(!error)) { | ||
812 | + total_swapcache_pages++; | ||
813 | + __inc_zone_page_state(page, NR_FILE_PAGES); | ||
814 | + INC_CACHE_INFO(add_total); | ||
815 | + } | ||
816 | + spin_unlock_irq(&swapper_space.tree_lock); | ||
817 | + | ||
818 | + if (unlikely(error)) { | ||
819 | + set_page_private(page, 0UL); | ||
820 | + ClearPageSwapCache(page); | ||
821 | + page_cache_release(page); | ||
822 | + } | ||
823 | + | ||
824 | + return error; | ||
825 | +} | ||
826 | + | ||
827 | + | ||
828 | +int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask) | ||
829 | +{ | ||
830 | + int error; | ||
831 | + | ||
832 | error = radix_tree_preload(gfp_mask); | ||
833 | if (!error) { | ||
834 | - page_cache_get(page); | ||
835 | - SetPageSwapCache(page); | ||
836 | - set_page_private(page, entry.val); | ||
837 | - | ||
838 | - spin_lock_irq(&swapper_space.tree_lock); | ||
839 | - error = radix_tree_insert(&swapper_space.page_tree, | ||
840 | - entry.val, page); | ||
841 | - if (likely(!error)) { | ||
842 | - total_swapcache_pages++; | ||
843 | - __inc_zone_page_state(page, NR_FILE_PAGES); | ||
844 | - INC_CACHE_INFO(add_total); | ||
845 | - } | ||
846 | - spin_unlock_irq(&swapper_space.tree_lock); | ||
847 | + error = __add_to_swap_cache(page, entry); | ||
848 | radix_tree_preload_end(); | ||
849 | - | ||
850 | - if (unlikely(error)) { | ||
851 | - set_page_private(page, 0UL); | ||
852 | - ClearPageSwapCache(page); | ||
853 | - page_cache_release(page); | ||
854 | - } | ||
855 | } | ||
856 | return error; | ||
857 | } | ||
858 | @@ -289,13 +298,24 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, | ||
859 | } | ||
860 | |||
861 | /* | ||
862 | + * call radix_tree_preload() while we can wait. | ||
863 | + */ | ||
864 | + err = radix_tree_preload(gfp_mask & GFP_KERNEL); | ||
865 | + if (err) | ||
866 | + break; | ||
867 | + | ||
868 | + /* | ||
869 | * Swap entry may have been freed since our caller observed it. | ||
870 | */ | ||
871 | err = swapcache_prepare(entry); | ||
872 | - if (err == -EEXIST) /* seems racy */ | ||
873 | + if (err == -EEXIST) { /* seems racy */ | ||
874 | + radix_tree_preload_end(); | ||
875 | continue; | ||
876 | - if (err) /* swp entry is obsolete ? */ | ||
877 | + } | ||
878 | + if (err) { /* swp entry is obsolete ? */ | ||
879 | + radix_tree_preload_end(); | ||
880 | break; | ||
881 | + } | ||
882 | |||
883 | /* | ||
884 | * Associate the page with swap entry in the swap cache. | ||
885 | @@ -307,8 +327,9 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, | ||
886 | */ | ||
887 | __set_page_locked(new_page); | ||
888 | SetPageSwapBacked(new_page); | ||
889 | - err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL); | ||
890 | + err = __add_to_swap_cache(new_page, entry); | ||
891 | if (likely(!err)) { | ||
892 | + radix_tree_preload_end(); | ||
893 | /* | ||
894 | * Initiate read into locked page and return. | ||
895 | */ | ||
896 | @@ -316,6 +337,7 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, | ||
897 | swap_readpage(new_page); | ||
898 | return new_page; | ||
899 | } | ||
900 | + radix_tree_preload_end(); | ||
901 | ClearPageSwapBacked(new_page); | ||
902 | __clear_page_locked(new_page); | ||
903 | swapcache_free(entry, NULL); | ||
904 | diff --git a/net/appletalk/aarp.c b/net/appletalk/aarp.c | ||
905 | index 89f99d3..9d4adfd 100644 | ||
906 | --- a/net/appletalk/aarp.c | ||
907 | +++ b/net/appletalk/aarp.c | ||
908 | @@ -599,7 +599,7 @@ int aarp_send_ddp(struct net_device *dev, struct sk_buff *skb, | ||
909 | |||
910 | /* Non ELAP we cannot do. */ | ||
911 | if (dev->type != ARPHRD_ETHER) | ||
912 | - return -1; | ||
913 | + goto free_it; | ||
914 | |||
915 | skb->dev = dev; | ||
916 | skb->protocol = htons(ETH_P_ATALK); | ||
917 | @@ -634,7 +634,7 @@ int aarp_send_ddp(struct net_device *dev, struct sk_buff *skb, | ||
918 | if (!a) { | ||
919 | /* Whoops slipped... good job it's an unreliable protocol 8) */ | ||
920 | write_unlock_bh(&aarp_lock); | ||
921 | - return -1; | ||
922 | + goto free_it; | ||
923 | } | ||
924 | |||
925 | /* Set up the queue */ | ||
926 | @@ -663,15 +663,21 @@ out_unlock: | ||
927 | write_unlock_bh(&aarp_lock); | ||
928 | |||
929 | /* Tell the ddp layer we have taken over for this frame. */ | ||
930 | - return 0; | ||
931 | + goto sent; | ||
932 | |||
933 | sendit: | ||
934 | if (skb->sk) | ||
935 | skb->priority = skb->sk->sk_priority; | ||
936 | - dev_queue_xmit(skb); | ||
937 | + if (dev_queue_xmit(skb)) | ||
938 | + goto drop; | ||
939 | sent: | ||
940 | - return 1; | ||
941 | + return NET_XMIT_SUCCESS; | ||
942 | +free_it: | ||
943 | + kfree_skb(skb); | ||
944 | +drop: | ||
945 | + return NET_XMIT_DROP; | ||
946 | } | ||
947 | +EXPORT_SYMBOL(aarp_send_ddp); | ||
948 | |||
949 | /* | ||
950 | * An entry in the aarp unresolved queue has become resolved. Send | ||
951 | diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c | ||
952 | index 875eda5..0e16544 100644 | ||
953 | --- a/net/appletalk/ddp.c | ||
954 | +++ b/net/appletalk/ddp.c | ||
955 | @@ -1270,8 +1270,10 @@ static int handle_ip_over_ddp(struct sk_buff *skb) | ||
956 | struct net_device_stats *stats; | ||
957 | |||
958 | /* This needs to be able to handle ipddp"N" devices */ | ||
959 | - if (!dev) | ||
960 | - return -ENODEV; | ||
961 | + if (!dev) { | ||
962 | + kfree_skb(skb); | ||
963 | + return NET_RX_DROP; | ||
964 | + } | ||
965 | |||
966 | skb->protocol = htons(ETH_P_IP); | ||
967 | skb_pull(skb, 13); | ||
968 | @@ -1281,8 +1283,7 @@ static int handle_ip_over_ddp(struct sk_buff *skb) | ||
969 | stats = netdev_priv(dev); | ||
970 | stats->rx_packets++; | ||
971 | stats->rx_bytes += skb->len + 13; | ||
972 | - netif_rx(skb); /* Send the SKB up to a higher place. */ | ||
973 | - return 0; | ||
974 | + return netif_rx(skb); /* Send the SKB up to a higher place. */ | ||
975 | } | ||
976 | #else | ||
977 | /* make it easy for gcc to optimize this test out, i.e. kill the code */ | ||
978 | @@ -1290,9 +1291,8 @@ static int handle_ip_over_ddp(struct sk_buff *skb) | ||
979 | #define handle_ip_over_ddp(skb) 0 | ||
980 | #endif | ||
981 | |||
982 | -static void atalk_route_packet(struct sk_buff *skb, struct net_device *dev, | ||
983 | - struct ddpehdr *ddp, __u16 len_hops, | ||
984 | - int origlen) | ||
985 | +static int atalk_route_packet(struct sk_buff *skb, struct net_device *dev, | ||
986 | + struct ddpehdr *ddp, __u16 len_hops, int origlen) | ||
987 | { | ||
988 | struct atalk_route *rt; | ||
989 | struct atalk_addr ta; | ||
990 | @@ -1359,8 +1359,6 @@ static void atalk_route_packet(struct sk_buff *skb, struct net_device *dev, | ||
991 | /* 22 bytes - 12 ether, 2 len, 3 802.2 5 snap */ | ||
992 | struct sk_buff *nskb = skb_realloc_headroom(skb, 32); | ||
993 | kfree_skb(skb); | ||
994 | - if (!nskb) | ||
995 | - goto out; | ||
996 | skb = nskb; | ||
997 | } else | ||
998 | skb = skb_unshare(skb, GFP_ATOMIC); | ||
999 | @@ -1369,12 +1367,18 @@ static void atalk_route_packet(struct sk_buff *skb, struct net_device *dev, | ||
1000 | * If the buffer didn't vanish into the lack of space bitbucket we can | ||
1001 | * send it. | ||
1002 | */ | ||
1003 | - if (skb && aarp_send_ddp(rt->dev, skb, &ta, NULL) == -1) | ||
1004 | - goto free_it; | ||
1005 | -out: | ||
1006 | - return; | ||
1007 | + if (skb == NULL) | ||
1008 | + goto drop; | ||
1009 | + | ||
1010 | + /* | ||
1011 | + * It is OK, NET_XMIT_SUCCESS == NET_RX_SUCCESS and | ||
1012 | + * NET_XMIT_DROP == NET_RX_DROP | ||
1013 | + */ | ||
1014 | + return aarp_send_ddp(rt->dev, skb, &ta, NULL); | ||
1015 | free_it: | ||
1016 | kfree_skb(skb); | ||
1017 | +drop: | ||
1018 | + return NET_RX_DROP; | ||
1019 | } | ||
1020 | |||
1021 | /** | ||
1022 | @@ -1404,7 +1408,7 @@ static int atalk_rcv(struct sk_buff *skb, struct net_device *dev, | ||
1023 | |||
1024 | /* Don't mangle buffer if shared */ | ||
1025 | if (!(skb = skb_share_check(skb, GFP_ATOMIC))) | ||
1026 | - goto out; | ||
1027 | + goto drop; | ||
1028 | |||
1029 | /* Size check and make sure header is contiguous */ | ||
1030 | if (!pskb_may_pull(skb, sizeof(*ddp))) | ||
1031 | @@ -1448,8 +1452,7 @@ static int atalk_rcv(struct sk_buff *skb, struct net_device *dev, | ||
1032 | /* Not ours, so we route the packet via the correct | ||
1033 | * AppleTalk iface | ||
1034 | */ | ||
1035 | - atalk_route_packet(skb, dev, ddp, len_hops, origlen); | ||
1036 | - goto out; | ||
1037 | + return atalk_route_packet(skb, dev, ddp, len_hops, origlen); | ||
1038 | } | ||
1039 | |||
1040 | /* if IP over DDP is not selected this code will be optimized out */ | ||
1041 | @@ -1472,11 +1475,12 @@ static int atalk_rcv(struct sk_buff *skb, struct net_device *dev, | ||
1042 | |||
1043 | if (sock_queue_rcv_skb(sock, skb) < 0) | ||
1044 | goto freeit; | ||
1045 | -out: | ||
1046 | - return 0; | ||
1047 | + | ||
1048 | + return NET_RX_SUCCESS; | ||
1049 | freeit: | ||
1050 | kfree_skb(skb); | ||
1051 | - goto out; | ||
1052 | +drop: | ||
1053 | + return NET_RX_DROP; | ||
1054 | } | ||
1055 | |||
1056 | /* | ||
1057 | @@ -1652,10 +1656,10 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | ||
1058 | if (skb2) { | ||
1059 | loopback = 1; | ||
1060 | SOCK_DEBUG(sk, "SK %p: send out(copy).\n", sk); | ||
1061 | - if (aarp_send_ddp(dev, skb2, | ||
1062 | - &usat->sat_addr, NULL) == -1) | ||
1063 | - kfree_skb(skb2); | ||
1064 | - /* else queued/sent above in the aarp queue */ | ||
1065 | + /* | ||
1066 | + * If it fails it is queued/sent above in the aarp queue | ||
1067 | + */ | ||
1068 | + aarp_send_ddp(dev, skb2, &usat->sat_addr, NULL); | ||
1069 | } | ||
1070 | } | ||
1071 | |||
1072 | @@ -1685,9 +1689,10 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | ||
1073 | usat = &gsat; | ||
1074 | } | ||
1075 | |||
1076 | - if (aarp_send_ddp(dev, skb, &usat->sat_addr, NULL) == -1) | ||
1077 | - kfree_skb(skb); | ||
1078 | - /* else queued/sent above in the aarp queue */ | ||
1079 | + /* | ||
1080 | + * If it fails it is queued/sent above in the aarp queue | ||
1081 | + */ | ||
1082 | + aarp_send_ddp(dev, skb, &usat->sat_addr, NULL); | ||
1083 | } | ||
1084 | SOCK_DEBUG(sk, "SK %p: Done write (%Zd).\n", sk, len); | ||
1085 | |||
1086 | @@ -1865,7 +1870,6 @@ static struct packet_type ppptalk_packet_type __read_mostly = { | ||
1087 | static unsigned char ddp_snap_id[] = { 0x08, 0x00, 0x07, 0x80, 0x9B }; | ||
1088 | |||
1089 | /* Export symbols for use by drivers when AppleTalk is a module */ | ||
1090 | -EXPORT_SYMBOL(aarp_send_ddp); | ||
1091 | EXPORT_SYMBOL(atrtr_get_dev); | ||
1092 | EXPORT_SYMBOL(atalk_find_dev_addr); | ||
1093 | |||
1094 | diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c | ||
1095 | index f03529c..f8969fe 100644 | ||
1096 | --- a/net/ax25/af_ax25.c | ||
1097 | +++ b/net/ax25/af_ax25.c | ||
1098 | @@ -893,7 +893,6 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) | ||
1099 | |||
1100 | sock_init_data(NULL, sk); | ||
1101 | |||
1102 | - sk->sk_destruct = ax25_free_sock; | ||
1103 | sk->sk_type = osk->sk_type; | ||
1104 | sk->sk_priority = osk->sk_priority; | ||
1105 | sk->sk_protocol = osk->sk_protocol; | ||
1106 | @@ -931,6 +930,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) | ||
1107 | } | ||
1108 | |||
1109 | sk->sk_protinfo = ax25; | ||
1110 | + sk->sk_destruct = ax25_free_sock; | ||
1111 | ax25->sk = sk; | ||
1112 | |||
1113 | return sk; | ||
1114 | @@ -1781,8 +1781,8 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | ||
1115 | ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ); | ||
1116 | ax25_info.n2count = ax25->n2count; | ||
1117 | ax25_info.state = ax25->state; | ||
1118 | - ax25_info.rcv_q = sk_wmem_alloc_get(sk); | ||
1119 | - ax25_info.snd_q = sk_rmem_alloc_get(sk); | ||
1120 | + ax25_info.rcv_q = sk_rmem_alloc_get(sk); | ||
1121 | + ax25_info.snd_q = sk_wmem_alloc_get(sk); | ||
1122 | ax25_info.vs = ax25->vs; | ||
1123 | ax25_info.vr = ax25->vr; | ||
1124 | ax25_info.va = ax25->va; | ||
1125 | diff --git a/net/core/dev.c b/net/core/dev.c | ||
1126 | index 6a94475..a2f575b 100644 | ||
1127 | --- a/net/core/dev.c | ||
1128 | +++ b/net/core/dev.c | ||
1129 | @@ -2248,6 +2248,9 @@ int netif_receive_skb(struct sk_buff *skb) | ||
1130 | int ret = NET_RX_DROP; | ||
1131 | __be16 type; | ||
1132 | |||
1133 | + if (!skb->tstamp.tv64) | ||
1134 | + net_timestamp(skb); | ||
1135 | + | ||
1136 | if (skb->vlan_tci && vlan_hwaccel_do_receive(skb)) | ||
1137 | return NET_RX_SUCCESS; | ||
1138 | |||
1139 | @@ -2255,9 +2258,6 @@ int netif_receive_skb(struct sk_buff *skb) | ||
1140 | if (netpoll_receive_skb(skb)) | ||
1141 | return NET_RX_DROP; | ||
1142 | |||
1143 | - if (!skb->tstamp.tv64) | ||
1144 | - net_timestamp(skb); | ||
1145 | - | ||
1146 | if (!skb->iif) | ||
1147 | skb->iif = skb->dev->ifindex; | ||
1148 | |||
1149 | diff --git a/net/core/sock.c b/net/core/sock.c | ||
1150 | index 7633422..dd120d8 100644 | ||
1151 | --- a/net/core/sock.c | ||
1152 | +++ b/net/core/sock.c | ||
1153 | @@ -1218,17 +1218,22 @@ void __init sk_init(void) | ||
1154 | void sock_wfree(struct sk_buff *skb) | ||
1155 | { | ||
1156 | struct sock *sk = skb->sk; | ||
1157 | - int res; | ||
1158 | + unsigned int len = skb->truesize; | ||
1159 | |||
1160 | - /* In case it might be waiting for more memory. */ | ||
1161 | - res = atomic_sub_return(skb->truesize, &sk->sk_wmem_alloc); | ||
1162 | - if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) | ||
1163 | + if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) { | ||
1164 | + /* | ||
1165 | + * Keep a reference on sk_wmem_alloc, this will be released | ||
1166 | + * after sk_write_space() call | ||
1167 | + */ | ||
1168 | + atomic_sub(len - 1, &sk->sk_wmem_alloc); | ||
1169 | sk->sk_write_space(sk); | ||
1170 | + len = 1; | ||
1171 | + } | ||
1172 | /* | ||
1173 | - * if sk_wmem_alloc reached 0, we are last user and should | ||
1174 | - * free this sock, as sk_free() call could not do it. | ||
1175 | + * if sk_wmem_alloc reaches 0, we must finish what sk_free() | ||
1176 | + * could not do because of in-flight packets | ||
1177 | */ | ||
1178 | - if (res == 0) | ||
1179 | + if (atomic_sub_and_test(len, &sk->sk_wmem_alloc)) | ||
1180 | __sk_free(sk); | ||
1181 | } | ||
1182 | EXPORT_SYMBOL(sock_wfree); | ||
1183 | diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c | ||
1184 | index f8d67cc..96440e5 100644 | ||
1185 | --- a/net/ipv4/tcp_minisocks.c | ||
1186 | +++ b/net/ipv4/tcp_minisocks.c | ||
1187 | @@ -363,7 +363,7 @@ void tcp_twsk_destructor(struct sock *sk) | ||
1188 | #ifdef CONFIG_TCP_MD5SIG | ||
1189 | struct tcp_timewait_sock *twsk = tcp_twsk(sk); | ||
1190 | if (twsk->tw_md5_keylen) | ||
1191 | - tcp_put_md5sig_pool(); | ||
1192 | + tcp_free_md5sig_pool(); | ||
1193 | #endif | ||
1194 | } | ||
1195 | |||
1196 | diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c | ||
1197 | index 98b7327..2e41849 100644 | ||
1198 | --- a/net/ipv6/sit.c | ||
1199 | +++ b/net/ipv6/sit.c | ||
1200 | @@ -313,7 +313,7 @@ static int ipip6_tunnel_get_prl(struct ip_tunnel *t, | ||
1201 | |||
1202 | c = 0; | ||
1203 | for (prl = t->prl; prl; prl = prl->next) { | ||
1204 | - if (c > cmax) | ||
1205 | + if (c >= cmax) | ||
1206 | break; | ||
1207 | if (kprl.addr != htonl(INADDR_ANY) && prl->addr != kprl.addr) | ||
1208 | continue; | ||
1209 | diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c | ||
1210 | index fc3ebb9..51ab497 100644 | ||
1211 | --- a/net/unix/af_unix.c | ||
1212 | +++ b/net/unix/af_unix.c | ||
1213 | @@ -1501,6 +1501,7 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, | ||
1214 | struct sk_buff *skb; | ||
1215 | int sent = 0; | ||
1216 | struct scm_cookie tmp_scm; | ||
1217 | + bool fds_sent = false; | ||
1218 | |||
1219 | if (NULL == siocb->scm) | ||
1220 | siocb->scm = &tmp_scm; | ||
1221 | @@ -1562,12 +1563,14 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, | ||
1222 | size = min_t(int, size, skb_tailroom(skb)); | ||
1223 | |||
1224 | memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred)); | ||
1225 | - if (siocb->scm->fp) { | ||
1226 | + /* Only send the fds in the first buffer */ | ||
1227 | + if (siocb->scm->fp && !fds_sent) { | ||
1228 | err = unix_attach_fds(siocb->scm, skb); | ||
1229 | if (err) { | ||
1230 | kfree_skb(skb); | ||
1231 | goto out_err; | ||
1232 | } | ||
1233 | + fds_sent = true; | ||
1234 | } | ||
1235 | |||
1236 | err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size); | ||
1237 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
1238 | index 30eeb30..713bf69 100644 | ||
1239 | --- a/sound/pci/hda/patch_realtek.c | ||
1240 | +++ b/sound/pci/hda/patch_realtek.c | ||
1241 | @@ -16876,6 +16876,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = { | ||
1242 | SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_ECS), | ||
1243 | SND_PCI_QUIRK(0x105b, 0x0d47, "Foxconn 45CMX/45GMX/45CMX-K", | ||
1244 | ALC662_3ST_6ch_DIG), | ||
1245 | + SND_PCI_QUIRK(0x1179, 0xff6e, "Toshiba NB200", ALC663_ASUS_MODE4), | ||
1246 | SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10), | ||
1247 | SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L", | ||
1248 | ALC662_3ST_6ch_DIG), | ||
1249 | diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c | ||
1250 | index acfa476..91683a3 100644 | ||
1251 | --- a/sound/pci/via82xx.c | ||
1252 | +++ b/sound/pci/via82xx.c | ||
1253 | @@ -1626,7 +1626,7 @@ static int snd_via8233_dxs_volume_get(struct snd_kcontrol *kcontrol, | ||
1254 | struct snd_ctl_elem_value *ucontrol) | ||
1255 | { | ||
1256 | struct via82xx *chip = snd_kcontrol_chip(kcontrol); | ||
1257 | - unsigned int idx = snd_ctl_get_ioff(kcontrol, &ucontrol->id); | ||
1258 | + unsigned int idx = kcontrol->id.subdevice; | ||
1259 | |||
1260 | ucontrol->value.integer.value[0] = VIA_DXS_MAX_VOLUME - chip->playback_volume[idx][0]; | ||
1261 | ucontrol->value.integer.value[1] = VIA_DXS_MAX_VOLUME - chip->playback_volume[idx][1]; | ||
1262 | @@ -1646,7 +1646,7 @@ static int snd_via8233_dxs_volume_put(struct snd_kcontrol *kcontrol, | ||
1263 | struct snd_ctl_elem_value *ucontrol) | ||
1264 | { | ||
1265 | struct via82xx *chip = snd_kcontrol_chip(kcontrol); | ||
1266 | - unsigned int idx = snd_ctl_get_ioff(kcontrol, &ucontrol->id); | ||
1267 | + unsigned int idx = kcontrol->id.subdevice; | ||
1268 | unsigned long port = chip->port + 0x10 * idx; | ||
1269 | unsigned char val; | ||
1270 | int i, change = 0; | ||
1271 | @@ -1705,11 +1705,12 @@ static struct snd_kcontrol_new snd_via8233_pcmdxs_volume_control __devinitdata = | ||
1272 | }; | ||
1273 | |||
1274 | static struct snd_kcontrol_new snd_via8233_dxs_volume_control __devinitdata = { | ||
1275 | - .name = "VIA DXS Playback Volume", | ||
1276 | - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
1277 | + .iface = SNDRV_CTL_ELEM_IFACE_PCM, | ||
1278 | + .device = 0, | ||
1279 | + /* .subdevice set later */ | ||
1280 | + .name = "PCM Playback Volume", | ||
1281 | .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | | ||
1282 | SNDRV_CTL_ELEM_ACCESS_TLV_READ), | ||
1283 | - .count = 4, | ||
1284 | .info = snd_via8233_dxs_volume_info, | ||
1285 | .get = snd_via8233_dxs_volume_get, | ||
1286 | .put = snd_via8233_dxs_volume_put, | ||
1287 | @@ -1936,10 +1937,18 @@ static int __devinit snd_via8233_init_misc(struct via82xx *chip) | ||
1288 | } | ||
1289 | else /* Using DXS when PCM emulation is enabled is really weird */ | ||
1290 | { | ||
1291 | - /* Standalone DXS controls */ | ||
1292 | - err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs_volume_control, chip)); | ||
1293 | - if (err < 0) | ||
1294 | - return err; | ||
1295 | + for (i = 0; i < 4; ++i) { | ||
1296 | + struct snd_kcontrol *kctl; | ||
1297 | + | ||
1298 | + kctl = snd_ctl_new1( | ||
1299 | + &snd_via8233_dxs_volume_control, chip); | ||
1300 | + if (!kctl) | ||
1301 | + return -ENOMEM; | ||
1302 | + kctl->id.subdevice = i; | ||
1303 | + err = snd_ctl_add(chip->card, kctl); | ||
1304 | + if (err < 0) | ||
1305 | + return err; | ||
1306 | + } | ||
1307 | } | ||
1308 | } | ||
1309 | /* select spdif data slot 10/11 */ | ||
1310 | diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c | ||
1311 | index b3a2de8..003b742 100644 | ||
1312 | --- a/sound/soc/codecs/wm8350.c | ||
1313 | +++ b/sound/soc/codecs/wm8350.c | ||
1314 | @@ -580,7 +580,7 @@ static const struct snd_kcontrol_new wm8350_left_capt_mixer_controls[] = { | ||
1315 | SOC_DAPM_SINGLE_TLV("L3 Capture Volume", | ||
1316 | WM8350_INPUT_MIXER_VOLUME_L, 9, 7, 0, out_mix_tlv), | ||
1317 | SOC_DAPM_SINGLE("PGA Capture Switch", | ||
1318 | - WM8350_LEFT_INPUT_VOLUME, 14, 1, 0), | ||
1319 | + WM8350_LEFT_INPUT_VOLUME, 14, 1, 1), | ||
1320 | }; | ||
1321 | |||
1322 | /* Right Input Mixer */ | ||
1323 | @@ -590,7 +590,7 @@ static const struct snd_kcontrol_new wm8350_right_capt_mixer_controls[] = { | ||
1324 | SOC_DAPM_SINGLE_TLV("L3 Capture Volume", | ||
1325 | WM8350_INPUT_MIXER_VOLUME_R, 13, 7, 0, out_mix_tlv), | ||
1326 | SOC_DAPM_SINGLE("PGA Capture Switch", | ||
1327 | - WM8350_RIGHT_INPUT_VOLUME, 14, 1, 0), | ||
1328 | + WM8350_RIGHT_INPUT_VOLUME, 14, 1, 1), | ||
1329 | }; | ||
1330 | |||
1331 | /* Left Mic Mixer */ |