diff options
author | Anthony G. Basile <blueness@gentoo.org> | 2016-07-06 20:56:27 -0400 |
---|---|---|
committer | Anthony G. Basile <blueness@gentoo.org> | 2016-07-06 20:56:27 -0400 |
commit | eab284e29f3b6bd1802dadd67906af1d0435687b (patch) | |
tree | 593ee6d824f680c46b3732732a57120bcb78cae9 | |
parent | grsecurity-3.1-4.5.7-201606302132 (diff) | |
download | hardened-patchset-eab284e29f3b6bd1802dadd67906af1d0435687b.tar.gz hardened-patchset-eab284e29f3b6bd1802dadd67906af1d0435687b.tar.bz2 hardened-patchset-eab284e29f3b6bd1802dadd67906af1d0435687b.zip |
grsecurity-3.1-4.6.3-20160706082320160706
-rw-r--r-- | 4.6.3/0000_README (renamed from 4.5.7/0000_README) | 12 | ||||
-rw-r--r-- | 4.6.3/1002_linux-4.6.3.patch | 4713 | ||||
-rw-r--r-- | 4.6.3/4420_grsecurity-3.1-4.6.3-201607060823.patch (renamed from 4.5.7/4420_grsecurity-3.1-4.5.7-201606302132.patch) | 15496 | ||||
-rw-r--r-- | 4.6.3/4425_grsec_remove_EI_PAX.patch (renamed from 4.5.7/4425_grsec_remove_EI_PAX.patch) | 0 | ||||
-rw-r--r-- | 4.6.3/4427_force_XATTR_PAX_tmpfs.patch (renamed from 4.5.7/4427_force_XATTR_PAX_tmpfs.patch) | 8 | ||||
-rw-r--r-- | 4.6.3/4430_grsec-remove-localversion-grsec.patch (renamed from 4.5.7/4430_grsec-remove-localversion-grsec.patch) | 0 | ||||
-rw-r--r-- | 4.6.3/4435_grsec-mute-warnings.patch (renamed from 4.5.7/4435_grsec-mute-warnings.patch) | 0 | ||||
-rw-r--r-- | 4.6.3/4440_grsec-remove-protected-paths.patch (renamed from 4.5.7/4440_grsec-remove-protected-paths.patch) | 0 | ||||
-rw-r--r-- | 4.6.3/4450_grsec-kconfig-default-gids.patch (renamed from 4.5.7/4450_grsec-kconfig-default-gids.patch) | 0 | ||||
-rw-r--r-- | 4.6.3/4465_selinux-avc_audit-log-curr_ip.patch (renamed from 4.5.7/4465_selinux-avc_audit-log-curr_ip.patch) | 0 | ||||
-rw-r--r-- | 4.6.3/4470_disable-compat_vdso.patch (renamed from 4.5.7/4470_disable-compat_vdso.patch) | 2 | ||||
-rw-r--r-- | 4.6.3/4475_emutramp_default_on.patch (renamed from 4.5.7/4475_emutramp_default_on.patch) | 0 |
12 files changed, 12391 insertions, 7840 deletions
diff --git a/4.5.7/0000_README b/4.6.3/0000_README index cd47bdd..a40de90 100644 --- a/4.5.7/0000_README +++ b/4.6.3/0000_README @@ -2,7 +2,11 @@ README ----------------------------------------------------------------------------- Individual Patch Descriptions: ----------------------------------------------------------------------------- -Patch: 4420_grsecurity-3.1-4.5.7-201606302132.patch +Patch: 1002_linux-4.6.3.patch +From: http://www.kernel.org +Desc: Linux 4.6.3 + +Patch: 4420_grsecurity-3.1-4.6.3-201607060823.patch From: http://www.grsecurity.net Desc: hardened-sources base patch from upstream grsecurity @@ -39,6 +43,6 @@ From: Gordon Malm <gengor@gentoo.org> Kerin Millar <kerframil@gmail.com> Desc: Disables VDSO_COMPAT operation completely -Patch: 4475_emutramp_default_on.patch -From: Anthony G. Basile <blueness@gentoo.org> -Desc: Set PAX_EMUTRAMP default on for libffi, bugs #329499 and #457194 +Patch: 4475_emutramp_default_on.patch +From: Anthony G. Basile <blueness@gentoo.org> +Desc: Set PAX_EMUTRAMP default on for libffi, bugs #329499 and #457194 diff --git a/4.6.3/1002_linux-4.6.3.patch b/4.6.3/1002_linux-4.6.3.patch new file mode 100644 index 0000000..f999198 --- /dev/null +++ b/4.6.3/1002_linux-4.6.3.patch @@ -0,0 +1,4713 @@ +diff --git a/Makefile b/Makefile +index 93068c2..c62b531 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,6 +1,6 @@ + VERSION = 4 + PATCHLEVEL = 6 +-SUBLEVEL = 2 ++SUBLEVEL = 3 + EXTRAVERSION = + NAME = Charred Weasel + +diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c +index ef9119f..4d93758 100644 +--- a/arch/arm/kernel/ptrace.c ++++ b/arch/arm/kernel/ptrace.c +@@ -733,8 +733,8 @@ static int vfp_set(struct task_struct *target, + if (ret) + return ret; + +- vfp_flush_hwstate(thread); + thread->vfpstate.hard = new_vfp; ++ vfp_flush_hwstate(thread); + + return 0; + } +diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h +index 24ed037..83d48a5 100644 +--- a/arch/arm64/include/asm/elf.h ++++ b/arch/arm64/include/asm/elf.h +@@ -160,14 +160,14 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, + #define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12)) + #endif + +-#ifdef CONFIG_COMPAT +- + #ifdef __AARCH64EB__ + #define COMPAT_ELF_PLATFORM ("v8b") + #else + #define COMPAT_ELF_PLATFORM ("v8l") + #endif + ++#ifdef CONFIG_COMPAT ++ + #define COMPAT_ELF_ET_DYN_BASE (2 * TASK_SIZE_32 / 3) + + /* AArch32 registers. */ +diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c +index f0c3fb7..2d2d7cb 100644 +--- a/arch/arm64/kernel/cpuinfo.c ++++ b/arch/arm64/kernel/cpuinfo.c +@@ -22,6 +22,8 @@ + + #include <linux/bitops.h> + #include <linux/bug.h> ++#include <linux/compat.h> ++#include <linux/elf.h> + #include <linux/init.h> + #include <linux/kernel.h> + #include <linux/personality.h> +@@ -104,6 +106,7 @@ static const char *const compat_hwcap2_str[] = { + static int c_show(struct seq_file *m, void *v) + { + int i, j; ++ bool compat = personality(current->personality) == PER_LINUX32; + + for_each_online_cpu(i) { + struct cpuinfo_arm64 *cpuinfo = &per_cpu(cpu_data, i); +@@ -115,6 +118,9 @@ static int c_show(struct seq_file *m, void *v) + * "processor". Give glibc what it expects. + */ + seq_printf(m, "processor\t: %d\n", i); ++ if (compat) ++ seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n", ++ MIDR_REVISION(midr), COMPAT_ELF_PLATFORM); + + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", + loops_per_jiffy / (500000UL/HZ), +@@ -127,7 +133,7 @@ static int c_show(struct seq_file *m, void *v) + * software which does already (at least for 32-bit). + */ + seq_puts(m, "Features\t:"); +- if (personality(current->personality) == PER_LINUX32) { ++ if (compat) { + #ifdef CONFIG_COMPAT + for (j = 0; compat_hwcap_str[j]; j++) + if (compat_elf_hwcap & (1 << j)) +diff --git a/arch/arm64/kvm/hyp/vgic-v3-sr.c b/arch/arm64/kvm/hyp/vgic-v3-sr.c +index fff7cd4..3129df9 100644 +--- a/arch/arm64/kvm/hyp/vgic-v3-sr.c ++++ b/arch/arm64/kvm/hyp/vgic-v3-sr.c +@@ -190,12 +190,11 @@ void __hyp_text __vgic_v3_save_state(struct kvm_vcpu *vcpu) + if (!(vcpu->arch.vgic_cpu.live_lrs & (1UL << i))) + continue; + +- if (cpu_if->vgic_elrsr & (1 << i)) { ++ if (cpu_if->vgic_elrsr & (1 << i)) + cpu_if->vgic_lr[i] &= ~ICH_LR_STATE; +- continue; +- } ++ else ++ cpu_if->vgic_lr[i] = __gic_v3_get_lr(i); + +- cpu_if->vgic_lr[i] = __gic_v3_get_lr(i); + __gic_v3_set_lr(0, i); + } + +diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c +index 3ae4a28..10b79e9 100644 +--- a/arch/arm64/mm/fault.c ++++ b/arch/arm64/mm/fault.c +@@ -109,7 +109,7 @@ int ptep_set_access_flags(struct vm_area_struct *vma, + * PTE_RDONLY is cleared by default in the asm below, so set it in + * back if necessary (read-only or clean PTE). + */ +- if (!pte_write(entry) || !dirty) ++ if (!pte_write(entry) || !pte_sw_dirty(entry)) + pte_val(entry) |= PTE_RDONLY; + + /* +diff --git a/arch/parisc/kernel/unaligned.c b/arch/parisc/kernel/unaligned.c +index d7c0acb..8d49614 100644 +--- a/arch/parisc/kernel/unaligned.c ++++ b/arch/parisc/kernel/unaligned.c +@@ -666,7 +666,7 @@ void handle_unaligned(struct pt_regs *regs) + break; + } + +- if (modify && R1(regs->iir)) ++ if (ret == 0 && modify && R1(regs->iir)) + regs->gr[R1(regs->iir)] = newbase; + + +@@ -677,6 +677,14 @@ void handle_unaligned(struct pt_regs *regs) + + if (ret) + { ++ /* ++ * The unaligned handler failed. ++ * If we were called by __get_user() or __put_user() jump ++ * to it's exception fixup handler instead of crashing. ++ */ ++ if (!user_mode(regs) && fixup_exception(regs)) ++ return; ++ + printk(KERN_CRIT "Unaligned handler failed, ret = %d\n", ret); + die_if_kernel("Unaligned data reference", regs, 28); + +diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h +index f5f4c66..166d863 100644 +--- a/arch/powerpc/include/asm/reg.h ++++ b/arch/powerpc/include/asm/reg.h +@@ -715,7 +715,7 @@ + #define MMCR0_FCWAIT 0x00000002UL /* freeze counter in WAIT state */ + #define MMCR0_FCHV 0x00000001UL /* freeze conditions in hypervisor mode */ + #define SPRN_MMCR1 798 +-#define SPRN_MMCR2 769 ++#define SPRN_MMCR2 785 + #define SPRN_MMCRA 0x312 + #define MMCRA_SDSYNC 0x80000000UL /* SDAR synced with SIAR */ + #define MMCRA_SDAR_DCACHE_MISS 0x40000000UL +@@ -752,13 +752,13 @@ + #define SPRN_PMC6 792 + #define SPRN_PMC7 793 + #define SPRN_PMC8 794 +-#define SPRN_SIAR 780 +-#define SPRN_SDAR 781 + #define SPRN_SIER 784 + #define SIER_SIPR 0x2000000 /* Sampled MSR_PR */ + #define SIER_SIHV 0x1000000 /* Sampled MSR_HV */ + #define SIER_SIAR_VALID 0x0400000 /* SIAR contents valid */ + #define SIER_SDAR_VALID 0x0200000 /* SDAR contents valid */ ++#define SPRN_SIAR 796 ++#define SPRN_SDAR 797 + #define SPRN_TACR 888 + #define SPRN_TCSCR 889 + #define SPRN_CSIGR 890 +diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c +index da51925..ccd2037 100644 +--- a/arch/powerpc/kernel/prom_init.c ++++ b/arch/powerpc/kernel/prom_init.c +@@ -656,6 +656,7 @@ unsigned char ibm_architecture_vec[] = { + W(0xffff0000), W(0x003e0000), /* POWER6 */ + W(0xffff0000), W(0x003f0000), /* POWER7 */ + W(0xffff0000), W(0x004b0000), /* POWER8E */ ++ W(0xffff0000), W(0x004c0000), /* POWER8NVL */ + W(0xffff0000), W(0x004d0000), /* POWER8 */ + W(0xffffffff), W(0x0f000004), /* all 2.07-compliant */ + W(0xffffffff), W(0x0f000003), /* all 2.06-compliant */ +diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c +index 7635b1c..f4acba2 100644 +--- a/arch/powerpc/mm/hash_utils_64.c ++++ b/arch/powerpc/mm/hash_utils_64.c +@@ -159,6 +159,19 @@ static struct mmu_psize_def mmu_psize_defaults_gp[] = { + }, + }; + ++/* ++ * 'R' and 'C' update notes: ++ * - Under pHyp or KVM, the updatepp path will not set C, thus it *will* ++ * create writeable HPTEs without C set, because the hcall H_PROTECT ++ * that we use in that case will not update C ++ * - The above is however not a problem, because we also don't do that ++ * fancy "no flush" variant of eviction and we use H_REMOVE which will ++ * do the right thing and thus we don't have the race I described earlier ++ * ++ * - Under bare metal, we do have the race, so we need R and C set ++ * - We make sure R is always set and never lost ++ * - C is _PAGE_DIRTY, and *should* always be set for a writeable mapping ++ */ + unsigned long htab_convert_pte_flags(unsigned long pteflags) + { + unsigned long rflags = 0; +@@ -180,9 +193,14 @@ unsigned long htab_convert_pte_flags(unsigned long pteflags) + rflags |= 0x1; + } + /* +- * Always add "C" bit for perf. Memory coherence is always enabled ++ * We can't allow hardware to update hpte bits. Hence always ++ * set 'R' bit and set 'C' if it is a write fault ++ * Memory coherence is always enabled + */ +- rflags |= HPTE_R_C | HPTE_R_M; ++ rflags |= HPTE_R_R | HPTE_R_M; ++ ++ if (pteflags & _PAGE_DIRTY) ++ rflags |= HPTE_R_C; + /* + * Add in WIG bits + */ +diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c +index ac3ffd9..405baaf 100644 +--- a/arch/powerpc/platforms/pseries/eeh_pseries.c ++++ b/arch/powerpc/platforms/pseries/eeh_pseries.c +@@ -615,29 +615,50 @@ static int pseries_eeh_configure_bridge(struct eeh_pe *pe) + { + int config_addr; + int ret; ++ /* Waiting 0.2s maximum before skipping configuration */ ++ int max_wait = 200; + + /* Figure out the PE address */ + config_addr = pe->config_addr; + if (pe->addr) + config_addr = pe->addr; + +- /* Use new configure-pe function, if supported */ +- if (ibm_configure_pe != RTAS_UNKNOWN_SERVICE) { +- ret = rtas_call(ibm_configure_pe, 3, 1, NULL, +- config_addr, BUID_HI(pe->phb->buid), +- BUID_LO(pe->phb->buid)); +- } else if (ibm_configure_bridge != RTAS_UNKNOWN_SERVICE) { +- ret = rtas_call(ibm_configure_bridge, 3, 1, NULL, +- config_addr, BUID_HI(pe->phb->buid), +- BUID_LO(pe->phb->buid)); +- } else { +- return -EFAULT; +- } ++ while (max_wait > 0) { ++ /* Use new configure-pe function, if supported */ ++ if (ibm_configure_pe != RTAS_UNKNOWN_SERVICE) { ++ ret = rtas_call(ibm_configure_pe, 3, 1, NULL, ++ config_addr, BUID_HI(pe->phb->buid), ++ BUID_LO(pe->phb->buid)); ++ } else if (ibm_configure_bridge != RTAS_UNKNOWN_SERVICE) { ++ ret = rtas_call(ibm_configure_bridge, 3, 1, NULL, ++ config_addr, BUID_HI(pe->phb->buid), ++ BUID_LO(pe->phb->buid)); ++ } else { ++ return -EFAULT; ++ } + +- if (ret) +- pr_warn("%s: Unable to configure bridge PHB#%d-PE#%x (%d)\n", +- __func__, pe->phb->global_number, pe->addr, ret); ++ if (!ret) ++ return ret; ++ ++ /* ++ * If RTAS returns a delay value that's above 100ms, cut it ++ * down to 100ms in case firmware made a mistake. For more ++ * on how these delay values work see rtas_busy_delay_time ++ */ ++ if (ret > RTAS_EXTENDED_DELAY_MIN+2 && ++ ret <= RTAS_EXTENDED_DELAY_MAX) ++ ret = RTAS_EXTENDED_DELAY_MIN+2; ++ ++ max_wait -= rtas_busy_delay_time(ret); ++ ++ if (max_wait < 0) ++ break; ++ ++ rtas_busy_delay(ret); ++ } + ++ pr_warn("%s: Unable to configure bridge PHB#%d-PE#%x (%d)\n", ++ __func__, pe->phb->global_number, pe->addr, ret); + return ret; + } + +diff --git a/arch/s390/net/bpf_jit.h b/arch/s390/net/bpf_jit.h +index f010c93..fda605d 100644 +--- a/arch/s390/net/bpf_jit.h ++++ b/arch/s390/net/bpf_jit.h +@@ -37,7 +37,7 @@ extern u8 sk_load_word[], sk_load_half[], sk_load_byte[]; + * | | | + * +---------------+ | + * | 8 byte skbp | | +- * R15+170 -> +---------------+ | ++ * R15+176 -> +---------------+ | + * | 8 byte hlen | | + * R15+168 -> +---------------+ | + * | 4 byte align | | +@@ -58,7 +58,7 @@ extern u8 sk_load_word[], sk_load_half[], sk_load_byte[]; + #define STK_OFF (STK_SPACE - STK_160_UNUSED) + #define STK_OFF_TMP 160 /* Offset of tmp buffer on stack */ + #define STK_OFF_HLEN 168 /* Offset of SKB header length on stack */ +-#define STK_OFF_SKBP 170 /* Offset of SKB pointer on stack */ ++#define STK_OFF_SKBP 176 /* Offset of SKB pointer on stack */ + + #define STK_OFF_R6 (160 - 11 * 8) /* Offset of r6 on stack */ + #define STK_OFF_TCCNT (160 - 12 * 8) /* Offset of tail_call_cnt on stack */ +diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c +index 3c0bfc1..2662fcc 100644 +--- a/arch/s390/net/bpf_jit_comp.c ++++ b/arch/s390/net/bpf_jit_comp.c +@@ -45,7 +45,7 @@ struct bpf_jit { + int labels[1]; /* Labels for local jumps */ + }; + +-#define BPF_SIZE_MAX 0x7ffff /* Max size for program (20 bit signed displ) */ ++#define BPF_SIZE_MAX 0xffff /* Max size for program (16 bit branches) */ + + #define SEEN_SKB 1 /* skb access */ + #define SEEN_MEM 2 /* use mem[] for temporary storage */ +@@ -446,7 +446,7 @@ static void bpf_jit_prologue(struct bpf_jit *jit) + emit_load_skb_data_hlen(jit); + if (jit->seen & SEEN_SKB_CHANGE) + /* stg %b1,ST_OFF_SKBP(%r0,%r15) */ +- EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0, REG_15, ++ EMIT6_DISP_LH(0xe3000000, 0x0024, BPF_REG_1, REG_0, REG_15, + STK_OFF_SKBP); + } + +diff --git a/arch/sparc/include/asm/head_64.h b/arch/sparc/include/asm/head_64.h +index 10e9dab..f0700cf 100644 +--- a/arch/sparc/include/asm/head_64.h ++++ b/arch/sparc/include/asm/head_64.h +@@ -15,6 +15,10 @@ + + #define PTREGS_OFF (STACK_BIAS + STACKFRAME_SZ) + ++#define RTRAP_PSTATE (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_IE) ++#define RTRAP_PSTATE_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV) ++#define RTRAP_PSTATE_AG_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) ++ + #define __CHEETAH_ID 0x003e0014 + #define __JALAPENO_ID 0x003e0016 + #define __SERRANO_ID 0x003e0022 +diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h +index f089cfa..5a189bf 100644 +--- a/arch/sparc/include/asm/pgtable_64.h ++++ b/arch/sparc/include/asm/pgtable_64.h +@@ -375,7 +375,7 @@ static inline pgprot_t pgprot_noncached(pgprot_t prot) + #define pgprot_noncached pgprot_noncached + + #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) +-static inline pte_t pte_mkhuge(pte_t pte) ++static inline unsigned long __pte_huge_mask(void) + { + unsigned long mask; + +@@ -390,8 +390,19 @@ static inline pte_t pte_mkhuge(pte_t pte) + : "=r" (mask) + : "i" (_PAGE_SZHUGE_4U), "i" (_PAGE_SZHUGE_4V)); + +- return __pte(pte_val(pte) | mask); ++ return mask; ++} ++ ++static inline pte_t pte_mkhuge(pte_t pte) ++{ ++ return __pte(pte_val(pte) | __pte_huge_mask()); ++} ++ ++static inline bool is_hugetlb_pte(pte_t pte) ++{ ++ return !!(pte_val(pte) & __pte_huge_mask()); + } ++ + #ifdef CONFIG_TRANSPARENT_HUGEPAGE + static inline pmd_t pmd_mkhuge(pmd_t pmd) + { +@@ -403,6 +414,11 @@ static inline pmd_t pmd_mkhuge(pmd_t pmd) + return __pmd(pte_val(pte)); + } + #endif ++#else ++static inline bool is_hugetlb_pte(pte_t pte) ++{ ++ return false; ++} + #endif + + static inline pte_t pte_mkdirty(pte_t pte) +@@ -858,6 +874,19 @@ static inline unsigned long pud_pfn(pud_t pud) + void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, + pte_t *ptep, pte_t orig, int fullmm); + ++static void maybe_tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, ++ pte_t *ptep, pte_t orig, int fullmm) ++{ ++ /* It is more efficient to let flush_tlb_kernel_range() ++ * handle init_mm tlb flushes. ++ * ++ * SUN4V NOTE: _PAGE_VALID is the same value in both the SUN4U ++ * and SUN4V pte layout, so this inline test is fine. ++ */ ++ if (likely(mm != &init_mm) && pte_accessible(mm, orig)) ++ tlb_batch_add(mm, vaddr, ptep, orig, fullmm); ++} ++ + #define __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR + static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm, + unsigned long addr, +@@ -874,15 +903,7 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr, + pte_t orig = *ptep; + + *ptep = pte; +- +- /* It is more efficient to let flush_tlb_kernel_range() +- * handle init_mm tlb flushes. +- * +- * SUN4V NOTE: _PAGE_VALID is the same value in both the SUN4U +- * and SUN4V pte layout, so this inline test is fine. +- */ +- if (likely(mm != &init_mm) && pte_accessible(mm, orig)) +- tlb_batch_add(mm, addr, ptep, orig, fullmm); ++ maybe_tlb_batch_add(mm, addr, ptep, orig, fullmm); + } + + #define set_pte_at(mm,addr,ptep,pte) \ +diff --git a/arch/sparc/include/asm/tlbflush_64.h b/arch/sparc/include/asm/tlbflush_64.h +index dea1cfa..a8e192e 100644 +--- a/arch/sparc/include/asm/tlbflush_64.h ++++ b/arch/sparc/include/asm/tlbflush_64.h +@@ -8,6 +8,7 @@ + #define TLB_BATCH_NR 192 + + struct tlb_batch { ++ bool huge; + struct mm_struct *mm; + unsigned long tlb_nr; + unsigned long active; +@@ -16,7 +17,7 @@ struct tlb_batch { + + void flush_tsb_kernel_range(unsigned long start, unsigned long end); + void flush_tsb_user(struct tlb_batch *tb); +-void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr); ++void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr, bool huge); + + /* TLB flush operations. */ + +diff --git a/arch/sparc/include/asm/ttable.h b/arch/sparc/include/asm/ttable.h +index 71b5a67..781b9f1 100644 +--- a/arch/sparc/include/asm/ttable.h ++++ b/arch/sparc/include/asm/ttable.h +@@ -589,8 +589,8 @@ user_rtt_fill_64bit: \ + restored; \ + nop; nop; nop; nop; nop; nop; \ + nop; nop; nop; nop; nop; \ +- ba,a,pt %xcc, user_rtt_fill_fixup; \ +- ba,a,pt %xcc, user_rtt_fill_fixup; \ ++ ba,a,pt %xcc, user_rtt_fill_fixup_dax; \ ++ ba,a,pt %xcc, user_rtt_fill_fixup_mna; \ + ba,a,pt %xcc, user_rtt_fill_fixup; + + +@@ -652,8 +652,8 @@ user_rtt_fill_32bit: \ + restored; \ + nop; nop; nop; nop; nop; \ + nop; nop; nop; \ +- ba,a,pt %xcc, user_rtt_fill_fixup; \ +- ba,a,pt %xcc, user_rtt_fill_fixup; \ ++ ba,a,pt %xcc, user_rtt_fill_fixup_dax; \ ++ ba,a,pt %xcc, user_rtt_fill_fixup_mna; \ + ba,a,pt %xcc, user_rtt_fill_fixup; + + +diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile +index 7cf9c6e..fdb1332 100644 +--- a/arch/sparc/kernel/Makefile ++++ b/arch/sparc/kernel/Makefile +@@ -21,6 +21,7 @@ CFLAGS_REMOVE_perf_event.o := -pg + CFLAGS_REMOVE_pcr.o := -pg + endif + ++obj-$(CONFIG_SPARC64) += urtt_fill.o + obj-$(CONFIG_SPARC32) += entry.o wof.o wuf.o + obj-$(CONFIG_SPARC32) += etrap_32.o + obj-$(CONFIG_SPARC32) += rtrap_32.o +diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S +index d08bdaf..216948c 100644 +--- a/arch/sparc/kernel/rtrap_64.S ++++ b/arch/sparc/kernel/rtrap_64.S +@@ -14,10 +14,6 @@ + #include <asm/visasm.h> + #include <asm/processor.h> + +-#define RTRAP_PSTATE (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_IE) +-#define RTRAP_PSTATE_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV) +-#define RTRAP_PSTATE_AG_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG) +- + #ifdef CONFIG_CONTEXT_TRACKING + # define SCHEDULE_USER schedule_user + #else +@@ -242,52 +238,17 @@ rt_continue: ldx [%sp + PTREGS_OFF + PT_V9_G1], %g1 + wrpr %g1, %cwp + ba,a,pt %xcc, user_rtt_fill_64bit + +-user_rtt_fill_fixup: +- rdpr %cwp, %g1 +- add %g1, 1, %g1 +- wrpr %g1, 0x0, %cwp +- +- rdpr %wstate, %g2 +- sll %g2, 3, %g2 +- wrpr %g2, 0x0, %wstate +- +- /* We know %canrestore and %otherwin are both zero. */ +- +- sethi %hi(sparc64_kern_pri_context), %g2 +- ldx [%g2 + %lo(sparc64_kern_pri_context)], %g2 +- mov PRIMARY_CONTEXT, %g1 +- +-661: stxa %g2, [%g1] ASI_DMMU +- .section .sun4v_1insn_patch, "ax" +- .word 661b +- stxa %g2, [%g1] ASI_MMU +- .previous +- +- sethi %hi(KERNBASE), %g1 +- flush %g1 ++user_rtt_fill_fixup_dax: ++ ba,pt %xcc, user_rtt_fill_fixup_common ++ mov 1, %g3 + +- or %g4, FAULT_CODE_WINFIXUP, %g4 +- stb %g4, [%g6 + TI_FAULT_CODE] +- stx %g5, [%g6 + TI_FAULT_ADDR] ++user_rtt_fill_fixup_mna: ++ ba,pt %xcc, user_rtt_fill_fixup_common ++ mov 2, %g3 + +- mov %g6, %l1 +- wrpr %g0, 0x0, %tl +- +-661: nop +- .section .sun4v_1insn_patch, "ax" +- .word 661b +- SET_GL(0) +- .previous +- +- wrpr %g0, RTRAP_PSTATE, %pstate +- +- mov %l1, %g6 +- ldx [%g6 + TI_TASK], %g4 +- LOAD_PER_CPU_BASE(%g5, %g6, %g1, %g2, %g3) +- call do_sparc64_fault +- add %sp, PTREGS_OFF, %o0 +- ba,pt %xcc, rtrap +- nop ++user_rtt_fill_fixup: ++ ba,pt %xcc, user_rtt_fill_fixup_common ++ clr %g3 + + user_rtt_pre_restore: + add %g1, 1, %g1 +diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c +index 3c25241..ebd0bfe 100644 +--- a/arch/sparc/kernel/signal32.c ++++ b/arch/sparc/kernel/signal32.c +@@ -138,12 +138,24 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from) + return 0; + } + ++/* Checks if the fp is valid. We always build signal frames which are ++ * 16-byte aligned, therefore we can always enforce that the restore ++ * frame has that property as well. ++ */ ++static bool invalid_frame_pointer(void __user *fp, int fplen) ++{ ++ if ((((unsigned long) fp) & 15) || ++ ((unsigned long)fp) > 0x100000000ULL - fplen) ++ return true; ++ return false; ++} ++ + void do_sigreturn32(struct pt_regs *regs) + { + struct signal_frame32 __user *sf; + compat_uptr_t fpu_save; + compat_uptr_t rwin_save; +- unsigned int psr; ++ unsigned int psr, ufp; + unsigned int pc, npc; + sigset_t set; + compat_sigset_t seta; +@@ -158,11 +170,16 @@ void do_sigreturn32(struct pt_regs *regs) + sf = (struct signal_frame32 __user *) regs->u_regs[UREG_FP]; + + /* 1. Make sure we are not getting garbage from the user */ +- if (!access_ok(VERIFY_READ, sf, sizeof(*sf)) || +- (((unsigned long) sf) & 3)) ++ if (invalid_frame_pointer(sf, sizeof(*sf))) ++ goto segv; ++ ++ if (get_user(ufp, &sf->info.si_regs.u_regs[UREG_FP])) ++ goto segv; ++ ++ if (ufp & 0x7) + goto segv; + +- if (get_user(pc, &sf->info.si_regs.pc) || ++ if (__get_user(pc, &sf->info.si_regs.pc) || + __get_user(npc, &sf->info.si_regs.npc)) + goto segv; + +@@ -227,7 +244,7 @@ segv: + asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) + { + struct rt_signal_frame32 __user *sf; +- unsigned int psr, pc, npc; ++ unsigned int psr, pc, npc, ufp; + compat_uptr_t fpu_save; + compat_uptr_t rwin_save; + sigset_t set; +@@ -242,11 +259,16 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) + sf = (struct rt_signal_frame32 __user *) regs->u_regs[UREG_FP]; + + /* 1. Make sure we are not getting garbage from the user */ +- if (!access_ok(VERIFY_READ, sf, sizeof(*sf)) || +- (((unsigned long) sf) & 3)) ++ if (invalid_frame_pointer(sf, sizeof(*sf))) + goto segv; + +- if (get_user(pc, &sf->regs.pc) || ++ if (get_user(ufp, &sf->regs.u_regs[UREG_FP])) ++ goto segv; ++ ++ if (ufp & 0x7) ++ goto segv; ++ ++ if (__get_user(pc, &sf->regs.pc) || + __get_user(npc, &sf->regs.npc)) + goto segv; + +@@ -307,14 +329,6 @@ segv: + force_sig(SIGSEGV, current); + } + +-/* Checks if the fp is valid */ +-static int invalid_frame_pointer(void __user *fp, int fplen) +-{ +- if ((((unsigned long) fp) & 7) || ((unsigned long)fp) > 0x100000000ULL - fplen) +- return 1; +- return 0; +-} +- + static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize) + { + unsigned long sp; +diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c +index 52aa5e4..c3c12ef 100644 +--- a/arch/sparc/kernel/signal_32.c ++++ b/arch/sparc/kernel/signal_32.c +@@ -60,10 +60,22 @@ struct rt_signal_frame { + #define SF_ALIGNEDSZ (((sizeof(struct signal_frame) + 7) & (~7))) + #define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame) + 7) & (~7))) + ++/* Checks if the fp is valid. We always build signal frames which are ++ * 16-byte aligned, therefore we can always enforce that the restore ++ * frame has that property as well. ++ */ ++static inline bool invalid_frame_pointer(void __user *fp, int fplen) ++{ ++ if ((((unsigned long) fp) & 15) || !__access_ok((unsigned long)fp, fplen)) ++ return true; ++ ++ return false; ++} ++ + asmlinkage void do_sigreturn(struct pt_regs *regs) + { ++ unsigned long up_psr, pc, npc, ufp; + struct signal_frame __user *sf; +- unsigned long up_psr, pc, npc; + sigset_t set; + __siginfo_fpu_t __user *fpu_save; + __siginfo_rwin_t __user *rwin_save; +@@ -77,10 +89,13 @@ asmlinkage void do_sigreturn(struct pt_regs *regs) + sf = (struct signal_frame __user *) regs->u_regs[UREG_FP]; + + /* 1. Make sure we are not getting garbage from the user */ +- if (!access_ok(VERIFY_READ, sf, sizeof(*sf))) ++ if (!invalid_frame_pointer(sf, sizeof(*sf))) ++ goto segv_and_exit; ++ ++ if (get_user(ufp, &sf->info.si_regs.u_regs[UREG_FP])) + goto segv_and_exit; + +- if (((unsigned long) sf) & 3) ++ if (ufp & 0x7) + goto segv_and_exit; + + err = __get_user(pc, &sf->info.si_regs.pc); +@@ -127,7 +142,7 @@ segv_and_exit: + asmlinkage void do_rt_sigreturn(struct pt_regs *regs) + { + struct rt_signal_frame __user *sf; +- unsigned int psr, pc, npc; ++ unsigned int psr, pc, npc, ufp; + __siginfo_fpu_t __user *fpu_save; + __siginfo_rwin_t __user *rwin_save; + sigset_t set; +@@ -135,8 +150,13 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs) + + synchronize_user_stack(); + sf = (struct rt_signal_frame __user *) regs->u_regs[UREG_FP]; +- if (!access_ok(VERIFY_READ, sf, sizeof(*sf)) || +- (((unsigned long) sf) & 0x03)) ++ if (!invalid_frame_pointer(sf, sizeof(*sf))) ++ goto segv; ++ ++ if (get_user(ufp, &sf->regs.u_regs[UREG_FP])) ++ goto segv; ++ ++ if (ufp & 0x7) + goto segv; + + err = __get_user(pc, &sf->regs.pc); +@@ -178,15 +198,6 @@ segv: + force_sig(SIGSEGV, current); + } + +-/* Checks if the fp is valid */ +-static inline int invalid_frame_pointer(void __user *fp, int fplen) +-{ +- if ((((unsigned long) fp) & 7) || !__access_ok((unsigned long)fp, fplen)) +- return 1; +- +- return 0; +-} +- + static inline void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize) + { + unsigned long sp = regs->u_regs[UREG_FP]; +diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c +index 39aaec1..5ee930c 100644 +--- a/arch/sparc/kernel/signal_64.c ++++ b/arch/sparc/kernel/signal_64.c +@@ -234,6 +234,17 @@ do_sigsegv: + goto out; + } + ++/* Checks if the fp is valid. We always build rt signal frames which ++ * are 16-byte aligned, therefore we can always enforce that the ++ * restore frame has that property as well. ++ */ ++static bool invalid_frame_pointer(void __user *fp) ++{ ++ if (((unsigned long) fp) & 15) ++ return true; ++ return false; ++} ++ + struct rt_signal_frame { + struct sparc_stackf ss; + siginfo_t info; +@@ -246,8 +257,8 @@ struct rt_signal_frame { + + void do_rt_sigreturn(struct pt_regs *regs) + { ++ unsigned long tpc, tnpc, tstate, ufp; + struct rt_signal_frame __user *sf; +- unsigned long tpc, tnpc, tstate; + __siginfo_fpu_t __user *fpu_save; + __siginfo_rwin_t __user *rwin_save; + sigset_t set; +@@ -261,10 +272,16 @@ void do_rt_sigreturn(struct pt_regs *regs) + (regs->u_regs [UREG_FP] + STACK_BIAS); + + /* 1. Make sure we are not getting garbage from the user */ +- if (((unsigned long) sf) & 3) ++ if (invalid_frame_pointer(sf)) ++ goto segv; ++ ++ if (get_user(ufp, &sf->regs.u_regs[UREG_FP])) + goto segv; + +- err = get_user(tpc, &sf->regs.tpc); ++ if ((ufp + STACK_BIAS) & 0x7) ++ goto segv; ++ ++ err = __get_user(tpc, &sf->regs.tpc); + err |= __get_user(tnpc, &sf->regs.tnpc); + if (test_thread_flag(TIF_32BIT)) { + tpc &= 0xffffffff; +@@ -308,14 +325,6 @@ segv: + force_sig(SIGSEGV, current); + } + +-/* Checks if the fp is valid */ +-static int invalid_frame_pointer(void __user *fp) +-{ +- if (((unsigned long) fp) & 15) +- return 1; +- return 0; +-} +- + static inline void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize) + { + unsigned long sp = regs->u_regs[UREG_FP] + STACK_BIAS; +diff --git a/arch/sparc/kernel/sigutil_32.c b/arch/sparc/kernel/sigutil_32.c +index 0f6eebe..e5fe8ce 100644 +--- a/arch/sparc/kernel/sigutil_32.c ++++ b/arch/sparc/kernel/sigutil_32.c +@@ -48,6 +48,10 @@ int save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) + int restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) + { + int err; ++ ++ if (((unsigned long) fpu) & 3) ++ return -EFAULT; ++ + #ifdef CONFIG_SMP + if (test_tsk_thread_flag(current, TIF_USEDFPU)) + regs->psr &= ~PSR_EF; +@@ -97,7 +101,10 @@ int restore_rwin_state(__siginfo_rwin_t __user *rp) + struct thread_info *t = current_thread_info(); + int i, wsaved, err; + +- __get_user(wsaved, &rp->wsaved); ++ if (((unsigned long) rp) & 3) ++ return -EFAULT; ++ ++ get_user(wsaved, &rp->wsaved); + if (wsaved > NSWINS) + return -EFAULT; + +diff --git a/arch/sparc/kernel/sigutil_64.c b/arch/sparc/kernel/sigutil_64.c +index 387834a..36aadcb 100644 +--- a/arch/sparc/kernel/sigutil_64.c ++++ b/arch/sparc/kernel/sigutil_64.c +@@ -37,7 +37,10 @@ int restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) + unsigned long fprs; + int err; + +- err = __get_user(fprs, &fpu->si_fprs); ++ if (((unsigned long) fpu) & 7) ++ return -EFAULT; ++ ++ err = get_user(fprs, &fpu->si_fprs); + fprs_write(0); + regs->tstate &= ~TSTATE_PEF; + if (fprs & FPRS_DL) +@@ -72,7 +75,10 @@ int restore_rwin_state(__siginfo_rwin_t __user *rp) + struct thread_info *t = current_thread_info(); + int i, wsaved, err; + +- __get_user(wsaved, &rp->wsaved); ++ if (((unsigned long) rp) & 7) ++ return -EFAULT; ++ ++ get_user(wsaved, &rp->wsaved); + if (wsaved > NSWINS) + return -EFAULT; + +diff --git a/arch/sparc/kernel/urtt_fill.S b/arch/sparc/kernel/urtt_fill.S +new file mode 100644 +index 0000000..5604a2b +--- /dev/null ++++ b/arch/sparc/kernel/urtt_fill.S +@@ -0,0 +1,98 @@ ++#include <asm/thread_info.h> ++#include <asm/trap_block.h> ++#include <asm/spitfire.h> ++#include <asm/ptrace.h> ++#include <asm/head.h> ++ ++ .text ++ .align 8 ++ .globl user_rtt_fill_fixup_common ++user_rtt_fill_fixup_common: ++ rdpr %cwp, %g1 ++ add %g1, 1, %g1 ++ wrpr %g1, 0x0, %cwp ++ ++ rdpr %wstate, %g2 ++ sll %g2, 3, %g2 ++ wrpr %g2, 0x0, %wstate ++ ++ /* We know %canrestore and %otherwin are both zero. */ ++ ++ sethi %hi(sparc64_kern_pri_context), %g2 ++ ldx [%g2 + %lo(sparc64_kern_pri_context)], %g2 ++ mov PRIMARY_CONTEXT, %g1 ++ ++661: stxa %g2, [%g1] ASI_DMMU ++ .section .sun4v_1insn_patch, "ax" ++ .word 661b ++ stxa %g2, [%g1] ASI_MMU ++ .previous ++ ++ sethi %hi(KERNBASE), %g1 ++ flush %g1 ++ ++ mov %g4, %l4 ++ mov %g5, %l5 ++ brnz,pn %g3, 1f ++ mov %g3, %l3 ++ ++ or %g4, FAULT_CODE_WINFIXUP, %g4 ++ stb %g4, [%g6 + TI_FAULT_CODE] ++ stx %g5, [%g6 + TI_FAULT_ADDR] ++1: ++ mov %g6, %l1 ++ wrpr %g0, 0x0, %tl ++ ++661: nop ++ .section .sun4v_1insn_patch, "ax" ++ .word 661b ++ SET_GL(0) ++ .previous ++ ++ wrpr %g0, RTRAP_PSTATE, %pstate ++ ++ mov %l1, %g6 ++ ldx [%g6 + TI_TASK], %g4 ++ LOAD_PER_CPU_BASE(%g5, %g6, %g1, %g2, %g3) ++ ++ brnz,pn %l3, 1f ++ nop ++ ++ call do_sparc64_fault ++ add %sp, PTREGS_OFF, %o0 ++ ba,pt %xcc, rtrap ++ nop ++ ++1: cmp %g3, 2 ++ bne,pn %xcc, 2f ++ nop ++ ++ sethi %hi(tlb_type), %g1 ++ lduw [%g1 + %lo(tlb_type)], %g1 ++ cmp %g1, 3 ++ bne,pt %icc, 1f ++ add %sp, PTREGS_OFF, %o0 ++ mov %l4, %o2 ++ call sun4v_do_mna ++ mov %l5, %o1 ++ ba,a,pt %xcc, rtrap ++1: mov %l4, %o1 ++ mov %l5, %o2 ++ call mem_address_unaligned ++ nop ++ ba,a,pt %xcc, rtrap ++ ++2: sethi %hi(tlb_type), %g1 ++ mov %l4, %o1 ++ lduw [%g1 + %lo(tlb_type)], %g1 ++ mov %l5, %o2 ++ cmp %g1, 3 ++ bne,pt %icc, 1f ++ add %sp, PTREGS_OFF, %o0 ++ call sun4v_data_access_exception ++ nop ++ ba,a,pt %xcc, rtrap ++ ++1: call spitfire_data_access_exception ++ nop ++ ba,a,pt %xcc, rtrap +diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c +index 4977800..ba52e64 100644 +--- a/arch/sparc/mm/hugetlbpage.c ++++ b/arch/sparc/mm/hugetlbpage.c +@@ -176,17 +176,31 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, + pte_t *ptep, pte_t entry) + { + int i; ++ pte_t orig[2]; ++ unsigned long nptes; + + if (!pte_present(*ptep) && pte_present(entry)) + mm->context.huge_pte_count++; + + addr &= HPAGE_MASK; +- for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { +- set_pte_at(mm, addr, ptep, entry); ++ ++ nptes = 1 << HUGETLB_PAGE_ORDER; ++ orig[0] = *ptep; ++ orig[1] = *(ptep + nptes / 2); ++ for (i = 0; i < nptes; i++) { ++ *ptep = entry; + ptep++; + addr += PAGE_SIZE; + pte_val(entry) += PAGE_SIZE; + } ++ ++ /* Issue TLB flush at REAL_HPAGE_SIZE boundaries */ ++ addr -= REAL_HPAGE_SIZE; ++ ptep -= nptes / 2; ++ maybe_tlb_batch_add(mm, addr, ptep, orig[1], 0); ++ addr -= REAL_HPAGE_SIZE; ++ ptep -= nptes / 2; ++ maybe_tlb_batch_add(mm, addr, ptep, orig[0], 0); + } + + pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, +@@ -194,19 +208,28 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, + { + pte_t entry; + int i; ++ unsigned long nptes; + + entry = *ptep; + if (pte_present(entry)) + mm->context.huge_pte_count--; + + addr &= HPAGE_MASK; +- +- for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { +- pte_clear(mm, addr, ptep); ++ nptes = 1 << HUGETLB_PAGE_ORDER; ++ for (i = 0; i < nptes; i++) { ++ *ptep = __pte(0UL); + addr += PAGE_SIZE; + ptep++; + } + ++ /* Issue TLB flush at REAL_HPAGE_SIZE boundaries */ ++ addr -= REAL_HPAGE_SIZE; ++ ptep -= nptes / 2; ++ maybe_tlb_batch_add(mm, addr, ptep, entry, 0); ++ addr -= REAL_HPAGE_SIZE; ++ ptep -= nptes / 2; ++ maybe_tlb_batch_add(mm, addr, ptep, entry, 0); ++ + return entry; + } + +diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c +index 09e8388..14bb0d5 100644 +--- a/arch/sparc/mm/init_64.c ++++ b/arch/sparc/mm/init_64.c +@@ -324,18 +324,6 @@ static void __update_mmu_tsb_insert(struct mm_struct *mm, unsigned long tsb_inde + tsb_insert(tsb, tag, tte); + } + +-#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) +-static inline bool is_hugetlb_pte(pte_t pte) +-{ +- if ((tlb_type == hypervisor && +- (pte_val(pte) & _PAGE_SZALL_4V) == _PAGE_SZHUGE_4V) || +- (tlb_type != hypervisor && +- (pte_val(pte) & _PAGE_SZALL_4U) == _PAGE_SZHUGE_4U)) +- return true; +- return false; +-} +-#endif +- + void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep) + { + struct mm_struct *mm; +@@ -2836,9 +2824,10 @@ void hugetlb_setup(struct pt_regs *regs) + * the Data-TLB for huge pages. + */ + if (tlb_type == cheetah_plus) { ++ bool need_context_reload = false; + unsigned long ctx; + +- spin_lock(&ctx_alloc_lock); ++ spin_lock_irq(&ctx_alloc_lock); + ctx = mm->context.sparc64_ctx_val; + ctx &= ~CTX_PGSZ_MASK; + ctx |= CTX_PGSZ_BASE << CTX_PGSZ0_SHIFT; +@@ -2857,9 +2846,12 @@ void hugetlb_setup(struct pt_regs *regs) + * also executing in this address space. + */ + mm->context.sparc64_ctx_val = ctx; +- on_each_cpu(context_reload, mm, 0); ++ need_context_reload = true; + } +- spin_unlock(&ctx_alloc_lock); ++ spin_unlock_irq(&ctx_alloc_lock); ++ ++ if (need_context_reload) ++ on_each_cpu(context_reload, mm, 0); + } + } + #endif +diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c +index 9df2190..f81cd97 100644 +--- a/arch/sparc/mm/tlb.c ++++ b/arch/sparc/mm/tlb.c +@@ -67,7 +67,7 @@ void arch_leave_lazy_mmu_mode(void) + } + + static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr, +- bool exec) ++ bool exec, bool huge) + { + struct tlb_batch *tb = &get_cpu_var(tlb_batch); + unsigned long nr; +@@ -84,13 +84,21 @@ static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr, + } + + if (!tb->active) { +- flush_tsb_user_page(mm, vaddr); ++ flush_tsb_user_page(mm, vaddr, huge); + global_flush_tlb_page(mm, vaddr); + goto out; + } + +- if (nr == 0) ++ if (nr == 0) { + tb->mm = mm; ++ tb->huge = huge; ++ } ++ ++ if (tb->huge != huge) { ++ flush_tlb_pending(); ++ tb->huge = huge; ++ nr = 0; ++ } + + tb->vaddrs[nr] = vaddr; + tb->tlb_nr = ++nr; +@@ -104,6 +112,8 @@ out: + void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, + pte_t *ptep, pte_t orig, int fullmm) + { ++ bool huge = is_hugetlb_pte(orig); ++ + if (tlb_type != hypervisor && + pte_dirty(orig)) { + unsigned long paddr, pfn = pte_pfn(orig); +@@ -129,7 +139,7 @@ void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, + + no_cache_flush: + if (!fullmm) +- tlb_batch_add_one(mm, vaddr, pte_exec(orig)); ++ tlb_batch_add_one(mm, vaddr, pte_exec(orig), huge); + } + + #ifdef CONFIG_TRANSPARENT_HUGEPAGE +@@ -145,7 +155,7 @@ static void tlb_batch_pmd_scan(struct mm_struct *mm, unsigned long vaddr, + if (pte_val(*pte) & _PAGE_VALID) { + bool exec = pte_exec(*pte); + +- tlb_batch_add_one(mm, vaddr, exec); ++ tlb_batch_add_one(mm, vaddr, exec, false); + } + pte++; + vaddr += PAGE_SIZE; +@@ -185,8 +195,9 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr, + pte_t orig_pte = __pte(pmd_val(orig)); + bool exec = pte_exec(orig_pte); + +- tlb_batch_add_one(mm, addr, exec); +- tlb_batch_add_one(mm, addr + REAL_HPAGE_SIZE, exec); ++ tlb_batch_add_one(mm, addr, exec, true); ++ tlb_batch_add_one(mm, addr + REAL_HPAGE_SIZE, exec, ++ true); + } else { + tlb_batch_pmd_scan(mm, addr, orig); + } +diff --git a/arch/sparc/mm/tsb.c b/arch/sparc/mm/tsb.c +index a065766..a0604a4 100644 +--- a/arch/sparc/mm/tsb.c ++++ b/arch/sparc/mm/tsb.c +@@ -76,14 +76,15 @@ void flush_tsb_user(struct tlb_batch *tb) + + spin_lock_irqsave(&mm->context.lock, flags); + +- base = (unsigned long) mm->context.tsb_block[MM_TSB_BASE].tsb; +- nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; +- if (tlb_type == cheetah_plus || tlb_type == hypervisor) +- base = __pa(base); +- __flush_tsb_one(tb, PAGE_SHIFT, base, nentries); +- ++ if (!tb->huge) { ++ base = (unsigned long) mm->context.tsb_block[MM_TSB_BASE].tsb; ++ nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; ++ if (tlb_type == cheetah_plus || tlb_type == hypervisor) ++ base = __pa(base); ++ __flush_tsb_one(tb, PAGE_SHIFT, base, nentries); ++ } + #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) +- if (mm->context.tsb_block[MM_TSB_HUGE].tsb) { ++ if (tb->huge && mm->context.tsb_block[MM_TSB_HUGE].tsb) { + base = (unsigned long) mm->context.tsb_block[MM_TSB_HUGE].tsb; + nentries = mm->context.tsb_block[MM_TSB_HUGE].tsb_nentries; + if (tlb_type == cheetah_plus || tlb_type == hypervisor) +@@ -94,20 +95,21 @@ void flush_tsb_user(struct tlb_batch *tb) + spin_unlock_irqrestore(&mm->context.lock, flags); + } + +-void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr) ++void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr, bool huge) + { + unsigned long nentries, base, flags; + + spin_lock_irqsave(&mm->context.lock, flags); + +- base = (unsigned long) mm->context.tsb_block[MM_TSB_BASE].tsb; +- nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; +- if (tlb_type == cheetah_plus || tlb_type == hypervisor) +- base = __pa(base); +- __flush_tsb_one_entry(base, vaddr, PAGE_SHIFT, nentries); +- ++ if (!huge) { ++ base = (unsigned long) mm->context.tsb_block[MM_TSB_BASE].tsb; ++ nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; ++ if (tlb_type == cheetah_plus || tlb_type == hypervisor) ++ base = __pa(base); ++ __flush_tsb_one_entry(base, vaddr, PAGE_SHIFT, nentries); ++ } + #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) +- if (mm->context.tsb_block[MM_TSB_HUGE].tsb) { ++ if (huge && mm->context.tsb_block[MM_TSB_HUGE].tsb) { + base = (unsigned long) mm->context.tsb_block[MM_TSB_HUGE].tsb; + nentries = mm->context.tsb_block[MM_TSB_HUGE].tsb_nentries; + if (tlb_type == cheetah_plus || tlb_type == hypervisor) +diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c +index 06cbe25..87bd6b6 100644 +--- a/arch/x86/kernel/traps.c ++++ b/arch/x86/kernel/traps.c +@@ -95,6 +95,12 @@ static inline void cond_local_irq_disable(struct pt_regs *regs) + local_irq_disable(); + } + ++/* ++ * In IST context, we explicitly disable preemption. This serves two ++ * purposes: it makes it much less likely that we would accidentally ++ * schedule in IST context and it will force a warning if we somehow ++ * manage to schedule by accident. ++ */ + void ist_enter(struct pt_regs *regs) + { + if (user_mode(regs)) { +@@ -109,13 +115,7 @@ void ist_enter(struct pt_regs *regs) + rcu_nmi_enter(); + } + +- /* +- * We are atomic because we're on the IST stack; or we're on +- * x86_32, in which case we still shouldn't schedule; or we're +- * on x86_64 and entered from user mode, in which case we're +- * still atomic unless ist_begin_non_atomic is called. +- */ +- preempt_count_add(HARDIRQ_OFFSET); ++ preempt_disable(); + + /* This code is a bit fragile. Test it. */ + RCU_LOCKDEP_WARN(!rcu_is_watching(), "ist_enter didn't work"); +@@ -123,7 +123,7 @@ void ist_enter(struct pt_regs *regs) + + void ist_exit(struct pt_regs *regs) + { +- preempt_count_sub(HARDIRQ_OFFSET); ++ preempt_enable_no_resched(); + + if (!user_mode(regs)) + rcu_nmi_exit(); +@@ -154,7 +154,7 @@ void ist_begin_non_atomic(struct pt_regs *regs) + BUG_ON((unsigned long)(current_top_of_stack() - + current_stack_pointer()) >= THREAD_SIZE); + +- preempt_count_sub(HARDIRQ_OFFSET); ++ preempt_enable_no_resched(); + } + + /** +@@ -164,7 +164,7 @@ void ist_begin_non_atomic(struct pt_regs *regs) + */ + void ist_end_non_atomic(void) + { +- preempt_count_add(HARDIRQ_OFFSET); ++ preempt_disable(); + } + + static nokprobe_inline int +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c +index 9b7798c..6b9701b 100644 +--- a/arch/x86/kvm/x86.c ++++ b/arch/x86/kvm/x86.c +@@ -3032,6 +3032,11 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu, + if (dbgregs->flags) + return -EINVAL; + ++ if (dbgregs->dr6 & ~0xffffffffull) ++ return -EINVAL; ++ if (dbgregs->dr7 & ~0xffffffffull) ++ return -EINVAL; ++ + memcpy(vcpu->arch.db, dbgregs->db, sizeof(vcpu->arch.db)); + kvm_update_dr0123(vcpu); + vcpu->arch.dr6 = dbgregs->dr6; +diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig +index 91a7e04..477cbf39 100644 +--- a/crypto/asymmetric_keys/Kconfig ++++ b/crypto/asymmetric_keys/Kconfig +@@ -13,6 +13,7 @@ config ASYMMETRIC_PUBLIC_KEY_SUBTYPE + tristate "Asymmetric public-key crypto algorithm subtype" + select MPILIB + select CRYPTO_HASH_INFO ++ select CRYPTO_AKCIPHER + help + This option provides support for asymmetric public key type handling. + If signature generation and/or verification are to be used, +diff --git a/drivers/crypto/ccp/ccp-crypto-aes-xts.c b/drivers/crypto/ccp/ccp-crypto-aes-xts.c +index 52c7395..0d0d452 100644 +--- a/drivers/crypto/ccp/ccp-crypto-aes-xts.c ++++ b/drivers/crypto/ccp/ccp-crypto-aes-xts.c +@@ -122,6 +122,7 @@ static int ccp_aes_xts_crypt(struct ablkcipher_request *req, + struct ccp_ctx *ctx = crypto_tfm_ctx(req->base.tfm); + struct ccp_aes_req_ctx *rctx = ablkcipher_request_ctx(req); + unsigned int unit; ++ u32 unit_size; + int ret; + + if (!ctx->u.aes.key_len) +@@ -133,11 +134,17 @@ static int ccp_aes_xts_crypt(struct ablkcipher_request *req, + if (!req->info) + return -EINVAL; + +- for (unit = 0; unit < ARRAY_SIZE(unit_size_map); unit++) +- if (!(req->nbytes & (unit_size_map[unit].size - 1))) +- break; ++ unit_size = CCP_XTS_AES_UNIT_SIZE__LAST; ++ if (req->nbytes <= unit_size_map[0].size) { ++ for (unit = 0; unit < ARRAY_SIZE(unit_size_map); unit++) { ++ if (!(req->nbytes & (unit_size_map[unit].size - 1))) { ++ unit_size = unit_size_map[unit].value; ++ break; ++ } ++ } ++ } + +- if ((unit_size_map[unit].value == CCP_XTS_AES_UNIT_SIZE__LAST) || ++ if ((unit_size == CCP_XTS_AES_UNIT_SIZE__LAST) || + (ctx->u.aes.key_len != AES_KEYSIZE_128)) { + /* Use the fallback to process the request for any + * unsupported unit sizes or key sizes +@@ -158,7 +165,7 @@ static int ccp_aes_xts_crypt(struct ablkcipher_request *req, + rctx->cmd.engine = CCP_ENGINE_XTS_AES_128; + rctx->cmd.u.xts.action = (encrypt) ? CCP_AES_ACTION_ENCRYPT + : CCP_AES_ACTION_DECRYPT; +- rctx->cmd.u.xts.unit_size = unit_size_map[unit].value; ++ rctx->cmd.u.xts.unit_size = unit_size; + rctx->cmd.u.xts.key = &ctx->u.aes.key_sg; + rctx->cmd.u.xts.key_len = ctx->u.aes.key_len; + rctx->cmd.u.xts.iv = &rctx->iv_sg; +diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c +index 2fd38d5..3c5e832 100644 +--- a/drivers/gpio/gpio-bcm-kona.c ++++ b/drivers/gpio/gpio-bcm-kona.c +@@ -546,11 +546,11 @@ static void bcm_kona_gpio_reset(struct bcm_kona_gpio *kona_gpio) + /* disable interrupts and clear status */ + for (i = 0; i < kona_gpio->num_bank; i++) { + /* Unlock the entire bank first */ +- bcm_kona_gpio_write_lock_regs(kona_gpio, i, UNLOCK_CODE); ++ bcm_kona_gpio_write_lock_regs(reg_base, i, UNLOCK_CODE); + writel(0xffffffff, reg_base + GPIO_INT_MASK(i)); + writel(0xffffffff, reg_base + GPIO_INT_STATUS(i)); + /* Now re-lock the bank */ +- bcm_kona_gpio_write_lock_regs(kona_gpio, i, LOCK_CODE); ++ bcm_kona_gpio_write_lock_regs(reg_base, i, LOCK_CODE); + } + } + +diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c +index 66d3d24..e72794e 100644 +--- a/drivers/gpio/gpio-zynq.c ++++ b/drivers/gpio/gpio-zynq.c +@@ -709,11 +709,17 @@ static int zynq_gpio_probe(struct platform_device *pdev) + dev_err(&pdev->dev, "input clock not found.\n"); + return PTR_ERR(gpio->clk); + } ++ ret = clk_prepare_enable(gpio->clk); ++ if (ret) { ++ dev_err(&pdev->dev, "Unable to enable clock.\n"); ++ return ret; ++ } + ++ pm_runtime_set_active(&pdev->dev); + pm_runtime_enable(&pdev->dev); + ret = pm_runtime_get_sync(&pdev->dev); + if (ret < 0) +- return ret; ++ goto err_pm_dis; + + /* report a bug if gpio chip registration fails */ + ret = gpiochip_add_data(chip, gpio); +@@ -745,6 +751,9 @@ err_rm_gpiochip: + gpiochip_remove(chip); + err_pm_put: + pm_runtime_put(&pdev->dev); ++err_pm_dis: ++ pm_runtime_disable(&pdev->dev); ++ clk_disable_unprepare(gpio->clk); + + return ret; + } +diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c +index b747c76..cf3e712 100644 +--- a/drivers/gpio/gpiolib.c ++++ b/drivers/gpio/gpiolib.c +@@ -438,7 +438,6 @@ static void gpiodevice_release(struct device *dev) + { + struct gpio_device *gdev = dev_get_drvdata(dev); + +- cdev_del(&gdev->chrdev); + list_del(&gdev->list); + ida_simple_remove(&gpio_ida, gdev->id); + kfree(gdev->label); +@@ -471,7 +470,6 @@ static int gpiochip_setup_dev(struct gpio_device *gdev) + + /* From this point, the .release() function cleans up gpio_device */ + gdev->dev.release = gpiodevice_release; +- get_device(&gdev->dev); + pr_debug("%s: registered GPIOs %d to %d on device: %s (%s)\n", + __func__, gdev->base, gdev->base + gdev->ngpio - 1, + dev_name(&gdev->dev), gdev->chip->label ? : "generic"); +@@ -742,6 +740,8 @@ void gpiochip_remove(struct gpio_chip *chip) + * be removed, else it will be dangling until the last user is + * gone. + */ ++ cdev_del(&gdev->chrdev); ++ device_del(&gdev->dev); + put_device(&gdev->dev); + } + EXPORT_SYMBOL_GPL(gpiochip_remove); +@@ -841,7 +841,7 @@ struct gpio_chip *gpiochip_find(void *data, + + spin_lock_irqsave(&gpio_lock, flags); + list_for_each_entry(gdev, &gpio_devices, list) +- if (match(gdev->chip, data)) ++ if (gdev->chip && match(gdev->chip, data)) + break; + + /* No match? */ +@@ -1339,10 +1339,13 @@ done: + /* + * This descriptor validation needs to be inserted verbatim into each + * function taking a descriptor, so we need to use a preprocessor +- * macro to avoid endless duplication. ++ * macro to avoid endless duplication. If the desc is NULL it is an ++ * optional GPIO and calls should just bail out. + */ + #define VALIDATE_DESC(desc) do { \ +- if (!desc || !desc->gdev) { \ ++ if (!desc) \ ++ return 0; \ ++ if (!desc->gdev) { \ + pr_warn("%s: invalid GPIO\n", __func__); \ + return -EINVAL; \ + } \ +@@ -1353,7 +1356,9 @@ done: + } } while (0) + + #define VALIDATE_DESC_VOID(desc) do { \ +- if (!desc || !desc->gdev) { \ ++ if (!desc) \ ++ return; \ ++ if (!desc->gdev) { \ + pr_warn("%s: invalid GPIO\n", __func__); \ + return; \ + } \ +@@ -2001,7 +2006,14 @@ int gpiod_to_irq(const struct gpio_desc *desc) + struct gpio_chip *chip; + int offset; + +- VALIDATE_DESC(desc); ++ /* ++ * Cannot VALIDATE_DESC() here as gpiod_to_irq() consumer semantics ++ * requires this function to not return zero on an invalid descriptor ++ * but rather a negative error number. ++ */ ++ if (!desc || !desc->gdev || !desc->gdev->chip) ++ return -EINVAL; ++ + chip = desc->gdev->chip; + offset = gpio_chip_hwgpio(desc); + return chip->to_irq ? chip->to_irq(chip, offset) : -ENXIO; +diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c +index e08f962..f30de80 100644 +--- a/drivers/gpu/drm/drm_crtc.c ++++ b/drivers/gpu/drm/drm_crtc.c +@@ -3434,6 +3434,24 @@ int drm_mode_addfb2(struct drm_device *dev, + return 0; + } + ++struct drm_mode_rmfb_work { ++ struct work_struct work; ++ struct list_head fbs; ++}; ++ ++static void drm_mode_rmfb_work_fn(struct work_struct *w) ++{ ++ struct drm_mode_rmfb_work *arg = container_of(w, typeof(*arg), work); ++ ++ while (!list_empty(&arg->fbs)) { ++ struct drm_framebuffer *fb = ++ list_first_entry(&arg->fbs, typeof(*fb), filp_head); ++ ++ list_del_init(&fb->filp_head); ++ drm_framebuffer_remove(fb); ++ } ++} ++ + /** + * drm_mode_rmfb - remove an FB from the configuration + * @dev: drm device for the ioctl +@@ -3474,7 +3492,25 @@ int drm_mode_rmfb(struct drm_device *dev, + mutex_unlock(&dev->mode_config.fb_lock); + mutex_unlock(&file_priv->fbs_lock); + +- drm_framebuffer_unreference(fb); ++ /* ++ * we now own the reference that was stored in the fbs list ++ * ++ * drm_framebuffer_remove may fail with -EINTR on pending signals, ++ * so run this in a separate stack as there's no way to correctly ++ * handle this after the fb is already removed from the lookup table. ++ */ ++ if (atomic_read(&fb->refcount.refcount) > 1) { ++ struct drm_mode_rmfb_work arg; ++ ++ INIT_WORK_ONSTACK(&arg.work, drm_mode_rmfb_work_fn); ++ INIT_LIST_HEAD(&arg.fbs); ++ list_add_tail(&fb->filp_head, &arg.fbs); ++ ++ schedule_work(&arg.work); ++ flush_work(&arg.work); ++ destroy_work_on_stack(&arg.work); ++ } else ++ drm_framebuffer_unreference(fb); + + return 0; + +@@ -3627,7 +3663,6 @@ out_err1: + return ret; + } + +- + /** + * drm_fb_release - remove and free the FBs on this file + * @priv: drm file for the ioctl +@@ -3642,6 +3677,9 @@ out_err1: + void drm_fb_release(struct drm_file *priv) + { + struct drm_framebuffer *fb, *tfb; ++ struct drm_mode_rmfb_work arg; ++ ++ INIT_LIST_HEAD(&arg.fbs); + + /* + * When the file gets released that means no one else can access the fb +@@ -3654,10 +3692,22 @@ void drm_fb_release(struct drm_file *priv) + * at it any more. + */ + list_for_each_entry_safe(fb, tfb, &priv->fbs, filp_head) { +- list_del_init(&fb->filp_head); ++ if (atomic_read(&fb->refcount.refcount) > 1) { ++ list_move_tail(&fb->filp_head, &arg.fbs); ++ } else { ++ list_del_init(&fb->filp_head); + +- /* This drops the fpriv->fbs reference. */ +- drm_framebuffer_unreference(fb); ++ /* This drops the fpriv->fbs reference. */ ++ drm_framebuffer_unreference(fb); ++ } ++ } ++ ++ if (!list_empty(&arg.fbs)) { ++ INIT_WORK_ONSTACK(&arg.work, drm_mode_rmfb_work_fn); ++ ++ schedule_work(&arg.work); ++ flush_work(&arg.work); ++ destroy_work_on_stack(&arg.work); + } + } + +diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +index 1c21220..d1a46ef 100644 +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -1829,7 +1829,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg) + /* IRQs are synced during runtime_suspend, we don't require a wakeref */ + disable_rpm_wakeref_asserts(dev_priv); + +- do { ++ for (;;) { + master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL; + iir = I915_READ(VLV_IIR); + +@@ -1857,7 +1857,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg) + + I915_WRITE(GEN8_MASTER_IRQ, DE_MASTER_IRQ_CONTROL); + POSTING_READ(GEN8_MASTER_IRQ); +- } while (0); ++ } + + enable_rpm_wakeref_asserts(dev_priv); + +diff --git a/drivers/net/ethernet/atheros/alx/alx.h b/drivers/net/ethernet/atheros/alx/alx.h +index 8fc93c5..d02c424 100644 +--- a/drivers/net/ethernet/atheros/alx/alx.h ++++ b/drivers/net/ethernet/atheros/alx/alx.h +@@ -96,6 +96,10 @@ struct alx_priv { + unsigned int rx_ringsz; + unsigned int rxbuf_size; + ++ struct page *rx_page; ++ unsigned int rx_page_offset; ++ unsigned int rx_frag_size; ++ + struct napi_struct napi; + struct alx_tx_queue txq; + struct alx_rx_queue rxq; +diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c +index 55b118e..8611811 100644 +--- a/drivers/net/ethernet/atheros/alx/main.c ++++ b/drivers/net/ethernet/atheros/alx/main.c +@@ -70,6 +70,35 @@ static void alx_free_txbuf(struct alx_priv *alx, int entry) + } + } + ++static struct sk_buff *alx_alloc_skb(struct alx_priv *alx, gfp_t gfp) ++{ ++ struct sk_buff *skb; ++ struct page *page; ++ ++ if (alx->rx_frag_size > PAGE_SIZE) ++ return __netdev_alloc_skb(alx->dev, alx->rxbuf_size, gfp); ++ ++ page = alx->rx_page; ++ if (!page) { ++ alx->rx_page = page = alloc_page(gfp); ++ if (unlikely(!page)) ++ return NULL; ++ alx->rx_page_offset = 0; ++ } ++ ++ skb = build_skb(page_address(page) + alx->rx_page_offset, ++ alx->rx_frag_size); ++ if (likely(skb)) { ++ alx->rx_page_offset += alx->rx_frag_size; ++ if (alx->rx_page_offset >= PAGE_SIZE) ++ alx->rx_page = NULL; ++ else ++ get_page(page); ++ } ++ return skb; ++} ++ ++ + static int alx_refill_rx_ring(struct alx_priv *alx, gfp_t gfp) + { + struct alx_rx_queue *rxq = &alx->rxq; +@@ -86,7 +115,7 @@ static int alx_refill_rx_ring(struct alx_priv *alx, gfp_t gfp) + while (!cur_buf->skb && next != rxq->read_idx) { + struct alx_rfd *rfd = &rxq->rfd[cur]; + +- skb = __netdev_alloc_skb(alx->dev, alx->rxbuf_size, gfp); ++ skb = alx_alloc_skb(alx, gfp); + if (!skb) + break; + dma = dma_map_single(&alx->hw.pdev->dev, +@@ -124,6 +153,7 @@ static int alx_refill_rx_ring(struct alx_priv *alx, gfp_t gfp) + alx_write_mem16(&alx->hw, ALX_RFD_PIDX, cur); + } + ++ + return count; + } + +@@ -592,6 +622,11 @@ static void alx_free_rings(struct alx_priv *alx) + kfree(alx->txq.bufs); + kfree(alx->rxq.bufs); + ++ if (alx->rx_page) { ++ put_page(alx->rx_page); ++ alx->rx_page = NULL; ++ } ++ + dma_free_coherent(&alx->hw.pdev->dev, + alx->descmem.size, + alx->descmem.virt, +@@ -646,6 +681,7 @@ static int alx_request_irq(struct alx_priv *alx) + alx->dev->name, alx); + if (!err) + goto out; ++ + /* fall back to legacy interrupt */ + pci_disable_msi(alx->hw.pdev); + } +@@ -689,6 +725,7 @@ static int alx_init_sw(struct alx_priv *alx) + struct pci_dev *pdev = alx->hw.pdev; + struct alx_hw *hw = &alx->hw; + int err; ++ unsigned int head_size; + + err = alx_identify_hw(alx); + if (err) { +@@ -704,7 +741,12 @@ static int alx_init_sw(struct alx_priv *alx) + + hw->smb_timer = 400; + hw->mtu = alx->dev->mtu; ++ + alx->rxbuf_size = ALX_MAX_FRAME_LEN(hw->mtu); ++ head_size = SKB_DATA_ALIGN(alx->rxbuf_size + NET_SKB_PAD) + ++ SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); ++ alx->rx_frag_size = roundup_pow_of_two(head_size); ++ + alx->tx_ringsz = 256; + alx->rx_ringsz = 512; + hw->imt = 200; +@@ -806,6 +848,7 @@ static int alx_change_mtu(struct net_device *netdev, int mtu) + { + struct alx_priv *alx = netdev_priv(netdev); + int max_frame = ALX_MAX_FRAME_LEN(mtu); ++ unsigned int head_size; + + if ((max_frame < ALX_MIN_FRAME_SIZE) || + (max_frame > ALX_MAX_FRAME_SIZE)) +@@ -817,6 +860,9 @@ static int alx_change_mtu(struct net_device *netdev, int mtu) + netdev->mtu = mtu; + alx->hw.mtu = mtu; + alx->rxbuf_size = max(max_frame, ALX_DEF_RXBUF_SIZE); ++ head_size = SKB_DATA_ALIGN(alx->rxbuf_size + NET_SKB_PAD) + ++ SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); ++ alx->rx_frag_size = roundup_pow_of_two(head_size); + netdev_update_features(netdev); + if (netif_running(netdev)) + alx_reinit(alx); +diff --git a/drivers/net/ethernet/ezchip/nps_enet.c b/drivers/net/ethernet/ezchip/nps_enet.c +index 085f912..06f0317 100644 +--- a/drivers/net/ethernet/ezchip/nps_enet.c ++++ b/drivers/net/ethernet/ezchip/nps_enet.c +@@ -205,8 +205,10 @@ static int nps_enet_poll(struct napi_struct *napi, int budget) + * re-adding ourselves to the poll list. + */ + +- if (priv->tx_skb && !tx_ctrl_ct) ++ if (priv->tx_skb && !tx_ctrl_ct) { ++ nps_enet_reg_set(priv, NPS_ENET_REG_BUF_INT_ENABLE, 0); + napi_reschedule(napi); ++ } + } + + return work_done; +diff --git a/drivers/net/ethernet/marvell/mvneta_bm.c b/drivers/net/ethernet/marvell/mvneta_bm.c +index 01fccec..466939f 100644 +--- a/drivers/net/ethernet/marvell/mvneta_bm.c ++++ b/drivers/net/ethernet/marvell/mvneta_bm.c +@@ -189,6 +189,7 @@ struct mvneta_bm_pool *mvneta_bm_pool_use(struct mvneta_bm *priv, u8 pool_id, + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); + hwbm_pool->construct = mvneta_bm_construct; + hwbm_pool->priv = new_pool; ++ spin_lock_init(&hwbm_pool->lock); + + /* Create new pool */ + err = mvneta_bm_pool_create(priv, new_pool); +diff --git a/drivers/net/ethernet/rocker/rocker_ofdpa.c b/drivers/net/ethernet/rocker/rocker_ofdpa.c +index 0e758bc..1ca7963 100644 +--- a/drivers/net/ethernet/rocker/rocker_ofdpa.c ++++ b/drivers/net/ethernet/rocker/rocker_ofdpa.c +@@ -2727,7 +2727,7 @@ static int ofdpa_port_obj_fib4_add(struct rocker_port *rocker_port, + + return ofdpa_port_fib_ipv4(ofdpa_port, trans, + htonl(fib4->dst), fib4->dst_len, +- &fib4->fi, fib4->tb_id, 0); ++ fib4->fi, fib4->tb_id, 0); + } + + static int ofdpa_port_obj_fib4_del(struct rocker_port *rocker_port, +@@ -2737,7 +2737,7 @@ static int ofdpa_port_obj_fib4_del(struct rocker_port *rocker_port, + + return ofdpa_port_fib_ipv4(ofdpa_port, NULL, + htonl(fib4->dst), fib4->dst_len, +- &fib4->fi, fib4->tb_id, ++ fib4->fi, fib4->tb_id, + OFDPA_OP_FLAG_REMOVE); + } + +diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c +index 1681084..1f30912 100644 +--- a/drivers/net/ethernet/sfc/ef10.c ++++ b/drivers/net/ethernet/sfc/ef10.c +@@ -619,6 +619,17 @@ fail: + return rc; + } + ++static void efx_ef10_forget_old_piobufs(struct efx_nic *efx) ++{ ++ struct efx_channel *channel; ++ struct efx_tx_queue *tx_queue; ++ ++ /* All our existing PIO buffers went away */ ++ efx_for_each_channel(channel, efx) ++ efx_for_each_channel_tx_queue(tx_queue, channel) ++ tx_queue->piobuf = NULL; ++} ++ + #else /* !EFX_USE_PIO */ + + static int efx_ef10_alloc_piobufs(struct efx_nic *efx, unsigned int n) +@@ -635,6 +646,10 @@ static void efx_ef10_free_piobufs(struct efx_nic *efx) + { + } + ++static void efx_ef10_forget_old_piobufs(struct efx_nic *efx) ++{ ++} ++ + #endif /* EFX_USE_PIO */ + + static void efx_ef10_remove(struct efx_nic *efx) +@@ -1018,6 +1033,7 @@ static void efx_ef10_reset_mc_allocations(struct efx_nic *efx) + nic_data->must_realloc_vis = true; + nic_data->must_restore_filters = true; + nic_data->must_restore_piobufs = true; ++ efx_ef10_forget_old_piobufs(efx); + nic_data->rx_rss_context = EFX_EF10_RSS_CONTEXT_INVALID; + + /* Driver-created vswitches and vports must be re-created */ +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +index 06704ca..8683a21 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +@@ -209,7 +209,7 @@ int stmmac_mdio_register(struct net_device *ndev) + return -ENOMEM; + + if (mdio_bus_data->irqs) +- memcpy(new_bus->irq, mdio_bus_data, sizeof(new_bus->irq)); ++ memcpy(new_bus->irq, mdio_bus_data->irqs, sizeof(new_bus->irq)); + + #ifdef CONFIG_OF + if (priv->device->of_node) +diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c +index 7b0a644..9fcb489 100644 +--- a/drivers/net/geneve.c ++++ b/drivers/net/geneve.c +@@ -336,15 +336,15 @@ static int geneve_udp_encap_recv(struct sock *sk, struct sk_buff *skb) + + /* Need Geneve and inner Ethernet header to be present */ + if (unlikely(!pskb_may_pull(skb, GENEVE_BASE_HLEN))) +- goto error; ++ goto drop; + + /* Return packets with reserved bits set */ + geneveh = geneve_hdr(skb); + if (unlikely(geneveh->ver != GENEVE_VER)) +- goto error; ++ goto drop; + + if (unlikely(geneveh->proto_type != htons(ETH_P_TEB))) +- goto error; ++ goto drop; + + gs = rcu_dereference_sk_user_data(sk); + if (!gs) +@@ -367,10 +367,6 @@ drop: + /* Consume bad packet */ + kfree_skb(skb); + return 0; +- +-error: +- /* Let the UDP layer deal with the skb */ +- return 1; + } + + static struct socket *geneve_create_sock(struct net *net, bool ipv6, +diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c +index 92eaab95..9e803bb 100644 +--- a/drivers/net/macsec.c ++++ b/drivers/net/macsec.c +@@ -1645,7 +1645,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info) + if (tb_sa[MACSEC_SA_ATTR_ACTIVE]) + rx_sa->active = !!nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]); + +- nla_memcpy(rx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEY], MACSEC_KEYID_LEN); ++ nla_memcpy(rx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEYID], MACSEC_KEYID_LEN); + rx_sa->sc = rx_sc; + rcu_assign_pointer(rx_sc->sa[assoc_num], rx_sa); + +@@ -1784,7 +1784,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info) + return -ENOMEM; + } + +- nla_memcpy(tx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEY], MACSEC_KEYID_LEN); ++ nla_memcpy(tx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEYID], MACSEC_KEYID_LEN); + + spin_lock_bh(&tx_sa->lock); + tx_sa->next_pn = nla_get_u32(tb_sa[MACSEC_SA_ATTR_PN]); +diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c +index a0f64cb..2ace126 100644 +--- a/drivers/net/team/team.c ++++ b/drivers/net/team/team.c +@@ -990,7 +990,7 @@ static void team_port_disable(struct team *team, + #define TEAM_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ + NETIF_F_RXCSUM | NETIF_F_ALL_TSO) + +-static void __team_compute_features(struct team *team) ++static void ___team_compute_features(struct team *team) + { + struct team_port *port; + u32 vlan_features = TEAM_VLAN_FEATURES & NETIF_F_ALL_FOR_ALL; +@@ -1021,15 +1021,20 @@ static void __team_compute_features(struct team *team) + team->dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; + if (dst_release_flag == (IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM)) + team->dev->priv_flags |= IFF_XMIT_DST_RELEASE; ++} + ++static void __team_compute_features(struct team *team) ++{ ++ ___team_compute_features(team); + netdev_change_features(team->dev); + } + + static void team_compute_features(struct team *team) + { + mutex_lock(&team->lock); +- __team_compute_features(team); ++ ___team_compute_features(team); + mutex_unlock(&team->lock); ++ netdev_change_features(team->dev); + } + + static int team_port_enter(struct team *team, struct team_port *port) +diff --git a/drivers/net/tun.c b/drivers/net/tun.c +index 2c9e45f5..dda4905 100644 +--- a/drivers/net/tun.c ++++ b/drivers/net/tun.c +@@ -568,11 +568,13 @@ static void tun_detach_all(struct net_device *dev) + for (i = 0; i < n; i++) { + tfile = rtnl_dereference(tun->tfiles[i]); + BUG_ON(!tfile); ++ tfile->socket.sk->sk_shutdown = RCV_SHUTDOWN; + tfile->socket.sk->sk_data_ready(tfile->socket.sk); + RCU_INIT_POINTER(tfile->tun, NULL); + --tun->numqueues; + } + list_for_each_entry(tfile, &tun->disabled, next) { ++ tfile->socket.sk->sk_shutdown = RCV_SHUTDOWN; + tfile->socket.sk->sk_data_ready(tfile->socket.sk); + RCU_INIT_POINTER(tfile->tun, NULL); + } +@@ -628,6 +630,7 @@ static int tun_attach(struct tun_struct *tun, struct file *file, bool skip_filte + goto out; + } + tfile->queue_index = tun->numqueues; ++ tfile->socket.sk->sk_shutdown &= ~RCV_SHUTDOWN; + rcu_assign_pointer(tfile->tun, tun); + rcu_assign_pointer(tun->tfiles[tun->numqueues], tfile); + tun->numqueues++; +@@ -1425,9 +1428,6 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile, + if (!iov_iter_count(to)) + return 0; + +- if (tun->dev->reg_state != NETREG_REGISTERED) +- return -EIO; +- + /* Read frames from queue */ + skb = __skb_recv_datagram(tfile->socket.sk, noblock ? MSG_DONTWAIT : 0, + &peeked, &off, &err); +diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c +index 8ac261a..7e29b55 100644 +--- a/drivers/net/vxlan.c ++++ b/drivers/net/vxlan.c +@@ -1262,7 +1262,7 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb) + + /* Need Vxlan and inner Ethernet header to be present */ + if (!pskb_may_pull(skb, VXLAN_HLEN)) +- return 1; ++ goto drop; + + unparsed = *vxlan_hdr(skb); + /* VNI flag always required to be set */ +@@ -1271,7 +1271,7 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb) + ntohl(vxlan_hdr(skb)->vx_flags), + ntohl(vxlan_hdr(skb)->vx_vni)); + /* Return non vxlan pkt */ +- return 1; ++ goto drop; + } + unparsed.vx_flags &= ~VXLAN_HF_VNI; + unparsed.vx_vni &= ~VXLAN_VNI_MASK; +@@ -2959,6 +2959,9 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev, + if (data[IFLA_VXLAN_REMCSUM_NOPARTIAL]) + conf.flags |= VXLAN_F_REMCSUM_NOPARTIAL; + ++ if (tb[IFLA_MTU]) ++ conf.mtu = nla_get_u32(tb[IFLA_MTU]); ++ + err = vxlan_dev_configure(src_net, dev, &conf); + switch (err) { + case -ENODEV: +diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c +index f700908..0e537fd 100644 +--- a/drivers/perf/arm_pmu.c ++++ b/drivers/perf/arm_pmu.c +@@ -987,9 +987,6 @@ int arm_pmu_device_probe(struct platform_device *pdev, + + armpmu_init(pmu); + +- if (!__oprofile_cpu_pmu) +- __oprofile_cpu_pmu = pmu; +- + pmu->plat_device = pdev; + + if (node && (of_id = of_match_node(of_table, pdev->dev.of_node))) { +@@ -1025,6 +1022,9 @@ int arm_pmu_device_probe(struct platform_device *pdev, + if (ret) + goto out_destroy; + ++ if (!__oprofile_cpu_pmu) ++ __oprofile_cpu_pmu = pmu; ++ + pr_info("enabled with %s PMU driver, %d counters available\n", + pmu->name, pmu->num_events); + +diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c +index 6ab8c3c..fba2dd9 100644 +--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c ++++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c +@@ -1256,9 +1256,10 @@ static void mtk_eint_irq_handler(struct irq_desc *desc) + const struct mtk_desc_pin *pin; + + chained_irq_enter(chip, desc); +- for (eint_num = 0; eint_num < pctl->devdata->ap_num; eint_num += 32) { ++ for (eint_num = 0; ++ eint_num < pctl->devdata->ap_num; ++ eint_num += 32, reg += 4) { + status = readl(reg); +- reg += 4; + while (status) { + offset = __ffs(status); + index = eint_num + offset; +diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c +index 3408578..ff41c31 100644 +--- a/drivers/scsi/scsi_devinfo.c ++++ b/drivers/scsi/scsi_devinfo.c +@@ -230,6 +230,7 @@ static struct { + {"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, + {"Promise", "VTrak E610f", NULL, BLIST_SPARSELUN | BLIST_NO_RSOC}, + {"Promise", "", NULL, BLIST_SPARSELUN}, ++ {"QEMU", "QEMU CD-ROM", NULL, BLIST_SKIP_VPD_PAGES}, + {"QNAP", "iSCSI Storage", NULL, BLIST_MAX_1024}, + {"SYNOLOGY", "iSCSI Storage", NULL, BLIST_MAX_1024}, + {"QUANTUM", "XP34301", "1071", BLIST_NOTQ}, +diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c +index 8106515..f704d02 100644 +--- a/drivers/scsi/scsi_lib.c ++++ b/drivers/scsi/scsi_lib.c +@@ -911,9 +911,12 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) + } + + /* +- * If we finished all bytes in the request we are done now. ++ * special case: failed zero length commands always need to ++ * drop down into the retry code. Otherwise, if we finished ++ * all bytes in the request we are done now. + */ +- if (!scsi_end_request(req, error, good_bytes, 0)) ++ if (!(blk_rq_bytes(req) == 0 && error) && ++ !scsi_end_request(req, error, good_bytes, 0)) + return; + + /* +diff --git a/fs/dcache.c b/fs/dcache.c +index d5ecc6e..44008e3 100644 +--- a/fs/dcache.c ++++ b/fs/dcache.c +@@ -1619,7 +1619,7 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) + struct dentry *dentry = __d_alloc(parent->d_sb, name); + if (!dentry) + return NULL; +- ++ dentry->d_flags |= DCACHE_RCUACCESS; + spin_lock(&parent->d_lock); + /* + * don't need child lock because it is not subject +@@ -2338,7 +2338,6 @@ static void __d_rehash(struct dentry * entry, struct hlist_bl_head *b) + { + BUG_ON(!d_unhashed(entry)); + hlist_bl_lock(b); +- entry->d_flags |= DCACHE_RCUACCESS; + hlist_bl_add_head_rcu(&entry->d_hash, b); + hlist_bl_unlock(b); + } +@@ -2637,6 +2636,7 @@ static void __d_move(struct dentry *dentry, struct dentry *target, + /* ... and switch them in the tree */ + if (IS_ROOT(dentry)) { + /* splicing a tree */ ++ dentry->d_flags |= DCACHE_RCUACCESS; + dentry->d_parent = target->d_parent; + target->d_parent = target; + list_del_init(&target->d_child); +diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c +index 866bb18..e818f5a 100644 +--- a/fs/ecryptfs/kthread.c ++++ b/fs/ecryptfs/kthread.c +@@ -25,6 +25,7 @@ + #include <linux/slab.h> + #include <linux/wait.h> + #include <linux/mount.h> ++#include <linux/file.h> + #include "ecryptfs_kernel.h" + + struct ecryptfs_open_req { +@@ -147,7 +148,7 @@ int ecryptfs_privileged_open(struct file **lower_file, + flags |= IS_RDONLY(d_inode(lower_dentry)) ? O_RDONLY : O_RDWR; + (*lower_file) = dentry_open(&req.path, flags, cred); + if (!IS_ERR(*lower_file)) +- goto out; ++ goto have_file; + if ((flags & O_ACCMODE) == O_RDONLY) { + rc = PTR_ERR((*lower_file)); + goto out; +@@ -165,8 +166,16 @@ int ecryptfs_privileged_open(struct file **lower_file, + mutex_unlock(&ecryptfs_kthread_ctl.mux); + wake_up(&ecryptfs_kthread_ctl.wait); + wait_for_completion(&req.done); +- if (IS_ERR(*lower_file)) ++ if (IS_ERR(*lower_file)) { + rc = PTR_ERR(*lower_file); ++ goto out; ++ } ++have_file: ++ if ((*lower_file)->f_op->mmap == NULL) { ++ fput(*lower_file); ++ *lower_file = NULL; ++ rc = -EMEDIUMTYPE; ++ } + out: + return rc; + } +diff --git a/fs/proc/root.c b/fs/proc/root.c +index 361ab4e..ec649c9 100644 +--- a/fs/proc/root.c ++++ b/fs/proc/root.c +@@ -121,6 +121,13 @@ static struct dentry *proc_mount(struct file_system_type *fs_type, + if (IS_ERR(sb)) + return ERR_CAST(sb); + ++ /* ++ * procfs isn't actually a stacking filesystem; however, there is ++ * too much magic going on inside it to permit stacking things on ++ * top of it ++ */ ++ sb->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH; ++ + if (!proc_parse_options(options, ns)) { + deactivate_locked_super(sb); + return ERR_PTR(-EINVAL); +diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h +index d5d798b..e984250 100644 +--- a/include/linux/irqchip/arm-gic-v3.h ++++ b/include/linux/irqchip/arm-gic-v3.h +@@ -301,7 +301,7 @@ + #define ICC_SGI1R_AFFINITY_1_SHIFT 16 + #define ICC_SGI1R_AFFINITY_1_MASK (0xff << ICC_SGI1R_AFFINITY_1_SHIFT) + #define ICC_SGI1R_SGI_ID_SHIFT 24 +-#define ICC_SGI1R_SGI_ID_MASK (0xff << ICC_SGI1R_SGI_ID_SHIFT) ++#define ICC_SGI1R_SGI_ID_MASK (0xfULL << ICC_SGI1R_SGI_ID_SHIFT) + #define ICC_SGI1R_AFFINITY_2_SHIFT 32 + #define ICC_SGI1R_AFFINITY_2_MASK (0xffULL << ICC_SGI1R_AFFINITY_1_SHIFT) + #define ICC_SGI1R_IRQ_ROUTING_MODE_BIT 40 +diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h +index 80a305b..4dd9306 100644 +--- a/include/linux/netfilter/x_tables.h ++++ b/include/linux/netfilter/x_tables.h +@@ -242,11 +242,18 @@ void xt_unregister_match(struct xt_match *target); + int xt_register_matches(struct xt_match *match, unsigned int n); + void xt_unregister_matches(struct xt_match *match, unsigned int n); + ++int xt_check_entry_offsets(const void *base, const char *elems, ++ unsigned int target_offset, ++ unsigned int next_offset); ++ + int xt_check_match(struct xt_mtchk_param *, unsigned int size, u_int8_t proto, + bool inv_proto); + int xt_check_target(struct xt_tgchk_param *, unsigned int size, u_int8_t proto, + bool inv_proto); + ++void *xt_copy_counters_from_user(const void __user *user, unsigned int len, ++ struct xt_counters_info *info, bool compat); ++ + struct xt_table *xt_register_table(struct net *net, + const struct xt_table *table, + struct xt_table_info *bootstrap, +@@ -480,7 +487,7 @@ void xt_compat_init_offsets(u_int8_t af, unsigned int number); + int xt_compat_calc_jump(u_int8_t af, unsigned int offset); + + int xt_compat_match_offset(const struct xt_match *match); +-int xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr, ++void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr, + unsigned int *size); + int xt_compat_match_to_user(const struct xt_entry_match *m, + void __user **dstptr, unsigned int *size); +@@ -490,6 +497,9 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr, + unsigned int *size); + int xt_compat_target_to_user(const struct xt_entry_target *t, + void __user **dstptr, unsigned int *size); ++int xt_compat_check_entry_offsets(const void *base, const char *elems, ++ unsigned int target_offset, ++ unsigned int next_offset); + + #endif /* CONFIG_COMPAT */ + #endif /* _X_TABLES_H */ +diff --git a/include/net/switchdev.h b/include/net/switchdev.h +index 51d77b2..985619a 100644 +--- a/include/net/switchdev.h ++++ b/include/net/switchdev.h +@@ -97,7 +97,7 @@ struct switchdev_obj_ipv4_fib { + struct switchdev_obj obj; + u32 dst; + int dst_len; +- struct fib_info fi; ++ struct fib_info *fi; + u8 tos; + u8 type; + u32 nlflags; +diff --git a/include/uapi/linux/libc-compat.h b/include/uapi/linux/libc-compat.h +index d5e38c7..e4f048e 100644 +--- a/include/uapi/linux/libc-compat.h ++++ b/include/uapi/linux/libc-compat.h +@@ -52,7 +52,7 @@ + #if defined(__GLIBC__) + + /* Coordinate with glibc net/if.h header. */ +-#if defined(_NET_IF_H) ++#if defined(_NET_IF_H) && defined(__USE_MISC) + + /* GLIBC headers included first so don't define anything + * that would already be defined. */ +diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c +index 8f94ca1..b2aefa2 100644 +--- a/kernel/bpf/inode.c ++++ b/kernel/bpf/inode.c +@@ -378,7 +378,7 @@ static int bpf_fill_super(struct super_block *sb, void *data, int silent) + static struct dentry *bpf_mount(struct file_system_type *type, int flags, + const char *dev_name, void *data) + { +- return mount_ns(type, flags, current->nsproxy->mnt_ns, bpf_fill_super); ++ return mount_nodev(type, flags, data, bpf_fill_super); + } + + static struct file_system_type bpf_fs_type = { +@@ -386,7 +386,6 @@ static struct file_system_type bpf_fs_type = { + .name = "bpf", + .mount = bpf_mount, + .kill_sb = kill_litter_super, +- .fs_flags = FS_USERNS_MOUNT, + }; + + MODULE_ALIAS_FS("bpf"); +diff --git a/kernel/sched/core.c b/kernel/sched/core.c +index d1f7149..11546a6 100644 +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -3047,7 +3047,8 @@ static noinline void __schedule_bug(struct task_struct *prev) + static inline void schedule_debug(struct task_struct *prev) + { + #ifdef CONFIG_SCHED_STACK_END_CHECK +- BUG_ON(task_stack_end_corrupted(prev)); ++ if (task_stack_end_corrupted(prev)) ++ panic("corrupted stack end detected inside scheduler\n"); + #endif + + if (unlikely(in_atomic_preempt_off())) { +diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c +index 3e4ffb3..d028941 100644 +--- a/kernel/trace/bpf_trace.c ++++ b/kernel/trace/bpf_trace.c +@@ -194,7 +194,7 @@ static u64 bpf_perf_event_read(u64 r1, u64 index, u64 r3, u64 r4, u64 r5) + if (unlikely(index >= array->map.max_entries)) + return -E2BIG; + +- file = (struct file *)array->ptrs[index]; ++ file = READ_ONCE(array->ptrs[index]); + if (unlikely(!file)) + return -ENOENT; + +@@ -238,7 +238,7 @@ static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size) + if (unlikely(index >= array->map.max_entries)) + return -E2BIG; + +- file = (struct file *)array->ptrs[index]; ++ file = READ_ONCE(array->ptrs[index]); + if (unlikely(!file)) + return -ENOENT; + +diff --git a/mm/memcontrol.c b/mm/memcontrol.c +index fe787f5..a2e79b8 100644 +--- a/mm/memcontrol.c ++++ b/mm/memcontrol.c +@@ -2877,6 +2877,7 @@ static void memcg_offline_kmem(struct mem_cgroup *memcg) + * ordering is imposed by list_lru_node->lock taken by + * memcg_drain_all_list_lrus(). + */ ++ rcu_read_lock(); /* can be called from css_free w/o cgroup_mutex */ + css_for_each_descendant_pre(css, &memcg->css) { + child = mem_cgroup_from_css(css); + BUG_ON(child->kmemcg_id != kmemcg_id); +@@ -2884,6 +2885,8 @@ static void memcg_offline_kmem(struct mem_cgroup *memcg) + if (!memcg->use_hierarchy) + break; + } ++ rcu_read_unlock(); ++ + memcg_drain_all_list_lrus(kmemcg_id, parent->kmemcg_id); + + memcg_free_cache_id(kmemcg_id); +diff --git a/mm/swap_state.c b/mm/swap_state.c +index 366ce35..1155a68 100644 +--- a/mm/swap_state.c ++++ b/mm/swap_state.c +@@ -252,7 +252,10 @@ static inline void free_swap_cache(struct page *page) + void free_page_and_swap_cache(struct page *page) + { + free_swap_cache(page); +- put_page(page); ++ if (is_huge_zero_page(page)) ++ put_huge_zero_page(); ++ else ++ put_page(page); + } + + /* +diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c +index dcea4f4..c18080a 100644 +--- a/net/bridge/br_fdb.c ++++ b/net/bridge/br_fdb.c +@@ -279,6 +279,8 @@ void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr) + * change from under us. + */ + list_for_each_entry(v, &vg->vlan_list, vlist) { ++ if (!br_vlan_should_use(v)) ++ continue; + f = __br_fdb_get(br, br->dev->dev_addr, v->vid); + if (f && f->is_local && !f->dst) + fdb_delete_local(br, NULL, f); +diff --git a/net/core/hwbm.c b/net/core/hwbm.c +index 941c284..2cab489 100644 +--- a/net/core/hwbm.c ++++ b/net/core/hwbm.c +@@ -55,18 +55,21 @@ int hwbm_pool_add(struct hwbm_pool *bm_pool, unsigned int buf_num, gfp_t gfp) + spin_lock_irqsave(&bm_pool->lock, flags); + if (bm_pool->buf_num == bm_pool->size) { + pr_warn("pool already filled\n"); ++ spin_unlock_irqrestore(&bm_pool->lock, flags); + return bm_pool->buf_num; + } + + if (buf_num + bm_pool->buf_num > bm_pool->size) { + pr_warn("cannot allocate %d buffers for pool\n", + buf_num); ++ spin_unlock_irqrestore(&bm_pool->lock, flags); + return 0; + } + + if ((buf_num + bm_pool->buf_num) < bm_pool->buf_num) { + pr_warn("Adding %d buffers to the %d current buffers will overflow\n", + buf_num, bm_pool->buf_num); ++ spin_unlock_irqrestore(&bm_pool->lock, flags); + return 0; + } + +diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c +index 9e48199..7ad0e56 100644 +--- a/net/ipv4/af_inet.c ++++ b/net/ipv4/af_inet.c +@@ -1660,6 +1660,14 @@ static __net_init int inet_init_net(struct net *net) + */ + net->ipv4.ping_group_range.range[0] = make_kgid(&init_user_ns, 1); + net->ipv4.ping_group_range.range[1] = make_kgid(&init_user_ns, 0); ++ ++ /* Default values for sysctl-controlled parameters. ++ * We set them here, in case sysctl is not compiled. ++ */ ++ net->ipv4.sysctl_ip_default_ttl = IPDEFTTL; ++ net->ipv4.sysctl_ip_dynaddr = 0; ++ net->ipv4.sysctl_ip_early_demux = 1; ++ + return 0; + } + +diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c +index 4133b0f..85d60c6 100644 +--- a/net/ipv4/netfilter/arp_tables.c ++++ b/net/ipv4/netfilter/arp_tables.c +@@ -367,6 +367,18 @@ static inline bool unconditional(const struct arpt_entry *e) + memcmp(&e->arp, &uncond, sizeof(uncond)) == 0; + } + ++static bool find_jump_target(const struct xt_table_info *t, ++ const struct arpt_entry *target) ++{ ++ struct arpt_entry *iter; ++ ++ xt_entry_foreach(iter, t->entries, t->size) { ++ if (iter == target) ++ return true; ++ } ++ return false; ++} ++ + /* Figures out from what hook each rule can be called: returns 0 if + * there are loops. Puts hook bitmask in comefrom. + */ +@@ -439,6 +451,8 @@ static int mark_source_chains(const struct xt_table_info *newinfo, + size = e->next_offset; + e = (struct arpt_entry *) + (entry0 + pos + size); ++ if (pos + size >= newinfo->size) ++ return 0; + e->counters.pcnt = pos; + pos += size; + } else { +@@ -458,9 +472,15 @@ static int mark_source_chains(const struct xt_table_info *newinfo, + /* This a jump; chase it. */ + duprintf("Jump rule %u -> %u\n", + pos, newpos); ++ e = (struct arpt_entry *) ++ (entry0 + newpos); ++ if (!find_jump_target(newinfo, e)) ++ return 0; + } else { + /* ... this is a fallthru */ + newpos = pos + e->next_offset; ++ if (newpos >= newinfo->size) ++ return 0; + } + e = (struct arpt_entry *) + (entry0 + newpos); +@@ -474,23 +494,6 @@ next: + return 1; + } + +-static inline int check_entry(const struct arpt_entry *e) +-{ +- const struct xt_entry_target *t; +- +- if (!arp_checkentry(&e->arp)) +- return -EINVAL; +- +- if (e->target_offset + sizeof(struct xt_entry_target) > e->next_offset) +- return -EINVAL; +- +- t = arpt_get_target_c(e); +- if (e->target_offset + t->u.target_size > e->next_offset) +- return -EINVAL; +- +- return 0; +-} +- + static inline int check_target(struct arpt_entry *e, const char *name) + { + struct xt_entry_target *t = arpt_get_target(e); +@@ -586,7 +589,11 @@ static inline int check_entry_size_and_hooks(struct arpt_entry *e, + return -EINVAL; + } + +- err = check_entry(e); ++ if (!arp_checkentry(&e->arp)) ++ return -EINVAL; ++ ++ err = xt_check_entry_offsets(e, e->elems, e->target_offset, ++ e->next_offset); + if (err) + return err; + +@@ -691,10 +698,8 @@ static int translate_table(struct xt_table_info *newinfo, void *entry0, + } + } + +- if (!mark_source_chains(newinfo, repl->valid_hooks, entry0)) { +- duprintf("Looping hook\n"); ++ if (!mark_source_chains(newinfo, repl->valid_hooks, entry0)) + return -ELOOP; +- } + + /* Finally, each sanity check must pass */ + i = 0; +@@ -1126,55 +1131,17 @@ static int do_add_counters(struct net *net, const void __user *user, + unsigned int i; + struct xt_counters_info tmp; + struct xt_counters *paddc; +- unsigned int num_counters; +- const char *name; +- int size; +- void *ptmp; + struct xt_table *t; + const struct xt_table_info *private; + int ret = 0; + struct arpt_entry *iter; + unsigned int addend; +-#ifdef CONFIG_COMPAT +- struct compat_xt_counters_info compat_tmp; + +- if (compat) { +- ptmp = &compat_tmp; +- size = sizeof(struct compat_xt_counters_info); +- } else +-#endif +- { +- ptmp = &tmp; +- size = sizeof(struct xt_counters_info); +- } ++ paddc = xt_copy_counters_from_user(user, len, &tmp, compat); ++ if (IS_ERR(paddc)) ++ return PTR_ERR(paddc); + +- if (copy_from_user(ptmp, user, size) != 0) +- return -EFAULT; +- +-#ifdef CONFIG_COMPAT +- if (compat) { +- num_counters = compat_tmp.num_counters; +- name = compat_tmp.name; +- } else +-#endif +- { +- num_counters = tmp.num_counters; +- name = tmp.name; +- } +- +- if (len != size + num_counters * sizeof(struct xt_counters)) +- return -EINVAL; +- +- paddc = vmalloc(len - size); +- if (!paddc) +- return -ENOMEM; +- +- if (copy_from_user(paddc, user + size, len - size) != 0) { +- ret = -EFAULT; +- goto free; +- } +- +- t = xt_find_table_lock(net, NFPROTO_ARP, name); ++ t = xt_find_table_lock(net, NFPROTO_ARP, tmp.name); + if (IS_ERR_OR_NULL(t)) { + ret = t ? PTR_ERR(t) : -ENOENT; + goto free; +@@ -1182,7 +1149,7 @@ static int do_add_counters(struct net *net, const void __user *user, + + local_bh_disable(); + private = t->private; +- if (private->number != num_counters) { ++ if (private->number != tmp.num_counters) { + ret = -EINVAL; + goto unlock_up_free; + } +@@ -1209,6 +1176,18 @@ static int do_add_counters(struct net *net, const void __user *user, + } + + #ifdef CONFIG_COMPAT ++struct compat_arpt_replace { ++ char name[XT_TABLE_MAXNAMELEN]; ++ u32 valid_hooks; ++ u32 num_entries; ++ u32 size; ++ u32 hook_entry[NF_ARP_NUMHOOKS]; ++ u32 underflow[NF_ARP_NUMHOOKS]; ++ u32 num_counters; ++ compat_uptr_t counters; ++ struct compat_arpt_entry entries[0]; ++}; ++ + static inline void compat_release_entry(struct compat_arpt_entry *e) + { + struct xt_entry_target *t; +@@ -1217,20 +1196,17 @@ static inline void compat_release_entry(struct compat_arpt_entry *e) + module_put(t->u.kernel.target->me); + } + +-static inline int ++static int + check_compat_entry_size_and_hooks(struct compat_arpt_entry *e, + struct xt_table_info *newinfo, + unsigned int *size, + const unsigned char *base, +- const unsigned char *limit, +- const unsigned int *hook_entries, +- const unsigned int *underflows, +- const char *name) ++ const unsigned char *limit) + { + struct xt_entry_target *t; + struct xt_target *target; + unsigned int entry_offset; +- int ret, off, h; ++ int ret, off; + + duprintf("check_compat_entry_size_and_hooks %p\n", e); + if ((unsigned long)e % __alignof__(struct compat_arpt_entry) != 0 || +@@ -1247,8 +1223,11 @@ check_compat_entry_size_and_hooks(struct compat_arpt_entry *e, + return -EINVAL; + } + +- /* For purposes of check_entry casting the compat entry is fine */ +- ret = check_entry((struct arpt_entry *)e); ++ if (!arp_checkentry(&e->arp)) ++ return -EINVAL; ++ ++ ret = xt_compat_check_entry_offsets(e, e->elems, e->target_offset, ++ e->next_offset); + if (ret) + return ret; + +@@ -1272,17 +1251,6 @@ check_compat_entry_size_and_hooks(struct compat_arpt_entry *e, + if (ret) + goto release_target; + +- /* Check hooks & underflows */ +- for (h = 0; h < NF_ARP_NUMHOOKS; h++) { +- if ((unsigned char *)e - base == hook_entries[h]) +- newinfo->hook_entry[h] = hook_entries[h]; +- if ((unsigned char *)e - base == underflows[h]) +- newinfo->underflow[h] = underflows[h]; +- } +- +- /* Clear counters and comefrom */ +- memset(&e->counters, 0, sizeof(e->counters)); +- e->comefrom = 0; + return 0; + + release_target: +@@ -1291,18 +1259,17 @@ out: + return ret; + } + +-static int ++static void + compat_copy_entry_from_user(struct compat_arpt_entry *e, void **dstptr, +- unsigned int *size, const char *name, ++ unsigned int *size, + struct xt_table_info *newinfo, unsigned char *base) + { + struct xt_entry_target *t; + struct xt_target *target; + struct arpt_entry *de; + unsigned int origsize; +- int ret, h; ++ int h; + +- ret = 0; + origsize = *size; + de = (struct arpt_entry *)*dstptr; + memcpy(de, e, sizeof(struct arpt_entry)); +@@ -1323,148 +1290,82 @@ compat_copy_entry_from_user(struct compat_arpt_entry *e, void **dstptr, + if ((unsigned char *)de - base < newinfo->underflow[h]) + newinfo->underflow[h] -= origsize - *size; + } +- return ret; + } + +-static int translate_compat_table(const char *name, +- unsigned int valid_hooks, +- struct xt_table_info **pinfo, ++static int translate_compat_table(struct xt_table_info **pinfo, + void **pentry0, +- unsigned int total_size, +- unsigned int number, +- unsigned int *hook_entries, +- unsigned int *underflows) ++ const struct compat_arpt_replace *compatr) + { + unsigned int i, j; + struct xt_table_info *newinfo, *info; + void *pos, *entry0, *entry1; + struct compat_arpt_entry *iter0; +- struct arpt_entry *iter1; ++ struct arpt_replace repl; + unsigned int size; + int ret = 0; + + info = *pinfo; + entry0 = *pentry0; +- size = total_size; +- info->number = number; +- +- /* Init all hooks to impossible value. */ +- for (i = 0; i < NF_ARP_NUMHOOKS; i++) { +- info->hook_entry[i] = 0xFFFFFFFF; +- info->underflow[i] = 0xFFFFFFFF; +- } ++ size = compatr->size; ++ info->number = compatr->num_entries; + + duprintf("translate_compat_table: size %u\n", info->size); + j = 0; + xt_compat_lock(NFPROTO_ARP); +- xt_compat_init_offsets(NFPROTO_ARP, number); ++ xt_compat_init_offsets(NFPROTO_ARP, compatr->num_entries); + /* Walk through entries, checking offsets. */ +- xt_entry_foreach(iter0, entry0, total_size) { ++ xt_entry_foreach(iter0, entry0, compatr->size) { + ret = check_compat_entry_size_and_hooks(iter0, info, &size, + entry0, +- entry0 + total_size, +- hook_entries, +- underflows, +- name); ++ entry0 + compatr->size); + if (ret != 0) + goto out_unlock; + ++j; + } + + ret = -EINVAL; +- if (j != number) { ++ if (j != compatr->num_entries) { + duprintf("translate_compat_table: %u not %u entries\n", +- j, number); ++ j, compatr->num_entries); + goto out_unlock; + } + +- /* Check hooks all assigned */ +- for (i = 0; i < NF_ARP_NUMHOOKS; i++) { +- /* Only hooks which are valid */ +- if (!(valid_hooks & (1 << i))) +- continue; +- if (info->hook_entry[i] == 0xFFFFFFFF) { +- duprintf("Invalid hook entry %u %u\n", +- i, hook_entries[i]); +- goto out_unlock; +- } +- if (info->underflow[i] == 0xFFFFFFFF) { +- duprintf("Invalid underflow %u %u\n", +- i, underflows[i]); +- goto out_unlock; +- } +- } +- + ret = -ENOMEM; + newinfo = xt_alloc_table_info(size); + if (!newinfo) + goto out_unlock; + +- newinfo->number = number; ++ newinfo->number = compatr->num_entries; + for (i = 0; i < NF_ARP_NUMHOOKS; i++) { + newinfo->hook_entry[i] = info->hook_entry[i]; + newinfo->underflow[i] = info->underflow[i]; + } + entry1 = newinfo->entries; + pos = entry1; +- size = total_size; +- xt_entry_foreach(iter0, entry0, total_size) { +- ret = compat_copy_entry_from_user(iter0, &pos, &size, +- name, newinfo, entry1); +- if (ret != 0) +- break; +- } ++ size = compatr->size; ++ xt_entry_foreach(iter0, entry0, compatr->size) ++ compat_copy_entry_from_user(iter0, &pos, &size, ++ newinfo, entry1); ++ ++ /* all module references in entry0 are now gone */ ++ + xt_compat_flush_offsets(NFPROTO_ARP); + xt_compat_unlock(NFPROTO_ARP); +- if (ret) +- goto free_newinfo; + +- ret = -ELOOP; +- if (!mark_source_chains(newinfo, valid_hooks, entry1)) +- goto free_newinfo; ++ memcpy(&repl, compatr, sizeof(*compatr)); + +- i = 0; +- xt_entry_foreach(iter1, entry1, newinfo->size) { +- iter1->counters.pcnt = xt_percpu_counter_alloc(); +- if (IS_ERR_VALUE(iter1->counters.pcnt)) { +- ret = -ENOMEM; +- break; +- } +- +- ret = check_target(iter1, name); +- if (ret != 0) { +- xt_percpu_counter_free(iter1->counters.pcnt); +- break; +- } +- ++i; +- if (strcmp(arpt_get_target(iter1)->u.user.name, +- XT_ERROR_TARGET) == 0) +- ++newinfo->stacksize; +- } +- if (ret) { +- /* +- * The first i matches need cleanup_entry (calls ->destroy) +- * because they had called ->check already. The other j-i +- * entries need only release. +- */ +- int skip = i; +- j -= i; +- xt_entry_foreach(iter0, entry0, newinfo->size) { +- if (skip-- > 0) +- continue; +- if (j-- == 0) +- break; +- compat_release_entry(iter0); +- } +- xt_entry_foreach(iter1, entry1, newinfo->size) { +- if (i-- == 0) +- break; +- cleanup_entry(iter1); +- } +- xt_free_table_info(newinfo); +- return ret; ++ for (i = 0; i < NF_ARP_NUMHOOKS; i++) { ++ repl.hook_entry[i] = newinfo->hook_entry[i]; ++ repl.underflow[i] = newinfo->underflow[i]; + } + ++ repl.num_counters = 0; ++ repl.counters = NULL; ++ repl.size = newinfo->size; ++ ret = translate_table(newinfo, entry1, &repl); ++ if (ret) ++ goto free_newinfo; ++ + *pinfo = newinfo; + *pentry0 = entry1; + xt_free_table_info(info); +@@ -1472,31 +1373,18 @@ static int translate_compat_table(const char *name, + + free_newinfo: + xt_free_table_info(newinfo); +-out: +- xt_entry_foreach(iter0, entry0, total_size) { ++ return ret; ++out_unlock: ++ xt_compat_flush_offsets(NFPROTO_ARP); ++ xt_compat_unlock(NFPROTO_ARP); ++ xt_entry_foreach(iter0, entry0, compatr->size) { + if (j-- == 0) + break; + compat_release_entry(iter0); + } + return ret; +-out_unlock: +- xt_compat_flush_offsets(NFPROTO_ARP); +- xt_compat_unlock(NFPROTO_ARP); +- goto out; + } + +-struct compat_arpt_replace { +- char name[XT_TABLE_MAXNAMELEN]; +- u32 valid_hooks; +- u32 num_entries; +- u32 size; +- u32 hook_entry[NF_ARP_NUMHOOKS]; +- u32 underflow[NF_ARP_NUMHOOKS]; +- u32 num_counters; +- compat_uptr_t counters; +- struct compat_arpt_entry entries[0]; +-}; +- + static int compat_do_replace(struct net *net, void __user *user, + unsigned int len) + { +@@ -1529,10 +1417,7 @@ static int compat_do_replace(struct net *net, void __user *user, + goto free_newinfo; + } + +- ret = translate_compat_table(tmp.name, tmp.valid_hooks, +- &newinfo, &loc_cpu_entry, tmp.size, +- tmp.num_entries, tmp.hook_entry, +- tmp.underflow); ++ ret = translate_compat_table(&newinfo, &loc_cpu_entry, &tmp); + if (ret != 0) + goto free_newinfo; + +diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c +index 631c100..0984ea3 100644 +--- a/net/ipv4/netfilter/ip_tables.c ++++ b/net/ipv4/netfilter/ip_tables.c +@@ -443,6 +443,18 @@ ipt_do_table(struct sk_buff *skb, + #endif + } + ++static bool find_jump_target(const struct xt_table_info *t, ++ const struct ipt_entry *target) ++{ ++ struct ipt_entry *iter; ++ ++ xt_entry_foreach(iter, t->entries, t->size) { ++ if (iter == target) ++ return true; ++ } ++ return false; ++} ++ + /* Figures out from what hook each rule can be called: returns 0 if + there are loops. Puts hook bitmask in comefrom. */ + static int +@@ -520,6 +532,8 @@ mark_source_chains(const struct xt_table_info *newinfo, + size = e->next_offset; + e = (struct ipt_entry *) + (entry0 + pos + size); ++ if (pos + size >= newinfo->size) ++ return 0; + e->counters.pcnt = pos; + pos += size; + } else { +@@ -538,9 +552,15 @@ mark_source_chains(const struct xt_table_info *newinfo, + /* This a jump; chase it. */ + duprintf("Jump rule %u -> %u\n", + pos, newpos); ++ e = (struct ipt_entry *) ++ (entry0 + newpos); ++ if (!find_jump_target(newinfo, e)) ++ return 0; + } else { + /* ... this is a fallthru */ + newpos = pos + e->next_offset; ++ if (newpos >= newinfo->size) ++ return 0; + } + e = (struct ipt_entry *) + (entry0 + newpos); +@@ -568,25 +588,6 @@ static void cleanup_match(struct xt_entry_match *m, struct net *net) + } + + static int +-check_entry(const struct ipt_entry *e) +-{ +- const struct xt_entry_target *t; +- +- if (!ip_checkentry(&e->ip)) +- return -EINVAL; +- +- if (e->target_offset + sizeof(struct xt_entry_target) > +- e->next_offset) +- return -EINVAL; +- +- t = ipt_get_target_c(e); +- if (e->target_offset + t->u.target_size > e->next_offset) +- return -EINVAL; +- +- return 0; +-} +- +-static int + check_match(struct xt_entry_match *m, struct xt_mtchk_param *par) + { + const struct ipt_ip *ip = par->entryinfo; +@@ -750,7 +751,11 @@ check_entry_size_and_hooks(struct ipt_entry *e, + return -EINVAL; + } + +- err = check_entry(e); ++ if (!ip_checkentry(&e->ip)) ++ return -EINVAL; ++ ++ err = xt_check_entry_offsets(e, e->elems, e->target_offset, ++ e->next_offset); + if (err) + return err; + +@@ -1309,55 +1314,17 @@ do_add_counters(struct net *net, const void __user *user, + unsigned int i; + struct xt_counters_info tmp; + struct xt_counters *paddc; +- unsigned int num_counters; +- const char *name; +- int size; +- void *ptmp; + struct xt_table *t; + const struct xt_table_info *private; + int ret = 0; + struct ipt_entry *iter; + unsigned int addend; +-#ifdef CONFIG_COMPAT +- struct compat_xt_counters_info compat_tmp; + +- if (compat) { +- ptmp = &compat_tmp; +- size = sizeof(struct compat_xt_counters_info); +- } else +-#endif +- { +- ptmp = &tmp; +- size = sizeof(struct xt_counters_info); +- } +- +- if (copy_from_user(ptmp, user, size) != 0) +- return -EFAULT; +- +-#ifdef CONFIG_COMPAT +- if (compat) { +- num_counters = compat_tmp.num_counters; +- name = compat_tmp.name; +- } else +-#endif +- { +- num_counters = tmp.num_counters; +- name = tmp.name; +- } ++ paddc = xt_copy_counters_from_user(user, len, &tmp, compat); ++ if (IS_ERR(paddc)) ++ return PTR_ERR(paddc); + +- if (len != size + num_counters * sizeof(struct xt_counters)) +- return -EINVAL; +- +- paddc = vmalloc(len - size); +- if (!paddc) +- return -ENOMEM; +- +- if (copy_from_user(paddc, user + size, len - size) != 0) { +- ret = -EFAULT; +- goto free; +- } +- +- t = xt_find_table_lock(net, AF_INET, name); ++ t = xt_find_table_lock(net, AF_INET, tmp.name); + if (IS_ERR_OR_NULL(t)) { + ret = t ? PTR_ERR(t) : -ENOENT; + goto free; +@@ -1365,7 +1332,7 @@ do_add_counters(struct net *net, const void __user *user, + + local_bh_disable(); + private = t->private; +- if (private->number != num_counters) { ++ if (private->number != tmp.num_counters) { + ret = -EINVAL; + goto unlock_up_free; + } +@@ -1444,7 +1411,6 @@ compat_copy_entry_to_user(struct ipt_entry *e, void __user **dstptr, + + static int + compat_find_calc_match(struct xt_entry_match *m, +- const char *name, + const struct ipt_ip *ip, + int *size) + { +@@ -1479,17 +1445,14 @@ check_compat_entry_size_and_hooks(struct compat_ipt_entry *e, + struct xt_table_info *newinfo, + unsigned int *size, + const unsigned char *base, +- const unsigned char *limit, +- const unsigned int *hook_entries, +- const unsigned int *underflows, +- const char *name) ++ const unsigned char *limit) + { + struct xt_entry_match *ematch; + struct xt_entry_target *t; + struct xt_target *target; + unsigned int entry_offset; + unsigned int j; +- int ret, off, h; ++ int ret, off; + + duprintf("check_compat_entry_size_and_hooks %p\n", e); + if ((unsigned long)e % __alignof__(struct compat_ipt_entry) != 0 || +@@ -1506,8 +1469,11 @@ check_compat_entry_size_and_hooks(struct compat_ipt_entry *e, + return -EINVAL; + } + +- /* For purposes of check_entry casting the compat entry is fine */ +- ret = check_entry((struct ipt_entry *)e); ++ if (!ip_checkentry(&e->ip)) ++ return -EINVAL; ++ ++ ret = xt_compat_check_entry_offsets(e, e->elems, ++ e->target_offset, e->next_offset); + if (ret) + return ret; + +@@ -1515,7 +1481,7 @@ check_compat_entry_size_and_hooks(struct compat_ipt_entry *e, + entry_offset = (void *)e - (void *)base; + j = 0; + xt_ematch_foreach(ematch, e) { +- ret = compat_find_calc_match(ematch, name, &e->ip, &off); ++ ret = compat_find_calc_match(ematch, &e->ip, &off); + if (ret != 0) + goto release_matches; + ++j; +@@ -1538,17 +1504,6 @@ check_compat_entry_size_and_hooks(struct compat_ipt_entry *e, + if (ret) + goto out; + +- /* Check hooks & underflows */ +- for (h = 0; h < NF_INET_NUMHOOKS; h++) { +- if ((unsigned char *)e - base == hook_entries[h]) +- newinfo->hook_entry[h] = hook_entries[h]; +- if ((unsigned char *)e - base == underflows[h]) +- newinfo->underflow[h] = underflows[h]; +- } +- +- /* Clear counters and comefrom */ +- memset(&e->counters, 0, sizeof(e->counters)); +- e->comefrom = 0; + return 0; + + out: +@@ -1562,19 +1517,18 @@ release_matches: + return ret; + } + +-static int ++static void + compat_copy_entry_from_user(struct compat_ipt_entry *e, void **dstptr, +- unsigned int *size, const char *name, ++ unsigned int *size, + struct xt_table_info *newinfo, unsigned char *base) + { + struct xt_entry_target *t; + struct xt_target *target; + struct ipt_entry *de; + unsigned int origsize; +- int ret, h; ++ int h; + struct xt_entry_match *ematch; + +- ret = 0; + origsize = *size; + de = (struct ipt_entry *)*dstptr; + memcpy(de, e, sizeof(struct ipt_entry)); +@@ -1583,201 +1537,105 @@ compat_copy_entry_from_user(struct compat_ipt_entry *e, void **dstptr, + *dstptr += sizeof(struct ipt_entry); + *size += sizeof(struct ipt_entry) - sizeof(struct compat_ipt_entry); + +- xt_ematch_foreach(ematch, e) { +- ret = xt_compat_match_from_user(ematch, dstptr, size); +- if (ret != 0) +- return ret; +- } ++ xt_ematch_foreach(ematch, e) ++ xt_compat_match_from_user(ematch, dstptr, size); ++ + de->target_offset = e->target_offset - (origsize - *size); + t = compat_ipt_get_target(e); + target = t->u.kernel.target; + xt_compat_target_from_user(t, dstptr, size); + + de->next_offset = e->next_offset - (origsize - *size); ++ + for (h = 0; h < NF_INET_NUMHOOKS; h++) { + if ((unsigned char *)de - base < newinfo->hook_entry[h]) + newinfo->hook_entry[h] -= origsize - *size; + if ((unsigned char *)de - base < newinfo->underflow[h]) + newinfo->underflow[h] -= origsize - *size; + } +- return ret; +-} +- +-static int +-compat_check_entry(struct ipt_entry *e, struct net *net, const char *name) +-{ +- struct xt_entry_match *ematch; +- struct xt_mtchk_param mtpar; +- unsigned int j; +- int ret = 0; +- +- e->counters.pcnt = xt_percpu_counter_alloc(); +- if (IS_ERR_VALUE(e->counters.pcnt)) +- return -ENOMEM; +- +- j = 0; +- mtpar.net = net; +- mtpar.table = name; +- mtpar.entryinfo = &e->ip; +- mtpar.hook_mask = e->comefrom; +- mtpar.family = NFPROTO_IPV4; +- xt_ematch_foreach(ematch, e) { +- ret = check_match(ematch, &mtpar); +- if (ret != 0) +- goto cleanup_matches; +- ++j; +- } +- +- ret = check_target(e, net, name); +- if (ret) +- goto cleanup_matches; +- return 0; +- +- cleanup_matches: +- xt_ematch_foreach(ematch, e) { +- if (j-- == 0) +- break; +- cleanup_match(ematch, net); +- } +- +- xt_percpu_counter_free(e->counters.pcnt); +- +- return ret; + } + + static int + translate_compat_table(struct net *net, +- const char *name, +- unsigned int valid_hooks, + struct xt_table_info **pinfo, + void **pentry0, +- unsigned int total_size, +- unsigned int number, +- unsigned int *hook_entries, +- unsigned int *underflows) ++ const struct compat_ipt_replace *compatr) + { + unsigned int i, j; + struct xt_table_info *newinfo, *info; + void *pos, *entry0, *entry1; + struct compat_ipt_entry *iter0; +- struct ipt_entry *iter1; ++ struct ipt_replace repl; + unsigned int size; + int ret; + + info = *pinfo; + entry0 = *pentry0; +- size = total_size; +- info->number = number; +- +- /* Init all hooks to impossible value. */ +- for (i = 0; i < NF_INET_NUMHOOKS; i++) { +- info->hook_entry[i] = 0xFFFFFFFF; +- info->underflow[i] = 0xFFFFFFFF; +- } ++ size = compatr->size; ++ info->number = compatr->num_entries; + + duprintf("translate_compat_table: size %u\n", info->size); + j = 0; + xt_compat_lock(AF_INET); +- xt_compat_init_offsets(AF_INET, number); ++ xt_compat_init_offsets(AF_INET, compatr->num_entries); + /* Walk through entries, checking offsets. */ +- xt_entry_foreach(iter0, entry0, total_size) { ++ xt_entry_foreach(iter0, entry0, compatr->size) { + ret = check_compat_entry_size_and_hooks(iter0, info, &size, + entry0, +- entry0 + total_size, +- hook_entries, +- underflows, +- name); ++ entry0 + compatr->size); + if (ret != 0) + goto out_unlock; + ++j; + } + + ret = -EINVAL; +- if (j != number) { ++ if (j != compatr->num_entries) { + duprintf("translate_compat_table: %u not %u entries\n", +- j, number); ++ j, compatr->num_entries); + goto out_unlock; + } + +- /* Check hooks all assigned */ +- for (i = 0; i < NF_INET_NUMHOOKS; i++) { +- /* Only hooks which are valid */ +- if (!(valid_hooks & (1 << i))) +- continue; +- if (info->hook_entry[i] == 0xFFFFFFFF) { +- duprintf("Invalid hook entry %u %u\n", +- i, hook_entries[i]); +- goto out_unlock; +- } +- if (info->underflow[i] == 0xFFFFFFFF) { +- duprintf("Invalid underflow %u %u\n", +- i, underflows[i]); +- goto out_unlock; +- } +- } +- + ret = -ENOMEM; + newinfo = xt_alloc_table_info(size); + if (!newinfo) + goto out_unlock; + +- newinfo->number = number; ++ newinfo->number = compatr->num_entries; + for (i = 0; i < NF_INET_NUMHOOKS; i++) { +- newinfo->hook_entry[i] = info->hook_entry[i]; +- newinfo->underflow[i] = info->underflow[i]; ++ newinfo->hook_entry[i] = compatr->hook_entry[i]; ++ newinfo->underflow[i] = compatr->underflow[i]; + } + entry1 = newinfo->entries; + pos = entry1; +- size = total_size; +- xt_entry_foreach(iter0, entry0, total_size) { +- ret = compat_copy_entry_from_user(iter0, &pos, &size, +- name, newinfo, entry1); +- if (ret != 0) +- break; +- } ++ size = compatr->size; ++ xt_entry_foreach(iter0, entry0, compatr->size) ++ compat_copy_entry_from_user(iter0, &pos, &size, ++ newinfo, entry1); ++ ++ /* all module references in entry0 are now gone. ++ * entry1/newinfo contains a 64bit ruleset that looks exactly as ++ * generated by 64bit userspace. ++ * ++ * Call standard translate_table() to validate all hook_entrys, ++ * underflows, check for loops, etc. ++ */ + xt_compat_flush_offsets(AF_INET); + xt_compat_unlock(AF_INET); +- if (ret) +- goto free_newinfo; + +- ret = -ELOOP; +- if (!mark_source_chains(newinfo, valid_hooks, entry1)) +- goto free_newinfo; ++ memcpy(&repl, compatr, sizeof(*compatr)); + +- i = 0; +- xt_entry_foreach(iter1, entry1, newinfo->size) { +- ret = compat_check_entry(iter1, net, name); +- if (ret != 0) +- break; +- ++i; +- if (strcmp(ipt_get_target(iter1)->u.user.name, +- XT_ERROR_TARGET) == 0) +- ++newinfo->stacksize; +- } +- if (ret) { +- /* +- * The first i matches need cleanup_entry (calls ->destroy) +- * because they had called ->check already. The other j-i +- * entries need only release. +- */ +- int skip = i; +- j -= i; +- xt_entry_foreach(iter0, entry0, newinfo->size) { +- if (skip-- > 0) +- continue; +- if (j-- == 0) +- break; +- compat_release_entry(iter0); +- } +- xt_entry_foreach(iter1, entry1, newinfo->size) { +- if (i-- == 0) +- break; +- cleanup_entry(iter1, net); +- } +- xt_free_table_info(newinfo); +- return ret; ++ for (i = 0; i < NF_INET_NUMHOOKS; i++) { ++ repl.hook_entry[i] = newinfo->hook_entry[i]; ++ repl.underflow[i] = newinfo->underflow[i]; + } + ++ repl.num_counters = 0; ++ repl.counters = NULL; ++ repl.size = newinfo->size; ++ ret = translate_table(net, newinfo, entry1, &repl); ++ if (ret) ++ goto free_newinfo; ++ + *pinfo = newinfo; + *pentry0 = entry1; + xt_free_table_info(info); +@@ -1785,17 +1643,16 @@ translate_compat_table(struct net *net, + + free_newinfo: + xt_free_table_info(newinfo); +-out: +- xt_entry_foreach(iter0, entry0, total_size) { ++ return ret; ++out_unlock: ++ xt_compat_flush_offsets(AF_INET); ++ xt_compat_unlock(AF_INET); ++ xt_entry_foreach(iter0, entry0, compatr->size) { + if (j-- == 0) + break; + compat_release_entry(iter0); + } + return ret; +-out_unlock: +- xt_compat_flush_offsets(AF_INET); +- xt_compat_unlock(AF_INET); +- goto out; + } + + static int +@@ -1831,10 +1688,7 @@ compat_do_replace(struct net *net, void __user *user, unsigned int len) + goto free_newinfo; + } + +- ret = translate_compat_table(net, tmp.name, tmp.valid_hooks, +- &newinfo, &loc_cpu_entry, tmp.size, +- tmp.num_entries, tmp.hook_entry, +- tmp.underflow); ++ ret = translate_compat_table(net, &newinfo, &loc_cpu_entry, &tmp); + if (ret != 0) + goto free_newinfo; + +diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c +index 1e1fe60..03112a3 100644 +--- a/net/ipv4/sysctl_net_ipv4.c ++++ b/net/ipv4/sysctl_net_ipv4.c +@@ -988,10 +988,6 @@ static __net_init int ipv4_sysctl_init_net(struct net *net) + if (!net->ipv4.sysctl_local_reserved_ports) + goto err_ports; + +- net->ipv4.sysctl_ip_default_ttl = IPDEFTTL; +- net->ipv4.sysctl_ip_dynaddr = 0; +- net->ipv4.sysctl_ip_early_demux = 1; +- + return 0; + + err_ports: +diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c +index a2e7f55..e9853df 100644 +--- a/net/ipv4/udp.c ++++ b/net/ipv4/udp.c +@@ -1616,7 +1616,7 @@ int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) + + /* if we're overly short, let UDP handle it */ + encap_rcv = ACCESS_ONCE(up->encap_rcv); +- if (skb->len > sizeof(struct udphdr) && encap_rcv) { ++ if (encap_rcv) { + int ret; + + /* Verify checksum before giving to encap */ +diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c +index bc972e7..da88de8 100644 +--- a/net/ipv6/ip6_output.c ++++ b/net/ipv6/ip6_output.c +@@ -1071,17 +1071,12 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, + const struct in6_addr *final_dst) + { + struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie); +- int err; + + dst = ip6_sk_dst_check(sk, dst, fl6); ++ if (!dst) ++ dst = ip6_dst_lookup_flow(sk, fl6, final_dst); + +- err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6); +- if (err) +- return ERR_PTR(err); +- if (final_dst) +- fl6->daddr = *final_dst; +- +- return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); ++ return dst; + } + EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow); + +diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c +index 86b67b7..9021b43 100644 +--- a/net/ipv6/netfilter/ip6_tables.c ++++ b/net/ipv6/netfilter/ip6_tables.c +@@ -455,6 +455,18 @@ ip6t_do_table(struct sk_buff *skb, + #endif + } + ++static bool find_jump_target(const struct xt_table_info *t, ++ const struct ip6t_entry *target) ++{ ++ struct ip6t_entry *iter; ++ ++ xt_entry_foreach(iter, t->entries, t->size) { ++ if (iter == target) ++ return true; ++ } ++ return false; ++} ++ + /* Figures out from what hook each rule can be called: returns 0 if + there are loops. Puts hook bitmask in comefrom. */ + static int +@@ -532,6 +544,8 @@ mark_source_chains(const struct xt_table_info *newinfo, + size = e->next_offset; + e = (struct ip6t_entry *) + (entry0 + pos + size); ++ if (pos + size >= newinfo->size) ++ return 0; + e->counters.pcnt = pos; + pos += size; + } else { +@@ -550,9 +564,15 @@ mark_source_chains(const struct xt_table_info *newinfo, + /* This a jump; chase it. */ + duprintf("Jump rule %u -> %u\n", + pos, newpos); ++ e = (struct ip6t_entry *) ++ (entry0 + newpos); ++ if (!find_jump_target(newinfo, e)) ++ return 0; + } else { + /* ... this is a fallthru */ + newpos = pos + e->next_offset; ++ if (newpos >= newinfo->size) ++ return 0; + } + e = (struct ip6t_entry *) + (entry0 + newpos); +@@ -579,25 +599,6 @@ static void cleanup_match(struct xt_entry_match *m, struct net *net) + module_put(par.match->me); + } + +-static int +-check_entry(const struct ip6t_entry *e) +-{ +- const struct xt_entry_target *t; +- +- if (!ip6_checkentry(&e->ipv6)) +- return -EINVAL; +- +- if (e->target_offset + sizeof(struct xt_entry_target) > +- e->next_offset) +- return -EINVAL; +- +- t = ip6t_get_target_c(e); +- if (e->target_offset + t->u.target_size > e->next_offset) +- return -EINVAL; +- +- return 0; +-} +- + static int check_match(struct xt_entry_match *m, struct xt_mtchk_param *par) + { + const struct ip6t_ip6 *ipv6 = par->entryinfo; +@@ -762,7 +763,11 @@ check_entry_size_and_hooks(struct ip6t_entry *e, + return -EINVAL; + } + +- err = check_entry(e); ++ if (!ip6_checkentry(&e->ipv6)) ++ return -EINVAL; ++ ++ err = xt_check_entry_offsets(e, e->elems, e->target_offset, ++ e->next_offset); + if (err) + return err; + +@@ -1321,55 +1326,16 @@ do_add_counters(struct net *net, const void __user *user, unsigned int len, + unsigned int i; + struct xt_counters_info tmp; + struct xt_counters *paddc; +- unsigned int num_counters; +- char *name; +- int size; +- void *ptmp; + struct xt_table *t; + const struct xt_table_info *private; + int ret = 0; + struct ip6t_entry *iter; + unsigned int addend; +-#ifdef CONFIG_COMPAT +- struct compat_xt_counters_info compat_tmp; +- +- if (compat) { +- ptmp = &compat_tmp; +- size = sizeof(struct compat_xt_counters_info); +- } else +-#endif +- { +- ptmp = &tmp; +- size = sizeof(struct xt_counters_info); +- } +- +- if (copy_from_user(ptmp, user, size) != 0) +- return -EFAULT; +- +-#ifdef CONFIG_COMPAT +- if (compat) { +- num_counters = compat_tmp.num_counters; +- name = compat_tmp.name; +- } else +-#endif +- { +- num_counters = tmp.num_counters; +- name = tmp.name; +- } +- +- if (len != size + num_counters * sizeof(struct xt_counters)) +- return -EINVAL; +- +- paddc = vmalloc(len - size); +- if (!paddc) +- return -ENOMEM; + +- if (copy_from_user(paddc, user + size, len - size) != 0) { +- ret = -EFAULT; +- goto free; +- } +- +- t = xt_find_table_lock(net, AF_INET6, name); ++ paddc = xt_copy_counters_from_user(user, len, &tmp, compat); ++ if (IS_ERR(paddc)) ++ return PTR_ERR(paddc); ++ t = xt_find_table_lock(net, AF_INET6, tmp.name); + if (IS_ERR_OR_NULL(t)) { + ret = t ? PTR_ERR(t) : -ENOENT; + goto free; +@@ -1377,7 +1343,7 @@ do_add_counters(struct net *net, const void __user *user, unsigned int len, + + local_bh_disable(); + private = t->private; +- if (private->number != num_counters) { ++ if (private->number != tmp.num_counters) { + ret = -EINVAL; + goto unlock_up_free; + } +@@ -1456,7 +1422,6 @@ compat_copy_entry_to_user(struct ip6t_entry *e, void __user **dstptr, + + static int + compat_find_calc_match(struct xt_entry_match *m, +- const char *name, + const struct ip6t_ip6 *ipv6, + int *size) + { +@@ -1491,17 +1456,14 @@ check_compat_entry_size_and_hooks(struct compat_ip6t_entry *e, + struct xt_table_info *newinfo, + unsigned int *size, + const unsigned char *base, +- const unsigned char *limit, +- const unsigned int *hook_entries, +- const unsigned int *underflows, +- const char *name) ++ const unsigned char *limit) + { + struct xt_entry_match *ematch; + struct xt_entry_target *t; + struct xt_target *target; + unsigned int entry_offset; + unsigned int j; +- int ret, off, h; ++ int ret, off; + + duprintf("check_compat_entry_size_and_hooks %p\n", e); + if ((unsigned long)e % __alignof__(struct compat_ip6t_entry) != 0 || +@@ -1518,8 +1480,11 @@ check_compat_entry_size_and_hooks(struct compat_ip6t_entry *e, + return -EINVAL; + } + +- /* For purposes of check_entry casting the compat entry is fine */ +- ret = check_entry((struct ip6t_entry *)e); ++ if (!ip6_checkentry(&e->ipv6)) ++ return -EINVAL; ++ ++ ret = xt_compat_check_entry_offsets(e, e->elems, ++ e->target_offset, e->next_offset); + if (ret) + return ret; + +@@ -1527,7 +1492,7 @@ check_compat_entry_size_and_hooks(struct compat_ip6t_entry *e, + entry_offset = (void *)e - (void *)base; + j = 0; + xt_ematch_foreach(ematch, e) { +- ret = compat_find_calc_match(ematch, name, &e->ipv6, &off); ++ ret = compat_find_calc_match(ematch, &e->ipv6, &off); + if (ret != 0) + goto release_matches; + ++j; +@@ -1550,17 +1515,6 @@ check_compat_entry_size_and_hooks(struct compat_ip6t_entry *e, + if (ret) + goto out; + +- /* Check hooks & underflows */ +- for (h = 0; h < NF_INET_NUMHOOKS; h++) { +- if ((unsigned char *)e - base == hook_entries[h]) +- newinfo->hook_entry[h] = hook_entries[h]; +- if ((unsigned char *)e - base == underflows[h]) +- newinfo->underflow[h] = underflows[h]; +- } +- +- /* Clear counters and comefrom */ +- memset(&e->counters, 0, sizeof(e->counters)); +- e->comefrom = 0; + return 0; + + out: +@@ -1574,18 +1528,17 @@ release_matches: + return ret; + } + +-static int ++static void + compat_copy_entry_from_user(struct compat_ip6t_entry *e, void **dstptr, +- unsigned int *size, const char *name, ++ unsigned int *size, + struct xt_table_info *newinfo, unsigned char *base) + { + struct xt_entry_target *t; + struct ip6t_entry *de; + unsigned int origsize; +- int ret, h; ++ int h; + struct xt_entry_match *ematch; + +- ret = 0; + origsize = *size; + de = (struct ip6t_entry *)*dstptr; + memcpy(de, e, sizeof(struct ip6t_entry)); +@@ -1594,11 +1547,9 @@ compat_copy_entry_from_user(struct compat_ip6t_entry *e, void **dstptr, + *dstptr += sizeof(struct ip6t_entry); + *size += sizeof(struct ip6t_entry) - sizeof(struct compat_ip6t_entry); + +- xt_ematch_foreach(ematch, e) { +- ret = xt_compat_match_from_user(ematch, dstptr, size); +- if (ret != 0) +- return ret; +- } ++ xt_ematch_foreach(ematch, e) ++ xt_compat_match_from_user(ematch, dstptr, size); ++ + de->target_offset = e->target_offset - (origsize - *size); + t = compat_ip6t_get_target(e); + xt_compat_target_from_user(t, dstptr, size); +@@ -1610,183 +1561,83 @@ compat_copy_entry_from_user(struct compat_ip6t_entry *e, void **dstptr, + if ((unsigned char *)de - base < newinfo->underflow[h]) + newinfo->underflow[h] -= origsize - *size; + } +- return ret; +-} +- +-static int compat_check_entry(struct ip6t_entry *e, struct net *net, +- const char *name) +-{ +- unsigned int j; +- int ret = 0; +- struct xt_mtchk_param mtpar; +- struct xt_entry_match *ematch; +- +- e->counters.pcnt = xt_percpu_counter_alloc(); +- if (IS_ERR_VALUE(e->counters.pcnt)) +- return -ENOMEM; +- j = 0; +- mtpar.net = net; +- mtpar.table = name; +- mtpar.entryinfo = &e->ipv6; +- mtpar.hook_mask = e->comefrom; +- mtpar.family = NFPROTO_IPV6; +- xt_ematch_foreach(ematch, e) { +- ret = check_match(ematch, &mtpar); +- if (ret != 0) +- goto cleanup_matches; +- ++j; +- } +- +- ret = check_target(e, net, name); +- if (ret) +- goto cleanup_matches; +- return 0; +- +- cleanup_matches: +- xt_ematch_foreach(ematch, e) { +- if (j-- == 0) +- break; +- cleanup_match(ematch, net); +- } +- +- xt_percpu_counter_free(e->counters.pcnt); +- +- return ret; + } + + static int + translate_compat_table(struct net *net, +- const char *name, +- unsigned int valid_hooks, + struct xt_table_info **pinfo, + void **pentry0, +- unsigned int total_size, +- unsigned int number, +- unsigned int *hook_entries, +- unsigned int *underflows) ++ const struct compat_ip6t_replace *compatr) + { + unsigned int i, j; + struct xt_table_info *newinfo, *info; + void *pos, *entry0, *entry1; + struct compat_ip6t_entry *iter0; +- struct ip6t_entry *iter1; ++ struct ip6t_replace repl; + unsigned int size; + int ret = 0; + + info = *pinfo; + entry0 = *pentry0; +- size = total_size; +- info->number = number; +- +- /* Init all hooks to impossible value. */ +- for (i = 0; i < NF_INET_NUMHOOKS; i++) { +- info->hook_entry[i] = 0xFFFFFFFF; +- info->underflow[i] = 0xFFFFFFFF; +- } ++ size = compatr->size; ++ info->number = compatr->num_entries; + + duprintf("translate_compat_table: size %u\n", info->size); + j = 0; + xt_compat_lock(AF_INET6); +- xt_compat_init_offsets(AF_INET6, number); ++ xt_compat_init_offsets(AF_INET6, compatr->num_entries); + /* Walk through entries, checking offsets. */ +- xt_entry_foreach(iter0, entry0, total_size) { ++ xt_entry_foreach(iter0, entry0, compatr->size) { + ret = check_compat_entry_size_and_hooks(iter0, info, &size, + entry0, +- entry0 + total_size, +- hook_entries, +- underflows, +- name); ++ entry0 + compatr->size); + if (ret != 0) + goto out_unlock; + ++j; + } + + ret = -EINVAL; +- if (j != number) { ++ if (j != compatr->num_entries) { + duprintf("translate_compat_table: %u not %u entries\n", +- j, number); ++ j, compatr->num_entries); + goto out_unlock; + } + +- /* Check hooks all assigned */ +- for (i = 0; i < NF_INET_NUMHOOKS; i++) { +- /* Only hooks which are valid */ +- if (!(valid_hooks & (1 << i))) +- continue; +- if (info->hook_entry[i] == 0xFFFFFFFF) { +- duprintf("Invalid hook entry %u %u\n", +- i, hook_entries[i]); +- goto out_unlock; +- } +- if (info->underflow[i] == 0xFFFFFFFF) { +- duprintf("Invalid underflow %u %u\n", +- i, underflows[i]); +- goto out_unlock; +- } +- } +- + ret = -ENOMEM; + newinfo = xt_alloc_table_info(size); + if (!newinfo) + goto out_unlock; + +- newinfo->number = number; ++ newinfo->number = compatr->num_entries; + for (i = 0; i < NF_INET_NUMHOOKS; i++) { +- newinfo->hook_entry[i] = info->hook_entry[i]; +- newinfo->underflow[i] = info->underflow[i]; ++ newinfo->hook_entry[i] = compatr->hook_entry[i]; ++ newinfo->underflow[i] = compatr->underflow[i]; + } + entry1 = newinfo->entries; + pos = entry1; +- size = total_size; +- xt_entry_foreach(iter0, entry0, total_size) { +- ret = compat_copy_entry_from_user(iter0, &pos, &size, +- name, newinfo, entry1); +- if (ret != 0) +- break; +- } ++ size = compatr->size; ++ xt_entry_foreach(iter0, entry0, compatr->size) ++ compat_copy_entry_from_user(iter0, &pos, &size, ++ newinfo, entry1); ++ ++ /* all module references in entry0 are now gone. */ + xt_compat_flush_offsets(AF_INET6); + xt_compat_unlock(AF_INET6); +- if (ret) +- goto free_newinfo; + +- ret = -ELOOP; +- if (!mark_source_chains(newinfo, valid_hooks, entry1)) +- goto free_newinfo; ++ memcpy(&repl, compatr, sizeof(*compatr)); + +- i = 0; +- xt_entry_foreach(iter1, entry1, newinfo->size) { +- ret = compat_check_entry(iter1, net, name); +- if (ret != 0) +- break; +- ++i; +- if (strcmp(ip6t_get_target(iter1)->u.user.name, +- XT_ERROR_TARGET) == 0) +- ++newinfo->stacksize; +- } +- if (ret) { +- /* +- * The first i matches need cleanup_entry (calls ->destroy) +- * because they had called ->check already. The other j-i +- * entries need only release. +- */ +- int skip = i; +- j -= i; +- xt_entry_foreach(iter0, entry0, newinfo->size) { +- if (skip-- > 0) +- continue; +- if (j-- == 0) +- break; +- compat_release_entry(iter0); +- } +- xt_entry_foreach(iter1, entry1, newinfo->size) { +- if (i-- == 0) +- break; +- cleanup_entry(iter1, net); +- } +- xt_free_table_info(newinfo); +- return ret; ++ for (i = 0; i < NF_INET_NUMHOOKS; i++) { ++ repl.hook_entry[i] = newinfo->hook_entry[i]; ++ repl.underflow[i] = newinfo->underflow[i]; + } + ++ repl.num_counters = 0; ++ repl.counters = NULL; ++ repl.size = newinfo->size; ++ ret = translate_table(net, newinfo, entry1, &repl); ++ if (ret) ++ goto free_newinfo; ++ + *pinfo = newinfo; + *pentry0 = entry1; + xt_free_table_info(info); +@@ -1794,17 +1645,16 @@ translate_compat_table(struct net *net, + + free_newinfo: + xt_free_table_info(newinfo); +-out: +- xt_entry_foreach(iter0, entry0, total_size) { ++ return ret; ++out_unlock: ++ xt_compat_flush_offsets(AF_INET6); ++ xt_compat_unlock(AF_INET6); ++ xt_entry_foreach(iter0, entry0, compatr->size) { + if (j-- == 0) + break; + compat_release_entry(iter0); + } + return ret; +-out_unlock: +- xt_compat_flush_offsets(AF_INET6); +- xt_compat_unlock(AF_INET6); +- goto out; + } + + static int +@@ -1840,10 +1690,7 @@ compat_do_replace(struct net *net, void __user *user, unsigned int len) + goto free_newinfo; + } + +- ret = translate_compat_table(net, tmp.name, tmp.valid_hooks, +- &newinfo, &loc_cpu_entry, tmp.size, +- tmp.num_entries, tmp.hook_entry, +- tmp.underflow); ++ ret = translate_compat_table(net, &newinfo, &loc_cpu_entry, &tmp); + if (ret != 0) + goto free_newinfo; + +diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c +index f443c6b..f6d7516 100644 +--- a/net/ipv6/tcp_ipv6.c ++++ b/net/ipv6/tcp_ipv6.c +@@ -1717,7 +1717,9 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) + destp = ntohs(inet->inet_dport); + srcp = ntohs(inet->inet_sport); + +- if (icsk->icsk_pending == ICSK_TIME_RETRANS) { ++ if (icsk->icsk_pending == ICSK_TIME_RETRANS || ++ icsk->icsk_pending == ICSK_TIME_EARLY_RETRANS || ++ icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) { + timer_active = 1; + timer_expires = icsk->icsk_timeout; + } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) { +diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c +index 6bc5c66..f96831d9 100644 +--- a/net/ipv6/udp.c ++++ b/net/ipv6/udp.c +@@ -653,7 +653,7 @@ int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) + + /* if we're overly short, let UDP handle it */ + encap_rcv = ACCESS_ONCE(up->encap_rcv); +- if (skb->len > sizeof(struct udphdr) && encap_rcv) { ++ if (encap_rcv) { + int ret; + + /* Verify checksum before giving to encap */ +diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c +index 6edfa99..1e40dac 100644 +--- a/net/l2tp/l2tp_core.c ++++ b/net/l2tp/l2tp_core.c +@@ -1581,7 +1581,7 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32 + /* Mark socket as an encapsulation socket. See net/ipv4/udp.c */ + tunnel->encap = encap; + if (encap == L2TP_ENCAPTYPE_UDP) { +- struct udp_tunnel_sock_cfg udp_cfg; ++ struct udp_tunnel_sock_cfg udp_cfg = { }; + + udp_cfg.sk_user_data = tunnel; + udp_cfg.encap_type = UDP_ENCAP_L2TPINUDP; +diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c +index 582c9cf..2675d58 100644 +--- a/net/netfilter/x_tables.c ++++ b/net/netfilter/x_tables.c +@@ -416,6 +416,47 @@ int xt_check_match(struct xt_mtchk_param *par, + } + EXPORT_SYMBOL_GPL(xt_check_match); + ++/** xt_check_entry_match - check that matches end before start of target ++ * ++ * @match: beginning of xt_entry_match ++ * @target: beginning of this rules target (alleged end of matches) ++ * @alignment: alignment requirement of match structures ++ * ++ * Validates that all matches add up to the beginning of the target, ++ * and that each match covers at least the base structure size. ++ * ++ * Return: 0 on success, negative errno on failure. ++ */ ++static int xt_check_entry_match(const char *match, const char *target, ++ const size_t alignment) ++{ ++ const struct xt_entry_match *pos; ++ int length = target - match; ++ ++ if (length == 0) /* no matches */ ++ return 0; ++ ++ pos = (struct xt_entry_match *)match; ++ do { ++ if ((unsigned long)pos % alignment) ++ return -EINVAL; ++ ++ if (length < (int)sizeof(struct xt_entry_match)) ++ return -EINVAL; ++ ++ if (pos->u.match_size < sizeof(struct xt_entry_match)) ++ return -EINVAL; ++ ++ if (pos->u.match_size > length) ++ return -EINVAL; ++ ++ length -= pos->u.match_size; ++ pos = ((void *)((char *)(pos) + (pos)->u.match_size)); ++ } while (length > 0); ++ ++ return 0; ++} ++ + #ifdef CONFIG_COMPAT + int xt_compat_add_offset(u_int8_t af, unsigned int offset, int delta) + { +@@ -485,13 +526,14 @@ int xt_compat_match_offset(const struct xt_match *match) + } + EXPORT_SYMBOL_GPL(xt_compat_match_offset); + +-int xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr, +- unsigned int *size) ++void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr, ++ unsigned int *size) + { + const struct xt_match *match = m->u.kernel.match; + struct compat_xt_entry_match *cm = (struct compat_xt_entry_match *)m; + int pad, off = xt_compat_match_offset(match); + u_int16_t msize = cm->u.user.match_size; ++ char name[sizeof(m->u.user.name)]; + + m = *dstptr; + memcpy(m, cm, sizeof(*cm)); +@@ -505,10 +547,12 @@ int xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr, + + msize += off; + m->u.user.match_size = msize; ++ strlcpy(name, match->name, sizeof(name)); ++ module_put(match->me); ++ strncpy(m->u.user.name, name, sizeof(m->u.user.name)); + + *size += off; + *dstptr += msize; +- return 0; + } + EXPORT_SYMBOL_GPL(xt_compat_match_from_user); + +@@ -539,8 +583,125 @@ int xt_compat_match_to_user(const struct xt_entry_match *m, + return 0; + } + EXPORT_SYMBOL_GPL(xt_compat_match_to_user); ++ ++/* non-compat version may have padding after verdict */ ++struct compat_xt_standard_target { ++ struct compat_xt_entry_target t; ++ compat_uint_t verdict; ++}; ++ ++int xt_compat_check_entry_offsets(const void *base, const char *elems, ++ unsigned int target_offset, ++ unsigned int next_offset) ++{ ++ long size_of_base_struct = elems - (const char *)base; ++ const struct compat_xt_entry_target *t; ++ const char *e = base; ++ ++ if (target_offset < size_of_base_struct) ++ return -EINVAL; ++ ++ if (target_offset + sizeof(*t) > next_offset) ++ return -EINVAL; ++ ++ t = (void *)(e + target_offset); ++ if (t->u.target_size < sizeof(*t)) ++ return -EINVAL; ++ ++ if (target_offset + t->u.target_size > next_offset) ++ return -EINVAL; ++ ++ if (strcmp(t->u.user.name, XT_STANDARD_TARGET) == 0 && ++ COMPAT_XT_ALIGN(target_offset + sizeof(struct compat_xt_standard_target)) != next_offset) ++ return -EINVAL; ++ ++ /* compat_xt_entry match has less strict aligment requirements, ++ * otherwise they are identical. In case of padding differences ++ * we need to add compat version of xt_check_entry_match. ++ */ ++ BUILD_BUG_ON(sizeof(struct compat_xt_entry_match) != sizeof(struct xt_entry_match)); ++ ++ return xt_check_entry_match(elems, base + target_offset, ++ __alignof__(struct compat_xt_entry_match)); ++} ++EXPORT_SYMBOL(xt_compat_check_entry_offsets); + #endif /* CONFIG_COMPAT */ + ++/** ++ * xt_check_entry_offsets - validate arp/ip/ip6t_entry ++ * ++ * @base: pointer to arp/ip/ip6t_entry ++ * @elems: pointer to first xt_entry_match, i.e. ip(6)t_entry->elems ++ * @target_offset: the arp/ip/ip6_t->target_offset ++ * @next_offset: the arp/ip/ip6_t->next_offset ++ * ++ * validates that target_offset and next_offset are sane and that all ++ * match sizes (if any) align with the target offset. ++ * ++ * This function does not validate the targets or matches themselves, it ++ * only tests that all the offsets and sizes are correct, that all ++ * match structures are aligned, and that the last structure ends where ++ * the target structure begins. ++ * ++ * Also see xt_compat_check_entry_offsets for CONFIG_COMPAT version. ++ * ++ * The arp/ip/ip6t_entry structure @base must have passed following tests: ++ * - it must point to a valid memory location ++ * - base to base + next_offset must be accessible, i.e. not exceed allocated ++ * length. ++ * ++ * A well-formed entry looks like this: ++ * ++ * ip(6)t_entry match [mtdata] match [mtdata] target [tgdata] ip(6)t_entry ++ * e->elems[]-----' | | ++ * matchsize | | ++ * matchsize | | ++ * | | ++ * target_offset---------------------------------' | ++ * next_offset---------------------------------------------------' ++ * ++ * elems[]: flexible array member at end of ip(6)/arpt_entry struct. ++ * This is where matches (if any) and the target reside. ++ * target_offset: beginning of target. ++ * next_offset: start of the next rule; also: size of this rule. ++ * Since targets have a minimum size, target_offset + minlen <= next_offset. ++ * ++ * Every match stores its size, sum of sizes must not exceed target_offset. ++ * ++ * Return: 0 on success, negative errno on failure. ++ */ ++int xt_check_entry_offsets(const void *base, ++ const char *elems, ++ unsigned int target_offset, ++ unsigned int next_offset) ++{ ++ long size_of_base_struct = elems - (const char *)base; ++ const struct xt_entry_target *t; ++ const char *e = base; ++ ++ /* target start is within the ip/ip6/arpt_entry struct */ ++ if (target_offset < size_of_base_struct) ++ return -EINVAL; ++ ++ if (target_offset + sizeof(*t) > next_offset) ++ return -EINVAL; ++ ++ t = (void *)(e + target_offset); ++ if (t->u.target_size < sizeof(*t)) ++ return -EINVAL; ++ ++ if (target_offset + t->u.target_size > next_offset) ++ return -EINVAL; ++ ++ if (strcmp(t->u.user.name, XT_STANDARD_TARGET) == 0 && ++ XT_ALIGN(target_offset + sizeof(struct xt_standard_target)) != next_offset) ++ return -EINVAL; ++ ++ return xt_check_entry_match(elems, base + target_offset, ++ __alignof__(struct xt_entry_match)); ++} ++EXPORT_SYMBOL(xt_check_entry_offsets); ++ + int xt_check_target(struct xt_tgchk_param *par, + unsigned int size, u_int8_t proto, bool inv_proto) + { +@@ -591,6 +752,80 @@ int xt_check_target(struct xt_tgchk_param *par, + } + EXPORT_SYMBOL_GPL(xt_check_target); + ++/** ++ * xt_copy_counters_from_user - copy counters and metadata from userspace ++ * ++ * @user: src pointer to userspace memory ++ * @len: alleged size of userspace memory ++ * @info: where to store the xt_counters_info metadata ++ * @compat: true if we setsockopt call is done by 32bit task on 64bit kernel ++ * ++ * Copies counter meta data from @user and stores it in @info. ++ * ++ * vmallocs memory to hold the counters, then copies the counter data ++ * from @user to the new memory and returns a pointer to it. ++ * ++ * If @compat is true, @info gets converted automatically to the 64bit ++ * representation. ++ * ++ * The metadata associated with the counters is stored in @info. ++ * ++ * Return: returns pointer that caller has to test via IS_ERR(). ++ * If IS_ERR is false, caller has to vfree the pointer. ++ */ ++void *xt_copy_counters_from_user(const void __user *user, unsigned int len, ++ struct xt_counters_info *info, bool compat) ++{ ++ void *mem; ++ u64 size; ++ ++#ifdef CONFIG_COMPAT ++ if (compat) { ++ /* structures only differ in size due to alignment */ ++ struct compat_xt_counters_info compat_tmp; ++ ++ if (len <= sizeof(compat_tmp)) ++ return ERR_PTR(-EINVAL); ++ ++ len -= sizeof(compat_tmp); ++ if (copy_from_user(&compat_tmp, user, sizeof(compat_tmp)) != 0) ++ return ERR_PTR(-EFAULT); ++ ++ strlcpy(info->name, compat_tmp.name, sizeof(info->name)); ++ info->num_counters = compat_tmp.num_counters; ++ user += sizeof(compat_tmp); ++ } else ++#endif ++ { ++ if (len <= sizeof(*info)) ++ return ERR_PTR(-EINVAL); ++ ++ len -= sizeof(*info); ++ if (copy_from_user(info, user, sizeof(*info)) != 0) ++ return ERR_PTR(-EFAULT); ++ ++ info->name[sizeof(info->name) - 1] = '\0'; ++ user += sizeof(*info); ++ } ++ ++ size = sizeof(struct xt_counters); ++ size *= info->num_counters; ++ ++ if (size != (u64)len) ++ return ERR_PTR(-EINVAL); ++ ++ mem = vmalloc(len); ++ if (!mem) ++ return ERR_PTR(-ENOMEM); ++ ++ if (copy_from_user(mem, user, len) == 0) ++ return mem; ++ ++ vfree(mem); ++ return ERR_PTR(-EFAULT); ++} ++EXPORT_SYMBOL_GPL(xt_copy_counters_from_user); ++ + #ifdef CONFIG_COMPAT + int xt_compat_target_offset(const struct xt_target *target) + { +@@ -606,6 +841,7 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr, + struct compat_xt_entry_target *ct = (struct compat_xt_entry_target *)t; + int pad, off = xt_compat_target_offset(target); + u_int16_t tsize = ct->u.user.target_size; ++ char name[sizeof(t->u.user.name)]; + + t = *dstptr; + memcpy(t, ct, sizeof(*ct)); +@@ -619,6 +855,9 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr, + + tsize += off; + t->u.user.target_size = tsize; ++ strlcpy(name, target->name, sizeof(name)); ++ module_put(target->me); ++ strncpy(t->u.user.name, name, sizeof(t->u.user.name)); + + *size += off; + *dstptr += tsize; +diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c +index 330ebd6..f48e3b3 100644 +--- a/net/netlink/af_netlink.c ++++ b/net/netlink/af_netlink.c +@@ -2059,6 +2059,7 @@ static int netlink_dump(struct sock *sk) + struct netlink_callback *cb; + struct sk_buff *skb = NULL; + struct nlmsghdr *nlh; ++ struct module *module; + int len, err = -ENOBUFS; + int alloc_min_size; + int alloc_size; +@@ -2134,9 +2135,11 @@ static int netlink_dump(struct sock *sk) + cb->done(cb); + + nlk->cb_running = false; ++ module = cb->module; ++ skb = cb->skb; + mutex_unlock(nlk->cb_mutex); +- module_put(cb->module); +- consume_skb(cb->skb); ++ module_put(module); ++ consume_skb(skb); + return 0; + + errout_skb: +diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c +index b7e01d8..59658b2 100644 +--- a/net/switchdev/switchdev.c ++++ b/net/switchdev/switchdev.c +@@ -1188,6 +1188,7 @@ int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, + .obj.id = SWITCHDEV_OBJ_ID_IPV4_FIB, + .dst = dst, + .dst_len = dst_len, ++ .fi = fi, + .tos = tos, + .type = type, + .nlflags = nlflags, +@@ -1196,8 +1197,6 @@ int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, + struct net_device *dev; + int err = 0; + +- memcpy(&ipv4_fib.fi, fi, sizeof(ipv4_fib.fi)); +- + /* Don't offload route if using custom ip rules or if + * IPv4 FIB offloading has been disabled completely. + */ +@@ -1242,6 +1241,7 @@ int switchdev_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi, + .obj.id = SWITCHDEV_OBJ_ID_IPV4_FIB, + .dst = dst, + .dst_len = dst_len, ++ .fi = fi, + .tos = tos, + .type = type, + .nlflags = 0, +@@ -1250,8 +1250,6 @@ int switchdev_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi, + struct net_device *dev; + int err = 0; + +- memcpy(&ipv4_fib.fi, fi, sizeof(ipv4_fib.fi)); +- + if (!(fi->fib_flags & RTNH_F_OFFLOAD)) + return 0; + +diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c +index d7d050f..4dfc5c1 100644 +--- a/net/tipc/netlink_compat.c ++++ b/net/tipc/netlink_compat.c +@@ -802,7 +802,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg, + goto out; + + tipc_tlv_sprintf(msg->rep, "%-10u %s", +- nla_get_u32(publ[TIPC_NLA_PUBL_REF]), ++ nla_get_u32(publ[TIPC_NLA_PUBL_KEY]), + scope_str[nla_get_u32(publ[TIPC_NLA_PUBL_SCOPE])]); + out: + tipc_tlv_sprintf(msg->rep, "\n"); +diff --git a/net/tipc/socket.c b/net/tipc/socket.c +index 3eeb50a..5f80d3f 100644 +--- a/net/tipc/socket.c ++++ b/net/tipc/socket.c +@@ -2807,6 +2807,9 @@ int tipc_nl_publ_dump(struct sk_buff *skb, struct netlink_callback *cb) + if (err) + return err; + ++ if (!attrs[TIPC_NLA_SOCK]) ++ return -EINVAL; ++ + err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, + attrs[TIPC_NLA_SOCK], + tipc_nl_sock_policy); +diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c +index b50ee5d..c753211 100644 +--- a/net/wireless/wext-core.c ++++ b/net/wireless/wext-core.c +@@ -955,8 +955,29 @@ static int wireless_process_ioctl(struct net *net, struct ifreq *ifr, + return private(dev, iwr, cmd, info, handler); + } + /* Old driver API : call driver ioctl handler */ +- if (dev->netdev_ops->ndo_do_ioctl) +- return dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd); ++ if (dev->netdev_ops->ndo_do_ioctl) { ++#ifdef CONFIG_COMPAT ++ if (info->flags & IW_REQUEST_FLAG_COMPAT) { ++ int ret = 0; ++ struct iwreq iwr_lcl; ++ struct compat_iw_point *iwp_compat = (void *) &iwr->u.data; ++ ++ memcpy(&iwr_lcl, iwr, sizeof(struct iwreq)); ++ iwr_lcl.u.data.pointer = compat_ptr(iwp_compat->pointer); ++ iwr_lcl.u.data.length = iwp_compat->length; ++ iwr_lcl.u.data.flags = iwp_compat->flags; ++ ++ ret = dev->netdev_ops->ndo_do_ioctl(dev, (void *) &iwr_lcl, cmd); ++ ++ iwp_compat->pointer = ptr_to_compat(iwr_lcl.u.data.pointer); ++ iwp_compat->length = iwr_lcl.u.data.length; ++ iwp_compat->flags = iwr_lcl.u.data.flags; ++ ++ return ret; ++ } else ++#endif ++ return dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd); ++ } + return -EOPNOTSUPP; + } + +diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c +index 9a0d144..94089fc 100644 +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -365,8 +365,11 @@ enum { + + #define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170) + #define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70) ++#define IS_KBL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa171) ++#define IS_KBL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d71) + #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) +-#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) ++#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) || \ ++ IS_KBL(pci) || IS_KBL_LP(pci) + + static char *driver_short_names[] = { + [AZX_DRIVER_ICH] = "HDA Intel", +@@ -2181,6 +2184,12 @@ static const struct pci_device_id azx_ids[] = { + /* Sunrise Point-LP */ + { PCI_DEVICE(0x8086, 0x9d70), + .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, ++ /* Kabylake */ ++ { PCI_DEVICE(0x8086, 0xa171), ++ .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, ++ /* Kabylake-LP */ ++ { PCI_DEVICE(0x8086, 0x9d71), ++ .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, + /* Broxton-P(Apollolake) */ + { PCI_DEVICE(0x8086, 0x5a98), + .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON }, +diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c +index d53c25e..0fe18ed 100644 +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -346,6 +346,9 @@ static void alc_fill_eapd_coef(struct hda_codec *codec) + case 0x10ec0234: + case 0x10ec0274: + case 0x10ec0294: ++ case 0x10ec0700: ++ case 0x10ec0701: ++ case 0x10ec0703: + alc_update_coef_idx(codec, 0x10, 1<<15, 0); + break; + case 0x10ec0662: +@@ -2655,6 +2658,7 @@ enum { + ALC269_TYPE_ALC256, + ALC269_TYPE_ALC225, + ALC269_TYPE_ALC294, ++ ALC269_TYPE_ALC700, + }; + + /* +@@ -2686,6 +2690,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec) + case ALC269_TYPE_ALC256: + case ALC269_TYPE_ALC225: + case ALC269_TYPE_ALC294: ++ case ALC269_TYPE_ALC700: + ssids = alc269_ssids; + break; + default: +@@ -3618,13 +3623,20 @@ static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec, + static void alc_headset_mode_unplugged(struct hda_codec *codec) + { + static struct coef_fw coef0255[] = { +- WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */ + WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */ + UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/ + WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */ + WRITE_COEFEX(0x57, 0x03, 0x8aa6), /* Direct Drive HP Amp control */ + {} + }; ++ static struct coef_fw coef0255_1[] = { ++ WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */ ++ {} ++ }; ++ static struct coef_fw coef0256[] = { ++ WRITE_COEF(0x1b, 0x0c4b), /* LDO and MISC control */ ++ {} ++ }; + static struct coef_fw coef0233[] = { + WRITE_COEF(0x1b, 0x0c0b), + WRITE_COEF(0x45, 0xc429), +@@ -3677,7 +3689,11 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec) + + switch (codec->core.vendor_id) { + case 0x10ec0255: ++ alc_process_coef_fw(codec, coef0255_1); ++ alc_process_coef_fw(codec, coef0255); ++ break; + case 0x10ec0256: ++ alc_process_coef_fw(codec, coef0256); + alc_process_coef_fw(codec, coef0255); + break; + case 0x10ec0233: +@@ -3896,6 +3912,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec) + WRITE_COEFEX(0x57, 0x03, 0x8ea6), + {} + }; ++ static struct coef_fw coef0256[] = { ++ WRITE_COEF(0x45, 0xd489), /* Set to CTIA type */ ++ WRITE_COEF(0x1b, 0x0c6b), ++ WRITE_COEFEX(0x57, 0x03, 0x8ea6), ++ {} ++ }; + static struct coef_fw coef0233[] = { + WRITE_COEF(0x45, 0xd429), + WRITE_COEF(0x1b, 0x0c2b), +@@ -3936,9 +3958,11 @@ static void alc_headset_mode_ctia(struct hda_codec *codec) + + switch (codec->core.vendor_id) { + case 0x10ec0255: +- case 0x10ec0256: + alc_process_coef_fw(codec, coef0255); + break; ++ case 0x10ec0256: ++ alc_process_coef_fw(codec, coef0256); ++ break; + case 0x10ec0233: + case 0x10ec0283: + alc_process_coef_fw(codec, coef0233); +@@ -3978,6 +4002,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec) + WRITE_COEFEX(0x57, 0x03, 0x8ea6), + {} + }; ++ static struct coef_fw coef0256[] = { ++ WRITE_COEF(0x45, 0xe489), /* Set to OMTP Type */ ++ WRITE_COEF(0x1b, 0x0c6b), ++ WRITE_COEFEX(0x57, 0x03, 0x8ea6), ++ {} ++ }; + static struct coef_fw coef0233[] = { + WRITE_COEF(0x45, 0xe429), + WRITE_COEF(0x1b, 0x0c2b), +@@ -4018,9 +4048,11 @@ static void alc_headset_mode_omtp(struct hda_codec *codec) + + switch (codec->core.vendor_id) { + case 0x10ec0255: +- case 0x10ec0256: + alc_process_coef_fw(codec, coef0255); + break; ++ case 0x10ec0256: ++ alc_process_coef_fw(codec, coef0256); ++ break; + case 0x10ec0233: + case 0x10ec0283: + alc_process_coef_fw(codec, coef0233); +@@ -4266,7 +4298,7 @@ static void alc_fixup_headset_mode_no_hp_mic(struct hda_codec *codec, + static void alc255_set_default_jack_type(struct hda_codec *codec) + { + /* Set to iphone type */ +- static struct coef_fw fw[] = { ++ static struct coef_fw alc255fw[] = { + WRITE_COEF(0x1b, 0x880b), + WRITE_COEF(0x45, 0xd089), + WRITE_COEF(0x1b, 0x080b), +@@ -4274,7 +4306,22 @@ static void alc255_set_default_jack_type(struct hda_codec *codec) + WRITE_COEF(0x1b, 0x0c0b), + {} + }; +- alc_process_coef_fw(codec, fw); ++ static struct coef_fw alc256fw[] = { ++ WRITE_COEF(0x1b, 0x884b), ++ WRITE_COEF(0x45, 0xd089), ++ WRITE_COEF(0x1b, 0x084b), ++ WRITE_COEF(0x46, 0x0004), ++ WRITE_COEF(0x1b, 0x0c4b), ++ {} ++ }; ++ switch (codec->core.vendor_id) { ++ case 0x10ec0255: ++ alc_process_coef_fw(codec, alc255fw); ++ break; ++ case 0x10ec0256: ++ alc_process_coef_fw(codec, alc256fw); ++ break; ++ } + msleep(30); + } + +@@ -5587,6 +5634,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { + SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK), + SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK), ++ SND_PCI_QUIRK(0x17aa, 0x2231, "Thinkpad T560", ALC292_FIXUP_TPT460), + SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460), + SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), + SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), +@@ -5775,6 +5823,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { + {0x12, 0x90a60180}, + {0x14, 0x90170130}, + {0x21, 0x02211040}), ++ SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5565", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, ++ {0x12, 0x90a60180}, ++ {0x14, 0x90170120}, ++ {0x21, 0x02211030}), + SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, + {0x12, 0x90a60160}, + {0x14, 0x90170120}, +@@ -6053,6 +6105,14 @@ static int patch_alc269(struct hda_codec *codec) + case 0x10ec0294: + spec->codec_variant = ALC269_TYPE_ALC294; + break; ++ case 0x10ec0700: ++ case 0x10ec0701: ++ case 0x10ec0703: ++ spec->codec_variant = ALC269_TYPE_ALC700; ++ spec->gen.mixer_nid = 0; /* ALC700 does not have any loopback mixer path */ ++ alc_update_coef_idx(codec, 0x4a, 0, 1 << 15); /* Combo jack auto trigger control */ ++ break; ++ + } + + if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) { +@@ -7008,6 +7068,9 @@ static const struct hda_device_id snd_hda_id_realtek[] = { + HDA_CODEC_ENTRY(0x10ec0670, "ALC670", patch_alc662), + HDA_CODEC_ENTRY(0x10ec0671, "ALC671", patch_alc662), + HDA_CODEC_ENTRY(0x10ec0680, "ALC680", patch_alc680), ++ HDA_CODEC_ENTRY(0x10ec0700, "ALC700", patch_alc269), ++ HDA_CODEC_ENTRY(0x10ec0701, "ALC701", patch_alc269), ++ HDA_CODEC_ENTRY(0x10ec0703, "ALC703", patch_alc269), + HDA_CODEC_ENTRY(0x10ec0867, "ALC891", patch_alc882), + HDA_CODEC_ENTRY(0x10ec0880, "ALC880", patch_alc880), + HDA_CODEC_ENTRY(0x10ec0882, "ALC882", patch_alc882), +diff --git a/virt/kvm/arm/hyp/vgic-v2-sr.c b/virt/kvm/arm/hyp/vgic-v2-sr.c +index 674bdf8..501849a 100644 +--- a/virt/kvm/arm/hyp/vgic-v2-sr.c ++++ b/virt/kvm/arm/hyp/vgic-v2-sr.c +@@ -93,12 +93,11 @@ static void __hyp_text save_lrs(struct kvm_vcpu *vcpu, void __iomem *base) + if (!(vcpu->arch.vgic_cpu.live_lrs & (1UL << i))) + continue; + +- if (cpu_if->vgic_elrsr & (1UL << i)) { ++ if (cpu_if->vgic_elrsr & (1UL << i)) + cpu_if->vgic_lr[i] &= ~GICH_LR_STATE; +- continue; +- } ++ else ++ cpu_if->vgic_lr[i] = readl_relaxed(base + GICH_LR0 + (i * 4)); + +- cpu_if->vgic_lr[i] = readl_relaxed(base + GICH_LR0 + (i * 4)); + writel_relaxed(0, base + GICH_LR0 + (i * 4)); + } + } +diff --git a/virt/kvm/irqchip.c b/virt/kvm/irqchip.c +index fe84e1a..8db197b 100644 +--- a/virt/kvm/irqchip.c ++++ b/virt/kvm/irqchip.c +@@ -40,7 +40,7 @@ int kvm_irq_map_gsi(struct kvm *kvm, + + irq_rt = srcu_dereference_check(kvm->irq_routing, &kvm->irq_srcu, + lockdep_is_held(&kvm->irq_lock)); +- if (gsi < irq_rt->nr_rt_entries) { ++ if (irq_rt && gsi < irq_rt->nr_rt_entries) { + hlist_for_each_entry(e, &irq_rt->map[gsi], link) { + entries[n] = *e; + ++n; diff --git a/4.5.7/4420_grsecurity-3.1-4.5.7-201606302132.patch b/4.6.3/4420_grsecurity-3.1-4.6.3-201607060823.patch index 6f9feec..92e7d0d 100644 --- a/4.5.7/4420_grsecurity-3.1-4.5.7-201606302132.patch +++ b/4.6.3/4420_grsecurity-3.1-4.6.3-201607060823.patch @@ -323,10 +323,10 @@ index 13f888a..250729b 100644 A typical pattern in a Kbuild file looks like this: diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index 21e4b48..82bb512 100644 +index 0b3de80..550d8e8 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt -@@ -1300,6 +1300,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -1320,6 +1320,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. [KNL] Should the hard-lockup detector generate backtraces on all cpus. Format: <integer> @@ -339,7 +339,7 @@ index 21e4b48..82bb512 100644 hashdist= [KNL,NUMA] Large hashes allocated during boot are distributed across NUMA nodes. Defaults on -@@ -2476,6 +2482,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -2515,6 +2521,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. noexec=on: enable non-executable mappings (default) noexec=off: disable non-executable mappings @@ -350,7 +350,7 @@ index 21e4b48..82bb512 100644 nosmap [X86] Disable SMAP (Supervisor Mode Access Prevention) even if it is supported by processor. -@@ -2772,6 +2782,35 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -2818,6 +2828,35 @@ bytes respectively. Such letter suffixes can also be entirely omitted. the specified number of seconds. This is to be used if your oopses keep scrolling off the screen. @@ -387,7 +387,7 @@ index 21e4b48..82bb512 100644 pcd. [PARIDE] diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt -index a93b414..f50a50b 100644 +index fcddfd5..71afd6b 100644 --- a/Documentation/sysctl/kernel.txt +++ b/Documentation/sysctl/kernel.txt @@ -42,6 +42,7 @@ show up in /proc/sys/kernel: @@ -398,7 +398,7 @@ index a93b414..f50a50b 100644 - modprobe ==> Documentation/debugging-modules.txt - modules_disabled - msg_next_id [ sysv ipc ] -@@ -403,6 +404,20 @@ This flag controls the L2 cache of G3 processor boards. If +@@ -406,6 +407,20 @@ This flag controls the L2 cache of G3 processor boards. If ============================================================== @@ -420,7 +420,7 @@ index a93b414..f50a50b 100644 A toggle value indicating if modules are allowed to be loaded diff --git a/Makefile b/Makefile -index 90e4bd9..66ce952 100644 +index c62b531..e158b54 100644 --- a/Makefile +++ b/Makefile @@ -298,7 +298,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ @@ -434,7 +434,7 @@ index 90e4bd9..66ce952 100644 ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \ -@@ -547,7 +549,7 @@ ifeq ($(KBUILD_EXTMOD),) +@@ -548,7 +550,7 @@ ifeq ($(KBUILD_EXTMOD),) # in parallel PHONY += scripts scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \ @@ -443,7 +443,7 @@ index 90e4bd9..66ce952 100644 $(Q)$(MAKE) $(build)=$(@) # Objects we will link into vmlinux / subdirs we need to visit -@@ -622,6 +624,8 @@ endif +@@ -623,6 +625,8 @@ endif # Tell gcc to never replace conditional load with a non-conditional one KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) @@ -452,7 +452,7 @@ index 90e4bd9..66ce952 100644 ifdef CONFIG_READABLE_ASM # Disable optimizations that make assembler listings hard to read. # reorder blocks reorders the control in the function -@@ -715,7 +719,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g) +@@ -724,7 +728,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g) else KBUILD_CFLAGS += -g endif @@ -461,7 +461,7 @@ index 90e4bd9..66ce952 100644 endif ifdef CONFIG_DEBUG_INFO_DWARF4 KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,) -@@ -887,7 +891,7 @@ export mod_sign_cmd +@@ -899,7 +903,7 @@ export mod_sign_cmd ifeq ($(KBUILD_EXTMOD),) @@ -470,7 +470,7 @@ index 90e4bd9..66ce952 100644 vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ $(core-y) $(core-m) $(drivers-y) $(drivers-m) \ -@@ -990,7 +994,7 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ +@@ -1002,7 +1006,7 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ archprepare: archheaders archscripts prepare1 scripts_basic @@ -479,7 +479,7 @@ index 90e4bd9..66ce952 100644 $(Q)$(MAKE) $(build)=. # All the preparing.. -@@ -1185,7 +1189,11 @@ MRPROPER_FILES += .config .config.old .version .old_version \ +@@ -1220,7 +1224,11 @@ MRPROPER_FILES += .config .config.old .version .old_version \ Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ signing_key.pem signing_key.priv signing_key.x509 \ x509.genkey extra_certificates signing_key.x509.keyid \ @@ -492,7 +492,7 @@ index 90e4bd9..66ce952 100644 # clean - Delete most, but leave enough to build external modules # -@@ -1224,7 +1232,7 @@ distclean: mrproper +@@ -1259,7 +1267,7 @@ distclean: mrproper @find $(srctree) $(RCS_FIND_IGNORE) \ \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ @@ -501,7 +501,7 @@ index 90e4bd9..66ce952 100644 -type f -print | xargs rm -f -@@ -1443,6 +1451,7 @@ clean: $(clean-dirs) +@@ -1480,6 +1488,7 @@ clean: $(clean-dirs) -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '*.symtypes' -o -name 'modules.order' \ -o -name modules.builtin -o -name '.tmp_*.o.*' \ @@ -510,7 +510,7 @@ index 90e4bd9..66ce952 100644 # Generate tags for editors diff --git a/arch/Kconfig b/arch/Kconfig -index f6b649d..5ba628b 100644 +index 81869a5..b10fc6c 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -353,6 +353,20 @@ config SECCOMP_FILTER @@ -865,10 +865,10 @@ index 4a905bd..0a4da53 100644 /* Allow reads even for write-only mappings */ if (!(vma->vm_flags & (VM_READ | VM_WRITE))) diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig -index 8a188bc..26608f1 100644 +index a876743..fe2a193 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig -@@ -528,6 +528,7 @@ config ARC_DBG_TLB_MISS_COUNT +@@ -549,6 +549,7 @@ config ARC_DBG_TLB_MISS_COUNT bool "Profile TLB Misses" default n select DEBUG_FS @@ -877,7 +877,7 @@ index 8a188bc..26608f1 100644 Counts number of I and D TLB Misses and exports them via Debugfs The counters can be cleared via Debugfs as well diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 4f799e5..c1e2b95 100644 +index cdfa6c2..aba8354 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -53,6 +53,7 @@ config ARM @@ -888,7 +888,7 @@ index 4f799e5..c1e2b95 100644 select HAVE_GENERIC_DMA_COHERENT select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)) select HAVE_IDE if PCI || ISA || PCMCIA -@@ -1622,6 +1623,7 @@ config HIGHPTE +@@ -1629,6 +1630,7 @@ config HIGHPTE config CPU_SW_DOMAIN_PAN bool "Enable use of CPU domains to implement privileged no-access" depends on MMU && !ARM_LPAE @@ -896,7 +896,7 @@ index 4f799e5..c1e2b95 100644 default y help Increase kernel security by ensuring that normal kernel accesses -@@ -1698,7 +1700,7 @@ config ALIGNMENT_TRAP +@@ -1705,7 +1707,7 @@ config ALIGNMENT_TRAP config UACCESS_WITH_MEMCPY bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()" @@ -905,7 +905,7 @@ index 4f799e5..c1e2b95 100644 default y if CPU_FEROCEON help Implement faster copy_to_user and clear_user methods for CPU -@@ -1953,6 +1955,7 @@ config KEXEC +@@ -1960,6 +1962,7 @@ config KEXEC depends on (!SMP || PM_SLEEP_SMP) depends on !CPU_V7M select KEXEC_CORE @@ -913,7 +913,7 @@ index 4f799e5..c1e2b95 100644 help kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot -@@ -1997,7 +2000,7 @@ config EFI_STUB +@@ -2004,7 +2007,7 @@ config EFI_STUB config EFI bool "UEFI runtime support" @@ -923,7 +923,7 @@ index 4f799e5..c1e2b95 100644 select EFI_PARAMS_FROM_FDT select EFI_STUB diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug -index c6b6175..2884505 100644 +index 1098e91..d6415c8 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -7,6 +7,7 @@ config ARM_PTDUMP @@ -935,10 +935,10 @@ index c6b6175..2884505 100644 Say Y here if you want to show the kernel pagetable layout in a debugfs file. This information is only useful for kernel developers diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile -index 43788b1..2efefcf 100644 +index d50430c..01cc53b 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile -@@ -106,6 +106,8 @@ ORIG_CFLAGS := $(KBUILD_CFLAGS) +@@ -103,6 +103,8 @@ ORIG_CFLAGS := $(KBUILD_CFLAGS) KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) endif @@ -1525,7 +1525,7 @@ index 9e10c45..24a14ce 100644 #define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0) #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1LL, 0LL) diff --git a/arch/arm/include/asm/cache.h b/arch/arm/include/asm/cache.h -index 75fe66b..ba3dee4 100644 +index 75fe66b..2255c86 100644 --- a/arch/arm/include/asm/cache.h +++ b/arch/arm/include/asm/cache.h @@ -4,8 +4,10 @@ @@ -1540,15 +1540,8 @@ index 75fe66b..ba3dee4 100644 /* * Memory returned by kmalloc() may be used for DMA, so we must make -@@ -24,5 +26,6 @@ - #endif - - #define __read_mostly __attribute__((__section__(".data..read_mostly"))) -+#define __read_only __attribute__ ((__section__(".data..read_only"))) - - #endif diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h -index d5525bf..e55725d 100644 +index 9156fc3..9791d17 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h @@ -116,7 +116,7 @@ struct cpu_cache_fns { @@ -1561,7 +1554,7 @@ index d5525bf..e55725d 100644 /* * Select the calling method diff --git a/arch/arm/include/asm/checksum.h b/arch/arm/include/asm/checksum.h -index 5233151..87a71fa 100644 +index 524692f..a8871ec 100644 --- a/arch/arm/include/asm/checksum.h +++ b/arch/arm/include/asm/checksum.h @@ -37,7 +37,19 @@ __wsum @@ -1614,7 +1607,7 @@ index 3848259..bee9d84 100644 struct of_cpuidle_method { const char *method; diff --git a/arch/arm/include/asm/domain.h b/arch/arm/include/asm/domain.h -index fc8ba16..d20fbde 100644 +index 99d9f63..e3e4da6 100644 --- a/arch/arm/include/asm/domain.h +++ b/arch/arm/include/asm/domain.h @@ -42,7 +42,6 @@ @@ -1676,7 +1669,7 @@ index fc8ba16..d20fbde 100644 domain_val(DOMAIN_VECTORS, DOMAIN_CLIENT)) #endif -@@ -113,6 +136,17 @@ static inline void set_domain(unsigned val) +@@ -124,6 +147,17 @@ static inline void set_domain(unsigned val) set_domain(domain); \ } while (0) @@ -2386,7 +2379,7 @@ index 703926e..39aa432 100644 /** * arm_cpuidle_simple_enter() - a wrapper to cpu_do_idle() diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S -index 3ce377f..e4cad12 100644 +index e255050..51e1b59 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -50,6 +50,87 @@ @@ -2781,7 +2774,7 @@ index 0c7efc3..3927085 100644 plt_end = (void *)plt + mod->arch.init_plt->sh_size; count = &mod->arch.init_plt_count; diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c -index efdddcb..35e58f6 100644 +index 4f14b5c..91ff261 100644 --- a/arch/arm/kernel/module.c +++ b/arch/arm/kernel/module.c @@ -38,17 +38,47 @@ @@ -2984,7 +2977,7 @@ index 4adfb46..65a3b13 100644 } #endif diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c -index ef9119f..31995a3 100644 +index 4d93758..c2f471f92 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c @@ -928,10 +928,19 @@ static void tracehook_report_syscall(struct pt_regs *regs, @@ -3008,7 +3001,7 @@ index ef9119f..31995a3 100644 #ifdef CONFIG_HAVE_ARCH_SECCOMP_FILTER if (secure_computing() == -1) diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c -index 3826935..8ed63ed 100644 +index 71a2ff9..7753acf 100644 --- a/arch/arm/kernel/reboot.c +++ b/arch/arm/kernel/reboot.c @@ -122,6 +122,7 @@ void machine_power_off(void) @@ -3020,7 +3013,7 @@ index 3826935..8ed63ed 100644 /* diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c -index c86ea8a..fd03a2d 100644 +index 2c4bea3..3f5625e 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -113,21 +113,23 @@ EXPORT_SYMBOL(elf_hwcap); @@ -3126,7 +3119,7 @@ index 7b8f214..ece8e28 100644 - return page; -} diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c -index 37312f6..bb32c9b 100644 +index baee702..49e7294 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -82,7 +82,7 @@ enum ipi_msg_type { @@ -3194,10 +3187,10 @@ index bc69838..e5dfdd4 100644 do_exit(signr); } diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S -index 8b60fde..8d986dd 100644 +index e2c6da0..6155a88 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S -@@ -37,7 +37,7 @@ +@@ -44,7 +44,7 @@ #endif #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \ @@ -3206,8 +3199,8 @@ index 8b60fde..8d986dd 100644 #define ARM_EXIT_KEEP(x) x #define ARM_EXIT_DISCARD(x) #else -@@ -120,6 +120,8 @@ SECTIONS - #ifdef CONFIG_DEBUG_RODATA +@@ -125,6 +125,8 @@ SECTIONS + #ifdef CONFIG_DEBUG_ALIGN_RODATA . = ALIGN(1<<SECTION_SHIFT); #endif + _etext = .; /* End of text section */ @@ -3215,20 +3208,20 @@ index 8b60fde..8d986dd 100644 RO_DATA(PAGE_SIZE) . = ALIGN(4); -@@ -150,8 +152,6 @@ SECTIONS +@@ -155,8 +157,6 @@ SECTIONS NOTES - _etext = .; /* End of text and rodata section */ - - #ifndef CONFIG_XIP_KERNEL - # ifdef CONFIG_ARM_KERNMEM_PERMS + #ifdef CONFIG_DEBUG_RODATA . = ALIGN(1<<SECTION_SHIFT); + #else diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c -index dda1959..0de41b4 100644 +index dded1b7..6fa4373 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c -@@ -58,7 +58,7 @@ static unsigned long hyp_default_vectors; +@@ -59,7 +59,7 @@ static unsigned long hyp_default_vectors; static DEFINE_PER_CPU(struct kvm_vcpu *, kvm_arm_running_vcpu); /* The VMID used in the VTTBR */ @@ -3237,7 +3230,7 @@ index dda1959..0de41b4 100644 static u32 kvm_next_vmid; static unsigned int kvm_vmid_bits __read_mostly; static DEFINE_SPINLOCK(kvm_vmid_lock); -@@ -387,7 +387,7 @@ void force_vm_exit(const cpumask_t *mask) +@@ -392,7 +392,7 @@ void force_vm_exit(const cpumask_t *mask) */ static bool need_new_vmid_gen(struct kvm *kvm) { @@ -3246,7 +3239,7 @@ index dda1959..0de41b4 100644 } /** -@@ -420,7 +420,7 @@ static void update_vttbr(struct kvm *kvm) +@@ -425,7 +425,7 @@ static void update_vttbr(struct kvm *kvm) /* First user of a new VMID generation? */ if (unlikely(kvm_next_vmid == 0)) { @@ -3255,7 +3248,7 @@ index dda1959..0de41b4 100644 kvm_next_vmid = 1; /* -@@ -437,7 +437,7 @@ static void update_vttbr(struct kvm *kvm) +@@ -442,7 +442,7 @@ static void update_vttbr(struct kvm *kvm) kvm_call_hyp(__kvm_flush_vm_context); } @@ -3327,7 +3320,7 @@ index 6bd1089..e999400 100644 { unsigned long ua_flags; diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c -index c169cc3..b007ec6 100644 +index fee2b00..943ea95 100644 --- a/arch/arm/mach-exynos/suspend.c +++ b/arch/arm/mach-exynos/suspend.c @@ -734,8 +734,10 @@ void __init exynos_pm_init(void) @@ -3343,8 +3336,38 @@ index c169cc3..b007ec6 100644 register_syscore_ops(&exynos_pm_syscore_ops); suspend_set_ops(&exynos_suspend_ops); +diff --git a/arch/arm/mach-mmp/mmp2.c b/arch/arm/mach-mmp/mmp2.c +index afba546..9e5403d 100644 +--- a/arch/arm/mach-mmp/mmp2.c ++++ b/arch/arm/mach-mmp/mmp2.c +@@ -98,7 +98,9 @@ void __init mmp2_init_irq(void) + { + mmp2_init_icu(); + #ifdef CONFIG_PM +- icu_irq_chip.irq_set_wake = mmp2_set_wake; ++ pax_open_kernel(); ++ const_cast(icu_irq_chip.irq_set_wake) = mmp2_set_wake; ++ pax_close_kernel(); + #endif + } + +diff --git a/arch/arm/mach-mmp/pxa910.c b/arch/arm/mach-mmp/pxa910.c +index 1ccbba9..7a95c29 100644 +--- a/arch/arm/mach-mmp/pxa910.c ++++ b/arch/arm/mach-mmp/pxa910.c +@@ -84,7 +84,9 @@ void __init pxa910_init_irq(void) + { + icu_init_irq(); + #ifdef CONFIG_PM +- icu_irq_chip.irq_set_wake = pxa910_set_wake; ++ pax_open_kernel(); ++ const_cast(icu_irq_chip.irq_set_wake) = pxa910_set_wake; ++ pax_close_kernel(); + #endif + } + diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c -index 55348ee..bfcd336 100644 +index 7e989d6..614bf8b 100644 --- a/arch/arm/mach-mvebu/coherency.c +++ b/arch/arm/mach-mvebu/coherency.c @@ -163,7 +163,7 @@ exit: @@ -3517,6 +3540,19 @@ index ff0a68c..b312aa0 100644 pdev = omap_device_build(dev_name, id, oh, &pdata, sizeof(struct omap_wd_timer_platform_data)); WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n", +diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c +index 92ec8c3..3df2546 100644 +--- a/arch/arm/mach-s3c64xx/mach-smdk6410.c ++++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c +@@ -240,7 +240,7 @@ static struct platform_device smdk6410_b_pwr_5v = { + }; + #endif + +-static struct s3c_ide_platdata smdk6410_ide_pdata __initdata = { ++static struct s3c_ide_platdata smdk6410_ide_pdata __initconst = { + .setup_gpio = s3c64xx_ide_setup_gpio, + }; + diff --git a/arch/arm/mach-shmobile/platsmp-apmu.c b/arch/arm/mach-shmobile/platsmp-apmu.c index aba75c8..b2b340f 100644 --- a/arch/arm/mach-shmobile/platsmp-apmu.c @@ -3589,7 +3625,7 @@ index 7cd9865..a00b6ab 100644 #include "common.h" diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig -index 549f6d3..909a9dc 100644 +index 5534766..1ffd12a 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig @@ -442,6 +442,7 @@ config CPU_32v5 @@ -3759,7 +3795,7 @@ index c8c8b9e..c55cc79 100644 atomic64_set(&mm->context.id, asid); } diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c -index daafcf1..a04e1fd 100644 +index ad58418..c0349f4 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c @@ -25,6 +25,7 @@ @@ -3974,7 +4010,7 @@ index daafcf1..a04e1fd 100644 +#else + unsigned int bkpt; + -+ if (!probe_kernel_address(pc, bkpt) && cpu_to_le32(bkpt) == 0xe12f1073) { ++ if (!probe_kernel_address((const void *)pc, bkpt) && cpu_to_le32(bkpt) == 0xe12f1073) { +#endif + current->thread.error_code = ifsr; + current->thread.trap_no = 0; @@ -4023,10 +4059,10 @@ index 05ec5e0..0b70277 100644 unsigned long search_exception_table(unsigned long addr); void early_abt_enable(void); diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c -index 49bd081..a4502de 100644 +index 370581a..b985cc1 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c -@@ -745,7 +745,46 @@ void free_tcmmem(void) +@@ -747,7 +747,46 @@ void free_tcmmem(void) { #ifdef CONFIG_HAVE_TCM extern char __tcm_start, __tcm_end; @@ -4208,7 +4244,7 @@ index 66353ca..8aad9f8 100644 } } diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c -index 434d76f..af843d5 100644 +index 62f4d01..bffdcfe 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -243,7 +243,15 @@ __setup("noalign", noalign_setup); @@ -4448,7 +4484,7 @@ index 434d76f..af843d5 100644 @@ -1336,7 +1374,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK); map.virtual = MODULES_VADDR; - map.length = ((unsigned long)_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK; + map.length = ((unsigned long)_exiprom - map.virtual + ~SECTION_MASK) & SECTION_MASK; - map.type = MT_ROM; + map.type = MT_ROM_RX; create_mapping(&map); @@ -4480,18 +4516,22 @@ index 434d76f..af843d5 100644 map.virtual = 0xffff0000; map.length = PAGE_SIZE; #ifdef CONFIG_KUSER_HELPERS -@@ -1426,8 +1464,10 @@ static void __init kmap_init(void) +@@ -1426,12 +1464,14 @@ static void __init kmap_init(void) static void __init map_lowmem(void) { struct memblock_region *reg; +#ifndef CONFIG_PAX_KERNEXEC + #ifdef CONFIG_XIP_KERNEL + phys_addr_t kernel_x_start = round_down(__pa(_sdata), SECTION_SIZE); + #else phys_addr_t kernel_x_start = round_down(__pa(_stext), SECTION_SIZE); + #endif phys_addr_t kernel_x_end = round_up(__pa(__init_end), SECTION_SIZE); +#endif /* Map all the lowmem memory banks. */ for_each_memblock(memory, reg) { -@@ -1443,11 +1483,48 @@ static void __init map_lowmem(void) +@@ -1447,11 +1487,48 @@ static void __init map_lowmem(void) if (start >= end) break; @@ -4541,7 +4581,7 @@ index 434d76f..af843d5 100644 create_mapping(&map); } else if (start >= kernel_x_end) { -@@ -1471,7 +1548,7 @@ static void __init map_lowmem(void) +@@ -1475,7 +1552,7 @@ static void __init map_lowmem(void) map.pfn = __phys_to_pfn(kernel_x_start); map.virtual = __phys_to_virt(kernel_x_start); map.length = kernel_x_end - kernel_x_start; @@ -4550,7 +4590,7 @@ index 434d76f..af843d5 100644 create_mapping(&map); -@@ -1484,6 +1561,7 @@ static void __init map_lowmem(void) +@@ -1488,6 +1565,7 @@ static void __init map_lowmem(void) create_mapping(&map); } } @@ -4702,10 +4742,10 @@ index a5bc92d..0bb4730 100644 + pax_close_kernel(); } diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 8cc6228..6d6e4f8 100644 +index 4f43622..22c9473 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig -@@ -70,6 +70,7 @@ config ARM64 +@@ -72,6 +72,7 @@ config ARM64 select HAVE_FTRACE_MCOUNT_RECORD select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_GRAPH_TRACER @@ -4714,7 +4754,7 @@ index 8cc6228..6d6e4f8 100644 select HAVE_HW_BREAKPOINT if PERF_EVENTS select HAVE_IRQ_TIME_ACCOUNTING diff --git a/arch/arm64/Kconfig.debug b/arch/arm64/Kconfig.debug -index e13c4bf..3feaea7 100644 +index 7e76845..e5ce349 100644 --- a/arch/arm64/Kconfig.debug +++ b/arch/arm64/Kconfig.debug @@ -6,6 +6,7 @@ config ARM64_PTDUMP @@ -4771,21 +4811,21 @@ index 0a456be..7799ff5 100644 default: BUILD_BUG(); diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h -index c150539..45f5724 100644 +index ff98585..65eced1 100644 --- a/arch/arm64/include/asm/pgalloc.h +++ b/arch/arm64/include/asm/pgalloc.h -@@ -47,6 +47,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) - set_pud(pud, __pud(__pa(pmd) | PMD_TYPE_TABLE)); +@@ -51,6 +51,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) + { + __pud_populate(pud, __pa(pmd), PMD_TYPE_TABLE); } - ++ +static inline void pud_populate_kernel(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) +{ + pud_populate(mm, pud, pmd); +} -+ - #endif /* CONFIG_PGTABLE_LEVELS > 2 */ - - #if CONFIG_PGTABLE_LEVELS > 3 + #else + static inline void __pud_populate(pud_t *pud, phys_addr_t pmd, pudval_t prot) + { diff --git a/arch/arm64/include/asm/string.h b/arch/arm64/include/asm/string.h index 2eb714c..6c0fdb7 100644 --- a/arch/arm64/include/asm/string.h @@ -4843,10 +4883,10 @@ index 2eb714c..6c0fdb7 100644 #if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h -index b2ede967..865eed5 100644 +index 0685d74..6898549 100644 --- a/arch/arm64/include/asm/uaccess.h +++ b/arch/arm64/include/asm/uaccess.h -@@ -102,6 +102,7 @@ static inline void set_fs(mm_segment_t fs) +@@ -114,6 +114,7 @@ static inline void set_fs(mm_segment_t fs) flag; \ }) @@ -5129,7 +5169,7 @@ index 69952c18..4fa2908 100644 #define ARCH_DMA_MINALIGN L1_CACHE_BYTES diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig -index fb0515e..ca9715a 100644 +index b534eba..ace220a 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -518,6 +518,7 @@ config KEXEC @@ -5284,7 +5324,7 @@ index 45698cd..e8e2dbc 100644 static __always_inline void __ticket_spin_unlock_wait(arch_spinlock_t *lock) diff --git a/arch/ia64/include/asm/uaccess.h b/arch/ia64/include/asm/uaccess.h -index 4f3fb6cc..254055e 100644 +index 2189d5d..420134b 100644 --- a/arch/ia64/include/asm/uaccess.h +++ b/arch/ia64/include/asm/uaccess.h @@ -70,6 +70,7 @@ @@ -5520,7 +5560,7 @@ index 70b40d1..01a9a28 100644 /* * If for any reason at all we couldn't handle the fault, make diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c -index f50d4b3..c7975ee 100644 +index 85de86d..db7f6b8 100644 --- a/arch/ia64/mm/hugetlbpage.c +++ b/arch/ia64/mm/hugetlbpage.c @@ -138,6 +138,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, u @@ -5630,7 +5670,7 @@ index 0395c51..5f26031 100644 #define ARCH_DMA_MINALIGN L1_CACHE_BYTES diff --git a/arch/metag/mm/hugetlbpage.c b/arch/metag/mm/hugetlbpage.c -index 53f0f6c..2dc07fd 100644 +index b38700ae..15f5c87 100644 --- a/arch/metag/mm/hugetlbpage.c +++ b/arch/metag/mm/hugetlbpage.c @@ -189,6 +189,7 @@ hugetlb_get_unmapped_area_new_pmd(unsigned long len) @@ -5659,8 +5699,21 @@ index 4efe96a..60e8699 100644 #define SMP_CACHE_BYTES L1_CACHE_BYTES +diff --git a/arch/mips/Kbuild b/arch/mips/Kbuild +index 5c3f688..f8cc1b3 100644 +--- a/arch/mips/Kbuild ++++ b/arch/mips/Kbuild +@@ -1,7 +1,7 @@ + # Fail on warnings - also for files referenced in subdirs + # -Werror can be disabled for specific files using: + # CFLAGS_<file.o> := -Wno-error +-subdir-ccflags-y := -Werror ++# subdir-ccflags-y := -Werror + + # platform specific definitions + include arch/mips/Kbuild.platforms diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig -index d3da79d..e317c97 100644 +index 2018c2b..fdd3972 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -49,6 +49,7 @@ config MIPS @@ -5671,7 +5724,7 @@ index d3da79d..e317c97 100644 select MODULES_USE_ELF_REL if MODULES select MODULES_USE_ELF_RELA if MODULES && 64BIT select CLONE_BACKWARDS -@@ -2656,6 +2657,7 @@ source "kernel/Kconfig.preempt" +@@ -2648,6 +2649,7 @@ source "kernel/Kconfig.preempt" config KEXEC bool "Kexec system call" select KEXEC_CORE @@ -6371,6 +6424,18 @@ index 9e8ef59..1139d6b 100644 /* * interrupt-retrigger: NOP for now. This may not be appropriate for all +diff --git a/arch/mips/include/asm/irq.h b/arch/mips/include/asm/irq.h +index 15e0fec..3ee3eec 100644 +--- a/arch/mips/include/asm/irq.h ++++ b/arch/mips/include/asm/irq.h +@@ -11,7 +11,6 @@ + + #include <linux/linkage.h> + #include <linux/smp.h> +-#include <linux/irqdomain.h> + + #include <asm/mipsmtregs.h> + diff --git a/arch/mips/include/asm/local.h b/arch/mips/include/asm/local.h index 8feaed6..1bd8a64 100644 --- a/arch/mips/include/asm/local.h @@ -6548,7 +6613,7 @@ index e309d8f..20eefec 100644 /* * We stash processor id into a COP0 register to retrieve it fast diff --git a/arch/mips/include/asm/uaccess.h b/arch/mips/include/asm/uaccess.h -index 095ecaf..f1da6ff 100644 +index 7f109d4..40b1195 100644 --- a/arch/mips/include/asm/uaccess.h +++ b/arch/mips/include/asm/uaccess.h @@ -146,6 +146,7 @@ static inline bool eva_kernel_access(void) @@ -6651,7 +6716,7 @@ index 8eb5af8..2baf465 100644 } #else diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c -index f63a289..53037c22 100644 +index fa3f9eb..98ada7a 100644 --- a/arch/mips/kernel/pm-cps.c +++ b/arch/mips/kernel/pm-cps.c @@ -172,7 +172,7 @@ int cps_pm_enter_state(enum cps_pm_state state) @@ -6664,7 +6729,7 @@ index f63a289..53037c22 100644 /* Run the generated entry code */ diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c -index 0c0456f..fdb287a3 100644 +index d83730c..ced3459 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c @@ -539,18 +539,6 @@ out: @@ -6783,10 +6848,10 @@ index 4472a7f..c5905e6 100644 } /* Arrange for an interrupt in a short while */ diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c -index 58a7cad..315d7bc 100644 +index 5aa1d5c..491df0d 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c -@@ -697,7 +697,18 @@ asmlinkage void do_ov(struct pt_regs *regs) +@@ -698,7 +698,18 @@ asmlinkage void do_ov(struct pt_regs *regs) }; prev_state = exception_enter(); @@ -7180,19 +7245,6 @@ index bcb5df2..84fabd2 100644 #define L1_CACHE_WAYDISP 0x1000 /* distance from one way to the next */ #define L1_CACHE_TAG_VALID 0x00000001 /* cache tag valid bit */ -diff --git a/arch/nios2/lib/memset.c b/arch/nios2/lib/memset.c -index c2cfcb1..2fcefe7 100644 ---- a/arch/nios2/lib/memset.c -+++ b/arch/nios2/lib/memset.c -@@ -68,7 +68,7 @@ void *memset(void *s, int c, size_t count) - "=r" (charcnt), /* %1 Output */ - "=r" (dwordcnt), /* %2 Output */ - "=r" (fill8reg), /* %3 Output */ -- "=r" (wrkrega) /* %4 Output */ -+ "=&r" (wrkrega) /* %4 Output only */ - : "r" (c), /* %5 Input */ - "0" (s), /* %0 Input/Output */ - "1" (count) /* %1 Input/Output */ diff --git a/arch/openrisc/include/asm/cache.h b/arch/openrisc/include/asm/cache.h index 4ce7a01..449202a 100644 --- a/arch/openrisc/include/asm/cache.h @@ -7234,7 +7286,7 @@ index 1d10999..5907031 100644 diff --git a/arch/parisc/include/asm/cache.h b/arch/parisc/include/asm/cache.h -index 3d0e17b..602e980 100644 +index df0f52b..810699b 100644 --- a/arch/parisc/include/asm/cache.h +++ b/arch/parisc/include/asm/cache.h @@ -5,6 +5,7 @@ @@ -7319,10 +7371,10 @@ index 291cee2..2ac33db 100644 #define PAGE_KERNEL_EXEC __pgprot(_PAGE_KERNEL_EXEC) #define PAGE_KERNEL_RWX __pgprot(_PAGE_KERNEL_RWX) diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h -index 1960b87..e8f57e3 100644 +index 7955e43..7f3661d 100644 --- a/arch/parisc/include/asm/uaccess.h +++ b/arch/parisc/include/asm/uaccess.h -@@ -244,10 +244,10 @@ static inline unsigned long __must_check copy_from_user(void *to, +@@ -243,10 +243,10 @@ static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n) { @@ -7336,7 +7388,7 @@ index 1960b87..e8f57e3 100644 else copy_from_user_overflow(); diff --git a/arch/parisc/kernel/module.c b/arch/parisc/kernel/module.c -index b9d75d9..dae5c9a 100644 +index a0ecdb4a..71d2069 100644 --- a/arch/parisc/kernel/module.c +++ b/arch/parisc/kernel/module.c @@ -100,14 +100,12 @@ @@ -7403,7 +7455,7 @@ index b9d75d9..dae5c9a 100644 return (Elf_Addr)fdesc; } #endif /* CONFIG_64BIT */ -@@ -839,7 +837,7 @@ register_unwind_table(struct module *me, +@@ -847,7 +845,7 @@ register_unwind_table(struct module *me, table = (unsigned char *)sechdrs[me->arch.unwind_section].sh_addr; end = table + sechdrs[me->arch.unwind_section].sh_size; @@ -7413,7 +7465,7 @@ index b9d75d9..dae5c9a 100644 DEBUGP("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n", me->arch.unwind_section, table, end, gp); diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c -index 5aba01a..47cdd5a 100644 +index 0a393a0..5b3199e0 100644 --- a/arch/parisc/kernel/sys_parisc.c +++ b/arch/parisc/kernel/sys_parisc.c @@ -92,6 +92,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, @@ -7485,10 +7537,10 @@ index 5aba01a..47cdd5a 100644 mm->mmap_base = mm->mmap_legacy_base; mm->get_unmapped_area = arch_get_unmapped_area; diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c -index 77e2262..ec65037 100644 +index 97d6b20..2ab0232 100644 --- a/arch/parisc/kernel/traps.c +++ b/arch/parisc/kernel/traps.c -@@ -722,9 +722,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs) +@@ -719,9 +719,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs) down_read(¤t->mm->mmap_sem); vma = find_vma(current->mm,regs->iaoq[0]); @@ -7500,7 +7552,7 @@ index 77e2262..ec65037 100644 fault_space = regs->iasq[0]; diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c -index f906444..0bb73ae 100644 +index 16dbe81..db2ed24 100644 --- a/arch/parisc/mm/fault.c +++ b/arch/parisc/mm/fault.c @@ -16,6 +16,7 @@ @@ -7637,7 +7689,7 @@ index f906444..0bb73ae 100644 int fixup_exception(struct pt_regs *regs) { const struct exception_table_entry *fix; -@@ -235,8 +346,33 @@ retry: +@@ -230,8 +341,33 @@ retry: good_area: @@ -7673,10 +7725,10 @@ index f906444..0bb73ae 100644 /* * If for any reason at all we couldn't handle the fault, make diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig -index 9faa18c..b24277a 100644 +index 7cd32c0..30c918b 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig -@@ -143,6 +143,7 @@ config PPC +@@ -144,6 +144,7 @@ config PPC select ARCH_USE_BUILTIN_BSWAP select OLD_SIGSUSPEND select OLD_SIGACTION if PPC32 @@ -7684,7 +7736,7 @@ index 9faa18c..b24277a 100644 select HAVE_DEBUG_STACKOVERFLOW select HAVE_IRQ_EXIT_ON_IRQ_STACK select ARCH_USE_CMPXCHG_LOCKREF if PPC64 -@@ -419,6 +420,7 @@ config KEXEC +@@ -439,6 +440,7 @@ config KEXEC bool "kexec system call" depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) || PPC_BOOK3E select KEXEC_CORE @@ -7693,7 +7745,7 @@ index 9faa18c..b24277a 100644 kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot diff --git a/arch/powerpc/include/asm/atomic.h b/arch/powerpc/include/asm/atomic.h -index 55f106e..5968afb 100644 +index ae0751e..c7fad52 100644 --- a/arch/powerpc/include/asm/atomic.h +++ b/arch/powerpc/include/asm/atomic.h @@ -12,6 +12,11 @@ @@ -7705,10 +7757,10 @@ index 55f106e..5968afb 100644 + PPC_LONG" " #from ", " #to"\n" \ +" .previous\n" + - static __inline__ int atomic_read(const atomic_t *v) - { - int t; -@@ -21,39 +26,80 @@ static __inline__ int atomic_read(const atomic_t *v) + /* + * Since *_return_relaxed and {cmp}xchg_relaxed are implemented with + * a "bne-" instruction at the end, so an isync is enough as a acquire barrier +@@ -39,38 +44,79 @@ static __inline__ int atomic_read(const atomic_t *v) return t; } @@ -7771,44 +7823,43 @@ index 55f106e..5968afb 100644 : "cc"); \ } \ --#define ATOMIC_OP_RETURN(op, asm_op) \ --static __inline__ int atomic_##op##_return(int a, atomic_t *v) \ +-#define ATOMIC_OP_RETURN_RELAXED(op, asm_op) \ +-static inline int atomic_##op##_return_relaxed(int a, atomic_t *v) \ +#define ATOMIC_OP(op, asm_op) __ATOMIC_OP(op, , , asm_op, , ) \ + __ATOMIC_OP(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) + +#define __ATOMIC_OP_RETURN(op, suffix, pre_op, asm_op, post_op, extable)\ -+static inline int atomic_##op##_return##suffix(int a, atomic##suffix##_t *v)\ ++static inline int atomic_##op##_return##suffix##_relaxed(int a, atomic##suffix##_t *v)\ { \ int t; \ \ __asm__ __volatile__( \ - PPC_ATOMIC_ENTRY_BARRIER \ --"1: lwarx %0,0,%2 # atomic_" #op "_return\n" \ -+"1: lwarx %0,0,%2 # atomic_" #op "_return" #suffix "\n" \ +-"1: lwarx %0,0,%3 # atomic_" #op "_return_relaxed\n" \ ++"1: lwarx %0,0,%2 # atomic_" #op "_return" #suffix "_relaxed\n"\ + pre_op \ - #asm_op " %0,%1,%0\n" \ + #asm_op " %0,%2,%0\n" \ + post_op \ - PPC405_ERR77(0,%2) \ - " stwcx. %0,0,%2 \n" \ + PPC405_ERR77(0, %3) \ + " stwcx. %0,0,%3\n" \ " bne- 1b\n" \ + extable \ - PPC_ATOMIC_EXIT_BARRIER \ - : "=&r" (t) \ + : "=&r" (t), "+m" (v->counter) \ : "r" (a), "r" (&v->counter) \ -@@ -62,6 +108,9 @@ static __inline__ int atomic_##op##_return(int a, atomic_t *v) \ + : "cc"); \ +@@ -78,6 +124,9 @@ static inline int atomic_##op##_return_relaxed(int a, atomic_t *v) \ return t; \ } -+#define ATOMIC_OP_RETURN(op, asm_op) __ATOMIC_OP_RETURN(op, , , asm_op, , )\ ++#define ATOMIC_OP_RETURN_RELAXED(op, asm_op) __ATOMIC_OP_RETURN(op, , , asm_op, , )\ + __ATOMIC_OP_RETURN(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) + - #define ATOMIC_OPS(op, asm_op) ATOMIC_OP(op, asm_op) ATOMIC_OP_RETURN(op, asm_op) - - ATOMIC_OPS(add, add) -@@ -73,42 +122,29 @@ ATOMIC_OP(xor, xor) + #define ATOMIC_OPS(op, asm_op) \ + ATOMIC_OP(op, asm_op) \ + ATOMIC_OP_RETURN_RELAXED(op, asm_op) +@@ -94,40 +143,29 @@ ATOMIC_OP(xor, xor) #undef ATOMIC_OPS - #undef ATOMIC_OP_RETURN + #undef ATOMIC_OP_RETURN_RELAXED +#undef __ATOMIC_OP_RETURN #undef ATOMIC_OP +#undef __ATOMIC_OP @@ -7825,7 +7876,7 @@ index 55f106e..5968afb 100644 + * Automatically increments @v by 1 + */ +#define atomic_inc(v) atomic_add(1, (v)) -+#define atomic_inc_return(v) atomic_add_return(1, (v)) ++#define atomic_inc_return_relaxed(v) atomic_add_return_relaxed(1, (v)) - __asm__ __volatile__( -"1: lwarx %0,0,%2 # atomic_inc\n\ @@ -7841,29 +7892,27 @@ index 55f106e..5968afb 100644 + atomic_add_unchecked(1, v); } --static __inline__ int atomic_inc_return(atomic_t *v) -+static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v) +-static __inline__ int atomic_inc_return_relaxed(atomic_t *v) ++static inline int atomic_inc_return_unchecked_relaxed(atomic_unchecked_t *v) { - int t; - - __asm__ __volatile__( -- PPC_ATOMIC_ENTRY_BARRIER --"1: lwarx %0,0,%1 # atomic_inc_return\n\ -- addic %0,%0,1\n" -- PPC405_ERR77(0,%1) --" stwcx. %0,0,%1 \n\ -- bne- 1b" -- PPC_ATOMIC_EXIT_BARRIER -- : "=&r" (t) +-"1: lwarx %0,0,%2 # atomic_inc_return_relaxed\n" +-" addic %0,%0,1\n" +- PPC405_ERR77(0, %2) +-" stwcx. %0,0,%2\n" +-" bne- 1b" +- : "=&r" (t), "+m" (v->counter) - : "r" (&v->counter) -- : "cc", "xer", "memory"); +- : "cc", "xer"); - - return t; -+ return atomic_add_return_unchecked(1, v); ++ return atomic_add_return_unchecked_relaxed(1, v); } /* -@@ -121,43 +157,38 @@ static __inline__ int atomic_inc_return(atomic_t *v) +@@ -140,36 +178,23 @@ static __inline__ int atomic_inc_return_relaxed(atomic_t *v) */ #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) @@ -7884,7 +7933,7 @@ index 55f106e..5968afb 100644 + return atomic_add_return_unchecked(1, v) == 0; } --static __inline__ int atomic_dec_return(atomic_t *v) +-static __inline__ int atomic_dec_return_relaxed(atomic_t *v) +/* + * atomic_dec - decrement atomic variable + * @v: pointer of type atomic_t @@ -7892,30 +7941,30 @@ index 55f106e..5968afb 100644 + * Atomically decrements @v by 1 + */ +#define atomic_dec(v) atomic_sub(1, (v)) -+#define atomic_dec_return(v) atomic_sub_return(1, (v)) ++#define atomic_dec_return_relaxed(v) atomic_sub_return_relaxed(1, (v)) + +static __inline__ void atomic_dec_unchecked(atomic_unchecked_t *v) { - int t; - - __asm__ __volatile__( -- PPC_ATOMIC_ENTRY_BARRIER --"1: lwarx %0,0,%1 # atomic_dec_return\n\ -- addic %0,%0,-1\n" -- PPC405_ERR77(0,%1) --" stwcx. %0,0,%1\n\ -- bne- 1b" -- PPC_ATOMIC_EXIT_BARRIER -- : "=&r" (t) +-"1: lwarx %0,0,%2 # atomic_dec_return_relaxed\n" +-" addic %0,%0,-1\n" +- PPC405_ERR77(0, %2) +-" stwcx. %0,0,%2\n" +-" bne- 1b" +- : "=&r" (t), "+m" (v->counter) - : "r" (&v->counter) -- : "cc", "xer", "memory"); +- : "cc", "xer"); - - return t; + atomic_sub_unchecked(1, v); } - #define atomic_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n))) + #define atomic_inc_return_relaxed atomic_inc_return_relaxed +@@ -184,6 +209,16 @@ static __inline__ int atomic_dec_return_relaxed(atomic_t *v) #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) + #define atomic_xchg_relaxed(v, new) xchg_relaxed(&((v)->counter), (new)) +static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new) +{ @@ -7930,7 +7979,7 @@ index 55f106e..5968afb 100644 /** * __atomic_add_unless - add unless the number is a given value * @v: pointer of type atomic_t -@@ -175,11 +206,27 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -201,11 +236,27 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) PPC_ATOMIC_ENTRY_BARRIER "1: lwarx %0,0,%1 # __atomic_add_unless\n\ cmpw 0,%0,%3 \n\ @@ -7960,7 +8009,7 @@ index 55f106e..5968afb 100644 PPC_ATOMIC_EXIT_BARRIER " subf %0,%2,%0 \n\ 2:" -@@ -265,37 +312,60 @@ static __inline__ long atomic64_read(const atomic64_t *v) +@@ -291,37 +342,59 @@ static __inline__ long atomic64_read(const atomic64_t *v) return t; } @@ -8003,42 +8052,42 @@ index 55f106e..5968afb 100644 : "cc"); \ } --#define ATOMIC64_OP_RETURN(op, asm_op) \ --static __inline__ long atomic64_##op##_return(long a, atomic64_t *v) \ +-#define ATOMIC64_OP_RETURN_RELAXED(op, asm_op) \ +-static inline long \ +-atomic64_##op##_return_relaxed(long a, atomic64_t *v) \ +#define ATOMIC64_OP(op, asm_op) __ATOMIC64_OP(op, , , asm_op, , ) \ + __ATOMIC64_OP(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) + +#define __ATOMIC64_OP_RETURN(op, suffix, pre_op, asm_op, post_op, extable)\ -+static inline long atomic64_##op##_return##suffix(long a, atomic64##suffix##_t *v)\ ++static inline long atomic64_##op##_return##suffix##_relaxed(long a, atomic64##suffix##_t *v)\ { \ long t; \ \ __asm__ __volatile__( \ - PPC_ATOMIC_ENTRY_BARRIER \ - "1: ldarx %0,0,%2 # atomic64_" #op "_return\n" \ + "1: ldarx %0,0,%3 # atomic64_" #op "_return_relaxed\n" \ + pre_op \ - #asm_op " %0,%1,%0\n" \ + #asm_op " %0,%2,%0\n" \ + post_op \ - " stdcx. %0,0,%2 \n" \ + " stdcx. %0,0,%3\n" \ " bne- 1b\n" \ + extable \ - PPC_ATOMIC_EXIT_BARRIER \ - : "=&r" (t) \ + : "=&r" (t), "+m" (v->counter) \ : "r" (a), "r" (&v->counter) \ -@@ -304,6 +374,9 @@ static __inline__ long atomic64_##op##_return(long a, atomic64_t *v) \ + : "cc"); \ +@@ -329,6 +402,9 @@ atomic64_##op##_return_relaxed(long a, atomic64_t *v) \ return t; \ } -+#define ATOMIC64_OP_RETURN(op, asm_op) __ATOMIC64_OP_RETURN(op, , , asm_op, , )\ ++#define ATOMIC64_OP_RETURN_RELAXED(op, asm_op) __ATOMIC64_OP_RETURN(op, , , asm_op, , )\ + __ATOMIC64_OP_RETURN(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) + - #define ATOMIC64_OPS(op, asm_op) ATOMIC64_OP(op, asm_op) ATOMIC64_OP_RETURN(op, asm_op) - - ATOMIC64_OPS(add, add) -@@ -314,40 +387,33 @@ ATOMIC64_OP(xor, xor) + #define ATOMIC64_OPS(op, asm_op) \ + ATOMIC64_OP(op, asm_op) \ + ATOMIC64_OP_RETURN_RELAXED(op, asm_op) +@@ -344,38 +420,33 @@ ATOMIC64_OP(xor, xor) - #undef ATOMIC64_OPS - #undef ATOMIC64_OP_RETURN + #undef ATOPIC64_OPS + #undef ATOMIC64_OP_RETURN_RELAXED +#undef __ATOMIC64_OP_RETURN #undef ATOMIC64_OP +#undef __ATOMIC64_OP @@ -8059,7 +8108,7 @@ index 55f106e..5968afb 100644 + * Automatically increments @v by 1 + */ +#define atomic64_inc(v) atomic64_add(1, (v)) -+#define atomic64_inc_return(v) atomic64_add_return(1, (v)) ++#define atomic64_inc_return_relaxed(v) atomic64_add_return_relaxed(1, (v)) - __asm__ __volatile__( -"1: ldarx %0,0,%2 # atomic64_inc\n\ @@ -8074,28 +8123,26 @@ index 55f106e..5968afb 100644 + atomic64_add_unchecked(1, v); } --static __inline__ long atomic64_inc_return(atomic64_t *v) -+static inline long atomic64_inc_return_unchecked(atomic64_unchecked_t *v) +-static __inline__ long atomic64_inc_return_relaxed(atomic64_t *v) ++static inline long atomic64_inc_return_unchecked_relaxed(atomic64_unchecked_t *v) { - long t; - - __asm__ __volatile__( -- PPC_ATOMIC_ENTRY_BARRIER --"1: ldarx %0,0,%1 # atomic64_inc_return\n\ -- addic %0,%0,1\n\ -- stdcx. %0,0,%1 \n\ -- bne- 1b" -- PPC_ATOMIC_EXIT_BARRIER -- : "=&r" (t) +-"1: ldarx %0,0,%2 # atomic64_inc_return_relaxed\n" +-" addic %0,%0,1\n" +-" stdcx. %0,0,%2\n" +-" bne- 1b" +- : "=&r" (t), "+m" (v->counter) - : "r" (&v->counter) -- : "cc", "xer", "memory"); +- : "cc", "xer"); - - return t; -+ return atomic64_add_return_unchecked(1, v); ++ return atomic64_add_return_unchecked_relaxed(1, v); } /* -@@ -360,36 +426,18 @@ static __inline__ long atomic64_inc_return(atomic64_t *v) +@@ -388,34 +459,18 @@ static __inline__ long atomic64_inc_return_relaxed(atomic64_t *v) */ #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) @@ -8107,7 +8154,7 @@ index 55f106e..5968afb 100644 + * Atomically decrements @v by 1 + */ +#define atomic64_dec(v) atomic64_sub(1, (v)) -+#define atomic64_dec_return(v) atomic64_sub_return(1, (v)) ++#define atomic64_dec_return_relaxed(v) atomic64_sub_return_relaxed(1, (v)) + +static __inline__ void atomic64_dec_unchecked(atomic64_unchecked_t *v) { @@ -8123,29 +8170,27 @@ index 55f106e..5968afb 100644 - : "cc", "xer"); -} - --static __inline__ long atomic64_dec_return(atomic64_t *v) +-static __inline__ long atomic64_dec_return_relaxed(atomic64_t *v) -{ - long t; - - __asm__ __volatile__( -- PPC_ATOMIC_ENTRY_BARRIER --"1: ldarx %0,0,%1 # atomic64_dec_return\n\ -- addic %0,%0,-1\n\ -- stdcx. %0,0,%1\n\ -- bne- 1b" -- PPC_ATOMIC_EXIT_BARRIER -- : "=&r" (t) +-"1: ldarx %0,0,%2 # atomic64_dec_return_relaxed\n" +-" addic %0,%0,-1\n" +-" stdcx. %0,0,%2\n" +-" bne- 1b" +- : "=&r" (t), "+m" (v->counter) - : "r" (&v->counter) -- : "cc", "xer", "memory"); +- : "cc", "xer"); - - return t; + atomic64_sub_unchecked(1, v); } - #define atomic64_sub_and_test(a, v) (atomic64_sub_return((a), (v)) == 0) -@@ -422,6 +470,16 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v) - #define atomic64_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n))) + #define atomic64_inc_return_relaxed atomic64_inc_return_relaxed +@@ -457,6 +512,16 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v) #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) + #define atomic64_xchg_relaxed(v, new) xchg_relaxed(&((v)->counter), (new)) +static inline long atomic64_cmpxchg_unchecked(atomic64_unchecked_t *v, long old, long new) +{ @@ -8160,7 +8205,7 @@ index 55f106e..5968afb 100644 /** * atomic64_add_unless - add unless the number is a given value * @v: pointer of type atomic64_t -@@ -437,13 +495,29 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) +@@ -472,13 +537,29 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) __asm__ __volatile__ ( PPC_ATOMIC_ENTRY_BARRIER @@ -8206,7 +8251,7 @@ index 264b754..187b7f6 100644 #define _PAGE_NO_CACHE 0x020 /* I: cache inhibit */ #define _PAGE_WRITETHRU 0x040 /* W: cache write-through */ diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h -index 5f8229e..385d90b 100644 +index ffbafbf..71d037f 100644 --- a/arch/powerpc/include/asm/cache.h +++ b/arch/powerpc/include/asm/cache.h @@ -3,6 +3,8 @@ @@ -8355,12 +8400,12 @@ index b8da913..c02b593 100644 /** diff --git a/arch/powerpc/include/asm/mman.h b/arch/powerpc/include/asm/mman.h -index 8565c25..2865190 100644 +index 2563c43..d6fdd62 100644 --- a/arch/powerpc/include/asm/mman.h +++ b/arch/powerpc/include/asm/mman.h -@@ -24,7 +24,7 @@ static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot) +@@ -25,7 +25,7 @@ static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot, } - #define arch_calc_vm_prot_bits(prot) arch_calc_vm_prot_bits(prot) + #define arch_calc_vm_prot_bits(prot, pkey) arch_calc_vm_prot_bits(prot, pkey) -static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) +static inline pgprot_t arch_vm_get_page_prot(vm_flags_t vm_flags) @@ -8368,7 +8413,7 @@ index 8565c25..2865190 100644 return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0); } diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h -index e34124f..c146c14 100644 +index ab3d897..cbc0693 100644 --- a/arch/powerpc/include/asm/page.h +++ b/arch/powerpc/include/asm/page.h @@ -230,8 +230,9 @@ extern long long virt_phys_offset; @@ -8419,19 +8464,19 @@ index d908a46..3753f71 100644 #include <asm-generic/getorder.h> diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h -index 69ef28a..216486d 100644 +index 8d5fc3a..528a418 100644 --- a/arch/powerpc/include/asm/pgalloc-64.h +++ b/arch/powerpc/include/asm/pgalloc-64.h @@ -54,6 +54,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) #ifndef CONFIG_PPC_64K_PAGES - #define pgd_populate(MM, PGD, PUD) pgd_set(PGD, (unsigned long)PUD) + #define pgd_populate(MM, PGD, PUD) pgd_set(PGD, __pgtable_ptr_val(PUD)) +#define pgd_populate_kernel(MM, PGD, PUD) pgd_populate((MM), (PGD), (PUD)) static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) { @@ -71,6 +72,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) - pud_set(pud, (unsigned long)pmd); + pud_set(pud, __pgtable_ptr_val(pmd)); } +static inline void pud_populate_kernel(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) @@ -8442,16 +8487,20 @@ index 69ef28a..216486d 100644 static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) { -@@ -172,6 +178,7 @@ extern void __tlb_remove_table(void *_table); - #endif - - #define pud_populate(mm, pud, pmd) pud_set(pud, (unsigned long)pmd) -+#define pud_populate_kernel(mm, pud, pmd) pud_populate((mm), (pud), (pmd)) +@@ -195,6 +201,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) + pud_set(pud, __pgtable_ptr_val(pmd)); + } ++static inline void pud_populate_kernel(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) ++{ ++ pud_populate(mm, pud, pmd); ++} ++ static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) + { diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h -index ac9fb11..4efa476 100644 +index 47897a3..6d21683 100644 --- a/arch/powerpc/include/asm/pgtable.h +++ b/arch/powerpc/include/asm/pgtable.h @@ -1,6 +1,7 @@ @@ -8463,10 +8512,10 @@ index ac9fb11..4efa476 100644 #include <linux/mmdebug.h> #include <linux/mmzone.h> diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h -index c4cb2ff..b04130e 100644 +index 166d863..7d5ebdf 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h -@@ -253,6 +253,7 @@ +@@ -261,6 +261,7 @@ #define SPRN_DBCR 0x136 /* e300 Data Breakpoint Control Reg */ #define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */ #define DSISR_NOHPTE 0x40000000 /* no translation found */ @@ -8475,7 +8524,7 @@ index c4cb2ff..b04130e 100644 #define DSISR_ISSTORE 0x02000000 /* access was a store */ #define DSISR_DABRMATCH 0x00400000 /* hit data breakpoint */ diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h -index 825663c..f9e9134 100644 +index e1afd4c..d75924a 100644 --- a/arch/powerpc/include/asm/smp.h +++ b/arch/powerpc/include/asm/smp.h @@ -51,7 +51,7 @@ struct smp_ops_t { @@ -8791,7 +8840,7 @@ index b7c20f0..4adc0f1 100644 static inline unsigned long clear_user(void __user *addr, unsigned long size) diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile -index 794f22a..9a76447 100644 +index 2da380f..0ba9052 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -14,6 +14,11 @@ CFLAGS_prom_init.o += -fPIC @@ -8805,9 +8854,9 @@ index 794f22a..9a76447 100644 + ifdef CONFIG_FUNCTION_TRACER # Do not trace early boot code - CFLAGS_REMOVE_cputable.o = -pg -mno-sched-epilog -@@ -26,6 +31,8 @@ CFLAGS_REMOVE_ftrace.o = -pg -mno-sched-epilog - CFLAGS_REMOVE_time.o = -pg -mno-sched-epilog + CFLAGS_REMOVE_cputable.o = -mno-sched-epilog $(CC_FLAGS_FTRACE) +@@ -26,6 +31,8 @@ CFLAGS_REMOVE_ftrace.o = -mno-sched-epilog $(CC_FLAGS_FTRACE) + CFLAGS_REMOVE_time.o = -mno-sched-epilog $(CC_FLAGS_FTRACE) endif +CFLAGS_REMOVE_prom_init.o += $(LATENT_ENTROPY_PLUGIN_CFLAGS) @@ -8875,7 +8924,7 @@ index 290559d..0094ddb 100644 #endif } diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c -index 2c01665..85a54a8 100644 +index 5a7a78f..c0e4207 100644 --- a/arch/powerpc/kernel/module_32.c +++ b/arch/powerpc/kernel/module_32.c @@ -158,7 +158,7 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr, @@ -8907,20 +8956,20 @@ index 2c01665..85a54a8 100644 /* Find this entry, or if that fails, the next avail. entry */ while (entry->jump[0]) { -@@ -296,7 +301,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, - } +@@ -301,7 +306,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, #ifdef CONFIG_DYNAMIC_FTRACE - module->arch.tramp = -- do_plt_call(module->core_layout.base, -+ do_plt_call(module->core_layout.base_rx, - (unsigned long)ftrace_caller, - sechdrs, module); - #endif + int module_finalize_ftrace(struct module *module, const Elf_Shdr *sechdrs) + { +- module->arch.tramp = do_plt_call(module->core_layout.base, ++ module->arch.tramp = do_plt_call(module->core_layout.base_rx, + (unsigned long)ftrace_caller, + sechdrs, module); + if (!module->arch.tramp) diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c -index 54ed9c7..681162e5 100644 +index b8500b4..2873781 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c -@@ -1185,8 +1185,8 @@ void show_regs(struct pt_regs * regs) +@@ -1318,8 +1318,8 @@ void show_regs(struct pt_regs * regs) * Lookup NIP late so we have the best change of getting the * above info out without failing */ @@ -8931,7 +8980,7 @@ index 54ed9c7..681162e5 100644 #endif show_stack(current, (unsigned long *) regs->gpr[1]); if (!user_mode(regs)) -@@ -1695,10 +1695,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) +@@ -1829,10 +1829,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) newsp = stack[0]; ip = stack[STACK_FRAME_LR_SAVE]; if (!firstframe || ip != lr) { @@ -8944,7 +8993,7 @@ index 54ed9c7..681162e5 100644 (void *)current->ret_stack[curr_frame].ret); curr_frame--; } -@@ -1718,7 +1718,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) +@@ -1852,7 +1852,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) struct pt_regs *regs = (struct pt_regs *) (sp + STACK_FRAME_OVERHEAD); lr = regs->link; @@ -8953,7 +9002,7 @@ index 54ed9c7..681162e5 100644 regs->trap, (void *)regs->nip, (void *)lr); firstframe = 1; } -@@ -1755,13 +1755,6 @@ void notrace __ppc64_runlatch_off(void) +@@ -1889,13 +1889,6 @@ void notrace __ppc64_runlatch_off(void) } #endif /* CONFIG_PPC64 */ @@ -9033,7 +9082,7 @@ index 2552079..a290dc8a 100644 } else { err |= setup_trampoline(__NR_rt_sigreturn, &frame->tramp[0]); diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c -index b6becc7..31a89c4 100644 +index 9229ba6..f6aaa3c 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -36,6 +36,7 @@ @@ -9063,7 +9112,7 @@ index b6becc7..31a89c4 100644 do_exit(signr); } -@@ -1139,6 +1145,26 @@ void __kprobes program_check_exception(struct pt_regs *regs) +@@ -1138,6 +1144,26 @@ void __kprobes program_check_exception(struct pt_regs *regs) enum ctx_state prev_state = exception_enter(); unsigned int reason = get_reason(regs); @@ -9393,7 +9442,7 @@ index 911064a..dcbb025 100644 + #endif /* __ARCH_S390_ATOMIC__ */ diff --git a/arch/s390/include/asm/cache.h b/arch/s390/include/asm/cache.h -index 4d7ccac..d03d0ad 100644 +index 22da3b3..80c7915 100644 --- a/arch/s390/include/asm/cache.h +++ b/arch/s390/include/asm/cache.h @@ -9,8 +9,10 @@ @@ -9439,7 +9488,7 @@ index c4a93d6..4d2a9b4 100644 #endif /* __ASM_EXEC_H */ diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h -index 9dd4cc4..36f4b84 100644 +index e0900dd..72d683d 100644 --- a/arch/s390/include/asm/uaccess.h +++ b/arch/s390/include/asm/uaccess.h @@ -59,6 +59,7 @@ static inline int __range_ok(unsigned long addr, unsigned long size) @@ -9450,7 +9499,7 @@ index 9dd4cc4..36f4b84 100644 #define access_ok(type, addr, size) __access_ok(addr, size) /* -@@ -278,6 +279,10 @@ static inline unsigned long __must_check +@@ -272,6 +273,10 @@ static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long n) { might_fault(); @@ -9461,7 +9510,7 @@ index 9dd4cc4..36f4b84 100644 return __copy_to_user(to, from, n); } -@@ -307,10 +312,14 @@ __compiletime_warning("copy_from_user() buffer size is not provably correct") +@@ -301,10 +306,14 @@ __compiletime_warning("copy_from_user() buffer size is not provably correct") static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n) { @@ -9572,7 +9621,7 @@ index 2bba7df..8f1e6b5 100644 { return (get_random_int() & BRK_RND_MASK) << PAGE_SHIFT; diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c -index 45c4daa..42703fb 100644 +index 89cf09e..cc41962 100644 --- a/arch/s390/mm/mmap.c +++ b/arch/s390/mm/mmap.c @@ -200,9 +200,9 @@ s390_get_unmapped_area(struct file *filp, unsigned long addr, @@ -9784,7 +9833,7 @@ index 57ffaf2..4d1fe9a 100644 select OLD_SIGSUSPEND select ARCH_HAS_SG_CHAIN diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h -index f2fbf9e..fea461e 100644 +index f2fbf9e..303217c 100644 --- a/arch/sparc/include/asm/atomic_64.h +++ b/arch/sparc/include/asm/atomic_64.h @@ -15,18 +15,38 @@ @@ -9931,7 +9980,7 @@ index f2fbf9e..fea461e 100644 if (likely(old == c)) break; c = old; -@@ -94,20 +163,35 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -94,20 +163,40 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) #define atomic64_cmpxchg(v, o, n) \ ((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n))) #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) @@ -9939,6 +9988,11 @@ index f2fbf9e..fea461e 100644 +{ + return xchg(&v->counter, new); +} ++static inline long atomic64_cmpxchg_unchecked(atomic64_unchecked_t *v, long old, ++ long new) ++{ ++ return cmpxchg(&(v->counter), old, new); ++} static inline long atomic64_add_unless(atomic64_t *v, long a, long u) { @@ -10432,7 +10486,7 @@ index e9a51d6..3ef910c 100644 ret = copy_to_user_fixup(to, from, size); return ret; diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile -index 7cf9c6e..6206648 100644 +index fdb1332..1b10f89 100644 --- a/arch/sparc/kernel/Makefile +++ b/arch/sparc/kernel/Makefile @@ -4,7 +4,7 @@ @@ -10475,7 +10529,7 @@ index c5113c7..52322e4 100644 } while (++count < 16); printk("\n"); diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c -index 46a5964..a35c62c 100644 +index c16ef1a..8b38d7b 100644 --- a/arch/sparc/kernel/process_64.c +++ b/arch/sparc/kernel/process_64.c @@ -161,7 +161,7 @@ static void show_regwindow(struct pt_regs *regs) @@ -10567,7 +10621,7 @@ index 9ddc492..27a5619 100644 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c -index 19cd08d..ff21e99 100644 +index 8a6151a..fa3cbb1 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c @@ -891,7 +891,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu) @@ -10620,7 +10674,7 @@ index 646988d..b88905f 100644 info.flags = 0; info.length = len; diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c -index b489e97..44620ad 100644 +index fe8b8ee..3f17a96 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@ -89,13 +89,14 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi @@ -11068,7 +11122,7 @@ index d21cd62..00a4a17 100644 } EXPORT_SYMBOL(die_if_kernel); diff --git a/arch/sparc/kernel/unaligned_64.c b/arch/sparc/kernel/unaligned_64.c -index d89e97b..b4b583de 100644 +index 9aacb91..6415c82 100644 --- a/arch/sparc/kernel/unaligned_64.c +++ b/arch/sparc/kernel/unaligned_64.c @@ -297,7 +297,7 @@ static void log_unaligned(struct pt_regs *regs) @@ -11094,7 +11148,7 @@ index 3269b02..64f5231 100644 lib-$(CONFIG_SPARC32) += ashrdi3.o lib-$(CONFIG_SPARC32) += memcpy.o memset.o diff --git a/arch/sparc/lib/atomic_64.S b/arch/sparc/lib/atomic_64.S -index d6b0363..552bcbb6 100644 +index d6b0363..7fe8079 100644 --- a/arch/sparc/lib/atomic_64.S +++ b/arch/sparc/lib/atomic_64.S @@ -15,11 +15,22 @@ @@ -11196,7 +11250,7 @@ index d6b0363..552bcbb6 100644 ENDPROC(atomic64_##op##_return); +#define ATOMIC64_OP_RETURN(op) __ATOMIC64_OP_RETURN(op, , op, ) \ -+i __ATOMIC64_OP_RETURN(op, _unchecked, __REFCOUNT_OP(op), __OVERFLOW_XOP) ++ __ATOMIC64_OP_RETURN(op, _unchecked, __REFCOUNT_OP(op), __OVERFLOW_XOP) + #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) @@ -11215,7 +11269,7 @@ index d6b0363..552bcbb6 100644 ENTRY(atomic64_dec_if_positive) /* %o0 = atomic_ptr */ BACKOFF_SETUP(%o2) diff --git a/arch/sparc/lib/ksyms.c b/arch/sparc/lib/ksyms.c -index 8eb454c..9f95c5b 100644 +index 8eb454c..7bd92f6 100644 --- a/arch/sparc/lib/ksyms.c +++ b/arch/sparc/lib/ksyms.c @@ -101,7 +101,9 @@ EXPORT_SYMBOL(__clear_user); @@ -11233,8 +11287,8 @@ index 8eb454c..9f95c5b 100644 #define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) ATOMIC_OPS(add) -+EXPORT_SYMBOL(atomic_add_ret_unchecked); -+EXPORT_SYMBOL(atomic64_add_ret_unchecked); ++EXPORT_SYMBOL(atomic_add_return_unchecked); ++EXPORT_SYMBOL(atomic64_add_return_unchecked); ATOMIC_OPS(sub) ATOMIC_OP(and) ATOMIC_OP(or) @@ -11252,7 +11306,7 @@ index 30c3ecc..736f015 100644 obj-$(CONFIG_SPARC64) += ultra.o tlb.o tsb.o gup.o obj-y += fault_$(BITS).o diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c -index c399e7b..2387414 100644 +index b6c559c..cc30ea0 100644 --- a/arch/sparc/mm/fault_32.c +++ b/arch/sparc/mm/fault_32.c @@ -22,6 +22,9 @@ @@ -12089,7 +12143,7 @@ index cb841a3..f2061fb 100644 * load/store/atomic was a write or not, it only says that there * was no match. So in such a case we (carefully) read the diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c -index 131eaf4..4ad6678 100644 +index ba52e64..eee5791 100644 --- a/arch/sparc/mm/hugetlbpage.c +++ b/arch/sparc/mm/hugetlbpage.c @@ -25,8 +25,10 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp, @@ -12201,7 +12255,7 @@ index 131eaf4..4ad6678 100644 pte_t *huge_pte_alloc(struct mm_struct *mm, diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c -index 6f21685..5831fed 100644 +index 14bb0d5..ae289b8 100644 --- a/arch/sparc/mm/init_64.c +++ b/arch/sparc/mm/init_64.c @@ -189,9 +189,9 @@ unsigned long sparc64_kern_sec_context __read_mostly; @@ -12225,7 +12279,7 @@ index 6f21685..5831fed 100644 #endif #ifdef DCACHE_ALIASING_POSSIBLE -@@ -471,10 +471,10 @@ void mmu_info(struct seq_file *m) +@@ -459,10 +459,10 @@ void mmu_info(struct seq_file *m) #ifdef CONFIG_DEBUG_DCFLUSH seq_printf(m, "DCPageFlushes\t: %d\n", @@ -12239,7 +12293,7 @@ index 6f21685..5831fed 100644 #endif /* CONFIG_DEBUG_DCFLUSH */ } diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig -index de4a4ff..477c014 100644 +index 8171930..c60b093 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig @@ -203,6 +203,7 @@ source "kernel/Kconfig.hz" @@ -12306,7 +12360,7 @@ index 0a9c4265..bfb62d1 100644 else copy_from_user_overflow(); diff --git a/arch/tile/mm/hugetlbpage.c b/arch/tile/mm/hugetlbpage.c -index c034dc3..cf1cc96 100644 +index e212c64..5f238fc 100644 --- a/arch/tile/mm/hugetlbpage.c +++ b/arch/tile/mm/hugetlbpage.c @@ -174,6 +174,7 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, @@ -12441,10 +12495,10 @@ index ad8f795..2c7eec6 100644 /* * Memory returned by kmalloc() may be used for DMA, so we must make diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 3bf45a0..b08241b 100644 +index 2dc18605..5796232 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -38,14 +38,13 @@ config X86 +@@ -39,14 +39,13 @@ config X86 select ARCH_MIGHT_HAVE_PC_SERIO select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT @@ -12460,7 +12514,7 @@ index 3bf45a0..b08241b 100644 select ARCH_WANT_FRAME_POINTERS select ARCH_WANT_IPC_PARSE_VERSION if X86_32 select ARCH_WANT_OPTIONAL_GPIOLIB -@@ -91,7 +90,7 @@ config X86 +@@ -92,7 +91,7 @@ config X86 select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRANSPARENT_HUGEPAGE select HAVE_BPF_JIT if X86_64 @@ -12469,7 +12523,7 @@ index 3bf45a0..b08241b 100644 select HAVE_CMPXCHG_DOUBLE select HAVE_CMPXCHG_LOCAL select HAVE_CONTEXT_TRACKING if X86_64 -@@ -109,6 +108,7 @@ config X86 +@@ -110,6 +109,7 @@ config X86 select HAVE_FUNCTION_GRAPH_FP_TEST select HAVE_FUNCTION_GRAPH_TRACER select HAVE_FUNCTION_TRACER @@ -12477,7 +12531,7 @@ index 3bf45a0..b08241b 100644 select HAVE_GENERIC_DMA_COHERENT if X86_32 select HAVE_HW_BREAKPOINT select HAVE_IDE -@@ -184,11 +184,13 @@ config MMU +@@ -188,11 +188,13 @@ config MMU def_bool y config ARCH_MMAP_RND_BITS_MIN @@ -12493,7 +12547,7 @@ index 3bf45a0..b08241b 100644 default 16 config ARCH_MMAP_RND_COMPAT_BITS_MIN -@@ -290,7 +292,7 @@ config X86_64_SMP +@@ -294,7 +296,7 @@ config X86_64_SMP config X86_32_LAZY_GS def_bool y @@ -12502,7 +12556,7 @@ index 3bf45a0..b08241b 100644 config ARCH_HWEIGHT_CFLAGS string -@@ -674,6 +676,7 @@ config SCHED_OMIT_FRAME_POINTER +@@ -681,6 +683,7 @@ config SCHED_OMIT_FRAME_POINTER menuconfig HYPERVISOR_GUEST bool "Linux guest support" @@ -12510,7 +12564,7 @@ index 3bf45a0..b08241b 100644 ---help--- Say Y here to enable options for running Linux under various hyper- visors. This option enables basic hypervisor detection and platform -@@ -1073,6 +1076,7 @@ config VM86 +@@ -1080,6 +1083,7 @@ config VM86 config X86_16BIT bool "Enable support for 16-bit segments" if EXPERT @@ -12518,7 +12572,7 @@ index 3bf45a0..b08241b 100644 default y depends on MODIFY_LDT_SYSCALL ---help--- -@@ -1227,6 +1231,7 @@ choice +@@ -1243,6 +1247,7 @@ choice config NOHIGHMEM bool "off" @@ -12526,7 +12580,7 @@ index 3bf45a0..b08241b 100644 ---help--- Linux can use up to 64 Gigabytes of physical memory on x86 systems. However, the address space of 32-bit x86 processors is only 4 -@@ -1263,6 +1268,7 @@ config NOHIGHMEM +@@ -1279,6 +1284,7 @@ config NOHIGHMEM config HIGHMEM4G bool "4GB" @@ -12534,7 +12588,7 @@ index 3bf45a0..b08241b 100644 ---help--- Select this if you have a 32-bit processor and between 1 and 4 gigabytes of physical RAM. -@@ -1315,7 +1321,7 @@ config PAGE_OFFSET +@@ -1331,7 +1337,7 @@ config PAGE_OFFSET hex default 0xB0000000 if VMSPLIT_3G_OPT default 0x80000000 if VMSPLIT_2G @@ -12543,7 +12597,7 @@ index 3bf45a0..b08241b 100644 default 0x40000000 if VMSPLIT_1G default 0xC0000000 depends on X86_32 -@@ -1336,7 +1342,6 @@ config X86_PAE +@@ -1352,7 +1358,6 @@ config X86_PAE config ARCH_PHYS_ADDR_T_64BIT def_bool y @@ -12551,7 +12605,7 @@ index 3bf45a0..b08241b 100644 config ARCH_DMA_ADDR_T_64BIT def_bool y -@@ -1467,7 +1472,7 @@ config ARCH_PROC_KCORE_TEXT +@@ -1483,7 +1488,7 @@ config ARCH_PROC_KCORE_TEXT config ILLEGAL_POINTER_VALUE hex @@ -12560,7 +12614,7 @@ index 3bf45a0..b08241b 100644 default 0xdead000000000000 if X86_64 source "mm/Kconfig" -@@ -1776,6 +1781,7 @@ source kernel/Kconfig.hz +@@ -1806,6 +1811,7 @@ source kernel/Kconfig.hz config KEXEC bool "kexec system call" select KEXEC_CORE @@ -12568,7 +12622,7 @@ index 3bf45a0..b08241b 100644 ---help--- kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot -@@ -1958,7 +1964,9 @@ config X86_NEED_RELOCS +@@ -1988,7 +1994,9 @@ config X86_NEED_RELOCS config PHYSICAL_ALIGN hex "Alignment value to which kernel should be aligned" @@ -12579,7 +12633,7 @@ index 3bf45a0..b08241b 100644 range 0x2000 0x1000000 if X86_32 range 0x200000 0x1000000 if X86_64 ---help--- -@@ -2041,6 +2049,7 @@ config COMPAT_VDSO +@@ -2071,6 +2079,7 @@ config COMPAT_VDSO def_bool n prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)" depends on X86_32 || IA32_EMULATION @@ -12587,7 +12641,7 @@ index 3bf45a0..b08241b 100644 ---help--- Certain buggy versions of glibc will crash if they are presented with a 32-bit vDSO that is not mapped at the address -@@ -2081,15 +2090,6 @@ choice +@@ -2111,15 +2120,6 @@ choice If unsure, select "Emulate". @@ -12603,7 +12657,7 @@ index 3bf45a0..b08241b 100644 config LEGACY_VSYSCALL_EMULATE bool "Emulate" help -@@ -2170,6 +2170,22 @@ config MODIFY_LDT_SYSCALL +@@ -2200,6 +2200,22 @@ config MODIFY_LDT_SYSCALL Saying 'N' here may make sense for embedded or server kernels. @@ -12658,7 +12712,7 @@ index 3ba5ff2..44bdacc 100644 config X86_MINIMUM_CPU_FAMILY int diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug -index 9b18ed9..0fb0660 100644 +index 67eec55..1a5c1ab 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug @@ -55,6 +55,7 @@ config X86_PTDUMP @@ -12669,15 +12723,15 @@ index 9b18ed9..0fb0660 100644 select X86_PTDUMP_CORE ---help--- Say Y here if you want to show the kernel pagetable layout in a -@@ -77,7 +78,6 @@ config EFI_PGT_DUMP - config DEBUG_RODATA - bool "Write protect kernel read-only data structures" - default y -- depends on DEBUG_KERNEL +@@ -84,6 +85,7 @@ config DEBUG_RODATA_TEST + + config DEBUG_WX + bool "Warn on W+X mappings at boot" ++ depends on BROKEN + select X86_PTDUMP_CORE ---help--- - Mark the kernel read-only data as write-protected in the pagetables, - in order to catch accidental (and incorrect) writes to such const -@@ -123,7 +123,7 @@ config DEBUG_WX + Generate a warning if any W+X mappings are found at boot. +@@ -111,7 +113,7 @@ config DEBUG_WX config DEBUG_SET_MODULE_RONX bool "Set loadable kernel module data as NX and text as RO" @@ -12686,7 +12740,7 @@ index 9b18ed9..0fb0660 100644 ---help--- This option helps catch unintended modifications to loadable kernel module's text and read-only data. It also prevents execution -@@ -375,6 +375,7 @@ config X86_DEBUG_FPU +@@ -353,6 +355,7 @@ config X86_DEBUG_FPU config PUNIT_ATOM_DEBUG tristate "ATOM Punit debug driver" select DEBUG_FS @@ -12772,10 +12826,10 @@ index 9011a88..06aa820 100644 } diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile -index f9ce75d..245ea76 100644 +index 8774cb2..54bc0df 100644 --- a/arch/x86/boot/compressed/Makefile +++ b/arch/x86/boot/compressed/Makefile -@@ -31,6 +31,23 @@ KBUILD_CFLAGS += -mno-mmx -mno-sse +@@ -35,6 +35,23 @@ KBUILD_CFLAGS += -mno-mmx -mno-sse KBUILD_CFLAGS += $(call cc-option,-ffreestanding) KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) @@ -12857,10 +12911,10 @@ index 630384a..278e788 100644 .quad 0x0000000000000000 /* TS continued */ efi_gdt64_end: diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S -index 8ef964d..fcfb8aa 100644 +index 0256064..bef8bbd 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S -@@ -141,10 +141,10 @@ preferred_addr: +@@ -169,10 +169,10 @@ preferred_addr: addl %eax, %ebx notl %eax andl %eax, %ebx @@ -12874,10 +12928,10 @@ index 8ef964d..fcfb8aa 100644 /* Target address to relocate to for decompression */ diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S -index b0c0d16..3b44ff8 100644 +index 86558a1..32f1e7e 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S -@@ -95,10 +95,10 @@ ENTRY(startup_32) +@@ -103,10 +103,10 @@ ENTRY(startup_32) addl %eax, %ebx notl %eax andl %eax, %ebx @@ -12890,7 +12944,7 @@ index b0c0d16..3b44ff8 100644 1: /* Target address to relocate to for decompression */ -@@ -323,10 +323,10 @@ preferred_addr: +@@ -331,10 +331,10 @@ preferred_addr: addq %rax, %rbp notq %rax andq %rax, %rbp @@ -12903,7 +12957,7 @@ index b0c0d16..3b44ff8 100644 1: /* Target address to relocate to for decompression */ -@@ -435,8 +435,8 @@ gdt: +@@ -443,8 +443,8 @@ gdt: .long gdt .word 0 .quad 0x0000000000000000 /* NULL descriptor */ @@ -13089,18 +13143,18 @@ index 9105655..41779c1 100644 movq r1,r2; \ movq r3,r4; \ diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S -index 6bd2c6c..a551119 100644 +index 383a6f8..a4db591 100644 --- a/arch/x86/crypto/aesni-intel_asm.S +++ b/arch/x86/crypto/aesni-intel_asm.S -@@ -31,6 +31,7 @@ - +@@ -32,6 +32,7 @@ #include <linux/linkage.h> #include <asm/inst.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> /* * The following macros are used to move an (un)aligned 16 byte value to/from -@@ -217,7 +218,7 @@ enc: .octa 0x2 +@@ -218,7 +219,7 @@ enc: .octa 0x2 * num_initial_blocks = b mod 4 * encrypt the initial num_initial_blocks blocks and apply ghash on * the ciphertext @@ -13109,7 +13163,7 @@ index 6bd2c6c..a551119 100644 * are clobbered * arg1, %arg2, %arg3, %r14 are used as a pointer only, not modified */ -@@ -227,8 +228,8 @@ enc: .octa 0x2 +@@ -228,8 +229,8 @@ enc: .octa 0x2 XMM2 XMM3 XMM4 XMMDst TMP6 TMP7 i i_seq operation MOVADQ SHUF_MASK(%rip), %xmm14 mov arg7, %r10 # %r10 = AAD @@ -13120,7 +13174,7 @@ index 6bd2c6c..a551119 100644 pxor %xmm\i, %xmm\i _get_AAD_loop\num_initial_blocks\operation: -@@ -237,17 +238,17 @@ _get_AAD_loop\num_initial_blocks\operation: +@@ -238,17 +239,17 @@ _get_AAD_loop\num_initial_blocks\operation: psrldq $4, %xmm\i pxor \TMP1, %xmm\i add $4, %r10 @@ -13142,7 +13196,7 @@ index 6bd2c6c..a551119 100644 jne _get_AAD_loop2\num_initial_blocks\operation _get_AAD_loop2_done\num_initial_blocks\operation: -@@ -442,7 +443,7 @@ _initial_blocks_done\num_initial_blocks\operation: +@@ -443,7 +444,7 @@ _initial_blocks_done\num_initial_blocks\operation: * num_initial_blocks = b mod 4 * encrypt the initial num_initial_blocks blocks and apply ghash on * the ciphertext @@ -13151,7 +13205,7 @@ index 6bd2c6c..a551119 100644 * are clobbered * arg1, %arg2, %arg3, %r14 are used as a pointer only, not modified */ -@@ -452,8 +453,8 @@ _initial_blocks_done\num_initial_blocks\operation: +@@ -453,8 +454,8 @@ _initial_blocks_done\num_initial_blocks\operation: XMM2 XMM3 XMM4 XMMDst TMP6 TMP7 i i_seq operation MOVADQ SHUF_MASK(%rip), %xmm14 mov arg7, %r10 # %r10 = AAD @@ -13162,7 +13216,7 @@ index 6bd2c6c..a551119 100644 pxor %xmm\i, %xmm\i _get_AAD_loop\num_initial_blocks\operation: movd (%r10), \TMP1 -@@ -461,15 +462,15 @@ _get_AAD_loop\num_initial_blocks\operation: +@@ -462,15 +463,15 @@ _get_AAD_loop\num_initial_blocks\operation: psrldq $4, %xmm\i pxor \TMP1, %xmm\i add $4, %r10 @@ -13182,7 +13236,7 @@ index 6bd2c6c..a551119 100644 jne _get_AAD_loop2\num_initial_blocks\operation _get_AAD_loop2_done\num_initial_blocks\operation: PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data -@@ -1279,8 +1280,8 @@ _esb_loop_\@: +@@ -1280,8 +1281,8 @@ _esb_loop_\@: * poly = x^128 + x^127 + x^126 + x^121 + 1 * *****************************************************************************/ @@ -13193,7 +13247,7 @@ index 6bd2c6c..a551119 100644 push %r13 push %r14 mov %rsp, %r14 -@@ -1290,8 +1291,8 @@ ENTRY(aesni_gcm_dec) +@@ -1291,8 +1292,8 @@ ENTRY(aesni_gcm_dec) */ sub $VARIABLE_OFFSET, %rsp and $~63, %rsp # align rsp to 64 bytes @@ -13204,7 +13258,7 @@ index 6bd2c6c..a551119 100644 movdqa SHUF_MASK(%rip), %xmm2 PSHUFB_XMM %xmm2, %xmm13 -@@ -1319,10 +1320,10 @@ ENTRY(aesni_gcm_dec) +@@ -1320,10 +1321,10 @@ ENTRY(aesni_gcm_dec) movdqa %xmm13, HashKey(%rsp) # store HashKey<<1 (mod poly) mov %arg4, %r13 # save the number of bytes of plaintext/ciphertext and $-16, %r13 # %r13 = %r13 - (%r13 mod 16) @@ -13218,7 +13272,7 @@ index 6bd2c6c..a551119 100644 jb _initial_num_blocks_is_1_decrypt je _initial_num_blocks_is_2_decrypt _initial_num_blocks_is_3_decrypt: -@@ -1372,16 +1373,16 @@ _zero_cipher_left_decrypt: +@@ -1373,16 +1374,16 @@ _zero_cipher_left_decrypt: sub $16, %r11 add %r13, %r11 movdqu (%arg3,%r11,1), %xmm1 # receive the last <16 byte block @@ -13239,7 +13293,7 @@ index 6bd2c6c..a551119 100644 # get the appropriate mask to mask out top 16-%r13 bytes of %xmm0 pand %xmm1, %xmm0 # mask out top 16-%r13 bytes of %xmm0 pand %xmm1, %xmm2 -@@ -1410,9 +1411,9 @@ _less_than_8_bytes_left_decrypt: +@@ -1411,9 +1412,9 @@ _less_than_8_bytes_left_decrypt: sub $1, %r13 jne _less_than_8_bytes_left_decrypt _multiple_of_16_bytes_decrypt: @@ -13252,7 +13306,7 @@ index 6bd2c6c..a551119 100644 shl $3, %arg4 # len(C) in bits (*128) MOVQ_R64_XMM %arg4, %xmm1 pslldq $8, %xmm15 # %xmm15 = len(A)||0x0000000000000000 -@@ -1451,7 +1452,8 @@ _return_T_done_decrypt: +@@ -1452,7 +1453,8 @@ _return_T_done_decrypt: mov %r14, %rsp pop %r14 pop %r13 @@ -13262,7 +13316,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(aesni_gcm_dec) -@@ -1539,8 +1541,8 @@ ENDPROC(aesni_gcm_dec) +@@ -1540,8 +1542,8 @@ ENDPROC(aesni_gcm_dec) * * poly = x^128 + x^127 + x^126 + x^121 + 1 ***************************************************************************/ @@ -13273,7 +13327,7 @@ index 6bd2c6c..a551119 100644 push %r13 push %r14 mov %rsp, %r14 -@@ -1550,8 +1552,8 @@ ENTRY(aesni_gcm_enc) +@@ -1551,8 +1553,8 @@ ENTRY(aesni_gcm_enc) # sub $VARIABLE_OFFSET, %rsp and $~63, %rsp @@ -13284,7 +13338,7 @@ index 6bd2c6c..a551119 100644 movdqa SHUF_MASK(%rip), %xmm2 PSHUFB_XMM %xmm2, %xmm13 -@@ -1575,13 +1577,13 @@ ENTRY(aesni_gcm_enc) +@@ -1576,13 +1578,13 @@ ENTRY(aesni_gcm_enc) movdqa %xmm13, HashKey(%rsp) mov %arg4, %r13 # %xmm13 holds HashKey<<1 (mod poly) and $-16, %r13 @@ -13301,7 +13355,7 @@ index 6bd2c6c..a551119 100644 jb _initial_num_blocks_is_1_encrypt je _initial_num_blocks_is_2_encrypt _initial_num_blocks_is_3_encrypt: -@@ -1634,14 +1636,14 @@ _zero_cipher_left_encrypt: +@@ -1635,14 +1637,14 @@ _zero_cipher_left_encrypt: sub $16, %r11 add %r13, %r11 movdqu (%arg3,%r11,1), %xmm1 # receive the last <16 byte blocks @@ -13320,7 +13374,7 @@ index 6bd2c6c..a551119 100644 # get the appropriate mask to mask out top 16-r13 bytes of xmm0 pand %xmm1, %xmm0 # mask out top 16-r13 bytes of xmm0 movdqa SHUF_MASK(%rip), %xmm10 -@@ -1674,9 +1676,9 @@ _less_than_8_bytes_left_encrypt: +@@ -1675,9 +1677,9 @@ _less_than_8_bytes_left_encrypt: sub $1, %r13 jne _less_than_8_bytes_left_encrypt _multiple_of_16_bytes_encrypt: @@ -13333,7 +13387,7 @@ index 6bd2c6c..a551119 100644 shl $3, %arg4 # len(C) in bits (*128) MOVQ_R64_XMM %arg4, %xmm1 pslldq $8, %xmm15 # %xmm15 = len(A)||0x0000000000000000 -@@ -1715,7 +1717,8 @@ _return_T_done_encrypt: +@@ -1716,7 +1718,8 @@ _return_T_done_encrypt: mov %r14, %rsp pop %r14 pop %r13 @@ -13343,7 +13397,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(aesni_gcm_enc) -@@ -1733,6 +1736,7 @@ _key_expansion_256a: +@@ -1734,6 +1737,7 @@ _key_expansion_256a: pxor %xmm1, %xmm0 movaps %xmm0, (TKEYP) add $0x10, TKEYP @@ -13351,7 +13405,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_key_expansion_128) ENDPROC(_key_expansion_256a) -@@ -1759,6 +1763,7 @@ _key_expansion_192a: +@@ -1760,6 +1764,7 @@ _key_expansion_192a: shufps $0b01001110, %xmm2, %xmm1 movaps %xmm1, 0x10(TKEYP) add $0x20, TKEYP @@ -13359,7 +13413,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_key_expansion_192a) -@@ -1779,6 +1784,7 @@ _key_expansion_192b: +@@ -1780,6 +1785,7 @@ _key_expansion_192b: movaps %xmm0, (TKEYP) add $0x10, TKEYP @@ -13367,7 +13421,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_key_expansion_192b) -@@ -1792,6 +1798,7 @@ _key_expansion_256b: +@@ -1793,6 +1799,7 @@ _key_expansion_256b: pxor %xmm1, %xmm2 movaps %xmm2, (TKEYP) add $0x10, TKEYP @@ -13375,10 +13429,10 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_key_expansion_256b) -@@ -1905,13 +1912,14 @@ ENTRY(aesni_set_key) - #ifndef __x86_64__ +@@ -1908,13 +1915,14 @@ ENTRY(aesni_set_key) popl KEYP #endif + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_set_key) @@ -13388,18 +13442,18 @@ index 6bd2c6c..a551119 100644 */ -ENTRY(aesni_enc) +RAP_ENTRY(aesni_enc) + FRAME_BEGIN #ifndef __x86_64__ pushl KEYP - pushl KLEN -@@ -1927,6 +1935,7 @@ ENTRY(aesni_enc) - popl KLEN +@@ -1932,6 +1940,7 @@ ENTRY(aesni_enc) popl KEYP #endif + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_enc) -@@ -1985,6 +1994,7 @@ _aesni_enc1: +@@ -1990,6 +1999,7 @@ _aesni_enc1: AESENC KEY STATE movaps 0x70(TKEYP), KEY AESENCLAST KEY STATE @@ -13407,7 +13461,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_aesni_enc1) -@@ -2094,13 +2104,14 @@ _aesni_enc4: +@@ -2099,13 +2109,14 @@ _aesni_enc4: AESENCLAST KEY STATE2 AESENCLAST KEY STATE3 AESENCLAST KEY STATE4 @@ -13420,18 +13474,18 @@ index 6bd2c6c..a551119 100644 */ -ENTRY(aesni_dec) +RAP_ENTRY(aesni_dec) + FRAME_BEGIN #ifndef __x86_64__ pushl KEYP - pushl KLEN -@@ -2117,6 +2128,7 @@ ENTRY(aesni_dec) - popl KLEN +@@ -2124,6 +2135,7 @@ ENTRY(aesni_dec) popl KEYP #endif + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_dec) -@@ -2175,6 +2187,7 @@ _aesni_dec1: +@@ -2182,6 +2194,7 @@ _aesni_dec1: AESDEC KEY STATE movaps 0x70(TKEYP), KEY AESDECLAST KEY STATE @@ -13439,7 +13493,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_aesni_dec1) -@@ -2284,6 +2297,7 @@ _aesni_dec4: +@@ -2291,6 +2304,7 @@ _aesni_dec4: AESDECLAST KEY STATE2 AESDECLAST KEY STATE3 AESDECLAST KEY STATE4 @@ -13447,39 +13501,39 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_aesni_dec4) -@@ -2342,6 +2356,7 @@ ENTRY(aesni_ecb_enc) - popl KEYP +@@ -2351,6 +2365,7 @@ ENTRY(aesni_ecb_enc) popl LEN #endif + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_ecb_enc) -@@ -2401,6 +2416,7 @@ ENTRY(aesni_ecb_dec) - popl KEYP +@@ -2412,6 +2427,7 @@ ENTRY(aesni_ecb_dec) popl LEN #endif + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_ecb_dec) -@@ -2443,6 +2459,7 @@ ENTRY(aesni_cbc_enc) - popl LEN +@@ -2456,6 +2472,7 @@ ENTRY(aesni_cbc_enc) popl IVP #endif + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_cbc_enc) -@@ -2534,6 +2551,7 @@ ENTRY(aesni_cbc_dec) - popl LEN +@@ -2549,6 +2566,7 @@ ENTRY(aesni_cbc_dec) popl IVP #endif + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_cbc_dec) -@@ -2561,6 +2579,7 @@ _aesni_inc_init: +@@ -2578,6 +2596,7 @@ _aesni_inc_init: mov $1, TCTR_LOW MOVQ_R64_XMM TCTR_LOW INC MOVQ_R64_XMM CTR TCTR_LOW @@ -13487,7 +13541,7 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_aesni_inc_init) -@@ -2590,6 +2609,7 @@ _aesni_inc: +@@ -2607,6 +2626,7 @@ _aesni_inc: .Linc_low: movaps CTR, IV PSHUFB_XMM BSWAP_MASK IV @@ -13495,33 +13549,33 @@ index 6bd2c6c..a551119 100644 ret ENDPROC(_aesni_inc) -@@ -2597,7 +2617,7 @@ ENDPROC(_aesni_inc) +@@ -2614,7 +2634,7 @@ ENDPROC(_aesni_inc) * void aesni_ctr_enc(struct crypto_aes_ctx *ctx, const u8 *dst, u8 *src, * size_t len, u8 *iv) */ -ENTRY(aesni_ctr_enc) +RAP_ENTRY(aesni_ctr_enc) + FRAME_BEGIN cmp $16, LEN jb .Lctr_enc_just_ret - mov 480(KEYP), KLEN -@@ -2651,6 +2671,7 @@ ENTRY(aesni_ctr_enc) - .Lctr_enc_ret: +@@ -2670,6 +2690,7 @@ ENTRY(aesni_ctr_enc) movups IV, (IVP) .Lctr_enc_just_ret: + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_ctr_enc) -@@ -2777,6 +2798,7 @@ ENTRY(aesni_xts_crypt8) - pxor INC, STATE4 +@@ -2798,6 +2819,7 @@ ENTRY(aesni_xts_crypt8) movdqu STATE4, 0x70(OUTP) + FRAME_END + pax_force_retaddr ret ENDPROC(aesni_xts_crypt8) diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c -index 3633ad6..2bf146f 100644 +index 064c7e2..df15412 100644 --- a/arch/x86/crypto/aesni-intel_glue.c +++ b/arch/x86/crypto/aesni-intel_glue.c @@ -82,9 +82,9 @@ struct aesni_xts_ctx { @@ -13602,18 +13656,18 @@ index 246c670..4fb7603 100644 ret; ENDPROC(blowfish_dec_blk_4way) diff --git a/arch/x86/crypto/camellia-aesni-avx-asm_64.S b/arch/x86/crypto/camellia-aesni-avx-asm_64.S -index ce71f92..059975a 100644 +index aa9e8bd..0b8def4 100644 --- a/arch/x86/crypto/camellia-aesni-avx-asm_64.S +++ b/arch/x86/crypto/camellia-aesni-avx-asm_64.S -@@ -16,6 +16,7 @@ - */ +@@ -17,6 +17,7 @@ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> #define CAMELLIA_TABLE_BYTE_LEN 272 -@@ -191,6 +192,7 @@ roundsm16_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd: +@@ -192,6 +193,7 @@ roundsm16_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd: roundsm16(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm15, %rcx, (%r9)); @@ -13621,7 +13675,7 @@ index ce71f92..059975a 100644 ret; ENDPROC(roundsm16_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd) -@@ -199,6 +201,7 @@ roundsm16_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab: +@@ -200,6 +202,7 @@ roundsm16_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab: roundsm16(%xmm4, %xmm5, %xmm6, %xmm7, %xmm0, %xmm1, %xmm2, %xmm3, %xmm12, %xmm13, %xmm14, %xmm15, %xmm8, %xmm9, %xmm10, %xmm11, %rax, (%r9)); @@ -13629,23 +13683,23 @@ index ce71f92..059975a 100644 ret; ENDPROC(roundsm16_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab) -@@ -780,6 +783,7 @@ __camellia_enc_blk16: - %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, +@@ -783,6 +786,7 @@ __camellia_enc_blk16: %xmm15, (key_table)(CTX, %r8, 8), (%rax), 1 * 16(%rax)); + FRAME_END + pax_force_retaddr ret; .align 8 -@@ -865,6 +869,7 @@ __camellia_dec_blk16: - %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, +@@ -870,6 +874,7 @@ __camellia_dec_blk16: %xmm15, (key_table)(CTX), (%rax), 1 * 16(%rax)); + FRAME_END + pax_force_retaddr ret; .align 8 -@@ -884,7 +889,7 @@ __camellia_dec_blk16: +@@ -889,7 +894,7 @@ __camellia_dec_blk16: jmp .Ldec_max24; ENDPROC(__camellia_dec_blk16) @@ -13654,10 +13708,10 @@ index ce71f92..059975a 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -904,10 +909,11 @@ ENTRY(camellia_ecb_enc_16way) - %xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9, +@@ -911,10 +916,11 @@ ENTRY(camellia_ecb_enc_16way) %xmm8, %rsi); + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_ecb_enc_16way) @@ -13667,10 +13721,10 @@ index ce71f92..059975a 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -932,10 +938,11 @@ ENTRY(camellia_ecb_dec_16way) - %xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9, +@@ -941,10 +947,11 @@ ENTRY(camellia_ecb_dec_16way) %xmm8, %rsi); + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_ecb_dec_16way) @@ -13680,15 +13734,15 @@ index ce71f92..059975a 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -981,6 +988,7 @@ ENTRY(camellia_cbc_dec_16way) - %xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9, +@@ -992,6 +999,7 @@ ENTRY(camellia_cbc_dec_16way) %xmm8, %rsi); + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_cbc_dec_16way) -@@ -990,7 +998,7 @@ ENDPROC(camellia_cbc_dec_16way) +@@ -1001,7 +1009,7 @@ ENDPROC(camellia_cbc_dec_16way) vpslldq $8, tmp, tmp; \ vpsubq tmp, x, x; @@ -13697,18 +13751,18 @@ index ce71f92..059975a 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -1092,6 +1100,7 @@ ENTRY(camellia_ctr_16way) - %xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9, +@@ -1105,6 +1113,7 @@ ENTRY(camellia_ctr_16way) %xmm8, %rsi); + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_ctr_16way) -@@ -1234,10 +1243,11 @@ camellia_xts_crypt_16way: - %xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9, +@@ -1249,10 +1258,11 @@ camellia_xts_crypt_16way: %xmm8, %rsi); + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_xts_crypt_16way) @@ -13718,7 +13772,7 @@ index ce71f92..059975a 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -1251,7 +1261,7 @@ ENTRY(camellia_xts_enc_16way) +@@ -1266,7 +1276,7 @@ ENTRY(camellia_xts_enc_16way) jmp camellia_xts_crypt_16way; ENDPROC(camellia_xts_enc_16way) @@ -13728,18 +13782,18 @@ index ce71f92..059975a 100644 * %rdi: ctx, CTX * %rsi: dst (16 blocks) diff --git a/arch/x86/crypto/camellia-aesni-avx2-asm_64.S b/arch/x86/crypto/camellia-aesni-avx2-asm_64.S -index 0e0b886..7bad080 100644 +index 16186c1..3468f83 100644 --- a/arch/x86/crypto/camellia-aesni-avx2-asm_64.S +++ b/arch/x86/crypto/camellia-aesni-avx2-asm_64.S -@@ -11,6 +11,7 @@ - */ +@@ -12,6 +12,7 @@ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> #define CAMELLIA_TABLE_BYTE_LEN 272 -@@ -230,6 +231,7 @@ roundsm32_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd: +@@ -231,6 +232,7 @@ roundsm32_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd: roundsm32(%ymm0, %ymm1, %ymm2, %ymm3, %ymm4, %ymm5, %ymm6, %ymm7, %ymm8, %ymm9, %ymm10, %ymm11, %ymm12, %ymm13, %ymm14, %ymm15, %rcx, (%r9)); @@ -13747,7 +13801,7 @@ index 0e0b886..7bad080 100644 ret; ENDPROC(roundsm32_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd) -@@ -238,6 +240,7 @@ roundsm32_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab: +@@ -239,6 +241,7 @@ roundsm32_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab: roundsm32(%ymm4, %ymm5, %ymm6, %ymm7, %ymm0, %ymm1, %ymm2, %ymm3, %ymm12, %ymm13, %ymm14, %ymm15, %ymm8, %ymm9, %ymm10, %ymm11, %rax, (%r9)); @@ -13755,23 +13809,23 @@ index 0e0b886..7bad080 100644 ret; ENDPROC(roundsm32_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab) -@@ -820,6 +823,7 @@ __camellia_enc_blk32: - %ymm8, %ymm9, %ymm10, %ymm11, %ymm12, %ymm13, %ymm14, +@@ -823,6 +826,7 @@ __camellia_enc_blk32: %ymm15, (key_table)(CTX, %r8, 8), (%rax), 1 * 32(%rax)); + FRAME_END + pax_force_retaddr ret; .align 8 -@@ -905,6 +909,7 @@ __camellia_dec_blk32: - %ymm8, %ymm9, %ymm10, %ymm11, %ymm12, %ymm13, %ymm14, +@@ -910,6 +914,7 @@ __camellia_dec_blk32: %ymm15, (key_table)(CTX), (%rax), 1 * 32(%rax)); + FRAME_END + pax_force_retaddr ret; .align 8 -@@ -924,7 +929,7 @@ __camellia_dec_blk32: +@@ -929,7 +934,7 @@ __camellia_dec_blk32: jmp .Ldec_max24; ENDPROC(__camellia_dec_blk32) @@ -13780,10 +13834,10 @@ index 0e0b886..7bad080 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) -@@ -948,10 +953,11 @@ ENTRY(camellia_ecb_enc_32way) - +@@ -955,10 +960,11 @@ ENTRY(camellia_ecb_enc_32way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_ecb_enc_32way) @@ -13793,10 +13847,10 @@ index 0e0b886..7bad080 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) -@@ -980,10 +986,11 @@ ENTRY(camellia_ecb_dec_32way) - +@@ -989,10 +995,11 @@ ENTRY(camellia_ecb_dec_32way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_ecb_dec_32way) @@ -13806,15 +13860,15 @@ index 0e0b886..7bad080 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) -@@ -1046,6 +1053,7 @@ ENTRY(camellia_cbc_dec_32way) - +@@ -1057,6 +1064,7 @@ ENTRY(camellia_cbc_dec_32way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_cbc_dec_32way) -@@ -1063,7 +1071,7 @@ ENDPROC(camellia_cbc_dec_32way) +@@ -1074,7 +1082,7 @@ ENDPROC(camellia_cbc_dec_32way) vpslldq $8, tmp1, tmp1; \ vpsubq tmp1, x, x; @@ -13823,18 +13877,18 @@ index 0e0b886..7bad080 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) -@@ -1184,6 +1192,7 @@ ENTRY(camellia_ctr_32way) - +@@ -1197,6 +1205,7 @@ ENTRY(camellia_ctr_32way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_ctr_32way) -@@ -1349,10 +1358,11 @@ camellia_xts_crypt_32way: - +@@ -1364,10 +1373,11 @@ camellia_xts_crypt_32way: vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(camellia_xts_crypt_32way) @@ -13844,7 +13898,7 @@ index 0e0b886..7bad080 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) -@@ -1367,7 +1377,7 @@ ENTRY(camellia_xts_enc_32way) +@@ -1382,7 +1392,7 @@ ENTRY(camellia_xts_enc_32way) jmp camellia_xts_crypt_32way; ENDPROC(camellia_xts_enc_32way) @@ -13998,7 +14052,7 @@ index 93d8f29..4218a74 100644 void camellia_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv) diff --git a/arch/x86/crypto/camellia_glue.c b/arch/x86/crypto/camellia_glue.c -index 5c8b626..934a4b6 100644 +index aa76cad..ffd8808 100644 --- a/arch/x86/crypto/camellia_glue.c +++ b/arch/x86/crypto/camellia_glue.c @@ -39,7 +39,7 @@ @@ -14032,18 +14086,18 @@ index 5c8b626..934a4b6 100644 camellia_dec_blk_2way(ctx, (u8 *)dst, (u8 *)src); diff --git a/arch/x86/crypto/cast5-avx-x86_64-asm_64.S b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S -index c35fd5d..563138e 100644 +index 14fa196..5de8a4a 100644 --- a/arch/x86/crypto/cast5-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S -@@ -24,6 +24,7 @@ - */ +@@ -25,6 +25,7 @@ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> .file "cast5-avx-x86_64-asm_64.S" -@@ -281,6 +282,7 @@ __cast5_enc_blk16: +@@ -282,6 +283,7 @@ __cast5_enc_blk16: outunpack_blocks(RR3, RL3, RTMP, RX, RKM); outunpack_blocks(RR4, RL4, RTMP, RX, RKM); @@ -14051,7 +14105,7 @@ index c35fd5d..563138e 100644 ret; ENDPROC(__cast5_enc_blk16) -@@ -352,6 +354,7 @@ __cast5_dec_blk16: +@@ -353,6 +355,7 @@ __cast5_dec_blk16: outunpack_blocks(RR3, RL3, RTMP, RX, RKM); outunpack_blocks(RR4, RL4, RTMP, RX, RKM); @@ -14059,7 +14113,7 @@ index c35fd5d..563138e 100644 ret; .L__skip_dec: -@@ -359,7 +362,7 @@ __cast5_dec_blk16: +@@ -360,7 +363,7 @@ __cast5_dec_blk16: jmp .L__dec_tail; ENDPROC(__cast5_dec_blk16) @@ -14068,10 +14122,10 @@ index c35fd5d..563138e 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -388,10 +391,11 @@ ENTRY(cast5_ecb_enc_16way) - vmovdqu RR4, (6*4*4)(%r11); +@@ -391,10 +394,11 @@ ENTRY(cast5_ecb_enc_16way) vmovdqu RL4, (7*4*4)(%r11); + FRAME_END + pax_force_retaddr ret; ENDPROC(cast5_ecb_enc_16way) @@ -14081,17 +14135,17 @@ index c35fd5d..563138e 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -420,6 +424,7 @@ ENTRY(cast5_ecb_dec_16way) - vmovdqu RR4, (6*4*4)(%r11); +@@ -425,6 +429,7 @@ ENTRY(cast5_ecb_dec_16way) vmovdqu RL4, (7*4*4)(%r11); + FRAME_END + pax_force_retaddr ret; ENDPROC(cast5_ecb_dec_16way) -@@ -430,10 +435,10 @@ ENTRY(cast5_cbc_dec_16way) - * %rdx: src +@@ -436,10 +441,10 @@ ENTRY(cast5_cbc_dec_16way) */ + FRAME_BEGIN - pushq %r12; + pushq %r14; @@ -14102,7 +14156,7 @@ index c35fd5d..563138e 100644 vmovdqu (0*16)(%rdx), RL1; vmovdqu (1*16)(%rdx), RR1; -@@ -447,16 +452,16 @@ ENTRY(cast5_cbc_dec_16way) +@@ -453,16 +458,16 @@ ENTRY(cast5_cbc_dec_16way) call __cast5_dec_blk16; /* xor with src */ @@ -14127,20 +14181,21 @@ index c35fd5d..563138e 100644 vmovdqu RR1, (0*16)(%r11); vmovdqu RL1, (1*16)(%r11); -@@ -467,8 +472,9 @@ ENTRY(cast5_cbc_dec_16way) +@@ -473,9 +478,10 @@ ENTRY(cast5_cbc_dec_16way) vmovdqu RR4, (6*16)(%r11); vmovdqu RL4, (7*16)(%r11); - popq %r12; + popq %r14; + FRAME_END + pax_force_retaddr ret; ENDPROC(cast5_cbc_dec_16way) -@@ -480,10 +486,10 @@ ENTRY(cast5_ctr_16way) - * %rcx: iv (big endian, 64bit) +@@ -488,10 +494,10 @@ ENTRY(cast5_ctr_16way) */ + FRAME_BEGIN - pushq %r12; + pushq %r14; @@ -14151,7 +14206,7 @@ index c35fd5d..563138e 100644 vpcmpeqd RTMP, RTMP, RTMP; vpsrldq $8, RTMP, RTMP; /* low: -1, high: 0 */ -@@ -523,14 +529,14 @@ ENTRY(cast5_ctr_16way) +@@ -531,14 +537,14 @@ ENTRY(cast5_ctr_16way) call __cast5_enc_blk16; /* dst = src ^ iv */ @@ -14174,29 +14229,30 @@ index c35fd5d..563138e 100644 vmovdqu RR1, (0*16)(%r11); vmovdqu RL1, (1*16)(%r11); vmovdqu RR2, (2*16)(%r11); -@@ -540,7 +546,8 @@ ENTRY(cast5_ctr_16way) +@@ -548,8 +554,9 @@ ENTRY(cast5_ctr_16way) vmovdqu RR4, (6*16)(%r11); vmovdqu RL4, (7*16)(%r11); - popq %r12; + popq %r14; + FRAME_END + pax_force_retaddr ret; ENDPROC(cast5_ctr_16way) diff --git a/arch/x86/crypto/cast6-avx-x86_64-asm_64.S b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S -index e3531f8..564f08b 100644 +index c419389..b853452 100644 --- a/arch/x86/crypto/cast6-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S -@@ -24,6 +24,7 @@ - */ +@@ -25,6 +25,7 @@ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> #include "glue_helper-asm-avx.S" .file "cast6-avx-x86_64-asm_64.S" -@@ -295,6 +296,7 @@ __cast6_enc_blk8: +@@ -296,6 +297,7 @@ __cast6_enc_blk8: outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM); outunpack_blocks(RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM); @@ -14204,7 +14260,7 @@ index e3531f8..564f08b 100644 ret; ENDPROC(__cast6_enc_blk8) -@@ -340,10 +342,11 @@ __cast6_dec_blk8: +@@ -341,10 +343,11 @@ __cast6_dec_blk8: outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM); outunpack_blocks(RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM); @@ -14217,10 +14273,10 @@ index e3531f8..564f08b 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -358,10 +361,11 @@ ENTRY(cast6_ecb_enc_8way) - +@@ -361,10 +364,11 @@ ENTRY(cast6_ecb_enc_8way) store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(cast6_ecb_enc_8way) @@ -14230,10 +14286,10 @@ index e3531f8..564f08b 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -376,33 +380,35 @@ ENTRY(cast6_ecb_dec_8way) - +@@ -381,10 +385,11 @@ ENTRY(cast6_ecb_dec_8way) store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(cast6_ecb_dec_8way) @@ -14243,8 +14299,9 @@ index e3531f8..564f08b 100644 /* input: * %rdi: ctx, CTX * %rsi: dst - * %rdx: src +@@ -392,24 +397,25 @@ ENTRY(cast6_cbc_dec_8way) */ + FRAME_BEGIN - pushq %r12; + pushq %r14; @@ -14263,6 +14320,7 @@ index e3531f8..564f08b 100644 - popq %r12; + popq %r14; + FRAME_END + pax_force_retaddr ret; ENDPROC(cast6_cbc_dec_8way) @@ -14272,9 +14330,9 @@ index e3531f8..564f08b 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -410,24 +416,25 @@ ENTRY(cast6_ctr_8way) - * %rcx: iv (little endian, 128bit) +@@ -418,25 +424,26 @@ ENTRY(cast6_ctr_8way) */ + FRAME_BEGIN - pushq %r12; + pushq %r14; @@ -14294,6 +14352,7 @@ index e3531f8..564f08b 100644 - popq %r12; + popq %r14; + FRAME_END + pax_force_retaddr ret; ENDPROC(cast6_ctr_8way) @@ -14303,10 +14362,10 @@ index e3531f8..564f08b 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -446,10 +453,11 @@ ENTRY(cast6_xts_enc_8way) - /* dst <= regs xor IVs(in dst) */ +@@ -457,10 +464,11 @@ ENTRY(cast6_xts_enc_8way) store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(cast6_xts_enc_8way) @@ -14316,15 +14375,15 @@ index e3531f8..564f08b 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -468,5 +476,6 @@ ENTRY(cast6_xts_dec_8way) - /* dst <= regs xor IVs(in dst) */ +@@ -481,5 +489,6 @@ ENTRY(cast6_xts_dec_8way) store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(cast6_xts_dec_8way) diff --git a/arch/x86/crypto/cast6_avx_glue.c b/arch/x86/crypto/cast6_avx_glue.c -index fca4595..e5d2127 100644 +index 50e6847..bf7c2d8 100644 --- a/arch/x86/crypto/cast6_avx_glue.c +++ b/arch/x86/crypto/cast6_avx_glue.c @@ -41,20 +41,20 @@ @@ -14357,7 +14416,7 @@ index fca4595..e5d2127 100644 static void cast6_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv) { diff --git a/arch/x86/crypto/crc32c-pcl-intel-asm_64.S b/arch/x86/crypto/crc32c-pcl-intel-asm_64.S -index 4fe27e0..2885e731 100644 +index dc05f010..23c8bfd 100644 --- a/arch/x86/crypto/crc32c-pcl-intel-asm_64.S +++ b/arch/x86/crypto/crc32c-pcl-intel-asm_64.S @@ -45,6 +45,7 @@ @@ -14374,21 +14433,21 @@ index 4fe27e0..2885e731 100644 popq %rbx + pax_force_retaddr ret + ENDPROC(crc_pcl) - ################################################################ diff --git a/arch/x86/crypto/ghash-clmulni-intel_asm.S b/arch/x86/crypto/ghash-clmulni-intel_asm.S -index 5d1e007..098cb4f 100644 +index eed55c8..b354187 100644 --- a/arch/x86/crypto/ghash-clmulni-intel_asm.S +++ b/arch/x86/crypto/ghash-clmulni-intel_asm.S -@@ -18,6 +18,7 @@ - +@@ -19,6 +19,7 @@ #include <linux/linkage.h> #include <asm/inst.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> .data -@@ -89,6 +90,7 @@ __clmul_gf128mul_ble: +@@ -90,6 +91,7 @@ __clmul_gf128mul_ble: psrlq $1, T2 pxor T2, T1 pxor T1, DATA @@ -14396,18 +14455,18 @@ index 5d1e007..098cb4f 100644 ret ENDPROC(__clmul_gf128mul_ble) -@@ -101,6 +103,7 @@ ENTRY(clmul_ghash_mul) - call __clmul_gf128mul_ble +@@ -104,6 +106,7 @@ ENTRY(clmul_ghash_mul) PSHUFB_XMM BSWAP DATA movups DATA, (%rdi) + FRAME_END + pax_force_retaddr ret ENDPROC(clmul_ghash_mul) -@@ -128,5 +131,6 @@ ENTRY(clmul_ghash_update) - PSHUFB_XMM BSWAP DATA +@@ -133,5 +136,6 @@ ENTRY(clmul_ghash_update) movups DATA, (%rdi) .Lupdate_just_ret: + FRAME_END + pax_force_retaddr ret ENDPROC(clmul_ghash_update) @@ -14458,18 +14517,18 @@ index 9279e0b..c4b3d2c 100644 ret ENDPROC(salsa20_ivsetup) diff --git a/arch/x86/crypto/serpent-avx-x86_64-asm_64.S b/arch/x86/crypto/serpent-avx-x86_64-asm_64.S -index 2f202f4..e671172 100644 +index 8be5718..d2bcbcd 100644 --- a/arch/x86/crypto/serpent-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/serpent-avx-x86_64-asm_64.S -@@ -24,6 +24,7 @@ - */ +@@ -25,6 +25,7 @@ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> #include "glue_helper-asm-avx.S" .file "serpent-avx-x86_64-asm_64.S" -@@ -618,6 +619,7 @@ __serpent_enc_blk8_avx: +@@ -619,6 +620,7 @@ __serpent_enc_blk8_avx: write_blocks(RA1, RB1, RC1, RD1, RK0, RK1, RK2); write_blocks(RA2, RB2, RC2, RD2, RK0, RK1, RK2); @@ -14477,7 +14536,7 @@ index 2f202f4..e671172 100644 ret; ENDPROC(__serpent_enc_blk8_avx) -@@ -672,10 +674,11 @@ __serpent_dec_blk8_avx: +@@ -673,10 +675,11 @@ __serpent_dec_blk8_avx: write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2); write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2); @@ -14490,10 +14549,10 @@ index 2f202f4..e671172 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -688,10 +691,11 @@ ENTRY(serpent_ecb_enc_8way_avx) - +@@ -691,10 +694,11 @@ ENTRY(serpent_ecb_enc_8way_avx) store_8way(%rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_ecb_enc_8way_avx) @@ -14503,10 +14562,10 @@ index 2f202f4..e671172 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -704,10 +708,11 @@ ENTRY(serpent_ecb_dec_8way_avx) - +@@ -709,10 +713,11 @@ ENTRY(serpent_ecb_dec_8way_avx) store_8way(%rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2); + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_ecb_dec_8way_avx) @@ -14516,10 +14575,10 @@ index 2f202f4..e671172 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -720,10 +725,11 @@ ENTRY(serpent_cbc_dec_8way_avx) - +@@ -727,10 +732,11 @@ ENTRY(serpent_cbc_dec_8way_avx) store_cbc_8way(%rdx, %rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2); + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_cbc_dec_8way_avx) @@ -14529,10 +14588,10 @@ index 2f202f4..e671172 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -738,10 +744,11 @@ ENTRY(serpent_ctr_8way_avx) - +@@ -747,10 +753,11 @@ ENTRY(serpent_ctr_8way_avx) store_ctr_8way(%rdx, %rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_ctr_8way_avx) @@ -14542,10 +14601,10 @@ index 2f202f4..e671172 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -758,10 +765,11 @@ ENTRY(serpent_xts_enc_8way_avx) - /* dst <= regs xor IVs(in dst) */ +@@ -769,10 +776,11 @@ ENTRY(serpent_xts_enc_8way_avx) store_xts_8way(%rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_xts_enc_8way_avx) @@ -14555,26 +14614,26 @@ index 2f202f4..e671172 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -778,5 +786,6 @@ ENTRY(serpent_xts_dec_8way_avx) - /* dst <= regs xor IVs(in dst) */ +@@ -791,5 +799,6 @@ ENTRY(serpent_xts_dec_8way_avx) store_xts_8way(%rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2); + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_xts_dec_8way_avx) diff --git a/arch/x86/crypto/serpent-avx2-asm_64.S b/arch/x86/crypto/serpent-avx2-asm_64.S -index b222085..c43efce 100644 +index 97c48ad..25416de 100644 --- a/arch/x86/crypto/serpent-avx2-asm_64.S +++ b/arch/x86/crypto/serpent-avx2-asm_64.S -@@ -15,6 +15,7 @@ - */ +@@ -16,6 +16,7 @@ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> #include "glue_helper-asm-avx2.S" .file "serpent-avx2-asm_64.S" -@@ -610,6 +611,7 @@ __serpent_enc_blk16: +@@ -611,6 +612,7 @@ __serpent_enc_blk16: write_blocks(RA1, RB1, RC1, RD1, RK0, RK1, RK2); write_blocks(RA2, RB2, RC2, RD2, RK0, RK1, RK2); @@ -14582,7 +14641,7 @@ index b222085..c43efce 100644 ret; ENDPROC(__serpent_enc_blk16) -@@ -664,10 +666,11 @@ __serpent_dec_blk16: +@@ -665,10 +667,11 @@ __serpent_dec_blk16: write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2); write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2); @@ -14595,10 +14654,10 @@ index b222085..c43efce 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -684,10 +687,11 @@ ENTRY(serpent_ecb_enc_16way) - +@@ -687,10 +690,11 @@ ENTRY(serpent_ecb_enc_16way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_ecb_enc_16way) @@ -14608,10 +14667,10 @@ index b222085..c43efce 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -704,10 +708,11 @@ ENTRY(serpent_ecb_dec_16way) - +@@ -709,10 +713,11 @@ ENTRY(serpent_ecb_dec_16way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_ecb_dec_16way) @@ -14621,10 +14680,10 @@ index b222085..c43efce 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -725,10 +730,11 @@ ENTRY(serpent_cbc_dec_16way) - +@@ -732,10 +737,11 @@ ENTRY(serpent_cbc_dec_16way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_cbc_dec_16way) @@ -14634,10 +14693,10 @@ index b222085..c43efce 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -748,10 +754,11 @@ ENTRY(serpent_ctr_16way) - +@@ -757,10 +763,11 @@ ENTRY(serpent_ctr_16way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_ctr_16way) @@ -14647,10 +14706,10 @@ index b222085..c43efce 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -772,10 +779,11 @@ ENTRY(serpent_xts_enc_16way) - +@@ -783,10 +790,11 @@ ENTRY(serpent_xts_enc_16way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_xts_enc_16way) @@ -14660,10 +14719,10 @@ index b222085..c43efce 100644 /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) -@@ -796,5 +804,6 @@ ENTRY(serpent_xts_dec_16way) - +@@ -809,5 +817,6 @@ ENTRY(serpent_xts_dec_16way) vzeroupper; + FRAME_END + pax_force_retaddr ret; ENDPROC(serpent_xts_dec_16way) @@ -14732,7 +14791,7 @@ index 6d19834..a08fbe9 100644 static const struct common_glue_ctx serpent_enc = { .num_funcs = 3, diff --git a/arch/x86/crypto/serpent_avx_glue.c b/arch/x86/crypto/serpent_avx_glue.c -index 5dc3702..10f232a 100644 +index 6f778d3..3cf277e 100644 --- a/arch/x86/crypto/serpent_avx_glue.c +++ b/arch/x86/crypto/serpent_avx_glue.c @@ -41,28 +41,28 @@ @@ -14774,7 +14833,7 @@ index 5dc3702..10f232a 100644 void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) diff --git a/arch/x86/crypto/serpent_sse2_glue.c b/arch/x86/crypto/serpent_sse2_glue.c -index 3643dd5..17d5e30 100644 +index 8943407..beb882d 100644 --- a/arch/x86/crypto/serpent_sse2_glue.c +++ b/arch/x86/crypto/serpent_sse2_glue.c @@ -45,8 +45,10 @@ @@ -14790,19 +14849,19 @@ index 3643dd5..17d5e30 100644 unsigned int j; diff --git a/arch/x86/crypto/sha-mb/sha1_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha-mb/sha1_mb_mgr_flush_avx2.S -index 85c4e1c..665efaa 100644 +index 96df6a3..8519a8f 100644 --- a/arch/x86/crypto/sha-mb/sha1_mb_mgr_flush_avx2.S +++ b/arch/x86/crypto/sha-mb/sha1_mb_mgr_flush_avx2.S -@@ -112,7 +112,7 @@ offset = \_offset +@@ -103,7 +103,7 @@ offset = \_offset # JOB* sha1_mb_mgr_flush_avx2(MB_MGR *state) # arg 1 : rcx : state -ENTRY(sha1_mb_mgr_flush_avx2) +RAP_ENTRY(sha1_mb_mgr_flush_avx2) - mov %rsp, %r10 - sub $STACK_SPACE, %rsp - and $~31, %rsp -@@ -251,7 +251,7 @@ ENDPROC(sha1_mb_mgr_flush_avx2) + FRAME_BEGIN + push %rbx + +@@ -226,7 +226,7 @@ ENDPROC(sha1_mb_mgr_flush_avx2) ################################################################# .align 16 @@ -14812,18 +14871,18 @@ index 85c4e1c..665efaa 100644 ## if bit 32+3 is set, then all lanes are empty diff --git a/arch/x86/crypto/sha-mb/sha1_mb_mgr_submit_avx2.S b/arch/x86/crypto/sha-mb/sha1_mb_mgr_submit_avx2.S -index 2ab9560..d4ae8714 100644 +index 63a0d9c..a6038fd 100644 --- a/arch/x86/crypto/sha-mb/sha1_mb_mgr_submit_avx2.S +++ b/arch/x86/crypto/sha-mb/sha1_mb_mgr_submit_avx2.S -@@ -100,7 +100,7 @@ STACK_SPACE = 8*8 + 16*10 + 8 +@@ -98,7 +98,7 @@ lane_data = %r10 # JOB* submit_mb_mgr_submit_avx2(MB_MGR *state, job_sha1 *job) # arg 1 : rcx : state # arg 2 : rdx : job -ENTRY(sha1_mb_mgr_submit_avx2) +RAP_ENTRY(sha1_mb_mgr_submit_avx2) - - mov %rsp, %r10 - sub $STACK_SPACE, %rsp + FRAME_BEGIN + push %rbx + push %r12 diff --git a/arch/x86/crypto/sha1_ssse3_asm.S b/arch/x86/crypto/sha1_ssse3_asm.S index a410950..02d2056 100644 --- a/arch/x86/crypto/sha1_ssse3_asm.S @@ -15351,18 +15410,18 @@ index 34e5083..eb57a5e 100644 static int sha512_avx2_update(struct shash_desc *desc, const u8 *data, unsigned int len) diff --git a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S -index 0505813..912c9c1 100644 +index dc66273..30aba4b 100644 --- a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S -@@ -24,6 +24,7 @@ - */ +@@ -25,6 +25,7 @@ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> #include "glue_helper-asm-avx.S" .file "twofish-avx-x86_64-asm_64.S" -@@ -284,6 +285,7 @@ __twofish_enc_blk8: +@@ -285,6 +286,7 @@ __twofish_enc_blk8: outunpack_blocks(RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2); outunpack_blocks(RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2); @@ -15370,7 +15429,7 @@ index 0505813..912c9c1 100644 ret; ENDPROC(__twofish_enc_blk8) -@@ -324,10 +326,11 @@ __twofish_dec_blk8: +@@ -325,10 +327,11 @@ __twofish_dec_blk8: outunpack_blocks(RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2); outunpack_blocks(RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2); @@ -15383,10 +15442,10 @@ index 0505813..912c9c1 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -342,10 +345,11 @@ ENTRY(twofish_ecb_enc_8way) - +@@ -345,10 +348,11 @@ ENTRY(twofish_ecb_enc_8way) store_8way(%r11, RC1, RD1, RA1, RB1, RC2, RD2, RA2, RB2); + FRAME_END + pax_force_retaddr ret; ENDPROC(twofish_ecb_enc_8way) @@ -15396,10 +15455,10 @@ index 0505813..912c9c1 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -360,33 +364,35 @@ ENTRY(twofish_ecb_dec_8way) - +@@ -365,10 +369,11 @@ ENTRY(twofish_ecb_dec_8way) store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(twofish_ecb_dec_8way) @@ -15409,8 +15468,9 @@ index 0505813..912c9c1 100644 /* input: * %rdi: ctx, CTX * %rsi: dst - * %rdx: src +@@ -376,24 +381,25 @@ ENTRY(twofish_cbc_dec_8way) */ + FRAME_BEGIN - pushq %r12; + pushq %r14; @@ -15429,6 +15489,7 @@ index 0505813..912c9c1 100644 - popq %r12; + popq %r14; + FRAME_END + pax_force_retaddr ret; ENDPROC(twofish_cbc_dec_8way) @@ -15438,9 +15499,9 @@ index 0505813..912c9c1 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -394,24 +400,25 @@ ENTRY(twofish_ctr_8way) - * %rcx: iv (little endian, 128bit) +@@ -402,25 +408,26 @@ ENTRY(twofish_ctr_8way) */ + FRAME_BEGIN - pushq %r12; + pushq %r14; @@ -15460,6 +15521,7 @@ index 0505813..912c9c1 100644 - popq %r12; + popq %r14; + FRAME_END + pax_force_retaddr ret; ENDPROC(twofish_ctr_8way) @@ -15469,10 +15531,10 @@ index 0505813..912c9c1 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -430,10 +437,11 @@ ENTRY(twofish_xts_enc_8way) - /* dst <= regs xor IVs(in dst) */ +@@ -441,10 +448,11 @@ ENTRY(twofish_xts_enc_8way) store_xts_8way(%r11, RC1, RD1, RA1, RB1, RC2, RD2, RA2, RB2); + FRAME_END + pax_force_retaddr ret; ENDPROC(twofish_xts_enc_8way) @@ -15482,10 +15544,10 @@ index 0505813..912c9c1 100644 /* input: * %rdi: ctx, CTX * %rsi: dst -@@ -452,5 +460,6 @@ ENTRY(twofish_xts_dec_8way) - /* dst <= regs xor IVs(in dst) */ +@@ -465,5 +473,6 @@ ENTRY(twofish_xts_dec_8way) store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); + FRAME_END + pax_force_retaddr ret; ENDPROC(twofish_xts_dec_8way) @@ -15650,7 +15712,7 @@ index 77e06c2..a45c27b 100644 EXPORT_SYMBOL_GPL(twofish_dec_blk); diff --git a/arch/x86/crypto/twofish_glue_3way.c b/arch/x86/crypto/twofish_glue_3way.c -index 56d8a08..a9f21f5 100644 +index 2ebb5e9..a0b0aa9 100644 --- a/arch/x86/crypto/twofish_glue_3way.c +++ b/arch/x86/crypto/twofish_glue_3way.c @@ -36,21 +36,21 @@ @@ -15693,17 +15755,17 @@ index 56d8a08..a9f21f5 100644 }; diff --git a/arch/x86/entry/Makefile b/arch/x86/entry/Makefile -index bd55ded..1310c8e 100644 +index fe91c25..18f6ab9 100644 --- a/arch/x86/entry/Makefile +++ b/arch/x86/entry/Makefile -@@ -9,3 +9,5 @@ obj-y += vsyscall/ +@@ -13,3 +13,5 @@ obj-y += vsyscall/ obj-$(CONFIG_IA32_EMULATION) += entry_64_compat.o syscall_32.o +CFLAGS_REMOVE_syscall_32.o = $(RAP_PLUGIN_ABS_CFLAGS) +CFLAGS_REMOVE_syscall_64.o = $(RAP_PLUGIN_ABS_CFLAGS) diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h -index e32206e0..809adae 100644 +index 9a9e588..b900d1c 100644 --- a/arch/x86/entry/calling.h +++ b/arch/x86/entry/calling.h @@ -95,23 +95,26 @@ For 32-bit we have the following conventions - kernel is built with @@ -15849,10 +15911,10 @@ index e32206e0..809adae 100644 .macro REMOVE_PT_GPREGS_FROM_STACK addskip=0 diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c -index 1a4477c..7061819 100644 +index e79d93d..31091ce 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c -@@ -32,9 +32,7 @@ +@@ -33,9 +33,7 @@ static struct thread_info *pt_regs_to_thread_info(struct pt_regs *regs) { @@ -15863,8 +15925,8 @@ index 1a4477c..7061819 100644 } #ifdef CONFIG_CONTEXT_TRACKING -@@ -46,6 +44,12 @@ __visible void enter_from_user_mode(void) - } +@@ -49,6 +47,12 @@ __visible void enter_from_user_mode(void) + static inline void enter_from_user_mode(void) {} #endif +#ifdef CONFIG_PAX_MEMORY_STACKLEAK @@ -15876,7 +15938,7 @@ index 1a4477c..7061819 100644 static void do_audit_syscall_entry(struct pt_regs *regs, u32 arch) { #ifdef CONFIG_X86_64 -@@ -160,6 +164,10 @@ unsigned long syscall_trace_enter_phase1(struct pt_regs *regs, u32 arch) +@@ -152,6 +156,10 @@ unsigned long syscall_trace_enter_phase1(struct pt_regs *regs, u32 arch) return 1; /* Something is enabled that we can't handle in phase 1 */ } @@ -15887,7 +15949,7 @@ index 1a4477c..7061819 100644 /* Returns the syscall nr to run (which should match regs->orig_ax). */ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch, unsigned long phase1_result) -@@ -171,6 +179,11 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch, +@@ -163,6 +171,11 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch, if (IS_ENABLED(CONFIG_DEBUG_ENTRY)) BUG_ON(regs != task_pt_regs(current)); @@ -15896,10 +15958,10 @@ index 1a4477c..7061819 100644 + gr_delayed_cred_worker(); +#endif + + #ifdef CONFIG_SECCOMP /* - * If we stepped into a sysenter/syscall insn, it trapped in - * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP. -@@ -207,15 +220,14 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch, + * Call seccomp_phase2 before running the other hooks so that +@@ -189,15 +202,14 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch, return ret ?: regs->orig_ax; } @@ -15919,7 +15981,7 @@ index 1a4477c..7061819 100644 } #define EXIT_TO_USERMODE_LOOP_FLAGS \ -@@ -317,7 +329,7 @@ static void syscall_slow_exit_work(struct pt_regs *regs, u32 cached_flags) +@@ -299,7 +311,7 @@ static void syscall_slow_exit_work(struct pt_regs *regs, u32 cached_flags) step = unlikely( (cached_flags & (_TIF_SINGLESTEP | _TIF_SYSCALL_EMU)) == _TIF_SINGLESTEP); @@ -15928,7 +15990,7 @@ index 1a4477c..7061819 100644 tracehook_report_syscall_exit(regs, step); } -@@ -336,6 +348,11 @@ __visible inline void syscall_return_slowpath(struct pt_regs *regs) +@@ -318,6 +330,11 @@ __visible inline void syscall_return_slowpath(struct pt_regs *regs) WARN(irqs_disabled(), "syscall %ld left IRQs disabled", regs->orig_ax)) local_irq_enable(); @@ -15940,7 +16002,37 @@ index 1a4477c..7061819 100644 /* * First do one-time work. If these work items are enabled, we * want to run them exactly once per syscall exit with IRQs on. -@@ -387,10 +404,51 @@ __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs) +@@ -347,9 +364,29 @@ __visible void do_syscall_64(struct pt_regs *regs) + * regs->orig_ax, which changes the behavior of some syscalls. + */ + if (likely((nr & __SYSCALL_MASK) < NR_syscalls)) { ++#ifdef CONFIG_PAX_RAP ++ asm volatile("movq %[param1],%%rdi\n\t" ++ "movq %[param2],%%rsi\n\t" ++ "movq %[param3],%%rdx\n\t" ++ "movq %[param4],%%rcx\n\t" ++ "movq %[param5],%%r8\n\t" ++ "movq %[param6],%%r9\n\t" ++ "call *%P[syscall]\n\t" ++ "mov %%rax,%[result]\n\t" ++ : [result] "=m" (regs->ax) ++ : [syscall] "m" (sys_call_table[nr & __SYSCALL_MASK]), ++ [param1] "m" (regs->di), ++ [param2] "m" (regs->si), ++ [param3] "m" (regs->dx), ++ [param4] "m" (regs->r10), ++ [param5] "m" (regs->r8), ++ [param6] "m" (regs->r9) ++ : "ax", "di", "si", "dx", "cx", "r8", "r9", "r10", "r11", "memory"); ++#else + regs->ax = sys_call_table[nr & __SYSCALL_MASK]( + regs->di, regs->si, regs->dx, + regs->r10, regs->r8, regs->r9); ++#endif + } + + syscall_return_slowpath(regs); +@@ -389,10 +426,51 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs) * the high bits are zero. Make sure we zero-extend all * of the args. */ @@ -15992,7 +16084,7 @@ index 1a4477c..7061819 100644 } syscall_return_slowpath(regs); -@@ -415,6 +473,7 @@ __visible long do_fast_syscall_32(struct pt_regs *regs) +@@ -416,6 +494,7 @@ __visible long do_fast_syscall_32(struct pt_regs *regs) unsigned long landing_pad = (unsigned long)current->mm->context.vdso + vdso_image_32.sym_int80_landing_pad; @@ -16000,7 +16092,7 @@ index 1a4477c..7061819 100644 /* * SYSENTER loses EIP, and even SYSCALL32 needs us to skip forward -@@ -435,11 +494,9 @@ __visible long do_fast_syscall_32(struct pt_regs *regs) +@@ -435,11 +514,9 @@ __visible long do_fast_syscall_32(struct pt_regs *regs) * Micro-optimization: the pointer we're following is explicitly * 32 bits, so it can't be out of range. */ @@ -16015,7 +16107,7 @@ index 1a4477c..7061819 100644 ) { diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S -index bb3e376..c49752a 100644 +index 10868aa..e645e1d 100644 --- a/arch/x86/entry/entry_32.S +++ b/arch/x86/entry/entry_32.S @@ -147,13 +147,157 @@ @@ -16245,8 +16337,8 @@ index bb3e376..c49752a 100644 +ENDPROC(resume_kernel) #endif - # SYSENTER call handler stub -@@ -301,6 +462,10 @@ sysenter_past_esp: + GLOBAL(__begin_SYSENTER_singlestep_region) +@@ -351,6 +512,10 @@ sysenter_past_esp: pushl %eax /* pt_regs->orig_ax */ SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */ @@ -16255,9 +16347,9 @@ index bb3e376..c49752a 100644 +#endif + /* - * User mode is traced as though IRQs are on, and SYSENTER - * turned them off. -@@ -313,11 +478,20 @@ sysenter_past_esp: + * SYSENTER doesn't filter flags, so we need to clear NT, AC + * and TF ourselves. To save a few cycles, we can check whether +@@ -386,11 +551,20 @@ sysenter_past_esp: ALTERNATIVE "testl %eax, %eax; jz .Lsyscall_32_done", \ "jmp .Lsyscall_32_done", X86_FEATURE_XENPV @@ -16278,7 +16370,7 @@ index bb3e376..c49752a 100644 PTGS_TO_GS popl %ebx /* pt_regs->bx */ addl $2*4, %esp /* skip pt_regs->cx and pt_regs->dx */ -@@ -334,10 +508,16 @@ sysenter_past_esp: +@@ -416,10 +590,16 @@ sysenter_past_esp: sysexit .pushsection .fixup, "ax" @@ -16295,9 +16387,9 @@ index bb3e376..c49752a 100644 + _ASM_EXTABLE(2b, 5b) + _ASM_EXTABLE(3b, 6b) PTGS_TO_GS_EX - ENDPROC(entry_SYSENTER_32) -@@ -347,6 +527,10 @@ ENTRY(entry_INT80_32) + .Lsysenter_fix_flags: +@@ -462,6 +642,10 @@ ENTRY(entry_INT80_32) pushl %eax /* pt_regs->orig_ax */ SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */ @@ -16306,10 +16398,10 @@ index bb3e376..c49752a 100644 +#endif + /* - * User mode is traced as though IRQs are on. Unlike the 64-bit - * case, INT80 is a trap gate on 32-bit kernels, so interrupts -@@ -357,6 +541,13 @@ ENTRY(entry_INT80_32) - call do_syscall_32_irqs_on + * User mode is traced as though IRQs are on, and the interrupt gate + * turned them off. +@@ -472,6 +656,13 @@ ENTRY(entry_INT80_32) + call do_int80_syscall_32 .Lsyscall_32_done: +#ifdef CONFIG_PAX_RANDKSTACK @@ -16322,7 +16414,7 @@ index bb3e376..c49752a 100644 restore_all: TRACE_IRQS_IRET restore_all_notrace: -@@ -411,14 +602,34 @@ ldt_ss: +@@ -515,14 +706,34 @@ ldt_ss: * compensating for the offset by changing to the ESPFIX segment with * a base address that matches for the difference. */ @@ -16360,7 +16452,7 @@ index bb3e376..c49752a 100644 pushl $__ESPFIX_SS pushl %eax /* new kernel esp */ /* -@@ -442,8 +653,15 @@ ENDPROC(entry_INT80_32) +@@ -546,8 +757,15 @@ ENDPROC(entry_INT80_32) */ #ifdef CONFIG_X86_ESPFIX32 /* fixup the stack */ @@ -16378,7 +16470,7 @@ index bb3e376..c49752a 100644 shl $16, %eax addl %esp, %eax /* the adjusted stack pointer */ pushl $__KERNEL_DS -@@ -479,7 +697,7 @@ ENTRY(irq_entries_start) +@@ -583,7 +801,7 @@ ENTRY(irq_entries_start) jmp common_interrupt .align 8 .endr @@ -16387,7 +16479,7 @@ index bb3e376..c49752a 100644 /* * the CPU automatically disables interrupts when executing an IRQ vector, -@@ -526,7 +744,7 @@ ENTRY(coprocessor_error) +@@ -630,7 +848,7 @@ ENTRY(coprocessor_error) pushl $0 pushl $do_coprocessor_error jmp error_code @@ -16396,7 +16488,7 @@ index bb3e376..c49752a 100644 ENTRY(simd_coprocessor_error) ASM_CLAC -@@ -540,20 +758,20 @@ ENTRY(simd_coprocessor_error) +@@ -644,20 +862,20 @@ ENTRY(simd_coprocessor_error) pushl $do_simd_coprocessor_error #endif jmp error_code @@ -16420,7 +16512,7 @@ index bb3e376..c49752a 100644 #endif ENTRY(overflow) -@@ -561,59 +779,59 @@ ENTRY(overflow) +@@ -665,59 +883,59 @@ ENTRY(overflow) pushl $0 pushl $do_overflow jmp error_code @@ -16489,7 +16581,7 @@ index bb3e376..c49752a 100644 #ifdef CONFIG_X86_MCE ENTRY(machine_check) -@@ -621,7 +839,7 @@ ENTRY(machine_check) +@@ -725,7 +943,7 @@ ENTRY(machine_check) pushl $0 pushl machine_check_vector jmp error_code @@ -16498,7 +16590,7 @@ index bb3e376..c49752a 100644 #endif ENTRY(spurious_interrupt_bug) -@@ -629,7 +847,7 @@ ENTRY(spurious_interrupt_bug) +@@ -733,7 +951,7 @@ ENTRY(spurious_interrupt_bug) pushl $0 pushl $do_spurious_interrupt_bug jmp error_code @@ -16506,8 +16598,8 @@ index bb3e376..c49752a 100644 +ENDPROC(spurious_interrupt_bug) #ifdef CONFIG_XEN - /* -@@ -736,7 +954,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR, + ENTRY(xen_hypervisor_callback) +@@ -832,7 +1050,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR, ENTRY(mcount) ret @@ -16516,7 +16608,7 @@ index bb3e376..c49752a 100644 ENTRY(ftrace_caller) pushl %eax -@@ -766,7 +984,7 @@ ftrace_graph_call: +@@ -862,7 +1080,7 @@ ftrace_graph_call: .globl ftrace_stub ftrace_stub: ret @@ -16525,7 +16617,7 @@ index bb3e376..c49752a 100644 ENTRY(ftrace_regs_caller) pushf /* push flags before compare (in cs location) */ -@@ -864,7 +1082,7 @@ trace: +@@ -960,7 +1178,7 @@ trace: popl %ecx popl %eax jmp ftrace_stub @@ -16534,7 +16626,7 @@ index bb3e376..c49752a 100644 #endif /* CONFIG_DYNAMIC_FTRACE */ #endif /* CONFIG_FUNCTION_TRACER */ -@@ -882,7 +1100,7 @@ ENTRY(ftrace_graph_caller) +@@ -978,7 +1196,7 @@ ENTRY(ftrace_graph_caller) popl %ecx popl %eax ret @@ -16543,7 +16635,7 @@ index bb3e376..c49752a 100644 .globl return_to_handler return_to_handler: -@@ -901,7 +1119,7 @@ ENTRY(trace_page_fault) +@@ -997,7 +1215,7 @@ ENTRY(trace_page_fault) ASM_CLAC pushl $trace_do_page_fault jmp error_code @@ -16552,7 +16644,7 @@ index bb3e376..c49752a 100644 #endif ENTRY(page_fault) -@@ -930,14 +1148,17 @@ error_code: +@@ -1026,16 +1244,19 @@ error_code: movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart REG_TO_PTGS %ecx SET_KERNEL_GS %ecx @@ -16570,46 +16662,70 @@ index bb3e376..c49752a 100644 -END(page_fault) +ENDPROC(page_fault) - /* - * Debug traps and NMI can happen at the one SYSENTER instruction -@@ -962,7 +1183,7 @@ END(page_fault) - pushl $sysenter_past_esp - .endm - -ENTRY(debug) +ENTRY(int1) - ASM_CLAC - cmpl $entry_SYSENTER_32, (%esp) - jne debug_stack_correct -@@ -975,7 +1196,7 @@ debug_stack_correct: + /* + * #DB can happen at the first instruction of + * entry_SYSENTER_32 or in Xen's SYSENTER prologue. If this +@@ -1052,7 +1273,13 @@ ENTRY(debug) movl %esp, %eax # pt_regs pointer + + /* Are we currently on the SYSENTER stack? */ +- PER_CPU(cpu_tss + CPU_TSS_SYSENTER_stack + SIZEOF_SYSENTER_stack, %ecx) ++#ifdef CONFIG_SMP ++ imul $TSS_size, PER_CPU_VAR(cpu_number), %ecx ++ lea cpu_tss(%ecx), %ecx ++#else ++ movl $cpu_tss, %ecx ++#endif ++ movl CPU_TSS_SYSENTER_stack + SIZEOF_SYSENTER_stack(%ecx), %ecx + subl %eax, %ecx /* ecx = (end of SYSENTER_stack) - esp */ + cmpl $SIZEOF_SYSENTER_stack, %ecx + jb .Ldebug_from_sysenter_stack +@@ -1069,7 +1296,7 @@ ENTRY(debug) call do_debug + movl %ebp, %esp jmp ret_from_exception -END(debug) +ENDPROC(int1) /* - * NMI is doubly nasty. It can happen _while_ we're handling -@@ -1014,6 +1235,9 @@ nmi_stack_correct: - xorl %edx, %edx # zero error code + * NMI is doubly nasty. It can happen on the first instruction of +@@ -1094,13 +1321,22 @@ ENTRY(nmi) movl %esp, %eax # pt_regs pointer + + /* Are we currently on the SYSENTER stack? */ +- PER_CPU(cpu_tss + CPU_TSS_SYSENTER_stack + SIZEOF_SYSENTER_stack, %ecx) ++#ifdef CONFIG_SMP ++ imul $TSS_size, PER_CPU_VAR(cpu_number), %ecx ++ lea cpu_tss(%ecx), %ecx ++#else ++ movl $cpu_tss, %ecx ++#endif ++ movl CPU_TSS_SYSENTER_stack + SIZEOF_SYSENTER_stack(%ecx), %ecx + subl %eax, %ecx /* ecx = (end of SYSENTER_stack) - esp */ + cmpl $SIZEOF_SYSENTER_stack, %ecx + jb .Lnmi_from_sysenter_stack + + /* Not on SYSENTER stack. */ call do_nmi + + pax_exit_kernel + jmp restore_all_notrace - nmi_stack_fixup: -@@ -1023,7 +1247,7 @@ nmi_stack_fixup: - nmi_debug_stack_check: - cmpw $__KERNEL_CS, 16(%esp) - jne nmi_stack_correct -- cmpl $debug, (%esp) -+ cmpl $int1, (%esp) - jb nmi_stack_correct - cmpl $debug_esp_fix_insn, (%esp) - ja nmi_stack_correct -@@ -1047,11 +1271,14 @@ nmi_espfix_stack: + .Lnmi_from_sysenter_stack: +@@ -1112,6 +1348,9 @@ ENTRY(nmi) + movl PER_CPU_VAR(cpu_current_top_of_stack), %esp + call do_nmi + movl %ebp, %esp ++ ++ pax_exit_kernel ++ + jmp restore_all_notrace + + #ifdef CONFIG_X86_ESPFIX32 +@@ -1131,11 +1370,14 @@ nmi_espfix_stack: FIXUP_ESPFIX_STACK # %eax == %esp xorl %edx, %edx # zero error code call do_nmi @@ -16625,7 +16741,7 @@ index bb3e376..c49752a 100644 ENTRY(int3) ASM_CLAC -@@ -1062,17 +1289,17 @@ ENTRY(int3) +@@ -1146,17 +1388,17 @@ ENTRY(int3) movl %esp, %eax # pt_regs pointer call do_int3 jmp ret_from_exception @@ -16647,7 +16763,7 @@ index bb3e376..c49752a 100644 +ENDPROC(async_page_fault) #endif diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S -index 9d34d3c..2398c40 100644 +index 858b555..895a2d0 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -36,6 +36,8 @@ @@ -17071,26 +17187,10 @@ index 9d34d3c..2398c40 100644 jnc 1f TRACE_IRQS_ON_DEBUG 1: -@@ -148,14 +546,6 @@ GLOBAL(entry_SYSCALL_64_after_swapgs) - /* Construct struct pt_regs on stack */ - pushq $__USER_DS /* pt_regs->ss */ - pushq PER_CPU_VAR(rsp_scratch) /* pt_regs->sp */ -- /* -- * Re-enable interrupts. -- * We use 'rsp_scratch' as a scratch space, hence irq-off block above -- * must execute atomically in the face of possible interrupt-driven -- * task preemption. We must enable interrupts only after we're done -- * with using rsp_scratch: -- */ -- ENABLE_INTERRUPTS(CLBR_NONE) - pushq %r11 /* pt_regs->flags */ - pushq $__USER_CS /* pt_regs->cs */ - pushq %rcx /* pt_regs->ip */ -@@ -171,7 +561,27 @@ GLOBAL(entry_SYSCALL_64_after_swapgs) +@@ -175,11 +573,22 @@ GLOBAL(entry_SYSCALL_64_after_swapgs) pushq %r11 /* pt_regs->r11 */ sub $(6*8), %rsp /* pt_regs->bp, bx, r12-15 not saved */ -- testl $_TIF_WORK_SYSCALL_ENTRY, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) +#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR + movq %r12, R12(%rsp) +#endif @@ -17101,139 +17201,81 @@ index 9d34d3c..2398c40 100644 + pax_erase_kstack +#endif + -+ /* -+ * Re-enable interrupts. -+ * We use 'rsp_scratch' as a scratch space, hence irq-off block above -+ * must execute atomically in the face of possible interrupt-driven -+ * task preemption. We must enable interrupts only after we're done -+ * with using rsp_scratch: -+ */ -+ ENABLE_INTERRUPTS(CLBR_NONE) -+ + /* + * If we need to do entry work or if we guess we'll need to do + * exit work, go straight to the slow path. + */ +- testl $_TIF_WORK_SYSCALL_ENTRY|_TIF_ALLWORK_MASK, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) + GET_THREAD_INFO(%rcx) -+ testl $_TIF_WORK_SYSCALL_ENTRY, TI_flags(%rcx) - jnz tracesys ++ testl $_TIF_WORK_SYSCALL_ENTRY|_TIF_ALLWORK_MASK, TI_flags(%rcx) + jnz entry_SYSCALL64_slow_path + entry_SYSCALL_64_fastpath: - #if __SYSCALL_MASK == ~0 -@@ -204,9 +614,13 @@ entry_SYSCALL_64_fastpath: - * flags (TIF_NOTIFY_RESUME, TIF_USER_RETURN_NOTIFY, etc) set is - * very bad. +@@ -217,9 +626,13 @@ entry_SYSCALL_64_fastpath: */ + DISABLE_INTERRUPTS(CLBR_NONE) + TRACE_IRQS_OFF - testl $_TIF_ALLWORK_MASK, ASM_THREAD_INFO(TI_flags, %rsp, SIZEOF_PTREGS) + GET_THREAD_INFO(%rcx) + testl $_TIF_ALLWORK_MASK, TI_flags(%rcx) - jnz int_ret_from_sys_call_irqs_off /* Go to the slow path */ + jnz 1f + pax_exit_kernel_user + pax_erase_kstack + - RESTORE_C_REGS_EXCEPT_RCX_R11 + LOCKDEP_SYS_EXIT + TRACE_IRQS_ON /* user mode is traced as IRQs on */ movq RIP(%rsp), %rcx - movq EFLAGS(%rsp), %r11 -@@ -240,6 +654,9 @@ tracesys: - call syscall_trace_enter_phase1 - test %rax, %rax - jnz tracesys_phase2 /* if needed, run the slow path */ -+ -+ pax_erase_kstack -+ - RESTORE_C_REGS_EXCEPT_RAX /* else restore clobbered regs */ - movq ORIG_RAX(%rsp), %rax - jmp entry_SYSCALL_64_fastpath /* and return to the fast path */ -@@ -251,6 +668,8 @@ tracesys_phase2: - movq %rax, %rdx - call syscall_trace_enter_phase2 +@@ -248,6 +661,9 @@ entry_SYSCALL64_slow_path: + call do_syscall_64 /* returns with IRQs disabled */ -+ pax_erase_kstack -+ - /* - * Reload registers from stack in case ptrace changed them. - * We don't reload %rax because syscall_trace_entry_phase2() returned -@@ -279,6 +698,8 @@ GLOBAL(int_ret_from_sys_call) - SAVE_EXTRA_REGS - movq %rsp, %rdi - call syscall_return_slowpath /* returns with IRQs disabled */ + return_from_SYSCALL_64: + pax_exit_kernel_user + pax_erase_kstack ++ RESTORE_EXTRA_REGS TRACE_IRQS_IRETQ /* we're about to change IF */ -@@ -353,14 +774,14 @@ syscall_return_via_sysret: +@@ -322,7 +738,7 @@ syscall_return_via_sysret: opportunistic_sysret_failed: SWAPGS jmp restore_c_regs_and_iret -END(entry_SYSCALL_64) +ENDPROC(entry_SYSCALL_64) + ENTRY(stub_ptregs_64) + /* +@@ -349,13 +765,13 @@ ENTRY(stub_ptregs_64) + 1: + /* Called from C */ + jmp *%rax /* called from C */ +-END(stub_ptregs_64) ++ENDPROC(stub_ptregs_64) + + .macro ptregs_stub func + ENTRY(ptregs_\func) + leaq \func(%rip), %rax + jmp stub_ptregs_64 +-END(ptregs_\func) ++ENDPROC(ptregs_\func) + .endm - .macro FORK_LIKE func - ENTRY(stub_\func) - SAVE_EXTRA_REGS 8 - jmp sys_\func --END(stub_\func) -+ENDPROC(stub_\func) - .endm - - FORK_LIKE clone -@@ -380,7 +801,7 @@ return_from_execve: - ZERO_EXTRA_REGS - movq %rax, RAX(%rsp) - jmp int_ret_from_sys_call --END(stub_execve) -+ENDPROC(stub_execve) - /* - * Remaining execve stubs are only 7 bytes long. - * ENTRY() often aligns to 16 bytes, which in this case has no benefits. -@@ -389,19 +810,19 @@ END(stub_execve) - GLOBAL(stub_execveat) - call sys_execveat - jmp return_from_execve --END(stub_execveat) -+ENDPROC(stub_execveat) - - #if defined(CONFIG_X86_X32_ABI) - .align 8 - GLOBAL(stub_x32_execve) - call compat_sys_execve - jmp return_from_execve --END(stub_x32_execve) -+ENDPROC(stub_x32_execve) - .align 8 - GLOBAL(stub_x32_execveat) - call compat_sys_execveat - jmp return_from_execve --END(stub_x32_execveat) -+ENDPROC(stub_x32_execveat) - #endif - - /* -@@ -423,14 +844,14 @@ return_from_stub: - RESTORE_EXTRA_REGS - movq %rax, RAX(%rsp) - jmp int_ret_from_sys_call --END(stub_rt_sigreturn) -+ENDPROC(stub_rt_sigreturn) - - #ifdef CONFIG_X86_X32_ABI - ENTRY(stub_x32_rt_sigreturn) - SAVE_EXTRA_REGS 8 - call sys32_x32_rt_sigreturn - jmp return_from_stub --END(stub_x32_rt_sigreturn) -+ENDPROC(stub_x32_rt_sigreturn) - #endif - - /* -@@ -469,7 +890,7 @@ ENTRY(ret_from_fork) - movl $0, RAX(%rsp) - RESTORE_EXTRA_REGS - jmp int_ret_from_sys_call + /* Instantiate ptregs_stub for each ptregs-using syscall */ +@@ -400,10 +816,12 @@ ENTRY(ret_from_fork) + 1: + movq %rsp, %rdi + call syscall_return_slowpath /* returns with IRQs disabled */ ++ pax_exit_kernel_user ++ pax_erase_kstack + TRACE_IRQS_ON /* user mode is traced as IRQS on */ + SWAPGS + jmp restore_regs_and_iret -END(ret_from_fork) +ENDPROC(ret_from_fork) /* * Build the entry stubs with some assembler magic. -@@ -484,7 +905,7 @@ ENTRY(irq_entries_start) +@@ -418,7 +836,7 @@ ENTRY(irq_entries_start) jmp common_interrupt .align 8 .endr @@ -17242,7 +17284,7 @@ index 9d34d3c..2398c40 100644 /* * Interrupt entry/exit. -@@ -510,6 +931,12 @@ END(irq_entries_start) +@@ -444,6 +862,12 @@ END(irq_entries_start) */ SWAPGS @@ -17255,7 +17297,7 @@ index 9d34d3c..2398c40 100644 /* * We need to tell lockdep that IRQs are off. We can't do this until * we fix gsbase, and we should do it before enter_from_user_mode -@@ -522,7 +949,9 @@ END(irq_entries_start) +@@ -456,7 +880,9 @@ END(irq_entries_start) CALL_enter_from_user_mode @@ -17266,7 +17308,7 @@ index 9d34d3c..2398c40 100644 /* * Save previous stack pointer, optionally switch to interrupt stack. * irq_count is used to check if a CPU is already on an interrupt stack -@@ -534,6 +963,7 @@ END(irq_entries_start) +@@ -468,6 +894,7 @@ END(irq_entries_start) incl PER_CPU_VAR(irq_count) cmovzq PER_CPU_VAR(irq_stack_ptr), %rsp pushq %rdi @@ -17274,7 +17316,7 @@ index 9d34d3c..2398c40 100644 /* We entered an interrupt context - irqs are off: */ TRACE_IRQS_OFF -@@ -565,6 +995,8 @@ ret_from_intr: +@@ -499,6 +926,8 @@ ret_from_intr: GLOBAL(retint_user) mov %rsp,%rdi call prepare_exit_to_usermode @@ -17283,7 +17325,7 @@ index 9d34d3c..2398c40 100644 TRACE_IRQS_IRETQ SWAPGS jmp restore_regs_and_iret -@@ -582,6 +1014,21 @@ retint_kernel: +@@ -516,6 +945,21 @@ retint_kernel: jmp 0b 1: #endif @@ -17305,7 +17347,7 @@ index 9d34d3c..2398c40 100644 /* * The iretq could re-enable interrupts: */ -@@ -625,15 +1072,15 @@ native_irq_return_ldt: +@@ -559,15 +1003,15 @@ native_irq_return_ldt: SWAPGS movq PER_CPU_VAR(espfix_waddr), %rdi movq %rax, (0*8)(%rdi) /* RAX */ @@ -17326,7 +17368,7 @@ index 9d34d3c..2398c40 100644 movq %rax, (4*8)(%rdi) andl $0xffff0000, %eax popq %rdi -@@ -643,7 +1090,7 @@ native_irq_return_ldt: +@@ -577,7 +1021,7 @@ native_irq_return_ldt: popq %rax jmp native_irq_return_iret #endif @@ -17335,7 +17377,7 @@ index 9d34d3c..2398c40 100644 /* * APIC interrupts. -@@ -655,7 +1102,7 @@ ENTRY(\sym) +@@ -589,7 +1033,7 @@ ENTRY(\sym) .Lcommon_\sym: interrupt \do_sym jmp ret_from_intr @@ -17344,7 +17386,7 @@ index 9d34d3c..2398c40 100644 .endm #ifdef CONFIG_TRACING -@@ -720,7 +1167,7 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt +@@ -654,7 +1098,7 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt /* * Exception entry points. */ @@ -17353,20 +17395,20 @@ index 9d34d3c..2398c40 100644 .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1 ENTRY(\sym) -@@ -767,6 +1214,12 @@ ENTRY(\sym) +@@ -701,6 +1145,12 @@ ENTRY(\sym) .endif .if \shift_ist != -1 +#ifdef CONFIG_SMP -+ imul $TSS_size, PER_CPU_VAR(cpu_number), %r13d -+ lea cpu_tss(%r13), %r13 ++ imul $TSS_size, PER_CPU_VAR(cpu_number), %r13d ++ leaq cpu_tss(%r13), %r13 +#else -+ lea cpu_tss(%rip), %r13 ++ leaq cpu_tss(%rip), %r13 +#endif subq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist) .endif -@@ -810,7 +1263,7 @@ ENTRY(\sym) +@@ -744,7 +1194,7 @@ ENTRY(\sym) jmp error_exit /* %ebx: no swapgs flag */ .endif @@ -17375,7 +17417,7 @@ index 9d34d3c..2398c40 100644 .endm #ifdef CONFIG_TRACING -@@ -852,8 +1305,9 @@ gs_change: +@@ -786,8 +1236,9 @@ gs_change: 2: mfence /* workaround */ SWAPGS popfq @@ -17386,7 +17428,7 @@ index 9d34d3c..2398c40 100644 _ASM_EXTABLE(gs_change, bad_gs) .section .fixup, "ax" -@@ -875,8 +1329,9 @@ ENTRY(do_softirq_own_stack) +@@ -809,8 +1260,9 @@ ENTRY(do_softirq_own_stack) call __do_softirq leaveq decl PER_CPU_VAR(irq_count) @@ -17397,7 +17439,7 @@ index 9d34d3c..2398c40 100644 #ifdef CONFIG_XEN idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0 -@@ -912,7 +1367,7 @@ ENTRY(xen_do_hypervisor_callback) /* do_hypervisor_callback(struct *pt_regs) */ +@@ -846,7 +1298,7 @@ ENTRY(xen_do_hypervisor_callback) /* do_hypervisor_callback(struct *pt_regs) */ call xen_maybe_preempt_hcall #endif jmp error_exit @@ -17406,7 +17448,7 @@ index 9d34d3c..2398c40 100644 /* * Hypervisor uses this for application faults while it executes. -@@ -957,7 +1412,7 @@ ENTRY(xen_failsafe_callback) +@@ -891,7 +1343,7 @@ ENTRY(xen_failsafe_callback) SAVE_C_REGS SAVE_EXTRA_REGS jmp error_exit @@ -17415,7 +17457,7 @@ index 9d34d3c..2398c40 100644 apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \ xen_hvm_callback_vector xen_evtchn_do_upcall -@@ -969,7 +1424,7 @@ apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \ +@@ -903,7 +1355,7 @@ apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \ hyperv_callback_vector hyperv_vector_handler #endif /* CONFIG_HYPERV */ @@ -17424,7 +17466,7 @@ index 9d34d3c..2398c40 100644 idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK idtentry stack_segment do_stack_segment has_error_code=1 -@@ -1006,8 +1461,34 @@ ENTRY(paranoid_entry) +@@ -940,8 +1392,34 @@ ENTRY(paranoid_entry) js 1f /* negative -> in kernel */ SWAPGS xorl %ebx, %ebx @@ -17461,7 +17503,7 @@ index 9d34d3c..2398c40 100644 /* * "Paranoid" exit path from exception stack. This is invoked -@@ -1024,19 +1505,26 @@ END(paranoid_entry) +@@ -958,19 +1436,26 @@ END(paranoid_entry) ENTRY(paranoid_exit) DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF_DEBUG @@ -17490,7 +17532,7 @@ index 9d34d3c..2398c40 100644 /* * Save all registers in pt_regs, and switch gs if needed. -@@ -1050,13 +1538,18 @@ ENTRY(error_entry) +@@ -984,13 +1469,18 @@ ENTRY(error_entry) testb $3, CS+8(%rsp) jz .Lerror_kernelspace @@ -17510,7 +17552,7 @@ index 9d34d3c..2398c40 100644 .Lerror_entry_from_usermode_after_swapgs: /* * We need to tell lockdep that IRQs are off. We can't do this until -@@ -1065,10 +1558,12 @@ ENTRY(error_entry) +@@ -999,10 +1489,12 @@ ENTRY(error_entry) */ TRACE_IRQS_OFF CALL_enter_from_user_mode @@ -17523,7 +17565,7 @@ index 9d34d3c..2398c40 100644 ret /* -@@ -1086,14 +1581,16 @@ ENTRY(error_entry) +@@ -1020,14 +1512,16 @@ ENTRY(error_entry) cmpq %rax, RIP+8(%rsp) je .Lbstep_iret cmpq $gs_change, RIP+8(%rsp) @@ -17542,7 +17584,7 @@ index 9d34d3c..2398c40 100644 .Lbstep_iret: /* Fix truncated RIP */ -@@ -1107,6 +1604,12 @@ ENTRY(error_entry) +@@ -1041,6 +1535,12 @@ ENTRY(error_entry) */ SWAPGS @@ -17555,7 +17597,7 @@ index 9d34d3c..2398c40 100644 /* * Pretend that the exception came from user mode: set up pt_regs * as if we faulted immediately after IRET and clear EBX so that -@@ -1117,11 +1620,11 @@ ENTRY(error_entry) +@@ -1051,11 +1551,11 @@ ENTRY(error_entry) mov %rax, %rsp decl %ebx jmp .Lerror_entry_from_usermode_after_swapgs @@ -17569,7 +17611,7 @@ index 9d34d3c..2398c40 100644 * 1: already in kernel mode, don't need SWAPGS * 0: user gsbase is loaded, we need SWAPGS and standard preparation for return to usermode */ -@@ -1129,10 +1632,10 @@ ENTRY(error_exit) +@@ -1063,10 +1563,10 @@ ENTRY(error_exit) movl %ebx, %eax DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF @@ -17582,7 +17624,7 @@ index 9d34d3c..2398c40 100644 /* Runs on exception stack */ ENTRY(nmi) -@@ -1186,6 +1689,8 @@ ENTRY(nmi) +@@ -1120,6 +1620,8 @@ ENTRY(nmi) * other IST entries. */ @@ -17591,7 +17633,7 @@ index 9d34d3c..2398c40 100644 /* Use %rdx as our temp variable throughout */ pushq %rdx -@@ -1229,6 +1734,12 @@ ENTRY(nmi) +@@ -1163,6 +1665,12 @@ ENTRY(nmi) pushq %r14 /* pt_regs->r14 */ pushq %r15 /* pt_regs->r15 */ @@ -17604,7 +17646,7 @@ index 9d34d3c..2398c40 100644 /* * At this point we no longer need to worry about stack damage * due to nesting -- we're on the normal thread stack and we're -@@ -1239,12 +1750,19 @@ ENTRY(nmi) +@@ -1173,12 +1681,19 @@ ENTRY(nmi) movq $-1, %rsi call do_nmi @@ -17624,7 +17666,7 @@ index 9d34d3c..2398c40 100644 jmp restore_c_regs_and_iret .Lnmi_from_kernel: -@@ -1366,6 +1884,7 @@ nested_nmi_out: +@@ -1300,6 +1815,7 @@ nested_nmi_out: popq %rdx /* We are returning to kernel mode, so this cannot result in a fault. */ @@ -17632,7 +17674,7 @@ index 9d34d3c..2398c40 100644 INTERRUPT_RETURN first_nmi: -@@ -1394,7 +1913,7 @@ first_nmi: +@@ -1328,7 +1844,7 @@ first_nmi: pushq %rsp /* RSP (minus 8 because of the previous push) */ addq $8, (%rsp) /* Fix up RSP */ pushfq /* RFLAGS */ @@ -17641,7 +17683,7 @@ index 9d34d3c..2398c40 100644 pushq $1f /* RIP */ INTERRUPT_RETURN /* continues at repeat_nmi below */ 1: -@@ -1439,20 +1958,22 @@ end_repeat_nmi: +@@ -1373,20 +1889,22 @@ end_repeat_nmi: ALLOC_PT_GPREGS_ON_STACK /* @@ -17667,7 +17709,7 @@ index 9d34d3c..2398c40 100644 jnz nmi_restore nmi_swapgs: SWAPGS_UNSAFE_STACK -@@ -1463,6 +1984,8 @@ nmi_restore: +@@ -1397,6 +1915,8 @@ nmi_restore: /* Point RSP at the "iret" frame. */ REMOVE_PT_GPREGS_FROM_STACK 6*8 @@ -17676,7 +17718,7 @@ index 9d34d3c..2398c40 100644 /* * Clear "NMI executing". Set DF first so that we can easily * distinguish the remaining code between here and IRET from -@@ -1480,9 +2003,9 @@ nmi_restore: +@@ -1414,9 +1934,9 @@ nmi_restore: * mode, so this cannot result in a fault. */ INTERRUPT_RETURN @@ -17689,7 +17731,7 @@ index 9d34d3c..2398c40 100644 -END(ignore_sysret) +ENDPROC(ignore_sysret) diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S -index 3c990ee..d49c8f4 100644 +index 847f2f0..5f601b1 100644 --- a/arch/x86/entry/entry_64_compat.S +++ b/arch/x86/entry/entry_64_compat.S @@ -13,11 +13,39 @@ @@ -17730,11 +17772,11 @@ index 3c990ee..d49c8f4 100644 + .endm + /* - * 32-bit SYSENTER instruction entry. + * 32-bit SYSENTER entry. * -@@ -69,26 +97,36 @@ ENTRY(entry_SYSENTER_compat) - ASM_CLAC /* Clear AC after saving FLAGS */ - +@@ -72,26 +100,36 @@ ENTRY(entry_SYSENTER_compat) + pushfq /* pt_regs->flags (except IF = 0) */ + orl $X86_EFLAGS_IF, (%rsp) /* Fix saved flags */ pushq $__USER32_CS /* pt_regs->cs */ - xorq %r8,%r8 - pushq %r8 /* pt_regs->ip = 0 (placeholder) */ @@ -17777,9 +17819,9 @@ index 3c990ee..d49c8f4 100644 +#endif + /* - * Sysenter doesn't filter flags, so we need to clear NT + * SYSENTER doesn't filter flags, so we need to clear NT and AC * ourselves. To save a few cycles, we can check whether -@@ -174,17 +212,27 @@ ENTRY(entry_SYSCALL_compat) +@@ -205,17 +243,27 @@ ENTRY(entry_SYSCALL_compat) pushq %rdx /* pt_regs->dx */ pushq %rbp /* pt_regs->cx (stashed in bp) */ pushq $-ENOSYS /* pt_regs->ax */ @@ -17816,7 +17858,7 @@ index 3c990ee..d49c8f4 100644 /* * User mode is traced as though IRQs are on, and SYSENTER -@@ -200,11 +248,18 @@ ENTRY(entry_SYSCALL_compat) +@@ -231,11 +279,18 @@ ENTRY(entry_SYSCALL_compat) /* Opportunistic SYSRET */ sysret32_from_system_call: @@ -17835,7 +17877,7 @@ index 3c990ee..d49c8f4 100644 addq $RAX, %rsp /* Skip r8-r15 */ popq %rax /* pt_regs->rax */ popq %rdx /* Skip pt_regs->cx */ -@@ -233,7 +288,7 @@ sysret32_from_system_call: +@@ -264,7 +319,7 @@ sysret32_from_system_call: movq RSP-ORIG_RAX(%rsp), %rsp swapgs sysretl @@ -17843,8 +17885,8 @@ index 3c990ee..d49c8f4 100644 +ENDPROC(entry_SYSCALL_compat) /* - * Emulated IA32 system calls via int 0x80. -@@ -280,11 +335,11 @@ ENTRY(entry_INT80_compat) + * 32-bit legacy system call entry. +@@ -316,11 +371,11 @@ ENTRY(entry_INT80_compat) pushq %rdx /* pt_regs->dx */ pushq %rcx /* pt_regs->cx */ pushq $-ENOSYS /* pt_regs->ax */ @@ -17861,7 +17903,7 @@ index 3c990ee..d49c8f4 100644 pushq %rbx /* pt_regs->rbx */ pushq %rbp /* pt_regs->rbp */ pushq %r12 /* pt_regs->r12 */ -@@ -293,6 +348,12 @@ ENTRY(entry_INT80_compat) +@@ -329,6 +384,12 @@ ENTRY(entry_INT80_compat) pushq %r15 /* pt_regs->r15 */ cld @@ -17874,7 +17916,7 @@ index 3c990ee..d49c8f4 100644 /* * User mode is traced as though IRQs are on, and the interrupt * gate turned them off. -@@ -304,10 +365,12 @@ ENTRY(entry_INT80_compat) +@@ -340,10 +401,12 @@ ENTRY(entry_INT80_compat) .Lsyscall_32_done: /* Go back to user mode. */ @@ -17889,30 +17931,30 @@ index 3c990ee..d49c8f4 100644 ALIGN GLOBAL(stub32_clone) diff --git a/arch/x86/entry/thunk_64.S b/arch/x86/entry/thunk_64.S -index efb2b93..8a9cb8e 100644 +index 98df1fa..b2ef8bd 100644 --- a/arch/x86/entry/thunk_64.S +++ b/arch/x86/entry/thunk_64.S -@@ -8,6 +8,7 @@ - #include <linux/linkage.h> +@@ -9,6 +9,7 @@ #include "calling.h" #include <asm/asm.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> /* rdi: arg1 ... normal C conventions. rax is saved/restored. */ .macro THUNK name, func, put_ret_addr_in_rdi=0 -@@ -62,6 +63,7 @@ restore: - popq %rdx +@@ -66,6 +67,7 @@ restore: popq %rsi popq %rdi + FRAME_END + pax_force_retaddr ret _ASM_NOKPROBE(restore) #endif diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile -index c854541..1786538 100644 +index 6874da5..acbad90 100644 --- a/arch/x86/entry/vdso/Makefile +++ b/arch/x86/entry/vdso/Makefile -@@ -70,7 +70,7 @@ CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \ +@@ -75,7 +75,7 @@ CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \ -fno-omit-frame-pointer -foptimize-sibling-calls \ -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO @@ -17921,7 +17963,7 @@ index c854541..1786538 100644 # # vDSO code runs in userspace and -pg doesn't help with profiling anyway. -@@ -140,6 +140,7 @@ KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) +@@ -145,6 +145,7 @@ KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) KBUILD_CFLAGS_32 := $(filter-out -mcmodel=kernel,$(KBUILD_CFLAGS_32)) KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32)) KBUILD_CFLAGS_32 := $(filter-out -mfentry,$(KBUILD_CFLAGS_32)) @@ -17929,7 +17971,7 @@ index c854541..1786538 100644 KBUILD_CFLAGS_32 += -m32 -msoft-float -mregparm=0 -fpic KBUILD_CFLAGS_32 += $(call cc-option, -fno-stack-protector) KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls) -@@ -163,7 +164,7 @@ quiet_cmd_vdso = VDSO $@ +@@ -168,7 +169,7 @@ quiet_cmd_vdso = VDSO $@ -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \ sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' @@ -17939,7 +17981,7 @@ index c854541..1786538 100644 GCOV_PROFILE := n diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c -index 1a50e09..3e25e7a 100644 +index 03c3eb7..23f58a5 100644 --- a/arch/x86/entry/vdso/vclock_gettime.c +++ b/arch/x86/entry/vdso/vclock_gettime.c @@ -330,5 +330,5 @@ notrace time_t __vdso_time(time_t *t) @@ -17950,7 +17992,7 @@ index 1a50e09..3e25e7a 100644 +time_t time(time_t *t) __attribute__((weak, alias("__vdso_time"))); diff --git a/arch/x86/entry/vdso/vdso2c.h b/arch/x86/entry/vdso/vdso2c.h -index 0224987..0359810 100644 +index 63a03bb..ee6bd34 100644 --- a/arch/x86/entry/vdso/vdso2c.h +++ b/arch/x86/entry/vdso/vdso2c.h @@ -12,7 +12,7 @@ static void BITSFUNC(go)(void *raw_addr, size_t raw_len, @@ -17971,32 +18013,14 @@ index 0224987..0359810 100644 ELF(Sym) *sym = raw_addr + GET_LE(&symtab_hdr->sh_offset) + GET_LE(&symtab_hdr->sh_entsize) * i; const char *name = raw_addr + GET_LE(&strtab_hdr->sh_offset) + -@@ -140,7 +140,7 @@ static void BITSFUNC(go)(void *raw_addr, size_t raw_len, - fprintf(outfile, "#include <asm/vdso.h>\n"); - fprintf(outfile, "\n"); - fprintf(outfile, -- "static unsigned char raw_data[%lu] __page_aligned_data = {", -+ "static unsigned char raw_data[%lu] __page_aligned_rodata = {", - mapping_size); - for (j = 0; j < stripped_len; j++) { - if (j % 10 == 0) -@@ -150,7 +150,7 @@ static void BITSFUNC(go)(void *raw_addr, size_t raw_len, - } - fprintf(outfile, "\n};\n\n"); - -- fprintf(outfile, "static struct page *pages[%lu];\n\n", -+ fprintf(outfile, "static struct page *pages[%lu] __read_only;\n\n", - mapping_size / 4096); - - fprintf(outfile, "const struct vdso_image %s = {\n", name); diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c -index b8f69e2..b142158 100644 +index 10f7045..ebe6eb7 100644 --- a/arch/x86/entry/vdso/vma.c +++ b/arch/x86/entry/vdso/vma.c -@@ -20,10 +20,7 @@ - #include <asm/page.h> +@@ -21,10 +21,7 @@ #include <asm/hpet.h> #include <asm/desc.h> + #include <asm/cpufeature.h> - -#if defined(CONFIG_X86_64) -unsigned int __read_mostly vdso64_enabled = 1; @@ -18005,9 +18029,18 @@ index b8f69e2..b142158 100644 void __init init_vdso_image(const struct vdso_image *image) { -@@ -103,6 +100,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) +@@ -90,7 +87,7 @@ static int vdso_fault(const struct vm_special_mapping *sm, + { + const struct vdso_image *image = vma->vm_mm->context.vdso_image; + +- if (!image || (vmf->pgoff << PAGE_SHIFT) >= image->size) ++ if (!image || vmf->pgoff >= (image->size >> PAGE_SHIFT)) + return VM_FAULT_SIGBUS; + + vmf->page = virt_to_page(image->data + (vmf->pgoff << PAGE_SHIFT)); +@@ -167,6 +164,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) + .fault = vvar_fault, }; - struct pvclock_vsyscall_time_info *pvti; +#ifdef CONFIG_PAX_RANDMMAP + if (mm->pax_flags & MF_PAX_RANDMMAP) @@ -18017,7 +18050,7 @@ index b8f69e2..b142158 100644 if (calculate_addr) { addr = vdso_addr(current->mm->start_stack, image->size - image->sym_vvar_start); -@@ -113,14 +115,14 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) +@@ -177,15 +179,15 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) down_write(&mm->mmap_sem); addr = get_unmapped_area(NULL, addr, @@ -18030,18 +18063,21 @@ index b8f69e2..b142158 100644 text_start = addr - image->sym_vvar_start; - current->mm->context.vdso = (void __user *)text_start; +- current->mm->context.vdso_image = image; + mm->context.vdso = text_start; ++ mm->context.vdso_image = image; /* * MAYWRITE to allow gdb to COW and set breakpoints -@@ -178,14 +180,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) - __pa(pvti) >> PAGE_SHIFT, - PAGE_SIZE, - PAGE_READONLY); -- -- if (ret) -- goto up_fail; - } +@@ -209,14 +211,12 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) + VM_PFNMAP, + &vvar_mapping); + +- if (IS_ERR(vma)) { ++ if (IS_ERR(vma)) + ret = PTR_ERR(vma); +- goto up_fail; +- } up_fail: if (ret) @@ -18050,7 +18086,7 @@ index b8f69e2..b142158 100644 up_write(&mm->mmap_sem); return ret; -@@ -204,9 +203,6 @@ static int load_vdso32(void) +@@ -235,9 +235,6 @@ static int load_vdso32(void) #ifdef CONFIG_X86_64 int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) { @@ -18060,7 +18096,7 @@ index b8f69e2..b142158 100644 return map_vdso(&vdso_image_64, true); } -@@ -215,12 +211,8 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm, +@@ -246,12 +243,8 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) { #ifdef CONFIG_X86_X32_ABI @@ -18074,7 +18110,7 @@ index b8f69e2..b142158 100644 #endif #ifdef CONFIG_IA32_EMULATION return load_vdso32(); -@@ -237,15 +229,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) +@@ -268,15 +261,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) #endif #ifdef CONFIG_X86_64 @@ -18162,6 +18198,544 @@ index c9596a9..805b68d 100644 .globl __vsyscall_page .balign PAGE_SIZE, 0xcc .type __vsyscall_page, @object +diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c +index 6011a57..311bea0 100644 +--- a/arch/x86/events/amd/iommu.c ++++ b/arch/x86/events/amd/iommu.c +@@ -80,12 +80,12 @@ static struct attribute_group amd_iommu_format_group = { + * sysfs events attributes + *---------------------------------------------*/ + struct amd_iommu_event_desc { +- struct kobj_attribute attr; ++ struct device_attribute attr; + const char *event; + }; + +-static ssize_t _iommu_event_show(struct kobject *kobj, +- struct kobj_attribute *attr, char *buf) ++static ssize_t _iommu_event_show(struct device *dev, ++ struct device_attribute *attr, char *buf) + { + struct amd_iommu_event_desc *event = + container_of(attr, struct amd_iommu_event_desc, attr); +@@ -407,7 +407,7 @@ static void perf_iommu_del(struct perf_event *event, int flags) + static __init int _init_events_attrs(struct perf_amd_iommu *perf_iommu) + { + struct attribute **attrs; +- struct attribute_group *attr_group; ++ attribute_group_no_const *attr_group; + int i = 0, j; + + while (amd_iommu_v2_event_descs[i].attr.attr.name) +diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c +index 041e442..3ed82386 100644 +--- a/arch/x86/events/core.c ++++ b/arch/x86/events/core.c +@@ -1535,7 +1535,7 @@ static void __init pmu_check_apic(void) + + } + +-static struct attribute_group x86_pmu_format_group = { ++static attribute_group_no_const x86_pmu_format_group = { + .name = "format", + .attrs = NULL, + }; +@@ -1643,7 +1643,7 @@ static struct attribute *events_attr[] = { + NULL, + }; + +-static struct attribute_group x86_pmu_events_group = { ++static attribute_group_no_const x86_pmu_events_group = { + .name = "events", + .attrs = events_attr, + }; +@@ -2251,7 +2251,7 @@ static unsigned long get_segment_base(unsigned int segment) + if (idx > GDT_ENTRIES) + return 0; + +- desc = raw_cpu_ptr(gdt_page.gdt) + idx; ++ desc = get_cpu_gdt_table(smp_processor_id()) + idx; + } + + return get_desc_base(desc); +@@ -2356,7 +2356,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) + break; + + perf_callchain_store(entry, frame.return_address); +- fp = (void __user *)frame.next_frame; ++ fp = (void __force_user *)frame.next_frame; + } + pagefault_enable(); + } +diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c +index b99dc92..407392a 100644 +--- a/arch/x86/events/intel/bts.c ++++ b/arch/x86/events/intel/bts.c +@@ -250,7 +250,7 @@ static void bts_event_start(struct perf_event *event, int flags) + __bts_event_start(event); + + /* PMI handler: this counter is running and likely generating PMIs */ +- ACCESS_ONCE(bts->started) = 1; ++ ACCESS_ONCE_RW(bts->started) = 1; + } + + static void __bts_event_stop(struct perf_event *event) +@@ -264,7 +264,7 @@ static void __bts_event_stop(struct perf_event *event) + if (event->hw.state & PERF_HES_STOPPED) + return; + +- ACCESS_ONCE(event->hw.state) |= PERF_HES_STOPPED; ++ ACCESS_ONCE_RW(event->hw.state) |= PERF_HES_STOPPED; + } + + static void bts_event_stop(struct perf_event *event, int flags) +@@ -272,7 +272,7 @@ static void bts_event_stop(struct perf_event *event, int flags) + struct bts_ctx *bts = this_cpu_ptr(&bts_ctx); + + /* PMI handler: don't restart this counter */ +- ACCESS_ONCE(bts->started) = 0; ++ ACCESS_ONCE_RW(bts->started) = 0; + + __bts_event_stop(event); + +diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c +index 5210eaa..b6846dc 100644 +--- a/arch/x86/events/intel/core.c ++++ b/arch/x86/events/intel/core.c +@@ -2185,6 +2185,8 @@ __intel_get_event_constraints(struct cpu_hw_events *cpuc, int idx, + } + + static void ++intel_start_scheduling(struct cpu_hw_events *cpuc) __acquires(&cpuc->excl_cntrs->lock); ++static void + intel_start_scheduling(struct cpu_hw_events *cpuc) + { + struct intel_excl_cntrs *excl_cntrs = cpuc->excl_cntrs; +@@ -2194,14 +2196,18 @@ intel_start_scheduling(struct cpu_hw_events *cpuc) + /* + * nothing needed if in group validation mode + */ +- if (cpuc->is_fake || !is_ht_workaround_enabled()) ++ if (cpuc->is_fake || !is_ht_workaround_enabled()) { ++ __acquire(&excl_cntrs->lock); + return; ++ } + + /* + * no exclusion needed + */ +- if (WARN_ON_ONCE(!excl_cntrs)) ++ if (WARN_ON_ONCE(!excl_cntrs)) { ++ __acquire(&excl_cntrs->lock); + return; ++ } + + xl = &excl_cntrs->states[tid]; + +@@ -2241,6 +2247,8 @@ static void intel_commit_scheduling(struct cpu_hw_events *cpuc, int idx, int cnt + } + + static void ++intel_stop_scheduling(struct cpu_hw_events *cpuc) __releases(&cpuc->excl_cntrs->lock); ++static void + intel_stop_scheduling(struct cpu_hw_events *cpuc) + { + struct intel_excl_cntrs *excl_cntrs = cpuc->excl_cntrs; +@@ -2250,13 +2258,18 @@ intel_stop_scheduling(struct cpu_hw_events *cpuc) + /* + * nothing needed if in group validation mode + */ +- if (cpuc->is_fake || !is_ht_workaround_enabled()) ++ if (cpuc->is_fake || !is_ht_workaround_enabled()) { ++ __release(&excl_cntrs->lock); + return; ++ } ++ + /* + * no exclusion needed + */ +- if (WARN_ON_ONCE(!excl_cntrs)) ++ if (WARN_ON_ONCE(!excl_cntrs)) { ++ __release(&excl_cntrs->lock); + return; ++ } + + xl = &excl_cntrs->states[tid]; + +@@ -2439,19 +2452,22 @@ static void intel_put_excl_constraints(struct cpu_hw_events *cpuc, + * unused now. + */ + if (hwc->idx >= 0) { ++ bool sched_started; ++ + xl = &excl_cntrs->states[tid]; ++ sched_started = xl->sched_started; + + /* + * put_constraint may be called from x86_schedule_events() + * which already has the lock held so here make locking + * conditional. + */ +- if (!xl->sched_started) ++ if (!sched_started) + raw_spin_lock(&excl_cntrs->lock); + + xl->state[hwc->idx] = INTEL_EXCL_UNUSED; + +- if (!xl->sched_started) ++ if (!sched_started) + raw_spin_unlock(&excl_cntrs->lock); + } + } +@@ -3360,10 +3376,10 @@ __init int intel_pmu_init(void) + x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3); + + if (boot_cpu_has(X86_FEATURE_PDCM)) { +- u64 capabilities; ++ u64 capabilities = x86_pmu.intel_cap.capabilities; + +- rdmsrl(MSR_IA32_PERF_CAPABILITIES, capabilities); +- x86_pmu.intel_cap.capabilities = capabilities; ++ if (rdmsrl_safe(MSR_IA32_PERF_CAPABILITIES, &x86_pmu.intel_cap.capabilities)) ++ x86_pmu.intel_cap.capabilities = capabilities; + } + + intel_ds_init(); +diff --git a/arch/x86/events/intel/cqm.c b/arch/x86/events/intel/cqm.c +index 7b5fd81..3ca58b5 100644 +--- a/arch/x86/events/intel/cqm.c ++++ b/arch/x86/events/intel/cqm.c +@@ -1479,7 +1479,7 @@ static struct attribute *intel_cmt_mbm_events_attr[] = { + NULL, + }; + +-static struct attribute_group intel_cqm_events_group = { ++static attribute_group_no_const intel_cqm_events_group __read_only = { + .name = "events", + .attrs = NULL, + }; +@@ -1737,7 +1737,9 @@ static int __init intel_cqm_init(void) + goto out; + } + +- event_attr_intel_cqm_llc_scale.event_str = str; ++ pax_open_kernel(); ++ const_cast(event_attr_intel_cqm_llc_scale.event_str) = str; ++ pax_close_kernel(); + + ret = intel_cqm_setup_rmid_cache(); + if (ret) +@@ -1753,12 +1755,14 @@ static int __init intel_cqm_init(void) + if (ret && !cqm_enabled) + goto out; + ++ pax_open_kernel(); + if (cqm_enabled && mbm_enabled) +- intel_cqm_events_group.attrs = intel_cmt_mbm_events_attr; ++ const_cast(intel_cqm_events_group.attrs) = intel_cmt_mbm_events_attr; + else if (!cqm_enabled && mbm_enabled) +- intel_cqm_events_group.attrs = intel_mbm_events_attr; ++ const_cast(intel_cqm_events_group.attrs) = intel_mbm_events_attr; + else if (cqm_enabled && !mbm_enabled) +- intel_cqm_events_group.attrs = intel_cqm_events_attr; ++ const_cast(intel_cqm_events_group.attrs) = intel_cqm_events_attr; ++ pax_close_kernel(); + + ret = perf_pmu_register(&intel_cqm_pmu, "intel_cqm", -1); + if (ret) { +diff --git a/arch/x86/events/intel/cstate.c b/arch/x86/events/intel/cstate.c +index 7946c42..75c730b 100644 +--- a/arch/x86/events/intel/cstate.c ++++ b/arch/x86/events/intel/cstate.c +@@ -92,14 +92,14 @@ + #include "../perf_event.h" + + #define DEFINE_CSTATE_FORMAT_ATTR(_var, _name, _format) \ +-static ssize_t __cstate_##_var##_show(struct kobject *kobj, \ +- struct kobj_attribute *attr, \ ++static ssize_t __cstate_##_var##_show(struct device *dev, \ ++ struct device_attribute *attr, \ + char *page) \ + { \ + BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ + return sprintf(page, _format "\n"); \ + } \ +-static struct kobj_attribute format_attr_##_var = \ ++static struct device_attribute format_attr_##_var = \ + __ATTR(_name, 0444, __cstate_##_var##_show, NULL) + + static ssize_t cstate_get_attr_cpumask(struct device *dev, +diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c +index 8584b90..82c274a 100644 +--- a/arch/x86/events/intel/ds.c ++++ b/arch/x86/events/intel/ds.c +@@ -601,7 +601,7 @@ unlock: + + static inline void intel_pmu_drain_pebs_buffer(void) + { +- struct pt_regs regs; ++ struct pt_regs regs = {}; + + x86_pmu.drain_pebs(®s); + } +@@ -903,7 +903,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs) + struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events); + unsigned long from = cpuc->lbr_entries[0].from; + unsigned long old_to, to = cpuc->lbr_entries[0].to; +- unsigned long ip = regs->ip; ++ unsigned long ip = ktva_ktla(regs->ip); + int is_64bit = 0; + void *kaddr; + int size; +@@ -955,6 +955,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs) + } else { + kaddr = (void *)to; + } ++ kaddr = (void *)ktva_ktla((unsigned long)kaddr); + + do { + struct insn insn; +@@ -1103,7 +1104,7 @@ static void setup_pebs_sample_data(struct perf_event *event, + } + + if (event->attr.precise_ip > 1 && x86_pmu.intel_cap.pebs_format >= 2) { +- regs->ip = pebs->real_ip; ++ set_linear_ip(regs, pebs->real_ip); + regs->flags |= PERF_EFLAGS_EXACT; + } else if (event->attr.precise_ip > 1 && intel_pmu_pebs_fixup_ip(regs)) + regs->flags |= PERF_EFLAGS_EXACT; +diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c +index 1ca5d1e..3835cc0 100644 +--- a/arch/x86/events/intel/lbr.c ++++ b/arch/x86/events/intel/lbr.c +@@ -706,7 +706,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort) + * Ensure we don't blindy read any address by validating it is + * a known text address. + */ +- if (kernel_text_address(from)) { ++ if (kernel_text_address(ktva_ktla(from))) { + addr = (void *)from; + /* + * Assume we can get the maximum possible size +@@ -728,7 +728,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort) + #ifdef CONFIG_X86_64 + is64 = kernel_ip((unsigned long)addr) || !test_thread_flag(TIF_IA32); + #endif +- insn_init(&insn, addr, bytes_read, is64); ++ insn_init(&insn, (void *)ktva_ktla((unsigned long)addr), bytes_read, is64); + insn_get_opcode(&insn); + if (!insn.opcode.got) + return X86_BR_ABORT; +diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c +index 7377814..a128ad7 100644 +--- a/arch/x86/events/intel/pt.c ++++ b/arch/x86/events/intel/pt.c +@@ -133,14 +133,12 @@ static const struct attribute_group *pt_attr_groups[] = { + + static int __init pt_pmu_hw_init(void) + { +- struct dev_ext_attribute *de_attrs; +- struct attribute **attrs; +- size_t size; +- u64 reg; +- int ret; ++ static struct dev_ext_attribute de_attrs[ARRAY_SIZE(pt_caps)]; ++ static struct attribute *attrs[ARRAY_SIZE(pt_caps)]; + long i; + + if (boot_cpu_has(X86_FEATURE_VMX)) { ++ u64 reg; + /* + * Intel SDM, 36.5 "Tracing post-VMXON" says that + * "IA32_VMX_MISC[bit 14]" being 1 means PT can trace +@@ -151,8 +149,6 @@ static int __init pt_pmu_hw_init(void) + pt_pmu.vmx = true; + } + +- attrs = NULL; +- + for (i = 0; i < PT_CPUID_LEAVES; i++) { + cpuid_count(20, i, + &pt_pmu.caps[CR_EAX + i*PT_CPUID_REGS_NUM], +@@ -161,39 +157,25 @@ static int __init pt_pmu_hw_init(void) + &pt_pmu.caps[CR_EDX + i*PT_CPUID_REGS_NUM]); + } + +- ret = -ENOMEM; +- size = sizeof(struct attribute *) * (ARRAY_SIZE(pt_caps)+1); +- attrs = kzalloc(size, GFP_KERNEL); +- if (!attrs) +- goto fail; +- +- size = sizeof(struct dev_ext_attribute) * (ARRAY_SIZE(pt_caps)+1); +- de_attrs = kzalloc(size, GFP_KERNEL); +- if (!de_attrs) +- goto fail; +- ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(pt_caps); i++) { +- struct dev_ext_attribute *de_attr = de_attrs + i; ++ struct dev_ext_attribute *de_attr = &de_attrs[i]; + +- de_attr->attr.attr.name = pt_caps[i].name; ++ const_cast(de_attr->attr.attr.name) = pt_caps[i].name; + + sysfs_attr_init(&de_attr->attr.attr); + +- de_attr->attr.attr.mode = S_IRUGO; +- de_attr->attr.show = pt_cap_show; +- de_attr->var = (void *)i; ++ const_cast(de_attr->attr.attr.mode) = S_IRUGO; ++ const_cast(de_attr->attr.show) = pt_cap_show; ++ const_cast(de_attr->var) = (void *)i; + + attrs[i] = &de_attr->attr.attr; + } + +- pt_cap_group.attrs = attrs; ++ const_cast(pt_cap_group.attrs) = attrs; ++ pax_close_kernel(); + + return 0; +- +-fail: +- kfree(attrs); +- +- return ret; + } + + #define RTIT_CTL_CYC_PSB (RTIT_CTL_CYCLEACC | \ +@@ -1051,7 +1033,7 @@ static void pt_event_start(struct perf_event *event, int mode) + return; + } + +- ACCESS_ONCE(pt->handle_nmi) = 1; ++ ACCESS_ONCE_RW(pt->handle_nmi) = 1; + event->hw.state = 0; + + pt_config_buffer(buf->cur->table, buf->cur_idx, +@@ -1067,7 +1049,7 @@ static void pt_event_stop(struct perf_event *event, int mode) + * Protect against the PMI racing with disabling wrmsr, + * see comment in intel_pt_interrupt(). + */ +- ACCESS_ONCE(pt->handle_nmi) = 0; ++ ACCESS_ONCE_RW(pt->handle_nmi) = 0; + + pt_config_stop(event); + +diff --git a/arch/x86/events/intel/rapl.c b/arch/x86/events/intel/rapl.c +index 1705c9d..4204f6f 100644 +--- a/arch/x86/events/intel/rapl.c ++++ b/arch/x86/events/intel/rapl.c +@@ -100,14 +100,14 @@ static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = { + #define RAPL_EVENT_MASK 0xFFULL + + #define DEFINE_RAPL_FORMAT_ATTR(_var, _name, _format) \ +-static ssize_t __rapl_##_var##_show(struct kobject *kobj, \ +- struct kobj_attribute *attr, \ ++static ssize_t __rapl_##_var##_show(struct device *dev, \ ++ struct device_attribute *attr, \ + char *page) \ + { \ + BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ + return sprintf(page, _format "\n"); \ + } \ +-static struct kobj_attribute format_attr_##_var = \ ++static struct device_attribute format_attr_##_var = \ + __ATTR(_name, 0444, __rapl_##_var##_show, NULL) + + #define RAPL_CNTR_WIDTH 32 +@@ -488,7 +488,7 @@ static struct attribute *rapl_events_knl_attr[] = { + NULL, + }; + +-static struct attribute_group rapl_pmu_events_group = { ++static attribute_group_no_const rapl_pmu_events_group __read_only = { + .name = "events", + .attrs = NULL, /* patched at runtime */ + }; +diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c +index f921a1e..8f8920f 100644 +--- a/arch/x86/events/intel/uncore.c ++++ b/arch/x86/events/intel/uncore.c +@@ -84,8 +84,8 @@ end: + return map; + } + +-ssize_t uncore_event_show(struct kobject *kobj, +- struct kobj_attribute *attr, char *buf) ++ssize_t uncore_event_show(struct device *dev, ++ struct device_attribute *attr, char *buf) + { + struct uncore_event_desc *event = + container_of(attr, struct uncore_event_desc, attr); +@@ -813,7 +813,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types) + static int __init uncore_type_init(struct intel_uncore_type *type, bool setid) + { + struct intel_uncore_pmu *pmus; +- struct attribute_group *attr_group; ++ attribute_group_no_const *attr_group; + struct attribute **attrs; + size_t size; + int i, j; +diff --git a/arch/x86/events/intel/uncore.h b/arch/x86/events/intel/uncore.h +index 79766b9..8e2b3d0 100644 +--- a/arch/x86/events/intel/uncore.h ++++ b/arch/x86/events/intel/uncore.h +@@ -119,9 +119,9 @@ struct intel_uncore_box { + #define UNCORE_BOX_FLAG_INITIATED 0 + + struct uncore_event_desc { +- struct kobj_attribute attr; ++ struct device_attribute attr; + const char *config; +-}; ++} __do_const; + + struct pci2phy_map { + struct list_head list; +@@ -131,8 +131,8 @@ struct pci2phy_map { + + struct pci2phy_map *__find_pci2phy_map(int segment); + +-ssize_t uncore_event_show(struct kobject *kobj, +- struct kobj_attribute *attr, char *buf); ++ssize_t uncore_event_show(struct device *dev, ++ struct device_attribute *attr, char *buf); + + #define INTEL_UNCORE_EVENT_DESC(_name, _config) \ + { \ +@@ -141,14 +141,14 @@ ssize_t uncore_event_show(struct kobject *kobj, + } + + #define DEFINE_UNCORE_FORMAT_ATTR(_var, _name, _format) \ +-static ssize_t __uncore_##_var##_show(struct kobject *kobj, \ +- struct kobj_attribute *attr, \ ++static ssize_t __uncore_##_var##_show(struct device *dev, \ ++ struct device_attribute *attr, \ + char *page) \ + { \ + BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ + return sprintf(page, _format "\n"); \ + } \ +-static struct kobj_attribute format_attr_##_var = \ ++static struct device_attribute format_attr_##_var = \ + __ATTR(_name, 0444, __uncore_##_var##_show, NULL) + + static inline unsigned uncore_pci_box_ctl(struct intel_uncore_box *box) +diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h +index ad4dc7f..1eff595 100644 +--- a/arch/x86/events/perf_event.h ++++ b/arch/x86/events/perf_event.h +@@ -792,7 +792,7 @@ static inline void set_linear_ip(struct pt_regs *regs, unsigned long ip) + regs->cs = kernel_ip(ip) ? __KERNEL_CS : __USER_CS; + if (regs->flags & X86_VM_MASK) + regs->flags ^= (PERF_EFLAGS_VM | X86_VM_MASK); +- regs->ip = ip; ++ regs->ip = kernel_ip(ip) ? ktva_ktla(ip) : ip; + } + + ssize_t x86_event_sysfs_show(char *page, u64 config, u64 event); diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index ae6aad1..719d6d9 100644 --- a/arch/x86/ia32/ia32_aout.c @@ -18415,7 +18989,7 @@ index e7636ba..e1fb78a 100644 \newinstr1 144: diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h -index 7bfc85b..65d1ec4 100644 +index 99afb66..c098094 100644 --- a/arch/x86/include/asm/alternative.h +++ b/arch/x86/include/asm/alternative.h @@ -136,7 +136,7 @@ static inline int alternatives_text_reserved(void *start, void *end) @@ -18437,10 +19011,10 @@ index 7bfc85b..65d1ec4 100644 ALTINSTR_REPLACEMENT(newinstr2, feature2, 2) \ ".popsection" diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h -index e8c4fba..8d42c8c 100644 +index 98f25bb..230bd9e 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h -@@ -50,7 +50,7 @@ static inline void generic_apic_probe(void) +@@ -49,7 +49,7 @@ static inline void generic_apic_probe(void) #ifdef CONFIG_X86_LOCAL_APIC @@ -18821,7 +19395,7 @@ index 3e86742..1b19554 100644 * @v: pointer to type int * diff --git a/arch/x86/include/asm/atomic64_32.h b/arch/x86/include/asm/atomic64_32.h -index a984111..9c1ae68 100644 +index a984111..d1b3a88 100644 --- a/arch/x86/include/asm/atomic64_32.h +++ b/arch/x86/include/asm/atomic64_32.h @@ -11,6 +11,14 @@ typedef struct { @@ -18893,7 +19467,33 @@ index a984111..9c1ae68 100644 * atomic64_xchg - xchg atomic64 variable * @v: pointer to type atomic64_t * @n: value to assign -@@ -111,6 +144,22 @@ static inline void atomic64_set(atomic64_t *v, long long i) +@@ -95,6 +128,25 @@ static inline long long atomic64_xchg(atomic64_t *v, long long n) + } + + /** ++ * atomic64_xchg_unchecked - xchg atomic64 variable ++ * @v: pointer to type atomic64_unchecked_t ++ * @n: value to assign ++ * ++ * Atomically xchgs the value of @v to @n and returns ++ * the old value. ++ */ ++static inline long long atomic64_xchg_unchecked(atomic64_unchecked_t *v, long long n) ++{ ++ long long o; ++ unsigned high = (unsigned)(n >> 32); ++ unsigned low = (unsigned)n; ++ alternative_atomic64(xchg, "=&A" (o), ++ "S" (v), "b" (low), "c" (high) ++ : "memory"); ++ return o; ++} ++ ++/** + * atomic64_set - set atomic64 variable + * @v: pointer to type atomic64_t + * @i: value to assign +@@ -111,6 +163,22 @@ static inline void atomic64_set(atomic64_t *v, long long i) } /** @@ -18916,7 +19516,7 @@ index a984111..9c1ae68 100644 * atomic64_read - read atomic64 variable * @v: pointer to type atomic64_t * -@@ -124,6 +173,19 @@ static inline long long atomic64_read(const atomic64_t *v) +@@ -124,6 +192,19 @@ static inline long long atomic64_read(const atomic64_t *v) } /** @@ -18936,7 +19536,7 @@ index a984111..9c1ae68 100644 * atomic64_add_return - add and return * @i: integer value to add * @v: pointer to type atomic64_t -@@ -138,6 +200,21 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v) +@@ -138,6 +219,21 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v) return i; } @@ -18958,7 +19558,7 @@ index a984111..9c1ae68 100644 /* * Other variants with different arithmetic operators: */ -@@ -157,6 +234,14 @@ static inline long long atomic64_inc_return(atomic64_t *v) +@@ -157,6 +253,14 @@ static inline long long atomic64_inc_return(atomic64_t *v) return a; } @@ -18973,7 +19573,7 @@ index a984111..9c1ae68 100644 static inline long long atomic64_dec_return(atomic64_t *v) { long long a; -@@ -181,6 +266,21 @@ static inline long long atomic64_add(long long i, atomic64_t *v) +@@ -181,6 +285,21 @@ static inline long long atomic64_add(long long i, atomic64_t *v) } /** @@ -18996,7 +19596,7 @@ index a984111..9c1ae68 100644 * @i: integer value to subtract * @v: pointer to type atomic64_t diff --git a/arch/x86/include/asm/atomic64_64.h b/arch/x86/include/asm/atomic64_64.h -index 0373510..e37ee10 100644 +index 0373510..3619c56 100644 --- a/arch/x86/include/asm/atomic64_64.h +++ b/arch/x86/include/asm/atomic64_64.h @@ -22,6 +22,18 @@ static inline long atomic64_read(const atomic64_t *v) @@ -19221,7 +19821,7 @@ index 0373510..e37ee10 100644 #define atomic64_dec_return(v) (atomic64_sub_return(1, (v))) static inline long atomic64_cmpxchg(atomic64_t *v, long old, long new) -@@ -166,6 +292,11 @@ static inline long atomic64_cmpxchg(atomic64_t *v, long old, long new) +@@ -166,11 +292,21 @@ static inline long atomic64_cmpxchg(atomic64_t *v, long old, long new) return cmpxchg(&v->counter, old, new); } @@ -19233,7 +19833,17 @@ index 0373510..e37ee10 100644 static inline long atomic64_xchg(atomic64_t *v, long new) { return xchg(&v->counter, new); -@@ -182,17 +313,30 @@ static inline long atomic64_xchg(atomic64_t *v, long new) + } + ++static inline long atomic64_xchg_unchecked(atomic64_unchecked_t *v, long new) ++{ ++ return xchg(&v->counter, new); ++} ++ + /** + * atomic64_add_unless - add unless the number is a given value + * @v: pointer of type atomic64_t +@@ -182,17 +318,30 @@ static inline long atomic64_xchg(atomic64_t *v, long new) */ static inline int atomic64_add_unless(atomic64_t *v, long a, long u) { @@ -19269,7 +19879,7 @@ index 0373510..e37ee10 100644 #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h -index cfe3b95..d01b118 100644 +index 7766d1c..f545428 100644 --- a/arch/x86/include/asm/bitops.h +++ b/arch/x86/include/asm/bitops.h @@ -50,7 +50,7 @@ @@ -19281,27 +19891,27 @@ index cfe3b95..d01b118 100644 #define CONST_MASK(nr) (1 << ((nr) & 7)) /** -@@ -203,7 +203,7 @@ static inline void change_bit(long nr, volatile unsigned long *addr) +@@ -203,7 +203,7 @@ static __always_inline void change_bit(long nr, volatile unsigned long *addr) */ - static inline int test_and_set_bit(long nr, volatile unsigned long *addr) + static __always_inline int test_and_set_bit(long nr, volatile unsigned long *addr) { - GEN_BINARY_RMWcc(LOCK_PREFIX "bts", *addr, "Ir", nr, "%0", "c"); + GEN_BINARY_RMWcc_unchecked(LOCK_PREFIX "bts", *addr, "Ir", nr, "%0", "c"); } /** -@@ -249,7 +249,7 @@ static inline int __test_and_set_bit(long nr, volatile unsigned long *addr) +@@ -249,7 +249,7 @@ static __always_inline int __test_and_set_bit(long nr, volatile unsigned long *a */ - static inline int test_and_clear_bit(long nr, volatile unsigned long *addr) + static __always_inline int test_and_clear_bit(long nr, volatile unsigned long *addr) { - GEN_BINARY_RMWcc(LOCK_PREFIX "btr", *addr, "Ir", nr, "%0", "c"); + GEN_BINARY_RMWcc_unchecked(LOCK_PREFIX "btr", *addr, "Ir", nr, "%0", "c"); } /** -@@ -302,7 +302,7 @@ static inline int __test_and_change_bit(long nr, volatile unsigned long *addr) +@@ -302,7 +302,7 @@ static __always_inline int __test_and_change_bit(long nr, volatile unsigned long */ - static inline int test_and_change_bit(long nr, volatile unsigned long *addr) + static __always_inline int test_and_change_bit(long nr, volatile unsigned long *addr) { - GEN_BINARY_RMWcc(LOCK_PREFIX "btc", *addr, "Ir", nr, "%0", "c"); + GEN_BINARY_RMWcc_unchecked(LOCK_PREFIX "btc", *addr, "Ir", nr, "%0", "c"); @@ -19312,39 +19922,39 @@ index cfe3b95..d01b118 100644 * * Undefined if no bit exists, so code should check against 0 first. */ --static inline unsigned long __ffs(unsigned long word) -+static inline unsigned long __intentional_overflow(-1) __ffs(unsigned long word) +-static __always_inline unsigned long __ffs(unsigned long word) ++static __always_inline unsigned long __intentional_overflow(-1) __ffs(unsigned long word) { asm("rep; bsf %1,%0" : "=r" (word) -@@ -357,7 +357,7 @@ static inline unsigned long __ffs(unsigned long word) +@@ -357,7 +357,7 @@ static __always_inline unsigned long __ffs(unsigned long word) * * Undefined if no zero exists, so code should check against ~0UL first. */ --static inline unsigned long ffz(unsigned long word) -+static inline unsigned long __intentional_overflow(-1) ffz(unsigned long word) +-static __always_inline unsigned long ffz(unsigned long word) ++static __always_inline unsigned long __intentional_overflow(-1) ffz(unsigned long word) { asm("rep; bsf %1,%0" : "=r" (word) -@@ -371,7 +371,7 @@ static inline unsigned long ffz(unsigned long word) +@@ -371,7 +371,7 @@ static __always_inline unsigned long ffz(unsigned long word) * * Undefined if no set bit exists, so code should check against 0 first. */ --static inline unsigned long __fls(unsigned long word) -+static inline unsigned long __intentional_overflow(-1) __fls(unsigned long word) +-static __always_inline unsigned long __fls(unsigned long word) ++static __always_inline unsigned long __intentional_overflow(-1) __fls(unsigned long word) { asm("bsr %1,%0" : "=r" (word) -@@ -434,7 +434,7 @@ static inline int ffs(int x) +@@ -434,7 +434,7 @@ static __always_inline int ffs(int x) * set bit if value is nonzero. The last (most significant) bit is * at position 32. */ --static inline int fls(int x) -+static inline int __intentional_overflow(-1) fls(int x) +-static __always_inline int fls(int x) ++static __always_inline int __intentional_overflow(-1) fls(int x) { int r; -@@ -476,7 +476,7 @@ static inline int fls(int x) +@@ -476,7 +476,7 @@ static __always_inline int fls(int x) * at position 64. */ #ifdef CONFIG_X86_64 @@ -19367,10 +19977,10 @@ index 6b8d6e8..3cbf4f8 100644 & ~(CONFIG_PHYSICAL_ALIGN - 1)) diff --git a/arch/x86/include/asm/cache.h b/arch/x86/include/asm/cache.h -index 48f99f1..d78ebf9 100644 +index 48f99f1..26ab08a 100644 --- a/arch/x86/include/asm/cache.h +++ b/arch/x86/include/asm/cache.h -@@ -5,12 +5,13 @@ +@@ -5,12 +5,12 @@ /* L1 cache line size */ #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) @@ -19378,7 +19988,6 @@ index 48f99f1..d78ebf9 100644 +#define L1_CACHE_BYTES (_AC(1,UL) << L1_CACHE_SHIFT) #define __read_mostly __attribute__((__section__(".data..read_mostly"))) -+#define __read_only __attribute__((__section__(".data..read_only"))) #define INTERNODE_CACHE_SHIFT CONFIG_X86_INTERNODE_CACHE_SHIFT -#define INTERNODE_CACHE_BYTES (1 << INTERNODE_CACHE_SHIFT) @@ -19387,7 +19996,7 @@ index 48f99f1..d78ebf9 100644 #ifdef CONFIG_X86_VSMP #ifdef CONFIG_SMP diff --git a/arch/x86/include/asm/checksum_32.h b/arch/x86/include/asm/checksum_32.h -index f50de69..2b0a458 100644 +index 532f85e..b1d8a66a 100644 --- a/arch/x86/include/asm/checksum_32.h +++ b/arch/x86/include/asm/checksum_32.h @@ -31,6 +31,14 @@ asmlinkage __wsum csum_partial_copy_generic(const void *src, void *dst, @@ -19414,7 +20023,7 @@ index f50de69..2b0a458 100644 len, sum, err_ptr, NULL); clac(); -@@ -187,7 +195,7 @@ static inline __wsum csum_and_copy_to_user(const void *src, +@@ -184,7 +192,7 @@ static inline __wsum csum_and_copy_to_user(const void *src, might_sleep(); if (access_ok(VERIFY_WRITE, dst, len)) { stac(); @@ -19424,10 +20033,10 @@ index f50de69..2b0a458 100644 clac(); return ret; diff --git a/arch/x86/include/asm/cmpxchg.h b/arch/x86/include/asm/cmpxchg.h -index ad19841..0784041 100644 +index 9733361..2053014 100644 --- a/arch/x86/include/asm/cmpxchg.h +++ b/arch/x86/include/asm/cmpxchg.h -@@ -14,8 +14,12 @@ extern void __cmpxchg_wrong_size(void) +@@ -15,8 +15,12 @@ extern void __cmpxchg_wrong_size(void) __compiletime_error("Bad argument size for cmpxchg"); extern void __xadd_wrong_size(void) __compiletime_error("Bad argument size for xadd"); @@ -19440,7 +20049,7 @@ index ad19841..0784041 100644 /* * Constants for operation sizes. On 32-bit, the 64-bit size it set to -@@ -67,6 +71,38 @@ extern void __add_wrong_size(void) +@@ -68,6 +72,38 @@ extern void __add_wrong_size(void) __ret; \ }) @@ -19479,7 +20088,7 @@ index ad19841..0784041 100644 /* * Note: no "lock" prefix even on SMP: xchg always implies lock anyway. * Since this is generally used to protect other memory information, we -@@ -165,6 +201,9 @@ extern void __add_wrong_size(void) +@@ -166,6 +202,9 @@ extern void __add_wrong_size(void) #define xadd_sync(ptr, inc) __xadd((ptr), (inc), "lock; ") #define xadd_local(ptr, inc) __xadd((ptr), (inc), "") @@ -19490,7 +20099,7 @@ index ad19841..0784041 100644 ({ \ __typeof__ (*(ptr)) __ret = (inc); \ diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h -index acdee09..e5c31cd 100644 +index ebb102e..4240767 100644 --- a/arch/x86/include/asm/compat.h +++ b/arch/x86/include/asm/compat.h @@ -41,7 +41,11 @@ typedef s64 __attribute__((aligned(4))) compat_s64; @@ -19506,10 +20115,23 @@ index acdee09..e5c31cd 100644 struct compat_timespec { compat_time_t tv_sec; diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h -index 7ad8c94..00a0aa3 100644 +index aeab479..5467e0b 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h -@@ -203,7 +203,8 @@ +@@ -164,7 +164,7 @@ static __always_inline __pure bool _static_cpu_has(u16 bit) + " .byte 5f - 4f\n" /* repl len */ + " .byte 3b - 2b\n" /* pad len */ + ".previous\n" +- ".section .altinstr_replacement,\"ax\"\n" ++ ".section .altinstr_replacement,\"a\"\n" + "4: jmp %l[t_no]\n" + "5:\n" + ".previous\n" +diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h +index 8f9afef..378b605 100644 +--- a/arch/x86/include/asm/cpufeatures.h ++++ b/arch/x86/include/asm/cpufeatures.h +@@ -204,7 +204,8 @@ #define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */ #define X86_FEATURE_XENPV ( 8*32+16) /* "" Xen paravirtual guest */ @@ -19519,7 +20141,7 @@ index 7ad8c94..00a0aa3 100644 /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */ #define X86_FEATURE_FSGSBASE ( 9*32+ 0) /* {RD/WR}{FS/GS}BASE instructions*/ -@@ -211,7 +212,7 @@ +@@ -212,7 +213,7 @@ #define X86_FEATURE_BMI1 ( 9*32+ 3) /* 1st group bit manipulation extensions */ #define X86_FEATURE_HLE ( 9*32+ 4) /* Hardware Lock Elision */ #define X86_FEATURE_AVX2 ( 9*32+ 5) /* AVX2 instructions */ @@ -19528,52 +20150,6 @@ index 7ad8c94..00a0aa3 100644 #define X86_FEATURE_BMI2 ( 9*32+ 8) /* 2nd group bit manipulation extensions */ #define X86_FEATURE_ERMS ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */ #define X86_FEATURE_INVPCID ( 9*32+10) /* Invalidate Processor Context ID */ -@@ -462,7 +463,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) - - #ifdef CONFIG_X86_DEBUG_STATIC_CPU_HAS - t_warn: -- warn_pre_alternatives(); -+ if (bit != X86_FEATURE_PCID && bit != X86_FEATURE_INVPCID && bit != X86_FEATURE_PCIDUDEREF) -+ warn_pre_alternatives(); - return false; - #endif - -@@ -483,7 +485,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) - ".section .discard,\"aw\",@progbits\n" - " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ - ".previous\n" -- ".section .altinstr_replacement,\"ax\"\n" -+ ".section .altinstr_replacement,\"a\"\n" - "3: movb $1,%0\n" - "4:\n" - ".previous\n" -@@ -518,7 +520,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) - " .byte 5f - 4f\n" /* repl len */ - " .byte 3b - 2b\n" /* pad len */ - ".previous\n" -- ".section .altinstr_replacement,\"ax\"\n" -+ ".section .altinstr_replacement,\"a\"\n" - "4: jmp %l[t_no]\n" - "5:\n" - ".previous\n" -@@ -553,7 +555,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) - ".section .discard,\"aw\",@progbits\n" - " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ - ".previous\n" -- ".section .altinstr_replacement,\"ax\"\n" -+ ".section .altinstr_replacement,\"a\"\n" - "3: movb $0,%0\n" - "4:\n" - ".previous\n" -@@ -568,7 +570,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) - ".section .discard,\"aw\",@progbits\n" - " .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */ - ".previous\n" -- ".section .altinstr_replacement,\"ax\"\n" -+ ".section .altinstr_replacement,\"a\"\n" - "5: movb $1,%0\n" - "6:\n" - ".previous\n" diff --git a/arch/x86/include/asm/crypto/camellia.h b/arch/x86/include/asm/crypto/camellia.h index bb93333..e3d3d57 100644 --- a/arch/x86/include/asm/crypto/camellia.h @@ -20010,7 +20586,7 @@ index 4e10d73..7319a47 100644 + #endif /* _ASM_X86_DESC_H */ diff --git a/arch/x86/include/asm/desc_defs.h b/arch/x86/include/asm/desc_defs.h -index 278441f..b95a174 100644 +index eb5deb4..ec19436 100644 --- a/arch/x86/include/asm/desc_defs.h +++ b/arch/x86/include/asm/desc_defs.h @@ -31,6 +31,12 @@ struct desc_struct { @@ -20060,7 +20636,7 @@ index fe884e1..46149ae 100644 { spin_unlock_irqrestore(&dma_spin_lock, flags); diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h -index 1514753..436825b 100644 +index 15340e3..f338653 100644 --- a/arch/x86/include/asm/elf.h +++ b/arch/x86/include/asm/elf.h @@ -75,9 +75,6 @@ typedef struct user_fxsr_struct elf_fpxregset_t; @@ -20145,10 +20721,10 @@ index 77a99ac..39ff7f5 100644 #endif /* _ASM_X86_EMERGENCY_RESTART_H */ diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h -index 6d7d0e5..bce15a1 100644 +index 8554f96..6c58add9 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h -@@ -142,7 +142,7 @@ extern pgprot_t kmap_prot; +@@ -142,7 +142,7 @@ extern pte_t *kmap_pte; extern pte_t *pkmap_page_table; void __native_set_fixmap(enum fixed_addresses idx, pte_t pte); @@ -20191,10 +20767,10 @@ index 1c7eefe..d0e4702 100644 }; diff --git a/arch/x86/include/asm/fpu/internal.h b/arch/x86/include/asm/fpu/internal.h -index 0fd440d..5f883a5 100644 +index 31ac8e6..ece4ea7 100644 --- a/arch/x86/include/asm/fpu/internal.h +++ b/arch/x86/include/asm/fpu/internal.h -@@ -98,8 +98,11 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); +@@ -101,8 +101,11 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); #define user_insn(insn, output, input...) \ ({ \ int err; \ @@ -20207,7 +20783,7 @@ index 0fd440d..5f883a5 100644 "2: " ASM_CLAC "\n" \ ".section .fixup,\"ax\"\n" \ "3: movl $-1,%[err]\n" \ -@@ -108,6 +111,7 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); +@@ -111,6 +114,7 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); _ASM_EXTABLE(1b, 3b) \ : [err] "=r" (err), output \ : "0"(0), input); \ @@ -20215,7 +20791,7 @@ index 0fd440d..5f883a5 100644 err; \ }) -@@ -187,9 +191,9 @@ static inline int copy_user_to_fregs(struct fregs_state __user *fx) +@@ -190,9 +194,9 @@ static inline int copy_user_to_fregs(struct fregs_state __user *fx) static inline void copy_fxregs_to_kernel(struct fpu *fpu) { if (config_enabled(CONFIG_X86_32)) @@ -20227,7 +20803,7 @@ index 0fd440d..5f883a5 100644 else { /* Using "rex64; fxsave %0" is broken because, if the memory * operand uses any extended registers for addressing, a second -@@ -206,15 +210,15 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu) +@@ -209,15 +213,15 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu) * an extended register is needed for addressing (fix submitted * to mainline 2005-11-21). * @@ -20246,7 +20822,7 @@ index 0fd440d..5f883a5 100644 } } -@@ -386,9 +390,11 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf) +@@ -389,9 +393,11 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf) if (unlikely(err)) return -EFAULT; @@ -20259,7 +20835,7 @@ index 0fd440d..5f883a5 100644 return err; } -@@ -398,14 +404,16 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf) +@@ -401,14 +407,16 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf) */ static inline int copy_user_to_xregs(struct xregs_state __user *buf, u64 mask) { @@ -20278,7 +20854,7 @@ index 0fd440d..5f883a5 100644 return err; } -@@ -423,7 +431,7 @@ static inline int copy_user_to_xregs(struct xregs_state __user *buf, u64 mask) +@@ -426,7 +434,7 @@ static inline int copy_user_to_xregs(struct xregs_state __user *buf, u64 mask) static inline int copy_fpregs_to_fpstate(struct fpu *fpu) { if (likely(use_xsave())) { @@ -20287,7 +20863,7 @@ index 0fd440d..5f883a5 100644 return 1; } -@@ -436,7 +444,7 @@ static inline int copy_fpregs_to_fpstate(struct fpu *fpu) +@@ -439,7 +447,7 @@ static inline int copy_fpregs_to_fpstate(struct fpu *fpu) * Legacy FPU register saving, FNSAVE always clears FPU registers, * so we have to mark them inactive: */ @@ -20296,7 +20872,7 @@ index 0fd440d..5f883a5 100644 return 0; } -@@ -465,7 +473,7 @@ static inline void copy_kernel_to_fpregs(union fpregs_state *fpstate) +@@ -468,7 +476,7 @@ static inline void copy_kernel_to_fpregs(union fpregs_state *fpstate) "fnclex\n\t" "emms\n\t" "fildl %P[addr]" /* set F?P to defined value */ @@ -20305,7 +20881,7 @@ index 0fd440d..5f883a5 100644 } __copy_kernel_to_fpregs(fpstate); -@@ -605,7 +613,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu) +@@ -609,7 +617,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu) if (fpu.preload) { new_fpu->counter++; __fpregs_activate(new_fpu); @@ -20314,7 +20890,7 @@ index 0fd440d..5f883a5 100644 } else { __fpregs_deactivate_hw(); } -@@ -617,7 +625,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu) +@@ -621,7 +629,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu) if (fpu_want_lazy_restore(new_fpu, cpu)) fpu.preload = 0; else @@ -20323,7 +20899,7 @@ index 0fd440d..5f883a5 100644 fpregs_activate(new_fpu); } } -@@ -637,7 +645,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu) +@@ -641,7 +649,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu) static inline void switch_fpu_finish(struct fpu *new_fpu, fpu_switch_t fpu_switch) { if (fpu_switch.preload) @@ -20333,10 +20909,10 @@ index 0fd440d..5f883a5 100644 /* diff --git a/arch/x86/include/asm/fpu/types.h b/arch/x86/include/asm/fpu/types.h -index 1c6f6ac..2575de1 100644 +index 36b90bb..e5a32ad 100644 --- a/arch/x86/include/asm/fpu/types.h +++ b/arch/x86/include/asm/fpu/types.h -@@ -257,6 +257,39 @@ union fpregs_state { +@@ -269,6 +269,39 @@ union fpregs_state { */ struct fpu { /* @@ -20376,7 +20952,7 @@ index 1c6f6ac..2575de1 100644 * @last_cpu: * * Records the last CPU on which this context was loaded into -@@ -313,43 +346,6 @@ struct fpu { +@@ -325,43 +358,6 @@ struct fpu { * deal with bursty apps that only use the FPU for a short time: */ unsigned char counter; @@ -20485,7 +21061,7 @@ index b4c1f54..e290c08 100644 pagefault_enable(); diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h -index 84b3d19..8ea9f03 100644 +index b90e105..30a5950 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -164,8 +164,8 @@ static inline void unlock_vector_lock(void) {} @@ -20855,15 +21431,15 @@ index 0000000..2bfd3ba + +#endif /* X86_MMAN_H */ diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h -index 55234d5..7e3c4bf 100644 +index 1ea0bae..25de747 100644 --- a/arch/x86/include/asm/mmu.h +++ b/arch/x86/include/asm/mmu.h @@ -19,7 +19,19 @@ typedef struct { #endif struct mutex lock; -- void __user *vdso; -+ unsigned long vdso; +- void __user *vdso; /* vdso base address */ ++ unsigned long vdso; /* vdso base address */ + +#ifdef CONFIG_X86_32 +#if defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC) @@ -20876,11 +21452,11 @@ index 55234d5..7e3c4bf 100644 + +#endif +#endif + const struct vdso_image *vdso_image; /* vdso image in use */ atomic_t perf_rdpmc_allowed; /* nonzero if rdpmc is allowed */ - } mm_context_t; diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h -index bfd9b2a..0d64fc2 100644 +index 8428002..89716a8 100644 --- a/arch/x86/include/asm/mmu_context.h +++ b/arch/x86/include/asm/mmu_context.h @@ -46,7 +46,7 @@ struct ldt_struct { @@ -20892,9 +21468,9 @@ index bfd9b2a..0d64fc2 100644 }; /* -@@ -58,6 +58,23 @@ void destroy_context(struct mm_struct *mm); - static inline int init_new_context(struct task_struct *tsk, - struct mm_struct *mm) +@@ -58,6 +58,23 @@ void destroy_context_ldt(struct mm_struct *mm); + static inline int init_new_context_ldt(struct task_struct *tsk, + struct mm_struct *mm) { + if (tsk == current) { + mm->context.vdso = 0; @@ -20915,8 +21491,8 @@ index bfd9b2a..0d64fc2 100644 + return 0; } - static inline void destroy_context(struct mm_struct *mm) {} -@@ -98,19 +115,84 @@ static inline void load_mm_ldt(struct mm_struct *mm) + static inline void destroy_context_ldt(struct mm_struct *mm) {} +@@ -98,6 +115,20 @@ static inline void load_mm_ldt(struct mm_struct *mm) static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) { @@ -20937,7 +21513,8 @@ index bfd9b2a..0d64fc2 100644 #ifdef CONFIG_SMP if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) this_cpu_write(cpu_tlbstate.state, TLBSTATE_LAZY); - #endif +@@ -115,13 +146,64 @@ static inline void destroy_context(struct mm_struct *mm) + destroy_context_ldt(mm); } +static inline void pax_switch_mm(struct mm_struct *next, unsigned int cpu) @@ -21001,7 +21578,7 @@ index bfd9b2a..0d64fc2 100644 this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK); this_cpu_write(cpu_tlbstate.active_mm, next); #endif -@@ -129,7 +211,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, +@@ -140,7 +222,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, * We need to prevent an outcome in which CPU 1 observes * the new PTE value and CPU 0 observes bit 1 clear in * mm_cpumask. (If that occurs, then the IPI will never @@ -21010,7 +21587,7 @@ index bfd9b2a..0d64fc2 100644 * * The bad outcome can occur if either CPU's load is * reordered before that CPU's store, so both CPUs must -@@ -144,7 +226,11 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, +@@ -155,7 +237,11 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, * ordering guarantee we need. * */ @@ -21022,7 +21599,7 @@ index bfd9b2a..0d64fc2 100644 trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL); -@@ -170,9 +256,31 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, +@@ -181,9 +267,31 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, if (unlikely(prev->context.ldt != next->context.ldt)) load_mm_ldt(next); #endif @@ -21055,7 +21632,7 @@ index bfd9b2a..0d64fc2 100644 this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK); BUG_ON(this_cpu_read(cpu_tlbstate.active_mm) != next); -@@ -193,13 +301,30 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, +@@ -204,13 +312,30 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, * As above, load_cr3() is serializing and orders TLB * fills with respect to the mm_cpumask write. */ @@ -21269,10 +21846,10 @@ index b3bebf9..cb419e7 100644 #define __phys_reloc_hide(x) (x) diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h -index f619250..8b851d8 100644 +index 601f1b8..1d2f5a1 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h -@@ -510,7 +510,7 @@ static inline pmd_t __pmd(pmdval_t val) +@@ -511,7 +511,7 @@ static inline pmd_t __pmd(pmdval_t val) return (pmd_t) { ret }; } @@ -21281,7 +21858,7 @@ index f619250..8b851d8 100644 { pmdval_t ret; -@@ -576,6 +576,18 @@ static inline void set_pgd(pgd_t *pgdp, pgd_t pgd) +@@ -577,6 +577,18 @@ static inline void set_pgd(pgd_t *pgdp, pgd_t pgd) val); } @@ -21300,7 +21877,7 @@ index f619250..8b851d8 100644 static inline void pgd_clear(pgd_t *pgdp) { set_pgd(pgdp, __pgd(0)); -@@ -660,6 +672,21 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, +@@ -661,6 +673,21 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, pv_mmu_ops.set_fixmap(idx, phys, flags); } @@ -21322,7 +21899,7 @@ index f619250..8b851d8 100644 #if defined(CONFIG_SMP) && defined(CONFIG_PARAVIRT_SPINLOCKS) #ifdef CONFIG_QUEUED_SPINLOCKS -@@ -883,7 +910,7 @@ extern void default_banner(void); +@@ -888,7 +915,7 @@ extern void default_banner(void); #define PARA_PATCH(struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 4) #define PARA_SITE(ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .long, 4) @@ -21331,7 +21908,7 @@ index f619250..8b851d8 100644 #endif #define INTERRUPT_RETURN \ -@@ -941,6 +968,21 @@ extern void default_banner(void); +@@ -946,6 +973,21 @@ extern void default_banner(void); PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_usergs_sysret64), \ CLBR_NONE, \ jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret64)) @@ -21354,7 +21931,7 @@ index f619250..8b851d8 100644 #endif /* __ASSEMBLY__ */ diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h -index 77db561..bc4a1ea 100644 +index e8c2326..4458a61 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h @@ -89,7 +89,7 @@ struct pv_init_ops { @@ -21551,7 +22128,7 @@ index cdaa58c..ae30f0d 100644 static inline void pud_clear(pud_t *pudp) diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h -index 0687c47..7425416 100644 +index 97f3242..0d17a84 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -54,6 +54,7 @@ extern struct mm_struct *pgd_page_get_mm(struct page *page); @@ -21616,7 +22193,7 @@ index 0687c47..7425416 100644 static inline int pte_dirty(pte_t pte) { return pte_flags(pte) & _PAGE_DIRTY; -@@ -154,6 +196,11 @@ static inline unsigned long pud_pfn(pud_t pud) +@@ -168,6 +210,11 @@ static inline unsigned long pud_pfn(pud_t pud) return (pud_val(pud) & pud_pfn_mask(pud)) >> PAGE_SHIFT; } @@ -21628,7 +22205,7 @@ index 0687c47..7425416 100644 #define pte_page(pte) pfn_to_page(pte_pfn(pte)) static inline int pmd_large(pmd_t pte) -@@ -209,9 +256,29 @@ static inline pte_t pte_wrprotect(pte_t pte) +@@ -223,9 +270,29 @@ static inline pte_t pte_wrprotect(pte_t pte) return pte_clear_flags(pte, _PAGE_RW); } @@ -21659,7 +22236,7 @@ index 0687c47..7425416 100644 } static inline pte_t pte_mkdirty(pte_t pte) -@@ -459,6 +526,16 @@ pte_t *populate_extra_pte(unsigned long vaddr); +@@ -473,6 +540,16 @@ pte_t *populate_extra_pte(unsigned long vaddr); #endif #ifndef __ASSEMBLY__ @@ -21676,7 +22253,7 @@ index 0687c47..7425416 100644 #include <linux/mm_types.h> #include <linux/mmdebug.h> #include <linux/log2.h> -@@ -659,7 +736,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) +@@ -673,7 +750,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) * Currently stuck as a macro due to indirect forward reference to * linux/mmzone.h's __section_mem_map_addr() definition: */ @@ -21685,7 +22262,7 @@ index 0687c47..7425416 100644 /* to find an entry in a page-table-directory. */ static inline unsigned long pud_index(unsigned long address) -@@ -674,7 +751,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) +@@ -688,7 +765,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) static inline int pgd_bad(pgd_t pgd) { @@ -21694,7 +22271,7 @@ index 0687c47..7425416 100644 } static inline int pgd_none(pgd_t pgd) -@@ -697,7 +774,12 @@ static inline int pgd_none(pgd_t pgd) +@@ -711,7 +788,12 @@ static inline int pgd_none(pgd_t pgd) * pgd_offset() returns a (pgd_t *) * pgd_index() is used get the offset into the pgd page's array of pgd_t's; */ @@ -21708,7 +22285,7 @@ index 0687c47..7425416 100644 /* * a shortcut which implies the use of the kernel's pgd, instead * of a process's -@@ -708,6 +790,25 @@ static inline int pgd_none(pgd_t pgd) +@@ -722,6 +804,25 @@ static inline int pgd_none(pgd_t pgd) #define KERNEL_PGD_BOUNDARY pgd_index(PAGE_OFFSET) #define KERNEL_PGD_PTRS (PTRS_PER_PGD - KERNEL_PGD_BOUNDARY) @@ -21734,7 +22311,7 @@ index 0687c47..7425416 100644 #ifndef __ASSEMBLY__ extern int direct_gbpages; -@@ -862,11 +963,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm, +@@ -876,11 +977,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm, * dst and src can be on the same page, but the range must not overlap, * and must not cross a page boundary. */ @@ -21929,10 +22506,10 @@ index e6844df..432b56e 100644 #endif /* _ASM_X86_PGTABLE_64_DEFS_H */ diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h -index 4432ab7..43778ff 100644 +index 7b5efe2..639cdc0 100644 --- a/arch/x86/include/asm/pgtable_types.h +++ b/arch/x86/include/asm/pgtable_types.h -@@ -87,9 +87,12 @@ +@@ -108,9 +108,12 @@ #define _PAGE_NX (_AT(pteval_t, 1) << _PAGE_BIT_NX) #define _PAGE_DEVMAP (_AT(u64, 1) << _PAGE_BIT_DEVMAP) #define __HAVE_ARCH_PTE_DEVMAP @@ -21946,7 +22523,7 @@ index 4432ab7..43778ff 100644 #endif #define _PAGE_PROTNONE (_AT(pteval_t, 1) << _PAGE_BIT_PROTNONE) -@@ -144,6 +147,9 @@ enum page_cache_mode { +@@ -170,6 +173,9 @@ enum page_cache_mode { #define PAGE_READONLY_EXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | \ _PAGE_ACCESSED) @@ -21956,7 +22533,7 @@ index 4432ab7..43778ff 100644 #define __PAGE_KERNEL_EXEC \ (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_GLOBAL) #define __PAGE_KERNEL (__PAGE_KERNEL_EXEC | _PAGE_NX) -@@ -151,7 +157,7 @@ enum page_cache_mode { +@@ -177,7 +183,7 @@ enum page_cache_mode { #define __PAGE_KERNEL_RO (__PAGE_KERNEL & ~_PAGE_RW) #define __PAGE_KERNEL_RX (__PAGE_KERNEL_EXEC & ~_PAGE_RW) #define __PAGE_KERNEL_NOCACHE (__PAGE_KERNEL | _PAGE_NOCACHE) @@ -21965,7 +22542,7 @@ index 4432ab7..43778ff 100644 #define __PAGE_KERNEL_VVAR (__PAGE_KERNEL_RO | _PAGE_USER) #define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) #define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE) -@@ -197,7 +203,7 @@ enum page_cache_mode { +@@ -223,7 +229,7 @@ enum page_cache_mode { #ifdef CONFIG_X86_64 #define __PAGE_KERNEL_IDENT_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC #else @@ -21974,7 +22551,7 @@ index 4432ab7..43778ff 100644 #define PDE_IDENT_ATTR 0x063 /* PRESENT+RW+DIRTY+ACCESSED */ #define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */ #endif -@@ -236,7 +242,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd) +@@ -265,7 +271,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd) { return native_pgd_val(pgd) & PTE_FLAGS_MASK; } @@ -21992,7 +22569,7 @@ index 4432ab7..43778ff 100644 #if CONFIG_PGTABLE_LEVELS > 3 typedef struct { pudval_t pud; } pud_t; -@@ -250,8 +266,6 @@ static inline pudval_t native_pud_val(pud_t pud) +@@ -279,8 +295,6 @@ static inline pudval_t native_pud_val(pud_t pud) return pud.pud; } #else @@ -22001,7 +22578,7 @@ index 4432ab7..43778ff 100644 static inline pudval_t native_pud_val(pud_t pud) { return native_pgd_val(pud.pgd); -@@ -271,8 +285,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd) +@@ -300,8 +314,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd) return pmd.pmd; } #else @@ -22010,7 +22587,7 @@ index 4432ab7..43778ff 100644 static inline pmdval_t native_pmd_val(pmd_t pmd) { return native_pgd_val(pmd.pud.pgd); -@@ -389,7 +401,6 @@ typedef struct page *pgtable_t; +@@ -418,7 +430,6 @@ typedef struct page *pgtable_t; extern pteval_t __supported_pte_mask; extern void set_nx(void); @@ -22019,7 +22596,7 @@ index 4432ab7..43778ff 100644 #define pgprot_writecombine pgprot_writecombine extern pgprot_t pgprot_writecombine(pgprot_t prot); diff --git a/arch/x86/include/asm/pmem.h b/arch/x86/include/asm/pmem.h -index c57fd1e..426fc11 100644 +index fbc5e92..0af7895 100644 --- a/arch/x86/include/asm/pmem.h +++ b/arch/x86/include/asm/pmem.h @@ -41,7 +41,7 @@ static inline void arch_memcpy_to_pmem(void __pmem *dst, const void *src, @@ -22032,7 +22609,7 @@ index c57fd1e..426fc11 100644 __func__, dst, src, unwritten)) BUG(); diff --git a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h -index 01bcde8..a6f1377 100644 +index d397deb..e977c3b 100644 --- a/arch/x86/include/asm/preempt.h +++ b/arch/x86/include/asm/preempt.h @@ -81,7 +81,7 @@ static __always_inline void __preempt_count_sub(int val) @@ -22045,10 +22622,10 @@ index 01bcde8..a6f1377 100644 /* diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h -index 20c11d1..f4a4f69 100644 +index 9264476..a56f17d 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h -@@ -136,7 +136,7 @@ struct cpuinfo_x86 { +@@ -135,7 +135,7 @@ struct cpuinfo_x86 { /* Index into per_cpu list: */ u16 cpu_index; u32 microcode; @@ -22057,7 +22634,7 @@ index 20c11d1..f4a4f69 100644 #define X86_VENDOR_INTEL 0 #define X86_VENDOR_CYRIX 1 -@@ -206,9 +206,21 @@ static inline void native_cpuid(unsigned int *eax, unsigned int *ebx, +@@ -205,9 +205,21 @@ static inline void native_cpuid(unsigned int *eax, unsigned int *ebx, : "memory"); } @@ -22080,7 +22657,7 @@ index 20c11d1..f4a4f69 100644 } #ifdef CONFIG_X86_32 -@@ -305,11 +317,9 @@ struct tss_struct { +@@ -307,11 +319,9 @@ struct tss_struct { } ____cacheline_aligned; @@ -22093,7 +22670,7 @@ index 20c11d1..f4a4f69 100644 /* * Save the original ist values for checking stack pointers during debugging -@@ -381,6 +391,7 @@ struct thread_struct { +@@ -383,6 +393,7 @@ struct thread_struct { unsigned short ds; unsigned short fsindex; unsigned short gsindex; @@ -22101,7 +22678,7 @@ index 20c11d1..f4a4f69 100644 #endif #ifdef CONFIG_X86_32 unsigned long ip; -@@ -390,6 +401,9 @@ struct thread_struct { +@@ -392,6 +403,9 @@ struct thread_struct { #endif unsigned long gs; @@ -22111,7 +22688,7 @@ index 20c11d1..f4a4f69 100644 /* Save middle states of ptrace breakpoints */ struct perf_event *ptrace_bps[HBP_NUM]; /* Debug status used for traps, single steps, etc... */ -@@ -409,13 +423,6 @@ struct thread_struct { +@@ -411,13 +425,6 @@ struct thread_struct { unsigned long iopl; /* Max allowed port in the bitmap, in bytes: */ unsigned io_bitmap_max; @@ -22125,7 +22702,7 @@ index 20c11d1..f4a4f69 100644 }; /* -@@ -457,10 +464,10 @@ static inline void native_swapgs(void) +@@ -459,10 +466,10 @@ static inline void native_swapgs(void) #endif } @@ -22138,7 +22715,7 @@ index 20c11d1..f4a4f69 100644 #else /* sp0 on x86_32 is special in and around vm86 mode. */ return this_cpu_read_stable(cpu_current_top_of_stack); -@@ -696,19 +703,29 @@ static inline void spin_lock_prefetch(const void *x) +@@ -698,19 +705,29 @@ static inline void spin_lock_prefetch(const void *x) #define TOP_OF_INIT_STACK ((unsigned long)&init_stack + sizeof(init_stack) - \ TOP_OF_KERNEL_STACK_PADDING) @@ -22169,7 +22746,7 @@ index 20c11d1..f4a4f69 100644 } extern unsigned long thread_saved_pc(struct task_struct *tsk); -@@ -723,12 +740,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); +@@ -725,12 +742,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); * "struct pt_regs" is possible, but they may contain the * completely wrong values. */ @@ -22183,7 +22760,7 @@ index 20c11d1..f4a4f69 100644 #define KSTK_ESP(task) (task_pt_regs(task)->sp) -@@ -742,13 +754,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); +@@ -744,13 +756,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); * particular problem by preventing anything from being mapped * at the maximum canonical address. */ @@ -22199,7 +22776,7 @@ index 20c11d1..f4a4f69 100644 #define TASK_SIZE (test_thread_flag(TIF_ADDR32) ? \ IA32_PAGE_OFFSET : TASK_SIZE_MAX) -@@ -759,7 +771,8 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); +@@ -761,7 +773,8 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); #define STACK_TOP_MAX TASK_SIZE_MAX #define INIT_THREAD { \ @@ -22209,7 +22786,7 @@ index 20c11d1..f4a4f69 100644 } /* -@@ -782,6 +795,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip, +@@ -784,6 +797,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip, */ #define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3)) @@ -22220,7 +22797,7 @@ index 20c11d1..f4a4f69 100644 #define KSTK_EIP(task) (task_pt_regs(task)->ip) /* Get/set a process' ability to use the timestamp counter instruction */ -@@ -827,7 +844,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves) +@@ -829,7 +846,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves) return 0; } @@ -22229,7 +22806,7 @@ index 20c11d1..f4a4f69 100644 extern void free_init_pages(char *what, unsigned long begin, unsigned long end); void default_idle(void); -@@ -837,6 +854,6 @@ bool xen_set_default_idle(void); +@@ -839,6 +856,6 @@ bool xen_set_default_idle(void); #define xen_set_default_idle 0 #endif @@ -22444,7 +23021,7 @@ index 8f7866a..e442f20 100644 #endif /* CC_HAVE_ASM_GOTO */ diff --git a/arch/x86/include/asm/rwsem.h b/arch/x86/include/asm/rwsem.h -index cad82c9..2e5c5c1 100644 +index ceec86eb..872e33a 100644 --- a/arch/x86/include/asm/rwsem.h +++ b/arch/x86/include/asm/rwsem.h @@ -64,6 +64,14 @@ static inline void __down_read(struct rw_semaphore *sem) @@ -22654,7 +23231,7 @@ index 7d5a192..23ef1aa 100644 #define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS*8 + 3) #define __USER32_DS __USER_DS diff --git a/arch/x86/include/asm/smap.h b/arch/x86/include/asm/smap.h -index ba665eb..0f72938 100644 +index db33330..e9521fb 100644 --- a/arch/x86/include/asm/smap.h +++ b/arch/x86/include/asm/smap.h @@ -25,6 +25,18 @@ @@ -22715,10 +23292,10 @@ index ba665eb..0f72938 100644 static __always_inline void clac(void) diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h -index dfcf072..97cd79a 100644 +index 66b0573..2bdb55a 100644 --- a/arch/x86/include/asm/smp.h +++ b/arch/x86/include/asm/smp.h -@@ -26,7 +26,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map); +@@ -25,7 +25,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map); /* cpus sharing the last level cache: */ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_llc_shared_map); DECLARE_PER_CPU_READ_MOSTLY(u16, cpu_llc_id); @@ -22727,7 +23304,7 @@ index dfcf072..97cd79a 100644 static inline struct cpumask *cpu_llc_shared_mask(int cpu) { -@@ -59,7 +59,7 @@ struct smp_ops { +@@ -58,7 +58,7 @@ struct smp_ops { void (*send_call_func_ipi)(const struct cpumask *mask); void (*send_call_func_single_ipi)(int cpu); @@ -22776,7 +23353,7 @@ index 58505f0..bff3b5b 100644 #endif } diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h -index 70bbe39..4ae2bd4 100644 +index 7c247e7..2f17b1b 100644 --- a/arch/x86/include/asm/stacktrace.h +++ b/arch/x86/include/asm/stacktrace.h @@ -11,28 +11,20 @@ @@ -22820,7 +23397,7 @@ index 70bbe39..4ae2bd4 100644 /* Generic stack tracer with callbacks */ @@ -40,7 +32,7 @@ struct stacktrace_ops { - void (*address)(void *data, unsigned long address, int reliable); + int (*address)(void *data, unsigned long address, int reliable); /* On negative return stop dumping */ int (*stack)(void *data, char *name); - walk_stack_t walk_stack; @@ -22890,7 +23467,7 @@ index 3d3e835..5cc6d8d 100644 /* * This looks horribly ugly, but the compiler can optimize it totally, diff --git a/arch/x86/include/asm/string_64.h b/arch/x86/include/asm/string_64.h -index ff8b9a1..01d4b80 100644 +index 90dbbd9..04e8caa 100644 --- a/arch/x86/include/asm/string_64.h +++ b/arch/x86/include/asm/string_64.h @@ -27,8 +27,8 @@ static __always_inline void *__inline_memcpy(void *to, const void *from, size_t @@ -22972,7 +23549,7 @@ index 82c34ee..940fa40 100644 unsigned, unsigned, unsigned); diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h -index c7b5510..f6d5ca4 100644 +index ffae84d..20997c3 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -39,7 +39,7 @@ @@ -23020,16 +23597,18 @@ index c7b5510..f6d5ca4 100644 #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) -@@ -133,17 +133,18 @@ struct thread_info { +@@ -133,6 +133,7 @@ struct thread_info { #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_ADDR32 (1 << TIF_ADDR32) #define _TIF_X32 (1 << TIF_X32) +#define _TIF_GRSEC_SETXID (1 << TIF_GRSEC_SETXID) - /* work to do in syscall_trace_enter() */ + /* + * work to do in syscall_trace_enter(). Also includes TIF_NOHZ for +@@ -141,12 +142,12 @@ struct thread_info { #define _TIF_WORK_SYSCALL_ENTRY \ (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_EMU | _TIF_SYSCALL_AUDIT | \ - _TIF_SECCOMP | _TIF_SINGLESTEP | _TIF_SYSCALL_TRACEPOINT | \ + _TIF_SECCOMP | _TIF_SYSCALL_TRACEPOINT | \ - _TIF_NOHZ) + _TIF_NOHZ | _TIF_GRSEC_SETXID) @@ -23041,7 +23620,7 @@ index c7b5510..f6d5ca4 100644 /* flags to check in __switch_to() */ #define _TIF_WORK_CTXSW \ -@@ -161,9 +162,11 @@ struct thread_info { +@@ -164,9 +165,11 @@ struct thread_info { */ #ifndef __ASSEMBLY__ @@ -23054,7 +23633,7 @@ index c7b5510..f6d5ca4 100644 } static inline unsigned long current_stack_pointer(void) -@@ -179,41 +182,9 @@ static inline unsigned long current_stack_pointer(void) +@@ -182,41 +185,9 @@ static inline unsigned long current_stack_pointer(void) #else /* !__ASSEMBLY__ */ @@ -23097,7 +23676,7 @@ index c7b5510..f6d5ca4 100644 #endif -@@ -279,5 +250,12 @@ static inline bool is_ia32_task(void) +@@ -279,6 +250,13 @@ static inline bool is_ia32_task(void) extern void arch_task_cache_init(void); extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src); extern void arch_release_task_struct(struct task_struct *tsk); @@ -23108,13 +23687,14 @@ index c7b5510..f6d5ca4 100644 +#define setup_thread_stack(p, org) do {} while (0) +#define end_of_stack(p) ((unsigned long *)task_stack_page(p) + 1) + - #endif + #endif /* !__ASSEMBLY__ */ + #endif /* _ASM_X86_THREAD_INFO_H */ diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h -index 6df2029..a359a58 100644 +index 1fde8d5..de33497 100644 --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h -@@ -86,18 +86,44 @@ static inline void cr4_set_bits_and_update_boot(unsigned long mask) +@@ -135,18 +135,44 @@ static inline void cr4_set_bits_and_update_boot(unsigned long mask) static inline void __native_flush_tlb(void) { @@ -23165,7 +23745,7 @@ index 6df2029..a359a58 100644 } static inline void __native_flush_tlb_global(void) -@@ -118,6 +144,43 @@ static inline void __native_flush_tlb_global(void) +@@ -176,6 +202,43 @@ static inline void __native_flush_tlb_global(void) static inline void __native_flush_tlb_single(unsigned long addr) { @@ -23232,7 +23812,7 @@ index c3496619..3f3a7dc 100644 asmlinkage void smp_deferred_error_interrupt(void); #endif diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h -index a4a30e4..44891b7 100644 +index 2e7513d..73d9d20 100644 --- a/arch/x86/include/asm/uaccess.h +++ b/arch/x86/include/asm/uaccess.h @@ -7,6 +7,7 @@ @@ -23294,8 +23874,8 @@ index a4a30e4..44891b7 100644 +}) /* - * The exception table consists of pairs of addresses relative to the -@@ -138,11 +172,13 @@ extern int __get_user_bad(void); + * The exception table consists of triples of addresses relative to the +@@ -145,11 +179,13 @@ extern int __get_user_bad(void); #define __uaccess_end() clac() /* @@ -23312,20 +23892,20 @@ index a4a30e4..44891b7 100644 /** * get_user: - Get a simple variable from user space. -@@ -181,10 +217,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) - register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX); \ +@@ -189,10 +225,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) + register void *__sp asm(_ASM_SP); \ __chk_user_ptr(ptr); \ might_fault(); \ + pax_open_userland(); \ - asm volatile("call __get_user_%P3" \ - : "=a" (__ret_gu), "=r" (__val_gu) \ + asm volatile("call __get_user_%P4" \ + : "=a" (__ret_gu), "=r" (__val_gu), "+r" (__sp) \ : "0" (ptr), "i" (sizeof(*(ptr)))); \ (x) = (__force __typeof__(*(ptr))) __val_gu; \ + pax_close_userland(); \ __builtin_expect(__ret_gu, 0); \ }) -@@ -192,13 +230,21 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) +@@ -200,13 +238,21 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) asm volatile("call __put_user_" #size : "=a" (__ret_pu) \ : "0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx") @@ -23350,7 +23930,7 @@ index a4a30e4..44891b7 100644 "3:" \ ".section .fixup,\"ax\"\n" \ "4: movl %3,%0\n" \ -@@ -211,8 +257,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) +@@ -219,8 +265,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) #define __put_user_asm_ex_u64(x, addr) \ asm volatile("\n" \ @@ -23361,7 +23941,7 @@ index a4a30e4..44891b7 100644 "3:" \ _ASM_EXTABLE_EX(1b, 2b) \ _ASM_EXTABLE_EX(2b, 3b) \ -@@ -260,10 +306,11 @@ extern void __put_user_8(void); +@@ -268,10 +314,11 @@ extern void __put_user_8(void); #define put_user(x, ptr) \ ({ \ int __ret_pu; \ @@ -23375,7 +23955,7 @@ index a4a30e4..44891b7 100644 switch (sizeof(*(ptr))) { \ case 1: \ __put_user_x(1, __pu_val, ptr, __ret_pu); \ -@@ -281,6 +328,7 @@ extern void __put_user_8(void); +@@ -289,6 +336,7 @@ extern void __put_user_8(void); __put_user_x(X, __pu_val, ptr, __ret_pu); \ break; \ } \ @@ -23383,7 +23963,7 @@ index a4a30e4..44891b7 100644 __builtin_expect(__ret_pu, 0); \ }) -@@ -348,10 +396,10 @@ do { \ +@@ -356,10 +404,10 @@ do { \ __chk_user_ptr(ptr); \ switch (size) { \ case 1: \ @@ -23396,7 +23976,7 @@ index a4a30e4..44891b7 100644 break; \ case 4: \ __get_user_asm(x, ptr, retval, "l", "k", "=r", errret); \ -@@ -365,17 +413,21 @@ do { \ +@@ -373,17 +421,21 @@ do { \ } while (0) #define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \ @@ -23422,7 +24002,7 @@ index a4a30e4..44891b7 100644 /* * This doesn't do __uaccess_begin/end - the exception handling -@@ -386,10 +438,10 @@ do { \ +@@ -394,10 +446,10 @@ do { \ __chk_user_ptr(ptr); \ switch (size) { \ case 1: \ @@ -23435,7 +24015,7 @@ index a4a30e4..44891b7 100644 break; \ case 4: \ __get_user_asm_ex(x, ptr, "l", "k", "=r"); \ -@@ -403,7 +455,7 @@ do { \ +@@ -411,7 +463,7 @@ do { \ } while (0) #define __get_user_asm_ex(x, addr, itype, rtype, ltype) \ @@ -23444,7 +24024,7 @@ index a4a30e4..44891b7 100644 "2:\n" \ _ASM_EXTABLE_EX(1b, 2b) \ : ltype(x) : "m" (__m(addr))) -@@ -424,13 +476,24 @@ do { \ +@@ -432,13 +484,24 @@ do { \ __uaccess_begin(); \ __get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT); \ __uaccess_end(); \ @@ -23471,7 +24051,7 @@ index a4a30e4..44891b7 100644 /* * Tell gcc we read from memory instead of writing: this is because -@@ -438,8 +501,10 @@ struct __large_struct { unsigned long buf[100]; }; +@@ -446,8 +509,10 @@ struct __large_struct { unsigned long buf[100]; }; * aliasing issues. */ #define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \ @@ -23483,7 +24063,7 @@ index a4a30e4..44891b7 100644 "2:\n" \ ".section .fixup,\"ax\"\n" \ "3: mov %3,%0\n" \ -@@ -447,10 +512,12 @@ struct __large_struct { unsigned long buf[100]; }; +@@ -455,10 +520,12 @@ struct __large_struct { unsigned long buf[100]; }; ".previous\n" \ _ASM_EXTABLE(1b, 3b) \ : "=r"(err) \ @@ -23498,7 +24078,7 @@ index a4a30e4..44891b7 100644 "2:\n" \ _ASM_EXTABLE_EX(1b, 2b) \ : : ltype(x), "m" (__m(addr))) -@@ -460,11 +527,13 @@ struct __large_struct { unsigned long buf[100]; }; +@@ -468,11 +535,13 @@ struct __large_struct { unsigned long buf[100]; }; */ #define uaccess_try do { \ current_thread_info()->uaccess_err = 0; \ @@ -23512,7 +24092,7 @@ index a4a30e4..44891b7 100644 (err) |= (current_thread_info()->uaccess_err ? -EFAULT : 0); \ } while (0) -@@ -490,8 +559,12 @@ struct __large_struct { unsigned long buf[100]; }; +@@ -498,8 +567,12 @@ struct __large_struct { unsigned long buf[100]; }; * On error, the variable @x is set to zero. */ @@ -23525,7 +24105,7 @@ index a4a30e4..44891b7 100644 /** * __put_user: - Write a simple value into user space, with less checking. -@@ -514,8 +587,12 @@ struct __large_struct { unsigned long buf[100]; }; +@@ -522,8 +595,12 @@ struct __large_struct { unsigned long buf[100]; }; * Returns zero on success, or -EFAULT on error. */ @@ -23538,7 +24118,7 @@ index a4a30e4..44891b7 100644 #define __get_user_unaligned __get_user #define __put_user_unaligned __put_user -@@ -533,7 +610,7 @@ struct __large_struct { unsigned long buf[100]; }; +@@ -541,7 +618,7 @@ struct __large_struct { unsigned long buf[100]; }; #define get_user_ex(x, ptr) do { \ unsigned long __gue_val; \ __get_user_size_ex((__gue_val), (ptr), (sizeof(*(ptr)))); \ @@ -23547,7 +24127,7 @@ index a4a30e4..44891b7 100644 } while (0) #define put_user_try uaccess_try -@@ -551,7 +628,7 @@ extern __must_check long strlen_user(const char __user *str); +@@ -559,7 +636,7 @@ extern __must_check long strlen_user(const char __user *str); extern __must_check long strnlen_user(const char __user *str, long n); unsigned long __must_check clear_user(void __user *mem, unsigned long len); @@ -23556,7 +24136,7 @@ index a4a30e4..44891b7 100644 extern void __cmpxchg_wrong_size(void) __compiletime_error("Bad argument size for cmpxchg"); -@@ -559,22 +636,23 @@ extern void __cmpxchg_wrong_size(void) +@@ -567,22 +644,23 @@ extern void __cmpxchg_wrong_size(void) #define __user_atomic_cmpxchg_inatomic(uval, ptr, old, new, size) \ ({ \ int __ret = 0; \ @@ -23585,7 +24165,7 @@ index a4a30e4..44891b7 100644 : "i" (-EFAULT), "q" (__new), "1" (__old) \ : "memory" \ ); \ -@@ -583,14 +661,14 @@ extern void __cmpxchg_wrong_size(void) +@@ -591,14 +669,14 @@ extern void __cmpxchg_wrong_size(void) case 2: \ { \ asm volatile("\n" \ @@ -23602,7 +24182,7 @@ index a4a30e4..44891b7 100644 : "i" (-EFAULT), "r" (__new), "1" (__old) \ : "memory" \ ); \ -@@ -599,14 +677,14 @@ extern void __cmpxchg_wrong_size(void) +@@ -607,14 +685,14 @@ extern void __cmpxchg_wrong_size(void) case 4: \ { \ asm volatile("\n" \ @@ -23619,7 +24199,7 @@ index a4a30e4..44891b7 100644 : "i" (-EFAULT), "r" (__new), "1" (__old) \ : "memory" \ ); \ -@@ -618,14 +696,14 @@ extern void __cmpxchg_wrong_size(void) +@@ -626,14 +704,14 @@ extern void __cmpxchg_wrong_size(void) __cmpxchg_wrong_size(); \ \ asm volatile("\n" \ @@ -23636,7 +24216,7 @@ index a4a30e4..44891b7 100644 : "i" (-EFAULT), "r" (__new), "1" (__old) \ : "memory" \ ); \ -@@ -635,6 +713,7 @@ extern void __cmpxchg_wrong_size(void) +@@ -643,6 +721,7 @@ extern void __cmpxchg_wrong_size(void) __cmpxchg_wrong_size(); \ } \ __uaccess_end(); \ @@ -23644,7 +24224,7 @@ index a4a30e4..44891b7 100644 *__uval = __old; \ __ret; \ }) -@@ -658,17 +737,6 @@ extern struct movsl_mask { +@@ -666,17 +745,6 @@ extern struct movsl_mask { #define ARCH_HAS_NOCACHE_UACCESS 1 @@ -23662,7 +24242,7 @@ index a4a30e4..44891b7 100644 #ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS # define copy_user_diag __compiletime_error #else -@@ -678,7 +746,7 @@ unsigned long __must_check _copy_to_user(void __user *to, const void *from, +@@ -686,7 +754,7 @@ unsigned long __must_check _copy_to_user(void __user *to, const void *from, extern void copy_user_diag("copy_from_user() buffer size is too small") copy_from_user_overflow(void); extern void copy_user_diag("copy_to_user() buffer size is too small") @@ -23671,7 +24251,7 @@ index a4a30e4..44891b7 100644 #undef copy_user_diag -@@ -691,7 +759,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow"); +@@ -699,7 +767,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow"); extern void __compiletime_warning("copy_to_user() buffer size is not provably correct") @@ -23680,7 +24260,7 @@ index a4a30e4..44891b7 100644 #define __copy_to_user_overflow(size, count) __copy_to_user_overflow() #else -@@ -706,10 +774,16 @@ __copy_from_user_overflow(int size, unsigned long count) +@@ -714,10 +782,16 @@ __copy_from_user_overflow(int size, unsigned long count) #endif @@ -23698,7 +24278,7 @@ index a4a30e4..44891b7 100644 might_fault(); -@@ -731,12 +805,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n) +@@ -739,12 +813,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n) * case, and do only runtime checking for non-constant sizes. */ @@ -23720,7 +24300,7 @@ index a4a30e4..44891b7 100644 return n; } -@@ -744,17 +821,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n) +@@ -752,17 +829,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n) static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long n) { @@ -23821,12 +24401,12 @@ index 3fe0eac..18dfa8b 100644 #endif /* _ASM_X86_UACCESS_32_H */ diff --git a/arch/x86/include/asm/uaccess_64.h b/arch/x86/include/asm/uaccess_64.h -index b89c34c..93a6bce 100644 +index 3076986..7688db9 100644 --- a/arch/x86/include/asm/uaccess_64.h +++ b/arch/x86/include/asm/uaccess_64.h @@ -10,6 +10,9 @@ #include <asm/alternative.h> - #include <asm/cpufeature.h> + #include <asm/cpufeatures.h> #include <asm/page.h> +#include <asm/pgtable.h> + @@ -24264,10 +24844,10 @@ index 9dafe59..0293c1d 100644 #define BIOS_ROM_BASE 0xffe00000 diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile -index b1b78ff..92eb188 100644 +index 616ebd2..7386ebf 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile -@@ -30,7 +30,7 @@ obj-$(CONFIG_MODIFY_LDT_SYSCALL) += ldt.o +@@ -42,7 +42,7 @@ obj-$(CONFIG_MODIFY_LDT_SYSCALL) += ldt.o obj-y += setup.o x86_init.o i8259.o irqinit.o jump_label.o obj-$(CONFIG_IRQ_WORK) += irq_work.o obj-y += probe_roms.o @@ -24277,7 +24857,7 @@ index b1b78ff..92eb188 100644 obj-$(CONFIG_X86_64) += mcount_64.o obj-$(CONFIG_X86_ESPFIX64) += espfix_64.o diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c -index e759076..441137a 100644 +index 8c2f1ef..e4e5c19 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -1341,7 +1341,7 @@ static void __init acpi_reduced_hw_init(void) @@ -24594,7 +25174,7 @@ index 25f9093..f630040 100644 bp_int3_handler = handler; bp_int3_addr = (u8 *)addr + sizeof(int3); diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c -index 8a5cdda..ef3aabc 100644 +index d356987..ed8a52b 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -177,7 +177,7 @@ int first_system_vector = FIRST_SYSTEM_VECTOR; @@ -24616,7 +25196,7 @@ index 8a5cdda..ef3aabc 100644 apic_printk(APIC_DEBUG, KERN_DEBUG "APIC error on CPU%d: %02x", smp_processor_id(), v); diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c -index 9968f30..b06feae 100644 +index 76f89e2..4a349aaa 100644 --- a/arch/x86/kernel/apic/apic_flat_64.c +++ b/arch/x86/kernel/apic/apic_flat_64.c @@ -25,7 +25,7 @@ @@ -24803,7 +25383,7 @@ index a1242e2..0e7f712 100644 .name = "physical x2apic", .probe = x2apic_phys_probe, diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c -index 624db005..86c508a 100644 +index d7ce96a..99cedd7 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c @@ -374,7 +374,7 @@ static int uv_probe(void) @@ -24816,7 +25396,7 @@ index 624db005..86c508a 100644 .name = "UV large system", .probe = uv_probe, diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c -index 052c9c3..bc22ccdba 100644 +index 9307f18..a43f175 100644 --- a/arch/x86/kernel/apm_32.c +++ b/arch/x86/kernel/apm_32.c @@ -432,7 +432,7 @@ static DEFINE_MUTEX(apm_mutex); @@ -24900,7 +25480,7 @@ index 052c9c3..bc22ccdba 100644 proc_create("apm", 0, NULL, &apm_file_ops); diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c -index 84a7524..e8edc49 100644 +index 5c04246..7492f2f 100644 --- a/arch/x86/kernel/asm-offsets.c +++ b/arch/x86/kernel/asm-offsets.c @@ -32,6 +32,8 @@ void common(void) { @@ -24912,7 +25492,15 @@ index 84a7524..e8edc49 100644 BLANK(); OFFSET(crypto_tfm_ctx_offset, crypto_tfm, __crt_ctx); -@@ -67,8 +69,26 @@ void common(void) { +@@ -59,6 +61,7 @@ void common(void) { + + #ifdef CONFIG_PARAVIRT + BLANK(); ++ OFFSET(PARAVIRT_enabled, pv_info, paravirt_enabled); + OFFSET(PARAVIRT_PATCH_pv_cpu_ops, paravirt_patch_template, pv_cpu_ops); + OFFSET(PARAVIRT_PATCH_pv_irq_ops, paravirt_patch_template, pv_irq_ops); + OFFSET(PV_IRQ_irq_disable, pv_irq_ops, irq_disable); +@@ -66,8 +69,26 @@ void common(void) { OFFSET(PV_CPU_iret, pv_cpu_ops, iret); OFFSET(PV_CPU_read_cr0, pv_cpu_ops, read_cr0); OFFSET(PV_MMU_read_cr2, pv_mmu_ops, read_cr2); @@ -24939,25 +25527,19 @@ index 84a7524..e8edc49 100644 #ifdef CONFIG_XEN BLANK(); OFFSET(XEN_vcpu_info_mask, vcpu_info, evtchn_upcall_mask); -diff --git a/arch/x86/kernel/asm-offsets_64.c b/arch/x86/kernel/asm-offsets_64.c -index f2edafb..460f4e6 100644 ---- a/arch/x86/kernel/asm-offsets_64.c -+++ b/arch/x86/kernel/asm-offsets_64.c -@@ -58,6 +58,7 @@ int main(void) - BLANK(); - #undef ENTRY +@@ -85,4 +106,5 @@ void common(void) { -+ DEFINE(TSS_size, sizeof(struct tss_struct)); - OFFSET(TSS_ist, tss_struct, x86_tss.ist); - OFFSET(TSS_sp0, tss_struct, x86_tss.sp0); BLANK(); + DEFINE(PTREGS_SIZE, sizeof(struct pt_regs)); ++ DEFINE(TSS_size, sizeof(struct tss_struct)); + } diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile -index 5803130..c899b3d 100644 +index 4a8697f..8a13428 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile -@@ -8,10 +8,6 @@ CFLAGS_REMOVE_common.o = -pg - CFLAGS_REMOVE_perf_event.o = -pg - endif +@@ -12,10 +12,6 @@ endif + KCOV_INSTRUMENT_common.o := n + KCOV_INSTRUMENT_perf_event.o := n -# Make sure load_percpu_segment has no stackprotector -nostackp := $(call cc-option, -fno-stack-protector) @@ -24967,10 +25549,10 @@ index 5803130..c899b3d 100644 obj-y += common.o obj-y += rdrand.o diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c -index a07956a..368a2eb 100644 +index 7b76eb6..99cb9cc 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c -@@ -766,7 +766,7 @@ static void init_amd(struct cpuinfo_x86 *c) +@@ -776,7 +776,7 @@ static void init_amd(struct cpuinfo_x86 *c) static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size) { /* AMD errata T13 (order #21922) */ @@ -24980,7 +25562,7 @@ index a07956a..368a2eb 100644 if (c->x86_model == 3 && c->x86_mask == 0) size = 64; diff --git a/arch/x86/kernel/cpu/bugs_64.c b/arch/x86/kernel/cpu/bugs_64.c -index 04f0fe5..3c0598c 100644 +index a972ac4..938c163 100644 --- a/arch/x86/kernel/cpu/bugs_64.c +++ b/arch/x86/kernel/cpu/bugs_64.c @@ -10,6 +10,7 @@ @@ -24992,7 +25574,7 @@ index 04f0fe5..3c0598c 100644 void __init check_bugs(void) { @@ -18,6 +19,7 @@ void __init check_bugs(void) - printk(KERN_INFO "CPU: "); + pr_info("CPU: "); print_cpu_info(&boot_cpu_data); #endif + set_memory_nx((unsigned long)_sinitdata, (__START_KERNEL_map + KERNEL_IMAGE_SIZE - (unsigned long)_sinitdata) >> PAGE_SHIFT); @@ -25000,7 +25582,7 @@ index 04f0fe5..3c0598c 100644 /* diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c -index 37830de..54677f5 100644 +index f45a4b9..4cf549c 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -92,60 +92,6 @@ static const struct cpu_dev default_cpu = { @@ -25064,7 +25646,7 @@ index 37830de..54677f5 100644 static int __init x86_mpx_setup(char *s) { /* require an exact match without trailing characters */ -@@ -287,6 +233,109 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c) +@@ -303,6 +249,109 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c) } } @@ -25172,9 +25754,9 @@ index 37830de..54677f5 100644 +#endif + /* - * Some CPU features depend on higher CPUID levels, which may not always - * be available due to CPUID level capping or broken virtualization -@@ -387,7 +436,7 @@ void switch_to_new_gdt(int cpu) + * Protection Keys are not available in 32-bit mode. + */ +@@ -448,7 +497,7 @@ void switch_to_new_gdt(int cpu) { struct desc_ptr gdt_descr; @@ -25183,7 +25765,7 @@ index 37830de..54677f5 100644 gdt_descr.size = GDT_SIZE - 1; load_gdt(&gdt_descr); /* Reload the per-cpu base */ -@@ -916,6 +965,20 @@ static void identify_cpu(struct cpuinfo_x86 *c) +@@ -1004,6 +1053,20 @@ static void identify_cpu(struct cpuinfo_x86 *c) setup_smep(c); setup_smap(c); @@ -25204,7 +25786,7 @@ index 37830de..54677f5 100644 /* * The vendor-specific functions might have changed features. * Now we do "generic changes." -@@ -990,7 +1053,7 @@ void enable_sep_cpu(void) +@@ -1081,7 +1144,7 @@ void enable_sep_cpu(void) int cpu; cpu = get_cpu(); @@ -25213,7 +25795,7 @@ index 37830de..54677f5 100644 if (!boot_cpu_has(X86_FEATURE_SEP)) goto out; -@@ -1136,10 +1199,12 @@ static __init int setup_disablecpuid(char *arg) +@@ -1227,10 +1290,12 @@ static __init int setup_disablecpuid(char *arg) } __setup("clearcpuid=", setup_disablecpuid); @@ -25229,7 +25811,7 @@ index 37830de..54677f5 100644 DEFINE_PER_CPU_FIRST(union irq_stack_union, irq_stack_union) __aligned(PAGE_SIZE) __visible; -@@ -1251,21 +1316,21 @@ EXPORT_PER_CPU_SYMBOL(current_task); +@@ -1342,21 +1407,21 @@ EXPORT_PER_CPU_SYMBOL(current_task); DEFINE_PER_CPU(int, __preempt_count) = INIT_PREEMPT_COUNT; EXPORT_PER_CPU_SYMBOL(__preempt_count); @@ -25258,7 +25840,7 @@ index 37830de..54677f5 100644 /* * Clear all 6 debug registers: */ -@@ -1341,7 +1406,7 @@ void cpu_init(void) +@@ -1432,7 +1497,7 @@ void cpu_init(void) */ load_ucode_ap(); @@ -25267,7 +25849,7 @@ index 37830de..54677f5 100644 oist = &per_cpu(orig_ist, cpu); #ifdef CONFIG_NUMA -@@ -1373,7 +1438,6 @@ void cpu_init(void) +@@ -1464,7 +1529,6 @@ void cpu_init(void) wrmsrl(MSR_KERNEL_GS_BASE, 0); barrier(); @@ -25275,7 +25857,7 @@ index 37830de..54677f5 100644 x2apic_setup(); /* -@@ -1425,7 +1489,7 @@ void cpu_init(void) +@@ -1516,7 +1580,7 @@ void cpu_init(void) { int cpu = smp_processor_id(); struct task_struct *curr = current; @@ -25285,7 +25867,7 @@ index 37830de..54677f5 100644 wait_for_master_cpu(cpu); diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c -index 0b6c523..54d8406 100644 +index de6626c..c84e8c1 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -519,25 +519,23 @@ cache_private_attrs_is_visible(struct kobject *kobj, @@ -25337,7 +25919,7 @@ index 0b6c523..54d8406 100644 return &cache_private_group; diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c -index a006f4c..9c0afe2 100644 +index f0c921b..2c7b33b 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -47,6 +47,7 @@ @@ -25416,7 +25998,7 @@ index a006f4c..9c0afe2 100644 wait_for_panic(); if (!mca_cfg.monarch_timeout) goto out; -@@ -1671,7 +1671,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code) +@@ -1684,7 +1684,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code) } /* Call the installed machine check handler for this CPU setup. */ @@ -25425,7 +26007,7 @@ index a006f4c..9c0afe2 100644 unexpected_machine_check; /* -@@ -1700,7 +1700,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c) +@@ -1713,7 +1713,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c) return; } @@ -25435,7 +26017,7 @@ index a006f4c..9c0afe2 100644 __mcheck_cpu_init_generic(); __mcheck_cpu_init_vendor(c); -@@ -1731,7 +1733,7 @@ void mcheck_cpu_clear(struct cpuinfo_x86 *c) +@@ -1744,7 +1746,7 @@ void mcheck_cpu_clear(struct cpuinfo_x86 *c) */ static DEFINE_SPINLOCK(mce_chrdev_state_lock); @@ -25444,7 +26026,7 @@ index a006f4c..9c0afe2 100644 static int mce_chrdev_open_exclu; /* already open exclusive? */ static int mce_chrdev_open(struct inode *inode, struct file *file) -@@ -1739,7 +1741,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) +@@ -1752,7 +1754,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) spin_lock(&mce_chrdev_state_lock); if (mce_chrdev_open_exclu || @@ -25453,7 +26035,7 @@ index a006f4c..9c0afe2 100644 spin_unlock(&mce_chrdev_state_lock); return -EBUSY; -@@ -1747,7 +1749,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) +@@ -1760,7 +1762,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) if (file->f_flags & O_EXCL) mce_chrdev_open_exclu = 1; @@ -25462,7 +26044,7 @@ index a006f4c..9c0afe2 100644 spin_unlock(&mce_chrdev_state_lock); -@@ -1758,7 +1760,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file) +@@ -1771,7 +1773,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file) { spin_lock(&mce_chrdev_state_lock); @@ -25471,7 +26053,7 @@ index a006f4c..9c0afe2 100644 mce_chrdev_open_exclu = 0; spin_unlock(&mce_chrdev_state_lock); -@@ -2448,7 +2450,7 @@ static __init void mce_init_banks(void) +@@ -2463,7 +2465,7 @@ static __init void mce_init_banks(void) for (i = 0; i < mca_cfg.banks; i++) { struct mce_bank *b = &mce_banks[i]; @@ -25480,7 +26062,7 @@ index a006f4c..9c0afe2 100644 sysfs_attr_init(&a->attr); a->attr.name = b->attrname; -@@ -2555,7 +2557,7 @@ struct dentry *mce_get_debugfs_dir(void) +@@ -2570,7 +2572,7 @@ struct dentry *mce_get_debugfs_dir(void) static void mce_reset(void) { cpu_missing = 0; @@ -25490,7 +26072,7 @@ index a006f4c..9c0afe2 100644 atomic_set(&mce_callin, 0); atomic_set(&global_nwo, 0); diff --git a/arch/x86/kernel/cpu/mcheck/p5.c b/arch/x86/kernel/cpu/mcheck/p5.c -index 12402e1..9e0f230 100644 +index 2a0717b..7fbc641 100644 --- a/arch/x86/kernel/cpu/mcheck/p5.c +++ b/arch/x86/kernel/cpu/mcheck/p5.c @@ -12,6 +12,7 @@ @@ -25501,7 +26083,7 @@ index 12402e1..9e0f230 100644 /* By default disabled */ int mce_p5_enabled __read_mostly; -@@ -54,7 +55,9 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c) +@@ -52,7 +53,9 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c) if (!cpu_has(c, X86_FEATURE_MCE)) return; @@ -25512,7 +26094,7 @@ index 12402e1..9e0f230 100644 wmb(); diff --git a/arch/x86/kernel/cpu/mcheck/winchip.c b/arch/x86/kernel/cpu/mcheck/winchip.c -index 01dd870..6fd1c59 100644 +index c6a722e..4016140 100644 --- a/arch/x86/kernel/cpu/mcheck/winchip.c +++ b/arch/x86/kernel/cpu/mcheck/winchip.c @@ -11,6 +11,7 @@ @@ -25534,10 +26116,10 @@ index 01dd870..6fd1c59 100644 wmb(); diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c -index 4f4735b..05b4ca6 100644 +index cbb3cf0..f3b73a3 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c -@@ -1012,13 +1012,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device, +@@ -1003,13 +1003,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device, static int get_ucode_user(void *to, const void *from, size_t n) { @@ -25554,11 +26136,11 @@ index 4f4735b..05b4ca6 100644 static void microcode_fini_cpu(int cpu) diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c -index 20e242e..14b1629 100644 +index 10c11b4..18c4d71 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c -@@ -193,7 +193,7 @@ static void __init ms_hyperv_init_platform(void) - mark_tsc_unstable("running on Hyper-V"); +@@ -205,7 +205,7 @@ static void __init ms_hyperv_init_platform(void) + x86_platform.get_nmi_reason = hv_get_nmi_reason; } -const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = { @@ -25567,10 +26149,10 @@ index 20e242e..14b1629 100644 .detect = ms_hyperv_platform, .init_platform = ms_hyperv_init_platform, diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c -index c870af1..173e1cc 100644 +index 19f5736..8f92a72 100644 --- a/arch/x86/kernel/cpu/mtrr/generic.c +++ b/arch/x86/kernel/cpu/mtrr/generic.c -@@ -723,7 +723,8 @@ static DEFINE_RAW_SPINLOCK(set_atomicity_lock); +@@ -722,7 +722,8 @@ static DEFINE_RAW_SPINLOCK(set_atomicity_lock); * The caller must ensure that local interrupts are disabled and * are reenabled after post_set() has been called. */ @@ -25580,7 +26162,7 @@ index c870af1..173e1cc 100644 { unsigned long cr0; -@@ -759,7 +760,8 @@ static void prepare_set(void) __acquires(set_atomicity_lock) +@@ -758,7 +759,8 @@ static void prepare_set(void) __acquires(set_atomicity_lock) wbinvd(); } @@ -25591,7 +26173,7 @@ index c870af1..173e1cc 100644 /* Flush TLBs (no need to flush caches - they are disabled) */ count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL); diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c -index 5c3d149..a052b18 100644 +index 10f8d47..481f5b4 100644 --- a/arch/x86/kernel/cpu/mtrr/main.c +++ b/arch/x86/kernel/cpu/mtrr/main.c @@ -72,7 +72,7 @@ static DEFINE_MUTEX(mtrr_mutex); @@ -25616,521 +26198,11 @@ index 951884d..4796b75 100644 extern int generic_get_free_region(unsigned long base, unsigned long size, int replace_reg); -diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c -index 6532f5b..5de6c88 100644 ---- a/arch/x86/kernel/cpu/perf_event.c -+++ b/arch/x86/kernel/cpu/perf_event.c -@@ -1534,7 +1534,7 @@ static void __init pmu_check_apic(void) - - } - --static struct attribute_group x86_pmu_format_group = { -+static attribute_group_no_const x86_pmu_format_group = { - .name = "format", - .attrs = NULL, - }; -@@ -1642,7 +1642,7 @@ static struct attribute *events_attr[] = { - NULL, - }; - --static struct attribute_group x86_pmu_events_group = { -+static attribute_group_no_const x86_pmu_events_group = { - .name = "events", - .attrs = events_attr, - }; -@@ -2228,7 +2228,7 @@ valid_user_frame(const void __user *fp, unsigned long size) - static unsigned long get_segment_base(unsigned int segment) - { - struct desc_struct *desc; -- int idx = segment >> 3; -+ unsigned int idx = segment >> 3; - - if ((segment & SEGMENT_TI_MASK) == SEGMENT_LDT) { - #ifdef CONFIG_MODIFY_LDT_SYSCALL -@@ -2250,7 +2250,7 @@ static unsigned long get_segment_base(unsigned int segment) - if (idx > GDT_ENTRIES) - return 0; - -- desc = raw_cpu_ptr(gdt_page.gdt) + idx; -+ desc = get_cpu_gdt_table(smp_processor_id()) + idx; - } - - return get_desc_base(desc); -@@ -2355,7 +2355,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) - break; - - perf_callchain_store(entry, frame.return_address); -- fp = (void __user *)frame.next_frame; -+ fp = (void __force_user *)frame.next_frame; - } - pagefault_enable(); - } -diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h -index 98be6d6..b44c81a 100644 ---- a/arch/x86/kernel/cpu/perf_event.h -+++ b/arch/x86/kernel/cpu/perf_event.h -@@ -787,7 +787,7 @@ static inline void set_linear_ip(struct pt_regs *regs, unsigned long ip) - regs->cs = kernel_ip(ip) ? __KERNEL_CS : __USER_CS; - if (regs->flags & X86_VM_MASK) - regs->flags ^= (PERF_EFLAGS_VM | X86_VM_MASK); -- regs->ip = ip; -+ regs->ip = kernel_ip(ip) ? ktva_ktla(ip) : ip; - } - - ssize_t x86_event_sysfs_show(char *page, u64 config, u64 event); -diff --git a/arch/x86/kernel/cpu/perf_event_amd_iommu.c b/arch/x86/kernel/cpu/perf_event_amd_iommu.c -index 97242a9..ba15e8c 100644 ---- a/arch/x86/kernel/cpu/perf_event_amd_iommu.c -+++ b/arch/x86/kernel/cpu/perf_event_amd_iommu.c -@@ -80,12 +80,12 @@ static struct attribute_group amd_iommu_format_group = { - * sysfs events attributes - *---------------------------------------------*/ - struct amd_iommu_event_desc { -- struct kobj_attribute attr; -+ struct device_attribute attr; - const char *event; - }; - --static ssize_t _iommu_event_show(struct kobject *kobj, -- struct kobj_attribute *attr, char *buf) -+static ssize_t _iommu_event_show(struct device *dev, -+ struct device_attribute *attr, char *buf) - { - struct amd_iommu_event_desc *event = - container_of(attr, struct amd_iommu_event_desc, attr); -@@ -402,7 +402,7 @@ static void perf_iommu_del(struct perf_event *event, int flags) - static __init int _init_events_attrs(struct perf_amd_iommu *perf_iommu) - { - struct attribute **attrs; -- struct attribute_group *attr_group; -+ attribute_group_no_const *attr_group; - int i = 0, j; - - while (amd_iommu_v2_event_descs[i].attr.attr.name) -diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c -index 760aec1..3c64694 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel.c -+++ b/arch/x86/kernel/cpu/perf_event_intel.c -@@ -2185,6 +2185,8 @@ __intel_get_event_constraints(struct cpu_hw_events *cpuc, int idx, - } - - static void -+intel_start_scheduling(struct cpu_hw_events *cpuc) __acquires(&cpuc->excl_cntrs->lock); -+static void - intel_start_scheduling(struct cpu_hw_events *cpuc) - { - struct intel_excl_cntrs *excl_cntrs = cpuc->excl_cntrs; -@@ -2194,14 +2196,18 @@ intel_start_scheduling(struct cpu_hw_events *cpuc) - /* - * nothing needed if in group validation mode - */ -- if (cpuc->is_fake || !is_ht_workaround_enabled()) -+ if (cpuc->is_fake || !is_ht_workaround_enabled()) { -+ __acquire(&excl_cntrs->lock); - return; -+ } - - /* - * no exclusion needed - */ -- if (WARN_ON_ONCE(!excl_cntrs)) -+ if (WARN_ON_ONCE(!excl_cntrs)) { -+ __acquire(&excl_cntrs->lock); - return; -+ } - - xl = &excl_cntrs->states[tid]; - -@@ -2241,6 +2247,8 @@ static void intel_commit_scheduling(struct cpu_hw_events *cpuc, int idx, int cnt - } - - static void -+intel_stop_scheduling(struct cpu_hw_events *cpuc) __releases(&cpuc->excl_cntrs->lock); -+static void - intel_stop_scheduling(struct cpu_hw_events *cpuc) - { - struct intel_excl_cntrs *excl_cntrs = cpuc->excl_cntrs; -@@ -2250,13 +2258,18 @@ intel_stop_scheduling(struct cpu_hw_events *cpuc) - /* - * nothing needed if in group validation mode - */ -- if (cpuc->is_fake || !is_ht_workaround_enabled()) -+ if (cpuc->is_fake || !is_ht_workaround_enabled()) { -+ __release(&excl_cntrs->lock); - return; -+ } -+ - /* - * no exclusion needed - */ -- if (WARN_ON_ONCE(!excl_cntrs)) -+ if (WARN_ON_ONCE(!excl_cntrs)) { -+ __release(&excl_cntrs->lock); - return; -+ } - - xl = &excl_cntrs->states[tid]; - -@@ -2439,19 +2452,22 @@ static void intel_put_excl_constraints(struct cpu_hw_events *cpuc, - * unused now. - */ - if (hwc->idx >= 0) { -+ bool sched_started; -+ - xl = &excl_cntrs->states[tid]; -+ sched_started = xl->sched_started; - - /* - * put_constraint may be called from x86_schedule_events() - * which already has the lock held so here make locking - * conditional. - */ -- if (!xl->sched_started) -+ if (!sched_started) - raw_spin_lock(&excl_cntrs->lock); - - xl->state[hwc->idx] = INTEL_EXCL_UNUSED; - -- if (!xl->sched_started) -+ if (!sched_started) - raw_spin_unlock(&excl_cntrs->lock); - } - } -@@ -3360,10 +3376,10 @@ __init int intel_pmu_init(void) - x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3); - - if (boot_cpu_has(X86_FEATURE_PDCM)) { -- u64 capabilities; -+ u64 capabilities = x86_pmu.intel_cap.capabilities; - -- rdmsrl(MSR_IA32_PERF_CAPABILITIES, capabilities); -- x86_pmu.intel_cap.capabilities = capabilities; -+ if (rdmsrl_safe(MSR_IA32_PERF_CAPABILITIES, &x86_pmu.intel_cap.capabilities)) -+ x86_pmu.intel_cap.capabilities = capabilities; - } - - intel_ds_init(); -diff --git a/arch/x86/kernel/cpu/perf_event_intel_bts.c b/arch/x86/kernel/cpu/perf_event_intel_bts.c -index 2cad71d..5f1baf2 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_bts.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_bts.c -@@ -250,7 +250,7 @@ static void bts_event_start(struct perf_event *event, int flags) - __bts_event_start(event); - - /* PMI handler: this counter is running and likely generating PMIs */ -- ACCESS_ONCE(bts->started) = 1; -+ ACCESS_ONCE_RW(bts->started) = 1; - } - - static void __bts_event_stop(struct perf_event *event) -@@ -264,7 +264,7 @@ static void __bts_event_stop(struct perf_event *event) - if (event->hw.state & PERF_HES_STOPPED) - return; - -- ACCESS_ONCE(event->hw.state) |= PERF_HES_STOPPED; -+ ACCESS_ONCE_RW(event->hw.state) |= PERF_HES_STOPPED; - } - - static void bts_event_stop(struct perf_event *event, int flags) -@@ -272,7 +272,7 @@ static void bts_event_stop(struct perf_event *event, int flags) - struct bts_ctx *bts = this_cpu_ptr(&bts_ctx); - - /* PMI handler: don't restart this counter */ -- ACCESS_ONCE(bts->started) = 0; -+ ACCESS_ONCE_RW(bts->started) = 0; - - __bts_event_stop(event); - -diff --git a/arch/x86/kernel/cpu/perf_event_intel_cqm.c b/arch/x86/kernel/cpu/perf_event_intel_cqm.c -index a316ca9..07e219e 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_cqm.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_cqm.c -@@ -1364,7 +1364,9 @@ static int __init intel_cqm_init(void) - goto out; - } - -- event_attr_intel_cqm_llc_scale.event_str = str; -+ pax_open_kernel(); -+ const_cast(event_attr_intel_cqm_llc_scale.event_str) = str; -+ pax_close_kernel(); - - ret = intel_cqm_setup_rmid_cache(); - if (ret) -diff --git a/arch/x86/kernel/cpu/perf_event_intel_cstate.c b/arch/x86/kernel/cpu/perf_event_intel_cstate.c -index 75a38b5..36cb0a9 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_cstate.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_cstate.c -@@ -92,14 +92,14 @@ - #include "perf_event.h" - - #define DEFINE_CSTATE_FORMAT_ATTR(_var, _name, _format) \ --static ssize_t __cstate_##_var##_show(struct kobject *kobj, \ -- struct kobj_attribute *attr, \ -+static ssize_t __cstate_##_var##_show(struct device *dev, \ -+ struct device_attribute *attr, \ - char *page) \ - { \ - BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ - return sprintf(page, _format "\n"); \ - } \ --static struct kobj_attribute format_attr_##_var = \ -+static struct device_attribute format_attr_##_var = \ - __ATTR(_name, 0444, __cstate_##_var##_show, NULL) - - static ssize_t cstate_get_attr_cpumask(struct device *dev, -diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c -index 9551401..649b91c 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_ds.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c -@@ -598,7 +598,7 @@ int intel_pmu_drain_bts_buffer(void) - - static inline void intel_pmu_drain_pebs_buffer(void) - { -- struct pt_regs regs; -+ struct pt_regs regs = {}; - - x86_pmu.drain_pebs(®s); - } -@@ -876,7 +876,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs) - struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events); - unsigned long from = cpuc->lbr_entries[0].from; - unsigned long old_to, to = cpuc->lbr_entries[0].to; -- unsigned long ip = regs->ip; -+ unsigned long ip = ktva_ktla(regs->ip); - int is_64bit = 0; - void *kaddr; - int size; -@@ -928,6 +928,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs) - } else { - kaddr = (void *)to; - } -+ kaddr = (void *)ktva_ktla((unsigned long)kaddr); - - do { - struct insn insn; -@@ -1076,7 +1077,7 @@ static void setup_pebs_sample_data(struct perf_event *event, - } - - if (event->attr.precise_ip > 1 && x86_pmu.intel_cap.pebs_format >= 2) { -- regs->ip = pebs->real_ip; -+ set_linear_ip(regs, pebs->real_ip); - regs->flags |= PERF_EFLAGS_EXACT; - } else if (event->attr.precise_ip > 1 && intel_pmu_pebs_fixup_ip(regs)) - regs->flags |= PERF_EFLAGS_EXACT; -diff --git a/arch/x86/kernel/cpu/perf_event_intel_lbr.c b/arch/x86/kernel/cpu/perf_event_intel_lbr.c -index 653f88d..11b6b78 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_lbr.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_lbr.c -@@ -704,7 +704,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort) - * Ensure we don't blindy read any address by validating it is - * a known text address. - */ -- if (kernel_text_address(from)) { -+ if (kernel_text_address(ktva_ktla(from))) { - addr = (void *)from; - /* - * Assume we can get the maximum possible size -@@ -726,7 +726,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort) - #ifdef CONFIG_X86_64 - is64 = kernel_ip((unsigned long)addr) || !test_thread_flag(TIF_IA32); - #endif -- insn_init(&insn, addr, bytes_read, is64); -+ insn_init(&insn, (void *)ktva_ktla((unsigned long)addr), bytes_read, is64); - insn_get_opcode(&insn); - if (!insn.opcode.got) - return X86_BR_ABORT; -diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c -index a5286d0..79c220a 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_pt.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c -@@ -133,14 +133,10 @@ static const struct attribute_group *pt_attr_groups[] = { - - static int __init pt_pmu_hw_init(void) - { -- struct dev_ext_attribute *de_attrs; -- struct attribute **attrs; -- size_t size; -- int ret; -+ static struct dev_ext_attribute de_attrs[ARRAY_SIZE(pt_caps)]; -+ static struct attribute *attrs[ARRAY_SIZE(pt_caps)]; - long i; - -- attrs = NULL; -- - for (i = 0; i < PT_CPUID_LEAVES; i++) { - cpuid_count(20, i, - &pt_pmu.caps[CR_EAX + i*PT_CPUID_REGS_NUM], -@@ -149,39 +145,25 @@ static int __init pt_pmu_hw_init(void) - &pt_pmu.caps[CR_EDX + i*PT_CPUID_REGS_NUM]); - } - -- ret = -ENOMEM; -- size = sizeof(struct attribute *) * (ARRAY_SIZE(pt_caps)+1); -- attrs = kzalloc(size, GFP_KERNEL); -- if (!attrs) -- goto fail; -- -- size = sizeof(struct dev_ext_attribute) * (ARRAY_SIZE(pt_caps)+1); -- de_attrs = kzalloc(size, GFP_KERNEL); -- if (!de_attrs) -- goto fail; -- -+ pax_open_kernel(); - for (i = 0; i < ARRAY_SIZE(pt_caps); i++) { -- struct dev_ext_attribute *de_attr = de_attrs + i; -+ struct dev_ext_attribute *de_attr = &de_attrs[i]; - -- de_attr->attr.attr.name = pt_caps[i].name; -+ const_cast(de_attr->attr.attr.name) = pt_caps[i].name; - - sysfs_attr_init(&de_attr->attr.attr); - -- de_attr->attr.attr.mode = S_IRUGO; -- de_attr->attr.show = pt_cap_show; -- de_attr->var = (void *)i; -+ const_cast(de_attr->attr.attr.mode) = S_IRUGO; -+ const_cast(de_attr->attr.show) = pt_cap_show; -+ const_cast(de_attr->var) = (void *)i; - - attrs[i] = &de_attr->attr.attr; - } - -- pt_cap_group.attrs = attrs; -+ const_cast(pt_cap_group.attrs) = attrs; -+ pax_close_kernel(); - - return 0; -- --fail: -- kfree(attrs); -- -- return ret; - } - - #define RTIT_CTL_CYC_PSB (RTIT_CTL_CYCLEACC | \ -@@ -999,7 +981,7 @@ static void pt_event_start(struct perf_event *event, int mode) - return; - } - -- ACCESS_ONCE(pt->handle_nmi) = 1; -+ ACCESS_ONCE_RW(pt->handle_nmi) = 1; - event->hw.state = 0; - - pt_config_buffer(buf->cur->table, buf->cur_idx, -@@ -1015,7 +997,7 @@ static void pt_event_stop(struct perf_event *event, int mode) - * Protect against the PMI racing with disabling wrmsr, - * see comment in intel_pt_interrupt(). - */ -- ACCESS_ONCE(pt->handle_nmi) = 0; -+ ACCESS_ONCE_RW(pt->handle_nmi) = 0; - pt_config_start(false); - - if (event->hw.state == PERF_HES_STOPPED) -diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c -index 24a351a..d429cd7 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c -@@ -97,14 +97,14 @@ static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = { - #define RAPL_EVENT_MASK 0xFFULL - - #define DEFINE_RAPL_FORMAT_ATTR(_var, _name, _format) \ --static ssize_t __rapl_##_var##_show(struct kobject *kobj, \ -- struct kobj_attribute *attr, \ -+static ssize_t __rapl_##_var##_show(struct device *dev, \ -+ struct device_attribute *attr, \ - char *page) \ - { \ - BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ - return sprintf(page, _format "\n"); \ - } \ --static struct kobj_attribute format_attr_##_var = \ -+static struct device_attribute format_attr_##_var = \ - __ATTR(_name, 0444, __rapl_##_var##_show, NULL) - - #define RAPL_CNTR_WIDTH 32 /* 32-bit rapl counters */ -@@ -483,7 +483,7 @@ static struct attribute *rapl_events_knl_attr[] = { - NULL, - }; - --static struct attribute_group rapl_pmu_events_group = { -+static attribute_group_no_const rapl_pmu_events_group __read_only = { - .name = "events", - .attrs = NULL, /* patched at runtime */ - }; -diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c -index 3bf41d4..b5dc2c2 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c -+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c -@@ -74,8 +74,8 @@ end: - return map; - } - --ssize_t uncore_event_show(struct kobject *kobj, -- struct kobj_attribute *attr, char *buf) -+ssize_t uncore_event_show(struct device *dev, -+ struct device_attribute *attr, char *buf) - { - struct uncore_event_desc *event = - container_of(attr, struct uncore_event_desc, attr); -@@ -785,7 +785,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types) - static int __init uncore_type_init(struct intel_uncore_type *type) - { - struct intel_uncore_pmu *pmus; -- struct attribute_group *attr_group; -+ attribute_group_no_const *attr_group; - struct attribute **attrs; - int i, j; - -diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h -index a7086b8..ccac9b1 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h -+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h -@@ -113,9 +113,9 @@ struct intel_uncore_box { - #define UNCORE_BOX_FLAG_INITIATED 0 - - struct uncore_event_desc { -- struct kobj_attribute attr; -+ struct device_attribute attr; - const char *config; --}; -+} __do_const; - - struct pci2phy_map { - struct list_head list; -@@ -126,8 +126,8 @@ struct pci2phy_map { - int uncore_pcibus_to_physid(struct pci_bus *bus); - struct pci2phy_map *__find_pci2phy_map(int segment); - --ssize_t uncore_event_show(struct kobject *kobj, -- struct kobj_attribute *attr, char *buf); -+ssize_t uncore_event_show(struct device *dev, -+ struct device_attribute *attr, char *buf); - - #define INTEL_UNCORE_EVENT_DESC(_name, _config) \ - { \ -@@ -136,14 +136,14 @@ ssize_t uncore_event_show(struct kobject *kobj, - } - - #define DEFINE_UNCORE_FORMAT_ATTR(_var, _name, _format) \ --static ssize_t __uncore_##_var##_show(struct kobject *kobj, \ -- struct kobj_attribute *attr, \ -+static ssize_t __uncore_##_var##_show(struct device *dev, \ -+ struct device_attribute *attr, \ - char *page) \ - { \ - BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ - return sprintf(page, _format "\n"); \ - } \ --static struct kobj_attribute format_attr_##_var = \ -+static struct device_attribute format_attr_##_var = \ - __ATTR(_name, 0444, __uncore_##_var##_show, NULL) - - static inline unsigned uncore_pci_box_ctl(struct intel_uncore_box *box) diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c -index 628a059..83bced6 100644 +index 364e583..1124b95 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c -@@ -137,7 +137,7 @@ static bool __init vmware_legacy_x2apic_available(void) +@@ -136,7 +136,7 @@ static bool __init vmware_legacy_x2apic_available(void) (eax & (1 << VMWARE_PORT_CMD_LEGACY_X2APIC)) != 0; } @@ -26188,7 +26260,7 @@ index f6dfd93..892ade4 100644 .__cr3 = __pa_nodebug(swapper_pg_dir), diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c -index 9c30acf..8cf2411 100644 +index 8efa57a..9750a3d 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c @@ -2,6 +2,9 @@ @@ -26292,8 +26364,8 @@ index 9c30acf..8cf2411 100644 unsigned long addr = *ret_addr; if (!__kernel_text_address(addr)) -@@ -138,7 +137,7 @@ print_context_stack_bp(struct thread_info *tinfo, - ops->address(data, addr, 1); +@@ -139,7 +138,7 @@ print_context_stack_bp(struct thread_info *tinfo, + break; frame = frame->next_frame; ret_addr = &frame->return_address; - print_ftrace_graph_addr(addr, data, ops, tinfo, graph); @@ -26301,7 +26373,7 @@ index 9c30acf..8cf2411 100644 } return (unsigned long)frame; -@@ -226,6 +225,8 @@ unsigned long oops_begin(void) +@@ -228,6 +227,8 @@ unsigned long oops_begin(void) EXPORT_SYMBOL_GPL(oops_begin); NOKPROBE_SYMBOL(oops_begin); @@ -26310,7 +26382,7 @@ index 9c30acf..8cf2411 100644 void oops_end(unsigned long flags, struct pt_regs *regs, int signr) { if (regs && kexec_should_crash(current)) -@@ -247,7 +248,10 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr) +@@ -249,7 +250,10 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr) panic("Fatal exception in interrupt"); if (panic_on_oops) panic("Fatal exception"); @@ -26536,10 +26608,10 @@ index 5f1c626..059e830 100644 +EXPORT_SYMBOL(pax_check_alloca); +#endif diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c -index 569c1e4..76d787d 100644 +index 621b501..9e7da88 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c -@@ -803,8 +803,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void) +@@ -804,8 +804,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void) static void early_panic(char *msg) { @@ -26551,7 +26623,7 @@ index 569c1e4..76d787d 100644 static int userdef __initdata; diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c -index 21bf924..49a5fea3 100644 +index 8a12199..e63bebf 100644 --- a/arch/x86/kernel/early_printk.c +++ b/arch/x86/kernel/early_printk.c @@ -7,6 +7,7 @@ @@ -26660,10 +26732,10 @@ index 4d38416..ec7cc4e 100644 unlock_done: mutex_unlock(&espfix_init_mutex); diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c -index d5804ad..4c36ff6 100644 +index 8e37cc8..0ce76b8 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c -@@ -127,7 +127,7 @@ void __kernel_fpu_end(void) +@@ -131,7 +131,7 @@ void __kernel_fpu_end(void) struct fpu *fpu = ¤t->thread.fpu; if (fpu->fpregs_active) @@ -26672,7 +26744,16 @@ index d5804ad..4c36ff6 100644 else __fpregs_deactivate_hw(); -@@ -238,7 +238,7 @@ static void fpu_copy(struct fpu *dst_fpu, struct fpu *src_fpu) +@@ -195,7 +195,7 @@ void fpu__save(struct fpu *fpu) + if (fpu->fpregs_active) { + if (!copy_fpregs_to_fpstate(fpu)) { + if (use_eager_fpu()) +- copy_kernel_to_fpregs(&fpu->state); ++ copy_kernel_to_fpregs(fpu->state); + else + fpregs_deactivate(fpu); + } +@@ -247,7 +247,7 @@ int fpu__copy(struct fpu *dst_fpu, struct fpu *src_fpu) * leak into the child task: */ if (use_eager_fpu()) @@ -26681,16 +26762,20 @@ index d5804ad..4c36ff6 100644 /* * Save current FPU registers directly into the child -@@ -258,7 +258,7 @@ static void fpu_copy(struct fpu *dst_fpu, struct fpu *src_fpu) +@@ -266,10 +266,10 @@ int fpu__copy(struct fpu *dst_fpu, struct fpu *src_fpu) */ preempt_disable(); if (!copy_fpregs_to_fpstate(dst_fpu)) { - memcpy(&src_fpu->state, &dst_fpu->state, xstate_size); + memcpy(src_fpu->state, dst_fpu->state, xstate_size); - fpregs_deactivate(src_fpu); + + if (use_eager_fpu()) +- copy_kernel_to_fpregs(&src_fpu->state); ++ copy_kernel_to_fpregs(src_fpu->state); + else + fpregs_deactivate(src_fpu); } - preempt_enable(); -@@ -285,7 +285,7 @@ void fpu__activate_curr(struct fpu *fpu) +@@ -287,7 +287,7 @@ void fpu__activate_curr(struct fpu *fpu) WARN_ON_FPU(fpu != ¤t->thread.fpu); if (!fpu->fpstate_active) { @@ -26699,7 +26784,7 @@ index d5804ad..4c36ff6 100644 /* Safe to do for the current task: */ fpu->fpstate_active = 1; -@@ -311,7 +311,7 @@ void fpu__activate_fpstate_read(struct fpu *fpu) +@@ -313,7 +313,7 @@ void fpu__activate_fpstate_read(struct fpu *fpu) fpu__save(fpu); } else { if (!fpu->fpstate_active) { @@ -26708,7 +26793,7 @@ index d5804ad..4c36ff6 100644 /* Safe to do for current and for stopped child tasks: */ fpu->fpstate_active = 1; -@@ -344,7 +344,7 @@ void fpu__activate_fpstate_write(struct fpu *fpu) +@@ -346,7 +346,7 @@ void fpu__activate_fpstate_write(struct fpu *fpu) /* Invalidate any lazy state: */ fpu->last_cpu = -1; } else { @@ -26717,7 +26802,16 @@ index d5804ad..4c36ff6 100644 /* Safe to do for stopped child tasks: */ fpu->fpstate_active = 1; -@@ -368,7 +368,7 @@ void fpu__restore(struct fpu *fpu) +@@ -407,7 +407,7 @@ void fpu__current_fpstate_write_end(void) + * an XRSTOR if they are active. + */ + if (fpregs_active()) +- copy_kernel_to_fpregs(&fpu->state); ++ copy_kernel_to_fpregs(fpu->state); + + /* + * Our update is done and the fpregs/fpstate are in sync +@@ -433,7 +433,7 @@ void fpu__restore(struct fpu *fpu) /* Avoid __kernel_fpu_begin() right after fpregs_activate() */ kernel_fpu_disable(); fpregs_activate(fpu); @@ -26726,7 +26820,7 @@ index d5804ad..4c36ff6 100644 fpu->counter++; kernel_fpu_enable(); } -@@ -444,25 +444,25 @@ void fpu__clear(struct fpu *fpu) +@@ -509,25 +509,25 @@ void fpu__clear(struct fpu *fpu) static inline unsigned short get_fpu_cwd(struct fpu *fpu) { if (cpu_has_fxsr) { @@ -26758,7 +26852,7 @@ index d5804ad..4c36ff6 100644 return MXCSR_DEFAULT; } diff --git a/arch/x86/kernel/fpu/init.c b/arch/x86/kernel/fpu/init.c -index bd08fb7..dc29a0a 100644 +index 54c86ff..703757b 100644 --- a/arch/x86/kernel/fpu/init.c +++ b/arch/x86/kernel/fpu/init.c @@ -45,7 +45,7 @@ static void fpu__init_cpu_generic(void) @@ -26823,7 +26917,7 @@ index bd08fb7..dc29a0a 100644 /* * Set up the xstate_size based on the legacy FPU context size. -@@ -400,7 +356,6 @@ void __init fpu__init_system(struct cpuinfo_x86 *c) +@@ -397,7 +353,6 @@ void __init fpu__init_system(struct cpuinfo_x86 *c) fpu__init_system_generic(); fpu__init_system_xstate_size_legacy(); fpu__init_system_xstate(); @@ -26832,7 +26926,7 @@ index bd08fb7..dc29a0a 100644 fpu__init_system_ctx_switch(); } diff --git a/arch/x86/kernel/fpu/regset.c b/arch/x86/kernel/fpu/regset.c -index 0bc3490..5cfa5c0 100644 +index 8bd1c00..765a913 100644 --- a/arch/x86/kernel/fpu/regset.c +++ b/arch/x86/kernel/fpu/regset.c @@ -37,7 +37,7 @@ int xfpregs_get(struct task_struct *target, const struct user_regset *regset, @@ -27021,10 +27115,10 @@ index 31c6a60..523f27e 100644 } else { sanitize_restored_xstate(tsk, &env, xfeatures, fx_only); diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c -index d425cda5..011b570 100644 +index b48ef35..10f3b79 100644 --- a/arch/x86/kernel/fpu/xstate.c +++ b/arch/x86/kernel/fpu/xstate.c -@@ -110,14 +110,14 @@ EXPORT_SYMBOL_GPL(cpu_has_xfeatures); +@@ -122,14 +122,14 @@ EXPORT_SYMBOL_GPL(cpu_has_xfeatures); */ void fpstate_sanitize_xstate(struct fpu *fpu) { @@ -27041,15 +27135,44 @@ index d425cda5..011b570 100644 /* * None of the feature bits are in init state. So nothing else -@@ -748,5 +748,5 @@ const void *get_xsave_field_ptr(int xsave_state) +@@ -775,7 +775,7 @@ const void *get_xsave_field_ptr(int xsave_state) */ fpu__save(fpu); - return get_xsave_addr(&fpu->state.xsave, xsave_state); + return get_xsave_addr(&fpu->state->xsave, xsave_state); } + + +@@ -808,7 +808,7 @@ static void fpu__xfeature_set_non_init(struct xregs_state *xsave, + static void fpu__xfeature_set_state(int xstate_feature_mask, + void *xstate_feature_src, size_t len) + { +- struct xregs_state *xsave = ¤t->thread.fpu.state.xsave; ++ struct xregs_state *xsave = ¤t->thread.fpu.state->xsave; + struct fpu *fpu = ¤t->thread.fpu; + void *dst; + +@@ -836,7 +836,7 @@ static void fpu__xfeature_set_state(int xstate_feature_mask, + } + + /* find the location in the xsave buffer of the desired state */ +- dst = __raw_xsave_addr(&fpu->state.xsave, xstate_feature_mask); ++ dst = __raw_xsave_addr(&fpu->state->xsave, xstate_feature_mask); + + /* + * Make sure that the pointer being passed in did not +@@ -874,7 +874,7 @@ out: + int arch_set_user_pkey_access(struct task_struct *tsk, int pkey, + unsigned long init_val) + { +- struct xregs_state *xsave = &tsk->thread.fpu.state.xsave; ++ struct xregs_state *xsave = &tsk->thread.fpu.state->xsave; + struct pkru_state *old_pkru_state; + struct pkru_state new_pkru_state; + int pkey_shift = (pkey * PKRU_BITS_PER_PKEY); diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c -index 29408d6..cd88f18 100644 +index d036cfb..cb4c991 100644 --- a/arch/x86/kernel/ftrace.c +++ b/arch/x86/kernel/ftrace.c @@ -89,7 +89,7 @@ static unsigned long text_ip_addr(unsigned long ip) @@ -27102,7 +27225,7 @@ index 29408d6..cd88f18 100644 } #else /* Trampolines can only be created if modules are supported */ -@@ -764,7 +766,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) +@@ -763,7 +765,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) *tramp_size = size + MCOUNT_INSN_SIZE + sizeof(void *); /* Copy ftrace_caller onto the trampoline memory */ @@ -27112,15 +27235,15 @@ index 29408d6..cd88f18 100644 if (WARN_ON(ret < 0)) { tramp_free(trampoline); return 0; -@@ -774,6 +778,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) +@@ -773,6 +777,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) - /* The trampoline ends with a jmp to ftrace_return */ - jmp = ftrace_jmp_replace(ip, (unsigned long)ftrace_return); + /* The trampoline ends with a jmp to ftrace_epilogue */ + jmp = ftrace_jmp_replace(ip, (unsigned long)ftrace_epilogue); + pax_open_kernel(); memcpy(trampoline + size, jmp, MCOUNT_INSN_SIZE); /* -@@ -786,6 +791,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) +@@ -785,6 +790,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) ptr = (unsigned long *)(trampoline + size + MCOUNT_INSN_SIZE); *ptr = (unsigned long)ops; @@ -27128,7 +27251,7 @@ index 29408d6..cd88f18 100644 op_offset -= start_offset; memcpy(&op_ptr, trampoline + op_offset, OP_REF_SIZE); -@@ -803,7 +809,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) +@@ -802,7 +808,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) op_ptr.offset = offset; /* put in the new offset to the ftrace_ops */ @@ -27139,10 +27262,10 @@ index 29408d6..cd88f18 100644 /* ALLOC_TRAMP flags lets us know we created it */ ops->flags |= FTRACE_OPS_FL_ALLOC_TRAMP; diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c -index 2c0f340..76c1d24 100644 +index 1f4422d..995e17d 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c -@@ -68,12 +68,12 @@ again: +@@ -62,12 +62,12 @@ again: pgd = *pgd_p; /* @@ -27158,10 +27281,10 @@ index 2c0f340..76c1d24 100644 else { if (next_early_pgt >= EARLY_DYNAMIC_PAGE_TABLES) { reset_early_page_tables(); -@@ -83,13 +83,13 @@ again: +@@ -76,13 +76,13 @@ again: + pud_p = (pudval_t *)early_dynamic_pgts[next_early_pgt++]; - for (i = 0; i < PTRS_PER_PUD; i++) - pud_p[i] = 0; + memset(pud_p, 0, sizeof(*pud_p) * PTRS_PER_PUD); - *pgd_p = (pgdval_t)pud_p - __START_KERNEL_map + phys_base + _KERNPG_TABLE; + *pgd_p = (pgdval_t)__pa(pud_p) + _KERNPG_TABLE; } @@ -27174,16 +27297,16 @@ index 2c0f340..76c1d24 100644 else { if (next_early_pgt >= EARLY_DYNAMIC_PAGE_TABLES) { reset_early_page_tables(); -@@ -99,7 +99,7 @@ again: +@@ -91,7 +91,7 @@ again: + pmd_p = (pmdval_t *)early_dynamic_pgts[next_early_pgt++]; - for (i = 0; i < PTRS_PER_PMD; i++) - pmd_p[i] = 0; + memset(pmd_p, 0, sizeof(*pmd_p) * PTRS_PER_PMD); - *pud_p = (pudval_t)pmd_p - __START_KERNEL_map + phys_base + _KERNPG_TABLE; + *pud_p = (pudval_t)__pa(pmd_p) + _KERNPG_TABLE; } pmd = (physaddr & PMD_MASK) + early_pmd_flags; pmd_p[pmd_index(address)] = pmd; -@@ -163,8 +163,6 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data) +@@ -155,8 +155,6 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data) clear_bss(); @@ -27193,7 +27316,7 @@ index 2c0f340..76c1d24 100644 for (i = 0; i < NUM_EXCEPTION_VECTORS; i++) diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S -index 6bc9ae2..51f7c58 100644 +index af11129..e506d32 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S @@ -27,6 +27,12 @@ @@ -27622,20 +27745,20 @@ index 6bc9ae2..51f7c58 100644 + .fill PAGE_SIZE_asm - GDT_SIZE,1,0 + .endr diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S -index ffdc0e8..1827c62 100644 +index 22fbf9d..1137e22 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -20,6 +20,8 @@ #include <asm/processor-flags.h> #include <asm/percpu.h> #include <asm/nops.h> -+#include <asm/cpufeature.h> ++#include <asm/cpufeatures.h> +#include <asm/alternative-asm.h> #ifdef CONFIG_PARAVIRT #include <asm/asm-offsets.h> -@@ -41,6 +43,12 @@ L4_PAGE_OFFSET = pgd_index(__PAGE_OFFSET) - L3_PAGE_OFFSET = pud_index(__PAGE_OFFSET) +@@ -40,6 +42,12 @@ + L4_PAGE_OFFSET = pgd_index(__PAGE_OFFSET) L4_START_KERNEL = pgd_index(__START_KERNEL_map) L3_START_KERNEL = pud_index(__START_KERNEL_map) +L4_VMALLOC_START = pgd_index(VMALLOC_START) @@ -27647,7 +27770,7 @@ index ffdc0e8..1827c62 100644 .text __HEAD -@@ -92,11 +100,36 @@ startup_64: +@@ -89,11 +97,36 @@ startup_64: * Fixup the physical addresses in the page table */ addq %rbp, early_level4_pgt + (L4_START_KERNEL*8)(%rip) @@ -27686,7 +27809,7 @@ index ffdc0e8..1827c62 100644 /* * Set up the identity mapping for the switchover. These -@@ -180,11 +213,12 @@ ENTRY(secondary_startup_64) +@@ -177,11 +210,12 @@ ENTRY(secondary_startup_64) /* Sanitize CPU configuration */ call verify_cpu @@ -27701,7 +27824,7 @@ index ffdc0e8..1827c62 100644 movq %rcx, %cr4 /* Setup early boot stage 4 level pagetables. */ -@@ -205,10 +239,24 @@ ENTRY(secondary_startup_64) +@@ -202,10 +236,24 @@ ENTRY(secondary_startup_64) movl $MSR_EFER, %ecx rdmsr btsl $_EFER_SCE, %eax /* Enable System Call */ @@ -27727,7 +27850,7 @@ index ffdc0e8..1827c62 100644 1: wrmsr /* Make changes effective */ /* Setup cr0 */ -@@ -288,6 +336,7 @@ ENTRY(secondary_startup_64) +@@ -285,6 +333,7 @@ ENTRY(secondary_startup_64) * REX.W + FF /5 JMP m16:64 Jump far, absolute indirect, * address given in m16:64. */ @@ -27735,7 +27858,7 @@ index ffdc0e8..1827c62 100644 movq initial_code(%rip),%rax pushq $0 # fake return address to stop unwinder pushq $__KERNEL_CS # set correct cs -@@ -321,7 +370,7 @@ ENDPROC(start_cpu0) +@@ -318,7 +367,7 @@ ENDPROC(start_cpu0) .quad INIT_PER_CPU_VAR(irq_stack_union) GLOBAL(stack_start) @@ -27744,7 +27867,7 @@ index ffdc0e8..1827c62 100644 .word 0 __FINITDATA -@@ -401,7 +450,7 @@ early_idt_handler_common: +@@ -398,7 +447,7 @@ early_idt_handler_common: call dump_stack #ifdef CONFIG_KALLSYMS leaq early_idt_ripmsg(%rip),%rdi @@ -27753,7 +27876,7 @@ index ffdc0e8..1827c62 100644 call __print_symbol #endif #endif /* EARLY_PRINTK */ -@@ -430,6 +479,7 @@ ENDPROC(early_idt_handler_common) +@@ -427,6 +476,7 @@ ENDPROC(early_idt_handler_common) early_recursion_flag: .long 0 @@ -27761,7 +27884,7 @@ index ffdc0e8..1827c62 100644 #ifdef CONFIG_EARLY_PRINTK early_idt_msg: .asciz "PANIC: early exception %02lx rip %lx:%lx error %lx cr2 %lx\n" -@@ -452,40 +502,70 @@ GLOBAL(name) +@@ -449,40 +499,70 @@ GLOBAL(name) __INITDATA NEXT_PAGE(early_level4_pgt) .fill 511,8,0 @@ -27844,7 +27967,7 @@ index ffdc0e8..1827c62 100644 NEXT_PAGE(level2_kernel_pgt) /* -@@ -502,31 +582,79 @@ NEXT_PAGE(level2_kernel_pgt) +@@ -499,31 +579,79 @@ NEXT_PAGE(level2_kernel_pgt) KERNEL_IMAGE_SIZE/PMD_SIZE) NEXT_PAGE(level2_fixmap_pgt) @@ -28293,7 +28416,7 @@ index e565e0e..fdfeb45 100644 } memcpy(&code, ideal_nops[NOP_ATOMIC5], JUMP_LABEL_NOP_SIZE); diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c -index 44256a6..61d5bfe 100644 +index 2da6ee9..4cbe3af 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c @@ -228,7 +228,10 @@ static void kgdb_correct_hw_break(void) @@ -28332,8 +28455,8 @@ index 44256a6..61d5bfe 100644 if (user_mode(regs)) return single_step_cont(regs, args); break; -@@ -755,11 +758,11 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt) - #endif /* CONFIG_DEBUG_RODATA */ +@@ -753,11 +756,11 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt) + char opc[BREAK_INSTR_SIZE]; bpt->type = BP_BREAKPOINT; - err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr, @@ -28344,9 +28467,9 @@ index 44256a6..61d5bfe 100644 - err = probe_kernel_write((char *)bpt->bpt_addr, + err = probe_kernel_write((void *)ktla_ktva(bpt->bpt_addr), arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE); - #ifdef CONFIG_DEBUG_RODATA if (!err) -@@ -772,7 +775,7 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt) + return err; +@@ -769,7 +772,7 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt) return -EBUSY; text_poke((void *)bpt->bpt_addr, arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE); @@ -28355,7 +28478,7 @@ index 44256a6..61d5bfe 100644 if (err) return err; if (memcmp(opc, arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE)) -@@ -797,13 +800,13 @@ int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt) +@@ -793,13 +796,13 @@ int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt) if (mutex_is_locked(&text_mutex)) goto knl_write; text_poke((void *)bpt->bpt_addr, bpt->saved_instr, BREAK_INSTR_SIZE); @@ -28364,18 +28487,18 @@ index 44256a6..61d5bfe 100644 if (err || memcmp(opc, bpt->saved_instr, BREAK_INSTR_SIZE)) goto knl_write; return err; + knl_write: - #endif /* CONFIG_DEBUG_RODATA */ - return probe_kernel_write((char *)bpt->bpt_addr, + return probe_kernel_write((void *)ktla_ktva(bpt->bpt_addr), (char *)bpt->saved_instr, BREAK_INSTR_SIZE); } diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c -index 1deffe6..3be342a 100644 +index ae703ac..d510d8a 100644 --- a/arch/x86/kernel/kprobes/core.c +++ b/arch/x86/kernel/kprobes/core.c -@@ -120,9 +120,12 @@ __synthesize_relative_insn(void *from, void *to, u8 op) +@@ -121,9 +121,12 @@ __synthesize_relative_insn(void *from, void *to, u8 op) s32 raddr; } __packed *insn; @@ -28389,7 +28512,7 @@ index 1deffe6..3be342a 100644 } /* Insert a jump instruction at address 'from', which jumps to address 'to'.*/ -@@ -168,7 +171,7 @@ int can_boost(kprobe_opcode_t *opcodes) +@@ -169,7 +172,7 @@ int can_boost(kprobe_opcode_t *opcodes) kprobe_opcode_t opcode; kprobe_opcode_t *orig_opcodes = opcodes; @@ -28398,7 +28521,7 @@ index 1deffe6..3be342a 100644 return 0; /* Page fault may occur on this address. */ retry: -@@ -260,12 +263,12 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) +@@ -261,12 +264,12 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) * Fortunately, we know that the original code is the ideal 5-byte * long NOP. */ @@ -28413,7 +28536,7 @@ index 1deffe6..3be342a 100644 } /* -@@ -367,7 +370,9 @@ int __copy_instruction(u8 *dest, u8 *src) +@@ -368,7 +371,9 @@ int __copy_instruction(u8 *dest, u8 *src) /* Another subsystem puts a breakpoint, failed to recover */ if (insn.opcode.bytes[0] == BREAKPOINT_INSTRUCTION) return 0; @@ -28423,7 +28546,7 @@ index 1deffe6..3be342a 100644 #ifdef CONFIG_X86_64 if (insn_rip_relative(&insn)) { -@@ -394,7 +399,9 @@ int __copy_instruction(u8 *dest, u8 *src) +@@ -395,7 +400,9 @@ int __copy_instruction(u8 *dest, u8 *src) return 0; } disp = (u8 *) dest + insn_offset_displacement(&insn); @@ -28433,7 +28556,7 @@ index 1deffe6..3be342a 100644 } #endif return length; -@@ -536,7 +543,7 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs, +@@ -537,7 +544,7 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs, * nor set current_kprobe, because it doesn't use single * stepping. */ @@ -28442,7 +28565,7 @@ index 1deffe6..3be342a 100644 preempt_enable_no_resched(); return; } -@@ -553,9 +560,9 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs, +@@ -554,9 +561,9 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs, regs->flags &= ~X86_EFLAGS_IF; /* single step inline if the instruction is an int3 */ if (p->opcode == BREAKPOINT_INSTRUCTION) @@ -28454,7 +28577,7 @@ index 1deffe6..3be342a 100644 } NOKPROBE_SYMBOL(setup_singlestep); -@@ -640,7 +647,7 @@ int kprobe_int3_handler(struct pt_regs *regs) +@@ -641,7 +648,7 @@ int kprobe_int3_handler(struct pt_regs *regs) setup_singlestep(p, regs, kcb, 0); return 1; } @@ -28463,17 +28586,17 @@ index 1deffe6..3be342a 100644 /* * The breakpoint instruction was removed right * after we hit it. Another cpu has removed -@@ -687,6 +694,9 @@ static void __used kretprobe_trampoline_holder(void) - " movq %rax, 152(%rsp)\n" - RESTORE_REGS_STRING - " popfq\n" +@@ -687,6 +694,9 @@ asm( + " movq %rax, 152(%rsp)\n" + RESTORE_REGS_STRING + " popfq\n" +#ifdef KERNEXEC_PLUGIN -+ " btsq $63,(%rsp)\n" ++ " btsq $63,(%rsp)\n" +#endif #else - " pushf\n" - SAVE_REGS_STRING -@@ -827,7 +837,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs, + " pushf\n" + SAVE_REGS_STRING +@@ -828,7 +838,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *kcb) { unsigned long *tos = stack_addr(regs); @@ -28565,10 +28688,10 @@ index c2bedae..25e7ab60 100644 .name = "data", .mode = S_IRUGO, diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c -index 47190bd..0165c4d 100644 +index 8079508..b34be72 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c -@@ -553,7 +553,7 @@ static uint32_t __init kvm_detect(void) +@@ -554,7 +554,7 @@ static uint32_t __init kvm_detect(void) return kvm_cpuid_base(); } @@ -28578,7 +28701,7 @@ index 47190bd..0165c4d 100644 .detect = kvm_detect, .x2apic_available = kvm_para_available, diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c -index 72cef58..252d1b0 100644 +index 1d39bfb..4b2e4b0 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -29,7 +29,7 @@ @@ -28652,7 +28775,7 @@ index 72cef58..252d1b0 100644 size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); diff --git a/arch/x86/kernel/ldt.c b/arch/x86/kernel/ldt.c -index 6acc9dd..f72931d 100644 +index 6707039..254f32c 100644 --- a/arch/x86/kernel/ldt.c +++ b/arch/x86/kernel/ldt.c @@ -11,6 +11,7 @@ @@ -28678,7 +28801,7 @@ index 6acc9dd..f72931d 100644 /* context.lock is held for us, so we don't need any locking. */ static void flush_ldt(void *current_mm) { -@@ -109,6 +118,23 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm) +@@ -109,6 +118,23 @@ int init_new_context_ldt(struct task_struct *tsk, struct mm_struct *mm) struct mm_struct *old_mm; int retval = 0; @@ -28792,7 +28915,7 @@ index 469b23d..5449cfe 100644 relocate_kernel_ptr = control_page; page_list[PA_CONTROL_PAGE] = __pa(control_page); diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S -index 87e1762..f08a93d 100644 +index ed48a9f..23a6a8f 100644 --- a/arch/x86/kernel/mcount_64.S +++ b/arch/x86/kernel/mcount_64.S @@ -7,7 +7,7 @@ @@ -28815,7 +28938,7 @@ index 87e1762..f08a93d 100644 ENTRY(ftrace_caller) /* save_mcount_regs fills in first two parameters */ -@@ -180,9 +181,10 @@ GLOBAL(ftrace_graph_call) +@@ -182,9 +183,10 @@ GLOBAL(ftrace_graph_call) jmp ftrace_stub #endif @@ -28828,16 +28951,16 @@ index 87e1762..f08a93d 100644 ENTRY(ftrace_regs_caller) /* Save the current flags before any operations that can change them */ -@@ -253,7 +255,7 @@ GLOBAL(ftrace_regs_caller_end) +@@ -255,7 +257,7 @@ GLOBAL(ftrace_regs_caller_end) - jmp ftrace_return + jmp ftrace_epilogue -END(ftrace_regs_caller) +ENDPROC(ftrace_regs_caller) #else /* ! CONFIG_DYNAMIC_FTRACE */ -@@ -272,6 +274,7 @@ fgraph_trace: +@@ -274,6 +276,7 @@ fgraph_trace: #endif GLOBAL(ftrace_stub) @@ -28845,7 +28968,7 @@ index 87e1762..f08a93d 100644 retq trace: -@@ -284,12 +287,13 @@ trace: +@@ -286,12 +289,13 @@ trace: * ip and parent ip are used and the list function is called when * function tracing is enabled. */ @@ -28860,7 +28983,7 @@ index 87e1762..f08a93d 100644 #endif /* CONFIG_DYNAMIC_FTRACE */ #endif /* CONFIG_FUNCTION_TRACER */ -@@ -311,8 +315,9 @@ ENTRY(ftrace_graph_caller) +@@ -313,8 +317,9 @@ ENTRY(ftrace_graph_caller) restore_mcount_regs @@ -28871,7 +28994,7 @@ index 87e1762..f08a93d 100644 GLOBAL(return_to_handler) subq $24, %rsp -@@ -328,5 +333,7 @@ GLOBAL(return_to_handler) +@@ -330,5 +335,7 @@ GLOBAL(return_to_handler) movq 8(%rsp), %rdx movq (%rsp), %rax addq $24, %rsp @@ -29027,7 +29150,7 @@ index 005c03e..7000fe4 100644 if ((s64)val != *(s32 *)loc) goto overflow; diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c -index 64f9616..4036384 100644 +index 7f3550a..e535783 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c @@ -39,6 +39,7 @@ @@ -29036,7 +29159,7 @@ index 64f9616..4036384 100644 #include <linux/gfp.h> +#include <linux/grsecurity.h> - #include <asm/processor.h> + #include <asm/cpufeature.h> #include <asm/msr.h> @@ -83,6 +84,13 @@ static ssize_t msr_write(struct file *file, const char __user *buf, int err = 0; @@ -29073,10 +29196,10 @@ index 64f9616..4036384 100644 }; diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c -index 8a2cdd7..5b45fda 100644 +index 04b132a..95ed204 100644 --- a/arch/x86/kernel/nmi.c +++ b/arch/x86/kernel/nmi.c -@@ -99,16 +99,16 @@ fs_initcall(nmi_warning_debugfs); +@@ -100,16 +100,16 @@ fs_initcall(nmi_warning_debugfs); static void nmi_max_handler(struct irq_work *w) { @@ -29096,7 +29219,7 @@ index 8a2cdd7..5b45fda 100644 } static int nmi_handle(unsigned int type, struct pt_regs *regs) -@@ -135,11 +135,11 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs) +@@ -136,11 +136,11 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs) delta = sched_clock() - delta; trace_nmi_handler(a->handler, (int)delta, thishandled); @@ -29111,7 +29234,7 @@ index 8a2cdd7..5b45fda 100644 } rcu_read_unlock(); -@@ -149,7 +149,7 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs) +@@ -150,7 +150,7 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs) } NOKPROBE_SYMBOL(nmi_handle); @@ -29120,7 +29243,7 @@ index 8a2cdd7..5b45fda 100644 { struct nmi_desc *desc = nmi_to_desc(type); unsigned long flags; -@@ -157,7 +157,8 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) +@@ -158,7 +158,8 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) if (!action->handler) return -EINVAL; @@ -29130,7 +29253,7 @@ index 8a2cdd7..5b45fda 100644 spin_lock_irqsave(&desc->lock, flags); -@@ -175,9 +176,9 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) +@@ -176,9 +177,9 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) * event confuses some handlers (kdump uses this flag) */ if (action->flags & NMI_FLAG_FIRST) @@ -29142,7 +29265,7 @@ index 8a2cdd7..5b45fda 100644 spin_unlock_irqrestore(&desc->lock, flags); return 0; -@@ -200,7 +201,7 @@ void unregister_nmi_handler(unsigned int type, const char *name) +@@ -201,7 +202,7 @@ void unregister_nmi_handler(unsigned int type, const char *name) if (!strcmp(n->name, name)) { WARN(in_nmi(), "Trying to free NMI (%s) from NMI context!\n", n->name); @@ -29151,7 +29274,7 @@ index 8a2cdd7..5b45fda 100644 break; } } -@@ -501,6 +502,17 @@ static DEFINE_PER_CPU(int, update_debug_stack); +@@ -502,6 +503,17 @@ static DEFINE_PER_CPU(int, update_debug_stack); dotraplinkage notrace void do_nmi(struct pt_regs *regs, long error_code) { @@ -29553,7 +29676,7 @@ index 7c577a1..3557b10 100644 dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); } diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c -index 9f7c21c..854f412 100644 +index 2915d54..8e43324 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -15,6 +15,7 @@ @@ -29574,15 +29697,15 @@ index 9f7c21c..854f412 100644 .x86_tss = { .sp0 = TOP_OF_INIT_STACK, #ifdef CONFIG_X86_32 -@@ -57,6 +59,7 @@ __visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss) = { - */ - .io_bitmap = { [0 ... IO_BITMAP_LONGS] = ~0 }, +@@ -60,6 +62,7 @@ __visible DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, cpu_tss) = { + #ifdef CONFIG_X86_32 + .SYSENTER_stack_canary = STACK_END_MAGIC, #endif +} }; EXPORT_PER_CPU_SYMBOL(cpu_tss); -@@ -77,13 +80,26 @@ void idle_notifier_unregister(struct notifier_block *n) +@@ -80,13 +83,26 @@ void idle_notifier_unregister(struct notifier_block *n) EXPORT_SYMBOL_GPL(idle_notifier_unregister); #endif @@ -29610,7 +29733,7 @@ index 9f7c21c..854f412 100644 #ifdef CONFIG_VM86 dst->thread.vm86 = NULL; #endif -@@ -91,6 +107,12 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) +@@ -94,6 +110,12 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) return fpu__copy(&dst->thread.fpu, &src->thread.fpu); } @@ -29623,7 +29746,7 @@ index 9f7c21c..854f412 100644 /* * Free current thread data structures etc.. */ -@@ -102,7 +124,7 @@ void exit_thread(void) +@@ -105,7 +127,7 @@ void exit_thread(void) struct fpu *fpu = &t->fpu; if (bp) { @@ -29632,7 +29755,7 @@ index 9f7c21c..854f412 100644 t->io_bitmap_ptr = NULL; clear_thread_flag(TIF_IO_BITMAP); -@@ -124,6 +146,9 @@ void flush_thread(void) +@@ -127,6 +149,9 @@ void flush_thread(void) { struct task_struct *tsk = current; @@ -29642,7 +29765,7 @@ index 9f7c21c..854f412 100644 flush_ptrace_hw_breakpoint(tsk); memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); -@@ -265,7 +290,7 @@ static void __exit_idle(void) +@@ -268,7 +293,7 @@ static void __exit_idle(void) void exit_idle(void) { /* idle loop has pid 0 */ @@ -29651,7 +29774,7 @@ index 9f7c21c..854f412 100644 return; __exit_idle(); } -@@ -318,7 +343,7 @@ bool xen_set_default_idle(void) +@@ -321,7 +346,7 @@ bool xen_set_default_idle(void) return ret; } #endif @@ -29660,7 +29783,7 @@ index 9f7c21c..854f412 100644 { local_irq_disable(); /* -@@ -496,13 +521,6 @@ static int __init idle_setup(char *str) +@@ -499,13 +524,6 @@ static int __init idle_setup(char *str) } early_param("idle", idle_setup); @@ -29674,7 +29797,7 @@ index 9f7c21c..854f412 100644 unsigned long arch_randomize_brk(struct mm_struct *mm) { unsigned long range_end = mm->brk + 0x02000000; -@@ -534,9 +552,7 @@ unsigned long get_wchan(struct task_struct *p) +@@ -537,9 +555,7 @@ unsigned long get_wchan(struct task_struct *p) * PADDING * ----------- top = topmax - TOP_OF_KERNEL_STACK_PADDING * stack @@ -29685,7 +29808,7 @@ index 9f7c21c..854f412 100644 * * The tasks stack pointer points at the location where the * framepointer is stored. The data on the stack is: -@@ -547,7 +563,7 @@ unsigned long get_wchan(struct task_struct *p) +@@ -550,7 +566,7 @@ unsigned long get_wchan(struct task_struct *p) */ top = start + THREAD_SIZE - TOP_OF_KERNEL_STACK_PADDING; top -= 2 * sizeof(unsigned long); @@ -29694,7 +29817,7 @@ index 9f7c21c..854f412 100644 sp = READ_ONCE(p->thread.sp); if (sp < bottom || sp > top) -@@ -564,3 +580,35 @@ unsigned long get_wchan(struct task_struct *p) +@@ -567,3 +583,35 @@ unsigned long get_wchan(struct task_struct *p) } while (count++ < 16 && p->state != TASK_RUNNING); return 0; } @@ -29830,10 +29953,10 @@ index 9f95091..6885108 100644 return prev_p; } diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c -index 9f75187..9b2d358 100644 +index 6cbab31..2fd4ca3 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c -@@ -160,9 +160,10 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp, +@@ -162,9 +162,10 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp, struct pt_regs *childregs; struct task_struct *me = current; @@ -29845,7 +29968,7 @@ index 9f75187..9b2d358 100644 set_tsk_thread_flag(p, TIF_FORK); p->thread.io_bitmap_ptr = NULL; -@@ -172,6 +173,8 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp, +@@ -174,6 +175,8 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp, p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs; savesegment(es, p->thread.es); savesegment(ds, p->thread.ds); @@ -29854,7 +29977,7 @@ index 9f75187..9b2d358 100644 memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps)); if (unlikely(p->flags & PF_KTHREAD)) { -@@ -279,7 +282,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -281,7 +284,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) struct fpu *prev_fpu = &prev->fpu; struct fpu *next_fpu = &next->fpu; int cpu = smp_processor_id(); @@ -29863,7 +29986,7 @@ index 9f75187..9b2d358 100644 unsigned fsindex, gsindex; fpu_switch_t fpu_switch; -@@ -330,6 +333,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -332,6 +335,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) if (unlikely(next->ds | prev->ds)) loadsegment(ds, next->ds); @@ -29874,7 +29997,7 @@ index 9f75187..9b2d358 100644 /* * Switch FS and GS. * -@@ -401,10 +408,13 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -403,10 +410,13 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) * Switch the PDA and FPU contexts. */ this_cpu_write(current_task, next_p); @@ -30168,18 +30291,18 @@ index 98111b3..73ca125 100644 identity_mapped: /* set return address to 0 if not preserving context */ diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index d3d80e6..5c5b8de 100644 +index 2367ae0..2d1264d 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c -@@ -112,6 +112,7 @@ - #include <asm/alternative.h> +@@ -113,6 +113,7 @@ #include <asm/prom.h> #include <asm/microcode.h> + #include <asm/mmu_context.h> +#include <asm/boot.h> /* * max_low_pfn_mapped: highest direct mapped pfn under 4GB -@@ -207,10 +208,12 @@ EXPORT_SYMBOL(boot_cpu_data); +@@ -208,10 +209,12 @@ EXPORT_SYMBOL(boot_cpu_data); #endif @@ -30195,7 +30318,7 @@ index d3d80e6..5c5b8de 100644 #endif /* Boot loader ID and version as integers, for the benefit of proc_dointvec */ -@@ -758,7 +761,7 @@ static void __init trim_bios_range(void) +@@ -759,7 +762,7 @@ static void __init trim_bios_range(void) * area (640->1Mb) as ram even though it is not. * take them out. */ @@ -30204,7 +30327,7 @@ index d3d80e6..5c5b8de 100644 sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); } -@@ -766,7 +769,7 @@ static void __init trim_bios_range(void) +@@ -767,7 +770,7 @@ static void __init trim_bios_range(void) /* called before trim_bios_range() to spare extra sanitize */ static void __init e820_add_kernel_range(void) { @@ -30213,7 +30336,7 @@ index d3d80e6..5c5b8de 100644 u64 size = __pa_symbol(_end) - start; /* -@@ -847,8 +850,8 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) +@@ -848,8 +851,8 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) void __init setup_arch(char **cmdline_p) { @@ -30224,7 +30347,7 @@ index d3d80e6..5c5b8de 100644 early_reserve_initrd(); -@@ -941,16 +944,16 @@ void __init setup_arch(char **cmdline_p) +@@ -942,16 +945,16 @@ void __init setup_arch(char **cmdline_p) if (!boot_params.hdr.root_flags) root_mountflags &= ~MS_RDONLY; @@ -30324,10 +30447,10 @@ index e4fcb87..9c06c55 100644 * Up to this point, the boot CPU has been using .init.data * area. Reload any changed state for the boot CPU. diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c -index cb6282c..7cda5d0 100644 +index 548ddf7..9b53e78 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c -@@ -191,7 +191,7 @@ static unsigned long align_sigframe(unsigned long sp) +@@ -226,7 +226,7 @@ static unsigned long align_sigframe(unsigned long sp) * Align the stack pointer according to the i386 ABI, * i.e. so that on function entry ((sp + 4) & 15) == 0. */ @@ -30336,7 +30459,7 @@ index cb6282c..7cda5d0 100644 #else /* !CONFIG_X86_32 */ sp = round_down(sp, 16) - 8; #endif -@@ -300,10 +300,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, +@@ -335,10 +335,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, } if (current->mm->context.vdso) @@ -30349,7 +30472,7 @@ index cb6282c..7cda5d0 100644 if (ksig->ka.sa.sa_flags & SA_RESTORER) restorer = ksig->ka.sa.sa_restorer; -@@ -317,7 +316,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, +@@ -352,7 +351,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, * reasons and because gdb uses it as a signature to notice * signal handler stack frames. */ @@ -30358,7 +30481,7 @@ index cb6282c..7cda5d0 100644 if (err) return -EFAULT; -@@ -364,8 +363,10 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, +@@ -399,8 +398,10 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, save_altstack_ex(&frame->uc.uc_stack, regs->sp); /* Set up to return from userspace. */ @@ -30371,7 +30494,7 @@ index cb6282c..7cda5d0 100644 if (ksig->ka.sa.sa_flags & SA_RESTORER) restorer = ksig->ka.sa.sa_restorer; put_user_ex(restorer, &frame->pretcode); -@@ -377,7 +378,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, +@@ -412,7 +413,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, * reasons and because gdb uses it as a signature to notice * signal handler stack frames. */ @@ -30380,7 +30503,7 @@ index cb6282c..7cda5d0 100644 } put_user_catch(err); err |= copy_siginfo_to_user(&frame->info, &ksig->info); -@@ -613,7 +614,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) +@@ -682,7 +683,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) { int usig = ksig->sig; sigset_t *set = sigmask_to_save(); @@ -30394,7 +30517,7 @@ index cb6282c..7cda5d0 100644 /* Set up the stack frame */ if (is_ia32_frame()) { -@@ -624,7 +630,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) +@@ -693,7 +699,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) } else if (is_x32_frame()) { return x32_setup_rt_frame(ksig, cset, regs); } else { @@ -30417,10 +30540,10 @@ index 658777c..6285f88 100644 .smp_prepare_cpus = native_smp_prepare_cpus, .smp_cpus_done = native_smp_cpus_done, diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c -index 24d57f7..36e49a2 100644 +index 0e4329e..286c7ca 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c -@@ -213,14 +213,17 @@ static void notrace start_secondary(void *unused) +@@ -221,14 +221,17 @@ static void notrace start_secondary(void *unused) enable_start_cpu0 = 0; @@ -30442,7 +30565,7 @@ index 24d57f7..36e49a2 100644 /* * Check TSC synchronization with the BP: */ -@@ -803,16 +806,15 @@ void common_cpu_up(unsigned int cpu, struct task_struct *idle) +@@ -921,16 +924,15 @@ void common_cpu_up(unsigned int cpu, struct task_struct *idle) alternatives_enable_smp(); per_cpu(current_task, cpu) = idle; @@ -30461,7 +30584,7 @@ index 24d57f7..36e49a2 100644 } /* -@@ -833,9 +835,11 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) +@@ -951,9 +953,11 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) unsigned long timeout; idle->thread.sp = (unsigned long) (((struct pt_regs *) @@ -30474,7 +30597,7 @@ index 24d57f7..36e49a2 100644 initial_code = (unsigned long)start_secondary; stack_start = idle->thread.sp; -@@ -983,6 +987,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) +@@ -1101,6 +1105,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) common_cpu_up(cpu, tidle); @@ -30812,7 +30935,7 @@ index 10e0272..a73232f 100644 if (!(addr & ~PAGE_MASK)) return addr; diff --git a/arch/x86/kernel/tboot.c b/arch/x86/kernel/tboot.c -index 91a4496..6414b5c 100644 +index e72a07f..b67cc32 100644 --- a/arch/x86/kernel/tboot.c +++ b/arch/x86/kernel/tboot.c @@ -44,6 +44,7 @@ @@ -30963,7 +31086,7 @@ index 1c113db..287b42e 100644 static int trace_irq_vector_refcount; static DEFINE_MUTEX(irq_vector_mutex); diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c -index ade185a..4c354a0 100644 +index 87bd6b6..8f46fc9 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -70,7 +70,7 @@ @@ -30984,7 +31107,7 @@ index ade185a..4c354a0 100644 DECLARE_BITMAP(used_vectors, NR_VECTORS); EXPORT_SYMBOL_GPL(used_vectors); -@@ -165,7 +165,7 @@ void ist_begin_non_atomic(struct pt_regs *regs) +@@ -151,7 +151,7 @@ void ist_begin_non_atomic(struct pt_regs *regs) * will catch asm bugs and any attempt to use ist_preempt_enable * from double_fault. */ @@ -30992,8 +31115,8 @@ index ade185a..4c354a0 100644 + BUG_ON((unsigned long)(current_top_of_stack(smp_processor_id()) - current_stack_pointer()) >= THREAD_SIZE); - preempt_count_sub(HARDIRQ_OFFSET); -@@ -182,7 +182,7 @@ void ist_end_non_atomic(void) + preempt_enable_no_resched(); +@@ -168,7 +168,7 @@ void ist_end_non_atomic(void) } static nokprobe_inline int @@ -31002,8 +31125,8 @@ index ade185a..4c354a0 100644 struct pt_regs *regs, long error_code) { if (v8086_mode(regs)) { -@@ -202,8 +202,25 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str, - if (!fixup_exception(regs)) { +@@ -188,8 +188,25 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str, + if (!fixup_exception(regs, trapnr)) { tsk->thread.error_code = error_code; tsk->thread.trap_nr = trapnr; + @@ -31028,7 +31151,7 @@ index ade185a..4c354a0 100644 return 0; } -@@ -242,7 +259,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr, +@@ -228,7 +245,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr, } static void @@ -31037,7 +31160,7 @@ index ade185a..4c354a0 100644 long error_code, siginfo_t *info) { struct task_struct *tsk = current; -@@ -266,7 +283,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, +@@ -251,7 +268,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, if (show_unhandled_signals && unhandled_signal(tsk, signr) && printk_ratelimit()) { pr_info("%s[%d] trap %s ip:%lx sp:%lx error:%lx", @@ -31046,7 +31169,7 @@ index ade185a..4c354a0 100644 regs->ip, regs->sp, error_code); print_vma_addr(" in ", regs->ip); pr_cont("\n"); -@@ -347,6 +364,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) +@@ -331,6 +348,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) tsk->thread.error_code = error_code; tsk->thread.trap_nr = X86_TRAP_DF; @@ -31058,7 +31181,7 @@ index ade185a..4c354a0 100644 #ifdef CONFIG_DOUBLEFAULT df_debug(regs, error_code); #endif -@@ -459,11 +481,35 @@ do_general_protection(struct pt_regs *regs, long error_code) +@@ -443,11 +465,35 @@ do_general_protection(struct pt_regs *regs, long error_code) tsk->thread.error_code = error_code; tsk->thread.trap_nr = X86_TRAP_GP; if (notify_die(DIE_GPF, "general protection fault", regs, error_code, @@ -31095,7 +31218,7 @@ index ade185a..4c354a0 100644 tsk->thread.error_code = error_code; tsk->thread.trap_nr = X86_TRAP_GP; -@@ -559,6 +605,9 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s) +@@ -545,6 +591,9 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s) container_of(task_pt_regs(current), struct bad_iret_stack, regs); @@ -31105,7 +31228,16 @@ index ade185a..4c354a0 100644 /* Copy the IRET target to the new stack. */ memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8); -@@ -805,7 +854,7 @@ void __init early_trap_init(void) +@@ -716,7 +765,7 @@ exit: + * This is the most likely code path that involves non-trivial use + * of the SYSENTER stack. Check that we haven't overrun it. + */ +- WARN(this_cpu_read(cpu_tss.SYSENTER_stack_canary) != STACK_END_MAGIC, ++ WARN(cpu_tss[raw_smp_processor_id()].SYSENTER_stack_canary != STACK_END_MAGIC, + "Overran or corrupted SYSENTER stack\n"); + #endif + ist_exit(regs); +@@ -846,7 +895,7 @@ void __init early_trap_init(void) * since we don't have trace_debug and it will be reset to * 'debug' in trap_init() by set_intr_gate_ist(). */ @@ -31114,7 +31246,7 @@ index ade185a..4c354a0 100644 /* int3 can be called from all */ set_system_intr_gate(X86_TRAP_BP, &int3); #ifdef CONFIG_X86_32 -@@ -890,7 +939,7 @@ void __init trap_init(void) +@@ -931,7 +980,7 @@ void __init trap_init(void) * in early_trap_init(). However, ITS works only after * cpu_init() loads TSS. See comments in early_trap_init(). */ @@ -31123,7 +31255,7 @@ index ade185a..4c354a0 100644 /* int3 can be called from all */ set_system_intr_gate_ist(X86_TRAP_BP, &int3, DEBUG_STACK); -@@ -898,7 +947,7 @@ void __init trap_init(void) +@@ -939,7 +988,7 @@ void __init trap_init(void) #ifdef CONFIG_X86_64 memcpy(&debug_idt_table, &idt_table, IDT_ENTRIES * 16); @@ -31133,10 +31265,10 @@ index ade185a..4c354a0 100644 #endif } diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c -index 3d743da..d74c208 100644 +index c9c4c7c..f6a623a 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c -@@ -151,7 +151,7 @@ static void cyc2ns_write_end(int cpu, struct cyc2ns_data *data) +@@ -156,7 +156,7 @@ static void cyc2ns_write_end(int cpu, struct cyc2ns_data *data) */ smp_wmb(); @@ -31168,7 +31300,7 @@ index bf4db6e..624137c 100644 force_sig_info(SIGSEGV, SEND_SIG_FORCED, current); } diff --git a/arch/x86/kernel/verify_cpu.S b/arch/x86/kernel/verify_cpu.S -index 07efb35..2bf8766 100644 +index 014ea59..03cfe40 100644 --- a/arch/x86/kernel/verify_cpu.S +++ b/arch/x86/kernel/verify_cpu.S @@ -20,6 +20,7 @@ @@ -31180,7 +31312,7 @@ index 07efb35..2bf8766 100644 * verify_cpu, returns the status of longmode and SSE in register %eax. * 0: Success 1: Failure diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c -index e574b85..5514c57 100644 +index 3dce1ca..3dce2ad 100644 --- a/arch/x86/kernel/vm86_32.c +++ b/arch/x86/kernel/vm86_32.c @@ -144,7 +144,7 @@ void save_v86_state(struct kernel_vm86_regs *regs, int retval) @@ -31240,7 +31372,7 @@ index e574b85..5514c57 100644 case VM86_GET_AND_RESET_IRQ: { return get_and_reset_irq(irqnumber); diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S -index 74e4bf1..0897a97 100644 +index 4c941f8..459a84d 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -26,6 +26,13 @@ @@ -31257,7 +31389,7 @@ index 74e4bf1..0897a97 100644 #undef i386 /* in case the preprocessor is a 32bit one */ -@@ -69,30 +76,43 @@ jiffies_64 = jiffies; +@@ -68,30 +75,44 @@ jiffies_64 = jiffies; PHDRS { text PT_LOAD FLAGS(5); /* R_E */ @@ -31286,13 +31418,12 @@ index 74e4bf1..0897a97 100644 SECTIONS { #ifdef CONFIG_X86_32 -- . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR; -- phys_startup_32 = startup_32 - LOAD_OFFSET; +- . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR; +- phys_startup_32 = ABSOLUTE(startup_32 - LOAD_OFFSET); + . = LOAD_OFFSET + ____LOAD_PHYSICAL_ADDR; #else -- . = __START_KERNEL; -- phys_startup_64 = startup_64 - LOAD_OFFSET; -+ . = __START_KERNEL; + . = __START_KERNEL; +- phys_startup_64 = ABSOLUTE(startup_64 - LOAD_OFFSET); #endif /* Text and read-only data */ @@ -31301,17 +31432,18 @@ index 74e4bf1..0897a97 100644 + .text (. - __KERNEL_TEXT_OFFSET): AT(ADDR(.text) - LOAD_OFFSET + __KERNEL_TEXT_OFFSET) { /* bootstrapping code */ +#ifdef CONFIG_X86_32 -+ phys_startup_32 = startup_32 - LOAD_OFFSET + __KERNEL_TEXT_OFFSET; ++ phys_startup_32 = ABSOLUTE(startup_32 - LOAD_OFFSET + __KERNEL_TEXT_OFFSET); ++ __LOAD_PHYSICAL_ADDR = . - LOAD_OFFSET + __KERNEL_TEXT_OFFSET; +#else -+ phys_startup_64 = startup_64 - LOAD_OFFSET + __KERNEL_TEXT_OFFSET; ++ phys_startup_64 = ABSOLUTE(startup_64 - LOAD_OFFSET + __KERNEL_TEXT_OFFSET); ++ __LOAD_PHYSICAL_ADDR = ABSOLUTE(. - LOAD_OFFSET + __KERNEL_TEXT_OFFSET); +#endif -+ __LOAD_PHYSICAL_ADDR = . - LOAD_OFFSET + __KERNEL_TEXT_OFFSET; + _text = .; HEAD_TEXT . = ALIGN(8); _stext = .; -@@ -104,13 +124,35 @@ SECTIONS - IRQENTRY_TEXT +@@ -104,13 +125,35 @@ SECTIONS + SOFTIRQENTRY_TEXT *(.fixup) *(.gnu.warning) - /* End of text section */ @@ -31348,9 +31480,9 @@ index 74e4bf1..0897a97 100644 + + EXCEPTION_TABLE(16) :rodata - #if defined(CONFIG_DEBUG_RODATA) /* .text should occupy whole number of pages */ -@@ -122,16 +164,20 @@ SECTIONS + . = ALIGN(PAGE_SIZE); +@@ -120,16 +163,20 @@ SECTIONS /* Data */ .data : AT(ADDR(.data) - LOAD_OFFSET) { @@ -31374,7 +31506,7 @@ index 74e4bf1..0897a97 100644 PAGE_ALIGNED_DATA(PAGE_SIZE) -@@ -174,12 +220,19 @@ SECTIONS +@@ -172,12 +219,19 @@ SECTIONS . = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE); /* Init code and data - will be freed after init */ @@ -31397,13 +31529,14 @@ index 74e4bf1..0897a97 100644 /* * percpu offsets are zero-based on SMP. PERCPU_VADDR() changes the * output PHDR, so the next output section - .init.text - should -@@ -190,12 +243,33 @@ SECTIONS +@@ -188,10 +242,13 @@ SECTIONS "per-CPU data too large - increase CONFIG_PHYSICAL_START") #endif - INIT_TEXT_SECTION(PAGE_SIZE) -#ifdef CONFIG_X86_64 - :init +-#endif + . = ALIGN(PAGE_SIZE); + init_begin = .; + .init.text (. - __KERNEL_TEXT_OFFSET): AT(init_begin - LOAD_OFFSET) { @@ -31411,7 +31544,19 @@ index 74e4bf1..0897a97 100644 + INIT_TEXT + . = ALIGN(PAGE_SIZE); + } :text.init -+ + + /* + * Section for code used exclusively before alternatives are run. All +@@ -200,11 +257,29 @@ SECTIONS + * + * See static_cpu_has() for an example. + */ +- .altinstr_aux : AT(ADDR(.altinstr_aux) - LOAD_OFFSET) { ++ .altinstr_aux : AT(ADDR(.altinstr_aux) - LOAD_OFFSET + __KERNEL_TEXT_OFFSET) { + *(.altinstr_aux) + } + +- INIT_DATA_SECTION(16) + /* + * .exit.text is discard at runtime, not link time, to deal with + * references from .altinstructions and .eh_frame @@ -31424,18 +31569,17 @@ index 74e4bf1..0897a97 100644 + . = ALIGN(HPAGE_SIZE); +#else + . = ALIGN(16); - #endif - -- INIT_DATA_SECTION(16) ++#endif ++ + } :text.exit -+ . = init_begin + SIZEOF(.init.text) + SIZEOF(.exit.text); ++ . = init_begin + SIZEOF(.init.text) + SIZEOF(.altinstr_aux) + SIZEOF(.exit.text); + + . = ALIGN(PAGE_SIZE); + INIT_DATA_SECTION(16) :init .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) { __x86_cpu_dev_start = .; -@@ -266,19 +340,12 @@ SECTIONS +@@ -275,19 +350,12 @@ SECTIONS } . = ALIGN(8); @@ -31456,7 +31600,7 @@ index 74e4bf1..0897a97 100644 PERCPU_SECTION(INTERNODE_CACHE_BYTES) #endif -@@ -297,16 +364,10 @@ SECTIONS +@@ -306,16 +374,10 @@ SECTIONS .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) { __smp_locks = .; *(.smp_locks) @@ -31474,7 +31618,7 @@ index 74e4bf1..0897a97 100644 /* BSS */ . = ALIGN(PAGE_SIZE); .bss : AT(ADDR(.bss) - LOAD_OFFSET) { -@@ -322,6 +383,7 @@ SECTIONS +@@ -331,6 +393,7 @@ SECTIONS __brk_base = .; . += 64 * 1024; /* 64k alignment slop space */ *(.brk_reservation) /* areas brk users have reserved */ @@ -31482,7 +31626,7 @@ index 74e4bf1..0897a97 100644 __brk_limit = .; } -@@ -348,13 +410,12 @@ SECTIONS +@@ -361,13 +424,12 @@ SECTIONS * for the boot processor. */ #define INIT_PER_CPU(x) init_per_cpu__##x = x + __per_cpu_load @@ -31498,7 +31642,7 @@ index 74e4bf1..0897a97 100644 #ifdef CONFIG_SMP diff --git a/arch/x86/kernel/x8664_ksyms_64.c b/arch/x86/kernel/x8664_ksyms_64.c -index a0695be..33e180c 100644 +index cd05942..095d766 100644 --- a/arch/x86/kernel/x8664_ksyms_64.c +++ b/arch/x86/kernel/x8664_ksyms_64.c @@ -34,8 +34,6 @@ EXPORT_SYMBOL(copy_user_generic_string); @@ -31508,9 +31652,9 @@ index a0695be..33e180c 100644 -EXPORT_SYMBOL(_copy_from_user); -EXPORT_SYMBOL(_copy_to_user); - EXPORT_SYMBOL(copy_page); - EXPORT_SYMBOL(clear_page); -@@ -77,3 +75,7 @@ EXPORT_SYMBOL(native_load_gs_index); + EXPORT_SYMBOL_GPL(memcpy_mcsafe); + +@@ -79,3 +77,7 @@ EXPORT_SYMBOL(native_load_gs_index); EXPORT_SYMBOL(___preempt_schedule); EXPORT_SYMBOL(___preempt_schedule_notrace); #endif @@ -31550,10 +31694,10 @@ index dad5fe9..ce5f4ba 100644 .disable = native_disable_io_apic, }; diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c -index 2e1fd58..cc6d3d7 100644 +index bbbaa80..25071dc 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c -@@ -206,15 +206,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu, +@@ -222,15 +222,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, struct kvm_cpuid_entry2 __user *entries) { @@ -31577,7 +31721,7 @@ index 2e1fd58..cc6d3d7 100644 vcpu->arch.cpuid_nent = cpuid->nent; kvm_apic_set_version(vcpu); kvm_x86_ops->cpuid_update(vcpu); -@@ -227,15 +232,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu, +@@ -243,15 +248,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, struct kvm_cpuid_entry2 __user *entries) { @@ -31601,11 +31745,11 @@ index 2e1fd58..cc6d3d7 100644 out: diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c -index b9b09fe..2e1cfb3 100644 +index a2f24af..d1cedbb 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c -@@ -959,7 +959,7 @@ static int em_bsr_c(struct x86_emulate_ctxt *ctxt) - static u8 test_cc(unsigned int condition, unsigned long flags) +@@ -972,7 +972,7 @@ static int em_bsr_c(struct x86_emulate_ctxt *ctxt) + static __always_inline u8 test_cc(unsigned int condition, unsigned long flags) { u8 rc; - void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf); @@ -31613,7 +31757,7 @@ index b9b09fe..2e1cfb3 100644 flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF; asm("push %[flags]; popf; call *%[fastop]" -@@ -1881,7 +1881,7 @@ static int em_push_sreg(struct x86_emulate_ctxt *ctxt) +@@ -1894,7 +1894,7 @@ static int em_push_sreg(struct x86_emulate_ctxt *ctxt) static int em_pop_sreg(struct x86_emulate_ctxt *ctxt) { int seg = ctxt->src2.val; @@ -31622,7 +31766,7 @@ index b9b09fe..2e1cfb3 100644 int rc; rc = emulate_pop(ctxt, &selector, 2); -@@ -1893,7 +1893,7 @@ static int em_pop_sreg(struct x86_emulate_ctxt *ctxt) +@@ -1906,7 +1906,7 @@ static int em_pop_sreg(struct x86_emulate_ctxt *ctxt) if (ctxt->op_bytes > 2) rsp_increment(ctxt, ctxt->op_bytes - 2); @@ -31631,7 +31775,7 @@ index b9b09fe..2e1cfb3 100644 return rc; } -@@ -3870,7 +3870,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt) +@@ -3883,7 +3883,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt) int cr = ctxt->modrm_reg; u64 efer = 0; @@ -31640,7 +31784,7 @@ index b9b09fe..2e1cfb3 100644 0xffffffff00000000ULL, 0, 0, 0, /* CR3 checked later */ CR4_RESERVED_BITS, -@@ -4956,7 +4956,10 @@ done_prefixes: +@@ -4969,7 +4969,10 @@ done_prefixes: if (ctxt->d == 0) return EMULATION_FAILED; @@ -31652,7 +31796,7 @@ index b9b09fe..2e1cfb3 100644 if (unlikely(ctxt->ud) && likely(!(ctxt->d & EmulateOnUD))) return EMULATION_FAILED; -@@ -5267,15 +5270,14 @@ special_insn: +@@ -5284,15 +5287,14 @@ special_insn: else ctxt->eflags &= ~X86_EFLAGS_RF; @@ -31741,10 +31885,10 @@ index 7cc2360..6ae1236 100644 { struct kvm_kpic_state *s = opaque; diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c -index 1facfd6..51dcfd3 100644 +index 9db4709..0423b6f 100644 --- a/arch/x86/kvm/ioapic.c +++ b/arch/x86/kvm/ioapic.c -@@ -405,6 +405,8 @@ static void kvm_ioapic_eoi_inject_work(struct work_struct *work) +@@ -413,6 +413,8 @@ static void kvm_ioapic_eoi_inject_work(struct work_struct *work) #define IOAPIC_SUCCESSIVE_IRQ_MAX_COUNT 10000 static void __kvm_ioapic_update_eoi(struct kvm_vcpu *vcpu, @@ -31752,9 +31896,9 @@ index 1facfd6..51dcfd3 100644 +static void __kvm_ioapic_update_eoi(struct kvm_vcpu *vcpu, struct kvm_ioapic *ioapic, int vector, int trigger_mode) { - int i; + struct dest_map *dest_map = &ioapic->rtc_status.dest_map; diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c -index 36591fa..3b2fa3f 100644 +index 1a2da0e..d1a84c1 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -57,7 +57,7 @@ @@ -31767,10 +31911,10 @@ index 36591fa..3b2fa3f 100644 #define APIC_LVT_NUM 6 /* 14 is the version for Xeon and Pentium 8.4.8*/ diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h -index 2ce4f05..ab8fa72 100644 +index bc019f7..51a5631 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h -@@ -335,7 +335,7 @@ retry_walk: +@@ -349,7 +349,7 @@ retry_walk: if (unlikely(kvm_is_error_hva(host_addr))) goto error; @@ -31780,10 +31924,10 @@ index 2ce4f05..ab8fa72 100644 goto error; walker->ptep_user[walker->level - 1] = ptep_user; diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c -index c13a64b..2075a7c 100644 +index 31346a3..038711e 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c -@@ -3529,7 +3529,11 @@ static void reload_tss(struct kvm_vcpu *vcpu) +@@ -3533,7 +3533,11 @@ static void reload_tss(struct kvm_vcpu *vcpu) int cpu = raw_smp_processor_id(); struct svm_cpu_data *sd = per_cpu(svm_data, cpu); @@ -31795,7 +31939,7 @@ index c13a64b..2075a7c 100644 load_TR_desc(); } -@@ -3928,6 +3932,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) +@@ -3932,6 +3936,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) #endif #endif @@ -31806,7 +31950,7 @@ index c13a64b..2075a7c 100644 reload_tss(vcpu); local_irq_disable(); -@@ -4303,7 +4311,7 @@ static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu) +@@ -4307,7 +4315,7 @@ static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu) { } @@ -31816,10 +31960,10 @@ index c13a64b..2075a7c 100644 .disabled_by_bios = is_disabled, .hardware_setup = svm_hardware_setup, diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c -index 60946a5..0ac3003 100644 +index faf52bac..fdc4818 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c -@@ -1575,14 +1575,14 @@ static __always_inline void vmcs_writel(unsigned long field, unsigned long value +@@ -1589,14 +1589,14 @@ static __always_inline void vmcs_writel(unsigned long field, unsigned long value __vmcs_writel(field, value); } @@ -31836,7 +31980,7 @@ index 60946a5..0ac3003 100644 { BUILD_BUG_ON_MSG(__builtin_constant_p(field) && ((field) & 0x6000) == 0x2000, "vmcs_set_bits does not support 64-bit fields"); -@@ -1851,7 +1851,11 @@ static void reload_tss(void) +@@ -1865,7 +1865,11 @@ static void reload_tss(void) struct desc_struct *descs; descs = (void *)gdt->address; @@ -31848,7 +31992,7 @@ index 60946a5..0ac3003 100644 load_TR_desc(); } -@@ -2143,6 +2147,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) +@@ -2158,6 +2162,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */ vmcs_writel(HOST_GDTR_BASE, gdt->address); /* 22.2.4 */ @@ -31859,7 +32003,7 @@ index 60946a5..0ac3003 100644 rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp); vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */ -@@ -2460,7 +2468,7 @@ static void setup_msrs(struct vcpu_vmx *vmx) +@@ -2481,7 +2489,7 @@ static void setup_msrs(struct vcpu_vmx *vmx) * guest_tsc = (host_tsc * tsc multiplier) >> 48 + tsc_offset * -- Intel TSC Scaling for Virtualization White Paper, sec 1.3 */ @@ -31868,7 +32012,7 @@ index 60946a5..0ac3003 100644 { u64 host_tsc, tsc_offset; -@@ -4693,7 +4701,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) +@@ -4722,7 +4730,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) unsigned long cr4; vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS); /* 22.2.3 */ @@ -31879,7 +32023,7 @@ index 60946a5..0ac3003 100644 /* Save the most likely value for this task's CR4 in the VMCS. */ cr4 = cr4_read_shadow(); -@@ -4720,7 +4731,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) +@@ -4749,7 +4760,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) vmcs_writel(HOST_IDTR_BASE, dt.address); /* 22.2.4 */ vmx->host_idt_base = dt.address; @@ -31888,7 +32032,7 @@ index 60946a5..0ac3003 100644 rdmsr(MSR_IA32_SYSENTER_CS, low32, high32); vmcs_write32(HOST_IA32_SYSENTER_CS, low32); -@@ -6277,11 +6288,17 @@ static __init int hardware_setup(void) +@@ -6297,11 +6308,17 @@ static __init int hardware_setup(void) * page upon invalidation. No need to do anything if not * using the APIC_ACCESS_ADDR VMCS field. */ @@ -31908,7 +32052,7 @@ index 60946a5..0ac3003 100644 if (enable_ept && !cpu_has_vmx_ept_2m_page()) kvm_disable_largepages(); -@@ -6351,10 +6368,12 @@ static __init int hardware_setup(void) +@@ -6371,10 +6388,12 @@ static __init int hardware_setup(void) enable_pml = 0; if (!enable_pml) { @@ -31921,7 +32065,7 @@ index 60946a5..0ac3003 100644 } kvm_set_posted_intr_wakeup_handler(wakeup_handler); -@@ -8673,6 +8692,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -8705,6 +8724,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) "jmp 2f \n\t" "1: " __ex(ASM_VMX_VMRESUME) "\n\t" "2: " @@ -31934,7 +32078,7 @@ index 60946a5..0ac3003 100644 /* Save guest registers, load host registers, keep flags */ "mov %0, %c[wordsize](%%" _ASM_SP ") \n\t" "pop %0 \n\t" -@@ -8725,6 +8750,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -8757,6 +8782,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) #endif [cr2]"i"(offsetof(struct vcpu_vmx, vcpu.arch.cr2)), [wordsize]"i"(sizeof(ulong)) @@ -31946,7 +32090,7 @@ index 60946a5..0ac3003 100644 : "cc", "memory" #ifdef CONFIG_X86_64 , "rax", "rbx", "rdi", "rsi" -@@ -8738,7 +8768,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -8770,7 +8800,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) if (debugctlmsr) update_debugctlmsr(debugctlmsr); @@ -31955,7 +32099,7 @@ index 60946a5..0ac3003 100644 /* * The sysexit path does not restore ds/es, so we must set them to * a reasonable value ourselves. -@@ -8747,8 +8777,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -8779,8 +8809,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) * may be executed in interrupt context, which saves and restore segments * around it, nullifying its effect. */ @@ -31976,7 +32120,7 @@ index 60946a5..0ac3003 100644 #endif vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP) -@@ -10830,7 +10870,7 @@ out: +@@ -10889,7 +10929,7 @@ out: return ret; } @@ -31986,10 +32130,10 @@ index 60946a5..0ac3003 100644 .disabled_by_bios = vmx_disabled_by_bios, .hardware_setup = hardware_setup, diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index ac4963c..902039d 100644 +index 6b9701b..86084df 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c -@@ -1944,8 +1944,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data) +@@ -1945,8 +1945,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data) { struct kvm *kvm = vcpu->kvm; int lm = is_long_mode(vcpu); @@ -32000,7 +32144,7 @@ index ac4963c..902039d 100644 u8 blob_size = lm ? kvm->arch.xen_hvm_config.blob_size_64 : kvm->arch.xen_hvm_config.blob_size_32; u32 page_num = data & ~PAGE_MASK; -@@ -2646,6 +2646,8 @@ long kvm_arch_dev_ioctl(struct file *filp, +@@ -2647,6 +2647,8 @@ long kvm_arch_dev_ioctl(struct file *filp, if (n < msr_list.nmsrs) goto out; r = -EFAULT; @@ -32009,7 +32153,7 @@ index ac4963c..902039d 100644 if (copy_to_user(user_msr_list->indices, &msrs_to_save, num_msrs_to_save * sizeof(u32))) goto out; -@@ -3046,7 +3048,7 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu, +@@ -3051,7 +3053,7 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu, static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu) { @@ -32018,7 +32162,7 @@ index ac4963c..902039d 100644 u64 xstate_bv = xsave->header.xfeatures; u64 valid; -@@ -3082,7 +3084,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu) +@@ -3087,7 +3089,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu) static void load_xsave(struct kvm_vcpu *vcpu, u8 *src) { @@ -32027,7 +32171,7 @@ index ac4963c..902039d 100644 u64 xstate_bv = *(u64 *)(src + XSAVE_HDR_OFFSET); u64 valid; -@@ -3126,7 +3128,7 @@ static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu, +@@ -3131,7 +3133,7 @@ static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu, fill_xsave((u8 *) guest_xsave->region, vcpu); } else { memcpy(guest_xsave->region, @@ -32036,7 +32180,7 @@ index ac4963c..902039d 100644 sizeof(struct fxregs_state)); *(u64 *)&guest_xsave->region[XSAVE_HDR_OFFSET / sizeof(u32)] = XFEATURE_MASK_FPSSE; -@@ -3151,7 +3153,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu, +@@ -3156,7 +3158,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu, } else { if (xstate_bv & ~XFEATURE_MASK_FPSSE) return -EINVAL; @@ -32045,7 +32189,7 @@ index ac4963c..902039d 100644 guest_xsave->region, sizeof(struct fxregs_state)); } return 0; -@@ -6421,6 +6423,7 @@ void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm, +@@ -6447,6 +6449,7 @@ void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm, * exiting to the userspace. Otherwise, the value will be returned to the * userspace. */ @@ -32053,7 +32197,7 @@ index ac4963c..902039d 100644 static int vcpu_enter_guest(struct kvm_vcpu *vcpu) { int r; -@@ -6687,6 +6690,7 @@ out: +@@ -6717,6 +6720,7 @@ out: return r; } @@ -32061,7 +32205,7 @@ index ac4963c..902039d 100644 static inline int vcpu_block(struct kvm *kvm, struct kvm_vcpu *vcpu) { if (!kvm_arch_vcpu_runnable(vcpu) && -@@ -7234,7 +7238,7 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, +@@ -7264,7 +7268,7 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu, int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) { struct fxregs_state *fxsave = @@ -32070,7 +32214,7 @@ index ac4963c..902039d 100644 memcpy(fpu->fpr, fxsave->st_space, 128); fpu->fcw = fxsave->cwd; -@@ -7251,7 +7255,7 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) +@@ -7281,7 +7285,7 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) { struct fxregs_state *fxsave = @@ -32079,7 +32223,7 @@ index ac4963c..902039d 100644 memcpy(fxsave->st_space, fpu->fpr, 128); fxsave->cwd = fpu->fcw; -@@ -7267,9 +7271,9 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) +@@ -7297,9 +7301,9 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu) static void fx_init(struct kvm_vcpu *vcpu) { @@ -32091,7 +32235,7 @@ index ac4963c..902039d 100644 host_xcr0 | XSTATE_COMPACTION_ENABLED; /* -@@ -7292,7 +7296,7 @@ void kvm_load_guest_fpu(struct kvm_vcpu *vcpu) +@@ -7322,7 +7326,7 @@ void kvm_load_guest_fpu(struct kvm_vcpu *vcpu) */ vcpu->guest_fpu_loaded = 1; __kernel_fpu_begin(); @@ -32100,16 +32244,16 @@ index ac4963c..902039d 100644 trace_kvm_fpu(1); } -@@ -7593,6 +7597,8 @@ bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu) - +@@ -7624,6 +7628,8 @@ bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu) struct static_key kvm_no_apic_vcpu __read_mostly; + EXPORT_SYMBOL_GPL(kvm_no_apic_vcpu); +extern struct kmem_cache *fpregs_state_cachep; + int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) { struct page *page; -@@ -7610,11 +7616,14 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) +@@ -7641,11 +7647,14 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) else vcpu->arch.mp_state = KVM_MP_STATE_UNINITIALIZED; @@ -32128,7 +32272,7 @@ index ac4963c..902039d 100644 vcpu->arch.pio_data = page_address(page); kvm_set_tsc_khz(vcpu, max_tsc_khz); -@@ -7672,6 +7681,9 @@ fail_mmu_destroy: +@@ -7703,6 +7712,9 @@ fail_mmu_destroy: kvm_mmu_destroy(vcpu); fail_free_pio_data: free_page((unsigned long)vcpu->arch.pio_data); @@ -32138,7 +32282,7 @@ index ac4963c..902039d 100644 fail: return r; } -@@ -7690,6 +7702,8 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) +@@ -7721,6 +7733,8 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) free_page((unsigned long)vcpu->arch.pio_data); if (!lapic_in_kernel(vcpu)) static_key_slow_dec(&kvm_no_apic_vcpu); @@ -32148,7 +32292,7 @@ index ac4963c..902039d 100644 void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c -index 4ba229a..470f861 100644 +index fd57d3a..7e9ec76 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c @@ -1336,9 +1336,10 @@ static __init int early_put_chars(u32 vtermno, const char *buf, int count) @@ -32875,7 +33019,7 @@ index c1e6232..ebbeba7 100644 #undef ROUND #undef ROUND1 diff --git a/arch/x86/lib/clear_page_64.S b/arch/x86/lib/clear_page_64.S -index a2fe51b..507dab0 100644 +index 65be7cf..d4cb4b4 100644 --- a/arch/x86/lib/clear_page_64.S +++ b/arch/x86/lib/clear_page_64.S @@ -21,6 +21,7 @@ ENTRY(clear_page) @@ -32928,7 +33072,7 @@ index 9b33024..e52ee44 100644 ENDPROC(this_cpu_cmpxchg16b_emu) diff --git a/arch/x86/lib/copy_page_64.S b/arch/x86/lib/copy_page_64.S -index 009f982..9b3db5e 100644 +index 24ef1c2..a119ef1 100644 --- a/arch/x86/lib/copy_page_64.S +++ b/arch/x86/lib/copy_page_64.S @@ -15,13 +15,14 @@ ENTRY(copy_page) @@ -32993,7 +33137,7 @@ index 009f982..9b3db5e 100644 ret ENDPROC(copy_page_regs) diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S -index 27f89c7..7ae1e8e 100644 +index 2b0ef26..69c3c66 100644 --- a/arch/x86/lib/copy_user_64.S +++ b/arch/x86/lib/copy_user_64.S @@ -14,50 +14,7 @@ @@ -33190,7 +33334,7 @@ index 7e48807..cc966ff 100644 /* Exception handlers. Very simple, zeroing is done in the wrappers */ diff --git a/arch/x86/lib/csum-wrappers_64.c b/arch/x86/lib/csum-wrappers_64.c -index 1318f75..44c30fd 100644 +index 28a6654..e501fe8 100644 --- a/arch/x86/lib/csum-wrappers_64.c +++ b/arch/x86/lib/csum-wrappers_64.c @@ -52,10 +52,12 @@ csum_partial_copy_from_user(const void __user *src, void *dst, @@ -33374,7 +33518,7 @@ index 46668cd..a3bdfb9 100644 END(bad_get_user_8) #endif diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c -index 8f72b33..4667a46 100644 +index 1a41693..16eb00c 100644 --- a/arch/x86/lib/insn.c +++ b/arch/x86/lib/insn.c @@ -20,8 +20,10 @@ @@ -33421,10 +33565,10 @@ index 33147fe..12a8815 100644 ret ENDPROC(__iowrite32_copy) diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S -index 16698bb..971d300 100644 +index 2ec0b0abb..3e02ccd 100644 --- a/arch/x86/lib/memcpy_64.S +++ b/arch/x86/lib/memcpy_64.S -@@ -36,6 +36,7 @@ ENTRY(memcpy) +@@ -37,6 +37,7 @@ ENTRY(memcpy) rep movsq movl %edx, %ecx rep movsb @@ -33432,7 +33576,7 @@ index 16698bb..971d300 100644 ret ENDPROC(memcpy) ENDPROC(__memcpy) -@@ -48,6 +49,7 @@ ENTRY(memcpy_erms) +@@ -49,6 +50,7 @@ ENTRY(memcpy_erms) movq %rdi, %rax movq %rdx, %rcx rep movsb @@ -33440,7 +33584,7 @@ index 16698bb..971d300 100644 ret ENDPROC(memcpy_erms) -@@ -132,6 +134,7 @@ ENTRY(memcpy_orig) +@@ -133,6 +135,7 @@ ENTRY(memcpy_orig) movq %r9, 1*8(%rdi) movq %r10, -2*8(%rdi, %rdx) movq %r11, -1*8(%rdi, %rdx) @@ -33448,7 +33592,7 @@ index 16698bb..971d300 100644 retq .p2align 4 .Lless_16bytes: -@@ -144,6 +147,7 @@ ENTRY(memcpy_orig) +@@ -145,6 +148,7 @@ ENTRY(memcpy_orig) movq -1*8(%rsi, %rdx), %r9 movq %r8, 0*8(%rdi) movq %r9, -1*8(%rdi, %rdx) @@ -33456,7 +33600,7 @@ index 16698bb..971d300 100644 retq .p2align 4 .Lless_8bytes: -@@ -157,6 +161,7 @@ ENTRY(memcpy_orig) +@@ -158,6 +162,7 @@ ENTRY(memcpy_orig) movl -4(%rsi, %rdx), %r8d movl %ecx, (%rdi) movl %r8d, -4(%rdi, %rdx) @@ -33464,15 +33608,16 @@ index 16698bb..971d300 100644 retq .p2align 4 .Lless_3bytes: -@@ -175,5 +180,6 @@ ENTRY(memcpy_orig) +@@ -176,6 +181,7 @@ ENTRY(memcpy_orig) movb %cl, (%rdi) .Lend: + pax_force_retaddr retq ENDPROC(memcpy_orig) + diff --git a/arch/x86/lib/memmove_64.S b/arch/x86/lib/memmove_64.S -index ca2afdd..2e474fa 100644 +index 90ce01b..8817b34 100644 --- a/arch/x86/lib/memmove_64.S +++ b/arch/x86/lib/memmove_64.S @@ -41,7 +41,7 @@ ENTRY(__memmove) @@ -33493,7 +33638,7 @@ index ca2afdd..2e474fa 100644 ENDPROC(__memmove) ENDPROC(memmove) diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S -index 2661fad..b584d5c 100644 +index e1229ec..2ca5a7a 100644 --- a/arch/x86/lib/memset_64.S +++ b/arch/x86/lib/memset_64.S @@ -40,6 +40,7 @@ ENTRY(__memset) @@ -34007,39 +34152,37 @@ index e0817a1..bc9cf66 100644 xor %eax,%eax EXIT diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S -index 40027db..37bb69d 100644 +index be110ef..6728d71 100644 --- a/arch/x86/lib/rwsem.S +++ b/arch/x86/lib/rwsem.S -@@ -90,6 +90,7 @@ ENTRY(call_rwsem_down_read_failed) - call rwsem_down_read_failed +@@ -93,6 +93,7 @@ ENTRY(call_rwsem_down_read_failed) __ASM_SIZE(pop,) %__ASM_REG(dx) restore_common_regs + FRAME_END + pax_force_retaddr ret ENDPROC(call_rwsem_down_read_failed) -@@ -98,6 +99,7 @@ ENTRY(call_rwsem_down_write_failed) - movq %rax,%rdi +@@ -103,6 +104,7 @@ ENTRY(call_rwsem_down_write_failed) call rwsem_down_write_failed restore_common_regs + FRAME_END + pax_force_retaddr ret ENDPROC(call_rwsem_down_write_failed) -@@ -109,7 +111,8 @@ ENTRY(call_rwsem_wake) - movq %rax,%rdi +@@ -116,6 +118,7 @@ ENTRY(call_rwsem_wake) call rwsem_wake restore_common_regs --1: ret -+1: pax_force_retaddr -+ ret + 1: FRAME_END ++ pax_force_retaddr + ret ENDPROC(call_rwsem_wake) - ENTRY(call_rwsem_downgrade_wake) -@@ -119,5 +122,6 @@ ENTRY(call_rwsem_downgrade_wake) - call rwsem_downgrade_wake +@@ -128,5 +131,6 @@ ENTRY(call_rwsem_downgrade_wake) __ASM_SIZE(pop,) %__ASM_REG(dx) restore_common_regs + FRAME_END + pax_force_retaddr ret ENDPROC(call_rwsem_downgrade_wake) @@ -34830,55 +34973,57 @@ index 0054835..a3bd671 100644 void fconst(void) diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile -index f9d38a4..556175f 100644 +index f989132..7c590d6 100644 --- a/arch/x86/mm/Makefile +++ b/arch/x86/mm/Makefile -@@ -34,3 +34,7 @@ obj-$(CONFIG_ACPI_NUMA) += srat.o - obj-$(CONFIG_NUMA_EMU) += numa_emulation.o - +@@ -39,3 +39,6 @@ obj-$(CONFIG_NUMA_EMU) += numa_emulation.o obj-$(CONFIG_X86_INTEL_MPX) += mpx.o -+ + obj-$(CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS) += pkeys.o + +quote:=" +obj-$(CONFIG_X86_64) += uderef_64.o +CFLAGS_uderef_64.o := $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS)) -fcall-saved-rax diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c -index 903ec1e..41b4708 100644 +index 82447b3..95c2b03 100644 --- a/arch/x86/mm/extable.c +++ b/arch/x86/mm/extable.c -@@ -2,16 +2,29 @@ - #include <linux/spinlock.h> - #include <linux/sort.h> +@@ -1,5 +1,6 @@ + #include <linux/module.h> #include <asm/uaccess.h> +#include <asm/boot.h> + typedef bool (*ex_handler_t)(const struct exception_table_entry *, + struct pt_regs *, int); +@@ -7,12 +8,25 @@ typedef bool (*ex_handler_t)(const struct exception_table_entry *, static inline unsigned long - ex_insn_addr(const struct exception_table_entry *x) + ex_fixup_addr(const struct exception_table_entry *x) { -- return (unsigned long)&x->insn + x->insn; +- return (unsigned long)&x->fixup + x->fixup; + unsigned long reloc = 0; + +#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC) + reloc = ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR; +#endif + -+ return (unsigned long)&x->insn + x->insn + reloc; ++ return (unsigned long)&x->fixup + x->fixup + reloc; } - static inline unsigned long - ex_fixup_addr(const struct exception_table_entry *x) ++ + static inline ex_handler_t + ex_fixup_handler(const struct exception_table_entry *x) { -- return (unsigned long)&x->fixup + x->fixup; +- return (ex_handler_t)((unsigned long)&x->handler + x->handler); + unsigned long reloc = 0; + +#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC) + reloc = ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR; +#endif + -+ return (unsigned long)&x->fixup + x->fixup + reloc; ++ return (ex_handler_t)((unsigned long)&x->handler + x->handler + reloc); } - int fixup_exception(struct pt_regs *regs) -@@ -20,7 +33,7 @@ int fixup_exception(struct pt_regs *regs) - unsigned long new_ip; + bool ex_handler_default(const struct exception_table_entry *fixup, +@@ -61,7 +75,7 @@ int fixup_exception(struct pt_regs *regs, int trapnr) + ex_handler_t handler; #ifdef CONFIG_PNPBIOS - if (unlikely(SEGMENT_IS_PNP_CODE(regs->cs))) { @@ -34886,22 +35031,8 @@ index 903ec1e..41b4708 100644 extern u32 pnp_bios_fault_eip, pnp_bios_fault_esp; extern u32 pnp_bios_is_utter_crap; pnp_bios_is_utter_crap = 1; -@@ -145,6 +158,13 @@ void sort_extable(struct exception_table_entry *start, - i += 4; - p->fixup -= i; - i += 4; -+ -+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC) -+ BUILD_BUG_ON(!IS_ENABLED(CONFIG_BUILDTIME_EXTABLE_SORT)); -+ p->insn -= ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR; -+ p->fixup -= ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR; -+#endif -+ - } - } - diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c -index e830c71..2c3c46a 100644 +index 5ce1ed0..f713160 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -14,6 +14,8 @@ @@ -34911,12 +35042,12 @@ index e830c71..2c3c46a 100644 +#include <linux/unistd.h> +#include <linux/compiler.h> + #include <asm/cpufeature.h> /* boot_cpu_has, ... */ #include <asm/traps.h> /* dotraplinkage, ... */ - #include <asm/pgalloc.h> /* pgd_*(), ... */ -@@ -21,6 +23,11 @@ - #include <asm/fixmap.h> /* VSYSCALL_ADDR */ +@@ -23,6 +25,11 @@ #include <asm/vsyscall.h> /* emulate_vsyscall */ #include <asm/vm86.h> /* struct vm86 */ + #include <asm/mmu_context.h> /* vma_pkey() */ +#include <asm/tlbflush.h> + +#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF) @@ -34925,7 +35056,7 @@ index e830c71..2c3c46a 100644 #define CREATE_TRACE_POINTS #include <asm/trace/exceptions.h> -@@ -122,7 +129,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr, +@@ -126,7 +133,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr, return !instr_lo || (instr_lo>>1) == 1; case 0x00: /* Prefetch instruction is 0x0F0D or 0x0F18 */ @@ -34937,7 +35068,7 @@ index e830c71..2c3c46a 100644 return 0; *prefetch = (instr_lo == 0xF) && -@@ -156,7 +166,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr) +@@ -160,7 +170,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr) while (instr < max_instr) { unsigned char opcode; @@ -34949,7 +35080,7 @@ index e830c71..2c3c46a 100644 break; instr++; -@@ -187,6 +200,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address, +@@ -244,6 +257,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address, force_sig_info(si_signo, &info, tsk); } @@ -34984,7 +35115,7 @@ index e830c71..2c3c46a 100644 DEFINE_SPINLOCK(pgd_lock); LIST_HEAD(pgd_list); -@@ -237,10 +278,27 @@ void vmalloc_sync_all(void) +@@ -294,10 +335,27 @@ void vmalloc_sync_all(void) for (address = VMALLOC_START & PMD_MASK; address >= TASK_SIZE && address < FIXADDR_TOP; address += PMD_SIZE) { @@ -35012,7 +35143,7 @@ index e830c71..2c3c46a 100644 spinlock_t *pgt_lock; pmd_t *ret; -@@ -248,8 +306,14 @@ void vmalloc_sync_all(void) +@@ -305,8 +363,14 @@ void vmalloc_sync_all(void) pgt_lock = &pgd_page_get_mm(page)->page_table_lock; spin_lock(pgt_lock); @@ -35028,7 +35159,7 @@ index e830c71..2c3c46a 100644 if (!ret) break; -@@ -283,6 +347,12 @@ static noinline int vmalloc_fault(unsigned long address) +@@ -340,6 +404,12 @@ static noinline int vmalloc_fault(unsigned long address) * an interrupt in the middle of a task switch.. */ pgd_paddr = read_cr3(); @@ -35041,7 +35172,7 @@ index e830c71..2c3c46a 100644 pmd_k = vmalloc_sync_one(__va(pgd_paddr), address); if (!pmd_k) return -1; -@@ -382,11 +452,25 @@ static noinline int vmalloc_fault(unsigned long address) +@@ -439,11 +509,25 @@ static noinline int vmalloc_fault(unsigned long address) * happen within a race in page table update. In the later * case just flush: */ @@ -35068,7 +35199,7 @@ index e830c71..2c3c46a 100644 if (pgd_none(*pgd)) { set_pgd(pgd, *pgd_ref); arch_flush_lazy_mmu_mode(); -@@ -559,7 +643,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address) +@@ -616,7 +700,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address) static int is_errata100(struct pt_regs *regs, unsigned long address) { #ifdef CONFIG_X86_64 @@ -35077,7 +35208,7 @@ index e830c71..2c3c46a 100644 return 1; #endif return 0; -@@ -586,9 +670,9 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address) +@@ -643,9 +727,9 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address) } static const char nx_warning[] = KERN_CRIT @@ -35089,7 +35220,7 @@ index e830c71..2c3c46a 100644 static void show_fault_oops(struct pt_regs *regs, unsigned long error_code, -@@ -597,7 +681,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, +@@ -654,7 +738,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, if (!oops_may_print()) return; @@ -35098,7 +35229,7 @@ index e830c71..2c3c46a 100644 unsigned int level; pgd_t *pgd; pte_t *pte; -@@ -608,13 +692,25 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, +@@ -665,13 +749,25 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, pte = lookup_address_in_pgd(pgd, address, &level); if (pte && pte_present(*pte) && !pte_exec(*pte)) @@ -35126,7 +35257,7 @@ index e830c71..2c3c46a 100644 printk(KERN_ALERT "BUG: unable to handle kernel "); if (address < PAGE_SIZE) printk(KERN_CONT "NULL pointer dereference"); -@@ -793,6 +889,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, +@@ -854,6 +950,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, return; } #endif @@ -35149,7 +35280,7 @@ index e830c71..2c3c46a 100644 /* Kernel addresses are always protection faults: */ if (address >= TASK_SIZE) error_code |= PF_PROT; -@@ -875,7 +987,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, +@@ -961,7 +1073,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) { printk(KERN_ERR "MCE: Killing %s:%d due to hardware memory corruption fault at %lx\n", @@ -35158,7 +35289,7 @@ index e830c71..2c3c46a 100644 code = BUS_MCEERR_AR; } #endif -@@ -927,6 +1039,109 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte) +@@ -1020,6 +1132,109 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte) return 1; } @@ -35268,17 +35399,18 @@ index e830c71..2c3c46a 100644 /* * Handle a spurious fault caused by a stale TLB entry. * -@@ -1012,6 +1227,9 @@ int show_unhandled_signals = 1; - static inline int - access_error(unsigned long error_code, struct vm_area_struct *vma) +@@ -1107,6 +1322,10 @@ access_error(unsigned long error_code, struct vm_area_struct *vma) { + /* This is only called for the current mm, so: */ + bool foreign = false; ++ + if ((__supported_pte_mask & _PAGE_NX) && (error_code & PF_INSTR) && !(vma->vm_flags & VM_EXEC)) + return 1; + - if (error_code & PF_WRITE) { - /* write, present and write, not present: */ - if (unlikely(!(vma->vm_flags & VM_WRITE))) -@@ -1074,6 +1292,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, + /* + * Make sure to check the VMA so that we do not perform + * faults just to hit a PF_PK as soon as we fill in a +@@ -1178,6 +1397,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, tsk = current; mm = tsk->mm; @@ -35286,7 +35418,7 @@ index e830c71..2c3c46a 100644 + if (!user_mode(regs) && address < 2 * pax_user_shadow_base) { + if (!search_exception_tables(regs->ip)) { + printk(KERN_EMERG "PAX: please report this to pageexec@freemail.hu\n"); -+ bad_area_nosemaphore(regs, error_code, address); ++ bad_area_nosemaphore(regs, error_code, address, NULL); + return; + } + if (address < pax_user_shadow_base) { @@ -35301,7 +35433,7 @@ index e830c71..2c3c46a 100644 /* * Detect and handle instructions that would cause a page fault for * both a tracked kernel page and a userspace page. -@@ -1198,6 +1432,11 @@ retry: +@@ -1304,6 +1539,11 @@ retry: might_sleep(); } @@ -35313,7 +35445,7 @@ index e830c71..2c3c46a 100644 vma = find_vma(mm, address); if (unlikely(!vma)) { bad_area(regs, error_code, address); -@@ -1209,18 +1448,24 @@ retry: +@@ -1315,18 +1555,24 @@ retry: bad_area(regs, error_code, address); return; } @@ -35349,7 +35481,7 @@ index e830c71..2c3c46a 100644 if (unlikely(expand_stack(vma, address))) { bad_area(regs, error_code, address); return; -@@ -1340,3 +1585,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code) +@@ -1446,3 +1692,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code) } NOKPROBE_SYMBOL(trace_do_page_fault); #endif /* CONFIG_TRACING */ @@ -35643,10 +35775,10 @@ index e830c71..2c3c46a 100644 + return ret ? -EFAULT : 0; +} diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c -index d8a798d..6f803ca 100644 +index b8b6a60..9193b78 100644 --- a/arch/x86/mm/gup.c +++ b/arch/x86/mm/gup.c -@@ -302,7 +302,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, +@@ -313,7 +313,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, addr = start; len = (unsigned long) nr_pages << PAGE_SHIFT; end = start + len; @@ -35655,7 +35787,7 @@ index d8a798d..6f803ca 100644 (void __user *)start, len))) return 0; -@@ -378,6 +378,10 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, +@@ -389,6 +389,10 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write, goto slow_irqon; #endif @@ -35794,7 +35926,7 @@ index 740d7ac..4091827 100644 #endif /* CONFIG_HUGETLB_PAGE */ diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c -index 493f541..ee7a3f0 100644 +index 9d56f27..0d15fff 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -4,6 +4,7 @@ @@ -35813,7 +35945,7 @@ index 493f541..ee7a3f0 100644 /* * We need to define the tracepoints somewhere, and tlb.c -@@ -618,7 +620,18 @@ void __init init_mem_mapping(void) +@@ -619,7 +621,18 @@ void __init init_mem_mapping(void) early_ioremap_page_table_range_init(); #endif @@ -35832,7 +35964,7 @@ index 493f541..ee7a3f0 100644 __flush_tlb_all(); early_memtest(0, max_pfn_mapped << PAGE_SHIFT); -@@ -634,10 +647,34 @@ void __init init_mem_mapping(void) +@@ -635,10 +648,34 @@ void __init init_mem_mapping(void) * Access has to be given to non-kernel-ram areas as well, these contain the PCI * mmio resources as well as potential bios/acpi data regions. */ @@ -35867,8 +35999,8 @@ index 493f541..ee7a3f0 100644 if (iomem_is_exclusive(pagenr << PAGE_SHIFT)) return 0; if (!page_is_ram(pagenr)) -@@ -645,6 +682,29 @@ int devmem_is_allowed(unsigned long pagenr) - return 0; +@@ -685,8 +722,33 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) + } } +#ifdef CONFIG_GRKERNSEC_KMEM @@ -35894,20 +36026,6 @@ index 493f541..ee7a3f0 100644 +static inline void gr_init_ebda(void) { } +#endif + - void free_init_pages(char *what, unsigned long begin, unsigned long end) - { - unsigned long begin_aligned, end_aligned; -@@ -668,7 +728,7 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) - */ - #ifdef CONFIG_DEBUG_PAGEALLOC - printk(KERN_INFO "debug: unmapping init [mem %#010lx-%#010lx]\n", -- begin, end - 1); -+ begin, end - 1); - set_memory_np(begin, (end - begin) >> PAGE_SHIFT); - #else - /* -@@ -685,6 +745,8 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) - void free_initmem(void) { + gr_init_ebda(); @@ -35916,7 +36034,7 @@ index 493f541..ee7a3f0 100644 (unsigned long)(&__init_begin), (unsigned long)(&__init_end)); diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c -index cb4ef3d..1b13259 100644 +index bd7a9b9..2cc3f46 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c @@ -62,33 +62,6 @@ static noinline int do_test_wp_bit(void); @@ -36106,7 +36224,7 @@ index cb4ef3d..1b13259 100644 prot = PAGE_KERNEL_EXEC; pages_4k++; -@@ -475,7 +479,7 @@ void __init native_pagetable_init(void) +@@ -472,7 +476,7 @@ void __init native_pagetable_init(void) pud = pud_offset(pgd, va); pmd = pmd_offset(pud, va); @@ -36115,7 +36233,7 @@ index cb4ef3d..1b13259 100644 break; /* should not be large page here */ -@@ -533,12 +537,10 @@ void __init early_ioremap_page_table_range_init(void) +@@ -530,12 +534,10 @@ void __init early_ioremap_page_table_range_init(void) static void __init pagetable_init(void) { @@ -36130,7 +36248,7 @@ index cb4ef3d..1b13259 100644 EXPORT_SYMBOL_GPL(__supported_pte_mask); /* user-defined highmem size */ -@@ -788,10 +790,10 @@ void __init mem_init(void) +@@ -785,10 +787,10 @@ void __init mem_init(void) ((unsigned long)&__init_end - (unsigned long)&__init_begin) >> 10, @@ -36144,7 +36262,7 @@ index cb4ef3d..1b13259 100644 ((unsigned long)&_etext - (unsigned long)&_text) >> 10); /* -@@ -885,6 +887,7 @@ void set_kernel_text_rw(void) +@@ -881,6 +883,7 @@ void set_kernel_text_rw(void) if (!kernel_set_to_readonly) return; @@ -36152,7 +36270,7 @@ index cb4ef3d..1b13259 100644 pr_debug("Set kernel text: %lx - %lx for read write\n", start, start+size); -@@ -899,6 +902,7 @@ void set_kernel_text_ro(void) +@@ -895,6 +898,7 @@ void set_kernel_text_ro(void) if (!kernel_set_to_readonly) return; @@ -36160,7 +36278,7 @@ index cb4ef3d..1b13259 100644 pr_debug("Set kernel text: %lx - %lx for read only\n", start, start+size); -@@ -911,7 +915,7 @@ static void mark_nxdata_nx(void) +@@ -907,7 +911,7 @@ static void mark_nxdata_nx(void) * When this called, init has already been executed and released, * so everything past _etext should be NX. */ @@ -36169,14 +36287,15 @@ index cb4ef3d..1b13259 100644 /* * This comes from is_kernel_text upper limit. Also HPAGE where used: */ -@@ -927,26 +931,47 @@ void mark_rodata_ro(void) +@@ -923,26 +927,49 @@ void mark_rodata_ro(void) unsigned long start = PFN_ALIGN(_text); unsigned long size = PFN_ALIGN(_etext) - start; - set_pages_ro(virt_to_page(start), size >> PAGE_SHIFT); - printk(KERN_INFO "Write protecting the kernel text: %luk\n", - size >> 10); -+ if (config_enabled(CONFIG_PAX_KERNEXEC)) { ++#ifdef CONFIG_PAX_KERNEXEC ++ { + /* PaX: limit KERNEL_CS to actual size */ + unsigned long limit; + struct desc_struct d; @@ -36196,6 +36315,7 @@ index cb4ef3d..1b13259 100644 + if (config_enabled(CONFIG_MODULES)) + set_memory_4k((unsigned long)MODULES_EXEC_VADDR, (MODULES_EXEC_END - MODULES_EXEC_VADDR) >> PAGE_SHIFT); + } ++#endif + + start = ktla_ktva(start); + /* PaX: make KERNEL_CS read-only */ @@ -36230,10 +36350,10 @@ index cb4ef3d..1b13259 100644 #ifdef CONFIG_CPA_DEBUG diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c -index 5488d21..9f75681 100644 +index 214afda..444aa18 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c -@@ -137,7 +137,7 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page, +@@ -138,7 +138,7 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page, * around without checking the pgd every time. */ @@ -36242,7 +36362,7 @@ index 5488d21..9f75681 100644 EXPORT_SYMBOL_GPL(__supported_pte_mask); int force_personality32; -@@ -170,7 +170,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) +@@ -171,7 +171,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) for (address = start; address <= end; address += PGDIR_SIZE) { const pgd_t *pgd_ref = pgd_offset_k(address); @@ -36255,7 +36375,7 @@ index 5488d21..9f75681 100644 /* * When it is called after memory hot remove, pgd_none() -@@ -181,6 +186,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) +@@ -182,6 +187,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) continue; spin_lock(&pgd_lock); @@ -36281,7 +36401,7 @@ index 5488d21..9f75681 100644 list_for_each_entry(page, &pgd_list, lru) { pgd_t *pgd; spinlock_t *pgt_lock; -@@ -189,6 +213,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) +@@ -190,6 +214,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) /* the pgt_lock only for Xen */ pgt_lock = &pgd_page_get_mm(page)->page_table_lock; spin_lock(pgt_lock); @@ -36289,7 +36409,7 @@ index 5488d21..9f75681 100644 if (!pgd_none(*pgd_ref) && !pgd_none(*pgd)) BUG_ON(pgd_page_vaddr(*pgd) -@@ -202,7 +227,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) +@@ -203,7 +228,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) set_pgd(pgd, *pgd_ref); } @@ -36300,7 +36420,7 @@ index 5488d21..9f75681 100644 } spin_unlock(&pgd_lock); } -@@ -235,7 +263,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr) +@@ -236,7 +264,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr) { if (pgd_none(*pgd)) { pud_t *pud = (pud_t *)spp_getpage(); @@ -36309,7 +36429,7 @@ index 5488d21..9f75681 100644 if (pud != pud_offset(pgd, 0)) printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n", pud, pud_offset(pgd, 0)); -@@ -247,7 +275,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr) +@@ -248,7 +276,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr) { if (pud_none(*pud)) { pmd_t *pmd = (pmd_t *) spp_getpage(); @@ -36318,7 +36438,7 @@ index 5488d21..9f75681 100644 if (pmd != pmd_offset(pud, 0)) printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n", pmd, pmd_offset(pud, 0)); -@@ -276,7 +304,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte) +@@ -277,7 +305,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte) pmd = fill_pmd(pud, vaddr); pte = fill_pte(pmd, vaddr); @@ -36328,7 +36448,7 @@ index 5488d21..9f75681 100644 /* * It's enough to flush this one mapping. -@@ -338,14 +368,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size, +@@ -339,14 +369,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size, pgd = pgd_offset_k((unsigned long)__va(phys)); if (pgd_none(*pgd)) { pud = (pud_t *) spp_getpage(); @@ -36345,7 +36465,7 @@ index 5488d21..9f75681 100644 } pmd = pmd_offset(pud, phys); BUG_ON(!pmd_none(*pmd)); -@@ -586,7 +614,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end, +@@ -587,7 +615,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end, prot); spin_lock(&init_mm.page_table_lock); @@ -36354,7 +36474,7 @@ index 5488d21..9f75681 100644 spin_unlock(&init_mm.page_table_lock); } __flush_tlb_all(); -@@ -627,7 +655,7 @@ kernel_physical_mapping_init(unsigned long start, +@@ -628,7 +656,7 @@ kernel_physical_mapping_init(unsigned long start, page_size_mask); spin_lock(&init_mm.page_table_lock); @@ -36578,7 +36698,7 @@ index b4f2e7e..96c9c3e 100644 pte = kmemcheck_pte_lookup(address); diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c -index 72bb52f..4bc6d52 100644 +index d2dc043..4bc6d52 100644 --- a/arch/x86/mm/mmap.c +++ b/arch/x86/mm/mmap.c @@ -52,7 +52,7 @@ static unsigned long stack_maxrandom_size(void) @@ -36590,7 +36710,7 @@ index 72bb52f..4bc6d52 100644 static int mmap_is_legacy(void) { -@@ -81,27 +81,40 @@ unsigned long arch_mmap_rnd(void) +@@ -81,16 +81,41 @@ unsigned long arch_mmap_rnd(void) return rnd << PAGE_SHIFT; } @@ -36612,16 +36732,14 @@ index 72bb52f..4bc6d52 100644 - return PAGE_ALIGN(TASK_SIZE - gap - rnd); + return PAGE_ALIGN(pax_task_size - gap - rnd); - } - - /* - * Bottom-up (legacy) layout on X86_32 did not support randomization, X86_64 - * does, but not when emulating X86_32 - */ --static unsigned long mmap_legacy_base(unsigned long rnd) ++} ++ ++/* ++ * Bottom-up (legacy) layout on X86_32 did not support randomization, X86_64 ++ * does, but not when emulating X86_32 ++ */ +static unsigned long mmap_legacy_base(struct mm_struct *mm, unsigned long rnd) - { -- if (mmap_is_ia32()) ++{ + if (mmap_is_ia32()) { + +#ifdef CONFIG_PAX_SEGMEXEC @@ -36630,13 +36748,13 @@ index 72bb52f..4bc6d52 100644 + else +#endif + - return TASK_UNMAPPED_BASE; -- else ++ return TASK_UNMAPPED_BASE; + } else - return TASK_UNMAPPED_BASE + rnd; ++ return TASK_UNMAPPED_BASE + rnd; } -@@ -113,18 +126,29 @@ void arch_pick_mmap_layout(struct mm_struct *mm) + /* +@@ -101,18 +126,29 @@ void arch_pick_mmap_layout(struct mm_struct *mm) { unsigned long random_factor = 0UL; @@ -36646,7 +36764,7 @@ index 72bb52f..4bc6d52 100644 if (current->flags & PF_RANDOMIZE) random_factor = arch_mmap_rnd(); -- mm->mmap_legacy_base = mmap_legacy_base(random_factor); +- mm->mmap_legacy_base = TASK_UNMAPPED_BASE + random_factor; + mm->mmap_legacy_base = mmap_legacy_base(mm, random_factor); if (mmap_is_legacy()) { @@ -36718,7 +36836,7 @@ index 0057a7acc..95c7edd 100644 might_sleep(); if (is_enabled()) /* recheck and proper locking in *_core() */ diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c -index ef05755..7125725 100644 +index 8047687..6351be43 100644 --- a/arch/x86/mm/mpx.c +++ b/arch/x86/mm/mpx.c @@ -193,7 +193,7 @@ static int mpx_insn_decode(struct insn *insn, @@ -36745,10 +36863,10 @@ index ef05755..7125725 100644 err_out: /* info might be NULL, but kfree() handles that */ diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c -index d04f809..683f0be 100644 +index f70c1ff..fdb449c 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c -@@ -508,7 +508,7 @@ static void __init numa_clear_kernel_node_hotplug(void) +@@ -529,7 +529,7 @@ static void __init numa_clear_kernel_node_hotplug(void) } } @@ -36758,10 +36876,10 @@ index d04f809..683f0be 100644 unsigned long uninitialized_var(pfn_align); int i, nid; diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c -index 9cf96d8..ce09f13 100644 +index 01be9ec..f4643d7 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c -@@ -264,7 +264,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, +@@ -258,7 +258,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, */ #ifdef CONFIG_PCI_BIOS if (pcibios_enabled && within(pfn, BIOS_BEGIN >> PAGE_SHIFT, BIOS_END >> PAGE_SHIFT)) @@ -36770,7 +36888,7 @@ index 9cf96d8..ce09f13 100644 #endif /* -@@ -272,9 +272,10 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, +@@ -266,8 +266,8 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, * Does not cover __inittext since that is gone later on. On * 64bit we do not enforce !NX on the low mapping */ @@ -36779,19 +36897,9 @@ index 9cf96d8..ce09f13 100644 + if (within(address, ktla_ktva((unsigned long)_text), ktla_ktva((unsigned long)_etext))) + pgprot_val(forbidden) |= _PAGE_NX & __supported_pte_mask; -+#ifdef CONFIG_DEBUG_RODATA /* * The .rodata section needs to be read-only. Using the pfn - * catches all aliases. -@@ -282,6 +283,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, - if (within(pfn, __pa_symbol(__start_rodata) >> PAGE_SHIFT, - __pa_symbol(__end_rodata) >> PAGE_SHIFT)) - pgprot_val(forbidden) |= _PAGE_RW; -+#endif - - #if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) - /* -@@ -320,6 +322,13 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, +@@ -314,6 +314,13 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address, } #endif @@ -36805,7 +36913,7 @@ index 9cf96d8..ce09f13 100644 prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden)); return prot; -@@ -456,23 +465,37 @@ EXPORT_SYMBOL_GPL(slow_virt_to_phys); +@@ -450,23 +457,37 @@ EXPORT_SYMBOL_GPL(slow_virt_to_phys); static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) { /* change init_mm */ @@ -36845,28 +36953,24 @@ index 9cf96d8..ce09f13 100644 } static int -@@ -709,6 +732,10 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address, - return 0; +@@ -704,6 +725,8 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address, } -+#if debug_pagealloc == 0 -+static int split_large_page(struct cpa_data *cpa, pte_t *kpte, -+ unsigned long address) __must_hold(&cpa_lock); -+#endif static int split_large_page(struct cpa_data *cpa, pte_t *kpte, ++ unsigned long address) __must_hold(&cpa_lock); ++static int split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address) { -@@ -1152,6 +1179,9 @@ static int __cpa_process_fault(struct cpa_data *cpa, unsigned long vaddr, + struct page *base; +@@ -1157,6 +1180,7 @@ static int __cpa_process_fault(struct cpa_data *cpa, unsigned long vaddr, } } -+#if debug_pagealloc == 0 +static int __change_page_attr(struct cpa_data *cpa, int primary) __must_hold(&cpa_lock); -+#endif static int __change_page_attr(struct cpa_data *cpa, int primary) { unsigned long address; -@@ -1210,7 +1240,9 @@ repeat: +@@ -1215,7 +1239,9 @@ repeat: * Do we really change anything ? */ if (pte_val(old_pte) != pte_val(new_pte)) { @@ -36877,7 +36981,7 @@ index 9cf96d8..ce09f13 100644 } cpa->numpages = 1; diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c -index f4ae536..e250eec 100644 +index faec01e..437ec71 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -589,7 +589,7 @@ int free_memtype(u64 start, u64 end) @@ -37372,12 +37476,12 @@ index 75cc097..79a097f 100644 /* * It's enough to flush this one mapping. diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c -index 92e2eac..92fc081 100644 +index f65a33f..f408a99 100644 --- a/arch/x86/mm/setup_nx.c +++ b/arch/x86/mm/setup_nx.c -@@ -5,8 +5,10 @@ - #include <asm/pgtable.h> +@@ -6,8 +6,10 @@ #include <asm/proto.h> + #include <asm/cpufeature.h> +#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) static int disable_nx; @@ -37386,7 +37490,7 @@ index 92e2eac..92fc081 100644 /* * noexec = on|off * -@@ -28,12 +30,17 @@ static int __init noexec_setup(char *str) +@@ -29,12 +31,17 @@ static int __init noexec_setup(char *str) return 0; } early_param("noexec", noexec_setup); @@ -37405,7 +37509,7 @@ index 92e2eac..92fc081 100644 } diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c -index 5fb6ada..9c48b29 100644 +index fe9b9f7..35b4936e 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@ -45,7 +45,11 @@ void leave_mm(int cpu) @@ -37464,34 +37568,34 @@ index 0000000..3fda3f3 +EXPORT_SYMBOL(__pax_close_userland); +#endif diff --git a/arch/x86/net/bpf_jit.S b/arch/x86/net/bpf_jit.S -index 4093216..44b6b83 100644 +index f2a7faf..b77bb6c 100644 --- a/arch/x86/net/bpf_jit.S +++ b/arch/x86/net/bpf_jit.S -@@ -8,6 +8,7 @@ - * of the License. +@@ -9,6 +9,7 @@ */ #include <linux/linkage.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> /* * Calling convention : -@@ -37,6 +38,7 @@ sk_load_word_positive_offset: +@@ -39,6 +40,7 @@ FUNC(sk_load_word_positive_offset) jle bpf_slow_path_word mov (SKBDATA,%rsi),%eax bswap %eax /* ntohl() */ + pax_force_retaddr ret - sk_load_half: -@@ -54,6 +56,7 @@ sk_load_half_positive_offset: + FUNC(sk_load_half) +@@ -52,6 +54,7 @@ FUNC(sk_load_half_positive_offset) jle bpf_slow_path_half movzwl (SKBDATA,%rsi),%eax rol $8,%ax # ntohs() + pax_force_retaddr ret - sk_load_byte: -@@ -68,6 +71,7 @@ sk_load_byte_positive_offset: + FUNC(sk_load_byte) +@@ -62,6 +65,7 @@ FUNC(sk_load_byte_positive_offset) cmp %esi,%r9d /* if (offset >= hlen) goto bpf_slow_path_byte */ jle bpf_slow_path_byte movzbl (SKBDATA,%rsi),%eax @@ -37499,7 +37603,7 @@ index 4093216..44b6b83 100644 ret /* rsi contains offset and can be scratched */ -@@ -89,6 +93,7 @@ bpf_slow_path_word: +@@ -85,6 +89,7 @@ bpf_slow_path_word: js bpf_error mov - MAX_BPF_STACK + 32(%rbp),%eax bswap %eax @@ -37507,7 +37611,7 @@ index 4093216..44b6b83 100644 ret bpf_slow_path_half: -@@ -97,12 +102,14 @@ bpf_slow_path_half: +@@ -93,12 +98,14 @@ bpf_slow_path_half: mov - MAX_BPF_STACK + 32(%rbp),%ax rol $8,%ax movzwl %ax,%eax @@ -37522,7 +37626,7 @@ index 4093216..44b6b83 100644 ret #define sk_negative_common(SIZE) \ -@@ -125,6 +132,7 @@ sk_load_word_negative_offset: +@@ -123,6 +130,7 @@ FUNC(sk_load_word_negative_offset) sk_negative_common(4) mov (%rax), %eax bswap %eax @@ -37530,7 +37634,7 @@ index 4093216..44b6b83 100644 ret bpf_slow_path_half_neg: -@@ -136,6 +144,7 @@ sk_load_half_negative_offset: +@@ -134,6 +142,7 @@ FUNC(sk_load_half_negative_offset) mov (%rax),%ax rol $8,%ax movzwl %ax,%eax @@ -37538,15 +37642,15 @@ index 4093216..44b6b83 100644 ret bpf_slow_path_byte_neg: -@@ -145,6 +154,7 @@ sk_load_byte_negative_offset: - .globl sk_load_byte_negative_offset +@@ -143,6 +152,7 @@ bpf_slow_path_byte_neg: + FUNC(sk_load_byte_negative_offset) sk_negative_common(1) movzbl (%rax), %eax + pax_force_retaddr ret bpf_error: -@@ -155,4 +165,5 @@ bpf_error: +@@ -153,4 +163,5 @@ bpf_error: mov - MAX_BPF_STACK + 16(%rbp),%r14 mov - MAX_BPF_STACK + 24(%rbp),%r15 leaveq @@ -37612,10 +37716,10 @@ index 4286f36..54471fd 100644 bpf_prog_unlock_free(fp); } diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c -index 4e664bd..2beeaa2 100644 +index cb31a44..b942435 100644 --- a/arch/x86/oprofile/backtrace.c +++ b/arch/x86/oprofile/backtrace.c -@@ -46,11 +46,11 @@ dump_user_backtrace_32(struct stack_frame_ia32 *head) +@@ -47,11 +47,11 @@ dump_user_backtrace_32(struct stack_frame_ia32 *head) struct stack_frame_ia32 *fp; unsigned long bytes; @@ -37629,7 +37733,7 @@ index 4e664bd..2beeaa2 100644 oprofile_add_trace(bufhead[0].return_address); -@@ -92,7 +92,7 @@ static struct stack_frame *dump_user_backtrace(struct stack_frame *head) +@@ -93,7 +93,7 @@ static struct stack_frame *dump_user_backtrace(struct stack_frame *head) struct stack_frame bufhead[2]; unsigned long bytes; @@ -37639,7 +37743,7 @@ index 4e664bd..2beeaa2 100644 return NULL; diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c -index 1d2e639..6473b8a 100644 +index 0e07e09..334d300 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c @@ -23,6 +23,7 @@ @@ -37650,7 +37754,7 @@ index 1d2e639..6473b8a 100644 #include "op_counter.h" #include "op_x86_model.h" -@@ -614,7 +615,7 @@ enum __force_cpu_type { +@@ -615,7 +616,7 @@ enum __force_cpu_type { static int force_cpu_type; @@ -37659,7 +37763,7 @@ index 1d2e639..6473b8a 100644 { if (!strcmp(str, "timer")) { force_cpu_type = timer; -@@ -785,8 +786,11 @@ int __init op_nmi_init(struct oprofile_operations *ops) +@@ -786,8 +787,11 @@ int __init op_nmi_init(struct oprofile_operations *ops) if (ret) return ret; @@ -37674,10 +37778,10 @@ index 1d2e639..6473b8a 100644 mux_init(ops); diff --git a/arch/x86/oprofile/op_model_amd.c b/arch/x86/oprofile/op_model_amd.c -index 50d86c0..b0b9ae0 100644 +index 660a83c..6ff762b 100644 --- a/arch/x86/oprofile/op_model_amd.c +++ b/arch/x86/oprofile/op_model_amd.c -@@ -519,9 +519,11 @@ static int op_amd_init(struct oprofile_operations *ops) +@@ -518,9 +518,11 @@ static int op_amd_init(struct oprofile_operations *ops) num_counters = AMD64_NUM_COUNTERS; } @@ -38008,7 +38112,7 @@ index 9770e55..76067ec 100644 } EXPORT_SYMBOL(pcibios_set_irq_routing); diff --git a/arch/x86/pci/vmd.c b/arch/x86/pci/vmd.c -index d57e480..fc4db30 100644 +index 7792aba..38faabf 100644 --- a/arch/x86/pci/vmd.c +++ b/arch/x86/pci/vmd.c @@ -374,7 +374,7 @@ static void vmd_teardown_dma_ops(struct vmd_dev *vmd) @@ -38037,10 +38141,10 @@ index d57e480..fc4db30 100644 } #undef ASSIGN_VMD_DMA_OPS diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c -index ed5b673..24d2d53 100644 +index 338402b9..29ea50ab 100644 --- a/arch/x86/platform/efi/efi_32.c +++ b/arch/x86/platform/efi/efi_32.c -@@ -61,11 +61,27 @@ pgd_t * __init efi_call_phys_prolog(void) +@@ -66,11 +66,27 @@ pgd_t * __init efi_call_phys_prolog(void) struct desc_ptr gdt_descr; pgd_t *save_pgd; @@ -38068,7 +38172,7 @@ index ed5b673..24d2d53 100644 gdt_descr.address = __pa(get_cpu_gdt_table(0)); gdt_descr.size = GDT_SIZE - 1; load_gdt(&gdt_descr); -@@ -77,6 +93,14 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd) +@@ -82,6 +98,14 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd) { struct desc_ptr gdt_descr; @@ -38084,10 +38188,10 @@ index ed5b673..24d2d53 100644 gdt_descr.size = GDT_SIZE - 1; load_gdt(&gdt_descr); diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c -index a0ac0f9..f41d324 100644 +index 49e4dd4..d714abf 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c -@@ -96,6 +96,11 @@ pgd_t * __init efi_call_phys_prolog(void) +@@ -93,6 +93,11 @@ pgd_t * __init efi_call_phys_prolog(void) vaddress = (unsigned long)__va(pgd * PGDIR_SIZE); set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), *pgd_offset_k(vaddress)); } @@ -38096,10 +38200,10 @@ index a0ac0f9..f41d324 100644 + load_cr3(swapper_pg_dir); +#endif + + out: __flush_tlb_all(); - return save_pgd; -@@ -119,6 +124,10 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd) +@@ -120,6 +125,10 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd) kfree(save_pgd); @@ -38110,7 +38214,7 @@ index a0ac0f9..f41d324 100644 __flush_tlb_all(); early_code_mapping_set_exec(0); } -@@ -148,8 +157,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) +@@ -220,8 +229,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) unsigned npages; pgd_t *pgd; @@ -38133,8 +38237,8 @@ index a0ac0f9..f41d324 100644 return 0; + } - efi_scratch.efi_pgt = (pgd_t *)(unsigned long)real_mode_header->trampoline_pgd; - pgd = __va(efi_scratch.efi_pgt); + efi_scratch.efi_pgt = (pgd_t *)__pa(efi_pgd); + pgd = efi_pgd; diff --git a/arch/x86/platform/efi/efi_stub_32.S b/arch/x86/platform/efi/efi_stub_32.S index 040192b..7d3300f 100644 --- a/arch/x86/platform/efi/efi_stub_32.S @@ -38265,25 +38369,24 @@ index 040192b..7d3300f 100644 .long 0 efi_rt_function_ptr: diff --git a/arch/x86/platform/efi/efi_stub_64.S b/arch/x86/platform/efi/efi_stub_64.S -index 86d0f9e..6d499f4 100644 +index 92723ae..c9adfb7 100644 --- a/arch/x86/platform/efi/efi_stub_64.S +++ b/arch/x86/platform/efi/efi_stub_64.S -@@ -11,6 +11,7 @@ - #include <asm/msr.h> +@@ -12,6 +12,7 @@ #include <asm/processor-flags.h> #include <asm/page_types.h> + #include <asm/frame.h> +#include <asm/alternative-asm.h> #define SAVE_XMM \ mov %rsp, %rax; \ -@@ -88,6 +89,7 @@ ENTRY(efi_call) - RESTORE_PGT +@@ -54,5 +55,6 @@ ENTRY(efi_call) addq $48, %rsp RESTORE_XMM + FRAME_END + pax_force_retaddr 0, 1 ret ENDPROC(efi_call) - diff --git a/arch/x86/platform/intel-mid/intel-mid.c b/arch/x86/platform/intel-mid/intel-mid.c index 90bb997..3cca066 100644 --- a/arch/x86/platform/intel-mid/intel-mid.c @@ -38324,10 +38427,10 @@ index 3c1c386..59a68ed 100644 +extern const void *get_cloverview_ops(void); +extern const void *get_tangier_ops(void); diff --git a/arch/x86/platform/intel-mid/mfld.c b/arch/x86/platform/intel-mid/mfld.c -index 23381d2..8ddc10e 100644 +index 1eb47b6..dadfb57 100644 --- a/arch/x86/platform/intel-mid/mfld.c +++ b/arch/x86/platform/intel-mid/mfld.c -@@ -64,12 +64,12 @@ static void __init penwell_arch_setup(void) +@@ -61,12 +61,12 @@ static void __init penwell_arch_setup(void) pm_power_off = mfld_power_off; } @@ -38343,10 +38446,10 @@ index 23381d2..8ddc10e 100644 return &penwell_ops; } diff --git a/arch/x86/platform/intel-mid/mrfl.c b/arch/x86/platform/intel-mid/mrfl.c -index aaca917..66eadbc 100644 +index bd1adc6..e4f8c74 100644 --- a/arch/x86/platform/intel-mid/mrfl.c +++ b/arch/x86/platform/intel-mid/mrfl.c -@@ -97,7 +97,7 @@ static struct intel_mid_ops tangier_ops = { +@@ -94,7 +94,7 @@ static struct intel_mid_ops tangier_ops = { .arch_setup = tangier_arch_setup, }; @@ -38356,10 +38459,10 @@ index aaca917..66eadbc 100644 return &tangier_ops; } diff --git a/arch/x86/platform/intel-quark/imr_selftest.c b/arch/x86/platform/intel-quark/imr_selftest.c -index 278e4da..35db1a9 100644 +index f5bad40..da1428a 100644 --- a/arch/x86/platform/intel-quark/imr_selftest.c +++ b/arch/x86/platform/intel-quark/imr_selftest.c -@@ -55,7 +55,7 @@ static void __init imr_self_test_result(int res, const char *fmt, ...) +@@ -54,7 +54,7 @@ static void __init imr_self_test_result(int res, const char *fmt, ...) */ static void __init imr_self_test(void) { @@ -38835,10 +38938,10 @@ index c7b15f3..cc09a65 100644 This is the Linux Xen port. Enabling this will allow the kernel to boot in a paravirtualized environment under the diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c -index e3679db..16b93d1 100644 +index 880862c..53dcb02 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c -@@ -131,8 +131,6 @@ EXPORT_SYMBOL_GPL(xen_start_info); +@@ -132,8 +132,6 @@ EXPORT_SYMBOL_GPL(xen_start_info); struct shared_info xen_dummy_shared_info; @@ -38847,7 +38950,7 @@ index e3679db..16b93d1 100644 RESERVE_BRK(shared_info_page_brk, PAGE_SIZE); __read_mostly int xen_have_vector_callback; EXPORT_SYMBOL_GPL(xen_have_vector_callback); -@@ -590,8 +588,7 @@ static void xen_load_gdt(const struct desc_ptr *dtr) +@@ -591,8 +589,7 @@ static void xen_load_gdt(const struct desc_ptr *dtr) { unsigned long va = dtr->address; unsigned int size = dtr->size + 1; @@ -38857,7 +38960,7 @@ index e3679db..16b93d1 100644 int f; /* -@@ -639,8 +636,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr) +@@ -640,8 +637,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr) { unsigned long va = dtr->address; unsigned int size = dtr->size + 1; @@ -38867,7 +38970,7 @@ index e3679db..16b93d1 100644 int f; /* -@@ -648,7 +644,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr) +@@ -649,7 +645,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr) * 8-byte entries, or 16 4k pages.. */ @@ -38876,7 +38979,7 @@ index e3679db..16b93d1 100644 BUG_ON(va & ~PAGE_MASK); for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) { -@@ -777,7 +773,7 @@ static int cvt_gate_to_trap(int vector, const gate_desc *val, +@@ -778,7 +774,7 @@ static int cvt_gate_to_trap(int vector, const gate_desc *val, * so we should never see them. Warn if * there's an unexpected IST-using fault handler. */ @@ -38885,7 +38988,7 @@ index e3679db..16b93d1 100644 addr = (unsigned long)xen_debug; else if (addr == (unsigned long)int3) addr = (unsigned long)xen_int3; -@@ -1262,7 +1258,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = { +@@ -1263,7 +1259,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = { .end_context_switch = xen_end_context_switch, }; @@ -38894,7 +38997,7 @@ index e3679db..16b93d1 100644 { struct sched_shutdown r = { .reason = reason }; int cpu; -@@ -1270,26 +1266,26 @@ static void xen_reboot(int reason) +@@ -1271,26 +1267,26 @@ static void xen_reboot(int reason) for_each_online_cpu(cpu) xen_pmu_finish(cpu); @@ -38927,7 +39030,7 @@ index e3679db..16b93d1 100644 { if (pm_power_off) pm_power_off(); -@@ -1442,8 +1438,11 @@ static void __ref xen_setup_gdt(int cpu) +@@ -1443,8 +1439,11 @@ static void __ref xen_setup_gdt(int cpu) pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry_boot; pv_cpu_ops.load_gdt = xen_load_gdt_boot; @@ -38941,7 +39044,7 @@ index e3679db..16b93d1 100644 pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry; pv_cpu_ops.load_gdt = xen_load_gdt; -@@ -1560,7 +1559,17 @@ asmlinkage __visible void __init xen_start_kernel(void) +@@ -1561,7 +1560,17 @@ asmlinkage __visible void __init xen_start_kernel(void) __userpte_alloc_gfp &= ~__GFP_HIGHMEM; /* Work out if we support NX */ @@ -38960,7 +39063,7 @@ index e3679db..16b93d1 100644 /* Get mfn list */ xen_build_dynamic_phys_to_machine(); -@@ -1588,13 +1597,6 @@ asmlinkage __visible void __init xen_start_kernel(void) +@@ -1589,13 +1598,6 @@ asmlinkage __visible void __init xen_start_kernel(void) machine_ops = xen_machine_ops; @@ -38975,7 +39078,7 @@ index e3679db..16b93d1 100644 #ifdef CONFIG_ACPI_NUMA diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c -index c913ca4..55f8877 100644 +index 478a2de..4f5e7b6 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -1950,7 +1950,14 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) @@ -39057,7 +39160,7 @@ index c913ca4..55f8877 100644 .alloc_pud = xen_alloc_pmd_init, .release_pud = xen_release_pmd_init, diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c -index 3f4ebf0..f074dc1 100644 +index 719cf29..8a13fd8 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@ -306,17 +306,13 @@ static void __init xen_smp_prepare_boot_cpu(void) @@ -39100,7 +39203,7 @@ index 3f4ebf0..f074dc1 100644 ctxt->user_regs.ss = __KERNEL_DS; xen_copy_trap_info(ctxt->trap_ctxt); -@@ -747,7 +743,7 @@ static const struct smp_ops xen_smp_ops __initconst = { +@@ -749,7 +745,7 @@ static const struct smp_ops xen_smp_ops __initconst = { void __init xen_smp_init(void) { @@ -39123,14 +39226,14 @@ index feb6d40..e59382c 100644 #else movl %ss:xen_vcpu, %eax diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S -index b65f59a..c43f9c6 100644 +index 7f8d8ab..8ecf53e 100644 --- a/arch/x86/xen/xen-head.S +++ b/arch/x86/xen/xen-head.S -@@ -41,6 +41,17 @@ ENTRY(startup_xen) - #ifdef CONFIG_X86_32 - mov %esi,xen_start_info - mov $init_thread_union+THREAD_SIZE,%esp -+#ifdef CONFIG_SMP +@@ -50,6 +50,18 @@ ENTRY(startup_xen) + mov %_ASM_SI, xen_start_info + mov $init_thread_union+THREAD_SIZE, %_ASM_SP + ++#if defined(CONFIG_X86_32) && defined(CONFIG_SMP) + movl $cpu_gdt_table,%edi + movl $__per_cpu_load,%eax + movw %ax,__KERNEL_PERCPU + 2(%edi) @@ -39141,9 +39244,10 @@ index b65f59a..c43f9c6 100644 + subl $__per_cpu_start,%eax + movw %ax,__KERNEL_PERCPU + 0(%edi) +#endif - #else - mov %rsi,xen_start_info - mov $init_thread_union+THREAD_SIZE,%rsp ++ + jmp xen_start_kernel + + __FINIT diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index 4140b07..a391b69 100644 --- a/arch/x86/xen/xen-ops.h @@ -39196,10 +39300,10 @@ index 2f33760..835e50a 100644 #define XCHAL_ICACHE_SIZE 8192 /* I-cache size in bytes or 0 */ #define XCHAL_DCACHE_SIZE 8192 /* D-cache size in bytes or 0 */ diff --git a/block/bio.c b/block/bio.c -index cf75915..02d854f 100644 +index 807d25e..ac1e9e7 100644 --- a/block/bio.c +++ b/block/bio.c -@@ -1143,7 +1143,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q, +@@ -1149,7 +1149,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q, /* * Overflow, abort */ @@ -39208,7 +39312,7 @@ index cf75915..02d854f 100644 return ERR_PTR(-EINVAL); nr_pages += end - start; -@@ -1268,7 +1268,7 @@ struct bio *bio_map_user_iov(struct request_queue *q, +@@ -1274,7 +1274,7 @@ struct bio *bio_map_user_iov(struct request_queue *q, /* * Overflow, abort */ @@ -39272,10 +39376,10 @@ index 66e6f1a..8fb30f4 100644 spin_unlock_irq(blkg->q->queue_lock); diff --git a/block/blk-map.c b/block/blk-map.c -index a54f054..760b494 100644 +index b9f88b7..f40e6f5 100644 --- a/block/blk-map.c +++ b/block/blk-map.c -@@ -245,7 +245,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, +@@ -214,7 +214,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, if (!len || !kbuf) return -EINVAL; @@ -39329,10 +39433,10 @@ index d214e92..9649863 100644 if (blk_verify_command(rq->cmd, has_write_perm)) return -EPERM; diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c -index 1f9093e..96b3e56 100644 +index 4a34978..d102252 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c -@@ -1941,8 +1941,8 @@ static u64 cfqg_prfill_sectors_recursive(struct seq_file *sf, +@@ -1953,8 +1953,8 @@ static u64 cfqg_prfill_sectors_recursive(struct seq_file *sf, { struct blkg_rwstat tmp = blkg_rwstat_recursive_sum(pd->blkg, NULL, offsetof(struct blkcg_gq, stat_bytes)); @@ -39344,7 +39448,7 @@ index 1f9093e..96b3e56 100644 return __blkg_prfill_u64(sf, pd, sum >> 9); } diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c -index f678c73..f35aa18 100644 +index 556826a..4e7c5fd 100644 --- a/block/compat_ioctl.c +++ b/block/compat_ioctl.c @@ -156,7 +156,7 @@ static int compat_cdrom_generic_command(struct block_device *bdev, fmode_t mode, @@ -39682,51 +39786,6 @@ index 94970a7..f0c8d26 100644 const u32 *k = ctx->expkey; const __le32 *s = (const __le32 *)src; __le32 *d = (__le32 *)dst; -diff --git a/crypto/zlib.c b/crypto/zlib.c -index d51a30a..b6891a3 100644 ---- a/crypto/zlib.c -+++ b/crypto/zlib.c -@@ -95,10 +95,10 @@ static int zlib_compress_setup(struct crypto_pcomp *tfm, const void *params, - zlib_comp_exit(ctx); - - window_bits = tb[ZLIB_COMP_WINDOWBITS] -- ? nla_get_u32(tb[ZLIB_COMP_WINDOWBITS]) -+ ? nla_get_s32(tb[ZLIB_COMP_WINDOWBITS]) - : MAX_WBITS; - mem_level = tb[ZLIB_COMP_MEMLEVEL] -- ? nla_get_u32(tb[ZLIB_COMP_MEMLEVEL]) -+ ? nla_get_s32(tb[ZLIB_COMP_MEMLEVEL]) - : DEF_MEM_LEVEL; - - workspacesize = zlib_deflate_workspacesize(window_bits, mem_level); -@@ -108,15 +108,15 @@ static int zlib_compress_setup(struct crypto_pcomp *tfm, const void *params, - - ret = zlib_deflateInit2(stream, - tb[ZLIB_COMP_LEVEL] -- ? nla_get_u32(tb[ZLIB_COMP_LEVEL]) -+ ? nla_get_s32(tb[ZLIB_COMP_LEVEL]) - : Z_DEFAULT_COMPRESSION, - tb[ZLIB_COMP_METHOD] -- ? nla_get_u32(tb[ZLIB_COMP_METHOD]) -+ ? nla_get_s32(tb[ZLIB_COMP_METHOD]) - : Z_DEFLATED, - window_bits, - mem_level, - tb[ZLIB_COMP_STRATEGY] -- ? nla_get_u32(tb[ZLIB_COMP_STRATEGY]) -+ ? nla_get_s32(tb[ZLIB_COMP_STRATEGY]) - : Z_DEFAULT_STRATEGY); - if (ret != Z_OK) { - vfree(stream->workspace); -@@ -224,7 +224,7 @@ static int zlib_decompress_setup(struct crypto_pcomp *tfm, const void *params, - zlib_decomp_exit(ctx); - - ctx->decomp_windowBits = tb[ZLIB_DECOMP_WINDOWBITS] -- ? nla_get_u32(tb[ZLIB_DECOMP_WINDOWBITS]) -+ ? nla_get_s32(tb[ZLIB_DECOMP_WINDOWBITS]) - : DEF_WBITS; - - stream->workspace = vzalloc(zlib_inflate_workspacesize()); diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c index f71b756..b96847c 100644 --- a/drivers/acpi/ac.c @@ -39741,10 +39800,10 @@ index f71b756..b96847c 100644 #endif diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c -index a76f8be..28cef93 100644 +index 4361bc9..5d5306e 100644 --- a/drivers/acpi/acpi_video.c +++ b/drivers/acpi/acpi_video.c -@@ -426,7 +426,7 @@ static int video_set_report_key_events(const struct dmi_system_id *id) +@@ -419,7 +419,7 @@ static int video_set_report_key_events(const struct dmi_system_id *id) return 0; } @@ -39789,10 +39848,10 @@ index 16129c7..8b675cd 100644 struct apei_exec_context { u32 ip; diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c -index 3dd9c46..cf0678f 100644 +index 60746ef..02a1ddc 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c -@@ -478,7 +478,7 @@ static void __ghes_print_estatus(const char *pfx, +@@ -483,7 +483,7 @@ static void __ghes_print_estatus(const char *pfx, const struct acpi_hest_generic *generic, const struct acpi_hest_generic_status *estatus) { @@ -39801,7 +39860,7 @@ index 3dd9c46..cf0678f 100644 unsigned int curr_seqno; char pfx_seq[64]; -@@ -489,7 +489,7 @@ static void __ghes_print_estatus(const char *pfx, +@@ -494,7 +494,7 @@ static void __ghes_print_estatus(const char *pfx, else pfx = KERN_ERR; } @@ -39810,7 +39869,7 @@ index 3dd9c46..cf0678f 100644 snprintf(pfx_seq, sizeof(pfx_seq), "%s{%u}" HW_ERR, pfx, curr_seqno); printk("%s""Hardware error from APEI Generic Hardware Error Source: %d\n", pfx_seq, generic->header.source_id); -@@ -539,7 +539,7 @@ static int ghes_estatus_cached(struct acpi_hest_generic_status *estatus) +@@ -544,7 +544,7 @@ static int ghes_estatus_cached(struct acpi_hest_generic_status *estatus) cache_estatus = GHES_ESTATUS_FROM_CACHE(cache); if (memcmp(estatus, cache_estatus, len)) continue; @@ -39819,7 +39878,7 @@ index 3dd9c46..cf0678f 100644 now = sched_clock(); if (now - cache->time_in < GHES_ESTATUS_IN_CACHE_MAX_NSEC) cached = 1; -@@ -573,7 +573,7 @@ static struct ghes_estatus_cache *ghes_estatus_cache_alloc( +@@ -578,7 +578,7 @@ static struct ghes_estatus_cache *ghes_estatus_cache_alloc( cache_estatus = GHES_ESTATUS_FROM_CACHE(cache); memcpy(cache_estatus, estatus, len); cache->estatus_len = len; @@ -39828,7 +39887,7 @@ index 3dd9c46..cf0678f 100644 cache->generic = generic; cache->time_in = sched_clock(); return cache; -@@ -623,7 +623,7 @@ static void ghes_estatus_cache_add( +@@ -628,7 +628,7 @@ static void ghes_estatus_cache_add( slot_cache = cache; break; } @@ -39851,10 +39910,10 @@ index b719ab3..371e2a6 100644 enum acpi_battery_files { info_tag = 0, diff --git a/drivers/acpi/bgrt.c b/drivers/acpi/bgrt.c -index a83e3c6..7f4a90b 100644 +index 75f128e..72b03af 100644 --- a/drivers/acpi/bgrt.c +++ b/drivers/acpi/bgrt.c -@@ -86,8 +86,10 @@ static int __init bgrt_init(void) +@@ -87,8 +87,10 @@ static int __init bgrt_init(void) if (!bgrt_image) return -ENODEV; @@ -39890,7 +39949,7 @@ index 96809cd..6a49f979 100644 .callback = dmi_disable_osi_vista, .ident = "Fujitsu Siemens", diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c -index f9081b7..7ea8a5e 100644 +index c068c82..7611bc1 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -63,7 +63,7 @@ static int set_copy_dsdt(const struct dmi_system_id *id) @@ -40000,10 +40059,10 @@ index 7188e53..6012bc4 100644 * Fujitsu Primequest machines will return 1023 to indicate an * error if the _SUN method is evaluated on SxFy objects that diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c -index 175c86b..f8226f0 100644 +index 444e374..eb738f2 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c -@@ -906,7 +906,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr) +@@ -866,7 +866,7 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr) { int i, count = CPUIDLE_DRIVER_STATE_START; struct acpi_processor_cx *cx; @@ -40026,10 +40085,10 @@ index 7cfbda4..74f738c 100644 set_no_mwait, "Extensa 5220", { DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c -index f054cad..e3c1453 100644 +index 2a8b596..90a329e 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c -@@ -148,7 +148,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d) +@@ -149,7 +149,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d) return 0; } @@ -40145,7 +40204,7 @@ index 1316ddd..0f10a1d 100644 backlight_notifier_registered = true; init_done = true; diff --git a/drivers/android/binder.c b/drivers/android/binder.c -index 7d00b7a..d5fd80d 100644 +index 16288e7..91ab5f3 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -120,7 +120,7 @@ static DECLARE_WAIT_QUEUE_HEAD(binder_user_error_wait); @@ -40217,7 +40276,7 @@ index 55e257c..554c697 100644 } diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c -index e417e1a..baf752f 100644 +index 567859c..ffe7c75 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -4196,7 +4196,7 @@ int ata_sas_port_init(struct ata_port *ap) @@ -40413,7 +40472,7 @@ index 6339efd..2b441d5 100644 dma_complete++; } diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c -index 82f2ae0..f205c02 100644 +index a969a7e..f5c5cd8 100644 --- a/drivers/atm/firestream.c +++ b/drivers/atm/firestream.c @@ -749,7 +749,7 @@ static void process_txdone_queue (struct fs_dev *dev, struct queue *q) @@ -41252,10 +41311,10 @@ index cecfb94..87009ec 100644 } diff --git a/drivers/base/bus.c b/drivers/base/bus.c -index 5005924..9fc06c4 100644 +index 6470eb8..3a7d92b 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c -@@ -1141,7 +1141,7 @@ int subsys_interface_register(struct subsys_interface *sif) +@@ -1136,7 +1136,7 @@ int subsys_interface_register(struct subsys_interface *sif) return -EINVAL; mutex_lock(&subsys->p->mutex); @@ -41264,7 +41323,7 @@ index 5005924..9fc06c4 100644 if (sif->add_dev) { subsys_dev_iter_init(&iter, subsys, NULL, NULL); while ((dev = subsys_dev_iter_next(&iter))) -@@ -1166,7 +1166,7 @@ void subsys_interface_unregister(struct subsys_interface *sif) +@@ -1161,7 +1161,7 @@ void subsys_interface_unregister(struct subsys_interface *sif) subsys = sif->subsys; mutex_lock(&subsys->p->mutex); @@ -41382,10 +41441,10 @@ index 279e539..4c9d7fb 100644 static void platform_msi_free_descs(struct device *dev, int base, int nvec) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c -index 0caf92a..62c184c 100644 +index 56705b5..4e938f5 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c -@@ -1804,8 +1804,10 @@ int genpd_dev_pm_attach(struct device *dev) +@@ -1841,8 +1841,10 @@ int genpd_dev_pm_attach(struct device *dev) goto out; } @@ -41508,7 +41567,7 @@ index a7b4679..d302490 100644 static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL); diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c -index a1e0b9a..81fc106 100644 +index 5fb7718..b4b79fb 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -36,14 +36,14 @@ static bool pm_abort_suspend __read_mostly; @@ -41528,7 +41587,7 @@ index a1e0b9a..81fc106 100644 *cnt = (comb >> IN_PROGRESS_BITS); *inpr = comb & MAX_IN_PROGRESS; -@@ -540,7 +540,7 @@ static void wakeup_source_activate(struct wakeup_source *ws) +@@ -542,7 +542,7 @@ static void wakeup_source_activate(struct wakeup_source *ws) ws->start_prevent_time = ws->last_time; /* Increment the counter of events in progress. */ @@ -41537,7 +41596,7 @@ index a1e0b9a..81fc106 100644 trace_wakeup_source_activate(ws->name, cec); } -@@ -666,7 +666,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws) +@@ -668,7 +668,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws) * Increment the counter of registered wakeup events and decrement the * couter of wakeup events in progress simultaneously. */ @@ -41569,10 +41628,10 @@ index 1ee3d40..3274424 100644 regmap_writeable(map, i) ? 'y' : 'n', regmap_volatile(map, i) ? 'y' : 'n', diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c -index ee54e84..f00a29c 100644 +index df2d2ef..f9ea3b9 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c -@@ -401,8 +401,8 @@ static void regmap_unlock_mutex(void *__map) +@@ -402,8 +402,8 @@ static void regmap_unlock_mutex(void *__map) mutex_unlock(&map->mutex); } @@ -41582,7 +41641,7 @@ index ee54e84..f00a29c 100644 { struct regmap *map = __map; unsigned long flags; -@@ -411,8 +411,8 @@ __acquires(&map->spinlock) +@@ -412,8 +412,8 @@ __acquires(&map->spinlock) map->spinlock_flags = flags; } @@ -41788,139 +41847,6 @@ index 7fda30e..2f27946 100644 }; struct board_type { -diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c -index f749df9..5f8b9c4 100644 ---- a/drivers/block/cpqarray.c -+++ b/drivers/block/cpqarray.c -@@ -404,7 +404,7 @@ static int cpqarray_register_ctlr(int i, struct pci_dev *pdev) - if (register_blkdev(COMPAQ_SMART2_MAJOR+i, hba[i]->devname)) { - goto Enomem4; - } -- hba[i]->access.set_intr_mask(hba[i], 0); -+ hba[i]->access->set_intr_mask(hba[i], 0); - if (request_irq(hba[i]->intr, do_ida_intr, IRQF_SHARED, - hba[i]->devname, hba[i])) - { -@@ -459,7 +459,7 @@ static int cpqarray_register_ctlr(int i, struct pci_dev *pdev) - add_timer(&hba[i]->timer); - - /* Enable IRQ now that spinlock and rate limit timer are set up */ -- hba[i]->access.set_intr_mask(hba[i], FIFO_NOT_EMPTY); -+ hba[i]->access->set_intr_mask(hba[i], FIFO_NOT_EMPTY); - - for(j=0; j<NWD; j++) { - struct gendisk *disk = ida_gendisk[i][j]; -@@ -694,7 +694,7 @@ DBGINFO( - for(i=0; i<NR_PRODUCTS; i++) { - if (board_id == products[i].board_id) { - c->product_name = products[i].product_name; -- c->access = *(products[i].access); -+ c->access = products[i].access; - break; - } - } -@@ -792,7 +792,7 @@ static int cpqarray_eisa_detect(void) - hba[ctlr]->intr = intr; - sprintf(hba[ctlr]->devname, "ida%d", nr_ctlr); - hba[ctlr]->product_name = products[j].product_name; -- hba[ctlr]->access = *(products[j].access); -+ hba[ctlr]->access = products[j].access; - hba[ctlr]->ctlr = ctlr; - hba[ctlr]->board_id = board_id; - hba[ctlr]->pci_dev = NULL; /* not PCI */ -@@ -978,7 +978,7 @@ static void start_io(ctlr_info_t *h) - - while((c = h->reqQ) != NULL) { - /* Can't do anything if we're busy */ -- if (h->access.fifo_full(h) == 0) -+ if (h->access->fifo_full(h) == 0) - return; - - /* Get the first entry from the request Q */ -@@ -986,7 +986,7 @@ static void start_io(ctlr_info_t *h) - h->Qdepth--; - - /* Tell the controller to do our bidding */ -- h->access.submit_command(h, c); -+ h->access->submit_command(h, c); - - /* Get onto the completion Q */ - addQ(&h->cmpQ, c); -@@ -1048,7 +1048,7 @@ static irqreturn_t do_ida_intr(int irq, void *dev_id) - unsigned long flags; - __u32 a,a1; - -- istat = h->access.intr_pending(h); -+ istat = h->access->intr_pending(h); - /* Is this interrupt for us? */ - if (istat == 0) - return IRQ_NONE; -@@ -1059,7 +1059,7 @@ static irqreturn_t do_ida_intr(int irq, void *dev_id) - */ - spin_lock_irqsave(IDA_LOCK(h->ctlr), flags); - if (istat & FIFO_NOT_EMPTY) { -- while((a = h->access.command_completed(h))) { -+ while((a = h->access->command_completed(h))) { - a1 = a; a &= ~3; - if ((c = h->cmpQ) == NULL) - { -@@ -1448,11 +1448,11 @@ static int sendcmd( - /* - * Disable interrupt - */ -- info_p->access.set_intr_mask(info_p, 0); -+ info_p->access->set_intr_mask(info_p, 0); - /* Make sure there is room in the command FIFO */ - /* Actually it should be completely empty at this time. */ - for (i = 200000; i > 0; i--) { -- temp = info_p->access.fifo_full(info_p); -+ temp = info_p->access->fifo_full(info_p); - if (temp != 0) { - break; - } -@@ -1465,7 +1465,7 @@ DBG( - /* - * Send the cmd - */ -- info_p->access.submit_command(info_p, c); -+ info_p->access->submit_command(info_p, c); - complete = pollcomplete(ctlr); - - pci_unmap_single(info_p->pci_dev, (dma_addr_t) c->req.sg[0].addr, -@@ -1548,9 +1548,9 @@ static int revalidate_allvol(ctlr_info_t *host) - * we check the new geometry. Then turn interrupts back on when - * we're done. - */ -- host->access.set_intr_mask(host, 0); -+ host->access->set_intr_mask(host, 0); - getgeometry(ctlr); -- host->access.set_intr_mask(host, FIFO_NOT_EMPTY); -+ host->access->set_intr_mask(host, FIFO_NOT_EMPTY); - - for(i=0; i<NWD; i++) { - struct gendisk *disk = ida_gendisk[ctlr][i]; -@@ -1590,7 +1590,7 @@ static int pollcomplete(int ctlr) - /* Wait (up to 2 seconds) for a command to complete */ - - for (i = 200000; i > 0; i--) { -- done = hba[ctlr]->access.command_completed(hba[ctlr]); -+ done = hba[ctlr]->access->command_completed(hba[ctlr]); - if (done == 0) { - udelay(10); /* a short fixed delay */ - } else -diff --git a/drivers/block/cpqarray.h b/drivers/block/cpqarray.h -index be73e9d..7fbf140 100644 ---- a/drivers/block/cpqarray.h -+++ b/drivers/block/cpqarray.h -@@ -99,7 +99,7 @@ struct ctlr_info { - drv_info_t drv[NWD]; - struct proc_dir_entry *proc; - -- struct access_method access; -+ struct access_method *access; - - cmdlist_t *reqQ; - cmdlist_t *cmpQ; diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c index 92d6fc0..e4e1e27 100644 --- a/drivers/block/drbd/drbd_bitmap.c @@ -41935,7 +41861,7 @@ index 92d6fc0..e4e1e27 100644 } diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h -index 34bc84e..8bac095 100644 +index 7a1cf7e..538f666 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -382,7 +382,7 @@ struct drbd_epoch { @@ -41968,7 +41894,7 @@ index 34bc84e..8bac095 100644 int rs_last_events; /* counter of read or write "events" (unit sectors) * on the lower level device when we last looked. */ diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c -index 5b43dfb..d5f6e5c 100644 +index fa20977..1285a70 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -1329,7 +1329,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet @@ -42012,7 +41938,7 @@ index 5b43dfb..d5f6e5c 100644 idr_destroy(&connection->peer_devices); diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c -index c055c5e..5cb3c1e 100644 +index 1fd1dcc..30ab091 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -89,8 +89,8 @@ int drbd_adm_get_initial_state(struct sk_buff *skb, struct netlink_callback *cb) @@ -42026,7 +41952,7 @@ index c055c5e..5cb3c1e 100644 DEFINE_MUTEX(notification_mutex); -@@ -4374,7 +4374,7 @@ void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib) +@@ -4389,7 +4389,7 @@ void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib) unsigned seq; int err = -ENOMEM; @@ -42035,7 +41961,7 @@ index c055c5e..5cb3c1e 100644 msg = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO); if (!msg) goto failed; -@@ -4426,7 +4426,7 @@ void notify_resource_state(struct sk_buff *skb, +@@ -4441,7 +4441,7 @@ void notify_resource_state(struct sk_buff *skb, int err; if (!skb) { @@ -42044,7 +41970,7 @@ index c055c5e..5cb3c1e 100644 skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO); err = -ENOMEM; if (!skb) -@@ -4477,7 +4477,7 @@ void notify_device_state(struct sk_buff *skb, +@@ -4492,7 +4492,7 @@ void notify_device_state(struct sk_buff *skb, int err; if (!skb) { @@ -42053,7 +41979,7 @@ index c055c5e..5cb3c1e 100644 skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO); err = -ENOMEM; if (!skb) -@@ -4526,7 +4526,7 @@ void notify_connection_state(struct sk_buff *skb, +@@ -4541,7 +4541,7 @@ void notify_connection_state(struct sk_buff *skb, int err; if (!skb) { @@ -42062,7 +41988,7 @@ index c055c5e..5cb3c1e 100644 skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO); err = -ENOMEM; if (!skb) -@@ -4576,7 +4576,7 @@ void notify_peer_device_state(struct sk_buff *skb, +@@ -4591,7 +4591,7 @@ void notify_peer_device_state(struct sk_buff *skb, int err; if (!skb) { @@ -42071,7 +41997,7 @@ index c055c5e..5cb3c1e 100644 skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO); err = -ENOMEM; if (!skb) -@@ -4619,7 +4619,7 @@ void notify_helper(enum drbd_notification_type type, +@@ -4634,7 +4634,7 @@ void notify_helper(enum drbd_notification_type type, { struct drbd_resource *resource = device ? device->resource : connection->resource; struct drbd_helper_info helper_info; @@ -42081,7 +42007,7 @@ index c055c5e..5cb3c1e 100644 struct drbd_genlmsghdr *dh; int err; diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c -index 1957fe8..de39941 100644 +index 050aaa1..2e7013c 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -895,7 +895,7 @@ int drbd_connected(struct drbd_peer_device *peer_device) @@ -42226,7 +42152,7 @@ index 1957fe8..de39941 100644 connection->send.seen_any_write_yet = false; drbd_info(connection, "Connection closed\n"); -@@ -5213,7 +5215,7 @@ static int got_IsInSync(struct drbd_connection *connection, struct packet_info * +@@ -5209,7 +5211,7 @@ static int got_IsInSync(struct drbd_connection *connection, struct packet_info * put_ldev(device); } dec_rs_pending(device); @@ -42235,7 +42161,7 @@ index 1957fe8..de39941 100644 return 0; } -@@ -5464,7 +5466,7 @@ static int got_skip(struct drbd_connection *connection, struct packet_info *pi) +@@ -5460,7 +5462,7 @@ static int got_skip(struct drbd_connection *connection, struct packet_info *pi) struct meta_sock_cmd { size_t pkt_size; int (*fn)(struct drbd_connection *connection, struct packet_info *); @@ -42338,7 +42264,7 @@ index 9e503a1..ac60262 100644 #endif /* DRBD_STATE_CHANGE_H */ diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c -index eff716c..4c52ef7 100644 +index 4d87499..1e2bcce 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c @@ -87,7 +87,8 @@ void drbd_md_endio(struct bio *bio) @@ -42361,7 +42287,7 @@ index eff716c..4c52ef7 100644 { unsigned long flags = 0; struct drbd_peer_device *peer_device = peer_req->peer_device; -@@ -391,7 +393,7 @@ static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector, +@@ -396,7 +398,7 @@ static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector, list_add_tail(&peer_req->w.list, &device->read_ee); spin_unlock_irq(&device->resource->req_lock); @@ -42370,7 +42296,7 @@ index eff716c..4c52ef7 100644 if (drbd_submit_peer_request(device, peer_req, READ, DRBD_FAULT_RS_RD) == 0) return 0; -@@ -536,7 +538,7 @@ static int drbd_rs_number_requests(struct drbd_device *device) +@@ -541,7 +543,7 @@ static int drbd_rs_number_requests(struct drbd_device *device) unsigned int sect_in; /* Number of sectors that came in since the last turn */ int number, mxb; @@ -42379,7 +42305,7 @@ index eff716c..4c52ef7 100644 device->rs_in_flight -= sect_in; rcu_read_lock(); -@@ -1583,8 +1585,8 @@ void drbd_rs_controller_reset(struct drbd_device *device) +@@ -1588,8 +1590,8 @@ void drbd_rs_controller_reset(struct drbd_device *device) struct gendisk *disk = device->ldev->backing_bdev->bd_contains->bd_disk; struct fifo_buffer *plan; @@ -42445,7 +42371,7 @@ index d06c62e..cd04d96 100644 if (ti.nwa_v) { pd->nwa = be32_to_cpu(ti.next_writable); diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c -index 9745cf9..8dbe1b5 100644 +index 0ede6d7..9bc6529 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -64,7 +64,7 @@ @@ -42541,35 +42467,22 @@ index 24a652f..2dffae6 100644 int err; diff --git a/drivers/bus/arm-cci.c b/drivers/bus/arm-cci.c -index 577cc4b..129a13e 100644 +index a49b283..a3af977 100644 --- a/drivers/bus/arm-cci.c +++ b/drivers/bus/arm-cci.c -@@ -1249,16 +1249,22 @@ static int cci_pmu_init_attrs(struct cci_pmu *cci_pmu, struct platform_device *p - model->event_attrs); - if (!attrs) - return -ENOMEM; -- pmu_event_attr_group.attrs = attrs; -+ pax_open_kernel(); -+ const_cast(pmu_event_attr_group.attrs) = attrs; -+ pax_close_kernel(); - } - if (model->nformat_attrs) { - attrs = alloc_attrs(pdev, model->nformat_attrs, - model->format_attrs); - if (!attrs) - return -ENOMEM; -- pmu_format_attr_group.attrs = attrs; -+ pax_open_kernel(); -+ const_cast(pmu_format_attr_group.attrs) = attrs; -+ pax_close_kernel(); - } -- pmu_cpumask_attr.var = cci_pmu; +@@ -1472,8 +1472,10 @@ static int cci_pmu_init(struct cci_pmu *cci_pmu, struct platform_device *pdev) + char *name = model->name; + u32 num_cntrs; + +- pmu_event_attr_group.attrs = model->event_attrs; +- pmu_format_attr_group.attrs = model->format_attrs; + pax_open_kernel(); -+ const_cast(pmu_cpumask_attr.var) = cci_pmu; ++ const_cast(pmu_event_attr_group.attrs) = model->event_attrs; ++ const_cast(pmu_format_attr_group.attrs) = model->format_attrs; + pax_close_kernel(); - return 0; - } + cci_pmu->pmu = (struct pmu) { + .name = cci_pmu->model->name, diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 1b257ea..2280898 100644 --- a/drivers/cdrom/cdrom.c @@ -42635,7 +42548,7 @@ index 584bc31..e64a12c 100644 static int gdrom_bdops_open(struct block_device *bdev, fmode_t mode) diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig -index a043107..1263e4a 100644 +index 3ec0766..bf9f1e9 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -17,7 +17,8 @@ config DEVMEM @@ -42648,7 +42561,7 @@ index a043107..1263e4a 100644 help Say Y here if you want to support the /dev/kmem device. The /dev/kmem device is rarely used, but can be used for certain -@@ -586,6 +587,7 @@ config DEVPORT +@@ -587,6 +588,7 @@ config DEVPORT bool depends on !M68K depends on ISA || PCI @@ -42670,7 +42583,7 @@ index a48e05b..6bac831 100644 kfree(usegment); kfree(ksegment); diff --git a/drivers/char/agp/frontend.c b/drivers/char/agp/frontend.c -index 09f17eb..8531d2f 100644 +index 0f64d14..4cf4d6b 100644 --- a/drivers/char/agp/frontend.c +++ b/drivers/char/agp/frontend.c @@ -806,7 +806,7 @@ static int agpioc_reserve_wrap(struct agp_file_private *priv, void __user *arg) @@ -42692,10 +42605,10 @@ index 09f17eb..8531d2f 100644 kfree(segment); return -EFAULT; diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c -index 1341a94..8a45bc2 100644 +index aef87fd..c17d9bb 100644 --- a/drivers/char/agp/intel-gtt.c +++ b/drivers/char/agp/intel-gtt.c -@@ -1408,8 +1408,8 @@ int intel_gmch_probe(struct pci_dev *bridge_pdev, struct pci_dev *gpu_pdev, +@@ -1410,8 +1410,8 @@ int intel_gmch_probe(struct pci_dev *bridge_pdev, struct pci_dev *gpu_pdev, } EXPORT_SYMBOL(intel_gmch_probe); @@ -42779,7 +42692,7 @@ index 9f2e3be..676c910 100644 int rv = param_set_int(val, kp); if (rv) diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c -index 7fddd86..f5b038e 100644 +index 1e25b52..9b8ee6a 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -302,7 +302,7 @@ struct smi_info { @@ -42821,7 +42734,7 @@ index 7fddd86..f5b038e 100644 { char *str = kstrdup(val, GFP_KERNEL); int rv; -@@ -3623,7 +3623,7 @@ static int try_smi_init(struct smi_info *new_smi) +@@ -3626,7 +3626,7 @@ static int try_smi_init(struct smi_info *new_smi) atomic_set(&new_smi->req_events, 0); new_smi->run_to_completion = false; for (i = 0; i < SI_NUM_STATS; i++) @@ -42831,7 +42744,7 @@ index 7fddd86..f5b038e 100644 new_smi->interrupt_disabled = true; atomic_set(&new_smi->need_watch, 0); diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c -index 5f1c3d0..8fca936 100644 +index 8b3be8b..c342470 100644 --- a/drivers/char/ipmi/ipmi_ssif.c +++ b/drivers/char/ipmi/ipmi_ssif.c @@ -284,17 +284,17 @@ struct ssif_info { @@ -42856,7 +42769,7 @@ index 5f1c3d0..8fca936 100644 static void return_hosed_msg(struct ssif_info *ssif_info, struct ipmi_smi_msg *msg); -@@ -1609,7 +1609,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) +@@ -1604,7 +1604,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) } found: @@ -42865,7 +42778,7 @@ index 5f1c3d0..8fca936 100644 if (ssif_dbg_probe) { pr_info("ssif_probe: i2c_probe found device at i2c address %x\n", -@@ -1623,7 +1623,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) +@@ -1618,7 +1618,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) ssif_info->retry_timer.function = retry_timeout; for (i = 0; i < SSIF_NUM_STATS; i++) @@ -42875,7 +42788,7 @@ index 5f1c3d0..8fca936 100644 if (ssif_info->supports_pec) ssif_info->client->flags |= I2C_CLIENT_PEC; diff --git a/drivers/char/mem.c b/drivers/char/mem.c -index 4f6f94c..1e20d2f5 100644 +index 71025c2..27d9797 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c @@ -18,6 +18,7 @@ @@ -43024,7 +42937,7 @@ index 4f6f94c..1e20d2f5 100644 return tty_init(); diff --git a/drivers/char/nvram.c b/drivers/char/nvram.c -index 0129232..422edaa 100644 +index 678fa97..5598cef 100644 --- a/drivers/char/nvram.c +++ b/drivers/char/nvram.c @@ -235,7 +235,7 @@ static ssize_t nvram_read(struct file *file, char __user *buf, @@ -43037,10 +42950,10 @@ index 0129232..422edaa 100644 *ppos = i; diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c -index 45df4bf..22d88d4 100644 +index 22c2765..d92c8fa 100644 --- a/drivers/char/pcmcia/synclink_cs.c +++ b/drivers/char/pcmcia/synclink_cs.c -@@ -2345,7 +2345,7 @@ static void mgslpc_close(struct tty_struct *tty, struct file * filp) +@@ -2340,7 +2340,7 @@ static void mgslpc_close(struct tty_struct *tty, struct file * filp) if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):mgslpc_close(%s) entry, count=%d\n", @@ -43049,7 +42962,7 @@ index 45df4bf..22d88d4 100644 if (tty_port_close_start(port, tty, filp) == 0) goto cleanup; -@@ -2363,7 +2363,7 @@ static void mgslpc_close(struct tty_struct *tty, struct file * filp) +@@ -2358,7 +2358,7 @@ static void mgslpc_close(struct tty_struct *tty, struct file * filp) cleanup: if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):mgslpc_close(%s) exit, count=%d\n", __FILE__, __LINE__, @@ -43058,7 +42971,7 @@ index 45df4bf..22d88d4 100644 } /* Wait until the transmitter is empty. -@@ -2505,7 +2505,7 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp) +@@ -2500,7 +2500,7 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp) if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):mgslpc_open(%s), old ref count = %d\n", @@ -43067,7 +42980,7 @@ index 45df4bf..22d88d4 100644 port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0; -@@ -2516,11 +2516,11 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp) +@@ -2511,11 +2511,11 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp) goto cleanup; } spin_lock(&port->lock); @@ -43081,7 +42994,7 @@ index 45df4bf..22d88d4 100644 /* 1st open on this device, init hardware */ retval = startup(info, tty); if (retval < 0) -@@ -3909,7 +3909,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, +@@ -3904,7 +3904,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, unsigned short new_crctype; /* return error if TTY interface open */ @@ -43090,7 +43003,7 @@ index 45df4bf..22d88d4 100644 return -EBUSY; switch (encoding) -@@ -4013,7 +4013,7 @@ static int hdlcdev_open(struct net_device *dev) +@@ -4008,7 +4008,7 @@ static int hdlcdev_open(struct net_device *dev) /* arbitrate between network and tty opens */ spin_lock_irqsave(&info->netlock, flags); @@ -43099,7 +43012,7 @@ index 45df4bf..22d88d4 100644 printk(KERN_WARNING "%s: hdlc_open returning busy\n", dev->name); spin_unlock_irqrestore(&info->netlock, flags); return -EBUSY; -@@ -4103,7 +4103,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +@@ -4098,7 +4098,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) printk("%s:hdlcdev_ioctl(%s)\n", __FILE__, dev->name); /* return error if TTY interface open */ @@ -43223,7 +43136,7 @@ index e496dae..3db53b6 100644 .ident = "Sony Vaio", .matches = { diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c -index 2521425..10e45de 100644 +index 274dd01..ac863b7 100644 --- a/drivers/char/tpm/tpm-chip.c +++ b/drivers/char/tpm/tpm-chip.c @@ -74,6 +74,11 @@ static void tpm_dev_release(struct device *dev) @@ -43238,15 +43151,15 @@ index 2521425..10e45de 100644 /** * tpmm_chip_alloc() - allocate a new struct tpm_chip instance * @dev: device to which the chip is associated -@@ -136,7 +141,7 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev, +@@ -137,7 +142,7 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev, chip->cdev.owner = chip->pdev->driver->owner; chip->cdev.kobj.parent = &chip->dev.kobj; -- devm_add_action(dev, (void (*)(void *)) put_device, &chip->dev); -+ devm_add_action(dev, tpm_put_device, &chip->dev); - - return chip; - } +- rc = devm_add_action(dev, (void (*)(void *)) put_device, &chip->dev); ++ rc = devm_add_action(dev, tpm_put_device, &chip->dev); + if (rc) { + put_device(&chip->dev); + return ERR_PTR(rc); diff --git a/drivers/char/tpm/tpm_acpi.c b/drivers/char/tpm/tpm_acpi.c index 565a947..dcdc06e 100644 --- a/drivers/char/tpm/tpm_acpi.c @@ -43316,10 +43229,10 @@ index d2406fe..473a5c0 100644 static void resize_console(struct port *port) diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c -index 4735de0..de4ffc9 100644 +index 1f903e1f8..5f1b4cb 100644 --- a/drivers/clk/clk-composite.c +++ b/drivers/clk/clk-composite.c -@@ -196,7 +196,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name, +@@ -194,7 +194,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name, struct clk *clk; struct clk_init_data init; struct clk_composite *composite; @@ -43342,7 +43255,7 @@ index aa872d2..afeae37 100644 /** * struct samsung_clk_reg_dump: register dump of clock controller registers. diff --git a/drivers/clk/socfpga/clk-gate-a10.c b/drivers/clk/socfpga/clk-gate-a10.c -index 1cebf25..ff2186f 100644 +index c2d5727..1a305db 100644 --- a/drivers/clk/socfpga/clk-gate-a10.c +++ b/drivers/clk/socfpga/clk-gate-a10.c @@ -19,6 +19,7 @@ @@ -43362,7 +43275,7 @@ index 1cebf25..ff2186f 100644 .prepare = socfpga_clk_prepare, .recalc_rate = socfpga_gate_clk_recalc_rate, }; -@@ -129,8 +130,10 @@ static void __init __socfpga_gate_init(struct device_node *node, +@@ -128,8 +129,10 @@ static void __init __socfpga_gate_init(struct device_node *node, socfpga_clk->hw.reg = clk_mgr_a10_base_addr + clk_gate[0]; socfpga_clk->hw.bit_idx = clk_gate[1]; @@ -43410,7 +43323,7 @@ index aa7a6e6..1e9b426 100644 rc = of_property_read_u32(node, "fixed-divider", &fixed_div); diff --git a/drivers/clk/socfpga/clk-pll-a10.c b/drivers/clk/socfpga/clk-pll-a10.c -index 402d630..d8590c8 100644 +index 35fabe1..d847c53 100644 --- a/drivers/clk/socfpga/clk-pll-a10.c +++ b/drivers/clk/socfpga/clk-pll-a10.c @@ -18,6 +18,7 @@ @@ -43430,7 +43343,7 @@ index 402d630..d8590c8 100644 .recalc_rate = clk_pll_recalc_rate, .get_parent = clk_pll_get_parent, }; -@@ -112,8 +113,10 @@ static struct __init clk * __socfpga_pll_init(struct device_node *node, +@@ -112,8 +113,10 @@ static struct clk * __init __socfpga_pll_init(struct device_node *node, pll_clk->hw.hw.init = &init; pll_clk->hw.bit_idx = SOCFPGA_PLL_EXT_ENA; @@ -43477,8 +43390,21 @@ index c7f4631..8d1b7d0 100644 clk = clk_register(NULL, &pll_clk->hw.hw); if (WARN_ON(IS_ERR(clk))) { +diff --git a/drivers/clk/ti/adpll.c b/drivers/clk/ti/adpll.c +index 255cafb..7b41c3b 100644 +--- a/drivers/clk/ti/adpll.c ++++ b/drivers/clk/ti/adpll.c +@@ -589,7 +589,7 @@ static int ti_adpll_init_clkout(struct ti_adpll_data *d, + { + struct ti_adpll_clkout_data *co; + struct clk_init_data init; +- struct clk_ops *ops; ++ clk_ops_no_const *ops; + const char *parent_names[2]; + const char *child_name; + struct clk *clock; diff --git a/drivers/clk/ti/clk.c b/drivers/clk/ti/clk.c -index b5bcd77..fc230cb 100644 +index 5fcf247..446780a 100644 --- a/drivers/clk/ti/clk.c +++ b/drivers/clk/ti/clk.c @@ -25,6 +25,8 @@ @@ -43504,10 +43430,10 @@ index b5bcd77..fc230cb 100644 return 0; } diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c -index 51eef87..f530cf9 100644 +index fb57121..ff57f22 100644 --- a/drivers/cpufreq/acpi-cpufreq.c +++ b/drivers/cpufreq/acpi-cpufreq.c -@@ -682,8 +682,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) +@@ -658,8 +658,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) data->acpi_perf_cpu = cpu; policy->driver_data = data; @@ -43521,7 +43447,7 @@ index 51eef87..f530cf9 100644 result = acpi_processor_register_performance(perf, cpu); if (result) -@@ -816,7 +819,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) +@@ -798,7 +801,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) policy->cur = acpi_cpufreq_guess_freq(data, policy->cpu); break; case ACPI_ADR_SPACE_FIXED_HARDWARE: @@ -43532,7 +43458,7 @@ index 51eef87..f530cf9 100644 break; default: break; -@@ -910,8 +915,10 @@ static void __init acpi_cpufreq_boost_init(void) +@@ -892,8 +897,10 @@ static void __init acpi_cpufreq_boost_init(void) if (!msrs) return; @@ -43546,12 +43472,12 @@ index 51eef87..f530cf9 100644 cpu_notifier_register_begin(); diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c -index 0ca74d0..1a0d302 100644 +index 5f8dbe6..57754e5 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c -@@ -461,7 +461,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev) - if (!IS_ERR(cpu_reg)) - regulator_put(cpu_reg); +@@ -368,7 +368,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev) + if (ret) + return ret; - dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); + pax_open_kernel(); @@ -43561,10 +43487,10 @@ index 0ca74d0..1a0d302 100644 ret = cpufreq_register_driver(&dt_cpufreq_driver); if (ret) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c -index e979ec7..a76375c 100644 +index c4acfc5..95ed094 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c -@@ -474,12 +474,12 @@ EXPORT_SYMBOL_GPL(cpufreq_freq_transition_end); +@@ -434,12 +434,12 @@ EXPORT_SYMBOL_GPL(cpufreq_freq_transition_end); * SYSFS INTERFACE * *********************************************************************/ static ssize_t show_boost(struct kobject *kobj, @@ -43579,7 +43505,7 @@ index e979ec7..a76375c 100644 const char *buf, size_t count) { int ret, enable; -@@ -2048,7 +2048,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor) +@@ -1999,7 +1999,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor) read_unlock_irqrestore(&cpufreq_driver_lock, flags); mutex_lock(&cpufreq_governor_mutex); @@ -43588,7 +43514,7 @@ index e979ec7..a76375c 100644 mutex_unlock(&cpufreq_governor_mutex); return; } -@@ -2274,7 +2274,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb, +@@ -2207,7 +2207,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb, return NOTIFY_OK; } @@ -43597,7 +43523,7 @@ index e979ec7..a76375c 100644 .notifier_call = cpufreq_cpu_callback, }; -@@ -2314,13 +2314,17 @@ int cpufreq_boost_trigger_state(int state) +@@ -2250,13 +2250,17 @@ int cpufreq_boost_trigger_state(int state) return 0; write_lock_irqsave(&cpufreq_driver_lock, flags); @@ -43617,7 +43543,7 @@ index e979ec7..a76375c 100644 write_unlock_irqrestore(&cpufreq_driver_lock, flags); pr_err("%s: Cannot %s BOOST\n", -@@ -2361,7 +2365,9 @@ int cpufreq_enable_boost_support(void) +@@ -2297,7 +2301,9 @@ int cpufreq_enable_boost_support(void) if (cpufreq_boost_supported()) return 0; @@ -43628,7 +43554,7 @@ index e979ec7..a76375c 100644 /* This will get removed on driver unregister */ return create_boost_sysfs_file(); -@@ -2418,8 +2424,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) +@@ -2354,8 +2360,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) cpufreq_driver = driver_data; write_unlock_irqrestore(&cpufreq_driver_lock, flags); @@ -43642,82 +43568,33 @@ index e979ec7..a76375c 100644 if (cpufreq_boost_supported()) { ret = create_boost_sysfs_file(); -diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c -index e0d1110..575e673 100644 ---- a/drivers/cpufreq/cpufreq_governor.c -+++ b/drivers/cpufreq/cpufreq_governor.c -@@ -497,7 +497,7 @@ static int cpufreq_governor_start(struct cpufreq_policy *policy, - cs_dbs_info->down_skip = 0; - cs_dbs_info->requested_freq = policy->cur; - } else { -- struct od_ops *od_ops = cdata->gov_ops; -+ const struct od_ops *od_ops = cdata->gov_ops; - struct od_cpu_dbs_info_s *od_dbs_info = cdata->get_cpu_dbs_info_s(cpu); - - od_dbs_info->rate_mult = 1; diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h -index 91e767a0..3b40724 100644 +index 61ff82f..ccc29a1 100644 --- a/drivers/cpufreq/cpufreq_governor.h +++ b/drivers/cpufreq/cpufreq_governor.h -@@ -75,7 +75,7 @@ __ATTR(_name, 0644, show_##_name##_gov_pol, store_##_name##_gov_pol) - /* Create show/store routines */ - #define show_one(_gov, file_name) \ - static ssize_t show_##file_name##_gov_sys \ --(struct kobject *kobj, struct attribute *attr, char *buf) \ -+(struct kobject *kobj, struct kobj_attribute *attr, char *buf) \ - { \ - struct _gov##_dbs_tuners *tuners = _gov##_dbs_cdata.gdbs_data->tuners; \ - return sprintf(buf, "%u\n", tuners->file_name); \ -@@ -91,7 +91,7 @@ static ssize_t show_##file_name##_gov_pol \ - - #define store_one(_gov, file_name) \ - static ssize_t store_##file_name##_gov_sys \ --(struct kobject *kobj, struct attribute *attr, const char *buf, size_t count) \ -+(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) \ - { \ - struct dbs_data *dbs_data = _gov##_dbs_cdata.gdbs_data; \ - return store_##file_name(dbs_data, buf, count); \ -@@ -219,7 +219,7 @@ struct common_dbs_data { - void (*exit)(struct dbs_data *dbs_data, bool notify); - - /* Governor specific ops, see below */ -- void *gov_ops; -+ const void *gov_ops; - - /* - * Protects governor's data (struct dbs_data and struct common_dbs_data) -@@ -241,7 +241,7 @@ struct od_ops { +@@ -176,7 +176,7 @@ static inline struct dbs_governor *dbs_governor_of(struct cpufreq_policy *policy + struct od_ops { unsigned int (*powersave_bias_target)(struct cpufreq_policy *policy, unsigned int freq_next, unsigned int relation); - void (*freq_increase)(struct cpufreq_policy *policy, unsigned int freq); -}; +} __no_const; - static inline int delay_for_sampling_rate(unsigned int sampling_rate) - { -@@ -256,7 +256,7 @@ static inline int delay_for_sampling_rate(unsigned int sampling_rate) - - #define declare_show_sampling_rate_min(_gov) \ - static ssize_t show_sampling_rate_min_gov_sys \ --(struct kobject *kobj, struct attribute *attr, char *buf) \ -+(struct kobject *kobj, struct kobj_attribute *attr, char *buf) \ - { \ - struct dbs_data *dbs_data = _gov##_dbs_cdata.gdbs_data; \ - return sprintf(buf, "%u\n", dbs_data->min_sampling_rate); \ + unsigned int dbs_update(struct cpufreq_policy *policy); + int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event); diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c -index eae5107..3dd6408 100644 +index acd8027..1d206c6 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c -@@ -534,7 +534,7 @@ static void od_exit(struct dbs_data *dbs_data, bool notify) - - define_get_cpu_dbs_routines(od_cpu_dbs_info); +@@ -410,7 +410,7 @@ static void od_start(struct cpufreq_policy *policy) + ondemand_powersave_bias_init(policy); + } -static struct od_ops od_ops = { +static struct od_ops od_ops __read_only = { - .powersave_bias_init_cpu = ondemand_powersave_bias_init_cpu, .powersave_bias_target = generic_powersave_bias_target, - .freq_increase = dbs_freq_increase, -@@ -593,14 +593,18 @@ void od_register_powersave_bias_handler(unsigned int (*f) + }; + +@@ -471,14 +471,18 @@ void od_register_powersave_bias_handler(unsigned int (*f) (struct cpufreq_policy *, unsigned int, unsigned int), unsigned int powersave_bias) { @@ -43739,10 +43616,10 @@ index eae5107..3dd6408 100644 } EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler); diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c -index e895123..05de99b 100644 +index b230eba..aeb6923 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c -@@ -141,13 +141,13 @@ struct pstate_funcs { +@@ -249,13 +249,13 @@ struct pstate_funcs { struct cpu_defaults { struct pstate_adjust_policy pid_policy; struct pstate_funcs funcs; @@ -43757,8 +43634,8 @@ index e895123..05de99b 100644 +static struct pstate_funcs *pstate_funcs; static int hwp_active; - struct perf_limits { -@@ -374,13 +374,13 @@ static void __init intel_pstate_debug_expose_params(void) + +@@ -521,13 +521,13 @@ static void __init intel_pstate_debug_expose_params(void) /************************** sysfs begin ************************/ #define show_one(file_name, object) \ static ssize_t show_##file_name \ @@ -43774,7 +43651,7 @@ index e895123..05de99b 100644 { struct cpudata *cpu; int total, no_turbo, turbo_pct; -@@ -396,7 +396,7 @@ static ssize_t show_turbo_pct(struct kobject *kobj, +@@ -543,7 +543,7 @@ static ssize_t show_turbo_pct(struct kobject *kobj, } static ssize_t show_num_pstates(struct kobject *kobj, @@ -43783,7 +43660,7 @@ index e895123..05de99b 100644 { struct cpudata *cpu; int total; -@@ -407,7 +407,7 @@ static ssize_t show_num_pstates(struct kobject *kobj, +@@ -554,7 +554,7 @@ static ssize_t show_num_pstates(struct kobject *kobj, } static ssize_t show_no_turbo(struct kobject *kobj, @@ -43792,7 +43669,7 @@ index e895123..05de99b 100644 { ssize_t ret; -@@ -420,7 +420,7 @@ static ssize_t show_no_turbo(struct kobject *kobj, +@@ -567,7 +567,7 @@ static ssize_t show_no_turbo(struct kobject *kobj, return ret; } @@ -43801,7 +43678,7 @@ index e895123..05de99b 100644 const char *buf, size_t count) { unsigned int input; -@@ -444,7 +444,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b, +@@ -591,7 +591,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b, return count; } @@ -43810,7 +43687,7 @@ index e895123..05de99b 100644 const char *buf, size_t count) { unsigned int input; -@@ -469,7 +469,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b, +@@ -616,7 +616,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b, return count; } @@ -43819,12 +43696,12 @@ index e895123..05de99b 100644 const char *buf, size_t count) { unsigned int input; -@@ -855,19 +855,19 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate, bool force) - - cpu->pstate.current_pstate = pstate; - -- pstate_funcs.set(cpu, pstate); -+ pstate_funcs->set(cpu, pstate); +@@ -1002,19 +1002,19 @@ static void intel_pstate_set_min_pstate(struct cpudata *cpu) + * right CPU. + */ + wrmsrl_on_cpu(cpu->cpu, MSR_IA32_PERF_CTL, +- pstate_funcs.get_val(cpu, pstate)); ++ pstate_funcs->get_val(cpu, pstate)); } static void intel_pstate_get_cpu_pstates(struct cpudata *cpu) @@ -43844,19 +43721,28 @@ index e895123..05de99b 100644 - pstate_funcs.get_vid(cpu); + if (pstate_funcs->get_vid) + pstate_funcs->get_vid(cpu); - intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false); + + intel_pstate_set_min_pstate(cpu); } +@@ -1164,7 +1164,7 @@ static inline void intel_pstate_update_pstate(struct cpudata *cpu, int pstate) + return; -@@ -1021,7 +1021,7 @@ static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu) + intel_pstate_record_pstate(cpu, pstate); +- wrmsrl(MSR_IA32_PERF_CTL, pstate_funcs.get_val(cpu, pstate)); ++ wrmsrl(MSR_IA32_PERF_CTL, pstate_funcs->get_val(cpu, pstate)); + } + + static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu) +@@ -1174,7 +1174,7 @@ static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu) from = cpu->pstate.current_pstate; - target_pstate = pstate_funcs.get_target_pstate(cpu); + target_pstate = pstate_funcs->get_target_pstate(cpu); - intel_pstate_set_pstate(cpu, target_pstate, true); + intel_pstate_update_pstate(cpu, target_pstate); -@@ -1254,15 +1254,15 @@ static unsigned int force_load; +@@ -1434,15 +1434,15 @@ static unsigned int force_load; static int intel_pstate_msrs_not_valid(void) { @@ -43875,8 +43761,8 @@ index e895123..05de99b 100644 +static void copy_pid_params(const struct pstate_adjust_policy *policy) { pid_params.sample_rate_ms = policy->sample_rate_ms; - pid_params.p_gain_pct = policy->p_gain_pct; -@@ -1274,15 +1274,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy) + pid_params.sample_rate_ns = pid_params.sample_rate_ms * NSEC_PER_MSEC; +@@ -1455,15 +1455,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy) static void copy_cpu_funcs(struct pstate_funcs *funcs) { @@ -43885,7 +43771,7 @@ index e895123..05de99b 100644 - pstate_funcs.get_min = funcs->get_min; - pstate_funcs.get_turbo = funcs->get_turbo; - pstate_funcs.get_scaling = funcs->get_scaling; -- pstate_funcs.set = funcs->set; +- pstate_funcs.get_val = funcs->get_val; - pstate_funcs.get_vid = funcs->get_vid; - pstate_funcs.get_target_pstate = funcs->get_target_pstate; - @@ -44159,224 +44045,8 @@ index eee2c7e..268aa3e 100644 err = pci_request_regions(pdev, name); if (err) -diff --git a/drivers/crypto/marvell/cesa.h b/drivers/crypto/marvell/cesa.h -index bd985e7..74071e4 100644 ---- a/drivers/crypto/marvell/cesa.h -+++ b/drivers/crypto/marvell/cesa.h -@@ -588,6 +588,7 @@ struct mv_cesa_ahash_dma_req { - struct mv_cesa_tdma_req base; - u8 *padding; - dma_addr_t padding_dma; -+ u8 *cache; - dma_addr_t cache_dma; - }; - -@@ -609,7 +610,7 @@ struct mv_cesa_ahash_req { - struct mv_cesa_ahash_std_req std; - } req; - struct mv_cesa_op_ctx op_tmpl; -- u8 *cache; -+ u8 cache[CESA_MAX_HASH_BLOCK_SIZE]; - unsigned int cache_ptr; - u64 len; - int src_nents; -diff --git a/drivers/crypto/marvell/hash.c b/drivers/crypto/marvell/hash.c -index 683cca9..7ca2e0f 100644 ---- a/drivers/crypto/marvell/hash.c -+++ b/drivers/crypto/marvell/hash.c -@@ -45,69 +45,25 @@ mv_cesa_ahash_req_iter_next_op(struct mv_cesa_ahash_dma_iter *iter) - return mv_cesa_req_dma_iter_next_op(&iter->base); - } - --static inline int mv_cesa_ahash_dma_alloc_cache(struct mv_cesa_ahash_req *creq, -- gfp_t flags) -+static inline int -+mv_cesa_ahash_dma_alloc_cache(struct mv_cesa_ahash_dma_req *req, gfp_t flags) - { -- struct mv_cesa_ahash_dma_req *dreq = &creq->req.dma; -- -- creq->cache = dma_pool_alloc(cesa_dev->dma->cache_pool, flags, -- &dreq->cache_dma); -- if (!creq->cache) -- return -ENOMEM; -- -- return 0; --} -- --static inline int mv_cesa_ahash_std_alloc_cache(struct mv_cesa_ahash_req *creq, -- gfp_t flags) --{ -- creq->cache = kzalloc(CESA_MAX_HASH_BLOCK_SIZE, flags); -- if (!creq->cache) -+ req->cache = dma_pool_alloc(cesa_dev->dma->cache_pool, flags, -+ &req->cache_dma); -+ if (!req->cache) - return -ENOMEM; - - return 0; - } - --static int mv_cesa_ahash_alloc_cache(struct ahash_request *req) --{ -- struct mv_cesa_ahash_req *creq = ahash_request_ctx(req); -- gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ? -- GFP_KERNEL : GFP_ATOMIC; -- int ret; -- -- if (creq->cache) -- return 0; -- -- if (creq->req.base.type == CESA_DMA_REQ) -- ret = mv_cesa_ahash_dma_alloc_cache(creq, flags); -- else -- ret = mv_cesa_ahash_std_alloc_cache(creq, flags); -- -- return ret; --} -- --static inline void mv_cesa_ahash_dma_free_cache(struct mv_cesa_ahash_req *creq) --{ -- dma_pool_free(cesa_dev->dma->cache_pool, creq->cache, -- creq->req.dma.cache_dma); --} -- --static inline void mv_cesa_ahash_std_free_cache(struct mv_cesa_ahash_req *creq) --{ -- kfree(creq->cache); --} -- --static void mv_cesa_ahash_free_cache(struct mv_cesa_ahash_req *creq) -+static inline void -+mv_cesa_ahash_dma_free_cache(struct mv_cesa_ahash_dma_req *req) - { -- if (!creq->cache) -+ if (!req->cache) - return; - -- if (creq->req.base.type == CESA_DMA_REQ) -- mv_cesa_ahash_dma_free_cache(creq); -- else -- mv_cesa_ahash_std_free_cache(creq); -- -- creq->cache = NULL; -+ dma_pool_free(cesa_dev->dma->cache_pool, req->cache, -+ req->cache_dma); - } - - static int mv_cesa_ahash_dma_alloc_padding(struct mv_cesa_ahash_dma_req *req, -@@ -146,6 +102,7 @@ static inline void mv_cesa_ahash_dma_cleanup(struct ahash_request *req) - struct mv_cesa_ahash_req *creq = ahash_request_ctx(req); - - dma_unmap_sg(cesa_dev->dev, req->src, creq->src_nents, DMA_TO_DEVICE); -+ mv_cesa_ahash_dma_free_cache(&creq->req.dma); - mv_cesa_dma_cleanup(&creq->req.dma.base); - } - -@@ -161,8 +118,6 @@ static void mv_cesa_ahash_last_cleanup(struct ahash_request *req) - { - struct mv_cesa_ahash_req *creq = ahash_request_ctx(req); - -- mv_cesa_ahash_free_cache(creq); -- - if (creq->req.base.type == CESA_DMA_REQ) - mv_cesa_ahash_dma_last_cleanup(req); - } -@@ -445,14 +400,6 @@ static inline int mv_cesa_ahash_cra_init(struct crypto_tfm *tfm) - static int mv_cesa_ahash_cache_req(struct ahash_request *req, bool *cached) - { - struct mv_cesa_ahash_req *creq = ahash_request_ctx(req); -- int ret; -- -- if (((creq->cache_ptr + req->nbytes) & CESA_HASH_BLOCK_SIZE_MSK) && -- !creq->last_req) { -- ret = mv_cesa_ahash_alloc_cache(req); -- if (ret) -- return ret; -- } - - if (creq->cache_ptr + req->nbytes < 64 && !creq->last_req) { - *cached = true; -@@ -505,10 +452,17 @@ mv_cesa_ahash_dma_add_cache(struct mv_cesa_tdma_chain *chain, - gfp_t flags) - { - struct mv_cesa_ahash_dma_req *ahashdreq = &creq->req.dma; -+ int ret; - - if (!creq->cache_ptr) - return 0; - -+ ret = mv_cesa_ahash_dma_alloc_cache(ahashdreq, flags); -+ if (ret) -+ return ret; -+ -+ memcpy(ahashdreq->cache, creq->cache, creq->cache_ptr); -+ - return mv_cesa_dma_add_data_transfer(chain, - CESA_SA_DATA_SRAM_OFFSET, - ahashdreq->cache_dma, -@@ -848,10 +802,6 @@ static int mv_cesa_ahash_import(struct ahash_request *req, const void *hash, - if (!cache_ptr) - return 0; - -- ret = mv_cesa_ahash_alloc_cache(req); -- if (ret) -- return ret; -- - memcpy(creq->cache, cache, cache_ptr); - creq->cache_ptr = cache_ptr; - -@@ -860,9 +810,14 @@ static int mv_cesa_ahash_import(struct ahash_request *req, const void *hash, - - static int mv_cesa_md5_init(struct ahash_request *req) - { -+ struct mv_cesa_ahash_req *creq = ahash_request_ctx(req); - struct mv_cesa_op_ctx tmpl = { }; - - mv_cesa_set_op_cfg(&tmpl, CESA_SA_DESC_CFG_MACM_MD5); -+ creq->state[0] = MD5_H0; -+ creq->state[1] = MD5_H1; -+ creq->state[2] = MD5_H2; -+ creq->state[3] = MD5_H3; - - mv_cesa_ahash_init(req, &tmpl, true); - -@@ -923,9 +878,15 @@ struct ahash_alg mv_md5_alg = { - - static int mv_cesa_sha1_init(struct ahash_request *req) - { -+ struct mv_cesa_ahash_req *creq = ahash_request_ctx(req); - struct mv_cesa_op_ctx tmpl = { }; - - mv_cesa_set_op_cfg(&tmpl, CESA_SA_DESC_CFG_MACM_SHA1); -+ creq->state[0] = SHA1_H0; -+ creq->state[1] = SHA1_H1; -+ creq->state[2] = SHA1_H2; -+ creq->state[3] = SHA1_H3; -+ creq->state[4] = SHA1_H4; - - mv_cesa_ahash_init(req, &tmpl, false); - -@@ -986,9 +947,18 @@ struct ahash_alg mv_sha1_alg = { - - static int mv_cesa_sha256_init(struct ahash_request *req) - { -+ struct mv_cesa_ahash_req *creq = ahash_request_ctx(req); - struct mv_cesa_op_ctx tmpl = { }; - - mv_cesa_set_op_cfg(&tmpl, CESA_SA_DESC_CFG_MACM_SHA256); -+ creq->state[0] = SHA256_H0; -+ creq->state[1] = SHA256_H1; -+ creq->state[2] = SHA256_H2; -+ creq->state[3] = SHA256_H3; -+ creq->state[4] = SHA256_H4; -+ creq->state[5] = SHA256_H5; -+ creq->state[6] = SHA256_H6; -+ creq->state[7] = SHA256_H7; - - mv_cesa_ahash_init(req, &tmpl, false); - diff --git a/drivers/crypto/qat/qat_common/adf_aer.c b/drivers/crypto/qat/qat_common/adf_aer.c -index e78a1d7..f6ef8aa 100644 +index b40d9c8..dcbcd94 100644 --- a/drivers/crypto/qat/qat_common/adf_aer.c +++ b/drivers/crypto/qat/qat_common/adf_aer.c @@ -56,7 +56,7 @@ @@ -44458,10 +44128,10 @@ index 984c5e9..c873659 100644 mutex_unlock(&devfreq_list_lock); diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c -index 155c146..0a697f4 100644 +index 4a2c07e..8f4b1cc 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c -@@ -835,10 +835,9 @@ static int dma_buf_describe(struct seq_file *s) +@@ -880,10 +880,9 @@ static int dma_buf_describe(struct seq_file *s) static int dma_buf_show(struct seq_file *s, void *unused) { @@ -44474,6 +44144,19 @@ index 155c146..0a697f4 100644 } static int dma_buf_debug_open(struct inode *inode, struct file *file) +diff --git a/drivers/dma/qcom/hidma_mgmt_sys.c b/drivers/dma/qcom/hidma_mgmt_sys.c +index d61f106..a23baa3 100644 +--- a/drivers/dma/qcom/hidma_mgmt_sys.c ++++ b/drivers/dma/qcom/hidma_mgmt_sys.c +@@ -194,7 +194,7 @@ static ssize_t set_values_channel(struct kobject *kobj, + + static int create_sysfs_entry(struct hidma_mgmt_dev *dev, char *name, int mode) + { +- struct device_attribute *attrs; ++ device_attribute_no_const *attrs; + char *name_copy; + + attrs = devm_kmalloc(&dev->pdev->dev, diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c index 10fcaba..326f709 100644 --- a/drivers/dma/sh/shdma-base.c @@ -44490,7 +44173,7 @@ index 10fcaba..326f709 100644 ret = -ENOMEM; goto edescalloc; diff --git a/drivers/dma/sh/shdmac.c b/drivers/dma/sh/shdmac.c -index 11707df..2ea96f7 100644 +index 80d8640..53f0508 100644 --- a/drivers/dma/sh/shdmac.c +++ b/drivers/dma/sh/shdmac.c @@ -513,7 +513,7 @@ static int sh_dmae_nmi_handler(struct notifier_block *self, @@ -44567,7 +44250,7 @@ index 5f8543b..46aa017 100644 unsigned long val; int ret; diff --git a/drivers/edac/edac_pci.c b/drivers/edac/edac_pci.c -index 9968538..fa53f93 100644 +index 8f2f289..cbb0d7c 100644 --- a/drivers/edac/edac_pci.c +++ b/drivers/edac/edac_pci.c @@ -29,7 +29,7 @@ @@ -44579,7 +44262,7 @@ index 9968538..fa53f93 100644 /* * edac_pci_alloc_ctl_info -@@ -255,7 +255,7 @@ static void edac_pci_workq_teardown(struct edac_pci_ctl_info *pci) +@@ -224,7 +224,7 @@ static void edac_pci_workq_function(struct work_struct *work_req) */ int edac_pci_alloc_index(void) { @@ -44723,7 +44406,7 @@ index 57ea7f4..af06b76 100644 card->driver->update_phy_reg(card, 4, PHY_LINK_ACTIVE | PHY_CONTENDER, 0); diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c -index 36a7c2d..3cea1bf 100644 +index aee149b..2a18960 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c @@ -970,7 +970,7 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg) @@ -44795,7 +44478,7 @@ index e1480ff6..1a429bd 100644 void fw_card_initialize(struct fw_card *card, const struct fw_card_driver *driver, struct device *device); diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c -index c2f5117..e36414d 100644 +index 8bf8926..55a4930 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -2049,10 +2049,12 @@ static void bus_reset_work(struct work_struct *work) @@ -44811,7 +44494,7 @@ index c2f5117..e36414d 100644 spin_unlock_irq(&ohci->lock); -@@ -2584,8 +2586,10 @@ static int ohci_enable_phys_dma(struct fw_card *card, +@@ -2585,8 +2587,10 @@ static int ohci_enable_phys_dma(struct fw_card *card, unsigned long flags; int n, ret = 0; @@ -44900,7 +44583,7 @@ index d425374..1da1716 100644 EXPORT_SYMBOL_GPL(cper_next_record_id); diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c -index c51f3b2..54523fd 100644 +index 3a69ed5..0cfea9c6 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -176,15 +176,17 @@ static struct attribute_group efi_subsys_attr_group = { @@ -44928,7 +44611,7 @@ index c51f3b2..54523fd 100644 return efivars_register(&generic_efivars, &generic_ops, efi_kobj); } diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c -index 10e6774..c2d96de 100644 +index 096adcb..0235592 100644 --- a/drivers/firmware/efi/efivars.c +++ b/drivers/firmware/efi/efivars.c @@ -583,7 +583,7 @@ efivar_create_sysfs_entry(struct efivar_entry *new_var) @@ -45005,10 +44688,10 @@ index 5de3ed2..d839c56 100644 .sysfs_ops = &memmap_attr_ops, .default_attrs = def_attrs, diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c -index f25cd79..7b7ad07 100644 +index b5d0580..893aa47 100644 --- a/drivers/firmware/psci.c +++ b/drivers/firmware/psci.c -@@ -55,7 +55,7 @@ bool psci_tos_resident_on(int cpu) +@@ -58,7 +58,7 @@ bool psci_tos_resident_on(int cpu) return cpu == resident_cpu; } @@ -45018,10 +44701,10 @@ index f25cd79..7b7ad07 100644 typedef unsigned long (psci_fn)(unsigned long, unsigned long, unsigned long, unsigned long); diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c -index cd007a6..6fd1a2e 100644 +index dd262f0..2834a84 100644 --- a/drivers/gpio/gpio-davinci.c +++ b/drivers/gpio/gpio-davinci.c -@@ -439,9 +439,9 @@ static struct irq_chip *davinci_gpio_get_irq_chip(unsigned int irq) +@@ -440,9 +440,9 @@ static struct irq_chip *davinci_gpio_get_irq_chip(unsigned int irq) return &gpio_unbanked.chip; }; @@ -45033,7 +44716,7 @@ index cd007a6..6fd1a2e 100644 gpio_unbanked = *irq_get_chip(irq); return &gpio_unbanked; -@@ -471,7 +471,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev) +@@ -472,7 +472,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev) struct davinci_gpio_regs __iomem *g; struct irq_domain *irq_domain = NULL; const struct of_device_id *match; @@ -45056,10 +44739,10 @@ index 8d32ccc..2d2ca61 100644 unsigned int ngpios; int ret; diff --git a/drivers/gpio/gpio-ich.c b/drivers/gpio/gpio-ich.c -index a489338..3c0a85b 100644 +index 4f6d643..eb4655c 100644 --- a/drivers/gpio/gpio-ich.c +++ b/drivers/gpio/gpio-ich.c -@@ -94,7 +94,7 @@ struct ichx_desc { +@@ -95,7 +95,7 @@ struct ichx_desc { * this option allows driver caching written output values */ bool use_outlvl_cache; @@ -45068,11 +44751,35 @@ index a489338..3c0a85b 100644 static struct { spinlock_t lock; +diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c +index 425501c..cad19ba 100644 +--- a/drivers/gpio/gpio-mpc8xxx.c ++++ b/drivers/gpio/gpio-mpc8xxx.c +@@ -226,7 +226,7 @@ static int mpc512x_irq_set_type(struct irq_data *d, unsigned int flow_type) + return 0; + } + +-static struct irq_chip mpc8xxx_irq_chip = { ++static irq_chip_no_const mpc8xxx_irq_chip __read_only = { + .name = "mpc8xxx-gpio", + .irq_unmask = mpc8xxx_irq_unmask, + .irq_mask = mpc8xxx_irq_mask, +@@ -337,7 +337,9 @@ static int mpc8xxx_probe(struct platform_device *pdev) + * It's assumed that only a single type of gpio controller is available + * on the current machine, so overwriting global data is fine. + */ +- mpc8xxx_irq_chip.irq_set_type = devtype->irq_set_type; ++ pax_open_kernel(); ++ const_cast(mpc8xxx_irq_chip.irq_set_type) = devtype->irq_set_type; ++ pax_close_kernel(); + + if (devtype->gpio_dir_out) + gc->direction_output = devtype->gpio_dir_out; diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c -index 189f672..c52c254 100644 +index 551dfa9..fc6ca83 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c -@@ -1069,7 +1069,7 @@ static void omap_gpio_mod_init(struct gpio_bank *bank) +@@ -1068,7 +1068,7 @@ static void omap_gpio_mod_init(struct gpio_bank *bank) writel_relaxed(0, base + bank->regs->ctrl); } @@ -45081,7 +44788,7 @@ index 189f672..c52c254 100644 { static int gpio; int irq_base = 0; -@@ -1156,7 +1156,7 @@ static int omap_gpio_probe(struct platform_device *pdev) +@@ -1158,7 +1158,7 @@ static int omap_gpio_probe(struct platform_device *pdev) const struct omap_gpio_platform_data *pdata; struct resource *res; struct gpio_bank *bank; @@ -45091,10 +44798,10 @@ index 189f672..c52c254 100644 match = of_match_device(of_match_ptr(omap_gpio_match), dev); diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c -index d9ab0cd..406ce88 100644 +index 4d9a315c..b1fed42 100644 --- a/drivers/gpio/gpio-rcar.c +++ b/drivers/gpio/gpio-rcar.c -@@ -421,7 +421,7 @@ static int gpio_rcar_probe(struct platform_device *pdev) +@@ -369,7 +369,7 @@ static int gpio_rcar_probe(struct platform_device *pdev) struct gpio_rcar_priv *p; struct resource *io, *irq; struct gpio_chip *gpio_chip; @@ -45117,10 +44824,10 @@ index ac8deb0..f3caa10 100644 return -EINVAL; } diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c -index 5c1ba87..f711915 100644 +index cf3e712..2d532c3 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c -@@ -669,8 +669,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) +@@ -1031,8 +1031,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) } if (gpiochip->irqchip) { @@ -45133,7 +44840,7 @@ index 5c1ba87..f711915 100644 gpiochip->irqchip = NULL; } } -@@ -747,8 +749,10 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip, +@@ -1109,8 +1111,10 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip, */ if (!irqchip->irq_request_resources && !irqchip->irq_release_resources) { @@ -45147,10 +44854,10 @@ index 5c1ba87..f711915 100644 /* diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index ff29975..a7fe398 100644 +index 1bcbade..c8d5713 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -1734,7 +1734,7 @@ void amdgpu_debugfs_cleanup(struct drm_minor *minor); +@@ -1709,7 +1709,7 @@ void amdgpu_debugfs_cleanup(struct drm_minor *minor); * amdgpu smumgr functions */ struct amdgpu_smumgr_funcs { @@ -45159,7 +44866,7 @@ index ff29975..a7fe398 100644 int (*request_smu_load_fw)(struct amdgpu_device *adev); int (*request_smu_specific_fw)(struct amdgpu_device *adev, uint32_t fwtype); }; -@@ -2346,7 +2346,7 @@ static inline void amdgpu_unregister_atpx_handler(void) {} +@@ -2339,7 +2339,7 @@ static inline void amdgpu_unregister_atpx_handler(void) {} * KMS */ extern const struct drm_ioctl_desc amdgpu_ioctls_kms[]; @@ -45169,10 +44876,10 @@ index ff29975..a7fe398 100644 int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags); int amdgpu_driver_unload_kms(struct drm_device *dev); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c -index 3c89586..14cfa09 100644 +index 35a1248..fd2510a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c -@@ -493,7 +493,7 @@ static int amdgpu_atpx_init(void) +@@ -496,7 +496,7 @@ static int amdgpu_atpx_init(void) * look up whether we are the integrated or discrete GPU (all asics). * Returns the client id. */ @@ -45182,10 +44889,10 @@ index 3c89586..14cfa09 100644 if (amdgpu_atpx_priv.dhandle == ACPI_HANDLE(&pdev->dev)) return VGA_SWITCHEROO_IGD; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c -index 75cb5b9..2f6481f 100644 +index 6043dc7..517c964 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c -@@ -1066,48 +1066,48 @@ int amdgpu_cgs_call_acpi_method(void *cgs_device, +@@ -1076,49 +1076,49 @@ int amdgpu_cgs_call_acpi_method(void *cgs_device, } static const struct cgs_ops amdgpu_cgs_ops = { @@ -45223,6 +44930,7 @@ index 75cb5b9..2f6481f 100644 - amdgpu_cgs_set_powergating_state, - amdgpu_cgs_set_clockgating_state, - amdgpu_cgs_get_active_displays_info, +- amdgpu_cgs_notify_dpm_enabled, - amdgpu_cgs_call_acpi_method, - amdgpu_cgs_query_system_info, + .gpu_mem_info = amdgpu_cgs_gpu_mem_info, @@ -45259,6 +44967,7 @@ index 75cb5b9..2f6481f 100644 + .set_powergating_state = amdgpu_cgs_set_powergating_state, + .set_clockgating_state = amdgpu_cgs_set_clockgating_state, + .get_active_displays_info = amdgpu_cgs_get_active_displays_info, ++ .notify_dpm_enabled = amdgpu_cgs_notify_dpm_enabled, + .call_acpi_method = amdgpu_cgs_call_acpi_method, + .query_system_info = amdgpu_cgs_query_system_info }; @@ -45314,10 +45023,10 @@ index 7ef2c13..dff07e5 100644 { struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c -index 51bfc11..4d4112a 100644 +index 2139da7..222ef8b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c -@@ -1085,7 +1085,7 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev) +@@ -1054,7 +1054,7 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev) * locking inversion with the driver load path. And the access here is * completely racy anyway. So don't bother with locking for now. */ @@ -45327,10 +45036,10 @@ index 51bfc11..4d4112a 100644 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = { diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -index 9ef1db8..5eec19b 100644 +index f1e17d6..e7d750a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -@@ -495,7 +495,7 @@ static struct drm_driver kms_driver = { +@@ -491,7 +491,7 @@ static struct drm_driver kms_driver = { .driver_features = DRIVER_USE_AGP | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM | @@ -45339,7 +45048,7 @@ index 9ef1db8..5eec19b 100644 .dev_priv_size = 0, .load = amdgpu_driver_load_kms, .open = amdgpu_driver_open_kms, -@@ -546,9 +546,6 @@ static struct drm_driver kms_driver = { +@@ -542,9 +542,6 @@ static struct drm_driver kms_driver = { .patchlevel = KMS_DRIVER_PATCHLEVEL, }; @@ -45349,7 +45058,7 @@ index 9ef1db8..5eec19b 100644 static struct pci_driver amdgpu_kms_pci_driver = { .name = DRIVER_NAME, .id_table = pciidlist, -@@ -566,22 +563,23 @@ static int __init amdgpu_init(void) +@@ -563,20 +560,21 @@ static int __init amdgpu_init(void) } #endif DRM_INFO("amdgpu kernel modesetting enabled.\n"); @@ -45364,8 +45073,6 @@ index 9ef1db8..5eec19b 100644 + amdgpu_register_atpx_handler(); - amdgpu_amdkfd_init(); - /* let modprobe override vga console setting */ - return drm_pci_init(driver, pdriver); + return drm_pci_init(&kms_driver, &amdgpu_kms_pci_driver); @@ -45377,23 +45084,23 @@ index 9ef1db8..5eec19b 100644 - drm_pci_exit(driver, pdriver); + drm_pci_exit(&kms_driver, &amdgpu_kms_pci_driver); amdgpu_unregister_atpx_handler(); + amdgpu_sync_fini(); } - diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c -index 4488e82..9b87225 100644 +index b04337d..7db2712 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c -@@ -749,4 +749,4 @@ const struct drm_ioctl_desc amdgpu_ioctls_kms[] = { +@@ -755,4 +755,4 @@ const struct drm_ioctl_desc amdgpu_ioctls_kms[] = { DRM_IOCTL_DEF_DRV(AMDGPU_GEM_OP, amdgpu_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), }; -int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms); +const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms); diff --git a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c -index e35340a..9f6d286 100644 +index b336c91..c015ca7 100644 --- a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c +++ b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c -@@ -513,7 +513,7 @@ static int fiji_smu_request_load_fw(struct amdgpu_device *adev) +@@ -519,7 +519,7 @@ static int fiji_smu_request_load_fw(struct amdgpu_device *adev) return 0; } @@ -45402,7 +45109,7 @@ index e35340a..9f6d286 100644 { switch (fw_type) { case AMDGPU_UCODE_ID_SDMA0: -@@ -539,7 +539,7 @@ static uint32_t fiji_smu_get_mask_for_fw_type(uint32_t fw_type) +@@ -545,7 +545,7 @@ static uint32_t fiji_smu_get_mask_for_fw_type(uint32_t fw_type) } static int fiji_smu_check_fw_load_finish(struct amdgpu_device *adev, @@ -45412,10 +45119,10 @@ index e35340a..9f6d286 100644 uint32_t fw_mask = fiji_smu_get_mask_for_fw_type(fw_type); int i; diff --git a/drivers/gpu/drm/amd/amdgpu/iceland_smc.c b/drivers/gpu/drm/amd/amdgpu/iceland_smc.c -index 090486c..699728e 100644 +index 52ee081..fa68463 100644 --- a/drivers/gpu/drm/amd/amdgpu/iceland_smc.c +++ b/drivers/gpu/drm/amd/amdgpu/iceland_smc.c -@@ -418,7 +418,7 @@ static enum AMDGPU_UCODE_ID iceland_convert_fw_type(uint32_t fw_type) +@@ -424,7 +424,7 @@ static enum AMDGPU_UCODE_ID iceland_convert_fw_type(uint32_t fw_type) } } @@ -45424,7 +45131,7 @@ index 090486c..699728e 100644 { switch (fw_type) { case AMDGPU_UCODE_ID_SDMA0: -@@ -556,7 +556,7 @@ static int iceland_smu_request_load_fw(struct amdgpu_device *adev) +@@ -562,7 +562,7 @@ static int iceland_smu_request_load_fw(struct amdgpu_device *adev) } static int iceland_smu_check_fw_load_finish(struct amdgpu_device *adev, @@ -45434,10 +45141,10 @@ index 090486c..699728e 100644 uint32_t fw_mask = iceland_smu_get_mask_for_fw_type(fw_type); int i; diff --git a/drivers/gpu/drm/amd/amdgpu/tonga_smc.c b/drivers/gpu/drm/amd/amdgpu/tonga_smc.c -index 361c49a..1113506 100644 +index 083893d..d4f66f5 100644 --- a/drivers/gpu/drm/amd/amdgpu/tonga_smc.c +++ b/drivers/gpu/drm/amd/amdgpu/tonga_smc.c -@@ -515,7 +515,7 @@ static int tonga_smu_request_load_fw(struct amdgpu_device *adev) +@@ -521,7 +521,7 @@ static int tonga_smu_request_load_fw(struct amdgpu_device *adev) return 0; } @@ -45446,7 +45153,7 @@ index 361c49a..1113506 100644 { switch (fw_type) { case AMDGPU_UCODE_ID_SDMA0: -@@ -541,7 +541,7 @@ static uint32_t tonga_smu_get_mask_for_fw_type(uint32_t fw_type) +@@ -547,7 +547,7 @@ static uint32_t tonga_smu_get_mask_for_fw_type(uint32_t fw_type) } static int tonga_smu_check_fw_load_finish(struct amdgpu_device *adev, @@ -45456,7 +45163,7 @@ index 361c49a..1113506 100644 uint32_t fw_mask = tonga_smu_get_mask_for_fw_type(fw_type); int i; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c -index d2b49c0..478e036 100644 +index 07ac724..1c4ca38 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -419,7 +419,7 @@ static int kfd_ioctl_set_memory_policy(struct file *filep, @@ -45937,10 +45644,10 @@ index ff08ce4..5b8758f 100644 struct phm_master_table_header cz_phm_enable_clock_power_gatings_master = { diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c -index 2ea012e..b4256b4 100644 +index 5682490..bec743b 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c -@@ -915,13 +915,13 @@ static int cz_tf_update_low_mem_pstate(struct pp_hwmgr *hwmgr, +@@ -916,13 +916,13 @@ static int cz_tf_update_low_mem_pstate(struct pp_hwmgr *hwmgr, } static struct phm_master_table_item cz_set_power_state_list[] = { @@ -45961,7 +45668,7 @@ index 2ea012e..b4256b4 100644 }; static struct phm_master_table_header cz_set_power_state_master = { -@@ -931,15 +931,15 @@ static struct phm_master_table_header cz_set_power_state_master = { +@@ -932,15 +932,15 @@ static struct phm_master_table_header cz_set_power_state_master = { }; static struct phm_master_table_item cz_setup_asic_list[] = { @@ -45986,7 +45693,7 @@ index 2ea012e..b4256b4 100644 }; static struct phm_master_table_header cz_setup_asic_master = { -@@ -984,10 +984,10 @@ static int cz_tf_reset_cc6_data(struct pp_hwmgr *hwmgr, +@@ -985,10 +985,10 @@ static int cz_tf_reset_cc6_data(struct pp_hwmgr *hwmgr, } static struct phm_master_table_item cz_power_down_asic_list[] = { @@ -46001,7 +45708,7 @@ index 2ea012e..b4256b4 100644 }; static struct phm_master_table_header cz_power_down_asic_master = { -@@ -1095,8 +1095,8 @@ static int cz_tf_check_for_dpm_enabled(struct pp_hwmgr *hwmgr, +@@ -1096,8 +1096,8 @@ static int cz_tf_check_for_dpm_enabled(struct pp_hwmgr *hwmgr, } static struct phm_master_table_item cz_disable_dpm_list[] = { @@ -46012,7 +45719,7 @@ index 2ea012e..b4256b4 100644 }; -@@ -1107,13 +1107,13 @@ static struct phm_master_table_header cz_disable_dpm_master = { +@@ -1108,13 +1108,13 @@ static struct phm_master_table_header cz_disable_dpm_master = { }; static struct phm_master_table_item cz_enable_dpm_list[] = { @@ -46119,7 +45826,7 @@ index a188174..74acdc0 100644 struct phm_master_table_header tonga_thermal_set_temperature_range_master = { diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c -index 8b2becd..2d8f572 100644 +index a5ff945..78ff889 100644 --- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c +++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c @@ -139,7 +139,7 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched, @@ -46145,7 +45852,7 @@ index 9403145..b8842f1 100644 struct fence *dependency; diff --git a/drivers/gpu/drm/amd/scheduler/sched_fence.c b/drivers/gpu/drm/amd/scheduler/sched_fence.c -index 87c78ee..59dc36e 100644 +index dc115ae..7ecd14b 100644 --- a/drivers/gpu/drm/amd/scheduler/sched_fence.c +++ b/drivers/gpu/drm/amd/scheduler/sched_fence.c @@ -41,7 +41,7 @@ struct amd_sched_fence *amd_sched_fence_create(struct amd_sched_entity *s_entity @@ -46158,10 +45865,10 @@ index 87c78ee..59dc36e 100644 s_entity->fence_context, seq); diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c -index 3bd7e1c..565fe46 100644 +index 82043c2..92ebd4e 100644 --- a/drivers/gpu/drm/armada/armada_drv.c +++ b/drivers/gpu/drm/armada/armada_drv.c -@@ -218,6 +218,7 @@ static struct drm_driver armada_drm_driver = { +@@ -215,6 +215,7 @@ static struct drm_driver armada_drm_driver = { .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_HAVE_IRQ | DRIVER_PRIME, .ioctls = armada_ioctls, @@ -46169,7 +45876,7 @@ index 3bd7e1c..565fe46 100644 .fops = &armada_drm_fops, }; -@@ -338,8 +339,6 @@ static int __init armada_drm_init(void) +@@ -335,8 +336,6 @@ static int __init armada_drm_init(void) { int ret; @@ -46179,10 +45886,10 @@ index 3bd7e1c..565fe46 100644 if (ret) return ret; diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c -index 0123458..4169580 100644 +index a965e7e..5ba937e 100644 --- a/drivers/gpu/drm/ast/ast_mode.c +++ b/drivers/gpu/drm/ast/ast_mode.c -@@ -789,7 +789,7 @@ static int ast_get_modes(struct drm_connector *connector) +@@ -773,7 +773,7 @@ static int ast_get_modes(struct drm_connector *connector) return 0; } @@ -46192,10 +45899,10 @@ index 0123458..4169580 100644 { struct ast_private *ast = connector->dev->dev_private; diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c -index 2849f1b..86f509b 100644 +index 96926f0..69097ba 100644 --- a/drivers/gpu/drm/bochs/bochs_kms.c +++ b/drivers/gpu/drm/bochs/bochs_kms.c -@@ -210,7 +210,7 @@ int bochs_connector_get_modes(struct drm_connector *connector) +@@ -194,7 +194,7 @@ int bochs_connector_get_modes(struct drm_connector *connector) return count; } @@ -46204,36 +45911,11 @@ index 2849f1b..86f509b 100644 struct drm_display_mode *mode) { struct bochs_device *bochs = -diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c -index ee9914d..e028752 100644 ---- a/drivers/gpu/drm/drm_atomic.c -+++ b/drivers/gpu/drm/drm_atomic.c -@@ -1339,6 +1339,11 @@ EXPORT_SYMBOL(drm_atomic_async_commit); - * The big monstor ioctl - */ - -+static void free_vblank_event(struct drm_pending_event *event) -+{ -+ kfree(event); -+} -+ - static struct drm_pending_vblank_event *create_vblank_event( - struct drm_device *dev, struct drm_file *file_priv, uint64_t user_data) - { -@@ -1366,7 +1371,7 @@ static struct drm_pending_vblank_event *create_vblank_event( - e->event.user_data = user_data; - e->base.event = &e->event.base; - e->base.file_priv = file_priv; -- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree; -+ e->base.destroy = free_vblank_event; - - out: - return e; diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c -index f619121..ef03460 100644 +index f30de80..7893e10 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c -@@ -4152,7 +4152,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev, +@@ -4258,7 +4258,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev, goto done; } @@ -46242,28 +45924,6 @@ index f619121..ef03460 100644 &prop_enum->name, DRM_PROP_NAME_LEN)) { ret = -EFAULT; goto done; -@@ -5229,6 +5229,11 @@ out: - return ret; - } - -+static void drm_mode_page_flip_dmabuf_destroy(struct drm_pending_event *event) -+{ -+ kfree(event); -+} -+ - /** - * drm_mode_page_flip_ioctl - schedule an asynchronous fb update - * @dev: DRM device -@@ -5327,8 +5332,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, - e->event.user_data = page_flip->user_data; - e->base.event = &e->event.base; - e->base.file_priv = file_priv; -- e->base.destroy = -- (void (*) (struct drm_pending_event *)) kfree; -+ e->base.destroy = drm_mode_page_flip_dmabuf_destroy; - } - - crtc->primary->old_fb = crtc->primary->fb; diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 167c8d3..bf13708 100644 --- a/drivers/gpu/drm/drm_drv.c @@ -46278,10 +45938,10 @@ index 167c8d3..bf13708 100644 } mutex_unlock(&drm_global_mutex); diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c -index 1ea8790..03efb49 100644 +index aeef58e..1594209 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c -@@ -89,7 +89,7 @@ int drm_open(struct inode *inode, struct file *filp) +@@ -131,7 +131,7 @@ int drm_open(struct inode *inode, struct file *filp) return PTR_ERR(minor); dev = minor->dev; @@ -46290,7 +45950,7 @@ index 1ea8790..03efb49 100644 need_setup = 1; /* share address_space across all char-devs of a single device */ -@@ -106,7 +106,7 @@ int drm_open(struct inode *inode, struct file *filp) +@@ -148,7 +148,7 @@ int drm_open(struct inode *inode, struct file *filp) return 0; err_undo: @@ -46299,7 +45959,7 @@ index 1ea8790..03efb49 100644 drm_minor_release(minor); return retcode; } -@@ -407,7 +407,7 @@ int drm_release(struct inode *inode, struct file *filp) +@@ -449,7 +449,7 @@ int drm_release(struct inode *inode, struct file *filp) mutex_lock(&drm_global_mutex); @@ -46308,7 +45968,7 @@ index 1ea8790..03efb49 100644 mutex_lock(&dev->struct_mutex); list_del(&file_priv->lhead); -@@ -422,10 +422,10 @@ int drm_release(struct inode *inode, struct file *filp) +@@ -464,10 +464,10 @@ int drm_release(struct inode *inode, struct file *filp) * Begin inline drm_release */ @@ -46321,7 +45981,7 @@ index 1ea8790..03efb49 100644 /* if the master has gone away we can't do anything with the lock */ if (file_priv->minor->master) -@@ -495,7 +495,7 @@ int drm_release(struct inode *inode, struct file *filp) +@@ -537,7 +537,7 @@ int drm_release(struct inode *inode, struct file *filp) * End inline drm_release */ @@ -46330,6 +45990,27 @@ index 1ea8790..03efb49 100644 retcode = drm_lastclose(dev); if (drm_device_is_unplugged(dev)) drm_put_dev(dev); +@@ -676,6 +676,11 @@ unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait) + } + EXPORT_SYMBOL(drm_poll); + ++static void drm_pending_event_destroy(struct drm_pending_event *event) ++{ ++ kfree(event); ++} ++ + /** + * drm_event_reserve_init_locked - init a DRM event and reserve space for it + * @dev: DRM device +@@ -715,7 +720,7 @@ int drm_event_reserve_init_locked(struct drm_device *dev, + p->file_priv = file_priv; + + /* we *could* pass this in as arg, but everyone uses kfree: */ +- p->destroy = (void (*) (struct drm_pending_event *)) kfree; ++ p->destroy = drm_pending_event_destroy; + + return 0; + } diff --git a/drivers/gpu/drm/drm_global.c b/drivers/gpu/drm/drm_global.c index 3d2e91c..d31c4c9 100644 --- a/drivers/gpu/drm/drm_global.c @@ -46487,31 +46168,6 @@ index 8ce2a0c..d09a8f6 100644 unsigned int nr = DRM_IOCTL_NR(cmd); int retcode = -EINVAL; char stack_kdata[128]; -diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c -index 1fe1457..a3e7822 100644 ---- a/drivers/gpu/drm/drm_irq.c -+++ b/drivers/gpu/drm/drm_irq.c -@@ -1646,6 +1646,11 @@ int drm_modeset_ctl(struct drm_device *dev, void *data, - return 0; - } - -+static void drm_vblank_dmabuf_destroy(struct drm_pending_event *event) -+{ -+ kfree(event); -+} -+ - static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe, - union drm_wait_vblank *vblwait, - struct drm_file *file_priv) -@@ -1670,7 +1675,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe, - e->event.user_data = vblwait->request.signal; - e->base.event = &e->event.base; - e->base.file_priv = file_priv; -- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree; -+ e->base.destroy = drm_vblank_dmabuf_destroy; - - spin_lock_irqsave(&dev->event_lock, flags); - diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c index a1fff11..425c24b 100644 --- a/drivers/gpu/drm/drm_pci.c @@ -46547,7 +46203,7 @@ index a1fff11..425c24b 100644 } } diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c -index 68f0f36..4e8daee 100644 +index 5344940..3764f99 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -605,7 +605,6 @@ static int exynos_drm_platform_probe(struct platform_device *pdev) @@ -46559,10 +46215,10 @@ index 68f0f36..4e8daee 100644 match = exynos_drm_match_add(&pdev->dev); if (IS_ERR(match)) diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c -index 8dfe6e1..e7957e6 100644 +index 193d360..3dd24ce 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c -@@ -1060,6 +1060,11 @@ int exynos_g2d_get_ver_ioctl(struct drm_device *drm_dev, void *data, +@@ -1057,6 +1057,11 @@ int exynos_g2d_get_ver_ioctl(struct drm_device *drm_dev, void *data, return 0; } @@ -46574,17 +46230,8 @@ index 8dfe6e1..e7957e6 100644 int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data, struct drm_file *file) { -@@ -1118,7 +1123,7 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data, - e->event.user_data = req->user_data; - e->base.event = &e->event.base; - e->base.file_priv = file; -- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree; -+ e->base.destroy = exynos_g2d_dmabuf_destroy; - - node->event = e; - } diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c -index d0717a8..563f087 100644 +index b837e7a..cb5a14b 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_crt.c +++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c @@ -64,7 +64,7 @@ static void cdv_intel_crt_dpms(struct drm_encoder *encoder, int mode) @@ -46597,7 +46244,7 @@ index d0717a8..563f087 100644 { if (mode->flags & DRM_MODE_FLAG_DBLSCAN) diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c -index 7bb1f1af..a35770e 100644 +index c52f9ad..486d203 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_dp.c +++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c @@ -505,7 +505,7 @@ static void cdv_intel_edp_backlight_off (struct gma_encoder *intel_encoder) @@ -46610,7 +46257,7 @@ index 7bb1f1af..a35770e 100644 struct drm_display_mode *mode) { diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c -index ddf2d77..4e9e184 100644 +index 28f9d90..fbb7883 100644 --- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c +++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c @@ -223,7 +223,7 @@ static int cdv_hdmi_get_modes(struct drm_connector *connector) @@ -46636,10 +46283,26 @@ index 813ef23..17928d6 100644 { struct drm_device *dev = connector->dev; diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c -index 7cd87a0..1ccc140 100644 +index 7cd87a0..9b8a71f 100644 --- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c +++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c -@@ -645,6 +645,9 @@ static void mdfld_dsi_dpi_set_power(struct drm_encoder *encoder, bool on) +@@ -120,9 +120,14 @@ static void dsi_set_pipe_plane_enable_state(struct drm_device *dev, + u32 pipeconf_reg = PIPEACONF; + u32 dspcntr_reg = DSPACNTR; + +- u32 dspcntr = dev_priv->dspcntr[pipe]; ++ u32 dspcntr; + u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX; + ++ if (pipe == -1) ++ return; ++ ++ dspcntr = dev_priv->dspcntr[pipe]; ++ + if (pipe) { + pipeconf_reg = PIPECCONF; + dspcntr_reg = DSPCCNTR; +@@ -645,6 +650,9 @@ static void mdfld_dsi_dpi_set_power(struct drm_encoder *encoder, bool on) if (!gma_power_begin(dev, true)) return; @@ -46650,7 +46313,7 @@ index 7cd87a0..1ccc140 100644 if (mdfld_get_panel_type(dev, pipe) == TMD_VID) mdfld_dsi_dpi_turn_on(dpi_output, pipe); diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_output.c b/drivers/gpu/drm/gma500/mdfld_dsi_output.c -index d758f4c..7828190 100644 +index 907cb51..ae6f60c 100644 --- a/drivers/gpu/drm/gma500/mdfld_dsi_output.c +++ b/drivers/gpu/drm/gma500/mdfld_dsi_output.c @@ -351,7 +351,7 @@ static int mdfld_dsi_connector_get_modes(struct drm_connector *connector) @@ -46662,26 +46325,8 @@ index d758f4c..7828190 100644 struct drm_display_mode *mode) { struct mdfld_dsi_connector *dsi_connector = -@@ -382,14 +382,14 @@ static int mdfld_dsi_connector_mode_valid(struct drm_connector *connector, - return MODE_OK; - } - --static void mdfld_dsi_connector_dpms(struct drm_connector *connector, int mode) -+static int mdfld_dsi_connector_dpms(struct drm_connector *connector, int mode) - { - if (mode == connector->dpms) -- return; -+ return 0; - - /*first, execute dpms*/ - -- drm_helper_connector_dpms(connector, mode); -+ return drm_helper_connector_dpms(connector, mode); - } - - static struct drm_encoder *mdfld_dsi_connector_best_encoder( diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi.c b/drivers/gpu/drm/gma500/oaktrail_hdmi.c -index 2d18499..3d5f8b9 100644 +index 8b2eb32..78566a8 100644 --- a/drivers/gpu/drm/gma500/oaktrail_hdmi.c +++ b/drivers/gpu/drm/gma500/oaktrail_hdmi.c @@ -509,7 +509,7 @@ static void oaktrail_hdmi_dpms(struct drm_encoder *encoder, int mode) @@ -46694,7 +46339,7 @@ index 2d18499..3d5f8b9 100644 { if (mode->clock > 165000) diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c -index 92e7e57..5d74ff5 100644 +index 4e1c685..c67f299f 100644 --- a/drivers/gpu/drm/gma500/psb_drv.c +++ b/drivers/gpu/drm/gma500/psb_drv.c @@ -376,7 +376,6 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags) @@ -46745,11 +46390,11 @@ index e787d37..91622fd 100644 { struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector); diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c -index f8ee740..223ee4c 100644 +index f4315bc..2048cc2 100644 --- a/drivers/gpu/drm/i2c/tda998x_drv.c +++ b/drivers/gpu/drm/i2c/tda998x_drv.c -@@ -864,7 +864,7 @@ tda998x_encoder_mode_fixup(struct drm_encoder *encoder, - return true; +@@ -856,7 +856,7 @@ static void tda998x_encoder_dpms(struct drm_encoder *encoder, int mode) + priv->dpms = mode; } -static int tda998x_connector_mode_valid(struct drm_connector *connector, @@ -46825,7 +46470,7 @@ index 5e6a301..b6e143e 100644 /* diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c -index d70d96f..d3a598e 100644 +index 1c6d227..c97b56e 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -356,7 +356,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev) @@ -46837,18 +46482,18 @@ index d70d96f..d3a598e 100644 } static const struct vga_switcheroo_client_ops i915_switcheroo_ops = { -@@ -1334,4 +1334,4 @@ const struct drm_ioctl_desc i915_ioctls[] = { +@@ -1382,4 +1382,4 @@ const struct drm_ioctl_desc i915_ioctls[] = { DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_SETPARAM, i915_gem_context_setparam_ioctl, DRM_RENDER_ALLOW), }; -int i915_max_ioctl = ARRAY_SIZE(i915_ioctls); +const int i915_max_ioctl = ARRAY_SIZE(i915_ioctls); diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c -index 2e832fa..a911c37 100644 +index 6d2fb3f..691eabb 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c -@@ -40,7 +40,7 @@ - #include <linux/pm_runtime.h> +@@ -43,7 +43,7 @@ + #include <linux/vga_switcheroo.h> #include <drm/drm_crtc_helper.h> -static struct drm_driver driver; @@ -46856,7 +46501,7 @@ index 2e832fa..a911c37 100644 #define GEN_DEFAULT_PIPEOFFSETS \ .pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \ -@@ -1702,7 +1702,7 @@ static const struct file_operations i915_driver_fops = { +@@ -1711,7 +1711,7 @@ static const struct file_operations i915_driver_fops = { .llseek = noop_llseek, }; @@ -46865,7 +46510,7 @@ index 2e832fa..a911c37 100644 /* Don't use MTRRs here; the Xserver or userspace app should * deal with them for Intel hardware. */ -@@ -1752,6 +1752,7 @@ static struct pci_driver i915_pci_driver = { +@@ -1761,6 +1761,7 @@ static struct pci_driver i915_pci_driver = { static int __init i915_init(void) { @@ -46873,7 +46518,7 @@ index 2e832fa..a911c37 100644 driver.num_ioctls = i915_max_ioctl; /* -@@ -1769,6 +1770,7 @@ static int __init i915_init(void) +@@ -1778,6 +1779,7 @@ static int __init i915_init(void) #endif if (!(driver.driver_features & DRIVER_MODESET)) { @@ -46881,7 +46526,7 @@ index 2e832fa..a911c37 100644 /* Silently fail loading to not upset userspace. */ DRM_DEBUG_DRIVER("KMS and UMS disabled.\n"); return 0; -@@ -1776,6 +1778,7 @@ static int __init i915_init(void) +@@ -1785,6 +1787,7 @@ static int __init i915_init(void) if (i915.nuclear_pageflip) driver.driver_features |= DRIVER_ATOMIC; @@ -46890,10 +46535,10 @@ index 2e832fa..a911c37 100644 return drm_pci_init(&driver, &i915_pci_driver); } diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h -index b0847b9..c6116c8 100644 +index daba7eb..a5b2287 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -2665,7 +2665,7 @@ struct drm_i915_cmd_table { +@@ -2721,7 +2721,7 @@ struct drm_i915_cmd_table { #include "i915_trace.h" extern const struct drm_ioctl_desc i915_ioctls[]; @@ -46903,10 +46548,10 @@ index b0847b9..c6116c8 100644 extern int i915_suspend_switcheroo(struct drm_device *dev, pm_message_t state); extern int i915_resume_switcheroo(struct drm_device *dev); diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c -index dccb517..c5da26b 100644 +index 1328bc5..d25ea51 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c -@@ -1001,12 +1001,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec) +@@ -997,12 +997,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec) static int validate_exec_list(struct drm_device *dev, struct drm_i915_gem_exec_object2 *exec, @@ -46922,10 +46567,10 @@ index dccb517..c5da26b 100644 invalid_flags = __EXEC_OBJECT_UNKNOWN_FLAGS; if (USES_FULL_PPGTT(dev)) diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c -index 56f4f2e..5f6e773 100644 +index 49e4f26..a1aceb1 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c -@@ -3011,8 +3011,8 @@ static void chv_setup_private_ppat(struct drm_i915_private *dev_priv) +@@ -3036,8 +3036,8 @@ static void chv_setup_private_ppat(struct drm_i915_private *dev_priv) static int gen8_gmch_probe(struct drm_device *dev, u64 *gtt_total, @@ -46936,7 +46581,7 @@ index 56f4f2e..5f6e773 100644 u64 *mappable_end) { struct drm_i915_private *dev_priv = dev->dev_private; -@@ -3062,8 +3062,8 @@ static int gen8_gmch_probe(struct drm_device *dev, +@@ -3087,8 +3087,8 @@ static int gen8_gmch_probe(struct drm_device *dev, static int gen6_gmch_probe(struct drm_device *dev, u64 *gtt_total, @@ -46947,7 +46592,7 @@ index 56f4f2e..5f6e773 100644 u64 *mappable_end) { struct drm_i915_private *dev_priv = dev->dev_private; -@@ -3113,8 +3113,8 @@ static void gen6_gmch_remove(struct i915_address_space *vm) +@@ -3138,8 +3138,8 @@ static void gen6_gmch_remove(struct i915_address_space *vm) static int i915_gmch_probe(struct drm_device *dev, u64 *gtt_total, @@ -46958,7 +46603,7 @@ index 56f4f2e..5f6e773 100644 u64 *mappable_end) { struct drm_i915_private *dev_priv = dev->dev_private; -@@ -3182,8 +3182,8 @@ int i915_gem_gtt_init(struct drm_device *dev) +@@ -3216,8 +3216,8 @@ int i915_gem_gtt_init(struct drm_device *dev) /* GMADR is the PCI mmio aperture into the global GTT. */ DRM_INFO("Memory usable by graphics device = %lluM\n", gtt->base.total >> 20); @@ -46970,16 +46615,18 @@ index 56f4f2e..5f6e773 100644 if (intel_iommu_gfx_mapped) DRM_INFO("VT-d active for gfx access\n"); diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h -index b448ad8..422a8c5 100644 +index 8774f1b..4227d0b 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.h +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h -@@ -341,11 +341,11 @@ struct i915_address_space { +@@ -345,13 +345,13 @@ struct i915_address_space { struct i915_gtt { struct i915_address_space base; - size_t stolen_size; /* Total size of stolen memory */ + u64 stolen_size; /* Total size of stolen memory */ size_t stolen_usable_size; /* Total size minus BIOS reserved */ + size_t stolen_reserved_base; + size_t stolen_reserved_size; u64 mappable_end; /* End offset that we can CPU map */ struct io_mapping *mappable; /* Mapping to our CPU mappable region */ - phys_addr_t mappable_base; /* PA of our GMADR */ @@ -46987,7 +46634,7 @@ index b448ad8..422a8c5 100644 /** "Graphics Stolen Memory" holds the global PTEs */ void __iomem *gsm; -@@ -356,7 +356,7 @@ struct i915_gtt { +@@ -362,7 +362,7 @@ struct i915_gtt { /* global gtt ops */ int (*gtt_probe)(struct drm_device *dev, u64 *gtt_total, @@ -47030,10 +46677,10 @@ index 97f3a56..32c712e 100644 ret = drm_ioctl(filp, cmd, arg); diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c -index fa8afa7..7375300 100644 +index d1a46ef..4999f42 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c -@@ -4490,14 +4490,15 @@ void intel_irq_init(struct drm_i915_private *dev_priv) +@@ -4569,14 +4569,15 @@ void intel_irq_init(struct drm_i915_private *dev_priv) pm_qos_add_request(&dev_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE); @@ -47052,7 +46699,7 @@ index fa8afa7..7375300 100644 dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ } -@@ -4509,32 +4510,32 @@ void intel_irq_init(struct drm_i915_private *dev_priv) +@@ -4588,32 +4589,32 @@ void intel_irq_init(struct drm_i915_private *dev_priv) if (!IS_GEN2(dev_priv)) dev->vblank_disable_immediate = true; @@ -47105,7 +46752,7 @@ index fa8afa7..7375300 100644 if (IS_BROXTON(dev)) dev_priv->display.hpd_irq_setup = bxt_hpd_irq_setup; else if (HAS_PCH_SPT(dev)) -@@ -4542,35 +4543,36 @@ void intel_irq_init(struct drm_i915_private *dev_priv) +@@ -4621,35 +4622,36 @@ void intel_irq_init(struct drm_i915_private *dev_priv) else dev_priv->display.hpd_irq_setup = ilk_hpd_irq_setup; } else if (HAS_PCH_SPLIT(dev)) { @@ -47163,7 +46810,7 @@ index fa8afa7..7375300 100644 /** diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 207391e..fda2cb4 100644 +index 7741efb..483be63 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -15120,13 +15120,13 @@ struct intel_quirk { @@ -47224,10 +46871,10 @@ index 207391e..fda2cb4 100644 } } diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c -index 286f539..f900163 100644 +index 05229b9..de0cefc 100644 --- a/drivers/gpu/drm/imx/imx-drm-core.c +++ b/drivers/gpu/drm/imx/imx-drm-core.c -@@ -349,7 +349,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc, +@@ -335,7 +335,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc, if (imxdrm->pipes >= MAX_CRTC) return -EINVAL; @@ -47361,10 +47008,10 @@ index 792f924..aeb1334 100644 -int mga_max_ioctl = ARRAY_SIZE(mga_ioctls); +const int mga_max_ioctl = ARRAY_SIZE(mga_ioctls); diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c -index dc13c48..7d8d1cd 100644 +index 14e64e0..620b163 100644 --- a/drivers/gpu/drm/mgag200/mgag200_mode.c +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c -@@ -1586,7 +1586,7 @@ static uint32_t mga_vga_calculate_mode_bandwidth(struct drm_display_mode *mode, +@@ -1565,7 +1565,7 @@ static uint32_t mga_vga_calculate_mode_bandwidth(struct drm_display_mode *mode, #define MODE_BANDWIDTH MODE_BAD @@ -47373,8 +47020,28 @@ index dc13c48..7d8d1cd 100644 struct drm_display_mode *mode) { struct drm_device *dev = connector->dev; +diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c +index 484b4d1..54685f2 100644 +--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c ++++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c +@@ -747,9 +747,12 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev) + dev->mode_config.max_width = config->hw->lm.max_width; + dev->mode_config.max_height = config->hw->lm.max_height; + +- dev->driver->get_vblank_timestamp = mdp5_get_vblank_timestamp; +- dev->driver->get_scanout_position = mdp5_get_scanoutpos; +- dev->driver->get_vblank_counter = mdp5_get_vblank_counter; ++ pax_open_kernel(); ++ const_cast(dev->driver->get_vblank_timestamp) = mdp5_get_vblank_timestamp; ++ const_cast(dev->driver->get_scanout_position) = mdp5_get_scanoutpos; ++ const_cast(dev->driver->get_vblank_counter) = mdp5_get_vblank_counter; ++ pax_close_kernel(); ++ + dev->max_vblank_count = 0xffffffff; + dev->vblank_disable_immediate = true; + diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c -index d5e6938..3c38707 100644 +index cdf5227..6b332f1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c @@ -193,7 +193,7 @@ static int nouveau_dsm_power_state(enum vga_switcheroo_client_id id, @@ -47400,10 +47067,10 @@ index 4dca65a..3486961 100644 #define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry }) diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c -index fcebfae..2a7341d 100644 +index e81aefe..dd2a354 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c -@@ -843,7 +843,7 @@ get_tmds_link_bandwidth(struct drm_connector *connector, bool hdmi) +@@ -862,7 +862,7 @@ get_tmds_link_bandwidth(struct drm_connector *connector, bool hdmi) return 112000; } @@ -47413,10 +47080,10 @@ index fcebfae..2a7341d 100644 struct drm_display_mode *mode) { diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c -index 2f2f252e..305b42e 100644 +index d06877d..3404100 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c -@@ -80,9 +80,8 @@ MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1 +@@ -82,9 +82,8 @@ MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1 int nouveau_runtime_pm = -1; module_param_named(runpm, nouveau_runtime_pm, int, 0400); @@ -47427,7 +47094,7 @@ index 2f2f252e..305b42e 100644 static u64 nouveau_pci_name(struct pci_dev *pdev) -@@ -919,7 +918,7 @@ nouveau_driver_fops = { +@@ -931,7 +930,7 @@ nouveau_driver_fops = { }; static struct drm_driver @@ -47436,7 +47103,7 @@ index 2f2f252e..305b42e 100644 .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_RENDER | DRIVER_KMS_LEGACY_CONTEXT, -@@ -931,6 +930,8 @@ driver_stub = { +@@ -943,6 +942,8 @@ driver_stub = { .postclose = nouveau_drm_postclose, .lastclose = nouveau_vga_lastclose, @@ -47445,7 +47112,7 @@ index 2f2f252e..305b42e 100644 #if defined(CONFIG_DEBUG_FS) .debugfs_init = nouveau_drm_debugfs_init, .debugfs_cleanup = nouveau_drm_debugfs_cleanup, -@@ -1063,10 +1064,10 @@ err_free: +@@ -1075,10 +1076,10 @@ err_free: static int __init nouveau_drm_init(void) { @@ -47619,24 +47286,26 @@ index 9b91da0..b3fa90d 100644 .read = pcirom_read, .rw = true, }; -diff --git a/drivers/gpu/drm/omapdrm/Makefile b/drivers/gpu/drm/omapdrm/Makefile -index fe4c222..48b7b75 100644 ---- a/drivers/gpu/drm/omapdrm/Makefile -+++ b/drivers/gpu/drm/omapdrm/Makefile -@@ -6,7 +6,7 @@ - obj-y += dss/ - obj-y += displays/ - --ccflags-y := -Iinclude/drm -Werror -+ccflags-y := -Iinclude/drm - omapdrm-y := omap_drv.o \ - omap_irq.o \ - omap_debugfs.o \ +diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h +index f2b09de..ccb2b83 100644 +--- a/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h ++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h +@@ -218,8 +218,8 @@ struct gm200_secboot_func { + + int gm200_secboot_init(struct nvkm_secboot *); + void *gm200_secboot_dtor(struct nvkm_secboot *); +-int gm200_secboot_reset(struct nvkm_secboot *, u32); +-int gm200_secboot_start(struct nvkm_secboot *, u32); ++int gm200_secboot_reset(struct nvkm_secboot *, enum nvkm_secboot_falcon); ++int gm200_secboot_start(struct nvkm_secboot *, enum nvkm_secboot_falcon); + + int gm20x_secboot_prepare_blobs(struct gm200_secboot *); + diff --git a/drivers/gpu/drm/omapdrm/dss/display.c b/drivers/gpu/drm/omapdrm/dss/display.c -index ef5b902..2ae011b 100644 +index 9f3dd09..8ccc40d 100644 --- a/drivers/gpu/drm/omapdrm/dss/display.c +++ b/drivers/gpu/drm/omapdrm/dss/display.c -@@ -161,12 +161,14 @@ int omapdss_register_display(struct omap_dss_device *dssdev) +@@ -112,12 +112,14 @@ int omapdss_register_display(struct omap_dss_device *dssdev) if (dssdev->name == NULL) dssdev->name = dssdev->alias; @@ -47712,10 +47381,10 @@ index 6911b8c..89d6867 100644 return 0; } diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c -index 47e5264..3393741 100644 +index 030409a..de26914 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c -@@ -836,7 +836,7 @@ static int qxl_conn_get_modes(struct drm_connector *connector) +@@ -828,7 +828,7 @@ static int qxl_conn_get_modes(struct drm_connector *connector) return ret; } @@ -48077,10 +47746,10 @@ index b928c17..e5d9400 100644 if (regcomp (&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) { diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c -index c4b4f29..90464ff 100644 +index 95f4fea..acecfdf 100644 --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c -@@ -491,7 +491,7 @@ static int radeon_atpx_init(void) +@@ -494,7 +494,7 @@ static int radeon_atpx_init(void) * look up whether we are the integrated or discrete GPU (all asics). * Returns the client id. */ @@ -48090,10 +47759,10 @@ index c4b4f29..90464ff 100644 if (radeon_atpx_priv.dhandle == ACPI_HANDLE(&pdev->dev)) return VGA_SWITCHEROO_IGD; diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c -index 9cfc1c3..524ccaa 100644 +index 81a63d7..5c7f8e7 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c -@@ -851,7 +851,7 @@ static int radeon_lvds_get_modes(struct drm_connector *connector) +@@ -857,7 +857,7 @@ static int radeon_lvds_get_modes(struct drm_connector *connector) return ret; } @@ -48102,7 +47771,7 @@ index 9cfc1c3..524ccaa 100644 struct drm_display_mode *mode) { struct drm_encoder *encoder = radeon_best_single_encoder(connector); -@@ -994,7 +994,7 @@ static int radeon_vga_get_modes(struct drm_connector *connector) +@@ -1000,7 +1000,7 @@ static int radeon_vga_get_modes(struct drm_connector *connector) return ret; } @@ -48111,7 +47780,7 @@ index 9cfc1c3..524ccaa 100644 struct drm_display_mode *mode) { struct drm_device *dev = connector->dev; -@@ -1133,7 +1133,7 @@ static int radeon_tv_get_modes(struct drm_connector *connector) +@@ -1139,7 +1139,7 @@ static int radeon_tv_get_modes(struct drm_connector *connector) return 1; } @@ -48120,7 +47789,7 @@ index 9cfc1c3..524ccaa 100644 struct drm_display_mode *mode) { if ((mode->hdisplay > 1024) || (mode->vdisplay > 768)) -@@ -1464,7 +1464,7 @@ static void radeon_dvi_force(struct drm_connector *connector) +@@ -1470,7 +1470,7 @@ static void radeon_dvi_force(struct drm_connector *connector) radeon_connector->use_digital = true; } @@ -48129,7 +47798,7 @@ index 9cfc1c3..524ccaa 100644 struct drm_display_mode *mode) { struct drm_device *dev = connector->dev; -@@ -1761,7 +1761,7 @@ out: +@@ -1767,7 +1767,7 @@ out: return ret; } @@ -48139,7 +47808,7 @@ index 9cfc1c3..524ccaa 100644 { struct drm_device *dev = connector->dev; diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c -index 4197ca1..f07709e 100644 +index d0826fb..b47e793 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -1253,7 +1253,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev) @@ -48152,10 +47821,10 @@ index 4197ca1..f07709e 100644 static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = { diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c -index e266ffc..e510e3f 100644 +index ccd4ad4..a1ffcff 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c -@@ -130,7 +130,7 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int crtc, +@@ -132,7 +132,7 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int crtc, const struct drm_display_mode *mode); extern bool radeon_is_px(struct drm_device *dev); extern const struct drm_ioctl_desc radeon_ioctls_kms[]; @@ -48164,7 +47833,7 @@ index e266ffc..e510e3f 100644 int radeon_mmap(struct file *filp, struct vm_area_struct *vma); int radeon_mode_dumb_mmap(struct drm_file *filp, struct drm_device *dev, -@@ -484,7 +484,7 @@ static struct drm_driver kms_driver = { +@@ -503,7 +503,7 @@ static struct drm_driver kms_driver = { .driver_features = DRIVER_USE_AGP | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM | @@ -48173,7 +47842,7 @@ index e266ffc..e510e3f 100644 .load = radeon_driver_load_kms, .open = radeon_driver_open_kms, .preclose = radeon_driver_preclose_kms, -@@ -561,8 +561,11 @@ static int __init radeon_init(void) +@@ -580,8 +580,11 @@ static int __init radeon_init(void) DRM_INFO("radeon kernel modesetting enabled.\n"); driver = &kms_driver; pdriver = &radeon_kms_pci_driver; @@ -48267,10 +47936,10 @@ index 414953c..1b26674 100644 -int radeon_max_kms_ioctl = ARRAY_SIZE(radeon_ioctls_kms); +const int radeon_max_kms_ioctl = ARRAY_SIZE(radeon_ioctls_kms); diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c -index f342aad..f7b725f 100644 +index 90f7394..ccdec03 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c -@@ -963,7 +963,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size) +@@ -968,7 +968,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size) man->size = size >> PAGE_SHIFT; } @@ -48279,7 +47948,7 @@ index f342aad..f7b725f 100644 static const struct vm_operations_struct *ttm_vm_ops = NULL; static int radeon_ttm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) -@@ -1004,8 +1004,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma) +@@ -1009,8 +1009,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma) } if (unlikely(ttm_vm_ops == NULL)) { ttm_vm_ops = vma->vm_ops; @@ -48367,11 +48036,236 @@ index 93ad8a5..48f0a57 100644 -int sis_max_ioctl = ARRAY_SIZE(sis_ioctls); +const int sis_max_ioctl = ARRAY_SIZE(sis_ioctls); +diff --git a/drivers/gpu/drm/sti/sti_cursor.c b/drivers/gpu/drm/sti/sti_cursor.c +index 3abb400..4fd8a65 100644 +--- a/drivers/gpu/drm/sti/sti_cursor.c ++++ b/drivers/gpu/drm/sti/sti_cursor.c +@@ -131,7 +131,7 @@ static int cursor_dbg_show(struct seq_file *s, void *data) + return 0; + } + +-static struct drm_info_list cursor_debugfs_files[] = { ++static struct drm_info_list cursor_debugfs_files[] __read_only = { + { "cursor", cursor_dbg_show, 0, NULL }, + }; + +@@ -140,8 +140,10 @@ static int cursor_debugfs_init(struct sti_cursor *cursor, + { + unsigned int i; + ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(cursor_debugfs_files); i++) +- cursor_debugfs_files[i].data = cursor; ++ const_cast(cursor_debugfs_files[i].data) = cursor; ++ pax_close_kernel(); + + return drm_debugfs_create_files(cursor_debugfs_files, + ARRAY_SIZE(cursor_debugfs_files), +diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c +index 25f7663..7ea4bf9 100644 +--- a/drivers/gpu/drm/sti/sti_dvo.c ++++ b/drivers/gpu/drm/sti/sti_dvo.c +@@ -197,7 +197,7 @@ static int dvo_dbg_show(struct seq_file *s, void *data) + return 0; + } + +-static struct drm_info_list dvo_debugfs_files[] = { ++static drm_info_list_no_const dvo_debugfs_files[] __read_only = { + { "dvo", dvo_dbg_show, 0, NULL }, + }; + +@@ -212,8 +212,10 @@ static int dvo_debugfs_init(struct sti_dvo *dvo, struct drm_minor *minor) + { + unsigned int i; + ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(dvo_debugfs_files); i++) +- dvo_debugfs_files[i].data = dvo; ++ const_cast(dvo_debugfs_files[i].data) = dvo; ++ pax_close_kernel(); + + return drm_debugfs_create_files(dvo_debugfs_files, + ARRAY_SIZE(dvo_debugfs_files), +diff --git a/drivers/gpu/drm/sti/sti_gdp.c b/drivers/gpu/drm/sti/sti_gdp.c +index ff3d3e7..be8c837 100644 +--- a/drivers/gpu/drm/sti/sti_gdp.c ++++ b/drivers/gpu/drm/sti/sti_gdp.c +@@ -320,7 +320,7 @@ static struct drm_info_list gdp3_debugfs_files[] = { + static int gdp_debugfs_init(struct sti_gdp *gdp, struct drm_minor *minor) + { + unsigned int i; +- struct drm_info_list *gdp_debugfs_files; ++ drm_info_list_no_const *gdp_debugfs_files; + int nb_files; + + switch (gdp->plane.desc) { +@@ -344,8 +344,10 @@ static int gdp_debugfs_init(struct sti_gdp *gdp, struct drm_minor *minor) + return -EINVAL; + } + ++ pax_open_kernel(); + for (i = 0; i < nb_files; i++) +- gdp_debugfs_files[i].data = gdp; ++ const_cast(gdp_debugfs_files[i].data) = gdp; ++ pax_close_kernel(); + + return drm_debugfs_create_files(gdp_debugfs_files, + nb_files, +diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c +index ec0d017..0fe03fd 100644 +--- a/drivers/gpu/drm/sti/sti_hda.c ++++ b/drivers/gpu/drm/sti/sti_hda.c +@@ -400,7 +400,7 @@ static int hda_dbg_show(struct seq_file *s, void *data) + return 0; + } + +-static struct drm_info_list hda_debugfs_files[] = { ++static drm_info_list_no_const hda_debugfs_files[] __read_only = { + { "hda", hda_dbg_show, 0, NULL }, + }; + +@@ -415,8 +415,10 @@ static int hda_debugfs_init(struct sti_hda *hda, struct drm_minor *minor) + { + unsigned int i; + ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(hda_debugfs_files); i++) +- hda_debugfs_files[i].data = hda; ++ const_cast(hda_debugfs_files[i].data) = hda; ++ pax_close_kernel(); + + return drm_debugfs_create_files(hda_debugfs_files, + ARRAY_SIZE(hda_debugfs_files), +diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c +index 6ef0715..b5a9e51 100644 +--- a/drivers/gpu/drm/sti/sti_hdmi.c ++++ b/drivers/gpu/drm/sti/sti_hdmi.c +@@ -694,7 +694,7 @@ static int hdmi_dbg_show(struct seq_file *s, void *data) + return 0; + } + +-static struct drm_info_list hdmi_debugfs_files[] = { ++static drm_info_list_no_const hdmi_debugfs_files[] __read_only = { + { "hdmi", hdmi_dbg_show, 0, NULL }, + }; + +@@ -709,8 +709,10 @@ static int hdmi_debugfs_init(struct sti_hdmi *hdmi, struct drm_minor *minor) + { + unsigned int i; + ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(hdmi_debugfs_files); i++) +- hdmi_debugfs_files[i].data = hdmi; ++ const_cast(hdmi_debugfs_files[i].data) = hdmi; ++ pax_close_kernel(); + + return drm_debugfs_create_files(hdmi_debugfs_files, + ARRAY_SIZE(hdmi_debugfs_files), +diff --git a/drivers/gpu/drm/sti/sti_hqvdp.c b/drivers/gpu/drm/sti/sti_hqvdp.c +index e05b0dc..a40a642 100644 +--- a/drivers/gpu/drm/sti/sti_hqvdp.c ++++ b/drivers/gpu/drm/sti/sti_hqvdp.c +@@ -633,7 +633,7 @@ static int hqvdp_dbg_show(struct seq_file *s, void *data) + return 0; + } + +-static struct drm_info_list hqvdp_debugfs_files[] = { ++static drm_info_list_no_const hqvdp_debugfs_files[] __read_only = { + { "hqvdp", hqvdp_dbg_show, 0, NULL }, + }; + +@@ -641,8 +641,10 @@ static int hqvdp_debugfs_init(struct sti_hqvdp *hqvdp, struct drm_minor *minor) + { + unsigned int i; + ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(hqvdp_debugfs_files); i++) +- hqvdp_debugfs_files[i].data = hqvdp; ++ const_cast(hqvdp_debugfs_files[i].data) = hqvdp; ++ pax_close_kernel(); + + return drm_debugfs_create_files(hqvdp_debugfs_files, + ARRAY_SIZE(hqvdp_debugfs_files), +diff --git a/drivers/gpu/drm/sti/sti_mixer.c b/drivers/gpu/drm/sti/sti_mixer.c +index e7425c3..ce9dada 100644 +--- a/drivers/gpu/drm/sti/sti_mixer.c ++++ b/drivers/gpu/drm/sti/sti_mixer.c +@@ -190,7 +190,7 @@ static struct drm_info_list mixer1_debugfs_files[] = { + static int mixer_debugfs_init(struct sti_mixer *mixer, struct drm_minor *minor) + { + unsigned int i; +- struct drm_info_list *mixer_debugfs_files; ++ drm_info_list_no_const *mixer_debugfs_files; + int nb_files; + + switch (mixer->id) { +@@ -206,8 +206,10 @@ static int mixer_debugfs_init(struct sti_mixer *mixer, struct drm_minor *minor) + return -EINVAL; + } + ++ pax_open_kernel(); + for (i = 0; i < nb_files; i++) +- mixer_debugfs_files[i].data = mixer; ++ const_cast(mixer_debugfs_files[i].data) = mixer; ++ pax_close_kernel(); + + return drm_debugfs_create_files(mixer_debugfs_files, + nb_files, +diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c +index 2c99016..62597fd 100644 +--- a/drivers/gpu/drm/sti/sti_tvout.c ++++ b/drivers/gpu/drm/sti/sti_tvout.c +@@ -590,7 +590,7 @@ static int tvout_dbg_show(struct seq_file *s, void *data) + return 0; + } + +-static struct drm_info_list tvout_debugfs_files[] = { ++static drm_info_list_no_const tvout_debugfs_files[] __read_only = { + { "tvout", tvout_dbg_show, 0, NULL }, + }; + +@@ -605,8 +605,10 @@ static int tvout_debugfs_init(struct sti_tvout *tvout, struct drm_minor *minor) + { + unsigned int i; + ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(tvout_debugfs_files); i++) +- tvout_debugfs_files[i].data = tvout; ++ const_cast(tvout_debugfs_files[i].data) = tvout; ++ pax_close_kernel(); + + return drm_debugfs_create_files(tvout_debugfs_files, + ARRAY_SIZE(tvout_debugfs_files), +diff --git a/drivers/gpu/drm/sti/sti_vid.c b/drivers/gpu/drm/sti/sti_vid.c +index 5a2c5dc..315979b0 100644 +--- a/drivers/gpu/drm/sti/sti_vid.c ++++ b/drivers/gpu/drm/sti/sti_vid.c +@@ -125,7 +125,7 @@ static int vid_dbg_show(struct seq_file *s, void *arg) + return 0; + } + +-static struct drm_info_list vid_debugfs_files[] = { ++static drm_info_list_no_const vid_debugfs_files[] __read_only = { + { "vid", vid_dbg_show, 0, NULL }, + }; + +@@ -133,8 +133,10 @@ static int vid_debugfs_init(struct sti_vid *vid, struct drm_minor *minor) + { + unsigned int i; + ++ pax_open_kernel(); + for (i = 0; i < ARRAY_SIZE(vid_debugfs_files); i++) +- vid_debugfs_files[i].data = vid; ++ const_cast(vid_debugfs_files[i].data) = vid; ++ pax_close_kernel(); + + return drm_debugfs_create_files(vid_debugfs_files, + ARRAY_SIZE(vid_debugfs_files), diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c -index dde6f20..a74f8b9 100644 +index fb2b4b0..46f430e 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c -@@ -1657,7 +1657,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor) +@@ -1640,7 +1640,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor) } for (i = 0; i < ARRAY_SIZE(debugfs_files); i++) @@ -48439,6 +48333,19 @@ index deeca48..54e1b6c 100644 obj-$(CONFIG_DRM_TILCDC_SLAVE_COMPAT) += tilcdc_slave_compat.o \ tilcdc_slave_compat.dtb.o +diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c +index 03acb4f..84edb3a 100644 +--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c ++++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c +@@ -56,7 +56,7 @@ static int tilcdc_add_external_encoder(struct drm_device *dev, int *bpp, + struct drm_connector *connector) + { + struct tilcdc_drm_private *priv = dev->dev_private; +- struct drm_connector_helper_funcs *connector_funcs; ++ drm_connector_helper_funcs_no_const *connector_funcs; + + priv->connectors[priv->num_connectors] = connector; + priv->encoders[priv->num_encoders++] = connector->encoder; diff --git a/drivers/gpu/drm/ttm/ttm_bo_manager.c b/drivers/gpu/drm/ttm/ttm_bo_manager.c index aa0bd054..aea6a01 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_manager.c @@ -48650,7 +48557,7 @@ index 4709b54..beb015d 100644 { struct udl_device *udl = connector->dev->dev_private; diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c -index 18a2acb..0ca5376 100644 +index fd1eb9d..8ef346a 100644 --- a/drivers/gpu/drm/udl/udl_fb.c +++ b/drivers/gpu/drm/udl/udl_fb.c @@ -366,7 +366,6 @@ static int udl_fb_release(struct fb_info *info, int user) @@ -48662,10 +48569,10 @@ index 18a2acb..0ca5376 100644 pr_warn("released /dev/fb%d user=%d count=%d\n", diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c -index f1655ff..e40254b 100644 +index b7d2ff0..d2e1f7b 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c -@@ -142,6 +142,11 @@ static int compare_dev(struct device *dev, void *data) +@@ -132,6 +132,11 @@ static int compare_dev(struct device *dev, void *data) return dev == data; } @@ -48677,7 +48584,7 @@ index f1655ff..e40254b 100644 static void vc4_match_add_drivers(struct device *dev, struct component_match **match, struct platform_driver *const *drivers, -@@ -153,8 +158,7 @@ static void vc4_match_add_drivers(struct device *dev, +@@ -143,8 +148,7 @@ static void vc4_match_add_drivers(struct device *dev, struct device_driver *drv = &drivers[i]->driver; struct device *p = NULL, *d; @@ -48819,10 +48726,10 @@ index ea8172c..6ceff63 100644 case VIA_IRQ_ABSOLUTE: break; diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c -index a165f03..d89bd6a 100644 +index 5fd1fd0..0766d9b 100644 --- a/drivers/gpu/drm/virtio/virtgpu_display.c +++ b/drivers/gpu/drm/virtio/virtgpu_display.c -@@ -330,7 +330,7 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector) +@@ -327,7 +327,7 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector) return count; } @@ -48853,10 +48760,10 @@ index 9fd924c..c64b065 100644 static int virtio_gpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h -index 469cdd5..958866a 100644 +index 6db358a..6401339 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h -@@ -434,7 +434,7 @@ struct vmw_private { +@@ -437,7 +437,7 @@ struct vmw_private { * Fencing and IRQs. */ @@ -48865,31 +48772,6 @@ index 469cdd5..958866a 100644 wait_queue_head_t fence_queue; wait_queue_head_t fifo_queue; spinlock_t waiter_lock; -diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c -index 8e689b4..6c9eb8f 100644 ---- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c -+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c -@@ -1016,6 +1016,11 @@ struct vmw_event_fence_pending { - struct drm_vmw_event_fence event; - }; - -+static void vmw_event_fence_dmabuf_destroy(struct drm_pending_event *event) -+{ -+ kfree(event); -+} -+ - static int vmw_event_fence_action_create(struct drm_file *file_priv, - struct vmw_fence_obj *fence, - uint32_t flags, -@@ -1055,7 +1060,7 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv, - - event->base.event = &event->event.base; - event->base.file_priv = file_priv; -- event->base.destroy = (void (*) (struct drm_pending_event *)) kfree; -+ event->base.destroy = vmw_event_fence_dmabuf_destroy; - - - if (flags & DRM_VMW_FE_FLAG_REQ_TIME) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c index b6a0806..9fb5479 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c @@ -48985,10 +48867,10 @@ index efd1ffd..0ae13ca 100644 marker = list_first_entry(&queue->head, struct vmw_marker, head); diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c -index 665ab9f..7006609 100644 +index cbd7c98..170a5ba 100644 --- a/drivers/gpu/vga/vga_switcheroo.c +++ b/drivers/gpu/vga/vga_switcheroo.c -@@ -911,7 +911,7 @@ static int vga_switcheroo_runtime_resume(struct device *dev) +@@ -1024,7 +1024,7 @@ static int vga_switcheroo_runtime_resume(struct device *dev) * where the power switch is separate to the device being powered down. */ int vga_switcheroo_init_domain_pm_ops(struct device *dev, @@ -48997,7 +48879,7 @@ index 665ab9f..7006609 100644 { /* copy over all the bus versions */ if (dev->bus && dev->bus->pm) { -@@ -982,7 +982,7 @@ static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev) +@@ -1095,7 +1095,7 @@ static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev) */ int vga_switcheroo_init_domain_pm_optimus_hdmi_audio(struct device *dev, @@ -49007,10 +48889,10 @@ index 665ab9f..7006609 100644 /* copy over all the bus versions */ if (dev->bus && dev->bus->pm) { diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c -index 99446ff..ab93719 100644 +index 4f9c5c6..50d91fb 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c -@@ -2584,7 +2584,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); +@@ -2635,7 +2635,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); int hid_add_device(struct hid_device *hdev) { @@ -49019,7 +48901,7 @@ index 99446ff..ab93719 100644 int ret; if (WARN_ON(hdev->status & HID_STAT_ADDED)) -@@ -2628,7 +2628,7 @@ int hid_add_device(struct hid_device *hdev) +@@ -2679,7 +2679,7 @@ int hid_add_device(struct hid_device *hdev) /* XXX hack, any other cleaner solution after the driver core * is converted to allow more than 20 bytes as the device name? */ dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus, @@ -49091,10 +48973,10 @@ index 2f1ddca..700145b 100644 case HIDIOCGUSAGE: uref->value = field->value[uref->usage_index]; diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c -index 1161d68..7a42e2c 100644 +index 56dd261..493d7e0 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c -@@ -383,7 +383,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, +@@ -398,7 +398,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, int ret = 0; next_gpadl_handle = @@ -49103,7 +48985,7 @@ index 1161d68..7a42e2c 100644 ret = create_gpadl_header(kbuffer, size, &msginfo, &msgcount); if (ret) -@@ -728,9 +728,7 @@ int vmbus_sendpacket_pagebuffer_ctl(struct vmbus_channel *channel, +@@ -749,9 +749,7 @@ int vmbus_sendpacket_pagebuffer_ctl(struct vmbus_channel *channel, * Adjust the size down since vmbus_channel_packet_page_buffer is the * largest size we support */ @@ -49115,7 +48997,7 @@ index 1161d68..7a42e2c 100644 packetlen_aligned = ALIGN(packetlen, sizeof(u64)); diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c -index 11bca51..cc7da6f 100644 +index a1c086b..b45a999 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -183,6 +183,7 @@ static struct clocksource hyperv_cs_tsc = { @@ -49134,7 +49016,7 @@ index 11bca51..cc7da6f 100644 memset(hv_context.synic_event_page, 0, sizeof(void *) * NR_CPUS); memset(hv_context.synic_message_page, 0, -@@ -218,14 +218,9 @@ int hv_init(void) +@@ -220,14 +220,9 @@ int hv_init(void) /* See if the hypercall page is already set */ rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); @@ -49150,7 +49032,7 @@ index 11bca51..cc7da6f 100644 wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); /* Confirm that hypercall page did get setup. */ -@@ -235,7 +230,7 @@ int hv_init(void) +@@ -237,7 +232,7 @@ int hv_init(void) if (!hypercall_msr.enable) goto cleanup; @@ -49159,7 +49041,7 @@ index 11bca51..cc7da6f 100644 #ifdef CONFIG_X86_64 if (ms_hyperv.features & HV_X64_MSR_REFERENCE_TSC_AVAILABLE) { -@@ -259,13 +254,9 @@ int hv_init(void) +@@ -261,13 +256,9 @@ int hv_init(void) return 0; cleanup: @@ -49176,7 +49058,7 @@ index 11bca51..cc7da6f 100644 } return -ENOTSUPP; -@@ -286,7 +277,6 @@ void hv_cleanup(void) +@@ -288,7 +279,6 @@ void hv_cleanup(void) if (hv_context.hypercall_page) { hypercall_msr.as_uint64 = 0; wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); @@ -49270,10 +49152,10 @@ index b853b4b..3647b37 100644 cap_msg.caps.cap_bits.balloon = 1; cap_msg.caps.cap_bits.hot_add = 1; diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h -index 4ebc796..776f2b1 100644 +index 12321b9..89d89f2 100644 --- a/drivers/hv/hyperv_vmbus.h +++ b/drivers/hv/hyperv_vmbus.h -@@ -568,7 +568,7 @@ enum vmbus_connect_state { +@@ -561,7 +561,7 @@ enum vmbus_connect_state { struct vmbus_connection { enum vmbus_connect_state conn_state; @@ -49412,7 +49294,7 @@ index 1f64378..2b6e615 100644 /* Set up read-only sensors */ diff --git a/drivers/hwmon/iio_hwmon.c b/drivers/hwmon/iio_hwmon.c -index 17ae2eb..21b71dd 100644 +index b550ba5..684d8e3 100644 --- a/drivers/hwmon/iio_hwmon.c +++ b/drivers/hwmon/iio_hwmon.c @@ -61,7 +61,7 @@ static int iio_hwmon_probe(struct platform_device *pdev) @@ -49615,7 +49497,7 @@ index 88eda09..cf40434 100644 /* Wrapper access functions for multiplexed SMBus */ static DEFINE_MUTEX(nforce2_lock); diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c -index 2413ec9..9cb2203 100644 +index 0b1108d..8f253a0 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c @@ -272,7 +272,7 @@ static noinline int i2cdev_ioctl_rdwr(struct i2c_client *client, @@ -49676,10 +49558,10 @@ index d127ace..6ee866f 100644 int i, j = 1; diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c -index 146eed70b..7312f08 100644 +index c6935de..1ecb47f 100644 --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c -@@ -1060,8 +1060,10 @@ static void sklh_idle_state_table_update(void) +@@ -1114,8 +1114,10 @@ static void sklh_idle_state_table_update(void) return; } @@ -49693,10 +49575,10 @@ index 146eed70b..7312f08 100644 /* * intel_idle_state_table_update() diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c -index af7cc1e..9d2d06c 100644 +index 70cb7eb..f2ee8de 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c -@@ -603,7 +603,7 @@ static ssize_t iio_write_channel_info(struct device *dev, +@@ -604,7 +604,7 @@ static ssize_t iio_write_channel_info(struct device *dev, } static @@ -49706,7 +49588,7 @@ index af7cc1e..9d2d06c 100644 struct iio_chan_spec const *chan, ssize_t (*readfunc)(struct device *dev, diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c -index f2a7f72..f84060c 100644 +index 0e931a9..f7cba63 100644 --- a/drivers/iio/magnetometer/ak8975.c +++ b/drivers/iio/magnetometer/ak8975.c @@ -776,7 +776,7 @@ static int ak8975_probe(struct i2c_client *client, @@ -49912,7 +49794,7 @@ index 1d92e09..215593e 100644 static const struct sysfs_ops cm_counter_ops = { diff --git a/drivers/infiniband/core/fmr_pool.c b/drivers/infiniband/core/fmr_pool.c -index 6ac3683..5723799e 100644 +index cdbb1f1..7ed4277 100644 --- a/drivers/infiniband/core/fmr_pool.c +++ b/drivers/infiniband/core/fmr_pool.c @@ -98,8 +98,8 @@ struct ib_fmr_pool { @@ -49948,7 +49830,7 @@ index 6ac3683..5723799e 100644 !kthread_should_stop()) schedule(); __set_current_state(TASK_RUNNING); -@@ -266,8 +266,8 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd, +@@ -262,8 +262,8 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd, pool->dirty_watermark = params->dirty_watermark; pool->dirty_len = 0; spin_lock_init(&pool->pool_lock); @@ -49959,7 +49841,7 @@ index 6ac3683..5723799e 100644 init_waitqueue_head(&pool->force_wait); pool->thread = kthread_run(ib_fmr_cleanup_thread, -@@ -395,11 +395,11 @@ int ib_flush_fmr_pool(struct ib_fmr_pool *pool) +@@ -388,11 +388,11 @@ int ib_flush_fmr_pool(struct ib_fmr_pool *pool) } spin_unlock_irq(&pool->pool_lock); @@ -49973,7 +49855,7 @@ index 6ac3683..5723799e 100644 return -EINTR; return 0; -@@ -509,7 +509,7 @@ int ib_fmr_pool_unmap(struct ib_pool_fmr *fmr) +@@ -502,7 +502,7 @@ int ib_fmr_pool_unmap(struct ib_pool_fmr *fmr) } else { list_add_tail(&fmr->list, &pool->dirty_list); if (++pool->dirty_len >= pool->dirty_watermark) { @@ -50001,7 +49883,7 @@ index d47df93..93e4cfd 100644 } } diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c -index 564adf3..49ca28c 100644 +index 7713ef0..0bb2981 100644 --- a/drivers/infiniband/core/ucm.c +++ b/drivers/infiniband/core/ucm.c @@ -920,14 +920,14 @@ static ssize_t ib_ucm_send_rej(struct ib_ucm_file *file, @@ -50022,7 +49904,7 @@ index 564adf3..49ca28c 100644 static ssize_t ib_ucm_send_mra(struct ib_ucm_file *file, diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c -index 6c6fbff..6eb969d 100644 +index 6fdc7ecd..ae148f7 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -949,6 +949,9 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverbs_file *file, @@ -50036,10 +49918,10 @@ index 6c6fbff..6eb969d 100644 (unsigned long) cmd.response + sizeof resp, in_len - sizeof cmd, out_len - sizeof resp); diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c -index 8024ea4..e671455 100644 +index ae2e8b2..d5dcc7d 100644 --- a/drivers/infiniband/hw/cxgb4/device.c +++ b/drivers/infiniband/hw/cxgb4/device.c -@@ -122,7 +122,7 @@ void c4iw_log_wr_stats(struct t4_wq *wq, struct t4_cqe *cqe) +@@ -111,7 +111,7 @@ void c4iw_log_wr_stats(struct t4_wq *wq, struct t4_cqe *cqe) if (!wq->rdev->wr_log) return; @@ -50048,7 +49930,7 @@ index 8024ea4..e671455 100644 (wq->rdev->wr_log_size - 1); le.poll_sge_ts = cxgb4_read_sge_timestamp(wq->rdev->lldi.ports[0]); getnstimeofday(&le.poll_host_ts); -@@ -154,7 +154,7 @@ static int wr_log_show(struct seq_file *seq, void *v) +@@ -143,7 +143,7 @@ static int wr_log_show(struct seq_file *seq, void *v) #define ts2ns(ts) div64_u64((ts) * dev->rdev.lldi.cclk_ps, 1000) @@ -50057,7 +49939,7 @@ index 8024ea4..e671455 100644 (dev->rdev.wr_log_size - 1); end = idx - 1; if (end < 0) -@@ -852,7 +852,7 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev) +@@ -840,7 +840,7 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev) sizeof(*rdev->wr_log), GFP_KERNEL); if (rdev->wr_log) { rdev->wr_log_size = 1 << c4iw_wr_log_size_order; @@ -50067,7 +49949,7 @@ index 8024ea4..e671455 100644 pr_err(MOD "error allocating wr_log. Logging disabled\n"); } diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h -index fb2de75..67d931a 100644 +index df43f87..e08169c 100644 --- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h +++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h @@ -180,7 +180,7 @@ struct c4iw_rdev { @@ -50080,10 +49962,10 @@ index fb2de75..67d931a 100644 int wr_log_size; }; diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c -index 7849890..cfabd18 100644 +index 008be07..a73412de 100644 --- a/drivers/infiniband/hw/cxgb4/mem.c +++ b/drivers/infiniband/hw/cxgb4/mem.c -@@ -256,7 +256,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry, +@@ -257,7 +257,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry, int err; struct fw_ri_tpte tpt; u32 stag_idx; @@ -50092,7 +49974,7 @@ index 7849890..cfabd18 100644 if (c4iw_fatal_error(rdev)) return -EIO; -@@ -277,7 +277,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry, +@@ -278,7 +278,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry, if (rdev->stats.stag.cur > rdev->stats.stag.max) rdev->stats.stag.max = rdev->stats.stag.cur; mutex_unlock(&rdev->stats.lock); @@ -50101,6 +49983,272 @@ index 7849890..cfabd18 100644 } PDBG("%s stag_state 0x%0x type 0x%0x pdid 0x%0x, stag_idx 0x%x\n", __func__, stag_state, type, pdid, stag_idx); +diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c +index f05802b..d0827d4 100644 +--- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c ++++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c +@@ -4516,118 +4516,116 @@ static void i40iw_hw_stat_refresh_all(struct i40iw_dev_pestat *devstat) + } + + static struct i40iw_cqp_ops iw_cqp_ops = { +- i40iw_sc_cqp_init, +- i40iw_sc_cqp_create, +- i40iw_sc_cqp_post_sq, +- i40iw_sc_cqp_get_next_send_wqe, +- i40iw_sc_cqp_destroy, +- i40iw_sc_poll_for_cqp_op_done ++ .cqp_init = i40iw_sc_cqp_init, ++ .cqp_create = i40iw_sc_cqp_create, ++ .cqp_post_sq = i40iw_sc_cqp_post_sq, ++ .cqp_get_next_send_wqe = i40iw_sc_cqp_get_next_send_wqe, ++ .cqp_destroy = i40iw_sc_cqp_destroy, ++ .poll_for_cqp_op_done = i40iw_sc_poll_for_cqp_op_done + }; + + static struct i40iw_ccq_ops iw_ccq_ops = { +- i40iw_sc_ccq_init, +- i40iw_sc_ccq_create, +- i40iw_sc_ccq_destroy, +- i40iw_sc_ccq_create_done, +- i40iw_sc_ccq_get_cqe_info, +- i40iw_sc_ccq_arm ++ .ccq_init = i40iw_sc_ccq_init, ++ .ccq_create = i40iw_sc_ccq_create, ++ .ccq_destroy = i40iw_sc_ccq_destroy, ++ .ccq_create_done = i40iw_sc_ccq_create_done, ++ .ccq_get_cqe_info = i40iw_sc_ccq_get_cqe_info, ++ .ccq_arm = i40iw_sc_ccq_arm + }; + + static struct i40iw_ceq_ops iw_ceq_ops = { +- i40iw_sc_ceq_init, +- i40iw_sc_ceq_create, +- i40iw_sc_cceq_create_done, +- i40iw_sc_cceq_destroy_done, +- i40iw_sc_cceq_create, +- i40iw_sc_ceq_destroy, +- i40iw_sc_process_ceq ++ .ceq_init = i40iw_sc_ceq_init, ++ .ceq_create = i40iw_sc_ceq_create, ++ .cceq_create_done = i40iw_sc_cceq_create_done, ++ .cceq_destroy_done = i40iw_sc_cceq_destroy_done, ++ .cceq_create = i40iw_sc_cceq_create, ++ .ceq_destroy = i40iw_sc_ceq_destroy, ++ .process_ceq = i40iw_sc_process_ceq + }; + + static struct i40iw_aeq_ops iw_aeq_ops = { +- i40iw_sc_aeq_init, +- i40iw_sc_aeq_create, +- i40iw_sc_aeq_destroy, +- i40iw_sc_get_next_aeqe, +- i40iw_sc_repost_aeq_entries, +- i40iw_sc_aeq_create_done, +- i40iw_sc_aeq_destroy_done ++ .aeq_init = i40iw_sc_aeq_init, ++ .aeq_create = i40iw_sc_aeq_create, ++ .aeq_destroy = i40iw_sc_aeq_destroy, ++ .get_next_aeqe = i40iw_sc_get_next_aeqe, ++ .repost_aeq_entries = i40iw_sc_repost_aeq_entries, ++ .aeq_create_done = i40iw_sc_aeq_create_done, ++ .aeq_destroy_done = i40iw_sc_aeq_destroy_done + }; + + /* iwarp pd ops */ + static struct i40iw_pd_ops iw_pd_ops = { +- i40iw_sc_pd_init, ++ .pd_init = i40iw_sc_pd_init, + }; + + static struct i40iw_priv_qp_ops iw_priv_qp_ops = { +- i40iw_sc_qp_init, +- i40iw_sc_qp_create, +- i40iw_sc_qp_modify, +- i40iw_sc_qp_destroy, +- i40iw_sc_qp_flush_wqes, +- i40iw_sc_qp_upload_context, +- i40iw_sc_qp_setctx, +- i40iw_sc_send_lsmm, +- i40iw_sc_send_lsmm_nostag, +- i40iw_sc_send_rtt, +- i40iw_sc_post_wqe0, ++ .qp_init = i40iw_sc_qp_init, ++ .qp_create = i40iw_sc_qp_create, ++ .qp_modify = i40iw_sc_qp_modify, ++ .qp_destroy = i40iw_sc_qp_destroy, ++ .qp_flush_wqes = i40iw_sc_qp_flush_wqes, ++ .qp_upload_context = i40iw_sc_qp_upload_context, ++ .qp_setctx = i40iw_sc_qp_setctx, ++ .qp_send_lsmm = i40iw_sc_send_lsmm, ++ .qp_send_lsmm_nostag = i40iw_sc_send_lsmm_nostag, ++ .qp_send_rtt = i40iw_sc_send_rtt, ++ .qp_post_wqe0 = i40iw_sc_post_wqe0, + }; + + static struct i40iw_priv_cq_ops iw_priv_cq_ops = { +- i40iw_sc_cq_init, +- i40iw_sc_cq_create, +- i40iw_sc_cq_destroy, +- i40iw_sc_cq_modify, ++ .cq_init = i40iw_sc_cq_init, ++ .cq_create = i40iw_sc_cq_create, ++ .cq_destroy = i40iw_sc_cq_destroy, ++ .cq_modify = i40iw_sc_cq_modify, + }; + + static struct i40iw_mr_ops iw_mr_ops = { +- i40iw_sc_alloc_stag, +- i40iw_sc_mr_reg_non_shared, +- i40iw_sc_mr_reg_shared, +- i40iw_sc_dealloc_stag, +- i40iw_sc_query_stag, +- i40iw_sc_mw_alloc ++ .alloc_stag = i40iw_sc_alloc_stag, ++ .mr_reg_non_shared = i40iw_sc_mr_reg_non_shared, ++ .mr_reg_shared = i40iw_sc_mr_reg_shared, ++ .dealloc_stag = i40iw_sc_dealloc_stag, ++ .query_stag = i40iw_sc_query_stag, ++ .mw_alloc = i40iw_sc_mw_alloc + }; + + static struct i40iw_cqp_misc_ops iw_cqp_misc_ops = { +- i40iw_sc_manage_push_page, +- i40iw_sc_manage_hmc_pm_func_table, +- i40iw_sc_set_hmc_resource_profile, +- i40iw_sc_commit_fpm_values, +- i40iw_sc_query_fpm_values, +- i40iw_sc_static_hmc_pages_allocated, +- i40iw_sc_add_arp_cache_entry, +- i40iw_sc_del_arp_cache_entry, +- i40iw_sc_query_arp_cache_entry, +- i40iw_sc_manage_apbvt_entry, +- i40iw_sc_manage_qhash_table_entry, +- i40iw_sc_alloc_local_mac_ipaddr_entry, +- i40iw_sc_add_local_mac_ipaddr_entry, +- i40iw_sc_del_local_mac_ipaddr_entry, +- i40iw_sc_cqp_nop, +- i40iw_sc_commit_fpm_values_done, +- i40iw_sc_query_fpm_values_done, +- i40iw_sc_manage_hmc_pm_func_table_done, +- i40iw_sc_suspend_qp, +- i40iw_sc_resume_qp ++ .manage_push_page = i40iw_sc_manage_push_page, ++ .manage_hmc_pm_func_table = i40iw_sc_manage_hmc_pm_func_table, ++ .set_hmc_resource_profile = i40iw_sc_set_hmc_resource_profile, ++ .commit_fpm_values = i40iw_sc_commit_fpm_values, ++ .query_fpm_values = i40iw_sc_query_fpm_values, ++ .static_hmc_pages_allocated = i40iw_sc_static_hmc_pages_allocated, ++ .add_arp_cache_entry = i40iw_sc_add_arp_cache_entry, ++ .del_arp_cache_entry = i40iw_sc_del_arp_cache_entry, ++ .query_arp_cache_entry = i40iw_sc_query_arp_cache_entry, ++ .manage_apbvt_entry = i40iw_sc_manage_apbvt_entry, ++ .manage_qhash_table_entry = i40iw_sc_manage_qhash_table_entry, ++ .alloc_local_mac_ipaddr_table_entry = i40iw_sc_alloc_local_mac_ipaddr_entry, ++ .add_local_mac_ipaddr_entry = i40iw_sc_add_local_mac_ipaddr_entry, ++ .del_local_mac_ipaddr_entry = i40iw_sc_del_local_mac_ipaddr_entry, ++ .cqp_nop = i40iw_sc_cqp_nop, ++ .commit_fpm_values_done = i40iw_sc_commit_fpm_values_done, ++ .query_fpm_values_done = i40iw_sc_query_fpm_values_done, ++ .manage_hmc_pm_func_table_done = i40iw_sc_manage_hmc_pm_func_table_done, ++ .update_suspend_qp = i40iw_sc_suspend_qp, ++ .update_resume_qp = i40iw_sc_resume_qp + }; + + static struct i40iw_hmc_ops iw_hmc_ops = { +- i40iw_sc_init_iw_hmc, +- i40iw_sc_parse_fpm_query_buf, +- i40iw_sc_configure_iw_fpm, +- i40iw_sc_parse_fpm_commit_buf, +- i40iw_sc_create_hmc_obj, +- i40iw_sc_del_hmc_obj, +- NULL, +- NULL ++ .init_iw_hmc = i40iw_sc_init_iw_hmc, ++ .parse_fpm_query_buf = i40iw_sc_parse_fpm_query_buf, ++ .configure_iw_fpm = i40iw_sc_configure_iw_fpm, ++ .parse_fpm_commit_buf = i40iw_sc_parse_fpm_commit_buf, ++ .create_hmc_object = i40iw_sc_create_hmc_obj, ++ .del_hmc_object = i40iw_sc_del_hmc_obj + }; + + static const struct i40iw_device_pestat_ops iw_device_pestat_ops = { +- i40iw_hw_stat_init, +- i40iw_hw_stat_read_32, +- i40iw_hw_stat_read_64, +- i40iw_hw_stat_read_all, +- i40iw_hw_stat_refresh_all ++ .iw_hw_stat_init = i40iw_hw_stat_init, ++ .iw_hw_stat_read_32 = i40iw_hw_stat_read_32, ++ .iw_hw_stat_read_64 = i40iw_hw_stat_read_64, ++ .iw_hw_stat_read_all = i40iw_hw_stat_read_all, ++ .iw_hw_stat_refresh_all = i40iw_hw_stat_refresh_all + }; + + /** +diff --git a/drivers/infiniband/hw/i40iw/i40iw_uk.c b/drivers/infiniband/hw/i40iw/i40iw_uk.c +index f78c3dc..f09670e 100644 +--- a/drivers/infiniband/hw/i40iw/i40iw_uk.c ++++ b/drivers/infiniband/hw/i40iw/i40iw_uk.c +@@ -919,29 +919,29 @@ enum i40iw_status_code i40iw_get_wqe_shift(u32 wqdepth, u8 sge, u8 *shift) + } + + static struct i40iw_qp_uk_ops iw_qp_uk_ops = { +- i40iw_qp_post_wr, +- i40iw_qp_ring_push_db, +- i40iw_rdma_write, +- i40iw_rdma_read, +- i40iw_send, +- i40iw_inline_rdma_write, +- i40iw_inline_send, +- i40iw_stag_local_invalidate, +- i40iw_mw_bind, +- i40iw_post_receive, +- i40iw_nop ++ .iw_qp_post_wr = i40iw_qp_post_wr, ++ .iw_qp_ring_push_db = i40iw_qp_ring_push_db, ++ .iw_rdma_write = i40iw_rdma_write, ++ .iw_rdma_read = i40iw_rdma_read, ++ .iw_send = i40iw_send, ++ .iw_inline_rdma_write = i40iw_inline_rdma_write, ++ .iw_inline_send = i40iw_inline_send, ++ .iw_stag_local_invalidate = i40iw_stag_local_invalidate, ++ .iw_mw_bind = i40iw_mw_bind, ++ .iw_post_receive = i40iw_post_receive, ++ .iw_post_nop = i40iw_nop + }; + + static struct i40iw_cq_ops iw_cq_ops = { +- i40iw_cq_request_notification, +- i40iw_cq_poll_completion, +- i40iw_cq_post_entries, +- i40iw_clean_cq ++ .iw_cq_request_notification = i40iw_cq_request_notification, ++ .iw_cq_poll_completion = i40iw_cq_poll_completion, ++ .iw_cq_post_entries = i40iw_cq_post_entries, ++ .iw_cq_clean = i40iw_clean_cq + }; + + static struct i40iw_device_uk_ops iw_device_uk_ops = { +- i40iw_cq_uk_init, +- i40iw_qp_uk_init, ++ .iwarp_cq_uk_init = i40iw_cq_uk_init, ++ .iwarp_qp_uk_init = i40iw_qp_uk_init, + }; + + /** +diff --git a/drivers/infiniband/hw/i40iw/i40iw_user.h b/drivers/infiniband/hw/i40iw/i40iw_user.h +index 5cd971b..01b798c 100644 +--- a/drivers/infiniband/hw/i40iw/i40iw_user.h ++++ b/drivers/infiniband/hw/i40iw/i40iw_user.h +@@ -341,7 +341,7 @@ struct i40iw_device_uk_ops { + + struct i40iw_dev_uk { + struct i40iw_device_uk_ops ops_uk; +-}; ++} __no_const; + + struct i40iw_sq_uk_wr_trk_info { + u64 wrid; diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c index d68f506..00ff84a 100644 --- a/drivers/infiniband/hw/mlx4/mad.c @@ -50128,7 +50276,7 @@ index 99451d8..a9f0747 100644 ctx->mcg_wq = create_singlethread_workqueue(name); if (!ctx->mcg_wq) diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h -index 52ce7b0..8172e21 100644 +index 1eca01c..ed165df 100644 --- a/drivers/infiniband/hw/mlx4/mlx4_ib.h +++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h @@ -457,7 +457,7 @@ struct mlx4_ib_demux_ctx { @@ -50238,7 +50386,7 @@ index 9866c35..9c627c9 100644 struct mthca_dev *dev = to_mdev(ibcq->device); struct mthca_cq *cq = to_mcq(ibcq); diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c -index 9f9d5c5..3c19aac 100644 +index 35cbb17..d336a68 100644 --- a/drivers/infiniband/hw/nes/nes.c +++ b/drivers/infiniband/hw/nes/nes.c @@ -97,7 +97,7 @@ MODULE_PARM_DESC(limit_maxrdreqsz, "Limit max read request size to 256 Bytes"); @@ -50250,7 +50398,7 @@ index 9f9d5c5..3c19aac 100644 static unsigned int ee_flsh_adapter; static unsigned int sysfs_nonidx_addr; -@@ -279,7 +279,7 @@ static void nes_cqp_rem_ref_callback(struct nes_device *nesdev, struct nes_cqp_r +@@ -268,7 +268,7 @@ static void nes_cqp_rem_ref_callback(struct nes_device *nesdev, struct nes_cqp_r struct nes_qp *nesqp = cqp_request->cqp_callback_pointer; struct nes_adapter *nesadapter = nesdev->nesadapter; @@ -50319,7 +50467,7 @@ index bd9d132..70d84f4 100644 extern u32 int_mod_timer_init; extern u32 int_mod_cq_depth_256; diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c -index cb9f0f2..a0bd53c 100644 +index 7f0aa23..3c20939 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c @@ -69,14 +69,14 @@ u32 cm_packets_dropped; @@ -50391,7 +50539,7 @@ index cb9f0f2..a0bd53c 100644 int nes_add_ref_cm_node(struct nes_cm_node *cm_node) { -@@ -1461,7 +1461,7 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core, +@@ -1333,7 +1333,7 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core, kfree(listener); listener = NULL; ret = 0; @@ -50400,7 +50548,7 @@ index cb9f0f2..a0bd53c 100644 } else { spin_unlock_irqrestore(&cm_core->listen_list_lock, flags); } -@@ -1670,7 +1670,7 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core, +@@ -1537,7 +1537,7 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core, cm_node->rem_mac); add_hte_node(cm_core, cm_node); @@ -50409,7 +50557,7 @@ index cb9f0f2..a0bd53c 100644 return cm_node; } -@@ -1731,7 +1731,7 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core, +@@ -1596,7 +1596,7 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core, } atomic_dec(&cm_core->node_cnt); @@ -50418,7 +50566,7 @@ index cb9f0f2..a0bd53c 100644 nesqp = cm_node->nesqp; if (nesqp) { nesqp->cm_node = NULL; -@@ -1795,7 +1795,7 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc, +@@ -1660,7 +1660,7 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc, static void drop_packet(struct sk_buff *skb) { @@ -50427,7 +50575,7 @@ index cb9f0f2..a0bd53c 100644 dev_kfree_skb_any(skb); } -@@ -1858,7 +1858,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, +@@ -1723,7 +1723,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, { int reset = 0; /* whether to send reset in case of err.. */ @@ -50436,7 +50584,7 @@ index cb9f0f2..a0bd53c 100644 nes_debug(NES_DBG_CM, "Received Reset, cm_node = %p, state = %u." " refcnt=%d\n", cm_node, cm_node->state, atomic_read(&cm_node->ref_count)); -@@ -2526,7 +2526,7 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core, +@@ -2369,7 +2369,7 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core, rem_ref_cm_node(cm_node->cm_core, cm_node); return NULL; } @@ -50445,7 +50593,7 @@ index cb9f0f2..a0bd53c 100644 loopbackremotenode->loopbackpartner = cm_node; loopbackremotenode->tcp_cntxt.rcv_wscale = NES_CM_DEFAULT_RCV_WND_SCALE; -@@ -2807,7 +2807,7 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core, +@@ -2644,7 +2644,7 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core, nes_queue_mgt_skbs(skb, nesvnic, cm_node->nesqp); else { rem_ref_cm_node(cm_core, cm_node); @@ -50454,7 +50602,7 @@ index cb9f0f2..a0bd53c 100644 dev_kfree_skb_any(skb); } break; -@@ -3118,7 +3118,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) +@@ -2965,7 +2965,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) if ((cm_id) && (cm_id->event_handler)) { if (issue_disconn) { @@ -50462,8 +50610,8 @@ index cb9f0f2..a0bd53c 100644 + atomic_inc_unchecked(&cm_disconnects); cm_event.event = IW_CM_EVENT_DISCONNECT; cm_event.status = disconn_status; - cm_event.local_addr = cm_id->local_addr; -@@ -3140,7 +3140,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) + cm_event.local_addr = cm_id->m_local_addr; +@@ -2987,7 +2987,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) } if (issue_close) { @@ -50472,7 +50620,7 @@ index cb9f0f2..a0bd53c 100644 nes_disconnect(nesqp, 1); cm_id->provider_data = nesqp; -@@ -3277,7 +3277,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) +@@ -3124,7 +3124,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n", nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener); @@ -50481,7 +50629,7 @@ index cb9f0f2..a0bd53c 100644 nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n", netdev_refcnt_read(nesvnic->netdev)); -@@ -3473,7 +3473,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len) +@@ -3320,7 +3320,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len) struct nes_cm_core *cm_core; u8 *start_buff; @@ -50490,7 +50638,7 @@ index cb9f0f2..a0bd53c 100644 cm_node = (struct nes_cm_node *)cm_id->provider_data; loopback = cm_node->loopbackpartner; cm_core = cm_node->cm_core; -@@ -3538,7 +3538,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) +@@ -3382,7 +3382,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) ntohs(raddr->sin_port), ntohl(laddr->sin_addr.s_addr), ntohs(laddr->sin_port)); @@ -50499,7 +50647,7 @@ index cb9f0f2..a0bd53c 100644 nesqp->active_conn = 1; /* cache the cm_id in the qp */ -@@ -3685,7 +3685,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog) +@@ -3496,7 +3496,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog) g_cm_core->api->stop_listener(g_cm_core, (void *)cm_node); return err; } @@ -50508,7 +50656,7 @@ index cb9f0f2..a0bd53c 100644 } cm_id->add_ref(cm_id); -@@ -3792,7 +3792,7 @@ static void cm_event_connected(struct nes_cm_event *event) +@@ -3603,7 +3603,7 @@ static void cm_event_connected(struct nes_cm_event *event) if (nesqp->destroyed) return; @@ -50517,7 +50665,7 @@ index cb9f0f2..a0bd53c 100644 nes_debug(NES_DBG_CM, "QP%u attempting to connect to 0x%08X:0x%04X on" " local port 0x%04X. jiffies = %lu.\n", nesqp->hwqp.qp_id, ntohl(raddr->sin_addr.s_addr), -@@ -3977,7 +3977,7 @@ static void cm_event_reset(struct nes_cm_event *event) +@@ -3788,7 +3788,7 @@ static void cm_event_reset(struct nes_cm_event *event) cm_id->add_ref(cm_id); ret = cm_id->event_handler(cm_id, &cm_event); @@ -50526,7 +50674,7 @@ index cb9f0f2..a0bd53c 100644 cm_event.event = IW_CM_EVENT_CLOSE; cm_event.status = 0; cm_event.provider_data = cm_id->provider_data; -@@ -4017,7 +4017,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event) +@@ -3828,7 +3828,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event) return; cm_id = cm_node->cm_id; @@ -50535,7 +50683,7 @@ index cb9f0f2..a0bd53c 100644 nes_debug(NES_DBG_CM, "cm_node = %p - cm_id = %p, jiffies = %lu\n", cm_node, cm_id, jiffies); -@@ -4066,7 +4066,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event) +@@ -3877,7 +3877,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event) return; cm_id = cm_node->cm_id; @@ -50578,7 +50726,7 @@ index 4166452..fc952c3 100644 } diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c -index 6a0bdfa..57f9580 100644 +index 9291453..b3d0366 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c @@ -462,7 +462,7 @@ static int nes_nic_send(struct sk_buff *skb, struct net_device *netdev) @@ -50590,7 +50738,7 @@ index 6a0bdfa..57f9580 100644 { struct nes_vnic *nesvnic = netdev_priv(netdev); struct nes_device *nesdev = nesvnic->nesdev; -@@ -1274,39 +1274,39 @@ static void nes_netdev_get_ethtool_stats(struct net_device *netdev, +@@ -1268,36 +1268,36 @@ static void nes_netdev_get_ethtool_stats(struct net_device *netdev, target_stat_values[++index] = mh_detected; target_stat_values[++index] = mh_pauses_sent; target_stat_values[++index] = nesvnic->endnode_ipv4_tcp_retransmits; @@ -50640,9 +50788,6 @@ index 6a0bdfa..57f9580 100644 target_stat_values[++index] = nesadapter->free_4kpbl; target_stat_values[++index] = nesadapter->free_256pbl; target_stat_values[++index] = int_mod_timer_init; - target_stat_values[++index] = nesvnic->lro_mgr.stats.aggregated; - target_stat_values[++index] = nesvnic->lro_mgr.stats.flushed; - target_stat_values[++index] = nesvnic->lro_mgr.stats.no_desc; - target_stat_values[++index] = atomic_read(&pau_qps_created); - target_stat_values[++index] = atomic_read(&pau_qps_destroyed); + target_stat_values[++index] = atomic_read_unchecked(&pau_qps_created); @@ -50651,7 +50796,7 @@ index 6a0bdfa..57f9580 100644 /** diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c -index 8c4daf7..77a87ab 100644 +index fba69a3..ecf3aee 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.c +++ b/drivers/infiniband/hw/nes/nes_verbs.c @@ -46,9 +46,9 @@ @@ -50667,7 +50812,7 @@ index 8c4daf7..77a87ab 100644 static void nes_unregister_ofa_device(struct nes_ib_device *nesibdev); static int nes_dereg_mr(struct ib_mr *ib_mr); -@@ -1040,7 +1040,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd, +@@ -1041,7 +1041,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd, if (init_attr->create_flags) return ERR_PTR(-EINVAL); @@ -50676,7 +50821,7 @@ index 8c4daf7..77a87ab 100644 switch (init_attr->qp_type) { case IB_QPT_RC: if (nes_drv_opt & NES_DRV_OPT_NO_INLINE_DATA) { -@@ -1374,7 +1374,7 @@ static int nes_destroy_qp(struct ib_qp *ibqp) +@@ -1375,7 +1375,7 @@ static int nes_destroy_qp(struct ib_qp *ibqp) struct iw_cm_event cm_event; int ret = 0; @@ -50686,7 +50831,7 @@ index 8c4daf7..77a87ab 100644 /* Blow away the connection if it exists. */ diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c -index 6c8ff10..73cfbb6 100644 +index 82d7c4b..5da4377 100644 --- a/drivers/infiniband/hw/qib/qib_iba7322.c +++ b/drivers/infiniband/hw/qib/qib_iba7322.c @@ -150,7 +150,7 @@ static struct kparam_string kp_txselect = { @@ -50698,7 +50843,7 @@ index 6c8ff10..73cfbb6 100644 module_param_call(txselect, setup_txselect, param_get_string, &kp_txselect, S_IWUSR | S_IRUGO); MODULE_PARM_DESC(txselect, -@@ -6194,7 +6194,7 @@ static void set_no_qsfp_atten(struct qib_devdata *dd, int change) +@@ -6192,7 +6192,7 @@ static void set_no_qsfp_atten(struct qib_devdata *dd, int change) } /* handle the txselect parameter changing */ @@ -50721,10 +50866,10 @@ index 4758a38..571a55f 100644 struct qib_devdata *dd = pci_get_drvdata(pdev); pci_ers_result_t ret = PCI_ERS_RESULT_RECOVERED; diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c -index 25509bb..0c443df 100644 +index 80807d6..a72293a 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c -@@ -947,7 +947,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev, +@@ -948,7 +948,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev, spin_unlock_irqrestore(&priv->lock, flags); } @@ -50747,7 +50892,7 @@ index cdc7df4..a2fdfdb 100644 .maxtype = IFLA_IPOIB_MAX, .policy = ipoib_policy, diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c -index 4328679..5a01e76 100644 +index 8b42401..f855977 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -80,7 +80,7 @@ module_param(srpt_srq_size, int, 0444); @@ -50759,7 +50904,7 @@ index 4328679..5a01e76 100644 { return sprintf(buffer, "0x%016llx", *(u64 *)kp->arg); } -@@ -223,8 +223,9 @@ static void srpt_srq_event(struct ib_event *event, void *ctx) +@@ -196,8 +196,9 @@ static const char *get_ch_state_name(enum rdma_ch_state s) /** * srpt_qp_event() - QP event callback function. */ @@ -50768,9 +50913,9 @@ index 4328679..5a01e76 100644 { + struct srpt_rdma_ch *ch = _ch; pr_debug("QP event %d on cm_id=%p sess_name=%s state=%d\n", - event->event, ch->cm_id, ch->sess_name, srpt_get_ch_state(ch)); + event->event, ch->cm_id, ch->sess_name, ch->state); -@@ -1908,8 +1909,7 @@ retry: +@@ -1825,8 +1826,7 @@ retry: } qp_init->qp_context = (void *)ch; @@ -50815,7 +50960,7 @@ index 4a2a9e3..b9261a7 100644 gameport->dev.release = gameport_release_port; if (gameport->parent) diff --git a/drivers/input/input.c b/drivers/input/input.c -index 8806059..fddeb99 100644 +index b87ffbd..6132a53 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -1781,7 +1781,7 @@ EXPORT_SYMBOL_GPL(input_class); @@ -50871,10 +51016,10 @@ index 9c0ea36..1e1a411 100644 /* * PCU-B devices, both GEN_1 and GEN_2 do not have OFN sensor diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h -index ad5a5a1..5eac214 100644 +index e0ca6cd..b5a2681 100644 --- a/drivers/input/mouse/psmouse.h +++ b/drivers/input/mouse/psmouse.h -@@ -125,7 +125,7 @@ struct psmouse_attribute { +@@ -126,7 +126,7 @@ struct psmouse_attribute { ssize_t (*set)(struct psmouse *psmouse, void *data, const char *buf, size_t count); bool protect; @@ -50953,66 +51098,11 @@ index 92e2243..8fd9092 100644 { .ident = "Shift", .matches = { -diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c -index b6c4d03..880c40b 100644 ---- a/drivers/input/touchscreen/sur40.c -+++ b/drivers/input/touchscreen/sur40.c -@@ -197,28 +197,34 @@ static int sur40_command(struct sur40_state *dev, - static int sur40_init(struct sur40_state *dev) - { - int result; -- u8 buffer[24]; -+ u8 *buffer; -+ -+ buffer = kmalloc(24, GFP_KERNEL); -+ if (!buffer) { -+ result = -ENOMEM; -+ goto error; -+ } - - /* stupidly replay the original MS driver init sequence */ - result = sur40_command(dev, SUR40_GET_VERSION, 0x00, buffer, 12); - if (result < 0) -- return result; -+ goto error; - - result = sur40_command(dev, SUR40_GET_VERSION, 0x01, buffer, 12); - if (result < 0) -- return result; -+ goto error; - - result = sur40_command(dev, SUR40_GET_VERSION, 0x02, buffer, 12); - if (result < 0) -- return result; -+ goto error; - - result = sur40_command(dev, SUR40_UNKNOWN2, 0x00, buffer, 24); - if (result < 0) -- return result; -+ goto error; - - result = sur40_command(dev, SUR40_UNKNOWN1, 0x00, buffer, 5); - if (result < 0) -- return result; -+ goto error; - - result = sur40_command(dev, SUR40_GET_VERSION, 0x03, buffer, 12); - -@@ -226,7 +232,8 @@ static int sur40_init(struct sur40_state *dev) - * Discard the result buffer - no known data inside except - * some version strings, maybe extract these sometime... - */ -- -+error: -+ kfree(buffer); - return result; - } - diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig -index a1e75cb..88d1c47 100644 +index dd1dc39..f595bbe 100644 --- a/drivers/iommu/Kconfig +++ b/drivers/iommu/Kconfig -@@ -109,6 +109,7 @@ config AMD_IOMMU_STATS +@@ -128,6 +128,7 @@ config AMD_IOMMU_STATS bool "Export AMD IOMMU statistics to debugfs" depends on AMD_IOMMU select DEBUG_FS @@ -51049,10 +51139,10 @@ index 5efadad..d1b358e 100644 CMD_SET_TYPE(cmd, CMD_COMPL_WAIT); } diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c -index 2087534..c3f6b6c 100644 +index 4ff73ff..6f1ffa8 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c -@@ -1554,7 +1554,7 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain) +@@ -1562,7 +1562,7 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain) .iommu_dev = smmu->dev, }; @@ -51062,10 +51152,10 @@ index 2087534..c3f6b6c 100644 return -ENOMEM; diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c -index 59ee4b8..e4b6234 100644 +index 7c39ac4..c43d295 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c -@@ -341,7 +341,7 @@ enum arm_smmu_domain_stage { +@@ -349,7 +349,7 @@ enum arm_smmu_domain_stage { struct arm_smmu_domain { struct arm_smmu_device *smmu; @@ -51074,7 +51164,7 @@ index 59ee4b8..e4b6234 100644 spinlock_t pgtbl_lock; struct arm_smmu_cfg cfg; enum arm_smmu_domain_stage stage; -@@ -808,7 +808,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, +@@ -816,7 +816,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, { int irq, start, ret = 0; unsigned long ias, oas; @@ -51083,7 +51173,7 @@ index 59ee4b8..e4b6234 100644 struct io_pgtable_cfg pgtbl_cfg; enum io_pgtable_fmt fmt; struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); -@@ -894,14 +894,16 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, +@@ -908,14 +908,16 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, }; smmu_domain->smmu = smmu; @@ -51103,7 +51193,7 @@ index 59ee4b8..e4b6234 100644 /* Initialise the context bank with our page table cfg */ arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg); -@@ -922,7 +924,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, +@@ -936,7 +938,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, mutex_unlock(&smmu_domain->init_mutex); /* Publish page table ops for map/unmap */ @@ -51112,7 +51202,7 @@ index 59ee4b8..e4b6234 100644 return 0; out_clear_smmu: -@@ -955,7 +957,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) +@@ -969,7 +971,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) free_irq(irq, domain); } @@ -51121,7 +51211,7 @@ index 59ee4b8..e4b6234 100644 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx); } -@@ -1180,13 +1182,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova, +@@ -1206,13 +1208,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova, int ret; unsigned long flags; struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); @@ -51138,7 +51228,7 @@ index 59ee4b8..e4b6234 100644 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags); return ret; } -@@ -1197,13 +1199,13 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova, +@@ -1223,13 +1225,13 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova, size_t ret; unsigned long flags; struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); @@ -51155,7 +51245,7 @@ index 59ee4b8..e4b6234 100644 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags); return ret; } -@@ -1214,7 +1216,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, +@@ -1240,7 +1242,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); struct arm_smmu_device *smmu = smmu_domain->smmu; struct arm_smmu_cfg *cfg = &smmu_domain->cfg; @@ -51164,7 +51254,7 @@ index 59ee4b8..e4b6234 100644 struct device *dev = smmu->dev; void __iomem *cb_base; u32 tmp; -@@ -1235,7 +1237,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, +@@ -1261,7 +1263,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, dev_err(dev, "iova to phys timed out on %pad. Falling back to software table walk.\n", &iova); @@ -51173,7 +51263,7 @@ index 59ee4b8..e4b6234 100644 } phys = readl_relaxed(cb_base + ARM_SMMU_CB_PAR_LO); -@@ -1256,9 +1258,9 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain, +@@ -1282,9 +1284,9 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain, phys_addr_t ret; unsigned long flags; struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); @@ -51185,7 +51275,7 @@ index 59ee4b8..e4b6234 100644 return 0; spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags); -@@ -1266,7 +1268,7 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain, +@@ -1292,7 +1294,7 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain, smmu_domain->stage == ARM_SMMU_DOMAIN_S1) { ret = arm_smmu_iova_to_phys_hard(domain, iova); } else { @@ -51194,7 +51284,7 @@ index 59ee4b8..e4b6234 100644 } spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags); -@@ -1685,7 +1687,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) +@@ -1714,7 +1716,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) size |= SZ_64K | SZ_512M; } @@ -51205,8 +51295,196 @@ index 59ee4b8..e4b6234 100644 dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n", size); if (smmu->features & ARM_SMMU_FEAT_TRANS_S1) +diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c +index 9488e3c..1411569 100644 +--- a/drivers/iommu/io-pgtable-arm-v7s.c ++++ b/drivers/iommu/io-pgtable-arm-v7s.c +@@ -49,9 +49,6 @@ + #define io_pgtable_to_data(x) \ + container_of((x), struct arm_v7s_io_pgtable, iop) + +-#define io_pgtable_ops_to_data(x) \ +- io_pgtable_to_data(io_pgtable_ops_to_pgtable(x)) +- + /* + * We have 32 bits total; 12 bits resolved at level 1, 8 bits at level 2, + * and 12 bits in a page. With some carefully-chosen coefficients we can +@@ -413,11 +410,10 @@ static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova, + return __arm_v7s_map(data, iova, paddr, size, prot, lvl + 1, cptep); + } + +-static int arm_v7s_map(struct io_pgtable_ops *ops, unsigned long iova, ++static int arm_v7s_map(struct io_pgtable *iop, unsigned long iova, + phys_addr_t paddr, size_t size, int prot) + { +- struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops); +- struct io_pgtable *iop = &data->iop; ++ struct arm_v7s_io_pgtable *data = io_pgtable_to_data(iop); + int ret; + + /* If no access, then nothing to do */ +@@ -580,10 +576,10 @@ static int __arm_v7s_unmap(struct arm_v7s_io_pgtable *data, + return __arm_v7s_unmap(data, iova, size, lvl + 1, ptep); + } + +-static int arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova, ++static int arm_v7s_unmap(struct io_pgtable *iop, unsigned long iova, + size_t size) + { +- struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops); ++ struct arm_v7s_io_pgtable *data = io_pgtable_to_data(iop); + size_t unmapped; + + unmapped = __arm_v7s_unmap(data, iova, size, 1, data->pgd); +@@ -593,10 +589,10 @@ static int arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova, + return unmapped; + } + +-static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable_ops *ops, ++static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable *iop, + unsigned long iova) + { +- struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops); ++ struct arm_v7s_io_pgtable *data = io_pgtable_to_data(iop); + arm_v7s_iopte *ptep = data->pgd, pte; + int lvl = 0; + u32 mask; +@@ -615,6 +611,12 @@ static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable_ops *ops, + return (pte & mask) | (iova & ~mask); + } + ++static struct io_pgtable_ops arm_v7s_io_pgtable_ops = { ++ .map = arm_v7s_map, ++ .unmap = arm_v7s_unmap, ++ .iova_to_phys = arm_v7s_iova_to_phys, ++}; ++ + static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg, + void *cookie) + { +@@ -639,11 +641,7 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg, + if (!data->l2_tables) + goto out_free_data; + +- data->iop.ops = (struct io_pgtable_ops) { +- .map = arm_v7s_map, +- .unmap = arm_v7s_unmap, +- .iova_to_phys = arm_v7s_iova_to_phys, +- }; ++ data->iop.ops = &arm_v7s_io_pgtable_ops; + + /* We have to do this early for __arm_v7s_alloc_table to work... */ + data->iop.cfg = *cfg; +@@ -732,7 +730,7 @@ static struct iommu_gather_ops dummy_tlb_ops = { + + static int __init arm_v7s_do_selftests(void) + { +- struct io_pgtable_ops *ops; ++ struct io_pgtable *pgtbl; + struct io_pgtable_cfg cfg = { + .tlb = &dummy_tlb_ops, + .oas = 32, +@@ -747,8 +745,8 @@ static int __init arm_v7s_do_selftests(void) + + cfg_cookie = &cfg; + +- ops = alloc_io_pgtable_ops(ARM_V7S, &cfg, &cfg); +- if (!ops) { ++ pgtbl = alloc_io_pgtable(ARM_V7S, &cfg, &cfg); ++ if (!pgtbl) { + pr_err("selftest: failed to allocate io pgtable ops\n"); + return -EINVAL; + } +@@ -757,13 +755,13 @@ static int __init arm_v7s_do_selftests(void) + * Initial sanity checks. + * Empty page tables shouldn't provide any translations. + */ +- if (ops->iova_to_phys(ops, 42)) ++ if (pgtbl->ops->iova_to_phys(pgtbl, 42)) + return __FAIL(ops); + +- if (ops->iova_to_phys(ops, SZ_1G + 42)) ++ if (pgtbl->ops->iova_to_phys(pgtbl, SZ_1G + 42)) + return __FAIL(ops); + +- if (ops->iova_to_phys(ops, SZ_2G + 42)) ++ if (pgtbl->ops->iova_to_phys(pgtbl, SZ_2G + 42)) + return __FAIL(ops); + + /* +@@ -773,18 +771,18 @@ static int __init arm_v7s_do_selftests(void) + i = find_first_bit(&cfg.pgsize_bitmap, BITS_PER_LONG); + while (i != BITS_PER_LONG) { + size = 1UL << i; +- if (ops->map(ops, iova, iova, size, IOMMU_READ | ++ if (pgtbl->ops->map(pgtbl, iova, iova, size, IOMMU_READ | + IOMMU_WRITE | + IOMMU_NOEXEC | + IOMMU_CACHE)) + return __FAIL(ops); + + /* Overlapping mappings */ +- if (!ops->map(ops, iova, iova + size, size, ++ if (!pgtbl->ops->map(pgtbl, iova, iova + size, size, + IOMMU_READ | IOMMU_NOEXEC)) + return __FAIL(ops); + +- if (ops->iova_to_phys(ops, iova + 42) != (iova + 42)) ++ if (pgtbl->ops->iova_to_phys(pgtbl, iova + 42) != (iova + 42)) + return __FAIL(ops); + + iova += SZ_16M; +@@ -798,14 +796,14 @@ static int __init arm_v7s_do_selftests(void) + size = 1UL << __ffs(cfg.pgsize_bitmap); + while (i < loopnr) { + iova_start = i * SZ_16M; +- if (ops->unmap(ops, iova_start + size, size) != size) ++ if (pgtbl->ops->unmap(pgtbl, iova_start + size, size) != size) + return __FAIL(ops); + + /* Remap of partial unmap */ +- if (ops->map(ops, iova_start + size, size, size, IOMMU_READ)) ++ if (pgtbl->ops->map(pgtbl, iova_start + size, size, size, IOMMU_READ)) + return __FAIL(ops); + +- if (ops->iova_to_phys(ops, iova_start + size + 42) ++ if (pgtbl->ops->iova_to_phys(pgtbl, iova_start + size + 42) + != (size + 42)) + return __FAIL(ops); + i++; +@@ -817,17 +815,17 @@ static int __init arm_v7s_do_selftests(void) + while (i != BITS_PER_LONG) { + size = 1UL << i; + +- if (ops->unmap(ops, iova, size) != size) ++ if (pgtbl->ops->unmap(pgtbl, iova, size) != size) + return __FAIL(ops); + +- if (ops->iova_to_phys(ops, iova + 42)) ++ if (pgtbl->ops->iova_to_phys(pgtbl, iova + 42)) + return __FAIL(ops); + + /* Remap full block */ +- if (ops->map(ops, iova, iova, size, IOMMU_WRITE)) ++ if (pgtbl->ops->map(pgtbl, iova, iova, size, IOMMU_WRITE)) + return __FAIL(ops); + +- if (ops->iova_to_phys(ops, iova + 42) != (iova + 42)) ++ if (pgtbl->ops->iova_to_phys(pgtbl, iova + 42) != (iova + 42)) + return __FAIL(ops); + + iova += SZ_16M; +@@ -835,7 +833,7 @@ static int __init arm_v7s_do_selftests(void) + i = find_next_bit(&cfg.pgsize_bitmap, BITS_PER_LONG, i); + } + +- free_io_pgtable_ops(ops); ++ free_io_pgtable(pgtbl); + + selftest_running = false; + diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c -index 381ca5a..6443bb0 100644 +index f433b51..072fc99 100644 --- a/drivers/iommu/io-pgtable-arm.c +++ b/drivers/iommu/io-pgtable-arm.c @@ -39,9 +39,6 @@ @@ -51232,7 +51510,7 @@ index 381ca5a..6443bb0 100644 arm_lpae_iopte *ptep = data->pgd; int ret, lvl = ARM_LPAE_START_LVL(data); arm_lpae_iopte prot; -@@ -527,12 +524,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, +@@ -525,11 +522,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep); } @@ -51242,12 +51520,11 @@ index 381ca5a..6443bb0 100644 { size_t unmapped; - struct arm_lpae_io_pgtable *data = io_pgtable_ops_to_data(ops); -- struct io_pgtable *iop = &data->iop; + struct arm_lpae_io_pgtable *data = io_pgtable_to_data(iop); arm_lpae_iopte *ptep = data->pgd; int lvl = ARM_LPAE_START_LVL(data); -@@ -543,10 +539,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, +@@ -540,10 +537,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, return unmapped; } @@ -51260,7 +51537,7 @@ index 381ca5a..6443bb0 100644 arm_lpae_iopte pte, *ptep = data->pgd; int lvl = ARM_LPAE_START_LVL(data); -@@ -613,6 +609,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg) +@@ -610,6 +607,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg) } } @@ -51273,7 +51550,7 @@ index 381ca5a..6443bb0 100644 static struct arm_lpae_io_pgtable * arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg) { -@@ -649,11 +651,7 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg) +@@ -646,11 +649,7 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg) pgd_bits = va_bits - (data->bits_per_level * (data->levels - 1)); data->pgd_size = 1UL << (pgd_bits + ilog2(sizeof(arm_lpae_iopte))); @@ -51286,7 +51563,7 @@ index 381ca5a..6443bb0 100644 return data; } -@@ -905,15 +903,15 @@ static void dummy_tlb_sync(void *cookie) +@@ -911,15 +910,15 @@ static void dummy_tlb_sync(void *cookie) WARN_ON(cookie != cfg_cookie); } @@ -51305,7 +51582,7 @@ index 381ca5a..6443bb0 100644 struct io_pgtable_cfg *cfg = &data->iop.cfg; pr_err("cfg: pgsize_bitmap 0x%lx, ias %u-bit\n", -@@ -923,9 +921,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops) +@@ -929,9 +928,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops) data->bits_per_level, data->pgd); } @@ -51317,7 +51594,7 @@ index 381ca5a..6443bb0 100644 selftest_running = false; \ -EFAULT; \ }) -@@ -940,30 +938,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) +@@ -946,30 +945,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) int i, j; unsigned long iova; size_t size; @@ -51359,7 +51636,7 @@ index 381ca5a..6443bb0 100644 /* * Distinct mappings of different granule sizes. -@@ -973,19 +973,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) +@@ -979,19 +980,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) while (j != BITS_PER_LONG) { size = 1UL << j; @@ -51385,7 +51662,7 @@ index 381ca5a..6443bb0 100644 iova += SZ_1G; j++; -@@ -994,15 +994,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) +@@ -1000,15 +1001,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) /* Partial unmap */ size = 1UL << __ffs(cfg->pgsize_bitmap); @@ -51407,7 +51684,7 @@ index 381ca5a..6443bb0 100644 /* Full unmap */ iova = 0; -@@ -1010,25 +1010,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) +@@ -1016,25 +1017,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg) while (j != BITS_PER_LONG) { size = 1UL << j; @@ -51443,10 +51720,10 @@ index 381ca5a..6443bb0 100644 selftest_running = false; diff --git a/drivers/iommu/io-pgtable.c b/drivers/iommu/io-pgtable.c -index 6f2e319..c24d09a 100644 +index 876f6a7..cb29f0f 100644 --- a/drivers/iommu/io-pgtable.c +++ b/drivers/iommu/io-pgtable.c -@@ -35,7 +35,7 @@ io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] = +@@ -38,7 +38,7 @@ io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] = #endif }; @@ -51455,7 +51732,7 @@ index 6f2e319..c24d09a 100644 struct io_pgtable_cfg *cfg, void *cookie) { -@@ -57,21 +57,18 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt, +@@ -60,21 +60,18 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt, iop->cookie = cookie; iop->cfg = *cfg; @@ -51477,14 +51754,14 @@ index 6f2e319..c24d09a 100644 return; - iop = container_of(ops, struct io_pgtable, ops); - iop->cfg.tlb->tlb_flush_all(iop->cookie); + io_pgtable_tlb_flush_all(iop); io_pgtable_init_table[iop->fmt]->free(iop); } diff --git a/drivers/iommu/io-pgtable.h b/drivers/iommu/io-pgtable.h -index 36673c8..9b3fcbe 100644 +index d4f5027..0265cd8 100644 --- a/drivers/iommu/io-pgtable.h +++ b/drivers/iommu/io-pgtable.h -@@ -78,17 +78,18 @@ struct io_pgtable_cfg { +@@ -103,17 +103,18 @@ struct io_pgtable_cfg { * These functions map directly onto the iommu_ops member functions with * the same names. */ @@ -51507,7 +51784,7 @@ index 36673c8..9b3fcbe 100644 * * @fmt: The page table format. * @cfg: The page table configuration. This will be modified to represent -@@ -97,9 +98,9 @@ struct io_pgtable_ops { +@@ -122,9 +123,9 @@ struct io_pgtable_ops { * @cookie: An opaque token provided by the IOMMU driver and passed back to * the callback routines in cfg->tlb. */ @@ -51520,7 +51797,7 @@ index 36673c8..9b3fcbe 100644 /** * free_io_pgtable_ops() - Free an io_pgtable_ops structure. The caller -@@ -108,7 +109,7 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt, +@@ -133,7 +134,7 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt, * * @ops: The ops returned from alloc_io_pgtable_ops. */ @@ -51529,9 +51806,9 @@ index 36673c8..9b3fcbe 100644 /* -@@ -128,11 +129,9 @@ struct io_pgtable { - enum io_pgtable_fmt fmt; +@@ -155,11 +156,9 @@ struct io_pgtable { void *cookie; + bool tlb_sync_pending; struct io_pgtable_cfg cfg; - struct io_pgtable_ops ops; + const struct io_pgtable_ops *ops; @@ -51539,11 +51816,11 @@ index 36673c8..9b3fcbe 100644 -#define io_pgtable_ops_to_pgtable(x) container_of((x), struct io_pgtable, ops) - - /** - * struct io_pgtable_init_fns - Alloc/free a set of page tables for a - * particular format. + static inline void io_pgtable_tlb_flush_all(struct io_pgtable *iop) + { + iop->cfg.tlb->tlb_flush_all(iop->cookie); diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c -index 515bb8b..c2bb880 100644 +index b9df141..7c67a2d 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -957,7 +957,7 @@ static int iommu_bus_notifier(struct notifier_block *nb, @@ -51627,8 +51904,76 @@ index 8adaaea..99dab8e 100644 } void ir_ack_apic_edge(struct irq_data *data) +diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c +index 929a66a..4e61ad0 100644 +--- a/drivers/iommu/mtk_iommu.c ++++ b/drivers/iommu/mtk_iommu.c +@@ -110,7 +110,7 @@ struct mtk_iommu_domain { + spinlock_t pgtlock; /* lock for page table */ + + struct io_pgtable_cfg cfg; +- struct io_pgtable_ops *iop; ++ struct io_pgtable *iop; + + struct iommu_domain domain; + }; +@@ -257,14 +257,16 @@ static int mtk_iommu_domain_finalise(struct mtk_iommu_data *data) + .iommu_dev = data->dev, + }; + +- dom->iop = alloc_io_pgtable_ops(ARM_V7S, &dom->cfg, data); ++ dom->iop = alloc_io_pgtable(ARM_V7S, &dom->cfg, data); + if (!dom->iop) { + dev_err(data->dev, "Failed to alloc io pgtable\n"); + return -EINVAL; + } + + /* Update our support page sizes bitmap */ +- mtk_iommu_ops.pgsize_bitmap = dom->cfg.pgsize_bitmap; ++ pax_open_kernel(); ++ const_cast(mtk_iommu_ops.pgsize_bitmap) = dom->cfg.pgsize_bitmap; ++ pax_close_kernel(); + + writel(data->m4u_dom->cfg.arm_v7s_cfg.ttbr[0], + data->base + REG_MMU_PT_BASE_ADDR); +@@ -350,7 +352,7 @@ static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova, + int ret; + + spin_lock_irqsave(&dom->pgtlock, flags); +- ret = dom->iop->map(dom->iop, iova, paddr, size, prot); ++ ret = dom->iop->ops->map(dom->iop, iova, paddr, size, prot); + spin_unlock_irqrestore(&dom->pgtlock, flags); + + return ret; +@@ -364,7 +366,7 @@ static size_t mtk_iommu_unmap(struct iommu_domain *domain, + size_t unmapsz; + + spin_lock_irqsave(&dom->pgtlock, flags); +- unmapsz = dom->iop->unmap(dom->iop, iova, size); ++ unmapsz = dom->iop->ops->unmap(dom->iop, iova, size); + spin_unlock_irqrestore(&dom->pgtlock, flags); + + return unmapsz; +@@ -378,7 +380,7 @@ static phys_addr_t mtk_iommu_iova_to_phys(struct iommu_domain *domain, + phys_addr_t pa; + + spin_lock_irqsave(&dom->pgtlock, flags); +- pa = dom->iop->iova_to_phys(dom->iop, iova); ++ pa = dom->iop->ops->iova_to_phys(dom->iop, iova); + spin_unlock_irqrestore(&dom->pgtlock, flags); + + return pa; +@@ -654,7 +656,7 @@ static int mtk_iommu_remove(struct platform_device *pdev) + if (iommu_present(&platform_bus_type)) + bus_set_iommu(&platform_bus_type, NULL); + +- free_io_pgtable_ops(data->m4u_dom->iop); ++ free_io_pgtable(data->m4u_dom->iop); + clk_disable_unprepare(data->bclk); + devm_free_irq(&pdev->dev, data->irq, data); + component_master_del(&pdev->dev, &mtk_iommu_com_ops); diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c -index eef9500..71f7183 100644 +index 5c4da58..54606f1 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -387,7 +387,7 @@ static void gic_handle_cascade_irq(struct irq_desc *desc) @@ -51653,6 +51998,19 @@ index 6b304eb..6e3a1413 100644 /* * Theoretically we do not have to handle this IRQ, * but in Linux this does not cause problems and is +diff --git a/drivers/irqchip/irq-mmp.c b/drivers/irqchip/irq-mmp.c +index 013fc96..756ae4a 100644 +--- a/drivers/irqchip/irq-mmp.c ++++ b/drivers/irqchip/irq-mmp.c +@@ -122,7 +122,7 @@ static void icu_unmask_irq(struct irq_data *d) + } + } + +-struct irq_chip icu_irq_chip = { ++struct irq_chip icu_irq_chip __read_only = { + .name = "icu_irq", + .irq_mask = icu_mask_irq, + .irq_mask_ack = icu_mask_ack_irq, diff --git a/drivers/irqchip/irq-renesas-intc-irqpin.c b/drivers/irqchip/irq-renesas-intc-irqpin.c index 713177d..3849ddd 100644 --- a/drivers/irqchip/irq-renesas-intc-irqpin.c @@ -51667,7 +52025,7 @@ index 713177d..3849ddd 100644 void (*disable_fn)(struct irq_data *d); const char *name = dev_name(dev); diff --git a/drivers/irqchip/irq-ts4800.c b/drivers/irqchip/irq-ts4800.c -index 4192bdc..dabf7a7 100644 +index 2325fb3..fca7529 100644 --- a/drivers/irqchip/irq-ts4800.c +++ b/drivers/irqchip/irq-ts4800.c @@ -93,7 +93,7 @@ static int ts4800_ic_probe(struct platform_device *pdev) @@ -51835,7 +52193,7 @@ index d1f8ab9..c0412f2 100644 diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c -index 5f306e2..5342f88 100644 +index 5f306e2..ff14829 100644 --- a/drivers/isdn/gigaset/usb-gigaset.c +++ b/drivers/isdn/gigaset/usb-gigaset.c @@ -543,7 +543,7 @@ static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6]) @@ -51843,7 +52201,7 @@ index 5f306e2..5342f88 100644 memcpy(cs->hw.usb->bchars, buf, 6); return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x19, 0x41, - 0, 0, &buf, 6, 2000); -+ 0, 0, buf, 6, 2000); ++ 0, 0, cs->hw.usb->bchars, 6, 2000); } static void gigaset_freebcshw(struct bc_state *bcs) @@ -52357,10 +52715,10 @@ index d5bdbaf..a7cdc61 100644 err = setup_io(card); if (err) diff --git a/drivers/isdn/hardware/mISDN/mISDNipac.c b/drivers/isdn/hardware/mISDN/mISDNipac.c -index cb428b9..cb3d37c 100644 +index aa9b6c3..ffd3257 100644 --- a/drivers/isdn/hardware/mISDN/mISDNipac.c +++ b/drivers/isdn/hardware/mISDN/mISDNipac.c -@@ -725,8 +725,9 @@ isac_release(struct isac_hw *isac) +@@ -727,8 +727,9 @@ isac_release(struct isac_hw *isac) } static void @@ -52371,7 +52729,7 @@ index cb428b9..cb3d37c 100644 int rbch, star; u_long flags; -@@ -794,7 +795,7 @@ isac_init(struct isac_hw *isac) +@@ -796,7 +797,7 @@ isac_init(struct isac_hw *isac) } isac->mon_tx = NULL; isac->mon_rx = NULL; @@ -52897,10 +53255,10 @@ index 9cc26b4..d7fa044 100644 init_timer(&cs->dbusytimer); diff --git a/drivers/isdn/hisax/isac.c b/drivers/isdn/hisax/isac.c -index 7fdf78f..eb02640 100644 +index df7e05c..0f7dca1 100644 --- a/drivers/isdn/hisax/isac.c +++ b/drivers/isdn/hisax/isac.c -@@ -579,8 +579,9 @@ DC_Close_isac(struct IsdnCardState *cs) +@@ -584,8 +584,9 @@ DC_Close_isac(struct IsdnCardState *cs) } static void @@ -52911,7 +53269,7 @@ index 7fdf78f..eb02640 100644 struct PStack *stptr; int rbch, star; -@@ -672,7 +673,7 @@ void clear_pending_isac_ints(struct IsdnCardState *cs) +@@ -677,7 +678,7 @@ void clear_pending_isac_ints(struct IsdnCardState *cs) void setup_isac(struct IsdnCardState *cs) { INIT_WORK(&cs->tqueue, isac_bh); @@ -53070,7 +53428,7 @@ index 91d5730..336523e 100644 /* The following should better go into a dedicated source file such that diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c -index 2175225..b875cac 100644 +index 947d5c9..d75f751 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c @@ -1503,9 +1503,9 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp) @@ -53116,7 +53474,7 @@ index 2175225..b875cac 100644 #ifdef ISDN_DEBUG_MODEM_OPEN printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n"); #endif -@@ -1620,7 +1620,7 @@ isdn_tty_hangup(struct tty_struct *tty) +@@ -1621,7 +1621,7 @@ isdn_tty_hangup(struct tty_struct *tty) if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_hangup")) return; isdn_tty_shutdown(info); @@ -53125,7 +53483,7 @@ index 2175225..b875cac 100644 port->flags &= ~ASYNC_NORMAL_ACTIVE; port->tty = NULL; wake_up_interruptible(&port->open_wait); -@@ -1965,7 +1965,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup) +@@ -1966,7 +1966,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup) for (i = 0; i < ISDN_MAX_CHANNELS; i++) { modem_info *info = &dev->mdm.info[i]; @@ -53161,19 +53519,6 @@ index e2d4e58..40cd045 100644 }; /* error message helper function */ -diff --git a/drivers/isdn/icn/icn.c b/drivers/isdn/icn/icn.c -index 358a574..b4987ea 100644 ---- a/drivers/isdn/icn/icn.c -+++ b/drivers/isdn/icn/icn.c -@@ -1045,7 +1045,7 @@ icn_writecmd(const u_char *buf, int len, int user, icn_card *card) - if (count > len) - count = len; - if (user) { -- if (copy_from_user(msg, buf, count)) -+ if (count > sizeof msg || copy_from_user(msg, buf, count)) - return -EFAULT; - } else - memcpy(msg, buf, count); diff --git a/drivers/isdn/mISDN/dsp.h b/drivers/isdn/mISDN/dsp.h index fc1733a..27bf261 100644 --- a/drivers/isdn/mISDN/dsp.h @@ -53381,7 +53726,7 @@ index e3abebc9..6a35328 100644 /* If the entry's not present, there's nothing to release. */ if (pmd_flags(*spmd) & _PAGE_PRESENT) { diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c -index 6a4cd77..c9e2d9f 100644 +index adc162c..5ecc00b 100644 --- a/drivers/lguest/x86/core.c +++ b/drivers/lguest/x86/core.c @@ -60,7 +60,7 @@ static struct { @@ -53407,7 +53752,7 @@ index 6a4cd77..c9e2d9f 100644 /* * Set up the Guest's page tables to see this CPU's pages (and no * other CPU's pages). -@@ -494,7 +500,7 @@ void __init lguest_arch_host_init(void) +@@ -498,7 +504,7 @@ void __init lguest_arch_host_init(void) * compiled-in switcher code and the high-mapped copy we just made. */ for (i = 0; i < IDT_ENTRIES; i++) @@ -53416,7 +53761,7 @@ index 6a4cd77..c9e2d9f 100644 /* * Set up the Switcher's per-cpu areas. -@@ -577,7 +583,7 @@ void __init lguest_arch_host_init(void) +@@ -581,7 +587,7 @@ void __init lguest_arch_host_init(void) * it will be undisturbed when we switch. To change %cs and jump we * need this structure to feed to Intel's "lcall" instruction. */ @@ -53488,10 +53833,10 @@ index 40634b0..4f5855e 100644 // Every interrupt can come to us here // But we must truly tell each apart. diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c -index b7ddfb3..c59ec04 100644 +index 3ab6495..457e2ea 100644 --- a/drivers/lightnvm/rrpc.c +++ b/drivers/lightnvm/rrpc.c -@@ -231,7 +231,7 @@ static void rrpc_put_blks(struct rrpc *rrpc) +@@ -241,7 +241,7 @@ static void rrpc_put_blks(struct rrpc *rrpc) static struct rrpc_lun *get_next_lun(struct rrpc *rrpc) { @@ -53500,20 +53845,20 @@ index b7ddfb3..c59ec04 100644 return &rrpc->luns[next % rrpc->nr_luns]; } -@@ -1337,7 +1337,7 @@ static void *rrpc_init(struct nvm_dev *dev, struct gendisk *tdisk, +@@ -1390,7 +1390,7 @@ static void *rrpc_init(struct nvm_dev *dev, struct gendisk *tdisk, rrpc->nr_luns = lun_end - lun_begin + 1; /* simple round-robin strategy */ - atomic_set(&rrpc->next_lun, -1); + atomic_set_unchecked(&rrpc->next_lun, -1); - ret = rrpc_luns_init(rrpc, lun_begin, lun_end); - if (ret) { + ret = rrpc_area_init(rrpc, &soffset); + if (ret < 0) { diff --git a/drivers/lightnvm/rrpc.h b/drivers/lightnvm/rrpc.h -index f7b3733..0bed14d 100644 +index 2653484..d581105 100644 --- a/drivers/lightnvm/rrpc.h +++ b/drivers/lightnvm/rrpc.h -@@ -110,7 +110,7 @@ struct rrpc { +@@ -111,7 +111,7 @@ struct rrpc { /* Write strategy variables. Move these into each for structure for each * strategy */ @@ -54372,10 +54717,10 @@ index b9346cd..708ea8f 100644 closure_bio_submit(&io->bio, cl); diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c -index d80cce4..d7f15c4 100644 +index 3fe86b5..fd3b459 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c -@@ -1927,7 +1927,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap) +@@ -1928,7 +1928,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap) chunk_kb ? "KB" : "B"); if (bitmap->storage.file) { seq_printf(seq, ", file: "); @@ -54385,7 +54730,7 @@ index d80cce4..d7f15c4 100644 seq_printf(seq, "\n"); diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c -index bb9b92e..001e258 100644 +index ee0510f..69457f6 100644 --- a/drivers/md/dm-cache-target.c +++ b/drivers/md/dm-cache-target.c @@ -118,7 +118,7 @@ static void iot_io_end(struct io_tracker *iot, sector_t len) @@ -54684,10 +55029,10 @@ index bb9b92e..001e258 100644 if (writethrough_mode(&cache->features)) diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c -index 80a4395..a5a8981 100644 +index 2adf81d..c3e8e3c 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c -@@ -1773,7 +1773,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param) +@@ -1774,7 +1774,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param) cmd == DM_LIST_VERSIONS_CMD) return 0; @@ -54710,7 +55055,7 @@ index a090121..9f14702 100644 case STATUSTYPE_TABLE: /* The string you would use to construct this array */ diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c -index f2a363a..9f4763b 100644 +index b3ccf1e..c3a34f3 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c @@ -42,7 +42,7 @@ enum dm_raid1_error { @@ -54861,7 +55206,7 @@ index 797ddb9..9595c24 100644 schedule_work(&sc->trigger_event); } diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c -index cb5d0da..a06db6d 100644 +index f9e8f0b..a305122 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -305,7 +305,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev, @@ -54874,7 +55219,7 @@ index cb5d0da..a06db6d 100644 "start=%llu, len=%llu, dev_size=%llu", dm_device_name(ti->table->md), bdevname(bdev, b), diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c -index 185010d..1cc08ad9 100644 +index 43824d7..fb6a7b0 100644 --- a/drivers/md/dm-thin-metadata.c +++ b/drivers/md/dm-thin-metadata.c @@ -405,7 +405,7 @@ static void __setup_btree_details(struct dm_pool_metadata *pmd) @@ -54896,22 +55241,21 @@ index 185010d..1cc08ad9 100644 pmd->bl_info.value_type.inc = data_block_inc; pmd->bl_info.value_type.dec = data_block_dec; diff --git a/drivers/md/dm.c b/drivers/md/dm.c -index c338aeb..671c671 100644 +index 3d3ac13..4a7d0f3 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c -@@ -194,9 +194,9 @@ struct mapped_device { - /* +@@ -170,8 +170,8 @@ struct mapped_device { * Event handling. */ -- atomic_t event_nr; -+ atomic_unchecked_t event_nr; wait_queue_head_t eventq; +- atomic_t event_nr; - atomic_t uevent_seq; ++ atomic_unchecked_t event_nr; + atomic_unchecked_t uevent_seq; struct list_head uevent_list; spinlock_t uevent_lock; /* Protect access to uevent_list */ -@@ -735,14 +735,16 @@ static void queue_io(struct mapped_device *md, struct bio *bio) +@@ -772,14 +772,16 @@ static void queue_io(struct mapped_device *md, struct bio *bio) * function to access the md->map field, and make sure they call * dm_put_live_table() when finished. */ @@ -54930,7 +55274,7 @@ index c338aeb..671c671 100644 { srcu_read_unlock(&md->io_barrier, srcu_idx); } -@@ -757,13 +759,15 @@ void dm_sync_table(struct mapped_device *md) +@@ -794,13 +796,15 @@ void dm_sync_table(struct mapped_device *md) * A fast alternative to dm_get_live_table/dm_put_live_table. * The caller must not block between these two functions. */ @@ -54948,7 +55292,7 @@ index c338aeb..671c671 100644 { rcu_read_unlock(); } -@@ -2316,8 +2320,8 @@ static struct mapped_device *alloc_dev(int minor) +@@ -2371,8 +2375,8 @@ static struct mapped_device *alloc_dev(int minor) spin_lock_init(&md->deferred_lock); atomic_set(&md->holders, 1); atomic_set(&md->open_count, 0); @@ -54959,7 +55303,7 @@ index c338aeb..671c671 100644 INIT_LIST_HEAD(&md->uevent_list); INIT_LIST_HEAD(&md->table_devices); spin_lock_init(&md->uevent_lock); -@@ -2458,7 +2462,7 @@ static void event_callback(void *context) +@@ -2515,7 +2519,7 @@ static void event_callback(void *context) dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj); @@ -54968,7 +55312,7 @@ index c338aeb..671c671 100644 wake_up(&md->eventq); } -@@ -3401,18 +3405,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action, +@@ -3453,18 +3457,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action, uint32_t dm_next_uevent_seq(struct mapped_device *md) { @@ -54991,7 +55335,7 @@ index c338aeb..671c671 100644 void dm_uevent_add(struct mapped_device *md, struct list_head *elist) diff --git a/drivers/md/md.c b/drivers/md/md.c -index 7551278..85eb4f4 100644 +index 85b16aa..99b84b1 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -198,10 +198,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev); @@ -55007,7 +55351,7 @@ index 7551278..85eb4f4 100644 wake_up(&md_event_waiters); } EXPORT_SYMBOL_GPL(md_new_event); -@@ -1426,7 +1426,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ +@@ -1430,7 +1430,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) && (le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET)) rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset); @@ -55016,7 +55360,7 @@ index 7551278..85eb4f4 100644 rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256; bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1; -@@ -1695,7 +1695,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev) +@@ -1699,7 +1699,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev) else sb->resync_offset = cpu_to_le64(0); @@ -55025,7 +55369,7 @@ index 7551278..85eb4f4 100644 sb->raid_disks = cpu_to_le32(mddev->raid_disks); sb->size = cpu_to_le64(mddev->dev_sectors); -@@ -2710,7 +2710,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store); +@@ -2714,7 +2714,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store); static ssize_t errors_show(struct md_rdev *rdev, char *page) { @@ -55034,7 +55378,7 @@ index 7551278..85eb4f4 100644 } static ssize_t -@@ -2722,7 +2722,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len) +@@ -2726,7 +2726,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len) rv = kstrtouint(buf, 10, &n); if (rv < 0) return rv; @@ -55043,7 +55387,7 @@ index 7551278..85eb4f4 100644 return len; } static struct rdev_sysfs_entry rdev_errors = -@@ -3172,8 +3172,8 @@ int md_rdev_init(struct md_rdev *rdev) +@@ -3176,8 +3176,8 @@ int md_rdev_init(struct md_rdev *rdev) rdev->sb_loaded = 0; rdev->bb_page = NULL; atomic_set(&rdev->nr_pending, 0); @@ -55054,7 +55398,7 @@ index 7551278..85eb4f4 100644 INIT_LIST_HEAD(&rdev->same_set); init_waitqueue_head(&rdev->blocked_wait); -@@ -4390,7 +4390,7 @@ mismatch_cnt_show(struct mddev *mddev, char *page) +@@ -4394,7 +4394,7 @@ mismatch_cnt_show(struct mddev *mddev, char *page) { return sprintf(page, "%llu\n", (unsigned long long) @@ -55063,7 +55407,7 @@ index 7551278..85eb4f4 100644 } static struct md_sysfs_entry md_mismatches = __ATTR_RO(mismatch_cnt); -@@ -5078,7 +5078,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data) +@@ -5082,7 +5082,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data) return NULL; } @@ -55072,7 +55416,7 @@ index 7551278..85eb4f4 100644 { /* val must be "md_*" where * is not all digits. * We allocate an array with a large free minor number, and -@@ -5428,7 +5428,7 @@ static void md_clean(struct mddev *mddev) +@@ -5432,7 +5432,7 @@ static void md_clean(struct mddev *mddev) mddev->new_layout = 0; mddev->new_chunk_sectors = 0; mddev->curr_resync = 0; @@ -55081,7 +55425,7 @@ index 7551278..85eb4f4 100644 mddev->suspend_lo = mddev->suspend_hi = 0; mddev->sync_speed_min = mddev->sync_speed_max = 0; mddev->recovery = 0; -@@ -5843,9 +5843,10 @@ static int get_array_info(struct mddev *mddev, void __user *arg) +@@ -5846,9 +5846,10 @@ static int get_array_info(struct mddev *mddev, void __user *arg) info.patch_version = MD_PATCHLEVEL_VERSION; info.ctime = clamp_t(time64_t, mddev->ctime, 0, U32_MAX); info.level = mddev->level; @@ -55094,7 +55438,7 @@ index 7551278..85eb4f4 100644 info.nr_disks = nr; info.raid_disks = mddev->raid_disks; info.md_minor = mddev->md_minor; -@@ -7408,7 +7409,7 @@ static int md_seq_show(struct seq_file *seq, void *v) +@@ -7411,7 +7412,7 @@ static int md_seq_show(struct seq_file *seq, void *v) spin_unlock(&pers_lock); seq_printf(seq, "\n"); @@ -55103,7 +55447,7 @@ index 7551278..85eb4f4 100644 return 0; } if (v == (void*)2) { -@@ -7508,7 +7509,7 @@ static int md_seq_open(struct inode *inode, struct file *file) +@@ -7511,7 +7512,7 @@ static int md_seq_open(struct inode *inode, struct file *file) return error; seq = file->private_data; @@ -55112,7 +55456,7 @@ index 7551278..85eb4f4 100644 return error; } -@@ -7525,7 +7526,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) +@@ -7528,7 +7529,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) /* always allow read */ mask = POLLIN | POLLRDNORM; @@ -55121,7 +55465,7 @@ index 7551278..85eb4f4 100644 mask |= POLLERR | POLLPRI; return mask; } -@@ -7625,7 +7626,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) +@@ -7628,7 +7629,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; curr_events = (int)part_stat_read(&disk->part0, sectors[0]) + (int)part_stat_read(&disk->part0, sectors[1]) - @@ -55130,7 +55474,7 @@ index 7551278..85eb4f4 100644 /* sync IO will cause sync_io to increase before the disk_stats * as sync_io is counted when a request starts, and * disk_stats is counted when it completes. -@@ -7876,7 +7877,7 @@ void md_do_sync(struct md_thread *thread) +@@ -7879,7 +7880,7 @@ void md_do_sync(struct md_thread *thread) * which defaults to physical size, but can be virtual size */ max_sectors = mddev->resync_max_sectors; @@ -55139,7 +55483,7 @@ index 7551278..85eb4f4 100644 /* we don't use the checkpoint if there's a bitmap */ if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) j = mddev->resync_min; -@@ -8872,11 +8873,11 @@ static __exit void md_exit(void) +@@ -8875,11 +8876,11 @@ static __exit void md_exit(void) subsys_initcall(md_init); module_exit(md_exit) @@ -55226,7 +55570,7 @@ index 3e6d115..ffecdeb 100644 /*----------------------------------------------------------------*/ diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c -index bb5bce0..518482b 100644 +index a7f2b9c..38362f6 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1063,7 +1063,7 @@ static void raid1_make_request(struct mddev *mddev, struct bio * bio) @@ -55347,7 +55691,7 @@ index e3fd725..9e365b2 100644 rdev_dec_pending(rdev, mddev); diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c -index 32d5287..f9e1b58 100644 +index e48c262..e88ac00 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -1110,23 +1110,23 @@ async_copy_data(int frombio, struct bio *bio, struct page **page, @@ -55438,7 +55782,7 @@ index 32d5287..f9e1b58 100644 > conf->max_nr_stripes) printk(KERN_WARNING "md/raid:%s: Too many read errors, failing device %s.\n", -@@ -3744,7 +3752,7 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh, +@@ -3742,7 +3750,7 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh, */ set_bit(STRIPE_INSYNC, &sh->state); else { @@ -55447,7 +55791,7 @@ index 32d5287..f9e1b58 100644 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) /* don't try to repair!! */ set_bit(STRIPE_INSYNC, &sh->state); -@@ -3896,7 +3904,7 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh, +@@ -3894,7 +3902,7 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh, */ } } else { @@ -55470,7 +55814,7 @@ index ce6a711..f87ae51 100644 dev_kfree_skb(skb); return NETDEV_TX_OK; diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c -index 560450a..4a72ed8 100644 +index e1684c5..3fc5b59 100644 --- a/drivers/media/dvb-core/dvbdev.c +++ b/drivers/media/dvb-core/dvbdev.c @@ -428,7 +428,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, @@ -55508,7 +55852,7 @@ index 8814f36..2adf845 100644 return DVBFE_ALGO_HW; } diff --git a/drivers/media/dvb-frontends/cx24117.c b/drivers/media/dvb-frontends/cx24117.c -index 5f77bc8..6d34c94 100644 +index a3f7eb4..6103a23 100644 --- a/drivers/media/dvb-frontends/cx24117.c +++ b/drivers/media/dvb-frontends/cx24117.c @@ -1555,7 +1555,7 @@ static int cx24117_tune(struct dvb_frontend *fe, bool re_tune, @@ -55521,7 +55865,7 @@ index 5f77bc8..6d34c94 100644 return DVBFE_ALGO_HW; } diff --git a/drivers/media/dvb-frontends/cx24120.c b/drivers/media/dvb-frontends/cx24120.c -index 3b0ef52..75afcce 100644 +index 066ee38..193d707 100644 --- a/drivers/media/dvb-frontends/cx24120.c +++ b/drivers/media/dvb-frontends/cx24120.c @@ -1492,7 +1492,7 @@ static int cx24120_tune(struct dvb_frontend *fe, bool re_tune, @@ -55534,7 +55878,7 @@ index 3b0ef52..75afcce 100644 return DVBFE_ALGO_HW; } diff --git a/drivers/media/dvb-frontends/cx24123.c b/drivers/media/dvb-frontends/cx24123.c -index 0fe7fb1..b0bed47 100644 +index 113b094..c9424e6 100644 --- a/drivers/media/dvb-frontends/cx24123.c +++ b/drivers/media/dvb-frontends/cx24123.c @@ -1009,7 +1009,7 @@ static int cx24123_tune(struct dvb_frontend *fe, @@ -55547,10 +55891,10 @@ index 0fe7fb1..b0bed47 100644 return DVBFE_ALGO_HW; } diff --git a/drivers/media/dvb-frontends/cxd2820r_core.c b/drivers/media/dvb-frontends/cxd2820r_core.c -index 24a457d..b206eca 100644 +index 314d3b8..e2257bd 100644 --- a/drivers/media/dvb-frontends/cxd2820r_core.c +++ b/drivers/media/dvb-frontends/cxd2820r_core.c -@@ -571,7 +571,7 @@ error: +@@ -572,7 +572,7 @@ error: return DVBFE_ALGO_SEARCH_ERROR; } @@ -55560,7 +55904,7 @@ index 24a457d..b206eca 100644 return DVBFE_ALGO_CUSTOM; } diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h -index 6ae9899..07d8543 100644 +index d5dfafb..b7ed9d9 100644 --- a/drivers/media/dvb-frontends/dib3000.h +++ b/drivers/media/dvb-frontends/dib3000.h @@ -39,7 +39,7 @@ struct dib_fe_xfer_ops @@ -55599,7 +55943,7 @@ index 2b8b4b1..8cef451 100644 #if IS_REACHABLE(CONFIG_DVB_DIB8000) void *dib8000_attach(struct dib8000_ops *ops); diff --git a/drivers/media/dvb-frontends/hd29l2.c b/drivers/media/dvb-frontends/hd29l2.c -index 40e359f..550aea4 100644 +index 1c7eb47..c1cd6b8 100644 --- a/drivers/media/dvb-frontends/hd29l2.c +++ b/drivers/media/dvb-frontends/hd29l2.c @@ -555,7 +555,7 @@ err: @@ -55612,7 +55956,7 @@ index 40e359f..550aea4 100644 return DVBFE_ALGO_CUSTOM; } diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c -index 721fbc0..fe21cc9 100644 +index 179c26e..af482fe 100644 --- a/drivers/media/dvb-frontends/lgdt3306a.c +++ b/drivers/media/dvb-frontends/lgdt3306a.c @@ -1734,7 +1734,7 @@ static int lgdt3306a_get_tune_settings(struct dvb_frontend *fe, @@ -55625,7 +55969,7 @@ index 721fbc0..fe21cc9 100644 enum fe_status status = 0; int i, ret; diff --git a/drivers/media/dvb-frontends/mt312.c b/drivers/media/dvb-frontends/mt312.c -index c36e676..6c3f140 100644 +index fc08429..c816697 100644 --- a/drivers/media/dvb-frontends/mt312.c +++ b/drivers/media/dvb-frontends/mt312.c @@ -381,7 +381,7 @@ static int mt312_send_master_cmd(struct dvb_frontend *fe, @@ -55656,7 +56000,7 @@ index c36e676..6c3f140 100644 struct mt312_state *state = fe->demodulator_priv; const u8 volt_tab[3] = { 0x00, 0x40, 0x00 }; diff --git a/drivers/media/dvb-frontends/s921.c b/drivers/media/dvb-frontends/s921.c -index d6a8fa6..b525f9c 100644 +index b5e3d90..bd00dc6 100644 --- a/drivers/media/dvb-frontends/s921.c +++ b/drivers/media/dvb-frontends/s921.c @@ -464,7 +464,7 @@ static int s921_tune(struct dvb_frontend *fe, @@ -55669,7 +56013,7 @@ index d6a8fa6..b525f9c 100644 return DVBFE_ALGO_HW; } diff --git a/drivers/media/pci/bt8xx/dst.c b/drivers/media/pci/bt8xx/dst.c -index 4a90eee..2cec315 100644 +index 35bc9b2..d5072b1 100644 --- a/drivers/media/pci/bt8xx/dst.c +++ b/drivers/media/pci/bt8xx/dst.c @@ -1683,7 +1683,7 @@ static int dst_tune_frontend(struct dvb_frontend* fe, @@ -56172,7 +56516,7 @@ index 0e65a85..3fa6f5c 100644 static int shark_write_reg(struct radio_tea5777 *tea, u64 reg) { diff --git a/drivers/media/radio/radio-si476x.c b/drivers/media/radio/radio-si476x.c -index 859f0c0..46e3c75 100644 +index 271f725..35e8c8f 100644 --- a/drivers/media/radio/radio-si476x.c +++ b/drivers/media/radio/radio-si476x.c @@ -1445,7 +1445,7 @@ static int si476x_radio_probe(struct platform_device *pdev) @@ -56185,11 +56529,11 @@ index 859f0c0..46e3c75 100644 radio = devm_kzalloc(&pdev->dev, sizeof(*radio), GFP_KERNEL); if (!radio) diff --git a/drivers/media/radio/wl128x/fmdrv_common.c b/drivers/media/radio/wl128x/fmdrv_common.c -index ebc73b0..ca6babf 100644 +index 3f9e6df..e49ca28 100644 --- a/drivers/media/radio/wl128x/fmdrv_common.c +++ b/drivers/media/radio/wl128x/fmdrv_common.c @@ -71,7 +71,7 @@ module_param(default_rds_buf, uint, 0444); - MODULE_PARM_DESC(rds_buf, "RDS buffer entries"); + MODULE_PARM_DESC(default_rds_buf, "RDS buffer entries"); /* Radio Nr */ -static u32 radio_nr = -1; @@ -56625,7 +56969,7 @@ index b3ec743..9c0e418 100644 static void cinergyt2_fe_release(struct dvb_frontend *fe) diff --git a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c -index 733a7ff..f8b52e3 100644 +index dd048a7..717a7b2 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb-firmware.c +++ b/drivers/media/usb/dvb-usb/dvb-usb-firmware.c @@ -35,42 +35,57 @@ static int usb_cypress_writemem(struct usb_device *udev,u16 addr,u8 *data, u8 le @@ -56698,10 +57042,10 @@ index 733a7ff..f8b52e3 100644 } EXPORT_SYMBOL(usb_cypress_load_firmware); diff --git a/drivers/media/usb/dvb-usb/technisat-usb2.c b/drivers/media/usb/dvb-usb/technisat-usb2.c -index 6c3c477..6c435a4 100644 +index d9f3262..4370dbd 100644 --- a/drivers/media/usb/dvb-usb/technisat-usb2.c +++ b/drivers/media/usb/dvb-usb/technisat-usb2.c -@@ -87,8 +87,11 @@ struct technisat_usb2_state { +@@ -89,8 +89,11 @@ struct technisat_usb2_state { static int technisat_usb2_i2c_access(struct usb_device *udev, u8 device_addr, u8 *tx, u8 txlen, u8 *rx, u8 rxlen) { @@ -56715,7 +57059,7 @@ index 6c3c477..6c435a4 100644 deb_i2c("i2c-access: %02x, tx: ", device_addr); debug_dump(tx, txlen, deb_i2c); -@@ -121,7 +124,8 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, +@@ -123,7 +126,8 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, if (ret < 0) { err("i2c-error: out failed %02x = %d", device_addr, ret); @@ -56725,7 +57069,7 @@ index 6c3c477..6c435a4 100644 } ret = usb_bulk_msg(udev, -@@ -129,7 +133,8 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, +@@ -131,7 +135,8 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, b, 64, &actual_length, 1000); if (ret < 0) { err("i2c-error: in failed %02x = %d", device_addr, ret); @@ -56735,7 +57079,7 @@ index 6c3c477..6c435a4 100644 } if (b[0] != I2C_STATUS_OK) { -@@ -137,8 +142,10 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, +@@ -139,8 +144,10 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, /* handle tuner-i2c-nak */ if (!(b[0] == I2C_STATUS_NAK && device_addr == 0x60 @@ -56748,7 +57092,7 @@ index 6c3c477..6c435a4 100644 } deb_i2c("status: %d, ", b[0]); -@@ -152,7 +159,9 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, +@@ -154,7 +161,9 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, deb_i2c("\n"); @@ -56759,152 +57103,8 @@ index 6c3c477..6c435a4 100644 } static int technisat_usb2_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msg, -@@ -224,14 +233,16 @@ static int technisat_usb2_set_led(struct dvb_usb_device *d, int red, enum techni - { - int ret; - -- u8 led[8] = { -- red ? SET_RED_LED_VENDOR_REQUEST : SET_GREEN_LED_VENDOR_REQUEST, -- 0 -- }; -+ u8 *led = kzalloc(8, GFP_KERNEL); -+ -+ if (led == NULL) -+ return -ENOMEM; - - if (disable_led_control && state != TECH_LED_OFF) - return 0; - -+ led[0] = red ? SET_RED_LED_VENDOR_REQUEST : SET_GREEN_LED_VENDOR_REQUEST; -+ - switch (state) { - case TECH_LED_ON: - led[1] = 0x82; -@@ -263,16 +274,22 @@ static int technisat_usb2_set_led(struct dvb_usb_device *d, int red, enum techni - red ? SET_RED_LED_VENDOR_REQUEST : SET_GREEN_LED_VENDOR_REQUEST, - USB_TYPE_VENDOR | USB_DIR_OUT, - 0, 0, -- led, sizeof(led), 500); -+ led, 8, 500); - - mutex_unlock(&d->i2c_mutex); -+ -+ kfree(led); -+ - return ret; - } - - static int technisat_usb2_set_led_timer(struct dvb_usb_device *d, u8 red, u8 green) - { - int ret; -- u8 b = 0; -+ u8 *b = kzalloc(1, GFP_KERNEL); -+ -+ if (b == NULL) -+ return -ENOMEM; - - if (mutex_lock_interruptible(&d->i2c_mutex) < 0) - return -EAGAIN; -@@ -281,10 +298,12 @@ static int technisat_usb2_set_led_timer(struct dvb_usb_device *d, u8 red, u8 gre - SET_LED_TIMER_DIVIDER_VENDOR_REQUEST, - USB_TYPE_VENDOR | USB_DIR_OUT, - (red << 8) | green, 0, -- &b, 1, 500); -+ b, 1, 500); - - mutex_unlock(&d->i2c_mutex); - -+ kfree(b); -+ - return ret; - } - -@@ -328,7 +347,7 @@ static int technisat_usb2_identify_state(struct usb_device *udev, - struct dvb_usb_device_description **desc, int *cold) - { - int ret; -- u8 version[3]; -+ u8 *version = kmalloc(3, GFP_KERNEL); - - /* first select the interface */ - if (usb_set_interface(udev, 0, 1) != 0) -@@ -338,11 +357,14 @@ static int technisat_usb2_identify_state(struct usb_device *udev, - - *cold = 0; /* by default do not download a firmware - just in case something is wrong */ - -+ if (version == NULL) -+ return 0; -+ - ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), - GET_VERSION_INFO_VENDOR_REQUEST, - USB_TYPE_VENDOR | USB_DIR_IN, - 0, 0, -- version, sizeof(version), 500); -+ version, 3, 500); - - if (ret < 0) - *cold = 1; -@@ -351,6 +373,8 @@ static int technisat_usb2_identify_state(struct usb_device *udev, - *cold = 0; - } - -+ kfree(version); -+ - return 0; - } - -@@ -594,10 +618,15 @@ static int technisat_usb2_frontend_attach(struct dvb_usb_adapter *a) - - static int technisat_usb2_get_ir(struct dvb_usb_device *d) - { -- u8 buf[62], *b; -+ u8 *buf, *b; - int ret; - struct ir_raw_event ev; - -+ buf = kmalloc(62, GFP_KERNEL); -+ -+ if (buf == NULL) -+ return -ENOMEM; -+ - buf[0] = GET_IR_DATA_VENDOR_REQUEST; - buf[1] = 0x08; - buf[2] = 0x8f; -@@ -620,16 +649,20 @@ static int technisat_usb2_get_ir(struct dvb_usb_device *d) - GET_IR_DATA_VENDOR_REQUEST, - USB_TYPE_VENDOR | USB_DIR_IN, - 0x8080, 0, -- buf, sizeof(buf), 500); -+ buf, 62, 500); - - unlock: - mutex_unlock(&d->i2c_mutex); - -- if (ret < 0) -+ if (ret < 0) { -+ kfree(buf); - return ret; -+ } - -- if (ret == 1) -+ if (ret == 1) { -+ kfree(buf); - return 0; /* no key pressed */ -+ } - - /* decoding */ - b = buf+1; -@@ -656,6 +689,8 @@ unlock: - - ir_raw_event_handle(d->rc_dev); - -+ kfree(buf); -+ - return 1; - } - diff --git a/drivers/media/usb/pvrusb2/pvrusb2-context.c b/drivers/media/usb/pvrusb2/pvrusb2-context.c -index fd888a6..0d01210 100644 +index c45f307..7d79261 100644 --- a/drivers/media/usb/pvrusb2/pvrusb2-context.c +++ b/drivers/media/usb/pvrusb2/pvrusb2-context.c @@ -103,8 +103,10 @@ static void pvr2_context_destroy(struct pvr2_context *mp) @@ -56957,7 +57157,7 @@ index 8c95793..2309b9e 100644 ret = pvr2_stream_set_buffer_count(stream, PVR2_DVB_BUFFER_COUNT); if (ret < 0) return ret; diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c -index 0533ef2..2248d97 100644 +index 1a093e5..f865fff 100644 --- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c +++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c @@ -2097,7 +2097,7 @@ static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw) @@ -57008,10 +57208,10 @@ index 81f788b..9619f47 100644 if ((ret = pvr2_hdw_set_streaming(hdw,!0)) < 0) return ret; return pvr2_ioread_set_enabled(fh->rhp,!0); diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c -index 4e71488..1bcd8a5 100644 +index 451e84e9..0f7ff4f 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c -@@ -2058,7 +2058,7 @@ static int uvc_reset_resume(struct usb_interface *intf) +@@ -2078,7 +2078,7 @@ static int uvc_reset_resume(struct usb_interface *intf) * Module parameters */ @@ -57020,7 +57220,7 @@ index 4e71488..1bcd8a5 100644 { if (uvc_clock_param == CLOCK_MONOTONIC) return sprintf(buffer, "CLOCK_MONOTONIC"); -@@ -2066,7 +2066,7 @@ static int uvc_clock_param_get(char *buffer, struct kernel_param *kp) +@@ -2086,7 +2086,7 @@ static int uvc_clock_param_get(char *buffer, struct kernel_param *kp) return sprintf(buffer, "CLOCK_REALTIME"); } @@ -57117,10 +57317,10 @@ index 06fa5f1..2231dda 100644 if (basename[len - 1] >= '0' && basename[len - 1] <= '9') diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c -index 8a018c6..83f25a7 100644 +index 170dd68..19b339d 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c -@@ -2372,49 +2372,222 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops, +@@ -2406,49 +2406,216 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops, return -ENOTTY; } @@ -57196,12 +57396,6 @@ index 8a018c6..83f25a7 100644 + return ops->vidioc_s_audout(file, fh, arg); +} + -+static int v4l_vidioc_s_modulator(const struct v4l2_ioctl_ops *ops, -+ struct file *file, void *fh, void *arg) -+{ -+ return ops->vidioc_s_modulator(file, fh, arg); -+} -+ +static int v4l_vidioc_g_selection(const struct v4l2_ioctl_ops *ops, + struct file *file, void *fh, void *arg) +{ @@ -57363,7 +57557,7 @@ index 8a018c6..83f25a7 100644 .debug = _debug, \ } -@@ -2425,17 +2598,17 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { +@@ -2459,17 +2626,17 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { IOCTL_INFO_FNC(VIDIOC_S_FMT, v4l_s_fmt, v4l_print_format, INFO_FL_PRIO), IOCTL_INFO_FNC(VIDIOC_REQBUFS, v4l_reqbufs, v4l_print_requestbuffers, INFO_FL_PRIO | INFO_FL_QUEUE), IOCTL_INFO_FNC(VIDIOC_QUERYBUF, v4l_querybuf, v4l_print_buffer, INFO_FL_QUEUE | INFO_FL_CLEAR(v4l2_buffer, length)), @@ -57385,7 +57579,7 @@ index 8a018c6..83f25a7 100644 IOCTL_INFO_FNC(VIDIOC_S_STD, v4l_s_std, v4l_print_std, INFO_FL_PRIO), IOCTL_INFO_FNC(VIDIOC_ENUMSTD, v4l_enumstd, v4l_print_standard, INFO_FL_CLEAR(v4l2_standard, index)), IOCTL_INFO_FNC(VIDIOC_ENUMINPUT, v4l_enuminput, v4l_print_enuminput, INFO_FL_CLEAR(v4l2_input, index)), -@@ -2443,19 +2616,19 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { +@@ -2477,19 +2644,19 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { IOCTL_INFO_FNC(VIDIOC_S_CTRL, v4l_s_ctrl, v4l_print_control, INFO_FL_PRIO | INFO_FL_CTRL), IOCTL_INFO_FNC(VIDIOC_G_TUNER, v4l_g_tuner, v4l_print_tuner, INFO_FL_CLEAR(v4l2_tuner, index)), IOCTL_INFO_FNC(VIDIOC_S_TUNER, v4l_s_tuner, v4l_print_tuner, INFO_FL_PRIO), @@ -57413,7 +57607,7 @@ index 8a018c6..83f25a7 100644 IOCTL_INFO_FNC(VIDIOC_G_MODULATOR, v4l_g_modulator, v4l_print_modulator, INFO_FL_CLEAR(v4l2_modulator, index)), IOCTL_INFO_FNC(VIDIOC_S_MODULATOR, v4l_s_modulator, v4l_print_modulator, INFO_FL_PRIO), IOCTL_INFO_FNC(VIDIOC_G_FREQUENCY, v4l_g_frequency, v4l_print_frequency, INFO_FL_CLEAR(v4l2_frequency, tuner)), -@@ -2463,14 +2636,14 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { +@@ -2497,14 +2664,14 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { IOCTL_INFO_FNC(VIDIOC_CROPCAP, v4l_cropcap, v4l_print_cropcap, INFO_FL_CLEAR(v4l2_cropcap, type)), IOCTL_INFO_FNC(VIDIOC_G_CROP, v4l_g_crop, v4l_print_crop, INFO_FL_CLEAR(v4l2_crop, type)), IOCTL_INFO_FNC(VIDIOC_S_CROP, v4l_s_crop, v4l_print_crop, INFO_FL_PRIO), @@ -57434,7 +57628,7 @@ index 8a018c6..83f25a7 100644 IOCTL_INFO_FNC(VIDIOC_G_PRIORITY, v4l_g_priority, v4l_print_u32, 0), IOCTL_INFO_FNC(VIDIOC_S_PRIORITY, v4l_s_priority, v4l_print_u32, INFO_FL_PRIO), IOCTL_INFO_FNC(VIDIOC_G_SLICED_VBI_CAP, v4l_g_sliced_vbi_cap, v4l_print_sliced_vbi_cap, INFO_FL_CLEAR(v4l2_sliced_vbi_cap, type)), -@@ -2478,26 +2651,26 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { +@@ -2512,26 +2679,26 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { IOCTL_INFO_FNC(VIDIOC_G_EXT_CTRLS, v4l_g_ext_ctrls, v4l_print_ext_controls, INFO_FL_CTRL), IOCTL_INFO_FNC(VIDIOC_S_EXT_CTRLS, v4l_s_ext_ctrls, v4l_print_ext_controls, INFO_FL_PRIO | INFO_FL_CTRL), IOCTL_INFO_FNC(VIDIOC_TRY_EXT_CTRLS, v4l_try_ext_ctrls, v4l_print_ext_controls, INFO_FL_CTRL), @@ -57473,7 +57667,7 @@ index 8a018c6..83f25a7 100644 IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0), IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)), IOCTL_INFO_FNC(VIDIOC_QUERY_EXT_CTRL, v4l_query_ext_ctrl, v4l_print_query_ext_ctrl, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_query_ext_ctrl, id)), -@@ -2566,7 +2739,7 @@ static long __video_do_ioctl(struct file *file, +@@ -2600,7 +2767,7 @@ static long __video_do_ioctl(struct file *file, struct video_device *vfd = video_devdata(file); const struct v4l2_ioctl_ops *ops = vfd->ioctl_ops; bool write_only = false; @@ -57482,7 +57676,7 @@ index 8a018c6..83f25a7 100644 const struct v4l2_ioctl_info *info; void *fh = file->private_data; struct v4l2_fh *vfh = NULL; -@@ -2602,14 +2775,8 @@ static long __video_do_ioctl(struct file *file, +@@ -2636,14 +2803,8 @@ static long __video_do_ioctl(struct file *file, } write_only = _IOC_DIR(cmd) == _IOC_WRITE; @@ -57499,7 +57693,7 @@ index 8a018c6..83f25a7 100644 } else if (!ops->vidioc_default) { ret = -ENOTTY; } else { -@@ -2657,7 +2824,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, +@@ -2691,7 +2852,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, ret = -EINVAL; break; } @@ -57508,7 +57702,7 @@ index 8a018c6..83f25a7 100644 *kernel_ptr = (void **)&buf->m.planes; *array_size = sizeof(struct v4l2_plane) * buf->length; ret = 1; -@@ -2674,7 +2841,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, +@@ -2708,7 +2869,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, ret = -EINVAL; break; } @@ -57517,7 +57711,7 @@ index 8a018c6..83f25a7 100644 *kernel_ptr = (void **)&edid->edid; *array_size = edid->blocks * 128; ret = 1; -@@ -2692,7 +2859,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, +@@ -2726,7 +2887,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, ret = -EINVAL; break; } @@ -57526,7 +57720,7 @@ index 8a018c6..83f25a7 100644 *kernel_ptr = (void **)&ctrls->controls; *array_size = sizeof(struct v4l2_ext_control) * ctrls->count; -@@ -2793,7 +2960,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg, +@@ -2827,7 +2988,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg, } if (has_array_args) { @@ -57536,7 +57730,7 @@ index 8a018c6..83f25a7 100644 err = -EFAULT; goto out_array_args; diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c -index 6515dfc..3d39b80 100644 +index 21825dd..6e29aa3 100644 --- a/drivers/memory/omap-gpmc.c +++ b/drivers/memory/omap-gpmc.c @@ -232,7 +232,6 @@ struct omap3_gpmc_regs { @@ -57547,7 +57741,7 @@ index 6515dfc..3d39b80 100644 static int gpmc_irq_start; static struct resource gpmc_mem_root; -@@ -1145,6 +1144,17 @@ static void gpmc_irq_noop(struct irq_data *data) { } +@@ -1165,6 +1164,17 @@ static void gpmc_irq_noop(struct irq_data *data) { } static unsigned int gpmc_irq_noop_ret(struct irq_data *data) { return 0; } @@ -57565,7 +57759,7 @@ index 6515dfc..3d39b80 100644 static int gpmc_setup_irq(void) { int i; -@@ -1159,15 +1169,6 @@ static int gpmc_setup_irq(void) +@@ -1179,15 +1189,6 @@ static int gpmc_setup_irq(void) return gpmc_irq_start; } @@ -57582,7 +57776,7 @@ index 6515dfc..3d39b80 100644 gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT; diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c -index 5dcc031..d5e16c2 100644 +index 5537f8d..f990a1d 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c @@ -99,7 +99,7 @@ module_param(mpt_channel_mapping, int, 0); @@ -57603,7 +57797,7 @@ index 5dcc031..d5e16c2 100644 { int ret = param_set_int(val, kp); MPT_ADAPTER *ioc; -@@ -6722,8 +6722,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) +@@ -6748,8 +6748,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) seq_printf(m, " MaxChainDepth = 0x%02x frames\n", ioc->facts.MaxChainDepth); seq_printf(m, " MinBlockSize = 0x%02x bytes\n", 4*ioc->facts.BlockSize); @@ -57617,7 +57811,7 @@ index 5dcc031..d5e16c2 100644 /* * Rounding UP to nearest 4-kB boundary here... */ -@@ -6736,7 +6741,11 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) +@@ -6762,7 +6767,11 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) ioc->facts.GlobalCredits); seq_printf(m, " Frames @ 0x%p (Dma @ 0x%p)\n", @@ -57775,10 +57969,10 @@ index 40e51b0..af35565 100644 for (i = irq_base; i < irq_end; i++) { irq_set_chip_and_handler(i, &twl4030_irq_chip, diff --git a/drivers/misc/c2port/core.c b/drivers/misc/c2port/core.c -index cc8645b..ab85ae4 100644 +index 1922cb8..e14fb42 100644 --- a/drivers/misc/c2port/core.c +++ b/drivers/misc/c2port/core.c -@@ -922,7 +922,9 @@ struct c2port_device *c2port_device_register(char *name, +@@ -918,7 +918,9 @@ struct c2port_device *c2port_device_register(char *name, goto error_idr_alloc; c2dev->id = ret; @@ -57934,6 +58128,28 @@ index 637cc46..4fb1267 100644 #endif } +diff --git a/drivers/misc/panel.c b/drivers/misc/panel.c +index 6030ac5..e498727 100644 +--- a/drivers/misc/panel.c ++++ b/drivers/misc/panel.c +@@ -1983,7 +1983,7 @@ static void panel_process_inputs(void) + } + } + +-static void panel_scan_timer(void) ++static void panel_scan_timer(unsigned long data) + { + if (keypad.enabled && keypad_initialized) { + if (spin_trylock_irq(&pprt_lock)) { +@@ -2019,7 +2019,7 @@ static void init_scan_timer(void) + if (scan_timer.function) + return; /* already started */ + +- setup_timer(&scan_timer, (void *)&panel_scan_timer, 0); ++ setup_timer(&scan_timer, &panel_scan_timer, 0); + scan_timer.expires = jiffies + INPUT_POLL_TIME; + add_timer(&scan_timer); + } diff --git a/drivers/misc/sgi-gru/gruhandles.c b/drivers/misc/sgi-gru/gruhandles.c index 1ee8e82..785f528 100644 --- a/drivers/misc/sgi-gru/gruhandles.c @@ -58378,7 +58594,7 @@ index 71b6455..9cc7886 100644 static struct attribute *uim_attrs[] = { &ldisc_install.attr, diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c -index 7fc9174..bf669b2 100644 +index c032eef..16a2a74 100644 --- a/drivers/mmc/card/mmc_test.c +++ b/drivers/mmc/card/mmc_test.c @@ -2076,8 +2076,8 @@ static int mmc_test_rw_multiple_size(struct mmc_test_card *test, @@ -58393,10 +58609,10 @@ index 7fc9174..bf669b2 100644 if (rw->do_nonblock_req && ((!pre_req && post_req) || (pre_req && !post_req))) { diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h -index f695b58..7b7d017 100644 +index 68d5da2..7cf7308 100644 --- a/drivers/mmc/host/dw_mmc.h +++ b/drivers/mmc/host/dw_mmc.h -@@ -295,5 +295,5 @@ struct dw_mci_drv_data { +@@ -297,5 +297,5 @@ struct dw_mci_drv_data { struct mmc_ios *ios); int (*switch_voltage)(struct mmc_host *mmc, struct mmc_ios *ios); @@ -58404,10 +58620,10 @@ index f695b58..7b7d017 100644 +} __do_const; #endif /* _DW_MMC_H_ */ diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c -index 0d6ca41..bdc6710 100644 +index 2e6c968..0a99c02 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c -@@ -1634,7 +1634,9 @@ static int mmci_probe(struct amba_device *dev, +@@ -1633,7 +1633,9 @@ static int mmci_probe(struct amba_device *dev, mmc->caps |= MMC_CAP_CMD23; if (variant->busy_detect) { @@ -58419,10 +58635,10 @@ index 0d6ca41..bdc6710 100644 mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; mmc->max_busy_timeout = 0; diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c -index f6e4d97..8bd8c05 100644 +index f9ac3bb..4709b44 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c -@@ -2088,7 +2088,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev) +@@ -2091,7 +2091,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev) if (host->pdata->controller_flags & OMAP_HSMMC_BROKEN_MULTIBLOCK_READ) { dev_info(&pdev->dev, "multiblock reads disabled due to 35xx erratum 2.1.1.128; MMC read performance may suffer\n"); @@ -58434,10 +58650,10 @@ index f6e4d97..8bd8c05 100644 device_init_wakeup(&pdev->dev, true); diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c -index f25f292..7f4b03f 100644 +index 2d300d8..35cc03f 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c -@@ -1194,9 +1194,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) +@@ -1190,9 +1190,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) host->ioaddr + 0x6c); } @@ -58485,7 +58701,7 @@ index 9a1a6ff..b8f1a57 100644 if (!ECCBUF_SIZE) { /* We should fall back to a general writev implementation. diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c -index e2c0057..b468819 100644 +index 7c887f1..62fd690 100644 --- a/drivers/mtd/devices/block2mtd.c +++ b/drivers/mtd/devices/block2mtd.c @@ -431,7 +431,7 @@ static int block2mtd_setup2(const char *val) @@ -58609,6 +58825,23 @@ index 556a2df..e771329 100644 { spin_lock(&sbc_gxx_spin); sbc_gxx_page(map, adr); +diff --git a/drivers/mtd/nand/brcmnand/bcm63138_nand.c b/drivers/mtd/nand/brcmnand/bcm63138_nand.c +index 59444b3..91a9451 100644 +--- a/drivers/mtd/nand/brcmnand/bcm63138_nand.c ++++ b/drivers/mtd/nand/brcmnand/bcm63138_nand.c +@@ -81,8 +81,10 @@ static int bcm63138_nand_probe(struct platform_device *pdev) + if (IS_ERR(priv->base)) + return PTR_ERR(priv->base); + +- soc->ctlrdy_ack = bcm63138_nand_intc_ack; +- soc->ctlrdy_set_enabled = bcm63138_nand_intc_set; ++ pax_open_kernel(); ++ const_cast(soc->ctlrdy_ack) = bcm63138_nand_intc_ack; ++ const_cast(soc->ctlrdy_set_enabled) = bcm63138_nand_intc_set; ++ pax_close_kernel(); + + return brcmnand_probe(pdev, soc); + } diff --git a/drivers/mtd/nand/brcmnand/brcmnand.h b/drivers/mtd/nand/brcmnand/brcmnand.h index ef5eabb..2b61d03 100644 --- a/drivers/mtd/nand/brcmnand/brcmnand.h @@ -58622,8 +58855,27 @@ index ef5eabb..2b61d03 100644 static inline void brcmnand_soc_data_bus_prepare(struct brcmnand_soc *soc) { +diff --git a/drivers/mtd/nand/brcmnand/iproc_nand.c b/drivers/mtd/nand/brcmnand/iproc_nand.c +index 585596c..41d7983 100644 +--- a/drivers/mtd/nand/brcmnand/iproc_nand.c ++++ b/drivers/mtd/nand/brcmnand/iproc_nand.c +@@ -120,9 +120,11 @@ static int iproc_nand_probe(struct platform_device *pdev) + if (IS_ERR(priv->ext_base)) + return PTR_ERR(priv->ext_base); + +- soc->ctlrdy_ack = iproc_nand_intc_ack; +- soc->ctlrdy_set_enabled = iproc_nand_intc_set; +- soc->prepare_data_bus = iproc_nand_apb_access; ++ pax_open_kernel(); ++ const_cast(soc->ctlrdy_ack) = iproc_nand_intc_ack; ++ const_cast(soc->ctlrdy_set_enabled) = iproc_nand_intc_set; ++ const_cast(soc->prepare_data_bus) = iproc_nand_apb_access; ++ pax_close_kernel(); + + return brcmnand_probe(pdev, soc); + } diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c -index aa1a616..a47a33d 100644 +index e553aff..62fc6b8 100644 --- a/drivers/mtd/nand/cafe_nand.c +++ b/drivers/mtd/nand/cafe_nand.c @@ -345,7 +345,17 @@ static irqreturn_t cafe_nand_interrupt(int irq, void *id) @@ -58671,10 +58923,10 @@ index 30bf5f6..9bb67d1 100644 #include "denali.h" diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c -index 235ddcb..778a09d 100644 +index 8122c69..96522f2 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c -@@ -386,7 +386,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, enum dma_data_direction dr) +@@ -388,7 +388,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, enum dma_data_direction dr) /* first try to map the upper buffer directly */ if (virt_addr_valid(this->upper_buf) && @@ -58796,10 +59048,10 @@ index b306210..c5345de 100644 struct cfv_info *cfv = netdev_priv(netdev); struct buf_info *buf_info; diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig -index 6d04183..d69aee9 100644 +index 0d40aef..e9a8d91 100644 --- a/drivers/net/can/Kconfig +++ b/drivers/net/can/Kconfig -@@ -98,7 +98,7 @@ config CAN_JANZ_ICAN3 +@@ -81,7 +81,7 @@ config CAN_BFIN config CAN_FLEXCAN tristate "Support for Freescale FLEXCAN based chips" @@ -58926,7 +59178,7 @@ index 69fc840..77a32fc 100644 .setup = dummy_setup, .validate = dummy_validate, diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c -index c89b9ae..66151c0 100644 +index c89b9aee..66151c0 100644 --- a/drivers/net/ethernet/8390/ax88796.c +++ b/drivers/net/ethernet/8390/ax88796.c @@ -834,7 +834,7 @@ static int ax_probe(struct platform_device *pdev) @@ -59235,10 +59487,10 @@ index 7847638..6126840 100644 struct lance_private *lp = netdev_priv(dev); int entry, skblen, len; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h -index b6fa891..31ef157 100644 +index bbef959..999ab1d 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h -@@ -1279,14 +1279,14 @@ do { \ +@@ -1283,14 +1283,14 @@ do { \ * operations, everything works on mask values. */ #define XMDIO_READ(_pdata, _mmd, _reg) \ @@ -59256,11 +59508,11 @@ index b6fa891..31ef157 100644 #define XMDIO_WRITE_BITS(_pdata, _mmd, _reg, _mask, _val) \ diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c -index a6b9899..2e5e972 100644 +index 895d356..b1c866e 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c -@@ -190,7 +190,7 @@ static int xgbe_dcb_ieee_setets(struct net_device *netdev, - +@@ -202,7 +202,7 @@ static int xgbe_dcb_ieee_setets(struct net_device *netdev, + pdata->num_tcs = max_tc + 1; memcpy(pdata->ets, ets, sizeof(*pdata->ets)); - pdata->hw_if.config_dcb_tc(pdata); @@ -59268,7 +59520,7 @@ index a6b9899..2e5e972 100644 return 0; } -@@ -230,7 +230,7 @@ static int xgbe_dcb_ieee_setpfc(struct net_device *netdev, +@@ -249,7 +249,7 @@ static int xgbe_dcb_ieee_setpfc(struct net_device *netdev, memcpy(pdata->pfc, pfc, sizeof(*pdata->pfc)); @@ -59327,10 +59579,10 @@ index b3bc87f..5bdfdd3 100644 + .wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init, +}; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c -index f6a7161..aa98a8b 100644 +index 1babcc1..aa7f8f4e 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c -@@ -2723,7 +2723,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata) +@@ -2816,7 +2816,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata) static int xgbe_init(struct xgbe_prv_data *pdata) { @@ -59339,7 +59591,7 @@ index f6a7161..aa98a8b 100644 int ret; DBGPR("-->xgbe_init\n"); -@@ -2789,106 +2789,101 @@ static int xgbe_init(struct xgbe_prv_data *pdata) +@@ -2882,107 +2882,102 @@ static int xgbe_init(struct xgbe_prv_data *pdata) return 0; } @@ -59504,8 +59756,10 @@ index f6a7161..aa98a8b 100644 + .get_tx_tstamp = xgbe_get_tx_tstamp, /* For Data Center Bridging config */ +- hw_if->config_tc = xgbe_config_tc; - hw_if->config_dcb_tc = xgbe_config_dcb_tc; - hw_if->config_dcb_pfc = xgbe_config_dcb_pfc; ++ .config_tc = xgbe_config_tc, + .config_dcb_tc = xgbe_config_dcb_tc, + .config_dcb_pfc = xgbe_config_dcb_pfc, @@ -59523,7 +59777,7 @@ index f6a7161..aa98a8b 100644 + .set_rss_lookup_table = xgbe_set_rss_lookup_table, +}; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c -index 8a9b493..d41363f 100644 +index ebf9224..9d6192a 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c @@ -245,7 +245,7 @@ static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel, @@ -59741,7 +59995,16 @@ index 8a9b493..d41363f 100644 DBGPR("-->%s\n", __func__); -@@ -1658,7 +1658,7 @@ static int xgbe_set_features(struct net_device *netdev, +@@ -1641,7 +1641,7 @@ static int xgbe_setup_tc(struct net_device *netdev, u32 handle, __be16 proto, + return -EINVAL; + + pdata->num_tcs = tc; +- pdata->hw_if.config_tc(pdata); ++ pdata->hw_if->config_tc(pdata); + + return 0; + } +@@ -1650,7 +1650,7 @@ static int xgbe_set_features(struct net_device *netdev, netdev_features_t features) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -59750,7 +60013,7 @@ index 8a9b493..d41363f 100644 netdev_features_t rxhash, rxcsum, rxvlan, rxvlan_filter; int ret = 0; -@@ -1724,8 +1724,8 @@ struct net_device_ops *xgbe_get_netdev_ops(void) +@@ -1716,8 +1716,8 @@ struct net_device_ops *xgbe_get_netdev_ops(void) static void xgbe_rx_refresh(struct xgbe_channel *channel) { struct xgbe_prv_data *pdata = channel->pdata; @@ -59761,7 +60024,7 @@ index 8a9b493..d41363f 100644 struct xgbe_ring *ring = channel->rx_ring; struct xgbe_ring_data *rdata; -@@ -1802,8 +1802,8 @@ static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata, +@@ -1794,8 +1794,8 @@ static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata, static int xgbe_tx_poll(struct xgbe_channel *channel) { struct xgbe_prv_data *pdata = channel->pdata; @@ -59772,7 +60035,7 @@ index 8a9b493..d41363f 100644 struct xgbe_ring *ring = channel->tx_ring; struct xgbe_ring_data *rdata; struct xgbe_ring_desc *rdesc; -@@ -1873,7 +1873,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) +@@ -1865,7 +1865,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) static int xgbe_rx_poll(struct xgbe_channel *channel, int budget) { struct xgbe_prv_data *pdata = channel->pdata; @@ -59782,7 +60045,7 @@ index 8a9b493..d41363f 100644 struct xgbe_ring_data *rdata; struct xgbe_packet_data *packet; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c -index 6040293..66ba674 100644 +index 11d9f0c..78767ab 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c @@ -206,7 +206,7 @@ static void xgbe_get_ethtool_stats(struct net_device *netdev, @@ -59803,7 +60066,7 @@ index 6040293..66ba674 100644 return ret; } -@@ -356,7 +356,7 @@ static int xgbe_set_settings(struct net_device *netdev, +@@ -368,7 +368,7 @@ static int xgbe_set_settings(struct net_device *netdev, pdata->phy.advertising &= ~ADVERTISED_Autoneg; if (netif_running(netdev)) @@ -59812,7 +60075,7 @@ index 6040293..66ba674 100644 return ret; } -@@ -410,7 +410,7 @@ static int xgbe_set_coalesce(struct net_device *netdev, +@@ -422,7 +422,7 @@ static int xgbe_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -59821,7 +60084,7 @@ index 6040293..66ba674 100644 unsigned int rx_frames, rx_riwt, rx_usecs; unsigned int tx_frames; -@@ -533,7 +533,7 @@ static int xgbe_set_rxfh(struct net_device *netdev, const u32 *indir, +@@ -545,7 +545,7 @@ static int xgbe_set_rxfh(struct net_device *netdev, const u32 *indir, const u8 *key, const u8 hfunc) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -59831,7 +60094,7 @@ index 6040293..66ba674 100644 if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP) { diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c -index 618d952..bd80ebd 100644 +index 3eee320..4188681 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c @@ -202,13 +202,6 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata) @@ -59873,7 +60136,7 @@ index 618d952..bd80ebd 100644 /* Set device operations */ netdev->netdev_ops = xgbe_get_netdev_ops(); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c -index 4460580..00b80d7 100644 +index 84c5d29..697b4f2 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c @@ -202,7 +202,7 @@ static void xgbe_xgmii_mode(struct xgbe_prv_data *pdata) @@ -59903,7 +60166,7 @@ index 4460580..00b80d7 100644 /* Set PCS to KX/1G speed */ reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_CTRL2); -@@ -872,13 +872,13 @@ static void xgbe_phy_adjust_link(struct xgbe_prv_data *pdata) +@@ -877,13 +877,13 @@ static void xgbe_phy_adjust_link(struct xgbe_prv_data *pdata) if (pdata->tx_pause != pdata->phy.tx_pause) { new_state = 1; @@ -59919,7 +60182,7 @@ index 4460580..00b80d7 100644 pdata->rx_pause = pdata->phy.rx_pause; } -@@ -1343,14 +1343,13 @@ static void xgbe_phy_init(struct xgbe_prv_data *pdata) +@@ -1348,14 +1348,13 @@ static void xgbe_phy_init(struct xgbe_prv_data *pdata) xgbe_dump_phy_registers(pdata); } @@ -59965,10 +60228,10 @@ index b03e4f5..78e4cc4 100644 spin_unlock_irqrestore(&pdata->tstamp_lock, flags); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h -index e234b99..4f0e2a1 100644 +index 98d9d63..3825a58 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h -@@ -785,9 +785,9 @@ struct xgbe_prv_data { +@@ -786,9 +786,9 @@ struct xgbe_prv_data { int dev_irq; unsigned int per_channel_irq; @@ -59981,7 +60244,7 @@ index e234b99..4f0e2a1 100644 /* AXI DMA settings */ unsigned int coherent; -@@ -948,6 +948,10 @@ struct xgbe_prv_data { +@@ -951,6 +951,10 @@ struct xgbe_prv_data { #endif }; @@ -59993,10 +60256,10 @@ index e234b99..4f0e2a1 100644 void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *); diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c -index 5eb9b20..8c5d652 100644 +index fd20088..2c16ef15 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c -@@ -130,7 +130,7 @@ static void xgene_enet_delete_bufpool(struct xgene_enet_desc_ring *buf_pool) +@@ -123,7 +123,7 @@ static void xgene_enet_delete_bufpool(struct xgene_enet_desc_ring *buf_pool) buf_pool->tail = tail; } @@ -60005,7 +60268,7 @@ index 5eb9b20..8c5d652 100644 { struct xgene_enet_desc_ring *rx_ring = data; -@@ -597,7 +597,7 @@ static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring, +@@ -588,7 +588,7 @@ static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring, return processed; } @@ -60015,10 +60278,10 @@ index 5eb9b20..8c5d652 100644 struct xgene_enet_desc_ring *ring; int processed; diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c -index 6446af1..e669e35 100644 +index a3a9392..d4c1818 100644 --- a/drivers/net/ethernet/arc/emac_main.c +++ b/drivers/net/ethernet/arc/emac_main.c -@@ -645,7 +645,7 @@ static struct net_device_stats *arc_emac_stats(struct net_device *ndev) +@@ -648,7 +648,7 @@ static struct net_device_stats *arc_emac_stats(struct net_device *ndev) * * This function is invoked from upper layers to initiate transmission. */ @@ -60028,10 +60291,10 @@ index 6446af1..e669e35 100644 struct arc_emac_priv *priv = netdev_priv(ndev); unsigned int len, *txbd_curr = &priv->txbd_curr; diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c -index 55b118e8..6de7cd0 100644 +index 8611811..be1aaac 100644 --- a/drivers/net/ethernet/atheros/alx/main.c +++ b/drivers/net/ethernet/atheros/alx/main.c -@@ -1451,7 +1451,7 @@ static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume); +@@ -1497,7 +1497,7 @@ static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume); static pci_ers_result_t alx_pci_error_detected(struct pci_dev *pdev, @@ -60041,10 +60304,10 @@ index 55b118e8..6de7cd0 100644 struct alx_priv *alx = pci_get_drvdata(pdev); struct net_device *netdev = alx->dev; diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c -index 8b5988e..672022e 100644 +index d0084d4..d5d7f46 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c -@@ -2719,7 +2719,7 @@ static void atl1c_remove(struct pci_dev *pdev) +@@ -2715,7 +2715,7 @@ static void atl1c_remove(struct pci_dev *pdev) * this device has been detected. */ static pci_ers_result_t atl1c_io_error_detected(struct pci_dev *pdev, @@ -60106,10 +60369,10 @@ index 8fc3f3c..d97e01e 100644 struct net_device *dev = pci_get_drvdata(pdev); struct bnx2 *bp = netdev_priv(dev); diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h -index 4cbb03f8..d94eebe 100644 +index 0e68fad..3546d87 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h -@@ -1115,7 +1115,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp) +@@ -1124,7 +1124,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp) static inline void bnx2x_init_bp_objs(struct bnx2x *bp) { /* RX_MODE controlling object */ @@ -60661,10 +60924,10 @@ index b7d2511..a625bae 100644 typedef void (*set_link_led_t)(struct bnx2x_phy *phy, struct link_params *params, u8 mode); diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c -index 2bf9c87..5a36b0f 100644 +index d465bd7..85bff75 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c -@@ -14130,7 +14130,7 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp) +@@ -14201,7 +14201,7 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp) * this device has been detected. */ static pci_ers_result_t bnx2x_io_error_detected(struct pci_dev *pdev, @@ -61106,10 +61369,10 @@ index 771cc26..c681a90 100644 /* * Init NAPI, so that state is set to NAPI_STATE_SCHED, diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c -index 50c9410..afd792e 100644 +index a63551d0a..f460dd6 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c -@@ -1279,7 +1279,7 @@ dma_error: +@@ -1329,7 +1329,7 @@ dma_error: return 0; } @@ -61118,7 +61381,7 @@ index 50c9410..afd792e 100644 { u16 queue_index = skb_get_queue_mapping(skb); struct macb *bp = netdev_priv(dev); -@@ -2550,7 +2550,7 @@ static int at91ether_close(struct net_device *dev) +@@ -2628,7 +2628,7 @@ static int at91ether_close(struct net_device *dev) } /* Transmit packet */ @@ -61207,10 +61470,10 @@ index 34d269c..69e1ac2 100644 /* Associate the routines that will handle different * netdev tasks. diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c -index 60908ea..4ecee32 100644 +index 43da891..8fbfb54 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c -@@ -2996,7 +2996,7 @@ void t3_fatal_err(struct adapter *adapter) +@@ -2997,7 +2997,7 @@ void t3_fatal_err(struct adapter *adapter) * this device has been detected. */ static pci_ers_result_t t3_io_error_detected(struct pci_dev *pdev, @@ -61233,10 +61496,10 @@ index 8cffcdf..aadf043 100644 #define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb) diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c -index b8a5fb0..39f0c9a 100644 +index d1e3f09..23cfbef 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c -@@ -4103,7 +4103,7 @@ bye: +@@ -4177,7 +4177,7 @@ bye: /* EEH callbacks */ static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev, @@ -61246,10 +61509,10 @@ index b8a5fb0..39f0c9a 100644 int i; struct adapter *adap = pci_get_drvdata(pdev); diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h b/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h -index 6049f70..6e1f19e 100644 +index 4a707c3..de12401 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h +++ b/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h -@@ -538,7 +538,7 @@ int t4vf_sge_alloc_eth_txq(struct adapter *, struct sge_eth_txq *, +@@ -546,7 +546,7 @@ int t4vf_sge_alloc_eth_txq(struct adapter *, struct sge_eth_txq *, unsigned int); void t4vf_free_sge_resources(struct adapter *); @@ -61259,7 +61522,7 @@ index 6049f70..6e1f19e 100644 const struct pkt_gl *); diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c -index 6528231..8503500 100644 +index 1ccd282..93f6dd4 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c +++ b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c @@ -1159,7 +1159,7 @@ static inline void txq_advance(struct sge_txq *tq, unsigned int n) @@ -61345,7 +61608,7 @@ index 3acde3b..284086c 100644 break; } diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c -index d1cf127..9d52393 100644 +index 5366864..5aab985 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -556,7 +556,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val) @@ -61357,7 +61620,7 @@ index d1cf127..9d52393 100644 } static void populate_erx_stats(struct be_adapter *adapter, -@@ -5395,7 +5395,7 @@ static void be_shutdown(struct pci_dev *pdev) +@@ -5467,7 +5467,7 @@ static void be_shutdown(struct pci_dev *pdev) } static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev, @@ -61437,7 +61700,7 @@ index 48a9c17..0745505 100644 struct fs_enet_private *fep = netdev_priv(dev); cbd_t __iomem *bdp; diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c -index b9ecf19..26b1b45 100644 +index d2f917a..ed4d7f5 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -112,7 +112,7 @@ @@ -61498,10 +61761,10 @@ index e51892d..3e645f4 100644 struct hix5hd2_priv *priv = netdev_priv(dev); struct hix5hd2_desc *desc; diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c -index d4f92ed..d4755e0 100644 +index a1cb461..05164e3 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c -@@ -857,16 +857,18 @@ int hns_dsaf_ae_init(struct dsaf_device *dsaf_dev) +@@ -845,16 +845,18 @@ int hns_dsaf_ae_init(struct dsaf_device *dsaf_dev) struct hnae_ae_dev *ae_dev = &dsaf_dev->ae_dev; static atomic_t id = ATOMIC_INIT(-1); @@ -61593,10 +61856,10 @@ index 068789e..f4928f0 100644 struct net_device *netdev = pci_get_drvdata(pdev); struct nic *nic = netdev_priv(netdev); diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c -index 3fc7bde..de784b9 100644 +index ae90d4f..666cb68 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c -@@ -5255,7 +5255,7 @@ static void e1000_netpoll(struct net_device *netdev) +@@ -5272,7 +5272,7 @@ static void e1000_netpoll(struct net_device *netdev) * this device has been detected. */ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev, @@ -61606,7 +61869,7 @@ index 3fc7bde..de784b9 100644 struct net_device *netdev = pci_get_drvdata(pdev); struct e1000_adapter *adapter = netdev_priv(netdev); diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c -index c71ba1b..3d364c1 100644 +index 9b4ec13..c0cd7ab 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -6734,7 +6734,7 @@ static void e1000_netpoll(struct net_device *netdev) @@ -61645,10 +61908,10 @@ index 565ca7c..dcdf764 100644 } diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c -index 31e5f39..d3a8073 100644 +index 55a1405c..b722e63 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c -@@ -7612,7 +7612,7 @@ static void igb_netpoll(struct net_device *netdev) +@@ -7750,7 +7750,7 @@ static void igb_netpoll(struct net_device *netdev) * this device has been detected. **/ static pci_ers_result_t igb_io_error_detected(struct pci_dev *pdev, @@ -61658,10 +61921,10 @@ index 31e5f39..d3a8073 100644 struct net_device *netdev = pci_get_drvdata(pdev); struct igb_adapter *adapter = netdev_priv(netdev); diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c -index 297af80..ae51655 100644 +index c124422..5d471ad 100644 --- a/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/drivers/net/ethernet/intel/igbvf/netdev.c -@@ -2507,7 +2507,7 @@ static void igbvf_netpoll(struct net_device *netdev) +@@ -2523,7 +2523,7 @@ static void igbvf_netpoll(struct net_device *netdev) * this device has been detected. */ static pci_ers_result_t igbvf_io_error_detected(struct pci_dev *pdev, @@ -61671,10 +61934,10 @@ index 297af80..ae51655 100644 struct net_device *netdev = pci_get_drvdata(pdev); struct igbvf_adapter *adapter = netdev_priv(netdev); diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c -index c4003a8..e464fee 100644 +index 7df3fe2..88f9610 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c -@@ -9349,7 +9349,7 @@ static void ixgbe_remove(struct pci_dev *pdev) +@@ -9551,7 +9551,7 @@ static void ixgbe_remove(struct pci_dev *pdev) * this device has been detected. */ static pci_ers_result_t ixgbe_io_error_detected(struct pci_dev *pdev, @@ -61697,7 +61960,7 @@ index ef1504d..e1c3402 100644 /* need lock to prevent incorrect read while modifying cyclecounter */ diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c -index 3558f01..ff4a352 100644 +index b0edae9..c068ee7 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c @@ -3607,7 +3607,7 @@ static int ixgbevf_maybe_stop_tx(struct ixgbevf_ring *tx_ring, int size) @@ -61709,7 +61972,7 @@ index 3558f01..ff4a352 100644 { struct ixgbevf_adapter *adapter = netdev_priv(netdev); struct ixgbevf_tx_buffer *first; -@@ -4144,7 +4144,7 @@ static void ixgbevf_remove(struct pci_dev *pdev) +@@ -4148,7 +4148,7 @@ static void ixgbevf_remove(struct pci_dev *pdev) * this device has been detected. **/ static pci_ers_result_t ixgbevf_io_error_detected(struct pci_dev *pdev, @@ -61719,10 +61982,10 @@ index 3558f01..ff4a352 100644 struct net_device *netdev = pci_get_drvdata(pdev); struct ixgbevf_adapter *adapter = netdev_priv(netdev); diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c -index 7ace07d..b9eab92 100644 +index c442f6a..f41971a 100644 --- a/drivers/net/ethernet/marvell/pxa168_eth.c +++ b/drivers/net/ethernet/marvell/pxa168_eth.c -@@ -1270,7 +1270,7 @@ static int pxa168_rx_poll(struct napi_struct *napi, int budget) +@@ -1272,7 +1272,7 @@ static int pxa168_rx_poll(struct napi_struct *napi, int budget) return work_done; } @@ -61731,24 +61994,11 @@ index 7ace07d..b9eab92 100644 { struct pxa168_eth_private *pep = netdev_priv(dev); struct net_device_stats *stats = &dev->stats; -diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c -index 03ef9ac..48664b9 100644 ---- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c -+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c -@@ -61,7 +61,7 @@ static int mlx4_alloc_pages(struct mlx4_en_priv *priv, - gfp_t gfp = _gfp; - - if (order) -- gfp |= __GFP_COMP | __GFP_NOWARN; -+ gfp |= __GFP_COMP | __GFP_NOWARN | __GFP_NOMEMALLOC; - page = alloc_pages(gfp, order); - if (likely(page)) - break; diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c -index 0debb61..964bc54 100644 +index a386f04..532dac2 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c -@@ -479,8 +479,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev, +@@ -482,8 +482,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev, wmb(); /* we want to dirty this cache line once */ @@ -61760,10 +62010,10 @@ index 0debb61..964bc54 100644 netdev_tx_completed_queue(ring->tx_queue, packets, bytes); diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c -index f8674ae..7ef8ac5 100644 +index 12c77a7..d3814dd 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c -@@ -3951,7 +3951,7 @@ static const struct pci_device_id mlx4_pci_table[] = { +@@ -4056,7 +4056,7 @@ static const struct pci_device_id mlx4_pci_table[] = { MODULE_DEVICE_TABLE(pci, mlx4_pci_table); static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev, @@ -61773,10 +62023,10 @@ index f8674ae..7ef8ac5 100644 struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c -index b86fe50..036d024 100644 +index 6892746f..bd445ae 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c -@@ -1371,7 +1371,7 @@ static void remove_one(struct pci_dev *pdev) +@@ -1349,7 +1349,7 @@ static void remove_one(struct pci_dev *pdev) } static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev, @@ -61786,10 +62036,10 @@ index b86fe50..036d024 100644 struct mlx5_core_dev *dev = pci_get_drvdata(pdev); struct mlx5_priv *priv = &dev->priv; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c -index a94daa8..d1d3bd0 100644 +index 668b2f4..add3ac0 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c -@@ -2994,7 +2994,7 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused, +@@ -3228,7 +3228,7 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -61915,7 +62165,7 @@ index 9fbc302..f87f84a 100644 { struct netx_eth_priv *priv = netdev_priv(ndev); diff --git a/drivers/net/ethernet/nuvoton/w90p910_ether.c b/drivers/net/ethernet/nuvoton/w90p910_ether.c -index afa4458..95ab01b 100644 +index 52d9a94..cc230d4 100644 --- a/drivers/net/ethernet/nuvoton/w90p910_ether.c +++ b/drivers/net/ethernet/nuvoton/w90p910_ether.c @@ -633,7 +633,7 @@ static int w90p910_send_frame(struct net_device *dev, @@ -61928,7 +62178,7 @@ index afa4458..95ab01b 100644 struct w90p910_ether *ether = netdev_priv(dev); diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c -index 75e88f4..1db3bf6 100644 +index 9b0d7f4..c29155f 100644 --- a/drivers/net/ethernet/nvidia/forcedeth.c +++ b/drivers/net/ethernet/nvidia/forcedeth.c @@ -357,8 +357,8 @@ struct ring_desc { @@ -61978,10 +62228,10 @@ index 3b98b263b..13d2129 100644 struct net_device *netdev = pci_get_drvdata(pdev); struct pch_gbe_adapter *adapter = netdev_priv(netdev); diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c -index 6409a06..e5bd4d6 100644 +index 9c6eed9..a3ef643 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c -@@ -1756,7 +1756,7 @@ err_out: +@@ -1757,7 +1757,7 @@ err_out: } static pci_ers_result_t netxen_io_error_detected(struct pci_dev *pdev, @@ -61990,6 +62240,23 @@ index 6409a06..e5bd4d6 100644 { struct netxen_adapter *adapter = pci_get_drvdata(pdev); +diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c +index b89c9a8..06b18ff 100644 +--- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c ++++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c +@@ -938,9 +938,9 @@ qed_mcp_send_drv_version(struct qed_hwfn *p_hwfn, + + p_drv_version = &union_data.drv_version; + p_drv_version->version = p_ver->version; +- for (i = 0; i < MCP_DRV_VER_STR_SIZE - 1; i += 4) { +- val = cpu_to_be32(p_ver->name[i]); +- *(u32 *)&p_drv_version->name[i * sizeof(u32)] = val; ++ for (i = 0; i < MCP_DRV_VER_STR_SIZE - 4; i += 4) { ++ val = cpu_to_be32(*(u32 *)&p_ver->name[i]); ++ *(u32 *)&p_drv_version->name[i] = val; + } + + memset(&mb_params, 0, sizeof(mb_params)); diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c index bf89216..b08442a 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c @@ -62050,7 +62317,7 @@ index 1205f6f..4b7c75b 100644 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); struct qlcnic_hardware_ops *hw_ops = adapter->ahw->hw_ops; diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c -index cda9e60..4019992 100644 +index 0844b7c..afa10a1 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c @@ -1285,7 +1285,7 @@ flash_temp: @@ -62063,7 +62330,7 @@ index cda9e60..4019992 100644 u32 entry_offset, dump, no_entries, buf_offset = 0; int i, k, ops_cnt, ops_index, dump_size = 0; diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c -index dd2cf37..e36c9bb 100644 +index 94f08f1..501c50d 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -798,22 +798,22 @@ struct rtl8169_private { @@ -62094,10 +62361,10 @@ index dd2cf37..e36c9bb 100644 int (*set_speed)(struct net_device *, u8 aneg, u16 sp, u8 dpx, u32 adv); int (*get_settings)(struct net_device *, struct ethtool_cmd *); diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c -index 01f6d5b..5584cdb 100644 +index ceea74c..fa02088 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c -@@ -2322,7 +2322,7 @@ static void sh_eth_tx_timeout(struct net_device *ndev) +@@ -2305,7 +2305,7 @@ static void sh_eth_tx_timeout(struct net_device *ndev) } /* Packet transmit function */ @@ -62106,11 +62373,11 @@ index 01f6d5b..5584cdb 100644 { struct sh_eth_private *mdp = netdev_priv(ndev); struct sh_eth_txdesc *txdesc; -diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c -index f39e719..d05dce9 100644 ---- a/drivers/net/ethernet/rocker/rocker.c -+++ b/drivers/net/ethernet/rocker/rocker.c -@@ -5418,7 +5418,7 @@ out: +diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c +index 28b775e..110ef62 100644 +--- a/drivers/net/ethernet/rocker/rocker_main.c ++++ b/drivers/net/ethernet/rocker/rocker_main.c +@@ -2833,7 +2833,7 @@ out: return NOTIFY_DONE; } @@ -62119,7 +62386,7 @@ index f39e719..d05dce9 100644 .notifier_call = rocker_netdevice_event, }; -@@ -5461,7 +5461,7 @@ static int rocker_netevent_event(struct notifier_block *unused, +@@ -2867,7 +2867,7 @@ static int rocker_netevent_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -62247,10 +62514,10 @@ index 7a254da..0693a2b4 100644 unsigned long data; struct ioc3_private *ip = netdev_priv(dev); diff --git a/drivers/net/ethernet/smsc/smc911x.c b/drivers/net/ethernet/smsc/smc911x.c -index bd64eb9..73ba84d 100644 +index a733868..7fc73e1 100644 --- a/drivers/net/ethernet/smsc/smc911x.c +++ b/drivers/net/ethernet/smsc/smc911x.c -@@ -511,7 +511,7 @@ static void smc911x_hardware_send_pkt(struct net_device *dev) +@@ -514,7 +514,7 @@ static void smc911x_hardware_send_pkt(struct net_device *dev) * now, or set the card to generates an interrupt when ready * for the packet. */ @@ -62260,7 +62527,7 @@ index bd64eb9..73ba84d 100644 struct smc911x_local *lp = netdev_priv(dev); unsigned int free; diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c -index db7db8a..6a1696c 100644 +index c5ed27c..bea1ce5 100644 --- a/drivers/net/ethernet/smsc/smc91x.c +++ b/drivers/net/ethernet/smsc/smc91x.c @@ -637,7 +637,7 @@ done: if (!THROTTLE_TX_PKTS) @@ -62327,20 +62594,32 @@ index 9b825780..71a2b34 100644 struct sunqe *qep = netdev_priv(dev); struct sunqe_buffers *qbufs = qep->buffers; diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c -index 23fa298..c650e26 100644 +index a2f9b47..05a9147 100644 --- a/drivers/net/ethernet/sun/sunvnet.c +++ b/drivers/net/ethernet/sun/sunvnet.c -@@ -1152,15 +1152,15 @@ vnet_select_queue(struct net_device *dev, struct sk_buff *skb, - return port->q_index; +@@ -131,7 +131,7 @@ static u16 vnet_select_queue(struct net_device *dev, struct sk_buff *skb, } --static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev); -+static netdev_tx_t vnet_start_xmit(struct sk_buff *skb, struct net_device *dev); + /* Wrappers to common functions */ +-static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev) ++static netdev_tx_t vnet_start_xmit(struct sk_buff *skb, struct net_device *dev) + { + return sunvnet_start_xmit_common(skb, dev, vnet_tx_port_find); + } +diff --git a/drivers/net/ethernet/sun/sunvnet_common.c b/drivers/net/ethernet/sun/sunvnet_common.c +index 904a5a1..6ef5cff 100644 +--- a/drivers/net/ethernet/sun/sunvnet_common.c ++++ b/drivers/net/ethernet/sun/sunvnet_common.c +@@ -1126,7 +1126,7 @@ static inline struct sk_buff *vnet_skb_shape(struct sk_buff *skb, int ncookies) + return skb; + } --static int vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb) -+static netdev_tx_t vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb) +-static int vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb, ++static netdev_tx_t vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb, + struct vnet_port *(*vnet_tx_port) + (struct sk_buff *, struct net_device *)) { - struct net_device *dev = port->vp->dev; +@@ -1134,7 +1134,7 @@ static int vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb, struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING]; struct sk_buff *segs; int maclen, datalen; @@ -62349,7 +62628,7 @@ index 23fa298..c650e26 100644 int gso_size, gso_type, gso_segs; int hlen = skb_transport_header(skb) - skb_mac_header(skb); int proto = IPPROTO_IP; -@@ -1216,7 +1216,7 @@ static int vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb) +@@ -1190,7 +1190,7 @@ static int vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb, skb_push(skb, maclen); skb_reset_mac_header(skb); @@ -62358,15 +62637,6 @@ index 23fa298..c650e26 100644 while (segs) { struct sk_buff *curr = segs; -@@ -1255,7 +1255,7 @@ out_dropped: - return NETDEV_TX_OK; - } - --static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev) -+static netdev_tx_t vnet_start_xmit(struct sk_buff *skb, struct net_device *dev) - { - struct vnet *vp = netdev_priv(dev); - struct vnet_port *port = NULL; diff --git a/drivers/net/ethernet/synopsys/dwc_eth_qos.c b/drivers/net/ethernet/synopsys/dwc_eth_qos.c index af11ed1..21bca5f 100644 --- a/drivers/net/ethernet/synopsys/dwc_eth_qos.c @@ -62394,7 +62664,7 @@ index 7eef45e..c813085 100644 int queue, len; struct cpmac_desc *desc; diff --git a/drivers/net/ethernet/ti/netcp_core.c b/drivers/net/ethernet/ti/netcp_core.c -index 029841f..e899a548 100644 +index 1d0942c..0c473eb 100644 --- a/drivers/net/ethernet/ti/netcp_core.c +++ b/drivers/net/ethernet/ti/netcp_core.c @@ -1237,7 +1237,7 @@ out: @@ -62472,10 +62742,10 @@ index 4684644..6687c7f 100644 u32 ii; u32 num_frag; diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c -index 0bf7edd..7fc5d06 100644 +index 9fcb489..8f58614 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c -@@ -1443,7 +1443,7 @@ nla_put_failure: +@@ -1508,7 +1508,7 @@ nla_put_failure: return -EMSGSIZE; } @@ -62498,7 +62768,7 @@ index 72c9f1f..98f72c8 100644 struct baycom_state *bc = netdev_priv(dev); diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h -index fcb92c0..a900f7d 100644 +index 8b3bd8e..f67d832 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -162,7 +162,7 @@ struct rndis_device { @@ -62510,44 +62780,11 @@ index fcb92c0..a900f7d 100644 spinlock_t request_lock; struct list_head req_list; -@@ -619,6 +619,7 @@ struct nvsp_message { - #define NETVSC_PACKET_SIZE 4096 - - #define VRSS_SEND_TAB_SIZE 16 -+#define VRSS_CHANNEL_MAX 64 - - #define RNDIS_MAX_PKT_DEFAULT 8 - #define RNDIS_PKT_ALIGN_DEFAULT 8 -@@ -696,13 +697,13 @@ struct netvsc_device { - - struct net_device *ndev; - -- struct vmbus_channel *chn_table[NR_CPUS]; -+ struct vmbus_channel *chn_table[VRSS_CHANNEL_MAX]; - u32 send_table[VRSS_SEND_TAB_SIZE]; - u32 max_chn; - u32 num_chn; - spinlock_t sc_lock; /* Protects num_sc_offered variable */ - u32 num_sc_offered; -- atomic_t queue_sends[NR_CPUS]; -+ atomic_t queue_sends[VRSS_CHANNEL_MAX]; - - /* Holds rndis device info */ - void *extension; -@@ -714,7 +715,7 @@ struct netvsc_device { - /* The sub channel callback buffer */ - unsigned char *sub_cb_buf; - -- struct multi_send_data msd[NR_CPUS]; -+ struct multi_send_data msd[VRSS_CHANNEL_MAX]; - u32 max_pkt; /* max number of pkt in one send, e.g. 8 */ - u32 pkt_align; /* alignment bytes, e.g. 8 */ - diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c -index 98e34fe..19c8206 100644 +index b8121eb..d17ef42 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c -@@ -348,7 +348,7 @@ not_ip: +@@ -353,7 +353,7 @@ not_ip: return ret_val; } @@ -62556,34 +62793,8 @@ index 98e34fe..19c8206 100644 { struct net_device_context *net_device_ctx = netdev_priv(net); struct hv_netvsc_packet *packet = NULL; -@@ -799,6 +799,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) - struct netvsc_device *nvdev = hv_get_drvdata(hdev); - struct netvsc_device_info device_info; - int limit = ETH_DATA_LEN; -+ u32 num_chn; - int ret = 0; - - if (nvdev == NULL || nvdev->destroy) -@@ -814,6 +815,8 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) - if (ret) - goto out; - -+ num_chn = nvdev->num_chn; -+ - nvdev->start_remove = true; - rndis_filter_device_remove(hdev); - -@@ -824,7 +827,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) - - memset(&device_info, 0, sizeof(device_info)); - device_info.ring_size = ring_size; -- device_info.num_chn = nvdev->num_chn; -+ device_info.num_chn = num_chn; - device_info.max_num_vrss_chns = max_num_vrss_chns; - rndis_filter_device_add(hdev, &device_info); - diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c -index a37bbda..625cb2a 100644 +index c4e1e04..c1f4cba 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -101,7 +101,7 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev, @@ -62604,18 +62815,6 @@ index a37bbda..625cb2a 100644 /* Ignore return since this msg is optional. */ rndis_filter_send_request(dev, request); -@@ -1113,9 +1113,9 @@ int rndis_filter_device_add(struct hv_device *dev, - if (ret || rsscap.num_recv_que < 2) - goto out; - -- num_rss_qs = min(device_info->max_num_vrss_chns, rsscap.num_recv_que); -+ net_device->max_chn = min_t(u32, VRSS_CHANNEL_MAX, rsscap.num_recv_que); - -- net_device->max_chn = rsscap.num_recv_que; -+ num_rss_qs = min(device_info->max_num_vrss_chns, net_device->max_chn); - - /* - * We will limit the VRSS channels to the number CPUs in the NUMA node @@ -1136,8 +1136,7 @@ int rndis_filter_device_add(struct hv_device *dev, if (net_device->num_chn == 1) goto out; @@ -62640,10 +62839,10 @@ index cc56fac..c15b884 100644 .priv_size = sizeof(struct ifb_dev_private), .setup = ifb_setup, diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c -index 8c48bb2..0a03401 100644 +index d6d0524..109f6ad 100644 --- a/drivers/net/ipvlan/ipvlan_core.c +++ b/drivers/net/ipvlan/ipvlan_core.c -@@ -470,7 +470,7 @@ static void ipvlan_multicast_enqueue(struct ipvl_port *port, +@@ -474,7 +474,7 @@ static void ipvlan_multicast_enqueue(struct ipvl_port *port, schedule_work(&port->wq); } else { spin_unlock(&port->backlog.lock); @@ -62653,10 +62852,10 @@ index 8c48bb2..0a03401 100644 } } diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c -index f94392d..2132934 100644 +index 57941d3..99d97ae 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c -@@ -751,15 +751,15 @@ static int ipvlan_addr4_event(struct notifier_block *unused, +@@ -757,15 +757,15 @@ static int ipvlan_addr4_event(struct notifier_block *unused, return NOTIFY_OK; } @@ -62797,8 +62996,21 @@ index a400288..0c59bcd 100644 +struct pernet_operations __net_initconst loopback_net_ops = { .init = loopback_net_init, }; +diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c +index 9e803bb..fb251d2 100644 +--- a/drivers/net/macsec.c ++++ b/drivers/net/macsec.c +@@ -3217,7 +3217,7 @@ nla_put_failure: + return -EMSGSIZE; + } + +-static struct rtnl_link_ops macsec_link_ops __read_mostly = { ++static struct rtnl_link_ops macsec_link_ops = { + .kind = "macsec", + .priv_size = sizeof(struct macsec_dev), + .maxtype = IFLA_MACSEC_MAX, diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c -index 94e6888..c5c3f55 100644 +index 2bcf1f3..f2bef9c 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -335,7 +335,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port, @@ -62810,7 +63022,7 @@ index 94e6888..c5c3f55 100644 } static void macvlan_flush_sources(struct macvlan_port *port, -@@ -1484,13 +1484,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = { +@@ -1485,13 +1485,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = { int macvlan_link_register(struct rtnl_link_ops *ops) { /* common fields */ @@ -62833,7 +63045,7 @@ index 94e6888..c5c3f55 100644 return rtnl_link_register(ops); }; -@@ -1577,7 +1579,7 @@ static int macvlan_device_event(struct notifier_block *unused, +@@ -1579,7 +1581,7 @@ static int macvlan_device_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -62843,7 +63055,7 @@ index 94e6888..c5c3f55 100644 }; diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c -index 95394ed..a08b026 100644 +index 9a35aa4..ef7ef34 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c @@ -485,7 +485,7 @@ static void macvtap_setup(struct net_device *dev) @@ -62942,7 +63154,7 @@ index 9c4b41a..03da80b 100644 { struct net_local *nl = netdev_priv(dev); diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c -index aafe237..5a65f90 100644 +index f572b31..3a19b6ff 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -1056,7 +1056,6 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) @@ -62977,10 +63189,10 @@ index ae0905e..f22c8e9d 100644 return NET_RX_SUCCESS; diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c -index e7034c5..cf4cf05 100644 +index 9cfe6ae..3ec3a5f 100644 --- a/drivers/net/rionet.c +++ b/drivers/net/rionet.c -@@ -165,7 +165,7 @@ static int rionet_queue_tx_msg(struct sk_buff *skb, struct net_device *ndev, +@@ -170,7 +170,7 @@ static int rionet_queue_tx_msg(struct sk_buff *skb, struct net_device *ndev, return 0; } @@ -63003,10 +63215,10 @@ index 27ed252..80cffde 100644 /* We've got a compressed packet; read the change byte */ diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c -index 718ceea..7571cce 100644 +index 2ace126..c06df62 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c -@@ -2135,7 +2135,7 @@ static unsigned int team_get_num_rx_queues(void) +@@ -2148,7 +2148,7 @@ static unsigned int team_get_num_rx_queues(void) return TEAM_DEFAULT_NUM_RX_QUEUES; } @@ -63015,7 +63227,7 @@ index 718ceea..7571cce 100644 .kind = DRV_NAME, .priv_size = sizeof(struct team), .setup = team_setup, -@@ -2930,7 +2930,7 @@ static int team_device_event(struct notifier_block *unused, +@@ -2943,7 +2943,7 @@ static int team_device_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -63025,10 +63237,10 @@ index 718ceea..7571cce 100644 }; diff --git a/drivers/net/tun.c b/drivers/net/tun.c -index 81ecc2e..248806a 100644 +index dda4905..c0a1944 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c -@@ -1477,7 +1477,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[]) +@@ -1491,7 +1491,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[]) return -EINVAL; } @@ -63037,7 +63249,7 @@ index 81ecc2e..248806a 100644 .kind = DRV_NAME, .priv_size = sizeof(struct tun_struct), .setup = tun_setup, -@@ -1877,7 +1877,7 @@ unlock: +@@ -1892,7 +1892,7 @@ unlock: } static long __tun_chr_ioctl(struct file *file, unsigned int cmd, @@ -63046,7 +63258,7 @@ index 81ecc2e..248806a 100644 { struct tun_file *tfile = file->private_data; struct tun_struct *tun; -@@ -1891,6 +1891,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, +@@ -1906,6 +1906,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, int le; int ret; @@ -63210,7 +63422,7 @@ index a2515887..6d13233 100644 /* we will have to manufacture ethernet headers, prepare template */ diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c -index 767ab11..d02d99c 100644 +index 49d84e5..2492568 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -48,7 +48,7 @@ module_param(gso, bool, 0444); @@ -63223,10 +63435,10 @@ index 767ab11..d02d99c 100644 #define VIRTNET_DRIVER_VERSION "1.0.0" diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c -index bdcf617..c7fedcd 100644 +index 8a8f1e5..15da5ea 100644 --- a/drivers/net/vrf.c +++ b/drivers/net/vrf.c -@@ -884,7 +884,7 @@ static const struct nla_policy vrf_nl_policy[IFLA_VRF_MAX + 1] = { +@@ -781,7 +781,7 @@ static const struct nla_policy vrf_nl_policy[IFLA_VRF_MAX + 1] = { [IFLA_VRF_TABLE] = { .type = NLA_U32 }, }; @@ -63235,7 +63447,7 @@ index bdcf617..c7fedcd 100644 .kind = DRV_NAME, .priv_size = sizeof(struct net_vrf), -@@ -918,7 +918,7 @@ out: +@@ -818,7 +818,7 @@ out: return NOTIFY_DONE; } @@ -63245,10 +63457,10 @@ index bdcf617..c7fedcd 100644 }; diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c -index 1c32bd1..a6a9694 100644 +index 7e29b55..13e9b3e 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c -@@ -3169,7 +3169,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev) +@@ -3119,7 +3119,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev) return vxlan->net; } @@ -63257,7 +63469,7 @@ index 1c32bd1..a6a9694 100644 .kind = "vxlan", .maxtype = IFLA_VXLAN_MAX, .policy = vxlan_policy, -@@ -3217,7 +3217,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused, +@@ -3167,7 +3167,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -63779,10 +63991,10 @@ index 831a544..d846785 100644 struct ath_nf_limits { s16 max; diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c -index c1b33fd..d61f3b4 100644 +index 3aed43a..f415cc5 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -2589,16 +2589,18 @@ void ath9k_fill_chanctx_ops(void) +@@ -2594,16 +2594,18 @@ void ath9k_fill_chanctx_ops(void) if (!ath9k_is_chanctx_enabled()) return; @@ -63874,7 +64086,7 @@ index 6808db4..3a5df05 100644 DEBUGFS_READONLY_FILE(tx_total_pending, 20, "%d", atomic_read(&ar->tx_total_pending)); diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c -index 19d3d64..80799ca 100644 +index 4d1527a..4f60738 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c @@ -320,7 +320,7 @@ static void carl9170_zap_queues(struct ar9170 *ar) @@ -63913,7 +64125,7 @@ index 19d3d64..80799ca 100644 dev_dbg(&ar->udev->dev, "ignoring restart (%d)\n", r); return; } -@@ -1818,7 +1818,7 @@ void *carl9170_alloc(size_t priv_size) +@@ -1820,7 +1820,7 @@ void *carl9170_alloc(size_t priv_size) spin_lock_init(&ar->tx_ampdu_list_lock); spin_lock_init(&ar->mem_lock); spin_lock_init(&ar->state_lock); @@ -63971,7 +64183,7 @@ index 9a949d9..1307d61 100644 /** * struct wil_platform_rops - wil platform module callbacks from diff --git a/drivers/net/wireless/atmel/at76c50x-usb.c b/drivers/net/wireless/atmel/at76c50x-usb.c -index dab2513..4c4b65d 100644 +index 1efb1d6..66134a3 100644 --- a/drivers/net/wireless/atmel/at76c50x-usb.c +++ b/drivers/net/wireless/atmel/at76c50x-usb.c @@ -353,7 +353,7 @@ static int at76_dfu_get_state(struct usb_device *udev, u8 *state) @@ -64434,6 +64646,103 @@ index afc1fb3..79698d1 100644 (unsigned long)wldev); if (modparam_pio) wldev->__using_pio = true; +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +index d5c2a27..4ed31de 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -5000,6 +5000,50 @@ static struct cfg80211_ops brcmf_cfg80211_ops = { + .tdls_oper = brcmf_cfg80211_tdls_oper, + }; + ++static struct cfg80211_ops brcmf_cfg80211_ops2 = { ++ .add_virtual_intf = brcmf_cfg80211_add_iface, ++ .del_virtual_intf = brcmf_cfg80211_del_iface, ++ .change_virtual_intf = brcmf_cfg80211_change_iface, ++ .scan = brcmf_cfg80211_scan, ++ .set_wiphy_params = brcmf_cfg80211_set_wiphy_params, ++ .join_ibss = brcmf_cfg80211_join_ibss, ++ .leave_ibss = brcmf_cfg80211_leave_ibss, ++ .get_station = brcmf_cfg80211_get_station, ++ .dump_station = brcmf_cfg80211_dump_station, ++ .set_tx_power = brcmf_cfg80211_set_tx_power, ++ .get_tx_power = brcmf_cfg80211_get_tx_power, ++ .add_key = brcmf_cfg80211_add_key, ++ .del_key = brcmf_cfg80211_del_key, ++ .get_key = brcmf_cfg80211_get_key, ++ .set_default_key = brcmf_cfg80211_config_default_key, ++ .set_default_mgmt_key = brcmf_cfg80211_config_default_mgmt_key, ++ .set_power_mgmt = brcmf_cfg80211_set_power_mgmt, ++ .connect = brcmf_cfg80211_connect, ++ .disconnect = brcmf_cfg80211_disconnect, ++ .suspend = brcmf_cfg80211_suspend, ++ .resume = brcmf_cfg80211_resume, ++ .set_pmksa = brcmf_cfg80211_set_pmksa, ++ .del_pmksa = brcmf_cfg80211_del_pmksa, ++ .flush_pmksa = brcmf_cfg80211_flush_pmksa, ++ .start_ap = brcmf_cfg80211_start_ap, ++ .stop_ap = brcmf_cfg80211_stop_ap, ++ .change_beacon = brcmf_cfg80211_change_beacon, ++ .del_station = brcmf_cfg80211_del_station, ++ .change_station = brcmf_cfg80211_change_station, ++ .sched_scan_start = brcmf_cfg80211_sched_scan_start, ++ .sched_scan_stop = brcmf_cfg80211_sched_scan_stop, ++ .mgmt_frame_register = brcmf_cfg80211_mgmt_frame_register, ++ .mgmt_tx = brcmf_cfg80211_mgmt_tx, ++ .remain_on_channel = brcmf_p2p_remain_on_channel, ++ .cancel_remain_on_channel = brcmf_cfg80211_cancel_remain_on_channel, ++ .start_p2p_device = brcmf_p2p_start_device, ++ .stop_p2p_device = brcmf_p2p_stop_device, ++ .crit_proto_start = brcmf_cfg80211_crit_proto_start, ++ .crit_proto_stop = brcmf_cfg80211_crit_proto_stop, ++ .tdls_oper = brcmf_cfg80211_tdls_oper, ++ .set_rekey_data = brcmf_cfg80211_set_rekey_data, ++}; ++ + struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, + enum nl80211_iftype type, + bool pm_block) +@@ -6622,7 +6666,7 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr, + struct net_device *ndev = brcmf_get_ifp(drvr, 0)->ndev; + struct brcmf_cfg80211_info *cfg; + struct wiphy *wiphy; +- struct cfg80211_ops *ops; ++ struct cfg80211_ops *ops = &brcmf_cfg80211_ops; + struct brcmf_cfg80211_vif *vif; + struct brcmf_if *ifp; + s32 err = 0; +@@ -6634,15 +6678,10 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr, + return NULL; + } + +- ops = kzalloc(sizeof(*ops), GFP_KERNEL); +- if (!ops) +- return NULL; +- +- memcpy(ops, &brcmf_cfg80211_ops, sizeof(*ops)); + ifp = netdev_priv(ndev); + #ifdef CONFIG_PM + if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK)) +- ops->set_rekey_data = brcmf_cfg80211_set_rekey_data; ++ ops = &brcmf_cfg80211_ops2; + #endif + wiphy = wiphy_new(ops, sizeof(struct brcmf_cfg80211_info)); + if (!wiphy) { +@@ -6781,7 +6820,6 @@ priv_out: + ifp->vif = NULL; + wiphy_out: + brcmf_free_wiphy(wiphy); +- kfree(ops); + return NULL; + } + +@@ -6792,7 +6830,6 @@ void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg) + + brcmf_btcoex_detach(cfg); + wiphy_unregister(cfg->wiphy); +- kfree(cfg->ops); + wl_deinit_priv(cfg); + brcmf_free_wiphy(cfg->wiphy); + } diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c index 1c4e9dd..a6388e7 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c @@ -65099,7 +65408,7 @@ index af1b3e6..c014779 100644 D_INFO("*** LOAD DRIVER ***\n"); diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c -index fd38aa0..4db38f7 100644 +index b75f4ef..8fe465b 100644 --- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c @@ -4361,8 +4361,9 @@ il4965_synchronize_irq(struct il_priv *il) @@ -65113,7 +65422,7 @@ index fd38aa0..4db38f7 100644 u32 inta, handled = 0; u32 inta_fh; unsigned long flags; -@@ -6254,9 +6255,7 @@ il4965_setup_deferred_work(struct il_priv *il) +@@ -6256,9 +6257,7 @@ il4965_setup_deferred_work(struct il_priv *il) setup_timer(&il->watchdog, il_bg_watchdog, (unsigned long)il); @@ -65260,11 +65569,42 @@ index 74c5161..f0a52a5 100644 memset(buf, 0, sizeof(buf)); buf_size = min(count, sizeof(buf) - 1); +diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/lib.c b/drivers/net/wireless/intel/iwlwifi/dvm/lib.c +index 1799469..f0c488d 100644 +--- a/drivers/net/wireless/intel/iwlwifi/dvm/lib.c ++++ b/drivers/net/wireless/intel/iwlwifi/dvm/lib.c +@@ -950,7 +950,7 @@ static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw, + + rx_p1ks = data->tkip->rx_uni; + +- pn64 = atomic64_read(&key->tx_pn); ++ pn64 = atomic64_read_unchecked(&key->tx_pn); + tkip_tx_sc->iv16 = cpu_to_le16(TKIP_PN_TO_IV16(pn64)); + tkip_tx_sc->iv32 = cpu_to_le32(TKIP_PN_TO_IV32(pn64)); + +@@ -1003,7 +1003,7 @@ static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw, + aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc; + aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc; + +- pn64 = atomic64_read(&key->tx_pn); ++ pn64 = atomic64_read_unchecked(&key->tx_pn); + aes_tx_sc->pn = cpu_to_le64(pn64); + } else + aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c -index d3e21d9..5f07571 100644 +index c1a3131..2592a24 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c -@@ -308,7 +308,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, +@@ -258,7 +258,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, + + rx_p1ks = data->tkip->rx_uni; + +- pn64 = atomic64_read(&key->tx_pn); ++ pn64 = atomic64_read_unchecked(&key->tx_pn); + tkip_tx_sc->iv16 = cpu_to_le16(TKIP_PN_TO_IV16(pn64)); + tkip_tx_sc->iv32 = cpu_to_le32(TKIP_PN_TO_IV32(pn64)); + +@@ -313,7 +313,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc; aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc; @@ -65273,7 +65613,7 @@ index d3e21d9..5f07571 100644 aes_tx_sc->pn = cpu_to_le64(pn64); } else { aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc; -@@ -1596,7 +1596,7 @@ static void iwl_mvm_d3_update_keys(struct ieee80211_hw *hw, +@@ -1610,12 +1610,12 @@ static void iwl_mvm_d3_update_keys(struct ieee80211_hw *hw, case WLAN_CIPHER_SUITE_CCMP: iwl_mvm_set_aes_rx_seq(data->mvm, sc->aes.unicast_rsc, sta, key); @@ -65282,11 +65622,17 @@ index d3e21d9..5f07571 100644 break; case WLAN_CIPHER_SUITE_TKIP: iwl_mvm_tkip_sc_to_seq(&sc->tkip.tsc, &seq); + iwl_mvm_set_tkip_rx_seq(sc->tkip.unicast_rsc, key); +- atomic64_set(&key->tx_pn, ++ atomic64_set_unchecked(&key->tx_pn, + (u64)seq.tkip.iv16 | + ((u64)seq.tkip.iv32 << 16)); + break; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c -index a040edc..4ea3fa7 100644 +index 34731e2..9bd389b 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c -@@ -286,7 +286,7 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm, +@@ -290,7 +290,7 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm, case WLAN_CIPHER_SUITE_CCMP: case WLAN_CIPHER_SUITE_CCMP_256: iwl_mvm_set_tx_cmd_ccmp(info, tx_cmd); @@ -65295,11 +65641,20 @@ index a040edc..4ea3fa7 100644 crypto_hdr[0] = pn; crypto_hdr[2] = 0; crypto_hdr[3] = 0x20 | (keyconf->keyidx << 6); +@@ -303,7 +303,7 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm, + + case WLAN_CIPHER_SUITE_TKIP: + tx_cmd->sec_ctl = TX_CMD_SEC_TKIP; +- pn = atomic64_inc_return(&keyconf->tx_pn); ++ pn = atomic64_inc_return_unchecked(&keyconf->tx_pn); + ieee80211_tkip_add_iv(crypto_hdr, keyconf, pn); + ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key); + break; diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -index 1198caa..90099d6 100644 +index b2b7935..cc6abc7 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -@@ -2123,7 +2123,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file, +@@ -2308,7 +2308,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file, struct isr_statistics *isr_stats = &trans_pcie->isr_stats; char buf[8]; @@ -65308,7 +65663,7 @@ index 1198caa..90099d6 100644 u32 reset_flag; memset(buf, 0, sizeof(buf)); -@@ -2144,7 +2144,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file, +@@ -2329,7 +2329,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file, { struct iwl_trans *trans = file->private_data; char buf[8]; @@ -66876,7 +67231,7 @@ index 48e8a97..3499ec8 100644 const struct iw_handler_def prism54_handler_def = { diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c -index a28414c..ad61156 100644 +index e85e073..5242113 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -3218,20 +3218,20 @@ static int __init init_mac80211_hwsim(void) @@ -66928,10 +67283,10 @@ index 1efef3b..dc49c3d 100644 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, ra_list_flags); diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c -index 79c16de..efdebed 100644 +index 3cfa946..101832c 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.c +++ b/drivers/net/wireless/marvell/mwifiex/main.c -@@ -794,7 +794,7 @@ mwifiex_clone_skb_for_tx_status(struct mwifiex_private *priv, +@@ -808,7 +808,7 @@ mwifiex_clone_skb_for_tx_status(struct mwifiex_private *priv, /* * CFG802.11 network device handler for data transmission. */ @@ -66941,10 +67296,10 @@ index 79c16de..efdebed 100644 { struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c -index 6d0dc40..d059ff7 100644 +index de36438..ac74367 100644 --- a/drivers/net/wireless/marvell/mwifiex/pcie.c +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c -@@ -510,7 +510,7 @@ static int mwifiex_init_rxq_ring(struct mwifiex_adapter *adapter) +@@ -503,7 +503,7 @@ static int mwifiex_init_rxq_ring(struct mwifiex_adapter *adapter) for (i = 0; i < MWIFIEX_MAX_TXRX_BD; i++) { /* Allocate skb here so that firmware can DMA data from it */ skb = mwifiex_alloc_dma_align_buf(MWIFIEX_RX_DATA_BUF_SIZE, @@ -66953,7 +67308,7 @@ index 6d0dc40..d059ff7 100644 if (!skb) { mwifiex_dbg(adapter, ERROR, "Unable to allocate skb for RX ring.\n"); -@@ -1322,7 +1322,7 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter) +@@ -1315,7 +1315,7 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter) } skb_tmp = mwifiex_alloc_dma_align_buf(MWIFIEX_RX_DATA_BUF_SIZE, @@ -66963,10 +67318,10 @@ index 6d0dc40..d059ff7 100644 mwifiex_dbg(adapter, ERROR, "Unable to allocate skb.\n"); diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c -index 4c8cae6..87eed3c 100644 +index b2c839a..5647267 100644 --- a/drivers/net/wireless/marvell/mwifiex/sdio.c +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c -@@ -1119,8 +1119,7 @@ static void mwifiex_deaggr_sdio_pkt(struct mwifiex_adapter *adapter, +@@ -1123,8 +1123,7 @@ static void mwifiex_deaggr_sdio_pkt(struct mwifiex_adapter *adapter, __func__, pkt_len, blk_size); break; } @@ -66976,7 +67331,7 @@ index 4c8cae6..87eed3c 100644 if (!skb_deaggr) break; skb_put(skb_deaggr, pkt_len); -@@ -1366,8 +1365,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter, +@@ -1373,8 +1372,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter, /* copy pkt to deaggr buf */ skb_deaggr = mwifiex_alloc_dma_align_buf(len_arr[pind], @@ -66986,7 +67341,7 @@ index 4c8cae6..87eed3c 100644 if (!skb_deaggr) { mwifiex_dbg(adapter, ERROR, "skb allocation failure\t" "drop pkt len=%d type=%d\n", -@@ -1409,7 +1407,7 @@ rx_curr_single: +@@ -1416,7 +1414,7 @@ rx_curr_single: mwifiex_dbg(adapter, INFO, "info: RX: port: %d, rx_len: %d\n", port, rx_len); @@ -66995,7 +67350,7 @@ index 4c8cae6..87eed3c 100644 if (!skb) { mwifiex_dbg(adapter, ERROR, "single skb allocated fail,\t" -@@ -1514,7 +1512,7 @@ static int mwifiex_process_int_status(struct mwifiex_adapter *adapter) +@@ -1521,7 +1519,7 @@ static int mwifiex_process_int_status(struct mwifiex_adapter *adapter) rx_len = (u16) (rx_blocks * MWIFIEX_SDIO_BLOCK_SIZE); mwifiex_dbg(adapter, INFO, "info: rx_len = %d\n", rx_len); @@ -67071,7 +67426,7 @@ index 2d64611..66754f4 100644 u16 reg; diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c -index a26afca..156b152 100644 +index 7fa0128..8b7e948 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c @@ -83,7 +83,7 @@ static inline bool rt2800_is_305x_soc(struct rt2x00_dev *rt2x00dev) @@ -67102,7 +67457,7 @@ index a26afca..156b152 100644 u32 reg; diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h -index 2642714..d79a7e9 100644 +index 6418620..31729cf 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h @@ -377,7 +377,7 @@ struct rt2x00_intf { @@ -67233,7 +67588,7 @@ index 74233d6..482e495 100644 void rtl_get_tcb_desc(struct ieee80211_hw *hw, struct ieee80211_tx_info *info, diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c -index 5b40480..39d6d27 100644 +index e5037d1..ce357fe 100644 --- a/drivers/net/wireless/realtek/rtlwifi/pci.c +++ b/drivers/net/wireless/realtek/rtlwifi/pci.c @@ -1100,13 +1100,16 @@ done: @@ -67868,10 +68223,10 @@ index 96ccd4e..8e1c6b7 100644 struct netfront_info *np = netdev_priv(dev); struct netfront_stats *tx_stats = this_cpu_ptr(np->tx_stats); diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c -index 680f578..cf80097 100644 +index 4fd733f..9240d85 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c -@@ -2183,7 +2183,7 @@ static int nvme_resume(struct device *dev) +@@ -2126,7 +2126,7 @@ static int nvme_resume(struct device *dev) static SIMPLE_DEV_PM_OPS(nvme_dev_pm_ops, nvme_suspend, nvme_resume); static pci_ers_result_t nvme_error_detected(struct pci_dev *pdev, @@ -67881,10 +68236,10 @@ index 680f578..cf80097 100644 struct nvme_dev *dev = pci_get_drvdata(pdev); diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c -index 655f79d..c684ede 100644 +index 3349d2a..226e4df 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c -@@ -1170,7 +1170,9 @@ static int __init of_fdt_raw_init(void) +@@ -1179,7 +1179,9 @@ static int __init of_fdt_raw_init(void) pr_warn("fdt: not creating '/sys/firmware/fdt': CRC check failed\n"); return 0; } @@ -68003,7 +68358,7 @@ index 1fc622b..8c48fc3 100644 extern struct oprofile_stat_struct oprofile_stats; diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c -index b48ac630..0a69794 100644 +index a0e5260..a6d7637 100644 --- a/drivers/oprofile/oprofilefs.c +++ b/drivers/oprofile/oprofilefs.c @@ -176,8 +176,8 @@ int oprofilefs_create_ro_ulong(struct dentry *root, @@ -68061,11 +68416,11 @@ index c776333..aa6b325 100644 } #endif /* IEEE1284.3 support. */ -diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c -index 1652bc7..4f999c4 100644 ---- a/drivers/pci/host/pci-host-generic.c -+++ b/drivers/pci/host/pci-host-generic.c -@@ -28,7 +28,7 @@ +diff --git a/drivers/pci/host/pci-host-common.h b/drivers/pci/host/pci-host-common.h +index 09f3fa0..af67bc0 100644 +--- a/drivers/pci/host/pci-host-common.h ++++ b/drivers/pci/host/pci-host-common.h +@@ -25,7 +25,7 @@ struct gen_pci_cfg_bus_ops { u32 bus_shift; struct pci_ops ops; @@ -68271,19 +68626,19 @@ index a080f44..24ad26c 100644 /** diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c -index 95d9e7b..f0ad49e 100644 +index 342b691..aede3f4 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c -@@ -1133,7 +1133,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) +@@ -1137,7 +1137,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) { /* allocate attribute structure, piggyback attribute name */ int name_len = write_combine ? 13 : 10; - struct bin_attribute *res_attr; + bin_attribute_no_const *res_attr; + char *res_attr_name; int retval; - res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC); -@@ -1310,7 +1310,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor +@@ -1317,7 +1317,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor static int pci_create_capabilities_sysfs(struct pci_dev *dev) { int retval; @@ -68292,29 +68647,29 @@ index 95d9e7b..f0ad49e 100644 /* If the device has VPD, try to expose it in sysfs. */ if (dev->vpd) { -@@ -1357,7 +1357,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev) +@@ -1364,7 +1364,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev) { int retval; - int rom_size = 0; + int rom_size; - struct bin_attribute *attr; + bin_attribute_no_const *attr; if (!sysfs_initialized) return -EACCES; diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h -index 9a1660f..278d340 100644 +index a814bbb..ff02c2c 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h -@@ -103,7 +103,7 @@ struct pci_vpd_ops { +@@ -102,7 +102,7 @@ struct pci_vpd_ops { + struct pci_vpd { - unsigned int len; const struct pci_vpd_ops *ops; - struct bin_attribute *attr; /* descriptor for sysfs VPD entry */ + bin_attribute_no_const *attr; /* descriptor for sysfs VPD entry */ - }; - - int pci_vpd_pci22_init(struct pci_dev *dev); -@@ -302,7 +302,7 @@ static inline int pci_iov_bus_range(struct pci_bus *bus) + struct mutex lock; + unsigned int len; + u16 flag; +@@ -303,7 +303,7 @@ static inline int pci_iov_bus_range(struct pci_bus *bus) #endif /* CONFIG_PCI_IOV */ @@ -68372,7 +68727,7 @@ index be35da2..ec16cdb 100644 * Boxes that should not use MSI for PCIe PME signaling. */ diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c -index 6e3feec..b3721b0 100644 +index bf8405f..80490e5 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -179,7 +179,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, @@ -68406,10 +68761,10 @@ index 3f155e7..0f4b1f0 100644 &proc_bus_pci_dev_operations); proc_initialized = 1; diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c -index 7796d0a..2f9d2f6 100644 +index 55641a3..ff9c8dc 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c -@@ -406,8 +406,12 @@ static void __assign_resources_sorted(struct list_head *head, +@@ -405,8 +405,12 @@ static void __assign_resources_sorted(struct list_head *head, /* Update res in head list with add_size in realloc_head list */ list_for_each_entry_safe(dev_res, tmp_res, head, list) { @@ -68424,7 +68779,7 @@ index 7796d0a..2f9d2f6 100644 /* * There are two kinds of additional resources in the list: -@@ -1115,7 +1119,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, +@@ -1114,7 +1118,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, return 0; } @@ -68509,10 +68864,10 @@ index f9a2454..03f513c 100644 /* * Today all Chromebooks/boxes ship with Google_* as version and diff --git a/drivers/platform/x86/alienware-wmi.c b/drivers/platform/x86/alienware-wmi.c -index 1e1e594..8fe59c5 100644 +index 0056294..8f8c2d5 100644 --- a/drivers/platform/x86/alienware-wmi.c +++ b/drivers/platform/x86/alienware-wmi.c -@@ -150,7 +150,7 @@ struct wmax_led_args { +@@ -209,7 +209,7 @@ struct wmax_led_args { } __packed; static struct platform_device *platform_device; @@ -68521,7 +68876,7 @@ index 1e1e594..8fe59c5 100644 static struct attribute **zone_attrs; static struct platform_zone *zone_data; -@@ -160,7 +160,7 @@ static struct platform_driver platform_driver = { +@@ -219,7 +219,7 @@ static struct platform_driver platform_driver = { } }; @@ -68531,10 +68886,10 @@ index 1e1e594..8fe59c5 100644 }; diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c -index f236250..6b4d0a9 100644 +index 4034d2d..53ed0bd 100644 --- a/drivers/platform/x86/apple-gmux.c +++ b/drivers/platform/x86/apple-gmux.c -@@ -425,7 +425,7 @@ static int gmux_set_power_state(enum vga_switcheroo_client_id id, +@@ -479,7 +479,7 @@ static int gmux_set_power_state(enum vga_switcheroo_client_id id, return gmux_set_discrete_state(apple_gmux_data, state); } @@ -68773,7 +69128,7 @@ index e9caa34..72ed655 100644 .ident = "Sony Vaio", .matches = { diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c -index a268a7a..558ca4c 100644 +index 9255ff3..b38a0d9 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -2461,10 +2461,10 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn, @@ -68967,10 +69322,10 @@ index 456987c..45396a3 100644 return 0; } diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c -index ed2d7fd..266b28f 100644 +index 80fed98..2fe1ff6 100644 --- a/drivers/power/power_supply_sysfs.c +++ b/drivers/power/power_supply_sysfs.c -@@ -238,17 +238,15 @@ static struct attribute_group power_supply_attr_group = { +@@ -239,17 +239,15 @@ static struct attribute_group power_supply_attr_group = { .is_visible = power_supply_attr_is_visible, }; @@ -69229,10 +69584,10 @@ index 302e626..12579af 100644 da->attr.name = info->pin_config[i].name; da->attr.mode = 0644; diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c -index 744c988..a269ffb 100644 +index fd0e4e3..2f2eba9 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c -@@ -3839,7 +3839,7 @@ regulator_register(const struct regulator_desc *regulator_desc, +@@ -3861,7 +3861,7 @@ regulator_register(const struct regulator_desc *regulator_desc, const struct regulation_constraints *constraints = NULL; const struct regulator_init_data *init_data; struct regulator_config *config = NULL; @@ -69241,7 +69596,7 @@ index 744c988..a269ffb 100644 struct regulator_dev *rdev; struct device *dev; int ret, i; -@@ -3922,7 +3922,7 @@ regulator_register(const struct regulator_desc *regulator_desc, +@@ -3954,7 +3954,7 @@ regulator_register(const struct regulator_desc *regulator_desc, rdev->dev.class = ®ulator_class; rdev->dev.parent = dev; dev_set_name(&rdev->dev, "regulator.%lu", @@ -69322,7 +69677,7 @@ index 0d17c92..ce5897e 100644 mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13892_regulators, diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c -index 9e03d15..36e341c 100644 +index 3d7d58a..308df86 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -327,9 +327,10 @@ void rproc_free_vring(struct rproc_vring *rvring) @@ -69473,10 +69828,10 @@ index a6d9434..dc26b71 100644 case RTC_PIE_ON: diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c -index cf685f6..2311b8f 100644 +index ecb7dba..d2ea086 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c -@@ -107,7 +107,7 @@ struct ds1307 { +@@ -111,7 +111,7 @@ struct ds1307 { u8 offset; /* register's offset */ u8 regs[11]; u16 nvram_offset; @@ -69501,10 +69856,10 @@ index d99a705..99654e7 100644 ret = sysfs_create_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr); if (ret) diff --git a/drivers/rtc/rtc-rv8803.c b/drivers/rtc/rtc-rv8803.c -index 7155c08..10ba718 100644 +index f623038..c22e72a 100644 --- a/drivers/rtc/rtc-rv8803.c +++ b/drivers/rtc/rtc-rv8803.c -@@ -423,6 +423,15 @@ static struct rtc_class_ops rv8803_rtc_ops = { +@@ -422,6 +422,15 @@ static struct rtc_class_ops rv8803_rtc_ops = { .ioctl = rv8803_ioctl, }; @@ -69520,7 +69875,7 @@ index 7155c08..10ba718 100644 static int rv8803_probe(struct i2c_client *client, const struct i2c_device_id *id) { -@@ -465,15 +474,11 @@ static int rv8803_probe(struct i2c_client *client, +@@ -474,15 +483,11 @@ static int rv8803_probe(struct i2c_client *client, if (err) { dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n"); client->irq = 0; @@ -69574,10 +69929,10 @@ index 3a2da4c..1d1d4b1 100644 rtc = devm_rtc_device_register(&plat_dev->dev, "test", diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c -index e4c2437..3b3cd62 100644 +index 7dfd0fa..5535b6b 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c -@@ -775,6 +775,11 @@ static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd) +@@ -772,6 +772,11 @@ static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd) return 0; } @@ -69589,7 +69944,7 @@ index e4c2437..3b3cd62 100644 int aac_probe_container(struct aac_dev *dev, int cid) { struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL); -@@ -787,7 +792,7 @@ int aac_probe_container(struct aac_dev *dev, int cid) +@@ -784,7 +789,7 @@ int aac_probe_container(struct aac_dev *dev, int cid) return -ENOMEM; } scsicmd->list.next = NULL; @@ -69658,10 +70013,10 @@ index 109e2c9..7d3c9b5 100644 int enint_coal; diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c -index 069e5c5..f67b786 100644 +index f05e773..b48c418 100644 --- a/drivers/scsi/be2iscsi/be_main.c +++ b/drivers/scsi/be2iscsi/be_main.c -@@ -5460,7 +5460,7 @@ beiscsi_hw_health_check(struct work_struct *work) +@@ -5465,7 +5465,7 @@ beiscsi_hw_health_check(struct work_struct *work) static pci_ers_result_t beiscsi_eeh_err_detected(struct pci_dev *pdev, @@ -69687,10 +70042,10 @@ index 0e119d8..1bf8a49 100644 struct bfa_iocfc_cfg_s cfg; u32 req_cq_pi[BFI_IOC_MAX_CQS]; diff --git a/drivers/scsi/bfa/bfa_core.c b/drivers/scsi/bfa/bfa_core.c -index 2ea0db4..82ea057 100644 +index 7209afa..2450c125 100644 --- a/drivers/scsi/bfa/bfa_core.c +++ b/drivers/scsi/bfa/bfa_core.c -@@ -1900,15 +1900,13 @@ bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q) +@@ -1919,15 +1919,13 @@ bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q) struct list_head *qe; struct list_head *qen; struct bfa_cb_qe_s *hcb_qe; @@ -69708,10 +70063,10 @@ index 2ea0db4..82ea057 100644 hcb_qe->cbfn(hcb_qe->cbarg, BFA_TRUE); } diff --git a/drivers/scsi/bfa/bfa_cs.h b/drivers/scsi/bfa/bfa_cs.h -index da9cf65..8cbfcff 100644 +index df6760c..3b22f4d 100644 --- a/drivers/scsi/bfa/bfa_cs.h +++ b/drivers/scsi/bfa/bfa_cs.h -@@ -217,8 +217,6 @@ bfa_q_is_on_q_func(struct list_head *q, struct list_head *qe) +@@ -184,8 +184,6 @@ bfa_q_is_on_q_func(struct list_head *q, struct list_head *qe) * @ BFA state machine interfaces */ @@ -69720,7 +70075,7 @@ index da9cf65..8cbfcff 100644 /* * oc - object class eg. bfa_ioc * st - state, eg. reset -@@ -228,20 +226,75 @@ typedef void (*bfa_sm_t)(void *sm, int event); +@@ -195,20 +193,75 @@ typedef void (*bfa_sm_t)(void *sm, int event); #define bfa_sm_state_decl(oc, st, otype, etype) \ static void oc ## _sm_ ## st(otype * fsm, etype event) @@ -69801,7 +70156,7 @@ index da9cf65..8cbfcff 100644 /* * State machine with entry actions. -@@ -259,17 +312,66 @@ typedef void (*bfa_fsm_t)(void *fsm, int event); +@@ -226,17 +279,66 @@ typedef void (*bfa_fsm_t)(void *fsm, int event); static void oc ## _sm_ ## st ## _entry(otype * fsm) #define bfa_fsm_set_state(_fsm, _state) do { \ @@ -70198,7 +70553,7 @@ index de50349..6d676be 100644 diff --git a/drivers/scsi/bfa/bfa_ioc.c b/drivers/scsi/bfa/bfa_ioc.c -index 251e2ff..cef239a 100644 +index a1ada4a..6ed9ba2 100644 --- a/drivers/scsi/bfa/bfa_ioc.c +++ b/drivers/scsi/bfa/bfa_ioc.c @@ -148,7 +148,7 @@ bfa_fsm_state_decl(bfa_ioc, disabling, struct bfa_ioc_s, enum ioc_event); @@ -71043,18 +71398,6 @@ index c2a6f9f..5a37cc4 100644 switch (evt) { case CSIO_SCSIE_ABORT: case CSIO_SCSIE_CLOSE: -diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c -index f3bb7af..ead83a2 100644 ---- a/drivers/scsi/cxgbi/libcxgbi.c -+++ b/drivers/scsi/cxgbi/libcxgbi.c -@@ -688,6 +688,7 @@ static struct rt6_info *find_route_ipv6(const struct in6_addr *saddr, - { - struct flowi6 fl; - -+ memset(&fl, 0, sizeof(fl)); - if (saddr) - memcpy(&fl.saddr, saddr, sizeof(struct in6_addr)); - if (daddr) diff --git a/drivers/scsi/fcoe/fcoe_sysfs.c b/drivers/scsi/fcoe/fcoe_sysfs.c index 045c4e1..13de803 100644 --- a/drivers/scsi/fcoe/fcoe_sysfs.c @@ -71100,7 +71443,7 @@ index 045c4e1..13de803 100644 error = bus_register(&fcoe_bus_type); if (error) diff --git a/drivers/scsi/fcoe/fcoe_transport.c b/drivers/scsi/fcoe/fcoe_transport.c -index d7597c0..fa26730 100644 +index 641c60e..5bfb1f1 100644 --- a/drivers/scsi/fcoe/fcoe_transport.c +++ b/drivers/scsi/fcoe/fcoe_transport.c @@ -32,13 +32,13 @@ MODULE_AUTHOR("Open-FCoE.org"); @@ -71121,7 +71464,7 @@ index d7597c0..fa26730 100644 static int libfcoe_device_notification(struct notifier_block *notifier, ulong event, void *ptr); -@@ -842,7 +842,7 @@ EXPORT_SYMBOL(fcoe_ctlr_destroy_store); +@@ -846,7 +846,7 @@ EXPORT_SYMBOL(fcoe_ctlr_destroy_store); * * Returns: 0 for success */ @@ -71130,7 +71473,7 @@ index d7597c0..fa26730 100644 { int rc = -ENODEV; struct net_device *netdev = NULL; -@@ -907,7 +907,7 @@ out_nodev: +@@ -911,7 +911,7 @@ out_nodev: * * Returns: 0 for success */ @@ -71139,7 +71482,7 @@ index d7597c0..fa26730 100644 { int rc = -ENODEV; struct net_device *netdev = NULL; -@@ -951,7 +951,7 @@ out_nodev: +@@ -955,7 +955,7 @@ out_nodev: * * Returns: 0 for success */ @@ -71148,7 +71491,7 @@ index d7597c0..fa26730 100644 { int rc = -ENODEV; struct net_device *netdev = NULL; -@@ -985,7 +985,7 @@ out_nodev: +@@ -989,7 +989,7 @@ out_nodev: * * Returns: 0 for success */ @@ -71157,33 +71500,11 @@ index d7597c0..fa26730 100644 { int rc = -ENODEV; struct net_device *netdev = NULL; -diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c -index 82ac1cd..aeee84c 100644 ---- a/drivers/scsi/hosts.c -+++ b/drivers/scsi/hosts.c -@@ -42,7 +42,7 @@ - #include "scsi_logging.h" - - --static atomic_t scsi_host_next_hn = ATOMIC_INIT(0); /* host_no for next new host */ -+static atomic_unchecked_t scsi_host_next_hn = ATOMIC_INIT(0); /* host_no for next new host */ - - - static void scsi_host_cls_release(struct device *dev) -@@ -410,7 +410,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize) - * subtract one because we increment first then return, but we need to - * know what the next host number was before increment - */ -- shost->host_no = atomic_inc_return(&scsi_host_next_hn) - 1; -+ shost->host_no = atomic_inc_return_unchecked(&scsi_host_next_hn) - 1; - shost->dma_channel = 0xff; - - /* These three are default values which can be overridden */ diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c -index 38ce0e3..f74fc2a 100644 +index 5be944c..4a7936d 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c -@@ -912,10 +912,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q) +@@ -914,10 +914,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q) struct reply_queue_buffer *rq = &h->reply_queue[q]; if (h->transMethod & CFGTBL_Trans_io_accel1) @@ -71196,7 +71517,7 @@ index 38ce0e3..f74fc2a 100644 if ((rq->head[rq->current_entry] & 1) == rq->wraparound) { a = rq->head[rq->current_entry]; -@@ -1097,7 +1097,7 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h, +@@ -1099,7 +1099,7 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h, break; default: set_performant_mode(h, c, reply_queue); @@ -71205,7 +71526,7 @@ index 38ce0e3..f74fc2a 100644 } } -@@ -6839,17 +6839,17 @@ static void __iomem *remap_pci_mem(ulong base, ulong size) +@@ -6843,17 +6843,17 @@ static void __iomem *remap_pci_mem(ulong base, ulong size) static inline unsigned long get_next_completion(struct ctlr_info *h, u8 q) { @@ -71226,7 +71547,7 @@ index 38ce0e3..f74fc2a 100644 (h->interrupts_enabled == 0); } -@@ -7777,7 +7777,7 @@ static int hpsa_pci_init(struct ctlr_info *h) +@@ -7781,7 +7781,7 @@ static int hpsa_pci_init(struct ctlr_info *h) if (prod_index < 0) return prod_index; h->product_name = products[prod_index].product_name; @@ -71235,7 +71556,7 @@ index 38ce0e3..f74fc2a 100644 h->needs_abort_tags_swizzled = ctlr_needs_abort_tags_swizzled(h->board_id); -@@ -8176,7 +8176,7 @@ static void controller_lockup_detected(struct ctlr_info *h) +@@ -8180,7 +8180,7 @@ static void controller_lockup_detected(struct ctlr_info *h) unsigned long flags; u32 lockup_detected; @@ -71244,7 +71565,7 @@ index 38ce0e3..f74fc2a 100644 spin_lock_irqsave(&h->lock, flags); lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET); if (!lockup_detected) { -@@ -8512,7 +8512,7 @@ reinit_after_soft_reset: +@@ -8516,7 +8516,7 @@ reinit_after_soft_reset: } /* make sure the board interrupts are off */ @@ -71253,7 +71574,7 @@ index 38ce0e3..f74fc2a 100644 rc = hpsa_request_irqs(h, do_hpsa_intr_msi, do_hpsa_intr_intx); if (rc) -@@ -8570,7 +8570,7 @@ reinit_after_soft_reset: +@@ -8574,7 +8574,7 @@ reinit_after_soft_reset: * fake ones to scoop up any residual completions. */ spin_lock_irqsave(&h->lock, flags); @@ -71262,7 +71583,7 @@ index 38ce0e3..f74fc2a 100644 spin_unlock_irqrestore(&h->lock, flags); hpsa_free_irqs(h); rc = hpsa_request_irqs(h, hpsa_msix_discard_completions, -@@ -8600,9 +8600,9 @@ reinit_after_soft_reset: +@@ -8604,9 +8604,9 @@ reinit_after_soft_reset: dev_info(&h->pdev->dev, "Board READY.\n"); dev_info(&h->pdev->dev, "Waiting for stale completions to drain.\n"); @@ -71274,7 +71595,7 @@ index 38ce0e3..f74fc2a 100644 rc = controller_reset_failed(h->cfgtable); if (rc) -@@ -8629,7 +8629,7 @@ reinit_after_soft_reset: +@@ -8633,7 +8633,7 @@ reinit_after_soft_reset: /* Turn the interrupts on so we can service requests */ @@ -71283,7 +71604,7 @@ index 38ce0e3..f74fc2a 100644 hpsa_hba_inquiry(h); -@@ -8650,7 +8650,7 @@ reinit_after_soft_reset: +@@ -8654,7 +8654,7 @@ reinit_after_soft_reset: clean7: /* perf, sg, cmd, irq, shost, pci, lu, aer/h */ hpsa_free_performant_mode(h); @@ -71292,7 +71613,7 @@ index 38ce0e3..f74fc2a 100644 clean6: /* sg, cmd, irq, pci, lockup, wq/aer/h */ hpsa_free_sg_chain_blocks(h); clean5: /* cmd, irq, shost, pci, lu, aer/h */ -@@ -8785,7 +8785,7 @@ static void hpsa_shutdown(struct pci_dev *pdev) +@@ -8789,7 +8789,7 @@ static void hpsa_shutdown(struct pci_dev *pdev) * To write all data in the battery backed cache to disks */ hpsa_flush_cache(h); @@ -71301,7 +71622,7 @@ index 38ce0e3..f74fc2a 100644 hpsa_free_irqs(h); /* init_one 4 */ hpsa_disable_interrupt_mode(h); /* pci_init 2 */ } -@@ -8927,7 +8927,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) +@@ -8931,7 +8931,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) CFGTBL_Trans_enable_directed_msix | (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2)); @@ -71310,7 +71631,7 @@ index 38ce0e3..f74fc2a 100644 /* This is a bit complicated. There are 8 registers on * the controller which we write to to tell it 8 different -@@ -8969,7 +8969,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) +@@ -8973,7 +8973,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) * perform the superfluous readl() after each command submission. */ if (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2)) @@ -71319,7 +71640,7 @@ index 38ce0e3..f74fc2a 100644 /* Controller spec: zero out this buffer. */ for (i = 0; i < h->nreply_queues; i++) -@@ -8999,12 +8999,12 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) +@@ -9003,12 +9003,12 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) * enable outbound interrupt coalescing in accelerator mode; */ if (trans_support & CFGTBL_Trans_io_accel1) { @@ -71335,10 +71656,10 @@ index 38ce0e3..f74fc2a 100644 writel(4, &h->cfgtable->HostWrite.CoalIntCount); } diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h -index fdd39fc..a2176e0 100644 +index d06bb74..8650763 100644 --- a/drivers/scsi/hpsa.h +++ b/drivers/scsi/hpsa.h -@@ -177,7 +177,7 @@ struct ctlr_info { +@@ -178,7 +178,7 @@ struct ctlr_info { unsigned int msix_vector; unsigned int msi_vector; int intr_mode; /* either PERF_MODE_INT or SIMPLE_MODE_INT */ @@ -71347,7 +71668,7 @@ index fdd39fc..a2176e0 100644 /* queue and queue Info */ unsigned int Qdepth; -@@ -577,38 +577,38 @@ static unsigned long SA5_ioaccel_mode1_completed(struct ctlr_info *h, u8 q) +@@ -578,38 +578,38 @@ static unsigned long SA5_ioaccel_mode1_completed(struct ctlr_info *h, u8 q) } static struct access_method SA5_access = { @@ -71775,7 +72096,7 @@ index 90a3ca5..a68c8cd 100644 struct dentry *idiag_root; struct dentry *idiag_pci_cfg; diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c -index 25aa9b9..d700a65 100644 +index a63542b..80692ee 100644 --- a/drivers/scsi/lpfc/lpfc_debugfs.c +++ b/drivers/scsi/lpfc/lpfc_debugfs.c @@ -106,7 +106,7 @@ MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc, @@ -71884,7 +72205,7 @@ index f57d02c..6ba534b 100644 lpfc_transport_template = fc_attach_transport(&lpfc_transport_functions); diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c -index 152b3c8..cfb6a1d 100644 +index 3bd0be6..f9b0725e 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c @@ -261,7 +261,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba) @@ -71919,10 +72240,10 @@ index 152b3c8..cfb6a1d 100644 /** diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h -index c0f7c8c..2903f29 100644 +index fce414a..3c5884e 100644 --- a/drivers/scsi/megaraid/megaraid_sas.h +++ b/drivers/scsi/megaraid/megaraid_sas.h -@@ -1742,7 +1742,7 @@ struct megasas_instance { +@@ -2046,7 +2046,7 @@ struct megasas_instance { s8 init_id; u16 max_num_sge; @@ -71930,12 +72251,12 @@ index c0f7c8c..2903f29 100644 + u16 max_fw_cmds __intentional_overflow(-1); u16 max_mfi_cmds; u16 max_scsi_cmds; - u32 max_sectors_per_req; + u16 ldio_threshold; diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c -index 83658ac..4269881 100644 +index 8c44b9c..a55ec7f 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c -@@ -100,7 +100,7 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag); +@@ -104,7 +104,7 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag); * */ static int @@ -71945,7 +72266,7 @@ index 83658ac..4269881 100644 int ret = param_set_int(val, kp); struct MPT3SAS_ADAPTER *ioc; diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c -index 9ab77b0..3cc9611 100644 +index e0e4920..62b1b8e1 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -282,7 +282,7 @@ struct _scsi_io_transfer { @@ -71957,7 +72278,7 @@ index 9ab77b0..3cc9611 100644 { int ret = param_set_int(val, kp); struct MPT3SAS_ADAPTER *ioc; -@@ -8702,7 +8702,7 @@ scsih_resume(struct pci_dev *pdev) +@@ -8910,7 +8910,7 @@ scsih_resume(struct pci_dev *pdev) * PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT */ pci_ers_result_t @@ -72173,10 +72494,10 @@ index e1d150f..6c6df44 100644 /* To indicate add/delete/modify during CCN */ u8 change_detected; diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c -index 6992ebc..30d7691 100644 +index 4dc06a13..5d012f6 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c -@@ -2242,7 +2242,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable) +@@ -2252,7 +2252,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable) return 0; } @@ -72185,7 +72506,7 @@ index 6992ebc..30d7691 100644 .show_host_node_name = 1, .show_host_port_name = 1, -@@ -2290,7 +2290,7 @@ struct fc_function_template qla2xxx_transport_functions = { +@@ -2300,7 +2300,7 @@ struct fc_function_template qla2xxx_transport_functions = { .bsg_timeout = qla24xx_bsg_timeout, }; @@ -72195,10 +72516,10 @@ index 6992ebc..30d7691 100644 .show_host_node_name = 1, .show_host_port_name = 1, diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h -index 0103e46..6220a84 100644 +index fe94377..625fa13 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h -@@ -176,8 +176,8 @@ extern void qla2x00_disable_board_on_pci_error(struct work_struct *); +@@ -178,8 +178,8 @@ extern void qla2x00_disable_board_on_pci_error(struct work_struct *); */ extern struct scsi_host_template qla2xxx_driver_template; extern struct scsi_transport_template *qla2xxx_transport_vport_template; @@ -72209,7 +72530,7 @@ index 0103e46..6220a84 100644 extern void qla24xx_deallocate_vp_id(scsi_qla_host_t *); extern int qla24xx_disable_vp (scsi_qla_host_t *); extern int qla24xx_enable_vp (scsi_qla_host_t *); -@@ -578,8 +578,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t); +@@ -580,8 +580,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t); struct device_attribute; extern struct device_attribute *qla2x00_host_attrs[]; struct fc_function_template; @@ -72221,10 +72542,10 @@ index 0103e46..6220a84 100644 extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool); extern void qla2x00_init_host_attr(scsi_qla_host_t *); diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c -index f6c7ce3..dccd3d4 100644 +index 7c0b60c..0c2c9de 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c -@@ -291,12 +291,12 @@ struct scsi_transport_template *qla2xxx_transport_vport_template = NULL; +@@ -298,12 +298,12 @@ struct scsi_transport_template *qla2xxx_transport_vport_template = NULL; */ __inline__ void @@ -72239,7 +72560,7 @@ index f6c7ce3..dccd3d4 100644 add_timer(&vha->timer); vha->timer_active = 1; } -@@ -1441,8 +1441,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha) +@@ -1448,8 +1448,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha) !pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) { /* Ok, a 64bit DMA mask is applicable. */ ha->flags.enable_64bit_addressing = 1; @@ -72252,7 +72573,7 @@ index f6c7ce3..dccd3d4 100644 return; } } -@@ -5290,8 +5292,9 @@ qla2x00_rst_aen(scsi_qla_host_t *vha) +@@ -5300,8 +5302,9 @@ qla2x00_rst_aen(scsi_qla_host_t *vha) * Context: Interrupt ***************************************************************************/ void @@ -72263,7 +72584,7 @@ index f6c7ce3..dccd3d4 100644 unsigned long cpu_flags = 0; int start_dpc = 0; int index; -@@ -5553,7 +5556,7 @@ qla2x00_release_firmware(void) +@@ -5563,7 +5566,7 @@ qla2x00_release_firmware(void) } static pci_ers_result_t @@ -72273,10 +72594,10 @@ index f6c7ce3..dccd3d4 100644 scsi_qla_host_t *vha = pci_get_drvdata(pdev); struct qla_hw_data *ha = vha->hw; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c -index ee967be..7fcb8c0 100644 +index 8a44d15..a3a925a 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c -@@ -667,7 +667,7 @@ static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd) +@@ -668,7 +668,7 @@ static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd) loop_id = le16_to_cpu(n->u.isp24.nport_handle); if (loop_id == 0xFFFF) { /* Global event */ @@ -72285,7 +72606,7 @@ index ee967be..7fcb8c0 100644 spin_lock_irqsave(&ha->tgt.sess_lock, flags); qlt_clear_tgt_db(vha->vha_tgt.qla_tgt); spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); -@@ -834,8 +834,9 @@ static void qlt_undelete_sess(struct qla_tgt_sess *sess) +@@ -835,8 +835,9 @@ static void qlt_undelete_sess(struct qla_tgt_sess *sess) sess->deleted = 0; } @@ -72296,7 +72617,7 @@ index ee967be..7fcb8c0 100644 struct qla_tgt *tgt = container_of(work, struct qla_tgt, sess_del_work); struct scsi_qla_host *vha = tgt->vha; -@@ -5806,7 +5807,7 @@ static struct qla_tgt_sess *qlt_make_local_sess(struct scsi_qla_host *vha, +@@ -5817,7 +5818,7 @@ static struct qla_tgt_sess *qlt_make_local_sess(struct scsi_qla_host *vha, retry: global_resets = @@ -72305,7 +72626,7 @@ index ee967be..7fcb8c0 100644 rc = qla24xx_get_loop_id(vha, s_id, &loop_id); if (rc != 0) { -@@ -5845,12 +5846,12 @@ retry: +@@ -5856,12 +5857,12 @@ retry: } if (global_resets != @@ -72320,7 +72641,7 @@ index ee967be..7fcb8c0 100644 qla_tgt->tgt_global_resets_count)); goto retry; } -@@ -6063,8 +6064,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha) +@@ -6074,8 +6075,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha) init_waitqueue_head(&tgt->waitQ); INIT_LIST_HEAD(&tgt->sess_list); INIT_LIST_HEAD(&tgt->del_sess_list); @@ -72330,7 +72651,7 @@ index ee967be..7fcb8c0 100644 spin_lock_init(&tgt->sess_work_lock); INIT_WORK(&tgt->sess_work, qlt_sess_work_fn); INIT_LIST_HEAD(&tgt->sess_works_list); -@@ -6072,7 +6072,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha) +@@ -6083,7 +6083,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha) INIT_LIST_HEAD(&tgt->srr_ctio_list); INIT_LIST_HEAD(&tgt->srr_imm_list); INIT_WORK(&tgt->srr_work, qlt_handle_srr_work); @@ -72340,7 +72661,7 @@ index ee967be..7fcb8c0 100644 base_vha->vha_tgt.qla_tgt = tgt; diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h -index 22a6a76..7f73de1 100644 +index d857fee..01fc070 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -877,7 +877,7 @@ struct qla_tgt { @@ -72445,10 +72766,10 @@ index 1deb6ad..3057db5 100644 if (drv->done) good_bytes = drv->done(cmd); diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c -index 8c6e318..1c58581 100644 +index f704d02..18cad07 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c -@@ -1599,7 +1599,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) +@@ -1602,7 +1602,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) shost = sdev->host; scsi_init_cmd_errh(cmd); cmd->result = DID_NO_CONNECT << 16; @@ -72457,7 +72778,7 @@ index 8c6e318..1c58581 100644 /* * SCSI request completion path will do scsi_device_unbusy(), -@@ -1622,9 +1622,9 @@ static void scsi_softirq_done(struct request *rq) +@@ -1625,9 +1625,9 @@ static void scsi_softirq_done(struct request *rq) INIT_LIST_HEAD(&cmd->eh_entry); @@ -72469,7 +72790,7 @@ index 8c6e318..1c58581 100644 disposition = scsi_decide_disposition(cmd); if (disposition != SUCCESS && -@@ -1665,7 +1665,7 @@ static int scsi_dispatch_cmd(struct scsi_cmnd *cmd) +@@ -1668,7 +1668,7 @@ static int scsi_dispatch_cmd(struct scsi_cmnd *cmd) struct Scsi_Host *host = cmd->device->host; int rtn = 0; @@ -72479,10 +72800,10 @@ index 8c6e318..1c58581 100644 /* check if the device is still usable */ if (unlikely(cmd->device->sdev_state == SDEV_DEL)) { diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c -index 9e5f893..2bf2da8 100644 +index c7e4b5e..ee7495b 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c -@@ -818,7 +818,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr, \ +@@ -847,7 +847,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr, \ char *buf) \ { \ struct scsi_device *sdev = to_scsi_device(dev); \ @@ -72532,7 +72853,7 @@ index 8a88226..0d26fd1 100644 /* * Check for overflow; dev_loss_tmo is u32 diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c -index e4b3d8f..3ab4dad 100644 +index 4414816..95c7991 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c @@ -79,7 +79,7 @@ struct iscsi_internal { @@ -72553,7 +72874,7 @@ index e4b3d8f..3ab4dad 100644 if (target_id == ISCSI_MAX_TARGET) { id = ida_simple_get(&iscsi_sess_ida, 0, 0, GFP_KERNEL); -@@ -4522,7 +4522,7 @@ static __init int iscsi_transport_init(void) +@@ -4524,7 +4524,7 @@ static __init int iscsi_transport_init(void) printk(KERN_INFO "Loading iSCSI transport class v%s.\n", ISCSI_TRANSPORT_VERSION); @@ -72616,7 +72937,7 @@ index e3cd3ec..97ab643 100644 transport_setup_device(&rport->dev); diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c -index 974ca5b..f42903f 100644 +index f52b74c..527a5d7 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -112,7 +112,7 @@ static int sd_resume(struct device *); @@ -72721,10 +73042,10 @@ index de2c1bf..60b8563 100644 .read = fuse_read, }; diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c -index 47eff80..415be5a 100644 +index 0239b45..b196163 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c -@@ -2528,7 +2528,7 @@ int spi_bus_unlock(struct spi_master *master) +@@ -2934,7 +2934,7 @@ int spi_bus_unlock(struct spi_master *master) EXPORT_SYMBOL_GPL(spi_bus_unlock); /* portable code must never pass more than 32 bytes */ @@ -72765,7 +73086,7 @@ index aff9cdb..a2f1a81 100644 MKDEV(0, tdev->index), NULL, "%s", tdev->name); if (IS_ERR(tdev->dev)) diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c -index d57fade..106a0f7 100644 +index 7c7b477..8f133af 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -311,8 +311,8 @@ static void comedi_file_reset(struct file *file) @@ -72779,7 +73100,7 @@ index d57fade..106a0f7 100644 } static void comedi_file_check(struct file *file) -@@ -1985,7 +1985,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, unsigned long arg, +@@ -1989,7 +1989,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, unsigned long arg, !(s_old->async->cmd.flags & CMDF_WRITE)) return -EBUSY; @@ -72788,7 +73109,7 @@ index d57fade..106a0f7 100644 return 0; } -@@ -2027,7 +2027,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, unsigned long arg, +@@ -2031,7 +2031,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, unsigned long arg, (s_old->async->cmd.flags & CMDF_WRITE)) return -EBUSY; @@ -72798,10 +73119,10 @@ index d57fade..106a0f7 100644 } diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c -index b1e4516..2ad1652 100644 +index 0c1a77c..c25bf97 100644 --- a/drivers/staging/fbtft/fbtft-core.c +++ b/drivers/staging/fbtft/fbtft-core.c -@@ -651,7 +651,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display, +@@ -649,7 +649,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display, { struct fb_info *info; struct fbtft_par *par; @@ -72811,10 +73132,10 @@ index b1e4516..2ad1652 100644 u8 *vmem = NULL; void *txbuf = NULL; diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h -index 3ccdec9..fcd4277 100644 +index d3bc394..7fa336d 100644 --- a/drivers/staging/fbtft/fbtft.h +++ b/drivers/staging/fbtft/fbtft.h -@@ -101,7 +101,7 @@ struct fbtft_ops { +@@ -93,7 +93,7 @@ struct fbtft_ops { int (*set_var)(struct fbtft_par *par); int (*set_gamma)(struct fbtft_par *par, unsigned long *curves); @@ -72824,7 +73145,7 @@ index 3ccdec9..fcd4277 100644 /** * struct fbtft_display - Describes the display properties diff --git a/drivers/staging/gdm724x/gdm_lte.c b/drivers/staging/gdm724x/gdm_lte.c -index 17d148f..68f3b55 100644 +index bb55219..789b758 100644 --- a/drivers/staging/gdm724x/gdm_lte.c +++ b/drivers/staging/gdm724x/gdm_lte.c @@ -410,7 +410,7 @@ static s32 gdm_lte_tx_nic_type(struct net_device *dev, struct sk_buff *skb) @@ -72849,19 +73170,19 @@ index eb7e252..b7bd5e5 100644 static struct tty_driver *gdm_driver[TTY_MAX_COUNT]; static struct gdm *gdm_table[TTY_MAX_COUNT][GDM_TTY_MINOR]; -diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c -index ba03f93..842d70c 100644 ---- a/drivers/staging/gdm72xx/gdm_wimax.c -+++ b/drivers/staging/gdm72xx/gdm_wimax.c -@@ -250,7 +250,7 @@ int gdm_wimax_send_tx(struct sk_buff *skb, struct net_device *dev) - return ret; - } - --static int gdm_wimax_tx(struct sk_buff *skb, struct net_device *dev) -+static netdev_tx_t gdm_wimax_tx(struct sk_buff *skb, struct net_device *dev) - { - int ret = 0; - +diff --git a/drivers/staging/i4l/icn/icn.c b/drivers/staging/i4l/icn/icn.c +index 46d957c..d590c95 100644 +--- a/drivers/staging/i4l/icn/icn.c ++++ b/drivers/staging/i4l/icn/icn.c +@@ -1045,7 +1045,7 @@ icn_writecmd(const u_char *buf, int len, int user, icn_card *card) + if (count > len) + count = len; + if (user) { +- if (copy_from_user(msg, buf, count)) ++ if (count > sizeof msg || copy_from_user(msg, buf, count)) + return -EFAULT; + } else + memcpy(msg, buf, count); diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c index 50c162e..b5d8b7e 100644 --- a/drivers/staging/iio/accel/lis3l02dq_ring.c @@ -72876,7 +73197,7 @@ index 50c162e..b5d8b7e 100644 return -ENOMEM; ret = lis3l02dq_read_all(indio_dev, rx_array); diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c -index f45ebed..490e439 100644 +index 62e5eca..fbd4927 100644 --- a/drivers/staging/iio/adc/ad7280a.c +++ b/drivers/staging/iio/adc/ad7280a.c @@ -547,8 +547,8 @@ static int ad7280_attr_init(struct ad7280_state *st) @@ -72891,10 +73212,10 @@ index f45ebed..490e439 100644 if (!st->iio_attr) return -ENOMEM; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h -index f4fa725..e68e0ac 100644 +index a60d72f..ef54d2f 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h -@@ -307,10 +307,8 @@ typedef struct ksock_conn { +@@ -308,10 +308,8 @@ typedef struct ksock_conn { struct ksock_route *ksnc_route; /* owning route */ struct list_head ksnc_list; /* stash on peer's conn list */ struct socket *ksnc_sock; /* actual socket */ @@ -72907,89 +73228,115 @@ index f4fa725..e68e0ac 100644 atomic_t ksnc_conn_refcount;/* conn refcount */ atomic_t ksnc_sock_refcount;/* sock refcount */ ksock_sched_t *ksnc_scheduler; /* who schedules this connection +diff --git a/drivers/staging/lustre/lnet/libcfs/module.c b/drivers/staging/lustre/lnet/libcfs/module.c +index cdc640b..b5d7a2b 100644 +--- a/drivers/staging/lustre/lnet/libcfs/module.c ++++ b/drivers/staging/lustre/lnet/libcfs/module.c +@@ -210,11 +210,11 @@ out: + } + + struct cfs_psdev_ops libcfs_psdev_ops = { +- libcfs_psdev_open, +- libcfs_psdev_release, +- NULL, +- NULL, +- libcfs_ioctl ++ .p_open = libcfs_psdev_open, ++ .p_close = libcfs_psdev_release, ++ .p_read = NULL, ++ .p_write = NULL, ++ .p_ioctl = libcfs_ioctl + }; + + int lprocfs_call_handler(void *data, int write, loff_t *ppos, diff --git a/drivers/staging/lustre/lnet/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c -index 1f04cc1..038e003 100644 +index dcb6e50..6d3b10f 100644 --- a/drivers/staging/lustre/lnet/selftest/brw_test.c +++ b/drivers/staging/lustre/lnet/selftest/brw_test.c -@@ -487,13 +487,11 @@ brw_server_handle(struct srpc_server_rpc *rpc) +@@ -490,13 +490,11 @@ brw_server_handle(struct srpc_server_rpc *rpc) return 0; } -sfw_test_client_ops_t brw_test_client; -void brw_init_test_client(void) -{ -- brw_test_client.tso_init = brw_client_init; -- brw_test_client.tso_fini = brw_client_fini; +- brw_test_client.tso_init = brw_client_init; +- brw_test_client.tso_fini = brw_client_fini; - brw_test_client.tso_prep_rpc = brw_client_prep_rpc; - brw_test_client.tso_done_rpc = brw_client_done_rpc; +sfw_test_client_ops_t brw_test_client = { -+ .tso_init = brw_client_init, -+ .tso_fini = brw_client_fini, ++ .tso_init = brw_client_init, ++ .tso_fini = brw_client_fini, + .tso_prep_rpc = brw_client_prep_rpc, + .tso_done_rpc = brw_client_done_rpc, }; srpc_service_t brw_test_service; diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c -index 1a2da74..6cc62b9 100644 +index e2c5323..403c917 100644 --- a/drivers/staging/lustre/lnet/selftest/framework.c +++ b/drivers/staging/lustre/lnet/selftest/framework.c -@@ -1624,12 +1624,10 @@ static srpc_service_t sfw_services[] = { - - extern sfw_test_client_ops_t ping_test_client; - extern srpc_service_t ping_test_service; --extern void ping_init_test_client(void); - extern void ping_init_test_service(void); - - extern sfw_test_client_ops_t brw_test_client; - extern srpc_service_t brw_test_service; --extern void brw_init_test_client(void); - extern void brw_init_test_service(void); - - int -@@ -1669,12 +1667,10 @@ sfw_startup(void) +@@ -1659,12 +1659,10 @@ sfw_startup(void) INIT_LIST_HEAD(&sfw_data.fw_zombie_rpcs); INIT_LIST_HEAD(&sfw_data.fw_zombie_sessions); - brw_init_test_client(); brw_init_test_service(); rc = sfw_register_test(&brw_test_service, &brw_test_client); - LASSERT(rc == 0); + LASSERT(!rc); - ping_init_test_client(); ping_init_test_service(); rc = sfw_register_test(&ping_test_service, &ping_test_client); - LASSERT(rc == 0); + LASSERT(!rc); diff --git a/drivers/staging/lustre/lnet/selftest/ping_test.c b/drivers/staging/lustre/lnet/selftest/ping_test.c -index d426536..92f0086 100644 +index 81a4504..507a945 100644 --- a/drivers/staging/lustre/lnet/selftest/ping_test.c +++ b/drivers/staging/lustre/lnet/selftest/ping_test.c -@@ -211,14 +211,12 @@ ping_server_handle(struct srpc_server_rpc *rpc) +@@ -210,14 +210,12 @@ ping_server_handle(struct srpc_server_rpc *rpc) return 0; } -sfw_test_client_ops_t ping_test_client; -void ping_init_test_client(void) -{ -- ping_test_client.tso_init = ping_client_init; -- ping_test_client.tso_fini = ping_client_fini; +- ping_test_client.tso_init = ping_client_init; +- ping_test_client.tso_fini = ping_client_fini; - ping_test_client.tso_prep_rpc = ping_client_prep_rpc; - ping_test_client.tso_done_rpc = ping_client_done_rpc; -} +sfw_test_client_ops_t ping_test_client = { -+ .tso_init = ping_client_init, -+ .tso_fini = ping_client_fini, ++ .tso_init = ping_client_init, ++ .tso_fini = ping_client_fini, + .tso_prep_rpc = ping_client_prep_rpc, + .tso_done_rpc = ping_client_done_rpc, +}; srpc_service_t ping_test_service; void ping_init_test_service(void) +diff --git a/drivers/staging/lustre/lnet/selftest/selftest.h b/drivers/staging/lustre/lnet/selftest/selftest.h +index e689ca1..b7555bb 100644 +--- a/drivers/staging/lustre/lnet/selftest/selftest.h ++++ b/drivers/staging/lustre/lnet/selftest/selftest.h +@@ -608,13 +608,11 @@ srpc_wait_service_shutdown(srpc_service_t *sv) + } + + extern sfw_test_client_ops_t brw_test_client; +-void brw_init_test_client(void); + + extern srpc_service_t brw_test_service; + void brw_init_test_service(void); + + extern sfw_test_client_ops_t ping_test_client; +-void ping_init_test_client(void); + + extern srpc_service_t ping_test_service; + void ping_init_test_service(void); diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h -index b064b58..8af38df 100644 +index 5aae1d0..75f31ca 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h -@@ -751,7 +751,7 @@ static inline ino_t lu_igif_ino(const struct lu_fid *fid) +@@ -759,7 +759,7 @@ static inline ino_t lu_igif_ino(const struct lu_fid *fid) return fid_seq(fid); } @@ -72998,7 +73345,7 @@ index b064b58..8af38df 100644 /** * Get inode generation from a igif. -@@ -818,8 +818,8 @@ static inline int fid_is_zero(const struct lu_fid *fid) +@@ -826,8 +826,8 @@ static inline int fid_is_zero(const struct lu_fid *fid) return fid_seq(fid) == 0 && fid_oid(fid) == 0; } @@ -73009,7 +73356,7 @@ index b064b58..8af38df 100644 static inline int lu_fid_eq(const struct lu_fid *f0, const struct lu_fid *f1) { -@@ -1137,7 +1137,7 @@ struct ptlrpc_body_v2 { +@@ -1131,7 +1131,7 @@ struct ptlrpc_body_v2 { __u64 pb_padding[4]; }; @@ -73018,16 +73365,16 @@ index b064b58..8af38df 100644 /* message body offset for lustre_msg_v2 */ /* ptlrpc body offset in all request/reply messages */ -@@ -1400,7 +1400,7 @@ struct obd_connect_data { - * the matching OBD_CONNECT flag, so that can be approved and landed easily to - * reserve the flag for future use. */ +@@ -1361,7 +1361,7 @@ struct obd_connect_data { + * reserve the flag for future use. + */ -void lustre_swab_connect(struct obd_connect_data *ocd); +void lustre_swab_connect(void *ocd); /* * Supported checksum algorithms. Up to 32 checksum types are supported. -@@ -1742,10 +1742,10 @@ struct hsm_state_set { +@@ -1708,10 +1708,10 @@ struct hsm_state_set { __u64 hss_clearmask; }; @@ -73041,7 +73388,7 @@ index b064b58..8af38df 100644 /* ost_body.data values for OST_BRW */ -@@ -1785,7 +1785,7 @@ struct obd_ioobj { +@@ -1753,7 +1753,7 @@ struct obd_ioobj { #define ioobj_max_brw_set(ioo, num) \ do { (ioo)->ioo_max_brw = ((num) - 1) << IOOBJ_MAX_BRW_BITS; } while (0) @@ -73050,7 +73397,7 @@ index b064b58..8af38df 100644 /* multiple of 8 bytes => can array */ struct niobuf_remote { -@@ -1794,7 +1794,7 @@ struct niobuf_remote { +@@ -1762,7 +1762,7 @@ struct niobuf_remote { __u32 flags; }; @@ -73059,7 +73406,7 @@ index b064b58..8af38df 100644 /* lock value block communicated between the filter and llite */ -@@ -1869,7 +1869,7 @@ struct obd_quotactl { +@@ -1827,7 +1827,7 @@ struct obd_quotactl { struct obd_dqblk qc_dqblk; }; @@ -73068,25 +73415,16 @@ index b064b58..8af38df 100644 #define Q_QUOTACHECK 0x800100 /* deprecated as of 2.4 */ #define Q_INITQUOTA 0x800101 /* deprecated as of 2.4 */ -@@ -1918,7 +1918,7 @@ struct quota_body { - #define QUOTA_DQACQ_FL_REL 0x4 /* release quota */ - #define QUOTA_DQACQ_FL_REPORT 0x8 /* report usage */ - --void lustre_swab_quota_body(struct quota_body *b); -+void lustre_swab_quota_body(void *b); - - /* Quota types currently supported */ - enum { -@@ -2078,7 +2078,7 @@ typedef enum { +@@ -1939,7 +1939,7 @@ enum mdt_reint_cmd { REINT_MAX - } mds_reint_t, mdt_reint_t; + }; -void lustre_swab_generic_32s(__u32 *val); +void lustre_swab_generic_32s(void *val); /* the disposition of the intent outlines what was executed */ #define DISP_IT_EXECD 0x00000001 -@@ -2235,7 +2235,7 @@ struct mdt_body { +@@ -2098,7 +2098,7 @@ struct mdt_body { __u64 padding_10; }; /* 216 */ @@ -73095,7 +73433,7 @@ index b064b58..8af38df 100644 struct mdt_ioepoch { struct lustre_handle handle; -@@ -2244,7 +2244,7 @@ struct mdt_ioepoch { +@@ -2107,7 +2107,7 @@ struct mdt_ioepoch { __u32 padding; }; @@ -73104,7 +73442,7 @@ index b064b58..8af38df 100644 /* permissions for md_perm.mp_perm */ enum { -@@ -2571,7 +2571,7 @@ struct mdt_rec_reint { +@@ -2434,7 +2434,7 @@ struct mdt_rec_reint { __u32 rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */ }; @@ -73113,7 +73451,7 @@ index b064b58..8af38df 100644 struct lmv_desc { __u32 ld_tgt_count; /* how many MDS's */ -@@ -2759,13 +2759,13 @@ union ldlm_gl_desc { +@@ -2624,13 +2624,13 @@ union ldlm_gl_desc { struct ldlm_gl_lquota_desc lquota_desc; }; @@ -73128,8 +73466,8 @@ index b064b58..8af38df 100644 +void lustre_swab_ldlm_intent(void *i); struct ldlm_resource_desc { - ldlm_type_t lr_type; -@@ -2790,7 +2790,7 @@ struct ldlm_request { + enum ldlm_type lr_type; +@@ -2655,7 +2655,7 @@ struct ldlm_request { struct lustre_handle lock_handle[LDLM_LOCKREQ_HANDLES]; }; @@ -73137,8 +73475,8 @@ index b064b58..8af38df 100644 +void lustre_swab_ldlm_request(void *rq); /* If LDLM_ENQUEUE, 1 slot is already occupied, 1 is available. - * Otherwise, 2 are available. */ -@@ -2812,7 +2812,7 @@ struct ldlm_reply { + * Otherwise, 2 are available. +@@ -2678,7 +2678,7 @@ struct ldlm_reply { __u64 lock_policy_res2; }; @@ -73147,7 +73485,7 @@ index b064b58..8af38df 100644 #define ldlm_flags_to_wire(flags) ((__u32)(flags)) #define ldlm_flags_from_wire(flags) ((__u64)(flags)) -@@ -2857,7 +2857,7 @@ struct mgs_target_info { +@@ -2723,7 +2723,7 @@ struct mgs_target_info { char mti_params[MTI_PARAM_MAXLEN]; }; @@ -73156,7 +73494,7 @@ index b064b58..8af38df 100644 struct mgs_nidtbl_entry { __u64 mne_version; /* table version of this entry */ -@@ -2884,14 +2884,14 @@ struct mgs_config_body { +@@ -2750,14 +2750,14 @@ struct mgs_config_body { __u32 mcb_units; /* # of units for bulk transfer */ }; @@ -73173,7 +73511,7 @@ index b064b58..8af38df 100644 /* Config marker flags (in config log) */ #define CM_START 0x01 -@@ -3324,9 +3324,9 @@ struct ll_fiemap_info_key { +@@ -3184,9 +3184,9 @@ struct ll_fiemap_info_key { struct ll_user_fiemap fiemap; }; @@ -73186,7 +73524,7 @@ index b064b58..8af38df 100644 void lustre_swab_lov_user_md_v1(struct lov_user_md_v1 *lum); void lustre_swab_lov_user_md_v3(struct lov_user_md_v3 *lum); -@@ -3335,19 +3335,19 @@ void lustre_swab_lov_user_md_objects(struct lov_user_ost_data *lod, +@@ -3195,19 +3195,19 @@ void lustre_swab_lov_user_md_objects(struct lov_user_ost_data *lod, void lustre_swab_lov_mds_md(struct lov_mds_md *lmm); /* llog_swab.c */ @@ -73211,27 +73549,18 @@ index b064b58..8af38df 100644 +void dump_ost_body(void *ob); +void dump_rcs(void *rc); - #define IDX_INFO_MAGIC 0x3D37CC37 - -@@ -3393,7 +3393,7 @@ struct idx_info { - __u64 ii_pad3; - }; - --void lustre_swab_idx_info(struct idx_info *ii); -+void lustre_swab_idx_info(void *ii); - - #define II_END_OFF MDS_DIR_END_OFF /* all entries have been read */ - -@@ -3465,7 +3465,7 @@ struct lustre_capa { + /* security opcodes */ + enum sec_cmd { +@@ -3240,7 +3240,7 @@ struct lustre_capa { __u8 lc_hmac[CAPA_HMAC_MAX_LEN]; /** HMAC */ - } __attribute__((packed)); + } __packed; -void lustre_swab_lustre_capa(struct lustre_capa *c); +void lustre_swab_lustre_capa(void *c); /** lustre_capa::lc_opc */ enum { -@@ -3549,7 +3549,7 @@ struct layout_intent { +@@ -3324,7 +3324,7 @@ struct layout_intent { __u64 li_end; }; @@ -73240,9 +73569,9 @@ index b064b58..8af38df 100644 /** * On the wire version of hsm_progress structure. -@@ -3569,12 +3569,12 @@ struct hsm_progress_kernel { +@@ -3344,12 +3344,10 @@ struct hsm_progress_kernel { __u64 hpk_padding2; - } __attribute__((packed)); + } __packed; -void lustre_swab_hsm_user_state(struct hsm_user_state *hus); -void lustre_swab_hsm_current_action(struct hsm_current_action *action); @@ -73250,27 +73579,14 @@ index b064b58..8af38df 100644 -void lustre_swab_hsm_user_state(struct hsm_user_state *hus); -void lustre_swab_hsm_user_item(struct hsm_user_item *hui); -void lustre_swab_hsm_request(struct hsm_request *hr); -+void lustre_swab_hsm_user_state(void *hus); +void lustre_swab_hsm_current_action(void *action); +void lustre_swab_hsm_progress_kernel(void *hpk); -+void lustre_swab_hsm_user_state(void *hus); +void lustre_swab_hsm_user_item(void *hui); +void lustre_swab_hsm_request(void *hr); - /** - * These are object update opcode under UPDATE_OBJ, which is currently -@@ -3659,8 +3659,8 @@ struct update_reply { - __u32 ur_lens[0]; - }; - --void lustre_swab_update_buf(struct update_buf *ub); --void lustre_swab_update_reply_buf(struct update_reply *ur); -+void lustre_swab_update_buf(void *ub); -+void lustre_swab_update_reply_buf(void *ur); - /** layout swap request structure * fid1 and fid2 are in mdt_body -@@ -3669,7 +3669,7 @@ struct mdc_swap_layouts { +@@ -3358,7 +3356,7 @@ struct mdc_swap_layouts { __u64 msl_flags; } __packed; @@ -73279,7 +73595,7 @@ index b064b58..8af38df 100644 struct close_data { struct lustre_handle cd_handle; -@@ -3678,7 +3678,7 @@ struct close_data { +@@ -3367,7 +3365,7 @@ struct close_data { __u64 cd_reserved[8]; }; @@ -73289,7 +73605,7 @@ index b064b58..8af38df 100644 #endif /** @} lustreidl */ diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h -index 9b319f1..42e8150 100644 +index 8b0364f..66ddfbf 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h @@ -964,9 +964,9 @@ struct ldlm_ast_work { @@ -73305,7 +73621,7 @@ index 9b319f1..42e8150 100644 void *ei_cbdata; /** Data to be passed into callbacks. */ }; -@@ -1059,7 +1059,7 @@ struct ldlm_callback_suite { +@@ -1060,7 +1060,7 @@ struct ldlm_callback_suite { ldlm_completion_callback lcs_completion; ldlm_blocking_callback lcs_blocking; ldlm_glimpse_callback lcs_glimpse; @@ -73315,10 +73631,10 @@ index 9b319f1..42e8150 100644 /* ldlm_lockd.c */ int ldlm_get_ref(void); diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h -index d834ddd..a650f2a 100644 +index 69586a52..e4a2921 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h -@@ -2564,7 +2564,7 @@ void *lustre_msg_buf_v2(struct lustre_msg_v2 *m, int n, int min_size); +@@ -2571,7 +2571,7 @@ void *lustre_msg_buf_v2(struct lustre_msg_v2 *m, int n, int min_size); void *lustre_msg_buf(struct lustre_msg *m, int n, int minlen); int lustre_msg_buflen(struct lustre_msg *m, int n); int lustre_msg_bufcount(struct lustre_msg *m); @@ -73328,10 +73644,10 @@ index d834ddd..a650f2a 100644 void lustre_msghdr_set_flags(struct lustre_msg *msg, __u32 flags); __u32 lustre_msg_get_flags(struct lustre_msg *msg); diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h -index bcbe613..fed09d3 100644 +index 4264d97..038b93f 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h -@@ -1213,7 +1213,7 @@ struct md_ops { +@@ -1195,7 +1195,7 @@ struct md_ops { * lprocfs_alloc_md_stats() in obdclass/lprocfs_status.c. Also, add a * wrapper function in include/linux/obd_class.h. */ @@ -73341,10 +73657,10 @@ index bcbe613..fed09d3 100644 struct lsm_operations { void (*lsm_free)(struct lov_stripe_md *); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c -index 4310154..605d035 100644 +index b88b786..645197d 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c -@@ -147,7 +147,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags, +@@ -148,7 +148,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags, int added = (mode == LCK_NL); int overlaps = 0; int splitted = 0; @@ -73354,10 +73670,10 @@ index 4310154..605d035 100644 CDEBUG(D_DLMTRACE, "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n", diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c -index b9eb377..eadc037 100644 +index 74e193e..c23cd85 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c -@@ -1785,8 +1785,9 @@ static int ldlm_chain_lock_for_replay(struct ldlm_lock *lock, void *closure) +@@ -1828,8 +1828,9 @@ static int ldlm_chain_lock_for_replay(struct ldlm_lock *lock, void *closure) static int replay_lock_interpret(const struct lu_env *env, struct ptlrpc_request *req, @@ -73368,7 +73684,7 @@ index b9eb377..eadc037 100644 struct ldlm_lock *lock; struct ldlm_reply *reply; struct obd_export *exp; -@@ -1910,7 +1911,7 @@ static int replay_one_lock(struct obd_import *imp, struct ldlm_lock *lock) +@@ -1956,7 +1957,7 @@ static int replay_one_lock(struct obd_import *imp, struct ldlm_lock *lock) CLASSERT(sizeof(*aa) <= sizeof(req->rq_async_args)); aa = ptlrpc_req_async_args(req); aa->lock_handle = body->lock_handle[0]; @@ -73377,29 +73693,8 @@ index b9eb377..eadc037 100644 ptlrpcd_add_req(req); return 0; -diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c -index 329d78c..9756f9e 100644 ---- a/drivers/staging/lustre/lustre/libcfs/module.c -+++ b/drivers/staging/lustre/lustre/libcfs/module.c -@@ -322,11 +322,11 @@ out: - } - - struct cfs_psdev_ops libcfs_psdev_ops = { -- libcfs_psdev_open, -- libcfs_psdev_release, -- NULL, -- NULL, -- libcfs_ioctl -+ .p_open = libcfs_psdev_open, -+ .p_close = libcfs_psdev_release, -+ .p_read = NULL, -+ .p_write = NULL, -+ .p_ioctl = libcfs_ioctl - }; - - static int proc_call_handler(void *data, int write, loff_t *ppos, diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c -index 8982f7d..c04fda5 100644 +index e4c8288..7e9ed16 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -140,7 +140,7 @@ @@ -73412,10 +73707,10 @@ index 8982f7d..c04fda5 100644 struct inode *inode = page0->mapping->host; int hash64 = ll_i2sbi(inode)->ll_flags & LL_SBI_64BIT_HASH; diff --git a/drivers/staging/lustre/lustre/lov/lov_io.c b/drivers/staging/lustre/lustre/lov/lov_io.c -index 93fe69e..af92b7a 100644 +index 4296aac..c485767 100644 --- a/drivers/staging/lustre/lustre/lov/lov_io.c +++ b/drivers/staging/lustre/lustre/lov/lov_io.c -@@ -833,12 +833,32 @@ static void lov_empty_io_fini(const struct lu_env *env, +@@ -831,12 +831,32 @@ static void lov_empty_io_fini(const struct lu_env *env, } static void lov_empty_impossible(const struct lu_env *env, @@ -73450,7 +73745,7 @@ index 93fe69e..af92b7a 100644 /** * An io operation vector for files without stripes. -@@ -848,32 +868,32 @@ static const struct cl_io_operations lov_empty_io_ops = { +@@ -846,32 +866,32 @@ static const struct cl_io_operations lov_empty_io_ops = { [CIT_READ] = { .cio_fini = lov_empty_io_fini, #if 0 @@ -73499,7 +73794,7 @@ index 93fe69e..af92b7a 100644 }, [CIT_FSYNC] = { .cio_fini = lov_empty_io_fini -@@ -884,13 +904,13 @@ static const struct cl_io_operations lov_empty_io_ops = { +@@ -882,13 +902,13 @@ static const struct cl_io_operations lov_empty_io_ops = { }, .req_op = { [CRT_READ] = { @@ -73517,7 +73812,7 @@ index 93fe69e..af92b7a 100644 int lov_io_init_raid0(const struct lu_env *env, struct cl_object *obj, diff --git a/drivers/staging/lustre/lustre/obdclass/llog_swab.c b/drivers/staging/lustre/lustre/obdclass/llog_swab.c -index 3aa7393..10619c9 100644 +index 967ba2e..6f341521 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_swab.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_swab.c @@ -58,16 +58,20 @@ static void print_llogd_body(struct llogd_body *d) @@ -73592,10 +73887,10 @@ index 3aa7393..10619c9 100644 lustre_swab_llog_rec(&h->llh_hdr); diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c -index 7034f0a..427966a 100644 +index 30526eb..7cfe274 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c -@@ -212,8 +212,9 @@ static inline void osc_pack_req_body(struct ptlrpc_request *req, +@@ -211,8 +211,9 @@ static inline void osc_pack_req_body(struct ptlrpc_request *req, static int osc_getattr_interpret(const struct lu_env *env, struct ptlrpc_request *req, @@ -73606,7 +73901,7 @@ index 7034f0a..427966a 100644 struct ost_body *body; if (rc != 0) -@@ -258,7 +259,7 @@ static int osc_getattr_async(struct obd_export *exp, struct obd_info *oinfo, +@@ -257,7 +258,7 @@ static int osc_getattr_async(struct obd_export *exp, struct obd_info *oinfo, osc_pack_req_body(req, oinfo); ptlrpc_request_set_replen(req); @@ -73615,7 +73910,7 @@ index 7034f0a..427966a 100644 CLASSERT(sizeof(*aa) <= sizeof(req->rq_async_args)); aa = ptlrpc_req_async_args(req); -@@ -354,8 +355,9 @@ out: +@@ -353,8 +354,9 @@ out: static int osc_setattr_interpret(const struct lu_env *env, struct ptlrpc_request *req, @@ -73626,7 +73921,7 @@ index 7034f0a..427966a 100644 struct ost_body *body; if (rc != 0) -@@ -405,8 +407,7 @@ int osc_setattr_async_base(struct obd_export *exp, struct obd_info *oinfo, +@@ -404,8 +406,7 @@ int osc_setattr_async_base(struct obd_export *exp, struct obd_info *oinfo, /* Do not wait for response. */ ptlrpcd_add_req(req); } else { @@ -73636,7 +73931,7 @@ index 7034f0a..427966a 100644 CLASSERT(sizeof(*sa) <= sizeof(req->rq_async_args)); sa = ptlrpc_req_async_args(req); -@@ -548,7 +549,7 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo, +@@ -547,7 +548,7 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo, ptlrpc_request_set_replen(req); @@ -73645,7 +73940,7 @@ index 7034f0a..427966a 100644 CLASSERT(sizeof(*sa) <= sizeof(req->rq_async_args)); sa = ptlrpc_req_async_args(req); sa->sa_oa = oinfo->oi_oa; -@@ -2117,8 +2118,9 @@ static int osc_enqueue_fini(struct ptlrpc_request *req, struct ost_lvb *lvb, +@@ -2139,8 +2140,9 @@ static int osc_enqueue_fini(struct ptlrpc_request *req, struct ost_lvb *lvb, static int osc_enqueue_interpret(const struct lu_env *env, struct ptlrpc_request *req, @@ -73656,7 +73951,7 @@ index 7034f0a..427966a 100644 struct ldlm_lock *lock; struct lustre_handle handle; __u32 mode; -@@ -2315,8 +2317,7 @@ int osc_enqueue_base(struct obd_export *exp, struct ldlm_res_id *res_id, +@@ -2347,8 +2349,7 @@ int osc_enqueue_base(struct obd_export *exp, struct ldlm_res_id *res_id, aa->oa_lockh = lockh; aa->oa_agl = !!agl; @@ -73666,7 +73961,7 @@ index 7034f0a..427966a 100644 if (rqset == PTLRPCD_SET) ptlrpcd_add_req(req); else -@@ -2389,8 +2390,9 @@ int osc_cancel_base(struct lustre_handle *lockh, __u32 mode) +@@ -2423,8 +2424,9 @@ int osc_cancel_base(struct lustre_handle *lockh, __u32 mode) static int osc_statfs_interpret(const struct lu_env *env, struct ptlrpc_request *req, @@ -73677,7 +73972,7 @@ index 7034f0a..427966a 100644 struct obd_statfs *msfs; if (rc == -EBADR) -@@ -2456,7 +2458,7 @@ static int osc_statfs_async(struct obd_export *exp, +@@ -2492,7 +2494,7 @@ static int osc_statfs_async(struct obd_export *exp, req->rq_no_delay = 1; } @@ -73687,10 +73982,10 @@ index 7034f0a..427966a 100644 aa = ptlrpc_req_async_args(req); aa->aa_oi = oinfo; diff --git a/drivers/staging/lustre/lustre/ptlrpc/layout.c b/drivers/staging/lustre/lustre/ptlrpc/layout.c -index c0e613c..aff501f 100644 +index 5b06901..e27766d 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/layout.c +++ b/drivers/staging/lustre/lustre/ptlrpc/layout.c -@@ -811,8 +811,8 @@ struct req_capsule; +@@ -768,8 +768,8 @@ struct req_capsule; .rmf_name = (name), \ .rmf_flags = (flags), \ .rmf_size = (size), \ @@ -73701,9 +73996,9 @@ index c0e613c..aff501f 100644 } struct req_msg_field RMF_GENERIC_DATA = -@@ -1959,8 +1959,7 @@ static void *__req_capsule_get(struct req_capsule *pill, +@@ -1872,8 +1872,7 @@ static void *__req_capsule_get(struct req_capsule *pill, msg = __req_msg(pill, loc); - LASSERT(msg != NULL); + LASSERT(msg); - getter = (field->rmf_flags & RMF_F_STRING) ? - (typeof(getter))lustre_msg_string : lustre_msg_buf; @@ -73712,10 +74007,10 @@ index c0e613c..aff501f 100644 if (field->rmf_flags & RMF_F_STRUCT_ARRAY) { /* diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c -index f3cb518..ed6f36b 100644 +index 492d63f..a8a4f76 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c -@@ -690,7 +690,7 @@ int lustre_msg_bufcount(struct lustre_msg *m) +@@ -693,7 +693,7 @@ int lustre_msg_bufcount(struct lustre_msg *m) } EXPORT_SYMBOL(lustre_msg_bufcount); @@ -73724,7 +74019,7 @@ index f3cb518..ed6f36b 100644 { /* max_len == 0 means the string should fill the buffer */ char *str; -@@ -1462,8 +1462,10 @@ EXPORT_SYMBOL(do_set_info_async); +@@ -1467,8 +1467,10 @@ EXPORT_SYMBOL(do_set_info_async); /* byte flipping routines for all wire types declared in * lustre_idl.h implemented here. */ @@ -73736,7 +74031,7 @@ index f3cb518..ed6f36b 100644 __swab32s(&b->pb_type); __swab32s(&b->pb_version); __swab32s(&b->pb_opc); -@@ -1493,8 +1495,10 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *b) +@@ -1499,8 +1501,10 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *b) } EXPORT_SYMBOL(lustre_swab_ptlrpc_body); @@ -73748,7 +74043,7 @@ index f3cb518..ed6f36b 100644 __swab64s(&ocd->ocd_connect_flags); __swab32s(&ocd->ocd_version); __swab32s(&ocd->ocd_grant); -@@ -1567,8 +1571,10 @@ static void lustre_swab_obdo(struct obdo *o) +@@ -1575,8 +1579,10 @@ static void lustre_swab_obdo(struct obdo *o) } @@ -73760,7 +74055,7 @@ index f3cb518..ed6f36b 100644 __swab64s(&os->os_type); __swab64s(&os->os_blocks); __swab64s(&os->os_bfree); -@@ -1592,42 +1598,54 @@ void lustre_swab_obd_statfs(struct obd_statfs *os) +@@ -1600,42 +1606,54 @@ void lustre_swab_obd_statfs(struct obd_statfs *os) } EXPORT_SYMBOL(lustre_swab_obd_statfs); @@ -73821,7 +74116,7 @@ index f3cb518..ed6f36b 100644 lustre_swab_lu_fid(&desc->lquota_desc.gl_id.qid_fid); __swab64s(&desc->lquota_desc.gl_flags); __swab64s(&desc->lquota_desc.gl_ver); -@@ -1671,8 +1689,10 @@ void lustre_swab_lquota_lvb(struct lquota_lvb *lvb) +@@ -1679,8 +1697,10 @@ void lustre_swab_lquota_lvb(struct lquota_lvb *lvb) } EXPORT_SYMBOL(lustre_swab_lquota_lvb); @@ -73833,7 +74128,7 @@ index f3cb518..ed6f36b 100644 lustre_swab_lu_fid(&b->fid1); lustre_swab_lu_fid(&b->fid2); /* handle is opaque */ -@@ -1705,8 +1725,10 @@ void lustre_swab_mdt_body(struct mdt_body *b) +@@ -1713,8 +1733,10 @@ void lustre_swab_mdt_body(struct mdt_body *b) } EXPORT_SYMBOL(lustre_swab_mdt_body); @@ -73845,7 +74140,7 @@ index f3cb518..ed6f36b 100644 /* handle is opaque */ __swab64s(&b->ioepoch); __swab32s(&b->flags); -@@ -1714,8 +1736,9 @@ void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b) +@@ -1722,8 +1744,9 @@ void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b) } EXPORT_SYMBOL(lustre_swab_mdt_ioepoch); @@ -73856,7 +74151,7 @@ index f3cb518..ed6f36b 100644 int i; __swab32s(&mti->mti_lustre_ver); -@@ -1753,16 +1776,20 @@ void lustre_swab_mgs_nidtbl_entry(struct mgs_nidtbl_entry *entry) +@@ -1761,16 +1784,20 @@ void lustre_swab_mgs_nidtbl_entry(struct mgs_nidtbl_entry *entry) } EXPORT_SYMBOL(lustre_swab_mgs_nidtbl_entry); @@ -73879,7 +74174,7 @@ index f3cb518..ed6f36b 100644 __swab64s(&body->mcr_offset); __swab64s(&body->mcr_size); } -@@ -1790,8 +1817,10 @@ static void lustre_swab_obd_dqblk(struct obd_dqblk *b) +@@ -1798,8 +1825,10 @@ static void lustre_swab_obd_dqblk(struct obd_dqblk *b) CLASSERT(offsetof(typeof(*b), dqb_padding) != 0); } @@ -73891,7 +74186,7 @@ index f3cb518..ed6f36b 100644 __swab32s(&q->qc_cmd); __swab32s(&q->qc_type); __swab32s(&q->qc_id); -@@ -1832,8 +1861,9 @@ static void lustre_swab_fiemap_extent(struct ll_fiemap_extent *fm_extent) +@@ -1840,8 +1869,9 @@ static void lustre_swab_fiemap_extent(struct ll_fiemap_extent *fm_extent) __swab32s(&fm_extent->fe_device); } @@ -73902,22 +74197,10 @@ index f3cb518..ed6f36b 100644 int i; __swab64s(&fiemap->fm_start); -@@ -1848,8 +1878,10 @@ void lustre_swab_fiemap(struct ll_user_fiemap *fiemap) +@@ -1856,8 +1886,10 @@ void lustre_swab_fiemap(struct ll_user_fiemap *fiemap) } EXPORT_SYMBOL(lustre_swab_fiemap); --void lustre_swab_idx_info(struct idx_info *ii) -+void lustre_swab_idx_info(void *_ii) - { -+ struct idx_info *ii = _ii; -+ - __swab32s(&ii->ii_magic); - __swab32s(&ii->ii_flags); - __swab16s(&ii->ii_count); -@@ -1862,8 +1894,10 @@ void lustre_swab_idx_info(struct idx_info *ii) - __swab16s(&ii->ii_recsize); - } - -void lustre_swab_mdt_rec_reint (struct mdt_rec_reint *rr) +void lustre_swab_mdt_rec_reint (void *_rr) { @@ -73926,7 +74209,7 @@ index f3cb518..ed6f36b 100644 __swab32s(&rr->rr_opcode); __swab32s(&rr->rr_cap); __swab32s(&rr->rr_fsuid); -@@ -1994,8 +2028,10 @@ static void lustre_swab_ldlm_policy_data(ldlm_wire_policy_data_t *d) +@@ -1989,8 +2021,10 @@ static void lustre_swab_ldlm_policy_data(ldlm_wire_policy_data_t *d) __swab32s(&d->l_flock.lfw_pid); } @@ -73938,7 +74221,7 @@ index f3cb518..ed6f36b 100644 __swab64s(&i->opc); } EXPORT_SYMBOL(lustre_swab_ldlm_intent); -@@ -2015,8 +2051,10 @@ static void lustre_swab_ldlm_lock_desc(struct ldlm_lock_desc *l) +@@ -2010,8 +2044,10 @@ static void lustre_swab_ldlm_lock_desc(struct ldlm_lock_desc *l) lustre_swab_ldlm_policy_data(&l->l_policy_data); } @@ -73950,7 +74233,7 @@ index f3cb518..ed6f36b 100644 __swab32s(&rq->lock_flags); lustre_swab_ldlm_lock_desc(&rq->lock_desc); __swab32s(&rq->lock_count); -@@ -2024,8 +2062,10 @@ void lustre_swab_ldlm_request(struct ldlm_request *rq) +@@ -2019,8 +2055,10 @@ void lustre_swab_ldlm_request(struct ldlm_request *rq) } EXPORT_SYMBOL(lustre_swab_ldlm_request); @@ -73962,21 +74245,9 @@ index f3cb518..ed6f36b 100644 __swab32s(&r->lock_flags); CLASSERT(offsetof(typeof(*r), lock_padding) != 0); lustre_swab_ldlm_lock_desc(&r->lock_desc); -@@ -2035,8 +2075,10 @@ void lustre_swab_ldlm_reply(struct ldlm_reply *r) - } +@@ -2031,8 +2069,10 @@ void lustre_swab_ldlm_reply(struct ldlm_reply *r) EXPORT_SYMBOL(lustre_swab_ldlm_reply); --void lustre_swab_quota_body(struct quota_body *b) -+void lustre_swab_quota_body(void *_b) - { -+ struct quota_body *b = _b; -+ - lustre_swab_lu_fid(&b->qb_fid); - lustre_swab_lu_fid((struct lu_fid *)&b->qb_id); - __swab32s(&b->qb_flags); -@@ -2046,8 +2088,10 @@ void lustre_swab_quota_body(struct quota_body *b) - } - /* Dump functions */ -void dump_ioo(struct obd_ioobj *ioo) +void dump_ioo(void *_ioo) @@ -73986,7 +74257,7 @@ index f3cb518..ed6f36b 100644 CDEBUG(D_RPCTRACE, "obd_ioobj: ioo_oid=" DOSTID ", ioo_max_brw=%#x, ioo_bufct=%d\n", POSTID(&ioo->ioo_oid), ioo->ioo_max_brw, -@@ -2055,8 +2099,10 @@ void dump_ioo(struct obd_ioobj *ioo) +@@ -2040,8 +2080,10 @@ void dump_ioo(struct obd_ioobj *ioo) } EXPORT_SYMBOL(dump_ioo); @@ -73998,7 +74269,7 @@ index f3cb518..ed6f36b 100644 CDEBUG(D_RPCTRACE, "niobuf_remote: offset=%llu, len=%d, flags=%x\n", nb->offset, nb->len, nb->flags); } -@@ -2124,14 +2170,18 @@ static void dump_obdo(struct obdo *oa) +@@ -2109,14 +2151,18 @@ static void dump_obdo(struct obdo *oa) CDEBUG(D_RPCTRACE, "obdo: o_lcookie = (llog_cookie dumping not yet implemented)\n"); } @@ -74019,7 +74290,7 @@ index f3cb518..ed6f36b 100644 CDEBUG(D_RPCTRACE, "rmf_rcs: %d\n", *rc); } EXPORT_SYMBOL(dump_rcs); -@@ -2208,8 +2258,10 @@ void _debug_req(struct ptlrpc_request *req, +@@ -2193,8 +2239,10 @@ void _debug_req(struct ptlrpc_request *req, } EXPORT_SYMBOL(_debug_req); @@ -74031,7 +74302,7 @@ index f3cb518..ed6f36b 100644 lustre_swab_lu_fid(&c->lc_fid); __swab64s(&c->lc_opc); __swab64s(&c->lc_uid); -@@ -2221,15 +2273,19 @@ void lustre_swab_lustre_capa(struct lustre_capa *c) +@@ -2206,15 +2254,19 @@ void lustre_swab_lustre_capa(struct lustre_capa *c) } EXPORT_SYMBOL(lustre_swab_lustre_capa); @@ -74053,7 +74324,7 @@ index f3cb518..ed6f36b 100644 __swab32s(&hss->hss_valid); __swab64s(&hss->hss_setmask); __swab64s(&hss->hss_clearmask); -@@ -2243,23 +2299,29 @@ static void lustre_swab_hsm_extent(struct hsm_extent *extent) +@@ -2228,23 +2280,29 @@ static void lustre_swab_hsm_extent(struct hsm_extent *extent) __swab64s(&extent->length); } @@ -74086,7 +74357,7 @@ index f3cb518..ed6f36b 100644 __swab32s(&li->li_opc); __swab32s(&li->li_flags); __swab64s(&li->li_start); -@@ -2267,8 +2329,10 @@ void lustre_swab_layout_intent(struct layout_intent *li) +@@ -2252,8 +2310,10 @@ void lustre_swab_layout_intent(struct layout_intent *li) } EXPORT_SYMBOL(lustre_swab_layout_intent); @@ -74098,7 +74369,7 @@ index f3cb518..ed6f36b 100644 lustre_swab_lu_fid(&hpk->hpk_fid); __swab64s(&hpk->hpk_cookie); __swab64s(&hpk->hpk_extent.offset); -@@ -2278,8 +2342,10 @@ void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk) +@@ -2263,8 +2323,10 @@ void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk) } EXPORT_SYMBOL(lustre_swab_hsm_progress_kernel); @@ -74110,31 +74381,10 @@ index f3cb518..ed6f36b 100644 __swab32s(&hr->hr_action); __swab32s(&hr->hr_archive_id); __swab64s(&hr->hr_flags); -@@ -2288,15 +2354,18 @@ void lustre_swab_hsm_request(struct hsm_request *hr) +@@ -2273,14 +2335,18 @@ void lustre_swab_hsm_request(struct hsm_request *hr) } EXPORT_SYMBOL(lustre_swab_hsm_request); --void lustre_swab_update_buf(struct update_buf *ub) -+void lustre_swab_update_buf(void *_ub) - { -+ struct update_buf *ub = _ub; -+ - __swab32s(&ub->ub_magic); - __swab32s(&ub->ub_count); - } - EXPORT_SYMBOL(lustre_swab_update_buf); - --void lustre_swab_update_reply_buf(struct update_reply *ur) -+void lustre_swab_update_reply_buf(void *_ur) - { -+ struct update_reply *ur = _ur; - int i; - - __swab32s(&ur->ur_version); -@@ -2306,14 +2375,18 @@ void lustre_swab_update_reply_buf(struct update_reply *ur) - } - EXPORT_SYMBOL(lustre_swab_update_reply_buf); - -void lustre_swab_swap_layouts(struct mdc_swap_layouts *msl) +void lustre_swab_swap_layouts(void *_msl) { @@ -74152,97 +74402,11 @@ index f3cb518..ed6f36b 100644 lustre_swab_lu_fid(&cd->cd_fid); __swab64s(&cd->cd_data_version); } -diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c -index 6aed3cf..f4a36a8 100644 ---- a/drivers/staging/octeon/ethernet-rx.c -+++ b/drivers/staging/octeon/ethernet-rx.c -@@ -365,15 +365,15 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) - /* Increment RX stats for virtual ports */ - if (port >= CVMX_PIP_NUM_INPUT_PORTS) { - #ifdef CONFIG_64BIT -- atomic64_add(1, -- (atomic64_t *)&priv->stats.rx_packets); -- atomic64_add(skb->len, -- (atomic64_t *)&priv->stats.rx_bytes); -+ atomic64_add_unchecked(1, -+ (atomic64_unchecked_t *)&priv->stats.rx_packets); -+ atomic64_add_unchecked(skb->len, -+ (atomic64_unchecked_t *)&priv->stats.rx_bytes); - #else -- atomic_add(1, -- (atomic_t *)&priv->stats.rx_packets); -- atomic_add(skb->len, -- (atomic_t *)&priv->stats.rx_bytes); -+ atomic_add_unchecked(1, -+ (atomic_unchecked_t *)&priv->stats.rx_packets); -+ atomic_add_unchecked(skb->len, -+ (atomic_unchecked_t *)&priv->stats.rx_bytes); - #endif - } - netif_receive_skb(skb); -@@ -384,11 +384,11 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) - dev->name); - */ - #ifdef CONFIG_64BIT -- atomic64_add(1, -- (atomic64_t *)&priv->stats.rx_dropped); -+ atomic64_add_unchecked(1, -+ (atomic64_unchecked_t *)&priv->stats.rx_dropped); - #else -- atomic_add(1, -- (atomic_t *)&priv->stats.rx_dropped); -+ atomic_add_unchecked(1, -+ (atomic_unchecked_t *)&priv->stats.rx_dropped); - #endif - dev_kfree_skb_irq(skb); - } -diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c -index f69fb5c..be5da97 100644 ---- a/drivers/staging/octeon/ethernet.c -+++ b/drivers/staging/octeon/ethernet.c -@@ -232,11 +232,11 @@ static struct net_device_stats *cvm_oct_common_get_stats(struct net_device *dev) - * since the RX tasklet also increments it. - */ - #ifdef CONFIG_64BIT -- atomic64_add(rx_status.dropped_packets, -- (atomic64_t *)&priv->stats.rx_dropped); -+ atomic64_add_unchecked(rx_status.dropped_packets, -+ (atomic64_unchecked_t *)&priv->stats.rx_dropped); - #else -- atomic_add(rx_status.dropped_packets, -- (atomic_t *)&priv->stats.rx_dropped); -+ atomic_add_unchecked(rx_status.dropped_packets, -+ (atomic_unchecked_t *)&priv->stats.rx_dropped); - #endif - } - -diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c -index 70b8f4f..6b477e9 100644 ---- a/drivers/staging/panel/panel.c -+++ b/drivers/staging/panel/panel.c -@@ -1991,7 +1991,7 @@ static void panel_process_inputs(void) - } - } - --static void panel_scan_timer(void) -+static void panel_scan_timer(unsigned long data) - { - if (keypad.enabled && keypad_initialized) { - if (spin_trylock_irq(&pprt_lock)) { -@@ -2027,7 +2027,7 @@ static void init_scan_timer(void) - if (scan_timer.function) - return; /* already started */ - -- setup_timer(&scan_timer, (void *)&panel_scan_timer, 0); -+ setup_timer(&scan_timer, &panel_scan_timer, 0); - scan_timer.expires = jiffies + INPUT_POLL_TIME; - add_timer(&scan_timer); - } diff --git a/drivers/staging/rdma/hfi1/pcie.c b/drivers/staging/rdma/hfi1/pcie.c -index 8317b07..99824f2 100644 +index 0bac21e..2b9ef9c 100644 --- a/drivers/staging/rdma/hfi1/pcie.c +++ b/drivers/staging/rdma/hfi1/pcie.c -@@ -541,7 +541,7 @@ static void tune_pcie_caps(struct hfi1_devdata *dd) +@@ -537,7 +537,7 @@ static void tune_pcie_caps(struct hfi1_devdata *dd) * PCI error infrastructure, registered via pci */ static pci_ers_result_t @@ -74252,10 +74416,10 @@ index 8317b07..99824f2 100644 struct hfi1_devdata *dd = pci_get_drvdata(pdev); pci_ers_result_t ret = PCI_ERS_RESULT_RECOVERED; diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c -index 3eca687..247c0b8 100644 +index 591a912..484a285 100644 --- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c -@@ -3992,7 +3992,7 @@ static void init_mlme_ext_priv_value(struct adapter *padapter) +@@ -3990,7 +3990,7 @@ static void init_mlme_ext_priv_value(struct adapter *padapter) _12M_RATE_, _24M_RATE_, 0xff, }; @@ -74264,7 +74428,7 @@ index 3eca687..247c0b8 100644 pmlmeext->mgnt_seq = 0;/* reset to zero when disconnect at client mode */ pmlmeext->cur_channel = padapter->registrypriv.channel; -@@ -4185,7 +4185,7 @@ void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext) +@@ -4183,7 +4183,7 @@ void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext) static void _mgt_dispatcher(struct adapter *padapter, struct mlme_handler *ptable, struct recv_frame *precv_frame) { @@ -74273,7 +74437,7 @@ index 3eca687..247c0b8 100644 u8 *pframe = precv_frame->rx_data; if (ptable->func) { -@@ -4204,7 +4204,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame) +@@ -4202,7 +4202,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame) #ifdef CONFIG_88EU_AP_MODE struct mlme_priv *pmlmepriv = &padapter->mlmepriv; #endif /* CONFIG_88EU_AP_MODE */ @@ -74282,7 +74446,7 @@ index 3eca687..247c0b8 100644 u8 *pframe = precv_frame->rx_data; struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe)); -@@ -4229,7 +4229,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame) +@@ -4227,7 +4227,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame) index = GetFrameSubType(pframe) >> 4; @@ -74291,7 +74455,7 @@ index 3eca687..247c0b8 100644 RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("Currently we do not support reserved sub-fr-type=%d\n", index)); return; } -@@ -4319,7 +4319,7 @@ void report_survey_event(struct adapter *padapter, +@@ -4317,7 +4317,7 @@ void report_survey_event(struct adapter *padapter, pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct survey_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_Survey); @@ -74300,7 +74464,7 @@ index 3eca687..247c0b8 100644 psurvey_evt = (struct survey_event *)(pevtcmd + sizeof(struct C2HEvent_Header)); -@@ -4371,7 +4371,7 @@ void report_surveydone_event(struct adapter *padapter) +@@ -4369,7 +4369,7 @@ void report_surveydone_event(struct adapter *padapter) pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct surveydone_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_SurveyDone); @@ -74309,7 +74473,7 @@ index 3eca687..247c0b8 100644 psurveydone_evt = (struct surveydone_event *)(pevtcmd + sizeof(struct C2HEvent_Header)); psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt; -@@ -4417,7 +4417,7 @@ void report_join_res(struct adapter *padapter, int res) +@@ -4415,7 +4415,7 @@ void report_join_res(struct adapter *padapter, int res) pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct joinbss_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_JoinBss); @@ -74318,7 +74482,7 @@ index 3eca687..247c0b8 100644 pjoinbss_evt = (struct joinbss_event *)(pevtcmd + sizeof(struct C2HEvent_Header)); memcpy((unsigned char *)(&(pjoinbss_evt->network.network)), &(pmlmeinfo->network), sizeof(struct wlan_bssid_ex)); -@@ -4470,7 +4470,7 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi +@@ -4468,7 +4468,7 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct stadel_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_DelSTA); @@ -74327,7 +74491,7 @@ index 3eca687..247c0b8 100644 pdel_sta_evt = (struct stadel_event *)(pevtcmd + sizeof(struct C2HEvent_Header)); memcpy((unsigned char *)(&(pdel_sta_evt->macaddr)), MacAddr, ETH_ALEN); -@@ -4525,7 +4525,7 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int +@@ -4523,7 +4523,7 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct stassoc_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_AddSTA); @@ -74350,7 +74514,7 @@ index d6d009a..c21609e 100644 /* init recv_buf */ diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c -index e04303c..6861369 100644 +index c96d804..76d5771 100644 --- a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c +++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c @@ -31,7 +31,7 @@ s32 rtl8188eu_init_xmit_priv(struct adapter *adapt) @@ -74363,10 +74527,10 @@ index e04303c..6861369 100644 return _SUCCESS; } diff --git a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h -index e058162..28d8a63 100644 +index 2670d6b..b9a6852 100644 --- a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h +++ b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h -@@ -207,17 +207,9 @@ void PHY_GetTxPowerLevel8188E(struct adapter *adapter, u32 *powerlevel); +@@ -205,17 +205,9 @@ void PHY_GetTxPowerLevel8188E(struct adapter *adapter, u32 *powerlevel); void PHY_ScanOperationBackup8188E(struct adapter *Adapter, u8 Operation); @@ -74511,7 +74675,7 @@ index ee2cb54..03dc80b 100644 - #endif /* #ifndef __INC_CEINFO_ */ diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h -index 9093a5f..eb007cd 100644 +index 4471133..a1522eb 100644 --- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h @@ -409,7 +409,7 @@ struct p2p_oper_class_map { @@ -74603,7 +74767,7 @@ index 1593e28..a4345f9 100644 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev); struct xmit_priv *pxmitpriv = &padapter->xmitpriv; diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c -index 8f989a9..781fed8 100644 +index 9b7cc7d..527055c 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c @@ -84,7 +84,7 @@ static struct pci_driver rtl8192_pci_driver = { @@ -74661,10 +74825,10 @@ index 8f989a9..781fed8 100644 struct net_device *dev = priv->rtllib->dev; struct sk_buff *pskb = NULL, *pnewskb = NULL; struct cb_desc *tcb_desc = NULL; -@@ -1003,30 +1004,30 @@ static void _rtl92e_init_priv_task(struct net_device *dev) +@@ -1002,30 +1003,30 @@ static void _rtl92e_init_priv_task(struct net_device *dev) + { struct r8192_priv *priv = rtllib_priv(dev); - priv->priv_wq = create_workqueue(DRV_NAME); - INIT_WORK_RSL(&priv->reset_wq, (void *)_rtl92e_restart, dev); - INIT_WORK_RSL(&priv->rtllib->ips_leave_wq, (void *)rtl92e_ips_leave_wq, + INIT_WORK_RSL(&priv->reset_wq, _rtl92e_restart, dev); @@ -74686,10 +74850,10 @@ index 8f989a9..781fed8 100644 + INIT_WORK_RSL(&priv->qos_activate, _rtl92e_qos_activate, dev); INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_wakeup_wq, - (void *) rtl92e_hw_wakeup_wq, dev); -+ rtl92e_hw_wakeup_wq, dev); ++ rtl92e_hw_wakeup_wq, dev); INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_sleep_wq, - (void *) rtl92e_hw_sleep_wq, dev); -+ rtl92e_hw_sleep_wq, dev); ++ rtl92e_hw_sleep_wq, dev); tasklet_init(&priv->irq_rx_tasklet, - (void(*)(unsigned long))_rtl92e_irq_rx_tasklet, + _rtl92e_irq_rx_tasklet, @@ -74704,7 +74868,7 @@ index 8f989a9..781fed8 100644 (unsigned long)priv); } -@@ -1378,7 +1379,7 @@ static void _rtl92e_update_rxcounts(struct r8192_priv *priv, u32 *TotalRxBcnNum, +@@ -1377,7 +1378,7 @@ static void _rtl92e_update_rxcounts(struct r8192_priv *priv, u32 *TotalRxBcnNum, } } @@ -74713,7 +74877,7 @@ index 8f989a9..781fed8 100644 { struct r8192_priv *priv = container_of_dwork_rsl(data, struct r8192_priv, watch_dog_wq); -@@ -2143,13 +2144,15 @@ static void _rtl92e_tx_resume(struct net_device *dev) +@@ -2142,13 +2143,15 @@ static void _rtl92e_tx_resume(struct net_device *dev) } } @@ -74731,7 +74895,7 @@ index 8f989a9..781fed8 100644 _rtl92e_rx_normal(priv->rtllib->dev); rtl92e_writel(priv->rtllib->dev, INTA_MASK, -@@ -2237,7 +2240,7 @@ void rtl92e_commit(struct net_device *dev) +@@ -2236,7 +2239,7 @@ void rtl92e_commit(struct net_device *dev) _rtl92e_up(dev, false); } @@ -74741,10 +74905,10 @@ index 8f989a9..781fed8 100644 struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv, reset_wq); diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h -index a7777a3..8e28a32 100644 +index f627fdc..3ad70fb 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h -@@ -588,12 +588,12 @@ void force_pci_posting(struct net_device *dev); +@@ -586,12 +586,12 @@ void force_pci_posting(struct net_device *dev); void rtl92e_rx_enable(struct net_device *); void rtl92e_tx_enable(struct net_device *); @@ -74760,7 +74924,7 @@ index a7777a3..8e28a32 100644 void rtl92e_reset_desc_ring(struct net_device *dev); void rtl92e_set_wireless_mode(struct net_device *dev, u8 wireless_mode); diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c -index ef03242..eef2177 100644 +index 9bc2848..17ccbf7 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c @@ -195,7 +195,7 @@ static void _rtl92e_dm_deinit_fsync(struct net_device *dev); @@ -74790,7 +74954,7 @@ index ef03242..eef2177 100644 { struct r8192_priv *priv = container_of_dwork_rsl(data, struct r8192_priv, txpower_tracking_wq); -@@ -1815,7 +1815,7 @@ static void _rtl92e_dm_init_wa_broadcom_iot(struct net_device *dev) +@@ -1814,7 +1814,7 @@ static void _rtl92e_dm_init_wa_broadcom_iot(struct net_device *dev) pHTInfo->WAIotTH = WAIotTHVal; } @@ -74799,7 +74963,7 @@ index ef03242..eef2177 100644 { struct r8192_priv *priv = container_of_dwork_rsl(data, struct r8192_priv, gpio_change_rf_wq); -@@ -1869,7 +1869,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data) +@@ -1868,7 +1868,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data) } } @@ -74829,7 +74993,7 @@ index 756a0dd..d2de5e8 100644 void rtl92e_dm_init_txpower_tracking(struct net_device *dev); #endif /*__R8192UDM_H__ */ diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c -index 9a4d1bc..3add233 100644 +index 98e4d88..5216a5f 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c @@ -44,7 +44,7 @@ static void _rtl92e_hw_sleep(struct net_device *dev) @@ -74841,7 +75005,7 @@ index 9a4d1bc..3add233 100644 { struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, hw_sleep_wq); -@@ -73,7 +73,7 @@ void rtl92e_hw_wakeup(struct net_device *dev) +@@ -72,7 +72,7 @@ void rtl92e_hw_wakeup(struct net_device *dev) rtl92e_set_rf_state(dev, eRfOn, RF_CHANGE_BY_PS); } @@ -74850,7 +75014,7 @@ index 9a4d1bc..3add233 100644 { struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, hw_wakeup_wq); -@@ -175,7 +175,7 @@ void rtl92e_ips_leave(struct net_device *dev) +@@ -172,7 +172,7 @@ void rtl92e_ips_leave(struct net_device *dev) } } @@ -74940,10 +75104,10 @@ index 70df6a1..21c9f2e 100644 static struct iw_statistics *_rtl92e_get_wireless_stats(struct net_device *dev) diff --git a/drivers/staging/rtl8192e/rtllib.h b/drivers/staging/rtl8192e/rtllib.h -index 563ac12..2ba2482 100644 +index 776e179..5a021e6 100644 --- a/drivers/staging/rtl8192e/rtllib.h +++ b/drivers/staging/rtl8192e/rtllib.h -@@ -1994,7 +1994,7 @@ int rtllib_encrypt_fragment( +@@ -1993,7 +1993,7 @@ int rtllib_encrypt_fragment( struct sk_buff *frag, int hdr_len); @@ -74952,7 +75116,7 @@ index 563ac12..2ba2482 100644 void rtllib_txb_free(struct rtllib_txb *); /* rtllib_rx.c */ -@@ -2108,7 +2108,7 @@ int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a, +@@ -2107,7 +2107,7 @@ int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a, int rtllib_wx_get_freq(struct rtllib_device *ieee, struct iw_request_info *a, union iwreq_data *wrqu, char *b); @@ -74962,7 +75126,7 @@ index 563ac12..2ba2482 100644 int rtllib_wx_set_rawtx(struct rtllib_device *ieee, struct iw_request_info *info, diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c -index d0fedb0..59293cc 100644 +index cfab715..07c64b3 100644 --- a/drivers/staging/rtl8192e/rtllib_softmac.c +++ b/drivers/staging/rtl8192e/rtllib_softmac.c @@ -574,7 +574,7 @@ out: @@ -74974,7 +75138,7 @@ index d0fedb0..59293cc 100644 { struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, softmac_scan_wq); -@@ -1514,7 +1514,7 @@ static void rtllib_associate_step2(struct rtllib_device *ieee) +@@ -1513,7 +1513,7 @@ static void rtllib_associate_step2(struct rtllib_device *ieee) } } @@ -74983,8 +75147,8 @@ index d0fedb0..59293cc 100644 { struct rtllib_device *ieee = (struct rtllib_device *) container_of_work_rsl(data, -@@ -1583,7 +1583,7 @@ static void rtllib_associate_complete(struct rtllib_device *ieee) - queue_work_rsl(ieee->wq, &ieee->associate_complete_wq); +@@ -1582,7 +1582,7 @@ static void rtllib_associate_complete(struct rtllib_device *ieee) + schedule_work(&ieee->associate_complete_wq); } -static void rtllib_associate_procedure_wq(void *data) @@ -74992,7 +75156,7 @@ index d0fedb0..59293cc 100644 { struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, -@@ -2055,8 +2055,9 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time) +@@ -2054,8 +2054,9 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time) } @@ -75003,7 +75167,7 @@ index d0fedb0..59293cc 100644 u64 time; short sleep; unsigned long flags, flags2; -@@ -2583,7 +2584,7 @@ static void rtllib_start_monitor_mode(struct rtllib_device *ieee) +@@ -2576,7 +2577,7 @@ static void rtllib_start_monitor_mode(struct rtllib_device *ieee) } } @@ -75012,7 +75176,7 @@ index d0fedb0..59293cc 100644 { struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, start_ibss_wq); -@@ -2749,7 +2750,7 @@ static void rtllib_start_bss(struct rtllib_device *ieee) +@@ -2741,7 +2742,7 @@ static void rtllib_start_bss(struct rtllib_device *ieee) spin_unlock_irqrestore(&ieee->lock, flags); } @@ -75021,7 +75185,7 @@ index d0fedb0..59293cc 100644 { struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, link_change_wq); -@@ -2775,7 +2776,7 @@ void rtllib_disassociate(struct rtllib_device *ieee) +@@ -2767,7 +2768,7 @@ void rtllib_disassociate(struct rtllib_device *ieee) notify_wx_assoc_event(ieee); } @@ -75030,8 +75194,8 @@ index d0fedb0..59293cc 100644 { struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, associate_retry_wq); -@@ -3031,19 +3032,18 @@ void rtllib_softmac_init(struct rtllib_device *ieee) - ieee->wq = create_workqueue(DRV_NAME); +@@ -3020,19 +3021,18 @@ void rtllib_softmac_init(struct rtllib_device *ieee) + (unsigned long) ieee); INIT_DELAYED_WORK_RSL(&ieee->link_change_wq, - (void *)rtllib_link_change_wq, ieee); @@ -75057,7 +75221,7 @@ index d0fedb0..59293cc 100644 sema_init(&ieee->wx_sem, 1); sema_init(&ieee->scan_sem, 1); -@@ -3053,7 +3053,7 @@ void rtllib_softmac_init(struct rtllib_device *ieee) +@@ -3042,7 +3042,7 @@ void rtllib_softmac_init(struct rtllib_device *ieee) spin_lock_init(&ieee->beacon_lock); tasklet_init(&ieee->ps_task, @@ -75067,7 +75231,7 @@ index d0fedb0..59293cc 100644 } diff --git a/drivers/staging/rtl8192e/rtllib_softmac_wx.c b/drivers/staging/rtl8192e/rtllib_softmac_wx.c -index 86f52ac7..0d95442 100644 +index 61ed8b0..a8b7d01 100644 --- a/drivers/staging/rtl8192e/rtllib_softmac_wx.c +++ b/drivers/staging/rtl8192e/rtllib_softmac_wx.c @@ -327,7 +327,7 @@ out: @@ -75093,10 +75257,10 @@ index 58fc70e..3fe041e 100644 memset(skb->cb, 0, sizeof(skb->cb)); return rtllib_xmit_inter(skb, dev); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h b/drivers/staging/rtl8192u/ieee80211/ieee80211.h -index 967ef9a..5038be8 100644 +index 68931e5..2d98eb2 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h -@@ -2179,7 +2179,7 @@ int ieee80211_set_encryption(struct ieee80211_device *ieee); +@@ -2174,7 +2174,7 @@ int ieee80211_set_encryption(struct ieee80211_device *ieee); int ieee80211_encrypt_fragment(struct ieee80211_device *ieee, struct sk_buff *frag, int hdr_len); @@ -75106,10 +75270,10 @@ index 967ef9a..5038be8 100644 diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c -index 38c3eb7..fa242a7 100644 +index ae1274c..febf7fa 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c -@@ -1762,9 +1762,9 @@ static short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h, +@@ -1765,9 +1765,9 @@ static short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h, } @@ -75121,7 +75285,7 @@ index 38c3eb7..fa242a7 100644 u32 th, tl; short sleep; -@@ -2739,7 +2739,7 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee) +@@ -2735,7 +2735,7 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee) spin_lock_init(&ieee->beacon_lock); tasklet_init(&ieee->ps_task, @@ -75144,10 +75308,10 @@ index 1ab0aea..41de55c 100644 struct ieee80211_device *ieee = netdev_priv(dev); struct ieee80211_txb *txb = NULL; diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c -index f4a4eae..2f3eb39 100644 +index 849a95e..debfb75 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c -@@ -2375,7 +2375,7 @@ static void rtl8192_init_priv_lock(struct r8192_priv *priv) +@@ -2380,7 +2380,7 @@ static void rtl8192_init_priv_lock(struct r8192_priv *priv) static void rtl819x_watchdog_wqcallback(struct work_struct *work); @@ -75156,7 +75320,7 @@ index f4a4eae..2f3eb39 100644 /* init tasklet and wait_queue here. only 2.6 above kernel is considered */ #define DRV_NAME "wlan0" static void rtl8192_init_priv_task(struct net_device *dev) -@@ -2399,7 +2399,7 @@ static void rtl8192_init_priv_task(struct net_device *dev) +@@ -2403,7 +2403,7 @@ static void rtl8192_init_priv_task(struct net_device *dev) INIT_WORK(&priv->qos_activate, rtl8192_qos_activate); tasklet_init(&priv->irq_rx_tasklet, @@ -75165,7 +75329,7 @@ index f4a4eae..2f3eb39 100644 (unsigned long)priv); } -@@ -4907,8 +4907,9 @@ static void rtl8192_rx_cmd(struct sk_buff *skb) +@@ -4910,8 +4910,9 @@ static void rtl8192_rx_cmd(struct sk_buff *skb) } } @@ -75244,7 +75408,7 @@ index c9218be..ecda3f6 100644 - #endif diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c -index 68d65d2..060b3a3 100644 +index c6d952f..69cfa68 100644 --- a/drivers/staging/rtl8712/rtl871x_xmit.c +++ b/drivers/staging/rtl8712/rtl871x_xmit.c @@ -152,7 +152,7 @@ sint _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, @@ -75270,10 +75434,10 @@ index a9633c3..77b0c85 100644 void xmitframe_xmitbuf_attach(struct xmit_frame *pxmitframe, struct xmit_buf *pxmitbuf); diff --git a/drivers/staging/rtl8712/usb_ops_linux.c b/drivers/staging/rtl8712/usb_ops_linux.c -index 489a9e6..6dd73de 100644 +index 454cdf6..e0a1337 100644 --- a/drivers/staging/rtl8712/usb_ops_linux.c +++ b/drivers/staging/rtl8712/usb_ops_linux.c -@@ -326,7 +326,7 @@ void r8712_usb_read_port_cancel(struct _adapter *padapter) +@@ -331,10 +331,10 @@ void r8712_usb_read_port_cancel(struct _adapter *padapter) } } @@ -75281,12 +75445,16 @@ index 489a9e6..6dd73de 100644 +void r8712_xmit_bh(unsigned long priv) { int ret = false; - struct _adapter *padapter = (struct _adapter *)priv; +- struct _adapter *padapter = priv; ++ struct _adapter *padapter = (struct _adapter *)priv; + struct xmit_priv *pxmitpriv = &padapter->xmitpriv; + + if (padapter->bDriverStopped || diff --git a/drivers/staging/rtl8712/xmit_linux.c b/drivers/staging/rtl8712/xmit_linux.c -index d398183..0ceb8ad 100644 +index 695f9b9..5f8019a 100644 --- a/drivers/staging/rtl8712/xmit_linux.c +++ b/drivers/staging/rtl8712/xmit_linux.c -@@ -159,7 +159,7 @@ void r8712_xmit_complete(struct _adapter *padapter, struct xmit_frame *pxframe) +@@ -156,7 +156,7 @@ void r8712_xmit_complete(struct _adapter *padapter, struct xmit_frame *pxframe) pxframe->pkt = NULL; } @@ -75309,7 +75477,7 @@ index 8eba7ca..6c4ce81 100644 int r8712_xmit_resource_alloc(struct _adapter *padapter, struct xmit_buf *pxmitbuf); diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c -index d28f29a..e3d2f19 100644 +index f4fff38..c8c4865 100644 --- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c +++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c @@ -368,7 +368,7 @@ static void init_mlme_ext_priv23a_value(struct rtw_adapter *padapter) @@ -75321,7 +75489,7 @@ index d28f29a..e3d2f19 100644 /* reset to zero when disconnect at client mode */ pmlmeext->mgnt_seq = 0; -@@ -4743,7 +4743,7 @@ void report_survey_event23a(struct rtw_adapter *padapter, +@@ -4734,7 +4734,7 @@ void report_survey_event23a(struct rtw_adapter *padapter, pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct survey_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_Survey); @@ -75330,7 +75498,7 @@ index d28f29a..e3d2f19 100644 psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header)); -@@ -4794,7 +4794,7 @@ void report_surveydone_event23a(struct rtw_adapter *padapter) +@@ -4783,7 +4783,7 @@ void report_surveydone_event23a(struct rtw_adapter *padapter) pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct surveydone_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_SurveyDone); @@ -75339,7 +75507,7 @@ index d28f29a..e3d2f19 100644 psurveydone_evt = (struct surveydone_event*)(pevtcmd + sizeof(struct C2HEvent_Header)); psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt; -@@ -4838,7 +4838,7 @@ void report_join_res23a(struct rtw_adapter *padapter, int res) +@@ -4825,7 +4825,7 @@ void report_join_res23a(struct rtw_adapter *padapter, int res) pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct joinbss_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_JoinBss); @@ -75348,7 +75516,7 @@ index d28f29a..e3d2f19 100644 pjoinbss_evt = (struct joinbss_event*)(pevtcmd + sizeof(struct C2HEvent_Header)); memcpy((unsigned char *)&pjoinbss_evt->network.network, -@@ -4888,7 +4888,7 @@ void report_del_sta_event23a(struct rtw_adapter *padapter, +@@ -4873,7 +4873,7 @@ void report_del_sta_event23a(struct rtw_adapter *padapter, pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct stadel_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_DelSTA); @@ -75357,7 +75525,7 @@ index d28f29a..e3d2f19 100644 pdel_sta_evt = (struct stadel_event*)(pevtcmd + sizeof(struct C2HEvent_Header)); ether_addr_copy((unsigned char *)&pdel_sta_evt->macaddr, MacAddr); -@@ -4942,7 +4942,7 @@ void report_add_sta_event23a(struct rtw_adapter *padapter, +@@ -4925,7 +4925,7 @@ void report_add_sta_event23a(struct rtw_adapter *padapter, pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd); pc2h_evt_hdr->len = sizeof(struct stassoc_event); pc2h_evt_hdr->ID = GEN_EVT_CODE(_AddSTA); @@ -75367,7 +75535,7 @@ index d28f29a..e3d2f19 100644 padd_sta_evt = (struct stassoc_event*)(pevtcmd + sizeof(struct C2HEvent_Header)); ether_addr_copy((unsigned char *)&padd_sta_evt->macaddr, MacAddr); diff --git a/drivers/staging/rtl8723au/core/rtw_xmit.c b/drivers/staging/rtl8723au/core/rtw_xmit.c -index a4b6bb6..b22a6be 100644 +index 3de40cf..8213068 100644 --- a/drivers/staging/rtl8723au/core/rtw_xmit.c +++ b/drivers/staging/rtl8723au/core/rtw_xmit.c @@ -183,7 +183,7 @@ int _rtw_init_xmit_priv23a(struct xmit_priv *pxmitpriv, @@ -75393,10 +75561,10 @@ index 0fec84b..298d283 100644 precvpriv->int_in_urb = usb_alloc_urb(0, GFP_KERNEL); diff --git a/drivers/staging/rtl8723au/hal/usb_ops_linux.c b/drivers/staging/rtl8723au/hal/usb_ops_linux.c -index 371e6b3..ab5f50b 100644 +index 5c81ff4..b4c2601 100644 --- a/drivers/staging/rtl8723au/hal/usb_ops_linux.c +++ b/drivers/staging/rtl8723au/hal/usb_ops_linux.c -@@ -487,7 +487,7 @@ _exit_recvbuf2recvframe: +@@ -483,7 +483,7 @@ _exit_recvbuf2recvframe: return _SUCCESS; } @@ -75405,7 +75573,7 @@ index 371e6b3..ab5f50b 100644 { struct sk_buff *pskb; struct rtw_adapter *padapter = (struct rtw_adapter *)priv; -@@ -662,7 +662,7 @@ int rtl8723au_read_port(struct rtw_adapter *adapter, u32 cnt, +@@ -658,7 +658,7 @@ int rtl8723au_read_port(struct rtw_adapter *adapter, u32 cnt, return ret; } @@ -75481,7 +75649,7 @@ index c2d3f1b..bb0dc02 100644 int rtw_os_recv_resource_init(struct recv_priv *precvpriv, struct rtw_adapter *padapter); diff --git a/drivers/staging/rtl8723au/include/rtw_ap.h b/drivers/staging/rtl8723au/include/rtw_ap.h -index 9f8d235..a642aac 100644 +index 55a708f..2f111af 100644 --- a/drivers/staging/rtl8723au/include/rtw_ap.h +++ b/drivers/staging/rtl8723au/include/rtw_ap.h @@ -26,8 +26,6 @@ @@ -75615,10 +75783,10 @@ index 2be04c48..a494e09 100644 void rtw_os_xmit_schedule23a(struct rtw_adapter *padapter); diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c -index 0ae2180..cb7945c 100644 +index 12d1844..46d0889 100644 --- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c +++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c -@@ -2435,7 +2435,7 @@ static int rtw_cfg80211_monitor_if_close(struct net_device *ndev) +@@ -2430,7 +2430,7 @@ static int rtw_cfg80211_monitor_if_close(struct net_device *ndev) return 0; } @@ -75628,7 +75796,7 @@ index 0ae2180..cb7945c 100644 { int ret = 0; diff --git a/drivers/staging/rtl8723au/os_dep/xmit_linux.c b/drivers/staging/rtl8723au/os_dep/xmit_linux.c -index 9a14074..3d02410 100644 +index 64be72a..d0d2f81 100644 --- a/drivers/staging/rtl8723au/os_dep/xmit_linux.c +++ b/drivers/staging/rtl8723au/os_dep/xmit_linux.c @@ -117,7 +117,7 @@ static void rtw_check_xmit_resource(struct rtw_adapter *padapter, @@ -75641,10 +75809,10 @@ index 9a14074..3d02410 100644 struct rtw_adapter *padapter = netdev_priv(pnetdev); struct xmit_priv *pxmitpriv = &padapter->xmitpriv; diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c -index c78421b..e1ba746 100644 +index 6ed004e..f8ebf08 100644 --- a/drivers/staging/sm750fb/sm750.c +++ b/drivers/staging/sm750fb/sm750.c -@@ -720,6 +720,7 @@ static struct fb_ops lynxfb_ops = { +@@ -725,6 +725,7 @@ static struct fb_ops lynxfb_ops = { .fb_set_par = lynxfb_ops_set_par, .fb_setcolreg = lynxfb_ops_setcolreg, .fb_blank = lynxfb_ops_blank, @@ -75652,7 +75820,7 @@ index c78421b..e1ba746 100644 .fb_fillrect = cfb_fillrect, .fb_imageblit = cfb_imageblit, .fb_copyarea = cfb_copyarea, -@@ -765,7 +766,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index) +@@ -770,7 +771,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index) par->index = index; output->channel = &crtc->channel; sm750fb_set_drv(par); @@ -75660,7 +75828,7 @@ index c78421b..e1ba746 100644 /* * set current cursor variable and proc pointer, -@@ -782,16 +782,20 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index) +@@ -787,16 +787,20 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index) memset_io(crtc->cursor.vstart, 0, crtc->cursor.size); if (!g_hwcursor) { @@ -75708,10 +75876,10 @@ index 39edd20..d860d0c 100644 /** Register functions (in the bus driver) to get called by visorchipset * whenever a bus or device appears for which this guest is to be the diff --git a/drivers/staging/unisys/visornic/visornic_main.c b/drivers/staging/unisys/visornic/visornic_main.c -index 0519470..14d4074 100644 +index be0d057..9f34086 100644 --- a/drivers/staging/unisys/visornic/visornic_main.c +++ b/drivers/staging/unisys/visornic/visornic_main.c -@@ -809,7 +809,7 @@ static inline bool vnic_hit_low_watermark(struct visornic_devdata *devdata, +@@ -807,7 +807,7 @@ static inline bool vnic_hit_low_watermark(struct visornic_devdata *devdata, * can be called again. * Returns NETDEV_TX_OK. */ @@ -75720,8 +75888,34 @@ index 0519470..14d4074 100644 visornic_xmit(struct sk_buff *skb, struct net_device *netdev) { struct visornic_devdata *devdata; +diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c +index 1a2dda0..f1cb7d1 100644 +--- a/drivers/staging/vt6655/rxtx.c ++++ b/drivers/staging/vt6655/rxtx.c +@@ -1243,7 +1243,7 @@ static void vnt_fill_txkey(struct ieee80211_hdr *hdr, u8 *key_buffer, + mic_hdr->payload_len = cpu_to_be16(payload_len); + ether_addr_copy(mic_hdr->mic_addr2, hdr->addr2); + +- pn64 = atomic64_read(&tx_key->tx_pn); ++ pn64 = atomic64_read_unchecked(&tx_key->tx_pn); + mic_hdr->ccmp_pn[5] = pn64; + mic_hdr->ccmp_pn[4] = pn64 >> 8; + mic_hdr->ccmp_pn[3] = pn64 >> 16; +diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c +index b74e320..bd00d63 100644 +--- a/drivers/staging/vt6656/rxtx.c ++++ b/drivers/staging/vt6656/rxtx.c +@@ -749,7 +749,7 @@ static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context, + mic_hdr->payload_len = cpu_to_be16(payload_len); + ether_addr_copy(mic_hdr->mic_addr2, hdr->addr2); + +- pn64 = atomic64_read(&tx_key->tx_pn); ++ pn64 = atomic64_read_unchecked(&tx_key->tx_pn); + mic_hdr->ccmp_pn[5] = pn64; + mic_hdr->ccmp_pn[4] = pn64 >> 8; + mic_hdr->ccmp_pn[3] = pn64 >> 16; diff --git a/drivers/staging/wilc1000/host_interface.h b/drivers/staging/wilc1000/host_interface.h -index 8faac27..ed87447 100644 +index 01f3222..81ea93a 100644 --- a/drivers/staging/wilc1000/host_interface.h +++ b/drivers/staging/wilc1000/host_interface.h @@ -1,6 +1,7 @@ @@ -75733,10 +75927,10 @@ index 8faac27..ed87447 100644 #define IP_ALEN 4 diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c -index 54fe9d7..47110ad 100644 +index bfa754b..4c98e72 100644 --- a/drivers/staging/wilc1000/linux_wlan.c +++ b/drivers/staging/wilc1000/linux_wlan.c -@@ -1135,7 +1135,7 @@ static void linux_wlan_tx_complete(void *priv, int status) +@@ -1037,7 +1037,7 @@ static void linux_wlan_tx_complete(void *priv, int status) kfree(pv_data); } @@ -75746,22 +75940,22 @@ index 54fe9d7..47110ad 100644 struct wilc_vif *vif; struct tx_complete_data *tx_data = NULL; diff --git a/drivers/staging/wilc1000/wilc_spi.c b/drivers/staging/wilc1000/wilc_spi.c -index b3d6541..812eb42 100644 +index d41b8b6..2099b97 100644 --- a/drivers/staging/wilc1000/wilc_spi.c +++ b/drivers/staging/wilc1000/wilc_spi.c -@@ -20,6 +20,7 @@ +@@ -19,6 +19,7 @@ + #include <linux/of_gpio.h> - #include "linux_wlan_common.h" #include <linux/string.h> +#include <linux/netdevice.h> #include "wilc_wlan_if.h" #include "wilc_wlan.h" #include "wilc_wfi_netdevice.h" diff --git a/drivers/staging/wilc1000/wilc_wlan.h b/drivers/staging/wilc1000/wilc_wlan.h -index 2edd744..908a222 100644 +index bcd4bfa..41bfba0 100644 --- a/drivers/staging/wilc1000/wilc_wlan.h +++ b/drivers/staging/wilc1000/wilc_wlan.h -@@ -287,7 +287,7 @@ void wilc_chip_sleep_manually(struct wilc *wilc); +@@ -295,7 +295,7 @@ void wilc_chip_sleep_manually(struct wilc *wilc); void wilc_enable_tcp_ack_filter(bool value); int wilc_wlan_get_num_conn_ifcs(struct wilc *); @@ -75771,7 +75965,7 @@ index 2edd744..908a222 100644 int wilc_mac_open(struct net_device *ndev); int wilc_mac_close(struct net_device *ndev); diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c -index a9c1e0b..5e513c6 100644 +index 88255ce..aab2121 100644 --- a/drivers/staging/wlan-ng/p80211netdev.c +++ b/drivers/staging/wlan-ng/p80211netdev.c @@ -317,7 +317,7 @@ static void p80211netdev_rx_bh(unsigned long arg) @@ -75784,7 +75978,7 @@ index a9c1e0b..5e513c6 100644 { int result = 0; diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c -index 3072f1a..1071742 100644 +index c57e788..24d15dd 100644 --- a/drivers/target/sbp/sbp_target.c +++ b/drivers/target/sbp/sbp_target.c @@ -56,7 +56,7 @@ static const u32 sbp_unit_directory_template[] = { @@ -75796,7 +75990,7 @@ index 3072f1a..1071742 100644 static void session_maintenance_work(struct work_struct *); static int sbp_run_transaction(struct fw_card *, int, int, int, int, -@@ -437,7 +437,7 @@ static void sbp_management_request_login( +@@ -422,7 +422,7 @@ static void sbp_management_request_login( login->login_lun = unpacked_lun; login->status_fifo_addr = sbp2_pointer_to_addr(&req->orb.status_fifo); login->exclusive = LOGIN_ORB_EXCLUSIVE(be32_to_cpu(req->orb.misc)); @@ -75889,7 +76083,7 @@ index 5836e55..708bbd6 100644 priv->thermal = thermal_zone_device_register("INT3400 Thermal", 0, 0, priv, &int3400_thermal_ops, diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c -index 9043f8f..1b53349 100644 +index d8ec44b..08609d8 100644 --- a/drivers/thermal/of-thermal.c +++ b/drivers/thermal/of-thermal.c @@ -31,6 +31,7 @@ @@ -75944,7 +76138,7 @@ index 7fc919f..5521ec1 100644 }; diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c -index abbed20..acf0737 100644 +index d67e542..dc84c3d 100644 --- a/drivers/tty/cyclades.c +++ b/drivers/tty/cyclades.c @@ -1570,10 +1570,10 @@ static int cy_open(struct tty_struct *tty, struct file *filp) @@ -75960,7 +76154,7 @@ index abbed20..acf0737 100644 #endif /* -@@ -3961,7 +3961,7 @@ static int cyclades_proc_show(struct seq_file *m, void *v) +@@ -3959,7 +3959,7 @@ static int cyclades_proc_show(struct seq_file *m, void *v) for (j = 0; j < cy_card[i].nports; j++) { info = &cy_card[i].ports[j]; @@ -76374,7 +76568,7 @@ index 92982d7..758ecfe 100644 tty_port_tty_set(&ch->port, tty); mutex_lock(&ch->port.mutex); diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c -index 9aff371..2faef0d 100644 +index 365dfd8..7b7d867 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -1644,7 +1644,7 @@ static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr) @@ -76386,7 +76580,7 @@ index 9aff371..2faef0d 100644 kfree(dlci); return NULL; } -@@ -2667,7 +2667,7 @@ static inline void muxnet_put(struct gsm_mux_net *mux_net) +@@ -2652,7 +2652,7 @@ static inline void muxnet_put(struct gsm_mux_net *mux_net) kref_put(&mux_net->ref, net_free); } @@ -76395,7 +76589,7 @@ index 9aff371..2faef0d 100644 struct net_device *net) { struct gsm_mux_net *mux_net = netdev_priv(net); -@@ -2959,7 +2959,7 @@ static int gsmtty_open(struct tty_struct *tty, struct file *filp) +@@ -2943,7 +2943,7 @@ static int gsmtty_open(struct tty_struct *tty, struct file *filp) struct gsm_dlci *dlci = tty->driver_data; struct tty_port *port = &dlci->port; @@ -76405,10 +76599,10 @@ index 9aff371..2faef0d 100644 dlci->modem_rx = 0; diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c -index c12def7..4f1303d 100644 +index bdf0e6e..ea92f7e 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c -@@ -1515,7 +1515,7 @@ n_tty_receive_char_lnext(struct tty_struct *tty, unsigned char c, char flag) +@@ -1478,7 +1478,7 @@ n_tty_receive_char_lnext(struct tty_struct *tty, unsigned char c, char flag) static void n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp, @@ -76417,7 +76611,7 @@ index c12def7..4f1303d 100644 { struct n_tty_data *ldata = tty->disc_data; size_t n, head; -@@ -1535,7 +1535,7 @@ n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp, +@@ -1498,7 +1498,7 @@ n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp, static void n_tty_receive_buf_raw(struct tty_struct *tty, const unsigned char *cp, @@ -76426,7 +76620,7 @@ index c12def7..4f1303d 100644 { struct n_tty_data *ldata = tty->disc_data; char flag = TTY_NORMAL; -@@ -1552,7 +1552,7 @@ n_tty_receive_buf_raw(struct tty_struct *tty, const unsigned char *cp, +@@ -1515,7 +1515,7 @@ n_tty_receive_buf_raw(struct tty_struct *tty, const unsigned char *cp, static void n_tty_receive_buf_closing(struct tty_struct *tty, const unsigned char *cp, @@ -76435,7 +76629,7 @@ index c12def7..4f1303d 100644 { char flag = TTY_NORMAL; -@@ -1568,7 +1568,7 @@ n_tty_receive_buf_closing(struct tty_struct *tty, const unsigned char *cp, +@@ -1529,7 +1529,7 @@ n_tty_receive_buf_closing(struct tty_struct *tty, const unsigned char *cp, static void n_tty_receive_buf_standard(struct tty_struct *tty, const unsigned char *cp, @@ -76444,7 +76638,7 @@ index c12def7..4f1303d 100644 { struct n_tty_data *ldata = tty->disc_data; char flag = TTY_NORMAL; -@@ -1602,7 +1602,7 @@ n_tty_receive_buf_standard(struct tty_struct *tty, const unsigned char *cp, +@@ -1563,7 +1563,7 @@ n_tty_receive_buf_standard(struct tty_struct *tty, const unsigned char *cp, static void n_tty_receive_buf_fast(struct tty_struct *tty, const unsigned char *cp, @@ -76453,7 +76647,7 @@ index c12def7..4f1303d 100644 { struct n_tty_data *ldata = tty->disc_data; char flag = TTY_NORMAL; -@@ -1627,7 +1627,7 @@ n_tty_receive_buf_fast(struct tty_struct *tty, const unsigned char *cp, +@@ -1588,7 +1588,7 @@ n_tty_receive_buf_fast(struct tty_struct *tty, const unsigned char *cp, } static void __receive_buf(struct tty_struct *tty, const unsigned char *cp, @@ -76462,7 +76656,7 @@ index c12def7..4f1303d 100644 { struct n_tty_data *ldata = tty->disc_data; bool preops = I_ISTRIP(tty) || (I_IUCLC(tty) && L_IEXTEN(tty)); -@@ -1705,10 +1705,10 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp, +@@ -1666,10 +1666,10 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp, */ static int n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp, @@ -76475,7 +76669,7 @@ index c12def7..4f1303d 100644 down_read(&tty->termios_rwsem); -@@ -1731,15 +1731,16 @@ n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp, +@@ -1692,15 +1692,16 @@ n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp, room = N_TTY_BUF_SIZE - (ldata->read_head - tail); if (I_PARMRK(tty)) room = (room + 2) / 3; @@ -76496,20 +76690,21 @@ index c12def7..4f1303d 100644 n = min(count, room); if (!n) -@@ -2545,6 +2546,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops) +@@ -2465,7 +2466,8 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops) { - *ops = tty_ldisc_N_TTY; + *ops = n_tty_ops; ops->owner = NULL; - ops->refcount = ops->flags = 0; + atomic_set(&ops->refcount, 0); + ops->flags = 0; } EXPORT_SYMBOL_GPL(n_tty_inherit_ops); + diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c -index 6427a39..4ee0796 100644 +index e198996..f2b79a2 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c -@@ -877,8 +877,10 @@ static void __init unix98_pty_init(void) +@@ -852,8 +852,10 @@ static void __init unix98_pty_init(void) panic("Couldn't register Unix98 pts driver"); /* Now create the /dev/ptmx special device */ @@ -76522,10 +76717,10 @@ index 6427a39..4ee0796 100644 cdev_init(&ptmx_cdev, &ptmx_fops); if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) || diff --git a/drivers/tty/rocket.c b/drivers/tty/rocket.c -index 802eac7..f5dcf07 100644 +index 0b802cd..70afed6 100644 --- a/drivers/tty/rocket.c +++ b/drivers/tty/rocket.c -@@ -906,7 +906,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp) +@@ -905,7 +905,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp) tty->driver_data = info; tty_port_tty_set(port, tty); @@ -76534,7 +76729,7 @@ index 802eac7..f5dcf07 100644 atomic_inc(&rp_num_ports_open); #ifdef ROCKET_DEBUG_OPEN -@@ -915,7 +915,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp) +@@ -914,7 +914,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp) #endif } #ifdef ROCKET_DEBUG_OPEN @@ -76543,7 +76738,7 @@ index 802eac7..f5dcf07 100644 #endif /* -@@ -1502,7 +1502,7 @@ static void rp_hangup(struct tty_struct *tty) +@@ -1498,7 +1498,7 @@ static void rp_hangup(struct tty_struct *tty) #endif rp_flush_buffer(tty); spin_lock_irqsave(&info->port.lock, flags); @@ -76553,7 +76748,7 @@ index 802eac7..f5dcf07 100644 clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]); spin_unlock_irqrestore(&info->port.lock, flags); diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index c9720a9..964f2d9 100644 +index 2f4f5ee..fed5cc6 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -488,9 +488,9 @@ static void univ8250_release_port(struct uart_port *port) @@ -76582,10 +76777,10 @@ index c9720a9..964f2d9 100644 if (share_irqs) irqflag = IRQF_SHARED; diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c -index c1d4a8f..a8e7167 100644 +index 4eedd1d..4868f61 100644 --- a/drivers/tty/serial/8250/8250_pci.c +++ b/drivers/tty/serial/8250/8250_pci.c -@@ -5659,7 +5659,7 @@ static struct pci_device_id serial_pci_tbl[] = { +@@ -5620,7 +5620,7 @@ static struct pci_device_id serial_pci_tbl[] = { }; static pci_ers_result_t serial8250_io_error_detected(struct pci_dev *dev, @@ -76595,10 +76790,10 @@ index c1d4a8f..a8e7167 100644 struct serial_private *priv = pci_get_drvdata(dev); diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c -index 88246f7..9036604 100644 +index 2085a6c..d386346 100644 --- a/drivers/tty/serial/ifx6x60.c +++ b/drivers/tty/serial/ifx6x60.c -@@ -649,7 +649,7 @@ static void ifx_spi_complete(void *ctx) +@@ -651,7 +651,7 @@ static void ifx_spi_complete(void *ctx) struct ifx_spi_device *ifx_dev = ctx; int length; int actual_length; @@ -76782,10 +76977,10 @@ index a260cde..604fce9 100644 /* This is only available if kgdboc is a built in for early debugging */ static int __init kgdboc_early_init(char *opt) diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c -index dcde955..920693f 100644 +index 96d3ce8..112fce3 100644 --- a/drivers/tty/serial/msm_serial.c +++ b/drivers/tty/serial/msm_serial.c -@@ -1530,7 +1530,7 @@ static struct uart_driver msm_uart_driver = { +@@ -1528,7 +1528,7 @@ static struct uart_driver msm_uart_driver = { .cons = MSM_CONSOLE, }; @@ -76794,7 +76989,7 @@ index dcde955..920693f 100644 static const struct of_device_id msm_uartdm_table[] = { { .compatible = "qcom,msm-uartdm-v1.1", .data = (void *)UARTDM_1P1 }, -@@ -1554,7 +1554,7 @@ static int msm_serial_probe(struct platform_device *pdev) +@@ -1552,7 +1552,7 @@ static int msm_serial_probe(struct platform_device *pdev) line = pdev->id; if (line < 0) @@ -76804,10 +76999,10 @@ index dcde955..920693f 100644 if (unlikely(line < 0 || line >= UART_NR)) return -ENXIO; diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c -index 8320173..fd1160b 100644 +index 99bb231..ba80b07 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c -@@ -970,11 +970,16 @@ static void s3c24xx_serial_shutdown(struct uart_port *port) +@@ -978,11 +978,16 @@ static void s3c24xx_serial_shutdown(struct uart_port *port) ourport->tx_in_progress = 0; } @@ -76824,7 +77019,7 @@ index 8320173..fd1160b 100644 dbg("s3c24xx_serial_startup: port=%p (%08llx,%p)\n", port, (unsigned long long)port->mapbase, port->membase); -@@ -1681,10 +1686,6 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, +@@ -1689,10 +1694,6 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, /* setup info for port */ port->dev = &platdev->dev; @@ -76836,10 +77031,10 @@ index 8320173..fd1160b 100644 if (cfg->uart_flags & UPF_CONS_FLOW) { diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c -index b1f54ab..de9edc3 100644 +index a126a60..b68a648 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c -@@ -1384,7 +1384,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) +@@ -1374,7 +1374,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) state = drv->state + tty->index; port = &state->port; spin_lock_irq(&port->lock); @@ -76848,16 +77043,16 @@ index b1f54ab..de9edc3 100644 spin_unlock_irq(&port->lock); return; } -@@ -1394,7 +1394,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) - - pr_debug("uart_close(%d) called\n", uport ? uport->line : -1); +@@ -1383,7 +1383,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) + port = &state->port; + pr_debug("uart_close(%d) called\n", tty->index); - if (!port->count || tty_port_close_start(port, tty, filp) == 0) + if (!atomic_read(&port->count) || tty_port_close_start(port, tty, filp) == 0) return; /* -@@ -1517,7 +1517,7 @@ static void uart_hangup(struct tty_struct *tty) +@@ -1505,7 +1505,7 @@ static void uart_hangup(struct tty_struct *tty) uart_flush_buffer(tty); uart_shutdown(tty, state); spin_lock_irqsave(&port->lock, flags); @@ -76866,7 +77061,7 @@ index b1f54ab..de9edc3 100644 clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags); spin_unlock_irqrestore(&port->lock, flags); tty_port_tty_set(port, NULL); -@@ -1599,7 +1599,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) +@@ -1587,7 +1587,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) pr_debug("uart_open(%d) called\n", line); spin_lock_irq(&port->lock); @@ -76876,10 +77071,10 @@ index b1f54ab..de9edc3 100644 /* diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c -index b1c6bd3..5f038e2 100644 +index d08baa6..4bb0007 100644 --- a/drivers/tty/serial/uartlite.c +++ b/drivers/tty/serial/uartlite.c -@@ -341,13 +341,13 @@ static int ulite_request_port(struct uart_port *port) +@@ -345,13 +345,13 @@ static int ulite_request_port(struct uart_port *port) return -EBUSY; } @@ -76896,10 +77091,10 @@ index b1c6bd3..5f038e2 100644 return 0; } diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c -index 6188059..24bff50 100644 +index f5476e2..78f1fb9 100644 --- a/drivers/tty/synclink.c +++ b/drivers/tty/synclink.c -@@ -3090,7 +3090,7 @@ static void mgsl_close(struct tty_struct *tty, struct file * filp) +@@ -3085,7 +3085,7 @@ static void mgsl_close(struct tty_struct *tty, struct file * filp) if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):mgsl_close(%s) entry, count=%d\n", @@ -76908,7 +77103,7 @@ index 6188059..24bff50 100644 if (tty_port_close_start(&info->port, tty, filp) == 0) goto cleanup; -@@ -3108,7 +3108,7 @@ static void mgsl_close(struct tty_struct *tty, struct file * filp) +@@ -3103,7 +3103,7 @@ static void mgsl_close(struct tty_struct *tty, struct file * filp) cleanup: if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):mgsl_close(%s) exit, count=%d\n", __FILE__,__LINE__, @@ -76917,7 +77112,7 @@ index 6188059..24bff50 100644 } /* end of mgsl_close() */ -@@ -3207,8 +3207,8 @@ static void mgsl_hangup(struct tty_struct *tty) +@@ -3202,8 +3202,8 @@ static void mgsl_hangup(struct tty_struct *tty) mgsl_flush_buffer(tty); shutdown(info); @@ -76928,7 +77123,7 @@ index 6188059..24bff50 100644 info->port.flags &= ~ASYNC_NORMAL_ACTIVE; info->port.tty = NULL; -@@ -3296,10 +3296,10 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, +@@ -3291,10 +3291,10 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):block_til_ready before block on %s count=%d\n", @@ -76941,7 +77136,7 @@ index 6188059..24bff50 100644 spin_unlock_irqrestore(&info->irq_spinlock, flags); port->blocked_open++; -@@ -3326,7 +3326,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, +@@ -3321,7 +3321,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):block_til_ready blocking on %s count=%d\n", @@ -76950,7 +77145,7 @@ index 6188059..24bff50 100644 tty_unlock(tty); schedule(); -@@ -3338,12 +3338,12 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, +@@ -3333,12 +3333,12 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, /* FIXME: Racy on hangup during close wait */ if (!tty_hung_up_p(filp)) @@ -76965,7 +77160,7 @@ index 6188059..24bff50 100644 if (!retval) port->flags |= ASYNC_NORMAL_ACTIVE; -@@ -3395,7 +3395,7 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp) +@@ -3390,7 +3390,7 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp) if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):mgsl_open(%s), old ref count = %d\n", @@ -76974,7 +77169,7 @@ index 6188059..24bff50 100644 info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; -@@ -3405,10 +3405,10 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp) +@@ -3400,10 +3400,10 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp) spin_unlock_irqrestore(&info->netlock, flags); goto cleanup; } @@ -76987,7 +77182,7 @@ index 6188059..24bff50 100644 /* 1st open on this device, init hardware */ retval = startup(info); if (retval < 0) -@@ -3432,8 +3432,8 @@ cleanup: +@@ -3427,8 +3427,8 @@ cleanup: if (retval) { if (tty->count == 1) info->port.tty = NULL; /* tty layer will release tty struct */ @@ -76998,7 +77193,7 @@ index 6188059..24bff50 100644 } return retval; -@@ -7652,7 +7652,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, +@@ -7647,7 +7647,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, unsigned short new_crctype; /* return error if TTY interface open */ @@ -77007,7 +77202,7 @@ index 6188059..24bff50 100644 return -EBUSY; switch (encoding) -@@ -7748,7 +7748,7 @@ static int hdlcdev_open(struct net_device *dev) +@@ -7743,7 +7743,7 @@ static int hdlcdev_open(struct net_device *dev) /* arbitrate between network and tty opens */ spin_lock_irqsave(&info->netlock, flags); @@ -77016,7 +77211,7 @@ index 6188059..24bff50 100644 printk(KERN_WARNING "%s: hdlc_open returning busy\n", dev->name); spin_unlock_irqrestore(&info->netlock, flags); return -EBUSY; -@@ -7834,7 +7834,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +@@ -7829,7 +7829,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) printk("%s:hdlcdev_ioctl(%s)\n",__FILE__,dev->name); /* return error if TTY interface open */ @@ -77026,7 +77221,7 @@ index 6188059..24bff50 100644 if (cmd != SIOCWANDEV) diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c -index 5505ea8..d92b90e 100644 +index c0a2f5a..a621130 100644 --- a/drivers/tty/synclink_gt.c +++ b/drivers/tty/synclink_gt.c @@ -670,7 +670,7 @@ static int open(struct tty_struct *tty, struct file *filp) @@ -77089,7 +77284,7 @@ index 5505ea8..d92b90e 100644 info->port.flags &= ~ASYNC_NORMAL_ACTIVE; info->port.tty = NULL; spin_unlock_irqrestore(&info->port.lock, flags); -@@ -1440,7 +1440,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, +@@ -1435,7 +1435,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, unsigned short new_crctype; /* return error if TTY interface open */ @@ -77098,7 +77293,7 @@ index 5505ea8..d92b90e 100644 return -EBUSY; DBGINFO(("%s hdlcdev_attach\n", info->device_name)); -@@ -1536,7 +1536,7 @@ static int hdlcdev_open(struct net_device *dev) +@@ -1531,7 +1531,7 @@ static int hdlcdev_open(struct net_device *dev) /* arbitrate between network and tty opens */ spin_lock_irqsave(&info->netlock, flags); @@ -77107,7 +77302,7 @@ index 5505ea8..d92b90e 100644 DBGINFO(("%s hdlc_open busy\n", dev->name)); spin_unlock_irqrestore(&info->netlock, flags); return -EBUSY; -@@ -1621,7 +1621,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +@@ -1616,7 +1616,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) DBGINFO(("%s hdlcdev_ioctl\n", dev->name)); /* return error if TTY interface open */ @@ -77116,7 +77311,7 @@ index 5505ea8..d92b90e 100644 return -EBUSY; if (cmd != SIOCWANDEV) -@@ -2408,7 +2408,7 @@ static irqreturn_t slgt_interrupt(int dummy, void *dev_id) +@@ -2403,7 +2403,7 @@ static irqreturn_t slgt_interrupt(int dummy, void *dev_id) if (port == NULL) continue; spin_lock(&port->lock); @@ -77125,7 +77320,7 @@ index 5505ea8..d92b90e 100644 port->pending_bh && !port->bh_running && !port->bh_requested) { DBGISR(("%s bh queued\n", port->device_name)); -@@ -3294,7 +3294,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, +@@ -3289,7 +3289,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, add_wait_queue(&port->open_wait, &wait); spin_lock_irqsave(&info->lock, flags); @@ -77134,7 +77329,7 @@ index 5505ea8..d92b90e 100644 spin_unlock_irqrestore(&info->lock, flags); port->blocked_open++; -@@ -3329,7 +3329,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, +@@ -3324,7 +3324,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, remove_wait_queue(&port->open_wait, &wait); if (!tty_hung_up_p(filp)) @@ -77144,7 +77339,7 @@ index 5505ea8..d92b90e 100644 if (!retval) diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c -index fb00a06..bb80abd 100644 +index 90da0c7..05a09c0 100644 --- a/drivers/tty/synclinkmp.c +++ b/drivers/tty/synclinkmp.c @@ -750,7 +750,7 @@ static int open(struct tty_struct *tty, struct file *filp) @@ -77207,7 +77402,7 @@ index fb00a06..bb80abd 100644 info->port.flags &= ~ASYNC_NORMAL_ACTIVE; info->port.tty = NULL; spin_unlock_irqrestore(&info->port.lock, flags); -@@ -1556,7 +1556,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, +@@ -1551,7 +1551,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding, unsigned short new_crctype; /* return error if TTY interface open */ @@ -77216,7 +77411,7 @@ index fb00a06..bb80abd 100644 return -EBUSY; switch (encoding) -@@ -1652,7 +1652,7 @@ static int hdlcdev_open(struct net_device *dev) +@@ -1647,7 +1647,7 @@ static int hdlcdev_open(struct net_device *dev) /* arbitrate between network and tty opens */ spin_lock_irqsave(&info->netlock, flags); @@ -77225,7 +77420,7 @@ index fb00a06..bb80abd 100644 printk(KERN_WARNING "%s: hdlc_open returning busy\n", dev->name); spin_unlock_irqrestore(&info->netlock, flags); return -EBUSY; -@@ -1738,7 +1738,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +@@ -1733,7 +1733,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) printk("%s:hdlcdev_ioctl(%s)\n",__FILE__,dev->name); /* return error if TTY interface open */ @@ -77234,7 +77429,7 @@ index fb00a06..bb80abd 100644 return -EBUSY; if (cmd != SIOCWANDEV) -@@ -2615,7 +2615,7 @@ static irqreturn_t synclinkmp_interrupt(int dummy, void *dev_id) +@@ -2610,7 +2610,7 @@ static irqreturn_t synclinkmp_interrupt(int dummy, void *dev_id) * do not request bottom half processing if the * device is not open in a normal mode. */ @@ -77243,7 +77438,7 @@ index fb00a06..bb80abd 100644 port->pending_bh && !port->bh_running && !port->bh_requested ) { if ( debug_level >= DEBUG_LEVEL_ISR ) -@@ -3312,10 +3312,10 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, +@@ -3307,10 +3307,10 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):%s block_til_ready() before block, count=%d\n", @@ -77256,7 +77451,7 @@ index fb00a06..bb80abd 100644 spin_unlock_irqrestore(&info->lock, flags); port->blocked_open++; -@@ -3342,7 +3342,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, +@@ -3337,7 +3337,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):%s block_til_ready() count=%d\n", @@ -77265,7 +77460,7 @@ index fb00a06..bb80abd 100644 tty_unlock(tty); schedule(); -@@ -3352,12 +3352,12 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, +@@ -3347,12 +3347,12 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, set_current_state(TASK_RUNNING); remove_wait_queue(&port->open_wait, &wait); if (!tty_hung_up_p(filp)) @@ -77294,7 +77489,7 @@ index e513940..fb19436 100644 if (get_user(c, buf)) diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c -index a7eacef..7aea89e 100644 +index 24d5491..a74f792 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -105,6 +105,8 @@ @@ -77306,7 +77501,7 @@ index a7eacef..7aea89e 100644 #undef TTY_DEBUG_HANGUP #ifdef TTY_DEBUG_HANGUP # define tty_debug_hangup(tty, f, args...) tty_debug(tty, f, ##args) -@@ -2276,6 +2278,8 @@ static int tiocsti(struct tty_struct *tty, char __user *p) +@@ -2291,6 +2293,8 @@ static int tiocsti(struct tty_struct *tty, char __user *p) char ch, mbz = 0; struct tty_ldisc *ld; @@ -77315,7 +77510,7 @@ index a7eacef..7aea89e 100644 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN)) return -EPERM; if (get_user(ch, p)) -@@ -3555,7 +3559,7 @@ EXPORT_SYMBOL(tty_devnum); +@@ -3565,7 +3569,7 @@ EXPORT_SYMBOL(tty_devnum); void tty_default_fops(struct file_operations *fops) { @@ -77325,7 +77520,7 @@ index a7eacef..7aea89e 100644 /* diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c -index a054d03..c007e888 100644 +index 68947f6..1f85fef2 100644 --- a/drivers/tty/tty_ldisc.c +++ b/drivers/tty/tty_ldisc.c @@ -68,7 +68,7 @@ int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc) @@ -77365,7 +77560,7 @@ index a054d03..c007e888 100644 raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); } diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c -index 846ed48..ffb3cbc 100644 +index dbcca30..7549b6f 100644 --- a/drivers/tty/tty_port.c +++ b/drivers/tty/tty_port.c @@ -235,7 +235,7 @@ void tty_port_hangup(struct tty_port *port) @@ -77421,7 +77616,7 @@ index 846ed48..ffb3cbc 100644 spin_unlock_irqrestore(&port->lock, flags); return 0; } -@@ -569,7 +569,7 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty, +@@ -566,7 +566,7 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty, struct file *filp) { spin_lock_irq(&port->lock); @@ -77431,7 +77626,7 @@ index 846ed48..ffb3cbc 100644 tty_port_tty_set(port, tty); diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c -index 6f0336f..5818bc1 100644 +index f973bfc..cc47958 100644 --- a/drivers/tty/vt/keyboard.c +++ b/drivers/tty/vt/keyboard.c @@ -642,6 +642,16 @@ static void k_spec(struct vc_data *vc, unsigned char value, char up_flag) @@ -77451,7 +77646,7 @@ index 6f0336f..5818bc1 100644 fn_handler[value](vc); } -@@ -1880,9 +1890,6 @@ int vt_do_kdsk_ioctl(int cmd, struct kbentry __user *user_kbe, int perm, +@@ -1876,9 +1886,6 @@ int vt_do_kdsk_ioctl(int cmd, struct kbentry __user *user_kbe, int perm, if (copy_from_user(&tmp, user_kbe, sizeof(struct kbentry))) return -EFAULT; @@ -77461,7 +77656,7 @@ index 6f0336f..5818bc1 100644 switch (cmd) { case KDGKBENT: /* Ensure another thread doesn't free it under us */ -@@ -1897,6 +1904,9 @@ int vt_do_kdsk_ioctl(int cmd, struct kbentry __user *user_kbe, int perm, +@@ -1893,6 +1900,9 @@ int vt_do_kdsk_ioctl(int cmd, struct kbentry __user *user_kbe, int perm, spin_unlock_irqrestore(&kbd_event_lock, flags); return put_user(val, &user_kbe->kb_value); case KDSKBENT: @@ -77471,7 +77666,7 @@ index 6f0336f..5818bc1 100644 if (!perm) return -EPERM; if (!i && v == K_NOSUCHMAP) { -@@ -1987,9 +1997,6 @@ int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm) +@@ -1983,9 +1993,6 @@ int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm) int i, j, k; int ret; @@ -77481,7 +77676,7 @@ index 6f0336f..5818bc1 100644 kbs = kmalloc(sizeof(*kbs), GFP_KERNEL); if (!kbs) { ret = -ENOMEM; -@@ -2023,6 +2030,9 @@ int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm) +@@ -2019,6 +2026,9 @@ int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm) kfree(kbs); return ((p && *p) ? -EOVERFLOW : 0); case KDSKBSENT: @@ -77573,7 +77768,7 @@ index bcc1fc0..0d989a9 100644 ret = uio_get_minor(idev); if (ret) diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c -index 1173f9c..6ded1e9 100644 +index 0a866e9..e0c35aa 100644 --- a/drivers/usb/atm/cxacru.c +++ b/drivers/usb/atm/cxacru.c @@ -474,7 +474,7 @@ static ssize_t cxacru_sysfs_store_adsl_config(struct device *dev, @@ -77583,8 +77778,8 @@ index 1173f9c..6ded1e9 100644 - if (index < 0 || index > 0x7f) + if (index > 0x7f) return -EINVAL; - pos += tmp; - + if (tmp < 0 || tmp > len - pos) + return -EINVAL; diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c index db322d9..f0f4bc1 100644 --- a/drivers/usb/atm/usbatm.c @@ -77669,12 +77864,12 @@ index db322d9..f0f4bc1 100644 if (!left--) { if (instance->disconnected) diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h -index ccfaba9..523f476 100644 +index 05ce308..702aded 100644 --- a/drivers/usb/class/cdc-acm.h +++ b/drivers/usb/class/cdc-acm.h -@@ -95,7 +95,7 @@ struct acm { - struct urb *read_urbs[ACM_NR]; +@@ -96,7 +96,7 @@ struct acm { struct acm_rb read_buffers[ACM_NR]; + struct acm_wb *putbuffer; /* for acm_tty_put_char() */ int rx_buflimit; - int rx_endpoint; + unsigned int rx_endpoint; @@ -77682,10 +77877,10 @@ index ccfaba9..523f476 100644 int write_used; /* number of non-empty write buffers */ int transmitting; diff --git a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c -index cffa0a0..1758349 100644 +index ef04b50..7582d99 100644 --- a/drivers/usb/core/devices.c +++ b/drivers/usb/core/devices.c -@@ -126,7 +126,7 @@ static const char format_endpt[] = +@@ -119,7 +119,7 @@ static const char format_endpt[] = * time it gets called. */ static struct device_connect_event { @@ -77694,7 +77889,7 @@ index cffa0a0..1758349 100644 wait_queue_head_t wait; } device_event = { .count = ATOMIC_INIT(1), -@@ -164,7 +164,7 @@ static const struct class_info clas_info[] = { +@@ -157,7 +157,7 @@ static const struct class_info clas_info[] = { void usbfs_conn_disc_event(void) { @@ -77703,7 +77898,7 @@ index cffa0a0..1758349 100644 wake_up(&device_event.wait); } -@@ -652,7 +652,7 @@ static unsigned int usb_device_poll(struct file *file, +@@ -648,7 +648,7 @@ static unsigned int usb_device_poll(struct file *file, poll_wait(file, &device_event.wait, wait); @@ -77713,10 +77908,10 @@ index cffa0a0..1758349 100644 file->f_version = event_count; return POLLIN | POLLRDNORM; diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c -index 59e7a33..0296a3e 100644 +index 52c4461..adf74f5 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c -@@ -168,7 +168,7 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, +@@ -289,7 +289,7 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, struct usb_dev_state *ps = file->private_data; struct usb_device *dev = ps->dev; ssize_t ret = 0; @@ -77725,7 +77920,7 @@ index 59e7a33..0296a3e 100644 loff_t pos; int i; -@@ -210,22 +210,22 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, +@@ -331,22 +331,22 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, for (i = 0; nbytes && i < dev->descriptor.bNumConfigurations; i++) { struct usb_config_descriptor *config = (struct usb_config_descriptor *)dev->rawdescriptors[i]; @@ -77752,7 +77947,7 @@ index 59e7a33..0296a3e 100644 if (copy_to_user(buf, dev->rawdescriptors[i] + (*ppos - pos), min(len, alloclen))) { -@@ -1186,10 +1186,11 @@ static int proc_getdriver(struct usb_dev_state *ps, void __user *arg) +@@ -1316,10 +1316,11 @@ static int proc_getdriver(struct usb_dev_state *ps, void __user *arg) static int proc_connectinfo(struct usb_dev_state *ps, void __user *arg) { @@ -77768,7 +77963,7 @@ index 59e7a33..0296a3e 100644 if (copy_to_user(arg, &ci, sizeof(ci))) return -EFAULT; -@@ -1485,7 +1486,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb +@@ -1680,7 +1681,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb } } as->urb->dev = ps->dev; @@ -77778,10 +77973,10 @@ index 59e7a33..0296a3e 100644 (uurb->endpoint & USB_DIR_IN); diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c -index df0e3b9..5d9abce 100644 +index 980fc57..e36e99a 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c -@@ -1605,7 +1605,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) +@@ -1629,7 +1629,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) */ usb_get_urb(urb); atomic_inc(&urb->use_count); @@ -77790,7 +77985,7 @@ index df0e3b9..5d9abce 100644 usbmon_urb_submit(&hcd->self, urb); /* NOTE requirements on root-hub callers (usbfs and the hub -@@ -1632,7 +1632,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) +@@ -1656,7 +1656,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) urb->hcpriv = NULL; INIT_LIST_HEAD(&urb->urb_list); atomic_dec(&urb->use_count); @@ -77800,7 +77995,7 @@ index df0e3b9..5d9abce 100644 wake_up(&usb_kill_urb_queue); usb_put_urb(urb); diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index 84f6574..036bf7c 100644 +index 1ab42bf..0b2f334 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -26,6 +26,7 @@ @@ -77811,7 +78006,7 @@ index 84f6574..036bf7c 100644 #include <asm/uaccess.h> #include <asm/byteorder.h> -@@ -4732,6 +4733,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, +@@ -4788,6 +4789,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, goto done; return; } @@ -77823,10 +78018,10 @@ index 84f6574..036bf7c 100644 unit_load = 150; else diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c -index 65b6e6b..c0afa90 100644 +index c953a0f..54c64f4 100644 --- a/drivers/usb/core/sysfs.c +++ b/drivers/usb/core/sysfs.c -@@ -244,7 +244,7 @@ static ssize_t urbnum_show(struct device *dev, struct device_attribute *attr, +@@ -259,7 +259,7 @@ static ssize_t urbnum_show(struct device *dev, struct device_attribute *attr, struct usb_device *udev; udev = to_usb_device(dev); @@ -77836,10 +78031,10 @@ index 65b6e6b..c0afa90 100644 static DEVICE_ATTR_RO(urbnum); diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c -index 77e4c9b..0020d51 100644 +index 479187c3..55625b2a 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c -@@ -442,7 +442,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent, +@@ -444,7 +444,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent, set_dev_node(&dev->dev, dev_to_node(bus->controller)); dev->state = USB_STATE_ATTACHED; dev->lpm_disable_count = 1; @@ -77890,7 +78085,7 @@ index 8cfc319..4868255 100644 return 0; } diff --git a/drivers/usb/gadget/function/f_phonet.c b/drivers/usb/gadget/function/f_phonet.c -index 157441d..c0825d6 100644 +index 0473d61..5e9caa5 100644 --- a/drivers/usb/gadget/function/f_phonet.c +++ b/drivers/usb/gadget/function/f_phonet.c @@ -223,7 +223,7 @@ static void pn_tx_complete(struct usb_ep *ep, struct usb_request *req) @@ -77903,7 +78098,7 @@ index 157441d..c0825d6 100644 struct phonet_port *port = netdev_priv(dev); struct f_phonet *fp; diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c -index 6a2346b..22dd790 100644 +index f2ac0cb..4038262 100644 --- a/drivers/usb/gadget/function/f_uac1.c +++ b/drivers/usb/gadget/function/f_uac1.c @@ -14,6 +14,7 @@ @@ -78011,28 +78206,6 @@ index c78c841..48fd281 100644 #include "u_uac1.h" -diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c -index 87fb0fd..d2be0ad 100644 ---- a/drivers/usb/gadget/legacy/inode.c -+++ b/drivers/usb/gadget/legacy/inode.c -@@ -1702,6 +1702,8 @@ static struct usb_gadget_driver gadgetfs_driver = { - - static void gadgetfs_nop(struct usb_gadget *arg) { } - -+static int gadgetfs_nop2(struct usb_gadget *arg, const struct usb_ctrlrequest *req) { } -+ - static int gadgetfs_probe(struct usb_gadget *gadget, - struct usb_gadget_driver *driver) - { -@@ -1713,7 +1715,7 @@ static struct usb_gadget_driver probe_driver = { - .max_speed = USB_SPEED_HIGH, - .bind = gadgetfs_probe, - .unbind = gadgetfs_nop, -- .setup = (void *)gadgetfs_nop, -+ .setup = gadgetfs_nop2, - .disconnect = gadgetfs_nop, - .driver = { - .name = "nop", diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c index dde4445..f51cd5a 100644 --- a/drivers/usb/gadget/udc/dummy_hcd.c @@ -78047,7 +78220,7 @@ index dde4445..f51cd5a 100644 dum->hs_hcd = hcd_to_dummy_hcd(hcd); dum->hs_hcd->dum = dum; diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c -index 14178bb..34d20c3 100644 +index ae1b6e6..2aa775a 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -564,7 +564,7 @@ static int ehci_init(struct usb_hcd *hcd) @@ -78056,14 +78229,14 @@ index 14178bb..34d20c3 100644 if (!(hcd->driver->flags & HCD_LOCAL_MEM)) - hcd->self.sg_tablesize = ~0; + hcd->self.sg_tablesize = SG_ALL; - return 0; - } + /* Prepare for unlinking active QHs */ + ehci->old_current = ~0; diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c -index 086a711..1caf013 100644 +index ffc9029..46f0741 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c -@@ -773,7 +773,7 @@ static struct urb *request_single_step_set_feature_urb( +@@ -777,7 +777,7 @@ static struct urb *request_single_step_set_feature_urb( urb->transfer_flags = URB_DIR_IN; usb_get_urb(urb); atomic_inc(&urb->use_count); @@ -78072,7 +78245,7 @@ index 086a711..1caf013 100644 urb->setup_dma = dma_map_single( hcd->self.controller, urb->setup_packet, -@@ -840,7 +840,7 @@ static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port) +@@ -844,7 +844,7 @@ static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port) urb->status = -EINPROGRESS; usb_get_urb(urb); atomic_inc(&urb->use_count); @@ -78082,7 +78255,7 @@ index 086a711..1caf013 100644 if (!retval && !wait_for_completion_timeout(&done, msecs_to_jiffies(2000))) { diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c -index aad0777..19cc70f 100644 +index eca3710..eca7127 100644 --- a/drivers/usb/host/ehci-q.c +++ b/drivers/usb/host/ehci-q.c @@ -44,9 +44,9 @@ @@ -78098,10 +78271,10 @@ index aad0777..19cc70f 100644 /* one buffer entry per 4K ... first might be short or unaligned */ diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c -index 2341af4..ca7e7ac 100644 +index 360a5e9..ff82e6c 100644 --- a/drivers/usb/host/fotg210-hcd.c +++ b/drivers/usb/host/fotg210-hcd.c -@@ -5036,7 +5036,7 @@ static int hcd_fotg210_init(struct usb_hcd *hcd) +@@ -5031,7 +5031,7 @@ static int hcd_fotg210_init(struct usb_hcd *hcd) /* Accept arbitrarily long scatter-gather lists */ if (!(hcd->driver->flags & HCD_LOCAL_MEM)) @@ -78202,7 +78375,7 @@ index 48672fa..9245081 100644 /* Device for a quirk */ #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c -index a85a1c9..0f198bc 100644 +index 99b4ff4..83b36b4 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -1861,9 +1861,9 @@ td_cleanup: @@ -78301,10 +78474,10 @@ index a85a1c9..0f198bc 100644 if (*status == -EINPROGRESS) { if (td->urb->transfer_flags & URB_SHORT_NOT_OK) diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index 8e713cc..8c92a15 100644 +index 9e71c96..f9b2333 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c -@@ -4872,7 +4872,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) +@@ -4875,7 +4875,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) int retval; /* Accept arbitrarily long scatter-gather lists */ @@ -78453,7 +78626,7 @@ index ace3430..7536bac 100644 int diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c -index 3806e70..55c508b 100644 +index a66b01b..95a41b4 100644 --- a/drivers/usb/serial/console.c +++ b/drivers/usb/serial/console.c @@ -126,7 +126,7 @@ static int usb_console_setup(struct console *co, char *options) @@ -78465,7 +78638,7 @@ index 3806e70..55c508b 100644 if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) { if (serial->type->set_termios) { /* -@@ -175,7 +175,7 @@ static int usb_console_setup(struct console *co, char *options) +@@ -172,7 +172,7 @@ static int usb_console_setup(struct console *co, char *options) } /* Now that any required fake tty operations are completed restore * the tty port count */ @@ -78474,8 +78647,8 @@ index 3806e70..55c508b 100644 /* The console is special in terms of closing the device so * indicate this port is now acting as a system console. */ port->port.console = 1; -@@ -188,7 +188,7 @@ static int usb_console_setup(struct console *co, char *options) - put_tty: +@@ -184,7 +184,7 @@ static int usb_console_setup(struct console *co, char *options) + tty_port_tty_set(&port->port, NULL); tty_kref_put(tty); reset_open_count: - port->port.count = 0; @@ -78483,7 +78656,7 @@ index 3806e70..55c508b 100644 usb_autopm_put_interface(serial->interface); error_get_interface: usb_serial_put(serial); -@@ -199,7 +199,7 @@ static int usb_console_setup(struct console *co, char *options) +@@ -195,7 +195,7 @@ static int usb_console_setup(struct console *co, char *options) static void usb_console_write(struct console *co, const char *buf, unsigned count) { @@ -78545,19 +78718,19 @@ index a863a98..d272795 100644 /* * NOTE: diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c -index 7fbe19d..ac512fd 100644 +index fca5110..60c91ba 100644 --- a/drivers/usb/usbip/vhci_hcd.c +++ b/drivers/usb/usbip/vhci_hcd.c -@@ -440,7 +440,7 @@ static void vhci_tx_urb(struct urb *urb) +@@ -447,7 +447,7 @@ static void vhci_tx_urb(struct urb *urb) - spin_lock(&vdev->priv_lock); + spin_lock_irqsave(&vdev->priv_lock, flags); - priv->seqnum = atomic_inc_return(&the_controller->seqnum); + priv->seqnum = atomic_inc_return_unchecked(&the_controller->seqnum); if (priv->seqnum == 0xffff) dev_info(&urb->dev->dev, "seqnum max\n"); -@@ -687,7 +687,7 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) +@@ -696,7 +696,7 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) return -ENOMEM; } @@ -78566,7 +78739,7 @@ index 7fbe19d..ac512fd 100644 if (unlink->seqnum == 0xffff) pr_info("seqnum max\n"); -@@ -891,7 +891,7 @@ static int vhci_start(struct usb_hcd *hcd) +@@ -904,7 +904,7 @@ static int vhci_start(struct usb_hcd *hcd) vdev->rhport = rhport; } @@ -78576,10 +78749,10 @@ index 7fbe19d..ac512fd 100644 hcd->power_budget = 0; /* no limit */ diff --git a/drivers/usb/usbip/vhci_rx.c b/drivers/usb/usbip/vhci_rx.c -index 00e4a54..d676f85 100644 +index d656e0e..466853e 100644 --- a/drivers/usb/usbip/vhci_rx.c +++ b/drivers/usb/usbip/vhci_rx.c -@@ -80,7 +80,7 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev, +@@ -81,7 +81,7 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev, if (!urb) { pr_err("cannot find a urb of seqnum %u\n", pdu->base.seqnum); pr_info("max seqnum %d\n", @@ -78589,10 +78762,10 @@ index 00e4a54..d676f85 100644 return; } diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c -index 211f43f..6c22ae1 100644 +index 5b5462e..fac23a0 100644 --- a/drivers/usb/usbip/vhci_sysfs.c +++ b/drivers/usb/usbip/vhci_sysfs.c -@@ -59,7 +59,7 @@ static ssize_t status_show(struct device *dev, struct device_attribute *attr, +@@ -60,7 +60,7 @@ static ssize_t status_show(struct device *dev, struct device_attribute *attr, if (vdev->ud.status == VDEV_ST_USED) { out += sprintf(out, "%03u %08x ", vdev->speed, vdev->devid); @@ -78637,10 +78810,10 @@ index 69af4fd..da390d7 100644 /* Return the xfer's ID. */ diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c -index 8c80a48..8a205a9 100644 +index 712a849..c3ecd41 100644 --- a/drivers/vfio/pci/vfio_pci.c +++ b/drivers/vfio/pci/vfio_pci.c -@@ -1011,7 +1011,7 @@ static void vfio_pci_remove(struct pci_dev *pdev) +@@ -1172,7 +1172,7 @@ static void vfio_pci_remove(struct pci_dev *pdev) } static pci_ers_result_t vfio_pci_aer_err_detected(struct pci_dev *pdev, @@ -78924,10 +79097,10 @@ index 1b0b233..6f34c2c 100644 err = -ENOSPC; } diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c -index c42ce2f..4c8bc59 100644 +index 0a46268..e55dcb5 100644 --- a/drivers/video/fbdev/aty/aty128fb.c +++ b/drivers/video/fbdev/aty/aty128fb.c -@@ -145,7 +145,7 @@ enum { +@@ -144,7 +144,7 @@ enum { }; /* Must match above enum */ @@ -82426,7 +82599,7 @@ index 3c14e43..2630570 100644 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c -index 83ec7b8..bf1cce8 100644 +index 71d49a9..30a655a 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c @@ -1587,7 +1587,7 @@ void xen_irq_resume(void) @@ -94852,7 +95025,7 @@ index 0000000..43d7c4f +:1095D00080000A8080000A00800009808000090065 +:00000001FF diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c -index e9e0437..a442193 100644 +index ac9225e..e190518 100644 --- a/fs/9p/vfs_addr.c +++ b/fs/9p/vfs_addr.c @@ -121,7 +121,7 @@ static int v9fs_vfs_readpages(struct file *filp, struct address_space *mapping, @@ -94900,7 +95073,7 @@ index 2d0cbbd..a6d61492 100644 A.out (Assembler.OUTput) is a set of formats for libraries and executables used in the earliest versions of UNIX. Linux used diff --git a/fs/afs/file.c b/fs/afs/file.c -index 999bc3c..3926949 100644 +index 6344aee..217c579 100644 --- a/fs/afs/file.c +++ b/fs/afs/file.c @@ -122,11 +122,11 @@ static void afs_file_readpage_read_complete(struct page *page, @@ -95007,10 +95180,10 @@ index 25b24d0..85550fc 100644 goto out_sig; if (offset > inode->i_sb->s_maxbytes) diff --git a/fs/autofs4/waitq.c b/fs/autofs4/waitq.c -index 35b755e..f4b9e0a 100644 +index 0146d91..aaf11f3 100644 --- a/fs/autofs4/waitq.c +++ b/fs/autofs4/waitq.c -@@ -59,7 +59,7 @@ static int autofs4_write(struct autofs_sb_info *sbi, +@@ -56,7 +56,7 @@ static int autofs4_write(struct autofs_sb_info *sbi, { unsigned long sigpipe, flags; mm_segment_t fs; @@ -95019,7 +95192,7 @@ index 35b755e..f4b9e0a 100644 ssize_t wr = 0; sigpipe = sigismember(¤t->pending.signal, SIGPIPE); -@@ -340,6 +340,10 @@ static int validate_request(struct autofs_wait_queue **wait, +@@ -343,6 +343,10 @@ static int validate_request(struct autofs_wait_queue **wait, return 1; } @@ -95027,10 +95200,10 @@ index 35b755e..f4b9e0a 100644 +static atomic_unchecked_t autofs_dummy_name_id = ATOMIC_INIT(0); +#endif + - int autofs4_wait(struct autofs_sb_info *sbi, struct dentry *dentry, - enum autofs_notify notify) + int autofs4_wait(struct autofs_sb_info *sbi, + struct dentry *dentry, enum autofs_notify notify) { -@@ -385,7 +389,12 @@ int autofs4_wait(struct autofs_sb_info *sbi, struct dentry *dentry, +@@ -388,7 +392,12 @@ int autofs4_wait(struct autofs_sb_info *sbi, /* If this is a direct mount request create a dummy name */ if (IS_ROOT(dentry) && autofs_type_trigger(sbi->type)) @@ -95155,7 +95328,7 @@ index 4c55668..eeae150 100644 fd_offset + ex.a_text); if (error != N_DATADDR(ex)) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c -index 7d914c6..a86ce2a 100644 +index 81381cc..b8c8a51 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -36,6 +36,7 @@ @@ -96095,7 +96268,7 @@ index 7d914c6..a86ce2a 100644 { register_binfmt(&elf_format); diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c -index b1adb92..81d396b 100644 +index 083ea2bc..46a3cd3 100644 --- a/fs/binfmt_elf_fdpic.c +++ b/fs/binfmt_elf_fdpic.c @@ -1336,7 +1336,7 @@ static inline void fill_elf_fdpic_header(struct elfhdr *elf, int segs) @@ -96117,10 +96290,10 @@ index b1adb92..81d396b 100644 for (i = 0; i < numnote; i++) sz += notesize(notes + i); diff --git a/fs/block_dev.c b/fs/block_dev.c -index 826b164..690322d 100644 +index 20a2c02..5daa230 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c -@@ -766,7 +766,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole, +@@ -770,7 +770,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole, else if (bdev->bd_contains == bdev) return true; /* is a whole device which isn't held */ @@ -96130,7 +96303,7 @@ index 826b164..690322d 100644 else if (whole->bd_holder != NULL) return false; /* is a partition of a held device */ diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c -index dea6486..32f1db9 100644 +index ec7928a..89f482a 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -358,7 +358,7 @@ static inline void tree_mod_log_write_unlock(struct btrfs_fs_info *fs_info) @@ -96142,7 +96315,7 @@ index dea6486..32f1db9 100644 } /* -@@ -1183,9 +1183,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, +@@ -1182,9 +1182,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, free_extent_buffer(buf); add_root_to_dirty_list(root); } else { @@ -96159,10 +96332,10 @@ index dea6486..32f1db9 100644 WARN_ON(trans->transid != btrfs_header_generation(parent)); diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h -index 7c9a9c0..496d164 100644 +index 208d199..0a5afe1 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h -@@ -1618,7 +1618,7 @@ struct btrfs_fs_info { +@@ -1615,7 +1615,7 @@ struct btrfs_fs_info { /* this protects tree_mod_seq_list */ spinlock_t tree_mod_seq_lock; @@ -96181,10 +96354,10 @@ index 7c9a9c0..496d164 100644 /* No matter the commit succeeds or not*/ int log_transid_committed; diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c -index b57daa8..45ab28e 100644 +index 6cef006..48c10a6 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c -@@ -457,7 +457,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node, +@@ -456,7 +456,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node, static void finish_one_item(struct btrfs_delayed_root *delayed_root) { @@ -96193,7 +96366,7 @@ index b57daa8..45ab28e 100644 /* * atomic_dec_return implies a barrier for waitqueue_active -@@ -1411,7 +1411,7 @@ void btrfs_assert_delayed_root_empty(struct btrfs_root *root) +@@ -1415,7 +1415,7 @@ void btrfs_assert_delayed_root_empty(struct btrfs_root *root) static int could_end_wait(struct btrfs_delayed_root *delayed_root, int seq) { @@ -96202,7 +96375,7 @@ index b57daa8..45ab28e 100644 if (val < seq || val >= seq + BTRFS_DELAYED_BATCH) return 1; -@@ -1436,7 +1436,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root) +@@ -1440,7 +1440,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root) int seq; int ret; @@ -96234,7 +96407,7 @@ index 0167853c..b7d2bb4 100644 spin_lock_init(&delayed_root->lock); init_waitqueue_head(&delayed_root->wait); diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c -index 914ac13..6a872f7 100644 +index 430b368..85f12e1 100644 --- a/fs/btrfs/delayed-ref.c +++ b/fs/btrfs/delayed-ref.c @@ -660,7 +660,7 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info, @@ -96256,10 +96429,10 @@ index 914ac13..6a872f7 100644 /* first set the basic ref node struct up */ atomic_set(&ref->refs, 1); diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c -index ae6e3e3..ed0fc87 100644 +index 4e47849..d0d47dc 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c -@@ -1279,7 +1279,7 @@ static void __setup_root(u32 nodesize, u32 sectorsize, u32 stripesize, +@@ -1278,7 +1278,7 @@ static void __setup_root(u32 nodesize, u32 sectorsize, u32 stripesize, atomic_set(&root->log_commit[0], 0); atomic_set(&root->log_commit[1], 0); atomic_set(&root->log_writers, 0); @@ -96268,17 +96441,17 @@ index ae6e3e3..ed0fc87 100644 atomic_set(&root->orphan_inodes, 0); atomic_set(&root->refs, 1); atomic_set(&root->will_be_snapshoted, 0); -@@ -2611,7 +2611,7 @@ int open_ctree(struct super_block *sb, - atomic_set(&fs_info->nr_async_bios, 0); +@@ -2612,7 +2612,7 @@ int open_ctree(struct super_block *sb, atomic_set(&fs_info->defrag_running, 0); atomic_set(&fs_info->qgroup_op_seq, 0); + atomic_set(&fs_info->reada_works_cnt, 0); - atomic64_set(&fs_info->tree_mod_seq, 0); + atomic64_set_unchecked(&fs_info->tree_mod_seq, 0); fs_info->sb = sb; fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE; fs_info->metadata_ratio = 0; diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c -index 84fb56d..ee0fe69 100644 +index 318b048..d91951ea 100644 --- a/fs/btrfs/extent_map.c +++ b/fs/btrfs/extent_map.c @@ -235,7 +235,9 @@ static void try_merge_map(struct extent_map_tree *tree, struct extent_map *em) @@ -96304,10 +96477,10 @@ index 84fb56d..ee0fe69 100644 RB_CLEAR_NODE(&merge->rb_node); em->mod_len = (merge->mod_start + merge->mod_len) - em->mod_start; diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c -index 187fa7b..91e7c7f 100644 +index af5c7fa..64568af 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c -@@ -1910,7 +1910,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) +@@ -1939,7 +1939,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) return ret; inode_lock(inode); @@ -96316,7 +96489,7 @@ index 187fa7b..91e7c7f 100644 full_sync = test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags); /* -@@ -1964,7 +1964,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) +@@ -1993,7 +1993,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) inode_unlock(inode); goto out; } @@ -96338,7 +96511,7 @@ index 33178c4..ff2e4ad 100644 struct btrfs_io_ctl; diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c -index 5516136..8480a2f 100644 +index 0b7792e..be2ccab17 100644 --- a/fs/btrfs/raid56.c +++ b/fs/btrfs/raid56.c @@ -153,7 +153,7 @@ struct btrfs_raid_bio { @@ -96473,7 +96646,7 @@ index 5516136..8480a2f 100644 * build a list of bios to read all the missing parts of this * stripe diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c -index 468e988..7ac7d59 100644 +index 00b8f37..c5e191f 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -248,7 +248,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, @@ -96486,10 +96659,10 @@ index 468e988..7ac7d59 100644 wake_up(&root->fs_info->transaction_wait); wake_up(&root->fs_info->transaction_blocked_wait); diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c -index 3d14618..fe5cc46 100644 +index 539e7b5..9de4167 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c -@@ -489,7 +489,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add) +@@ -483,7 +483,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add) for (set = 0; set < FEAT_MAX; set++) { int i; struct attribute *attrs[2]; @@ -96499,7 +96672,7 @@ index 3d14618..fe5cc46 100644 .attrs = attrs, }; diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c -index d39f714..1adad12 100644 +index f54bf45..6a69b0b 100644 --- a/fs/btrfs/tests/btrfs-tests.c +++ b/fs/btrfs/tests/btrfs-tests.c @@ -119,7 +119,7 @@ struct btrfs_fs_info *btrfs_alloc_dummy_fs_info(void) @@ -96512,7 +96685,7 @@ index d39f714..1adad12 100644 INIT_LIST_HEAD(&fs_info->dead_roots); INIT_LIST_HEAD(&fs_info->tree_mod_seq_list); diff --git a/fs/btrfs/tests/free-space-tests.c b/fs/btrfs/tests/free-space-tests.c -index c9ad97b..006bc77 100644 +index 5142475..b290272 100644 --- a/fs/btrfs/tests/free-space-tests.c +++ b/fs/btrfs/tests/free-space-tests.c @@ -405,7 +405,7 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache) @@ -96525,7 +96698,7 @@ index c9ad97b..006bc77 100644 .use_bitmap = test_use_bitmap, }; diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c -index b6031ce..5d53523 100644 +index 43885e5..21cba1c 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -277,7 +277,7 @@ loop: @@ -96538,10 +96711,10 @@ index b6031ce..5d53523 100644 spin_lock_init(&cur_trans->delayed_refs.lock); diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c -index a2cd421..a5ce86c 100644 +index 517d0cc..a22c356 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c -@@ -172,7 +172,7 @@ static int start_log_trans(struct btrfs_trans_handle *trans, +@@ -173,7 +173,7 @@ static int start_log_trans(struct btrfs_trans_handle *trans, root->log_start_pid = current->pid; } @@ -96550,7 +96723,7 @@ index a2cd421..a5ce86c 100644 atomic_inc(&root->log_writers); if (ctx) { int index = root->log_transid % 2; -@@ -2754,7 +2754,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, +@@ -2755,7 +2755,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, wait_log_commit(root, log_transid - 1); while (1) { @@ -96559,7 +96732,7 @@ index a2cd421..a5ce86c 100644 /* when we're on an ssd, just kick the log commit out */ if (!btrfs_test_opt(root, SSD) && test_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state)) { -@@ -2763,7 +2763,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, +@@ -2764,7 +2764,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, mutex_lock(&root->log_mutex); } wait_for_writer(root); @@ -96568,7 +96741,7 @@ index a2cd421..a5ce86c 100644 break; } -@@ -2809,7 +2809,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, +@@ -2810,7 +2810,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, btrfs_init_log_ctx(&root_log_ctx); mutex_lock(&log_root_tree->log_mutex); @@ -96591,7 +96764,7 @@ index a9f1b75..0df211d 100644 static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info, diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c -index 542c043..95d562d 100644 +index bd0f45f..d28e89b 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -232,7 +232,7 @@ static struct btrfs_device *__alloc_device(void) @@ -96603,7 +96776,7 @@ index 542c043..95d562d 100644 btrfs_device_data_ordered_init(dev); INIT_RADIX_TREE(&dev->reada_zones, GFP_NOFS & ~__GFP_DIRECT_RECLAIM); INIT_RADIX_TREE(&dev->reada_extents, GFP_NOFS & ~__GFP_DIRECT_RECLAIM); -@@ -5210,7 +5210,7 @@ static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes) +@@ -5198,7 +5198,7 @@ static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes) sizeof(u64) * (total_stripes), GFP_NOFS|__GFP_NOFAIL); @@ -96612,7 +96785,7 @@ index 542c043..95d562d 100644 atomic_set(&bbio->refs, 1); return bbio; -@@ -5903,7 +5903,7 @@ static void btrfs_end_bio(struct bio *bio) +@@ -5881,7 +5881,7 @@ static void btrfs_end_bio(struct bio *bio) int is_orig_bio = 0; if (bio->bi_error) { @@ -96621,7 +96794,7 @@ index 542c043..95d562d 100644 if (bio->bi_error == -EIO || bio->bi_error == -EREMOTEIO) { unsigned int stripe_index = btrfs_io_bio(bio)->stripe_index; -@@ -5941,7 +5941,7 @@ static void btrfs_end_bio(struct bio *bio) +@@ -5919,7 +5919,7 @@ static void btrfs_end_bio(struct bio *bio) /* only send an error to the higher layers if it is * beyond the tolerance of the btrfs bio */ @@ -96630,7 +96803,7 @@ index 542c043..95d562d 100644 bio->bi_error = -EIO; } else { /* -@@ -6052,7 +6052,7 @@ static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio, +@@ -6030,7 +6030,7 @@ static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio, static void bbio_error(struct btrfs_bio *bbio, struct bio *bio, u64 logical) { @@ -96639,7 +96812,7 @@ index 542c043..95d562d 100644 if (atomic_dec_and_test(&bbio->stripes_pending)) { /* Shoud be the original bio. */ WARN_ON(bio != bbio->orig_bio); -@@ -6849,10 +6849,10 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans, +@@ -6827,10 +6827,10 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans, if (!device->dev_stats_valid || !btrfs_dev_stats_dirty(device)) continue; @@ -96653,7 +96826,7 @@ index 542c043..95d562d 100644 mutex_unlock(&fs_devices->device_list_mutex); diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h -index 7507be7..f60446c 100644 +index 1939ebd..2330751 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -148,8 +148,8 @@ struct btrfs_device { @@ -96726,10 +96899,10 @@ index 7507be7..f60446c 100644 static inline void btrfs_dev_stat_reset(struct btrfs_device *dev, diff --git a/fs/buffer.c b/fs/buffer.c -index e1632ab..f6ffc2d 100644 +index af0d9a8..2437a67 100644 --- a/fs/buffer.c +++ b/fs/buffer.c -@@ -3408,7 +3408,7 @@ void __init buffer_init(void) +@@ -3406,7 +3406,7 @@ void __init buffer_init(void) bh_cachep = kmem_cache_create("buffer_head", sizeof(struct buffer_head), 0, (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC| @@ -96759,10 +96932,21 @@ index 6af790f..ec4c1e6 100644 cache->brun_percent < 100); diff --git a/fs/cachefiles/daemon.c b/fs/cachefiles/daemon.c -index 452e98d..8af9de3 100644 +index 1ee54ff..ba89748 100644 --- a/fs/cachefiles/daemon.c +++ b/fs/cachefiles/daemon.c -@@ -196,7 +196,7 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer, +@@ -176,8 +176,8 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer, + cachefiles_has_space(cache, 0, 0); + + /* summarise */ +- f_released = atomic_xchg(&cache->f_released, 0); +- b_released = atomic_long_xchg(&cache->b_released, 0); ++ f_released = atomic_xchg_unchecked(&cache->f_released, 0); ++ b_released = atomic_long_xchg_unchecked(&cache->b_released, 0); + clear_bit(CACHEFILES_STATE_CHANGED, &cache->flags); + + n = snprintf(buffer, sizeof(buffer), +@@ -203,7 +203,7 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer, if (n > buflen) return -EMSGSIZE; @@ -96771,7 +96955,7 @@ index 452e98d..8af9de3 100644 return -EFAULT; return n; -@@ -222,7 +222,7 @@ static ssize_t cachefiles_daemon_write(struct file *file, +@@ -229,7 +229,7 @@ static ssize_t cachefiles_daemon_write(struct file *file, if (test_bit(CACHEFILES_DEAD, &cache->flags)) return -EIO; @@ -96780,7 +96964,7 @@ index 452e98d..8af9de3 100644 return -EOPNOTSUPP; /* drag the command string into the kernel so we can parse it */ -@@ -379,7 +379,7 @@ static int cachefiles_daemon_fstop(struct cachefiles_cache *cache, char *args) +@@ -386,7 +386,7 @@ static int cachefiles_daemon_fstop(struct cachefiles_cache *cache, char *args) if (args[0] != '%' || args[1] != '\0') return -EINVAL; @@ -96789,7 +96973,7 @@ index 452e98d..8af9de3 100644 return cachefiles_daemon_range_error(cache, args); cache->fstop_percent = fstop; -@@ -451,7 +451,7 @@ static int cachefiles_daemon_bstop(struct cachefiles_cache *cache, char *args) +@@ -458,7 +458,7 @@ static int cachefiles_daemon_bstop(struct cachefiles_cache *cache, char *args) if (args[0] != '%' || args[1] != '\0') return -EINVAL; @@ -96799,19 +96983,23 @@ index 452e98d..8af9de3 100644 cache->bstop_percent = bstop; diff --git a/fs/cachefiles/internal.h b/fs/cachefiles/internal.h -index 9c4b737..0bc3fd18 100644 +index 2fcde1a..5986a27 100644 --- a/fs/cachefiles/internal.h +++ b/fs/cachefiles/internal.h -@@ -65,7 +65,7 @@ struct cachefiles_cache { +@@ -65,9 +65,9 @@ struct cachefiles_cache { wait_queue_head_t daemon_pollwq; /* poll waitqueue for daemon */ struct rb_root active_nodes; /* active nodes (can't be culled) */ rwlock_t active_lock; /* lock for active_nodes */ - atomic_t gravecounter; /* graveyard uniquifier */ +- atomic_t f_released; /* number of objects released lately */ +- atomic_long_t b_released; /* number of blocks released lately */ + atomic_unchecked_t gravecounter; /* graveyard uniquifier */ ++ atomic_unchecked_t f_released; /* number of objects released lately */ ++ atomic_long_unchecked_t b_released; /* number of blocks released lately */ unsigned frun_percent; /* when to stop culling (% files) */ unsigned fcull_percent; /* when to start culling (% files) */ unsigned fstop_percent; /* when to stop allocating (% files) */ -@@ -177,19 +177,19 @@ extern int cachefiles_check_in_use(struct cachefiles_cache *cache, +@@ -181,19 +181,19 @@ extern int cachefiles_check_in_use(struct cachefiles_cache *cache, * proc.c */ #ifdef CONFIG_CACHEFILES_HISTOGRAM @@ -96837,10 +97025,22 @@ index 9c4b737..0bc3fd18 100644 #else diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c -index 1c2334c..0595c5f 100644 +index 4ae7500..fef2d10 100644 --- a/fs/cachefiles/namei.c +++ b/fs/cachefiles/namei.c -@@ -312,7 +312,7 @@ try_again: +@@ -273,9 +273,9 @@ void cachefiles_mark_object_inactive(struct cachefiles_cache *cache, + /* This object can now be culled, so we need to let the daemon know + * that there is something it can remove if it needs to. + */ +- atomic_long_add(d_backing_inode(object->dentry)->i_blocks, ++ atomic_long_add_unchecked(d_backing_inode(object->dentry)->i_blocks, + &cache->b_released); +- if (atomic_inc_return(&cache->f_released)) ++ if (atomic_inc_return_unchecked(&cache->f_released)) + cachefiles_state_changed(cache); + } + +@@ -334,7 +334,7 @@ try_again: /* first step is to make up a grave dentry in the graveyard */ sprintf(nbuffer, "%08x%08x", (uint32_t) get_seconds(), @@ -96880,10 +97080,10 @@ index eccd339..4c1d995 100644 return 0; diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c -index fd11fb2..cdc7627 100644 +index 4fb2bbc..2f8aa11 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c -@@ -214,10 +214,18 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx, +@@ -197,10 +197,18 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx, spin_unlock(&dentry->d_lock); if (emit_dentry) { @@ -96903,7 +97103,7 @@ index fd11fb2..cdc7627 100644 dentry->d_name.len, ceph_translate_ino(dentry->d_sb, d_inode(dentry)->i_ino), -@@ -259,7 +267,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx) +@@ -242,7 +250,7 @@ static int ceph_readdir(struct file *file, struct dir_context *ctx) struct ceph_fs_client *fsc = ceph_inode_to_client(inode); struct ceph_mds_client *mdsc = fsc->mdsc; unsigned frag = fpos_frag(ctx->pos); @@ -96913,10 +97113,10 @@ index fd11fb2..cdc7627 100644 u32 ftype; struct ceph_mds_reply_info_parsed *rinfo; diff --git a/fs/ceph/super.c b/fs/ceph/super.c -index ca4d5e8..16ec9c0 100644 +index f12d5e2..4d49bf1 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c -@@ -907,7 +907,7 @@ static int ceph_compare_super(struct super_block *sb, void *data) +@@ -904,7 +904,7 @@ static int ceph_compare_super(struct super_block *sb, void *data) /* * construct our own bdi so we can control readahead, etc. */ @@ -96925,8 +97125,8 @@ index ca4d5e8..16ec9c0 100644 static int ceph_register_bdi(struct super_block *sb, struct ceph_fs_client *fsc) -@@ -924,7 +924,7 @@ static int ceph_register_bdi(struct super_block *sb, - VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE; +@@ -921,7 +921,7 @@ static int ceph_register_bdi(struct super_block *sb, + VM_MAX_READAHEAD * 1024 / PAGE_SIZE; err = bdi_register(&fsc->backing_dev_info, NULL, "ceph-%ld", - atomic_long_inc_return(&bdi_seq)); @@ -96935,12 +97135,12 @@ index ca4d5e8..16ec9c0 100644 sb->s_bdi = &fsc->backing_dev_info; return err; diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c -index 50b2684..aa33a91 100644 +index 788e191..ca209d6 100644 --- a/fs/cifs/cifs_debug.c +++ b/fs/cifs/cifs_debug.c -@@ -269,8 +269,8 @@ static ssize_t cifs_stats_proc_write(struct file *file, - - if (strtobool(&c, &bv) == 0) { +@@ -265,8 +265,8 @@ static ssize_t cifs_stats_proc_write(struct file *file, + rc = kstrtobool_from_user(buffer, count, &bv); + if (rc == 0) { #ifdef CONFIG_CIFS_STATS2 - atomic_set(&totBufAllocCount, 0); - atomic_set(&totSmBufAllocCount, 0); @@ -96949,7 +97149,7 @@ index 50b2684..aa33a91 100644 #endif /* CONFIG_CIFS_STATS2 */ spin_lock(&cifs_tcp_ses_lock); list_for_each(tmp1, &cifs_tcp_ses_list) { -@@ -283,7 +283,7 @@ static ssize_t cifs_stats_proc_write(struct file *file, +@@ -279,7 +279,7 @@ static ssize_t cifs_stats_proc_write(struct file *file, tcon = list_entry(tmp3, struct cifs_tcon, tcon_list); @@ -96958,7 +97158,7 @@ index 50b2684..aa33a91 100644 if (server->ops->clear_stats) server->ops->clear_stats(tcon); } -@@ -315,8 +315,8 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v) +@@ -313,8 +313,8 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v) smBufAllocCount.counter, cifs_min_small); #ifdef CONFIG_CIFS_STATS2 seq_printf(m, "Total Large %d Small %d Allocations\n", @@ -96969,7 +97169,7 @@ index 50b2684..aa33a91 100644 #endif /* CONFIG_CIFS_STATS2 */ seq_printf(m, "Operations (MIDs): %d\n", atomic_read(&midCount)); -@@ -345,7 +345,7 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v) +@@ -343,7 +343,7 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v) if (tcon->need_reconnect) seq_puts(m, "\tDISCONNECTED "); seq_printf(m, "\nSMBs: %d", @@ -96979,10 +97179,10 @@ index 50b2684..aa33a91 100644 server->ops->print_stats(m, tcon); } diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c -index 2eea403..61eb375 100644 +index 89201564..eafd380 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c -@@ -1153,7 +1153,7 @@ cifs_init_request_bufs(void) +@@ -1151,7 +1151,7 @@ cifs_init_request_bufs(void) */ cifs_req_cachep = kmem_cache_create("cifs_request", CIFSMaxBufSize + max_hdr_size, 0, @@ -96991,7 +97191,7 @@ index 2eea403..61eb375 100644 if (cifs_req_cachep == NULL) return -ENOMEM; -@@ -1180,7 +1180,7 @@ cifs_init_request_bufs(void) +@@ -1178,7 +1178,7 @@ cifs_init_request_bufs(void) efficient to alloc 1 per page off the slab compared to 17K (5page) alloc of large cifs buffers even when page debugging is on */ cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq", @@ -97000,7 +97200,7 @@ index 2eea403..61eb375 100644 NULL); if (cifs_sm_req_cachep == NULL) { mempool_destroy(cifs_req_poolp); -@@ -1265,8 +1265,8 @@ init_cifs(void) +@@ -1263,8 +1263,8 @@ init_cifs(void) atomic_set(&bufAllocCount, 0); atomic_set(&smBufAllocCount, 0); #ifdef CONFIG_CIFS_STATS2 @@ -97012,7 +97212,7 @@ index 2eea403..61eb375 100644 atomic_set(&midCount, 0); diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h -index a25b251..b56d8c7 100644 +index f2cc0b3..f5168a7 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -843,35 +843,35 @@ struct cifs_tcon { @@ -97096,7 +97296,7 @@ index a25b251..b56d8c7 100644 GLOBAL_EXTERN atomic_t smBufAllocCount; GLOBAL_EXTERN atomic_t midCount; diff --git a/fs/cifs/file.c b/fs/cifs/file.c -index ff882ae..6a5c8e5 100644 +index c03d074..0465e40 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -1372,7 +1372,7 @@ cifs_free_llist(struct list_head *llist) @@ -97112,16 +97312,16 @@ index ff882ae..6a5c8e5 100644 index = mapping->writeback_index; /* Start from prev offset */ end = -1; } else { -- index = wbc->range_start >> PAGE_CACHE_SHIFT; -- end = wbc->range_end >> PAGE_CACHE_SHIFT; +- index = wbc->range_start >> PAGE_SHIFT; +- end = wbc->range_end >> PAGE_SHIFT; - if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) + if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) { range_whole = true; + index = 0; + end = ULONG_MAX; + } else { -+ index = wbc->range_start >> PAGE_CACHE_SHIFT; -+ end = wbc->range_end >> PAGE_CACHE_SHIFT; ++ index = wbc->range_start >> PAGE_SHIFT; ++ end = wbc->range_end >> PAGE_SHIFT; + } scanned = true; } @@ -97623,7 +97823,7 @@ index 4d24d17..4f8c09e 100644 /* diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c -index 6402eaf..113b3f7 100644 +index bd01b92..f6fcace 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -645,7 +645,7 @@ static int serial_struct_ioctl(struct file *file, @@ -97655,7 +97855,7 @@ index 6402eaf..113b3f7 100644 return -EFAULT; return ioctl_preallocate(file, p); -@@ -1639,8 +1639,8 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, +@@ -1617,8 +1617,8 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, static int __init init_sys32_ioctl_cmp(const void *p, const void *q) { unsigned int a, b; @@ -97667,10 +97867,10 @@ index 6402eaf..113b3f7 100644 return 1; if (a < b) diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c -index f419519..c00b5b1 100644 +index ea59c89..568f279 100644 --- a/fs/configfs/dir.c +++ b/fs/configfs/dir.c -@@ -1648,7 +1648,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx) +@@ -1639,7 +1639,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx) } for (p = q->next; p != &parent_sd->s_children; p = p->next) { struct configfs_dirent *next; @@ -97680,7 +97880,7 @@ index f419519..c00b5b1 100644 int len; struct inode *inode = NULL; -@@ -1657,7 +1658,12 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx) +@@ -1648,7 +1649,12 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx) continue; name = configfs_get_name(next); @@ -97810,7 +98010,7 @@ index 47c32c3..dc0e594 100644 return 0; while (nr) { diff --git a/fs/dcache.c b/fs/dcache.c -index 7566b26..660a3cc 100644 +index 44008e3..c6ec6f3 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -328,8 +328,9 @@ static inline void dentry_rcuwalk_invalidate(struct dentry *dentry) @@ -98019,7 +98219,7 @@ index 7566b26..660a3cc 100644 INIT_HLIST_BL_NODE(&dentry->d_hash); INIT_LIST_HEAD(&dentry->d_lru); INIT_LIST_HEAD(&dentry->d_subdirs); -@@ -2321,7 +2327,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name) +@@ -2245,7 +2251,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name) goto next; } @@ -98028,7 +98228,7 @@ index 7566b26..660a3cc 100644 found = dentry; spin_unlock(&dentry->d_lock); break; -@@ -2389,7 +2395,7 @@ again: +@@ -2313,7 +2319,7 @@ again: spin_lock(&dentry->d_lock); inode = dentry->d_inode; isdir = S_ISDIR(inode->i_mode); @@ -98037,7 +98237,7 @@ index 7566b26..660a3cc 100644 if (!spin_trylock(&inode->i_lock)) { spin_unlock(&dentry->d_lock); cpu_relax(); -@@ -3337,7 +3343,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry) +@@ -3336,7 +3342,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry) if (!(dentry->d_flags & DCACHE_GENOCIDE)) { dentry->d_flags |= DCACHE_GENOCIDE; @@ -98046,7 +98246,7 @@ index 7566b26..660a3cc 100644 } } return D_WALK_CONTINUE; -@@ -3445,7 +3451,8 @@ void __init vfs_caches_init_early(void) +@@ -3444,7 +3450,8 @@ void __init vfs_caches_init_early(void) void __init vfs_caches_init(void) { names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0, @@ -98107,128 +98307,11 @@ index 8580831..36166e5 100644 retval = sysfs_create_mount_point(kernel_kobj, "debug"); if (retval) return retval; -diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c -index feef8a9..f024040 100644 ---- a/fs/ecryptfs/file.c -+++ b/fs/ecryptfs/file.c -@@ -112,7 +112,6 @@ static int ecryptfs_readdir(struct file *file, struct dir_context *ctx) - .sb = inode->i_sb, - }; - lower_file = ecryptfs_file_to_lower(file); -- lower_file->f_pos = ctx->pos; - rc = iterate_dir(lower_file, &buf.ctx); - ctx->pos = buf.ctx.pos; - if (rc < 0) -@@ -223,14 +222,6 @@ static int ecryptfs_open(struct inode *inode, struct file *file) - } - ecryptfs_set_file_lower( - file, ecryptfs_inode_to_private(inode)->lower_file); -- if (d_is_dir(ecryptfs_dentry)) { -- ecryptfs_printk(KERN_DEBUG, "This is a directory\n"); -- mutex_lock(&crypt_stat->cs_mutex); -- crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); -- mutex_unlock(&crypt_stat->cs_mutex); -- rc = 0; -- goto out; -- } - rc = read_or_initialize_metadata(ecryptfs_dentry); - if (rc) - goto out_put; -@@ -247,6 +238,45 @@ out: - return rc; - } - -+/** -+ * ecryptfs_dir_open -+ * @inode: inode speciying file to open -+ * @file: Structure to return filled in -+ * -+ * Opens the file specified by inode. -+ * -+ * Returns zero on success; non-zero otherwise -+ */ -+static int ecryptfs_dir_open(struct inode *inode, struct file *file) -+{ -+ struct dentry *ecryptfs_dentry = file->f_path.dentry; -+ /* Private value of ecryptfs_dentry allocated in -+ * ecryptfs_lookup() */ -+ struct ecryptfs_file_info *file_info; -+ struct file *lower_file; -+ -+ /* Released in ecryptfs_release or end of function if failure */ -+ file_info = kmem_cache_zalloc(ecryptfs_file_info_cache, GFP_KERNEL); -+ ecryptfs_set_file_private(file, file_info); -+ if (unlikely(!file_info)) { -+ ecryptfs_printk(KERN_ERR, -+ "Error attempting to allocate memory\n"); -+ return -ENOMEM; -+ } -+ lower_file = dentry_open(ecryptfs_dentry_to_lower_path(ecryptfs_dentry), -+ file->f_flags, current_cred()); -+ if (IS_ERR(lower_file)) { -+ printk(KERN_ERR "%s: Error attempting to initialize " -+ "the lower file for the dentry with name " -+ "[%pd]; rc = [%ld]\n", __func__, -+ ecryptfs_dentry, PTR_ERR(lower_file)); -+ kmem_cache_free(ecryptfs_file_info_cache, file_info); -+ return PTR_ERR(lower_file); -+ } -+ ecryptfs_set_file_lower(file, lower_file); -+ return 0; -+} -+ - static int ecryptfs_flush(struct file *file, fl_owner_t td) - { - struct file *lower_file = ecryptfs_file_to_lower(file); -@@ -267,6 +297,19 @@ static int ecryptfs_release(struct inode *inode, struct file *file) - return 0; - } - -+static int ecryptfs_dir_release(struct inode *inode, struct file *file) -+{ -+ fput(ecryptfs_file_to_lower(file)); -+ kmem_cache_free(ecryptfs_file_info_cache, -+ ecryptfs_file_to_private(file)); -+ return 0; -+} -+ -+static loff_t ecryptfs_dir_llseek(struct file *file, loff_t offset, int whence) -+{ -+ return vfs_llseek(ecryptfs_file_to_lower(file), offset, whence); -+} -+ - static int - ecryptfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) - { -@@ -346,20 +389,16 @@ const struct file_operations ecryptfs_dir_fops = { - #ifdef CONFIG_COMPAT - .compat_ioctl = ecryptfs_compat_ioctl, - #endif -- .open = ecryptfs_open, -- .flush = ecryptfs_flush, -- .release = ecryptfs_release, -+ .open = ecryptfs_dir_open, -+ .release = ecryptfs_dir_release, - .fsync = ecryptfs_fsync, -- .fasync = ecryptfs_fasync, -- .splice_read = generic_file_splice_read, -- .llseek = default_llseek, -+ .llseek = ecryptfs_dir_llseek, - }; - - const struct file_operations ecryptfs_main_fops = { - .llseek = generic_file_llseek, - .read_iter = ecryptfs_read_update_atime, - .write_iter = generic_file_write_iter, -- .iterate = ecryptfs_readdir, - .unlocked_ioctl = ecryptfs_unlocked_ioctl, - #ifdef CONFIG_COMPAT - .compat_ioctl = ecryptfs_compat_ioctl, diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c -index 4e685ac..462fc20 100644 +index 224b49e..980370c 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c -@@ -660,7 +660,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz) +@@ -654,7 +654,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz) old_fs = get_fs(); set_fs(get_ds()); rc = d_inode(lower_dentry)->i_op->readlink(lower_dentry, @@ -98237,69 +98320,6 @@ index 4e685ac..462fc20 100644 PATH_MAX); set_fs(old_fs); if (rc < 0) -diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c -index 6bd67e2..1d71a4b 100644 ---- a/fs/ecryptfs/keystore.c -+++ b/fs/ecryptfs/keystore.c -@@ -633,8 +633,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes, - if (!s) { - printk(KERN_ERR "%s: Out of memory whilst trying to kmalloc " - "[%zd] bytes of kernel memory\n", __func__, sizeof(*s)); -- rc = -ENOMEM; -- goto out; -+ return -ENOMEM; - } - s->desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; - (*packet_size) = 0; -@@ -926,8 +925,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, - if (!s) { - printk(KERN_ERR "%s: Out of memory whilst trying to kmalloc " - "[%zd] bytes of kernel memory\n", __func__, sizeof(*s)); -- rc = -ENOMEM; -- goto out; -+ return -ENOMEM; - } - s->desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; - if (max_packet_size < ECRYPTFS_TAG_70_MIN_METADATA_SIZE) { -diff --git a/fs/ecryptfs/kthread.c b/fs/ecryptfs/kthread.c -index 866bb18..e818f5a 100644 ---- a/fs/ecryptfs/kthread.c -+++ b/fs/ecryptfs/kthread.c -@@ -25,6 +25,7 @@ - #include <linux/slab.h> - #include <linux/wait.h> - #include <linux/mount.h> -+#include <linux/file.h> - #include "ecryptfs_kernel.h" - - struct ecryptfs_open_req { -@@ -147,7 +148,7 @@ int ecryptfs_privileged_open(struct file **lower_file, - flags |= IS_RDONLY(d_inode(lower_dentry)) ? O_RDONLY : O_RDWR; - (*lower_file) = dentry_open(&req.path, flags, cred); - if (!IS_ERR(*lower_file)) -- goto out; -+ goto have_file; - if ((flags & O_ACCMODE) == O_RDONLY) { - rc = PTR_ERR((*lower_file)); - goto out; -@@ -165,8 +166,16 @@ int ecryptfs_privileged_open(struct file **lower_file, - mutex_unlock(&ecryptfs_kthread_ctl.mux); - wake_up(&ecryptfs_kthread_ctl.wait); - wait_for_completion(&req.done); -- if (IS_ERR(*lower_file)) -+ if (IS_ERR(*lower_file)) { - rc = PTR_ERR(*lower_file); -+ goto out; -+ } -+have_file: -+ if ((*lower_file)->f_op->mmap == NULL) { -+ fput(*lower_file); -+ *lower_file = NULL; -+ rc = -EMEDIUMTYPE; -+ } - out: - return rc; - } diff --git a/fs/ecryptfs/miscdev.c b/fs/ecryptfs/miscdev.c index e4141f2..d8263e8 100644 --- a/fs/ecryptfs/miscdev.c @@ -98314,13 +98334,13 @@ index e4141f2..d8263e8 100644 i += packet_length_size; if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size)) diff --git a/fs/exec.c b/fs/exec.c -index dcd4ac7..7a1a7dc 100644 +index c4010b8..07a2672 100644 --- a/fs/exec.c +++ b/fs/exec.c -@@ -56,8 +56,20 @@ - #include <linux/pipe_fs_i.h> +@@ -57,8 +57,20 @@ #include <linux/oom.h> #include <linux/compat.h> + #include <linux/vmalloc.h> +#include <linux/random.h> +#include <linux/seq_file.h> +#include <linux/coredump.h> @@ -98338,7 +98358,7 @@ index dcd4ac7..7a1a7dc 100644 #include <asm/mmu_context.h> #include <asm/tlb.h> -@@ -66,19 +78,34 @@ +@@ -67,19 +79,34 @@ #include <trace/events/sched.h> @@ -98375,7 +98395,7 @@ index dcd4ac7..7a1a7dc 100644 write_unlock(&binfmt_lock); } -@@ -87,7 +114,7 @@ EXPORT_SYMBOL(__register_binfmt); +@@ -88,7 +115,7 @@ EXPORT_SYMBOL(__register_binfmt); void unregister_binfmt(struct linux_binfmt * fmt) { write_lock(&binfmt_lock); @@ -98384,7 +98404,7 @@ index dcd4ac7..7a1a7dc 100644 write_unlock(&binfmt_lock); } -@@ -189,18 +216,10 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos, +@@ -190,22 +217,15 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos, int write) { struct page *page; @@ -98397,16 +98417,21 @@ index dcd4ac7..7a1a7dc 100644 - return NULL; - } -#endif -- ret = get_user_pages(current, bprm->mm, pos, -- 1, write, 1, &page, NULL); -- if (ret <= 0) + if (0 > expand_downwards(bprm->vma, pos)) + return NULL; -+ if (0 >= get_user_pages(current, bprm->mm, pos, 1, write, 1, &page, NULL)) + /* + * We are doing an exec(). 'current' is the process + * doing the exec and bprm->mm is the new process's mm. + */ +- ret = get_user_pages_remote(current, bprm->mm, pos, 1, write, +- 1, &page, NULL); +- if (ret <= 0) ++ if (0 >= get_user_pages_remote(current, bprm->mm, pos, 1, write, ++ 1, &page, NULL)) return NULL; if (write) { -@@ -216,6 +235,17 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos, +@@ -221,6 +241,17 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos, if (size <= ARG_MAX) return page; @@ -98424,7 +98449,7 @@ index dcd4ac7..7a1a7dc 100644 /* * Limit to 1/4-th the stack size for the argv+env strings. * This ensures that: -@@ -275,6 +305,11 @@ static int __bprm_mm_init(struct linux_binprm *bprm) +@@ -280,6 +311,11 @@ static int __bprm_mm_init(struct linux_binprm *bprm) vma->vm_end = STACK_TOP_MAX; vma->vm_start = vma->vm_end - PAGE_SIZE; vma->vm_flags = VM_SOFTDIRTY | VM_STACK_FLAGS | VM_STACK_INCOMPLETE_SETUP; @@ -98436,7 +98461,7 @@ index dcd4ac7..7a1a7dc 100644 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); INIT_LIST_HEAD(&vma->anon_vma_chain); -@@ -286,6 +321,12 @@ static int __bprm_mm_init(struct linux_binprm *bprm) +@@ -291,6 +327,12 @@ static int __bprm_mm_init(struct linux_binprm *bprm) arch_bprm_mm_init(mm, vma); up_write(&mm->mmap_sem); bprm->p = vma->vm_end - sizeof(void *); @@ -98449,7 +98474,7 @@ index dcd4ac7..7a1a7dc 100644 return 0; err: up_write(&mm->mmap_sem); -@@ -402,7 +443,7 @@ struct user_arg_ptr { +@@ -407,7 +449,7 @@ struct user_arg_ptr { } ptr; }; @@ -98458,7 +98483,7 @@ index dcd4ac7..7a1a7dc 100644 { const char __user *native; -@@ -411,14 +452,14 @@ static const char __user *get_user_arg_ptr(struct user_arg_ptr argv, int nr) +@@ -416,14 +458,14 @@ static const char __user *get_user_arg_ptr(struct user_arg_ptr argv, int nr) compat_uptr_t compat; if (get_user(compat, argv.ptr.compat + nr)) @@ -98475,7 +98500,7 @@ index dcd4ac7..7a1a7dc 100644 return native; } -@@ -437,7 +478,7 @@ static int count(struct user_arg_ptr argv, int max) +@@ -442,7 +484,7 @@ static int count(struct user_arg_ptr argv, int max) if (!p) break; @@ -98484,7 +98509,7 @@ index dcd4ac7..7a1a7dc 100644 return -EFAULT; if (i >= max) -@@ -472,7 +513,7 @@ static int copy_strings(int argc, struct user_arg_ptr argv, +@@ -477,7 +519,7 @@ static int copy_strings(int argc, struct user_arg_ptr argv, ret = -EFAULT; str = get_user_arg_ptr(argv, argc); @@ -98493,7 +98518,7 @@ index dcd4ac7..7a1a7dc 100644 goto out; len = strnlen_user(str, MAX_ARG_STRLEN); -@@ -554,7 +595,7 @@ int copy_strings_kernel(int argc, const char *const *__argv, +@@ -559,7 +601,7 @@ int copy_strings_kernel(int argc, const char *const *__argv, int r; mm_segment_t oldfs = get_fs(); struct user_arg_ptr argv = { @@ -98502,7 +98527,7 @@ index dcd4ac7..7a1a7dc 100644 }; set_fs(KERNEL_DS); -@@ -589,7 +630,8 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift) +@@ -594,7 +636,8 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift) unsigned long new_end = old_end - shift; struct mmu_gather tlb; @@ -98512,7 +98537,7 @@ index dcd4ac7..7a1a7dc 100644 /* * ensure there are no vmas between where we want to go -@@ -598,6 +640,10 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift) +@@ -603,6 +646,10 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift) if (vma != find_vma(mm, new_start)) return -EFAULT; @@ -98523,7 +98548,7 @@ index dcd4ac7..7a1a7dc 100644 /* * cover the whole range: [new_start, old_end) */ -@@ -675,20 +721,16 @@ int setup_arg_pages(struct linux_binprm *bprm, +@@ -680,20 +727,16 @@ int setup_arg_pages(struct linux_binprm *bprm, stack_base = PAGE_ALIGN(stack_top - stack_base); stack_shift = vma->vm_start - stack_base; @@ -98546,7 +98571,7 @@ index dcd4ac7..7a1a7dc 100644 #endif if (bprm->loader) -@@ -696,8 +738,28 @@ int setup_arg_pages(struct linux_binprm *bprm, +@@ -701,8 +744,28 @@ int setup_arg_pages(struct linux_binprm *bprm, bprm->exec -= stack_shift; down_write(&mm->mmap_sem); @@ -98575,7 +98600,7 @@ index dcd4ac7..7a1a7dc 100644 /* * Adjust stack execute permissions; explicitly enable for * EXSTACK_ENABLE_X, disable for EXSTACK_DISABLE_X and leave alone -@@ -716,13 +778,6 @@ int setup_arg_pages(struct linux_binprm *bprm, +@@ -721,13 +784,6 @@ int setup_arg_pages(struct linux_binprm *bprm, goto out_unlock; BUG_ON(prev != vma); @@ -98589,7 +98614,7 @@ index dcd4ac7..7a1a7dc 100644 /* mprotect_fixup is overkill to remove the temporary stack flags */ vma->vm_flags &= ~VM_STACK_INCOMPLETE_SETUP; -@@ -746,6 +801,27 @@ int setup_arg_pages(struct linux_binprm *bprm, +@@ -751,6 +807,27 @@ int setup_arg_pages(struct linux_binprm *bprm, #endif current->mm->start_stack = bprm->p; ret = expand_stack(vma, stack_base); @@ -98617,7 +98642,7 @@ index dcd4ac7..7a1a7dc 100644 if (ret) ret = -EFAULT; -@@ -761,6 +837,7 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags) +@@ -766,6 +843,7 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags) { struct file *file; int err; @@ -98625,7 +98650,7 @@ index dcd4ac7..7a1a7dc 100644 struct open_flags open_exec_flags = { .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, .acc_mode = MAY_EXEC, -@@ -786,12 +863,22 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags) +@@ -791,12 +869,22 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags) if (path_noexec(&file->f_path)) goto exit; @@ -98649,7 +98674,7 @@ index dcd4ac7..7a1a7dc 100644 out: return file; -@@ -821,10 +908,13 @@ int kernel_read(struct file *file, loff_t offset, +@@ -826,10 +914,13 @@ int kernel_read(struct file *file, loff_t offset, loff_t pos = offset; int result; @@ -98664,7 +98689,7 @@ index dcd4ac7..7a1a7dc 100644 set_fs(old_fs); return result; } -@@ -1277,7 +1367,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm) +@@ -1373,7 +1464,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm) } rcu_read_unlock(); @@ -98673,7 +98698,7 @@ index dcd4ac7..7a1a7dc 100644 bprm->unsafe |= LSM_UNSAFE_SHARE; else p->fs->in_exec = 1; -@@ -1478,6 +1568,31 @@ static int exec_binprm(struct linux_binprm *bprm) +@@ -1574,6 +1665,31 @@ static int exec_binprm(struct linux_binprm *bprm) return ret; } @@ -98705,7 +98730,7 @@ index dcd4ac7..7a1a7dc 100644 /* * sys_execve() executes a new program. */ -@@ -1486,6 +1601,11 @@ static int do_execveat_common(int fd, struct filename *filename, +@@ -1582,6 +1698,11 @@ static int do_execveat_common(int fd, struct filename *filename, struct user_arg_ptr envp, int flags) { @@ -98717,7 +98742,7 @@ index dcd4ac7..7a1a7dc 100644 char *pathbuf = NULL; struct linux_binprm *bprm; struct file *file; -@@ -1495,6 +1615,8 @@ static int do_execveat_common(int fd, struct filename *filename, +@@ -1591,6 +1712,8 @@ static int do_execveat_common(int fd, struct filename *filename, if (IS_ERR(filename)) return PTR_ERR(filename); @@ -98726,7 +98751,7 @@ index dcd4ac7..7a1a7dc 100644 /* * We move the actual failure in case of RLIMIT_NPROC excess from * set*uid() to execve() because too many poorly written programs -@@ -1558,6 +1680,11 @@ static int do_execveat_common(int fd, struct filename *filename, +@@ -1654,6 +1777,11 @@ static int do_execveat_common(int fd, struct filename *filename, } bprm->interp = bprm->filename; @@ -98738,7 +98763,7 @@ index dcd4ac7..7a1a7dc 100644 retval = bprm_mm_init(bprm); if (retval) goto out_unmark; -@@ -1574,24 +1701,70 @@ static int do_execveat_common(int fd, struct filename *filename, +@@ -1670,24 +1798,70 @@ static int do_execveat_common(int fd, struct filename *filename, if (retval < 0) goto out; @@ -98813,7 +98838,7 @@ index dcd4ac7..7a1a7dc 100644 current->fs->in_exec = 0; current->in_execve = 0; acct_update_integrals(current); -@@ -1603,6 +1776,14 @@ static int do_execveat_common(int fd, struct filename *filename, +@@ -1699,6 +1873,14 @@ static int do_execveat_common(int fd, struct filename *filename, put_files_struct(displaced); return retval; @@ -98828,7 +98853,7 @@ index dcd4ac7..7a1a7dc 100644 out: if (bprm->mm) { acct_arg_size(bprm, 0); -@@ -1749,3 +1930,316 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd, +@@ -1845,3 +2027,316 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd, argv, envp, flags); } #endif @@ -99146,7 +99171,7 @@ index dcd4ac7..7a1a7dc 100644 +EXPORT_SYMBOL(report_size_overflow); +#endif diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c -index 9eaf595..46a4777a 100644 +index 49e1bd0..41978bb 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c @@ -470,6 +470,11 @@ fail: @@ -99188,10 +99213,10 @@ index 9f9992b..8b59411 100644 } return 1; diff --git a/fs/ext2/super.c b/fs/ext2/super.c -index 2a18841..d2398be 100644 +index b78caf2..b568bde 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c -@@ -270,10 +270,8 @@ static int ext2_show_options(struct seq_file *seq, struct dentry *root) +@@ -273,10 +273,8 @@ static int ext2_show_options(struct seq_file *seq, struct dentry *root) #ifdef CONFIG_EXT2_FS_XATTR if (test_opt(sb, XATTR_USER)) seq_puts(seq, ",user_xattr"); @@ -99203,7 +99228,7 @@ index 2a18841..d2398be 100644 #endif #ifdef CONFIG_EXT2_FS_POSIX_ACL -@@ -861,8 +859,8 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent) +@@ -864,8 +862,8 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent) if (def_mount_opts & EXT2_DEFM_UID16) set_opt(sbi->s_mount_opt, NO_UID32); #ifdef CONFIG_EXT2_FS_XATTR @@ -99215,18 +99240,18 @@ index 2a18841..d2398be 100644 #ifdef CONFIG_EXT2_FS_POSIX_ACL if (def_mount_opts & EXT2_DEFM_ACL) diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c -index f57a7ab..b41d596 100644 +index 1a5e3bf..3229306 100644 --- a/fs/ext2/xattr.c +++ b/fs/ext2/xattr.c -@@ -245,7 +245,7 @@ ext2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size) +@@ -244,7 +244,7 @@ ext2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size) struct buffer_head *bh = NULL; struct ext2_xattr_entry *entry; char *end; - size_t rest = buffer_size; + size_t rest = buffer_size, total_size = 0; int error; + struct mb_cache *ext2_mb_cache = EXT2_SB(inode->i_sb)->s_mb_cache; - ea_idebug(inode, "buffer=%p, buffer_size=%ld", @@ -307,9 +307,10 @@ bad_block: ext2_error(inode->i_sb, "ext2_xattr_list", *buffer++ = 0; } @@ -99255,10 +99280,10 @@ index fe1f50f..3f4c870 100644 if (free_clusters >= (nclusters + dirty_clusters + resv_clusters)) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h -index b213449..39f6a05 100644 +index 349afeb..904541a 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h -@@ -1434,19 +1434,19 @@ struct ext4_sb_info { +@@ -1441,19 +1441,19 @@ struct ext4_sb_info { unsigned long s_mb_last_start; /* stats for buddy allocator */ @@ -99289,7 +99314,7 @@ index b213449..39f6a05 100644 /* locality groups */ diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c -index 3753ceb..bddcd49 100644 +index 95bf467..d9294fc 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -863,7 +863,7 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block, @@ -99302,10 +99327,10 @@ index 3753ceb..bddcd49 100644 eh = ext_inode_hdr(inode); diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c -index da07228..6845593 100644 +index 9d26fa2..169a7b1 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c -@@ -1914,7 +1914,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac, +@@ -1921,7 +1921,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac, BUG_ON(ac->ac_b_ex.fe_len != ac->ac_g_ex.fe_len); if (EXT4_SB(sb)->s_mb_stats) @@ -99314,7 +99339,7 @@ index da07228..6845593 100644 break; } -@@ -2237,7 +2237,7 @@ repeat: +@@ -2244,7 +2244,7 @@ repeat: ac->ac_status = AC_STATUS_CONTINUE; ac->ac_flags |= EXT4_MB_HINT_FIRST; cr = 3; @@ -99323,7 +99348,7 @@ index da07228..6845593 100644 goto repeat; } } -@@ -2736,25 +2736,25 @@ int ext4_mb_release(struct super_block *sb) +@@ -2743,25 +2743,25 @@ int ext4_mb_release(struct super_block *sb) if (sbi->s_mb_stats) { ext4_msg(sb, KERN_INFO, "mballoc: %u blocks %u reqs (%u success)", @@ -99359,7 +99384,7 @@ index da07228..6845593 100644 } free_percpu(sbi->s_locality_groups); -@@ -3212,16 +3212,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) +@@ -3219,16 +3219,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb); if (sbi->s_mb_stats && ac->ac_g_ex.fe_len > 1) { @@ -99382,7 +99407,7 @@ index da07228..6845593 100644 } if (ac->ac_op == EXT4_MB_HISTORY_ALLOC) -@@ -3648,7 +3648,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) +@@ -3655,7 +3655,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) trace_ext4_mb_new_inode_pa(ac, pa); ext4_mb_use_inode_pa(ac, pa); @@ -99391,7 +99416,7 @@ index da07228..6845593 100644 ei = EXT4_I(ac->ac_inode); grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); -@@ -3708,7 +3708,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) +@@ -3715,7 +3715,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) trace_ext4_mb_new_group_pa(ac, pa); ext4_mb_use_group_pa(ac, pa); @@ -99400,7 +99425,7 @@ index da07228..6845593 100644 grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); lg = ac->ac_lg; -@@ -3797,7 +3797,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, +@@ -3804,7 +3804,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, * from the bitmap and continue. */ } @@ -99409,7 +99434,7 @@ index da07228..6845593 100644 return err; } -@@ -3815,7 +3815,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, +@@ -3822,7 +3822,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit); BUG_ON(group != e4b->bd_group && pa->pa_len != 0); mb_free_blocks(pa->pa_inode, e4b, bit, pa->pa_len); @@ -99461,7 +99486,7 @@ index 34038e3..322fe62 100644 err = ext4_handle_dirty_metadata(handle, NULL, bh); if (unlikely(err)) diff --git a/fs/ext4/super.c b/fs/ext4/super.c -index a76ca67..adbf949 100644 +index 304c712..2c8f9bd 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1306,7 +1306,7 @@ static ext4_fsblk_t get_sb_block(void **data) @@ -99487,10 +99512,10 @@ index 1420a3c..e87523c 100644 static ssize_t session_write_kbytes_show(struct ext4_attr *a, struct ext4_sb_info *sbi, char *buf) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c -index a95151e..ba59ee9 100644 +index e79bd32..769b6b3 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c -@@ -396,7 +396,7 @@ static int +@@ -417,7 +417,7 @@ static int ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry, char *buffer, size_t buffer_size) { @@ -99499,7 +99524,7 @@ index a95151e..ba59ee9 100644 for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) { const struct xattr_handler *handler = -@@ -417,9 +417,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry, +@@ -438,9 +438,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry, *buffer++ = 0; } rest -= size; @@ -99713,7 +99738,7 @@ index 240aeb1..b7dad4f 100644 #define vii_mode vdi_mode #define vii_uid vdi_uid diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c -index fee81e8..bfeb3ca 100644 +index 592cea5..a93fb5c 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -880,9 +880,9 @@ fs_initcall(cgroup_writeback_init); @@ -100515,7 +100540,7 @@ index de67745..6a3a9b6 100644 ASSERTCMP(atomic_read(&op->usage), ==, 0); ASSERTCMP(op->state, ==, FSCACHE_OP_ST_DEAD); diff --git a/fs/fscache/page.c b/fs/fscache/page.c -index 6b35fc4..11f393e 100644 +index 3078b67..0c0e3c6 100644 --- a/fs/fscache/page.c +++ b/fs/fscache/page.c @@ -74,7 +74,7 @@ try_again: @@ -101322,7 +101347,7 @@ index c5b6b71..527e347 100644 cuse_class = class_create(THIS_MODULE, "cuse"); if (IS_ERR(cuse_class)) diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c -index ebb5e37..beae05b 100644 +index cbece12..9b01171 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -1390,7 +1390,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos, @@ -101344,7 +101369,7 @@ index ebb5e37..beae05b 100644 } diff --git a/fs/fuse/file.c b/fs/fuse/file.c -index 416108b..c4b3802 100644 +index dcad5e2..562be95 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -825,9 +825,9 @@ struct fuse_fill_data { @@ -101360,7 +101385,7 @@ index 416108b..c4b3802 100644 struct inode *inode = data->inode; struct fuse_conn *fc = get_fuse_conn(inode); diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c -index 4d69d5c..3093c70 100644 +index 1ce6766..16c31cb 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -29,7 +29,7 @@ static struct kmem_cache *fuse_inode_cachep; @@ -101382,7 +101407,7 @@ index 4d69d5c..3093c70 100644 int rv; diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c -index 93f0746..16e462a 100644 +index 1bbbee9..d085f3f 100644 --- a/fs/gfs2/aops.c +++ b/fs/gfs2/aops.c @@ -492,7 +492,7 @@ static int stuffed_readpage(struct gfs2_inode *ip, struct page *page) @@ -101395,7 +101420,7 @@ index 93f0746..16e462a 100644 struct gfs2_inode *ip = GFS2_I(page->mapping->host); struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host); diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c -index c9384f9..b89afe1 100644 +index 208efc7..a6de70f 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -775,7 +775,7 @@ static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len, @@ -101408,7 +101433,7 @@ index c9384f9..b89afe1 100644 for (tmp = max_data; tmp > sdp->sd_diptrs;) { tmp = DIV_ROUND_UP(tmp, sdp->sd_inptrs); diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c -index a4ff7b5..3bdde1a 100644 +index 6539131..09e2dce 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -324,9 +324,9 @@ static void state_change(struct gfs2_glock *gl, unsigned int new_state) @@ -101435,7 +101460,7 @@ index a4ff7b5..3bdde1a 100644 return; out_unlock: -@@ -683,7 +683,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number, +@@ -690,7 +690,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number, gl->gl_node.next = NULL; gl->gl_flags = 0; gl->gl_name = name; @@ -101444,7 +101469,7 @@ index a4ff7b5..3bdde1a 100644 gl->gl_state = LM_ST_UNLOCKED; gl->gl_target = LM_ST_UNLOCKED; gl->gl_demote_state = LM_ST_EXCLUSIVE; -@@ -972,9 +972,9 @@ int gfs2_glock_nq(struct gfs2_holder *gh) +@@ -979,9 +979,9 @@ int gfs2_glock_nq(struct gfs2_holder *gh) if (unlikely((LM_FLAG_NOEXP & gh->gh_flags) && test_and_clear_bit(GLF_FROZEN, &gl->gl_flags))) { set_bit(GLF_REPLY_PENDING, &gl->gl_flags); @@ -101456,7 +101481,7 @@ index a4ff7b5..3bdde1a 100644 } run_queue(gl, 1); spin_unlock(&gl->gl_lockref.lock); -@@ -1278,7 +1278,7 @@ void gfs2_glock_complete(struct gfs2_glock *gl, int ret) +@@ -1286,7 +1286,7 @@ void gfs2_glock_complete(struct gfs2_glock *gl, int ret) } } @@ -101465,7 +101490,7 @@ index a4ff7b5..3bdde1a 100644 set_bit(GLF_REPLY_PENDING, &gl->gl_flags); spin_unlock(&gl->gl_lockref.lock); -@@ -1337,12 +1337,12 @@ add_back_to_lru: +@@ -1345,12 +1345,12 @@ add_back_to_lru: goto add_back_to_lru; } clear_bit(GLF_LRU, &gl->gl_flags); @@ -101480,7 +101505,7 @@ index a4ff7b5..3bdde1a 100644 spin_unlock(&gl->gl_lockref.lock); cond_resched_lock(&lru_lock); } -@@ -1669,7 +1669,7 @@ void gfs2_dump_glock(struct seq_file *seq, const struct gfs2_glock *gl) +@@ -1677,7 +1677,7 @@ void gfs2_dump_glock(struct seq_file *seq, const struct gfs2_glock *gl) state2str(gl->gl_demote_state), dtime, atomic_read(&gl->gl_ail_count), atomic_read(&gl->gl_revokes), @@ -101506,7 +101531,7 @@ index 437fd73..4f85148 100644 } diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c -index a398913..9034327 100644 +index ce7d69a..0d6bf38 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -154,7 +154,7 @@ static enum lru_status gfs2_qd_isolate(struct list_head *item, @@ -101537,7 +101562,7 @@ index a398913..9034327 100644 spin_unlock(&qd->qd_lockref.lock); diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c -index e1f465a..ba6b5b8 100644 +index 4ea71eb..19effa7 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -174,6 +174,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr, @@ -101617,10 +101642,10 @@ index 69b8b52..9b58c2d 100644 put_cpu_var(last_ino); return res; diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c -index 36345fe..f2d7dac 100644 +index 2ad98d6..00f8858 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c -@@ -1096,7 +1096,7 @@ restart_loop: +@@ -1073,7 +1073,7 @@ restart_loop: */ stats.ts_tid = commit_transaction->t_tid; stats.run.rs_handle_count = @@ -101630,7 +101655,7 @@ index 36345fe..f2d7dac 100644 commit_transaction->t_tid, &stats.run); stats.ts_requested = (commit_transaction->t_requested) ? 1 : 0; diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c -index 081dff0..9f91ee0 100644 +index 67c1038..adcb8e3 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c @@ -91,7 +91,7 @@ jbd2_get_transaction(journal_t *journal, transaction_t *transaction) @@ -101666,10 +101691,10 @@ index 4a6cf28..d3a29d3 100644 jffs2_prealloc_raw_node_refs(c, jeb, 1); diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c -index cad86ba..7de4d99 100644 +index 0e62dec..2beac6f 100644 --- a/fs/jffs2/file.c +++ b/fs/jffs2/file.c -@@ -111,8 +111,9 @@ static int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg) +@@ -112,8 +112,9 @@ static int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg) return ret; } @@ -101680,7 +101705,7 @@ index cad86ba..7de4d99 100644 int ret = jffs2_do_readpage_nolock(inode, pg); unlock_page(pg); return ret; -@@ -125,7 +126,7 @@ static int jffs2_readpage (struct file *filp, struct page *pg) +@@ -126,7 +127,7 @@ static int jffs2_readpage (struct file *filp, struct page *pg) int ret; mutex_lock(&f->sem); @@ -101690,13 +101715,13 @@ index cad86ba..7de4d99 100644 return ret; } diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c -index bead25a..5186b1c 100644 +index ae2ebb2..39becae 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c @@ -686,7 +686,7 @@ unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c, struct page *pg; - pg = read_cache_page(inode->i_mapping, offset >> PAGE_CACHE_SHIFT, + pg = read_cache_page(inode->i_mapping, offset >> PAGE_SHIFT, - (void *)jffs2_do_readpage_unlock, inode); + jffs2_do_readpage_unlock, inode); if (IS_ERR(pg)) @@ -101716,7 +101741,7 @@ index 824e61e..2d686a6 100644 /* ioctl.c */ long jffs2_ioctl(struct file *, unsigned int, unsigned long); diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c -index 5a3da3f..de40276 100644 +index b25d28a..7934a69 100644 --- a/fs/jffs2/wbuf.c +++ b/fs/jffs2/wbuf.c @@ -1023,7 +1023,8 @@ static const struct jffs2_unknown_node oob_cleanmarker = @@ -101730,7 +101755,7 @@ index 5a3da3f..de40276 100644 /* diff --git a/fs/jfs/super.c b/fs/jfs/super.c -index 4f5d85b..de5d4d8 100644 +index 78d5991..73ba3e4 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c @@ -898,7 +898,7 @@ static int __init init_jfs_fs(void) @@ -101743,10 +101768,10 @@ index 4f5d85b..de5d4d8 100644 if (jfs_inode_cachep == NULL) return -ENOMEM; diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c -index 996b774..8358861 100644 +index 37f9678..e2528dc 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c -@@ -205,7 +205,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn) +@@ -334,7 +334,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn) * * Returns 31 bit hash of ns + name (so it fits in an off_t ) */ @@ -101755,7 +101780,7 @@ index 996b774..8358861 100644 { unsigned long hash = init_name_hash(); unsigned int len = strlen(name); -@@ -935,6 +935,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry, +@@ -1073,6 +1073,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry, ret = scops->mkdir(parent, dentry->d_name.name, mode); kernfs_put_active(parent); @@ -101852,7 +101877,7 @@ index 7247252..c73808e 100644 } diff --git a/fs/libfs.c b/fs/libfs.c -index 0ca80b2..4001920 100644 +index f3fa82c..b316fbf 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -155,6 +155,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) @@ -102941,7 +102966,7 @@ index dfa4789..be443bd 100644 return xdr_ressize_check(rqstp, p); } diff --git a/fs/logfs/dev_bdev.c b/fs/logfs/dev_bdev.c -index a709d80..17ab4e7 100644 +index cc26f8f..0adc94f 100644 --- a/fs/logfs/dev_bdev.c +++ b/fs/logfs/dev_bdev.c @@ -33,9 +33,8 @@ static int sync_request(struct page *page, struct block_device *bdev, int rw) @@ -102994,7 +103019,7 @@ index a709d80..17ab4e7 100644 .erase = bdev_erase, .can_write_buf = bdev_can_write_buf, diff --git a/fs/logfs/dev_mtd.c b/fs/logfs/dev_mtd.c -index 9c50144..c3740b7 100644 +index b76a62b..317c6ff 100644 --- a/fs/logfs/dev_mtd.c +++ b/fs/logfs/dev_mtd.c @@ -122,9 +122,8 @@ static void logfs_mtd_sync(struct super_block *sb) @@ -103044,7 +103069,7 @@ index 9c50144..c3740b7 100644 .erase = logfs_mtd_erase, .can_write_buf = logfs_mtd_can_write_buf, diff --git a/fs/logfs/dir.c b/fs/logfs/dir.c -index 542468e..8b1e52a 100644 +index ddbed2b..4267e7c 100644 --- a/fs/logfs/dir.c +++ b/fs/logfs/dir.c @@ -174,7 +174,7 @@ static struct page *logfs_get_dd_page(struct inode *dir, struct dentry *dentry) @@ -103089,7 +103114,7 @@ index 27d040e..8959149 100644 int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); int logfs_check_ds(struct logfs_disk_super *ds); diff --git a/fs/logfs/readwrite.c b/fs/logfs/readwrite.c -index 20973c9..9ee7c57 100644 +index 3fb8c6d..83a5133 100644 --- a/fs/logfs/readwrite.c +++ b/fs/logfs/readwrite.c @@ -1963,7 +1963,7 @@ int logfs_read_inode(struct inode *inode) @@ -103102,7 +103127,7 @@ index 20973c9..9ee7c57 100644 return PTR_ERR(page); diff --git a/fs/logfs/segment.c b/fs/logfs/segment.c -index d270e4b..aa1fb41 100644 +index 1efd605..d712407b 100644 --- a/fs/logfs/segment.c +++ b/fs/logfs/segment.c @@ -54,7 +54,7 @@ static struct page *get_mapping_page(struct super_block *sb, pgoff_t index, @@ -103115,7 +103140,7 @@ index d270e4b..aa1fb41 100644 BUG_ON(mapping_gfp_constraint(mapping, __GFP_FS)); diff --git a/fs/logfs/super.c b/fs/logfs/super.c -index 5436029..4597ec8 100644 +index 5751082..7619dac 100644 --- a/fs/logfs/super.c +++ b/fs/logfs/super.c @@ -18,39 +18,6 @@ @@ -103152,7 +103177,7 @@ index 5436029..4597ec8 100644 - if (page == emergency_page) - mutex_unlock(&emergency_mutex); - else -- page_cache_release(page); +- put_page(page); -} - static void dump_segfile(struct super_block *sb) @@ -103208,7 +103233,7 @@ index 14db05d..687f6d8 100644 #define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */ diff --git a/fs/namei.c b/fs/namei.c -index 7824bfb..bddd8a4 100644 +index 30145f8..ddb7af4 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -336,17 +336,32 @@ int generic_permission(struct inode *inode, int mask) @@ -103377,7 +103402,7 @@ index 7824bfb..bddd8a4 100644 nd->last_type = LAST_BIND; res = inode->i_link; if (!res) { -@@ -1690,6 +1760,23 @@ static int pick_link(struct nameidata *nd, struct path *link, +@@ -1683,6 +1753,23 @@ static int pick_link(struct nameidata *nd, struct path *link, } } @@ -103401,7 +103426,7 @@ index 7824bfb..bddd8a4 100644 last = nd->stack + nd->depth++; last->link = *link; clear_delayed_call(&last->done); -@@ -1834,7 +1921,7 @@ EXPORT_SYMBOL(full_name_hash); +@@ -1830,7 +1917,7 @@ EXPORT_SYMBOL(full_name_hash); static inline u64 hash_name(const char *name) { unsigned long a, b, adata, bdata, mask, hash, len; @@ -103410,7 +103435,7 @@ index 7824bfb..bddd8a4 100644 hash = a = 0; len = -sizeof(unsigned long); -@@ -2002,6 +2089,10 @@ static const char *path_init(struct nameidata *nd, unsigned flags) +@@ -1998,6 +2085,10 @@ static const char *path_init(struct nameidata *nd, unsigned flags) nd->last_type = LAST_ROOT; /* if there are only slashes... */ nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT; nd->depth = 0; @@ -103421,7 +103446,7 @@ index 7824bfb..bddd8a4 100644 if (flags & LOOKUP_ROOT) { struct dentry *root = nd->root.dentry; struct inode *inode = root->d_inode; -@@ -2133,6 +2224,14 @@ static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path +@@ -2129,6 +2220,14 @@ static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path if (!err) err = complete_walk(nd); @@ -103436,7 +103461,7 @@ index 7824bfb..bddd8a4 100644 if (!err && nd->flags & LOOKUP_DIRECTORY) if (!d_can_lookup(nd->path.dentry)) err = -ENOTDIR; -@@ -2181,6 +2280,14 @@ static int path_parentat(struct nameidata *nd, unsigned flags, +@@ -2177,6 +2276,14 @@ static int path_parentat(struct nameidata *nd, unsigned flags, err = link_path_walk(s, nd); if (!err) err = complete_walk(nd); @@ -103451,7 +103476,7 @@ index 7824bfb..bddd8a4 100644 if (!err) { *parent = nd->path; nd->path.mnt = NULL; -@@ -2779,6 +2886,13 @@ static int may_open(struct path *path, int acc_mode, int flag) +@@ -2776,6 +2883,13 @@ static int may_open(struct path *path, int acc_mode, int flag) if (flag & O_NOATIME && !inode_owner_or_capable(inode)) return -EPERM; @@ -103465,7 +103490,7 @@ index 7824bfb..bddd8a4 100644 return 0; } -@@ -3033,6 +3147,21 @@ static int lookup_open(struct nameidata *nd, struct path *path, +@@ -3036,6 +3150,21 @@ static int lookup_open(struct nameidata *nd, struct path *path, /* Negative dentry, just create the file */ if (!dentry->d_inode && (op->open_flag & O_CREAT)) { umode_t mode = op->mode; @@ -103487,7 +103512,7 @@ index 7824bfb..bddd8a4 100644 if (!IS_POSIXACL(dir->d_inode)) mode &= ~current_umask(); /* -@@ -3054,6 +3183,8 @@ static int lookup_open(struct nameidata *nd, struct path *path, +@@ -3057,6 +3186,8 @@ static int lookup_open(struct nameidata *nd, struct path *path, nd->flags & LOOKUP_EXCL); if (error) goto out_dput; @@ -103496,7 +103521,7 @@ index 7824bfb..bddd8a4 100644 } out_no_open: path->dentry = dentry; -@@ -3159,11 +3290,24 @@ retry_lookup: +@@ -3163,6 +3294,11 @@ retry_lookup: goto finish_open_created; } @@ -103506,23 +103531,23 @@ index 7824bfb..bddd8a4 100644 + } + /* - * create/update audit record if it already exists. - */ -- if (d_is_positive(path.dentry)) -+ if (d_is_positive(path.dentry)) { -+ /* only check if O_CREAT is specified, all other checks need to go -+ into may_open */ -+ if (gr_handle_fifo(path.dentry, path.mnt, dir, open_flag, acc_mode)) { -+ path_to_nameidata(&path, nd); -+ return -EACCES; -+ } -+ - audit_inode(nd->name, path.dentry, 0); -+ } + * If atomic_open() acquired write access it is dropped now due to + * possible mount and symlink following (this might be optimized away if +@@ -3178,6 +3314,13 @@ retry_lookup: + return -ENOENT; + } ++ /* only check if O_CREAT is specified, all other checks need to go ++ into may_open */ ++ if (gr_handle_fifo(path.dentry, path.mnt, dir, open_flag, acc_mode)) { ++ path_to_nameidata(&path, nd); ++ return -EACCES; ++ } ++ /* - * If atomic_open() acquired write access it is dropped now due to -@@ -3216,6 +3360,21 @@ finish_open: + * create/update audit record if it already exists. + */ +@@ -3219,6 +3362,21 @@ finish_open: path_put(&save_parent); return error; } @@ -103544,7 +103569,7 @@ index 7824bfb..bddd8a4 100644 audit_inode(nd->name, nd->path.dentry, 0); if (unlikely(d_is_symlink(nd->path.dentry)) && !(open_flag & O_PATH)) { error = -ELOOP; -@@ -3491,9 +3650,11 @@ static struct dentry *filename_create(int dfd, struct filename *name, +@@ -3494,9 +3652,11 @@ static struct dentry *filename_create(int dfd, struct filename *name, goto unlock; error = -EEXIST; @@ -103558,7 +103583,7 @@ index 7824bfb..bddd8a4 100644 /* * Special case - lookup gave negative, but... we had foo/bar/ * From the vfs_mknod() POV we just have a negative dentry - -@@ -3547,6 +3708,20 @@ inline struct dentry *user_path_create(int dfd, const char __user *pathname, +@@ -3550,6 +3710,20 @@ inline struct dentry *user_path_create(int dfd, const char __user *pathname, } EXPORT_SYMBOL(user_path_create); @@ -103579,7 +103604,7 @@ index 7824bfb..bddd8a4 100644 int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) { int error = may_create(dir, dentry); -@@ -3610,6 +3785,17 @@ retry: +@@ -3613,6 +3787,17 @@ retry: if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); @@ -103597,7 +103622,7 @@ index 7824bfb..bddd8a4 100644 error = security_path_mknod(&path, dentry, mode, dev); if (error) goto out; -@@ -3625,6 +3811,8 @@ retry: +@@ -3628,6 +3813,8 @@ retry: error = vfs_mknod(path.dentry->d_inode,dentry,mode,0); break; } @@ -103606,7 +103631,7 @@ index 7824bfb..bddd8a4 100644 out: done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { -@@ -3679,9 +3867,16 @@ retry: +@@ -3682,9 +3869,16 @@ retry: if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); @@ -103623,16 +103648,7 @@ index 7824bfb..bddd8a4 100644 done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; -@@ -3714,7 +3909,7 @@ void dentry_unhash(struct dentry *dentry) - { - shrink_dcache_parent(dentry); - spin_lock(&dentry->d_lock); -- if (dentry->d_lockref.count == 1) -+ if (__lockref_read(&dentry->d_lockref) == 1) - __d_drop(dentry); - spin_unlock(&dentry->d_lock); - } -@@ -3767,6 +3962,8 @@ static long do_rmdir(int dfd, const char __user *pathname) +@@ -3745,6 +3939,8 @@ static long do_rmdir(int dfd, const char __user *pathname) struct path path; struct qstr last; int type; @@ -103641,7 +103657,7 @@ index 7824bfb..bddd8a4 100644 unsigned int lookup_flags = 0; retry: name = user_path_parent(dfd, pathname, -@@ -3799,10 +3996,20 @@ retry: +@@ -3777,10 +3973,20 @@ retry: error = -ENOENT; goto exit3; } @@ -103662,7 +103678,7 @@ index 7824bfb..bddd8a4 100644 exit3: dput(dentry); exit2: -@@ -3897,6 +4104,8 @@ static long do_unlinkat(int dfd, const char __user *pathname) +@@ -3875,6 +4081,8 @@ static long do_unlinkat(int dfd, const char __user *pathname) int type; struct inode *inode = NULL; struct inode *delegated_inode = NULL; @@ -103671,7 +103687,7 @@ index 7824bfb..bddd8a4 100644 unsigned int lookup_flags = 0; retry: name = user_path_parent(dfd, pathname, -@@ -3923,10 +4132,21 @@ retry_deleg: +@@ -3901,10 +4109,21 @@ retry_deleg: if (d_is_negative(dentry)) goto slashes; ihold(inode); @@ -103693,7 +103709,7 @@ index 7824bfb..bddd8a4 100644 exit2: dput(dentry); } -@@ -4015,9 +4235,17 @@ retry: +@@ -3993,9 +4212,17 @@ retry: if (IS_ERR(dentry)) goto out_putname; @@ -103711,7 +103727,7 @@ index 7824bfb..bddd8a4 100644 done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; -@@ -4121,6 +4349,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, +@@ -4099,6 +4326,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, struct dentry *new_dentry; struct path old_path, new_path; struct inode *delegated_inode = NULL; @@ -103719,7 +103735,7 @@ index 7824bfb..bddd8a4 100644 int how = 0; int error; -@@ -4144,7 +4373,7 @@ retry: +@@ -4122,7 +4350,7 @@ retry: if (error) return error; @@ -103728,7 +103744,7 @@ index 7824bfb..bddd8a4 100644 (how & LOOKUP_REVAL)); error = PTR_ERR(new_dentry); if (IS_ERR(new_dentry)) -@@ -4156,11 +4385,26 @@ retry: +@@ -4134,11 +4362,26 @@ retry: error = may_linkat(&old_path); if (unlikely(error)) goto out_dput; @@ -103755,7 +103771,7 @@ index 7824bfb..bddd8a4 100644 done_path_create(&new_path, new_dentry); if (delegated_inode) { error = break_deleg_wait(&delegated_inode); -@@ -4479,6 +4723,20 @@ retry_deleg: +@@ -4457,6 +4700,20 @@ retry_deleg: if (new_dentry == trap) goto exit5; @@ -103776,7 +103792,7 @@ index 7824bfb..bddd8a4 100644 error = security_path_rename(&old_path, old_dentry, &new_path, new_dentry, flags); if (error) -@@ -4486,6 +4744,9 @@ retry_deleg: +@@ -4464,6 +4721,9 @@ retry_deleg: error = vfs_rename(old_path.dentry->d_inode, old_dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode, flags); @@ -103786,7 +103802,7 @@ index 7824bfb..bddd8a4 100644 exit5: dput(new_dentry); exit4: -@@ -4542,14 +4803,24 @@ EXPORT_SYMBOL(vfs_whiteout); +@@ -4520,14 +4780,24 @@ EXPORT_SYMBOL(vfs_whiteout); int readlink_copy(char __user *buffer, int buflen, const char *link) { @@ -103941,10 +103957,10 @@ index 4fb1691..3077a5c 100644 get_mnt_ns(mnt_ns); diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h -index ff8195b..d82456d 100644 +index 5fe1cec..d0f4ac0 100644 --- a/fs/nfs/callback.h +++ b/fs/nfs/callback.h -@@ -113,8 +113,8 @@ struct cb_sequenceres { +@@ -114,8 +114,8 @@ struct cb_sequenceres { uint32_t csr_target_highestslotid; }; @@ -103955,7 +103971,7 @@ index ff8195b..d82456d 100644 struct cb_process_state *cps); #define RCA4_TYPE_MASK_RDATA_DLG 0 -@@ -133,14 +133,14 @@ struct cb_recallanyargs { +@@ -134,14 +134,14 @@ struct cb_recallanyargs { uint32_t craa_type_mask; }; @@ -103972,7 +103988,7 @@ index ff8195b..d82456d 100644 void *dummy, struct cb_process_state *cps); -@@ -159,7 +159,7 @@ struct cb_layoutrecallargs { +@@ -160,7 +160,7 @@ struct cb_layoutrecallargs { }; extern __be32 nfs4_callback_layoutrecall( @@ -103981,7 +103997,7 @@ index ff8195b..d82456d 100644 void *dummy, struct cb_process_state *cps); struct cb_devicenotifyitem { -@@ -175,15 +175,15 @@ struct cb_devicenotifyargs { +@@ -176,15 +176,15 @@ struct cb_devicenotifyargs { }; extern __be32 nfs4_callback_devicenotify( @@ -104002,7 +104018,7 @@ index ff8195b..d82456d 100644 #if IS_ENABLED(CONFIG_NFS_V4) extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c -index f0939d0..fc277c6 100644 +index 7c9fbf5..8c165b9 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c @@ -19,10 +19,12 @@ @@ -104053,7 +104069,7 @@ index f0939d0..fc277c6 100644 int i; __be32 res = 0; struct nfs_client *clp = cps->clp; -@@ -452,10 +456,12 @@ out: +@@ -443,10 +447,12 @@ out: return status; } @@ -104068,7 +104084,7 @@ index f0939d0..fc277c6 100644 struct nfs4_slot_table *tbl; struct nfs4_slot *slot; struct nfs_client *clp; -@@ -541,9 +547,10 @@ validate_bitmap_values(unsigned long mask) +@@ -548,9 +554,10 @@ validate_bitmap_values(unsigned long mask) return (mask & ~RCA4_TYPE_MASK_ALL) == 0; } @@ -104080,7 +104096,7 @@ index f0939d0..fc277c6 100644 __be32 status; fmode_t flags = 0; -@@ -576,9 +583,10 @@ out: +@@ -583,9 +590,10 @@ out: } /* Reduce the fore channel's max_slots to the target value */ @@ -104093,7 +104109,7 @@ index f0939d0..fc277c6 100644 __be32 status; diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c -index 646cdac..9cb55a2 100644 +index 976c906..16b86ac 100644 --- a/fs/nfs/callback_xdr.c +++ b/fs/nfs/callback_xdr.c @@ -53,7 +53,7 @@ struct callback_op { @@ -104219,7 +104235,7 @@ index 646cdac..9cb55a2 100644 __be32 *p; __be32 status = res->csr_status; -@@ -950,43 +959,41 @@ static struct callback_op callback_ops[] = { +@@ -952,43 +961,41 @@ static struct callback_op callback_ops[] = { .res_maxsize = CB_OP_HDR_RES_MAXSZ, }, [OP_CB_GETATTR] = { @@ -104279,7 +104295,7 @@ index 646cdac..9cb55a2 100644 .res_maxsize = CB_OP_RECALLSLOT_RES_MAXSZ, }, #endif /* CONFIG_NFS_V4_1 */ -@@ -998,13 +1005,13 @@ static struct callback_op callback_ops[] = { +@@ -1000,13 +1007,13 @@ static struct callback_op callback_ops[] = { static struct svc_procedure nfs4_callback_procedures1[] = { [CB_NULL] = { .pc_func = nfs4_callback_null, @@ -104297,7 +104313,7 @@ index 646cdac..9cb55a2 100644 .pc_ressize = 256, .pc_xdrressize = NFS4_CALLBACK_BUFSIZE, diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c -index 7ded177..593782f 100644 +index 33eb817..e72c6b7 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -681,8 +681,9 @@ out: @@ -104321,7 +104337,7 @@ index 7ded177..593782f 100644 /* diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c -index 847b678..bd0b3e7 100644 +index 738c84a..fd9100f 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -1318,16 +1318,16 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat @@ -104345,10 +104361,10 @@ index 847b678..bd0b3e7 100644 EXPORT_SYMBOL_GPL(nfs_inc_attr_generation_counter); diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h -index 9a547aa..898fa60 100644 +index f1d1d2c..d4a961d 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h -@@ -612,9 +612,10 @@ unsigned long nfs_block_size(unsigned long bsize, unsigned char *nrbitsp) +@@ -608,9 +608,10 @@ unsigned long nfs_block_size(unsigned long bsize, unsigned char *nrbitsp) static inline void nfs_super_set_maxbytes(struct super_block *sb, __u64 maxfilesize) { @@ -105408,7 +105424,7 @@ index 0ca482a..5df90f3 100644 int status; diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c -index 4e44412..69ead07 100644 +index 88474a4..55ee771 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -2076,9 +2076,10 @@ static u32 nfs4_xdr_minorversion(const struct nfs4_sequence_args *args) @@ -106796,7 +106812,7 @@ index 4e44412..69ead07 100644 .p_replen = NFS4_##restype##_sz, \ .p_statidx = NFSPROC4_CLNT_##proc, \ diff --git a/fs/nfs/read.c b/fs/nfs/read.c -index eb31e23..e3d68b7 100644 +index 6776d7a..f018f72 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c @@ -346,7 +346,7 @@ struct nfs_readdesc { @@ -107261,7 +107277,7 @@ index 01df4cd..36a8d76 100644 sizeof(struct nfsd3_##rest##res), \ 0, \ diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c -index 7b755b7..910495b 100644 +index 51c3b06..aa8fcebc 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c @@ -40,9 +40,10 @@ nfsd3_proc_null(struct svc_rqst *rqstp, void *argp, void *resp) @@ -107341,8 +107357,8 @@ index 7b755b7..910495b 100644 + struct nfsd3_readres *resp = _resp; __be32 nfserr; u32 max_blocksize = svc_max_payload(rqstp); - -@@ -178,9 +184,10 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp, + unsigned long cnt = min(argp->count, max_blocksize); +@@ -179,9 +185,10 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp, * Write data to a file */ static __be32 @@ -107355,7 +107371,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; unsigned long cnt = argp->len; -@@ -207,9 +214,10 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, +@@ -208,9 +215,10 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, * first reports about SunOS compatibility problems start to pour in... */ static __be32 @@ -107368,7 +107384,7 @@ index 7b755b7..910495b 100644 svc_fh *dirfhp, *newfhp = NULL; struct iattr *attr; __be32 nfserr; -@@ -244,9 +252,10 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, +@@ -245,9 +253,10 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, * Make directory. This operation is not idempotent. */ static __be32 @@ -107381,7 +107397,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: MKDIR(3) %s %.*s\n", -@@ -264,9 +273,10 @@ nfsd3_proc_mkdir(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, +@@ -265,9 +274,10 @@ nfsd3_proc_mkdir(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, } static __be32 @@ -107394,7 +107410,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: SYMLINK(3) %s %.*s -> %.*s\n", -@@ -285,9 +295,10 @@ nfsd3_proc_symlink(struct svc_rqst *rqstp, struct nfsd3_symlinkargs *argp, +@@ -286,9 +296,10 @@ nfsd3_proc_symlink(struct svc_rqst *rqstp, struct nfsd3_symlinkargs *argp, * Make socket/fifo/device. */ static __be32 @@ -107407,7 +107423,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; int type; dev_t rdev = 0; -@@ -322,9 +333,10 @@ nfsd3_proc_mknod(struct svc_rqst *rqstp, struct nfsd3_mknodargs *argp, +@@ -323,9 +334,10 @@ nfsd3_proc_mknod(struct svc_rqst *rqstp, struct nfsd3_mknodargs *argp, * Remove file/fifo/socket etc. */ static __be32 @@ -107420,7 +107436,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: REMOVE(3) %s %.*s\n", -@@ -343,9 +355,10 @@ nfsd3_proc_remove(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, +@@ -344,9 +356,10 @@ nfsd3_proc_remove(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, * Remove a directory */ static __be32 @@ -107433,7 +107449,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: RMDIR(3) %s %.*s\n", -@@ -360,9 +373,10 @@ nfsd3_proc_rmdir(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, +@@ -361,9 +374,10 @@ nfsd3_proc_rmdir(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, } static __be32 @@ -107446,7 +107462,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: RENAME(3) %s %.*s ->\n", -@@ -382,9 +396,10 @@ nfsd3_proc_rename(struct svc_rqst *rqstp, struct nfsd3_renameargs *argp, +@@ -383,9 +397,10 @@ nfsd3_proc_rename(struct svc_rqst *rqstp, struct nfsd3_renameargs *argp, } static __be32 @@ -107459,7 +107475,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: LINK(3) %s ->\n", -@@ -405,9 +420,10 @@ nfsd3_proc_link(struct svc_rqst *rqstp, struct nfsd3_linkargs *argp, +@@ -406,9 +421,10 @@ nfsd3_proc_link(struct svc_rqst *rqstp, struct nfsd3_linkargs *argp, * Read a portion of a directory. */ static __be32 @@ -107472,7 +107488,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; int count; -@@ -441,9 +457,10 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, +@@ -442,9 +458,10 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, * For now, we choose to ignore the dircount parameter. */ static __be32 @@ -107485,7 +107501,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; int count = 0; loff_t offset; -@@ -508,9 +525,10 @@ nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, +@@ -509,9 +526,10 @@ nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, * Get file system stats */ static __be32 @@ -107498,7 +107514,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: FSSTAT(3) %s\n", -@@ -525,9 +543,10 @@ nfsd3_proc_fsstat(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, +@@ -526,9 +544,10 @@ nfsd3_proc_fsstat(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, * Get file system info */ static __be32 @@ -107511,7 +107527,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; u32 max_blocksize = svc_max_payload(rqstp); -@@ -568,9 +587,10 @@ nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, +@@ -569,9 +588,10 @@ nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, * Get pathconf info for the specified file */ static __be32 @@ -107524,7 +107540,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: PATHCONF(3) %s\n", -@@ -611,9 +631,10 @@ nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, +@@ -612,9 +632,10 @@ nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, * Commit a file (range) to stable storage. */ static __be32 @@ -107537,7 +107553,7 @@ index 7b755b7..910495b 100644 __be32 nfserr; dprintk("nfsd: COMMIT(3) %s %u@%Lu\n", -@@ -668,213 +689,213 @@ struct nfsd3_voidargs { int dummy; }; +@@ -669,213 +690,213 @@ struct nfsd3_voidargs { int dummy; }; static struct svc_procedure nfsd_procedures3[22] = { [NFS3PROC_NULL] = { @@ -108407,7 +108423,7 @@ index 7389cb1..e031e30d 100644 .p_replen = NFS4_dec_##restype##_sz, \ .p_statidx = NFSPROC4_CB_##call, \ diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c -index f8082c7..ded62562 100644 +index de1ff1d..bd4c347 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -358,8 +358,9 @@ copy_clientid(clientid_t *clid, struct nfsd4_session *session) @@ -108577,10 +108593,10 @@ index f8082c7..ded62562 100644 + void *_secinfo) { + struct nfsd4_secinfo *secinfo = _secinfo; - struct svc_fh resfh; struct svc_export *exp; struct dentry *dentry; -@@ -893,8 +913,9 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, + __be32 err; +@@ -891,8 +911,9 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108591,7 +108607,7 @@ index f8082c7..ded62562 100644 __be32 err; switch (sin->sin_style) { -@@ -916,8 +937,9 @@ nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstat +@@ -914,8 +935,9 @@ nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstat static __be32 nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108602,7 +108618,7 @@ index f8082c7..ded62562 100644 __be32 status = nfs_ok; int err; -@@ -977,8 +999,9 @@ static int fill_in_write_vector(struct kvec *vec, struct nfsd4_write *write) +@@ -975,8 +997,9 @@ static int fill_in_write_vector(struct kvec *vec, struct nfsd4_write *write) static __be32 nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108613,7 +108629,7 @@ index f8082c7..ded62562 100644 stateid_t *stateid = &write->wr_stateid; struct file *filp = NULL; __be32 status = nfs_ok; -@@ -1014,8 +1037,9 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, +@@ -1012,8 +1035,9 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_clone(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108624,7 +108640,7 @@ index f8082c7..ded62562 100644 struct file *src, *dst; __be32 status; -@@ -1078,23 +1102,28 @@ nfsd4_fallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, +@@ -1076,23 +1100,28 @@ nfsd4_fallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_allocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108656,7 +108672,7 @@ index f8082c7..ded62562 100644 int whence; __be32 status; struct file *file; -@@ -1141,8 +1170,9 @@ out: +@@ -1139,8 +1168,9 @@ out: */ static __be32 _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108667,7 +108683,7 @@ index f8082c7..ded62562 100644 __be32 *buf, *p; int count; __be32 status; -@@ -1199,8 +1229,9 @@ out_kfree: +@@ -1197,8 +1227,9 @@ out_kfree: static __be32 nfsd4_nverify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108678,7 +108694,7 @@ index f8082c7..ded62562 100644 __be32 status; status = _nfsd4_verify(rqstp, cstate, verify); -@@ -1209,8 +1240,9 @@ nfsd4_nverify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, +@@ -1207,8 +1238,9 @@ nfsd4_nverify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -108689,7 +108705,7 @@ index f8082c7..ded62562 100644 __be32 status; status = _nfsd4_verify(rqstp, cstate, verify); -@@ -1238,8 +1270,9 @@ nfsd4_layout_verify(struct svc_export *exp, unsigned int layout_type) +@@ -1236,8 +1268,9 @@ nfsd4_layout_verify(struct svc_export *exp, unsigned int layout_type) static __be32 nfsd4_getdeviceinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109223,7 +109239,7 @@ index f8082c7..ded62562 100644 .pc_ressize = sizeof(struct nfsd4_compoundres), .pc_release = nfsd4_release_compoundargs, diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c -index c484a2b6..a1e3dd7 100644 +index 0462eed..7709d1d 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -2362,8 +2362,9 @@ static bool client_has_state(struct nfs4_client *clp) @@ -109237,7 +109253,7 @@ index c484a2b6..a1e3dd7 100644 struct nfs4_client *conf, *new; struct nfs4_client *unconf = NULL; __be32 status; -@@ -2633,8 +2634,9 @@ static __be32 nfsd4_check_cb_sec(struct nfsd4_cb_sec *cbs) +@@ -2639,8 +2640,9 @@ static __be32 nfsd4_check_cb_sec(struct nfsd4_cb_sec *cbs) __be32 nfsd4_create_session(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109248,7 +109264,7 @@ index c484a2b6..a1e3dd7 100644 struct sockaddr *sa = svc_addr(rqstp); struct nfs4_client *conf, *unconf; struct nfs4_client *old = NULL; -@@ -2759,8 +2761,9 @@ static __be32 nfsd4_map_bcts_dir(u32 *dir) +@@ -2764,8 +2766,9 @@ static __be32 nfsd4_map_bcts_dir(u32 *dir) return nfserr_inval; } @@ -109259,7 +109275,7 @@ index c484a2b6..a1e3dd7 100644 struct nfsd4_session *session = cstate->session; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); __be32 status; -@@ -2780,8 +2783,9 @@ __be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state +@@ -2785,8 +2788,9 @@ __be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109270,7 +109286,7 @@ index c484a2b6..a1e3dd7 100644 __be32 status; struct nfsd4_conn *conn; struct nfsd4_session *session; -@@ -2823,8 +2827,9 @@ static bool nfsd4_compound_in_session(struct nfsd4_session *session, struct nfs4 +@@ -2828,8 +2832,9 @@ static bool nfsd4_compound_in_session(struct nfsd4_session *session, struct nfs4 __be32 nfsd4_destroy_session(struct svc_rqst *r, struct nfsd4_compound_state *cstate, @@ -109281,7 +109297,7 @@ index c484a2b6..a1e3dd7 100644 struct nfsd4_session *ses; __be32 status; int ref_held_by_me = 0; -@@ -2920,8 +2925,9 @@ static bool nfsd4_request_too_big(struct svc_rqst *rqstp, +@@ -2925,8 +2930,9 @@ static bool nfsd4_request_too_big(struct svc_rqst *rqstp, __be32 nfsd4_sequence(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109292,7 +109308,7 @@ index c484a2b6..a1e3dd7 100644 struct nfsd4_compoundres *resp = rqstp->rq_resp; struct xdr_stream *xdr = &resp->xdr; struct nfsd4_session *session; -@@ -3055,8 +3061,9 @@ nfsd4_sequence_done(struct nfsd4_compoundres *resp) +@@ -3060,8 +3066,9 @@ nfsd4_sequence_done(struct nfsd4_compoundres *resp) } __be32 @@ -109303,7 +109319,7 @@ index c484a2b6..a1e3dd7 100644 struct nfs4_client *conf, *unconf; struct nfs4_client *clp = NULL; __be32 status = 0; -@@ -3096,8 +3103,9 @@ out: +@@ -3101,8 +3108,9 @@ out: } __be32 @@ -109314,7 +109330,7 @@ index c484a2b6..a1e3dd7 100644 __be32 status = 0; if (rc->rca_one_fs) { -@@ -3134,8 +3142,9 @@ out: +@@ -3139,8 +3147,9 @@ out: __be32 nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109325,7 +109341,7 @@ index c484a2b6..a1e3dd7 100644 struct xdr_netobj clname = setclid->se_name; nfs4_verifier clverifier = setclid->se_verf; struct nfs4_client *conf, *new; -@@ -3193,8 +3202,9 @@ out: +@@ -3198,8 +3207,9 @@ out: __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109336,7 +109352,7 @@ index c484a2b6..a1e3dd7 100644 struct nfs4_client *conf, *unconf; struct nfs4_client *old = NULL; nfs4_verifier confirm = setclientid_confirm->sc_confirm; -@@ -4431,8 +4441,9 @@ void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate, +@@ -4436,8 +4446,9 @@ void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate, __be32 nfsd4_renew(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109347,7 +109363,7 @@ index c484a2b6..a1e3dd7 100644 struct nfs4_client *clp; __be32 status; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); -@@ -4888,8 +4899,9 @@ out: +@@ -4893,8 +4904,9 @@ out: */ __be32 nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109358,7 +109374,7 @@ index c484a2b6..a1e3dd7 100644 struct nfsd4_test_stateid_id *stateid; struct nfs4_client *cl = cstate->session->se_client; -@@ -4902,8 +4914,9 @@ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, +@@ -4907,8 +4919,9 @@ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, __be32 nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109369,7 +109385,7 @@ index c484a2b6..a1e3dd7 100644 stateid_t *stateid = &free_stateid->fr_stateid; struct nfs4_stid *s; struct nfs4_delegation *dp; -@@ -5041,8 +5054,9 @@ static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cs +@@ -5046,8 +5059,9 @@ static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cs __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109380,7 +109396,7 @@ index c484a2b6..a1e3dd7 100644 __be32 status; struct nfs4_openowner *oo; struct nfs4_ol_stateid *stp; -@@ -5110,8 +5124,9 @@ static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_ac +@@ -5115,8 +5129,9 @@ static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_ac __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109391,7 +109407,7 @@ index c484a2b6..a1e3dd7 100644 __be32 status; struct nfs4_ol_stateid *stp; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); -@@ -5179,8 +5194,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s) +@@ -5184,8 +5199,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s) */ __be32 nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109402,7 +109418,7 @@ index c484a2b6..a1e3dd7 100644 __be32 status; struct nfs4_ol_stateid *stp; struct net *net = SVC_NET(rqstp); -@@ -5209,8 +5225,9 @@ out: +@@ -5214,8 +5230,9 @@ out: __be32 nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109413,7 +109429,7 @@ index c484a2b6..a1e3dd7 100644 struct nfs4_delegation *dp; stateid_t *stateid = &dr->dr_stateid; struct nfs4_stid *s; -@@ -5544,8 +5561,9 @@ out: +@@ -5549,8 +5566,9 @@ out: */ __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109424,7 +109440,7 @@ index c484a2b6..a1e3dd7 100644 struct nfs4_openowner *open_sop = NULL; struct nfs4_lockowner *lock_sop = NULL; struct nfs4_ol_stateid *lock_stp = NULL; -@@ -5748,8 +5766,9 @@ static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct +@@ -5753,8 +5771,9 @@ static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct */ __be32 nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109435,7 +109451,7 @@ index c484a2b6..a1e3dd7 100644 struct file_lock *file_lock = NULL; struct nfs4_lockowner *lo = NULL; __be32 status; -@@ -5821,8 +5840,9 @@ out: +@@ -5826,8 +5845,9 @@ out: __be32 nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109446,7 +109462,7 @@ index c484a2b6..a1e3dd7 100644 struct nfs4_ol_stateid *stp; struct file *filp = NULL; struct file_lock *file_lock = NULL; -@@ -5928,8 +5948,9 @@ check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner) +@@ -5933,8 +5953,9 @@ check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner) __be32 nfsd4_release_lockowner(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, @@ -109457,7 +109473,7 @@ index c484a2b6..a1e3dd7 100644 clientid_t *clid = &rlockowner->rl_clientid; struct nfs4_stateowner *sop; struct nfs4_lockowner *lo = NULL; -@@ -6873,26 +6894,34 @@ clear_current_stateid(struct nfsd4_compound_state *cstate) +@@ -6878,26 +6899,34 @@ clear_current_stateid(struct nfsd4_compound_state *cstate) * functions to set current state id */ void @@ -109496,7 +109512,7 @@ index c484a2b6..a1e3dd7 100644 put_stateid(cstate, &lock->lk_resp_stateid); } -@@ -6901,49 +6930,65 @@ nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lo +@@ -6906,49 +6935,65 @@ nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lo */ void @@ -109571,7 +109587,7 @@ index c484a2b6..a1e3dd7 100644 get_stateid(cstate, &write->wr_stateid); } diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c -index 1600ec4..2c62d8d 100644 +index 9df898b..574f91e 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -447,8 +447,9 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, @@ -110407,7 +110423,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; if (!nfserr) -@@ -3478,9 +3544,9 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp, +@@ -3481,9 +3547,9 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp, } static __be32 @@ -110419,7 +110435,7 @@ index 1600ec4..2c62d8d 100644 unsigned long maxcount; struct xdr_stream *xdr = &resp->xdr; struct file *file = read->rd_filp; -@@ -3532,8 +3598,9 @@ out: +@@ -3535,8 +3601,9 @@ out: } static __be32 @@ -110430,7 +110446,7 @@ index 1600ec4..2c62d8d 100644 int maxcount; __be32 wire_count; int zero = 0; -@@ -3577,8 +3644,9 @@ nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd +@@ -3580,8 +3647,9 @@ nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd } static __be32 @@ -110441,7 +110457,7 @@ index 1600ec4..2c62d8d 100644 int maxcount; int bytes_left; loff_t offset; -@@ -3670,8 +3738,9 @@ err_no_verf: +@@ -3673,8 +3741,9 @@ err_no_verf: } static __be32 @@ -110452,7 +110468,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -3685,8 +3754,9 @@ nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ +@@ -3688,8 +3757,9 @@ nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ } static __be32 @@ -110463,7 +110479,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -3702,8 +3772,9 @@ nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ +@@ -3705,8 +3775,9 @@ nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ static __be32 nfsd4_do_encode_secinfo(struct xdr_stream *xdr, @@ -110474,7 +110490,7 @@ index 1600ec4..2c62d8d 100644 u32 i, nflavs, supported; struct exp_flavor_info *flavs; struct exp_flavor_info def_flavs[2]; -@@ -3778,8 +3849,9 @@ out: +@@ -3781,8 +3852,9 @@ out: static __be32 nfsd4_encode_secinfo(struct nfsd4_compoundres *resp, __be32 nfserr, @@ -110485,7 +110501,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; return nfsd4_do_encode_secinfo(xdr, nfserr, secinfo->si_exp); -@@ -3787,8 +3859,9 @@ nfsd4_encode_secinfo(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -3790,8 +3862,9 @@ nfsd4_encode_secinfo(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_secinfo_no_name(struct nfsd4_compoundres *resp, __be32 nfserr, @@ -110496,7 +110512,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; return nfsd4_do_encode_secinfo(xdr, nfserr, secinfo->sin_exp); -@@ -3799,8 +3872,9 @@ nfsd4_encode_secinfo_no_name(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -3802,8 +3875,9 @@ nfsd4_encode_secinfo_no_name(struct nfsd4_compoundres *resp, __be32 nfserr, * regardless of the error status. */ static __be32 @@ -110507,7 +110523,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -3823,8 +3897,9 @@ nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4 +@@ -3826,8 +3900,9 @@ nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4 } static __be32 @@ -110518,7 +110534,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -3847,8 +3922,9 @@ nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, struct n +@@ -3850,8 +3925,9 @@ nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, struct n } static __be32 @@ -110529,7 +110545,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -3874,8 +3950,9 @@ static const u32 nfs4_minimal_spo_must_enforce[2] = { +@@ -3877,8 +3953,9 @@ static const u32 nfs4_minimal_spo_must_enforce[2] = { static __be32 nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr, @@ -110540,7 +110556,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; char *major_id; -@@ -3952,8 +4029,9 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -3955,8 +4032,9 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_create_session(struct nfsd4_compoundres *resp, __be32 nfserr, @@ -110551,7 +110567,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -4008,8 +4086,9 @@ nfsd4_encode_create_session(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -4011,8 +4089,9 @@ nfsd4_encode_create_session(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_sequence(struct nfsd4_compoundres *resp, __be32 nfserr, @@ -110562,7 +110578,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -4034,8 +4113,9 @@ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -4037,8 +4116,9 @@ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr, @@ -110573,7 +110589,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; struct nfsd4_test_stateid_id *stateid, *next; __be32 *p; -@@ -4057,9 +4137,9 @@ nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -4060,9 +4140,9 @@ nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr, #ifdef CONFIG_NFSD_PNFS static __be32 @@ -110585,7 +110601,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; const struct nfsd4_layout_ops *ops = nfsd4_layout_ops[gdev->gd_layout_type]; -@@ -4127,9 +4207,9 @@ toosmall: +@@ -4130,9 +4210,9 @@ toosmall: } static __be32 @@ -110597,7 +110613,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; const struct nfsd4_layout_ops *ops = nfsd4_layout_ops[lgp->lg_layout_type]; -@@ -4162,9 +4242,9 @@ out: +@@ -4165,9 +4245,9 @@ out: } static __be32 @@ -110609,7 +110625,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -4186,9 +4266,9 @@ nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -4189,9 +4269,9 @@ nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr, } static __be32 @@ -110621,7 +110637,7 @@ index 1600ec4..2c62d8d 100644 struct xdr_stream *xdr = &resp->xdr; __be32 *p; -@@ -4207,8 +4287,9 @@ nfsd4_encode_layoutreturn(struct nfsd4_compoundres *resp, __be32 nfserr, +@@ -4210,8 +4290,9 @@ nfsd4_encode_layoutreturn(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_seek(struct nfsd4_compoundres *resp, __be32 nfserr, @@ -110632,7 +110648,7 @@ index 1600ec4..2c62d8d 100644 __be32 *p; if (nfserr) -@@ -4235,87 +4316,87 @@ typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); +@@ -4238,87 +4319,87 @@ typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); * done in the decoding phase. */ static nfsd4_enc nfsd4_enc_ops[] = { @@ -110794,7 +110810,7 @@ index 1600ec4..2c62d8d 100644 }; /* -@@ -4440,9 +4521,9 @@ nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op) +@@ -4443,9 +4524,9 @@ nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op) } int @@ -110806,7 +110822,7 @@ index 1600ec4..2c62d8d 100644 } int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp) -@@ -4465,8 +4546,11 @@ int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp) +@@ -4468,8 +4549,11 @@ int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp) } int @@ -110819,7 +110835,7 @@ index 1600ec4..2c62d8d 100644 if (rqstp->rq_arg.head[0].iov_len % 4) { /* client is nuts */ dprintk("%s: compound not properly padded! (peeraddr=%pISc xid=0x%x)", -@@ -4486,11 +4570,13 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_comp +@@ -4489,11 +4573,13 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_comp } int @@ -111556,15 +111572,15 @@ index 79d964a..bbf050b 100644 return 1; } diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c -index 5d2a57e..86c17842 100644 +index d40010e..0a2bdf7 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -870,7 +870,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen, oldfs = get_fs(); set_fs(KERNEL_DS); -- host_err = vfs_readv(file, (struct iovec __user *)vec, vlen, &offset); -+ host_err = vfs_readv(file, (struct iovec __force_user *)vec, vlen, &offset); +- host_err = vfs_readv(file, (struct iovec __user *)vec, vlen, &offset, 0); ++ host_err = vfs_readv(file, (struct iovec __force_user *)vec, vlen, &offset, 0); set_fs(oldfs); return nfsd_finish_read(file, count, host_err); } @@ -111572,8 +111588,8 @@ index 5d2a57e..86c17842 100644 /* Write the data. */ oldfs = get_fs(); set_fs(KERNEL_DS); -- host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &pos); -+ host_err = vfs_writev(file, (struct iovec __force_user *)vec, vlen, &pos); +- host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &pos, 0); ++ host_err = vfs_writev(file, (struct iovec __force_user *)vec, vlen, &pos, 0); set_fs(oldfs); if (host_err < 0) goto out_nfserr; @@ -112076,15 +112092,15 @@ index a95d8e0..a91a5fd 100644 EXPORT_SYMBOL_GPL(fsnotify_get_cookie); diff --git a/fs/ntfs/dir.c b/fs/ntfs/dir.c -index b2eff58..a779b81 100644 +index a186135..31eb358 100644 --- a/fs/ntfs/dir.c +++ b/fs/ntfs/dir.c @@ -1310,7 +1310,7 @@ find_next_index_buffer: - ia = (INDEX_ALLOCATION*)(kaddr + (ia_pos & ~PAGE_CACHE_MASK & - ~(s64)(ndir->itype.index.block_size - 1))); + ia = (INDEX_ALLOCATION*)(kaddr + (ia_pos & ~PAGE_MASK & + ~(s64)(ndir->itype.index.block_size - 1))); /* Bounds checks. */ -- if (unlikely((u8*)ia < kaddr || (u8*)ia > kaddr + PAGE_CACHE_SIZE)) { -+ if (unlikely(!kaddr || (u8*)ia < kaddr || (u8*)ia > kaddr + PAGE_CACHE_SIZE)) { +- if (unlikely((u8*)ia < kaddr || (u8*)ia > kaddr + PAGE_SIZE)) { ++ if (unlikely(!kaddr || (u8*)ia < kaddr || (u8*)ia > kaddr + PAGE_SIZE)) { ntfs_error(sb, "Out of bounds check failed. Corrupt directory " "inode 0x%lx or driver bug.", vdir->i_ino); goto err_out; @@ -112098,7 +112114,7 @@ index b2eff58..a779b81 100644 write_inode_now(bmp_vi, !datasync); iput(bmp_vi); diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c -index d284f07..06984d4 100644 +index f40972d..a2d48ab 100644 --- a/fs/ntfs/inode.c +++ b/fs/ntfs/inode.c @@ -57,8 +57,9 @@ @@ -112180,7 +112196,7 @@ index b3c3469..17208ad 100644 extern struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no); extern struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPE type, diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c -index 3014a36..9fa26af 100644 +index 37b2501..bedd6ed 100644 --- a/fs/ntfs/mft.c +++ b/fs/ntfs/mft.c @@ -963,7 +963,7 @@ bool ntfs_may_write_mft_record(ntfs_volume *vol, const unsigned long mft_no, @@ -112202,7 +112218,7 @@ index 3014a36..9fa26af 100644 if (!vi) { /* diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c -index 1b38abd..33913db 100644 +index ecb4987..c723ded 100644 --- a/fs/ntfs/super.c +++ b/fs/ntfs/super.c @@ -688,7 +688,7 @@ static struct buffer_head *read_ntfs_boot_sector(struct super_block *sb, @@ -112242,7 +112258,7 @@ index 1b38abd..33913db 100644 ntfs_volume *vol; struct buffer_head *bh; diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h -index 68c607e..095cc08 100644 +index 004f2cb..238f6fe 100644 --- a/fs/ocfs2/dlm/dlmcommon.h +++ b/fs/ocfs2/dlm/dlmcommon.h @@ -151,9 +151,9 @@ struct dlm_ctxt @@ -112298,10 +112314,10 @@ index 8251360..9c7513a 100644 /* Lists: Dirty=Empty Purge=InUse PendingASTs=Empty ... */ out += snprintf(buf + out, len - out, diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c -index 2ee7fe7..9cff42d 100644 +index 12e064b..cd40d8e 100644 --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c -@@ -2048,10 +2048,10 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain, +@@ -2057,10 +2057,10 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain, dlm->reco.new_master = O2NM_INVALID_NODE_NUM; dlm->reco.dead_node = O2NM_INVALID_NODE_NUM; @@ -112315,7 +112331,7 @@ index 2ee7fe7..9cff42d 100644 } diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c -index 9477d6e..69ffbb2 100644 +index 13719d3..593bf65 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c @@ -303,7 +303,7 @@ static void dlm_init_mle(struct dlm_master_list_entry *mle, @@ -112337,7 +112353,7 @@ index 9477d6e..69ffbb2 100644 /* just for consistency */ diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c -index 03768bb..e92ce05 100644 +index 47b3b2d..26bae2c 100644 --- a/fs/ocfs2/dlmfs/dlmfs.c +++ b/fs/ocfs2/dlmfs/dlmfs.c @@ -88,13 +88,13 @@ struct workqueue_struct *user_dlm_worker; @@ -112356,8 +112372,21 @@ index 03768bb..e92ce05 100644 { return strlcpy(buffer, DLMFS_CAPABILITIES, strlen(DLMFS_CAPABILITIES) + 1); +diff --git a/fs/ocfs2/filecheck.c b/fs/ocfs2/filecheck.c +index 2cabbcf..93edf33 100644 +--- a/fs/ocfs2/filecheck.c ++++ b/fs/ocfs2/filecheck.c +@@ -217,7 +217,7 @@ int ocfs2_filecheck_create_sysfs(struct super_block *sb) + struct ocfs2_filecheck *fcheck = NULL; + struct ocfs2_filecheck_sysfs_entry *entry = NULL; + struct attribute **attrs = NULL; +- struct attribute_group attrgp; ++ attribute_group_no_const attrgp; + + if (!ocfs2_kset) + return -ENOMEM; diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c -index 7d62c43..e325680 100644 +index fe0d1f9..7ec8659 100644 --- a/fs/ocfs2/localalloc.c +++ b/fs/ocfs2/localalloc.c @@ -1317,7 +1317,7 @@ static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb, @@ -112370,7 +112399,7 @@ index 7d62c43..e325680 100644 bail: if (handle) diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h -index 7a01262..23667d1 100644 +index e63af7d..2a8a83a 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h @@ -247,11 +247,11 @@ enum ocfs2_vol_state @@ -112449,10 +112478,10 @@ index 2f19aee..26ac57f 100644 } } diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c -index faa1365..ded3cff 100644 +index d7cae33..2d29660 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c -@@ -310,11 +310,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len) +@@ -306,11 +306,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len) "%10s => GlobalAllocs: %d LocalAllocs: %d " "SubAllocs: %d LAWinMoves: %d SAExtends: %d\n", "Stats", @@ -112469,7 +112498,7 @@ index faa1365..ded3cff 100644 out += snprintf(buf + out, len - out, "%10s => State: %u Descriptor: %llu Size: %u bits " -@@ -2101,11 +2101,11 @@ static int ocfs2_initialize_super(struct super_block *sb, +@@ -2088,11 +2088,11 @@ static int ocfs2_initialize_super(struct super_block *sb, mutex_init(&osb->system_file_mutex); @@ -112600,10 +112629,10 @@ index 081d3d6..c1b8284a 100644 } putname(tmp); diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c -index d894e7c..8fa99559 100644 +index cc514da..2895466 100644 --- a/fs/overlayfs/copy_up.c +++ b/fs/overlayfs/copy_up.c -@@ -153,7 +153,7 @@ static char *ovl_read_symlink(struct dentry *realdentry) +@@ -185,7 +185,7 @@ static char *ovl_read_symlink(struct dentry *realdentry) set_fs(get_ds()); /* The cast to a user pointer is valid due to the set_fs() */ res = inode->i_op->readlink(realdentry, @@ -112627,7 +112656,7 @@ index a4ff5d0..6034cb5 100644 if (ovl_open_need_copy_up(file_flags, type, realpath.dentry)) { err = ovl_want_write(dentry); diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c -index 4399ea8..4915433 100644 +index 791235e..46ecd93 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -194,7 +194,7 @@ void ovl_path_lower(struct dentry *dentry, struct path *path) @@ -112639,7 +112668,7 @@ index 4399ea8..4915433 100644 } int ovl_want_write(struct dentry *dentry) -@@ -944,8 +944,8 @@ static unsigned int ovl_split_lowerdirs(char *str) +@@ -942,8 +942,8 @@ static unsigned int ovl_split_lowerdirs(char *str) static int ovl_fill_super(struct super_block *sb, void *data, int silent) { @@ -112651,7 +112680,7 @@ index 4399ea8..4915433 100644 struct ovl_entry *oe; struct ovl_fs *ufs; diff --git a/fs/pipe.c b/fs/pipe.c -index ab8dad3..932cb27 100644 +index 0d3f516..91735ad 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -36,7 +36,7 @@ unsigned int pipe_max_size = 1048576; @@ -113244,7 +113273,7 @@ index b6c00ce..ab37ad1 100644 static struct pid * get_children_pid(struct inode *inode, struct pid *pid_prev, loff_t pos) diff --git a/fs/proc/base.c b/fs/proc/base.c -index 45f2162..284806a 100644 +index 0d163a8..8af6140 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -113,6 +113,14 @@ struct pid_entry { @@ -113424,7 +113453,7 @@ index 45f2162..284806a 100644 + mmput(mm); + mm = ERR_PTR(-EPERM); + } -+#ifdef CONFIG_GRKERNSEC ++#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + if (ptracer_exec_id) + current_is_ptracer(task, ptracer_exec_id); +#endif @@ -113597,7 +113626,7 @@ index 45f2162..284806a 100644 rcu_read_unlock(); } else { inode->i_uid = GLOBAL_ROOT_UID; -@@ -2301,6 +2439,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir, +@@ -2369,6 +2507,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir, if (!task) goto out_no_task; @@ -113607,7 +113636,7 @@ index 45f2162..284806a 100644 /* * Yes, it does not scale. And it should not. Don't add * new entries into /proc/<tgid>/ without very good reasons. -@@ -2331,6 +2472,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx, +@@ -2399,6 +2540,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx, if (!task) return -ENOENT; @@ -113617,7 +113646,7 @@ index 45f2162..284806a 100644 if (!dir_emit_dots(file, ctx)) goto out; -@@ -2743,7 +2887,9 @@ static const struct inode_operations proc_task_inode_operations; +@@ -2811,7 +2955,9 @@ static const struct inode_operations proc_task_inode_operations; static const struct pid_entry tgid_base_stuff[] = { DIR("task", S_IRUGO|S_IXUGO, proc_task_inode_operations, proc_task_operations), DIR("fd", S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations), @@ -113627,7 +113656,7 @@ index 45f2162..284806a 100644 DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations), DIR("ns", S_IRUSR|S_IXUGO, proc_ns_dir_inode_operations, proc_ns_dir_operations), #ifdef CONFIG_NET -@@ -2761,7 +2907,7 @@ static const struct pid_entry tgid_base_stuff[] = { +@@ -2829,7 +2975,7 @@ static const struct pid_entry tgid_base_stuff[] = { REG("autogroup", S_IRUGO|S_IWUSR, proc_pid_sched_autogroup_operations), #endif REG("comm", S_IRUGO|S_IWUSR, proc_pid_set_comm_operations), @@ -113636,7 +113665,7 @@ index 45f2162..284806a 100644 ONE("syscall", S_IRUSR, proc_pid_syscall), #endif REG("cmdline", S_IRUGO, proc_pid_cmdline_ops), -@@ -2786,10 +2932,10 @@ static const struct pid_entry tgid_base_stuff[] = { +@@ -2854,10 +3000,10 @@ static const struct pid_entry tgid_base_stuff[] = { #ifdef CONFIG_SECURITY DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations), #endif @@ -113649,7 +113678,7 @@ index 45f2162..284806a 100644 ONE("stack", S_IRUSR, proc_pid_stack), #endif #ifdef CONFIG_SCHED_INFO -@@ -2823,6 +2969,9 @@ static const struct pid_entry tgid_base_stuff[] = { +@@ -2891,6 +3037,9 @@ static const struct pid_entry tgid_base_stuff[] = { #ifdef CONFIG_HARDWALL ONE("hardwall", S_IRUGO, proc_pid_hardwall), #endif @@ -113659,7 +113688,7 @@ index 45f2162..284806a 100644 #ifdef CONFIG_USER_NS REG("uid_map", S_IRUGO|S_IWUSR, proc_uid_map_operations), REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations), -@@ -2955,7 +3104,14 @@ static int proc_pid_instantiate(struct inode *dir, +@@ -3024,7 +3173,14 @@ static int proc_pid_instantiate(struct inode *dir, if (!inode) goto out; @@ -113674,7 +113703,7 @@ index 45f2162..284806a 100644 inode->i_op = &proc_tgid_base_inode_operations; inode->i_fop = &proc_tgid_base_operations; inode->i_flags|=S_IMMUTABLE; -@@ -2993,7 +3149,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign +@@ -3062,7 +3218,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign if (!task) goto out; @@ -113686,7 +113715,7 @@ index 45f2162..284806a 100644 put_task_struct(task); out: return ERR_PTR(result); -@@ -3107,7 +3267,7 @@ static const struct pid_entry tid_base_stuff[] = { +@@ -3176,7 +3336,7 @@ static const struct pid_entry tid_base_stuff[] = { REG("sched", S_IRUGO|S_IWUSR, proc_pid_sched_operations), #endif REG("comm", S_IRUGO|S_IWUSR, proc_pid_set_comm_operations), @@ -113695,7 +113724,7 @@ index 45f2162..284806a 100644 ONE("syscall", S_IRUSR, proc_pid_syscall), #endif REG("cmdline", S_IRUGO, proc_pid_cmdline_ops), -@@ -3134,10 +3294,10 @@ static const struct pid_entry tid_base_stuff[] = { +@@ -3203,10 +3363,10 @@ static const struct pid_entry tid_base_stuff[] = { #ifdef CONFIG_SECURITY DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations), #endif @@ -113940,7 +113969,7 @@ index 42305dd..968caba 100644 if (de->size) inode->i_size = de->size; diff --git a/fs/proc/internal.h b/fs/proc/internal.h -index aa27810..6f98bdd 100644 +index aa27810..d1e37fa 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h @@ -47,9 +47,10 @@ struct proc_dir_entry { @@ -113992,7 +114021,7 @@ index aa27810..6f98bdd 100644 struct mempolicy *task_mempolicy; #endif -}; -+#ifdef CONFIG_GRKERNSEC ++#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + u64 ptracer_exec_id; +#endif +} __randomize_layout; @@ -114097,10 +114126,10 @@ index a939f5e..0de6e70 100644 .priority = 0, }; diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c -index df4661a..03c3e5e 100644 +index 8372046..c8b72a8 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c -@@ -188,7 +188,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) +@@ -159,7 +159,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) 0ul, // used to be vmalloc 'used' 0ul // used to be vmalloc 'largest_chunk' #ifdef CONFIG_MEMORY_FAILURE @@ -114416,24 +114445,10 @@ index fe5b6e6..cd2913c 100644 kfree(ctl_table_arg); goto out; diff --git a/fs/proc/root.c b/fs/proc/root.c -index 361ab4e..55e45e9 100644 +index ec649c9..55e45e9 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c -@@ -121,6 +121,13 @@ static struct dentry *proc_mount(struct file_system_type *fs_type, - if (IS_ERR(sb)) - return ERR_CAST(sb); - -+ /* -+ * procfs isn't actually a stacking filesystem; however, there is -+ * too much magic going on inside it to permit stacking things on -+ * top of it -+ */ -+ sb->s_stack_depth = FILESYSTEM_MAX_STACK_DEPTH; -+ - if (!proc_parse_options(options, ns)) { - deactivate_locked_super(sb); - return ERR_PTR(-EINVAL); -@@ -187,7 +194,15 @@ void __init proc_root_init(void) +@@ -194,7 +194,15 @@ void __init proc_root_init(void) proc_create_mount_point("openprom"); #endif proc_tty_init(); @@ -114567,7 +114582,7 @@ index 510413eb..34d9a8c 100644 seq_printf(p, "softirq %llu", (unsigned long long)sum_softirq); diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c -index 9d2f3e0..0cb1d3f 100644 +index 5415835..5c95ec4 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -15,12 +15,19 @@ @@ -114720,7 +114735,7 @@ index 9d2f3e0..0cb1d3f 100644 [ilog2(VM_ACCOUNT)] = "ac", [ilog2(VM_NORESERVE)] = "nr", [ilog2(VM_HUGETLB)] = "ht", -@@ -714,7 +753,14 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) +@@ -727,7 +766,14 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) .mm = vma->vm_mm, .private = &mss, }; @@ -114735,7 +114750,7 @@ index 9d2f3e0..0cb1d3f 100644 memset(&mss, 0, sizeof mss); #ifdef CONFIG_SHMEM -@@ -741,10 +787,15 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) +@@ -754,10 +800,15 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) } #endif @@ -114754,7 +114769,7 @@ index 9d2f3e0..0cb1d3f 100644 seq_printf(m, "Size: %8lu kB\n" -@@ -764,7 +815,7 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) +@@ -777,7 +828,7 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) "KernelPageSize: %8lu kB\n" "MMUPageSize: %8lu kB\n" "Locked: %8lu kB\n", @@ -114763,7 +114778,7 @@ index 9d2f3e0..0cb1d3f 100644 mss.resident >> 10, (unsigned long)(mss.pss >> (10 + PSS_SHIFT)), mss.shared_clean >> 10, -@@ -1412,7 +1463,7 @@ static int pagemap_open(struct inode *inode, struct file *file) +@@ -1426,7 +1477,7 @@ static int pagemap_open(struct inode *inode, struct file *file) { struct mm_struct *mm; @@ -114772,7 +114787,7 @@ index 9d2f3e0..0cb1d3f 100644 if (IS_ERR(mm)) return PTR_ERR(mm); file->private_data = mm; -@@ -1615,6 +1666,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) +@@ -1629,6 +1680,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) char buffer[64]; int nid; @@ -114786,7 +114801,7 @@ index 9d2f3e0..0cb1d3f 100644 if (!mm) return 0; -@@ -1629,11 +1687,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) +@@ -1643,11 +1701,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) mpol_to_str(buffer, sizeof(buffer), proc_priv->task_mempolicy); } @@ -114844,7 +114859,7 @@ index faacb0c..b185575 100644 int err = PTR_ERR(priv->mm); diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c -index 4e61388..1a2523d 100644 +index 8afe10c..61d505b 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -105,9 +105,13 @@ static ssize_t read_from_oldmem(char *buf, size_t count, @@ -114873,16 +114888,16 @@ index 4e61388..1a2523d 100644 return -EFAULT; } else { memcpy(target, src, size); -@@ -233,7 +237,7 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos, - if (*fpos < m->offset + m->size) { - tsz = min_t(size_t, m->offset + m->size - *fpos, buflen); +@@ -235,7 +239,7 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos, + m->offset + m->size - *fpos, + buflen); start = m->paddr + *fpos - m->offset; - tmp = read_from_oldmem(buffer, tsz, &start, userbuf); + tmp = read_from_oldmem((char __force_kernel *)buffer, tsz, &start, userbuf); if (tmp < 0) return tmp; buflen -= tsz; -@@ -253,7 +257,7 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos, +@@ -255,7 +259,7 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos, static ssize_t read_vmcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos) { @@ -114892,7 +114907,7 @@ index 4e61388..1a2523d 100644 /* diff --git a/fs/qnx6/qnx6.h b/fs/qnx6/qnx6.h -index d3fb2b6..43a8140 100644 +index f23b5c4..da5d2f3 100644 --- a/fs/qnx6/qnx6.h +++ b/fs/qnx6/qnx6.h @@ -74,7 +74,7 @@ enum { @@ -114936,7 +114951,7 @@ index d07a2f9..380906a 100644 if (!msg_head) { printk(KERN_ERR diff --git a/fs/read_write.c b/fs/read_write.c -index dadf24e..f8ca660 100644 +index cf377cf..86fd2b6 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -23,7 +23,8 @@ @@ -114958,16 +114973,16 @@ index dadf24e..f8ca660 100644 if (count > MAX_RW_COUNT) count = MAX_RW_COUNT; ret = __vfs_write(file, p, count, pos); -@@ -709,7 +710,7 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, +@@ -714,7 +715,7 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, /* Do it by hand, with file-ops */ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, -- loff_t *ppos, io_fn_t fn) -+ loff_t *ppos, io_fnr_t fnr, io_fnw_t fnw) +- loff_t *ppos, io_fn_t fn, int flags) ++ loff_t *ppos, io_fnr_t fnr, io_fnw_t fnw, int flags) { ssize_t ret = 0; -@@ -717,7 +718,10 @@ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, +@@ -725,7 +726,10 @@ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, struct iovec iovec = iov_iter_iovec(iter); ssize_t nr; @@ -114979,7 +114994,7 @@ index dadf24e..f8ca660 100644 if (nr < 0) { if (!ret) -@@ -820,7 +824,8 @@ static ssize_t do_readv_writev(int type, struct file *file, +@@ -829,7 +833,8 @@ static ssize_t do_readv_writev(int type, struct file *file, struct iovec *iov = iovstack; struct iov_iter iter; ssize_t ret; @@ -114989,7 +115004,7 @@ index dadf24e..f8ca660 100644 iter_fn_t iter_fn; ret = import_iovec(type, uvector, nr_segs, -@@ -836,10 +841,12 @@ static ssize_t do_readv_writev(int type, struct file *file, +@@ -845,10 +850,12 @@ static ssize_t do_readv_writev(int type, struct file *file, goto out; if (type == READ) { @@ -115004,16 +115019,16 @@ index dadf24e..f8ca660 100644 iter_fn = file->f_op->write_iter; file_start_write(file); } -@@ -847,7 +854,7 @@ static ssize_t do_readv_writev(int type, struct file *file, +@@ -856,7 +863,7 @@ static ssize_t do_readv_writev(int type, struct file *file, if (iter_fn) - ret = do_iter_readv_writev(file, &iter, pos, iter_fn); + ret = do_iter_readv_writev(file, &iter, pos, iter_fn, flags); else -- ret = do_loop_readv_writev(file, &iter, pos, fn); -+ ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw); +- ret = do_loop_readv_writev(file, &iter, pos, fn, flags); ++ ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw, flags); if (type != READ) file_end_write(file); -@@ -994,7 +1001,8 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, +@@ -1054,7 +1061,8 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, struct iovec *iov = iovstack; struct iov_iter iter; ssize_t ret; @@ -115023,7 +115038,7 @@ index dadf24e..f8ca660 100644 iter_fn_t iter_fn; ret = compat_import_iovec(type, uvector, nr_segs, -@@ -1010,10 +1018,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, +@@ -1070,10 +1078,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, goto out; if (type == READ) { @@ -115038,12 +115053,12 @@ index dadf24e..f8ca660 100644 iter_fn = file->f_op->write_iter; file_start_write(file); } -@@ -1021,7 +1031,7 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, +@@ -1081,7 +1091,7 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, if (iter_fn) - ret = do_iter_readv_writev(file, &iter, pos, iter_fn); + ret = do_iter_readv_writev(file, &iter, pos, iter_fn, flags); else -- ret = do_loop_readv_writev(file, &iter, pos, fn); -+ ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw); +- ret = do_loop_readv_writev(file, &iter, pos, fn, flags); ++ ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw, flags); if (type != READ) file_end_write(file); @@ -115231,10 +115246,10 @@ index 2adcde1..7d27bc8 100644 #define __fs_changed(gen,s) (gen != get_generation (s)) #define fs_changed(gen,s) \ diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c -index c0306ec..4083bee 100644 +index b8f2d1e..5922f16 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c -@@ -1871,6 +1871,10 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) +@@ -1872,6 +1872,10 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) sbi->s_mount_opt |= (1 << REISERFS_SMALLTAIL); sbi->s_mount_opt |= (1 << REISERFS_ERROR_RO); sbi->s_mount_opt |= (1 << REISERFS_BARRIER_FLUSH); @@ -115246,7 +115261,7 @@ index c0306ec..4083bee 100644 sbi->s_alloc_options.preallocmin = 0; /* Preallocate by 16 blocks (17-1) at once */ diff --git a/fs/select.c b/fs/select.c -index 79d0d49..9203954 100644 +index 8692939..44f4aa3 100644 --- a/fs/select.c +++ b/fs/select.c @@ -20,6 +20,7 @@ @@ -115275,7 +115290,7 @@ index 79d0d49..9203954 100644 return -EINVAL; diff --git a/fs/seq_file.c b/fs/seq_file.c -index e85664b..ad62e5f 100644 +index 19f532e..b1e12af 100644 --- a/fs/seq_file.c +++ b/fs/seq_file.c @@ -14,6 +14,8 @@ @@ -115305,17 +115320,18 @@ index e85664b..ad62e5f 100644 return buf; } -@@ -75,6 +77,9 @@ int seq_open(struct file *file, const struct seq_operations *op) - #ifdef CONFIG_USER_NS - p->user_ns = file->f_cred->user_ns; - #endif +@@ -77,6 +79,10 @@ int seq_open(struct file *file, const struct seq_operations *op) + // to the lifetime of the file. + p->file = file; + +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + p->exec_id = current->exec_id; +#endif - ++ /* * Wrappers around seq_open(e.g. swaps_open) need to be -@@ -97,6 +102,16 @@ int seq_open(struct file *file, const struct seq_operations *op) + * aware of this. If they set f_version themselves, they +@@ -98,6 +104,16 @@ int seq_open(struct file *file, const struct seq_operations *op) } EXPORT_SYMBOL(seq_open); @@ -115332,7 +115348,7 @@ index e85664b..ad62e5f 100644 static int traverse(struct seq_file *m, loff_t offset) { loff_t pos = 0, index; -@@ -168,7 +183,7 @@ Eoverflow: +@@ -169,7 +185,7 @@ Eoverflow: ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) { struct seq_file *m = file->private_data; @@ -115341,7 +115357,7 @@ index e85664b..ad62e5f 100644 loff_t pos; size_t n; void *p; -@@ -563,7 +578,7 @@ static void single_stop(struct seq_file *p, void *v) +@@ -564,7 +580,7 @@ static void single_stop(struct seq_file *p, void *v) int single_open(struct file *file, int (*show)(struct seq_file *, void *), void *data) { @@ -115350,7 +115366,7 @@ index e85664b..ad62e5f 100644 int res = -ENOMEM; if (op) { -@@ -599,6 +614,17 @@ int single_open_size(struct file *file, int (*show)(struct seq_file *, void *), +@@ -600,6 +616,17 @@ int single_open_size(struct file *file, int (*show)(struct seq_file *, void *), } EXPORT_SYMBOL(single_open_size); @@ -115369,7 +115385,7 @@ index e85664b..ad62e5f 100644 { const struct seq_operations *op = ((struct seq_file *)file->private_data)->op; diff --git a/fs/splice.c b/fs/splice.c -index 19e0b10..288f7e0 100644 +index dd9bf7e..3d55c3e 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -195,7 +195,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, @@ -115406,8 +115422,8 @@ index 19e0b10..288f7e0 100644 old_fs = get_fs(); set_fs(get_ds()); /* The cast to a user pointer is valid due to the set_fs() */ -- res = vfs_readv(file, (const struct iovec __user *)vec, vlen, &pos); -+ res = vfs_readv(file, (const struct iovec __force_user *)vec, vlen, &pos); +- res = vfs_readv(file, (const struct iovec __user *)vec, vlen, &pos, 0); ++ res = vfs_readv(file, (const struct iovec __force_user *)vec, vlen, &pos, 0); set_fs(old_fs); return res; @@ -115423,7 +115439,7 @@ index 19e0b10..288f7e0 100644 @@ -648,7 +648,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos, goto err; - this_len = min_t(size_t, len, PAGE_CACHE_SIZE - offset); + this_len = min_t(size_t, len, PAGE_SIZE - offset); - vec[i].iov_base = (void __user *) page_address(page); + vec[i].iov_base = (void __force_user *) page_address(page); vec[i].iov_len = this_len; @@ -115460,7 +115476,7 @@ index 19e0b10..288f7e0 100644 sd.need_wakeup = true; } else { buf->offset += ret; -@@ -1197,7 +1197,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, +@@ -1200,7 +1200,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, * out of the pipe right after the splice_to_pipe(). So set * PIPE_READERS appropriately. */ @@ -115469,7 +115485,7 @@ index 19e0b10..288f7e0 100644 current->splice_pipe = pipe; } -@@ -1504,6 +1504,7 @@ static int get_iovec_page_array(const struct iovec __user *iov, +@@ -1507,6 +1507,7 @@ static int get_iovec_page_array(const struct iovec __user *iov, partial[buffers].offset = off; partial[buffers].len = plen; @@ -115477,7 +115493,7 @@ index 19e0b10..288f7e0 100644 off = 0; len -= plen; -@@ -1735,9 +1736,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) +@@ -1738,9 +1739,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) ret = -ERESTARTSYS; break; } @@ -115489,7 +115505,7 @@ index 19e0b10..288f7e0 100644 if (flags & SPLICE_F_NONBLOCK) { ret = -EAGAIN; break; -@@ -1769,7 +1770,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) +@@ -1772,7 +1773,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) pipe_lock(pipe); while (pipe->nrbufs >= pipe->buffers) { @@ -115498,7 +115514,7 @@ index 19e0b10..288f7e0 100644 send_sig(SIGPIPE, current, 0); ret = -EPIPE; break; -@@ -1782,9 +1783,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) +@@ -1785,9 +1786,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) ret = -ERESTARTSYS; break; } @@ -115510,7 +115526,7 @@ index 19e0b10..288f7e0 100644 } pipe_unlock(pipe); -@@ -1820,14 +1821,14 @@ retry: +@@ -1823,14 +1824,14 @@ retry: pipe_double_lock(ipipe, opipe); do { @@ -115527,7 +115543,7 @@ index 19e0b10..288f7e0 100644 break; /* -@@ -1924,7 +1925,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, +@@ -1927,7 +1928,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, pipe_double_lock(ipipe, opipe); do { @@ -115536,7 +115552,7 @@ index 19e0b10..288f7e0 100644 send_sig(SIGPIPE, current, 0); if (!ret) ret = -EPIPE; -@@ -1969,7 +1970,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, +@@ -1972,7 +1973,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, * return EAGAIN if we have the potential of some data in the * future, otherwise just return 0 */ @@ -116078,10 +116094,10 @@ index 4861322..7266aed 100644 } fdput(f); diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c -index ef00156..931d812 100644 +index ce41d7f..0372726 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c -@@ -560,7 +560,7 @@ xfs_bmap_validate_ret( +@@ -557,7 +557,7 @@ xfs_bmap_validate_ret( #else #define xfs_bmap_check_leaf_extents(cur, ip, whichfork) do { } while (0) @@ -116113,7 +116129,7 @@ index 097bf77..ffe3cb3 100644 out_free_map: if (mapp != &map) diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c -index 642d55d..d8ccf82 100644 +index 93b3ab0..3a7a8bb 100644 --- a/fs/xfs/xfs_dir2_readdir.c +++ b/fs/xfs/xfs_dir2_readdir.c @@ -140,7 +140,12 @@ xfs_dir2_sf_getdents( @@ -116131,10 +116147,10 @@ index 642d55d..d8ccf82 100644 return 0; sfep = dp->d_ops->sf_nextentry(sfp, sfep); diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c -index d7a490f..59a8848 100644 +index bf2d607..57fcd59 100644 --- a/fs/xfs/xfs_icache.c +++ b/fs/xfs/xfs_icache.c -@@ -91,13 +91,6 @@ xfs_inode_free_callback( +@@ -94,13 +94,6 @@ xfs_inode_free_callback( struct inode *inode = container_of(head, struct inode, i_rcu); struct xfs_inode *ip = XFS_I(inode); @@ -116145,10 +116161,10 @@ index d7a490f..59a8848 100644 -xfs_inode_free( - struct xfs_inode *ip) -{ - switch (ip->i_d.di_mode & S_IFMT) { + switch (VFS_I(ip)->i_mode & S_IFMT) { case S_IFREG: case S_IFDIR: -@@ -115,6 +108,25 @@ xfs_inode_free( +@@ -118,6 +111,25 @@ xfs_inode_free( ip->i_itemp = NULL; } @@ -116174,7 +116190,7 @@ index d7a490f..59a8848 100644 /* * Because we use RCU freeing we need to ensure the inode always * appears to be reclaimed with an invalid inode number when in the -@@ -126,12 +138,7 @@ xfs_inode_free( +@@ -129,12 +141,7 @@ xfs_inode_free( ip->i_ino = 0; spin_unlock(&ip->i_flags_lock); @@ -116188,7 +116204,7 @@ index d7a490f..59a8848 100644 } /* -@@ -741,8 +748,7 @@ __xfs_inode_set_reclaim_tag( +@@ -772,8 +779,7 @@ __xfs_inode_set_reclaim_tag( if (!pag->pag_ici_reclaimable) { /* propagate the reclaim tag up into the perag radix tree */ spin_lock(&ip->i_mount->m_perag_lock); @@ -116198,7 +116214,7 @@ index d7a490f..59a8848 100644 XFS_ICI_RECLAIM_TAG); spin_unlock(&ip->i_mount->m_perag_lock); -@@ -786,8 +792,7 @@ __xfs_inode_clear_reclaim( +@@ -817,8 +823,7 @@ __xfs_inode_clear_reclaim( if (!pag->pag_ici_reclaimable) { /* clear the reclaim tag from the perag radix tree */ spin_lock(&ip->i_mount->m_perag_lock); @@ -116208,7 +116224,7 @@ index d7a490f..59a8848 100644 XFS_ICI_RECLAIM_TAG); spin_unlock(&ip->i_mount->m_perag_lock); trace_xfs_perag_clear_reclaim(ip->i_mount, pag->pag_agno, -@@ -898,6 +903,7 @@ xfs_reclaim_inode( +@@ -929,6 +934,7 @@ xfs_reclaim_inode( int sync_mode) { struct xfs_buf *bp = NULL; @@ -116216,7 +116232,7 @@ index d7a490f..59a8848 100644 int error; restart: -@@ -962,6 +968,22 @@ restart: +@@ -993,6 +999,22 @@ restart: xfs_iflock(ip); reclaim: @@ -116239,7 +116255,7 @@ index d7a490f..59a8848 100644 xfs_ifunlock(ip); xfs_iunlock(ip, XFS_ILOCK_EXCL); -@@ -975,7 +997,7 @@ reclaim: +@@ -1006,7 +1028,7 @@ reclaim: */ spin_lock(&pag->pag_ici_lock); if (!radix_tree_delete(&pag->pag_ici_root, @@ -116248,7 +116264,7 @@ index d7a490f..59a8848 100644 ASSERT(0); __xfs_inode_clear_reclaim(pag, ip); spin_unlock(&pag->pag_ici_lock); -@@ -992,7 +1014,7 @@ reclaim: +@@ -1023,7 +1045,7 @@ reclaim: xfs_qm_dqdetach(ip); xfs_iunlock(ip, XFS_ILOCK_EXCL); @@ -116258,10 +116274,10 @@ index d7a490f..59a8848 100644 out_ifunlock: diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c -index c738a52..658eea8 100644 +index 3cbc903..e3b2798 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c -@@ -3259,6 +3259,19 @@ xfs_iflush_cluster( +@@ -3239,6 +3239,19 @@ xfs_iflush_cluster( continue; } @@ -116282,7 +116298,7 @@ index c738a52..658eea8 100644 * arriving here means that this inode can be flushed. First * re-check that it's dirty before flushing. diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c -index 478d04e..3d6a86b 100644 +index bcb6c19..ef1bc0d 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -121,7 +121,7 @@ xfs_find_handle( @@ -116295,7 +116311,7 @@ index 478d04e..3d6a86b 100644 goto out_put; diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h -index ec0e239..ab85b22 100644 +index a8192dc..558d20a 100644 --- a/fs/xfs/xfs_linux.h +++ b/fs/xfs/xfs_linux.h @@ -218,7 +218,7 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid) @@ -121325,10 +121341,10 @@ index 0000000..fce7f71 +} diff --git a/grsecurity/gracl_ip.c b/grsecurity/gracl_ip.c new file mode 100644 -index 0000000..ed6ee43 +index 0000000..950647c --- /dev/null +++ b/grsecurity/gracl_ip.c -@@ -0,0 +1,386 @@ +@@ -0,0 +1,387 @@ +#include <linux/kernel.h> +#include <asm/uaccess.h> +#include <asm/errno.h> @@ -121395,11 +121411,12 @@ index 0000000..ed6ee43 + "unknown:7", "unknown:8", "unknown:9", "packet" + }; + -+static const char * gr_sockfamilies[AF_MAX+1] = { ++static const char * gr_sockfamilies[AF_MAX] = { + "unspec", "unix", "inet", "ax25", "ipx", "appletalk", "netrom", "bridge", "atmpvc", "x25", + "inet6", "rose", "decnet", "netbeui", "security", "key", "netlink", "packet", "ash", + "econet", "atmsvc", "rds", "sna", "irda", "ppox", "wanpipe", "llc", "fam_27", "fam_28", -+ "tipc", "bluetooth", "iucv", "rxrpc", "isdn", "phonet", "ieee802154", "ciaf", "alg", "nfc", "vsock" ++ "tipc", "bluetooth", "iucv", "rxrpc", "isdn", "phonet", "ieee802154", "ciaf", "alg", ++ "nfc", "vsock", "kcm" + }; + +const char * @@ -121930,7 +121947,7 @@ index 0000000..25f54ef +}; diff --git a/grsecurity/gracl_policy.c b/grsecurity/gracl_policy.c new file mode 100644 -index 0000000..2fc92ec +index 0000000..696d76d --- /dev/null +++ b/grsecurity/gracl_policy.c @@ -0,0 +1,1784 @@ @@ -123416,7 +123433,7 @@ index 0000000..2fc92ec + +#ifdef CONFIG_COMPAT + pax_open_kernel(); -+ if (is_compat_task()) { ++ if (in_compat_syscall()) { + copy_gr_arg_wrapper = ©_gr_arg_wrapper_compat; + copy_gr_arg = ©_gr_arg_compat; + copy_acl_object_label = ©_acl_object_label_compat; @@ -127565,10 +127582,10 @@ index 0000000..ae02d8e +EXPORT_SYMBOL_GPL(gr_handle_new_usb); diff --git a/grsecurity/grsum.c b/grsecurity/grsum.c new file mode 100644 -index 0000000..aef6b92 +index 0000000..1af1e63 --- /dev/null +++ b/grsecurity/grsum.c -@@ -0,0 +1,54 @@ +@@ -0,0 +1,56 @@ +#include <linux/err.h> +#include <linux/kernel.h> +#include <linux/sched.h> @@ -127577,6 +127594,7 @@ index 0000000..aef6b92 +#include <linux/crypto.h> +#include <linux/gracl.h> +#include <crypto/algapi.h> ++#include <crypto/hash.h> + +#if !defined(CONFIG_CRYPTO) || defined(CONFIG_CRYPTO_MODULE) || !defined(CONFIG_CRYPTO_SHA256) || defined(CONFIG_CRYPTO_SHA256_MODULE) +#error "crypto and sha256 must be built into the kernel" @@ -127585,41 +127603,42 @@ index 0000000..aef6b92 +int +chkpw(struct gr_arg *entry, unsigned char *salt, unsigned char *sum) +{ -+ struct crypto_hash *tfm; -+ struct hash_desc desc; ++ struct crypto_ahash *tfm; ++ struct ahash_request *req; + struct scatterlist sg[2]; -+ unsigned char temp_sum[GR_SHA_LEN] __attribute__((aligned(__alignof__(unsigned long)))); ++ unsigned char temp_sum[GR_SHA_LEN]; + unsigned long *tmpsumptr = (unsigned long *)temp_sum; + unsigned long *sumptr = (unsigned long *)sum; -+ int cryptres; + int retval = 1; + -+ tfm = crypto_alloc_hash("sha256", 0, CRYPTO_ALG_ASYNC); -+ if (IS_ERR(tfm)) { -+ /* should never happen, since sha256 should be built in */ -+ memset(entry->pw, 0, GR_PW_LEN); -+ return 1; -+ } ++ tfm = crypto_alloc_ahash("sha256", 0, CRYPTO_ALG_ASYNC); ++ if (IS_ERR(tfm)) ++ goto out_wipe; + + sg_init_table(sg, 2); + sg_set_buf(&sg[0], salt, GR_SALT_LEN); + sg_set_buf(&sg[1], entry->pw, strlen((const char *)entry->pw)); + -+ desc.tfm = tfm; -+ desc.flags = 0; -+ -+ cryptres = crypto_hash_digest(&desc, sg, GR_SALT_LEN + strlen((const char *)entry->pw), -+ temp_sum); ++ req = ahash_request_alloc(tfm, GFP_KERNEL); ++ if (!req) { ++ crypto_free_ahash(tfm); ++ goto out_wipe; ++ } + -+ memset(entry->pw, 0, GR_PW_LEN); ++ ahash_request_set_callback(req, 0, NULL, NULL); ++ ahash_request_set_crypt(req, sg, temp_sum, GR_SALT_LEN + strlen((const char *)entry->pw)); + -+ if (cryptres) -+ goto out; ++ if (crypto_ahash_digest(req)) ++ goto out_free; + + if (!crypto_memneq(sumptr, tmpsumptr, GR_SHA_LEN)) + retval = 0; -+out: -+ crypto_free_hash(tfm); ++ ++out_free: ++ ahash_request_free(req); ++ crypto_free_ahash(tfm); ++out_wipe: ++ memset(entry->pw, 0, GR_PW_LEN); + + return retval; +} @@ -127652,7 +127671,7 @@ index 5bdab6b..9ae82fe 100644 #define pud_none(pud) 0 #define pud_bad(pud) 0 diff --git a/include/asm-generic/atomic-long.h b/include/asm-generic/atomic-long.h -index eb1973b..76f4987 100644 +index 5e1f345..e7a174a 100644 --- a/include/asm-generic/atomic-long.h +++ b/include/asm-generic/atomic-long.h @@ -22,6 +22,12 @@ @@ -127754,12 +127773,24 @@ index eb1973b..76f4987 100644 #undef ATOMIC_LONG_ADD_SUB_OP -@@ -105,6 +121,15 @@ static inline void atomic_long_inc(atomic_long_t *l) +@@ -98,6 +114,11 @@ ATOMIC_LONG_ADD_SUB_OP(sub, _release) + #define atomic_long_xchg(v, new) \ + (ATOMIC_LONG_PFX(_xchg)((ATOMIC_LONG_PFX(_t) *)(v), (new))) + ++#ifdef CONFIG_PAX_REFCOUNT ++#define atomic_long_xchg_unchecked(v, new) \ ++ (ATOMIC_LONG_PFX(_xchg_unchecked)((ATOMIC_LONG_PFX(_unchecked_t) *)(v), (new))) ++#endif ++ + static __always_inline void atomic_long_inc(atomic_long_t *l) + { + ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; +@@ -105,6 +126,15 @@ static __always_inline void atomic_long_inc(atomic_long_t *l) ATOMIC_LONG_PFX(_inc)(v); } +#ifdef CONFIG_PAX_REFCOUNT -+static inline void atomic_long_inc_unchecked(atomic_long_unchecked_t *l) ++static __always_inline void atomic_long_inc_unchecked(atomic_long_unchecked_t *l) +{ + ATOMIC_LONG_PFX(_unchecked_t) *v = (ATOMIC_LONG_PFX(_unchecked_t) *)l; + @@ -127767,16 +127798,16 @@ index eb1973b..76f4987 100644 +} +#endif + - static inline void atomic_long_dec(atomic_long_t *l) + static __always_inline void atomic_long_dec(atomic_long_t *l) { ATOMIC_LONG_PFX(_t) *v = (ATOMIC_LONG_PFX(_t) *)l; -@@ -112,21 +137,32 @@ static inline void atomic_long_dec(atomic_long_t *l) +@@ -112,21 +142,32 @@ static __always_inline void atomic_long_dec(atomic_long_t *l) ATOMIC_LONG_PFX(_dec)(v); } -#define ATOMIC_LONG_OP(op) \ +#ifdef CONFIG_PAX_REFCOUNT -+static inline void atomic_long_dec_unchecked(atomic_long_unchecked_t *l) ++static __always_inline void atomic_long_dec_unchecked(atomic_long_unchecked_t *l) +{ + ATOMIC_LONG_PFX(_unchecked_t) *v = (ATOMIC_LONG_PFX(_unchecked_t) *)l; + @@ -127785,7 +127816,7 @@ index eb1973b..76f4987 100644 +#endif + +#define ATOMIC_LONG_OP(op, suffix) \ - static inline void \ + static __always_inline void \ -atomic_long_##op(long i, atomic_long_t *l) \ +atomic_long_##op##suffix(long i, atomic_long##suffix##_t *l) \ { \ @@ -127813,7 +127844,7 @@ index eb1973b..76f4987 100644 #undef ATOMIC_LONG_OP -@@ -158,22 +194,23 @@ static inline int atomic_long_add_negative(long i, atomic_long_t *l) +@@ -158,22 +199,23 @@ static inline int atomic_long_add_negative(long i, atomic_long_t *l) return ATOMIC_LONG_PFX(_add_negative)(i, v); } @@ -127849,7 +127880,7 @@ index eb1973b..76f4987 100644 #undef ATOMIC_LONG_INC_DEC_OP -@@ -187,4 +224,55 @@ static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) +@@ -187,4 +229,56 @@ static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) #define atomic_long_inc_not_zero(l) \ ATOMIC_LONG_PFX(_inc_not_zero)((ATOMIC_LONG_PFX(_t) *)(l)) @@ -127902,6 +127933,7 @@ index eb1973b..76f4987 100644 +#define atomic_long_add_return_unchecked(i, v) atomic_long_add_return((i), (v)) +#define atomic_long_inc_return_unchecked(v) atomic_long_inc_return(v) +#define atomic_long_dec_unchecked(v) atomic_long_dec(v) ++#define atomic_long_xchg_unchecked(v, i) atomic_long_xchg((v), (i)) +#endif + #endif /* _ASM_GENERIC_ATOMIC_LONG_H */ @@ -127982,7 +128014,7 @@ index b097cf8..3d40e14 100644 if (x == 0) return 0; diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h -index 630dd23..8c1dcb6b 100644 +index 6f96247..4cdf266 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h @@ -62,13 +62,13 @@ struct bug_entry { @@ -128170,7 +128202,7 @@ index 810431d..0ec4804f 100644 * (puds are folded into pgds so this doesn't get actually called, * but the define is needed for a generic inline function.) diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h -index c370b26..24a0dae 100644 +index 9401f48..7e86f97 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -757,6 +757,22 @@ static inline int pmd_protnone(pmd_t pmd) @@ -128234,18 +128266,18 @@ index 1bfa602..aab89b1 100644 + #endif /* __ASM_GENERIC_UACCESS_H */ diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h -index c4bd0e2..ca4ca5a9 100644 +index 339125b..903c9bf 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -256,6 +256,7 @@ - .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start_rodata) = .; \ *(.rodata) *(.rodata.*) \ + *(.data..ro_after_init) /* Read only after init */ \ + *(.data..read_only) \ *(__vermagic) /* Kernel version magic */ \ . = ALIGN(8); \ VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \ -@@ -512,6 +513,7 @@ +@@ -522,6 +523,7 @@ KERNEL_CTORS() \ MCOUNT_REC() \ *(.init.rodata) \ @@ -128253,7 +128285,7 @@ index c4bd0e2..ca4ca5a9 100644 FTRACE_EVENTS() \ TRACE_SYSCALLS() \ KPROBE_BLACKLIST() \ -@@ -535,6 +537,8 @@ +@@ -544,6 +546,8 @@ #define EXIT_DATA \ *(.exit.data) \ @@ -128262,7 +128294,7 @@ index c4bd0e2..ca4ca5a9 100644 MEM_DISCARD(exit.data) \ MEM_DISCARD(exit.rodata) -@@ -751,17 +755,18 @@ +@@ -760,17 +764,18 @@ * section in the linker script will go there too. @phdr should have * a leading colon. * @@ -128285,7 +128317,7 @@ index c4bd0e2..ca4ca5a9 100644 /** * PERCPU_SECTION - define output section for percpu area, simple version -@@ -823,12 +828,14 @@ +@@ -832,12 +837,14 @@ #define INIT_DATA_SECTION(initsetup_align) \ .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { \ @@ -128301,10 +128333,10 @@ index c4bd0e2..ca4ca5a9 100644 #define BSS_SECTION(sbss_align, bss_align, stop_align) \ diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h -index c9fe145..9fb2337 100644 +index eeafd21..9fdfff1 100644 --- a/include/crypto/algapi.h +++ b/include/crypto/algapi.h -@@ -37,7 +37,7 @@ struct crypto_type { +@@ -38,7 +38,7 @@ struct crypto_type { unsigned int maskclear; unsigned int maskset; unsigned int tfmsize; @@ -128342,10 +128374,10 @@ index b7e0941..1a1f67f 100644 #endif diff --git a/include/crypto/xts.h b/include/crypto/xts.h -index 72c09eb..c5c3a06 100644 +index ede6b97..1f5b11f 100644 --- a/include/crypto/xts.h +++ b/include/crypto/xts.h -@@ -18,7 +18,7 @@ struct xts_crypt_req { +@@ -21,7 +21,7 @@ struct xts_crypt_req { void (*crypt_fn)(void *ctx, u8 *blks, unsigned int nbytes); }; @@ -128355,7 +128387,7 @@ index 72c09eb..c5c3a06 100644 int xts_crypt(struct blkcipher_desc *desc, struct scatterlist *dst, struct scatterlist *src, unsigned int nbytes, diff --git a/include/drm/drmP.h b/include/drm/drmP.h -index d7162cf..709bbda 100644 +index 3c8422c..251247f 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -59,6 +59,7 @@ @@ -128393,7 +128425,7 @@ index d7162cf..709bbda 100644 /** * Creates a driver or general drm_ioctl_desc array entry for the given -@@ -654,7 +657,8 @@ struct drm_driver { +@@ -656,7 +659,8 @@ struct drm_driver { /* List of devices hanging off this driver with stealth attach. */ struct list_head legacy_dev_list; @@ -128403,7 +128435,7 @@ index d7162cf..709bbda 100644 enum drm_minor_type { DRM_MINOR_LEGACY, -@@ -672,7 +676,8 @@ struct drm_info_list { +@@ -674,7 +678,8 @@ struct drm_info_list { int (*show)(struct seq_file*, void*); /** show callback */ u32 driver_features; /**< Required driver features for this entry */ void *data; @@ -128413,7 +128445,7 @@ index d7162cf..709bbda 100644 /** * debugfs node structure. This structure represents a debugfs file. -@@ -761,7 +766,7 @@ struct drm_device { +@@ -763,7 +768,7 @@ struct drm_device { /** \name Usage Counters */ /*@{ */ @@ -128436,7 +128468,7 @@ index fc65118..7d80068 100644 bool drm_mm_clean(struct drm_mm *mm); diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h -index a126a0d..8ad2332 100644 +index b61c2d4..7b8686d 100644 --- a/include/drm/drm_modeset_helper_vtables.h +++ b/include/drm/drm_modeset_helper_vtables.h @@ -638,7 +638,7 @@ struct drm_encoder_helper_funcs { @@ -128448,8 +128480,16 @@ index a126a0d..8ad2332 100644 /** * drm_encoder_helper_add - sets the helper vtable for an encoder +@@ -772,6 +772,7 @@ struct drm_connector_helper_funcs { + struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector, + struct drm_connector_state *connector_state); + }; ++typedef struct drm_connector_helper_funcs __no_const drm_connector_helper_funcs_no_const; + + /** + * drm_connector_helper_add - sets the helper vtable for a connector diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h -index f970209..77a4901 100644 +index 9094599..19d0c344 100644 --- a/include/drm/i915_pciids.h +++ b/include/drm/i915_pciids.h @@ -37,7 +37,7 @@ @@ -128576,10 +128616,10 @@ index c1da539..1dcec55 100644 struct atmphy_ops { int (*start)(struct atm_dev *dev); diff --git a/include/linux/atomic.h b/include/linux/atomic.h -index 301de78..f5f8e42 100644 +index 506c353..414ddeb 100644 --- a/include/linux/atomic.h +++ b/include/linux/atomic.h -@@ -103,6 +103,11 @@ +@@ -113,6 +113,11 @@ #define atomic_inc_return(...) \ __atomic_op_fence(atomic_inc_return, __VA_ARGS__) #endif @@ -128591,7 +128631,7 @@ index 301de78..f5f8e42 100644 #endif /* atomic_inc_return_relaxed */ /* atomic_sub_return_relaxed */ -@@ -255,6 +260,11 @@ +@@ -265,6 +270,11 @@ #define atomic64_inc_return(...) \ __atomic_op_fence(atomic64_inc_return, __VA_ARGS__) #endif @@ -128603,7 +128643,7 @@ index 301de78..f5f8e42 100644 #endif /* atomic64_inc_return_relaxed */ -@@ -432,7 +442,7 @@ +@@ -442,7 +452,7 @@ * Atomically adds @a to @v, so long as @v was not already @u. * Returns non-zero if @v was not @u, and zero otherwise. */ @@ -128613,10 +128653,10 @@ index 301de78..f5f8e42 100644 return __atomic_add_unless(v, a, u) != u; } diff --git a/include/linux/audit.h b/include/linux/audit.h -index b40ed5d..16411f5 100644 +index e38e3fc..f426dd5 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h -@@ -331,7 +331,7 @@ static inline void audit_ptrace(struct task_struct *t) +@@ -335,7 +335,7 @@ static inline void audit_ptrace(struct task_struct *t) extern unsigned int audit_serial(void); extern int auditsc_get_stamp(struct audit_context *ctx, struct timespec *t, unsigned int *serial); @@ -128664,10 +128704,10 @@ index 576e463..28fd926 100644 extern void __register_binfmt(struct linux_binfmt *fmt, int insert); diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h -index 9653fdb..b3d3a17 100644 +index e9b0b9a..4fc3241 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h -@@ -295,7 +295,7 @@ static inline int bitmap_full(const unsigned long *src, unsigned int nbits) +@@ -305,7 +305,7 @@ static inline int bitmap_full(const unsigned long *src, unsigned int nbits) return find_first_zero_bit(src, nbits) == nbits; } @@ -128812,10 +128852,10 @@ index c02e669..439bd4b 100644 } diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index 413c84f..f526678 100644 +index 669e419..3cacec8 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h -@@ -1666,7 +1666,7 @@ struct block_device_operations { +@@ -1669,7 +1669,7 @@ struct block_device_operations { void (*swap_slot_free_notify) (struct block_device *, unsigned long); struct module *owner; const struct pr_ops *pr_ops; @@ -128838,29 +128878,30 @@ index afc1343..9735539 100644 extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); diff --git a/include/linux/cache.h b/include/linux/cache.h -index 17e7e82d..1d7da26 100644 +index 1be04f8..9c2d3e2 100644 --- a/include/linux/cache.h +++ b/include/linux/cache.h -@@ -16,6 +16,14 @@ - #define __read_mostly - #endif - -+#ifndef __read_only +@@ -26,6 +26,15 @@ + * after mark_rodata_ro() has been called). These are effectively read-only, + * but may get written to during init, so can't live in .rodata (via "const"). + */ +#ifdef CONFIG_PAX_KERNEXEC -+#error KERNEXEC requires __read_only ++# ifdef __ro_after_init ++# error KERNEXEC requires __read_only ++# endif ++# define __read_only __attribute__((__section__(".data..read_only"))) +#else -+#define __read_only __read_mostly -+#endif ++# define __read_only __read_mostly +#endif + - #ifndef ____cacheline_aligned - #define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES))) + #ifndef __ro_after_init + #define __ro_after_init __attribute__((__section__(".data..ro_after_init"))) #endif diff --git a/include/linux/capability.h b/include/linux/capability.h -index f314275..96c8185 100644 +index 00690ff..b9c971b 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h -@@ -231,15 +231,28 @@ static inline bool capable(int cap) +@@ -229,15 +229,28 @@ static inline bool capable(int cap) { return true; } @@ -128902,10 +128943,10 @@ index 8609d57..86e4d79 100644 int (*generic_packet) (struct cdrom_device_info *, struct packet_command *); diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h -index 7fc7cb7..5de1aa8 100644 +index 5b17de6..d75785b 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h -@@ -424,7 +424,7 @@ struct cftype { +@@ -427,7 +427,7 @@ struct cftype { #ifdef CONFIG_DEBUG_LOCK_ALLOC struct lock_class_key lockdep_key; #endif @@ -128928,7 +128969,7 @@ index fccf7f4..1d5925e 100644 extern int cleancache_register_ops(const struct cleancache_ops *ops); extern void __cleancache_init_fs(struct super_block *); diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h -index 408a60d..a9d9978 100644 +index da95258..2d00aec 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -215,6 +215,7 @@ struct clk_ops { @@ -128940,10 +128981,10 @@ index 408a60d..a9d9978 100644 /** * struct clk_init_data - holds init data that's common to all clocks and is diff --git a/include/linux/compat.h b/include/linux/compat.h -index a76c917..75d6aeb 100644 +index f964ef7..0679632 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h -@@ -45,14 +45,15 @@ +@@ -47,14 +47,15 @@ COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ @@ -128963,7 +129004,7 @@ index a76c917..75d6aeb 100644 static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)) #ifndef compat_user_stack_pointer -@@ -316,7 +317,7 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, +@@ -318,7 +319,7 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, compat_size_t __user *len_ptr); asmlinkage long compat_sys_ipc(u32, int, int, u32, compat_uptr_t, u32); @@ -128972,7 +129013,7 @@ index a76c917..75d6aeb 100644 asmlinkage long compat_sys_semctl(int semid, int semnum, int cmd, int arg); asmlinkage long compat_sys_msgsnd(int msqid, compat_uptr_t msgp, compat_ssize_t msgsz, int msgflg); -@@ -325,7 +326,7 @@ asmlinkage long compat_sys_msgrcv(int msqid, compat_uptr_t msgp, +@@ -327,7 +328,7 @@ asmlinkage long compat_sys_msgrcv(int msqid, compat_uptr_t msgp, long compat_sys_msgctl(int first, int second, void __user *uptr); long compat_sys_shmctl(int first, int second, void __user *uptr); long compat_sys_semtimedop(int semid, struct sembuf __user *tsems, @@ -128981,7 +129022,7 @@ index a76c917..75d6aeb 100644 asmlinkage long compat_sys_keyctl(u32 option, u32 arg2, u32 arg3, u32 arg4, u32 arg5); asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32); -@@ -439,7 +440,7 @@ extern int compat_ptrace_request(struct task_struct *child, +@@ -447,7 +448,7 @@ extern int compat_ptrace_request(struct task_struct *child, extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request, compat_ulong_t addr, compat_ulong_t data); asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, @@ -128991,7 +129032,7 @@ index a76c917..75d6aeb 100644 asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t); /* diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h -index eeae401..985c04d 100644 +index 3d5202e..d1f59fe 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h @@ -116,9 +116,9 @@ @@ -129050,7 +129091,7 @@ index eeae401..985c04d 100644 * Mark a position in code as unreachable. This can be used to * suppress control flow warnings after asm blocks that transfer diff --git a/include/linux/compiler.h b/include/linux/compiler.h -index 48f5aab..4206700 100644 +index b5ff988..c71686f 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -5,11 +5,14 @@ @@ -129068,7 +129109,7 @@ index 48f5aab..4206700 100644 # define __must_hold(x) __attribute__((context(x,1,1))) # define __acquires(x) __attribute__((context(x,0,1))) # define __releases(x) __attribute__((context(x,1,0))) -@@ -17,33 +20,78 @@ +@@ -17,35 +20,80 @@ # define __release(x) __context__(x,-1) # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) # define __percpu __attribute__((noderef, address_space(3))) @@ -129078,13 +129119,15 @@ index 48f5aab..4206700 100644 #ifdef CONFIG_SPARSE_RCU_POINTER # define __rcu __attribute__((noderef, address_space(4))) +# define __force_rcu __force __rcu - #else + #else /* CONFIG_SPARSE_RCU_POINTER */ # define __rcu +# define __force_rcu - #endif + #endif /* CONFIG_SPARSE_RCU_POINTER */ + # define __private __attribute__((noderef)) extern void __chk_user_ptr(const volatile void __user *); extern void __chk_io_ptr(const volatile void __iomem *); - #else + # define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member)) + #else /* __CHECKER__ */ -# define __user -# define __kernel +# ifdef CHECKER_PLUGIN @@ -129152,10 +129195,10 @@ index 48f5aab..4206700 100644 +# define __force_rcu # define __pmem +# define __force_pmem - #endif - - /* Indirect macros required for expanded argument pasting, eg. __LINE__. */ -@@ -198,29 +246,20 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); + # define __private + # define ACCESS_PRIVATE(p, member) ((p)->member) + #endif /* __CHECKER__ */ +@@ -202,29 +250,20 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); #include <uapi/linux/types.h> @@ -129197,7 +129240,7 @@ index 48f5aab..4206700 100644 * with inlining. Attempt to inline it may cause a build failure. * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368 * '__maybe_unused' allows us to avoid defined-but-not-used warnings. -@@ -228,29 +267,20 @@ void __read_once_size(const volatile void *p, void *res, int size) +@@ -232,29 +271,20 @@ void __read_once_size(const volatile void *p, void *res, int size) static __no_sanitize_address __maybe_unused void __read_once_size_nocheck(const volatile void *p, void *res, int size) { @@ -129235,7 +129278,7 @@ index 48f5aab..4206700 100644 /* * Prevent the compiler from merging or refetching reads or writes. The -@@ -274,29 +304,15 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s +@@ -279,29 +309,15 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s * required ordering. */ @@ -129272,7 +129315,7 @@ index 48f5aab..4206700 100644 }) /** -@@ -416,6 +432,42 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s +@@ -421,6 +437,42 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s # define __attribute_const__ /* unimplemented */ #endif @@ -129315,7 +129358,7 @@ index 48f5aab..4206700 100644 /* * Tell gcc if a function is cold. The compiler will assume any path * directly leading to the call is unlikely. -@@ -425,6 +477,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s +@@ -430,6 +482,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s #define __cold #endif @@ -129338,7 +129381,7 @@ index 48f5aab..4206700 100644 /* Simple shorthand for a section definition */ #ifndef __section # define __section(S) __attribute__ ((__section__(#S))) -@@ -447,6 +515,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s +@@ -452,6 +520,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) #endif @@ -129347,7 +129390,7 @@ index 48f5aab..4206700 100644 /* Is this type a native word size -- useful for atomic operations */ #ifndef __native_word # define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) -@@ -526,8 +596,9 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s +@@ -531,8 +601,9 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s */ #define __ACCESS_ONCE(x) ({ \ __maybe_unused typeof(x) __var = (__force typeof(x)) 0; \ @@ -129359,10 +129402,10 @@ index 48f5aab..4206700 100644 /** * lockless_dereference() - safely load a pointer for later dereference diff --git a/include/linux/configfs.h b/include/linux/configfs.h -index f8165c1..4a757b2 100644 +index d9d6a9d..489772c 100644 --- a/include/linux/configfs.h +++ b/include/linux/configfs.h -@@ -129,7 +129,7 @@ struct configfs_attribute { +@@ -136,7 +136,7 @@ struct configfs_attribute { umode_t ca_mode; ssize_t (*show)(struct config_item *, char *); ssize_t (*store)(struct config_item *, const char *, size_t); @@ -129372,10 +129415,10 @@ index f8165c1..4a757b2 100644 #define CONFIGFS_ATTR(_pfx, _name) \ static struct configfs_attribute _pfx##attr_##_name = { \ diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h -index 88a4215..3ef686f 100644 +index 718e872..e16712a 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h -@@ -206,10 +206,11 @@ __ATTR(_name, 0644, show_##_name, store_##_name) +@@ -201,10 +201,11 @@ __ATTR(_name, 0644, show_##_name, store_##_name) struct global_attr { struct attribute attr; ssize_t (*show)(struct kobject *kobj, @@ -129389,7 +129432,7 @@ index 88a4215..3ef686f 100644 #define define_one_global_ro(_name) \ static struct global_attr _name = \ -@@ -280,7 +281,7 @@ struct cpufreq_driver { +@@ -275,7 +276,7 @@ struct cpufreq_driver { /* platform specific boost support code */ bool boost_enabled; int (*set_boost)(int state); @@ -129422,7 +129465,7 @@ index 786ad32..09d1fb1 100644 #ifdef CONFIG_CPU_IDLE extern int cpuidle_register_governor(struct cpuidle_governor *gov); diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h -index fc14275..8e1074d 100644 +index 40cee6b..daa215f 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h @@ -131,17 +131,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp) @@ -129483,7 +129526,7 @@ index fc14275..8e1074d 100644 return bitmap_weight(cpumask_bits(srcp), nr_cpumask_bits); } diff --git a/include/linux/cred.h b/include/linux/cred.h -index 8d70e13..37dfbd2 100644 +index 257db64..a73cf86 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h @@ -35,7 +35,7 @@ struct group_info { @@ -129523,19 +129566,19 @@ index 8d70e13..37dfbd2 100644 #define current_cred_xxx(xxx) \ ({ \ diff --git a/include/linux/crypto.h b/include/linux/crypto.h -index e71cb70..0e90b90 100644 +index 99c9489..55a6de8 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h -@@ -517,7 +517,7 @@ struct cipher_tfm { +@@ -510,7 +510,7 @@ struct cipher_tfm { const u8 *key, unsigned int keylen); void (*cit_encrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); void (*cit_decrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); -}; +} __no_const; - struct hash_tfm { - int (*init)(struct hash_desc *desc); -@@ -538,7 +538,7 @@ struct compress_tfm { + struct compress_tfm { + int (*cot_compress)(struct crypto_tfm *tfm, +@@ -519,7 +519,7 @@ struct compress_tfm { int (*cot_decompress)(struct crypto_tfm *tfm, const u8 *src, unsigned int slen, u8 *dst, unsigned int *dlen); @@ -129558,7 +129601,7 @@ index 653589e..4ef254a 100644 return c | 0x20; } diff --git a/include/linux/dcache.h b/include/linux/dcache.h -index 96c1a2d..dc7bc21 100644 +index 7e9422c..a1181c6 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -123,6 +123,9 @@ struct dentry { @@ -129580,7 +129623,7 @@ index 96c1a2d..dc7bc21 100644 /* * dentry->d_lock spinlock nesting subclasses: -@@ -323,7 +326,7 @@ extern struct dentry *__d_lookup_rcu(const struct dentry *parent, +@@ -296,7 +299,7 @@ extern struct dentry *__d_lookup_rcu(const struct dentry *parent, static inline unsigned d_count(const struct dentry *dentry) { @@ -129589,7 +129632,7 @@ index 96c1a2d..dc7bc21 100644 } /* -@@ -352,7 +355,7 @@ extern char *dentry_path(struct dentry *, char *, int); +@@ -325,7 +328,7 @@ extern char *dentry_path(struct dentry *, char *, int); static inline struct dentry *dget_dlock(struct dentry *dentry) { if (dentry) @@ -129625,10 +129668,10 @@ index 6fa02a2..aac3093 100644 /** * struct devfreq - Device devfreq structure diff --git a/include/linux/device.h b/include/linux/device.h -index 6d6f1fe..148f294 100644 +index 002c597..b8d6f1a 100644 --- a/include/linux/device.h +++ b/include/linux/device.h -@@ -343,7 +343,7 @@ struct subsys_interface { +@@ -346,7 +346,7 @@ struct subsys_interface { struct list_head node; int (*add_dev)(struct device *dev, struct subsys_interface *sif); void (*remove_dev)(struct device *dev, struct subsys_interface *sif); @@ -129637,7 +129680,7 @@ index 6d6f1fe..148f294 100644 int subsys_interface_register(struct subsys_interface *sif); void subsys_interface_unregister(struct subsys_interface *sif); -@@ -539,7 +539,7 @@ struct device_type { +@@ -542,7 +542,7 @@ struct device_type { void (*release)(struct device *dev); const struct dev_pm_ops *pm; @@ -129646,7 +129689,7 @@ index 6d6f1fe..148f294 100644 /* interface for exporting device attributes */ struct device_attribute { -@@ -549,11 +549,12 @@ struct device_attribute { +@@ -552,11 +552,12 @@ struct device_attribute { ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); }; @@ -129661,7 +129704,7 @@ index 6d6f1fe..148f294 100644 ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr, char *buf); diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h -index 728ef07..8a9e7f5 100644 +index 9ea9aba..16b56d0 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -68,7 +68,7 @@ struct dma_map_ops { @@ -129671,14 +129714,14 @@ index 728ef07..8a9e7f5 100644 -}; +} __do_const; - #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) + extern struct dma_map_ops dma_noop_ops; diff --git a/include/linux/efi.h b/include/linux/efi.h -index 47be3ad..b2b1b58 100644 +index 1626474..5a604e6 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -1094,6 +1094,7 @@ struct efivar_operations { - efi_set_variable_nonblocking_t *set_variable_nonblocking; +@@ -1123,6 +1123,7 @@ struct efivar_operations { + efi_set_variable_t *set_variable_nonblocking; efi_query_variable_store_t *query_variable_store; }; +typedef struct efivar_operations __no_const efivar_operations_no_const; @@ -129738,10 +129781,10 @@ index 7abf674..c0a73a0 100644 /** diff --git a/include/linux/fb.h b/include/linux/fb.h -index 55433f8..37437b8 100644 +index dfe8835..4e9e29a 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h -@@ -323,7 +323,8 @@ struct fb_ops { +@@ -320,7 +320,8 @@ struct fb_ops { /* called at KDB enter and leave time to prepare the console */ int (*fb_debug_enter)(struct fb_info *info); int (*fb_debug_leave)(struct fb_info *info); @@ -129778,10 +129821,10 @@ index d4b7683..9feb066 100644 int fw_iso_context_queue(struct fw_iso_context *ctx, struct fw_iso_packet *packet, diff --git a/include/linux/fs.h b/include/linux/fs.h -index 83c77b0..b0421bd 100644 +index 70e61b5..facf0ed 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -441,7 +441,7 @@ struct address_space { +@@ -444,7 +444,7 @@ struct address_space { spinlock_t private_lock; /* for use by the address_space */ struct list_head private_list; /* ditto */ void *private_data; /* ditto */ @@ -129790,7 +129833,7 @@ index 83c77b0..b0421bd 100644 /* * On most architectures that alignment is already the case; but * must be enforced here for CRIS, to let the least significant bit -@@ -484,7 +484,7 @@ struct block_device { +@@ -487,7 +487,7 @@ struct block_device { int bd_fsfreeze_count; /* Mutex for freeze */ struct mutex bd_fsfreeze_mutex; @@ -129799,7 +129842,7 @@ index 83c77b0..b0421bd 100644 /* * Radix-tree tags, for tagging dirty and writeback pages within the pagecache -@@ -679,7 +679,7 @@ struct inode { +@@ -686,7 +686,7 @@ struct inode { #endif void *i_private; /* fs or device private pointer */ @@ -129808,7 +129851,7 @@ index 83c77b0..b0421bd 100644 static inline int inode_unhashed(struct inode *inode) { -@@ -899,7 +899,7 @@ struct file { +@@ -906,7 +906,7 @@ struct file { struct list_head f_tfile_llink; #endif /* #ifdef CONFIG_EPOLL */ struct address_space *f_mapping; @@ -129817,7 +129860,7 @@ index 83c77b0..b0421bd 100644 struct file_handle { __u32 handle_bytes; -@@ -1034,7 +1034,7 @@ struct file_lock { +@@ -1041,7 +1041,7 @@ struct file_lock { int state; /* state of grant or error if -ve */ } afs; } fl_u; @@ -129826,7 +129869,7 @@ index 83c77b0..b0421bd 100644 struct file_lock_context { spinlock_t flc_lock; -@@ -1410,7 +1410,7 @@ struct super_block { +@@ -1419,7 +1419,7 @@ struct super_block { /* s_inode_list_lock protects s_inodes */ spinlock_t s_inode_list_lock ____cacheline_aligned_in_smp; struct list_head s_inodes; /* all inodes */ @@ -129835,7 +129878,7 @@ index 83c77b0..b0421bd 100644 extern struct timespec current_fs_time(struct super_block *sb); -@@ -1672,7 +1672,8 @@ struct file_operations { +@@ -1676,7 +1676,8 @@ struct file_operations { u64); ssize_t (*dedupe_file_range)(struct file *, u64, u64, struct file *, u64); @@ -129845,7 +129888,7 @@ index 83c77b0..b0421bd 100644 struct inode_operations { struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int); -@@ -2396,7 +2397,7 @@ extern int register_chrdev_region(dev_t, unsigned, const char *); +@@ -2400,7 +2401,7 @@ extern int register_chrdev_region(dev_t, unsigned, const char *); extern int __register_chrdev(unsigned int major, unsigned int baseminor, unsigned int count, const char *name, const struct file_operations *fops); @@ -129854,7 +129897,7 @@ index 83c77b0..b0421bd 100644 unsigned int count, const char *name); extern void unregister_chrdev_region(dev_t, unsigned); extern void chrdev_show(struct seq_file *,off_t); -@@ -3088,4 +3089,14 @@ static inline bool dir_relax(struct inode *inode) +@@ -3107,4 +3108,14 @@ static inline bool dir_relax(struct inode *inode) extern bool path_noexec(const struct path *path); extern void inode_nohighmem(struct inode *inode); @@ -129916,10 +129959,10 @@ index 115bb81..e7b812b 100644 /* * fscache cached network filesystem type diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h -index 7ee1774..72505b8 100644 +index 0141f25..eb29c30 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h -@@ -197,6 +197,9 @@ static inline void fsnotify_access(struct file *file) +@@ -188,6 +188,9 @@ static inline void fsnotify_access(struct file *file) struct inode *inode = file_inode(file); __u32 mask = FS_ACCESS; @@ -129929,7 +129972,7 @@ index 7ee1774..72505b8 100644 if (S_ISDIR(inode->i_mode)) mask |= FS_ISDIR; -@@ -215,6 +218,9 @@ static inline void fsnotify_modify(struct file *file) +@@ -206,6 +209,9 @@ static inline void fsnotify_modify(struct file *file) struct inode *inode = file_inode(file); __u32 mask = FS_MODIFY; @@ -129939,7 +129982,7 @@ index 7ee1774..72505b8 100644 if (S_ISDIR(inode->i_mode)) mask |= FS_ISDIR; -@@ -317,7 +323,7 @@ static inline void fsnotify_change(struct dentry *dentry, unsigned int ia_valid) +@@ -308,7 +314,7 @@ static inline void fsnotify_change(struct dentry *dentry, unsigned int ia_valid) */ static inline const unsigned char *fsnotify_oldname_init(const unsigned char *name) { @@ -129999,10 +130042,10 @@ index eecd19b..391d1957 100644 __field(attr_nr, attr_flag, name, NLA_U64, __u64, \ nla_get_u64, nla_put_u64, false) diff --git a/include/linux/gfp.h b/include/linux/gfp.h -index af1f2b2..8fe7455 100644 +index 570383a..8fb6742b 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h -@@ -36,6 +36,13 @@ struct vm_area_struct; +@@ -41,6 +41,13 @@ struct vm_area_struct; #define ___GFP_OTHER_NODE 0x800000u #define ___GFP_WRITE 0x1000000u #define ___GFP_KSWAPD_RECLAIM 0x2000000u @@ -130016,7 +130059,7 @@ index af1f2b2..8fe7455 100644 /* If the above are modified, __GFP_BITS_SHIFT may need updating */ /* -@@ -82,6 +89,7 @@ struct vm_area_struct; +@@ -86,6 +93,7 @@ struct vm_area_struct; #define __GFP_HARDWALL ((__force gfp_t)___GFP_HARDWALL) #define __GFP_THISNODE ((__force gfp_t)___GFP_THISNODE) #define __GFP_ACCOUNT ((__force gfp_t)___GFP_ACCOUNT) @@ -130024,7 +130067,7 @@ index af1f2b2..8fe7455 100644 /* * Watermark modifiers -- controls access to emergency reserves -@@ -186,7 +194,7 @@ struct vm_area_struct; +@@ -188,7 +196,7 @@ struct vm_area_struct; #define __GFP_OTHER_NODE ((__force gfp_t)___GFP_OTHER_NODE) /* Room for N __GFP_FOO bits */ @@ -130033,24 +130076,24 @@ index af1f2b2..8fe7455 100644 #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) /* -@@ -257,6 +265,8 @@ struct vm_area_struct; +@@ -259,6 +267,8 @@ struct vm_area_struct; __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN) & \ - ~__GFP_KSWAPD_RECLAIM) + ~__GFP_RECLAIM) +#define GFP_USERCOPY __GFP_USERCOPY + /* Convert GFP flags to their corresponding migrate type */ #define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE) #define GFP_MOVABLE_SHIFT 3 -@@ -513,7 +523,7 @@ extern void free_kmem_pages(unsigned long addr, unsigned int order); +@@ -522,7 +532,7 @@ extern void free_kmem_pages(unsigned long addr, unsigned int order); void page_alloc_init(void); void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp); void drain_all_pages(struct zone *zone); -void drain_local_pages(struct zone *zone); +void drain_local_pages(void *zone); - #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT void page_alloc_init_late(void); + diff --git a/include/linux/gracl.h b/include/linux/gracl.h new file mode 100644 index 0000000..91858e4 @@ -131490,7 +131533,7 @@ index ba7a9b0..33a0237 100644 extern int register_pppox_proto(int proto_num, const struct pppox_proto *pp); extern void unregister_pppox_proto(int proto_num); diff --git a/include/linux/init.h b/include/linux/init.h -index b449f37..2bf1598 100644 +index aedb254..71b67e5 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -39,7 +39,7 @@ @@ -131550,10 +131593,10 @@ index f2cb8d4..2f0363e 100644 .files = &init_files, \ .signal = &init_signals, \ diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h -index 0e95fcc..0694bbf 100644 +index 9fcabeb..8f78b99 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h -@@ -436,8 +436,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS]; +@@ -446,8 +446,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS]; struct softirq_action { @@ -131564,7 +131607,7 @@ index 0e95fcc..0694bbf 100644 asmlinkage void do_softirq(void); asmlinkage void __do_softirq(void); -@@ -451,7 +451,7 @@ static inline void do_softirq_own_stack(void) +@@ -461,7 +461,7 @@ static inline void do_softirq_own_stack(void) } #endif @@ -131574,10 +131617,10 @@ index 0e95fcc..0694bbf 100644 extern void __raise_softirq_irqoff(unsigned int nr); diff --git a/include/linux/iommu.h b/include/linux/iommu.h -index a5c539f..07d576c 100644 +index ef7a6ec..2b963bb 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h -@@ -201,7 +201,7 @@ struct iommu_ops { +@@ -199,7 +199,7 @@ struct iommu_ops { unsigned long pgsize_bitmap; void *priv; @@ -131587,10 +131630,10 @@ index a5c539f..07d576c 100644 #define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1 /* Device added */ #define IOMMU_GROUP_NOTIFY_DEL_DEVICE 2 /* Pre Device removed */ diff --git a/include/linux/ioport.h b/include/linux/ioport.h -index 24bea08..89cafba 100644 +index 0b65543..c396f13 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h -@@ -162,7 +162,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start); +@@ -186,7 +186,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start); int adjust_resource(struct resource *res, resource_size_t start, resource_size_t size); resource_size_t resource_alignment(struct resource *res); @@ -131628,11 +131671,11 @@ index 1eee6bc..9cf4912 100644 extern struct ipc_namespace init_ipc_ns; extern atomic_t nr_ipc_ns; diff --git a/include/linux/irq.h b/include/linux/irq.h -index 3c1c967..ca8abc6 100644 +index c4de623..8f0044f 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h -@@ -386,7 +386,10 @@ struct irq_chip { - int (*irq_set_vcpu_affinity)(struct irq_data *data, void *vcpu_info); +@@ -399,7 +399,10 @@ struct irq_chip { + void (*ipi_send_mask)(struct irq_data *data, const struct cpumask *dest); unsigned long flags; -}; @@ -131657,7 +131700,7 @@ index dcca77c..8503b4f 100644 raw_spinlock_t lock; struct cpumask *percpu_enabled; diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h -index 04579d9..b1278d4 100644 +index 2aed043..30ad77f 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h @@ -38,6 +38,9 @@ struct device_node; @@ -131671,10 +131714,10 @@ index 04579d9..b1278d4 100644 /* Number of irqs reserved for a legacy isa controller */ diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h -index 65407f6..a9ae0ed 100644 +index fd1083c..be9252b 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h -@@ -677,7 +677,7 @@ struct transaction_s +@@ -672,7 +672,7 @@ struct transaction_s /* * How many handles used this transaction? [t_handle_lock] */ @@ -132198,10 +132241,10 @@ index b10b122..d37b3de 100644 #endif /* __LINUX_LOCKREF_H */ diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h -index 71969de..6257abb 100644 +index cdee11c..bc64d98 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h -@@ -1830,7 +1830,7 @@ struct security_hook_heads { +@@ -1831,7 +1831,7 @@ struct security_hook_heads { struct list_head audit_rule_match; struct list_head audit_rule_free; #endif /* CONFIG_AUDIT */ @@ -132210,7 +132253,7 @@ index 71969de..6257abb 100644 /* * Security module hook list structure. -@@ -1840,7 +1840,7 @@ struct security_hook_list { +@@ -1841,7 +1841,7 @@ struct security_hook_list { struct list_head list; struct list_head *head; union security_list_options hook; @@ -132269,10 +132312,10 @@ index 6e8b5b2..8e8a37d 100644 u32 remainder; return div_u64_rem(dividend, divisor, &remainder); diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h -index 792c898..3f045d6 100644 +index 1191d79..0c73b8a 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h -@@ -246,7 +246,7 @@ struct mem_cgroup { +@@ -254,7 +254,7 @@ struct mem_cgroup { int last_scanned_node; #if MAX_NUMNODES > 1 nodemask_t scan_nodes; @@ -132282,10 +132325,10 @@ index 792c898..3f045d6 100644 #endif diff --git a/include/linux/memory.h b/include/linux/memory.h -index 8b8d8d1..75abd50 100644 +index 093607f..9717227 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h -@@ -123,7 +123,7 @@ extern struct memory_block *find_memory_block(struct mem_section *); +@@ -126,7 +126,7 @@ extern struct memory_block *find_memory_block(struct mem_section *); #ifdef CONFIG_MEMORY_HOTPLUG #define hotplug_memory_notifier(fn, pri) ({ \ @@ -132320,10 +132363,18 @@ index 2696c1f..9320d41 100644 static inline int vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst) diff --git a/include/linux/mm.h b/include/linux/mm.h -index 5eaac6d..97f1585 100644 +index 02f7f31..efa7da3c 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h -@@ -155,6 +155,11 @@ extern unsigned int kobjsize(const void *objp); +@@ -103,6 +103,7 @@ extern int mmap_rnd_compat_bits __read_mostly; + #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) + + extern int sysctl_max_map_count; ++extern unsigned long sysctl_heap_stack_gap; + + extern unsigned long sysctl_user_reserve_kbytes; + extern unsigned long sysctl_admin_reserve_kbytes; +@@ -178,6 +179,11 @@ extern unsigned int kobjsize(const void *objp); #define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */ #define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */ #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ @@ -132335,7 +132386,7 @@ index 5eaac6d..97f1585 100644 #define VM_ARCH_1 0x01000000 /* Architecture-specific flag */ #define VM_ARCH_2 0x02000000 #define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */ -@@ -286,8 +291,8 @@ struct vm_operations_struct { +@@ -329,8 +335,8 @@ struct vm_operations_struct { /* called by access_process_vm when get_user_pages() fails, typically * for use by special VMAs that can switch between memory and hardware */ @@ -132346,7 +132397,7 @@ index 5eaac6d..97f1585 100644 /* Called by the /proc/PID/maps code to ask the vma whether it * has a special name. Returning non-NULL will also cause this -@@ -325,6 +330,7 @@ struct vm_operations_struct { +@@ -368,6 +374,7 @@ struct vm_operations_struct { struct page *(*find_special_page)(struct vm_area_struct *vma, unsigned long addr); }; @@ -132354,7 +132405,7 @@ index 5eaac6d..97f1585 100644 struct mmu_gather; struct inode; -@@ -1188,8 +1194,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address, +@@ -1209,8 +1216,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address, unsigned long *pfn); int follow_phys(struct vm_area_struct *vma, unsigned long address, unsigned int flags, unsigned long *prot, resource_size_t *phys); @@ -132365,7 +132416,7 @@ index 5eaac6d..97f1585 100644 static inline void unmap_shared_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen) -@@ -1230,9 +1236,9 @@ static inline int fixup_user_fault(struct task_struct *tsk, +@@ -1251,9 +1258,9 @@ static inline int fixup_user_fault(struct task_struct *tsk, } #endif @@ -132378,7 +132429,7 @@ index 5eaac6d..97f1585 100644 long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, unsigned long nr_pages, -@@ -1323,39 +1329,11 @@ int clear_page_dirty_for_io(struct page *page); +@@ -1343,39 +1350,11 @@ int clear_page_dirty_for_io(struct page *page); int get_cmdline(struct task_struct *task, char *buffer, int buflen); @@ -132418,7 +132469,7 @@ index 5eaac6d..97f1585 100644 int vma_is_stack_for_task(struct vm_area_struct *vma, struct task_struct *t); extern unsigned long move_page_tables(struct vm_area_struct *vma, -@@ -1500,8 +1478,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, +@@ -1520,8 +1499,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, { return 0; } @@ -132434,7 +132485,7 @@ index 5eaac6d..97f1585 100644 #endif #if defined(__PAGETABLE_PMD_FOLDED) || !defined(CONFIG_MMU) -@@ -1511,6 +1496,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud, +@@ -1531,6 +1517,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud, return 0; } @@ -132447,7 +132498,7 @@ index 5eaac6d..97f1585 100644 static inline void mm_nr_pmds_init(struct mm_struct *mm) {} static inline unsigned long mm_nr_pmds(struct mm_struct *mm) -@@ -1523,6 +1514,7 @@ static inline void mm_dec_nr_pmds(struct mm_struct *mm) {} +@@ -1543,6 +1535,7 @@ static inline void mm_dec_nr_pmds(struct mm_struct *mm) {} #else int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address); @@ -132455,7 +132506,7 @@ index 5eaac6d..97f1585 100644 static inline void mm_nr_pmds_init(struct mm_struct *mm) { -@@ -1560,11 +1552,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a +@@ -1579,11 +1572,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a NULL: pud_offset(pgd, address); } @@ -132479,7 +132530,7 @@ index 5eaac6d..97f1585 100644 #endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */ #if USE_SPLIT_PTE_PTLOCKS -@@ -1947,12 +1951,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **, +@@ -1968,12 +1973,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **, bool *need_rmap_locks); extern void exit_mmap(struct mm_struct *); @@ -132503,7 +132554,7 @@ index 5eaac6d..97f1585 100644 if (rlim < RLIM_INFINITY) { if (((new - start) + (end_data - start_data)) > rlim) return -ENOSPC; -@@ -1987,6 +2002,7 @@ extern unsigned long do_mmap(struct file *file, unsigned long addr, +@@ -2008,6 +2024,7 @@ extern unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate); extern int do_munmap(struct mm_struct *, unsigned long, size_t); @@ -132511,7 +132562,7 @@ index 5eaac6d..97f1585 100644 static inline unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, -@@ -2023,10 +2039,11 @@ struct vm_unmapped_area_info { +@@ -2044,10 +2061,11 @@ struct vm_unmapped_area_info { unsigned long high_limit; unsigned long align_mask; unsigned long align_offset; @@ -132525,7 +132576,7 @@ index 5eaac6d..97f1585 100644 /* * Search for an unmapped address range. -@@ -2038,7 +2055,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); +@@ -2059,7 +2077,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); * - satisfies (begin_addr & align_mask) == (align_offset & align_mask) */ static inline unsigned long @@ -132534,7 +132585,7 @@ index 5eaac6d..97f1585 100644 { if (info->flags & VM_UNMAPPED_AREA_TOPDOWN) return unmapped_area_topdown(info); -@@ -2098,6 +2115,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add +@@ -2119,6 +2137,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr, struct vm_area_struct **pprev); @@ -132545,7 +132596,7 @@ index 5eaac6d..97f1585 100644 /* Look up the first VMA which intersects the interval start_addr..end_addr-1, NULL if none. Assume start_addr < end_addr. */ static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr) -@@ -2127,10 +2148,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm, +@@ -2148,10 +2170,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm, } #ifdef CONFIG_MMU @@ -132558,7 +132609,7 @@ index 5eaac6d..97f1585 100644 { return __pgprot(0); } -@@ -2295,7 +2316,7 @@ extern int get_hwpoison_page(struct page *page); +@@ -2334,7 +2356,7 @@ extern int get_hwpoison_page(struct page *page); extern int sysctl_memory_failure_early_kill; extern int sysctl_memory_failure_recovery; extern void shake_page(struct page *p, int access); @@ -132567,7 +132618,7 @@ index 5eaac6d..97f1585 100644 extern int soft_offline_page(struct page *page, int flags); -@@ -2380,5 +2401,11 @@ void __init setup_nr_node_ids(void); +@@ -2419,5 +2441,11 @@ void __init setup_nr_node_ids(void); static inline void setup_nr_node_ids(void) {} #endif @@ -132580,7 +132631,7 @@ index 5eaac6d..97f1585 100644 #endif /* __KERNEL__ */ #endif /* _LINUX_MM_H */ diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h -index 624b78b..47715c9 100644 +index c2d75b4..f12e13a 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -352,7 +352,9 @@ struct vm_area_struct { @@ -132644,10 +132695,10 @@ index 3ba327a..85cd5ce 100644 } diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h -index 7b6c2cf..7bce238 100644 +index c60df92..76f3303 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h -@@ -522,7 +522,7 @@ struct zone { +@@ -526,7 +526,7 @@ struct zone { ZONE_PADDING(_pad3_) /* Zone statistics */ @@ -132944,7 +132995,7 @@ index f3f302f..a001305 100644 /* Helper routines for sys_msgsnd and sys_msgrcv */ extern long do_msgsnd(int msqid, long mtype, void __user *mtext, diff --git a/include/linux/net.h b/include/linux/net.h -index 25ef630..fc83c44 100644 +index f840d77..f7a95d98 100644 --- a/include/linux/net.h +++ b/include/linux/net.h @@ -195,7 +195,7 @@ struct net_proto_family { @@ -132957,18 +133008,18 @@ index 25ef630..fc83c44 100644 struct iovec; struct kvec; diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index 6d1d8f4..e9b37d6 100644 +index 78181a8..9e0ef8f 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -1257,6 +1257,7 @@ struct net_device_ops { - int (*ndo_fill_metadata_dst)(struct net_device *dev, - struct sk_buff *skb); +@@ -1293,6 +1293,7 @@ struct net_device_ops { + void (*ndo_set_rx_headroom)(struct net_device *dev, + int needed_headroom); }; +typedef struct net_device_ops __no_const net_device_ops_no_const; /** * enum net_device_priv_flags - &struct net_device priv_flags -@@ -1570,7 +1571,7 @@ struct net_device { +@@ -1623,7 +1624,7 @@ struct net_device { unsigned long base_addr; int irq; @@ -132977,18 +133028,20 @@ index 6d1d8f4..e9b37d6 100644 /* * Some hardware also needs these fields (state,dev_list, -@@ -1609,8 +1610,8 @@ struct net_device { +@@ -1662,9 +1663,9 @@ struct net_device { struct net_device_stats stats; - atomic_long_t rx_dropped; - atomic_long_t tx_dropped; +- atomic_long_t rx_nohandler; + atomic_long_unchecked_t rx_dropped; + atomic_long_unchecked_t tx_dropped; ++ atomic_long_unchecked_t rx_nohandler; #ifdef CONFIG_WIRELESS_EXT - const struct iw_handler_def * wireless_handlers; -@@ -4069,7 +4070,7 @@ static inline void netif_keep_dst(struct net_device *dev) + const struct iw_handler_def *wireless_handlers; +@@ -4156,7 +4157,7 @@ static inline void netif_keep_dst(struct net_device *dev) dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM); } @@ -132998,7 +133051,7 @@ index 6d1d8f4..e9b37d6 100644 /* Logging, debugging and troubleshooting/diagnostic helpers. */ diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h -index 0ad5567..79b35f5a 100644 +index 9230f9a..065b8f8 100644 --- a/include/linux/netfilter.h +++ b/include/linux/netfilter.h @@ -119,7 +119,7 @@ struct nf_sockopt_ops { @@ -133026,7 +133079,7 @@ index 8d02485..a1e1aa5 100644 c = rcu_dereference_protected(comment->c, 1); diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h -index ba0d978..5a9c6f1 100644 +index 1d82dd5..d6b384c 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h @@ -19,7 +19,7 @@ struct nfnl_callback { @@ -133054,10 +133107,10 @@ index 0000000..33f4af8 + +#endif diff --git a/include/linux/netlink.h b/include/linux/netlink.h -index 0b41959..71c4eea 100644 +index da14ab6..874abff 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h -@@ -160,19 +160,19 @@ struct netlink_dump_control { +@@ -150,19 +150,19 @@ struct netlink_dump_control { void *data; struct module *module; u16 min_dump_alloc; @@ -133106,10 +133159,10 @@ index 520681b..2b7fabb 100644 extern struct nls_table *load_nls_default(void); #define register_nls(nls) __register_nls((nls), THIS_MODULE) diff --git a/include/linux/notifier.h b/include/linux/notifier.h -index d14a4c3..a078786 100644 +index 4149868..0971cea 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h -@@ -54,7 +54,8 @@ struct notifier_block { +@@ -56,7 +56,8 @@ struct notifier_block { notifier_fn_t notifier_call; struct notifier_block __rcu *next; int priority; @@ -133149,10 +133202,10 @@ index 4386946..f50c615 100644 spinlock_t lock ____cacheline_aligned; unsigned int processed; diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h -index 92395a0..5ca2827 100644 +index 7e1ab15..9b26fd4 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h -@@ -243,7 +243,7 @@ static inline struct page *page_cache_alloc_readahead(struct address_space *x) +@@ -215,7 +215,7 @@ static inline struct page *page_cache_alloc_readahead(struct address_space *x) __GFP_COLD | __GFP_NORETRY | __GFP_NOWARN); } @@ -133161,7 +133214,7 @@ index 92395a0..5ca2827 100644 pgoff_t page_cache_next_hole(struct address_space *mapping, pgoff_t index, unsigned long max_scan); -@@ -387,7 +387,7 @@ extern int read_cache_pages(struct address_space *mapping, +@@ -359,7 +359,7 @@ extern int read_cache_pages(struct address_space *mapping, static inline struct page *read_mapping_page(struct address_space *mapping, pgoff_t index, void *data) { @@ -133219,10 +133272,10 @@ index 4bc6daf..6edaab0 100644 /* diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h -index f5c5a3f..1330851 100644 +index f291275..6936e70 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h -@@ -471,8 +471,8 @@ struct perf_event { +@@ -477,8 +477,8 @@ struct perf_event { enum perf_event_active_state state; unsigned int attach_state; @@ -133233,7 +133286,7 @@ index f5c5a3f..1330851 100644 /* * These are the total time in nanoseconds that the event -@@ -523,8 +523,8 @@ struct perf_event { +@@ -529,8 +529,8 @@ struct perf_event { * These accumulate total time (in nanoseconds) that children * events have been enabled and running, respectively. */ @@ -133244,7 +133297,7 @@ index f5c5a3f..1330851 100644 /* * Protect attach/detach and child_list: -@@ -948,7 +948,7 @@ static inline void perf_event_task_sched_out(struct task_struct *prev, +@@ -954,7 +954,7 @@ static inline void perf_event_task_sched_out(struct task_struct *prev, static inline u64 __perf_event_count(struct perf_event *event) { @@ -133253,8 +133306,8 @@ index f5c5a3f..1330851 100644 } extern void perf_event_mmap(struct vm_area_struct *vma); -@@ -972,7 +972,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64 - entry->ip[entry->nr++] = ip; +@@ -987,7 +987,7 @@ static inline int perf_callchain_store(struct perf_callchain_entry *entry, u64 i + } } -extern int sysctl_perf_event_paranoid; @@ -133262,7 +133315,7 @@ index f5c5a3f..1330851 100644 extern int sysctl_perf_event_mlock; extern int sysctl_perf_event_sample_rate; extern int sysctl_perf_cpu_time_max_percent; -@@ -987,19 +987,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write, +@@ -1002,19 +1002,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write, loff_t *ppos); @@ -133290,7 +133343,7 @@ index f5c5a3f..1330851 100644 } extern void perf_event_init(void); -@@ -1162,7 +1167,7 @@ struct perf_pmu_events_attr { +@@ -1171,7 +1176,7 @@ struct perf_pmu_events_attr { struct device_attribute attr; u64 id; const char *event_str; @@ -133359,18 +133412,18 @@ index 6a5d654..1051ebc 100644 /* * The PM_EVENT_ messages are also used by drivers implementing the legacy diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h -index db21d39..39a6aaa 100644 +index 49cd889..70d53da5 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h -@@ -35,7 +35,7 @@ struct gpd_dev_ops { +@@ -37,7 +37,7 @@ struct gpd_dev_ops { int (*save_state)(struct device *dev); int (*restore_state)(struct device *dev); bool (*active_wakeup)(struct device *dev); -}; +} __no_const; - struct generic_pm_domain { - struct dev_pm_domain domain; /* PM domain operations */ + struct genpd_power_state { + s64 power_off_latency_ns; diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index 7af093d..122df16 100644 --- a/include/linux/pm_runtime.h @@ -133398,7 +133451,7 @@ index 5df733b..d55f252 100644 /* config parameters */ #define PNP_CONFIG_NORMAL 0x0001 diff --git a/include/linux/poison.h b/include/linux/poison.h -index 4a27153..8106d5c 100644 +index 51334ed..7fda393 100644 --- a/include/linux/poison.h +++ b/include/linux/poison.h @@ -19,8 +19,8 @@ @@ -133598,10 +133651,10 @@ index b97bf2e..f14c92d4 100644 #endif /* _LINUX_PROC_FS_H */ diff --git a/include/linux/proc_ns.h b/include/linux/proc_ns.h -index 42dfc61..8113a99 100644 +index de0e771..9e746e9 100644 --- a/include/linux/proc_ns.h +++ b/include/linux/proc_ns.h -@@ -16,7 +16,7 @@ struct proc_ns_operations { +@@ -18,7 +18,7 @@ struct proc_ns_operations { struct ns_common *(*get)(struct task_struct *task); void (*put)(struct ns_common *ns); int (*install)(struct nsproxy *nsproxy, struct ns_common *ns); @@ -133611,10 +133664,10 @@ index 42dfc61..8113a99 100644 extern const struct proc_ns_operations netns_operations; extern const struct proc_ns_operations utsns_operations; diff --git a/include/linux/psci.h b/include/linux/psci.h -index 12c4865..2cd7c41 100644 +index 393efe2..340fc1d 100644 --- a/include/linux/psci.h +++ b/include/linux/psci.h -@@ -32,7 +32,7 @@ struct psci_operations { +@@ -35,7 +35,7 @@ struct psci_operations { int (*affinity_info)(unsigned long target_affinity, unsigned long lowest_affinity_level); int (*migrate_info_type)(void); @@ -133624,7 +133677,7 @@ index 12c4865..2cd7c41 100644 extern struct psci_operations psci_ops; diff --git a/include/linux/quota.h b/include/linux/quota.h -index b2505ac..5f7ab55 100644 +index 9dfb6bc..0aa55da 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h @@ -76,7 +76,7 @@ struct kqid { /* Type in which we store the quota identifier */ @@ -133699,7 +133752,7 @@ index 14d7b83..a1edf56 100644 diff --git a/include/linux/rculist.h b/include/linux/rculist.h -index 14ec165..45c00c5 100644 +index 17d4f84..878f3cf 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h @@ -59,6 +59,9 @@ void __list_add_rcu(struct list_head *new, @@ -133747,10 +133800,10 @@ index 14ec165..45c00c5 100644 * hlist_del_init_rcu - deletes entry from hash list with re-initialization * @n: the element to delete from the hash list. diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h -index 14e6f47..0e6846b 100644 +index 2657aff..f1259b4 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h -@@ -867,6 +867,7 @@ static inline void rcu_preempt_sleep_check(void) +@@ -863,6 +863,7 @@ static inline void rcu_preempt_sleep_check(void) * read-side critical sections may be preempted and they may also block, but * only when acquiring spinlocks that are subject to priority inheritance. */ @@ -133758,7 +133811,7 @@ index 14e6f47..0e6846b 100644 static inline void rcu_read_lock(void) { __rcu_read_lock(); -@@ -921,6 +922,7 @@ static inline void rcu_read_lock(void) +@@ -917,6 +918,7 @@ static inline void rcu_read_lock(void) * * See rcu_read_lock() for more information. */ @@ -133766,7 +133819,7 @@ index 14e6f47..0e6846b 100644 static inline void rcu_read_unlock(void) { RCU_LOCKDEP_WARN(!rcu_is_watching(), -@@ -947,6 +949,7 @@ static inline void rcu_read_unlock(void) +@@ -943,6 +945,7 @@ static inline void rcu_read_unlock(void) * rcu_read_unlock_bh() from one task if the matching rcu_read_lock_bh() * was invoked from some other task. */ @@ -133774,7 +133827,7 @@ index 14e6f47..0e6846b 100644 static inline void rcu_read_lock_bh(void) { local_bh_disable(); -@@ -961,6 +964,7 @@ static inline void rcu_read_lock_bh(void) +@@ -957,6 +960,7 @@ static inline void rcu_read_lock_bh(void) * * See rcu_read_lock_bh() for more information. */ @@ -133782,7 +133835,7 @@ index 14e6f47..0e6846b 100644 static inline void rcu_read_unlock_bh(void) { RCU_LOCKDEP_WARN(!rcu_is_watching(), -@@ -983,6 +987,7 @@ static inline void rcu_read_unlock_bh(void) +@@ -979,6 +983,7 @@ static inline void rcu_read_unlock_bh(void) * rcu_read_unlock_sched() from process context if the matching * rcu_read_lock_sched() was invoked from an NMI handler. */ @@ -133790,7 +133843,7 @@ index 14e6f47..0e6846b 100644 static inline void rcu_read_lock_sched(void) { preempt_disable(); -@@ -993,6 +998,7 @@ static inline void rcu_read_lock_sched(void) +@@ -989,6 +994,7 @@ static inline void rcu_read_lock_sched(void) } /* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */ @@ -133798,7 +133851,7 @@ index 14e6f47..0e6846b 100644 static inline notrace void rcu_read_lock_sched_notrace(void) { preempt_disable_notrace(); -@@ -1004,6 +1010,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void) +@@ -1000,6 +1006,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void) * * See rcu_read_lock_sched for more information. */ @@ -133806,7 +133859,7 @@ index 14e6f47..0e6846b 100644 static inline void rcu_read_unlock_sched(void) { RCU_LOCKDEP_WARN(!rcu_is_watching(), -@@ -1014,6 +1021,7 @@ static inline void rcu_read_unlock_sched(void) +@@ -1010,6 +1017,7 @@ static inline void rcu_read_unlock_sched(void) } /* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */ @@ -133881,23 +133934,23 @@ index d7c8359..818daf5 100644 /* * CONFIG_RELAY kernel API, kernel/relay.c diff --git a/include/linux/rio.h b/include/linux/rio.h -index cde976e..ebd6033 100644 +index aa23238..f6f8109 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h -@@ -358,7 +358,7 @@ struct rio_ops { - int (*map_inb)(struct rio_mport *mport, dma_addr_t lstart, - u64 rstart, u32 size, u32 flags); - void (*unmap_inb)(struct rio_mport *mport, dma_addr_t lstart); +@@ -432,7 +432,7 @@ struct rio_ops { + int (*map_outb)(struct rio_mport *mport, u16 destid, u64 rstart, + u32 size, u32 flags, dma_addr_t *laddr); + void (*unmap_outb)(struct rio_mport *mport, u16 destid, u64 rstart); -}; +} __no_const; #define RIO_RESOURCE_MEM 0x00000100 #define RIO_RESOURCE_DOORBELL 0x00000200 diff --git a/include/linux/rmap.h b/include/linux/rmap.h -index a07f42b..6b04a8d 100644 +index 49eb4f8..95a4b70 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h -@@ -136,8 +136,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma) +@@ -139,8 +139,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma) void anon_vma_init(void); /* create anon_vma_cachep */ int anon_vma_prepare(struct vm_area_struct *); void unlink_anon_vmas(struct vm_area_struct *); @@ -133941,7 +133994,7 @@ index 556ec1e..38c19c9 100644 /* diff --git a/include/linux/sched.h b/include/linux/sched.h -index a10494a..3ab8d31 100644 +index 52c4847..3a5c90b 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -7,7 +7,7 @@ @@ -133953,7 +134006,7 @@ index a10494a..3ab8d31 100644 }; #include <asm/param.h> /* for HZ */ -@@ -134,6 +134,7 @@ struct perf_event_context; +@@ -135,6 +135,7 @@ struct perf_event_context; struct blk_plug; struct filename; struct nameidata; @@ -133981,7 +134034,7 @@ index a10494a..3ab8d31 100644 extern void arch_pick_mmap_layout(struct mm_struct *mm); extern unsigned long arch_get_unmapped_area(struct file *, unsigned long, unsigned long, -@@ -773,6 +787,17 @@ struct signal_struct { +@@ -777,6 +791,17 @@ struct signal_struct { #ifdef CONFIG_TASKSTATS struct taskstats *stats; #endif @@ -133998,8 +134051,8 @@ index a10494a..3ab8d31 100644 + #ifdef CONFIG_AUDIT unsigned audit_tty; - unsigned audit_tty_log_passwd; -@@ -787,7 +812,7 @@ struct signal_struct { + struct tty_audit_buf *tty_audit_buf; +@@ -790,7 +815,7 @@ struct signal_struct { struct mutex cred_guard_mutex; /* guard against foreign influences on * credential calculations * (notably. ptrace) */ @@ -134008,7 +134061,7 @@ index a10494a..3ab8d31 100644 /* * Bits in flags field of signal_struct. -@@ -842,6 +867,14 @@ struct user_struct { +@@ -845,6 +870,14 @@ struct user_struct { struct key *session_keyring; /* UID's default session keyring */ #endif @@ -134023,7 +134076,7 @@ index a10494a..3ab8d31 100644 /* Hash table maintenance information */ struct hlist_node uidhash_node; kuid_t uid; -@@ -849,7 +882,7 @@ struct user_struct { +@@ -852,7 +885,7 @@ struct user_struct { #if defined(CONFIG_PERF_EVENTS) || defined(CONFIG_BPF_SYSCALL) atomic_long_t locked_vm; #endif @@ -134032,7 +134085,7 @@ index a10494a..3ab8d31 100644 extern int uids_sysfs_init(void); -@@ -1389,6 +1422,9 @@ struct tlbflush_unmap_batch { +@@ -1394,6 +1427,9 @@ struct tlbflush_unmap_batch { struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; @@ -134042,7 +134095,7 @@ index a10494a..3ab8d31 100644 atomic_t usage; unsigned int flags; /* per process flags, defined below */ unsigned int ptrace; -@@ -1524,8 +1560,8 @@ struct task_struct { +@@ -1529,8 +1565,8 @@ struct task_struct { struct list_head thread_node; struct completion *vfork_done; /* for vfork() */ @@ -134053,7 +134106,7 @@ index a10494a..3ab8d31 100644 cputime_t utime, stime, utimescaled, stimescaled; cputime_t gtime; -@@ -1551,11 +1587,6 @@ struct task_struct { +@@ -1560,11 +1596,6 @@ struct task_struct { struct task_cputime cputime_expires; struct list_head cpu_timers[3]; @@ -134065,7 +134118,7 @@ index a10494a..3ab8d31 100644 char comm[TASK_COMM_LEN]; /* executable name excluding path - access with [gs]et_task_comm (which lock it with task_lock()) -@@ -1571,6 +1602,8 @@ struct task_struct { +@@ -1580,6 +1611,8 @@ struct task_struct { /* hung task detection */ unsigned long last_switch_count; #endif @@ -134074,7 +134127,7 @@ index a10494a..3ab8d31 100644 /* filesystem information */ struct fs_struct *fs; /* open file information */ -@@ -1648,6 +1681,10 @@ struct task_struct { +@@ -1657,6 +1690,10 @@ struct task_struct { unsigned int in_ubsan; #endif @@ -134085,7 +134138,7 @@ index a10494a..3ab8d31 100644 /* journalling filesystem info */ void *journal_info; -@@ -1686,6 +1723,10 @@ struct task_struct { +@@ -1695,6 +1732,10 @@ struct task_struct { /* cg_list protected by css_set_lock and tsk->alloc_lock */ struct list_head cg_list; #endif @@ -134096,7 +134149,7 @@ index a10494a..3ab8d31 100644 #ifdef CONFIG_FUTEX struct robust_list_head __user *robust_list; #ifdef CONFIG_COMPAT -@@ -1801,7 +1842,7 @@ struct task_struct { +@@ -1810,7 +1851,7 @@ struct task_struct { * Number of functions that haven't been traced * because of depth overrun. */ @@ -134105,10 +134158,10 @@ index a10494a..3ab8d31 100644 /* Pause for the tracing */ atomic_t tracing_graph_pause; #endif -@@ -1830,22 +1871,89 @@ struct task_struct { - unsigned long task_state_change; +@@ -1852,22 +1893,89 @@ struct task_struct { + #ifdef CONFIG_MMU + struct task_struct *oom_reaper_list; #endif - int pagefault_disabled; -/* CPU-specific state of this task */ - struct thread_struct thread; -/* @@ -134205,7 +134258,7 @@ index a10494a..3ab8d31 100644 /* Future-safe accessor for struct task_struct's cpus_allowed. */ #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed) -@@ -1927,7 +2035,7 @@ struct pid_namespace; +@@ -1949,7 +2057,7 @@ struct pid_namespace; pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns); @@ -134214,7 +134267,7 @@ index a10494a..3ab8d31 100644 { return tsk->pid; } -@@ -2289,6 +2397,46 @@ extern u64 sched_clock_cpu(int cpu); +@@ -2311,6 +2419,48 @@ extern u64 sched_clock_cpu(int cpu); extern void sched_clock_init(void); @@ -134248,8 +134301,10 @@ index a10494a..3ab8d31 100644 + read_lock(&tasklist_lock); + if (task->parent && task->parent == current) { + ret = true; ++#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + if (exec_id) + *exec_id = task->parent->exec_id; ++#endif + } + read_unlock(&tasklist_lock); + rcu_read_unlock(); @@ -134261,7 +134316,7 @@ index a10494a..3ab8d31 100644 #ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK static inline void sched_clock_tick(void) { -@@ -2417,7 +2565,9 @@ extern void set_curr_task(int cpu, struct task_struct *p); +@@ -2436,7 +2586,9 @@ extern void set_curr_task(int cpu, struct task_struct *p); void yield(void); union thread_union { @@ -134271,7 +134326,7 @@ index a10494a..3ab8d31 100644 unsigned long stack[THREAD_SIZE/sizeof(long)]; }; -@@ -2450,6 +2600,7 @@ extern struct pid_namespace init_pid_ns; +@@ -2469,6 +2621,7 @@ extern struct pid_namespace init_pid_ns; */ extern struct task_struct *find_task_by_vpid(pid_t nr); @@ -134279,7 +134334,7 @@ index a10494a..3ab8d31 100644 extern struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns); -@@ -2481,7 +2632,7 @@ extern void proc_caches_init(void); +@@ -2500,7 +2653,7 @@ extern void proc_caches_init(void); extern void flush_signals(struct task_struct *); extern void ignore_signals(struct task_struct *); extern void flush_signal_handlers(struct task_struct *, int force_default); @@ -134288,7 +134343,7 @@ index a10494a..3ab8d31 100644 static inline int kernel_dequeue_signal(siginfo_t *info) { -@@ -2635,7 +2786,7 @@ extern void __cleanup_sighand(struct sighand_struct *); +@@ -2654,7 +2807,7 @@ extern void __cleanup_sighand(struct sighand_struct *); extern void exit_itimers(struct signal_struct *); extern void flush_itimer_signals(void); @@ -134297,7 +134352,7 @@ index a10494a..3ab8d31 100644 extern int do_execve(struct filename *, const char __user * const __user *, -@@ -2750,11 +2901,13 @@ static inline int thread_group_empty(struct task_struct *p) +@@ -2769,11 +2922,13 @@ static inline int thread_group_empty(struct task_struct *p) * It must not be nested with write_lock_irq(&tasklist_lock), * neither inside nor outside. */ @@ -134311,7 +134366,7 @@ index a10494a..3ab8d31 100644 static inline void task_unlock(struct task_struct *p) { spin_unlock(&p->alloc_lock); -@@ -2840,9 +2993,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p) +@@ -2859,9 +3014,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p) #define task_stack_end_corrupted(task) \ (*(end_of_stack(task)) != STACK_END_MAGIC) @@ -134323,18 +134378,6 @@ index a10494a..3ab8d31 100644 return (obj >= stack) && (obj < (stack + THREAD_SIZE)); } -diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h -index c9e4731..c716293 100644 ---- a/include/linux/sched/sysctl.h -+++ b/include/linux/sched/sysctl.h -@@ -34,6 +34,7 @@ enum { sysctl_hung_task_timeout_secs = 0 }; - #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) - - extern int sysctl_max_map_count; -+extern unsigned long sysctl_heap_stack_gap; - - extern unsigned int sysctl_sched_latency; - extern unsigned int sysctl_sched_min_granularity; diff --git a/include/linux/scif.h b/include/linux/scif.h index 49a35d6..c6209dd 100644 --- a/include/linux/scif.h @@ -134349,13 +134392,13 @@ index 49a35d6..c6209dd 100644 #define SCIF_OPEN_FAILED ((scif_epd_t)-1) #define SCIF_REGISTER_FAILED ((off_t)-1) diff --git a/include/linux/security.h b/include/linux/security.h -index 4824a4c..1fe498a 100644 +index 157f0cb..93989df 100644 --- a/include/linux/security.h +++ b/include/linux/security.h -@@ -28,6 +28,7 @@ - #include <linux/err.h> +@@ -30,6 +30,7 @@ #include <linux/string.h> #include <linux/mm.h> + #include <linux/fs.h> +#include <linux/grsecurity.h> struct linux_binprm; @@ -134387,7 +134430,7 @@ index dc368b8..e895209 100644 extern int __must_check down_trylock(struct semaphore *sem); extern int __must_check down_timeout(struct semaphore *sem, long jiffies); diff --git a/include/linux/seq_buf.h b/include/linux/seq_buf.h -index fb7eb9c..1b493dc 100644 +index fb7eb9c..fcfd102 100644 --- a/include/linux/seq_buf.h +++ b/include/linux/seq_buf.h @@ -16,7 +16,7 @@ @@ -134399,21 +134442,30 @@ index fb7eb9c..1b493dc 100644 size_t size; size_t len; loff_t readpos; +@@ -78,7 +78,7 @@ static inline unsigned int seq_buf_used(struct seq_buf *s) + * Return the number of bytes available in the buffer, or zero if + * there's no space. + */ +-static inline size_t seq_buf_get_buf(struct seq_buf *s, char **bufp) ++static inline size_t seq_buf_get_buf(struct seq_buf *s, unsigned char **bufp) + { + WARN_ON(s->len > s->size + 1); + diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h -index dde00de..202bfd3 100644 +index f3d45dd..4539816 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h -@@ -27,6 +27,9 @@ struct seq_file { - struct mutex lock; +@@ -25,6 +25,9 @@ struct seq_file { const struct seq_operations *op; int poll_event; + const struct file *file; +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + u64 exec_id; +#endif - #ifdef CONFIG_USER_NS - struct user_namespace *user_ns; - #endif -@@ -39,6 +42,7 @@ struct seq_operations { + void *private; + }; + +@@ -34,6 +37,7 @@ struct seq_operations { void * (*next) (struct seq_file *m, void *v, loff_t *pos); int (*show) (struct seq_file *m, void *v); }; @@ -134421,7 +134473,7 @@ index dde00de..202bfd3 100644 #define SEQ_SKIP 1 -@@ -111,6 +115,7 @@ void seq_pad(struct seq_file *m, char c); +@@ -106,6 +110,7 @@ void seq_pad(struct seq_file *m, char c); char *mangle_path(char *s, const char *p, const char *esc); int seq_open(struct file *, const struct seq_operations *); @@ -134429,7 +134481,7 @@ index dde00de..202bfd3 100644 ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); loff_t seq_lseek(struct file *, loff_t, int); int seq_release(struct inode *, struct file *); -@@ -138,6 +143,7 @@ int seq_path_root(struct seq_file *m, const struct path *path, +@@ -133,6 +138,7 @@ int seq_path_root(struct seq_file *m, const struct path *path, const struct path *root, const char *esc); int single_open(struct file *, int (*)(struct seq_file *, void *), void *); @@ -134544,7 +134596,7 @@ index d80259a..41a639a 100644 static inline void disallow_signal(int sig) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h -index d3fcd45..67f86da 100644 +index 15d0df9..31bf6d0 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -889,7 +889,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags, @@ -134556,8 +134608,8 @@ index d3fcd45..67f86da 100644 gfp_t priority) { return __alloc_skb(size, priority, 0, NUMA_NO_NODE); -@@ -2186,7 +2186,7 @@ static inline int skb_checksum_start_offset(const struct sk_buff *skb) - return skb->csum_start - skb_headroom(skb); +@@ -2187,7 +2187,7 @@ static inline unsigned char *skb_checksum_start(const struct sk_buff *skb) + return skb->head + skb->csum_start; } -static inline int skb_transport_offset(const struct sk_buff *skb) @@ -134565,7 +134617,7 @@ index d3fcd45..67f86da 100644 { return skb_transport_header(skb) - skb->data; } -@@ -2201,7 +2201,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) +@@ -2202,7 +2202,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) return skb->inner_transport_header - skb->inner_network_header; } @@ -134574,7 +134626,7 @@ index d3fcd45..67f86da 100644 { return skb_network_header(skb) - skb->data; } -@@ -2261,7 +2261,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len) +@@ -2262,7 +2262,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len) * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) */ #ifndef NET_SKB_PAD @@ -134583,7 +134635,7 @@ index d3fcd45..67f86da 100644 #endif int ___pskb_trim(struct sk_buff *skb, unsigned int len); -@@ -2924,9 +2924,9 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, +@@ -2936,9 +2936,9 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, int *err); unsigned int datagram_poll(struct file *file, struct socket *sock, struct poll_table_struct *wait); @@ -134595,7 +134647,7 @@ index d3fcd45..67f86da 100644 struct msghdr *msg, int size) { return skb_copy_datagram_iter(from, offset, &msg->msg_iter, size); -@@ -3455,6 +3455,9 @@ static inline void nf_reset(struct sk_buff *skb) +@@ -3467,6 +3467,9 @@ static inline void nf_reset(struct sk_buff *skb) nf_bridge_put(skb->nf_bridge); skb->nf_bridge = NULL; #endif @@ -134606,7 +134658,7 @@ index d3fcd45..67f86da 100644 static inline void nf_reset_trace(struct sk_buff *skb) diff --git a/include/linux/slab.h b/include/linux/slab.h -index 3627d5c..f3bd455 100644 +index 508bd82..37e5199 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -15,14 +15,29 @@ @@ -134619,7 +134671,7 @@ index 3627d5c..f3bd455 100644 * Flags to pass to kmem_cache_create(). * The ones marked DEBUG are only valid if CONFIG_DEBUG_SLAB is set. */ - #define SLAB_DEBUG_FREE 0x00000100UL /* DEBUG: Perform (expensive) checks on free */ + #define SLAB_CONSISTENCY_CHECKS 0x00000100UL /* DEBUG: Perform (expensive) checks on alloc/free */ + +#ifdef CONFIG_PAX_USERCOPY_SLABS +#define SLAB_USERCOPY 0x00000200UL /* PaX: Allow copying objs to/from userland */ @@ -134639,7 +134691,7 @@ index 3627d5c..f3bd455 100644 #define SLAB_HWCACHE_ALIGN 0x00002000UL /* Align objs on cache lines */ #define SLAB_CACHE_DMA 0x00004000UL /* Use GFP_DMA memory */ #define SLAB_STORE_USER 0x00010000UL /* DEBUG: Store the last owner for bug hunting */ -@@ -103,10 +118,13 @@ +@@ -109,10 +124,13 @@ * ZERO_SIZE_PTR can be passed to kfree though in the same way that NULL can. * Both make kfree a no-op. */ @@ -134656,7 +134708,7 @@ index 3627d5c..f3bd455 100644 #include <linux/kmemleak.h> #include <linux/kasan.h> -@@ -148,6 +166,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t); +@@ -154,6 +172,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t); void kfree(const void *); void kzfree(const void *); size_t ksize(const void *); @@ -134665,7 +134717,7 @@ index 3627d5c..f3bd455 100644 /* * Some archs want to perform DMA into kmalloc caches and need a guaranteed -@@ -258,6 +278,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; +@@ -264,6 +284,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; #endif @@ -134676,7 +134728,7 @@ index 3627d5c..f3bd455 100644 /* * Figure out which kmalloc slab an allocation of a certain size * belongs to. -@@ -266,7 +290,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; +@@ -272,7 +296,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; * 2 = 129 .. 192 bytes * n = 2^(n-1)+1 .. 2^n */ @@ -134685,7 +134737,7 @@ index 3627d5c..f3bd455 100644 { if (!size) return 0; -@@ -309,7 +333,7 @@ static __always_inline int kmalloc_index(size_t size) +@@ -315,7 +339,7 @@ static __always_inline int kmalloc_index(size_t size) } #endif /* !CONFIG_SLOB */ @@ -134694,8 +134746,8 @@ index 3627d5c..f3bd455 100644 void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags) __assume_slab_alignment; void kmem_cache_free(struct kmem_cache *, void *); -@@ -324,10 +348,10 @@ void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **); - int kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **); +@@ -339,10 +363,10 @@ static __always_inline void kfree_bulk(size_t size, void **p) + } #ifdef CONFIG_NUMA -void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignment; @@ -134708,7 +134760,7 @@ index 3627d5c..f3bd455 100644 return __kmalloc(size, flags); } diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h -index cf139d3fa..b3b3358 100644 +index 9edbbf3..c03134d 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h @@ -40,7 +40,7 @@ struct kmem_cache { @@ -134736,11 +134788,11 @@ index cf139d3fa..b3b3358 100644 + atomic_unchecked_t sanitized; + atomic_unchecked_t not_sanitized; +#endif - - /* - * If debugging is enabled, then the allocator can add additional + #ifdef CONFIG_DEBUG_SLAB_LEAK + atomic_t store_user_clean; + #endif diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h -index b7e57927..a8087e0 100644 +index 665cd0c..d5dccd7 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h @@ -74,7 +74,7 @@ struct kmem_cache { @@ -134875,10 +134927,10 @@ index 47dd0ce..3275f16 100644 { raw_spin_unlock_irqrestore(&lock->rlock, flags); diff --git a/include/linux/srcu.h b/include/linux/srcu.h -index f5f80c5..d4e916a 100644 +index dc8eb63..b4b9482 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h -@@ -213,7 +213,8 @@ static inline int srcu_read_lock_held(struct srcu_struct *sp) +@@ -228,7 +228,8 @@ static inline int srcu_read_lock_held(struct srcu_struct *sp) * srcu_read_unlock() in an irq handler if the matching srcu_read_lock() * was invoked in process context. */ @@ -134888,7 +134940,7 @@ index f5f80c5..d4e916a 100644 { int retval; -@@ -231,8 +232,8 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp) +@@ -246,8 +247,8 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp) * * Exit an SRCU read-side critical section. */ @@ -134899,7 +134951,7 @@ index f5f80c5..d4e916a 100644 rcu_lock_release(&(sp)->dep_map); __srcu_read_unlock(sp, idx); diff --git a/include/linux/string.h b/include/linux/string.h -index 9eebc66..733834c 100644 +index d3993a7..19af70c 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -18,51 +18,51 @@ extern void *memdup_user_nul(const void __user *, size_t); @@ -134983,7 +135035,7 @@ index 9eebc66..733834c 100644 #endif #ifndef __HAVE_ARCH_STRLEN extern __kernel_size_t strlen(const char *); -@@ -84,55 +84,55 @@ extern __kernel_size_t strlen(const char *); +@@ -84,51 +84,51 @@ extern __kernel_size_t strlen(const char *); extern __kernel_size_t strnlen(const char *,__kernel_size_t); #endif #ifndef __HAVE_ARCH_STRPBRK @@ -135044,9 +135096,14 @@ index 9eebc66..733834c 100644 extern void argv_free(char **argv); -extern bool sysfs_streq(const char *s1, const char *s2); --extern int strtobool(const char *s, bool *res); +-extern int kstrtobool(const char *s, bool *res); +extern bool sysfs_streq(const char *s1, const char *s2) __nocapture(1, 2); -+extern int strtobool(const char *s, bool *res) __nocapture(1); ++extern int kstrtobool(const char *s, bool *res) __nocapture(1); + static inline int strtobool(const char *s, bool *res) + { + return kstrtobool(s, res); +@@ -137,8 +137,8 @@ static inline int strtobool(const char *s, bool *res) + int match_string(const char * const *array, size_t n, const char *string); #ifdef CONFIG_BINARY_PRINTF -int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args); @@ -135091,10 +135148,10 @@ index 5c9c6cd..f16c5c9 100644 #endif /* _LINUX_SUNRPC_ADDR_H */ diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h -index 131032f..5f9378a 100644 +index 9a7ddba..10918de1 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h -@@ -101,7 +101,7 @@ struct rpc_procinfo { +@@ -103,7 +103,7 @@ struct rpc_procinfo { unsigned int p_timer; /* Which RTT timer to use */ u32 p_statidx; /* Which procedure to account */ const char * p_name; /* name of procedure */ @@ -135104,7 +135161,7 @@ index 131032f..5f9378a 100644 #ifdef __KERNEL__ diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h -index cc0fc71..b70c6b1 100644 +index 7ca44fb..368f7cf 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -425,7 +425,7 @@ struct svc_procedure { @@ -135117,7 +135174,7 @@ index cc0fc71..b70c6b1 100644 /* * Mode for mapping cpus to pools. diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h -index 5322fea..b8ca311 100644 +index 3081339..22da86c 100644 --- a/include/linux/sunrpc/svc_rdma.h +++ b/include/linux/sunrpc/svc_rdma.h @@ -54,15 +54,15 @@ extern unsigned int svcrdma_max_requests; @@ -135213,7 +135270,7 @@ index 017fced..d4a9fc9 100644 extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h -index 185815c..5ade9cd 100644 +index d795472..258ce77 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -102,7 +102,12 @@ union bpf_attr; @@ -135278,7 +135335,7 @@ index 185815c..5ade9cd 100644 asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice); asmlinkage long sys_munmap(unsigned long addr, size_t len); asmlinkage long sys_mlock(unsigned long start, size_t len); -@@ -604,7 +610,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *); +@@ -610,7 +616,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *); asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *); asmlinkage long sys_send(int, void __user *, size_t, unsigned); asmlinkage long sys_sendto(int, void __user *, size_t, unsigned, @@ -135287,7 +135344,7 @@ index 185815c..5ade9cd 100644 asmlinkage long sys_sendmsg(int fd, struct user_msghdr __user *msg, unsigned flags); asmlinkage long sys_sendmmsg(int fd, struct mmsghdr __user *msg, unsigned int vlen, unsigned flags); -@@ -663,10 +669,10 @@ asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf); +@@ -669,10 +675,10 @@ asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf); asmlinkage long sys_semget(key_t key, int nsems, int semflg); asmlinkage long sys_semop(int semid, struct sembuf __user *sops, @@ -135300,7 +135357,7 @@ index 185815c..5ade9cd 100644 const struct timespec __user *timeout); asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg); asmlinkage long sys_shmget(key_t key, size_t size, int flag); -@@ -700,7 +706,7 @@ asmlinkage long sys_sysfs(int option, +@@ -706,7 +712,7 @@ asmlinkage long sys_sysfs(int option, unsigned long arg1, unsigned long arg2); asmlinkage long sys_syslog(int type, char __user *buf, int len); asmlinkage long sys_uselib(const char __user *library); @@ -135309,7 +135366,7 @@ index 185815c..5ade9cd 100644 asmlinkage long sys_ptrace(long request, long pid, unsigned long addr, unsigned long data); -@@ -879,7 +885,7 @@ asmlinkage long sys_seccomp(unsigned int op, unsigned int flags, +@@ -885,7 +891,7 @@ asmlinkage long sys_seccomp(unsigned int op, unsigned int flags, const char __user *uargs); asmlinkage long sys_getrandom(char __user *buf, size_t count, unsigned int flags); @@ -135427,10 +135484,10 @@ index 387fa7d..3fcde6b 100644 #ifdef CONFIG_MAGIC_SYSRQ diff --git a/include/linux/tcp.h b/include/linux/tcp.h -index b386361..cc87028 100644 +index 7be9b12..66bf0a8 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h -@@ -63,13 +63,13 @@ struct tcp_fastopen_cookie { +@@ -68,13 +68,13 @@ struct tcp_fastopen_cookie { /* This defines a selective acknowledgement block. */ struct tcp_sack_block_wire { @@ -135448,8 +135505,8 @@ index b386361..cc87028 100644 }; /*These are used to set the sack_ok field in struct tcp_options_received */ -@@ -154,7 +154,7 @@ struct tcp_sock { - * total number of segments in. +@@ -162,7 +162,7 @@ struct tcp_sock { + * total number of data segments in. */ u32 rcv_nxt; /* What we want to receive next */ - u32 copied_seq; /* Head of yet unread data */ @@ -135457,8 +135514,8 @@ index b386361..cc87028 100644 u32 rcv_wup; /* rcv_nxt on last window update sent */ u32 snd_nxt; /* Next sequence we send */ u32 segs_out; /* RFC4898 tcpEStatsPerfSegsOut -@@ -258,7 +258,7 @@ struct tcp_sock { - u32 prr_out; /* Total number of pkts sent during Recovery. */ +@@ -270,7 +270,7 @@ struct tcp_sock { + u32 delivered; /* Total data packets delivered incl. rexmits */ u32 rcv_wnd; /* Current receiver window */ - u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ @@ -135466,7 +135523,7 @@ index b386361..cc87028 100644 u32 notsent_lowat; /* TCP_NOTSENT_LOWAT */ u32 pushed_seq; /* Last pushed seq, required to talk to windows */ u32 lost_out; /* Lost packets */ -@@ -299,7 +299,7 @@ struct tcp_sock { +@@ -311,7 +311,7 @@ struct tcp_sock { int undo_retrans; /* number of undoable retransmissions. */ u32 total_retrans; /* Total retransmits for entire connection */ @@ -135494,7 +135551,7 @@ index b4c2a48..0a13f65 100644 #endif /* _LINUX_THREAD_INFO_H */ diff --git a/include/linux/tty.h b/include/linux/tty.h -index e5b996d..65cd286 100644 +index a344420..c3868f9 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -225,7 +225,7 @@ struct tty_port { @@ -135506,7 +135563,7 @@ index e5b996d..65cd286 100644 wait_queue_head_t open_wait; /* Open waiters */ wait_queue_head_t delta_msr_wait; /* Modem status change */ unsigned long flags; /* TTY flags ASY_*/ -@@ -312,7 +312,7 @@ struct tty_struct { +@@ -313,7 +313,7 @@ struct tty_struct { /* If the tty has a pending do_SAK, queue it here - akpm */ struct work_struct SAK_work; struct tty_port *port; @@ -135515,7 +135572,7 @@ index e5b996d..65cd286 100644 /* Each of a tty's open files has private_data pointing to tty_file_private */ struct tty_file_private { -@@ -570,7 +570,7 @@ extern int tty_port_open(struct tty_port *port, +@@ -561,7 +561,7 @@ extern int tty_port_open(struct tty_port *port, struct tty_struct *tty, struct file *filp); static inline int tty_port_users(struct tty_port *port) { @@ -135525,7 +135582,7 @@ index e5b996d..65cd286 100644 extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h -index 1610524..331e7c8 100644 +index b742b5e..76dc1fa 100644 --- a/include/linux/tty_driver.h +++ b/include/linux/tty_driver.h @@ -291,7 +291,7 @@ struct tty_operations { @@ -135547,10 +135604,10 @@ index 1610524..331e7c8 100644 extern struct list_head tty_drivers; diff --git a/include/linux/tty_ldisc.h b/include/linux/tty_ldisc.h -index 00c9d68..bc0188b 100644 +index 3971cf0..7704c48 100644 --- a/include/linux/tty_ldisc.h +++ b/include/linux/tty_ldisc.h -@@ -215,7 +215,7 @@ struct tty_ldisc_ops { +@@ -202,7 +202,7 @@ struct tty_ldisc_ops { struct module *owner; @@ -135643,61 +135700,61 @@ index 32c0e83..671eb35 100644 wait_queue_head_t wait; struct uio_info *info; diff --git a/include/linux/unaligned/access_ok.h b/include/linux/unaligned/access_ok.h -index 99c1b4d..562e6f3 100644 +index 33383ca..44211d6 100644 --- a/include/linux/unaligned/access_ok.h +++ b/include/linux/unaligned/access_ok.h @@ -4,34 +4,34 @@ #include <linux/kernel.h> #include <asm/byteorder.h> --static inline u16 get_unaligned_le16(const void *p) -+static inline u16 __intentional_overflow(-1) get_unaligned_le16(const void *p) +-static __always_inline u16 get_unaligned_le16(const void *p) ++static __always_inline u16 __intentional_overflow(-1) get_unaligned_le16(const void *p) { - return le16_to_cpup((__le16 *)p); + return le16_to_cpup((const __le16 *)p); } --static inline u32 get_unaligned_le32(const void *p) -+static inline u32 __intentional_overflow(-1) get_unaligned_le32(const void *p) +-static __always_inline u32 get_unaligned_le32(const void *p) ++static __always_inline u32 __intentional_overflow(-1) get_unaligned_le32(const void *p) { - return le32_to_cpup((__le32 *)p); + return le32_to_cpup((const __le32 *)p); } --static inline u64 get_unaligned_le64(const void *p) -+static inline u64 __intentional_overflow(-1) get_unaligned_le64(const void *p) +-static __always_inline u64 get_unaligned_le64(const void *p) ++static __always_inline u64 __intentional_overflow(-1) get_unaligned_le64(const void *p) { - return le64_to_cpup((__le64 *)p); + return le64_to_cpup((const __le64 *)p); } --static inline u16 get_unaligned_be16(const void *p) -+static inline u16 __intentional_overflow(-1) get_unaligned_be16(const void *p) +-static __always_inline u16 get_unaligned_be16(const void *p) ++static __always_inline u16 __intentional_overflow(-1) get_unaligned_be16(const void *p) { - return be16_to_cpup((__be16 *)p); + return be16_to_cpup((const __be16 *)p); } --static inline u32 get_unaligned_be32(const void *p) -+static inline u32 __intentional_overflow(-1) get_unaligned_be32(const void *p) +-static __always_inline u32 get_unaligned_be32(const void *p) ++static __always_inline u32 __intentional_overflow(-1) get_unaligned_be32(const void *p) { - return be32_to_cpup((__be32 *)p); + return be32_to_cpup((const __be32 *)p); } --static inline u64 get_unaligned_be64(const void *p) -+static inline u64 __intentional_overflow(-1) get_unaligned_be64(const void *p) +-static __always_inline u64 get_unaligned_be64(const void *p) ++static __always_inline u64 __intentional_overflow(-1) get_unaligned_be64(const void *p) { - return be64_to_cpup((__be64 *)p); + return be64_to_cpup((const __be64 *)p); } - static inline void put_unaligned_le16(u16 val, void *p) + static __always_inline void put_unaligned_le16(u16 val, void *p) diff --git a/include/linux/usb.h b/include/linux/usb.h -index f3dbc21..a59a42a 100644 +index 818bf70..3925f6b 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h -@@ -367,7 +367,7 @@ struct usb_bus { +@@ -370,7 +370,7 @@ struct usb_bus { * with the URB_SHORT_NOT_OK flag set. */ unsigned no_sg_constraint:1; /* no sg constraint */ @@ -135706,7 +135763,7 @@ index f3dbc21..a59a42a 100644 int devnum_next; /* Next open device number in * round-robin allocation */ -@@ -598,7 +598,7 @@ struct usb_device { +@@ -599,7 +599,7 @@ struct usb_device { int maxchild; u32 quirks; @@ -135715,7 +135772,7 @@ index f3dbc21..a59a42a 100644 unsigned long active_duration; -@@ -1791,10 +1791,10 @@ void usb_sg_wait(struct usb_sg_request *io); +@@ -1793,10 +1793,10 @@ void usb_sg_wait(struct usb_sg_request *io); /* NOTE: these are not the standard USB_ENDPOINT_XFER_* values!! */ /* (yet ... they're the values used by usbfs) */ @@ -135731,19 +135788,19 @@ index f3dbc21..a59a42a 100644 #define usb_pipein(pipe) ((pipe) & USB_DIR_IN) #define usb_pipeout(pipe) (!usb_pipein(pipe)) diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h -index 4dcf844..03630b4 100644 +index 66fc137..9602956 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h -@@ -23,6 +23,7 @@ - +@@ -24,6 +24,7 @@ #include <linux/rwsem.h> #include <linux/interrupt.h> + #include <linux/idr.h> +#include <scsi/scsi_host.h> #define MAX_TOPO_LEVEL 6 diff --git a/include/linux/usb/renesas_usbhs.h b/include/linux/usb/renesas_usbhs.h -index 4db191f..188ca98 100644 +index 00a47d0..ed482765 100644 --- a/include/linux/usb/renesas_usbhs.h +++ b/include/linux/usb/renesas_usbhs.h @@ -39,7 +39,7 @@ enum { @@ -135830,10 +135887,10 @@ index 6f8fbcf..4efc177 100644 + MODULE_GRSEC MODULE_RANDSTRUCT_PLUGIN diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h -index 69e1d4a1..566fa52 100644 +index b39a5f3..3f5115a 100644 --- a/include/linux/vga_switcheroo.h +++ b/include/linux/vga_switcheroo.h -@@ -141,9 +141,9 @@ enum vga_switcheroo_state vga_switcheroo_get_client_state(struct pci_dev *dev); +@@ -169,9 +169,9 @@ enum vga_switcheroo_state vga_switcheroo_get_client_state(struct pci_dev *dev); void vga_switcheroo_set_dynamic_switch(struct pci_dev *pdev, enum vga_switcheroo_state dynamic); @@ -135845,7 +135902,7 @@ index 69e1d4a1..566fa52 100644 #else static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {} -@@ -160,9 +160,9 @@ static inline enum vga_switcheroo_state vga_switcheroo_get_client_state(struct p +@@ -192,9 +192,9 @@ static inline enum vga_switcheroo_state vga_switcheroo_get_client_state(struct p static inline void vga_switcheroo_set_dynamic_switch(struct pci_dev *pdev, enum vga_switcheroo_state dynamic) {} @@ -136033,7 +136090,7 @@ index 92dbbd3..13ab0b3 100644 Returns the number of bytes that needs to be allocated for a per- stream workspace with the specified parameters. A pointer to this diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h -index eeabf20..817154b 100644 +index 76056ab..b3a839b 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h @@ -74,7 +74,7 @@ struct v4l2_file_operations { @@ -136218,7 +136275,7 @@ index 59160de..f4dbdab 100644 struct fib_rule *rule; int flags; diff --git a/include/net/flow.h b/include/net/flow.h -index 83969ee..ee0611d 100644 +index d47ef4b..ab39dc5 100644 --- a/include/net/flow.h +++ b/include/net/flow.h @@ -243,7 +243,7 @@ void flow_cache_fini(struct net *net); @@ -136231,10 +136288,10 @@ index 83969ee..ee0611d 100644 __u32 __get_hash_from_flowi6(const struct flowi6 *fl6, struct flow_keys *keys); diff --git a/include/net/genetlink.h b/include/net/genetlink.h -index 43c0e77..9f17774 100644 +index 8d4608c..460372d 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h -@@ -130,7 +130,7 @@ struct genl_ops { +@@ -128,7 +128,7 @@ struct genl_ops { u8 cmd; u8 internal_flags; u8 flags; @@ -136296,10 +136353,10 @@ index 235c781..160d4a3 100644 struct rcu_head rcu; struct inet_peer *gc_next; diff --git a/include/net/ip.h b/include/net/ip.h -index 1a98f1c..2a44de6 100644 +index fad74d3..bb36af9 100644 --- a/include/net/ip.h +++ b/include/net/ip.h -@@ -330,7 +330,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb) +@@ -326,7 +326,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb) return min(skb_dst(skb)->dev->mtu, IP_MAX_MTU); } @@ -136358,10 +136415,10 @@ index a6cc576..d1a5fcb 100644 struct list_head est_list; /* estimator list */ spinlock_t est_lock; diff --git a/include/net/ipv6.h b/include/net/ipv6.h -index 6570f379..91cd2cb 100644 +index 1be050a..472c511 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h -@@ -771,7 +771,7 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb, +@@ -775,7 +775,7 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb, * to minimize possbility that any useful information to an * attacker is leaked. Only lower 20 bits are relevant. */ @@ -136524,10 +136581,10 @@ index c4359e2..76dbc4a 100644 struct llc_sap_state { u8 curr_state; diff --git a/include/net/mac80211.h b/include/net/mac80211.h -index 7c30faf..4c2d2d9 100644 +index e385eb3..28bc730 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1501,7 +1501,7 @@ enum ieee80211_key_flags { +@@ -1539,7 +1539,7 @@ enum ieee80211_key_flags { * @iv_len: The IV length for this key type */ struct ieee80211_key_conf { @@ -136536,7 +136593,7 @@ index 7c30faf..4c2d2d9 100644 u32 cipher; u8 icv_len; u8 iv_len; -@@ -5198,7 +5198,7 @@ struct ieee80211_tx_rate_control { +@@ -5276,7 +5276,7 @@ struct ieee80211_tx_rate_control { struct sk_buff *skb; struct ieee80211_tx_rate reported_rate; bool rts, short_preamble; @@ -136545,7 +136602,7 @@ index 7c30faf..4c2d2d9 100644 u32 rate_idx_mask; u8 *rate_idx_mcs_mask; bool bss; -@@ -5235,7 +5235,7 @@ struct rate_control_ops { +@@ -5313,7 +5313,7 @@ struct rate_control_ops { void (*remove_sta_debugfs)(void *priv, void *priv_sta); u32 (*get_expected_throughput)(void *priv_sta); @@ -136713,10 +136770,10 @@ index 723b61c..4386367 100644 }; diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h -index 2b7907a..3de08ec 100644 +index a69cde3..ba46ea3 100644 --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h -@@ -100,7 +100,7 @@ struct netns_ipv4 { +@@ -119,7 +119,7 @@ struct netns_ipv4 { struct ping_group_range ping_group_range; @@ -136725,7 +136782,7 @@ index 2b7907a..3de08ec 100644 #ifdef CONFIG_SYSCTL unsigned long *sysctl_local_reserved_ports; -@@ -114,6 +114,6 @@ struct netns_ipv4 { +@@ -133,6 +133,6 @@ struct netns_ipv4 { struct fib_rules_ops *mr_rules_ops; #endif #endif @@ -136734,10 +136791,10 @@ index 2b7907a..3de08ec 100644 }; #endif diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h -index c0368db..95ad90f 100644 +index 10d0848..68bc2da 100644 --- a/include/net/netns/ipv6.h +++ b/include/net/netns/ipv6.h -@@ -80,8 +80,8 @@ struct netns_ipv6 { +@@ -83,8 +83,8 @@ struct netns_ipv6 { struct fib_rules_ops *mr6_rules_ops; #endif #endif @@ -136749,7 +136806,7 @@ index c0368db..95ad90f 100644 #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6) diff --git a/include/net/netns/xfrm.h b/include/net/netns/xfrm.h -index 730d82a..045f2c4 100644 +index 24cd394..8310b26 100644 --- a/include/net/netns/xfrm.h +++ b/include/net/netns/xfrm.h @@ -78,7 +78,7 @@ struct netns_xfrm { @@ -136759,10 +136816,10 @@ index 730d82a..045f2c4 100644 - atomic_t flow_cache_genid; + atomic_unchecked_t flow_cache_genid; struct list_head flow_cache_gc_list; + atomic_t flow_cache_gc_count; spinlock_t flow_cache_gc_lock; - struct work_struct flow_cache_gc_work; diff --git a/include/net/ping.h b/include/net/ping.h -index ac80cb4..ec1ed09 100644 +index 4cd90d6..4947311 100644 --- a/include/net/ping.h +++ b/include/net/ping.h @@ -54,7 +54,7 @@ struct ping_iter_state { @@ -136825,7 +136882,7 @@ index 4a5b9a3..ca27d73 100644 .combine = sctp_csum_combine, }; diff --git a/include/net/sctp/sm.h b/include/net/sctp/sm.h -index 487ef34..d457f98 100644 +index efc0174..cb23681 100644 --- a/include/net/sctp/sm.h +++ b/include/net/sctp/sm.h @@ -80,7 +80,7 @@ typedef void (sctp_timer_event_t) (unsigned long); @@ -136847,7 +136904,7 @@ index 487ef34..d457f98 100644 /* Get the size of a DATA chunk payload. */ diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h -index 205630b..23a35dc 100644 +index 5a404c3..942221e 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -512,7 +512,7 @@ struct sctp_pf { @@ -136859,15 +136916,6 @@ index 205630b..23a35dc 100644 /* Structure to track chunk fragments that have been acked, but peer -@@ -1098,7 +1098,7 @@ int sctp_bind_addr_dup(struct sctp_bind_addr *dest, - const struct sctp_bind_addr *src, - gfp_t gfp); - int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *, -- __u8 addr_state, gfp_t gfp); -+ int new_size, __u8 addr_state, gfp_t gfp); - int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *); - int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *, - struct sctp_sock *); diff --git a/include/net/snmp.h b/include/net/snmp.h index 35512ac..edbd85b 100644 --- a/include/net/snmp.h @@ -136912,7 +136960,7 @@ index 35512ac..edbd85b 100644 #define SNMP_INC_STATS(mib, field) \ this_cpu_inc(mib->mibs[field]) diff --git a/include/net/sock.h b/include/net/sock.h -index 3c688ca..9d0e259 100644 +index 121ffc1..0c44dfd 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -188,7 +188,7 @@ struct sock_common { @@ -136979,10 +137027,10 @@ index 3c688ca..9d0e259 100644 void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk, diff --git a/include/net/tcp.h b/include/net/tcp.h -index ae6468f..eaf0ae6 100644 +index 6db1022..7138bec 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -548,7 +548,7 @@ void tcp_retransmit_timer(struct sock *sk); +@@ -539,7 +539,7 @@ void tcp_retransmit_timer(struct sock *sk); void tcp_xmit_retransmit_queue(struct sock *); void tcp_simple_retransmit(struct sock *); int tcp_trim_head(struct sock *, struct sk_buff *, u32); @@ -136991,7 +137039,7 @@ index ae6468f..eaf0ae6 100644 void tcp_send_probe0(struct sock *); void tcp_send_partial(struct sock *); -@@ -734,8 +734,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb) +@@ -728,8 +728,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb) * If this grows please adjust skbuff.h:skbuff->cb[xxx] size appropriately. */ struct tcp_skb_cb { @@ -137002,7 +137050,7 @@ index ae6468f..eaf0ae6 100644 union { /* Note : tcp_tw_isn is used in input path only * (isn chosen by tcp_timewait_state_process()) -@@ -763,7 +763,7 @@ struct tcp_skb_cb { +@@ -757,7 +757,7 @@ struct tcp_skb_cb { __u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */ /* 1 byte hole */ @@ -137112,19 +137160,6 @@ index 92a7d85..1779570 100644 u8 info_length, const void *private_data, u8 private_data_len); -diff --git a/include/rdma/iw_cm.h b/include/rdma/iw_cm.h -index 036bd27..c0d7f17 100644 ---- a/include/rdma/iw_cm.h -+++ b/include/rdma/iw_cm.h -@@ -123,7 +123,7 @@ struct iw_cm_verbs { - int backlog); - - int (*destroy_listen)(struct iw_cm_id *cm_id); --}; -+} __no_const; - - /** - * iw_create_cm_id - Create an IW CM identifier. diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index 93d14da..734b3d8 100644 --- a/include/scsi/libfc.h @@ -137147,10 +137182,10 @@ index 93d14da..734b3d8 100644 u8 qfull; enum fc_lport_state state; diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h -index a5d31f7..e5ee774 100644 +index a505079..bf8ba88 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h -@@ -187,9 +187,9 @@ struct scsi_device { +@@ -188,9 +188,9 @@ struct scsi_device { unsigned int max_device_blocked; /* what device_blocked counts down from */ #define SCSI_DEFAULT_DEVICE_BLOCKED 3 @@ -137177,10 +137212,10 @@ index 891a658..fcd68df 100644 }; #define to_scsi_driver(drv) \ diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h -index 784bc2c..855a04c 100644 +index bf66ea6..1c719d83 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h -@@ -757,7 +757,8 @@ struct fc_function_template { +@@ -758,7 +758,8 @@ struct fc_function_template { unsigned long show_host_system_hostname:1; unsigned long disable_target_scan:1; @@ -137233,7 +137268,7 @@ index 21d047f..9573462 100644 } diff --git a/include/sound/pcm.h b/include/sound/pcm.h -index b0be092..0e82b4f 100644 +index af1fb37..0432863 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h @@ -1075,7 +1075,7 @@ int snd_pcm_update_state(struct snd_pcm_substream *substream, @@ -137273,7 +137308,7 @@ index feb58d4..9ce81c1 100644 int in_kernel, int size_aligned); int snd_seq_dump_var_event(const struct snd_seq_event *event, diff --git a/include/sound/soc.h b/include/sound/soc.h -index 7afb72c..1e67bd7 100644 +index 02b4a21..36efb0e 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -920,7 +920,7 @@ struct snd_soc_codec_driver { @@ -137375,6 +137410,31 @@ index f95f25e..87ed448 100644 TP_ARGS(irq, action, ret), +diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h +index 43cedbf0c..da01f56 100644 +--- a/include/trace/events/mmflags.h ++++ b/include/trace/events/mmflags.h +@@ -134,6 +134,12 @@ IF_HAVE_PG_IDLE(PG_idle, "idle" ) + #define IF_HAVE_VM_SOFTDIRTY(flag,name) + #endif + ++#if defined(CONFIG_PAX_PAGEEXEC) && defined(CONFIG_X86_32) ++#define IF_HAVE_VM_PAGEEXEC(flag,name) {flag, name }, ++#else ++#define IF_HAVE_VM_PAGEEXEC(flag,name) ++#endif ++ + #define __def_vmaflag_names \ + {VM_READ, "read" }, \ + {VM_WRITE, "write" }, \ +@@ -158,6 +164,7 @@ IF_HAVE_PG_IDLE(PG_idle, "idle" ) + {VM_ACCOUNT, "account" }, \ + {VM_NORESERVE, "noreserve" }, \ + {VM_HUGETLB, "hugetlb" }, \ ++IF_HAVE_VM_PAGEEXEC(VM_PAGEEXEC, "pageexec" ) \ + __VM_ARCH_SPECIFIC_1 , \ + __VM_ARCH_SPECIFIC_2 , \ + {VM_DONTDUMP, "dontdump" }, \ diff --git a/include/uapi/linux/a.out.h b/include/uapi/linux/a.out.h index 7caf44c..23c6f27 100644 --- a/include/uapi/linux/a.out.h @@ -137418,69 +137478,69 @@ index 22b6ad3..aeba37e 100644 }; diff --git a/include/uapi/linux/byteorder/little_endian.h b/include/uapi/linux/byteorder/little_endian.h -index d876736..ccce5c0 100644 +index 4b93f2b..ffa1302 100644 --- a/include/uapi/linux/byteorder/little_endian.h +++ b/include/uapi/linux/byteorder/little_endian.h @@ -42,51 +42,51 @@ - static inline __le64 __cpu_to_le64p(const __u64 *p) + static __always_inline __le64 __cpu_to_le64p(const __u64 *p) { - return (__force __le64)*p; + return (__force const __le64)*p; } --static inline __u64 __le64_to_cpup(const __le64 *p) -+static inline __u64 __intentional_overflow(-1) __le64_to_cpup(const __le64 *p) +-static __always_inline __u64 __le64_to_cpup(const __le64 *p) ++static __always_inline __u64 __intentional_overflow(-1) __le64_to_cpup(const __le64 *p) { - return (__force __u64)*p; + return (__force const __u64)*p; } - static inline __le32 __cpu_to_le32p(const __u32 *p) + static __always_inline __le32 __cpu_to_le32p(const __u32 *p) { - return (__force __le32)*p; + return (__force const __le32)*p; } - static inline __u32 __le32_to_cpup(const __le32 *p) + static __always_inline __u32 __le32_to_cpup(const __le32 *p) { - return (__force __u32)*p; + return (__force const __u32)*p; } - static inline __le16 __cpu_to_le16p(const __u16 *p) + static __always_inline __le16 __cpu_to_le16p(const __u16 *p) { - return (__force __le16)*p; + return (__force const __le16)*p; } - static inline __u16 __le16_to_cpup(const __le16 *p) + static __always_inline __u16 __le16_to_cpup(const __le16 *p) { - return (__force __u16)*p; + return (__force const __u16)*p; } - static inline __be64 __cpu_to_be64p(const __u64 *p) + static __always_inline __be64 __cpu_to_be64p(const __u64 *p) { - return (__force __be64)__swab64p(p); + return (__force const __be64)__swab64p(p); } - static inline __u64 __be64_to_cpup(const __be64 *p) + static __always_inline __u64 __be64_to_cpup(const __be64 *p) { - return __swab64p((__u64 *)p); + return __swab64p((const __u64 *)p); } - static inline __be32 __cpu_to_be32p(const __u32 *p) + static __always_inline __be32 __cpu_to_be32p(const __u32 *p) { - return (__force __be32)__swab32p(p); + return (__force const __be32)__swab32p(p); } --static inline __u32 __be32_to_cpup(const __be32 *p) -+static inline __u32 __intentional_overflow(-1) __be32_to_cpup(const __be32 *p) +-static __always_inline __u32 __be32_to_cpup(const __be32 *p) ++static __always_inline __u32 __intentional_overflow(-1) __be32_to_cpup(const __be32 *p) { - return __swab32p((__u32 *)p); + return __swab32p((const __u32 *)p); } - static inline __be16 __cpu_to_be16p(const __u16 *p) + static __always_inline __be16 __cpu_to_be16p(const __u16 *p) { - return (__force __be16)__swab16p(p); + return (__force const __be16)__swab16p(p); } - static inline __u16 __be16_to_cpup(const __be16 *p) + static __always_inline __u16 __be16_to_cpup(const __be16 *p) { - return __swab16p((__u16 *)p); + return __swab16p((const __u16 *)p); @@ -137586,7 +137646,7 @@ index 8b8d39d..1ca6c07 100644 #define VIDEO_TYPE_MDA 0x10 /* Monochrome Text Display */ diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h -index 0e011eb..0020b3c 100644 +index 8f3a8f6..736a542 100644 --- a/include/uapi/linux/swab.h +++ b/include/uapi/linux/swab.h @@ -43,7 +43,7 @@ @@ -137596,26 +137656,26 @@ index 0e011eb..0020b3c 100644 -static inline __attribute_const__ __u16 __fswab16(__u16 val) +static inline __intentional_overflow(0) __attribute_const__ __u16 __fswab16(__u16 val) { - #ifdef __HAVE_BUILTIN_BSWAP16__ - return __builtin_bswap16(val); -@@ -54,7 +54,7 @@ static inline __attribute_const__ __u16 __fswab16(__u16 val) + #if defined (__arch_swab16) + return __arch_swab16(val); +@@ -52,7 +52,7 @@ static inline __attribute_const__ __u16 __fswab16(__u16 val) #endif } -static inline __attribute_const__ __u32 __fswab32(__u32 val) +static inline __intentional_overflow(0) __attribute_const__ __u32 __fswab32(__u32 val) { - #ifdef __HAVE_BUILTIN_BSWAP32__ - return __builtin_bswap32(val); -@@ -65,7 +65,7 @@ static inline __attribute_const__ __u32 __fswab32(__u32 val) + #if defined(__arch_swab32) + return __arch_swab32(val); +@@ -61,7 +61,7 @@ static inline __attribute_const__ __u32 __fswab32(__u32 val) #endif } -static inline __attribute_const__ __u64 __fswab64(__u64 val) +static inline __intentional_overflow(0) __attribute_const__ __u64 __fswab64(__u64 val) { - #ifdef __HAVE_BUILTIN_BSWAP64__ - return __builtin_bswap64(val); + #if defined (__arch_swab64) + return __arch_swab64(val); diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h index 1590c49..6977e11 100644 --- a/include/uapi/linux/xattr.h @@ -137663,10 +137723,10 @@ index 30f5362..8ed8ac9 100644 void *pmi_pal; u8 *vbe_state_orig; /* diff --git a/init/Kconfig b/init/Kconfig -index 2232080..ae4d217 100644 +index 0dfd09d..c18a0e0 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -285,7 +285,8 @@ config FHANDLE +@@ -286,7 +286,8 @@ config FHANDLE config USELIB bool "uselib syscall" @@ -137676,7 +137736,7 @@ index 2232080..ae4d217 100644 help This option enables the uselib syscall, a system call used in the dynamic linker from libc5 and earlier. glibc does not use this -@@ -628,6 +629,7 @@ config RCU_FAST_NO_HZ +@@ -629,6 +630,7 @@ config RCU_FAST_NO_HZ config TREE_RCU_TRACE def_bool RCU_TRACE && ( TREE_RCU || PREEMPT_RCU ) select DEBUG_FS @@ -137684,7 +137744,7 @@ index 2232080..ae4d217 100644 help This option provides tracing for the TREE_RCU and PREEMPT_RCU implementations, permitting Makefile to -@@ -1132,6 +1134,7 @@ endif # CGROUPS +@@ -1133,6 +1135,7 @@ endif # CGROUPS config CHECKPOINT_RESTORE bool "Checkpoint/restore support" if EXPERT select PROC_CHILDREN @@ -137692,7 +137752,7 @@ index 2232080..ae4d217 100644 default n help Enables additional kernel features in a sake of checkpoint/restore. -@@ -1676,7 +1679,7 @@ config SLUB_DEBUG +@@ -1699,7 +1702,7 @@ config SLUB_DEBUG config COMPAT_BRK bool "Disable heap randomization" @@ -138035,19 +138095,19 @@ index b32ad7d..05f6420 100644 next_state = Reset; return 0; diff --git a/init/main.c b/init/main.c -index 58c9e37..6de8339 100644 +index b3c6e36..71ab08e 100644 --- a/init/main.c +++ b/init/main.c -@@ -97,6 +97,8 @@ extern void radix_tree_init(void); - static inline void mark_rodata_ro(void) { } - #endif +@@ -94,6 +94,8 @@ extern void init_IRQ(void); + extern void fork_init(void); + extern void radix_tree_init(void); +extern void grsecurity_init(void); + /* * Debug helper: via this flag we know that we are in 'early bootup code' * where only the boot processor is running with IRQ disabled. This means -@@ -158,6 +160,48 @@ static int __init set_reset_devices(char *str) +@@ -155,6 +157,48 @@ static int __init set_reset_devices(char *str) __setup("reset_devices", set_reset_devices); @@ -138096,7 +138156,7 @@ index 58c9e37..6de8339 100644 static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, }; const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, }; static const char *panic_later, *panic_param; -@@ -731,7 +775,7 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn) +@@ -708,7 +752,7 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn) struct blacklist_entry *entry; char *fn_name; @@ -138105,7 +138165,7 @@ index 58c9e37..6de8339 100644 if (!fn_name) return false; -@@ -783,7 +827,7 @@ int __init_or_module do_one_initcall(initcall_t fn) +@@ -759,7 +803,7 @@ int __init_or_module do_one_initcall(initcall_t fn) { int count = preempt_count(); int ret; @@ -138114,7 +138174,7 @@ index 58c9e37..6de8339 100644 if (initcall_blacklisted(fn)) return -EPERM; -@@ -793,18 +837,17 @@ int __init_or_module do_one_initcall(initcall_t fn) +@@ -769,18 +813,17 @@ int __init_or_module do_one_initcall(initcall_t fn) else ret = fn(); @@ -138137,7 +138197,7 @@ index 58c9e37..6de8339 100644 return ret; } -@@ -909,8 +952,8 @@ static int run_init_process(const char *init_filename) +@@ -885,8 +928,8 @@ static int run_init_process(const char *init_filename) { argv_init[0] = init_filename; return do_execve(getname_kernel(init_filename), @@ -138148,7 +138208,7 @@ index 58c9e37..6de8339 100644 } static int try_to_run_init_process(const char *init_filename) -@@ -927,6 +970,10 @@ static int try_to_run_init_process(const char *init_filename) +@@ -903,6 +946,10 @@ static int try_to_run_init_process(const char *init_filename) return ret; } @@ -138158,8 +138218,8 @@ index 58c9e37..6de8339 100644 + static noinline void __init kernel_init_freeable(void); - static int __ref kernel_init(void *unused) -@@ -953,6 +1000,11 @@ static int __ref kernel_init(void *unused) + #ifdef CONFIG_DEBUG_RODATA +@@ -951,6 +998,11 @@ static int __ref kernel_init(void *unused) ramdisk_execute_command, ret); } @@ -138171,7 +138231,7 @@ index 58c9e37..6de8339 100644 /* * We try each of these until one succeeds. * -@@ -1010,7 +1062,7 @@ static noinline void __init kernel_init_freeable(void) +@@ -1008,7 +1060,7 @@ static noinline void __init kernel_init_freeable(void) do_basic_setup(); /* Open the /dev/console on the rootfs, this should never fail */ @@ -138180,7 +138240,7 @@ index 58c9e37..6de8339 100644 pr_err("Warning: unable to open an initial console.\n"); (void) sys_dup(0); -@@ -1023,11 +1075,13 @@ static noinline void __init kernel_init_freeable(void) +@@ -1021,11 +1073,13 @@ static noinline void __init kernel_init_freeable(void) if (!ramdisk_execute_command) ramdisk_execute_command = "/init"; @@ -138307,7 +138367,7 @@ index 68d4e95..1477ded 100644 mq_table.data = get_mq(table); diff --git a/ipc/mqueue.c b/ipc/mqueue.c -index 781c139..d5f1246 100644 +index ade739f..b6c2f20 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -274,6 +274,7 @@ static struct inode *mqueue_get_inode(struct super_block *sb, @@ -138355,10 +138415,10 @@ index ed81aaf..4bb6792 100644 goto out_err; *pseg = seg; diff --git a/ipc/sem.c b/ipc/sem.c -index cddd5b5..f328fa7 100644 +index b3757ea..387f432 100644 --- a/ipc/sem.c +++ b/ipc/sem.c -@@ -1790,7 +1790,7 @@ static int get_queue_result(struct sem_queue *q) +@@ -1799,7 +1799,7 @@ static int get_queue_result(struct sem_queue *q) } SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, @@ -138367,7 +138427,7 @@ index cddd5b5..f328fa7 100644 { int error = -EINVAL; struct sem_array *sma; -@@ -2025,7 +2025,7 @@ out_free: +@@ -2034,7 +2034,7 @@ out_free: } SYSCALL_DEFINE3(semop, int, semid, struct sembuf __user *, tsops, @@ -138376,7 +138436,7 @@ index cddd5b5..f328fa7 100644 { return sys_semtimedop(semid, tsops, nsops, NULL); } -@@ -2180,7 +2180,8 @@ void exit_sem(struct task_struct *tsk) +@@ -2189,7 +2189,8 @@ void exit_sem(struct task_struct *tsk) static int sysvipc_sem_proc_show(struct seq_file *s, void *it) { struct user_namespace *user_ns = seq_user_ns(s); @@ -138493,7 +138553,7 @@ index 798cad1..d6ffc17 100644 if ((requested_mode & ~granted_mode & 0007) && !ns_capable(ns->user_ns, CAP_IPC_OWNER)) diff --git a/kernel/audit.c b/kernel/audit.c -index 3a3e5de..2f79ee6 100644 +index 678c3f0..188341c 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -123,7 +123,7 @@ u32 audit_sig_sid = 0; @@ -138523,7 +138583,7 @@ index 3a3e5de..2f79ee6 100644 audit_rate_limit, audit_backlog_limit); audit_panic(message); -@@ -846,7 +846,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) +@@ -856,7 +856,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) s.pid = audit_pid; s.rate_limit = audit_rate_limit; s.backlog_limit = audit_backlog_limit; @@ -138532,7 +138592,7 @@ index 3a3e5de..2f79ee6 100644 s.backlog = skb_queue_len(&audit_skb_queue); s.feature_bitmap = AUDIT_FEATURE_BITMAP_ALL; s.backlog_wait_time = audit_backlog_wait_time_master; -@@ -1156,7 +1156,7 @@ static void __net_exit audit_net_exit(struct net *net) +@@ -1173,7 +1173,7 @@ static void __net_exit audit_net_exit(struct net *net) netlink_kernel_release(sock); } @@ -138542,7 +138602,7 @@ index 3a3e5de..2f79ee6 100644 .exit = audit_net_exit, .id = &audit_net_id, diff --git a/kernel/auditsc.c b/kernel/auditsc.c -index 195ffae..fb880f9 100644 +index 7d0e3cf..023002c 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -1024,7 +1024,7 @@ static int audit_log_single_execve_arg(struct audit_context *context, @@ -138573,10 +138633,10 @@ index 195ffae..fb880f9 100644 task->sessionid = sessionid; task->loginuid = loginuid; diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c -index 972d9a8..367b6a1 100644 +index be0abf6..28fce60 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c -@@ -138,6 +138,8 @@ void __bpf_prog_free(struct bpf_prog *fp) +@@ -139,6 +139,8 @@ void __bpf_prog_free(struct bpf_prog *fp) EXPORT_SYMBOL_GPL(__bpf_prog_free); #ifdef CONFIG_BPF_JIT @@ -138585,7 +138645,7 @@ index 972d9a8..367b6a1 100644 struct bpf_binary_header * bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, unsigned int alignment, -@@ -151,27 +153,45 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, +@@ -152,27 +154,45 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, * random section of illegal instructions. */ size = round_up(proglen + sizeof(*hdr) + 128, PAGE_SIZE); @@ -138633,7 +138693,7 @@ index 972d9a8..367b6a1 100644 } #endif /* CONFIG_BPF_JIT */ -@@ -192,7 +212,7 @@ EXPORT_SYMBOL_GPL(__bpf_call_base); +@@ -193,7 +213,7 @@ EXPORT_SYMBOL_GPL(__bpf_call_base); * * Decode and execute eBPF instructions. */ @@ -138642,7 +138702,7 @@ index 972d9a8..367b6a1 100644 { u64 stack[MAX_BPF_STACK / sizeof(u64)]; u64 regs[MAX_BPF_REG], tmp; -@@ -696,7 +716,7 @@ static int bpf_check_tail_call(const struct bpf_prog *fp) +@@ -698,7 +718,7 @@ static int bpf_check_tail_call(const struct bpf_prog *fp) */ int bpf_prog_select_runtime(struct bpf_prog *fp) { @@ -138652,10 +138712,10 @@ index 972d9a8..367b6a1 100644 bpf_int_jit_compile(fp); bpf_prog_lock_ro(fp); diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c -index aa5f3977..d9f3f3e 100644 +index cf5e9f7..81ece72 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c -@@ -747,8 +747,16 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz +@@ -805,8 +805,16 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz union bpf_attr attr = {}; int err; @@ -138772,10 +138832,10 @@ index 45432b5..988f1e4 100644 +} +EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog); diff --git a/kernel/cgroup.c b/kernel/cgroup.c -index 355cd5f..93e1510 100644 +index 86cb5c6..2b03272 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -3333,7 +3333,7 @@ static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp, +@@ -3628,7 +3628,7 @@ static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp, key = &cft->lockdep_key; #endif kn = __kernfs_create_file(cgrp->kn, cgroup_file_name(cgrp, cft, name), @@ -138784,7 +138844,7 @@ index 355cd5f..93e1510 100644 NULL, key); if (IS_ERR(kn)) return PTR_ERR(kn); -@@ -3437,11 +3437,14 @@ static void cgroup_exit_cftypes(struct cftype *cfts) +@@ -3732,11 +3732,14 @@ static void cgroup_exit_cftypes(struct cftype *cfts) /* free copy for custom atomic_write_len, see init_cftypes() */ if (cft->max_write_len && cft->max_write_len != PAGE_SIZE) kfree(cft->kf_ops); @@ -138802,7 +138862,7 @@ index 355cd5f..93e1510 100644 } } -@@ -3472,8 +3475,10 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) +@@ -3767,8 +3770,10 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) kf_ops->atomic_write_len = cft->max_write_len; } @@ -138815,7 +138875,7 @@ index 355cd5f..93e1510 100644 } return 0; -@@ -3486,7 +3491,7 @@ static int cgroup_rm_cftypes_locked(struct cftype *cfts) +@@ -3781,7 +3786,7 @@ static int cgroup_rm_cftypes_locked(struct cftype *cfts) if (!cfts || !cfts[0].ss) return -ENOENT; @@ -138824,7 +138884,7 @@ index 355cd5f..93e1510 100644 cgroup_apply_cftypes(cfts, false); cgroup_exit_cftypes(cfts); return 0; -@@ -3543,7 +3548,7 @@ static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) +@@ -3838,7 +3843,7 @@ static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) mutex_lock(&cgroup_mutex); @@ -138833,7 +138893,7 @@ index 355cd5f..93e1510 100644 ret = cgroup_apply_cftypes(cfts, true); if (ret) cgroup_rm_cftypes_locked(cfts); -@@ -3564,8 +3569,10 @@ int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) +@@ -3859,8 +3864,10 @@ int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) { struct cftype *cft; @@ -138845,7 +138905,7 @@ index 355cd5f..93e1510 100644 return cgroup_add_cftypes(ss, cfts); } -@@ -3581,8 +3588,10 @@ int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) +@@ -3876,8 +3883,10 @@ int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) { struct cftype *cft; @@ -138857,17 +138917,17 @@ index 355cd5f..93e1510 100644 return cgroup_add_cftypes(ss, cfts); } -@@ -5725,6 +5734,9 @@ static void cgroup_release_agent(struct work_struct *work) +@@ -6044,6 +6053,9 @@ static void cgroup_release_agent(struct work_struct *work) if (!pathbuf || !agentbuf) goto out; + if (agentbuf[0] == '\0') + goto out; + - path = cgroup_path(cgrp, pathbuf, PATH_MAX); - if (!path) - goto out; -@@ -5987,7 +5999,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v) + spin_lock_bh(&css_set_lock); + path = cgroup_path_ns_locked(cgrp, pathbuf, PATH_MAX, &init_cgroup_ns); + spin_unlock_bh(&css_set_lock); +@@ -6463,7 +6475,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v) struct task_struct *task; int count = 0; @@ -139286,7 +139346,7 @@ index 2a20c0d..3eb7d03 100644 #ifdef CONFIG_MODULE_UNLOAD { diff --git a/kernel/events/core.c b/kernel/events/core.c -index 477fb6b..dcd02b5 100644 +index c0ded24..9a8ef89 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -350,8 +350,15 @@ static struct srcu_struct pmus_srcu; @@ -139295,27 +139355,18 @@ index 477fb6b..dcd02b5 100644 * 2 - disallow kernel profiling for unpriv + * 3 - disallow all unpriv perf event use */ --int sysctl_perf_event_paranoid __read_mostly = 1; +-int sysctl_perf_event_paranoid __read_mostly = 2; +#ifdef CONFIG_GRKERNSEC_PERF_HARDEN +int sysctl_perf_event_legitimately_concerned __read_only = 3; +#elif defined(CONFIG_GRKERNSEC_HIDESYM) +int sysctl_perf_event_legitimately_concerned __read_only = 2; +#else -+int sysctl_perf_event_legitimately_concerned __read_only = 1; ++int sysctl_perf_event_legitimately_concerned __read_only = 2; +#endif /* Minimum for 512 kiB + 1 user control page */ int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */ -@@ -377,7 +384,7 @@ static void update_perf_cpu_limits(void) - - tmp *= sysctl_perf_cpu_time_max_percent; - do_div(tmp, 100); -- ACCESS_ONCE(perf_sample_allowed_ns) = tmp; -+ ACCESS_ONCE_RW(perf_sample_allowed_ns) = tmp; - } - - static int perf_rotate_context(struct perf_cpu_context *cpuctx); -@@ -483,7 +490,7 @@ void perf_sample_event_took(u64 sample_len_ns) +@@ -499,7 +506,7 @@ void perf_sample_event_took(u64 sample_len_ns) } } @@ -139324,7 +139375,7 @@ index 477fb6b..dcd02b5 100644 static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx, enum event_type_t event_type); -@@ -949,8 +956,9 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu) +@@ -965,8 +972,9 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu) timer->function = perf_mux_hrtimer_handler; } @@ -139335,7 +139386,7 @@ index 477fb6b..dcd02b5 100644 struct hrtimer *timer = &cpuctx->hrtimer; struct pmu *pmu = cpuctx->ctx.pmu; unsigned long flags; -@@ -2894,7 +2902,7 @@ void __perf_event_task_sched_in(struct task_struct *prev, +@@ -2910,7 +2918,7 @@ void __perf_event_task_sched_in(struct task_struct *prev, perf_pmu_sched_task(prev, task, true); } @@ -139344,7 +139395,7 @@ index 477fb6b..dcd02b5 100644 { u64 frequency = event->attr.sample_freq; u64 sec = NSEC_PER_SEC; -@@ -3935,9 +3943,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running) +@@ -3963,9 +3971,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running) total += perf_event_count(event); *enabled += event->total_time_enabled + @@ -139356,7 +139407,7 @@ index 477fb6b..dcd02b5 100644 list_for_each_entry(child, &event->child_list, child_list) { (void)perf_event_read(child, false); -@@ -3969,12 +3977,12 @@ static int __perf_read_group_add(struct perf_event *leader, +@@ -3997,12 +4005,12 @@ static int __perf_read_group_add(struct perf_event *leader, */ if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) { values[n++] += leader->total_time_enabled + @@ -139371,7 +139422,7 @@ index 477fb6b..dcd02b5 100644 } /* -@@ -4476,10 +4484,10 @@ void perf_event_update_userpage(struct perf_event *event) +@@ -4512,10 +4520,10 @@ void perf_event_update_userpage(struct perf_event *event) userpg->offset -= local64_read(&event->hw.prev_count); userpg->time_enabled = enabled + @@ -139384,7 +139435,7 @@ index 477fb6b..dcd02b5 100644 arch_perf_update_userpage(event, userpg, now); -@@ -5154,7 +5162,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size, +@@ -5190,7 +5198,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size, /* Data. */ sp = perf_user_stack_pointer(regs); @@ -139393,7 +139444,7 @@ index 477fb6b..dcd02b5 100644 dyn_size = dump_size - rem; perf_output_skip(handle, rem); -@@ -5245,11 +5253,11 @@ static void perf_output_read_one(struct perf_output_handle *handle, +@@ -5281,11 +5289,11 @@ static void perf_output_read_one(struct perf_output_handle *handle, values[n++] = perf_event_count(event); if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) { values[n++] = enabled + @@ -139407,7 +139458,7 @@ index 477fb6b..dcd02b5 100644 } if (read_format & PERF_FORMAT_ID) values[n++] = primary_event_id(event); -@@ -7559,8 +7567,7 @@ perf_event_mux_interval_ms_store(struct device *dev, +@@ -7594,8 +7602,7 @@ perf_event_mux_interval_ms_store(struct device *dev, cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu); cpuctx->hrtimer_interval = ns_to_ktime(NSEC_PER_MSEC * timer); @@ -139417,7 +139468,7 @@ index 477fb6b..dcd02b5 100644 } put_online_cpus(); mutex_unlock(&mux_interval_mutex); -@@ -7929,7 +7936,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, +@@ -7983,7 +7990,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, event->parent = parent_event; event->ns = get_pid_ns(task_active_pid_ns(current)); @@ -139426,7 +139477,7 @@ index 477fb6b..dcd02b5 100644 event->state = PERF_EVENT_STATE_INACTIVE; -@@ -8291,6 +8298,11 @@ SYSCALL_DEFINE5(perf_event_open, +@@ -8345,6 +8352,11 @@ SYSCALL_DEFINE5(perf_event_open, if (flags & ~PERF_FLAG_ALL) return -EINVAL; @@ -139438,7 +139489,7 @@ index 477fb6b..dcd02b5 100644 err = perf_copy_attr(attr_uptr, &attr); if (err) return err; -@@ -8805,10 +8817,10 @@ static void sync_child_event(struct perf_event *child_event, +@@ -8859,10 +8871,10 @@ static void sync_child_event(struct perf_event *child_event, /* * Add back the child's count to the parent's count: */ @@ -139453,7 +139504,7 @@ index 477fb6b..dcd02b5 100644 } diff --git a/kernel/events/internal.h b/kernel/events/internal.h -index 2bbad9c..056f20c 100644 +index 4199b6d..a4bfd7e 100644 --- a/kernel/events/internal.h +++ b/kernel/events/internal.h @@ -115,10 +115,10 @@ static inline unsigned long perf_aux_size(struct ring_buffer *rb) @@ -139497,10 +139548,10 @@ index 2bbad9c..056f20c 100644 /* Callchain handling */ extern struct perf_callchain_entry * diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c -index 0167679..f0336a8 100644 +index 7edc95e..1313732 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c -@@ -1690,7 +1690,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) +@@ -1691,7 +1691,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) { struct page *page; uprobe_opcode_t opcode; @@ -139510,10 +139561,10 @@ index 0167679..f0336a8 100644 pagefault_disable(); result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr, diff --git a/kernel/exit.c b/kernel/exit.c -index c112abb..49d919f 100644 +index 79c7e38..e8a4ef023 100644 --- a/kernel/exit.c +++ b/kernel/exit.c -@@ -169,6 +169,10 @@ void release_task(struct task_struct *p) +@@ -170,6 +170,10 @@ void release_task(struct task_struct *p) struct task_struct *leader; int zap_leader; repeat: @@ -139524,7 +139575,7 @@ index c112abb..49d919f 100644 /* don't need to get the RCU readlock here - the process is dead and * can't be modifying its own credentials. But shut RCU-lockdep up */ rcu_read_lock(); -@@ -448,9 +452,8 @@ static struct task_struct *find_alive_thread(struct task_struct *p) +@@ -449,9 +453,8 @@ static struct task_struct *find_alive_thread(struct task_struct *p) return NULL; } @@ -139535,7 +139586,7 @@ index c112abb..49d919f 100644 { struct pid_namespace *pid_ns = task_active_pid_ns(father); struct task_struct *reaper = pid_ns->child_reaper; -@@ -547,6 +550,8 @@ static void reparent_leader(struct task_struct *father, struct task_struct *p, +@@ -548,6 +551,8 @@ static void reparent_leader(struct task_struct *father, struct task_struct *p, * jobs, send them a SIGHUP and then a SIGCONT. (POSIX 3.2.2.2) */ static void forget_original_parent(struct task_struct *father, @@ -139544,16 +139595,16 @@ index c112abb..49d919f 100644 struct list_head *dead) { struct task_struct *p, *t, *reaper; -@@ -654,6 +659,8 @@ void do_exit(long code) +@@ -655,6 +660,8 @@ void do_exit(long code) int group_dead; TASKS_RCU(int tasks_rcu_i); + set_fs(USER_DS); + profile_task_exit(tsk); + kcov_task_exit(tsk); - WARN_ON(blk_needs_flush_plug(tsk)); -@@ -670,7 +677,6 @@ void do_exit(long code) +@@ -672,7 +679,6 @@ void do_exit(long code) * mm_release()->clear_child_tid() from writing to a user-controlled * kernel address. */ @@ -139561,7 +139612,7 @@ index c112abb..49d919f 100644 ptrace_event(PTRACE_EVENT_EXIT, code); -@@ -730,6 +736,9 @@ void do_exit(long code) +@@ -732,6 +738,9 @@ void do_exit(long code) tsk->exit_code = code; taskstats_exit(tsk, group_dead); @@ -139571,7 +139622,7 @@ index c112abb..49d919f 100644 exit_mm(tsk); if (group_dead) -@@ -849,7 +858,7 @@ SYSCALL_DEFINE1(exit, int, error_code) +@@ -851,7 +860,7 @@ SYSCALL_DEFINE1(exit, int, error_code) * Take down every thread in the group. This is called by fatal signals * as well as by sys_exit_group (below). */ @@ -139580,7 +139631,7 @@ index c112abb..49d919f 100644 do_group_exit(int exit_code) { struct signal_struct *sig = current->signal; -@@ -977,6 +986,7 @@ static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p, +@@ -979,6 +988,7 @@ static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p, * the lock and this task is uninteresting. If we return nonzero, we have * released the lock and the system call should return. */ @@ -139588,7 +139639,7 @@ index c112abb..49d919f 100644 static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p) { int state, retval, status; -@@ -993,6 +1003,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p) +@@ -995,6 +1005,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p) get_task_struct(p); read_unlock(&tasklist_lock); @@ -139596,7 +139647,7 @@ index c112abb..49d919f 100644 sched_annotate_sleep(); if ((exit_code & 0x7f) == 0) { -@@ -1015,6 +1026,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p) +@@ -1017,6 +1028,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p) * We own this thread, nobody else can reap it. */ read_unlock(&tasklist_lock); @@ -139604,7 +139655,7 @@ index c112abb..49d919f 100644 sched_annotate_sleep(); /* -@@ -1157,6 +1169,8 @@ static int *task_stopped_code(struct task_struct *p, bool ptrace) +@@ -1159,6 +1171,8 @@ static int *task_stopped_code(struct task_struct *p, bool ptrace) * search should terminate. */ static int wait_task_stopped(struct wait_opts *wo, @@ -139613,7 +139664,7 @@ index c112abb..49d919f 100644 int ptrace, struct task_struct *p) { struct siginfo __user *infop; -@@ -1204,6 +1218,7 @@ unlock_sig: +@@ -1206,6 +1220,7 @@ unlock_sig: pid = task_pid_vnr(p); why = ptrace ? CLD_TRAPPED : CLD_STOPPED; read_unlock(&tasklist_lock); @@ -139621,7 +139672,7 @@ index c112abb..49d919f 100644 sched_annotate_sleep(); if (unlikely(wo->wo_flags & WNOWAIT)) -@@ -1241,6 +1256,7 @@ unlock_sig: +@@ -1243,6 +1258,7 @@ unlock_sig: * the lock and this task is uninteresting. If we return nonzero, we have * released the lock and the system call should return. */ @@ -139629,7 +139680,7 @@ index c112abb..49d919f 100644 static int wait_task_continued(struct wait_opts *wo, struct task_struct *p) { int retval; -@@ -1267,6 +1283,7 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p) +@@ -1269,6 +1285,7 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p) pid = task_pid_vnr(p); get_task_struct(p); read_unlock(&tasklist_lock); @@ -139637,7 +139688,7 @@ index c112abb..49d919f 100644 sched_annotate_sleep(); if (!wo->wo_info) { -@@ -1296,6 +1313,8 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p) +@@ -1298,6 +1315,8 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p) * or another error from security_task_wait(), or still -ECHILD. */ static int wait_consider_task(struct wait_opts *wo, int ptrace, @@ -139646,7 +139697,7 @@ index c112abb..49d919f 100644 struct task_struct *p) { /* -@@ -1421,6 +1440,7 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace, +@@ -1423,6 +1442,7 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace, * ->notask_error is 0 if there were any eligible children, * or another error from security_task_wait(), or still -ECHILD. */ @@ -139654,7 +139705,7 @@ index c112abb..49d919f 100644 static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk) { struct task_struct *p; -@@ -1435,6 +1455,7 @@ static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk) +@@ -1437,6 +1457,7 @@ static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk) return 0; } @@ -139662,7 +139713,7 @@ index c112abb..49d919f 100644 static int ptrace_do_wait(struct wait_opts *wo, struct task_struct *tsk) { struct task_struct *p; -@@ -1498,12 +1519,16 @@ repeat: +@@ -1500,12 +1521,16 @@ repeat: tsk = current; do { retval = do_wait_thread(wo, tsk); @@ -139682,10 +139733,10 @@ index c112abb..49d919f 100644 if (wo->wo_flags & __WNOTHREAD) break; diff --git a/kernel/fork.c b/kernel/fork.c -index 2e391c7..87a5bfe 100644 +index d277e83..824b594 100644 --- a/kernel/fork.c +++ b/kernel/fork.c -@@ -188,12 +188,55 @@ static void free_thread_info(struct thread_info *ti) +@@ -197,12 +197,55 @@ static void free_thread_info(struct thread_info *ti) void thread_info_cache_init(void) { thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE, @@ -139742,7 +139793,7 @@ index 2e391c7..87a5bfe 100644 /* SLAB cache for signal_struct structures (tsk->signal) */ static struct kmem_cache *signal_cachep; -@@ -212,18 +255,22 @@ struct kmem_cache *vm_area_cachep; +@@ -221,18 +264,22 @@ struct kmem_cache *vm_area_cachep; /* SLAB cache for mm_struct structures (tsk->mm) */ static struct kmem_cache *mm_cachep; @@ -139768,7 +139819,7 @@ index 2e391c7..87a5bfe 100644 rt_mutex_debug_task_free(tsk); ftrace_graph_exit_task(tsk); put_seccomp_filter(tsk); -@@ -290,7 +337,7 @@ static void set_max_threads(unsigned int max_threads_suggested) +@@ -299,7 +346,7 @@ static void set_max_threads(unsigned int max_threads_suggested) #ifdef CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT /* Initialized by the architecture: */ @@ -139777,7 +139828,7 @@ index 2e391c7..87a5bfe 100644 #endif void __init fork_init(void) -@@ -335,6 +382,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -344,6 +391,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) { struct task_struct *tsk; struct thread_info *ti; @@ -139785,7 +139836,7 @@ index 2e391c7..87a5bfe 100644 int node = tsk_fork_get_node(orig); int err; -@@ -342,7 +390,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -351,7 +399,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) if (!tsk) return NULL; @@ -139794,7 +139845,7 @@ index 2e391c7..87a5bfe 100644 if (!ti) goto free_tsk; -@@ -351,6 +399,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -360,6 +408,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) goto free_ti; tsk->stack = ti; @@ -139804,7 +139855,7 @@ index 2e391c7..87a5bfe 100644 #ifdef CONFIG_SECCOMP /* * We must handle setting up seccomp filters once we're under -@@ -367,7 +418,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -376,7 +427,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) set_task_stack_end_magic(tsk); #ifdef CONFIG_CC_STACKPROTECTOR @@ -139813,13 +139864,15 @@ index 2e391c7..87a5bfe 100644 #endif /* -@@ -382,24 +433,90 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -391,26 +442,92 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) tsk->task_frag.page = NULL; tsk->wake_q.next = NULL; - account_kernel_stack(ti, 1); + account_kernel_stack(tsk, ti, 1); + kcov_task_init(tsk); + return tsk; free_ti: @@ -139908,7 +139961,7 @@ index 2e391c7..87a5bfe 100644 uprobe_start_dup_mmap(); down_write(&oldmm->mmap_sem); -@@ -430,52 +547,14 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) +@@ -441,52 +558,14 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) prev = NULL; for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) { @@ -139965,7 +140018,7 @@ index 2e391c7..87a5bfe 100644 } /* -@@ -507,6 +586,38 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) +@@ -518,6 +597,38 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) if (retval) goto out; } @@ -140004,7 +140057,7 @@ index 2e391c7..87a5bfe 100644 /* a new mm has just been created */ arch_dup_mmap(oldmm, mm); retval = 0; -@@ -516,14 +627,6 @@ out: +@@ -527,14 +638,6 @@ out: up_write(&oldmm->mmap_sem); uprobe_end_dup_mmap(); return retval; @@ -140019,7 +140072,7 @@ index 2e391c7..87a5bfe 100644 } static inline int mm_alloc_pgd(struct mm_struct *mm) -@@ -798,8 +901,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode) +@@ -809,8 +912,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode) return ERR_PTR(err); mm = get_task_mm(task); @@ -140030,7 +140083,7 @@ index 2e391c7..87a5bfe 100644 mmput(mm); mm = ERR_PTR(-EACCES); } -@@ -1000,13 +1103,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) +@@ -1011,13 +1114,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) spin_unlock(&fs->lock); return -EAGAIN; } @@ -140052,7 +140105,7 @@ index 2e391c7..87a5bfe 100644 return 0; } -@@ -1239,7 +1349,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid) +@@ -1250,7 +1360,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid) * parts of the process environment (as per the clone * flags). The actual kick-off is left to the caller. */ @@ -140061,7 +140114,7 @@ index 2e391c7..87a5bfe 100644 unsigned long stack_start, unsigned long stack_size, int __user *child_tidptr, -@@ -1310,6 +1420,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, +@@ -1321,6 +1431,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled); #endif retval = -EAGAIN; @@ -140071,7 +140124,7 @@ index 2e391c7..87a5bfe 100644 if (atomic_read(&p->real_cred->user->processes) >= task_rlimit(p, RLIMIT_NPROC)) { if (p->real_cred->user != INIT_USER && -@@ -1568,6 +1681,16 @@ static struct task_struct *copy_process(unsigned long clone_flags, +@@ -1579,6 +1692,16 @@ static struct task_struct *copy_process(unsigned long clone_flags, goto bad_fork_cancel_cgroup; } @@ -140088,7 +140141,7 @@ index 2e391c7..87a5bfe 100644 if (likely(p->pid)) { ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace); -@@ -1657,6 +1780,8 @@ bad_fork_cleanup_count: +@@ -1668,6 +1791,8 @@ bad_fork_cleanup_count: bad_fork_free: free_task(p); fork_out: @@ -140097,7 +140150,7 @@ index 2e391c7..87a5bfe 100644 return ERR_PTR(retval); } -@@ -1719,6 +1844,7 @@ long _do_fork(unsigned long clone_flags, +@@ -1730,6 +1855,7 @@ long _do_fork(unsigned long clone_flags, p = copy_process(clone_flags, stack_start, stack_size, child_tidptr, NULL, trace, tls); @@ -140105,7 +140158,7 @@ index 2e391c7..87a5bfe 100644 /* * Do this prior waking up the new thread - the thread pointer * might get invalid after that point, if the thread exits quickly. -@@ -1735,6 +1861,8 @@ long _do_fork(unsigned long clone_flags, +@@ -1746,6 +1872,8 @@ long _do_fork(unsigned long clone_flags, if (clone_flags & CLONE_PARENT_SETTID) put_user(nr, parent_tidptr); @@ -140114,7 +140167,7 @@ index 2e391c7..87a5bfe 100644 if (clone_flags & CLONE_VFORK) { p->vfork_done = &vfork; init_completion(&vfork); -@@ -1871,7 +1999,7 @@ void __init proc_caches_init(void) +@@ -1882,7 +2010,7 @@ void __init proc_caches_init(void) sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN, SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK|SLAB_ACCOUNT, NULL); @@ -140123,7 +140176,7 @@ index 2e391c7..87a5bfe 100644 mmap_init(); nsproxy_cache_init(); } -@@ -1919,7 +2047,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp) +@@ -1930,7 +2058,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp) return 0; /* don't need lock here; in the worst case we'll do useless copy */ @@ -140132,7 +140185,7 @@ index 2e391c7..87a5bfe 100644 return 0; *new_fsp = copy_fs_struct(fs); -@@ -2032,7 +2160,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) +@@ -2043,7 +2171,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) fs = current->fs; spin_lock(&fs->lock); current->fs = new_fs; @@ -140142,7 +140195,7 @@ index 2e391c7..87a5bfe 100644 new_fs = NULL; else new_fs = fs; -@@ -2096,7 +2225,7 @@ int unshare_files(struct files_struct **displaced) +@@ -2107,7 +2236,7 @@ int unshare_files(struct files_struct **displaced) int sysctl_max_threads(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -140152,7 +140205,7 @@ index 2e391c7..87a5bfe 100644 int threads = max_threads; int min = MIN_THREADS; diff --git a/kernel/futex.c b/kernel/futex.c -index 11b5021..fb30ef5 100644 +index c20f06f..a00ab76 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -202,7 +202,7 @@ struct futex_pi_state { @@ -140185,7 +140238,7 @@ index 11b5021..fb30ef5 100644 /* * The futex address must be "naturally" aligned. */ -@@ -643,7 +648,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr, +@@ -726,7 +731,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr, static int get_futex_value_locked(u32 *dest, u32 __user *from) { @@ -140194,7 +140247,7 @@ index 11b5021..fb30ef5 100644 pagefault_disable(); ret = __copy_from_user_inatomic(dest, from, sizeof(u32)); -@@ -3154,6 +3159,7 @@ static void __init futex_detect_cmpxchg(void) +@@ -3241,6 +3246,7 @@ static void __init futex_detect_cmpxchg(void) { #ifndef CONFIG_HAVE_FUTEX_CMPXCHG u32 curval; @@ -140202,7 +140255,7 @@ index 11b5021..fb30ef5 100644 /* * This will fail and we want it. Some arch implementations do -@@ -3165,8 +3171,11 @@ static void __init futex_detect_cmpxchg(void) +@@ -3252,8 +3258,11 @@ static void __init futex_detect_cmpxchg(void) * implementation, the non-functional ones will return * -ENOSYS. */ @@ -140228,10 +140281,10 @@ index 4ae3232..5adee02 100644 { compat_uptr_t base = ptr_to_compat(entry); diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c -index 84118723..317f7a5 100644 +index cc1cc64..e7b7276 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c -@@ -958,7 +958,7 @@ static int irq_thread(void *data) +@@ -956,7 +956,7 @@ static int irq_thread(void *data) action_ret = handler_fn(desc, action); if (action_ret == IRQ_HANDLED) @@ -140283,10 +140336,10 @@ index 38e89ce..8b7a537 100644 /** diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c -index 3214417..e02594d 100644 +index 5707f97..d526a3d 100644 --- a/kernel/irq/spurious.c +++ b/kernel/irq/spurious.c -@@ -336,7 +336,7 @@ void note_interrupt(struct irq_desc *desc, irqreturn_t action_ret) +@@ -334,7 +334,7 @@ void note_interrupt(struct irq_desc *desc, irqreturn_t action_ret) * count. We just care about the count being * different than the one we saw before. */ @@ -140331,7 +140384,7 @@ index 05254ee..a2e0725 100644 static int diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c -index 5c5987f..d59272e 100644 +index fafd1a3..316983e 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c @@ -11,6 +11,9 @@ @@ -140344,7 +140397,7 @@ index 5c5987f..d59272e 100644 #include <linux/kallsyms.h> #include <linux/module.h> #include <linux/init.h> -@@ -54,12 +57,33 @@ extern const unsigned long kallsyms_markers[] __weak; +@@ -58,12 +61,33 @@ extern const unsigned long kallsyms_markers[] __weak; static inline int is_kernel_inittext(unsigned long addr) { @@ -140378,7 +140431,7 @@ index 5c5987f..d59272e 100644 static inline int is_kernel_text(unsigned long addr) { if ((addr >= (unsigned long)_stext && addr <= (unsigned long)_etext) || -@@ -70,13 +94,28 @@ static inline int is_kernel_text(unsigned long addr) +@@ -74,13 +98,28 @@ static inline int is_kernel_text(unsigned long addr) static inline int is_kernel(unsigned long addr) { @@ -140407,7 +140460,7 @@ index 5c5987f..d59272e 100644 if (all_var) return is_kernel(addr); -@@ -434,10 +473,11 @@ int sprint_backtrace(char *buffer, unsigned long address) +@@ -458,10 +497,11 @@ int sprint_backtrace(char *buffer, unsigned long address) } /* Look up a kernel symbol and print it to the kernel messages. */ @@ -140420,7 +140473,7 @@ index 5c5987f..d59272e 100644 sprint_symbol(buffer, address); printk(fmt, buffer); -@@ -481,7 +521,6 @@ static unsigned long get_ksymbol_core(struct kallsym_iter *iter) +@@ -505,7 +545,6 @@ static unsigned long get_ksymbol_core(struct kallsym_iter *iter) static void reset_iter(struct kallsym_iter *iter, loff_t new_pos) { @@ -140428,7 +140481,7 @@ index 5c5987f..d59272e 100644 iter->nameoff = get_symbol_offset(new_pos); iter->pos = new_pos; } -@@ -529,6 +568,11 @@ static int s_show(struct seq_file *m, void *p) +@@ -553,6 +592,11 @@ static int s_show(struct seq_file *m, void *p) { struct kallsym_iter *iter = m->private; @@ -140440,7 +140493,7 @@ index 5c5987f..d59272e 100644 /* Some debugging symbols have no name. Ignore them. */ if (!iter->name[0]) return 0; -@@ -542,6 +586,7 @@ static int s_show(struct seq_file *m, void *p) +@@ -566,6 +610,7 @@ static int s_show(struct seq_file *m, void *p) */ type = iter->exported ? toupper(iter->type) : tolower(iter->type); @@ -140478,10 +140531,10 @@ index ee70aef..55095dd 100644 /* Don't allow clients that don't understand the native diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c -index 8dc6591..508a794 100644 +index 1391d3e..8681634 100644 --- a/kernel/kexec_core.c +++ b/kernel/kexec_core.c -@@ -848,7 +848,7 @@ int kimage_load_segment(struct kimage *image, +@@ -850,7 +850,7 @@ int kimage_load_segment(struct kimage *image, struct kimage *kexec_image; struct kimage *kexec_crash_image; @@ -140768,10 +140821,10 @@ index 152da4a..4ab2150 100644 .name = "notes", .mode = S_IRUGO, diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c -index 716547f..91e3067 100644 +index 78c1c0e..5c173df 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c -@@ -613,6 +613,10 @@ static int static_obj(void *obj) +@@ -597,6 +597,10 @@ static int static_obj(void *obj) end = (unsigned long) &_end, addr = (unsigned long) obj; @@ -140782,7 +140835,7 @@ index 716547f..91e3067 100644 /* * static variable? */ -@@ -757,6 +761,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force) +@@ -727,6 +731,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force) if (!static_obj(lock->key)) { debug_locks_off(); printk("INFO: trying to register non-static key.\n"); @@ -140790,7 +140843,7 @@ index 716547f..91e3067 100644 printk("the code is fine but needs lockdep annotation.\n"); printk("turning off the locking correctness validator.\n"); dump_stack(); -@@ -3106,7 +3111,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, +@@ -3225,7 +3230,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, if (!class) return 0; } @@ -140800,7 +140853,7 @@ index 716547f..91e3067 100644 printk("\nacquire class [%p] %s", class->key, class->name); if (class->name_version > 1) diff --git a/kernel/locking/lockdep_proc.c b/kernel/locking/lockdep_proc.c -index dbb61a3..2b50dde 100644 +index a0f61ef..b6aef3c 100644 --- a/kernel/locking/lockdep_proc.c +++ b/kernel/locking/lockdep_proc.c @@ -65,7 +65,7 @@ static int l_show(struct seq_file *m, void *v) @@ -140821,7 +140874,7 @@ index dbb61a3..2b50dde 100644 print_name(m, entry->class); seq_puts(m, "\n"); } -@@ -152,7 +152,7 @@ static int lc_show(struct seq_file *m, void *v) +@@ -154,7 +154,7 @@ static int lc_show(struct seq_file *m, void *v) if (!class->key) continue; @@ -140830,7 +140883,7 @@ index dbb61a3..2b50dde 100644 print_name(m, class); seq_puts(m, "\n"); } -@@ -508,7 +508,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data) +@@ -510,7 +510,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data) if (!i) seq_line(m, '-', 40-namelen, namelen); @@ -140839,7 +140892,7 @@ index dbb61a3..2b50dde 100644 (void *)class->contention_point[i]); seq_printf(m, "%40s %14lu %29s %pS\n", name, stats->contention_point[i], -@@ -523,7 +523,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data) +@@ -525,7 +525,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data) if (!i) seq_line(m, '-', 40-namelen, namelen); @@ -140897,7 +140950,7 @@ index 0799fd3..d06ae3b 100644 extern void debug_mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key); diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c -index 0551c21..f753f95 100644 +index e364b42..642bee3 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -534,7 +534,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, @@ -140928,10 +140981,10 @@ index 0551c21..f753f95 100644 debug_mutex_free_waiter(&waiter); mutex_release(&lock->dep_map, 1, ip); diff --git a/kernel/module.c b/kernel/module.c -index 794ebe8..f81f123 100644 +index 041200c..9a19b8c 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -59,6 +59,7 @@ +@@ -60,6 +60,7 @@ #include <linux/jump_label.h> #include <linux/pfn.h> #include <linux/bsearch.h> @@ -140939,7 +140992,7 @@ index 794ebe8..f81f123 100644 #include <uapi/linux/module.h> #include "module-internal.h" -@@ -106,16 +107,32 @@ static LIST_HEAD(modules); +@@ -107,16 +108,32 @@ static LIST_HEAD(modules); static __always_inline unsigned long __mod_tree_val(struct latch_tree_node *n) { @@ -140976,7 +141029,7 @@ index 794ebe8..f81f123 100644 } static __always_inline bool -@@ -148,14 +165,19 @@ static const struct latch_tree_ops mod_tree_ops = { +@@ -149,14 +166,19 @@ static const struct latch_tree_ops mod_tree_ops = { static struct mod_tree_root { struct latch_tree_root root; @@ -141001,7 +141054,7 @@ index 794ebe8..f81f123 100644 static noinline void __mod_tree_insert(struct mod_tree_node *node) { -@@ -173,23 +195,31 @@ static void __mod_tree_remove(struct mod_tree_node *node) +@@ -174,23 +196,31 @@ static void __mod_tree_remove(struct mod_tree_node *node) */ static void mod_tree_insert(struct module *mod) { @@ -141041,7 +141094,7 @@ index 794ebe8..f81f123 100644 mod_tree_remove_init(mod); } -@@ -206,7 +236,8 @@ static struct module *mod_find(unsigned long addr) +@@ -207,7 +237,8 @@ static struct module *mod_find(unsigned long addr) #else /* MODULES_TREE_LOOKUP */ @@ -141051,7 +141104,7 @@ index 794ebe8..f81f123 100644 static void mod_tree_insert(struct module *mod) { } static void mod_tree_remove_init(struct module *mod) { } -@@ -230,22 +261,36 @@ static struct module *mod_find(unsigned long addr) +@@ -231,22 +262,36 @@ static struct module *mod_find(unsigned long addr) * Bounds of module text, for speeding up __module_address. * Protected by module_mutex. */ @@ -141096,7 +141149,7 @@ index 794ebe8..f81f123 100644 } #ifdef CONFIG_KGDB_KDB -@@ -274,7 +319,7 @@ module_param(sig_enforce, bool_enable_only, 0644); +@@ -275,7 +320,7 @@ module_param(sig_enforce, bool_enable_only, 0644); #endif /* !CONFIG_MODULE_SIG_FORCE */ /* Block module loading/unloading? */ @@ -141105,7 +141158,7 @@ index 794ebe8..f81f123 100644 core_param(nomodule, modules_disabled, bint, 0); /* Waiting for a module to finish initializing? */ -@@ -452,7 +497,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr, +@@ -453,7 +498,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr, return true; list_for_each_entry_rcu(mod, &modules, list) { @@ -141114,7 +141167,7 @@ index 794ebe8..f81f123 100644 { mod->syms, mod->syms + mod->num_syms, mod->crcs, NOT_GPL_ONLY, false }, { mod->gpl_syms, mod->gpl_syms + mod->num_gpl_syms, -@@ -477,7 +522,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr, +@@ -478,7 +523,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr, if (mod->state == MODULE_STATE_UNFORMED) continue; @@ -141123,7 +141176,7 @@ index 794ebe8..f81f123 100644 return true; } return false; -@@ -623,7 +668,7 @@ static int percpu_modalloc(struct module *mod, struct load_info *info) +@@ -624,7 +669,7 @@ static int percpu_modalloc(struct module *mod, struct load_info *info) if (!pcpusec->sh_size) return 0; @@ -141132,7 +141185,7 @@ index 794ebe8..f81f123 100644 pr_warn("%s: per-cpu alignment %li > %li\n", mod->name, align, PAGE_SIZE); align = PAGE_SIZE; -@@ -1195,7 +1240,7 @@ struct module_attribute module_uevent = +@@ -1197,7 +1242,7 @@ struct module_attribute module_uevent = static ssize_t show_coresize(struct module_attribute *mattr, struct module_kobject *mk, char *buffer) { @@ -141141,7 +141194,7 @@ index 794ebe8..f81f123 100644 } static struct module_attribute modinfo_coresize = -@@ -1204,7 +1249,7 @@ static struct module_attribute modinfo_coresize = +@@ -1206,7 +1251,7 @@ static struct module_attribute modinfo_coresize = static ssize_t show_initsize(struct module_attribute *mattr, struct module_kobject *mk, char *buffer) { @@ -141150,7 +141203,7 @@ index 794ebe8..f81f123 100644 } static struct module_attribute modinfo_initsize = -@@ -1296,12 +1341,29 @@ static int check_version(Elf_Shdr *sechdrs, +@@ -1298,12 +1343,29 @@ static int check_version(Elf_Shdr *sechdrs, goto bad_version; } @@ -141180,7 +141233,7 @@ index 794ebe8..f81f123 100644 return 0; } -@@ -1429,7 +1491,7 @@ resolve_symbol_wait(struct module *mod, +@@ -1431,7 +1493,7 @@ resolve_symbol_wait(struct module *mod, */ #ifdef CONFIG_SYSFS @@ -141189,7 +141242,7 @@ index 794ebe8..f81f123 100644 static inline bool sect_empty(const Elf_Shdr *sect) { return !(sect->sh_flags & SHF_ALLOC) || sect->sh_size == 0; -@@ -1567,7 +1629,7 @@ static void add_notes_attrs(struct module *mod, const struct load_info *info) +@@ -1569,7 +1631,7 @@ static void add_notes_attrs(struct module *mod, const struct load_info *info) { unsigned int notes, loaded, i; struct module_notes_attrs *notes_attrs; @@ -141198,7 +141251,7 @@ index 794ebe8..f81f123 100644 /* failed to create section attributes, so can't create notes */ if (!mod->sect_attrs) -@@ -1679,7 +1741,7 @@ static void del_usage_links(struct module *mod) +@@ -1681,7 +1743,7 @@ static void del_usage_links(struct module *mod) static int module_add_modinfo_attrs(struct module *mod) { struct module_attribute *attr; @@ -141207,7 +141260,7 @@ index 794ebe8..f81f123 100644 int error = 0; int i; -@@ -1866,30 +1928,28 @@ static void mod_sysfs_teardown(struct module *mod) +@@ -1868,30 +1930,28 @@ static void mod_sysfs_teardown(struct module *mod) static void frob_text(const struct module_layout *layout, int (*set_memory)(unsigned long start, int num_pages)) { @@ -141250,7 +141303,7 @@ index 794ebe8..f81f123 100644 } /* livepatching wants to disable read-only so it can frob module. */ -@@ -1966,7 +2026,15 @@ static void disable_ro_nx(const struct module_layout *layout) +@@ -1968,7 +2028,15 @@ static void disable_ro_nx(const struct module_layout *layout) } #else @@ -141267,7 +141320,7 @@ index 794ebe8..f81f123 100644 static void module_enable_nx(const struct module *mod) { } static void module_disable_nx(const struct module *mod) { } #endif -@@ -2023,16 +2091,19 @@ static void free_module(struct module *mod) +@@ -2025,16 +2093,19 @@ static void free_module(struct module *mod) /* This may be empty, but that's OK */ disable_ro_nx(&mod->init_layout); module_arch_freeing_init(mod); @@ -141290,7 +141343,7 @@ index 794ebe8..f81f123 100644 #ifdef CONFIG_MPU update_protections(current->mm); -@@ -2101,9 +2172,31 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) +@@ -2103,9 +2174,31 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) int ret = 0; const struct kernel_symbol *ksym; @@ -141322,7 +141375,7 @@ index 794ebe8..f81f123 100644 switch (sym[i].st_shndx) { case SHN_COMMON: /* Ignore common symbols */ -@@ -2128,7 +2221,9 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) +@@ -2130,7 +2223,9 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) ksym = resolve_symbol_wait(mod, info, name); /* Ok if resolved. */ if (ksym && !IS_ERR(ksym)) { @@ -141332,7 +141385,7 @@ index 794ebe8..f81f123 100644 break; } -@@ -2147,11 +2242,20 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) +@@ -2149,11 +2244,20 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) secbase = (unsigned long)mod_percpu(mod); else secbase = info->sechdrs[sym[i].st_shndx].sh_addr; @@ -141353,7 +141406,7 @@ index 794ebe8..f81f123 100644 return ret; } -@@ -2235,22 +2339,12 @@ static void layout_sections(struct module *mod, struct load_info *info) +@@ -2237,22 +2341,12 @@ static void layout_sections(struct module *mod, struct load_info *info) || s->sh_entsize != ~0UL || strstarts(sname, ".init")) continue; @@ -141380,7 +141433,7 @@ index 794ebe8..f81f123 100644 } pr_debug("Init section allocation order:\n"); -@@ -2264,23 +2358,13 @@ static void layout_sections(struct module *mod, struct load_info *info) +@@ -2266,23 +2360,13 @@ static void layout_sections(struct module *mod, struct load_info *info) || s->sh_entsize != ~0UL || !strstarts(sname, ".init")) continue; @@ -141409,7 +141462,7 @@ index 794ebe8..f81f123 100644 } } -@@ -2458,7 +2542,7 @@ static void layout_symtab(struct module *mod, struct load_info *info) +@@ -2460,7 +2544,7 @@ static void layout_symtab(struct module *mod, struct load_info *info) /* Put symbol section at end of init part of module. */ symsect->sh_flags |= SHF_ALLOC; @@ -141418,7 +141471,7 @@ index 794ebe8..f81f123 100644 info->index.sym) | INIT_OFFSET_MASK; pr_debug("\t%s\n", info->secstrings + symsect->sh_name); -@@ -2476,23 +2560,23 @@ static void layout_symtab(struct module *mod, struct load_info *info) +@@ -2478,23 +2562,23 @@ static void layout_symtab(struct module *mod, struct load_info *info) } /* Append room for core symbols at end of core part. */ @@ -141451,7 +141504,7 @@ index 794ebe8..f81f123 100644 } /* -@@ -2509,7 +2593,9 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) +@@ -2511,7 +2595,9 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) Elf_Shdr *symsec = &info->sechdrs[info->index.sym]; /* Set up to point into init section. */ @@ -141462,7 +141515,7 @@ index 794ebe8..f81f123 100644 mod->kallsyms->symtab = (void *)symsec->sh_addr; mod->kallsyms->num_symtab = symsec->sh_size / sizeof(Elf_Sym); -@@ -2522,8 +2608,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) +@@ -2524,8 +2610,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) = elf_type(&mod->kallsyms->symtab[i], info); /* Now populate the cut down core kallsyms for after init. */ @@ -141473,7 +141526,7 @@ index 794ebe8..f81f123 100644 src = mod->kallsyms->symtab; for (ndst = i = 0; i < mod->kallsyms->num_symtab; i++) { if (i == 0 || -@@ -2536,6 +2622,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) +@@ -2538,6 +2624,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) } } mod->core_kallsyms.num_symtab = ndst; @@ -141482,7 +141535,7 @@ index 794ebe8..f81f123 100644 } #else static inline void layout_symtab(struct module *mod, struct load_info *info) -@@ -2835,7 +2923,15 @@ static struct module *setup_load_info(struct load_info *info, int flags) +@@ -2780,7 +2868,15 @@ static struct module *setup_load_info(struct load_info *info, int flags) mod = (void *)info->sechdrs[info->index.mod].sh_addr; if (info->index.sym == 0) { @@ -141498,7 +141551,7 @@ index 794ebe8..f81f123 100644 return ERR_PTR(-ENOEXEC); } -@@ -2851,8 +2947,16 @@ static struct module *setup_load_info(struct load_info *info, int flags) +@@ -2796,8 +2892,16 @@ static struct module *setup_load_info(struct load_info *info, int flags) static int check_modinfo(struct module *mod, struct load_info *info, int flags) { const char *modmagic = get_modinfo(info, "vermagic"); @@ -141515,7 +141568,7 @@ index 794ebe8..f81f123 100644 if (flags & MODULE_INIT_IGNORE_VERMAGIC) modmagic = NULL; -@@ -2877,7 +2981,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) +@@ -2822,7 +2926,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) } /* Set up license info based on the info section */ @@ -141524,7 +141577,7 @@ index 794ebe8..f81f123 100644 return 0; } -@@ -2974,7 +3078,7 @@ static int move_module(struct module *mod, struct load_info *info) +@@ -2919,7 +3023,7 @@ static int move_module(struct module *mod, struct load_info *info) void *ptr; /* Do the allocs. */ @@ -141533,7 +141586,7 @@ index 794ebe8..f81f123 100644 /* * The pointer to this block is stored in the module structure * which is inside the block. Just mark it as not being a -@@ -2984,11 +3088,11 @@ static int move_module(struct module *mod, struct load_info *info) +@@ -2929,11 +3033,11 @@ static int move_module(struct module *mod, struct load_info *info) if (!ptr) return -ENOMEM; @@ -141549,7 +141602,7 @@ index 794ebe8..f81f123 100644 /* * The pointer to this block is stored in the module structure * which is inside the block. This block doesn't need to be -@@ -2997,13 +3101,45 @@ static int move_module(struct module *mod, struct load_info *info) +@@ -2942,13 +3046,45 @@ static int move_module(struct module *mod, struct load_info *info) */ kmemleak_ignore(ptr); if (!ptr) { @@ -141599,7 +141652,7 @@ index 794ebe8..f81f123 100644 /* Transfer each section which specifies SHF_ALLOC */ pr_debug("final section addresses:\n"); -@@ -3014,16 +3150,45 @@ static int move_module(struct module *mod, struct load_info *info) +@@ -2959,16 +3095,45 @@ static int move_module(struct module *mod, struct load_info *info) if (!(shdr->sh_flags & SHF_ALLOC)) continue; @@ -141652,7 +141705,7 @@ index 794ebe8..f81f123 100644 pr_debug("\t0x%lx %s\n", (long)shdr->sh_addr, info->secstrings + shdr->sh_name); } -@@ -3080,12 +3245,12 @@ static void flush_module_icache(const struct module *mod) +@@ -3025,12 +3190,12 @@ static void flush_module_icache(const struct module *mod) * Do it before processing of module parameters, so the module * can provide parameter accessor functions of its own. */ @@ -141671,7 +141724,7 @@ index 794ebe8..f81f123 100644 set_fs(old_fs); } -@@ -3143,8 +3308,10 @@ static void module_deallocate(struct module *mod, struct load_info *info) +@@ -3088,8 +3253,10 @@ static void module_deallocate(struct module *mod, struct load_info *info) { percpu_modfree(mod); module_arch_freeing_init(mod); @@ -141684,7 +141737,7 @@ index 794ebe8..f81f123 100644 } int __weak module_finalize(const Elf_Ehdr *hdr, -@@ -3157,7 +3324,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr, +@@ -3102,7 +3269,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr, static int post_relocation(struct module *mod, const struct load_info *info) { /* Sort exception table now relocations are done. */ @@ -141694,7 +141747,7 @@ index 794ebe8..f81f123 100644 /* Copy relocated percpu area over. */ percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr, -@@ -3205,13 +3374,15 @@ static void do_mod_ctors(struct module *mod) +@@ -3150,13 +3319,15 @@ static void do_mod_ctors(struct module *mod) /* For freeing module_init on success, in case kallsyms traversing */ struct mod_initfree { struct rcu_head rcu; @@ -141712,7 +141765,7 @@ index 794ebe8..f81f123 100644 kfree(m); } -@@ -3231,7 +3402,8 @@ static noinline int do_init_module(struct module *mod) +@@ -3176,7 +3347,8 @@ static noinline int do_init_module(struct module *mod) ret = -ENOMEM; goto fail; } @@ -141722,7 +141775,7 @@ index 794ebe8..f81f123 100644 /* * We want to find out whether @mod uses async during init. Clear -@@ -3290,10 +3462,10 @@ static noinline int do_init_module(struct module *mod) +@@ -3235,10 +3407,10 @@ static noinline int do_init_module(struct module *mod) mod_tree_remove_init(mod); disable_ro_nx(&mod->init_layout); module_arch_freeing_init(mod); @@ -141737,7 +141790,7 @@ index 794ebe8..f81f123 100644 /* * We want to free module_init, but be aware that kallsyms may be * walking this with preempt disabled. In all the failure paths, we -@@ -3481,9 +3653,38 @@ static int load_module(struct load_info *info, const char __user *uargs, +@@ -3438,9 +3610,38 @@ static int load_module(struct load_info *info, const char __user *uargs, if (err) goto free_unload; @@ -141776,7 +141829,7 @@ index 794ebe8..f81f123 100644 /* Fix up syms, so that st_value is a pointer to location. */ err = simplify_symbols(mod, info); if (err < 0) -@@ -3499,13 +3700,6 @@ static int load_module(struct load_info *info, const char __user *uargs, +@@ -3456,13 +3657,6 @@ static int load_module(struct load_info *info, const char __user *uargs, flush_module_icache(mod); @@ -141790,7 +141843,7 @@ index 794ebe8..f81f123 100644 dynamic_debug_setup(info->debug, info->num_debug); /* Ftrace init must be called in the MODULE_STATE_UNFORMED state */ -@@ -3557,11 +3751,10 @@ static int load_module(struct load_info *info, const char __user *uargs, +@@ -3520,11 +3714,10 @@ static int load_module(struct load_info *info, const char __user *uargs, ddebug_cleanup: dynamic_debug_remove(info->debug); synchronize_sched(); @@ -141803,7 +141856,7 @@ index 794ebe8..f81f123 100644 free_unload: module_unload_free(mod); unlink_mod: -@@ -3581,7 +3774,8 @@ static int load_module(struct load_info *info, const char __user *uargs, +@@ -3544,7 +3737,8 @@ static int load_module(struct load_info *info, const char __user *uargs, */ ftrace_release_mod(mod); /* Free lock-classes; relies on the preceding sync_rcu() */ @@ -141813,7 +141866,7 @@ index 794ebe8..f81f123 100644 module_deallocate(mod, info); free_copy: -@@ -3664,10 +3858,16 @@ static const char *get_ksymbol(struct module *mod, +@@ -3632,10 +3826,16 @@ static const char *get_ksymbol(struct module *mod, struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms); /* At worse, next value is at end of module */ @@ -141833,7 +141886,7 @@ index 794ebe8..f81f123 100644 /* Scan for closest preceding symbol, and next symbol. (ELF starts real symbols at 1). */ -@@ -3920,7 +4120,7 @@ static int m_show(struct seq_file *m, void *p) +@@ -3888,7 +4088,7 @@ static int m_show(struct seq_file *m, void *p) return 0; seq_printf(m, "%s %u", @@ -141842,7 +141895,7 @@ index 794ebe8..f81f123 100644 print_unload_info(m, mod); /* Informative for users. */ -@@ -3929,7 +4129,7 @@ static int m_show(struct seq_file *m, void *p) +@@ -3897,7 +4097,7 @@ static int m_show(struct seq_file *m, void *p) mod->state == MODULE_STATE_COMING ? "Loading" : "Live"); /* Used by oprofile and other similar tools. */ @@ -141851,7 +141904,7 @@ index 794ebe8..f81f123 100644 /* Taints info */ if (mod->taints) -@@ -3965,7 +4165,17 @@ static const struct file_operations proc_modules_operations = { +@@ -3933,7 +4133,17 @@ static const struct file_operations proc_modules_operations = { static int __init proc_modules_init(void) { @@ -141869,7 +141922,7 @@ index 794ebe8..f81f123 100644 return 0; } module_init(proc_modules_init); -@@ -4026,7 +4236,8 @@ struct module *__module_address(unsigned long addr) +@@ -3994,7 +4204,8 @@ struct module *__module_address(unsigned long addr) { struct module *mod; @@ -141879,7 +141932,7 @@ index 794ebe8..f81f123 100644 return NULL; module_assert_mutex_or_preempt(); -@@ -4069,11 +4280,21 @@ bool is_module_text_address(unsigned long addr) +@@ -4037,11 +4248,21 @@ bool is_module_text_address(unsigned long addr) */ struct module *__module_text_address(unsigned long addr) { @@ -141983,10 +142036,10 @@ index b38bea9..91acfbe 100644 atomic_set(&pd->refcnt, 0); pd->pinst = pinst; diff --git a/kernel/panic.c b/kernel/panic.c -index d96469d..81d6d28 100644 +index 535c965..6d159a4 100644 --- a/kernel/panic.c +++ b/kernel/panic.c -@@ -55,7 +55,7 @@ EXPORT_SYMBOL(panic_blink); +@@ -56,7 +56,7 @@ EXPORT_SYMBOL(panic_blink); /* * Stop ourself in panic -- architecture code may override this */ @@ -141995,25 +142048,30 @@ index d96469d..81d6d28 100644 { while (1) cpu_relax(); -@@ -461,7 +461,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller, - disable_trace_on_warning(); - +@@ -483,11 +483,11 @@ void __warn(const char *file, int line, void *caller, unsigned taint, pr_warn("------------[ cut here ]------------\n"); -- pr_warn("WARNING: CPU: %d PID: %d at %s:%d %pS()\n", -+ pr_warn("WARNING: CPU: %d PID: %d at %s:%d %pA()\n", - raw_smp_processor_id(), current->pid, file, line, caller); + + if (file) +- pr_warn("WARNING: CPU: %d PID: %d at %s:%d %pS\n", ++ pr_warn("WARNING: CPU: %d PID: %d at %s:%d %pA\n", + raw_smp_processor_id(), current->pid, file, line, + caller); + else +- pr_warn("WARNING: CPU: %d PID: %d at %pS\n", ++ pr_warn("WARNING: CPU: %d PID: %d at %pA\n", + raw_smp_processor_id(), current->pid, caller); if (args) -@@ -485,7 +485,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller, - add_taint(taint, LOCKDEP_STILL_OK); +@@ -518,7 +518,7 @@ void __warn(const char *file, int line, void *caller, unsigned taint, } + #ifdef WANT_WARN_ON_SLOWPATH -void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...) +void warn_slowpath_fmt(const char *file, const int line, const char *fmt, ...) { - struct slowpath_args args; + struct warn_args args; -@@ -497,7 +497,7 @@ void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...) +@@ -530,7 +530,7 @@ void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...) } EXPORT_SYMBOL(warn_slowpath_fmt); @@ -142021,17 +142079,17 @@ index d96469d..81d6d28 100644 +void warn_slowpath_fmt_taint(const char *file, const int line, unsigned taint, const char *fmt, ...) { - struct slowpath_args args; -@@ -510,7 +510,7 @@ void warn_slowpath_fmt_taint(const char *file, int line, + struct warn_args args; +@@ -542,7 +542,7 @@ void warn_slowpath_fmt_taint(const char *file, int line, } EXPORT_SYMBOL(warn_slowpath_fmt_taint); -void warn_slowpath_null(const char *file, int line) +void warn_slowpath_null(const char *file, const int line) { - warn_slowpath_common(file, line, __builtin_return_address(0), - TAINT_WARN, NULL); -@@ -526,7 +526,8 @@ EXPORT_SYMBOL(warn_slowpath_null); + __warn(file, line, __builtin_return_address(0), TAINT_WARN, NULL, NULL); + } +@@ -557,7 +557,8 @@ EXPORT_SYMBOL(warn_slowpath_null); */ __visible void __stack_chk_fail(void) { @@ -142143,18 +142201,18 @@ index 68d3ebc..82bb833 100644 select LZO_COMPRESS select LZO_DECOMPRESS diff --git a/kernel/power/process.c b/kernel/power/process.c -index 564f786..361a18e 100644 +index df058be..42000ad 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c -@@ -35,6 +35,7 @@ static int try_to_freeze_tasks(bool user_only) +@@ -34,6 +34,7 @@ static int try_to_freeze_tasks(bool user_only) unsigned int elapsed_msecs; bool wakeup = false; int sleep_usecs = USEC_PER_MSEC; + bool timedout = false; - do_gettimeofday(&start); + start = ktime_get_boottime(); -@@ -45,13 +46,20 @@ static int try_to_freeze_tasks(bool user_only) +@@ -44,13 +45,20 @@ static int try_to_freeze_tasks(bool user_only) while (true) { todo = 0; @@ -142176,7 +142234,7 @@ index 564f786..361a18e 100644 } read_unlock(&tasklist_lock); -@@ -60,7 +68,7 @@ static int try_to_freeze_tasks(bool user_only) +@@ -59,7 +67,7 @@ static int try_to_freeze_tasks(bool user_only) todo += wq_busy; } @@ -142186,10 +142244,10 @@ index 564f786..361a18e 100644 if (pm_wakeup_pending()) { diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index c963ba5..8d51e8b 100644 +index bfbf284..d3f02ee 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c -@@ -479,7 +479,7 @@ static int log_store(int facility, int level, +@@ -483,7 +483,7 @@ static int log_store(int facility, int level, return msg->text_len; } @@ -142198,7 +142256,7 @@ index c963ba5..8d51e8b 100644 static int syslog_action_restricted(int type) { -@@ -502,6 +502,11 @@ int check_syslog_permissions(int type, int source) +@@ -506,6 +506,11 @@ int check_syslog_permissions(int type, int source) if (source == SYSLOG_FROM_PROC && type != SYSLOG_ACTION_OPEN) goto ok; @@ -142211,7 +142269,7 @@ index c963ba5..8d51e8b 100644 if (capable(CAP_SYSLOG)) goto ok; diff --git a/kernel/profile.c b/kernel/profile.c -index 99513e1..0caa643 100644 +index c2199e9..ce5d89c 100644 --- a/kernel/profile.c +++ b/kernel/profile.c @@ -37,7 +37,7 @@ struct profile_hit { @@ -142223,7 +142281,7 @@ index 99513e1..0caa643 100644 static unsigned long prof_len, prof_shift; int prof_on __read_mostly; -@@ -256,7 +256,7 @@ static void profile_flip_buffers(void) +@@ -257,7 +257,7 @@ static void profile_flip_buffers(void) hits[i].pc = 0; continue; } @@ -142232,7 +142290,7 @@ index 99513e1..0caa643 100644 hits[i].hits = hits[i].pc = 0; } } -@@ -317,9 +317,9 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) +@@ -318,9 +318,9 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) * Add the current hit(s) and flush the write-queue out * to the global buffer: */ @@ -142244,7 +142302,7 @@ index 99513e1..0caa643 100644 hits[i].pc = hits[i].hits = 0; } out: -@@ -394,7 +394,7 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) +@@ -395,7 +395,7 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) { unsigned long pc; pc = ((unsigned long)__pc - (unsigned long)_stext) >> prof_shift; @@ -142253,7 +142311,7 @@ index 99513e1..0caa643 100644 } #endif /* !CONFIG_SMP */ -@@ -489,7 +489,7 @@ read_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos) +@@ -490,7 +490,7 @@ read_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos) return -EFAULT; buf++; p++; count--; read++; } @@ -142262,7 +142320,7 @@ index 99513e1..0caa643 100644 if (copy_to_user(buf, (void *)pnt, count)) return -EFAULT; read += count; -@@ -520,7 +520,7 @@ static ssize_t write_profile(struct file *file, const char __user *buf, +@@ -521,7 +521,7 @@ static ssize_t write_profile(struct file *file, const char __user *buf, } #endif profile_discard_flip_buffers(); @@ -142272,10 +142330,10 @@ index 99513e1..0caa643 100644 } diff --git a/kernel/ptrace.c b/kernel/ptrace.c -index 2341efe..97ff52b 100644 +index d49bfa1..5eb9a32 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c -@@ -207,12 +207,32 @@ static int ptrace_check_attach(struct task_struct *child, bool ignore_state) +@@ -206,12 +206,32 @@ static int ptrace_check_attach(struct task_struct *child, bool ignore_state) return ret; } @@ -142311,7 +142369,7 @@ index 2341efe..97ff52b 100644 } /* Returns 0 on success, -errno on denial. */ -@@ -264,7 +284,7 @@ static int __ptrace_may_access(struct task_struct *task, unsigned int mode) +@@ -263,7 +283,7 @@ static int __ptrace_may_access(struct task_struct *task, unsigned int mode) gid_eq(caller_gid, tcred->sgid) && gid_eq(caller_gid, tcred->gid)) goto ok; @@ -142320,7 +142378,7 @@ index 2341efe..97ff52b 100644 goto ok; rcu_read_unlock(); return -EPERM; -@@ -275,7 +295,7 @@ ok: +@@ -274,7 +294,7 @@ ok: dumpable = get_dumpable(task->mm); rcu_read_lock(); if (dumpable != SUID_DUMP_USER && @@ -142329,7 +142387,7 @@ index 2341efe..97ff52b 100644 rcu_read_unlock(); return -EPERM; } -@@ -344,7 +364,7 @@ static int ptrace_attach(struct task_struct *task, long request, +@@ -343,7 +363,7 @@ static int ptrace_attach(struct task_struct *task, long request, if (seize) flags |= PT_SEIZED; rcu_read_lock(); @@ -142338,7 +142396,7 @@ index 2341efe..97ff52b 100644 flags |= PT_PTRACE_CAP; rcu_read_unlock(); task->ptrace = flags; -@@ -543,7 +563,7 @@ int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst +@@ -542,7 +562,7 @@ int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst break; return -EIO; } @@ -142347,7 +142405,7 @@ index 2341efe..97ff52b 100644 return -EFAULT; copied += retval; src += retval; -@@ -844,7 +864,7 @@ int ptrace_request(struct task_struct *child, long request, +@@ -843,7 +863,7 @@ int ptrace_request(struct task_struct *child, long request, bool seized = child->ptrace & PT_SEIZED; int ret = -EIO; siginfo_t siginfo, *si; @@ -142356,7 +142414,7 @@ index 2341efe..97ff52b 100644 unsigned long __user *datalp = datavp; unsigned long flags; -@@ -1095,14 +1115,21 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr, +@@ -1094,14 +1114,21 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr, goto out; } @@ -142379,7 +142437,7 @@ index 2341efe..97ff52b 100644 goto out_put_task_struct; } -@@ -1130,7 +1157,7 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr, +@@ -1129,7 +1156,7 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr, copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0); if (copied != sizeof(tmp)) return -EIO; @@ -142388,7 +142446,7 @@ index 2341efe..97ff52b 100644 } int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr, -@@ -1223,7 +1250,7 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request, +@@ -1222,7 +1249,7 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request, } COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid, @@ -142397,7 +142455,7 @@ index 2341efe..97ff52b 100644 { struct task_struct *child; long ret; -@@ -1239,14 +1266,21 @@ COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid, +@@ -1238,14 +1265,21 @@ COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid, goto out; } @@ -142421,13 +142479,13 @@ index 2341efe..97ff52b 100644 } diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c -index d2988d0..36d0b79 100644 +index 250ea67..0ad5f45 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c -@@ -134,12 +134,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], - rcu_torture_count) = { 0 }; - static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], - rcu_torture_batch) = { 0 }; +@@ -132,12 +132,12 @@ static struct rcu_torture rcu_tortures[10 * RCU_TORTURE_PIPE_LEN]; + static DEFINE_SPINLOCK(rcu_torture_lock); + static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_count) = { 0 }; + static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_batch) = { 0 }; -static atomic_t rcu_torture_wcount[RCU_TORTURE_PIPE_LEN + 1]; -static atomic_t n_rcu_torture_alloc; -static atomic_t n_rcu_torture_alloc_fail; @@ -142443,7 +142501,7 @@ index d2988d0..36d0b79 100644 static long n_rcu_torture_barrier_error; static long n_rcu_torture_boost_ktrerror; static long n_rcu_torture_boost_rterror; -@@ -148,7 +148,7 @@ static long n_rcu_torture_boosts; +@@ -146,7 +146,7 @@ static long n_rcu_torture_boosts; static long n_rcu_torture_timers; static long n_barrier_attempts; static long n_barrier_successes; @@ -142452,7 +142510,7 @@ index d2988d0..36d0b79 100644 static struct list_head rcu_torture_removed; static int rcu_torture_writer_state; -@@ -232,11 +232,11 @@ rcu_torture_alloc(void) +@@ -230,11 +230,11 @@ rcu_torture_alloc(void) spin_lock_bh(&rcu_torture_lock); if (list_empty(&rcu_torture_freelist)) { @@ -142466,7 +142524,7 @@ index d2988d0..36d0b79 100644 p = rcu_torture_freelist.next; list_del_init(p); spin_unlock_bh(&rcu_torture_lock); -@@ -249,7 +249,7 @@ rcu_torture_alloc(void) +@@ -247,7 +247,7 @@ rcu_torture_alloc(void) static void rcu_torture_free(struct rcu_torture *p) { @@ -142475,7 +142533,7 @@ index d2988d0..36d0b79 100644 spin_lock_bh(&rcu_torture_lock); list_add_tail(&p->rtort_free, &rcu_torture_freelist); spin_unlock_bh(&rcu_torture_lock); -@@ -330,7 +330,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp) +@@ -328,7 +328,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp) i = rp->rtort_pipe_count; if (i > RCU_TORTURE_PIPE_LEN) i = RCU_TORTURE_PIPE_LEN; @@ -142484,7 +142542,7 @@ index d2988d0..36d0b79 100644 if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) { rp->rtort_mbtest = 0; return true; -@@ -860,7 +860,7 @@ rcu_torture_cbflood(void *arg) +@@ -858,7 +858,7 @@ rcu_torture_cbflood(void *arg) VERBOSE_TOROUT_STRING("rcu_torture_cbflood task started"); do { schedule_timeout_interruptible(cbflood_inter_holdoff); @@ -142623,10 +142681,10 @@ index 944b1b4..45d1d75 100644 __rcu_process_callbacks(&rcu_sched_ctrlblk); __rcu_process_callbacks(&rcu_bh_ctrlblk); diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c -index e41dd41..529179d 100644 +index 9a535a8..7784424 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c -@@ -324,7 +324,7 @@ static void rcu_momentary_dyntick_idle(void) +@@ -323,7 +323,7 @@ static void rcu_momentary_dyntick_idle(void) */ rdtp = this_cpu_ptr(&rcu_dynticks); smp_mb__before_atomic(); /* Earlier stuff before QS. */ @@ -142635,7 +142693,7 @@ index e41dd41..529179d 100644 smp_mb__after_atomic(); /* Later stuff after QS. */ break; } -@@ -650,10 +650,10 @@ static void rcu_eqs_enter_common(long long oldval, bool user) +@@ -649,10 +649,10 @@ static void rcu_eqs_enter_common(long long oldval, bool user) rcu_prepare_for_idle(); /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */ smp_mb__before_atomic(); /* See above. */ @@ -142648,7 +142706,7 @@ index e41dd41..529179d 100644 rcu_dynticks_task_enter(); /* -@@ -786,11 +786,11 @@ static void rcu_eqs_exit_common(long long oldval, int user) +@@ -785,11 +785,11 @@ static void rcu_eqs_exit_common(long long oldval, int user) rcu_dynticks_task_exit(); smp_mb__before_atomic(); /* Force ordering w/previous sojourn. */ @@ -142662,7 +142720,7 @@ index e41dd41..529179d 100644 rcu_cleanup_after_idle(); trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting); if (IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && -@@ -936,12 +936,12 @@ void rcu_nmi_enter(void) +@@ -935,12 +935,12 @@ void rcu_nmi_enter(void) * to be in the outermost NMI handler that interrupted an RCU-idle * period (observation due to Andy Lutomirski). */ @@ -142678,7 +142736,7 @@ index e41dd41..529179d 100644 incby = 1; } rdtp->dynticks_nmi_nesting += incby; -@@ -966,7 +966,7 @@ void rcu_nmi_exit(void) +@@ -965,7 +965,7 @@ void rcu_nmi_exit(void) * to us!) */ WARN_ON_ONCE(rdtp->dynticks_nmi_nesting <= 0); @@ -142687,7 +142745,7 @@ index e41dd41..529179d 100644 /* * If the nesting level is not 1, the CPU wasn't RCU-idle, so -@@ -981,9 +981,9 @@ void rcu_nmi_exit(void) +@@ -980,9 +980,9 @@ void rcu_nmi_exit(void) rdtp->dynticks_nmi_nesting = 0; /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */ smp_mb__before_atomic(); /* See above. */ @@ -142699,7 +142757,7 @@ index e41dd41..529179d 100644 } /** -@@ -996,7 +996,7 @@ void rcu_nmi_exit(void) +@@ -995,7 +995,7 @@ void rcu_nmi_exit(void) */ bool notrace __rcu_is_watching(void) { @@ -142708,7 +142766,7 @@ index e41dd41..529179d 100644 } /** -@@ -1079,7 +1079,7 @@ static int rcu_is_cpu_rrupt_from_idle(void) +@@ -1078,7 +1078,7 @@ static int rcu_is_cpu_rrupt_from_idle(void) static int dyntick_save_progress_counter(struct rcu_data *rdp, bool *isidle, unsigned long *maxj) { @@ -142717,7 +142775,7 @@ index e41dd41..529179d 100644 rcu_sysidle_check_cpu(rdp, isidle, maxj); if ((rdp->dynticks_snap & 0x1) == 0) { trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("dti")); -@@ -1105,7 +1105,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, +@@ -1103,7 +1103,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, int *rcrmp; unsigned int snap; @@ -142726,7 +142784,7 @@ index e41dd41..529179d 100644 snap = (unsigned int)rdp->dynticks_snap; /* -@@ -2943,7 +2943,7 @@ __rcu_process_callbacks(struct rcu_state *rsp) +@@ -2920,7 +2920,7 @@ __rcu_process_callbacks(struct rcu_state *rsp) /* * Do RCU core processing for the current CPU. */ @@ -142735,7 +142793,7 @@ index e41dd41..529179d 100644 { struct rcu_state *rsp; -@@ -3589,7 +3589,7 @@ static void rcu_report_exp_rdp(struct rcu_state *rsp, struct rcu_data *rdp, +@@ -3566,7 +3566,7 @@ static void rcu_report_exp_rdp(struct rcu_state *rsp, struct rcu_data *rdp, /* Common code for synchronize_{rcu,sched}_expedited() work-done checking. */ static bool sync_exp_work_done(struct rcu_state *rsp, struct rcu_node *rnp, struct rcu_data *rdp, @@ -142744,7 +142802,7 @@ index e41dd41..529179d 100644 { if (rcu_exp_gp_seq_done(rsp, s)) { if (rnp) -@@ -3598,7 +3598,7 @@ static bool sync_exp_work_done(struct rcu_state *rsp, struct rcu_node *rnp, +@@ -3575,7 +3575,7 @@ static bool sync_exp_work_done(struct rcu_state *rsp, struct rcu_node *rnp, mutex_unlock(&rdp->exp_funnel_mutex); /* Ensure test happens before caller kfree(). */ smp_mb__before_atomic(); /* ^^^ */ @@ -142753,7 +142811,7 @@ index e41dd41..529179d 100644 return true; } return false; -@@ -3718,7 +3718,7 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp, +@@ -3695,7 +3695,7 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp, struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu); if (raw_smp_processor_id() == cpu || @@ -142762,7 +142820,7 @@ index e41dd41..529179d 100644 mask_ofl_test |= rdp->grpmask; } mask_ofl_ipi = rnp->expmask & ~mask_ofl_test; -@@ -4182,7 +4182,7 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) +@@ -4159,7 +4159,7 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo); rdp->dynticks = &per_cpu(rcu_dynticks, cpu); WARN_ON_ONCE(rdp->dynticks->dynticks_nesting != DYNTICK_TASK_EXIT_IDLE); @@ -142771,7 +142829,7 @@ index e41dd41..529179d 100644 rdp->cpu = cpu; rdp->rsp = rsp; mutex_init(&rdp->exp_funnel_mutex); -@@ -4213,8 +4213,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp) +@@ -4190,8 +4190,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp) init_callback_list(rdp); /* Re-enable callbacks on this CPU. */ rdp->dynticks->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE; rcu_sysidle_init_percpu_data(rdp->dynticks); @@ -142779,14 +142837,14 @@ index e41dd41..529179d 100644 - (atomic_read(&rdp->dynticks->dynticks) & ~0x1) + 1); + atomic_set_unchecked(&rdp->dynticks->dynticks, + (atomic_read_unchecked(&rdp->dynticks->dynticks) & ~0x1) + 1); - raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */ + raw_spin_unlock_rcu_node(rnp); /* irqs remain disabled. */ /* diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h -index 83360b4..84f45b0 100644 +index df668c0..8e90779 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h -@@ -114,11 +114,11 @@ struct rcu_dynticks { +@@ -115,11 +115,11 @@ struct rcu_dynticks { long long dynticks_nesting; /* Track irq/process nesting level. */ /* Process level is worth LLONG_MAX/2. */ int dynticks_nmi_nesting; /* Track NMI nesting level. */ @@ -142800,7 +142858,7 @@ index 83360b4..84f45b0 100644 /* "Idle" excludes userspace execution. */ unsigned long dynticks_idle_jiffies; /* End of last non-NMI non-idle period. */ -@@ -386,10 +386,10 @@ struct rcu_data { +@@ -388,10 +388,10 @@ struct rcu_data { struct rcu_head oom_head; #endif /* #ifdef CONFIG_RCU_FAST_NO_HZ */ struct mutex exp_funnel_mutex; @@ -142815,7 +142873,7 @@ index 83360b4..84f45b0 100644 /* 7) Callback offloading. */ #ifdef CONFIG_RCU_NOCB_CPU -@@ -504,8 +504,8 @@ struct rcu_state { +@@ -506,8 +506,8 @@ struct rcu_state { /* End of fields guarded by barrier_mutex. */ unsigned long expedited_sequence; /* Take a ticket. */ @@ -142823,14 +142881,14 @@ index 83360b4..84f45b0 100644 - atomic_t expedited_need_qs; /* # CPUs left to check in. */ + atomic_long_unchecked_t expedited_normal;/* # fallbacks to normal. */ + atomic_unchecked_t expedited_need_qs; /* # CPUs left to check in. */ - wait_queue_head_t expedited_wq; /* Wait for check-ins. */ + struct swait_queue_head expedited_wq; /* Wait for check-ins. */ int ncpus_snap; /* # CPUs seen last time. */ diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h -index 9467a8b..6b9809d 100644 +index efdf7b6..bec5637 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h -@@ -1269,7 +1269,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu) +@@ -1268,7 +1268,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu) free_cpumask_var(cm); } @@ -142839,7 +142897,7 @@ index 9467a8b..6b9809d 100644 .store = &rcu_cpu_kthread_task, .thread_should_run = rcu_cpu_kthread_should_run, .thread_fn = rcu_cpu_kthread, -@@ -1738,7 +1738,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu) +@@ -1737,7 +1737,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu) "o."[!!(rdp->grpmask & rdp->mynode->qsmaskinit)], "N."[!!(rdp->grpmask & rdp->mynode->qsmaskinitnext)], ticks_value, ticks_title, @@ -142848,7 +142906,7 @@ index 9467a8b..6b9809d 100644 rdtp->dynticks_nesting, rdtp->dynticks_nmi_nesting, rdp->softirq_snap, kstat_softirqs_cpu(RCU_SOFTIRQ, cpu), READ_ONCE(rsp->n_force_qs) - rsp->n_force_qs_gpstart, -@@ -2267,8 +2267,8 @@ static int rcu_nocb_kthread(void *arg) +@@ -2271,8 +2271,8 @@ static int rcu_nocb_kthread(void *arg) } trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1); smp_mb__before_atomic(); /* _add after CB invocation. */ @@ -142859,7 +142917,7 @@ index 9467a8b..6b9809d 100644 rdp->n_nocbs_invoked += c; } return 0; -@@ -2618,9 +2618,9 @@ static void rcu_sysidle_enter(int irq) +@@ -2627,9 +2627,9 @@ static void rcu_sysidle_enter(int irq) j = jiffies; WRITE_ONCE(rdtp->dynticks_idle_jiffies, j); smp_mb__before_atomic(); @@ -142871,7 +142929,7 @@ index 9467a8b..6b9809d 100644 } /* -@@ -2691,9 +2691,9 @@ static void rcu_sysidle_exit(int irq) +@@ -2700,9 +2700,9 @@ static void rcu_sysidle_exit(int irq) /* Record end of idle period. */ smp_mb__before_atomic(); @@ -142883,7 +142941,7 @@ index 9467a8b..6b9809d 100644 /* * If we are the timekeeping CPU, we are permitted to be non-idle -@@ -2739,7 +2739,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle, +@@ -2748,7 +2748,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle, WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu); /* Pick up current idle and NMI-nesting counter and check. */ @@ -142928,7 +142986,7 @@ index 1088e64..d3b77f7 100644 return 0; } diff --git a/kernel/resource.c b/kernel/resource.c -index 3669d1b..7edf101 100644 +index 9b5f044..b8b0a33 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -84,8 +84,8 @@ static void *r_next(struct seq_file *m, void *v, loff_t *pos) @@ -142951,7 +143009,7 @@ index 3669d1b..7edf101 100644 { read_unlock(&resource_lock); } -@@ -162,8 +162,18 @@ static const struct file_operations proc_iomem_operations = { +@@ -171,8 +171,18 @@ static const struct file_operations proc_iomem_operations = { static int __init ioresources_init(void) { @@ -142993,10 +143051,10 @@ index a5d966c..9c2d28b 100644 #ifdef CONFIG_RT_GROUP_SCHED /* diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 1c1d2a0..1b7307c 100644 +index 11546a6..eaa3a87 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -2263,7 +2263,7 @@ void set_numabalancing_state(bool enabled) +@@ -2148,7 +2148,7 @@ void set_numabalancing_state(bool enabled) int sysctl_numa_balancing(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -143005,7 +143063,16 @@ index 1c1d2a0..1b7307c 100644 int err; int state = static_branch_likely(&sched_numa_balancing); -@@ -2702,7 +2702,7 @@ static struct rq *finish_task_switch(struct task_struct *prev) +@@ -2211,7 +2211,7 @@ __setup("schedstats=", setup_schedstats); + int sysctl_schedstats(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) + { +- struct ctl_table t; ++ ctl_table_no_const t; + int err; + int state = static_branch_likely(&sched_schedstats); + +@@ -2650,7 +2650,7 @@ static struct rq *finish_task_switch(struct task_struct *prev) /* rq->lock is NOT held, but preemption is disabled */ static void __balance_callback(struct rq *rq) { @@ -143014,7 +143081,7 @@ index 1c1d2a0..1b7307c 100644 void (*func)(struct rq *rq); unsigned long flags; -@@ -2710,7 +2710,7 @@ static void __balance_callback(struct rq *rq) +@@ -2658,7 +2658,7 @@ static void __balance_callback(struct rq *rq) head = rq->balance_callback; rq->balance_callback = NULL; while (head) { @@ -143023,7 +143090,7 @@ index 1c1d2a0..1b7307c 100644 next = head->next; head->next = NULL; head = next; -@@ -2784,8 +2784,9 @@ context_switch(struct rq *rq, struct task_struct *prev, +@@ -2732,8 +2732,9 @@ context_switch(struct rq *rq, struct task_struct *prev, next->active_mm = oldmm; atomic_inc(&oldmm->mm_count); enter_lazy_tlb(oldmm, next); @@ -143034,17 +143101,7 @@ index 1c1d2a0..1b7307c 100644 if (!prev->mm) { prev->active_mm = NULL; -@@ -3109,7 +3110,8 @@ static noinline void __schedule_bug(struct task_struct *prev) - static inline void schedule_debug(struct task_struct *prev) - { - #ifdef CONFIG_SCHED_STACK_END_CHECK -- BUG_ON(task_stack_end_corrupted(prev)); -+ if (task_stack_end_corrupted(prev)) -+ panic("corrupted stack end detected inside scheduler\n"); - #endif - - if (unlikely(in_atomic_preempt_off())) { -@@ -3609,6 +3611,8 @@ int can_nice(const struct task_struct *p, const int nice) +@@ -3552,6 +3553,8 @@ int can_nice(const struct task_struct *p, const int nice) /* convert nice value [19,-20] to rlimit style value [1,40] */ int nice_rlim = nice_to_rlimit(nice); @@ -143053,7 +143110,7 @@ index 1c1d2a0..1b7307c 100644 return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) || capable(CAP_SYS_NICE)); } -@@ -3635,7 +3639,8 @@ SYSCALL_DEFINE1(nice, int, increment) +@@ -3578,7 +3581,8 @@ SYSCALL_DEFINE1(nice, int, increment) nice = task_nice(current) + increment; nice = clamp_val(nice, MIN_NICE, MAX_NICE); @@ -143063,7 +143120,7 @@ index 1c1d2a0..1b7307c 100644 return -EPERM; retval = security_task_setnice(current, nice); -@@ -3944,6 +3949,7 @@ recheck: +@@ -3888,6 +3892,7 @@ recheck: if (policy != p->policy && !rlim_rtprio) return -EPERM; @@ -143071,16 +143128,35 @@ index 1c1d2a0..1b7307c 100644 /* can't increase priority */ if (attr->sched_priority > p->rt_priority && attr->sched_priority > rlim_rtprio) -@@ -5410,7 +5416,7 @@ static void migrate_tasks(struct rq *dead_rq) +diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c +index 686ec8a..8fc3873 100644 +--- a/kernel/sched/deadline.c ++++ b/kernel/sched/deadline.c +@@ -219,8 +219,8 @@ static inline bool need_pull_dl_task(struct rq *rq, struct task_struct *prev) + return dl_task(prev); + } + +-static DEFINE_PER_CPU(struct callback_head, dl_push_head); +-static DEFINE_PER_CPU(struct callback_head, dl_pull_head); ++static DEFINE_PER_CPU(struct balance_callback, dl_push_head); ++static DEFINE_PER_CPU(struct balance_callback, dl_pull_head); - #if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL) + static void push_dl_tasks(struct rq *); + static void pull_dl_task(struct rq *); +diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c +index 4fbc3bd..591825d 100644 +--- a/kernel/sched/debug.c ++++ b/kernel/sched/debug.c +@@ -193,7 +193,7 @@ late_initcall(sched_init_debug); + + #ifdef CONFIG_SYSCTL -static struct ctl_table sd_ctl_dir[] = { +static ctl_table_no_const sd_ctl_dir[] __read_only = { { .procname = "sched_domain", .mode = 0555, -@@ -5427,17 +5433,17 @@ static struct ctl_table sd_ctl_root[] = { +@@ -210,17 +210,17 @@ static struct ctl_table sd_ctl_root[] = { {} }; @@ -143102,7 +143178,7 @@ index 1c1d2a0..1b7307c 100644 /* * In the intermediate directories, both the child directory and -@@ -5445,22 +5451,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep) +@@ -228,22 +228,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep) * will always be set. In the lowest directory the names are * static strings and all have proc handlers. */ @@ -143134,7 +143210,7 @@ index 1c1d2a0..1b7307c 100644 const char *procname, void *data, int maxlen, umode_t mode, proc_handler *proc_handler, bool load_idx) -@@ -5480,7 +5489,7 @@ set_table_entry(struct ctl_table *entry, +@@ -263,7 +266,7 @@ set_table_entry(struct ctl_table *entry, static struct ctl_table * sd_alloc_ctl_domain_table(struct sched_domain *sd) { @@ -143143,7 +143219,7 @@ index 1c1d2a0..1b7307c 100644 if (table == NULL) return NULL; -@@ -5518,9 +5527,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd) +@@ -301,9 +304,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd) return table; } @@ -143155,8 +143231,8 @@ index 1c1d2a0..1b7307c 100644 struct sched_domain *sd; int domain_num = 0, i; char buf[32]; -@@ -5547,11 +5556,13 @@ static struct ctl_table_header *sd_sysctl_header; - static void register_sched_domain_sysctl(void) +@@ -330,11 +333,13 @@ static struct ctl_table_header *sd_sysctl_header; + void register_sched_domain_sysctl(void) { int i, cpu_num = num_possible_cpus(); - struct ctl_table *entry = sd_alloc_ctl_entry(cpu_num + 1); @@ -143170,7 +143246,7 @@ index 1c1d2a0..1b7307c 100644 if (entry == NULL) return; -@@ -5573,8 +5584,12 @@ static void unregister_sched_domain_sysctl(void) +@@ -356,8 +361,12 @@ void unregister_sched_domain_sysctl(void) { unregister_sysctl_table(sd_sysctl_header); sd_sysctl_header = NULL; @@ -143183,28 +143259,9 @@ index 1c1d2a0..1b7307c 100644 + pax_close_kernel(); + } } - #else - static void register_sched_domain_sysctl(void) -diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c -index 57b939c..cbedaf1 100644 ---- a/kernel/sched/deadline.c -+++ b/kernel/sched/deadline.c -@@ -219,8 +219,8 @@ static inline bool need_pull_dl_task(struct rq *rq, struct task_struct *prev) - return dl_task(prev); - } - --static DEFINE_PER_CPU(struct callback_head, dl_push_head); --static DEFINE_PER_CPU(struct callback_head, dl_pull_head); -+static DEFINE_PER_CPU(struct balance_callback, dl_push_head); -+static DEFINE_PER_CPU(struct balance_callback, dl_pull_head); - - static void push_dl_tasks(struct rq *); - static void pull_dl_task(struct rq *); -diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c -index 6415117..7dc45dc 100644 ---- a/kernel/sched/debug.c -+++ b/kernel/sched/debug.c -@@ -490,7 +490,11 @@ static int __init init_sched_debug_procfs(void) + #endif /* CONFIG_SYSCTL */ + #endif /* CONFIG_SMP */ +@@ -808,7 +817,11 @@ static int __init init_sched_debug_procfs(void) { struct proc_dir_entry *pe; @@ -143217,10 +143274,10 @@ index 6415117..7dc45dc 100644 return -ENOMEM; return 0; diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index adff850..4f219e5 100644 +index e7dd0ec..bbbbe5e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c -@@ -7961,7 +7961,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { } +@@ -8061,7 +8061,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { } * run_rebalance_domains is triggered when needed from the scheduler tick. * Also triggered for nohz idle balancing (with nohz_balancing_kick set). */ @@ -143230,10 +143287,10 @@ index adff850..4f219e5 100644 struct rq *this_rq = this_rq(); enum cpu_idle_type idle = this_rq->idle_balance ? diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c -index 8ec86ab..2d88518 100644 +index ec4f538d..e3de404 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c -@@ -354,8 +354,8 @@ static inline int has_pushable_tasks(struct rq *rq) +@@ -362,8 +362,8 @@ static inline int has_pushable_tasks(struct rq *rq) return !plist_head_empty(&rq->rt.pushable_tasks); } @@ -143245,10 +143302,10 @@ index 8ec86ab..2d88518 100644 static void push_rt_tasks(struct rq *); static void pull_rt_task(struct rq *); diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index ff87d88..818b3f5 100644 +index ec2e8d2..68a780e 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -631,7 +631,10 @@ struct rq { +@@ -632,7 +632,10 @@ struct rq { unsigned long cpu_capacity; unsigned long cpu_capacity_orig; @@ -143260,7 +143317,7 @@ index ff87d88..818b3f5 100644 unsigned char idle_balance; /* For active balancing */ -@@ -777,7 +780,7 @@ extern int migrate_swap(struct task_struct *, struct task_struct *); +@@ -778,7 +781,7 @@ extern int migrate_swap(struct task_struct *, struct task_struct *); static inline void queue_balance_callback(struct rq *rq, @@ -143269,7 +143326,7 @@ index ff87d88..818b3f5 100644 void (*func)(struct rq *rq)) { lockdep_assert_held(&rq->lock); -@@ -785,7 +788,7 @@ queue_balance_callback(struct rq *rq, +@@ -786,7 +789,7 @@ queue_balance_callback(struct rq *rq, if (unlikely(head->next)) return; @@ -143278,7 +143335,7 @@ index ff87d88..818b3f5 100644 head->next = rq->balance_callback; rq->balance_callback = head; } -@@ -1204,7 +1207,7 @@ struct sched_class { +@@ -1240,7 +1243,7 @@ struct sched_class { #ifdef CONFIG_FAIR_GROUP_SCHED void (*task_move_group) (struct task_struct *p); #endif @@ -143287,7 +143344,7 @@ index ff87d88..818b3f5 100644 static inline void put_prev_task(struct rq *rq, struct task_struct *prev) { -@@ -1274,7 +1277,7 @@ extern struct dl_bandwidth def_dl_bandwidth; +@@ -1310,7 +1313,7 @@ extern struct dl_bandwidth def_dl_bandwidth; extern void init_dl_bandwidth(struct dl_bandwidth *dl_b, u64 period, u64 runtime); extern void init_dl_task_timer(struct sched_dl_entity *dl_se); @@ -143297,7 +143354,7 @@ index ff87d88..818b3f5 100644 extern void init_entity_runnable_average(struct sched_entity *se); diff --git a/kernel/signal.c b/kernel/signal.c -index 0508544..a1106d5 100644 +index aa9bf00..ec5101c 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -53,12 +53,12 @@ static struct kmem_cache *sigqueue_cachep; @@ -143463,7 +143520,7 @@ index 0508544..a1106d5 100644 return false; } } -@@ -2864,7 +2891,15 @@ do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info) +@@ -2868,7 +2895,15 @@ do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info) int error = -ESRCH; rcu_read_lock(); @@ -143480,7 +143537,7 @@ index 0508544..a1106d5 100644 if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) { error = check_kill_permission(sig, info, p); /* -@@ -3193,8 +3228,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack, +@@ -3197,8 +3232,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack, } seg = get_fs(); set_fs(KERNEL_DS); @@ -143491,7 +143548,7 @@ index 0508544..a1106d5 100644 compat_user_stack_pointer()); set_fs(seg); if (ret >= 0 && uoss_ptr) { -@@ -3478,7 +3513,7 @@ SYSCALL_DEFINE1(ssetmask, int, newmask) +@@ -3482,7 +3517,7 @@ SYSCALL_DEFINE1(ssetmask, int, newmask) SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler) { struct k_sigaction new_sa, old_sa; @@ -143500,7 +143557,7 @@ index 0508544..a1106d5 100644 new_sa.sa.sa_handler = handler; new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK; -@@ -3486,7 +3521,7 @@ SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler) +@@ -3490,7 +3525,7 @@ SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler) ret = do_sigaction(sig, &new_sa, &old_sa); @@ -143510,7 +143567,7 @@ index 0508544..a1106d5 100644 #endif /* __ARCH_WANT_SYS_SIGNAL */ diff --git a/kernel/smp.c b/kernel/smp.c -index d903c02..c3efd35 100644 +index 7416544..c25b366 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -588,7 +588,7 @@ void __init smp_init(void) @@ -143523,7 +143580,7 @@ index d903c02..c3efd35 100644 unsigned long flags; int ret = 0; diff --git a/kernel/smpboot.c b/kernel/smpboot.c -index d264f59..fd4da04 100644 +index 13bc43d..e7068a2 100644 --- a/kernel/smpboot.c +++ b/kernel/smpboot.c @@ -13,6 +13,7 @@ @@ -143534,7 +143591,7 @@ index d264f59..fd4da04 100644 #include "smpboot.h" -@@ -301,7 +302,7 @@ int smpboot_register_percpu_thread_cpumask(struct smp_hotplug_thread *plug_threa +@@ -303,7 +304,7 @@ int smpboot_register_percpu_thread_cpumask(struct smp_hotplug_thread *plug_threa if (cpumask_test_cpu(cpu, cpumask)) smpboot_unpark_thread(plug_thread, cpu); } @@ -143543,7 +143600,7 @@ index d264f59..fd4da04 100644 out: mutex_unlock(&smpboot_threads_lock); put_online_cpus(); -@@ -319,7 +320,7 @@ void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread) +@@ -321,7 +322,7 @@ void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread) { get_online_cpus(); mutex_lock(&smpboot_threads_lock); @@ -143552,7 +143609,7 @@ index d264f59..fd4da04 100644 smpboot_destroy_threads(plug_thread); mutex_unlock(&smpboot_threads_lock); put_online_cpus(); -@@ -359,7 +360,9 @@ int smpboot_update_cpumask_percpu_thread(struct smp_hotplug_thread *plug_thread, +@@ -361,7 +362,9 @@ int smpboot_update_cpumask_percpu_thread(struct smp_hotplug_thread *plug_thread, for_each_cpu_and(cpu, tmp, cpu_online_mask) smpboot_unpark_thread(plug_thread, cpu); @@ -143563,7 +143620,7 @@ index d264f59..fd4da04 100644 mutex_unlock(&smpboot_threads_lock); put_online_cpus(); diff --git a/kernel/softirq.c b/kernel/softirq.c -index 479e443..4072c49 100644 +index 17caf4b..2e68ae7 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -53,7 +53,7 @@ irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned; @@ -143634,7 +143691,7 @@ index a467e6c..7743481 100644 .thread_should_run = cpu_stop_should_run, .thread_fn = cpu_stopper_thread, diff --git a/kernel/sys.c b/kernel/sys.c -index 78947de..cb182d1 100644 +index cf8ba54..314fca6 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -160,6 +160,12 @@ static int set_one_prio(struct task_struct *p, int niceval, int error) @@ -143836,7 +143893,7 @@ index 2c5e3a8..301fb1a 100644 return -ENOSYS; } diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index 97715fd..bf1e10a 100644 +index 725587f..750f909 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -95,7 +95,6 @@ @@ -143847,7 +143904,7 @@ index 97715fd..bf1e10a 100644 /* External variables not in a header file. */ extern int suid_dumpable; #ifdef CONFIG_COREDUMP -@@ -112,22 +111,24 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max; +@@ -112,23 +111,25 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max; #ifndef CONFIG_MMU extern int sysctl_nr_trim_pages; #endif @@ -143868,6 +143925,7 @@ index 97715fd..bf1e10a 100644 -static int __maybe_unused four = 4; -static unsigned long one_ul = 1; -static int one_hundred = 100; +-static int one_thousand = 1000; +static int zero __read_only = 0; +static int __maybe_unused one __read_only = 1; +static int __maybe_unused two __read_only = 2; @@ -143875,13 +143933,14 @@ index 97715fd..bf1e10a 100644 +static int __maybe_unused four __read_only = 4; +static unsigned long one_ul __read_only = 1; +static int one_hundred __read_only = 100; ++static int one_thousand __read_only = 1000; #ifdef CONFIG_PRINTK -static int ten_thousand = 10000; +static int ten_thousand __read_only = 10000; #endif /* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */ -@@ -181,10 +182,8 @@ static int proc_taint(struct ctl_table *table, int write, +@@ -182,10 +183,8 @@ static int proc_taint(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); #endif @@ -143893,7 +143952,7 @@ index 97715fd..bf1e10a 100644 static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); -@@ -215,6 +214,8 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write, +@@ -216,6 +215,8 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write, #endif @@ -143902,7 +143961,7 @@ index 97715fd..bf1e10a 100644 static struct ctl_table kern_table[]; static struct ctl_table vm_table[]; static struct ctl_table fs_table[]; -@@ -229,6 +230,20 @@ extern struct ctl_table epoll_table[]; +@@ -230,6 +231,20 @@ extern struct ctl_table epoll_table[]; int sysctl_legacy_va_layout; #endif @@ -143923,7 +143982,7 @@ index 97715fd..bf1e10a 100644 /* The default sysctl tables: */ static struct ctl_table sysctl_base_table[] = { -@@ -277,6 +292,22 @@ static int max_extfrag_threshold = 1000; +@@ -278,6 +293,22 @@ static int max_extfrag_threshold = 1000; #endif static struct ctl_table kern_table[] = { @@ -143946,7 +144005,7 @@ index 97715fd..bf1e10a 100644 { .procname = "sched_child_runs_first", .data = &sysctl_sched_child_runs_first, -@@ -629,7 +660,7 @@ static struct ctl_table kern_table[] = { +@@ -641,7 +672,7 @@ static struct ctl_table kern_table[] = { .maxlen = sizeof(int), .mode = 0644, /* only handle a transition from default "0" to "1" */ @@ -143955,7 +144014,7 @@ index 97715fd..bf1e10a 100644 .extra1 = &one, .extra2 = &one, }, -@@ -640,7 +671,7 @@ static struct ctl_table kern_table[] = { +@@ -652,7 +683,7 @@ static struct ctl_table kern_table[] = { .data = &modprobe_path, .maxlen = KMOD_PATH_LEN, .mode = 0644, @@ -143964,7 +144023,7 @@ index 97715fd..bf1e10a 100644 }, { .procname = "modules_disabled", -@@ -648,7 +679,7 @@ static struct ctl_table kern_table[] = { +@@ -660,7 +691,7 @@ static struct ctl_table kern_table[] = { .maxlen = sizeof(int), .mode = 0644, /* only handle a transition from default "0" to "1" */ @@ -143973,7 +144032,7 @@ index 97715fd..bf1e10a 100644 .extra1 = &one, .extra2 = &one, }, -@@ -803,20 +834,24 @@ static struct ctl_table kern_table[] = { +@@ -815,20 +846,24 @@ static struct ctl_table kern_table[] = { .data = &dmesg_restrict, .maxlen = sizeof(int), .mode = 0644, @@ -144001,7 +144060,7 @@ index 97715fd..bf1e10a 100644 { .procname = "ngroups_max", .data = &ngroups_max, -@@ -981,6 +1016,17 @@ static struct ctl_table kern_table[] = { +@@ -993,6 +1028,17 @@ static struct ctl_table kern_table[] = { .mode = 0644, .proc_handler = proc_dointvec, }, @@ -144019,7 +144078,7 @@ index 97715fd..bf1e10a 100644 #endif #if defined(CONFIG_MMU) { -@@ -1103,10 +1149,17 @@ static struct ctl_table kern_table[] = { +@@ -1115,10 +1161,17 @@ static struct ctl_table kern_table[] = { */ { .procname = "perf_event_paranoid", @@ -144040,7 +144099,7 @@ index 97715fd..bf1e10a 100644 }, { .procname = "perf_event_mlock_kb", -@@ -1409,6 +1462,13 @@ static struct ctl_table vm_table[] = { +@@ -1430,6 +1483,13 @@ static struct ctl_table vm_table[] = { .proc_handler = proc_dointvec_minmax, .extra1 = &zero, }, @@ -144054,7 +144113,7 @@ index 97715fd..bf1e10a 100644 #else { .procname = "nr_trim_pages", -@@ -1921,6 +1981,16 @@ int proc_dostring(struct ctl_table *table, int write, +@@ -1942,6 +2002,16 @@ int proc_dostring(struct ctl_table *table, int write, (char __user *)buffer, lenp, ppos); } @@ -144071,7 +144130,7 @@ index 97715fd..bf1e10a 100644 static size_t proc_skip_spaces(char **buf) { size_t ret; -@@ -2026,6 +2096,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val, +@@ -2047,6 +2117,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val, len = strlen(tmp); if (len > *size) len = *size; @@ -144080,7 +144139,7 @@ index 97715fd..bf1e10a 100644 if (copy_to_user(*buf, tmp, len)) return -EFAULT; *size -= len; -@@ -2196,6 +2268,44 @@ int proc_dointvec(struct ctl_table *table, int write, +@@ -2217,6 +2289,44 @@ int proc_dointvec(struct ctl_table *table, int write, NULL,NULL); } @@ -144125,7 +144184,7 @@ index 97715fd..bf1e10a 100644 /* * Taint values can only be increased * This means we can safely use a temporary. -@@ -2203,7 +2313,7 @@ int proc_dointvec(struct ctl_table *table, int write, +@@ -2224,7 +2334,7 @@ int proc_dointvec(struct ctl_table *table, int write, static int proc_taint(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -144134,7 +144193,7 @@ index 97715fd..bf1e10a 100644 unsigned long tmptaint = get_taint(); int err; -@@ -2231,16 +2341,14 @@ static int proc_taint(struct ctl_table *table, int write, +@@ -2252,16 +2362,14 @@ static int proc_taint(struct ctl_table *table, int write, return err; } @@ -144153,7 +144212,7 @@ index 97715fd..bf1e10a 100644 struct do_proc_dointvec_minmax_conv_param { int *min; -@@ -2271,6 +2379,32 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp, +@@ -2292,6 +2400,32 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp, return 0; } @@ -144186,7 +144245,7 @@ index 97715fd..bf1e10a 100644 /** * proc_dointvec_minmax - read a vector of integers with min/max values * @table: the sysctl table -@@ -2298,6 +2432,17 @@ int proc_dointvec_minmax(struct ctl_table *table, int write, +@@ -2319,6 +2453,17 @@ int proc_dointvec_minmax(struct ctl_table *table, int write, do_proc_dointvec_minmax_conv, ¶m); } @@ -144204,7 +144263,7 @@ index 97715fd..bf1e10a 100644 static void validate_coredump_safety(void) { #ifdef CONFIG_COREDUMP -@@ -2785,6 +2930,12 @@ int proc_dostring(struct ctl_table *table, int write, +@@ -2806,6 +2951,12 @@ int proc_dostring(struct ctl_table *table, int write, return -ENOSYS; } @@ -144217,7 +144276,7 @@ index 97715fd..bf1e10a 100644 int proc_dointvec(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { -@@ -2841,5 +2992,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax); +@@ -2862,5 +3013,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax); EXPORT_SYMBOL(proc_dointvec_userhz_jiffies); EXPORT_SYMBOL(proc_dointvec_ms_jiffies); EXPORT_SYMBOL(proc_dostring); @@ -144314,10 +144373,10 @@ index 9cff0ab..0e69c94 100644 struct posix_clock_desc cd; int err; diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c -index f5e86d2..33a4099 100644 +index 1cafba8..eccbd51 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c -@@ -1497,14 +1497,14 @@ struct k_clock clock_posix_cpu = { +@@ -1467,14 +1467,14 @@ struct k_clock clock_posix_cpu = { static __init int init_posix_cpu_timers(void) { @@ -144502,7 +144561,7 @@ index f2826c3..7e6663a 100644 } diff --git a/kernel/time/time.c b/kernel/time/time.c -index 86751c6..7875536 100644 +index be115b0..5d134df 100644 --- a/kernel/time/time.c +++ b/kernel/time/time.c @@ -177,6 +177,11 @@ int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz) @@ -144518,7 +144577,7 @@ index 86751c6..7875536 100644 update_vsyscall_tz(); if (firsttime) { diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c -index 34b4ced..08d344f 100644 +index 479d25c..7c25647 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -15,6 +15,7 @@ @@ -144529,7 +144588,7 @@ index 34b4ced..08d344f 100644 #include <linux/syscore_ops.h> #include <linux/clocksource.h> #include <linux/jiffies.h> -@@ -928,6 +929,8 @@ int do_settimeofday64(const struct timespec64 *ts) +@@ -1164,6 +1165,8 @@ int do_settimeofday64(const struct timespec64 *ts) if (!timespec64_valid_strict(ts)) return -EINVAL; @@ -144539,7 +144598,7 @@ index 34b4ced..08d344f 100644 write_seqcount_begin(&tk_core.seq); diff --git a/kernel/time/timer.c b/kernel/time/timer.c -index bbc5d11..6141050 100644 +index 73164c3..094396f 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -1429,7 +1429,7 @@ void update_process_times(int user_tick) @@ -144673,10 +144732,18 @@ index 1adecb4..b4fb631 100644 return -ENOMEM; return 0; diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig -index e45db6b..1fb429b 100644 +index e45db6b..6527679 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig -@@ -120,6 +120,7 @@ config TRACING_SUPPORT +@@ -107,6 +107,7 @@ config TRACING + config GENERIC_TRACER + bool + select TRACING ++ depends on !GRKERNSEC_KMEM + + # + # Minimum requirements an architecture has to meet for us to +@@ -120,6 +121,7 @@ config TRACING_SUPPORT # irqflags tracing for your architecture. depends on TRACE_IRQFLAGS_SUPPORT || PPC32 depends on STACKTRACE_SUPPORT @@ -144684,7 +144751,15 @@ index e45db6b..1fb429b 100644 default y if TRACING_SUPPORT -@@ -378,6 +379,7 @@ config BLK_DEV_IO_TRACE +@@ -225,6 +227,7 @@ config ENABLE_DEFAULT_TRACERS + bool "Trace process context switches and events" + depends on !GENERIC_TRACER + select TRACING ++ depends on !GRKERNSEC_KMEM + help + This tracer hooks to various trace points in the kernel, + allowing the user to pick and choose which trace point they +@@ -378,6 +381,7 @@ config BLK_DEV_IO_TRACE depends on BLOCK select RELAY select DEBUG_FS @@ -144692,8 +144767,24 @@ index e45db6b..1fb429b 100644 select TRACEPOINTS select GENERIC_TRACER select STACKTRACE +@@ -402,6 +406,7 @@ config KPROBE_EVENT + depends on HAVE_REGS_AND_STACK_ACCESS_API + bool "Enable kprobes-based dynamic events" + select TRACING ++ depends on !GRKERNSEC_KMEM + select PROBE_EVENTS + default y + help +@@ -423,6 +428,7 @@ config UPROBE_EVENT + select UPROBES + select PROBE_EVENTS + select TRACING ++ depends on !GRKERNSEC_KMEM + default n + help + This allows the user to add tracing events on top of userspace diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c -index 2aeb6ff..640418a 100644 +index f94e7a2..75c8035 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c @@ -328,7 +328,7 @@ static ssize_t blk_dropped_read(struct file *filp, char __user *buffer, @@ -144724,7 +144815,7 @@ index 2aeb6ff..640418a 100644 ret = -EIO; diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c -index 57a6eea..168c21f 100644 +index b1870fb..02fbaa7 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -120,8 +120,9 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, @@ -144739,7 +144830,7 @@ index 57a6eea..168c21f 100644 #endif /* -@@ -2463,13 +2464,18 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) +@@ -2467,13 +2468,18 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) if (unlikely(ftrace_disabled)) return 0; @@ -144760,7 +144851,7 @@ index 57a6eea..168c21f 100644 } /* -@@ -4821,8 +4827,10 @@ static int ftrace_process_locs(struct module *mod, +@@ -4825,8 +4831,10 @@ static int ftrace_process_locs(struct module *mod, if (!count) return 0; @@ -144771,7 +144862,7 @@ index 57a6eea..168c21f 100644 start_pg = ftrace_allocate_pages(count); if (!start_pg) -@@ -5238,7 +5246,8 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, +@@ -5242,7 +5250,8 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, __ftrace_ops_list_func(ip, parent_ip, NULL, regs); } #else @@ -144781,7 +144872,7 @@ index 57a6eea..168c21f 100644 { __ftrace_ops_list_func(ip, parent_ip, NULL, NULL); } -@@ -5699,8 +5708,12 @@ int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) +@@ -5703,8 +5712,12 @@ int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) } /* The callbacks that hook a function */ @@ -144796,7 +144887,7 @@ index 57a6eea..168c21f 100644 trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub; static trace_func_graph_ent_t __ftrace_graph_entry = ftrace_graph_entry_stub; -@@ -5734,7 +5747,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) +@@ -5738,7 +5751,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) if (t->ret_stack == NULL) { atomic_set(&t->tracing_graph_pause, 0); @@ -144805,7 +144896,7 @@ index 57a6eea..168c21f 100644 t->curr_ret_stack = -1; /* Make sure the tasks see the -1 first: */ smp_wmb(); -@@ -5929,7 +5942,7 @@ void unregister_ftrace_graph(void) +@@ -5933,7 +5946,7 @@ void unregister_ftrace_graph(void) goto out; ftrace_graph_active--; @@ -144814,7 +144905,7 @@ index 57a6eea..168c21f 100644 ftrace_graph_entry = ftrace_graph_entry_stub; __ftrace_graph_entry = ftrace_graph_entry_stub; ftrace_shutdown(&graph_ops, FTRACE_STOP_FUNC_RET); -@@ -5957,7 +5970,7 @@ static void +@@ -5961,7 +5974,7 @@ static void graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack) { atomic_set(&t->tracing_graph_pause, 0); @@ -145167,10 +145258,10 @@ index 9c14373..5ddd763 100644 *data_page = bpage; diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c -index 8305cbb..c0d281a 100644 +index a2f0b9f..95f8a8b 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c -@@ -3546,7 +3546,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) +@@ -3552,7 +3552,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) return 0; } @@ -145180,10 +145271,10 @@ index 8305cbb..c0d281a 100644 /* do nothing if flag is already set */ if (!!(tr->trace_flags & mask) == !!enabled) diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h -index 8414fa4..27c2db4 100644 +index 3fff4ad..95c8932 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h -@@ -1333,7 +1333,7 @@ void trace_printk_control(bool enabled); +@@ -1395,7 +1395,7 @@ void trace_printk_control(bool enabled); void trace_printk_init_buffers(void); void trace_printk_start_comm(void); int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set); @@ -145225,10 +145316,10 @@ index 6f96586..bcd069a 100644 /* Add an additional event_call dynamically */ diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c -index a663cbb..64fcf73 100644 +index 3a0244f..3383aff 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c -@@ -137,7 +137,7 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth, +@@ -138,7 +138,7 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth, /* The return trace stack is full */ if (current->curr_ret_stack == FTRACE_RETFUNC_DEPTH - 1) { @@ -145237,7 +145328,7 @@ index a663cbb..64fcf73 100644 return -EBUSY; } -@@ -234,7 +234,7 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret, +@@ -235,7 +235,7 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret, *ret = current->ret_stack[index].ret; trace->func = current->ret_stack[index].func; trace->calltime = current->ret_stack[index].calltime; @@ -145247,7 +145338,7 @@ index a663cbb..64fcf73 100644 } diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c -index 2be8c4f..444ecfb 100644 +index 68f376c..e549816 100644 --- a/kernel/trace/trace_mmiotrace.c +++ b/kernel/trace/trace_mmiotrace.c @@ -24,7 +24,7 @@ struct header_iter { @@ -145287,10 +145378,10 @@ index 2be8c4f..444ecfb 100644 } entry = ring_buffer_event_data(event); diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c -index 2829821..cd4ea77 100644 +index 0bb9cf2..f319026 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c -@@ -713,14 +713,16 @@ int register_trace_event(struct trace_event *event) +@@ -717,14 +717,16 @@ int register_trace_event(struct trace_event *event) goto out; } @@ -145338,10 +145429,10 @@ index 2a1abba..2a81a78 100644 /* Can't do this from NMI context (can cause deadlocks) */ diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c -index 0655afb..bfb4b48 100644 +index e78f364..ae5a282 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c -@@ -591,6 +591,8 @@ static int perf_sysenter_enable(struct trace_event_call *call) +@@ -604,6 +604,8 @@ static int perf_sysenter_enable(struct trace_event_call *call) int num; num = ((struct syscall_metadata *)call->data)->syscall_nr; @@ -145350,7 +145441,7 @@ index 0655afb..bfb4b48 100644 mutex_lock(&syscall_trace_lock); if (!sys_perf_refcount_enter) -@@ -611,6 +613,8 @@ static void perf_sysenter_disable(struct trace_event_call *call) +@@ -624,6 +626,8 @@ static void perf_sysenter_disable(struct trace_event_call *call) int num; num = ((struct syscall_metadata *)call->data)->syscall_nr; @@ -145359,7 +145450,7 @@ index 0655afb..bfb4b48 100644 mutex_lock(&syscall_trace_lock); sys_perf_refcount_enter--; -@@ -663,6 +667,8 @@ static int perf_sysexit_enable(struct trace_event_call *call) +@@ -676,6 +680,8 @@ static int perf_sysexit_enable(struct trace_event_call *call) int num; num = ((struct syscall_metadata *)call->data)->syscall_nr; @@ -145368,7 +145459,7 @@ index 0655afb..bfb4b48 100644 mutex_lock(&syscall_trace_lock); if (!sys_perf_refcount_exit) -@@ -683,6 +689,8 @@ static void perf_sysexit_disable(struct trace_event_call *call) +@@ -696,6 +702,8 @@ static void perf_sysexit_disable(struct trace_event_call *call) int num; num = ((struct syscall_metadata *)call->data)->syscall_nr; @@ -145453,10 +145544,10 @@ index 9acb29f..6fe517c 100644 .thread_should_run = watchdog_should_run, .thread_fn = watchdog, diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index f48c80e..43b9e4b 100644 +index 5f5068e..64dcad7 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c -@@ -1950,9 +1950,8 @@ static void pool_mayday_timeout(unsigned long __pool) +@@ -1948,9 +1948,8 @@ static void pool_mayday_timeout(unsigned long __pool) * multiple times. Does GFP_KERNEL allocations. Called only from * manager. */ @@ -145467,7 +145558,7 @@ index f48c80e..43b9e4b 100644 { restart: spin_unlock_irq(&pool->lock); -@@ -2042,9 +2041,8 @@ static bool manage_workers(struct worker *worker) +@@ -2040,9 +2039,8 @@ static bool manage_workers(struct worker *worker) * CONTEXT: * spin_lock_irq(pool->lock) which is released and regrabbed. */ @@ -145478,7 +145569,7 @@ index f48c80e..43b9e4b 100644 { struct pool_workqueue *pwq = get_work_pwq(work); struct worker_pool *pool = worker->pool; -@@ -4601,7 +4599,7 @@ static void rebind_workers(struct worker_pool *pool) +@@ -4599,7 +4597,7 @@ static void rebind_workers(struct worker_pool *pool) WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND)); worker_flags |= WORKER_REBOUND; worker_flags &= ~WORKER_UNBOUND; @@ -145488,7 +145579,7 @@ index f48c80e..43b9e4b 100644 spin_unlock_irq(&pool->lock); diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug -index 8bfd1ac..18fd274 100644 +index 1e9a607..c0eb5e0 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -243,6 +243,7 @@ config PAGE_OWNER @@ -145507,7 +145598,7 @@ index 8bfd1ac..18fd274 100644 help debugfs is a virtual file system that kernel developers use to put debugging files into. Enable this option to be able to read and -@@ -498,6 +500,7 @@ config DEBUG_KMEMLEAK +@@ -510,6 +512,7 @@ config DEBUG_KMEMLEAK bool "Kernel memory leak detector" depends on DEBUG_KERNEL && HAVE_DEBUG_KMEMLEAK select DEBUG_FS @@ -145515,7 +145606,15 @@ index 8bfd1ac..18fd274 100644 select STACKTRACE if STACKTRACE_SUPPORT select KALLSYMS select CRC32 -@@ -964,7 +967,7 @@ config DEBUG_MUTEXES +@@ -707,6 +710,7 @@ config KCOV + bool "Code coverage for fuzzing" + depends on ARCH_HAS_KCOV + select DEBUG_FS ++ depends on !GRKERNSEC_KMEM + help + KCOV exposes kernel code coverage information in a form suitable + for coverage-guided fuzzing (randomized testing). +@@ -997,7 +1001,7 @@ config DEBUG_MUTEXES config DEBUG_WW_MUTEX_SLOWPATH bool "Wait/wound mutex debugging: Slowpath testing" @@ -145524,7 +145623,7 @@ index 8bfd1ac..18fd274 100644 select DEBUG_LOCK_ALLOC select DEBUG_SPINLOCK select DEBUG_MUTEXES -@@ -981,7 +984,7 @@ config DEBUG_WW_MUTEX_SLOWPATH +@@ -1014,7 +1018,7 @@ config DEBUG_WW_MUTEX_SLOWPATH config DEBUG_LOCK_ALLOC bool "Lock debugging: detect incorrect freeing of live locks" @@ -145533,7 +145632,7 @@ index 8bfd1ac..18fd274 100644 select DEBUG_SPINLOCK select DEBUG_MUTEXES select LOCKDEP -@@ -995,7 +998,7 @@ config DEBUG_LOCK_ALLOC +@@ -1028,7 +1032,7 @@ config DEBUG_LOCK_ALLOC config PROVE_LOCKING bool "Lock debugging: prove locking correctness" @@ -145542,7 +145641,7 @@ index 8bfd1ac..18fd274 100644 select LOCKDEP select DEBUG_SPINLOCK select DEBUG_MUTEXES -@@ -1046,7 +1049,7 @@ config LOCKDEP +@@ -1079,7 +1083,7 @@ config LOCKDEP config LOCK_STAT bool "Lock usage statistics" @@ -145551,7 +145650,7 @@ index 8bfd1ac..18fd274 100644 select LOCKDEP select DEBUG_SPINLOCK select DEBUG_MUTEXES -@@ -1446,6 +1449,7 @@ config NOTIFIER_ERROR_INJECTION +@@ -1492,6 +1496,7 @@ config NOTIFIER_ERROR_INJECTION tristate "Notifier error injection" depends on DEBUG_KERNEL select DEBUG_FS @@ -145559,7 +145658,7 @@ index 8bfd1ac..18fd274 100644 help This option provides the ability to inject artificial errors to specified notifier chain callbacks. It is useful to test the error -@@ -1591,6 +1595,7 @@ config FAIL_MMC_REQUEST +@@ -1637,6 +1642,7 @@ config FAIL_MMC_REQUEST config FAIL_FUTEX bool "Fault-injection capability for futexes" select DEBUG_FS @@ -145567,7 +145666,7 @@ index 8bfd1ac..18fd274 100644 depends on FAULT_INJECTION && FUTEX help Provide fault-injection capability for futexes. -@@ -1615,6 +1620,7 @@ config LATENCYTOP +@@ -1661,6 +1667,7 @@ config LATENCYTOP depends on DEBUG_KERNEL depends on STACKTRACE_SUPPORT depends on PROC_FS @@ -145575,7 +145674,7 @@ index 8bfd1ac..18fd274 100644 select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC select KALLSYMS select KALLSYMS_ALL -@@ -1631,7 +1637,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS +@@ -1677,7 +1684,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS config DEBUG_STRICT_USER_COPY_CHECKS bool "Strict user copy size checks" depends on ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS @@ -145584,7 +145683,7 @@ index 8bfd1ac..18fd274 100644 help Enabling this option turns a certain set of sanity checks for user copy operations into compile time failures. -@@ -1765,7 +1771,7 @@ endmenu # runtime tests +@@ -1819,7 +1826,7 @@ endmenu # runtime tests config PROVIDE_OHCI1394_DMA_INIT bool "Remote debugging over FireWire early on boot" @@ -145593,24 +145692,11 @@ index 8bfd1ac..18fd274 100644 help If you want to debug problems which hang or crash the kernel early on boot and the crashing machine has a FireWire port, you can use -diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan -index 0fee5ac..b2b159d 100644 ---- a/lib/Kconfig.kasan -+++ b/lib/Kconfig.kasan -@@ -5,7 +5,7 @@ if HAVE_ARCH_KASAN - - config KASAN - bool "KASan: runtime memory debugger" -- depends on SLUB_DEBUG -+ depends on SLUB_DEBUG && !GRKERNSEC_KSTACKOVERFLOW - select CONSTRUCTORS - help - Enables kernel address sanitizer - runtime memory debugger, diff --git a/lib/Makefile b/lib/Makefile -index a7c26a4..6747b22 100644 +index 7bd6fd4..643d6f9 100644 --- a/lib/Makefile +++ b/lib/Makefile -@@ -66,7 +66,7 @@ obj-$(CONFIG_BTREE) += btree.o +@@ -80,7 +80,7 @@ obj-$(CONFIG_BTREE) += btree.o obj-$(CONFIG_INTERVAL_TREE) += interval_tree.o obj-$(CONFIG_ASSOCIATIVE_ARRAY) += assoc_array.o obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o @@ -145619,58 +145705,11 @@ index a7c26a4..6747b22 100644 obj-$(CONFIG_DEBUG_OBJECTS) += debugobjects.o ifneq ($(CONFIG_HAVE_DEC_LOCK),y) -diff --git a/lib/asn1_decoder.c b/lib/asn1_decoder.c -index 2b3f46c..5545229 100644 ---- a/lib/asn1_decoder.c -+++ b/lib/asn1_decoder.c -@@ -74,7 +74,7 @@ next_tag: - - /* Extract a tag from the data */ - tag = data[dp++]; -- if (tag == 0) { -+ if (tag == ASN1_EOC) { - /* It appears to be an EOC. */ - if (data[dp++] != 0) - goto invalid_eoc; -@@ -96,10 +96,8 @@ next_tag: - - /* Extract the length */ - len = data[dp++]; -- if (len <= 0x7f) { -- dp += len; -- goto next_tag; -- } -+ if (len <= 0x7f) -+ goto check_length; - - if (unlikely(len == ASN1_INDEFINITE_LENGTH)) { - /* Indefinite length */ -@@ -110,14 +108,18 @@ next_tag: - } - - n = len - 0x80; -- if (unlikely(n > sizeof(size_t) - 1)) -+ if (unlikely(n > sizeof(len) - 1)) - goto length_too_long; - if (unlikely(n > datalen - dp)) - goto data_overrun_error; -- for (len = 0; n > 0; n--) { -+ len = 0; -+ for (; n > 0; n--) { - len <<= 8; - len |= data[dp++]; - } -+check_length: -+ if (len > datalen - dp) -+ goto data_overrun_error; - dp += len; - goto next_tag; - diff --git a/lib/bitmap.c b/lib/bitmap.c -index 8148143..d132f7e9 100644 +index c66da50..1ac10c9 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c -@@ -361,7 +361,7 @@ int __bitmap_parse(const char *buf, unsigned int buflen, +@@ -363,7 +363,7 @@ int __bitmap_parse(const char *buf, unsigned int buflen, { int c, old_c, totaldigits, ndigits, nchunks, nbits; u32 chunk; @@ -145679,7 +145718,7 @@ index 8148143..d132f7e9 100644 bitmap_zero(maskp, nmaskbits); -@@ -447,7 +447,7 @@ int bitmap_parse_user(const char __user *ubuf, +@@ -449,7 +449,7 @@ int bitmap_parse_user(const char __user *ubuf, { if (!access_ok(VERIFY_READ, ubuf, ulen)) return -EFAULT; @@ -145688,7 +145727,7 @@ index 8148143..d132f7e9 100644 ulen, 1, maskp, nmaskbits); } -@@ -507,7 +507,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen, +@@ -509,7 +509,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen, { unsigned a, b; int c, old_c, totaldigits, ndigits; @@ -145697,7 +145736,7 @@ index 8148143..d132f7e9 100644 int at_start, in_range; totaldigits = c = 0; -@@ -611,7 +611,7 @@ int bitmap_parselist_user(const char __user *ubuf, +@@ -613,7 +613,7 @@ int bitmap_parselist_user(const char __user *ubuf, { if (!access_ok(VERIFY_READ, ubuf, ulen)) return -EFAULT; @@ -145707,7 +145746,7 @@ index 8148143..d132f7e9 100644 } EXPORT_SYMBOL(bitmap_parselist_user); diff --git a/lib/bug.c b/lib/bug.c -index cff145f..724a0b8 100644 +index bc3656e..470f3ab 100644 --- a/lib/bug.c +++ b/lib/bug.c @@ -148,6 +148,8 @@ enum bug_trap_type report_bug(unsigned long bugaddr, struct pt_regs *regs) @@ -145807,6 +145846,34 @@ index 51a76af..7caf15b 100644 err_printk(dev, NULL, "DMA-API: device driver maps memory from " "stack [addr=%p]\n", addr); } +diff --git a/lib/extable.c b/lib/extable.c +index 0be02ad5..c2ad286 100644 +--- a/lib/extable.c ++++ b/lib/extable.c +@@ -13,13 +13,22 @@ + #include <linux/init.h> + #include <linux/sort.h> + #include <asm/uaccess.h> ++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC) ++#include <asm/boot.h> ++#endif + + #ifndef ARCH_HAS_RELATIVE_EXTABLE + #define ex_to_insn(x) ((x)->insn) + #else + static inline unsigned long ex_to_insn(const struct exception_table_entry *x) + { +- return (unsigned long)&x->insn + x->insn; ++ unsigned long reloc = 0; ++ ++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC) ++ reloc = ____LOAD_PHYSICAL_ADDR - LOAD_PHYSICAL_ADDR; ++#endif ++ ++ return (unsigned long)&x->insn + x->insn + reloc; + } + #endif + diff --git a/lib/inflate.c b/lib/inflate.c index 013a761..c28f3fc 100644 --- a/lib/inflate.c @@ -145870,10 +145937,10 @@ index 391fd23..96e17b6 100644 return false; diff --git a/lib/kobject.c b/lib/kobject.c -index 7cbccd2..37f089d 100644 +index 445dcae..cbfd25d 100644 --- a/lib/kobject.c +++ b/lib/kobject.c -@@ -954,9 +954,9 @@ EXPORT_SYMBOL_GPL(kset_create_and_add); +@@ -955,9 +955,9 @@ EXPORT_SYMBOL_GPL(kset_create_and_add); static DEFINE_SPINLOCK(kobj_ns_type_lock); @@ -146252,7 +146319,7 @@ index f5907d2..36072be 100644 if (count > minlen) memset(dest + minlen, 0, count - minlen); diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c -index 6111bcb..02e816b 100644 +index 27fe749..2c0e855 100644 --- a/lib/percpu-refcount.c +++ b/lib/percpu-refcount.c @@ -31,7 +31,7 @@ @@ -146265,7 +146332,7 @@ index 6111bcb..02e816b 100644 static DECLARE_WAIT_QUEUE_HEAD(percpu_ref_switch_waitq); diff --git a/lib/radix-tree.c b/lib/radix-tree.c -index 6b79e90..4811f49 100644 +index 1624c41..1a43c06 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -68,7 +68,7 @@ struct radix_tree_preload { @@ -146278,7 +146345,7 @@ index 6b79e90..4811f49 100644 static inline void *ptr_to_indirect(void *ptr) { diff --git a/lib/random32.c b/lib/random32.c -index 1211191..63e8a83 100644 +index 510d1ce..722d2b6 100644 --- a/lib/random32.c +++ b/lib/random32.c @@ -47,7 +47,7 @@ static inline void prandom_state_selftest(void) @@ -146329,6 +146396,28 @@ index cc80870..6378152 100644 { struct rhashtable *ht; struct bucket_table *tbl = iter->walker->tbl; +diff --git a/lib/seq_buf.c b/lib/seq_buf.c +index cb18469..20ac511 100644 +--- a/lib/seq_buf.c ++++ b/lib/seq_buf.c +@@ -259,7 +259,7 @@ int seq_buf_putmem_hex(struct seq_buf *s, const void *mem, + */ + int seq_buf_path(struct seq_buf *s, const struct path *path, const char *esc) + { +- char *buf; ++ unsigned char *buf; + size_t size = seq_buf_get_buf(s, &buf); + int res = -1; + +@@ -268,7 +268,7 @@ int seq_buf_path(struct seq_buf *s, const struct path *path, const char *esc) + if (size) { + char *p = d_path(path, buf, size); + if (!IS_ERR(p)) { +- char *end = mangle_path(buf, p, esc); ++ unsigned char *end = mangle_path(buf, p, esc); + if (end) + res = end - buf; + } diff --git a/lib/show_mem.c b/lib/show_mem.c index 1feed6a..4ede1e9 100644 --- a/lib/show_mem.c @@ -146395,7 +146484,7 @@ index 4f5b1dd..7cab418 100644 +} +EXPORT_SYMBOL(copy_to_user_overflow); diff --git a/lib/vsprintf.c b/lib/vsprintf.c -index f44e178..e5856a5 100644 +index ccb664b..058e2978 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -16,6 +16,9 @@ @@ -146408,7 +146497,7 @@ index f44e178..e5856a5 100644 #include <stdarg.h> #include <linux/clk.h> #include <linux/clk-provider.h> -@@ -677,7 +680,7 @@ char *symbol_string(char *buf, char *end, void *ptr, +@@ -679,7 +682,7 @@ char *symbol_string(char *buf, char *end, void *ptr, #ifdef CONFIG_KALLSYMS if (*fmt == 'B') sprint_backtrace(sym, value); @@ -146417,8 +146506,8 @@ index f44e178..e5856a5 100644 sprint_symbol(sym, value); else sprint_symbol_no_offset(sym, value); -@@ -1407,7 +1410,11 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec, - } +@@ -1475,7 +1478,11 @@ char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt) + return format_flags(buf, end, flags, names); } -int kptr_restrict __read_mostly; @@ -146430,7 +146519,7 @@ index f44e178..e5856a5 100644 /* * Show a '%p' thing. A kernel extension is that the '%p' is followed -@@ -1418,8 +1425,10 @@ int kptr_restrict __read_mostly; +@@ -1486,8 +1493,10 @@ int kptr_restrict __read_mostly; * * - 'F' For symbolic function descriptor pointers with offset * - 'f' For simple symbolic function names without offset @@ -146441,7 +146530,7 @@ index f44e178..e5856a5 100644 * - '[FfSs]R' as above with __builtin_extract_return_addr() translation * - 'B' For backtraced symbolic direct pointers with offset * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref] -@@ -1510,12 +1519,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1583,12 +1592,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, if (!ptr && *fmt != 'K') { /* @@ -146456,7 +146545,7 @@ index f44e178..e5856a5 100644 } switch (*fmt) { -@@ -1525,6 +1534,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1598,6 +1607,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, /* Fallthrough */ case 'S': case 's': @@ -146471,7 +146560,7 @@ index f44e178..e5856a5 100644 case 'B': return symbol_string(buf, end, ptr, spec, fmt); case 'R': -@@ -1589,6 +1606,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1662,6 +1679,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, va_end(va); return buf; } @@ -146480,9 +146569,9 @@ index f44e178..e5856a5 100644 case 'K': switch (kptr_restrict) { case 0: -@@ -1649,6 +1668,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, - #endif - +@@ -1724,6 +1743,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, + case 'G': + return flags_string(buf, end, ptr, fmt); } + +#ifdef CONFIG_GRKERNSEC_HIDESYM @@ -146503,7 +146592,7 @@ index f44e178..e5856a5 100644 spec.flags |= SMALL; if (spec.field_width == -1) { spec.field_width = default_width; -@@ -2349,11 +2384,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) +@@ -2424,11 +2459,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) typeof(type) value; \ if (sizeof(type) == 8) { \ args = PTR_ALIGN(args, sizeof(u32)); \ @@ -146518,7 +146607,7 @@ index f44e178..e5856a5 100644 } \ args += sizeof(type); \ value; \ -@@ -2416,7 +2451,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) +@@ -2491,7 +2526,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) case FORMAT_TYPE_STR: { const char *str_arg = args; args += strlen(str_arg) + 1; @@ -146535,10 +146624,10 @@ index 0000000..7cd6065 @@ -0,0 +1 @@ +-grsec diff --git a/mm/Kconfig b/mm/Kconfig -index 03cbfa0..5a6d8e6 100644 +index 989f8f3..3f7e8cc 100644 --- a/mm/Kconfig +++ b/mm/Kconfig -@@ -324,10 +324,11 @@ config KSM +@@ -323,10 +323,11 @@ config KSM root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set). config DEFAULT_MMAP_MIN_ADDR @@ -146553,7 +146642,7 @@ index 03cbfa0..5a6d8e6 100644 This is the portion of low virtual memory which should be protected from userspace allocation. Keeping a user from writing to low pages can help reduce the impact of kernel NULL pointer bugs. -@@ -359,8 +360,9 @@ config MEMORY_FAILURE +@@ -358,8 +359,9 @@ config MEMORY_FAILURE config HWPOISON_INJECT tristate "HWPoison pages injector" @@ -146564,7 +146653,7 @@ index 03cbfa0..5a6d8e6 100644 config NOMMU_INITIAL_TRIM_EXCESS int "Turn on mmap() excess space trimming before booting" -@@ -521,6 +523,7 @@ config MEM_SOFT_DIRTY +@@ -520,6 +522,7 @@ config MEM_SOFT_DIRTY bool "Track memory changes" depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS select PROC_PAGE_MONITOR @@ -146572,7 +146661,7 @@ index 03cbfa0..5a6d8e6 100644 help This option enables memory changes tracking by introducing a soft-dirty bit on pte-s. This bit it set when someone writes -@@ -595,6 +598,7 @@ config ZSMALLOC_STAT +@@ -594,6 +597,7 @@ config ZSMALLOC_STAT bool "Export zsmalloc statistics" depends on ZSMALLOC select DEBUG_FS @@ -146581,7 +146670,7 @@ index 03cbfa0..5a6d8e6 100644 This option enables code in the zsmalloc to collect various statistics about whats happening in zsmalloc and exports that diff --git a/mm/Kconfig.debug b/mm/Kconfig.debug -index 957d3da..1d34e20 100644 +index 22f4cd9..402f316 100644 --- a/mm/Kconfig.debug +++ b/mm/Kconfig.debug @@ -10,6 +10,7 @@ config PAGE_EXTENSION @@ -146593,7 +146682,7 @@ index 957d3da..1d34e20 100644 depends on !KMEMCHECK select PAGE_EXTENSION diff --git a/mm/backing-dev.c b/mm/backing-dev.c -index c554d17..9ddceb5 100644 +index 0c6317b..24c13bd 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -12,7 +12,7 @@ @@ -146614,22 +146703,8 @@ index c554d17..9ddceb5 100644 if (err) { bdi_destroy(bdi); return err; -diff --git a/mm/debug.c b/mm/debug.c -index f05b2d5..0d6e01f 100644 ---- a/mm/debug.c -+++ b/mm/debug.c -@@ -127,6 +127,9 @@ static const struct trace_print_flags vmaflags_names[] = { - {VM_RAND_READ, "randread" }, - {VM_DONTCOPY, "dontcopy" }, - {VM_DONTEXPAND, "dontexpand" }, -+#if defined(CONFIG_PAX_PAGEEXEC) && defined(CONFIG_X86_32) -+ {VM_PAGEEXEC, "pageexec" }, -+#endif - {VM_ACCOUNT, "account" }, - {VM_NORESERVE, "noreserve" }, - {VM_HUGETLB, "hugetlb" }, diff --git a/mm/fadvise.c b/mm/fadvise.c -index b8a5bc6..bf65b8c 100644 +index b8024fa..132d187 100644 --- a/mm/fadvise.c +++ b/mm/fadvise.c @@ -154,7 +154,7 @@ out: @@ -146642,30 +146717,10 @@ index b8a5bc6..bf65b8c 100644 return sys_fadvise64_64(fd, offset, len, advice); } diff --git a/mm/filemap.c b/mm/filemap.c -index da7a35d..d10518d 100644 +index f2479af..13e3c295 100644 --- a/mm/filemap.c +++ b/mm/filemap.c -@@ -1860,15 +1860,16 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) - ssize_t retval = 0; - loff_t *ppos = &iocb->ki_pos; - loff_t pos = *ppos; -+ size_t count = iov_iter_count(iter); -+ -+ if (!count) -+ goto out; /* skip atime */ - - if (iocb->ki_flags & IOCB_DIRECT) { - struct address_space *mapping = file->f_mapping; - struct inode *inode = mapping->host; -- size_t count = iov_iter_count(iter); - loff_t size; - -- if (!count) -- goto out; /* skip atime */ - size = i_size_read(inode); - retval = filemap_write_and_wait_range(mapping, pos, - pos + count - 1); -@@ -2262,7 +2263,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma) +@@ -2244,7 +2244,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma) struct address_space *mapping = file->f_mapping; if (!mapping->a_ops->readpage) @@ -146674,16 +146729,7 @@ index da7a35d..d10518d 100644 file_accessed(file); vma->vm_ops = &generic_file_vm_ops; return 0; -@@ -2305,7 +2306,7 @@ static struct page *wait_on_page_read(struct page *page) - - static struct page *__read_cache_page(struct address_space *mapping, - pgoff_t index, -- int (*filler)(void *, struct page *), -+ filler_t *filler, - void *data, - gfp_t gfp) - { -@@ -2338,7 +2339,7 @@ repeat: +@@ -2287,7 +2287,7 @@ static struct page *wait_on_page_read(struct page *page) static struct page *do_read_cache_page(struct address_space *mapping, pgoff_t index, @@ -146691,8 +146737,8 @@ index da7a35d..d10518d 100644 + filler_t *filler, void *data, gfp_t gfp) - -@@ -2391,7 +2392,7 @@ out: + { +@@ -2394,7 +2394,7 @@ out: */ struct page *read_cache_page(struct address_space *mapping, pgoff_t index, @@ -146701,7 +146747,7 @@ index da7a35d..d10518d 100644 void *data) { return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping)); -@@ -2413,7 +2414,7 @@ struct page *read_cache_page_gfp(struct address_space *mapping, +@@ -2416,7 +2416,7 @@ struct page *read_cache_page_gfp(struct address_space *mapping, pgoff_t index, gfp_t gfp) { @@ -146710,7 +146756,7 @@ index da7a35d..d10518d 100644 return do_read_cache_page(mapping, index, filler, NULL, gfp); } -@@ -2443,6 +2444,7 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from) +@@ -2446,6 +2446,7 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from) pos = iocb->ki_pos; if (limit != RLIM_INFINITY) { @@ -146719,10 +146765,10 @@ index da7a35d..d10518d 100644 send_sig(SIGXFSZ, current, 0); return -EFBIG; diff --git a/mm/gup.c b/mm/gup.c -index 7bf19ff..c059128 100644 +index c057784..aafea3a 100644 --- a/mm/gup.c +++ b/mm/gup.c -@@ -356,11 +356,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, +@@ -357,11 +357,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, /* mlock all present pages, but do not fault in new pages */ if ((*flags & (FOLL_POPULATE | FOLL_MLOCK)) == FOLL_MLOCK) return -ENOENT; @@ -146733,8 +146779,8 @@ index 7bf19ff..c059128 100644 - return -ENOENT; if (*flags & FOLL_WRITE) fault_flags |= FAULT_FLAG_WRITE; - if (nonblocking) -@@ -524,14 +519,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, + if (*flags & FOLL_REMOTE) +@@ -535,14 +530,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, if (!(gup_flags & FOLL_FORCE)) gup_flags |= FOLL_NUMA; @@ -146751,7 +146797,7 @@ index 7bf19ff..c059128 100644 if (!vma && in_gate_area(mm, start)) { int ret; ret = get_gate_page(mm, start & PAGE_MASK, -@@ -543,7 +538,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, +@@ -554,7 +549,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, goto next_page; } @@ -146760,7 +146806,7 @@ index 7bf19ff..c059128 100644 return i ? : -EFAULT; if (is_vm_hugetlb_page(vma)) { i = follow_hugetlb_page(mm, vma, pages, vmas, -@@ -604,7 +599,7 @@ next_page: +@@ -615,7 +610,7 @@ next_page: i += page_increm; start += page_increm * PAGE_SIZE; nr_pages -= page_increm; @@ -146797,7 +146843,7 @@ index 123bcd3..c2c85db 100644 pkmap_count[last_pkmap_nr] = 1; set_page_address(page, (void *)vaddr); diff --git a/mm/hugetlb.c b/mm/hugetlb.c -index aefba5a..07b8545 100644 +index 19d0d08..9a1ad47 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -38,7 +38,60 @@ int hugepages_treat_as_movable; @@ -146862,7 +146908,7 @@ index aefba5a..07b8545 100644 /* * Minimum page order among possible hugepage sizes, set to a proper value * at boot time. -@@ -2746,6 +2799,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, +@@ -2745,6 +2798,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, struct ctl_table *table, int write, void __user *buffer, size_t *length, loff_t *ppos) { @@ -146870,7 +146916,7 @@ index aefba5a..07b8545 100644 struct hstate *h = &default_hstate; unsigned long tmp = h->max_huge_pages; int ret; -@@ -2753,9 +2807,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, +@@ -2752,9 +2806,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, if (!hugepages_supported()) return -EOPNOTSUPP; @@ -146884,7 +146930,7 @@ index aefba5a..07b8545 100644 if (ret) goto out; -@@ -2790,6 +2845,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, +@@ -2789,6 +2844,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, struct hstate *h = &default_hstate; unsigned long tmp; int ret; @@ -146892,7 +146938,7 @@ index aefba5a..07b8545 100644 if (!hugepages_supported()) return -EOPNOTSUPP; -@@ -2799,9 +2855,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, +@@ -2798,9 +2854,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, if (write && hstate_is_gigantic(h)) return -EINVAL; @@ -146906,7 +146952,7 @@ index aefba5a..07b8545 100644 if (ret) goto out; -@@ -3307,6 +3364,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3306,6 +3363,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma, i_mmap_unlock_write(mapping); } @@ -146934,7 +146980,7 @@ index aefba5a..07b8545 100644 /* * Hugetlb_cow() should be called with page lock of the original hugepage held. * Called with hugetlb_instantiation_mutex held and pte_page locked so we -@@ -3420,6 +3498,11 @@ retry_avoidcopy: +@@ -3419,6 +3497,11 @@ retry_avoidcopy: make_huge_pte(vma, new_page, 1)); page_remove_rmap(old_page, true); hugepage_add_new_anon_rmap(new_page, vma, address); @@ -146946,7 +146992,7 @@ index aefba5a..07b8545 100644 /* Make the old page be freed below */ new_page = old_page; } -@@ -3593,6 +3676,10 @@ retry: +@@ -3592,6 +3675,10 @@ retry: && (vma->vm_flags & VM_SHARED))); set_huge_pte_at(mm, address, ptep, new_pte); @@ -146957,7 +147003,7 @@ index aefba5a..07b8545 100644 hugetlb_count_add(pages_per_huge_page(h), mm); if ((flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED)) { /* Optimization, do the COW without a second fault */ -@@ -3661,6 +3748,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3660,6 +3747,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, struct address_space *mapping; int need_wait_lock = 0; @@ -146968,7 +147014,7 @@ index aefba5a..07b8545 100644 address &= huge_page_mask(h); ptep = huge_pte_offset(mm, address); -@@ -3678,6 +3769,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3677,6 +3768,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, return VM_FAULT_OOM; } @@ -147102,18 +147148,18 @@ index d8fb10d..1c74822 100644 void __init hugetlb_cgroup_file_init(void) diff --git a/mm/internal.h b/mm/internal.h -index a38a21e..8398316 100644 +index b79abb6..8b28234 100644 --- a/mm/internal.h +++ b/mm/internal.h -@@ -134,6 +134,7 @@ __find_buddy_index(unsigned long page_idx, unsigned int order) +@@ -147,6 +147,7 @@ static inline struct page *pageblock_pfn_to_page(unsigned long start_pfn, extern int __isolate_free_page(struct page *page, unsigned int order); extern void __free_pages_bootmem(struct page *page, unsigned long pfn, unsigned int order); +extern void free_compound_page(struct page *page); extern void prep_compound_page(struct page *page, unsigned int order); - #ifdef CONFIG_MEMORY_FAILURE - extern bool is_free_buddy_page(struct page *page); -@@ -236,7 +237,7 @@ static inline bool is_exec_mapping(vm_flags_t flags) + extern int user_min_free_kbytes; + +@@ -247,7 +248,7 @@ static inline bool is_exec_mapping(vm_flags_t flags) */ static inline bool is_stack_mapping(vm_flags_t flags) { @@ -147123,7 +147169,7 @@ index a38a21e..8398316 100644 /* diff --git a/mm/kmemleak.c b/mm/kmemleak.c -index 25c0ad3..1b474de 100644 +index e642992..b6128bc 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -365,7 +365,7 @@ static void print_unreferenced(struct seq_file *seq, @@ -147135,7 +147181,7 @@ index 25c0ad3..1b474de 100644 } } -@@ -1957,7 +1957,7 @@ static int __init kmemleak_late_init(void) +@@ -1955,7 +1955,7 @@ static int __init kmemleak_late_init(void) return -ENOMEM; } @@ -147143,7 +147189,7 @@ index 25c0ad3..1b474de 100644 + dentry = debugfs_create_file("kmemleak", S_IRUSR, NULL, NULL, &kmemleak_fops); if (!dentry) - pr_warning("Failed to create the debugfs kmemleak file\n"); + pr_warn("Failed to create the debugfs kmemleak file\n"); diff --git a/mm/maccess.c b/mm/maccess.c index d159b1c..7655796 100644 --- a/mm/maccess.c @@ -147180,7 +147226,7 @@ index d159b1c..7655796 100644 return ret ? -EFAULT : 0; } diff --git a/mm/madvise.c b/mm/madvise.c -index f56825b..f86f118 100644 +index 07427d3..05f1d57 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -56,6 +56,10 @@ static long madvise_behavior(struct vm_area_struct *vma, @@ -147236,7 +147282,7 @@ index f56825b..f86f118 100644 return 0; } -@@ -687,6 +714,16 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior) +@@ -702,6 +729,16 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior) if (end < start) return error; @@ -147254,10 +147300,10 @@ index f56825b..f86f118 100644 if (end == start) return error; diff --git a/mm/memcontrol.c b/mm/memcontrol.c -index a65ad1d..0a39040 100644 +index a2e79b8..66b4b808 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c -@@ -749,7 +749,7 @@ static void memcg_check_events(struct mem_cgroup *memcg, struct page *page) +@@ -723,7 +723,7 @@ static void memcg_check_events(struct mem_cgroup *memcg, struct page *page) mem_cgroup_update_tree(memcg, page); #if MAX_NUMNODES > 1 if (unlikely(do_numainfo)) @@ -147266,7 +147312,7 @@ index a65ad1d..0a39040 100644 #endif } } -@@ -1382,7 +1382,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg) +@@ -1352,7 +1352,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg) * numainfo_events > 0 means there was at least NUMAINFO_EVENTS_TARGET * pagein/pageout changes since the last update. */ @@ -147275,7 +147321,7 @@ index a65ad1d..0a39040 100644 return; if (atomic_inc_return(&memcg->numainfo_updating) > 1) return; -@@ -1396,7 +1396,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg) +@@ -1366,7 +1366,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg) node_clear(nid, memcg->scan_nodes); } @@ -147285,7 +147331,7 @@ index a65ad1d..0a39040 100644 } diff --git a/mm/memory-failure.c b/mm/memory-failure.c -index ac595e7..78fa945 100644 +index ca5acee..bee974a 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -64,7 +64,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0; @@ -147297,8 +147343,8 @@ index ac595e7..78fa945 100644 #if defined(CONFIG_HWPOISON_INJECT) || defined(CONFIG_HWPOISON_INJECT_MODULE) -@@ -189,7 +189,7 @@ static int kill_proc(struct task_struct *t, unsigned long addr, int trapno, - pfn, t->comm, t->pid); +@@ -188,7 +188,7 @@ static int kill_proc(struct task_struct *t, unsigned long addr, int trapno, + pfn, t->comm, t->pid); si.si_signo = SIGBUS; si.si_errno = 0; - si.si_addr = (void *)addr; @@ -147306,7 +147352,7 @@ index ac595e7..78fa945 100644 #ifdef __ARCH_SI_TRAPNO si.si_trapno = trapno; #endif -@@ -784,7 +784,7 @@ static struct page_state { +@@ -779,7 +779,7 @@ static struct page_state { unsigned long res; enum mf_action_page_type type; int (*action)(struct page *p, unsigned long pfn); @@ -147316,10 +147362,10 @@ index ac595e7..78fa945 100644 /* * free pages are specially detected outside this table: diff --git a/mm/memory.c b/mm/memory.c -index c1aa0e4..a987b41 100644 +index 07493e3..052aa0f 100644 --- a/mm/memory.c +++ b/mm/memory.c -@@ -416,6 +416,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, +@@ -417,6 +417,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, free_pte_range(tlb, pmd, addr); } while (pmd++, addr = next, addr != end); @@ -147327,7 +147373,7 @@ index c1aa0e4..a987b41 100644 start &= PUD_MASK; if (start < floor) return; -@@ -431,6 +432,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, +@@ -432,6 +433,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, pud_clear(pud); pmd_free_tlb(tlb, pmd, start); mm_dec_nr_pmds(tlb->mm); @@ -147335,7 +147381,7 @@ index c1aa0e4..a987b41 100644 } static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd, -@@ -450,6 +452,7 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd, +@@ -451,6 +453,7 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd, free_pmd_range(tlb, pud, addr, next, floor, ceiling); } while (pud++, addr = next, addr != end); @@ -147343,7 +147389,7 @@ index c1aa0e4..a987b41 100644 start &= PGDIR_MASK; if (start < floor) return; -@@ -464,6 +467,8 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd, +@@ -465,6 +468,8 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd, pud = pud_offset(pgd, start); pgd_clear(pgd); pud_free_tlb(tlb, pud, start); @@ -147352,7 +147398,7 @@ index c1aa0e4..a987b41 100644 } /* -@@ -686,7 +691,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr, +@@ -683,7 +688,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr, /* * Choose text because data symbols depend on CONFIG_KALLSYMS_ALL=y */ @@ -147361,7 +147407,7 @@ index c1aa0e4..a987b41 100644 vma->vm_file, vma->vm_ops ? vma->vm_ops->fault : NULL, vma->vm_file ? vma->vm_file->f_op->mmap : NULL, -@@ -1488,6 +1493,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr, +@@ -1481,6 +1486,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr, page_add_file_rmap(page); set_pte_at(mm, addr, pte, mk_pte(page, prot)); @@ -147372,7 +147418,7 @@ index c1aa0e4..a987b41 100644 retval = 0; pte_unmap_unlock(pte, ptl); return retval; -@@ -1532,9 +1541,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr, +@@ -1525,9 +1534,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr, if (!page_count(page)) return -EINVAL; if (!(vma->vm_flags & VM_MIXEDMAP)) { @@ -147394,7 +147440,7 @@ index c1aa0e4..a987b41 100644 } return insert_page(vma, addr, page, vma->vm_page_prot); } -@@ -1620,6 +1641,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr, +@@ -1634,6 +1655,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr, pfn_t pfn) { BUG_ON(!(vma->vm_flags & VM_MIXEDMAP)); @@ -147402,7 +147448,7 @@ index c1aa0e4..a987b41 100644 if (addr < vma->vm_start || addr >= vma->vm_end) return -EFAULT; -@@ -1872,7 +1894,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud, +@@ -1886,7 +1908,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud, BUG_ON(pud_huge(*pud)); @@ -147413,7 +147459,7 @@ index c1aa0e4..a987b41 100644 if (!pmd) return -ENOMEM; do { -@@ -1892,7 +1916,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd, +@@ -1906,7 +1930,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd, unsigned long next; int err; @@ -147424,7 +147470,7 @@ index c1aa0e4..a987b41 100644 if (!pud) return -ENOMEM; do { -@@ -2088,6 +2114,196 @@ static inline int wp_page_reuse(struct mm_struct *mm, +@@ -2104,6 +2130,196 @@ static inline int wp_page_reuse(struct mm_struct *mm, return VM_FAULT_WRITE; } @@ -147467,7 +147513,7 @@ index c1aa0e4..a987b41 100644 + else + dec_mm_counter_fast(mm, MM_FILEPAGES); + page_remove_rmap(page, false); -+ page_cache_release(page); ++ put_page(page); + } + } + pte_unmap_unlock(pte, ptl); @@ -147506,7 +147552,7 @@ index c1aa0e4..a987b41 100644 + } + + entry_m = pfn_pte(page_to_pfn(page_m), vma_m->vm_page_prot); -+ page_cache_get(page_m); ++ get_page(page_m); + page_add_anon_rmap(page_m, vma_m, address_m, false); + inc_mm_counter_fast(mm, MM_ANONPAGES); + set_pte_at(mm, address_m, pte_m, entry_m); @@ -147545,7 +147591,7 @@ index c1aa0e4..a987b41 100644 + } + + entry_m = pfn_pte(page_to_pfn(page_m), vma_m->vm_page_prot); -+ page_cache_get(page_m); ++ get_page(page_m); + page_add_file_rmap(page_m); + inc_mm_counter_fast(mm, MM_FILEPAGES); + set_pte_at(mm, address_m, pte_m, entry_m); @@ -147621,7 +147667,7 @@ index c1aa0e4..a987b41 100644 /* * Handle the case of a page which we actually need to copy to a new page. * -@@ -2142,6 +2358,12 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2158,6 +2374,12 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma, */ page_table = pte_offset_map_lock(mm, pmd, address, &ptl); if (likely(pte_same(*page_table, orig_pte))) { @@ -147634,7 +147680,7 @@ index c1aa0e4..a987b41 100644 if (old_page) { if (!PageAnon(old_page)) { dec_mm_counter_fast(mm, -@@ -2197,6 +2419,10 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2213,6 +2435,10 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma, page_remove_rmap(old_page, false); } @@ -147645,7 +147691,7 @@ index c1aa0e4..a987b41 100644 /* Free the old page.. */ new_page = old_page; page_copied = 1; -@@ -2631,6 +2857,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2646,6 +2872,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, if (mem_cgroup_swap_full(page) || (vma->vm_flags & VM_LOCKED) || PageMlocked(page)) try_to_free_swap(page); @@ -147657,7 +147703,7 @@ index c1aa0e4..a987b41 100644 unlock_page(page); if (page != swapcache) { /* -@@ -2654,6 +2885,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2669,6 +2900,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, address, page_table); @@ -147669,7 +147715,7 @@ index c1aa0e4..a987b41 100644 unlock: pte_unmap_unlock(page_table, ptl); out: -@@ -2673,40 +2909,6 @@ out_release: +@@ -2688,40 +2924,6 @@ out_release: } /* @@ -147710,7 +147756,7 @@ index c1aa0e4..a987b41 100644 * We enter with non-exclusive mmap_sem (to exclude vma changes, * but allow concurrent faults), and pte mapped but not yet locked. * We return with mmap_sem still held, but pte unmapped and unlocked. -@@ -2716,25 +2918,22 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2731,25 +2933,22 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned int flags) { struct mem_cgroup *memcg; @@ -147742,7 +147788,7 @@ index c1aa0e4..a987b41 100644 if (!pte_none(*page_table)) goto unlock; /* Deliver the page fault to userland, check inside PT lock */ -@@ -2747,6 +2946,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2762,6 +2961,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, } /* Allocate our own private page. */ @@ -147751,7 +147797,7 @@ index c1aa0e4..a987b41 100644 if (unlikely(anon_vma_prepare(vma))) goto oom; page = alloc_zeroed_user_highpage_movable(vma, address); -@@ -2780,6 +2981,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2795,6 +2996,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, VM_UFFD_MISSING); } @@ -147763,7 +147809,7 @@ index c1aa0e4..a987b41 100644 inc_mm_counter_fast(mm, MM_ANONPAGES); page_add_new_anon_rmap(page, vma, address, false); mem_cgroup_commit_charge(page, memcg, false, false); -@@ -2789,6 +2995,12 @@ setpte: +@@ -2804,6 +3010,12 @@ setpte: /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, address, page_table); @@ -147776,7 +147822,7 @@ index c1aa0e4..a987b41 100644 unlock: pte_unmap_unlock(page_table, ptl); return 0; -@@ -3023,6 +3235,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3038,6 +3250,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma, return ret; } do_set_pte(vma, address, fault_page, pte, false, false); @@ -147788,7 +147834,7 @@ index c1aa0e4..a987b41 100644 unlock_page(fault_page); unlock_out: pte_unmap_unlock(pte, ptl); -@@ -3074,7 +3291,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3089,7 +3306,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma, } goto uncharge_out; } @@ -147807,7 +147853,7 @@ index c1aa0e4..a987b41 100644 mem_cgroup_commit_charge(new_page, memcg, false, false); lru_cache_add_active_or_unevictable(new_page, vma); pte_unmap_unlock(pte, ptl); -@@ -3132,6 +3360,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3147,6 +3375,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma, return ret; } do_set_pte(vma, address, fault_page, pte, true, false); @@ -147819,7 +147865,7 @@ index c1aa0e4..a987b41 100644 pte_unmap_unlock(pte, ptl); if (set_page_dirty(fault_page)) -@@ -3384,6 +3617,12 @@ static int handle_pte_fault(struct mm_struct *mm, +@@ -3398,6 +3631,12 @@ static int handle_pte_fault(struct mm_struct *mm, if (flags & FAULT_FLAG_WRITE) flush_tlb_fix_spurious_fault(vma, address); } @@ -147832,7 +147878,7 @@ index c1aa0e4..a987b41 100644 unlock: pte_unmap_unlock(pte, ptl); return 0; -@@ -3403,9 +3642,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3417,6 +3656,10 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, pmd_t *pmd; pte_t *pte; @@ -147840,6 +147886,10 @@ index c1aa0e4..a987b41 100644 + struct vm_area_struct *vma_m; +#endif + + if (!arch_vma_access_permitted(vma, flags & FAULT_FLAG_WRITE, + flags & FAULT_FLAG_INSTRUCTION, + flags & FAULT_FLAG_REMOTE)) +@@ -3425,6 +3668,34 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, if (unlikely(is_vm_hugetlb_page(vma))) return hugetlb_fault(mm, vma, address, flags); @@ -147865,7 +147915,7 @@ index c1aa0e4..a987b41 100644 + pmd_m = pmd_alloc(mm, pud_m, address_m); + if (!pmd_m) + return VM_FAULT_OOM; -+ if (!pmd_present(*pmd_m) && __pte_alloc(mm, vma_m, pmd_m, address_m)) ++ if (!pmd_present(*pmd_m) && __pte_alloc(mm, pmd_m, address_m)) + return VM_FAULT_OOM; + pax_unmap_mirror_pte(vma_m, address_m, pmd_m); + } @@ -147874,7 +147924,7 @@ index c1aa0e4..a987b41 100644 pgd = pgd_offset(mm, address); pud = pud_alloc(mm, pgd, address); if (!pud) -@@ -3539,6 +3810,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) +@@ -3557,6 +3828,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) spin_unlock(&mm->page_table_lock); return 0; } @@ -147898,7 +147948,7 @@ index c1aa0e4..a987b41 100644 #endif /* __PAGETABLE_PUD_FOLDED */ #ifndef __PAGETABLE_PMD_FOLDED -@@ -3571,6 +3859,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) +@@ -3589,6 +3877,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) spin_unlock(&mm->page_table_lock); return 0; } @@ -147931,7 +147981,7 @@ index c1aa0e4..a987b41 100644 #endif /* __PAGETABLE_PMD_FOLDED */ static int __follow_pte(struct mm_struct *mm, unsigned long address, -@@ -3680,8 +3994,8 @@ out: +@@ -3698,8 +4012,8 @@ out: return ret; } @@ -147942,7 +147992,7 @@ index c1aa0e4..a987b41 100644 { resource_size_t phys_addr; unsigned long prot = 0; -@@ -3707,8 +4021,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys); +@@ -3725,8 +4039,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys); * Access another process' address space as given in mm. If non-NULL, use the * given task for page fault accounting. */ @@ -147953,7 +148003,7 @@ index c1aa0e4..a987b41 100644 { struct vm_area_struct *vma; void *old_buf = buf; -@@ -3716,7 +4030,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, +@@ -3734,7 +4048,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, down_read(&mm->mmap_sem); /* ignore errors, just check how much was successfully transferred */ while (len) { @@ -147962,7 +148012,7 @@ index c1aa0e4..a987b41 100644 void *maddr; struct page *page = NULL; -@@ -3777,8 +4091,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, +@@ -3795,8 +4109,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, * * The caller must hold a reference on @mm. */ @@ -147973,7 +148023,7 @@ index c1aa0e4..a987b41 100644 { return __access_remote_vm(NULL, mm, addr, buf, len, write); } -@@ -3788,11 +4102,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, +@@ -3806,11 +4120,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, * Source/target buffer must be kernel space, * Do not walk the page table directly, use get_user_pages */ @@ -147989,10 +148039,10 @@ index c1aa0e4..a987b41 100644 mm = get_task_mm(tsk); if (!mm) diff --git a/mm/mempolicy.c b/mm/mempolicy.c -index 9a3f6b9..b9af66c 100644 +index 36cc01b..d862cd8 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c -@@ -731,6 +731,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, +@@ -733,6 +733,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, unsigned long vmstart; unsigned long vmend; @@ -148003,7 +148053,7 @@ index 9a3f6b9..b9af66c 100644 vma = find_vma(mm, start); if (!vma || vma->vm_start > start) return -EFAULT; -@@ -774,6 +778,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, +@@ -776,6 +780,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, err = vma_replace_policy(vma, new_pol); if (err) goto out; @@ -148020,7 +148070,7 @@ index 9a3f6b9..b9af66c 100644 } out: -@@ -1189,6 +1203,17 @@ static long do_mbind(unsigned long start, unsigned long len, +@@ -1191,6 +1205,17 @@ static long do_mbind(unsigned long start, unsigned long len, if (end < start) return -EINVAL; @@ -148038,7 +148088,7 @@ index 9a3f6b9..b9af66c 100644 if (end == start) return 0; -@@ -1414,8 +1439,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, +@@ -1416,8 +1441,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, */ tcred = __task_cred(task); if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) && @@ -148048,7 +148098,7 @@ index 9a3f6b9..b9af66c 100644 rcu_read_unlock(); err = -EPERM; goto out_put; -@@ -1446,6 +1470,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, +@@ -1448,6 +1472,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, goto out; } @@ -148065,10 +148115,10 @@ index 9a3f6b9..b9af66c 100644 capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE); diff --git a/mm/migrate.c b/mm/migrate.c -index 625741f..ed2d240 100644 +index f9dfb18..c97ca70 100644 --- a/mm/migrate.c +++ b/mm/migrate.c -@@ -1515,8 +1515,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, +@@ -1524,8 +1524,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, */ tcred = __task_cred(task); if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) && @@ -148163,10 +148213,10 @@ index 96f0010..21004da 100644 capable(CAP_IPC_LOCK)) ret = apply_mlockall_flags(flags); diff --git a/mm/mm_init.c b/mm/mm_init.c -index fdadf91..90c6bcc 100644 +index 5b72266..dc04ce5 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c -@@ -170,7 +170,7 @@ static int __meminit mm_compute_batch_notifier(struct notifier_block *self, +@@ -169,7 +169,7 @@ static int __meminit mm_compute_batch_notifier(struct notifier_block *self, return NOTIFY_OK; } @@ -148176,13 +148226,13 @@ index fdadf91..90c6bcc 100644 .priority = IPC_CALLBACK_PRI, /* use lowest priority */ }; diff --git a/mm/mmap.c b/mm/mmap.c -index 76d1ec2..85ad30a 100644 +index bd2e1a53..9299d7f 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -43,6 +43,7 @@ - #include <linux/printk.h> #include <linux/userfaultfd_k.h> #include <linux/moduleparam.h> + #include <linux/pkeys.h> +#include <linux/random.h> #include <asm/uaccess.h> @@ -148233,15 +148283,7 @@ index 76d1ec2..85ad30a 100644 } EXPORT_SYMBOL(vm_get_page_prot); -@@ -130,6 +150,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly; - int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT; - unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */ - unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */ -+unsigned long sysctl_heap_stack_gap __read_mostly = 64*1024; - /* - * Make sure vm_committed_as in one cacheline and not cacheline shared with - * other variables. It can be updated by several CPUs frequently. -@@ -287,6 +308,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) +@@ -163,6 +183,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) struct vm_area_struct *next = vma->vm_next; might_sleep(); @@ -148249,7 +148291,7 @@ index 76d1ec2..85ad30a 100644 if (vma->vm_ops && vma->vm_ops->close) vma->vm_ops->close(vma); if (vma->vm_file) -@@ -300,6 +322,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len); +@@ -176,6 +197,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len); SYSCALL_DEFINE1(brk, unsigned long, brk) { @@ -148257,7 +148299,7 @@ index 76d1ec2..85ad30a 100644 unsigned long retval; unsigned long newbrk, oldbrk; struct mm_struct *mm = current->mm; -@@ -330,7 +353,13 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) +@@ -206,7 +228,13 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) * segment grow beyond its set limit the in case where the limit is * not page aligned -Ram Gupta */ @@ -148272,7 +148314,7 @@ index 76d1ec2..85ad30a 100644 mm->end_data, mm->start_data)) goto out; -@@ -995,6 +1024,12 @@ can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, +@@ -871,6 +899,12 @@ can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx) { @@ -148285,7 +148327,7 @@ index 76d1ec2..85ad30a 100644 if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx) && is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { if (vma->vm_pgoff == vm_pgoff) -@@ -1016,6 +1051,12 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, +@@ -892,6 +926,12 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, pgoff_t vm_pgoff, struct vm_userfaultfd_ctx vm_userfaultfd_ctx) { @@ -148298,7 +148340,7 @@ index 76d1ec2..85ad30a 100644 if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx) && is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { pgoff_t vm_pglen; -@@ -1066,6 +1107,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, +@@ -942,6 +982,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, struct vm_area_struct *area, *next; int err; @@ -148312,7 +148354,7 @@ index 76d1ec2..85ad30a 100644 /* * We later require that vma->vm_flags == vm_flags, * so this tests vma->vm_flags & VM_SPECIAL, too. -@@ -1081,6 +1129,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, +@@ -957,6 +1004,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, if (next && next->vm_end == end) /* cases 6, 7, 8 */ next = next->vm_next; @@ -148328,7 +148370,7 @@ index 76d1ec2..85ad30a 100644 /* * Can it merge with the predecessor? */ -@@ -1103,9 +1160,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, +@@ -979,9 +1035,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, /* cases 1, 6 */ err = vma_adjust(prev, prev->vm_start, next->vm_end, prev->vm_pgoff, NULL); @@ -148354,7 +148396,7 @@ index 76d1ec2..85ad30a 100644 if (err) return NULL; khugepaged_enter_vma_merge(prev, vm_flags); -@@ -1120,12 +1192,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, +@@ -996,12 +1067,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, can_vma_merge_before(next, vm_flags, anon_vma, file, pgoff+pglen, vm_userfaultfd_ctx)) { @@ -148384,7 +148426,7 @@ index 76d1ec2..85ad30a 100644 if (err) return NULL; khugepaged_enter_vma_merge(area, vm_flags); -@@ -1255,6 +1342,10 @@ static inline int mlock_future_check(struct mm_struct *mm, +@@ -1131,6 +1217,10 @@ static inline int mlock_future_check(struct mm_struct *mm, locked += mm->locked_vm; lock_limit = rlimit(RLIMIT_MEMLOCK); lock_limit >>= PAGE_SHIFT; @@ -148395,7 +148437,7 @@ index 76d1ec2..85ad30a 100644 if (locked > lock_limit && !capable(CAP_IPC_LOCK)) return -EAGAIN; } -@@ -1282,7 +1373,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, +@@ -1159,7 +1249,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, * (the exception is when the underlying filesystem is noexec * mounted, in which case we dont add PROT_EXEC.) */ @@ -148404,7 +148446,7 @@ index 76d1ec2..85ad30a 100644 if (!(file && path_noexec(&file->f_path))) prot |= PROT_EXEC; -@@ -1305,7 +1396,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, +@@ -1182,7 +1272,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, /* Obtain the address to map to. we verify (or select) it and ensure * that it represents a valid section of the address space. */ @@ -148413,8 +148455,8 @@ index 76d1ec2..85ad30a 100644 if (offset_in_page(addr)) return addr; -@@ -1316,6 +1407,43 @@ unsigned long do_mmap(struct file *file, unsigned long addr, - vm_flags |= calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) | +@@ -1199,6 +1289,43 @@ unsigned long do_mmap(struct file *file, unsigned long addr, + vm_flags |= calc_vm_prot_bits(prot, pkey) | calc_vm_flag_bits(flags) | mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC; +#ifdef CONFIG_PAX_MPROTECT @@ -148457,7 +148499,7 @@ index 76d1ec2..85ad30a 100644 if (flags & MAP_LOCKED) if (!can_do_mlock()) return -EPERM; -@@ -1403,6 +1531,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr, +@@ -1286,6 +1413,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr, vm_flags |= VM_NORESERVE; } @@ -148467,7 +148509,7 @@ index 76d1ec2..85ad30a 100644 addr = mmap_region(file, addr, len, vm_flags, pgoff); if (!IS_ERR_VALUE(addr) && ((vm_flags & VM_LOCKED) || -@@ -1496,7 +1627,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma) +@@ -1379,7 +1509,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma) const struct vm_operations_struct *vm_ops = vma->vm_ops; /* If it was private or non-writable, the write bit is already clear */ @@ -148476,7 +148518,7 @@ index 76d1ec2..85ad30a 100644 return 0; /* The backer wishes to know when pages are first written to? */ -@@ -1547,7 +1678,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1430,7 +1560,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr, struct rb_node **rb_link, *rb_parent; unsigned long charged = 0; @@ -148499,7 +148541,7 @@ index 76d1ec2..85ad30a 100644 if (!may_expand_vm(mm, vm_flags, len >> PAGE_SHIFT)) { unsigned long nr_pages; -@@ -1567,6 +1713,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1450,6 +1595,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr, &rb_parent)) { if (do_munmap(mm, addr, len)) return -ENOMEM; @@ -148507,7 +148549,7 @@ index 76d1ec2..85ad30a 100644 } /* -@@ -1598,6 +1745,16 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1481,6 +1627,16 @@ unsigned long mmap_region(struct file *file, unsigned long addr, goto unacct_error; } @@ -148524,7 +148566,7 @@ index 76d1ec2..85ad30a 100644 vma->vm_mm = mm; vma->vm_start = addr; vma->vm_end = addr + len; -@@ -1628,6 +1785,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1511,6 +1667,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr, if (error) goto unmap_and_free_vma; @@ -148538,7 +148580,7 @@ index 76d1ec2..85ad30a 100644 /* Can addr have changed?? * * Answer: Yes, several device drivers can do it in their -@@ -1646,6 +1810,12 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1529,6 +1692,12 @@ unsigned long mmap_region(struct file *file, unsigned long addr, } vma_link(mm, vma, prev, rb_link, rb_parent); @@ -148551,7 +148593,7 @@ index 76d1ec2..85ad30a 100644 /* Once vma denies write, undo our temporary denial count */ if (file) { if (vm_flags & VM_SHARED) -@@ -1658,6 +1828,7 @@ out: +@@ -1541,6 +1710,7 @@ out: perf_event_mmap(vma); vm_stat_account(mm, vm_flags, len >> PAGE_SHIFT); @@ -148559,7 +148601,7 @@ index 76d1ec2..85ad30a 100644 if (vm_flags & VM_LOCKED) { if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) || vma == get_gate_vma(current->mm))) -@@ -1695,6 +1866,12 @@ allow_write_and_free_vma: +@@ -1578,6 +1748,12 @@ allow_write_and_free_vma: if (vm_flags & VM_DENYWRITE) allow_write_access(file); free_vma: @@ -148572,7 +148614,7 @@ index 76d1ec2..85ad30a 100644 kmem_cache_free(vm_area_cachep, vma); unacct_error: if (charged) -@@ -1702,7 +1879,63 @@ unacct_error: +@@ -1585,7 +1761,63 @@ unacct_error: return error; } @@ -148637,7 +148679,7 @@ index 76d1ec2..85ad30a 100644 { /* * We implement the search by looking for an rbtree node that -@@ -1750,11 +1983,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info) +@@ -1633,11 +1865,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info) } } @@ -148668,7 +148710,7 @@ index 76d1ec2..85ad30a 100644 if (gap_end >= low_limit && gap_end - gap_start >= length) goto found; -@@ -1804,7 +2055,7 @@ found: +@@ -1687,7 +1937,7 @@ found: return gap_start; } @@ -148677,7 +148719,7 @@ index 76d1ec2..85ad30a 100644 { struct mm_struct *mm = current->mm; struct vm_area_struct *vma; -@@ -1858,6 +2109,24 @@ check_current: +@@ -1741,6 +1991,24 @@ check_current: gap_end = vma->vm_start; if (gap_end < low_limit) return -ENOMEM; @@ -148702,7 +148744,7 @@ index 76d1ec2..85ad30a 100644 if (gap_start <= high_limit && gap_end - gap_start >= length) goto found; -@@ -1921,6 +2190,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1804,6 +2072,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, struct mm_struct *mm = current->mm; struct vm_area_struct *vma; struct vm_unmapped_area_info info; @@ -148710,7 +148752,7 @@ index 76d1ec2..85ad30a 100644 if (len > TASK_SIZE - mmap_min_addr) return -ENOMEM; -@@ -1928,11 +2198,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1811,11 +2080,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, if (flags & MAP_FIXED) return addr; @@ -148727,7 +148769,7 @@ index 76d1ec2..85ad30a 100644 return addr; } -@@ -1941,6 +2215,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1824,6 +2097,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, info.low_limit = mm->mmap_base; info.high_limit = TASK_SIZE; info.align_mask = 0; @@ -148735,7 +148777,7 @@ index 76d1ec2..85ad30a 100644 return vm_unmapped_area(&info); } #endif -@@ -1959,6 +2234,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1842,6 +2116,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, struct mm_struct *mm = current->mm; unsigned long addr = addr0; struct vm_unmapped_area_info info; @@ -148743,7 +148785,7 @@ index 76d1ec2..85ad30a 100644 /* requested length too big for entire address space */ if (len > TASK_SIZE - mmap_min_addr) -@@ -1967,12 +2243,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1850,12 +2125,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, if (flags & MAP_FIXED) return addr; @@ -148761,7 +148803,7 @@ index 76d1ec2..85ad30a 100644 return addr; } -@@ -1981,6 +2261,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1864,6 +2143,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, info.low_limit = max(PAGE_SIZE, mmap_min_addr); info.high_limit = mm->mmap_base; info.align_mask = 0; @@ -148769,7 +148811,7 @@ index 76d1ec2..85ad30a 100644 addr = vm_unmapped_area(&info); /* -@@ -1993,6 +2274,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1876,6 +2156,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, VM_BUG_ON(addr != -ENOMEM); info.flags = 0; info.low_limit = TASK_UNMAPPED_BASE; @@ -148782,7 +148824,7 @@ index 76d1ec2..85ad30a 100644 info.high_limit = TASK_SIZE; addr = vm_unmapped_area(&info); } -@@ -2092,6 +2379,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, +@@ -1975,6 +2261,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, return vma; } @@ -148811,7 +148853,7 @@ index 76d1ec2..85ad30a 100644 /* * Verify that the stack growth is acceptable and * update accounting. This is shared with both the -@@ -2109,8 +2418,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -1992,8 +2300,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns /* Stack limit test */ actual_size = size; @@ -148821,7 +148863,7 @@ index 76d1ec2..85ad30a 100644 if (actual_size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur)) return -ENOMEM; -@@ -2121,6 +2429,10 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2004,6 +2311,10 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns locked = mm->locked_vm + grow; limit = READ_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur); limit >>= PAGE_SHIFT; @@ -148832,7 +148874,7 @@ index 76d1ec2..85ad30a 100644 if (locked > limit && !capable(CAP_IPC_LOCK)) return -ENOMEM; } -@@ -2146,17 +2458,21 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2029,17 +2340,21 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns * PA-RISC uses this for its stack; IA64 for its Register Backing Store. * vma is the last one with address > vma->vm_end. Have to extend vma. */ @@ -148856,7 +148898,7 @@ index 76d1ec2..85ad30a 100644 else return -ENOMEM; -@@ -2164,15 +2480,24 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) +@@ -2047,15 +2362,24 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) if (unlikely(anon_vma_prepare(vma))) return -ENOMEM; @@ -148883,7 +148925,7 @@ index 76d1ec2..85ad30a 100644 unsigned long size, grow; size = address - vma->vm_start; -@@ -2210,6 +2535,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) +@@ -2093,6 +2417,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) } } } @@ -148892,7 +148934,7 @@ index 76d1ec2..85ad30a 100644 anon_vma_unlock_write(vma->anon_vma); khugepaged_enter_vma_merge(vma, vma->vm_flags); validate_mm(mm); -@@ -2225,6 +2552,8 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2108,6 +2434,8 @@ int expand_downwards(struct vm_area_struct *vma, { struct mm_struct *mm = vma->vm_mm; int error; @@ -148901,7 +148943,7 @@ index 76d1ec2..85ad30a 100644 address &= PAGE_MASK; error = security_mmap_addr(address); -@@ -2235,6 +2564,15 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2118,6 +2446,15 @@ int expand_downwards(struct vm_area_struct *vma, if (unlikely(anon_vma_prepare(vma))) return -ENOMEM; @@ -148917,7 +148959,7 @@ index 76d1ec2..85ad30a 100644 /* * vma->vm_start/vm_end cannot change under us because the caller * is required to hold the mmap_sem in read mode. We need the -@@ -2243,9 +2581,17 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2126,9 +2463,17 @@ int expand_downwards(struct vm_area_struct *vma, anon_vma_lock_write(vma->anon_vma); /* Somebody else might have raced and expanded it already */ @@ -148936,7 +148978,7 @@ index 76d1ec2..85ad30a 100644 size = vma->vm_end - address; grow = (vma->vm_start - address) >> PAGE_SHIFT; -@@ -2273,13 +2619,27 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2156,13 +2501,27 @@ int expand_downwards(struct vm_area_struct *vma, vma->vm_pgoff -= grow; anon_vma_interval_tree_post_update_vma(vma); vma_gap_update(vma); @@ -148964,7 +149006,7 @@ index 76d1ec2..85ad30a 100644 khugepaged_enter_vma_merge(vma, vma->vm_flags); validate_mm(mm); return error; -@@ -2379,6 +2739,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2262,6 +2621,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) do { long nrpages = vma_pages(vma); @@ -148978,7 +149020,7 @@ index 76d1ec2..85ad30a 100644 if (vma->vm_flags & VM_ACCOUNT) nr_accounted += nrpages; vm_stat_account(mm, vma->vm_flags, -nrpages); -@@ -2423,6 +2790,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2306,6 +2672,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, insertion_point = (prev ? &prev->vm_next : &mm->mmap); vma->vm_prev = NULL; do { @@ -148995,7 +149037,7 @@ index 76d1ec2..85ad30a 100644 vma_rb_erase(vma, &mm->mm_rb); mm->map_count--; tail_vma = vma; -@@ -2450,14 +2827,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2333,14 +2709,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *new; int err; @@ -149029,7 +149071,7 @@ index 76d1ec2..85ad30a 100644 /* most fields are the same, copy all, and then fixup */ *new = *vma; -@@ -2470,6 +2866,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2353,6 +2748,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT); } @@ -149052,7 +149094,7 @@ index 76d1ec2..85ad30a 100644 err = vma_dup_policy(vma, new); if (err) goto out_free_vma; -@@ -2490,6 +2902,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2373,6 +2784,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, else err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new); @@ -149091,7 +149133,7 @@ index 76d1ec2..85ad30a 100644 /* Success. */ if (!err) return 0; -@@ -2499,10 +2943,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2382,10 +2825,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, new->vm_ops->close(new); if (new->vm_file) fput(new->vm_file); @@ -149111,7 +149153,7 @@ index 76d1ec2..85ad30a 100644 kmem_cache_free(vm_area_cachep, new); return err; } -@@ -2514,6 +2966,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2397,6 +2848,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, int new_below) { @@ -149127,7 +149169,7 @@ index 76d1ec2..85ad30a 100644 if (mm->map_count >= sysctl_max_map_count) return -ENOMEM; -@@ -2525,11 +2986,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2408,11 +2868,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, * work. This now handles partial unmappings. * Jeremy Fitzhardinge <jeremy@goop.org> */ @@ -149158,7 +149200,7 @@ index 76d1ec2..85ad30a 100644 if ((offset_in_page(start)) || start > TASK_SIZE || len > TASK_SIZE-start) return -EINVAL; -@@ -2607,6 +3087,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) +@@ -2490,6 +2969,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) /* Fix up all other VM information */ remove_vma_list(mm, vma); @@ -149167,7 +149209,7 @@ index 76d1ec2..85ad30a 100644 return 0; } -@@ -2615,6 +3097,13 @@ int vm_munmap(unsigned long start, size_t len) +@@ -2498,6 +2979,13 @@ int vm_munmap(unsigned long start, size_t len) int ret; struct mm_struct *mm = current->mm; @@ -149181,7 +149223,7 @@ index 76d1ec2..85ad30a 100644 down_write(&mm->mmap_sem); ret = do_munmap(mm, start, len); up_write(&mm->mmap_sem); -@@ -2661,6 +3150,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, +@@ -2543,6 +3031,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, down_write(&mm->mmap_sem); vma = find_vma(mm, start); @@ -149193,7 +149235,7 @@ index 76d1ec2..85ad30a 100644 if (!vma || !(vma->vm_flags & VM_SHARED)) goto out; -@@ -2721,16 +3215,6 @@ out: +@@ -2603,16 +3096,6 @@ out: return ret; } @@ -149210,7 +149252,7 @@ index 76d1ec2..85ad30a 100644 /* * this is really a simplified "do_mmap". it only handles * anonymous maps. eventually we may be able to do some -@@ -2744,6 +3228,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2626,6 +3109,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) struct rb_node **rb_link, *rb_parent; pgoff_t pgoff = addr >> PAGE_SHIFT; int error; @@ -149218,7 +149260,7 @@ index 76d1ec2..85ad30a 100644 len = PAGE_ALIGN(len); if (!len) -@@ -2751,10 +3236,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2633,10 +3117,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags; @@ -149243,7 +149285,7 @@ index 76d1ec2..85ad30a 100644 error = mlock_future_check(mm, mm->def_flags, len); if (error) return error; -@@ -2772,16 +3271,17 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2654,16 +3152,17 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) &rb_parent)) { if (do_munmap(mm, addr, len)) return -ENOMEM; @@ -149263,7 +149305,7 @@ index 76d1ec2..85ad30a 100644 return -ENOMEM; /* Can we just expand an old private anonymous mapping? */ -@@ -2795,7 +3295,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2677,7 +3176,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) */ vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); if (!vma) { @@ -149272,7 +149314,7 @@ index 76d1ec2..85ad30a 100644 return -ENOMEM; } -@@ -2809,11 +3309,12 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2691,11 +3190,12 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) vma_link(mm, vma, prev, rb_link, rb_parent); out: perf_event_mmap(vma); @@ -149288,7 +149330,7 @@ index 76d1ec2..85ad30a 100644 return addr; } -@@ -2875,6 +3376,7 @@ void exit_mmap(struct mm_struct *mm) +@@ -2757,6 +3257,7 @@ void exit_mmap(struct mm_struct *mm) while (vma) { if (vma->vm_flags & VM_ACCOUNT) nr_accounted += vma_pages(vma); @@ -149296,7 +149338,7 @@ index 76d1ec2..85ad30a 100644 vma = remove_vma(vma); } vm_unacct_memory(nr_accounted); -@@ -2889,6 +3391,10 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2771,6 +3272,10 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) struct vm_area_struct *prev; struct rb_node **rb_link, *rb_parent; @@ -149307,7 +149349,7 @@ index 76d1ec2..85ad30a 100644 if (find_vma_links(mm, vma->vm_start, vma->vm_end, &prev, &rb_link, &rb_parent)) return -ENOMEM; -@@ -2896,6 +3402,9 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2778,6 +3283,9 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) security_vm_enough_memory_mm(mm, vma_pages(vma))) return -ENOMEM; @@ -149317,7 +149359,7 @@ index 76d1ec2..85ad30a 100644 /* * The vm_pgoff of a purely anonymous vma should be irrelevant * until its first write fault, when page's anon_vma and index -@@ -2913,7 +3422,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2795,7 +3303,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) vma->vm_pgoff = vma->vm_start >> PAGE_SHIFT; } @@ -149339,7 +149381,7 @@ index 76d1ec2..85ad30a 100644 return 0; } -@@ -2932,6 +3455,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, +@@ -2814,6 +3336,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, struct rb_node **rb_link, *rb_parent; bool faulted_in_anon_vma = true; @@ -149348,7 +149390,7 @@ index 76d1ec2..85ad30a 100644 /* * If anonymous vma has not yet been faulted, update new pgoff * to match new location, to increase its chance of merging. -@@ -2998,25 +3523,69 @@ out: +@@ -2880,24 +3404,67 @@ out: return NULL; } @@ -149402,8 +149444,7 @@ index 76d1ec2..85ad30a 100644 - if (is_data_mapping(flags) && - mm->data_vm + npages > rlimit(RLIMIT_DATA) >> PAGE_SHIFT) { - if (ignore_rlimit_data) -- pr_warn_once("%s (%d): VmData %lu exceed data ulimit " -- "%lu. Will be forbidden soon.\n", +- pr_warn_once("%s (%d): VmData %lu exceed data ulimit %lu. Will be forbidden soon.\n", - current->comm, current->pid, - (mm->data_vm + npages) << PAGE_SHIFT, - rlimit(RLIMIT_DATA)); @@ -149413,11 +149454,9 @@ index 76d1ec2..85ad30a 100644 else - return false; + gr_learn_resource(current, RLIMIT_DATA, (mm->data_vm + npages) << PAGE_SHIFT, 1); -+ + if (mm->data_vm + npages > rlimit(RLIMIT_DATA) >> PAGE_SHIFT) { + if (ignore_rlimit_data) -+ pr_warn_once("%s (%d): VmData %lu exceed data ulimit " -+ "%lu. Will be forbidden soon.\n", ++ pr_warn_once("%s (%d): VmData %lu exceed data ulimit %lu. Will be forbidden soon.\n", + current->comm, current->pid, + (mm->data_vm + npages) << PAGE_SHIFT, + rlimit(RLIMIT_DATA)); @@ -149427,7 +149466,7 @@ index 76d1ec2..85ad30a 100644 } return true; -@@ -3024,6 +3593,11 @@ bool may_expand_vm(struct mm_struct *mm, vm_flags_t flags, unsigned long npages) +@@ -2905,6 +3472,11 @@ bool may_expand_vm(struct mm_struct *mm, vm_flags_t flags, unsigned long npages) void vm_stat_account(struct mm_struct *mm, vm_flags_t flags, long npages) { @@ -149439,7 +149478,7 @@ index 76d1ec2..85ad30a 100644 mm->total_vm += npages; if (is_exec_mapping(flags)) -@@ -3103,6 +3677,22 @@ static struct vm_area_struct *__install_special_mapping( +@@ -2989,6 +3561,22 @@ static struct vm_area_struct *__install_special_mapping( vma->vm_start = addr; vma->vm_end = addr + len; @@ -149463,13 +149502,13 @@ index 76d1ec2..85ad30a 100644 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); diff --git a/mm/mprotect.c b/mm/mprotect.c -index f7cb3d4..7db167a 100644 +index b650c54..a3f3ca4 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c -@@ -24,10 +24,18 @@ - #include <linux/migrate.h> +@@ -25,10 +25,18 @@ #include <linux/perf_event.h> #include <linux/ksm.h> + #include <linux/pkeys.h> +#include <linux/sched/sysctl.h> + +#ifdef CONFIG_PAX_MPROTECT @@ -149485,7 +149524,7 @@ index f7cb3d4..7db167a 100644 #include "internal.h" -@@ -257,6 +265,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start, +@@ -258,6 +266,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start, return pages; } @@ -149534,7 +149573,7 @@ index f7cb3d4..7db167a 100644 int mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, unsigned long start, unsigned long end, unsigned long newflags) -@@ -269,11 +319,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, +@@ -270,11 +320,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, int error; int dirty_accountable = 0; @@ -149564,7 +149603,7 @@ index f7cb3d4..7db167a 100644 /* * If we make a private mapping writable we increase our commit; * but (without finer accounting) cannot reduce our commit if we -@@ -294,6 +362,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, +@@ -295,6 +363,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, } } @@ -149607,7 +149646,7 @@ index f7cb3d4..7db167a 100644 /* * First try to merge with previous and/or next vma. */ -@@ -325,7 +429,19 @@ success: +@@ -326,7 +430,19 @@ success: * vm_flags and vm_page_prot are protected by the mmap_sem * held in write mode. */ @@ -149627,7 +149666,16 @@ index f7cb3d4..7db167a 100644 dirty_accountable = vma_wants_writenotify(vma); vma_set_page_prot(vma); -@@ -370,6 +486,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -360,7 +476,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, + int error = -EINVAL; + const int grows = prot & (PROT_GROWSDOWN|PROT_GROWSUP); + const bool rier = (current->personality & READ_IMPLIES_EXEC) && +- (prot & PROT_READ); ++ (prot & (PROT_READ | PROT_WRITE)); + + prot &= ~(PROT_GROWSDOWN|PROT_GROWSUP); + if (grows == (PROT_GROWSDOWN|PROT_GROWSUP)) /* can't be both */ +@@ -374,6 +490,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, end = start + len; if (end <= start) return -ENOMEM; @@ -149645,28 +149693,19 @@ index f7cb3d4..7db167a 100644 if (!arch_validate_prot(prot)) return -EINVAL; -@@ -377,7 +504,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, - /* - * Does the application expect PROT_READ to imply PROT_EXEC: - */ -- if ((prot & PROT_READ) && (current->personality & READ_IMPLIES_EXEC)) -+ if ((prot & (PROT_READ | PROT_WRITE)) && (current->personality & READ_IMPLIES_EXEC)) - prot |= PROT_EXEC; - - vm_flags = calc_vm_prot_bits(prot); -@@ -409,6 +536,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -406,6 +533,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, if (start > vma->vm_start) prev = vma; +#ifdef CONFIG_PAX_MPROTECT + if (current->mm->binfmt && current->mm->binfmt->handle_mprotect) -+ current->mm->binfmt->handle_mprotect(vma, vm_flags); ++ current->mm->binfmt->handle_mprotect(vma, calc_vm_prot_bits(prot, 0)); +#endif + for (nstart = start ; ; ) { unsigned long newflags; - -@@ -419,6 +551,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, + int pkey = arch_override_mprotect_pkey(vma, prot, -1); +@@ -421,6 +553,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, /* newflags >> 4 shift VM_MAY% in place of VM_% */ if ((newflags & ~(newflags >> 4)) & (VM_READ | VM_WRITE | VM_EXEC)) { @@ -149681,21 +149720,21 @@ index f7cb3d4..7db167a 100644 error = -EACCES; goto out; } -@@ -433,6 +573,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -435,6 +575,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, error = mprotect_fixup(vma, &prev, nstart, tmp, newflags); if (error) goto out; + -+ track_exec_limit(current->mm, nstart, tmp, vm_flags); ++ track_exec_limit(current->mm, nstart, tmp, newflags); + nstart = tmp; if (nstart < prev->vm_end) diff --git a/mm/mremap.c b/mm/mremap.c -index 8eeba02..311391a 100644 +index 3fa0a467..a4eab87 100644 --- a/mm/mremap.c +++ b/mm/mremap.c -@@ -143,6 +143,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd, +@@ -142,6 +142,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd, continue; pte = ptep_get_and_clear(mm, old_addr, old_pte); pte = move_pte(pte, new_vma->vm_page_prot, old_addr, new_addr); @@ -149708,7 +149747,7 @@ index 8eeba02..311391a 100644 pte = move_soft_dirty_pte(pte); set_pte_at(mm, new_addr, new_pte, pte); } -@@ -359,6 +365,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr, +@@ -357,6 +363,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr, if (is_vm_hugetlb_page(vma)) return ERR_PTR(-EINVAL); @@ -149720,7 +149759,7 @@ index 8eeba02..311391a 100644 /* We can't remap across vm area boundaries */ if (old_len > vma->vm_end - addr) return ERR_PTR(-EFAULT); -@@ -406,11 +417,19 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len, +@@ -404,11 +415,19 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len, unsigned long ret = -EINVAL; unsigned long charged = 0; unsigned long map_flags; @@ -149741,7 +149780,7 @@ index 8eeba02..311391a 100644 goto out; /* Ensure the old/new locations do not overlap */ -@@ -483,6 +502,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -481,6 +500,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, unsigned long ret = -EINVAL; unsigned long charged = 0; bool locked = false; @@ -149749,7 +149788,7 @@ index 8eeba02..311391a 100644 if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE)) return ret; -@@ -504,6 +524,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -502,6 +522,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, if (!new_len) return ret; @@ -149767,7 +149806,7 @@ index 8eeba02..311391a 100644 down_write(¤t->mm->mmap_sem); if (flags & MREMAP_FIXED) { -@@ -554,6 +585,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -552,6 +583,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, new_addr = addr; } ret = addr; @@ -149775,7 +149814,7 @@ index 8eeba02..311391a 100644 goto out; } } -@@ -577,7 +609,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -575,7 +607,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, goto out; } @@ -149789,18 +149828,18 @@ index 8eeba02..311391a 100644 out: if (offset_in_page(ret)) { diff --git a/mm/nommu.c b/mm/nommu.c -index fbf6f0f1..1c2b246 100644 +index c8bd59a..82b24ab 100644 --- a/mm/nommu.c +++ b/mm/nommu.c -@@ -56,7 +56,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT; +@@ -48,7 +48,6 @@ unsigned long max_mapnr; + EXPORT_SYMBOL(max_mapnr); + unsigned long highest_memmap_pfn; int sysctl_nr_trim_pages = CONFIG_NOMMU_INITIAL_TRIM_EXCESS; - unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */ - unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */ -int heap_stack_gap = 0; atomic_long_t mmap_pages_allocated; -@@ -863,15 +862,6 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) +@@ -836,15 +835,6 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) EXPORT_SYMBOL(find_vma); /* @@ -149816,7 +149855,7 @@ index fbf6f0f1..1c2b246 100644 * expand a stack to a given address * - not supported under NOMMU conditions */ -@@ -1536,6 +1526,7 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -1509,6 +1499,7 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, /* most fields are the same, copy all, and then fixup */ *new = *vma; @@ -149824,7 +149863,7 @@ index fbf6f0f1..1c2b246 100644 *region = *vma->vm_region; new->vm_region = region; -@@ -1936,8 +1927,8 @@ void filemap_map_pages(struct vm_area_struct *vma, struct vm_fault *vmf) +@@ -1815,8 +1806,8 @@ void filemap_map_pages(struct vm_area_struct *vma, struct vm_fault *vmf) } EXPORT_SYMBOL(filemap_map_pages); @@ -149835,7 +149874,7 @@ index fbf6f0f1..1c2b246 100644 { struct vm_area_struct *vma; -@@ -1978,8 +1969,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, +@@ -1857,8 +1848,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, * * The caller must hold a reference on @mm. */ @@ -149846,7 +149885,7 @@ index fbf6f0f1..1c2b246 100644 { return __access_remote_vm(NULL, mm, addr, buf, len, write); } -@@ -1988,7 +1979,7 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, +@@ -1867,7 +1858,7 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, * Access another process' address space. * - source/target buffer must be kernel space */ @@ -149855,23 +149894,8 @@ index fbf6f0f1..1c2b246 100644 { struct mm_struct *mm; -diff --git a/mm/oom_kill.c b/mm/oom_kill.c -index dc490c0..5087a19 100644 ---- a/mm/oom_kill.c -+++ b/mm/oom_kill.c -@@ -614,6 +614,10 @@ void oom_kill_process(struct oom_control *oc, struct task_struct *p, - if (p->signal->oom_score_adj == OOM_SCORE_ADJ_MIN) - continue; - -+ task_lock(p); /* Protect ->comm from prctl() */ -+ pr_err("Kill process %d (%s) sharing same memory\n", -+ task_pid_nr(p), p->comm); -+ task_unlock(p); - do_send_sig_info(SIGKILL, SEND_SIG_FORCED, p, true); - } - rcu_read_unlock(); diff --git a/mm/page-writeback.c b/mm/page-writeback.c -index 62bbf35..04d12eb 100644 +index bc5149d..3f523f3 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -870,7 +870,7 @@ static long long pos_ratio_polynom(unsigned long setpoint, @@ -149884,7 +149908,7 @@ index 62bbf35..04d12eb 100644 struct bdi_writeback *wb = dtc->wb; unsigned long write_bw = wb->avg_write_bandwidth; diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 1d11790..6d640cb 100644 +index 898fe3f..78ad9e4 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -63,6 +63,7 @@ @@ -149895,7 +149919,7 @@ index 1d11790..6d640cb 100644 #include <asm/sections.h> #include <asm/tlbflush.h> -@@ -561,7 +562,7 @@ static inline void clear_page_guard(struct zone *zone, struct page *page, +@@ -593,7 +594,7 @@ static inline void clear_page_guard(struct zone *zone, struct page *page, __mod_zone_freepage_state(zone, (1 << order), migratetype); } #else @@ -149904,7 +149928,7 @@ index 1d11790..6d640cb 100644 static inline void set_page_guard(struct zone *zone, struct page *page, unsigned int order, int migratetype) {} static inline void clear_page_guard(struct zone *zone, struct page *page, -@@ -995,6 +996,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order) +@@ -1027,6 +1028,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order) bool compound = PageCompound(page); int i, bad = 0; @@ -149915,7 +149939,7 @@ index 1d11790..6d640cb 100644 VM_BUG_ON_PAGE(PageTail(page), page); VM_BUG_ON_PAGE(compound && compound_order(page) != order, page); -@@ -1021,6 +1026,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order) +@@ -1053,6 +1058,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order) debug_check_no_obj_freed(page_address(page), PAGE_SIZE << order); } @@ -149926,9 +149950,9 @@ index 1d11790..6d640cb 100644 +#endif + arch_free_page(page, order); + kernel_poison_pages(page, 1 << order, 0); kernel_map_pages(page, 1 << order, 0); - -@@ -1043,6 +1054,20 @@ static void __free_pages_ok(struct page *page, unsigned int order) +@@ -1076,6 +1087,20 @@ static void __free_pages_ok(struct page *page, unsigned int order) local_irq_restore(flags); } @@ -149949,7 +149973,7 @@ index 1d11790..6d640cb 100644 static void __init __free_pages_boot_core(struct page *page, unsigned long pfn, unsigned int order) { -@@ -1059,6 +1084,21 @@ static void __init __free_pages_boot_core(struct page *page, +@@ -1092,6 +1117,21 @@ static void __init __free_pages_boot_core(struct page *page, __ClearPageReserved(p); set_page_count(p, 0); @@ -149971,7 +149995,7 @@ index 1d11790..6d640cb 100644 page_zone(page)->managed_pages += nr_pages; set_page_refcounted(page); __free_pages(page, order); -@@ -1115,7 +1155,6 @@ static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node, +@@ -1148,7 +1188,6 @@ static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node, } #endif @@ -149979,19 +150003,31 @@ index 1d11790..6d640cb 100644 void __init __free_pages_bootmem(struct page *page, unsigned long pfn, unsigned int order) { -@@ -1419,9 +1458,11 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags, - kernel_map_pages(page, 1 << order, 1); - kasan_alloc_pages(page, order); +@@ -1512,8 +1551,8 @@ static inline int check_new_page(struct page *page) + static inline bool free_pages_prezeroed(bool poisoned) + { +- return IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) && +- page_poisoning_enabled() && poisoned; ++ return IS_ENABLED(CONFIG_PAX_MEMORY_SANITIZE) || ++ (IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) && page_poisoning_enabled() && poisoned); + } + + static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags, +@@ -1526,8 +1565,12 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags, + struct page *p = page + i; + if (unlikely(check_new_page(p))) + return 1; ++ +#ifndef CONFIG_PAX_MEMORY_SANITIZE - if (gfp_flags & __GFP_ZERO) - for (i = 0; i < (1 << order); i++) - clear_highpage(page + i); + if (poisoned) + poisoned &= page_is_poisoned(p); +#endif ++ + } - if (order && (gfp_flags & __GFP_COMP)) - prep_compound_page(page, order); -@@ -1955,8 +1996,9 @@ static void drain_pages(unsigned int cpu) + set_page_private(page, 0); +@@ -2074,8 +2117,9 @@ static void drain_pages(unsigned int cpu) * The CPU has to be pinned. When zone parameter is non-NULL, spill just * the single zone's pages. */ @@ -150002,7 +150038,7 @@ index 1d11790..6d640cb 100644 int cpu = smp_processor_id(); if (zone) -@@ -2016,8 +2058,7 @@ void drain_all_pages(struct zone *zone) +@@ -2135,8 +2179,7 @@ void drain_all_pages(struct zone *zone) else cpumask_clear_cpu(cpu, &cpus_with_pcps); } @@ -150012,7 +150048,7 @@ index 1d11790..6d640cb 100644 } #ifdef CONFIG_HIBERNATION -@@ -2289,7 +2330,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, +@@ -2400,7 +2443,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, } __mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order)); @@ -150021,7 +150057,7 @@ index 1d11790..6d640cb 100644 !test_bit(ZONE_FAIR_DEPLETED, &zone->flags)) set_bit(ZONE_FAIR_DEPLETED, &zone->flags); -@@ -2506,7 +2547,7 @@ static void reset_alloc_batches(struct zone *preferred_zone) +@@ -2617,7 +2660,7 @@ static void reset_alloc_batches(struct zone *preferred_zone) do { mod_zone_page_state(zone, NR_ALLOC_BATCH, high_wmark_pages(zone) - low_wmark_pages(zone) - @@ -150030,7 +150066,7 @@ index 1d11790..6d640cb 100644 clear_bit(ZONE_FAIR_DEPLETED, &zone->flags); } while (zone++ != preferred_zone); } -@@ -6100,7 +6141,7 @@ static void __setup_per_zone_wmarks(void) +@@ -6371,7 +6414,7 @@ static void __setup_per_zone_wmarks(void) __mod_zone_page_state(zone, NR_ALLOC_BATCH, high_wmark_pages(zone) - low_wmark_pages(zone) - @@ -150040,10 +150076,10 @@ index 1d11790..6d640cb 100644 spin_unlock_irqrestore(&zone->lock, flags); } diff --git a/mm/percpu.c b/mm/percpu.c -index 998607a..389e6ba 100644 +index 0c59684..5176325 100644 --- a/mm/percpu.c +++ b/mm/percpu.c -@@ -110,7 +110,7 @@ struct pcpu_chunk { +@@ -112,7 +112,7 @@ struct pcpu_chunk { int map_used; /* # of map entries used before the sentry */ int map_alloc; /* # of map entries allocated */ int *map; /* allocation map */ @@ -150052,7 +150088,7 @@ index 998607a..389e6ba 100644 void *data; /* chunk data */ int first_free; /* no free below this */ -@@ -131,7 +131,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly; +@@ -133,7 +133,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly; static unsigned int pcpu_high_unit_cpu __read_mostly; /* the address of the first chunk which starts with the kernel static area */ @@ -150061,7 +150097,7 @@ index 998607a..389e6ba 100644 EXPORT_SYMBOL_GPL(pcpu_base_addr); static const int *pcpu_unit_map __read_mostly; /* cpu -> unit */ -@@ -160,10 +160,13 @@ static struct pcpu_chunk *pcpu_reserved_chunk; +@@ -162,10 +162,13 @@ static struct pcpu_chunk *pcpu_reserved_chunk; static int pcpu_reserved_chunk_limit; static DEFINE_SPINLOCK(pcpu_lock); /* all internal data structures */ @@ -150076,7 +150112,7 @@ index 998607a..389e6ba 100644 /* * The number of empty populated pages, protected by pcpu_lock. The * reserved chunk doesn't contribute to the count. -@@ -393,13 +396,19 @@ static int pcpu_need_to_extend(struct pcpu_chunk *chunk, bool is_atomic) +@@ -395,13 +398,19 @@ static int pcpu_need_to_extend(struct pcpu_chunk *chunk, bool is_atomic) { int margin, new_alloc; @@ -150099,7 +150135,7 @@ index 998607a..389e6ba 100644 } else { margin = PCPU_ATOMIC_MAP_MARGIN_HIGH; } -@@ -433,6 +442,8 @@ static int pcpu_extend_area_map(struct pcpu_chunk *chunk, int new_alloc) +@@ -435,6 +444,8 @@ static int pcpu_extend_area_map(struct pcpu_chunk *chunk, int new_alloc) size_t old_size = 0, new_size = new_alloc * sizeof(new[0]); unsigned long flags; @@ -150108,7 +150144,7 @@ index 998607a..389e6ba 100644 new = pcpu_mem_zalloc(new_size); if (!new) return -ENOMEM; -@@ -465,20 +476,6 @@ out_unlock: +@@ -467,20 +478,6 @@ out_unlock: return 0; } @@ -150129,7 +150165,7 @@ index 998607a..389e6ba 100644 /** * pcpu_fit_in_area - try to fit the requested allocation in a candidate area * @chunk: chunk the candidate area belongs to -@@ -738,7 +735,7 @@ static struct pcpu_chunk *pcpu_alloc_chunk(void) +@@ -740,7 +737,7 @@ static struct pcpu_chunk *pcpu_alloc_chunk(void) chunk->map_used = 1; INIT_LIST_HEAD(&chunk->list); @@ -150138,7 +150174,7 @@ index 998607a..389e6ba 100644 chunk->free_size = pcpu_unit_size; chunk->contig_hint = pcpu_unit_size; -@@ -893,6 +890,9 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, +@@ -895,6 +892,9 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, return NULL; } @@ -150148,7 +150184,7 @@ index 998607a..389e6ba 100644 spin_lock_irqsave(&pcpu_lock, flags); /* serve reserved allocations from the reserved chunk if available */ -@@ -965,12 +965,9 @@ restart: +@@ -967,12 +967,9 @@ restart: if (is_atomic) goto fail; @@ -150161,7 +150197,7 @@ index 998607a..389e6ba 100644 err = "failed to allocate new chunk"; goto fail; } -@@ -981,7 +978,6 @@ restart: +@@ -983,7 +980,6 @@ restart: spin_lock_irqsave(&pcpu_lock, flags); } @@ -150169,7 +150205,7 @@ index 998607a..389e6ba 100644 goto restart; area_found: -@@ -991,8 +987,6 @@ area_found: +@@ -993,8 +989,6 @@ area_found: if (!is_atomic) { int page_start, page_end, rs, re; @@ -150178,7 +150214,7 @@ index 998607a..389e6ba 100644 page_start = PFN_DOWN(off); page_end = PFN_UP(off + size); -@@ -1003,7 +997,6 @@ area_found: +@@ -1005,7 +999,6 @@ area_found: spin_lock_irqsave(&pcpu_lock, flags); if (ret) { @@ -150186,7 +150222,7 @@ index 998607a..389e6ba 100644 pcpu_free_area(chunk, off, &occ_pages); err = "failed to populate"; goto fail_unlock; -@@ -1043,6 +1036,8 @@ fail: +@@ -1045,6 +1038,8 @@ fail: /* see the flag handling in pcpu_blance_workfn() */ pcpu_atomic_alloc_failed = true; pcpu_schedule_balance_work(); @@ -150195,7 +150231,7 @@ index 998607a..389e6ba 100644 } return NULL; } -@@ -1127,6 +1122,7 @@ static void pcpu_balance_workfn(struct work_struct *work) +@@ -1129,6 +1124,7 @@ static void pcpu_balance_workfn(struct work_struct *work) if (chunk == list_first_entry(free_head, struct pcpu_chunk, list)) continue; @@ -150203,7 +150239,7 @@ index 998607a..389e6ba 100644 list_move(&chunk->list, &to_free); } -@@ -1144,6 +1140,25 @@ static void pcpu_balance_workfn(struct work_struct *work) +@@ -1146,6 +1142,25 @@ static void pcpu_balance_workfn(struct work_struct *work) pcpu_destroy_chunk(chunk); } @@ -150229,7 +150265,7 @@ index 998607a..389e6ba 100644 /* * Ensure there are certain number of free populated pages for * atomic allocs. Fill up from the most packed so that atomic -@@ -1642,7 +1657,7 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, +@@ -1644,7 +1659,7 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, */ schunk = memblock_virt_alloc(pcpu_chunk_struct_size, 0); INIT_LIST_HEAD(&schunk->list); @@ -150238,7 +150274,7 @@ index 998607a..389e6ba 100644 schunk->base_addr = base_addr; schunk->map = smap; schunk->map_alloc = ARRAY_SIZE(smap); -@@ -1671,7 +1686,7 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, +@@ -1673,7 +1688,7 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, if (dyn_size) { dchunk = memblock_virt_alloc(pcpu_chunk_struct_size, 0); INIT_LIST_HEAD(&dchunk->list); @@ -150248,7 +150284,7 @@ index 998607a..389e6ba 100644 dchunk->map = dmap; dchunk->map_alloc = ARRAY_SIZE(dmap); diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c -index 5d453e5..4043093 100644 +index 07514d4..9989090 100644 --- a/mm/process_vm_access.c +++ b/mm/process_vm_access.c @@ -13,6 +13,7 @@ @@ -150259,7 +150295,7 @@ index 5d453e5..4043093 100644 #include <linux/ptrace.h> #include <linux/slab.h> #include <linux/syscalls.h> -@@ -154,19 +155,19 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, +@@ -159,19 +160,19 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, ssize_t iov_len; size_t total_len = iov_iter_count(iter); @@ -150286,7 +150322,7 @@ index 5d453e5..4043093 100644 } if (nr_pages == 0) -@@ -194,6 +195,11 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, +@@ -199,6 +200,11 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, goto free_proc_pages; } @@ -150299,7 +150335,7 @@ index 5d453e5..4043093 100644 if (!mm || IS_ERR(mm)) { rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH; diff --git a/mm/readahead.c b/mm/readahead.c -index 20e58e8..9045cb5 100644 +index 40be3ae..0d20d87 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -80,7 +80,7 @@ static void read_cache_pages_invalidate_pages(struct address_space *mapping, @@ -150312,7 +150348,7 @@ index 20e58e8..9045cb5 100644 struct page *page; int ret = 0; diff --git a/mm/rmap.c b/mm/rmap.c -index be84cde..b9b85d9 100644 +index 3ebf9c4..ec385cd 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -172,6 +172,10 @@ int anon_vma_prepare(struct vm_area_struct *vma) @@ -150416,7 +150452,7 @@ index be84cde..b9b85d9 100644 /* diff --git a/mm/shmem.c b/mm/shmem.c -index 440e2a7..9091191 100644 +index 719bd6b..6b464fb 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -33,7 +33,7 @@ @@ -150437,7 +150473,7 @@ index 440e2a7..9091191 100644 /* * shmem_fallocate communicates with shmem_fault or shmem_writepage via -@@ -2670,6 +2670,23 @@ static int shmem_xattr_handler_set(const struct xattr_handler *handler, +@@ -2665,6 +2665,23 @@ static int shmem_xattr_handler_set(const struct xattr_handler *handler, return simple_xattr_set(&info->xattrs, name, value, size, flags); } @@ -150461,7 +150497,7 @@ index 440e2a7..9091191 100644 static const struct xattr_handler shmem_security_xattr_handler = { .prefix = XATTR_SECURITY_PREFIX, .get = shmem_xattr_handler_get, -@@ -2682,6 +2699,14 @@ static const struct xattr_handler shmem_trusted_xattr_handler = { +@@ -2677,6 +2694,14 @@ static const struct xattr_handler shmem_trusted_xattr_handler = { .set = shmem_xattr_handler_set, }; @@ -150476,7 +150512,7 @@ index 440e2a7..9091191 100644 static const struct xattr_handler *shmem_xattr_handlers[] = { #ifdef CONFIG_TMPFS_POSIX_ACL &posix_acl_access_xattr_handler, -@@ -2689,6 +2714,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = { +@@ -2684,6 +2709,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = { #endif &shmem_security_xattr_handler, &shmem_trusted_xattr_handler, @@ -150488,7 +150524,7 @@ index 440e2a7..9091191 100644 NULL }; -@@ -3051,8 +3081,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) +@@ -3044,8 +3074,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) int err = -ENOMEM; /* Round up to L1_CACHE_BYTES to resist false sharing */ @@ -150499,7 +150535,7 @@ index 440e2a7..9091191 100644 return -ENOMEM; diff --git a/mm/slab.c b/mm/slab.c -index 621fbcb..9bf872e 100644 +index 17e2848..15840f7 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -116,6 +116,7 @@ @@ -150510,7 +150546,7 @@ index 621fbcb..9bf872e 100644 #include <net/sock.h> -@@ -315,10 +316,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) +@@ -279,10 +280,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) if ((x)->max_freeable < i) \ (x)->max_freeable = i; \ } while (0) @@ -150527,7 +150563,7 @@ index 621fbcb..9bf872e 100644 #else #define STATS_INC_ACTIVE(x) do { } while (0) #define STATS_DEC_ACTIVE(x) do { } while (0) -@@ -335,6 +338,8 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) +@@ -299,6 +302,8 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) #define STATS_INC_ALLOCMISS(x) do { } while (0) #define STATS_INC_FREEHIT(x) do { } while (0) #define STATS_INC_FREEMISS(x) do { } while (0) @@ -150536,7 +150572,7 @@ index 621fbcb..9bf872e 100644 #endif #if DEBUG -@@ -451,7 +456,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page, +@@ -405,7 +410,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page, * reciprocal_divide(offset, cache->reciprocal_buffer_size) */ static inline unsigned int obj_to_index(const struct kmem_cache *cache, @@ -150545,7 +150581,7 @@ index 621fbcb..9bf872e 100644 { u32 offset = (obj - page->s_mem); return reciprocal_divide(offset, cache->reciprocal_buffer_size); -@@ -1453,7 +1458,7 @@ void __init kmem_cache_init(void) +@@ -1263,7 +1268,7 @@ void __init kmem_cache_init(void) * structures first. Without this, further allocations will bug. */ kmalloc_caches[INDEX_NODE] = create_kmalloc_cache("kmalloc-node", @@ -150554,7 +150590,7 @@ index 621fbcb..9bf872e 100644 slab_state = PARTIAL_NODE; setup_kmalloc_cache_index_table(); -@@ -1692,7 +1697,7 @@ static void store_stackinfo(struct kmem_cache *cachep, unsigned long *addr, +@@ -1508,7 +1513,7 @@ static void store_stackinfo(struct kmem_cache *cachep, unsigned long *addr, while (!kstack_end(sptr)) { svalue = *sptr++; @@ -150563,7 +150599,7 @@ index 621fbcb..9bf872e 100644 *addr++ = svalue; size -= sizeof(unsigned long); if (size <= sizeof(unsigned long)) -@@ -2064,7 +2069,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, +@@ -1895,7 +1900,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, cachep = find_mergeable(size, align, flags, name, ctor); if (cachep) { @@ -150572,8 +150608,8 @@ index 621fbcb..9bf872e 100644 /* * Adjust the object sizes so that we clear -@@ -2123,6 +2128,8 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags) - BUG_ON(flags & SLAB_POISON); +@@ -2024,6 +2029,8 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags) + #endif #endif + flags = pax_sanitize_slab_flags(flags); @@ -150581,8 +150617,8 @@ index 621fbcb..9bf872e 100644 /* * Check that size is in terms of words. This is needed to avoid * unaligned accesses for some archs when redzoning is used, and makes -@@ -3367,6 +3374,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp, - struct array_cache *ac = cpu_cache_get(cachep); +@@ -3332,6 +3339,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp, + kasan_slab_free(cachep, objp); check_irq_off(); + @@ -150602,8 +150638,8 @@ index 621fbcb..9bf872e 100644 kmemleak_free_recursive(objp, cachep->flags); objp = cache_free_debugcheck(cachep, objp, caller); -@@ -3492,7 +3513,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller) - return kmem_cache_alloc_node_trace(cachep, flags, node, size); +@@ -3511,7 +3532,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller) + return ret; } -void *__kmalloc_node(size_t size, gfp_t flags, int node) @@ -150611,7 +150647,7 @@ index 621fbcb..9bf872e 100644 { return __do_kmalloc_node(size, flags, node, _RET_IP_); } -@@ -3512,7 +3533,7 @@ EXPORT_SYMBOL(__kmalloc_node_track_caller); +@@ -3531,7 +3552,7 @@ EXPORT_SYMBOL(__kmalloc_node_track_caller); * @flags: the type of memory to allocate (see kmalloc). * @caller: function caller for debug tracking of the caller */ @@ -150620,7 +150656,7 @@ index 621fbcb..9bf872e 100644 unsigned long caller) { struct kmem_cache *cachep; -@@ -3585,6 +3606,7 @@ void kfree(const void *objp) +@@ -3631,6 +3652,7 @@ void kfree(const void *objp) if (unlikely(ZERO_OR_NULL_PTR(objp))) return; @@ -150628,7 +150664,7 @@ index 621fbcb..9bf872e 100644 local_irq_save(flags); kfree_debugcheck(objp); c = virt_to_cache(objp); -@@ -4004,14 +4026,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep) +@@ -4049,14 +4071,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep) } /* cpu stats */ { @@ -150655,7 +150691,7 @@ index 621fbcb..9bf872e 100644 #endif } -@@ -4219,13 +4249,80 @@ static const struct file_operations proc_slabstats_operations = { +@@ -4293,13 +4323,80 @@ static const struct file_operations proc_slabstats_operations = { static int __init slab_proc_init(void) { #ifdef CONFIG_DEBUG_SLAB_LEAK @@ -150738,7 +150774,7 @@ index 621fbcb..9bf872e 100644 * ksize - get the actual amount of memory allocated for a given object * @objp: Pointer to the object diff --git a/mm/slab.h b/mm/slab.h -index 2eedace..7de6f9b 100644 +index 5969769..6bd0b85 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -22,7 +22,7 @@ struct kmem_cache { @@ -150750,7 +150786,7 @@ index 2eedace..7de6f9b 100644 void (*ctor)(void *); /* Called on object slot creation */ struct list_head list; /* List of all slab caches on the system */ }; -@@ -66,6 +66,35 @@ extern struct list_head slab_caches; +@@ -70,6 +70,35 @@ extern struct list_head slab_caches; /* The slab cache that manages slab cache information */ extern struct kmem_cache *kmem_cache; @@ -150786,7 +150822,7 @@ index 2eedace..7de6f9b 100644 unsigned long calculate_alignment(unsigned long flags, unsigned long align, unsigned long size); -@@ -115,7 +144,8 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size, +@@ -119,7 +148,8 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size, /* Legal flag mask for kmem_cache_create(), for various configurations */ #define SLAB_CORE_FLAGS (SLAB_HWCACHE_ALIGN | SLAB_CACHE_DMA | SLAB_PANIC | \ @@ -150796,7 +150832,7 @@ index 2eedace..7de6f9b 100644 #if defined(CONFIG_DEBUG_SLAB) #define SLAB_DEBUG_FLAGS (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER) -@@ -311,6 +341,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x) +@@ -342,6 +372,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x) return s; page = virt_to_head_page(x); @@ -150807,7 +150843,7 @@ index 2eedace..7de6f9b 100644 if (slab_equal_or_root(cachep, s)) return cachep; diff --git a/mm/slab_common.c b/mm/slab_common.c -index 065b7bd..185af36 100644 +index 3239bfd..1ec24ac 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -25,11 +25,35 @@ @@ -150856,7 +150892,7 @@ index 065b7bd..185af36 100644 static int __init setup_slab_nomerge(char *str) { -@@ -240,7 +264,7 @@ int slab_unmergeable(struct kmem_cache *s) +@@ -244,7 +268,7 @@ int slab_unmergeable(struct kmem_cache *s) /* * We may have set a slab to be unmergeable during bootstrap. */ @@ -150865,7 +150901,7 @@ index 065b7bd..185af36 100644 return 1; return 0; -@@ -344,7 +368,7 @@ static struct kmem_cache *create_cache(const char *name, +@@ -348,7 +372,7 @@ static struct kmem_cache *create_cache(const char *name, if (err) goto out_free_cache; @@ -150874,7 +150910,7 @@ index 065b7bd..185af36 100644 list_add(&s->list, &slab_caches); out: if (err) -@@ -469,7 +493,7 @@ static void release_caches(struct list_head *release, bool need_rcu_barrier) +@@ -473,7 +497,7 @@ static void release_caches(struct list_head *release, bool need_rcu_barrier) rcu_barrier(); list_for_each_entry_safe(s, s2, release, list) { @@ -150883,7 +150919,7 @@ index 065b7bd..185af36 100644 sysfs_slab_remove(s); #else slab_kmem_cache_release(s); -@@ -713,8 +737,7 @@ void kmem_cache_destroy(struct kmem_cache *s) +@@ -717,8 +741,7 @@ void kmem_cache_destroy(struct kmem_cache *s) mutex_lock(&slab_mutex); @@ -150893,7 +150929,7 @@ index 065b7bd..185af36 100644 goto out_unlock; err = shutdown_memcg_caches(s, &release, &need_rcu_barrier); -@@ -780,7 +803,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz +@@ -784,7 +807,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n", name, size, err); @@ -150902,7 +150938,7 @@ index 065b7bd..185af36 100644 } struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, -@@ -793,7 +816,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, +@@ -797,7 +820,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, create_boot_cache(s, name, size, flags); list_add(&s->list, &slab_caches); @@ -150911,7 +150947,7 @@ index 065b7bd..185af36 100644 return s; } -@@ -805,6 +828,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; +@@ -809,6 +832,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; EXPORT_SYMBOL(kmalloc_dma_caches); #endif @@ -150923,7 +150959,7 @@ index 065b7bd..185af36 100644 /* * Conversion table for small slabs sizes / 8 to the index in the * kmalloc array. This is necessary for slabs < 192 since we have non power -@@ -869,6 +897,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) +@@ -873,6 +901,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) return kmalloc_dma_caches[index]; #endif @@ -150937,7 +150973,7 @@ index 065b7bd..185af36 100644 return kmalloc_caches[index]; } -@@ -961,7 +996,7 @@ void __init create_kmalloc_caches(unsigned long flags) +@@ -965,7 +1000,7 @@ void __init create_kmalloc_caches(unsigned long flags) for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) { if (!kmalloc_caches[i]) @@ -150946,7 +150982,7 @@ index 065b7bd..185af36 100644 /* * Caches that are not of the two-to-the-power-of size. -@@ -969,9 +1004,9 @@ void __init create_kmalloc_caches(unsigned long flags) +@@ -973,9 +1008,9 @@ void __init create_kmalloc_caches(unsigned long flags) * earlier power of two caches */ if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6) @@ -150958,7 +150994,7 @@ index 065b7bd..185af36 100644 } /* Kmalloc array is now usable */ -@@ -992,6 +1027,23 @@ void __init create_kmalloc_caches(unsigned long flags) +@@ -996,6 +1031,23 @@ void __init create_kmalloc_caches(unsigned long flags) } } #endif @@ -150982,9 +151018,9 @@ index 065b7bd..185af36 100644 } #endif /* !CONFIG_SLOB */ -@@ -1051,6 +1103,9 @@ static void print_slabinfo_header(struct seq_file *m) - seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> " - "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>"); +@@ -1053,6 +1105,9 @@ static void print_slabinfo_header(struct seq_file *m) + #ifdef CONFIG_DEBUG_SLAB + seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> <error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>"); seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>"); +#ifdef CONFIG_PAX_MEMORY_SANITIZE + seq_puts(m, " : pax <sanitized> <not_sanitized>"); @@ -150992,7 +151028,7 @@ index 065b7bd..185af36 100644 #endif seq_putc(m, '\n'); } -@@ -1180,7 +1235,7 @@ static int __init slab_proc_init(void) +@@ -1182,7 +1237,7 @@ static int __init slab_proc_init(void) module_init(slab_proc_init); #endif /* CONFIG_SLABINFO */ @@ -151432,7 +151468,7 @@ index 5ec1580..93f3beb 100644 EXPORT_SYMBOL(kmem_cache_free); diff --git a/mm/slub.c b/mm/slub.c -index 2a722e1..af44068 100644 +index 4dbb109e..23490e5 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -34,6 +34,7 @@ @@ -151443,7 +151479,7 @@ index 2a722e1..af44068 100644 #include <trace/events/kmem.h> -@@ -198,7 +199,7 @@ struct track { +@@ -214,7 +215,7 @@ struct track { enum track_item { TRACK_ALLOC, TRACK_FREE }; @@ -151452,7 +151488,7 @@ index 2a722e1..af44068 100644 static int sysfs_slab_add(struct kmem_cache *); static int sysfs_slab_alias(struct kmem_cache *, const char *); static void memcg_propagate_slab_attrs(struct kmem_cache *s); -@@ -560,7 +561,7 @@ static void print_track(const char *s, struct track *t) +@@ -571,7 +572,7 @@ static void print_track(const char *s, struct track *t) if (!t->addr) return; @@ -151461,7 +151497,7 @@ index 2a722e1..af44068 100644 s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid); #ifdef CONFIG_STACKTRACE { -@@ -2767,6 +2768,22 @@ static __always_inline void slab_free(struct kmem_cache *s, struct page *page, +@@ -2778,6 +2779,22 @@ static __always_inline void slab_free(struct kmem_cache *s, struct page *page, slab_free_freelist_hook(s, head, tail); @@ -151484,7 +151520,7 @@ index 2a722e1..af44068 100644 redo: /* * Determine the currently cpus per cpu slab. -@@ -3514,7 +3531,7 @@ static int __init setup_slub_min_objects(char *str) +@@ -3545,7 +3562,7 @@ static int __init setup_slub_min_objects(char *str) __setup("slub_min_objects=", setup_slub_min_objects); @@ -151493,7 +151529,7 @@ index 2a722e1..af44068 100644 { struct kmem_cache *s; void *ret; -@@ -3552,7 +3569,7 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node) +@@ -3583,7 +3600,7 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node) return ptr; } @@ -151502,7 +151538,7 @@ index 2a722e1..af44068 100644 { struct kmem_cache *s; void *ret; -@@ -3600,6 +3617,70 @@ static size_t __ksize(const void *object) +@@ -3631,6 +3648,70 @@ static size_t __ksize(const void *object) return slab_ksize(page->slab_cache); } @@ -151573,7 +151609,7 @@ index 2a722e1..af44068 100644 size_t ksize(const void *object) { size_t size = __ksize(object); -@@ -3620,6 +3701,7 @@ void kfree(const void *x) +@@ -3651,6 +3732,7 @@ void kfree(const void *x) if (unlikely(ZERO_OR_NULL_PTR(x))) return; @@ -151581,7 +151617,7 @@ index 2a722e1..af44068 100644 page = virt_to_head_page(x); if (unlikely(!PageSlab(page))) { BUG_ON(!PageCompound(page)); -@@ -3937,7 +4019,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, +@@ -3968,7 +4050,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, s = find_mergeable(size, align, flags, name, ctor); if (s) { @@ -151590,7 +151626,7 @@ index 2a722e1..af44068 100644 /* * Adjust the object sizes so that we clear -@@ -3953,7 +4035,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, +@@ -3984,7 +4066,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, } if (sysfs_slab_alias(s, name)) { @@ -151599,7 +151635,7 @@ index 2a722e1..af44068 100644 s = NULL; } } -@@ -3965,6 +4047,8 @@ int __kmem_cache_create(struct kmem_cache *s, unsigned long flags) +@@ -3996,6 +4078,8 @@ int __kmem_cache_create(struct kmem_cache *s, unsigned long flags) { int err; @@ -151608,7 +151644,7 @@ index 2a722e1..af44068 100644 err = kmem_cache_open(s, flags); if (err) return err; -@@ -4070,7 +4154,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, +@@ -4101,7 +4185,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, } #endif @@ -151617,7 +151653,7 @@ index 2a722e1..af44068 100644 static int count_inuse(struct page *page) { return page->inuse; -@@ -4351,7 +4435,11 @@ static int list_locations(struct kmem_cache *s, char *buf, +@@ -4382,7 +4466,11 @@ static int list_locations(struct kmem_cache *s, char *buf, len += sprintf(buf + len, "%7ld ", l->count); if (l->addr) @@ -151629,7 +151665,7 @@ index 2a722e1..af44068 100644 else len += sprintf(buf + len, "<not-available>"); -@@ -4449,12 +4537,12 @@ static void __init resiliency_test(void) +@@ -4480,12 +4568,12 @@ static void __init resiliency_test(void) validate_slab_cache(kmalloc_caches[9]); } #else @@ -151644,7 +151680,7 @@ index 2a722e1..af44068 100644 enum slab_stat_type { SL_ALL, /* All slabs */ SL_PARTIAL, /* Only partially allocated slabs */ -@@ -4691,13 +4779,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf) +@@ -4722,13 +4810,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf) { if (!s->ctor) return 0; @@ -151663,7 +151699,7 @@ index 2a722e1..af44068 100644 } SLAB_ATTR_RO(aliases); -@@ -4785,6 +4877,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf) +@@ -4816,6 +4908,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf) SLAB_ATTR_RO(cache_dma); #endif @@ -151686,7 +151722,7 @@ index 2a722e1..af44068 100644 static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf) { return sprintf(buf, "%d\n", !!(s->flags & SLAB_DESTROY_BY_RCU)); -@@ -4840,7 +4948,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf, +@@ -4871,7 +4979,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf, * as well as cause other issues like converting a mergeable * cache into an umergeable one. */ @@ -151695,7 +151731,7 @@ index 2a722e1..af44068 100644 return -EINVAL; s->flags &= ~SLAB_TRACE; -@@ -4960,7 +5068,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf) +@@ -4989,7 +5097,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf) static ssize_t failslab_store(struct kmem_cache *s, const char *buf, size_t length) { @@ -151704,7 +151740,7 @@ index 2a722e1..af44068 100644 return -EINVAL; s->flags &= ~SLAB_FAILSLAB; -@@ -5092,7 +5200,7 @@ STAT_ATTR(CPU_PARTIAL_NODE, cpu_partial_node); +@@ -5121,7 +5229,7 @@ STAT_ATTR(CPU_PARTIAL_NODE, cpu_partial_node); STAT_ATTR(CPU_PARTIAL_DRAIN, cpu_partial_drain); #endif @@ -151713,7 +151749,7 @@ index 2a722e1..af44068 100644 &slab_size_attr.attr, &object_size_attr.attr, &objs_per_slab_attr.attr, -@@ -5127,6 +5235,12 @@ static struct attribute *slab_attrs[] = { +@@ -5156,6 +5264,12 @@ static struct attribute *slab_attrs[] = { #ifdef CONFIG_ZONE_DMA &cache_dma_attr.attr, #endif @@ -151726,7 +151762,7 @@ index 2a722e1..af44068 100644 #ifdef CONFIG_NUMA &remote_node_defrag_ratio_attr.attr, #endif -@@ -5370,6 +5484,7 @@ static char *create_unique_id(struct kmem_cache *s) +@@ -5399,6 +5513,7 @@ static char *create_unique_id(struct kmem_cache *s) return name; } @@ -151734,7 +151770,7 @@ index 2a722e1..af44068 100644 static int sysfs_slab_add(struct kmem_cache *s) { int err; -@@ -5441,6 +5556,7 @@ void sysfs_slab_remove(struct kmem_cache *s) +@@ -5470,6 +5585,7 @@ void sysfs_slab_remove(struct kmem_cache *s) kobject_del(&s->kobj); kobject_put(&s->kobj); } @@ -151742,7 +151778,7 @@ index 2a722e1..af44068 100644 /* * Need to buffer aliases during bootup until sysfs becomes -@@ -5454,6 +5570,7 @@ struct saved_alias { +@@ -5483,6 +5599,7 @@ struct saved_alias { static struct saved_alias *alias_list; @@ -151750,7 +151786,7 @@ index 2a722e1..af44068 100644 static int sysfs_slab_alias(struct kmem_cache *s, const char *name) { struct saved_alias *al; -@@ -5476,6 +5593,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name) +@@ -5505,6 +5622,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name) alias_list = al; return 0; } @@ -151759,7 +151795,7 @@ index 2a722e1..af44068 100644 static int __init slab_sysfs_init(void) { diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c -index b60802b..0a05e3c 100644 +index 68885dc..35c5cc4 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -203,7 +203,7 @@ pud_t * __meminit vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node) @@ -151781,10 +151817,10 @@ index b60802b..0a05e3c 100644 return pgd; } diff --git a/mm/sparse.c b/mm/sparse.c -index 3717cee..7ee2c16 100644 +index 5d0cf45..66e4df6 100644 --- a/mm/sparse.c +++ b/mm/sparse.c -@@ -750,7 +750,7 @@ static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages) +@@ -747,7 +747,7 @@ static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages) for (i = 0; i < nr_pages; i++) { if (PageHWPoison(&memmap[i])) { @@ -151794,7 +151830,7 @@ index 3717cee..7ee2c16 100644 } } diff --git a/mm/swap.c b/mm/swap.c -index 09fe5e9..be5ad5b 100644 +index 03aacbc..3a5e649 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -88,6 +88,13 @@ static void __put_compound_page(struct page *page) @@ -151812,10 +151848,10 @@ index 09fe5e9..be5ad5b 100644 } diff --git a/mm/swapfile.c b/mm/swapfile.c -index 954fd8f..4d2eb9b 100644 +index 031713ab..f2c0e55 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c -@@ -84,7 +84,7 @@ static DEFINE_MUTEX(swapon_mutex); +@@ -90,7 +90,7 @@ static DEFINE_MUTEX(swapon_mutex); static DECLARE_WAIT_QUEUE_HEAD(proc_poll_wait); /* Activity counter to indicate that a swapon or swapoff has occurred */ @@ -151824,7 +151860,7 @@ index 954fd8f..4d2eb9b 100644 static inline unsigned char swap_count(unsigned char ent) { -@@ -1973,7 +1973,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) +@@ -1979,7 +1979,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) spin_unlock(&swap_lock); err = 0; @@ -151833,7 +151869,7 @@ index 954fd8f..4d2eb9b 100644 wake_up_interruptible(&proc_poll_wait); out_dput: -@@ -1990,8 +1990,8 @@ static unsigned swaps_poll(struct file *file, poll_table *wait) +@@ -1996,8 +1996,8 @@ static unsigned swaps_poll(struct file *file, poll_table *wait) poll_wait(file, &proc_poll_wait, wait); @@ -151844,7 +151880,7 @@ index 954fd8f..4d2eb9b 100644 return POLLIN | POLLRDNORM | POLLERR | POLLPRI; } -@@ -2089,7 +2089,7 @@ static int swaps_open(struct inode *inode, struct file *file) +@@ -2095,7 +2095,7 @@ static int swaps_open(struct inode *inode, struct file *file) return ret; seq = file->private_data; @@ -151853,7 +151889,7 @@ index 954fd8f..4d2eb9b 100644 return 0; } -@@ -2538,7 +2538,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) +@@ -2543,7 +2543,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) (frontswap_map) ? "FS" : ""); mutex_unlock(&swapon_mutex); @@ -151863,7 +151899,7 @@ index 954fd8f..4d2eb9b 100644 if (S_ISREG(inode->i_mode)) diff --git a/mm/util.c b/mm/util.c -index 4fb14ca..bb377d3 100644 +index 6cc81e7..53a6ff9 100644 --- a/mm/util.c +++ b/mm/util.c @@ -239,6 +239,12 @@ int vma_is_stack_for_task(struct vm_area_struct *vma, struct task_struct *t) @@ -151879,7 +151915,15 @@ index 4fb14ca..bb377d3 100644 mm->get_unmapped_area = arch_get_unmapped_area; } #endif -@@ -457,6 +463,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen) +@@ -400,6 +406,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly; + int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT; + unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */ + unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */ ++unsigned long sysctl_heap_stack_gap __read_mostly = 64*1024; + + int overcommit_ratio_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, +@@ -579,6 +586,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen) if (!mm->arg_end) goto out_mm; /* Shh! No looking before we're done */ @@ -151890,7 +151934,7 @@ index 4fb14ca..bb377d3 100644 arg_start = mm->arg_start; arg_end = mm->arg_end; diff --git a/mm/vmalloc.c b/mm/vmalloc.c -index fb42a5b..3f4666e 100644 +index ae7d20b..718df5c 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -42,20 +42,65 @@ struct vfree_deferred { @@ -152075,7 +152119,7 @@ index fb42a5b..3f4666e 100644 unsigned long align, unsigned long vstart, unsigned long vend, int node, gfp_t gfp_mask) -@@ -1203,13 +1286,27 @@ void __init vmalloc_init(void) +@@ -1202,13 +1285,27 @@ void __init vmalloc_init(void) for_each_possible_cpu(i) { struct vmap_block_queue *vbq; struct vfree_deferred *p; @@ -152104,7 +152148,7 @@ index fb42a5b..3f4666e 100644 } /* Import existing vmlist entries. */ -@@ -1334,6 +1431,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, +@@ -1333,6 +1430,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, struct vm_struct *area; BUG_ON(in_interrupt()); @@ -152121,17 +152165,19 @@ index fb42a5b..3f4666e 100644 if (flags & VM_IOREMAP) align = 1ul << clamp_t(int, fls_long(size), PAGE_SHIFT, IOREMAP_MAX_ORDER); -@@ -1346,7 +1453,9 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, +@@ -1345,7 +1452,11 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, if (unlikely(!area)) return NULL; -+#ifndef CONFIG_GRKERNSEC_KSTACKOVERFLOW ++#ifdef CONFIG_GRKERNSEC_KSTACKOVERFLOW ++ if (!(flags & VM_NO_GUARD) || (start >= VMALLOC_START && end <= VMALLOC_END)) ++#else if (!(flags & VM_NO_GUARD)) +#endif size += PAGE_SIZE; va = alloc_vmap_area(size, align, start, end, node, gfp_mask); -@@ -1528,13 +1637,36 @@ EXPORT_SYMBOL(vfree); +@@ -1527,13 +1638,36 @@ EXPORT_SYMBOL(vfree); */ void vunmap(const void *addr) { @@ -152171,7 +152217,7 @@ index fb42a5b..3f4666e 100644 /** * vmap - map an array of pages into virtually contiguous space * @pages: array of page pointers -@@ -1555,6 +1687,11 @@ void *vmap(struct page **pages, unsigned int count, +@@ -1554,6 +1688,11 @@ void *vmap(struct page **pages, unsigned int count, if (count > totalram_pages) return NULL; @@ -152183,7 +152229,7 @@ index fb42a5b..3f4666e 100644 area = get_vm_area_caller((count << PAGE_SHIFT), flags, __builtin_return_address(0)); if (!area) -@@ -1658,6 +1795,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, +@@ -1657,6 +1796,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, if (!size || (size >> PAGE_SHIFT) > totalram_pages) goto fail; @@ -152198,7 +152244,7 @@ index fb42a5b..3f4666e 100644 area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNINITIALIZED | vm_flags, start, end, node, gfp_mask, caller); if (!area) -@@ -1711,6 +1856,14 @@ static void *__vmalloc_node(unsigned long size, unsigned long align, +@@ -1710,6 +1857,14 @@ static void *__vmalloc_node(unsigned long size, unsigned long align, gfp_mask, prot, 0, node, caller); } @@ -152213,7 +152259,7 @@ index fb42a5b..3f4666e 100644 void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot) { return __vmalloc_node(size, 1, gfp_mask, prot, NUMA_NO_NODE, -@@ -1834,10 +1987,9 @@ EXPORT_SYMBOL(vzalloc_node); +@@ -1833,10 +1988,9 @@ EXPORT_SYMBOL(vzalloc_node); * For tight control over page level allocator and protection flags * use __vmalloc() instead. */ @@ -152225,7 +152271,7 @@ index fb42a5b..3f4666e 100644 NUMA_NO_NODE, __builtin_return_address(0)); } -@@ -2144,6 +2296,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr, +@@ -2143,6 +2297,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr, { struct vm_struct *area; @@ -152234,7 +152280,7 @@ index fb42a5b..3f4666e 100644 size = PAGE_ALIGN(size); if (!PAGE_ALIGNED(uaddr) || !PAGE_ALIGNED(kaddr)) -@@ -2513,7 +2667,7 @@ found: +@@ -2512,7 +2668,7 @@ found: /* insert all vm's */ for (area = 0; area < nr_vms; area++) setup_vmalloc_vm(vms[area], vas[area], VM_ALLOC, @@ -152243,7 +152289,7 @@ index fb42a5b..3f4666e 100644 kfree(vas); return vms; -@@ -2626,7 +2780,11 @@ static int s_show(struct seq_file *m, void *p) +@@ -2625,7 +2781,11 @@ static int s_show(struct seq_file *m, void *p) v->addr, v->addr + v->size, v->size); if (v->caller) @@ -152256,7 +152302,7 @@ index fb42a5b..3f4666e 100644 if (v->nr_pages) seq_printf(m, " pages=%d", v->nr_pages); diff --git a/mm/vmstat.c b/mm/vmstat.c -index 084c672..50f9c10 100644 +index 5e43004..823a5d3 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -27,6 +27,7 @@ @@ -152314,7 +152360,7 @@ index 084c672..50f9c10 100644 } } #endif -@@ -1320,10 +1321,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos) +@@ -1309,10 +1310,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos) stat_items_size += sizeof(struct vm_event_state); #endif @@ -152338,7 +152384,7 @@ index 084c672..50f9c10 100644 for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) v[i] = global_page_state(i); v += NR_VM_ZONE_STAT_ITEMS; -@@ -1589,10 +1602,16 @@ static int __init setup_vmstat(void) +@@ -1578,10 +1591,16 @@ static int __init setup_vmstat(void) cpu_notifier_register_done(); #endif #ifdef CONFIG_PROC_FS @@ -152360,7 +152406,7 @@ index 084c672..50f9c10 100644 return 0; } diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c -index d2cd9de..501c186 100644 +index a1e273a..2229e93 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -491,7 +491,7 @@ out: @@ -152625,10 +152671,10 @@ index 919a5ce..cc6b444 100644 table = kmemdup(ax25_param_table, sizeof(ax25_param_table), GFP_KERNEL); if (!table) diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c -index df625de..1ecaa3d 100644 +index cb2d1b9..b0459c4 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c -@@ -318,7 +318,7 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface) +@@ -319,7 +319,7 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface) /* randomize initial seqno to avoid collision */ get_random_bytes(&random_seqno, sizeof(random_seqno)); @@ -152637,7 +152683,7 @@ index df625de..1ecaa3d 100644 hard_iface->bat_iv.ogm_buff_len = BATADV_OGM_HLEN; ogm_buff = kmalloc(hard_iface->bat_iv.ogm_buff_len, GFP_ATOMIC); -@@ -918,9 +918,9 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface) +@@ -926,9 +926,9 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface) batadv_ogm_packet->tvlv_len = htons(tvlv_len); /* change sequence number to network order */ @@ -152649,7 +152695,7 @@ index df625de..1ecaa3d 100644 batadv_iv_ogm_slide_own_bcast_window(hard_iface); -@@ -1609,7 +1609,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset, +@@ -1618,7 +1618,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset, return; /* could be changed by schedule_own_packet() */ @@ -152659,10 +152705,10 @@ index df625de..1ecaa3d 100644 if (ogm_packet->flags & BATADV_DIRECTLINK) has_directlink_flag = true; diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c -index 20d9282..c575313 100644 +index e6956d0..f59553fa 100644 --- a/net/batman-adv/fragmentation.c +++ b/net/batman-adv/fragmentation.c -@@ -468,7 +468,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb, +@@ -469,7 +469,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb, frag_header.packet_type = BATADV_UNICAST_FRAG; frag_header.version = BATADV_COMPAT_VERSION; frag_header.ttl = BATADV_TTL; @@ -152672,10 +152718,10 @@ index 20d9282..c575313 100644 frag_header.no = 0; frag_header.total_size = htons(skb->len); diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c -index 43d15d6..3db29f9 100644 +index b781bf7..46bb680 100644 --- a/net/batman-adv/routing.c +++ b/net/batman-adv/routing.c -@@ -674,7 +674,7 @@ batadv_reroute_unicast_packet(struct batadv_priv *bat_priv, +@@ -690,7 +690,7 @@ batadv_reroute_unicast_packet(struct batadv_priv *bat_priv, if (!primary_if) goto out; orig_addr = primary_if->net_dev->dev_addr; @@ -152684,7 +152730,7 @@ index 43d15d6..3db29f9 100644 } else { orig_node = batadv_transtable_search(bat_priv, NULL, dst_addr, vid); -@@ -749,7 +749,7 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, +@@ -765,7 +765,7 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, * value is used later to check if the node which sent (or re-routed * last time) the packet had an updated information or not */ @@ -152694,10 +152740,10 @@ index 43d15d6..3db29f9 100644 orig_node = batadv_orig_hash_find(bat_priv, unicast_packet->dest); diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c -index 720f1a5..e215568 100644 +index 8a136b6..446d0cb 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c -@@ -178,7 +178,7 @@ static void batadv_interface_set_rx_mode(struct net_device *dev) +@@ -179,7 +179,7 @@ static void batadv_interface_set_rx_mode(struct net_device *dev) { } @@ -152706,7 +152752,7 @@ index 720f1a5..e215568 100644 struct net_device *soft_iface) { struct ethhdr *ethhdr; -@@ -330,7 +330,7 @@ send: +@@ -331,7 +331,7 @@ send: primary_if->net_dev->dev_addr); /* set broadcast sequence number */ @@ -152715,7 +152761,7 @@ index 720f1a5..e215568 100644 bcast_packet->seqno = htonl(seqno); batadv_add_bcast_packet_to_list(bat_priv, skb, brd_delay); -@@ -802,8 +802,8 @@ static int batadv_softif_init_late(struct net_device *dev) +@@ -817,8 +817,8 @@ static int batadv_softif_init_late(struct net_device *dev) atomic_set(&bat_priv->batman_queue_left, BATADV_BATMAN_QUEUE_LEN); atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE); @@ -152726,7 +152772,7 @@ index 720f1a5..e215568 100644 atomic_set(&bat_priv->tt.local_changes, 0); atomic_set(&bat_priv->tt.ogm_append_cnt, 0); #ifdef CONFIG_BATMAN_ADV_BLA -@@ -816,7 +816,7 @@ static int batadv_softif_init_late(struct net_device *dev) +@@ -831,7 +831,7 @@ static int batadv_softif_init_late(struct net_device *dev) /* randomize initial seqno to avoid collision */ get_random_bytes(&random_seqno, sizeof(random_seqno)); @@ -152735,7 +152781,7 @@ index 720f1a5..e215568 100644 bat_priv->primary_if = NULL; bat_priv->num_ifaces = 0; -@@ -1022,7 +1022,7 @@ int batadv_softif_is_valid(const struct net_device *net_dev) +@@ -1037,7 +1037,7 @@ int batadv_softif_is_valid(const struct net_device *net_dev) return 0; } @@ -152745,10 +152791,10 @@ index 720f1a5..e215568 100644 .priv_size = sizeof(struct batadv_priv), .setup = batadv_softif_init_early, diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c -index fe87777..d115a3a 100644 +index e7cf513..f4de9cc 100644 --- a/net/batman-adv/sysfs.c +++ b/net/batman-adv/sysfs.c -@@ -141,7 +141,7 @@ struct batadv_attribute batadv_attr_##_name = { \ +@@ -143,7 +143,7 @@ struct batadv_attribute batadv_attr_##_name = { \ #define BATADV_ATTR_SIF_STORE_BOOL(_name, _post_func) \ ssize_t batadv_store_##_name(struct kobject *kobj, \ @@ -152757,7 +152803,7 @@ index fe87777..d115a3a 100644 size_t count) \ { \ struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \ -@@ -153,7 +153,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \ +@@ -155,7 +155,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \ #define BATADV_ATTR_SIF_SHOW_BOOL(_name) \ ssize_t batadv_show_##_name(struct kobject *kobj, \ @@ -152766,7 +152812,7 @@ index fe87777..d115a3a 100644 { \ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); \ \ -@@ -173,7 +173,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \ +@@ -175,7 +175,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \ #define BATADV_ATTR_SIF_STORE_UINT(_name, _var, _min, _max, _post_func) \ ssize_t batadv_store_##_name(struct kobject *kobj, \ @@ -152775,7 +152821,7 @@ index fe87777..d115a3a 100644 size_t count) \ { \ struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \ -@@ -186,7 +186,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \ +@@ -188,7 +188,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \ #define BATADV_ATTR_SIF_SHOW_UINT(_name, _var) \ ssize_t batadv_show_##_name(struct kobject *kobj, \ @@ -152784,7 +152830,7 @@ index fe87777..d115a3a 100644 { \ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); \ \ -@@ -204,7 +204,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \ +@@ -206,7 +206,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \ #define BATADV_ATTR_VLAN_STORE_BOOL(_name, _post_func) \ ssize_t batadv_store_vlan_##_name(struct kobject *kobj, \ @@ -152793,7 +152839,7 @@ index fe87777..d115a3a 100644 size_t count) \ { \ struct batadv_priv *bat_priv = batadv_vlan_kobj_to_batpriv(kobj);\ -@@ -220,7 +220,7 @@ ssize_t batadv_store_vlan_##_name(struct kobject *kobj, \ +@@ -222,7 +222,7 @@ ssize_t batadv_store_vlan_##_name(struct kobject *kobj, \ #define BATADV_ATTR_VLAN_SHOW_BOOL(_name) \ ssize_t batadv_show_vlan_##_name(struct kobject *kobj, \ @@ -152802,7 +152848,25 @@ index fe87777..d115a3a 100644 { \ struct batadv_priv *bat_priv = batadv_vlan_kobj_to_batpriv(kobj);\ struct batadv_softif_vlan *vlan = batadv_kobj_to_vlan(bat_priv, \ -@@ -284,13 +284,13 @@ static int batadv_store_bool_attr(char *buff, size_t count, +@@ -244,7 +244,7 @@ ssize_t batadv_show_vlan_##_name(struct kobject *kobj, \ + + #define BATADV_ATTR_HIF_STORE_UINT(_name, _var, _min, _max, _post_func) \ + ssize_t batadv_store_##_name(struct kobject *kobj, \ +- struct attribute *attr, char *buff, \ ++ struct kobj_attribute *attr, char *buff, \ + size_t count) \ + { \ + struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \ +@@ -265,7 +265,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \ + + #define BATADV_ATTR_HIF_SHOW_UINT(_name, _var) \ + ssize_t batadv_show_##_name(struct kobject *kobj, \ +- struct attribute *attr, char *buff) \ ++ struct kobj_attribute *attr, char *buff) \ + { \ + struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \ + struct batadv_hard_iface *hard_iface; \ +@@ -335,13 +335,13 @@ static int batadv_store_bool_attr(char *buff, size_t count, static inline ssize_t __batadv_store_bool_attr(char *buff, size_t count, void (*post_func)(struct net_device *), @@ -152818,7 +152882,7 @@ index fe87777..d115a3a 100644 attr_store, &changed); if (post_func && changed) post_func(net_dev); -@@ -340,12 +340,12 @@ static inline ssize_t +@@ -391,12 +391,12 @@ static inline ssize_t __batadv_store_uint_attr(const char *buff, size_t count, int min, int max, void (*post_func)(struct net_device *), @@ -152833,7 +152897,7 @@ index fe87777..d115a3a 100644 attr_store); if (post_func && ret) post_func(net_dev); -@@ -354,7 +354,7 @@ __batadv_store_uint_attr(const char *buff, size_t count, +@@ -405,7 +405,7 @@ __batadv_store_uint_attr(const char *buff, size_t count, } static ssize_t batadv_show_bat_algo(struct kobject *kobj, @@ -152842,7 +152906,7 @@ index fe87777..d115a3a 100644 { struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); -@@ -368,7 +368,7 @@ static void batadv_post_gw_reselect(struct net_device *net_dev) +@@ -419,7 +419,7 @@ static void batadv_post_gw_reselect(struct net_device *net_dev) batadv_gw_reselect(bat_priv); } @@ -152851,7 +152915,7 @@ index fe87777..d115a3a 100644 char *buff) { struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); -@@ -393,7 +393,7 @@ static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct attribute *attr, +@@ -444,7 +444,7 @@ static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct attribute *attr, } static ssize_t batadv_store_gw_mode(struct kobject *kobj, @@ -152860,7 +152924,7 @@ index fe87777..d115a3a 100644 size_t count) { struct net_device *net_dev = batadv_kobj_to_netdev(kobj); -@@ -461,7 +461,7 @@ static ssize_t batadv_store_gw_mode(struct kobject *kobj, +@@ -512,7 +512,7 @@ static ssize_t batadv_store_gw_mode(struct kobject *kobj, } static ssize_t batadv_show_gw_bwidth(struct kobject *kobj, @@ -152869,7 +152933,7 @@ index fe87777..d115a3a 100644 { struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); u32 down, up; -@@ -474,7 +474,7 @@ static ssize_t batadv_show_gw_bwidth(struct kobject *kobj, +@@ -525,7 +525,7 @@ static ssize_t batadv_show_gw_bwidth(struct kobject *kobj, } static ssize_t batadv_store_gw_bwidth(struct kobject *kobj, @@ -152878,7 +152942,7 @@ index fe87777..d115a3a 100644 size_t count) { struct net_device *net_dev = batadv_kobj_to_netdev(kobj); -@@ -495,7 +495,7 @@ static ssize_t batadv_store_gw_bwidth(struct kobject *kobj, +@@ -546,7 +546,7 @@ static ssize_t batadv_store_gw_bwidth(struct kobject *kobj, * error code in case of failure */ static ssize_t batadv_show_isolation_mark(struct kobject *kobj, @@ -152887,8 +152951,8 @@ index fe87777..d115a3a 100644 { struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); -@@ -514,7 +514,7 @@ static ssize_t batadv_show_isolation_mark(struct kobject *kobj, - * Returns 'count' on success or a negative error code in case of failure +@@ -565,7 +565,7 @@ static ssize_t batadv_show_isolation_mark(struct kobject *kobj, + * Return: 'count' on success or a negative error code in case of failure */ static ssize_t batadv_store_isolation_mark(struct kobject *kobj, - struct attribute *attr, char *buff, @@ -152896,7 +152960,7 @@ index fe87777..d115a3a 100644 size_t count) { struct net_device *net_dev = batadv_kobj_to_netdev(kobj); -@@ -753,7 +753,7 @@ void batadv_sysfs_del_vlan(struct batadv_priv *bat_priv, +@@ -802,7 +802,7 @@ void batadv_sysfs_del_vlan(struct batadv_priv *bat_priv, } static ssize_t batadv_show_mesh_iface(struct kobject *kobj, @@ -152905,7 +152969,7 @@ index fe87777..d115a3a 100644 { struct net_device *net_dev = batadv_kobj_to_netdev(kobj); struct batadv_hard_iface *hard_iface; -@@ -777,7 +777,7 @@ static ssize_t batadv_show_mesh_iface(struct kobject *kobj, +@@ -826,7 +826,7 @@ static ssize_t batadv_show_mesh_iface(struct kobject *kobj, } static ssize_t batadv_store_mesh_iface(struct kobject *kobj, @@ -152914,7 +152978,7 @@ index fe87777..d115a3a 100644 size_t count) { struct net_device *net_dev = batadv_kobj_to_netdev(kobj); -@@ -834,7 +834,7 @@ out: +@@ -883,7 +883,7 @@ out: } static ssize_t batadv_show_iface_status(struct kobject *kobj, @@ -152923,8 +152987,26 @@ index fe87777..d115a3a 100644 { struct net_device *net_dev = batadv_kobj_to_netdev(kobj); struct batadv_hard_iface *hard_iface; +@@ -930,7 +930,7 @@ static ssize_t batadv_show_iface_status(struct kobject *kobj, + * Return: 'count' on success or a negative error code in case of failure + */ + static ssize_t batadv_store_throughput_override(struct kobject *kobj, +- struct attribute *attr, ++ struct kobj_attribute *attr, + char *buff, size_t count) + { + struct net_device *net_dev = batadv_kobj_to_netdev(kobj); +@@ -968,7 +968,7 @@ out: + } + + static ssize_t batadv_show_throughput_override(struct kobject *kobj, +- struct attribute *attr, ++ struct kobj_attribute *attr, + char *buff) + { + struct net_device *net_dev = batadv_kobj_to_netdev(kobj); diff --git a/net/batman-adv/sysfs.h b/net/batman-adv/sysfs.h -index 6197442..d762dac 100644 +index c76021b..3aef377 100644 --- a/net/batman-adv/sysfs.h +++ b/net/batman-adv/sysfs.h @@ -37,9 +37,9 @@ struct net_device; @@ -152940,10 +153022,10 @@ index 6197442..d762dac 100644 }; diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c -index 0e80fd1..65abb77 100644 +index 9b4551a..426c047 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c -@@ -609,7 +609,7 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const u8 *addr, +@@ -660,7 +660,7 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const u8 *addr, batadv_dbg(BATADV_DBG_TT, bat_priv, "Creating new local tt entry: %pM (vid: %d, ttvn: %d)\n", addr, BATADV_PRINT_VID(vid), @@ -152952,7 +153034,7 @@ index 0e80fd1..65abb77 100644 ether_addr_copy(tt_local->common.addr, addr); /* The local entry has to be marked as NEW to avoid to send it in -@@ -839,7 +839,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv, +@@ -891,7 +891,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv, } (*tt_data)->flags = BATADV_NO_FLAGS; @@ -152961,7 +153043,7 @@ index 0e80fd1..65abb77 100644 (*tt_data)->num_vlan = htons(num_vlan); tt_vlan = (struct batadv_tvlv_tt_vlan_data *)(*tt_data + 1); -@@ -958,7 +958,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset) +@@ -1009,7 +1009,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset) seq_printf(seq, "Locally retrieved addresses (from %s) announced via TT (TTVN: %u):\n", @@ -152970,7 +153052,7 @@ index 0e80fd1..65abb77 100644 seq_printf(seq, " %-13s %s %-8s %-9s (%-10s)\n", "Client", "VID", "Flags", "Last seen", "CRC"); -@@ -2747,7 +2747,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv, +@@ -2786,7 +2786,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv, spin_lock_bh(&bat_priv->tt.commit_lock); @@ -152979,7 +153061,7 @@ index 0e80fd1..65abb77 100644 req_ttvn = tt_data->ttvn; orig_node = batadv_orig_hash_find(bat_priv, req_src); -@@ -2786,7 +2786,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv, +@@ -2825,7 +2825,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv, bat_priv->tt.last_changeset_len); spin_unlock_bh(&bat_priv->tt.last_changeset_lock); } else { @@ -152988,7 +153070,7 @@ index 0e80fd1..65abb77 100644 /* allocate the tvlv, put the tt_data and all the tt_vlan_data * in the initial part -@@ -3308,10 +3308,10 @@ static void batadv_tt_local_commit_changes_nolock(struct batadv_priv *bat_priv) +@@ -3344,10 +3344,10 @@ static void batadv_tt_local_commit_changes_nolock(struct batadv_priv *bat_priv) batadv_tt_local_update_crc(bat_priv); /* Increment the TTVN only once per OGM interval */ @@ -153002,10 +153084,10 @@ index 0e80fd1..65abb77 100644 /* reset the sending counter */ atomic_set(&bat_priv->tt.ogm_append_cnt, BATADV_TT_OGM_APPEND_MAX); diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index 3437b66..8fa5b54 100644 +index 1e47fbe..7b48a58 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h -@@ -81,7 +81,7 @@ enum batadv_dhcp_recipient { +@@ -83,7 +83,7 @@ enum batadv_dhcp_recipient { struct batadv_hard_iface_bat_iv { unsigned char *ogm_buff; int ogm_buff_len; @@ -153014,7 +153096,7 @@ index 3437b66..8fa5b54 100644 }; /** -@@ -551,7 +551,7 @@ enum batadv_counters { +@@ -630,7 +630,7 @@ enum batadv_counters { * @work: work queue callback item for translation table purging */ struct batadv_priv_tt { @@ -153023,7 +153105,7 @@ index 3437b66..8fa5b54 100644 atomic_t ogm_append_cnt; atomic_t local_changes; struct list_head changes_list; -@@ -809,7 +809,7 @@ struct batadv_priv { +@@ -906,7 +906,7 @@ struct batadv_priv { atomic_t bonding; atomic_t fragmentation; atomic_t packet_size_max; @@ -153032,7 +153114,7 @@ index 3437b66..8fa5b54 100644 #ifdef CONFIG_BATMAN_ADV_BLA atomic_t bridge_loop_avoidance; #endif -@@ -828,7 +828,7 @@ struct batadv_priv { +@@ -925,7 +925,7 @@ struct batadv_priv { #endif u32 isolation_mark; u32 isolation_mark_mask; @@ -153166,11 +153248,31 @@ index 8e385a0..a5bdd8e 100644 tty_port_close(&dev->port, tty, filp); } +diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c +index 44114a9..376287c 100644 +--- a/net/bridge/br_netfilter_hooks.c ++++ b/net/bridge/br_netfilter_hooks.c +@@ -982,13 +982,13 @@ static void __net_exit brnf_exit_net(struct net *net) + brnet->enabled = false; + } + +-static struct pernet_operations brnf_net_ops __read_mostly = { ++static struct pernet_operations brnf_net_ops = { + .exit = brnf_exit_net, + .id = &brnf_net_id, + .size = sizeof(struct brnf_net), + }; + +-static struct notifier_block brnf_notifier __read_mostly = { ++static struct notifier_block brnf_notifier = { + .notifier_call = brnf_device_event, + }; + diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c -index 40197ff..58633af 100644 +index e9c635e..f55c87be 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c -@@ -1220,7 +1220,7 @@ static struct rtnl_af_ops br_af_ops __read_mostly = { +@@ -1219,7 +1219,7 @@ static struct rtnl_af_ops br_af_ops __read_mostly = { .get_link_af_size = br_get_link_af_size_filtered, }; @@ -153180,19 +153282,10 @@ index 40197ff..58633af 100644 .priv_size = sizeof(struct net_bridge), .setup = br_dev_setup, diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c -index 67b2e27..07fb939 100644 +index 5a61f35..57ab16d 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c -@@ -1521,6 +1521,8 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) - if (copy_from_user(&tmp, user, sizeof(tmp))) - return -EFAULT; - -+ tmp.name[sizeof(tmp.name) - 1] = '\0'; -+ - t = find_table_lock(net, tmp.name, &ret, &ebt_mutex); - if (!t) - return ret; -@@ -1543,7 +1545,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) +@@ -1549,7 +1549,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) tmp.valid_hooks = t->table->valid_hooks; } mutex_unlock(&ebt_mutex); @@ -153201,16 +153294,7 @@ index 67b2e27..07fb939 100644 BUGPRINT("c2u Didn't work\n"); ret = -EFAULT; break; -@@ -2332,6 +2334,8 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, - if (copy_from_user(&tmp, user, sizeof(tmp))) - return -EFAULT; - -+ tmp.name[sizeof(tmp.name) - 1] = '\0'; -+ - t = find_table_lock(net, tmp.name, &ret, &ebt_mutex); - if (!t) - return ret; -@@ -2345,7 +2349,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, +@@ -2353,7 +2353,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, goto out; tmp.valid_hooks = t->valid_hooks; @@ -153219,7 +153303,7 @@ index 67b2e27..07fb939 100644 ret = -EFAULT; break; } -@@ -2356,7 +2360,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, +@@ -2364,7 +2364,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, tmp.entries_size = t->table->entries_size; tmp.valid_hooks = t->table->valid_hooks; @@ -153364,7 +153448,7 @@ index 1a19b98..df2b4ec 100644 if (!can_dir) { printk(KERN_INFO "can: failed to create /proc/net/can . " diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c -index bcbec33..5a84f6f 100644 +index dcc18c6..a236374 100644 --- a/net/ceph/ceph_common.c +++ b/net/ceph/ceph_common.c @@ -5,7 +5,7 @@ @@ -153377,7 +153461,7 @@ index bcbec33..5a84f6f 100644 #include <linux/module.h> #include <linux/mount.h> diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c -index 9382619..0a029e7 100644 +index a550289..218652a 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -187,7 +187,7 @@ static void con_fault(struct ceph_connection *con); @@ -153530,7 +153614,7 @@ index fa9dc64..73dd85a 100644 return err; diff --git a/net/core/dev.c b/net/core/dev.c -index 0ef061b..94ee1d8 100644 +index 5c925ac..098bb2d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1766,7 +1766,7 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) @@ -153569,16 +153653,19 @@ index 0ef061b..94ee1d8 100644 { struct softnet_data *sd = this_cpu_ptr(&softnet_data); -@@ -4154,7 +4154,7 @@ ncls: - ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev); +@@ -4161,9 +4161,9 @@ ncls: } else { drop: -- atomic_long_inc(&skb->dev->rx_dropped); -+ atomic_long_inc_unchecked(&skb->dev->rx_dropped); + if (!deliver_exact) +- atomic_long_inc(&skb->dev->rx_dropped); ++ atomic_long_inc_unchecked(&skb->dev->rx_dropped); + else +- atomic_long_inc(&skb->dev->rx_nohandler); ++ atomic_long_inc_unchecked(&skb->dev->rx_nohandler); kfree_skb(skb); /* Jamal, now you will not able to escape explaining * me how you were going to use this. :-) -@@ -5117,7 +5117,7 @@ out_unlock: +@@ -5127,7 +5127,7 @@ out_unlock: return work; } @@ -153587,18 +153674,20 @@ index 0ef061b..94ee1d8 100644 { struct softnet_data *sd = this_cpu_ptr(&softnet_data); unsigned long time_limit = jiffies + 2; -@@ -7298,8 +7298,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, +@@ -7317,9 +7317,9 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, } else { netdev_stats_to_stats64(storage, &dev->stats); } - storage->rx_dropped += atomic_long_read(&dev->rx_dropped); - storage->tx_dropped += atomic_long_read(&dev->tx_dropped); +- storage->rx_nohandler += atomic_long_read(&dev->rx_nohandler); + storage->rx_dropped += atomic_long_read_unchecked(&dev->rx_dropped); + storage->tx_dropped += atomic_long_read_unchecked(&dev->tx_dropped); ++ storage->rx_nohandler += atomic_long_read_unchecked(&dev->rx_nohandler); return storage; } EXPORT_SYMBOL(dev_get_stats); -@@ -7922,7 +7922,7 @@ static void __net_exit netdev_exit(struct net *net) +@@ -7942,7 +7942,7 @@ static void __net_exit netdev_exit(struct net *net) kfree(net->dev_index_head); } @@ -153607,7 +153696,7 @@ index 0ef061b..94ee1d8 100644 .init = netdev_init, .exit = netdev_exit, }; -@@ -8022,7 +8022,7 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list) +@@ -8042,7 +8042,7 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list) rtnl_unlock(); } @@ -153636,10 +153725,10 @@ index b94b1d2..da3ed7c 100644 EXPORT_SYMBOL(dev_load); diff --git a/net/core/filter.c b/net/core/filter.c -index fb2951c..27ce8a9 100644 +index ca7f832..1d60a22 100644 --- a/net/core/filter.c +++ b/net/core/filter.c -@@ -588,7 +588,11 @@ do_pass: +@@ -590,7 +590,11 @@ do_pass: /* Unknown instruction. */ default: @@ -153652,7 +153741,7 @@ index fb2951c..27ce8a9 100644 } insn++; -@@ -632,7 +636,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen) +@@ -634,7 +638,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen) u16 *masks, memvalid = 0; /* One bit per cell, 16 cells */ int pc, ret = 0; @@ -153661,7 +153750,7 @@ index fb2951c..27ce8a9 100644 masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL); if (!masks) -@@ -1066,7 +1070,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog) +@@ -1068,7 +1072,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog) if (!fp) return -ENOMEM; @@ -153671,7 +153760,7 @@ index fb2951c..27ce8a9 100644 fp->len = fprog->len; /* Since unattached filters are not copied back to user diff --git a/net/core/flow.c b/net/core/flow.c -index 1033725..340f65d 100644 +index 3937b1b..b18d1cb 100644 --- a/net/core/flow.c +++ b/net/core/flow.c @@ -65,7 +65,7 @@ static void flow_cache_new_hashrnd(unsigned long arg) @@ -153683,7 +153772,16 @@ index 1033725..340f65d 100644 return 0; if (fle->object && !fle->object->ops->check(fle->object)) return 0; -@@ -242,7 +242,7 @@ flow_cache_lookup(struct net *net, const struct flowi *key, u16 family, u8 dir, +@@ -238,7 +238,7 @@ flow_cache_lookup(struct net *net, const struct flowi *key, u16 family, u8 dir, + + if (fcp->hash_count > 2 * fc->high_watermark || + atomic_read(&net->xfrm.flow_cache_gc_count) > fc->high_watermark) { +- atomic_inc(&net->xfrm.flow_cache_genid); ++ atomic_inc_unchecked(&net->xfrm.flow_cache_genid); + flo = ERR_PTR(-ENOBUFS); + goto ret_object; + } +@@ -253,7 +253,7 @@ flow_cache_lookup(struct net *net, const struct flowi *key, u16 family, u8 dir, hlist_add_head(&fle->u.hlist, &fcp->hash_table[hash]); fcp->hash_count++; } @@ -153692,7 +153790,7 @@ index 1033725..340f65d 100644 flo = fle->object; if (!flo) goto ret_object; -@@ -263,7 +263,7 @@ nocache: +@@ -274,7 +274,7 @@ nocache: } flo = resolver(net, key, family, dir, flo, ctx); if (fle) { @@ -153856,10 +153954,10 @@ index 2bf8329..ea323e4 100644 .exit = dev_mc_net_exit, }; diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c -index b6c8a66..0da5ffc 100644 +index 2b3f76f..66dfd6d 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c -@@ -287,7 +287,7 @@ static ssize_t carrier_changes_show(struct device *dev, +@@ -289,7 +289,7 @@ static ssize_t carrier_changes_show(struct device *dev, { struct net_device *netdev = to_net_dev(dev); return sprintf(buf, fmt_dec, @@ -153940,7 +154038,7 @@ index 94acfc8..01545c0 100644 iph->ttl = 64; iph->protocol = IPPROTO_UDP; diff --git a/net/core/pktgen.c b/net/core/pktgen.c -index 1474cfd..961bc9f 100644 +index 20999aa..a96919e 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -3829,7 +3829,7 @@ static int __net_init pg_net_init(struct net *net) @@ -153953,7 +154051,7 @@ index 1474cfd..961bc9f 100644 pr_warn("cannot create /proc/net/%s\n", PG_PROC_DIR); return -ENODEV; diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c -index 482c371..150e1ee 100644 +index 65763c2..4ee3747 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -61,7 +61,7 @@ struct rtnl_link { @@ -153991,7 +154089,7 @@ index 482c371..150e1ee 100644 } EXPORT_SYMBOL_GPL(__rtnl_link_unregister); -@@ -1237,7 +1240,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev, +@@ -1243,7 +1246,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev, (dev->ifalias && nla_put_string(skb, IFLA_IFALIAS, dev->ifalias)) || nla_put_u32(skb, IFLA_CARRIER_CHANGES, @@ -154000,7 +154098,7 @@ index 482c371..150e1ee 100644 nla_put_u8(skb, IFLA_PROTO_DOWN, dev->proto_down)) goto nla_put_failure; -@@ -3397,7 +3400,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) +@@ -3496,7 +3499,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) __rtnl_unlock(); rtnl = net->rtnl; { @@ -154062,10 +154160,10 @@ index 2696aef..dbd5807 100644 if (!err) err = put_user(SCM_RIGHTS, &cm->cmsg_type); diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index 9835d9a..d49237a 100644 +index e561f9f..25281cc 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -971,7 +971,8 @@ static void skb_headers_offset_update(struct sk_buff *skb, int off) +@@ -1046,7 +1046,8 @@ static void skb_headers_offset_update(struct sk_buff *skb, int off) if (skb->ip_summed == CHECKSUM_PARTIAL) skb->csum_start += off; /* {transport,network,mac}_header and tail are relative to skb->head */ @@ -154075,7 +154173,7 @@ index 9835d9a..d49237a 100644 skb->network_header += off; if (skb_mac_header_was_set(skb)) skb->mac_header += off; -@@ -2105,7 +2106,7 @@ EXPORT_SYMBOL(__skb_checksum); +@@ -2173,7 +2174,7 @@ EXPORT_SYMBOL(__skb_checksum); __wsum skb_checksum(const struct sk_buff *skb, int offset, int len, __wsum csum) { @@ -154084,7 +154182,7 @@ index 9835d9a..d49237a 100644 .update = csum_partial_ext, .combine = csum_block_add_ext, }; -@@ -3338,12 +3339,14 @@ void __init skb_init(void) +@@ -3414,12 +3415,14 @@ void __init skb_init(void) skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buff), 0, @@ -154102,10 +154200,10 @@ index 9835d9a..d49237a 100644 } diff --git a/net/core/sock.c b/net/core/sock.c -index 6c1c8bc..20a14a7 100644 +index 7e73c26..e02877c 100644 --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -409,7 +409,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) +@@ -412,7 +412,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) struct sk_buff_head *list = &sk->sk_receive_queue; if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) { @@ -154114,7 +154212,7 @@ index 6c1c8bc..20a14a7 100644 trace_sock_rcvqueue_full(sk, skb); return -ENOMEM; } -@@ -419,7 +419,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) +@@ -422,7 +422,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) return err; if (!sk_rmem_schedule(sk, skb, skb->truesize)) { @@ -154123,7 +154221,7 @@ index 6c1c8bc..20a14a7 100644 return -ENOBUFS; } -@@ -452,7 +452,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) +@@ -455,7 +455,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) skb->dev = NULL; if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) { @@ -154132,7 +154230,7 @@ index 6c1c8bc..20a14a7 100644 goto discard_and_relse; } if (nested) -@@ -470,7 +470,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) +@@ -473,7 +473,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_); } else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) { bh_unlock_sock(sk); @@ -154141,7 +154239,7 @@ index 6c1c8bc..20a14a7 100644 goto discard_and_relse; } -@@ -877,19 +877,6 @@ set_rcvbuf: +@@ -880,19 +880,6 @@ set_rcvbuf: } break; @@ -154161,7 +154259,7 @@ index 6c1c8bc..20a14a7 100644 case SO_ATTACH_REUSEPORT_CBPF: ret = -EINVAL; if (optlen == sizeof(struct sock_fprog)) { -@@ -903,6 +890,20 @@ set_rcvbuf: +@@ -906,6 +893,20 @@ set_rcvbuf: } break; @@ -154182,7 +154280,7 @@ index 6c1c8bc..20a14a7 100644 case SO_ATTACH_REUSEPORT_EBPF: ret = -EINVAL; if (optlen == sizeof(u32)) { -@@ -916,6 +917,8 @@ set_rcvbuf: +@@ -919,6 +920,8 @@ set_rcvbuf: } break; @@ -154191,7 +154289,7 @@ index 6c1c8bc..20a14a7 100644 case SO_DETACH_FILTER: ret = sk_detach_filter(sk); break; -@@ -1021,12 +1024,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname, +@@ -1028,12 +1031,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname, struct timeval tm; } v; @@ -154207,7 +154305,7 @@ index 6c1c8bc..20a14a7 100644 return -EINVAL; memset(&v, 0, sizeof(v)); -@@ -1164,11 +1167,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname, +@@ -1171,11 +1174,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname, case SO_PEERNAME: { @@ -154221,7 +154319,7 @@ index 6c1c8bc..20a14a7 100644 return -EINVAL; if (copy_to_user(optval, address, len)) return -EFAULT; -@@ -1256,7 +1259,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, +@@ -1263,7 +1266,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, if (len > lv) len = lv; @@ -154230,7 +154328,7 @@ index 6c1c8bc..20a14a7 100644 return -EFAULT; lenout: if (put_user(len, optlen)) -@@ -1535,7 +1538,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) +@@ -1543,7 +1546,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) newsk->sk_err = 0; newsk->sk_priority = 0; newsk->sk_incoming_cpu = raw_smp_processor_id(); @@ -154239,7 +154337,7 @@ index 6c1c8bc..20a14a7 100644 /* * Before updating sk_refcnt, we must commit prior changes to memory * (Documentation/RCU/rculist_nulls.txt for details) -@@ -2402,7 +2405,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) +@@ -2410,7 +2413,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) */ smp_wmb(); atomic_set(&sk->sk_refcnt, 1); @@ -154248,7 +154346,7 @@ index 6c1c8bc..20a14a7 100644 } EXPORT_SYMBOL(sock_init_data); -@@ -2531,6 +2534,7 @@ void sock_enable_timestamp(struct sock *sk, int flag) +@@ -2539,6 +2542,7 @@ void sock_enable_timestamp(struct sock *sk, int flag) int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, int level, int type) { @@ -154256,7 +154354,7 @@ index 6c1c8bc..20a14a7 100644 struct sock_exterr_skb *serr; struct sk_buff *skb; int copied, err; -@@ -2552,7 +2556,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, +@@ -2560,7 +2564,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, sock_recv_timestamp(msg, sk, skb); serr = SKB_EXT_ERR(skb); @@ -154266,7 +154364,7 @@ index 6c1c8bc..20a14a7 100644 msg->msg_flags |= MSG_ERRQUEUE; err = copied; -@@ -3004,7 +3009,7 @@ static __net_exit void proto_exit_net(struct net *net) +@@ -3012,7 +3017,7 @@ static __net_exit void proto_exit_net(struct net *net) } @@ -154462,10 +154560,10 @@ index 5325b54..a0d4d69 100644 *lenp = len; diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c -index d8fb47f..f0914ca 100644 +index c28c474..dad38e7 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c -@@ -985,7 +985,7 @@ static struct packet_type dsa_pack_type __read_mostly = { +@@ -980,7 +980,7 @@ static struct packet_type dsa_pack_type __read_mostly = { .func = dsa_switch_rcv, }; @@ -154501,7 +154599,7 @@ index a2c7e4c..3dc9f67 100644 .maxtype = IFLA_HSR_MAX, .policy = hsr_policy, diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c -index 737c87a..33f9fec 100644 +index 0023c90..5cda011 100644 --- a/net/ieee802154/6lowpan/core.c +++ b/net/ieee802154/6lowpan/core.c @@ -182,7 +182,7 @@ static void lowpan_dellink(struct net_device *ldev, struct list_head *head) @@ -154585,10 +154683,10 @@ index c35fdfa..063ef67 100644 return NULL; } diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c -index 5c5db66..cc029f2 100644 +index 7ad0e56..d8028ad 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c -@@ -1389,7 +1389,7 @@ int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) +@@ -1425,7 +1425,7 @@ int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) return ip_recv_error(sk, msg, len, addr_len); #if IS_ENABLED(CONFIG_IPV6) if (sk->sk_family == AF_INET6) @@ -154597,7 +154695,7 @@ index 5c5db66..cc029f2 100644 #endif return -EINVAL; } -@@ -1591,7 +1591,7 @@ static __net_exit void ipv4_mib_exit_net(struct net *net) +@@ -1634,7 +1634,7 @@ static __net_exit void ipv4_mib_exit_net(struct net *net) free_percpu(net->mib.tcp_statistics); } @@ -154606,7 +154704,7 @@ index 5c5db66..cc029f2 100644 .init = ipv4_mib_init_net, .exit = ipv4_mib_exit_net, }; -@@ -1624,7 +1624,7 @@ static __net_exit void inet_exit_net(struct net *net) +@@ -1675,7 +1675,7 @@ static __net_exit void inet_exit_net(struct net *net) { } @@ -154616,7 +154714,7 @@ index 5c5db66..cc029f2 100644 .exit = inet_exit_net, }; diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c -index 59b3e0e..ff060b8 100644 +index c34c754..df0b2c8 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c @@ -332,7 +332,7 @@ static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb) @@ -154629,7 +154727,7 @@ index 59b3e0e..ff060b8 100644 struct dst_entry *dst = NULL; diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c -index 0212591..250d044 100644 +index e333bc8..281d54d 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -69,7 +69,8 @@ @@ -154652,7 +154750,7 @@ index 0212591..250d044 100644 [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1, [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, -@@ -1583,7 +1585,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) +@@ -1605,7 +1607,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) idx = 0; head = &net->dev_index_head[h]; rcu_read_lock(); @@ -154661,7 +154759,7 @@ index 0212591..250d044 100644 net->dev_base_seq; hlist_for_each_entry_rcu(dev, head, index_hlist) { if (idx < s_idx) -@@ -1911,7 +1913,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb, +@@ -1939,7 +1941,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb, idx = 0; head = &net->dev_index_head[h]; rcu_read_lock(); @@ -154670,7 +154768,7 @@ index 0212591..250d044 100644 net->dev_base_seq; hlist_for_each_entry_rcu(dev, head, index_hlist) { if (idx < s_idx) -@@ -2152,7 +2154,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write, +@@ -2180,7 +2182,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write, #define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \ DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush) @@ -154679,7 +154777,7 @@ index 0212591..250d044 100644 struct ctl_table_header *sysctl_header; struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX]; } devinet_sysctl = { -@@ -2286,7 +2288,7 @@ static __net_init int devinet_init_net(struct net *net) +@@ -2318,7 +2320,7 @@ static __net_init int devinet_init_net(struct net *net) int err; struct ipv4_devconf *all, *dflt; #ifdef CONFIG_SYSCTL @@ -154688,7 +154786,7 @@ index 0212591..250d044 100644 struct ctl_table_header *forw_hdr; #endif -@@ -2304,7 +2306,7 @@ static __net_init int devinet_init_net(struct net *net) +@@ -2336,7 +2338,7 @@ static __net_init int devinet_init_net(struct net *net) goto err_alloc_dflt; #ifdef CONFIG_SYSCTL @@ -154697,7 +154795,7 @@ index 0212591..250d044 100644 if (!tbl) goto err_alloc_ctl; -@@ -2324,7 +2326,10 @@ static __net_init int devinet_init_net(struct net *net) +@@ -2356,7 +2358,10 @@ static __net_init int devinet_init_net(struct net *net) goto err_reg_dflt; err = -ENOMEM; @@ -154709,7 +154807,7 @@ index 0212591..250d044 100644 if (!forw_hdr) goto err_reg_ctl; net->ipv4.forw_hdr = forw_hdr; -@@ -2340,8 +2345,7 @@ err_reg_ctl: +@@ -2372,8 +2377,7 @@ err_reg_ctl: err_reg_dflt: __devinet_sysctl_unregister(all); err_reg_all: @@ -154719,7 +154817,7 @@ index 0212591..250d044 100644 err_alloc_ctl: #endif if (dflt != &ipv4_devconf_dflt) -@@ -2368,7 +2372,7 @@ static __net_exit void devinet_exit_net(struct net *net) +@@ -2400,7 +2404,7 @@ static __net_exit void devinet_exit_net(struct net *net) kfree(net->ipv4.devconf_all); } @@ -154770,10 +154868,10 @@ index 2b68418..fb7bee8 100644 return nh->nh_saddr; } diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c -index 36e2697..33cf94a 100644 +index 6333489..be244b4 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c -@@ -1231,7 +1231,7 @@ fail: +@@ -1228,7 +1228,7 @@ fail: return err; } @@ -154783,10 +154881,10 @@ index 36e2697..33cf94a 100644 .exit = icmp_sk_exit, }; diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c -index 6414891..30ec9bf 100644 +index bc5196e..dbe0be2 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c -@@ -670,8 +670,8 @@ struct sock *inet_csk_clone_lock(const struct sock *sk, +@@ -662,8 +662,8 @@ struct sock *inet_csk_clone_lock(const struct sock *sk, newsk->sk_write_space = sk_stream_write_space; newsk->sk_mark = inet_rsk(req)->ir_mark; @@ -154798,10 +154896,10 @@ index 6414891..30ec9bf 100644 newicsk->icsk_retransmits = 0; newicsk->icsk_backoff = 0; diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c -index 6029157..92bcf89 100644 +index 5fdb02f..dc6f124 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c -@@ -985,7 +985,7 @@ static int inet_diag_rcv_msg_compat(struct sk_buff *skb, struct nlmsghdr *nlh) +@@ -986,7 +986,7 @@ static int inet_diag_rcv_msg_compat(struct sk_buff *skb, struct nlmsghdr *nlh) return -EINVAL; } { @@ -154810,7 +154908,7 @@ index 6029157..92bcf89 100644 .dump = inet_diag_dump_compat, }; return netlink_dump_start(net->diag_nlsk, skb, nlh, &c); -@@ -1016,7 +1016,7 @@ static int inet_diag_handler_cmd(struct sk_buff *skb, struct nlmsghdr *h) +@@ -1017,7 +1017,7 @@ static int inet_diag_handler_cmd(struct sk_buff *skb, struct nlmsghdr *h) return -EINVAL; } { @@ -154820,7 +154918,7 @@ index 6029157..92bcf89 100644 }; return netlink_dump_start(net->diag_nlsk, skb, h, &c); diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c -index ccc5980..67cba85 100644 +index 0d9e9d7..9679cf4 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c @@ -19,6 +19,7 @@ @@ -154829,9 +154927,9 @@ index ccc5980..67cba85 100644 #include <linux/vmalloc.h> +#include <linux/security.h> + #include <net/addrconf.h> #include <net/inet_connection_sock.h> - #include <net/inet_hashtables.h> -@@ -54,6 +55,8 @@ u32 sk_ehashfn(const struct sock *sk) +@@ -56,6 +57,8 @@ u32 sk_ehashfn(const struct sock *sk) sk->sk_daddr, sk->sk_dport); } @@ -154840,14 +154938,16 @@ index ccc5980..67cba85 100644 /* * Allocate and initialize a new local port bind bucket. * The bindhash mutex for snum's hash chain must be held here. -@@ -586,6 +589,7 @@ ok: - - if (tw) - inet_twsk_deschedule_put(tw); -+ gr_update_task_in_ip_table(inet_sk(sk)); - - ret = 0; - goto out; +@@ -665,6 +668,9 @@ ok: + spin_unlock(&head->lock); + if (tw) + inet_twsk_deschedule_put(tw); ++ ++ gr_update_task_in_ip_table(inet_sk(sk)); ++ + local_bh_enable(); + return 0; + } diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c index c67f9bd..7a108d1 100644 --- a/net/ipv4/inet_timewait_sock.c @@ -154875,10 +154975,10 @@ index 86fa458..5f601b9 100644 p->rate_tokens = 0; /* 60*HZ is arbitrary, but chosen enough high so that the first diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c -index 187c6fc..f4a802c 100644 +index efbd47d..cb8f074 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c -@@ -284,7 +284,7 @@ static int ip_frag_too_far(struct ipq *qp) +@@ -282,7 +282,7 @@ static int ip_frag_too_far(struct ipq *qp) return 0; start = qp->rid; @@ -154887,7 +154987,7 @@ index 187c6fc..f4a802c 100644 qp->rid = end; rc = qp->q.fragments && (end - start) > max; -@@ -775,12 +775,11 @@ static struct ctl_table ip4_frags_ctl_table[] = { +@@ -773,12 +773,11 @@ static struct ctl_table ip4_frags_ctl_table[] = { static int __net_init ip4_frags_ns_ctl_register(struct net *net) { @@ -154902,20 +155002,21 @@ index 187c6fc..f4a802c 100644 if (!table) goto err_alloc; -@@ -794,9 +793,10 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net) - /* Don't export sysctls to unprivileged users */ - if (net->user_ns != &init_user_ns) - table[0].procname = NULL; +@@ -789,9 +788,10 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net) + table[1].extra2 = &net->ipv4.frags.high_thresh; + table[2].data = &net->ipv4.frags.timeout; + table[3].data = &net->ipv4.frags.max_dist; - } +- +- hdr = register_net_sysctl(net, "net/ipv4", table); + hdr = register_net_sysctl(net, "net/ipv4", table); + } else + hdr = register_net_sysctl(net, "net/ipv4", ip4_frags_ns_ctl_table); - -- hdr = register_net_sysctl(net, "net/ipv4", table); ++ if (!hdr) goto err_reg; -@@ -804,8 +804,7 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net) +@@ -799,8 +799,7 @@ static int __net_init ip4_frags_ns_ctl_register(struct net *net) return 0; err_reg: @@ -154926,7 +155027,7 @@ index 187c6fc..f4a802c 100644 return -ENOMEM; } diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c -index d0c1e77..6ba345a 100644 +index 4cc8421..ba5f709 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -116,7 +116,7 @@ static bool log_ecn_error = true; @@ -154938,7 +155039,7 @@ index d0c1e77..6ba345a 100644 static int ipgre_tunnel_init(struct net_device *dev); static int ipgre_net_id __read_mostly; -@@ -1194,7 +1194,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = { +@@ -1231,7 +1231,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = { [IFLA_GRE_COLLECT_METADATA] = { .type = NLA_FLAG }, }; @@ -154947,7 +155048,7 @@ index d0c1e77..6ba345a 100644 .kind = "gre", .maxtype = IFLA_GRE_MAX, .policy = ipgre_policy, -@@ -1209,7 +1209,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = { +@@ -1246,7 +1246,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = { .get_link_net = ip_tunnel_get_link_net, }; @@ -154957,7 +155058,7 @@ index d0c1e77..6ba345a 100644 .maxtype = IFLA_GRE_MAX, .policy = ipgre_policy, diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c -index d77eb0c..4482235 100644 +index e3d7827..e59d2a7 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c @@ -148,6 +148,10 @@ @@ -154982,10 +155083,10 @@ index d77eb0c..4482235 100644 ICMP_PROT_UNREACH, 0); } diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c -index a501242..ea6b81d 100644 +index 035ad64..a2f9d47 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c -@@ -1310,7 +1310,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, +@@ -1311,7 +1311,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, len = min_t(unsigned int, len, opt->optlen); if (put_user(len, optlen)) return -EFAULT; @@ -154995,7 +155096,7 @@ index a501242..ea6b81d 100644 return -EFAULT; return 0; } -@@ -1443,7 +1444,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, +@@ -1447,7 +1448,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, if (sk->sk_type != SOCK_STREAM) return -ENOPROTOOPT; @@ -155005,7 +155106,7 @@ index a501242..ea6b81d 100644 msg.msg_flags = flags; diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c -index 5cf10b7..2e40e55 100644 +index a917903..b0bdff6 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c @@ -44,7 +44,7 @@ @@ -155017,7 +155118,7 @@ index 5cf10b7..2e40e55 100644 static int vti_net_id __read_mostly; static int vti_tunnel_init(struct net_device *dev); -@@ -524,7 +524,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = { +@@ -542,7 +542,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = { [IFLA_VTI_REMOTE] = { .len = FIELD_SIZEOF(struct iphdr, daddr) }, }; @@ -155058,7 +155159,7 @@ index 2ed9dd2..0682cfe 100644 return res; } diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c -index 4044da6..7e21175 100644 +index ec51d02..4e90ba9 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c @@ -123,7 +123,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN"); @@ -155080,113 +155181,10 @@ index 4044da6..7e21175 100644 .maxtype = IFLA_IPTUN_MAX, .policy = ipip_policy, diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c -index b488cac..7955324 100644 +index 85d60c6..a109f11 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c -@@ -359,11 +359,12 @@ unsigned int arpt_do_table(struct sk_buff *skb, - } - - /* All zeroes == unconditional rule. */ --static inline bool unconditional(const struct arpt_arp *arp) -+static inline bool unconditional(const struct arpt_entry *e) - { - static const struct arpt_arp uncond; - -- return memcmp(arp, &uncond, sizeof(uncond)) == 0; -+ return e->target_offset == sizeof(struct arpt_entry) && -+ memcmp(&e->arp, &uncond, sizeof(uncond)) == 0; - } - - /* Figures out from what hook each rule can be called: returns 0 if -@@ -402,11 +403,10 @@ static int mark_source_chains(const struct xt_table_info *newinfo, - |= ((1 << hook) | (1 << NF_ARP_NUMHOOKS)); - - /* Unconditional return/END. */ -- if ((e->target_offset == sizeof(struct arpt_entry) && -+ if ((unconditional(e) && - (strcmp(t->target.u.user.name, - XT_STANDARD_TARGET) == 0) && -- t->verdict < 0 && unconditional(&e->arp)) || -- visited) { -+ t->verdict < 0) || visited) { - unsigned int oldpos, size; - - if ((strcmp(t->target.u.user.name, -@@ -474,14 +474,12 @@ next: - return 1; - } - --static inline int check_entry(const struct arpt_entry *e, const char *name) -+static inline int check_entry(const struct arpt_entry *e) - { - const struct xt_entry_target *t; - -- if (!arp_checkentry(&e->arp)) { -- duprintf("arp_tables: arp check failed %p %s.\n", e, name); -+ if (!arp_checkentry(&e->arp)) - return -EINVAL; -- } - - if (e->target_offset + sizeof(struct xt_entry_target) > e->next_offset) - return -EINVAL; -@@ -522,10 +520,6 @@ find_check_entry(struct arpt_entry *e, const char *name, unsigned int size) - struct xt_target *target; - int ret; - -- ret = check_entry(e, name); -- if (ret) -- return ret; -- - e->counters.pcnt = xt_percpu_counter_alloc(); - if (IS_ERR_VALUE(e->counters.pcnt)) - return -ENOMEM; -@@ -557,7 +551,7 @@ static bool check_underflow(const struct arpt_entry *e) - const struct xt_entry_target *t; - unsigned int verdict; - -- if (!unconditional(&e->arp)) -+ if (!unconditional(e)) - return false; - t = arpt_get_target_c(e); - if (strcmp(t->u.user.name, XT_STANDARD_TARGET) != 0) -@@ -576,9 +570,11 @@ static inline int check_entry_size_and_hooks(struct arpt_entry *e, - unsigned int valid_hooks) - { - unsigned int h; -+ int err; - - if ((unsigned long)e % __alignof__(struct arpt_entry) != 0 || -- (unsigned char *)e + sizeof(struct arpt_entry) >= limit) { -+ (unsigned char *)e + sizeof(struct arpt_entry) >= limit || -+ (unsigned char *)e + e->next_offset > limit) { - duprintf("Bad offset %p\n", e); - return -EINVAL; - } -@@ -590,6 +586,10 @@ static inline int check_entry_size_and_hooks(struct arpt_entry *e, - return -EINVAL; - } - -+ err = check_entry(e); -+ if (err) -+ return err; -+ - /* Check hooks & underflows */ - for (h = 0; h < NF_ARP_NUMHOOKS; h++) { - if (!(valid_hooks & (1 << h))) -@@ -598,9 +598,9 @@ static inline int check_entry_size_and_hooks(struct arpt_entry *e, - newinfo->hook_entry[h] = hook_entries[h]; - if ((unsigned char *)e - base == underflows[h]) { - if (!check_underflow(e)) { -- pr_err("Underflows must be unconditional and " -- "use the STANDARD target with " -- "ACCEPT/DROP\n"); -+ pr_debug("Underflows must be unconditional and " -+ "use the STANDARD target with " -+ "ACCEPT/DROP\n"); - return -EINVAL; - } - newinfo->underflow[h] = underflows[h]; -@@ -892,14 +892,14 @@ static int compat_table_info(const struct xt_table_info *info, +@@ -897,14 +897,14 @@ static int compat_table_info(const struct xt_table_info *info, #endif static int get_info(struct net *net, void __user *user, @@ -155204,7 +155202,7 @@ index b488cac..7955324 100644 sizeof(struct arpt_getinfo)); return -EINVAL; } -@@ -936,7 +936,7 @@ static int get_info(struct net *net, void __user *user, +@@ -941,7 +941,7 @@ static int get_info(struct net *net, void __user *user, info.size = private->size; strcpy(info.name, name); @@ -155213,42 +155211,7 @@ index b488cac..7955324 100644 ret = -EFAULT; else ret = 0; -@@ -969,6 +969,7 @@ static int get_entries(struct net *net, struct arpt_get_entries __user *uptr, - sizeof(struct arpt_get_entries) + get.size); - return -EINVAL; - } -+ get.name[sizeof(get.name) - 1] = '\0'; - - t = xt_find_table_lock(net, NFPROTO_ARP, get.name); - if (!IS_ERR_OR_NULL(t)) { -@@ -1233,7 +1234,8 @@ check_compat_entry_size_and_hooks(struct compat_arpt_entry *e, - - duprintf("check_compat_entry_size_and_hooks %p\n", e); - if ((unsigned long)e % __alignof__(struct compat_arpt_entry) != 0 || -- (unsigned char *)e + sizeof(struct compat_arpt_entry) >= limit) { -+ (unsigned char *)e + sizeof(struct compat_arpt_entry) >= limit || -+ (unsigned char *)e + e->next_offset > limit) { - duprintf("Bad offset %p, limit = %p\n", e, limit); - return -EINVAL; - } -@@ -1246,7 +1248,7 @@ check_compat_entry_size_and_hooks(struct compat_arpt_entry *e, - } - - /* For purposes of check_entry casting the compat entry is fine */ -- ret = check_entry((struct arpt_entry *)e, name); -+ ret = check_entry((struct arpt_entry *)e); - if (ret) - return ret; - -@@ -1662,6 +1664,7 @@ static int compat_get_entries(struct net *net, - *len, sizeof(get) + get.size); - return -EINVAL; - } -+ get.name[sizeof(get.name) - 1] = '\0'; - - xt_compat_lock(NFPROTO_ARP); - t = xt_find_table_lock(net, NFPROTO_ARP, get.name); -@@ -1701,7 +1704,7 @@ static int compat_do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, +@@ -1589,7 +1589,7 @@ static int compat_do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, switch (cmd) { case ARPT_SO_GET_INFO: @@ -155257,7 +155220,7 @@ index b488cac..7955324 100644 break; case ARPT_SO_GET_ENTRIES: ret = compat_get_entries(sock_net(sk), user, len); -@@ -1746,7 +1749,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len +@@ -1634,7 +1634,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len switch (cmd) { case ARPT_SO_GET_INFO: @@ -155267,127 +155230,10 @@ index b488cac..7955324 100644 case ARPT_SO_GET_ENTRIES: diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c -index b99affa..c657db5 100644 +index 0984ea3..d1125b0 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c -@@ -168,11 +168,12 @@ get_entry(const void *base, unsigned int offset) - - /* All zeroes == unconditional rule. */ - /* Mildly perf critical (only if packet tracing is on) */ --static inline bool unconditional(const struct ipt_ip *ip) -+static inline bool unconditional(const struct ipt_entry *e) - { - static const struct ipt_ip uncond; - -- return memcmp(ip, &uncond, sizeof(uncond)) == 0; -+ return e->target_offset == sizeof(struct ipt_entry) && -+ memcmp(&e->ip, &uncond, sizeof(uncond)) == 0; - #undef FWINV - } - -@@ -229,11 +230,10 @@ get_chainname_rulenum(const struct ipt_entry *s, const struct ipt_entry *e, - } else if (s == e) { - (*rulenum)++; - -- if (s->target_offset == sizeof(struct ipt_entry) && -+ if (unconditional(s) && - strcmp(t->target.u.kernel.target->name, - XT_STANDARD_TARGET) == 0 && -- t->verdict < 0 && -- unconditional(&s->ip)) { -+ t->verdict < 0) { - /* Tail of chains: STANDARD target (return/policy) */ - *comment = *chainname == hookname - ? comments[NF_IP_TRACE_COMMENT_POLICY] -@@ -476,11 +476,10 @@ mark_source_chains(const struct xt_table_info *newinfo, - e->comefrom |= ((1 << hook) | (1 << NF_INET_NUMHOOKS)); - - /* Unconditional return/END. */ -- if ((e->target_offset == sizeof(struct ipt_entry) && -+ if ((unconditional(e) && - (strcmp(t->target.u.user.name, - XT_STANDARD_TARGET) == 0) && -- t->verdict < 0 && unconditional(&e->ip)) || -- visited) { -+ t->verdict < 0) || visited) { - unsigned int oldpos, size; - - if ((strcmp(t->target.u.user.name, -@@ -569,14 +568,12 @@ static void cleanup_match(struct xt_entry_match *m, struct net *net) - } - - static int --check_entry(const struct ipt_entry *e, const char *name) -+check_entry(const struct ipt_entry *e) - { - const struct xt_entry_target *t; - -- if (!ip_checkentry(&e->ip)) { -- duprintf("ip check failed %p %s.\n", e, name); -+ if (!ip_checkentry(&e->ip)) - return -EINVAL; -- } - - if (e->target_offset + sizeof(struct xt_entry_target) > - e->next_offset) -@@ -666,10 +663,6 @@ find_check_entry(struct ipt_entry *e, struct net *net, const char *name, - struct xt_mtchk_param mtpar; - struct xt_entry_match *ematch; - -- ret = check_entry(e, name); -- if (ret) -- return ret; -- - e->counters.pcnt = xt_percpu_counter_alloc(); - if (IS_ERR_VALUE(e->counters.pcnt)) - return -ENOMEM; -@@ -721,7 +714,7 @@ static bool check_underflow(const struct ipt_entry *e) - const struct xt_entry_target *t; - unsigned int verdict; - -- if (!unconditional(&e->ip)) -+ if (!unconditional(e)) - return false; - t = ipt_get_target_c(e); - if (strcmp(t->u.user.name, XT_STANDARD_TARGET) != 0) -@@ -741,9 +734,11 @@ check_entry_size_and_hooks(struct ipt_entry *e, - unsigned int valid_hooks) - { - unsigned int h; -+ int err; - - if ((unsigned long)e % __alignof__(struct ipt_entry) != 0 || -- (unsigned char *)e + sizeof(struct ipt_entry) >= limit) { -+ (unsigned char *)e + sizeof(struct ipt_entry) >= limit || -+ (unsigned char *)e + e->next_offset > limit) { - duprintf("Bad offset %p\n", e); - return -EINVAL; - } -@@ -755,6 +750,10 @@ check_entry_size_and_hooks(struct ipt_entry *e, - return -EINVAL; - } - -+ err = check_entry(e); -+ if (err) -+ return err; -+ - /* Check hooks & underflows */ - for (h = 0; h < NF_INET_NUMHOOKS; h++) { - if (!(valid_hooks & (1 << h))) -@@ -763,9 +762,9 @@ check_entry_size_and_hooks(struct ipt_entry *e, - newinfo->hook_entry[h] = hook_entries[h]; - if ((unsigned char *)e - base == underflows[h]) { - if (!check_underflow(e)) { -- pr_err("Underflows must be unconditional and " -- "use the STANDARD target with " -- "ACCEPT/DROP\n"); -+ pr_debug("Underflows must be unconditional and " -+ "use the STANDARD target with " -+ "ACCEPT/DROP\n"); - return -EINVAL; - } - newinfo->underflow[h] = underflows[h]; -@@ -1078,14 +1077,14 @@ static int compat_table_info(const struct xt_table_info *info, +@@ -1082,14 +1082,14 @@ static int compat_table_info(const struct xt_table_info *info, #endif static int get_info(struct net *net, void __user *user, @@ -155405,7 +155251,7 @@ index b99affa..c657db5 100644 sizeof(struct ipt_getinfo)); return -EINVAL; } -@@ -1122,7 +1121,7 @@ static int get_info(struct net *net, void __user *user, +@@ -1126,7 +1126,7 @@ static int get_info(struct net *net, void __user *user, info.size = private->size; strcpy(info.name, name); @@ -155414,42 +155260,7 @@ index b99affa..c657db5 100644 ret = -EFAULT; else ret = 0; -@@ -1157,6 +1156,7 @@ get_entries(struct net *net, struct ipt_get_entries __user *uptr, - *len, sizeof(get) + get.size); - return -EINVAL; - } -+ get.name[sizeof(get.name) - 1] = '\0'; - - t = xt_find_table_lock(net, AF_INET, get.name); - if (!IS_ERR_OR_NULL(t)) { -@@ -1493,7 +1493,8 @@ check_compat_entry_size_and_hooks(struct compat_ipt_entry *e, - - duprintf("check_compat_entry_size_and_hooks %p\n", e); - if ((unsigned long)e % __alignof__(struct compat_ipt_entry) != 0 || -- (unsigned char *)e + sizeof(struct compat_ipt_entry) >= limit) { -+ (unsigned char *)e + sizeof(struct compat_ipt_entry) >= limit || -+ (unsigned char *)e + e->next_offset > limit) { - duprintf("Bad offset %p, limit = %p\n", e, limit); - return -EINVAL; - } -@@ -1506,7 +1507,7 @@ check_compat_entry_size_and_hooks(struct compat_ipt_entry *e, - } - - /* For purposes of check_entry casting the compat entry is fine */ -- ret = check_entry((struct ipt_entry *)e, name); -+ ret = check_entry((struct ipt_entry *)e); - if (ret) - return ret; - -@@ -1935,6 +1936,7 @@ compat_get_entries(struct net *net, struct compat_ipt_get_entries __user *uptr, - *len, sizeof(get) + get.size); - return -EINVAL; - } -+ get.name[sizeof(get.name) - 1] = '\0'; - - xt_compat_lock(AF_INET); - t = xt_find_table_lock(net, AF_INET, get.name); -@@ -1973,7 +1975,7 @@ compat_do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) +@@ -1829,7 +1829,7 @@ compat_do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) switch (cmd) { case IPT_SO_GET_INFO: @@ -155458,7 +155269,7 @@ index b99affa..c657db5 100644 break; case IPT_SO_GET_ENTRIES: ret = compat_get_entries(sock_net(sk), user, len); -@@ -2020,7 +2022,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) +@@ -1876,7 +1876,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) switch (cmd) { case IPT_SO_GET_INFO: @@ -155481,7 +155292,7 @@ index 4a9e6db..06174e1 100644 pr_err("Unable to proc dir entry\n"); return -ENOMEM; diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c -index d3a2716..884331c 100644 +index cf9700b..9a5ded4 100644 --- a/net/ipv4/ping.c +++ b/net/ipv4/ping.c @@ -59,7 +59,7 @@ struct ping_table { @@ -155493,7 +155304,7 @@ index d3a2716..884331c 100644 EXPORT_SYMBOL_GPL(pingv6_ops); static u16 ping_port_rover; -@@ -359,7 +359,7 @@ static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk, +@@ -361,7 +361,7 @@ static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk, return -ENODEV; } } @@ -155502,7 +155313,7 @@ index d3a2716..884331c 100644 scoped); rcu_read_unlock(); -@@ -568,7 +568,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) +@@ -570,7 +570,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) } #if IS_ENABLED(CONFIG_IPV6) } else if (skb->protocol == htons(ETH_P_IPV6)) { @@ -155511,7 +155322,7 @@ index d3a2716..884331c 100644 #endif } -@@ -586,7 +586,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) +@@ -588,7 +588,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) info, (u8 *)icmph); #if IS_ENABLED(CONFIG_IPV6) } else if (family == AF_INET6) { @@ -155520,7 +155331,7 @@ index d3a2716..884331c 100644 info, (u8 *)icmph); #endif } -@@ -921,10 +921,10 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock, +@@ -923,10 +923,10 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock, } if (inet6_sk(sk)->rxopt.all) @@ -155533,7 +155344,7 @@ index d3a2716..884331c 100644 else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags) ip_cmsg_recv(msg, skb); #endif -@@ -1121,7 +1121,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f, +@@ -1123,7 +1123,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f, from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)), 0, sock_i_ino(sp), atomic_read(&sp->sk_refcnt), sp, @@ -155543,7 +155354,7 @@ index d3a2716..884331c 100644 static int ping_v4_seq_show(struct seq_file *seq, void *v) diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c -index 3abd9d7..50f84dbc 100644 +index 9f665b6..5900fae 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c @@ -333,7 +333,7 @@ static void icmpmsg_put(struct seq_file *seq) @@ -155590,10 +155401,10 @@ index 3abd9d7..50f84dbc 100644 .exit = ip_proc_exit_net, }; diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c -index 7113bae..8d468b5 100644 +index 8d22de7..af2d996 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c -@@ -323,7 +323,7 @@ static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb) +@@ -325,7 +325,7 @@ static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb) int raw_rcv(struct sock *sk, struct sk_buff *skb) { if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) { @@ -155602,7 +155413,7 @@ index 7113bae..8d468b5 100644 kfree_skb(skb); return NET_RX_DROP; } -@@ -783,16 +783,20 @@ static int raw_init(struct sock *sk) +@@ -785,16 +785,20 @@ static int raw_init(struct sock *sk) static int raw_seticmpfilter(struct sock *sk, char __user *optval, int optlen) { @@ -155624,7 +155435,7 @@ index 7113bae..8d468b5 100644 if (get_user(len, optlen)) goto out; -@@ -802,8 +806,8 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o +@@ -804,8 +808,8 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o if (len > sizeof(struct icmp_filter)) len = sizeof(struct icmp_filter); ret = -EFAULT; @@ -155635,7 +155446,7 @@ index 7113bae..8d468b5 100644 goto out; ret = 0; out: return ret; -@@ -1032,7 +1036,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i) +@@ -1034,7 +1038,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i) 0, 0L, 0, from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)), 0, sock_i_ino(sp), @@ -155644,7 +155455,7 @@ index 7113bae..8d468b5 100644 } static int raw_seq_show(struct seq_file *seq, void *v) -@@ -1095,7 +1099,7 @@ static __net_exit void raw_exit_net(struct net *net) +@@ -1097,7 +1101,7 @@ static __net_exit void raw_exit_net(struct net *net) remove_proc_entry("raw", net->proc_net); } @@ -155654,7 +155465,7 @@ index 7113bae..8d468b5 100644 .exit = raw_exit_net, }; diff --git a/net/ipv4/route.c b/net/ipv4/route.c -index b050cf9..562413b 100644 +index 60398a9..e7e6456 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -232,7 +232,7 @@ static const struct seq_operations rt_cache_seq_ops = { @@ -155720,7 +155531,7 @@ index b050cf9..562413b 100644 } EXPORT_SYMBOL(ip_idents_reserve); -@@ -2767,34 +2767,34 @@ static struct ctl_table ipv4_route_flush_table[] = { +@@ -2768,34 +2768,34 @@ static struct ctl_table ipv4_route_flush_table[] = { .maxlen = sizeof(int), .mode = 0200, .proc_handler = ipv4_sysctl_rtcache_flush, @@ -155763,7 +155574,7 @@ index b050cf9..562413b 100644 err_dup: return -ENOMEM; } -@@ -2809,7 +2809,7 @@ static __net_exit void sysctl_route_net_exit(struct net *net) +@@ -2810,7 +2810,7 @@ static __net_exit void sysctl_route_net_exit(struct net *net) kfree(tbl); } @@ -155772,7 +155583,7 @@ index b050cf9..562413b 100644 .init = sysctl_route_net_init, .exit = sysctl_route_net_exit, }; -@@ -2817,14 +2817,14 @@ static __net_initdata struct pernet_operations sysctl_route_ops = { +@@ -2818,14 +2818,14 @@ static __net_initdata struct pernet_operations sysctl_route_ops = { static __net_init int rt_genid_init(struct net *net) { @@ -155790,7 +155601,7 @@ index b050cf9..562413b 100644 .init = rt_genid_init, }; -@@ -2848,7 +2848,7 @@ static void __net_exit ipv4_inetpeer_exit(struct net *net) +@@ -2849,7 +2849,7 @@ static void __net_exit ipv4_inetpeer_exit(struct net *net) kfree(bp); } @@ -155799,7 +155610,7 @@ index b050cf9..562413b 100644 .init = ipv4_inetpeer_init, .exit = ipv4_inetpeer_exit, }; -@@ -2862,11 +2862,7 @@ int __init ip_rt_init(void) +@@ -2863,11 +2863,7 @@ int __init ip_rt_init(void) int rc = 0; int cpu; @@ -155813,7 +155624,7 @@ index b050cf9..562413b 100644 ip_tstamps = kcalloc(IP_IDENTS_SZ, sizeof(*ip_tstamps), GFP_KERNEL); if (!ip_tstamps) diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c -index 4d367b4..aff5814 100644 +index 03112a3..8890b4a 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -66,7 +66,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write, @@ -155908,10 +155719,10 @@ index 4d367b4..aff5814 100644 .exit = ipv4_sysctl_exit_net, }; diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c -index 3b2c8e9..601c090 100644 +index c124c3c..40340ab 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -266,11 +266,13 @@ static void tcp_ecn_rcv_synack(struct tcp_sock *tp, const struct tcphdr *th) +@@ -268,11 +268,13 @@ static void tcp_ecn_rcv_synack(struct tcp_sock *tp, const struct tcphdr *th) tp->ecn_flags &= ~TCP_ECN_OK; } @@ -155925,7 +155736,7 @@ index 3b2c8e9..601c090 100644 static bool tcp_ecn_rcv_ecn_echo(const struct tcp_sock *tp, const struct tcphdr *th) { -@@ -787,7 +789,7 @@ static void tcp_update_pacing_rate(struct sock *sk) +@@ -789,7 +791,7 @@ static void tcp_update_pacing_rate(struct sock *sk) * without any lock. We want to make sure compiler wont store * intermediate values in this location. */ @@ -155934,7 +155745,7 @@ index 3b2c8e9..601c090 100644 sk->sk_max_pacing_rate); } -@@ -4675,7 +4677,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb, +@@ -4722,7 +4724,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb, * simplifies code) */ static void @@ -155943,7 +155754,7 @@ index 3b2c8e9..601c090 100644 struct sk_buff *head, struct sk_buff *tail, u32 start, u32 end) { -@@ -5670,6 +5672,7 @@ discard: +@@ -5720,6 +5722,7 @@ discard: tcp_paws_reject(&tp->rx_opt, 0)) goto discard_and_undo; @@ -155951,7 +155762,7 @@ index 3b2c8e9..601c090 100644 if (th->syn) { /* We see SYN without ACK. It is attempt of * simultaneous connect with crossed SYNs. -@@ -5721,6 +5724,7 @@ discard: +@@ -5771,6 +5774,7 @@ discard: goto discard; #endif } @@ -155959,7 +155770,7 @@ index 3b2c8e9..601c090 100644 /* "fifth, if neither of the SYN or RST bits is set then * drop the segment and return." */ -@@ -5766,7 +5770,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) +@@ -5816,7 +5820,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) goto discard; if (th->syn) { @@ -155968,7 +155779,7 @@ index 3b2c8e9..601c090 100644 goto discard; if (icsk->icsk_af_ops->conn_request(sk, skb) < 0) return 1; -@@ -6098,7 +6102,7 @@ struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops, +@@ -6148,7 +6152,7 @@ struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops, kmemcheck_annotate_bitfield(ireq, flags); ireq->opt = NULL; @@ -155978,7 +155789,7 @@ index 3b2c8e9..601c090 100644 write_pnet(&ireq->ireq_net, sock_net(sk_listener)); ireq->ireq_family = sk_listener->sk_family; diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c -index a7b1a90..56a4c5e 100644 +index ad45050..8203d2b 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -88,6 +88,10 @@ int sysctl_tcp_tw_reuse __read_mostly; @@ -155992,7 +155803,7 @@ index a7b1a90..56a4c5e 100644 #ifdef CONFIG_TCP_MD5SIG static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key, __be32 daddr, __be32 saddr, const struct tcphdr *th); -@@ -1421,6 +1425,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) +@@ -1423,6 +1427,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) return 0; reset: @@ -156002,10 +155813,10 @@ index a7b1a90..56a4c5e 100644 tcp_v4_send_reset(rsk, skb); discard: kfree_skb(skb); -@@ -1586,12 +1593,19 @@ int tcp_v4_rcv(struct sk_buff *skb) - +@@ -1589,12 +1596,19 @@ int tcp_v4_rcv(struct sk_buff *skb) lookup: - sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest); + sk = __inet_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), th->source, + th->dest); - if (!sk) + if (!sk) { +#ifdef CONFIG_GRKERNSEC_BLACKHOLE @@ -156025,7 +155836,7 @@ index a7b1a90..56a4c5e 100644 if (sk->sk_state == TCP_NEW_SYN_RECV) { struct request_sock *req = inet_reqsk(sk); -@@ -1676,6 +1690,10 @@ csum_error: +@@ -1679,6 +1693,10 @@ csum_error: bad_packet: TCP_INC_STATS_BH(net, TCP_MIB_INERRS); } else { @@ -156036,7 +155847,7 @@ index a7b1a90..56a4c5e 100644 tcp_v4_send_reset(NULL, skb); } -@@ -2405,7 +2423,7 @@ static void __net_exit tcp_sk_exit_batch(struct list_head *net_exit_list) +@@ -2419,7 +2437,7 @@ static void __net_exit tcp_sk_exit_batch(struct list_head *net_exit_list) inet_twsk_purge(&tcp_hashinfo, &tcp_death_row, AF_INET); } @@ -156046,10 +155857,10 @@ index a7b1a90..56a4c5e 100644 .exit = tcp_sk_exit, .exit_batch = tcp_sk_exit_batch, diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c -index a726d78..efd778e 100644 +index 7b7eec43..dfa9f1c 100644 --- a/net/ipv4/tcp_metrics.c +++ b/net/ipv4/tcp_metrics.c -@@ -1163,7 +1163,7 @@ static void __net_exit tcp_net_metrics_exit(struct net *net) +@@ -1164,7 +1164,7 @@ static void __net_exit tcp_net_metrics_exit(struct net *net) tcp_metrics_flush_all(net); } @@ -156059,7 +155870,7 @@ index a726d78..efd778e 100644 .exit = tcp_net_metrics_exit, }; diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c -index 9b02af2..5b73e16 100644 +index acb366d..2d66ef0 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -27,6 +27,10 @@ @@ -156070,10 +155881,10 @@ index 9b02af2..5b73e16 100644 +extern int grsec_enable_blackhole; +#endif + - int sysctl_tcp_syncookies __read_mostly = 1; - EXPORT_SYMBOL(sysctl_tcp_syncookies); + int sysctl_tcp_abort_on_overflow __read_mostly; -@@ -784,7 +788,10 @@ embryonic_reset: + struct inet_timewait_death_row tcp_death_row = { +@@ -781,7 +785,10 @@ embryonic_reset: * avoid becoming vulnerable to outside attack aiming at * resetting legit local connections. */ @@ -156086,7 +155897,7 @@ index 9b02af2..5b73e16 100644 reqsk_fastopen_remove(sk, req, true); tcp_reset(sk); diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c -index ebf5ff5..4d1ff32 100644 +index f6c50af..1eb9aa5 100644 --- a/net/ipv4/tcp_probe.c +++ b/net/ipv4/tcp_probe.c @@ -236,7 +236,7 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf, @@ -156099,7 +155910,7 @@ index ebf5ff5..4d1ff32 100644 cnt += width; } diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c -index a4730a2..1a92c3a 100644 +index 49bc474..9f9767d 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -22,6 +22,10 @@ @@ -156110,10 +155921,10 @@ index a4730a2..1a92c3a 100644 +extern int grsec_lastack_retries; +#endif + - int sysctl_tcp_syn_retries __read_mostly = TCP_SYN_RETRIES; - int sysctl_tcp_synack_retries __read_mostly = TCP_SYNACK_RETRIES; - int sysctl_tcp_retries1 __read_mostly = TCP_RETR1; -@@ -204,6 +208,13 @@ static int tcp_write_timeout(struct sock *sk) + int sysctl_tcp_thin_linear_timeouts __read_mostly; + + static void tcp_write_err(struct sock *sk) +@@ -200,6 +204,13 @@ static int tcp_write_timeout(struct sock *sk) } } @@ -156128,7 +155939,7 @@ index a4730a2..1a92c3a 100644 syn_set ? 0 : icsk->icsk_user_timeout, syn_set)) { /* Has it gone just too far? */ diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c -index 56218ff..99f35ce 100644 +index e9853df..4b57916 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -87,6 +87,7 @@ @@ -156160,7 +155971,7 @@ index 56218ff..99f35ce 100644 /* * This routine is called by the ICMP module when it gets some * sort of error condition. If err < 0 then the socket should -@@ -1034,9 +1042,18 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) +@@ -1022,9 +1030,18 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) dport = usin->sin_port; if (dport == 0) return -EINVAL; @@ -156179,7 +155990,7 @@ index 56218ff..99f35ce 100644 daddr = inet->inet_daddr; dport = inet->inet_dport; /* Open fast path for connected socket. -@@ -1293,7 +1310,7 @@ static unsigned int first_packet_length(struct sock *sk) +@@ -1281,7 +1298,7 @@ static unsigned int first_packet_length(struct sock *sk) IS_UDPLITE(sk)); UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, IS_UDPLITE(sk)); @@ -156188,7 +155999,7 @@ index 56218ff..99f35ce 100644 __skb_unlink(skb, rcvq); __skb_queue_tail(&list_kill, skb); } -@@ -1374,6 +1391,10 @@ try_again: +@@ -1362,6 +1379,10 @@ try_again: if (!skb) goto out; @@ -156199,7 +156010,7 @@ index 56218ff..99f35ce 100644 ulen = skb->len - sizeof(struct udphdr); copied = len; if (copied > ulen) -@@ -1407,7 +1428,7 @@ try_again: +@@ -1395,7 +1416,7 @@ try_again: if (unlikely(err)) { trace_kfree_skb(skb, udp_recvmsg); if (!peeked) { @@ -156208,7 +156019,7 @@ index 56218ff..99f35ce 100644 UDP_INC_STATS_USER(sock_net(sk), UDP_MIB_INERRORS, is_udplite); } -@@ -1709,7 +1730,7 @@ csum_error: +@@ -1697,7 +1718,7 @@ csum_error: UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite); drop: UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); @@ -156217,7 +156028,7 @@ index 56218ff..99f35ce 100644 kfree_skb(skb); return -1; } -@@ -1727,7 +1748,7 @@ static void flush_stack(struct sock **stack, unsigned int count, +@@ -1715,7 +1736,7 @@ static void flush_stack(struct sock **stack, unsigned int count, skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC); if (!skb1) { @@ -156226,7 +156037,7 @@ index 56218ff..99f35ce 100644 UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS, IS_UDPLITE(sk)); UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, -@@ -1933,6 +1954,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, +@@ -1921,6 +1942,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, goto csum_error; UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE); @@ -156236,7 +156047,7 @@ index 56218ff..99f35ce 100644 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0); /* -@@ -2541,7 +2565,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f, +@@ -2529,7 +2553,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f, from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)), 0, sock_i_ino(sp), atomic_read(&sp->sk_refcnt), sp, @@ -156343,7 +156154,7 @@ index 542074c..648df74 100644 sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl)); diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c -index bdd7eac..5a18ee4 100644 +index 8ec4b30..fee6f55 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -179,7 +179,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = { @@ -156355,7 +156166,7 @@ index bdd7eac..5a18ee4 100644 .autoconf = 1, .force_mld_version = 0, .mldv1_unsolicited_report_interval = 10 * HZ, -@@ -223,7 +223,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = { +@@ -224,7 +224,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = { .hop_limit = IPV6_DEFAULT_HOPLIMIT, .mtu6 = IPV6_MIN_MTU, .accept_ra = 1, @@ -156364,7 +156175,7 @@ index bdd7eac..5a18ee4 100644 .autoconf = 1, .force_mld_version = 0, .mldv1_unsolicited_report_interval = 10 * HZ, -@@ -643,7 +643,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb, +@@ -651,7 +651,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb, idx = 0; head = &net->dev_index_head[h]; rcu_read_lock(); @@ -156373,7 +156184,7 @@ index bdd7eac..5a18ee4 100644 net->dev_base_seq; hlist_for_each_entry_rcu(dev, head, index_hlist) { if (idx < s_idx) -@@ -2589,7 +2589,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg) +@@ -2597,7 +2597,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg) p.iph.ihl = 5; p.iph.protocol = IPPROTO_IPV6; p.iph.ttl = 64; @@ -156382,7 +156193,7 @@ index bdd7eac..5a18ee4 100644 if (ops->ndo_do_ioctl) { mm_segment_t oldfs = get_fs(); -@@ -3899,16 +3899,23 @@ static const struct file_operations if6_fops = { +@@ -4026,16 +4026,23 @@ static const struct file_operations if6_fops = { .release = seq_release_net, }; @@ -156407,7 +156218,7 @@ index bdd7eac..5a18ee4 100644 } static struct pernet_operations if6_proc_net_ops = { -@@ -4527,7 +4534,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb, +@@ -4654,7 +4661,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb, s_ip_idx = ip_idx = cb->args[2]; rcu_read_lock(); @@ -156416,7 +156227,7 @@ index bdd7eac..5a18ee4 100644 for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) { idx = 0; head = &net->dev_index_head[h]; -@@ -4737,7 +4744,7 @@ static inline size_t inet6_if_nlmsg_size(void) +@@ -4867,7 +4874,7 @@ static inline size_t inet6_if_nlmsg_size(void) + nla_total_size(inet6_ifla6_size()); /* IFLA_PROTINFO */ } @@ -156425,7 +156236,7 @@ index bdd7eac..5a18ee4 100644 int items, int bytes) { int i; -@@ -4747,7 +4754,7 @@ static inline void __snmp6_fill_statsdev(u64 *stats, atomic_long_t *mib, +@@ -4877,7 +4884,7 @@ static inline void __snmp6_fill_statsdev(u64 *stats, atomic_long_t *mib, /* Use put_unaligned() because stats may not be aligned for u64. */ put_unaligned(items, &stats[0]); for (i = 1; i < items; i++) @@ -156434,7 +156245,7 @@ index bdd7eac..5a18ee4 100644 memset(&stats[items], 0, pad); } -@@ -5202,7 +5209,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) +@@ -5332,7 +5339,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) rt_genid_bump_ipv6(net); break; } @@ -156443,7 +156254,7 @@ index bdd7eac..5a18ee4 100644 } static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) -@@ -5222,7 +5229,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write, +@@ -5352,7 +5359,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write, int *valp = ctl->data; int val = *valp; loff_t pos = *ppos; @@ -156452,7 +156263,7 @@ index bdd7eac..5a18ee4 100644 int ret; /* -@@ -5245,7 +5252,7 @@ static +@@ -5375,7 +5382,7 @@ static int addrconf_sysctl_hop_limit(struct ctl_table *ctl, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -156461,7 +156272,7 @@ index bdd7eac..5a18ee4 100644 int min_hl = 1, max_hl = 255; lctl = *ctl; -@@ -5261,7 +5268,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write, +@@ -5391,7 +5398,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write, { struct inet6_dev *idev = ctl->extra1; int min_mtu = IPV6_MIN_MTU; @@ -156470,7 +156281,7 @@ index bdd7eac..5a18ee4 100644 lctl = *ctl; lctl.extra1 = &min_mtu; -@@ -5336,7 +5343,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write, +@@ -5466,7 +5473,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write, int *valp = ctl->data; int val = *valp; loff_t pos = *ppos; @@ -156479,7 +156290,7 @@ index bdd7eac..5a18ee4 100644 int ret; /* -@@ -5401,7 +5408,7 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write, +@@ -5531,7 +5538,7 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write, int err; struct in6_addr addr; char str[IPV6_MAX_STRLEN]; @@ -156488,7 +156299,7 @@ index bdd7eac..5a18ee4 100644 struct net *net = ctl->extra2; struct ipv6_stable_secret *secret = ctl->data; -@@ -5470,7 +5477,7 @@ int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl, +@@ -5600,7 +5607,7 @@ int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl, int *valp = ctl->data; int val = *valp; loff_t pos = *ppos; @@ -156498,10 +156309,10 @@ index bdd7eac..5a18ee4 100644 /* ctl->data points to idev->cnf.ignore_routes_when_linkdown diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c -index 9f5137c..a7eabd9 100644 +index b11c37c..38e3339 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c -@@ -780,7 +780,7 @@ static int __net_init inet6_net_init(struct net *net) +@@ -784,7 +784,7 @@ static int __net_init inet6_net_init(struct net *net) net->ipv6.sysctl.idgen_retries = 3; net->ipv6.sysctl.idgen_delay = 1 * HZ; net->ipv6.sysctl.flowlabel_state_ranges = 0; @@ -156511,10 +156322,10 @@ index 9f5137c..a7eabd9 100644 err = ipv6_init_mibs(net); if (err) diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c -index 4281621..b1e9d2d 100644 +index 9dd3882..a03c07e 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c -@@ -982,5 +982,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, +@@ -1025,5 +1025,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, 0, sock_i_ino(sp), atomic_read(&sp->sk_refcnt), sp, @@ -156522,10 +156333,10 @@ index 4281621..b1e9d2d 100644 + atomic_read_unchecked(&sp->sk_drops)); } diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c -index 0a37ddc..af81b1a 100644 +index 0013cac..08db290 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c -@@ -998,7 +998,7 @@ static struct ctl_table ipv6_icmp_table_template[] = { +@@ -997,7 +997,7 @@ static struct ctl_table ipv6_icmp_table_template[] = { struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net) { @@ -156535,10 +156346,10 @@ index 0a37ddc..af81b1a 100644 table = kmemdup(ipv6_icmp_table_template, sizeof(ipv6_icmp_table_template), diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c -index 21ace5a..270fb64 100644 +index 70f2628..721dd1e 100644 --- a/net/ipv6/inet6_hashtables.c +++ b/net/ipv6/inet6_hashtables.c -@@ -192,7 +192,7 @@ struct sock *inet6_lookup(struct net *net, struct inet_hashinfo *hashinfo, +@@ -210,7 +210,7 @@ struct sock *inet6_lookup(struct net *net, struct inet_hashinfo *hashinfo, EXPORT_SYMBOL_GPL(inet6_lookup); static int __inet6_check_established(struct inet_timewait_death_row *death_row, @@ -156548,10 +156359,10 @@ index 21ace5a..270fb64 100644 { struct inet_hashinfo *hinfo = death_row->hashinfo; diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c -index 0c7e276..68d9b36 100644 +index ea071fa..8bdb3e0 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c -@@ -100,9 +100,9 @@ static int fib6_new_sernum(struct net *net) +@@ -98,9 +98,9 @@ static int fib6_new_sernum(struct net *net) int new, old; do { @@ -156564,7 +156375,7 @@ index 0c7e276..68d9b36 100644 return new; } diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c -index c0d4dc1..96afdd9 100644 +index 4e636e6..26d1e42 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -70,8 +70,8 @@ struct ip6gre_net { @@ -156606,7 +156417,7 @@ index c0d4dc1..96afdd9 100644 .maxtype = IFLA_GRE_MAX, .policy = ip6gre_policy, diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c -index 3991b21..4e8e990 100644 +index 1f20345..b3499ef 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c @@ -80,7 +80,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2) @@ -156618,7 +156429,7 @@ index 3991b21..4e8e990 100644 static int ip6_tnl_net_id __read_mostly; struct ip6_tnl_net { -@@ -1843,7 +1843,7 @@ static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = { +@@ -1752,7 +1752,7 @@ static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = { [IFLA_IPTUN_PROTO] = { .type = NLA_U8 }, }; @@ -156628,7 +156439,7 @@ index 3991b21..4e8e990 100644 .maxtype = IFLA_IPTUN_MAX, .policy = ip6_tnl_policy, diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c -index 0a8610b..2c8c85b 100644 +index d90a11f..02af54d 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c @@ -62,7 +62,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2) @@ -156663,7 +156474,7 @@ index 4449ad1..e47579c 100644 msg.msg_flags = flags; diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c -index 84afb9a..d7dcc41 100644 +index c245895..68c1693 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -665,7 +665,7 @@ static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb) @@ -156676,127 +156487,10 @@ index 84afb9a..d7dcc41 100644 if (skb && ipv6_chk_addr_and_flags(dev_net(dev), &ipv6_hdr(skb)->saddr, dev, 1, diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c -index 99425cf..cc99e7c 100644 +index 9021b43..b2e6979 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c -@@ -198,11 +198,12 @@ get_entry(const void *base, unsigned int offset) - - /* All zeroes == unconditional rule. */ - /* Mildly perf critical (only if packet tracing is on) */ --static inline bool unconditional(const struct ip6t_ip6 *ipv6) -+static inline bool unconditional(const struct ip6t_entry *e) - { - static const struct ip6t_ip6 uncond; - -- return memcmp(ipv6, &uncond, sizeof(uncond)) == 0; -+ return e->target_offset == sizeof(struct ip6t_entry) && -+ memcmp(&e->ipv6, &uncond, sizeof(uncond)) == 0; - } - - static inline const struct xt_entry_target * -@@ -258,11 +259,10 @@ get_chainname_rulenum(const struct ip6t_entry *s, const struct ip6t_entry *e, - } else if (s == e) { - (*rulenum)++; - -- if (s->target_offset == sizeof(struct ip6t_entry) && -+ if (unconditional(s) && - strcmp(t->target.u.kernel.target->name, - XT_STANDARD_TARGET) == 0 && -- t->verdict < 0 && -- unconditional(&s->ipv6)) { -+ t->verdict < 0) { - /* Tail of chains: STANDARD target (return/policy) */ - *comment = *chainname == hookname - ? comments[NF_IP6_TRACE_COMMENT_POLICY] -@@ -488,11 +488,10 @@ mark_source_chains(const struct xt_table_info *newinfo, - e->comefrom |= ((1 << hook) | (1 << NF_INET_NUMHOOKS)); - - /* Unconditional return/END. */ -- if ((e->target_offset == sizeof(struct ip6t_entry) && -+ if ((unconditional(e) && - (strcmp(t->target.u.user.name, - XT_STANDARD_TARGET) == 0) && -- t->verdict < 0 && -- unconditional(&e->ipv6)) || visited) { -+ t->verdict < 0) || visited) { - unsigned int oldpos, size; - - if ((strcmp(t->target.u.user.name, -@@ -581,14 +580,12 @@ static void cleanup_match(struct xt_entry_match *m, struct net *net) - } - - static int --check_entry(const struct ip6t_entry *e, const char *name) -+check_entry(const struct ip6t_entry *e) - { - const struct xt_entry_target *t; - -- if (!ip6_checkentry(&e->ipv6)) { -- duprintf("ip_tables: ip check failed %p %s.\n", e, name); -+ if (!ip6_checkentry(&e->ipv6)) - return -EINVAL; -- } - - if (e->target_offset + sizeof(struct xt_entry_target) > - e->next_offset) -@@ -679,10 +676,6 @@ find_check_entry(struct ip6t_entry *e, struct net *net, const char *name, - struct xt_mtchk_param mtpar; - struct xt_entry_match *ematch; - -- ret = check_entry(e, name); -- if (ret) -- return ret; -- - e->counters.pcnt = xt_percpu_counter_alloc(); - if (IS_ERR_VALUE(e->counters.pcnt)) - return -ENOMEM; -@@ -733,7 +726,7 @@ static bool check_underflow(const struct ip6t_entry *e) - const struct xt_entry_target *t; - unsigned int verdict; - -- if (!unconditional(&e->ipv6)) -+ if (!unconditional(e)) - return false; - t = ip6t_get_target_c(e); - if (strcmp(t->u.user.name, XT_STANDARD_TARGET) != 0) -@@ -753,9 +746,11 @@ check_entry_size_and_hooks(struct ip6t_entry *e, - unsigned int valid_hooks) - { - unsigned int h; -+ int err; - - if ((unsigned long)e % __alignof__(struct ip6t_entry) != 0 || -- (unsigned char *)e + sizeof(struct ip6t_entry) >= limit) { -+ (unsigned char *)e + sizeof(struct ip6t_entry) >= limit || -+ (unsigned char *)e + e->next_offset > limit) { - duprintf("Bad offset %p\n", e); - return -EINVAL; - } -@@ -767,6 +762,10 @@ check_entry_size_and_hooks(struct ip6t_entry *e, - return -EINVAL; - } - -+ err = check_entry(e); -+ if (err) -+ return err; -+ - /* Check hooks & underflows */ - for (h = 0; h < NF_INET_NUMHOOKS; h++) { - if (!(valid_hooks & (1 << h))) -@@ -775,9 +774,9 @@ check_entry_size_and_hooks(struct ip6t_entry *e, - newinfo->hook_entry[h] = hook_entries[h]; - if ((unsigned char *)e - base == underflows[h]) { - if (!check_underflow(e)) { -- pr_err("Underflows must be unconditional and " -- "use the STANDARD target with " -- "ACCEPT/DROP\n"); -+ pr_debug("Underflows must be unconditional and " -+ "use the STANDARD target with " -+ "ACCEPT/DROP\n"); - return -EINVAL; - } - newinfo->underflow[h] = underflows[h]; -@@ -1090,14 +1089,14 @@ static int compat_table_info(const struct xt_table_info *info, +@@ -1094,14 +1094,14 @@ static int compat_table_info(const struct xt_table_info *info, #endif static int get_info(struct net *net, void __user *user, @@ -156814,7 +156508,7 @@ index 99425cf..cc99e7c 100644 sizeof(struct ip6t_getinfo)); return -EINVAL; } -@@ -1134,7 +1133,7 @@ static int get_info(struct net *net, void __user *user, +@@ -1138,7 +1138,7 @@ static int get_info(struct net *net, void __user *user, info.size = private->size; strcpy(info.name, name); @@ -156823,42 +156517,7 @@ index 99425cf..cc99e7c 100644 ret = -EFAULT; else ret = 0; -@@ -1169,6 +1168,7 @@ get_entries(struct net *net, struct ip6t_get_entries __user *uptr, - *len, sizeof(get) + get.size); - return -EINVAL; - } -+ get.name[sizeof(get.name) - 1] = '\0'; - - t = xt_find_table_lock(net, AF_INET6, get.name); - if (!IS_ERR_OR_NULL(t)) { -@@ -1505,7 +1505,8 @@ check_compat_entry_size_and_hooks(struct compat_ip6t_entry *e, - - duprintf("check_compat_entry_size_and_hooks %p\n", e); - if ((unsigned long)e % __alignof__(struct compat_ip6t_entry) != 0 || -- (unsigned char *)e + sizeof(struct compat_ip6t_entry) >= limit) { -+ (unsigned char *)e + sizeof(struct compat_ip6t_entry) >= limit || -+ (unsigned char *)e + e->next_offset > limit) { - duprintf("Bad offset %p, limit = %p\n", e, limit); - return -EINVAL; - } -@@ -1518,7 +1519,7 @@ check_compat_entry_size_and_hooks(struct compat_ip6t_entry *e, - } - - /* For purposes of check_entry casting the compat entry is fine */ -- ret = check_entry((struct ip6t_entry *)e, name); -+ ret = check_entry((struct ip6t_entry *)e); - if (ret) - return ret; - -@@ -1944,6 +1945,7 @@ compat_get_entries(struct net *net, struct compat_ip6t_get_entries __user *uptr, - *len, sizeof(get) + get.size); - return -EINVAL; - } -+ get.name[sizeof(get.name) - 1] = '\0'; - - xt_compat_lock(AF_INET6); - t = xt_find_table_lock(net, AF_INET6, get.name); -@@ -1982,7 +1984,7 @@ compat_do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) +@@ -1831,7 +1831,7 @@ compat_do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) switch (cmd) { case IP6T_SO_GET_INFO: @@ -156867,7 +156526,7 @@ index 99425cf..cc99e7c 100644 break; case IP6T_SO_GET_ENTRIES: ret = compat_get_entries(sock_net(sk), user, len); -@@ -2029,7 +2031,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) +@@ -1878,7 +1878,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) switch (cmd) { case IP6T_SO_GET_INFO: @@ -156919,10 +156578,10 @@ index e4347ae..c7654e7 100644 return -ENOMEM; } diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c -index 263a516..692f738 100644 +index c382db7..cd9e4d9 100644 --- a/net/ipv6/ping.c +++ b/net/ipv6/ping.c -@@ -240,6 +240,24 @@ static struct pernet_operations ping_v6_net_ops = { +@@ -239,6 +239,24 @@ static struct pernet_operations ping_v6_net_ops = { }; #endif @@ -156947,7 +156606,7 @@ index 263a516..692f738 100644 int __init pingv6_init(void) { #ifdef CONFIG_PROC_FS -@@ -247,13 +265,7 @@ int __init pingv6_init(void) +@@ -246,13 +264,7 @@ int __init pingv6_init(void) if (ret) return ret; #endif @@ -156962,7 +156621,7 @@ index 263a516..692f738 100644 return inet6_register_protosw(&pingv6_protosw); } -@@ -262,14 +274,9 @@ int __init pingv6_init(void) +@@ -261,14 +273,9 @@ int __init pingv6_init(void) */ void pingv6_exit(void) { @@ -157153,10 +156812,10 @@ index e2ea311..6f07106 100644 return -ENOMEM; } diff --git a/net/ipv6/route.c b/net/ipv6/route.c -index 18e29e2..3b8eab0 100644 +index 6f32944..03cad65 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c -@@ -3525,7 +3525,7 @@ struct ctl_table ipv6_route_table_template[] = { +@@ -3538,7 +3538,7 @@ struct ctl_table ipv6_route_table_template[] = { struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net) { @@ -157166,7 +156825,7 @@ index 18e29e2..3b8eab0 100644 table = kmemdup(ipv6_route_table_template, sizeof(ipv6_route_table_template), diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c -index 2066d1c..190a677 100644 +index 8338430..602490e 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c @@ -74,7 +74,7 @@ static void ipip6_tunnel_setup(struct net_device *dev); @@ -157178,7 +156837,7 @@ index 2066d1c..190a677 100644 static int sit_net_id __read_mostly; struct sit_net { -@@ -1732,7 +1732,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head) +@@ -1735,7 +1735,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head) unregister_netdevice_queue(dev, head); } @@ -157201,7 +156860,7 @@ index 45243bb..cdb398e 100644 struct ctl_table *ipv6_icmp_table; int err; diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c -index 5c8c842..e67c742 100644 +index f6d7516..8d7090d 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -101,6 +101,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb) @@ -157215,7 +156874,7 @@ index 5c8c842..e67c742 100644 static __u32 tcp_v6_init_sequence(const struct sk_buff *skb) { return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32, -@@ -1268,6 +1272,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) +@@ -1277,6 +1281,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) return 0; reset: @@ -157225,10 +156884,10 @@ index 5c8c842..e67c742 100644 tcp_v6_send_reset(sk, skb); discard: if (opt_skb) -@@ -1378,12 +1385,20 @@ static int tcp_v6_rcv(struct sk_buff *skb) +@@ -1387,12 +1394,20 @@ static int tcp_v6_rcv(struct sk_buff *skb) lookup: - sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest, - inet6_iif(skb)); + sk = __inet6_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), + th->source, th->dest, inet6_iif(skb)); - if (!sk) + if (!sk) { +#ifdef CONFIG_GRKERNSEC_BLACKHOLE @@ -157248,7 +156907,7 @@ index 5c8c842..e67c742 100644 if (sk->sk_state == TCP_NEW_SYN_RECV) { struct request_sock *req = inet_reqsk(sk); -@@ -1471,6 +1486,10 @@ csum_error: +@@ -1480,6 +1495,10 @@ csum_error: bad_packet: TCP_INC_STATS_BH(net, TCP_MIB_INERRS); } else { @@ -157260,10 +156919,10 @@ index 5c8c842..e67c742 100644 } diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c -index 6794120..21d5fae 100644 +index f96831d9..dae9a77 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c -@@ -77,6 +77,10 @@ static u32 udp6_ehashfn(const struct net *net, +@@ -78,6 +78,10 @@ static u32 udp6_ehashfn(const struct net *net, udp_ipv6_hash_secret + net_hash_mix(net)); } @@ -157271,10 +156930,10 @@ index 6794120..21d5fae 100644 +extern int grsec_enable_blackhole; +#endif + - /* match_wildcard == true: IPV6_ADDR_ANY equals to any IPv6 addresses if IPv6 - * only, and any IPv4 addresses if not IPv6 only - * match_wildcard == false: addresses must be exactly the same, i.e. -@@ -494,7 +498,7 @@ try_again: + static u32 udp6_portaddr_hash(const struct net *net, + const struct in6_addr *addr6, + unsigned int port) +@@ -452,7 +456,7 @@ try_again: if (unlikely(err)) { trace_kfree_skb(skb, udpv6_recvmsg); if (!peeked) { @@ -157283,7 +156942,7 @@ index 6794120..21d5fae 100644 if (is_udp4) UDP_INC_STATS_USER(sock_net(sk), UDP_MIB_INERRORS, -@@ -758,7 +762,7 @@ csum_error: +@@ -718,7 +722,7 @@ csum_error: UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite); drop: UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); @@ -157292,7 +156951,7 @@ index 6794120..21d5fae 100644 kfree_skb(skb); return -1; } -@@ -799,7 +803,7 @@ static void flush_stack(struct sock **stack, unsigned int count, +@@ -759,7 +763,7 @@ static void flush_stack(struct sock **stack, unsigned int count, if (likely(!skb1)) skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC); if (!skb1) { @@ -157301,7 +156960,7 @@ index 6794120..21d5fae 100644 UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS, IS_UDPLITE(sk)); UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, -@@ -981,6 +985,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, +@@ -941,6 +945,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, goto csum_error; UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE); @@ -157457,7 +157116,7 @@ index 3af2195..a38e804 100644 EXPORT_SYMBOL(ircomm_close); diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c -index a423770..e995a21 100644 +index da126ee..c75b685 100644 --- a/net/irda/ircomm/ircomm_tty.c +++ b/net/irda/ircomm/ircomm_tty.c @@ -172,8 +172,10 @@ static int __init ircomm_tty_init(void) @@ -157533,7 +157192,7 @@ index a423770..e995a21 100644 /* Not really used by us, but lets do it anyway */ self->port.low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; -@@ -932,7 +934,7 @@ static void ircomm_tty_hangup(struct tty_struct *tty) +@@ -931,7 +933,7 @@ static void ircomm_tty_hangup(struct tty_struct *tty) tty_kref_put(port->tty); } port->tty = NULL; @@ -157542,7 +157201,7 @@ index a423770..e995a21 100644 spin_unlock_irqrestore(&port->lock, flags); wake_up_interruptible(&port->open_wait); -@@ -1279,7 +1281,7 @@ static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m) +@@ -1274,7 +1276,7 @@ static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m) seq_putc(m, '\n'); seq_printf(m, "Role: %s\n", self->client ? "client" : "server"); @@ -158190,10 +157849,10 @@ index 42de4cc..f00aa3e 100644 .netns_ok = 1, }; diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c -index 9ee4ddb..3f4b9d4 100644 +index cd47990..a979945 100644 --- a/net/l2tp/l2tp_ip6.c +++ b/net/l2tp/l2tp_ip6.c -@@ -761,7 +761,7 @@ static struct inet_protosw l2tp_ip6_protosw = { +@@ -762,7 +762,7 @@ static struct inet_protosw l2tp_ip6_protosw = { .ops = &l2tp_ip6_ops, }; @@ -158216,10 +157875,19 @@ index 1a3c7e0..80f8b0c 100644 goto out; diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c -index 166a29f..b9bec4b 100644 +index fe1704c..90b2111 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -378,7 +378,7 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev, +@@ -339,7 +339,7 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev, + + switch (key->conf.cipher) { + case WLAN_CIPHER_SUITE_TKIP: +- pn64 = atomic64_read(&key->conf.tx_pn); ++ pn64 = atomic64_read_unchecked(&key->conf.tx_pn); + iv32 = TKIP_PN_TO_IV32(pn64); + iv16 = TKIP_PN_TO_IV16(pn64); + +@@ -379,7 +379,7 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev, drv_get_key_seq(sdata->local, key, &kseq); memcpy(seq, kseq.ccmp.pn, 6); } else { @@ -158228,7 +157896,7 @@ index 166a29f..b9bec4b 100644 seq[0] = pn64; seq[1] = pn64 >> 8; seq[2] = pn64 >> 16; -@@ -540,7 +540,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy, +@@ -541,7 +541,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy, ret = ieee80211_vif_use_channel(sdata, chandef, IEEE80211_CHANCTX_EXCLUSIVE); } @@ -158237,7 +157905,7 @@ index 166a29f..b9bec4b 100644 local->_oper_chandef = *chandef; ieee80211_hw_config(local, 0); } -@@ -3035,7 +3035,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, +@@ -3065,7 +3065,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, sdata->vif.probe_req_reg--; } @@ -158246,7 +157914,7 @@ index 166a29f..b9bec4b 100644 break; if (sdata->vif.probe_req_reg == 1) -@@ -3190,8 +3190,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy, +@@ -3220,8 +3220,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy, if (chanctx_conf) { *chandef = sdata->vif.bss_conf.chandef; ret = 0; @@ -158258,7 +157926,7 @@ index 166a29f..b9bec4b 100644 if (local->use_chanctx) *chandef = local->monitor_chandef; diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c -index 3e24d0d..be640c0 100644 +index 4ab5c52..da3fdf1 100644 --- a/net/mac80211/debugfs.c +++ b/net/mac80211/debugfs.c @@ -91,7 +91,7 @@ static const struct file_operations reset_ops = { @@ -158271,7 +157939,7 @@ index 3e24d0d..be640c0 100644 FLAG(HAS_RATE_CONTROL), FLAG(RX_INCLUDES_FCS), diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c -index 7961e7d..eea148f 100644 +index a2ef95f..5adf27d 100644 --- a/net/mac80211/debugfs_key.c +++ b/net/mac80211/debugfs_key.c @@ -111,7 +111,7 @@ static ssize_t key_tx_spec_write(struct file *file, const char __user *userbuf, @@ -158283,7 +157951,16 @@ index 7961e7d..eea148f 100644 return count; default: return 0; -@@ -144,7 +144,7 @@ static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, +@@ -132,7 +132,7 @@ static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, + len = scnprintf(buf, sizeof(buf), "\n"); + break; + case WLAN_CIPHER_SUITE_TKIP: +- pn = atomic64_read(&key->conf.tx_pn); ++ pn = atomic64_read_unchecked(&key->conf.tx_pn); + len = scnprintf(buf, sizeof(buf), "%08x %04x\n", + TKIP_PN_TO_IV32(pn), + TKIP_PN_TO_IV16(pn)); +@@ -145,7 +145,7 @@ static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, case WLAN_CIPHER_SUITE_BIP_GMAC_256: case WLAN_CIPHER_SUITE_GCMP: case WLAN_CIPHER_SUITE_GCMP_256: @@ -158293,7 +157970,7 @@ index 7961e7d..eea148f 100644 (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24), (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn); diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h -index f006f4a..884f09e 100644 +index 4220035..04bc5c0 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -30,6 +30,7 @@ @@ -158304,7 +157981,7 @@ index f006f4a..884f09e 100644 #include "key.h" #include "sta_info.h" #include "debug.h" -@@ -1107,7 +1108,7 @@ struct ieee80211_local { +@@ -1106,7 +1107,7 @@ struct ieee80211_local { /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ spinlock_t queue_stop_reason_lock; @@ -158314,7 +157991,7 @@ index f006f4a..884f09e 100644 /* number of interfaces with corresponding FIF_ flags */ int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll, diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c -index bcb0a1b..ec078f4 100644 +index e1cb22c..1e2ee0c 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -551,7 +551,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) @@ -158362,7 +158039,7 @@ index bcb0a1b..ec078f4 100644 switch (sdata->vif.type) { case NL80211_IFTYPE_AP_VLAN: -@@ -984,7 +984,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, +@@ -985,7 +985,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, atomic_set(&sdata->txqs_len[txqi->txq.ac], 0); } @@ -158371,7 +158048,7 @@ index bcb0a1b..ec078f4 100644 ieee80211_clear_tx_pending(local); /* -@@ -1027,7 +1027,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, +@@ -1028,7 +1028,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, if (cancel_scan) flush_delayed_work(&local->scan_work); @@ -158380,7 +158057,7 @@ index bcb0a1b..ec078f4 100644 ieee80211_stop_device(local); /* no reconfiguring after stop! */ -@@ -1038,7 +1038,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, +@@ -1039,7 +1039,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, ieee80211_configure_filter(local); ieee80211_hw_config(local, hw_reconf_flags); @@ -158389,7 +158066,7 @@ index bcb0a1b..ec078f4 100644 ieee80211_add_virtual_monitor(local); } -@@ -1898,8 +1898,8 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local) +@@ -1909,8 +1909,8 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local) */ cfg80211_shutdown_all_interfaces(local->hw.wiphy); @@ -158400,28 +158077,6 @@ index bcb0a1b..ec078f4 100644 mutex_lock(&local->iflist_mtx); list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { -diff --git a/net/mac80211/key.c b/net/mac80211/key.c -index 5e5bc59..e033047 100644 ---- a/net/mac80211/key.c -+++ b/net/mac80211/key.c -@@ -962,7 +962,7 @@ void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf, - case WLAN_CIPHER_SUITE_GCMP_256: - BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) != - offsetof(typeof(*seq), gcmp)); -- pn64 = atomic64_read(&key->conf.tx_pn); -+ pn64 = atomic64_read_unchecked(&key->conf.tx_pn); - seq->ccmp.pn[5] = pn64; - seq->ccmp.pn[4] = pn64 >> 8; - seq->ccmp.pn[3] = pn64 >> 16; -@@ -1062,7 +1062,7 @@ void ieee80211_set_key_tx_seq(struct ieee80211_key_conf *keyconf, - ((u64)seq->ccmp.pn[2] << 24) | - ((u64)seq->ccmp.pn[1] << 32) | - ((u64)seq->ccmp.pn[0] << 40); -- atomic64_set(&key->conf.tx_pn, pn64); -+ atomic64_set_unchecked(&key->conf.tx_pn, pn64); - break; - default: - WARN_ON(1); diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 8190bf27..a428476 100644 --- a/net/mac80211/main.c @@ -158471,10 +158126,10 @@ index a4e2f4e..02bfac1 100644 if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) { diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c -index 23ed038..cd63e86 100644 +index 861b93f..7eeb0db 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c -@@ -349,7 +349,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, +@@ -351,7 +351,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, int size = sizeof(struct txq_info) + ALIGN(hw->txq_data_size, sizeof(void *)); @@ -158484,10 +158139,10 @@ index 23ed038..cd63e86 100644 goto free; diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c -index 3311ce0..2b1323c 100644 +index 21f6602..90396f4 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -2825,7 +2825,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata, +@@ -2908,7 +2908,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata, case WLAN_CIPHER_SUITE_CCMP_256: case WLAN_CIPHER_SUITE_GCMP: case WLAN_CIPHER_SUITE_GCMP_256: @@ -158497,7 +158152,7 @@ index 3311ce0..2b1323c 100644 crypto_hdr[1] = pn >> 8; crypto_hdr[4] = pn >> 16; diff --git a/net/mac80211/util.c b/net/mac80211/util.c -index 58f58bd..8d39508 100644 +index 7390de4..3612686c 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -1761,7 +1761,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) @@ -158509,7 +158164,7 @@ index 58f58bd..8d39508 100644 goto wake_up; #ifdef CONFIG_PM -@@ -2064,7 +2064,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) +@@ -2067,7 +2067,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) mutex_unlock(&local->mtx); } @@ -158518,7 +158173,7 @@ index 58f58bd..8d39508 100644 ieee80211_add_virtual_monitor(local); /* -@@ -2098,7 +2098,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) +@@ -2101,7 +2101,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) * If this is for hw restart things are still running. * We may want to change that later, however. */ @@ -158527,7 +158182,7 @@ index 58f58bd..8d39508 100644 drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART); if (!suspended) -@@ -2112,7 +2112,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) +@@ -2115,7 +2115,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) ieee80211_flush_completed_scan(local, false); @@ -158537,10 +158192,19 @@ index 58f58bd..8d39508 100644 list_for_each_entry(sdata, &local->interfaces, list) { diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c -index d824c38..f3ded28 100644 +index 1884825..37036cc 100644 --- a/net/mac80211/wpa.c +++ b/net/mac80211/wpa.c -@@ -447,7 +447,7 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb, +@@ -223,7 +223,7 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) + return 0; + + /* Increase IV for the frame */ +- pn = atomic64_inc_return(&key->conf.tx_pn); ++ pn = atomic64_inc_return_unchecked(&key->conf.tx_pn); + pos = ieee80211_tkip_add_iv(pos, &key->conf, pn); + + /* hwaccel - with software IV */ +@@ -444,7 +444,7 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb, hdr = (struct ieee80211_hdr *) pos; pos += hdrlen; @@ -158549,7 +158213,7 @@ index d824c38..f3ded28 100644 pn[5] = pn64; pn[4] = pn64 >> 8; -@@ -676,7 +676,7 @@ static int gcmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) +@@ -673,7 +673,7 @@ static int gcmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) hdr = (struct ieee80211_hdr *)pos; pos += hdrlen; @@ -158558,7 +158222,7 @@ index d824c38..f3ded28 100644 pn[5] = pn64; pn[4] = pn64 >> 8; -@@ -950,7 +950,7 @@ ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx) +@@ -947,7 +947,7 @@ ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx) mmie->key_id = cpu_to_le16(key->conf.keyidx); /* PN = PN + 1 */ @@ -158567,7 +158231,7 @@ index d824c38..f3ded28 100644 bip_ipn_set64(mmie->sequence_number, pn64); -@@ -994,7 +994,7 @@ ieee80211_crypto_aes_cmac_256_encrypt(struct ieee80211_tx_data *tx) +@@ -991,7 +991,7 @@ ieee80211_crypto_aes_cmac_256_encrypt(struct ieee80211_tx_data *tx) mmie->key_id = cpu_to_le16(key->conf.keyidx); /* PN = PN + 1 */ @@ -158576,7 +158240,7 @@ index d824c38..f3ded28 100644 bip_ipn_set64(mmie->sequence_number, pn64); -@@ -1139,7 +1139,7 @@ ieee80211_crypto_aes_gmac_encrypt(struct ieee80211_tx_data *tx) +@@ -1136,7 +1136,7 @@ ieee80211_crypto_aes_gmac_encrypt(struct ieee80211_tx_data *tx) mmie->key_id = cpu_to_le16(key->conf.keyidx); /* PN = PN + 1 */ @@ -158699,7 +158363,7 @@ index 6913454..43686aa 100644 obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c -index 95db43f..ed368dc 100644 +index a748b0c..90c1df6 100644 --- a/net/netfilter/ipset/ip_set_core.c +++ b/net/netfilter/ipset/ip_set_core.c @@ -324,7 +324,6 @@ ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr) @@ -158719,7 +158383,7 @@ index 95db43f..ed368dc 100644 }, }; EXPORT_SYMBOL_GPL(ip_set_extensions); -@@ -1414,7 +1413,7 @@ static int ip_set_dump(struct net *net, struct sock *ctnl, struct sk_buff *skb, +@@ -1440,7 +1439,7 @@ static int ip_set_dump(struct net *net, struct sock *ctnl, struct sk_buff *skb, return -IPSET_ERR_PROTOCOL; { @@ -158728,7 +158392,7 @@ index 95db43f..ed368dc 100644 .dump = ip_set_dump_start, .done = ip_set_dump_done, }; -@@ -1983,7 +1982,7 @@ done: +@@ -2009,7 +2008,7 @@ done: return ret; } @@ -158769,7 +158433,7 @@ index 85ca189..871f064 100644 if (!todrop_rate[i]) return 0; diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c -index 4da5600..2e26711 100644 +index b9a4082..0e84a78 100644 --- a/net/netfilter/ipvs/ip_vs_core.c +++ b/net/netfilter/ipvs/ip_vs_core.c @@ -611,7 +611,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb, @@ -158781,7 +158445,7 @@ index 4da5600..2e26711 100644 ip_vs_conn_put(cp); return ret; } -@@ -1832,7 +1832,7 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int +@@ -1833,7 +1833,7 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int if (cp->flags & IP_VS_CONN_F_ONE_PACKET) pkts = sysctl_sync_threshold(ipvs); else @@ -158791,7 +158455,7 @@ index 4da5600..2e26711 100644 if (ipvs->sync_state & IP_VS_STATE_MASTER) ip_vs_sync_conn(ipvs, cp, pkts); diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c -index e7c1b05..81b2474 100644 +index 404b2a4..ad446aa 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c @@ -811,7 +811,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest, @@ -158803,7 +158467,7 @@ index e7c1b05..81b2474 100644 /* bind the service */ old_svc = rcu_dereference_protected(dest->svc, 1); -@@ -1687,7 +1687,7 @@ proc_do_sync_ports(struct ctl_table *table, int write, +@@ -1685,7 +1685,7 @@ proc_do_sync_ports(struct ctl_table *table, int write, * align with netns init in ip_vs_control_net_init() */ @@ -158812,7 +158476,7 @@ index e7c1b05..81b2474 100644 { .procname = "amemthresh", .maxlen = sizeof(int), -@@ -2042,7 +2042,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) +@@ -2040,7 +2040,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) " %-7s %-6d %-10d %-10d\n", &dest->addr.in6, ntohs(dest->port), @@ -158821,7 +158485,7 @@ index e7c1b05..81b2474 100644 atomic_read(&dest->weight), atomic_read(&dest->activeconns), atomic_read(&dest->inactconns)); -@@ -2053,7 +2053,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) +@@ -2051,7 +2051,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) "%-7s %-6d %-10d %-10d\n", ntohl(dest->addr.ip), ntohs(dest->port), @@ -158830,7 +158494,7 @@ index e7c1b05..81b2474 100644 atomic_read(&dest->weight), atomic_read(&dest->activeconns), atomic_read(&dest->inactconns)); -@@ -2562,7 +2562,7 @@ __ip_vs_get_dest_entries(struct netns_ipvs *ipvs, const struct ip_vs_get_dests * +@@ -2560,7 +2560,7 @@ __ip_vs_get_dest_entries(struct netns_ipvs *ipvs, const struct ip_vs_get_dests * entry.addr = dest->addr.ip; entry.port = dest->port; @@ -158839,7 +158503,7 @@ index e7c1b05..81b2474 100644 entry.weight = atomic_read(&dest->weight); entry.u_threshold = dest->u_threshold; entry.l_threshold = dest->l_threshold; -@@ -3143,7 +3143,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest) +@@ -3141,7 +3141,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest) if (nla_put(skb, IPVS_DEST_ATTR_ADDR, sizeof(dest->addr), &dest->addr) || nla_put_be16(skb, IPVS_DEST_ATTR_PORT, dest->port) || nla_put_u32(skb, IPVS_DEST_ATTR_FWD_METHOD, @@ -158848,7 +158512,7 @@ index e7c1b05..81b2474 100644 IP_VS_CONN_F_FWD_MASK)) || nla_put_u32(skb, IPVS_DEST_ATTR_WEIGHT, atomic_read(&dest->weight)) || -@@ -3840,7 +3840,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs) +@@ -3838,7 +3838,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs) { struct net *net = ipvs->net; int idx; @@ -158915,10 +158579,10 @@ index 803001a..09fb00d 100644 cp->old_state = cp->state; /* diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c -index 3264cb49..6e06523 100644 +index dc196a0..e04d80d 100644 --- a/net/netfilter/ipvs/ip_vs_xmit.c +++ b/net/netfilter/ipvs/ip_vs_xmit.c -@@ -1268,7 +1268,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, +@@ -1260,7 +1260,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, else rc = NF_ACCEPT; /* do not touch skb anymore */ @@ -158927,7 +158591,7 @@ index 3264cb49..6e06523 100644 goto out; } -@@ -1361,7 +1361,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp, +@@ -1353,7 +1353,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp, else rc = NF_ACCEPT; /* do not touch skb anymore */ @@ -158950,10 +158614,10 @@ index 45da11a..ef3e5dc 100644 table = kmemdup(acct_sysctl_table, sizeof(acct_sysctl_table), GFP_KERNEL); diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c -index 6b94f0b..03e9b12 100644 +index e27fd17..480a953 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -1581,7 +1581,7 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls) +@@ -1579,7 +1579,7 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls) } EXPORT_SYMBOL_GPL(nf_ct_alloc_hashtable); @@ -158962,7 +158626,7 @@ index 6b94f0b..03e9b12 100644 { int i, bucket, rc; unsigned int hashsize, old_size; -@@ -1780,7 +1780,7 @@ void nf_conntrack_init_end(void) +@@ -1778,7 +1778,7 @@ void nf_conntrack_init_end(void) int nf_conntrack_init_net(struct net *net) { @@ -158971,7 +158635,7 @@ index 6b94f0b..03e9b12 100644 int ret = -ENOMEM; int cpu; -@@ -1804,7 +1804,7 @@ int nf_conntrack_init_net(struct net *net) +@@ -1802,7 +1802,7 @@ int nf_conntrack_init_net(struct net *net) goto err_pcpu_lists; net->ct.slabname = kasprintf(GFP_KERNEL, "nf_conntrack_%llu", @@ -159280,10 +158944,10 @@ index 2011977..ba46f29 100644 }; return netlink_dump_start(nlsk, skb, nlh, &c); diff --git a/net/netfilter/nfnetlink_acct.c b/net/netfilter/nfnetlink_acct.c -index 5274b04..12fded1 100644 +index dbd0803..1071d39 100644 --- a/net/netfilter/nfnetlink_acct.c +++ b/net/netfilter/nfnetlink_acct.c -@@ -261,10 +261,11 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl, +@@ -266,10 +266,11 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl, char *acct_name; if (nlh->nlmsg_flags & NLM_F_DUMP) { @@ -159296,7 +158960,7 @@ index 5274b04..12fded1 100644 if (tb[NFACCT_FILTER]) { struct nfacct_filter *filter; -@@ -273,9 +274,9 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl, +@@ -278,9 +279,9 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl, if (IS_ERR(filter)) return PTR_ERR(filter); @@ -159335,7 +158999,7 @@ index 2671b9d..e518410 100644 }; return netlink_dump_start(ctnl, skb, nlh, &c); diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c -index 8ca9320..e509290 100644 +index 11f81c8..9b07ee5 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c @@ -85,7 +85,7 @@ static int nfnl_log_net_id __read_mostly; @@ -159347,7 +159011,7 @@ index 8ca9320..e509290 100644 }; static struct nfnl_log_net *nfnl_log_pernet(struct net *net) -@@ -571,7 +571,7 @@ __build_packet_message(struct nfnl_log_net *log, +@@ -570,7 +570,7 @@ __build_packet_message(struct nfnl_log_net *log, /* global sequence number */ if ((inst->flags & NFULNL_CFG_F_SEQ_GLOBAL) && nla_put_be32(inst->skb, NFULA_SEQ_GLOBAL, @@ -159357,7 +159021,7 @@ index 8ca9320..e509290 100644 if (ct && nfnl_ct->build(inst->skb, ct, ctinfo, diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c -index 454841b..c8868616 100644 +index 6228c42..fe2517f 100644 --- a/net/netfilter/nft_compat.c +++ b/net/netfilter/nft_compat.c @@ -322,14 +322,7 @@ static void nft_match_eval(const struct nft_expr *expr, @@ -159377,7 +159041,7 @@ index 454841b..c8868616 100644 static const struct nla_policy nft_match_policy[NFTA_MATCH_MAX + 1] = { diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c -index 29d2c31..bf2c6a0 100644 +index daf45da..615f970 100644 --- a/net/netfilter/xt_IDLETIMER.c +++ b/net/netfilter/xt_IDLETIMER.c @@ -41,19 +41,13 @@ @@ -159542,7 +159206,7 @@ index 11de55e..f25e448 100644 return 0; } diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c -index d2bc03f..94d26ac 100644 +index f48e3b3..e7b3936 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -287,7 +287,7 @@ static void netlink_overrun(struct sock *sk) @@ -159554,7 +159218,7 @@ index d2bc03f..94d26ac 100644 } static void netlink_rcv_wake(struct sock *sk) -@@ -2877,7 +2877,9 @@ errout_skb: +@@ -2150,7 +2150,9 @@ errout_skb: int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb, const struct nlmsghdr *nlh, @@ -159565,7 +159229,7 @@ index d2bc03f..94d26ac 100644 { struct netlink_callback *cb; struct sock *sk; -@@ -2909,7 +2911,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb, +@@ -2173,7 +2175,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb, goto error_unlock; } /* add reference of module which cb->dump belongs to */ @@ -159574,7 +159238,7 @@ index d2bc03f..94d26ac 100644 ret = -EPROTONOSUPPORT; goto error_unlock; } -@@ -2920,8 +2922,8 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb, +@@ -2184,8 +2186,8 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb, cb->dump = control->dump; cb->done = control->done; cb->nlh = nlh; @@ -159585,7 +159249,7 @@ index d2bc03f..94d26ac 100644 cb->min_dump_alloc = control->min_dump_alloc; cb->skb = skb; -@@ -3188,7 +3190,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v) +@@ -2451,7 +2453,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v) sk_wmem_alloc_get(s), nlk->cb_running, atomic_read(&s->sk_refcnt), @@ -159594,7 +159258,7 @@ index d2bc03f..94d26ac 100644 sock_i_ino(s) ); -@@ -3295,7 +3297,7 @@ static void __init netlink_add_usersock_entry(void) +@@ -2558,7 +2560,7 @@ static void __init netlink_add_usersock_entry(void) netlink_table_ungrab(); } @@ -159604,10 +159268,10 @@ index d2bc03f..94d26ac 100644 .exit = netlink_net_exit, }; diff --git a/net/netlink/diag.c b/net/netlink/diag.c -index 3ee63a3cf..d6df4d8 100644 +index 8dd836a..196d1cd 100644 --- a/net/netlink/diag.c +++ b/net/netlink/diag.c -@@ -209,7 +209,7 @@ static int netlink_diag_handler_dump(struct sk_buff *skb, struct nlmsghdr *h) +@@ -170,7 +170,7 @@ static int netlink_diag_handler_dump(struct sk_buff *skb, struct nlmsghdr *h) return -EINVAL; if (h->nlmsg_flags & NLM_F_DUMP) { @@ -159617,10 +159281,10 @@ index 3ee63a3cf..d6df4d8 100644 }; return netlink_dump_start(net->diag_nlsk, skb, h, &c); diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c -index f830326..162f6da 100644 +index a09132a..75aa387 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c -@@ -587,28 +587,26 @@ static int genl_family_rcv_msg(struct genl_family *family, +@@ -571,28 +571,26 @@ static int genl_family_rcv_msg(struct genl_family *family, return -EOPNOTSUPP; if (!family->parallel_ops) { @@ -159656,7 +159320,7 @@ index f830326..162f6da 100644 return rc; diff --git a/net/openvswitch/vport-geneve.c b/net/openvswitch/vport-geneve.c -index 30ab8e1..00ff20a 100644 +index 1a1fcec..75173ca 100644 --- a/net/openvswitch/vport-geneve.c +++ b/net/openvswitch/vport-geneve.c @@ -111,12 +111,17 @@ static struct vport *geneve_create(const struct vport_parms *parms) @@ -159700,7 +159364,7 @@ index 7f8897f..15b61a2 100644 }; diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c -index ec76398..81d562c 100644 +index 7c8b90b..f7528aa 100644 --- a/net/openvswitch/vport-internal_dev.c +++ b/net/openvswitch/vport-internal_dev.c @@ -44,7 +44,7 @@ static struct internal_dev *internal_dev_priv(struct net_device *netdev) @@ -159712,8 +159376,8 @@ index ec76398..81d562c 100644 { int len, err; -@@ -147,7 +147,7 @@ static const struct net_device_ops internal_dev_netdev_ops = { - .ndo_get_stats64 = internal_get_stats, +@@ -153,7 +153,7 @@ static const struct net_device_ops internal_dev_netdev_ops = { + .ndo_set_rx_headroom = internal_set_rx_headroom, }; -static struct rtnl_link_ops internal_dev_link_ops __read_mostly = { @@ -159767,7 +159431,7 @@ index 5eb7694..58d8f08 100644 static int __init ovs_vxlan_tnl_init(void) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c -index 9cc7b51..3eb11c3 100644 +index 18d0bec..8fdeb86 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -278,7 +278,7 @@ static int packet_direct_xmit(struct sk_buff *skb) @@ -159779,7 +159443,7 @@ index 9cc7b51..3eb11c3 100644 kfree_skb(skb); return NET_XMIT_DROP; } -@@ -1392,9 +1392,9 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f, +@@ -1391,9 +1391,9 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f, packet_rcv_has_room(po_next, skb) == ROOM_NORMAL) { if (i != j) po->rollover->sock = i; @@ -159791,7 +159455,7 @@ index 9cc7b51..3eb11c3 100644 return i; } -@@ -1402,7 +1402,7 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f, +@@ -1401,7 +1401,7 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f, i = 0; } while (i != j); @@ -159800,7 +159464,7 @@ index 9cc7b51..3eb11c3 100644 return idx; } -@@ -1657,9 +1657,9 @@ static int fanout_add(struct sock *sk, u16 id, u16 type_flags) +@@ -1656,9 +1656,9 @@ static int fanout_add(struct sock *sk, u16 id, u16 type_flags) po->rollover = kzalloc(sizeof(*po->rollover), GFP_KERNEL); if (!po->rollover) return -ENOMEM; @@ -159813,7 +159477,7 @@ index 9cc7b51..3eb11c3 100644 } mutex_lock(&fanout_mutex); -@@ -2075,7 +2075,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, +@@ -2132,7 +2132,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, drop_n_acct: spin_lock(&sk->sk_receive_queue.lock); po->stats.stats1.tp_drops++; @@ -159822,7 +159486,7 @@ index 9cc7b51..3eb11c3 100644 spin_unlock(&sk->sk_receive_queue.lock); drop_n_restore: -@@ -3766,7 +3766,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, +@@ -3849,7 +3849,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, case PACKET_HDRLEN: if (len > sizeof(int)) len = sizeof(int); @@ -159831,7 +159495,7 @@ index 9cc7b51..3eb11c3 100644 return -EFAULT; switch (val) { case TPACKET_V1: -@@ -3801,9 +3801,9 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, +@@ -3884,9 +3884,9 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, case PACKET_ROLLOVER_STATS: if (!po->rollover) return -EINVAL; @@ -159844,7 +159508,7 @@ index 9cc7b51..3eb11c3 100644 data = &rstats; lv = sizeof(rstats); break; -@@ -3821,7 +3821,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, +@@ -3904,7 +3904,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, len = lv; if (put_user(len, optlen)) return -EFAULT; @@ -159915,10 +159579,10 @@ index 850a86c..8884a37 100644 break; } diff --git a/net/phonet/socket.c b/net/phonet/socket.c -index d575ef4..1dedc31 100644 +index ffd5f22..94a18ec 100644 --- a/net/phonet/socket.c +++ b/net/phonet/socket.c -@@ -611,7 +611,7 @@ static int pn_sock_seq_show(struct seq_file *seq, void *v) +@@ -613,7 +613,7 @@ static int pn_sock_seq_show(struct seq_file *seq, void *v) from_kuid_munged(seq_user_ns(seq), sock_i_uid(sk)), sock_i_ino(sk), atomic_read(&sk->sk_refcnt), sk, @@ -159941,7 +159605,7 @@ index c02a8c4..3c5b600 100644 .maxlen = sizeof(range), .mode = table->mode, diff --git a/net/rds/cong.c b/net/rds/cong.c -index e6144b8..4f9fda6 100644 +index 6641bcf..578082a 100644 --- a/net/rds/cong.c +++ b/net/rds/cong.c @@ -78,7 +78,7 @@ @@ -159972,10 +159636,10 @@ index e6144b8..4f9fda6 100644 if (likely(*recent == gen)) return 0; diff --git a/net/rds/ib.h b/net/rds/ib.h -index b3fdebb5..43e973b 100644 +index 627fb79..e0856c7 100644 --- a/net/rds/ib.h +++ b/net/rds/ib.h -@@ -156,7 +156,7 @@ struct rds_ib_connection { +@@ -153,7 +153,7 @@ struct rds_ib_connection { /* sending acks */ unsigned long i_ack_flags; #ifdef KERNEL_HAS_ATOMIC64 @@ -159985,10 +159649,10 @@ index b3fdebb5..43e973b 100644 spinlock_t i_ack_lock; /* protect i_ack_next */ u64 i_ack_next; /* next ACK to send */ diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c -index da5a7fb..1095491 100644 +index 310cabc..76b03d2 100644 --- a/net/rds/ib_cm.c +++ b/net/rds/ib_cm.c -@@ -805,7 +805,7 @@ void rds_ib_conn_shutdown(struct rds_connection *conn) +@@ -830,7 +830,7 @@ void rds_ib_conn_shutdown(struct rds_connection *conn) /* Clear the ACK state */ clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags); #ifdef KERNEL_HAS_ATOMIC64 @@ -159998,7 +159662,7 @@ index da5a7fb..1095491 100644 ic->i_ack_next = 0; #endif diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c -index 977fb86..0d10a97 100644 +index abc8cc8..ef9adf9 100644 --- a/net/rds/ib_recv.c +++ b/net/rds/ib_recv.c @@ -623,7 +623,7 @@ static u64 rds_ib_get_ack(struct rds_ib_connection *ic) @@ -160019,59 +159683,11 @@ index 977fb86..0d10a97 100644 } #endif -diff --git a/net/rds/iw.h b/net/rds/iw.h -index 5af01d1..29d5f61 100644 ---- a/net/rds/iw.h -+++ b/net/rds/iw.h -@@ -137,7 +137,7 @@ struct rds_iw_connection { - /* sending acks */ - unsigned long i_ack_flags; - #ifdef KERNEL_HAS_ATOMIC64 -- atomic64_t i_ack_next; /* next ACK to send */ -+ atomic64_unchecked_t i_ack_next; /* next ACK to send */ - #else - spinlock_t i_ack_lock; /* protect i_ack_next */ - u64 i_ack_next; /* next ACK to send */ -diff --git a/net/rds/iw_cm.c b/net/rds/iw_cm.c -index aea4c91..716ba52 100644 ---- a/net/rds/iw_cm.c -+++ b/net/rds/iw_cm.c -@@ -667,7 +667,7 @@ void rds_iw_conn_shutdown(struct rds_connection *conn) - /* Clear the ACK state */ - clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags); - #ifdef KERNEL_HAS_ATOMIC64 -- atomic64_set(&ic->i_ack_next, 0); -+ atomic64_set_unchecked(&ic->i_ack_next, 0); - #else - ic->i_ack_next = 0; - #endif -diff --git a/net/rds/iw_recv.c b/net/rds/iw_recv.c -index a66d179..cf1e258 100644 ---- a/net/rds/iw_recv.c -+++ b/net/rds/iw_recv.c -@@ -412,7 +412,7 @@ static u64 rds_iw_get_ack(struct rds_iw_connection *ic) - static void rds_iw_set_ack(struct rds_iw_connection *ic, u64 seq, - int ack_required) - { -- atomic64_set(&ic->i_ack_next, seq); -+ atomic64_set_unchecked(&ic->i_ack_next, seq); - if (ack_required) { - smp_mb__before_atomic(); - set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); -@@ -424,7 +424,7 @@ static u64 rds_iw_get_ack(struct rds_iw_connection *ic) - clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); - smp_mb__after_atomic(); - -- return atomic64_read(&ic->i_ack_next); -+ return atomic64_read_unchecked(&ic->i_ack_next); - } - #endif - diff --git a/net/rds/rds.h b/net/rds/rds.h -index 0e2797b..a4a38ff 100644 +index 80256b0..dde73be 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h -@@ -463,7 +463,7 @@ struct rds_transport { +@@ -464,7 +464,7 @@ struct rds_transport { void (*sync_mr)(void *trans_private, int direction); void (*free_mr)(void *trans_private, int invalidate); void (*flush_mrs)(void); @@ -160081,10 +159697,19 @@ index 0e2797b..a4a38ff 100644 struct rds_sock { struct sock rs_sk; diff --git a/net/rds/tcp.c b/net/rds/tcp.c -index 9d6ddba..da3cd96 100644 +index 86187da..0a3d027 100644 --- a/net/rds/tcp.c +++ b/net/rds/tcp.c -@@ -62,7 +62,7 @@ void rds_tcp_nonagle(struct socket *sock) +@@ -59,7 +59,7 @@ static int rds_tcp_skbuf_handler(struct ctl_table *ctl, int write, + int rds_tcp_min_sndbuf = SOCK_MIN_SNDBUF; + int rds_tcp_min_rcvbuf = SOCK_MIN_RCVBUF; + +-static struct ctl_table rds_tcp_sysctl_table[] = { ++static ctl_table_no_const rds_tcp_sysctl_table[] = { + #define RDS_TCP_SNDBUF 0 + { + .procname = "rds_tcp_sndbuf", +@@ -88,7 +88,7 @@ void rds_tcp_nonagle(struct socket *sock) int val = 1; set_fs(KERNEL_DS); @@ -160093,13 +159718,22 @@ index 9d6ddba..da3cd96 100644 sizeof(val)); set_fs(oldfs); } +@@ -340,7 +340,7 @@ void rds_tcp_accept_work(struct sock *sk) + static __net_init int rds_tcp_init_net(struct net *net) + { + struct rds_tcp_net *rtn = net_generic(net, rds_tcp_netid); +- struct ctl_table *tbl; ++ ctl_table_no_const *tbl; + int err = 0; + + memset(rtn, 0, sizeof(*rtn)); diff --git a/net/rds/tcp.h b/net/rds/tcp.h -index 64f873c..a52c8aa 100644 +index 41c2283..6cad9c5 100644 --- a/net/rds/tcp.h +++ b/net/rds/tcp.h -@@ -13,9 +13,9 @@ struct rds_tcp_connection { - struct list_head t_tcp_node; - struct rds_connection *conn; +@@ -17,9 +17,9 @@ struct rds_tcp_connection { + */ + struct mutex t_conn_lock; struct socket *t_sock; - void *t_orig_write_space; - void *t_orig_data_ready; @@ -160124,11 +159758,11 @@ index 2894e60..f9c01ac 100644 set_fs(oldfs); } diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c -index 7e2d105..c060cb7 100644 +index 9d935fa..5f6db3c 100644 --- a/net/rxrpc/af_rxrpc.c +++ b/net/rxrpc/af_rxrpc.c @@ -40,7 +40,7 @@ static const struct proto_ops rxrpc_rpc_ops; - __be32 rxrpc_epoch; + u32 rxrpc_epoch; /* current debugging ID */ -atomic_t rxrpc_debug_id; @@ -160137,10 +159771,10 @@ index 7e2d105..c060cb7 100644 /* count of skbs currently in use */ atomic_t rxrpc_n_skbs; diff --git a/net/rxrpc/ar-ack.c b/net/rxrpc/ar-ack.c -index adc555e..abb87bf 100644 +index 16d9670..3f3ab1a 100644 --- a/net/rxrpc/ar-ack.c +++ b/net/rxrpc/ar-ack.c -@@ -224,7 +224,7 @@ static void rxrpc_resend(struct rxrpc_call *call) +@@ -223,7 +223,7 @@ static void rxrpc_resend(struct rxrpc_call *call) _enter("{%d,%d,%d,%d},", call->acks_hard, call->acks_unacked, @@ -160149,16 +159783,16 @@ index adc555e..abb87bf 100644 CIRC_CNT(call->acks_head, call->acks_tail, call->acks_winsz)); stop = false; -@@ -248,7 +248,7 @@ static void rxrpc_resend(struct rxrpc_call *call) +@@ -246,7 +246,7 @@ static void rxrpc_resend(struct rxrpc_call *call) + sp->need_resend = false; /* each Tx packet has a new serial number */ - sp->hdr.serial = -- htonl(atomic_inc_return(&call->conn->serial)); -+ htonl(atomic_inc_return_unchecked(&call->conn->serial)); +- sp->hdr.serial = atomic_inc_return(&call->conn->serial); ++ sp->hdr.serial = atomic_inc_return_unchecked(&call->conn->serial); - hdr = (struct rxrpc_header *) txb->head; - hdr->serial = sp->hdr.serial; -@@ -452,7 +452,7 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, u32 hard) + whdr = (struct rxrpc_wire_header *)txb->head; + whdr->serial = htonl(sp->hdr.serial); +@@ -450,7 +450,7 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, u32 hard) */ static void rxrpc_clear_tx_window(struct rxrpc_call *call) { @@ -160167,16 +159801,16 @@ index adc555e..abb87bf 100644 } /* -@@ -678,7 +678,7 @@ process_further: +@@ -673,7 +673,7 @@ process_further: - latest = ntohl(sp->hdr.serial); + latest = sp->hdr.serial; hard = ntohl(ack.firstPacket); - tx = atomic_read(&call->sequence); + tx = atomic_read_unchecked(&call->sequence); _proto("Rx ACK %%%u { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }", latest, -@@ -1212,7 +1212,7 @@ void rxrpc_process_call(struct work_struct *work) +@@ -1206,7 +1206,7 @@ void rxrpc_process_call(struct work_struct *work) goto maybe_reschedule; send_ACK_with_skew: @@ -160185,29 +159819,29 @@ index adc555e..abb87bf 100644 ntohl(ack.serial)); send_ACK: mtu = call->conn->trans->peer->if_mtu; -@@ -1224,7 +1224,7 @@ send_ACK: +@@ -1218,7 +1218,7 @@ send_ACK: ackinfo.rxMTU = htonl(rxrpc_rx_mtu); ackinfo.jumbo_max = htonl(rxrpc_rx_jumbo_max); -- hdr.serial = htonl(atomic_inc_return(&call->conn->serial)); -+ hdr.serial = htonl(atomic_inc_return_unchecked(&call->conn->serial)); +- serial = atomic_inc_return(&call->conn->serial); ++ serial = atomic_inc_return_unchecked(&call->conn->serial); + whdr.serial = htonl(serial); _proto("Tx ACK %%%u { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }", - ntohl(hdr.serial), - ntohs(ack.maxSkew), -@@ -1242,7 +1242,7 @@ send_ACK: + serial, +@@ -1237,7 +1237,7 @@ send_ACK: send_message: _debug("send message"); -- hdr.serial = htonl(atomic_inc_return(&call->conn->serial)); -+ hdr.serial = htonl(atomic_inc_return_unchecked(&call->conn->serial)); - _proto("Tx %s %%%u", rxrpc_pkts[hdr.type], ntohl(hdr.serial)); +- serial = atomic_inc_return(&call->conn->serial); ++ serial = atomic_inc_return_unchecked(&call->conn->serial); + whdr.serial = htonl(serial); + _proto("Tx %s %%%u", rxrpc_pkts[whdr.type], serial); send_message_2: - diff --git a/net/rxrpc/ar-call.c b/net/rxrpc/ar-call.c -index a9e05db..194e793 100644 +index 7c8d300..570ba4f 100644 --- a/net/rxrpc/ar-call.c +++ b/net/rxrpc/ar-call.c -@@ -232,7 +232,7 @@ static struct rxrpc_call *rxrpc_alloc_call(gfp_t gfp) +@@ -229,7 +229,7 @@ static struct rxrpc_call *rxrpc_alloc_call(gfp_t gfp) spin_lock_init(&call->lock); rwlock_init(&call->state_lock); atomic_set(&call->usage, 1); @@ -160217,7 +159851,7 @@ index a9e05db..194e793 100644 memset(&call->sock_node, 0xed, sizeof(call->sock_node)); diff --git a/net/rxrpc/ar-connection.c b/net/rxrpc/ar-connection.c -index 6c71ed1..2e59425 100644 +index 9942da1..1559525 100644 --- a/net/rxrpc/ar-connection.c +++ b/net/rxrpc/ar-connection.c @@ -210,7 +210,7 @@ static struct rxrpc_connection *rxrpc_alloc_connection(gfp_t gfp) @@ -160228,41 +159862,41 @@ index 6c71ed1..2e59425 100644 + conn->debug_id = atomic_inc_return_unchecked(&rxrpc_debug_id); conn->avail_calls = RXRPC_MAXCALLS; conn->size_align = 4; - conn->header_size = sizeof(struct rxrpc_header); + conn->header_size = sizeof(struct rxrpc_wire_header); diff --git a/net/rxrpc/ar-connevent.c b/net/rxrpc/ar-connevent.c -index e7ed43a..6afa140 100644 +index 1bdaaed..899cdff3 100644 --- a/net/rxrpc/ar-connevent.c +++ b/net/rxrpc/ar-connevent.c -@@ -109,7 +109,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn, +@@ -110,7 +110,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn, len = iov[0].iov_len + iov[1].iov_len; -- hdr.serial = htonl(atomic_inc_return(&conn->serial)); -+ hdr.serial = htonl(atomic_inc_return_unchecked(&conn->serial)); - _proto("Tx CONN ABORT %%%u { %d }", ntohl(hdr.serial), abort_code); +- serial = atomic_inc_return(&conn->serial); ++ serial = atomic_inc_return_unchecked(&conn->serial); + whdr.serial = htonl(serial); + _proto("Tx CONN ABORT %%%u { %d }", serial, abort_code); - ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 2, len); diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c -index 4505a69..fe73096 100644 +index 63ed75c..bba8e0c 100644 --- a/net/rxrpc/ar-input.c +++ b/net/rxrpc/ar-input.c -@@ -331,9 +331,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb) +@@ -330,9 +330,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb) + /* track the latest serial number on this connection for ACK packet * information */ - serial = ntohl(sp->hdr.serial); - hi_serial = atomic_read(&call->conn->hi_serial); + hi_serial = atomic_read_unchecked(&call->conn->hi_serial); - while (serial > hi_serial) + while (sp->hdr.serial > hi_serial) - hi_serial = atomic_cmpxchg(&call->conn->hi_serial, hi_serial, + hi_serial = atomic_cmpxchg_unchecked(&call->conn->hi_serial, hi_serial, - serial); + sp->hdr.serial); /* request ACK generation for any ACK or DATA packet that requests diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h -index 2934a73..a0091f5 100644 +index cd6cdbe..8d4020f 100644 --- a/net/rxrpc/ar-internal.h +++ b/net/rxrpc/ar-internal.h -@@ -274,8 +274,8 @@ struct rxrpc_connection { +@@ -292,8 +292,8 @@ struct rxrpc_connection { int error; /* error code for local abort */ int debug_id; /* debug ID for printks */ unsigned int call_counter; /* call ID counter */ @@ -160273,26 +159907,26 @@ index 2934a73..a0091f5 100644 u8 avail_calls; /* number of calls available */ u8 size_align; /* data size alignment (for security) */ u8 header_size; /* rxrpc + security header size */ -@@ -348,7 +348,7 @@ struct rxrpc_call { +@@ -398,7 +398,7 @@ struct rxrpc_call { spinlock_t lock; rwlock_t state_lock; /* lock for state transition */ atomic_t usage; - atomic_t sequence; /* Tx data packet sequence counter */ + atomic_unchecked_t sequence; /* Tx data packet sequence counter */ u32 abort_code; /* local/remote abort code */ - enum { /* current state of call */ - RXRPC_CALL_CLIENT_SEND_REQUEST, /* - client sending request phase */ -@@ -433,7 +433,7 @@ static inline void rxrpc_abort_call(struct rxrpc_call *call, u32 abort_code) + enum rxrpc_call_state state : 8; /* current state of call */ + int debug_id; /* debug ID for printks */ +@@ -465,7 +465,7 @@ static inline void rxrpc_abort_call(struct rxrpc_call *call, u32 abort_code) */ extern atomic_t rxrpc_n_skbs; - extern __be32 rxrpc_epoch; + extern u32 rxrpc_epoch; -extern atomic_t rxrpc_debug_id; +extern atomic_unchecked_t rxrpc_debug_id; extern struct workqueue_struct *rxrpc_workqueue; /* diff --git a/net/rxrpc/ar-local.c b/net/rxrpc/ar-local.c -index 78483b4..b1c0e1e 100644 +index 4e1e6db..1e86180 100644 --- a/net/rxrpc/ar-local.c +++ b/net/rxrpc/ar-local.c @@ -53,7 +53,7 @@ struct rxrpc_local *rxrpc_alloc_local(struct sockaddr_rxrpc *srx) @@ -160305,28 +159939,27 @@ index 78483b4..b1c0e1e 100644 } diff --git a/net/rxrpc/ar-output.c b/net/rxrpc/ar-output.c -index 14c4e12..971ba8b 100644 +index d36fb6e..2ef98a0 100644 --- a/net/rxrpc/ar-output.c +++ b/net/rxrpc/ar-output.c -@@ -648,14 +648,14 @@ static int rxrpc_send_data(struct rxrpc_sock *rx, +@@ -672,13 +672,13 @@ static int rxrpc_send_data(struct rxrpc_sock *rx, memset(skb_put(skb, pad), 0, pad); } - seq = atomic_inc_return(&call->sequence); + seq = atomic_inc_return_unchecked(&call->sequence); - sp->hdr.epoch = conn->epoch; - sp->hdr.cid = call->cid; + sp->hdr.epoch = conn->epoch; + sp->hdr.cid = call->cid; sp->hdr.callNumber = call->call_id; - sp->hdr.seq = htonl(seq); - sp->hdr.serial = -- htonl(atomic_inc_return(&conn->serial)); -+ htonl(atomic_inc_return_unchecked(&conn->serial)); - sp->hdr.type = RXRPC_PACKET_TYPE_DATA; + sp->hdr.seq = seq; +- sp->hdr.serial = atomic_inc_return(&conn->serial); ++ sp->hdr.serial = atomic_inc_return_unchecked(&conn->serial); + sp->hdr.type = RXRPC_PACKET_TYPE_DATA; sp->hdr.userStatus = 0; sp->hdr.securityIndex = conn->security_ix; diff --git a/net/rxrpc/ar-peer.c b/net/rxrpc/ar-peer.c -index bebaa43..2644591 100644 +index dc089b1..21889d9 100644 --- a/net/rxrpc/ar-peer.c +++ b/net/rxrpc/ar-peer.c @@ -72,7 +72,7 @@ static struct rxrpc_peer *rxrpc_alloc_peer(struct sockaddr_rxrpc *srx, @@ -160339,7 +159972,7 @@ index bebaa43..2644591 100644 rxrpc_assess_MTU_size(peer); diff --git a/net/rxrpc/ar-proc.c b/net/rxrpc/ar-proc.c -index 38047f7..9f48511 100644 +index 525b2ba..d9373f8 100644 --- a/net/rxrpc/ar-proc.c +++ b/net/rxrpc/ar-proc.c @@ -164,8 +164,8 @@ static int rxrpc_connection_seq_show(struct seq_file *seq, void *v) @@ -160354,42 +159987,42 @@ index 38047f7..9f48511 100644 return 0; } diff --git a/net/rxrpc/ar-transport.c b/net/rxrpc/ar-transport.c -index 9946467..9dfbccb 100644 +index 66a1a56..01f6f0b 100644 --- a/net/rxrpc/ar-transport.c +++ b/net/rxrpc/ar-transport.c -@@ -51,7 +51,7 @@ static struct rxrpc_transport *rxrpc_alloc_transport(struct rxrpc_local *local, - spin_lock_init(&trans->client_lock); +@@ -52,7 +52,7 @@ static struct rxrpc_transport *rxrpc_alloc_transport(struct rxrpc_local *local, rwlock_init(&trans->conn_lock); atomic_set(&trans->usage, 1); + trans->conn_idcounter = peer->srx.srx_service << 16; - trans->debug_id = atomic_inc_return(&rxrpc_debug_id); + trans->debug_id = atomic_inc_return_unchecked(&rxrpc_debug_id); if (peer->srx.transport.family == AF_INET) { switch (peer->srx.transport_type) { diff --git a/net/rxrpc/rxkad.c b/net/rxrpc/rxkad.c -index d7a9ab5..3b6d126 100644 +index f0aeb81..e0f0593 100644 --- a/net/rxrpc/rxkad.c +++ b/net/rxrpc/rxkad.c -@@ -610,7 +610,7 @@ static int rxkad_issue_challenge(struct rxrpc_connection *conn) +@@ -633,7 +633,7 @@ static int rxkad_issue_challenge(struct rxrpc_connection *conn) len = iov[0].iov_len + iov[1].iov_len; -- hdr.serial = htonl(atomic_inc_return(&conn->serial)); -+ hdr.serial = htonl(atomic_inc_return_unchecked(&conn->serial)); - _proto("Tx CHALLENGE %%%u", ntohl(hdr.serial)); +- serial = atomic_inc_return(&conn->serial); ++ serial = atomic_inc_return_unchecked(&conn->serial); + whdr.serial = htonl(serial); + _proto("Tx CHALLENGE %%%u", serial); - ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 2, len); -@@ -660,7 +660,7 @@ static int rxkad_send_response(struct rxrpc_connection *conn, +@@ -687,7 +687,7 @@ static int rxkad_send_response(struct rxrpc_connection *conn, len = iov[0].iov_len + iov[1].iov_len + iov[2].iov_len; -- hdr->serial = htonl(atomic_inc_return(&conn->serial)); -+ hdr->serial = htonl(atomic_inc_return_unchecked(&conn->serial)); - _proto("Tx RESPONSE %%%u", ntohl(hdr->serial)); +- serial = atomic_inc_return(&conn->serial); ++ serial = atomic_inc_return_unchecked(&conn->serial); + whdr.serial = htonl(serial); + _proto("Tx RESPONSE %%%u", serial); - ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 3, len); diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c -index aa47250..cbfe1bf 100644 +index 80742ed..c76a9c4 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -352,7 +352,7 @@ void netif_carrier_on(struct net_device *dev) @@ -160437,61 +160070,8 @@ index c2fbde7..fedcaf4 100644 consume_skb(skb); return nb > 0 ? NET_XMIT_SUCCESS : NET_XMIT_DROP; } -diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c -index 871cdf9..401c607 100644 ---- a/net/sctp/bind_addr.c -+++ b/net/sctp/bind_addr.c -@@ -111,7 +111,8 @@ int sctp_bind_addr_dup(struct sctp_bind_addr *dest, - dest->port = src->port; - - list_for_each_entry(addr, &src->address_list, list) { -- error = sctp_add_bind_addr(dest, &addr->a, 1, gfp); -+ error = sctp_add_bind_addr(dest, &addr->a, sizeof(addr->a), -+ 1, gfp); - if (error < 0) - break; - } -@@ -150,7 +151,7 @@ void sctp_bind_addr_free(struct sctp_bind_addr *bp) - - /* Add an address to the bind address list in the SCTP_bind_addr structure. */ - int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new, -- __u8 addr_state, gfp_t gfp) -+ int new_size, __u8 addr_state, gfp_t gfp) - { - struct sctp_sockaddr_entry *addr; - -@@ -159,7 +160,7 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new, - if (!addr) - return -ENOMEM; - -- memcpy(&addr->a, new, sizeof(*new)); -+ memcpy(&addr->a, new, min_t(size_t, sizeof(*new), new_size)); - - /* Fix up the port if it has not yet been set. - * Both v4 and v6 have the port at the same offset. -@@ -291,7 +292,8 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list, - } - - af->from_addr_param(&addr, rawaddr, htons(port), 0); -- retval = sctp_add_bind_addr(bp, &addr, SCTP_ADDR_SRC, gfp); -+ retval = sctp_add_bind_addr(bp, &addr, sizeof(addr), -+ SCTP_ADDR_SRC, gfp); - if (retval) { - /* Can't finish building the list, clean up. */ - sctp_bind_addr_clean(bp); -@@ -453,8 +455,8 @@ static int sctp_copy_one_addr(struct net *net, struct sctp_bind_addr *dest, - (((AF_INET6 == addr->sa.sa_family) && - (flags & SCTP_ADDR6_ALLOWED) && - (flags & SCTP_ADDR6_PEERSUPP)))) -- error = sctp_add_bind_addr(dest, addr, SCTP_ADDR_SRC, -- gfp); -+ error = sctp_add_bind_addr(dest, addr, sizeof(*addr), -+ SCTP_ADDR_SRC, gfp); - } - - return error; diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c -index ce46f1c..47ef3e1 100644 +index ce46f1c..0a4e659 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c @@ -989,7 +989,7 @@ static const struct inet6_protocol sctpv6_protocol = { @@ -160503,15 +160083,6 @@ index ce46f1c..47ef3e1 100644 .sa_family = AF_INET6, .sctp_xmit = sctp_v6_xmit, .setsockopt = ipv6_setsockopt, -@@ -1019,7 +1019,7 @@ static struct sctp_af sctp_af_inet6 = { - #endif - }; - --static struct sctp_pf sctp_pf_inet6 = { -+static struct sctp_pf sctp_pf_inet6 __read_only = { - .event_msgname = sctp_inet6_event_msgname, - .skb_msgname = sctp_inet6_skb_msgname, - .af_supported = sctp_inet6_af_supported, @@ -1046,7 +1046,7 @@ void sctp_v6_pf_init(void) void sctp_v6_pf_exit(void) @@ -160522,18 +160093,10 @@ index ce46f1c..47ef3e1 100644 /* Initialize IPv6 support and register with socket layer. */ diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c -index 1099e99..e309828 100644 +index d3d50da..55e871e 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c -@@ -216,6 +216,7 @@ int sctp_copy_local_addr_list(struct net *net, struct sctp_bind_addr *bp, - (copy_flags & SCTP_ADDR6_ALLOWED) && - (copy_flags & SCTP_ADDR6_PEERSUPP)))) { - error = sctp_add_bind_addr(bp, &addr->a, -+ sizeof(addr->a), - SCTP_ADDR_SRC, GFP_ATOMIC); - if (error) - goto end_copy; -@@ -858,8 +859,10 @@ int sctp_register_af(struct sctp_af *af) +@@ -859,8 +859,10 @@ int sctp_register_af(struct sctp_af *af) return 0; } @@ -160545,16 +160108,7 @@ index 1099e99..e309828 100644 return 1; } -@@ -989,7 +992,7 @@ static inline int sctp_v4_xmit(struct sk_buff *skb, - - static struct sctp_af sctp_af_inet; - --static struct sctp_pf sctp_pf_inet = { -+static struct sctp_pf sctp_pf_inet __read_only = { - .event_msgname = sctp_inet_event_msgname, - .skb_msgname = sctp_inet_skb_msgname, - .af_supported = sctp_inet_af_supported, -@@ -1061,7 +1064,7 @@ static const struct net_protocol sctp_protocol = { +@@ -1062,7 +1064,7 @@ static const struct net_protocol sctp_protocol = { }; /* IPv4 address related functions. */ @@ -160563,7 +160117,7 @@ index 1099e99..e309828 100644 .sa_family = AF_INET, .sctp_xmit = sctp_v4_xmit, .setsockopt = ip_setsockopt, -@@ -1145,7 +1148,7 @@ static void sctp_v4_pf_init(void) +@@ -1146,7 +1148,7 @@ static void sctp_v4_pf_init(void) static void sctp_v4_pf_exit(void) { @@ -160572,25 +160126,11 @@ index 1099e99..e309828 100644 } static int sctp_v4_protosw_init(void) -diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c -index 5d6a03f..7fe971e 100644 ---- a/net/sctp/sm_make_chunk.c -+++ b/net/sctp/sm_make_chunk.c -@@ -1830,7 +1830,8 @@ no_hmac: - /* Also, add the destination address. */ - if (list_empty(&retval->base.bind_addr.address_list)) { - sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, -- SCTP_ADDR_SRC, GFP_ATOMIC); -+ sizeof(chunk->dest), SCTP_ADDR_SRC, -+ GFP_ATOMIC); - } - - retval->next_tsn = retval->c.initial_tsn; diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c -index b5327bb..807f714 100644 +index 41b081a..cfea9d6 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c -@@ -431,7 +431,7 @@ static void sctp_generate_sack_event(unsigned long data) +@@ -444,7 +444,7 @@ static void sctp_generate_sack_event(unsigned long data) sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_SACK); } @@ -160609,28 +160149,10 @@ index b5327bb..807f714 100644 NULL, sctp_cname, sctp_tname, sctp_oname, sctp_pname, }; diff --git a/net/sctp/socket.c b/net/sctp/socket.c -index e878da0..f0f6b12 100644 +index 878d28e..09a9b63 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c -@@ -386,7 +386,8 @@ static int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) - /* Add the address to the bind address list. - * Use GFP_ATOMIC since BHs will be disabled. - */ -- ret = sctp_add_bind_addr(bp, addr, SCTP_ADDR_SRC, GFP_ATOMIC); -+ ret = sctp_add_bind_addr(bp, addr, af->sockaddr_len, -+ SCTP_ADDR_SRC, GFP_ATOMIC); - - /* Copy back into socket for getsockname() use. */ - if (!ret) { -@@ -577,6 +578,7 @@ static int sctp_send_asconf_add_ip(struct sock *sk, - af = sctp_get_af_specific(addr->v4.sin_family); - memcpy(&saveaddr, addr, af->sockaddr_len); - retval = sctp_add_bind_addr(bp, &saveaddr, -+ sizeof(saveaddr), - SCTP_ADDR_NEW, GFP_ATOMIC); - addr_buf += af->sockaddr_len; - } -@@ -2188,11 +2190,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval, +@@ -2190,11 +2190,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval, { struct sctp_association *asoc; struct sctp_ulpevent *event; @@ -160645,7 +160167,7 @@ index e878da0..f0f6b12 100644 /* At the time when a user app subscribes to SCTP_SENDER_DRY_EVENT, * if there is no data to be sent or retransmit, the stack will -@@ -4367,13 +4371,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len, +@@ -4369,13 +4371,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len, static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, int __user *optlen) { @@ -160663,7 +160185,7 @@ index e878da0..f0f6b12 100644 return -EFAULT; return 0; } -@@ -4391,6 +4398,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, +@@ -4393,6 +4398,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, */ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen) { @@ -160672,7 +160194,7 @@ index e878da0..f0f6b12 100644 /* Applicable to UDP-style socket only */ if (sctp_style(sk, TCP)) return -EOPNOTSUPP; -@@ -4399,7 +4408,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv +@@ -4401,7 +4408,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv len = sizeof(int); if (put_user(len, optlen)) return -EFAULT; @@ -160682,7 +160204,7 @@ index e878da0..f0f6b12 100644 return -EFAULT; return 0; } -@@ -4773,12 +4783,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len, +@@ -4775,12 +4783,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len, */ static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen) { @@ -160699,7 +160221,7 @@ index e878da0..f0f6b12 100644 return -EFAULT; return 0; } -@@ -4819,6 +4832,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, +@@ -4821,6 +4832,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, ->addr_to_user(sp, &temp); if (space_left < addrlen) return -ENOMEM; @@ -160758,7 +160280,7 @@ index daf8554..4ab495b 100644 table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL); diff --git a/net/socket.c b/net/socket.c -index db13ae8..dabfbea 100644 +index 5f77a8e..1d36c7e 100644 --- a/net/socket.c +++ b/net/socket.c @@ -89,6 +89,7 @@ @@ -160795,7 +160317,7 @@ index db13ae8..dabfbea 100644 static struct file_system_type sock_fs_type = { .name = "sockfs", -@@ -1099,6 +1101,8 @@ int __sock_create(struct net *net, int family, int type, int protocol, +@@ -1100,6 +1102,8 @@ int __sock_create(struct net *net, int family, int type, int protocol, return -EAFNOSUPPORT; if (type < 0 || type >= SOCK_MAX) return -EINVAL; @@ -160804,7 +160326,7 @@ index db13ae8..dabfbea 100644 /* Compatibility. -@@ -1119,6 +1123,20 @@ int __sock_create(struct net *net, int family, int type, int protocol, +@@ -1116,6 +1120,20 @@ int __sock_create(struct net *net, int family, int type, int protocol, if (err) return err; @@ -160825,7 +160347,7 @@ index db13ae8..dabfbea 100644 /* * Allocate the socket and allow the family to set things up. if * the protocol is 0, the family is instructed to select an appropriate -@@ -1370,6 +1388,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) +@@ -1367,6 +1385,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) if (sock) { err = move_addr_to_kernel(umyaddr, addrlen, &address); if (err >= 0) { @@ -160840,7 +160362,7 @@ index db13ae8..dabfbea 100644 err = security_socket_bind(sock, (struct sockaddr *)&address, addrlen); -@@ -1378,6 +1404,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) +@@ -1375,6 +1401,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) (struct sockaddr *) &address, addrlen); } @@ -160848,7 +160370,7 @@ index db13ae8..dabfbea 100644 fput_light(sock->file, fput_needed); } return err; -@@ -1401,10 +1428,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) +@@ -1398,10 +1425,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) if ((unsigned int)backlog > somaxconn) backlog = somaxconn; @@ -160869,7 +160391,7 @@ index db13ae8..dabfbea 100644 fput_light(sock->file, fput_needed); } return err; -@@ -1448,6 +1485,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, +@@ -1445,6 +1482,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, newsock->type = sock->type; newsock->ops = sock->ops; @@ -160888,7 +160410,7 @@ index db13ae8..dabfbea 100644 /* * We don't need try_module_get here, as the listening socket (sock) * has the protocol module (sock->ops->owner) held. -@@ -1493,6 +1542,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, +@@ -1490,6 +1539,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, fd_install(newfd, newfile); err = newfd; @@ -160897,7 +160419,7 @@ index db13ae8..dabfbea 100644 out_put: fput_light(sock->file, fput_needed); out: -@@ -1525,6 +1576,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, +@@ -1522,6 +1573,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, int, addrlen) { struct socket *sock; @@ -160905,7 +160427,7 @@ index db13ae8..dabfbea 100644 struct sockaddr_storage address; int err, fput_needed; -@@ -1535,6 +1587,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, +@@ -1532,6 +1584,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, if (err < 0) goto out_put; @@ -160923,7 +160445,7 @@ index db13ae8..dabfbea 100644 err = security_socket_connect(sock, (struct sockaddr *)&address, addrlen); if (err) -@@ -1557,7 +1620,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr, +@@ -1554,7 +1617,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len) { struct socket *sock; @@ -160932,7 +160454,7 @@ index db13ae8..dabfbea 100644 int len, err, fput_needed; sock = sockfd_lookup_light(fd, &err, &fput_needed); -@@ -1588,7 +1651,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, +@@ -1585,7 +1648,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len) { struct socket *sock; @@ -160941,7 +160463,7 @@ index db13ae8..dabfbea 100644 int len, err, fput_needed; sock = sockfd_lookup_light(fd, &err, &fput_needed); -@@ -1616,6 +1679,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, +@@ -1613,6 +1676,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, * the protocol. */ @@ -160950,7 +160472,7 @@ index db13ae8..dabfbea 100644 SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len, unsigned int, flags, struct sockaddr __user *, addr, int, addr_len) -@@ -1679,7 +1744,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, +@@ -1676,7 +1741,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, struct socket *sock; struct iovec iov; struct msghdr msg; @@ -160959,7 +160481,7 @@ index db13ae8..dabfbea 100644 int err, err2; int fput_needed; -@@ -1922,7 +1987,7 @@ static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg, +@@ -1921,7 +1986,7 @@ static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg, * checking falls down on this. */ if (copy_from_user(ctl_buf, @@ -160968,7 +160490,7 @@ index db13ae8..dabfbea 100644 ctl_len)) goto out_freectl; msg_sys->msg_control = ctl_buf; -@@ -2073,7 +2138,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg, +@@ -2077,7 +2142,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg, ssize_t err; /* kernel mode address */ @@ -160977,7 +160499,7 @@ index db13ae8..dabfbea 100644 /* user mode address pointers */ struct sockaddr __user *uaddr; -@@ -2719,7 +2784,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) +@@ -2723,7 +2788,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) ifr = compat_alloc_user_space(buf_size); rxnfc = (void __user *)ifr + ALIGN(sizeof(struct ifreq), 8); @@ -160986,7 +160508,7 @@ index db13ae8..dabfbea 100644 return -EFAULT; if (put_user(convert_in ? rxnfc : compat_ptr(data), -@@ -2830,7 +2895,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd, +@@ -2834,7 +2899,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd, old_fs = get_fs(); set_fs(KERNEL_DS); err = dev_ioctl(net, cmd, @@ -160995,7 +160517,7 @@ index db13ae8..dabfbea 100644 set_fs(old_fs); return err; -@@ -2923,7 +2988,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd, +@@ -2927,7 +2992,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd, old_fs = get_fs(); set_fs(KERNEL_DS); @@ -161004,7 +160526,7 @@ index db13ae8..dabfbea 100644 set_fs(old_fs); if (cmd == SIOCGIFMAP && !err) { -@@ -3007,7 +3072,7 @@ static int routing_ioctl(struct net *net, struct socket *sock, +@@ -3011,7 +3076,7 @@ static int routing_ioctl(struct net *net, struct socket *sock, ret |= get_user(rtdev, &(ur4->rt_dev)); if (rtdev) { ret |= copy_from_user(devname, compat_ptr(rtdev), 15); @@ -161013,7 +160535,7 @@ index db13ae8..dabfbea 100644 devname[15] = 0; } else r4.rt_dev = NULL; -@@ -3234,8 +3299,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, +@@ -3238,8 +3303,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, int __user *uoptlen; int err; @@ -161024,7 +160546,7 @@ index db13ae8..dabfbea 100644 set_fs(KERNEL_DS); if (level == SOL_SOCKET) -@@ -3255,7 +3320,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, +@@ -3259,7 +3324,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, char __user *uoptval; int err; @@ -161137,7 +160659,7 @@ index 4605dc7..c947fa5 100644 /* make a copy for the caller */ *handle = ctxh; diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c -index 008c25d..b2bb1df7 100644 +index 553bf95..c4c6132 100644 --- a/net/sunrpc/cache.c +++ b/net/sunrpc/cache.c @@ -1623,7 +1623,7 @@ static int create_cache_proc_entries(struct cache_detail *cd, struct net *net) @@ -161150,10 +160672,10 @@ index 008c25d..b2bb1df7 100644 goto out_nomem; cd->u.procfs.channel_ent = NULL; diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c -index b7f2104..62e2195d 100644 +index 7e0c9bf..bdec2b8 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c -@@ -1429,7 +1429,9 @@ call_start(struct rpc_task *task) +@@ -1508,7 +1508,9 @@ call_start(struct rpc_task *task) (RPC_IS_ASYNC(task) ? "async" : "sync")); /* Increment call count */ @@ -161165,10 +160687,10 @@ index b7f2104..62e2195d 100644 task->tk_action = call_reserve; } diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c -index cf5770d..6309968 100644 +index 5b30603..d49e23a 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c -@@ -844,9 +844,11 @@ static void rpcb_getport_done(struct rpc_task *child, void *data) +@@ -842,9 +842,11 @@ static void rpcb_getport_done(struct rpc_task *child, void *data) * XDR functions for rpcbind */ @@ -161182,7 +160704,7 @@ index cf5770d..6309968 100644 __be32 *p; dprintk("RPC: %5u encoding PMAP_%s call (%u, %u, %d, %u)\n", -@@ -861,9 +863,11 @@ static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr, +@@ -859,9 +861,11 @@ static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr, *p = cpu_to_be32(rpcb->r_port); } @@ -161196,7 +160718,7 @@ index cf5770d..6309968 100644 unsigned long port; __be32 *p; -@@ -883,9 +887,11 @@ static int rpcb_dec_getport(struct rpc_rqst *req, struct xdr_stream *xdr, +@@ -881,9 +885,11 @@ static int rpcb_dec_getport(struct rpc_rqst *req, struct xdr_stream *xdr, return 0; } @@ -161210,7 +160732,7 @@ index cf5770d..6309968 100644 __be32 *p; p = xdr_inline_decode(xdr, 4); -@@ -918,9 +924,11 @@ static void encode_rpcb_string(struct xdr_stream *xdr, const char *string, +@@ -916,9 +922,11 @@ static void encode_rpcb_string(struct xdr_stream *xdr, const char *string, xdr_encode_opaque(p, string, len); } @@ -161224,7 +160746,7 @@ index cf5770d..6309968 100644 __be32 *p; dprintk("RPC: %5u encoding RPCB_%s call (%u, %u, '%s', '%s')\n", -@@ -938,9 +946,11 @@ static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, +@@ -936,9 +944,11 @@ static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, encode_rpcb_string(xdr, rpcb->r_owner, RPCB_MAXOWNERLEN); } @@ -161238,7 +160760,7 @@ index cf5770d..6309968 100644 struct sockaddr_storage address; struct sockaddr *sap = (struct sockaddr *)&address; __be32 *p; -@@ -994,8 +1004,8 @@ out_fail: +@@ -992,8 +1002,8 @@ out_fail: static struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, @@ -161249,7 +160771,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET, -@@ -1004,8 +1014,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { +@@ -1002,8 +1012,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, @@ -161260,7 +160782,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET, -@@ -1014,8 +1024,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { +@@ -1012,8 +1022,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_GETPORT] = { .p_proc = RPCBPROC_GETPORT, @@ -161271,7 +160793,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_getportres_sz, .p_statidx = RPCBPROC_GETPORT, -@@ -1027,8 +1037,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { +@@ -1025,8 +1035,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { static struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, @@ -161282,7 +160804,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET, -@@ -1037,8 +1047,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { +@@ -1035,8 +1045,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, @@ -161293,7 +160815,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET, -@@ -1047,8 +1057,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { +@@ -1045,8 +1055,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, @@ -161304,7 +160826,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz, .p_statidx = RPCBPROC_GETADDR, -@@ -1060,8 +1070,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { +@@ -1058,8 +1068,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { static struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, @@ -161315,7 +160837,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET, -@@ -1070,8 +1080,8 @@ static struct rpc_procinfo rpcb_procedures4[] = { +@@ -1068,8 +1078,8 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, @@ -161326,7 +160848,7 @@ index cf5770d..6309968 100644 .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET, -@@ -1080,8 +1090,8 @@ static struct rpc_procinfo rpcb_procedures4[] = { +@@ -1078,8 +1088,8 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, @@ -161338,7 +160860,7 @@ index cf5770d..6309968 100644 .p_replen = RPCB_getaddrres_sz, .p_statidx = RPCBPROC_GETADDR, diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c -index 73ad57a..d7a0c08 100644 +index fcfd48d..70ea6f1 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c @@ -261,9 +261,9 @@ static int rpc_wait_bit_killable(struct wait_bit_key *key, int mode) @@ -161545,7 +161067,7 @@ index c846ca9..d5968b4 100644 .proc_handler = read_reset_stat, }, diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c -index c8b8a8b..75b302c 100644 +index 3b24a64..a68bd749 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c @@ -200,7 +200,7 @@ int rdma_read_chunk_lcl(struct svcxprt_rdma *xprt, @@ -161557,7 +161079,7 @@ index c8b8a8b..75b302c 100644 return ret; err: svc_rdma_unmap_dma(ctxt); -@@ -343,7 +343,7 @@ int rdma_read_chunk_frmr(struct svcxprt_rdma *xprt, +@@ -345,7 +345,7 @@ int rdma_read_chunk_frmr(struct svcxprt_rdma *xprt, *page_no = pg_no; *page_offset = pg_off; ret = read; @@ -161566,7 +161088,7 @@ index c8b8a8b..75b302c 100644 return ret; err: ib_dma_unmap_sg(xprt->sc_cm_id->device, -@@ -630,7 +630,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) +@@ -631,7 +631,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) dto_q); list_del_init(&ctxt->dto_q); } else { @@ -161585,10 +161107,10 @@ index c8b8a8b..75b302c 100644 /* Build up the XDR from the receive buffers. */ rdma_build_arg_xdr(rqstp, ctxt, ctxt->byte_len); diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c -index df57f3ce..5febb1e 100644 +index 4f1b1c4..40fd2aa 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c +++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c -@@ -291,7 +291,7 @@ static int send_write(struct svcxprt_rdma *xprt, struct svc_rqst *rqstp, +@@ -307,7 +307,7 @@ static int send_write(struct svcxprt_rdma *xprt, struct svc_rqst *rqstp, write_wr.remote_addr = to; /* Post It */ @@ -161598,54 +161120,18 @@ index df57f3ce..5febb1e 100644 goto err; return write_len - bc; diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c -index 5763825..6a73bd1 100644 +index 9066896..c2fe701 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c -@@ -477,7 +477,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt) - return; - - ib_req_notify_cq(xprt->sc_rq_cq, IB_CQ_NEXT_COMP); -- atomic_inc(&rdma_stat_rq_poll); -+ atomic_inc_unchecked(&rdma_stat_rq_poll); - - while ((ret = ib_poll_cq(xprt->sc_rq_cq, 1, &wc)) > 0) { - ctxt = (struct svc_rdma_op_ctxt *)(unsigned long)wc.wr_id; -@@ -499,7 +499,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt) - } - - if (ctxt) -- atomic_inc(&rdma_stat_rq_prod); -+ atomic_inc_unchecked(&rdma_stat_rq_prod); - - set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags); - /* -@@ -576,7 +576,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt) - return; - - ib_req_notify_cq(xprt->sc_sq_cq, IB_CQ_NEXT_COMP); -- atomic_inc(&rdma_stat_sq_poll); -+ atomic_inc_unchecked(&rdma_stat_sq_poll); - while ((ret = ib_poll_cq(cq, ARRAY_SIZE(wc_a), wc_a)) > 0) { - int i; - -@@ -605,7 +605,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt) - } - - if (ctxt) -- atomic_inc(&rdma_stat_sq_prod); -+ atomic_inc_unchecked(&rdma_stat_sq_prod); - } - - static void sq_comp_handler(struct ib_cq *cq, void *cq_context) -@@ -1381,7 +1381,7 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr) +@@ -1285,7 +1285,7 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr) spin_lock_bh(&xprt->sc_lock); if (xprt->sc_sq_depth < atomic_read(&xprt->sc_sq_count) + wr_count) { spin_unlock_bh(&xprt->sc_lock); - atomic_inc(&rdma_stat_sq_starve); + atomic_inc_unchecked(&rdma_stat_sq_starve); - /* See if we can opportunistically reap SQ WR to make room */ - sq_cq_reap(xprt); + /* Wait until SQ WR available if SQ still full */ + wait_event(xprt->sc_send_wait, diff --git a/net/sysctl_net.c b/net/sysctl_net.c index ed98c1f..f74b659 100644 --- a/net/sysctl_net.c @@ -161660,7 +161146,7 @@ index ed98c1f..f74b659 100644 int mode = (table->mode >> 6) & 7; return (mode << 6) | (mode << 3) | mode; diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c -index 2c016fd..68f02f3 100644 +index 4dfc5c1..ed7921b 100644 --- a/net/tipc/netlink_compat.c +++ b/net/tipc/netlink_compat.c @@ -65,13 +65,13 @@ struct tipc_nl_compat_cmd_dump { @@ -161702,7 +161188,7 @@ index 2c016fd..68f02f3 100644 kfree_skb(args); diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c -index f9ff73a..2f69dd4 100644 +index e6cb386..9eaa00c 100644 --- a/net/tipc/subscr.c +++ b/net/tipc/subscr.c @@ -75,7 +75,7 @@ static void tipc_subscrp_send_event(struct tipc_subscription *sub, @@ -161715,7 +161201,7 @@ index f9ff73a..2f69dd4 100644 sub->evt.event = htohl(event, sub->swap); sub->evt.found_lower = htohl(found_lower, sub->swap); diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c -index f75f847..3388f3a 100644 +index 8269da7..8525db6 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -919,6 +919,12 @@ static struct sock *unix_find_other(struct net *net, @@ -161765,7 +161251,7 @@ index f75f847..3388f3a 100644 return err; } -@@ -2814,9 +2833,13 @@ static int unix_seq_show(struct seq_file *seq, void *v) +@@ -2811,9 +2830,13 @@ static int unix_seq_show(struct seq_file *seq, void *v) seq_puts(seq, "Num RefCount Protocol Flags Type St " "Inode Path\n"); else { @@ -161780,7 +161266,7 @@ index f75f847..3388f3a 100644 seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5lu", s, -@@ -2841,10 +2864,29 @@ static int unix_seq_show(struct seq_file *seq, void *v) +@@ -2838,10 +2861,29 @@ static int unix_seq_show(struct seq_file *seq, void *v) seq_putc(seq, '@'); i++; } @@ -162326,7 +161812,7 @@ index 94c7405..499cca4 100644 int cfg80211_wext_freq(struct iw_freq *freq); diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c -index b50ee5d..ccf70ab 100644 +index c753211..d862a85 100644 --- a/net/wireless/wext-core.c +++ b/net/wireless/wext-core.c @@ -778,8 +778,7 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd, @@ -162640,7 +162126,7 @@ index 05a6e3d..6716ec9 100644 __xfrm_sysctl_init(net); diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c -index 805681a..17a7088 100644 +index 2cc7af8..7b5d2be 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c @@ -2471,7 +2471,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) @@ -162653,7 +162139,7 @@ index 805681a..17a7088 100644 .done = link->done, }; diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include -index 1db6d73..6e020e4 100644 +index b2ab2a9..a6f6124 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -107,16 +107,20 @@ as-option = $(call try-run,\ @@ -162698,17 +162184,17 @@ index 1db6d73..6e020e4 100644 # ld-option # Usage: LDFLAGS += $(call ld-option, -X) diff --git a/scripts/Makefile b/scripts/Makefile -index fd0d53d..9364092 100644 +index 822ab4a..1d80897 100644 --- a/scripts/Makefile +++ b/scripts/Makefile -@@ -46,4 +46,4 @@ subdir-$(CONFIG_DTC) += dtc +@@ -47,4 +47,4 @@ subdir-$(CONFIG_DTC) += dtc subdir-$(CONFIG_GDB_SCRIPTS) += gdb # Let clean descend into subdirs -subdir- += basic kconfig package +subdir- += basic kconfig package gcc-plugins diff --git a/scripts/Makefile.build b/scripts/Makefile.build -index 2c47f9c..9d46008 100644 +index e1bc190..b2ce235 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -60,7 +60,7 @@ endif @@ -162959,7 +162445,7 @@ index 133edfa..ac03751 100644 - $(host-cxxmulti) $(host-cxxobjs) + $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) $(host-cxxshlib) $(host-cxxshobjs) diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c -index 5b327c6..f7bdbac 100644 +index caef815..957ffde 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c @@ -161,7 +161,7 @@ static unsigned int strhash(const char *str, unsigned int sz) @@ -162996,7 +162482,7 @@ index 5b327c6..f7bdbac 100644 const char *p, *q; for (; m < end; m++) { -@@ -417,7 +417,7 @@ static void print_deps(void) +@@ -421,7 +421,7 @@ static void print_deps(void) static void traps(void) { static char test[] __attribute__((aligned(sizeof(int)))) = "CONF"; @@ -163006,7 +162492,7 @@ index 5b327c6..f7bdbac 100644 if (*p != INT_CONF) { fprintf(stderr, "fixdep: sizeof(int) != 4 or wrong endianness? %#x\n", diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c -index e81a8c74..a615ad7 100644 +index 0c03ac9..70a172e 100644 --- a/scripts/dtc/checks.c +++ b/scripts/dtc/checks.c @@ -277,7 +277,7 @@ NODE_ERROR(duplicate_property_names, NULL); @@ -185071,10 +184557,10 @@ index 0000000..00c7430 +} diff --git a/scripts/gcc-plugins/size_overflow_plugin/size_overflow_hash.data b/scripts/gcc-plugins/size_overflow_plugin/size_overflow_hash.data new file mode 100644 -index 0000000..4ed1988 +index 0000000..bdcfd9a --- /dev/null +++ b/scripts/gcc-plugins/size_overflow_plugin/size_overflow_hash.data -@@ -0,0 +1,21644 @@ +@@ -0,0 +1,21989 @@ +enable_so_recv_ctrl_pipe_us_data_0 recv_ctrl_pipe us_data 0 0 NULL +enable_so___earlyonly_bootmem_alloc_fndecl_3 __earlyonly_bootmem_alloc fndecl 2-3-4 3 NULL +enable_so_v9fs_xattr_get_acl_fndecl_4 v9fs_xattr_get_acl fndecl 5 4 NULL @@ -185133,7 +184619,8 @@ index 0000000..4ed1988 +enable_so_leaf_move_items_fndecl_145 leaf_move_items fndecl 4 145 NULL +enable_so_ir_context_support_fw_ohci_147 ir_context_support fw_ohci 0 147 NULL +enable_so_jffs2_nfs_get_inode_fndecl_152 jffs2_nfs_get_inode fndecl 2 152 NULL -+enable_so_uvc_endpoint_max_bpi_fndecl_155 uvc_endpoint_max_bpi fndecl 0 155 NULL ++enable_so_uvc_endpoint_max_bpi_fndecl_155 uvc_endpoint_max_bpi fndecl 0 155 NULL nohasharray ++enable_so_rereg_umr_fndecl_155 rereg_umr fndecl 5 155 &enable_so_uvc_endpoint_max_bpi_fndecl_155 +enable_so_ext4_ext_remove_space_fndecl_170 ext4_ext_remove_space fndecl 2-3 170 NULL +enable_so_acl_len_nfs_getaclres_171 acl_len nfs_getaclres 0 171 NULL +enable_so_vfs_write_fndecl_176 vfs_write fndecl 3-0 176 NULL @@ -185181,6 +184668,8 @@ index 0000000..4ed1988 +enable_so_xfs_qm_dqread_fndecl_302 xfs_qm_dqread fndecl 2 302 NULL nohasharray +enable_so_num_targets_dm_table_302 num_targets dm_table 0 302 &enable_so_xfs_qm_dqread_fndecl_302 +enable_so_xfpregs_get_fndecl_305 xfpregs_get fndecl 4 305 NULL ++enable_so_tx_ring_size_mvneta_port_307 tx_ring_size mvneta_port 0 307 NULL ++enable_so_omapdss_update_prop_fndecl_309 omapdss_update_prop fndecl 3 309 NULL +enable_so_cfpkt_create_pfx_fndecl_313 cfpkt_create_pfx fndecl 2 313 NULL +enable_so_MaxBufferSize_negotiate_rsp_314 MaxBufferSize negotiate_rsp 0 314 NULL nohasharray +enable_so_ip_num_acl_subject_label_314 ip_num acl_subject_label 0 314 &enable_so_MaxBufferSize_negotiate_rsp_314 @@ -185219,7 +184708,8 @@ index 0000000..4ed1988 +enable_so_get_conn_info_fndecl_440 get_conn_info fndecl 4 440 NULL +enable_so_intr_count_ql_adapter_442 intr_count ql_adapter 0 442 NULL +enable_so_challenge_len_ieee802_11_elems_444 challenge_len ieee802_11_elems 0 444 NULL -+enable_so_cem_build_path_fndecl_451 cem_build_path fndecl 0 451 NULL ++enable_so_cem_build_path_fndecl_451 cem_build_path fndecl 0 451 NULL nohasharray ++enable_so_k3_dma_prep_memcpy_fndecl_451 k3_dma_prep_memcpy fndecl 4 451 &enable_so_cem_build_path_fndecl_451 +enable_so_width_g2d_frame_453 width g2d_frame 0 453 NULL +enable_so___kfifo_max_r_fndecl_459 __kfifo_max_r fndecl 0-1-2 459 NULL nohasharray +enable_so_root_entry_lctp_fndecl_459 root_entry_lctp fndecl 0 459 &enable_so___kfifo_max_r_fndecl_459 @@ -185378,6 +184868,7 @@ index 0000000..4ed1988 +enable_so_isofs_bread_fndecl_929 isofs_bread fndecl 2 929 NULL +enable_so_xpnet_dev_change_mtu_fndecl_932 xpnet_dev_change_mtu fndecl 2 932 NULL +enable_so_nfrags_pkt_gl_937 nfrags pkt_gl 0 937 NULL ++enable_so_num_spis_alpine_msix_data_942 num_spis alpine_msix_data 0 942 NULL +enable_so_icmp_len_batadv_socket_packet_944 icmp_len batadv_socket_packet 0 944 NULL +enable_so_pcpu_embed_first_chunk_fndecl_947 pcpu_embed_first_chunk fndecl 3-2-1 947 NULL nohasharray +enable_so_mei_amthif_read_fndecl_947 mei_amthif_read fndecl 4 947 &enable_so_pcpu_embed_first_chunk_fndecl_947 @@ -185388,6 +184879,7 @@ index 0000000..4ed1988 +enable_so_size_wl3501_md_ind_961 size wl3501_md_ind 0 961 NULL +enable_so_compat_sys_preadv64_fndecl_968 compat_sys_preadv64 fndecl 3 968 NULL +enable_so_avc_tuner_tuneqpsk_fndecl_978 avc_tuner_tuneqpsk fndecl 0 978 NULL ++enable_so_tx_ring_size_tx_queue_982 tx_ring_size tx_queue 0 982 NULL +enable_so_em28xx_alloc_urbs_fndecl_983 em28xx_alloc_urbs fndecl 5-6-4 983 NULL nohasharray +enable_so_s_blocks_count_hi_ext4_super_block_983 s_blocks_count_hi ext4_super_block 0 983 &enable_so_em28xx_alloc_urbs_fndecl_983 +enable_so_nd_integrity_init_fndecl_985 nd_integrity_init fndecl 2 985 NULL nohasharray @@ -185413,6 +184905,7 @@ index 0000000..4ed1988 +enable_so_dlm_len_mt76_fw_header_1030 dlm_len mt76_fw_header 0 1030 NULL +enable_so_pci_scan_single_device_fndecl_1034 pci_scan_single_device fndecl 2 1034 NULL +enable_so_wq_ecount_lpfc_sli4_hba_1039 wq_ecount lpfc_sli4_hba 0 1039 NULL ++enable_so_invalid_tid_idx_hfi1_filedata_1040 invalid_tid_idx hfi1_filedata 0 1040 NULL +enable_so_page_shift_mlx5_buf_1041 page_shift mlx5_buf 0 1041 NULL nohasharray +enable_so_jffs2_iget_fndecl_1041 jffs2_iget fndecl 2 1041 &enable_so_page_shift_mlx5_buf_1041 nohasharray +enable_so_ssb_admatch_size_fndecl_1041 ssb_admatch_size fndecl 0-1 1041 &enable_so_jffs2_iget_fndecl_1041 @@ -185561,7 +185054,8 @@ index 0000000..4ed1988 +enable_so_idma64_alloc_desc_fndecl_1433 idma64_alloc_desc fndecl 1 1433 NULL +enable_so_relocation_count_drm_i915_gem_exec_object2_1435 relocation_count drm_i915_gem_exec_object2 0 1435 NULL +enable_so_rdev_num_s2mps11_info_1439 rdev_num s2mps11_info 0 1439 NULL -+enable_so_alloc_libipw_fndecl_1447 alloc_libipw fndecl 1 1447 NULL ++enable_so_alloc_libipw_fndecl_1447 alloc_libipw fndecl 1 1447 NULL nohasharray ++enable_so_loc_addr_rio_transfer_io_1447 loc_addr rio_transfer_io 0 1447 &enable_so_alloc_libipw_fndecl_1447 +enable_so_size_ip_vs_sync_mesg_1448 size ip_vs_sync_mesg 0 1448 NULL +enable_so_memcg_update_list_lru_node_fndecl_1454 memcg_update_list_lru_node fndecl 3 1454 NULL +enable_so_sys_ppoll_fndecl_1459 sys_ppoll fndecl 2 1459 NULL @@ -185651,6 +185145,7 @@ index 0000000..4ed1988 +enable_so_yres_drm_cmdline_mode_1722 yres drm_cmdline_mode 0 1722 NULL +enable_so_qtd_fill_fndecl_1725 qtd_fill fndecl 4-5-2-0-3 1725 NULL +enable_so_submit_io_fndecl_1726 submit_io fndecl 3 1726 NULL ++enable_so_aead_edesc_alloc_fndecl_1730 aead_edesc_alloc fndecl 2 1730 NULL +enable_so_ts_num_ids_nfsd4_test_stateid_1732 ts_num_ids nfsd4_test_stateid 0 1732 NULL nohasharray +enable_so_devm_iio_device_alloc_fndecl_1732 devm_iio_device_alloc fndecl 2 1732 &enable_so_ts_num_ids_nfsd4_test_stateid_1732 +enable_so_state_hmask_netns_xfrm_1733 state_hmask netns_xfrm 0 1733 NULL @@ -185676,6 +185171,7 @@ index 0000000..4ed1988 +enable_so___es_insert_extent_fndecl_1764 __es_insert_extent fndecl 0 1764 NULL +enable_so_size_intel_rotation_info_1772 size intel_rotation_info 0 1772 NULL +enable_so_eqe_size_mlx4_caps_1775 eqe_size mlx4_caps 0 1775 NULL ++enable_so_overlay_num_mmp_path_info_1781 overlay_num mmp_path_info 0 1781 NULL +enable_so_key_length_mwifiex_wep_key_1784 key_length mwifiex_wep_key 0 1784 NULL +enable_so___of_translate_address_fndecl_1786 __of_translate_address fndecl 0 1786 NULL +enable_so_port_pd_mlx4_av_1788 port_pd mlx4_av 0 1788 NULL @@ -185686,6 +185182,7 @@ index 0000000..4ed1988 +enable_so_wl1273_fm_write_data_fndecl_1803 wl1273_fm_write_data fndecl 3 1803 NULL +enable_so_num_mtt_segs_mthca_limits_1806 num_mtt_segs mthca_limits 0 1806 NULL +enable_so_dataInSize_mpt_ioctl_command_1808 dataInSize mpt_ioctl_command 0 1808 NULL ++enable_so_libcfs_kkuc_group_add_fndecl_1809 libcfs_kkuc_group_add fndecl 5 1809 NULL +enable_so_udl_gem_alloc_object_fndecl_1811 udl_gem_alloc_object fndecl 2 1811 NULL +enable_so___hugepage_set_anon_rmap_fndecl_1814 __hugepage_set_anon_rmap fndecl 3 1814 NULL nohasharray +enable_so_sv_nrpools_svc_serv_1814 sv_nrpools svc_serv 0 1814 &enable_so___hugepage_set_anon_rmap_fndecl_1814 @@ -185753,6 +185250,7 @@ index 0000000..4ed1988 +enable_so_max_write_fuse_conn_2028 max_write fuse_conn 0 2028 NULL +enable_so_process_adv_report_fndecl_2030 process_adv_report fndecl 9 2030 NULL +enable_so_ib_umem_odp_map_dma_single_page_fndecl_2040 ib_umem_odp_map_dma_single_page fndecl 0 2040 NULL ++enable_so_num_phy_chans_d40_base_2049 num_phy_chans d40_base 0 2049 NULL +enable_so_gss_encrypt_xdr_buf_fndecl_2050 gss_encrypt_xdr_buf fndecl 3 2050 NULL +enable_so_set_sock_size_fndecl_2051 set_sock_size fndecl 3 2051 NULL +enable_so_xfs_da_grow_inode_int_fndecl_2058 xfs_da_grow_inode_int fndecl 3 2058 NULL @@ -185788,7 +185286,8 @@ index 0000000..4ed1988 +enable_so_count_skge_ring_2140 count skge_ring 0 2140 NULL +enable_so_dma_len_srp_map_state_2141 dma_len srp_map_state 0 2141 NULL nohasharray +enable_so_smb_init_fndecl_2141 smb_init fndecl 2 2141 &enable_so_dma_len_srp_map_state_2141 nohasharray -+enable_so_connection_length_spar_controlvm_parameters_header_2141 connection_length spar_controlvm_parameters_header 0 2141 &enable_so_smb_init_fndecl_2141 ++enable_so_connection_length_spar_controlvm_parameters_header_2141 connection_length spar_controlvm_parameters_header 0 2141 &enable_so_smb_init_fndecl_2141 nohasharray ++enable_so_mdesc_kmalloc_fndecl_2141 mdesc_kmalloc fndecl 1 2141 &enable_so_connection_length_spar_controlvm_parameters_header_2141 +enable_so_capacity_p9_fcall_2144 capacity p9_fcall 0 2144 NULL +enable_so_sisusbcon_bmove_fndecl_2146 sisusbcon_bmove fndecl 7-5-6 2146 NULL +enable_so_multi_ios_hda_gen_spec_2147 multi_ios hda_gen_spec 0 2147 NULL @@ -185887,6 +185386,7 @@ index 0000000..4ed1988 +enable_so_tcp_sacktag_one_fndecl_2487 tcp_sacktag_one fndecl 7 2487 NULL +enable_so_ocfs2_xattr_get_nolock_fndecl_2493 ocfs2_xattr_get_nolock fndecl 0 2493 NULL +enable_so_btrfs_find_all_leafs_fndecl_2499 btrfs_find_all_leafs fndecl 3 2499 NULL ++enable_so_in_ports_f_midi_opts_2502 in_ports f_midi_opts 0 2502 NULL +enable_so_hard_mtu_lan78xx_net_2507 hard_mtu lan78xx_net 0 2507 NULL +enable_so_size_arpt_replace_2509 size arpt_replace 0 2509 NULL +enable_so_unmap_alignment_scsi_disk_2514 unmap_alignment scsi_disk 0 2514 NULL @@ -185920,6 +185420,7 @@ index 0000000..4ed1988 +enable_so_mesh_table_alloc_fndecl_2610 mesh_table_alloc fndecl 1 2610 NULL +enable_so_ld_active_tgt_count_lov_desc_2613 ld_active_tgt_count lov_desc 0 2613 NULL +enable_so_dst_maxburst_dma_slave_config_2619 dst_maxburst dma_slave_config 0 2619 NULL ++enable_so_crc_size_vardecl_pm_check_c_2624 crc_size vardecl_pm-check.c 0 2624 NULL +enable_so_len_whc_std_2626 len whc_std 0 2626 NULL +enable_so_ptn3460_read_bytes_fndecl_2627 ptn3460_read_bytes fndecl 4 2627 NULL +enable_so_snd_soc_params_to_frame_size_fndecl_2630 snd_soc_params_to_frame_size fndecl 0 2630 NULL nohasharray @@ -185954,6 +185455,7 @@ index 0000000..4ed1988 +enable_so_handle_received_packet_fndecl_2730 handle_received_packet fndecl 3 2730 NULL +enable_so_get_res_add_size_fndecl_2740 get_res_add_size fndecl 0 2740 NULL +enable_so_iov_iter_get_pages_fndecl_2747 iov_iter_get_pages fndecl 0-4-3 2747 NULL ++enable_so_aic_common_of_init_fndecl_2752 aic_common_of_init fndecl 4 2752 NULL +enable_so_mem_vardecl_applicom_c_2753 mem vardecl_applicom.c 0 2753 NULL +enable_so_rfcomm_send_test_fndecl_2760 rfcomm_send_test fndecl 4 2760 NULL nohasharray +enable_so_cache_write_procfs_fndecl_2760 cache_write_procfs fndecl 3 2760 &enable_so_rfcomm_send_test_fndecl_2760 @@ -186070,6 +185572,7 @@ index 0000000..4ed1988 +enable_so_ad7280_write_fndecl_3090 ad7280_write fndecl 0 3090 &enable_so_npages_mthca_db_table_3090 +enable_so_fb_prepare_logo_fndecl_3092 fb_prepare_logo fndecl 0 3092 NULL +enable_so_loopstart_soundfont_sample_info_3093 loopstart soundfont_sample_info 0 3093 NULL ++enable_so_iommu_dma_alloc_fndecl_3096 iommu_dma_alloc fndecl 2 3096 NULL +enable_so_gtt_mappable_entries__intel_private_3099 gtt_mappable_entries _intel_private 0 3099 NULL +enable_so_vol_cdev_direct_write_fndecl_3100 vol_cdev_direct_write fndecl 3 3100 NULL +enable_so_rx_pkt_map_sz_tg3_3106 rx_pkt_map_sz tg3 0 3106 NULL @@ -186132,6 +185635,7 @@ index 0000000..4ed1988 +enable_so_taglen_cb_compound_hdr_res_3259 taglen cb_compound_hdr_res 0 3259 NULL +enable_so_imx_pcm_dma_init_fndecl_3260 imx_pcm_dma_init fndecl 2 3260 NULL nohasharray +enable_so_compat_sys_readv_fndecl_3260 compat_sys_readv fndecl 3 3260 &enable_so_imx_pcm_dma_init_fndecl_3260 ++enable_so_ldc_alloc_exp_dring_fndecl_3263 ldc_alloc_exp_dring fndecl 2 3263 NULL +enable_so_rx_rx_phy_hdr_read_fndecl_3269 rx_rx_phy_hdr_read fndecl 3 3269 NULL +enable_so_vub300_response_error_fndecl_3270 vub300_response_error fndecl 0 3270 NULL +enable_so_altera_set_ir_post_fndecl_3271 altera_set_ir_post fndecl 2 3271 NULL @@ -186155,6 +185659,7 @@ index 0000000..4ed1988 +enable_so_length_ima_digest_data_3329 length ima_digest_data 0 3329 NULL +enable_so_hidraw_report_event_fndecl_3332 hidraw_report_event fndecl 3 3332 NULL +enable_so_i_xattr_loc_ocfs2_dinode_3335 i_xattr_loc ocfs2_dinode 0 3335 NULL ++enable_so_add_desc_fndecl_3339 add_desc fndecl 3 3339 NULL +enable_so_amdtp_dot_set_parameters_fndecl_3341 amdtp_dot_set_parameters fndecl 3 3341 NULL +enable_so_base_drm_agp_head_3348 base drm_agp_head 0 3348 NULL nohasharray +enable_so_curchunk_hdrlen_drm_dp_sideband_msg_rx_3348 curchunk_hdrlen drm_dp_sideband_msg_rx 0 3348 &enable_so_base_drm_agp_head_3348 @@ -186216,6 +185721,7 @@ index 0000000..4ed1988 +enable_so_kfifo_copy_to_user_fndecl_3509 kfifo_copy_to_user fndecl 3-4-0 3509 NULL nohasharray +enable_so_hs_bkt_bits_cfs_hash_3509 hs_bkt_bits cfs_hash 0 3509 &enable_so_kfifo_copy_to_user_fndecl_3509 +enable_so_gru_vtop_fndecl_3522 gru_vtop fndecl 2 3522 NULL ++enable_so_fifo_size_qcom_smd_channel_3531 fifo_size qcom_smd_channel 0 3531 NULL +enable_so_cipso_v4_gentag_rng_fndecl_3532 cipso_v4_gentag_rng fndecl 0 3532 NULL +enable_so_cl_out_max_entry_size_mvumi_hs_page1_3540 cl_out_max_entry_size mvumi_hs_page1 0 3540 NULL +enable_so_snd_hdsp_playback_copy_fndecl_3543 snd_hdsp_playback_copy fndecl 5 3543 NULL @@ -186228,13 +185734,15 @@ index 0000000..4ed1988 +enable_so_security_context_to_sid_force_fndecl_3559 security_context_to_sid_force fndecl 2 3559 NULL +enable_so_snd_timer_user_ginfo_fndecl_3565 snd_timer_user_ginfo fndecl 0 3565 NULL +enable_so_mt2063_write_fndecl_3567 mt2063_write fndecl 4 3567 NULL -+enable_so_page_cache_sync_readahead_fndecl_3569 page_cache_sync_readahead fndecl 4 3569 NULL ++enable_so_page_cache_sync_readahead_fndecl_3569 page_cache_sync_readahead fndecl 4 3569 NULL nohasharray ++enable_so_nr_clk_ids_samsung_cmu_info_3569 nr_clk_ids samsung_cmu_info 0 3569 &enable_so_page_cache_sync_readahead_fndecl_3569 +enable_so_encode_diropargs3_fndecl_3574 encode_diropargs3 fndecl 4 3574 NULL +enable_so__snd_pcm_new_fndecl_3575 _snd_pcm_new fndecl 4-5 3575 NULL +enable_so_template_size_qla27xx_fwdt_template_3576 template_size qla27xx_fwdt_template 0 3576 NULL +enable_so_len_capiloaddatapart_3577 len capiloaddatapart 0 3577 NULL +enable_so_pcpu_page_first_chunk_fndecl_3579 pcpu_page_first_chunk fndecl 1 3579 NULL +enable_so_asq_buf_size_i40e_adminq_info_3582 asq_buf_size i40e_adminq_info 0 3582 NULL ++enable_so_bcm2835_dma_prep_dma_cyclic_fndecl_3588 bcm2835_dma_prep_dma_cyclic fndecl 4-3 3588 NULL +enable_so_ddr_av_base_mthca_av_table_3589 ddr_av_base mthca_av_table 0 3589 NULL +enable_so_ip_vs_icmp_xmit_fndecl_3590 ip_vs_icmp_xmit fndecl 4 3590 NULL nohasharray +enable_so_npads_xtpg_device_3590 npads xtpg_device 0 3590 &enable_so_ip_vs_icmp_xmit_fndecl_3590 @@ -186422,7 +185930,8 @@ index 0000000..4ed1988 +enable_so_blkno_xfs_da_args_4112 blkno xfs_da_args 0 4112 NULL +enable_so_vringh_iov_pull_kern_fndecl_4115 vringh_iov_pull_kern fndecl 3 4115 NULL +enable_so_read_reg_fndecl_4120 read_reg fndecl 0 4120 NULL -+enable_so_jffs2_acl_from_medium_fndecl_4129 jffs2_acl_from_medium fndecl 2 4129 NULL ++enable_so_jffs2_acl_from_medium_fndecl_4129 jffs2_acl_from_medium fndecl 2 4129 NULL nohasharray ++enable_so___rvt_alloc_mr_fndecl_4129 __rvt_alloc_mr fndecl 1 4129 &enable_so_jffs2_acl_from_medium_fndecl_4129 +enable_so_ocfs2_read_group_descriptor_fndecl_4136 ocfs2_read_group_descriptor fndecl 3 4136 NULL +enable_so_ssid_len_mwifiex_802_11_ssid_4139 ssid_len mwifiex_802_11_ssid 0 4139 NULL +enable_so_size_badblocks_4142 size badblocks 0 4142 NULL @@ -186430,6 +185939,7 @@ index 0000000..4ed1988 +enable_so_ocfs2_readpages_fndecl_4156 ocfs2_readpages fndecl 4 4156 NULL nohasharray +enable_so_num_msix_vec_be_adapter_4156 num_msix_vec be_adapter 0 4156 &enable_so_ocfs2_readpages_fndecl_4156 +enable_so_batadv_tt_local_add_fndecl_4159 batadv_tt_local_add fndecl 3 4159 NULL ++enable_so_struct_size_rmi_register_descriptor_4163 struct_size rmi_register_descriptor 0 4163 NULL +enable_so_epp_write_data_parport_operations_4176 epp_write_data parport_operations 0 4176 NULL nohasharray +enable_so_tool_spadfn_read_fndecl_4176 tool_spadfn_read fndecl 3 4176 &enable_so_epp_write_data_parport_operations_4176 +enable_so_max_rx_urb_irda_usb_cb_4182 max_rx_urb irda_usb_cb 0 4182 NULL @@ -186452,6 +185962,7 @@ index 0000000..4ed1988 +enable_so_nilfs_segbuf_map_fndecl_4225 nilfs_segbuf_map fndecl 3-2 4225 NULL nohasharray +enable_so_dlm_lock_fndecl_4225 dlm_lock fndecl 6 4225 &enable_so_nilfs_segbuf_map_fndecl_4225 +enable_so___nla_put_fndecl_4226 __nla_put fndecl 3 4226 NULL ++enable_so_num_lut_dmm_4228 num_lut dmm 0 4228 NULL +enable_so_len_bpf_prog_4232 len bpf_prog 0 4232 NULL +enable_so_data_len_nci_data_4237 data_len nci_data 0 4237 NULL +enable_so_ip6gre_err_fndecl_4238 ip6gre_err fndecl 5-6 4238 NULL @@ -186481,7 +185992,8 @@ index 0000000..4ed1988 +enable_so___add_section_fndecl_4296 __add_section fndecl 3 4296 NULL +enable_so_cgroup_task_count_fndecl_4297 cgroup_task_count fndecl 0 4297 NULL +enable_so_maxpacket_musb_qh_4303 maxpacket musb_qh 0 4303 NULL nohasharray -+enable_so_key_size_pkcs1pad_ctx_4303 key_size pkcs1pad_ctx 0 4303 &enable_so_maxpacket_musb_qh_4303 ++enable_so_key_size_pkcs1pad_ctx_4303 key_size pkcs1pad_ctx 0 4303 &enable_so_maxpacket_musb_qh_4303 nohasharray ++enable_so____copy_to_user_fndecl_4303 ___copy_to_user fndecl 0 4303 &enable_so_key_size_pkcs1pad_ctx_4303 +enable_so_rx_frm_len_mask_macb_4310 rx_frm_len_mask macb 0 4310 NULL +enable_so_raid56_alloc_missing_rbio_fndecl_4316 raid56_alloc_missing_rbio fndecl 4 4316 NULL +enable_so_ps_upsd_max_apturn_read_fndecl_4317 ps_upsd_max_apturn_read fndecl 3 4317 NULL @@ -186513,6 +186025,7 @@ index 0000000..4ed1988 +enable_so_leadin_ignore_xpnet_message_4402 leadin_ignore xpnet_message 0 4402 NULL nohasharray +enable_so_segment_length_sbp_page_table_entry_4402 segment_length sbp_page_table_entry 0 4402 &enable_so_leadin_ignore_xpnet_message_4402 +enable_so_page_ofs__ntfs_inode_4407 page_ofs _ntfs_inode 0 4407 NULL ++enable_so_pxad_prep_dma_cyclic_fndecl_4411 pxad_prep_dma_cyclic fndecl 3-4 4411 NULL +enable_so_new_bytenr_backref_node_4416 new_bytenr backref_node 0 4416 NULL +enable_so___alloc_block_fndecl_4419 __alloc_block fndecl 2 4419 NULL nohasharray +enable_so_nfc_llcp_build_tlv_fndecl_4419 nfc_llcp_build_tlv fndecl 3 4419 &enable_so___alloc_block_fndecl_4419 @@ -186536,6 +186049,7 @@ index 0000000..4ed1988 +enable_so_rx_ring_size_altera_tse_private_4470 rx_ring_size altera_tse_private 0 4470 NULL +enable_so_sddr09_read22_fndecl_4476 sddr09_read22 fndecl 4-3-6 4476 NULL +enable_so_ocfs2_control_message_fndecl_4479 ocfs2_control_message fndecl 3 4479 NULL ++enable_so___spi_split_transfer_maxsize_fndecl_4482 __spi_split_transfer_maxsize fndecl 4 4482 NULL +enable_so_hdmi_create_eld_ctl_fndecl_4485 hdmi_create_eld_ctl fndecl 2 4485 NULL +enable_so_hdr_len_l2tp_session_4486 hdr_len l2tp_session 0 4486 NULL nohasharray +enable_so_fragments_squashfs_super_block_4486 fragments squashfs_super_block 0 4486 &enable_so_hdr_len_l2tp_session_4486 @@ -186551,6 +186065,7 @@ index 0000000..4ed1988 +enable_so_nr_chans_solo_dev_4552 nr_chans solo_dev 0 4552 NULL +enable_so_data_len_o2net_msg_4553 data_len o2net_msg 0 4553 NULL +enable_so_acpi_read_slow_fndecl_4554 acpi_read_slow fndecl 3-2 4554 NULL ++enable_so_size_pcf8584_tblprop_4558 size pcf8584_tblprop 0 4558 NULL +enable_so_hwcursor_size_sis_video_info_4560 hwcursor_size sis_video_info 0 4560 NULL +enable_so_channels_snd_korg1212_4562 channels snd_korg1212 0 4562 NULL +enable_so_usbvision_rvmalloc_fndecl_4564 usbvision_rvmalloc fndecl 1 4564 NULL @@ -186570,7 +186085,8 @@ index 0000000..4ed1988 +enable_so_tm6000_i2c_send_regs_fndecl_4617 tm6000_i2c_send_regs fndecl 5 4617 NULL +enable_so_mbox_test_message_write_fndecl_4627 mbox_test_message_write fndecl 3 4627 NULL +enable_so_cksumlength_gss_krb5_enctype_4630 cksumlength gss_krb5_enctype 0 4630 NULL -+enable_so_tcam_size_mc5_4631 tcam_size mc5 0 4631 NULL ++enable_so_tcam_size_mc5_4631 tcam_size mc5 0 4631 NULL nohasharray ++enable_so_size_minus_one_mxt_object_4631 size_minus_one mxt_object 0 4631 &enable_so_tcam_size_mc5_4631 +enable_so_total_bytes__osd_req_data_segment_4634 total_bytes _osd_req_data_segment 0 4634 NULL +enable_so_setup_efi_state_fndecl_4639 setup_efi_state fndecl 4-5-2-3 4639 NULL +enable_so_irq_nvecs_bnx2_4644 irq_nvecs bnx2 0 4644 NULL @@ -186597,6 +186113,7 @@ index 0000000..4ed1988 +enable_so_nr_hw_queues_blk_mq_tag_set_4713 nr_hw_queues blk_mq_tag_set 0 4713 NULL +enable_so_count_user_sgentry64_4714 count user_sgentry64 0 4714 NULL +enable_so_hpfs_ea_remove_fndecl_4717 hpfs_ea_remove fndecl 4-2 4717 NULL ++enable_so_next_fpm_addr_i40iw_hmc_pble_rsrc_4719 next_fpm_addr i40iw_hmc_pble_rsrc 0 4719 NULL +enable_so_snd_cs4281_BA1_read_fndecl_4720 snd_cs4281_BA1_read fndecl 5 4720 NULL +enable_so_sp_bb_data_fc_els_csp_4721 sp_bb_data fc_els_csp 0 4721 NULL +enable_so_tx_tx_burst_programmed_read_fndecl_4723 tx_tx_burst_programmed_read fndecl 3 4723 NULL @@ -186716,6 +186233,7 @@ index 0000000..4ed1988 +enable_so_compress_raw_buf_fndecl_5055 compress_raw_buf fndecl 0 5055 &enable_so_rcvidx_IsdnCardState_5055 +enable_so_offset_SVGAGuestPtr_5056 offset SVGAGuestPtr 0 5056 NULL +enable_so_ext4_llseek_fndecl_5060 ext4_llseek fndecl 2 5060 NULL ++enable_so_reg_create_fndecl_5061 reg_create fndecl 6 5061 NULL +enable_so_kvm_vcpu_gfn_to_pfn_atomic_fndecl_5062 kvm_vcpu_gfn_to_pfn_atomic fndecl 2 5062 NULL +enable_so_port_mlx4_ib_demux_ctx_5063 port mlx4_ib_demux_ctx 0 5063 NULL +enable_so_len_BufferControl_5068 len BufferControl 0 5068 NULL @@ -186860,7 +186378,8 @@ index 0000000..4ed1988 +enable_so_debug_output_fndecl_5532 debug_output fndecl 3 5532 &enable_so_mlx4_set_path_fndecl_5532 nohasharray +enable_so_tool_dbfn_read_fndecl_5532 tool_dbfn_read fndecl 3 5532 &enable_so_debug_output_fndecl_5532 +enable_so_sq_cnt_queue_set_5538 sq_cnt queue_set 0 5538 NULL nohasharray -+enable_so_batadv_arp_get_type_fndecl_5538 batadv_arp_get_type fndecl 3 5538 &enable_so_sq_cnt_queue_set_5538 ++enable_so_batadv_arp_get_type_fndecl_5538 batadv_arp_get_type fndecl 3 5538 &enable_so_sq_cnt_queue_set_5538 nohasharray ++enable_so___vmalloc_node_range_fndecl_5538 __vmalloc_node_range fndecl 1-3 5538 &enable_so_batadv_arp_get_type_fndecl_5538 +enable_so_vector_acpi_hest_notify_5540 vector acpi_hest_notify 0 5540 NULL +enable_so_xfs_dqcheck_fndecl_5545 xfs_dqcheck fndecl 3 5545 NULL +enable_so_logical_ext4_allocation_request_5548 logical ext4_allocation_request 0 5548 NULL nohasharray @@ -186941,6 +186460,7 @@ index 0000000..4ed1988 +enable_so_mc_handle_file_pte_fndecl_5787 mc_handle_file_pte fndecl 2 5787 NULL +enable_so_bq32k_read_fndecl_5789 bq32k_read fndecl 4 5789 NULL +enable_so_pci_mem_start_vardecl_5790 pci_mem_start vardecl 0 5790 NULL ++enable_so_msix_count_i40e_info_5794 msix_count i40e_info 0 5794 NULL +enable_so_p9_check_zc_errors_fndecl_5806 p9_check_zc_errors fndecl 4 5806 NULL +enable_so_usb_ftdi_elan_edset_output_fndecl_5808 usb_ftdi_elan_edset_output fndecl 0 5808 NULL +enable_so_ubifs_recover_size_accum_fndecl_5809 ubifs_recover_size_accum fndecl 4 5809 NULL nohasharray @@ -186998,6 +186518,7 @@ index 0000000..4ed1988 +enable_so_tx_hdrlen_brcmf_sdio_5961 tx_hdrlen brcmf_sdio 0 5961 NULL +enable_so_write_alias_journal_fndecl_5962 write_alias_journal fndecl 2 5962 NULL +enable_so_viafb_second_size_vardecl_viafbdev_c_5965 viafb_second_size vardecl_viafbdev.c 0 5965 NULL ++enable_so_orangefs_prepare_cdm_array_fndecl_5968 orangefs_prepare_cdm_array fndecl 0 5968 NULL +enable_so_allocmax_nilfs_sufile_info_5969 allocmax nilfs_sufile_info 0 5969 NULL +enable_so_f2fs_setxattr_fndecl_5975 f2fs_setxattr fndecl 5 5975 NULL +enable_so_do_rc_ack_fndecl_5983 do_rc_ack fndecl 3 5983 NULL nohasharray @@ -187011,7 +186532,8 @@ index 0000000..4ed1988 +enable_so_map_words_netvsc_device_6007 map_words netvsc_device 0 6007 &enable_so_drm_fb_helper_init_fndecl_6007 +enable_so_afs_vnode_store_data_fndecl_6011 afs_vnode_store_data fndecl 4-5 6011 NULL +enable_so_mmc_send_status_fndecl_6013 mmc_send_status fndecl 0 6013 NULL nohasharray -+enable_so_orig_sg_segs_osst_buffer_6013 orig_sg_segs osst_buffer 0 6013 &enable_so_mmc_send_status_fndecl_6013 ++enable_so_orig_sg_segs_osst_buffer_6013 orig_sg_segs osst_buffer 0 6013 &enable_so_mmc_send_status_fndecl_6013 nohasharray ++enable_so_code_size_fw_bl_desc_6013 code_size fw_bl_desc 0 6013 &enable_so_orig_sg_segs_osst_buffer_6013 +enable_so_sys_process_vm_readv_fndecl_6017 sys_process_vm_readv fndecl 3-5 6017 NULL nohasharray +enable_so_brcmf_usbdev_qinit_fndecl_6017 brcmf_usbdev_qinit fndecl 2 6017 &enable_so_sys_process_vm_readv_fndecl_6017 +enable_so_max_discard_sectors_queue_limits_6023 max_discard_sectors queue_limits 0 6023 NULL @@ -187104,6 +186626,7 @@ index 0000000..4ed1988 +enable_so__snd_pcm_lib_alloc_vmalloc_buffer_fndecl_6287 _snd_pcm_lib_alloc_vmalloc_buffer fndecl 2 6287 NULL +enable_so_hOver_plus_panel_info_6297 hOver_plus panel_info 0 6297 NULL +enable_so_lpuart_copy_rx_to_tty_fndecl_6298 lpuart_copy_rx_to_tty fndecl 3 6298 NULL ++enable_so_iin_wMaxPacketSize_usbtmc_device_data_6306 iin_wMaxPacketSize usbtmc_device_data 0 6306 NULL +enable_so_sn9c2028_command_fndecl_6307 sn9c2028_command fndecl 0 6307 NULL +enable_so_em28xx_audio_ep_packet_size_fndecl_6311 em28xx_audio_ep_packet_size fndecl 0 6311 NULL +enable_so_shadow_fetch_fndecl_6315 shadow_fetch fndecl 3 6315 NULL @@ -187163,6 +186686,7 @@ index 0000000..4ed1988 +enable_so_parse_dcb20_entry_fndecl_6440 parse_dcb20_entry fndecl 3 6440 NULL +enable_so_user_base_qib_mregion_6443 user_base qib_mregion 0 6443 NULL +enable_so_nvme_iod_alloc_size_fndecl_6444 nvme_iod_alloc_size fndecl 2-3-0 6444 NULL ++enable_so_i40iw_qp_roundup_fndecl_6447 i40iw_qp_roundup fndecl 1-0 6447 NULL +enable_so_max_packet_sz_tx_musb_hw_ep_6448 max_packet_sz_tx musb_hw_ep 0 6448 NULL +enable_so_snd_hammerfall_get_buffer_fndecl_6450 snd_hammerfall_get_buffer fndecl 3 6450 NULL +enable_so_qib_init_pportdata_fndecl_6452 qib_init_pportdata fndecl 4 6452 NULL @@ -187258,7 +186782,8 @@ index 0000000..4ed1988 +enable_so_raw_recvmsg_fndecl_6710 raw_recvmsg fndecl 3 6710 NULL +enable_so_sample_rate_mixart_mgr_6716 sample_rate mixart_mgr 0 6716 NULL +enable_so_ssb_sdio_block_read_fndecl_6721 ssb_sdio_block_read fndecl 3 6721 NULL -+enable_so_qdisc_class_hash_alloc_fndecl_6725 qdisc_class_hash_alloc fndecl 1 6725 NULL ++enable_so_qdisc_class_hash_alloc_fndecl_6725 qdisc_class_hash_alloc fndecl 1 6725 NULL nohasharray ++enable_so_size_mvpp2_txq_pcpu_6725 size mvpp2_txq_pcpu 0 6725 &enable_so_qdisc_class_hash_alloc_fndecl_6725 +enable_so_ieee_il_rate_info_6732 ieee il_rate_info 0 6732 NULL +enable_so_iova_mlx5_core_mr_6733 iova mlx5_core_mr 0 6733 NULL +enable_so_pagesize_sddr09_card_info_6735 pagesize sddr09_card_info 0 6735 NULL @@ -187720,7 +187245,8 @@ index 0000000..4ed1988 +enable_so_rx_cmp_meta_data_rx_cmp_ext_8103 rx_cmp_meta_data rx_cmp_ext 0 8103 NULL nohasharray +enable_so_simple_transaction_read_fndecl_8103 simple_transaction_read fndecl 3 8103 &enable_so_rx_cmp_meta_data_rx_cmp_ext_8103 +enable_so_ext4_end_io_dio_fndecl_8107 ext4_end_io_dio fndecl 2-3 8107 NULL -+enable_so_tgt_count_blogic_adapter_8109 tgt_count blogic_adapter 0 8109 NULL ++enable_so_tgt_count_blogic_adapter_8109 tgt_count blogic_adapter 0 8109 NULL nohasharray ++enable_so_nr_relocs_drm_etnaviv_gem_submit_8109 nr_relocs drm_etnaviv_gem_submit 0 8109 &enable_so_tgt_count_blogic_adapter_8109 +enable_so_acpi_ut_get_resource_header_length_fndecl_8110 acpi_ut_get_resource_header_length fndecl 0 8110 NULL +enable_so_speed_channel_8113 speed channel 0 8113 NULL +enable_so_up_dnode_8116 up dnode 0 8116 NULL @@ -187745,7 +187271,8 @@ index 0000000..4ed1988 +enable_so_ubifs_scanned_corruption_fndecl_8170 ubifs_scanned_corruption fndecl 3 8170 NULL +enable_so_tx_ring_count_igb_adapter_8171 tx_ring_count igb_adapter 0 8171 NULL +enable_so_jumpshot_write_data_fndecl_8172 jumpshot_write_data fndecl 4 8172 NULL -+enable_so_blksz_mmc_data_8174 blksz mmc_data 0 8174 NULL ++enable_so_blksz_mmc_data_8174 blksz mmc_data 0 8174 NULL nohasharray ++enable_so_ptr_mask_efx_tx_queue_8174 ptr_mask efx_tx_queue 0 8174 &enable_so_blksz_mmc_data_8174 +enable_so_avail_ubifs_wbuf_8176 avail ubifs_wbuf 0 8176 NULL +enable_so_pdu_read_fndecl_8183 pdu_read fndecl 3 8183 NULL +enable_so_nsftids_tid_info_8187 nsftids tid_info 0 8187 NULL @@ -187767,6 +187294,8 @@ index 0000000..4ed1988 +enable_so_vmw_cursor_update_dmabuf_fndecl_8254 vmw_cursor_update_dmabuf fndecl 4-3 8254 NULL +enable_so_default_erasesize_fndecl_8255 default_erasesize fndecl 0 8255 NULL +enable_so_num_alloc_vsi_i40e_pf_8259 num_alloc_vsi i40e_pf 0 8259 NULL ++enable_so_length_spi_engine_program_8261 length spi_engine_program 0 8261 NULL ++enable_so_buf_size_ispstat_buffer_8262 buf_size ispstat_buffer 0 8262 NULL +enable_so_datablkcnt_capi_register_params_8263 datablkcnt capi_register_params 0 8263 NULL +enable_so_cow_file_range_inline_fndecl_8264 cow_file_range_inline fndecl 4-3 8264 NULL +enable_so_num_u3_ports_xhci_hcd_mtk_8272 num_u3_ports xhci_hcd_mtk 0 8272 NULL @@ -187815,6 +187344,7 @@ index 0000000..4ed1988 +enable_so_wNdpOutPayloadRemainder_usb_cdc_ncm_ntb_parameters_8415 wNdpOutPayloadRemainder usb_cdc_ncm_ntb_parameters 0 8415 NULL +enable_so_ring_blocks_vxge_hw_ring_config_8417 ring_blocks vxge_hw_ring_config 0 8417 NULL nohasharray +enable_so_lbs_lowrssi_read_fndecl_8417 lbs_lowrssi_read fndecl 3 8417 &enable_so_ring_blocks_vxge_hw_ring_config_8417 ++enable_so_meson_clk_init_fndecl_8435 meson_clk_init fndecl 2 8435 NULL +enable_so_rtsx_pci_dma_transfer_fndecl_8439 rtsx_pci_dma_transfer fndecl 0 8439 NULL +enable_so_block_dm_buffer_8440 block dm_buffer 0 8440 NULL +enable_so_offset_l2tp_session_8443 offset l2tp_session 0 8443 NULL @@ -187908,7 +187438,8 @@ index 0000000..4ed1988 +enable_so_bfad_iocmd_qos_set_bw_fndecl_8690 bfad_iocmd_qos_set_bw fndecl 0 8690 &enable_so_env_start_mm_struct_8690 +enable_so_mpeglines_vardecl_cx231xx_417_c_8691 mpeglines vardecl_cx231xx-417.c 0 8691 NULL nohasharray +enable_so_b_out_mon_reader_bin_8691 b_out mon_reader_bin 0 8691 &enable_so_mpeglines_vardecl_cx231xx_417_c_8691 -+enable_so_blk_mq_update_nr_requests_fndecl_8694 blk_mq_update_nr_requests fndecl 2 8694 NULL ++enable_so_blk_mq_update_nr_requests_fndecl_8694 blk_mq_update_nr_requests fndecl 2 8694 NULL nohasharray ++enable_so_data_width_stedma40_half_channel_info_8694 data_width stedma40_half_channel_info 0 8694 &enable_so_blk_mq_update_nr_requests_fndecl_8694 +enable_so_bfad_iocmd_cee_attr_fndecl_8696 bfad_iocmd_cee_attr fndecl 0 8696 NULL nohasharray +enable_so_NumEraseUnits_erase_unit_header_t_8696 NumEraseUnits erase_unit_header_t 0 8696 &enable_so_bfad_iocmd_cee_attr_fndecl_8696 +enable_so_ebcnt_vardecl_readtest_c_8699 ebcnt vardecl_readtest.c 0 8699 NULL @@ -187942,7 +187473,8 @@ index 0000000..4ed1988 +enable_so_snd_pcm_hw_param_set_fndecl_8761 snd_pcm_hw_param_set fndecl 4 8761 NULL +enable_so_length_acpi_nfit_system_address_8762 length acpi_nfit_system_address 0 8762 NULL +enable_so_max_swap_info_struct_8767 max swap_info_struct 0 8767 NULL -+enable_so_read_file_beacon_fndecl_8768 read_file_beacon fndecl 3 8768 NULL ++enable_so_read_file_beacon_fndecl_8768 read_file_beacon fndecl 3 8768 NULL nohasharray ++enable_so_max_pfn_radeon_vm_manager_8768 max_pfn radeon_vm_manager 0 8768 &enable_so_read_file_beacon_fndecl_8768 +enable_so_amdtp_stream_set_parameters_fndecl_8769 amdtp_stream_set_parameters fndecl 3 8769 NULL +enable_so_gfs2_adjust_quota_fndecl_8777 gfs2_adjust_quota fndecl 2 8777 NULL +enable_so_data_dma_powermate_device_8783 data_dma powermate_device 0 8783 NULL @@ -187965,6 +187497,7 @@ index 0000000..4ed1988 +enable_so_vsync_len_videomode_8830 vsync_len videomode 0 8830 NULL +enable_so_response_length_mlx5_ib_alloc_ucontext_resp_8839 response_length mlx5_ib_alloc_ucontext_resp 0 8839 NULL +enable_so_wm5110_set_fll_fndecl_8841 wm5110_set_fll fndecl 5 8841 NULL ++enable_so_rel_pd_idx_sd_pd_idx_8842 rel_pd_idx sd_pd_idx 0 8842 NULL +enable_so_iscsi_tcp_segment_recv_fndecl_8845 iscsi_tcp_segment_recv fndecl 4-0 8845 NULL +enable_so_max_packet_size_ftdi_private_8847 max_packet_size ftdi_private 0 8847 NULL +enable_so_ibufsize_sisusb_usb_data_8851 ibufsize sisusb_usb_data 0 8851 NULL @@ -188037,7 +187570,8 @@ index 0000000..4ed1988 +enable_so_error_rx_cmplt_db_overflow_cnt_read_fndecl_9063 error_rx_cmplt_db_overflow_cnt_read fndecl 3 9063 &enable_so_send_mpa_reply_fndecl_9063 +enable_so_logical_maximum_hid_field_9067 logical_maximum hid_field 0 9067 NULL +enable_so_buflen_compat_xfs_fsop_attrlist_handlereq_9071 buflen compat_xfs_fsop_attrlist_handlereq 0 9071 NULL -+enable_so_current_sg_offset_msb_data_9075 current_sg_offset msb_data 0 9075 NULL ++enable_so_current_sg_offset_msb_data_9075 current_sg_offset msb_data 0 9075 NULL nohasharray ++enable_so_nr_inport_coresight_platform_data_9075 nr_inport coresight_platform_data 0 9075 &enable_so_current_sg_offset_msb_data_9075 +enable_so_nilfs_dat_read_fndecl_9076 nilfs_dat_read fndecl 2 9076 NULL nohasharray +enable_so_uniqueid_cifsInodeInfo_9076 uniqueid cifsInodeInfo 0 9076 &enable_so_nilfs_dat_read_fndecl_9076 +enable_so_advertised_mtu_tipc_link_9077 advertised_mtu tipc_link 0 9077 NULL @@ -188102,6 +187636,7 @@ index 0000000..4ed1988 +enable_so_ide_driver_proc_write_fndecl_9214 ide_driver_proc_write fndecl 3 9214 NULL +enable_so_zram_meta_alloc_fndecl_9221 zram_meta_alloc fndecl 2 9221 NULL +enable_so_pcicfg_size_sst_pdata_9222 pcicfg_size sst_pdata 0 9222 NULL ++enable_so_qcom_rpm_smd_write_fndecl_9229 qcom_rpm_smd_write fndecl 6 9229 NULL +enable_so_ext4_create_inline_data_fndecl_9231 ext4_create_inline_data fndecl 3 9231 NULL +enable_so_supported_rates_len_station_parameters_9235 supported_rates_len station_parameters 0 9235 NULL +enable_so_i2400mu_rx_size_grow_fndecl_9246 i2400mu_rx_size_grow fndecl 0 9246 NULL @@ -188182,6 +187717,7 @@ index 0000000..4ed1988 +enable_so_kdb_max_commands_vardecl_kdb_main_c_9529 kdb_max_commands vardecl_kdb_main.c 0 9529 NULL +enable_so_cap_width_usbtv_norm_params_9538 cap_width usbtv_norm_params 0 9538 NULL +enable_so_nilfs_mdt_forget_block_fndecl_9543 nilfs_mdt_forget_block fndecl 2 9543 NULL ++enable_so_cnt_i40iw_hmc_obj_info_9546 cnt i40iw_hmc_obj_info 0 9546 NULL +enable_so_smk_read_doi_fndecl_9550 smk_read_doi fndecl 3 9550 NULL +enable_so___bio_alloc_fndecl_9552 __bio_alloc fndecl 2-3 9552 NULL +enable_so_rt2x00queue_insert_l2pad_fndecl_9553 rt2x00queue_insert_l2pad fndecl 2 9553 NULL @@ -188191,7 +187727,8 @@ index 0000000..4ed1988 +enable_so_vlan_alloc_res_fndecl_9561 vlan_alloc_res fndecl 7 9561 NULL +enable_so_p9_client_statsize_fndecl_9568 p9_client_statsize fndecl 0 9568 NULL +enable_so_page_order_cas_9572 page_order cas 0 9572 NULL nohasharray -+enable_so_pwr_sleep_time_avg_read_fndecl_9572 pwr_sleep_time_avg_read fndecl 3 9572 &enable_so_page_order_cas_9572 ++enable_so_pwr_sleep_time_avg_read_fndecl_9572 pwr_sleep_time_avg_read fndecl 3 9572 &enable_so_page_order_cas_9572 nohasharray ++enable_so_mvneta_frag_alloc_fndecl_9572 mvneta_frag_alloc fndecl 1 9572 &enable_so_pwr_sleep_time_avg_read_fndecl_9572 +enable_so_width_drm_mode_create_dumb_9575 width drm_mode_create_dumb 0 9575 NULL +enable_so_sctp_setsockopt_auth_chunk_fndecl_9576 sctp_setsockopt_auth_chunk fndecl 3 9576 NULL +enable_so_mpage_add_bh_to_extent_fndecl_9577 mpage_add_bh_to_extent fndecl 2 9577 NULL @@ -188204,6 +187741,7 @@ index 0000000..4ed1988 +enable_so_get_kobj_path_length_fndecl_9596 get_kobj_path_length fndecl 0 9596 &enable_so_wm5102_set_fll_fndecl_9596 +enable_so_torch_max_current_as3645a_platform_data_9597 torch_max_current as3645a_platform_data 0 9597 NULL +enable_so_writerids_fndecl_9601 writerids fndecl 0 9601 NULL ++enable_so_frag_size_mvneta_port_9606 frag_size mvneta_port 0 9606 NULL +enable_so_ileb_len_ubifs_info_9607 ileb_len ubifs_info 0 9607 NULL +enable_so_skd_max_pass_thru_vardecl_skd_main_c_9608 skd_max_pass_thru vardecl_skd_main.c 0 9608 NULL +enable_so_acpi_copy_property_array_u16_fndecl_9618 acpi_copy_property_array_u16 fndecl 0 9618 NULL @@ -188258,6 +187796,7 @@ index 0000000..4ed1988 +enable_so_mask_myri10ge_tx_buf_9725 mask myri10ge_tx_buf 0 9725 NULL +enable_so_vicam_control_msg_fndecl_9727 vicam_control_msg fndecl 0 9727 NULL +enable_so_midi_out_ports_snd_efw_9740 midi_out_ports snd_efw 0 9740 NULL ++enable_so_samsung_clk_sleep_init_fndecl_9743 samsung_clk_sleep_init fndecl 3 9743 NULL +enable_so_qsfp_2_read_fndecl_9744 qsfp_2_read fndecl 3 9744 NULL +enable_so_blkdev_fsync_fndecl_9745 blkdev_fsync fndecl 2-3 9745 NULL +enable_so_bnx2x_mcast_handle_current_cmd_fndecl_9747 bnx2x_mcast_handle_current_cmd fndecl 0 9747 NULL @@ -188333,6 +187872,7 @@ index 0000000..4ed1988 +enable_so_wb_pgbase_nfs_page_9940 wb_pgbase nfs_page 0 9940 NULL nohasharray +enable_so_object_name_len_ncp_objectname_ioctl_9940 object_name_len ncp_objectname_ioctl 0 9940 &enable_so_wb_pgbase_nfs_page_9940 +enable_so_forced_ps_read_fndecl_9942 forced_ps_read fndecl 3 9942 NULL ++enable_so_num_chan_pl330_config_9943 num_chan pl330_config 0 9943 NULL +enable_so_client_set_fmt_fndecl_9946 client_set_fmt fndecl 4-5 9946 NULL +enable_so_buffer_len_bnad_debug_info_9948 buffer_len bnad_debug_info 0 9948 NULL +enable_so_error_dm_crypt_io_9949 error dm_crypt_io 0 9949 NULL @@ -188455,6 +187995,7 @@ index 0000000..4ed1988 +enable_so_vmw_resource_buf_alloc_fndecl_10284 vmw_resource_buf_alloc fndecl 0 10284 NULL +enable_so_o_width_g2d_frame_10291 o_width g2d_frame 0 10291 NULL +enable_so_num_vfs_i40e_hw_capabilities_10302 num_vfs i40e_hw_capabilities 0 10302 NULL ++enable_so_validate_user_key_fndecl_10303 validate_user_key fndecl 5 10303 NULL +enable_so_bfad_iocmd_fcport_reset_stats_fndecl_10304 bfad_iocmd_fcport_reset_stats fndecl 0 10304 NULL nohasharray +enable_so_ieee80211_tdls_add_chan_switch_req_ies_fndecl_10304 ieee80211_tdls_add_chan_switch_req_ies fndecl 6 10304 &enable_so_bfad_iocmd_fcport_reset_stats_fndecl_10304 +enable_so_tlen_sdma_txreq_10305 tlen sdma_txreq 0 10305 NULL @@ -188515,7 +188056,8 @@ index 0000000..4ed1988 +enable_so_length_acpi_mem_space_context_10460 length acpi_mem_space_context 0 10460 NULL +enable_so_vxlan_change_mtu_fndecl_10464 vxlan_change_mtu fndecl 2 10464 NULL nohasharray +enable_so___btt_map_write_fndecl_10464 __btt_map_write fndecl 0 10464 &enable_so_vxlan_change_mtu_fndecl_10464 -+enable_so_wNdpOutDivisor_usb_cdc_ncm_ntb_parameters_10467 wNdpOutDivisor usb_cdc_ncm_ntb_parameters 0 10467 NULL ++enable_so_wNdpOutDivisor_usb_cdc_ncm_ntb_parameters_10467 wNdpOutDivisor usb_cdc_ncm_ntb_parameters 0 10467 NULL nohasharray ++enable_so_notesize_fndecl_10467 notesize fndecl 0 10467 &enable_so_wNdpOutDivisor_usb_cdc_ncm_ntb_parameters_10467 +enable_so___genwqe_readq_fndecl_10470 __genwqe_readq fndecl 0 10470 NULL +enable_so_usblp_ioctl_fndecl_10472 usblp_ioctl fndecl 2 10472 NULL +enable_so_nfsd4_get_drc_mem_fndecl_10473 nfsd4_get_drc_mem fndecl 0 10473 NULL @@ -188572,7 +188114,8 @@ index 0000000..4ed1988 +enable_so_index_vardecl_mtpav_c_10608 index vardecl_mtpav.c 0 10608 &enable_so_rq_depth_p9_rdma_opts_10608 +enable_so_brightness_sd_gl860_10611 brightness sd_gl860 0 10611 NULL +enable_so_ext4_trim_all_free_fndecl_10621 ext4_trim_all_free fndecl 0-4-2 10621 NULL -+enable_so___probe_kernel_write_fndecl_10625 __probe_kernel_write fndecl 3 10625 NULL ++enable_so___probe_kernel_write_fndecl_10625 __probe_kernel_write fndecl 3 10625 NULL nohasharray ++enable_so_lch_count_omap_dma_dev_attr_10625 lch_count omap_dma_dev_attr 0 10625 &enable_so___probe_kernel_write_fndecl_10625 +enable_so_rx_queues_nicvf_10628 rx_queues nicvf 0 10628 NULL +enable_so_pkt_alignment_factor_rndis_initialize_complete_10633 pkt_alignment_factor rndis_initialize_complete 0 10633 NULL +enable_so_pgbase_nfs_pgio_args_10636 pgbase nfs_pgio_args 0 10636 NULL @@ -188626,6 +188169,7 @@ index 0000000..4ed1988 +enable_so_ocrdma_reg_user_mr_fndecl_10777 ocrdma_reg_user_mr fndecl 2-3 10777 NULL +enable_so_amdgpu_ttm_tt_create_fndecl_10779 amdgpu_ttm_tt_create fndecl 2 10779 NULL +enable_so_setexposure_fndecl_10781 setexposure fndecl 0 10781 NULL ++enable_so_unallocated_pble_i40iw_hmc_pble_rsrc_10784 unallocated_pble i40iw_hmc_pble_rsrc 0 10784 NULL +enable_so_iptunnel_xmit_fndecl_10787 iptunnel_xmit fndecl 6 10787 NULL +enable_so_soc_camera_calc_client_output_fndecl_10789 soc_camera_calc_client_output fndecl 6 10789 NULL +enable_so_pnode_sz_ubifs_info_10791 pnode_sz ubifs_info 0 10791 NULL nohasharray @@ -188658,6 +188202,7 @@ index 0000000..4ed1988 +enable_so_spi_xmit_fndecl_10874 spi_xmit fndecl 3 10874 NULL +enable_so_pci_mmconfig_alloc_fndecl_10875 pci_mmconfig_alloc fndecl 2-3-4 10875 NULL +enable_so_w9968cf_pkt_scan_fndecl_10878 w9968cf_pkt_scan fndecl 3 10878 NULL ++enable_so___vmalloc_fndecl_10880 __vmalloc fndecl 1 10880 NULL +enable_so_sgl_map_user_pages_fndecl_10881 sgl_map_user_pages fndecl 3-2 10881 NULL +enable_so_num_streams_lola_pcm_10882 num_streams lola_pcm 0 10882 NULL +enable_so_run_apei_exec_ins_type_10886 run apei_exec_ins_type 0 10886 NULL @@ -188699,6 +188244,7 @@ index 0000000..4ed1988 +enable_so_msize_vardecl_pmc551_c_10989 msize vardecl_pmc551.c 0 10989 NULL nohasharray +enable_so_vxfs_blkiget_fndecl_10989 vxfs_blkiget fndecl 3-2 10989 &enable_so_msize_vardecl_pmc551_c_10989 +enable_so_height_v4l2_rect_10995 height v4l2_rect 0 10995 NULL ++enable_so_bitmap_size_dma_iommu_mapping_10997 bitmap_size dma_iommu_mapping 0 10997 NULL +enable_so_punit_size2_intel_pmc_ipc_dev_10998 punit_size2 intel_pmc_ipc_dev 0 10998 NULL +enable_so_l2nbperpage_jfs_sb_info_11000 l2nbperpage jfs_sb_info 0 11000 NULL +enable_so_dccp_setsockopt_ccid_fndecl_11006 dccp_setsockopt_ccid fndecl 4 11006 NULL @@ -188727,6 +188273,7 @@ index 0000000..4ed1988 +enable_so_va_size_coda_vattr_11053 va_size coda_vattr 0 11053 NULL +enable_so_drbd_send_drequest_fndecl_11057 drbd_send_drequest fndecl 3-4 11057 NULL +enable_so_do_mlock_fndecl_11062 do_mlock fndecl 1-2 11062 NULL ++enable_so_drm_dp_dpcd_write_fndecl_11066 drm_dp_dpcd_write fndecl 0 11066 NULL +enable_so_default_rds_buf_vardecl_fmdrv_common_c_11072 default_rds_buf vardecl_fmdrv_common.c 0 11072 NULL +enable_so_i2c_writebytes_fndecl_11073 i2c_writebytes fndecl 4 11073 NULL +enable_so_ib_agent_port_open_fndecl_11074 ib_agent_port_open fndecl 2 11074 NULL @@ -188748,6 +188295,7 @@ index 0000000..4ed1988 +enable_so__fdt_splice_string_fndecl_11123 _fdt_splice_string fndecl 2 11123 NULL +enable_so_whitebal_sd_gl860_11124 whitebal sd_gl860 0 11124 NULL +enable_so_n_channels_iwl_mcc_update_resp_11128 n_channels iwl_mcc_update_resp 0 11128 NULL ++enable_so_ies_len_connect_resp_info_11130 ies_len connect_resp_info 0 11130 NULL +enable_so___vmalloc_node_flags_fndecl_11139 __vmalloc_node_flags fndecl 1 11139 NULL +enable_so_num__cdrp_cmd_11142 num _cdrp_cmd 0 11142 NULL +enable_so_pageshift_nand_flash_dev_11144 pageshift nand_flash_dev 0 11144 NULL @@ -188921,6 +188469,7 @@ index 0000000..4ed1988 +enable_so_tx_tail_len_pn533_frame_ops_11694 tx_tail_len pn533_frame_ops 0 11694 NULL +enable_so_stride_efifb_dmi_info_11695 stride efifb_dmi_info 0 11695 NULL +enable_so_num_rates_wmi_rate_set_arg_11696 num_rates wmi_rate_set_arg 0 11696 NULL ++enable_so_mlx5_query_port_qetcr_reg_fndecl_11697 mlx5_query_port_qetcr_reg fndecl 3 11697 NULL +enable_so_kernel_tree_alloc_fndecl_11698 kernel_tree_alloc fndecl 1 11698 NULL +enable_so_shared_mic_nid_ca0132_spec_11702 shared_mic_nid ca0132_spec 0 11702 NULL +enable_so___vma_reservation_common_fndecl_11707 __vma_reservation_common fndecl 3 11707 NULL @@ -188946,6 +188495,7 @@ index 0000000..4ed1988 +enable_so_depth_cx23885_fmt_11806 depth cx23885_fmt 0 11806 NULL +enable_so_num_resources_nd_namespace_blk_11815 num_resources nd_namespace_blk 0 11815 NULL nohasharray +enable_so_max_hw_sectors_queue_limits_11815 max_hw_sectors queue_limits 0 11815 &enable_so_num_resources_nd_namespace_blk_11815 ++enable_so_size_mvpp2_tx_queue_11816 size mvpp2_tx_queue 0 11816 NULL +enable_so_SyS_flistxattr_fndecl_11825 SyS_flistxattr fndecl 3 11825 NULL +enable_so_bufflen_alua_dh_data_11826 bufflen alua_dh_data 0 11826 NULL +enable_so_be_change_mtu_fndecl_11828 be_change_mtu fndecl 2 11828 NULL @@ -188959,6 +188509,7 @@ index 0000000..4ed1988 +enable_so_frame_rate_sd_11862 frame_rate sd 0 11862 NULL +enable_so_s_nsegments_nilfs_super_block_11865 s_nsegments nilfs_super_block 0 11865 NULL +enable_so_wr_host_buf_pos_xilly_channel_11866 wr_host_buf_pos xilly_channel 0 11866 NULL ++enable_so_qcache_active_peers_ath10k_hw_params_11868 qcache_active_peers ath10k_hw_params 0 11868 NULL +enable_so_heads_ssfdcr_record_11869 heads ssfdcr_record 0 11869 NULL +enable_so_u8ssidlen_hidden_net_info_11872 u8ssidlen hidden_net_info 0 11872 NULL +enable_so_domain_child_num_acl_role_label_11875 domain_child_num acl_role_label 0 11875 NULL @@ -188979,6 +188530,7 @@ index 0000000..4ed1988 +enable_so_iwl_dbgfs_missed_beacon_write_fndecl_11905 iwl_dbgfs_missed_beacon_write fndecl 3 11905 NULL +enable_so_num_dma_mlx5e_tx_skb_cb_11911 num_dma mlx5e_tx_skb_cb 0 11911 NULL nohasharray +enable_so_snd_device_new_fndecl_11911 snd_device_new fndecl 0 11911 &enable_so_num_dma_mlx5e_tx_skb_cb_11911 ++enable_so_x___una_u32_11914 x __una_u32 0 11914 NULL +enable_so_dio_set_defer_completion_fndecl_11916 dio_set_defer_completion fndecl 0 11916 NULL +enable_so_residual_length_atto_vda_scsi_rsp_11918 residual_length atto_vda_scsi_rsp 0 11918 NULL +enable_so_lbs_lowsnr_read_fndecl_11920 lbs_lowsnr_read fndecl 3 11920 NULL @@ -189008,7 +188560,8 @@ index 0000000..4ed1988 +enable_so_host_int_setup_multicast_filter_fndecl_11989 host_int_setup_multicast_filter fndecl 3 11989 NULL +enable_so_x_size_mms114_platform_data_11991 x_size mms114_platform_data 0 11991 NULL +enable_so_virtualUnits_INFTLPartition_11994 virtualUnits INFTLPartition 0 11994 NULL -+enable_so_rx_buffer_size_peak_usb_adapter_11997 rx_buffer_size peak_usb_adapter 0 11997 NULL ++enable_so_rx_buffer_size_peak_usb_adapter_11997 rx_buffer_size peak_usb_adapter 0 11997 NULL nohasharray ++enable_so_ndevcntrs_hfi1_devdata_11997 ndevcntrs hfi1_devdata 0 11997 &enable_so_rx_buffer_size_peak_usb_adapter_11997 +enable_so_ib_umad_init_port_fndecl_12004 ib_umad_init_port fndecl 2 12004 NULL +enable_so_error_data_insert_op_12006 error data_insert_op 0 12006 NULL +enable_so___btrfs_setxattr_fndecl_12010 __btrfs_setxattr fndecl 5 12010 NULL @@ -189019,6 +188572,7 @@ index 0000000..4ed1988 +enable_so_br_send_bpdu_fndecl_12022 br_send_bpdu fndecl 3 12022 &enable_so_rfcomm_sock_sendmsg_fndecl_12022 +enable_so_yres_fb_var_screeninfo_12023 yres fb_var_screeninfo 0 12023 NULL +enable_so_xfs_dir2_sf_addname_easy_fndecl_12024 xfs_dir2_sf_addname_easy fndecl 4 12024 NULL ++enable_so_arm_iommu_create_mapping_fndecl_12027 arm_iommu_create_mapping fndecl 3 12027 NULL +enable_so_sisusb_write_mem_bulk_fndecl_12029 sisusb_write_mem_bulk fndecl 4 12029 NULL +enable_so_alloc_group_attrs_fndecl_12032 alloc_group_attrs fndecl 3 12032 NULL nohasharray +enable_so_wusb_prf_256_fndecl_12032 wusb_prf_256 fndecl 7 12032 &enable_so_alloc_group_attrs_fndecl_12032 @@ -189057,6 +188611,7 @@ index 0000000..4ed1988 +enable_so_security_context_to_sid_core_fndecl_12115 security_context_to_sid_core fndecl 2 12115 NULL +enable_so_get_num_tx_queues_rtnl_link_ops_12119 get_num_tx_queues rtnl_link_ops 0 12119 NULL +enable_so_super_1_rdev_size_change_fndecl_12120 super_1_rdev_size_change fndecl 2 12120 NULL ++enable_so_ies_len_network_info_12121 ies_len network_info 0 12121 NULL +enable_so_key_size_ccp_rsa_engine_12126 key_size ccp_rsa_engine 0 12126 NULL +enable_so_ProgRegShift_cfi_intelext_programming_regioninfo_12129 ProgRegShift cfi_intelext_programming_regioninfo 0 12129 NULL +enable_so_ext4_fiemap_fndecl_12131 ext4_fiemap fndecl 4-3 12131 NULL @@ -189109,6 +188664,7 @@ index 0000000..4ed1988 +enable_so_size_btrfs_ioctl_logical_ino_args_12299 size btrfs_ioctl_logical_ino_args 0 12299 NULL +enable_so_max_y_fb_monspecs_12303 max_y fb_monspecs 0 12303 NULL +enable_so_nb_blocks_NFTLrecord_12306 nb_blocks NFTLrecord 0 12306 NULL ++enable_so_offset_pcf8584_tblprop_12311 offset pcf8584_tblprop 0 12311 NULL +enable_so_hr_blocks_o2hb_region_12318 hr_blocks o2hb_region 0 12318 NULL nohasharray +enable_so_mthca_max_data_size_fndecl_12318 mthca_max_data_size fndecl 0-3 12318 &enable_so_hr_blocks_o2hb_region_12318 +enable_so_length_sg_mapping_iter_12324 length sg_mapping_iter 0 12324 NULL nohasharray @@ -189216,6 +188772,7 @@ index 0000000..4ed1988 +enable_so_qnx6_readpages_fndecl_12570 qnx6_readpages fndecl 4 12570 NULL +enable_so_read8_sync_rtl_io_12571 read8_sync rtl_io 0 12571 NULL +enable_so_address_length_acpi_resource_memory32_12576 address_length acpi_resource_memory32 0 12576 NULL ++enable_so_irq_count_rmi_driver_data_12580 irq_count rmi_driver_data 0 12580 NULL +enable_so_fs_path_add_from_extent_buffer_fndecl_12581 fs_path_add_from_extent_buffer fndecl 0-4 12581 NULL +enable_so_rate_den_snd_pcm_hw_params_12586 rate_den snd_pcm_hw_params 0 12586 NULL +enable_so_raid_disk_md_rdev_12590 raid_disk md_rdev 0 12590 NULL nohasharray @@ -189264,6 +188821,7 @@ index 0000000..4ed1988 +enable_so_fld_debugfs_hash_seq_write_fndecl_12713 fld_debugfs_hash_seq_write fndecl 3 12713 &enable_so_mdio_phys_octeon_mdiobus_12713 +enable_so_total_len_ocrdma_hdr_wqe_12714 total_len ocrdma_hdr_wqe 0 12714 NULL nohasharray +enable_so_sys_listxattr_fndecl_12714 sys_listxattr fndecl 3 12714 &enable_so_total_len_ocrdma_hdr_wqe_12714 ++enable_so_dmm_read_fndecl_12716 dmm_read fndecl 0 12716 NULL +enable_so_ss_in_channels_hdsp_12726 ss_in_channels hdsp 0 12726 NULL +enable_so_start_brk_prctl_mm_map_12729 start_brk prctl_mm_map 0 12729 NULL +enable_so_btrfs_truncate_item_fndecl_12731 btrfs_truncate_item fndecl 3 12731 NULL @@ -189294,6 +188852,7 @@ index 0000000..4ed1988 +enable_so_frameoffset_b43legacy_dmaring_12869 frameoffset b43legacy_dmaring 0 12869 NULL +enable_so_max_ddbs_hw_profile_12873 max_ddbs hw_profile 0 12873 NULL +enable_so_tcp_remove_reno_sacks_fndecl_12874 tcp_remove_reno_sacks fndecl 2 12874 NULL ++enable_so_omap_gem_new_dmabuf_fndecl_12877 omap_gem_new_dmabuf fndecl 2 12877 NULL +enable_so_rx_buf_size_qede_rx_queue_12878 rx_buf_size qede_rx_queue 0 12878 NULL +enable_so_length_i2c_hid_cmd_12879 length i2c_hid_cmd 0 12879 NULL +enable_so_response_length_ib_uverbs_ex_create_cq_resp_12889 response_length ib_uverbs_ex_create_cq_resp 0 12889 NULL @@ -189337,6 +188896,8 @@ index 0000000..4ed1988 +enable_so_clone_update_extent_map_fndecl_12984 clone_update_extent_map fndecl 4-5 12984 NULL nohasharray +enable_so_newwin_mad_rmpp_recv_12984 newwin mad_rmpp_recv 0 12984 &enable_so_clone_update_extent_map_fndecl_12984 +enable_so_num_outbound_streams_sctp_inithdr_12987 num_outbound_streams sctp_inithdr 0 12987 NULL ++enable_so_sync_fill_fence_info_fndecl_12989 sync_fill_fence_info fndecl 0 12989 NULL ++enable_so_sys_oabi_epoll_wait_fndecl_12992 sys_oabi_epoll_wait fndecl 3 12992 NULL +enable_so_rohm_i2c_burst_read_fndecl_12996 rohm_i2c_burst_read fndecl 4 12996 NULL +enable_so_xdr_reserve_space_fndecl_12997 xdr_reserve_space fndecl 2 12997 NULL +enable_so_end_file_extent_cluster_13001 end file_extent_cluster 0 13001 NULL @@ -189371,7 +188932,8 @@ index 0000000..4ed1988 +enable_so_hard_mtu_usbnet_13093 hard_mtu usbnet 0 13093 NULL nohasharray +enable_so_vrambase_sisusb_usb_data_13093 vrambase sisusb_usb_data 0 13093 &enable_so_hard_mtu_usbnet_13093 nohasharray +enable_so_cursg_ofs_ide_cmd_13093 cursg_ofs ide_cmd 0 13093 &enable_so_vrambase_sisusb_usb_data_13093 nohasharray -+enable_so_thermal_zone_device_register_fndecl_13093 thermal_zone_device_register fndecl 2 13093 &enable_so_cursg_ofs_ide_cmd_13093 ++enable_so_thermal_zone_device_register_fndecl_13093 thermal_zone_device_register fndecl 2 13093 &enable_so_cursg_ofs_ide_cmd_13093 nohasharray ++enable_so_ds_data_fndecl_13093 ds_data fndecl 3 13093 &enable_so_thermal_zone_device_register_fndecl_13093 +enable_so_set_wep_key_fndecl_13094 set_wep_key fndecl 4 13094 NULL +enable_so___exclude_logged_extent_fndecl_13095 __exclude_logged_extent fndecl 3-2 13095 NULL +enable_so_end_data_mm_struct_13099 end_data mm_struct 0 13099 NULL @@ -189457,6 +189019,7 @@ index 0000000..4ed1988 +enable_so_pwr_ps_enter_read_fndecl_13348 pwr_ps_enter_read fndecl 3 13348 NULL nohasharray +enable_so_sctp_setsockopt_adaptation_layer_fndecl_13348 sctp_setsockopt_adaptation_layer fndecl 3 13348 &enable_so_pwr_ps_enter_read_fndecl_13348 +enable_so_compat_mtw_from_user_fndecl_13351 compat_mtw_from_user fndecl 0 13351 NULL ++enable_so_subctxt_cnt_hfi1_ctxtdata_13355 subctxt_cnt hfi1_ctxtdata 0 13355 NULL +enable_so_hecubafb_write_fndecl_13357 hecubafb_write fndecl 3 13357 NULL +enable_so_carl9170_handle_mpdu_fndecl_13359 carl9170_handle_mpdu fndecl 3 13359 NULL +enable_so_hhf_zalloc_fndecl_13363 hhf_zalloc fndecl 1 13363 NULL @@ -189489,6 +189052,7 @@ index 0000000..4ed1988 +enable_so_subdevices_count_snd_rawmidi_info_13408 subdevices_count snd_rawmidi_info 0 13408 NULL +enable_so_rate_adav80x_13411 rate adav80x 0 13411 NULL +enable_so_extra_len_request_13419 extra_len request 0 13419 NULL ++enable_so_cp210x_write_reg_block_fndecl_13420 cp210x_write_reg_block fndecl 4 13420 NULL +enable_so_i2c_smbus_xfer_fndecl_13421 i2c_smbus_xfer fndecl 0 13421 NULL +enable_so_nrealreaders_stress_lock_torture_cxt_13422 nrealreaders_stress lock_torture_cxt 0 13422 NULL +enable_so_tx_headroom_ieee80211_local_13423 tx_headroom ieee80211_local 0 13423 NULL @@ -189500,6 +189064,7 @@ index 0000000..4ed1988 +enable_so_promote_fndecl_13442 promote fndecl 4-3 13442 NULL +enable_so_kvm_read_guest_phys_system_fndecl_13445 kvm_read_guest_phys_system fndecl 2-4 13445 NULL +enable_so_nports_adapter_params_13446 nports adapter_params 0 13446 NULL ++enable_so_mmp_clk_init_fndecl_13447 mmp_clk_init fndecl 3 13447 NULL +enable_so_drvinfo_sz_rtl8xxxu_rx_desc_13448 drvinfo_sz rtl8xxxu_rx_desc 0 13448 NULL +enable_so_fill_read_buf_fndecl_13455 fill_read_buf fndecl 0-2 13455 NULL +enable_so_me_start_ocfs2_move_extents_13461 me_start ocfs2_move_extents 0 13461 NULL nohasharray @@ -189517,6 +189082,7 @@ index 0000000..4ed1988 +enable_so_size_jffs2_full_dnode_13487 size jffs2_full_dnode 0 13487 NULL +enable_so_sk_datalen_svc_sock_13490 sk_datalen svc_sock 0 13490 NULL nohasharray +enable_so_i_section_size_iso_inode_info_13490 i_section_size iso_inode_info 0 13490 &enable_so_sk_datalen_svc_sock_13490 ++enable_so_iwl_mvm_notify_rx_queue_fndecl_13499 iwl_mvm_notify_rx_queue fndecl 4 13499 NULL +enable_so_curchunk_len_drm_dp_sideband_msg_rx_13501 curchunk_len drm_dp_sideband_msg_rx 0 13501 NULL +enable_so_sendpage_proto_ops_13505 sendpage proto_ops 0 13505 NULL nohasharray +enable_so_hwtstamp_ioctl_fndecl_13505 hwtstamp_ioctl fndecl 0 13505 &enable_so_sendpage_proto_ops_13505 @@ -189611,6 +189177,7 @@ index 0000000..4ed1988 +enable_so_write_pipe_ezusb_priv_13743 write_pipe ezusb_priv 0 13743 &enable_so_cipso_v4_genopt_fndecl_13743 nohasharray +enable_so_regmap_ibt_write_fndecl_13743 regmap_ibt_write fndecl 3 13743 &enable_so_write_pipe_ezusb_priv_13743 +enable_so_level_guest_walker32_13749 level guest_walker32 0 13749 NULL ++enable_so_length_rio_mport_maint_io_13751 length rio_mport_maint_io 0 13751 NULL +enable_so_qlcnic_alloc_sds_rings_fndecl_13752 qlcnic_alloc_sds_rings fndecl 2 13752 NULL +enable_so_compat_sys_recv_fndecl_13753 compat_sys_recv fndecl 3 13753 NULL +enable_so_length_core_conn_create_data_13754 length core_conn_create_data 0 13754 NULL nohasharray @@ -189753,7 +189320,8 @@ index 0000000..4ed1988 +enable_so_short_len_fat_ioctl_filldir_callback_14151 short_len fat_ioctl_filldir_callback 0 14151 NULL +enable_so_page_size_at24_platform_data_14152 page_size at24_platform_data 0 14152 NULL +enable_so_svcxdr_tmpalloc_fndecl_14154 svcxdr_tmpalloc fndecl 2 14154 NULL nohasharray -+enable_so_write_kmem_fndecl_14154 write_kmem fndecl 3 14154 &enable_so_svcxdr_tmpalloc_fndecl_14154 ++enable_so_write_kmem_fndecl_14154 write_kmem fndecl 3 14154 &enable_so_svcxdr_tmpalloc_fndecl_14154 nohasharray ++enable_so_num_ratios_coreclk_soc_desc_14154 num_ratios coreclk_soc_desc 0 14154 &enable_so_write_kmem_fndecl_14154 +enable_so_range_min_regmap_range_node_14166 range_min regmap_range_node 0 14166 NULL +enable_so_ocfs2_read_blocks_sync_fndecl_14169 ocfs2_read_blocks_sync fndecl 2 14169 NULL +enable_so_cmd_len_scsi_cmnd_14171 cmd_len scsi_cmnd 0 14171 NULL @@ -189808,7 +189376,8 @@ index 0000000..4ed1988 +enable_so_gfn_kvm_mmu_page_14326 gfn kvm_mmu_page 0 14326 NULL +enable_so_pcbit_stat_fndecl_14327 pcbit_stat fndecl 2 14327 NULL +enable_so_ath6kl_wmi_ap_profile_commit_fndecl_14329 ath6kl_wmi_ap_profile_commit fndecl 2 14329 NULL -+enable_so_data_offset_md_rdev_14330 data_offset md_rdev 0 14330 NULL ++enable_so_data_offset_md_rdev_14330 data_offset md_rdev 0 14330 NULL nohasharray ++enable_so_pxad_alloc_desc_fndecl_14330 pxad_alloc_desc fndecl 2 14330 &enable_so_data_offset_md_rdev_14330 +enable_so_pasid_limit_vardecl_kfd_pasid_c_14334 pasid_limit vardecl_kfd_pasid.c 0 14334 NULL +enable_so_fdt_getprop_namelen_fndecl_14339 fdt_getprop_namelen fndecl 2 14339 NULL nohasharray +enable_so_mask_myri10ge_rx_buf_14339 mask myri10ge_rx_buf 0 14339 &enable_so_fdt_getprop_namelen_fndecl_14339 @@ -189844,6 +189413,7 @@ index 0000000..4ed1988 +enable_so_min_snd_interval_14412 min snd_interval 0 14412 &enable_so_crtc_hblank_start_drm_display_mode_14412 nohasharray +enable_so_rl_space_gfs2_rgrp_list_14412 rl_space gfs2_rgrp_list 0 14412 &enable_so_min_snd_interval_14412 +enable_so_num_channels_hsi_config_14414 num_channels hsi_config 0 14414 NULL ++enable_so_max_ep_fsl_udc_14417 max_ep fsl_udc 0 14417 NULL +enable_so_bigdirlen_adfs_bigdirentry_14420 bigdirlen adfs_bigdirentry 0 14420 NULL +enable_so_snd_es1938_capture_copy_fndecl_14425 snd_es1938_capture_copy fndecl 5 14425 NULL +enable_so_xlog_recover_process_one_iunlink_fndecl_14426 xlog_recover_process_one_iunlink fndecl 3-0-2 14426 NULL @@ -190125,6 +189695,7 @@ index 0000000..4ed1988 +enable_so_genwqe_ffdc_buff_size_fndecl_15236 genwqe_ffdc_buff_size fndecl 0 15236 NULL +enable_so_surface_width_drm_fb_helper_surface_size_15237 surface_width drm_fb_helper_surface_size 0 15237 NULL +enable_so_len_sock_fprog_15239 len sock_fprog 0 15239 NULL ++enable_so_qcom_scm_call_fndecl_15241 qcom_scm_call fndecl 4-6 15241 NULL +enable_so_do_setxattr_fndecl_15243 do_setxattr fndecl 5 15243 NULL +enable_so_protocol_hdlc_header_15245 protocol hdlc_header 0 15245 NULL +enable_so_result_wa_seg_15248 result wa_seg 0 15248 NULL nohasharray @@ -190176,7 +189747,8 @@ index 0000000..4ed1988 +enable_so_setup_buffering_fndecl_15419 setup_buffering fndecl 3 15419 NULL +enable_so_logical_reada_extent_15426 logical reada_extent 0 15426 NULL +enable_so_pwc_set_video_mode_fndecl_15427 pwc_set_video_mode fndecl 5 15427 NULL -+enable_so_size_cmd_header_15429 size cmd_header 0 15429 NULL ++enable_so_size_cmd_header_15429 size cmd_header 0 15429 NULL nohasharray ++enable_so_num_saved_mc_saved_data_15429 num_saved mc_saved_data 0 15429 &enable_so_size_cmd_header_15429 +enable_so_ddr_base_intel_sst_drv_15431 ddr_base intel_sst_drv 0 15431 NULL +enable_so_ati_remote_sendpacket_fndecl_15435 ati_remote_sendpacket fndecl 2 15435 NULL +enable_so_max_vpi_lpfc_hba_15442 max_vpi lpfc_hba 0 15442 NULL @@ -190207,7 +189779,8 @@ index 0000000..4ed1988 +enable_so_map_size_drm_amdgpu_gem_va_15550 map_size drm_amdgpu_gem_va 0 15550 NULL +enable_so_lowpan_xmit_fragment_fndecl_15552 lowpan_xmit_fragment fndecl 4-6 15552 NULL +enable_so_ep_in_kingsun_cb_15553 ep_in kingsun_cb 0 15553 NULL -+enable_so_diff_usnic_uiom_reg_15554 diff usnic_uiom_reg 0 15554 NULL ++enable_so_diff_usnic_uiom_reg_15554 diff usnic_uiom_reg 0 15554 NULL nohasharray ++enable_so_num_odfs_clkgen_pll_data_15554 num_odfs clkgen_pll_data 0 15554 &enable_so_diff_usnic_uiom_reg_15554 +enable_so_video_buffer_size_vivid_dev_15556 video_buffer_size vivid_dev 0 15556 NULL +enable_so_node_start_pfn_pglist_data_15561 node_start_pfn pglist_data 0 15561 NULL +enable_so_num_sge_ib_send_wr_15565 num_sge ib_send_wr 0 15565 NULL @@ -190380,6 +189953,7 @@ index 0000000..4ed1988 +enable_so_w_mode_size_16096 w mode_size 0 16096 NULL +enable_so_param_len_mgmt_pending_cmd_16099 param_len mgmt_pending_cmd 0 16099 NULL +enable_so_grow_dev_page_fndecl_16100 grow_dev_page fndecl 4-5-3 16100 NULL ++enable_so_instances_minus_one_mxt_object_16107 instances_minus_one mxt_object 0 16107 NULL +enable_so_find_extend_vma_fndecl_16110 find_extend_vma fndecl 2 16110 NULL +enable_so_brcmf_usb_dl_send_bulk_fndecl_16113 brcmf_usb_dl_send_bulk fndecl 3 16113 NULL nohasharray +enable_so_xillybus_llseek_fndecl_16113 xillybus_llseek fndecl 2 16113 &enable_so_brcmf_usb_dl_send_bulk_fndecl_16113 @@ -190454,6 +190028,7 @@ index 0000000..4ed1988 +enable_so_channels_snd_emu10k1_fx8010_pcm_16368 channels snd_emu10k1_fx8010_pcm 0 16368 NULL +enable_so_udf_get_pblock_virt15_fndecl_16373 udf_get_pblock_virt15 fndecl 4 16373 NULL +enable_so_help_fndecl_16375 help fndecl 3-5 16375 NULL ++enable_so_samsung_clk_init_fndecl_16382 samsung_clk_init fndecl 3 16382 NULL +enable_so_len_iwl_mvm_dump_desc_16383 len iwl_mvm_dump_desc 0 16383 NULL +enable_so_zd_mac_preinit_hw_fndecl_16386 zd_mac_preinit_hw fndecl 0 16386 NULL +enable_so_sr_set_blocklength_fndecl_16390 sr_set_blocklength fndecl 2 16390 NULL @@ -190490,15 +190065,18 @@ index 0000000..4ed1988 +enable_so_m_sectbb_log_xfs_mount_16477 m_sectbb_log xfs_mount 0 16477 NULL nohasharray +enable_so_nfs_proc_symlink_fndecl_16477 nfs_proc_symlink fndecl 4 16477 &enable_so_m_sectbb_log_xfs_mount_16477 +enable_so_nilfs_iget_fndecl_16478 nilfs_iget fndecl 3 16478 NULL ++enable_so_mtk_alloc_clk_data_fndecl_16481 mtk_alloc_clk_data fndecl 1 16481 NULL +enable_so_nvme_nvm_get_bb_tbl_fndecl_16482 nvme_nvm_get_bb_tbl fndecl 3 16482 NULL +enable_so_msg_count_amd8111e_rx_dr_16493 msg_count amd8111e_rx_dr 0 16493 NULL +enable_so_fc_plogi_x_build_fndecl_16495 fc_plogi_x_build fndecl 8 16495 NULL ++enable_so_sq_size_i40iw_qp_uk_init_info_16496 sq_size i40iw_qp_uk_init_info 0 16496 NULL +enable_so_blksz_fw_dl_mwifiex_pcie_device_16498 blksz_fw_dl mwifiex_pcie_device 0 16498 NULL nohasharray +enable_so_ttm_page_alloc_init_fndecl_16498 ttm_page_alloc_init fndecl 2 16498 &enable_so_blksz_fw_dl_mwifiex_pcie_device_16498 +enable_so_max_srq_wqes_mthca_limits_16499 max_srq_wqes mthca_limits 0 16499 NULL +enable_so_stride_simplefb_platform_data_16503 stride simplefb_platform_data 0 16503 NULL +enable_so_crypt_alloc_buffer_fndecl_16511 crypt_alloc_buffer fndecl 2 16511 NULL +enable_so_cfs_cpt_num_estimate_fndecl_16512 cfs_cpt_num_estimate fndecl 0 16512 NULL ++enable_so_size_i40iw_chunk_16517 size i40iw_chunk 0 16517 NULL +enable_so_blocks_available_dio_submit_16522 blocks_available dio_submit 0 16522 NULL +enable_so_xb_suballoc_loc_ocfs2_xattr_block_16523 xb_suballoc_loc ocfs2_xattr_block 0 16523 NULL +enable_so_io_throttle_count_vnic_snic_config_16529 io_throttle_count vnic_snic_config 0 16529 NULL @@ -190511,6 +190089,7 @@ index 0000000..4ed1988 +enable_so_max_mthca_srq_16551 max mthca_srq 0 16551 NULL +enable_so_max_srq_sz_mlx4_dev_cap_16554 max_srq_sz mlx4_dev_cap 0 16554 NULL +enable_so_groups_alloc_fndecl_16557 groups_alloc fndecl 1 16557 NULL ++enable_so_alloc_one_table_fndecl_16559 alloc_one_table fndecl 1 16559 NULL +enable_so_result_wa_xfer_16568 result wa_xfer 0 16568 NULL +enable_so_cramfs_uncompress_block_fndecl_16569 cramfs_uncompress_block fndecl 4-2 16569 NULL +enable_so___mei_cl_send_fndecl_16571 __mei_cl_send fndecl 3 16571 NULL @@ -190518,6 +190097,7 @@ index 0000000..4ed1988 +enable_so_nfs4_xattr_set_nfs4_label_fndecl_16581 nfs4_xattr_set_nfs4_label fndecl 5 16581 NULL nohasharray +enable_so_descriptor_elements_timb_dma_platform_data_channel_16581 descriptor_elements timb_dma_platform_data_channel 0 16581 &enable_so_nfs4_xattr_set_nfs4_label_fndecl_16581 +enable_so_n_phy_pm8001_chip_info_16585 n_phy pm8001_chip_info 0 16585 NULL ++enable_so_target_alloc_session_fndecl_16588 target_alloc_session fndecl 2-3 16588 NULL +enable_so_len_atmel_priv_ioctl_16592 len atmel_priv_ioctl 0 16592 NULL +enable_so_ino_logfs_block_16599 ino logfs_block 0 16599 NULL +enable_so_send_to_group_fndecl_16600 send_to_group fndecl 0 16600 NULL @@ -190565,7 +190145,8 @@ index 0000000..4ed1988 +enable_so_rx_rate_rx_frames_per_rates_read_fndecl_16737 rx_rate_rx_frames_per_rates_read fndecl 3 16737 NULL nohasharray +enable_so_udf_add_extendedattr_fndecl_16737 udf_add_extendedattr fndecl 2 16737 &enable_so_rx_rate_rx_frames_per_rates_read_fndecl_16737 nohasharray +enable_so_kimage_alloc_init_fndecl_16737 kimage_alloc_init fndecl 3 16737 &enable_so_udf_add_extendedattr_fndecl_16737 -+enable_so_r_root_dir_omfs_root_block_16742 r_root_dir omfs_root_block 0 16742 NULL ++enable_so_r_root_dir_omfs_root_block_16742 r_root_dir omfs_root_block 0 16742 NULL nohasharray ++enable_so_devlink_alloc_fndecl_16742 devlink_alloc fndecl 2 16742 &enable_so_r_root_dir_omfs_root_block_16742 +enable_so_blockshift_sddr55_card_info_16749 blockshift sddr55_card_info 0 16749 NULL +enable_so_lib80211_wep_encrypt_fndecl_16752 lib80211_wep_encrypt fndecl 2 16752 NULL +enable_so_skb_pull_rcsum_fndecl_16757 skb_pull_rcsum fndecl 2 16757 NULL @@ -190666,7 +190247,8 @@ index 0000000..4ed1988 +enable_so_consumed_unix_skb_parms_17012 consumed unix_skb_parms 0 17012 NULL nohasharray +enable_so_len_sh_eth_rxdesc_17012 len sh_eth_rxdesc 0 17012 &enable_so_consumed_unix_skb_parms_17012 +enable_so_ds_segment_shift_logfs_disk_super_17013 ds_segment_shift logfs_disk_super 0 17013 NULL -+enable_so_u132_hcd_abandon_urb_fndecl_17016 u132_hcd_abandon_urb fndecl 4 17016 NULL ++enable_so_u132_hcd_abandon_urb_fndecl_17016 u132_hcd_abandon_urb fndecl 4 17016 NULL nohasharray ++enable_so_rq_size_i40iw_qp_uk_init_info_17016 rq_size i40iw_qp_uk_init_info 0 17016 &enable_so_u132_hcd_abandon_urb_fndecl_17016 +enable_so_num_pads_media_entity_17022 num_pads media_entity 0 17022 NULL +enable_so_ext4_mb_load_buddy_fndecl_17030 ext4_mb_load_buddy fndecl 2-0 17030 NULL +enable_so_ast_get_vram_info_fndecl_17034 ast_get_vram_info fndecl 0 17034 NULL nohasharray @@ -190857,12 +190439,14 @@ index 0000000..4ed1988 +enable_so_ufs_truncate_fndecl_17556 ufs_truncate fndecl 2 17556 NULL +enable_so_channels_cardstate_17560 channels cardstate 0 17560 NULL +enable_so_qcaspi_read_legacy_fndecl_17563 qcaspi_read_legacy fndecl 3 17563 NULL -+enable_so_lcd_vsync_len_atyfb_par_17565 lcd_vsync_len atyfb_par 0 17565 NULL ++enable_so_lcd_vsync_len_atyfb_par_17565 lcd_vsync_len atyfb_par 0 17565 NULL nohasharray ++enable_so_cdm_element_count_vardecl_17565 cdm_element_count vardecl 0 17565 &enable_so_lcd_vsync_len_atyfb_par_17565 +enable_so_stack_size_ahd_softc_17574 stack_size ahd_softc 0 17574 NULL +enable_so_wMaxPacketSize_usb_rpipe_descriptor_17578 wMaxPacketSize usb_rpipe_descriptor 0 17578 NULL +enable_so_sb_fs_size_hpfs_sb_info_17581 sb_fs_size hpfs_sb_info 0 17581 NULL +enable_so_SyS_semtimedop_fndecl_17584 SyS_semtimedop fndecl 3 17584 NULL +enable_so_opcode_mmc_command_17586 opcode mmc_command 0 17586 NULL ++enable_so_sita_init_fndecl_17588 sita_init fndecl 2-1 17588 NULL +enable_so_bfad_iocmd_itnim_get_iostats_fndecl_17592 bfad_iocmd_itnim_get_iostats fndecl 0 17592 NULL +enable_so_fdt_delprop_fndecl_17595 fdt_delprop fndecl 2 17595 NULL +enable_so_reg_bytes_regmap_format_17598 reg_bytes regmap_format 0 17598 NULL @@ -190873,6 +190457,7 @@ index 0000000..4ed1988 +enable_so_nr_planes_nvm_dev_17609 nr_planes nvm_dev 0 17609 NULL +enable_so_tl_retry_count_srp_target_port_17624 tl_retry_count srp_target_port 0 17624 NULL +enable_so_min_alloc_order_gen_pool_17628 min_alloc_order gen_pool 0 17628 NULL ++enable_so_num_peri_pl330_config_17630 num_peri pl330_config 0 17630 NULL +enable_so_ctxts_extrabuf_qib_devdata_17634 ctxts_extrabuf qib_devdata 0 17634 NULL +enable_so_video_linelength_sis_video_info_17642 video_linelength sis_video_info 0 17642 NULL +enable_so_wl12xx_sdio_raw_read_fndecl_17648 wl12xx_sdio_raw_read fndecl 4 17648 NULL @@ -191161,6 +190746,7 @@ index 0000000..4ed1988 +enable_so_mp_tx_agg_buf_size_sdio_mmc_card_18449 mp_tx_agg_buf_size sdio_mmc_card 0 18449 &enable_so_data_len_hfa384x_tx_frame_18449 +enable_so_copy_range_nfulnl_instance_18460 copy_range nfulnl_instance 0 18460 NULL nohasharray +enable_so_error_bar_retry_read_fndecl_18460 error_bar_retry_read fndecl 3 18460 &enable_so_copy_range_nfulnl_instance_18460 ++enable_so_cpg_div6_register_fndecl_18462 cpg_div6_register fndecl 2 18462 NULL +enable_so_bsize_jfs_sb_info_18477 bsize jfs_sb_info 0 18477 NULL +enable_so_xfs_free_extent_fndecl_18480 xfs_free_extent fndecl 2-3 18480 NULL +enable_so_exynos4_jpeg_get_stream_size_fndecl_18485 exynos4_jpeg_get_stream_size fndecl 0 18485 NULL nohasharray @@ -191202,7 +190788,8 @@ index 0000000..4ed1988 +enable_so_m25p80_write_fndecl_18603 m25p80_write fndecl 3 18603 NULL +enable_so_logfs_write_je_buf_fndecl_18606 logfs_write_je_buf fndecl 4 18606 NULL nohasharray +enable_so_num_of_queues_iwl_base_params_18606 num_of_queues iwl_base_params 0 18606 &enable_so_logfs_write_je_buf_fndecl_18606 -+enable_so_size_uhid_input_req_18611 size uhid_input_req 0 18611 NULL ++enable_so_size_uhid_input_req_18611 size uhid_input_req 0 18611 NULL nohasharray ++enable_so__wil_cfg80211_merge_extra_ies_fndecl_18611 _wil_cfg80211_merge_extra_ies fndecl 2-4 18611 &enable_so_size_uhid_input_req_18611 +enable_so_befs_get_block_fndecl_18612 befs_get_block fndecl 2 18612 NULL +enable_so_dstpos_isdnhdlc_vars_18616 dstpos isdnhdlc_vars 0 18616 NULL nohasharray +enable_so_iwl_pcie_txq_init_fndecl_18616 iwl_pcie_txq_init fndecl 3 18616 &enable_so_dstpos_isdnhdlc_vars_18616 @@ -191227,6 +190814,7 @@ index 0000000..4ed1988 +enable_so_len_xdr_netobj_18672 len xdr_netobj 0 18672 NULL +enable_so_ies_len_scan_attr_18673 ies_len scan_attr 0 18673 NULL +enable_so_pn_recvmsg_fndecl_18676 pn_recvmsg fndecl 3 18676 NULL ++enable_so_nr_clk_regs_samsung_cmu_info_18678 nr_clk_regs samsung_cmu_info 0 18678 NULL +enable_so_ldm_frag_add_fndecl_18680 ldm_frag_add fndecl 2 18680 NULL +enable_so_used_chaoskey_18682 used chaoskey 0 18682 NULL nohasharray +enable_so_ocd_max_easize_obd_connect_data_18682 ocd_max_easize obd_connect_data 0 18682 &enable_so_used_chaoskey_18682 @@ -191287,6 +190875,7 @@ index 0000000..4ed1988 +enable_so_DriverQueueDepth_DAC960_Controller_18839 DriverQueueDepth DAC960_Controller 0 18839 &enable_so_xfs_inobt_insert_rec_fndecl_18839 +enable_so_rsn_ie_len_hostap_bss_info_18840 rsn_ie_len hostap_bss_info 0 18840 NULL +enable_so_number_snd_card_18845 number snd_card 0 18845 NULL ++enable_so_exynos_drm_gem_init_fndecl_18846 exynos_drm_gem_init fndecl 2 18846 NULL +enable_so_n_targets_rsxx_cardinfo_18847 n_targets rsxx_cardinfo 0 18847 NULL +enable_so_private_data_len_ib_cm_req_param_18848 private_data_len ib_cm_req_param 0 18848 NULL +enable_so_master_xfer_i2c_algorithm_18849 master_xfer i2c_algorithm 0 18849 NULL nohasharray @@ -191398,7 +190987,8 @@ index 0000000..4ed1988 +enable_so_inftl_write_oob_fndecl_19154 inftl_write_oob fndecl 2-3 19154 NULL +enable_so_alloc_indirect_fndecl_19156 alloc_indirect fndecl 2 19156 NULL +enable_so_do_get_thread_area_fndecl_19157 do_get_thread_area fndecl 2 19157 NULL -+enable_so_page_array_size_firmware_buf_19163 page_array_size firmware_buf 0 19163 NULL ++enable_so_page_array_size_firmware_buf_19163 page_array_size firmware_buf 0 19163 NULL nohasharray ++enable_so_x___una_u16_19163 x __una_u16 0 19163 &enable_so_page_array_size_firmware_buf_19163 +enable_so_ve_attrlen_nfsd4_verify_19164 ve_attrlen nfsd4_verify 0 19164 NULL +enable_so_ms_nvme_ns_19166 ms nvme_ns 0 19166 NULL +enable_so_dma_start_hi_rx_buf_desc_19167 dma_start_hi rx_buf_desc 0 19167 NULL @@ -191446,7 +191036,8 @@ index 0000000..4ed1988 +enable_so_ext_len_xfs_extent_19299 ext_len xfs_extent 0 19299 NULL +enable_so_ubi_calc_fm_size_fndecl_19302 ubi_calc_fm_size fndecl 0 19302 NULL +enable_so_copy_vma_fndecl_19303 copy_vma fndecl 3-2-4 19303 NULL -+enable_so_cl_cpg_ocfs2_chain_list_19308 cl_cpg ocfs2_chain_list 0 19308 NULL ++enable_so_cl_cpg_ocfs2_chain_list_19308 cl_cpg ocfs2_chain_list 0 19308 NULL nohasharray ++enable_so_port_priv_size_rocker_world_ops_19308 port_priv_size rocker_world_ops 0 19308 &enable_so_cl_cpg_ocfs2_chain_list_19308 +enable_so_sys_sched_getattr_fndecl_19313 sys_sched_getattr fndecl 3 19313 NULL +enable_so_ve4_indsize_vxfs_ext4_19315 ve4_indsize vxfs_ext4 0 19315 NULL +enable_so_reply_sz_MPT3SAS_ADAPTER_19317 reply_sz MPT3SAS_ADAPTER 0 19317 NULL @@ -191458,7 +191049,8 @@ index 0000000..4ed1988 +enable_so_rule_size_fib_rules_ops_19335 rule_size fib_rules_ops 0 19335 NULL +enable_so___vxge_hw_blockpool_malloc_fndecl_19337 __vxge_hw_blockpool_malloc fndecl 2 19337 NULL +enable_so_compat_sys_writev_fndecl_19339 compat_sys_writev fndecl 3 19339 NULL -+enable_so_NetworkInfoReceived_fndecl_19353 NetworkInfoReceived fndecl 2 19353 NULL ++enable_so_NetworkInfoReceived_fndecl_19353 NetworkInfoReceived fndecl 2 19353 NULL nohasharray ++enable_so_rockchip_clk_init_fndecl_19353 rockchip_clk_init fndecl 3 19353 &enable_so_NetworkInfoReceived_fndecl_19353 +enable_so_sock_alloc_send_pskb_fndecl_19354 sock_alloc_send_pskb fndecl 3 19354 NULL +enable_so_data_sge_offset_mpt3_ioctl_command_19355 data_sge_offset mpt3_ioctl_command 0 19355 NULL +enable_so_qlcnic_83xx_sysfs_flash_read_handler_fndecl_19356 qlcnic_83xx_sysfs_flash_read_handler fndecl 6 19356 NULL nohasharray @@ -191528,7 +191120,8 @@ index 0000000..4ed1988 +enable_so_do_pages_stat_fndecl_19526 do_pages_stat fndecl 2 19526 NULL +enable_so_i40e_reconfig_rss_queues_fndecl_19528 i40e_reconfig_rss_queues fndecl 2 19528 NULL +enable_so_height_simplefb_platform_data_19532 height simplefb_platform_data 0 19532 NULL -+enable_so_memparse_fndecl_19535 memparse fndecl 0 19535 NULL ++enable_so_memparse_fndecl_19535 memparse fndecl 0 19535 NULL nohasharray ++enable_so_d40_sg_2_dmalen_fndecl_19535 d40_sg_2_dmalen fndecl 3-4-0 19535 &enable_so_memparse_fndecl_19535 +enable_so_in_dma_usb_keyspan_19540 in_dma usb_keyspan 0 19540 NULL +enable_so_npins_chv_gpio_pinrange_19542 npins chv_gpio_pinrange 0 19542 NULL nohasharray +enable_so_rtw_android_get_rssi_fndecl_19542 rtw_android_get_rssi fndecl 0 19542 &enable_so_npins_chv_gpio_pinrange_19542 @@ -191543,6 +191136,7 @@ index 0000000..4ed1988 +enable_so_Val_hfs_cat_dir_19565 Val hfs_cat_dir 0 19565 NULL +enable_so_rtsx_pci_card_exclusive_check_fndecl_19570 rtsx_pci_card_exclusive_check fndecl 0 19570 NULL +enable_so_uni16_to_x8_fndecl_19571 uni16_to_x8 fndecl 0 19571 NULL ++enable_so_buf_size_pxa3xx_nand_info_19573 buf_size pxa3xx_nand_info 0 19573 NULL +enable_so_sd_pkt_scan_bayer_fndecl_19581 sd_pkt_scan_bayer fndecl 3 19581 NULL +enable_so_ath6kl_wmi_set_txe_notify_fndecl_19582 ath6kl_wmi_set_txe_notify fndecl 2 19582 NULL +enable_so_bytes_per_track_mspro_devinfo_19584 bytes_per_track mspro_devinfo 0 19584 NULL @@ -191551,6 +191145,7 @@ index 0000000..4ed1988 +enable_so_l1oip_socket_parse_fndecl_19592 l1oip_socket_parse fndecl 4 19592 NULL +enable_so_icc_empty_fifo_fndecl_19594 icc_empty_fifo fndecl 2 19594 NULL +enable_so_xdr_stream_pos_fndecl_19598 xdr_stream_pos fndecl 0 19598 NULL ++enable_so_command_size_drm_qxl_command_19601 command_size drm_qxl_command 0 19601 NULL +enable_so_snd_seq_expand_var_event_fndecl_19602 snd_seq_expand_var_event fndecl 0 19602 NULL +enable_so_readpos_seq_buf_19607 readpos seq_buf 0 19607 NULL +enable_so_di_eattr_gfs2_dinode_19609 di_eattr gfs2_dinode 0 19609 NULL @@ -191564,6 +191159,7 @@ index 0000000..4ed1988 +enable_so_name_len_ext4_dir_entry_2_19628 name_len ext4_dir_entry_2 0 19628 NULL +enable_so_logical_io_failure_record_19631 logical io_failure_record 0 19631 NULL +enable_so_softback_buf_vardecl_fbcon_c_19637 softback_buf vardecl_fbcon.c 0 19637 NULL ++enable_so_num_kernel_image_mappings_vardecl_19639 num_kernel_image_mappings vardecl 0 19639 NULL +enable_so_sdio_io_rw_ext_helper_fndecl_19641 sdio_io_rw_ext_helper fndecl 6 19641 NULL +enable_so_set_fp_int_qed_common_ops_19644 set_fp_int qed_common_ops 0 19644 NULL nohasharray +enable_so_pcfg_ofsh_cyttsp4_sysinfo_data_19644 pcfg_ofsh cyttsp4_sysinfo_data 0 19644 &enable_so_set_fp_int_qed_common_ops_19644 @@ -191701,6 +191297,7 @@ index 0000000..4ed1988 +enable_so_fb_deferred_io_fsync_fndecl_20083 fb_deferred_io_fsync fndecl 2-3 20083 &enable_so_max_rqst_sz_nfs4_channel_attrs_20083 +enable_so_compat_rawv6_setsockopt_fndecl_20084 compat_rawv6_setsockopt fndecl 5 20084 NULL +enable_so_rxsize_grcan_device_config_20087 rxsize grcan_device_config 0 20087 NULL ++enable_so_submit_rtpg_fndecl_20091 submit_rtpg fndecl 3 20091 NULL +enable_so_bnx2_set_rx_ring_size_fndecl_20092 bnx2_set_rx_ring_size fndecl 2 20092 NULL +enable_so_r8712_read32_fndecl_20095 r8712_read32 fndecl 0 20095 NULL +enable_so_reg_count_cs_extent_def_20096 reg_count cs_extent_def 0 20096 NULL @@ -191727,6 +191324,7 @@ index 0000000..4ed1988 +enable_so_usb_ftdi_elan_edset_single_fndecl_20181 usb_ftdi_elan_edset_single fndecl 0 20181 NULL nohasharray +enable_so_swapRB_sd_20181 swapRB sd 0 20181 &enable_so_usb_ftdi_elan_edset_single_fndecl_20181 +enable_so___kmalloc_track_caller_fndecl_20188 __kmalloc_track_caller fndecl 1 20188 NULL ++enable_so_num_counters_vardecl_oprofile_perf_c_20189 num_counters vardecl_oprofile_perf.c 0 20189 NULL +enable_so_qp_attach_mbox_size_fndecl_20191 qp_attach_mbox_size fndecl 0 20191 NULL +enable_so_agp_memory_reserved_vardecl_20196 agp_memory_reserved vardecl 0 20196 NULL nohasharray +enable_so_iram_base_intel_sst_drv_20196 iram_base intel_sst_drv 0 20196 &enable_so_agp_memory_reserved_vardecl_20196 @@ -191747,6 +191345,7 @@ index 0000000..4ed1988 +enable_so_use_sg_osst_buffer_20225 use_sg osst_buffer 0 20225 NULL +enable_so_ll_rw_extents_stats_seq_write_fndecl_20234 ll_rw_extents_stats_seq_write fndecl 3 20234 NULL +enable_so_setup_sgl_buf_fndecl_20237 setup_sgl_buf fndecl 4 20237 NULL ++enable_so_msm_gem_import_fndecl_20238 msm_gem_import fndecl 2 20238 NULL +enable_so_phys_map_info_20239 phys map_info 0 20239 NULL +enable_so_mac_find_mode_fndecl_20243 mac_find_mode fndecl 4 20243 NULL +enable_so_rx_agg_bmap_size_bnxt_rx_ring_info_20244 rx_agg_bmap_size bnxt_rx_ring_info 0 20244 NULL @@ -191757,6 +191356,7 @@ index 0000000..4ed1988 +enable_so_max_size_inet_frag_queue_20249 max_size inet_frag_queue 0 20249 NULL +enable_so_ip_append_page_fndecl_20261 ip_append_page fndecl 5-4 20261 NULL +enable_so_value_len_ocfs2_security_xattr_info_20265 value_len ocfs2_security_xattr_info 0 20265 NULL ++enable_so_arm_setup_iommu_dma_ops_fndecl_20272 arm_setup_iommu_dma_ops fndecl 3 20272 NULL +enable_so_build_header_fndecl_20275 build_header fndecl 4-2 20275 NULL +enable_so_y_skip_top_mt9t031_20278 y_skip_top mt9t031 0 20278 NULL +enable_so_fifo_size_eg20t_port_20279 fifo_size eg20t_port 0 20279 NULL @@ -191900,7 +191500,8 @@ index 0000000..4ed1988 +enable_so_btrfs_dir_name_len_fndecl_20686 btrfs_dir_name_len fndecl 0 20686 NULL +enable_so_write_to_8820_fndecl_20687 write_to_8820 fndecl 3 20687 NULL +enable_so_num_evt_qs_be_adapter_20688 num_evt_qs be_adapter 0 20688 NULL -+enable_so_SyS_semtimedop_fndecl_20703 SyS_semtimedop fndecl 3 20703 NULL ++enable_so_SyS_semtimedop_fndecl_20703 SyS_semtimedop fndecl 3 20703 NULL nohasharray ++enable_so_ldc_read_fndecl_20703 ldc_read fndecl 0 20703 &enable_so_SyS_semtimedop_fndecl_20703 +enable_so_erase_size_vardecl_mtdram_c_20704 erase_size vardecl_mtdram.c 0 20704 NULL +enable_so_evtchn_read_fndecl_20706 evtchn_read fndecl 3 20706 NULL +enable_so_err_dev_e752x_dev_info_20708 err_dev e752x_dev_info 0 20708 NULL @@ -192011,6 +191612,7 @@ index 0000000..4ed1988 +enable_so_cxns_per_ctrl_hba_parameters_21008 cxns_per_ctrl hba_parameters 0 21008 NULL +enable_so_controller_function_mspro_sys_info_21011 controller_function mspro_sys_info 0 21011 NULL +enable_so_s_log_cluster_size_ext4_super_block_21014 s_log_cluster_size ext4_super_block 0 21014 NULL ++enable_so_i40iw_get_vmalloc_mem_fndecl_21016 i40iw_get_vmalloc_mem fndecl 3 21016 NULL +enable_so_shrink_zone_span_fndecl_21018 shrink_zone_span fndecl 3-2 21018 NULL +enable_so_create_one_cdev_fndecl_21023 create_one_cdev fndecl 2 21023 NULL +enable_so___build_skb_fndecl_21024 __build_skb fndecl 2 21024 NULL @@ -192189,12 +191791,14 @@ index 0000000..4ed1988 +enable_so_c67x00_urb_dequeue_fndecl_21522 c67x00_urb_dequeue fndecl 3 21522 &enable_so_fifo_size_hscx_hw_21522 +enable_so_data_offset_mdp_superblock_1_21524 data_offset mdp_superblock_1 0 21524 NULL nohasharray +enable_so_intel_sdvo_set_value_fndecl_21524 intel_sdvo_set_value fndecl 4 21524 &enable_so_data_offset_mdp_superblock_1_21524 ++enable_so_sys_oabi_semtimedop_fndecl_21526 sys_oabi_semtimedop fndecl 3 21526 NULL +enable_so_kvm_clear_guest_page_fndecl_21527 kvm_clear_guest_page fndecl 2-4 21527 NULL +enable_so_xennet_max_queues_vardecl_xen_netfront_c_21530 xennet_max_queues vardecl_xen-netfront.c 0 21530 NULL +enable_so_ooblen_mtd_oob_ops_21531 ooblen mtd_oob_ops 0 21531 NULL +enable_so_hfsplus_find_init_fndecl_21533 hfsplus_find_init fndecl 0 21533 NULL nohasharray +enable_so_alloc_btrfs_bio_fndecl_21533 alloc_btrfs_bio fndecl 2-1 21533 &enable_so_hfsplus_find_init_fndecl_21533 nohasharray -+enable_so_picolcd_fb_write_fndecl_21533 picolcd_fb_write fndecl 3 21533 &enable_so_alloc_btrfs_bio_fndecl_21533 ++enable_so_picolcd_fb_write_fndecl_21533 picolcd_fb_write fndecl 3 21533 &enable_so_alloc_btrfs_bio_fndecl_21533 nohasharray ++enable_so_nr_bos_drm_msm_gem_submit_21533 nr_bos drm_msm_gem_submit 0 21533 &enable_so_picolcd_fb_write_fndecl_21533 +enable_so_zr364xx_read_fndecl_21537 zr364xx_read fndecl 3 21537 NULL +enable_so_pvid_be_adapter_21538 pvid be_adapter 0 21538 NULL +enable_so_viafb_iga2_odev_proc_write_fndecl_21544 viafb_iga2_odev_proc_write fndecl 3 21544 NULL @@ -192274,7 +191878,8 @@ index 0000000..4ed1988 +enable_so_skb_ts_get_next_block_fndecl_21748 skb_ts_get_next_block fndecl 1 21748 NULL +enable_so___ceph_setxattr_fndecl_21751 __ceph_setxattr fndecl 4 21751 NULL +enable_so_bufsiz_mousedev_client_21759 bufsiz mousedev_client 0 21759 NULL -+enable_so_width_tm6000_fh_21761 width tm6000_fh 0 21761 NULL ++enable_so_width_tm6000_fh_21761 width tm6000_fh 0 21761 NULL nohasharray ++enable_so_max_nr_vardecl_exynos_combiner_c_21761 max_nr vardecl_exynos-combiner.c 0 21761 &enable_so_width_tm6000_fh_21761 +enable_so_req_lim_delta_srp_login_rsp_21762 req_lim_delta srp_login_rsp 0 21762 NULL +enable_so_next_checkpoint_r5l_log_21765 next_checkpoint r5l_log 0 21765 NULL +enable_so_br_startblock_xfs_bmbt_irec_21769 br_startblock xfs_bmbt_irec 0 21769 NULL @@ -192323,6 +191928,7 @@ index 0000000..4ed1988 +enable_so_error_bio_and_error_21918 error bio_and_error 0 21918 NULL +enable_so_addr_width_snd_dmaengine_dai_dma_data_21920 addr_width snd_dmaengine_dai_dma_data 0 21920 NULL +enable_so_ceph_osdc_new_request_fndecl_21921 ceph_osdc_new_request fndecl 7 21921 NULL ++enable_so_efx_tsoh_page_count_fndecl_21922 efx_tsoh_page_count fndecl 0 21922 NULL +enable_so_membase_pm8001_hba_memspace_21924 membase pm8001_hba_memspace 0 21924 NULL +enable_so_ath6kl_sdio_bmi_read_fndecl_21930 ath6kl_sdio_bmi_read fndecl 3 21930 NULL +enable_so_error_memstick_request_21931 error memstick_request 0 21931 NULL nohasharray @@ -192532,7 +192138,8 @@ index 0000000..4ed1988 +enable_so_irq_bcma_device_22505 irq bcma_device 0 22505 NULL +enable_so_cur_rx_pos_tegra_slink_data_22510 cur_rx_pos tegra_slink_data 0 22510 NULL +enable_so_ctx_len_xfrm_sec_ctx_22511 ctx_len xfrm_sec_ctx 0 22511 NULL -+enable_so_h_mode_size_22514 h mode_size 0 22514 NULL ++enable_so_h_mode_size_22514 h mode_size 0 22514 NULL nohasharray ++enable_so_total_cnt_i40iw_pble_alloc_22514 total_cnt i40iw_pble_alloc 0 22514 &enable_so_h_mode_size_22514 +enable_so_len_bna_mem_info_22518 len bna_mem_info 0 22518 NULL +enable_so_rocker_dma_ring_bufs_alloc_fndecl_22520 rocker_dma_ring_bufs_alloc fndecl 4 22520 NULL +enable_so_ls_lvblen_dlm_ls_22525 ls_lvblen dlm_ls 0 22525 NULL @@ -192626,6 +192233,7 @@ index 0000000..4ed1988 +enable_so_tomoyo_round2_fndecl_22781 tomoyo_round2 fndecl 0 22781 NULL +enable_so_orig_video_cols_screen_info_22783 orig_video_cols screen_info 0 22783 NULL +enable_so_len_cpl_iscsi_hdr_22787 len cpl_iscsi_hdr 0 22787 NULL ++enable_so_reqsize_akcipher_alg_22792 reqsize akcipher_alg 0 22792 NULL +enable_so_h_start_saa7134_tvnorm_22798 h_start saa7134_tvnorm 0 22798 NULL +enable_so_i_next_section_block_iso_inode_info_22800 i_next_section_block iso_inode_info 0 22800 NULL nohasharray +enable_so_adapter_index_hpi_adapter_res_22800 adapter_index hpi_adapter_res 0 22800 &enable_so_i_next_section_block_iso_inode_info_22800 @@ -192675,6 +192283,7 @@ index 0000000..4ed1988 +enable_so_event_data_len_msgbuf_rx_event_22931 event_data_len msgbuf_rx_event 0 22931 NULL +enable_so_i2400m_rx_ctl_fndecl_22934 i2400m_rx_ctl fndecl 4 22934 NULL +enable_so_num_counters_ip6t_replace_22944 num_counters ip6t_replace 0 22944 NULL ++enable_so_cp210x_read_reg_block_fndecl_22947 cp210x_read_reg_block fndecl 4 22947 NULL +enable_so_i2cdev_read_fndecl_22949 i2cdev_read fndecl 3 22949 NULL +enable_so_bulk_out_usbatm_driver_22950 bulk_out usbatm_driver 0 22950 NULL +enable_so_al_stripe_size_4k_drbd_md_22954 al_stripe_size_4k drbd_md 0 22954 NULL @@ -192797,6 +192406,7 @@ index 0000000..4ed1988 +enable_so_max_send_sge_ocrdma_dev_attr_23321 max_send_sge ocrdma_dev_attr 0 23321 NULL +enable_so_tail_userio_device_23332 tail userio_device 0 23332 NULL +enable_so_naces_nfs4_acl_23334 naces nfs4_acl 0 23334 NULL ++enable_so_num_outputs_clkgena_divmux_data_23340 num_outputs clkgena_divmux_data 0 23340 NULL +enable_so_max_header_size_tsap_cb_23342 max_header_size tsap_cb 0 23342 NULL +enable_so_compat_sys_vmsplice_fndecl_23344 compat_sys_vmsplice fndecl 3 23344 NULL +enable_so_mark_block_processed_fndecl_23353 mark_block_processed fndecl 3-2 23353 NULL nohasharray @@ -192949,7 +192559,8 @@ index 0000000..4ed1988 +enable_so_skip_tx_en_setup_fndecl_23801 skip_tx_en_setup fndecl 4 23801 NULL +enable_so_nr_node_ids_vardecl_23803 nr_node_ids vardecl 0 23803 NULL nohasharray +enable_so_nvme_trans_modesel_data_fndecl_23803 nvme_trans_modesel_data fndecl 4 23803 &enable_so_nr_node_ids_vardecl_23803 -+enable_so_desc_list_len_timb_dma_desc_23804 desc_list_len timb_dma_desc 0 23804 NULL ++enable_so_desc_list_len_timb_dma_desc_23804 desc_list_len timb_dma_desc 0 23804 NULL nohasharray ++enable_so__find_next_bit_be_fndecl_23804 _find_next_bit_be fndecl 0 23804 &enable_so_desc_list_len_timb_dma_desc_23804 +enable_so_sctp_skb_pull_fndecl_23806 sctp_skb_pull fndecl 2-0 23806 NULL +enable_so_cdrom_read_cdda_bpc_fndecl_23812 cdrom_read_cdda_bpc fndecl 4 23812 NULL nohasharray +enable_so_compat_sock_setsockopt_fndecl_23812 compat_sock_setsockopt fndecl 5 23812 &enable_so_cdrom_read_cdda_bpc_fndecl_23812 @@ -193056,6 +192667,7 @@ index 0000000..4ed1988 +enable_so_pat_pagerange_is_ram_fndecl_24089 pat_pagerange_is_ram fndecl 1-2 24089 NULL +enable_so_mw_count_ntb_transport_ctx_24094 mw_count ntb_transport_ctx 0 24094 NULL nohasharray +enable_so_cfs_trace_allocate_string_buffer_fndecl_24094 cfs_trace_allocate_string_buffer fndecl 2 24094 &enable_so_mw_count_ntb_transport_ctx_24094 ++enable_so_strings_count_ffs_data_24095 strings_count ffs_data 0 24095 NULL +enable_so_irq_base_pm860x_chip_24096 irq_base pm860x_chip 0 24096 NULL +enable_so_sectors_md_rdev_24098 sectors md_rdev 0 24098 NULL +enable_so_cnt_nfp_net_rx_ring_24099 cnt nfp_net_rx_ring 0 24099 NULL @@ -193084,6 +192696,7 @@ index 0000000..4ed1988 +enable_so_segs_wa_xfer_24141 segs wa_xfer 0 24141 &enable_so_sdram_size_solo_dev_24141 nohasharray +enable_so_elem_size_v4l2_ctrl_config_24141 elem_size v4l2_ctrl_config 0 24141 &enable_so_segs_wa_xfer_24141 +enable_so_t_task_nolb_se_cmd_24142 t_task_nolb se_cmd 0 24142 NULL ++enable_so_tegra_clk_init_fndecl_24143 tegra_clk_init fndecl 3-2 24143 NULL +enable_so_len_event_data_24144 len event_data 0 24144 NULL +enable_so_fat_fat_length_fat_bios_param_block_24145 fat_fat_length fat_bios_param_block 0 24145 NULL +enable_so_d_size_lowpan_802154_cb_24147 d_size lowpan_802154_cb 0 24147 NULL @@ -193126,6 +192739,7 @@ index 0000000..4ed1988 +enable_so_move_pfn_range_left_fndecl_24256 move_pfn_range_left fndecl 3-4 24256 NULL +enable_so_ali1535_offset_vardecl_i2c_ali1535_c_24257 ali1535_offset vardecl_i2c-ali1535.c 0 24257 NULL +enable_so_in_wm8994_fll_config_24259 in wm8994_fll_config 0 24259 NULL ++enable_so_iio_storage_bytes_for_timestamp_fndecl_24260 iio_storage_bytes_for_timestamp fndecl 0 24260 NULL +enable_so_width_vpe_q_data_24262 width vpe_q_data 0 24262 NULL +enable_so_src_length_btrfs_ioctl_clone_range_args_24266 src_length btrfs_ioctl_clone_range_args 0 24266 NULL +enable_so_crtc_hblank_end_drm_display_mode_24268 crtc_hblank_end drm_display_mode 0 24268 NULL @@ -193189,6 +192803,7 @@ index 0000000..4ed1988 +enable_so_start_soundfont_sample_info_24413 start soundfont_sample_info 0 24413 NULL +enable_so_mtu_ArcProto_24415 mtu ArcProto 0 24415 NULL +enable_so_srq_entry_sz_mthca_dev_lim_24422 srq_entry_sz mthca_dev_lim 0 24422 NULL ++enable_so_srpt_cm_rej_recv_fndecl_24427 srpt_cm_rej_recv fndecl 4 24427 NULL +enable_so_ni_gpct_device_construct_fndecl_24433 ni_gpct_device_construct fndecl 5 24433 NULL +enable_so_init_cdrom_command_fndecl_24438 init_cdrom_command fndecl 3 24438 NULL nohasharray +enable_so_size_tty_buffer_24438 size tty_buffer 0 24438 &enable_so_init_cdrom_command_fndecl_24438 @@ -193235,6 +192850,7 @@ index 0000000..4ed1988 +enable_so_ocfs2_test_inode_bit_fndecl_24558 ocfs2_test_inode_bit fndecl 2 24558 NULL +enable_so_residual_count_se_cmd_24562 residual_count se_cmd 0 24562 NULL +enable_so_blksize_nbd_device_24565 blksize nbd_device 0 24565 NULL ++enable_so_ibc_queue_depth_kib_conn_24567 ibc_queue_depth kib_conn 0 24567 NULL +enable_so_ddp_set_map_fndecl_24572 ddp_set_map fndecl 4 24572 NULL +enable_so_len_mlxsw_reg_info_24575 len mlxsw_reg_info 0 24575 NULL +enable_so_blk_extent_info_24576 blk extent_info 0 24576 NULL nohasharray @@ -193267,7 +192883,8 @@ index 0000000..4ed1988 +enable_so_xsd_read_fndecl_24630 xsd_read fndecl 3 24630 NULL +enable_so_elan_i2c_read_block_fndecl_24636 elan_i2c_read_block fndecl 4 24636 NULL nohasharray +enable_so_txq_depth_bnad_24636 txq_depth bnad 0 24636 &enable_so_elan_i2c_read_block_fndecl_24636 -+enable_so_len_n_flags_il_rx_pkt_24642 len_n_flags il_rx_pkt 0 24642 NULL ++enable_so_len_n_flags_il_rx_pkt_24642 len_n_flags il_rx_pkt 0 24642 NULL nohasharray ++enable_so_desc_count_orangefs_bufmap_24642 desc_count orangefs_bufmap 0 24642 &enable_so_len_n_flags_il_rx_pkt_24642 +enable_so_agf_seqno_xfs_agf_24643 agf_seqno xfs_agf 0 24643 NULL +enable_so_data_mcp_cmd_response_24644 data mcp_cmd_response 0 24644 NULL +enable_so_array_len_xdr_array2_desc_24652 array_len xdr_array2_desc 0 24652 NULL @@ -193314,8 +192931,7 @@ index 0000000..4ed1988 +enable_so_scif_create_pinned_pages_fndecl_24761 scif_create_pinned_pages fndecl 1 24761 NULL nohasharray +enable_so_inftl_read_oob_fndecl_24761 inftl_read_oob fndecl 2-3 24761 &enable_so_scif_create_pinned_pages_fndecl_24761 +enable_so_pending_deflate_state_24766 pending deflate_state 0 24766 NULL -+enable_so_drbd_bm_total_weight_fndecl_24776 drbd_bm_total_weight fndecl 0 24776 NULL nohasharray -+enable_so_s_hdrwords_hfi1_qp_24776 s_hdrwords hfi1_qp 0 24776 &enable_so_drbd_bm_total_weight_fndecl_24776 ++enable_so_drbd_bm_total_weight_fndecl_24776 drbd_bm_total_weight fndecl 0 24776 NULL +enable_so_xlog_state_switch_iclogs_fndecl_24782 xlog_state_switch_iclogs fndecl 3 24782 NULL +enable_so__sdma_txadd_daddr_fndecl_24789 _sdma_txadd_daddr fndecl 5 24789 NULL +enable_so_gx1_read_conf_reg_fndecl_24794 gx1_read_conf_reg fndecl 0 24794 NULL nohasharray @@ -193339,6 +192955,7 @@ index 0000000..4ed1988 +enable_so_insert_state_fndecl_24820 insert_state fndecl 0-4-3 24820 NULL +enable_so_readahead_cached_dev_24826 readahead cached_dev 0 24826 NULL +enable_so_fq_codel_zalloc_fndecl_24833 fq_codel_zalloc fndecl 1 24833 NULL ++enable_so_param_size_preview_update_24836 param_size preview_update 0 24836 NULL +enable_so_alloc_fddidev_fndecl_24837 alloc_fddidev fndecl 1 24837 NULL +enable_so_cx88_alsa_dma_init_fndecl_24851 cx88_alsa_dma_init fndecl 2 24851 NULL nohasharray +enable_so_acpi_ut_create_string_object_fndecl_24851 acpi_ut_create_string_object fndecl 1 24851 &enable_so_cx88_alsa_dma_init_fndecl_24851 nohasharray @@ -193474,6 +193091,7 @@ index 0000000..4ed1988 +enable_so_do_shrink_fndecl_25198 do_shrink fndecl 3-2 25198 NULL +enable_so_backing_dev_len_disk_conf_25199 backing_dev_len disk_conf 0 25199 NULL +enable_so_size_ioc_sts_mv_dtd_25203 size_ioc_sts mv_dtd 0 25203 NULL ++enable_so_ux500_regulator_debug_init_fndecl_25207 ux500_regulator_debug_init fndecl 3 25207 NULL +enable_so___exchange_data_block_fndecl_25208 __exchange_data_block fndecl 3-2 25208 NULL +enable_so_eth_get_headlen_fndecl_25213 eth_get_headlen fndecl 0-2 25213 NULL +enable_so_ext4_insert_range_fndecl_25217 ext4_insert_range fndecl 2-3 25217 NULL @@ -193483,6 +193101,7 @@ index 0000000..4ed1988 +enable_so_show_configfs_attribute_25232 show configfs_attribute 0 25232 NULL +enable_so_spy_number_iw_spy_data_25234 spy_number iw_spy_data 0 25234 NULL +enable_so_offset_zatm_pool_info_25250 offset zatm_pool_info 0 25250 NULL ++enable_so_fpnum_omap3isp_ccdc_fpc_25254 fpnum omap3isp_ccdc_fpc 0 25254 NULL +enable_so_of_property_read_string_helper_fndecl_25257 of_property_read_string_helper fndecl 0-5 25257 NULL +enable_so_ar5523_cmd_fndecl_25261 ar5523_cmd fndecl 4 25261 NULL +enable_so_start_page_swap_extent_25262 start_page swap_extent 0 25262 NULL nohasharray @@ -193540,6 +193159,7 @@ index 0000000..4ed1988 +enable_so_memsize_t4_cq_25409 memsize t4_cq 0 25409 &enable_so_hfs_ext_build_key_fndecl_25409 +enable_so_pci_wch_ch353_setup_fndecl_25411 pci_wch_ch353_setup fndecl 4 25411 NULL nohasharray +enable_so_snd_pcm_lib_read_transfer_fndecl_25411 snd_pcm_lib_read_transfer fndecl 5 25411 &enable_so_pci_wch_ch353_setup_fndecl_25411 ++enable_so_nr_valid_peri_dma_pl330_platdata_25412 nr_valid_peri dma_pl330_platdata 0 25412 NULL +enable_so_entries_size_ebt_replace_kernel_25413 entries_size ebt_replace_kernel 0 25413 NULL +enable_so_ptlrpcd_per_cpt_max_vardecl_ptlrpcd_c_25416 ptlrpcd_per_cpt_max vardecl_ptlrpcd.c 0 25416 NULL +enable_so_image_len_gspca_dev_25419 image_len gspca_dev 0 25419 NULL @@ -193624,6 +193244,7 @@ index 0000000..4ed1988 +enable_so_pipeline_enc_tx_stat_fifo_int_read_fndecl_25675 pipeline_enc_tx_stat_fifo_int_read fndecl 3 25675 &enable_so_bnxt_change_mtu_fndecl_25675 +enable_so_tsi148_master_set_fndecl_25678 tsi148_master_set fndecl 4 25678 NULL +enable_so_layout_mdp_superblock_s_25680 layout mdp_superblock_s 0 25680 NULL ++enable_so_enumerate_cpuinfo_nodes_fndecl_25690 enumerate_cpuinfo_nodes fndecl 0 25690 NULL +enable_so_max_cmd_per_lun_vardecl_megaraid_c_25693 max_cmd_per_lun vardecl_megaraid.c 0 25693 NULL +enable_so_persistent_ram_ecc_string_fndecl_25699 persistent_ram_ecc_string fndecl 0 25699 NULL +enable_so_xh_num_buckets_ocfs2_xattr_header_25701 xh_num_buckets ocfs2_xattr_header 0 25701 NULL nohasharray @@ -193647,6 +193268,7 @@ index 0000000..4ed1988 +enable_so_raid1_resize_fndecl_25735 raid1_resize fndecl 2 25735 NULL +enable_so_res_cnt_common_sol_cqe_25739 res_cnt common_sol_cqe 0 25739 NULL +enable_so_ms_read_copyblock_fndecl_25740 ms_read_copyblock fndecl 7 25740 NULL ++enable_so_iov_iter_fault_in_multipages_readable_fndecl_25741 iov_iter_fault_in_multipages_readable fndecl 2 25741 NULL +enable_so_ext4_da_map_blocks_fndecl_25744 ext4_da_map_blocks fndecl 2 25744 NULL +enable_so_iov_iter_kvec_fndecl_25747 iov_iter_kvec fndecl 5-4 25747 NULL +enable_so_tics_vardecl_hfcpci_c_25752 tics vardecl_hfcpci.c 0 25752 NULL @@ -193702,7 +193324,8 @@ index 0000000..4ed1988 +enable_so_vram_remap_vardecl_uvesafb_c_25907 vram_remap vardecl_uvesafb.c 0 25907 NULL +enable_so_kvm_vcpu_gfn_to_hva_prot_fndecl_25911 kvm_vcpu_gfn_to_hva_prot fndecl 2 25911 NULL +enable_so_acpi_get_override_irq_fndecl_25918 acpi_get_override_irq fndecl 1 25918 NULL -+enable_so_mtd_concat_create_fndecl_25923 mtd_concat_create fndecl 2 25923 NULL ++enable_so_mtd_concat_create_fndecl_25923 mtd_concat_create fndecl 2 25923 NULL nohasharray ++enable_so_d40_pool_lli_alloc_fndecl_25923 d40_pool_lli_alloc fndecl 3 25923 &enable_so_mtd_concat_create_fndecl_25923 +enable_so_get_kcore_size_fndecl_25930 get_kcore_size fndecl 0 25930 NULL +enable_so_ioat_ring_alloc_order_vardecl_25933 ioat_ring_alloc_order vardecl 0 25933 NULL +enable_so_ircomm_tty_connect_indication_fndecl_25936 ircomm_tty_connect_indication fndecl 4-5 25936 NULL @@ -193717,6 +193340,7 @@ index 0000000..4ed1988 +enable_so_memblock_remove_range_fndecl_25969 memblock_remove_range fndecl 3-2 25969 NULL +enable_so_tx_max_out_mpt_lan_priv_25974 tx_max_out mpt_lan_priv 0 25974 NULL +enable_so_pci_ni8430_setup_fndecl_25977 pci_ni8430_setup fndecl 4 25977 NULL ++enable_so_vscnprintf_fndecl_25984 vscnprintf fndecl 0 25984 NULL +enable_so_ns_blocksize_bits_the_nilfs_25985 ns_blocksize_bits the_nilfs 0 25985 NULL +enable_so_split_state_fndecl_25992 split_state fndecl 0-4 25992 NULL +enable_so_vga_vram_size_vardecl_vgacon_c_25995 vga_vram_size vardecl_vgacon.c 0 25995 NULL @@ -193747,6 +193371,7 @@ index 0000000..4ed1988 +enable_so_skb_buf_size_vmxnet3_adapter_26088 skb_buf_size vmxnet3_adapter 0 26088 &enable_so_max_flash_timeout_lm3560_platform_data_26088 nohasharray +enable_so_protocol_sk_buff_26088 protocol sk_buff 0 26088 &enable_so_skb_buf_size_vmxnet3_adapter_26088 +enable_so_vmci_transport_set_max_buffer_size_fndecl_26089 vmci_transport_set_max_buffer_size fndecl 2 26089 NULL ++enable_so_num_vectors_i40e_qvlist_info_26091 num_vectors i40e_qvlist_info 0 26091 NULL +enable_so_idmap_pipe_downcall_fndecl_26092 idmap_pipe_downcall fndecl 3 26092 NULL +enable_so___clear_extent_bit_fndecl_26097 __clear_extent_bit fndecl 2-3 26097 NULL nohasharray +enable_so_rds_ib_ring_resize_fndecl_26097 rds_ib_ring_resize fndecl 2 26097 &enable_so___clear_extent_bit_fndecl_26097 @@ -193757,6 +193382,7 @@ index 0000000..4ed1988 +enable_so_maxflows_sfq_sched_data_26122 maxflows sfq_sched_data 0 26122 NULL +enable_so_snd_fw_async_midi_port_init_fndecl_26127 snd_fw_async_midi_port_init fndecl 4 26127 NULL +enable_so_nf_nat_sdp_session_fndecl_26130 nf_nat_sdp_session fndecl 2 26130 NULL ++enable_so_plane_mode_nvm_dev_26134 plane_mode nvm_dev 0 26134 NULL +enable_so_ipwireless_ppp_mru_fndecl_26146 ipwireless_ppp_mru fndecl 0 26146 NULL +enable_so_size_cyttsp4_tch_rec_params_26150 size cyttsp4_tch_rec_params 0 26150 NULL +enable_so_translate_compat_table_fndecl_26151 translate_compat_table fndecl 6 26151 NULL @@ -193779,6 +193405,7 @@ index 0000000..4ed1988 +enable_so_SYSC_setdomainname_fndecl_26207 SYSC_setdomainname fndecl 2 26207 NULL +enable_so_data_len_kernel_ipmi_msg_26209 data_len kernel_ipmi_msg 0 26209 NULL nohasharray +enable_so_bfad_debugfs_write_regrd_fndecl_26209 bfad_debugfs_write_regrd fndecl 3 26209 &enable_so_data_len_kernel_ipmi_msg_26209 ++enable_so_i40iw_allocate_virt_mem_fndecl_26210 i40iw_allocate_virt_mem fndecl 3 26210 NULL +enable_so_s_log_zone_size_isofs_sb_info_26211 s_log_zone_size isofs_sb_info 0 26211 NULL +enable_so_clone_range_fndecl_26212 clone_range fndecl 6-5 26212 NULL +enable_so_dev_cnt_usnic_uiom_pd_26213 dev_cnt usnic_uiom_pd 0 26213 NULL @@ -193811,6 +193438,7 @@ index 0000000..4ed1988 +enable_so_sc_max_sge_svcxprt_rdma_26292 sc_max_sge svcxprt_rdma 0 26292 &enable_so_hub_port_connect_fndecl_26292 +enable_so_members_count_dlm_space_26293 members_count dlm_space 0 26293 NULL +enable_so_devm_gen_pool_create_fndecl_26295 devm_gen_pool_create fndecl 2 26295 NULL ++enable_so_count_rio_transaction_26296 count rio_transaction 0 26296 NULL +enable_so_xskip_mt9t031_26297 xskip mt9t031 0 26297 NULL +enable_so_xhci_common_hub_descriptor_fndecl_26304 xhci_common_hub_descriptor fndecl 3 26304 NULL nohasharray +enable_so_model_data_size_oxygen_model_26304 model_data_size oxygen_model 0 26304 &enable_so_xhci_common_hub_descriptor_fndecl_26304 @@ -193849,7 +193477,8 @@ index 0000000..4ed1988 +enable_so_transcnt_elsa_hw_26395 transcnt elsa_hw 0 26395 NULL +enable_so_get_user_cpu_mask_fndecl_26398 get_user_cpu_mask fndecl 2 26398 NULL +enable_so_convert_ctx_access_bpf_verifier_ops_26399 convert_ctx_access bpf_verifier_ops 0 26399 NULL -+enable_so_ea_init_fndecl_26400 ea_init fndecl 5 26400 NULL ++enable_so_ea_init_fndecl_26400 ea_init fndecl 5 26400 NULL nohasharray ++enable_so_omap_hwmod_count_resources_fndecl_26400 omap_hwmod_count_resources fndecl 0 26400 &enable_so_ea_init_fndecl_26400 +enable_so_gbuffers_vardecl_meye_c_26402 gbuffers vardecl_meye.c 0 26402 NULL +enable_so_xhci_giveback_urb_in_irq_fndecl_26403 xhci_giveback_urb_in_irq fndecl 3 26403 NULL nohasharray +enable_so_bad_peb_limit_ubi_device_26403 bad_peb_limit ubi_device 0 26403 &enable_so_xhci_giveback_urb_in_irq_fndecl_26403 @@ -193984,6 +193613,7 @@ index 0000000..4ed1988 +enable_so_fw_iso_buffer_alloc_fndecl_26779 fw_iso_buffer_alloc fndecl 2 26779 &enable_so_hb_size_hashbin_t_26779 +enable_so___perf_event_read_size_fndecl_26786 __perf_event_read_size fndecl 2 26786 NULL +enable_so_audit_unpack_string_fndecl_26791 audit_unpack_string fndecl 3 26791 NULL ++enable_so_iio_storage_bytes_for_si_fndecl_26798 iio_storage_bytes_for_si fndecl 0 26798 NULL +enable_so_max_support_points_edt_ft5x06_ts_data_26799 max_support_points edt_ft5x06_ts_data 0 26799 NULL +enable_so_ocfs2_cache_block_dealloc_fndecl_26800 ocfs2_cache_block_dealloc fndecl 6-5-4 26800 NULL +enable_so_width_v4l2_rect_26802 width v4l2_rect 0 26802 NULL nohasharray @@ -194030,6 +193660,7 @@ index 0000000..4ed1988 +enable_so_num_slots_rtsx_pcr_26914 num_slots rtsx_pcr 0 26914 NULL +enable_so_hscx_empty_fifo_fndecl_26915 hscx_empty_fifo fndecl 2 26915 NULL nohasharray +enable_so_jffs2_flash_writev_fndecl_26915 jffs2_flash_writev fndecl 4 26915 &enable_so_hscx_empty_fifo_fndecl_26915 ++enable_so_edma_prep_slave_sg_fndecl_26917 edma_prep_slave_sg fndecl 3 26917 NULL +enable_so_get_wep_key_fndecl_26919 get_wep_key fndecl 0-4 26919 NULL nohasharray +enable_so_cache_ctr_fndecl_26919 cache_ctr fndecl 2 26919 &enable_so_get_wep_key_fndecl_26919 +enable_so_amdgpu_bo_create_restricted_fndecl_26920 amdgpu_bo_create_restricted fndecl 2 26920 NULL @@ -194065,6 +193696,7 @@ index 0000000..4ed1988 +enable_so_brk_mm_struct_26976 brk mm_struct 0 26976 NULL nohasharray +enable_so_init_allocator_fndecl_26976 init_allocator fndecl 3 26976 &enable_so_brk_mm_struct_26976 +enable_so_ctrl_out_pipe_hfcusb_data_26981 ctrl_out_pipe hfcusb_data 0 26981 NULL ++enable_so_num_waitchks_drm_tegra_submit_26983 num_waitchks drm_tegra_submit 0 26983 NULL +enable_so_skd_skreq_prep_buffering_fndecl_26987 skd_skreq_prep_buffering fndecl 3 26987 NULL +enable_so___tipc_send_stream_fndecl_26990 __tipc_send_stream fndecl 3 26990 NULL nohasharray +enable_so_smb_sendv_fndecl_26990 smb_sendv fndecl 3 26990 &enable_so___tipc_send_stream_fndecl_26990 @@ -194125,6 +193757,7 @@ index 0000000..4ed1988 +enable_so_rxkad_sg_set_buf2_fndecl_27140 rxkad_sg_set_buf2 fndecl 3 27140 NULL +enable_so_rx_ps_bsize0_e1000_adapter_27144 rx_ps_bsize0 e1000_adapter 0 27144 NULL +enable_so_compat_sys_pselect6_fndecl_27146 compat_sys_pselect6 fndecl 1 27146 NULL ++enable_so_p9_client_prepare_req_fndecl_27150 p9_client_prepare_req fndecl 3 27150 NULL +enable_so_nilfs_attach_checkpoint_fndecl_27152 nilfs_attach_checkpoint fndecl 2 27152 NULL +enable_so__nfs4_proc_readdir_fndecl_27153 _nfs4_proc_readdir fndecl 5 27153 NULL +enable_so_dgram_recvmsg_fndecl_27155 dgram_recvmsg fndecl 3 27155 NULL @@ -194145,6 +193778,7 @@ index 0000000..4ed1988 +enable_so_ath6kl_wmi_scanparams_cmd_fndecl_27208 ath6kl_wmi_scanparams_cmd fndecl 2 27208 NULL nohasharray +enable_so_cfs_hash_rehash_bits_fndecl_27208 cfs_hash_rehash_bits fndecl 0 27208 &enable_so_ath6kl_wmi_scanparams_cmd_fndecl_27208 +enable_so___ext4_read_dirblock_fndecl_27210 __ext4_read_dirblock fndecl 2 27210 NULL ++enable_so_nr_bos_drm_etnaviv_gem_submit_27211 nr_bos drm_etnaviv_gem_submit 0 27211 NULL +enable_so_block_size_scsi_tape_27212 block_size scsi_tape 0 27212 NULL +enable_so_num_prior_parent_snaps_ceph_mds_snap_realm_27215 num_prior_parent_snaps ceph_mds_snap_realm 0 27215 NULL +enable_so_sdio_memcpy_fromio_fndecl_27218 sdio_memcpy_fromio fndecl 4 27218 NULL @@ -194196,7 +193830,8 @@ index 0000000..4ed1988 +enable_so_offset_gtt_range_27356 offset gtt_range 0 27356 &enable_so_pix_format_set_size_fndecl_27356 +enable_so_static_data_priv_len_wl1271_27357 static_data_priv_len wl1271 0 27357 NULL +enable_so_n_mcgrps_genl_family_27362 n_mcgrps genl_family 0 27362 NULL -+enable_so_find_new_extents_fndecl_27368 find_new_extents fndecl 5 27368 NULL ++enable_so_find_new_extents_fndecl_27368 find_new_extents fndecl 5 27368 NULL nohasharray ++enable_so_ext_tree_layoutupdate_size_fndecl_27368 ext_tree_layoutupdate_size fndecl 0-2 27368 &enable_so_find_new_extents_fndecl_27368 +enable_so_channels_pda_pa_curve_data_27369 channels pda_pa_curve_data 0 27369 NULL +enable_so_btrfs_add_delayed_tree_ref_fndecl_27370 btrfs_add_delayed_tree_ref fndecl 3 27370 NULL +enable_so_num_altsetting_usb_interface_27371 num_altsetting usb_interface 0 27371 NULL @@ -194221,6 +193856,7 @@ index 0000000..4ed1988 +enable_so_produce_size_vmci_qp_alloc_info_vmvm_27440 produce_size vmci_qp_alloc_info_vmvm 0 27440 NULL +enable_so_radeon_vm_block_size_vardecl_27445 radeon_vm_block_size vardecl 0 27445 NULL +enable_so_lpfc_sriov_nr_virtfn_vardecl_lpfc_attr_c_27446 lpfc_sriov_nr_virtfn vardecl_lpfc_attr.c 0 27446 NULL ++enable_so_max_packages_vardecl_uncore_c_27449 max_packages vardecl_uncore.c 0 27449 NULL +enable_so_dm_table_get_num_targets_fndecl_27451 dm_table_get_num_targets fndecl 0 27451 NULL +enable_so_compat_ip_setsockopt_fndecl_27453 compat_ip_setsockopt fndecl 5 27453 NULL +enable_so_set_offset_v2_k_type_fndecl_27455 set_offset_v2_k_type fndecl 2 27455 NULL @@ -194259,6 +193895,7 @@ index 0000000..4ed1988 +enable_so_onenand_mlc_read_ops_nolock_fndecl_27542 onenand_mlc_read_ops_nolock fndecl 2 27542 &enable_so_max_mem_ttm_mem_zone_27542 +enable_so_snd_pcm_plug_slave_size_fndecl_27548 snd_pcm_plug_slave_size fndecl 0-2 27548 NULL +enable_so_remap_and_issue_fndecl_27555 remap_and_issue fndecl 3 27555 NULL ++enable_so_total_cpus_vardecl_27560 total_cpus vardecl 0 27560 NULL +enable_so_svc_rdma_xdr_encode_array_chunk_fndecl_27563 svc_rdma_xdr_encode_array_chunk fndecl 5 27563 NULL +enable_so_pipe_in_rtl8xxxu_priv_27564 pipe_in rtl8xxxu_priv 0 27564 NULL +enable_so_sddr09_write_data_fndecl_27565 sddr09_write_data fndecl 3-2 27565 NULL @@ -194475,6 +194112,7 @@ index 0000000..4ed1988 +enable_so_blk_update_request_fndecl_28233 blk_update_request fndecl 3-2 28233 NULL +enable_so_mux_device_request_fndecl_28235 mux_device_request fndecl 7 28235 NULL nohasharray +enable_so_l2cap_mtu_vardecl_core_c_28235 l2cap_mtu vardecl_core.c 0 28235 &enable_so_mux_device_request_fndecl_28235 ++enable_so_bits_mpidr_hash_28236 bits mpidr_hash 0 28236 NULL +enable_so_loop_end_patch_info_28242 loop_end patch_info 0 28242 NULL +enable_so_ino_bfs_dirent_28246 ino bfs_dirent 0 28246 NULL nohasharray +enable_so_btrfs_qgroup_free_data_fndecl_28246 btrfs_qgroup_free_data fndecl 2-3 28246 &enable_so_ino_bfs_dirent_28246 @@ -194490,6 +194128,7 @@ index 0000000..4ed1988 +enable_so_mt7601u_rx_process_seg_fndecl_28268 mt7601u_rx_process_seg fndecl 3 28268 NULL +enable_so_needed_headroom_net_device_28272 needed_headroom net_device 0 28272 NULL +enable_so_rxbufsize_dma_info_28275 rxbufsize dma_info 0 28275 NULL ++enable_so_pbdma_nr_gk104_fifo_28278 pbdma_nr gk104_fifo 0 28278 NULL +enable_so_mtu_tipc_bearer_28279 mtu tipc_bearer 0 28279 NULL +enable_so_pio2k_bufbase_qib_devdata_28282 pio2k_bufbase qib_devdata 0 28282 NULL nohasharray +enable_so_buf_start_hi_rx_buf_desc_28282 buf_start_hi rx_buf_desc 0 28282 &enable_so_pio2k_bufbase_qib_devdata_28282 nohasharray @@ -194517,6 +194156,7 @@ index 0000000..4ed1988 +enable_so_c4iw_reg_user_mr_fndecl_28358 c4iw_reg_user_mr fndecl 2-3 28358 &enable_so_j_blocksize_journal_s_28358 +enable_so_pmcraid_notify_aen_fndecl_28361 pmcraid_notify_aen fndecl 3 28361 NULL +enable_so_carl9170_rx_fndecl_28363 carl9170_rx fndecl 3 28363 NULL ++enable_so_dma_lch_count_vardecl_dma_c_28369 dma_lch_count vardecl_dma.c 0 28369 NULL +enable_so_kvm_lapic_enable_pv_eoi_fndecl_28370 kvm_lapic_enable_pv_eoi fndecl 2 28370 NULL +enable_so_snd_emu10k1_fx8010_tram_setup_fndecl_28371 snd_emu10k1_fx8010_tram_setup fndecl 2 28371 NULL +enable_so_hostap_80211_get_hdrlen_fndecl_28372 hostap_80211_get_hdrlen fndecl 0 28372 NULL nohasharray @@ -194594,6 +194234,7 @@ index 0000000..4ed1988 +enable_so_ufx_i2c_wait_busy_fndecl_28574 ufx_i2c_wait_busy fndecl 0 28574 &enable_so_out_max_chans_snd_card_asihpi_28574 +enable_so_charcount_console_font_op_28585 charcount console_font_op 0 28585 NULL +enable_so_uhci_map_status_fndecl_28591 uhci_map_status fndecl 0 28591 NULL ++enable_so_tmc_read_fndecl_28597 tmc_read fndecl 3 28597 NULL +enable_so_icsk_pmtu_cookie_inet_connection_sock_28598 icsk_pmtu_cookie inet_connection_sock 0 28598 NULL +enable_so_n_devs_pci_id_table_28599 n_devs pci_id_table 0 28599 NULL nohasharray +enable_so_menu_count_uvc_xu_control_mapping_28599 menu_count uvc_xu_control_mapping 0 28599 &enable_so_n_devs_pci_id_table_28599 nohasharray @@ -194640,7 +194281,8 @@ index 0000000..4ed1988 +enable_so_getexposure_fndecl_28720 getexposure fndecl 0 28720 NULL nohasharray +enable_so_radix_tree_extend_fndecl_28720 radix_tree_extend fndecl 0 28720 &enable_so_getexposure_fndecl_28720 +enable_so_xfs_rtcheck_alloc_range_fndecl_28722 xfs_rtcheck_alloc_range fndecl 3 28722 NULL -+enable_so_note_last_dentry_fndecl_28724 note_last_dentry fndecl 4-3 28724 NULL ++enable_so_note_last_dentry_fndecl_28724 note_last_dentry fndecl 4-3 28724 NULL nohasharray ++enable_so_d40_prep_memcpy_fndecl_28724 d40_prep_memcpy fndecl 4 28724 &enable_so_note_last_dentry_fndecl_28724 +enable_so_skb_cow_data_fndecl_28734 skb_cow_data fndecl 0 28734 NULL +enable_so_num_pports_qib_devdata_28736 num_pports qib_devdata 0 28736 NULL +enable_so_size_mspro_sys_attr_28742 size mspro_sys_attr 0 28742 NULL @@ -194731,12 +194373,14 @@ index 0000000..4ed1988 +enable_so_sb_dmap_hpfs_sb_info_29020 sb_dmap hpfs_sb_info 0 29020 NULL +enable_so_j_len_reiserfs_journal_list_29021 j_len reiserfs_journal_list 0 29021 NULL +enable_so___spi_queued_transfer_fndecl_29024 __spi_queued_transfer fndecl 0 29024 NULL ++enable_so_max_physical_pkg_id_vardecl_smpboot_c_29028 max_physical_pkg_id vardecl_smpboot.c 0 29028 NULL +enable_so_nft_value_dump_fndecl_29030 nft_value_dump fndecl 3 29030 NULL nohasharray +enable_so_tcf_register_action_fndecl_29030 tcf_register_action fndecl 2 29030 &enable_so_nft_value_dump_fndecl_29030 +enable_so_at24_read_fndecl_29031 at24_read fndecl 4 29031 NULL +enable_so_drm_vblank_init_fndecl_29041 drm_vblank_init fndecl 2 29041 NULL +enable_so_of_get_available_child_count_fndecl_29042 of_get_available_child_count fndecl 0 29042 NULL +enable_so_batadv_skb_head_push_fndecl_29043 batadv_skb_head_push fndecl 2 29043 NULL ++enable_so_scsi_debug_unmap_max_desc_vardecl_scsi_debug_c_29046 scsi_debug_unmap_max_desc vardecl_scsi_debug.c 0 29046 NULL +enable_so_memory_size_kvm_userspace_memory_region_29047 memory_size kvm_userspace_memory_region 0 29047 NULL +enable_so_qib_get_base_info_fndecl_29050 qib_get_base_info fndecl 3 29050 NULL +enable_so_scsi_debug_max_queue_vardecl_scsi_debug_c_29056 scsi_debug_max_queue vardecl_scsi_debug.c 0 29056 NULL nohasharray @@ -194755,13 +194399,16 @@ index 0000000..4ed1988 +enable_so_remote_qpn_mlx4_qp_context_29102 remote_qpn mlx4_qp_context 0 29102 NULL +enable_so_dlm_lowcomms_get_buffer_fndecl_29111 dlm_lowcomms_get_buffer fndecl 2 29111 NULL +enable_so_bttv_read_fndecl_29115 bttv_read fndecl 3 29115 NULL ++enable_so_ablkcipher_edesc_alloc_fndecl_29119 ablkcipher_edesc_alloc fndecl 2 29119 NULL ++enable_so_size_tmc_drvdata_29121 size tmc_drvdata 0 29121 NULL +enable_so_jfs_iget_fndecl_29122 jfs_iget fndecl 2 29122 NULL +enable_so_pci_set_power_state_fndecl_29124 pci_set_power_state fndecl 0 29124 NULL nohasharray +enable_so_sca3000_read_first_n_hw_rb_fndecl_29124 sca3000_read_first_n_hw_rb fndecl 2 29124 &enable_so_pci_set_power_state_fndecl_29124 +enable_so_ioctl_code_usbdevfs_ioctl_29134 ioctl_code usbdevfs_ioctl 0 29134 NULL +enable_so_max_dump_cnt_ramoops_context_29141 max_dump_cnt ramoops_context 0 29141 NULL +enable_so_pci_pericom_setup_fndecl_29142 pci_pericom_setup fndecl 4 29142 NULL -+enable_so_y1_virtio_gpu_framebuffer_29147 y1 virtio_gpu_framebuffer 0 29147 NULL ++enable_so_y1_virtio_gpu_framebuffer_29147 y1 virtio_gpu_framebuffer 0 29147 NULL nohasharray ++enable_so_sys_oabi_ipc_fndecl_29147 sys_oabi_ipc fndecl 3 29147 &enable_so_y1_virtio_gpu_framebuffer_29147 +enable_so_send_bulk_pipe_us_data_29148 send_bulk_pipe us_data 0 29148 NULL +enable_so_hidp_sock_create_fndecl_29151 hidp_sock_create fndecl 3 29151 NULL +enable_so_width_usbtv_29152 width usbtv 0 29152 NULL @@ -194821,13 +194468,15 @@ index 0000000..4ed1988 +enable_so_vmw_fifo_reserve_fndecl_29310 vmw_fifo_reserve fndecl 2 29310 NULL +enable_so_soc_mbus_image_size_fndecl_29311 soc_mbus_image_size fndecl 0-3-2 29311 NULL +enable_so_ddp_make_gl_fndecl_29312 ddp_make_gl fndecl 1 29312 NULL ++enable_so_LNetEQAlloc_fndecl_29313 LNetEQAlloc fndecl 1 29313 NULL +enable_so_fnic_reset_stats_write_fndecl_29314 fnic_reset_stats_write fndecl 3 29314 NULL +enable_so_num_msix_roce_vec_be_adapter_29319 num_msix_roce_vec be_adapter 0 29319 NULL +enable_so_ip_generic_getfrag_fndecl_29320 ip_generic_getfrag fndecl 4 29320 NULL +enable_so_compat_do_arpt_set_ctl_fndecl_29323 compat_do_arpt_set_ctl fndecl 4 29323 NULL +enable_so_gather_pte_stats_fndecl_29329 gather_pte_stats fndecl 2 29329 NULL +enable_so_scan_map_fndecl_29331 scan_map fndecl 0 29331 NULL -+enable_so_num_sge_ib_recv_wr_29333 num_sge ib_recv_wr 0 29333 NULL ++enable_so_num_sge_ib_recv_wr_29333 num_sge ib_recv_wr 0 29333 NULL nohasharray ++enable_so_total_size_orangefs_bufmap_29333 total_size orangefs_bufmap 0 29333 &enable_so_num_sge_ib_recv_wr_29333 +enable_so_n_reg_rules_ieee80211_regdomain_29334 n_reg_rules ieee80211_regdomain 0 29334 NULL +enable_so_y_res_vbe_mode_ib_29340 y_res vbe_mode_ib 0 29340 NULL +enable_so_sctp_icmp_frag_needed_fndecl_29342 sctp_icmp_frag_needed fndecl 4 29342 NULL @@ -194998,6 +194647,7 @@ index 0000000..4ed1988 +enable_so_data_in_res_cnt_srp_rsp_29904 data_in_res_cnt srp_rsp 0 29904 NULL +enable_so_edge_write_fndecl_29911 edge_write fndecl 4 29911 NULL +enable_so_io_error_dio_29914 io_error dio 0 29914 NULL ++enable_so_size_exynos_drm_gem_29915 size exynos_drm_gem 0 29915 NULL +enable_so_fw_imem_len_rt_firmware_29916 fw_imem_len rt_firmware 0 29916 NULL nohasharray +enable_so_PageLength__CONFIG_PAGE_HEADER_29916 PageLength _CONFIG_PAGE_HEADER 0 29916 &enable_so_fw_imem_len_rt_firmware_29916 +enable_so_base_sock_create_fndecl_29918 base_sock_create fndecl 3 29918 NULL @@ -195040,6 +194690,7 @@ index 0000000..4ed1988 +enable_so_period_em28xx_audio_30017 period em28xx_audio 0 30017 NULL +enable_so_send_hole_fndecl_30019 send_hole fndecl 2 30019 NULL nohasharray +enable_so_read_file_spectral_count_fndecl_30019 read_file_spectral_count fndecl 3 30019 &enable_so_send_hole_fndecl_30019 ++enable_so_mlx5e_setup_tc_fndecl_30023 mlx5e_setup_tc fndecl 2 30023 NULL +enable_so_netlbl_catmap_setbit_fndecl_30024 netlbl_catmap_setbit fndecl 2 30024 NULL +enable_so_read_emulate_fndecl_30037 read_emulate fndecl 2-4 30037 NULL nohasharray +enable_so_max_wqes_mthca_limits_30037 max_wqes mthca_limits 0 30037 &enable_so_read_emulate_fndecl_30037 @@ -195122,6 +194773,7 @@ index 0000000..4ed1988 +enable_so_tda665x_write_fndecl_30269 tda665x_write fndecl 3 30269 NULL +enable_so_minor_count_vardecl_30272 minor_count vardecl 0 30272 NULL +enable_so_data_size_netup_dma_30274 data_size netup_dma 0 30274 NULL ++enable_so_amdgpu_job_alloc_fndecl_30277 amdgpu_job_alloc fndecl 2 30277 NULL +enable_so_blockshift_alauda_media_info_30287 blockshift alauda_media_info 0 30287 NULL +enable_so_xfs_collapse_file_space_fndecl_30288 xfs_collapse_file_space fndecl 2-3 30288 NULL +enable_so_blk_queue_dma_drain_fndecl_30290 blk_queue_dma_drain fndecl 4 30290 NULL @@ -195160,6 +194812,7 @@ index 0000000..4ed1988 +enable_so_dbgp_control_msg_fndecl_30405 dbgp_control_msg fndecl 7 30405 NULL +enable_so_nvec_used_msi_desc_30409 nvec_used msi_desc 0 30409 NULL +enable_so_hwm_tx_init_fndecl_30411 hwm_tx_init fndecl 4 30411 NULL ++enable_so_get_pages_vram_fndecl_30416 get_pages_vram fndecl 2 30416 NULL +enable_so_decode_opaque_fixed_fndecl_30421 decode_opaque_fixed fndecl 3 30421 NULL +enable_so_width_bttv_fh_30432 width bttv_fh 0 30432 NULL +enable_so_bytes_committed_mlx5_pagefault_30434 bytes_committed mlx5_pagefault 0 30434 NULL @@ -195271,6 +194924,7 @@ index 0000000..4ed1988 +enable_so_command_setvloffset_fndecl_30761 command_setvloffset fndecl 0 30761 NULL nohasharray +enable_so_n_scan_channels_iwl_ucode_capabilities_30761 n_scan_channels iwl_ucode_capabilities 0 30761 &enable_so_command_setvloffset_fndecl_30761 +enable_so_lp_write_fndecl_30772 lp_write fndecl 3 30772 NULL ++enable_so_count_tid_pageset_30773 count tid_pageset 0 30773 NULL +enable_so_ocrdma_alloc_mr_fndecl_30774 ocrdma_alloc_mr fndecl 3 30774 NULL +enable_so_leb_size_ubifs_info_30775 leb_size ubifs_info 0 30775 NULL +enable_so_nzones_high_adfs_discrecord_30776 nzones_high adfs_discrecord 0 30776 NULL @@ -195381,7 +195035,8 @@ index 0000000..4ed1988 +enable_so_tcf_csum_ipv4_icmp_fndecl_31033 tcf_csum_ipv4_icmp fndecl 3 31033 NULL +enable_so_ocfs2_clear_ext_refcount_fndecl_31035 ocfs2_clear_ext_refcount fndecl 4-3 31035 NULL nohasharray +enable_so_internal_depth_MPT3SAS_ADAPTER_31035 internal_depth MPT3SAS_ADAPTER 0 31035 &enable_so_ocfs2_clear_ext_refcount_fndecl_31035 -+enable_so_hfsplus_bnode_read_u16_fndecl_31037 hfsplus_bnode_read_u16 fndecl 0 31037 NULL ++enable_so_hfsplus_bnode_read_u16_fndecl_31037 hfsplus_bnode_read_u16 fndecl 0 31037 NULL nohasharray ++enable_so_hisi_clk_init_fndecl_31037 hisi_clk_init fndecl 2 31037 &enable_so_hfsplus_bnode_read_u16_fndecl_31037 +enable_so_krb5_nfold_fndecl_31038 krb5_nfold fndecl 3-1 31038 NULL +enable_so_migrate_misplaced_transhuge_page_fndecl_31041 migrate_misplaced_transhuge_page fndecl 5 31041 NULL +enable_so_qla82xx_pci_set_window_fndecl_31044 qla82xx_pci_set_window fndecl 0-2 31044 NULL @@ -195389,6 +195044,7 @@ index 0000000..4ed1988 +enable_so_capset_max_size_virtio_gpu_resp_capset_info_31049 capset_max_size virtio_gpu_resp_capset_info 0 31049 NULL +enable_so_valueblk_xfs_attr_leaf_name_remote_31051 valueblk xfs_attr_leaf_name_remote 0 31051 NULL +enable_so_ceph_sync_setxattr_fndecl_31053 ceph_sync_setxattr fndecl 4 31053 NULL ++enable_so_samsung_clk_alloc_reg_dump_fndecl_31054 samsung_clk_alloc_reg_dump fndecl 2 31054 NULL +enable_so_nr_bytes_scif_rma_req_31055 nr_bytes scif_rma_req 0 31055 NULL +enable_so_pci_sriov_get_totalvfs_fndecl_31059 pci_sriov_get_totalvfs fndecl 0 31059 NULL nohasharray +enable_so_t4_max_qp_depth_c4iw_hw_queue_31059 t4_max_qp_depth c4iw_hw_queue 0 31059 &enable_so_pci_sriov_get_totalvfs_fndecl_31059 @@ -195660,6 +195316,7 @@ index 0000000..4ed1988 +enable_so_gseg_gru_set_context_option_req_31876 gseg gru_set_context_option_req 0 31876 NULL +enable_so_i_lastfrag_ufs_inode_info_31879 i_lastfrag ufs_inode_info 0 31879 NULL +enable_so_sctp_user_addto_chunk_fndecl_31881 sctp_user_addto_chunk fndecl 2 31881 NULL ++enable_so_s_hdrwords_rvt_qp_31882 s_hdrwords rvt_qp 0 31882 NULL +enable_so_reallocate_resource_fndecl_31885 reallocate_resource fndecl 3 31885 NULL +enable_so_first_user_ctxt_qib_devdata_31889 first_user_ctxt qib_devdata 0 31889 NULL +enable_so_max_tasks_bnx2fc_hba_31893 max_tasks bnx2fc_hba 0 31893 NULL @@ -195769,6 +195426,7 @@ index 0000000..4ed1988 +enable_so_s_system_dir_blkno_ocfs2_super_block_32196 s_system_dir_blkno ocfs2_super_block 0 32196 NULL +enable_so_smk_write_change_rule_fndecl_32200 smk_write_change_rule fndecl 3 32200 NULL +enable_so_ioat_alloc_ring_fndecl_32201 ioat_alloc_ring fndecl 2 32201 NULL ++enable_so_nr_spis_v2m_data_32203 nr_spis v2m_data 0 32203 NULL +enable_so_nr_registers_ioapic_32204 nr_registers ioapic 0 32204 NULL +enable_so_len_bnep_ext_hdr_32205 len bnep_ext_hdr 0 32205 NULL +enable_so_dma_buf_size_tegra_slink_data_32206 dma_buf_size tegra_slink_data 0 32206 NULL @@ -195815,6 +195473,7 @@ index 0000000..4ed1988 +enable_so_datablock_size_btrfsic_state_32333 datablock_size btrfsic_state 0 32333 &enable_so_bochs_ttm_tt_create_fndecl_32333 +enable_so_mem_start_net_device_32337 mem_start net_device 0 32337 NULL +enable_so_fd_ioctl_fndecl_32343 fd_ioctl fndecl 3 32343 NULL ++enable_so_exynos_drm_gem_create_fndecl_32344 exynos_drm_gem_create fndecl 3 32344 NULL +enable_so_fib_info_hash_alloc_fndecl_32352 fib_info_hash_alloc fndecl 1 32352 NULL +enable_so_scrub_raid56_parity_fndecl_32354 scrub_raid56_parity fndecl 5 32354 NULL nohasharray +enable_so_brcmf_fws_hdrpull_fndecl_32354 brcmf_fws_hdrpull fndecl 2 32354 &enable_so_scrub_raid56_parity_fndecl_32354 @@ -196078,7 +195737,8 @@ index 0000000..4ed1988 +enable_so_ari_length_ib_cm_rej_event_param_33127 ari_length ib_cm_rej_event_param 0 33127 &enable_so_max_resp_sz_nfs4_channel_attrs_33127 +enable_so_masklength_iio_dev_33129 masklength iio_dev 0 33129 NULL +enable_so_hvutil_transport_send_fndecl_33131 hvutil_transport_send fndecl 3 33131 NULL nohasharray -+enable_so_readrids_fndecl_33131 readrids fndecl 0 33131 &enable_so_hvutil_transport_send_fndecl_33131 ++enable_so_readrids_fndecl_33131 readrids fndecl 0 33131 &enable_so_hvutil_transport_send_fndecl_33131 nohasharray ++enable_so_ib_uverbs_alloc_mw_fndecl_33131 ib_uverbs_alloc_mw fndecl 4 33131 &enable_so_readrids_fndecl_33131 +enable_so_trebleinit_CHIPDESC_33133 trebleinit CHIPDESC 0 33133 NULL +enable_so_in_words_ib_uverbs_cmd_hdr_33134 in_words ib_uverbs_cmd_hdr 0 33134 NULL +enable_so_store_msg_fndecl_33138 store_msg fndecl 3 33138 NULL @@ -196120,6 +195780,7 @@ index 0000000..4ed1988 +enable_so_mfs_fc_lport_33249 mfs fc_lport 0 33249 NULL +enable_so_alloc_apertures_fndecl_33250 alloc_apertures fndecl 1 33250 NULL +enable_so_metadata_size_ecryptfs_crypt_stat_33252 metadata_size ecryptfs_crypt_stat 0 33252 NULL ++enable_so_size_reserved_mem_33254 size reserved_mem 0 33254 NULL +enable_so_wb_offset_nfs_page_33255 wb_offset nfs_page 0 33255 NULL +enable_so_handle_bytes_file_handle_33261 handle_bytes file_handle 0 33261 NULL +enable_so_mem_size_ramoops_platform_data_33263 mem_size ramoops_platform_data 0 33263 NULL @@ -196135,6 +195796,7 @@ index 0000000..4ed1988 +enable_so_cipso_v4_gentag_loc_fndecl_33292 cipso_v4_gentag_loc fndecl 0 33292 NULL nohasharray +enable_so_frame_size_camera_data_33292 frame_size camera_data 0 33292 &enable_so_cipso_v4_gentag_loc_fndecl_33292 +enable_so_port_mlx4_ib_qp_33295 port mlx4_ib_qp 0 33295 NULL ++enable_so_ecryptfs_encrypt_and_encode_filename_fndecl_33297 ecryptfs_encrypt_and_encode_filename fndecl 5 33297 NULL +enable_so_num_vls_vardecl_33298 num_vls vardecl 0 33298 NULL +enable_so_vlen_nfsd_readargs_33302 vlen nfsd_readargs 0 33302 NULL +enable_so_e_phnum_elf64_hdr_33305 e_phnum elf64_hdr 0 33305 NULL @@ -196162,6 +195824,7 @@ index 0000000..4ed1988 +enable_so_join_req_size_vardecl_33387 join_req_size vardecl 0 33387 NULL nohasharray +enable_so_xfs_map_direct_fndecl_33387 xfs_map_direct fndecl 4 33387 &enable_so_join_req_size_vardecl_33387 +enable_so_length_mac_configuration_hdr_33392 length mac_configuration_hdr 0 33392 NULL ++enable_so_stream_size_drm_etnaviv_gem_submit_33393 stream_size drm_etnaviv_gem_submit 0 33393 NULL +enable_so_sys_poll_fndecl_33397 sys_poll fndecl 2 33397 NULL +enable_so_data_offset_rndis_packet_33403 data_offset rndis_packet 0 33403 NULL +enable_so_drbg_blocklen_fndecl_33412 drbg_blocklen fndecl 0 33412 NULL @@ -196238,6 +195901,7 @@ index 0000000..4ed1988 +enable_so_lde_namelen_lu_dirent_33595 lde_namelen lu_dirent 0 33595 NULL +enable_so_copy_range_nfulnl_msg_config_mode_33596 copy_range nfulnl_msg_config_mode 0 33596 NULL +enable_so_fsl_spi_bufs_fndecl_33599 fsl_spi_bufs fndecl 0 33599 NULL ++enable_so_strcspn_fndecl_33602 strcspn fndecl 0 33602 NULL +enable_so_max_header_size_iriap_cb_33603 max_header_size iriap_cb 0 33603 NULL +enable_so_ext2_xattr_security_set_fndecl_33606 ext2_xattr_security_set fndecl 5 33606 NULL +enable_so___kfifo_out_fndecl_33612 __kfifo_out fndecl 0-3 33612 NULL nohasharray @@ -196259,6 +195923,7 @@ index 0000000..4ed1988 +enable_so_tool_peer_spad_write_fndecl_33652 tool_peer_spad_write fndecl 3 33652 NULL +enable_so_hfs_inode_read_fork_fndecl_33654 hfs_inode_read_fork fndecl 4-3 33654 NULL +enable_so_savage_init_hw_fndecl_33678 savage_init_hw fndecl 0 33678 NULL ++enable_so_size_drm_exynos_gem_create_33679 size drm_exynos_gem_create 0 33679 NULL +enable_so_data_size_vxge_rx_priv_33684 data_size vxge_rx_priv 0 33684 NULL +enable_so_port_mlx4_net_trans_rule_hw_ctrl_33685 port mlx4_net_trans_rule_hw_ctrl 0 33685 NULL +enable_so_len_scif_copy_work_33687 len scif_copy_work 0 33687 NULL @@ -196294,6 +195959,7 @@ index 0000000..4ed1988 +enable_so_fm_mapped_extents_ll_user_fiemap_33785 fm_mapped_extents ll_user_fiemap 0 33785 &enable_so_pcmcia_replace_cis_fndecl_33785 +enable_so_sca3000_read_data_fndecl_33787 sca3000_read_data fndecl 4 33787 NULL +enable_so_sis190_try_rx_copy_fndecl_33790 sis190_try_rx_copy fndecl 3 33790 NULL ++enable_so_gicv2m_init_one_fndecl_33791 gicv2m_init_one fndecl 3 33791 NULL +enable_so_sd_write_data_fndecl_33792 sd_write_data fndecl 5-0 33792 NULL +enable_so_icv_truncbits_xfrm_algo_auth_info_33798 icv_truncbits xfrm_algo_auth_info 0 33798 NULL +enable_so___ip_tun_to_nlattr_fndecl_33801 __ip_tun_to_nlattr fndecl 4 33801 NULL @@ -196330,6 +195996,7 @@ index 0000000..4ed1988 +enable_so__install_special_mapping_fndecl_33907 _install_special_mapping fndecl 3-2 33907 NULL +enable_so_vxlan_fdb_append_fndecl_33909 vxlan_fdb_append fndecl 4 33909 NULL +enable_so_rx_desc_count_xgbe_prv_data_33915 rx_desc_count xgbe_prv_data 0 33915 NULL ++enable_so_vfio_pci_igd_rw_fndecl_33918 vfio_pci_igd_rw fndecl 3 33918 NULL +enable_so_w83627hf_device_add_fndecl_33919 w83627hf_device_add fndecl 1 33919 NULL +enable_so_wil_vring_alloc_skb_fndecl_33924 wil_vring_alloc_skb fndecl 4 33924 NULL +enable_so_size_cmdline_vardecl_dma_contiguous_c_33925 size_cmdline vardecl_dma-contiguous.c 0 33925 NULL @@ -196561,6 +196228,7 @@ index 0000000..4ed1988 +enable_so_cpu_npartitions_vardecl_linux_cpu_c_34622 cpu_npartitions vardecl_linux-cpu.c 0 34622 NULL +enable_so_batadv_tt_global_is_isolated_fndecl_34623 batadv_tt_global_is_isolated fndecl 3 34623 NULL +enable_so_pm_qos_power_read_fndecl_34624 pm_qos_power_read fndecl 3 34624 NULL ++enable_so___iommu_dma_alloc_pages_fndecl_34632 __iommu_dma_alloc_pages fndecl 1 34632 NULL +enable_so_ace_change_mtu_fndecl_34639 ace_change_mtu fndecl 2 34639 NULL +enable_so_hsc_write_fndecl_34640 hsc_write fndecl 3 34640 NULL +enable_so_idef6cpy_gru_control_block_extended_34646 idef6cpy gru_control_block_extended 0 34646 NULL @@ -196736,6 +196404,7 @@ index 0000000..4ed1988 +enable_so_d_ino_vxfs_direct_35117 d_ino vxfs_direct 0 35117 NULL +enable_so_max_uc_mac_be_resources_35119 max_uc_mac be_resources 0 35119 NULL +enable_so_vxfs_bmap_indir_fndecl_35120 vxfs_bmap_indir fndecl 2-0-4 35120 NULL ++enable_so_alloc_vm_area_fndecl_35121 alloc_vm_area fndecl 1 35121 NULL +enable_so_sm501_alloc_mem_fndecl_35125 sm501_alloc_mem fndecl 4 35125 NULL +enable_so_bch_empty_fifo_fndecl_35126 bch_empty_fifo fndecl 2 35126 NULL +enable_so_vmw_mob_create_fndecl_35127 vmw_mob_create fndecl 1 35127 NULL nohasharray @@ -196767,7 +196436,8 @@ index 0000000..4ed1988 +enable_so_blk_rq_count_integrity_sg_fndecl_35185 blk_rq_count_integrity_sg fndecl 0 35185 NULL +enable_so___sound_insert_unit_fndecl_35186 __sound_insert_unit fndecl 4-5 35186 NULL +enable_so_wHeight_uvc_frame_35189 wHeight uvc_frame 0 35189 NULL -+enable_so_ah_alloc_tmp_fndecl_35193 ah_alloc_tmp fndecl 2-3 35193 NULL ++enable_so_ah_alloc_tmp_fndecl_35193 ah_alloc_tmp fndecl 2-3 35193 NULL nohasharray ++enable_so_vop_vringh_copy_fndecl_35193 vop_vringh_copy fndecl 4 35193 &enable_so_ah_alloc_tmp_fndecl_35193 +enable_so_do_dccp_setsockopt_fndecl_35194 do_dccp_setsockopt fndecl 5 35194 NULL nohasharray +enable_so_intel_sdvo_write_cmd_fndecl_35194 intel_sdvo_write_cmd fndecl 4 35194 &enable_so_do_dccp_setsockopt_fndecl_35194 +enable_so_jffs2_security_setxattr_fndecl_35199 jffs2_security_setxattr fndecl 5 35199 NULL @@ -196823,7 +196493,8 @@ index 0000000..4ed1988 +enable_so_apei_exec_run_fndecl_35376 apei_exec_run fndecl 0 35376 NULL +enable_so_microcode_B_fe_size_dib9000_config_35377 microcode_B_fe_size dib9000_config 0 35377 NULL nohasharray +enable_so_drm_dp_mst_topology_mgr_init_fndecl_35377 drm_dp_mst_topology_mgr_init fndecl 4-5 35377 &enable_so_microcode_B_fe_size_dib9000_config_35377 -+enable_so_mmio_base_phys_radeonfb_info_35378 mmio_base_phys radeonfb_info 0 35378 NULL ++enable_so_mmio_base_phys_radeonfb_info_35378 mmio_base_phys radeonfb_info 0 35378 NULL nohasharray ++enable_so_sd_head_align_brcmfmac_sdio_pd_35378 sd_head_align brcmfmac_sdio_pd 0 35378 &enable_so_mmio_base_phys_radeonfb_info_35378 +enable_so_virtio_gpu_cmd_submit_fndecl_35382 virtio_gpu_cmd_submit fndecl 3 35382 NULL +enable_so_hc_erase_size_mmc_ext_csd_35384 hc_erase_size mmc_ext_csd 0 35384 NULL +enable_so_ath9k_hw_read_array_fndecl_35386 ath9k_hw_read_array fndecl 3 35386 NULL @@ -196866,12 +196537,14 @@ index 0000000..4ed1988 +enable_so_firm_send_command_fndecl_35493 firm_send_command fndecl 4 35493 NULL nohasharray +enable_so_nbox_drm_savage_cmdbuf_35493 nbox drm_savage_cmdbuf 0 35493 &enable_so_firm_send_command_fndecl_35493 +enable_so_sched_feat_write_fndecl_35505 sched_feat_write fndecl 3 35505 NULL ++enable_so_spi_res_alloc_fndecl_35507 spi_res_alloc fndecl 3 35507 NULL +enable_so_cnt_usnic_vnic_res_desc_35511 cnt usnic_vnic_res_desc 0 35511 NULL +enable_so___kfifo_dma_out_prepare_r_fndecl_35512 __kfifo_dma_out_prepare_r fndecl 4-5 35512 NULL +enable_so_dlci_change_mtu_fndecl_35513 dlci_change_mtu fndecl 2 35513 NULL +enable_so_acpi_nvs_register_fndecl_35515 acpi_nvs_register fndecl 2-1 35515 NULL +enable_so_do_raw_setsockopt_fndecl_35516 do_raw_setsockopt fndecl 5-0 35516 NULL +enable_so_install_special_mapping_fndecl_35519 install_special_mapping fndecl 3-2 35519 NULL ++enable_so_alloc_qcom_scm_command_fndecl_35520 alloc_qcom_scm_command fndecl 1-2 35520 NULL +enable_so_count_atl1_rfd_ring_35523 count atl1_rfd_ring 0 35523 NULL +enable_so_shift_mlxsw_item_35524 shift mlxsw_item 0 35524 NULL +enable_so_clr_int_base_mlx4_fw_35529 clr_int_base mlx4_fw 0 35529 NULL @@ -196976,6 +196649,7 @@ index 0000000..4ed1988 +enable_so_uv_systab_efi_35786 uv_systab efi 0 35786 NULL +enable_so_encap_size_brnf_frag_data_35787 encap_size brnf_frag_data 0 35787 NULL +enable_so_alloc_mon_bin_get_35804 alloc mon_bin_get 0 35804 NULL ++enable_so_num_rx_queues_iwl_trans_35809 num_rx_queues iwl_trans 0 35809 NULL +enable_so_send_ctrl_pipe_us_data_35813 send_ctrl_pipe us_data 0 35813 NULL +enable_so_used_tty_buffer_35815 used tty_buffer 0 35815 NULL +enable_so_number_of_controls_controlcache_6205_35817 number_of_controls controlcache_6205 0 35817 NULL @@ -196993,6 +196667,7 @@ index 0000000..4ed1988 +enable_so_srq_size_srpt_device_35833 srq_size srpt_device 0 35833 NULL +enable_so_request_sz_MPT3SAS_ADAPTER_35834 request_sz MPT3SAS_ADAPTER 0 35834 NULL +enable_so_paging32_get_level1_sp_gpa_fndecl_35837 paging32_get_level1_sp_gpa fndecl 0 35837 NULL ++enable_so_size_mvneta_tx_queue_35842 size mvneta_tx_queue 0 35842 NULL +enable_so_clk_core_enable_fndecl_35844 clk_core_enable fndecl 0 35844 NULL +enable_so_l_iclog_size_xlog_35849 l_iclog_size xlog 0 35849 NULL +enable_so_snd_pcm_format_physical_width_fndecl_35858 snd_pcm_format_physical_width fndecl 0 35858 NULL @@ -197058,6 +196733,7 @@ index 0000000..4ed1988 +enable_so_bfad_iocmd_fcpim_get_modstats_fndecl_36009 bfad_iocmd_fcpim_get_modstats fndecl 0 36009 &enable_so_max_rx_kingsun_cb_36009 nohasharray +enable_so_igb_alloc_q_vector_fndecl_36009 igb_alloc_q_vector fndecl 4-6 36009 &enable_so_bfad_iocmd_fcpim_get_modstats_fndecl_36009 nohasharray +enable_so_bdev_logical_block_size_fndecl_36009 bdev_logical_block_size fndecl 0 36009 &enable_so_igb_alloc_q_vector_fndecl_36009 ++enable_so_num_of_memcpy_chans_stedma40_platform_data_36011 num_of_memcpy_chans stedma40_platform_data 0 36011 NULL +enable_so___nfs4_proc_set_acl_fndecl_36018 __nfs4_proc_set_acl fndecl 3 36018 NULL +enable_so_n_sg_vscsibk_pend_36028 n_sg vscsibk_pend 0 36028 NULL +enable_so_setup_efi_info_memmap_fndecl_36029 setup_efi_info_memmap fndecl 4-3-2 36029 NULL @@ -197150,8 +196826,10 @@ index 0000000..4ed1988 +enable_so_ssl_next_nilfs_snapshot_list_36302 ssl_next nilfs_snapshot_list 0 36302 &enable_so_vertical_smiapp_binning_subtype_36302 +enable_so_paging64_prefetch_gpte_fndecl_36303 paging64_prefetch_gpte fndecl 4 36303 NULL +enable_so_command_size_drm_vmw_execbuf_arg_36305 command_size drm_vmw_execbuf_arg 0 36305 NULL ++enable_so_tegra_fb_alloc_fndecl_36306 tegra_fb_alloc fndecl 4 36306 NULL +enable_so_size_kernfs_elem_attr_36307 size kernfs_elem_attr 0 36307 NULL -+enable_so_snd_dma_alloc_pages_fndecl_36308 snd_dma_alloc_pages fndecl 3 36308 NULL ++enable_so_snd_dma_alloc_pages_fndecl_36308 snd_dma_alloc_pages fndecl 3 36308 NULL nohasharray ++enable_so_len_etd_priv_36308 len etd_priv 0 36308 &enable_so_snd_dma_alloc_pages_fndecl_36308 +enable_so_max_transfer_snd_usb_midi_out_endpoint_36311 max_transfer snd_usb_midi_out_endpoint 0 36311 NULL +enable_so_chunk_size_mdp_superblock_s_36313 chunk_size mdp_superblock_s 0 36313 NULL +enable_so_n_descsz_elf64_note_36314 n_descsz elf64_note 0 36314 NULL @@ -197325,6 +197003,7 @@ index 0000000..4ed1988 +enable_so_v4l_bufsize_vardecl_36803 v4l_bufsize vardecl 0 36803 NULL +enable_so_idetape_chrdev_write_fndecl_36811 idetape_chrdev_write fndecl 3 36811 NULL +enable_so_mthca_reg_user_mr_fndecl_36815 mthca_reg_user_mr fndecl 2-3 36815 NULL ++enable_so_size_drm_armada_gem_pwrite_36816 size drm_armada_gem_pwrite 0 36816 NULL +enable_so_mthca_setup_cmd_doorbells_fndecl_36817 mthca_setup_cmd_doorbells fndecl 2 36817 NULL +enable_so_card_type_nozomi_36822 card_type nozomi 0 36822 NULL +enable_so_ir_pre_altera_jtag_36823 ir_pre altera_jtag 0 36823 NULL @@ -197368,6 +197047,7 @@ index 0000000..4ed1988 +enable_so_isku_sysfs_read_macro_fndecl_36984 isku_sysfs_read_macro fndecl 6 36984 NULL +enable_so_v_sync_strt_wid_aty128_crtc_36987 v_sync_strt_wid aty128_crtc 0 36987 NULL +enable_so_lbmAllocate_fndecl_36995 lbmAllocate fndecl 2 36995 NULL ++enable_so_num_attached_opcode_info_t_36997 num_attached opcode_info_t 0 36997 NULL +enable_so_exp_len_ccp_rsa_engine_36998 exp_len ccp_rsa_engine 0 36998 NULL +enable_so_ll_sa_entry_alloc_fndecl_37008 ll_sa_entry_alloc fndecl 4 37008 NULL +enable_so_num_rxp_per_rx_bnad_37010 num_rxp_per_rx bnad 0 37010 NULL @@ -197468,6 +197148,7 @@ index 0000000..4ed1988 +enable_so_fbcon_scrolldelta_fndecl_37317 fbcon_scrolldelta fndecl 2 37317 NULL nohasharray +enable_so_batadv_handle_unclaim_fndecl_37317 batadv_handle_unclaim fndecl 5 37317 &enable_so_fbcon_scrolldelta_fndecl_37317 nohasharray +enable_so_tx_win_size_mwifiex_ie_types_btcoex_aggr_win_size_37317 tx_win_size mwifiex_ie_types_btcoex_aggr_win_size 0 37317 &enable_so_batadv_handle_unclaim_fndecl_37317 ++enable_so_kstrtobool_from_user_fndecl_37318 kstrtobool_from_user fndecl 2 37318 NULL +enable_so_size_dm_header_37319 size dm_header 0 37319 NULL +enable_so_mt76_mac_process_rx_fndecl_37334 mt76_mac_process_rx fndecl 0 37334 NULL +enable_so_ie_len_cfg80211_sched_scan_request_37335 ie_len cfg80211_sched_scan_request 0 37335 NULL nohasharray @@ -197519,6 +197200,7 @@ index 0000000..4ed1988 +enable_so_rate_ua101_37469 rate ua101 0 37469 NULL +enable_so_length_drm_event_37471 length drm_event 0 37471 NULL +enable_so_s_apbshift_ufs_sb_private_info_37473 s_apbshift ufs_sb_private_info 0 37473 NULL ++enable_so_omap_dma_reserve_channels_vardecl_dma_c_37479 omap_dma_reserve_channels vardecl_dma.c 0 37479 NULL +enable_so_TupleLink_tuple_t_37482 TupleLink tuple_t 0 37482 NULL +enable_so_ath10k_mac_create_fndecl_37485 ath10k_mac_create fndecl 1 37485 NULL +enable_so_qib_resize_cq_fndecl_37489 qib_resize_cq fndecl 2 37489 NULL @@ -197610,7 +197292,8 @@ index 0000000..4ed1988 +enable_so_word_4_ns_rsqe_37805 word_4 ns_rsqe 0 37805 NULL +enable_so_gid_tbl_len_ib_port_attr_37809 gid_tbl_len ib_port_attr 0 37809 NULL nohasharray +enable_so_devnum_genwqe_genwqe_dev_37809 devnum_genwqe genwqe_dev 0 37809 &enable_so_gid_tbl_len_ib_port_attr_37809 -+enable_so_buf_size_mlx5_ib_qp_37812 buf_size mlx5_ib_qp 0 37812 NULL ++enable_so_buf_size_mlx5_ib_qp_37812 buf_size mlx5_ib_qp 0 37812 NULL nohasharray ++enable_so_num_vectors_i40e_virtchnl_iwarp_qvlist_info_37812 num_vectors i40e_virtchnl_iwarp_qvlist_info 0 37812 &enable_so_buf_size_mlx5_ib_qp_37812 +enable_so_page_shift_qib_mregion_37818 page_shift qib_mregion 0 37818 NULL +enable_so_out_ep_snd_usb_midi_endpoint_info_37819 out_ep snd_usb_midi_endpoint_info 0 37819 NULL +enable_so_max_header_size_ircomm_tty_cb_37822 max_header_size ircomm_tty_cb 0 37822 NULL @@ -197647,6 +197330,7 @@ index 0000000..4ed1988 +enable_so_pasid_kfd_process_37907 pasid kfd_process 0 37907 NULL +enable_so_pvr2_i2c_basic_op_fndecl_37917 pvr2_i2c_basic_op fndecl 4-6 37917 NULL +enable_so_spk_ye_vardecl_37920 spk_ye vardecl 0 37920 NULL ++enable_so_mlx5_set_port_qetcr_reg_fndecl_37932 mlx5_set_port_qetcr_reg fndecl 3 37932 NULL +enable_so_ep_urb_context_37938 ep urb_context 0 37938 NULL nohasharray +enable_so_num_escbs_asd_seq_data_37938 num_escbs asd_seq_data 0 37938 &enable_so_ep_urb_context_37938 +enable_so_kvm_fetch_guest_virt_fndecl_37942 kvm_fetch_guest_virt fndecl 2-4 37942 NULL @@ -197709,6 +197393,7 @@ index 0000000..4ed1988 +enable_so_la_bm_off_ocfs2_local_alloc_38101 la_bm_off ocfs2_local_alloc 0 38101 &enable_so_bd_group_ext4_buddy_38101 +enable_so_softingcs_index_vardecl_softing_cs_c_38102 softingcs_index vardecl_softing_cs.c 0 38102 NULL +enable_so_data_size_il4965_firmware_pieces_38105 data_size il4965_firmware_pieces 0 38105 NULL ++enable_so_reg_stride_order_regmap_38114 reg_stride_order regmap 0 38114 NULL +enable_so_host_mapping_level_fndecl_38115 host_mapping_level fndecl 0-2 38115 NULL +enable_so_length_floppy_raw_cmd_38116 length floppy_raw_cmd 0 38116 NULL +enable_so_wm8994_get_fll_config_fndecl_38117 wm8994_get_fll_config fndecl 3-4 38117 NULL @@ -197732,6 +197417,7 @@ index 0000000..4ed1988 +enable_so_nilfs_cpfile_checkpoints_in_block_fndecl_38197 nilfs_cpfile_checkpoints_in_block fndecl 0-2-3 38197 NULL +enable_so_goto_high_power_fndecl_38198 goto_high_power fndecl 0 38198 NULL +enable_so_driver_data_i2c_device_id_38200 driver_data i2c_device_id 0 38200 NULL ++enable_so_rx_offset_tg3_38201 rx_offset tg3 0 38201 NULL +enable_so_raw_sig_size_x509_certificate_38211 raw_sig_size x509_certificate 0 38211 NULL +enable_so_ath6kl_wmi_del_wow_pattern_cmd_fndecl_38224 ath6kl_wmi_del_wow_pattern_cmd fndecl 2 38224 NULL nohasharray +enable_so_prealloc_stream_buf_vardecl_hpioctl_c_38224 prealloc_stream_buf vardecl_hpioctl.c 0 38224 &enable_so_ath6kl_wmi_del_wow_pattern_cmd_fndecl_38224 @@ -197798,6 +197484,7 @@ index 0000000..4ed1988 +enable_so_chrdev_setup_rx_fndecl_38384 chrdev_setup_rx fndecl 2 38384 NULL +enable_so_blk_register_region_fndecl_38387 blk_register_region fndecl 1-2 38387 NULL +enable_so_ext4_ext_rm_leaf_fndecl_38397 ext4_ext_rm_leaf fndecl 5 38397 NULL ++enable_so_size_vfio_info_cap_38398 size vfio_info_cap 0 38398 NULL +enable_so_hfsplus_brec_read_fndecl_38399 hfsplus_brec_read fndecl 0 38399 NULL +enable_so_ath6kl_sdio_alloc_prep_scat_req_fndecl_38401 ath6kl_sdio_alloc_prep_scat_req fndecl 2 38401 NULL +enable_so_sl_tclass_flowlabel_mthca_qp_path_38402 sl_tclass_flowlabel mthca_qp_path 0 38402 NULL @@ -197879,7 +197566,8 @@ index 0000000..4ed1988 +enable_so_reiserfs_posix_acl_from_disk_fndecl_38604 reiserfs_posix_acl_from_disk fndecl 2 38604 NULL nohasharray +enable_so_v_offset_v2_38604 v offset_v2 0 38604 &enable_so_reiserfs_posix_acl_from_disk_fndecl_38604 nohasharray +enable_so_maxburst_usb_ep_38604 maxburst usb_ep 0 38604 &enable_so_v_offset_v2_38604 -+enable_so_fpWidth_nvidia_par_38605 fpWidth nvidia_par 0 38605 NULL ++enable_so_fpWidth_nvidia_par_38605 fpWidth nvidia_par 0 38605 NULL nohasharray ++enable_so_perf_num_counters_fndecl_38605 perf_num_counters fndecl 0 38605 &enable_so_fpWidth_nvidia_par_38605 +enable_so_p_arglen_rpc_procinfo_38611 p_arglen rpc_procinfo 0 38611 NULL +enable_so_objectid_reiserfs_iget_args_38612 objectid reiserfs_iget_args 0 38612 NULL +enable_so_mga_compat_ioctl_fndecl_38617 mga_compat_ioctl fndecl 2 38617 NULL @@ -197984,6 +197672,7 @@ index 0000000..4ed1988 +enable_so_sg_width_mvs_chip_info_38900 sg_width mvs_chip_info 0 38900 NULL +enable_so_wr_buflen_nfsd4_write_38903 wr_buflen nfsd4_write 0 38903 NULL +enable_so_generic_elem_len_local_info_38904 generic_elem_len local_info 0 38904 NULL ++enable_so_length_hfi1_tid_info_38905 length hfi1_tid_info 0 38905 NULL +enable_so_surface_bpp_drm_fb_helper_surface_size_38906 surface_bpp drm_fb_helper_surface_size 0 38906 NULL +enable_so_vid_batadv_tvlv_tt_change_38907 vid batadv_tvlv_tt_change 0 38907 NULL +enable_so_dst_ci_command_fndecl_38908 dst_ci_command fndecl 4 38908 NULL nohasharray @@ -198002,7 +197691,8 @@ index 0000000..4ed1988 +enable_so_depth_cx231xx_fmt_38940 depth cx231xx_fmt 0 38940 NULL +enable_so_pcm_open_fndecl_38941 pcm_open fndecl 2 38941 NULL +enable_so_ecryptfs_write_lower_page_segment_fndecl_38943 ecryptfs_write_lower_page_segment fndecl 4 38943 NULL -+enable_so_drm_fb_helper_sys_write_fndecl_38945 drm_fb_helper_sys_write fndecl 3 38945 NULL ++enable_so_drm_fb_helper_sys_write_fndecl_38945 drm_fb_helper_sys_write fndecl 3 38945 NULL nohasharray ++enable_so_alloc_bootmem_core_fndecl_38945 alloc_bootmem_core fndecl 1 38945 &enable_so_drm_fb_helper_sys_write_fndecl_38945 +enable_so_sc_page_off_o2net_sock_container_38950 sc_page_off o2net_sock_container 0 38950 NULL +enable_so_in_length_nd_cmd_set_config_hdr_38954 in_length nd_cmd_set_config_hdr 0 38954 NULL +enable_so_of_irq_parse_one_fndecl_38957 of_irq_parse_one fndecl 0 38957 NULL @@ -198110,6 +197800,8 @@ index 0000000..4ed1988 +enable_so_mon_buff_area_fill_fndecl_39250 mon_buff_area_fill fndecl 3 39250 &enable_so_remote_mps_l2cap_chan_39250 +enable_so_sg_kmalloc_fndecl_39251 sg_kmalloc fndecl 1 39251 NULL +enable_so_raid5_get_active_stripe_fndecl_39252 raid5_get_active_stripe fndecl 2 39252 NULL ++enable_so_hash_table_size_vardecl_39253 hash_table_size vardecl 0 39253 NULL ++enable_so___iommu_alloc_buffer_fndecl_39259 __iommu_alloc_buffer fndecl 2 39259 NULL +enable_so_num_cons_qed_eth_pf_params_39260 num_cons qed_eth_pf_params 0 39260 NULL +enable_so_data_offset_napi_gro_cb_39263 data_offset napi_gro_cb 0 39263 NULL +enable_so_fdt_get_phandle_fndecl_39273 fdt_get_phandle fndecl 2 39273 NULL @@ -198142,6 +197834,7 @@ index 0000000..4ed1988 +enable_so_tx_pipe_brcmf_usbdev_info_39337 tx_pipe brcmf_usbdev_info 0 39337 NULL nohasharray +enable_so_num_channels_hw_mode_spec_39337 num_channels hw_mode_spec 0 39337 &enable_so_tx_pipe_brcmf_usbdev_info_39337 nohasharray +enable_so_iwl_dbgfs_echo_test_write_fndecl_39337 iwl_dbgfs_echo_test_write fndecl 3 39337 &enable_so_num_channels_hw_mode_spec_39337 ++enable_so_fscrypt_fname_alloc_buffer_fndecl_39339 fscrypt_fname_alloc_buffer fndecl 2 39339 NULL +enable_so_setbrightness_fndecl_39342 setbrightness fndecl 0 39342 NULL +enable_so_svc_create_fndecl_39343 svc_create fndecl 2 39343 NULL +enable_so_nhead_offs_ubifs_info_39346 nhead_offs ubifs_info 0 39346 NULL @@ -198169,6 +197862,7 @@ index 0000000..4ed1988 +enable_so_iscsi_create_conn_fndecl_39402 iscsi_create_conn fndecl 2 39402 NULL +enable_so_userptr_radeon_ttm_tt_39408 userptr radeon_ttm_tt 0 39408 NULL +enable_so_total_vfs_fm10k_iov_info_39412 total_vfs fm10k_iov_info 0 39412 NULL ++enable_so_pages_i40iw_add_page_info_39415 pages i40iw_add_page_info 0 39415 NULL +enable_so_payld_len_htc_frame_hdr_39418 payld_len htc_frame_hdr 0 39418 NULL +enable_so_vramsize_sisusb_usb_data_39419 vramsize sisusb_usb_data 0 39419 NULL +enable_so_board_sample_rate_lx6464es_39420 board_sample_rate lx6464es 0 39420 NULL nohasharray @@ -198269,6 +197963,7 @@ index 0000000..4ed1988 +enable_so_dev_mem_read_fndecl_39681 dev_mem_read fndecl 3 39681 &enable_so_num_q_vectors_fm10k_intfc_39681 +enable_so_fd_block_size_fd_dev_39692 fd_block_size fd_dev 0 39692 NULL nohasharray +enable_so_priv_size_Qdisc_ops_39692 priv_size Qdisc_ops 0 39692 &enable_so_fd_block_size_fd_dev_39692 ++enable_so_nb_ace_cci_nb_ports_39699 nb_ace cci_nb_ports 0 39699 NULL +enable_so_badblockpos_nand_chip_39700 badblockpos nand_chip 0 39700 NULL +enable_so_at24_macc_write_fndecl_39705 at24_macc_write fndecl 4-3 39705 NULL +enable_so_xfs_growfs_get_hdr_buf_fndecl_39706 xfs_growfs_get_hdr_buf fndecl 2-3 39706 NULL @@ -198451,7 +198146,8 @@ index 0000000..4ed1988 +enable_so_isku_sysfs_read_keys_media_fndecl_40295 isku_sysfs_read_keys_media fndecl 6 40295 NULL +enable_so_update_end_of_memory_vars_fndecl_40298 update_end_of_memory_vars fndecl 2-1 40298 NULL +enable_so_rx_filter_beacon_filter_read_fndecl_40300 rx_filter_beacon_filter_read fndecl 3 40300 NULL -+enable_so_osd_req_add_get_attr_list_fndecl_40301 osd_req_add_get_attr_list fndecl 3 40301 NULL ++enable_so_osd_req_add_get_attr_list_fndecl_40301 osd_req_add_get_attr_list fndecl 3 40301 NULL nohasharray ++enable_so_num_engines_dmm_40301 num_engines dmm 0 40301 &enable_so_osd_req_add_get_attr_list_fndecl_40301 +enable_so_hw_token_ehci_qh_40302 hw_token ehci_qh 0 40302 NULL +enable_so_cyttsp_spi_xfer_fndecl_40307 cyttsp_spi_xfer fndecl 6 40307 NULL +enable_so_gfs2_free_meta_fndecl_40312 gfs2_free_meta fndecl 2 40312 NULL @@ -198475,6 +198171,7 @@ index 0000000..4ed1988 +enable_so_SYSC_mincore_fndecl_40372 SYSC_mincore fndecl 2-1 40372 NULL +enable_so_pages_per_wr_bio_scrub_wr_ctx_40374 pages_per_wr_bio scrub_wr_ctx 0 40374 NULL +enable_so_align_kmem_cache_40377 align kmem_cache 0 40377 NULL ++enable_so___vmalloc_node_fndecl_40382 __vmalloc_node fndecl 1 40382 NULL +enable_so_ilm_len_mt76_fw_header_40389 ilm_len mt76_fw_header 0 40389 NULL +enable_so_px_raw_event_fndecl_40392 px_raw_event fndecl 4 40392 NULL +enable_so_file_secno_bplus_leaf_node_40394 file_secno bplus_leaf_node 0 40394 NULL nohasharray @@ -198482,7 +198179,8 @@ index 0000000..4ed1988 +enable_so_snd_ak4113_external_rate_fndecl_40404 snd_ak4113_external_rate fndecl 0 40404 NULL nohasharray +enable_so_max_scaled_height_bttv_crop_40404 max_scaled_height bttv_crop 0 40404 &enable_so_snd_ak4113_external_rate_fndecl_40404 nohasharray +enable_so_prli_len_fc_els_prli_40404 prli_len fc_els_prli 0 40404 &enable_so_max_scaled_height_bttv_crop_40404 -+enable_so_line_no_pch_uart_driver_data_40410 line_no pch_uart_driver_data 0 40410 NULL ++enable_so_line_no_pch_uart_driver_data_40410 line_no pch_uart_driver_data 0 40410 NULL nohasharray ++enable_so_arm_clear_user_fndecl_40410 arm_clear_user fndecl 0 40410 &enable_so_line_no_pch_uart_driver_data_40410 +enable_so_level3cnt_capi_register_params_40411 level3cnt capi_register_params 0 40411 NULL +enable_so_bulk_out_epnum_usb_cardstate_40412 bulk_out_epnum usb_cardstate 0 40412 NULL nohasharray +enable_so_joydev_ioctl_common_fndecl_40412 joydev_ioctl_common fndecl 2 40412 &enable_so_bulk_out_epnum_usb_cardstate_40412 @@ -198499,7 +198197,8 @@ index 0000000..4ed1988 +enable_so_iscsi_alloc_session_fndecl_40445 iscsi_alloc_session fndecl 3 40445 NULL +enable_so_qd2index_fndecl_40449 qd2index fndecl 0 40449 NULL +enable_so_gnttab_setup_auto_xlat_frames_fndecl_40455 gnttab_setup_auto_xlat_frames fndecl 1 40455 NULL -+enable_so_curpacksize_snd_usb_endpoint_40462 curpacksize snd_usb_endpoint 0 40462 NULL ++enable_so_curpacksize_snd_usb_endpoint_40462 curpacksize snd_usb_endpoint 0 40462 NULL nohasharray ++enable_so_submit_create_fndecl_40462 submit_create fndecl 3 40462 &enable_so_curpacksize_snd_usb_endpoint_40462 +enable_so_nr_i2c_adapter_40466 nr i2c_adapter 0 40466 NULL +enable_so_bfad_iocmd_boot_cfg_fndecl_40470 bfad_iocmd_boot_cfg fndecl 0 40470 NULL +enable_so_di_size_logfs_disk_inode_40484 di_size logfs_disk_inode 0 40484 NULL nohasharray @@ -198585,7 +198284,8 @@ index 0000000..4ed1988 +enable_so___x86_set_memory_region_fndecl_40708 __x86_set_memory_region fndecl 4 40708 NULL nohasharray +enable_so_nTxBlock_vardecl_jfs_txnmgr_c_40708 nTxBlock vardecl_jfs_txnmgr.c 0 40708 &enable_so___x86_set_memory_region_fndecl_40708 +enable_so_lfb_linelength_screen_info_40728 lfb_linelength screen_info 0 40728 NULL -+enable_so_cryptlen_aead_request_40734 cryptlen aead_request 0 40734 NULL ++enable_so_cryptlen_aead_request_40734 cryptlen aead_request 0 40734 NULL nohasharray ++enable_so_page_order_ring_buffer_40734 page_order ring_buffer 0 40734 &enable_so_cryptlen_aead_request_40734 +enable_so_NumberOfLogBlock_ms_lib_ctrl_40736 NumberOfLogBlock ms_lib_ctrl 0 40736 NULL +enable_so_do_splice_to_fndecl_40737 do_splice_to fndecl 4-0 40737 NULL +enable_so_sisfb_getheapstart_fndecl_40740 sisfb_getheapstart fndecl 0 40740 NULL nohasharray @@ -198624,6 +198324,7 @@ index 0000000..4ed1988 +enable_so_v9fs_file_fsync_dotl_fndecl_40845 v9fs_file_fsync_dotl fndecl 2-3 40845 NULL +enable_so_newblocks_xfs_growfs_data_40847 newblocks xfs_growfs_data 0 40847 NULL +enable_so_nfs_file_fsync_fndecl_40851 nfs_file_fsync fndecl 2-3 40851 NULL ++enable_so_mtu_ldc_channel_config_40859 mtu ldc_channel_config 0 40859 NULL +enable_so___of_parse_phandle_with_args_fndecl_40860 __of_parse_phandle_with_args fndecl 0 40860 NULL +enable_so_ov_left_drbd_device_40861 ov_left drbd_device 0 40861 NULL nohasharray +enable_so_extended_capabilities_len_wiphy_40861 extended_capabilities_len wiphy 0 40861 &enable_so_ov_left_drbd_device_40861 @@ -198650,7 +198351,8 @@ index 0000000..4ed1988 +enable_so_scsiback_do_resp_with_sense_fndecl_40934 scsiback_do_resp_with_sense fndecl 3 40934 NULL +enable_so_fuse_send_write_fndecl_40936 fuse_send_write fndecl 0-4 40936 NULL +enable_so_ecryptfs_filldir_fndecl_40939 ecryptfs_filldir fndecl 3 40939 NULL -+enable_so_len_set_config_param_40942 len set_config_param 0 40942 NULL ++enable_so_len_set_config_param_40942 len set_config_param 0 40942 NULL nohasharray ++enable_so_sg_nents_for_len_fndecl_40942 sg_nents_for_len fndecl 0 40942 &enable_so_len_set_config_param_40942 +enable_so_s_log_groups_per_flex_ext4_sb_info_40945 s_log_groups_per_flex ext4_sb_info 0 40945 NULL +enable_so_az6007_write_fndecl_40948 az6007_write fndecl 6 40948 NULL +enable_so_size_v4l2_ext_control_40952 size v4l2_ext_control 0 40952 NULL @@ -198689,6 +198391,7 @@ index 0000000..4ed1988 +enable_so_st21nfca_hci_dm_update_aid_fndecl_41063 st21nfca_hci_dm_update_aid fndecl 3 41063 &enable_so_bits_per_word_spi_transfer_41063 +enable_so_userio_char_read_fndecl_41065 userio_char_read fndecl 3 41065 NULL +enable_so_vdc_mem_size_vml_par_41069 vdc_mem_size vml_par 0 41069 NULL ++enable_so_qp_table_size_rvt_qp_ibdev_41075 qp_table_size rvt_qp_ibdev 0 41075 NULL +enable_so_gfn_to_pfn_fndecl_41077 gfn_to_pfn fndecl 2 41077 NULL +enable_so_DirID_hfs_cat_dir_41079 DirID hfs_cat_dir 0 41079 NULL +enable_so_shtc1_update_values_fndecl_41080 shtc1_update_values fndecl 4 41080 NULL @@ -198772,7 +198475,8 @@ index 0000000..4ed1988 +enable_so_kfd_set_pasid_limit_fndecl_41300 kfd_set_pasid_limit fndecl 1 41300 NULL +enable_so_bop_check_delete_nilfs_bmap_operations_41302 bop_check_delete nilfs_bmap_operations 0 41302 NULL +enable_so_register_vlan_device_fndecl_41310 register_vlan_device fndecl 2 41310 NULL -+enable_so_img_SRAM_size_fw_hdr_41311 img_SRAM_size fw_hdr 0 41311 NULL ++enable_so_img_SRAM_size_fw_hdr_41311 img_SRAM_size fw_hdr 0 41311 NULL nohasharray ++enable_so_d40_size_2_dmalen_fndecl_41311 d40_size_2_dmalen fndecl 0-2-3-1 41311 &enable_so_img_SRAM_size_fw_hdr_41311 +enable_so_cma_declare_contiguous_fndecl_41316 cma_declare_contiguous fndecl 4-2-1-3-5 41316 NULL nohasharray +enable_so_block_start_extent_map_41316 block_start extent_map 0 41316 &enable_so_cma_declare_contiguous_fndecl_41316 +enable_so_pc_len_s_pcon_41324 pc_len s_pcon 0 41324 NULL @@ -198831,8 +198535,7 @@ index 0000000..4ed1988 +enable_so_lpddr_info_query_fndecl_41492 lpddr_info_query fndecl 0 41492 NULL +enable_so_compat_core_sys_select_fndecl_41494 compat_core_sys_select fndecl 1 41494 NULL +enable_so_dir_entries_fat_floppy_defaults_41499 dir_entries fat_floppy_defaults 0 41499 NULL -+enable_so_mpi_set_buffer_fndecl_41501 mpi_set_buffer fndecl 3 41501 NULL nohasharray -+enable_so_join_req_size_vardecl_host_interface_c_41501 join_req_size vardecl_host_interface.c 0 41501 &enable_so_mpi_set_buffer_fndecl_41501 ++enable_so_mpi_set_buffer_fndecl_41501 mpi_set_buffer fndecl 3 41501 NULL +enable_so_irda_param_insert_fndecl_41502 irda_param_insert fndecl 0 41502 NULL +enable_so_max_shutter_mt9v032_model_data_41509 max_shutter mt9v032_model_data 0 41509 NULL +enable_so_b_fifo_size_hfcSX_hw_41512 b_fifo_size hfcSX_hw 0 41512 NULL @@ -198851,6 +198554,7 @@ index 0000000..4ed1988 +enable_so_ntargets_aoedev_41550 ntargets aoedev 0 41550 NULL +enable_so_set_extent_defrag_fndecl_41558 set_extent_defrag fndecl 3-2 41558 NULL +enable_so_max_nr_ports_virtio_console_config_41559 max_nr_ports virtio_console_config 0 41559 NULL ++enable_so_fpa_set_fndecl_41560 fpa_set fndecl 3-4 41560 NULL +enable_so_dma_rx_requested_read_fndecl_41561 dma_rx_requested_read fndecl 3 41561 NULL +enable_so_stv0680_handle_error_fndecl_41563 stv0680_handle_error fndecl 0-2 41563 NULL +enable_so_sb_blocklog_xfs_sb_41568 sb_blocklog xfs_sb 0 41568 NULL @@ -198912,7 +198616,8 @@ index 0000000..4ed1988 +enable_so_bm_key_affs_bm_info_41751 bm_key affs_bm_info 0 41751 NULL +enable_so_encode_filename3_fndecl_41752 encode_filename3 fndecl 3 41752 NULL +enable_so_insert_dent_fndecl_41753 insert_dent fndecl 3-4-7 41753 NULL -+enable_so_i_metasize_romfs_inode_info_41756 i_metasize romfs_inode_info 0 41756 NULL ++enable_so_i_metasize_romfs_inode_info_41756 i_metasize romfs_inode_info 0 41756 NULL nohasharray ++enable_so_vop_virtio_copy_to_user_fndecl_41756 vop_virtio_copy_to_user fndecl 3-4 41756 &enable_so_i_metasize_romfs_inode_info_41756 +enable_so_ovs_nla_add_action_fndecl_41757 ovs_nla_add_action fndecl 4-0 41757 NULL +enable_so_bnx2fc_process_l2_frame_compl_fndecl_41763 bnx2fc_process_l2_frame_compl fndecl 3 41763 NULL nohasharray +enable_so_size_port_buffer_41763 size port_buffer 0 41763 &enable_so_bnx2fc_process_l2_frame_compl_fndecl_41763 @@ -198969,7 +198674,8 @@ index 0000000..4ed1988 +enable_so_raw_decoder_line_size_vbi_info_41920 raw_decoder_line_size vbi_info 0 41920 NULL +enable_so_b_read_mon_reader_bin_41923 b_read mon_reader_bin 0 41923 NULL nohasharray +enable_so_print_endpoint_stat_fndecl_41923 print_endpoint_stat fndecl 0-4 41923 &enable_so_b_read_mon_reader_bin_41923 -+enable_so_wil_pmc_llseek_fndecl_41924 wil_pmc_llseek fndecl 2 41924 NULL ++enable_so_wil_pmc_llseek_fndecl_41924 wil_pmc_llseek fndecl 2 41924 NULL nohasharray ++enable_so_num_descriptors_wmi_p2p_noa_info_41924 num_descriptors wmi_p2p_noa_info 0 41924 &enable_so_wil_pmc_llseek_fndecl_41924 +enable_so_dm_complete_request_fndecl_41925 dm_complete_request fndecl 2 41925 NULL +enable_so_byte_cnt_mthca_cqe_41927 byte_cnt mthca_cqe 0 41927 NULL +enable_so_regmap_encx24j600_sfr_read_fndecl_41930 regmap_encx24j600_sfr_read fndecl 4 41930 NULL @@ -198993,6 +198699,7 @@ index 0000000..4ed1988 +enable_so_hsync_ast_vbios_enhtable_41977 hsync ast_vbios_enhtable 0 41977 NULL nohasharray +enable_so_max_req_queues_qla_hw_data_41977 max_req_queues qla_hw_data 0 41977 &enable_so_hsync_ast_vbios_enhtable_41977 +enable_so_f3_id_amd64_family_type_41979 f3_id amd64_family_type 0 41979 NULL ++enable_so_i40iw_get_pble_fndecl_41985 i40iw_get_pble fndecl 4 41985 NULL +enable_so___send_control_msg_fndecl_41986 __send_control_msg fndecl 2-0 41986 NULL +enable_so_va_end_vmap_area_41988 va_end vmap_area 0 41988 NULL +enable_so_snd_pcm_oss_read1_fndecl_41992 snd_pcm_oss_read1 fndecl 3 41992 NULL @@ -199037,6 +198744,7 @@ index 0000000..4ed1988 +enable_so_gtt_size_radeon_mc_42102 gtt_size radeon_mc 0 42102 NULL nohasharray +enable_so_proc_pid_attr_write_fndecl_42102 proc_pid_attr_write fndecl 3 42102 &enable_so_gtt_size_radeon_mc_42102 +enable_so_value_xen_hvm_param_42103 value xen_hvm_param 0 42103 NULL ++enable_so_tid_used_hfi1_filedata_42109 tid_used hfi1_filedata 0 42109 NULL +enable_so_image_offset_sd_42111 image_offset sd 0 42111 NULL +enable_so_efs_bmap_fndecl_42112 efs_bmap fndecl 0-2 42112 NULL +enable_so_jbd2_journal_init_dev_fndecl_42115 jbd2_journal_init_dev fndecl 5-3 42115 NULL @@ -199242,7 +198950,8 @@ index 0000000..4ed1988 +enable_so_oom_adj_write_fndecl_42687 oom_adj_write fndecl 3 42687 NULL +enable_so_ccp_update_sg_workarea_fndecl_42688 ccp_update_sg_workarea fndecl 2 42688 NULL +enable_so_BufferLength_respQ_e_42691 BufferLength respQ_e 0 42691 NULL -+enable_so_data_size_dm_ioctl_42701 data_size dm_ioctl 0 42701 NULL ++enable_so_data_size_dm_ioctl_42701 data_size dm_ioctl 0 42701 NULL nohasharray ++enable_so_vm_map_ram_fndecl_42701 vm_map_ram fndecl 2 42701 &enable_so_data_size_dm_ioctl_42701 +enable_so_transport_lba_64_ext_fndecl_42705 transport_lba_64_ext fndecl 0 42705 NULL +enable_so_len_nfs4_layoutdriver_data_42714 len nfs4_layoutdriver_data 0 42714 NULL nohasharray +enable_so_reordering_tcp_sock_42714 reordering tcp_sock 0 42714 &enable_so_len_nfs4_layoutdriver_data_42714 @@ -199321,6 +199030,7 @@ index 0000000..4ed1988 +enable_so_clkin_adf4350_state_42914 clkin adf4350_state 0 42914 NULL +enable_so_i915_gem_stolen_insert_node_fndecl_42918 i915_gem_stolen_insert_node fndecl 3 42918 NULL +enable_so_st21nfca_hci_dm_field_generator_fndecl_42926 st21nfca_hci_dm_field_generator fndecl 3 42926 NULL ++enable_so_scsi_debug_unmap_max_blocks_vardecl_scsi_debug_c_42927 scsi_debug_unmap_max_blocks vardecl_scsi_debug.c 0 42927 NULL +enable_so_carl9170_handle_command_response_fndecl_42930 carl9170_handle_command_response fndecl 3 42930 NULL +enable_so_wMaxInputLength_i2c_hid_desc_42932 wMaxInputLength i2c_hid_desc 0 42932 NULL +enable_so_bnx2x_vf_mcast_fndecl_42933 bnx2x_vf_mcast fndecl 4 42933 NULL @@ -199338,6 +199048,7 @@ index 0000000..4ed1988 +enable_so___pskb_copy_fclone_fndecl_42969 __pskb_copy_fclone fndecl 2 42969 NULL +enable_so_periods_max_snd_pcm_hardware_42979 periods_max snd_pcm_hardware 0 42979 NULL +enable_so_brcmf_sdiod_send_buf_fndecl_42982 brcmf_sdiod_send_buf fndecl 3 42982 NULL ++enable_so_max_pfn_amdgpu_vm_manager_42989 max_pfn amdgpu_vm_manager 0 42989 NULL +enable_so_len_kvaser_msg_42994 len kvaser_msg 0 42994 NULL +enable_so_hw_token_fotg210_qh_hw_42995 hw_token fotg210_qh_hw 0 42995 NULL +enable_so_num_mappings_nd_region_desc_42998 num_mappings nd_region_desc 0 42998 NULL nohasharray @@ -199582,6 +199293,7 @@ index 0000000..4ed1988 +enable_so_usbnet_read_cmd_nopm_fndecl_43663 usbnet_read_cmd_nopm fndecl 7 43663 NULL nohasharray +enable_so_edac_pci_alloc_ctl_info_fndecl_43663 edac_pci_alloc_ctl_info fndecl 1 43663 &enable_so_usbnet_read_cmd_nopm_fndecl_43663 +enable_so_bop_last_key_nilfs_bmap_operations_43669 bop_last_key nilfs_bmap_operations 0 43669 NULL ++enable_so_ibp_queue_depth_kib_peer_43675 ibp_queue_depth kib_peer 0 43675 NULL +enable_so_gsi_kvm_irq_routing_entry_43676 gsi kvm_irq_routing_entry 0 43676 NULL +enable_so_idmouse_read_fndecl_43677 idmouse_read fndecl 3 43677 NULL +enable_so_header_size_perf_event_43679 header_size perf_event 0 43679 NULL @@ -199619,6 +199331,7 @@ index 0000000..4ed1988 +enable_so_clipcount_cap_vivid_dev_43781 clipcount_cap vivid_dev 0 43781 NULL +enable_so_prepare_packet_fndecl_43783 prepare_packet fndecl 0 43783 NULL +enable_so_data_pad_ubi_volume_43787 data_pad ubi_volume 0 43787 NULL ++enable_so_VMALLOC_END_vardecl_43790 VMALLOC_END vardecl 0 43790 NULL +enable_so_smsc47m1_device_add_fndecl_43796 smsc47m1_device_add fndecl 1 43796 NULL +enable_so_uhci_urb_dequeue_fndecl_43804 uhci_urb_dequeue fndecl 3 43804 NULL +enable_so_xfs_trans_reserve_fndecl_43809 xfs_trans_reserve fndecl 3 43809 NULL @@ -199626,6 +199339,7 @@ index 0000000..4ed1988 +enable_so_rdes0_rx_desc_43817 rdes0 rx_desc 0 43817 NULL +enable_so___vb2_perform_fileio_fndecl_43818 __vb2_perform_fileio fndecl 3 43818 NULL +enable_so__save_mc_fndecl_43819 _save_mc fndecl 0-3 43819 NULL ++enable_so_omap_dma_prep_slave_sg_fndecl_43825 omap_dma_prep_slave_sg fndecl 3 43825 NULL +enable_so_i915_gem_object_create_stolen_fndecl_43837 i915_gem_object_create_stolen fndecl 2 43837 NULL +enable_so_unlink1_fndecl_43840 unlink1 fndecl 3-2 43840 NULL nohasharray +enable_so_snd_timer_user_info_fndecl_43840 snd_timer_user_info fndecl 0 43840 &enable_so_unlink1_fndecl_43840 @@ -199712,7 +199426,8 @@ index 0000000..4ed1988 +enable_so_blksize_xfs_da_geometry_44068 blksize xfs_da_geometry 0 44068 NULL +enable_so_xen_io_tlb_nslabs_vardecl_swiotlb_xen_c_44077 xen_io_tlb_nslabs vardecl_swiotlb-xen.c 0 44077 NULL +enable_so_maxports_board_t_44081 maxports board_t 0 44081 NULL -+enable_so_debug_pmt_fndecl_44082 debug_pmt fndecl 2 44082 NULL ++enable_so_debug_pmt_fndecl_44082 debug_pmt fndecl 2 44082 NULL nohasharray ++enable_so_mb_cache_create_fndecl_44082 mb_cache_create fndecl 1 44082 &enable_so_debug_pmt_fndecl_44082 +enable_so_netup_read_i2c_fndecl_44096 netup_read_i2c fndecl 5 44096 NULL +enable_so_ipoib_cm_create_srq_fndecl_44098 ipoib_cm_create_srq fndecl 2 44098 NULL +enable_so_xdr_decode_array2_fndecl_44099 xdr_decode_array2 fndecl 2-0 44099 NULL @@ -199782,6 +199497,7 @@ index 0000000..4ed1988 +enable_so_produce_size_qp_entry_44325 produce_size qp_entry 0 44325 NULL +enable_so_encode_op_hdr_fndecl_44327 encode_op_hdr fndecl 3 44327 NULL +enable_so_size_drm_radeon_gem_userptr_44334 size drm_radeon_gem_userptr 0 44334 NULL ++enable_so_arm_copy_from_user_fndecl_44337 arm_copy_from_user fndecl 0 44337 NULL +enable_so_bytesused_cx18_buffer_44339 bytesused cx18_buffer 0 44339 NULL +enable_so_snd_pcm_lib_writev_transfer_fndecl_44344 snd_pcm_lib_writev_transfer fndecl 5 44344 NULL +enable_so_tail_circ_buf_44346 tail circ_buf 0 44346 NULL nohasharray @@ -199857,6 +199573,7 @@ index 0000000..4ed1988 +enable_so_filter_read_fndecl_44527 filter_read fndecl 3 44527 NULL +enable_so_yenta_search_one_res_fndecl_44533 yenta_search_one_res fndecl 3 44533 NULL +enable_so_max_cqes_mthca_limits_44535 max_cqes mthca_limits 0 44535 NULL ++enable_so_nr_entry_nvbios_iccsense_44538 nr_entry nvbios_iccsense 0 44538 NULL +enable_so_consume_size_vmci_transport_44542 consume_size vmci_transport 0 44542 NULL +enable_so_smk_read_syslog_fndecl_44544 smk_read_syslog fndecl 3 44544 NULL +enable_so_numps_powernow_k8_data_44546 numps powernow_k8_data 0 44546 NULL @@ -199940,6 +199657,7 @@ index 0000000..4ed1988 +enable_so_nbp_vlan_add_fndecl_44783 nbp_vlan_add fndecl 2-0 44783 NULL +enable_so_ocfs2_handle_error_fndecl_44785 ocfs2_handle_error fndecl 0 44785 NULL nohasharray +enable_so_vb2_vmalloc_alloc_fndecl_44785 vb2_vmalloc_alloc fndecl 2 44785 &enable_so_ocfs2_handle_error_fndecl_44785 ++enable_so_device_count_pci_bus_relations_44792 device_count pci_bus_relations 0 44792 NULL +enable_so_btt_data_write_fndecl_44793 btt_data_write fndecl 0 44793 NULL +enable_so_truncate_size_ceph_mds_caps_44794 truncate_size ceph_mds_caps 0 44794 NULL +enable_so_sg_used_ccp_sg_workarea_44796 sg_used ccp_sg_workarea 0 44796 NULL @@ -199984,6 +199702,7 @@ index 0000000..4ed1988 +enable_so_ppp_tx_cp_fndecl_44879 ppp_tx_cp fndecl 5-2 44879 NULL +enable_so_SyS_setxattr_fndecl_44880 SyS_setxattr fndecl 4 44880 NULL +enable_so_port_mlx4_en_priv_44883 port mlx4_en_priv 0 44883 NULL ++enable_so_num_resources_platform_device_44886 num_resources platform_device 0 44886 NULL +enable_so___cookie_v4_check_fndecl_44887 __cookie_v4_check fndecl 0 44887 NULL nohasharray +enable_so_jffs2_do_unlink_fndecl_44887 jffs2_do_unlink fndecl 4 44887 &enable_so___cookie_v4_check_fndecl_44887 +enable_so_code_length_lirc_driver_44888 code_length lirc_driver 0 44888 NULL @@ -200030,6 +199749,7 @@ index 0000000..4ed1988 +enable_so_num_cqs_mthca_limits_45021 num_cqs mthca_limits 0 45021 NULL +enable_so_membase_vgastate_45022 membase vgastate 0 45022 NULL +enable_so_rd_size_hidp_session_45023 rd_size hidp_session 0 45023 NULL ++enable_so_msiq_num_pci_pbm_info_45030 msiq_num pci_pbm_info 0 45030 NULL +enable_so_nvalid_xfs_dir3_icfree_hdr_45035 nvalid xfs_dir3_icfree_hdr 0 45035 NULL +enable_so_sock_kmalloc_fndecl_45038 sock_kmalloc fndecl 2 45038 NULL +enable_so_alloc_upcall_fndecl_45049 alloc_upcall fndecl 2 45049 NULL nohasharray @@ -200043,7 +199763,8 @@ index 0000000..4ed1988 +enable_so_crypto_akcipher_maxsize_fndecl_45073 crypto_akcipher_maxsize fndecl 0 45073 NULL +enable_so_read_vbt_r10_fndecl_45076 read_vbt_r10 fndecl 1 45076 NULL +enable_so_sendpage_iscsi_sw_tcp_conn_45081 sendpage iscsi_sw_tcp_conn 0 45081 NULL -+enable_so_unmap_mapping_range_vma_fndecl_45084 unmap_mapping_range_vma fndecl 2-3 45084 NULL ++enable_so_unmap_mapping_range_vma_fndecl_45084 unmap_mapping_range_vma fndecl 2-3 45084 NULL nohasharray ++enable_so_entry_size_vio_dring_state_45084 entry_size vio_dring_state 0 45084 &enable_so_unmap_mapping_range_vma_fndecl_45084 +enable_so_regshift_uart_port_45089 regshift uart_port 0 45089 NULL +enable_so_revmap_size_irq_domain_45091 revmap_size irq_domain 0 45091 NULL +enable_so_ocfs2_lock_reflink_xattr_rec_allocators_fndecl_45097 ocfs2_lock_reflink_xattr_rec_allocators fndecl 3 45097 NULL @@ -200058,6 +199779,7 @@ index 0000000..4ed1988 +enable_so_handle_error_msi_domain_ops_45115 handle_error msi_domain_ops 0 45115 &enable_so_ea_size_s_fnode_45115 +enable_so_ov518_pkt_scan_fndecl_45121 ov518_pkt_scan fndecl 3 45121 NULL +enable_so_vblk_size_vmdb_45123 vblk_size vmdb 0 45123 NULL ++enable_so_dma_map_mr_pas_fndecl_45126 dma_map_mr_pas fndecl 3 45126 NULL +enable_so_early_init_dt_scan_root_fndecl_45127 early_init_dt_scan_root fndecl 1 45127 NULL nohasharray +enable_so_key_len_mwifiex_ds_encrypt_key_45127 key_len mwifiex_ds_encrypt_key 0 45127 &enable_so_early_init_dt_scan_root_fndecl_45127 nohasharray +enable_so_offset_nb8800_rx_buf_45127 offset nb8800_rx_buf 0 45127 &enable_so_key_len_mwifiex_ds_encrypt_key_45127 @@ -200123,6 +199845,7 @@ index 0000000..4ed1988 +enable_so_ubi_eba_read_leb_sg_fndecl_45326 ubi_eba_read_leb_sg fndecl 0 45326 NULL +enable_so_excessive_retries_read_fndecl_45338 excessive_retries_read fndecl 3 45338 NULL +enable_so_peer_chan_len_wmi_tdls_peer_capab_arg_45339 peer_chan_len wmi_tdls_peer_capab_arg 0 45339 NULL ++enable_so_ablkcipher_giv_edesc_alloc_fndecl_45340 ablkcipher_giv_edesc_alloc fndecl 2 45340 NULL +enable_so_vm_munmap_fndecl_45341 vm_munmap fndecl 1-2 45341 NULL +enable_so_fdt_node_offset_by_compatible_fndecl_45345 fdt_node_offset_by_compatible fndecl 2 45345 NULL +enable_so___snd_util_mem_alloc_fndecl_45349 __snd_util_mem_alloc fndecl 2 45349 NULL @@ -200130,6 +199853,7 @@ index 0000000..4ed1988 +enable_so_fps_timblogiw_tvnorm_45355 fps timblogiw_tvnorm 0 45355 NULL +enable_so_reserve_bad_mem_fndecl_45356 reserve_bad_mem fndecl 2-3 45356 NULL +enable_so_icq_size_elevator_type_45359 icq_size elevator_type 0 45359 NULL ++enable_so_msix_count_i40iw_device_45370 msix_count i40iw_device 0 45370 NULL +enable_so_mad_recvq_size_vardecl_mad_c_45372 mad_recvq_size vardecl_mad.c 0 45372 NULL +enable_so_get_urb_status_from_qtd_fndecl_45378 get_urb_status_from_qtd fndecl 0 45378 NULL +enable_so_txq_entries_efx_nic_45383 txq_entries efx_nic 0 45383 NULL @@ -200150,6 +199874,7 @@ index 0000000..4ed1988 +enable_so_rn_tnamelen_nfsd4_rename_45437 rn_tnamelen nfsd4_rename 0 45437 NULL +enable_so_radeon_ttm_tt_set_userptr_fndecl_45438 radeon_ttm_tt_set_userptr fndecl 2 45438 NULL +enable_so_nfsd_hashsize_fndecl_45441 nfsd_hashsize fndecl 0 45441 NULL ++enable_so_rvt_alloc_device_fndecl_45442 rvt_alloc_device fndecl 2 45442 NULL +enable_so_qcaspi_netdev_change_mtu_fndecl_45450 qcaspi_netdev_change_mtu fndecl 2 45450 NULL +enable_so_start_bdi_bd_transfer_45454 start_bdi bd_transfer 0 45454 NULL +enable_so_wTotalLength_usb_bos_descriptor_45455 wTotalLength usb_bos_descriptor 0 45455 NULL @@ -200182,7 +199907,8 @@ index 0000000..4ed1988 +enable_so_hpfs_trim_fs_fndecl_45531 hpfs_trim_fs fndecl 2-3 45531 NULL +enable_so_wl1273_fm_fops_write_fndecl_45534 wl1273_fm_fops_write fndecl 3 45534 NULL +enable_so_rtsx_usb_bulk_transfer_sglist_fndecl_45538 rtsx_usb_bulk_transfer_sglist fndecl 5-2-0-4 45538 NULL -+enable_so_size_nft_expr_ops_45543 size nft_expr_ops 0 45543 NULL ++enable_so_size_nft_expr_ops_45543 size nft_expr_ops 0 45543 NULL nohasharray ++enable_so_arch_setup_dma_ops_fndecl_45543 arch_setup_dma_ops fndecl 3 45543 &enable_so_size_nft_expr_ops_45543 +enable_so_if_sdio_host_to_card_fndecl_45545 if_sdio_host_to_card fndecl 4 45545 NULL +enable_so_mp_agg_pkt_limit_sdio_mmc_card_45546 mp_agg_pkt_limit sdio_mmc_card 0 45546 NULL +enable_so_driver_max_VFs_pci_sriov_45552 driver_max_VFs pci_sriov 0 45552 NULL @@ -200309,6 +200035,7 @@ index 0000000..4ed1988 +enable_so_alloc_sglist_fndecl_45919 alloc_sglist fndecl 3-2-1 45919 NULL +enable_so_wl1271_tx_allocate_fndecl_45921 wl1271_tx_allocate fndecl 4 45921 NULL +enable_so_mru_asyncppp_45929 mru asyncppp 0 45929 NULL ++enable_so_base_i40iw_hmc_obj_info_45931 base i40iw_hmc_obj_info 0 45931 NULL +enable_so_range_ccu_data_45932 range ccu_data 0 45932 NULL +enable_so_fan_count_applesmc_registers_45934 fan_count applesmc_registers 0 45934 NULL +enable_so_num_ports_pciserial_board_45938 num_ports pciserial_board 0 45938 NULL @@ -200338,6 +200065,7 @@ index 0000000..4ed1988 +enable_so_vmemmap_alloc_block_buf_fndecl_46037 vmemmap_alloc_block_buf fndecl 1 46037 NULL +enable_so_acl_mtu_hci_dev_46038 acl_mtu hci_dev 0 46038 NULL +enable_so_dma_size_qlcnic_host_rds_ring_46045 dma_size qlcnic_host_rds_ring 0 46045 NULL ++enable_so_p9_client_prepare_req_fndecl_46048 p9_client_prepare_req fndecl 3 46048 NULL +enable_so___vmalloc_fndecl_46051 __vmalloc fndecl 1 46051 NULL +enable_so_pair_device_fndecl_46052 pair_device fndecl 4 46052 NULL nohasharray +enable_so_event_oom_late_read_fndecl_46052 event_oom_late_read fndecl 3 46052 &enable_so_pair_device_fndecl_46052 nohasharray @@ -200417,6 +200145,7 @@ index 0000000..4ed1988 +enable_so_rocker_port_change_mtu_fndecl_46262 rocker_port_change_mtu fndecl 2 46262 NULL nohasharray +enable_so_len_ath10k_fw_ie_46262 len ath10k_fw_ie 0 46262 &enable_so_rocker_port_change_mtu_fndecl_46262 +enable_so_size_xenvif_rx_meta_46270 size xenvif_rx_meta 0 46270 NULL ++enable_so_sq_size_i40iw_qp_uk_46272 sq_size i40iw_qp_uk 0 46272 NULL +enable_so_qla27xx_fwdt_template_size_fndecl_46273 qla27xx_fwdt_template_size fndecl 0 46273 NULL +enable_so_onenand_read_oob_fndecl_46274 onenand_read_oob fndecl 2 46274 NULL +enable_so_smem_len_iwl_cfg_46276 smem_len iwl_cfg 0 46276 NULL @@ -200455,7 +200184,8 @@ index 0000000..4ed1988 +enable_so_fs_path_ensure_buf_fndecl_46374 fs_path_ensure_buf fndecl 2 46374 &enable_so_bnx2_change_mtu_fndecl_46374 +enable_so_acpi_ds_build_internal_buffer_obj_fndecl_46379 acpi_ds_build_internal_buffer_obj fndecl 3 46379 NULL +enable_so_gb_vardecl_null_blk_c_46399 gb vardecl_null_blk.c 0 46399 NULL -+enable_so_max_loop_vardecl_loop_c_46402 max_loop vardecl_loop.c 0 46402 NULL ++enable_so_max_loop_vardecl_loop_c_46402 max_loop vardecl_loop.c 0 46402 NULL nohasharray ++enable_so_strength_nand_ecc_ctrl_46402 strength nand_ecc_ctrl 0 46402 &enable_so_max_loop_vardecl_loop_c_46402 +enable_so_piosize4k_qib_devdata_46406 piosize4k qib_devdata 0 46406 NULL +enable_so_SavagePanelWidth_savagefb_par_46407 SavagePanelWidth savagefb_par 0 46407 NULL +enable_so_skb_maybe_pull_tail_fndecl_46422 skb_maybe_pull_tail fndecl 3 46422 NULL @@ -200498,6 +200228,7 @@ index 0000000..4ed1988 +enable_so_pagesz_cifs_readdata_46514 pagesz cifs_readdata 0 46514 NULL +enable_so_tunables_write_fndecl_46520 tunables_write fndecl 3 46520 NULL +enable_so_free_bootmem_with_active_regions_fndecl_46521 free_bootmem_with_active_regions fndecl 2 46521 NULL ++enable_so_mlx5_core_query_ib_ppcnt_fndecl_46522 mlx5_core_query_ib_ppcnt fndecl 4 46522 NULL +enable_so_bio_split_fndecl_46527 bio_split fndecl 2 46527 NULL +enable_so_sddr09_request_sense_fndecl_46529 sddr09_request_sense fndecl 3 46529 NULL +enable_so_dr_suballoc_loc_ocfs2_dx_root_block_46531 dr_suballoc_loc ocfs2_dx_root_block 0 46531 NULL @@ -200513,6 +200244,7 @@ index 0000000..4ed1988 +enable_so_erasesize_shift_mtd_info_46565 erasesize_shift mtd_info 0 46565 NULL nohasharray +enable_so_xt_compat_init_offsets_fndecl_46565 xt_compat_init_offsets fndecl 2 46565 &enable_so_erasesize_shift_mtd_info_46565 +enable_so_max_msix_vectors_vardecl_mpt3sas_base_c_46566 max_msix_vectors vardecl_mpt3sas_base.c 0 46566 NULL ++enable_so_ndivs_divs_data_46571 ndivs divs_data 0 46571 NULL +enable_so_SyS_setdomainname_fndecl_46573 SyS_setdomainname fndecl 2 46573 NULL +enable_so_sock_sendpage_fndecl_46581 sock_sendpage fndecl 4 46581 NULL +enable_so_f2fs_nfs_get_inode_fndecl_46582 f2fs_nfs_get_inode fndecl 2 46582 NULL @@ -200572,6 +200304,7 @@ index 0000000..4ed1988 +enable_so_wm8994_set_fll_fndecl_46745 wm8994_set_fll fndecl 4-5 46745 NULL +enable_so_rxsz_fc_plogi_clp_s_46751 rxsz fc_plogi_clp_s 0 46751 NULL +enable_so_cvmx_bootmem_phy_named_block_find_fndecl_46752 cvmx_bootmem_phy_named_block_find fndecl 0 46752 NULL ++enable_so_sunzilog_alloc_tables_fndecl_46756 sunzilog_alloc_tables fndecl 1 46756 NULL +enable_so_count_nfs_readdirargs_46759 count nfs_readdirargs 0 46759 NULL +enable_so___kfifo_from_user_r_fndecl_46762 __kfifo_from_user_r fndecl 3-5 46762 NULL nohasharray +enable_so_perf_aux_output_skip_fndecl_46762 perf_aux_output_skip fndecl 2 46762 &enable_so___kfifo_from_user_r_fndecl_46762 @@ -200580,7 +200313,8 @@ index 0000000..4ed1988 +enable_so_target_begin_dm_region_hash_46773 target_begin dm_region_hash 0 46773 &enable_so_s_bshift_ufs_sb_private_info_46773 +enable_so_mc_groups_longs_vardecl_genetlink_c_46774 mc_groups_longs vardecl_genetlink.c 0 46774 NULL +enable_so_bytes_remaining_parser_context_46791 bytes_remaining parser_context 0 46791 NULL -+enable_so_ubi_eba_atomic_leb_change_fndecl_46792 ubi_eba_atomic_leb_change fndecl 5 46792 NULL ++enable_so_ubi_eba_atomic_leb_change_fndecl_46792 ubi_eba_atomic_leb_change fndecl 5 46792 NULL nohasharray ++enable_so_rq_size_i40iw_qp_uk_46792 rq_size i40iw_qp_uk 0 46792 &enable_so_ubi_eba_atomic_leb_change_fndecl_46792 +enable_so_brcmf_usb_rx_ctlpkt_fndecl_46799 brcmf_usb_rx_ctlpkt fndecl 3 46799 NULL nohasharray +enable_so_drbd_alloc_peer_req_fndecl_46799 drbd_alloc_peer_req fndecl 4-3 46799 &enable_so_brcmf_usb_rx_ctlpkt_fndecl_46799 +enable_so_be_cmd_set_sriov_config_fndecl_46800 be_cmd_set_sriov_config fndecl 3 46800 NULL @@ -200594,6 +200328,7 @@ index 0000000..4ed1988 +enable_so_major_hwif_s_46820 major hwif_s 0 46820 NULL +enable_so_numberoflines_tmHWStreamParameters_46824 numberoflines tmHWStreamParameters 0 46824 NULL +enable_so_residue_c67x00_td_46828 residue c67x00_td 0 46828 NULL ++enable_so_tid_limit_hfi1_filedata_46834 tid_limit hfi1_filedata 0 46834 NULL +enable_so_extra_priv_size_xhci_driver_overrides_46837 extra_priv_size xhci_driver_overrides 0 46837 NULL +enable_so_hexdump_fndecl_46840 hexdump fndecl 3 46840 NULL +enable_so_num_prior_parent_snaps_ceph_snap_realm_46841 num_prior_parent_snaps ceph_snap_realm 0 46841 NULL nohasharray @@ -200606,6 +200341,7 @@ index 0000000..4ed1988 +enable_so_flags_f2fs_encryption_context_46847 flags f2fs_encryption_context 0 46847 NULL +enable_so___bread_gfp_fndecl_46858 __bread_gfp fndecl 3-2 46858 NULL +enable_so_xwrite_fndecl_46865 xwrite fndecl 3 46865 NULL ++enable_so_nb_ace_lite_cci_nb_ports_46870 nb_ace_lite cci_nb_ports 0 46870 NULL +enable_so_lookup_node_fndecl_46882 lookup_node fndecl 2 46882 NULL +enable_so_len_nfsd3_readlinkres_46888 len nfsd3_readlinkres 0 46888 NULL +enable_so_ksi_nthreads_max_ksock_sched_info_46891 ksi_nthreads_max ksock_sched_info 0 46891 NULL @@ -200651,6 +200387,7 @@ index 0000000..4ed1988 +enable_so_vmw_kms_update_proxy_fndecl_47016 vmw_kms_update_proxy fndecl 3 47016 NULL nohasharray +enable_so_va_start_vmap_area_47016 va_start vmap_area 0 47016 &enable_so_vmw_kms_update_proxy_fndecl_47016 +enable_so_bytesused_uvc_buffer_47017 bytesused uvc_buffer 0 47017 NULL ++enable_so_dma_init_coherent_memory_fndecl_47020 dma_init_coherent_memory fndecl 3 47020 NULL +enable_so_length_acpi_buffer_47024 length acpi_buffer 0 47024 NULL +enable_so_ath6kl_listen_int_write_fndecl_47025 ath6kl_listen_int_write fndecl 3 47025 NULL +enable_so_length_ixgb_rx_desc_47027 length ixgb_rx_desc 0 47027 NULL @@ -200722,6 +200459,7 @@ index 0000000..4ed1988 +enable_so_rnr_retry_ib_qp_attr_47198 rnr_retry ib_qp_attr 0 47198 NULL +enable_so_vmalloc_node_fndecl_47199 vmalloc_node fndecl 1 47199 NULL +enable_so_bi_phys_segments_bio_47200 bi_phys_segments bio 0 47200 NULL ++enable_so_mbm_socket_max_vardecl_47204 mbm_socket_max vardecl 0 47204 NULL +enable_so_wpos_p9_conn_47212 wpos p9_conn 0 47212 NULL +enable_so_ieee80211_if_write_tkip_mic_test_fndecl_47215 ieee80211_if_write_tkip_mic_test fndecl 3 47215 NULL +enable_so_authsize_crypto_aead_47219 authsize crypto_aead 0 47219 NULL nohasharray @@ -200751,6 +200489,7 @@ index 0000000..4ed1988 +enable_so___wa_xfer_submit_fndecl_47289 __wa_xfer_submit fndecl 0 47289 NULL nohasharray +enable_so_ipx_sendmsg_fndecl_47289 ipx_sendmsg fndecl 3 47289 &enable_so___wa_xfer_submit_fndecl_47289 +enable_so_dev_number_mdp_superblock_1_47292 dev_number mdp_superblock_1 0 47292 NULL ++enable_so___ofdpa_mem_alloc_fndecl_47299 __ofdpa_mem_alloc fndecl 3 47299 NULL +enable_so_fwnode_property_read_string_array_fndecl_47300 fwnode_property_read_string_array fndecl 0 47300 NULL +enable_so_pppol2tp_recvmsg_fndecl_47301 pppol2tp_recvmsg fndecl 3 47301 NULL +enable_so_command_write_fndecl_47306 command_write fndecl 3 47306 NULL @@ -200821,6 +200560,7 @@ index 0000000..4ed1988 +enable_so_gr_ep_init_fndecl_47502 gr_ep_init fndecl 4 47502 NULL +enable_so_try_unmap_single_bt_fndecl_47503 try_unmap_single_bt fndecl 2-3 47503 NULL +enable_so_btrfs_cont_expand_fndecl_47505 btrfs_cont_expand fndecl 3-2 47505 NULL ++enable_so_nr_outport_coresight_platform_data_47506 nr_outport coresight_platform_data 0 47506 NULL +enable_so_romfs_blk_strcmp_fndecl_47510 romfs_blk_strcmp fndecl 4-2 47510 NULL nohasharray +enable_so_ucNumEntries__ATOM_Tonga_MCLK_Dependency_Table_47510 ucNumEntries _ATOM_Tonga_MCLK_Dependency_Table 0 47510 &enable_so_romfs_blk_strcmp_fndecl_47510 +enable_so_setcontrast_fndecl_47513 setcontrast fndecl 0 47513 NULL @@ -201001,6 +200741,7 @@ index 0000000..4ed1988 +enable_so_temp_end_applesmc_registers_48016 temp_end applesmc_registers 0 48016 NULL +enable_so_mdiobus_read_nested_fndecl_48017 mdiobus_read_nested fndecl 0 48017 NULL +enable_so_original_mtu_slave_48025 original_mtu slave 0 48025 NULL ++enable_so__find_next_bit_le_fndecl_48027 _find_next_bit_le fndecl 0 48027 NULL +enable_so_hmac_len_sctp_hmac_48030 hmac_len sctp_hmac 0 48030 NULL +enable_so_aim_write_fndecl_48032 aim_write fndecl 3 48032 NULL +enable_so_dlci_header_fndecl_48034 dlci_header fndecl 3 48034 NULL @@ -201013,6 +200754,7 @@ index 0000000..4ed1988 +enable_so_num_privcmd_mmapbatch_v2_48051 num privcmd_mmapbatch_v2 0 48051 NULL +enable_so_rds_buf_vardecl_radio_si470x_i2c_c_48053 rds_buf vardecl_radio-si470x-i2c.c 0 48053 NULL +enable_so_ioctl_datasize_ips_ha_48058 ioctl_datasize ips_ha 0 48058 NULL ++enable_so_nr_channels_at_dma_platform_data_48060 nr_channels at_dma_platform_data 0 48060 NULL +enable_so_lso_max_fc_lport_48064 lso_max fc_lport 0 48064 NULL +enable_so_zonesize_alauda_media_info_48068 zonesize alauda_media_info 0 48068 NULL +enable_so_sc16is7xx_alloc_line_fndecl_48075 sc16is7xx_alloc_line fndecl 0 48075 NULL @@ -201154,6 +200896,7 @@ index 0000000..4ed1988 +enable_so_octeon_read_device_mem32_fndecl_48520 octeon_read_device_mem32 fndecl 0 48520 NULL +enable_so_fcoe_get_paged_crc_eof_fndecl_48522 fcoe_get_paged_crc_eof fndecl 2 48522 NULL +enable_so_copy_in_user_fndecl_48525 copy_in_user fndecl 3 48525 NULL ++enable_so_fscrypt_fname_encrypted_size_fndecl_48527 fscrypt_fname_encrypted_size fndecl 0-2 48527 NULL +enable_so_receive_buf_fndecl_48528 receive_buf fndecl 4 48528 NULL nohasharray +enable_so_max_sense_bytes_mpt3_ioctl_command_48528 max_sense_bytes mpt3_ioctl_command 0 48528 &enable_so_receive_buf_fndecl_48528 +enable_so_dxfer_len_sg_io_hdr_48532 dxfer_len sg_io_hdr 0 48532 NULL @@ -201185,11 +200928,14 @@ index 0000000..4ed1988 +enable_so_backup_size_vmw_resource_48590 backup_size vmw_resource 0 48590 &enable_so_flow_label_ib_sa_path_rec_48590 +enable_so_driver_register_fndecl_48593 driver_register fndecl 0 48593 NULL +enable_so_len_isert_data_buf_48596 len isert_data_buf 0 48596 NULL ++enable_so_arm_copy_to_user_fndecl_48602 arm_copy_to_user fndecl 0 48602 NULL ++enable_so_args_count_of_phandle_args_48605 args_count of_phandle_args 0 48605 NULL +enable_so_datalen_atp_info_48607 datalen atp_info 0 48607 NULL nohasharray +enable_so_aggr_size_tx_agg_rate_read_fndecl_48607 aggr_size_tx_agg_rate_read fndecl 3 48607 &enable_so_datalen_atp_info_48607 +enable_so_count_e8390_pkt_hdr_48610 count e8390_pkt_hdr 0 48610 NULL +enable_so_mmc_test_prepare_mrq_fndecl_48612 mmc_test_prepare_mrq fndecl 7-6-4 48612 NULL +enable_so_read_file_spectral_fft_period_fndecl_48618 read_file_spectral_fft_period fndecl 3 48618 NULL ++enable_so_num_streamids_arm_smmu_master_cfg_48625 num_streamids arm_smmu_master_cfg 0 48625 NULL +enable_so_xen_get_max_pages_fndecl_48626 xen_get_max_pages fndecl 0 48626 NULL +enable_so_crc_eof_offset_fcoe_percpu_s_48630 crc_eof_offset fcoe_percpu_s 0 48630 NULL +enable_so_bcma_of_get_irq_fndecl_48631 bcma_of_get_irq fndecl 0 48631 NULL @@ -201267,6 +201013,7 @@ index 0000000..4ed1988 +enable_so_r100_mm_rreg_fndecl_48823 r100_mm_rreg fndecl 0 48823 NULL +enable_so_sharpness_sd_gl860_48824 sharpness sd_gl860 0 48824 NULL +enable_so_endpoint_pvr2_stream_48828 endpoint pvr2_stream 0 48828 NULL ++enable_so_omap_device_count_resources_fndecl_48829 omap_device_count_resources fndecl 0 48829 NULL +enable_so_xbofs_irda_skb_cb_48831 xbofs irda_skb_cb 0 48831 NULL nohasharray +enable_so_num_vring_48831 num vring 0 48831 &enable_so_xbofs_irda_skb_cb_48831 +enable_so_mic_virtio_copy_from_user_fndecl_48832 mic_virtio_copy_from_user fndecl 3 48832 NULL @@ -201317,7 +201064,8 @@ index 0000000..4ed1988 +enable_so_SyS_io_setup_fndecl_48965 SyS_io_setup fndecl 1 48965 NULL +enable_so_block_size_sm_ftl_48967 block_size sm_ftl 0 48967 NULL +enable_so_rx_fndecl_48971 rx fndecl 4 48971 NULL -+enable_so_twl_i2c_write_fndecl_48976 twl_i2c_write fndecl 0 48976 NULL ++enable_so_twl_i2c_write_fndecl_48976 twl_i2c_write fndecl 0 48976 NULL nohasharray ++enable_so_dma40_prep_dma_cyclic_fndecl_48976 dma40_prep_dma_cyclic fndecl 4-3 48976 &enable_so_twl_i2c_write_fndecl_48976 +enable_so_num_packet_sock_48980 num packet_sock 0 48980 NULL +enable_so_pkt_overhead_pktgen_dev_48989 pkt_overhead pktgen_dev 0 48989 NULL +enable_so_sel_read_handle_unknown_fndecl_48990 sel_read_handle_unknown fndecl 3 48990 NULL @@ -201633,7 +201381,8 @@ index 0000000..4ed1988 +enable_so_mms114_write_reg_fndecl_49977 mms114_write_reg fndecl 3 49977 NULL +enable_so_dig_in_nid_hda_gen_spec_49979 dig_in_nid hda_gen_spec 0 49979 NULL +enable_so_subtract_range_fndecl_49980 subtract_range fndecl 3-4 49980 NULL nohasharray -+enable_so_tty_write_room_fndecl_49980 tty_write_room fndecl 0 49980 &enable_so_subtract_range_fndecl_49980 ++enable_so_tty_write_room_fndecl_49980 tty_write_room fndecl 0 49980 &enable_so_subtract_range_fndecl_49980 nohasharray ++enable_so_scsi_debug_opt_blks_vardecl_scsi_debug_c_49980 scsi_debug_opt_blks vardecl_scsi_debug.c 0 49980 &enable_so_tty_write_room_fndecl_49980 +enable_so_mbox_size_wl1271_49981 mbox_size wl1271 0 49981 NULL +enable_so___mms114_read_reg_fndecl_49983 __mms114_read_reg fndecl 3-0 49983 NULL +enable_so_eqc_entry_sz_mthca_dev_lim_49984 eqc_entry_sz mthca_dev_lim 0 49984 NULL @@ -201695,6 +201444,7 @@ index 0000000..4ed1988 +enable_so_xfs_qm_scall_getquota_fndecl_50173 xfs_qm_scall_getquota fndecl 2 50173 NULL +enable_so_mclk_rate_wm9081_priv_50176 mclk_rate wm9081_priv 0 50176 NULL +enable_so_hdr_len_atm_flow_data_50178 hdr_len atm_flow_data 0 50178 NULL ++enable_so_ubi_more_update_data_fndecl_50182 ubi_more_update_data fndecl 4 50182 NULL +enable_so_nested_cr3_nested_state_50183 nested_cr3 nested_state 0 50183 NULL +enable_so_gfs2_create_inode_fndecl_50184 gfs2_create_inode fndecl 7 50184 NULL +enable_so_echo_client_kbrw_fndecl_50193 echo_client_kbrw fndecl 6 50193 NULL @@ -201808,6 +201558,7 @@ index 0000000..4ed1988 +enable_so_do_huge_pmd_wp_page_fallback_fndecl_50585 do_huge_pmd_wp_page_fallback fndecl 7 50585 NULL +enable_so_off2_xad_50592 off2 xad 0 50592 NULL +enable_so_pwrite_dvb_ringbuffer_50594 pwrite dvb_ringbuffer 0 50594 NULL ++enable_so_count_ORANGEFS_dev_map_desc_50596 count ORANGEFS_dev_map_desc 0 50596 NULL +enable_so_intel_gtt_total_entries_fndecl_50599 intel_gtt_total_entries fndecl 0 50599 NULL +enable_so___i915_gem_userptr_set_pages_fndecl_50600 __i915_gem_userptr_set_pages fndecl 3 50600 NULL +enable_so_count_slgt_desc_50607 count slgt_desc 0 50607 NULL @@ -201816,7 +201567,8 @@ index 0000000..4ed1988 +enable_so_dle_count__isdn_audio_data_50619 dle_count _isdn_audio_data 0 50619 &enable_so_len_fuse_notify_inval_inode_out_50619 +enable_so_cb_mirror_cnt_exofs_dt_data_map_50623 cb_mirror_cnt exofs_dt_data_map 0 50623 NULL nohasharray +enable_so_zr364xx_fillbuff_fndecl_50623 zr364xx_fillbuff fndecl 3 50623 &enable_so_cb_mirror_cnt_exofs_dt_data_map_50623 -+enable_so___kfifo_to_user_r_fndecl_50624 __kfifo_to_user_r fndecl 5-3 50624 NULL ++enable_so___kfifo_to_user_r_fndecl_50624 __kfifo_to_user_r fndecl 5-3 50624 NULL nohasharray ++enable_so_buffer_depth_etb_drvdata_50624 buffer_depth etb_drvdata 0 50624 &enable_so___kfifo_to_user_r_fndecl_50624 +enable_so_phys_port_cnt_ib_device_50625 phys_port_cnt ib_device 0 50625 NULL +enable_so_pglen_nfs3_readlinkargs_50630 pglen nfs3_readlinkargs 0 50630 NULL nohasharray +enable_so_data_len_pmcraid_hcam_hdr_50630 data_len pmcraid_hcam_hdr 0 50630 &enable_so_pglen_nfs3_readlinkargs_50630 @@ -201870,6 +201622,7 @@ index 0000000..4ed1988 +enable_so_usb_hcd_map_urb_for_dma_fndecl_50765 usb_hcd_map_urb_for_dma fndecl 0 50765 NULL +enable_so_cifs_readpages_read_into_pages_fndecl_50770 cifs_readpages_read_into_pages fndecl 3 50770 NULL +enable_so_hpfs_get_sector_fndecl_50776 hpfs_get_sector fndecl 2 50776 NULL ++enable_so_vmap_fndecl_50778 vmap fndecl 2 50778 NULL +enable_so_cmd_size_blk_mq_tag_set_50782 cmd_size blk_mq_tag_set 0 50782 NULL +enable_so_readdir_nfs_rpc_ops_50783 readdir nfs_rpc_ops 0 50783 NULL +enable_so_ip_vs_sync_buff_create_fndecl_50787 ip_vs_sync_buff_create fndecl 2 50787 NULL @@ -201908,8 +201661,10 @@ index 0000000..4ed1988 +enable_so_alg_key_len_xfrm_algo_auth_50871 alg_key_len xfrm_algo_auth 0 50871 NULL +enable_so_mtu_adj_ipvl_dev_50874 mtu_adj ipvl_dev 0 50874 NULL +enable_so_mmc_select_hs400_fndecl_50875 mmc_select_hs400 fndecl 0 50875 NULL ++enable_so_max_ceqs_i40iw_hmc_fpm_misc_50878 max_ceqs i40iw_hmc_fpm_misc 0 50878 NULL +enable_so_qib_read_kreg64_fndecl_50881 qib_read_kreg64 fndecl 0 50881 NULL +enable_so___nvme_submit_sync_cmd_fndecl_50882 __nvme_submit_sync_cmd fndecl 5 50882 NULL ++enable_so_sync_file_alloc_fndecl_50886 sync_file_alloc fndecl 1 50886 NULL +enable_so_get_ramdisk_image_fndecl_50888 get_ramdisk_image fndecl 0 50888 NULL +enable_so_pkt_add_fndecl_50890 pkt_add fndecl 3 50890 NULL nohasharray +enable_so_size_t4_sq_50890 size t4_sq 0 50890 &enable_so_pkt_add_fndecl_50890 nohasharray @@ -201949,6 +201704,7 @@ index 0000000..4ed1988 +enable_so_usif_ioctl_fndecl_50986 usif_ioctl fndecl 3 50986 NULL +enable_so_first_burst_len_iscsi_cmd_50987 first_burst_len iscsi_cmd 0 50987 NULL +enable_so_do_get_mempolicy_fndecl_50990 do_get_mempolicy fndecl 3 50990 NULL ++enable_so_msi_num_pci_pbm_info_50995 msi_num pci_pbm_info 0 50995 NULL +enable_so_pa_mic_mw_51003 pa mic_mw 0 51003 NULL nohasharray +enable_so_cb_break_tail_afs_server_51003 cb_break_tail afs_server 0 51003 &enable_so_pa_mic_mw_51003 +enable_so_resize_size_resize_parms_51005 resize_size resize_parms 0 51005 NULL @@ -202030,6 +201786,7 @@ index 0000000..4ed1988 +enable_so_max_desc_sz_mthca_limits_51248 max_desc_sz mthca_limits 0 51248 NULL +enable_so_max_gs_mlx4_ib_wq_51251 max_gs mlx4_ib_wq 0 51251 NULL nohasharray +enable_so_cdev_add_fndecl_51251 cdev_add fndecl 2-3 51251 &enable_so_max_gs_mlx4_ib_wq_51251 ++enable_so_imxdma_prep_dma_cyclic_fndecl_51257 imxdma_prep_dma_cyclic fndecl 4-3 51257 NULL +enable_so_create_srq_user_fndecl_51260 create_srq_user fndecl 5 51260 NULL +enable_so_maxdatafieldsize_vnic_fc_config_51275 maxdatafieldsize vnic_fc_config 0 51275 NULL +enable_so_ceph_decode_16_fndecl_51276 ceph_decode_16 fndecl 0 51276 NULL @@ -202082,7 +201839,8 @@ index 0000000..4ed1988 +enable_so_num_rx_queues_ixgbevf_adapter_51428 num_rx_queues ixgbevf_adapter 0 51428 NULL +enable_so_hns_nic_reuse_page_fndecl_51437 hns_nic_reuse_page fndecl 2 51437 NULL +enable_so_send_extent_data_fndecl_51438 send_extent_data fndecl 2 51438 NULL nohasharray -+enable_so_nethctrl_vf_resources_51438 nethctrl vf_resources 0 51438 &enable_so_send_extent_data_fndecl_51438 ++enable_so_nethctrl_vf_resources_51438 nethctrl vf_resources 0 51438 &enable_so_send_extent_data_fndecl_51438 nohasharray ++enable_so_size_omap3isp_ccdc_lsc_config_51438 size omap3isp_ccdc_lsc_config 0 51438 &enable_so_nethctrl_vf_resources_51438 +enable_so_max_cmds_ipr_ioa_cfg_51439 max_cmds ipr_ioa_cfg 0 51439 NULL +enable_so_xfs_free_file_space_fndecl_51452 xfs_free_file_space fndecl 2-3 51452 NULL +enable_so_pcpu_fc_free_fndecl_51456 pcpu_fc_free fndecl 2 51456 NULL @@ -202136,6 +201894,8 @@ index 0000000..4ed1988 +enable_so_receive_mergeable_fndecl_51601 receive_mergeable fndecl 5-4 51601 NULL nohasharray +enable_so_wilc_add_beacon_fndecl_51601 wilc_add_beacon fndecl 6-4 51601 &enable_so_receive_mergeable_fndecl_51601 +enable_so_va_for_temp_scif_window_51603 va_for_temp scif_window 0 51603 NULL ++enable_so_vfp_get_fndecl_51605 vfp_get fndecl 3-4 51605 NULL ++enable_so_etb_get_buffer_depth_fndecl_51607 etb_get_buffer_depth fndecl 0 51607 NULL +enable_so_data_transfer_length_vmscsi_request_51616 data_transfer_length vmscsi_request 0 51616 NULL nohasharray +enable_so_cur_vfio_pci_fill_info_51616 cur vfio_pci_fill_info 0 51616 &enable_so_data_transfer_length_vmscsi_request_51616 +enable_so_alloc_ltalkdev_fndecl_51620 alloc_ltalkdev fndecl 1 51620 NULL @@ -202149,10 +201909,12 @@ index 0000000..4ed1988 +enable_so_SsidLength_ndis_802_11_ssid_51638 SsidLength ndis_802_11_ssid 0 51638 NULL +enable_so_remap_cell_to_cache_dirty_fndecl_51640 remap_cell_to_cache_dirty fndecl 4 51640 NULL +enable_so__xfs_buf_alloc_fndecl_51641 _xfs_buf_alloc fndecl 3 51641 NULL ++enable_so_imm_count_jit_ctx_51643 imm_count jit_ctx 0 51643 NULL +enable_so_hsu_dma_desc_size_fndecl_51647 hsu_dma_desc_size fndecl 0 51647 NULL nohasharray +enable_so_nsm_create_handle_fndecl_51647 nsm_create_handle fndecl 4 51647 &enable_so_hsu_dma_desc_size_fndecl_51647 +enable_so_kernfs_dir_fop_llseek_fndecl_51649 kernfs_dir_fop_llseek fndecl 2 51649 NULL -+enable_so_max_txsz_cxgbi_ddp_info_51655 max_txsz cxgbi_ddp_info 0 51655 NULL ++enable_so_max_txsz_cxgbi_ddp_info_51655 max_txsz cxgbi_ddp_info 0 51655 NULL nohasharray ++enable_so_tx_ring_size_gfar_priv_tx_q_51655 tx_ring_size gfar_priv_tx_q 0 51655 &enable_so_max_txsz_cxgbi_ddp_info_51655 +enable_so_o2hb_read_slots_fndecl_51658 o2hb_read_slots fndecl 2 51658 NULL +enable_so_create_cache_fndecl_51660 create_cache fndecl 3-4-2 51660 NULL +enable_so_inet_set_ifa_fndecl_51661 inet_set_ifa fndecl 0 51661 NULL @@ -202257,6 +202019,7 @@ index 0000000..4ed1988 +enable_so_max_channels_efx_nic_51955 max_channels efx_nic 0 51955 &enable_so___remaining_sg_mapping_iter_51955 nohasharray +enable_so_num_mpt_mlx4_profile_51955 num_mpt mlx4_profile 0 51955 &enable_so_max_channels_efx_nic_51955 +enable_so___blk_queue_init_tags_fndecl_51956 __blk_queue_init_tags fndecl 2 51956 NULL ++enable_so_ofdpa_group_l2_fan_out_fndecl_51958 ofdpa_group_l2_fan_out fndecl 4 51958 NULL +enable_so_meta_total_blocks_r5l_recovery_ctx_51960 meta_total_blocks r5l_recovery_ctx 0 51960 NULL +enable_so_pipe_src_w_intel_crtc_state_51963 pipe_src_w intel_crtc_state 0 51963 NULL nohasharray +enable_so_num_eqs_mthca_limits_51963 num_eqs mthca_limits 0 51963 &enable_so_pipe_src_w_intel_crtc_state_51963 @@ -202352,12 +202115,14 @@ index 0000000..4ed1988 +enable_so_write_enabled_file_bool_fndecl_52213 write_enabled_file_bool fndecl 3 52213 NULL +enable_so_num_dtv_properties_52216 num dtv_properties 0 52216 NULL +enable_so_numlower_ovl_entry_52218 numlower ovl_entry 0 52218 NULL ++enable_so_max_sge_rvt_rq_52222 max_sge rvt_rq 0 52222 NULL +enable_so_BlockSize_erase_unit_header_t_52231 BlockSize erase_unit_header_t 0 52231 NULL +enable_so_lpc_sch_get_io_fndecl_52232 lpc_sch_get_io fndecl 5 52232 NULL +enable_so_nfs3_proc_readlink_fndecl_52235 nfs3_proc_readlink fndecl 4-3 52235 NULL +enable_so_num_ports_mthca_limits_52246 num_ports mthca_limits 0 52246 NULL +enable_so_efs_iget_fndecl_52247 efs_iget fndecl 2 52247 NULL -+enable_so_paddr_drm_gem_cma_object_52250 paddr drm_gem_cma_object 0 52250 NULL ++enable_so_paddr_drm_gem_cma_object_52250 paddr drm_gem_cma_object 0 52250 NULL nohasharray ++enable_so_size_elf_note_info_52250 size elf_note_info 0 52250 &enable_so_paddr_drm_gem_cma_object_52250 +enable_so_snd_hda_get_conn_list_fndecl_52255 snd_hda_get_conn_list fndecl 0 52255 NULL +enable_so_bufsize_brcmf_console_52266 bufsize brcmf_console 0 52266 NULL +enable_so_value_len_xattr_52269 value_len xattr 0 52269 NULL nohasharray @@ -202491,6 +202256,7 @@ index 0000000..4ed1988 +enable_so_lo_rw_aio_complete_fndecl_52629 lo_rw_aio_complete fndecl 2 52629 NULL nohasharray +enable_so_drbd_new_dev_size_fndecl_52629 drbd_new_dev_size fndecl 0-3 52629 &enable_so_lo_rw_aio_complete_fndecl_52629 +enable_so_auok190xfb_write_fndecl_52634 auok190xfb_write fndecl 3 52634 NULL ++enable_so_vaddr_hfi1_tid_info_52635 vaddr hfi1_tid_info 0 52635 NULL +enable_so_burst_len_qcaspi_52637 burst_len qcaspi 0 52637 NULL nohasharray +enable_so_setxattr_fndecl_52637 setxattr fndecl 4 52637 &enable_so_burst_len_qcaspi_52637 +enable_so___do_fault_fndecl_52642 __do_fault fndecl 3 52642 NULL @@ -202623,9 +202389,11 @@ index 0000000..4ed1988 +enable_so_cols_cros_ec_keyb_53054 cols cros_ec_keyb 0 53054 NULL +enable_so_m_len_ext4_map_blocks_53056 m_len ext4_map_blocks 0 53056 NULL +enable_so_s_inode_size_nilfs_super_block_53064 s_inode_size nilfs_super_block 0 53064 NULL ++enable_so_pxad_prep_memcpy_fndecl_53065 pxad_prep_memcpy fndecl 4 53065 NULL +enable_so_get_pdev_same_bus_fndecl_53069 get_pdev_same_bus fndecl 2 53069 NULL +enable_so_kvm_vcpu_write_guest_page_fndecl_53070 kvm_vcpu_write_guest_page fndecl 2-5 53070 NULL +enable_so_rcvegrcnt_qib_chip_specific_53071 rcvegrcnt qib_chip_specific 0 53071 NULL ++enable_so_omap_hwmod_mux_init_fndecl_53072 omap_hwmod_mux_init fndecl 2 53072 NULL +enable_so_fru_alloc_fndecl_53073 fru_alloc fndecl 1 53073 NULL +enable_so_get_rx_frame_len_sxgbe_desc_ops_53074 get_rx_frame_len sxgbe_desc_ops 0 53074 NULL +enable_so_wMTU_usb_cdc_mbim_extended_desc_53075 wMTU usb_cdc_mbim_extended_desc 0 53075 NULL nohasharray @@ -202730,6 +202498,7 @@ index 0000000..4ed1988 +enable_so_v9fs_xattr_set_fndecl_53342 v9fs_xattr_set fndecl 4 53342 NULL +enable_so_SYSC_sched_getaffinity_fndecl_53347 SYSC_sched_getaffinity fndecl 2 53347 NULL +enable_so_ioc_len_libcfs_ioctl_hdr_53352 ioc_len libcfs_ioctl_hdr 0 53352 NULL ++enable_so_frag_size_hwbm_pool_53355 frag_size hwbm_pool 0 53355 NULL +enable_so_ali1563_smba_vardecl_i2c_ali1563_c_53362 ali1563_smba vardecl_i2c-ali1563.c 0 53362 NULL +enable_so___xdr_inline_decode_fndecl_53363 __xdr_inline_decode fndecl 2 53363 NULL +enable_so_ramoops_init_przs_fndecl_53364 ramoops_init_przs fndecl 4 53364 NULL @@ -202751,6 +202520,7 @@ index 0000000..4ed1988 +enable_so_irda_recvmsg_stream_fndecl_53403 irda_recvmsg_stream fndecl 3 53403 NULL +enable_so_num_entries_s2io_nic_53404 num_entries s2io_nic 0 53404 NULL +enable_so_len_nft_cmp_fast_expr_53407 len nft_cmp_fast_expr 0 53407 NULL ++enable_so_set_rcvarray_entry_fndecl_53410 set_rcvarray_entry fndecl 6 53410 NULL +enable_so_dib9000_firmware_download_fndecl_53415 dib9000_firmware_download fndecl 5 53415 NULL nohasharray +enable_so_cfs_hash_buckets_realloc_fndecl_53415 cfs_hash_buckets_realloc fndecl 4 53415 &enable_so_dib9000_firmware_download_fndecl_53415 +enable_so_vlan_dev_set_egress_priority_fndecl_53418 vlan_dev_set_egress_priority fndecl 3 53418 NULL nohasharray @@ -202912,6 +202682,7 @@ index 0000000..4ed1988 +enable_so_gsmtty_write_fndecl_53837 gsmtty_write fndecl 3 53837 NULL +enable_so_num_sensors_ibmpex_bmc_data_53838 num_sensors ibmpex_bmc_data 0 53838 NULL +enable_so_resp_ie_length_ndis_80211_assoc_info_53840 resp_ie_length ndis_80211_assoc_info 0 53840 NULL ++enable_so_ssid_len_hidden_net_info_53841 ssid_len hidden_net_info 0 53841 NULL +enable_so_xillybus_read_fndecl_53845 xillybus_read fndecl 3 53845 NULL +enable_so_ext4_mb_discard_group_preallocations_fndecl_53854 ext4_mb_discard_group_preallocations fndecl 2 53854 NULL +enable_so_minleft_xfs_alloc_arg_53855 minleft xfs_alloc_arg 0 53855 NULL @@ -202942,7 +202713,8 @@ index 0000000..4ed1988 +enable_so_chip_sdma_engines_hfi1_devdata_53934 chip_sdma_engines hfi1_devdata 0 53934 NULL +enable_so_i40e_init_lan_hmc_fndecl_53935 i40e_init_lan_hmc fndecl 2-3-4-5 53935 NULL +enable_so_depth_tm6000_fmt_53938 depth tm6000_fmt 0 53938 NULL -+enable_so_ip4ip6_err_fndecl_53943 ip4ip6_err fndecl 5 53943 NULL ++enable_so_ip4ip6_err_fndecl_53943 ip4ip6_err fndecl 5 53943 NULL nohasharray ++enable_so__find_first_zero_bit_be_fndecl_53943 _find_first_zero_bit_be fndecl 0 53943 &enable_so_ip4ip6_err_fndecl_53943 +enable_so_llc_mac_header_len_fndecl_53947 llc_mac_header_len fndecl 0 53947 NULL +enable_so_buffer_end_nm256_53949 buffer_end nm256 0 53949 NULL +enable_so_swiotlb_nr_tbl_fndecl_53950 swiotlb_nr_tbl fndecl 0 53950 NULL @@ -203205,6 +202977,7 @@ index 0000000..4ed1988 +enable_so_ssid_len_hostap_bss_info_54670 ssid_len hostap_bss_info 0 54670 NULL +enable_so_sb_imax_pct_xfs_sb_54671 sb_imax_pct xfs_sb 0 54671 NULL +enable_so_compat_SyS_kexec_load_fndecl_54672 compat_SyS_kexec_load fndecl 2 54672 NULL ++enable_so_auxdev_write_fndecl_54681 auxdev_write fndecl 3 54681 NULL +enable_so_id_pps_device_54684 id pps_device 0 54684 NULL +enable_so_i2c_transfer_fndecl_54685 i2c_transfer fndecl 0 54685 NULL +enable_so___lpfc_sli_issue_iocb_fndecl_54687 __lpfc_sli_issue_iocb fndecl 0 54687 NULL @@ -203241,6 +203014,7 @@ index 0000000..4ed1988 +enable_so_xfs_rtallocate_extent_fndecl_54783 xfs_rtallocate_extent fndecl 2-8-4 54783 NULL +enable_so_rcvegrbuf_chunks_qib_ctxtdata_54789 rcvegrbuf_chunks qib_ctxtdata 0 54789 NULL +enable_so_size_dvb_ringbuffer_54794 size dvb_ringbuffer 0 54794 NULL ++enable_so_cqm_max_rmid_vardecl_cqm_c_54798 cqm_max_rmid vardecl_cqm.c 0 54798 NULL +enable_so_num_sg_agp_memory_54800 num_sg agp_memory 0 54800 NULL +enable_so_spk_msg_set_fndecl_54801 spk_msg_set fndecl 3 54801 NULL +enable_so_num_snd_bebob_meter_spec_54805 num snd_bebob_meter_spec 0 54805 NULL @@ -203382,7 +203156,8 @@ index 0000000..4ed1988 +enable_so_async_setkey_fndecl_55250 async_setkey fndecl 3 55250 NULL +enable_so_req_ring_size_srp_target_port_55251 req_ring_size srp_target_port 0 55251 NULL +enable_so_d_reclen_venus_dirent_55253 d_reclen venus_dirent 0 55253 NULL -+enable_so_size_pci_cap_saved_data_55258 size pci_cap_saved_data 0 55258 NULL ++enable_so_size_pci_cap_saved_data_55258 size pci_cap_saved_data 0 55258 NULL nohasharray ++enable_so_drm_dp_dual_mode_write_fndecl_55258 drm_dp_dual_mode_write fndecl 4 55258 &enable_so_size_pci_cap_saved_data_55258 +enable_so___filemap_fdatawrite_range_fndecl_55259 __filemap_fdatawrite_range fndecl 0-2-3 55259 NULL +enable_so_bpf_convert_filter_fndecl_55264 bpf_convert_filter fndecl 2 55264 NULL +enable_so_mbox_count_blogic_adapter_55274 mbox_count blogic_adapter 0 55274 NULL @@ -203417,6 +203192,7 @@ index 0000000..4ed1988 +enable_so_cdc_mbim_process_dgram_fndecl_55371 cdc_mbim_process_dgram fndecl 4-3 55371 NULL nohasharray +enable_so_sctp_addto_param_fndecl_55371 sctp_addto_param fndecl 2 55371 &enable_so_cdc_mbim_process_dgram_fndecl_55371 +enable_so_connect_frontend_dmx_demux_55378 connect_frontend dmx_demux 0 55378 NULL ++enable_so_find_phys_blocks_fndecl_55388 find_phys_blocks fndecl 0 55388 NULL +enable_so_DataLength_smb2_write_rsp_55389 DataLength smb2_write_rsp 0 55389 NULL +enable_so_st_sensors_spi_read_multiple_byte_fndecl_55393 st_sensors_spi_read_multiple_byte fndecl 4 55393 NULL +enable_so_dxfer_len_skd_sg_io_55394 dxfer_len skd_sg_io 0 55394 NULL @@ -203489,7 +203265,8 @@ index 0000000..4ed1988 +enable_so_length_ipw_rx_frame_55612 length ipw_rx_frame 0 55612 NULL +enable_so_alg_trunc_len_xfrm_algo_auth_55613 alg_trunc_len xfrm_algo_auth 0 55613 NULL +enable_so_initial_width_vmw_private_55615 initial_width vmw_private 0 55615 NULL nohasharray -+enable_so_ybpp_camif_fmt_55615 ybpp camif_fmt 0 55615 &enable_so_initial_width_vmw_private_55615 ++enable_so_ybpp_camif_fmt_55615 ybpp camif_fmt 0 55615 &enable_so_initial_width_vmw_private_55615 nohasharray ++enable_so_x___una_u64_55615 x __una_u64 0 55615 &enable_so_ybpp_camif_fmt_55615 +enable_so_vmci_transport_dgram_dequeue_fndecl_55628 vmci_transport_dgram_dequeue fndecl 3 55628 NULL +enable_so_bin_string_fndecl_55631 bin_string fndecl 5-3 55631 NULL +enable_so_hfsplus_ext_read_extent_fndecl_55633 hfsplus_ext_read_extent fndecl 2 55633 NULL @@ -203680,10 +203457,12 @@ index 0000000..4ed1988 +enable_so_sample_stack_user_perf_event_attr_56220 sample_stack_user perf_event_attr 0 56220 NULL +enable_so_offset_cifs_writedata_56222 offset cifs_writedata 0 56222 NULL nohasharray +enable_so_reg_cache_size_snd_soc_codec_driver_56222 reg_cache_size snd_soc_codec_driver 0 56222 &enable_so_offset_cifs_writedata_56222 -+enable_so_offset_iscsi_data_rsp_56223 offset iscsi_data_rsp 0 56223 NULL ++enable_so_offset_iscsi_data_rsp_56223 offset iscsi_data_rsp 0 56223 NULL nohasharray ++enable_so_reg_cache_size_omap_mcbsp_56223 reg_cache_size omap_mcbsp 0 56223 &enable_so_offset_iscsi_data_rsp_56223 +enable_so_depth_s2255_fmt_56229 depth s2255_fmt 0 56229 NULL +enable_so_ocfs2_mv_xattr_buckets_fndecl_56231 ocfs2_mv_xattr_buckets fndecl 6-3-5-4 56231 NULL +enable_so_security_inode_permission_fndecl_56235 security_inode_permission fndecl 0 56235 NULL ++enable_so_rvt_alloc_mr_fndecl_56236 rvt_alloc_mr fndecl 3 56236 NULL +enable_so_wm8350_register_led_fndecl_56237 wm8350_register_led fndecl 2-4-3 56237 NULL +enable_so_max_recv_dlength_iscsi_bus_flash_conn_56238 max_recv_dlength iscsi_bus_flash_conn 0 56238 NULL +enable_so_af9013_wr_regs_fndecl_56239 af9013_wr_regs fndecl 4 56239 NULL @@ -203693,7 +203472,6 @@ index 0000000..4ed1988 +enable_so_dt_gpio_count_fndecl_56245 dt_gpio_count fndecl 0 56245 &enable_so_cfpkt_peek_head_fndecl_56245 +enable_so_qtd_fill_fndecl_56249 qtd_fill fndecl 5-6-3-0-4 56249 NULL +enable_so_size_uvc_xu_control_query_56263 size uvc_xu_control_query 0 56263 NULL -+enable_so_size_udata_s_56266 size udata_s 0 56266 NULL +enable_so_dmreq_start_crypt_config_56268 dmreq_start crypt_config 0 56268 NULL +enable_so_qp_alloc_res_fndecl_56275 qp_alloc_res fndecl 5 56275 NULL +enable_so_vyres_crtc_56276 vyres crtc 0 56276 NULL @@ -203757,6 +203535,7 @@ index 0000000..4ed1988 +enable_so_SyS_poll_fndecl_56467 SyS_poll fndecl 2 56467 NULL +enable_so_banks_mca_config_56472 banks mca_config 0 56472 NULL +enable_so___erst_clear_from_storage_fndecl_56476 __erst_clear_from_storage fndecl 1 56476 NULL ++enable_so_sb_cnt_qed_sb_cnt_info_56477 sb_cnt qed_sb_cnt_info 0 56477 NULL +enable_so_func_suspend_usb_function_56478 func_suspend usb_function 0 56478 NULL +enable_so_dataflash_read_fact_otp_fndecl_56487 dataflash_read_fact_otp fndecl 3-2 56487 NULL +enable_so_xen_allocate_irqs_dynamic_fndecl_56489 xen_allocate_irqs_dynamic fndecl 0 56489 NULL nohasharray @@ -203775,6 +203554,7 @@ index 0000000..4ed1988 +enable_so_xbfi_startblock_xfs_bmap_free_item_56529 xbfi_startblock xfs_bmap_free_item 0 56529 NULL +enable_so_vp_modern_find_vqs_fndecl_56530 vp_modern_find_vqs fndecl 2 56530 NULL nohasharray +enable_so_nm_block_nr_nl_mmap_req_56530 nm_block_nr nl_mmap_req 0 56530 &enable_so_vp_modern_find_vqs_fndecl_56530 ++enable_so_priv_size_rocker_world_ops_56542 priv_size rocker_world_ops 0 56542 NULL +enable_so_core_size_rw_module_56544 core_size_rw module 0 56544 NULL nohasharray +enable_so_snd_pcm_plug_client_size_fndecl_56544 snd_pcm_plug_client_size fndecl 0-2 56544 &enable_so_core_size_rw_module_56544 +enable_so_max_ethqsets_sge_56552 max_ethqsets sge 0 56552 NULL @@ -203818,7 +203598,8 @@ index 0000000..4ed1988 +enable_so_new_tape_buffer_fndecl_56689 new_tape_buffer fndecl 2 56689 NULL +enable_so_ks8851_rdreg_fndecl_56695 ks8851_rdreg fndecl 4 56695 NULL +enable_so_remove_migration_pte_fndecl_56701 remove_migration_pte fndecl 3 56701 NULL nohasharray -+enable_so_ath6kl_wmi_set_rssi_filter_cmd_fndecl_56701 ath6kl_wmi_set_rssi_filter_cmd fndecl 2 56701 &enable_so_remove_migration_pte_fndecl_56701 ++enable_so_ath6kl_wmi_set_rssi_filter_cmd_fndecl_56701 ath6kl_wmi_set_rssi_filter_cmd fndecl 2 56701 &enable_so_remove_migration_pte_fndecl_56701 nohasharray ++enable_so___qcom_scm_hdcp_req_fndecl_56701 __qcom_scm_hdcp_req fndecl 2 56701 &enable_so_ath6kl_wmi_set_rssi_filter_cmd_fndecl_56701 +enable_so_usb_err_gspca_dev_56706 usb_err gspca_dev 0 56706 NULL +enable_so_mmc_erase_fndecl_56707 mmc_erase fndecl 0 56707 NULL +enable_so_mlx5_modify_nic_vport_mac_list_fndecl_56715 mlx5_modify_nic_vport_mac_list fndecl 4 56715 NULL @@ -203830,6 +203611,7 @@ index 0000000..4ed1988 +enable_so_rcvegrbuf_size_qib_ctxtdata_56720 rcvegrbuf_size qib_ctxtdata 0 56720 &enable_so_ext4_get_group_number_fndecl_56720 +enable_so_opcnt_nfsd4_compoundargs_56722 opcnt nfsd4_compoundargs 0 56722 NULL +enable_so_offset_cw1200_txpriv_56729 offset cw1200_txpriv 0 56729 NULL ++enable_so_tx_ring_size_mvpp2_port_56735 tx_ring_size mvpp2_port 0 56735 NULL +enable_so_search_empty_fndecl_56737 search_empty fndecl 2 56737 NULL +enable_so_drm_gem_cma_create_fndecl_56742 drm_gem_cma_create fndecl 2 56742 NULL nohasharray +enable_so_val_len_ceph_inode_xattr_56742 val_len ceph_inode_xattr 0 56742 &enable_so_drm_gem_cma_create_fndecl_56742 @@ -203959,6 +203741,7 @@ index 0000000..4ed1988 +enable_so_part_shift_vardecl_loop_c_57103 part_shift vardecl_loop.c 0 57103 NULL nohasharray +enable_so_mcs7830_get_reg_fndecl_57103 mcs7830_get_reg fndecl 3 57103 &enable_so_part_shift_vardecl_loop_c_57103 +enable_so_sync_pt_create_fndecl_57105 sync_pt_create fndecl 2 57105 NULL ++enable_so_sys_oabi_semop_fndecl_57109 sys_oabi_semop fndecl 3 57109 NULL +enable_so_wm_adsp_buffer_size_fndecl_57116 wm_adsp_buffer_size fndecl 0 57116 NULL +enable_so_total_sections_f2fs_sb_info_57118 total_sections f2fs_sb_info 0 57118 NULL +enable_so_size_nvif_notify_57130 size nvif_notify 0 57130 NULL @@ -204043,7 +203826,8 @@ index 0000000..4ed1988 +enable_so_dqi_giblk_ocfs2_mem_dqinfo_57374 dqi_giblk ocfs2_mem_dqinfo 0 57374 NULL +enable_so_rcount_slip_57376 rcount slip 0 57376 NULL +enable_so_kfd_pasid_alloc_fndecl_57381 kfd_pasid_alloc fndecl 0 57381 NULL -+enable_so_icl_ag_xfs_icreate_log_57387 icl_ag xfs_icreate_log 0 57387 NULL ++enable_so_icl_ag_xfs_icreate_log_57387 icl_ag xfs_icreate_log 0 57387 NULL nohasharray ++enable_so_copy_from_user_fixup_fndecl_57387 copy_from_user_fixup fndecl 0 57387 &enable_so_icl_ag_xfs_icreate_log_57387 +enable_so_rs_total_drbd_device_57388 rs_total drbd_device 0 57388 NULL +enable_so_div64_u64_rem_fndecl_57393 div64_u64_rem fndecl 0 57393 NULL +enable_so_uhid_event_from_user_fndecl_57394 uhid_event_from_user fndecl 2 57394 NULL @@ -204164,6 +203948,7 @@ index 0000000..4ed1988 +enable_so_read_file_recv_fndecl_57723 read_file_recv fndecl 3 57723 NULL +enable_so_x509_akid_note_kid_fndecl_57725 x509_akid_note_kid fndecl 5 57725 NULL +enable_so_partition_sched_domains_fndecl_57727 partition_sched_domains fndecl 1 57727 NULL ++enable_so_hi6220_register_clkdiv_fndecl_57729 hi6220_register_clkdiv fndecl 7 57729 NULL +enable_so_byte_read_data_parport_operations_57730 byte_read_data parport_operations 0 57730 NULL +enable_so_max_devs_vardecl_aic94xx_hwi_c_57731 max_devs vardecl_aic94xx_hwi.c 0 57731 NULL +enable_so_opts1_cp_desc_57736 opts1 cp_desc 0 57736 NULL nohasharray @@ -204179,6 +203964,7 @@ index 0000000..4ed1988 +enable_so_res_hor_val_pvr2_hdw_57754 res_hor_val pvr2_hdw 0 57754 NULL +enable_so_remove_memory_fndecl_57755 remove_memory fndecl 3-2 57755 NULL +enable_so_cache_write_pipefs_fndecl_57757 cache_write_pipefs fndecl 3 57757 NULL ++enable_so_tidcnt_hfi1_tid_info_57758 tidcnt hfi1_tid_info 0 57758 NULL +enable_so_timblogiw_read_fndecl_57762 timblogiw_read fndecl 3 57762 NULL +enable_so_kernel_sendmsg_fndecl_57763 kernel_sendmsg fndecl 0-5-4 57763 NULL +enable_so_numEntries__ATOM_PPLIB_ACPClk_Voltage_Limit_Table_57767 numEntries _ATOM_PPLIB_ACPClk_Voltage_Limit_Table 0 57767 NULL nohasharray @@ -204324,6 +204110,7 @@ index 0000000..4ed1988 +enable_so_size_skb_frag_struct_58222 size skb_frag_struct 0 58222 NULL +enable_so_xfs_attr_set_fndecl_58225 xfs_attr_set fndecl 4 58225 NULL +enable_so_ubifs_jnl_write_data_fndecl_58229 ubifs_jnl_write_data fndecl 5 58229 NULL ++enable_so_spi_replace_transfers_fndecl_58231 spi_replace_transfers fndecl 6-4 58231 NULL +enable_so_ath6kl_regwrite_read_fndecl_58232 ath6kl_regwrite_read fndecl 3 58232 NULL +enable_so_ath6kl_usb_bmi_read_fndecl_58234 ath6kl_usb_bmi_read fndecl 3 58234 NULL +enable_so_len_on_bd_bnx2x_agg_info_58236 len_on_bd bnx2x_agg_info 0 58236 NULL @@ -204333,6 +204120,7 @@ index 0000000..4ed1988 +enable_so_ies_len_cfg80211_ft_event_params_58259 ies_len cfg80211_ft_event_params 0 58259 NULL +enable_so_gpiod_count_fndecl_58262 gpiod_count fndecl 0 58262 NULL +enable_so_l2cap_segment_sdu_fndecl_58263 l2cap_segment_sdu fndecl 4 58263 NULL ++enable_so_mvneta_check_mtu_valid_fndecl_58264 mvneta_check_mtu_valid fndecl 0-2 58264 NULL +enable_so_cb710_mmc_transfer_data_fndecl_58265 cb710_mmc_transfer_data fndecl 0 58265 NULL +enable_so_file_size_fnode_58268 file_size fnode 0 58268 NULL +enable_so_em28xx_set_video_format_fndecl_58273 em28xx_set_video_format fndecl 3-4 58273 NULL @@ -204463,7 +204251,8 @@ index 0000000..4ed1988 +enable_so_dccps_gss_dccp_sock_58634 dccps_gss dccp_sock 0 58634 NULL +enable_so_layout_mdu_array_info_s_58636 layout mdu_array_info_s 0 58636 NULL nohasharray +enable_so_ext4_ext_handle_unwritten_extents_fndecl_58636 ext4_ext_handle_unwritten_extents fndecl 7-0-6 58636 &enable_so_layout_mdu_array_info_s_58636 -+enable_so_mei_cldev_recv_fndecl_58637 mei_cldev_recv fndecl 0-3 58637 NULL ++enable_so_mei_cldev_recv_fndecl_58637 mei_cldev_recv fndecl 0-3 58637 NULL nohasharray ++enable_so_num_iwarp_msix_i40e_pf_58637 num_iwarp_msix i40e_pf 0 58637 &enable_so_mei_cldev_recv_fndecl_58637 +enable_so_pgbase_nfs4_readdir_arg_58643 pgbase nfs4_readdir_arg 0 58643 NULL nohasharray +enable_so_offset_qib_mregion_58643 offset qib_mregion 0 58643 &enable_so_pgbase_nfs4_readdir_arg_58643 +enable_so_msc_single_to_user_fndecl_58646 msc_single_to_user fndecl 4-3 58646 NULL @@ -204514,7 +204303,8 @@ index 0000000..4ed1988 +enable_so_vsnprintf_fndecl_58792 vsnprintf fndecl 0 58792 NULL +enable_so_mppe_decompress_fndecl_58795 mppe_decompress fndecl 3 58795 NULL +enable_so_blkbits_dio_submit_58797 blkbits dio_submit 0 58797 NULL -+enable_so_wNumRPipes_usb_wa_descriptor_58804 wNumRPipes usb_wa_descriptor 0 58804 NULL ++enable_so_wNumRPipes_usb_wa_descriptor_58804 wNumRPipes usb_wa_descriptor 0 58804 NULL nohasharray ++enable_so_ci_flags_fscrypt_info_58804 ci_flags fscrypt_info 0 58804 &enable_so_wNumRPipes_usb_wa_descriptor_58804 +enable_so_snd_pcm_hw_constraint_minmax_fndecl_58816 snd_pcm_hw_constraint_minmax fndecl 4-3 58816 NULL +enable_so_data_size_iser_page_vec_58817 data_size iser_page_vec 0 58817 NULL +enable_so_slen_snap_58819 slen snap 0 58819 NULL @@ -204579,6 +204369,7 @@ index 0000000..4ed1988 +enable_so_trace_max_pages_vardecl_59000 trace_max_pages vardecl 0 59000 NULL +enable_so_private_value_snd_kcontrol_59001 private_value snd_kcontrol 0 59001 NULL nohasharray +enable_so_num_lun_nvm_id_group_59001 num_lun nvm_id_group 0 59001 &enable_so_private_value_snd_kcontrol_59001 ++enable_so_vsnprintf_fndecl_59003 vsnprintf fndecl 0 59003 NULL +enable_so_wa_urb_dequeue_fndecl_59008 wa_urb_dequeue fndecl 3 59008 NULL +enable_so_numextents_efs_inode_info_59009 numextents efs_inode_info 0 59009 NULL +enable_so_amdgpu_vram_location_fndecl_59010 amdgpu_vram_location fndecl 3 59010 NULL @@ -204615,6 +204406,7 @@ index 0000000..4ed1988 +enable_so_remap_and_issue_shared_cell_fndecl_59114 remap_and_issue_shared_cell fndecl 3 59114 NULL +enable_so_wm_latency_write_fndecl_59118 wm_latency_write fndecl 3 59118 NULL +enable_so_sec_per_clus_fat_floppy_defaults_59119 sec_per_clus fat_floppy_defaults 0 59119 NULL ++enable_so_omapdss_count_strings_fndecl_59120 omapdss_count_strings fndecl 0 59120 NULL +enable_so_mmc_alloc_host_fndecl_59122 mmc_alloc_host fndecl 1 59122 NULL +enable_so_width_em28xx_v4l2_59127 width em28xx_v4l2 0 59127 NULL nohasharray +enable_so_xfs_read_agi_fndecl_59127 xfs_read_agi fndecl 3 59127 &enable_so_width_em28xx_v4l2_59127 @@ -204666,6 +204458,7 @@ index 0000000..4ed1988 +enable_so_rcvidx_hdlc_hw_59264 rcvidx hdlc_hw 0 59264 NULL nohasharray +enable_so_nilfs_sufile_get_offset_fndecl_59264 nilfs_sufile_get_offset fndecl 0-2 59264 &enable_so_rcvidx_hdlc_hw_59264 +enable_so_indir_size_ethtool_rxfh_59267 indir_size ethtool_rxfh 0 59267 NULL ++enable_so_number_of_sets_host_cmd_ds_802_11_scan_rsp_59273 number_of_sets host_cmd_ds_802_11_scan_rsp 0 59273 NULL +enable_so_h_lsn_xlog_rec_header_59275 h_lsn xlog_rec_header 0 59275 NULL +enable_so_bfad_iocmd_lport_reset_stats_fndecl_59279 bfad_iocmd_lport_reset_stats fndecl 0 59279 NULL nohasharray +enable_so_data_length_bnx2i_cmd_response_59279 data_length bnx2i_cmd_response 0 59279 &enable_so_bfad_iocmd_lport_reset_stats_fndecl_59279 @@ -204674,6 +204467,7 @@ index 0000000..4ed1988 +enable_so_used_snd_array_59285 used snd_array 0 59285 NULL nohasharray +enable_so_mvumi_alloc_mem_resource_fndecl_59285 mvumi_alloc_mem_resource fndecl 3 59285 &enable_so_used_snd_array_59285 +enable_so_written_coredump_params_59286 written coredump_params 0 59286 NULL ++enable_so_nr_regs_omap_prcm_irq_setup_59292 nr_regs omap_prcm_irq_setup 0 59292 NULL +enable_so_alloc_sched_domains_fndecl_59295 alloc_sched_domains fndecl 1 59295 NULL +enable_so_posix_acl_fix_xattr_from_user_fndecl_59298 posix_acl_fix_xattr_from_user fndecl 2 59298 NULL +enable_so_sb_rootino_xfs_sb_59299 sb_rootino xfs_sb 0 59299 NULL nohasharray @@ -204811,6 +204605,7 @@ index 0000000..4ed1988 +enable_so_ms_read_bytes_fndecl_59672 ms_read_bytes fndecl 4-0 59672 NULL +enable_so_old_block_size_swap_info_struct_59674 old_block_size swap_info_struct 0 59674 NULL +enable_so_xprt_hlen_svc_deferred_req_59683 xprt_hlen svc_deferred_req 0 59683 NULL ++enable_so_get_user_pages_fndecl_59686 get_user_pages fndecl 0 59686 NULL +enable_so_rtw_buf_update_fndecl_59689 rtw_buf_update fndecl 4 59689 NULL +enable_so_capacity_sddr55_card_info_59695 capacity sddr55_card_info 0 59695 NULL +enable_so_flt_region_bootload_ql82xx_hw_data_59701 flt_region_bootload ql82xx_hw_data 0 59701 NULL @@ -204887,7 +204682,6 @@ index 0000000..4ed1988 +enable_so_src_offset_btrfs_ioctl_clone_range_args_59876 src_offset btrfs_ioctl_clone_range_args 0 59876 NULL +enable_so_ide_scan_pio_blacklist_fndecl_59877 ide_scan_pio_blacklist fndecl 0 59877 NULL +enable_so_dx_fb_fillrect_59878 dx fb_fillrect 0 59878 NULL -+enable_so_max_ars_out_nd_cmd_ars_cap_59879 max_ars_out nd_cmd_ars_cap 0 59879 NULL +enable_so___hwahc_dev_set_key_fndecl_59883 __hwahc_dev_set_key fndecl 5 59883 NULL +enable_so_vfs_allocated_count_igb_adapter_59900 vfs_allocated_count igb_adapter 0 59900 NULL +enable_so_mos7720_write_fndecl_59901 mos7720_write fndecl 4 59901 NULL nohasharray @@ -204950,6 +204744,7 @@ index 0000000..4ed1988 +enable_so_udpv6_sendmsg_fndecl_60103 udpv6_sendmsg fndecl 3 60103 NULL +enable_so_sample_rate_min_lola_60104 sample_rate_min lola 0 60104 NULL +enable_so_vxfs_iget_fndecl_60105 vxfs_iget fndecl 2 60105 NULL ++enable_so_length_rio_transfer_io_60108 length rio_transfer_io 0 60108 NULL +enable_so_ufs_new_fragments_fndecl_60109 ufs_new_fragments fndecl 4-5-3 60109 NULL +enable_so_tegra_slink_start_rx_dma_fndecl_60111 tegra_slink_start_rx_dma fndecl 2 60111 NULL +enable_so_raid10_find_virt_fndecl_60115 raid10_find_virt fndecl 0-3-2 60115 NULL nohasharray @@ -204962,7 +204757,9 @@ index 0000000..4ed1988 +enable_so_pci_xr17c154_setup_fndecl_60140 pci_xr17c154_setup fndecl 4 60140 NULL +enable_so_data_len_ib_ucm_event_60142 data_len ib_ucm_event 0 60142 NULL +enable_so_scalar_len_ccp_ecc_point_math_60144 scalar_len ccp_ecc_point_math 0 60144 NULL ++enable_so_vfp_set_fndecl_60145 vfp_set fndecl 3-4 60145 NULL +enable_so_index_drm_minor_60149 index drm_minor 0 60149 NULL ++enable_so_orangefs_dirent_outcount_orangefs_readdir_response_s_60150 orangefs_dirent_outcount orangefs_readdir_response_s 0 60150 NULL +enable_so_pipeline_dec_packet_in_read_fndecl_60151 pipeline_dec_packet_in_read fndecl 3 60151 NULL +enable_so_skb_checksum_setup_ip_fndecl_60154 skb_checksum_setup_ip fndecl 3 60154 NULL +enable_so_dt_mem_next_cell_fndecl_60162 dt_mem_next_cell fndecl 0 60162 NULL @@ -205077,6 +204874,7 @@ index 0000000..4ed1988 +enable_so_rpcrdma_convert_iovs_fndecl_60516 rpcrdma_convert_iovs fndecl 0 60516 NULL +enable_so_n_host_mvs_chip_info_60517 n_host mvs_chip_info 0 60517 NULL nohasharray +enable_so_ll_iocontrol_register_fndecl_60517 ll_iocontrol_register fndecl 2 60517 &enable_so_n_host_mvs_chip_info_60517 ++enable_so_pcf2127_i2c_gather_write_fndecl_60523 pcf2127_i2c_gather_write fndecl 5 60523 NULL +enable_so_tty_buffer_alloc_fndecl_60526 tty_buffer_alloc fndecl 2 60526 NULL +enable_so_b44_change_mtu_fndecl_60528 b44_change_mtu fndecl 2 60528 NULL +enable_so_hso_serial_write_fndecl_60530 hso_serial_write fndecl 3 60530 NULL nohasharray @@ -205144,6 +204942,7 @@ index 0000000..4ed1988 +enable_so_reserved_pebs_ubi_volume_60725 reserved_pebs ubi_volume 0 60725 NULL +enable_so_count_ptd_60735 count ptd 0 60735 NULL nohasharray +enable_so_splice_from_pipe_fndecl_60735 splice_from_pipe fndecl 4 60735 &enable_so_count_ptd_60735 ++enable_so_tcf_hash_create_fndecl_60736 tcf_hash_create fndecl 5 60736 NULL +enable_so___vlan_vid_del_fndecl_60738 __vlan_vid_del fndecl 3 60738 NULL +enable_so_hwarc_filter_cmd_set_drp_ie_WUSB_0100_fndecl_60739 hwarc_filter_cmd_set_drp_ie_WUSB_0100 fndecl 0 60739 NULL +enable_so_command_setapcor_fndecl_60740 command_setapcor fndecl 0 60740 NULL @@ -205173,6 +204972,7 @@ index 0000000..4ed1988 +enable_so_iso_alloc_urb_fndecl_60805 iso_alloc_urb fndecl 4-5-2 60805 NULL +enable_so_mpt_lan_change_mtu_fndecl_60806 mpt_lan_change_mtu fndecl 2 60806 NULL +enable_so_perdev_minors_vardecl_block_c_60809 perdev_minors vardecl_block.c 0 60809 NULL ++enable_so_bytes_nand_ecc_ctrl_60817 bytes nand_ecc_ctrl 0 60817 NULL +enable_so_min_addr_nhlt_resource_desc_60819 min_addr nhlt_resource_desc 0 60819 NULL +enable_so_sctp_pack_cookie_fndecl_60821 sctp_pack_cookie fndecl 6 60821 NULL +enable_so_new_log_buf_len_vardecl_printk_c_60824 new_log_buf_len vardecl_printk.c 0 60824 NULL @@ -205230,6 +205030,7 @@ index 0000000..4ed1988 +enable_so_ocfs2_xattr_block_find_fndecl_61008 ocfs2_xattr_block_find fndecl 0 61008 NULL +enable_so_cfs_cpt_weight_fndecl_61020 cfs_cpt_weight fndecl 0 61020 NULL +enable_so_size_page_frag_61029 size page_frag 0 61029 NULL ++enable_so_etnaviv_gpu_cmdbuf_new_fndecl_61036 etnaviv_gpu_cmdbuf_new fndecl 3 61036 NULL +enable_so_setup_possible_cpus_vardecl_smpboot_c_61040 setup_possible_cpus vardecl_smpboot.c 0 61040 NULL nohasharray +enable_so_ath6kl_wmi_listeninterval_cmd_fndecl_61040 ath6kl_wmi_listeninterval_cmd fndecl 2 61040 &enable_so_setup_possible_cpus_vardecl_smpboot_c_61040 +enable_so_nports1_adapter_info_61044 nports1 adapter_info 0 61044 NULL @@ -205273,6 +205074,7 @@ index 0000000..4ed1988 +enable_so_sel_commit_bools_write_fndecl_61166 sel_commit_bools_write fndecl 3 61166 NULL +enable_so_ftdi_elan_edset_empty_fndecl_61170 ftdi_elan_edset_empty fndecl 0 61170 NULL nohasharray +enable_so_lldd_execute_task_sas_domain_function_template_61170 lldd_execute_task sas_domain_function_template 0 61170 &enable_so_ftdi_elan_edset_empty_fndecl_61170 ++enable_so_host1x_job_alloc_fndecl_61171 host1x_job_alloc fndecl 4-2-3 61171 NULL +enable_so_in_length_nd_cmd_vendor_hdr_61172 in_length nd_cmd_vendor_hdr 0 61172 NULL +enable_so_phys_memory_base__synclinkmp_info_61174 phys_memory_base _synclinkmp_info 0 61174 NULL +enable_so_pvr2_buffer_set_buffer_fndecl_61176 pvr2_buffer_set_buffer fndecl 3 61176 NULL @@ -205280,6 +205082,7 @@ index 0000000..4ed1988 +enable_so___ocfs2_move_extent_fndecl_61183 __ocfs2_move_extent fndecl 4-5-6-3 61183 NULL nohasharray +enable_so_dma_tx_errors_read_fndecl_61183 dma_tx_errors_read fndecl 3 61183 &enable_so___ocfs2_move_extent_fndecl_61183 +enable_so_fbcon_softback_size_vardecl_fbcon_c_61184 fbcon_softback_size vardecl_fbcon.c 0 61184 NULL ++enable_so_channels_vendor_data_61194 channels vendor_data 0 61194 NULL +enable_so_pos_dir_context_61195 pos dir_context 0 61195 NULL nohasharray +enable_so_rdma_set_ib_paths_fndecl_61195 rdma_set_ib_paths fndecl 3 61195 &enable_so_pos_dir_context_61195 +enable_so_port_id_ssp_device_61196 port_id ssp_device 0 61196 NULL nohasharray @@ -205306,7 +205109,8 @@ index 0000000..4ed1988 +enable_so_CombinedStatusBufferLength_DAC960_Controller_61253 CombinedStatusBufferLength DAC960_Controller 0 61253 &enable_so_ext4_reserve_inode_write_fndecl_61253 +enable_so_primary_traffic_class_cm_req_msg_61255 primary_traffic_class cm_req_msg 0 61255 NULL +enable_so_b_blocknr_buffer_head_61260 b_blocknr buffer_head 0 61260 NULL -+enable_so_key_create_or_update_fndecl_61266 key_create_or_update fndecl 5 61266 NULL ++enable_so_key_create_or_update_fndecl_61266 key_create_or_update fndecl 5 61266 NULL nohasharray ++enable_so____copy_from_user_fndecl_61266 ___copy_from_user fndecl 0 61266 &enable_so_key_create_or_update_fndecl_61266 +enable_so_split_boundary_dm_origin_61269 split_boundary dm_origin 0 61269 NULL +enable_so___filemap_fdatawait_range_fndecl_61278 __filemap_fdatawait_range fndecl 0 61278 NULL +enable_so_len_ubifs_zbranch_61279 len ubifs_zbranch 0 61279 NULL @@ -205338,6 +205142,7 @@ index 0000000..4ed1988 +enable_so_tx_headroom_libipw_device_61370 tx_headroom libipw_device 0 61370 NULL +enable_so_sync_dirty_buffer_fndecl_61371 sync_dirty_buffer fndecl 0 61371 NULL +enable_so_data_dma_usb_onetouch_61372 data_dma usb_onetouch 0 61372 NULL ++enable_so_num_of_phy_chans_stedma40_platform_data_61373 num_of_phy_chans stedma40_platform_data 0 61373 NULL +enable_so_devs_max_btrfs_raid_attr_61376 devs_max btrfs_raid_attr 0 61376 NULL +enable_so_bfa_cb_ioim_done_fndecl_61381 bfa_cb_ioim_done fndecl 7 61381 NULL +enable_so_ip6gre_tunnel_change_mtu_fndecl_61385 ip6gre_tunnel_change_mtu fndecl 2 61385 NULL @@ -205353,12 +205158,14 @@ index 0000000..4ed1988 +enable_so_alloc_ts_config_fndecl_61404 alloc_ts_config fndecl 1 61404 NULL +enable_so_h_virtio_gpu_box_61407 h virtio_gpu_box 0 61407 NULL +enable_so_buf_sz_vardecl_stmmac_main_c_61408 buf_sz vardecl_stmmac_main.c 0 61408 NULL ++enable_so_rx_ring_size_rx_queue_61409 rx_ring_size rx_queue 0 61409 NULL +enable_so_pcpu_alloc_alloc_info_fndecl_61414 pcpu_alloc_alloc_info fndecl 1-2 61414 NULL nohasharray +enable_so_keylen_tcp_md5sig_key_61414 keylen tcp_md5sig_key 0 61414 &enable_so_pcpu_alloc_alloc_info_fndecl_61414 +enable_so_size_aper_size_info_lvl2_61417 size aper_size_info_lvl2 0 61417 NULL nohasharray +enable_so_get_pas_size_fndecl_61417 get_pas_size fndecl 0 61417 &enable_so_size_aper_size_info_lvl2_61417 +enable_so_nservers_mc5_params_61428 nservers mc5_params 0 61428 NULL nohasharray +enable_so_tst_size_idt77252_dev_61428 tst_size idt77252_dev 0 61428 &enable_so_nservers_mc5_params_61428 ++enable_so_amdgpu_fence_driver_init_ring_fndecl_61431 amdgpu_fence_driver_init_ring fndecl 2 61431 NULL +enable_so_raw_setsockopt_fndecl_61435 raw_setsockopt fndecl 5 61435 NULL nohasharray +enable_so_pkey_index_mlx5_qp_path_61435 pkey_index mlx5_qp_path 0 61435 &enable_so_raw_setsockopt_fndecl_61435 nohasharray +enable_so_length_drm_mode_create_blob_61435 length drm_mode_create_blob 0 61435 &enable_so_pkey_index_mlx5_qp_path_61435 nohasharray @@ -205558,6 +205365,7 @@ index 0000000..4ed1988 +enable_so_size_mtd_blktrans_dev_62024 size mtd_blktrans_dev 0 62024 NULL +enable_so_nf_bridge_encap_header_len_fndecl_62025 nf_bridge_encap_header_len fndecl 0 62025 NULL +enable_so_filter_count_rx_used_efx_nic_type_62026 filter_count_rx_used efx_nic_type 0 62026 NULL ++enable_so_drm_dp_dpcd_read_fndecl_62030 drm_dp_dpcd_read fndecl 0 62030 NULL +enable_so_encode_diropargs_fndecl_62031 encode_diropargs fndecl 4 62031 NULL +enable_so_num_qps_mlx4_caps_62033 num_qps mlx4_caps 0 62033 NULL +enable_so_n_rx_channels_efx_nic_62034 n_rx_channels efx_nic 0 62034 NULL @@ -205602,6 +205410,7 @@ index 0000000..4ed1988 +enable_so_tcp_trim_head_fndecl_62157 tcp_trim_head fndecl 3 62157 NULL +enable_so_ptrace_writedata_fndecl_62158 ptrace_writedata fndecl 4-3 62158 NULL +enable_so_map_index_to_lba_fndecl_62162 map_index_to_lba fndecl 0-1 62162 NULL ++enable_so_size_vfio_pci_region_62163 size vfio_pci_region 0 62163 NULL +enable_so_user_frag_sctp_association_62167 user_frag sctp_association 0 62167 NULL nohasharray +enable_so_alloc_huge_page_fndecl_62167 alloc_huge_page fndecl 2 62167 &enable_so_user_frag_sctp_association_62167 +enable_so_len_scrub_copy_nocow_ctx_62170 len scrub_copy_nocow_ctx 0 62170 NULL @@ -205692,7 +205501,8 @@ index 0000000..4ed1988 +enable_so_sum_link_node_ref_fndecl_62443 sum_link_node_ref fndecl 3-4 62443 &enable_so_rx_urb_size_lan78xx_net_62443 +enable_so_rx_dropped_read_fndecl_62444 rx_dropped_read fndecl 3 62444 NULL +enable_so___videobuf_copy_stream_fndecl_62450 __videobuf_copy_stream fndecl 0-4 62450 NULL -+enable_so_lpfc_sli4_diag_fcport_reg_setup_fndecl_62456 lpfc_sli4_diag_fcport_reg_setup fndecl 0 62456 NULL ++enable_so_lpfc_sli4_diag_fcport_reg_setup_fndecl_62456 lpfc_sli4_diag_fcport_reg_setup fndecl 0 62456 NULL nohasharray ++enable_so_k3_dma_prep_slave_sg_fndecl_62456 k3_dma_prep_slave_sg fndecl 3 62456 &enable_so_lpfc_sli4_diag_fcport_reg_setup_fndecl_62456 +enable_so_btrfs_new_inode_fndecl_62463 btrfs_new_inode fndecl 7 62463 NULL +enable_so_lower_offset_skb_seq_state_62465 lower_offset skb_seq_state 0 62465 NULL +enable_so_ipx_recvmsg_fndecl_62469 ipx_recvmsg fndecl 3 62469 NULL nohasharray @@ -205727,6 +205537,7 @@ index 0000000..4ed1988 +enable_so_kvm_host_page_size_fndecl_62535 kvm_host_page_size fndecl 0-2 62535 NULL +enable_so_len_ErrMsg_62547 len ErrMsg 0 62547 NULL +enable_so___ext4_get_inode_loc_fndecl_62551 __ext4_get_inode_loc fndecl 0 62551 NULL ++enable_so_arm_iommu_alloc_attrs_fndecl_62553 arm_iommu_alloc_attrs fndecl 2 62553 NULL +enable_so_num_cq_entries_hba_parameters_62556 num_cq_entries hba_parameters 0 62556 NULL +enable_so_rsi_sdio_host_intf_read_pkt_fndecl_62557 rsi_sdio_host_intf_read_pkt fndecl 3 62557 NULL +enable_so_lx_framebuffer_size_fndecl_62562 lx_framebuffer_size fndecl 0 62562 NULL @@ -205774,6 +205585,7 @@ index 0000000..4ed1988 +enable_so_bpp_sh_vou_fmt_62683 bpp sh_vou_fmt 0 62683 NULL +enable_so_num_vsis_i40e_hw_capabilities_62685 num_vsis i40e_hw_capabilities 0 62685 NULL +enable_so_start_ttm_mem_reg_62688 start ttm_mem_reg 0 62688 NULL ++enable_so_mvneta_change_mtu_fndecl_62689 mvneta_change_mtu fndecl 2 62689 NULL +enable_so_vmemdup_fndecl_62706 vmemdup fndecl 2 62706 NULL +enable_so_curwidth_usb_usbvision_62710 curwidth usb_usbvision 0 62710 NULL +enable_so_tx_tx_data_prepared_read_fndecl_62714 tx_tx_data_prepared_read fndecl 3 62714 NULL @@ -205882,6 +205694,7 @@ index 0000000..4ed1988 +enable_so_packets_per_second_ua101_63022 packets_per_second ua101 0 63022 NULL +enable_so_mmio_size_controller_63024 mmio_size controller 0 63024 NULL +enable_so_hci_send_cmd_fndecl_63025 hci_send_cmd fndecl 3 63025 NULL ++enable_so_gpr_get_fndecl_63026 gpr_get fndecl 3-4 63026 NULL +enable_so_gspca_coarse_grained_expo_autogain_fndecl_63033 gspca_coarse_grained_expo_autogain fndecl 4-2-3 63033 NULL +enable_so_rsi_sdio_host_intf_write_pkt_fndecl_63034 rsi_sdio_host_intf_write_pkt fndecl 3 63034 NULL +enable_so_size_align_rxrpc_connection_63035 size_align rxrpc_connection 0 63035 NULL @@ -205933,6 +205746,7 @@ index 0000000..4ed1988 +enable_so_nla_reserve_fndecl_63171 nla_reserve fndecl 3 63171 NULL +enable_so_vma_hugecache_offset_fndecl_63172 vma_hugecache_offset fndecl 0-3 63172 NULL +enable_so___clkdev_alloc_fndecl_63173 __clkdev_alloc fndecl 1 63173 NULL ++enable_so_xt_copy_counters_from_user_fndecl_63174 xt_copy_counters_from_user fndecl 2 63174 NULL +enable_so_ulist_add_fndecl_63177 ulist_add fndecl 0-2-3 63177 NULL nohasharray +enable_so_mlxsw_cmd_mbox_query_fw_fw_pages_get_fndecl_63177 mlxsw_cmd_mbox_query_fw_fw_pages_get fndecl 0 63177 &enable_so_ulist_add_fndecl_63177 +enable_so_send_repeat_remove_fndecl_63179 send_repeat_remove fndecl 3 63179 NULL nohasharray @@ -205963,7 +205777,8 @@ index 0000000..4ed1988 +enable_so_pdu_write_u_fndecl_63261 pdu_write_u fndecl 3 63261 NULL nohasharray +enable_so_read_events_fndecl_63261 read_events fndecl 3 63261 &enable_so_pdu_write_u_fndecl_63261 +enable_so_dvb_ca_en50221_io_write_fndecl_63262 dvb_ca_en50221_io_write fndecl 3 63262 NULL -+enable_so_sch56xx_device_add_fndecl_63264 sch56xx_device_add fndecl 1 63264 NULL ++enable_so_sch56xx_device_add_fndecl_63264 sch56xx_device_add fndecl 1 63264 NULL nohasharray ++enable_so___cyz_load_fw_fndecl_63264 __cyz_load_fw fndecl 0 63264 &enable_so_sch56xx_device_add_fndecl_63264 +enable_so__fc_frame_alloc_fndecl_63267 _fc_frame_alloc fndecl 1 63267 NULL +enable_so_rpc_malloc_fndecl_63270 rpc_malloc fndecl 2 63270 NULL +enable_so_btrfs_inc_extent_ref_fndecl_63274 btrfs_inc_extent_ref fndecl 3 63274 NULL @@ -206085,7 +205900,8 @@ index 0000000..4ed1988 +enable_so_w_nr_rds_iw_work_ring_63620 w_nr rds_iw_work_ring 0 63620 NULL +enable_so_buf_len_mwifiex_sdio_mpa_rx_63636 buf_len mwifiex_sdio_mpa_rx 0 63636 NULL nohasharray +enable_so_find_run_fndecl_63636 find_run fndecl 0 63636 &enable_so_buf_len_mwifiex_sdio_mpa_rx_63636 -+enable_so_be_v_offset_pnfs_block_extent_63637 be_v_offset pnfs_block_extent 0 63637 NULL ++enable_so_be_v_offset_pnfs_block_extent_63637 be_v_offset pnfs_block_extent 0 63637 NULL nohasharray ++enable_so_rx_ring_size_gfar_priv_rx_q_63637 rx_ring_size gfar_priv_rx_q 0 63637 &enable_so_be_v_offset_pnfs_block_extent_63637 +enable_so_o_height_fimc_frame_63639 o_height fimc_frame 0 63639 NULL nohasharray +enable_so_snic_queue_wq_desc_fndecl_63639 snic_queue_wq_desc fndecl 3 63639 &enable_so_o_height_fimc_frame_63639 +enable_so_mlxsw_pci_fw_area_init_fndecl_63657 mlxsw_pci_fw_area_init fndecl 3 63657 NULL @@ -206105,7 +205921,8 @@ index 0000000..4ed1988 +enable_so___iio_add_chan_devattr_fndecl_63697 __iio_add_chan_devattr fndecl 0 63697 &enable_so_obj_size_proto_63697 +enable_so_gsm_data_alloc_fndecl_63702 gsm_data_alloc fndecl 3 63702 NULL +enable_so_spr_wm_latency_write_fndecl_63706 spr_wm_latency_write fndecl 3 63706 NULL -+enable_so_real_trim_memory_fndecl_63709 real_trim_memory fndecl 1-2 63709 NULL ++enable_so_real_trim_memory_fndecl_63709 real_trim_memory fndecl 1-2 63709 NULL nohasharray ++enable_so_spi_split_transfers_maxsize_fndecl_63709 spi_split_transfers_maxsize fndecl 3 63709 &enable_so_real_trim_memory_fndecl_63709 +enable_so_owner_snd_ctl_elem_info_63711 owner snd_ctl_elem_info 0 63711 NULL +enable_so_index_dtsplit_63712 index dtsplit 0 63712 NULL nohasharray +enable_so_xfs_alloc_compute_aligned_fndecl_63712 xfs_alloc_compute_aligned fndecl 3-2 63712 &enable_so_index_dtsplit_63712 @@ -206128,6 +205945,7 @@ index 0000000..4ed1988 +enable_so_msix_count_skd_device_63760 msix_count skd_device 0 63760 &enable_so_ath6kl_wmi_remain_on_chnl_cmd_fndecl_63760 +enable_so_xfs_qm_dqalloc_fndecl_63762 xfs_qm_dqalloc fndecl 5 63762 NULL nohasharray +enable_so_index_isi_board_63762 index isi_board 0 63762 &enable_so_xfs_qm_dqalloc_fndecl_63762 ++enable_so_insn_size_kprobe_insn_cache_63777 insn_size kprobe_insn_cache 0 63777 NULL +enable_so___hwahc_op_set_gtk_fndecl_63781 __hwahc_op_set_gtk fndecl 4 63781 NULL +enable_so_items_priv_size_vxge_hw_mempool_63785 items_priv_size vxge_hw_mempool 0 63785 NULL +enable_so_num_slices_myri10ge_priv_63789 num_slices myri10ge_priv 0 63789 NULL @@ -206192,13 +206010,15 @@ index 0000000..4ed1988 +enable_so_Xfacs_acpi_table_fadt_63943 Xfacs acpi_table_fadt 0 63943 NULL +enable_so_replen_compound_hdr_63944 replen compound_hdr 0 63944 NULL +enable_so_get_znodes_to_commit_fndecl_63946 get_znodes_to_commit fndecl 0 63946 NULL nohasharray -+enable_so_hdr_dwords_qib_verbs_txreq_63946 hdr_dwords qib_verbs_txreq 0 63946 &enable_so_get_znodes_to_commit_fndecl_63946 ++enable_so_hdr_dwords_qib_verbs_txreq_63946 hdr_dwords qib_verbs_txreq 0 63946 &enable_so_get_znodes_to_commit_fndecl_63946 nohasharray ++enable_so_descr_size_vio_dring_register_63946 descr_size vio_dring_register 0 63946 &enable_so_hdr_dwords_qib_verbs_txreq_63946 +enable_so_map_szl_cyttsp4_sysinfo_data_63948 map_szl cyttsp4_sysinfo_data 0 63948 NULL +enable_so_pcfg_ofs_cyttsp4_sysinfo_ofs_63956 pcfg_ofs cyttsp4_sysinfo_ofs 0 63956 NULL +enable_so_oprofilefs_str_to_user_fndecl_63957 oprofilefs_str_to_user fndecl 3 63957 NULL +enable_so_pvr2_send_request_fndecl_63959 pvr2_send_request fndecl 3-5 63959 NULL nohasharray +enable_so_add_delayed_ref_head_fndecl_63959 add_delayed_ref_head fndecl 5 63959 &enable_so_pvr2_send_request_fndecl_63959 +enable_so_write_file_beacon_fndecl_63962 write_file_beacon fndecl 3 63962 NULL ++enable_so_iommu_table_init_fndecl_63965 iommu_table_init fndecl 2 63965 NULL +enable_so_psb_gtt_alloc_range_fndecl_63966 psb_gtt_alloc_range fndecl 2-5 63966 NULL +enable_so_len_wm_coeff_ctl_63967 len wm_coeff_ctl 0 63967 NULL +enable_so_pla_ocp_read_fndecl_63976 pla_ocp_read fndecl 3 63976 NULL @@ -206209,8 +206029,10 @@ index 0000000..4ed1988 +enable_so_ihandlen_compat_xfs_fsop_handlereq_63994 ihandlen compat_xfs_fsop_handlereq 0 63994 NULL +enable_so_subctxt_qib_filedata_63995 subctxt qib_filedata 0 63995 NULL +enable_so_vram_start_amdgpu_mc_63998 vram_start amdgpu_mc 0 63998 NULL -+enable_so_iscsi_conn_send_pdu_fndecl_64002 iscsi_conn_send_pdu fndecl 4 64002 NULL ++enable_so_iscsi_conn_send_pdu_fndecl_64002 iscsi_conn_send_pdu fndecl 4 64002 NULL nohasharray ++enable_so___max_logical_packages_vardecl_64002 __max_logical_packages vardecl 0 64002 &enable_so_iscsi_conn_send_pdu_fndecl_64002 +enable_so_pvr2_send_request_ex_fndecl_64004 pvr2_send_request_ex fndecl 5-7 64004 NULL ++enable_so_ndescs_clk_corediv_soc_desc_64005 ndescs clk_corediv_soc_desc 0 64005 NULL +enable_so_field_count_audit_krule_64007 field_count audit_krule 0 64007 NULL +enable_so_rx_ring_size_fe_priv_64012 rx_ring_size fe_priv 0 64012 NULL +enable_so_wBlocks_usb_rpipe_descriptor_64014 wBlocks usb_rpipe_descriptor 0 64014 NULL nohasharray @@ -206300,6 +206122,7 @@ index 0000000..4ed1988 +enable_so_SyS_mincore_fndecl_64284 SyS_mincore fndecl 2-1 64284 NULL +enable_so_dev_minor_cuse_init_out_64292 dev_minor cuse_init_out 0 64292 NULL +enable_so_ath6kl_wmi_proc_events_vif_fndecl_64294 ath6kl_wmi_proc_events_vif fndecl 5 64294 NULL ++enable_so_request_firmware_fndecl_64298 request_firmware fndecl 0 64298 NULL +enable_so_fdt_getprop_fndecl_64301 fdt_getprop fndecl 2 64301 NULL +enable_so_num_bds_table_bd_list_64306 num_bds_table bd_list 0 64306 NULL +enable_so_vfp_ast_vbios_enhtable_64307 vfp ast_vbios_enhtable 0 64307 NULL nohasharray @@ -206321,6 +206144,7 @@ index 0000000..4ed1988 +enable_so_opcount_compat_xfs_fsop_attrmulti_handlereq_64355 opcount compat_xfs_fsop_attrmulti_handlereq 0 64355 NULL +enable_so_logfs_truncate_fndecl_64356 logfs_truncate fndecl 2 64356 NULL +enable_so_cur_tx_pos_tegra_spi_data_64362 cur_tx_pos tegra_spi_data 0 64362 NULL ++enable_so_copy_to_user_fixup_fndecl_64367 copy_to_user_fixup fndecl 0 64367 NULL +enable_so_isofs_get_blocks_fndecl_64368 isofs_get_blocks fndecl 2 64368 NULL nohasharray +enable_so_hpi_instream_host_buffer_allocate_fndecl_64368 hpi_instream_host_buffer_allocate fndecl 2 64368 &enable_so_isofs_get_blocks_fndecl_64368 +enable_so_oom_score_adj_write_fndecl_64369 oom_score_adj_write fndecl 3 64369 NULL @@ -206417,6 +206241,7 @@ index 0000000..4ed1988 +enable_so_isp1362_urb_dequeue_fndecl_64595 isp1362_urb_dequeue fndecl 3 64595 NULL +enable_so_of_count_phandle_with_args_fndecl_64600 of_count_phandle_with_args fndecl 0 64600 NULL +enable_so_logical_offset_btrfs_ioctl_same_extent_info_64608 logical_offset btrfs_ioctl_same_extent_info 0 64608 NULL ++enable_so_gpr_set_fndecl_64611 gpr_set fndecl 3-4 64611 NULL +enable_so_s_gdb_count_ext4_sb_info_64617 s_gdb_count ext4_sb_info 0 64617 NULL +enable_so_o2hb_setup_one_bio_fndecl_64622 o2hb_setup_one_bio fndecl 4 64622 NULL nohasharray +enable_so_vid_batadv_tvlv_roam_adv_64622 vid batadv_tvlv_roam_adv 0 64622 &enable_so_o2hb_setup_one_bio_fndecl_64622 @@ -206459,7 +206284,8 @@ index 0000000..4ed1988 +enable_so_net_frag_header_len_inet_connection_sock_af_ops_64745 net_frag_header_len inet_connection_sock_af_ops 0 64745 NULL +enable_so_layout_leb_in_gaps_fndecl_64749 layout_leb_in_gaps fndecl 0 64749 NULL +enable_so_tun_id_ip_tunnel_key_64751 tun_id ip_tunnel_key 0 64751 NULL -+enable_so_pcpu_build_alloc_info_fndecl_64752 pcpu_build_alloc_info fndecl 3-2-1 64752 NULL ++enable_so_pcpu_build_alloc_info_fndecl_64752 pcpu_build_alloc_info fndecl 3-2-1 64752 NULL nohasharray ++enable_so_vop_virtio_copy_from_user_fndecl_64752 vop_virtio_copy_from_user fndecl 3 64752 &enable_so_pcpu_build_alloc_info_fndecl_64752 +enable_so_create_pid_cachep_fndecl_64753 create_pid_cachep fndecl 1 64753 NULL +enable_so_ocfs2_fill_initial_dirents_fndecl_64755 ocfs2_fill_initial_dirents fndecl 4 64755 NULL nohasharray +enable_so_iio_device_alloc_fndecl_64755 iio_device_alloc fndecl 1 64755 &enable_so_ocfs2_fill_initial_dirents_fndecl_64755 @@ -206480,11 +206306,13 @@ index 0000000..4ed1988 +enable_so_pmsg_size_ramoops_context_64804 pmsg_size ramoops_context 0 64804 NULL +enable_so_tx_headroom_nci_dev_64805 tx_headroom nci_dev 0 64805 NULL +enable_so_alloc_align_snd_array_64806 alloc_align snd_array 0 64806 NULL ++enable_so_fpa_get_fndecl_64809 fpa_get fndecl 3-4 64809 NULL +enable_so_xen_count_remap_pages_fndecl_64820 xen_count_remap_pages fndecl 0-1 64820 NULL +enable_so_reg_list_size_amdgpu_rlc_64826 reg_list_size amdgpu_rlc 0 64826 NULL +enable_so_atr_csum_cm4000_dev_64828 atr_csum cm4000_dev 0 64828 NULL +enable_so_ocfs2_xattr_index_block_find_fndecl_64835 ocfs2_xattr_index_block_find fndecl 0 64835 NULL +enable_so_lprocfs_write_frac_helper_fndecl_64841 lprocfs_write_frac_helper fndecl 2 64841 NULL ++enable_so_edma_prep_dma_cyclic_fndecl_64842 edma_prep_dma_cyclic fndecl 4-3 64842 NULL +enable_so_smsc75xx_change_mtu_fndecl_64845 smsc75xx_change_mtu fndecl 2 64845 NULL nohasharray +enable_so_ngpio_gpio_chip_64845 ngpio gpio_chip 0 64845 &enable_so_smsc75xx_change_mtu_fndecl_64845 +enable_so__send_fndecl_64846 _send fndecl 3 64846 NULL nohasharray @@ -206494,7 +206322,8 @@ index 0000000..4ed1988 +enable_so_log_max_len_client_hdr_64853 log_max_len client_hdr 0 64853 NULL nohasharray +enable_so_E_info_CARD_PROPERTIES_64853 E_info CARD_PROPERTIES 0 64853 &enable_so_log_max_len_client_hdr_64853 +enable_so_bud_wbuf_callback_fndecl_64863 bud_wbuf_callback fndecl 3 64863 NULL -+enable_so_rh_inc_fndecl_64864 rh_inc fndecl 2 64864 NULL ++enable_so_rh_inc_fndecl_64864 rh_inc fndecl 2 64864 NULL nohasharray ++enable_so_vring_create_virtqueue_fndecl_64864 vring_create_virtqueue fndecl 2 64864 &enable_so_rh_inc_fndecl_64864 +enable_so_raw_recvmsg_fndecl_64866 raw_recvmsg fndecl 3 64866 NULL nohasharray +enable_so_len_discard_entry_64866 len discard_entry 0 64866 &enable_so_raw_recvmsg_fndecl_64866 +enable_so_p_linux_binprm_64868 p linux_binprm 0 64868 NULL @@ -206634,7 +206463,8 @@ index 0000000..4ed1988 +enable_so_ext4_da_write_inline_data_begin_fndecl_65244 ext4_da_write_inline_data_begin fndecl 4-3 65244 NULL nohasharray +enable_so_word3_alx_rrd_65244 word3 alx_rrd 0 65244 &enable_so_ext4_da_write_inline_data_begin_fndecl_65244 +enable_so_range_end_writeback_control_65245 range_end writeback_control 0 65245 NULL -+enable_so_bytes_dump_iterator_65249 bytes dump_iterator 0 65249 NULL ++enable_so_bytes_dump_iterator_65249 bytes dump_iterator 0 65249 NULL nohasharray ++enable_so_etb_read_fndecl_65249 etb_read fndecl 3 65249 &enable_so_bytes_dump_iterator_65249 +enable_so_cx24116_writeregN_fndecl_65252 cx24116_writeregN fndecl 4 65252 NULL +enable_so_ctx_blk_size_cnic_eth_dev_65262 ctx_blk_size cnic_eth_dev 0 65262 NULL +enable_so_tool_peer_spad_read_fndecl_65263 tool_peer_spad_read fndecl 3 65263 NULL @@ -206667,6 +206497,7 @@ index 0000000..4ed1988 +enable_so_gss_krb5_cts_crypt_fndecl_65346 gss_krb5_cts_crypt fndecl 3 65346 NULL +enable_so_si476x_radio_fops_read_fndecl_65348 si476x_radio_fops_read fndecl 3 65348 NULL nohasharray +enable_so_snap_count_rbd_image_header_ondisk_65348 snap_count rbd_image_header_ondisk 0 65348 &enable_so_si476x_radio_fops_read_fndecl_65348 ++enable_so_wm_coeff_read_control_fndecl_65358 wm_coeff_read_control fndecl 3 65358 NULL +enable_so_len_rpc_pipe_msg_65361 len rpc_pipe_msg 0 65361 NULL +enable_so_dma_out_iguanair_65368 dma_out iguanair 0 65368 NULL nohasharray +enable_so_add_excluded_extent_fndecl_65368 add_excluded_extent fndecl 3-2 65368 &enable_so_dma_out_iguanair_65368 @@ -211550,10 +211381,10 @@ index fdebd66..a349e33 100755 -e 's@^#include <linux/compiler.h>@@' \ -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c -index 8fa81e8..a9ac144 100644 +index 638b143e..0dd7e2b 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c -@@ -89,7 +89,7 @@ static inline int is_arm_mapping_symbol(const char *str) +@@ -93,7 +93,7 @@ static inline int is_arm_mapping_symbol(const char *str) } static int check_symbol_range(const char *sym, unsigned long long addr, @@ -211562,7 +211393,7 @@ index 8fa81e8..a9ac144 100644 { size_t i; struct addr_range *ar; -@@ -178,7 +178,7 @@ static int read_symbol(FILE *in, struct sym_entry *s) +@@ -184,7 +184,7 @@ static int read_symbol(FILE *in, struct sym_entry *s) } static int symbol_in_range(struct sym_entry *s, struct addr_range *ranges, @@ -211632,10 +211463,10 @@ index 25cf0c2..eb178ce 100644 return -1; if (!exact1 && exact2) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh -index ba6c34e..ea10bce 100755 +index 49d61ad..69ee2cf 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh -@@ -179,7 +179,7 @@ else +@@ -184,7 +184,7 @@ else fi; # final build of init/ @@ -211904,10 +211735,10 @@ index 6c3b038..4bac93f 100755 mkdir -p "$destdir" (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) diff --git a/scripts/package/mkspec b/scripts/package/mkspec -index fe44d68..3874acb 100755 +index b6de63c..a6d2224 100755 --- a/scripts/package/mkspec +++ b/scripts/package/mkspec -@@ -120,29 +120,40 @@ echo 'rm -f $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE/{build,source}" +@@ -120,22 +120,33 @@ echo 'rm -f $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE/{build,source}" echo "mkdir -p "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE" echo "EXCLUDES=\"$RCS_TAR_IGNORE --exclude .tmp_versions --exclude=*vmlinux* --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation --exclude=firmware --exclude .config.old --exclude .missing-syscalls.d\"" echo "tar "'$EXCLUDES'" -cf- . | (cd "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE;tar xvf -)" @@ -211949,6 +211780,10 @@ index fe44d68..3874acb 100755 +echo '/sbin/new-kernel-pkg --mkinitrd --depmod --install --make-default '"$KERNELRELEASE"' || exit $?' echo "fi" echo "" + echo "%preun" +@@ -144,10 +155,10 @@ echo "new-kernel-pkg --remove $KERNELRELEASE --rminitrd --initrdfile=/boot/initr + echo "fi" + echo "" echo "%files" -echo '%defattr (-, root, root)' -echo "/lib/modules/$KERNELRELEASE" @@ -211959,7 +211794,7 @@ index fe44d68..3874acb 100755 echo "/lib/firmware/$KERNELRELEASE" echo "/boot/*" echo "" -@@ -152,9 +163,11 @@ echo "/usr/include" +@@ -157,9 +168,11 @@ echo "/usr/include" echo "" if ! $PREBUILT; then echo "%files devel" @@ -212022,7 +211857,7 @@ index ba87004..3f4852c 100644 unsigned int secindex_strings; diff --git a/scripts/tags.sh b/scripts/tags.sh -index 23ba1c6..cad2484 100755 +index f72f48f..769a657 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh @@ -26,7 +26,7 @@ else @@ -212035,10 +211870,10 @@ index 23ba1c6..cad2484 100755 # Find all available archs find_all_archs() diff --git a/security/Kconfig b/security/Kconfig -index e452378..cc25231 100644 +index e452378..e634654 100644 --- a/security/Kconfig +++ b/security/Kconfig -@@ -4,6 +4,995 @@ +@@ -4,6 +4,994 @@ menu "Security options" @@ -212628,7 +212463,6 @@ index e452378..cc25231 100644 + depends on (X86 || (ARM && (CPU_V6 || CPU_V6K || CPU_V7) && !(ARM_LPAE && MODULES))) && !XEN + select PAX_PER_CPU_PGD if X86_64 || (X86_32 && X86_PAE) + select PAX_KERNEXEC_PLUGIN if X86_64 -+ select DEBUG_RODATA if X86 + select ARM_KERNMEM_PERMS if ARM + help + This is the kernel land equivalent of PAGEEXEC and MPROTECT, @@ -213034,7 +212868,7 @@ index e452378..cc25231 100644 source security/keys/Kconfig config SECURITY_DMESG_RESTRICT -@@ -104,7 +1093,7 @@ config INTEL_TXT +@@ -104,7 +1092,7 @@ config INTEL_TXT config LSM_MMAP_MIN_ADDR int "Low address space for LSM to protect from user allocation" depends on SECURITY && SECURITY_SELINUX @@ -213226,10 +213060,10 @@ index 48071ed..b805e0f 100644 if (bprm->cap_effective) return 1; diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h -index 585af61..b7d35ff 100644 +index 5d0f611..89bfac7 100644 --- a/security/integrity/ima/ima.h +++ b/security/integrity/ima/ima.h -@@ -125,8 +125,8 @@ int ima_init_template(void); +@@ -129,8 +129,8 @@ int ima_init_template(void); extern spinlock_t ima_queue_lock; struct ima_h_table { @@ -213241,7 +213075,7 @@ index 585af61..b7d35ff 100644 }; extern struct ima_h_table ima_htable; diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c -index 1d950fb..a8f4eab 100644 +index 370e42d..00dafb8 100644 --- a/security/integrity/ima/ima_api.c +++ b/security/integrity/ima/ima_api.c @@ -137,7 +137,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename, @@ -213254,10 +213088,10 @@ index 1d950fb..a8f4eab 100644 result = ima_alloc_init_template(&event_data, &entry); if (result < 0) { diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c -index f355231..c71f640 100644 +index 60d011a..0f56054 100644 --- a/security/integrity/ima/ima_fs.c +++ b/security/integrity/ima/ima_fs.c -@@ -30,12 +30,12 @@ static DEFINE_MUTEX(ima_write_mutex); +@@ -31,12 +31,12 @@ static DEFINE_MUTEX(ima_write_mutex); static int valid_policy = 1; #define TMPBUFLEN 12 static ssize_t ima_show_htable_value(char __user *buf, size_t count, @@ -213318,7 +213152,7 @@ index 5105c2c..a5010e6 100644 extern struct key_type key_type_request_key_auth; extern struct key *request_key_auth_new(struct key *target, diff --git a/security/keys/key.c b/security/keys/key.c -index 09ef276..357db79 100644 +index b287551..9c7e4ae6 100644 --- a/security/keys/key.c +++ b/security/keys/key.c @@ -283,7 +283,7 @@ struct key *key_alloc(struct key_type *type, const char *desc, @@ -213330,7 +213164,7 @@ index 09ef276..357db79 100644 key->index_key.type = type; key->user = user; key->quotalen = quotalen; -@@ -582,7 +582,7 @@ int key_reject_and_link(struct key *key, +@@ -584,7 +584,7 @@ int key_reject_and_link(struct key *key, mutex_unlock(&key_construction_mutex); @@ -213339,7 +213173,7 @@ index 09ef276..357db79 100644 __key_link_end(keyring, &key->index_key, edit); /* wake up anyone waiting for a key to be constructed */ -@@ -1077,7 +1077,9 @@ int register_key_type(struct key_type *ktype) +@@ -1079,7 +1079,9 @@ int register_key_type(struct key_type *ktype) struct key_type *p; int ret; @@ -213350,7 +213184,7 @@ index 09ef276..357db79 100644 ret = -EEXIST; down_write(&key_types_sem); -@@ -1089,7 +1091,7 @@ int register_key_type(struct key_type *ktype) +@@ -1091,7 +1093,7 @@ int register_key_type(struct key_type *ktype) } /* store the type */ @@ -213359,7 +213193,7 @@ index 09ef276..357db79 100644 pr_notice("Key type %s registered\n", ktype->name); ret = 0; -@@ -1111,7 +1113,7 @@ EXPORT_SYMBOL(register_key_type); +@@ -1113,7 +1115,7 @@ EXPORT_SYMBOL(register_key_type); void unregister_key_type(struct key_type *ktype) { down_write(&key_types_sem); @@ -213368,7 +213202,7 @@ index 09ef276..357db79 100644 downgrade_write(&key_types_sem); key_gc_keytype(ktype); pr_notice("Key type %s unregistered\n", ktype->name); -@@ -1129,10 +1131,10 @@ void __init key_init(void) +@@ -1131,10 +1133,10 @@ void __init key_init(void) 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); /* add the special key types */ @@ -213838,10 +213672,10 @@ index b16dbef04..8eb05a4 100644 } } diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c -index 58e79e0..19751d1 100644 +index d6d9419..49b620a 100644 --- a/sound/core/seq/seq_clientmgr.c +++ b/sound/core/seq/seq_clientmgr.c -@@ -416,7 +416,7 @@ static ssize_t snd_seq_read(struct file *file, char __user *buf, size_t count, +@@ -418,7 +418,7 @@ static ssize_t snd_seq_read(struct file *file, char __user *buf, size_t count, if (!client->accept_input || (fifo = client->data.user.fifo) == NULL) return -ENXIO; @@ -213850,7 +213684,7 @@ index 58e79e0..19751d1 100644 /* buffer overflow is detected */ snd_seq_fifo_clear(fifo); /* return error code */ -@@ -446,7 +446,7 @@ static ssize_t snd_seq_read(struct file *file, char __user *buf, size_t count, +@@ -448,7 +448,7 @@ static ssize_t snd_seq_read(struct file *file, char __user *buf, size_t count, count -= sizeof(struct snd_seq_event); buf += sizeof(struct snd_seq_event); err = snd_seq_expand_var_event(&cell->event, count, @@ -213859,7 +213693,7 @@ index 58e79e0..19751d1 100644 sizeof(struct snd_seq_event)); if (err < 0) break; -@@ -1062,13 +1062,13 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf, +@@ -1064,13 +1064,13 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf, } /* set user space pointer */ event.data.ext.len = extlen | SNDRV_SEQ_EXT_USRPTR; @@ -213875,7 +213709,7 @@ index 58e79e0..19751d1 100644 event.data.ext.ptr = ptr; } #endif -@@ -2423,7 +2423,7 @@ int snd_seq_kernel_client_ctl(int clientid, unsigned int cmd, void *arg) +@@ -2437,7 +2437,7 @@ int snd_seq_kernel_client_ctl(int clientid, unsigned int cmd, void *arg) if (client == NULL) return -ENXIO; fs = snd_enter_user(); @@ -214053,7 +213887,7 @@ index 175f9e4..3518d31 100644 #endif /* modular kernel */ diff --git a/sound/drivers/mts64.c b/sound/drivers/mts64.c -index 2a008a9..a1efb3f 100644 +index fd4d18d..235097d 100644 --- a/sound/drivers/mts64.c +++ b/sound/drivers/mts64.c @@ -29,6 +29,7 @@ @@ -214064,16 +213898,16 @@ index 2a008a9..a1efb3f 100644 #define CARD_NAME "Miditerminal 4140" #define DRIVER_NAME "MTS64" -@@ -67,7 +68,7 @@ struct mts64 { +@@ -65,7 +66,7 @@ struct mts64 { + struct snd_card *card; + struct snd_rawmidi *rmidi; struct pardevice *pardev; - int pardev_claimed; - - int open_count; + local_t open_count; int current_midi_output_port; int current_midi_input_port; u8 mode[MTS64_NUM_INPUT_PORTS]; -@@ -687,7 +688,7 @@ static int snd_mts64_rawmidi_open(struct snd_rawmidi_substream *substream) +@@ -685,7 +686,7 @@ static int snd_mts64_rawmidi_open(struct snd_rawmidi_substream *substream) { struct mts64 *mts = substream->rmidi->private_data; @@ -214082,7 +213916,7 @@ index 2a008a9..a1efb3f 100644 /* We don't need a spinlock here, because this is just called if the device has not been opened before. So there aren't any IRQs from the device */ -@@ -695,7 +696,7 @@ static int snd_mts64_rawmidi_open(struct snd_rawmidi_substream *substream) +@@ -693,7 +694,7 @@ static int snd_mts64_rawmidi_open(struct snd_rawmidi_substream *substream) msleep(50); } @@ -214091,7 +213925,7 @@ index 2a008a9..a1efb3f 100644 return 0; } -@@ -705,8 +706,7 @@ static int snd_mts64_rawmidi_close(struct snd_rawmidi_substream *substream) +@@ -703,8 +704,7 @@ static int snd_mts64_rawmidi_close(struct snd_rawmidi_substream *substream) struct mts64 *mts = substream->rmidi->private_data; unsigned long flags; @@ -214101,7 +213935,7 @@ index 2a008a9..a1efb3f 100644 /* We need the spinlock_irqsave here because we can still have IRQs at this point */ spin_lock_irqsave(&mts->lock, flags); -@@ -715,8 +715,8 @@ static int snd_mts64_rawmidi_close(struct snd_rawmidi_substream *substream) +@@ -713,8 +713,8 @@ static int snd_mts64_rawmidi_close(struct snd_rawmidi_substream *substream) msleep(500); @@ -214126,7 +213960,7 @@ index 89c7aa0..6d75e49 100644 int timeout = 10; while ((inb(opl4->fm_port) & OPL4_STATUS_BUSY) && --timeout > 0) diff --git a/sound/drivers/portman2x4.c b/sound/drivers/portman2x4.c -index 464385a..46ab3f6 100644 +index 189e3e7..a873a71 100644 --- a/sound/drivers/portman2x4.c +++ b/sound/drivers/portman2x4.c @@ -48,6 +48,7 @@ @@ -214137,10 +213971,10 @@ index 464385a..46ab3f6 100644 #define CARD_NAME "Portman 2x4" #define DRIVER_NAME "portman" -@@ -85,7 +86,7 @@ struct portman { +@@ -83,7 +84,7 @@ struct portman { + struct snd_card *card; + struct snd_rawmidi *rmidi; struct pardevice *pardev; - int pardev_claimed; - - int open_count; + local_t open_count; int mode[PORTMAN_NUM_INPUT_PORTS]; @@ -214252,10 +214086,10 @@ index 48d6dca..a0266c23 100644 default: return -EINVAL; diff --git a/sound/firewire/oxfw/oxfw-scs1x.c b/sound/firewire/oxfw/oxfw-scs1x.c -index bb53eb3..670cd89 100644 +index f897c98..4f9a70d 100644 --- a/sound/firewire/oxfw/oxfw-scs1x.c +++ b/sound/firewire/oxfw/oxfw-scs1x.c -@@ -278,9 +278,9 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *stream, int up) +@@ -291,9 +291,9 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *stream, int up) if (up) { scs->input_escape_count = 0; @@ -214267,13 +214101,13 @@ index bb53eb3..670cd89 100644 } } -@@ -310,10 +310,10 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *stream, int up) - scs->output_escaped = false; - scs->output_idle = false; +@@ -325,10 +325,10 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *stream, int up) + scs->transaction_bytes = 0; + scs->error = false; - ACCESS_ONCE(scs->output) = stream; + ACCESS_ONCE_RW(scs->output) = stream; - tasklet_schedule(&scs->tasklet); + schedule_work(&scs->work); } else { - ACCESS_ONCE(scs->output) = NULL; + ACCESS_ONCE_RW(scs->output) = NULL; @@ -214768,10 +214602,10 @@ index 35f0469..7c25cd5 100644 if (!pdata) diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h -index cbb4075..edda3dd 100644 +index b6e310d..c562dcd 100644 --- a/sound/soc/intel/skylake/skl-sst-dsp.h +++ b/sound/soc/intel/skylake/skl-sst-dsp.h -@@ -117,14 +117,14 @@ struct skl_dsp_fw_ops { +@@ -121,14 +121,14 @@ struct skl_dsp_fw_ops { int (*load_mod)(struct sst_dsp *ctx, u16 mod_id, char *mod_name); int (*unload_mod)(struct sst_dsp *ctx, u16 mod_id); @@ -215037,7 +214871,7 @@ index 0a578fe..b81f62d 100644 }) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c -index 2984737..c142f22 100644 +index 4fd482f..9e5f572 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -90,12 +90,17 @@ LIST_HEAD(vm_list); @@ -215060,7 +214894,7 @@ index 2984737..c142f22 100644 struct dentry *kvm_debugfs_dir; EXPORT_SYMBOL_GPL(kvm_debugfs_dir); -@@ -833,7 +838,7 @@ int __kvm_set_memory_region(struct kvm *kvm, +@@ -843,7 +848,7 @@ int __kvm_set_memory_region(struct kvm *kvm, /* We can read the guest memory with __xxx_user() later on. */ if ((id < KVM_USER_MEM_SLOTS) && ((mem->userspace_addr & (PAGE_SIZE - 1)) || @@ -215069,7 +214903,7 @@ index 2984737..c142f22 100644 (void __user *)(unsigned long)mem->userspace_addr, mem->memory_size))) goto out; -@@ -1889,9 +1894,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached); +@@ -1905,9 +1910,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached); int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len) { @@ -215089,7 +214923,7 @@ index 2984737..c142f22 100644 } EXPORT_SYMBOL_GPL(kvm_clear_guest_page); -@@ -2228,7 +2241,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp) +@@ -2246,7 +2259,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp) return 0; } @@ -215098,7 +214932,7 @@ index 2984737..c142f22 100644 .release = kvm_vcpu_release, .unlocked_ioctl = kvm_vcpu_ioctl, #ifdef CONFIG_KVM_COMPAT -@@ -2942,7 +2955,7 @@ out: +@@ -2960,7 +2973,7 @@ out: } #endif @@ -215107,7 +214941,7 @@ index 2984737..c142f22 100644 .release = kvm_vm_release, .unlocked_ioctl = kvm_vm_ioctl, #ifdef CONFIG_KVM_COMPAT -@@ -3013,7 +3026,7 @@ out: +@@ -3031,7 +3044,7 @@ out: return r; } @@ -215116,7 +214950,7 @@ index 2984737..c142f22 100644 .unlocked_ioctl = kvm_dev_ioctl, .compat_ioctl = kvm_dev_ioctl, .llseek = noop_llseek, -@@ -3039,7 +3052,7 @@ static void hardware_enable_nolock(void *junk) +@@ -3057,7 +3070,7 @@ static void hardware_enable_nolock(void *junk) if (r) { cpumask_clear_cpu(cpu, cpus_hardware_enabled); @@ -215125,7 +214959,7 @@ index 2984737..c142f22 100644 pr_info("kvm: enabling virtualization on CPU%d failed\n", cpu); } } -@@ -3094,10 +3107,10 @@ static int hardware_enable_all(void) +@@ -3112,10 +3125,10 @@ static int hardware_enable_all(void) kvm_usage_count++; if (kvm_usage_count == 1) { @@ -215138,7 +214972,7 @@ index 2984737..c142f22 100644 hardware_disable_all_nolock(); r = -EBUSY; } -@@ -3551,7 +3564,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, +@@ -3569,7 +3582,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, if (!vcpu_align) vcpu_align = __alignof__(struct kvm_vcpu); kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, vcpu_align, @@ -215147,7 +214981,7 @@ index 2984737..c142f22 100644 if (!kvm_vcpu_cache) { r = -ENOMEM; goto out_free_3; -@@ -3561,9 +3574,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, +@@ -3579,9 +3592,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, if (r) goto out_free; @@ -215159,7 +214993,7 @@ index 2984737..c142f22 100644 r = misc_register(&kvm_dev); if (r) { -@@ -3573,9 +3588,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, +@@ -3591,9 +3606,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, register_syscore_ops(&kvm_syscore_ops); diff --git a/4.5.7/4425_grsec_remove_EI_PAX.patch b/4.6.3/4425_grsec_remove_EI_PAX.patch index c988c9a..c988c9a 100644 --- a/4.5.7/4425_grsec_remove_EI_PAX.patch +++ b/4.6.3/4425_grsec_remove_EI_PAX.patch diff --git a/4.5.7/4427_force_XATTR_PAX_tmpfs.patch b/4.6.3/4427_force_XATTR_PAX_tmpfs.patch index aa2a091..4ee3f0c 100644 --- a/4.5.7/4427_force_XATTR_PAX_tmpfs.patch +++ b/4.6.3/4427_force_XATTR_PAX_tmpfs.patch @@ -6,7 +6,7 @@ namespace supported on tmpfs so that the PaX markings survive emerge. diff -Naur a/mm/shmem.c b/mm/shmem.c --- a/mm/shmem.c 2016-04-29 19:56:25.306101147 -0400 +++ b/mm/shmem.c 2016-04-29 19:59:44.126104490 -0400 -@@ -2670,7 +2670,6 @@ +@@ -2665,7 +2665,6 @@ return simple_xattr_set(&info->xattrs, name, value, size, flags); } @@ -14,7 +14,7 @@ diff -Naur a/mm/shmem.c b/mm/shmem.c static int shmem_user_xattr_handler_set(const struct xattr_handler *handler, struct dentry *dentry, const char *name, const void *value, size_t size, int flags) -@@ -2685,7 +2684,6 @@ +@@ -2680,7 +2679,6 @@ name = xattr_full_name(handler, name); return simple_xattr_set(&info->xattrs, name, value, size, flags); } @@ -22,7 +22,7 @@ diff -Naur a/mm/shmem.c b/mm/shmem.c static const struct xattr_handler shmem_security_xattr_handler = { .prefix = XATTR_SECURITY_PREFIX, -@@ -2699,13 +2697,11 @@ +@@ -2694,13 +2692,11 @@ .set = shmem_xattr_handler_set, }; @@ -36,7 +36,7 @@ diff -Naur a/mm/shmem.c b/mm/shmem.c static const struct xattr_handler *shmem_xattr_handlers[] = { #ifdef CONFIG_TMPFS_POSIX_ACL -@@ -2715,9 +2711,7 @@ +@@ -2710,9 +2706,7 @@ &shmem_security_xattr_handler, &shmem_trusted_xattr_handler, diff --git a/4.5.7/4430_grsec-remove-localversion-grsec.patch b/4.6.3/4430_grsec-remove-localversion-grsec.patch index 31cf878..31cf878 100644 --- a/4.5.7/4430_grsec-remove-localversion-grsec.patch +++ b/4.6.3/4430_grsec-remove-localversion-grsec.patch diff --git a/4.5.7/4435_grsec-mute-warnings.patch b/4.6.3/4435_grsec-mute-warnings.patch index b7564e4..b7564e4 100644 --- a/4.5.7/4435_grsec-mute-warnings.patch +++ b/4.6.3/4435_grsec-mute-warnings.patch diff --git a/4.5.7/4440_grsec-remove-protected-paths.patch b/4.6.3/4440_grsec-remove-protected-paths.patch index 741546d..741546d 100644 --- a/4.5.7/4440_grsec-remove-protected-paths.patch +++ b/4.6.3/4440_grsec-remove-protected-paths.patch diff --git a/4.5.7/4450_grsec-kconfig-default-gids.patch b/4.6.3/4450_grsec-kconfig-default-gids.patch index ccf0abd..ccf0abd 100644 --- a/4.5.7/4450_grsec-kconfig-default-gids.patch +++ b/4.6.3/4450_grsec-kconfig-default-gids.patch diff --git a/4.5.7/4465_selinux-avc_audit-log-curr_ip.patch b/4.6.3/4465_selinux-avc_audit-log-curr_ip.patch index 7248385..7248385 100644 --- a/4.5.7/4465_selinux-avc_audit-log-curr_ip.patch +++ b/4.6.3/4465_selinux-avc_audit-log-curr_ip.patch diff --git a/4.5.7/4470_disable-compat_vdso.patch b/4.6.3/4470_disable-compat_vdso.patch index febce96..fd822fe 100644 --- a/4.5.7/4470_disable-compat_vdso.patch +++ b/4.6.3/4470_disable-compat_vdso.patch @@ -26,7 +26,7 @@ Closes bug: http://bugs.gentoo.org/show_bug.cgi?id=210138 diff -urp a/arch/x86/Kconfig b/arch/x86/Kconfig --- a/arch/x86/Kconfig 2009-07-31 01:36:57.323857684 +0100 +++ b/arch/x86/Kconfig 2009-07-31 01:51:39.395749681 +0100 -@@ -2047,29 +2047,8 @@ +@@ -2077,29 +2077,8 @@ config COMPAT_VDSO def_bool n diff --git a/4.5.7/4475_emutramp_default_on.patch b/4.6.3/4475_emutramp_default_on.patch index feb8c7b..feb8c7b 100644 --- a/4.5.7/4475_emutramp_default_on.patch +++ b/4.6.3/4475_emutramp_default_on.patch |