Annotation of /trunk/kernel-alx/patches-3.4/0116-3.4.17-all-fixes.patch
Parent Directory | Revision Log
Revision 1946 -
(hide annotations)
(download)
Wed Nov 14 15:25:09 2012 UTC (11 years, 10 months ago) by niro
File size: 67916 byte(s)
Wed Nov 14 15:25:09 2012 UTC (11 years, 10 months ago) by niro
File size: 67916 byte(s)
3.4.18-alx-r1
1 | niro | 1946 | diff --git a/Documentation/devicetree/bindings/arm/atmel-at91.txt b/Documentation/devicetree/bindings/arm/atmel-at91.txt |
2 | index ecc81e3..d187e9f 100644 | ||
3 | --- a/Documentation/devicetree/bindings/arm/atmel-at91.txt | ||
4 | +++ b/Documentation/devicetree/bindings/arm/atmel-at91.txt | ||
5 | @@ -8,7 +8,7 @@ PIT Timer required properties: | ||
6 | shared across all System Controller members. | ||
7 | |||
8 | TC/TCLIB Timer required properties: | ||
9 | -- compatible: Should be "atmel,<chip>-pit". | ||
10 | +- compatible: Should be "atmel,<chip>-tcb". | ||
11 | <chip> can be "at91rm9200" or "at91sam9x5" | ||
12 | - reg: Should contain registers location and length | ||
13 | - interrupts: Should contain all interrupts for the TC block | ||
14 | diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c | ||
15 | index 7babc3f..8f14a1b 100644 | ||
16 | --- a/arch/arm/kernel/smp.c | ||
17 | +++ b/arch/arm/kernel/smp.c | ||
18 | @@ -249,18 +249,24 @@ static void percpu_timer_setup(void); | ||
19 | asmlinkage void __cpuinit secondary_start_kernel(void) | ||
20 | { | ||
21 | struct mm_struct *mm = &init_mm; | ||
22 | - unsigned int cpu = smp_processor_id(); | ||
23 | + unsigned int cpu; | ||
24 | + | ||
25 | + /* | ||
26 | + * The identity mapping is uncached (strongly ordered), so | ||
27 | + * switch away from it before attempting any exclusive accesses. | ||
28 | + */ | ||
29 | + cpu_switch_mm(mm->pgd, mm); | ||
30 | + enter_lazy_tlb(mm, current); | ||
31 | + local_flush_tlb_all(); | ||
32 | |||
33 | /* | ||
34 | * All kernel threads share the same mm context; grab a | ||
35 | * reference and switch to it. | ||
36 | */ | ||
37 | + cpu = smp_processor_id(); | ||
38 | atomic_inc(&mm->mm_count); | ||
39 | current->active_mm = mm; | ||
40 | cpumask_set_cpu(cpu, mm_cpumask(mm)); | ||
41 | - cpu_switch_mm(mm->pgd, mm); | ||
42 | - enter_lazy_tlb(mm, current); | ||
43 | - local_flush_tlb_all(); | ||
44 | |||
45 | printk("CPU%u: Booted secondary processor\n", cpu); | ||
46 | |||
47 | diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c | ||
48 | index 05774e5..3b0c719 100644 | ||
49 | --- a/arch/arm/mach-at91/at91rm9200_devices.c | ||
50 | +++ b/arch/arm/mach-at91/at91rm9200_devices.c | ||
51 | @@ -463,7 +463,7 @@ static struct i2c_gpio_platform_data pdata = { | ||
52 | |||
53 | static struct platform_device at91rm9200_twi_device = { | ||
54 | .name = "i2c-gpio", | ||
55 | - .id = -1, | ||
56 | + .id = 0, | ||
57 | .dev.platform_data = &pdata, | ||
58 | }; | ||
59 | |||
60 | diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c | ||
61 | index 5652dde..151fec4 100644 | ||
62 | --- a/arch/arm/mach-at91/at91sam9260_devices.c | ||
63 | +++ b/arch/arm/mach-at91/at91sam9260_devices.c | ||
64 | @@ -468,7 +468,7 @@ static struct i2c_gpio_platform_data pdata = { | ||
65 | |||
66 | static struct platform_device at91sam9260_twi_device = { | ||
67 | .name = "i2c-gpio", | ||
68 | - .id = -1, | ||
69 | + .id = 0, | ||
70 | .dev.platform_data = &pdata, | ||
71 | }; | ||
72 | |||
73 | diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c | ||
74 | index 4db961a..8a29c6c 100644 | ||
75 | --- a/arch/arm/mach-at91/at91sam9261_devices.c | ||
76 | +++ b/arch/arm/mach-at91/at91sam9261_devices.c | ||
77 | @@ -285,7 +285,7 @@ static struct i2c_gpio_platform_data pdata = { | ||
78 | |||
79 | static struct platform_device at91sam9261_twi_device = { | ||
80 | .name = "i2c-gpio", | ||
81 | - .id = -1, | ||
82 | + .id = 0, | ||
83 | .dev.platform_data = &pdata, | ||
84 | }; | ||
85 | |||
86 | diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c | ||
87 | index fe99206..8d44322 100644 | ||
88 | --- a/arch/arm/mach-at91/at91sam9263_devices.c | ||
89 | +++ b/arch/arm/mach-at91/at91sam9263_devices.c | ||
90 | @@ -542,7 +542,7 @@ static struct i2c_gpio_platform_data pdata = { | ||
91 | |||
92 | static struct platform_device at91sam9263_twi_device = { | ||
93 | .name = "i2c-gpio", | ||
94 | - .id = -1, | ||
95 | + .id = 0, | ||
96 | .dev.platform_data = &pdata, | ||
97 | }; | ||
98 | |||
99 | diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c | ||
100 | index fe4ae22..b8d4114 100644 | ||
101 | --- a/arch/arm/mach-at91/at91sam9rl_devices.c | ||
102 | +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | ||
103 | @@ -314,7 +314,7 @@ static struct i2c_gpio_platform_data pdata = { | ||
104 | |||
105 | static struct platform_device at91sam9rl_twi_device = { | ||
106 | .name = "i2c-gpio", | ||
107 | - .id = -1, | ||
108 | + .id = 0, | ||
109 | .dev.platform_data = &pdata, | ||
110 | }; | ||
111 | |||
112 | diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c | ||
113 | index f44a2e7..582142e 100644 | ||
114 | --- a/arch/arm/mach-at91/setup.c | ||
115 | +++ b/arch/arm/mach-at91/setup.c | ||
116 | @@ -146,7 +146,7 @@ static void __init soc_detect(u32 dbgu_base) | ||
117 | } | ||
118 | |||
119 | /* at91sam9g10 */ | ||
120 | - if ((cidr & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) { | ||
121 | + if ((socid & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) { | ||
122 | at91_soc_initdata.type = AT91_SOC_SAM9G10; | ||
123 | at91_boot_soc = at91sam9261_soc; | ||
124 | } | ||
125 | diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c | ||
126 | index 5ccd6e8..c2b77e5 100644 | ||
127 | --- a/arch/arm/mach-exynos/common.c | ||
128 | +++ b/arch/arm/mach-exynos/common.c | ||
129 | @@ -44,6 +44,7 @@ | ||
130 | #include <plat/fimc-core.h> | ||
131 | #include <plat/iic-core.h> | ||
132 | #include <plat/tv-core.h> | ||
133 | +#include <plat/spi-core.h> | ||
134 | #include <plat/regs-serial.h> | ||
135 | |||
136 | #include "common.h" | ||
137 | @@ -338,6 +339,8 @@ static void __init exynos4_map_io(void) | ||
138 | |||
139 | s5p_fb_setname(0, "exynos4-fb"); | ||
140 | s5p_hdmi_setname("exynos4-hdmi"); | ||
141 | + | ||
142 | + s3c64xx_spi_setname("exynos4210-spi"); | ||
143 | } | ||
144 | |||
145 | static void __init exynos5_map_io(void) | ||
146 | @@ -358,6 +361,8 @@ static void __init exynos5_map_io(void) | ||
147 | s3c_i2c0_setname("s3c2440-i2c"); | ||
148 | s3c_i2c1_setname("s3c2440-i2c"); | ||
149 | s3c_i2c2_setname("s3c2440-i2c"); | ||
150 | + | ||
151 | + s3c64xx_spi_setname("exynos4210-spi"); | ||
152 | } | ||
153 | |||
154 | static void __init exynos4_init_clocks(int xtal) | ||
155 | diff --git a/arch/arm/mach-s3c24xx/s3c2416.c b/arch/arm/mach-s3c24xx/s3c2416.c | ||
156 | index 7743fad..f74818d 100644 | ||
157 | --- a/arch/arm/mach-s3c24xx/s3c2416.c | ||
158 | +++ b/arch/arm/mach-s3c24xx/s3c2416.c | ||
159 | @@ -61,6 +61,7 @@ | ||
160 | #include <plat/nand-core.h> | ||
161 | #include <plat/adc-core.h> | ||
162 | #include <plat/rtc-core.h> | ||
163 | +#include <plat/spi-core.h> | ||
164 | |||
165 | static struct map_desc s3c2416_iodesc[] __initdata = { | ||
166 | IODESC_ENT(WATCHDOG), | ||
167 | @@ -131,6 +132,7 @@ void __init s3c2416_map_io(void) | ||
168 | /* initialize device information early */ | ||
169 | s3c2416_default_sdhci0(); | ||
170 | s3c2416_default_sdhci1(); | ||
171 | + s3c64xx_spi_setname("s3c2443-spi"); | ||
172 | |||
173 | iotable_init(s3c2416_iodesc, ARRAY_SIZE(s3c2416_iodesc)); | ||
174 | } | ||
175 | diff --git a/arch/arm/mach-s3c24xx/s3c2443.c b/arch/arm/mach-s3c24xx/s3c2443.c | ||
176 | index ab648ad..165b6a6 100644 | ||
177 | --- a/arch/arm/mach-s3c24xx/s3c2443.c | ||
178 | +++ b/arch/arm/mach-s3c24xx/s3c2443.c | ||
179 | @@ -43,6 +43,7 @@ | ||
180 | #include <plat/nand-core.h> | ||
181 | #include <plat/adc-core.h> | ||
182 | #include <plat/rtc-core.h> | ||
183 | +#include <plat/spi-core.h> | ||
184 | |||
185 | static struct map_desc s3c2443_iodesc[] __initdata = { | ||
186 | IODESC_ENT(WATCHDOG), | ||
187 | @@ -100,6 +101,9 @@ void __init s3c2443_map_io(void) | ||
188 | s3c24xx_gpiocfg_default.set_pull = s3c2443_gpio_setpull; | ||
189 | s3c24xx_gpiocfg_default.get_pull = s3c2443_gpio_getpull; | ||
190 | |||
191 | + /* initialize device information early */ | ||
192 | + s3c64xx_spi_setname("s3c2443-spi"); | ||
193 | + | ||
194 | iotable_init(s3c2443_iodesc, ARRAY_SIZE(s3c2443_iodesc)); | ||
195 | } | ||
196 | |||
197 | diff --git a/arch/arm/mach-s5p64x0/common.c b/arch/arm/mach-s5p64x0/common.c | ||
198 | index 6e6a0a9..111e404 100644 | ||
199 | --- a/arch/arm/mach-s5p64x0/common.c | ||
200 | +++ b/arch/arm/mach-s5p64x0/common.c | ||
201 | @@ -44,6 +44,7 @@ | ||
202 | #include <plat/sdhci.h> | ||
203 | #include <plat/adc-core.h> | ||
204 | #include <plat/fb-core.h> | ||
205 | +#include <plat/spi-core.h> | ||
206 | #include <plat/gpio-cfg.h> | ||
207 | #include <plat/regs-irqtype.h> | ||
208 | #include <plat/regs-serial.h> | ||
209 | @@ -179,6 +180,7 @@ void __init s5p6440_map_io(void) | ||
210 | /* initialize any device information early */ | ||
211 | s3c_adc_setname("s3c64xx-adc"); | ||
212 | s3c_fb_setname("s5p64x0-fb"); | ||
213 | + s3c64xx_spi_setname("s5p64x0-spi"); | ||
214 | |||
215 | s5p64x0_default_sdhci0(); | ||
216 | s5p64x0_default_sdhci1(); | ||
217 | @@ -193,6 +195,7 @@ void __init s5p6450_map_io(void) | ||
218 | /* initialize any device information early */ | ||
219 | s3c_adc_setname("s3c64xx-adc"); | ||
220 | s3c_fb_setname("s5p64x0-fb"); | ||
221 | + s3c64xx_spi_setname("s5p64x0-spi"); | ||
222 | |||
223 | s5p64x0_default_sdhci0(); | ||
224 | s5p64x0_default_sdhci1(); | ||
225 | diff --git a/arch/arm/mach-s5pc100/common.c b/arch/arm/mach-s5pc100/common.c | ||
226 | index 6219086..cc6e561 100644 | ||
227 | --- a/arch/arm/mach-s5pc100/common.c | ||
228 | +++ b/arch/arm/mach-s5pc100/common.c | ||
229 | @@ -45,6 +45,7 @@ | ||
230 | #include <plat/fb-core.h> | ||
231 | #include <plat/iic-core.h> | ||
232 | #include <plat/onenand-core.h> | ||
233 | +#include <plat/spi-core.h> | ||
234 | #include <plat/regs-serial.h> | ||
235 | #include <plat/watchdog-reset.h> | ||
236 | |||
237 | @@ -165,6 +166,8 @@ void __init s5pc100_map_io(void) | ||
238 | s3c_onenand_setname("s5pc100-onenand"); | ||
239 | s3c_fb_setname("s5pc100-fb"); | ||
240 | s3c_cfcon_setname("s5pc100-pata"); | ||
241 | + | ||
242 | + s3c64xx_spi_setname("s5pc100-spi"); | ||
243 | } | ||
244 | |||
245 | void __init s5pc100_init_clocks(int xtal) | ||
246 | diff --git a/arch/arm/mach-s5pv210/common.c b/arch/arm/mach-s5pv210/common.c | ||
247 | index 4c9e902..a0c50ef 100644 | ||
248 | --- a/arch/arm/mach-s5pv210/common.c | ||
249 | +++ b/arch/arm/mach-s5pv210/common.c | ||
250 | @@ -43,6 +43,7 @@ | ||
251 | #include <plat/iic-core.h> | ||
252 | #include <plat/keypad-core.h> | ||
253 | #include <plat/tv-core.h> | ||
254 | +#include <plat/spi-core.h> | ||
255 | #include <plat/regs-serial.h> | ||
256 | |||
257 | #include "common.h" | ||
258 | @@ -196,6 +197,8 @@ void __init s5pv210_map_io(void) | ||
259 | |||
260 | /* setup TV devices */ | ||
261 | s5p_hdmi_setname("s5pv210-hdmi"); | ||
262 | + | ||
263 | + s3c64xx_spi_setname("s5pv210-spi"); | ||
264 | } | ||
265 | |||
266 | void __init s5pv210_init_clocks(int xtal) | ||
267 | diff --git a/arch/arm/plat-samsung/include/plat/spi-core.h b/arch/arm/plat-samsung/include/plat/spi-core.h | ||
268 | new file mode 100644 | ||
269 | index 0000000..0b9428a | ||
270 | --- /dev/null | ||
271 | +++ b/arch/arm/plat-samsung/include/plat/spi-core.h | ||
272 | @@ -0,0 +1,30 @@ | ||
273 | +/* | ||
274 | + * Copyright (C) 2012 Heiko Stuebner <heiko@sntech.de> | ||
275 | + * | ||
276 | + * This program is free software; you can redistribute it and/or modify | ||
277 | + * it under the terms of the GNU General Public License version 2 as | ||
278 | + * published by the Free Software Foundation. | ||
279 | + */ | ||
280 | + | ||
281 | +#ifndef __PLAT_S3C_SPI_CORE_H | ||
282 | +#define __PLAT_S3C_SPI_CORE_H | ||
283 | + | ||
284 | +/* These functions are only for use with the core support code, such as | ||
285 | + * the cpu specific initialisation code | ||
286 | + */ | ||
287 | + | ||
288 | +/* re-define device name depending on support. */ | ||
289 | +static inline void s3c64xx_spi_setname(char *name) | ||
290 | +{ | ||
291 | +#ifdef CONFIG_S3C64XX_DEV_SPI0 | ||
292 | + s3c64xx_device_spi0.name = name; | ||
293 | +#endif | ||
294 | +#ifdef CONFIG_S3C64XX_DEV_SPI1 | ||
295 | + s3c64xx_device_spi1.name = name; | ||
296 | +#endif | ||
297 | +#ifdef CONFIG_S3C64XX_DEV_SPI2 | ||
298 | + s3c64xx_device_spi2.name = name; | ||
299 | +#endif | ||
300 | +} | ||
301 | + | ||
302 | +#endif /* __PLAT_S3C_SPI_CORE_H */ | ||
303 | diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h | ||
304 | index c9dcc18..029189d 100644 | ||
305 | --- a/arch/x86/include/asm/efi.h | ||
306 | +++ b/arch/x86/include/asm/efi.h | ||
307 | @@ -98,6 +98,7 @@ extern void efi_set_executable(efi_memory_desc_t *md, bool executable); | ||
308 | extern int efi_memblock_x86_reserve_range(void); | ||
309 | extern void efi_call_phys_prelog(void); | ||
310 | extern void efi_call_phys_epilog(void); | ||
311 | +extern void efi_unmap_memmap(void); | ||
312 | |||
313 | #ifndef CONFIG_EFI | ||
314 | /* | ||
315 | diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c | ||
316 | index 62d61e9..298dc00 100644 | ||
317 | --- a/arch/x86/kernel/e820.c | ||
318 | +++ b/arch/x86/kernel/e820.c | ||
319 | @@ -1076,6 +1076,9 @@ void __init memblock_x86_fill(void) | ||
320 | memblock_add(ei->addr, ei->size); | ||
321 | } | ||
322 | |||
323 | + /* throw away partial pages */ | ||
324 | + memblock_trim_memory(PAGE_SIZE); | ||
325 | + | ||
326 | memblock_dump_all(); | ||
327 | } | ||
328 | |||
329 | diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c | ||
330 | index fbbd1eb..ae98dbb 100644 | ||
331 | --- a/arch/x86/kernel/setup.c | ||
332 | +++ b/arch/x86/kernel/setup.c | ||
333 | @@ -928,18 +928,19 @@ void __init setup_arch(char **cmdline_p) | ||
334 | #ifdef CONFIG_X86_64 | ||
335 | if (max_pfn > max_low_pfn) { | ||
336 | int i; | ||
337 | - for (i = 0; i < e820.nr_map; i++) { | ||
338 | - struct e820entry *ei = &e820.map[i]; | ||
339 | + unsigned long start, end; | ||
340 | + unsigned long start_pfn, end_pfn; | ||
341 | |||
342 | - if (ei->addr + ei->size <= 1UL << 32) | ||
343 | - continue; | ||
344 | + for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, | ||
345 | + NULL) { | ||
346 | |||
347 | - if (ei->type == E820_RESERVED) | ||
348 | + end = PFN_PHYS(end_pfn); | ||
349 | + if (end <= (1UL<<32)) | ||
350 | continue; | ||
351 | |||
352 | + start = PFN_PHYS(start_pfn); | ||
353 | max_pfn_mapped = init_memory_mapping( | ||
354 | - ei->addr < 1UL << 32 ? 1UL << 32 : ei->addr, | ||
355 | - ei->addr + ei->size); | ||
356 | + max((1UL<<32), start), end); | ||
357 | } | ||
358 | |||
359 | /* can we preseve max_low_pfn ?*/ | ||
360 | @@ -1053,6 +1054,18 @@ void __init setup_arch(char **cmdline_p) | ||
361 | mcheck_init(); | ||
362 | |||
363 | arch_init_ideal_nops(); | ||
364 | + | ||
365 | +#ifdef CONFIG_EFI | ||
366 | + /* Once setup is done above, disable efi_enabled on mismatched | ||
367 | + * firmware/kernel archtectures since there is no support for | ||
368 | + * runtime services. | ||
369 | + */ | ||
370 | + if (efi_enabled && IS_ENABLED(CONFIG_X86_64) != efi_64bit) { | ||
371 | + pr_info("efi: Setup done, disabling due to 32/64-bit mismatch\n"); | ||
372 | + efi_unmap_memmap(); | ||
373 | + efi_enabled = 0; | ||
374 | + } | ||
375 | +#endif | ||
376 | } | ||
377 | |||
378 | #ifdef CONFIG_X86_32 | ||
379 | diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c | ||
380 | index 4f0cec7..fae7090 100644 | ||
381 | --- a/arch/x86/mm/init.c | ||
382 | +++ b/arch/x86/mm/init.c | ||
383 | @@ -29,36 +29,50 @@ int direct_gbpages | ||
384 | #endif | ||
385 | ; | ||
386 | |||
387 | -static void __init find_early_table_space(unsigned long end, int use_pse, | ||
388 | - int use_gbpages) | ||
389 | +struct map_range { | ||
390 | + unsigned long start; | ||
391 | + unsigned long end; | ||
392 | + unsigned page_size_mask; | ||
393 | +}; | ||
394 | + | ||
395 | +/* | ||
396 | + * First calculate space needed for kernel direct mapping page tables to cover | ||
397 | + * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB | ||
398 | + * pages. Then find enough contiguous space for those page tables. | ||
399 | + */ | ||
400 | +static void __init find_early_table_space(struct map_range *mr, int nr_range) | ||
401 | { | ||
402 | - unsigned long puds, pmds, ptes, tables, start = 0, good_end = end; | ||
403 | + int i; | ||
404 | + unsigned long puds = 0, pmds = 0, ptes = 0, tables; | ||
405 | + unsigned long start = 0, good_end; | ||
406 | phys_addr_t base; | ||
407 | |||
408 | - puds = (end + PUD_SIZE - 1) >> PUD_SHIFT; | ||
409 | - tables = roundup(puds * sizeof(pud_t), PAGE_SIZE); | ||
410 | + for (i = 0; i < nr_range; i++) { | ||
411 | + unsigned long range, extra; | ||
412 | |||
413 | - if (use_gbpages) { | ||
414 | - unsigned long extra; | ||
415 | + range = mr[i].end - mr[i].start; | ||
416 | + puds += (range + PUD_SIZE - 1) >> PUD_SHIFT; | ||
417 | |||
418 | - extra = end - ((end>>PUD_SHIFT) << PUD_SHIFT); | ||
419 | - pmds = (extra + PMD_SIZE - 1) >> PMD_SHIFT; | ||
420 | - } else | ||
421 | - pmds = (end + PMD_SIZE - 1) >> PMD_SHIFT; | ||
422 | - | ||
423 | - tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE); | ||
424 | + if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) { | ||
425 | + extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT); | ||
426 | + pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT; | ||
427 | + } else { | ||
428 | + pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT; | ||
429 | + } | ||
430 | |||
431 | - if (use_pse) { | ||
432 | - unsigned long extra; | ||
433 | - | ||
434 | - extra = end - ((end>>PMD_SHIFT) << PMD_SHIFT); | ||
435 | + if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) { | ||
436 | + extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT); | ||
437 | #ifdef CONFIG_X86_32 | ||
438 | - extra += PMD_SIZE; | ||
439 | + extra += PMD_SIZE; | ||
440 | #endif | ||
441 | - ptes = (extra + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
442 | - } else | ||
443 | - ptes = (end + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
444 | + ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
445 | + } else { | ||
446 | + ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
447 | + } | ||
448 | + } | ||
449 | |||
450 | + tables = roundup(puds * sizeof(pud_t), PAGE_SIZE); | ||
451 | + tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE); | ||
452 | tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE); | ||
453 | |||
454 | #ifdef CONFIG_X86_32 | ||
455 | @@ -75,8 +89,9 @@ static void __init find_early_table_space(unsigned long end, int use_pse, | ||
456 | pgt_buf_end = pgt_buf_start; | ||
457 | pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT); | ||
458 | |||
459 | - printk(KERN_DEBUG "kernel direct mapping tables up to %lx @ %lx-%lx\n", | ||
460 | - end, pgt_buf_start << PAGE_SHIFT, pgt_buf_top << PAGE_SHIFT); | ||
461 | + printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx]\n", | ||
462 | + mr[nr_range - 1].end - 1, pgt_buf_start << PAGE_SHIFT, | ||
463 | + (pgt_buf_top << PAGE_SHIFT) - 1); | ||
464 | } | ||
465 | |||
466 | void __init native_pagetable_reserve(u64 start, u64 end) | ||
467 | @@ -84,12 +99,6 @@ void __init native_pagetable_reserve(u64 start, u64 end) | ||
468 | memblock_reserve(start, end - start); | ||
469 | } | ||
470 | |||
471 | -struct map_range { | ||
472 | - unsigned long start; | ||
473 | - unsigned long end; | ||
474 | - unsigned page_size_mask; | ||
475 | -}; | ||
476 | - | ||
477 | #ifdef CONFIG_X86_32 | ||
478 | #define NR_RANGE_MR 3 | ||
479 | #else /* CONFIG_X86_64 */ | ||
480 | @@ -261,7 +270,7 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, | ||
481 | * nodes are discovered. | ||
482 | */ | ||
483 | if (!after_bootmem) | ||
484 | - find_early_table_space(end, use_pse, use_gbpages); | ||
485 | + find_early_table_space(mr, nr_range); | ||
486 | |||
487 | for (i = 0; i < nr_range; i++) | ||
488 | ret = kernel_physical_mapping_init(mr[i].start, mr[i].end, | ||
489 | diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c | ||
490 | index f55a4ce..72d8899 100644 | ||
491 | --- a/arch/x86/platform/efi/efi.c | ||
492 | +++ b/arch/x86/platform/efi/efi.c | ||
493 | @@ -69,11 +69,15 @@ EXPORT_SYMBOL(efi); | ||
494 | struct efi_memory_map memmap; | ||
495 | |||
496 | bool efi_64bit; | ||
497 | -static bool efi_native; | ||
498 | |||
499 | static struct efi efi_phys __initdata; | ||
500 | static efi_system_table_t efi_systab __initdata; | ||
501 | |||
502 | +static inline bool efi_is_native(void) | ||
503 | +{ | ||
504 | + return IS_ENABLED(CONFIG_X86_64) == efi_64bit; | ||
505 | +} | ||
506 | + | ||
507 | static int __init setup_noefi(char *arg) | ||
508 | { | ||
509 | efi_enabled = 0; | ||
510 | @@ -419,10 +423,21 @@ void __init efi_reserve_boot_services(void) | ||
511 | } | ||
512 | } | ||
513 | |||
514 | -static void __init efi_free_boot_services(void) | ||
515 | +void __init efi_unmap_memmap(void) | ||
516 | +{ | ||
517 | + if (memmap.map) { | ||
518 | + early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size); | ||
519 | + memmap.map = NULL; | ||
520 | + } | ||
521 | +} | ||
522 | + | ||
523 | +void __init efi_free_boot_services(void) | ||
524 | { | ||
525 | void *p; | ||
526 | |||
527 | + if (!efi_is_native()) | ||
528 | + return; | ||
529 | + | ||
530 | for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { | ||
531 | efi_memory_desc_t *md = p; | ||
532 | unsigned long long start = md->phys_addr; | ||
533 | @@ -438,6 +453,8 @@ static void __init efi_free_boot_services(void) | ||
534 | |||
535 | free_bootmem_late(start, size); | ||
536 | } | ||
537 | + | ||
538 | + efi_unmap_memmap(); | ||
539 | } | ||
540 | |||
541 | static int __init efi_systab_init(void *phys) | ||
542 | @@ -670,12 +687,10 @@ void __init efi_init(void) | ||
543 | return; | ||
544 | } | ||
545 | efi_phys.systab = (efi_system_table_t *)boot_params.efi_info.efi_systab; | ||
546 | - efi_native = !efi_64bit; | ||
547 | #else | ||
548 | efi_phys.systab = (efi_system_table_t *) | ||
549 | (boot_params.efi_info.efi_systab | | ||
550 | ((__u64)boot_params.efi_info.efi_systab_hi<<32)); | ||
551 | - efi_native = efi_64bit; | ||
552 | #endif | ||
553 | |||
554 | if (efi_systab_init(efi_phys.systab)) { | ||
555 | @@ -709,7 +724,7 @@ void __init efi_init(void) | ||
556 | * that doesn't match the kernel 32/64-bit mode. | ||
557 | */ | ||
558 | |||
559 | - if (!efi_native) | ||
560 | + if (!efi_is_native()) | ||
561 | pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n"); | ||
562 | else if (efi_runtime_init()) { | ||
563 | efi_enabled = 0; | ||
564 | @@ -721,7 +736,7 @@ void __init efi_init(void) | ||
565 | return; | ||
566 | } | ||
567 | #ifdef CONFIG_X86_32 | ||
568 | - if (efi_native) { | ||
569 | + if (efi_is_native()) { | ||
570 | x86_platform.get_wallclock = efi_get_time; | ||
571 | x86_platform.set_wallclock = efi_set_rtc_mmss; | ||
572 | } | ||
573 | @@ -787,8 +802,10 @@ void __init efi_enter_virtual_mode(void) | ||
574 | * non-native EFI | ||
575 | */ | ||
576 | |||
577 | - if (!efi_native) | ||
578 | - goto out; | ||
579 | + if (!efi_is_native()) { | ||
580 | + efi_unmap_memmap(); | ||
581 | + return; | ||
582 | + } | ||
583 | |||
584 | /* Merge contiguous regions of the same type and attribute */ | ||
585 | for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { | ||
586 | @@ -878,13 +895,6 @@ void __init efi_enter_virtual_mode(void) | ||
587 | } | ||
588 | |||
589 | /* | ||
590 | - * Thankfully, it does seem that no runtime services other than | ||
591 | - * SetVirtualAddressMap() will touch boot services code, so we can | ||
592 | - * get rid of it all at this point | ||
593 | - */ | ||
594 | - efi_free_boot_services(); | ||
595 | - | ||
596 | - /* | ||
597 | * Now that EFI is in virtual mode, update the function | ||
598 | * pointers in the runtime service table to the new virtual addresses. | ||
599 | * | ||
600 | @@ -907,9 +917,6 @@ void __init efi_enter_virtual_mode(void) | ||
601 | if (__supported_pte_mask & _PAGE_NX) | ||
602 | runtime_code_page_mkexec(); | ||
603 | |||
604 | -out: | ||
605 | - early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size); | ||
606 | - memmap.map = NULL; | ||
607 | kfree(new_memmap); | ||
608 | } | ||
609 | |||
610 | diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c | ||
611 | index 7e138ec..edb9233 100644 | ||
612 | --- a/drivers/bcma/main.c | ||
613 | +++ b/drivers/bcma/main.c | ||
614 | @@ -131,9 +131,10 @@ static int bcma_register_cores(struct bcma_bus *bus) | ||
615 | |||
616 | static void bcma_unregister_cores(struct bcma_bus *bus) | ||
617 | { | ||
618 | - struct bcma_device *core; | ||
619 | + struct bcma_device *core, *tmp; | ||
620 | |||
621 | - list_for_each_entry(core, &bus->cores, list) { | ||
622 | + list_for_each_entry_safe(core, tmp, &bus->cores, list) { | ||
623 | + list_del(&core->list); | ||
624 | if (core->dev_registered) | ||
625 | device_unregister(&core->dev); | ||
626 | } | ||
627 | diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c | ||
628 | index 1a40935..c671369 100644 | ||
629 | --- a/drivers/cpufreq/powernow-k8.c | ||
630 | +++ b/drivers/cpufreq/powernow-k8.c | ||
631 | @@ -1223,14 +1223,7 @@ static int powernowk8_target(struct cpufreq_policy *pol, | ||
632 | struct powernowk8_target_arg pta = { .pol = pol, .targfreq = targfreq, | ||
633 | .relation = relation }; | ||
634 | |||
635 | - /* | ||
636 | - * Must run on @pol->cpu. cpufreq core is responsible for ensuring | ||
637 | - * that we're bound to the current CPU and pol->cpu stays online. | ||
638 | - */ | ||
639 | - if (smp_processor_id() == pol->cpu) | ||
640 | - return powernowk8_target_fn(&pta); | ||
641 | - else | ||
642 | - return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta); | ||
643 | + return work_on_cpu(pol->cpu, powernowk8_target_fn, &pta); | ||
644 | } | ||
645 | |||
646 | /* Driver entry point to verify the policy and range of frequencies */ | ||
647 | diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c | ||
648 | index bb787d8..180f523 100644 | ||
649 | --- a/drivers/dma/imx-dma.c | ||
650 | +++ b/drivers/dma/imx-dma.c | ||
651 | @@ -473,8 +473,10 @@ static int imxdma_xfer_desc(struct imxdma_desc *d) | ||
652 | slot = i; | ||
653 | break; | ||
654 | } | ||
655 | - if (slot < 0) | ||
656 | + if (slot < 0) { | ||
657 | + spin_unlock_irqrestore(&imxdma->lock, flags); | ||
658 | return -EBUSY; | ||
659 | + } | ||
660 | |||
661 | imxdma->slots_2d[slot].xsr = d->x; | ||
662 | imxdma->slots_2d[slot].ysr = d->y; | ||
663 | diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c | ||
664 | index 434ad31..c439489 100644 | ||
665 | --- a/drivers/dma/sirf-dma.c | ||
666 | +++ b/drivers/dma/sirf-dma.c | ||
667 | @@ -109,7 +109,7 @@ static void sirfsoc_dma_execute(struct sirfsoc_dma_chan *schan) | ||
668 | sdesc = list_first_entry(&schan->queued, struct sirfsoc_dma_desc, | ||
669 | node); | ||
670 | /* Move the first queued descriptor to active list */ | ||
671 | - list_move_tail(&schan->queued, &schan->active); | ||
672 | + list_move_tail(&sdesc->node, &schan->active); | ||
673 | |||
674 | /* Start the DMA transfer */ | ||
675 | writel_relaxed(sdesc->width, sdma->base + SIRFSOC_DMA_WIDTH_0 + | ||
676 | @@ -428,7 +428,7 @@ static struct dma_async_tx_descriptor *sirfsoc_dma_prep_interleaved( | ||
677 | unsigned long iflags; | ||
678 | int ret; | ||
679 | |||
680 | - if ((xt->dir != DMA_MEM_TO_DEV) || (xt->dir != DMA_DEV_TO_MEM)) { | ||
681 | + if ((xt->dir != DMA_MEM_TO_DEV) && (xt->dir != DMA_DEV_TO_MEM)) { | ||
682 | ret = -EINVAL; | ||
683 | goto err_dir; | ||
684 | } | ||
685 | diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c | ||
686 | index 9fadd64..4ff7d5f 100644 | ||
687 | --- a/drivers/gpu/drm/i915/intel_lvds.c | ||
688 | +++ b/drivers/gpu/drm/i915/intel_lvds.c | ||
689 | @@ -777,6 +777,14 @@ static const struct dmi_system_id intel_no_lvds[] = { | ||
690 | DMI_MATCH(DMI_BOARD_NAME, "MS-7469"), | ||
691 | }, | ||
692 | }, | ||
693 | + { | ||
694 | + .callback = intel_no_lvds_dmi_callback, | ||
695 | + .ident = "ZOTAC ZBOXSD-ID12/ID13", | ||
696 | + .matches = { | ||
697 | + DMI_MATCH(DMI_BOARD_VENDOR, "ZOTAC"), | ||
698 | + DMI_MATCH(DMI_BOARD_NAME, "ZBOXSD-ID12/ID13"), | ||
699 | + }, | ||
700 | + }, | ||
701 | |||
702 | { } /* terminating entry */ | ||
703 | }; | ||
704 | diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c | ||
705 | index ea69dae..977b22d 100644 | ||
706 | --- a/drivers/gpu/drm/radeon/evergreen_cs.c | ||
707 | +++ b/drivers/gpu/drm/radeon/evergreen_cs.c | ||
708 | @@ -2775,6 +2775,7 @@ static bool evergreen_vm_reg_valid(u32 reg) | ||
709 | case CAYMAN_SQ_EX_ALLOC_TABLE_SLOTS: | ||
710 | return true; | ||
711 | default: | ||
712 | + DRM_ERROR("Invalid register 0x%x in CS\n", reg); | ||
713 | return false; | ||
714 | } | ||
715 | } | ||
716 | diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c | ||
717 | index 4065374..f4c3d28 100644 | ||
718 | --- a/drivers/hv/channel.c | ||
719 | +++ b/drivers/hv/channel.c | ||
720 | @@ -146,14 +146,14 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, | ||
721 | |||
722 | if (ret != 0) { | ||
723 | err = ret; | ||
724 | - goto errorout; | ||
725 | + goto error0; | ||
726 | } | ||
727 | |||
728 | ret = hv_ringbuffer_init( | ||
729 | &newchannel->inbound, in, recv_ringbuffer_size); | ||
730 | if (ret != 0) { | ||
731 | err = ret; | ||
732 | - goto errorout; | ||
733 | + goto error0; | ||
734 | } | ||
735 | |||
736 | |||
737 | @@ -168,7 +168,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, | ||
738 | |||
739 | if (ret != 0) { | ||
740 | err = ret; | ||
741 | - goto errorout; | ||
742 | + goto error0; | ||
743 | } | ||
744 | |||
745 | /* Create and init the channel open message */ | ||
746 | @@ -177,7 +177,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, | ||
747 | GFP_KERNEL); | ||
748 | if (!open_info) { | ||
749 | err = -ENOMEM; | ||
750 | - goto errorout; | ||
751 | + goto error0; | ||
752 | } | ||
753 | |||
754 | init_completion(&open_info->waitevent); | ||
755 | @@ -193,7 +193,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, | ||
756 | |||
757 | if (userdatalen > MAX_USER_DEFINED_BYTES) { | ||
758 | err = -EINVAL; | ||
759 | - goto errorout; | ||
760 | + goto error0; | ||
761 | } | ||
762 | |||
763 | if (userdatalen) | ||
764 | @@ -208,19 +208,18 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, | ||
765 | sizeof(struct vmbus_channel_open_channel)); | ||
766 | |||
767 | if (ret != 0) | ||
768 | - goto cleanup; | ||
769 | + goto error1; | ||
770 | |||
771 | t = wait_for_completion_timeout(&open_info->waitevent, 5*HZ); | ||
772 | if (t == 0) { | ||
773 | err = -ETIMEDOUT; | ||
774 | - goto errorout; | ||
775 | + goto error1; | ||
776 | } | ||
777 | |||
778 | |||
779 | if (open_info->response.open_result.status) | ||
780 | err = open_info->response.open_result.status; | ||
781 | |||
782 | -cleanup: | ||
783 | spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); | ||
784 | list_del(&open_info->msglistentry); | ||
785 | spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); | ||
786 | @@ -228,9 +227,12 @@ cleanup: | ||
787 | kfree(open_info); | ||
788 | return err; | ||
789 | |||
790 | -errorout: | ||
791 | - hv_ringbuffer_cleanup(&newchannel->outbound); | ||
792 | - hv_ringbuffer_cleanup(&newchannel->inbound); | ||
793 | +error1: | ||
794 | + spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); | ||
795 | + list_del(&open_info->msglistentry); | ||
796 | + spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); | ||
797 | + | ||
798 | +error0: | ||
799 | free_pages((unsigned long)out, | ||
800 | get_order(send_ringbuffer_size + recv_ringbuffer_size)); | ||
801 | kfree(open_info); | ||
802 | diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | ||
803 | index 46c79a3..2b4b633 100644 | ||
804 | --- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | ||
805 | +++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | ||
806 | @@ -533,107 +533,107 @@ static const u32 ar9300_2p2_baseband_core[][2] = { | ||
807 | |||
808 | static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = { | ||
809 | /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ | ||
810 | - {0x0000a2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, | ||
811 | - {0x0000a2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, | ||
812 | - {0x0000a2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, | ||
813 | + {0x0000a2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, | ||
814 | + {0x0000a2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, | ||
815 | + {0x0000a2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, | ||
816 | {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, | ||
817 | {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, | ||
818 | {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | ||
819 | {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, | ||
820 | {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, | ||
821 | {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, | ||
822 | - {0x0000a510, 0x15000028, 0x15000028, 0x0f000202, 0x0f000202}, | ||
823 | - {0x0000a514, 0x1b00002b, 0x1b00002b, 0x12000400, 0x12000400}, | ||
824 | - {0x0000a518, 0x1f020028, 0x1f020028, 0x16000402, 0x16000402}, | ||
825 | - {0x0000a51c, 0x2502002b, 0x2502002b, 0x19000404, 0x19000404}, | ||
826 | - {0x0000a520, 0x2a04002a, 0x2a04002a, 0x1c000603, 0x1c000603}, | ||
827 | - {0x0000a524, 0x2e06002a, 0x2e06002a, 0x21000a02, 0x21000a02}, | ||
828 | - {0x0000a528, 0x3302202d, 0x3302202d, 0x25000a04, 0x25000a04}, | ||
829 | - {0x0000a52c, 0x3804202c, 0x3804202c, 0x28000a20, 0x28000a20}, | ||
830 | - {0x0000a530, 0x3c06202c, 0x3c06202c, 0x2c000e20, 0x2c000e20}, | ||
831 | - {0x0000a534, 0x4108202d, 0x4108202d, 0x30000e22, 0x30000e22}, | ||
832 | - {0x0000a538, 0x4506402d, 0x4506402d, 0x34000e24, 0x34000e24}, | ||
833 | - {0x0000a53c, 0x4906222d, 0x4906222d, 0x38001640, 0x38001640}, | ||
834 | - {0x0000a540, 0x4d062231, 0x4d062231, 0x3c001660, 0x3c001660}, | ||
835 | - {0x0000a544, 0x50082231, 0x50082231, 0x3f001861, 0x3f001861}, | ||
836 | - {0x0000a548, 0x5608422e, 0x5608422e, 0x43001a81, 0x43001a81}, | ||
837 | - {0x0000a54c, 0x5a08442e, 0x5a08442e, 0x47001a83, 0x47001a83}, | ||
838 | - {0x0000a550, 0x5e0a4431, 0x5e0a4431, 0x4a001c84, 0x4a001c84}, | ||
839 | - {0x0000a554, 0x640a4432, 0x640a4432, 0x4e001ce3, 0x4e001ce3}, | ||
840 | - {0x0000a558, 0x680a4434, 0x680a4434, 0x52001ce5, 0x52001ce5}, | ||
841 | - {0x0000a55c, 0x6c0a6434, 0x6c0a6434, 0x56001ce9, 0x56001ce9}, | ||
842 | - {0x0000a560, 0x6f0a6633, 0x6f0a6633, 0x5a001ceb, 0x5a001ceb}, | ||
843 | - {0x0000a564, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | ||
844 | - {0x0000a568, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | ||
845 | - {0x0000a56c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | ||
846 | - {0x0000a570, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | ||
847 | - {0x0000a574, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | ||
848 | - {0x0000a578, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | ||
849 | - {0x0000a57c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, | ||
850 | + {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, | ||
851 | + {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, | ||
852 | + {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402}, | ||
853 | + {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404}, | ||
854 | + {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, | ||
855 | + {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, | ||
856 | + {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, | ||
857 | + {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, | ||
858 | + {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, | ||
859 | + {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, | ||
860 | + {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, | ||
861 | + {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, | ||
862 | + {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, | ||
863 | + {0x0000a544, 0x52022470, 0x52022470, 0x3f001861, 0x3f001861}, | ||
864 | + {0x0000a548, 0x55022490, 0x55022490, 0x43001a81, 0x43001a81}, | ||
865 | + {0x0000a54c, 0x59022492, 0x59022492, 0x47001a83, 0x47001a83}, | ||
866 | + {0x0000a550, 0x5d022692, 0x5d022692, 0x4a001c84, 0x4a001c84}, | ||
867 | + {0x0000a554, 0x61022892, 0x61022892, 0x4e001ce3, 0x4e001ce3}, | ||
868 | + {0x0000a558, 0x65024890, 0x65024890, 0x52001ce5, 0x52001ce5}, | ||
869 | + {0x0000a55c, 0x69024892, 0x69024892, 0x56001ce9, 0x56001ce9}, | ||
870 | + {0x0000a560, 0x6e024c92, 0x6e024c92, 0x5a001ceb, 0x5a001ceb}, | ||
871 | + {0x0000a564, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, | ||
872 | + {0x0000a568, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, | ||
873 | + {0x0000a56c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, | ||
874 | + {0x0000a570, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, | ||
875 | + {0x0000a574, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, | ||
876 | + {0x0000a578, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, | ||
877 | + {0x0000a57c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, | ||
878 | {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, | ||
879 | {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, | ||
880 | {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, | ||
881 | {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, | ||
882 | - {0x0000a590, 0x15800028, 0x15800028, 0x0f800202, 0x0f800202}, | ||
883 | - {0x0000a594, 0x1b80002b, 0x1b80002b, 0x12800400, 0x12800400}, | ||
884 | - {0x0000a598, 0x1f820028, 0x1f820028, 0x16800402, 0x16800402}, | ||
885 | - {0x0000a59c, 0x2582002b, 0x2582002b, 0x19800404, 0x19800404}, | ||
886 | - {0x0000a5a0, 0x2a84002a, 0x2a84002a, 0x1c800603, 0x1c800603}, | ||
887 | - {0x0000a5a4, 0x2e86002a, 0x2e86002a, 0x21800a02, 0x21800a02}, | ||
888 | - {0x0000a5a8, 0x3382202d, 0x3382202d, 0x25800a04, 0x25800a04}, | ||
889 | - {0x0000a5ac, 0x3884202c, 0x3884202c, 0x28800a20, 0x28800a20}, | ||
890 | - {0x0000a5b0, 0x3c86202c, 0x3c86202c, 0x2c800e20, 0x2c800e20}, | ||
891 | - {0x0000a5b4, 0x4188202d, 0x4188202d, 0x30800e22, 0x30800e22}, | ||
892 | - {0x0000a5b8, 0x4586402d, 0x4586402d, 0x34800e24, 0x34800e24}, | ||
893 | - {0x0000a5bc, 0x4986222d, 0x4986222d, 0x38801640, 0x38801640}, | ||
894 | - {0x0000a5c0, 0x4d862231, 0x4d862231, 0x3c801660, 0x3c801660}, | ||
895 | - {0x0000a5c4, 0x50882231, 0x50882231, 0x3f801861, 0x3f801861}, | ||
896 | - {0x0000a5c8, 0x5688422e, 0x5688422e, 0x43801a81, 0x43801a81}, | ||
897 | - {0x0000a5cc, 0x5a88442e, 0x5a88442e, 0x47801a83, 0x47801a83}, | ||
898 | - {0x0000a5d0, 0x5e8a4431, 0x5e8a4431, 0x4a801c84, 0x4a801c84}, | ||
899 | - {0x0000a5d4, 0x648a4432, 0x648a4432, 0x4e801ce3, 0x4e801ce3}, | ||
900 | - {0x0000a5d8, 0x688a4434, 0x688a4434, 0x52801ce5, 0x52801ce5}, | ||
901 | - {0x0000a5dc, 0x6c8a6434, 0x6c8a6434, 0x56801ce9, 0x56801ce9}, | ||
902 | - {0x0000a5e0, 0x6f8a6633, 0x6f8a6633, 0x5a801ceb, 0x5a801ceb}, | ||
903 | - {0x0000a5e4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | ||
904 | - {0x0000a5e8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | ||
905 | - {0x0000a5ec, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | ||
906 | - {0x0000a5f0, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | ||
907 | - {0x0000a5f4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | ||
908 | - {0x0000a5f8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | ||
909 | - {0x0000a5fc, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, | ||
910 | + {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, | ||
911 | + {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, | ||
912 | + {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402}, | ||
913 | + {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404}, | ||
914 | + {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, | ||
915 | + {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, | ||
916 | + {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, | ||
917 | + {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, | ||
918 | + {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, | ||
919 | + {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, | ||
920 | + {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, | ||
921 | + {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, | ||
922 | + {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, | ||
923 | + {0x0000a5c4, 0x52822470, 0x52822470, 0x3f801861, 0x3f801861}, | ||
924 | + {0x0000a5c8, 0x55822490, 0x55822490, 0x43801a81, 0x43801a81}, | ||
925 | + {0x0000a5cc, 0x59822492, 0x59822492, 0x47801a83, 0x47801a83}, | ||
926 | + {0x0000a5d0, 0x5d822692, 0x5d822692, 0x4a801c84, 0x4a801c84}, | ||
927 | + {0x0000a5d4, 0x61822892, 0x61822892, 0x4e801ce3, 0x4e801ce3}, | ||
928 | + {0x0000a5d8, 0x65824890, 0x65824890, 0x52801ce5, 0x52801ce5}, | ||
929 | + {0x0000a5dc, 0x69824892, 0x69824892, 0x56801ce9, 0x56801ce9}, | ||
930 | + {0x0000a5e0, 0x6e824c92, 0x6e824c92, 0x5a801ceb, 0x5a801ceb}, | ||
931 | + {0x0000a5e4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, | ||
932 | + {0x0000a5e8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, | ||
933 | + {0x0000a5ec, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, | ||
934 | + {0x0000a5f0, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, | ||
935 | + {0x0000a5f4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, | ||
936 | + {0x0000a5f8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, | ||
937 | + {0x0000a5fc, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, | ||
938 | {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | ||
939 | {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | ||
940 | - {0x0000a608, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, | ||
941 | - {0x0000a60c, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, | ||
942 | - {0x0000a610, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, | ||
943 | - {0x0000a614, 0x01804601, 0x01804601, 0x01404000, 0x01404000}, | ||
944 | - {0x0000a618, 0x01804601, 0x01804601, 0x01404501, 0x01404501}, | ||
945 | - {0x0000a61c, 0x01804601, 0x01804601, 0x02008501, 0x02008501}, | ||
946 | - {0x0000a620, 0x03408d02, 0x03408d02, 0x0280ca03, 0x0280ca03}, | ||
947 | - {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04}, | ||
948 | - {0x0000a628, 0x03410d04, 0x03410d04, 0x04014c04, 0x04014c04}, | ||
949 | - {0x0000a62c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | ||
950 | - {0x0000a630, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | ||
951 | - {0x0000a634, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | ||
952 | - {0x0000a638, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | ||
953 | - {0x0000a63c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, | ||
954 | - {0x0000b2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, | ||
955 | - {0x0000b2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, | ||
956 | - {0x0000b2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, | ||
957 | + {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | ||
958 | + {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | ||
959 | + {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, | ||
960 | + {0x0000a614, 0x02004000, 0x02004000, 0x01404000, 0x01404000}, | ||
961 | + {0x0000a618, 0x02004801, 0x02004801, 0x01404501, 0x01404501}, | ||
962 | + {0x0000a61c, 0x02808a02, 0x02808a02, 0x02008501, 0x02008501}, | ||
963 | + {0x0000a620, 0x0380ce03, 0x0380ce03, 0x0280ca03, 0x0280ca03}, | ||
964 | + {0x0000a624, 0x04411104, 0x04411104, 0x03010c04, 0x03010c04}, | ||
965 | + {0x0000a628, 0x04411104, 0x04411104, 0x04014c04, 0x04014c04}, | ||
966 | + {0x0000a62c, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, | ||
967 | + {0x0000a630, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, | ||
968 | + {0x0000a634, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, | ||
969 | + {0x0000a638, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, | ||
970 | + {0x0000a63c, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, | ||
971 | + {0x0000b2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, | ||
972 | + {0x0000b2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, | ||
973 | + {0x0000b2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, | ||
974 | {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, | ||
975 | - {0x0000c2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, | ||
976 | - {0x0000c2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, | ||
977 | - {0x0000c2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, | ||
978 | + {0x0000c2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, | ||
979 | + {0x0000c2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, | ||
980 | + {0x0000c2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, | ||
981 | {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, | ||
982 | {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, | ||
983 | - {0x00016048, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, | ||
984 | + {0x00016048, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, | ||
985 | {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, | ||
986 | {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, | ||
987 | - {0x00016448, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, | ||
988 | + {0x00016448, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, | ||
989 | {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, | ||
990 | {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, | ||
991 | - {0x00016848, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, | ||
992 | + {0x00016848, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, | ||
993 | {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, | ||
994 | }; | ||
995 | |||
996 | diff --git a/drivers/rtc/rtc-imxdi.c b/drivers/rtc/rtc-imxdi.c | ||
997 | index d93a960..bc744b4 100644 | ||
998 | --- a/drivers/rtc/rtc-imxdi.c | ||
999 | +++ b/drivers/rtc/rtc-imxdi.c | ||
1000 | @@ -392,6 +392,8 @@ static int dryice_rtc_probe(struct platform_device *pdev) | ||
1001 | if (imxdi->ioaddr == NULL) | ||
1002 | return -ENOMEM; | ||
1003 | |||
1004 | + spin_lock_init(&imxdi->irq_lock); | ||
1005 | + | ||
1006 | imxdi->irq = platform_get_irq(pdev, 0); | ||
1007 | if (imxdi->irq < 0) | ||
1008 | return imxdi->irq; | ||
1009 | diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c | ||
1010 | index c283212..223639a 100644 | ||
1011 | --- a/drivers/staging/android/binder.c | ||
1012 | +++ b/drivers/staging/android/binder.c | ||
1013 | @@ -655,7 +655,7 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate, | ||
1014 | page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE]; | ||
1015 | |||
1016 | BUG_ON(*page); | ||
1017 | - *page = alloc_page(GFP_KERNEL | __GFP_ZERO); | ||
1018 | + *page = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO); | ||
1019 | if (*page == NULL) { | ||
1020 | printk(KERN_ERR "binder: %d: binder_alloc_buf failed " | ||
1021 | "for page at %p\n", proc->pid, page_addr); | ||
1022 | @@ -2507,14 +2507,38 @@ static void binder_release_work(struct list_head *list) | ||
1023 | struct binder_transaction *t; | ||
1024 | |||
1025 | t = container_of(w, struct binder_transaction, work); | ||
1026 | - if (t->buffer->target_node && !(t->flags & TF_ONE_WAY)) | ||
1027 | + if (t->buffer->target_node && | ||
1028 | + !(t->flags & TF_ONE_WAY)) { | ||
1029 | binder_send_failed_reply(t, BR_DEAD_REPLY); | ||
1030 | + } else { | ||
1031 | + binder_debug(BINDER_DEBUG_DEAD_TRANSACTION, | ||
1032 | + "binder: undelivered transaction %d\n", | ||
1033 | + t->debug_id); | ||
1034 | + t->buffer->transaction = NULL; | ||
1035 | + kfree(t); | ||
1036 | + binder_stats_deleted(BINDER_STAT_TRANSACTION); | ||
1037 | + } | ||
1038 | } break; | ||
1039 | case BINDER_WORK_TRANSACTION_COMPLETE: { | ||
1040 | + binder_debug(BINDER_DEBUG_DEAD_TRANSACTION, | ||
1041 | + "binder: undelivered TRANSACTION_COMPLETE\n"); | ||
1042 | kfree(w); | ||
1043 | binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE); | ||
1044 | } break; | ||
1045 | + case BINDER_WORK_DEAD_BINDER_AND_CLEAR: | ||
1046 | + case BINDER_WORK_CLEAR_DEATH_NOTIFICATION: { | ||
1047 | + struct binder_ref_death *death; | ||
1048 | + | ||
1049 | + death = container_of(w, struct binder_ref_death, work); | ||
1050 | + binder_debug(BINDER_DEBUG_DEAD_TRANSACTION, | ||
1051 | + "binder: undelivered death notification, %p\n", | ||
1052 | + death->cookie); | ||
1053 | + kfree(death); | ||
1054 | + binder_stats_deleted(BINDER_STAT_DEATH); | ||
1055 | + } break; | ||
1056 | default: | ||
1057 | + pr_err("binder: unexpected work type, %d, not freed\n", | ||
1058 | + w->type); | ||
1059 | break; | ||
1060 | } | ||
1061 | } | ||
1062 | @@ -2984,6 +3008,7 @@ static void binder_deferred_release(struct binder_proc *proc) | ||
1063 | nodes++; | ||
1064 | rb_erase(&node->rb_node, &proc->nodes); | ||
1065 | list_del_init(&node->work.entry); | ||
1066 | + binder_release_work(&node->async_todo); | ||
1067 | if (hlist_empty(&node->refs)) { | ||
1068 | kfree(node); | ||
1069 | binder_stats_deleted(BINDER_STAT_NODE); | ||
1070 | @@ -3022,6 +3047,7 @@ static void binder_deferred_release(struct binder_proc *proc) | ||
1071 | binder_delete_ref(ref); | ||
1072 | } | ||
1073 | binder_release_work(&proc->todo); | ||
1074 | + binder_release_work(&proc->delivered_death); | ||
1075 | buffers = 0; | ||
1076 | |||
1077 | while ((n = rb_first(&proc->allocated_buffers))) { | ||
1078 | diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c | ||
1079 | index 7972cad..9a23d20 100644 | ||
1080 | --- a/drivers/staging/comedi/drivers/amplc_pc236.c | ||
1081 | +++ b/drivers/staging/comedi/drivers/amplc_pc236.c | ||
1082 | @@ -468,7 +468,7 @@ static int pc236_detach(struct comedi_device *dev) | ||
1083 | { | ||
1084 | printk(KERN_DEBUG "comedi%d: %s: detach\n", dev->minor, | ||
1085 | PC236_DRIVER_NAME); | ||
1086 | - if (devpriv) | ||
1087 | + if (dev->iobase) | ||
1088 | pc236_intr_disable(dev); | ||
1089 | |||
1090 | if (dev->irq) | ||
1091 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c | ||
1092 | index e727b87..11344bc 100644 | ||
1093 | --- a/drivers/usb/core/hub.c | ||
1094 | +++ b/drivers/usb/core/hub.c | ||
1095 | @@ -507,13 +507,16 @@ static void hub_tt_work(struct work_struct *work) | ||
1096 | int limit = 100; | ||
1097 | |||
1098 | spin_lock_irqsave (&hub->tt.lock, flags); | ||
1099 | - while (--limit && !list_empty (&hub->tt.clear_list)) { | ||
1100 | + while (!list_empty(&hub->tt.clear_list)) { | ||
1101 | struct list_head *next; | ||
1102 | struct usb_tt_clear *clear; | ||
1103 | struct usb_device *hdev = hub->hdev; | ||
1104 | const struct hc_driver *drv; | ||
1105 | int status; | ||
1106 | |||
1107 | + if (!hub->quiescing && --limit < 0) | ||
1108 | + break; | ||
1109 | + | ||
1110 | next = hub->tt.clear_list.next; | ||
1111 | clear = list_entry (next, struct usb_tt_clear, clear_list); | ||
1112 | list_del (&clear->clear_list); | ||
1113 | @@ -978,7 +981,7 @@ static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type) | ||
1114 | if (hub->has_indicators) | ||
1115 | cancel_delayed_work_sync(&hub->leds); | ||
1116 | if (hub->tt.hub) | ||
1117 | - cancel_work_sync(&hub->tt.clear_work); | ||
1118 | + flush_work_sync(&hub->tt.clear_work); | ||
1119 | } | ||
1120 | |||
1121 | /* caller has locked the hub device */ | ||
1122 | diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c | ||
1123 | index 966d148..39f9e4a 100644 | ||
1124 | --- a/drivers/usb/host/pci-quirks.c | ||
1125 | +++ b/drivers/usb/host/pci-quirks.c | ||
1126 | @@ -545,7 +545,14 @@ static const struct dmi_system_id __devinitconst ehci_dmi_nohandoff_table[] = { | ||
1127 | /* Pegatron Lucid (Ordissimo AIRIS) */ | ||
1128 | .matches = { | ||
1129 | DMI_MATCH(DMI_BOARD_NAME, "M11JB"), | ||
1130 | - DMI_MATCH(DMI_BIOS_VERSION, "Lucid-GE-133"), | ||
1131 | + DMI_MATCH(DMI_BIOS_VERSION, "Lucid-"), | ||
1132 | + }, | ||
1133 | + }, | ||
1134 | + { | ||
1135 | + /* Pegatron Lucid (Ordissimo) */ | ||
1136 | + .matches = { | ||
1137 | + DMI_MATCH(DMI_BOARD_NAME, "Ordissimo"), | ||
1138 | + DMI_MATCH(DMI_BIOS_VERSION, "Lucid-"), | ||
1139 | }, | ||
1140 | }, | ||
1141 | { } | ||
1142 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c | ||
1143 | index a23d71b..23aebcb 100644 | ||
1144 | --- a/drivers/usb/host/xhci-ring.c | ||
1145 | +++ b/drivers/usb/host/xhci-ring.c | ||
1146 | @@ -1228,6 +1228,17 @@ static void xhci_cmd_to_noop(struct xhci_hcd *xhci, struct xhci_cd *cur_cd) | ||
1147 | cur_seg = find_trb_seg(xhci->cmd_ring->first_seg, | ||
1148 | xhci->cmd_ring->dequeue, &cycle_state); | ||
1149 | |||
1150 | + if (!cur_seg) { | ||
1151 | + xhci_warn(xhci, "Command ring mismatch, dequeue = %p %llx (dma)\n", | ||
1152 | + xhci->cmd_ring->dequeue, | ||
1153 | + (unsigned long long) | ||
1154 | + xhci_trb_virt_to_dma(xhci->cmd_ring->deq_seg, | ||
1155 | + xhci->cmd_ring->dequeue)); | ||
1156 | + xhci_debug_ring(xhci, xhci->cmd_ring); | ||
1157 | + xhci_dbg_ring_ptrs(xhci, xhci->cmd_ring); | ||
1158 | + return; | ||
1159 | + } | ||
1160 | + | ||
1161 | /* find the command trb matched by cd from command ring */ | ||
1162 | for (cmd_trb = xhci->cmd_ring->dequeue; | ||
1163 | cmd_trb != xhci->cmd_ring->enqueue; | ||
1164 | diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c | ||
1165 | index c1505c3..0179d34 100644 | ||
1166 | --- a/drivers/usb/serial/mos7840.c | ||
1167 | +++ b/drivers/usb/serial/mos7840.c | ||
1168 | @@ -235,12 +235,10 @@ struct moschip_port { | ||
1169 | int port_num; /*Actual port number in the device(1,2,etc) */ | ||
1170 | struct urb *write_urb; /* write URB for this port */ | ||
1171 | struct urb *read_urb; /* read URB for this port */ | ||
1172 | - struct urb *int_urb; | ||
1173 | __u8 shadowLCR; /* last LCR value received */ | ||
1174 | __u8 shadowMCR; /* last MCR value received */ | ||
1175 | char open; | ||
1176 | char open_ports; | ||
1177 | - char zombie; | ||
1178 | wait_queue_head_t wait_chase; /* for handling sleeping while waiting for chase to finish */ | ||
1179 | wait_queue_head_t delta_msr_wait; /* for handling sleeping while waiting for msr change to happen */ | ||
1180 | int delta_msr_cond; | ||
1181 | @@ -505,7 +503,6 @@ static void mos7840_control_callback(struct urb *urb) | ||
1182 | unsigned char *data; | ||
1183 | struct moschip_port *mos7840_port; | ||
1184 | __u8 regval = 0x0; | ||
1185 | - int result = 0; | ||
1186 | int status = urb->status; | ||
1187 | |||
1188 | mos7840_port = urb->context; | ||
1189 | @@ -524,7 +521,7 @@ static void mos7840_control_callback(struct urb *urb) | ||
1190 | default: | ||
1191 | dbg("%s - nonzero urb status received: %d", __func__, | ||
1192 | status); | ||
1193 | - goto exit; | ||
1194 | + return; | ||
1195 | } | ||
1196 | |||
1197 | dbg("%s urb buffer size is %d", __func__, urb->actual_length); | ||
1198 | @@ -537,17 +534,6 @@ static void mos7840_control_callback(struct urb *urb) | ||
1199 | mos7840_handle_new_msr(mos7840_port, regval); | ||
1200 | else if (mos7840_port->MsrLsr == 1) | ||
1201 | mos7840_handle_new_lsr(mos7840_port, regval); | ||
1202 | - | ||
1203 | -exit: | ||
1204 | - spin_lock(&mos7840_port->pool_lock); | ||
1205 | - if (!mos7840_port->zombie) | ||
1206 | - result = usb_submit_urb(mos7840_port->int_urb, GFP_ATOMIC); | ||
1207 | - spin_unlock(&mos7840_port->pool_lock); | ||
1208 | - if (result) { | ||
1209 | - dev_err(&urb->dev->dev, | ||
1210 | - "%s - Error %d submitting interrupt urb\n", | ||
1211 | - __func__, result); | ||
1212 | - } | ||
1213 | } | ||
1214 | |||
1215 | static int mos7840_get_reg(struct moschip_port *mcs, __u16 Wval, __u16 reg, | ||
1216 | @@ -655,14 +641,7 @@ static void mos7840_interrupt_callback(struct urb *urb) | ||
1217 | wreg = MODEM_STATUS_REGISTER; | ||
1218 | break; | ||
1219 | } | ||
1220 | - spin_lock(&mos7840_port->pool_lock); | ||
1221 | - if (!mos7840_port->zombie) { | ||
1222 | - rv = mos7840_get_reg(mos7840_port, wval, wreg, &Data); | ||
1223 | - } else { | ||
1224 | - spin_unlock(&mos7840_port->pool_lock); | ||
1225 | - return; | ||
1226 | - } | ||
1227 | - spin_unlock(&mos7840_port->pool_lock); | ||
1228 | + rv = mos7840_get_reg(mos7840_port, wval, wreg, &Data); | ||
1229 | } | ||
1230 | } | ||
1231 | } | ||
1232 | @@ -2590,7 +2569,6 @@ error: | ||
1233 | kfree(mos7840_port->ctrl_buf); | ||
1234 | usb_free_urb(mos7840_port->control_urb); | ||
1235 | kfree(mos7840_port); | ||
1236 | - serial->port[i] = NULL; | ||
1237 | } | ||
1238 | return status; | ||
1239 | } | ||
1240 | @@ -2621,9 +2599,6 @@ static void mos7840_disconnect(struct usb_serial *serial) | ||
1241 | mos7840_port = mos7840_get_port_private(serial->port[i]); | ||
1242 | dbg ("mos7840_port %d = %p", i, mos7840_port); | ||
1243 | if (mos7840_port) { | ||
1244 | - spin_lock_irqsave(&mos7840_port->pool_lock, flags); | ||
1245 | - mos7840_port->zombie = 1; | ||
1246 | - spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); | ||
1247 | usb_kill_urb(mos7840_port->control_urb); | ||
1248 | } | ||
1249 | } | ||
1250 | @@ -2657,6 +2632,7 @@ static void mos7840_release(struct usb_serial *serial) | ||
1251 | mos7840_port = mos7840_get_port_private(serial->port[i]); | ||
1252 | dbg("mos7840_port %d = %p", i, mos7840_port); | ||
1253 | if (mos7840_port) { | ||
1254 | + usb_free_urb(mos7840_port->control_urb); | ||
1255 | kfree(mos7840_port->ctrl_buf); | ||
1256 | kfree(mos7840_port->dr); | ||
1257 | kfree(mos7840_port); | ||
1258 | diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c | ||
1259 | index 82cc9d2..1f85006 100644 | ||
1260 | --- a/drivers/usb/serial/opticon.c | ||
1261 | +++ b/drivers/usb/serial/opticon.c | ||
1262 | @@ -160,7 +160,11 @@ static int send_control_msg(struct usb_serial_port *port, u8 requesttype, | ||
1263 | { | ||
1264 | struct usb_serial *serial = port->serial; | ||
1265 | int retval; | ||
1266 | - u8 buffer[2]; | ||
1267 | + u8 *buffer; | ||
1268 | + | ||
1269 | + buffer = kzalloc(1, GFP_KERNEL); | ||
1270 | + if (!buffer) | ||
1271 | + return -ENOMEM; | ||
1272 | |||
1273 | buffer[0] = val; | ||
1274 | /* Send the message to the vendor control endpoint | ||
1275 | @@ -169,6 +173,7 @@ static int send_control_msg(struct usb_serial_port *port, u8 requesttype, | ||
1276 | requesttype, | ||
1277 | USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE, | ||
1278 | 0, 0, buffer, 1, 0); | ||
1279 | + kfree(buffer); | ||
1280 | |||
1281 | return retval; | ||
1282 | } | ||
1283 | @@ -292,7 +297,7 @@ static int opticon_write(struct tty_struct *tty, struct usb_serial_port *port, | ||
1284 | if (!dr) { | ||
1285 | dev_err(&port->dev, "out of memory\n"); | ||
1286 | count = -ENOMEM; | ||
1287 | - goto error; | ||
1288 | + goto error_no_dr; | ||
1289 | } | ||
1290 | |||
1291 | dr->bRequestType = USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT; | ||
1292 | @@ -322,6 +327,8 @@ static int opticon_write(struct tty_struct *tty, struct usb_serial_port *port, | ||
1293 | |||
1294 | return count; | ||
1295 | error: | ||
1296 | + kfree(dr); | ||
1297 | +error_no_dr: | ||
1298 | usb_free_urb(urb); | ||
1299 | error_no_urb: | ||
1300 | kfree(buffer); | ||
1301 | diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c | ||
1302 | index 449bf6d..b622d69 100644 | ||
1303 | --- a/drivers/usb/serial/sierra.c | ||
1304 | +++ b/drivers/usb/serial/sierra.c | ||
1305 | @@ -171,7 +171,6 @@ static int sierra_probe(struct usb_serial *serial, | ||
1306 | { | ||
1307 | int result = 0; | ||
1308 | struct usb_device *udev; | ||
1309 | - struct sierra_intf_private *data; | ||
1310 | u8 ifnum; | ||
1311 | |||
1312 | udev = serial->dev; | ||
1313 | @@ -199,11 +198,6 @@ static int sierra_probe(struct usb_serial *serial, | ||
1314 | return -ENODEV; | ||
1315 | } | ||
1316 | |||
1317 | - data = serial->private = kzalloc(sizeof(struct sierra_intf_private), GFP_KERNEL); | ||
1318 | - if (!data) | ||
1319 | - return -ENOMEM; | ||
1320 | - spin_lock_init(&data->susp_lock); | ||
1321 | - | ||
1322 | return result; | ||
1323 | } | ||
1324 | |||
1325 | @@ -914,6 +908,7 @@ static void sierra_dtr_rts(struct usb_serial_port *port, int on) | ||
1326 | static int sierra_startup(struct usb_serial *serial) | ||
1327 | { | ||
1328 | struct usb_serial_port *port; | ||
1329 | + struct sierra_intf_private *intfdata; | ||
1330 | struct sierra_port_private *portdata; | ||
1331 | struct sierra_iface_info *himemoryp = NULL; | ||
1332 | int i; | ||
1333 | @@ -921,6 +916,14 @@ static int sierra_startup(struct usb_serial *serial) | ||
1334 | |||
1335 | dev_dbg(&serial->dev->dev, "%s\n", __func__); | ||
1336 | |||
1337 | + intfdata = kzalloc(sizeof(*intfdata), GFP_KERNEL); | ||
1338 | + if (!intfdata) | ||
1339 | + return -ENOMEM; | ||
1340 | + | ||
1341 | + spin_lock_init(&intfdata->susp_lock); | ||
1342 | + | ||
1343 | + usb_set_serial_data(serial, intfdata); | ||
1344 | + | ||
1345 | /* Set Device mode to D0 */ | ||
1346 | sierra_set_power_state(serial->dev, 0x0000); | ||
1347 | |||
1348 | @@ -936,7 +939,7 @@ static int sierra_startup(struct usb_serial *serial) | ||
1349 | dev_dbg(&port->dev, "%s: kmalloc for " | ||
1350 | "sierra_port_private (%d) failed!\n", | ||
1351 | __func__, i); | ||
1352 | - return -ENOMEM; | ||
1353 | + goto err; | ||
1354 | } | ||
1355 | spin_lock_init(&portdata->lock); | ||
1356 | init_usb_anchor(&portdata->active); | ||
1357 | @@ -973,6 +976,14 @@ static int sierra_startup(struct usb_serial *serial) | ||
1358 | } | ||
1359 | |||
1360 | return 0; | ||
1361 | +err: | ||
1362 | + for (--i; i >= 0; --i) { | ||
1363 | + portdata = usb_get_serial_port_data(serial->port[i]); | ||
1364 | + kfree(portdata); | ||
1365 | + } | ||
1366 | + kfree(intfdata); | ||
1367 | + | ||
1368 | + return -ENOMEM; | ||
1369 | } | ||
1370 | |||
1371 | static void sierra_release(struct usb_serial *serial) | ||
1372 | @@ -992,6 +1003,7 @@ static void sierra_release(struct usb_serial *serial) | ||
1373 | continue; | ||
1374 | kfree(portdata); | ||
1375 | } | ||
1376 | + kfree(serial->private); | ||
1377 | } | ||
1378 | |||
1379 | #ifdef CONFIG_PM | ||
1380 | diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c | ||
1381 | index 407e23c..171226a 100644 | ||
1382 | --- a/drivers/usb/serial/whiteheat.c | ||
1383 | +++ b/drivers/usb/serial/whiteheat.c | ||
1384 | @@ -525,6 +525,7 @@ no_firmware: | ||
1385 | "%s: please contact support@connecttech.com\n", | ||
1386 | serial->type->description); | ||
1387 | kfree(result); | ||
1388 | + kfree(command); | ||
1389 | return -ENODEV; | ||
1390 | |||
1391 | no_command_private: | ||
1392 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h | ||
1393 | index 8f3cbb8..5ffa116 100644 | ||
1394 | --- a/drivers/usb/storage/unusual_devs.h | ||
1395 | +++ b/drivers/usb/storage/unusual_devs.h | ||
1396 | @@ -1004,6 +1004,12 @@ UNUSUAL_DEV( 0x07cf, 0x1001, 0x1000, 0x9999, | ||
1397 | USB_SC_8070, USB_PR_CB, NULL, | ||
1398 | US_FL_NEED_OVERRIDE | US_FL_FIX_INQUIRY ), | ||
1399 | |||
1400 | +/* Submitted by Oleksandr Chumachenko <ledest@gmail.com> */ | ||
1401 | +UNUSUAL_DEV( 0x07cf, 0x1167, 0x0100, 0x0100, | ||
1402 | + "Casio", | ||
1403 | + "EX-N1 DigitalCamera", | ||
1404 | + USB_SC_8070, USB_PR_DEVICE, NULL, 0), | ||
1405 | + | ||
1406 | /* Submitted by Hartmut Wahl <hwahl@hwahl.de>*/ | ||
1407 | UNUSUAL_DEV( 0x0839, 0x000a, 0x0001, 0x0001, | ||
1408 | "Samsung", | ||
1409 | diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c | ||
1410 | index 5c17010..4134e53 100644 | ||
1411 | --- a/drivers/vhost/net.c | ||
1412 | +++ b/drivers/vhost/net.c | ||
1413 | @@ -376,7 +376,8 @@ static void handle_rx(struct vhost_net *net) | ||
1414 | .hdr.gso_type = VIRTIO_NET_HDR_GSO_NONE | ||
1415 | }; | ||
1416 | size_t total_len = 0; | ||
1417 | - int err, headcount, mergeable; | ||
1418 | + int err, mergeable; | ||
1419 | + s16 headcount; | ||
1420 | size_t vhost_hlen, sock_hlen; | ||
1421 | size_t vhost_len, sock_len; | ||
1422 | /* TODO: check that we are running from vhost_worker? */ | ||
1423 | diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c | ||
1424 | index debdfe0..5d2069f 100644 | ||
1425 | --- a/fs/compat_ioctl.c | ||
1426 | +++ b/fs/compat_ioctl.c | ||
1427 | @@ -210,6 +210,8 @@ static int do_video_set_spu_palette(unsigned int fd, unsigned int cmd, | ||
1428 | |||
1429 | err = get_user(palp, &up->palette); | ||
1430 | err |= get_user(length, &up->length); | ||
1431 | + if (err) | ||
1432 | + return -EFAULT; | ||
1433 | |||
1434 | up_native = compat_alloc_user_space(sizeof(struct video_spu_palette)); | ||
1435 | err = put_user(compat_ptr(palp), &up_native->palette); | ||
1436 | diff --git a/fs/exec.c b/fs/exec.c | ||
1437 | index 126e01c..6c4791d 100644 | ||
1438 | --- a/fs/exec.c | ||
1439 | +++ b/fs/exec.c | ||
1440 | @@ -1114,7 +1114,8 @@ int flush_old_exec(struct linux_binprm * bprm) | ||
1441 | bprm->mm = NULL; /* We're using it now */ | ||
1442 | |||
1443 | set_fs(USER_DS); | ||
1444 | - current->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD); | ||
1445 | + current->flags &= | ||
1446 | + ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD | PF_NOFREEZE); | ||
1447 | flush_thread(); | ||
1448 | current->personality &= ~bprm->per_clear; | ||
1449 | |||
1450 | diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c | ||
1451 | index 35a36d3..a545d81 100644 | ||
1452 | --- a/fs/sysfs/dir.c | ||
1453 | +++ b/fs/sysfs/dir.c | ||
1454 | @@ -457,20 +457,18 @@ int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd) | ||
1455 | /** | ||
1456 | * sysfs_pathname - return full path to sysfs dirent | ||
1457 | * @sd: sysfs_dirent whose path we want | ||
1458 | - * @path: caller allocated buffer | ||
1459 | + * @path: caller allocated buffer of size PATH_MAX | ||
1460 | * | ||
1461 | * Gives the name "/" to the sysfs_root entry; any path returned | ||
1462 | * is relative to wherever sysfs is mounted. | ||
1463 | - * | ||
1464 | - * XXX: does no error checking on @path size | ||
1465 | */ | ||
1466 | static char *sysfs_pathname(struct sysfs_dirent *sd, char *path) | ||
1467 | { | ||
1468 | if (sd->s_parent) { | ||
1469 | sysfs_pathname(sd->s_parent, path); | ||
1470 | - strcat(path, "/"); | ||
1471 | + strlcat(path, "/", PATH_MAX); | ||
1472 | } | ||
1473 | - strcat(path, sd->s_name); | ||
1474 | + strlcat(path, sd->s_name, PATH_MAX); | ||
1475 | return path; | ||
1476 | } | ||
1477 | |||
1478 | @@ -503,9 +501,11 @@ int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd) | ||
1479 | char *path = kzalloc(PATH_MAX, GFP_KERNEL); | ||
1480 | WARN(1, KERN_WARNING | ||
1481 | "sysfs: cannot create duplicate filename '%s'\n", | ||
1482 | - (path == NULL) ? sd->s_name : | ||
1483 | - strcat(strcat(sysfs_pathname(acxt->parent_sd, path), "/"), | ||
1484 | - sd->s_name)); | ||
1485 | + (path == NULL) ? sd->s_name | ||
1486 | + : (sysfs_pathname(acxt->parent_sd, path), | ||
1487 | + strlcat(path, "/", PATH_MAX), | ||
1488 | + strlcat(path, sd->s_name, PATH_MAX), | ||
1489 | + path)); | ||
1490 | kfree(path); | ||
1491 | } | ||
1492 | |||
1493 | diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h | ||
1494 | index 53392e8..efc66f2 100644 | ||
1495 | --- a/include/drm/drm_pciids.h | ||
1496 | +++ b/include/drm/drm_pciids.h | ||
1497 | @@ -209,6 +209,8 @@ | ||
1498 | {0x1002, 0x6788, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1499 | {0x1002, 0x678A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1500 | {0x1002, 0x6790, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1501 | + {0x1002, 0x6791, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1502 | + {0x1002, 0x6792, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1503 | {0x1002, 0x6798, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1504 | {0x1002, 0x6799, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1505 | {0x1002, 0x679A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI|RADEON_NEW_MEMMAP}, \ | ||
1506 | @@ -221,6 +223,7 @@ | ||
1507 | {0x1002, 0x6808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
1508 | {0x1002, 0x6809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
1509 | {0x1002, 0x6810, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
1510 | + {0x1002, 0x6811, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
1511 | {0x1002, 0x6816, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
1512 | {0x1002, 0x6817, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
1513 | {0x1002, 0x6818, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ | ||
1514 | diff --git a/include/linux/efi.h b/include/linux/efi.h | ||
1515 | index ec45ccd..5782114 100644 | ||
1516 | --- a/include/linux/efi.h | ||
1517 | +++ b/include/linux/efi.h | ||
1518 | @@ -496,6 +496,11 @@ extern void efi_map_pal_code (void); | ||
1519 | extern void efi_memmap_walk (efi_freemem_callback_t callback, void *arg); | ||
1520 | extern void efi_gettimeofday (struct timespec *ts); | ||
1521 | extern void efi_enter_virtual_mode (void); /* switch EFI to virtual mode, if possible */ | ||
1522 | +#ifdef CONFIG_X86 | ||
1523 | +extern void efi_free_boot_services(void); | ||
1524 | +#else | ||
1525 | +static inline void efi_free_boot_services(void) {} | ||
1526 | +#endif | ||
1527 | extern u64 efi_get_iobase (void); | ||
1528 | extern u32 efi_mem_type (unsigned long phys_addr); | ||
1529 | extern u64 efi_mem_attributes (unsigned long phys_addr); | ||
1530 | diff --git a/include/linux/memblock.h b/include/linux/memblock.h | ||
1531 | index 19dc455..c948c44 100644 | ||
1532 | --- a/include/linux/memblock.h | ||
1533 | +++ b/include/linux/memblock.h | ||
1534 | @@ -57,6 +57,7 @@ int memblock_add(phys_addr_t base, phys_addr_t size); | ||
1535 | int memblock_remove(phys_addr_t base, phys_addr_t size); | ||
1536 | int memblock_free(phys_addr_t base, phys_addr_t size); | ||
1537 | int memblock_reserve(phys_addr_t base, phys_addr_t size); | ||
1538 | +void memblock_trim_memory(phys_addr_t align); | ||
1539 | |||
1540 | #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP | ||
1541 | void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, | ||
1542 | diff --git a/init/main.c b/init/main.c | ||
1543 | index b08c5f7..c2178d2 100644 | ||
1544 | --- a/init/main.c | ||
1545 | +++ b/init/main.c | ||
1546 | @@ -630,6 +630,9 @@ asmlinkage void __init start_kernel(void) | ||
1547 | acpi_early_init(); /* before LAPIC and SMP init */ | ||
1548 | sfi_init_late(); | ||
1549 | |||
1550 | + if (efi_enabled) | ||
1551 | + efi_free_boot_services(); | ||
1552 | + | ||
1553 | ftrace_init(); | ||
1554 | |||
1555 | /* Do the rest non-__init'ed, we're now alive */ | ||
1556 | diff --git a/lib/genalloc.c b/lib/genalloc.c | ||
1557 | index 6bc04aa..7cb7a5d 100644 | ||
1558 | --- a/lib/genalloc.c | ||
1559 | +++ b/lib/genalloc.c | ||
1560 | @@ -176,7 +176,7 @@ int gen_pool_add_virt(struct gen_pool *pool, unsigned long virt, phys_addr_t phy | ||
1561 | struct gen_pool_chunk *chunk; | ||
1562 | int nbits = size >> pool->min_alloc_order; | ||
1563 | int nbytes = sizeof(struct gen_pool_chunk) + | ||
1564 | - (nbits + BITS_PER_BYTE - 1) / BITS_PER_BYTE; | ||
1565 | + BITS_TO_LONGS(nbits) * sizeof(long); | ||
1566 | |||
1567 | chunk = kmalloc_node(nbytes, GFP_KERNEL | __GFP_ZERO, nid); | ||
1568 | if (unlikely(chunk == NULL)) | ||
1569 | diff --git a/mm/memblock.c b/mm/memblock.c | ||
1570 | index 280d3d7..11e5bd1 100644 | ||
1571 | --- a/mm/memblock.c | ||
1572 | +++ b/mm/memblock.c | ||
1573 | @@ -908,6 +908,30 @@ int __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t si | ||
1574 | return memblock_overlaps_region(&memblock.reserved, base, size) >= 0; | ||
1575 | } | ||
1576 | |||
1577 | +void __init_memblock memblock_trim_memory(phys_addr_t align) | ||
1578 | +{ | ||
1579 | + int i; | ||
1580 | + phys_addr_t start, end, orig_start, orig_end; | ||
1581 | + struct memblock_type *mem = &memblock.memory; | ||
1582 | + | ||
1583 | + for (i = 0; i < mem->cnt; i++) { | ||
1584 | + orig_start = mem->regions[i].base; | ||
1585 | + orig_end = mem->regions[i].base + mem->regions[i].size; | ||
1586 | + start = round_up(orig_start, align); | ||
1587 | + end = round_down(orig_end, align); | ||
1588 | + | ||
1589 | + if (start == orig_start && end == orig_end) | ||
1590 | + continue; | ||
1591 | + | ||
1592 | + if (start < end) { | ||
1593 | + mem->regions[i].base = start; | ||
1594 | + mem->regions[i].size = end - start; | ||
1595 | + } else { | ||
1596 | + memblock_remove_region(mem, i); | ||
1597 | + i--; | ||
1598 | + } | ||
1599 | + } | ||
1600 | +} | ||
1601 | |||
1602 | void __init_memblock memblock_set_current_limit(phys_addr_t limit) | ||
1603 | { | ||
1604 | diff --git a/mm/rmap.c b/mm/rmap.c | ||
1605 | index 5b5ad58..bfca52c 100644 | ||
1606 | --- a/mm/rmap.c | ||
1607 | +++ b/mm/rmap.c | ||
1608 | @@ -56,6 +56,7 @@ | ||
1609 | #include <linux/mmu_notifier.h> | ||
1610 | #include <linux/migrate.h> | ||
1611 | #include <linux/hugetlb.h> | ||
1612 | +#include <linux/backing-dev.h> | ||
1613 | |||
1614 | #include <asm/tlbflush.h> | ||
1615 | |||
1616 | @@ -977,11 +978,8 @@ int page_mkclean(struct page *page) | ||
1617 | |||
1618 | if (page_mapped(page)) { | ||
1619 | struct address_space *mapping = page_mapping(page); | ||
1620 | - if (mapping) { | ||
1621 | + if (mapping) | ||
1622 | ret = page_mkclean_file(mapping, page); | ||
1623 | - if (page_test_and_clear_dirty(page_to_pfn(page), 1)) | ||
1624 | - ret = 1; | ||
1625 | - } | ||
1626 | } | ||
1627 | |||
1628 | return ret; | ||
1629 | @@ -1167,6 +1165,7 @@ void page_add_file_rmap(struct page *page) | ||
1630 | */ | ||
1631 | void page_remove_rmap(struct page *page) | ||
1632 | { | ||
1633 | + struct address_space *mapping = page_mapping(page); | ||
1634 | bool anon = PageAnon(page); | ||
1635 | bool locked; | ||
1636 | unsigned long flags; | ||
1637 | @@ -1189,8 +1188,19 @@ void page_remove_rmap(struct page *page) | ||
1638 | * this if the page is anon, so about to be freed; but perhaps | ||
1639 | * not if it's in swapcache - there might be another pte slot | ||
1640 | * containing the swap entry, but page not yet written to swap. | ||
1641 | + * | ||
1642 | + * And we can skip it on file pages, so long as the filesystem | ||
1643 | + * participates in dirty tracking; but need to catch shm and tmpfs | ||
1644 | + * and ramfs pages which have been modified since creation by read | ||
1645 | + * fault. | ||
1646 | + * | ||
1647 | + * Note that mapping must be decided above, before decrementing | ||
1648 | + * mapcount (which luckily provides a barrier): once page is unmapped, | ||
1649 | + * it could be truncated and page->mapping reset to NULL at any moment. | ||
1650 | + * Note also that we are relying on page_mapping(page) to set mapping | ||
1651 | + * to &swapper_space when PageSwapCache(page). | ||
1652 | */ | ||
1653 | - if ((!anon || PageSwapCache(page)) && | ||
1654 | + if (mapping && !mapping_cap_account_dirty(mapping) && | ||
1655 | page_test_and_clear_dirty(page_to_pfn(page), 1)) | ||
1656 | set_page_dirty(page); | ||
1657 | /* | ||
1658 | diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c | ||
1659 | index 1f6cb1f..208edc0 100644 | ||
1660 | --- a/net/bluetooth/smp.c | ||
1661 | +++ b/net/bluetooth/smp.c | ||
1662 | @@ -31,6 +31,8 @@ | ||
1663 | |||
1664 | #define SMP_TIMEOUT msecs_to_jiffies(30000) | ||
1665 | |||
1666 | +#define AUTH_REQ_MASK 0x07 | ||
1667 | + | ||
1668 | static inline void swap128(u8 src[16], u8 dst[16]) | ||
1669 | { | ||
1670 | int i; | ||
1671 | @@ -229,7 +231,7 @@ static void build_pairing_cmd(struct l2cap_conn *conn, | ||
1672 | req->max_key_size = SMP_MAX_ENC_KEY_SIZE; | ||
1673 | req->init_key_dist = 0; | ||
1674 | req->resp_key_dist = dist_keys; | ||
1675 | - req->auth_req = authreq; | ||
1676 | + req->auth_req = (authreq & AUTH_REQ_MASK); | ||
1677 | return; | ||
1678 | } | ||
1679 | |||
1680 | @@ -238,7 +240,7 @@ static void build_pairing_cmd(struct l2cap_conn *conn, | ||
1681 | rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE; | ||
1682 | rsp->init_key_dist = 0; | ||
1683 | rsp->resp_key_dist = req->resp_key_dist & dist_keys; | ||
1684 | - rsp->auth_req = authreq; | ||
1685 | + rsp->auth_req = (authreq & AUTH_REQ_MASK); | ||
1686 | } | ||
1687 | |||
1688 | static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size) | ||
1689 | diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c | ||
1690 | index 0ae23c6..ea6d03b 100644 | ||
1691 | --- a/net/mac80211/wpa.c | ||
1692 | +++ b/net/mac80211/wpa.c | ||
1693 | @@ -106,7 +106,8 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx) | ||
1694 | if (status->flag & RX_FLAG_MMIC_ERROR) | ||
1695 | goto mic_fail; | ||
1696 | |||
1697 | - if (!(status->flag & RX_FLAG_IV_STRIPPED) && rx->key) | ||
1698 | + if (!(status->flag & RX_FLAG_IV_STRIPPED) && rx->key && | ||
1699 | + rx->key->conf.cipher == WLAN_CIPHER_SUITE_TKIP) | ||
1700 | goto update_iv; | ||
1701 | |||
1702 | return RX_CONTINUE; | ||
1703 | diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c | ||
1704 | index a4a6586..79064471 100644 | ||
1705 | --- a/net/sunrpc/xprtsock.c | ||
1706 | +++ b/net/sunrpc/xprtsock.c | ||
1707 | @@ -254,7 +254,6 @@ struct sock_xprt { | ||
1708 | void (*old_data_ready)(struct sock *, int); | ||
1709 | void (*old_state_change)(struct sock *); | ||
1710 | void (*old_write_space)(struct sock *); | ||
1711 | - void (*old_error_report)(struct sock *); | ||
1712 | }; | ||
1713 | |||
1714 | /* | ||
1715 | @@ -737,10 +736,10 @@ static int xs_tcp_send_request(struct rpc_task *task) | ||
1716 | dprintk("RPC: sendmsg returned unrecognized error %d\n", | ||
1717 | -status); | ||
1718 | case -ECONNRESET: | ||
1719 | - case -EPIPE: | ||
1720 | xs_tcp_shutdown(xprt); | ||
1721 | case -ECONNREFUSED: | ||
1722 | case -ENOTCONN: | ||
1723 | + case -EPIPE: | ||
1724 | clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags); | ||
1725 | } | ||
1726 | |||
1727 | @@ -781,7 +780,6 @@ static void xs_save_old_callbacks(struct sock_xprt *transport, struct sock *sk) | ||
1728 | transport->old_data_ready = sk->sk_data_ready; | ||
1729 | transport->old_state_change = sk->sk_state_change; | ||
1730 | transport->old_write_space = sk->sk_write_space; | ||
1731 | - transport->old_error_report = sk->sk_error_report; | ||
1732 | } | ||
1733 | |||
1734 | static void xs_restore_old_callbacks(struct sock_xprt *transport, struct sock *sk) | ||
1735 | @@ -789,7 +787,6 @@ static void xs_restore_old_callbacks(struct sock_xprt *transport, struct sock *s | ||
1736 | sk->sk_data_ready = transport->old_data_ready; | ||
1737 | sk->sk_state_change = transport->old_state_change; | ||
1738 | sk->sk_write_space = transport->old_write_space; | ||
1739 | - sk->sk_error_report = transport->old_error_report; | ||
1740 | } | ||
1741 | |||
1742 | static void xs_reset_transport(struct sock_xprt *transport) | ||
1743 | @@ -1465,7 +1462,7 @@ static void xs_tcp_cancel_linger_timeout(struct rpc_xprt *xprt) | ||
1744 | xprt_clear_connecting(xprt); | ||
1745 | } | ||
1746 | |||
1747 | -static void xs_sock_mark_closed(struct rpc_xprt *xprt) | ||
1748 | +static void xs_sock_reset_connection_flags(struct rpc_xprt *xprt) | ||
1749 | { | ||
1750 | smp_mb__before_clear_bit(); | ||
1751 | clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); | ||
1752 | @@ -1473,6 +1470,11 @@ static void xs_sock_mark_closed(struct rpc_xprt *xprt) | ||
1753 | clear_bit(XPRT_CLOSE_WAIT, &xprt->state); | ||
1754 | clear_bit(XPRT_CLOSING, &xprt->state); | ||
1755 | smp_mb__after_clear_bit(); | ||
1756 | +} | ||
1757 | + | ||
1758 | +static void xs_sock_mark_closed(struct rpc_xprt *xprt) | ||
1759 | +{ | ||
1760 | + xs_sock_reset_connection_flags(xprt); | ||
1761 | /* Mark transport as closed and wake up all pending tasks */ | ||
1762 | xprt_disconnect_done(xprt); | ||
1763 | } | ||
1764 | @@ -1528,6 +1530,7 @@ static void xs_tcp_state_change(struct sock *sk) | ||
1765 | case TCP_CLOSE_WAIT: | ||
1766 | /* The server initiated a shutdown of the socket */ | ||
1767 | xprt->connect_cookie++; | ||
1768 | + clear_bit(XPRT_CONNECTED, &xprt->state); | ||
1769 | xs_tcp_force_close(xprt); | ||
1770 | case TCP_CLOSING: | ||
1771 | /* | ||
1772 | @@ -1552,25 +1555,6 @@ static void xs_tcp_state_change(struct sock *sk) | ||
1773 | read_unlock_bh(&sk->sk_callback_lock); | ||
1774 | } | ||
1775 | |||
1776 | -/** | ||
1777 | - * xs_error_report - callback mainly for catching socket errors | ||
1778 | - * @sk: socket | ||
1779 | - */ | ||
1780 | -static void xs_error_report(struct sock *sk) | ||
1781 | -{ | ||
1782 | - struct rpc_xprt *xprt; | ||
1783 | - | ||
1784 | - read_lock_bh(&sk->sk_callback_lock); | ||
1785 | - if (!(xprt = xprt_from_sock(sk))) | ||
1786 | - goto out; | ||
1787 | - dprintk("RPC: %s client %p...\n" | ||
1788 | - "RPC: error %d\n", | ||
1789 | - __func__, xprt, sk->sk_err); | ||
1790 | - xprt_wake_pending_tasks(xprt, -EAGAIN); | ||
1791 | -out: | ||
1792 | - read_unlock_bh(&sk->sk_callback_lock); | ||
1793 | -} | ||
1794 | - | ||
1795 | static void xs_write_space(struct sock *sk) | ||
1796 | { | ||
1797 | struct socket *sock; | ||
1798 | @@ -1870,7 +1854,6 @@ static int xs_local_finish_connecting(struct rpc_xprt *xprt, | ||
1799 | sk->sk_user_data = xprt; | ||
1800 | sk->sk_data_ready = xs_local_data_ready; | ||
1801 | sk->sk_write_space = xs_udp_write_space; | ||
1802 | - sk->sk_error_report = xs_error_report; | ||
1803 | sk->sk_allocation = GFP_ATOMIC; | ||
1804 | |||
1805 | xprt_clear_connected(xprt); | ||
1806 | @@ -1959,7 +1942,6 @@ static void xs_udp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) | ||
1807 | sk->sk_user_data = xprt; | ||
1808 | sk->sk_data_ready = xs_udp_data_ready; | ||
1809 | sk->sk_write_space = xs_udp_write_space; | ||
1810 | - sk->sk_error_report = xs_error_report; | ||
1811 | sk->sk_no_check = UDP_CSUM_NORCV; | ||
1812 | sk->sk_allocation = GFP_ATOMIC; | ||
1813 | |||
1814 | @@ -2027,10 +2009,8 @@ static void xs_abort_connection(struct sock_xprt *transport) | ||
1815 | any.sa_family = AF_UNSPEC; | ||
1816 | result = kernel_connect(transport->sock, &any, sizeof(any), 0); | ||
1817 | if (!result) | ||
1818 | - xs_sock_mark_closed(&transport->xprt); | ||
1819 | - else | ||
1820 | - dprintk("RPC: AF_UNSPEC connect return code %d\n", | ||
1821 | - result); | ||
1822 | + xs_sock_reset_connection_flags(&transport->xprt); | ||
1823 | + dprintk("RPC: AF_UNSPEC connect return code %d\n", result); | ||
1824 | } | ||
1825 | |||
1826 | static void xs_tcp_reuse_connection(struct sock_xprt *transport) | ||
1827 | @@ -2075,7 +2055,6 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) | ||
1828 | sk->sk_data_ready = xs_tcp_data_ready; | ||
1829 | sk->sk_state_change = xs_tcp_state_change; | ||
1830 | sk->sk_write_space = xs_tcp_write_space; | ||
1831 | - sk->sk_error_report = xs_error_report; | ||
1832 | sk->sk_allocation = GFP_ATOMIC; | ||
1833 | |||
1834 | /* socket options */ | ||
1835 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
1836 | index 94b765b..6ecf1d4 100644 | ||
1837 | --- a/sound/pci/hda/patch_realtek.c | ||
1838 | +++ b/sound/pci/hda/patch_realtek.c | ||
1839 | @@ -6184,6 +6184,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | ||
1840 | SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE), | ||
1841 | SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK), | ||
1842 | SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK), | ||
1843 | + SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK), | ||
1844 | SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK), | ||
1845 | SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK), | ||
1846 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), | ||
1847 | diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c | ||
1848 | index af0f22f..aca6edc 100644 | ||
1849 | --- a/usr/gen_init_cpio.c | ||
1850 | +++ b/usr/gen_init_cpio.c | ||
1851 | @@ -303,7 +303,7 @@ static int cpio_mkfile(const char *name, const char *location, | ||
1852 | int retval; | ||
1853 | int rc = -1; | ||
1854 | int namesize; | ||
1855 | - int i; | ||
1856 | + unsigned int i; | ||
1857 | |||
1858 | mode |= S_IFREG; | ||
1859 | |||
1860 | @@ -381,25 +381,28 @@ error: | ||
1861 | |||
1862 | static char *cpio_replace_env(char *new_location) | ||
1863 | { | ||
1864 | - char expanded[PATH_MAX + 1]; | ||
1865 | - char env_var[PATH_MAX + 1]; | ||
1866 | - char *start; | ||
1867 | - char *end; | ||
1868 | - | ||
1869 | - for (start = NULL; (start = strstr(new_location, "${")); ) { | ||
1870 | - end = strchr(start, '}'); | ||
1871 | - if (start < end) { | ||
1872 | - *env_var = *expanded = '\0'; | ||
1873 | - strncat(env_var, start + 2, end - start - 2); | ||
1874 | - strncat(expanded, new_location, start - new_location); | ||
1875 | - strncat(expanded, getenv(env_var), PATH_MAX); | ||
1876 | - strncat(expanded, end + 1, PATH_MAX); | ||
1877 | - strncpy(new_location, expanded, PATH_MAX); | ||
1878 | - } else | ||
1879 | - break; | ||
1880 | - } | ||
1881 | - | ||
1882 | - return new_location; | ||
1883 | + char expanded[PATH_MAX + 1]; | ||
1884 | + char env_var[PATH_MAX + 1]; | ||
1885 | + char *start; | ||
1886 | + char *end; | ||
1887 | + | ||
1888 | + for (start = NULL; (start = strstr(new_location, "${")); ) { | ||
1889 | + end = strchr(start, '}'); | ||
1890 | + if (start < end) { | ||
1891 | + *env_var = *expanded = '\0'; | ||
1892 | + strncat(env_var, start + 2, end - start - 2); | ||
1893 | + strncat(expanded, new_location, start - new_location); | ||
1894 | + strncat(expanded, getenv(env_var), | ||
1895 | + PATH_MAX - strlen(expanded)); | ||
1896 | + strncat(expanded, end + 1, | ||
1897 | + PATH_MAX - strlen(expanded)); | ||
1898 | + strncpy(new_location, expanded, PATH_MAX); | ||
1899 | + new_location[PATH_MAX] = 0; | ||
1900 | + } else | ||
1901 | + break; | ||
1902 | + } | ||
1903 | + | ||
1904 | + return new_location; | ||
1905 | } | ||
1906 | |||
1907 |