diff options
Diffstat (limited to '3.14.40/1039_linux-3.14.40.patch')
-rw-r--r-- | 3.14.40/1039_linux-3.14.40.patch | 2462 |
1 files changed, 0 insertions, 2462 deletions
diff --git a/3.14.40/1039_linux-3.14.40.patch b/3.14.40/1039_linux-3.14.40.patch deleted file mode 100644 index 6afa4bd..0000000 --- a/3.14.40/1039_linux-3.14.40.patch +++ /dev/null @@ -1,2462 +0,0 @@ -diff --git a/Makefile b/Makefile -index b40845e..070e0eb 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,6 +1,6 @@ - VERSION = 3 - PATCHLEVEL = 14 --SUBLEVEL = 39 -+SUBLEVEL = 40 - EXTRAVERSION = - NAME = Remembering Coco - -diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c -index 98838a0..9d0ac09 100644 ---- a/arch/alpha/mm/fault.c -+++ b/arch/alpha/mm/fault.c -@@ -156,6 +156,8 @@ retry: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c -index 9c69552..01e18b5 100644 ---- a/arch/arc/mm/fault.c -+++ b/arch/arc/mm/fault.c -@@ -162,6 +162,8 @@ good_area: - /* TBD: switch to pagefault_out_of_memory() */ - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - -diff --git a/arch/arm/include/asm/pgtable-3level-hwdef.h b/arch/arm/include/asm/pgtable-3level-hwdef.h -index 626989f..9fd61c7 100644 ---- a/arch/arm/include/asm/pgtable-3level-hwdef.h -+++ b/arch/arm/include/asm/pgtable-3level-hwdef.h -@@ -43,7 +43,7 @@ - #define PMD_SECT_BUFFERABLE (_AT(pmdval_t, 1) << 2) - #define PMD_SECT_CACHEABLE (_AT(pmdval_t, 1) << 3) - #define PMD_SECT_USER (_AT(pmdval_t, 1) << 6) /* AP[1] */ --#define PMD_SECT_RDONLY (_AT(pmdval_t, 1) << 7) /* AP[2] */ -+#define PMD_SECT_AP2 (_AT(pmdval_t, 1) << 7) /* read only */ - #define PMD_SECT_S (_AT(pmdval_t, 3) << 8) - #define PMD_SECT_AF (_AT(pmdval_t, 1) << 10) - #define PMD_SECT_nG (_AT(pmdval_t, 1) << 11) -@@ -72,6 +72,7 @@ - #define PTE_TABLE_BIT (_AT(pteval_t, 1) << 1) - #define PTE_BUFFERABLE (_AT(pteval_t, 1) << 2) /* AttrIndx[0] */ - #define PTE_CACHEABLE (_AT(pteval_t, 1) << 3) /* AttrIndx[1] */ -+#define PTE_AP2 (_AT(pteval_t, 1) << 7) /* AP[2] */ - #define PTE_EXT_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */ - #define PTE_EXT_AF (_AT(pteval_t, 1) << 10) /* Access Flag */ - #define PTE_EXT_NG (_AT(pteval_t, 1) << 11) /* nG */ -diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h -index 85c60ad..06e0bc0 100644 ---- a/arch/arm/include/asm/pgtable-3level.h -+++ b/arch/arm/include/asm/pgtable-3level.h -@@ -79,18 +79,19 @@ - #define L_PTE_PRESENT (_AT(pteval_t, 3) << 0) /* Present */ - #define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */ - #define L_PTE_USER (_AT(pteval_t, 1) << 6) /* AP[1] */ --#define L_PTE_RDONLY (_AT(pteval_t, 1) << 7) /* AP[2] */ - #define L_PTE_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */ - #define L_PTE_YOUNG (_AT(pteval_t, 1) << 10) /* AF */ - #define L_PTE_XN (_AT(pteval_t, 1) << 54) /* XN */ --#define L_PTE_DIRTY (_AT(pteval_t, 1) << 55) /* unused */ --#define L_PTE_SPECIAL (_AT(pteval_t, 1) << 56) /* unused */ -+#define L_PTE_DIRTY (_AT(pteval_t, 1) << 55) -+#define L_PTE_SPECIAL (_AT(pteval_t, 1) << 56) - #define L_PTE_NONE (_AT(pteval_t, 1) << 57) /* PROT_NONE */ -+#define L_PTE_RDONLY (_AT(pteval_t, 1) << 58) /* READ ONLY */ - --#define PMD_SECT_VALID (_AT(pmdval_t, 1) << 0) --#define PMD_SECT_DIRTY (_AT(pmdval_t, 1) << 55) --#define PMD_SECT_SPLITTING (_AT(pmdval_t, 1) << 56) --#define PMD_SECT_NONE (_AT(pmdval_t, 1) << 57) -+#define L_PMD_SECT_VALID (_AT(pmdval_t, 1) << 0) -+#define L_PMD_SECT_DIRTY (_AT(pmdval_t, 1) << 55) -+#define L_PMD_SECT_SPLITTING (_AT(pmdval_t, 1) << 56) -+#define L_PMD_SECT_NONE (_AT(pmdval_t, 1) << 57) -+#define L_PMD_SECT_RDONLY (_AT(pteval_t, 1) << 58) - - /* - * To be used in assembly code with the upper page attributes. -@@ -207,27 +208,32 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr) - #define pte_huge(pte) (pte_val(pte) && !(pte_val(pte) & PTE_TABLE_BIT)) - #define pte_mkhuge(pte) (__pte(pte_val(pte) & ~PTE_TABLE_BIT)) - --#define pmd_young(pmd) (pmd_val(pmd) & PMD_SECT_AF) -+#define pmd_isset(pmd, val) ((u32)(val) == (val) ? pmd_val(pmd) & (val) \ -+ : !!(pmd_val(pmd) & (val))) -+#define pmd_isclear(pmd, val) (!(pmd_val(pmd) & (val))) -+ -+#define pmd_young(pmd) (pmd_isset((pmd), PMD_SECT_AF)) - - #define __HAVE_ARCH_PMD_WRITE --#define pmd_write(pmd) (!(pmd_val(pmd) & PMD_SECT_RDONLY)) -+#define pmd_write(pmd) (pmd_isclear((pmd), L_PMD_SECT_RDONLY)) -+#define pmd_dirty(pmd) (pmd_isset((pmd), L_PMD_SECT_DIRTY)) - - #define pmd_hugewillfault(pmd) (!pmd_young(pmd) || !pmd_write(pmd)) - #define pmd_thp_or_huge(pmd) (pmd_huge(pmd) || pmd_trans_huge(pmd)) - - #ifdef CONFIG_TRANSPARENT_HUGEPAGE --#define pmd_trans_huge(pmd) (pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT)) --#define pmd_trans_splitting(pmd) (pmd_val(pmd) & PMD_SECT_SPLITTING) -+#define pmd_trans_huge(pmd) (pmd_val(pmd) && !pmd_table(pmd)) -+#define pmd_trans_splitting(pmd) (pmd_isset((pmd), L_PMD_SECT_SPLITTING)) - #endif - - #define PMD_BIT_FUNC(fn,op) \ - static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd) op; return pmd; } - --PMD_BIT_FUNC(wrprotect, |= PMD_SECT_RDONLY); -+PMD_BIT_FUNC(wrprotect, |= L_PMD_SECT_RDONLY); - PMD_BIT_FUNC(mkold, &= ~PMD_SECT_AF); --PMD_BIT_FUNC(mksplitting, |= PMD_SECT_SPLITTING); --PMD_BIT_FUNC(mkwrite, &= ~PMD_SECT_RDONLY); --PMD_BIT_FUNC(mkdirty, |= PMD_SECT_DIRTY); -+PMD_BIT_FUNC(mksplitting, |= L_PMD_SECT_SPLITTING); -+PMD_BIT_FUNC(mkwrite, &= ~L_PMD_SECT_RDONLY); -+PMD_BIT_FUNC(mkdirty, |= L_PMD_SECT_DIRTY); - PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF); - - #define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT)) -@@ -241,8 +247,8 @@ PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF); - - static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot) - { -- const pmdval_t mask = PMD_SECT_USER | PMD_SECT_XN | PMD_SECT_RDONLY | -- PMD_SECT_VALID | PMD_SECT_NONE; -+ const pmdval_t mask = PMD_SECT_USER | PMD_SECT_XN | L_PMD_SECT_RDONLY | -+ L_PMD_SECT_VALID | L_PMD_SECT_NONE; - pmd_val(pmd) = (pmd_val(pmd) & ~mask) | (pgprot_val(newprot) & mask); - return pmd; - } -@@ -253,8 +259,13 @@ static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr, - BUG_ON(addr >= TASK_SIZE); - - /* create a faulting entry if PROT_NONE protected */ -- if (pmd_val(pmd) & PMD_SECT_NONE) -- pmd_val(pmd) &= ~PMD_SECT_VALID; -+ if (pmd_val(pmd) & L_PMD_SECT_NONE) -+ pmd_val(pmd) &= ~L_PMD_SECT_VALID; -+ -+ if (pmd_write(pmd) && pmd_dirty(pmd)) -+ pmd_val(pmd) &= ~PMD_SECT_AP2; -+ else -+ pmd_val(pmd) |= PMD_SECT_AP2; - - *pmdp = __pmd(pmd_val(pmd) | PMD_SECT_nG); - flush_pmd_entry(pmdp); -diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h -index 7d59b52..89dba13 100644 ---- a/arch/arm/include/asm/pgtable.h -+++ b/arch/arm/include/asm/pgtable.h -@@ -214,12 +214,16 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd) - - #define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0) - -+#define pte_isset(pte, val) ((u32)(val) == (val) ? pte_val(pte) & (val) \ -+ : !!(pte_val(pte) & (val))) -+#define pte_isclear(pte, val) (!(pte_val(pte) & (val))) -+ - #define pte_none(pte) (!pte_val(pte)) --#define pte_present(pte) (pte_val(pte) & L_PTE_PRESENT) --#define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY)) --#define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY) --#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) --#define pte_exec(pte) (!(pte_val(pte) & L_PTE_XN)) -+#define pte_present(pte) (pte_isset((pte), L_PTE_PRESENT)) -+#define pte_write(pte) (pte_isclear((pte), L_PTE_RDONLY)) -+#define pte_dirty(pte) (pte_isset((pte), L_PTE_DIRTY)) -+#define pte_young(pte) (pte_isset((pte), L_PTE_YOUNG)) -+#define pte_exec(pte) (pte_isclear((pte), L_PTE_XN)) - #define pte_special(pte) (0) - - #define pte_present_user(pte) (pte_present(pte) && (pte_val(pte) & L_PTE_USER)) -diff --git a/arch/arm/mm/proc-v7-3level.S b/arch/arm/mm/proc-v7-3level.S -index 22e3ad6..eb81123 100644 ---- a/arch/arm/mm/proc-v7-3level.S -+++ b/arch/arm/mm/proc-v7-3level.S -@@ -86,8 +86,13 @@ ENTRY(cpu_v7_set_pte_ext) - tst rh, #1 << (57 - 32) @ L_PTE_NONE - bicne rl, #L_PTE_VALID - bne 1f -- tst rh, #1 << (55 - 32) @ L_PTE_DIRTY -- orreq rl, #L_PTE_RDONLY -+ -+ eor ip, rh, #1 << (55 - 32) @ toggle L_PTE_DIRTY in temp reg to -+ @ test for !L_PTE_DIRTY || L_PTE_RDONLY -+ tst ip, #1 << (55 - 32) | 1 << (58 - 32) -+ orrne rl, #PTE_AP2 -+ biceq rl, #PTE_AP2 -+ - 1: strd r2, r3, [r0] - ALT_SMP(W(nop)) - ALT_UP (mcr p15, 0, r0, c7, c10, 1) @ flush_pte -diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c -index 0eca933..d223a8b 100644 ---- a/arch/avr32/mm/fault.c -+++ b/arch/avr32/mm/fault.c -@@ -142,6 +142,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/cris/mm/fault.c b/arch/cris/mm/fault.c -index 1790f22..2686a7a 100644 ---- a/arch/cris/mm/fault.c -+++ b/arch/cris/mm/fault.c -@@ -176,6 +176,8 @@ retry: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c -index 9a66372..ec4917d 100644 ---- a/arch/frv/mm/fault.c -+++ b/arch/frv/mm/fault.c -@@ -168,6 +168,8 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c -index 7225dad..ba5ba7a 100644 ---- a/arch/ia64/mm/fault.c -+++ b/arch/ia64/mm/fault.c -@@ -172,6 +172,8 @@ retry: - */ - if (fault & VM_FAULT_OOM) { - goto out_of_memory; -+ } else if (fault & VM_FAULT_SIGSEGV) { -+ goto bad_area; - } else if (fault & VM_FAULT_SIGBUS) { - signal = SIGBUS; - goto bad_area; -diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c -index e9c6a80..e3d4d48901 100644 ---- a/arch/m32r/mm/fault.c -+++ b/arch/m32r/mm/fault.c -@@ -200,6 +200,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c -index 2bd7487..b2f04ae 100644 ---- a/arch/m68k/mm/fault.c -+++ b/arch/m68k/mm/fault.c -@@ -145,6 +145,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto map_err; - else if (fault & VM_FAULT_SIGBUS) - goto bus_err; - BUG(); -diff --git a/arch/metag/mm/fault.c b/arch/metag/mm/fault.c -index 332680e..2de5dc6 100644 ---- a/arch/metag/mm/fault.c -+++ b/arch/metag/mm/fault.c -@@ -141,6 +141,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c -index fa4cf52..d46a5eb 100644 ---- a/arch/microblaze/mm/fault.c -+++ b/arch/microblaze/mm/fault.c -@@ -224,6 +224,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c -index becc42b..70ab5d6 100644 ---- a/arch/mips/mm/fault.c -+++ b/arch/mips/mm/fault.c -@@ -158,6 +158,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c -index 3516cbd..0c2cc5d 100644 ---- a/arch/mn10300/mm/fault.c -+++ b/arch/mn10300/mm/fault.c -@@ -262,6 +262,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/openrisc/mm/fault.c b/arch/openrisc/mm/fault.c -index 0703acf..230ac20 100644 ---- a/arch/openrisc/mm/fault.c -+++ b/arch/openrisc/mm/fault.c -@@ -171,6 +171,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c -index d72197f..d27e388 100644 ---- a/arch/parisc/mm/fault.c -+++ b/arch/parisc/mm/fault.c -@@ -256,6 +256,8 @@ good_area: - */ - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto bad_area; - BUG(); -diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c -index 51ab9e7..010fabf 100644 ---- a/arch/powerpc/mm/fault.c -+++ b/arch/powerpc/mm/fault.c -@@ -432,6 +432,8 @@ good_area: - */ - fault = handle_mm_fault(mm, vma, address, flags); - if (unlikely(fault & (VM_FAULT_RETRY|VM_FAULT_ERROR))) { -+ if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - rc = mm_fault_error(regs, address, fault); - if (rc >= MM_FAULT_RETURN) - goto bail; -diff --git a/arch/powerpc/platforms/cell/spu_fault.c b/arch/powerpc/platforms/cell/spu_fault.c -index 641e727..62f3e4e 100644 ---- a/arch/powerpc/platforms/cell/spu_fault.c -+++ b/arch/powerpc/platforms/cell/spu_fault.c -@@ -75,7 +75,7 @@ int spu_handle_mm_fault(struct mm_struct *mm, unsigned long ea, - if (*flt & VM_FAULT_OOM) { - ret = -ENOMEM; - goto out_unlock; -- } else if (*flt & VM_FAULT_SIGBUS) { -+ } else if (*flt & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV)) { - ret = -EFAULT; - goto out_unlock; - } -diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c -index 87ba7cf..65d633f 100644 ---- a/arch/powerpc/platforms/cell/spufs/inode.c -+++ b/arch/powerpc/platforms/cell/spufs/inode.c -@@ -164,7 +164,7 @@ static void spufs_prune_dir(struct dentry *dir) - struct dentry *dentry, *tmp; - - mutex_lock(&dir->d_inode->i_mutex); -- list_for_each_entry_safe(dentry, tmp, &dir->d_subdirs, d_u.d_child) { -+ list_for_each_entry_safe(dentry, tmp, &dir->d_subdirs, d_child) { - spin_lock(&dentry->d_lock); - if (!(d_unhashed(dentry)) && dentry->d_inode) { - dget_dlock(dentry); -diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c -index d95265b2..8e95432 100644 ---- a/arch/s390/mm/fault.c -+++ b/arch/s390/mm/fault.c -@@ -239,6 +239,12 @@ static noinline void do_fault_error(struct pt_regs *regs, int fault) - do_no_context(regs); - else - pagefault_out_of_memory(); -+ } else if (fault & VM_FAULT_SIGSEGV) { -+ /* Kernel mode? Handle exceptions or die */ -+ if (!user_mode(regs)) -+ do_no_context(regs); -+ else -+ do_sigsegv(regs, SEGV_MAPERR); - } else if (fault & VM_FAULT_SIGBUS) { - /* Kernel mode? Handle exceptions or die */ - if (!user_mode(regs)) -diff --git a/arch/score/mm/fault.c b/arch/score/mm/fault.c -index 52238983..6860beb 100644 ---- a/arch/score/mm/fault.c -+++ b/arch/score/mm/fault.c -@@ -114,6 +114,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c -index 541dc61..a58fec9 100644 ---- a/arch/sh/mm/fault.c -+++ b/arch/sh/mm/fault.c -@@ -353,6 +353,8 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, - } else { - if (fault & VM_FAULT_SIGBUS) - do_sigbus(regs, error_code, address); -+ else if (fault & VM_FAULT_SIGSEGV) -+ bad_area(regs, error_code, address); - else - BUG(); - } -diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c -index 59dbd46..163c787 100644 ---- a/arch/sparc/mm/fault_32.c -+++ b/arch/sparc/mm/fault_32.c -@@ -252,6 +252,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c -index 45a413e..0d6de79 100644 ---- a/arch/sparc/mm/fault_64.c -+++ b/arch/sparc/mm/fault_64.c -@@ -448,6 +448,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c -index 6c05712..c6d2a76 100644 ---- a/arch/tile/mm/fault.c -+++ b/arch/tile/mm/fault.c -@@ -444,6 +444,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c -index 974b874..53b8320 100644 ---- a/arch/um/kernel/trap.c -+++ b/arch/um/kernel/trap.c -@@ -80,6 +80,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) { - goto out_of_memory; -+ } else if (fault & VM_FAULT_SIGSEGV) { -+ goto out; - } else if (fault & VM_FAULT_SIGBUS) { - err = -EACCES; - goto out; -diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c -index 09651d4..cf1eeea 100644 ---- a/arch/x86/kvm/emulate.c -+++ b/arch/x86/kvm/emulate.c -@@ -2258,7 +2258,7 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt) - * Not recognized on AMD in compat mode (but is recognized in legacy - * mode). - */ -- if ((ctxt->mode == X86EMUL_MODE_PROT32) && (efer & EFER_LMA) -+ if ((ctxt->mode != X86EMUL_MODE_PROT64) && (efer & EFER_LMA) - && !vendor_intel(ctxt)) - return emulate_ud(ctxt); - -@@ -2271,25 +2271,13 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt) - setup_syscalls_segments(ctxt, &cs, &ss); - - ops->get_msr(ctxt, MSR_IA32_SYSENTER_CS, &msr_data); -- switch (ctxt->mode) { -- case X86EMUL_MODE_PROT32: -- if ((msr_data & 0xfffc) == 0x0) -- return emulate_gp(ctxt, 0); -- break; -- case X86EMUL_MODE_PROT64: -- if (msr_data == 0x0) -- return emulate_gp(ctxt, 0); -- break; -- default: -- break; -- } -+ if ((msr_data & 0xfffc) == 0x0) -+ return emulate_gp(ctxt, 0); - - ctxt->eflags &= ~(EFLG_VM | EFLG_IF | EFLG_RF); -- cs_sel = (u16)msr_data; -- cs_sel &= ~SELECTOR_RPL_MASK; -+ cs_sel = (u16)msr_data & ~SELECTOR_RPL_MASK; - ss_sel = cs_sel + 8; -- ss_sel &= ~SELECTOR_RPL_MASK; -- if (ctxt->mode == X86EMUL_MODE_PROT64 || (efer & EFER_LMA)) { -+ if (efer & EFER_LMA) { - cs.d = 0; - cs.l = 1; - } -@@ -2298,10 +2286,11 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt) - ops->set_segment(ctxt, ss_sel, &ss, 0, VCPU_SREG_SS); - - ops->get_msr(ctxt, MSR_IA32_SYSENTER_EIP, &msr_data); -- ctxt->_eip = msr_data; -+ ctxt->_eip = (efer & EFER_LMA) ? msr_data : (u32)msr_data; - - ops->get_msr(ctxt, MSR_IA32_SYSENTER_ESP, &msr_data); -- *reg_write(ctxt, VCPU_REGS_RSP) = msr_data; -+ *reg_write(ctxt, VCPU_REGS_RSP) = (efer & EFER_LMA) ? msr_data : -+ (u32)msr_data; - - return X86EMUL_CONTINUE; - } -diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c -index a10c8c7..ebc551c 100644 ---- a/arch/x86/mm/fault.c -+++ b/arch/x86/mm/fault.c -@@ -833,11 +833,8 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, - unsigned int fault) - { - struct task_struct *tsk = current; -- struct mm_struct *mm = tsk->mm; - int code = BUS_ADRERR; - -- up_read(&mm->mmap_sem); -- - /* Kernel mode? Handle exceptions or die: */ - if (!(error_code & PF_USER)) { - no_context(regs, error_code, address, SIGBUS, BUS_ADRERR); -@@ -868,7 +865,6 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, - unsigned long address, unsigned int fault) - { - if (fatal_signal_pending(current) && !(error_code & PF_USER)) { -- up_read(¤t->mm->mmap_sem); - no_context(regs, error_code, address, 0, 0); - return; - } -@@ -876,14 +872,11 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, - if (fault & VM_FAULT_OOM) { - /* Kernel mode? Handle exceptions or die: */ - if (!(error_code & PF_USER)) { -- up_read(¤t->mm->mmap_sem); - no_context(regs, error_code, address, - SIGSEGV, SEGV_MAPERR); - return; - } - -- up_read(¤t->mm->mmap_sem); -- - /* - * We ran out of memory, call the OOM killer, and return the - * userspace (which will retry the fault, or kill us if we got -@@ -894,6 +887,8 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code, - if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON| - VM_FAULT_HWPOISON_LARGE)) - do_sigbus(regs, error_code, address, fault); -+ else if (fault & VM_FAULT_SIGSEGV) -+ bad_area_nosemaphore(regs, error_code, address); - else - BUG(); - } -@@ -1216,6 +1211,7 @@ good_area: - return; - - if (unlikely(fault & VM_FAULT_ERROR)) { -+ up_read(&mm->mmap_sem); - mm_fault_error(regs, error_code, address, fault); - return; - } -diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c -index b57c4f9..9e3571a 100644 ---- a/arch/xtensa/mm/fault.c -+++ b/arch/xtensa/mm/fault.c -@@ -117,6 +117,8 @@ good_area: - if (unlikely(fault & VM_FAULT_ERROR)) { - if (fault & VM_FAULT_OOM) - goto out_of_memory; -+ else if (fault & VM_FAULT_SIGSEGV) -+ goto bad_area; - else if (fault & VM_FAULT_SIGBUS) - goto do_sigbus; - BUG(); -diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c -index f667e37..5afe556 100644 ---- a/drivers/bluetooth/ath3k.c -+++ b/drivers/bluetooth/ath3k.c -@@ -62,51 +62,59 @@ static const struct usb_device_id ath3k_table[] = { - { USB_DEVICE(0x0CF3, 0x3000) }, - - /* Atheros AR3011 with sflash firmware*/ -+ { USB_DEVICE(0x0489, 0xE027) }, -+ { USB_DEVICE(0x0489, 0xE03D) }, -+ { USB_DEVICE(0x0930, 0x0215) }, - { USB_DEVICE(0x0CF3, 0x3002) }, - { USB_DEVICE(0x0CF3, 0xE019) }, - { USB_DEVICE(0x13d3, 0x3304) }, -- { USB_DEVICE(0x0930, 0x0215) }, -- { USB_DEVICE(0x0489, 0xE03D) }, -- { USB_DEVICE(0x0489, 0xE027) }, - - /* Atheros AR9285 Malbec with sflash firmware */ - { USB_DEVICE(0x03F0, 0x311D) }, - - /* Atheros AR3012 with sflash firmware*/ -- { USB_DEVICE(0x0CF3, 0x0036) }, -- { USB_DEVICE(0x0CF3, 0x3004) }, -- { USB_DEVICE(0x0CF3, 0x3008) }, -- { USB_DEVICE(0x0CF3, 0x311D) }, -- { USB_DEVICE(0x0CF3, 0x817a) }, -- { USB_DEVICE(0x13d3, 0x3375) }, -+ { USB_DEVICE(0x0489, 0xe04d) }, -+ { USB_DEVICE(0x0489, 0xe04e) }, -+ { USB_DEVICE(0x0489, 0xe057) }, -+ { USB_DEVICE(0x0489, 0xe056) }, -+ { USB_DEVICE(0x0489, 0xe05f) }, -+ { USB_DEVICE(0x0489, 0xe078) }, -+ { USB_DEVICE(0x04c5, 0x1330) }, - { USB_DEVICE(0x04CA, 0x3004) }, - { USB_DEVICE(0x04CA, 0x3005) }, - { USB_DEVICE(0x04CA, 0x3006) }, - { USB_DEVICE(0x04CA, 0x3007) }, - { USB_DEVICE(0x04CA, 0x3008) }, - { USB_DEVICE(0x04CA, 0x300b) }, -- { USB_DEVICE(0x13d3, 0x3362) }, -- { USB_DEVICE(0x0CF3, 0xE004) }, -- { USB_DEVICE(0x0CF3, 0xE005) }, -+ { USB_DEVICE(0x04CA, 0x3010) }, - { USB_DEVICE(0x0930, 0x0219) }, - { USB_DEVICE(0x0930, 0x0220) }, -- { USB_DEVICE(0x0489, 0xe057) }, -- { USB_DEVICE(0x13d3, 0x3393) }, -- { USB_DEVICE(0x0489, 0xe04e) }, -- { USB_DEVICE(0x0489, 0xe056) }, -- { USB_DEVICE(0x0489, 0xe04d) }, -- { USB_DEVICE(0x04c5, 0x1330) }, -- { USB_DEVICE(0x13d3, 0x3402) }, -+ { USB_DEVICE(0x0930, 0x0227) }, -+ { USB_DEVICE(0x0b05, 0x17d0) }, -+ { USB_DEVICE(0x0CF3, 0x0036) }, -+ { USB_DEVICE(0x0CF3, 0x3004) }, -+ { USB_DEVICE(0x0CF3, 0x3008) }, -+ { USB_DEVICE(0x0CF3, 0x311D) }, -+ { USB_DEVICE(0x0CF3, 0x311E) }, -+ { USB_DEVICE(0x0CF3, 0x311F) }, - { USB_DEVICE(0x0cf3, 0x3121) }, -+ { USB_DEVICE(0x0CF3, 0x817a) }, - { USB_DEVICE(0x0cf3, 0xe003) }, -- { USB_DEVICE(0x0489, 0xe05f) }, -+ { USB_DEVICE(0x0CF3, 0xE004) }, -+ { USB_DEVICE(0x0CF3, 0xE005) }, -+ { USB_DEVICE(0x13d3, 0x3362) }, -+ { USB_DEVICE(0x13d3, 0x3375) }, -+ { USB_DEVICE(0x13d3, 0x3393) }, -+ { USB_DEVICE(0x13d3, 0x3402) }, -+ { USB_DEVICE(0x13d3, 0x3408) }, -+ { USB_DEVICE(0x13d3, 0x3432) }, - - /* Atheros AR5BBU12 with sflash firmware */ - { USB_DEVICE(0x0489, 0xE02C) }, - - /* Atheros AR5BBU22 with sflash firmware */ -- { USB_DEVICE(0x0489, 0xE03C) }, - { USB_DEVICE(0x0489, 0xE036) }, -+ { USB_DEVICE(0x0489, 0xE03C) }, - - { } /* Terminating entry */ - }; -@@ -119,37 +127,45 @@ MODULE_DEVICE_TABLE(usb, ath3k_table); - static const struct usb_device_id ath3k_blist_tbl[] = { - - /* Atheros AR3012 with sflash firmware*/ -- { USB_DEVICE(0x0CF3, 0x0036), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0CF3, 0x817a), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0CF3, 0x0036), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x311E), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x311F), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0CF3, 0x817a), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 }, - - /* Atheros AR5BBU22 with sflash firmware */ -- { USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0489, 0xE036), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 }, - - { } /* Terminating entry */ - }; -diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c -index e00c3f8..03b3317 100644 ---- a/drivers/bluetooth/btusb.c -+++ b/drivers/bluetooth/btusb.c -@@ -49,6 +49,7 @@ static struct usb_driver btusb_driver; - #define BTUSB_WRONG_SCO_MTU 0x40 - #define BTUSB_ATH3012 0x80 - #define BTUSB_INTEL 0x100 -+#define BTUSB_INTEL_BOOT 0x200 - - static const struct usb_device_id btusb_table[] = { - /* Generic Bluetooth USB device */ -@@ -101,21 +102,31 @@ static const struct usb_device_id btusb_table[] = { - { USB_DEVICE(0x0c10, 0x0000) }, - - /* Broadcom BCM20702A0 */ -+ { USB_DEVICE(0x0489, 0xe042) }, -+ { USB_DEVICE(0x04ca, 0x2003) }, - { USB_DEVICE(0x0b05, 0x17b5) }, - { USB_DEVICE(0x0b05, 0x17cb) }, -- { USB_DEVICE(0x04ca, 0x2003) }, -- { USB_DEVICE(0x0489, 0xe042) }, - { USB_DEVICE(0x413c, 0x8197) }, - - /* Foxconn - Hon Hai */ - { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01) }, - -- /*Broadcom devices with vendor specific id */ -+ /* Broadcom devices with vendor specific id */ - { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) }, - -+ /* ASUSTek Computer - Broadcom based */ -+ { USB_VENDOR_AND_INTERFACE_INFO(0x0b05, 0xff, 0x01, 0x01) }, -+ - /* Belkin F8065bf - Broadcom based */ - { USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01) }, - -+ /* IMC Networks - Broadcom based */ -+ { USB_VENDOR_AND_INTERFACE_INFO(0x13d3, 0xff, 0x01, 0x01) }, -+ -+ /* Intel Bluetooth USB Bootloader (RAM module) */ -+ { USB_DEVICE(0x8087, 0x0a5a), -+ .driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC }, -+ - { } /* Terminating entry */ - }; - -@@ -129,56 +140,64 @@ static const struct usb_device_id blacklist_table[] = { - { USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE }, - - /* Atheros 3011 with sflash firmware */ -+ { USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE }, -+ { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE }, -+ { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE }, - { USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE }, - { USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE }, - { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE }, -- { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE }, -- { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE }, -- { USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE }, - - /* Atheros AR9285 Malbec with sflash firmware */ - { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, - - /* Atheros 3012 with sflash firmware */ -- { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0x817a), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x311f), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0x817a), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 }, -- { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 }, - - /* Atheros AR5BBU12 with sflash firmware */ - { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, - - /* Atheros AR5BBU12 with sflash firmware */ -- { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 }, - { USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 }, -+ { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 }, - - /* Broadcom BCM2035 */ -- { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, -- { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, - { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 }, -+ { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, -+ { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU }, - - /* Broadcom BCM2045 */ - { USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU }, -@@ -1491,6 +1510,9 @@ static int btusb_probe(struct usb_interface *intf, - if (id->driver_info & BTUSB_INTEL) - hdev->setup = btusb_setup_intel; - -+ if (id->driver_info & BTUSB_INTEL_BOOT) -+ set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks); -+ - /* Interface numbers are hardcoded in the specification */ - data->isoc = usb_ifnum_to_if(data->udev, 1); - -diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c -index 54e2abe..c611bcc 100644 ---- a/drivers/edac/sb_edac.c -+++ b/drivers/edac/sb_edac.c -@@ -285,8 +285,9 @@ static const u32 correrrthrsld[] = { - * sbridge structs - */ - --#define NUM_CHANNELS 4 --#define MAX_DIMMS 3 /* Max DIMMS per channel */ -+#define NUM_CHANNELS 4 -+#define MAX_DIMMS 3 /* Max DIMMS per channel */ -+#define CHANNEL_UNSPECIFIED 0xf /* Intel IA32 SDM 15-14 */ - - enum type { - SANDY_BRIDGE, -@@ -1750,6 +1751,9 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci, - - /* FIXME: need support for channel mask */ - -+ if (channel == CHANNEL_UNSPECIFIED) -+ channel = -1; -+ - /* Call the helper to output message */ - edac_mc_handle_error(tp_event, mci, core_err_cnt, - m->addr >> PAGE_SHIFT, m->addr & ~PAGE_MASK, 0, -diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c -index dcde5605..3177498 100644 ---- a/drivers/net/bonding/bond_3ad.c -+++ b/drivers/net/bonding/bond_3ad.c -@@ -2479,7 +2479,7 @@ out: - return NETDEV_TX_OK; - err_free: - /* no suitable interface, frame not sent */ -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - goto out; - } - -diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c -index e8f133e..c67bbc9 100644 ---- a/drivers/net/bonding/bond_alb.c -+++ b/drivers/net/bonding/bond_alb.c -@@ -1479,7 +1479,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev) - } - - /* no suitable interface, frame not sent */ -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - out: - return NETDEV_TX_OK; - } -diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c -index 1537982..32b0e705 100644 ---- a/drivers/net/bonding/bond_main.c -+++ b/drivers/net/bonding/bond_main.c -@@ -3568,7 +3568,7 @@ static void bond_xmit_slave_id(struct bonding *bond, struct sk_buff *skb, int sl - } - } - /* no slave that can tx has been found */ -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - } - - /** -@@ -3650,7 +3650,7 @@ static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *bond_d - if (slave) - bond_dev_queue_xmit(bond, skb, slave->dev); - else -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - - return NETDEV_TX_OK; - } -@@ -3698,7 +3698,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev) - if (slave && IS_UP(slave->dev) && slave->link == BOND_LINK_UP) - bond_dev_queue_xmit(bond, skb, slave->dev); - else -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - - return NETDEV_TX_OK; - } -@@ -3785,7 +3785,7 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev - pr_err("%s: Error: Unknown bonding mode %d\n", - dev->name, bond->params.mode); - WARN_ON_ONCE(1); -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - } -@@ -3806,7 +3806,7 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev) - if (bond_has_slaves(bond)) - ret = __bond_start_xmit(skb, dev); - else -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - rcu_read_unlock(); - - return ret; -diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c -index 6c9e1c9..0c8a168 100644 ---- a/drivers/net/ethernet/broadcom/bnx2.c -+++ b/drivers/net/ethernet/broadcom/bnx2.c -@@ -2886,7 +2886,7 @@ bnx2_tx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget) - sw_cons = BNX2_NEXT_TX_BD(sw_cons); - - tx_bytes += skb->len; -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - tx_pkt++; - if (tx_pkt == budget) - break; -@@ -6640,7 +6640,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) - - mapping = dma_map_single(&bp->pdev->dev, skb->data, len, PCI_DMA_TODEVICE); - if (dma_mapping_error(&bp->pdev->dev, mapping)) { -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - -@@ -6733,7 +6733,7 @@ dma_error: - PCI_DMA_TODEVICE); - } - -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - -diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c -index 8206113..bc65dc8 100644 ---- a/drivers/net/ethernet/broadcom/tg3.c -+++ b/drivers/net/ethernet/broadcom/tg3.c -@@ -6593,7 +6593,7 @@ static void tg3_tx(struct tg3_napi *tnapi) - pkts_compl++; - bytes_compl += skb->len; - -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - - if (unlikely(tx_bug)) { - tg3_tx_recover(tp); -@@ -6925,7 +6925,7 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget) - if (len > (tp->dev->mtu + ETH_HLEN) && - skb->protocol != htons(ETH_P_8021Q) && - skb->protocol != htons(ETH_P_8021AD)) { -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - goto drop_it_no_recycle; - } - -@@ -7808,7 +7808,7 @@ static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, - PCI_DMA_TODEVICE); - /* Make sure the mapping succeeded */ - if (pci_dma_mapping_error(tp->pdev, new_addr)) { -- dev_kfree_skb(new_skb); -+ dev_kfree_skb_any(new_skb); - ret = -1; - } else { - u32 save_entry = *entry; -@@ -7823,13 +7823,13 @@ static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, - new_skb->len, base_flags, - mss, vlan)) { - tg3_tx_skb_unmap(tnapi, save_entry, -1); -- dev_kfree_skb(new_skb); -+ dev_kfree_skb_any(new_skb); - ret = -1; - } - } - } - -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - *pskb = new_skb; - return ret; - } -@@ -7872,7 +7872,7 @@ static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb) - } while (segs); - - tg3_tso_bug_end: -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - - return NETDEV_TX_OK; - } -@@ -8110,7 +8110,7 @@ dma_error: - tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); - tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; - drop: -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - drop_nofree: - tp->tx_dropped++; - return NETDEV_TX_OK; -diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c -index 80bfa03..075e7e7 100644 ---- a/drivers/net/ethernet/emulex/benet/be_main.c -+++ b/drivers/net/ethernet/emulex/benet/be_main.c -@@ -1883,7 +1883,7 @@ static u16 be_tx_compl_process(struct be_adapter *adapter, - queue_tail_inc(txq); - } while (cur_index != last_index); - -- kfree_skb(sent_skb); -+ dev_kfree_skb_any(sent_skb); - return num_wrbs; - } - -diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c -index ad5a5aa..70eb4d2 100644 ---- a/drivers/net/ethernet/freescale/gianfar.c -+++ b/drivers/net/ethernet/freescale/gianfar.c -@@ -2152,13 +2152,13 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) - skb_new = skb_realloc_headroom(skb, fcb_len); - if (!skb_new) { - dev->stats.tx_errors++; -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - - if (skb->sk) - skb_set_owner_w(skb_new, skb->sk); -- consume_skb(skb); -+ dev_consume_skb_any(skb); - skb = skb_new; - } - -diff --git a/drivers/net/ethernet/intel/ixgb/ixgb_main.c b/drivers/net/ethernet/intel/ixgb/ixgb_main.c -index 57e390c..f42c201 100644 ---- a/drivers/net/ethernet/intel/ixgb/ixgb_main.c -+++ b/drivers/net/ethernet/intel/ixgb/ixgb_main.c -@@ -1521,12 +1521,12 @@ ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev) - int tso; - - if (test_bit(__IXGB_DOWN, &adapter->flags)) { -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - - if (skb->len <= 0) { -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - -@@ -1543,7 +1543,7 @@ ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev) - - tso = ixgb_tso(adapter, skb); - if (tso < 0) { -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - -diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c -index 2f83f34..8be0f3e 100644 ---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c -+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c -@@ -2497,13 +2497,6 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, - netif_carrier_off(dev); - mlx4_en_set_default_moderation(priv); - -- err = register_netdev(dev); -- if (err) { -- en_err(priv, "Netdev registration failed for port %d\n", port); -- goto out; -- } -- priv->registered = 1; -- - en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num); - en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num); - -@@ -2543,6 +2536,14 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, - queue_delayed_work(mdev->workqueue, &priv->service_task, - SERVICE_TASK_DELAY); - -+ err = register_netdev(dev); -+ if (err) { -+ en_err(priv, "Netdev registration failed for port %d\n", port); -+ goto out; -+ } -+ -+ priv->registered = 1; -+ - return 0; - - out: -diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c -index 1345703..019a04a 100644 ---- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c -+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c -@@ -325,7 +325,7 @@ static u32 mlx4_en_free_tx_desc(struct mlx4_en_priv *priv, - } - } - } -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - return tx_info->nr_txbb; - } - -diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c -index 737c1a8..a3c1daa 100644 ---- a/drivers/net/ethernet/realtek/8139cp.c -+++ b/drivers/net/ethernet/realtek/8139cp.c -@@ -899,7 +899,7 @@ out_unlock: - - return NETDEV_TX_OK; - out_dma_error: -- kfree_skb(skb); -+ dev_kfree_skb_any(skb); - cp->dev->stats.tx_dropped++; - goto out_unlock; - } -diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c -index da5972e..8cb2f35 100644 ---- a/drivers/net/ethernet/realtek/8139too.c -+++ b/drivers/net/ethernet/realtek/8139too.c -@@ -1717,9 +1717,9 @@ static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb, - if (len < ETH_ZLEN) - memset(tp->tx_buf[entry], 0, ETH_ZLEN); - skb_copy_and_csum_dev(skb, tp->tx_buf[entry]); -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - } else { -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - dev->stats.tx_dropped++; - return NETDEV_TX_OK; - } -diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c -index 3ff7bc3..90c14d1 100644 ---- a/drivers/net/ethernet/realtek/r8169.c -+++ b/drivers/net/ethernet/realtek/r8169.c -@@ -5834,7 +5834,7 @@ static void rtl8169_tx_clear_range(struct rtl8169_private *tp, u32 start, - tp->TxDescArray + entry); - if (skb) { - tp->dev->stats.tx_dropped++; -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - tx_skb->skb = NULL; - } - } -@@ -6059,7 +6059,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, - err_dma_1: - rtl8169_unmap_tx_skb(d, tp->tx_skb + entry, txd); - err_dma_0: -- dev_kfree_skb(skb); -+ dev_kfree_skb_any(skb); - err_update_stats: - dev->stats.tx_dropped++; - return NETDEV_TX_OK; -@@ -6142,7 +6142,7 @@ static void rtl_tx(struct net_device *dev, struct rtl8169_private *tp) - tp->tx_stats.packets++; - tp->tx_stats.bytes += tx_skb->skb->len; - u64_stats_update_end(&tp->tx_stats.syncp); -- dev_kfree_skb(tx_skb->skb); -+ dev_kfree_skb_any(tx_skb->skb); - tx_skb->skb = NULL; - } - dirty_tx++; -diff --git a/drivers/staging/lustre/lustre/llite/dcache.c b/drivers/staging/lustre/lustre/llite/dcache.c -index cbd663e..19405ed 100644 ---- a/drivers/staging/lustre/lustre/llite/dcache.c -+++ b/drivers/staging/lustre/lustre/llite/dcache.c -@@ -278,7 +278,7 @@ void ll_invalidate_aliases(struct inode *inode) - inode->i_ino, inode->i_generation, inode); - - ll_lock_dcache(inode); -- ll_d_hlist_for_each_entry(dentry, p, &inode->i_dentry, d_alias) { -+ ll_d_hlist_for_each_entry(dentry, p, &inode->i_dentry, d_u.d_alias) { - CDEBUG(D_DENTRY, "dentry in drop %.*s (%p) parent %p " - "inode %p flags %d\n", dentry->d_name.len, - dentry->d_name.name, dentry, dentry->d_parent, -diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c -index 6cfdb9e..5ae562e 100644 ---- a/drivers/staging/lustre/lustre/llite/llite_lib.c -+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c -@@ -678,7 +678,7 @@ void lustre_dump_dentry(struct dentry *dentry, int recur) - return; - - list_for_each(tmp, &dentry->d_subdirs) { -- struct dentry *d = list_entry(tmp, struct dentry, d_u.d_child); -+ struct dentry *d = list_entry(tmp, struct dentry, d_child); - lustre_dump_dentry(d, recur - 1); - } - } -diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c -index fc8d264..8e9a9e9 100644 ---- a/drivers/staging/lustre/lustre/llite/namei.c -+++ b/drivers/staging/lustre/lustre/llite/namei.c -@@ -175,14 +175,14 @@ static void ll_invalidate_negative_children(struct inode *dir) - struct ll_d_hlist_node *p; - - ll_lock_dcache(dir); -- ll_d_hlist_for_each_entry(dentry, p, &dir->i_dentry, d_alias) { -+ ll_d_hlist_for_each_entry(dentry, p, &dir->i_dentry, d_u.d_alias) { - spin_lock(&dentry->d_lock); - if (!list_empty(&dentry->d_subdirs)) { - struct dentry *child; - - list_for_each_entry_safe(child, tmp_subdir, - &dentry->d_subdirs, -- d_u.d_child) { -+ d_child) { - if (child->d_inode == NULL) - d_lustre_invalidate(child, 1); - } -@@ -364,7 +364,7 @@ static struct dentry *ll_find_alias(struct inode *inode, struct dentry *dentry) - discon_alias = invalid_alias = NULL; - - ll_lock_dcache(inode); -- ll_d_hlist_for_each_entry(alias, p, &inode->i_dentry, d_alias) { -+ ll_d_hlist_for_each_entry(alias, p, &inode->i_dentry, d_u.d_alias) { - LASSERT(alias != dentry); - - spin_lock(&alias->d_lock); -@@ -953,7 +953,7 @@ static void ll_get_child_fid(struct inode * dir, struct qstr *name, - { - struct dentry *parent, *child; - -- parent = ll_d_hlist_entry(dir->i_dentry, struct dentry, d_alias); -+ parent = ll_d_hlist_entry(dir->i_dentry, struct dentry, d_u.d_alias); - child = d_lookup(parent, name); - if (child) { - if (child->d_inode) -diff --git a/drivers/staging/lustre/lustre/llite/vvp_io.c b/drivers/staging/lustre/lustre/llite/vvp_io.c -index 93cbfbb..6096771 100644 ---- a/drivers/staging/lustre/lustre/llite/vvp_io.c -+++ b/drivers/staging/lustre/lustre/llite/vvp_io.c -@@ -642,7 +642,7 @@ static int vvp_io_kernel_fault(struct vvp_fault_io *cfio) - return 0; - } - -- if (cfio->fault.ft_flags & VM_FAULT_SIGBUS) { -+ if (cfio->fault.ft_flags & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV)) { - CDEBUG(D_PAGE, "got addr %p - SIGBUS\n", vmf->virtual_address); - return -EFAULT; - } -diff --git a/fs/affs/amigaffs.c b/fs/affs/amigaffs.c -index d9a4367..9cca0ea 100644 ---- a/fs/affs/amigaffs.c -+++ b/fs/affs/amigaffs.c -@@ -126,7 +126,7 @@ affs_fix_dcache(struct inode *inode, u32 entry_ino) - { - struct dentry *dentry; - spin_lock(&inode->i_lock); -- hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) { - if (entry_ino == (u32)(long)dentry->d_fsdata) { - dentry->d_fsdata = (void *)inode->i_ino; - break; -diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c -index 394e90b..edb46e6 100644 ---- a/fs/autofs4/expire.c -+++ b/fs/autofs4/expire.c -@@ -91,7 +91,7 @@ static struct dentry *get_next_positive_subdir(struct dentry *prev, - spin_lock(&root->d_lock); - - if (prev) -- next = prev->d_u.d_child.next; -+ next = prev->d_child.next; - else { - prev = dget_dlock(root); - next = prev->d_subdirs.next; -@@ -105,13 +105,13 @@ cont: - return NULL; - } - -- q = list_entry(next, struct dentry, d_u.d_child); -+ q = list_entry(next, struct dentry, d_child); - - spin_lock_nested(&q->d_lock, DENTRY_D_LOCK_NESTED); - /* Already gone or negative dentry (under construction) - try next */ - if (!d_count(q) || !simple_positive(q)) { - spin_unlock(&q->d_lock); -- next = q->d_u.d_child.next; -+ next = q->d_child.next; - goto cont; - } - dget_dlock(q); -@@ -161,13 +161,13 @@ again: - goto relock; - } - spin_unlock(&p->d_lock); -- next = p->d_u.d_child.next; -+ next = p->d_child.next; - p = parent; - if (next != &parent->d_subdirs) - break; - } - } -- ret = list_entry(next, struct dentry, d_u.d_child); -+ ret = list_entry(next, struct dentry, d_child); - - spin_lock_nested(&ret->d_lock, DENTRY_D_LOCK_NESTED); - /* Negative dentry - try next */ -@@ -461,7 +461,7 @@ found: - spin_lock(&sbi->lookup_lock); - spin_lock(&expired->d_parent->d_lock); - spin_lock_nested(&expired->d_lock, DENTRY_D_LOCK_NESTED); -- list_move(&expired->d_parent->d_subdirs, &expired->d_u.d_child); -+ list_move(&expired->d_parent->d_subdirs, &expired->d_child); - spin_unlock(&expired->d_lock); - spin_unlock(&expired->d_parent->d_lock); - spin_unlock(&sbi->lookup_lock); -diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c -index cc87c1a..9e016e6 100644 ---- a/fs/autofs4/root.c -+++ b/fs/autofs4/root.c -@@ -655,7 +655,7 @@ static void autofs_clear_leaf_automount_flags(struct dentry *dentry) - /* only consider parents below dentrys in the root */ - if (IS_ROOT(parent->d_parent)) - return; -- d_child = &dentry->d_u.d_child; -+ d_child = &dentry->d_child; - /* Set parent managed if it's becoming empty */ - if (d_child->next == &parent->d_subdirs && - d_child->prev == &parent->d_subdirs) -diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c -index 5e0982a..18e14cf 100644 ---- a/fs/ceph/dir.c -+++ b/fs/ceph/dir.c -@@ -111,7 +111,7 @@ static int fpos_cmp(loff_t l, loff_t r) - /* - * When possible, we try to satisfy a readdir by peeking at the - * dcache. We make this work by carefully ordering dentries on -- * d_u.d_child when we initially get results back from the MDS, and -+ * d_child when we initially get results back from the MDS, and - * falling back to a "normal" sync readdir if any dentries in the dir - * are dropped. - * -@@ -146,11 +146,11 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx) - p = parent->d_subdirs.prev; - dout(" initial p %p/%p\n", p->prev, p->next); - } else { -- p = last->d_u.d_child.prev; -+ p = last->d_child.prev; - } - - more: -- dentry = list_entry(p, struct dentry, d_u.d_child); -+ dentry = list_entry(p, struct dentry, d_child); - di = ceph_dentry(dentry); - while (1) { - dout(" p %p/%p %s d_subdirs %p/%p\n", p->prev, p->next, -@@ -172,7 +172,7 @@ more: - !dentry->d_inode ? " null" : ""); - spin_unlock(&dentry->d_lock); - p = p->prev; -- dentry = list_entry(p, struct dentry, d_u.d_child); -+ dentry = list_entry(p, struct dentry, d_child); - di = ceph_dentry(dentry); - } - -diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c -index 6471f9c..ee24490 100644 ---- a/fs/ceph/inode.c -+++ b/fs/ceph/inode.c -@@ -1289,7 +1289,7 @@ retry_lookup: - /* reorder parent's d_subdirs */ - spin_lock(&parent->d_lock); - spin_lock_nested(&dn->d_lock, DENTRY_D_LOCK_NESTED); -- list_move(&dn->d_u.d_child, &parent->d_subdirs); -+ list_move(&dn->d_child, &parent->d_subdirs); - spin_unlock(&dn->d_lock); - spin_unlock(&parent->d_lock); - } -diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c -index f2ddcf7..7ee427e 100644 ---- a/fs/cifs/inode.c -+++ b/fs/cifs/inode.c -@@ -883,7 +883,7 @@ inode_has_hashed_dentries(struct inode *inode) - struct dentry *dentry; - - spin_lock(&inode->i_lock); -- hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) { - if (!d_unhashed(dentry) || IS_ROOT(dentry)) { - spin_unlock(&inode->i_lock); - return true; -diff --git a/fs/coda/cache.c b/fs/coda/cache.c -index 1da168c..9bc1147 100644 ---- a/fs/coda/cache.c -+++ b/fs/coda/cache.c -@@ -92,7 +92,7 @@ static void coda_flag_children(struct dentry *parent, int flag) - struct dentry *de; - - spin_lock(&parent->d_lock); -- list_for_each_entry(de, &parent->d_subdirs, d_u.d_child) { -+ list_for_each_entry(de, &parent->d_subdirs, d_child) { - /* don't know what to do with negative dentries */ - if (de->d_inode ) - coda_flag_inode(de->d_inode, flag); -diff --git a/fs/dcache.c b/fs/dcache.c -index 4366127..c345f5f 100644 ---- a/fs/dcache.c -+++ b/fs/dcache.c -@@ -44,7 +44,7 @@ - /* - * Usage: - * dcache->d_inode->i_lock protects: -- * - i_dentry, d_alias, d_inode of aliases -+ * - i_dentry, d_u.d_alias, d_inode of aliases - * dcache_hash_bucket lock protects: - * - the dcache hash table - * s_anon bl list spinlock protects: -@@ -59,7 +59,7 @@ - * - d_unhashed() - * - d_parent and d_subdirs - * - childrens' d_child and d_parent -- * - d_alias, d_inode -+ * - d_u.d_alias, d_inode - * - * Ordering: - * dentry->d_inode->i_lock -@@ -239,7 +239,6 @@ static void __d_free(struct rcu_head *head) - { - struct dentry *dentry = container_of(head, struct dentry, d_u.d_rcu); - -- WARN_ON(!hlist_unhashed(&dentry->d_alias)); - if (dname_external(dentry)) - kfree(dentry->d_name.name); - kmem_cache_free(dentry_cache, dentry); -@@ -250,6 +249,7 @@ static void __d_free(struct rcu_head *head) - */ - static void d_free(struct dentry *dentry) - { -+ WARN_ON(!hlist_unhashed(&dentry->d_u.d_alias)); - BUG_ON((int)dentry->d_lockref.count > 0); - this_cpu_dec(nr_dentry); - if (dentry->d_op && dentry->d_op->d_release) -@@ -288,7 +288,7 @@ static void dentry_iput(struct dentry * dentry) - struct inode *inode = dentry->d_inode; - if (inode) { - dentry->d_inode = NULL; -- hlist_del_init(&dentry->d_alias); -+ hlist_del_init(&dentry->d_u.d_alias); - spin_unlock(&dentry->d_lock); - spin_unlock(&inode->i_lock); - if (!inode->i_nlink) -@@ -313,7 +313,7 @@ static void dentry_unlink_inode(struct dentry * dentry) - struct inode *inode = dentry->d_inode; - __d_clear_type(dentry); - dentry->d_inode = NULL; -- hlist_del_init(&dentry->d_alias); -+ hlist_del_init(&dentry->d_u.d_alias); - dentry_rcuwalk_barrier(dentry); - spin_unlock(&dentry->d_lock); - spin_unlock(&inode->i_lock); -@@ -435,7 +435,7 @@ static struct dentry *d_kill(struct dentry *dentry, struct dentry *parent) - __releases(parent->d_lock) - __releases(dentry->d_inode->i_lock) - { -- list_del(&dentry->d_u.d_child); -+ list_del(&dentry->d_child); - /* - * Inform d_walk() that we are no longer attached to the - * dentry tree -@@ -737,7 +737,7 @@ static struct dentry *__d_find_alias(struct inode *inode, int want_discon) - - again: - discon_alias = NULL; -- hlist_for_each_entry(alias, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) { - spin_lock(&alias->d_lock); - if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) { - if (IS_ROOT(alias) && -@@ -790,7 +790,7 @@ void d_prune_aliases(struct inode *inode) - struct dentry *dentry; - restart: - spin_lock(&inode->i_lock); -- hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) { - spin_lock(&dentry->d_lock); - if (!dentry->d_lockref.count) { - /* -@@ -1091,7 +1091,7 @@ repeat: - resume: - while (next != &this_parent->d_subdirs) { - struct list_head *tmp = next; -- struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); -+ struct dentry *dentry = list_entry(tmp, struct dentry, d_child); - next = tmp->next; - - spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); -@@ -1143,7 +1143,7 @@ resume: - goto rename_retry; - } - rcu_read_unlock(); -- next = child->d_u.d_child.next; -+ next = child->d_child.next; - goto resume; - } - if (need_seqretry(&rename_lock, seq)) { -@@ -1524,8 +1524,8 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name) - INIT_HLIST_BL_NODE(&dentry->d_hash); - INIT_LIST_HEAD(&dentry->d_lru); - INIT_LIST_HEAD(&dentry->d_subdirs); -- INIT_HLIST_NODE(&dentry->d_alias); -- INIT_LIST_HEAD(&dentry->d_u.d_child); -+ INIT_HLIST_NODE(&dentry->d_u.d_alias); -+ INIT_LIST_HEAD(&dentry->d_child); - d_set_d_op(dentry, dentry->d_sb->s_d_op); - - this_cpu_inc(nr_dentry); -@@ -1555,7 +1555,7 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) - */ - __dget_dlock(parent); - dentry->d_parent = parent; -- list_add(&dentry->d_u.d_child, &parent->d_subdirs); -+ list_add(&dentry->d_child, &parent->d_subdirs); - spin_unlock(&parent->d_lock); - - return dentry; -@@ -1648,7 +1648,7 @@ static void __d_instantiate(struct dentry *dentry, struct inode *inode) - spin_lock(&dentry->d_lock); - __d_set_type(dentry, add_flags); - if (inode) -- hlist_add_head(&dentry->d_alias, &inode->i_dentry); -+ hlist_add_head(&dentry->d_u.d_alias, &inode->i_dentry); - dentry->d_inode = inode; - dentry_rcuwalk_barrier(dentry); - spin_unlock(&dentry->d_lock); -@@ -1672,7 +1672,7 @@ static void __d_instantiate(struct dentry *dentry, struct inode *inode) - - void d_instantiate(struct dentry *entry, struct inode * inode) - { -- BUG_ON(!hlist_unhashed(&entry->d_alias)); -+ BUG_ON(!hlist_unhashed(&entry->d_u.d_alias)); - if (inode) - spin_lock(&inode->i_lock); - __d_instantiate(entry, inode); -@@ -1711,7 +1711,7 @@ static struct dentry *__d_instantiate_unique(struct dentry *entry, - return NULL; - } - -- hlist_for_each_entry(alias, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) { - /* - * Don't need alias->d_lock here, because aliases with - * d_parent == entry->d_parent are not subject to name or -@@ -1737,7 +1737,7 @@ struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode) - { - struct dentry *result; - -- BUG_ON(!hlist_unhashed(&entry->d_alias)); -+ BUG_ON(!hlist_unhashed(&entry->d_u.d_alias)); - - if (inode) - spin_lock(&inode->i_lock); -@@ -1768,7 +1768,7 @@ EXPORT_SYMBOL(d_instantiate_unique); - */ - int d_instantiate_no_diralias(struct dentry *entry, struct inode *inode) - { -- BUG_ON(!hlist_unhashed(&entry->d_alias)); -+ BUG_ON(!hlist_unhashed(&entry->d_u.d_alias)); - - spin_lock(&inode->i_lock); - if (S_ISDIR(inode->i_mode) && !hlist_empty(&inode->i_dentry)) { -@@ -1807,7 +1807,7 @@ static struct dentry * __d_find_any_alias(struct inode *inode) - - if (hlist_empty(&inode->i_dentry)) - return NULL; -- alias = hlist_entry(inode->i_dentry.first, struct dentry, d_alias); -+ alias = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias); - __dget(alias); - return alias; - } -@@ -1884,7 +1884,7 @@ struct dentry *d_obtain_alias(struct inode *inode) - spin_lock(&tmp->d_lock); - tmp->d_inode = inode; - tmp->d_flags |= add_flags; -- hlist_add_head(&tmp->d_alias, &inode->i_dentry); -+ hlist_add_head(&tmp->d_u.d_alias, &inode->i_dentry); - hlist_bl_lock(&tmp->d_sb->s_anon); - hlist_bl_add_head(&tmp->d_hash, &tmp->d_sb->s_anon); - hlist_bl_unlock(&tmp->d_sb->s_anon); -@@ -2327,7 +2327,7 @@ int d_validate(struct dentry *dentry, struct dentry *dparent) - struct dentry *child; - - spin_lock(&dparent->d_lock); -- list_for_each_entry(child, &dparent->d_subdirs, d_u.d_child) { -+ list_for_each_entry(child, &dparent->d_subdirs, d_child) { - if (dentry == child) { - spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); - __dget_dlock(dentry); -@@ -2574,8 +2574,8 @@ static void __d_move(struct dentry * dentry, struct dentry * target) - /* Unhash the target: dput() will then get rid of it */ - __d_drop(target); - -- list_del(&dentry->d_u.d_child); -- list_del(&target->d_u.d_child); -+ list_del(&dentry->d_child); -+ list_del(&target->d_child); - - /* Switch the names.. */ - switch_names(dentry, target); -@@ -2585,15 +2585,15 @@ static void __d_move(struct dentry * dentry, struct dentry * target) - if (IS_ROOT(dentry)) { - dentry->d_parent = target->d_parent; - target->d_parent = target; -- INIT_LIST_HEAD(&target->d_u.d_child); -+ INIT_LIST_HEAD(&target->d_child); - } else { - swap(dentry->d_parent, target->d_parent); - - /* And add them back to the (new) parent lists */ -- list_add(&target->d_u.d_child, &target->d_parent->d_subdirs); -+ list_add(&target->d_child, &target->d_parent->d_subdirs); - } - -- list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs); -+ list_add(&dentry->d_child, &dentry->d_parent->d_subdirs); - - write_seqcount_end(&target->d_seq); - write_seqcount_end(&dentry->d_seq); -@@ -2700,9 +2700,9 @@ static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon) - swap(dentry->d_name.hash, anon->d_name.hash); - - dentry->d_parent = dentry; -- list_del_init(&dentry->d_u.d_child); -+ list_del_init(&dentry->d_child); - anon->d_parent = dparent; -- list_move(&anon->d_u.d_child, &dparent->d_subdirs); -+ list_move(&anon->d_child, &dparent->d_subdirs); - - write_seqcount_end(&dentry->d_seq); - write_seqcount_end(&anon->d_seq); -@@ -3333,7 +3333,7 @@ void d_tmpfile(struct dentry *dentry, struct inode *inode) - { - inode_dec_link_count(inode); - BUG_ON(dentry->d_name.name != dentry->d_iname || -- !hlist_unhashed(&dentry->d_alias) || -+ !hlist_unhashed(&dentry->d_u.d_alias) || - !d_unlinked(dentry)); - spin_lock(&dentry->d_parent->d_lock); - spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); -diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c -index 1ff8fe5..4a9f0e0 100644 ---- a/fs/debugfs/inode.c -+++ b/fs/debugfs/inode.c -@@ -552,7 +552,7 @@ void debugfs_remove_recursive(struct dentry *dentry) - * use the d_u.d_child as the rcu head and corrupt this list. - */ - spin_lock(&parent->d_lock); -- list_for_each_entry(child, &parent->d_subdirs, d_u.d_child) { -+ list_for_each_entry(child, &parent->d_subdirs, d_child) { - if (!debugfs_positive(child)) - continue; - -diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c -index 48a359d..831d4f0 100644 ---- a/fs/exportfs/expfs.c -+++ b/fs/exportfs/expfs.c -@@ -50,7 +50,7 @@ find_acceptable_alias(struct dentry *result, - - inode = result->d_inode; - spin_lock(&inode->i_lock); -- hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) { - dget(dentry); - spin_unlock(&inode->i_lock); - if (toput) -diff --git a/fs/libfs.c b/fs/libfs.c -index a184424..868c0b7 100644 ---- a/fs/libfs.c -+++ b/fs/libfs.c -@@ -113,18 +113,18 @@ loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence) - - spin_lock(&dentry->d_lock); - /* d_lock not required for cursor */ -- list_del(&cursor->d_u.d_child); -+ list_del(&cursor->d_child); - p = dentry->d_subdirs.next; - while (n && p != &dentry->d_subdirs) { - struct dentry *next; -- next = list_entry(p, struct dentry, d_u.d_child); -+ next = list_entry(p, struct dentry, d_child); - spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED); - if (simple_positive(next)) - n--; - spin_unlock(&next->d_lock); - p = p->next; - } -- list_add_tail(&cursor->d_u.d_child, p); -+ list_add_tail(&cursor->d_child, p); - spin_unlock(&dentry->d_lock); - } - } -@@ -149,7 +149,7 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) - { - struct dentry *dentry = file->f_path.dentry; - struct dentry *cursor = file->private_data; -- struct list_head *p, *q = &cursor->d_u.d_child; -+ struct list_head *p, *q = &cursor->d_child; - - if (!dir_emit_dots(file, ctx)) - return 0; -@@ -158,7 +158,7 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) - list_move(q, &dentry->d_subdirs); - - for (p = q->next; p != &dentry->d_subdirs; p = p->next) { -- struct dentry *next = list_entry(p, struct dentry, d_u.d_child); -+ struct dentry *next = list_entry(p, struct dentry, d_child); - spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED); - if (!simple_positive(next)) { - spin_unlock(&next->d_lock); -@@ -286,7 +286,7 @@ int simple_empty(struct dentry *dentry) - int ret = 0; - - spin_lock(&dentry->d_lock); -- list_for_each_entry(child, &dentry->d_subdirs, d_u.d_child) { -+ list_for_each_entry(child, &dentry->d_subdirs, d_child) { - spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED); - if (simple_positive(child)) { - spin_unlock(&child->d_lock); -diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c -index c320ac5..dc9747d 100644 ---- a/fs/ncpfs/dir.c -+++ b/fs/ncpfs/dir.c -@@ -406,7 +406,7 @@ ncp_dget_fpos(struct dentry *dentry, struct dentry *parent, unsigned long fpos) - spin_lock(&parent->d_lock); - next = parent->d_subdirs.next; - while (next != &parent->d_subdirs) { -- dent = list_entry(next, struct dentry, d_u.d_child); -+ dent = list_entry(next, struct dentry, d_child); - if ((unsigned long)dent->d_fsdata == fpos) { - if (dent->d_inode) - dget(dent); -diff --git a/fs/ncpfs/ncplib_kernel.h b/fs/ncpfs/ncplib_kernel.h -index 32c0658..6d5e7c5 100644 ---- a/fs/ncpfs/ncplib_kernel.h -+++ b/fs/ncpfs/ncplib_kernel.h -@@ -194,7 +194,7 @@ ncp_renew_dentries(struct dentry *parent) - spin_lock(&parent->d_lock); - next = parent->d_subdirs.next; - while (next != &parent->d_subdirs) { -- dentry = list_entry(next, struct dentry, d_u.d_child); -+ dentry = list_entry(next, struct dentry, d_child); - - if (dentry->d_fsdata == NULL) - ncp_age_dentry(server, dentry); -@@ -216,7 +216,7 @@ ncp_invalidate_dircache_entries(struct dentry *parent) - spin_lock(&parent->d_lock); - next = parent->d_subdirs.next; - while (next != &parent->d_subdirs) { -- dentry = list_entry(next, struct dentry, d_u.d_child); -+ dentry = list_entry(next, struct dentry, d_child); - dentry->d_fsdata = NULL; - ncp_age_dentry(server, dentry); - next = next->next; -diff --git a/fs/nfs/getroot.c b/fs/nfs/getroot.c -index 66984a9..5b8ab0e 100644 ---- a/fs/nfs/getroot.c -+++ b/fs/nfs/getroot.c -@@ -58,7 +58,7 @@ static int nfs_superblock_set_dummy_root(struct super_block *sb, struct inode *i - */ - spin_lock(&sb->s_root->d_inode->i_lock); - spin_lock(&sb->s_root->d_lock); -- hlist_del_init(&sb->s_root->d_alias); -+ hlist_del_init(&sb->s_root->d_u.d_alias); - spin_unlock(&sb->s_root->d_lock); - spin_unlock(&sb->s_root->d_inode->i_lock); - } -diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c -index 9d3e9c5..7001299 100644 ---- a/fs/notify/fsnotify.c -+++ b/fs/notify/fsnotify.c -@@ -63,14 +63,14 @@ void __fsnotify_update_child_dentry_flags(struct inode *inode) - spin_lock(&inode->i_lock); - /* run all of the dentries associated with this inode. Since this is a - * directory, there damn well better only be one item on this list */ -- hlist_for_each_entry(alias, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) { - struct dentry *child; - - /* run all of the children of the original inode and fix their - * d_flags to indicate parental interest (their parent is the - * original inode) */ - spin_lock(&alias->d_lock); -- list_for_each_entry(child, &alias->d_subdirs, d_u.d_child) { -+ list_for_each_entry(child, &alias->d_subdirs, d_child) { - if (!child->d_inode) - continue; - -diff --git a/fs/ocfs2/dcache.c b/fs/ocfs2/dcache.c -index 0d3a97d..1167485 100644 ---- a/fs/ocfs2/dcache.c -+++ b/fs/ocfs2/dcache.c -@@ -173,7 +173,7 @@ struct dentry *ocfs2_find_local_alias(struct inode *inode, - struct dentry *dentry; - - spin_lock(&inode->i_lock); -- hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) { -+ hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) { - spin_lock(&dentry->d_lock); - if (ocfs2_match_dentry(dentry, parent_blkno, skip_unhashed)) { - trace_ocfs2_find_local_alias(dentry->d_name.len, -diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c -index c254671..eaa7374 100644 ---- a/fs/proc/task_mmu.c -+++ b/fs/proc/task_mmu.c -@@ -993,9 +993,8 @@ static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, - struct vm_area_struct *vma; - struct pagemapread *pm = walk->private; - spinlock_t *ptl; -- pte_t *pte; -+ pte_t *pte, *orig_pte; - int err = 0; -- pagemap_entry_t pme = make_pme(PM_NOT_PRESENT(pm->v2)); - - /* find the first VMA at or above 'addr' */ - vma = find_vma(walk->mm, addr); -@@ -1009,6 +1008,7 @@ static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, - - for (; addr != end; addr += PAGE_SIZE) { - unsigned long offset; -+ pagemap_entry_t pme; - - offset = (addr & ~PAGEMAP_WALK_MASK) >> - PAGE_SHIFT; -@@ -1023,32 +1023,55 @@ static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, - - if (pmd_trans_unstable(pmd)) - return 0; -- for (; addr != end; addr += PAGE_SIZE) { -- int flags2; -- -- /* check to see if we've left 'vma' behind -- * and need a new, higher one */ -- if (vma && (addr >= vma->vm_end)) { -- vma = find_vma(walk->mm, addr); -- if (vma && (vma->vm_flags & VM_SOFTDIRTY)) -- flags2 = __PM_SOFT_DIRTY; -- else -- flags2 = 0; -- pme = make_pme(PM_NOT_PRESENT(pm->v2) | PM_STATUS2(pm->v2, flags2)); -+ -+ while (1) { -+ /* End of address space hole, which we mark as non-present. */ -+ unsigned long hole_end; -+ -+ if (vma) -+ hole_end = min(end, vma->vm_start); -+ else -+ hole_end = end; -+ -+ for (; addr < hole_end; addr += PAGE_SIZE) { -+ pagemap_entry_t pme = make_pme(PM_NOT_PRESENT(pm->v2)); -+ -+ err = add_to_pagemap(addr, &pme, pm); -+ if (err) -+ return err; - } - -- /* check that 'vma' actually covers this address, -- * and that it isn't a huge page vma */ -- if (vma && (vma->vm_start <= addr) && -- !is_vm_hugetlb_page(vma)) { -- pte = pte_offset_map(pmd, addr); -+ if (!vma || vma->vm_start >= end) -+ break; -+ /* -+ * We can't possibly be in a hugetlb VMA. In general, -+ * for a mm_walk with a pmd_entry and a hugetlb_entry, -+ * the pmd_entry can only be called on addresses in a -+ * hugetlb if the walk starts in a non-hugetlb VMA and -+ * spans a hugepage VMA. Since pagemap_read walks are -+ * PMD-sized and PMD-aligned, this will never be true. -+ */ -+ BUG_ON(is_vm_hugetlb_page(vma)); -+ -+ /* Addresses in the VMA. */ -+ orig_pte = pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl); -+ for (; addr < min(end, vma->vm_end); pte++, addr += PAGE_SIZE) { -+ pagemap_entry_t pme; -+ - pte_to_pagemap_entry(&pme, pm, vma, addr, *pte); -- /* unmap before userspace copy */ -- pte_unmap(pte); -+ err = add_to_pagemap(addr, &pme, pm); -+ if (err) -+ break; - } -- err = add_to_pagemap(addr, &pme, pm); -+ pte_unmap_unlock(orig_pte, ptl); -+ - if (err) - return err; -+ -+ if (addr == end) -+ break; -+ -+ vma = find_vma(walk->mm, addr); - } - - cond_resched(); -diff --git a/include/linux/dcache.h b/include/linux/dcache.h -index 3b50cac..0f0eb1c 100644 ---- a/include/linux/dcache.h -+++ b/include/linux/dcache.h -@@ -124,15 +124,15 @@ struct dentry { - void *d_fsdata; /* fs-specific data */ - - struct list_head d_lru; /* LRU list */ -+ struct list_head d_child; /* child of parent list */ -+ struct list_head d_subdirs; /* our children */ - /* -- * d_child and d_rcu can share memory -+ * d_alias and d_rcu can share memory - */ - union { -- struct list_head d_child; /* child of parent list */ -+ struct hlist_node d_alias; /* inode alias list */ - struct rcu_head d_rcu; - } d_u; -- struct list_head d_subdirs; /* our children */ -- struct hlist_node d_alias; /* inode alias list */ - }; - - /* -diff --git a/include/linux/mm.h b/include/linux/mm.h -index 46b8ab5..a7b311d 100644 ---- a/include/linux/mm.h -+++ b/include/linux/mm.h -@@ -1009,6 +1009,7 @@ static inline int page_mapped(struct page *page) - #define VM_FAULT_WRITE 0x0008 /* Special case for get_user_pages */ - #define VM_FAULT_HWPOISON 0x0010 /* Hit poisoned small page */ - #define VM_FAULT_HWPOISON_LARGE 0x0020 /* Hit poisoned large page. Index encoded in upper bits */ -+#define VM_FAULT_SIGSEGV 0x0040 - - #define VM_FAULT_NOPAGE 0x0100 /* ->fault installed the pte, not return page */ - #define VM_FAULT_LOCKED 0x0200 /* ->fault locked the returned page */ -@@ -1017,8 +1018,9 @@ static inline int page_mapped(struct page *page) - - #define VM_FAULT_HWPOISON_LARGE_MASK 0xf000 /* encodes hpage index for large hwpoison */ - --#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | VM_FAULT_HWPOISON | \ -- VM_FAULT_FALLBACK | VM_FAULT_HWPOISON_LARGE) -+#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV | \ -+ VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE | \ -+ VM_FAULT_FALLBACK) - - /* Encode hstate index for a hwpoisoned large page */ - #define VM_FAULT_SET_HINDEX(x) ((x) << 12) -diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index 911718f..bf46cc8 100644 ---- a/include/linux/netdevice.h -+++ b/include/linux/netdevice.h -@@ -1880,6 +1880,12 @@ void netdev_freemem(struct net_device *dev); - void synchronize_net(void); - int init_dummy_netdev(struct net_device *dev); - -+DECLARE_PER_CPU(int, xmit_recursion); -+static inline int dev_recursion_level(void) -+{ -+ return this_cpu_read(xmit_recursion); -+} -+ - struct net_device *dev_get_by_index(struct net *net, int ifindex); - struct net_device *__dev_get_by_index(struct net *net, int ifindex); - struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex); -diff --git a/include/linux/sched.h b/include/linux/sched.h -index 218b058..91fe6a3 100644 ---- a/include/linux/sched.h -+++ b/include/linux/sched.h -@@ -1695,7 +1695,7 @@ static inline pid_t task_tgid_vnr(struct task_struct *tsk) - } - - --static int pid_alive(const struct task_struct *p); -+static inline int pid_alive(const struct task_struct *p); - static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns) - { - pid_t pid = 0; -diff --git a/include/net/ip.h b/include/net/ip.h -index 3446cdd..5128fa7 100644 ---- a/include/net/ip.h -+++ b/include/net/ip.h -@@ -407,22 +407,6 @@ static __inline__ void inet_reset_saddr(struct sock *sk) - - #endif - --static inline int sk_mc_loop(struct sock *sk) --{ -- if (!sk) -- return 1; -- switch (sk->sk_family) { -- case AF_INET: -- return inet_sk(sk)->mc_loop; --#if IS_ENABLED(CONFIG_IPV6) -- case AF_INET6: -- return inet6_sk(sk)->mc_loop; --#endif -- } -- WARN_ON(1); -- return 1; --} -- - bool ip_call_ra_chain(struct sk_buff *skb); - - /* -diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h -index 2e74c6c..ee2d53a 100644 ---- a/include/net/ip6_route.h -+++ b/include/net/ip6_route.h -@@ -168,7 +168,8 @@ int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)); - - static inline int ip6_skb_dst_mtu(struct sk_buff *skb) - { -- struct ipv6_pinfo *np = skb->sk ? inet6_sk(skb->sk) : NULL; -+ struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ? -+ inet6_sk(skb->sk) : NULL; - - return (np && np->pmtudisc >= IPV6_PMTUDISC_PROBE) ? - skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb)); -diff --git a/include/net/sock.h b/include/net/sock.h -index f66b2b1..0c79a74 100644 ---- a/include/net/sock.h -+++ b/include/net/sock.h -@@ -1815,6 +1815,8 @@ struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie); - - struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie); - -+bool sk_mc_loop(struct sock *sk); -+ - static inline bool sk_can_gso(const struct sock *sk) - { - return net_gso_ok(sk->sk_route_caps, sk->sk_gso_type); -diff --git a/kernel/cgroup.c b/kernel/cgroup.c -index 550e205..18711f3 100644 ---- a/kernel/cgroup.c -+++ b/kernel/cgroup.c -@@ -971,7 +971,7 @@ static void cgroup_d_remove_dir(struct dentry *dentry) - parent = dentry->d_parent; - spin_lock(&parent->d_lock); - spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); -- list_del_init(&dentry->d_u.d_child); -+ list_del_init(&dentry->d_child); - spin_unlock(&dentry->d_lock); - spin_unlock(&parent->d_lock); - remove_dir(dentry); -diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c -index 813b021..a2d62b3 100644 ---- a/kernel/trace/trace.c -+++ b/kernel/trace/trace.c -@@ -6158,7 +6158,7 @@ static int instance_mkdir (struct inode *inode, struct dentry *dentry, umode_t m - int ret; - - /* Paranoid: Make sure the parent is the "instances" directory */ -- parent = hlist_entry(inode->i_dentry.first, struct dentry, d_alias); -+ parent = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias); - if (WARN_ON_ONCE(parent != trace_instance_dir)) - return -ENOENT; - -@@ -6185,7 +6185,7 @@ static int instance_rmdir(struct inode *inode, struct dentry *dentry) - int ret; - - /* Paranoid: Make sure the parent is the "instances" directory */ -- parent = hlist_entry(inode->i_dentry.first, struct dentry, d_alias); -+ parent = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias); - if (WARN_ON_ONCE(parent != trace_instance_dir)) - return -ENOENT; - -diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c -index e4c4efc..c6646a5 100644 ---- a/kernel/trace/trace_events.c -+++ b/kernel/trace/trace_events.c -@@ -428,7 +428,7 @@ static void remove_event_file_dir(struct ftrace_event_file *file) - - if (dir) { - spin_lock(&dir->d_lock); /* probably unneeded */ -- list_for_each_entry(child, &dir->d_subdirs, d_u.d_child) { -+ list_for_each_entry(child, &dir->d_subdirs, d_child) { - if (child->d_inode) /* probably unneeded */ - child->d_inode->i_private = NULL; - } -diff --git a/mm/ksm.c b/mm/ksm.c -index 68710e8..5e706e3 100644 ---- a/mm/ksm.c -+++ b/mm/ksm.c -@@ -376,7 +376,7 @@ static int break_ksm(struct vm_area_struct *vma, unsigned long addr) - else - ret = VM_FAULT_WRITE; - put_page(page); -- } while (!(ret & (VM_FAULT_WRITE | VM_FAULT_SIGBUS | VM_FAULT_OOM))); -+ } while (!(ret & (VM_FAULT_WRITE | VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV | VM_FAULT_OOM))); - /* - * We must loop because handle_mm_fault() may back out if there's - * any difficulty e.g. if pte accessed bit gets updated concurrently. -diff --git a/mm/memory-failure.c b/mm/memory-failure.c -index a98c7fc..ffc7bf0 100644 ---- a/mm/memory-failure.c -+++ b/mm/memory-failure.c -@@ -1645,8 +1645,6 @@ static int __soft_offline_page(struct page *page, int flags) - * setting PG_hwpoison. - */ - if (!is_free_buddy_page(page)) -- lru_add_drain_all(); -- if (!is_free_buddy_page(page)) - drain_all_pages(); - SetPageHWPoison(page); - if (!is_free_buddy_page(page)) -diff --git a/mm/memory.c b/mm/memory.c -index 102af09..749e1c6 100644 ---- a/mm/memory.c -+++ b/mm/memory.c -@@ -1836,7 +1836,8 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, - else - return -EFAULT; - } -- if (ret & VM_FAULT_SIGBUS) -+ if (ret & (VM_FAULT_SIGBUS | -+ VM_FAULT_SIGSEGV)) - return i ? i : -EFAULT; - BUG(); - } -@@ -1946,7 +1947,7 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, - return -ENOMEM; - if (ret & (VM_FAULT_HWPOISON | VM_FAULT_HWPOISON_LARGE)) - return -EHWPOISON; -- if (ret & VM_FAULT_SIGBUS) -+ if (ret & (VM_FAULT_SIGBUS | VM_FAULT_SIGSEGV)) - return -EFAULT; - BUG(); - } -@@ -3235,7 +3236,7 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, - - /* Check if we need to add a guard page to the stack */ - if (check_stack_guard_page(vma, address) < 0) -- return VM_FAULT_SIGBUS; -+ return VM_FAULT_SIGSEGV; - - /* Use the zero-page for reads */ - if (!(flags & FAULT_FLAG_WRITE)) { -diff --git a/net/core/dev.c b/net/core/dev.c -index f6d8d7f..73abbd7 100644 ---- a/net/core/dev.c -+++ b/net/core/dev.c -@@ -2775,7 +2775,9 @@ static void skb_update_prio(struct sk_buff *skb) - #define skb_update_prio(skb) - #endif - --static DEFINE_PER_CPU(int, xmit_recursion); -+DEFINE_PER_CPU(int, xmit_recursion); -+EXPORT_SYMBOL(xmit_recursion); -+ - #define RECURSION_LIMIT 10 - - /** -diff --git a/net/core/sock.c b/net/core/sock.c -index c806956..650dd58 100644 ---- a/net/core/sock.c -+++ b/net/core/sock.c -@@ -659,6 +659,25 @@ static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool) - sock_reset_flag(sk, bit); - } - -+bool sk_mc_loop(struct sock *sk) -+{ -+ if (dev_recursion_level()) -+ return false; -+ if (!sk) -+ return true; -+ switch (sk->sk_family) { -+ case AF_INET: -+ return inet_sk(sk)->mc_loop; -+#if IS_ENABLED(CONFIG_IPV6) -+ case AF_INET6: -+ return inet6_sk(sk)->mc_loop; -+#endif -+ } -+ WARN_ON(1); -+ return true; -+} -+EXPORT_SYMBOL(sk_mc_loop); -+ - /* - * This is meant for all protocols to use and covers goings on - * at the socket level. Everything here is generic. -diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c -index 2291791..9fbd69e 100644 ---- a/net/ipv4/tcp_input.c -+++ b/net/ipv4/tcp_input.c -@@ -3064,10 +3064,11 @@ static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets, - if (seq_rtt < 0) { - seq_rtt = ca_seq_rtt; - } -- if (!(sacked & TCPCB_SACKED_ACKED)) -+ if (!(sacked & TCPCB_SACKED_ACKED)) { - reord = min(pkts_acked, reord); -- if (!after(scb->end_seq, tp->high_seq)) -- flag |= FLAG_ORIG_SACK_ACKED; -+ if (!after(scb->end_seq, tp->high_seq)) -+ flag |= FLAG_ORIG_SACK_ACKED; -+ } - } - - if (sacked & TCPCB_SACKED_ACKED) -diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c -index b7effad..e2f8bd0 100644 ---- a/net/ipv4/tcp_ipv4.c -+++ b/net/ipv4/tcp_ipv4.c -@@ -1875,7 +1875,7 @@ void tcp_v4_early_demux(struct sk_buff *skb) - skb->sk = sk; - skb->destructor = sock_edemux; - if (sk->sk_state != TCP_TIME_WAIT) { -- struct dst_entry *dst = sk->sk_rx_dst; -+ struct dst_entry *dst = ACCESS_ONCE(sk->sk_rx_dst); - - if (dst) - dst = dst_check(dst, 0); -diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c -index 96f64e5..8c70c73 100644 ---- a/net/ipv4/tcp_output.c -+++ b/net/ipv4/tcp_output.c -@@ -2796,6 +2796,8 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst, - } - #endif - -+ /* Do not fool tcpdump (if any), clean our debris */ -+ skb->tstamp.tv64 = 0; - return skb; - } - EXPORT_SYMBOL(tcp_make_synack); -diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c -index d7907ec..066d0b0 100644 ---- a/net/ipv6/ip6_output.c -+++ b/net/ipv6/ip6_output.c -@@ -555,7 +555,8 @@ int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) - { - struct sk_buff *frag; - struct rt6_info *rt = (struct rt6_info*)skb_dst(skb); -- struct ipv6_pinfo *np = skb->sk ? inet6_sk(skb->sk) : NULL; -+ struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ? -+ inet6_sk(skb->sk) : NULL; - struct ipv6hdr *tmp_hdr; - struct frag_hdr *fh; - unsigned int mtu, hlen, left, len; -diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c -index 09a22f4..bcd6518 100644 ---- a/net/ipv6/ndisc.c -+++ b/net/ipv6/ndisc.c -@@ -1193,7 +1193,14 @@ static void ndisc_router_discovery(struct sk_buff *skb) - if (rt) - rt6_set_expires(rt, jiffies + (HZ * lifetime)); - if (ra_msg->icmph.icmp6_hop_limit) { -- in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit; -+ /* Only set hop_limit on the interface if it is higher than -+ * the current hop_limit. -+ */ -+ if (in6_dev->cnf.hop_limit < ra_msg->icmph.icmp6_hop_limit) { -+ in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit; -+ } else { -+ ND_PRINTK(2, warn, "RA: Got route advertisement with lower hop_limit than current\n"); -+ } - if (rt) - dst_metric_set(&rt->dst, RTAX_HOPLIMIT, - ra_msg->icmph.icmp6_hop_limit); -diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c -index a4f890d..9d4332d 100644 ---- a/net/ipv6/tcp_ipv6.c -+++ b/net/ipv6/tcp_ipv6.c -@@ -1633,7 +1633,7 @@ static void tcp_v6_early_demux(struct sk_buff *skb) - skb->sk = sk; - skb->destructor = sock_edemux; - if (sk->sk_state != TCP_TIME_WAIT) { -- struct dst_entry *dst = sk->sk_rx_dst; -+ struct dst_entry *dst = ACCESS_ONCE(sk->sk_rx_dst); - - if (dst) - dst = dst_check(dst, inet6_sk(sk)->rx_dst_cookie); -diff --git a/net/netfilter/nf_conntrack_proto_generic.c b/net/netfilter/nf_conntrack_proto_generic.c -index d25f293..957c1db 100644 ---- a/net/netfilter/nf_conntrack_proto_generic.c -+++ b/net/netfilter/nf_conntrack_proto_generic.c -@@ -14,6 +14,30 @@ - - static unsigned int nf_ct_generic_timeout __read_mostly = 600*HZ; - -+static bool nf_generic_should_process(u8 proto) -+{ -+ switch (proto) { -+#ifdef CONFIG_NF_CT_PROTO_SCTP_MODULE -+ case IPPROTO_SCTP: -+ return false; -+#endif -+#ifdef CONFIG_NF_CT_PROTO_DCCP_MODULE -+ case IPPROTO_DCCP: -+ return false; -+#endif -+#ifdef CONFIG_NF_CT_PROTO_GRE_MODULE -+ case IPPROTO_GRE: -+ return false; -+#endif -+#ifdef CONFIG_NF_CT_PROTO_UDPLITE_MODULE -+ case IPPROTO_UDPLITE: -+ return false; -+#endif -+ default: -+ return true; -+ } -+} -+ - static inline struct nf_generic_net *generic_pernet(struct net *net) - { - return &net->ct.nf_ct_proto.generic; -@@ -67,7 +91,7 @@ static int generic_packet(struct nf_conn *ct, - static bool generic_new(struct nf_conn *ct, const struct sk_buff *skb, - unsigned int dataoff, unsigned int *timeouts) - { -- return true; -+ return nf_generic_should_process(nf_ct_protonum(ct)); - } - - #if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT) -diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c -index 6c4cbd9..fc68bf6 100644 ---- a/security/selinux/selinuxfs.c -+++ b/security/selinux/selinuxfs.c -@@ -1200,7 +1200,7 @@ static void sel_remove_entries(struct dentry *de) - spin_lock(&de->d_lock); - node = de->d_subdirs.next; - while (node != &de->d_subdirs) { -- struct dentry *d = list_entry(node, struct dentry, d_u.d_child); -+ struct dentry *d = list_entry(node, struct dentry, d_child); - - spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); - list_del_init(node); -@@ -1674,12 +1674,12 @@ static void sel_remove_classes(void) - - list_for_each(class_node, &class_dir->d_subdirs) { - struct dentry *class_subdir = list_entry(class_node, -- struct dentry, d_u.d_child); -+ struct dentry, d_child); - struct list_head *class_subdir_node; - - list_for_each(class_subdir_node, &class_subdir->d_subdirs) { - struct dentry *d = list_entry(class_subdir_node, -- struct dentry, d_u.d_child); -+ struct dentry, d_child); - - if (d->d_inode) - if (d->d_inode->i_mode & S_IFDIR) |