Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.7/0105-3.7.6-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2064 - (hide annotations) (download)
Wed Feb 6 10:48:49 2013 UTC (11 years, 3 months ago) by niro
File size: 110462 byte(s)
- linux-3.7.6
1 niro 2064 diff --git a/Documentation/device-mapper/dm-raid.txt b/Documentation/device-mapper/dm-raid.txt
2     index 728c38c..56fb62b 100644
3     --- a/Documentation/device-mapper/dm-raid.txt
4     +++ b/Documentation/device-mapper/dm-raid.txt
5     @@ -141,3 +141,4 @@ Version History
6     1.2.0 Handle creation of arrays that contain failed devices.
7     1.3.0 Added support for RAID 10
8     1.3.1 Allow device replacement/rebuild for RAID 10
9     +1.3.2 Fix/improve redundancy checking for RAID10
10     diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
11     index 4eee351..486a15a 100644
12     --- a/arch/arm/kernel/head.S
13     +++ b/arch/arm/kernel/head.S
14     @@ -246,6 +246,7 @@ __create_page_tables:
15    
16     /*
17     * Then map boot params address in r2 if specified.
18     + * We map 2 sections in case the ATAGs/DTB crosses a section boundary.
19     */
20     mov r0, r2, lsr #SECTION_SHIFT
21     movs r0, r0, lsl #SECTION_SHIFT
22     @@ -253,6 +254,8 @@ __create_page_tables:
23     addne r3, r3, #PAGE_OFFSET
24     addne r3, r4, r3, lsr #(SECTION_SHIFT - PMD_ORDER)
25     orrne r6, r7, r0
26     + strne r6, [r3], #1 << PMD_ORDER
27     + addne r6, r6, #1 << SECTION_SHIFT
28     strne r6, [r3]
29    
30     #ifdef CONFIG_DEBUG_LL
31     @@ -331,7 +334,7 @@ ENTRY(secondary_startup)
32     * as it has already been validated by the primary processor.
33     */
34     #ifdef CONFIG_ARM_VIRT_EXT
35     - bl __hyp_stub_install
36     + bl __hyp_stub_install_secondary
37     #endif
38     safe_svcmode_maskall r9
39    
40     diff --git a/arch/arm/kernel/hyp-stub.S b/arch/arm/kernel/hyp-stub.S
41     index 65b2417..1315c4c 100644
42     --- a/arch/arm/kernel/hyp-stub.S
43     +++ b/arch/arm/kernel/hyp-stub.S
44     @@ -99,7 +99,7 @@ ENTRY(__hyp_stub_install_secondary)
45     * immediately.
46     */
47     compare_cpu_mode_with_primary r4, r5, r6, r7
48     - bxne lr
49     + movne pc, lr
50    
51     /*
52     * Once we have given up on one CPU, we do not try to install the
53     @@ -111,7 +111,7 @@ ENTRY(__hyp_stub_install_secondary)
54     */
55    
56     cmp r4, #HYP_MODE
57     - bxne lr @ give up if the CPU is not in HYP mode
58     + movne pc, lr @ give up if the CPU is not in HYP mode
59    
60     /*
61     * Configure HSCTLR to set correct exception endianness/instruction set
62     @@ -120,7 +120,8 @@ ENTRY(__hyp_stub_install_secondary)
63     * Eventually, CPU-specific code might be needed -- assume not for now
64     *
65     * This code relies on the "eret" instruction to synchronize the
66     - * various coprocessor accesses.
67     + * various coprocessor accesses. This is done when we switch to SVC
68     + * (see safe_svcmode_maskall).
69     */
70     @ Now install the hypervisor stub:
71     adr r7, __hyp_stub_vectors
72     @@ -155,14 +156,7 @@ THUMB( orr r7, #(1 << 30) ) @ HSCTLR.TE
73     1:
74     #endif
75    
76     - bic r7, r4, #MODE_MASK
77     - orr r7, r7, #SVC_MODE
78     -THUMB( orr r7, r7, #PSR_T_BIT )
79     - msr spsr_cxsf, r7 @ This is SPSR_hyp.
80     -
81     - __MSR_ELR_HYP(14) @ msr elr_hyp, lr
82     - __ERET @ return, switching to SVC mode
83     - @ The boot CPU mode is left in r4.
84     + bx lr @ The boot CPU mode is left in r4.
85     ENDPROC(__hyp_stub_install_secondary)
86    
87     __hyp_stub_do_trap:
88     @@ -200,7 +194,7 @@ ENDPROC(__hyp_get_vectors)
89     @ fall through
90     ENTRY(__hyp_set_vectors)
91     __HVC(0)
92     - bx lr
93     + mov pc, lr
94     ENDPROC(__hyp_set_vectors)
95    
96     #ifndef ZIMAGE
97     diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c
98     index 0b32c81..dee51da 100644
99     --- a/arch/arm/mach-at91/setup.c
100     +++ b/arch/arm/mach-at91/setup.c
101     @@ -104,6 +104,8 @@ static void __init soc_detect(u32 dbgu_base)
102     switch (socid) {
103     case ARCH_ID_AT91RM9200:
104     at91_soc_initdata.type = AT91_SOC_RM9200;
105     + if (at91_soc_initdata.subtype == AT91_SOC_SUBTYPE_NONE)
106     + at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA;
107     at91_boot_soc = at91rm9200_soc;
108     break;
109    
110     diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
111     index bfcd397..92bb6b4 100644
112     --- a/arch/arm/mach-omap2/board-omap4panda.c
113     +++ b/arch/arm/mach-omap2/board-omap4panda.c
114     @@ -402,6 +402,12 @@ static struct omap_board_mux board_mux[] __initdata = {
115     OMAP_PULL_ENA),
116     OMAP4_MUX(ABE_MCBSP1_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
117    
118     + /* UART2 - BT/FM/GPS shared transport */
119     + OMAP4_MUX(UART2_CTS, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
120     + OMAP4_MUX(UART2_RTS, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
121     + OMAP4_MUX(UART2_RX, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
122     + OMAP4_MUX(UART2_TX, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
123     +
124     { .reg_offset = OMAP_MUX_TERMINATOR },
125     };
126    
127     diff --git a/arch/arm/mach-s3c64xx/mach-crag6410-module.c b/arch/arm/mach-s3c64xx/mach-crag6410-module.c
128     index 4e3fe57..cbc1b7b 100644
129     --- a/arch/arm/mach-s3c64xx/mach-crag6410-module.c
130     +++ b/arch/arm/mach-s3c64xx/mach-crag6410-module.c
131     @@ -39,7 +39,7 @@ static struct spi_board_info wm1253_devs[] = {
132     .bus_num = 0,
133     .chip_select = 0,
134     .mode = SPI_MODE_0,
135     - .irq = S3C_EINT(5),
136     + .irq = S3C_EINT(4),
137     .controller_data = &wm0010_spi_csinfo,
138     },
139     };
140     diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
141     index 58bc3e4..9cb586f 100644
142     --- a/arch/arm/mm/dma-mapping.c
143     +++ b/arch/arm/mm/dma-mapping.c
144     @@ -776,25 +776,27 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,
145     size_t size, enum dma_data_direction dir,
146     void (*op)(const void *, size_t, int))
147     {
148     + unsigned long pfn;
149     + size_t left = size;
150     +
151     + pfn = page_to_pfn(page) + offset / PAGE_SIZE;
152     + offset %= PAGE_SIZE;
153     +
154     /*
155     * A single sg entry may refer to multiple physically contiguous
156     * pages. But we still need to process highmem pages individually.
157     * If highmem is not configured then the bulk of this loop gets
158     * optimized out.
159     */
160     - size_t left = size;
161     do {
162     size_t len = left;
163     void *vaddr;
164    
165     + page = pfn_to_page(pfn);
166     +
167     if (PageHighMem(page)) {
168     - if (len + offset > PAGE_SIZE) {
169     - if (offset >= PAGE_SIZE) {
170     - page += offset / PAGE_SIZE;
171     - offset %= PAGE_SIZE;
172     - }
173     + if (len + offset > PAGE_SIZE)
174     len = PAGE_SIZE - offset;
175     - }
176     vaddr = kmap_high_get(page);
177     if (vaddr) {
178     vaddr += offset;
179     @@ -811,7 +813,7 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,
180     op(vaddr, len, dir);
181     }
182     offset = 0;
183     - page++;
184     + pfn++;
185     left -= len;
186     } while (left);
187     }
188     diff --git a/arch/arm/vfp/entry.S b/arch/arm/vfp/entry.S
189     index cc926c9..323ce1a 100644
190     --- a/arch/arm/vfp/entry.S
191     +++ b/arch/arm/vfp/entry.S
192     @@ -22,7 +22,7 @@
193     @ IRQs disabled.
194     @
195     ENTRY(do_vfp)
196     -#ifdef CONFIG_PREEMPT
197     +#ifdef CONFIG_PREEMPT_COUNT
198     ldr r4, [r10, #TI_PREEMPT] @ get preempt count
199     add r11, r4, #1 @ increment it
200     str r11, [r10, #TI_PREEMPT]
201     @@ -35,7 +35,7 @@ ENTRY(do_vfp)
202     ENDPROC(do_vfp)
203    
204     ENTRY(vfp_null_entry)
205     -#ifdef CONFIG_PREEMPT
206     +#ifdef CONFIG_PREEMPT_COUNT
207     get_thread_info r10
208     ldr r4, [r10, #TI_PREEMPT] @ get preempt count
209     sub r11, r4, #1 @ decrement it
210     @@ -53,7 +53,7 @@ ENDPROC(vfp_null_entry)
211    
212     __INIT
213     ENTRY(vfp_testing_entry)
214     -#ifdef CONFIG_PREEMPT
215     +#ifdef CONFIG_PREEMPT_COUNT
216     get_thread_info r10
217     ldr r4, [r10, #TI_PREEMPT] @ get preempt count
218     sub r11, r4, #1 @ decrement it
219     diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
220     index ea0349f..dd5e56f 100644
221     --- a/arch/arm/vfp/vfphw.S
222     +++ b/arch/arm/vfp/vfphw.S
223     @@ -168,7 +168,7 @@ vfp_hw_state_valid:
224     @ else it's one 32-bit instruction, so
225     @ always subtract 4 from the following
226     @ instruction address.
227     -#ifdef CONFIG_PREEMPT
228     +#ifdef CONFIG_PREEMPT_COUNT
229     get_thread_info r10
230     ldr r4, [r10, #TI_PREEMPT] @ get preempt count
231     sub r11, r4, #1 @ decrement it
232     @@ -192,7 +192,7 @@ look_for_VFP_exceptions:
233     @ not recognised by VFP
234    
235     DBGSTR "not VFP"
236     -#ifdef CONFIG_PREEMPT
237     +#ifdef CONFIG_PREEMPT_COUNT
238     get_thread_info r10
239     ldr r4, [r10, #TI_PREEMPT] @ get preempt count
240     sub r11, r4, #1 @ decrement it
241     diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
242     index 56e0ff0..4262aac 100644
243     --- a/arch/powerpc/kernel/entry_64.S
244     +++ b/arch/powerpc/kernel/entry_64.S
245     @@ -668,6 +668,19 @@ resume_kernel:
246     ld r4,TI_FLAGS(r9)
247     andi. r0,r4,_TIF_NEED_RESCHED
248     bne 1b
249     +
250     + /*
251     + * arch_local_irq_restore() from preempt_schedule_irq above may
252     + * enable hard interrupt but we really should disable interrupts
253     + * when we return from the interrupt, and so that we don't get
254     + * interrupted after loading SRR0/1.
255     + */
256     +#ifdef CONFIG_PPC_BOOK3E
257     + wrteei 0
258     +#else
259     + ld r10,PACAKMSR(r13) /* Get kernel MSR without EE */
260     + mtmsrd r10,1 /* Update machine state */
261     +#endif /* CONFIG_PPC_BOOK3E */
262     #endif /* CONFIG_PREEMPT */
263    
264     .globl fast_exc_return_irq
265     diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c
266     index ee04aba..f6ba56f 100644
267     --- a/arch/powerpc/kvm/emulate.c
268     +++ b/arch/powerpc/kvm/emulate.c
269     @@ -39,6 +39,7 @@
270     #define OP_31_XOP_TRAP 4
271     #define OP_31_XOP_LWZX 23
272     #define OP_31_XOP_TRAP_64 68
273     +#define OP_31_XOP_DCBF 86
274     #define OP_31_XOP_LBZX 87
275     #define OP_31_XOP_STWX 151
276     #define OP_31_XOP_STBX 215
277     @@ -353,6 +354,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
278     kvmppc_set_exit_type(vcpu, EMULATED_MTSPR_EXITS);
279     break;
280    
281     + case OP_31_XOP_DCBF:
282     case OP_31_XOP_DCBI:
283     /* Do nothing. The guest is performing dcbi because
284     * hardware DMA is not snooped by the dcache, but
285     diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
286     index 2d3b7cb..80d44ff 100644
287     --- a/arch/s390/include/asm/pgtable.h
288     +++ b/arch/s390/include/asm/pgtable.h
289     @@ -1365,6 +1365,18 @@ static inline void pmdp_invalidate(struct vm_area_struct *vma,
290     __pmd_idte(address, pmdp);
291     }
292    
293     +#define __HAVE_ARCH_PMDP_SET_WRPROTECT
294     +static inline void pmdp_set_wrprotect(struct mm_struct *mm,
295     + unsigned long address, pmd_t *pmdp)
296     +{
297     + pmd_t pmd = *pmdp;
298     +
299     + if (pmd_write(pmd)) {
300     + __pmd_idte(address, pmdp);
301     + set_pmd_at(mm, address, pmdp, pmd_wrprotect(pmd));
302     + }
303     +}
304     +
305     static inline pmd_t mk_pmd_phys(unsigned long physpage, pgprot_t pgprot)
306     {
307     pmd_t __pmd;
308     diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
309     index e87b0ca..ccae7e2 100644
310     --- a/arch/x86/boot/compressed/eboot.c
311     +++ b/arch/x86/boot/compressed/eboot.c
312     @@ -316,10 +316,9 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto,
313     * Once we've found a GOP supporting ConOut,
314     * don't bother looking any further.
315     */
316     + first_gop = gop;
317     if (conout_found)
318     break;
319     -
320     - first_gop = gop;
321     }
322     }
323    
324     diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
325     index aa4aaf1..ccb2f4a 100644
326     --- a/arch/x86/boot/compressed/head_32.S
327     +++ b/arch/x86/boot/compressed/head_32.S
328     @@ -50,8 +50,10 @@ ENTRY(startup_32)
329     pushl %eax
330     pushl %esi
331     pushl %ecx
332     + sub $0x4, %esp
333    
334     .org 0x30,0x90
335     + add $0x4, %esp
336     call efi_main
337     cmpl $0, %eax
338     movl %eax, %esi
339     diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
340     index 6e8fdf5..28677c5 100644
341     --- a/arch/x86/include/asm/efi.h
342     +++ b/arch/x86/include/asm/efi.h
343     @@ -94,6 +94,7 @@ extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size,
344     #endif /* CONFIG_X86_32 */
345    
346     extern int add_efi_memmap;
347     +extern unsigned long x86_efi_facility;
348     extern void efi_set_executable(efi_memory_desc_t *md, bool executable);
349     extern int efi_memblock_x86_reserve_range(void);
350     extern void efi_call_phys_prelog(void);
351     diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
352     index a7c5661..4929502 100644
353     --- a/arch/x86/kernel/msr.c
354     +++ b/arch/x86/kernel/msr.c
355     @@ -174,6 +174,9 @@ static int msr_open(struct inode *inode, struct file *file)
356     unsigned int cpu;
357     struct cpuinfo_x86 *c;
358    
359     + if (!capable(CAP_SYS_RAWIO))
360     + return -EPERM;
361     +
362     cpu = iminor(file->f_path.dentry->d_inode);
363     if (cpu >= nr_cpu_ids || !cpu_online(cpu))
364     return -ENXIO; /* No such CPU */
365     diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
366     index 4e8ba39..76fa1e9 100644
367     --- a/arch/x86/kernel/reboot.c
368     +++ b/arch/x86/kernel/reboot.c
369     @@ -584,7 +584,7 @@ static void native_machine_emergency_restart(void)
370     break;
371    
372     case BOOT_EFI:
373     - if (efi_enabled)
374     + if (efi_enabled(EFI_RUNTIME_SERVICES))
375     efi.reset_system(reboot_mode ?
376     EFI_RESET_WARM :
377     EFI_RESET_COLD,
378     diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
379     index 86c524c..aeacb0e 100644
380     --- a/arch/x86/kernel/setup.c
381     +++ b/arch/x86/kernel/setup.c
382     @@ -616,6 +616,7 @@ static unsigned reserve_low = CONFIG_X86_RESERVE_LOW << 10;
383    
384     static bool __init snb_gfx_workaround_needed(void)
385     {
386     +#ifdef CONFIG_PCI
387     int i;
388     u16 vendor, devid;
389     static const u16 snb_ids[] = {
390     @@ -640,6 +641,7 @@ static bool __init snb_gfx_workaround_needed(void)
391     for (i = 0; i < ARRAY_SIZE(snb_ids); i++)
392     if (devid == snb_ids[i])
393     return true;
394     +#endif
395    
396     return false;
397     }
398     @@ -809,15 +811,15 @@ void __init setup_arch(char **cmdline_p)
399     #ifdef CONFIG_EFI
400     if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
401     "EL32", 4)) {
402     - efi_enabled = 1;
403     - efi_64bit = false;
404     + set_bit(EFI_BOOT, &x86_efi_facility);
405     } else if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
406     "EL64", 4)) {
407     - efi_enabled = 1;
408     - efi_64bit = true;
409     + set_bit(EFI_BOOT, &x86_efi_facility);
410     + set_bit(EFI_64BIT, &x86_efi_facility);
411     }
412     - if (efi_enabled && efi_memblock_x86_reserve_range())
413     - efi_enabled = 0;
414     +
415     + if (efi_enabled(EFI_BOOT))
416     + efi_memblock_x86_reserve_range();
417     #endif
418    
419     x86_init.oem.arch_setup();
420     @@ -890,7 +892,7 @@ void __init setup_arch(char **cmdline_p)
421    
422     finish_e820_parsing();
423    
424     - if (efi_enabled)
425     + if (efi_enabled(EFI_BOOT))
426     efi_init();
427    
428     dmi_scan_machine();
429     @@ -973,7 +975,7 @@ void __init setup_arch(char **cmdline_p)
430     * The EFI specification says that boot service code won't be called
431     * after ExitBootServices(). This is, in fact, a lie.
432     */
433     - if (efi_enabled)
434     + if (efi_enabled(EFI_MEMMAP))
435     efi_reserve_boot_services();
436    
437     /* preallocate 4k for mptable mpc */
438     @@ -1112,7 +1114,7 @@ void __init setup_arch(char **cmdline_p)
439    
440     #ifdef CONFIG_VT
441     #if defined(CONFIG_VGA_CONSOLE)
442     - if (!efi_enabled || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
443     + if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
444     conswitchp = &vga_con;
445     #elif defined(CONFIG_DUMMY_CONSOLE)
446     conswitchp = &dummy_con;
447     @@ -1129,14 +1131,14 @@ void __init setup_arch(char **cmdline_p)
448     register_refined_jiffies(CLOCK_TICK_RATE);
449    
450     #ifdef CONFIG_EFI
451     - /* Once setup is done above, disable efi_enabled on mismatched
452     - * firmware/kernel archtectures since there is no support for
453     - * runtime services.
454     + /* Once setup is done above, unmap the EFI memory map on
455     + * mismatched firmware/kernel archtectures since there is no
456     + * support for runtime services.
457     */
458     - if (efi_enabled && IS_ENABLED(CONFIG_X86_64) != efi_64bit) {
459     + if (efi_enabled(EFI_BOOT) &&
460     + IS_ENABLED(CONFIG_X86_64) != efi_enabled(EFI_64BIT)) {
461     pr_info("efi: Setup done, disabling due to 32/64-bit mismatch\n");
462     efi_unmap_memmap();
463     - efi_enabled = 0;
464     }
465     #endif
466     }
467     diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
468     index ad44391..77cf009 100644
469     --- a/arch/x86/platform/efi/efi.c
470     +++ b/arch/x86/platform/efi/efi.c
471     @@ -51,9 +51,6 @@
472    
473     #define EFI_DEBUG 1
474    
475     -int efi_enabled;
476     -EXPORT_SYMBOL(efi_enabled);
477     -
478     struct efi __read_mostly efi = {
479     .mps = EFI_INVALID_TABLE_ADDR,
480     .acpi = EFI_INVALID_TABLE_ADDR,
481     @@ -69,19 +66,28 @@ EXPORT_SYMBOL(efi);
482    
483     struct efi_memory_map memmap;
484    
485     -bool efi_64bit;
486     -
487     static struct efi efi_phys __initdata;
488     static efi_system_table_t efi_systab __initdata;
489    
490     static inline bool efi_is_native(void)
491     {
492     - return IS_ENABLED(CONFIG_X86_64) == efi_64bit;
493     + return IS_ENABLED(CONFIG_X86_64) == efi_enabled(EFI_64BIT);
494     +}
495     +
496     +unsigned long x86_efi_facility;
497     +
498     +/*
499     + * Returns 1 if 'facility' is enabled, 0 otherwise.
500     + */
501     +int efi_enabled(int facility)
502     +{
503     + return test_bit(facility, &x86_efi_facility) != 0;
504     }
505     +EXPORT_SYMBOL(efi_enabled);
506    
507     static int __init setup_noefi(char *arg)
508     {
509     - efi_enabled = 0;
510     + clear_bit(EFI_BOOT, &x86_efi_facility);
511     return 0;
512     }
513     early_param("noefi", setup_noefi);
514     @@ -426,6 +432,7 @@ void __init efi_reserve_boot_services(void)
515    
516     void __init efi_unmap_memmap(void)
517     {
518     + clear_bit(EFI_MEMMAP, &x86_efi_facility);
519     if (memmap.map) {
520     early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size);
521     memmap.map = NULL;
522     @@ -460,7 +467,7 @@ void __init efi_free_boot_services(void)
523    
524     static int __init efi_systab_init(void *phys)
525     {
526     - if (efi_64bit) {
527     + if (efi_enabled(EFI_64BIT)) {
528     efi_system_table_64_t *systab64;
529     u64 tmp = 0;
530    
531     @@ -552,7 +559,7 @@ static int __init efi_config_init(u64 tables, int nr_tables)
532     void *config_tables, *tablep;
533     int i, sz;
534    
535     - if (efi_64bit)
536     + if (efi_enabled(EFI_64BIT))
537     sz = sizeof(efi_config_table_64_t);
538     else
539     sz = sizeof(efi_config_table_32_t);
540     @@ -572,7 +579,7 @@ static int __init efi_config_init(u64 tables, int nr_tables)
541     efi_guid_t guid;
542     unsigned long table;
543    
544     - if (efi_64bit) {
545     + if (efi_enabled(EFI_64BIT)) {
546     u64 table64;
547     guid = ((efi_config_table_64_t *)tablep)->guid;
548     table64 = ((efi_config_table_64_t *)tablep)->table;
549     @@ -684,7 +691,6 @@ void __init efi_init(void)
550     if (boot_params.efi_info.efi_systab_hi ||
551     boot_params.efi_info.efi_memmap_hi) {
552     pr_info("Table located above 4GB, disabling EFI.\n");
553     - efi_enabled = 0;
554     return;
555     }
556     efi_phys.systab = (efi_system_table_t *)boot_params.efi_info.efi_systab;
557     @@ -694,10 +700,10 @@ void __init efi_init(void)
558     ((__u64)boot_params.efi_info.efi_systab_hi<<32));
559     #endif
560    
561     - if (efi_systab_init(efi_phys.systab)) {
562     - efi_enabled = 0;
563     + if (efi_systab_init(efi_phys.systab))
564     return;
565     - }
566     +
567     + set_bit(EFI_SYSTEM_TABLES, &x86_efi_facility);
568    
569     /*
570     * Show what we know for posterity
571     @@ -715,10 +721,10 @@ void __init efi_init(void)
572     efi.systab->hdr.revision >> 16,
573     efi.systab->hdr.revision & 0xffff, vendor);
574    
575     - if (efi_config_init(efi.systab->tables, efi.systab->nr_tables)) {
576     - efi_enabled = 0;
577     + if (efi_config_init(efi.systab->tables, efi.systab->nr_tables))
578     return;
579     - }
580     +
581     + set_bit(EFI_CONFIG_TABLES, &x86_efi_facility);
582    
583     /*
584     * Note: We currently don't support runtime services on an EFI
585     @@ -727,15 +733,17 @@ void __init efi_init(void)
586    
587     if (!efi_is_native())
588     pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n");
589     - else if (efi_runtime_init()) {
590     - efi_enabled = 0;
591     - return;
592     + else {
593     + if (efi_runtime_init())
594     + return;
595     + set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
596     }
597    
598     - if (efi_memmap_init()) {
599     - efi_enabled = 0;
600     + if (efi_memmap_init())
601     return;
602     - }
603     +
604     + set_bit(EFI_MEMMAP, &x86_efi_facility);
605     +
606     #ifdef CONFIG_X86_32
607     if (efi_is_native()) {
608     x86_platform.get_wallclock = efi_get_time;
609     @@ -941,7 +949,7 @@ void __init efi_enter_virtual_mode(void)
610     *
611     * Call EFI services through wrapper functions.
612     */
613     - efi.runtime_version = efi_systab.fw_revision;
614     + efi.runtime_version = efi_systab.hdr.revision;
615     efi.get_time = virt_efi_get_time;
616     efi.set_time = virt_efi_set_time;
617     efi.get_wakeup_time = virt_efi_get_wakeup_time;
618     @@ -969,6 +977,9 @@ u32 efi_mem_type(unsigned long phys_addr)
619     efi_memory_desc_t *md;
620     void *p;
621    
622     + if (!efi_enabled(EFI_MEMMAP))
623     + return 0;
624     +
625     for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
626     md = p;
627     if ((md->phys_addr <= phys_addr) &&
628     diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
629     index 95fd505..2b20038 100644
630     --- a/arch/x86/platform/efi/efi_64.c
631     +++ b/arch/x86/platform/efi/efi_64.c
632     @@ -38,7 +38,7 @@
633     #include <asm/cacheflush.h>
634     #include <asm/fixmap.h>
635    
636     -static pgd_t save_pgd __initdata;
637     +static pgd_t *save_pgd __initdata;
638     static unsigned long efi_flags __initdata;
639    
640     static void __init early_code_mapping_set_exec(int executable)
641     @@ -61,12 +61,20 @@ static void __init early_code_mapping_set_exec(int executable)
642     void __init efi_call_phys_prelog(void)
643     {
644     unsigned long vaddress;
645     + int pgd;
646     + int n_pgds;
647    
648     early_code_mapping_set_exec(1);
649     local_irq_save(efi_flags);
650     - vaddress = (unsigned long)__va(0x0UL);
651     - save_pgd = *pgd_offset_k(0x0UL);
652     - set_pgd(pgd_offset_k(0x0UL), *pgd_offset_k(vaddress));
653     +
654     + n_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT), PGDIR_SIZE);
655     + save_pgd = kmalloc(n_pgds * sizeof(pgd_t), GFP_KERNEL);
656     +
657     + for (pgd = 0; pgd < n_pgds; pgd++) {
658     + save_pgd[pgd] = *pgd_offset_k(pgd * PGDIR_SIZE);
659     + vaddress = (unsigned long)__va(pgd * PGDIR_SIZE);
660     + set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), *pgd_offset_k(vaddress));
661     + }
662     __flush_tlb_all();
663     }
664    
665     @@ -75,7 +83,11 @@ void __init efi_call_phys_epilog(void)
666     /*
667     * After the lock is released, the original page table is restored.
668     */
669     - set_pgd(pgd_offset_k(0x0UL), save_pgd);
670     + int pgd;
671     + int n_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT) , PGDIR_SIZE);
672     + for (pgd = 0; pgd < n_pgds; pgd++)
673     + set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), save_pgd[pgd]);
674     + kfree(save_pgd);
675     __flush_tlb_all();
676     local_irq_restore(efi_flags);
677     early_code_mapping_set_exec(0);
678     diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
679     index 9eaf708..251435a 100644
680     --- a/drivers/acpi/osl.c
681     +++ b/drivers/acpi/osl.c
682     @@ -250,7 +250,7 @@ acpi_physical_address __init acpi_os_get_root_pointer(void)
683     return acpi_rsdp;
684     #endif
685    
686     - if (efi_enabled) {
687     + if (efi_enabled(EFI_CONFIG_TABLES)) {
688     if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
689     return efi.acpi20;
690     else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
691     diff --git a/drivers/edac/edac_pci_sysfs.c b/drivers/edac/edac_pci_sysfs.c
692     index e164c55..1bfb207 100644
693     --- a/drivers/edac/edac_pci_sysfs.c
694     +++ b/drivers/edac/edac_pci_sysfs.c
695     @@ -256,7 +256,7 @@ static ssize_t edac_pci_dev_store(struct kobject *kobj,
696     struct edac_pci_dev_attribute *edac_pci_dev;
697     edac_pci_dev = (struct edac_pci_dev_attribute *)attr;
698    
699     - if (edac_pci_dev->show)
700     + if (edac_pci_dev->store)
701     return edac_pci_dev->store(edac_pci_dev->value, buffer, count);
702     return -EIO;
703     }
704     diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
705     index fd3ae62..982f1f5 100644
706     --- a/drivers/firmware/dmi_scan.c
707     +++ b/drivers/firmware/dmi_scan.c
708     @@ -471,7 +471,7 @@ void __init dmi_scan_machine(void)
709     char __iomem *p, *q;
710     int rc;
711    
712     - if (efi_enabled) {
713     + if (efi_enabled(EFI_CONFIG_TABLES)) {
714     if (efi.smbios == EFI_INVALID_TABLE_ADDR)
715     goto error;
716    
717     diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
718     index d10c987..bfd8f43 100644
719     --- a/drivers/firmware/efivars.c
720     +++ b/drivers/firmware/efivars.c
721     @@ -1224,7 +1224,7 @@ efivars_init(void)
722     printk(KERN_INFO "EFI Variables Facility v%s %s\n", EFIVARS_VERSION,
723     EFIVARS_DATE);
724    
725     - if (!efi_enabled)
726     + if (!efi_enabled(EFI_RUNTIME_SERVICES))
727     return 0;
728    
729     /* For now we'll register the efi directory at /sys/firmware/efi */
730     @@ -1262,7 +1262,7 @@ err_put:
731     static void __exit
732     efivars_exit(void)
733     {
734     - if (efi_enabled) {
735     + if (efi_enabled(EFI_RUNTIME_SERVICES)) {
736     unregister_efivars(&__efivars);
737     kobject_put(efi_kobj);
738     }
739     diff --git a/drivers/firmware/iscsi_ibft_find.c b/drivers/firmware/iscsi_ibft_find.c
740     index 4da4eb9..2224f1d 100644
741     --- a/drivers/firmware/iscsi_ibft_find.c
742     +++ b/drivers/firmware/iscsi_ibft_find.c
743     @@ -99,7 +99,7 @@ unsigned long __init find_ibft_region(unsigned long *sizep)
744     /* iBFT 1.03 section 1.4.3.1 mandates that UEFI machines will
745     * only use ACPI for this */
746    
747     - if (!efi_enabled)
748     + if (!efi_enabled(EFI_BOOT))
749     find_ibft_in_mem();
750    
751     if (ibft_addr) {
752     diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
753     index da21b11..3a1a495 100644
754     --- a/drivers/gpu/drm/i915/i915_debugfs.c
755     +++ b/drivers/gpu/drm/i915/i915_debugfs.c
756     @@ -30,6 +30,7 @@
757     #include <linux/debugfs.h>
758     #include <linux/slab.h>
759     #include <linux/export.h>
760     +#include <generated/utsrelease.h>
761     #include <drm/drmP.h>
762     #include "intel_drv.h"
763     #include "intel_ringbuffer.h"
764     @@ -687,6 +688,7 @@ static int i915_error_state(struct seq_file *m, void *unused)
765    
766     seq_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
767     error->time.tv_usec);
768     + seq_printf(m, "Kernel: " UTS_RELEASE);
769     seq_printf(m, "PCI ID: 0x%04x\n", dev->pci_device);
770     seq_printf(m, "EIR: 0x%08x\n", error->eir);
771     seq_printf(m, "IER: 0x%08x\n", error->ier);
772     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
773     index ecec134..3a43405 100644
774     --- a/drivers/gpu/drm/i915/i915_reg.h
775     +++ b/drivers/gpu/drm/i915/i915_reg.h
776     @@ -527,6 +527,7 @@
777     #define MI_MODE 0x0209c
778     # define VS_TIMER_DISPATCH (1 << 6)
779     # define MI_FLUSH_ENABLE (1 << 12)
780     +# define ASYNC_FLIP_PERF_DISABLE (1 << 14)
781    
782     #define GEN6_GT_MODE 0x20d0
783     #define GEN6_GT_MODE_HI (1 << 9)
784     diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
785     index e87fa47..4e6a2b2 100644
786     --- a/drivers/gpu/drm/i915/intel_pm.c
787     +++ b/drivers/gpu/drm/i915/intel_pm.c
788     @@ -4018,7 +4018,8 @@ static void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
789     DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
790    
791     I915_WRITE_NOTRACE(FORCEWAKE, 1);
792     - POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
793     + /* something from same cacheline, but !FORCEWAKE */
794     + POSTING_READ(ECOBUS);
795    
796     if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
797     FORCEWAKE_ACK_TIMEOUT_MS))
798     @@ -4041,7 +4042,8 @@ static void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
799     DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
800    
801     I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(1));
802     - POSTING_READ(ECOBUS); /* something from same cacheline, but !FORCEWAKE */
803     + /* something from same cacheline, but !FORCEWAKE */
804     + POSTING_READ(ECOBUS);
805    
806     if (wait_for_atomic((I915_READ_NOTRACE(forcewake_ack) & 1),
807     FORCEWAKE_ACK_TIMEOUT_MS))
808     @@ -4078,14 +4080,16 @@ void gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
809     static void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
810     {
811     I915_WRITE_NOTRACE(FORCEWAKE, 0);
812     - /* gen6_gt_check_fifodbg doubles as the POSTING_READ */
813     + /* something from same cacheline, but !FORCEWAKE */
814     + POSTING_READ(ECOBUS);
815     gen6_gt_check_fifodbg(dev_priv);
816     }
817    
818     static void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
819     {
820     I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(1));
821     - /* gen6_gt_check_fifodbg doubles as the POSTING_READ */
822     + /* something from same cacheline, but !FORCEWAKE_MT */
823     + POSTING_READ(ECOBUS);
824     gen6_gt_check_fifodbg(dev_priv);
825     }
826    
827     @@ -4140,7 +4144,8 @@ static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
828     static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
829     {
830     I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(1));
831     - /* The below doubles as a POSTING_READ */
832     + /* something from same cacheline, but !FORCEWAKE_VLV */
833     + POSTING_READ(FORCEWAKE_ACK_VLV);
834     gen6_gt_check_fifodbg(dev_priv);
835     }
836    
837     diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
838     index ecbc5c5..4b33f2d 100644
839     --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
840     +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
841     @@ -505,13 +505,25 @@ static int init_render_ring(struct intel_ring_buffer *ring)
842     struct drm_i915_private *dev_priv = dev->dev_private;
843     int ret = init_ring_common(ring);
844    
845     - if (INTEL_INFO(dev)->gen > 3) {
846     + if (INTEL_INFO(dev)->gen > 3)
847     I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH));
848     - if (IS_GEN7(dev))
849     - I915_WRITE(GFX_MODE_GEN7,
850     - _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
851     - _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
852     - }
853     +
854     + /* We need to disable the AsyncFlip performance optimisations in order
855     + * to use MI_WAIT_FOR_EVENT within the CS. It should already be
856     + * programmed to '1' on all products.
857     + */
858     + if (INTEL_INFO(dev)->gen >= 6)
859     + I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE));
860     +
861     + /* Required for the hardware to program scanline values for waiting */
862     + if (INTEL_INFO(dev)->gen == 6)
863     + I915_WRITE(GFX_MODE,
864     + _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_ALWAYS));
865     +
866     + if (IS_GEN7(dev))
867     + I915_WRITE(GFX_MODE_GEN7,
868     + _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
869     + _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
870    
871     if (INTEL_INFO(dev)->gen >= 5) {
872     ret = init_pipe_control(ring);
873     diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
874     index dc8d15a..e797080 100644
875     --- a/drivers/gpu/drm/radeon/radeon_cs.c
876     +++ b/drivers/gpu/drm/radeon/radeon_cs.c
877     @@ -271,8 +271,10 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
878     p->chunks[p->chunk_ib_idx].kpage[1] = kmalloc(PAGE_SIZE, GFP_KERNEL);
879     if (p->chunks[p->chunk_ib_idx].kpage[0] == NULL ||
880     p->chunks[p->chunk_ib_idx].kpage[1] == NULL) {
881     - kfree(p->chunks[i].kpage[0]);
882     - kfree(p->chunks[i].kpage[1]);
883     + kfree(p->chunks[p->chunk_ib_idx].kpage[0]);
884     + kfree(p->chunks[p->chunk_ib_idx].kpage[1]);
885     + p->chunks[p->chunk_ib_idx].kpage[0] = NULL;
886     + p->chunks[p->chunk_ib_idx].kpage[1] = NULL;
887     return -ENOMEM;
888     }
889     }
890     diff --git a/drivers/gpu/drm/radeon/radeon_cursor.c b/drivers/gpu/drm/radeon/radeon_cursor.c
891     index 0fe56c9..cd1f151 100644
892     --- a/drivers/gpu/drm/radeon/radeon_cursor.c
893     +++ b/drivers/gpu/drm/radeon/radeon_cursor.c
894     @@ -240,7 +240,8 @@ int radeon_crtc_cursor_move(struct drm_crtc *crtc,
895     y = 0;
896     }
897    
898     - if (ASIC_IS_AVIVO(rdev)) {
899     + /* fixed on DCE6 and newer */
900     + if (ASIC_IS_AVIVO(rdev) && !ASIC_IS_DCE6(rdev)) {
901     int i = 0;
902     struct drm_crtc *crtc_p;
903    
904     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
905     index ad4c973..008d645 100644
906     --- a/drivers/gpu/drm/radeon/radeon_device.c
907     +++ b/drivers/gpu/drm/radeon/radeon_device.c
908     @@ -429,7 +429,8 @@ bool radeon_card_posted(struct radeon_device *rdev)
909     {
910     uint32_t reg;
911    
912     - if (efi_enabled && rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE)
913     + if (efi_enabled(EFI_BOOT) &&
914     + rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE)
915     return false;
916    
917     /* first check CRTCs */
918     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
919     index 2bddddd..6477849 100644
920     --- a/drivers/gpu/drm/radeon/radeon_display.c
921     +++ b/drivers/gpu/drm/radeon/radeon_display.c
922     @@ -1118,7 +1118,7 @@ radeon_user_framebuffer_create(struct drm_device *dev,
923     if (ret) {
924     kfree(radeon_fb);
925     drm_gem_object_unreference_unlocked(obj);
926     - return NULL;
927     + return ERR_PTR(ret);
928     }
929    
930     return &radeon_fb->base;
931     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
932     index 1ef9a9e..7a845c0 100644
933     --- a/drivers/hid/hid-ids.h
934     +++ b/drivers/hid/hid-ids.h
935     @@ -305,6 +305,9 @@
936     #define USB_VENDOR_ID_EZKEY 0x0518
937     #define USB_DEVICE_ID_BTC_8193 0x0002
938    
939     +#define USB_VENDOR_ID_FORMOSA 0x147a
940     +#define USB_DEVICE_ID_FORMOSA_IR_RECEIVER 0xe03e
941     +
942     #define USB_VENDOR_ID_FREESCALE 0x15A2
943     #define USB_DEVICE_ID_FREESCALE_MX28 0x004F
944    
945     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
946     index 0a1429f..29736e9 100644
947     --- a/drivers/hid/usbhid/hid-quirks.c
948     +++ b/drivers/hid/usbhid/hid-quirks.c
949     @@ -70,6 +70,7 @@ static const struct hid_blacklist {
950     { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
951     { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
952     { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
953     + { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
954     { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
955     { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
956     { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
957     diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
958     index 81837b0..faf10ba 100644
959     --- a/drivers/iommu/amd_iommu_init.c
960     +++ b/drivers/iommu/amd_iommu_init.c
961     @@ -975,6 +975,38 @@ static void __init free_iommu_all(void)
962     }
963    
964     /*
965     + * Family15h Model 10h-1fh erratum 746 (IOMMU Logging May Stall Translations)
966     + * Workaround:
967     + * BIOS should disable L2B micellaneous clock gating by setting
968     + * L2_L2B_CK_GATE_CONTROL[CKGateL2BMiscDisable](D0F2xF4_x90[2]) = 1b
969     + */
970     +static void __init amd_iommu_erratum_746_workaround(struct amd_iommu *iommu)
971     +{
972     + u32 value;
973     +
974     + if ((boot_cpu_data.x86 != 0x15) ||
975     + (boot_cpu_data.x86_model < 0x10) ||
976     + (boot_cpu_data.x86_model > 0x1f))
977     + return;
978     +
979     + pci_write_config_dword(iommu->dev, 0xf0, 0x90);
980     + pci_read_config_dword(iommu->dev, 0xf4, &value);
981     +
982     + if (value & BIT(2))
983     + return;
984     +
985     + /* Select NB indirect register 0x90 and enable writing */
986     + pci_write_config_dword(iommu->dev, 0xf0, 0x90 | (1 << 8));
987     +
988     + pci_write_config_dword(iommu->dev, 0xf4, value | 0x4);
989     + pr_info("AMD-Vi: Applying erratum 746 workaround for IOMMU at %s\n",
990     + dev_name(&iommu->dev->dev));
991     +
992     + /* Clear the enable writing bit */
993     + pci_write_config_dword(iommu->dev, 0xf0, 0x90);
994     +}
995     +
996     +/*
997     * This function clues the initialization function for one IOMMU
998     * together and also allocates the command buffer and programs the
999     * hardware. It does NOT enable the IOMMU. This is done afterwards.
1000     @@ -1172,6 +1204,8 @@ static int iommu_init_pci(struct amd_iommu *iommu)
1001     iommu->stored_l2[i] = iommu_read_l2(iommu, i);
1002     }
1003    
1004     + amd_iommu_erratum_746_workaround(iommu);
1005     +
1006     return pci_enable_device(iommu->dev);
1007     }
1008    
1009     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
1010     index c2c07a4..be3d7dd 100644
1011     --- a/drivers/iommu/intel-iommu.c
1012     +++ b/drivers/iommu/intel-iommu.c
1013     @@ -4234,6 +4234,21 @@ static struct iommu_ops intel_iommu_ops = {
1014     .pgsize_bitmap = INTEL_IOMMU_PGSIZES,
1015     };
1016    
1017     +static void __devinit quirk_iommu_g4x_gfx(struct pci_dev *dev)
1018     +{
1019     + /* G4x/GM45 integrated gfx dmar support is totally busted. */
1020     + printk(KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n");
1021     + dmar_map_gfx = 0;
1022     +}
1023     +
1024     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_g4x_gfx);
1025     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_g4x_gfx);
1026     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_g4x_gfx);
1027     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_g4x_gfx);
1028     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_g4x_gfx);
1029     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_g4x_gfx);
1030     +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_g4x_gfx);
1031     +
1032     static void __devinit quirk_iommu_rwbf(struct pci_dev *dev)
1033     {
1034     /*
1035     @@ -4242,12 +4257,6 @@ static void __devinit quirk_iommu_rwbf(struct pci_dev *dev)
1036     */
1037     printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n");
1038     rwbf_quirk = 1;
1039     -
1040     - /* https://bugzilla.redhat.com/show_bug.cgi?id=538163 */
1041     - if (dev->revision == 0x07) {
1042     - printk(KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n");
1043     - dmar_map_gfx = 0;
1044     - }
1045     }
1046    
1047     DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf);
1048     diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
1049     index 45d94a7..3235723 100644
1050     --- a/drivers/md/dm-raid.c
1051     +++ b/drivers/md/dm-raid.c
1052     @@ -338,24 +338,22 @@ static int validate_region_size(struct raid_set *rs, unsigned long region_size)
1053     }
1054    
1055     /*
1056     - * validate_rebuild_devices
1057     + * validate_raid_redundancy
1058     * @rs
1059     *
1060     - * Determine if the devices specified for rebuild can result in a valid
1061     - * usable array that is capable of rebuilding the given devices.
1062     + * Determine if there are enough devices in the array that haven't
1063     + * failed (or are being rebuilt) to form a usable array.
1064     *
1065     * Returns: 0 on success, -EINVAL on failure.
1066     */
1067     -static int validate_rebuild_devices(struct raid_set *rs)
1068     +static int validate_raid_redundancy(struct raid_set *rs)
1069     {
1070     unsigned i, rebuild_cnt = 0;
1071     unsigned rebuilds_per_group, copies, d;
1072    
1073     - if (!(rs->print_flags & DMPF_REBUILD))
1074     - return 0;
1075     -
1076     for (i = 0; i < rs->md.raid_disks; i++)
1077     - if (!test_bit(In_sync, &rs->dev[i].rdev.flags))
1078     + if (!test_bit(In_sync, &rs->dev[i].rdev.flags) ||
1079     + !rs->dev[i].rdev.sb_page)
1080     rebuild_cnt++;
1081    
1082     switch (rs->raid_type->level) {
1083     @@ -391,27 +389,24 @@ static int validate_rebuild_devices(struct raid_set *rs)
1084     * A A B B C
1085     * C D D E E
1086     */
1087     - rebuilds_per_group = 0;
1088     for (i = 0; i < rs->md.raid_disks * copies; i++) {
1089     + if (!(i % copies))
1090     + rebuilds_per_group = 0;
1091     d = i % rs->md.raid_disks;
1092     - if (!test_bit(In_sync, &rs->dev[d].rdev.flags) &&
1093     + if ((!rs->dev[d].rdev.sb_page ||
1094     + !test_bit(In_sync, &rs->dev[d].rdev.flags)) &&
1095     (++rebuilds_per_group >= copies))
1096     goto too_many;
1097     - if (!((i + 1) % copies))
1098     - rebuilds_per_group = 0;
1099     }
1100     break;
1101     default:
1102     - DMERR("The rebuild parameter is not supported for %s",
1103     - rs->raid_type->name);
1104     - rs->ti->error = "Rebuild not supported for this RAID type";
1105     - return -EINVAL;
1106     + if (rebuild_cnt)
1107     + return -EINVAL;
1108     }
1109    
1110     return 0;
1111    
1112     too_many:
1113     - rs->ti->error = "Too many rebuild devices specified";
1114     return -EINVAL;
1115     }
1116    
1117     @@ -662,9 +657,6 @@ static int parse_raid_params(struct raid_set *rs, char **argv,
1118     }
1119     rs->md.dev_sectors = sectors_per_dev;
1120    
1121     - if (validate_rebuild_devices(rs))
1122     - return -EINVAL;
1123     -
1124     /* Assume there are no metadata devices until the drives are parsed */
1125     rs->md.persistent = 0;
1126     rs->md.external = 1;
1127     @@ -993,28 +985,10 @@ static int super_validate(struct mddev *mddev, struct md_rdev *rdev)
1128     static int analyse_superblocks(struct dm_target *ti, struct raid_set *rs)
1129     {
1130     int ret;
1131     - unsigned redundancy = 0;
1132     struct raid_dev *dev;
1133     struct md_rdev *rdev, *tmp, *freshest;
1134     struct mddev *mddev = &rs->md;
1135    
1136     - switch (rs->raid_type->level) {
1137     - case 1:
1138     - redundancy = rs->md.raid_disks - 1;
1139     - break;
1140     - case 4:
1141     - case 5:
1142     - case 6:
1143     - redundancy = rs->raid_type->parity_devs;
1144     - break;
1145     - case 10:
1146     - redundancy = raid10_md_layout_to_copies(mddev->layout) - 1;
1147     - break;
1148     - default:
1149     - ti->error = "Unknown RAID type";
1150     - return -EINVAL;
1151     - }
1152     -
1153     freshest = NULL;
1154     rdev_for_each_safe(rdev, tmp, mddev) {
1155     /*
1156     @@ -1043,44 +1017,43 @@ static int analyse_superblocks(struct dm_target *ti, struct raid_set *rs)
1157     break;
1158     default:
1159     dev = container_of(rdev, struct raid_dev, rdev);
1160     - if (redundancy--) {
1161     - if (dev->meta_dev)
1162     - dm_put_device(ti, dev->meta_dev);
1163     -
1164     - dev->meta_dev = NULL;
1165     - rdev->meta_bdev = NULL;
1166     + if (dev->meta_dev)
1167     + dm_put_device(ti, dev->meta_dev);
1168    
1169     - if (rdev->sb_page)
1170     - put_page(rdev->sb_page);
1171     + dev->meta_dev = NULL;
1172     + rdev->meta_bdev = NULL;
1173    
1174     - rdev->sb_page = NULL;
1175     + if (rdev->sb_page)
1176     + put_page(rdev->sb_page);
1177    
1178     - rdev->sb_loaded = 0;
1179     + rdev->sb_page = NULL;
1180    
1181     - /*
1182     - * We might be able to salvage the data device
1183     - * even though the meta device has failed. For
1184     - * now, we behave as though '- -' had been
1185     - * set for this device in the table.
1186     - */
1187     - if (dev->data_dev)
1188     - dm_put_device(ti, dev->data_dev);
1189     + rdev->sb_loaded = 0;
1190    
1191     - dev->data_dev = NULL;
1192     - rdev->bdev = NULL;
1193     + /*
1194     + * We might be able to salvage the data device
1195     + * even though the meta device has failed. For
1196     + * now, we behave as though '- -' had been
1197     + * set for this device in the table.
1198     + */
1199     + if (dev->data_dev)
1200     + dm_put_device(ti, dev->data_dev);
1201    
1202     - list_del(&rdev->same_set);
1203     + dev->data_dev = NULL;
1204     + rdev->bdev = NULL;
1205    
1206     - continue;
1207     - }
1208     - ti->error = "Failed to load superblock";
1209     - return ret;
1210     + list_del(&rdev->same_set);
1211     }
1212     }
1213    
1214     if (!freshest)
1215     return 0;
1216    
1217     + if (validate_raid_redundancy(rs)) {
1218     + rs->ti->error = "Insufficient redundancy to activate array";
1219     + return -EINVAL;
1220     + }
1221     +
1222     /*
1223     * Validation of the freshest device provides the source of
1224     * validation for the remaining devices.
1225     @@ -1430,7 +1403,7 @@ static void raid_resume(struct dm_target *ti)
1226    
1227     static struct target_type raid_target = {
1228     .name = "raid",
1229     - .version = {1, 3, 1},
1230     + .version = {1, 3, 2},
1231     .module = THIS_MODULE,
1232     .ctr = raid_ctr,
1233     .dtr = raid_dtr,
1234     diff --git a/drivers/mfd/tc3589x.c b/drivers/mfd/tc3589x.c
1235     index 8f4c853..4678156 100644
1236     --- a/drivers/mfd/tc3589x.c
1237     +++ b/drivers/mfd/tc3589x.c
1238     @@ -219,25 +219,18 @@ static void tc3589x_irq_unmap(struct irq_domain *d, unsigned int virq)
1239     }
1240    
1241     static struct irq_domain_ops tc3589x_irq_ops = {
1242     - .map = tc3589x_irq_map,
1243     + .map = tc3589x_irq_map,
1244     .unmap = tc3589x_irq_unmap,
1245     - .xlate = irq_domain_xlate_twocell,
1246     + .xlate = irq_domain_xlate_twocell,
1247     };
1248    
1249     static int tc3589x_irq_init(struct tc3589x *tc3589x, struct device_node *np)
1250     {
1251     int base = tc3589x->irq_base;
1252    
1253     - if (base) {
1254     - tc3589x->domain = irq_domain_add_legacy(
1255     - NULL, TC3589x_NR_INTERNAL_IRQS, base,
1256     - 0, &tc3589x_irq_ops, tc3589x);
1257     - }
1258     - else {
1259     - tc3589x->domain = irq_domain_add_linear(
1260     - np, TC3589x_NR_INTERNAL_IRQS,
1261     - &tc3589x_irq_ops, tc3589x);
1262     - }
1263     + tc3589x->domain = irq_domain_add_simple(
1264     + np, TC3589x_NR_INTERNAL_IRQS, base,
1265     + &tc3589x_irq_ops, tc3589x);
1266    
1267     if (!tc3589x->domain) {
1268     dev_err(tc3589x->dev, "Failed to create irqdomain\n");
1269     diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
1270     index e5180df..3391bdd 100644
1271     --- a/drivers/net/can/c_can/c_can.c
1272     +++ b/drivers/net/can/c_can/c_can.c
1273     @@ -954,7 +954,7 @@ static int c_can_handle_bus_err(struct net_device *dev,
1274     break;
1275     case LEC_ACK_ERROR:
1276     netdev_dbg(dev, "ack error\n");
1277     - cf->data[2] |= (CAN_ERR_PROT_LOC_ACK |
1278     + cf->data[3] |= (CAN_ERR_PROT_LOC_ACK |
1279     CAN_ERR_PROT_LOC_ACK_DEL);
1280     break;
1281     case LEC_BIT1_ERROR:
1282     @@ -967,7 +967,7 @@ static int c_can_handle_bus_err(struct net_device *dev,
1283     break;
1284     case LEC_CRC_ERROR:
1285     netdev_dbg(dev, "CRC error\n");
1286     - cf->data[2] |= (CAN_ERR_PROT_LOC_CRC_SEQ |
1287     + cf->data[3] |= (CAN_ERR_PROT_LOC_CRC_SEQ |
1288     CAN_ERR_PROT_LOC_CRC_DEL);
1289     break;
1290     default:
1291     diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
1292     index 48b3d62..7a43d4d 100644
1293     --- a/drivers/net/can/pch_can.c
1294     +++ b/drivers/net/can/pch_can.c
1295     @@ -560,7 +560,7 @@ static void pch_can_error(struct net_device *ndev, u32 status)
1296     stats->rx_errors++;
1297     break;
1298     case PCH_CRC_ERR:
1299     - cf->data[2] |= CAN_ERR_PROT_LOC_CRC_SEQ |
1300     + cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ |
1301     CAN_ERR_PROT_LOC_CRC_DEL;
1302     priv->can.can_stats.bus_error++;
1303     stats->rx_errors++;
1304     diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c
1305     index 9ded21e..44996a9 100644
1306     --- a/drivers/net/can/ti_hecc.c
1307     +++ b/drivers/net/can/ti_hecc.c
1308     @@ -746,12 +746,12 @@ static int ti_hecc_error(struct net_device *ndev, int int_status,
1309     }
1310     if (err_status & HECC_CANES_CRCE) {
1311     hecc_set_bit(priv, HECC_CANES, HECC_CANES_CRCE);
1312     - cf->data[2] |= CAN_ERR_PROT_LOC_CRC_SEQ |
1313     + cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ |
1314     CAN_ERR_PROT_LOC_CRC_DEL;
1315     }
1316     if (err_status & HECC_CANES_ACKE) {
1317     hecc_set_bit(priv, HECC_CANES, HECC_CANES_ACKE);
1318     - cf->data[2] |= CAN_ERR_PROT_LOC_ACK |
1319     + cf->data[3] |= CAN_ERR_PROT_LOC_ACK |
1320     CAN_ERR_PROT_LOC_ACK_DEL;
1321     }
1322     }
1323     diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
1324     index 759f5f5..8a38ff2 100644
1325     --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
1326     +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
1327     @@ -588,30 +588,17 @@ static void ar9003_hw_init_bb(struct ath_hw *ah,
1328    
1329     static void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx)
1330     {
1331     - switch (rx) {
1332     - case 0x5:
1333     + if (ah->caps.tx_chainmask == 5 || ah->caps.rx_chainmask == 5)
1334     REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
1335     AR_PHY_SWAP_ALT_CHAIN);
1336     - case 0x3:
1337     - case 0x1:
1338     - case 0x2:
1339     - case 0x7:
1340     - REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx);
1341     - REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx);
1342     - break;
1343     - default:
1344     - break;
1345     - }
1346     +
1347     + REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx);
1348     + REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx);
1349    
1350     if ((ah->caps.hw_caps & ATH9K_HW_CAP_APM) && (tx == 0x7))
1351     - REG_WRITE(ah, AR_SELFGEN_MASK, 0x3);
1352     - else
1353     - REG_WRITE(ah, AR_SELFGEN_MASK, tx);
1354     + tx = 3;
1355    
1356     - if (tx == 0x5) {
1357     - REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
1358     - AR_PHY_SWAP_ALT_CHAIN);
1359     - }
1360     + REG_WRITE(ah, AR_SELFGEN_MASK, tx);
1361     }
1362    
1363     /*
1364     diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
1365     index dfe6a47..d7897dcf 100644
1366     --- a/drivers/net/wireless/ath/ath9k/ath9k.h
1367     +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
1368     @@ -315,7 +315,6 @@ struct ath_rx {
1369     u32 *rxlink;
1370     u32 num_pkts;
1371     unsigned int rxfilter;
1372     - spinlock_t rxbuflock;
1373     struct list_head rxbuf;
1374     struct ath_descdma rxdma;
1375     struct ath_buf *rx_bufptr;
1376     @@ -326,7 +325,6 @@ struct ath_rx {
1377    
1378     int ath_startrecv(struct ath_softc *sc);
1379     bool ath_stoprecv(struct ath_softc *sc);
1380     -void ath_flushrecv(struct ath_softc *sc);
1381     u32 ath_calcrxfilter(struct ath_softc *sc);
1382     int ath_rx_init(struct ath_softc *sc, int nbufs);
1383     void ath_rx_cleanup(struct ath_softc *sc);
1384     @@ -630,7 +628,6 @@ void ath_ant_comb_update(struct ath_softc *sc);
1385     enum sc_op_flags {
1386     SC_OP_INVALID,
1387     SC_OP_BEACONS,
1388     - SC_OP_RXFLUSH,
1389     SC_OP_ANI_RUN,
1390     SC_OP_PRIM_STA_VIF,
1391     SC_OP_HW_RESET,
1392     diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
1393     index 1b48414..4b2dabf 100644
1394     --- a/drivers/net/wireless/ath/ath9k/beacon.c
1395     +++ b/drivers/net/wireless/ath/ath9k/beacon.c
1396     @@ -147,6 +147,7 @@ static struct ath_buf *ath9k_beacon_generate(struct ieee80211_hw *hw,
1397     skb->len, DMA_TO_DEVICE);
1398     dev_kfree_skb_any(skb);
1399     bf->bf_buf_addr = 0;
1400     + bf->bf_mpdu = NULL;
1401     }
1402    
1403     skb = ieee80211_beacon_get(hw, vif);
1404     @@ -359,7 +360,6 @@ void ath9k_beacon_tasklet(unsigned long data)
1405     return;
1406    
1407     bf = ath9k_beacon_generate(sc->hw, vif);
1408     - WARN_ON(!bf);
1409    
1410     if (sc->beacon.bmisscnt != 0) {
1411     ath_dbg(common, BSTUCK, "resume beacon xmit after %u misses\n",
1412     diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c
1413     index 6727b56..774e95b 100644
1414     --- a/drivers/net/wireless/ath/ath9k/debug.c
1415     +++ b/drivers/net/wireless/ath/ath9k/debug.c
1416     @@ -973,7 +973,6 @@ static ssize_t read_file_recv(struct file *file, char __user *user_buf,
1417     RXS_ERR("RX-LENGTH-ERR", rx_len_err);
1418     RXS_ERR("RX-OOM-ERR", rx_oom_err);
1419     RXS_ERR("RX-RATE-ERR", rx_rate_err);
1420     - RXS_ERR("RX-DROP-RXFLUSH", rx_drop_rxflush);
1421     RXS_ERR("RX-TOO-MANY-FRAGS", rx_too_many_frags_err);
1422    
1423     PHY_ERR("UNDERRUN ERR", ATH9K_PHYERR_UNDERRUN);
1424     diff --git a/drivers/net/wireless/ath/ath9k/debug.h b/drivers/net/wireless/ath/ath9k/debug.h
1425     index 2ed9785..b9d95c7 100644
1426     --- a/drivers/net/wireless/ath/ath9k/debug.h
1427     +++ b/drivers/net/wireless/ath/ath9k/debug.h
1428     @@ -200,7 +200,6 @@ struct ath_tx_stats {
1429     * @rx_oom_err: No. of frames dropped due to OOM issues.
1430     * @rx_rate_err: No. of frames dropped due to rate errors.
1431     * @rx_too_many_frags_err: Frames dropped due to too-many-frags received.
1432     - * @rx_drop_rxflush: No. of frames dropped due to RX-FLUSH.
1433     * @rx_beacons: No. of beacons received.
1434     * @rx_frags: No. of rx-fragements received.
1435     */
1436     @@ -219,7 +218,6 @@ struct ath_rx_stats {
1437     u32 rx_oom_err;
1438     u32 rx_rate_err;
1439     u32 rx_too_many_frags_err;
1440     - u32 rx_drop_rxflush;
1441     u32 rx_beacons;
1442     u32 rx_frags;
1443     };
1444     diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
1445     index 4a9570d..aac4a40 100644
1446     --- a/drivers/net/wireless/ath/ath9k/htc_hst.c
1447     +++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
1448     @@ -344,6 +344,8 @@ void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle,
1449     endpoint->ep_callbacks.tx(endpoint->ep_callbacks.priv,
1450     skb, htc_hdr->endpoint_id,
1451     txok);
1452     + } else {
1453     + kfree_skb(skb);
1454     }
1455     }
1456    
1457     diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
1458     index dd45edf..6962c8a 100644
1459     --- a/drivers/net/wireless/ath/ath9k/main.c
1460     +++ b/drivers/net/wireless/ath/ath9k/main.c
1461     @@ -181,7 +181,7 @@ static void ath_restart_work(struct ath_softc *sc)
1462     ath_start_ani(sc);
1463     }
1464    
1465     -static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
1466     +static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx)
1467     {
1468     struct ath_hw *ah = sc->sc_ah;
1469     bool ret = true;
1470     @@ -201,14 +201,6 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
1471     if (!ath_drain_all_txq(sc, retry_tx))
1472     ret = false;
1473    
1474     - if (!flush) {
1475     - if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
1476     - ath_rx_tasklet(sc, 1, true);
1477     - ath_rx_tasklet(sc, 1, false);
1478     - } else {
1479     - ath_flushrecv(sc);
1480     - }
1481     -
1482     return ret;
1483     }
1484    
1485     @@ -261,11 +253,11 @@ static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,
1486     struct ath_common *common = ath9k_hw_common(ah);
1487     struct ath9k_hw_cal_data *caldata = NULL;
1488     bool fastcc = true;
1489     - bool flush = false;
1490     int r;
1491    
1492     __ath_cancel_work(sc);
1493    
1494     + tasklet_disable(&sc->intr_tq);
1495     spin_lock_bh(&sc->sc_pcu_lock);
1496    
1497     if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) {
1498     @@ -275,11 +267,10 @@ static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,
1499    
1500     if (!hchan) {
1501     fastcc = false;
1502     - flush = true;
1503     hchan = ah->curchan;
1504     }
1505    
1506     - if (!ath_prepare_reset(sc, retry_tx, flush))
1507     + if (!ath_prepare_reset(sc, retry_tx))
1508     fastcc = false;
1509    
1510     ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n",
1511     @@ -297,6 +288,8 @@ static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan,
1512    
1513     out:
1514     spin_unlock_bh(&sc->sc_pcu_lock);
1515     + tasklet_enable(&sc->intr_tq);
1516     +
1517     return r;
1518     }
1519    
1520     @@ -816,7 +809,7 @@ static void ath9k_stop(struct ieee80211_hw *hw)
1521     ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
1522     }
1523    
1524     - ath_prepare_reset(sc, false, true);
1525     + ath_prepare_reset(sc, false);
1526    
1527     if (sc->rx.frag) {
1528     dev_kfree_skb_any(sc->rx.frag);
1529     @@ -1837,6 +1830,9 @@ static u32 fill_chainmask(u32 cap, u32 new)
1530    
1531     static bool validate_antenna_mask(struct ath_hw *ah, u32 val)
1532     {
1533     + if (AR_SREV_9300_20_OR_LATER(ah))
1534     + return true;
1535     +
1536     switch (val & 0x7) {
1537     case 0x1:
1538     case 0x3:
1539     diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
1540     index 83d16e7..4919d68 100644
1541     --- a/drivers/net/wireless/ath/ath9k/recv.c
1542     +++ b/drivers/net/wireless/ath/ath9k/recv.c
1543     @@ -254,8 +254,6 @@ rx_init_fail:
1544    
1545     static void ath_edma_start_recv(struct ath_softc *sc)
1546     {
1547     - spin_lock_bh(&sc->rx.rxbuflock);
1548     -
1549     ath9k_hw_rxena(sc->sc_ah);
1550    
1551     ath_rx_addbuffer_edma(sc, ATH9K_RX_QUEUE_HP,
1552     @@ -267,8 +265,6 @@ static void ath_edma_start_recv(struct ath_softc *sc)
1553     ath_opmode_init(sc);
1554    
1555     ath9k_hw_startpcureceive(sc->sc_ah, !!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL));
1556     -
1557     - spin_unlock_bh(&sc->rx.rxbuflock);
1558     }
1559    
1560     static void ath_edma_stop_recv(struct ath_softc *sc)
1561     @@ -285,8 +281,6 @@ int ath_rx_init(struct ath_softc *sc, int nbufs)
1562     int error = 0;
1563    
1564     spin_lock_init(&sc->sc_pcu_lock);
1565     - spin_lock_init(&sc->rx.rxbuflock);
1566     - clear_bit(SC_OP_RXFLUSH, &sc->sc_flags);
1567    
1568     common->rx_bufsize = IEEE80211_MAX_MPDU_LEN / 2 +
1569     sc->sc_ah->caps.rx_status_len;
1570     @@ -447,7 +441,6 @@ int ath_startrecv(struct ath_softc *sc)
1571     return 0;
1572     }
1573    
1574     - spin_lock_bh(&sc->rx.rxbuflock);
1575     if (list_empty(&sc->rx.rxbuf))
1576     goto start_recv;
1577    
1578     @@ -468,26 +461,31 @@ start_recv:
1579     ath_opmode_init(sc);
1580     ath9k_hw_startpcureceive(ah, !!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL));
1581    
1582     - spin_unlock_bh(&sc->rx.rxbuflock);
1583     -
1584     return 0;
1585     }
1586    
1587     +static void ath_flushrecv(struct ath_softc *sc)
1588     +{
1589     + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
1590     + ath_rx_tasklet(sc, 1, true);
1591     + ath_rx_tasklet(sc, 1, false);
1592     +}
1593     +
1594     bool ath_stoprecv(struct ath_softc *sc)
1595     {
1596     struct ath_hw *ah = sc->sc_ah;
1597     bool stopped, reset = false;
1598    
1599     - spin_lock_bh(&sc->rx.rxbuflock);
1600     ath9k_hw_abortpcurecv(ah);
1601     ath9k_hw_setrxfilter(ah, 0);
1602     stopped = ath9k_hw_stopdmarecv(ah, &reset);
1603    
1604     + ath_flushrecv(sc);
1605     +
1606     if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
1607     ath_edma_stop_recv(sc);
1608     else
1609     sc->rx.rxlink = NULL;
1610     - spin_unlock_bh(&sc->rx.rxbuflock);
1611    
1612     if (!(ah->ah_flags & AH_UNPLUGGED) &&
1613     unlikely(!stopped)) {
1614     @@ -499,15 +497,6 @@ bool ath_stoprecv(struct ath_softc *sc)
1615     return stopped && !reset;
1616     }
1617    
1618     -void ath_flushrecv(struct ath_softc *sc)
1619     -{
1620     - set_bit(SC_OP_RXFLUSH, &sc->sc_flags);
1621     - if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
1622     - ath_rx_tasklet(sc, 1, true);
1623     - ath_rx_tasklet(sc, 1, false);
1624     - clear_bit(SC_OP_RXFLUSH, &sc->sc_flags);
1625     -}
1626     -
1627     static bool ath_beacon_dtim_pending_cab(struct sk_buff *skb)
1628     {
1629     /* Check whether the Beacon frame has DTIM indicating buffered bc/mc */
1630     @@ -744,6 +733,7 @@ static struct ath_buf *ath_get_next_rx_buf(struct ath_softc *sc,
1631     return NULL;
1632     }
1633    
1634     + list_del(&bf->list);
1635     if (!bf->bf_mpdu)
1636     return bf;
1637    
1638     @@ -1059,16 +1049,12 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
1639     dma_type = DMA_FROM_DEVICE;
1640    
1641     qtype = hp ? ATH9K_RX_QUEUE_HP : ATH9K_RX_QUEUE_LP;
1642     - spin_lock_bh(&sc->rx.rxbuflock);
1643    
1644     tsf = ath9k_hw_gettsf64(ah);
1645     tsf_lower = tsf & 0xffffffff;
1646    
1647     do {
1648     bool decrypt_error = false;
1649     - /* If handling rx interrupt and flush is in progress => exit */
1650     - if (test_bit(SC_OP_RXFLUSH, &sc->sc_flags) && (flush == 0))
1651     - break;
1652    
1653     memset(&rs, 0, sizeof(rs));
1654     if (edma)
1655     @@ -1108,15 +1094,6 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
1656     sc->rx.num_pkts++;
1657     ath_debug_stat_rx(sc, &rs);
1658    
1659     - /*
1660     - * If we're asked to flush receive queue, directly
1661     - * chain it back at the queue without processing it.
1662     - */
1663     - if (test_bit(SC_OP_RXFLUSH, &sc->sc_flags)) {
1664     - RX_STAT_INC(rx_drop_rxflush);
1665     - goto requeue_drop_frag;
1666     - }
1667     -
1668     memset(rxs, 0, sizeof(struct ieee80211_rx_status));
1669    
1670     rxs->mactime = (tsf & ~0xffffffffULL) | rs.rs_tstamp;
1671     @@ -1251,19 +1228,18 @@ requeue_drop_frag:
1672     sc->rx.frag = NULL;
1673     }
1674     requeue:
1675     + list_add_tail(&bf->list, &sc->rx.rxbuf);
1676     + if (flush)
1677     + continue;
1678     +
1679     if (edma) {
1680     - list_add_tail(&bf->list, &sc->rx.rxbuf);
1681     ath_rx_edma_buf_link(sc, qtype);
1682     } else {
1683     - list_move_tail(&bf->list, &sc->rx.rxbuf);
1684     ath_rx_buf_link(sc, bf);
1685     - if (!flush)
1686     - ath9k_hw_rxena(ah);
1687     + ath9k_hw_rxena(ah);
1688     }
1689     } while (1);
1690    
1691     - spin_unlock_bh(&sc->rx.rxbuflock);
1692     -
1693     if (!(ah->imask & ATH9K_INT_RXEOL)) {
1694     ah->imask |= (ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
1695     ath9k_hw_set_interrupts(ah);
1696     diff --git a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
1697     index a744ea5..36014bf 100644
1698     --- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
1699     +++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
1700     @@ -280,8 +280,8 @@ static void brcms_ops_tx(struct ieee80211_hw *hw,
1701     kfree_skb(skb);
1702     goto done;
1703     }
1704     - brcms_c_sendpkt_mac80211(wl->wlc, skb, hw);
1705     - tx_info->rate_driver_data[0] = control->sta;
1706     + if (brcms_c_sendpkt_mac80211(wl->wlc, skb, hw))
1707     + tx_info->rate_driver_data[0] = control->sta;
1708     done:
1709     spin_unlock_bh(&wl->lock);
1710     }
1711     @@ -1401,9 +1401,10 @@ void brcms_add_timer(struct brcms_timer *t, uint ms, int periodic)
1712     #endif
1713     t->ms = ms;
1714     t->periodic = (bool) periodic;
1715     - t->set = true;
1716     -
1717     - atomic_inc(&t->wl->callbacks);
1718     + if (!t->set) {
1719     + t->set = true;
1720     + atomic_inc(&t->wl->callbacks);
1721     + }
1722    
1723     ieee80211_queue_delayed_work(hw, &t->dly_wrk, msecs_to_jiffies(ms));
1724     }
1725     diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
1726     index 75086b3..9fb0a4c9 100644
1727     --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
1728     +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
1729     @@ -6095,7 +6095,7 @@ static bool brcms_c_prec_enq(struct brcms_c_info *wlc, struct pktq *q,
1730     return brcms_c_prec_enq_head(wlc, q, pkt, prec, false);
1731     }
1732    
1733     -void brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb,
1734     +bool brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb,
1735     struct sk_buff *sdu, uint prec)
1736     {
1737     struct brcms_txq_info *qi = wlc->pkt_queue; /* Check me */
1738     @@ -6110,7 +6110,9 @@ void brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb,
1739     * packet flooding from mac80211 stack
1740     */
1741     brcmu_pkt_buf_free_skb(sdu);
1742     + return false;
1743     }
1744     + return true;
1745     }
1746    
1747     /*
1748     @@ -7273,7 +7275,7 @@ brcms_c_d11hdrs_mac80211(struct brcms_c_info *wlc, struct ieee80211_hw *hw,
1749     return 0;
1750     }
1751    
1752     -void brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc, struct sk_buff *sdu,
1753     +bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc, struct sk_buff *sdu,
1754     struct ieee80211_hw *hw)
1755     {
1756     u8 prio;
1757     @@ -7288,10 +7290,12 @@ void brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc, struct sk_buff *sdu,
1758     prio = ieee80211_is_data(d11_header->frame_control) ? sdu->priority :
1759     MAXPRIO;
1760     fifo = prio2fifo[prio];
1761     - if (brcms_c_d11hdrs_mac80211(wlc, hw, sdu, scb, 0, 1, fifo, 0))
1762     - return;
1763     - brcms_c_txq_enq(wlc, scb, sdu, BRCMS_PRIO_TO_PREC(prio));
1764     + brcms_c_d11hdrs_mac80211(wlc, hw, sdu, scb, 0, 1, fifo, 0);
1765     + if (!brcms_c_txq_enq(wlc, scb, sdu, BRCMS_PRIO_TO_PREC(prio)))
1766     + return false;
1767     brcms_c_send_q(wlc);
1768     +
1769     + return true;
1770     }
1771    
1772     void brcms_c_send_q(struct brcms_c_info *wlc)
1773     diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.h b/drivers/net/wireless/brcm80211/brcmsmac/main.h
1774     index 8debc74..b44725c 100644
1775     --- a/drivers/net/wireless/brcm80211/brcmsmac/main.h
1776     +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.h
1777     @@ -642,7 +642,7 @@ extern void brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo,
1778     bool commit, s8 txpktpend);
1779     extern void brcms_c_txfifo_complete(struct brcms_c_info *wlc, uint fifo,
1780     s8 txpktpend);
1781     -extern void brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb,
1782     +extern bool brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb,
1783     struct sk_buff *sdu, uint prec);
1784     extern void brcms_c_print_txstatus(struct tx_status *txs);
1785     extern int brcms_b_xmtfifo_sz_get(struct brcms_hardware *wlc_hw, uint fifo,
1786     diff --git a/drivers/net/wireless/brcm80211/brcmsmac/pub.h b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
1787     index 5855f4f..bfa2630 100644
1788     --- a/drivers/net/wireless/brcm80211/brcmsmac/pub.h
1789     +++ b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
1790     @@ -321,7 +321,7 @@ extern void brcms_c_intrsrestore(struct brcms_c_info *wlc, u32 macintmask);
1791     extern bool brcms_c_intrsupd(struct brcms_c_info *wlc);
1792     extern bool brcms_c_isr(struct brcms_c_info *wlc, bool *wantdpc);
1793     extern bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded);
1794     -extern void brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc,
1795     +extern bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc,
1796     struct sk_buff *sdu,
1797     struct ieee80211_hw *hw);
1798     extern bool brcms_c_aggregatable(struct brcms_c_info *wlc, u8 tid);
1799     diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
1800     index 318ed3c..617aeb9 100644
1801     --- a/drivers/net/wireless/iwlegacy/common.c
1802     +++ b/drivers/net/wireless/iwlegacy/common.c
1803     @@ -3957,17 +3957,21 @@ il_connection_init_rx_config(struct il_priv *il)
1804    
1805     memset(&il->staging, 0, sizeof(il->staging));
1806    
1807     - if (!il->vif) {
1808     + switch (il->iw_mode) {
1809     + case NL80211_IFTYPE_UNSPECIFIED:
1810     il->staging.dev_type = RXON_DEV_TYPE_ESS;
1811     - } else if (il->vif->type == NL80211_IFTYPE_STATION) {
1812     + break;
1813     + case NL80211_IFTYPE_STATION:
1814     il->staging.dev_type = RXON_DEV_TYPE_ESS;
1815     il->staging.filter_flags = RXON_FILTER_ACCEPT_GRP_MSK;
1816     - } else if (il->vif->type == NL80211_IFTYPE_ADHOC) {
1817     + break;
1818     + case NL80211_IFTYPE_ADHOC:
1819     il->staging.dev_type = RXON_DEV_TYPE_IBSS;
1820     il->staging.flags = RXON_FLG_SHORT_PREAMBLE_MSK;
1821     il->staging.filter_flags =
1822     RXON_FILTER_BCON_AWARE_MSK | RXON_FILTER_ACCEPT_GRP_MSK;
1823     - } else {
1824     + break;
1825     + default:
1826     IL_ERR("Unsupported interface type %d\n", il->vif->type);
1827     return;
1828     }
1829     @@ -4550,8 +4554,7 @@ out:
1830     EXPORT_SYMBOL(il_mac_add_interface);
1831    
1832     static void
1833     -il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif,
1834     - bool mode_change)
1835     +il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif)
1836     {
1837     lockdep_assert_held(&il->mutex);
1838    
1839     @@ -4560,9 +4563,7 @@ il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif,
1840     il_force_scan_end(il);
1841     }
1842    
1843     - if (!mode_change)
1844     - il_set_mode(il);
1845     -
1846     + il_set_mode(il);
1847     }
1848    
1849     void
1850     @@ -4575,8 +4576,8 @@ il_mac_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1851    
1852     WARN_ON(il->vif != vif);
1853     il->vif = NULL;
1854     -
1855     - il_teardown_interface(il, vif, false);
1856     + il->iw_mode = NL80211_IFTYPE_UNSPECIFIED;
1857     + il_teardown_interface(il, vif);
1858     memset(il->bssid, 0, ETH_ALEN);
1859    
1860     D_MAC80211("leave\n");
1861     @@ -4685,18 +4686,10 @@ il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1862     }
1863    
1864     /* success */
1865     - il_teardown_interface(il, vif, true);
1866     vif->type = newtype;
1867     vif->p2p = false;
1868     - err = il_set_mode(il);
1869     - WARN_ON(err);
1870     - /*
1871     - * We've switched internally, but submitting to the
1872     - * device may have failed for some reason. Mask this
1873     - * error, because otherwise mac80211 will not switch
1874     - * (and set the interface type back) and we'll be
1875     - * out of sync with it.
1876     - */
1877     + il->iw_mode = newtype;
1878     + il_teardown_interface(il, vif);
1879     err = 0;
1880    
1881     out:
1882     diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
1883     index 780d3e1..f7e91f2 100644
1884     --- a/drivers/net/wireless/mwifiex/cfg80211.c
1885     +++ b/drivers/net/wireless/mwifiex/cfg80211.c
1886     @@ -1462,7 +1462,7 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
1887     struct cfg80211_ssid req_ssid;
1888     int ret, auth_type = 0;
1889     struct cfg80211_bss *bss = NULL;
1890     - u8 is_scanning_required = 0, config_bands = 0;
1891     + u8 is_scanning_required = 0;
1892    
1893     memset(&req_ssid, 0, sizeof(struct cfg80211_ssid));
1894    
1895     @@ -1481,19 +1481,6 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
1896     /* disconnect before try to associate */
1897     mwifiex_deauthenticate(priv, NULL);
1898    
1899     - if (channel) {
1900     - if (mode == NL80211_IFTYPE_STATION) {
1901     - if (channel->band == IEEE80211_BAND_2GHZ)
1902     - config_bands = BAND_B | BAND_G | BAND_GN;
1903     - else
1904     - config_bands = BAND_A | BAND_AN;
1905     -
1906     - if (!((config_bands | priv->adapter->fw_bands) &
1907     - ~priv->adapter->fw_bands))
1908     - priv->adapter->config_bands = config_bands;
1909     - }
1910     - }
1911     -
1912     /* As this is new association, clear locally stored
1913     * keys and security related flags */
1914     priv->sec_info.wpa_enabled = false;
1915     diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c
1916     index 13fbc4e..b879e13 100644
1917     --- a/drivers/net/wireless/mwifiex/pcie.c
1918     +++ b/drivers/net/wireless/mwifiex/pcie.c
1919     @@ -161,7 +161,7 @@ static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state)
1920    
1921     if (pdev) {
1922     card = (struct pcie_service_card *) pci_get_drvdata(pdev);
1923     - if (!card || card->adapter) {
1924     + if (!card || !card->adapter) {
1925     pr_err("Card or adapter structure is not valid\n");
1926     return 0;
1927     }
1928     diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
1929     index 786bc11..f3211d8 100644
1930     --- a/drivers/net/wireless/mwifiex/sta_ioctl.c
1931     +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
1932     @@ -265,6 +265,20 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
1933     if (ret)
1934     goto done;
1935    
1936     + if (bss_desc) {
1937     + u8 config_bands = 0;
1938     +
1939     + if (mwifiex_band_to_radio_type((u8) bss_desc->bss_band)
1940     + == HostCmd_SCAN_RADIO_TYPE_BG)
1941     + config_bands = BAND_B | BAND_G | BAND_GN;
1942     + else
1943     + config_bands = BAND_A | BAND_AN;
1944     +
1945     + if (!((config_bands | adapter->fw_bands) &
1946     + ~adapter->fw_bands))
1947     + adapter->config_bands = config_bands;
1948     + }
1949     +
1950     ret = mwifiex_check_network_compatibility(priv, bss_desc);
1951     if (ret)
1952     goto done;
1953     diff --git a/drivers/platform/x86/ibm_rtl.c b/drivers/platform/x86/ibm_rtl.c
1954     index 7481146..97c2be1 100644
1955     --- a/drivers/platform/x86/ibm_rtl.c
1956     +++ b/drivers/platform/x86/ibm_rtl.c
1957     @@ -244,7 +244,7 @@ static int __init ibm_rtl_init(void) {
1958     if (force)
1959     pr_warn("module loaded by force\n");
1960     /* first ensure that we are running on IBM HW */
1961     - else if (efi_enabled || !dmi_check_system(ibm_rtl_dmi_table))
1962     + else if (efi_enabled(EFI_BOOT) || !dmi_check_system(ibm_rtl_dmi_table))
1963     return -ENODEV;
1964    
1965     /* Get the address for the Extended BIOS Data Area */
1966     diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
1967     index 71623a2..d1f0300 100644
1968     --- a/drivers/platform/x86/samsung-laptop.c
1969     +++ b/drivers/platform/x86/samsung-laptop.c
1970     @@ -26,6 +26,7 @@
1971     #include <linux/seq_file.h>
1972     #include <linux/debugfs.h>
1973     #include <linux/ctype.h>
1974     +#include <linux/efi.h>
1975     #include <acpi/video.h>
1976    
1977     /*
1978     @@ -1544,6 +1545,9 @@ static int __init samsung_init(void)
1979     struct samsung_laptop *samsung;
1980     int ret;
1981    
1982     + if (efi_enabled(EFI_BOOT))
1983     + return -ENODEV;
1984     +
1985     quirks = &samsung_unknown;
1986     if (!force && !dmi_check_system(samsung_dmi_table))
1987     return -ENODEV;
1988     diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c
1989     index b74050b..9ac1e9d 100644
1990     --- a/drivers/scsi/isci/init.c
1991     +++ b/drivers/scsi/isci/init.c
1992     @@ -633,7 +633,7 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic
1993     return -ENOMEM;
1994     pci_set_drvdata(pdev, pci_info);
1995    
1996     - if (efi_enabled)
1997     + if (efi_enabled(EFI_RUNTIME_SERVICES))
1998     orom = isci_get_efi_var(pdev);
1999    
2000     if (!orom)
2001     diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c
2002     index a55f91a..9430cd2 100644
2003     --- a/drivers/target/target_core_fabric_configfs.c
2004     +++ b/drivers/target/target_core_fabric_configfs.c
2005     @@ -751,12 +751,6 @@ static int target_fabric_port_link(
2006     struct target_fabric_configfs *tf;
2007     int ret;
2008    
2009     - if (dev->dev_link_magic != SE_DEV_LINK_MAGIC) {
2010     - pr_err("Bad dev->dev_link_magic, not a valid se_dev_ci pointer:"
2011     - " %p to struct se_device: %p\n", se_dev_ci, dev);
2012     - return -EFAULT;
2013     - }
2014     -
2015     tpg_ci = &lun_ci->ci_parent->ci_group->cg_item;
2016     se_tpg = container_of(to_config_group(tpg_ci),
2017     struct se_portal_group, tpg_group);
2018     @@ -774,6 +768,11 @@ static int target_fabric_port_link(
2019     ret = -ENODEV;
2020     goto out;
2021     }
2022     + if (dev->dev_link_magic != SE_DEV_LINK_MAGIC) {
2023     + pr_err("Bad dev->dev_link_magic, not a valid se_dev_ci pointer:"
2024     + " %p to struct se_device: %p\n", se_dev_ci, dev);
2025     + return -EFAULT;
2026     + }
2027    
2028     lun_p = core_dev_add_lun(se_tpg, dev, lun->unpacked_lun);
2029     if (IS_ERR(lun_p)) {
2030     diff --git a/fs/cifs/cifs_dfs_ref.c b/fs/cifs/cifs_dfs_ref.c
2031     index ce5cbd7..210fce2 100644
2032     --- a/fs/cifs/cifs_dfs_ref.c
2033     +++ b/fs/cifs/cifs_dfs_ref.c
2034     @@ -226,6 +226,8 @@ compose_mount_options_out:
2035     compose_mount_options_err:
2036     kfree(mountdata);
2037     mountdata = ERR_PTR(rc);
2038     + kfree(*devname);
2039     + *devname = NULL;
2040     goto compose_mount_options_out;
2041     }
2042    
2043     diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c
2044     index dd057bc..fc8dc20 100644
2045     --- a/fs/nfs/namespace.c
2046     +++ b/fs/nfs/namespace.c
2047     @@ -177,11 +177,31 @@ out_nofree:
2048     return mnt;
2049     }
2050    
2051     +static int
2052     +nfs_namespace_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
2053     +{
2054     + if (NFS_FH(dentry->d_inode)->size != 0)
2055     + return nfs_getattr(mnt, dentry, stat);
2056     + generic_fillattr(dentry->d_inode, stat);
2057     + return 0;
2058     +}
2059     +
2060     +static int
2061     +nfs_namespace_setattr(struct dentry *dentry, struct iattr *attr)
2062     +{
2063     + if (NFS_FH(dentry->d_inode)->size != 0)
2064     + return nfs_setattr(dentry, attr);
2065     + return -EACCES;
2066     +}
2067     +
2068     const struct inode_operations nfs_mountpoint_inode_operations = {
2069     .getattr = nfs_getattr,
2070     + .setattr = nfs_setattr,
2071     };
2072    
2073     const struct inode_operations nfs_referral_inode_operations = {
2074     + .getattr = nfs_namespace_getattr,
2075     + .setattr = nfs_namespace_setattr,
2076     };
2077    
2078     static void nfs_expire_automounts(struct work_struct *work)
2079     diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
2080     index 6bacfde..1f55131 100644
2081     --- a/fs/nfs/nfs4client.c
2082     +++ b/fs/nfs/nfs4client.c
2083     @@ -235,11 +235,10 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp,
2084     error = nfs4_discover_server_trunking(clp, &old);
2085     if (error < 0)
2086     goto error;
2087     + nfs_put_client(clp);
2088     if (clp != old) {
2089     clp->cl_preserve_clid = true;
2090     - nfs_put_client(clp);
2091     clp = old;
2092     - atomic_inc(&clp->cl_count);
2093     }
2094    
2095     return clp;
2096     @@ -305,7 +304,7 @@ int nfs40_walk_client_list(struct nfs_client *new,
2097     .clientid = new->cl_clientid,
2098     .confirm = new->cl_confirm,
2099     };
2100     - int status;
2101     + int status = -NFS4ERR_STALE_CLIENTID;
2102    
2103     spin_lock(&nn->nfs_client_lock);
2104     list_for_each_entry_safe(pos, n, &nn->nfs_client_list, cl_share_link) {
2105     @@ -331,40 +330,33 @@ int nfs40_walk_client_list(struct nfs_client *new,
2106    
2107     if (prev)
2108     nfs_put_client(prev);
2109     + prev = pos;
2110    
2111     status = nfs4_proc_setclientid_confirm(pos, &clid, cred);
2112     - if (status == 0) {
2113     + switch (status) {
2114     + case -NFS4ERR_STALE_CLIENTID:
2115     + break;
2116     + case 0:
2117     nfs4_swap_callback_idents(pos, new);
2118    
2119     - nfs_put_client(pos);
2120     + prev = NULL;
2121     *result = pos;
2122     dprintk("NFS: <-- %s using nfs_client = %p ({%d})\n",
2123     __func__, pos, atomic_read(&pos->cl_count));
2124     - return 0;
2125     - }
2126     - if (status != -NFS4ERR_STALE_CLIENTID) {
2127     - nfs_put_client(pos);
2128     - dprintk("NFS: <-- %s status = %d, no result\n",
2129     - __func__, status);
2130     - return status;
2131     + default:
2132     + goto out;
2133     }
2134    
2135     spin_lock(&nn->nfs_client_lock);
2136     - prev = pos;
2137     }
2138     + spin_unlock(&nn->nfs_client_lock);
2139    
2140     - /*
2141     - * No matching nfs_client found. This should be impossible,
2142     - * because the new nfs_client has already been added to
2143     - * nfs_client_list by nfs_get_client().
2144     - *
2145     - * Don't BUG(), since the caller is holding a mutex.
2146     - */
2147     + /* No match found. The server lost our clientid */
2148     +out:
2149     if (prev)
2150     nfs_put_client(prev);
2151     - spin_unlock(&nn->nfs_client_lock);
2152     - pr_err("NFS: %s Error: no matching nfs_client found\n", __func__);
2153     - return -NFS4ERR_STALE_CLIENTID;
2154     + dprintk("NFS: <-- %s status = %d\n", __func__, status);
2155     + return status;
2156     }
2157    
2158     #ifdef CONFIG_NFS_V4_1
2159     @@ -431,7 +423,7 @@ int nfs41_walk_client_list(struct nfs_client *new,
2160     {
2161     struct nfs_net *nn = net_generic(new->cl_net, nfs_net_id);
2162     struct nfs_client *pos, *n, *prev = NULL;
2163     - int error;
2164     + int status = -NFS4ERR_STALE_CLIENTID;
2165    
2166     spin_lock(&nn->nfs_client_lock);
2167     list_for_each_entry_safe(pos, n, &nn->nfs_client_list, cl_share_link) {
2168     @@ -447,14 +439,17 @@ int nfs41_walk_client_list(struct nfs_client *new,
2169     nfs_put_client(prev);
2170     prev = pos;
2171    
2172     - error = nfs_wait_client_init_complete(pos);
2173     - if (error < 0) {
2174     + nfs4_schedule_lease_recovery(pos);
2175     + status = nfs_wait_client_init_complete(pos);
2176     + if (status < 0) {
2177     nfs_put_client(pos);
2178     spin_lock(&nn->nfs_client_lock);
2179     continue;
2180     }
2181     -
2182     + status = pos->cl_cons_state;
2183     spin_lock(&nn->nfs_client_lock);
2184     + if (status < 0)
2185     + continue;
2186     }
2187    
2188     if (pos->rpc_ops != new->rpc_ops)
2189     @@ -472,6 +467,7 @@ int nfs41_walk_client_list(struct nfs_client *new,
2190     if (!nfs4_match_serverowners(pos, new))
2191     continue;
2192    
2193     + atomic_inc(&pos->cl_count);
2194     spin_unlock(&nn->nfs_client_lock);
2195     dprintk("NFS: <-- %s using nfs_client = %p ({%d})\n",
2196     __func__, pos, atomic_read(&pos->cl_count));
2197     @@ -480,16 +476,10 @@ int nfs41_walk_client_list(struct nfs_client *new,
2198     return 0;
2199     }
2200    
2201     - /*
2202     - * No matching nfs_client found. This should be impossible,
2203     - * because the new nfs_client has already been added to
2204     - * nfs_client_list by nfs_get_client().
2205     - *
2206     - * Don't BUG(), since the caller is holding a mutex.
2207     - */
2208     + /* No matching nfs_client found. */
2209     spin_unlock(&nn->nfs_client_lock);
2210     - pr_err("NFS: %s Error: no matching nfs_client found\n", __func__);
2211     - return -NFS4ERR_STALE_CLIENTID;
2212     + dprintk("NFS: <-- %s status = %d\n", __func__, status);
2213     + return status;
2214     }
2215     #endif /* CONFIG_NFS_V4_1 */
2216    
2217     diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
2218     index c351e6b..b1c96e7 100644
2219     --- a/fs/nfs/nfs4state.c
2220     +++ b/fs/nfs/nfs4state.c
2221     @@ -136,16 +136,11 @@ int nfs40_discover_server_trunking(struct nfs_client *clp,
2222     clp->cl_confirm = clid.confirm;
2223    
2224     status = nfs40_walk_client_list(clp, result, cred);
2225     - switch (status) {
2226     - case -NFS4ERR_STALE_CLIENTID:
2227     - set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state);
2228     - case 0:
2229     + if (status == 0) {
2230     /* Sustain the lease, even if it's empty. If the clientid4
2231     * goes stale it's of no use for trunking discovery. */
2232     nfs4_schedule_state_renewal(*result);
2233     - break;
2234     }
2235     -
2236     out:
2237     return status;
2238     }
2239     @@ -1850,6 +1845,7 @@ again:
2240     case -ETIMEDOUT:
2241     case -EAGAIN:
2242     ssleep(1);
2243     + case -NFS4ERR_STALE_CLIENTID:
2244     dprintk("NFS: %s after status %d, retrying\n",
2245     __func__, status);
2246     goto again;
2247     @@ -2001,8 +1997,18 @@ static int nfs4_reset_session(struct nfs_client *clp)
2248     nfs4_begin_drain_session(clp);
2249     cred = nfs4_get_exchange_id_cred(clp);
2250     status = nfs4_proc_destroy_session(clp->cl_session, cred);
2251     - if (status && status != -NFS4ERR_BADSESSION &&
2252     - status != -NFS4ERR_DEADSESSION) {
2253     + switch (status) {
2254     + case 0:
2255     + case -NFS4ERR_BADSESSION:
2256     + case -NFS4ERR_DEADSESSION:
2257     + break;
2258     + case -NFS4ERR_BACK_CHAN_BUSY:
2259     + case -NFS4ERR_DELAY:
2260     + set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state);
2261     + status = 0;
2262     + ssleep(1);
2263     + goto out;
2264     + default:
2265     status = nfs4_recovery_handle_error(clp, status);
2266     goto out;
2267     }
2268     diff --git a/fs/nfs/super.c b/fs/nfs/super.c
2269     index 00be08f..49f3f90 100644
2270     --- a/fs/nfs/super.c
2271     +++ b/fs/nfs/super.c
2272     @@ -2576,27 +2576,23 @@ nfs_xdev_mount(struct file_system_type *fs_type, int flags,
2273     struct nfs_server *server;
2274     struct dentry *mntroot = ERR_PTR(-ENOMEM);
2275     struct nfs_subversion *nfs_mod = NFS_SB(data->sb)->nfs_client->cl_nfs_mod;
2276     - int error;
2277    
2278     - dprintk("--> nfs_xdev_mount_common()\n");
2279     + dprintk("--> nfs_xdev_mount()\n");
2280    
2281     mount_info.mntfh = mount_info.cloned->fh;
2282    
2283     /* create a new volume representation */
2284     server = nfs_mod->rpc_ops->clone_server(NFS_SB(data->sb), data->fh, data->fattr, data->authflavor);
2285     - if (IS_ERR(server)) {
2286     - error = PTR_ERR(server);
2287     - goto out_err;
2288     - }
2289    
2290     - mntroot = nfs_fs_mount_common(server, flags, dev_name, &mount_info, nfs_mod);
2291     - dprintk("<-- nfs_xdev_mount_common() = 0\n");
2292     -out:
2293     - return mntroot;
2294     + if (IS_ERR(server))
2295     + mntroot = ERR_CAST(server);
2296     + else
2297     + mntroot = nfs_fs_mount_common(server, flags,
2298     + dev_name, &mount_info, nfs_mod);
2299    
2300     -out_err:
2301     - dprintk("<-- nfs_xdev_mount_common() = %d [error]\n", error);
2302     - goto out;
2303     + dprintk("<-- nfs_xdev_mount() = %ld\n",
2304     + IS_ERR(mntroot) ? PTR_ERR(mntroot) : 0L);
2305     + return mntroot;
2306     }
2307    
2308     #if IS_ENABLED(CONFIG_NFS_V4)
2309     diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
2310     index e0e9ee0..dfbcfd0 100644
2311     --- a/fs/xfs/xfs_aops.c
2312     +++ b/fs/xfs/xfs_aops.c
2313     @@ -86,11 +86,11 @@ xfs_destroy_ioend(
2314     }
2315    
2316     if (ioend->io_iocb) {
2317     + inode_dio_done(ioend->io_inode);
2318     if (ioend->io_isasync) {
2319     aio_complete(ioend->io_iocb, ioend->io_error ?
2320     ioend->io_error : ioend->io_result, 0);
2321     }
2322     - inode_dio_done(ioend->io_inode);
2323     }
2324    
2325     mempool_free(ioend, xfs_ioend_pool);
2326     diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
2327     index 4b0b8dd..58a1f41 100644
2328     --- a/fs/xfs/xfs_buf.c
2329     +++ b/fs/xfs/xfs_buf.c
2330     @@ -487,6 +487,7 @@ _xfs_buf_find(
2331     struct rb_node *parent;
2332     xfs_buf_t *bp;
2333     xfs_daddr_t blkno = map[0].bm_bn;
2334     + xfs_daddr_t eofs;
2335     int numblks = 0;
2336     int i;
2337    
2338     @@ -498,6 +499,23 @@ _xfs_buf_find(
2339     ASSERT(!(numbytes < (1 << btp->bt_sshift)));
2340     ASSERT(!(BBTOB(blkno) & (xfs_off_t)btp->bt_smask));
2341    
2342     + /*
2343     + * Corrupted block numbers can get through to here, unfortunately, so we
2344     + * have to check that the buffer falls within the filesystem bounds.
2345     + */
2346     + eofs = XFS_FSB_TO_BB(btp->bt_mount, btp->bt_mount->m_sb.sb_dblocks);
2347     + if (blkno >= eofs) {
2348     + /*
2349     + * XXX (dgc): we should really be returning EFSCORRUPTED here,
2350     + * but none of the higher level infrastructure supports
2351     + * returning a specific error on buffer lookup failures.
2352     + */
2353     + xfs_alert(btp->bt_mount,
2354     + "%s: Block out of range: block 0x%llx, EOFS 0x%llx ",
2355     + __func__, blkno, eofs);
2356     + return NULL;
2357     + }
2358     +
2359     /* get tree root */
2360     pag = xfs_perag_get(btp->bt_mount,
2361     xfs_daddr_to_agno(btp->bt_mount, blkno));
2362     diff --git a/fs/xfs/xfs_sync.c b/fs/xfs/xfs_sync.c
2363     index 9500caf..7bf85e8 100644
2364     --- a/fs/xfs/xfs_sync.c
2365     +++ b/fs/xfs/xfs_sync.c
2366     @@ -400,7 +400,7 @@ xfs_sync_worker(
2367     * cancel_delayed_work_sync on this work queue before tearing down
2368     * the ail and the log in xfs_log_unmount.
2369     */
2370     - if (!(mp->m_super->s_flags & MS_ACTIVE) &&
2371     + if ((mp->m_super->s_flags & MS_ACTIVE) &&
2372     !(mp->m_flags & XFS_MOUNT_RDONLY)) {
2373     /* dgc: errors ignored here */
2374     if (mp->m_super->s_writers.frozen == SB_UNFROZEN &&
2375     diff --git a/include/linux/efi.h b/include/linux/efi.h
2376     index 8670eb1..b424f64 100644
2377     --- a/include/linux/efi.h
2378     +++ b/include/linux/efi.h
2379     @@ -542,18 +542,30 @@ extern int __init efi_setup_pcdp_console(char *);
2380     #endif
2381    
2382     /*
2383     - * We play games with efi_enabled so that the compiler will, if possible, remove
2384     - * EFI-related code altogether.
2385     + * We play games with efi_enabled so that the compiler will, if
2386     + * possible, remove EFI-related code altogether.
2387     */
2388     +#define EFI_BOOT 0 /* Were we booted from EFI? */
2389     +#define EFI_SYSTEM_TABLES 1 /* Can we use EFI system tables? */
2390     +#define EFI_CONFIG_TABLES 2 /* Can we use EFI config tables? */
2391     +#define EFI_RUNTIME_SERVICES 3 /* Can we use runtime services? */
2392     +#define EFI_MEMMAP 4 /* Can we use EFI memory map? */
2393     +#define EFI_64BIT 5 /* Is the firmware 64-bit? */
2394     +
2395     #ifdef CONFIG_EFI
2396     # ifdef CONFIG_X86
2397     - extern int efi_enabled;
2398     - extern bool efi_64bit;
2399     +extern int efi_enabled(int facility);
2400     # else
2401     -# define efi_enabled 1
2402     +static inline int efi_enabled(int facility)
2403     +{
2404     + return 1;
2405     +}
2406     # endif
2407     #else
2408     -# define efi_enabled 0
2409     +static inline int efi_enabled(int facility)
2410     +{
2411     + return 0;
2412     +}
2413     #endif
2414    
2415     /*
2416     diff --git a/include/net/netfilter/nf_conntrack_core.h b/include/net/netfilter/nf_conntrack_core.h
2417     index d8f5b9f..e98aeb3 100644
2418     --- a/include/net/netfilter/nf_conntrack_core.h
2419     +++ b/include/net/netfilter/nf_conntrack_core.h
2420     @@ -31,6 +31,8 @@ extern void nf_conntrack_cleanup(struct net *net);
2421     extern int nf_conntrack_proto_init(struct net *net);
2422     extern void nf_conntrack_proto_fini(struct net *net);
2423    
2424     +extern void nf_conntrack_cleanup_end(void);
2425     +
2426     extern bool
2427     nf_ct_get_tuple(const struct sk_buff *skb,
2428     unsigned int nhoff,
2429     diff --git a/include/net/netns/x_tables.h b/include/net/netns/x_tables.h
2430     index 591db7d..c24060e 100644
2431     --- a/include/net/netns/x_tables.h
2432     +++ b/include/net/netns/x_tables.h
2433     @@ -8,6 +8,7 @@ struct ebt_table;
2434    
2435     struct netns_xt {
2436     struct list_head tables[NFPROTO_NUMPROTO];
2437     + bool notrack_deprecated_warning;
2438     #if defined(CONFIG_BRIDGE_NF_EBTABLES) || \
2439     defined(CONFIG_BRIDGE_NF_EBTABLES_MODULE)
2440     struct ebt_table *broute_table;
2441     diff --git a/init/main.c b/init/main.c
2442     index cd147a9..857166f 100644
2443     --- a/init/main.c
2444     +++ b/init/main.c
2445     @@ -604,7 +604,7 @@ asmlinkage void __init start_kernel(void)
2446     pidmap_init();
2447     anon_vma_init();
2448     #ifdef CONFIG_X86
2449     - if (efi_enabled)
2450     + if (efi_enabled(EFI_RUNTIME_SERVICES))
2451     efi_enter_virtual_mode();
2452     #endif
2453     thread_info_cache_init();
2454     @@ -632,7 +632,7 @@ asmlinkage void __init start_kernel(void)
2455     acpi_early_init(); /* before LAPIC and SMP init */
2456     sfi_init_late();
2457    
2458     - if (efi_enabled) {
2459     + if (efi_enabled(EFI_RUNTIME_SERVICES)) {
2460     efi_late_init();
2461     efi_free_boot_services();
2462     }
2463     diff --git a/kernel/smp.c b/kernel/smp.c
2464     index 29dd40a..69f38bd 100644
2465     --- a/kernel/smp.c
2466     +++ b/kernel/smp.c
2467     @@ -33,6 +33,7 @@ struct call_function_data {
2468     struct call_single_data csd;
2469     atomic_t refs;
2470     cpumask_var_t cpumask;
2471     + cpumask_var_t cpumask_ipi;
2472     };
2473    
2474     static DEFINE_PER_CPU_SHARED_ALIGNED(struct call_function_data, cfd_data);
2475     @@ -56,6 +57,9 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
2476     if (!zalloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL,
2477     cpu_to_node(cpu)))
2478     return notifier_from_errno(-ENOMEM);
2479     + if (!zalloc_cpumask_var_node(&cfd->cpumask_ipi, GFP_KERNEL,
2480     + cpu_to_node(cpu)))
2481     + return notifier_from_errno(-ENOMEM);
2482     break;
2483    
2484     #ifdef CONFIG_HOTPLUG_CPU
2485     @@ -65,6 +69,7 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
2486     case CPU_DEAD:
2487     case CPU_DEAD_FROZEN:
2488     free_cpumask_var(cfd->cpumask);
2489     + free_cpumask_var(cfd->cpumask_ipi);
2490     break;
2491     #endif
2492     };
2493     @@ -526,6 +531,12 @@ void smp_call_function_many(const struct cpumask *mask,
2494     return;
2495     }
2496    
2497     + /*
2498     + * After we put an entry into the list, data->cpumask
2499     + * may be cleared again when another CPU sends another IPI for
2500     + * a SMP function call, so data->cpumask will be zero.
2501     + */
2502     + cpumask_copy(data->cpumask_ipi, data->cpumask);
2503     raw_spin_lock_irqsave(&call_function.lock, flags);
2504     /*
2505     * Place entry at the _HEAD_ of the list, so that any cpu still
2506     @@ -549,7 +560,7 @@ void smp_call_function_many(const struct cpumask *mask,
2507     smp_mb();
2508    
2509     /* Send a message to all CPUs in the map */
2510     - arch_send_call_function_ipi_mask(data->cpumask);
2511     + arch_send_call_function_ipi_mask(data->cpumask_ipi);
2512    
2513     /* Optionally wait for the CPUs to complete */
2514     if (wait)
2515     diff --git a/mm/slub.c b/mm/slub.c
2516     index a0d6984..321afab 100644
2517     --- a/mm/slub.c
2518     +++ b/mm/slub.c
2519     @@ -3279,6 +3279,7 @@ static struct kmem_cache *__init create_kmalloc_cache(const char *name,
2520     if (kmem_cache_open(s, flags))
2521     goto panic;
2522    
2523     + s->refcount = 1;
2524     list_add(&s->list, &slab_caches);
2525     return s;
2526    
2527     diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
2528     index 2022b43..7c40d1e 100644
2529     --- a/net/bluetooth/hci_event.c
2530     +++ b/net/bluetooth/hci_event.c
2531     @@ -2394,7 +2394,7 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2532     if (ev->opcode != HCI_OP_NOP)
2533     del_timer(&hdev->cmd_timer);
2534    
2535     - if (ev->ncmd) {
2536     + if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2537     atomic_set(&hdev->cmd_cnt, 1);
2538     if (!skb_queue_empty(&hdev->cmd_q))
2539     queue_work(hdev->workqueue, &hdev->cmd_work);
2540     diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
2541     index ccd985d..03652f3 100644
2542     --- a/net/bluetooth/hidp/core.c
2543     +++ b/net/bluetooth/hidp/core.c
2544     @@ -931,7 +931,7 @@ static int hidp_setup_hid(struct hidp_session *session,
2545     hid->version = req->version;
2546     hid->country = req->country;
2547    
2548     - strncpy(hid->name, req->name, 128);
2549     + strncpy(hid->name, req->name, sizeof(req->name) - 1);
2550     strncpy(hid->phys, batostr(&bt_sk(session->ctrl_sock->sk)->src), 64);
2551     strncpy(hid->uniq, batostr(&bt_sk(session->ctrl_sock->sk)->dst), 64);
2552    
2553     diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c
2554     index 51f13f8..04b18c1 100644
2555     --- a/net/ipv4/netfilter/ipt_REJECT.c
2556     +++ b/net/ipv4/netfilter/ipt_REJECT.c
2557     @@ -81,6 +81,7 @@ static void send_reset(struct sk_buff *oldskb, int hook)
2558     niph->saddr = oiph->daddr;
2559     niph->daddr = oiph->saddr;
2560    
2561     + skb_reset_transport_header(nskb);
2562     tcph = (struct tcphdr *)skb_put(nskb, sizeof(struct tcphdr));
2563     memset(tcph, 0, sizeof(*tcph));
2564     tcph->source = oth->dest;
2565     diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c
2566     index fd4fb34..029623d 100644
2567     --- a/net/ipv6/netfilter/ip6t_REJECT.c
2568     +++ b/net/ipv6/netfilter/ip6t_REJECT.c
2569     @@ -132,6 +132,7 @@ static void send_reset(struct net *net, struct sk_buff *oldskb)
2570     ip6h->saddr = oip6h->daddr;
2571     ip6h->daddr = oip6h->saddr;
2572    
2573     + skb_reset_transport_header(nskb);
2574     tcph = (struct tcphdr *)skb_put(nskb, sizeof(struct tcphdr));
2575     /* Truncate to length (no data) */
2576     tcph->doff = sizeof(struct tcphdr)/4;
2577     diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
2578     index 22c8ea9..3dacecc 100644
2579     --- a/net/ipv6/netfilter/nf_conntrack_reasm.c
2580     +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
2581     @@ -311,7 +311,10 @@ found:
2582     else
2583     fq->q.fragments = skb;
2584    
2585     - skb->dev = NULL;
2586     + if (skb->dev) {
2587     + fq->iif = skb->dev->ifindex;
2588     + skb->dev = NULL;
2589     + }
2590     fq->q.stamp = skb->tstamp;
2591     fq->q.meat += skb->len;
2592     if (payload_len > fq->q.max_size)
2593     diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
2594     index 7371f67..494da7f 100644
2595     --- a/net/mac80211/cfg.c
2596     +++ b/net/mac80211/cfg.c
2597     @@ -164,7 +164,17 @@ static int ieee80211_add_key(struct wiphy *wiphy, struct net_device *dev,
2598     sta = sta_info_get(sdata, mac_addr);
2599     else
2600     sta = sta_info_get_bss(sdata, mac_addr);
2601     - if (!sta) {
2602     + /*
2603     + * The ASSOC test makes sure the driver is ready to
2604     + * receive the key. When wpa_supplicant has roamed
2605     + * using FT, it attempts to set the key before
2606     + * association has completed, this rejects that attempt
2607     + * so it will set the key again after assocation.
2608     + *
2609     + * TODO: accept the key if we have a station entry and
2610     + * add it to the device after the station.
2611     + */
2612     + if (!sta || !test_sta_flag(sta, WLAN_STA_ASSOC)) {
2613     ieee80211_key_free(sdata->local, key);
2614     err = -ENOENT;
2615     goto out_unlock;
2616     diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
2617     index 3da215c..493e2e8 100644
2618     --- a/net/mac80211/ieee80211_i.h
2619     +++ b/net/mac80211/ieee80211_i.h
2620     @@ -1279,10 +1279,8 @@ int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata);
2621     void ieee80211_sched_scan_stopped_work(struct work_struct *work);
2622    
2623     /* off-channel helpers */
2624     -void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
2625     - bool offchannel_ps_enable);
2626     -void ieee80211_offchannel_return(struct ieee80211_local *local,
2627     - bool offchannel_ps_disable);
2628     +void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local);
2629     +void ieee80211_offchannel_return(struct ieee80211_local *local);
2630     void ieee80211_roc_setup(struct ieee80211_local *local);
2631     void ieee80211_start_next_roc(struct ieee80211_local *local);
2632     void ieee80211_roc_purge(struct ieee80211_sub_if_data *sdata);
2633     diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
2634     index 2c84185..b88152f 100644
2635     --- a/net/mac80211/offchannel.c
2636     +++ b/net/mac80211/offchannel.c
2637     @@ -102,8 +102,7 @@ static void ieee80211_offchannel_ps_disable(struct ieee80211_sub_if_data *sdata)
2638     ieee80211_sta_reset_conn_monitor(sdata);
2639     }
2640    
2641     -void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
2642     - bool offchannel_ps_enable)
2643     +void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local)
2644     {
2645     struct ieee80211_sub_if_data *sdata;
2646    
2647     @@ -131,8 +130,7 @@ void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
2648    
2649     if (sdata->vif.type != NL80211_IFTYPE_MONITOR) {
2650     netif_tx_stop_all_queues(sdata->dev);
2651     - if (offchannel_ps_enable &&
2652     - (sdata->vif.type == NL80211_IFTYPE_STATION) &&
2653     + if (sdata->vif.type == NL80211_IFTYPE_STATION &&
2654     sdata->u.mgd.associated)
2655     ieee80211_offchannel_ps_enable(sdata);
2656     }
2657     @@ -140,8 +138,7 @@ void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
2658     mutex_unlock(&local->iflist_mtx);
2659     }
2660    
2661     -void ieee80211_offchannel_return(struct ieee80211_local *local,
2662     - bool offchannel_ps_disable)
2663     +void ieee80211_offchannel_return(struct ieee80211_local *local)
2664     {
2665     struct ieee80211_sub_if_data *sdata;
2666    
2667     @@ -157,11 +154,9 @@ void ieee80211_offchannel_return(struct ieee80211_local *local,
2668     continue;
2669    
2670     /* Tell AP we're back */
2671     - if (offchannel_ps_disable &&
2672     - sdata->vif.type == NL80211_IFTYPE_STATION) {
2673     - if (sdata->u.mgd.associated)
2674     - ieee80211_offchannel_ps_disable(sdata);
2675     - }
2676     + if (sdata->vif.type == NL80211_IFTYPE_STATION &&
2677     + sdata->u.mgd.associated)
2678     + ieee80211_offchannel_ps_disable(sdata);
2679    
2680     if (sdata->vif.type != NL80211_IFTYPE_MONITOR) {
2681     /*
2682     @@ -381,7 +376,7 @@ void ieee80211_sw_roc_work(struct work_struct *work)
2683     local->tmp_channel = NULL;
2684     ieee80211_hw_config(local, 0);
2685    
2686     - ieee80211_offchannel_return(local, true);
2687     + ieee80211_offchannel_return(local);
2688     }
2689    
2690     ieee80211_recalc_idle(local);
2691     diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
2692     index fab706f..f41b1bd 100644
2693     --- a/net/mac80211/scan.c
2694     +++ b/net/mac80211/scan.c
2695     @@ -310,7 +310,7 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted,
2696     if (!was_hw_scan) {
2697     ieee80211_configure_filter(local);
2698     drv_sw_scan_complete(local);
2699     - ieee80211_offchannel_return(local, true);
2700     + ieee80211_offchannel_return(local);
2701     }
2702    
2703     ieee80211_recalc_idle(local);
2704     @@ -355,7 +355,7 @@ static int ieee80211_start_sw_scan(struct ieee80211_local *local)
2705     local->next_scan_state = SCAN_DECISION;
2706     local->scan_channel_idx = 0;
2707    
2708     - ieee80211_offchannel_stop_vifs(local, true);
2709     + ieee80211_offchannel_stop_vifs(local);
2710    
2711     ieee80211_configure_filter(local);
2712    
2713     @@ -680,12 +680,8 @@ static void ieee80211_scan_state_suspend(struct ieee80211_local *local,
2714     local->scan_channel = NULL;
2715     ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
2716    
2717     - /*
2718     - * Re-enable vifs and beaconing. Leave PS
2719     - * in off-channel state..will put that back
2720     - * on-channel at the end of scanning.
2721     - */
2722     - ieee80211_offchannel_return(local, false);
2723     + /* disable PS */
2724     + ieee80211_offchannel_return(local);
2725    
2726     *next_delay = HZ / 5;
2727     /* afterwards, resume scan & go to next channel */
2728     @@ -695,8 +691,7 @@ static void ieee80211_scan_state_suspend(struct ieee80211_local *local,
2729     static void ieee80211_scan_state_resume(struct ieee80211_local *local,
2730     unsigned long *next_delay)
2731     {
2732     - /* PS already is in off-channel mode */
2733     - ieee80211_offchannel_stop_vifs(local, false);
2734     + ieee80211_offchannel_stop_vifs(local);
2735    
2736     if (local->ops->flush) {
2737     drv_flush(local, false);
2738     diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
2739     index fefa514..49e96df 100644
2740     --- a/net/netfilter/Kconfig
2741     +++ b/net/netfilter/Kconfig
2742     @@ -680,6 +680,13 @@ config NETFILTER_XT_TARGET_NFQUEUE
2743    
2744     To compile it as a module, choose M here. If unsure, say N.
2745    
2746     +config NETFILTER_XT_TARGET_NOTRACK
2747     + tristate '"NOTRACK" target support (DEPRECATED)'
2748     + depends on NF_CONNTRACK
2749     + depends on IP_NF_RAW || IP6_NF_RAW
2750     + depends on NETFILTER_ADVANCED
2751     + select NETFILTER_XT_TARGET_CT
2752     +
2753     config NETFILTER_XT_TARGET_RATEEST
2754     tristate '"RATEEST" target support'
2755     depends on NETFILTER_ADVANCED
2756     diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
2757     index 0f241be..ec02168 100644
2758     --- a/net/netfilter/nf_conntrack_core.c
2759     +++ b/net/netfilter/nf_conntrack_core.c
2760     @@ -1383,11 +1383,12 @@ void nf_conntrack_cleanup(struct net *net)
2761     synchronize_net();
2762     nf_conntrack_proto_fini(net);
2763     nf_conntrack_cleanup_net(net);
2764     +}
2765    
2766     - if (net_eq(net, &init_net)) {
2767     - RCU_INIT_POINTER(nf_ct_destroy, NULL);
2768     - nf_conntrack_cleanup_init_net();
2769     - }
2770     +void nf_conntrack_cleanup_end(void)
2771     +{
2772     + RCU_INIT_POINTER(nf_ct_destroy, NULL);
2773     + nf_conntrack_cleanup_init_net();
2774     }
2775    
2776     void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls)
2777     diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
2778     index 7bbfb3d..ef9e86e 100644
2779     --- a/net/netfilter/nf_conntrack_netlink.c
2780     +++ b/net/netfilter/nf_conntrack_netlink.c
2781     @@ -2514,7 +2514,7 @@ ctnetlink_create_expect(struct net *net, u16 zone,
2782     if (!help) {
2783     if (!cda[CTA_EXPECT_TIMEOUT]) {
2784     err = -EINVAL;
2785     - goto out;
2786     + goto err_out;
2787     }
2788     exp->timeout.expires =
2789     jiffies + ntohl(nla_get_be32(cda[CTA_EXPECT_TIMEOUT])) * HZ;
2790     diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
2791     index 9b39432..df8aa3a 100644
2792     --- a/net/netfilter/nf_conntrack_standalone.c
2793     +++ b/net/netfilter/nf_conntrack_standalone.c
2794     @@ -571,6 +571,7 @@ static int __init nf_conntrack_standalone_init(void)
2795     static void __exit nf_conntrack_standalone_fini(void)
2796     {
2797     unregister_pernet_subsys(&nf_conntrack_net_ops);
2798     + nf_conntrack_cleanup_end();
2799     }
2800    
2801     module_init(nf_conntrack_standalone_init);
2802     diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
2803     index 9f199f2..92fd8ec 100644
2804     --- a/net/netfilter/nfnetlink_log.c
2805     +++ b/net/netfilter/nfnetlink_log.c
2806     @@ -13,6 +13,7 @@
2807     */
2808     #include <linux/module.h>
2809     #include <linux/skbuff.h>
2810     +#include <linux/if_arp.h>
2811     #include <linux/init.h>
2812     #include <linux/ip.h>
2813     #include <linux/ipv6.h>
2814     @@ -384,6 +385,7 @@ __build_packet_message(struct nfulnl_instance *inst,
2815     struct nfgenmsg *nfmsg;
2816     sk_buff_data_t old_tail = inst->skb->tail;
2817     struct sock *sk;
2818     + const unsigned char *hwhdrp;
2819    
2820     nlh = nlmsg_put(inst->skb, 0, 0,
2821     NFNL_SUBSYS_ULOG << 8 | NFULNL_MSG_PACKET,
2822     @@ -485,9 +487,17 @@ __build_packet_message(struct nfulnl_instance *inst,
2823     if (indev && skb_mac_header_was_set(skb)) {
2824     if (nla_put_be16(inst->skb, NFULA_HWTYPE, htons(skb->dev->type)) ||
2825     nla_put_be16(inst->skb, NFULA_HWLEN,
2826     - htons(skb->dev->hard_header_len)) ||
2827     - nla_put(inst->skb, NFULA_HWHEADER, skb->dev->hard_header_len,
2828     - skb_mac_header(skb)))
2829     + htons(skb->dev->hard_header_len)))
2830     + goto nla_put_failure;
2831     +
2832     + hwhdrp = skb_mac_header(skb);
2833     +
2834     + if (skb->dev->type == ARPHRD_SIT)
2835     + hwhdrp -= ETH_HLEN;
2836     +
2837     + if (hwhdrp >= skb->head &&
2838     + nla_put(inst->skb, NFULA_HWHEADER,
2839     + skb->dev->hard_header_len, hwhdrp))
2840     goto nla_put_failure;
2841     }
2842    
2843     diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
2844     index 8d987c3..7b3a9e5 100644
2845     --- a/net/netfilter/x_tables.c
2846     +++ b/net/netfilter/x_tables.c
2847     @@ -345,19 +345,27 @@ int xt_find_revision(u8 af, const char *name, u8 revision, int target,
2848     }
2849     EXPORT_SYMBOL_GPL(xt_find_revision);
2850    
2851     -static char *textify_hooks(char *buf, size_t size, unsigned int mask)
2852     +static char *
2853     +textify_hooks(char *buf, size_t size, unsigned int mask, uint8_t nfproto)
2854     {
2855     - static const char *const names[] = {
2856     + static const char *const inetbr_names[] = {
2857     "PREROUTING", "INPUT", "FORWARD",
2858     "OUTPUT", "POSTROUTING", "BROUTING",
2859     };
2860     - unsigned int i;
2861     + static const char *const arp_names[] = {
2862     + "INPUT", "FORWARD", "OUTPUT",
2863     + };
2864     + const char *const *names;
2865     + unsigned int i, max;
2866     char *p = buf;
2867     bool np = false;
2868     int res;
2869    
2870     + names = (nfproto == NFPROTO_ARP) ? arp_names : inetbr_names;
2871     + max = (nfproto == NFPROTO_ARP) ? ARRAY_SIZE(arp_names) :
2872     + ARRAY_SIZE(inetbr_names);
2873     *p = '\0';
2874     - for (i = 0; i < ARRAY_SIZE(names); ++i) {
2875     + for (i = 0; i < max; ++i) {
2876     if (!(mask & (1 << i)))
2877     continue;
2878     res = snprintf(p, size, "%s%s", np ? "/" : "", names[i]);
2879     @@ -402,8 +410,10 @@ int xt_check_match(struct xt_mtchk_param *par,
2880     pr_err("%s_tables: %s match: used from hooks %s, but only "
2881     "valid from %s\n",
2882     xt_prefix[par->family], par->match->name,
2883     - textify_hooks(used, sizeof(used), par->hook_mask),
2884     - textify_hooks(allow, sizeof(allow), par->match->hooks));
2885     + textify_hooks(used, sizeof(used), par->hook_mask,
2886     + par->family),
2887     + textify_hooks(allow, sizeof(allow), par->match->hooks,
2888     + par->family));
2889     return -EINVAL;
2890     }
2891     if (par->match->proto && (par->match->proto != proto || inv_proto)) {
2892     @@ -575,8 +585,10 @@ int xt_check_target(struct xt_tgchk_param *par,
2893     pr_err("%s_tables: %s target: used from hooks %s, but only "
2894     "usable from %s\n",
2895     xt_prefix[par->family], par->target->name,
2896     - textify_hooks(used, sizeof(used), par->hook_mask),
2897     - textify_hooks(allow, sizeof(allow), par->target->hooks));
2898     + textify_hooks(used, sizeof(used), par->hook_mask,
2899     + par->family),
2900     + textify_hooks(allow, sizeof(allow), par->target->hooks,
2901     + par->family));
2902     return -EINVAL;
2903     }
2904     if (par->target->proto && (par->target->proto != proto || inv_proto)) {
2905     diff --git a/net/netfilter/xt_CT.c b/net/netfilter/xt_CT.c
2906     index ae7f5da..8461605 100644
2907     --- a/net/netfilter/xt_CT.c
2908     +++ b/net/netfilter/xt_CT.c
2909     @@ -109,7 +109,7 @@ static int xt_ct_tg_check_v0(const struct xt_tgchk_param *par)
2910     struct xt_ct_target_info *info = par->targinfo;
2911     struct nf_conntrack_tuple t;
2912     struct nf_conn *ct;
2913     - int ret;
2914     + int ret = -EOPNOTSUPP;
2915    
2916     if (info->flags & ~XT_CT_NOTRACK)
2917     return -EINVAL;
2918     @@ -243,7 +243,7 @@ static int xt_ct_tg_check_v1(const struct xt_tgchk_param *par)
2919     struct xt_ct_target_info_v1 *info = par->targinfo;
2920     struct nf_conntrack_tuple t;
2921     struct nf_conn *ct;
2922     - int ret;
2923     + int ret = -EOPNOTSUPP;
2924    
2925     if (info->flags & ~XT_CT_NOTRACK)
2926     return -EINVAL;
2927     @@ -377,14 +377,60 @@ static struct xt_target xt_ct_tg_reg[] __read_mostly = {
2928     },
2929     };
2930    
2931     +static unsigned int
2932     +notrack_tg(struct sk_buff *skb, const struct xt_action_param *par)
2933     +{
2934     + /* Previously seen (loopback)? Ignore. */
2935     + if (skb->nfct != NULL)
2936     + return XT_CONTINUE;
2937     +
2938     + skb->nfct = &nf_ct_untracked_get()->ct_general;
2939     + skb->nfctinfo = IP_CT_NEW;
2940     + nf_conntrack_get(skb->nfct);
2941     +
2942     + return XT_CONTINUE;
2943     +}
2944     +
2945     +static int notrack_chk(const struct xt_tgchk_param *par)
2946     +{
2947     + if (!par->net->xt.notrack_deprecated_warning) {
2948     + pr_info("netfilter: NOTRACK target is deprecated, "
2949     + "use CT instead or upgrade iptables\n");
2950     + par->net->xt.notrack_deprecated_warning = true;
2951     + }
2952     + return 0;
2953     +}
2954     +
2955     +static struct xt_target notrack_tg_reg __read_mostly = {
2956     + .name = "NOTRACK",
2957     + .revision = 0,
2958     + .family = NFPROTO_UNSPEC,
2959     + .checkentry = notrack_chk,
2960     + .target = notrack_tg,
2961     + .table = "raw",
2962     + .me = THIS_MODULE,
2963     +};
2964     +
2965     static int __init xt_ct_tg_init(void)
2966     {
2967     - return xt_register_targets(xt_ct_tg_reg, ARRAY_SIZE(xt_ct_tg_reg));
2968     + int ret;
2969     +
2970     + ret = xt_register_target(&notrack_tg_reg);
2971     + if (ret < 0)
2972     + return ret;
2973     +
2974     + ret = xt_register_targets(xt_ct_tg_reg, ARRAY_SIZE(xt_ct_tg_reg));
2975     + if (ret < 0) {
2976     + xt_unregister_target(&notrack_tg_reg);
2977     + return ret;
2978     + }
2979     + return 0;
2980     }
2981    
2982     static void __exit xt_ct_tg_exit(void)
2983     {
2984     xt_unregister_targets(xt_ct_tg_reg, ARRAY_SIZE(xt_ct_tg_reg));
2985     + xt_unregister_target(&notrack_tg_reg);
2986     }
2987    
2988     module_init(xt_ct_tg_init);
2989     @@ -394,3 +440,5 @@ MODULE_LICENSE("GPL");
2990     MODULE_DESCRIPTION("Xtables: connection tracking target");
2991     MODULE_ALIAS("ipt_CT");
2992     MODULE_ALIAS("ip6t_CT");
2993     +MODULE_ALIAS("ipt_NOTRACK");
2994     +MODULE_ALIAS("ip6t_NOTRACK");
2995     diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
2996     index 26a668a..a9d7af9 100644
2997     --- a/net/netfilter/xt_hashlimit.c
2998     +++ b/net/netfilter/xt_hashlimit.c
2999     @@ -157,11 +157,22 @@ dsthash_find(const struct xt_hashlimit_htable *ht,
3000     /* allocate dsthash_ent, initialize dst, put in htable and lock it */
3001     static struct dsthash_ent *
3002     dsthash_alloc_init(struct xt_hashlimit_htable *ht,
3003     - const struct dsthash_dst *dst)
3004     + const struct dsthash_dst *dst, bool *race)
3005     {
3006     struct dsthash_ent *ent;
3007    
3008     spin_lock(&ht->lock);
3009     +
3010     + /* Two or more packets may race to create the same entry in the
3011     + * hashtable, double check if this packet lost race.
3012     + */
3013     + ent = dsthash_find(ht, dst);
3014     + if (ent != NULL) {
3015     + spin_unlock(&ht->lock);
3016     + *race = true;
3017     + return ent;
3018     + }
3019     +
3020     /* initialize hash with random val at the time we allocate
3021     * the first hashtable entry */
3022     if (unlikely(!ht->rnd_initialized)) {
3023     @@ -318,7 +329,10 @@ static void htable_destroy(struct xt_hashlimit_htable *hinfo)
3024     parent = hashlimit_net->ipt_hashlimit;
3025     else
3026     parent = hashlimit_net->ip6t_hashlimit;
3027     - remove_proc_entry(hinfo->pde->name, parent);
3028     +
3029     + if(parent != NULL)
3030     + remove_proc_entry(hinfo->pde->name, parent);
3031     +
3032     htable_selective_cleanup(hinfo, select_all);
3033     vfree(hinfo);
3034     }
3035     @@ -585,6 +599,7 @@ hashlimit_mt(const struct sk_buff *skb, struct xt_action_param *par)
3036     unsigned long now = jiffies;
3037     struct dsthash_ent *dh;
3038     struct dsthash_dst dst;
3039     + bool race = false;
3040     u32 cost;
3041    
3042     if (hashlimit_init_dst(hinfo, &dst, skb, par->thoff) < 0)
3043     @@ -593,13 +608,18 @@ hashlimit_mt(const struct sk_buff *skb, struct xt_action_param *par)
3044     rcu_read_lock_bh();
3045     dh = dsthash_find(hinfo, &dst);
3046     if (dh == NULL) {
3047     - dh = dsthash_alloc_init(hinfo, &dst);
3048     + dh = dsthash_alloc_init(hinfo, &dst, &race);
3049     if (dh == NULL) {
3050     rcu_read_unlock_bh();
3051     goto hotdrop;
3052     + } else if (race) {
3053     + /* Already got an entry, update expiration timeout */
3054     + dh->expires = now + msecs_to_jiffies(hinfo->cfg.expire);
3055     + rateinfo_recalc(dh, now, hinfo->cfg.mode);
3056     + } else {
3057     + dh->expires = jiffies + msecs_to_jiffies(hinfo->cfg.expire);
3058     + rateinfo_init(dh, hinfo);
3059     }
3060     - dh->expires = jiffies + msecs_to_jiffies(hinfo->cfg.expire);
3061     - rateinfo_init(dh, hinfo);
3062     } else {
3063     /* update expiration timeout */
3064     dh->expires = now + msecs_to_jiffies(hinfo->cfg.expire);
3065     @@ -856,6 +876,27 @@ static int __net_init hashlimit_proc_net_init(struct net *net)
3066    
3067     static void __net_exit hashlimit_proc_net_exit(struct net *net)
3068     {
3069     + struct xt_hashlimit_htable *hinfo;
3070     + struct hlist_node *pos;
3071     + struct proc_dir_entry *pde;
3072     + struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
3073     +
3074     + /* recent_net_exit() is called before recent_mt_destroy(). Make sure
3075     + * that the parent xt_recent proc entry is is empty before trying to
3076     + * remove it.
3077     + */
3078     + mutex_lock(&hashlimit_mutex);
3079     + pde = hashlimit_net->ipt_hashlimit;
3080     + if (pde == NULL)
3081     + pde = hashlimit_net->ip6t_hashlimit;
3082     +
3083     + hlist_for_each_entry(hinfo, pos, &hashlimit_net->htables, node)
3084     + remove_proc_entry(hinfo->pde->name, pde);
3085     +
3086     + hashlimit_net->ipt_hashlimit = NULL;
3087     + hashlimit_net->ip6t_hashlimit = NULL;
3088     + mutex_unlock(&hashlimit_mutex);
3089     +
3090     proc_net_remove(net, "ipt_hashlimit");
3091     #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
3092     proc_net_remove(net, "ip6t_hashlimit");
3093     @@ -872,9 +913,6 @@ static int __net_init hashlimit_net_init(struct net *net)
3094    
3095     static void __net_exit hashlimit_net_exit(struct net *net)
3096     {
3097     - struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
3098     -
3099     - BUG_ON(!hlist_empty(&hashlimit_net->htables));
3100     hashlimit_proc_net_exit(net);
3101     }
3102    
3103     diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c
3104     index 4635c9b..978efc9 100644
3105     --- a/net/netfilter/xt_recent.c
3106     +++ b/net/netfilter/xt_recent.c
3107     @@ -29,6 +29,7 @@
3108     #include <linux/skbuff.h>
3109     #include <linux/inet.h>
3110     #include <linux/slab.h>
3111     +#include <linux/vmalloc.h>
3112     #include <net/net_namespace.h>
3113     #include <net/netns/generic.h>
3114    
3115     @@ -310,6 +311,14 @@ out:
3116     return ret;
3117     }
3118    
3119     +static void recent_table_free(void *addr)
3120     +{
3121     + if (is_vmalloc_addr(addr))
3122     + vfree(addr);
3123     + else
3124     + kfree(addr);
3125     +}
3126     +
3127     static int recent_mt_check(const struct xt_mtchk_param *par,
3128     const struct xt_recent_mtinfo_v1 *info)
3129     {
3130     @@ -322,6 +331,7 @@ static int recent_mt_check(const struct xt_mtchk_param *par,
3131     #endif
3132     unsigned int i;
3133     int ret = -EINVAL;
3134     + size_t sz;
3135    
3136     if (unlikely(!hash_rnd_inited)) {
3137     get_random_bytes(&hash_rnd, sizeof(hash_rnd));
3138     @@ -360,8 +370,11 @@ static int recent_mt_check(const struct xt_mtchk_param *par,
3139     goto out;
3140     }
3141    
3142     - t = kzalloc(sizeof(*t) + sizeof(t->iphash[0]) * ip_list_hash_size,
3143     - GFP_KERNEL);
3144     + sz = sizeof(*t) + sizeof(t->iphash[0]) * ip_list_hash_size;
3145     + if (sz <= PAGE_SIZE)
3146     + t = kzalloc(sz, GFP_KERNEL);
3147     + else
3148     + t = vzalloc(sz);
3149     if (t == NULL) {
3150     ret = -ENOMEM;
3151     goto out;
3152     @@ -377,14 +390,14 @@ static int recent_mt_check(const struct xt_mtchk_param *par,
3153     uid = make_kuid(&init_user_ns, ip_list_uid);
3154     gid = make_kgid(&init_user_ns, ip_list_gid);
3155     if (!uid_valid(uid) || !gid_valid(gid)) {
3156     - kfree(t);
3157     + recent_table_free(t);
3158     ret = -EINVAL;
3159     goto out;
3160     }
3161     pde = proc_create_data(t->name, ip_list_perms, recent_net->xt_recent,
3162     &recent_mt_fops, t);
3163     if (pde == NULL) {
3164     - kfree(t);
3165     + recent_table_free(t);
3166     ret = -ENOMEM;
3167     goto out;
3168     }
3169     @@ -431,10 +444,11 @@ static void recent_mt_destroy(const struct xt_mtdtor_param *par)
3170     list_del(&t->list);
3171     spin_unlock_bh(&recent_lock);
3172     #ifdef CONFIG_PROC_FS
3173     - remove_proc_entry(t->name, recent_net->xt_recent);
3174     + if (recent_net->xt_recent != NULL)
3175     + remove_proc_entry(t->name, recent_net->xt_recent);
3176     #endif
3177     recent_table_flush(t);
3178     - kfree(t);
3179     + recent_table_free(t);
3180     }
3181     mutex_unlock(&recent_mutex);
3182     }
3183     @@ -615,6 +629,20 @@ static int __net_init recent_proc_net_init(struct net *net)
3184    
3185     static void __net_exit recent_proc_net_exit(struct net *net)
3186     {
3187     + struct recent_net *recent_net = recent_pernet(net);
3188     + struct recent_table *t;
3189     +
3190     + /* recent_net_exit() is called before recent_mt_destroy(). Make sure
3191     + * that the parent xt_recent proc entry is is empty before trying to
3192     + * remove it.
3193     + */
3194     + spin_lock_bh(&recent_lock);
3195     + list_for_each_entry(t, &recent_net->tables, list)
3196     + remove_proc_entry(t->name, recent_net->xt_recent);
3197     +
3198     + recent_net->xt_recent = NULL;
3199     + spin_unlock_bh(&recent_lock);
3200     +
3201     proc_net_remove(net, "xt_recent");
3202     }
3203     #else
3204     @@ -638,9 +666,6 @@ static int __net_init recent_net_init(struct net *net)
3205    
3206     static void __net_exit recent_net_exit(struct net *net)
3207     {
3208     - struct recent_net *recent_net = recent_pernet(net);
3209     -
3210     - BUG_ON(!list_empty(&recent_net->tables));
3211     recent_proc_net_exit(net);
3212     }
3213    
3214     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
3215     index f419f0a9..078fb30 100644
3216     --- a/sound/pci/hda/hda_intel.c
3217     +++ b/sound/pci/hda/hda_intel.c
3218     @@ -650,29 +650,43 @@ static char *driver_short_names[] DELAYED_INITDATA_MARK = {
3219     #define get_azx_dev(substream) (substream->runtime->private_data)
3220    
3221     #ifdef CONFIG_X86
3222     -static void __mark_pages_wc(struct azx *chip, void *addr, size_t size, bool on)
3223     +static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
3224     {
3225     + int pages;
3226     +
3227     if (azx_snoop(chip))
3228     return;
3229     - if (addr && size) {
3230     - int pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
3231     + if (!dmab || !dmab->area || !dmab->bytes)
3232     + return;
3233     +
3234     +#ifdef CONFIG_SND_DMA_SGBUF
3235     + if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
3236     + struct snd_sg_buf *sgbuf = dmab->private_data;
3237     if (on)
3238     - set_memory_wc((unsigned long)addr, pages);
3239     + set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
3240     else
3241     - set_memory_wb((unsigned long)addr, pages);
3242     + set_pages_array_wb(sgbuf->page_table, sgbuf->pages);
3243     + return;
3244     }
3245     +#endif
3246     +
3247     + pages = (dmab->bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
3248     + if (on)
3249     + set_memory_wc((unsigned long)dmab->area, pages);
3250     + else
3251     + set_memory_wb((unsigned long)dmab->area, pages);
3252     }
3253    
3254     static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
3255     bool on)
3256     {
3257     - __mark_pages_wc(chip, buf->area, buf->bytes, on);
3258     + __mark_pages_wc(chip, buf, on);
3259     }
3260     static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
3261     - struct snd_pcm_runtime *runtime, bool on)
3262     + struct snd_pcm_substream *substream, bool on)
3263     {
3264     if (azx_dev->wc_marked != on) {
3265     - __mark_pages_wc(chip, runtime->dma_area, runtime->dma_bytes, on);
3266     + __mark_pages_wc(chip, snd_pcm_get_dma_buf(substream), on);
3267     azx_dev->wc_marked = on;
3268     }
3269     }
3270     @@ -683,7 +697,7 @@ static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
3271     {
3272     }
3273     static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
3274     - struct snd_pcm_runtime *runtime, bool on)
3275     + struct snd_pcm_substream *substream, bool on)
3276     {
3277     }
3278     #endif
3279     @@ -1860,11 +1874,10 @@ static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
3280     {
3281     struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
3282     struct azx *chip = apcm->chip;
3283     - struct snd_pcm_runtime *runtime = substream->runtime;
3284     struct azx_dev *azx_dev = get_azx_dev(substream);
3285     int ret;
3286    
3287     - mark_runtime_wc(chip, azx_dev, runtime, false);
3288     + mark_runtime_wc(chip, azx_dev, substream, false);
3289     azx_dev->bufsize = 0;
3290     azx_dev->period_bytes = 0;
3291     azx_dev->format_val = 0;
3292     @@ -1872,7 +1885,7 @@ static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
3293     params_buffer_bytes(hw_params));
3294     if (ret < 0)
3295     return ret;
3296     - mark_runtime_wc(chip, azx_dev, runtime, true);
3297     + mark_runtime_wc(chip, azx_dev, substream, true);
3298     return ret;
3299     }
3300    
3301     @@ -1881,7 +1894,6 @@ static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
3302     struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
3303     struct azx_dev *azx_dev = get_azx_dev(substream);
3304     struct azx *chip = apcm->chip;
3305     - struct snd_pcm_runtime *runtime = substream->runtime;
3306     struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
3307    
3308     /* reset BDL address */
3309     @@ -1894,7 +1906,7 @@ static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
3310    
3311     snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
3312    
3313     - mark_runtime_wc(chip, azx_dev, runtime, false);
3314     + mark_runtime_wc(chip, azx_dev, substream, false);
3315     return snd_pcm_lib_free_pages(substream);
3316     }
3317    
3318     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3319     index bbaf67c..c98cb89 100644
3320     --- a/sound/pci/hda/patch_realtek.c
3321     +++ b/sound/pci/hda/patch_realtek.c
3322     @@ -4688,6 +4688,7 @@ static const struct snd_pci_quirk alc880_fixup_tbl[] = {
3323     SND_PCI_QUIRK(0x1584, 0x9077, "Uniwill P53", ALC880_FIXUP_VOL_KNOB),
3324     SND_PCI_QUIRK(0x161f, 0x203d, "W810", ALC880_FIXUP_W810),
3325     SND_PCI_QUIRK(0x161f, 0x205d, "Medion Rim 2150", ALC880_FIXUP_MEDION_RIM),
3326     + SND_PCI_QUIRK(0x1631, 0xe011, "PB 13201056", ALC880_FIXUP_6ST),
3327     SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_FIXUP_F1734),
3328     SND_PCI_QUIRK(0x1734, 0x1094, "FSC Amilo M1451G", ALC880_FIXUP_FUJITSU),
3329     SND_PCI_QUIRK(0x1734, 0x10ac, "FSC AMILO Xi 1526", ALC880_FIXUP_F1734),
3330     @@ -5702,6 +5703,7 @@ static const struct alc_model_fixup alc268_fixup_models[] = {
3331     };
3332    
3333     static const struct snd_pci_quirk alc268_fixup_tbl[] = {
3334     + SND_PCI_QUIRK(0x1025, 0x015b, "Acer AOA 150 (ZG5)", ALC268_FIXUP_INV_DMIC),
3335     /* below is codec SSID since multiple Toshiba laptops have the
3336     * same PCI SSID 1179:ff00
3337     */
3338     diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
3339     index 08ae3cb..f9d9f68 100644
3340     --- a/sound/soc/codecs/arizona.c
3341     +++ b/sound/soc/codecs/arizona.c
3342     @@ -648,7 +648,7 @@ static int arizona_hw_params(struct snd_pcm_substream *substream,
3343     }
3344     sr_val = i;
3345    
3346     - lrclk = snd_soc_params_to_bclk(params) / params_rate(params);
3347     + lrclk = rates[bclk] / params_rate(params);
3348    
3349     arizona_aif_dbg(dai, "BCLK %dHz LRCLK %dHz\n",
3350     rates[bclk], rates[bclk] / lrclk);
3351     diff --git a/sound/soc/codecs/wm2200.c b/sound/soc/codecs/wm2200.c
3352     index 7ef4e96..0f2bb25 100644
3353     --- a/sound/soc/codecs/wm2200.c
3354     +++ b/sound/soc/codecs/wm2200.c
3355     @@ -897,8 +897,6 @@ static const char *wm2200_mixer_texts[] = {
3356     "EQR",
3357     "LHPF1",
3358     "LHPF2",
3359     - "LHPF3",
3360     - "LHPF4",
3361     "DSP1.1",
3362     "DSP1.2",
3363     "DSP1.3",
3364     @@ -931,7 +929,6 @@ static int wm2200_mixer_values[] = {
3365     0x25,
3366     0x50, /* EQ */
3367     0x51,
3368     - 0x52,
3369     0x60, /* LHPF1 */
3370     0x61, /* LHPF2 */
3371     0x68, /* DSP1 */
3372     diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
3373     index 298070e..41e8bfb 100644
3374     --- a/sound/usb/mixer.c
3375     +++ b/sound/usb/mixer.c
3376     @@ -1259,16 +1259,23 @@ static int parse_audio_feature_unit(struct mixer_build *state, int unitid, void
3377     }
3378     channels = (hdr->bLength - 7) / csize - 1;
3379     bmaControls = hdr->bmaControls;
3380     + if (hdr->bLength < 7 + csize) {
3381     + snd_printk(KERN_ERR "usbaudio: unit %u: "
3382     + "invalid UAC_FEATURE_UNIT descriptor\n",
3383     + unitid);
3384     + return -EINVAL;
3385     + }
3386     } else {
3387     struct uac2_feature_unit_descriptor *ftr = _ftr;
3388     csize = 4;
3389     channels = (hdr->bLength - 6) / 4 - 1;
3390     bmaControls = ftr->bmaControls;
3391     - }
3392     -
3393     - if (hdr->bLength < 7 || !csize || hdr->bLength < 7 + csize) {
3394     - snd_printk(KERN_ERR "usbaudio: unit %u: invalid UAC_FEATURE_UNIT descriptor\n", unitid);
3395     - return -EINVAL;
3396     + if (hdr->bLength < 6 + csize) {
3397     + snd_printk(KERN_ERR "usbaudio: unit %u: "
3398     + "invalid UAC_FEATURE_UNIT descriptor\n",
3399     + unitid);
3400     + return -EINVAL;
3401     + }
3402     }
3403    
3404     /* parse the source unit */
3405     diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
3406     index 9718e98..62e7bd6 100644
3407     --- a/virt/kvm/eventfd.c
3408     +++ b/virt/kvm/eventfd.c
3409     @@ -332,7 +332,7 @@ kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args)
3410     mutex_lock(&kvm->irqfds.resampler_lock);
3411    
3412     list_for_each_entry(resampler,
3413     - &kvm->irqfds.resampler_list, list) {
3414     + &kvm->irqfds.resampler_list, link) {
3415     if (resampler->notifier.gsi == irqfd->gsi) {
3416     irqfd->resampler = resampler;
3417     break;