Magellan Linux

Contents of /trunk/kernel-alx/patches-3.4/0110-3.4.11-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1945 - (show annotations) (download)
Wed Nov 14 15:23:43 2012 UTC (11 years, 5 months ago) by niro
File size: 83653 byte(s)
3.4.18-alx-r1
1 diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801
2 index 71f55bb..99d4e44 100644
3 --- a/Documentation/i2c/busses/i2c-i801
4 +++ b/Documentation/i2c/busses/i2c-i801
5 @@ -21,6 +21,7 @@ Supported adapters:
6 * Intel DH89xxCC (PCH)
7 * Intel Panther Point (PCH)
8 * Intel Lynx Point (PCH)
9 + * Intel Lynx Point-LP (PCH)
10 Datasheets: Publicly available at the Intel website
11
12 On Intel Patsburg and later chipsets, both the normal host SMBus controller
13 diff --git a/arch/alpha/include/asm/fpu.h b/arch/alpha/include/asm/fpu.h
14 index db00f78..e477bcd 100644
15 --- a/arch/alpha/include/asm/fpu.h
16 +++ b/arch/alpha/include/asm/fpu.h
17 @@ -1,7 +1,9 @@
18 #ifndef __ASM_ALPHA_FPU_H
19 #define __ASM_ALPHA_FPU_H
20
21 +#ifdef __KERNEL__
22 #include <asm/special_insns.h>
23 +#endif
24
25 /*
26 * Alpha floating-point control register defines:
27 diff --git a/arch/alpha/include/asm/socket.h b/arch/alpha/include/asm/socket.h
28 index dcb221a..7d2f75b 100644
29 --- a/arch/alpha/include/asm/socket.h
30 +++ b/arch/alpha/include/asm/socket.h
31 @@ -76,9 +76,11 @@
32 /* Instruct lower device to use last 4-bytes of skb data as FCS */
33 #define SO_NOFCS 43
34
35 +#ifdef __KERNEL__
36 /* O_NONBLOCK clashes with the bits used for socket types. Therefore we
37 * have to define SOCK_NONBLOCK to a different value here.
38 */
39 #define SOCK_NONBLOCK 0x40000000
40 +#endif /* __KERNEL__ */
41
42 #endif /* _ASM_SOCKET_H */
43 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
44 index 7a8660a..352322a 100644
45 --- a/arch/arm/Kconfig
46 +++ b/arch/arm/Kconfig
47 @@ -2113,6 +2113,7 @@ source "drivers/cpufreq/Kconfig"
48 config CPU_FREQ_IMX
49 tristate "CPUfreq driver for i.MX CPUs"
50 depends on ARCH_MXC && CPU_FREQ
51 + select CPU_FREQ_TABLE
52 help
53 This enables the CPUfreq driver for i.MX CPUs.
54
55 diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
56 index f66626d..41dc31f 100644
57 --- a/arch/arm/include/asm/pgtable.h
58 +++ b/arch/arm/include/asm/pgtable.h
59 @@ -195,6 +195,18 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
60
61 #define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0)
62
63 +#define pte_none(pte) (!pte_val(pte))
64 +#define pte_present(pte) (pte_val(pte) & L_PTE_PRESENT)
65 +#define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY))
66 +#define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY)
67 +#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG)
68 +#define pte_exec(pte) (!(pte_val(pte) & L_PTE_XN))
69 +#define pte_special(pte) (0)
70 +
71 +#define pte_present_user(pte) \
72 + ((pte_val(pte) & (L_PTE_PRESENT | L_PTE_USER)) == \
73 + (L_PTE_PRESENT | L_PTE_USER))
74 +
75 #if __LINUX_ARM_ARCH__ < 6
76 static inline void __sync_icache_dcache(pte_t pteval)
77 {
78 @@ -206,25 +218,15 @@ extern void __sync_icache_dcache(pte_t pteval);
79 static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
80 pte_t *ptep, pte_t pteval)
81 {
82 - if (addr >= TASK_SIZE)
83 - set_pte_ext(ptep, pteval, 0);
84 - else {
85 + unsigned long ext = 0;
86 +
87 + if (addr < TASK_SIZE && pte_present_user(pteval)) {
88 __sync_icache_dcache(pteval);
89 - set_pte_ext(ptep, pteval, PTE_EXT_NG);
90 + ext |= PTE_EXT_NG;
91 }
92 -}
93
94 -#define pte_none(pte) (!pte_val(pte))
95 -#define pte_present(pte) (pte_val(pte) & L_PTE_PRESENT)
96 -#define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY))
97 -#define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY)
98 -#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG)
99 -#define pte_exec(pte) (!(pte_val(pte) & L_PTE_XN))
100 -#define pte_special(pte) (0)
101 -
102 -#define pte_present_user(pte) \
103 - ((pte_val(pte) & (L_PTE_PRESENT | L_PTE_USER)) == \
104 - (L_PTE_PRESENT | L_PTE_USER))
105 + set_pte_ext(ptep, pteval, ext);
106 +}
107
108 #define PTE_BIT_FUNC(fn,op) \
109 static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
110 @@ -251,13 +253,13 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
111 *
112 * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
113 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
114 - * <--------------- offset --------------------> <- type --> 0 0 0
115 + * <--------------- offset ----------------------> < type -> 0 0 0
116 *
117 - * This gives us up to 63 swap files and 32GB per swap file. Note that
118 + * This gives us up to 31 swap files and 64GB per swap file. Note that
119 * the offset field is always non-zero.
120 */
121 #define __SWP_TYPE_SHIFT 3
122 -#define __SWP_TYPE_BITS 6
123 +#define __SWP_TYPE_BITS 5
124 #define __SWP_TYPE_MASK ((1 << __SWP_TYPE_BITS) - 1)
125 #define __SWP_OFFSET_SHIFT (__SWP_TYPE_BITS + __SWP_TYPE_SHIFT)
126
127 diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c
128 index 20ed2d5..f8f7437 100644
129 --- a/arch/arm/mach-imx/hotplug.c
130 +++ b/arch/arm/mach-imx/hotplug.c
131 @@ -42,22 +42,6 @@ static inline void cpu_enter_lowpower(void)
132 : "cc");
133 }
134
135 -static inline void cpu_leave_lowpower(void)
136 -{
137 - unsigned int v;
138 -
139 - asm volatile(
140 - "mrc p15, 0, %0, c1, c0, 0\n"
141 - " orr %0, %0, %1\n"
142 - " mcr p15, 0, %0, c1, c0, 0\n"
143 - " mrc p15, 0, %0, c1, c0, 1\n"
144 - " orr %0, %0, %2\n"
145 - " mcr p15, 0, %0, c1, c0, 1\n"
146 - : "=&r" (v)
147 - : "Ir" (CR_C), "Ir" (0x40)
148 - : "cc");
149 -}
150 -
151 /*
152 * platform-specific code to shutdown a CPU
153 *
154 @@ -67,11 +51,10 @@ void platform_cpu_die(unsigned int cpu)
155 {
156 cpu_enter_lowpower();
157 imx_enable_cpu(cpu, false);
158 - cpu_do_idle();
159 - cpu_leave_lowpower();
160
161 - /* We should never return from idle */
162 - panic("cpu %d unexpectedly exit from shutdown\n", cpu);
163 + /* spin here until hardware takes it down */
164 + while (1)
165 + ;
166 }
167
168 int platform_cpu_disable(unsigned int cpu)
169 diff --git a/arch/arm/mach-s3c24xx/include/mach/dma.h b/arch/arm/mach-s3c24xx/include/mach/dma.h
170 index acbdfec..ccaaafc 100644
171 --- a/arch/arm/mach-s3c24xx/include/mach/dma.h
172 +++ b/arch/arm/mach-s3c24xx/include/mach/dma.h
173 @@ -24,7 +24,8 @@
174 */
175
176 enum dma_ch {
177 - DMACH_XD0,
178 + DMACH_DT_PROP = -1, /* not yet supported, do not use */
179 + DMACH_XD0 = 0,
180 DMACH_XD1,
181 DMACH_SDI,
182 DMACH_SPI0,
183 diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
184 index 7745854..40ca11e 100644
185 --- a/arch/arm/mm/flush.c
186 +++ b/arch/arm/mm/flush.c
187 @@ -231,8 +231,6 @@ void __sync_icache_dcache(pte_t pteval)
188 struct page *page;
189 struct address_space *mapping;
190
191 - if (!pte_present_user(pteval))
192 - return;
193 if (cache_is_vipt_nonaliasing() && !pte_exec(pteval))
194 /* only flush non-aliasing VIPT caches for exec mappings */
195 return;
196 diff --git a/arch/arm/mm/tlb-v7.S b/arch/arm/mm/tlb-v7.S
197 index c202113..ea94765 100644
198 --- a/arch/arm/mm/tlb-v7.S
199 +++ b/arch/arm/mm/tlb-v7.S
200 @@ -38,10 +38,10 @@ ENTRY(v7wbi_flush_user_tlb_range)
201 dsb
202 mov r0, r0, lsr #PAGE_SHIFT @ align address
203 mov r1, r1, lsr #PAGE_SHIFT
204 -#ifdef CONFIG_ARM_ERRATA_720789
205 - mov r3, #0
206 -#else
207 asid r3, r3 @ mask ASID
208 +#ifdef CONFIG_ARM_ERRATA_720789
209 + ALT_SMP(W(mov) r3, #0 )
210 + ALT_UP(W(nop) )
211 #endif
212 orr r0, r3, r0, lsl #PAGE_SHIFT @ Create initial MVA
213 mov r1, r1, lsl #PAGE_SHIFT
214 diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
215 index 652139c..7ac301e 100644
216 --- a/arch/arm/plat-omap/dmtimer.c
217 +++ b/arch/arm/plat-omap/dmtimer.c
218 @@ -238,7 +238,7 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_enable);
219
220 void omap_dm_timer_disable(struct omap_dm_timer *timer)
221 {
222 - pm_runtime_put(&timer->pdev->dev);
223 + pm_runtime_put_sync(&timer->pdev->dev);
224 }
225 EXPORT_SYMBOL_GPL(omap_dm_timer_disable);
226
227 diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/plat-s3c24xx/dma.c
228 index 28f898f..db98e70 100644
229 --- a/arch/arm/plat-s3c24xx/dma.c
230 +++ b/arch/arm/plat-s3c24xx/dma.c
231 @@ -430,7 +430,7 @@ s3c2410_dma_canload(struct s3c2410_dma_chan *chan)
232 * when necessary.
233 */
234
235 -int s3c2410_dma_enqueue(unsigned int channel, void *id,
236 +int s3c2410_dma_enqueue(enum dma_ch channel, void *id,
237 dma_addr_t data, int size)
238 {
239 struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel);
240 diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
241 index 1ef803a..1f8241d 100644
242 --- a/arch/arm/vfp/vfpmodule.c
243 +++ b/arch/arm/vfp/vfpmodule.c
244 @@ -719,8 +719,10 @@ static int __init vfp_init(void)
245 if ((fmrx(MVFR1) & 0x000fff00) == 0x00011100)
246 elf_hwcap |= HWCAP_NEON;
247 #endif
248 +#ifdef CONFIG_VFPv3
249 if ((fmrx(MVFR1) & 0xf0000000) == 0x10000000)
250 elf_hwcap |= HWCAP_VFPv4;
251 +#endif
252 }
253 }
254 return 0;
255 diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h
256 index 6c6defc..af9cf30 100644
257 --- a/arch/parisc/include/asm/atomic.h
258 +++ b/arch/parisc/include/asm/atomic.h
259 @@ -141,7 +141,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
260
261 #define atomic_sub_and_test(i,v) (atomic_sub_return((i),(v)) == 0)
262
263 -#define ATOMIC_INIT(i) ((atomic_t) { (i) })
264 +#define ATOMIC_INIT(i) { (i) }
265
266 #define smp_mb__before_atomic_dec() smp_mb()
267 #define smp_mb__after_atomic_dec() smp_mb()
268 @@ -150,7 +150,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
269
270 #ifdef CONFIG_64BIT
271
272 -#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
273 +#define ATOMIC64_INIT(i) { (i) }
274
275 static __inline__ s64
276 __atomic64_add_return(s64 i, atomic64_t *v)
277 diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
278 index 34b8afe9..ec0b529 100644
279 --- a/arch/powerpc/kernel/asm-offsets.c
280 +++ b/arch/powerpc/kernel/asm-offsets.c
281 @@ -76,6 +76,7 @@ int main(void)
282 DEFINE(SIGSEGV, SIGSEGV);
283 DEFINE(NMI_MASK, NMI_MASK);
284 DEFINE(THREAD_DSCR, offsetof(struct thread_struct, dscr));
285 + DEFINE(THREAD_DSCR_INHERIT, offsetof(struct thread_struct, dscr_inherit));
286 #else
287 DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
288 #endif /* CONFIG_PPC64 */
289 diff --git a/arch/powerpc/kernel/dbell.c b/arch/powerpc/kernel/dbell.c
290 index 5b25c80..a892680 100644
291 --- a/arch/powerpc/kernel/dbell.c
292 +++ b/arch/powerpc/kernel/dbell.c
293 @@ -28,6 +28,8 @@ void doorbell_setup_this_cpu(void)
294
295 void doorbell_cause_ipi(int cpu, unsigned long data)
296 {
297 + /* Order previous accesses vs. msgsnd, which is treated as a store */
298 + mb();
299 ppc_msgsnd(PPC_DBELL, 0, data);
300 }
301
302 diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
303 index ef2074c..e500969 100644
304 --- a/arch/powerpc/kernel/entry_64.S
305 +++ b/arch/powerpc/kernel/entry_64.S
306 @@ -373,6 +373,12 @@ _GLOBAL(ret_from_fork)
307 li r3,0
308 b syscall_exit
309
310 + .section ".toc","aw"
311 +DSCR_DEFAULT:
312 + .tc dscr_default[TC],dscr_default
313 +
314 + .section ".text"
315 +
316 /*
317 * This routine switches between two different tasks. The process
318 * state of one is saved on its kernel stack. Then the state
319 @@ -512,9 +518,6 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
320 mr r1,r8 /* start using new stack pointer */
321 std r7,PACAKSAVE(r13)
322
323 - ld r6,_CCR(r1)
324 - mtcrf 0xFF,r6
325 -
326 #ifdef CONFIG_ALTIVEC
327 BEGIN_FTR_SECTION
328 ld r0,THREAD_VRSAVE(r4)
329 @@ -523,14 +526,22 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
330 #endif /* CONFIG_ALTIVEC */
331 #ifdef CONFIG_PPC64
332 BEGIN_FTR_SECTION
333 + lwz r6,THREAD_DSCR_INHERIT(r4)
334 + ld r7,DSCR_DEFAULT@toc(2)
335 ld r0,THREAD_DSCR(r4)
336 - cmpd r0,r25
337 - beq 1f
338 + cmpwi r6,0
339 + bne 1f
340 + ld r0,0(r7)
341 +1: cmpd r0,r25
342 + beq 2f
343 mtspr SPRN_DSCR,r0
344 -1:
345 +2:
346 END_FTR_SECTION_IFSET(CPU_FTR_DSCR)
347 #endif
348
349 + ld r6,_CCR(r1)
350 + mtcrf 0xFF,r6
351 +
352 /* r3-r13 are destroyed -- Cort */
353 REST_8GPRS(14, r1)
354 REST_10GPRS(22, r1)
355 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
356 index 4937c96..94178e5 100644
357 --- a/arch/powerpc/kernel/process.c
358 +++ b/arch/powerpc/kernel/process.c
359 @@ -799,16 +799,8 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
360 #endif /* CONFIG_PPC_STD_MMU_64 */
361 #ifdef CONFIG_PPC64
362 if (cpu_has_feature(CPU_FTR_DSCR)) {
363 - if (current->thread.dscr_inherit) {
364 - p->thread.dscr_inherit = 1;
365 - p->thread.dscr = current->thread.dscr;
366 - } else if (0 != dscr_default) {
367 - p->thread.dscr_inherit = 1;
368 - p->thread.dscr = dscr_default;
369 - } else {
370 - p->thread.dscr_inherit = 0;
371 - p->thread.dscr = 0;
372 - }
373 + p->thread.dscr_inherit = current->thread.dscr_inherit;
374 + p->thread.dscr = current->thread.dscr;
375 }
376 #endif
377
378 diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
379 index d9f9441..ab24aee 100644
380 --- a/arch/powerpc/kernel/smp.c
381 +++ b/arch/powerpc/kernel/smp.c
382 @@ -215,8 +215,15 @@ void smp_muxed_ipi_message_pass(int cpu, int msg)
383 struct cpu_messages *info = &per_cpu(ipi_message, cpu);
384 char *message = (char *)&info->messages;
385
386 + /*
387 + * Order previous accesses before accesses in the IPI handler.
388 + */
389 + smp_mb();
390 message[msg] = 1;
391 - mb();
392 + /*
393 + * cause_ipi functions are required to include a full barrier
394 + * before doing whatever causes the IPI.
395 + */
396 smp_ops->cause_ipi(cpu, info->data);
397 }
398
399 @@ -228,7 +235,7 @@ irqreturn_t smp_ipi_demux(void)
400 mb(); /* order any irq clear */
401
402 do {
403 - all = xchg_local(&info->messages, 0);
404 + all = xchg(&info->messages, 0);
405
406 #ifdef __BIG_ENDIAN
407 if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNCTION)))
408 diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
409 index 3529446..8302af6 100644
410 --- a/arch/powerpc/kernel/sysfs.c
411 +++ b/arch/powerpc/kernel/sysfs.c
412 @@ -194,6 +194,14 @@ static ssize_t show_dscr_default(struct device *dev,
413 return sprintf(buf, "%lx\n", dscr_default);
414 }
415
416 +static void update_dscr(void *dummy)
417 +{
418 + if (!current->thread.dscr_inherit) {
419 + current->thread.dscr = dscr_default;
420 + mtspr(SPRN_DSCR, dscr_default);
421 + }
422 +}
423 +
424 static ssize_t __used store_dscr_default(struct device *dev,
425 struct device_attribute *attr, const char *buf,
426 size_t count)
427 @@ -206,6 +214,8 @@ static ssize_t __used store_dscr_default(struct device *dev,
428 return -EINVAL;
429 dscr_default = val;
430
431 + on_each_cpu(update_dscr, NULL, 1);
432 +
433 return count;
434 }
435
436 diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
437 index 1589723..ae0843f 100644
438 --- a/arch/powerpc/kernel/traps.c
439 +++ b/arch/powerpc/kernel/traps.c
440 @@ -972,8 +972,9 @@ static int emulate_instruction(struct pt_regs *regs)
441 cpu_has_feature(CPU_FTR_DSCR)) {
442 PPC_WARN_EMULATED(mtdscr, regs);
443 rd = (instword >> 21) & 0x1f;
444 - mtspr(SPRN_DSCR, regs->gpr[rd]);
445 + current->thread.dscr = regs->gpr[rd];
446 current->thread.dscr_inherit = 1;
447 + mtspr(SPRN_DSCR, current->thread.dscr);
448 return 0;
449 }
450 #endif
451 diff --git a/arch/powerpc/sysdev/xics/icp-hv.c b/arch/powerpc/sysdev/xics/icp-hv.c
452 index 253dce9..762c5ca 100644
453 --- a/arch/powerpc/sysdev/xics/icp-hv.c
454 +++ b/arch/powerpc/sysdev/xics/icp-hv.c
455 @@ -65,7 +65,11 @@ static inline void icp_hv_set_xirr(unsigned int value)
456 static inline void icp_hv_set_qirr(int n_cpu , u8 value)
457 {
458 int hw_cpu = get_hard_smp_processor_id(n_cpu);
459 - long rc = plpar_hcall_norets(H_IPI, hw_cpu, value);
460 + long rc;
461 +
462 + /* Make sure all previous accesses are ordered before IPI sending */
463 + mb();
464 + rc = plpar_hcall_norets(H_IPI, hw_cpu, value);
465 if (rc != H_SUCCESS) {
466 pr_err("%s: bad return code qirr cpu=%d hw_cpu=%d mfrr=0x%x "
467 "returned %ld\n", __func__, n_cpu, hw_cpu, value, rc);
468 diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c
469 index 8a2ce8f..82746f9 100644
470 --- a/arch/x86/kernel/microcode_amd.c
471 +++ b/arch/x86/kernel/microcode_amd.c
472 @@ -143,11 +143,12 @@ static int get_matching_microcode(int cpu, const u8 *ucode_ptr,
473 unsigned int *current_size)
474 {
475 struct microcode_header_amd *mc_hdr;
476 - unsigned int actual_size;
477 + unsigned int actual_size, patch_size;
478 u16 equiv_cpu_id;
479
480 /* size of the current patch we're staring at */
481 - *current_size = *(u32 *)(ucode_ptr + 4) + SECTION_HDR_SIZE;
482 + patch_size = *(u32 *)(ucode_ptr + 4);
483 + *current_size = patch_size + SECTION_HDR_SIZE;
484
485 equiv_cpu_id = find_equiv_id();
486 if (!equiv_cpu_id)
487 @@ -174,7 +175,7 @@ static int get_matching_microcode(int cpu, const u8 *ucode_ptr,
488 /*
489 * now that the header looks sane, verify its size
490 */
491 - actual_size = verify_ucode_size(cpu, *current_size, leftover_size);
492 + actual_size = verify_ucode_size(cpu, patch_size, leftover_size);
493 if (!actual_size)
494 return 0;
495
496 diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
497 index f6679a7..b91e485 100644
498 --- a/arch/x86/mm/hugetlbpage.c
499 +++ b/arch/x86/mm/hugetlbpage.c
500 @@ -56,9 +56,16 @@ static int vma_shareable(struct vm_area_struct *vma, unsigned long addr)
501 }
502
503 /*
504 - * search for a shareable pmd page for hugetlb.
505 + * Search for a shareable pmd page for hugetlb. In any case calls pmd_alloc()
506 + * and returns the corresponding pte. While this is not necessary for the
507 + * !shared pmd case because we can allocate the pmd later as well, it makes the
508 + * code much cleaner. pmd allocation is essential for the shared case because
509 + * pud has to be populated inside the same i_mmap_mutex section - otherwise
510 + * racing tasks could either miss the sharing (see huge_pte_offset) or select a
511 + * bad pmd for sharing.
512 */
513 -static void huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
514 +static pte_t *
515 +huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
516 {
517 struct vm_area_struct *vma = find_vma(mm, addr);
518 struct address_space *mapping = vma->vm_file->f_mapping;
519 @@ -68,9 +75,10 @@ static void huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
520 struct vm_area_struct *svma;
521 unsigned long saddr;
522 pte_t *spte = NULL;
523 + pte_t *pte;
524
525 if (!vma_shareable(vma, addr))
526 - return;
527 + return (pte_t *)pmd_alloc(mm, pud, addr);
528
529 mutex_lock(&mapping->i_mmap_mutex);
530 vma_prio_tree_foreach(svma, &iter, &mapping->i_mmap, idx, idx) {
531 @@ -97,7 +105,9 @@ static void huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
532 put_page(virt_to_page(spte));
533 spin_unlock(&mm->page_table_lock);
534 out:
535 + pte = (pte_t *)pmd_alloc(mm, pud, addr);
536 mutex_unlock(&mapping->i_mmap_mutex);
537 + return pte;
538 }
539
540 /*
541 @@ -142,8 +152,9 @@ pte_t *huge_pte_alloc(struct mm_struct *mm,
542 } else {
543 BUG_ON(sz != PMD_SIZE);
544 if (pud_none(*pud))
545 - huge_pmd_share(mm, addr, pud);
546 - pte = (pte_t *) pmd_alloc(mm, pud, addr);
547 + pte = huge_pmd_share(mm, addr, pud);
548 + else
549 + pte = (pte_t *)pmd_alloc(mm, pud, addr);
550 }
551 }
552 BUG_ON(pte && !pte_none(*pte) && !pte_huge(*pte));
553 diff --git a/arch/x86/syscalls/syscall_64.tbl b/arch/x86/syscalls/syscall_64.tbl
554 index dd29a9e..fd1f103 100644
555 --- a/arch/x86/syscalls/syscall_64.tbl
556 +++ b/arch/x86/syscalls/syscall_64.tbl
557 @@ -60,8 +60,8 @@
558 51 common getsockname sys_getsockname
559 52 common getpeername sys_getpeername
560 53 common socketpair sys_socketpair
561 -54 common setsockopt sys_setsockopt
562 -55 common getsockopt sys_getsockopt
563 +54 64 setsockopt sys_setsockopt
564 +55 64 getsockopt sys_getsockopt
565 56 common clone stub_clone
566 57 common fork stub_fork
567 58 common vfork stub_vfork
568 @@ -351,3 +351,5 @@
569 538 x32 sendmmsg compat_sys_sendmmsg
570 539 x32 process_vm_readv compat_sys_process_vm_readv
571 540 x32 process_vm_writev compat_sys_process_vm_writev
572 +541 x32 setsockopt compat_sys_setsockopt
573 +542 x32 getsockopt compat_sys_getsockopt
574 diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
575 index 1ba8dff..99de967 100644
576 --- a/arch/x86/xen/setup.c
577 +++ b/arch/x86/xen/setup.c
578 @@ -79,9 +79,16 @@ static void __init xen_add_extra_mem(u64 start, u64 size)
579 memblock_reserve(start, size);
580
581 xen_max_p2m_pfn = PFN_DOWN(start + size);
582 + for (pfn = PFN_DOWN(start); pfn < xen_max_p2m_pfn; pfn++) {
583 + unsigned long mfn = pfn_to_mfn(pfn);
584 +
585 + if (WARN(mfn == pfn, "Trying to over-write 1-1 mapping (pfn: %lx)\n", pfn))
586 + continue;
587 + WARN(mfn != INVALID_P2M_ENTRY, "Trying to remove %lx which has %lx mfn!\n",
588 + pfn, mfn);
589
590 - for (pfn = PFN_DOWN(start); pfn <= xen_max_p2m_pfn; pfn++)
591 __set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
592 + }
593 }
594
595 static unsigned long __init xen_release_chunk(unsigned long start,
596 diff --git a/drivers/acpi/acpica/tbxface.c b/drivers/acpi/acpica/tbxface.c
597 index abcc641..33214d7 100644
598 --- a/drivers/acpi/acpica/tbxface.c
599 +++ b/drivers/acpi/acpica/tbxface.c
600 @@ -436,6 +436,7 @@ acpi_get_table_with_size(char *signature,
601
602 return (AE_NOT_FOUND);
603 }
604 +ACPI_EXPORT_SYMBOL(acpi_get_table_with_size)
605
606 acpi_status
607 acpi_get_table(char *signature,
608 diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
609 index acda773..38aa6dd 100644
610 --- a/drivers/block/cciss_scsi.c
611 +++ b/drivers/block/cciss_scsi.c
612 @@ -763,16 +763,7 @@ static void complete_scsi_command(CommandList_struct *c, int timeout,
613 {
614 case CMD_TARGET_STATUS:
615 /* Pass it up to the upper layers... */
616 - if( ei->ScsiStatus)
617 - {
618 -#if 0
619 - printk(KERN_WARNING "cciss: cmd %p "
620 - "has SCSI Status = %x\n",
621 - c, ei->ScsiStatus);
622 -#endif
623 - cmd->result |= (ei->ScsiStatus << 1);
624 - }
625 - else { /* scsi status is zero??? How??? */
626 + if (!ei->ScsiStatus) {
627
628 /* Ordinarily, this case should never happen, but there is a bug
629 in some released firmware revisions that allows it to happen
630 diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c
631 index 2ca8d3f..bb787d8 100644
632 --- a/drivers/dma/imx-dma.c
633 +++ b/drivers/dma/imx-dma.c
634 @@ -172,8 +172,7 @@ struct imxdma_engine {
635 struct device_dma_parameters dma_parms;
636 struct dma_device dma_device;
637 void __iomem *base;
638 - struct clk *dma_ahb;
639 - struct clk *dma_ipg;
640 + struct clk *dma_clk;
641 spinlock_t lock;
642 struct imx_dma_2d_config slots_2d[IMX_DMA_2D_SLOTS];
643 struct imxdma_channel channel[IMX_DMA_CHANNELS];
644 @@ -977,20 +976,10 @@ static int __init imxdma_probe(struct platform_device *pdev)
645 return 0;
646 }
647
648 - imxdma->dma_ipg = devm_clk_get(&pdev->dev, "ipg");
649 - if (IS_ERR(imxdma->dma_ipg)) {
650 - ret = PTR_ERR(imxdma->dma_ipg);
651 - goto err_clk;
652 - }
653 -
654 - imxdma->dma_ahb = devm_clk_get(&pdev->dev, "ahb");
655 - if (IS_ERR(imxdma->dma_ahb)) {
656 - ret = PTR_ERR(imxdma->dma_ahb);
657 - goto err_clk;
658 - }
659 -
660 - clk_prepare_enable(imxdma->dma_ipg);
661 - clk_prepare_enable(imxdma->dma_ahb);
662 + imxdma->dma_clk = clk_get(NULL, "dma");
663 + if (IS_ERR(imxdma->dma_clk))
664 + return PTR_ERR(imxdma->dma_clk);
665 + clk_enable(imxdma->dma_clk);
666
667 /* reset DMA module */
668 imx_dmav1_writel(imxdma, DCR_DRST, DMA_DCR);
669 @@ -999,14 +988,16 @@ static int __init imxdma_probe(struct platform_device *pdev)
670 ret = request_irq(MX1_DMA_INT, dma_irq_handler, 0, "DMA", imxdma);
671 if (ret) {
672 dev_warn(imxdma->dev, "Can't register IRQ for DMA\n");
673 - goto err_enable;
674 + kfree(imxdma);
675 + return ret;
676 }
677
678 ret = request_irq(MX1_DMA_ERR, imxdma_err_handler, 0, "DMA", imxdma);
679 if (ret) {
680 dev_warn(imxdma->dev, "Can't register ERRIRQ for DMA\n");
681 free_irq(MX1_DMA_INT, NULL);
682 - goto err_enable;
683 + kfree(imxdma);
684 + return ret;
685 }
686 }
687
688 @@ -1103,10 +1094,7 @@ err_init:
689 free_irq(MX1_DMA_INT, NULL);
690 free_irq(MX1_DMA_ERR, NULL);
691 }
692 -err_enable:
693 - clk_disable_unprepare(imxdma->dma_ipg);
694 - clk_disable_unprepare(imxdma->dma_ahb);
695 -err_clk:
696 +
697 kfree(imxdma);
698 return ret;
699 }
700 @@ -1126,9 +1114,7 @@ static int __exit imxdma_remove(struct platform_device *pdev)
701 free_irq(MX1_DMA_ERR, NULL);
702 }
703
704 - clk_disable_unprepare(imxdma->dma_ipg);
705 - clk_disable_unprepare(imxdma->dma_ahb);
706 - kfree(imxdma);
707 + kfree(imxdma);
708
709 return 0;
710 }
711 diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
712 index 80c6e8b..df6a4db 100644
713 --- a/drivers/gpu/drm/radeon/radeon_object.c
714 +++ b/drivers/gpu/drm/radeon/radeon_object.c
715 @@ -136,6 +136,7 @@ int radeon_bo_create(struct radeon_device *rdev,
716 acc_size = ttm_bo_dma_acc_size(&rdev->mman.bdev, size,
717 sizeof(struct radeon_bo));
718
719 +retry:
720 bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL);
721 if (bo == NULL)
722 return -ENOMEM;
723 @@ -149,8 +150,6 @@ int radeon_bo_create(struct radeon_device *rdev,
724 bo->surface_reg = -1;
725 INIT_LIST_HEAD(&bo->list);
726 INIT_LIST_HEAD(&bo->va);
727 -
728 -retry:
729 radeon_ttm_placement_from_domain(bo, domain);
730 /* Kernel allocation are uninterruptible */
731 mutex_lock(&rdev->vram_mutex);
732 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
733 index ee24d21..7279b3e 100644
734 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
735 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
736 @@ -182,6 +182,7 @@ static struct pci_device_id vmw_pci_id_list[] = {
737 {0x15ad, 0x0405, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VMWGFX_CHIP_SVGAII},
738 {0, 0, 0}
739 };
740 +MODULE_DEVICE_TABLE(pci, vmw_pci_id_list);
741
742 static int enable_fbdev;
743
744 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
745 index 2286d47..00fb5aa 100644
746 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
747 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
748 @@ -1688,15 +1688,19 @@ int vmw_du_page_flip(struct drm_crtc *crtc,
749 struct vmw_private *dev_priv = vmw_priv(crtc->dev);
750 struct drm_framebuffer *old_fb = crtc->fb;
751 struct vmw_framebuffer *vfb = vmw_framebuffer_to_vfb(fb);
752 - struct drm_file *file_priv = event->base.file_priv;
753 + struct drm_file *file_priv ;
754 struct vmw_fence_obj *fence = NULL;
755 struct drm_clip_rect clips;
756 int ret;
757
758 + if (event == NULL)
759 + return -EINVAL;
760 +
761 /* require ScreenObject support for page flipping */
762 if (!dev_priv->sou_priv)
763 return -ENOSYS;
764
765 + file_priv = event->base.file_priv;
766 if (!vmw_kms_screen_object_flippable(dev_priv, crtc))
767 return -EINVAL;
768
769 diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
770 index 82f61ee..dc9697c 100644
771 --- a/drivers/hid/usbhid/hid-quirks.c
772 +++ b/drivers/hid/usbhid/hid-quirks.c
773 @@ -70,6 +70,7 @@ static const struct hid_blacklist {
774 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
775 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
776 { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
777 + { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
778 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
779 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
780 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
781 diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c
782 index 351d1f4..4ee5789 100644
783 --- a/drivers/hwmon/asus_atk0110.c
784 +++ b/drivers/hwmon/asus_atk0110.c
785 @@ -34,6 +34,12 @@ static const struct dmi_system_id __initconst atk_force_new_if[] = {
786 .matches = {
787 DMI_MATCH(DMI_BOARD_NAME, "SABERTOOTH X58")
788 }
789 + }, {
790 + /* Old interface reads the same sensor for fan0 and fan1 */
791 + .ident = "Asus M5A78L",
792 + .matches = {
793 + DMI_MATCH(DMI_BOARD_NAME, "M5A78L")
794 + }
795 },
796 { }
797 };
798 diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
799 index d2c5095..ea8736b 100644
800 --- a/drivers/i2c/busses/Kconfig
801 +++ b/drivers/i2c/busses/Kconfig
802 @@ -104,6 +104,7 @@ config I2C_I801
803 DH89xxCC (PCH)
804 Panther Point (PCH)
805 Lynx Point (PCH)
806 + Lynx Point-LP (PCH)
807
808 This driver can also be built as a module. If so, the module
809 will be called i2c-i801.
810 @@ -350,9 +351,13 @@ config I2C_DAVINCI
811 devices such as DaVinci NIC.
812 For details please see http://www.ti.com/davinci
813
814 +config I2C_DESIGNWARE_CORE
815 + tristate
816 +
817 config I2C_DESIGNWARE_PLATFORM
818 tristate "Synopsys DesignWare Platfrom"
819 depends on HAVE_CLK
820 + select I2C_DESIGNWARE_CORE
821 help
822 If you say yes to this option, support will be included for the
823 Synopsys DesignWare I2C adapter. Only master mode is supported.
824 @@ -363,6 +368,7 @@ config I2C_DESIGNWARE_PLATFORM
825 config I2C_DESIGNWARE_PCI
826 tristate "Synopsys DesignWare PCI"
827 depends on PCI
828 + select I2C_DESIGNWARE_CORE
829 help
830 If you say yes to this option, support will be included for the
831 Synopsys DesignWare I2C adapter. Only master mode is supported.
832 diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
833 index 569567b..2f05d7b 100644
834 --- a/drivers/i2c/busses/Makefile
835 +++ b/drivers/i2c/busses/Makefile
836 @@ -33,10 +33,11 @@ obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o
837 obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o
838 obj-$(CONFIG_I2C_CPM) += i2c-cpm.o
839 obj-$(CONFIG_I2C_DAVINCI) += i2c-davinci.o
840 +obj-$(CONFIG_I2C_DESIGNWARE_CORE) += i2c-designware-core.o
841 obj-$(CONFIG_I2C_DESIGNWARE_PLATFORM) += i2c-designware-platform.o
842 -i2c-designware-platform-objs := i2c-designware-platdrv.o i2c-designware-core.o
843 +i2c-designware-platform-objs := i2c-designware-platdrv.o
844 obj-$(CONFIG_I2C_DESIGNWARE_PCI) += i2c-designware-pci.o
845 -i2c-designware-pci-objs := i2c-designware-pcidrv.o i2c-designware-core.o
846 +i2c-designware-pci-objs := i2c-designware-pcidrv.o
847 obj-$(CONFIG_I2C_EG20T) += i2c-eg20t.o
848 obj-$(CONFIG_I2C_GPIO) += i2c-gpio.o
849 obj-$(CONFIG_I2C_HIGHLANDER) += i2c-highlander.o
850 diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c
851 index df87992..6193349 100644
852 --- a/drivers/i2c/busses/i2c-designware-core.c
853 +++ b/drivers/i2c/busses/i2c-designware-core.c
854 @@ -25,6 +25,7 @@
855 * ----------------------------------------------------------------------------
856 *
857 */
858 +#include <linux/export.h>
859 #include <linux/clk.h>
860 #include <linux/errno.h>
861 #include <linux/err.h>
862 @@ -305,6 +306,7 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
863 dw_writel(dev, dev->master_cfg , DW_IC_CON);
864 return 0;
865 }
866 +EXPORT_SYMBOL_GPL(i2c_dw_init);
867
868 /*
869 * Waiting for bus not busy
870 @@ -557,12 +559,14 @@ done:
871
872 return ret;
873 }
874 +EXPORT_SYMBOL_GPL(i2c_dw_xfer);
875
876 u32 i2c_dw_func(struct i2c_adapter *adap)
877 {
878 struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
879 return dev->functionality;
880 }
881 +EXPORT_SYMBOL_GPL(i2c_dw_func);
882
883 static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
884 {
885 @@ -667,17 +671,20 @@ tx_aborted:
886
887 return IRQ_HANDLED;
888 }
889 +EXPORT_SYMBOL_GPL(i2c_dw_isr);
890
891 void i2c_dw_enable(struct dw_i2c_dev *dev)
892 {
893 /* Enable the adapter */
894 dw_writel(dev, 1, DW_IC_ENABLE);
895 }
896 +EXPORT_SYMBOL_GPL(i2c_dw_enable);
897
898 u32 i2c_dw_is_enabled(struct dw_i2c_dev *dev)
899 {
900 return dw_readl(dev, DW_IC_ENABLE);
901 }
902 +EXPORT_SYMBOL_GPL(i2c_dw_is_enabled);
903
904 void i2c_dw_disable(struct dw_i2c_dev *dev)
905 {
906 @@ -688,18 +695,22 @@ void i2c_dw_disable(struct dw_i2c_dev *dev)
907 dw_writel(dev, 0, DW_IC_INTR_MASK);
908 dw_readl(dev, DW_IC_CLR_INTR);
909 }
910 +EXPORT_SYMBOL_GPL(i2c_dw_disable);
911
912 void i2c_dw_clear_int(struct dw_i2c_dev *dev)
913 {
914 dw_readl(dev, DW_IC_CLR_INTR);
915 }
916 +EXPORT_SYMBOL_GPL(i2c_dw_clear_int);
917
918 void i2c_dw_disable_int(struct dw_i2c_dev *dev)
919 {
920 dw_writel(dev, 0, DW_IC_INTR_MASK);
921 }
922 +EXPORT_SYMBOL_GPL(i2c_dw_disable_int);
923
924 u32 i2c_dw_read_comp_param(struct dw_i2c_dev *dev)
925 {
926 return dw_readl(dev, DW_IC_COMP_PARAM_1);
927 }
928 +EXPORT_SYMBOL_GPL(i2c_dw_read_comp_param);
929 diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
930 index ae2945a..d88ec81 100644
931 --- a/drivers/i2c/busses/i2c-i801.c
932 +++ b/drivers/i2c/busses/i2c-i801.c
933 @@ -52,6 +52,7 @@
934 DH89xxCC (PCH) 0x2330 32 hard yes yes yes
935 Panther Point (PCH) 0x1e22 32 hard yes yes yes
936 Lynx Point (PCH) 0x8c22 32 hard yes yes yes
937 + Lynx Point-LP (PCH) 0x9c22 32 hard yes yes yes
938
939 Features supported by this driver:
940 Software PEC no
941 @@ -147,6 +148,7 @@
942 #define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS 0x2330
943 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30
944 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS 0x8c22
945 +#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS 0x9c22
946
947 struct i801_priv {
948 struct i2c_adapter adapter;
949 @@ -636,6 +638,7 @@ static DEFINE_PCI_DEVICE_TABLE(i801_ids) = {
950 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },
951 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) },
952 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS) },
953 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS) },
954 { 0, }
955 };
956
957 diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
958 index 5ec774d..6918773 100644
959 --- a/drivers/input/serio/i8042-x86ia64io.h
960 +++ b/drivers/input/serio/i8042-x86ia64io.h
961 @@ -177,6 +177,20 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
962 },
963 },
964 {
965 + /* Gigabyte T1005 - defines wrong chassis type ("Other") */
966 + .matches = {
967 + DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
968 + DMI_MATCH(DMI_PRODUCT_NAME, "T1005"),
969 + },
970 + },
971 + {
972 + /* Gigabyte T1005M/P - defines wrong chassis type ("Other") */
973 + .matches = {
974 + DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
975 + DMI_MATCH(DMI_PRODUCT_NAME, "T1005M/P"),
976 + },
977 + },
978 + {
979 .matches = {
980 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
981 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"),
982 diff --git a/drivers/media/dvb/siano/smsusb.c b/drivers/media/dvb/siano/smsusb.c
983 index 664e460..aac6222 100644
984 --- a/drivers/media/dvb/siano/smsusb.c
985 +++ b/drivers/media/dvb/siano/smsusb.c
986 @@ -481,7 +481,7 @@ static int smsusb_resume(struct usb_interface *intf)
987 return 0;
988 }
989
990 -static const struct usb_device_id smsusb_id_table[] __devinitconst = {
991 +static const struct usb_device_id smsusb_id_table[] = {
992 { USB_DEVICE(0x187f, 0x0010),
993 .driver_info = SMS1XXX_BOARD_SIANO_STELLAR },
994 { USB_DEVICE(0x187f, 0x0100),
995 diff --git a/drivers/media/video/gspca/jl2005bcd.c b/drivers/media/video/gspca/jl2005bcd.c
996 index 53f58ef..3264d87 100644
997 --- a/drivers/media/video/gspca/jl2005bcd.c
998 +++ b/drivers/media/video/gspca/jl2005bcd.c
999 @@ -510,7 +510,7 @@ static const struct sd_desc sd_desc = {
1000 };
1001
1002 /* -- module initialisation -- */
1003 -static const __devinitdata struct usb_device_id device_table[] = {
1004 +static const struct usb_device_id device_table[] = {
1005 {USB_DEVICE(0x0979, 0x0227)},
1006 {}
1007 };
1008 diff --git a/drivers/media/video/gspca/spca506.c b/drivers/media/video/gspca/spca506.c
1009 index 54eed87..21e6a37 100644
1010 --- a/drivers/media/video/gspca/spca506.c
1011 +++ b/drivers/media/video/gspca/spca506.c
1012 @@ -685,7 +685,7 @@ static const struct sd_desc sd_desc = {
1013 };
1014
1015 /* -- module initialisation -- */
1016 -static const struct usb_device_id device_table[] __devinitconst = {
1017 +static const struct usb_device_id device_table[] = {
1018 {USB_DEVICE(0x06e1, 0xa190)},
1019 /*fixme: may be IntelPCCameraPro BRIDGE_SPCA505
1020 {USB_DEVICE(0x0733, 0x0430)}, */
1021 diff --git a/drivers/media/video/uvc/uvc_queue.c b/drivers/media/video/uvc/uvc_queue.c
1022 index 8f54e24..4261bf2 100644
1023 --- a/drivers/media/video/uvc/uvc_queue.c
1024 +++ b/drivers/media/video/uvc/uvc_queue.c
1025 @@ -355,6 +355,7 @@ struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue,
1026 if ((queue->flags & UVC_QUEUE_DROP_CORRUPTED) && buf->error) {
1027 buf->error = 0;
1028 buf->state = UVC_BUF_STATE_QUEUED;
1029 + buf->bytesused = 0;
1030 vb2_set_plane_payload(&buf->buf, 0, 0);
1031 return buf;
1032 }
1033 diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
1034 index a2f7ae8..90b8527 100644
1035 --- a/drivers/net/wireless/ath/ath9k/recv.c
1036 +++ b/drivers/net/wireless/ath/ath9k/recv.c
1037 @@ -1774,7 +1774,6 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
1038 struct ieee80211_hw *hw = sc->hw;
1039 struct ieee80211_hdr *hdr;
1040 int retval;
1041 - bool decrypt_error = false;
1042 struct ath_rx_status rs;
1043 enum ath9k_rx_qtype qtype;
1044 bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
1045 @@ -1796,6 +1795,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
1046 tsf_lower = tsf & 0xffffffff;
1047
1048 do {
1049 + bool decrypt_error = false;
1050 /* If handling rx interrupt and flush is in progress => exit */
1051 if ((sc->sc_flags & SC_OP_RXFLUSH) && (flush == 0))
1052 break;
1053 diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
1054 index f4d28c3..a337a50 100644
1055 --- a/drivers/net/wireless/p54/p54usb.c
1056 +++ b/drivers/net/wireless/p54/p54usb.c
1057 @@ -42,7 +42,7 @@ MODULE_FIRMWARE("isl3887usb");
1058 * whenever you add a new device.
1059 */
1060
1061 -static struct usb_device_id p54u_table[] __devinitdata = {
1062 +static struct usb_device_id p54u_table[] = {
1063 /* Version 1 devices (pci chip + net2280) */
1064 {USB_DEVICE(0x0411, 0x0050)}, /* Buffalo WLI2-USB2-G54 */
1065 {USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */
1066 diff --git a/drivers/net/wireless/rtl818x/rtl8187/dev.c b/drivers/net/wireless/rtl818x/rtl8187/dev.c
1067 index cf53ac9..86467a2 100644
1068 --- a/drivers/net/wireless/rtl818x/rtl8187/dev.c
1069 +++ b/drivers/net/wireless/rtl818x/rtl8187/dev.c
1070 @@ -44,7 +44,7 @@ MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>");
1071 MODULE_DESCRIPTION("RTL8187/RTL8187B USB wireless driver");
1072 MODULE_LICENSE("GPL");
1073
1074 -static struct usb_device_id rtl8187_table[] __devinitdata = {
1075 +static struct usb_device_id rtl8187_table[] = {
1076 /* Asus */
1077 {USB_DEVICE(0x0b05, 0x171d), .driver_info = DEVICE_RTL8187},
1078 /* Belkin */
1079 diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
1080 index 3cd3f45..54fc988 100644
1081 --- a/drivers/pci/pci-driver.c
1082 +++ b/drivers/pci/pci-driver.c
1083 @@ -952,6 +952,13 @@ static int pci_pm_poweroff_noirq(struct device *dev)
1084 if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
1085 pci_prepare_to_sleep(pci_dev);
1086
1087 + /*
1088 + * The reason for doing this here is the same as for the analogous code
1089 + * in pci_pm_suspend_noirq().
1090 + */
1091 + if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
1092 + pci_write_config_word(pci_dev, PCI_COMMAND, 0);
1093 +
1094 return 0;
1095 }
1096
1097 diff --git a/drivers/rapidio/devices/tsi721.c b/drivers/rapidio/devices/tsi721.c
1098 index 30d2072..33471e1 100644
1099 --- a/drivers/rapidio/devices/tsi721.c
1100 +++ b/drivers/rapidio/devices/tsi721.c
1101 @@ -439,6 +439,9 @@ static void tsi721_db_dpc(struct work_struct *work)
1102 " info %4.4x\n", DBELL_SID(idb.bytes),
1103 DBELL_TID(idb.bytes), DBELL_INF(idb.bytes));
1104 }
1105 +
1106 + wr_ptr = ioread32(priv->regs +
1107 + TSI721_IDQ_WP(IDB_QUEUE)) % IDB_QSIZE;
1108 }
1109
1110 iowrite32(rd_ptr & (IDB_QSIZE - 1),
1111 @@ -449,6 +452,10 @@ static void tsi721_db_dpc(struct work_struct *work)
1112 regval |= TSI721_SR_CHINT_IDBQRCV;
1113 iowrite32(regval,
1114 priv->regs + TSI721_SR_CHINTE(IDB_QUEUE));
1115 +
1116 + wr_ptr = ioread32(priv->regs + TSI721_IDQ_WP(IDB_QUEUE)) % IDB_QSIZE;
1117 + if (wr_ptr != rd_ptr)
1118 + schedule_work(&priv->idb_work);
1119 }
1120
1121 /**
1122 @@ -2155,7 +2162,7 @@ static int __devinit tsi721_probe(struct pci_dev *pdev,
1123 const struct pci_device_id *id)
1124 {
1125 struct tsi721_device *priv;
1126 - int i, cap;
1127 + int cap;
1128 int err;
1129 u32 regval;
1130
1131 @@ -2175,12 +2182,15 @@ static int __devinit tsi721_probe(struct pci_dev *pdev,
1132 priv->pdev = pdev;
1133
1134 #ifdef DEBUG
1135 + {
1136 + int i;
1137 for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
1138 dev_dbg(&pdev->dev, "res[%d] @ 0x%llx (0x%lx, 0x%lx)\n",
1139 i, (unsigned long long)pci_resource_start(pdev, i),
1140 (unsigned long)pci_resource_len(pdev, i),
1141 pci_resource_flags(pdev, i));
1142 }
1143 + }
1144 #endif
1145 /*
1146 * Verify BAR configuration
1147 diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
1148 index 9cdfc38..1eb7a15 100644
1149 --- a/drivers/regulator/twl-regulator.c
1150 +++ b/drivers/regulator/twl-regulator.c
1151 @@ -1085,7 +1085,7 @@ TWL6025_ADJUSTABLE_LDO(LDO7, 0x74, 1000, 3300);
1152 TWL6025_ADJUSTABLE_LDO(LDO6, 0x60, 1000, 3300);
1153 TWL6025_ADJUSTABLE_LDO(LDOLN, 0x64, 1000, 3300);
1154 TWL6025_ADJUSTABLE_LDO(LDOUSB, 0x70, 1000, 3300);
1155 -TWL4030_FIXED_LDO(VINTANA2, 0x3f, 1500, 11, 100, 0x08);
1156 +TWL4030_FIXED_LDO(VINTANA1, 0x3f, 1500, 11, 100, 0x08);
1157 TWL4030_FIXED_LDO(VINTDIG, 0x47, 1500, 13, 100, 0x08);
1158 TWL4030_FIXED_LDO(VUSB1V5, 0x71, 1500, 17, 100, 0x08);
1159 TWL4030_FIXED_LDO(VUSB1V8, 0x74, 1800, 18, 100, 0x08);
1160 @@ -1166,7 +1166,7 @@ static const struct of_device_id twl_of_match[] __devinitconst = {
1161 TWL6025_OF_MATCH("ti,twl6025-ldo6", LDO6),
1162 TWL6025_OF_MATCH("ti,twl6025-ldoln", LDOLN),
1163 TWL6025_OF_MATCH("ti,twl6025-ldousb", LDOUSB),
1164 - TWLFIXED_OF_MATCH("ti,twl4030-vintana2", VINTANA2),
1165 + TWLFIXED_OF_MATCH("ti,twl4030-vintana1", VINTANA1),
1166 TWLFIXED_OF_MATCH("ti,twl4030-vintdig", VINTDIG),
1167 TWLFIXED_OF_MATCH("ti,twl4030-vusb1v5", VUSB1V5),
1168 TWLFIXED_OF_MATCH("ti,twl4030-vusb1v8", VUSB1V8),
1169 diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
1170 index 8b300be..6308a8d 100644
1171 --- a/drivers/scsi/megaraid/megaraid_sas_base.c
1172 +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
1173 @@ -4066,7 +4066,6 @@ megasas_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1174 spin_lock_init(&instance->cmd_pool_lock);
1175 spin_lock_init(&instance->hba_lock);
1176 spin_lock_init(&instance->completion_lock);
1177 - spin_lock_init(&poll_aen_lock);
1178
1179 mutex_init(&instance->aen_mutex);
1180 mutex_init(&instance->reset_mutex);
1181 @@ -5392,6 +5391,8 @@ static int __init megasas_init(void)
1182 printk(KERN_INFO "megasas: %s %s\n", MEGASAS_VERSION,
1183 MEGASAS_EXT_VERSION);
1184
1185 + spin_lock_init(&poll_aen_lock);
1186 +
1187 support_poll_for_event = 2;
1188 support_device_change = 1;
1189
1190 diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
1191 index 3f03342..c4cef56 100644
1192 --- a/drivers/scsi/mpt2sas/mpt2sas_base.c
1193 +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
1194 @@ -2417,10 +2417,13 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
1195 }
1196
1197 /* command line tunables for max controller queue depth */
1198 - if (max_queue_depth != -1)
1199 - max_request_credit = (max_queue_depth < facts->RequestCredit)
1200 - ? max_queue_depth : facts->RequestCredit;
1201 - else
1202 + if (max_queue_depth != -1 && max_queue_depth != 0) {
1203 + max_request_credit = min_t(u16, max_queue_depth +
1204 + ioc->hi_priority_depth + ioc->internal_depth,
1205 + facts->RequestCredit);
1206 + if (max_request_credit > MAX_HBA_QUEUE_DEPTH)
1207 + max_request_credit = MAX_HBA_QUEUE_DEPTH;
1208 + } else
1209 max_request_credit = min_t(u16, facts->RequestCredit,
1210 MAX_HBA_QUEUE_DEPTH);
1211
1212 @@ -2495,7 +2498,7 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
1213 /* set the scsi host can_queue depth
1214 * with some internal commands that could be outstanding
1215 */
1216 - ioc->shost->can_queue = ioc->scsiio_depth - (2);
1217 + ioc->shost->can_queue = ioc->scsiio_depth;
1218 dinitprintk(ioc, printk(MPT2SAS_INFO_FMT "scsi host: "
1219 "can_queue depth (%d)\n", ioc->name, ioc->shost->can_queue));
1220
1221 diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
1222 index cc8dc8c..b3f0b0f 100644
1223 --- a/drivers/scsi/scsi_error.c
1224 +++ b/drivers/scsi/scsi_error.c
1225 @@ -42,6 +42,8 @@
1226
1227 #include <trace/events/scsi.h>
1228
1229 +static void scsi_eh_done(struct scsi_cmnd *scmd);
1230 +
1231 #define SENSE_TIMEOUT (10*HZ)
1232
1233 /*
1234 @@ -241,6 +243,14 @@ static int scsi_check_sense(struct scsi_cmnd *scmd)
1235 if (! scsi_command_normalize_sense(scmd, &sshdr))
1236 return FAILED; /* no valid sense data */
1237
1238 + if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done)
1239 + /*
1240 + * nasty: for mid-layer issued TURs, we need to return the
1241 + * actual sense data without any recovery attempt. For eh
1242 + * issued ones, we need to try to recover and interpret
1243 + */
1244 + return SUCCESS;
1245 +
1246 if (scsi_sense_is_deferred(&sshdr))
1247 return NEEDS_RETRY;
1248
1249 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
1250 index 1929146..2bc0362 100644
1251 --- a/drivers/scsi/scsi_lib.c
1252 +++ b/drivers/scsi/scsi_lib.c
1253 @@ -760,7 +760,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
1254 }
1255
1256 if (req->cmd_type == REQ_TYPE_BLOCK_PC) { /* SG_IO ioctl from block level */
1257 - req->errors = result;
1258 if (result) {
1259 if (sense_valid && req->sense) {
1260 /*
1261 @@ -776,6 +775,10 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
1262 if (!sense_deferred)
1263 error = __scsi_error_from_host_byte(cmd, result);
1264 }
1265 + /*
1266 + * __scsi_error_from_host_byte may have reset the host_byte
1267 + */
1268 + req->errors = cmd->result;
1269
1270 req->resid_len = scsi_get_resid(cmd);
1271
1272 diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
1273 index 8906557..348840e 100644
1274 --- a/drivers/scsi/scsi_scan.c
1275 +++ b/drivers/scsi/scsi_scan.c
1276 @@ -776,6 +776,16 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
1277 sdev->model = (char *) (sdev->inquiry + 16);
1278 sdev->rev = (char *) (sdev->inquiry + 32);
1279
1280 + if (strncmp(sdev->vendor, "ATA ", 8) == 0) {
1281 + /*
1282 + * sata emulation layer device. This is a hack to work around
1283 + * the SATL power management specifications which state that
1284 + * when the SATL detects the device has gone into standby
1285 + * mode, it shall respond with NOT READY.
1286 + */
1287 + sdev->allow_restart = 1;
1288 + }
1289 +
1290 if (*bflags & BLIST_ISROM) {
1291 sdev->type = TYPE_ROM;
1292 sdev->removable = 1;
1293 diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
1294 index 763e028..8739454 100644
1295 --- a/drivers/staging/vt6656/main_usb.c
1296 +++ b/drivers/staging/vt6656/main_usb.c
1297 @@ -222,7 +222,7 @@ DEVICE_PARAM(b80211hEnable, "802.11h mode");
1298 // Static vars definitions
1299 //
1300
1301 -static struct usb_device_id vt6656_table[] __devinitdata = {
1302 +static struct usb_device_id vt6656_table[] = {
1303 {USB_DEVICE(VNT_USB_VENDOR_ID, VNT_USB_PRODUCT_ID)},
1304 {}
1305 };
1306 diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c
1307 index c3751a7..9160049 100644
1308 --- a/drivers/staging/winbond/wbusb.c
1309 +++ b/drivers/staging/winbond/wbusb.c
1310 @@ -25,7 +25,7 @@ MODULE_DESCRIPTION("IS89C35 802.11bg WLAN USB Driver");
1311 MODULE_LICENSE("GPL");
1312 MODULE_VERSION("0.1");
1313
1314 -static const struct usb_device_id wb35_table[] __devinitconst = {
1315 +static const struct usb_device_id wb35_table[] = {
1316 { USB_DEVICE(0x0416, 0x0035) },
1317 { USB_DEVICE(0x18E8, 0x6201) },
1318 { USB_DEVICE(0x18E8, 0x6206) },
1319 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
1320 index 0686d61..222f1c5 100644
1321 --- a/drivers/target/target_core_transport.c
1322 +++ b/drivers/target/target_core_transport.c
1323 @@ -3675,9 +3675,9 @@ transport_generic_get_mem(struct se_cmd *cmd)
1324 return 0;
1325
1326 out:
1327 - while (i >= 0) {
1328 - __free_page(sg_page(&cmd->t_data_sg[i]));
1329 + while (i > 0) {
1330 i--;
1331 + __free_page(sg_page(&cmd->t_data_sg[i]));
1332 }
1333 kfree(cmd->t_data_sg);
1334 cmd->t_data_sg = NULL;
1335 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1336 index 640cf79..1b632cb 100644
1337 --- a/drivers/usb/class/cdc-acm.c
1338 +++ b/drivers/usb/class/cdc-acm.c
1339 @@ -1104,7 +1104,8 @@ skip_normal_probe:
1340 }
1341
1342
1343 - if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1344 + if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1345 + control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1346 return -EINVAL;
1347
1348 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1349 diff --git a/drivers/usb/misc/emi62.c b/drivers/usb/misc/emi62.c
1350 index 4e0f167..8be96de 100644
1351 --- a/drivers/usb/misc/emi62.c
1352 +++ b/drivers/usb/misc/emi62.c
1353 @@ -256,7 +256,7 @@ wraperr:
1354 return err;
1355 }
1356
1357 -static const struct usb_device_id id_table[] __devinitconst = {
1358 +static const struct usb_device_id id_table[] = {
1359 { USB_DEVICE(EMI62_VENDOR_ID, EMI62_PRODUCT_ID) },
1360 { } /* Terminating entry */
1361 };
1362 diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
1363 index 1afb4fb..4d51948 100644
1364 --- a/drivers/xen/swiotlb-xen.c
1365 +++ b/drivers/xen/swiotlb-xen.c
1366 @@ -232,7 +232,7 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
1367 return ret;
1368
1369 if (hwdev && hwdev->coherent_dma_mask)
1370 - dma_mask = hwdev->coherent_dma_mask;
1371 + dma_mask = dma_alloc_coherent_mask(hwdev, flags);
1372
1373 phys = virt_to_phys(ret);
1374 dev_addr = xen_phys_to_bus(phys);
1375 diff --git a/drivers/xen/xen-pciback/pci_stub.c b/drivers/xen/xen-pciback/pci_stub.c
1376 index 097e536..0334272 100644
1377 --- a/drivers/xen/xen-pciback/pci_stub.c
1378 +++ b/drivers/xen/xen-pciback/pci_stub.c
1379 @@ -353,16 +353,16 @@ static int __devinit pcistub_init_device(struct pci_dev *dev)
1380 if (err)
1381 goto config_release;
1382
1383 - dev_dbg(&dev->dev, "reseting (FLR, D3, etc) the device\n");
1384 - __pci_reset_function_locked(dev);
1385 -
1386 /* We need the device active to save the state. */
1387 dev_dbg(&dev->dev, "save state of device\n");
1388 pci_save_state(dev);
1389 dev_data->pci_saved_state = pci_store_saved_state(dev);
1390 if (!dev_data->pci_saved_state)
1391 dev_err(&dev->dev, "Could not store PCI conf saved state!\n");
1392 -
1393 + else {
1394 + dev_dbg(&dev->dev, "reseting (FLR, D3, etc) the device\n");
1395 + __pci_reset_function_locked(dev);
1396 + }
1397 /* Now disable the device (this also ensures some private device
1398 * data is setup before we export)
1399 */
1400 diff --git a/fs/buffer.c b/fs/buffer.c
1401 index 0bc1bed..18669e9 100644
1402 --- a/fs/buffer.c
1403 +++ b/fs/buffer.c
1404 @@ -914,7 +914,7 @@ link_dev_buffers(struct page *page, struct buffer_head *head)
1405 /*
1406 * Initialise the state of a blockdev page's buffers.
1407 */
1408 -static void
1409 +static sector_t
1410 init_page_buffers(struct page *page, struct block_device *bdev,
1411 sector_t block, int size)
1412 {
1413 @@ -936,33 +936,41 @@ init_page_buffers(struct page *page, struct block_device *bdev,
1414 block++;
1415 bh = bh->b_this_page;
1416 } while (bh != head);
1417 +
1418 + /*
1419 + * Caller needs to validate requested block against end of device.
1420 + */
1421 + return end_block;
1422 }
1423
1424 /*
1425 * Create the page-cache page that contains the requested block.
1426 *
1427 - * This is user purely for blockdev mappings.
1428 + * This is used purely for blockdev mappings.
1429 */
1430 -static struct page *
1431 +static int
1432 grow_dev_page(struct block_device *bdev, sector_t block,
1433 - pgoff_t index, int size)
1434 + pgoff_t index, int size, int sizebits)
1435 {
1436 struct inode *inode = bdev->bd_inode;
1437 struct page *page;
1438 struct buffer_head *bh;
1439 + sector_t end_block;
1440 + int ret = 0; /* Will call free_more_memory() */
1441
1442 page = find_or_create_page(inode->i_mapping, index,
1443 (mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS)|__GFP_MOVABLE);
1444 if (!page)
1445 - return NULL;
1446 + return ret;
1447
1448 BUG_ON(!PageLocked(page));
1449
1450 if (page_has_buffers(page)) {
1451 bh = page_buffers(page);
1452 if (bh->b_size == size) {
1453 - init_page_buffers(page, bdev, block, size);
1454 - return page;
1455 + end_block = init_page_buffers(page, bdev,
1456 + index << sizebits, size);
1457 + goto done;
1458 }
1459 if (!try_to_free_buffers(page))
1460 goto failed;
1461 @@ -982,14 +990,14 @@ grow_dev_page(struct block_device *bdev, sector_t block,
1462 */
1463 spin_lock(&inode->i_mapping->private_lock);
1464 link_dev_buffers(page, bh);
1465 - init_page_buffers(page, bdev, block, size);
1466 + end_block = init_page_buffers(page, bdev, index << sizebits, size);
1467 spin_unlock(&inode->i_mapping->private_lock);
1468 - return page;
1469 -
1470 +done:
1471 + ret = (block < end_block) ? 1 : -ENXIO;
1472 failed:
1473 unlock_page(page);
1474 page_cache_release(page);
1475 - return NULL;
1476 + return ret;
1477 }
1478
1479 /*
1480 @@ -999,7 +1007,6 @@ failed:
1481 static int
1482 grow_buffers(struct block_device *bdev, sector_t block, int size)
1483 {
1484 - struct page *page;
1485 pgoff_t index;
1486 int sizebits;
1487
1488 @@ -1023,22 +1030,14 @@ grow_buffers(struct block_device *bdev, sector_t block, int size)
1489 bdevname(bdev, b));
1490 return -EIO;
1491 }
1492 - block = index << sizebits;
1493 +
1494 /* Create a page with the proper size buffers.. */
1495 - page = grow_dev_page(bdev, block, index, size);
1496 - if (!page)
1497 - return 0;
1498 - unlock_page(page);
1499 - page_cache_release(page);
1500 - return 1;
1501 + return grow_dev_page(bdev, block, index, size, sizebits);
1502 }
1503
1504 static struct buffer_head *
1505 __getblk_slow(struct block_device *bdev, sector_t block, int size)
1506 {
1507 - int ret;
1508 - struct buffer_head *bh;
1509 -
1510 /* Size must be multiple of hard sectorsize */
1511 if (unlikely(size & (bdev_logical_block_size(bdev)-1) ||
1512 (size < 512 || size > PAGE_SIZE))) {
1513 @@ -1051,21 +1050,20 @@ __getblk_slow(struct block_device *bdev, sector_t block, int size)
1514 return NULL;
1515 }
1516
1517 -retry:
1518 - bh = __find_get_block(bdev, block, size);
1519 - if (bh)
1520 - return bh;
1521 + for (;;) {
1522 + struct buffer_head *bh;
1523 + int ret;
1524
1525 - ret = grow_buffers(bdev, block, size);
1526 - if (ret == 0) {
1527 - free_more_memory();
1528 - goto retry;
1529 - } else if (ret > 0) {
1530 bh = __find_get_block(bdev, block, size);
1531 if (bh)
1532 return bh;
1533 +
1534 + ret = grow_buffers(bdev, block, size);
1535 + if (ret < 0)
1536 + return NULL;
1537 + if (ret == 0)
1538 + free_more_memory();
1539 }
1540 - return NULL;
1541 }
1542
1543 /*
1544 @@ -1321,10 +1319,6 @@ EXPORT_SYMBOL(__find_get_block);
1545 * which corresponds to the passed block_device, block and size. The
1546 * returned buffer has its reference count incremented.
1547 *
1548 - * __getblk() cannot fail - it just keeps trying. If you pass it an
1549 - * illegal block number, __getblk() will happily return a buffer_head
1550 - * which represents the non-existent block. Very weird.
1551 - *
1552 * __getblk() will lock up the machine if grow_dev_page's try_to_free_buffers()
1553 * attempt is failing. FIXME, perhaps?
1554 */
1555 diff --git a/fs/compat.c b/fs/compat.c
1556 index f2944ac..2b371b3 100644
1557 --- a/fs/compat.c
1558 +++ b/fs/compat.c
1559 @@ -1160,11 +1160,14 @@ compat_sys_readv(unsigned long fd, const struct compat_iovec __user *vec,
1560 struct file *file;
1561 int fput_needed;
1562 ssize_t ret;
1563 + loff_t pos;
1564
1565 file = fget_light(fd, &fput_needed);
1566 if (!file)
1567 return -EBADF;
1568 - ret = compat_readv(file, vec, vlen, &file->f_pos);
1569 + pos = file->f_pos;
1570 + ret = compat_readv(file, vec, vlen, &pos);
1571 + file->f_pos = pos;
1572 fput_light(file, fput_needed);
1573 return ret;
1574 }
1575 @@ -1226,11 +1229,14 @@ compat_sys_writev(unsigned long fd, const struct compat_iovec __user *vec,
1576 struct file *file;
1577 int fput_needed;
1578 ssize_t ret;
1579 + loff_t pos;
1580
1581 file = fget_light(fd, &fput_needed);
1582 if (!file)
1583 return -EBADF;
1584 - ret = compat_writev(file, vec, vlen, &file->f_pos);
1585 + pos = file->f_pos;
1586 + ret = compat_writev(file, vec, vlen, &pos);
1587 + file->f_pos = pos;
1588 fput_light(file, fput_needed);
1589 return ret;
1590 }
1591 diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c
1592 index 10d7812..0752817 100644
1593 --- a/fs/ext3/inode.c
1594 +++ b/fs/ext3/inode.c
1595 @@ -3068,6 +3068,8 @@ static int ext3_do_update_inode(handle_t *handle,
1596 struct ext3_inode_info *ei = EXT3_I(inode);
1597 struct buffer_head *bh = iloc->bh;
1598 int err = 0, rc, block;
1599 + int need_datasync = 0;
1600 + __le32 disksize;
1601
1602 again:
1603 /* we can't allow multiple procs in here at once, its a bit racey */
1604 @@ -3105,7 +3107,11 @@ again:
1605 raw_inode->i_gid_high = 0;
1606 }
1607 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
1608 - raw_inode->i_size = cpu_to_le32(ei->i_disksize);
1609 + disksize = cpu_to_le32(ei->i_disksize);
1610 + if (disksize != raw_inode->i_size) {
1611 + need_datasync = 1;
1612 + raw_inode->i_size = disksize;
1613 + }
1614 raw_inode->i_atime = cpu_to_le32(inode->i_atime.tv_sec);
1615 raw_inode->i_ctime = cpu_to_le32(inode->i_ctime.tv_sec);
1616 raw_inode->i_mtime = cpu_to_le32(inode->i_mtime.tv_sec);
1617 @@ -3121,8 +3127,11 @@ again:
1618 if (!S_ISREG(inode->i_mode)) {
1619 raw_inode->i_dir_acl = cpu_to_le32(ei->i_dir_acl);
1620 } else {
1621 - raw_inode->i_size_high =
1622 - cpu_to_le32(ei->i_disksize >> 32);
1623 + disksize = cpu_to_le32(ei->i_disksize >> 32);
1624 + if (disksize != raw_inode->i_size_high) {
1625 + raw_inode->i_size_high = disksize;
1626 + need_datasync = 1;
1627 + }
1628 if (ei->i_disksize > 0x7fffffffULL) {
1629 struct super_block *sb = inode->i_sb;
1630 if (!EXT3_HAS_RO_COMPAT_FEATURE(sb,
1631 @@ -3175,6 +3184,8 @@ again:
1632 ext3_clear_inode_state(inode, EXT3_STATE_NEW);
1633
1634 atomic_set(&ei->i_sync_tid, handle->h_transaction->t_tid);
1635 + if (need_datasync)
1636 + atomic_set(&ei->i_datasync_tid, handle->h_transaction->t_tid);
1637 out_brelse:
1638 brelse (bh);
1639 ext3_std_error(inode->i_sb, err);
1640 diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
1641 index 7df2b5e..f4246cf 100644
1642 --- a/fs/fuse/dev.c
1643 +++ b/fs/fuse/dev.c
1644 @@ -1576,6 +1576,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode,
1645 req->pages[req->num_pages] = page;
1646 req->num_pages++;
1647
1648 + offset = 0;
1649 num -= this_num;
1650 total_len += this_num;
1651 index++;
1652 diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
1653 index 929ba01..9131b17 100644
1654 --- a/fs/nfs/idmap.c
1655 +++ b/fs/nfs/idmap.c
1656 @@ -63,6 +63,12 @@ struct idmap {
1657 struct mutex idmap_mutex;
1658 };
1659
1660 +struct idmap_legacy_upcalldata {
1661 + struct rpc_pipe_msg pipe_msg;
1662 + struct idmap_msg idmap_msg;
1663 + struct idmap *idmap;
1664 +};
1665 +
1666 /**
1667 * nfs_fattr_init_names - initialise the nfs_fattr owner_name/group_name fields
1668 * @fattr: fully initialised struct nfs_fattr
1669 @@ -326,6 +332,7 @@ static ssize_t nfs_idmap_get_key(const char *name, size_t namelen,
1670 ret = nfs_idmap_request_key(&key_type_id_resolver_legacy,
1671 name, namelen, type, data,
1672 data_size, idmap);
1673 + idmap->idmap_key_cons = NULL;
1674 mutex_unlock(&idmap->idmap_mutex);
1675 }
1676 return ret;
1677 @@ -383,11 +390,13 @@ static const match_table_t nfs_idmap_tokens = {
1678 static int nfs_idmap_legacy_upcall(struct key_construction *, const char *, void *);
1679 static ssize_t idmap_pipe_downcall(struct file *, const char __user *,
1680 size_t);
1681 +static void idmap_release_pipe(struct inode *);
1682 static void idmap_pipe_destroy_msg(struct rpc_pipe_msg *);
1683
1684 static const struct rpc_pipe_ops idmap_upcall_ops = {
1685 .upcall = rpc_pipe_generic_upcall,
1686 .downcall = idmap_pipe_downcall,
1687 + .release_pipe = idmap_release_pipe,
1688 .destroy_msg = idmap_pipe_destroy_msg,
1689 };
1690
1691 @@ -603,7 +612,8 @@ void nfs_idmap_quit(void)
1692 nfs_idmap_quit_keyring();
1693 }
1694
1695 -static int nfs_idmap_prepare_message(char *desc, struct idmap_msg *im,
1696 +static int nfs_idmap_prepare_message(char *desc, struct idmap *idmap,
1697 + struct idmap_msg *im,
1698 struct rpc_pipe_msg *msg)
1699 {
1700 substring_t substr;
1701 @@ -646,6 +656,7 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
1702 const char *op,
1703 void *aux)
1704 {
1705 + struct idmap_legacy_upcalldata *data;
1706 struct rpc_pipe_msg *msg;
1707 struct idmap_msg *im;
1708 struct idmap *idmap = (struct idmap *)aux;
1709 @@ -653,15 +664,15 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
1710 int ret = -ENOMEM;
1711
1712 /* msg and im are freed in idmap_pipe_destroy_msg */
1713 - msg = kmalloc(sizeof(*msg), GFP_KERNEL);
1714 - if (!msg)
1715 - goto out0;
1716 -
1717 - im = kmalloc(sizeof(*im), GFP_KERNEL);
1718 - if (!im)
1719 + data = kmalloc(sizeof(*data), GFP_KERNEL);
1720 + if (!data)
1721 goto out1;
1722
1723 - ret = nfs_idmap_prepare_message(key->description, im, msg);
1724 + msg = &data->pipe_msg;
1725 + im = &data->idmap_msg;
1726 + data->idmap = idmap;
1727 +
1728 + ret = nfs_idmap_prepare_message(key->description, idmap, im, msg);
1729 if (ret < 0)
1730 goto out2;
1731
1732 @@ -670,15 +681,15 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
1733
1734 ret = rpc_queue_upcall(idmap->idmap_pipe, msg);
1735 if (ret < 0)
1736 - goto out2;
1737 + goto out3;
1738
1739 return ret;
1740
1741 +out3:
1742 + idmap->idmap_key_cons = NULL;
1743 out2:
1744 - kfree(im);
1745 + kfree(data);
1746 out1:
1747 - kfree(msg);
1748 -out0:
1749 complete_request_key(cons, ret);
1750 return ret;
1751 }
1752 @@ -736,9 +747,8 @@ idmap_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
1753 }
1754
1755 if (!(im.im_status & IDMAP_STATUS_SUCCESS)) {
1756 - ret = mlen;
1757 - complete_request_key(cons, -ENOKEY);
1758 - goto out_incomplete;
1759 + ret = -ENOKEY;
1760 + goto out;
1761 }
1762
1763 namelen_in = strnlen(im.im_name, IDMAP_NAMESZ);
1764 @@ -755,16 +765,32 @@ idmap_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
1765
1766 out:
1767 complete_request_key(cons, ret);
1768 -out_incomplete:
1769 return ret;
1770 }
1771
1772 static void
1773 idmap_pipe_destroy_msg(struct rpc_pipe_msg *msg)
1774 {
1775 + struct idmap_legacy_upcalldata *data = container_of(msg,
1776 + struct idmap_legacy_upcalldata,
1777 + pipe_msg);
1778 + struct idmap *idmap = data->idmap;
1779 + struct key_construction *cons;
1780 + if (msg->errno) {
1781 + cons = ACCESS_ONCE(idmap->idmap_key_cons);
1782 + idmap->idmap_key_cons = NULL;
1783 + complete_request_key(cons, msg->errno);
1784 + }
1785 /* Free memory allocated in nfs_idmap_legacy_upcall() */
1786 - kfree(msg->data);
1787 - kfree(msg);
1788 + kfree(data);
1789 +}
1790 +
1791 +static void
1792 +idmap_release_pipe(struct inode *inode)
1793 +{
1794 + struct rpc_inode *rpci = RPC_I(inode);
1795 + struct idmap *idmap = (struct idmap *)rpci->private;
1796 + idmap->idmap_key_cons = NULL;
1797 }
1798
1799 int nfs_map_name_to_uid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *uid)
1800 diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
1801 index 5242eae..a1e416b 100644
1802 --- a/fs/nfs/nfs3proc.c
1803 +++ b/fs/nfs/nfs3proc.c
1804 @@ -69,7 +69,7 @@ do_proc_get_root(struct rpc_clnt *client, struct nfs_fh *fhandle,
1805 nfs_fattr_init(info->fattr);
1806 status = rpc_call_sync(client, &msg, 0);
1807 dprintk("%s: reply fsinfo: %d\n", __func__, status);
1808 - if (!(info->fattr->valid & NFS_ATTR_FATTR)) {
1809 + if (status == 0 && !(info->fattr->valid & NFS_ATTR_FATTR)) {
1810 msg.rpc_proc = &nfs3_procedures[NFS3PROC_GETATTR];
1811 msg.rpc_resp = info->fattr;
1812 status = rpc_call_sync(client, &msg, 0);
1813 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1814 index d60c2d8..dc57324 100644
1815 --- a/fs/nfs/nfs4proc.c
1816 +++ b/fs/nfs/nfs4proc.c
1817 @@ -5966,11 +5966,58 @@ static void nfs4_layoutget_done(struct rpc_task *task, void *calldata)
1818 dprintk("<-- %s\n", __func__);
1819 }
1820
1821 +static size_t max_response_pages(struct nfs_server *server)
1822 +{
1823 + u32 max_resp_sz = server->nfs_client->cl_session->fc_attrs.max_resp_sz;
1824 + return nfs_page_array_len(0, max_resp_sz);
1825 +}
1826 +
1827 +static void nfs4_free_pages(struct page **pages, size_t size)
1828 +{
1829 + int i;
1830 +
1831 + if (!pages)
1832 + return;
1833 +
1834 + for (i = 0; i < size; i++) {
1835 + if (!pages[i])
1836 + break;
1837 + __free_page(pages[i]);
1838 + }
1839 + kfree(pages);
1840 +}
1841 +
1842 +static struct page **nfs4_alloc_pages(size_t size, gfp_t gfp_flags)
1843 +{
1844 + struct page **pages;
1845 + int i;
1846 +
1847 + pages = kcalloc(size, sizeof(struct page *), gfp_flags);
1848 + if (!pages) {
1849 + dprintk("%s: can't alloc array of %zu pages\n", __func__, size);
1850 + return NULL;
1851 + }
1852 +
1853 + for (i = 0; i < size; i++) {
1854 + pages[i] = alloc_page(gfp_flags);
1855 + if (!pages[i]) {
1856 + dprintk("%s: failed to allocate page\n", __func__);
1857 + nfs4_free_pages(pages, size);
1858 + return NULL;
1859 + }
1860 + }
1861 +
1862 + return pages;
1863 +}
1864 +
1865 static void nfs4_layoutget_release(void *calldata)
1866 {
1867 struct nfs4_layoutget *lgp = calldata;
1868 + struct nfs_server *server = NFS_SERVER(lgp->args.inode);
1869 + size_t max_pages = max_response_pages(server);
1870
1871 dprintk("--> %s\n", __func__);
1872 + nfs4_free_pages(lgp->args.layout.pages, max_pages);
1873 put_nfs_open_context(lgp->args.ctx);
1874 kfree(calldata);
1875 dprintk("<-- %s\n", __func__);
1876 @@ -5982,9 +6029,10 @@ static const struct rpc_call_ops nfs4_layoutget_call_ops = {
1877 .rpc_release = nfs4_layoutget_release,
1878 };
1879
1880 -int nfs4_proc_layoutget(struct nfs4_layoutget *lgp)
1881 +int nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags)
1882 {
1883 struct nfs_server *server = NFS_SERVER(lgp->args.inode);
1884 + size_t max_pages = max_response_pages(server);
1885 struct rpc_task *task;
1886 struct rpc_message msg = {
1887 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_LAYOUTGET],
1888 @@ -6002,6 +6050,13 @@ int nfs4_proc_layoutget(struct nfs4_layoutget *lgp)
1889
1890 dprintk("--> %s\n", __func__);
1891
1892 + lgp->args.layout.pages = nfs4_alloc_pages(max_pages, gfp_flags);
1893 + if (!lgp->args.layout.pages) {
1894 + nfs4_layoutget_release(lgp);
1895 + return -ENOMEM;
1896 + }
1897 + lgp->args.layout.pglen = max_pages * PAGE_SIZE;
1898 +
1899 lgp->res.layoutp = &lgp->args.layout;
1900 lgp->res.seq_res.sr_slot = NULL;
1901 nfs41_init_sequence(&lgp->args.seq_args, &lgp->res.seq_res, 0);
1902 @@ -6047,12 +6102,8 @@ static void nfs4_layoutreturn_done(struct rpc_task *task, void *calldata)
1903 return;
1904 }
1905 spin_lock(&lo->plh_inode->i_lock);
1906 - if (task->tk_status == 0) {
1907 - if (lrp->res.lrs_present) {
1908 - pnfs_set_layout_stateid(lo, &lrp->res.stateid, true);
1909 - } else
1910 - BUG_ON(!list_empty(&lo->plh_segs));
1911 - }
1912 + if (task->tk_status == 0 && lrp->res.lrs_present)
1913 + pnfs_set_layout_stateid(lo, &lrp->res.stateid, true);
1914 lo->plh_block_lgets--;
1915 spin_unlock(&lo->plh_inode->i_lock);
1916 dprintk("<-- %s\n", __func__);
1917 diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
1918 index 38512bc..059e2c3 100644
1919 --- a/fs/nfs/pnfs.c
1920 +++ b/fs/nfs/pnfs.c
1921 @@ -574,9 +574,6 @@ send_layoutget(struct pnfs_layout_hdr *lo,
1922 struct nfs_server *server = NFS_SERVER(ino);
1923 struct nfs4_layoutget *lgp;
1924 struct pnfs_layout_segment *lseg = NULL;
1925 - struct page **pages = NULL;
1926 - int i;
1927 - u32 max_resp_sz, max_pages;
1928
1929 dprintk("--> %s\n", __func__);
1930
1931 @@ -585,20 +582,6 @@ send_layoutget(struct pnfs_layout_hdr *lo,
1932 if (lgp == NULL)
1933 return NULL;
1934
1935 - /* allocate pages for xdr post processing */
1936 - max_resp_sz = server->nfs_client->cl_session->fc_attrs.max_resp_sz;
1937 - max_pages = nfs_page_array_len(0, max_resp_sz);
1938 -
1939 - pages = kcalloc(max_pages, sizeof(struct page *), gfp_flags);
1940 - if (!pages)
1941 - goto out_err_free;
1942 -
1943 - for (i = 0; i < max_pages; i++) {
1944 - pages[i] = alloc_page(gfp_flags);
1945 - if (!pages[i])
1946 - goto out_err_free;
1947 - }
1948 -
1949 lgp->args.minlength = PAGE_CACHE_SIZE;
1950 if (lgp->args.minlength > range->length)
1951 lgp->args.minlength = range->length;
1952 @@ -607,39 +590,19 @@ send_layoutget(struct pnfs_layout_hdr *lo,
1953 lgp->args.type = server->pnfs_curr_ld->id;
1954 lgp->args.inode = ino;
1955 lgp->args.ctx = get_nfs_open_context(ctx);
1956 - lgp->args.layout.pages = pages;
1957 - lgp->args.layout.pglen = max_pages * PAGE_SIZE;
1958 lgp->lsegpp = &lseg;
1959 lgp->gfp_flags = gfp_flags;
1960
1961 /* Synchronously retrieve layout information from server and
1962 * store in lseg.
1963 */
1964 - nfs4_proc_layoutget(lgp);
1965 + nfs4_proc_layoutget(lgp, gfp_flags);
1966 if (!lseg) {
1967 /* remember that LAYOUTGET failed and suspend trying */
1968 set_bit(lo_fail_bit(range->iomode), &lo->plh_flags);
1969 }
1970
1971 - /* free xdr pages */
1972 - for (i = 0; i < max_pages; i++)
1973 - __free_page(pages[i]);
1974 - kfree(pages);
1975 -
1976 return lseg;
1977 -
1978 -out_err_free:
1979 - /* free any allocated xdr pages, lgp as it's not used */
1980 - if (pages) {
1981 - for (i = 0; i < max_pages; i++) {
1982 - if (!pages[i])
1983 - break;
1984 - __free_page(pages[i]);
1985 - }
1986 - kfree(pages);
1987 - }
1988 - kfree(lgp);
1989 - return NULL;
1990 }
1991
1992 /* Initiates a LAYOUTRETURN(FILE) */
1993 diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
1994 index 442ebf6..8d95818 100644
1995 --- a/fs/nfs/pnfs.h
1996 +++ b/fs/nfs/pnfs.h
1997 @@ -161,7 +161,7 @@ extern int nfs4_proc_getdevicelist(struct nfs_server *server,
1998 struct pnfs_devicelist *devlist);
1999 extern int nfs4_proc_getdeviceinfo(struct nfs_server *server,
2000 struct pnfs_device *dev);
2001 -extern int nfs4_proc_layoutget(struct nfs4_layoutget *lgp);
2002 +extern int nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags);
2003 extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp);
2004
2005 /* pnfs.c */
2006 diff --git a/fs/nfs/super.c b/fs/nfs/super.c
2007 index 4ac7fca..7b55f51 100644
2008 --- a/fs/nfs/super.c
2009 +++ b/fs/nfs/super.c
2010 @@ -3146,4 +3146,6 @@ static struct dentry *nfs4_referral_mount(struct file_system_type *fs_type,
2011 return res;
2012 }
2013
2014 +MODULE_ALIAS("nfs4");
2015 +
2016 #endif /* CONFIG_NFS_V4 */
2017 diff --git a/fs/open.c b/fs/open.c
2018 index 3f1108b..cf1d34f 100644
2019 --- a/fs/open.c
2020 +++ b/fs/open.c
2021 @@ -882,9 +882,10 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o
2022 int lookup_flags = 0;
2023 int acc_mode;
2024
2025 - if (!(flags & O_CREAT))
2026 - mode = 0;
2027 - op->mode = mode;
2028 + if (flags & O_CREAT)
2029 + op->mode = (mode & S_IALLUGO) | S_IFREG;
2030 + else
2031 + op->mode = 0;
2032
2033 /* Must never be set by userspace */
2034 flags &= ~FMODE_NONOTIFY;
2035 diff --git a/fs/ubifs/debug.h b/fs/ubifs/debug.h
2036 index 9f71765..28e3de1 100644
2037 --- a/fs/ubifs/debug.h
2038 +++ b/fs/ubifs/debug.h
2039 @@ -170,7 +170,7 @@ struct ubifs_global_debug_info {
2040 #define ubifs_dbg_msg(type, fmt, ...) \
2041 pr_debug("UBIFS DBG " type ": " fmt "\n", ##__VA_ARGS__)
2042
2043 -#define DBG_KEY_BUF_LEN 32
2044 +#define DBG_KEY_BUF_LEN 48
2045 #define ubifs_dbg_msg_key(type, key, fmt, ...) do { \
2046 char __tmp_key_buf[DBG_KEY_BUF_LEN]; \
2047 pr_debug("UBIFS DBG " type ": " fmt "%s\n", ##__VA_ARGS__, \
2048 diff --git a/fs/udf/file.c b/fs/udf/file.c
2049 index 7f3f7ba..d1c6093 100644
2050 --- a/fs/udf/file.c
2051 +++ b/fs/udf/file.c
2052 @@ -39,20 +39,24 @@
2053 #include "udf_i.h"
2054 #include "udf_sb.h"
2055
2056 -static int udf_adinicb_readpage(struct file *file, struct page *page)
2057 +static void __udf_adinicb_readpage(struct page *page)
2058 {
2059 struct inode *inode = page->mapping->host;
2060 char *kaddr;
2061 struct udf_inode_info *iinfo = UDF_I(inode);
2062
2063 - BUG_ON(!PageLocked(page));
2064 -
2065 kaddr = kmap(page);
2066 - memset(kaddr, 0, PAGE_CACHE_SIZE);
2067 memcpy(kaddr, iinfo->i_ext.i_data + iinfo->i_lenEAttr, inode->i_size);
2068 + memset(kaddr + inode->i_size, 0, PAGE_CACHE_SIZE - inode->i_size);
2069 flush_dcache_page(page);
2070 SetPageUptodate(page);
2071 kunmap(page);
2072 +}
2073 +
2074 +static int udf_adinicb_readpage(struct file *file, struct page *page)
2075 +{
2076 + BUG_ON(!PageLocked(page));
2077 + __udf_adinicb_readpage(page);
2078 unlock_page(page);
2079
2080 return 0;
2081 @@ -77,6 +81,25 @@ static int udf_adinicb_writepage(struct page *page,
2082 return 0;
2083 }
2084
2085 +static int udf_adinicb_write_begin(struct file *file,
2086 + struct address_space *mapping, loff_t pos,
2087 + unsigned len, unsigned flags, struct page **pagep,
2088 + void **fsdata)
2089 +{
2090 + struct page *page;
2091 +
2092 + if (WARN_ON_ONCE(pos >= PAGE_CACHE_SIZE))
2093 + return -EIO;
2094 + page = grab_cache_page_write_begin(mapping, 0, flags);
2095 + if (!page)
2096 + return -ENOMEM;
2097 + *pagep = page;
2098 +
2099 + if (!PageUptodate(page) && len != PAGE_CACHE_SIZE)
2100 + __udf_adinicb_readpage(page);
2101 + return 0;
2102 +}
2103 +
2104 static int udf_adinicb_write_end(struct file *file,
2105 struct address_space *mapping,
2106 loff_t pos, unsigned len, unsigned copied,
2107 @@ -98,8 +121,8 @@ static int udf_adinicb_write_end(struct file *file,
2108 const struct address_space_operations udf_adinicb_aops = {
2109 .readpage = udf_adinicb_readpage,
2110 .writepage = udf_adinicb_writepage,
2111 - .write_begin = simple_write_begin,
2112 - .write_end = udf_adinicb_write_end,
2113 + .write_begin = udf_adinicb_write_begin,
2114 + .write_end = udf_adinicb_write_end,
2115 };
2116
2117 static ssize_t udf_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
2118 diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c
2119 index 5bf0790..31fdc48 100644
2120 --- a/kernel/audit_tree.c
2121 +++ b/kernel/audit_tree.c
2122 @@ -250,7 +250,6 @@ static void untag_chunk(struct node *p)
2123 spin_unlock(&hash_lock);
2124 spin_unlock(&entry->lock);
2125 fsnotify_destroy_mark(entry);
2126 - fsnotify_put_mark(entry);
2127 goto out;
2128 }
2129
2130 @@ -259,7 +258,7 @@ static void untag_chunk(struct node *p)
2131
2132 fsnotify_duplicate_mark(&new->mark, entry);
2133 if (fsnotify_add_mark(&new->mark, new->mark.group, new->mark.i.inode, NULL, 1)) {
2134 - free_chunk(new);
2135 + fsnotify_put_mark(&new->mark);
2136 goto Fallback;
2137 }
2138
2139 @@ -293,7 +292,6 @@ static void untag_chunk(struct node *p)
2140 spin_unlock(&hash_lock);
2141 spin_unlock(&entry->lock);
2142 fsnotify_destroy_mark(entry);
2143 - fsnotify_put_mark(entry);
2144 goto out;
2145
2146 Fallback:
2147 @@ -322,7 +320,7 @@ static int create_chunk(struct inode *inode, struct audit_tree *tree)
2148
2149 entry = &chunk->mark;
2150 if (fsnotify_add_mark(entry, audit_tree_group, inode, NULL, 0)) {
2151 - free_chunk(chunk);
2152 + fsnotify_put_mark(entry);
2153 return -ENOSPC;
2154 }
2155
2156 @@ -332,6 +330,7 @@ static int create_chunk(struct inode *inode, struct audit_tree *tree)
2157 spin_unlock(&hash_lock);
2158 chunk->dead = 1;
2159 spin_unlock(&entry->lock);
2160 + fsnotify_get_mark(entry);
2161 fsnotify_destroy_mark(entry);
2162 fsnotify_put_mark(entry);
2163 return 0;
2164 @@ -396,7 +395,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
2165 fsnotify_duplicate_mark(chunk_entry, old_entry);
2166 if (fsnotify_add_mark(chunk_entry, chunk_entry->group, chunk_entry->i.inode, NULL, 1)) {
2167 spin_unlock(&old_entry->lock);
2168 - free_chunk(chunk);
2169 + fsnotify_put_mark(chunk_entry);
2170 fsnotify_put_mark(old_entry);
2171 return -ENOSPC;
2172 }
2173 @@ -412,6 +411,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
2174 spin_unlock(&chunk_entry->lock);
2175 spin_unlock(&old_entry->lock);
2176
2177 + fsnotify_get_mark(chunk_entry);
2178 fsnotify_destroy_mark(chunk_entry);
2179
2180 fsnotify_put_mark(chunk_entry);
2181 @@ -445,7 +445,6 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
2182 spin_unlock(&old_entry->lock);
2183 fsnotify_destroy_mark(old_entry);
2184 fsnotify_put_mark(old_entry); /* pair to fsnotify_find mark_entry */
2185 - fsnotify_put_mark(old_entry); /* and kill it */
2186 return 0;
2187 }
2188
2189 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
2190 index 817bf70..ef6a8f2 100644
2191 --- a/kernel/sched/core.c
2192 +++ b/kernel/sched/core.c
2193 @@ -3084,6 +3084,20 @@ void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st)
2194 # define nsecs_to_cputime(__nsecs) nsecs_to_jiffies(__nsecs)
2195 #endif
2196
2197 +static cputime_t scale_utime(cputime_t utime, cputime_t rtime, cputime_t total)
2198 +{
2199 + u64 temp = (__force u64) rtime;
2200 +
2201 + temp *= (__force u64) utime;
2202 +
2203 + if (sizeof(cputime_t) == 4)
2204 + temp = div_u64(temp, (__force u32) total);
2205 + else
2206 + temp = div64_u64(temp, (__force u64) total);
2207 +
2208 + return (__force cputime_t) temp;
2209 +}
2210 +
2211 void task_times(struct task_struct *p, cputime_t *ut, cputime_t *st)
2212 {
2213 cputime_t rtime, utime = p->utime, total = utime + p->stime;
2214 @@ -3093,13 +3107,9 @@ void task_times(struct task_struct *p, cputime_t *ut, cputime_t *st)
2215 */
2216 rtime = nsecs_to_cputime(p->se.sum_exec_runtime);
2217
2218 - if (total) {
2219 - u64 temp = (__force u64) rtime;
2220 -
2221 - temp *= (__force u64) utime;
2222 - do_div(temp, (__force u32) total);
2223 - utime = (__force cputime_t) temp;
2224 - } else
2225 + if (total)
2226 + utime = scale_utime(utime, rtime, total);
2227 + else
2228 utime = rtime;
2229
2230 /*
2231 @@ -3126,13 +3136,9 @@ void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st)
2232 total = cputime.utime + cputime.stime;
2233 rtime = nsecs_to_cputime(cputime.sum_exec_runtime);
2234
2235 - if (total) {
2236 - u64 temp = (__force u64) rtime;
2237 -
2238 - temp *= (__force u64) cputime.utime;
2239 - do_div(temp, (__force u32) total);
2240 - utime = (__force cputime_t) temp;
2241 - } else
2242 + if (total)
2243 + utime = scale_utime(cputime.utime, rtime, total);
2244 + else
2245 utime = rtime;
2246
2247 sig->prev_utime = max(sig->prev_utime, utime);
2248 @@ -7011,6 +7017,7 @@ int in_sched_functions(unsigned long addr)
2249
2250 #ifdef CONFIG_CGROUP_SCHED
2251 struct task_group root_task_group;
2252 +LIST_HEAD(task_groups);
2253 #endif
2254
2255 DECLARE_PER_CPU(cpumask_var_t, load_balance_tmpmask);
2256 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
2257 index 116ced0..d9637f4 100644
2258 --- a/kernel/sched/sched.h
2259 +++ b/kernel/sched/sched.h
2260 @@ -80,7 +80,7 @@ extern struct mutex sched_domains_mutex;
2261 struct cfs_rq;
2262 struct rt_rq;
2263
2264 -static LIST_HEAD(task_groups);
2265 +extern struct list_head task_groups;
2266
2267 struct cfs_bandwidth {
2268 #ifdef CONFIG_CFS_BANDWIDTH
2269 diff --git a/mm/mempolicy.c b/mm/mempolicy.c
2270 index bf5b485..9afcbad 100644
2271 --- a/mm/mempolicy.c
2272 +++ b/mm/mempolicy.c
2273 @@ -2536,7 +2536,7 @@ int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, int no_context)
2274 break;
2275
2276 default:
2277 - BUG();
2278 + return -EINVAL;
2279 }
2280
2281 l = strlen(policy_modes[mode]);
2282 diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
2283 index 1266f78..25edda0 100644
2284 --- a/net/bluetooth/hci_event.c
2285 +++ b/net/bluetooth/hci_event.c
2286 @@ -1357,6 +1357,9 @@ static bool hci_resolve_next_name(struct hci_dev *hdev)
2287 return false;
2288
2289 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2290 + if (!e)
2291 + return false;
2292 +
2293 if (hci_resolve_name(hdev, e) == 0) {
2294 e->name_state = NAME_PENDING;
2295 return true;
2296 @@ -1385,12 +1388,20 @@ static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
2297 return;
2298
2299 e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
2300 - if (e) {
2301 + /* If the device was not found in a list of found devices names of which
2302 + * are pending. there is no need to continue resolving a next name as it
2303 + * will be done upon receiving another Remote Name Request Complete
2304 + * Event */
2305 + if (!e)
2306 + return;
2307 +
2308 + list_del(&e->list);
2309 + if (name) {
2310 e->name_state = NAME_KNOWN;
2311 - list_del(&e->list);
2312 - if (name)
2313 - mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
2314 - e->data.rssi, name, name_len);
2315 + mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
2316 + e->data.rssi, name, name_len);
2317 + } else {
2318 + e->name_state = NAME_NOT_KNOWN;
2319 }
2320
2321 if (hci_resolve_next_name(hdev))
2322 @@ -1749,7 +1760,12 @@ static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *s
2323 if (conn->type == ACL_LINK) {
2324 conn->state = BT_CONFIG;
2325 hci_conn_hold(conn);
2326 - conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2327 +
2328 + if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2329 + !hci_find_link_key(hdev, &ev->bdaddr))
2330 + conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2331 + else
2332 + conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2333 } else
2334 conn->state = BT_CONNECTED;
2335
2336 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
2337 index 6f9c25b..9a86759 100644
2338 --- a/net/bluetooth/l2cap_core.c
2339 +++ b/net/bluetooth/l2cap_core.c
2340 @@ -893,6 +893,7 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn)
2341 sk = chan->sk;
2342
2343 hci_conn_hold(conn->hcon);
2344 + conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
2345
2346 bacpy(&bt_sk(sk)->src, conn->src);
2347 bacpy(&bt_sk(sk)->dst, conn->dst);
2348 diff --git a/net/dccp/ccid.h b/net/dccp/ccid.h
2349 index 75c3582..fb85d37 100644
2350 --- a/net/dccp/ccid.h
2351 +++ b/net/dccp/ccid.h
2352 @@ -246,7 +246,7 @@ static inline int ccid_hc_rx_getsockopt(struct ccid *ccid, struct sock *sk,
2353 u32 __user *optval, int __user *optlen)
2354 {
2355 int rc = -ENOPROTOOPT;
2356 - if (ccid->ccid_ops->ccid_hc_rx_getsockopt != NULL)
2357 + if (ccid != NULL && ccid->ccid_ops->ccid_hc_rx_getsockopt != NULL)
2358 rc = ccid->ccid_ops->ccid_hc_rx_getsockopt(sk, optname, len,
2359 optval, optlen);
2360 return rc;
2361 @@ -257,7 +257,7 @@ static inline int ccid_hc_tx_getsockopt(struct ccid *ccid, struct sock *sk,
2362 u32 __user *optval, int __user *optlen)
2363 {
2364 int rc = -ENOPROTOOPT;
2365 - if (ccid->ccid_ops->ccid_hc_tx_getsockopt != NULL)
2366 + if (ccid != NULL && ccid->ccid_ops->ccid_hc_tx_getsockopt != NULL)
2367 rc = ccid->ccid_ops->ccid_hc_tx_getsockopt(sk, optname, len,
2368 optval, optlen);
2369 return rc;
2370 diff --git a/net/socket.c b/net/socket.c
2371 index 573b261..06ffa0f 100644
2372 --- a/net/socket.c
2373 +++ b/net/socket.c
2374 @@ -2605,7 +2605,7 @@ static int do_siocgstamp(struct net *net, struct socket *sock,
2375 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&ktv);
2376 set_fs(old_fs);
2377 if (!err)
2378 - err = compat_put_timeval(up, &ktv);
2379 + err = compat_put_timeval(&ktv, up);
2380
2381 return err;
2382 }
2383 @@ -2621,7 +2621,7 @@ static int do_siocgstampns(struct net *net, struct socket *sock,
2384 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&kts);
2385 set_fs(old_fs);
2386 if (!err)
2387 - err = compat_put_timespec(up, &kts);
2388 + err = compat_put_timespec(&kts, up);
2389
2390 return err;
2391 }
2392 diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
2393 index 4bda09d..fd9b288 100644
2394 --- a/net/sunrpc/svc_xprt.c
2395 +++ b/net/sunrpc/svc_xprt.c
2396 @@ -316,7 +316,6 @@ static bool svc_xprt_has_something_to_do(struct svc_xprt *xprt)
2397 */
2398 void svc_xprt_enqueue(struct svc_xprt *xprt)
2399 {
2400 - struct svc_serv *serv = xprt->xpt_server;
2401 struct svc_pool *pool;
2402 struct svc_rqst *rqstp;
2403 int cpu;
2404 @@ -362,8 +361,6 @@ void svc_xprt_enqueue(struct svc_xprt *xprt)
2405 rqstp, rqstp->rq_xprt);
2406 rqstp->rq_xprt = xprt;
2407 svc_xprt_get(xprt);
2408 - rqstp->rq_reserved = serv->sv_max_mesg;
2409 - atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);
2410 pool->sp_stats.threads_woken++;
2411 wake_up(&rqstp->rq_wait);
2412 } else {
2413 @@ -643,8 +640,6 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)
2414 if (xprt) {
2415 rqstp->rq_xprt = xprt;
2416 svc_xprt_get(xprt);
2417 - rqstp->rq_reserved = serv->sv_max_mesg;
2418 - atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);
2419
2420 /* As there is a shortage of threads and this request
2421 * had to be queued, don't allow the thread to wait so
2422 @@ -741,6 +736,8 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)
2423 else
2424 len = xprt->xpt_ops->xpo_recvfrom(rqstp);
2425 dprintk("svc: got len=%d\n", len);
2426 + rqstp->rq_reserved = serv->sv_max_mesg;
2427 + atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);
2428 }
2429 svc_xprt_received(xprt);
2430
2431 @@ -797,7 +794,8 @@ int svc_send(struct svc_rqst *rqstp)
2432
2433 /* Grab mutex to serialize outgoing data. */
2434 mutex_lock(&xprt->xpt_mutex);
2435 - if (test_bit(XPT_DEAD, &xprt->xpt_flags))
2436 + if (test_bit(XPT_DEAD, &xprt->xpt_flags)
2437 + || test_bit(XPT_CLOSE, &xprt->xpt_flags))
2438 len = -ENOTCONN;
2439 else
2440 len = xprt->xpt_ops->xpo_sendto(rqstp);
2441 diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
2442 index 824d32f..f190ea9 100644
2443 --- a/net/sunrpc/svcsock.c
2444 +++ b/net/sunrpc/svcsock.c
2445 @@ -1137,9 +1137,9 @@ static int svc_tcp_recvfrom(struct svc_rqst *rqstp)
2446 if (len >= 0)
2447 svsk->sk_tcplen += len;
2448 if (len != want) {
2449 + svc_tcp_save_pages(svsk, rqstp);
2450 if (len < 0 && len != -EAGAIN)
2451 goto err_other;
2452 - svc_tcp_save_pages(svsk, rqstp);
2453 dprintk("svc: incomplete TCP record (%d of %d)\n",
2454 svsk->sk_tcplen, svsk->sk_reclen);
2455 goto err_noclose;
2456 diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
2457 index e59e2f0..0074aee 100644
2458 --- a/sound/pci/hda/hda_proc.c
2459 +++ b/sound/pci/hda/hda_proc.c
2460 @@ -412,7 +412,7 @@ static void print_digital_conv(struct snd_info_buffer *buffer,
2461 if (digi1 & AC_DIG1_EMPHASIS)
2462 snd_iprintf(buffer, " Preemphasis");
2463 if (digi1 & AC_DIG1_COPYRIGHT)
2464 - snd_iprintf(buffer, " Copyright");
2465 + snd_iprintf(buffer, " Non-Copyright");
2466 if (digi1 & AC_DIG1_NONAUDIO)
2467 snd_iprintf(buffer, " Non-Audio");
2468 if (digi1 & AC_DIG1_PROFESSIONAL)
2469 diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c
2470 index 21d91d5..70b4f02 100644
2471 --- a/sound/pci/hda/patch_ca0132.c
2472 +++ b/sound/pci/hda/patch_ca0132.c
2473 @@ -276,6 +276,10 @@ static int _add_switch(struct hda_codec *codec, hda_nid_t nid, const char *pfx,
2474 int type = dir ? HDA_INPUT : HDA_OUTPUT;
2475 struct snd_kcontrol_new knew =
2476 HDA_CODEC_MUTE_MONO(namestr, nid, chan, 0, type);
2477 + if ((query_amp_caps(codec, nid, type) & AC_AMPCAP_MUTE) == 0) {
2478 + snd_printdd("Skipping '%s %s Switch' (no mute on node 0x%x)\n", pfx, dirstr[dir], nid);
2479 + return 0;
2480 + }
2481 sprintf(namestr, "%s %s Switch", pfx, dirstr[dir]);
2482 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
2483 }
2484 @@ -287,6 +291,10 @@ static int _add_volume(struct hda_codec *codec, hda_nid_t nid, const char *pfx,
2485 int type = dir ? HDA_INPUT : HDA_OUTPUT;
2486 struct snd_kcontrol_new knew =
2487 HDA_CODEC_VOLUME_MONO(namestr, nid, chan, 0, type);
2488 + if ((query_amp_caps(codec, nid, type) & AC_AMPCAP_NUM_STEPS) == 0) {
2489 + snd_printdd("Skipping '%s %s Volume' (no amp on node 0x%x)\n", pfx, dirstr[dir], nid);
2490 + return 0;
2491 + }
2492 sprintf(namestr, "%s %s Volume", pfx, dirstr[dir]);
2493 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
2494 }
2495 diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
2496 index b342ae5..b9567bc 100644
2497 --- a/sound/soc/codecs/wm9712.c
2498 +++ b/sound/soc/codecs/wm9712.c
2499 @@ -272,7 +272,7 @@ SOC_DAPM_ENUM("Route", wm9712_enum[9]);
2500
2501 /* Mic select */
2502 static const struct snd_kcontrol_new wm9712_mic_src_controls =
2503 -SOC_DAPM_ENUM("Route", wm9712_enum[7]);
2504 +SOC_DAPM_ENUM("Mic Source Select", wm9712_enum[7]);
2505
2506 /* diff select */
2507 static const struct snd_kcontrol_new wm9712_diff_sel_controls =
2508 @@ -291,7 +291,9 @@ SND_SOC_DAPM_MUX("Left Capture Select", SND_SOC_NOPM, 0, 0,
2509 &wm9712_capture_selectl_controls),
2510 SND_SOC_DAPM_MUX("Right Capture Select", SND_SOC_NOPM, 0, 0,
2511 &wm9712_capture_selectr_controls),
2512 -SND_SOC_DAPM_MUX("Mic Select Source", SND_SOC_NOPM, 0, 0,
2513 +SND_SOC_DAPM_MUX("Left Mic Select Source", SND_SOC_NOPM, 0, 0,
2514 + &wm9712_mic_src_controls),
2515 +SND_SOC_DAPM_MUX("Right Mic Select Source", SND_SOC_NOPM, 0, 0,
2516 &wm9712_mic_src_controls),
2517 SND_SOC_DAPM_MUX("Differential Source", SND_SOC_NOPM, 0, 0,
2518 &wm9712_diff_sel_controls),
2519 @@ -319,6 +321,7 @@ SND_SOC_DAPM_PGA("Out 3 PGA", AC97_INT_PAGING, 5, 1, NULL, 0),
2520 SND_SOC_DAPM_PGA("Line PGA", AC97_INT_PAGING, 2, 1, NULL, 0),
2521 SND_SOC_DAPM_PGA("Phone PGA", AC97_INT_PAGING, 1, 1, NULL, 0),
2522 SND_SOC_DAPM_PGA("Mic PGA", AC97_INT_PAGING, 0, 1, NULL, 0),
2523 +SND_SOC_DAPM_PGA("Differential Mic", SND_SOC_NOPM, 0, 0, NULL, 0),
2524 SND_SOC_DAPM_MICBIAS("Mic Bias", AC97_INT_PAGING, 10, 1),
2525 SND_SOC_DAPM_OUTPUT("MONOOUT"),
2526 SND_SOC_DAPM_OUTPUT("HPOUTL"),
2527 @@ -379,6 +382,18 @@ static const struct snd_soc_dapm_route wm9712_audio_map[] = {
2528 {"Mic PGA", NULL, "MIC1"},
2529 {"Mic PGA", NULL, "MIC2"},
2530
2531 + /* microphones */
2532 + {"Differential Mic", NULL, "MIC1"},
2533 + {"Differential Mic", NULL, "MIC2"},
2534 + {"Left Mic Select Source", "Mic 1", "MIC1"},
2535 + {"Left Mic Select Source", "Mic 2", "MIC2"},
2536 + {"Left Mic Select Source", "Stereo", "MIC1"},
2537 + {"Left Mic Select Source", "Differential", "Differential Mic"},
2538 + {"Right Mic Select Source", "Mic 1", "MIC1"},
2539 + {"Right Mic Select Source", "Mic 2", "MIC2"},
2540 + {"Right Mic Select Source", "Stereo", "MIC2"},
2541 + {"Right Mic Select Source", "Differential", "Differential Mic"},
2542 +
2543 /* left capture selector */
2544 {"Left Capture Select", "Mic", "MIC1"},
2545 {"Left Capture Select", "Speaker Mixer", "Speaker Mixer"},
2546 diff --git a/sound/soc/omap/mcbsp.c b/sound/soc/omap/mcbsp.c
2547 index e5f4444..fb67772 100644
2548 --- a/sound/soc/omap/mcbsp.c
2549 +++ b/sound/soc/omap/mcbsp.c
2550 @@ -691,7 +691,7 @@ int omap_mcbsp_6pin_src_mux(struct omap_mcbsp *mcbsp, u8 mux)
2551 {
2552 const char *signal, *src;
2553
2554 - if (mcbsp->pdata->mux_signal)
2555 + if (!mcbsp->pdata->mux_signal)
2556 return -EINVAL;
2557
2558 switch (mux) {