Contents of /trunk/kernel-magellan/patches-3.4/0110-3.4.11-all-fixes.patch
Parent Directory | Revision Log
Revision 1897 -
(show annotations)
(download)
Sat Sep 22 14:51:23 2012 UTC (12 years ago) by niro
File size: 83653 byte(s)
Sat Sep 22 14:51:23 2012 UTC (12 years ago) by niro
File size: 83653 byte(s)
-added linux patches up to 3.4.11
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) { |