summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2016-07-06 20:56:27 -0400
committerAnthony G. Basile <blueness@gentoo.org>2016-07-06 20:56:27 -0400
commiteab284e29f3b6bd1802dadd67906af1d0435687b (patch)
tree593ee6d824f680c46b3732732a57120bcb78cae9
parentgrsecurity-3.1-4.5.7-201606302132 (diff)
downloadhardened-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.patch4713
-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(&current->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(&regs);
+ }
+@@ -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(&regs);
- }
-@@ -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 = &current->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 != &current->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 = &current->thread.fpu.state.xsave;
++ struct xregs_state *xsave = &current->thread.fpu.state->xsave;
+ struct fpu *fpu = &current->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 = &regulator_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(&current->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 = &copy_gr_arg_wrapper_compat;
+ copy_gr_arg = &copy_gr_arg_compat;
+ copy_acl_object_label = &copy_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, &param);
}
@@ -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(&current->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