/[linux-patches]/genpatches-2.6/trunk/3.4/1016_linux-3.4.17.patch
Gentoo

Contents of /genpatches-2.6/trunk/3.4/1016_linux-3.4.17.patch

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20