summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2016-08-14 06:40:25 -0400
committerAnthony G. Basile <blueness@gentoo.org>2016-08-14 06:40:25 -0400
commit046f9cd3210f4affd139f18cc43dfb197c87e947 (patch)
treeba7e33d3efc7597e0bb413ae9a4090e07ea36945
parentgrsecurity-3.1-4.6.5-201607312210 (diff)
downloadhardened-patchset-046f9cd3210f4affd139f18cc43dfb197c87e947.tar.gz
hardened-patchset-046f9cd3210f4affd139f18cc43dfb197c87e947.tar.bz2
hardened-patchset-046f9cd3210f4affd139f18cc43dfb197c87e947.zip
grsecurity-3.1-4.7-20160813124020160813
-rw-r--r--4.6.5/1004_linux-4.6.5.patch7262
-rw-r--r--4.7.0/0000_README (renamed from 4.6.5/0000_README)6
-rw-r--r--4.7.0/4420_grsecurity-3.1-4.7-201608131240.patch (renamed from 4.6.5/4420_grsecurity-3.1-4.6.5-201607312210.patch)12491
-rw-r--r--4.7.0/4425_grsec_remove_EI_PAX.patch (renamed from 4.6.5/4425_grsec_remove_EI_PAX.patch)2
-rw-r--r--4.7.0/4427_force_XATTR_PAX_tmpfs.patch (renamed from 4.6.5/4427_force_XATTR_PAX_tmpfs.patch)12
-rw-r--r--4.7.0/4430_grsec-remove-localversion-grsec.patch (renamed from 4.6.5/4430_grsec-remove-localversion-grsec.patch)0
-rw-r--r--4.7.0/4435_grsec-mute-warnings.patch (renamed from 4.6.5/4435_grsec-mute-warnings.patch)2
-rw-r--r--4.7.0/4440_grsec-remove-protected-paths.patch (renamed from 4.6.5/4440_grsec-remove-protected-paths.patch)0
-rw-r--r--4.7.0/4450_grsec-kconfig-default-gids.patch (renamed from 4.6.5/4450_grsec-kconfig-default-gids.patch)8
-rw-r--r--4.7.0/4465_selinux-avc_audit-log-curr_ip.patch (renamed from 4.6.5/4465_selinux-avc_audit-log-curr_ip.patch)0
-rw-r--r--4.7.0/4470_disable-compat_vdso.patch (renamed from 4.6.5/4470_disable-compat_vdso.patch)2
-rw-r--r--4.7.0/4475_emutramp_default_on.patch (renamed from 4.6.5/4475_emutramp_default_on.patch)4
12 files changed, 6598 insertions, 13191 deletions
diff --git a/4.6.5/1004_linux-4.6.5.patch b/4.6.5/1004_linux-4.6.5.patch
deleted file mode 100644
index 98b6b74..0000000
--- a/4.6.5/1004_linux-4.6.5.patch
+++ /dev/null
@@ -1,7262 +0,0 @@
-diff --git a/Documentation/ABI/testing/sysfs-bus-iio-proximity-as3935 b/Documentation/ABI/testing/sysfs-bus-iio-proximity-as3935
-index 6708c5e..33e96f7 100644
---- a/Documentation/ABI/testing/sysfs-bus-iio-proximity-as3935
-+++ b/Documentation/ABI/testing/sysfs-bus-iio-proximity-as3935
-@@ -1,4 +1,4 @@
--What /sys/bus/iio/devices/iio:deviceX/in_proximity_raw
-+What /sys/bus/iio/devices/iio:deviceX/in_proximity_input
- Date: March 2014
- KernelVersion: 3.15
- Contact: Matt Ranostay <mranostay@gmail.com>
-diff --git a/Documentation/scsi/scsi_eh.txt b/Documentation/scsi/scsi_eh.txt
-index 8638f61..37eca00 100644
---- a/Documentation/scsi/scsi_eh.txt
-+++ b/Documentation/scsi/scsi_eh.txt
-@@ -263,19 +263,23 @@ scmd->allowed.
-
- 3. scmd recovered
- ACTION: scsi_eh_finish_cmd() is invoked to EH-finish scmd
-- - shost->host_failed--
- - clear scmd->eh_eflags
- - scsi_setup_cmd_retry()
- - move from local eh_work_q to local eh_done_q
- LOCKING: none
-+ CONCURRENCY: at most one thread per separate eh_work_q to
-+ keep queue manipulation lockless
-
- 4. EH completes
- ACTION: scsi_eh_flush_done_q() retries scmds or notifies upper
-- layer of failure.
-+ layer of failure. May be called concurrently but must have
-+ a no more than one thread per separate eh_work_q to
-+ manipulate the queue locklessly
- - scmd is removed from eh_done_q and scmd->eh_entry is cleared
- - if retry is necessary, scmd is requeued using
- scsi_queue_insert()
- - otherwise, scsi_finish_command() is invoked for scmd
-+ - zero shost->host_failed
- LOCKING: queue or finish function performs appropriate locking
-
-
-diff --git a/Makefile b/Makefile
-index cd37442..7d693a8 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,6 @@
- VERSION = 4
- PATCHLEVEL = 6
--SUBLEVEL = 4
-+SUBLEVEL = 5
- EXTRAVERSION =
- NAME = Charred Weasel
-
-diff --git a/arch/arm/boot/dts/armada-385-linksys.dtsi b/arch/arm/boot/dts/armada-385-linksys.dtsi
-index 8450944..22f7a13 100644
---- a/arch/arm/boot/dts/armada-385-linksys.dtsi
-+++ b/arch/arm/boot/dts/armada-385-linksys.dtsi
-@@ -58,8 +58,8 @@
- soc {
- ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
- MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
-- MBUS_ID(0x09, 0x09) 0 0xf1100000 0x10000
-- MBUS_ID(0x09, 0x05) 0 0xf1110000 0x10000>;
-+ MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000
-+ MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000>;
-
- internal-regs {
-
-diff --git a/arch/arm/boot/dts/sun5i-r8-chip.dts b/arch/arm/boot/dts/sun5i-r8-chip.dts
-index f6898c6..c937c85 100644
---- a/arch/arm/boot/dts/sun5i-r8-chip.dts
-+++ b/arch/arm/boot/dts/sun5i-r8-chip.dts
-@@ -52,7 +52,7 @@
-
- / {
- model = "NextThing C.H.I.P.";
-- compatible = "nextthing,chip", "allwinner,sun5i-r8";
-+ compatible = "nextthing,chip", "allwinner,sun5i-r8", "allwinner,sun5i-a13";
-
- aliases {
- i2c0 = &i2c0;
-diff --git a/arch/arm/boot/dts/sun6i-a31s-primo81.dts b/arch/arm/boot/dts/sun6i-a31s-primo81.dts
-index 68b479b..73c133f 100644
---- a/arch/arm/boot/dts/sun6i-a31s-primo81.dts
-+++ b/arch/arm/boot/dts/sun6i-a31s-primo81.dts
-@@ -176,8 +176,6 @@
- };
-
- &reg_dc1sw {
-- regulator-min-microvolt = <3000000>;
-- regulator-max-microvolt = <3000000>;
- regulator-name = "vcc-lcd";
- };
-
-diff --git a/arch/arm/boot/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts b/arch/arm/boot/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
-index 360adfb..d6ad619 100644
---- a/arch/arm/boot/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
-+++ b/arch/arm/boot/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
-@@ -135,8 +135,6 @@
-
- &reg_dc1sw {
- regulator-name = "vcc-lcd-usb2";
-- regulator-min-microvolt = <3000000>;
-- regulator-max-microvolt = <3000000>;
- };
-
- &reg_dc5ldo {
-diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h
-index aeddd28..92fd2c8 100644
---- a/arch/arm/include/asm/pgtable-2level.h
-+++ b/arch/arm/include/asm/pgtable-2level.h
-@@ -193,6 +193,7 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
-
- #define pmd_large(pmd) (pmd_val(pmd) & 2)
- #define pmd_bad(pmd) (pmd_val(pmd) & 2)
-+#define pmd_present(pmd) (pmd_val(pmd))
-
- #define copy_pmd(pmdpd,pmdps) \
- do { \
-diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
-index dc46398..7411466 100644
---- a/arch/arm/include/asm/pgtable-3level.h
-+++ b/arch/arm/include/asm/pgtable-3level.h
-@@ -211,6 +211,7 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
- : !!(pmd_val(pmd) & (val)))
- #define pmd_isclear(pmd, val) (!(pmd_val(pmd) & (val)))
-
-+#define pmd_present(pmd) (pmd_isset((pmd), L_PMD_SECT_VALID))
- #define pmd_young(pmd) (pmd_isset((pmd), PMD_SECT_AF))
- #define pte_special(pte) (pte_isset((pte), L_PTE_SPECIAL))
- static inline pte_t pte_mkspecial(pte_t pte)
-@@ -249,10 +250,10 @@ PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF);
- #define pfn_pmd(pfn,prot) (__pmd(((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot)))
- #define mk_pmd(page,prot) pfn_pmd(page_to_pfn(page),prot)
-
--/* represent a notpresent pmd by zero, this is used by pmdp_invalidate */
-+/* represent a notpresent pmd by faulting entry, this is used by pmdp_invalidate */
- static inline pmd_t pmd_mknotpresent(pmd_t pmd)
- {
-- return __pmd(0);
-+ return __pmd(pmd_val(pmd) & ~L_PMD_SECT_VALID);
- }
-
- static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)
-diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
-index 348caab..d622040 100644
---- a/arch/arm/include/asm/pgtable.h
-+++ b/arch/arm/include/asm/pgtable.h
-@@ -182,7 +182,6 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
- #define pgd_offset_k(addr) pgd_offset(&init_mm, addr)
-
- #define pmd_none(pmd) (!pmd_val(pmd))
--#define pmd_present(pmd) (pmd_val(pmd))
-
- static inline pte_t *pmd_page_vaddr(pmd_t pmd)
- {
-diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index dded1b7..72b11d9 100644
---- a/arch/arm/kvm/arm.c
-+++ b/arch/arm/kvm/arm.c
-@@ -267,6 +267,7 @@ void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu)
- kvm_timer_vcpu_terminate(vcpu);
- kvm_vgic_vcpu_destroy(vcpu);
- kvm_pmu_vcpu_destroy(vcpu);
-+ kvm_vcpu_uninit(vcpu);
- kmem_cache_free(kvm_vcpu_cache, vcpu);
- }
-
-diff --git a/arch/arm/mach-imx/mach-imx6ul.c b/arch/arm/mach-imx/mach-imx6ul.c
-index a38b16b..b56de4b 100644
---- a/arch/arm/mach-imx/mach-imx6ul.c
-+++ b/arch/arm/mach-imx/mach-imx6ul.c
-@@ -46,7 +46,7 @@ static int ksz8081_phy_fixup(struct phy_device *dev)
- static void __init imx6ul_enet_phy_init(void)
- {
- if (IS_BUILTIN(CONFIG_PHYLIB))
-- phy_register_fixup_for_uid(PHY_ID_KSZ8081, 0xffffffff,
-+ phy_register_fixup_for_uid(PHY_ID_KSZ8081, MICREL_PHY_ID_MASK,
- ksz8081_phy_fixup);
- }
-
-diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
-index 7e989d6..474abff 100644
---- a/arch/arm/mach-mvebu/coherency.c
-+++ b/arch/arm/mach-mvebu/coherency.c
-@@ -162,22 +162,16 @@ exit:
- }
-
- /*
-- * This ioremap hook is used on Armada 375/38x to ensure that PCIe
-- * memory areas are mapped as MT_UNCACHED instead of MT_DEVICE. This
-- * is needed as a workaround for a deadlock issue between the PCIe
-- * interface and the cache controller.
-+ * This ioremap hook is used on Armada 375/38x to ensure that all MMIO
-+ * areas are mapped as MT_UNCACHED instead of MT_DEVICE. This is
-+ * needed for the HW I/O coherency mechanism to work properly without
-+ * deadlock.
- */
- static void __iomem *
--armada_pcie_wa_ioremap_caller(phys_addr_t phys_addr, size_t size,
-- unsigned int mtype, void *caller)
-+armada_wa_ioremap_caller(phys_addr_t phys_addr, size_t size,
-+ unsigned int mtype, void *caller)
- {
-- struct resource pcie_mem;
--
-- mvebu_mbus_get_pcie_mem_aperture(&pcie_mem);
--
-- if (pcie_mem.start <= phys_addr && (phys_addr + size) <= pcie_mem.end)
-- mtype = MT_UNCACHED;
--
-+ mtype = MT_UNCACHED;
- return __arm_ioremap_caller(phys_addr, size, mtype, caller);
- }
-
-@@ -186,7 +180,7 @@ static void __init armada_375_380_coherency_init(struct device_node *np)
- struct device_node *cache_dn;
-
- coherency_cpu_base = of_iomap(np, 0);
-- arch_ioremap_caller = armada_pcie_wa_ioremap_caller;
-+ arch_ioremap_caller = armada_wa_ioremap_caller;
-
- /*
- * We should switch the PL310 to I/O coherency mode only if
-diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrace.h
-index a307eb6..7f94755 100644
---- a/arch/arm64/include/asm/ptrace.h
-+++ b/arch/arm64/include/asm/ptrace.h
-@@ -117,6 +117,8 @@ struct pt_regs {
- };
- u64 orig_x0;
- u64 syscallno;
-+ u64 orig_addr_limit;
-+ u64 unused; // maintain 16 byte alignment
- };
-
- #define arch_has_single_step() (1)
-diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
-index 3ae6b31..1abcd88 100644
---- a/arch/arm64/kernel/asm-offsets.c
-+++ b/arch/arm64/kernel/asm-offsets.c
-@@ -59,6 +59,7 @@ int main(void)
- DEFINE(S_PC, offsetof(struct pt_regs, pc));
- DEFINE(S_ORIG_X0, offsetof(struct pt_regs, orig_x0));
- DEFINE(S_SYSCALLNO, offsetof(struct pt_regs, syscallno));
-+ DEFINE(S_ORIG_ADDR_LIMIT, offsetof(struct pt_regs, orig_addr_limit));
- DEFINE(S_FRAME_SIZE, sizeof(struct pt_regs));
- BLANK();
- DEFINE(MM_CONTEXT_ID, offsetof(struct mm_struct, context.id.counter));
-diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
-index 12e8d2b..6c3b734 100644
---- a/arch/arm64/kernel/entry.S
-+++ b/arch/arm64/kernel/entry.S
-@@ -28,6 +28,7 @@
- #include <asm/errno.h>
- #include <asm/esr.h>
- #include <asm/irq.h>
-+#include <asm/memory.h>
- #include <asm/thread_info.h>
- #include <asm/unistd.h>
-
-@@ -97,7 +98,14 @@
- mov x29, xzr // fp pointed to user-space
- .else
- add x21, sp, #S_FRAME_SIZE
-- .endif
-+ get_thread_info tsk
-+ /* Save the task's original addr_limit and set USER_DS (TASK_SIZE_64) */
-+ ldr x20, [tsk, #TI_ADDR_LIMIT]
-+ str x20, [sp, #S_ORIG_ADDR_LIMIT]
-+ mov x20, #TASK_SIZE_64
-+ str x20, [tsk, #TI_ADDR_LIMIT]
-+ ALTERNATIVE(nop, SET_PSTATE_UAO(0), ARM64_HAS_UAO, CONFIG_ARM64_UAO)
-+ .endif /* \el == 0 */
- mrs x22, elr_el1
- mrs x23, spsr_el1
- stp lr, x21, [sp, #S_LR]
-@@ -128,6 +136,14 @@
- .endm
-
- .macro kernel_exit, el
-+ .if \el != 0
-+ /* Restore the task's original addr_limit. */
-+ ldr x20, [sp, #S_ORIG_ADDR_LIMIT]
-+ str x20, [tsk, #TI_ADDR_LIMIT]
-+
-+ /* No need to restore UAO, it will be restored from SPSR_EL1 */
-+ .endif
-+
- ldp x21, x22, [sp, #S_PC] // load ELR, SPSR
- .if \el == 0
- ct_user_enter
-@@ -406,7 +422,6 @@ el1_irq:
- bl trace_hardirqs_off
- #endif
-
-- get_thread_info tsk
- irq_handler
-
- #ifdef CONFIG_PREEMPT
-diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
-index c539208..58651a9 100644
---- a/arch/arm64/kernel/traps.c
-+++ b/arch/arm64/kernel/traps.c
-@@ -64,8 +64,7 @@ static void dump_mem(const char *lvl, const char *str, unsigned long bottom,
-
- /*
- * We need to switch to kernel mode so that we can use __get_user
-- * to safely read from kernel space. Note that we now dump the
-- * code first, just in case the backtrace kills us.
-+ * to safely read from kernel space.
- */
- fs = get_fs();
- set_fs(KERNEL_DS);
-@@ -111,21 +110,12 @@ static void dump_backtrace_entry(unsigned long where)
- print_ip_sym(where);
- }
-
--static void dump_instr(const char *lvl, struct pt_regs *regs)
-+static void __dump_instr(const char *lvl, struct pt_regs *regs)
- {
- unsigned long addr = instruction_pointer(regs);
-- mm_segment_t fs;
- char str[sizeof("00000000 ") * 5 + 2 + 1], *p = str;
- int i;
-
-- /*
-- * We need to switch to kernel mode so that we can use __get_user
-- * to safely read from kernel space. Note that we now dump the
-- * code first, just in case the backtrace kills us.
-- */
-- fs = get_fs();
-- set_fs(KERNEL_DS);
--
- for (i = -4; i < 1; i++) {
- unsigned int val, bad;
-
-@@ -139,8 +129,18 @@ static void dump_instr(const char *lvl, struct pt_regs *regs)
- }
- }
- printk("%sCode: %s\n", lvl, str);
-+}
-
-- set_fs(fs);
-+static void dump_instr(const char *lvl, struct pt_regs *regs)
-+{
-+ if (!user_mode(regs)) {
-+ mm_segment_t fs = get_fs();
-+ set_fs(KERNEL_DS);
-+ __dump_instr(lvl, regs);
-+ set_fs(fs);
-+ } else {
-+ __dump_instr(lvl, regs);
-+ }
- }
-
- static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)
-diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
-index 10b79e9..e22849a9 100644
---- a/arch/arm64/mm/fault.c
-+++ b/arch/arm64/mm/fault.c
-@@ -284,7 +284,8 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
- }
-
- if (permission_fault(esr) && (addr < USER_DS)) {
-- if (get_fs() == KERNEL_DS)
-+ /* regs->orig_addr_limit may be 0 if we entered from EL0 */
-+ if (regs->orig_addr_limit == KERNEL_DS)
- die("Accessing user space memory with fs=KERNEL_DS", regs, esr);
-
- if (!search_exception_tables(regs->pc))
-diff --git a/arch/arm64/mm/flush.c b/arch/arm64/mm/flush.c
-index dbd12ea..43a76b0 100644
---- a/arch/arm64/mm/flush.c
-+++ b/arch/arm64/mm/flush.c
-@@ -71,10 +71,6 @@ void __sync_icache_dcache(pte_t pte, unsigned long addr)
- {
- struct page *page = pte_page(pte);
-
-- /* no flushing needed for anonymous pages */
-- if (!page_mapping(page))
-- return;
--
- if (!test_and_set_bit(PG_dcache_clean, &page->flags))
- sync_icache_aliases(page_address(page),
- PAGE_SIZE << compound_order(page));
-diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
-index 942b8f6..1907ab3 100644
---- a/arch/mips/include/asm/kvm_host.h
-+++ b/arch/mips/include/asm/kvm_host.h
-@@ -336,6 +336,7 @@ struct kvm_mips_tlb {
- #define KVM_MIPS_GUEST_TLB_SIZE 64
- struct kvm_vcpu_arch {
- void *host_ebase, *guest_ebase;
-+ int (*vcpu_run)(struct kvm_run *run, struct kvm_vcpu *vcpu);
- unsigned long host_stack;
- unsigned long host_gp;
-
-diff --git a/arch/mips/kvm/interrupt.h b/arch/mips/kvm/interrupt.h
-index 4ab4bdf..2143884 100644
---- a/arch/mips/kvm/interrupt.h
-+++ b/arch/mips/kvm/interrupt.h
-@@ -28,6 +28,7 @@
- #define MIPS_EXC_MAX 12
- /* XXXSL More to follow */
-
-+extern char __kvm_mips_vcpu_run_end[];
- extern char mips32_exception[], mips32_exceptionEnd[];
- extern char mips32_GuestException[], mips32_GuestExceptionEnd[];
-
-diff --git a/arch/mips/kvm/locore.S b/arch/mips/kvm/locore.S
-index 81687ab..fc93a08 100644
---- a/arch/mips/kvm/locore.S
-+++ b/arch/mips/kvm/locore.S
-@@ -227,6 +227,7 @@ FEXPORT(__kvm_mips_load_k0k1)
-
- /* Jump to guest */
- eret
-+EXPORT(__kvm_mips_vcpu_run_end)
-
- VECTOR(MIPSX(exception), unknown)
- /* Find out what mode we came from and jump to the proper handler. */
-diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
-index 70ef1a4..e223cb3 100644
---- a/arch/mips/kvm/mips.c
-+++ b/arch/mips/kvm/mips.c
-@@ -314,6 +314,15 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id)
- memcpy(gebase + offset, mips32_GuestException,
- mips32_GuestExceptionEnd - mips32_GuestException);
-
-+#ifdef MODULE
-+ offset += mips32_GuestExceptionEnd - mips32_GuestException;
-+ memcpy(gebase + offset, (char *)__kvm_mips_vcpu_run,
-+ __kvm_mips_vcpu_run_end - (char *)__kvm_mips_vcpu_run);
-+ vcpu->arch.vcpu_run = gebase + offset;
-+#else
-+ vcpu->arch.vcpu_run = __kvm_mips_vcpu_run;
-+#endif
-+
- /* Invalidate the icache for these ranges */
- local_flush_icache_range((unsigned long)gebase,
- (unsigned long)gebase + ALIGN(size, PAGE_SIZE));
-@@ -403,7 +412,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
- /* Disable hardware page table walking while in guest */
- htw_stop();
-
-- r = __kvm_mips_vcpu_run(run, vcpu);
-+ r = vcpu->arch.vcpu_run(run, vcpu);
-
- /* Re-enable HTW before enabling interrupts */
- htw_start();
-diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
-index b8500b4..bec85055 100644
---- a/arch/powerpc/kernel/process.c
-+++ b/arch/powerpc/kernel/process.c
-@@ -1501,6 +1501,16 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
- current->thread.regs = regs - 1;
- }
-
-+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
-+ /*
-+ * Clear any transactional state, we're exec()ing. The cause is
-+ * not important as there will never be a recheckpoint so it's not
-+ * user visible.
-+ */
-+ if (MSR_TM_SUSPENDED(mfmsr()))
-+ tm_reclaim_current(0);
-+#endif
-+
- memset(regs->gpr, 0, sizeof(regs->gpr));
- regs->ctr = 0;
- regs->link = 0;
-diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
-index ccd2037..6ee4b72 100644
---- a/arch/powerpc/kernel/prom_init.c
-+++ b/arch/powerpc/kernel/prom_init.c
-@@ -719,7 +719,7 @@ unsigned char ibm_architecture_vec[] = {
- * must match by the macro below. Update the definition if
- * the structure layout changes.
- */
--#define IBM_ARCH_VEC_NRCORES_OFFSET 125
-+#define IBM_ARCH_VEC_NRCORES_OFFSET 133
- W(NR_CPUS), /* number of cores supported */
- 0,
- 0,
-diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
-index bd98ce2..3e8865b 100644
---- a/arch/powerpc/platforms/pseries/iommu.c
-+++ b/arch/powerpc/platforms/pseries/iommu.c
-@@ -912,7 +912,8 @@ machine_arch_initcall(pseries, find_existing_ddw_windows);
- static int query_ddw(struct pci_dev *dev, const u32 *ddw_avail,
- struct ddw_query_response *query)
- {
-- struct eeh_dev *edev;
-+ struct device_node *dn;
-+ struct pci_dn *pdn;
- u32 cfg_addr;
- u64 buid;
- int ret;
-@@ -923,11 +924,10 @@ static int query_ddw(struct pci_dev *dev, const u32 *ddw_avail,
- * Retrieve them from the pci device, not the node with the
- * dma-window property
- */
-- edev = pci_dev_to_eeh_dev(dev);
-- cfg_addr = edev->config_addr;
-- if (edev->pe_config_addr)
-- cfg_addr = edev->pe_config_addr;
-- buid = edev->phb->buid;
-+ dn = pci_device_to_OF_node(dev);
-+ pdn = PCI_DN(dn);
-+ buid = pdn->phb->buid;
-+ cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
-
- ret = rtas_call(ddw_avail[0], 3, 5, (u32 *)query,
- cfg_addr, BUID_HI(buid), BUID_LO(buid));
-@@ -941,7 +941,8 @@ static int create_ddw(struct pci_dev *dev, const u32 *ddw_avail,
- struct ddw_create_response *create, int page_shift,
- int window_shift)
- {
-- struct eeh_dev *edev;
-+ struct device_node *dn;
-+ struct pci_dn *pdn;
- u32 cfg_addr;
- u64 buid;
- int ret;
-@@ -952,11 +953,10 @@ static int create_ddw(struct pci_dev *dev, const u32 *ddw_avail,
- * Retrieve them from the pci device, not the node with the
- * dma-window property
- */
-- edev = pci_dev_to_eeh_dev(dev);
-- cfg_addr = edev->config_addr;
-- if (edev->pe_config_addr)
-- cfg_addr = edev->pe_config_addr;
-- buid = edev->phb->buid;
-+ dn = pci_device_to_OF_node(dev);
-+ pdn = PCI_DN(dn);
-+ buid = pdn->phb->buid;
-+ cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
-
- do {
- /* extra outputs are LIOBN and dma-addr (hi, lo) */
-diff --git a/arch/s390/include/asm/fpu/api.h b/arch/s390/include/asm/fpu/api.h
-index 5e04f3c..8ae236b0 100644
---- a/arch/s390/include/asm/fpu/api.h
-+++ b/arch/s390/include/asm/fpu/api.h
-@@ -22,7 +22,7 @@ static inline int test_fp_ctl(u32 fpc)
- " la %0,0\n"
- "1:\n"
- EX_TABLE(0b,1b)
-- : "=d" (rc), "=d" (orig_fpc)
-+ : "=d" (rc), "=&d" (orig_fpc)
- : "d" (fpc), "0" (-EINVAL));
- return rc;
- }
-diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
-index f20abdb..d14069d 100644
---- a/arch/s390/kernel/ipl.c
-+++ b/arch/s390/kernel/ipl.c
-@@ -2064,12 +2064,5 @@ void s390_reset_system(void)
- S390_lowcore.program_new_psw.addr =
- (unsigned long) s390_base_pgm_handler;
-
-- /*
-- * Clear subchannel ID and number to signal new kernel that no CCW or
-- * SCSI IPL has been done (for kexec and kdump)
-- */
-- S390_lowcore.subchannel_id = 0;
-- S390_lowcore.subchannel_nr = 0;
--
- do_reset_calls();
- }
-diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
-index 4324b87..9f0ce0e 100644
---- a/arch/s390/mm/pgtable.c
-+++ b/arch/s390/mm/pgtable.c
-@@ -437,7 +437,7 @@ void ptep_zap_unused(struct mm_struct *mm, unsigned long addr,
- pgste = pgste_get_lock(ptep);
- pgstev = pgste_val(pgste);
- pte = *ptep;
-- if (pte_swap(pte) &&
-+ if (!reset && pte_swap(pte) &&
- ((pgstev & _PGSTE_GPS_USAGE_MASK) == _PGSTE_GPS_USAGE_UNUSED ||
- (pgstev & _PGSTE_GPS_ZERO))) {
- ptep_zap_swap_entry(mm, pte_to_swp_entry(pte));
-diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
-index b1ef9e4..b67f9e8 100644
---- a/arch/x86/boot/Makefile
-+++ b/arch/x86/boot/Makefile
-@@ -171,6 +171,9 @@ isoimage: $(obj)/bzImage
- for i in lib lib64 share end ; do \
- if [ -f /usr/$$i/syslinux/isolinux.bin ] ; then \
- cp /usr/$$i/syslinux/isolinux.bin $(obj)/isoimage ; \
-+ if [ -f /usr/$$i/syslinux/ldlinux.c32 ]; then \
-+ cp /usr/$$i/syslinux/ldlinux.c32 $(obj)/isoimage ; \
-+ fi ; \
- break ; \
- fi ; \
- if [ $$i = end ] ; then exit 1 ; fi ; \
-diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
-index 041e442..7eb806c 100644
---- a/arch/x86/events/core.c
-+++ b/arch/x86/events/core.c
-@@ -2313,7 +2313,7 @@ void
- perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
- {
- struct stack_frame frame;
-- const void __user *fp;
-+ const unsigned long __user *fp;
-
- if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
- /* TODO: We don't support guest os callchain now */
-@@ -2326,7 +2326,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
- if (regs->flags & (X86_VM_MASK | PERF_EFLAGS_VM))
- return;
-
-- fp = (void __user *)regs->bp;
-+ fp = (unsigned long __user *)regs->bp;
-
- perf_callchain_store(entry, regs->ip);
-
-@@ -2339,16 +2339,17 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
- pagefault_disable();
- while (entry->nr < PERF_MAX_STACK_DEPTH) {
- unsigned long bytes;
-+
- frame.next_frame = NULL;
- frame.return_address = 0;
-
-- if (!access_ok(VERIFY_READ, fp, 16))
-+ if (!access_ok(VERIFY_READ, fp, sizeof(*fp) * 2))
- break;
-
-- bytes = __copy_from_user_nmi(&frame.next_frame, fp, 8);
-+ bytes = __copy_from_user_nmi(&frame.next_frame, fp, sizeof(*fp));
- if (bytes != 0)
- break;
-- bytes = __copy_from_user_nmi(&frame.return_address, fp+8, 8);
-+ bytes = __copy_from_user_nmi(&frame.return_address, fp + 1, sizeof(*fp));
- if (bytes != 0)
- break;
-
-diff --git a/arch/x86/events/intel/rapl.c b/arch/x86/events/intel/rapl.c
-index 1705c9d..78ee9eb 100644
---- a/arch/x86/events/intel/rapl.c
-+++ b/arch/x86/events/intel/rapl.c
-@@ -665,7 +665,7 @@ static void __init cleanup_rapl_pmus(void)
- int i;
-
- for (i = 0; i < rapl_pmus->maxpkg; i++)
-- kfree(rapl_pmus->pmus + i);
-+ kfree(rapl_pmus->pmus[i]);
- kfree(rapl_pmus);
- }
-
-diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h
-index 7a79ee2..33c709c 100644
---- a/arch/x86/include/asm/msr.h
-+++ b/arch/x86/include/asm/msr.h
-@@ -112,7 +112,7 @@ static inline void native_write_msr(unsigned int msr,
- unsigned low, unsigned high)
- {
- asm volatile("wrmsr" : : "c" (msr), "a"(low), "d" (high) : "memory");
-- if (msr_tracepoint_active(__tracepoint_read_msr))
-+ if (msr_tracepoint_active(__tracepoint_write_msr))
- do_trace_write_msr(msr, ((u64)high << 32 | low), 0);
- }
-
-@@ -131,7 +131,7 @@ notrace static inline int native_write_msr_safe(unsigned int msr,
- : "c" (msr), "0" (low), "d" (high),
- [fault] "i" (-EIO)
- : "memory");
-- if (msr_tracepoint_active(__tracepoint_read_msr))
-+ if (msr_tracepoint_active(__tracepoint_write_msr))
- do_trace_write_msr(msr, ((u64)high << 32 | low), err);
- return err;
- }
-diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
-index a147e67..e991d5c 100644
---- a/arch/x86/kernel/amd_nb.c
-+++ b/arch/x86/kernel/amd_nb.c
-@@ -71,8 +71,8 @@ int amd_cache_northbridges(void)
- while ((misc = next_northbridge(misc, amd_nb_misc_ids)) != NULL)
- i++;
-
-- if (i == 0)
-- return 0;
-+ if (!i)
-+ return -ENODEV;
-
- nb = kzalloc(i * sizeof(struct amd_northbridge), GFP_KERNEL);
- if (!nb)
-diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
-index ae703ac..44bcd57 100644
---- a/arch/x86/kernel/kprobes/core.c
-+++ b/arch/x86/kernel/kprobes/core.c
-@@ -960,7 +960,19 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
- * normal page fault.
- */
- regs->ip = (unsigned long)cur->addr;
-+ /*
-+ * Trap flag (TF) has been set here because this fault
-+ * happened where the single stepping will be done.
-+ * So clear it by resetting the current kprobe:
-+ */
-+ regs->flags &= ~X86_EFLAGS_TF;
-+
-+ /*
-+ * If the TF flag was set before the kprobe hit,
-+ * don't touch it:
-+ */
- regs->flags |= kcb->kprobe_old_flags;
-+
- if (kcb->kprobe_status == KPROBE_REENTER)
- restore_previous_kprobe(kcb);
- else
-diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
-index faf52bac..c4217a2 100644
---- a/arch/x86/kvm/vmx.c
-+++ b/arch/x86/kvm/vmx.c
-@@ -2072,7 +2072,8 @@ static void vmx_vcpu_pi_load(struct kvm_vcpu *vcpu, int cpu)
- unsigned int dest;
-
- if (!kvm_arch_has_assigned_device(vcpu->kvm) ||
-- !irq_remapping_cap(IRQ_POSTING_CAP))
-+ !irq_remapping_cap(IRQ_POSTING_CAP) ||
-+ !kvm_vcpu_apicv_active(vcpu))
- return;
-
- do {
-@@ -2180,7 +2181,8 @@ static void vmx_vcpu_pi_put(struct kvm_vcpu *vcpu)
- struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
-
- if (!kvm_arch_has_assigned_device(vcpu->kvm) ||
-- !irq_remapping_cap(IRQ_POSTING_CAP))
-+ !irq_remapping_cap(IRQ_POSTING_CAP) ||
-+ !kvm_vcpu_apicv_active(vcpu))
- return;
-
- /* Set SN when the vCPU is preempted */
-@@ -6657,7 +6659,13 @@ static int get_vmx_mem_address(struct kvm_vcpu *vcpu,
-
- /* Checks for #GP/#SS exceptions. */
- exn = false;
-- if (is_protmode(vcpu)) {
-+ if (is_long_mode(vcpu)) {
-+ /* Long mode: #GP(0)/#SS(0) if the memory address is in a
-+ * non-canonical form. This is the only check on the memory
-+ * destination for long mode!
-+ */
-+ exn = is_noncanonical_address(*ret);
-+ } else if (is_protmode(vcpu)) {
- /* Protected mode: apply checks for segment validity in the
- * following order:
- * - segment type check (#GP(0) may be thrown)
-@@ -6674,17 +6682,10 @@ static int get_vmx_mem_address(struct kvm_vcpu *vcpu,
- * execute-only code segment
- */
- exn = ((s.type & 0xa) == 8);
-- }
-- if (exn) {
-- kvm_queue_exception_e(vcpu, GP_VECTOR, 0);
-- return 1;
-- }
-- if (is_long_mode(vcpu)) {
-- /* Long mode: #GP(0)/#SS(0) if the memory address is in a
-- * non-canonical form. This is an only check for long mode.
-- */
-- exn = is_noncanonical_address(*ret);
-- } else if (is_protmode(vcpu)) {
-+ if (exn) {
-+ kvm_queue_exception_e(vcpu, GP_VECTOR, 0);
-+ return 1;
-+ }
- /* Protected mode: #GP(0)/#SS(0) if the segment is unusable.
- */
- exn = (s.unusable != 0);
-@@ -10702,7 +10703,8 @@ static int vmx_pre_block(struct kvm_vcpu *vcpu)
- struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
-
- if (!kvm_arch_has_assigned_device(vcpu->kvm) ||
-- !irq_remapping_cap(IRQ_POSTING_CAP))
-+ !irq_remapping_cap(IRQ_POSTING_CAP) ||
-+ !kvm_vcpu_apicv_active(vcpu))
- return 0;
-
- vcpu->pre_pcpu = vcpu->cpu;
-@@ -10768,7 +10770,8 @@ static void vmx_post_block(struct kvm_vcpu *vcpu)
- unsigned long flags;
-
- if (!kvm_arch_has_assigned_device(vcpu->kvm) ||
-- !irq_remapping_cap(IRQ_POSTING_CAP))
-+ !irq_remapping_cap(IRQ_POSTING_CAP) ||
-+ !kvm_vcpu_apicv_active(vcpu))
- return;
-
- do {
-@@ -10821,7 +10824,8 @@ static int vmx_update_pi_irte(struct kvm *kvm, unsigned int host_irq,
- int idx, ret = -EINVAL;
-
- if (!kvm_arch_has_assigned_device(kvm) ||
-- !irq_remapping_cap(IRQ_POSTING_CAP))
-+ !irq_remapping_cap(IRQ_POSTING_CAP) ||
-+ !kvm_vcpu_apicv_active(kvm->vcpus[0]))
- return 0;
-
- idx = srcu_read_lock(&kvm->irq_srcu);
-diff --git a/crypto/rsa-pkcs1pad.c b/crypto/rsa-pkcs1pad.c
-index ead8dc0..8ba4266 100644
---- a/crypto/rsa-pkcs1pad.c
-+++ b/crypto/rsa-pkcs1pad.c
-@@ -102,10 +102,10 @@ struct pkcs1pad_inst_ctx {
- };
-
- struct pkcs1pad_request {
-- struct akcipher_request child_req;
--
- struct scatterlist in_sg[3], out_sg[2];
- uint8_t *in_buf, *out_buf;
-+
-+ struct akcipher_request child_req;
- };
-
- static int pkcs1pad_set_pub_key(struct crypto_akcipher *tfm, const void *key,
-diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
-index 961acc7..91a9e6a 100644
---- a/drivers/ata/libata-eh.c
-+++ b/drivers/ata/libata-eh.c
-@@ -606,7 +606,7 @@ void ata_scsi_error(struct Scsi_Host *host)
- ata_scsi_port_error_handler(host, ap);
-
- /* finish or retry handled scmd's and clean up */
-- WARN_ON(host->host_failed || !list_empty(&eh_work_q));
-+ WARN_ON(!list_empty(&eh_work_q));
-
- DPRINTK("EXIT\n");
- }
-diff --git a/drivers/base/module.c b/drivers/base/module.c
-index db930d3..2a21578 100644
---- a/drivers/base/module.c
-+++ b/drivers/base/module.c
-@@ -24,10 +24,12 @@ static char *make_driver_name(struct device_driver *drv)
-
- static void module_create_drivers_dir(struct module_kobject *mk)
- {
-- if (!mk || mk->drivers_dir)
-- return;
-+ static DEFINE_MUTEX(drivers_dir_mutex);
-
-- mk->drivers_dir = kobject_create_and_add("drivers", &mk->kobj);
-+ mutex_lock(&drivers_dir_mutex);
-+ if (mk && !mk->drivers_dir)
-+ mk->drivers_dir = kobject_create_and_add("drivers", &mk->kobj);
-+ mutex_unlock(&drivers_dir_mutex);
- }
-
- void module_add_driver(struct module *mod, struct device_driver *drv)
-diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
-index 94fb407..44b1bd6 100644
---- a/drivers/char/ipmi/ipmi_msghandler.c
-+++ b/drivers/char/ipmi/ipmi_msghandler.c
-@@ -3820,6 +3820,7 @@ static void handle_new_recv_msgs(ipmi_smi_t intf)
- while (!list_empty(&intf->waiting_rcv_msgs)) {
- smi_msg = list_entry(intf->waiting_rcv_msgs.next,
- struct ipmi_smi_msg, link);
-+ list_del(&smi_msg->link);
- if (!run_to_completion)
- spin_unlock_irqrestore(&intf->waiting_rcv_msgs_lock,
- flags);
-@@ -3829,11 +3830,14 @@ static void handle_new_recv_msgs(ipmi_smi_t intf)
- if (rv > 0) {
- /*
- * To preserve message order, quit if we
-- * can't handle a message.
-+ * can't handle a message. Add the message
-+ * back at the head, this is safe because this
-+ * tasklet is the only thing that pulls the
-+ * messages.
- */
-+ list_add(&smi_msg->link, &intf->waiting_rcv_msgs);
- break;
- } else {
-- list_del(&smi_msg->link);
- if (rv == 0)
- /* Message handled */
- ipmi_free_smi_msg(smi_msg);
-diff --git a/drivers/crypto/qat/qat_common/Makefile b/drivers/crypto/qat/qat_common/Makefile
-index 29c7c53..92561c8 100644
---- a/drivers/crypto/qat/qat_common/Makefile
-+++ b/drivers/crypto/qat/qat_common/Makefile
-@@ -2,6 +2,7 @@ $(obj)/qat_rsapubkey-asn1.o: $(obj)/qat_rsapubkey-asn1.c \
- $(obj)/qat_rsapubkey-asn1.h
- $(obj)/qat_rsaprivkey-asn1.o: $(obj)/qat_rsaprivkey-asn1.c \
- $(obj)/qat_rsaprivkey-asn1.h
-+$(obj)/qat_asym_algs.o: $(obj)/qat_rsapubkey-asn1.h $(obj)/qat_rsaprivkey-asn1.h
-
- clean-files += qat_rsapubkey-asn1.c qat_rsapubkey-asn1.h
- clean-files += qat_rsaprivkey-asn1.c qat_rsaprivkey-asn1.h
-diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
-index 1472f48..ff51b51 100644
---- a/drivers/edac/edac_mc.c
-+++ b/drivers/edac/edac_mc.c
-@@ -565,7 +565,8 @@ void edac_mc_reset_delay_period(unsigned long value)
- list_for_each(item, &mc_devices) {
- mci = list_entry(item, struct mem_ctl_info, link);
-
-- edac_mod_work(&mci->work, value);
-+ if (mci->op_state == OP_RUNNING_POLL)
-+ edac_mod_work(&mci->work, value);
- }
- mutex_unlock(&mem_ctls_mutex);
- }
-diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
-index 8bf745d..b274fa2 100644
---- a/drivers/edac/sb_edac.c
-+++ b/drivers/edac/sb_edac.c
-@@ -239,8 +239,11 @@ static const u32 rir_offset[MAX_RIR_RANGES][MAX_RIR_WAY] = {
- { 0x1a0, 0x1a4, 0x1a8, 0x1ac, 0x1b0, 0x1b4, 0x1b8, 0x1bc },
- };
-
--#define RIR_RNK_TGT(reg) GET_BITFIELD(reg, 16, 19)
--#define RIR_OFFSET(reg) GET_BITFIELD(reg, 2, 14)
-+#define RIR_RNK_TGT(type, reg) (((type) == BROADWELL) ? \
-+ GET_BITFIELD(reg, 20, 23) : GET_BITFIELD(reg, 16, 19))
-+
-+#define RIR_OFFSET(type, reg) (((type) == HASWELL || (type) == BROADWELL) ? \
-+ GET_BITFIELD(reg, 2, 15) : GET_BITFIELD(reg, 2, 14))
-
- /* Device 16, functions 2-7 */
-
-@@ -1916,14 +1919,14 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
- pci_read_config_dword(pvt->pci_tad[i],
- rir_offset[j][k],
- &reg);
-- tmp_mb = RIR_OFFSET(reg) << 6;
-+ tmp_mb = RIR_OFFSET(pvt->info.type, reg) << 6;
-
- gb = div_u64_rem(tmp_mb, 1024, &mb);
- edac_dbg(0, "CH#%d RIR#%d INTL#%d, offset %u.%03u GB (0x%016Lx), tgt: %d, reg=0x%08x\n",
- i, j, k,
- gb, (mb*1000)/1024,
- ((u64)tmp_mb) << 20L,
-- (u32)RIR_RNK_TGT(reg),
-+ (u32)RIR_RNK_TGT(pvt->info.type, reg),
- reg);
- }
- }
-@@ -2256,7 +2259,7 @@ static int get_memory_error_data(struct mem_ctl_info *mci,
- pci_read_config_dword(pvt->pci_tad[ch_add + base_ch],
- rir_offset[n_rir][idx],
- &reg);
-- *rank = RIR_RNK_TGT(reg);
-+ *rank = RIR_RNK_TGT(pvt->info.type, reg);
-
- edac_dbg(0, "RIR#%d: channel address 0x%08Lx < 0x%08Lx, RIR interleave %d, index %d\n",
- n_rir,
-diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
-index 8b3226d..caff46c 100644
---- a/drivers/extcon/extcon-palmas.c
-+++ b/drivers/extcon/extcon-palmas.c
-@@ -360,6 +360,8 @@ static int palmas_usb_probe(struct platform_device *pdev)
-
- palmas_enable_irq(palmas_usb);
- /* perform initial detection */
-+ if (palmas_usb->enable_gpio_vbus_detection)
-+ palmas_vbus_irq_handler(palmas_usb->gpio_vbus_irq, palmas_usb);
- palmas_gpio_id_detect(&palmas_usb->wq_detectid.work);
- device_set_wakeup_capable(&pdev->dev, true);
- return 0;
-diff --git a/drivers/gpio/gpio-sch.c b/drivers/gpio/gpio-sch.c
-index e85e753..eb43ae4 100644
---- a/drivers/gpio/gpio-sch.c
-+++ b/drivers/gpio/gpio-sch.c
-@@ -61,9 +61,8 @@ static unsigned sch_gpio_bit(struct sch_gpio *sch, unsigned gpio)
- return gpio % 8;
- }
-
--static int sch_gpio_reg_get(struct gpio_chip *gc, unsigned gpio, unsigned reg)
-+static int sch_gpio_reg_get(struct sch_gpio *sch, unsigned gpio, unsigned reg)
- {
-- struct sch_gpio *sch = gpiochip_get_data(gc);
- unsigned short offset, bit;
- u8 reg_val;
-
-@@ -75,10 +74,9 @@ static int sch_gpio_reg_get(struct gpio_chip *gc, unsigned gpio, unsigned reg)
- return reg_val;
- }
-
--static void sch_gpio_reg_set(struct gpio_chip *gc, unsigned gpio, unsigned reg,
-+static void sch_gpio_reg_set(struct sch_gpio *sch, unsigned gpio, unsigned reg,
- int val)
- {
-- struct sch_gpio *sch = gpiochip_get_data(gc);
- unsigned short offset, bit;
- u8 reg_val;
-
-@@ -98,14 +96,15 @@ static int sch_gpio_direction_in(struct gpio_chip *gc, unsigned gpio_num)
- struct sch_gpio *sch = gpiochip_get_data(gc);
-
- spin_lock(&sch->lock);
-- sch_gpio_reg_set(gc, gpio_num, GIO, 1);
-+ sch_gpio_reg_set(sch, gpio_num, GIO, 1);
- spin_unlock(&sch->lock);
- return 0;
- }
-
- static int sch_gpio_get(struct gpio_chip *gc, unsigned gpio_num)
- {
-- return sch_gpio_reg_get(gc, gpio_num, GLV);
-+ struct sch_gpio *sch = gpiochip_get_data(gc);
-+ return sch_gpio_reg_get(sch, gpio_num, GLV);
- }
-
- static void sch_gpio_set(struct gpio_chip *gc, unsigned gpio_num, int val)
-@@ -113,7 +112,7 @@ static void sch_gpio_set(struct gpio_chip *gc, unsigned gpio_num, int val)
- struct sch_gpio *sch = gpiochip_get_data(gc);
-
- spin_lock(&sch->lock);
-- sch_gpio_reg_set(gc, gpio_num, GLV, val);
-+ sch_gpio_reg_set(sch, gpio_num, GLV, val);
- spin_unlock(&sch->lock);
- }
-
-@@ -123,7 +122,7 @@ static int sch_gpio_direction_out(struct gpio_chip *gc, unsigned gpio_num,
- struct sch_gpio *sch = gpiochip_get_data(gc);
-
- spin_lock(&sch->lock);
-- sch_gpio_reg_set(gc, gpio_num, GIO, 0);
-+ sch_gpio_reg_set(sch, gpio_num, GIO, 0);
- spin_unlock(&sch->lock);
-
- /*
-@@ -182,13 +181,13 @@ static int sch_gpio_probe(struct platform_device *pdev)
- * GPIO7 is configured by the CMC as SLPIOVR
- * Enable GPIO[9:8] core powered gpios explicitly
- */
-- sch_gpio_reg_set(&sch->chip, 8, GEN, 1);
-- sch_gpio_reg_set(&sch->chip, 9, GEN, 1);
-+ sch_gpio_reg_set(sch, 8, GEN, 1);
-+ sch_gpio_reg_set(sch, 9, GEN, 1);
- /*
- * SUS_GPIO[2:0] enabled by default
- * Enable SUS_GPIO3 resume powered gpio explicitly
- */
-- sch_gpio_reg_set(&sch->chip, 13, GEN, 1);
-+ sch_gpio_reg_set(sch, 13, GEN, 1);
- break;
-
- case PCI_DEVICE_ID_INTEL_ITC_LPC:
-diff --git a/drivers/gpio/gpiolib-legacy.c b/drivers/gpio/gpiolib-legacy.c
-index 3a5c701..8b83099 100644
---- a/drivers/gpio/gpiolib-legacy.c
-+++ b/drivers/gpio/gpiolib-legacy.c
-@@ -28,6 +28,10 @@ int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
- if (!desc && gpio_is_valid(gpio))
- return -EPROBE_DEFER;
-
-+ err = gpiod_request(desc, label);
-+ if (err)
-+ return err;
-+
- if (flags & GPIOF_OPEN_DRAIN)
- set_bit(FLAG_OPEN_DRAIN, &desc->flags);
-
-@@ -37,10 +41,6 @@ int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
- if (flags & GPIOF_ACTIVE_LOW)
- set_bit(FLAG_ACTIVE_LOW, &desc->flags);
-
-- err = gpiod_request(desc, label);
-- if (err)
-- return err;
--
- if (flags & GPIOF_DIR_IN)
- err = gpiod_direction_input(desc);
- else
-diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
-index cf3e712..996a733 100644
---- a/drivers/gpio/gpiolib.c
-+++ b/drivers/gpio/gpiolib.c
-@@ -1324,14 +1324,6 @@ static int __gpiod_request(struct gpio_desc *desc, const char *label)
- spin_lock_irqsave(&gpio_lock, flags);
- }
- done:
-- if (status < 0) {
-- /* Clear flags that might have been set by the caller before
-- * requesting the GPIO.
-- */
-- clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
-- clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
-- clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
-- }
- spin_unlock_irqrestore(&gpio_lock, flags);
- return status;
- }
-@@ -1345,8 +1337,12 @@ done:
- #define VALIDATE_DESC(desc) do { \
- if (!desc) \
- return 0; \
-+ if (IS_ERR(desc)) { \
-+ pr_warn("%s: invalid GPIO (errorpointer)\n", __func__); \
-+ return PTR_ERR(desc); \
-+ } \
- if (!desc->gdev) { \
-- pr_warn("%s: invalid GPIO\n", __func__); \
-+ pr_warn("%s: invalid GPIO (no device)\n", __func__); \
- return -EINVAL; \
- } \
- if ( !desc->gdev->chip ) { \
-@@ -1358,8 +1354,12 @@ done:
- #define VALIDATE_DESC_VOID(desc) do { \
- if (!desc) \
- return; \
-+ if (IS_ERR(desc)) { \
-+ pr_warn("%s: invalid GPIO (errorpointer)\n", __func__); \
-+ return; \
-+ } \
- if (!desc->gdev) { \
-- pr_warn("%s: invalid GPIO\n", __func__); \
-+ pr_warn("%s: invalid GPIO (no device)\n", __func__); \
- return; \
- } \
- if (!desc->gdev->chip) { \
-@@ -2011,7 +2011,7 @@ int gpiod_to_irq(const struct gpio_desc *desc)
- * requires this function to not return zero on an invalid descriptor
- * but rather a negative error number.
- */
-- if (!desc || !desc->gdev || !desc->gdev->chip)
-+ if (!desc || IS_ERR(desc) || !desc->gdev || !desc->gdev->chip)
- return -EINVAL;
-
- chip = desc->gdev->chip;
-@@ -2507,28 +2507,13 @@ struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
- }
- EXPORT_SYMBOL_GPL(gpiod_get_optional);
-
--/**
-- * gpiod_parse_flags - helper function to parse GPIO lookup flags
-- * @desc: gpio to be setup
-- * @lflags: gpio_lookup_flags - returned from of_find_gpio() or
-- * of_get_gpio_hog()
-- *
-- * Set the GPIO descriptor flags based on the given GPIO lookup flags.
-- */
--static void gpiod_parse_flags(struct gpio_desc *desc, unsigned long lflags)
--{
-- if (lflags & GPIO_ACTIVE_LOW)
-- set_bit(FLAG_ACTIVE_LOW, &desc->flags);
-- if (lflags & GPIO_OPEN_DRAIN)
-- set_bit(FLAG_OPEN_DRAIN, &desc->flags);
-- if (lflags & GPIO_OPEN_SOURCE)
-- set_bit(FLAG_OPEN_SOURCE, &desc->flags);
--}
-
- /**
- * gpiod_configure_flags - helper function to configure a given GPIO
- * @desc: gpio whose value will be assigned
- * @con_id: function within the GPIO consumer
-+ * @lflags: gpio_lookup_flags - returned from of_find_gpio() or
-+ * of_get_gpio_hog()
- * @dflags: gpiod_flags - optional GPIO initialization flags
- *
- * Return 0 on success, -ENOENT if no GPIO has been assigned to the
-@@ -2536,10 +2521,17 @@ static void gpiod_parse_flags(struct gpio_desc *desc, unsigned long lflags)
- * occurred while trying to acquire the GPIO.
- */
- static int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id,
-- enum gpiod_flags dflags)
-+ unsigned long lflags, enum gpiod_flags dflags)
- {
- int status;
-
-+ if (lflags & GPIO_ACTIVE_LOW)
-+ set_bit(FLAG_ACTIVE_LOW, &desc->flags);
-+ if (lflags & GPIO_OPEN_DRAIN)
-+ set_bit(FLAG_OPEN_DRAIN, &desc->flags);
-+ if (lflags & GPIO_OPEN_SOURCE)
-+ set_bit(FLAG_OPEN_SOURCE, &desc->flags);
-+
- /* No particular flag request, return here... */
- if (!(dflags & GPIOD_FLAGS_BIT_DIR_SET)) {
- pr_debug("no flags found for %s\n", con_id);
-@@ -2606,13 +2598,11 @@ struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
- return desc;
- }
-
-- gpiod_parse_flags(desc, lookupflags);
--
- status = gpiod_request(desc, con_id);
- if (status < 0)
- return ERR_PTR(status);
-
-- status = gpiod_configure_flags(desc, con_id, flags);
-+ status = gpiod_configure_flags(desc, con_id, lookupflags, flags);
- if (status < 0) {
- dev_dbg(dev, "setup of GPIO %s failed\n", con_id);
- gpiod_put(desc);
-@@ -2668,6 +2658,10 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
- if (IS_ERR(desc))
- return desc;
-
-+ ret = gpiod_request(desc, NULL);
-+ if (ret)
-+ return ERR_PTR(ret);
-+
- if (active_low)
- set_bit(FLAG_ACTIVE_LOW, &desc->flags);
-
-@@ -2678,10 +2672,6 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
- set_bit(FLAG_OPEN_SOURCE, &desc->flags);
- }
-
-- ret = gpiod_request(desc, NULL);
-- if (ret)
-- return ERR_PTR(ret);
--
- return desc;
- }
- EXPORT_SYMBOL_GPL(fwnode_get_named_gpiod);
-@@ -2734,8 +2724,6 @@ int gpiod_hog(struct gpio_desc *desc, const char *name,
- chip = gpiod_to_chip(desc);
- hwnum = gpio_chip_hwgpio(desc);
-
-- gpiod_parse_flags(desc, lflags);
--
- local_desc = gpiochip_request_own_desc(chip, hwnum, name);
- if (IS_ERR(local_desc)) {
- pr_err("requesting hog GPIO %s (chip %s, offset %d) failed\n",
-@@ -2743,7 +2731,7 @@ int gpiod_hog(struct gpio_desc *desc, const char *name,
- return PTR_ERR(local_desc);
- }
-
-- status = gpiod_configure_flags(desc, name, dflags);
-+ status = gpiod_configure_flags(desc, name, lflags, dflags);
- if (status < 0) {
- pr_err("setup of hog GPIO %s (chip %s, offset %d) failed\n",
- name, chip->label, hwnum);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
-index 6043dc7..3e21732 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
-@@ -880,7 +880,7 @@ static int amdgpu_cgs_acpi_eval_object(void *cgs_device,
- struct cgs_acpi_method_argument *argument = NULL;
- uint32_t i, count;
- acpi_status status;
-- int result;
-+ int result = 0;
- uint32_t func_no = 0xFFFFFFFF;
-
- handle = ACPI_HANDLE(&adev->pdev->dev);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
-index b04337d..d78739d 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
-@@ -448,7 +448,8 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
- dev_info.max_memory_clock = adev->pm.default_mclk * 10;
- }
- dev_info.enabled_rb_pipes_mask = adev->gfx.config.backend_enable_mask;
-- dev_info.num_rb_pipes = adev->gfx.config.num_rbs;
-+ dev_info.num_rb_pipes = adev->gfx.config.max_backends_per_se *
-+ adev->gfx.config.max_shader_engines;
- dev_info.num_hw_gfx_contexts = adev->gfx.config.max_hw_contexts;
- dev_info._pad = 0;
- dev_info.ids_flags = 0;
-diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
-index bb8709066..d2216f8 100644
---- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
-@@ -5074,7 +5074,7 @@ static int gfx_v7_0_eop_irq(struct amdgpu_device *adev,
- case 2:
- for (i = 0; i < adev->gfx.num_compute_rings; i++) {
- ring = &adev->gfx.compute_ring[i];
-- if ((ring->me == me_id) & (ring->pipe == pipe_id))
-+ if ((ring->me == me_id) && (ring->pipe == pipe_id))
- amdgpu_fence_process(ring);
- }
- break;
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-index ac00579..7708d90 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-@@ -242,13 +242,19 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn,
- pqm_uninit(&p->pqm);
-
- /* Iterate over all process device data structure and check
-- * if we should reset all wavefronts */
-- list_for_each_entry(pdd, &p->per_device_data, per_device_list)
-+ * if we should delete debug managers and reset all wavefronts
-+ */
-+ list_for_each_entry(pdd, &p->per_device_data, per_device_list) {
-+ if ((pdd->dev->dbgmgr) &&
-+ (pdd->dev->dbgmgr->pasid == p->pasid))
-+ kfd_dbgmgr_destroy(pdd->dev->dbgmgr);
-+
- if (pdd->reset_wavefronts) {
- pr_warn("amdkfd: Resetting all wave fronts\n");
- dbgdev_wave_reset_wavefronts(pdd->dev, p);
- pdd->reset_wavefronts = false;
- }
-+ }
-
- mutex_unlock(&p->mutex);
-
-@@ -404,42 +410,52 @@ void kfd_unbind_process_from_device(struct kfd_dev *dev, unsigned int pasid)
-
- idx = srcu_read_lock(&kfd_processes_srcu);
-
-+ /*
-+ * Look for the process that matches the pasid. If there is no such
-+ * process, we either released it in amdkfd's own notifier, or there
-+ * is a bug. Unfortunately, there is no way to tell...
-+ */
- hash_for_each_rcu(kfd_processes_table, i, p, kfd_processes)
-- if (p->pasid == pasid)
-- break;
-+ if (p->pasid == pasid) {
-
-- srcu_read_unlock(&kfd_processes_srcu, idx);
-+ srcu_read_unlock(&kfd_processes_srcu, idx);
-
-- BUG_ON(p->pasid != pasid);
-+ pr_debug("Unbinding process %d from IOMMU\n", pasid);
-
-- mutex_lock(&p->mutex);
-+ mutex_lock(&p->mutex);
-
-- if ((dev->dbgmgr) && (dev->dbgmgr->pasid == p->pasid))
-- kfd_dbgmgr_destroy(dev->dbgmgr);
-+ if ((dev->dbgmgr) && (dev->dbgmgr->pasid == p->pasid))
-+ kfd_dbgmgr_destroy(dev->dbgmgr);
-
-- pqm_uninit(&p->pqm);
-+ pqm_uninit(&p->pqm);
-
-- pdd = kfd_get_process_device_data(dev, p);
-+ pdd = kfd_get_process_device_data(dev, p);
-
-- if (!pdd) {
-- mutex_unlock(&p->mutex);
-- return;
-- }
-+ if (!pdd) {
-+ mutex_unlock(&p->mutex);
-+ return;
-+ }
-
-- if (pdd->reset_wavefronts) {
-- dbgdev_wave_reset_wavefronts(pdd->dev, p);
-- pdd->reset_wavefronts = false;
-- }
-+ if (pdd->reset_wavefronts) {
-+ dbgdev_wave_reset_wavefronts(pdd->dev, p);
-+ pdd->reset_wavefronts = false;
-+ }
-
-- /*
-- * Just mark pdd as unbound, because we still need it to call
-- * amd_iommu_unbind_pasid() in when the process exits.
-- * We don't call amd_iommu_unbind_pasid() here
-- * because the IOMMU called us.
-- */
-- pdd->bound = false;
-+ /*
-+ * Just mark pdd as unbound, because we still need it
-+ * to call amd_iommu_unbind_pasid() in when the
-+ * process exits.
-+ * We don't call amd_iommu_unbind_pasid() here
-+ * because the IOMMU called us.
-+ */
-+ pdd->bound = false;
-
-- mutex_unlock(&p->mutex);
-+ mutex_unlock(&p->mutex);
-+
-+ return;
-+ }
-+
-+ srcu_read_unlock(&kfd_processes_srcu, idx);
- }
-
- struct kfd_process_device *kfd_get_first_process_device_data(struct kfd_process *p)
-diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c b/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c
-index fa208ad..efb77ed 100644
---- a/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c
-+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c
-@@ -306,10 +306,14 @@ int phm_store_dal_configuration_data(struct pp_hwmgr *hwmgr,
- {
- PHM_FUNC_CHECK(hwmgr);
-
-- if (hwmgr->hwmgr_func->store_cc6_data == NULL)
-+ if (display_config == NULL)
- return -EINVAL;
-
- hwmgr->display_config = *display_config;
-+
-+ if (hwmgr->hwmgr_func->store_cc6_data == NULL)
-+ return -EINVAL;
-+
- /* to do pass other display configuration in furture */
-
- if (hwmgr->hwmgr_func->store_cc6_data)
-diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c b/drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c
-index 7b2d500..7cce483 100644
---- a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c
-+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/pp_acpi.c
-@@ -21,6 +21,20 @@ bool acpi_atcs_functions_supported(void *device, uint32_t index)
- return result == 0 ? (output_buf.function_bits & (1 << (index - 1))) != 0 : false;
- }
-
-+bool acpi_atcs_notify_pcie_device_ready(void *device)
-+{
-+ int32_t temp_buffer = 1;
-+
-+ return cgs_call_acpi_method(device, CGS_ACPI_METHOD_ATCS,
-+ ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION,
-+ &temp_buffer,
-+ NULL,
-+ 0,
-+ sizeof(temp_buffer),
-+ 0);
-+}
-+
-+
- int acpi_pcie_perf_request(void *device, uint8_t perf_req, bool advertise)
- {
- struct atcs_pref_req_input atcs_input;
-@@ -29,7 +43,7 @@ int acpi_pcie_perf_request(void *device, uint8_t perf_req, bool advertise)
- int result;
- struct cgs_system_info info = {0};
-
-- if (!acpi_atcs_functions_supported(device, ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST))
-+ if( 0 != acpi_atcs_notify_pcie_device_ready(device))
- return -EINVAL;
-
- info.size = sizeof(struct cgs_system_info);
-@@ -54,7 +68,7 @@ int acpi_pcie_perf_request(void *device, uint8_t perf_req, bool advertise)
- ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST,
- &atcs_input,
- &atcs_output,
-- 0,
-+ 1,
- sizeof(atcs_input),
- sizeof(atcs_output));
- if (result != 0)
-diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c
-index 0d5d837..aae2e8e 100644
---- a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c
-+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c
-@@ -1298,7 +1298,7 @@ static int tonga_populate_smc_mvdd_table(struct pp_hwmgr *hwmgr,
- table->Smio[count] |=
- data->mvdd_voltage_table.entries[count].smio_low;
- }
-- table->SmioMask2 = data->vddci_voltage_table.mask_low;
-+ table->SmioMask2 = data->mvdd_voltage_table.mask_low;
-
- CONVERT_FROM_HOST_TO_SMC_UL(table->MvddLevelCount);
- }
-diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_processpptables.c
-index b156481..17766e8 100644
---- a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_processpptables.c
-+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_processpptables.c
-@@ -299,7 +299,7 @@ static int init_dpm_2_parameters(
- (((unsigned long)powerplay_table) + le16_to_cpu(powerplay_table->usPPMTableOffset));
-
- if (0 != powerplay_table->usPPMTableOffset) {
-- if (1 == get_platform_power_management_table(hwmgr, atom_ppm_table)) {
-+ if (get_platform_power_management_table(hwmgr, atom_ppm_table) == 0) {
- phm_cap_set(hwmgr->platform_descriptor.platformCaps,
- PHM_PlatformCaps_EnablePlatformPowerManagement);
- }
-diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h b/drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h
-index 3bd5e69..3df5de2 100644
---- a/drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h
-+++ b/drivers/gpu/drm/amd/powerplay/inc/pp_acpi.h
-@@ -26,3 +26,4 @@ extern bool acpi_atcs_functions_supported(void *device,
- extern int acpi_pcie_perf_request(void *device,
- uint8_t perf_req,
- bool advertise);
-+extern bool acpi_atcs_notify_pcie_device_ready(void *device);
-diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
-index d65dcae..6d9c0f5 100644
---- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
-+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
-@@ -335,6 +335,8 @@ atmel_hlcdc_plane_update_pos_and_size(struct atmel_hlcdc_plane *plane,
-
- atmel_hlcdc_layer_update_cfg(&plane->layer, 13, 0xffffffff,
- factor_reg);
-+ } else {
-+ atmel_hlcdc_layer_update_cfg(&plane->layer, 13, 0xffffffff, 0);
- }
- }
-
-diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
-index d307d96..080a090 100644
---- a/drivers/gpu/drm/drm_atomic.c
-+++ b/drivers/gpu/drm/drm_atomic.c
-@@ -354,6 +354,8 @@ int drm_atomic_set_mode_prop_for_crtc(struct drm_crtc_state *state,
- drm_property_unreference_blob(state->mode_blob);
- state->mode_blob = NULL;
-
-+ memset(&state->mode, 0, sizeof(state->mode));
-+
- if (blob) {
- if (blob->length != sizeof(struct drm_mode_modeinfo) ||
- drm_mode_convert_umode(&state->mode,
-@@ -366,7 +368,6 @@ int drm_atomic_set_mode_prop_for_crtc(struct drm_crtc_state *state,
- DRM_DEBUG_ATOMIC("Set [MODE:%s] for CRTC state %p\n",
- state->mode.name, state);
- } else {
-- memset(&state->mode, 0, sizeof(state->mode));
- state->enable = false;
- DRM_DEBUG_ATOMIC("Set [NOMODE] for CRTC state %p\n",
- state);
-@@ -1287,14 +1288,39 @@ EXPORT_SYMBOL(drm_atomic_add_affected_planes);
- */
- void drm_atomic_legacy_backoff(struct drm_atomic_state *state)
- {
-+ struct drm_device *dev = state->dev;
-+ unsigned crtc_mask = 0;
-+ struct drm_crtc *crtc;
- int ret;
-+ bool global = false;
-+
-+ drm_for_each_crtc(crtc, dev) {
-+ if (crtc->acquire_ctx != state->acquire_ctx)
-+ continue;
-+
-+ crtc_mask |= drm_crtc_mask(crtc);
-+ crtc->acquire_ctx = NULL;
-+ }
-+
-+ if (WARN_ON(dev->mode_config.acquire_ctx == state->acquire_ctx)) {
-+ global = true;
-+
-+ dev->mode_config.acquire_ctx = NULL;
-+ }
-
- retry:
- drm_modeset_backoff(state->acquire_ctx);
-
-- ret = drm_modeset_lock_all_ctx(state->dev, state->acquire_ctx);
-+ ret = drm_modeset_lock_all_ctx(dev, state->acquire_ctx);
- if (ret)
- goto retry;
-+
-+ drm_for_each_crtc(crtc, dev)
-+ if (drm_crtc_mask(crtc) & crtc_mask)
-+ crtc->acquire_ctx = state->acquire_ctx;
-+
-+ if (global)
-+ dev->mode_config.acquire_ctx = state->acquire_ctx;
- }
- EXPORT_SYMBOL(drm_atomic_legacy_backoff);
-
-diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
-index f30de80..691a1b9 100644
---- a/drivers/gpu/drm/drm_crtc.c
-+++ b/drivers/gpu/drm/drm_crtc.c
-@@ -2800,8 +2800,6 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
- goto out;
- }
-
-- drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
--
- /*
- * Check whether the primary plane supports the fb pixel format.
- * Drivers not implementing the universal planes API use a
-diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
-index 71ea052..ccfe7e7 100644
---- a/drivers/gpu/drm/drm_dp_mst_topology.c
-+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
-@@ -2908,11 +2908,9 @@ static void drm_dp_destroy_connector_work(struct work_struct *work)
- drm_dp_port_teardown_pdt(port, port->pdt);
-
- if (!port->input && port->vcpi.vcpi > 0) {
-- if (mgr->mst_state) {
-- drm_dp_mst_reset_vcpi_slots(mgr, port);
-- drm_dp_update_payload_part1(mgr);
-- drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
-- }
-+ drm_dp_mst_reset_vcpi_slots(mgr, port);
-+ drm_dp_update_payload_part1(mgr);
-+ drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
- }
-
- kref_put(&port->kref, drm_dp_free_mst_port);
-diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
-index bb88e3d..e619b00 100644
---- a/drivers/gpu/drm/drm_fb_cma_helper.c
-+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
-@@ -301,7 +301,7 @@ static int drm_fbdev_cma_create(struct drm_fb_helper *helper,
- err_fb_info_destroy:
- drm_fb_helper_release_fbi(helper);
- err_gem_free_object:
-- dev->driver->gem_free_object(&obj->base);
-+ drm_gem_object_unreference_unlocked(&obj->base);
- return ret;
- }
-
-diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
-index 1f500a1..d988ca0 100644
---- a/drivers/gpu/drm/drm_gem_cma_helper.c
-+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
-@@ -121,7 +121,7 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
- return cma_obj;
-
- error:
-- drm->driver->gem_free_object(&cma_obj->base);
-+ drm_gem_object_unreference_unlocked(&cma_obj->base);
- return ERR_PTR(ret);
- }
- EXPORT_SYMBOL_GPL(drm_gem_cma_create);
-@@ -162,18 +162,12 @@ drm_gem_cma_create_with_handle(struct drm_file *file_priv,
- * and handle has the id what user can see.
- */
- ret = drm_gem_handle_create(file_priv, gem_obj, handle);
-- if (ret)
-- goto err_handle_create;
--
- /* drop reference from allocate - handle holds it now. */
- drm_gem_object_unreference_unlocked(gem_obj);
-+ if (ret)
-+ return ERR_PTR(ret);
-
- return cma_obj;
--
--err_handle_create:
-- drm->driver->gem_free_object(gem_obj);
--
-- return ERR_PTR(ret);
- }
-
- /**
-diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
-index f7448a5..5d0fc26 100644
---- a/drivers/gpu/drm/drm_modes.c
-+++ b/drivers/gpu/drm/drm_modes.c
-@@ -1518,6 +1518,8 @@ int drm_mode_convert_umode(struct drm_display_mode *out,
- if (out->status != MODE_OK)
- goto out;
-
-+ drm_mode_set_crtcinfo(out, CRTC_INTERLACE_HALVE_V);
-+
- ret = 0;
-
- out:
-diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
-index e8d9337..77886f1 100644
---- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
-+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
-@@ -40,9 +40,10 @@ static const struct regmap_config fsl_dcu_regmap_config = {
- .reg_bits = 32,
- .reg_stride = 4,
- .val_bits = 32,
-- .cache_type = REGCACHE_RBTREE,
-+ .cache_type = REGCACHE_FLAT,
-
- .volatile_reg = fsl_dcu_drm_is_volatile_reg,
-+ .max_register = 0x11fc,
- };
-
- static int fsl_dcu_drm_irq_init(struct drm_device *dev)
-diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c
-index d3c473f..3af4061 100644
---- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
-+++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
-@@ -39,7 +39,7 @@ static bool mutex_is_locked_by(struct mutex *mutex, struct task_struct *task)
- if (!mutex_is_locked(mutex))
- return false;
-
--#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_MUTEXES)
-+#if defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_MUTEX_SPIN_ON_OWNER)
- return mutex->owner == task;
- #else
- /* Since UP may be pre-empted, we cannot assume that we own the lock */
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index 7741efb..e5db9e1 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -8229,12 +8229,14 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
- {
- struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_encoder *encoder;
-+ int i;
- u32 val, final;
- bool has_lvds = false;
- bool has_cpu_edp = false;
- bool has_panel = false;
- bool has_ck505 = false;
- bool can_ssc = false;
-+ bool using_ssc_source = false;
-
- /* We need to take the global config into account */
- for_each_intel_encoder(dev, encoder) {
-@@ -8261,8 +8263,22 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
- can_ssc = true;
- }
-
-- DRM_DEBUG_KMS("has_panel %d has_lvds %d has_ck505 %d\n",
-- has_panel, has_lvds, has_ck505);
-+ /* Check if any DPLLs are using the SSC source */
-+ for (i = 0; i < dev_priv->num_shared_dpll; i++) {
-+ u32 temp = I915_READ(PCH_DPLL(i));
-+
-+ if (!(temp & DPLL_VCO_ENABLE))
-+ continue;
-+
-+ if ((temp & PLL_REF_INPUT_MASK) ==
-+ PLLB_REF_INPUT_SPREADSPECTRUMIN) {
-+ using_ssc_source = true;
-+ break;
-+ }
-+ }
-+
-+ DRM_DEBUG_KMS("has_panel %d has_lvds %d has_ck505 %d using_ssc_source %d\n",
-+ has_panel, has_lvds, has_ck505, using_ssc_source);
-
- /* Ironlake: try to setup display ref clock before DPLL
- * enabling. This is only under driver's control after
-@@ -8299,9 +8315,9 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
- final |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
- } else
- final |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
-- } else {
-- final |= DREF_SSC_SOURCE_DISABLE;
-- final |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
-+ } else if (using_ssc_source) {
-+ final |= DREF_SSC_SOURCE_ENABLE;
-+ final |= DREF_SSC1_ENABLE;
- }
-
- if (final == val)
-@@ -8347,7 +8363,7 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
- POSTING_READ(PCH_DREF_CONTROL);
- udelay(200);
- } else {
-- DRM_DEBUG_KMS("Disabling SSC entirely\n");
-+ DRM_DEBUG_KMS("Disabling CPU source output\n");
-
- val &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
-
-@@ -8358,16 +8374,20 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
- POSTING_READ(PCH_DREF_CONTROL);
- udelay(200);
-
-- /* Turn off the SSC source */
-- val &= ~DREF_SSC_SOURCE_MASK;
-- val |= DREF_SSC_SOURCE_DISABLE;
-+ if (!using_ssc_source) {
-+ DRM_DEBUG_KMS("Disabling SSC source\n");
-
-- /* Turn off SSC1 */
-- val &= ~DREF_SSC1_ENABLE;
-+ /* Turn off the SSC source */
-+ val &= ~DREF_SSC_SOURCE_MASK;
-+ val |= DREF_SSC_SOURCE_DISABLE;
-
-- I915_WRITE(PCH_DREF_CONTROL, val);
-- POSTING_READ(PCH_DREF_CONTROL);
-- udelay(200);
-+ /* Turn off SSC1 */
-+ val &= ~DREF_SSC1_ENABLE;
-+
-+ I915_WRITE(PCH_DREF_CONTROL, val);
-+ POSTING_READ(PCH_DREF_CONTROL);
-+ udelay(200);
-+ }
- }
-
- BUG_ON(val != final);
-diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
-index 412a34c..69054ef 100644
---- a/drivers/gpu/drm/i915/intel_dp.c
-+++ b/drivers/gpu/drm/i915/intel_dp.c
-@@ -4942,13 +4942,15 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
-
- void intel_dp_encoder_reset(struct drm_encoder *encoder)
- {
-- struct intel_dp *intel_dp;
-+ struct drm_i915_private *dev_priv = to_i915(encoder->dev);
-+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
-+
-+ if (!HAS_DDI(dev_priv))
-+ intel_dp->DP = I915_READ(intel_dp->output_reg);
-
- if (to_intel_encoder(encoder)->type != INTEL_OUTPUT_EDP)
- return;
-
-- intel_dp = enc_to_intel_dp(encoder);
--
- pps_lock(intel_dp);
-
- /*
-@@ -5020,9 +5022,6 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
- intel_display_power_get(dev_priv, power_domain);
-
- if (long_hpd) {
-- /* indicate that we need to restart link training */
-- intel_dp->train_set_valid = false;
--
- if (!intel_digital_port_connected(dev_priv, intel_dig_port))
- goto mst_fail;
-
-diff --git a/drivers/gpu/drm/i915/intel_dp_link_training.c b/drivers/gpu/drm/i915/intel_dp_link_training.c
-index 0b8eefc..926a1e6 100644
---- a/drivers/gpu/drm/i915/intel_dp_link_training.c
-+++ b/drivers/gpu/drm/i915/intel_dp_link_training.c
-@@ -85,8 +85,7 @@ static bool
- intel_dp_reset_link_train(struct intel_dp *intel_dp,
- uint8_t dp_train_pat)
- {
-- if (!intel_dp->train_set_valid)
-- memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
-+ memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
- intel_dp_set_signal_levels(intel_dp);
- return intel_dp_set_link_train(intel_dp, dp_train_pat);
- }
-@@ -161,22 +160,6 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp)
- break;
- }
-
-- /*
-- * if we used previously trained voltage and pre-emphasis values
-- * and we don't get clock recovery, reset link training values
-- */
-- if (intel_dp->train_set_valid) {
-- DRM_DEBUG_KMS("clock recovery not ok, reset");
-- /* clear the flag as we are not reusing train set */
-- intel_dp->train_set_valid = false;
-- if (!intel_dp_reset_link_train(intel_dp,
-- DP_TRAINING_PATTERN_1 |
-- DP_LINK_SCRAMBLING_DISABLE)) {
-- DRM_ERROR("failed to enable link training\n");
-- return;
-- }
-- continue;
-- }
-
- /* Check to see if we've tried the max voltage */
- for (i = 0; i < intel_dp->lane_count; i++)
-@@ -284,7 +267,6 @@ intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp)
- /* Make sure clock is still ok */
- if (!drm_dp_clock_recovery_ok(link_status,
- intel_dp->lane_count)) {
-- intel_dp->train_set_valid = false;
- intel_dp_link_training_clock_recovery(intel_dp);
- intel_dp_set_link_train(intel_dp,
- training_pattern |
-@@ -301,7 +283,6 @@ intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp)
-
- /* Try 5 times, then try clock recovery if that fails */
- if (tries > 5) {
-- intel_dp->train_set_valid = false;
- intel_dp_link_training_clock_recovery(intel_dp);
- intel_dp_set_link_train(intel_dp,
- training_pattern |
-@@ -322,10 +303,8 @@ intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp)
-
- intel_dp_set_idle_link_train(intel_dp);
-
-- if (channel_eq) {
-- intel_dp->train_set_valid = true;
-+ if (channel_eq)
- DRM_DEBUG_KMS("Channel EQ done. DP Training successful\n");
-- }
- }
-
- void intel_dp_stop_link_train(struct intel_dp *intel_dp)
-diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
-index 3a30b37..8dd2cc5 100644
---- a/drivers/gpu/drm/i915/intel_drv.h
-+++ b/drivers/gpu/drm/i915/intel_drv.h
-@@ -811,8 +811,6 @@ struct intel_dp {
- /* This is called before a link training is starterd */
- void (*prepare_link_retrain)(struct intel_dp *intel_dp);
-
-- bool train_set_valid;
--
- /* Displayport compliance testing */
- unsigned long compliance_test_type;
- unsigned long compliance_test_data;
-diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
-index 0f0492f..28f4407 100644
---- a/drivers/gpu/drm/i915/intel_fbc.c
-+++ b/drivers/gpu/drm/i915/intel_fbc.c
-@@ -823,8 +823,7 @@ static bool intel_fbc_can_choose(struct intel_crtc *crtc)
- {
- struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
- struct intel_fbc *fbc = &dev_priv->fbc;
-- bool enable_by_default = IS_HASWELL(dev_priv) ||
-- IS_BROADWELL(dev_priv);
-+ bool enable_by_default = IS_BROADWELL(dev_priv);
-
- if (intel_vgpu_active(dev_priv->dev)) {
- fbc->no_fbc_reason = "VGPU is active";
-diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
-index 14e64e0..d347dca 100644
---- a/drivers/gpu/drm/mgag200/mgag200_mode.c
-+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
-@@ -182,7 +182,7 @@ static int mga_g200se_set_plls(struct mga_device *mdev, long clock)
- }
- }
-
-- fvv = pllreffreq * testn / testm;
-+ fvv = pllreffreq * (n + 1) / (m + 1);
- fvv = (fvv - 800000) / 50000;
-
- if (fvv > 15)
-@@ -202,6 +202,14 @@ static int mga_g200se_set_plls(struct mga_device *mdev, long clock)
- WREG_DAC(MGA1064_PIX_PLLC_M, m);
- WREG_DAC(MGA1064_PIX_PLLC_N, n);
- WREG_DAC(MGA1064_PIX_PLLC_P, p);
-+
-+ if (mdev->unique_rev_id >= 0x04) {
-+ WREG_DAC(0x1a, 0x09);
-+ msleep(20);
-+ WREG_DAC(0x1a, 0x01);
-+
-+ }
-+
- return 0;
- }
-
-diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/disp.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/disp.h
-index db10c11..c5a6ebd 100644
---- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/disp.h
-+++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/disp.h
-@@ -25,7 +25,8 @@ u16 nvbios_outp_match(struct nvkm_bios *, u16 type, u16 mask,
- u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_outp *);
-
- struct nvbios_ocfg {
-- u16 match;
-+ u8 proto;
-+ u8 flags;
- u16 clkcmp[2];
- };
-
-@@ -33,7 +34,7 @@ u16 nvbios_ocfg_entry(struct nvkm_bios *, u16 outp, u8 idx,
- u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
- u16 nvbios_ocfg_parse(struct nvkm_bios *, u16 outp, u8 idx,
- u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_ocfg *);
--u16 nvbios_ocfg_match(struct nvkm_bios *, u16 outp, u16 type,
-+u16 nvbios_ocfg_match(struct nvkm_bios *, u16 outp, u8 proto, u8 flags,
- u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_ocfg *);
- u16 nvbios_oclk_match(struct nvkm_bios *, u16 cmp, u32 khz);
- #endif
-diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
-index 59f27e7..e40a1b0 100644
---- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
-+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
-@@ -557,6 +557,8 @@ nouveau_fbcon_init(struct drm_device *dev)
- if (ret)
- goto fini;
-
-+ if (fbcon->helper.fbdev)
-+ fbcon->helper.fbdev->pixmap.buf_align = 4;
- return 0;
-
- fini:
-diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c
-index 789dc29..8f715fe 100644
---- a/drivers/gpu/drm/nouveau/nv04_fbcon.c
-+++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c
-@@ -82,7 +82,6 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- uint32_t fg;
- uint32_t bg;
- uint32_t dsize;
-- uint32_t width;
- uint32_t *data = (uint32_t *)image->data;
- int ret;
-
-@@ -93,9 +92,6 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- if (ret)
- return ret;
-
-- width = ALIGN(image->width, 8);
-- dsize = ALIGN(width * image->height, 32) >> 5;
--
- if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
- info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
- fg = ((uint32_t *) info->pseudo_palette)[image->fg_color];
-@@ -111,10 +107,11 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- ((image->dx + image->width) & 0xffff));
- OUT_RING(chan, bg);
- OUT_RING(chan, fg);
-- OUT_RING(chan, (image->height << 16) | width);
-+ OUT_RING(chan, (image->height << 16) | image->width);
- OUT_RING(chan, (image->height << 16) | image->width);
- OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff));
-
-+ dsize = ALIGN(image->width * image->height, 32) >> 5;
- while (dsize) {
- int iter_len = dsize > 128 ? 128 : dsize;
-
-diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c
-index e05499d..a4e259a 100644
---- a/drivers/gpu/drm/nouveau/nv50_fbcon.c
-+++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c
-@@ -95,7 +95,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- struct nouveau_fbdev *nfbdev = info->par;
- struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
- struct nouveau_channel *chan = drm->channel;
-- uint32_t width, dwords, *data = (uint32_t *)image->data;
-+ uint32_t dwords, *data = (uint32_t *)image->data;
- uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel));
- uint32_t *palette = info->pseudo_palette;
- int ret;
-@@ -107,9 +107,6 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- if (ret)
- return ret;
-
-- width = ALIGN(image->width, 32);
-- dwords = (width * image->height) >> 5;
--
- BEGIN_NV04(chan, NvSub2D, 0x0814, 2);
- if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
- info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
-@@ -128,6 +125,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- OUT_RING(chan, 0);
- OUT_RING(chan, image->dy);
-
-+ dwords = ALIGN(image->width * image->height, 32) >> 5;
- while (dwords) {
- int push = dwords > 2047 ? 2047 : dwords;
-
-diff --git a/drivers/gpu/drm/nouveau/nvc0_fbcon.c b/drivers/gpu/drm/nouveau/nvc0_fbcon.c
-index c97395b..f28315e 100644
---- a/drivers/gpu/drm/nouveau/nvc0_fbcon.c
-+++ b/drivers/gpu/drm/nouveau/nvc0_fbcon.c
-@@ -95,7 +95,7 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- struct nouveau_fbdev *nfbdev = info->par;
- struct nouveau_drm *drm = nouveau_drm(nfbdev->dev);
- struct nouveau_channel *chan = drm->channel;
-- uint32_t width, dwords, *data = (uint32_t *)image->data;
-+ uint32_t dwords, *data = (uint32_t *)image->data;
- uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel));
- uint32_t *palette = info->pseudo_palette;
- int ret;
-@@ -107,9 +107,6 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- if (ret)
- return ret;
-
-- width = ALIGN(image->width, 32);
-- dwords = (width * image->height) >> 5;
--
- BEGIN_NVC0(chan, NvSub2D, 0x0814, 2);
- if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
- info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
-@@ -128,6 +125,7 @@ nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
- OUT_RING (chan, 0);
- OUT_RING (chan, image->dy);
-
-+ dwords = ALIGN(image->width * image->height, 32) >> 5;
- while (dwords) {
- int push = dwords > 2047 ? 2047 : dwords;
-
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
-index 18fab397..62ad030 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
-@@ -1614,7 +1614,7 @@ nvkm_device_pci_func = {
- .fini = nvkm_device_pci_fini,
- .resource_addr = nvkm_device_pci_resource_addr,
- .resource_size = nvkm_device_pci_resource_size,
-- .cpu_coherent = !IS_ENABLED(CONFIG_ARM) && !IS_ENABLED(CONFIG_ARM64),
-+ .cpu_coherent = !IS_ENABLED(CONFIG_ARM),
- };
-
- int
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
-index a74c5dd..e2a64ed 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/Kbuild
-@@ -18,6 +18,7 @@ nvkm-y += nvkm/engine/disp/piornv50.o
- nvkm-y += nvkm/engine/disp/sornv50.o
- nvkm-y += nvkm/engine/disp/sorg94.o
- nvkm-y += nvkm/engine/disp/sorgf119.o
-+nvkm-y += nvkm/engine/disp/sorgm107.o
- nvkm-y += nvkm/engine/disp/sorgm200.o
- nvkm-y += nvkm/engine/disp/dport.o
-
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c
-index f031466..5dd3438 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c
-@@ -76,6 +76,7 @@ exec_lookup(struct nv50_disp *disp, int head, int or, u32 ctrl,
- mask |= 0x0001 << or;
- mask |= 0x0100 << head;
-
-+
- list_for_each_entry(outp, &disp->base.outp, head) {
- if ((outp->info.hasht & 0xff) == type &&
- (outp->info.hashm & mask) == mask) {
-@@ -155,25 +156,21 @@ exec_clkcmp(struct nv50_disp *disp, int head, int id, u32 pclk, u32 *conf)
- if (!outp)
- return NULL;
-
-+ *conf = (ctrl & 0x00000f00) >> 8;
- switch (outp->info.type) {
- case DCB_OUTPUT_TMDS:
-- *conf = (ctrl & 0x00000f00) >> 8;
- if (*conf == 5)
- *conf |= 0x0100;
- break;
- case DCB_OUTPUT_LVDS:
-- *conf = disp->sor.lvdsconf;
-- break;
-- case DCB_OUTPUT_DP:
-- *conf = (ctrl & 0x00000f00) >> 8;
-+ *conf |= disp->sor.lvdsconf;
- break;
-- case DCB_OUTPUT_ANALOG:
- default:
-- *conf = 0x00ff;
- break;
- }
-
-- data = nvbios_ocfg_match(bios, data, *conf, &ver, &hdr, &cnt, &len, &info2);
-+ data = nvbios_ocfg_match(bios, data, *conf & 0xff, *conf >> 8,
-+ &ver, &hdr, &cnt, &len, &info2);
- if (data && id < 0xff) {
- data = nvbios_oclk_match(bios, info2.clkcmp[id], pclk);
- if (data) {
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c
-index b694414..f4b9cf8 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c
-@@ -36,7 +36,7 @@ gm107_disp = {
- .outp.internal.crt = nv50_dac_output_new,
- .outp.internal.tmds = nv50_sor_output_new,
- .outp.internal.lvds = nv50_sor_output_new,
-- .outp.internal.dp = gf119_sor_dp_new,
-+ .outp.internal.dp = gm107_sor_dp_new,
- .dac.nr = 3,
- .dac.power = nv50_dac_power,
- .dac.sense = nv50_dac_sense,
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
-index 4226d21..fcb1b0c 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
-@@ -387,22 +387,17 @@ exec_clkcmp(struct nv50_disp *disp, int head, int id, u32 pclk, u32 *conf)
- if (!outp)
- return NULL;
-
-+ *conf = (ctrl & 0x00000f00) >> 8;
- if (outp->info.location == 0) {
- switch (outp->info.type) {
- case DCB_OUTPUT_TMDS:
-- *conf = (ctrl & 0x00000f00) >> 8;
- if (*conf == 5)
- *conf |= 0x0100;
- break;
- case DCB_OUTPUT_LVDS:
-- *conf = disp->sor.lvdsconf;
-+ *conf |= disp->sor.lvdsconf;
- break;
-- case DCB_OUTPUT_DP:
-- *conf = (ctrl & 0x00000f00) >> 8;
-- break;
-- case DCB_OUTPUT_ANALOG:
- default:
-- *conf = 0x00ff;
- break;
- }
- } else {
-@@ -410,7 +405,8 @@ exec_clkcmp(struct nv50_disp *disp, int head, int id, u32 pclk, u32 *conf)
- pclk = pclk / 2;
- }
-
-- data = nvbios_ocfg_match(bios, data, *conf, &ver, &hdr, &cnt, &len, &info2);
-+ data = nvbios_ocfg_match(bios, data, *conf & 0xff, *conf >> 8,
-+ &ver, &hdr, &cnt, &len, &info2);
- if (data && id < 0xff) {
- data = nvbios_oclk_match(bios, info2.clkcmp[id], pclk);
- if (data) {
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h
-index e9067ba..4e983f6 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outpdp.h
-@@ -62,7 +62,12 @@ int g94_sor_dp_lnk_pwr(struct nvkm_output_dp *, int);
- int gf119_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
- struct nvkm_output **);
- int gf119_sor_dp_lnk_ctl(struct nvkm_output_dp *, int, int, bool);
-+int gf119_sor_dp_drv_ctl(struct nvkm_output_dp *, int, int, int, int);
-
--int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
-- struct nvkm_output **);
-+int gm107_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
-+ struct nvkm_output **);
-+int gm107_sor_dp_pattern(struct nvkm_output_dp *, int);
-+
-+int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
-+ struct nvkm_output **);
- #endif
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
-index b4b41b1..49bd5da 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c
-@@ -40,8 +40,8 @@ static int
- gf119_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern)
- {
- struct nvkm_device *device = outp->base.disp->engine.subdev.device;
-- const u32 loff = gf119_sor_loff(outp);
-- nvkm_mask(device, 0x61c110 + loff, 0x0f0f0f0f, 0x01010101 * pattern);
-+ const u32 soff = gf119_sor_soff(outp);
-+ nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, 0x01010101 * pattern);
- return 0;
- }
-
-@@ -64,7 +64,7 @@ gf119_sor_dp_lnk_ctl(struct nvkm_output_dp *outp, int nr, int bw, bool ef)
- return 0;
- }
-
--static int
-+int
- gf119_sor_dp_drv_ctl(struct nvkm_output_dp *outp,
- int ln, int vs, int pe, int pc)
- {
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
-new file mode 100644
-index 0000000..37790b2
---- /dev/null
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm107.c
-@@ -0,0 +1,53 @@
-+/*
-+ * Copyright 2016 Red Hat Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: Ben Skeggs <bskeggs@redhat.com>
-+ */
-+#include "nv50.h"
-+#include "outpdp.h"
-+
-+int
-+gm107_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern)
-+{
-+ struct nvkm_device *device = outp->base.disp->engine.subdev.device;
-+ const u32 soff = outp->base.or * 0x800;
-+ const u32 data = 0x01010101 * pattern;
-+ if (outp->base.info.sorconf.link & 1)
-+ nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, data);
-+ else
-+ nvkm_mask(device, 0x61c12c + soff, 0x0f0f0f0f, data);
-+ return 0;
-+}
-+
-+static const struct nvkm_output_dp_func
-+gm107_sor_dp_func = {
-+ .pattern = gm107_sor_dp_pattern,
-+ .lnk_pwr = g94_sor_dp_lnk_pwr,
-+ .lnk_ctl = gf119_sor_dp_lnk_ctl,
-+ .drv_ctl = gf119_sor_dp_drv_ctl,
-+};
-+
-+int
-+gm107_sor_dp_new(struct nvkm_disp *disp, int index,
-+ struct dcb_output *dcbE, struct nvkm_output **poutp)
-+{
-+ return nvkm_output_dp_new_(&gm107_sor_dp_func, disp, index, dcbE, poutp);
-+}
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
-index 2cfbef9..c44fa7e 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c
-@@ -57,19 +57,6 @@ gm200_sor_dp_lane_map(struct nvkm_device *device, u8 lane)
- }
-
- static int
--gm200_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern)
--{
-- struct nvkm_device *device = outp->base.disp->engine.subdev.device;
-- const u32 soff = gm200_sor_soff(outp);
-- const u32 data = 0x01010101 * pattern;
-- if (outp->base.info.sorconf.link & 1)
-- nvkm_mask(device, 0x61c110 + soff, 0x0f0f0f0f, data);
-- else
-- nvkm_mask(device, 0x61c12c + soff, 0x0f0f0f0f, data);
-- return 0;
--}
--
--static int
- gm200_sor_dp_lnk_pwr(struct nvkm_output_dp *outp, int nr)
- {
- struct nvkm_device *device = outp->base.disp->engine.subdev.device;
-@@ -129,7 +116,7 @@ gm200_sor_dp_drv_ctl(struct nvkm_output_dp *outp,
-
- static const struct nvkm_output_dp_func
- gm200_sor_dp_func = {
-- .pattern = gm200_sor_dp_pattern,
-+ .pattern = gm107_sor_dp_pattern,
- .lnk_pwr = gm200_sor_dp_lnk_pwr,
- .lnk_ctl = gf119_sor_dp_lnk_ctl,
- .drv_ctl = gm200_sor_dp_drv_ctl,
-diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
-index b2de290..b0c7216 100644
---- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
-@@ -942,22 +942,41 @@ gf100_gr_trap_gpc_rop(struct gf100_gr *gr, int gpc)
- }
-
- static const struct nvkm_enum gf100_mp_warp_error[] = {
-- { 0x00, "NO_ERROR" },
-- { 0x01, "STACK_MISMATCH" },
-+ { 0x01, "STACK_ERROR" },
-+ { 0x02, "API_STACK_ERROR" },
-+ { 0x03, "RET_EMPTY_STACK_ERROR" },
-+ { 0x04, "PC_WRAP" },
- { 0x05, "MISALIGNED_PC" },
-- { 0x08, "MISALIGNED_GPR" },
-- { 0x09, "INVALID_OPCODE" },
-- { 0x0d, "GPR_OUT_OF_BOUNDS" },
-- { 0x0e, "MEM_OUT_OF_BOUNDS" },
-- { 0x0f, "UNALIGNED_MEM_ACCESS" },
-+ { 0x06, "PC_OVERFLOW" },
-+ { 0x07, "MISALIGNED_IMMC_ADDR" },
-+ { 0x08, "MISALIGNED_REG" },
-+ { 0x09, "ILLEGAL_INSTR_ENCODING" },
-+ { 0x0a, "ILLEGAL_SPH_INSTR_COMBO" },
-+ { 0x0b, "ILLEGAL_INSTR_PARAM" },
-+ { 0x0c, "INVALID_CONST_ADDR" },
-+ { 0x0d, "OOR_REG" },
-+ { 0x0e, "OOR_ADDR" },
-+ { 0x0f, "MISALIGNED_ADDR" },
- { 0x10, "INVALID_ADDR_SPACE" },
-- { 0x11, "INVALID_PARAM" },
-+ { 0x11, "ILLEGAL_INSTR_PARAM2" },
-+ { 0x12, "INVALID_CONST_ADDR_LDC" },
-+ { 0x13, "GEOMETRY_SM_ERROR" },
-+ { 0x14, "DIVERGENT" },
-+ { 0x15, "WARP_EXIT" },
- {}
- };
-
- static const struct nvkm_bitfield gf100_mp_global_error[] = {
-+ { 0x00000001, "SM_TO_SM_FAULT" },
-+ { 0x00000002, "L1_ERROR" },
- { 0x00000004, "MULTIPLE_WARP_ERRORS" },
-- { 0x00000008, "OUT_OF_STACK_SPACE" },
-+ { 0x00000008, "PHYSICAL_STACK_OVERFLOW" },
-+ { 0x00000010, "BPT_INT" },
-+ { 0x00000020, "BPT_PAUSE" },
-+ { 0x00000040, "SINGLE_STEP_COMPLETE" },
-+ { 0x20000000, "ECC_SEC_ERROR" },
-+ { 0x40000000, "ECC_DED_ERROR" },
-+ { 0x80000000, "TIMEOUT" },
- {}
- };
-
-diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.c
-index a5e9213..9efb1b4 100644
---- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.c
-@@ -141,7 +141,8 @@ nvbios_ocfg_parse(struct nvkm_bios *bios, u16 outp, u8 idx,
- {
- u16 data = nvbios_ocfg_entry(bios, outp, idx, ver, hdr, cnt, len);
- if (data) {
-- info->match = nvbios_rd16(bios, data + 0x00);
-+ info->proto = nvbios_rd08(bios, data + 0x00);
-+ info->flags = nvbios_rd16(bios, data + 0x01);
- info->clkcmp[0] = nvbios_rd16(bios, data + 0x02);
- info->clkcmp[1] = nvbios_rd16(bios, data + 0x04);
- }
-@@ -149,12 +150,13 @@ nvbios_ocfg_parse(struct nvkm_bios *bios, u16 outp, u8 idx,
- }
-
- u16
--nvbios_ocfg_match(struct nvkm_bios *bios, u16 outp, u16 type,
-+nvbios_ocfg_match(struct nvkm_bios *bios, u16 outp, u8 proto, u8 flags,
- u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_ocfg *info)
- {
- u16 data, idx = 0;
- while ((data = nvbios_ocfg_parse(bios, outp, idx++, ver, hdr, cnt, len, info))) {
-- if (info->match == type)
-+ if ((info->proto == proto || info->proto == 0xff) &&
-+ (info->flags == flags))
- break;
- }
- return data;
-diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c
-index e292f56..389fb13 100644
---- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c
-@@ -69,11 +69,11 @@ gm107_ltc_zbc_clear_depth(struct nvkm_ltc *ltc, int i, const u32 depth)
- }
-
- static void
--gm107_ltc_lts_isr(struct nvkm_ltc *ltc, int c, int s)
-+gm107_ltc_intr_lts(struct nvkm_ltc *ltc, int c, int s)
- {
- struct nvkm_subdev *subdev = &ltc->subdev;
- struct nvkm_device *device = subdev->device;
-- u32 base = 0x140000 + (c * 0x2000) + (s * 0x200);
-+ u32 base = 0x140400 + (c * 0x2000) + (s * 0x200);
- u32 stat = nvkm_rd32(device, base + 0x00c);
-
- if (stat) {
-@@ -92,7 +92,7 @@ gm107_ltc_intr(struct nvkm_ltc *ltc)
- while (mask) {
- u32 s, c = __ffs(mask);
- for (s = 0; s < ltc->lts_nr; s++)
-- gm107_ltc_lts_isr(ltc, c, s);
-+ gm107_ltc_intr_lts(ltc, c, s);
- mask &= ~(1 << c);
- }
- }
-diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c
-index 2a29bfd..e18e0dc 100644
---- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c
-+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c
-@@ -46,7 +46,7 @@ static const struct nvkm_ltc_func
- gm200_ltc = {
- .oneinit = gm200_ltc_oneinit,
- .init = gm200_ltc_init,
-- .intr = gm107_ltc_intr, /*XXX: not validated */
-+ .intr = gm107_ltc_intr,
- .cbc_clear = gm107_ltc_cbc_clear,
- .cbc_wait = gm107_ltc_cbc_wait,
- .zbc = 16,
-diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
-index d0826fb..cb29868 100644
---- a/drivers/gpu/drm/radeon/radeon_device.c
-+++ b/drivers/gpu/drm/radeon/radeon_device.c
-@@ -630,6 +630,23 @@ void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc)
- /*
- * GPU helpers function.
- */
-+
-+/**
-+ * radeon_device_is_virtual - check if we are running is a virtual environment
-+ *
-+ * Check if the asic has been passed through to a VM (all asics).
-+ * Used at driver startup.
-+ * Returns true if virtual or false if not.
-+ */
-+static bool radeon_device_is_virtual(void)
-+{
-+#ifdef CONFIG_X86
-+ return boot_cpu_has(X86_FEATURE_HYPERVISOR);
-+#else
-+ return false;
-+#endif
-+}
-+
- /**
- * radeon_card_posted - check if the hw has already been initialized
- *
-@@ -643,6 +660,10 @@ bool radeon_card_posted(struct radeon_device *rdev)
- {
- uint32_t reg;
-
-+ /* for pass through, always force asic_init */
-+ if (radeon_device_is_virtual())
-+ return false;
-+
- /* required for EFI mode on macbook2,1 which uses an r5xx asic */
- if (efi_enabled(EFI_BOOT) &&
- (rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) &&
-diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
-index e3daafa..3e7c9ac 100644
---- a/drivers/gpu/drm/ttm/ttm_bo.c
-+++ b/drivers/gpu/drm/ttm/ttm_bo.c
-@@ -1016,9 +1016,9 @@ out_unlock:
- return ret;
- }
-
--static bool ttm_bo_mem_compat(struct ttm_placement *placement,
-- struct ttm_mem_reg *mem,
-- uint32_t *new_flags)
-+bool ttm_bo_mem_compat(struct ttm_placement *placement,
-+ struct ttm_mem_reg *mem,
-+ uint32_t *new_flags)
- {
- int i;
-
-@@ -1050,6 +1050,7 @@ static bool ttm_bo_mem_compat(struct ttm_placement *placement,
-
- return false;
- }
-+EXPORT_SYMBOL(ttm_bo_mem_compat);
-
- int ttm_bo_validate(struct ttm_buffer_object *bo,
- struct ttm_placement *placement,
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c
-index 299925a..eadc981 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_dmabuf.c
-@@ -49,6 +49,7 @@ int vmw_dmabuf_pin_in_placement(struct vmw_private *dev_priv,
- {
- struct ttm_buffer_object *bo = &buf->base;
- int ret;
-+ uint32_t new_flags;
-
- ret = ttm_write_lock(&dev_priv->reservation_sem, interruptible);
- if (unlikely(ret != 0))
-@@ -60,7 +61,12 @@ int vmw_dmabuf_pin_in_placement(struct vmw_private *dev_priv,
- if (unlikely(ret != 0))
- goto err;
-
-- ret = ttm_bo_validate(bo, placement, interruptible, false);
-+ if (buf->pin_count > 0)
-+ ret = ttm_bo_mem_compat(placement, &bo->mem,
-+ &new_flags) == true ? 0 : -EINVAL;
-+ else
-+ ret = ttm_bo_validate(bo, placement, interruptible, false);
-+
- if (!ret)
- vmw_bo_pin_reserved(buf, true);
-
-@@ -91,6 +97,7 @@ int vmw_dmabuf_pin_in_vram_or_gmr(struct vmw_private *dev_priv,
- {
- struct ttm_buffer_object *bo = &buf->base;
- int ret;
-+ uint32_t new_flags;
-
- ret = ttm_write_lock(&dev_priv->reservation_sem, interruptible);
- if (unlikely(ret != 0))
-@@ -102,6 +109,12 @@ int vmw_dmabuf_pin_in_vram_or_gmr(struct vmw_private *dev_priv,
- if (unlikely(ret != 0))
- goto err;
-
-+ if (buf->pin_count > 0) {
-+ ret = ttm_bo_mem_compat(&vmw_vram_gmr_placement, &bo->mem,
-+ &new_flags) == true ? 0 : -EINVAL;
-+ goto out_unreserve;
-+ }
-+
- ret = ttm_bo_validate(bo, &vmw_vram_gmr_placement, interruptible,
- false);
- if (likely(ret == 0) || ret == -ERESTARTSYS)
-@@ -161,6 +174,7 @@ int vmw_dmabuf_pin_in_start_of_vram(struct vmw_private *dev_priv,
- struct ttm_placement placement;
- struct ttm_place place;
- int ret = 0;
-+ uint32_t new_flags;
-
- place = vmw_vram_placement.placement[0];
- place.lpfn = bo->num_pages;
-@@ -185,10 +199,15 @@ int vmw_dmabuf_pin_in_start_of_vram(struct vmw_private *dev_priv,
- */
- if (bo->mem.mem_type == TTM_PL_VRAM &&
- bo->mem.start < bo->num_pages &&
-- bo->mem.start > 0)
-+ bo->mem.start > 0 &&
-+ buf->pin_count == 0)
- (void) ttm_bo_validate(bo, &vmw_sys_placement, false, false);
-
-- ret = ttm_bo_validate(bo, &placement, interruptible, false);
-+ if (buf->pin_count > 0)
-+ ret = ttm_bo_mem_compat(&placement, &bo->mem,
-+ &new_flags) == true ? 0 : -EINVAL;
-+ else
-+ ret = ttm_bo_validate(bo, &placement, interruptible, false);
-
- /* For some reason we didn't end up at the start of vram */
- WARN_ON(ret == 0 && bo->offset != 0);
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
-index f2cf923..2a50546 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
-@@ -227,6 +227,7 @@ static int vmw_force_iommu;
- static int vmw_restrict_iommu;
- static int vmw_force_coherent;
- static int vmw_restrict_dma_mask;
-+static int vmw_assume_16bpp;
-
- static int vmw_probe(struct pci_dev *, const struct pci_device_id *);
- static void vmw_master_init(struct vmw_master *);
-@@ -243,6 +244,8 @@ MODULE_PARM_DESC(force_coherent, "Force coherent TTM pages");
- module_param_named(force_coherent, vmw_force_coherent, int, 0600);
- MODULE_PARM_DESC(restrict_dma_mask, "Restrict DMA mask to 44 bits with IOMMU");
- module_param_named(restrict_dma_mask, vmw_restrict_dma_mask, int, 0600);
-+MODULE_PARM_DESC(assume_16bpp, "Assume 16-bpp when filtering modes");
-+module_param_named(assume_16bpp, vmw_assume_16bpp, int, 0600);
-
-
- static void vmw_print_capabilities(uint32_t capabilities)
-@@ -653,6 +656,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
- dev_priv->vram_start = pci_resource_start(dev->pdev, 1);
- dev_priv->mmio_start = pci_resource_start(dev->pdev, 2);
-
-+ dev_priv->assume_16bpp = !!vmw_assume_16bpp;
-+
- dev_priv->enable_fb = enable_fbdev;
-
- vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2);
-@@ -699,6 +704,13 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
- vmw_read(dev_priv,
- SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB);
-
-+ /*
-+ * Workaround for low memory 2D VMs to compensate for the
-+ * allocation taken by fbdev
-+ */
-+ if (!(dev_priv->capabilities & SVGA_CAP_3D))
-+ mem_size *= 2;
-+
- dev_priv->max_mob_pages = mem_size * 1024 / PAGE_SIZE;
- dev_priv->prim_bb_mem =
- vmw_read(dev_priv,
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
-index 6db358a..cab0c54 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
-@@ -386,6 +386,7 @@ struct vmw_private {
- spinlock_t hw_lock;
- spinlock_t cap_lock;
- bool has_dx;
-+ bool assume_16bpp;
-
- /*
- * VGA registers.
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
-index 679a4cb..d2d9395 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
-@@ -517,28 +517,6 @@ static int vmw_fb_kms_framebuffer(struct fb_info *info)
-
- par->set_fb = &vfb->base;
-
-- if (!par->bo_ptr) {
-- /*
-- * Pin before mapping. Since we don't know in what placement
-- * to pin, call into KMS to do it for us.
-- */
-- ret = vfb->pin(vfb);
-- if (ret) {
-- DRM_ERROR("Could not pin the fbdev framebuffer.\n");
-- return ret;
-- }
--
-- ret = ttm_bo_kmap(&par->vmw_bo->base, 0,
-- par->vmw_bo->base.num_pages, &par->map);
-- if (ret) {
-- vfb->unpin(vfb);
-- DRM_ERROR("Could not map the fbdev framebuffer.\n");
-- return ret;
-- }
--
-- par->bo_ptr = ttm_kmap_obj_virtual(&par->map, &par->bo_iowrite);
-- }
--
- return 0;
- }
-
-@@ -601,6 +579,31 @@ static int vmw_fb_set_par(struct fb_info *info)
- if (ret)
- goto out_unlock;
-
-+ if (!par->bo_ptr) {
-+ struct vmw_framebuffer *vfb = vmw_framebuffer_to_vfb(set.fb);
-+
-+ /*
-+ * Pin before mapping. Since we don't know in what placement
-+ * to pin, call into KMS to do it for us.
-+ */
-+ ret = vfb->pin(vfb);
-+ if (ret) {
-+ DRM_ERROR("Could not pin the fbdev framebuffer.\n");
-+ goto out_unlock;
-+ }
-+
-+ ret = ttm_bo_kmap(&par->vmw_bo->base, 0,
-+ par->vmw_bo->base.num_pages, &par->map);
-+ if (ret) {
-+ vfb->unpin(vfb);
-+ DRM_ERROR("Could not map the fbdev framebuffer.\n");
-+ goto out_unlock;
-+ }
-+
-+ par->bo_ptr = ttm_kmap_obj_virtual(&par->map, &par->bo_iowrite);
-+ }
-+
-+
- vmw_fb_dirty_mark(par, par->fb_x, par->fb_y,
- par->set_fb->width, par->set_fb->height);
-
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
-index b07543b..6ccd61d 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
-@@ -1553,14 +1553,10 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
- DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC)
- };
- int i;
-- u32 assumed_bpp = 2;
-+ u32 assumed_bpp = 4;
-
-- /*
-- * If using screen objects, then assume 32-bpp because that's what the
-- * SVGA device is assuming
-- */
-- if (dev_priv->active_display_unit == vmw_du_screen_object)
-- assumed_bpp = 4;
-+ if (dev_priv->assume_16bpp)
-+ assumed_bpp = 2;
-
- if (dev_priv->active_display_unit == vmw_du_screen_target) {
- max_width = min(max_width, dev_priv->stdu_max_width);
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
-index 9ca818f..41932a7 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
-@@ -399,8 +399,10 @@ static int vmw_stdu_bind_fb(struct vmw_private *dev_priv,
-
- WARN_ON_ONCE(!stdu->defined);
-
-- if (!vfb->dmabuf && new_fb->width == mode->hdisplay &&
-- new_fb->height == mode->vdisplay)
-+ new_vfbs = (vfb->dmabuf) ? NULL : vmw_framebuffer_to_vfbs(new_fb);
-+
-+ if (new_vfbs && new_vfbs->surface->base_size.width == mode->hdisplay &&
-+ new_vfbs->surface->base_size.height == mode->vdisplay)
- new_content_type = SAME_AS_DISPLAY;
- else if (vfb->dmabuf)
- new_content_type = SEPARATE_DMA;
-@@ -444,7 +446,6 @@ static int vmw_stdu_bind_fb(struct vmw_private *dev_priv,
- content_srf.mip_levels[0] = 1;
- content_srf.multisample_count = 0;
- } else {
-- new_vfbs = vmw_framebuffer_to_vfbs(new_fb);
- content_srf = *new_vfbs->surface;
- }
-
-@@ -464,7 +465,6 @@ static int vmw_stdu_bind_fb(struct vmw_private *dev_priv,
- return ret;
- }
- } else if (new_content_type == SAME_AS_DISPLAY) {
-- new_vfbs = vmw_framebuffer_to_vfbs(new_fb);
- new_display_srf = vmw_surface_reference(new_vfbs->surface);
- }
-
-diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c
-index aad8c16..0cd4f72 100644
---- a/drivers/hid/hid-elo.c
-+++ b/drivers/hid/hid-elo.c
-@@ -261,7 +261,7 @@ static void elo_remove(struct hid_device *hdev)
- struct elo_priv *priv = hid_get_drvdata(hdev);
-
- hid_hw_stop(hdev);
-- flush_workqueue(wq);
-+ cancel_delayed_work_sync(&priv->work);
- kfree(priv);
- }
-
-diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
-index c741f5e..0088979 100644
---- a/drivers/hid/hid-multitouch.c
-+++ b/drivers/hid/hid-multitouch.c
-@@ -61,6 +61,7 @@ MODULE_LICENSE("GPL");
- #define MT_QUIRK_ALWAYS_VALID (1 << 4)
- #define MT_QUIRK_VALID_IS_INRANGE (1 << 5)
- #define MT_QUIRK_VALID_IS_CONFIDENCE (1 << 6)
-+#define MT_QUIRK_CONFIDENCE (1 << 7)
- #define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE (1 << 8)
- #define MT_QUIRK_NO_AREA (1 << 9)
- #define MT_QUIRK_IGNORE_DUPLICATES (1 << 10)
-@@ -78,6 +79,7 @@ struct mt_slot {
- __s32 contactid; /* the device ContactID assigned to this slot */
- bool touch_state; /* is the touch valid? */
- bool inrange_state; /* is the finger in proximity of the sensor? */
-+ bool confidence_state; /* is the touch made by a finger? */
- };
-
- struct mt_class {
-@@ -503,10 +505,8 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
- return 1;
- case HID_DG_CONFIDENCE:
- if (cls->name == MT_CLS_WIN_8 &&
-- field->application == HID_DG_TOUCHPAD) {
-- cls->quirks &= ~MT_QUIRK_ALWAYS_VALID;
-- cls->quirks |= MT_QUIRK_VALID_IS_CONFIDENCE;
-- }
-+ field->application == HID_DG_TOUCHPAD)
-+ cls->quirks |= MT_QUIRK_CONFIDENCE;
- mt_store_field(usage, td, hi);
- return 1;
- case HID_DG_TIPSWITCH:
-@@ -619,6 +619,7 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
- return;
-
- if (td->curvalid || (td->mtclass.quirks & MT_QUIRK_ALWAYS_VALID)) {
-+ int active;
- int slotnum = mt_compute_slot(td, input);
- struct mt_slot *s = &td->curdata;
- struct input_mt *mt = input->mt;
-@@ -633,10 +634,14 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
- return;
- }
-
-+ if (!(td->mtclass.quirks & MT_QUIRK_CONFIDENCE))
-+ s->confidence_state = 1;
-+ active = (s->touch_state || s->inrange_state) &&
-+ s->confidence_state;
-+
- input_mt_slot(input, slotnum);
-- input_mt_report_slot_state(input, MT_TOOL_FINGER,
-- s->touch_state || s->inrange_state);
-- if (s->touch_state || s->inrange_state) {
-+ input_mt_report_slot_state(input, MT_TOOL_FINGER, active);
-+ if (active) {
- /* this finger is in proximity of the sensor */
- int wide = (s->w > s->h);
- /* divided by two to match visual scale of touch */
-@@ -701,6 +706,8 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
- td->curdata.touch_state = value;
- break;
- case HID_DG_CONFIDENCE:
-+ if (quirks & MT_QUIRK_CONFIDENCE)
-+ td->curdata.confidence_state = value;
- if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
- td->curvalid = value;
- break;
-diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c
-index 2f1ddca..700145b 100644
---- a/drivers/hid/usbhid/hiddev.c
-+++ b/drivers/hid/usbhid/hiddev.c
-@@ -516,13 +516,13 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd,
- goto inval;
- } else if (uref->usage_index >= field->report_count)
- goto inval;
--
-- else if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) &&
-- (uref_multi->num_values > HID_MAX_MULTI_USAGES ||
-- uref->usage_index + uref_multi->num_values > field->report_count))
-- goto inval;
- }
-
-+ if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) &&
-+ (uref_multi->num_values > HID_MAX_MULTI_USAGES ||
-+ uref->usage_index + uref_multi->num_values > field->report_count))
-+ goto inval;
-+
- switch (cmd) {
- case HIDIOCGUSAGE:
- uref->value = field->value[uref->usage_index];
-diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
-index c43318d..a9356a3 100644
---- a/drivers/hwmon/dell-smm-hwmon.c
-+++ b/drivers/hwmon/dell-smm-hwmon.c
-@@ -66,11 +66,13 @@
-
- static DEFINE_MUTEX(i8k_mutex);
- static char bios_version[4];
-+static char bios_machineid[16];
- static struct device *i8k_hwmon_dev;
- static u32 i8k_hwmon_flags;
- static uint i8k_fan_mult = I8K_FAN_MULT;
- static uint i8k_pwm_mult;
- static uint i8k_fan_max = I8K_FAN_HIGH;
-+static bool disallow_fan_type_call;
-
- #define I8K_HWMON_HAVE_TEMP1 (1 << 0)
- #define I8K_HWMON_HAVE_TEMP2 (1 << 1)
-@@ -94,13 +96,13 @@ module_param(ignore_dmi, bool, 0);
- MODULE_PARM_DESC(ignore_dmi, "Continue probing hardware even if DMI data does not match");
-
- #if IS_ENABLED(CONFIG_I8K)
--static bool restricted;
-+static bool restricted = true;
- module_param(restricted, bool, 0);
--MODULE_PARM_DESC(restricted, "Allow fan control if SYS_ADMIN capability set");
-+MODULE_PARM_DESC(restricted, "Restrict fan control and serial number to CAP_SYS_ADMIN (default: 1)");
-
- static bool power_status;
- module_param(power_status, bool, 0600);
--MODULE_PARM_DESC(power_status, "Report power status in /proc/i8k");
-+MODULE_PARM_DESC(power_status, "Report power status in /proc/i8k (default: 0)");
- #endif
-
- static uint fan_mult;
-@@ -235,14 +237,28 @@ static int i8k_get_fan_speed(int fan)
- /*
- * Read the fan type.
- */
--static int i8k_get_fan_type(int fan)
-+static int _i8k_get_fan_type(int fan)
- {
- struct smm_regs regs = { .eax = I8K_SMM_GET_FAN_TYPE, };
-
-+ if (disallow_fan_type_call)
-+ return -EINVAL;
-+
- regs.ebx = fan & 0xff;
- return i8k_smm(&regs) ? : regs.eax & 0xff;
- }
-
-+static int i8k_get_fan_type(int fan)
-+{
-+ /* I8K_SMM_GET_FAN_TYPE SMM call is expensive, so cache values */
-+ static int types[2] = { INT_MIN, INT_MIN };
-+
-+ if (types[fan] == INT_MIN)
-+ types[fan] = _i8k_get_fan_type(fan);
-+
-+ return types[fan];
-+}
-+
- /*
- * Read the fan nominal rpm for specific fan speed.
- */
-@@ -392,9 +408,11 @@ i8k_ioctl_unlocked(struct file *fp, unsigned int cmd, unsigned long arg)
- break;
-
- case I8K_MACHINE_ID:
-- memset(buff, 0, 16);
-- strlcpy(buff, i8k_get_dmi_data(DMI_PRODUCT_SERIAL),
-- sizeof(buff));
-+ if (restricted && !capable(CAP_SYS_ADMIN))
-+ return -EPERM;
-+
-+ memset(buff, 0, sizeof(buff));
-+ strlcpy(buff, bios_machineid, sizeof(buff));
- break;
-
- case I8K_FN_STATUS:
-@@ -511,7 +529,7 @@ static int i8k_proc_show(struct seq_file *seq, void *offset)
- seq_printf(seq, "%s %s %s %d %d %d %d %d %d %d\n",
- I8K_PROC_FMT,
- bios_version,
-- i8k_get_dmi_data(DMI_PRODUCT_SERIAL),
-+ (restricted && !capable(CAP_SYS_ADMIN)) ? "-1" : bios_machineid,
- cpu_temp,
- left_fan, right_fan, left_speed, right_speed,
- ac_power, fn_key);
-@@ -718,6 +736,9 @@ static struct attribute *i8k_attrs[] = {
- static umode_t i8k_is_visible(struct kobject *kobj, struct attribute *attr,
- int index)
- {
-+ if (disallow_fan_type_call &&
-+ (index == 9 || index == 12))
-+ return 0;
- if (index >= 0 && index <= 1 &&
- !(i8k_hwmon_flags & I8K_HWMON_HAVE_TEMP1))
- return 0;
-@@ -767,13 +788,17 @@ static int __init i8k_init_hwmon(void)
- if (err >= 0)
- i8k_hwmon_flags |= I8K_HWMON_HAVE_TEMP4;
-
-- /* First fan attributes, if fan type is OK */
-- err = i8k_get_fan_type(0);
-+ /* First fan attributes, if fan status or type is OK */
-+ err = i8k_get_fan_status(0);
-+ if (err < 0)
-+ err = i8k_get_fan_type(0);
- if (err >= 0)
- i8k_hwmon_flags |= I8K_HWMON_HAVE_FAN1;
-
-- /* Second fan attributes, if fan type is OK */
-- err = i8k_get_fan_type(1);
-+ /* Second fan attributes, if fan status or type is OK */
-+ err = i8k_get_fan_status(1);
-+ if (err < 0)
-+ err = i8k_get_fan_type(1);
- if (err >= 0)
- i8k_hwmon_flags |= I8K_HWMON_HAVE_FAN2;
-
-@@ -929,12 +954,14 @@ static struct dmi_system_id i8k_dmi_table[] __initdata = {
-
- MODULE_DEVICE_TABLE(dmi, i8k_dmi_table);
-
--static struct dmi_system_id i8k_blacklist_dmi_table[] __initdata = {
-+/*
-+ * On some machines once I8K_SMM_GET_FAN_TYPE is issued then CPU fan speed
-+ * randomly going up and down due to bug in Dell SMM or BIOS. Here is blacklist
-+ * of affected Dell machines for which we disallow I8K_SMM_GET_FAN_TYPE call.
-+ * See bug: https://bugzilla.kernel.org/show_bug.cgi?id=100121
-+ */
-+static struct dmi_system_id i8k_blacklist_fan_type_dmi_table[] __initdata = {
- {
-- /*
-- * CPU fan speed going up and down on Dell Studio XPS 8000
-- * for unknown reasons.
-- */
- .ident = "Dell Studio XPS 8000",
- .matches = {
- DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-@@ -942,16 +969,19 @@ static struct dmi_system_id i8k_blacklist_dmi_table[] __initdata = {
- },
- },
- {
-- /*
-- * CPU fan speed going up and down on Dell Studio XPS 8100
-- * for unknown reasons.
-- */
- .ident = "Dell Studio XPS 8100",
- .matches = {
- DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
- DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Studio XPS 8100"),
- },
- },
-+ {
-+ .ident = "Dell Inspiron 580",
-+ .matches = {
-+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Inspiron 580 "),
-+ },
-+ },
- { }
- };
-
-@@ -966,8 +996,7 @@ static int __init i8k_probe(void)
- /*
- * Get DMI information
- */
-- if (!dmi_check_system(i8k_dmi_table) ||
-- dmi_check_system(i8k_blacklist_dmi_table)) {
-+ if (!dmi_check_system(i8k_dmi_table)) {
- if (!ignore_dmi && !force)
- return -ENODEV;
-
-@@ -978,8 +1007,13 @@ static int __init i8k_probe(void)
- i8k_get_dmi_data(DMI_BIOS_VERSION));
- }
-
-+ if (dmi_check_system(i8k_blacklist_fan_type_dmi_table))
-+ disallow_fan_type_call = true;
-+
- strlcpy(bios_version, i8k_get_dmi_data(DMI_BIOS_VERSION),
- sizeof(bios_version));
-+ strlcpy(bios_machineid, i8k_get_dmi_data(DMI_PRODUCT_SERIAL),
-+ sizeof(bios_machineid));
-
- /*
- * Get SMM Dell signature
-diff --git a/drivers/iio/accel/kxsd9.c b/drivers/iio/accel/kxsd9.c
-index 923f565..3a9f106 100644
---- a/drivers/iio/accel/kxsd9.c
-+++ b/drivers/iio/accel/kxsd9.c
-@@ -81,7 +81,7 @@ static int kxsd9_write_scale(struct iio_dev *indio_dev, int micro)
-
- mutex_lock(&st->buf_lock);
- ret = spi_w8r8(st->us, KXSD9_READ(KXSD9_REG_CTRL_C));
-- if (ret)
-+ if (ret < 0)
- goto error_ret;
- st->tx[0] = KXSD9_WRITE(KXSD9_REG_CTRL_C);
- st->tx[1] = (ret & ~KXSD9_FS_MASK) | i;
-@@ -163,7 +163,7 @@ static int kxsd9_read_raw(struct iio_dev *indio_dev,
- break;
- case IIO_CHAN_INFO_SCALE:
- ret = spi_w8r8(st->us, KXSD9_READ(KXSD9_REG_CTRL_C));
-- if (ret)
-+ if (ret < 0)
- goto error_ret;
- *val2 = kxsd9_micro_scales[ret & KXSD9_FS_MASK];
- ret = IIO_VAL_INT_PLUS_MICRO;
-diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c
-index 21e19b6..2123f0a 100644
---- a/drivers/iio/adc/ad7266.c
-+++ b/drivers/iio/adc/ad7266.c
-@@ -396,8 +396,8 @@ static int ad7266_probe(struct spi_device *spi)
-
- st = iio_priv(indio_dev);
-
-- st->reg = devm_regulator_get(&spi->dev, "vref");
-- if (!IS_ERR_OR_NULL(st->reg)) {
-+ st->reg = devm_regulator_get_optional(&spi->dev, "vref");
-+ if (!IS_ERR(st->reg)) {
- ret = regulator_enable(st->reg);
- if (ret)
- return ret;
-@@ -408,6 +408,9 @@ static int ad7266_probe(struct spi_device *spi)
-
- st->vref_mv = ret / 1000;
- } else {
-+ /* Any other error indicates that the regulator does exist */
-+ if (PTR_ERR(st->reg) != -ENODEV)
-+ return PTR_ERR(st->reg);
- /* Use internal reference */
- st->vref_mv = 2500;
- }
-diff --git a/drivers/iio/humidity/hdc100x.c b/drivers/iio/humidity/hdc100x.c
-index fa47676..a03832a 100644
---- a/drivers/iio/humidity/hdc100x.c
-+++ b/drivers/iio/humidity/hdc100x.c
-@@ -55,7 +55,7 @@ static const struct {
- },
- { /* IIO_HUMIDITYRELATIVE channel */
- .shift = 8,
-- .mask = 2,
-+ .mask = 3,
- },
- };
-
-@@ -164,14 +164,14 @@ static int hdc100x_get_measurement(struct hdc100x_data *data,
- dev_err(&client->dev, "cannot read high byte measurement");
- return ret;
- }
-- val = ret << 6;
-+ val = ret << 8;
-
- ret = i2c_smbus_read_byte(client);
- if (ret < 0) {
- dev_err(&client->dev, "cannot read low byte measurement");
- return ret;
- }
-- val |= ret >> 2;
-+ val |= ret;
-
- return val;
- }
-@@ -211,18 +211,18 @@ static int hdc100x_read_raw(struct iio_dev *indio_dev,
- return IIO_VAL_INT_PLUS_MICRO;
- case IIO_CHAN_INFO_SCALE:
- if (chan->type == IIO_TEMP) {
-- *val = 165;
-- *val2 = 65536 >> 2;
-+ *val = 165000;
-+ *val2 = 65536;
- return IIO_VAL_FRACTIONAL;
- } else {
-- *val = 0;
-- *val2 = 10000;
-- return IIO_VAL_INT_PLUS_MICRO;
-+ *val = 100;
-+ *val2 = 65536;
-+ return IIO_VAL_FRACTIONAL;
- }
- break;
- case IIO_CHAN_INFO_OFFSET:
-- *val = -3971;
-- *val2 = 879096;
-+ *val = -15887;
-+ *val2 = 515151;
- return IIO_VAL_INT_PLUS_MICRO;
- default:
- return -EINVAL;
-diff --git a/drivers/iio/industrialio-trigger.c b/drivers/iio/industrialio-trigger.c
-index ae2806a..0c52dfe 100644
---- a/drivers/iio/industrialio-trigger.c
-+++ b/drivers/iio/industrialio-trigger.c
-@@ -210,22 +210,35 @@ static int iio_trigger_attach_poll_func(struct iio_trigger *trig,
-
- /* Prevent the module from being removed whilst attached to a trigger */
- __module_get(pf->indio_dev->info->driver_module);
-+
-+ /* Get irq number */
- pf->irq = iio_trigger_get_irq(trig);
-+ if (pf->irq < 0)
-+ goto out_put_module;
-+
-+ /* Request irq */
- ret = request_threaded_irq(pf->irq, pf->h, pf->thread,
- pf->type, pf->name,
- pf);
-- if (ret < 0) {
-- module_put(pf->indio_dev->info->driver_module);
-- return ret;
-- }
-+ if (ret < 0)
-+ goto out_put_irq;
-
-+ /* Enable trigger in driver */
- if (trig->ops && trig->ops->set_trigger_state && notinuse) {
- ret = trig->ops->set_trigger_state(trig, true);
- if (ret < 0)
-- module_put(pf->indio_dev->info->driver_module);
-+ goto out_free_irq;
- }
-
- return ret;
-+
-+out_free_irq:
-+ free_irq(pf->irq, pf);
-+out_put_irq:
-+ iio_trigger_put_irq(trig, pf->irq);
-+out_put_module:
-+ module_put(pf->indio_dev->info->driver_module);
-+ return ret;
- }
-
- static int iio_trigger_detach_poll_func(struct iio_trigger *trig,
-diff --git a/drivers/iio/light/apds9960.c b/drivers/iio/light/apds9960.c
-index a6af56a..6443aad 100644
---- a/drivers/iio/light/apds9960.c
-+++ b/drivers/iio/light/apds9960.c
-@@ -1006,6 +1006,7 @@ static int apds9960_probe(struct i2c_client *client,
-
- iio_device_attach_buffer(indio_dev, buffer);
-
-+ indio_dev->dev.parent = &client->dev;
- indio_dev->info = &apds9960_info;
- indio_dev->name = APDS9960_DRV_NAME;
- indio_dev->channels = apds9960_channels;
-diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
-index 172393a..d3ca320 100644
---- a/drivers/iio/pressure/st_pressure_core.c
-+++ b/drivers/iio/pressure/st_pressure_core.c
-@@ -28,15 +28,21 @@
- #include <linux/iio/common/st_sensors.h>
- #include "st_pressure.h"
-
-+#define MCELSIUS_PER_CELSIUS 1000
-+
-+/* Default pressure sensitivity */
- #define ST_PRESS_LSB_PER_MBAR 4096UL
- #define ST_PRESS_KPASCAL_NANO_SCALE (100000000UL / \
- ST_PRESS_LSB_PER_MBAR)
-+
-+/* Default temperature sensitivity */
- #define ST_PRESS_LSB_PER_CELSIUS 480UL
--#define ST_PRESS_CELSIUS_NANO_SCALE (1000000000UL / \
-- ST_PRESS_LSB_PER_CELSIUS)
-+#define ST_PRESS_MILLI_CELSIUS_OFFSET 42500UL
-+
- #define ST_PRESS_NUMBER_DATA_CHANNELS 1
-
- /* FULLSCALE */
-+#define ST_PRESS_FS_AVL_1100MB 1100
- #define ST_PRESS_FS_AVL_1260MB 1260
-
- #define ST_PRESS_1_OUT_XL_ADDR 0x28
-@@ -54,9 +60,6 @@
- #define ST_PRESS_LPS331AP_PW_MASK 0x80
- #define ST_PRESS_LPS331AP_FS_ADDR 0x23
- #define ST_PRESS_LPS331AP_FS_MASK 0x30
--#define ST_PRESS_LPS331AP_FS_AVL_1260_VAL 0x00
--#define ST_PRESS_LPS331AP_FS_AVL_1260_GAIN ST_PRESS_KPASCAL_NANO_SCALE
--#define ST_PRESS_LPS331AP_FS_AVL_TEMP_GAIN ST_PRESS_CELSIUS_NANO_SCALE
- #define ST_PRESS_LPS331AP_BDU_ADDR 0x20
- #define ST_PRESS_LPS331AP_BDU_MASK 0x04
- #define ST_PRESS_LPS331AP_DRDY_IRQ_ADDR 0x22
-@@ -65,9 +68,14 @@
- #define ST_PRESS_LPS331AP_IHL_IRQ_ADDR 0x22
- #define ST_PRESS_LPS331AP_IHL_IRQ_MASK 0x80
- #define ST_PRESS_LPS331AP_MULTIREAD_BIT true
--#define ST_PRESS_LPS331AP_TEMP_OFFSET 42500
-
- /* CUSTOM VALUES FOR LPS001WP SENSOR */
-+
-+/* LPS001WP pressure resolution */
-+#define ST_PRESS_LPS001WP_LSB_PER_MBAR 16UL
-+/* LPS001WP temperature resolution */
-+#define ST_PRESS_LPS001WP_LSB_PER_CELSIUS 64UL
-+
- #define ST_PRESS_LPS001WP_WAI_EXP 0xba
- #define ST_PRESS_LPS001WP_ODR_ADDR 0x20
- #define ST_PRESS_LPS001WP_ODR_MASK 0x30
-@@ -76,6 +84,8 @@
- #define ST_PRESS_LPS001WP_ODR_AVL_13HZ_VAL 0x03
- #define ST_PRESS_LPS001WP_PW_ADDR 0x20
- #define ST_PRESS_LPS001WP_PW_MASK 0x40
-+#define ST_PRESS_LPS001WP_FS_AVL_PRESS_GAIN \
-+ (100000000UL / ST_PRESS_LPS001WP_LSB_PER_MBAR)
- #define ST_PRESS_LPS001WP_BDU_ADDR 0x20
- #define ST_PRESS_LPS001WP_BDU_MASK 0x04
- #define ST_PRESS_LPS001WP_MULTIREAD_BIT true
-@@ -92,11 +102,6 @@
- #define ST_PRESS_LPS25H_ODR_AVL_25HZ_VAL 0x04
- #define ST_PRESS_LPS25H_PW_ADDR 0x20
- #define ST_PRESS_LPS25H_PW_MASK 0x80
--#define ST_PRESS_LPS25H_FS_ADDR 0x00
--#define ST_PRESS_LPS25H_FS_MASK 0x00
--#define ST_PRESS_LPS25H_FS_AVL_1260_VAL 0x00
--#define ST_PRESS_LPS25H_FS_AVL_1260_GAIN ST_PRESS_KPASCAL_NANO_SCALE
--#define ST_PRESS_LPS25H_FS_AVL_TEMP_GAIN ST_PRESS_CELSIUS_NANO_SCALE
- #define ST_PRESS_LPS25H_BDU_ADDR 0x20
- #define ST_PRESS_LPS25H_BDU_MASK 0x04
- #define ST_PRESS_LPS25H_DRDY_IRQ_ADDR 0x23
-@@ -105,7 +110,6 @@
- #define ST_PRESS_LPS25H_IHL_IRQ_ADDR 0x22
- #define ST_PRESS_LPS25H_IHL_IRQ_MASK 0x80
- #define ST_PRESS_LPS25H_MULTIREAD_BIT true
--#define ST_PRESS_LPS25H_TEMP_OFFSET 42500
- #define ST_PRESS_LPS25H_OUT_XL_ADDR 0x28
- #define ST_TEMP_LPS25H_OUT_L_ADDR 0x2b
-
-@@ -157,7 +161,9 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = {
- .storagebits = 16,
- .endianness = IIO_LE,
- },
-- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
-+ .info_mask_separate =
-+ BIT(IIO_CHAN_INFO_RAW) |
-+ BIT(IIO_CHAN_INFO_SCALE),
- .modified = 0,
- },
- {
-@@ -173,7 +179,7 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = {
- },
- .info_mask_separate =
- BIT(IIO_CHAN_INFO_RAW) |
-- BIT(IIO_CHAN_INFO_OFFSET),
-+ BIT(IIO_CHAN_INFO_SCALE),
- .modified = 0,
- },
- IIO_CHAN_SOFT_TIMESTAMP(1)
-@@ -208,11 +214,14 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
- .addr = ST_PRESS_LPS331AP_FS_ADDR,
- .mask = ST_PRESS_LPS331AP_FS_MASK,
- .fs_avl = {
-+ /*
-+ * Pressure and temperature sensitivity values
-+ * as defined in table 3 of LPS331AP datasheet.
-+ */
- [0] = {
- .num = ST_PRESS_FS_AVL_1260MB,
-- .value = ST_PRESS_LPS331AP_FS_AVL_1260_VAL,
-- .gain = ST_PRESS_LPS331AP_FS_AVL_1260_GAIN,
-- .gain2 = ST_PRESS_LPS331AP_FS_AVL_TEMP_GAIN,
-+ .gain = ST_PRESS_KPASCAL_NANO_SCALE,
-+ .gain2 = ST_PRESS_LSB_PER_CELSIUS,
- },
- },
- },
-@@ -254,7 +263,17 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
- .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
- },
- .fs = {
-- .addr = 0,
-+ .fs_avl = {
-+ /*
-+ * Pressure and temperature resolution values
-+ * as defined in table 3 of LPS001WP datasheet.
-+ */
-+ [0] = {
-+ .num = ST_PRESS_FS_AVL_1100MB,
-+ .gain = ST_PRESS_LPS001WP_FS_AVL_PRESS_GAIN,
-+ .gain2 = ST_PRESS_LPS001WP_LSB_PER_CELSIUS,
-+ },
-+ },
- },
- .bdu = {
- .addr = ST_PRESS_LPS001WP_BDU_ADDR,
-@@ -291,14 +310,15 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
- .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
- },
- .fs = {
-- .addr = ST_PRESS_LPS25H_FS_ADDR,
-- .mask = ST_PRESS_LPS25H_FS_MASK,
- .fs_avl = {
-+ /*
-+ * Pressure and temperature sensitivity values
-+ * as defined in table 3 of LPS25H datasheet.
-+ */
- [0] = {
- .num = ST_PRESS_FS_AVL_1260MB,
-- .value = ST_PRESS_LPS25H_FS_AVL_1260_VAL,
-- .gain = ST_PRESS_LPS25H_FS_AVL_1260_GAIN,
-- .gain2 = ST_PRESS_LPS25H_FS_AVL_TEMP_GAIN,
-+ .gain = ST_PRESS_KPASCAL_NANO_SCALE,
-+ .gain2 = ST_PRESS_LSB_PER_CELSIUS,
- },
- },
- },
-@@ -354,26 +374,26 @@ static int st_press_read_raw(struct iio_dev *indio_dev,
-
- return IIO_VAL_INT;
- case IIO_CHAN_INFO_SCALE:
-- *val = 0;
--
- switch (ch->type) {
- case IIO_PRESSURE:
-+ *val = 0;
- *val2 = press_data->current_fullscale->gain;
-- break;
-+ return IIO_VAL_INT_PLUS_NANO;
- case IIO_TEMP:
-+ *val = MCELSIUS_PER_CELSIUS;
- *val2 = press_data->current_fullscale->gain2;
-- break;
-+ return IIO_VAL_FRACTIONAL;
- default:
- err = -EINVAL;
- goto read_error;
- }
-
-- return IIO_VAL_INT_PLUS_NANO;
- case IIO_CHAN_INFO_OFFSET:
- switch (ch->type) {
- case IIO_TEMP:
-- *val = 425;
-- *val2 = 10;
-+ *val = ST_PRESS_MILLI_CELSIUS_OFFSET *
-+ press_data->current_fullscale->gain2;
-+ *val2 = MCELSIUS_PER_CELSIUS;
- break;
- default:
- err = -EINVAL;
-diff --git a/drivers/iio/proximity/as3935.c b/drivers/iio/proximity/as3935.c
-index f4d29d5..e2f926c 100644
---- a/drivers/iio/proximity/as3935.c
-+++ b/drivers/iio/proximity/as3935.c
-@@ -64,6 +64,7 @@ struct as3935_state {
- struct delayed_work work;
-
- u32 tune_cap;
-+ u8 buffer[16]; /* 8-bit data + 56-bit padding + 64-bit timestamp */
- u8 buf[2] ____cacheline_aligned;
- };
-
-@@ -72,7 +73,8 @@ static const struct iio_chan_spec as3935_channels[] = {
- .type = IIO_PROXIMITY,
- .info_mask_separate =
- BIT(IIO_CHAN_INFO_RAW) |
-- BIT(IIO_CHAN_INFO_PROCESSED),
-+ BIT(IIO_CHAN_INFO_PROCESSED) |
-+ BIT(IIO_CHAN_INFO_SCALE),
- .scan_index = 0,
- .scan_type = {
- .sign = 'u',
-@@ -181,7 +183,12 @@ static int as3935_read_raw(struct iio_dev *indio_dev,
- /* storm out of range */
- if (*val == AS3935_DATA_MASK)
- return -EINVAL;
-- *val *= 1000;
-+
-+ if (m == IIO_CHAN_INFO_PROCESSED)
-+ *val *= 1000;
-+ break;
-+ case IIO_CHAN_INFO_SCALE:
-+ *val = 1000;
- break;
- default:
- return -EINVAL;
-@@ -206,10 +213,10 @@ static irqreturn_t as3935_trigger_handler(int irq, void *private)
- ret = as3935_read(st, AS3935_DATA, &val);
- if (ret)
- goto err_read;
-- val &= AS3935_DATA_MASK;
-- val *= 1000;
-
-- iio_push_to_buffers_with_timestamp(indio_dev, &val, pf->timestamp);
-+ st->buffer[0] = val & AS3935_DATA_MASK;
-+ iio_push_to_buffers_with_timestamp(indio_dev, &st->buffer,
-+ pf->timestamp);
- err_read:
- iio_trigger_notify_done(indio_dev->trig);
-
-diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
-index 1d92e09..c995255 100644
---- a/drivers/infiniband/core/cm.c
-+++ b/drivers/infiniband/core/cm.c
-@@ -3452,14 +3452,14 @@ static int cm_establish(struct ib_cm_id *cm_id)
- work->cm_event.event = IB_CM_USER_ESTABLISHED;
-
- /* Check if the device started its remove_one */
-- spin_lock_irq(&cm.lock);
-+ spin_lock_irqsave(&cm.lock, flags);
- if (!cm_dev->going_down) {
- queue_delayed_work(cm.wq, &work->work, 0);
- } else {
- kfree(work);
- ret = -ENODEV;
- }
-- spin_unlock_irq(&cm.lock);
-+ spin_unlock_irqrestore(&cm.lock, flags);
-
- out:
- return ret;
-diff --git a/drivers/infiniband/hw/mlx4/ah.c b/drivers/infiniband/hw/mlx4/ah.c
-index 105246f..5fc6233 100644
---- a/drivers/infiniband/hw/mlx4/ah.c
-+++ b/drivers/infiniband/hw/mlx4/ah.c
-@@ -47,6 +47,7 @@ static struct ib_ah *create_ib_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr,
-
- ah->av.ib.port_pd = cpu_to_be32(to_mpd(pd)->pdn | (ah_attr->port_num << 24));
- ah->av.ib.g_slid = ah_attr->src_path_bits;
-+ ah->av.ib.sl_tclass_flowlabel = cpu_to_be32(ah_attr->sl << 28);
- if (ah_attr->ah_flags & IB_AH_GRH) {
- ah->av.ib.g_slid |= 0x80;
- ah->av.ib.gid_index = ah_attr->grh.sgid_index;
-@@ -64,7 +65,6 @@ static struct ib_ah *create_ib_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr,
- !(1 << ah->av.ib.stat_rate & dev->caps.stat_rate_support))
- --ah->av.ib.stat_rate;
- }
-- ah->av.ib.sl_tclass_flowlabel = cpu_to_be32(ah_attr->sl << 28);
-
- return &ah->ibah;
- }
-diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
-index a9e3bcc..a0ecf08 100644
---- a/drivers/infiniband/sw/rdmavt/qp.c
-+++ b/drivers/infiniband/sw/rdmavt/qp.c
-@@ -683,8 +683,10 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
- * initialization that is needed.
- */
- priv = rdi->driver_f.qp_priv_alloc(rdi, qp, gfp);
-- if (!priv)
-+ if (IS_ERR(priv)) {
-+ ret = priv;
- goto bail_qp;
-+ }
- qp->priv = priv;
- qp->timeout_jiffies =
- usecs_to_jiffies((4096UL * (1UL << qp->timeout)) /
-diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
-index bf4959f..94f1bf7 100644
---- a/drivers/iommu/amd_iommu_init.c
-+++ b/drivers/iommu/amd_iommu_init.c
-@@ -1363,13 +1363,23 @@ static int __init amd_iommu_init_pci(void)
- break;
- }
-
-+ /*
-+ * Order is important here to make sure any unity map requirements are
-+ * fulfilled. The unity mappings are created and written to the device
-+ * table during the amd_iommu_init_api() call.
-+ *
-+ * After that we call init_device_table_dma() to make sure any
-+ * uninitialized DTE will block DMA, and in the end we flush the caches
-+ * of all IOMMUs to make sure the changes to the device table are
-+ * active.
-+ */
-+ ret = amd_iommu_init_api();
-+
- init_device_table_dma();
-
- for_each_iommu(iommu)
- iommu_flush_all_caches(iommu);
-
-- ret = amd_iommu_init_api();
--
- if (!ret)
- print_iommu_info();
-
-diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
-index 4ff73ff..3e20208 100644
---- a/drivers/iommu/arm-smmu-v3.c
-+++ b/drivers/iommu/arm-smmu-v3.c
-@@ -1942,6 +1942,7 @@ static struct iommu_ops arm_smmu_ops = {
- .attach_dev = arm_smmu_attach_dev,
- .map = arm_smmu_map,
- .unmap = arm_smmu_unmap,
-+ .map_sg = default_iommu_map_sg,
- .iova_to_phys = arm_smmu_iova_to_phys,
- .add_device = arm_smmu_add_device,
- .remove_device = arm_smmu_remove_device,
-diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
-index e1852e8..ae364e0 100644
---- a/drivers/iommu/intel-iommu.c
-+++ b/drivers/iommu/intel-iommu.c
-@@ -3169,11 +3169,6 @@ static int __init init_dmars(void)
- }
- }
-
-- iommu_flush_write_buffer(iommu);
-- iommu_set_root_entry(iommu);
-- iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
-- iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
--
- if (!ecap_pass_through(iommu->ecap))
- hw_pass_through = 0;
- #ifdef CONFIG_INTEL_IOMMU_SVM
-@@ -3182,6 +3177,18 @@ static int __init init_dmars(void)
- #endif
- }
-
-+ /*
-+ * Now that qi is enabled on all iommus, set the root entry and flush
-+ * caches. This is required on some Intel X58 chipsets, otherwise the
-+ * flush_context function will loop forever and the boot hangs.
-+ */
-+ for_each_active_iommu(iommu, drhd) {
-+ iommu_flush_write_buffer(iommu);
-+ iommu_set_root_entry(iommu);
-+ iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL);
-+ iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH);
-+ }
-+
- if (iommu_pass_through)
- iommu_identity_mapping |= IDENTMAP_ALL;
-
-diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
-index 5710a06..0ea8d9a 100644
---- a/drivers/iommu/rockchip-iommu.c
-+++ b/drivers/iommu/rockchip-iommu.c
-@@ -815,7 +815,7 @@ static int rk_iommu_attach_device(struct iommu_domain *domain,
- dte_addr = virt_to_phys(rk_domain->dt);
- for (i = 0; i < iommu->num_mmu; i++) {
- rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, dte_addr);
-- rk_iommu_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
-+ rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
- rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, RK_MMU_IRQ_MASK);
- }
-
-diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
-index 4dffccf..40fb120 100644
---- a/drivers/irqchip/irq-mips-gic.c
-+++ b/drivers/irqchip/irq-mips-gic.c
-@@ -734,6 +734,12 @@ static int gic_irq_domain_alloc(struct irq_domain *d, unsigned int virq,
- /* verify that it doesn't conflict with an IPI irq */
- if (test_bit(spec->hwirq, ipi_resrv))
- return -EBUSY;
-+
-+ hwirq = GIC_SHARED_TO_HWIRQ(spec->hwirq);
-+
-+ return irq_domain_set_hwirq_and_chip(d, virq, hwirq,
-+ &gic_level_irq_controller,
-+ NULL);
- } else {
- base_hwirq = find_first_bit(ipi_resrv, gic_shared_intrs);
- if (base_hwirq == gic_shared_intrs) {
-@@ -855,10 +861,14 @@ static int gic_dev_domain_alloc(struct irq_domain *d, unsigned int virq,
- &gic_level_irq_controller,
- NULL);
- if (ret)
-- return ret;
-+ goto error;
- }
-
- return 0;
-+
-+error:
-+ irq_domain_free_irqs_parent(d, virq, nr_irqs);
-+ return ret;
- }
-
- void gic_dev_domain_free(struct irq_domain *d, unsigned int virq,
-diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
-index d7723ce..12690c1 100644
---- a/drivers/media/usb/uvc/uvc_v4l2.c
-+++ b/drivers/media/usb/uvc/uvc_v4l2.c
-@@ -1408,47 +1408,44 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu_control_query *kp,
- static long uvc_v4l2_compat_ioctl32(struct file *file,
- unsigned int cmd, unsigned long arg)
- {
-+ struct uvc_fh *handle = file->private_data;
- union {
- struct uvc_xu_control_mapping xmap;
- struct uvc_xu_control_query xqry;
- } karg;
- void __user *up = compat_ptr(arg);
-- mm_segment_t old_fs;
- long ret;
-
- switch (cmd) {
- case UVCIOC_CTRL_MAP32:
-- cmd = UVCIOC_CTRL_MAP;
- ret = uvc_v4l2_get_xu_mapping(&karg.xmap, up);
-+ if (ret)
-+ return ret;
-+ ret = uvc_ioctl_ctrl_map(handle->chain, &karg.xmap);
-+ if (ret)
-+ return ret;
-+ ret = uvc_v4l2_put_xu_mapping(&karg.xmap, up);
-+ if (ret)
-+ return ret;
-+
- break;
-
- case UVCIOC_CTRL_QUERY32:
-- cmd = UVCIOC_CTRL_QUERY;
- ret = uvc_v4l2_get_xu_query(&karg.xqry, up);
-+ if (ret)
-+ return ret;
-+ ret = uvc_xu_ctrl_query(handle->chain, &karg.xqry);
-+ if (ret)
-+ return ret;
-+ ret = uvc_v4l2_put_xu_query(&karg.xqry, up);
-+ if (ret)
-+ return ret;
- break;
-
- default:
- return -ENOIOCTLCMD;
- }
-
-- old_fs = get_fs();
-- set_fs(KERNEL_DS);
-- ret = video_ioctl2(file, cmd, (unsigned long)&karg);
-- set_fs(old_fs);
--
-- if (ret < 0)
-- return ret;
--
-- switch (cmd) {
-- case UVCIOC_CTRL_MAP:
-- ret = uvc_v4l2_put_xu_mapping(&karg.xmap, up);
-- break;
--
-- case UVCIOC_CTRL_QUERY:
-- ret = uvc_v4l2_put_xu_query(&karg.xqry, up);
-- break;
-- }
--
- return ret;
- }
- #endif
-diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
-index 21825dd..859b4a1 100644
---- a/drivers/memory/omap-gpmc.c
-+++ b/drivers/memory/omap-gpmc.c
-@@ -394,7 +394,7 @@ static void gpmc_cs_bool_timings(int cs, const struct gpmc_bool_timings *p)
- gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG4,
- GPMC_CONFIG4_OEEXTRADELAY, p->oe_extra_delay);
- gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG4,
-- GPMC_CONFIG4_OEEXTRADELAY, p->we_extra_delay);
-+ GPMC_CONFIG4_WEEXTRADELAY, p->we_extra_delay);
- gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG6,
- GPMC_CONFIG6_CYCLE2CYCLESAMECSEN,
- p->cycle2cyclesamecsen);
-diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c
-index 96fddb0..4dd0391 100644
---- a/drivers/mtd/ubi/eba.c
-+++ b/drivers/mtd/ubi/eba.c
-@@ -575,6 +575,7 @@ static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
- int err, idx = vol_id2idx(ubi, vol_id), new_pnum, data_size, tries = 0;
- struct ubi_volume *vol = ubi->volumes[idx];
- struct ubi_vid_hdr *vid_hdr;
-+ uint32_t crc;
-
- vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
- if (!vid_hdr)
-@@ -599,14 +600,8 @@ retry:
- goto out_put;
- }
-
-- vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
-- err = ubi_io_write_vid_hdr(ubi, new_pnum, vid_hdr);
-- if (err) {
-- up_read(&ubi->fm_eba_sem);
-- goto write_error;
-- }
-+ ubi_assert(vid_hdr->vol_type == UBI_VID_DYNAMIC);
-
-- data_size = offset + len;
- mutex_lock(&ubi->buf_mutex);
- memset(ubi->peb_buf + offset, 0xFF, len);
-
-@@ -621,6 +616,19 @@ retry:
-
- memcpy(ubi->peb_buf + offset, buf, len);
-
-+ data_size = offset + len;
-+ crc = crc32(UBI_CRC32_INIT, ubi->peb_buf, data_size);
-+ vid_hdr->sqnum = cpu_to_be64(ubi_next_sqnum(ubi));
-+ vid_hdr->copy_flag = 1;
-+ vid_hdr->data_size = cpu_to_be32(data_size);
-+ vid_hdr->data_crc = cpu_to_be32(crc);
-+ err = ubi_io_write_vid_hdr(ubi, new_pnum, vid_hdr);
-+ if (err) {
-+ mutex_unlock(&ubi->buf_mutex);
-+ up_read(&ubi->fm_eba_sem);
-+ goto write_error;
-+ }
-+
- err = ubi_io_write_data(ubi, ubi->peb_buf, new_pnum, 0, data_size);
- if (err) {
- mutex_unlock(&ubi->buf_mutex);
-diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
-index 9fcb489..c70e515 100644
---- a/drivers/net/geneve.c
-+++ b/drivers/net/geneve.c
-@@ -1092,12 +1092,17 @@ static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
-
- static int __geneve_change_mtu(struct net_device *dev, int new_mtu, bool strict)
- {
-+ struct geneve_dev *geneve = netdev_priv(dev);
- /* The max_mtu calculation does not take account of GENEVE
- * options, to avoid excluding potentially valid
- * configurations.
- */
-- int max_mtu = IP_MAX_MTU - GENEVE_BASE_HLEN - sizeof(struct iphdr)
-- - dev->hard_header_len;
-+ int max_mtu = IP_MAX_MTU - GENEVE_BASE_HLEN - dev->hard_header_len;
-+
-+ if (geneve->remote.sa.sa_family == AF_INET6)
-+ max_mtu -= sizeof(struct ipv6hdr);
-+ else
-+ max_mtu -= sizeof(struct iphdr);
-
- if (new_mtu < 68)
- return -EINVAL;
-diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
-index 9e803bb..8f3c55d 100644
---- a/drivers/net/macsec.c
-+++ b/drivers/net/macsec.c
-@@ -2564,6 +2564,7 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
- u64_stats_update_begin(&secy_stats->syncp);
- secy_stats->stats.OutPktsUntagged++;
- u64_stats_update_end(&secy_stats->syncp);
-+ skb->dev = macsec->real_dev;
- len = skb->len;
- ret = dev_queue_xmit(skb);
- count_tx(dev, ret, len);
-diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
-index 2fb31ed..d4425c56 100644
---- a/drivers/net/usb/cdc_ncm.c
-+++ b/drivers/net/usb/cdc_ncm.c
-@@ -852,6 +852,13 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
- if (cdc_ncm_init(dev))
- goto error2;
-
-+ /* Some firmwares need a pause here or they will silently fail
-+ * to set up the interface properly. This value was decided
-+ * empirically on a Sierra Wireless MC7455 running 02.08.02.00
-+ * firmware.
-+ */
-+ usleep_range(10000, 20000);
-+
- /* configure data interface */
- temp = usb_set_interface(dev->udev, iface_no, data_altsetting);
- if (temp) {
-diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
-index e85e073..06664ba 100644
---- a/drivers/net/wireless/mac80211_hwsim.c
-+++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -2771,6 +2771,7 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
- if (!info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER] ||
- !info->attrs[HWSIM_ATTR_FLAGS] ||
- !info->attrs[HWSIM_ATTR_COOKIE] ||
-+ !info->attrs[HWSIM_ATTR_SIGNAL] ||
- !info->attrs[HWSIM_ATTR_TX_INFO])
- goto out;
-
-diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
-index 0f48048..3a0faa8 100644
---- a/drivers/net/wireless/realtek/rtlwifi/core.c
-+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
-@@ -54,7 +54,7 @@ EXPORT_SYMBOL(channel5g_80m);
- void rtl_addr_delay(u32 addr)
- {
- if (addr == 0xfe)
-- msleep(50);
-+ mdelay(50);
- else if (addr == 0xfd)
- msleep(5);
- else if (addr == 0xfc)
-@@ -75,7 +75,7 @@ void rtl_rfreg_delay(struct ieee80211_hw *hw, enum radio_path rfpath, u32 addr,
- rtl_addr_delay(addr);
- } else {
- rtl_set_rfreg(hw, rfpath, addr, mask, data);
-- usleep_range(1, 2);
-+ udelay(1);
- }
- }
- EXPORT_SYMBOL(rtl_rfreg_delay);
-@@ -86,7 +86,7 @@ void rtl_bb_delay(struct ieee80211_hw *hw, u32 addr, u32 data)
- rtl_addr_delay(addr);
- } else {
- rtl_set_bbreg(hw, addr, MASKDWORD, data);
-- usleep_range(1, 2);
-+ udelay(1);
- }
- }
- EXPORT_SYMBOL(rtl_bb_delay);
-diff --git a/drivers/of/irq.c b/drivers/of/irq.c
-index e7bfc17..6ec743f 100644
---- a/drivers/of/irq.c
-+++ b/drivers/of/irq.c
-@@ -386,13 +386,13 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)
- EXPORT_SYMBOL_GPL(of_irq_to_resource);
-
- /**
-- * of_irq_get - Decode a node's IRQ and return it as a Linux irq number
-+ * of_irq_get - Decode a node's IRQ and return it as a Linux IRQ number
- * @dev: pointer to device tree node
-- * @index: zero-based index of the irq
-- *
-- * Returns Linux irq number on success, or -EPROBE_DEFER if the irq domain
-- * is not yet created.
-+ * @index: zero-based index of the IRQ
- *
-+ * Returns Linux IRQ number on success, or 0 on the IRQ mapping failure, or
-+ * -EPROBE_DEFER if the IRQ domain is not yet created, or error code in case
-+ * of any other failure.
- */
- int of_irq_get(struct device_node *dev, int index)
- {
-@@ -413,12 +413,13 @@ int of_irq_get(struct device_node *dev, int index)
- EXPORT_SYMBOL_GPL(of_irq_get);
-
- /**
-- * of_irq_get_byname - Decode a node's IRQ and return it as a Linux irq number
-+ * of_irq_get_byname - Decode a node's IRQ and return it as a Linux IRQ number
- * @dev: pointer to device tree node
-- * @name: irq name
-+ * @name: IRQ name
- *
-- * Returns Linux irq number on success, or -EPROBE_DEFER if the irq domain
-- * is not yet created, or error code in case of any other failure.
-+ * Returns Linux IRQ number on success, or 0 on the IRQ mapping failure, or
-+ * -EPROBE_DEFER if the IRQ domain is not yet created, or error code in case
-+ * of any other failure.
- */
- int of_irq_get_byname(struct device_node *dev, const char *name)
- {
-diff --git a/drivers/pci/vc.c b/drivers/pci/vc.c
-index dfbab61..1fa3a32 100644
---- a/drivers/pci/vc.c
-+++ b/drivers/pci/vc.c
-@@ -221,9 +221,9 @@ static int pci_vc_do_save_buffer(struct pci_dev *dev, int pos,
- else
- pci_write_config_word(dev, pos + PCI_VC_PORT_CTRL,
- *(u16 *)buf);
-- buf += 2;
-+ buf += 4;
- }
-- len += 2;
-+ len += 4;
-
- /*
- * If we have any Low Priority VCs and a VC Arbitration Table Offset
-diff --git a/drivers/regulator/qcom_smd-regulator.c b/drivers/regulator/qcom_smd-regulator.c
-index 56a17ec..6c7fe477 100644
---- a/drivers/regulator/qcom_smd-regulator.c
-+++ b/drivers/regulator/qcom_smd-regulator.c
-@@ -140,6 +140,18 @@ static const struct regulator_ops rpm_smps_ldo_ops = {
- .enable = rpm_reg_enable,
- .disable = rpm_reg_disable,
- .is_enabled = rpm_reg_is_enabled,
-+ .list_voltage = regulator_list_voltage_linear_range,
-+
-+ .get_voltage = rpm_reg_get_voltage,
-+ .set_voltage = rpm_reg_set_voltage,
-+
-+ .set_load = rpm_reg_set_load,
-+};
-+
-+static const struct regulator_ops rpm_smps_ldo_ops_fixed = {
-+ .enable = rpm_reg_enable,
-+ .disable = rpm_reg_disable,
-+ .is_enabled = rpm_reg_is_enabled,
-
- .get_voltage = rpm_reg_get_voltage,
- .set_voltage = rpm_reg_set_voltage,
-@@ -247,7 +259,7 @@ static const struct regulator_desc pm8941_nldo = {
- static const struct regulator_desc pm8941_lnldo = {
- .fixed_uV = 1740000,
- .n_voltages = 1,
-- .ops = &rpm_smps_ldo_ops,
-+ .ops = &rpm_smps_ldo_ops_fixed,
- };
-
- static const struct regulator_desc pm8941_switch = {
-diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
-index d4c2856..3ddc85e 100644
---- a/drivers/scsi/53c700.c
-+++ b/drivers/scsi/53c700.c
-@@ -1122,7 +1122,7 @@ process_script_interrupt(__u32 dsps, __u32 dsp, struct scsi_cmnd *SCp,
- } else {
- struct scsi_cmnd *SCp;
-
-- SCp = scsi_host_find_tag(SDp->host, SCSI_NO_TAG);
-+ SCp = SDp->current_cmnd;
- if(unlikely(SCp == NULL)) {
- sdev_printk(KERN_ERR, SDp,
- "no saved request for untagged cmd\n");
-@@ -1826,7 +1826,7 @@ NCR_700_queuecommand_lck(struct scsi_cmnd *SCp, void (*done)(struct scsi_cmnd *)
- slot->tag, slot);
- } else {
- slot->tag = SCSI_NO_TAG;
-- /* must populate current_cmnd for scsi_host_find_tag to work */
-+ /* save current command for reselection */
- SCp->device->current_cmnd = SCp;
- }
- /* sanity check: some of the commands generated by the mid-layer
-diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
-index 984ddcb..1b9c049 100644
---- a/drivers/scsi/scsi_error.c
-+++ b/drivers/scsi/scsi_error.c
-@@ -1127,7 +1127,6 @@ static int scsi_eh_action(struct scsi_cmnd *scmd, int rtn)
- */
- void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q)
- {
-- scmd->device->host->host_failed--;
- scmd->eh_eflags = 0;
- list_move_tail(&scmd->eh_entry, done_q);
- }
-@@ -2226,6 +2225,9 @@ int scsi_error_handler(void *data)
- else
- scsi_unjam_host(shost);
-
-+ /* All scmds have been handled */
-+ shost->host_failed = 0;
-+
- /*
- * Note - if the above fails completely, the action is to take
- * individual devices offline and flush the queue of any
-diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index f52b74c..41c3a2c 100644
---- a/drivers/scsi/sd.c
-+++ b/drivers/scsi/sd.c
-@@ -2862,10 +2862,10 @@ static int sd_revalidate_disk(struct gendisk *disk)
- if (sdkp->opt_xfer_blocks &&
- sdkp->opt_xfer_blocks <= dev_max &&
- sdkp->opt_xfer_blocks <= SD_DEF_XFER_BLOCKS &&
-- sdkp->opt_xfer_blocks * sdp->sector_size >= PAGE_SIZE)
-- rw_max = q->limits.io_opt =
-- sdkp->opt_xfer_blocks * sdp->sector_size;
-- else
-+ logical_to_bytes(sdp, sdkp->opt_xfer_blocks) >= PAGE_SIZE) {
-+ q->limits.io_opt = logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
-+ rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
-+ } else
- rw_max = BLK_DEF_MAX_SECTORS;
-
- /* Combine with controller limits */
-diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
-index 654630b..765a6f1 100644
---- a/drivers/scsi/sd.h
-+++ b/drivers/scsi/sd.h
-@@ -151,6 +151,11 @@ static inline sector_t logical_to_sectors(struct scsi_device *sdev, sector_t blo
- return blocks << (ilog2(sdev->sector_size) - 9);
- }
-
-+static inline unsigned int logical_to_bytes(struct scsi_device *sdev, sector_t blocks)
-+{
-+ return blocks * sdev->sector_size;
-+}
-+
- /*
- * A DIF-capable target device can be formatted with different
- * protection schemes. Currently 0 through 3 are defined:
-diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
-index a8f533a..ec12181 100644
---- a/drivers/staging/iio/accel/sca3000_core.c
-+++ b/drivers/staging/iio/accel/sca3000_core.c
-@@ -594,7 +594,7 @@ static ssize_t sca3000_read_frequency(struct device *dev,
- goto error_ret_mut;
- ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL);
- mutex_unlock(&st->lock);
-- if (ret)
-+ if (ret < 0)
- goto error_ret;
- val = ret;
- if (base_freq > 0)
-diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
-index 6ceac4f..5b4b47e 100644
---- a/drivers/thermal/cpu_cooling.c
-+++ b/drivers/thermal/cpu_cooling.c
-@@ -857,14 +857,6 @@ __cpufreq_cooling_register(struct device_node *np,
- goto free_power_table;
- }
-
-- snprintf(dev_name, sizeof(dev_name), "thermal-cpufreq-%d",
-- cpufreq_dev->id);
--
-- cool_dev = thermal_of_cooling_device_register(np, dev_name, cpufreq_dev,
-- &cpufreq_cooling_ops);
-- if (IS_ERR(cool_dev))
-- goto remove_idr;
--
- /* Fill freq-table in descending order of frequencies */
- for (i = 0, freq = -1; i <= cpufreq_dev->max_level; i++) {
- freq = find_next_max(table, freq);
-@@ -877,6 +869,14 @@ __cpufreq_cooling_register(struct device_node *np,
- pr_debug("%s: freq:%u KHz\n", __func__, freq);
- }
-
-+ snprintf(dev_name, sizeof(dev_name), "thermal-cpufreq-%d",
-+ cpufreq_dev->id);
-+
-+ cool_dev = thermal_of_cooling_device_register(np, dev_name, cpufreq_dev,
-+ &cpufreq_cooling_ops);
-+ if (IS_ERR(cool_dev))
-+ goto remove_idr;
-+
- cpufreq_dev->clipped_freq = cpufreq_dev->freq_table[0];
- cpufreq_dev->cool_dev = cool_dev;
-
-diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
-index f973bfc..1e93a37 100644
---- a/drivers/tty/vt/keyboard.c
-+++ b/drivers/tty/vt/keyboard.c
-@@ -366,34 +366,22 @@ static void to_utf8(struct vc_data *vc, uint c)
-
- static void do_compute_shiftstate(void)
- {
-- unsigned int i, j, k, sym, val;
-+ unsigned int k, sym, val;
-
- shift_state = 0;
- memset(shift_down, 0, sizeof(shift_down));
-
-- for (i = 0; i < ARRAY_SIZE(key_down); i++) {
--
-- if (!key_down[i])
-+ for_each_set_bit(k, key_down, min(NR_KEYS, KEY_CNT)) {
-+ sym = U(key_maps[0][k]);
-+ if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
- continue;
-
-- k = i * BITS_PER_LONG;
--
-- for (j = 0; j < BITS_PER_LONG; j++, k++) {
--
-- if (!test_bit(k, key_down))
-- continue;
-+ val = KVAL(sym);
-+ if (val == KVAL(K_CAPSSHIFT))
-+ val = KVAL(K_SHIFT);
-
-- sym = U(key_maps[0][k]);
-- if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
-- continue;
--
-- val = KVAL(sym);
-- if (val == KVAL(K_CAPSSHIFT))
-- val = KVAL(K_SHIFT);
--
-- shift_down[val]++;
-- shift_state |= (1 << val);
-- }
-+ shift_down[val]++;
-+ shift_state |= BIT(val);
- }
- }
-
-diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
-index bd523ad..e9e29de 100644
---- a/drivers/tty/vt/vt.c
-+++ b/drivers/tty/vt/vt.c
-@@ -750,6 +750,7 @@ static void visual_init(struct vc_data *vc, int num, int init)
- vc->vc_complement_mask = 0;
- vc->vc_can_do_color = 0;
- vc->vc_panic_force_write = false;
-+ vc->vc_cur_blink_ms = DEFAULT_CURSOR_BLINK_MS;
- vc->vc_sw->con_init(vc, init);
- if (!vc->vc_complement_mask)
- vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800;
-diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
-index 504708f..6c6040c 100644
---- a/drivers/usb/common/usb-otg-fsm.c
-+++ b/drivers/usb/common/usb-otg-fsm.c
-@@ -21,6 +21,7 @@
- * 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-+#include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/types.h>
- #include <linux/mutex.h>
-@@ -452,3 +453,4 @@ int otg_statemachine(struct otg_fsm *fsm)
- return state_changed;
- }
- EXPORT_SYMBOL_GPL(otg_statemachine);
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
-index 980fc57..2d107d0 100644
---- a/drivers/usb/core/hcd.c
-+++ b/drivers/usb/core/hcd.c
-@@ -2597,26 +2597,23 @@ EXPORT_SYMBOL_GPL(usb_create_hcd);
- * Don't deallocate the bandwidth_mutex until the last shared usb_hcd is
- * deallocated.
- *
-- * Make sure to only deallocate the bandwidth_mutex when the primary HCD is
-- * freed. When hcd_release() is called for either hcd in a peer set
-- * invalidate the peer's ->shared_hcd and ->primary_hcd pointers to
-- * block new peering attempts
-+ * Make sure to deallocate the bandwidth_mutex only when the last HCD is
-+ * freed. When hcd_release() is called for either hcd in a peer set,
-+ * invalidate the peer's ->shared_hcd and ->primary_hcd pointers.
- */
- static void hcd_release(struct kref *kref)
- {
- struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref);
-
- mutex_lock(&usb_port_peer_mutex);
-- if (usb_hcd_is_primary_hcd(hcd)) {
-- kfree(hcd->address0_mutex);
-- kfree(hcd->bandwidth_mutex);
-- }
- if (hcd->shared_hcd) {
- struct usb_hcd *peer = hcd->shared_hcd;
-
- peer->shared_hcd = NULL;
-- if (peer->primary_hcd == hcd)
-- peer->primary_hcd = NULL;
-+ peer->primary_hcd = NULL;
-+ } else {
-+ kfree(hcd->address0_mutex);
-+ kfree(hcd->bandwidth_mutex);
- }
- mutex_unlock(&usb_port_peer_mutex);
- kfree(hcd);
-diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
-index 3c58d63..dec0b21 100644
---- a/drivers/usb/dwc2/core.h
-+++ b/drivers/usb/dwc2/core.h
-@@ -64,6 +64,17 @@
- DWC2_TRACE_SCHEDULER_VB(pr_fmt("%s: SCH: " fmt), \
- dev_name(hsotg->dev), ##__VA_ARGS__)
-
-+#ifdef CONFIG_MIPS
-+/*
-+ * There are some MIPS machines that can run in either big-endian
-+ * or little-endian mode and that use the dwc2 register without
-+ * a byteswap in both ways.
-+ * Unlike other architectures, MIPS apparently does not require a
-+ * barrier before the __raw_writel() to synchronize with DMA but does
-+ * require the barrier after the __raw_writel() to serialize a set of
-+ * writes. This set of operations was added specifically for MIPS and
-+ * should only be used there.
-+ */
- static inline u32 dwc2_readl(const void __iomem *addr)
- {
- u32 value = __raw_readl(addr);
-@@ -90,6 +101,22 @@ static inline void dwc2_writel(u32 value, void __iomem *addr)
- pr_info("INFO:: wrote %08x to %p\n", value, addr);
- #endif
- }
-+#else
-+/* Normal architectures just use readl/write */
-+static inline u32 dwc2_readl(const void __iomem *addr)
-+{
-+ return readl(addr);
-+}
-+
-+static inline void dwc2_writel(u32 value, void __iomem *addr)
-+{
-+ writel(value, addr);
-+
-+#ifdef DWC2_LOG_WRITES
-+ pr_info("info:: wrote %08x to %p\n", value, addr);
-+#endif
-+}
-+#endif
-
- /* Maximum number of Endpoints/HostChannels */
- #define MAX_EPS_CHANNELS 16
-diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
-index 7b6d74f..476c0e3 100644
---- a/drivers/virtio/virtio_balloon.c
-+++ b/drivers/virtio/virtio_balloon.c
-@@ -75,7 +75,7 @@ struct virtio_balloon {
-
- /* The array of pfns we tell the Host about. */
- unsigned int num_pfns;
-- u32 pfns[VIRTIO_BALLOON_ARRAY_PFNS_MAX];
-+ __virtio32 pfns[VIRTIO_BALLOON_ARRAY_PFNS_MAX];
-
- /* Memory statistics */
- struct virtio_balloon_stat stats[VIRTIO_BALLOON_S_NR];
-@@ -127,14 +127,16 @@ static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
-
- }
-
--static void set_page_pfns(u32 pfns[], struct page *page)
-+static void set_page_pfns(struct virtio_balloon *vb,
-+ __virtio32 pfns[], struct page *page)
- {
- unsigned int i;
-
- /* Set balloon pfns pointing at this page.
- * Note that the first pfn points at start of the page. */
- for (i = 0; i < VIRTIO_BALLOON_PAGES_PER_PAGE; i++)
-- pfns[i] = page_to_balloon_pfn(page) + i;
-+ pfns[i] = cpu_to_virtio32(vb->vdev,
-+ page_to_balloon_pfn(page) + i);
- }
-
- static unsigned fill_balloon(struct virtio_balloon *vb, size_t num)
-@@ -158,7 +160,7 @@ static unsigned fill_balloon(struct virtio_balloon *vb, size_t num)
- msleep(200);
- break;
- }
-- set_page_pfns(vb->pfns + vb->num_pfns, page);
-+ set_page_pfns(vb, vb->pfns + vb->num_pfns, page);
- vb->num_pages += VIRTIO_BALLOON_PAGES_PER_PAGE;
- if (!virtio_has_feature(vb->vdev,
- VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
-@@ -177,10 +179,12 @@ static unsigned fill_balloon(struct virtio_balloon *vb, size_t num)
- static void release_pages_balloon(struct virtio_balloon *vb)
- {
- unsigned int i;
-+ struct page *page;
-
- /* Find pfns pointing at start of each page, get pages and free them. */
- for (i = 0; i < vb->num_pfns; i += VIRTIO_BALLOON_PAGES_PER_PAGE) {
-- struct page *page = balloon_pfn_to_page(vb->pfns[i]);
-+ page = balloon_pfn_to_page(virtio32_to_cpu(vb->vdev,
-+ vb->pfns[i]));
- if (!virtio_has_feature(vb->vdev,
- VIRTIO_BALLOON_F_DEFLATE_ON_OOM))
- adjust_managed_page_count(page, 1);
-@@ -203,7 +207,7 @@ static unsigned leak_balloon(struct virtio_balloon *vb, size_t num)
- page = balloon_page_dequeue(vb_dev_info);
- if (!page)
- break;
-- set_page_pfns(vb->pfns + vb->num_pfns, page);
-+ set_page_pfns(vb, vb->pfns + vb->num_pfns, page);
- vb->num_pages -= VIRTIO_BALLOON_PAGES_PER_PAGE;
- }
-
-@@ -471,13 +475,13 @@ static int virtballoon_migratepage(struct balloon_dev_info *vb_dev_info,
- __count_vm_event(BALLOON_MIGRATE);
- spin_unlock_irqrestore(&vb_dev_info->pages_lock, flags);
- vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
-- set_page_pfns(vb->pfns, newpage);
-+ set_page_pfns(vb, vb->pfns, newpage);
- tell_host(vb, vb->inflate_vq);
-
- /* balloon's page migration 2nd step -- deflate "page" */
- balloon_page_delete(page);
- vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
-- set_page_pfns(vb->pfns, page);
-+ set_page_pfns(vb, vb->pfns, page);
- tell_host(vb, vb->deflate_vq);
-
- mutex_unlock(&vb->balloon_lock);
-diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
-index d46839f..e4db19e 100644
---- a/drivers/xen/balloon.c
-+++ b/drivers/xen/balloon.c
-@@ -151,8 +151,6 @@ static DECLARE_WAIT_QUEUE_HEAD(balloon_wq);
- static void balloon_process(struct work_struct *work);
- static DECLARE_DELAYED_WORK(balloon_worker, balloon_process);
-
--static void release_memory_resource(struct resource *resource);
--
- /* When ballooning out (allocating memory to return to Xen) we don't really
- want the kernel to try too hard since that can trigger the oom killer. */
- #define GFP_BALLOON \
-@@ -248,6 +246,19 @@ static enum bp_state update_schedule(enum bp_state state)
- }
-
- #ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
-+static void release_memory_resource(struct resource *resource)
-+{
-+ if (!resource)
-+ return;
-+
-+ /*
-+ * No need to reset region to identity mapped since we now
-+ * know that no I/O can be in this region
-+ */
-+ release_resource(resource);
-+ kfree(resource);
-+}
-+
- static struct resource *additional_memory_resource(phys_addr_t size)
- {
- struct resource *res;
-@@ -286,19 +297,6 @@ static struct resource *additional_memory_resource(phys_addr_t size)
- return res;
- }
-
--static void release_memory_resource(struct resource *resource)
--{
-- if (!resource)
-- return;
--
-- /*
-- * No need to reset region to identity mapped since we now
-- * know that no I/O can be in this region
-- */
-- release_resource(resource);
-- kfree(resource);
--}
--
- static enum bp_state reserve_additional_memory(void)
- {
- long credit;
-diff --git a/drivers/xen/xen-acpi-processor.c b/drivers/xen/xen-acpi-processor.c
-index 076970a..4ce10bc 100644
---- a/drivers/xen/xen-acpi-processor.c
-+++ b/drivers/xen/xen-acpi-processor.c
-@@ -423,36 +423,7 @@ upload:
-
- return 0;
- }
--static int __init check_prereq(void)
--{
-- struct cpuinfo_x86 *c = &cpu_data(0);
--
-- if (!xen_initial_domain())
-- return -ENODEV;
--
-- if (!acpi_gbl_FADT.smi_command)
-- return -ENODEV;
--
-- if (c->x86_vendor == X86_VENDOR_INTEL) {
-- if (!cpu_has(c, X86_FEATURE_EST))
-- return -ENODEV;
-
-- return 0;
-- }
-- if (c->x86_vendor == X86_VENDOR_AMD) {
-- /* Copied from powernow-k8.h, can't include ../cpufreq/powernow
-- * as we get compile warnings for the static functions.
-- */
--#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
--#define USE_HW_PSTATE 0x00000080
-- u32 eax, ebx, ecx, edx;
-- cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
-- if ((edx & USE_HW_PSTATE) != USE_HW_PSTATE)
-- return -ENODEV;
-- return 0;
-- }
-- return -ENODEV;
--}
- /* acpi_perf_data is a pointer to percpu data. */
- static struct acpi_processor_performance __percpu *acpi_perf_data;
-
-@@ -509,10 +480,10 @@ struct notifier_block xen_acpi_processor_resume_nb = {
- static int __init xen_acpi_processor_init(void)
- {
- unsigned int i;
-- int rc = check_prereq();
-+ int rc;
-
-- if (rc)
-- return rc;
-+ if (!xen_initial_domain())
-+ return -ENODEV;
-
- nr_acpi_bits = get_max_acpi_id() + 1;
- acpi_ids_done = kcalloc(BITS_TO_LONGS(nr_acpi_bits), sizeof(unsigned long), GFP_KERNEL);
-diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
-index ec7928a..234707c 100644
---- a/fs/btrfs/ctree.c
-+++ b/fs/btrfs/ctree.c
-@@ -1552,6 +1552,7 @@ noinline int btrfs_cow_block(struct btrfs_trans_handle *trans,
- trans->transid, root->fs_info->generation);
-
- if (!should_cow_block(trans, root, buf)) {
-+ trans->dirty = true;
- *cow_ret = buf;
- return 0;
- }
-@@ -2773,8 +2774,10 @@ again:
- * then we don't want to set the path blocking,
- * so we test it here
- */
-- if (!should_cow_block(trans, root, b))
-+ if (!should_cow_block(trans, root, b)) {
-+ trans->dirty = true;
- goto cow_done;
-+ }
-
- /*
- * must have write locks on this node and the
-diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
-index 84e060e..78f1b57 100644
---- a/fs/btrfs/extent-tree.c
-+++ b/fs/btrfs/extent-tree.c
-@@ -7929,7 +7929,7 @@ btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
- set_extent_dirty(&trans->transaction->dirty_pages, buf->start,
- buf->start + buf->len - 1, GFP_NOFS);
- }
-- trans->blocks_used++;
-+ trans->dirty = true;
- /* this returns a buffer locked for blocking */
- return buf;
- }
-diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
-index 00b8f37..d7c138f 100644
---- a/fs/btrfs/super.c
-+++ b/fs/btrfs/super.c
-@@ -239,7 +239,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
- trans->aborted = errno;
- /* Nothing used. The other threads that have joined this
- * transaction may be able to continue. */
-- if (!trans->blocks_used && list_empty(&trans->new_bgs)) {
-+ if (!trans->dirty && list_empty(&trans->new_bgs)) {
- const char *errstr;
-
- errstr = btrfs_decode_error(errno);
-diff --git a/fs/btrfs/transaction.h b/fs/btrfs/transaction.h
-index 72be51f..c0b501a 100644
---- a/fs/btrfs/transaction.h
-+++ b/fs/btrfs/transaction.h
-@@ -110,7 +110,6 @@ struct btrfs_trans_handle {
- u64 chunk_bytes_reserved;
- unsigned long use_count;
- unsigned long blocks_reserved;
-- unsigned long blocks_used;
- unsigned long delayed_ref_updates;
- struct btrfs_transaction *transaction;
- struct btrfs_block_rsv *block_rsv;
-@@ -121,6 +120,7 @@ struct btrfs_trans_handle {
- bool can_flush_pending_bgs;
- bool reloc_reserved;
- bool sync;
-+ bool dirty;
- unsigned int type;
- /*
- * this root is only needed to validate that the root passed to
-diff --git a/fs/cifs/cifs_unicode.c b/fs/cifs/cifs_unicode.c
-index 5a53ac6..02b071bf 100644
---- a/fs/cifs/cifs_unicode.c
-+++ b/fs/cifs/cifs_unicode.c
-@@ -101,6 +101,12 @@ convert_sfm_char(const __u16 src_char, char *target)
- case SFM_SLASH:
- *target = '\\';
- break;
-+ case SFM_SPACE:
-+ *target = ' ';
-+ break;
-+ case SFM_PERIOD:
-+ *target = '.';
-+ break;
- default:
- return false;
- }
-@@ -404,7 +410,7 @@ static __le16 convert_to_sfu_char(char src_char)
- return dest_char;
- }
-
--static __le16 convert_to_sfm_char(char src_char)
-+static __le16 convert_to_sfm_char(char src_char, bool end_of_string)
- {
- __le16 dest_char;
-
-@@ -427,6 +433,18 @@ static __le16 convert_to_sfm_char(char src_char)
- case '|':
- dest_char = cpu_to_le16(SFM_PIPE);
- break;
-+ case '.':
-+ if (end_of_string)
-+ dest_char = cpu_to_le16(SFM_PERIOD);
-+ else
-+ dest_char = 0;
-+ break;
-+ case ' ':
-+ if (end_of_string)
-+ dest_char = cpu_to_le16(SFM_SPACE);
-+ else
-+ dest_char = 0;
-+ break;
- default:
- dest_char = 0;
- }
-@@ -469,9 +487,16 @@ cifsConvertToUTF16(__le16 *target, const char *source, int srclen,
- /* see if we must remap this char */
- if (map_chars == SFU_MAP_UNI_RSVD)
- dst_char = convert_to_sfu_char(src_char);
-- else if (map_chars == SFM_MAP_UNI_RSVD)
-- dst_char = convert_to_sfm_char(src_char);
-- else
-+ else if (map_chars == SFM_MAP_UNI_RSVD) {
-+ bool end_of_string;
-+
-+ if (i == srclen - 1)
-+ end_of_string = true;
-+ else
-+ end_of_string = false;
-+
-+ dst_char = convert_to_sfm_char(src_char, end_of_string);
-+ } else
- dst_char = 0;
- /*
- * FIXME: We can not handle remapping backslash (UNI_SLASH)
-diff --git a/fs/cifs/cifs_unicode.h b/fs/cifs/cifs_unicode.h
-index bdc52cb..479bc0a 100644
---- a/fs/cifs/cifs_unicode.h
-+++ b/fs/cifs/cifs_unicode.h
-@@ -64,6 +64,8 @@
- #define SFM_LESSTHAN ((__u16) 0xF023)
- #define SFM_PIPE ((__u16) 0xF027)
- #define SFM_SLASH ((__u16) 0xF026)
-+#define SFM_PERIOD ((__u16) 0xF028)
-+#define SFM_SPACE ((__u16) 0xF029)
-
- /*
- * Mapping mechanism to use when one of the seven reserved characters is
-diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
-index 6f62ac8..34cbc58 100644
---- a/fs/cifs/connect.c
-+++ b/fs/cifs/connect.c
-@@ -428,7 +428,9 @@ cifs_echo_request(struct work_struct *work)
- * server->ops->need_neg() == true. Also, no need to ping if
- * we got a response recently.
- */
-- if (!server->ops->need_neg || server->ops->need_neg(server) ||
-+
-+ if (server->tcpStatus == CifsNeedReconnect ||
-+ server->tcpStatus == CifsExiting || server->tcpStatus == CifsNew ||
- (server->ops->can_echo && !server->ops->can_echo(server)) ||
- time_before(jiffies, server->lstrp + echo_interval - HZ))
- goto requeue_echo;
-diff --git a/fs/cifs/ntlmssp.h b/fs/cifs/ntlmssp.h
-index 848249f..3079b38 100644
---- a/fs/cifs/ntlmssp.h
-+++ b/fs/cifs/ntlmssp.h
-@@ -133,6 +133,6 @@ typedef struct _AUTHENTICATE_MESSAGE {
-
- int decode_ntlmssp_challenge(char *bcc_ptr, int blob_len, struct cifs_ses *ses);
- void build_ntlmssp_negotiate_blob(unsigned char *pbuffer, struct cifs_ses *ses);
--int build_ntlmssp_auth_blob(unsigned char *pbuffer, u16 *buflen,
-+int build_ntlmssp_auth_blob(unsigned char **pbuffer, u16 *buflen,
- struct cifs_ses *ses,
- const struct nls_table *nls_cp);
-diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
-index af0ec2d..e88ffe1 100644
---- a/fs/cifs/sess.c
-+++ b/fs/cifs/sess.c
-@@ -364,19 +364,43 @@ void build_ntlmssp_negotiate_blob(unsigned char *pbuffer,
- sec_blob->DomainName.MaximumLength = 0;
- }
-
--/* We do not malloc the blob, it is passed in pbuffer, because its
-- maximum possible size is fixed and small, making this approach cleaner.
-- This function returns the length of the data in the blob */
--int build_ntlmssp_auth_blob(unsigned char *pbuffer,
-+static int size_of_ntlmssp_blob(struct cifs_ses *ses)
-+{
-+ int sz = sizeof(AUTHENTICATE_MESSAGE) + ses->auth_key.len
-+ - CIFS_SESS_KEY_SIZE + CIFS_CPHTXT_SIZE + 2;
-+
-+ if (ses->domainName)
-+ sz += 2 * strnlen(ses->domainName, CIFS_MAX_DOMAINNAME_LEN);
-+ else
-+ sz += 2;
-+
-+ if (ses->user_name)
-+ sz += 2 * strnlen(ses->user_name, CIFS_MAX_USERNAME_LEN);
-+ else
-+ sz += 2;
-+
-+ return sz;
-+}
-+
-+int build_ntlmssp_auth_blob(unsigned char **pbuffer,
- u16 *buflen,
- struct cifs_ses *ses,
- const struct nls_table *nls_cp)
- {
- int rc;
-- AUTHENTICATE_MESSAGE *sec_blob = (AUTHENTICATE_MESSAGE *)pbuffer;
-+ AUTHENTICATE_MESSAGE *sec_blob;
- __u32 flags;
- unsigned char *tmp;
-
-+ rc = setup_ntlmv2_rsp(ses, nls_cp);
-+ if (rc) {
-+ cifs_dbg(VFS, "Error %d during NTLMSSP authentication\n", rc);
-+ *buflen = 0;
-+ goto setup_ntlmv2_ret;
-+ }
-+ *pbuffer = kmalloc(size_of_ntlmssp_blob(ses), GFP_KERNEL);
-+ sec_blob = (AUTHENTICATE_MESSAGE *)*pbuffer;
-+
- memcpy(sec_blob->Signature, NTLMSSP_SIGNATURE, 8);
- sec_blob->MessageType = NtLmAuthenticate;
-
-@@ -391,7 +415,7 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
- flags |= NTLMSSP_NEGOTIATE_KEY_XCH;
- }
-
-- tmp = pbuffer + sizeof(AUTHENTICATE_MESSAGE);
-+ tmp = *pbuffer + sizeof(AUTHENTICATE_MESSAGE);
- sec_blob->NegotiateFlags = cpu_to_le32(flags);
-
- sec_blob->LmChallengeResponse.BufferOffset =
-@@ -399,13 +423,9 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
- sec_blob->LmChallengeResponse.Length = 0;
- sec_blob->LmChallengeResponse.MaximumLength = 0;
-
-- sec_blob->NtChallengeResponse.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->NtChallengeResponse.BufferOffset =
-+ cpu_to_le32(tmp - *pbuffer);
- if (ses->user_name != NULL) {
-- rc = setup_ntlmv2_rsp(ses, nls_cp);
-- if (rc) {
-- cifs_dbg(VFS, "Error %d during NTLMSSP authentication\n", rc);
-- goto setup_ntlmv2_ret;
-- }
- memcpy(tmp, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
- ses->auth_key.len - CIFS_SESS_KEY_SIZE);
- tmp += ses->auth_key.len - CIFS_SESS_KEY_SIZE;
-@@ -423,7 +443,7 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
- }
-
- if (ses->domainName == NULL) {
-- sec_blob->DomainName.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->DomainName.BufferOffset = cpu_to_le32(tmp - *pbuffer);
- sec_blob->DomainName.Length = 0;
- sec_blob->DomainName.MaximumLength = 0;
- tmp += 2;
-@@ -432,14 +452,14 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
- len = cifs_strtoUTF16((__le16 *)tmp, ses->domainName,
- CIFS_MAX_USERNAME_LEN, nls_cp);
- len *= 2; /* unicode is 2 bytes each */
-- sec_blob->DomainName.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->DomainName.BufferOffset = cpu_to_le32(tmp - *pbuffer);
- sec_blob->DomainName.Length = cpu_to_le16(len);
- sec_blob->DomainName.MaximumLength = cpu_to_le16(len);
- tmp += len;
- }
-
- if (ses->user_name == NULL) {
-- sec_blob->UserName.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->UserName.BufferOffset = cpu_to_le32(tmp - *pbuffer);
- sec_blob->UserName.Length = 0;
- sec_blob->UserName.MaximumLength = 0;
- tmp += 2;
-@@ -448,13 +468,13 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
- len = cifs_strtoUTF16((__le16 *)tmp, ses->user_name,
- CIFS_MAX_USERNAME_LEN, nls_cp);
- len *= 2; /* unicode is 2 bytes each */
-- sec_blob->UserName.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->UserName.BufferOffset = cpu_to_le32(tmp - *pbuffer);
- sec_blob->UserName.Length = cpu_to_le16(len);
- sec_blob->UserName.MaximumLength = cpu_to_le16(len);
- tmp += len;
- }
-
-- sec_blob->WorkstationName.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->WorkstationName.BufferOffset = cpu_to_le32(tmp - *pbuffer);
- sec_blob->WorkstationName.Length = 0;
- sec_blob->WorkstationName.MaximumLength = 0;
- tmp += 2;
-@@ -463,19 +483,19 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
- (ses->ntlmssp->server_flags & NTLMSSP_NEGOTIATE_EXTENDED_SEC))
- && !calc_seckey(ses)) {
- memcpy(tmp, ses->ntlmssp->ciphertext, CIFS_CPHTXT_SIZE);
-- sec_blob->SessionKey.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->SessionKey.BufferOffset = cpu_to_le32(tmp - *pbuffer);
- sec_blob->SessionKey.Length = cpu_to_le16(CIFS_CPHTXT_SIZE);
- sec_blob->SessionKey.MaximumLength =
- cpu_to_le16(CIFS_CPHTXT_SIZE);
- tmp += CIFS_CPHTXT_SIZE;
- } else {
-- sec_blob->SessionKey.BufferOffset = cpu_to_le32(tmp - pbuffer);
-+ sec_blob->SessionKey.BufferOffset = cpu_to_le32(tmp - *pbuffer);
- sec_blob->SessionKey.Length = 0;
- sec_blob->SessionKey.MaximumLength = 0;
- }
-
-+ *buflen = tmp - *pbuffer;
- setup_ntlmv2_ret:
-- *buflen = tmp - pbuffer;
- return rc;
- }
-
-@@ -1266,7 +1286,7 @@ sess_auth_rawntlmssp_authenticate(struct sess_data *sess_data)
- struct cifs_ses *ses = sess_data->ses;
- __u16 bytes_remaining;
- char *bcc_ptr;
-- char *ntlmsspblob = NULL;
-+ unsigned char *ntlmsspblob = NULL;
- u16 blob_len;
-
- cifs_dbg(FYI, "rawntlmssp session setup authenticate phase\n");
-@@ -1279,19 +1299,7 @@ sess_auth_rawntlmssp_authenticate(struct sess_data *sess_data)
- /* Build security blob before we assemble the request */
- pSMB = (SESSION_SETUP_ANDX *)sess_data->iov[0].iov_base;
- smb_buf = (struct smb_hdr *)pSMB;
-- /*
-- * 5 is an empirical value, large enough to hold
-- * authenticate message plus max 10 of av paris,
-- * domain, user, workstation names, flags, etc.
-- */
-- ntlmsspblob = kzalloc(5*sizeof(struct _AUTHENTICATE_MESSAGE),
-- GFP_KERNEL);
-- if (!ntlmsspblob) {
-- rc = -ENOMEM;
-- goto out;
-- }
--
-- rc = build_ntlmssp_auth_blob(ntlmsspblob,
-+ rc = build_ntlmssp_auth_blob(&ntlmsspblob,
- &blob_len, ses, sess_data->nls_cp);
- if (rc)
- goto out_free_ntlmsspblob;
-diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
-index 8f38e33..29e06db 100644
---- a/fs/cifs/smb2pdu.c
-+++ b/fs/cifs/smb2pdu.c
-@@ -588,7 +588,7 @@ SMB2_sess_setup(const unsigned int xid, struct cifs_ses *ses,
- u16 blob_length = 0;
- struct key *spnego_key = NULL;
- char *security_blob = NULL;
-- char *ntlmssp_blob = NULL;
-+ unsigned char *ntlmssp_blob = NULL;
- bool use_spnego = false; /* else use raw ntlmssp */
-
- cifs_dbg(FYI, "Session Setup\n");
-@@ -713,13 +713,7 @@ ssetup_ntlmssp_authenticate:
- iov[1].iov_len = blob_length;
- } else if (phase == NtLmAuthenticate) {
- req->hdr.SessionId = ses->Suid;
-- ntlmssp_blob = kzalloc(sizeof(struct _NEGOTIATE_MESSAGE) + 500,
-- GFP_KERNEL);
-- if (ntlmssp_blob == NULL) {
-- rc = -ENOMEM;
-- goto ssetup_exit;
-- }
-- rc = build_ntlmssp_auth_blob(ntlmssp_blob, &blob_length, ses,
-+ rc = build_ntlmssp_auth_blob(&ntlmssp_blob, &blob_length, ses,
- nls_cp);
- if (rc) {
- cifs_dbg(FYI, "build_ntlmssp_auth_blob failed %d\n",
-@@ -1818,6 +1812,33 @@ SMB2_echo(struct TCP_Server_Info *server)
-
- cifs_dbg(FYI, "In echo request\n");
-
-+ if (server->tcpStatus == CifsNeedNegotiate) {
-+ struct list_head *tmp, *tmp2;
-+ struct cifs_ses *ses;
-+ struct cifs_tcon *tcon;
-+
-+ cifs_dbg(FYI, "Need negotiate, reconnecting tcons\n");
-+ spin_lock(&cifs_tcp_ses_lock);
-+ list_for_each(tmp, &server->smb_ses_list) {
-+ ses = list_entry(tmp, struct cifs_ses, smb_ses_list);
-+ list_for_each(tmp2, &ses->tcon_list) {
-+ tcon = list_entry(tmp2, struct cifs_tcon,
-+ tcon_list);
-+ /* add check for persistent handle reconnect */
-+ if (tcon && tcon->need_reconnect) {
-+ spin_unlock(&cifs_tcp_ses_lock);
-+ rc = smb2_reconnect(SMB2_ECHO, tcon);
-+ spin_lock(&cifs_tcp_ses_lock);
-+ }
-+ }
-+ }
-+ spin_unlock(&cifs_tcp_ses_lock);
-+ }
-+
-+ /* if no session, renegotiate failed above */
-+ if (server->tcpStatus == CifsNeedNegotiate)
-+ return -EIO;
-+
- rc = small_smb2_init(SMB2_ECHO, NULL, (void **)&req);
- if (rc)
- return rc;
-diff --git a/fs/namei.c b/fs/namei.c
-index 30145f8..aaa3b69 100644
---- a/fs/namei.c
-+++ b/fs/namei.c
-@@ -3173,6 +3173,10 @@ retry_lookup:
- got_write = false;
- }
-
-+ error = follow_managed(&path, nd);
-+ if (unlikely(error < 0))
-+ return error;
-+
- if (unlikely(d_is_negative(path.dentry))) {
- path_to_nameidata(&path, nd);
- return -ENOENT;
-@@ -3188,10 +3192,6 @@ retry_lookup:
- return -EEXIST;
- }
-
-- error = follow_managed(&path, nd);
-- if (unlikely(error < 0))
-- return error;
--
- seq = 0; /* out of RCU mode, so the value doesn't matter */
- inode = d_backing_inode(path.dentry);
- finish_lookup:
-diff --git a/fs/namespace.c b/fs/namespace.c
-index 4fb1691..783004a 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
-@@ -2409,8 +2409,10 @@ static int do_new_mount(struct path *path, const char *fstype, int flags,
- mnt_flags |= MNT_NODEV | MNT_LOCK_NODEV;
- }
- if (type->fs_flags & FS_USERNS_VISIBLE) {
-- if (!fs_fully_visible(type, &mnt_flags))
-+ if (!fs_fully_visible(type, &mnt_flags)) {
-+ put_filesystem(type);
- return -EPERM;
-+ }
- }
- }
-
-@@ -3245,6 +3247,10 @@ static bool fs_fully_visible(struct file_system_type *type, int *new_mnt_flags)
- if (mnt->mnt.mnt_sb->s_iflags & SB_I_NOEXEC)
- mnt_flags &= ~(MNT_LOCK_NOSUID | MNT_LOCK_NOEXEC);
-
-+ /* Don't miss readonly hidden in the superblock flags */
-+ if (mnt->mnt.mnt_sb->s_flags & MS_RDONLY)
-+ mnt_flags |= MNT_LOCK_READONLY;
-+
- /* Verify the mount flags are equal to or more permissive
- * than the proposed new mount.
- */
-@@ -3271,7 +3277,7 @@ static bool fs_fully_visible(struct file_system_type *type, int *new_mnt_flags)
- list_for_each_entry(child, &mnt->mnt_mounts, mnt_child) {
- struct inode *inode = child->mnt_mountpoint->d_inode;
- /* Only worry about locked mounts */
-- if (!(mnt_flags & MNT_LOCKED))
-+ if (!(child->mnt.mnt_flags & MNT_LOCKED))
- continue;
- /* Is the directory permanetly empty? */
- if (!is_empty_dir_inode(inode))
-diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
-index 33eb817..a7dd1fe 100644
---- a/fs/nfs/dir.c
-+++ b/fs/nfs/dir.c
-@@ -1527,9 +1527,9 @@ int nfs_atomic_open(struct inode *dir, struct dentry *dentry,
- err = PTR_ERR(inode);
- trace_nfs_atomic_open_exit(dir, ctx, open_flags, err);
- put_nfs_open_context(ctx);
-+ d_drop(dentry);
- switch (err) {
- case -ENOENT:
-- d_drop(dentry);
- d_add(dentry, NULL);
- nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
- break;
-diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
-index 327b8c3..de2523f 100644
---- a/fs/nfs/nfs4proc.c
-+++ b/fs/nfs/nfs4proc.c
-@@ -2860,12 +2860,11 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
- call_close |= is_wronly;
- else if (is_wronly)
- calldata->arg.fmode |= FMODE_WRITE;
-+ if (calldata->arg.fmode != (FMODE_READ|FMODE_WRITE))
-+ call_close |= is_rdwr;
- } else if (is_rdwr)
- calldata->arg.fmode |= FMODE_READ|FMODE_WRITE;
-
-- if (calldata->arg.fmode == 0)
-- call_close |= is_rdwr;
--
- if (!nfs4_valid_open_stateid(state))
- call_close = 0;
- spin_unlock(&state->owner->so_lock);
-diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c
-index 776dccb..dcb7000 100644
---- a/fs/nfs/pnfs_nfs.c
-+++ b/fs/nfs/pnfs_nfs.c
-@@ -247,7 +247,11 @@ void pnfs_fetch_commit_bucket_list(struct list_head *pages,
- }
-
- /* Helper function for pnfs_generic_commit_pagelist to catch an empty
-- * page list. This can happen when two commits race. */
-+ * page list. This can happen when two commits race.
-+ *
-+ * This must be called instead of nfs_init_commit - call one or the other, but
-+ * not both!
-+ */
- static bool
- pnfs_generic_commit_cancel_empty_pagelist(struct list_head *pages,
- struct nfs_commit_data *data,
-@@ -256,7 +260,11 @@ pnfs_generic_commit_cancel_empty_pagelist(struct list_head *pages,
- if (list_empty(pages)) {
- if (atomic_dec_and_test(&cinfo->mds->rpcs_out))
- wake_up_atomic_t(&cinfo->mds->rpcs_out);
-- nfs_commitdata_release(data);
-+ /* don't call nfs_commitdata_release - it tries to put
-+ * the open_context which is not acquired until nfs_init_commit
-+ * which has not been called on @data */
-+ WARN_ON_ONCE(data->context);
-+ nfs_commit_free(data);
- return true;
- }
-
-diff --git a/fs/nfs/read.c b/fs/nfs/read.c
-index 6776d7a..572e5b3 100644
---- a/fs/nfs/read.c
-+++ b/fs/nfs/read.c
-@@ -367,13 +367,13 @@ readpage_async_filler(void *data, struct page *page)
- nfs_list_remove_request(new);
- nfs_readpage_release(new);
- error = desc->pgio->pg_error;
-- goto out_unlock;
-+ goto out;
- }
- return 0;
- out_error:
- error = PTR_ERR(new);
--out_unlock:
- unlock_page(page);
-+out:
- return error;
- }
-
-diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c
-index 1580ea6..d08cd88 100644
---- a/fs/nfsd/nfs2acl.c
-+++ b/fs/nfsd/nfs2acl.c
-@@ -104,22 +104,21 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp,
- goto out;
-
- inode = d_inode(fh->fh_dentry);
-- if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) {
-- error = -EOPNOTSUPP;
-- goto out_errno;
-- }
-
- error = fh_want_write(fh);
- if (error)
- goto out_errno;
-
-- error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS);
-+ fh_lock(fh);
-+
-+ error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access);
- if (error)
-- goto out_drop_write;
-- error = inode->i_op->set_acl(inode, argp->acl_default,
-- ACL_TYPE_DEFAULT);
-+ goto out_drop_lock;
-+ error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default);
- if (error)
-- goto out_drop_write;
-+ goto out_drop_lock;
-+
-+ fh_unlock(fh);
-
- fh_drop_write(fh);
-
-@@ -131,7 +130,8 @@ out:
- posix_acl_release(argp->acl_access);
- posix_acl_release(argp->acl_default);
- return nfserr;
--out_drop_write:
-+out_drop_lock:
-+ fh_unlock(fh);
- fh_drop_write(fh);
- out_errno:
- nfserr = nfserrno(error);
-diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c
-index 01df4cd..0c89034 100644
---- a/fs/nfsd/nfs3acl.c
-+++ b/fs/nfsd/nfs3acl.c
-@@ -95,22 +95,20 @@ static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp,
- goto out;
-
- inode = d_inode(fh->fh_dentry);
-- if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) {
-- error = -EOPNOTSUPP;
-- goto out_errno;
-- }
-
- error = fh_want_write(fh);
- if (error)
- goto out_errno;
-
-- error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS);
-+ fh_lock(fh);
-+
-+ error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access);
- if (error)
-- goto out_drop_write;
-- error = inode->i_op->set_acl(inode, argp->acl_default,
-- ACL_TYPE_DEFAULT);
-+ goto out_drop_lock;
-+ error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default);
-
--out_drop_write:
-+out_drop_lock:
-+ fh_unlock(fh);
- fh_drop_write(fh);
- out_errno:
- nfserr = nfserrno(error);
-diff --git a/fs/nfsd/nfs4acl.c b/fs/nfsd/nfs4acl.c
-index 6adabd6..71292a0 100644
---- a/fs/nfsd/nfs4acl.c
-+++ b/fs/nfsd/nfs4acl.c
-@@ -770,9 +770,6 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp,
- dentry = fhp->fh_dentry;
- inode = d_inode(dentry);
-
-- if (!inode->i_op->set_acl || !IS_POSIXACL(inode))
-- return nfserr_attrnotsupp;
--
- if (S_ISDIR(inode->i_mode))
- flags = NFS4_ACL_DIR;
-
-@@ -782,16 +779,19 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp,
- if (host_error < 0)
- goto out_nfserr;
-
-- host_error = inode->i_op->set_acl(inode, pacl, ACL_TYPE_ACCESS);
-+ fh_lock(fhp);
-+
-+ host_error = set_posix_acl(inode, ACL_TYPE_ACCESS, pacl);
- if (host_error < 0)
-- goto out_release;
-+ goto out_drop_lock;
-
- if (S_ISDIR(inode->i_mode)) {
-- host_error = inode->i_op->set_acl(inode, dpacl,
-- ACL_TYPE_DEFAULT);
-+ host_error = set_posix_acl(inode, ACL_TYPE_DEFAULT, dpacl);
- }
-
--out_release:
-+out_drop_lock:
-+ fh_unlock(fhp);
-+
- posix_acl_release(pacl);
- posix_acl_release(dpacl);
- out_nfserr:
-diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
-index 7389cb1..04c68d9 100644
---- a/fs/nfsd/nfs4callback.c
-+++ b/fs/nfsd/nfs4callback.c
-@@ -710,22 +710,6 @@ static struct rpc_cred *get_backchannel_cred(struct nfs4_client *clp, struct rpc
- }
- }
-
--static struct rpc_clnt *create_backchannel_client(struct rpc_create_args *args)
--{
-- struct rpc_xprt *xprt;
--
-- if (args->protocol != XPRT_TRANSPORT_BC_TCP)
-- return rpc_create(args);
--
-- xprt = args->bc_xprt->xpt_bc_xprt;
-- if (xprt) {
-- xprt_get(xprt);
-- return rpc_create_xprt(args, xprt);
-- }
--
-- return rpc_create(args);
--}
--
- static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *conn, struct nfsd4_session *ses)
- {
- int maxtime = max_cb_time(clp->net);
-@@ -768,7 +752,7 @@ static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *c
- args.authflavor = ses->se_cb_sec.flavor;
- }
- /* Create RPC client */
-- client = create_backchannel_client(&args);
-+ client = rpc_create(&args);
- if (IS_ERR(client)) {
- dprintk("NFSD: couldn't create callback client: %ld\n",
- PTR_ERR(client));
-diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
-index 0462eed..9e04e49 100644
---- a/fs/nfsd/nfs4state.c
-+++ b/fs/nfsd/nfs4state.c
-@@ -3487,6 +3487,10 @@ init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_file *fp,
- struct nfs4_openowner *oo = open->op_openowner;
- struct nfs4_ol_stateid *retstp = NULL;
-
-+ /* We are moving these outside of the spinlocks to avoid the warnings */
-+ mutex_init(&stp->st_mutex);
-+ mutex_lock(&stp->st_mutex);
-+
- spin_lock(&oo->oo_owner.so_client->cl_lock);
- spin_lock(&fp->fi_lock);
-
-@@ -3502,13 +3506,17 @@ init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_file *fp,
- stp->st_access_bmap = 0;
- stp->st_deny_bmap = 0;
- stp->st_openstp = NULL;
-- init_rwsem(&stp->st_rwsem);
- list_add(&stp->st_perstateowner, &oo->oo_owner.so_stateids);
- list_add(&stp->st_perfile, &fp->fi_stateids);
-
- out_unlock:
- spin_unlock(&fp->fi_lock);
- spin_unlock(&oo->oo_owner.so_client->cl_lock);
-+ if (retstp) {
-+ mutex_lock(&retstp->st_mutex);
-+ /* Not that we need to, just for neatness */
-+ mutex_unlock(&stp->st_mutex);
-+ }
- return retstp;
- }
-
-@@ -4335,32 +4343,34 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
- */
- if (stp) {
- /* Stateid was found, this is an OPEN upgrade */
-- down_read(&stp->st_rwsem);
-+ mutex_lock(&stp->st_mutex);
- status = nfs4_upgrade_open(rqstp, fp, current_fh, stp, open);
- if (status) {
-- up_read(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- goto out;
- }
- } else {
- stp = open->op_stp;
- open->op_stp = NULL;
-+ /*
-+ * init_open_stateid() either returns a locked stateid
-+ * it found, or initializes and locks the new one we passed in
-+ */
- swapstp = init_open_stateid(stp, fp, open);
- if (swapstp) {
- nfs4_put_stid(&stp->st_stid);
- stp = swapstp;
-- down_read(&stp->st_rwsem);
- status = nfs4_upgrade_open(rqstp, fp, current_fh,
- stp, open);
- if (status) {
-- up_read(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- goto out;
- }
- goto upgrade_out;
- }
-- down_read(&stp->st_rwsem);
- status = nfs4_get_vfs_file(rqstp, fp, current_fh, stp, open);
- if (status) {
-- up_read(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- release_open_stateid(stp);
- goto out;
- }
-@@ -4372,7 +4382,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
- }
- upgrade_out:
- nfs4_inc_and_copy_stateid(&open->op_stateid, &stp->st_stid);
-- up_read(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
-
- if (nfsd4_has_session(&resp->cstate)) {
- if (open->op_deleg_want & NFS4_SHARE_WANT_NO_DELEG) {
-@@ -4983,12 +4993,12 @@ static __be32 nfs4_seqid_op_checks(struct nfsd4_compound_state *cstate, stateid_
- * revoked delegations are kept only for free_stateid.
- */
- return nfserr_bad_stateid;
-- down_write(&stp->st_rwsem);
-+ mutex_lock(&stp->st_mutex);
- status = check_stateid_generation(stateid, &stp->st_stid.sc_stateid, nfsd4_has_session(cstate));
- if (status == nfs_ok)
- status = nfs4_check_fh(current_fh, &stp->st_stid);
- if (status != nfs_ok)
-- up_write(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- return status;
- }
-
-@@ -5036,7 +5046,7 @@ static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cs
- return status;
- oo = openowner(stp->st_stateowner);
- if (!(oo->oo_flags & NFS4_OO_CONFIRMED)) {
-- up_write(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- nfs4_put_stid(&stp->st_stid);
- return nfserr_bad_stateid;
- }
-@@ -5068,12 +5078,12 @@ nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
- oo = openowner(stp->st_stateowner);
- status = nfserr_bad_stateid;
- if (oo->oo_flags & NFS4_OO_CONFIRMED) {
-- up_write(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- goto put_stateid;
- }
- oo->oo_flags |= NFS4_OO_CONFIRMED;
- nfs4_inc_and_copy_stateid(&oc->oc_resp_stateid, &stp->st_stid);
-- up_write(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- dprintk("NFSD: %s: success, seqid=%d stateid=" STATEID_FMT "\n",
- __func__, oc->oc_seqid, STATEID_VAL(&stp->st_stid.sc_stateid));
-
-@@ -5149,7 +5159,7 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
- nfs4_inc_and_copy_stateid(&od->od_stateid, &stp->st_stid);
- status = nfs_ok;
- put_stateid:
-- up_write(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- nfs4_put_stid(&stp->st_stid);
- out:
- nfsd4_bump_seqid(cstate, status);
-@@ -5202,7 +5212,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
- if (status)
- goto out;
- nfs4_inc_and_copy_stateid(&close->cl_stateid, &stp->st_stid);
-- up_write(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
-
- nfsd4_close_open_stateid(stp);
-
-@@ -5428,7 +5438,7 @@ init_lock_stateid(struct nfs4_ol_stateid *stp, struct nfs4_lockowner *lo,
- stp->st_access_bmap = 0;
- stp->st_deny_bmap = open_stp->st_deny_bmap;
- stp->st_openstp = open_stp;
-- init_rwsem(&stp->st_rwsem);
-+ mutex_init(&stp->st_mutex);
- list_add(&stp->st_locks, &open_stp->st_locks);
- list_add(&stp->st_perstateowner, &lo->lo_owner.so_stateids);
- spin_lock(&fp->fi_lock);
-@@ -5597,7 +5607,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
- &open_stp, nn);
- if (status)
- goto out;
-- up_write(&open_stp->st_rwsem);
-+ mutex_unlock(&open_stp->st_mutex);
- open_sop = openowner(open_stp->st_stateowner);
- status = nfserr_bad_stateid;
- if (!same_clid(&open_sop->oo_owner.so_client->cl_clientid,
-@@ -5606,7 +5616,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
- status = lookup_or_create_lock_state(cstate, open_stp, lock,
- &lock_stp, &new);
- if (status == nfs_ok)
-- down_write(&lock_stp->st_rwsem);
-+ mutex_lock(&lock_stp->st_mutex);
- } else {
- status = nfs4_preprocess_seqid_op(cstate,
- lock->lk_old_lock_seqid,
-@@ -5710,7 +5720,7 @@ out:
- seqid_mutating_err(ntohl(status)))
- lock_sop->lo_owner.so_seqid++;
-
-- up_write(&lock_stp->st_rwsem);
-+ mutex_unlock(&lock_stp->st_mutex);
-
- /*
- * If this is a new, never-before-used stateid, and we are
-@@ -5880,7 +5890,7 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
- fput:
- fput(filp);
- put_stateid:
-- up_write(&stp->st_rwsem);
-+ mutex_unlock(&stp->st_mutex);
- nfs4_put_stid(&stp->st_stid);
- out:
- nfsd4_bump_seqid(cstate, status);
-diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
-index c050c53..c89d7b5 100644
---- a/fs/nfsd/state.h
-+++ b/fs/nfsd/state.h
-@@ -535,7 +535,7 @@ struct nfs4_ol_stateid {
- unsigned char st_access_bmap;
- unsigned char st_deny_bmap;
- struct nfs4_ol_stateid *st_openstp;
-- struct rw_semaphore st_rwsem;
-+ struct mutex st_mutex;
- };
-
- static inline struct nfs4_ol_stateid *openlockstateid(struct nfs4_stid *s)
-diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
-index b3fc0a3..fb35aa2 100644
---- a/fs/overlayfs/dir.c
-+++ b/fs/overlayfs/dir.c
-@@ -511,6 +511,7 @@ static int ovl_remove_and_whiteout(struct dentry *dentry, bool is_dir)
- struct dentry *upper;
- struct dentry *opaquedir = NULL;
- int err;
-+ int flags = 0;
-
- if (WARN_ON(!workdir))
- return -EROFS;
-@@ -540,46 +541,39 @@ static int ovl_remove_and_whiteout(struct dentry *dentry, bool is_dir)
- if (err)
- goto out_dput;
-
-- whiteout = ovl_whiteout(workdir, dentry);
-- err = PTR_ERR(whiteout);
-- if (IS_ERR(whiteout))
-+ upper = lookup_one_len(dentry->d_name.name, upperdir,
-+ dentry->d_name.len);
-+ err = PTR_ERR(upper);
-+ if (IS_ERR(upper))
- goto out_unlock;
-
-- upper = ovl_dentry_upper(dentry);
-- if (!upper) {
-- upper = lookup_one_len(dentry->d_name.name, upperdir,
-- dentry->d_name.len);
-- err = PTR_ERR(upper);
-- if (IS_ERR(upper))
-- goto kill_whiteout;
--
-- err = ovl_do_rename(wdir, whiteout, udir, upper, 0);
-- dput(upper);
-- if (err)
-- goto kill_whiteout;
-- } else {
-- int flags = 0;
-+ err = -ESTALE;
-+ if ((opaquedir && upper != opaquedir) ||
-+ (!opaquedir && ovl_dentry_upper(dentry) &&
-+ upper != ovl_dentry_upper(dentry))) {
-+ goto out_dput_upper;
-+ }
-
-- if (opaquedir)
-- upper = opaquedir;
-- err = -ESTALE;
-- if (upper->d_parent != upperdir)
-- goto kill_whiteout;
-+ whiteout = ovl_whiteout(workdir, dentry);
-+ err = PTR_ERR(whiteout);
-+ if (IS_ERR(whiteout))
-+ goto out_dput_upper;
-
-- if (is_dir)
-- flags |= RENAME_EXCHANGE;
-+ if (d_is_dir(upper))
-+ flags = RENAME_EXCHANGE;
-
-- err = ovl_do_rename(wdir, whiteout, udir, upper, flags);
-- if (err)
-- goto kill_whiteout;
-+ err = ovl_do_rename(wdir, whiteout, udir, upper, flags);
-+ if (err)
-+ goto kill_whiteout;
-+ if (flags)
-+ ovl_cleanup(wdir, upper);
-
-- if (is_dir)
-- ovl_cleanup(wdir, upper);
-- }
- ovl_dentry_version_inc(dentry->d_parent);
- out_d_drop:
- d_drop(dentry);
- dput(whiteout);
-+out_dput_upper:
-+ dput(upper);
- out_unlock:
- unlock_rename(workdir, upperdir);
- out_dput:
-diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
-index a4ff5d0..d46fa60 100644
---- a/fs/overlayfs/inode.c
-+++ b/fs/overlayfs/inode.c
-@@ -59,16 +59,40 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
- if (err)
- goto out;
-
-+ if (attr->ia_valid & ATTR_SIZE) {
-+ struct inode *realinode = d_inode(ovl_dentry_real(dentry));
-+
-+ err = -ETXTBSY;
-+ if (atomic_read(&realinode->i_writecount) < 0)
-+ goto out_drop_write;
-+ }
-+
- err = ovl_copy_up(dentry);
- if (!err) {
-+ struct inode *winode = NULL;
-+
- upperdentry = ovl_dentry_upper(dentry);
-
-+ if (attr->ia_valid & ATTR_SIZE) {
-+ winode = d_inode(upperdentry);
-+ err = get_write_access(winode);
-+ if (err)
-+ goto out_drop_write;
-+ }
-+
-+ if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID))
-+ attr->ia_valid &= ~ATTR_MODE;
-+
- inode_lock(upperdentry->d_inode);
- err = notify_change(upperdentry, attr, NULL);
- if (!err)
- ovl_copyattr(upperdentry->d_inode, dentry->d_inode);
- inode_unlock(upperdentry->d_inode);
-+
-+ if (winode)
-+ put_write_access(winode);
- }
-+out_drop_write:
- ovl_drop_write(dentry);
- out:
- return err;
-@@ -121,16 +145,18 @@ int ovl_permission(struct inode *inode, int mask)
-
- err = vfs_getattr(&realpath, &stat);
- if (err)
-- return err;
-+ goto out_dput;
-
-+ err = -ESTALE;
- if ((stat.mode ^ inode->i_mode) & S_IFMT)
-- return -ESTALE;
-+ goto out_dput;
-
- inode->i_mode = stat.mode;
- inode->i_uid = stat.uid;
- inode->i_gid = stat.gid;
-
-- return generic_permission(inode, mask);
-+ err = generic_permission(inode, mask);
-+ goto out_dput;
- }
-
- /* Careful in RCU walk mode */
-@@ -400,12 +426,11 @@ struct inode *ovl_new_inode(struct super_block *sb, umode_t mode,
- if (!inode)
- return NULL;
-
-- mode &= S_IFMT;
--
- inode->i_ino = get_next_ino();
- inode->i_mode = mode;
- inode->i_flags |= S_NOATIME | S_NOCMTIME;
-
-+ mode &= S_IFMT;
- switch (mode) {
- case S_IFDIR:
- inode->i_private = oe;
-diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h
-index 6a7090f..294ccc0 100644
---- a/fs/overlayfs/overlayfs.h
-+++ b/fs/overlayfs/overlayfs.h
-@@ -185,6 +185,7 @@ static inline void ovl_copyattr(struct inode *from, struct inode *to)
- {
- to->i_uid = from->i_uid;
- to->i_gid = from->i_gid;
-+ to->i_mode = from->i_mode;
- }
-
- /* dir.c */
-diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
-index 791235e..7952a50f 100644
---- a/fs/overlayfs/super.c
-+++ b/fs/overlayfs/super.c
-@@ -1064,16 +1064,21 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
- /*
- * Upper should support d_type, else whiteouts are visible.
- * Given workdir and upper are on same fs, we can do
-- * iterate_dir() on workdir.
-+ * iterate_dir() on workdir. This check requires successful
-+ * creation of workdir in previous step.
- */
-- err = ovl_check_d_type_supported(&workpath);
-- if (err < 0)
-- goto out_put_workdir;
-+ if (ufs->workdir) {
-+ err = ovl_check_d_type_supported(&workpath);
-+ if (err < 0)
-+ goto out_put_workdir;
-
-- if (!err) {
-- pr_err("overlayfs: upper fs needs to support d_type.\n");
-- err = -EINVAL;
-- goto out_put_workdir;
-+ /*
-+ * We allowed this configuration and don't want to
-+ * break users over kernel upgrade. So warn instead
-+ * of erroring out.
-+ */
-+ if (!err)
-+ pr_warn("overlayfs: upper fs needs to support d_type.\n");
- }
- }
-
-diff --git a/fs/posix_acl.c b/fs/posix_acl.c
-index 711dd51..e11ea5f 100644
---- a/fs/posix_acl.c
-+++ b/fs/posix_acl.c
-@@ -786,39 +786,43 @@ posix_acl_xattr_get(const struct xattr_handler *handler,
- return error;
- }
-
--static int
--posix_acl_xattr_set(const struct xattr_handler *handler,
-- struct dentry *dentry, const char *name,
-- const void *value, size_t size, int flags)
-+int
-+set_posix_acl(struct inode *inode, int type, struct posix_acl *acl)
- {
-- struct inode *inode = d_backing_inode(dentry);
-- struct posix_acl *acl = NULL;
-- int ret;
--
- if (!IS_POSIXACL(inode))
- return -EOPNOTSUPP;
- if (!inode->i_op->set_acl)
- return -EOPNOTSUPP;
-
-- if (handler->flags == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode))
-- return value ? -EACCES : 0;
-+ if (type == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode))
-+ return acl ? -EACCES : 0;
- if (!inode_owner_or_capable(inode))
- return -EPERM;
-
-+ if (acl) {
-+ int ret = posix_acl_valid(acl);
-+ if (ret)
-+ return ret;
-+ }
-+ return inode->i_op->set_acl(inode, acl, type);
-+}
-+EXPORT_SYMBOL(set_posix_acl);
-+
-+static int
-+posix_acl_xattr_set(const struct xattr_handler *handler,
-+ struct dentry *dentry, const char *name,
-+ const void *value, size_t size, int flags)
-+{
-+ struct inode *inode = d_backing_inode(dentry);
-+ struct posix_acl *acl = NULL;
-+ int ret;
-+
- if (value) {
- acl = posix_acl_from_xattr(&init_user_ns, value, size);
- if (IS_ERR(acl))
- return PTR_ERR(acl);
--
-- if (acl) {
-- ret = posix_acl_valid(acl);
-- if (ret)
-- goto out;
-- }
- }
--
-- ret = inode->i_op->set_acl(inode, acl, handler->flags);
--out:
-+ ret = set_posix_acl(inode, handler->flags, acl);
- posix_acl_release(acl);
- return ret;
- }
-diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c
-index 446753d..5b5ec8d 100644
---- a/fs/ubifs/file.c
-+++ b/fs/ubifs/file.c
-@@ -52,6 +52,7 @@
- #include "ubifs.h"
- #include <linux/mount.h>
- #include <linux/slab.h>
-+#include <linux/migrate.h>
-
- static int read_block(struct inode *inode, void *addr, unsigned int block,
- struct ubifs_data_node *dn)
-@@ -1452,6 +1453,26 @@ static int ubifs_set_page_dirty(struct page *page)
- return ret;
- }
-
-+#ifdef CONFIG_MIGRATION
-+static int ubifs_migrate_page(struct address_space *mapping,
-+ struct page *newpage, struct page *page, enum migrate_mode mode)
-+{
-+ int rc;
-+
-+ rc = migrate_page_move_mapping(mapping, newpage, page, NULL, mode, 0);
-+ if (rc != MIGRATEPAGE_SUCCESS)
-+ return rc;
-+
-+ if (PagePrivate(page)) {
-+ ClearPagePrivate(page);
-+ SetPagePrivate(newpage);
-+ }
-+
-+ migrate_page_copy(newpage, page);
-+ return MIGRATEPAGE_SUCCESS;
-+}
-+#endif
-+
- static int ubifs_releasepage(struct page *page, gfp_t unused_gfp_flags)
- {
- /*
-@@ -1591,6 +1612,9 @@ const struct address_space_operations ubifs_file_address_operations = {
- .write_end = ubifs_write_end,
- .invalidatepage = ubifs_invalidatepage,
- .set_page_dirty = ubifs_set_page_dirty,
-+#ifdef CONFIG_MIGRATION
-+ .migratepage = ubifs_migrate_page,
-+#endif
- .releasepage = ubifs_releasepage,
- };
-
-diff --git a/include/asm-generic/qspinlock.h b/include/asm-generic/qspinlock.h
-index 6bd0570..05f05f1 100644
---- a/include/asm-generic/qspinlock.h
-+++ b/include/asm-generic/qspinlock.h
-@@ -22,37 +22,33 @@
- #include <asm-generic/qspinlock_types.h>
-
- /**
-+ * queued_spin_unlock_wait - wait until the _current_ lock holder releases the lock
-+ * @lock : Pointer to queued spinlock structure
-+ *
-+ * There is a very slight possibility of live-lock if the lockers keep coming
-+ * and the waiter is just unfortunate enough to not see any unlock state.
-+ */
-+#ifndef queued_spin_unlock_wait
-+extern void queued_spin_unlock_wait(struct qspinlock *lock);
-+#endif
-+
-+/**
- * queued_spin_is_locked - is the spinlock locked?
- * @lock: Pointer to queued spinlock structure
- * Return: 1 if it is locked, 0 otherwise
- */
-+#ifndef queued_spin_is_locked
- static __always_inline int queued_spin_is_locked(struct qspinlock *lock)
- {
- /*
-- * queued_spin_lock_slowpath() can ACQUIRE the lock before
-- * issuing the unordered store that sets _Q_LOCKED_VAL.
-- *
-- * See both smp_cond_acquire() sites for more detail.
-- *
-- * This however means that in code like:
-- *
-- * spin_lock(A) spin_lock(B)
-- * spin_unlock_wait(B) spin_is_locked(A)
-- * do_something() do_something()
-- *
-- * Both CPUs can end up running do_something() because the store
-- * setting _Q_LOCKED_VAL will pass through the loads in
-- * spin_unlock_wait() and/or spin_is_locked().
-+ * See queued_spin_unlock_wait().
- *
-- * Avoid this by issuing a full memory barrier between the spin_lock()
-- * and the loads in spin_unlock_wait() and spin_is_locked().
-- *
-- * Note that regular mutual exclusion doesn't care about this
-- * delayed store.
-+ * Any !0 state indicates it is locked, even if _Q_LOCKED_VAL
-+ * isn't immediately observable.
- */
-- smp_mb();
-- return atomic_read(&lock->val) & _Q_LOCKED_MASK;
-+ return atomic_read(&lock->val);
- }
-+#endif
-
- /**
- * queued_spin_value_unlocked - is the spinlock structure unlocked?
-@@ -122,21 +118,6 @@ static __always_inline void queued_spin_unlock(struct qspinlock *lock)
- }
- #endif
-
--/**
-- * queued_spin_unlock_wait - wait until current lock holder releases the lock
-- * @lock : Pointer to queued spinlock structure
-- *
-- * There is a very slight possibility of live-lock if the lockers keep coming
-- * and the waiter is just unfortunate enough to not see any unlock state.
-- */
--static inline void queued_spin_unlock_wait(struct qspinlock *lock)
--{
-- /* See queued_spin_is_locked() */
-- smp_mb();
-- while (atomic_read(&lock->val) & _Q_LOCKED_MASK)
-- cpu_relax();
--}
--
- #ifndef virt_spin_lock
- static __always_inline bool virt_spin_lock(struct qspinlock *lock)
- {
-diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h
-index 055a08d..a74c49d 100644
---- a/include/drm/ttm/ttm_bo_api.h
-+++ b/include/drm/ttm/ttm_bo_api.h
-@@ -316,6 +316,20 @@ ttm_bo_reference(struct ttm_buffer_object *bo)
- */
- extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy,
- bool interruptible, bool no_wait);
-+
-+/**
-+ * ttm_bo_mem_compat - Check if proposed placement is compatible with a bo
-+ *
-+ * @placement: Return immediately if buffer is busy.
-+ * @mem: The struct ttm_mem_reg indicating the region where the bo resides
-+ * @new_flags: Describes compatible placement found
-+ *
-+ * Returns true if the placement is compatible
-+ */
-+extern bool ttm_bo_mem_compat(struct ttm_placement *placement,
-+ struct ttm_mem_reg *mem,
-+ uint32_t *new_flags);
-+
- /**
- * ttm_bo_validate
- *
-diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
-index 786ad32..07b83d3 100644
---- a/include/linux/cpuidle.h
-+++ b/include/linux/cpuidle.h
-@@ -152,6 +152,8 @@ extern void cpuidle_disable_device(struct cpuidle_device *dev);
- extern int cpuidle_play_dead(void);
-
- extern struct cpuidle_driver *cpuidle_get_cpu_driver(struct cpuidle_device *dev);
-+static inline struct cpuidle_device *cpuidle_get_device(void)
-+{return __this_cpu_read(cpuidle_devices); }
- #else
- static inline void disable_cpuidle(void) { }
- static inline bool cpuidle_not_available(struct cpuidle_driver *drv,
-@@ -187,6 +189,7 @@ static inline void cpuidle_disable_device(struct cpuidle_device *dev) { }
- static inline int cpuidle_play_dead(void) {return -ENODEV; }
- static inline struct cpuidle_driver *cpuidle_get_cpu_driver(
- struct cpuidle_device *dev) {return NULL; }
-+static inline struct cpuidle_device *cpuidle_get_device(void) {return NULL; }
- #endif
-
- #if defined(CONFIG_CPU_IDLE) && defined(CONFIG_SUSPEND)
-diff --git a/include/linux/dcache.h b/include/linux/dcache.h
-index 7e9422c..ad5d582 100644
---- a/include/linux/dcache.h
-+++ b/include/linux/dcache.h
-@@ -576,5 +576,17 @@ static inline struct inode *vfs_select_inode(struct dentry *dentry,
- return inode;
- }
-
-+/**
-+ * d_real_inode - Return the real inode
-+ * @dentry: The dentry to query
-+ *
-+ * If dentry is on an union/overlay, then return the underlying, real inode.
-+ * Otherwise return d_inode().
-+ */
-+static inline struct inode *d_real_inode(struct dentry *dentry)
-+{
-+ return d_backing_inode(d_real(dentry));
-+}
-+
-
- #endif /* __LINUX_DCACHE_H */
-diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
-index 0536524..6890446 100644
---- a/include/linux/jump_label.h
-+++ b/include/linux/jump_label.h
-@@ -117,13 +117,18 @@ struct module;
-
- #include <linux/atomic.h>
-
-+#ifdef HAVE_JUMP_LABEL
-+
- static inline int static_key_count(struct static_key *key)
- {
-- return atomic_read(&key->enabled);
-+ /*
-+ * -1 means the first static_key_slow_inc() is in progress.
-+ * static_key_enabled() must return true, so return 1 here.
-+ */
-+ int n = atomic_read(&key->enabled);
-+ return n >= 0 ? n : 1;
- }
-
--#ifdef HAVE_JUMP_LABEL
--
- #define JUMP_TYPE_FALSE 0UL
- #define JUMP_TYPE_TRUE 1UL
- #define JUMP_TYPE_MASK 1UL
-@@ -162,6 +167,11 @@ extern void jump_label_apply_nops(struct module *mod);
-
- #else /* !HAVE_JUMP_LABEL */
-
-+static inline int static_key_count(struct static_key *key)
-+{
-+ return atomic_read(&key->enabled);
-+}
-+
- static __always_inline void jump_label_init(void)
- {
- static_key_initialized = true;
-diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index 15d0df9..794b924 100644
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -1062,6 +1062,7 @@ __skb_set_sw_hash(struct sk_buff *skb, __u32 hash, bool is_l4)
- }
-
- void __skb_get_hash(struct sk_buff *skb);
-+u32 __skb_get_hash_symmetric(struct sk_buff *skb);
- u32 skb_get_poff(const struct sk_buff *skb);
- u32 __skb_get_poff(const struct sk_buff *skb, void *data,
- const struct flow_keys *keys, int hlen);
-@@ -2860,6 +2861,25 @@ static inline void skb_postpush_rcsum(struct sk_buff *skb,
- }
-
- /**
-+ * skb_push_rcsum - push skb and update receive checksum
-+ * @skb: buffer to update
-+ * @len: length of data pulled
-+ *
-+ * This function performs an skb_push on the packet and updates
-+ * the CHECKSUM_COMPLETE checksum. It should be used on
-+ * receive path processing instead of skb_push unless you know
-+ * that the checksum difference is zero (e.g., a valid IP header)
-+ * or you are setting ip_summed to CHECKSUM_NONE.
-+ */
-+static inline unsigned char *skb_push_rcsum(struct sk_buff *skb,
-+ unsigned int len)
-+{
-+ skb_push(skb, len);
-+ skb_postpush_rcsum(skb, skb->data, len);
-+ return skb->data;
-+}
-+
-+/**
- * pskb_trim_rcsum - trim received skb and update checksum
- * @skb: buffer to trim
- * @len: new length
-diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
-index 9a7ddba..14d70f5 100644
---- a/include/linux/sunrpc/clnt.h
-+++ b/include/linux/sunrpc/clnt.h
-@@ -137,8 +137,6 @@ struct rpc_create_args {
- #define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9)
-
- struct rpc_clnt *rpc_create(struct rpc_create_args *args);
--struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
-- struct rpc_xprt *xprt);
- struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
- const struct rpc_program *, u32);
- struct rpc_clnt *rpc_clone_client(struct rpc_clnt *);
-diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
-index b7dabc4..79ba508 100644
---- a/include/linux/sunrpc/svc_xprt.h
-+++ b/include/linux/sunrpc/svc_xprt.h
-@@ -84,6 +84,7 @@ struct svc_xprt {
-
- struct net *xpt_net;
- struct rpc_xprt *xpt_bc_xprt; /* NFSv4.1 backchannel */
-+ struct rpc_xprt_switch *xpt_bc_xps; /* NFSv4.1 backchannel */
- };
-
- static inline void unregister_xpt_user(struct svc_xprt *xpt, struct svc_xpt_user *u)
-diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
-index fb0d212..9f51e1d 100644
---- a/include/linux/sunrpc/xprt.h
-+++ b/include/linux/sunrpc/xprt.h
-@@ -296,6 +296,7 @@ struct xprt_create {
- size_t addrlen;
- const char *servername;
- struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */
-+ struct rpc_xprt_switch *bc_xps;
- unsigned int flags;
- };
-
-diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h
-index 966889a..e479033 100644
---- a/include/linux/usb/ehci_def.h
-+++ b/include/linux/usb/ehci_def.h
-@@ -180,11 +180,11 @@ struct ehci_regs {
- * PORTSCx
- */
- /* HOSTPC: offset 0x84 */
-- u32 hostpc[1]; /* HOSTPC extension */
-+ u32 hostpc[0]; /* HOSTPC extension */
- #define HOSTPC_PHCD (1<<22) /* Phy clock disable */
- #define HOSTPC_PSPD (3<<25) /* Port speed detection */
-
-- u32 reserved5[16];
-+ u32 reserved5[17];
-
- /* USBMODE_EX: offset 0xc8 */
- u32 usbmode_ex; /* USB Device mode extension */
-diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
-index fb2cef4..b8334a6 100644
---- a/include/rdma/ib_verbs.h
-+++ b/include/rdma/ib_verbs.h
-@@ -217,7 +217,7 @@ enum ib_device_cap_flags {
- IB_DEVICE_CROSS_CHANNEL = (1 << 27),
- IB_DEVICE_MANAGED_FLOW_STEERING = (1 << 29),
- IB_DEVICE_SIGNATURE_HANDOVER = (1 << 30),
-- IB_DEVICE_ON_DEMAND_PAGING = (1 << 31),
-+ IB_DEVICE_ON_DEMAND_PAGING = (1ULL << 31),
- IB_DEVICE_SG_GAPS_REG = (1ULL << 32),
- IB_DEVICE_VIRTUAL_FUNCTION = ((u64)1 << 33),
- };
-diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
-index a869655..6ee9d97 100644
---- a/include/rdma/rdma_vt.h
-+++ b/include/rdma/rdma_vt.h
-@@ -203,7 +203,9 @@ struct rvt_driver_provided {
-
- /*
- * Allocate a private queue pair data structure for driver specific
-- * information which is opaque to rdmavt.
-+ * information which is opaque to rdmavt. Errors are returned via
-+ * ERR_PTR(err). The driver is free to return NULL or a valid
-+ * pointer.
- */
- void * (*qp_priv_alloc)(struct rvt_dev_info *rdi, struct rvt_qp *qp,
- gfp_t gfp);
-diff --git a/kernel/futex.c b/kernel/futex.c
-index c20f06f..6555d54 100644
---- a/kernel/futex.c
-+++ b/kernel/futex.c
-@@ -469,7 +469,7 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
- {
- unsigned long address = (unsigned long)uaddr;
- struct mm_struct *mm = current->mm;
-- struct page *page;
-+ struct page *page, *tail;
- struct address_space *mapping;
- int err, ro = 0;
-
-@@ -530,7 +530,15 @@ again:
- * considered here and page lock forces unnecessarily serialization
- * From this point on, mapping will be re-verified if necessary and
- * page lock will be acquired only if it is unavoidable
-- */
-+ *
-+ * Mapping checks require the head page for any compound page so the
-+ * head page and mapping is looked up now. For anonymous pages, it
-+ * does not matter if the page splits in the future as the key is
-+ * based on the address. For filesystem-backed pages, the tail is
-+ * required as the index of the page determines the key. For
-+ * base pages, there is no tail page and tail == page.
-+ */
-+ tail = page;
- page = compound_head(page);
- mapping = READ_ONCE(page->mapping);
-
-@@ -654,7 +662,7 @@ again:
-
- key->both.offset |= FUT_OFF_INODE; /* inode-based key */
- key->shared.inode = inode;
-- key->shared.pgoff = basepage_index(page);
-+ key->shared.pgoff = basepage_index(tail);
- rcu_read_unlock();
- }
-
-diff --git a/kernel/jump_label.c b/kernel/jump_label.c
-index 05254ee..4b353e0 100644
---- a/kernel/jump_label.c
-+++ b/kernel/jump_label.c
-@@ -58,13 +58,36 @@ static void jump_label_update(struct static_key *key);
-
- void static_key_slow_inc(struct static_key *key)
- {
-+ int v, v1;
-+
- STATIC_KEY_CHECK_USE();
-- if (atomic_inc_not_zero(&key->enabled))
-- return;
-+
-+ /*
-+ * Careful if we get concurrent static_key_slow_inc() calls;
-+ * later calls must wait for the first one to _finish_ the
-+ * jump_label_update() process. At the same time, however,
-+ * the jump_label_update() call below wants to see
-+ * static_key_enabled(&key) for jumps to be updated properly.
-+ *
-+ * So give a special meaning to negative key->enabled: it sends
-+ * static_key_slow_inc() down the slow path, and it is non-zero
-+ * so it counts as "enabled" in jump_label_update(). Note that
-+ * atomic_inc_unless_negative() checks >= 0, so roll our own.
-+ */
-+ for (v = atomic_read(&key->enabled); v > 0; v = v1) {
-+ v1 = atomic_cmpxchg(&key->enabled, v, v + 1);
-+ if (likely(v1 == v))
-+ return;
-+ }
-
- jump_label_lock();
-- if (atomic_inc_return(&key->enabled) == 1)
-+ if (atomic_read(&key->enabled) == 0) {
-+ atomic_set(&key->enabled, -1);
- jump_label_update(key);
-+ atomic_set(&key->enabled, 1);
-+ } else {
-+ atomic_inc(&key->enabled);
-+ }
- jump_label_unlock();
- }
- EXPORT_SYMBOL_GPL(static_key_slow_inc);
-@@ -72,6 +95,13 @@ EXPORT_SYMBOL_GPL(static_key_slow_inc);
- static void __static_key_slow_dec(struct static_key *key,
- unsigned long rate_limit, struct delayed_work *work)
- {
-+ /*
-+ * The negative count check is valid even when a negative
-+ * key->enabled is in use by static_key_slow_inc(); a
-+ * __static_key_slow_dec() before the first static_key_slow_inc()
-+ * returns is unbalanced, because all other static_key_slow_inc()
-+ * instances block while the update is in progress.
-+ */
- if (!atomic_dec_and_mutex_lock(&key->enabled, &jump_label_mutex)) {
- WARN(atomic_read(&key->enabled) < 0,
- "jump label: negative count!\n");
-diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
-index e364b42..79d2d76 100644
---- a/kernel/locking/mutex.c
-+++ b/kernel/locking/mutex.c
-@@ -486,9 +486,6 @@ __ww_mutex_lock_check_stamp(struct mutex *lock, struct ww_acquire_ctx *ctx)
- if (!hold_ctx)
- return 0;
-
-- if (unlikely(ctx == hold_ctx))
-- return -EALREADY;
--
- if (ctx->stamp - hold_ctx->stamp <= LONG_MAX &&
- (ctx->stamp != hold_ctx->stamp || ctx > hold_ctx)) {
- #ifdef CONFIG_DEBUG_MUTEXES
-@@ -514,6 +511,12 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
- unsigned long flags;
- int ret;
-
-+ if (use_ww_ctx) {
-+ struct ww_mutex *ww = container_of(lock, struct ww_mutex, base);
-+ if (unlikely(ww_ctx == READ_ONCE(ww->ctx)))
-+ return -EALREADY;
-+ }
-+
- preempt_disable();
- mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);
-
-diff --git a/kernel/locking/qspinlock.c b/kernel/locking/qspinlock.c
-index ce2f75e..5fc8c31 100644
---- a/kernel/locking/qspinlock.c
-+++ b/kernel/locking/qspinlock.c
-@@ -267,6 +267,66 @@ static __always_inline u32 __pv_wait_head_or_lock(struct qspinlock *lock,
- #define queued_spin_lock_slowpath native_queued_spin_lock_slowpath
- #endif
-
-+/*
-+ * queued_spin_lock_slowpath() can (load-)ACQUIRE the lock before
-+ * issuing an _unordered_ store to set _Q_LOCKED_VAL.
-+ *
-+ * This means that the store can be delayed, but no later than the
-+ * store-release from the unlock. This means that simply observing
-+ * _Q_LOCKED_VAL is not sufficient to determine if the lock is acquired.
-+ *
-+ * There are two paths that can issue the unordered store:
-+ *
-+ * (1) clear_pending_set_locked(): *,1,0 -> *,0,1
-+ *
-+ * (2) set_locked(): t,0,0 -> t,0,1 ; t != 0
-+ * atomic_cmpxchg_relaxed(): t,0,0 -> 0,0,1
-+ *
-+ * However, in both cases we have other !0 state we've set before to queue
-+ * ourseves:
-+ *
-+ * For (1) we have the atomic_cmpxchg_acquire() that set _Q_PENDING_VAL, our
-+ * load is constrained by that ACQUIRE to not pass before that, and thus must
-+ * observe the store.
-+ *
-+ * For (2) we have a more intersting scenario. We enqueue ourselves using
-+ * xchg_tail(), which ends up being a RELEASE. This in itself is not
-+ * sufficient, however that is followed by an smp_cond_acquire() on the same
-+ * word, giving a RELEASE->ACQUIRE ordering. This again constrains our load and
-+ * guarantees we must observe that store.
-+ *
-+ * Therefore both cases have other !0 state that is observable before the
-+ * unordered locked byte store comes through. This means we can use that to
-+ * wait for the lock store, and then wait for an unlock.
-+ */
-+#ifndef queued_spin_unlock_wait
-+void queued_spin_unlock_wait(struct qspinlock *lock)
-+{
-+ u32 val;
-+
-+ for (;;) {
-+ val = atomic_read(&lock->val);
-+
-+ if (!val) /* not locked, we're done */
-+ goto done;
-+
-+ if (val & _Q_LOCKED_MASK) /* locked, go wait for unlock */
-+ break;
-+
-+ /* not locked, but pending, wait until we observe the lock */
-+ cpu_relax();
-+ }
-+
-+ /* any unlock is good */
-+ while (atomic_read(&lock->val) & _Q_LOCKED_MASK)
-+ cpu_relax();
-+
-+done:
-+ smp_rmb(); /* CTRL + RMB -> ACQUIRE */
-+}
-+EXPORT_SYMBOL(queued_spin_unlock_wait);
-+#endif
-+
- #endif /* _GEN_PV_LOCK_SLOWPATH */
-
- /**
-diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index e7dd0ec..eeaf920 100644
---- a/kernel/sched/fair.c
-+++ b/kernel/sched/fair.c
-@@ -2821,6 +2821,23 @@ static inline void update_tg_load_avg(struct cfs_rq *cfs_rq, int force) {}
-
- static inline u64 cfs_rq_clock_task(struct cfs_rq *cfs_rq);
-
-+/*
-+ * Unsigned subtract and clamp on underflow.
-+ *
-+ * Explicitly do a load-store to ensure the intermediate value never hits
-+ * memory. This allows lockless observations without ever seeing the negative
-+ * values.
-+ */
-+#define sub_positive(_ptr, _val) do { \
-+ typeof(_ptr) ptr = (_ptr); \
-+ typeof(*ptr) val = (_val); \
-+ typeof(*ptr) res, var = READ_ONCE(*ptr); \
-+ res = var - val; \
-+ if (res > var) \
-+ res = 0; \
-+ WRITE_ONCE(*ptr, res); \
-+} while (0)
-+
- /* Group cfs_rq's load_avg is used for task_h_load and update_cfs_share */
- static inline int update_cfs_rq_load_avg(u64 now, struct cfs_rq *cfs_rq)
- {
-@@ -2829,15 +2846,15 @@ static inline int update_cfs_rq_load_avg(u64 now, struct cfs_rq *cfs_rq)
-
- if (atomic_long_read(&cfs_rq->removed_load_avg)) {
- s64 r = atomic_long_xchg(&cfs_rq->removed_load_avg, 0);
-- sa->load_avg = max_t(long, sa->load_avg - r, 0);
-- sa->load_sum = max_t(s64, sa->load_sum - r * LOAD_AVG_MAX, 0);
-+ sub_positive(&sa->load_avg, r);
-+ sub_positive(&sa->load_sum, r * LOAD_AVG_MAX);
- removed = 1;
- }
-
- if (atomic_long_read(&cfs_rq->removed_util_avg)) {
- long r = atomic_long_xchg(&cfs_rq->removed_util_avg, 0);
-- sa->util_avg = max_t(long, sa->util_avg - r, 0);
-- sa->util_sum = max_t(s32, sa->util_sum - r * LOAD_AVG_MAX, 0);
-+ sub_positive(&sa->util_avg, r);
-+ sub_positive(&sa->util_sum, r * LOAD_AVG_MAX);
- }
-
- decayed = __update_load_avg(now, cpu_of(rq_of(cfs_rq)), sa,
-@@ -2927,10 +2944,10 @@ static void detach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *s
- &se->avg, se->on_rq * scale_load_down(se->load.weight),
- cfs_rq->curr == se, NULL);
-
-- cfs_rq->avg.load_avg = max_t(long, cfs_rq->avg.load_avg - se->avg.load_avg, 0);
-- cfs_rq->avg.load_sum = max_t(s64, cfs_rq->avg.load_sum - se->avg.load_sum, 0);
-- cfs_rq->avg.util_avg = max_t(long, cfs_rq->avg.util_avg - se->avg.util_avg, 0);
-- cfs_rq->avg.util_sum = max_t(s32, cfs_rq->avg.util_sum - se->avg.util_sum, 0);
-+ sub_positive(&cfs_rq->avg.load_avg, se->avg.load_avg);
-+ sub_positive(&cfs_rq->avg.load_sum, se->avg.load_sum);
-+ sub_positive(&cfs_rq->avg.util_avg, se->avg.util_avg);
-+ sub_positive(&cfs_rq->avg.util_sum, se->avg.util_sum);
- }
-
- /* Add the load generated by se into cfs_rq's load average */
-diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
-index bd12c6c..c5aeedf 100644
---- a/kernel/sched/idle.c
-+++ b/kernel/sched/idle.c
-@@ -127,7 +127,7 @@ static int call_cpuidle(struct cpuidle_driver *drv, struct cpuidle_device *dev,
- */
- static void cpuidle_idle_call(void)
- {
-- struct cpuidle_device *dev = __this_cpu_read(cpuidle_devices);
-+ struct cpuidle_device *dev = cpuidle_get_device();
- struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev);
- int next_state, entered_state;
-
-diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c
-index f96f038..ad1d616 100644
---- a/kernel/trace/trace_printk.c
-+++ b/kernel/trace/trace_printk.c
-@@ -36,6 +36,10 @@ struct trace_bprintk_fmt {
- static inline struct trace_bprintk_fmt *lookup_format(const char *fmt)
- {
- struct trace_bprintk_fmt *pos;
-+
-+ if (!fmt)
-+ return ERR_PTR(-EINVAL);
-+
- list_for_each_entry(pos, &trace_bprintk_fmt_list, list) {
- if (!strcmp(pos->fmt, fmt))
- return pos;
-@@ -57,7 +61,8 @@ void hold_module_trace_bprintk_format(const char **start, const char **end)
- for (iter = start; iter < end; iter++) {
- struct trace_bprintk_fmt *tb_fmt = lookup_format(*iter);
- if (tb_fmt) {
-- *iter = tb_fmt->fmt;
-+ if (!IS_ERR(tb_fmt))
-+ *iter = tb_fmt->fmt;
- continue;
- }
-
-diff --git a/mm/migrate.c b/mm/migrate.c
-index f9dfb18..bdf3410 100644
---- a/mm/migrate.c
-+++ b/mm/migrate.c
-@@ -431,6 +431,7 @@ int migrate_page_move_mapping(struct address_space *mapping,
-
- return MIGRATEPAGE_SUCCESS;
- }
-+EXPORT_SYMBOL(migrate_page_move_mapping);
-
- /*
- * The expected number of remaining references is the same as that
-@@ -586,6 +587,7 @@ void migrate_page_copy(struct page *newpage, struct page *page)
-
- mem_cgroup_migrate(page, newpage);
- }
-+EXPORT_SYMBOL(migrate_page_copy);
-
- /************************************************************
- * Migration functions
-diff --git a/mm/page-writeback.c b/mm/page-writeback.c
-index bc5149d..e389f0a 100644
---- a/mm/page-writeback.c
-+++ b/mm/page-writeback.c
-@@ -369,8 +369,9 @@ static void domain_dirty_limits(struct dirty_throttle_control *dtc)
- struct dirty_throttle_control *gdtc = mdtc_gdtc(dtc);
- unsigned long bytes = vm_dirty_bytes;
- unsigned long bg_bytes = dirty_background_bytes;
-- unsigned long ratio = vm_dirty_ratio;
-- unsigned long bg_ratio = dirty_background_ratio;
-+ /* convert ratios to per-PAGE_SIZE for higher precision */
-+ unsigned long ratio = (vm_dirty_ratio * PAGE_SIZE) / 100;
-+ unsigned long bg_ratio = (dirty_background_ratio * PAGE_SIZE) / 100;
- unsigned long thresh;
- unsigned long bg_thresh;
- struct task_struct *tsk;
-@@ -382,26 +383,28 @@ static void domain_dirty_limits(struct dirty_throttle_control *dtc)
- /*
- * The byte settings can't be applied directly to memcg
- * domains. Convert them to ratios by scaling against
-- * globally available memory.
-+ * globally available memory. As the ratios are in
-+ * per-PAGE_SIZE, they can be obtained by dividing bytes by
-+ * number of pages.
- */
- if (bytes)
-- ratio = min(DIV_ROUND_UP(bytes, PAGE_SIZE) * 100 /
-- global_avail, 100UL);
-+ ratio = min(DIV_ROUND_UP(bytes, global_avail),
-+ PAGE_SIZE);
- if (bg_bytes)
-- bg_ratio = min(DIV_ROUND_UP(bg_bytes, PAGE_SIZE) * 100 /
-- global_avail, 100UL);
-+ bg_ratio = min(DIV_ROUND_UP(bg_bytes, global_avail),
-+ PAGE_SIZE);
- bytes = bg_bytes = 0;
- }
-
- if (bytes)
- thresh = DIV_ROUND_UP(bytes, PAGE_SIZE);
- else
-- thresh = (ratio * available_memory) / 100;
-+ thresh = (ratio * available_memory) / PAGE_SIZE;
-
- if (bg_bytes)
- bg_thresh = DIV_ROUND_UP(bg_bytes, PAGE_SIZE);
- else
-- bg_thresh = (bg_ratio * available_memory) / 100;
-+ bg_thresh = (bg_ratio * available_memory) / PAGE_SIZE;
-
- if (bg_thresh >= thresh)
- bg_thresh = thresh / 2;
-diff --git a/mm/percpu.c b/mm/percpu.c
-index 0c59684..9903830 100644
---- a/mm/percpu.c
-+++ b/mm/percpu.c
-@@ -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 */
-- struct work_struct map_extend_work;/* async ->map[] extension */
-+ struct list_head map_extend_list;/* on pcpu_map_extend_chunks */
-
- void *data; /* chunk data */
- int first_free; /* no free below this */
-@@ -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 */
--static DEFINE_MUTEX(pcpu_alloc_mutex); /* chunk create/destroy, [de]pop */
-+static DEFINE_MUTEX(pcpu_alloc_mutex); /* chunk create/destroy, [de]pop, map ext */
-
- static struct list_head *pcpu_slot __read_mostly; /* chunk list slots */
-
-+/* chunks which need their map areas extended, protected by pcpu_lock */
-+static LIST_HEAD(pcpu_map_extend_chunks);
-+
- /*
- * The number of empty populated pages, protected by pcpu_lock. The
- * reserved chunk doesn't contribute to the count.
-@@ -395,13 +398,19 @@ static int pcpu_need_to_extend(struct pcpu_chunk *chunk, bool is_atomic)
- {
- int margin, new_alloc;
-
-+ lockdep_assert_held(&pcpu_lock);
-+
- if (is_atomic) {
- margin = 3;
-
- if (chunk->map_alloc <
-- chunk->map_used + PCPU_ATOMIC_MAP_MARGIN_LOW &&
-- pcpu_async_enabled)
-- schedule_work(&chunk->map_extend_work);
-+ chunk->map_used + PCPU_ATOMIC_MAP_MARGIN_LOW) {
-+ if (list_empty(&chunk->map_extend_list)) {
-+ list_add_tail(&chunk->map_extend_list,
-+ &pcpu_map_extend_chunks);
-+ pcpu_schedule_balance_work();
-+ }
-+ }
- } else {
- margin = PCPU_ATOMIC_MAP_MARGIN_HIGH;
- }
-@@ -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;
-
-+ lockdep_assert_held(&pcpu_alloc_mutex);
-+
- new = pcpu_mem_zalloc(new_size);
- if (!new)
- return -ENOMEM;
-@@ -467,20 +478,6 @@ out_unlock:
- return 0;
- }
-
--static void pcpu_map_extend_workfn(struct work_struct *work)
--{
-- struct pcpu_chunk *chunk = container_of(work, struct pcpu_chunk,
-- map_extend_work);
-- int new_alloc;
--
-- spin_lock_irq(&pcpu_lock);
-- new_alloc = pcpu_need_to_extend(chunk, false);
-- spin_unlock_irq(&pcpu_lock);
--
-- if (new_alloc)
-- pcpu_extend_area_map(chunk, new_alloc);
--}
--
- /**
- * pcpu_fit_in_area - try to fit the requested allocation in a candidate area
- * @chunk: chunk the candidate area belongs to
-@@ -740,7 +737,7 @@ static struct pcpu_chunk *pcpu_alloc_chunk(void)
- chunk->map_used = 1;
-
- INIT_LIST_HEAD(&chunk->list);
-- INIT_WORK(&chunk->map_extend_work, pcpu_map_extend_workfn);
-+ INIT_LIST_HEAD(&chunk->map_extend_list);
- chunk->free_size = pcpu_unit_size;
- chunk->contig_hint = pcpu_unit_size;
-
-@@ -895,6 +892,9 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved,
- return NULL;
- }
-
-+ if (!is_atomic)
-+ mutex_lock(&pcpu_alloc_mutex);
-+
- spin_lock_irqsave(&pcpu_lock, flags);
-
- /* serve reserved allocations from the reserved chunk if available */
-@@ -967,12 +967,9 @@ restart:
- if (is_atomic)
- goto fail;
-
-- mutex_lock(&pcpu_alloc_mutex);
--
- if (list_empty(&pcpu_slot[pcpu_nr_slots - 1])) {
- chunk = pcpu_create_chunk();
- if (!chunk) {
-- mutex_unlock(&pcpu_alloc_mutex);
- err = "failed to allocate new chunk";
- goto fail;
- }
-@@ -983,7 +980,6 @@ restart:
- spin_lock_irqsave(&pcpu_lock, flags);
- }
-
-- mutex_unlock(&pcpu_alloc_mutex);
- goto restart;
-
- area_found:
-@@ -993,8 +989,6 @@ area_found:
- if (!is_atomic) {
- int page_start, page_end, rs, re;
-
-- mutex_lock(&pcpu_alloc_mutex);
--
- page_start = PFN_DOWN(off);
- page_end = PFN_UP(off + size);
-
-@@ -1005,7 +999,6 @@ area_found:
-
- spin_lock_irqsave(&pcpu_lock, flags);
- if (ret) {
-- mutex_unlock(&pcpu_alloc_mutex);
- pcpu_free_area(chunk, off, &occ_pages);
- err = "failed to populate";
- goto fail_unlock;
-@@ -1045,6 +1038,8 @@ fail:
- /* see the flag handling in pcpu_blance_workfn() */
- pcpu_atomic_alloc_failed = true;
- pcpu_schedule_balance_work();
-+ } else {
-+ mutex_unlock(&pcpu_alloc_mutex);
- }
- return NULL;
- }
-@@ -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;
-
-+ list_del_init(&chunk->map_extend_list);
- list_move(&chunk->list, &to_free);
- }
-
-@@ -1146,6 +1142,25 @@ static void pcpu_balance_workfn(struct work_struct *work)
- pcpu_destroy_chunk(chunk);
- }
-
-+ /* service chunks which requested async area map extension */
-+ do {
-+ int new_alloc = 0;
-+
-+ spin_lock_irq(&pcpu_lock);
-+
-+ chunk = list_first_entry_or_null(&pcpu_map_extend_chunks,
-+ struct pcpu_chunk, map_extend_list);
-+ if (chunk) {
-+ list_del_init(&chunk->map_extend_list);
-+ new_alloc = pcpu_need_to_extend(chunk, false);
-+ }
-+
-+ spin_unlock_irq(&pcpu_lock);
-+
-+ if (new_alloc)
-+ pcpu_extend_area_map(chunk, new_alloc);
-+ } while (chunk);
-+
- /*
- * Ensure there are certain number of free populated pages for
- * atomic allocs. Fill up from the most packed so that atomic
-@@ -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);
-- INIT_WORK(&schunk->map_extend_work, pcpu_map_extend_workfn);
-+ INIT_LIST_HEAD(&schunk->map_extend_list);
- schunk->base_addr = base_addr;
- schunk->map = smap;
- schunk->map_alloc = ARRAY_SIZE(smap);
-@@ -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);
-- INIT_WORK(&dchunk->map_extend_work, pcpu_map_extend_workfn);
-+ INIT_LIST_HEAD(&dchunk->map_extend_list);
- dchunk->base_addr = base_addr;
- dchunk->map = dmap;
- dchunk->map_alloc = ARRAY_SIZE(dmap);
-diff --git a/mm/shmem.c b/mm/shmem.c
-index 719bd6b..9ca09f5 100644
---- a/mm/shmem.c
-+++ b/mm/shmem.c
-@@ -2236,9 +2236,11 @@ static long shmem_fallocate(struct file *file, int mode, loff_t offset,
- NULL);
- if (error) {
- /* Remove the !PageUptodate pages we added */
-- shmem_undo_range(inode,
-- (loff_t)start << PAGE_SHIFT,
-- (loff_t)index << PAGE_SHIFT, true);
-+ if (index > start) {
-+ shmem_undo_range(inode,
-+ (loff_t)start << PAGE_SHIFT,
-+ ((loff_t)index << PAGE_SHIFT) - 1, true);
-+ }
- goto undone;
- }
-
-diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
-index a669dea..61ad43f 100644
---- a/net/core/flow_dissector.c
-+++ b/net/core/flow_dissector.c
-@@ -651,6 +651,23 @@ void make_flow_keys_digest(struct flow_keys_digest *digest,
- }
- EXPORT_SYMBOL(make_flow_keys_digest);
-
-+static struct flow_dissector flow_keys_dissector_symmetric __read_mostly;
-+
-+u32 __skb_get_hash_symmetric(struct sk_buff *skb)
-+{
-+ struct flow_keys keys;
-+
-+ __flow_hash_secret_init();
-+
-+ memset(&keys, 0, sizeof(keys));
-+ __skb_flow_dissect(skb, &flow_keys_dissector_symmetric, &keys,
-+ NULL, 0, 0, 0,
-+ FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL);
-+
-+ return __flow_hash_from_keys(&keys, hashrnd);
-+}
-+EXPORT_SYMBOL_GPL(__skb_get_hash_symmetric);
-+
- /**
- * __skb_get_hash: calculate a flow hash
- * @skb: sk_buff to calculate flow hash from
-@@ -868,6 +885,29 @@ static const struct flow_dissector_key flow_keys_dissector_keys[] = {
- },
- };
-
-+static const struct flow_dissector_key flow_keys_dissector_symmetric_keys[] = {
-+ {
-+ .key_id = FLOW_DISSECTOR_KEY_CONTROL,
-+ .offset = offsetof(struct flow_keys, control),
-+ },
-+ {
-+ .key_id = FLOW_DISSECTOR_KEY_BASIC,
-+ .offset = offsetof(struct flow_keys, basic),
-+ },
-+ {
-+ .key_id = FLOW_DISSECTOR_KEY_IPV4_ADDRS,
-+ .offset = offsetof(struct flow_keys, addrs.v4addrs),
-+ },
-+ {
-+ .key_id = FLOW_DISSECTOR_KEY_IPV6_ADDRS,
-+ .offset = offsetof(struct flow_keys, addrs.v6addrs),
-+ },
-+ {
-+ .key_id = FLOW_DISSECTOR_KEY_PORTS,
-+ .offset = offsetof(struct flow_keys, ports),
-+ },
-+};
-+
- static const struct flow_dissector_key flow_keys_buf_dissector_keys[] = {
- {
- .key_id = FLOW_DISSECTOR_KEY_CONTROL,
-@@ -889,6 +929,9 @@ static int __init init_default_flow_dissectors(void)
- skb_flow_dissector_init(&flow_keys_dissector,
- flow_keys_dissector_keys,
- ARRAY_SIZE(flow_keys_dissector_keys));
-+ skb_flow_dissector_init(&flow_keys_dissector_symmetric,
-+ flow_keys_dissector_symmetric_keys,
-+ ARRAY_SIZE(flow_keys_dissector_symmetric_keys));
- skb_flow_dissector_init(&flow_keys_buf_dissector,
- flow_keys_buf_dissector_keys,
- ARRAY_SIZE(flow_keys_buf_dissector_keys));
-diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index e561f9f..59bf4d7 100644
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -3016,24 +3016,6 @@ int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
- EXPORT_SYMBOL_GPL(skb_append_pagefrags);
-
- /**
-- * skb_push_rcsum - push skb and update receive checksum
-- * @skb: buffer to update
-- * @len: length of data pulled
-- *
-- * This function performs an skb_push on the packet and updates
-- * the CHECKSUM_COMPLETE checksum. It should be used on
-- * receive path processing instead of skb_push unless you know
-- * that the checksum difference is zero (e.g., a valid IP header)
-- * or you are setting ip_summed to CHECKSUM_NONE.
-- */
--static unsigned char *skb_push_rcsum(struct sk_buff *skb, unsigned len)
--{
-- skb_push(skb, len);
-- skb_postpush_rcsum(skb, skb->data, len);
-- return skb->data;
--}
--
--/**
- * skb_pull_rcsum - pull skb and update receive checksum
- * @skb: buffer to update
- * @len: length of data pulled
-diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
-index ea071fa..c26fac2 100644
---- a/net/ipv6/ip6_fib.c
-+++ b/net/ipv6/ip6_fib.c
-@@ -177,6 +177,7 @@ static void rt6_free_pcpu(struct rt6_info *non_pcpu_rt)
- }
- }
-
-+ free_percpu(non_pcpu_rt->rt6i_pcpu);
- non_pcpu_rt->rt6i_pcpu = NULL;
- }
-
-diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
-index d32cefc..34a5712 100644
---- a/net/mac80211/mesh.c
-+++ b/net/mac80211/mesh.c
-@@ -150,19 +150,26 @@ u32 mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata)
- void mesh_sta_cleanup(struct sta_info *sta)
- {
- struct ieee80211_sub_if_data *sdata = sta->sdata;
-- u32 changed;
-+ u32 changed = 0;
-
- /*
- * maybe userspace handles peer allocation and peering, but in either
- * case the beacon is still generated by the kernel and we might need
- * an update.
- */
-- changed = mesh_accept_plinks_update(sdata);
-+ if (sdata->u.mesh.user_mpm &&
-+ sta->mesh->plink_state == NL80211_PLINK_ESTAB)
-+ changed |= mesh_plink_dec_estab_count(sdata);
-+ changed |= mesh_accept_plinks_update(sdata);
- if (!sdata->u.mesh.user_mpm) {
- changed |= mesh_plink_deactivate(sta);
- del_timer_sync(&sta->mesh->plink_timer);
- }
-
-+ /* make sure no readers can access nexthop sta from here on */
-+ mesh_path_flush_by_nexthop(sta);
-+ synchronize_net();
-+
- if (changed)
- ieee80211_mbss_info_change_notify(sdata, changed);
- }
-diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
-index 62193f4..ba7ce53 100644
---- a/net/mac80211/sta_info.h
-+++ b/net/mac80211/sta_info.h
-@@ -275,7 +275,7 @@ struct ieee80211_fast_tx {
- u8 sa_offs, da_offs, pn_offs;
- u8 band;
- u8 hdr[30 + 2 + IEEE80211_FAST_XMIT_MAX_IV +
-- sizeof(rfc1042_header)];
-+ sizeof(rfc1042_header)] __aligned(2);
-
- struct rcu_head rcu_head;
- };
-diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
-index 18d0bec..8012f67 100644
---- a/net/packet/af_packet.c
-+++ b/net/packet/af_packet.c
-@@ -1340,7 +1340,7 @@ static unsigned int fanout_demux_hash(struct packet_fanout *f,
- struct sk_buff *skb,
- unsigned int num)
- {
-- return reciprocal_scale(skb_get_hash(skb), num);
-+ return reciprocal_scale(__skb_get_hash_symmetric(skb), num);
- }
-
- static unsigned int fanout_demux_lb(struct packet_fanout *f,
-diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
-index 8f3948d..934336e 100644
---- a/net/sched/act_mirred.c
-+++ b/net/sched/act_mirred.c
-@@ -180,7 +180,7 @@ static int tcf_mirred(struct sk_buff *skb, const struct tc_action *a,
-
- if (!(at & AT_EGRESS)) {
- if (m->tcfm_ok_push)
-- skb_push(skb2, skb->mac_len);
-+ skb_push_rcsum(skb2, skb->mac_len);
- }
-
- /* mirror is always swallowed */
-diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
-index 7e0c9bf..837dd91 100644
---- a/net/sunrpc/clnt.c
-+++ b/net/sunrpc/clnt.c
-@@ -446,16 +446,27 @@ out_no_rpciod:
- return ERR_PTR(err);
- }
-
--struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
-+static struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
- struct rpc_xprt *xprt)
- {
- struct rpc_clnt *clnt = NULL;
- struct rpc_xprt_switch *xps;
-
-- xps = xprt_switch_alloc(xprt, GFP_KERNEL);
-- if (xps == NULL)
-- return ERR_PTR(-ENOMEM);
--
-+ if (args->bc_xprt && args->bc_xprt->xpt_bc_xps) {
-+ WARN_ON(args->protocol != XPRT_TRANSPORT_BC_TCP);
-+ xps = args->bc_xprt->xpt_bc_xps;
-+ xprt_switch_get(xps);
-+ } else {
-+ xps = xprt_switch_alloc(xprt, GFP_KERNEL);
-+ if (xps == NULL) {
-+ xprt_put(xprt);
-+ return ERR_PTR(-ENOMEM);
-+ }
-+ if (xprt->bc_xprt) {
-+ xprt_switch_get(xps);
-+ xprt->bc_xprt->xpt_bc_xps = xps;
-+ }
-+ }
- clnt = rpc_new_client(args, xps, xprt, NULL);
- if (IS_ERR(clnt))
- return clnt;
-@@ -483,7 +494,6 @@ struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
-
- return clnt;
- }
--EXPORT_SYMBOL_GPL(rpc_create_xprt);
-
- /**
- * rpc_create - create an RPC client and transport with one call
-@@ -509,6 +519,15 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
- };
- char servername[48];
-
-+ if (args->bc_xprt) {
-+ WARN_ON(args->protocol != XPRT_TRANSPORT_BC_TCP);
-+ xprt = args->bc_xprt->xpt_bc_xprt;
-+ if (xprt) {
-+ xprt_get(xprt);
-+ return rpc_create_xprt(args, xprt);
-+ }
-+ }
-+
- if (args->flags & RPC_CLNT_CREATE_INFINITE_SLOTS)
- xprtargs.flags |= XPRT_CREATE_INFINITE_SLOTS;
- if (args->flags & RPC_CLNT_CREATE_NO_IDLE_TIMEOUT)
-diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
-index 7422f28..7231cb4 100644
---- a/net/sunrpc/svc_xprt.c
-+++ b/net/sunrpc/svc_xprt.c
-@@ -136,6 +136,8 @@ static void svc_xprt_free(struct kref *kref)
- /* See comment on corresponding get in xs_setup_bc_tcp(): */
- if (xprt->xpt_bc_xprt)
- xprt_put(xprt->xpt_bc_xprt);
-+ if (xprt->xpt_bc_xps)
-+ xprt_switch_put(xprt->xpt_bc_xps);
- xprt->xpt_ops->xpo_free(xprt);
- module_put(owner);
- }
-diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
-index 65e7595..e9e5dd0 100644
---- a/net/sunrpc/xprtsock.c
-+++ b/net/sunrpc/xprtsock.c
-@@ -3050,6 +3050,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args)
- return xprt;
-
- args->bc_xprt->xpt_bc_xprt = NULL;
-+ args->bc_xprt->xpt_bc_xps = NULL;
- xprt_put(xprt);
- ret = ERR_PTR(-EINVAL);
- out_err:
-diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
-index 8269da7..7748199 100644
---- a/net/unix/af_unix.c
-+++ b/net/unix/af_unix.c
-@@ -315,7 +315,7 @@ static struct sock *unix_find_socket_byinode(struct inode *i)
- &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
- struct dentry *dentry = unix_sk(s)->path.dentry;
-
-- if (dentry && d_backing_inode(dentry) == i) {
-+ if (dentry && d_real_inode(dentry) == i) {
- sock_hold(s);
- goto found;
- }
-@@ -911,7 +911,7 @@ static struct sock *unix_find_other(struct net *net,
- err = kern_path(sunname->sun_path, LOOKUP_FOLLOW, &path);
- if (err)
- goto fail;
-- inode = d_backing_inode(path.dentry);
-+ inode = d_real_inode(path.dentry);
- err = inode_permission(inode, MAY_WRITE);
- if (err)
- goto put_fail;
-@@ -1048,7 +1048,7 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
- goto out_up;
- }
- addr->hash = UNIX_HASH_SIZE;
-- hash = d_backing_inode(dentry)->i_ino & (UNIX_HASH_SIZE - 1);
-+ hash = d_real_inode(dentry)->i_ino & (UNIX_HASH_SIZE - 1);
- spin_lock(&unix_table_lock);
- u->path = u_path;
- list = &unix_socket_table[hash];
-diff --git a/net/wireless/core.c b/net/wireless/core.c
-index 9f1c4aa..c878045 100644
---- a/net/wireless/core.c
-+++ b/net/wireless/core.c
-@@ -360,8 +360,6 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
- WARN_ON(ops->remain_on_channel && !ops->cancel_remain_on_channel);
- WARN_ON(ops->tdls_channel_switch && !ops->tdls_cancel_channel_switch);
- WARN_ON(ops->add_tx_ts && !ops->del_tx_ts);
-- WARN_ON(ops->set_tx_power && !ops->get_tx_power);
-- WARN_ON(ops->set_antenna && !ops->get_antenna);
-
- alloc_size = sizeof(*rdev) + sizeof_priv;
-
-diff --git a/net/wireless/util.c b/net/wireless/util.c
-index 9f440a9..47b9178 100644
---- a/net/wireless/util.c
-+++ b/net/wireless/util.c
-@@ -509,7 +509,7 @@ static int __ieee80211_data_to_8023(struct sk_buff *skb, struct ethhdr *ehdr,
- * replace EtherType */
- hdrlen += ETH_ALEN + 2;
- else
-- tmp.h_proto = htons(skb->len);
-+ tmp.h_proto = htons(skb->len - hdrlen);
-
- pskb_pull(skb, hdrlen);
-
-diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
-index a915507..fec7578 100644
---- a/scripts/mod/file2alias.c
-+++ b/scripts/mod/file2alias.c
-@@ -384,7 +384,7 @@ static void do_of_entry_multi(void *symval, struct module *mod)
- len = sprintf(alias, "of:N%sT%s", (*name)[0] ? *name : "*",
- (*type)[0] ? *type : "*");
-
-- if (compatible[0])
-+ if ((*compatible)[0])
- sprintf(&alias[len], "%sC%s", (*type)[0] ? "*" : "",
- *compatible);
-
-diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
-index dec607c..5ee8201 100644
---- a/security/apparmor/lsm.c
-+++ b/security/apparmor/lsm.c
-@@ -523,34 +523,34 @@ static int apparmor_setprocattr(struct task_struct *task, char *name,
- {
- struct common_audit_data sa;
- struct apparmor_audit_data aad = {0,};
-- char *command, *args = value;
-+ char *command, *largs = NULL, *args = value;
- size_t arg_size;
- int error;
-
- if (size == 0)
- return -EINVAL;
-- /* args points to a PAGE_SIZE buffer, AppArmor requires that
-- * the buffer must be null terminated or have size <= PAGE_SIZE -1
-- * so that AppArmor can null terminate them
-- */
-- if (args[size - 1] != '\0') {
-- if (size == PAGE_SIZE)
-- return -EINVAL;
-- args[size] = '\0';
-- }
--
- /* task can only write its own attributes */
- if (current != task)
- return -EACCES;
-
-- args = value;
-+ /* AppArmor requires that the buffer must be null terminated atm */
-+ if (args[size - 1] != '\0') {
-+ /* null terminate */
-+ largs = args = kmalloc(size + 1, GFP_KERNEL);
-+ if (!args)
-+ return -ENOMEM;
-+ memcpy(args, value, size);
-+ args[size] = '\0';
-+ }
-+
-+ error = -EINVAL;
- args = strim(args);
- command = strsep(&args, " ");
- if (!args)
-- return -EINVAL;
-+ goto out;
- args = skip_spaces(args);
- if (!*args)
-- return -EINVAL;
-+ goto out;
-
- arg_size = size - (args - (char *) value);
- if (strcmp(name, "current") == 0) {
-@@ -576,10 +576,12 @@ static int apparmor_setprocattr(struct task_struct *task, char *name,
- goto fail;
- } else
- /* only support the "current" and "exec" process attributes */
-- return -EINVAL;
-+ goto fail;
-
- if (!error)
- error = size;
-+out:
-+ kfree(largs);
- return error;
-
- fail:
-@@ -588,9 +590,9 @@ fail:
- aad.profile = aa_current_profile();
- aad.op = OP_SETPROCATTR;
- aad.info = name;
-- aad.error = -EINVAL;
-+ aad.error = error = -EINVAL;
- aa_audit_msg(AUDIT_APPARMOR_DENIED, &sa, NULL);
-- return -EINVAL;
-+ goto out;
- }
-
- static int apparmor_task_setrlimit(struct task_struct *task,
-diff --git a/security/keys/key.c b/security/keys/key.c
-index b287551..af7f682 100644
---- a/security/keys/key.c
-+++ b/security/keys/key.c
-@@ -584,7 +584,7 @@ int key_reject_and_link(struct key *key,
-
- mutex_unlock(&key_construction_mutex);
-
-- if (keyring)
-+ if (keyring && link_ret == 0)
- __key_link_end(keyring, &key->index_key, edit);
-
- /* wake up anyone waiting for a key to be constructed */
-diff --git a/sound/core/control.c b/sound/core/control.c
-index a85d455..b4fe9b0 100644
---- a/sound/core/control.c
-+++ b/sound/core/control.c
-@@ -160,6 +160,8 @@ void snd_ctl_notify(struct snd_card *card, unsigned int mask,
-
- if (snd_BUG_ON(!card || !id))
- return;
-+ if (card->shutdown)
-+ return;
- read_lock(&card->ctl_files_rwlock);
- #if IS_ENABLED(CONFIG_SND_MIXER_OSS)
- card->mixer_oss_change_count++;
-diff --git a/sound/core/pcm.c b/sound/core/pcm.c
-index 308c9ec..8e980aa 100644
---- a/sound/core/pcm.c
-+++ b/sound/core/pcm.c
-@@ -849,6 +849,14 @@ int snd_pcm_new_internal(struct snd_card *card, const char *id, int device,
- }
- EXPORT_SYMBOL(snd_pcm_new_internal);
-
-+static void free_chmap(struct snd_pcm_str *pstr)
-+{
-+ if (pstr->chmap_kctl) {
-+ snd_ctl_remove(pstr->pcm->card, pstr->chmap_kctl);
-+ pstr->chmap_kctl = NULL;
-+ }
-+}
-+
- static void snd_pcm_free_stream(struct snd_pcm_str * pstr)
- {
- struct snd_pcm_substream *substream, *substream_next;
-@@ -871,6 +879,7 @@ static void snd_pcm_free_stream(struct snd_pcm_str * pstr)
- kfree(setup);
- }
- #endif
-+ free_chmap(pstr);
- if (pstr->substream_count)
- put_device(&pstr->dev);
- }
-@@ -1135,10 +1144,7 @@ static int snd_pcm_dev_disconnect(struct snd_device *device)
- for (cidx = 0; cidx < 2; cidx++) {
- if (!pcm->internal)
- snd_unregister_device(&pcm->streams[cidx].dev);
-- if (pcm->streams[cidx].chmap_kctl) {
-- snd_ctl_remove(pcm->card, pcm->streams[cidx].chmap_kctl);
-- pcm->streams[cidx].chmap_kctl = NULL;
-- }
-+ free_chmap(&pcm->streams[cidx]);
- }
- mutex_unlock(&pcm->open_mutex);
- mutex_unlock(&register_mutex);
-diff --git a/sound/core/timer.c b/sound/core/timer.c
-index 6469bed..23b73f6 100644
---- a/sound/core/timer.c
-+++ b/sound/core/timer.c
-@@ -1954,6 +1954,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
-
- qhead = tu->qhead++;
- tu->qhead %= tu->queue_size;
-+ tu->qused--;
- spin_unlock_irq(&tu->qlock);
-
- if (tu->tread) {
-@@ -1967,7 +1968,6 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
- }
-
- spin_lock_irq(&tu->qlock);
-- tu->qused--;
- if (err < 0)
- goto _error;
- result += unit;
-diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
-index c0f8f61..172dacd 100644
---- a/sound/drivers/dummy.c
-+++ b/sound/drivers/dummy.c
-@@ -420,6 +420,7 @@ static int dummy_hrtimer_stop(struct snd_pcm_substream *substream)
-
- static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm)
- {
-+ hrtimer_cancel(&dpcm->timer);
- tasklet_kill(&dpcm->tasklet);
- }
-
-diff --git a/sound/hda/hdac_regmap.c b/sound/hda/hdac_regmap.c
-index 87041dd..47a358f 100644
---- a/sound/hda/hdac_regmap.c
-+++ b/sound/hda/hdac_regmap.c
-@@ -444,7 +444,7 @@ int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg,
- err = reg_raw_write(codec, reg, val);
- if (err == -EAGAIN) {
- err = snd_hdac_power_up_pm(codec);
-- if (!err)
-+ if (err >= 0)
- err = reg_raw_write(codec, reg, val);
- snd_hdac_power_down_pm(codec);
- }
-@@ -470,7 +470,7 @@ static int __snd_hdac_regmap_read_raw(struct hdac_device *codec,
- err = reg_raw_read(codec, reg, val, uncached);
- if (err == -EAGAIN) {
- err = snd_hdac_power_up_pm(codec);
-- if (!err)
-+ if (err >= 0)
- err = reg_raw_read(codec, reg, val, uncached);
- snd_hdac_power_down_pm(codec);
- }
-diff --git a/sound/pci/au88x0/au88x0_core.c b/sound/pci/au88x0/au88x0_core.c
-index 4667c32..7417718 100644
---- a/sound/pci/au88x0/au88x0_core.c
-+++ b/sound/pci/au88x0/au88x0_core.c
-@@ -1444,9 +1444,8 @@ static int vortex_wtdma_bufshift(vortex_t * vortex, int wtdma)
- int page, p, pp, delta, i;
-
- page =
-- (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) &
-- WT_SUBBUF_MASK)
-- >> WT_SUBBUF_SHIFT;
-+ (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2))
-+ >> WT_SUBBUF_SHIFT) & WT_SUBBUF_MASK;
- if (dma->nr_periods >= 4)
- delta = (page - dma->period_real) & 3;
- else {
-diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c
-index 1cb85ae..286f5e3 100644
---- a/sound/pci/echoaudio/echoaudio.c
-+++ b/sound/pci/echoaudio/echoaudio.c
-@@ -2200,11 +2200,11 @@ static int snd_echo_resume(struct device *dev)
- u32 pipe_alloc_mask;
- int err;
-
-- commpage_bak = kmalloc(sizeof(struct echoaudio), GFP_KERNEL);
-+ commpage_bak = kmalloc(sizeof(*commpage), GFP_KERNEL);
- if (commpage_bak == NULL)
- return -ENOMEM;
- commpage = chip->comm_page;
-- memcpy(commpage_bak, commpage, sizeof(struct comm_page));
-+ memcpy(commpage_bak, commpage, sizeof(*commpage));
-
- err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device);
- if (err < 0) {
-diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
-index dfaf1a9..d77cc76 100644
---- a/sound/pci/hda/hda_generic.c
-+++ b/sound/pci/hda/hda_generic.c
-@@ -3977,6 +3977,8 @@ static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid,
-
- for (n = 0; n < spec->paths.used; n++) {
- path = snd_array_elem(&spec->paths, n);
-+ if (!path->depth)
-+ continue;
- if (path->path[0] == nid ||
- path->path[path->depth - 1] == nid) {
- bool pin_old = path->pin_enabled;
-diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
-index 94089fc..6f8ea13 100644
---- a/sound/pci/hda/hda_intel.c
-+++ b/sound/pci/hda/hda_intel.c
-@@ -367,9 +367,10 @@ enum {
- #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_KBL_H(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa2f0)
- #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)) || \
-- IS_KBL(pci) || IS_KBL_LP(pci)
-+ IS_KBL(pci) || IS_KBL_LP(pci) || IS_KBL_H(pci)
-
- static char *driver_short_names[] = {
- [AZX_DRIVER_ICH] = "HDA Intel",
-@@ -1217,8 +1218,10 @@ static int azx_free(struct azx *chip)
- if (use_vga_switcheroo(hda)) {
- if (chip->disabled && hda->probe_continued)
- snd_hda_unlock_devices(&chip->bus);
-- if (hda->vga_switcheroo_registered)
-+ if (hda->vga_switcheroo_registered) {
- vga_switcheroo_unregister_client(chip->pci);
-+ vga_switcheroo_fini_domain_pm_ops(chip->card->dev);
-+ }
- }
-
- if (bus->chip_init) {
-@@ -2190,6 +2193,9 @@ static const struct pci_device_id azx_ids[] = {
- /* Kabylake-LP */
- { PCI_DEVICE(0x8086, 0x9d71),
- .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },
-+ /* Kabylake-H */
-+ { PCI_DEVICE(0x8086, 0xa2f0),
-+ .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 },
-@@ -2263,6 +2269,8 @@ static const struct pci_device_id azx_ids[] = {
- .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
- { PCI_DEVICE(0x1002, 0x157a),
- .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
-+ { PCI_DEVICE(0x1002, 0x15b3),
-+ .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },
- { PCI_DEVICE(0x1002, 0x793b),
- .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
- { PCI_DEVICE(0x1002, 0x7919),
-diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
-index 0fe18ed..abcb5a6 100644
---- a/sound/pci/hda/patch_realtek.c
-+++ b/sound/pci/hda/patch_realtek.c
-@@ -5650,6 +5650,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
- SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
- SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK),
- SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
-+ SND_PCI_QUIRK(0x17aa, 0x5050, "Thinkpad T560p", ALC292_FIXUP_TPT460),
-+ SND_PCI_QUIRK(0x17aa, 0x5051, "Thinkpad L460", ALC292_FIXUP_TPT460),
-+ SND_PCI_QUIRK(0x17aa, 0x5053, "Thinkpad T460", ALC292_FIXUP_TPT460),
- SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
- SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
- SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
-@@ -5735,7 +5738,6 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
- {}
- };
- #define ALC225_STANDARD_PINS \
-- {0x12, 0xb7a60130}, \
- {0x21, 0x04211020}
-
- #define ALC256_STANDARD_PINS \
-@@ -5760,10 +5762,24 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
- static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
- SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
- ALC225_STANDARD_PINS,
-+ {0x12, 0xb7a60130},
- {0x14, 0x901701a0}),
- SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
- ALC225_STANDARD_PINS,
-+ {0x12, 0xb7a60130},
- {0x14, 0x901701b0}),
-+ SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
-+ ALC225_STANDARD_PINS,
-+ {0x12, 0xb7a60150},
-+ {0x14, 0x901701a0}),
-+ SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
-+ ALC225_STANDARD_PINS,
-+ {0x12, 0xb7a60150},
-+ {0x14, 0x901701b0}),
-+ SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
-+ ALC225_STANDARD_PINS,
-+ {0x12, 0xb7a60130},
-+ {0x1b, 0x90170110}),
- SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
- {0x14, 0x90170110},
- {0x21, 0x02211020}),
-@@ -5832,6 +5848,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
- {0x14, 0x90170120},
- {0x21, 0x02211030}),
- SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
-+ {0x12, 0x90a60170},
-+ {0x14, 0x90170120},
-+ {0x21, 0x02211030}),
-+ SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
- ALC256_STANDARD_PINS),
- SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
- {0x12, 0x90a60130},
-diff --git a/sound/usb/card.c b/sound/usb/card.c
-index 3fc6358..2d49350 100644
---- a/sound/usb/card.c
-+++ b/sound/usb/card.c
-@@ -552,7 +552,6 @@ static int usb_audio_probe(struct usb_interface *intf,
- goto __error;
- }
- chip = usb_chip[i];
-- dev_set_drvdata(&dev->dev, chip);
- atomic_inc(&chip->active); /* avoid autopm */
- break;
- }
-@@ -578,6 +577,7 @@ static int usb_audio_probe(struct usb_interface *intf,
- goto __error;
- }
- }
-+ dev_set_drvdata(&dev->dev, chip);
-
- /*
- * For devices with more than one control interface, we assume the
-diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
-index 4fd482f..7cb1224 100644
---- a/virt/kvm/kvm_main.c
-+++ b/virt/kvm/kvm_main.c
-@@ -2868,7 +2868,7 @@ static long kvm_vm_ioctl(struct file *filp,
- if (copy_from_user(&routing, argp, sizeof(routing)))
- goto out;
- r = -EINVAL;
-- if (routing.nr >= KVM_MAX_IRQ_ROUTES)
-+ if (routing.nr > KVM_MAX_IRQ_ROUTES)
- goto out;
- if (routing.flags)
- goto out;
diff --git a/4.6.5/0000_README b/4.7.0/0000_README
index a3be0b4..f41c54f 100644
--- a/4.6.5/0000_README
+++ b/4.7.0/0000_README
@@ -2,11 +2,7 @@ README
-----------------------------------------------------------------------------
Individual Patch Descriptions:
-----------------------------------------------------------------------------
-Patch: 1004_linux-4.6.5.patch
-From: http://www.kernel.org
-Desc: Linux 4.6.5
-
-Patch: 4420_grsecurity-3.1-4.6.5-201607312210.patch
+Patch: 4420_grsecurity-3.1-4.7-201608131240.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/4.6.5/4420_grsecurity-3.1-4.6.5-201607312210.patch b/4.7.0/4420_grsecurity-3.1-4.7-201608131240.patch
index 5a9676a..d3e1770 100644
--- a/4.6.5/4420_grsecurity-3.1-4.6.5-201607312210.patch
+++ b/4.7.0/4420_grsecurity-3.1-4.7-201608131240.patch
@@ -1,5 +1,5 @@
diff --git a/.gitignore b/.gitignore
-index fd3a355..c47e86a 100644
+index 0c320bf..2be25f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,6 +37,7 @@ modules.builtin
@@ -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 0b3de80..550d8e8 100644
+index 82b42c9..7151845 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -1320,6 +1320,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -1341,6 +1341,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 0b3de80..550d8e8 100644
hashdist= [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes. Defaults on
-@@ -2515,6 +2521,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2556,6 +2562,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 0b3de80..550d8e8 100644
nosmap [X86]
Disable SMAP (Supervisor Mode Access Prevention)
even if it is supported by processor.
-@@ -2818,6 +2828,35 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2862,6 +2872,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 0b3de80..550d8e8 100644
pcd. [PARIDE]
diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
-index fcddfd5..71afd6b 100644
+index a3683ce..5ec8bf4 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 fcddfd5..71afd6b 100644
- modprobe ==> Documentation/debugging-modules.txt
- modules_disabled
- msg_next_id [ sysv ipc ]
-@@ -406,6 +407,20 @@ This flag controls the L2 cache of G3 processor boards. If
+@@ -408,6 +409,20 @@ This flag controls the L2 cache of G3 processor boards. If
==============================================================
@@ -420,10 +420,10 @@ index fcddfd5..71afd6b 100644
A toggle value indicating if modules are allowed to be loaded
diff --git a/Makefile b/Makefile
-index 7d693a8..28a594e 100644
+index 66da9a3..69d3a1ae 100644
--- a/Makefile
+++ b/Makefile
-@@ -298,7 +298,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
+@@ -302,7 +302,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
HOSTCC = gcc
HOSTCXX = g++
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
@@ -434,7 +434,7 @@ index 7d693a8..28a594e 100644
ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \
-@@ -548,7 +550,7 @@ ifeq ($(KBUILD_EXTMOD),)
+@@ -554,7 +556,7 @@ ifeq ($(KBUILD_EXTMOD),)
# in parallel
PHONY += scripts
scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \
@@ -443,7 +443,7 @@ index 7d693a8..28a594e 100644
$(Q)$(MAKE) $(build)=$(@)
# Objects we will link into vmlinux / subdirs we need to visit
-@@ -623,6 +625,8 @@ endif
+@@ -633,6 +635,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 7d693a8..28a594e 100644
ifdef CONFIG_READABLE_ASM
# Disable optimizations that make assembler listings hard to read.
# reorder blocks reorders the control in the function
-@@ -724,7 +728,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
+@@ -734,7 +738,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
else
KBUILD_CFLAGS += -g
endif
@@ -461,7 +461,7 @@ index 7d693a8..28a594e 100644
endif
ifdef CONFIG_DEBUG_INFO_DWARF4
KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,)
-@@ -899,7 +903,7 @@ export mod_sign_cmd
+@@ -909,7 +913,7 @@ export mod_sign_cmd
ifeq ($(KBUILD_EXTMOD),)
@@ -470,16 +470,16 @@ index 7d693a8..28a594e 100644
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
-@@ -1002,7 +1006,7 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
+@@ -1028,7 +1032,7 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
archprepare: archheaders archscripts prepare1 scripts_basic
--prepare0: archprepare FORCE
-+prepare0: archprepare gcc-plugins FORCE
+-prepare0: archprepare
++prepare0: archprepare gcc-plugins
$(Q)$(MAKE) $(build)=.
# All the preparing..
-@@ -1220,7 +1224,11 @@ MRPROPER_FILES += .config .config.old .version .old_version \
+@@ -1247,7 +1251,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 7d693a8..28a594e 100644
# clean - Delete most, but leave enough to build external modules
#
-@@ -1259,7 +1267,7 @@ distclean: mrproper
+@@ -1286,7 +1294,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 7d693a8..28a594e 100644
-type f -print | xargs rm -f
-@@ -1480,6 +1488,7 @@ clean: $(clean-dirs)
+@@ -1509,6 +1517,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,10 +510,10 @@ index 7d693a8..28a594e 100644
# Generate tags for editors
diff --git a/arch/Kconfig b/arch/Kconfig
-index 81869a5..b10fc6c 100644
+index 1599629..1ef557b 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
-@@ -353,6 +353,20 @@ config SECCOMP_FILTER
+@@ -357,6 +357,20 @@ config SECCOMP_FILTER
See Documentation/prctl/seccomp_filter.txt for details.
@@ -598,7 +598,7 @@ index 968d999..d36b2df 100644
registered using atexit. This provides a mean for the dynamic
linker to call DT_FINI functions for shared libraries that have
diff --git a/arch/alpha/include/asm/pgalloc.h b/arch/alpha/include/asm/pgalloc.h
-index aab14a0..b4fa3e7 100644
+index c2ebb6f..93a0613 100644
--- a/arch/alpha/include/asm/pgalloc.h
+++ b/arch/alpha/include/asm/pgalloc.h
@@ -29,6 +29,12 @@ pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
@@ -650,7 +650,7 @@ index 936bc8f..bb1859f 100644
for (i = 0; i < n; i++) {
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
-index 6cc0816..3dd424d 100644
+index ffb93f49..ced8233 100644
--- a/arch/alpha/kernel/osf_sys.c
+++ b/arch/alpha/kernel/osf_sys.c
@@ -1300,10 +1300,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
@@ -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 a876743..fe2a193 100644
+index 0d3e59f..4418d65 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
-@@ -549,6 +549,7 @@ config ARC_DBG_TLB_MISS_COUNT
+@@ -541,6 +541,7 @@ config ARC_DBG_TLB_MISS_COUNT
bool "Profile TLB Misses"
default n
select DEBUG_FS
@@ -877,10 +877,10 @@ index a876743..fe2a193 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 cdfa6c2..f39881d 100644
+index 90542db..769febf 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
-@@ -53,6 +53,7 @@ config ARM
+@@ -54,6 +54,7 @@ config ARM
select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
@@ -888,7 +888,7 @@ index cdfa6c2..f39881d 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
-@@ -1561,6 +1562,7 @@ config AEABI
+@@ -1581,6 +1582,7 @@ config AEABI
config OABI_COMPAT
bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
depends on AEABI && !THUMB2_KERNEL
@@ -896,7 +896,7 @@ index cdfa6c2..f39881d 100644
help
This option preserves the old syscall interface along with the
new (ARM EABI) one. It also provides a compatibility layer to
-@@ -1629,6 +1631,7 @@ config HIGHPTE
+@@ -1649,6 +1651,7 @@ config HIGHPTE
config CPU_SW_DOMAIN_PAN
bool "Enable use of CPU domains to implement privileged no-access"
depends on MMU && !ARM_LPAE
@@ -904,7 +904,7 @@ index cdfa6c2..f39881d 100644
default y
help
Increase kernel security by ensuring that normal kernel accesses
-@@ -1705,7 +1708,7 @@ config ALIGNMENT_TRAP
+@@ -1725,7 +1728,7 @@ config ALIGNMENT_TRAP
config UACCESS_WITH_MEMCPY
bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()"
@@ -913,7 +913,7 @@ index cdfa6c2..f39881d 100644
default y if CPU_FEROCEON
help
Implement faster copy_to_user and clear_user methods for CPU
-@@ -1960,6 +1963,7 @@ config KEXEC
+@@ -1980,6 +1983,7 @@ config KEXEC
depends on (!SMP || PM_SLEEP_SMP)
depends on !CPU_V7M
select KEXEC_CORE
@@ -921,7 +921,7 @@ index cdfa6c2..f39881d 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
-@@ -2004,7 +2008,7 @@ config EFI_STUB
+@@ -2024,7 +2028,7 @@ config EFI_STUB
config EFI
bool "UEFI runtime support"
@@ -931,7 +931,7 @@ index cdfa6c2..f39881d 100644
select EFI_PARAMS_FROM_FDT
select EFI_STUB
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
-index 1098e91..d6415c8 100644
+index 19a3dcf..4a81b0e 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -7,6 +7,7 @@ config ARM_PTDUMP
@@ -956,7 +956,7 @@ index d50430c..01cc53b 100644
# but it is being used too early to link to meaningful stack_chk logic.
nossp_flags := $(call cc-option, -fno-stack-protector)
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
-index 9e10c45..5a423a2 100644
+index 9e10c45..330d7f2 100644
--- a/arch/arm/include/asm/atomic.h
+++ b/arch/arm/include/asm/atomic.h
@@ -18,17 +18,41 @@
@@ -1190,7 +1190,7 @@ index 9e10c45..5a423a2 100644
static inline int __atomic_add_unless(atomic_t *v, int a, int u)
{
int c, old;
-@@ -201,16 +300,32 @@ ATOMIC_OP(xor, ^=, eor)
+@@ -201,16 +300,29 @@ ATOMIC_OP(xor, ^=, eor)
#undef ATOMIC_OPS
#undef ATOMIC_OP_RETURN
@@ -1199,10 +1199,7 @@ index 9e10c45..5a423a2 100644
+#undef __ATOMIC_OP
#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
-+static inline int atomic_xchg_unchecked(atomic_unchecked_t *v, int new)
-+{
-+ return xchg_relaxed(&v->counter, new);
-+}
++#define atomic_xchg_unchecked(v, new) (xchg(&((v)->counter), new))
#define atomic_inc(v) atomic_add(1, v)
+static inline void atomic_inc_unchecked(atomic_unchecked_t *v)
@@ -1223,7 +1220,7 @@ index 9e10c45..5a423a2 100644
#define atomic_dec_return_relaxed(v) (atomic_sub_return_relaxed(1, v))
#define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
-@@ -221,6 +336,14 @@ typedef struct {
+@@ -221,6 +333,14 @@ typedef struct {
long long counter;
} atomic64_t;
@@ -1238,7 +1235,7 @@ index 9e10c45..5a423a2 100644
#define ATOMIC64_INIT(i) { (i) }
#ifdef CONFIG_ARM_LPAE
-@@ -237,6 +360,19 @@ static inline long long atomic64_read(const atomic64_t *v)
+@@ -237,6 +357,19 @@ static inline long long atomic64_read(const atomic64_t *v)
return result;
}
@@ -1258,7 +1255,7 @@ index 9e10c45..5a423a2 100644
static inline void atomic64_set(atomic64_t *v, long long i)
{
__asm__ __volatile__("@ atomic64_set\n"
-@@ -245,6 +381,15 @@ static inline void atomic64_set(atomic64_t *v, long long i)
+@@ -245,6 +378,15 @@ static inline void atomic64_set(atomic64_t *v, long long i)
: "r" (&v->counter), "r" (i)
);
}
@@ -1274,7 +1271,7 @@ index 9e10c45..5a423a2 100644
#else
static inline long long atomic64_read(const atomic64_t *v)
{
-@@ -259,6 +404,19 @@ static inline long long atomic64_read(const atomic64_t *v)
+@@ -259,6 +401,19 @@ static inline long long atomic64_read(const atomic64_t *v)
return result;
}
@@ -1294,7 +1291,7 @@ index 9e10c45..5a423a2 100644
static inline void atomic64_set(atomic64_t *v, long long i)
{
long long tmp;
-@@ -273,43 +431,73 @@ static inline void atomic64_set(atomic64_t *v, long long i)
+@@ -273,43 +428,73 @@ static inline void atomic64_set(atomic64_t *v, long long i)
: "r" (&v->counter), "r" (i)
: "cc");
}
@@ -1376,7 +1373,7 @@ index 9e10c45..5a423a2 100644
: "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) \
: "r" (&v->counter), "r" (i) \
: "cc"); \
-@@ -317,6 +505,9 @@ atomic64_##op##_return_relaxed(long long i, atomic64_t *v) \
+@@ -317,6 +502,9 @@ atomic64_##op##_return_relaxed(long long i, atomic64_t *v) \
return result; \
}
@@ -1386,7 +1383,7 @@ index 9e10c45..5a423a2 100644
#define ATOMIC64_OPS(op, op1, op2) \
ATOMIC64_OP(op, op1, op2) \
ATOMIC64_OP_RETURN(op, op1, op2)
-@@ -325,6 +516,7 @@ ATOMIC64_OPS(add, adds, adc)
+@@ -325,6 +513,7 @@ ATOMIC64_OPS(add, adds, adc)
ATOMIC64_OPS(sub, subs, sbc)
#define atomic64_add_return_relaxed atomic64_add_return_relaxed
@@ -1394,7 +1391,7 @@ index 9e10c45..5a423a2 100644
#define atomic64_sub_return_relaxed atomic64_sub_return_relaxed
#define atomic64_andnot atomic64_andnot
-@@ -336,7 +528,12 @@ ATOMIC64_OP(xor, eor, eor)
+@@ -336,7 +525,12 @@ ATOMIC64_OP(xor, eor, eor)
#undef ATOMIC64_OPS
#undef ATOMIC64_OP_RETURN
@@ -1407,7 +1404,7 @@ index 9e10c45..5a423a2 100644
static inline long long
atomic64_cmpxchg_relaxed(atomic64_t *ptr, long long old, long long new)
-@@ -361,6 +558,31 @@ atomic64_cmpxchg_relaxed(atomic64_t *ptr, long long old, long long new)
+@@ -361,6 +555,31 @@ atomic64_cmpxchg_relaxed(atomic64_t *ptr, long long old, long long new)
return oldval;
}
#define atomic64_cmpxchg_relaxed atomic64_cmpxchg_relaxed
@@ -1439,7 +1436,7 @@ index 9e10c45..5a423a2 100644
static inline long long atomic64_xchg_relaxed(atomic64_t *ptr, long long new)
{
-@@ -380,26 +602,60 @@ static inline long long atomic64_xchg_relaxed(atomic64_t *ptr, long long new)
+@@ -380,26 +599,60 @@ static inline long long atomic64_xchg_relaxed(atomic64_t *ptr, long long new)
return result;
}
@@ -1506,7 +1503,7 @@ index 9e10c45..5a423a2 100644
: "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
: "r" (&v->counter)
: "cc");
-@@ -423,13 +679,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
+@@ -423,13 +676,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
" teq %0, %5\n"
" teqeq %H0, %H5\n"
" moveq %1, #0\n"
@@ -1535,7 +1532,7 @@ index 9e10c45..5a423a2 100644
: "=&r" (val), "+r" (ret), "=&r" (tmp), "+Qo" (v->counter)
: "r" (&v->counter), "r" (u), "r" (a)
: "cc");
-@@ -442,10 +710,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
+@@ -442,10 +707,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
#define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0)
#define atomic64_inc(v) atomic64_add(1LL, (v))
@@ -1619,7 +1616,7 @@ index 97882f9..0cc6ef1 100644
#include <asm-generic/cmpxchg-local.h>
diff --git a/arch/arm/include/asm/cpuidle.h b/arch/arm/include/asm/cpuidle.h
-index 3848259..bee9d84 100644
+index baefe1d..29cb35a 100644
--- a/arch/arm/include/asm/cpuidle.h
+++ b/arch/arm/include/asm/cpuidle.h
@@ -32,7 +32,7 @@ struct device_node;
@@ -1850,7 +1847,7 @@ index 4355f0e..cd9168e 100644
#ifdef MULTI_USER
extern struct cpu_user_fns cpu_user;
diff --git a/arch/arm/include/asm/pgalloc.h b/arch/arm/include/asm/pgalloc.h
-index 19cfab5..3f5c7e9 100644
+index 20febb3..8d498e1 100644
--- a/arch/arm/include/asm/pgalloc.h
+++ b/arch/arm/include/asm/pgalloc.h
@@ -17,6 +17,7 @@
@@ -1945,7 +1942,7 @@ index 92fd2c8..061dae1 100644
* These are the memory types, defined to be compatible with
* pre-ARMv6 CPUs cacheable and bufferable bits: n/a,n/a,C,B
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
-index 7411466..c57e55a 100644
+index 2a029bc..a0524c7 100644
--- a/arch/arm/include/asm/pgtable-3level.h
+++ b/arch/arm/include/asm/pgtable-3level.h
@@ -80,6 +80,7 @@
@@ -2392,7 +2389,7 @@ index 7e45f69..2c047db 100644
EXPORT_SYMBOL(__csum_ipv6_magic);
diff --git a/arch/arm/kernel/cpuidle.c b/arch/arm/kernel/cpuidle.c
-index 703926e..39aa432 100644
+index a44b268e..eea8f58 100644
--- a/arch/arm/kernel/cpuidle.c
+++ b/arch/arm/kernel/cpuidle.c
@@ -19,7 +19,7 @@ extern struct of_cpuidle_method __cpuidle_method_of_table[];
@@ -2876,7 +2873,7 @@ index 69bda1a..755113a 100644
if (waddr != addr) {
flush_kernel_vmap_range(waddr, twopage ? size / 2 : size);
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
-index 4adfb46..65a3b13 100644
+index 4a803c5..6c8688f 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -114,8 +114,8 @@ void __show_regs(struct pt_regs *regs)
@@ -2908,7 +2905,7 @@ index 4adfb46..65a3b13 100644
return 0;
}
arch_initcall(gate_vma_init);
-@@ -362,91 +362,13 @@ const char *arch_vma_name(struct vm_area_struct *vma)
+@@ -362,92 +362,14 @@ const char *arch_vma_name(struct vm_area_struct *vma)
return is_gate_vma(vma) ? "[vectors]" : NULL;
}
@@ -2970,7 +2967,8 @@ index 4adfb46..65a3b13 100644
- npages = 1; /* for sigpage */
- npages += vdso_total_pages;
- down_write(&mm->mmap_sem);
+ if (down_write_killable(&mm->mmap_sem))
+ return -EINTR;
- hint = sigpage_addr(mm, npages);
- addr = get_unmapped_area(NULL, hint, npages << PAGE_SHIFT, 0, 0);
- if (IS_ERR_VALUE(addr)) {
@@ -3027,10 +3025,10 @@ index 4d93758..c2f471f92 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 71a2ff9..7753acf 100644
+index 3fa867a..d610607 100644
--- a/arch/arm/kernel/reboot.c
+++ b/arch/arm/kernel/reboot.c
-@@ -122,6 +122,7 @@ void machine_power_off(void)
+@@ -120,6 +120,7 @@ void machine_power_off(void)
if (pm_power_off)
pm_power_off();
@@ -3039,7 +3037,7 @@ index 71a2ff9..7753acf 100644
/*
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index 2c4bea3..3f5625e 100644
+index 7b53500..d25a7aa 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -113,21 +113,23 @@ EXPORT_SYMBOL(elf_hwcap);
@@ -3145,7 +3143,7 @@ index 7b8f214..ece8e28 100644
- return page;
-}
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index baee702..49e7294 100644
+index 8615216..f5be307 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -82,7 +82,7 @@ enum ipi_msg_type {
@@ -3244,10 +3242,10 @@ index e2c6da0..6155a88 100644
. = ALIGN(1<<SECTION_SHIFT);
#else
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index 72b11d9..505a0f5 100644
+index f1bde7c..6dc92ba 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
-@@ -59,7 +59,7 @@ static unsigned long hyp_default_vectors;
+@@ -58,7 +58,7 @@ static unsigned long hyp_default_vectors;
static DEFINE_PER_CPU(struct kvm_vcpu *, kvm_arm_running_vcpu);
/* The VMID used in the VTTBR */
@@ -3256,7 +3254,7 @@ index 72b11d9..505a0f5 100644
static u32 kvm_next_vmid;
static unsigned int kvm_vmid_bits __read_mostly;
static DEFINE_SPINLOCK(kvm_vmid_lock);
-@@ -393,7 +393,7 @@ void force_vm_exit(const cpumask_t *mask)
+@@ -389,7 +389,7 @@ void force_vm_exit(const cpumask_t *mask)
*/
static bool need_new_vmid_gen(struct kvm *kvm)
{
@@ -3265,7 +3263,7 @@ index 72b11d9..505a0f5 100644
}
/**
-@@ -426,7 +426,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -422,7 +422,7 @@ static void update_vttbr(struct kvm *kvm)
/* First user of a new VMID generation? */
if (unlikely(kvm_next_vmid == 0)) {
@@ -3274,7 +3272,7 @@ index 72b11d9..505a0f5 100644
kvm_next_vmid = 1;
/*
-@@ -443,7 +443,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -439,7 +439,7 @@ static void update_vttbr(struct kvm *kvm)
kvm_call_hyp(__kvm_flush_vm_context);
}
@@ -3346,10 +3344,10 @@ 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 fee2b00..943ea95 100644
+index f216909..7b6776e 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)
+@@ -718,8 +718,10 @@ void __init exynos_pm_init(void)
tmp |= pm_data->wake_disable_mask;
pmu_raw_writel(tmp, S5P_WAKEUP_MASK);
@@ -3393,7 +3391,7 @@ index 1ccbba9..7a95c29 100644
}
diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
-index 474abff..0d6a05a 100644
+index e80f0dd..0262909 100644
--- a/arch/arm/mach-mvebu/coherency.c
+++ b/arch/arm/mach-mvebu/coherency.c
@@ -163,7 +163,7 @@ exit:
@@ -3414,6 +3412,15 @@ index 474abff..0d6a05a 100644
return __arm_ioremap_caller(phys_addr, size, mtype, caller);
}
+@@ -181,7 +181,7 @@ static void __init armada_375_380_coherency_init(struct device_node *np)
+
+ coherency_cpu_base = of_iomap(np, 0);
+ arch_ioremap_caller = armada_wa_ioremap_caller;
+- pci_ioremap_set_mem_type(MT_UNCACHED);
++ pci_ioremap_set_mem_type(MT_UNCACHED_RW);
+
+ /*
+ * We should switch the PL310 to I/O coherency mode only if
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
index b6443a4..20a0b74 100644
--- a/arch/arm/mach-omap2/board-n8x0.c
@@ -3450,7 +3457,7 @@ index 65024af..70bf184 100644
.resume = dummy_cpu_resume,
.scu_prepare = dummy_scu_prepare,
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
-index c625cc1..3f47aae 100644
+index 8cd1de9..1fcee77 100644
--- a/arch/arm/mach-omap2/omap-smp.c
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -19,6 +19,7 @@
@@ -3503,7 +3510,7 @@ index 78c02b3..c94109a 100644
struct omap_device *omap_device_alloc(struct platform_device *pdev,
struct omap_hwmod **ohs, int oh_cnt);
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
-index 2af6ff6..1f2959f 100644
+index 83cb527..e82f20f 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -200,10 +200,10 @@ struct omap_hwmod_soc_ops {
@@ -3651,10 +3658,10 @@ index 7cd9865..a00b6ab 100644
#include "common.h"
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
-index 5534766..1ffd12a 100644
+index cb569b6..da9d9db 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
-@@ -442,6 +442,7 @@ config CPU_32v5
+@@ -445,6 +445,7 @@ config CPU_32v5
config CPU_32v6
bool
@@ -3662,7 +3669,7 @@ index 5534766..1ffd12a 100644
select TLS_REG_EMUL if !CPU_32v6K && !MMU
config CPU_32v6K
-@@ -596,6 +597,7 @@ config CPU_CP15_MPU
+@@ -599,6 +600,7 @@ config CPU_CP15_MPU
config CPU_USE_DOMAINS
bool
@@ -3670,7 +3677,7 @@ index 5534766..1ffd12a 100644
help
This option enables or disables the use of domain switching
via the set_fs() function.
-@@ -806,7 +808,7 @@ config NEED_KUSER_HELPERS
+@@ -809,7 +811,7 @@ config NEED_KUSER_HELPERS
config KUSER_HELPERS
bool "Enable kuser helpers in vector page" if !NEED_KUSER_HELPERS
@@ -3679,7 +3686,7 @@ index 5534766..1ffd12a 100644
default y
help
Warning: disabling this option may break user programs.
-@@ -820,7 +822,7 @@ config KUSER_HELPERS
+@@ -823,7 +825,7 @@ config KUSER_HELPERS
See Documentation/arm/kernel_user_helpers.txt for details.
However, the fixed address nature of these helpers can be used
@@ -3688,7 +3695,7 @@ index 5534766..1ffd12a 100644
exploits.
If all of the binaries and libraries which run on your platform
-@@ -835,7 +837,7 @@ config KUSER_HELPERS
+@@ -838,7 +840,7 @@ config KUSER_HELPERS
config VDSO
bool "Enable VDSO for acceleration of some system calls"
@@ -3760,7 +3767,7 @@ index 7d5f4c7..c6a0816 100644
ai_sys += 1;
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
-index 9f9d542..5189649 100644
+index c61996c..56d36df 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -44,7 +44,7 @@ struct l2c_init_data {
@@ -4136,10 +4143,10 @@ index 370581a..b985cc1 100644
free_reserved_area(&__tcm_start, &__tcm_end, -1, "TCM link");
#endif
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
-index 66a978d..e808c4b 100644
+index ff0eed2..f17f1c9 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
-@@ -406,9 +406,9 @@ __arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached)
+@@ -411,9 +411,9 @@ __arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached)
unsigned int mtype;
if (cached)
@@ -4768,10 +4775,10 @@ index a5bc92d..0bb4730 100644
+ pax_close_kernel();
}
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
-index 4f43622..22c9473 100644
+index 5a0a691..658577c 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
-@@ -72,6 +72,7 @@ config ARM64
+@@ -76,6 +76,7 @@ config ARM64
select HAVE_FTRACE_MCOUNT_RECORD
select HAVE_FUNCTION_TRACER
select HAVE_FUNCTION_GRAPH_TRACER
@@ -4780,7 +4787,7 @@ index 4f43622..22c9473 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 7e76845..e5ce349 100644
+index 0cc758c..de67415 100644
--- a/arch/arm64/Kconfig.debug
+++ b/arch/arm64/Kconfig.debug
@@ -6,6 +6,7 @@ config ARM64_PTDUMP
@@ -4792,10 +4799,19 @@ index 7e76845..e5ce349 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/arm64/include/asm/atomic.h b/arch/arm64/include/asm/atomic.h
-index f3a3586..832c720 100644
+index f3a3586..5763299 100644
--- a/arch/arm64/include/asm/atomic.h
+++ b/arch/arm64/include/asm/atomic.h
-@@ -146,5 +146,15 @@
+@@ -98,6 +98,8 @@
+ #define __atomic_add_unless(v, a, u) ___atomic_add_unless(v, a, u,)
+ #define atomic_andnot atomic_andnot
+
++#define atomic_inc_return_unchecked_relaxed(v) atomic_add_return_relaxed(1, (v))
++
+ /*
+ * 64-bit atomic operations.
+ */
+@@ -146,5 +148,16 @@
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
@@ -4808,9 +4824,26 @@ index f3a3586..832c720 100644
+#define atomic64_inc_return_unchecked(v) atomic64_inc_return(v)
+#define atomic64_dec_unchecked(v) atomic64_dec(v)
+#define atomic64_cmpxchg_unchecked(v, o, n) atomic64_cmpxchg((v), (o), (n))
++#define atomic64_xchg_unchecked(v, n) atomic64_xchg((v), (n))
+
#endif
#endif
+diff --git a/arch/arm64/include/asm/cache.h b/arch/arm64/include/asm/cache.h
+index 5082b30..79247453 100644
+--- a/arch/arm64/include/asm/cache.h
++++ b/arch/arm64/include/asm/cache.h
+@@ -18,8 +18,10 @@
+
+ #include <asm/cachetype.h>
+
++#include <linux/const.h>
++
+ #define L1_CACHE_SHIFT 7
+-#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
++#define L1_CACHE_BYTES (_AC(1,UL) << L1_CACHE_SHIFT)
+
+ /*
+ * Memory returned by kmalloc() may be used for DMA, so we must make
diff --git a/arch/arm64/include/asm/percpu.h b/arch/arm64/include/asm/percpu.h
index 0a456be..7799ff5 100644
--- a/arch/arm64/include/asm/percpu.h
@@ -4837,7 +4870,7 @@ index 0a456be..7799ff5 100644
default:
BUILD_BUG();
diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h
-index ff98585..65eced1 100644
+index d25f4f1..0bd8842 100644
--- a/arch/arm64/include/asm/pgalloc.h
+++ b/arch/arm64/include/asm/pgalloc.h
@@ -51,6 +51,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
@@ -4852,6 +4885,20 @@ index ff98585..65eced1 100644
#else
static inline void __pud_populate(pud_t *pud, phys_addr_t pmd, pudval_t prot)
{
+diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
+index 46472a9..9f2efc0 100644
+--- a/arch/arm64/include/asm/pgtable.h
++++ b/arch/arm64/include/asm/pgtable.h
+@@ -23,6 +23,9 @@
+ #include <asm/pgtable-hwdef.h>
+ #include <asm/pgtable-prot.h>
+
++#define ktla_ktva(addr) (addr)
++#define ktva_ktla(addr) (addr)
++
+ /*
+ * VMALLOC range.
+ *
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
@@ -4909,10 +4956,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 0685d74..6898549 100644
+index 9e397a5..6cd98e5 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
-@@ -114,6 +114,7 @@ static inline void set_fs(mm_segment_t fs)
+@@ -101,6 +101,7 @@ static inline void set_fs(mm_segment_t fs)
flag; \
})
@@ -4920,8 +4967,82 @@ index 0685d74..6898549 100644
#define access_ok(type, addr, size) __range_ok(addr, size)
#define user_addr_max get_fs
+diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
+index 6cd2612..56d72e5c 100644
+--- a/arch/arm64/kernel/process.c
++++ b/arch/arm64/kernel/process.c
+@@ -63,7 +63,7 @@ EXPORT_SYMBOL(__stack_chk_guard);
+ /*
+ * Function pointers to optional machine specific functions
+ */
+-void (*pm_power_off)(void);
++void (* pm_power_off)(void);
+ EXPORT_SYMBOL_GPL(pm_power_off);
+
+ void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
+@@ -109,7 +109,7 @@ void machine_shutdown(void)
+ * activity (executing tasks, handling interrupts). smp_send_stop()
+ * achieves this.
+ */
+-void machine_halt(void)
++void __noreturn machine_halt(void)
+ {
+ local_irq_disable();
+ smp_send_stop();
+@@ -122,12 +122,13 @@ void machine_halt(void)
+ * achieves this. When the system power is turned off, it will take all CPUs
+ * with it.
+ */
+-void machine_power_off(void)
++void __noreturn machine_power_off(void)
+ {
+ local_irq_disable();
+ smp_send_stop();
+ if (pm_power_off)
+ pm_power_off();
++ while(1);
+ }
+
+ /*
+@@ -139,7 +140,7 @@ void machine_power_off(void)
+ * executing pre-reset code, and using RAM that the primary CPU's code wishes
+ * to use. Implementing such co-ordination would be essentially impossible.
+ */
+-void machine_restart(char *cmd)
++void __noreturn machine_restart(char *cmd)
+ {
+ /* Disable interrupts first */
+ local_irq_disable();
+diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
+index d9751a4..aeda309 100644
+--- a/arch/arm64/kernel/stacktrace.c
++++ b/arch/arm64/kernel/stacktrace.c
+@@ -92,8 +92,8 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame)
+ struct pt_regs *irq_args;
+ unsigned long orig_sp = IRQ_STACK_TO_TASK_STACK(irq_stack_ptr);
+
+- if (object_is_on_stack((void *)orig_sp) &&
+- object_is_on_stack((void *)frame->fp)) {
++ if (object_starts_on_stack((void *)orig_sp) &&
++ object_starts_on_stack((void *)frame->fp)) {
+ frame->sp = orig_sp;
+
+ /* orig_sp is the saved pt_regs, find the elr */
+diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
+index 2a43012..3409956 100644
+--- a/arch/arm64/kernel/traps.c
++++ b/arch/arm64/kernel/traps.c
+@@ -420,7 +420,7 @@ asmlinkage long do_ni_syscall(struct pt_regs *regs)
+ __show_regs(regs);
+ }
+
+- return sys_ni_syscall();
++ return -ENOSYS;
+ }
+
+ static const char *esr_class_str[] = {
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
-index a6e757c..00fc586 100644
+index c566ec8..3e01953 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -132,7 +132,7 @@ static void __dma_free_coherent(struct device *dev, size_t size,
@@ -5195,10 +5316,10 @@ index 69952c18..4fa2908 100644
#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
-index b534eba..ace220a 100644
+index e109ee9..a426a85 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
-@@ -518,6 +518,7 @@ config KEXEC
+@@ -519,6 +519,7 @@ config KEXEC
bool "kexec system call"
depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
select KEXEC_CORE
@@ -5207,15 +5328,15 @@ index b534eba..ace220a 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/ia64/Makefile b/arch/ia64/Makefile
-index 970d0bd..e750b9b 100644
+index c100d78..07538cc 100644
--- a/arch/ia64/Makefile
+++ b/arch/ia64/Makefile
@@ -98,5 +98,6 @@ endef
- archprepare: make_nr_irqs_h FORCE
- PHONY += make_nr_irqs_h FORCE
+ archprepare: make_nr_irqs_h
+ PHONY += make_nr_irqs_h
+make_nr_irqs_h: KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS))
- make_nr_irqs_h: FORCE
+ make_nr_irqs_h:
$(Q)$(MAKE) $(build)=arch/ia64/kernel include/generated/nr-irqs.h
diff --git a/arch/ia64/include/asm/atomic.h b/arch/ia64/include/asm/atomic.h
index 8dfb5f6..d58bd69 100644
@@ -5696,7 +5817,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 b38700ae..15f5c87 100644
+index db1b7da..8e13684 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)
@@ -5739,18 +5860,18 @@ index 5c3f688..f8cc1b3 100644
# platform specific definitions
include arch/mips/Kbuild.platforms
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index 2018c2b..fdd3972 100644
+index ac91939..a1df96d 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -49,6 +49,7 @@ config MIPS
- select GENERIC_CMOS_UPDATE
+@@ -50,6 +50,7 @@ config MIPS
select HAVE_MOD_ARCH_SPECIFIC
+ select HAVE_NMI
select VIRT_TO_BUS
+ select HAVE_GCC_PLUGINS
select MODULES_USE_ELF_REL if MODULES
select MODULES_USE_ELF_RELA if MODULES && 64BIT
select CLONE_BACKWARDS
-@@ -2648,6 +2649,7 @@ source "kernel/Kconfig.preempt"
+@@ -2775,6 +2776,7 @@ source "kernel/Kconfig.preempt"
config KEXEC
bool "Kexec system call"
select KEXEC_CORE
@@ -6408,10 +6529,10 @@ index b4db69f..8f3b093 100644
#define SMP_CACHE_SHIFT L1_CACHE_SHIFT
#define SMP_CACHE_BYTES L1_CACHE_BYTES
diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h
-index e090fc3..eae24400 100644
+index f5f4571..38cf967 100644
--- a/arch/mips/include/asm/elf.h
+++ b/arch/mips/include/asm/elf.h
-@@ -425,6 +425,13 @@ extern const char *__elf_platform;
+@@ -458,6 +458,13 @@ extern const char *__elf_platform;
#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
#endif
@@ -6567,7 +6688,7 @@ index 21ed715..774a251 100644
typedef struct { unsigned long long pte; } pte_t;
#define pte_val(x) ((x).pte)
diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
-index b336037..5b874cc 100644
+index 93c079a..1d6bf7c 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -37,6 +37,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
@@ -6583,7 +6704,7 @@ index b336037..5b874cc 100644
/*
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
-index 65bf2c0..09b7819 100644
+index 7d44e88..6f28830 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -20,6 +20,9 @@
@@ -6651,10 +6772,10 @@ index 7f109d4..40b1195 100644
likely(__access_ok((addr), (size), __access_mask))
diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c
-index 1b992c6..4f250db 100644
+index 58ad63d..051b4b7 100644
--- a/arch/mips/kernel/binfmt_elfn32.c
+++ b/arch/mips/kernel/binfmt_elfn32.c
-@@ -50,6 +50,13 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
+@@ -36,6 +36,13 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
#undef ELF_ET_DYN_BASE
#define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2)
@@ -6669,10 +6790,10 @@ index 1b992c6..4f250db 100644
#include <linux/module.h>
#include <linux/elfcore.h>
diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c
-index abd3aff..ab1b84a 100644
+index 49fb881..b9ab7c2 100644
--- a/arch/mips/kernel/binfmt_elfo32.c
+++ b/arch/mips/kernel/binfmt_elfo32.c
-@@ -70,6 +70,13 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
+@@ -40,6 +40,13 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
#undef ELF_ET_DYN_BASE
#define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2)
@@ -6700,7 +6821,7 @@ index 44a1f79..2bd6aa3 100644
void __init gt641xx_irq_init(void)
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c
-index 8eb5af8..2baf465 100644
+index f25f7ea..19e1c62 100644
--- a/arch/mips/kernel/irq.c
+++ b/arch/mips/kernel/irq.c
@@ -34,17 +34,17 @@ void ack_bad_irq(unsigned int irq)
@@ -6724,7 +6845,7 @@ index 8eb5af8..2baf465 100644
}
void __init init_IRQ(void)
-@@ -58,6 +58,8 @@ void __init init_IRQ(void)
+@@ -61,6 +61,8 @@ void __init init_IRQ(void)
}
#ifdef CONFIG_DEBUG_STACKOVERFLOW
@@ -6733,7 +6854,7 @@ index 8eb5af8..2baf465 100644
static inline void check_stack_overflow(void)
{
unsigned long sp;
-@@ -73,6 +75,7 @@ static inline void check_stack_overflow(void)
+@@ -76,6 +78,7 @@ static inline void check_stack_overflow(void)
printk("do_IRQ: stack overflow: %ld\n",
sp - sizeof(struct thread_info));
dump_stack();
@@ -6742,7 +6863,7 @@ index 8eb5af8..2baf465 100644
}
#else
diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c
-index fa3f9eb..98ada7a 100644
+index adda3ff..ac067e2 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)
@@ -6755,10 +6876,10 @@ index fa3f9eb..98ada7a 100644
/* Run the generated entry code */
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
-index d83730c..ced3459 100644
+index 813ed78..0acf903 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
-@@ -539,18 +539,6 @@ out:
+@@ -531,18 +531,6 @@ out:
return pc;
}
@@ -6778,10 +6899,10 @@ index d83730c..ced3459 100644
{
struct pt_regs *regs;
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
-index 4285d8b..febcfeb 100644
+index 0dcf691..b75d89a 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
-@@ -881,6 +881,10 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -882,6 +882,10 @@ long arch_ptrace(struct task_struct *child, long request,
return ret;
}
@@ -6792,7 +6913,7 @@ index 4285d8b..febcfeb 100644
/*
* Notification of system call entry/exit
* - triggered by current->work.syscall_trace
-@@ -899,6 +903,11 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
+@@ -900,6 +904,11 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
tracehook_report_syscall_entry(regs))
ret = -1;
@@ -6874,10 +6995,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 5aa1d5c..491df0d 100644
+index 4a1712b..a1348b9 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
-@@ -698,7 +698,18 @@ asmlinkage void do_ov(struct pt_regs *regs)
+@@ -695,7 +695,18 @@ asmlinkage void do_ov(struct pt_regs *regs)
};
prev_state = exception_enter();
@@ -7069,10 +7190,10 @@ index 4b88fa0..b16bc17 100644
tsk->thread.error_code = write;
if (show_unhandled_signals &&
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
-index 7e5fa09..65c1072 100644
+index 9b58eb5..b1f2558 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
-@@ -468,10 +468,10 @@ void __init mem_init(void)
+@@ -472,10 +472,10 @@ void __init mem_init(void)
#ifdef CONFIG_64BIT
if ((unsigned long) &_text > (unsigned long) CKSEG0)
@@ -7158,7 +7279,7 @@ index 3530376..754dde3 100644
}
}
diff --git a/arch/mips/sgi-ip27/ip27-nmi.c b/arch/mips/sgi-ip27/ip27-nmi.c
-index a2358b4..7cead4f 100644
+index cfceaea..65deeb4 100644
--- a/arch/mips/sgi-ip27/ip27-nmi.c
+++ b/arch/mips/sgi-ip27/ip27-nmi.c
@@ -187,9 +187,9 @@ void
@@ -7183,7 +7304,7 @@ index a2358b4..7cead4f 100644
/*
diff --git a/arch/mips/sni/rm200.c b/arch/mips/sni/rm200.c
-index a046b30..6799527 100644
+index 160b880..3b53fdc 100644
--- a/arch/mips/sni/rm200.c
+++ b/arch/mips/sni/rm200.c
@@ -270,7 +270,7 @@ spurious_8259A_irq:
@@ -7351,7 +7472,7 @@ index 78c9fd3..42fa66a 100644
instruction set this CPU supports. This could be done in user space,
but it's not easy, and we've already done it here. */
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
-index f2fd327..2bb2a26 100644
+index f08dda3..ea6aa1b 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -61,6 +61,11 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
@@ -7365,8 +7486,8 @@ index f2fd327..2bb2a26 100644
+
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
{
- pmd_t *pmd = (pmd_t *)__get_free_pages(GFP_KERNEL|__GFP_REPEAT,
-@@ -97,6 +102,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
+ pmd_t *pmd = (pmd_t *)__get_free_pages(GFP_KERNEL, PMD_ORDER);
+@@ -96,6 +101,7 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
#define pmd_free(mm, x) do { } while (0)
#define pgd_populate(mm, pmd, pte) BUG()
@@ -7397,10 +7518,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 7955e43..7f3661d 100644
+index 0f59fd9..c502784 100644
--- a/arch/parisc/include/asm/uaccess.h
+++ b/arch/parisc/include/asm/uaccess.h
-@@ -243,10 +243,10 @@ static inline unsigned long __must_check copy_from_user(void *to,
+@@ -220,10 +220,10 @@ static inline unsigned long __must_check copy_from_user(void *to,
const void __user *from,
unsigned long n)
{
@@ -7751,10 +7872,10 @@ index 16dbe81..db2ed24 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 7cd32c0..30c918b 100644
+index 0a9d439..2b95815 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
-@@ -144,6 +144,7 @@ config PPC
+@@ -146,6 +146,7 @@ config PPC
select ARCH_USE_BUILTIN_BSWAP
select OLD_SIGSUSPEND
select OLD_SIGACTION if PPC32
@@ -7762,7 +7883,7 @@ index 7cd32c0..30c918b 100644
select HAVE_DEBUG_STACKOVERFLOW
select HAVE_IRQ_EXIT_ON_IRQ_STACK
select ARCH_USE_CMPXCHG_LOCKREF if PPC64
-@@ -439,6 +440,7 @@ config KEXEC
+@@ -443,6 +444,7 @@ config KEXEC
bool "kexec system call"
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) || PPC_BOOK3E
select KEXEC_CORE
@@ -7771,10 +7892,14 @@ index 7cd32c0..30c918b 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 ae0751e..c7fad52 100644
+index ae0751e..70e03dc 100644
--- a/arch/powerpc/include/asm/atomic.h
+++ b/arch/powerpc/include/asm/atomic.h
-@@ -12,6 +12,11 @@
+@@ -9,9 +9,15 @@
+ #include <linux/types.h>
+ #include <asm/cmpxchg.h>
+ #include <asm/barrier.h>
++#include <asm/asm-compat.h>
#define ATOMIC_INIT(i) { (i) }
@@ -7786,7 +7911,7 @@ index ae0751e..c7fad52 100644
/*
* 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)
+@@ -39,38 +45,79 @@ static __inline__ int atomic_read(const atomic_t *v)
return t;
}
@@ -7819,8 +7944,8 @@ index ae0751e..c7fad52 100644
+ " bf 4*cr0+so, 3f\n" \
+ "2: .long 0x00c00b00\n" \
+ "3:\n"
-+#define __OVERFLOW_EXTABLE \
-+ "\n4:\n"
++#define __OVERFLOW_EXTABLE \
++ "\n4:\n" \
+ _ASM_EXTABLE(2b, 4b)
+#else
+#define __REFCOUNT_OP(op) op
@@ -7872,7 +7997,7 @@ index ae0751e..c7fad52 100644
: "=&r" (t), "+m" (v->counter) \
: "r" (a), "r" (&v->counter) \
: "cc"); \
-@@ -78,6 +124,9 @@ static inline int atomic_##op##_return_relaxed(int a, atomic_t *v) \
+@@ -78,6 +125,9 @@ static inline int atomic_##op##_return_relaxed(int a, atomic_t *v) \
return t; \
}
@@ -7882,7 +8007,12 @@ index ae0751e..c7fad52 100644
#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)
+@@ -90,44 +140,34 @@ ATOMIC_OP(or, or)
+ ATOMIC_OP(xor, xor)
+
+ #define atomic_add_return_relaxed atomic_add_return_relaxed
++#define atomic_add_return_unchecked_relaxed atomic_add_return_unchecked_relaxed
+ #define atomic_sub_return_relaxed atomic_sub_return_relaxed
#undef ATOMIC_OPS
#undef ATOMIC_OP_RETURN_RELAXED
@@ -7938,13 +8068,13 @@ index ae0751e..c7fad52 100644
}
/*
-@@ -140,36 +178,23 @@ static __inline__ int atomic_inc_return_relaxed(atomic_t *v)
+@@ -139,42 +179,22 @@ static __inline__ int atomic_inc_return_relaxed(atomic_t *v)
+ * other cases.
*/
#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
-
+-
-static __inline__ void atomic_dec(atomic_t *v)
-+static __inline__ int atomic_inc_and_test_unchecked(atomic_unchecked_t *v)
- {
+-{
- int t;
-
- __asm__ __volatile__(
@@ -7956,10 +8086,11 @@ index ae0751e..c7fad52 100644
- : "=&r" (t), "+m" (v->counter)
- : "r" (&v->counter)
- : "cc", "xer");
-+ return atomic_add_return_unchecked(1, v) == 0;
- }
-
+-}
+-
-static __inline__ int atomic_dec_return_relaxed(atomic_t *v)
++#define atomic_inc_and_test_unchecked(v) (atomic_add_return_unchecked(1, v) == 0)
++
+/*
+ * atomic_dec - decrement atomic variable
+ * @v: pointer of type atomic_t
@@ -7987,8 +8118,13 @@ index ae0751e..c7fad52 100644
+ atomic_sub_unchecked(1, v);
}
- #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_inc_return_relaxed atomic_inc_return_relaxed
+-#define atomic_dec_return_relaxed atomic_dec_return_relaxed
+-
+ #define atomic_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n)))
+ #define atomic_cmpxchg_relaxed(v, o, n) \
+ cmpxchg_relaxed(&((v)->counter), (o), (n))
+@@ -184,6 +204,13 @@ 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))
@@ -7997,15 +8133,12 @@ index ae0751e..c7fad52 100644
+ return cmpxchg(&(v->counter), old, new);
+}
+
-+static inline int atomic_xchg_unchecked(atomic_unchecked_t *v, int new)
-+{
-+ return xchg(&(v->counter), new);
-+}
++#define atomic_xchg_unchecked(v, new) (xchg(&((v)->counter), new))
+
/**
* __atomic_add_unless - add unless the number is a given value
* @v: pointer of type atomic_t
-@@ -201,11 +236,27 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -201,11 +228,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\
@@ -8035,7 +8168,7 @@ index ae0751e..c7fad52 100644
PPC_ATOMIC_EXIT_BARRIER
" subf %0,%2,%0 \n\
2:"
-@@ -291,37 +342,59 @@ static __inline__ long atomic64_read(const atomic64_t *v)
+@@ -291,37 +334,59 @@ static __inline__ long atomic64_read(const atomic64_t *v)
return t;
}
@@ -8100,7 +8233,7 @@ index ae0751e..c7fad52 100644
: "=&r" (t), "+m" (v->counter) \
: "r" (a), "r" (&v->counter) \
: "cc"); \
-@@ -329,6 +402,9 @@ atomic64_##op##_return_relaxed(long a, atomic64_t *v) \
+@@ -329,6 +394,9 @@ atomic64_##op##_return_relaxed(long a, atomic64_t *v) \
return t; \
}
@@ -8110,7 +8243,7 @@ index ae0751e..c7fad52 100644
#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)
+@@ -344,38 +412,33 @@ ATOMIC64_OP(xor, xor)
#undef ATOPIC64_OPS
#undef ATOMIC64_OP_RETURN_RELAXED
@@ -8168,7 +8301,7 @@ index ae0751e..c7fad52 100644
}
/*
-@@ -388,34 +459,18 @@ static __inline__ long atomic64_inc_return_relaxed(atomic64_t *v)
+@@ -388,39 +451,20 @@ static __inline__ long atomic64_inc_return_relaxed(atomic64_t *v)
*/
#define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
@@ -8194,8 +8327,9 @@ index ae0751e..c7fad52 100644
- : "=&r" (t), "+m" (v->counter)
- : "r" (&v->counter)
- : "cc", "xer");
--}
--
++ atomic64_sub_unchecked(1, v);
+ }
+
-static __inline__ long atomic64_dec_return_relaxed(atomic64_t *v)
-{
- long t;
@@ -8210,11 +8344,15 @@ index ae0751e..c7fad52 100644
- : "cc", "xer");
-
- return t;
-+ atomic64_sub_unchecked(1, v);
- }
+-}
+-
+-#define atomic64_inc_return_relaxed atomic64_inc_return_relaxed
+-#define atomic64_dec_return_relaxed atomic64_dec_return_relaxed
+-
+ #define atomic64_sub_and_test(a, v) (atomic64_sub_return((a), (v)) == 0)
+ #define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0)
- #define atomic64_inc_return_relaxed atomic64_inc_return_relaxed
-@@ -457,6 +512,16 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v)
+@@ -457,6 +501,13 @@ 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))
@@ -8223,15 +8361,12 @@ index ae0751e..c7fad52 100644
+ return cmpxchg(&(v->counter), old, new);
+}
+
-+static inline long atomic64_xchg_unchecked(atomic64_unchecked_t *v, long new)
-+{
-+ return xchg(&(v->counter), new);
-+}
++#define atomic64_xchg_unchecked(v, new) (xchg(&((v)->counter), new))
+
/**
* atomic64_add_unless - add unless the number is a given value
* @v: pointer of type atomic64_t
-@@ -472,13 +537,29 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
+@@ -472,13 +523,29 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
__asm__ __volatile__ (
PPC_ATOMIC_ENTRY_BARRIER
@@ -8265,7 +8400,7 @@ index ae0751e..c7fad52 100644
2:"
: "=&r" (t)
diff --git a/arch/powerpc/include/asm/book3s/32/hash.h b/arch/powerpc/include/asm/book3s/32/hash.h
-index 264b754..187b7f6 100644
+index 880db13..017716c 100644
--- a/arch/powerpc/include/asm/book3s/32/hash.h
+++ b/arch/powerpc/include/asm/book3s/32/hash.h
@@ -20,6 +20,7 @@
@@ -8276,6 +8411,34 @@ index 264b754..187b7f6 100644
#define _PAGE_COHERENT 0x010 /* M: enforce memory coherence (SMP systems) */
#define _PAGE_NO_CACHE 0x020 /* I: cache inhibit */
#define _PAGE_WRITETHRU 0x040 /* W: cache write-through */
+diff --git a/arch/powerpc/include/asm/book3s/64/pgalloc.h b/arch/powerpc/include/asm/book3s/64/pgalloc.h
+index cd5e7aa..7709061 100644
+--- a/arch/powerpc/include/asm/book3s/64/pgalloc.h
++++ b/arch/powerpc/include/asm/book3s/64/pgalloc.h
+@@ -91,6 +91,11 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
+ pgd_set(pgd, __pgtable_ptr_val(pud) | PGD_VAL_BITS);
+ }
+
++static inline void pgd_populate_kernel(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
++{
++ pgd_populate(mm, pgd, pud);
++}
++
+ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
+ {
+ return kmem_cache_alloc(PGT_CACHE(PUD_INDEX_SIZE), GFP_KERNEL);
+@@ -106,6 +111,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
+ pud_set(pud, __pgtable_ptr_val(pmd) | PUD_VAL_BITS);
+ }
+
++static inline void pud_populate_kernel(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
++{
++ pud_populate_kernel(mm, pud, pmd);
++}
++
+ static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
+ unsigned long address)
+ {
diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h
index ffbafbf..71d037f 100644
--- a/arch/powerpc/include/asm/cache.h
@@ -8438,8 +8601,40 @@ index 2563c43..d6fdd62 100644
{
return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0);
}
+diff --git a/arch/powerpc/include/asm/nohash/64/pgalloc.h b/arch/powerpc/include/asm/nohash/64/pgalloc.h
+index 897d2e1..399f34f 100644
+--- a/arch/powerpc/include/asm/nohash/64/pgalloc.h
++++ b/arch/powerpc/include/asm/nohash/64/pgalloc.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_kernel(MM, PGD, PUD) pgd_populate((MM), (PGD), (PUD))
+
+ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
+ {
+@@ -70,6 +71,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
+ pud_set(pud, (unsigned long)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)
+ {
+@@ -139,6 +145,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))
+
+ static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
+ pte_t *pte)
diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
-index ab3d897..cbc0693 100644
+index 51db3a3..0bd72ae 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;
@@ -8465,10 +8660,10 @@ index ab3d897..cbc0693 100644
/*
* Use the top bit of the higher-level page table entries to indicate whether
diff --git a/arch/powerpc/include/asm/page_64.h b/arch/powerpc/include/asm/page_64.h
-index d908a46..3753f71 100644
+index dd5f071..0470718 100644
--- a/arch/powerpc/include/asm/page_64.h
+++ b/arch/powerpc/include/asm/page_64.h
-@@ -172,15 +172,18 @@ do { \
+@@ -169,15 +169,18 @@ do { \
* stack by default, so in the absence of a PT_GNU_STACK program header
* we turn execute permission off.
*/
@@ -8489,44 +8684,8 @@ 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 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, __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, __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)
- {
-@@ -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 47897a3..6d21683 100644
+index ee09e99..7e580ee 100644
--- a/arch/powerpc/include/asm/pgtable.h
+++ b/arch/powerpc/include/asm/pgtable.h
@@ -1,6 +1,7 @@
@@ -8538,7 +8697,7 @@ index 47897a3..6d21683 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 166d863..7d5ebdf 100644
+index a0948f4..ddcf6be 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -261,6 +261,7 @@
@@ -8563,10 +8722,18 @@ index e1afd4c..d75924a 100644
extern void smp_send_debugger_break(void);
extern void start_secondary_resume(void);
diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h
-index 523673d..4aeef3b 100644
+index 523673d..10dc784 100644
--- a/arch/powerpc/include/asm/spinlock.h
+++ b/arch/powerpc/include/asm/spinlock.h
-@@ -202,13 +202,29 @@ static inline long __arch_read_trylock(arch_rwlock_t *rw)
+@@ -27,6 +27,7 @@
+ #include <asm/asm-compat.h>
+ #include <asm/synch.h>
+ #include <asm/ppc-opcode.h>
++#include <asm/atomic.h>
+
+ #ifdef CONFIG_PPC64
+ /* use 0x800000yy when locked, where yy == CPU number */
+@@ -202,13 +203,29 @@ static inline long __arch_read_trylock(arch_rwlock_t *rw)
__asm__ __volatile__(
"1: " PPC_LWARX(%0,0,%1,1) "\n"
__DO_SIGN_EXTEND
@@ -8599,7 +8766,7 @@ index 523673d..4aeef3b 100644
: "r" (&rw->lock)
: "cr0", "xer", "memory");
-@@ -284,11 +300,27 @@ static inline void arch_read_unlock(arch_rwlock_t *rw)
+@@ -284,11 +301,27 @@ static inline void arch_read_unlock(arch_rwlock_t *rw)
__asm__ __volatile__(
"# read_unlock\n\t"
PPC_RELEASE_BARRIER
@@ -8661,10 +8828,10 @@ index e40010a..d3c3d6b 100644
#endif /* __KERNEL__ */
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
-index 7efee4a..48d47cc 100644
+index 8febc3f..a4614f3 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
-@@ -101,6 +101,8 @@ static inline struct thread_info *current_thread_info(void)
+@@ -103,6 +103,8 @@ static inline struct thread_info *current_thread_info(void)
#if defined(CONFIG_PPC64)
#define TIF_ELF2ABI 18 /* function descriptors must die! */
#endif
@@ -8673,7 +8840,7 @@ index 7efee4a..48d47cc 100644
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
-@@ -119,9 +121,10 @@ static inline struct thread_info *current_thread_info(void)
+@@ -121,9 +123,10 @@ static inline struct thread_info *current_thread_info(void)
#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
#define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE)
#define _TIF_NOHZ (1<<TIF_NOHZ)
@@ -8913,10 +9080,10 @@ index 488e631..6cdd928 100644
ld r4,_DAR(r1)
bl bad_page_fault
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
-index 2b66f25..80884d4 100644
+index 8bcc1b4..d2acf44 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
-@@ -1578,10 +1578,10 @@ handle_page_fault:
+@@ -1488,10 +1488,10 @@ handle_page_fault:
11: ld r4,_DAR(r1)
ld r5,_DSISR(r1)
addi r3,r1,STACK_FRAME_OVERHEAD
@@ -8929,10 +9096,10 @@ index 2b66f25..80884d4 100644
addi r3,r1,STACK_FRAME_OVERHEAD
lwz r4,_DAR(r1)
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
-index 290559d..0094ddb 100644
+index 3cb46a3..a8c0477 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
-@@ -460,6 +460,8 @@ void migrate_irqs(void)
+@@ -461,6 +461,8 @@ void migrate_irqs(void)
}
#endif
@@ -8941,7 +9108,7 @@ index 290559d..0094ddb 100644
static inline void check_stack_overflow(void)
{
#ifdef CONFIG_DEBUG_STACKOVERFLOW
-@@ -472,6 +474,7 @@ static inline void check_stack_overflow(void)
+@@ -473,6 +475,7 @@ static inline void check_stack_overflow(void)
pr_err("do_IRQ: stack overflow: %ld\n",
sp - sizeof(struct thread_info));
dump_stack();
@@ -8992,10 +9159,10 @@ index 5a7a78f..c0e4207 100644
sechdrs, module);
if (!module->arch.tramp)
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
-index bec85055..8a6b0c2b 100644
+index 0b93893..4c72fc1 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
-@@ -1318,8 +1318,8 @@ void show_regs(struct pt_regs * regs)
+@@ -1321,8 +1321,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
*/
@@ -9006,7 +9173,7 @@ index bec85055..8a6b0c2b 100644
#endif
show_stack(current, (unsigned long *) regs->gpr[1]);
if (!user_mode(regs))
-@@ -1839,10 +1839,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1843,10 +1843,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
newsp = stack[0];
ip = stack[STACK_FRAME_LR_SAVE];
if (!firstframe || ip != lr) {
@@ -9019,7 +9186,7 @@ index bec85055..8a6b0c2b 100644
(void *)current->ret_stack[curr_frame].ret);
curr_frame--;
}
-@@ -1862,7 +1862,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1866,7 +1866,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;
@@ -9028,7 +9195,7 @@ index bec85055..8a6b0c2b 100644
regs->trap, (void *)regs->nip, (void *)lr);
firstframe = 1;
}
-@@ -1899,13 +1899,6 @@ void notrace __ppc64_runlatch_off(void)
+@@ -1903,13 +1903,6 @@ void notrace __ppc64_runlatch_off(void)
}
#endif /* CONFIG_PPC64 */
@@ -9043,7 +9210,7 @@ index bec85055..8a6b0c2b 100644
{
unsigned long rnd = 0;
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
-index 30a03c0..e2d507b 100644
+index 060b140..b67ca8c 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -1801,6 +1801,10 @@ static int do_seccomp(struct pt_regs *regs)
@@ -9108,7 +9275,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 9229ba6..f6aaa3c 100644
+index 9229ba6..ddd4d5e 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -36,6 +36,7 @@
@@ -9148,7 +9315,7 @@ index 9229ba6..f6aaa3c 100644
+
+ if (reason & REASON_ILLEGAL) {
+ /* Check if PaX bad instruction */
-+ if (!probe_kernel_address(regs->nip, bkpt) && bkpt == 0xc00b00) {
++ if (!probe_kernel_address((void *)regs->nip, bkpt) && bkpt == 0xc00b00) {
+ current->thread.trap_nr = 0;
+ pax_report_refcount_overflow(regs);
+ /* fixup_exception() for PowerPC does not exist, simulate its job */
@@ -9166,7 +9333,7 @@ index 9229ba6..f6aaa3c 100644
* has no FPU, in that case the reason flags will be 0 */
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
-index def1b8b..51ae209 100644
+index 6767605..75520c0 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -34,6 +34,7 @@
@@ -9186,7 +9353,7 @@ index def1b8b..51ae209 100644
/* vDSO has a problem and was disabled, just don't "enable" it for the
* process
-@@ -199,7 +200,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
+@@ -200,7 +201,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
vdso_base = get_unmapped_area(NULL, vdso_base,
(vdso_pages << PAGE_SHIFT) +
((VDSO_ALIGNMENT - 1) & PAGE_MASK),
@@ -9331,10 +9498,10 @@ index a67c6d7..a662e6d 100644
goto bail;
}
diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
-index 4087705..7e75693 100644
+index 2f1e443..de888bf 100644
--- a/arch/powerpc/mm/mmap.c
+++ b/arch/powerpc/mm/mmap.c
-@@ -86,6 +86,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -194,6 +194,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
unsigned long random_factor = 0UL;
@@ -9345,7 +9512,7 @@ index 4087705..7e75693 100644
if (current->flags & PF_RANDOMIZE)
random_factor = arch_mmap_rnd();
-@@ -95,9 +99,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -205,9 +209,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
*/
if (mmap_is_legacy()) {
mm->mmap_base = TASK_UNMAPPED_BASE;
@@ -9368,7 +9535,7 @@ index 4087705..7e75693 100644
}
}
diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
-index 42954f0..a8252e2 100644
+index 2b27458..7c7c59b 100644
--- a/arch/powerpc/mm/slice.c
+++ b/arch/powerpc/mm/slice.c
@@ -105,7 +105,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr,
@@ -9393,7 +9560,7 @@ index 42954f0..a8252e2 100644
while (addr < TASK_SIZE) {
info.low_limit = addr;
if (!slice_scan_available(addr, available, 1, &addr))
-@@ -409,6 +415,11 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
+@@ -410,6 +416,11 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
if (fixed && addr > (mm->task_size - len))
return -ENOMEM;
@@ -9405,7 +9572,7 @@ index 42954f0..a8252e2 100644
/* If hint, make sure it matches our alignment restrictions */
if (!fixed && addr) {
addr = _ALIGN_UP(addr, 1ul << pshift);
-@@ -554,10 +565,10 @@ unsigned long arch_get_unmapped_area(struct file *filp,
+@@ -555,10 +566,10 @@ unsigned long arch_get_unmapped_area(struct file *filp,
}
unsigned long arch_get_unmapped_area_topdown(struct file *filp,
@@ -9554,10 +9721,10 @@ index e0900dd..72d683d 100644
return n;
}
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
-index 7873e17..d21af5b 100644
+index fbc0789..e7962a1 100644
--- a/arch/s390/kernel/module.c
+++ b/arch/s390/kernel/module.c
-@@ -159,11 +159,11 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
+@@ -163,11 +163,11 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
/* Increase core size by size of got & plt and set start
offsets for got and plt. */
@@ -9574,7 +9741,7 @@ index 7873e17..d21af5b 100644
return 0;
}
-@@ -279,7 +279,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -283,7 +283,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
if (info->got_initialized == 0) {
Elf_Addr *gotent;
@@ -9583,7 +9750,7 @@ index 7873e17..d21af5b 100644
info->got_offset;
*gotent = val;
info->got_initialized = 1;
-@@ -302,7 +302,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -306,7 +306,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
rc = apply_rela_bits(loc, val, 0, 64, 0);
else if (r_type == R_390_GOTENT ||
r_type == R_390_GOTPLTENT) {
@@ -9592,7 +9759,7 @@ index 7873e17..d21af5b 100644
rc = apply_rela_bits(loc, val, 1, 32, 1);
}
break;
-@@ -315,7 +315,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -319,7 +319,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_PLTOFF64: /* 16 bit offset from GOT to PLT. */
if (info->plt_initialized == 0) {
unsigned int *ip;
@@ -9601,7 +9768,7 @@ index 7873e17..d21af5b 100644
info->plt_offset;
ip[0] = 0x0d10e310; /* basr 1,0; lg 1,10(1); br 1 */
ip[1] = 0x100a0004;
-@@ -334,7 +334,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -338,7 +338,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
val - loc + 0xffffUL < 0x1ffffeUL) ||
(r_type == R_390_PLT32DBL &&
val - loc + 0xffffffffULL < 0x1fffffffeULL)))
@@ -9610,7 +9777,7 @@ index 7873e17..d21af5b 100644
me->arch.plt_offset +
info->plt_offset;
val += rela->r_addend - loc;
-@@ -356,7 +356,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -360,7 +360,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_GOTOFF32: /* 32 bit offset to GOT. */
case R_390_GOTOFF64: /* 64 bit offset to GOT. */
val = val + rela->r_addend -
@@ -9619,7 +9786,7 @@ index 7873e17..d21af5b 100644
if (r_type == R_390_GOTOFF16)
rc = apply_rela_bits(loc, val, 0, 16, 0);
else if (r_type == R_390_GOTOFF32)
-@@ -366,7 +366,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
+@@ -370,7 +370,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
break;
case R_390_GOTPC: /* 32 bit PC relative offset to GOT. */
case R_390_GOTPCDBL: /* 32 bit PC rel. off. to GOT shifted by 1. */
@@ -9629,10 +9796,10 @@ index 7873e17..d21af5b 100644
if (r_type == R_390_GOTPC)
rc = apply_rela_bits(loc, val, 1, 32, 0);
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
-index 2bba7df..8f1e6b5 100644
+index bba4fa7..9c32b3c 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
-@@ -234,13 +234,6 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -217,13 +217,6 @@ unsigned long get_wchan(struct task_struct *p)
return 0;
}
@@ -9647,10 +9814,10 @@ 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 89cf09e..cc41962 100644
+index eb9df28..7b686ba 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,
+@@ -201,9 +201,9 @@ s390_get_unmapped_area(struct file *filp, unsigned long addr,
}
static unsigned long
@@ -9663,7 +9830,7 @@ index 89cf09e..cc41962 100644
{
struct mm_struct *mm = current->mm;
unsigned long area;
-@@ -229,6 +229,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -230,6 +230,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
unsigned long random_factor = 0UL;
@@ -9674,7 +9841,7 @@ index 89cf09e..cc41962 100644
if (current->flags & PF_RANDOMIZE)
random_factor = arch_mmap_rnd();
-@@ -238,9 +242,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -239,9 +243,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
*/
if (mmap_is_legacy()) {
mm->mmap_base = mmap_base_legacy(random_factor);
@@ -9724,10 +9891,10 @@ index f9f3cd5..58ff438 100644
#endif /* _ASM_SCORE_EXEC_H */
diff --git a/arch/score/kernel/process.c b/arch/score/kernel/process.c
-index a1519ad3..e8ac1ff 100644
+index aae9480..93e40a4 100644
--- a/arch/score/kernel/process.c
+++ b/arch/score/kernel/process.c
-@@ -116,8 +116,3 @@ unsigned long get_wchan(struct task_struct *task)
+@@ -114,8 +114,3 @@ unsigned long get_wchan(struct task_struct *task)
return task_pt_regs(task)->cp0_epc;
}
@@ -9847,7 +10014,7 @@ index 6777177..d44b592 100644
addr = vm_unmapped_area(&info);
}
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
-index 57ffaf2..4d1fe9a 100644
+index 546293d..cb6ea17 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -39,6 +39,7 @@ config SPARC
@@ -9859,7 +10026,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..c217c17 100644
+index f2fbf9e..470e701 100644
--- a/arch/sparc/include/asm/atomic_64.h
+++ b/arch/sparc/include/asm/atomic_64.h
@@ -15,18 +15,38 @@
@@ -10006,7 +10173,7 @@ index f2fbf9e..c217c17 100644
if (likely(old == c))
break;
c = old;
-@@ -93,21 +162,47 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -93,21 +162,42 @@ 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)))
@@ -10021,11 +10188,6 @@ index f2fbf9e..c217c17 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)
{
@@ -10113,7 +10275,7 @@ index 9331083..59c0499 100644
#define ELF_HWCAP sparc64_elf_hwcap
diff --git a/arch/sparc/include/asm/pgalloc_32.h b/arch/sparc/include/asm/pgalloc_32.h
-index a3890da..f6a408e 100644
+index 0346c7e..c5c25b9 100644
--- a/arch/sparc/include/asm/pgalloc_32.h
+++ b/arch/sparc/include/asm/pgalloc_32.h
@@ -35,6 +35,7 @@ static inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp)
@@ -10125,7 +10287,7 @@ index a3890da..f6a408e 100644
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm,
unsigned long address)
diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h
-index 5e31871..13469c6 100644
+index 3529f13..d98a28c 100644
--- a/arch/sparc/include/asm/pgalloc_64.h
+++ b/arch/sparc/include/asm/pgalloc_64.h
@@ -21,6 +21,7 @@ static inline void __pgd_populate(pgd_t *pgd, pud_t *pud)
@@ -10158,7 +10320,7 @@ index 59ba6f6..4518128 100644
+
#endif
diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h
-index 91b963a..9a806c1 100644
+index ce6f569..593b043 100644
--- a/arch/sparc/include/asm/pgtable_32.h
+++ b/arch/sparc/include/asm/pgtable_32.h
@@ -51,6 +51,9 @@ unsigned long __init bootmem_init(unsigned long *pages_avail);
@@ -10532,7 +10694,7 @@ index fdb1332..1b10f89 100644
extra-y := head_$(BITS).o
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
-index c5113c7..52322e4 100644
+index b7780a5..28315f0 100644
--- a/arch/sparc/kernel/process_32.c
+++ b/arch/sparc/kernel/process_32.c
@@ -123,14 +123,14 @@ void show_regs(struct pt_regs *r)
@@ -10562,7 +10724,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 c16ef1a..8b38d7b 100644
+index fa14402..b2a7408 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)
@@ -10654,7 +10816,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 8a6151a..fa3cbb1 100644
+index 8a6151a..fa3cbb19 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)
@@ -12288,7 +12450,7 @@ index ba52e64..eee5791 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 14bb0d5..ae289b8 100644
+index aec508e..ad807e7 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;
@@ -12326,10 +12488,10 @@ index 14bb0d5..ae289b8 100644
#endif /* CONFIG_DEBUG_DCFLUSH */
}
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
-index 8171930..c60b093 100644
+index 4820a02..4366ab2 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
-@@ -203,6 +203,7 @@ source "kernel/Kconfig.hz"
+@@ -194,6 +194,7 @@ source "kernel/Kconfig.hz"
config KEXEC
bool "kexec system call"
select KEXEC_CORE
@@ -12338,10 +12500,10 @@ index 8171930..c60b093 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/tile/include/asm/atomic_64.h b/arch/tile/include/asm/atomic_64.h
-index 51cabc2..77cceee 100644
+index b0531a6..555a389 100644
--- a/arch/tile/include/asm/atomic_64.h
+++ b/arch/tile/include/asm/atomic_64.h
-@@ -145,6 +145,16 @@ static inline void atomic64_xor(long i, atomic64_t *v)
+@@ -158,6 +158,16 @@ static inline void atomic64_xor(long i, atomic64_t *v)
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
@@ -12393,7 +12555,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 e212c64..5f238fc 100644
+index 77ceaa3..3630dea 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,
@@ -12484,10 +12646,10 @@ index bae8523..ba9484b 100644
#ifdef CONFIG_64BIT
#define set_pud(pudptr, pudval) set_64bit((u64 *) (pudptr), pud_val(pudval))
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
-index 48af59a..4c75105 100644
+index 034b42c7..5c186ce 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
-@@ -347,22 +347,6 @@ int singlestepping(void * t)
+@@ -343,22 +343,6 @@ int singlestepping(void * t)
return 2;
}
@@ -12528,7 +12690,7 @@ 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 2dc18605..5796232 100644
+index d9a94da..4c060aa 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -39,14 +39,13 @@ config X86
@@ -12550,13 +12712,13 @@ index 2dc18605..5796232 100644
@@ -92,7 +91,7 @@ config X86
select HAVE_ARCH_TRACEHOOK
select HAVE_ARCH_TRANSPARENT_HUGEPAGE
- select HAVE_BPF_JIT if X86_64
+ select HAVE_EBPF_JIT if X86_64
- select HAVE_CC_STACKPROTECTOR
+ select HAVE_CC_STACKPROTECTOR if X86_64 || !PAX_MEMORY_UDEREF
select HAVE_CMPXCHG_DOUBLE
select HAVE_CMPXCHG_LOCAL
select HAVE_CONTEXT_TRACKING if X86_64
-@@ -110,6 +109,7 @@ config X86
+@@ -111,6 +110,7 @@ config X86
select HAVE_FUNCTION_GRAPH_FP_TEST
select HAVE_FUNCTION_GRAPH_TRACER
select HAVE_FUNCTION_TRACER
@@ -12564,7 +12726,7 @@ index 2dc18605..5796232 100644
select HAVE_GENERIC_DMA_COHERENT if X86_32
select HAVE_HW_BREAKPOINT
select HAVE_IDE
-@@ -188,11 +188,13 @@ config MMU
+@@ -186,11 +186,13 @@ config MMU
def_bool y
config ARCH_MMAP_RND_BITS_MIN
@@ -12580,7 +12742,7 @@ index 2dc18605..5796232 100644
default 16
config ARCH_MMAP_RND_COMPAT_BITS_MIN
-@@ -294,7 +296,7 @@ config X86_64_SMP
+@@ -292,7 +294,7 @@ config X86_64_SMP
config X86_32_LAZY_GS
def_bool y
@@ -12589,7 +12751,7 @@ index 2dc18605..5796232 100644
config ARCH_HWEIGHT_CFLAGS
string
-@@ -681,6 +683,7 @@ config SCHED_OMIT_FRAME_POINTER
+@@ -679,6 +681,7 @@ config SCHED_OMIT_FRAME_POINTER
menuconfig HYPERVISOR_GUEST
bool "Linux guest support"
@@ -12605,7 +12767,7 @@ index 2dc18605..5796232 100644
default y
depends on MODIFY_LDT_SYSCALL
---help---
-@@ -1243,6 +1247,7 @@ choice
+@@ -1234,6 +1238,7 @@ choice
config NOHIGHMEM
bool "off"
@@ -12613,7 +12775,7 @@ index 2dc18605..5796232 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
-@@ -1279,6 +1284,7 @@ config NOHIGHMEM
+@@ -1270,6 +1275,7 @@ config NOHIGHMEM
config HIGHMEM4G
bool "4GB"
@@ -12621,7 +12783,7 @@ index 2dc18605..5796232 100644
---help---
Select this if you have a 32-bit processor and between 1 and 4
gigabytes of physical RAM.
-@@ -1331,7 +1337,7 @@ config PAGE_OFFSET
+@@ -1322,7 +1328,7 @@ config PAGE_OFFSET
hex
default 0xB0000000 if VMSPLIT_3G_OPT
default 0x80000000 if VMSPLIT_2G
@@ -12630,7 +12792,7 @@ index 2dc18605..5796232 100644
default 0x40000000 if VMSPLIT_1G
default 0xC0000000
depends on X86_32
-@@ -1352,7 +1358,6 @@ config X86_PAE
+@@ -1343,7 +1349,6 @@ config X86_PAE
config ARCH_PHYS_ADDR_T_64BIT
def_bool y
@@ -12638,7 +12800,7 @@ index 2dc18605..5796232 100644
config ARCH_DMA_ADDR_T_64BIT
def_bool y
-@@ -1483,7 +1488,7 @@ config ARCH_PROC_KCORE_TEXT
+@@ -1474,7 +1479,7 @@ config ARCH_PROC_KCORE_TEXT
config ILLEGAL_POINTER_VALUE
hex
@@ -12647,7 +12809,7 @@ index 2dc18605..5796232 100644
default 0xdead000000000000 if X86_64
source "mm/Kconfig"
-@@ -1806,6 +1811,7 @@ source kernel/Kconfig.hz
+@@ -1797,6 +1802,7 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call"
select KEXEC_CORE
@@ -12655,7 +12817,7 @@ index 2dc18605..5796232 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
-@@ -1988,7 +1994,9 @@ config X86_NEED_RELOCS
+@@ -1963,7 +1969,9 @@ config X86_NEED_RELOCS
config PHYSICAL_ALIGN
hex "Alignment value to which kernel should be aligned"
@@ -12666,7 +12828,7 @@ index 2dc18605..5796232 100644
range 0x2000 0x1000000 if X86_32
range 0x200000 0x1000000 if X86_64
---help---
-@@ -2071,6 +2079,7 @@ config COMPAT_VDSO
+@@ -2046,6 +2054,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
@@ -12674,7 +12836,7 @@ index 2dc18605..5796232 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
-@@ -2111,15 +2120,6 @@ choice
+@@ -2086,15 +2095,6 @@ choice
If unsure, select "Emulate".
@@ -12690,7 +12852,7 @@ index 2dc18605..5796232 100644
config LEGACY_VSYSCALL_EMULATE
bool "Emulate"
help
-@@ -2200,6 +2200,22 @@ config MODIFY_LDT_SYSCALL
+@@ -2175,6 +2175,22 @@ config MODIFY_LDT_SYSCALL
Saying 'N' here may make sense for embedded or server kernels.
@@ -12782,7 +12944,7 @@ index 67eec55..1a5c1ab 100644
---help---
This is a debug driver, which gets the power states
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
-index 4086abc..52a0a9b 100644
+index 6fce7f0..9a4d7ce 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -75,9 +75,6 @@ ifeq ($(CONFIG_X86_32),y)
@@ -12813,7 +12975,7 @@ index 4086abc..52a0a9b 100644
ifeq ($(CONFIG_KEXEC_FILE),y)
$(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c
endif
-@@ -284,3 +285,9 @@ define archhelp
+@@ -285,3 +286,9 @@ define archhelp
echo ' FDARGS="..." arguments for the booted kernel'
echo ' FDINITRD=file initrd for the booted kernel'
endef
@@ -12859,7 +13021,7 @@ index 9011a88..06aa820 100644
}
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
-index 8774cb2..54bc0df 100644
+index f135688..1249175 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -35,6 +35,23 @@ KBUILD_CFLAGS += -mno-mmx -mno-sse
@@ -12944,7 +13106,7 @@ 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 0256064..bef8bbd 100644
+index 1038524..b6acc21 100644
--- a/arch/x86/boot/compressed/head_32.S
+++ b/arch/x86/boot/compressed/head_32.S
@@ -169,10 +169,10 @@ preferred_addr:
@@ -12961,7 +13123,7 @@ index 0256064..bef8bbd 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 86558a1..32f1e7e 100644
+index 0d80a7a..ed3e0ff 100644
--- a/arch/x86/boot/compressed/head_64.S
+++ b/arch/x86/boot/compressed/head_64.S
@@ -103,10 +103,10 @@ ENTRY(startup_32)
@@ -12977,7 +13139,7 @@ index 86558a1..32f1e7e 100644
1:
/* Target address to relocate to for decompression */
-@@ -331,10 +331,10 @@ preferred_addr:
+@@ -333,10 +333,10 @@ preferred_addr:
addq %rax, %rbp
notq %rax
andq %rax, %rbp
@@ -12990,7 +13152,7 @@ index 86558a1..32f1e7e 100644
1:
/* Target address to relocate to for decompression */
-@@ -443,8 +443,8 @@ gdt:
+@@ -444,8 +444,8 @@ gdt:
.long gdt
.word 0
.quad 0x0000000000000000 /* NULL descriptor */
@@ -13002,10 +13164,20 @@ index 86558a1..32f1e7e 100644
.quad 0x0000000000000000 /* TS continued */
gdt_end:
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
-index 79dac17..1549446 100644
+index f14db4e..d2c951e 100644
--- a/arch/x86/boot/compressed/misc.c
+++ b/arch/x86/boot/compressed/misc.c
-@@ -259,7 +259,7 @@ static void handle_relocations(void *output, unsigned long output_len)
+@@ -175,13 +175,17 @@ static void handle_relocations(void *output, unsigned long output_len)
+ int *reloc;
+ unsigned long delta, map, ptr;
+ unsigned long min_addr = (unsigned long)output;
++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
++ unsigned long max_addr = min_addr + (VO___bss_start - VO__text - __PAGE_OFFSET - ____LOAD_PHYSICAL_ADDR);
++#else
+ unsigned long max_addr = min_addr + (VO___bss_start - VO__text);
++#endif
+
+ /*
* Calculate the delta between where vmlinux was linked to load
* and where it was actually loaded.
*/
@@ -13014,7 +13186,7 @@ index 79dac17..1549446 100644
if (!delta) {
debug_putstr("No relocation needed... ");
return;
-@@ -341,7 +341,7 @@ static void parse_elf(void *output)
+@@ -263,7 +267,7 @@ static void parse_elf(void *output)
Elf32_Ehdr ehdr;
Elf32_Phdr *phdrs, *phdr;
#endif
@@ -13023,7 +13195,7 @@ index 79dac17..1549446 100644
int i;
memcpy(&ehdr, output, sizeof(ehdr));
-@@ -368,13 +368,16 @@ static void parse_elf(void *output)
+@@ -290,11 +294,14 @@ static void parse_elf(void *output)
case PT_LOAD:
#ifdef CONFIG_RELOCATABLE
dest = output;
@@ -13032,16 +13204,26 @@ index 79dac17..1549446 100644
#else
dest = (void *)(phdr->p_paddr);
#endif
- memcpy(dest,
- output + phdr->p_offset,
- phdr->p_filesz);
+ memmove(dest, output + phdr->p_offset, phdr->p_filesz);
+ if (i)
+ memset(prev, 0xff, dest - prev);
+ prev = dest + phdr->p_filesz;
break;
default: /* Ignore other PT_* */ break;
}
-@@ -443,7 +446,7 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap,
+@@ -326,7 +333,11 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
+ unsigned char *output,
+ unsigned long output_len)
+ {
++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
++ const unsigned long kernel_total_size = VO__end - VO__text - __PAGE_OFFSET - ____LOAD_PHYSICAL_ADDR;
++#else
+ const unsigned long kernel_total_size = VO__end - VO__text;
++#endif
+ unsigned char *output_orig = output;
+
+ /* Retain x86 boot parameters pointer passed from startup_32/64. */
+@@ -381,7 +392,7 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
error("Destination address too large");
#endif
#ifndef CONFIG_RELOCATABLE
@@ -13050,6 +13232,18 @@ index 79dac17..1549446 100644
error("Wrong destination address");
#endif
+diff --git a/arch/x86/boot/compressed/pagetable.c b/arch/x86/boot/compressed/pagetable.c
+index 34b95df..e6d5fc2 100644
+--- a/arch/x86/boot/compressed/pagetable.c
++++ b/arch/x86/boot/compressed/pagetable.c
+@@ -11,6 +11,7 @@
+ */
+ #define __pa(x) ((unsigned long)(x))
+ #define __va(x) ((void *)((unsigned long)(x)))
++#undef CONFIG_PAX_KERNEXEC
+
+ #include "misc.h"
+
diff --git a/arch/x86/boot/cpucheck.c b/arch/x86/boot/cpucheck.c
index 1fd7d57..0f7d096 100644
--- a/arch/x86/boot/cpucheck.c
@@ -13096,24 +13290,30 @@ index 1fd7d57..0f7d096 100644
err = check_cpuflags();
} else if (err == 0x01 &&
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
-index 6236b9e..3099904 100644
+index 3dd5be3..16720a2 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
-@@ -438,10 +438,14 @@ setup_data: .quad 0 # 64-bit physical pointer to
+@@ -438,7 +438,7 @@ setup_data: .quad 0 # 64-bit physical pointer to
# single linked list of
# struct setup_data
-pref_address: .quad LOAD_PHYSICAL_ADDR # preferred load addr
+pref_address: .quad ____LOAD_PHYSICAL_ADDR # preferred load addr
- #define ZO_INIT_SIZE (ZO__end - ZO_startup_32 + ZO_z_extract_offset)
+ #
+ # Getting to provably safe in-place decompression is hard. Worst case
+@@ -543,7 +543,12 @@ pref_address: .quad LOAD_PHYSICAL_ADDR # preferred load addr
+
+ #define ZO_INIT_SIZE (ZO__end - ZO_startup_32 + ZO_z_min_extract_offset)
+
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
+#define VO_INIT_SIZE (VO__end - VO__text - __PAGE_OFFSET - ____LOAD_PHYSICAL_ADDR)
+#else
#define VO_INIT_SIZE (VO__end - VO__text)
+#endif
++
#if ZO_INIT_SIZE > VO_INIT_SIZE
- #define INIT_SIZE ZO_INIT_SIZE
+ # define INIT_SIZE ZO_INIT_SIZE
#else
diff --git a/arch/x86/boot/memory.c b/arch/x86/boot/memory.c
index db75d07..8e6d0af 100644
@@ -13608,7 +13808,7 @@ index 383a6f8..a4db591 100644
ENDPROC(aesni_xts_crypt8)
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
-index 064c7e2..df15412 100644
+index 5b7fa14..fb27be1 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 {
@@ -14009,7 +14209,7 @@ index 310319c..9253a8f 100644
ret;
ENDPROC(camellia_dec_blk_2way)
diff --git a/arch/x86/crypto/camellia_aesni_avx2_glue.c b/arch/x86/crypto/camellia_aesni_avx2_glue.c
-index d844569..edaf489 100644
+index 60907c1..fe8638d 100644
--- a/arch/x86/crypto/camellia_aesni_avx2_glue.c
+++ b/arch/x86/crypto/camellia_aesni_avx2_glue.c
@@ -27,20 +27,20 @@
@@ -14043,7 +14243,7 @@ index d844569..edaf489 100644
static const struct common_glue_ctx camellia_enc = {
.num_funcs = 4,
diff --git a/arch/x86/crypto/camellia_aesni_avx_glue.c b/arch/x86/crypto/camellia_aesni_avx_glue.c
-index 93d8f29..4218a74 100644
+index d96429d..18ab2e6 100644
--- a/arch/x86/crypto/camellia_aesni_avx_glue.c
+++ b/arch/x86/crypto/camellia_aesni_avx_glue.c
@@ -26,28 +26,28 @@
@@ -14794,7 +14994,7 @@ index acc066c..1559cc4 100644
ret;
ENDPROC(serpent_dec_blk_8way)
diff --git a/arch/x86/crypto/serpent_avx2_glue.c b/arch/x86/crypto/serpent_avx2_glue.c
-index 6d19834..a08fbe9 100644
+index 870f6d8..9fed18e 100644
--- a/arch/x86/crypto/serpent_avx2_glue.c
+++ b/arch/x86/crypto/serpent_avx2_glue.c
@@ -27,18 +27,18 @@
@@ -14866,7 +15066,7 @@ index 6f778d3..3cf277e 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 8943407..beb882d 100644
+index 644f97a..4d069a1 100644
--- a/arch/x86/crypto/serpent_sse2_glue.c
+++ b/arch/x86/crypto/serpent_sse2_glue.c
@@ -45,8 +45,10 @@
@@ -14962,7 +15162,7 @@ index a410950..02d2056 100644
ENDPROC(\name)
diff --git a/arch/x86/crypto/sha1_ssse3_glue.c b/arch/x86/crypto/sha1_ssse3_glue.c
-index dd14616..53358bb 100644
+index 1024e37..7958186 100644
--- a/arch/x86/crypto/sha1_ssse3_glue.c
+++ b/arch/x86/crypto/sha1_ssse3_glue.c
@@ -31,8 +31,8 @@
@@ -15219,7 +15419,7 @@ index 748cdf2..959bb4d 100644
shl $6, NUM_BLKS /* convert to bytes */
jz .Ldone_hash
diff --git a/arch/x86/crypto/sha256_ssse3_glue.c b/arch/x86/crypto/sha256_ssse3_glue.c
-index 5f4d608..ddce00d 100644
+index 3ae0f43..524beeb 100644
--- a/arch/x86/crypto/sha256_ssse3_glue.c
+++ b/arch/x86/crypto/sha256_ssse3_glue.c
@@ -40,9 +40,9 @@
@@ -15381,7 +15581,7 @@ index e610e29..83f1cde 100644
ENDPROC(sha512_transform_ssse3)
diff --git a/arch/x86/crypto/sha512_ssse3_glue.c b/arch/x86/crypto/sha512_ssse3_glue.c
-index 34e5083..eb57a5e 100644
+index 0b17c83..6959deb 100644
--- a/arch/x86/crypto/sha512_ssse3_glue.c
+++ b/arch/x86/crypto/sha512_ssse3_glue.c
@@ -39,10 +39,10 @@
@@ -15944,7 +16144,7 @@ index 9a9e588..b900d1c 100644
.macro REMOVE_PT_GPREGS_FROM_STACK addskip=0
diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
-index e79d93d..31091ce 100644
+index ec138e5..3e47a7a 100644
--- a/arch/x86/entry/common.c
+++ b/arch/x86/entry/common.c
@@ -33,9 +33,7 @@
@@ -16001,7 +16201,7 @@ index e79d93d..31091ce 100644
-long syscall_trace_enter(struct pt_regs *regs)
+static long syscall_trace_enter(struct pt_regs *regs)
{
- u32 arch = is_ia32_task() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
+ u32 arch = in_ia32_syscall() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
unsigned long phase1_result = syscall_trace_enter_phase1(regs, arch);
- if (phase1_result == 0)
@@ -16140,7 +16340,7 @@ index e79d93d..31091ce 100644
) {
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
-index 10868aa..e645e1d 100644
+index 983e5d3..d660273 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -147,13 +147,157 @@
@@ -16327,7 +16527,7 @@ index 10868aa..e645e1d 100644
.macro RESTORE_INT_REGS
popl %ebx
popl %ecx
-@@ -216,7 +369,7 @@ ENTRY(ret_from_fork)
+@@ -213,7 +366,7 @@ ENTRY(ret_from_fork)
movl %esp, %eax
call syscall_return_slowpath
jmp restore_all
@@ -16336,7 +16536,7 @@ index 10868aa..e645e1d 100644
ENTRY(ret_from_kernel_thread)
pushl %eax
-@@ -264,15 +417,23 @@ ret_from_intr:
+@@ -257,15 +410,23 @@ ret_from_intr:
andl $SEGMENT_RPL_MASK, %eax
#endif
cmpl $USER_RPL, %eax
@@ -16362,7 +16562,7 @@ index 10868aa..e645e1d 100644
#ifdef CONFIG_PREEMPT
ENTRY(resume_kernel)
-@@ -284,7 +445,7 @@ need_resched:
+@@ -277,7 +438,7 @@ need_resched:
jz restore_all
call preempt_schedule_irq
jmp need_resched
@@ -16371,7 +16571,7 @@ index 10868aa..e645e1d 100644
#endif
GLOBAL(__begin_SYSENTER_singlestep_region)
-@@ -351,6 +512,10 @@ sysenter_past_esp:
+@@ -344,6 +505,10 @@ sysenter_past_esp:
pushl %eax /* pt_regs->orig_ax */
SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */
@@ -16382,7 +16582,7 @@ index 10868aa..e645e1d 100644
/*
* 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:
+@@ -379,11 +544,20 @@ sysenter_past_esp:
ALTERNATIVE "testl %eax, %eax; jz .Lsyscall_32_done", \
"jmp .Lsyscall_32_done", X86_FEATURE_XENPV
@@ -16403,7 +16603,7 @@ index 10868aa..e645e1d 100644
PTGS_TO_GS
popl %ebx /* pt_regs->bx */
addl $2*4, %esp /* skip pt_regs->cx and pt_regs->dx */
-@@ -416,10 +590,16 @@ sysenter_past_esp:
+@@ -409,10 +583,16 @@ sysenter_past_esp:
sysexit
.pushsection .fixup, "ax"
@@ -16422,7 +16622,7 @@ index 10868aa..e645e1d 100644
PTGS_TO_GS_EX
.Lsysenter_fix_flags:
-@@ -462,6 +642,10 @@ ENTRY(entry_INT80_32)
+@@ -455,6 +635,10 @@ ENTRY(entry_INT80_32)
pushl %eax /* pt_regs->orig_ax */
SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */
@@ -16433,7 +16633,7 @@ index 10868aa..e645e1d 100644
/*
* User mode is traced as though IRQs are on, and the interrupt gate
* turned them off.
-@@ -472,6 +656,13 @@ ENTRY(entry_INT80_32)
+@@ -465,6 +649,13 @@ ENTRY(entry_INT80_32)
call do_int80_syscall_32
.Lsyscall_32_done:
@@ -16447,7 +16647,7 @@ index 10868aa..e645e1d 100644
restore_all:
TRACE_IRQS_IRET
restore_all_notrace:
-@@ -515,14 +706,34 @@ ldt_ss:
+@@ -508,14 +699,34 @@ ldt_ss:
* compensating for the offset by changing to the ESPFIX segment with
* a base address that matches for the difference.
*/
@@ -16485,7 +16685,7 @@ index 10868aa..e645e1d 100644
pushl $__ESPFIX_SS
pushl %eax /* new kernel esp */
/*
-@@ -546,8 +757,15 @@ ENDPROC(entry_INT80_32)
+@@ -539,8 +750,15 @@ ENDPROC(entry_INT80_32)
*/
#ifdef CONFIG_X86_ESPFIX32
/* fixup the stack */
@@ -16503,7 +16703,7 @@ index 10868aa..e645e1d 100644
shl $16, %eax
addl %esp, %eax /* the adjusted stack pointer */
pushl $__KERNEL_DS
-@@ -583,7 +801,7 @@ ENTRY(irq_entries_start)
+@@ -576,7 +794,7 @@ ENTRY(irq_entries_start)
jmp common_interrupt
.align 8
.endr
@@ -16512,7 +16712,7 @@ index 10868aa..e645e1d 100644
/*
* the CPU automatically disables interrupts when executing an IRQ vector,
-@@ -630,7 +848,7 @@ ENTRY(coprocessor_error)
+@@ -623,7 +841,7 @@ ENTRY(coprocessor_error)
pushl $0
pushl $do_coprocessor_error
jmp error_code
@@ -16521,7 +16721,7 @@ index 10868aa..e645e1d 100644
ENTRY(simd_coprocessor_error)
ASM_CLAC
-@@ -644,20 +862,20 @@ ENTRY(simd_coprocessor_error)
+@@ -637,20 +855,20 @@ ENTRY(simd_coprocessor_error)
pushl $do_simd_coprocessor_error
#endif
jmp error_code
@@ -16545,7 +16745,7 @@ index 10868aa..e645e1d 100644
#endif
ENTRY(overflow)
-@@ -665,59 +883,59 @@ ENTRY(overflow)
+@@ -658,59 +876,59 @@ ENTRY(overflow)
pushl $0
pushl $do_overflow
jmp error_code
@@ -16614,7 +16814,7 @@ index 10868aa..e645e1d 100644
#ifdef CONFIG_X86_MCE
ENTRY(machine_check)
-@@ -725,7 +943,7 @@ ENTRY(machine_check)
+@@ -718,7 +936,7 @@ ENTRY(machine_check)
pushl $0
pushl machine_check_vector
jmp error_code
@@ -16623,7 +16823,7 @@ index 10868aa..e645e1d 100644
#endif
ENTRY(spurious_interrupt_bug)
-@@ -733,7 +951,7 @@ ENTRY(spurious_interrupt_bug)
+@@ -726,7 +944,7 @@ ENTRY(spurious_interrupt_bug)
pushl $0
pushl $do_spurious_interrupt_bug
jmp error_code
@@ -16632,7 +16832,7 @@ index 10868aa..e645e1d 100644
#ifdef CONFIG_XEN
ENTRY(xen_hypervisor_callback)
-@@ -832,7 +1050,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
+@@ -825,7 +1043,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
ENTRY(mcount)
ret
@@ -16641,7 +16841,7 @@ index 10868aa..e645e1d 100644
ENTRY(ftrace_caller)
pushl %eax
-@@ -862,7 +1080,7 @@ ftrace_graph_call:
+@@ -855,7 +1073,7 @@ ftrace_graph_call:
.globl ftrace_stub
ftrace_stub:
ret
@@ -16650,7 +16850,7 @@ index 10868aa..e645e1d 100644
ENTRY(ftrace_regs_caller)
pushf /* push flags before compare (in cs location) */
-@@ -960,7 +1178,7 @@ trace:
+@@ -953,7 +1171,7 @@ trace:
popl %ecx
popl %eax
jmp ftrace_stub
@@ -16659,7 +16859,7 @@ index 10868aa..e645e1d 100644
#endif /* CONFIG_DYNAMIC_FTRACE */
#endif /* CONFIG_FUNCTION_TRACER */
-@@ -978,7 +1196,7 @@ ENTRY(ftrace_graph_caller)
+@@ -971,7 +1189,7 @@ ENTRY(ftrace_graph_caller)
popl %ecx
popl %eax
ret
@@ -16668,7 +16868,7 @@ index 10868aa..e645e1d 100644
.globl return_to_handler
return_to_handler:
-@@ -997,7 +1215,7 @@ ENTRY(trace_page_fault)
+@@ -990,7 +1208,7 @@ ENTRY(trace_page_fault)
ASM_CLAC
pushl $trace_do_page_fault
jmp error_code
@@ -16677,7 +16877,7 @@ index 10868aa..e645e1d 100644
#endif
ENTRY(page_fault)
-@@ -1026,16 +1244,19 @@ error_code:
+@@ -1019,16 +1237,19 @@ error_code:
movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart
REG_TO_PTGS %ecx
SET_KERNEL_GS %ecx
@@ -16700,7 +16900,7 @@ index 10868aa..e645e1d 100644
/*
* #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)
+@@ -1045,7 +1266,13 @@ ENTRY(debug)
movl %esp, %eax # pt_regs pointer
/* Are we currently on the SYSENTER stack? */
@@ -16715,7 +16915,7 @@ index 10868aa..e645e1d 100644
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)
+@@ -1062,7 +1289,7 @@ ENTRY(debug)
call do_debug
movl %ebp, %esp
jmp ret_from_exception
@@ -16724,7 +16924,7 @@ index 10868aa..e645e1d 100644
/*
* NMI is doubly nasty. It can happen on the first instruction of
-@@ -1094,13 +1321,22 @@ ENTRY(nmi)
+@@ -1087,13 +1314,22 @@ ENTRY(nmi)
movl %esp, %eax # pt_regs pointer
/* Are we currently on the SYSENTER stack? */
@@ -16748,7 +16948,7 @@ index 10868aa..e645e1d 100644
jmp restore_all_notrace
.Lnmi_from_sysenter_stack:
-@@ -1112,6 +1348,9 @@ ENTRY(nmi)
+@@ -1105,6 +1341,9 @@ ENTRY(nmi)
movl PER_CPU_VAR(cpu_current_top_of_stack), %esp
call do_nmi
movl %ebp, %esp
@@ -16758,7 +16958,7 @@ index 10868aa..e645e1d 100644
jmp restore_all_notrace
#ifdef CONFIG_X86_ESPFIX32
-@@ -1131,11 +1370,14 @@ nmi_espfix_stack:
+@@ -1124,11 +1363,14 @@ nmi_espfix_stack:
FIXUP_ESPFIX_STACK # %eax == %esp
xorl %edx, %edx # zero error code
call do_nmi
@@ -16774,7 +16974,7 @@ index 10868aa..e645e1d 100644
ENTRY(int3)
ASM_CLAC
-@@ -1146,17 +1388,17 @@ ENTRY(int3)
+@@ -1139,17 +1381,17 @@ ENTRY(int3)
movl %esp, %eax # pt_regs pointer
call do_int3
jmp ret_from_exception
@@ -16796,7 +16996,7 @@ index 10868aa..e645e1d 100644
+ENDPROC(async_page_fault)
#endif
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
-index 858b555..9e9c957 100644
+index 9ee0da1..2421755 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -36,6 +36,8 @@
@@ -17287,7 +17487,7 @@ index 858b555..9e9c957 100644
.endm
/* Instantiate ptregs_stub for each ptregs-using syscall */
-@@ -400,10 +809,12 @@ ENTRY(ret_from_fork)
+@@ -397,10 +806,12 @@ ENTRY(ret_from_fork)
1:
movq %rsp, %rdi
call syscall_return_slowpath /* returns with IRQs disabled */
@@ -17301,7 +17501,7 @@ index 858b555..9e9c957 100644
/*
* Build the entry stubs with some assembler magic.
-@@ -418,7 +829,7 @@ ENTRY(irq_entries_start)
+@@ -415,7 +826,7 @@ ENTRY(irq_entries_start)
jmp common_interrupt
.align 8
.endr
@@ -17310,7 +17510,7 @@ index 858b555..9e9c957 100644
/*
* Interrupt entry/exit.
-@@ -444,6 +855,12 @@ END(irq_entries_start)
+@@ -441,6 +852,12 @@ END(irq_entries_start)
*/
SWAPGS
@@ -17323,7 +17523,7 @@ index 858b555..9e9c957 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
-@@ -456,7 +873,9 @@ END(irq_entries_start)
+@@ -453,7 +870,9 @@ END(irq_entries_start)
CALL_enter_from_user_mode
@@ -17334,7 +17534,7 @@ index 858b555..9e9c957 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
-@@ -468,6 +887,7 @@ END(irq_entries_start)
+@@ -465,6 +884,7 @@ END(irq_entries_start)
incl PER_CPU_VAR(irq_count)
cmovzq PER_CPU_VAR(irq_stack_ptr), %rsp
pushq %rdi
@@ -17342,7 +17542,7 @@ index 858b555..9e9c957 100644
/* We entered an interrupt context - irqs are off: */
TRACE_IRQS_OFF
-@@ -499,6 +919,8 @@ ret_from_intr:
+@@ -496,6 +916,8 @@ ret_from_intr:
GLOBAL(retint_user)
mov %rsp,%rdi
call prepare_exit_to_usermode
@@ -17351,7 +17551,7 @@ index 858b555..9e9c957 100644
TRACE_IRQS_IRETQ
SWAPGS
jmp restore_regs_and_iret
-@@ -516,6 +938,21 @@ retint_kernel:
+@@ -513,6 +935,21 @@ retint_kernel:
jmp 0b
1:
#endif
@@ -17373,7 +17573,7 @@ index 858b555..9e9c957 100644
/*
* The iretq could re-enable interrupts:
*/
-@@ -559,15 +996,15 @@ native_irq_return_ldt:
+@@ -556,15 +993,15 @@ native_irq_return_ldt:
SWAPGS
movq PER_CPU_VAR(espfix_waddr), %rdi
movq %rax, (0*8)(%rdi) /* RAX */
@@ -17394,7 +17594,7 @@ index 858b555..9e9c957 100644
movq %rax, (4*8)(%rdi)
andl $0xffff0000, %eax
popq %rdi
-@@ -577,7 +1014,7 @@ native_irq_return_ldt:
+@@ -574,7 +1011,7 @@ native_irq_return_ldt:
popq %rax
jmp native_irq_return_iret
#endif
@@ -17403,7 +17603,7 @@ index 858b555..9e9c957 100644
/*
* APIC interrupts.
-@@ -589,7 +1026,7 @@ ENTRY(\sym)
+@@ -586,7 +1023,7 @@ ENTRY(\sym)
.Lcommon_\sym:
interrupt \do_sym
jmp ret_from_intr
@@ -17412,7 +17612,7 @@ index 858b555..9e9c957 100644
.endm
#ifdef CONFIG_TRACING
-@@ -654,7 +1091,7 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt
+@@ -651,7 +1088,7 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt
/*
* Exception entry points.
*/
@@ -17421,7 +17621,7 @@ index 858b555..9e9c957 100644
.macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
ENTRY(\sym)
-@@ -701,6 +1138,12 @@ ENTRY(\sym)
+@@ -698,6 +1135,12 @@ ENTRY(\sym)
.endif
.if \shift_ist != -1
@@ -17434,7 +17634,7 @@ index 858b555..9e9c957 100644
subq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist)
.endif
-@@ -744,7 +1187,7 @@ ENTRY(\sym)
+@@ -741,7 +1184,7 @@ ENTRY(\sym)
jmp error_exit /* %ebx: no swapgs flag */
.endif
@@ -17443,8 +17643,8 @@ index 858b555..9e9c957 100644
.endm
#ifdef CONFIG_TRACING
-@@ -786,8 +1229,9 @@ gs_change:
- 2: mfence /* workaround */
+@@ -783,8 +1226,9 @@ ENTRY(native_load_gs_index)
+ 2: ALTERNATIVE "", "mfence", X86_BUG_SWAPGS_FENCE
SWAPGS
popfq
+ pax_force_retaddr
@@ -17452,9 +17652,9 @@ index 858b555..9e9c957 100644
-END(native_load_gs_index)
+ENDPROC(native_load_gs_index)
- _ASM_EXTABLE(gs_change, bad_gs)
+ _ASM_EXTABLE(.Lgs_change, bad_gs)
.section .fixup, "ax"
-@@ -809,8 +1253,9 @@ ENTRY(do_softirq_own_stack)
+@@ -812,8 +1256,9 @@ ENTRY(do_softirq_own_stack)
call __do_softirq
leaveq
decl PER_CPU_VAR(irq_count)
@@ -17465,7 +17665,7 @@ index 858b555..9e9c957 100644
#ifdef CONFIG_XEN
idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
-@@ -846,7 +1291,7 @@ ENTRY(xen_do_hypervisor_callback) /* do_hypervisor_callback(struct *pt_regs) */
+@@ -849,7 +1294,7 @@ ENTRY(xen_do_hypervisor_callback) /* do_hypervisor_callback(struct *pt_regs) */
call xen_maybe_preempt_hcall
#endif
jmp error_exit
@@ -17474,7 +17674,7 @@ index 858b555..9e9c957 100644
/*
* Hypervisor uses this for application faults while it executes.
-@@ -891,7 +1336,7 @@ ENTRY(xen_failsafe_callback)
+@@ -894,7 +1339,7 @@ ENTRY(xen_failsafe_callback)
SAVE_C_REGS
SAVE_EXTRA_REGS
jmp error_exit
@@ -17483,7 +17683,7 @@ index 858b555..9e9c957 100644
apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
xen_hvm_callback_vector xen_evtchn_do_upcall
-@@ -903,7 +1348,7 @@ apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
+@@ -906,7 +1351,7 @@ apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
hyperv_callback_vector hyperv_vector_handler
#endif /* CONFIG_HYPERV */
@@ -17492,7 +17692,7 @@ index 858b555..9e9c957 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
-@@ -940,8 +1385,34 @@ ENTRY(paranoid_entry)
+@@ -943,8 +1388,34 @@ ENTRY(paranoid_entry)
js 1f /* negative -> in kernel */
SWAPGS
xorl %ebx, %ebx
@@ -17529,7 +17729,7 @@ index 858b555..9e9c957 100644
/*
* "Paranoid" exit path from exception stack. This is invoked
-@@ -958,19 +1429,26 @@ END(paranoid_entry)
+@@ -961,19 +1432,26 @@ END(paranoid_entry)
ENTRY(paranoid_exit)
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF_DEBUG
@@ -17558,7 +17758,7 @@ index 858b555..9e9c957 100644
/*
* Save all registers in pt_regs, and switch gs if needed.
-@@ -984,13 +1462,18 @@ ENTRY(error_entry)
+@@ -987,13 +1465,18 @@ ENTRY(error_entry)
testb $3, CS+8(%rsp)
jz .Lerror_kernelspace
@@ -17578,7 +17778,7 @@ index 858b555..9e9c957 100644
.Lerror_entry_from_usermode_after_swapgs:
/*
* We need to tell lockdep that IRQs are off. We can't do this until
-@@ -999,10 +1482,12 @@ ENTRY(error_entry)
+@@ -1002,10 +1485,12 @@ ENTRY(error_entry)
*/
TRACE_IRQS_OFF
CALL_enter_from_user_mode
@@ -17591,17 +17791,17 @@ index 858b555..9e9c957 100644
ret
/*
-@@ -1020,14 +1505,16 @@ ENTRY(error_entry)
+@@ -1023,14 +1508,16 @@ ENTRY(error_entry)
cmpq %rax, RIP+8(%rsp)
je .Lbstep_iret
- cmpq $gs_change, RIP+8(%rsp)
+ cmpq $.Lgs_change, RIP+8(%rsp)
- jne .Lerror_entry_done
+ jne 1f
/*
- * hack: gs_change can fail with user gsbase. If this happens, fix up
+ * hack: .Lgs_change can fail with user gsbase. If this happens, fix up
* gsbase and proceed. We'll fix up the exception and land in
- * gs_change's error handler with kernel gsbase.
+ * .Lgs_change's error handler with kernel gsbase.
*/
- jmp .Lerror_entry_from_usermode_swapgs
+ SWAPGS
@@ -17610,7 +17810,7 @@ index 858b555..9e9c957 100644
.Lbstep_iret:
/* Fix truncated RIP */
-@@ -1041,6 +1528,12 @@ ENTRY(error_entry)
+@@ -1044,6 +1531,12 @@ ENTRY(error_entry)
*/
SWAPGS
@@ -17623,7 +17823,7 @@ index 858b555..9e9c957 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
-@@ -1051,11 +1544,11 @@ ENTRY(error_entry)
+@@ -1054,11 +1547,11 @@ ENTRY(error_entry)
mov %rax, %rsp
decl %ebx
jmp .Lerror_entry_from_usermode_after_swapgs
@@ -17637,7 +17837,7 @@ index 858b555..9e9c957 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
*/
-@@ -1063,10 +1556,10 @@ ENTRY(error_exit)
+@@ -1066,10 +1559,10 @@ ENTRY(error_exit)
movl %ebx, %eax
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF
@@ -17650,7 +17850,7 @@ index 858b555..9e9c957 100644
/* Runs on exception stack */
ENTRY(nmi)
-@@ -1120,6 +1613,8 @@ ENTRY(nmi)
+@@ -1123,6 +1616,8 @@ ENTRY(nmi)
* other IST entries.
*/
@@ -17659,7 +17859,7 @@ index 858b555..9e9c957 100644
/* Use %rdx as our temp variable throughout */
pushq %rdx
-@@ -1163,6 +1658,12 @@ ENTRY(nmi)
+@@ -1166,6 +1661,12 @@ ENTRY(nmi)
pushq %r14 /* pt_regs->r14 */
pushq %r15 /* pt_regs->r15 */
@@ -17672,7 +17872,7 @@ index 858b555..9e9c957 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
-@@ -1173,12 +1674,19 @@ ENTRY(nmi)
+@@ -1176,12 +1677,19 @@ ENTRY(nmi)
movq $-1, %rsi
call do_nmi
@@ -17692,7 +17892,7 @@ index 858b555..9e9c957 100644
jmp restore_c_regs_and_iret
.Lnmi_from_kernel:
-@@ -1300,6 +1808,7 @@ nested_nmi_out:
+@@ -1303,6 +1811,7 @@ nested_nmi_out:
popq %rdx
/* We are returning to kernel mode, so this cannot result in a fault. */
@@ -17700,7 +17900,7 @@ index 858b555..9e9c957 100644
INTERRUPT_RETURN
first_nmi:
-@@ -1328,7 +1837,7 @@ first_nmi:
+@@ -1331,7 +1840,7 @@ first_nmi:
pushq %rsp /* RSP (minus 8 because of the previous push) */
addq $8, (%rsp) /* Fix up RSP */
pushfq /* RFLAGS */
@@ -17709,7 +17909,7 @@ index 858b555..9e9c957 100644
pushq $1f /* RIP */
INTERRUPT_RETURN /* continues at repeat_nmi below */
1:
-@@ -1373,20 +1882,22 @@ end_repeat_nmi:
+@@ -1376,20 +1885,22 @@ end_repeat_nmi:
ALLOC_PT_GPREGS_ON_STACK
/*
@@ -17735,7 +17935,7 @@ index 858b555..9e9c957 100644
jnz nmi_restore
nmi_swapgs:
SWAPGS_UNSAFE_STACK
-@@ -1397,6 +1908,8 @@ nmi_restore:
+@@ -1400,6 +1911,8 @@ nmi_restore:
/* Point RSP at the "iret" frame. */
REMOVE_PT_GPREGS_FROM_STACK 6*8
@@ -17744,7 +17944,7 @@ index 858b555..9e9c957 100644
/*
* Clear "NMI executing". Set DF first so that we can easily
* distinguish the remaining code between here and IRET from
-@@ -1414,9 +1927,9 @@ nmi_restore:
+@@ -1417,9 +1930,9 @@ nmi_restore:
* mode, so this cannot result in a fault.
*/
INTERRUPT_RETURN
@@ -17757,7 +17957,7 @@ index 858b555..9e9c957 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 847f2f0..5f601b1 100644
+index e1721da..83f2c49 100644
--- a/arch/x86/entry/entry_64_compat.S
+++ b/arch/x86/entry/entry_64_compat.S
@@ -13,11 +13,39 @@
@@ -17800,13 +18000,9 @@ index 847f2f0..5f601b1 100644
/*
* 32-bit SYSENTER entry.
*
-@@ -72,26 +100,36 @@ ENTRY(entry_SYSENTER_compat)
- pushfq /* pt_regs->flags (except IF = 0) */
- orl $X86_EFLAGS_IF, (%rsp) /* Fix saved flags */
+@@ -74,23 +102,34 @@ ENTRY(entry_SYSENTER_compat)
pushq $__USER32_CS /* pt_regs->cs */
-- xorq %r8,%r8
-- pushq %r8 /* pt_regs->ip = 0 (placeholder) */
-+ pushq $0 /* pt_regs->ip = 0 (placeholder) */
+ pushq $0 /* pt_regs->ip = 0 (placeholder) */
pushq %rax /* pt_regs->orig_ax */
+ xorl %eax,%eax
pushq %rdi /* pt_regs->di */
@@ -17814,20 +18010,20 @@ index 847f2f0..5f601b1 100644
pushq %rdx /* pt_regs->dx */
pushq %rcx /* pt_regs->cx */
pushq $-ENOSYS /* pt_regs->ax */
-- pushq %r8 /* pt_regs->r8 = 0 */
-- pushq %r8 /* pt_regs->r9 = 0 */
-- pushq %r8 /* pt_regs->r10 = 0 */
-- pushq %r8 /* pt_regs->r11 = 0 */
-+ pushq %rax /* pt_regs->r8 = 0 */
-+ pushq %rax /* pt_regs->r9 = 0 */
-+ pushq %rax /* pt_regs->r10 = 0 */
-+ pushq %rax /* pt_regs->r11 = 0 */
+- pushq $0 /* pt_regs->r8 = 0 */
+- pushq $0 /* pt_regs->r9 = 0 */
+- pushq $0 /* pt_regs->r10 = 0 */
+- pushq $0 /* pt_regs->r11 = 0 */
++ pushq %rax /* pt_regs->r8 = 0 */
++ pushq %rax /* pt_regs->r9 = 0 */
++ pushq %rax /* pt_regs->r10 = 0 */
++ pushq %rax /* pt_regs->r11 = 0 */
pushq %rbx /* pt_regs->rbx */
pushq %rbp /* pt_regs->rbp (will be overwritten) */
-- pushq %r8 /* pt_regs->r12 = 0 */
-- pushq %r8 /* pt_regs->r13 = 0 */
-- pushq %r8 /* pt_regs->r14 = 0 */
-- pushq %r8 /* pt_regs->r15 = 0 */
+- pushq $0 /* pt_regs->r12 = 0 */
+- pushq $0 /* pt_regs->r13 = 0 */
+- pushq $0 /* pt_regs->r14 = 0 */
+- pushq $0 /* pt_regs->r15 = 0 */
+#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
+ pushq %r12 /* pt_regs->r12 */
+#else
@@ -17847,26 +18043,25 @@ index 847f2f0..5f601b1 100644
/*
* SYSENTER doesn't filter flags, so we need to clear NT and AC
* ourselves. To save a few cycles, we can check whether
-@@ -205,17 +243,27 @@ ENTRY(entry_SYSCALL_compat)
+@@ -204,16 +243,27 @@ ENTRY(entry_SYSCALL_compat)
pushq %rdx /* pt_regs->dx */
pushq %rbp /* pt_regs->cx (stashed in bp) */
pushq $-ENOSYS /* pt_regs->ax */
-- xorq %r8,%r8
-- pushq %r8 /* pt_regs->r8 = 0 */
-- pushq %r8 /* pt_regs->r9 = 0 */
-- pushq %r8 /* pt_regs->r10 = 0 */
-- pushq %r8 /* pt_regs->r11 = 0 */
+- pushq $0 /* pt_regs->r8 = 0 */
+- pushq $0 /* pt_regs->r9 = 0 */
+- pushq $0 /* pt_regs->r10 = 0 */
+- pushq $0 /* pt_regs->r11 = 0 */
+ xorl %eax,%eax
-+ pushq %rax /* pt_regs->r8 = 0 */
-+ pushq %rax /* pt_regs->r9 = 0 */
-+ pushq %rax /* pt_regs->r10 = 0 */
-+ pushq %rax /* pt_regs->r11 = 0 */
++ pushq %rax /* pt_regs->r8 = 0 */
++ pushq %rax /* pt_regs->r9 = 0 */
++ pushq %rax /* pt_regs->r10 = 0 */
++ pushq %rax /* pt_regs->r11 = 0 */
pushq %rbx /* pt_regs->rbx */
pushq %rbp /* pt_regs->rbp (will be overwritten) */
-- pushq %r8 /* pt_regs->r12 = 0 */
-- pushq %r8 /* pt_regs->r13 = 0 */
-- pushq %r8 /* pt_regs->r14 = 0 */
-- pushq %r8 /* pt_regs->r15 = 0 */
+- pushq $0 /* pt_regs->r12 = 0 */
+- pushq $0 /* pt_regs->r13 = 0 */
+- pushq $0 /* pt_regs->r14 = 0 */
+- pushq $0 /* pt_regs->r15 = 0 */
+#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
+ pushq %r12 /* pt_regs->r12 */
+#else
@@ -17884,7 +18079,7 @@ index 847f2f0..5f601b1 100644
/*
* User mode is traced as though IRQs are on, and SYSENTER
-@@ -231,11 +279,18 @@ ENTRY(entry_SYSCALL_compat)
+@@ -229,11 +279,18 @@ ENTRY(entry_SYSCALL_compat)
/* Opportunistic SYSRET */
sysret32_from_system_call:
@@ -17903,7 +18098,7 @@ index 847f2f0..5f601b1 100644
addq $RAX, %rsp /* Skip r8-r15 */
popq %rax /* pt_regs->rax */
popq %rdx /* Skip pt_regs->cx */
-@@ -264,7 +319,7 @@ sysret32_from_system_call:
+@@ -262,7 +319,7 @@ sysret32_from_system_call:
movq RSP-ORIG_RAX(%rsp), %rsp
swapgs
sysretl
@@ -17912,24 +18107,23 @@ index 847f2f0..5f601b1 100644
/*
* 32-bit legacy system call entry.
-@@ -316,11 +371,11 @@ ENTRY(entry_INT80_compat)
+@@ -314,10 +371,11 @@ ENTRY(entry_INT80_compat)
pushq %rdx /* pt_regs->dx */
pushq %rcx /* pt_regs->cx */
pushq $-ENOSYS /* pt_regs->ax */
-- xorq %r8,%r8
-- pushq %r8 /* pt_regs->r8 = 0 */
-- pushq %r8 /* pt_regs->r9 = 0 */
-- pushq %r8 /* pt_regs->r10 = 0 */
-- pushq %r8 /* pt_regs->r11 = 0 */
+- pushq $0 /* pt_regs->r8 = 0 */
+- pushq $0 /* pt_regs->r9 = 0 */
+- pushq $0 /* pt_regs->r10 = 0 */
+- pushq $0 /* pt_regs->r11 = 0 */
+ xorl %eax,%eax
-+ pushq %rax /* pt_regs->r8 = 0 */
-+ pushq %rax /* pt_regs->r9 = 0 */
-+ pushq %rax /* pt_regs->r10 = 0 */
-+ pushq %rax /* pt_regs->r11 = 0 */
++ pushq %rax /* pt_regs->r8 = 0 */
++ pushq %rax /* pt_regs->r9 = 0 */
++ pushq %rax /* pt_regs->r10 = 0 */
++ pushq %rax /* pt_regs->r11 = 0 */
pushq %rbx /* pt_regs->rbx */
pushq %rbp /* pt_regs->rbp */
pushq %r12 /* pt_regs->r12 */
-@@ -329,6 +384,12 @@ ENTRY(entry_INT80_compat)
+@@ -326,6 +384,12 @@ ENTRY(entry_INT80_compat)
pushq %r15 /* pt_regs->r15 */
cld
@@ -17942,7 +18136,7 @@ index 847f2f0..5f601b1 100644
/*
* User mode is traced as though IRQs are on, and the interrupt
* gate turned them off.
-@@ -340,10 +401,12 @@ ENTRY(entry_INT80_compat)
+@@ -337,10 +401,12 @@ ENTRY(entry_INT80_compat)
.Lsyscall_32_done:
/* Go back to user mode. */
@@ -17957,27 +18151,27 @@ index 847f2f0..5f601b1 100644
ALIGN
GLOBAL(stub32_clone)
diff --git a/arch/x86/entry/thunk_64.S b/arch/x86/entry/thunk_64.S
-index 98df1fa..b2ef8bd 100644
+index 027aec4..0e3afc9 100644
--- a/arch/x86/entry/thunk_64.S
+++ b/arch/x86/entry/thunk_64.S
-@@ -9,6 +9,7 @@
+@@ -8,6 +8,7 @@
+ #include <linux/linkage.h>
#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
-@@ -66,6 +67,7 @@ restore:
+@@ -65,6 +66,7 @@ restore:
popq %rsi
popq %rdi
- FRAME_END
+ popq %rbp
+ pax_force_retaddr
ret
_ASM_NOKPROBE(restore)
#endif
diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile
-index 6874da5..acbad90 100644
+index 253b72e..e0fb97e 100644
--- a/arch/x86/entry/vdso/Makefile
+++ b/arch/x86/entry/vdso/Makefile
@@ -75,7 +75,7 @@ CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \
@@ -18007,10 +18201,10 @@ index 6874da5..acbad90 100644
GCOV_PROFILE := n
diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c
-index 03c3eb7..23f58a5 100644
+index 2f02d23..86d61a3 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)
+@@ -315,5 +315,5 @@ notrace time_t __vdso_time(time_t *t)
*t = result;
return result;
}
@@ -18040,11 +18234,11 @@ index 63a03bb..ee6bd34 100644
GET_LE(&symtab_hdr->sh_entsize) * i;
const char *name = raw_addr + GET_LE(&strtab_hdr->sh_offset) +
diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c
-index 10f7045..ebe6eb7 100644
+index ab220ac..a7b22cd 100644
--- a/arch/x86/entry/vdso/vma.c
+++ b/arch/x86/entry/vdso/vma.c
-@@ -21,10 +21,7 @@
- #include <asm/hpet.h>
+@@ -20,10 +20,7 @@
+ #include <asm/page.h>
#include <asm/desc.h>
#include <asm/cpufeature.h>
-
@@ -18055,7 +18249,7 @@ index 10f7045..ebe6eb7 100644
void __init init_vdso_image(const struct vdso_image *image)
{
-@@ -90,7 +87,7 @@ static int vdso_fault(const struct vm_special_mapping *sm,
+@@ -89,7 +86,7 @@ static int vdso_fault(const struct vm_special_mapping *sm,
{
const struct vdso_image *image = vma->vm_mm->context.vdso_image;
@@ -18064,7 +18258,7 @@ index 10f7045..ebe6eb7 100644
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)
+@@ -156,6 +153,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
.fault = vvar_fault,
};
@@ -18076,8 +18270,8 @@ index 10f7045..ebe6eb7 100644
if (calculate_addr) {
addr = vdso_addr(current->mm->start_stack,
image->size - image->sym_vvar_start);
-@@ -177,15 +179,15 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
- down_write(&mm->mmap_sem);
+@@ -167,15 +169,15 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
+ return -EINTR;
addr = get_unmapped_area(NULL, addr,
- image->size - image->sym_vvar_start, 0, 0);
@@ -18095,7 +18289,7 @@ index 10f7045..ebe6eb7 100644
/*
* MAYWRITE to allow gdb to COW and set breakpoints
-@@ -209,14 +211,12 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
+@@ -199,14 +201,12 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
VM_PFNMAP,
&vvar_mapping);
@@ -18112,7 +18306,7 @@ index 10f7045..ebe6eb7 100644
up_write(&mm->mmap_sem);
return ret;
-@@ -235,9 +235,6 @@ static int load_vdso32(void)
+@@ -225,9 +225,6 @@ static int load_vdso32(void)
#ifdef CONFIG_X86_64
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{
@@ -18122,7 +18316,7 @@ index 10f7045..ebe6eb7 100644
return map_vdso(&vdso_image_64, true);
}
-@@ -246,12 +243,8 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm,
+@@ -236,12 +233,8 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm,
int uses_interp)
{
#ifdef CONFIG_X86_X32_ABI
@@ -18136,7 +18330,7 @@ index 10f7045..ebe6eb7 100644
#endif
#ifdef CONFIG_IA32_EMULATION
return load_vdso32();
-@@ -268,15 +261,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
+@@ -258,15 +251,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
#endif
#ifdef CONFIG_X86_64
@@ -18260,10 +18454,10 @@ index 6011a57..311bea0 100644
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 7eb806c..13eb73d 100644
+index 91eac39..a8bc9c0 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
-@@ -1535,7 +1535,7 @@ static void __init pmu_check_apic(void)
+@@ -1541,7 +1541,7 @@ static void __init pmu_check_apic(void)
}
@@ -18272,7 +18466,7 @@ index 7eb806c..13eb73d 100644
.name = "format",
.attrs = NULL,
};
-@@ -1643,7 +1643,7 @@ static struct attribute *events_attr[] = {
+@@ -1649,7 +1649,7 @@ static struct attribute *events_attr[] = {
NULL,
};
@@ -18281,7 +18475,7 @@ index 7eb806c..13eb73d 100644
.name = "events",
.attrs = events_attr,
};
-@@ -2251,7 +2251,7 @@ static unsigned long get_segment_base(unsigned int segment)
+@@ -2257,7 +2257,7 @@ static unsigned long get_segment_base(unsigned int segment)
if (idx > GDT_ENTRIES)
return 0;
@@ -18290,7 +18484,7 @@ index 7eb806c..13eb73d 100644
}
return get_desc_base(desc);
-@@ -2357,7 +2357,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
+@@ -2363,7 +2363,7 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs
break;
perf_callchain_store(entry, frame.return_address);
@@ -18300,19 +18494,19 @@ index 7eb806c..13eb73d 100644
pagefault_enable();
}
diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
-index b99dc92..407392a 100644
+index 0a6e393..aa36c3d 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)
+@@ -252,7 +252,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)
+ return;
+
+@@ -274,7 +274,7 @@ static void __bts_event_stop(struct perf_event *event)
if (event->hw.state & PERF_HES_STOPPED)
return;
@@ -18321,8 +18515,8 @@ index b99dc92..407392a 100644
}
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);
+@@ -284,7 +284,7 @@ static void bts_event_stop(struct perf_event *event, int flags)
+ struct bts_buffer *buf = perf_get_aux(&bts->handle);
/* PMI handler: don't restart this counter */
- ACCESS_ONCE(bts->started) = 0;
@@ -18331,10 +18525,10 @@ index b99dc92..407392a 100644
__bts_event_stop(event);
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
-index 5210eaa..b6846dc 100644
+index 9b4f9d3..ce64392 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,
+@@ -2348,6 +2348,8 @@ __intel_get_event_constraints(struct cpu_hw_events *cpuc, int idx,
}
static void
@@ -18343,7 +18537,7 @@ index 5210eaa..b6846dc 100644
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)
+@@ -2357,14 +2359,18 @@ intel_start_scheduling(struct cpu_hw_events *cpuc)
/*
* nothing needed if in group validation mode
*/
@@ -18364,7 +18558,7 @@ index 5210eaa..b6846dc 100644
xl = &excl_cntrs->states[tid];
-@@ -2241,6 +2247,8 @@ static void intel_commit_scheduling(struct cpu_hw_events *cpuc, int idx, int cnt
+@@ -2404,6 +2410,8 @@ static void intel_commit_scheduling(struct cpu_hw_events *cpuc, int idx, int cnt
}
static void
@@ -18373,7 +18567,7 @@ index 5210eaa..b6846dc 100644
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)
+@@ -2413,13 +2421,18 @@ intel_stop_scheduling(struct cpu_hw_events *cpuc)
/*
* nothing needed if in group validation mode
*/
@@ -18394,7 +18588,7 @@ index 5210eaa..b6846dc 100644
xl = &excl_cntrs->states[tid];
-@@ -2439,19 +2452,22 @@ static void intel_put_excl_constraints(struct cpu_hw_events *cpuc,
+@@ -2602,19 +2615,22 @@ static void intel_put_excl_constraints(struct cpu_hw_events *cpuc,
* unused now.
*/
if (hwc->idx >= 0) {
@@ -18419,7 +18613,7 @@ index 5210eaa..b6846dc 100644
raw_spin_unlock(&excl_cntrs->lock);
}
}
-@@ -3360,10 +3376,10 @@ __init int intel_pmu_init(void)
+@@ -3523,10 +3539,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)) {
@@ -18476,11 +18670,11 @@ index 7b5fd81..3ca58b5 100644
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
+index 9ba4e41..f931fb9 100644
--- a/arch/x86/events/intel/cstate.c
+++ b/arch/x86/events/intel/cstate.c
-@@ -92,14 +92,14 @@
- #include "../perf_event.h"
+@@ -94,14 +94,14 @@
+ MODULE_LICENSE("GPL");
#define DEFINE_CSTATE_FORMAT_ATTR(_var, _name, _format) \
-static ssize_t __cstate_##_var##_show(struct kobject *kobj, \
@@ -18498,7 +18692,7 @@ index 7946c42..75c730b 100644
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
+index 7ce9f3f..dc9146c 100644
--- a/arch/x86/events/intel/ds.c
+++ b/arch/x86/events/intel/ds.c
@@ -601,7 +601,7 @@ unlock:
@@ -18510,7 +18704,7 @@ index 8584b90..82c274a 100644
x86_pmu.drain_pebs(&regs);
}
-@@ -903,7 +903,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs)
+@@ -909,7 +909,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;
@@ -18519,7 +18713,7 @@ index 8584b90..82c274a 100644
int is_64bit = 0;
void *kaddr;
int size;
-@@ -955,6 +955,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs)
+@@ -961,6 +961,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs)
} else {
kaddr = (void *)to;
}
@@ -18527,7 +18721,7 @@ index 8584b90..82c274a 100644
do {
struct insn insn;
-@@ -1103,7 +1104,7 @@ static void setup_pebs_sample_data(struct perf_event *event,
+@@ -1109,7 +1110,7 @@ static void setup_pebs_sample_data(struct perf_event *event,
}
if (event->attr.precise_ip > 1 && x86_pmu.intel_cap.pebs_format >= 2) {
@@ -18537,10 +18731,10 @@ index 8584b90..82c274a 100644
} 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
+index 9e2b40c..a9013c2 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)
+@@ -717,7 +717,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.
*/
@@ -18549,7 +18743,7 @@ index 1ca5d1e..3835cc0 100644
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)
+@@ -739,7 +739,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
@@ -18559,28 +18753,24 @@ index 1ca5d1e..3835cc0 100644
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
+index 04bb5fb..69cbd32 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[] = {
+@@ -172,11 +172,9 @@ 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)];
+ u64 reg;
+- int ret;
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)
+ rdmsrl(MSR_PLATFORM_INFO, reg);
+@@ -207,8 +205,6 @@ static int __init pt_pmu_hw_init(void)
pt_pmu.vmx = true;
}
@@ -18589,7 +18779,7 @@ index 7377814..a128ad7 100644
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)
+@@ -217,39 +213,25 @@ static int __init pt_pmu_hw_init(void)
&pt_pmu.caps[CR_EDX + i*PT_CPUID_REGS_NUM]);
}
@@ -18637,29 +18827,11 @@ index 7377814..a128ad7 100644
}
#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 78ee9eb..1aae264 100644
+index e30eef4..2c79b8e 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 = {
+@@ -116,14 +116,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) \
@@ -18677,7 +18849,7 @@ index 78ee9eb..1aae264 100644
__ATTR(_name, 0444, __rapl_##_var##_show, NULL)
#define RAPL_CNTR_WIDTH 32
-@@ -488,7 +488,7 @@ static struct attribute *rapl_events_knl_attr[] = {
+@@ -532,7 +532,7 @@ static struct attribute *rapl_events_knl_attr[] = {
NULL,
};
@@ -18687,10 +18859,10 @@ index 78ee9eb..1aae264 100644
.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
+index fce7406..4187d6a 100644
--- a/arch/x86/events/intel/uncore.c
+++ b/arch/x86/events/intel/uncore.c
-@@ -84,8 +84,8 @@ end:
+@@ -87,8 +87,8 @@ end:
return map;
}
@@ -18701,7 +18873,7 @@ index f921a1e..8f8920f 100644
{
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)
+@@ -816,7 +816,7 @@ static void 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;
@@ -18756,10 +18928,10 @@ index 79766b9..8e2b3d0 100644
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
+index 8bd764d..76a1790 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)
+@@ -793,7 +793,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);
@@ -18769,7 +18941,7 @@ index ad4dc7f..1eff595 100644
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
+index cb26f18..4f43f23 100644
--- a/arch/x86/ia32/ia32_aout.c
+++ b/arch/x86/ia32/ia32_aout.c
@@ -153,6 +153,8 @@ static int aout_core_dump(struct coredump_params *cprm)
@@ -18782,7 +18954,7 @@ index ae6aad1..719d6d9 100644
set_fs(KERNEL_DS);
has_dumped = 1;
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
-index 0552884..4e736e4 100644
+index 2f29f4e..ac453b4 100644
--- a/arch/x86/ia32/ia32_signal.c
+++ b/arch/x86/ia32/ia32_signal.c
@@ -123,7 +123,7 @@ asmlinkage long sys32_sigreturn(void)
@@ -19021,10 +19193,10 @@ index e7636ba..e1fb78a 100644
\newinstr1
144:
diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h
-index 99afb66..c098094 100644
+index e77a644..cf157f4 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)
+@@ -137,7 +137,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
".pushsection .altinstructions,\"a\"\n" \
ALTINSTR_ENTRY(feature, 1) \
".popsection\n" \
@@ -19033,7 +19205,7 @@ index 99afb66..c098094 100644
ALTINSTR_REPLACEMENT(newinstr, feature, 1) \
".popsection"
-@@ -146,7 +146,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
+@@ -147,7 +147,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
ALTINSTR_ENTRY(feature1, 1) \
ALTINSTR_ENTRY(feature2, 2) \
".popsection\n" \
@@ -19043,7 +19215,7 @@ index 99afb66..c098094 100644
ALTINSTR_REPLACEMENT(newinstr2, feature2, 2) \
".popsection"
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
-index 98f25bb..230bd9e 100644
+index bc27611..6fccbde 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -49,7 +49,7 @@ static inline void generic_apic_probe(void)
@@ -20015,7 +20187,7 @@ index 7766d1c..f545428 100644
int bitpos = -1;
/*
diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
-index 6b8d6e8..3cbf4f8 100644
+index abd06b1..17fc65f 100644
--- a/arch/x86/include/asm/boot.h
+++ b/arch/x86/include/asm/boot.h
@@ -6,7 +6,7 @@
@@ -20150,7 +20322,7 @@ index 9733361..2053014 100644
({ \
__typeof__ (*(ptr)) __ret = (inc); \
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
-index ebb102e..4240767 100644
+index 5a3b2c1..80226b4 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;
@@ -20166,10 +20338,10 @@ index ebb102e..4240767 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 aeab479..5467e0b 100644
+index 483fb54..3b9022c 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
-@@ -164,7 +164,7 @@ static __always_inline __pure bool _static_cpu_has(u16 bit)
+@@ -140,7 +140,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"
@@ -20179,10 +20351,10 @@ index aeab479..5467e0b 100644
"5:\n"
".previous\n"
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
-index 8f9afef..378b605 100644
+index c64b1e9..1bdb386 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
-@@ -204,7 +204,8 @@
+@@ -205,7 +205,8 @@
#define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */
#define X86_FEATURE_XENPV ( 8*32+16) /* "" Xen paravirtual guest */
@@ -20192,7 +20364,7 @@ index 8f9afef..378b605 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*/
-@@ -212,7 +213,7 @@
+@@ -213,7 +214,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 */
@@ -20687,10 +20859,10 @@ index fe884e1..46149ae 100644
{
spin_unlock_irqrestore(&dma_spin_lock, flags);
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
-index 53748c4..283147d 100644
+index 78d1e74..7a769dc 100644
--- a/arch/x86/include/asm/efi.h
+++ b/arch/x86/include/asm/efi.h
-@@ -168,6 +168,11 @@ static inline bool efi_is_native(void)
+@@ -153,6 +153,11 @@ static inline bool efi_is_native(void)
static inline bool efi_runtime_supported(void)
{
@@ -20703,7 +20875,7 @@ index 53748c4..283147d 100644
return true;
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
-index 15340e3..f338653 100644
+index fea7724..1986ecdf 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;
@@ -21250,25 +21422,18 @@ index b77f5ed..a2f791e 100644
#define INTERRUPT_RETURN iret
#define ENABLE_INTERRUPTS_SYSEXIT sti; sysexit
diff --git a/arch/x86/include/asm/kprobes.h b/arch/x86/include/asm/kprobes.h
-index 4421b5d..8543006 100644
+index d1d1e50..5bacb6d 100644
--- a/arch/x86/include/asm/kprobes.h
+++ b/arch/x86/include/asm/kprobes.h
-@@ -37,13 +37,8 @@ typedef u8 kprobe_opcode_t;
+@@ -37,7 +37,7 @@ typedef u8 kprobe_opcode_t;
#define RELATIVEJUMP_SIZE 5
#define RELATIVECALL_OPCODE 0xe8
#define RELATIVE_ADDR_SIZE 4
-#define MAX_STACK_SIZE 64
--#define MIN_STACK_SIZE(ADDR) \
-- (((MAX_STACK_SIZE) < (((unsigned long)current_thread_info()) + \
-- THREAD_SIZE - (unsigned long)(ADDR))) \
-- ? (MAX_STACK_SIZE) \
-- : (((unsigned long)current_thread_info()) + \
-- THREAD_SIZE - (unsigned long)(ADDR)))
+#define MAX_STACK_SIZE 64UL
-+#define MIN_STACK_SIZE(ADDR) min(MAX_STACK_SIZE, current->thread.sp0 - (unsigned long)(ADDR))
-
- #define flush_insn_slot(p) do { } while (0)
-
+ #define CUR_STACK_SIZE(ADDR) \
+ (current_top_of_stack() - (unsigned long)(ADDR))
+ #define MIN_STACK_SIZE(ADDR) \
diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h
index e9cd7be..0f3574f 100644
--- a/arch/x86/include/asm/kvm_emulate.h
@@ -21476,6 +21641,19 @@ index 4ad6560..75c7bdd 100644
/* Always has a lock prefix */
#define local_xchg(l, n) (xchg(&((l)->a.counter), (n)))
+diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
+index 8bf766e..d800b61 100644
+--- a/arch/x86/include/asm/mce.h
++++ b/arch/x86/include/asm/mce.h
+@@ -184,7 +184,7 @@ struct mca_msr_regs {
+ u32 (*status) (int bank);
+ u32 (*addr) (int bank);
+ u32 (*misc) (int bank);
+-};
++} __no_const;
+
+ extern struct mce_vendor_flags mce_flags;
+
diff --git a/arch/x86/include/asm/mman.h b/arch/x86/include/asm/mman.h
new file mode 100644
index 0000000..2bfd3ba
@@ -21523,7 +21701,7 @@ index 1ea0bae..25de747 100644
atomic_t perf_rdpmc_allowed; /* nonzero if rdpmc is allowed */
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
-index 8428002..89716a8 100644
+index 39634819..c944992 100644
--- a/arch/x86/include/asm/mmu_context.h
+++ b/arch/x86/include/asm/mmu_context.h
@@ -46,7 +46,7 @@ struct ldt_struct {
@@ -21580,157 +21758,6 @@ index 8428002..89716a8 100644
#ifdef CONFIG_SMP
if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK)
this_cpu_write(cpu_tlbstate.state, TLBSTATE_LAZY);
-@@ -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)
-+{
-+
-+#ifdef CONFIG_PAX_PER_CPU_PGD
-+ pax_open_kernel();
-+
-+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCIDUDEREF))
-+ __clone_user_pgds(get_cpu_pgd(cpu, user), next->pgd);
-+ else
-+#endif
-+
-+ __clone_user_pgds(get_cpu_pgd(cpu, kernel), next->pgd);
-+
-+ __shadow_user_pgds(get_cpu_pgd(cpu, kernel) + USER_PGD_PTRS, next->pgd);
-+
-+ pax_close_kernel();
-+
-+ BUG_ON((__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL) != (read_cr3() & __PHYSICAL_MASK) && (__pa(get_cpu_pgd(cpu, user)) | PCID_USER) != (read_cr3() & __PHYSICAL_MASK));
-+
-+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
-+ if (static_cpu_has(X86_FEATURE_PCIDUDEREF)) {
-+ if (static_cpu_has(X86_FEATURE_INVPCID)) {
-+ u64 descriptor[2];
-+ descriptor[0] = PCID_USER;
-+ asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_CONTEXT) : "memory");
-+ if (!static_cpu_has(X86_FEATURE_STRONGUDEREF)) {
-+ descriptor[0] = PCID_KERNEL;
-+ asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_CONTEXT) : "memory");
-+ }
-+ } else {
-+ write_cr3(__pa(get_cpu_pgd(cpu, user)) | PCID_USER);
-+ if (static_cpu_has(X86_FEATURE_STRONGUDEREF))
-+ write_cr3(__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL | PCID_NOFLUSH);
-+ else
-+ write_cr3(__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL);
-+ }
-+ } else
-+#endif
-+
-+ load_cr3(get_cpu_pgd(cpu, kernel));
-+#endif
-+
-+}
-+
- static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
- struct task_struct *tsk)
- {
- unsigned cpu = smp_processor_id();
-+#if defined(CONFIG_X86_32) && defined(CONFIG_SMP) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
-+ int tlbstate = TLBSTATE_OK;
-+#endif
-
- if (likely(prev != next)) {
- #ifdef CONFIG_SMP
-+#if defined(CONFIG_X86_32) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
-+ tlbstate = this_cpu_read(cpu_tlbstate.state);
-+#endif
- this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK);
- this_cpu_write(cpu_tlbstate.active_mm, next);
- #endif
-@@ -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
-- * be sent, and CPU 0's TLB will contain a stale entry.)
-+ * be sent, and CPU 1's TLB will contain a stale entry.)
- *
- * The bad outcome can occur if either CPU's load is
- * reordered before that CPU's store, so both CPUs must
-@@ -155,7 +237,11 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
- * ordering guarantee we need.
- *
- */
-+#ifdef CONFIG_PAX_PER_CPU_PGD
-+ pax_switch_mm(next, cpu);
-+#else
- load_cr3(next->pgd);
-+#endif
-
- trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
-
-@@ -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
-+
-+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC) && defined(CONFIG_SMP)
-+ if (!(__supported_pte_mask & _PAGE_NX)) {
-+ smp_mb__before_atomic();
-+ cpumask_clear_cpu(cpu, &prev->context.cpu_user_cs_mask);
-+ smp_mb__after_atomic();
-+ cpumask_set_cpu(cpu, &next->context.cpu_user_cs_mask);
-+ }
-+#endif
-+
-+#if defined(CONFIG_X86_32) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
-+ if (unlikely(prev->context.user_cs_base != next->context.user_cs_base ||
-+ prev->context.user_cs_limit != next->context.user_cs_limit))
-+ set_user_cs(next->context.user_cs_base, next->context.user_cs_limit, cpu);
-+#ifdef CONFIG_SMP
-+ else if (unlikely(tlbstate != TLBSTATE_OK))
-+ set_user_cs(next->context.user_cs_base, next->context.user_cs_limit, cpu);
-+#endif
-+#endif
-+
- }
-+ else {
-+ pax_switch_mm(next, cpu);
-+
- #ifdef CONFIG_SMP
-- else {
- this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK);
- BUG_ON(this_cpu_read(cpu_tlbstate.active_mm) != 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.
- */
-+
-+#ifndef CONFIG_PAX_PER_CPU_PGD
- load_cr3(next->pgd);
- trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
-+#endif
-+
- load_mm_cr4(next);
- load_mm_ldt(next);
-+
-+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC)
-+ if (!(__supported_pte_mask & _PAGE_NX))
-+ cpumask_set_cpu(cpu, &next->context.cpu_user_cs_mask);
-+#endif
-+
-+#if defined(CONFIG_X86_32) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
-+#ifdef CONFIG_PAX_PAGEEXEC
-+ if (!((next->pax_flags & MF_PAX_PAGEEXEC) && (__supported_pte_mask & _PAGE_NX)))
-+#endif
-+ set_user_cs(next->context.user_cs_base, next->context.user_cs_limit, cpu);
-+#endif
-+
- }
-+#endif
- }
--#endif
- }
-
- #define activate_mm(prev, next) \
diff --git a/arch/x86/include/asm/module.h b/arch/x86/include/asm/module.h
index e3b7819..ba128ec 100644
--- a/arch/x86/include/asm/module.h
@@ -21818,18 +21845,19 @@ index 5f2fc44..106caa6 100644
void unregister_nmi_handler(unsigned int, const char *);
diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h
-index 802dde3..9183e68 100644
+index cf8f619..bbcf5e6 100644
--- a/arch/x86/include/asm/page.h
+++ b/arch/x86/include/asm/page.h
-@@ -52,6 +52,7 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
- __phys_addr_symbol(__phys_reloc_hide((unsigned long)(x)))
-
+@@ -58,6 +58,8 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
-+#define __early_va(x) ((void *)((unsigned long)(x)+__START_KERNEL_map - phys_base))
+ #endif
++#define __early_va(x) ((void *)((unsigned long)(x)+__START_KERNEL_map - phys_base))
++
#define __boot_va(x) __va(x)
#define __boot_pa(x) __pa(x)
-@@ -60,11 +61,21 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
+
+@@ -65,11 +67,21 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
* virt_to_page(kaddr) returns a valid pointer if and only if
* virt_addr_valid(kaddr) returns true.
*/
@@ -21913,10 +21941,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 601f1b8..1d2f5a1 100644
+index 2970d22..fce32bd 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
-@@ -511,7 +511,7 @@ static inline pmd_t __pmd(pmdval_t val)
+@@ -509,7 +509,7 @@ static inline pmd_t __pmd(pmdval_t val)
return (pmd_t) { ret };
}
@@ -21925,7 +21953,7 @@ index 601f1b8..1d2f5a1 100644
{
pmdval_t ret;
-@@ -577,6 +577,18 @@ static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
+@@ -575,6 +575,18 @@ static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
val);
}
@@ -21944,7 +21972,7 @@ index 601f1b8..1d2f5a1 100644
static inline void pgd_clear(pgd_t *pgdp)
{
set_pgd(pgdp, __pgd(0));
-@@ -661,6 +673,21 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
+@@ -659,6 +671,21 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
pv_mmu_ops.set_fixmap(idx, phys, flags);
}
@@ -21966,7 +21994,7 @@ index 601f1b8..1d2f5a1 100644
#if defined(CONFIG_SMP) && defined(CONFIG_PARAVIRT_SPINLOCKS)
#ifdef CONFIG_QUEUED_SPINLOCKS
-@@ -888,7 +915,7 @@ extern void default_banner(void);
+@@ -886,7 +913,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)
@@ -21975,7 +22003,7 @@ index 601f1b8..1d2f5a1 100644
#endif
#define INTERRUPT_RETURN \
-@@ -946,6 +973,21 @@ extern void default_banner(void);
+@@ -944,6 +971,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))
@@ -21998,10 +22026,10 @@ index 601f1b8..1d2f5a1 100644
#endif /* __ASSEMBLY__ */
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
-index e8c2326..4458a61 100644
+index 7fa9e77..aa09e68 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 {
+@@ -83,7 +83,7 @@ struct pv_init_ops {
*/
unsigned (*patch)(u8 type, u16 clobber, void *insnbuf,
unsigned long addr, unsigned len);
@@ -22010,7 +22038,7 @@ index e8c2326..4458a61 100644
struct pv_lazy_ops {
-@@ -97,12 +97,12 @@ struct pv_lazy_ops {
+@@ -91,12 +91,12 @@ struct pv_lazy_ops {
void (*enter)(void);
void (*leave)(void);
void (*flush)(void);
@@ -22093,7 +22121,7 @@ index e8c2326..4458a61 100644
extern struct pv_info pv_info;
extern struct pv_init_ops pv_init_ops;
diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h
-index bf7f8b5..ca5799d 100644
+index 574c23c..55fb8b05 100644
--- a/arch/x86/include/asm/pgalloc.h
+++ b/arch/x86/include/asm/pgalloc.h
@@ -63,6 +63,13 @@ static inline void pmd_populate_kernel(struct mm_struct *mm,
@@ -22145,7 +22173,7 @@ index bf7f8b5..ca5799d 100644
+
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
{
- return (pud_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
+ return (pud_t *)get_zeroed_page(GFP_KERNEL);
diff --git a/arch/x86/include/asm/pgtable-2level.h b/arch/x86/include/asm/pgtable-2level.h
index fd74a11..35fd5af 100644
--- a/arch/x86/include/asm/pgtable-2level.h
@@ -22195,7 +22223,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 97f3242..2603a59 100644
+index 1a27396..a9c27d3 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);
@@ -22272,7 +22300,7 @@ index 97f3242..2603a59 100644
#define pte_page(pte) pfn_to_page(pte_pfn(pte))
static inline int pmd_large(pmd_t pte)
-@@ -223,9 +270,29 @@ static inline pte_t pte_wrprotect(pte_t pte)
+@@ -224,9 +271,29 @@ static inline pte_t pte_wrprotect(pte_t pte)
return pte_clear_flags(pte, _PAGE_RW);
}
@@ -22303,7 +22331,7 @@ index 97f3242..2603a59 100644
}
static inline pte_t pte_mkdirty(pte_t pte)
-@@ -430,7 +497,7 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
+@@ -431,7 +498,7 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
#define canon_pgprot(p) __pgprot(massage_pgprot(p))
@@ -22312,7 +22340,7 @@ index 97f3242..2603a59 100644
enum page_cache_mode pcm,
enum page_cache_mode new_pcm)
{
-@@ -473,6 +540,16 @@ pte_t *populate_extra_pte(unsigned long vaddr);
+@@ -474,6 +541,16 @@ pte_t *populate_extra_pte(unsigned long vaddr);
#endif
#ifndef __ASSEMBLY__
@@ -22329,7 +22357,7 @@ index 97f3242..2603a59 100644
#include <linux/mm_types.h>
#include <linux/mmdebug.h>
#include <linux/log2.h>
-@@ -673,7 +750,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd)
+@@ -674,7 +751,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:
*/
@@ -22338,7 +22366,7 @@ index 97f3242..2603a59 100644
/* to find an entry in a page-table-directory. */
static inline unsigned long pud_index(unsigned long address)
-@@ -688,7 +765,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address)
+@@ -689,7 +766,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address)
static inline int pgd_bad(pgd_t pgd)
{
@@ -22347,7 +22375,7 @@ index 97f3242..2603a59 100644
}
static inline int pgd_none(pgd_t pgd)
-@@ -711,7 +788,12 @@ static inline int pgd_none(pgd_t pgd)
+@@ -712,7 +789,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;
*/
@@ -22361,7 +22389,7 @@ index 97f3242..2603a59 100644
/*
* a shortcut which implies the use of the kernel's pgd, instead
* of a process's
-@@ -722,6 +804,25 @@ static inline int pgd_none(pgd_t pgd)
+@@ -723,6 +805,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)
@@ -22387,7 +22415,7 @@ index 97f3242..2603a59 100644
#ifndef __ASSEMBLY__
extern int direct_gbpages;
-@@ -876,11 +977,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm,
+@@ -877,11 +978,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.
*/
@@ -22698,7 +22726,7 @@ index d397deb..e977c3b 100644
/*
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index 9264476..a56f17d 100644
+index 62c6cc3..93d0f25 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -135,7 +135,7 @@ struct cpuinfo_x86 {
@@ -22754,9 +22782,9 @@ index 9264476..a56f17d 100644
#endif
#ifdef CONFIG_X86_32
unsigned long ip;
-@@ -392,6 +403,9 @@ struct thread_struct {
+@@ -399,6 +410,9 @@ struct thread_struct {
+ unsigned long gs;
#endif
- unsigned long gs;
+ /* Floating point and extended processor state */
+ struct fpu fpu;
@@ -22764,7 +22792,7 @@ index 9264476..a56f17d 100644
/* Save middle states of ptrace breakpoints */
struct perf_event *ptrace_bps[HBP_NUM];
/* Debug status used for traps, single steps, etc... */
-@@ -411,13 +425,6 @@ struct thread_struct {
+@@ -418,13 +432,6 @@ struct thread_struct {
unsigned long iopl;
/* Max allowed port in the bitmap, in bytes: */
unsigned io_bitmap_max;
@@ -22778,20 +22806,20 @@ index 9264476..a56f17d 100644
};
/*
-@@ -459,10 +466,10 @@ static inline void native_swapgs(void)
- #endif
- }
+@@ -468,12 +475,8 @@ static inline void native_swapgs(void)
--static inline unsigned long current_top_of_stack(void)
-+static inline unsigned long current_top_of_stack(unsigned int cpu)
+ static inline unsigned long current_top_of_stack(void)
{
- #ifdef CONFIG_X86_64
+-#ifdef CONFIG_X86_64
- return this_cpu_read_stable(cpu_tss.x86_tss.sp0);
-+ return cpu_tss[cpu].x86_tss.sp0;
- #else
+-#else
/* sp0 on x86_32 is special in and around vm86 mode. */
return this_cpu_read_stable(cpu_current_top_of_stack);
-@@ -698,19 +705,29 @@ static inline void spin_lock_prefetch(const void *x)
+-#endif
+ }
+
+ #ifdef CONFIG_PARAVIRT
+@@ -703,19 +706,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)
@@ -22822,7 +22850,7 @@ index 9264476..a56f17d 100644
}
extern unsigned long thread_saved_pc(struct task_struct *tsk);
-@@ -725,12 +742,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+@@ -730,12 +743,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
* "struct pt_regs" is possible, but they may contain the
* completely wrong values.
*/
@@ -22836,7 +22864,7 @@ index 9264476..a56f17d 100644
#define KSTK_ESP(task) (task_pt_regs(task)->sp)
-@@ -744,13 +756,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+@@ -749,13 +757,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
* particular problem by preventing anything from being mapped
* at the maximum canonical address.
*/
@@ -22852,7 +22880,7 @@ index 9264476..a56f17d 100644
#define TASK_SIZE (test_thread_flag(TIF_ADDR32) ? \
IA32_PAGE_OFFSET : TASK_SIZE_MAX)
-@@ -761,7 +773,8 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+@@ -766,7 +774,8 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
#define STACK_TOP_MAX TASK_SIZE_MAX
#define INIT_THREAD { \
@@ -22862,7 +22890,7 @@ index 9264476..a56f17d 100644
}
/*
-@@ -784,6 +797,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
+@@ -789,6 +798,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
*/
#define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3))
@@ -22873,7 +22901,7 @@ index 9264476..a56f17d 100644
#define KSTK_EIP(task) (task_pt_regs(task)->ip)
/* Get/set a process' ability to use the timestamp counter instruction */
-@@ -829,7 +846,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
+@@ -834,7 +847,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
return 0;
}
@@ -22882,7 +22910,7 @@ index 9264476..a56f17d 100644
extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
void default_idle(void);
-@@ -839,6 +856,6 @@ bool xen_set_default_idle(void);
+@@ -844,6 +857,6 @@ bool xen_set_default_idle(void);
#define xen_set_default_idle 0
#endif
@@ -23097,7 +23125,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 ceec86eb..872e33a 100644
+index 453744c..e6ad97e 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)
@@ -23130,22 +23158,31 @@ index ceec86eb..872e33a 100644
" jle 2f\n\t"
LOCK_PREFIX " cmpxchg %2,%0\n\t"
" jnz 1b\n\t"
-@@ -104,6 +120,14 @@ static inline void __down_write_nested(struct rw_semaphore *sem, int subclass)
- long tmp;
- asm volatile("# beginning down_write\n\t"
- LOCK_PREFIX " xadd %1,(%2)\n\t"
-+
+@@ -99,12 +115,23 @@ static inline int __down_read_trylock(struct rw_semaphore *sem)
+ /*
+ * lock for writing
+ */
+#ifdef CONFIG_PAX_REFCOUNT
-+ "jno 0f\n"
-+ "mov %1,(%2)\n"
-+ "int $4\n0:\n"
++#define ____down_write_undo \
++ "jno 0f\n"\
++ "mov %1,(%2)\n"\
++ "int $4\n0:\n"\
+ _ASM_EXTABLE(0b, 0b)
++#else
++#define ____down_write_undo
+#endif
+
- /* adds 0xffff0001, returns the old value */
- " test " __ASM_SEL(%w1,%k1) "," __ASM_SEL(%w1,%k1) "\n\t"
- /* was the active mask 0 before? */
-@@ -155,6 +179,14 @@ static inline void __up_read(struct rw_semaphore *sem)
+ #define ____down_write(sem, slow_path) \
+ ({ \
+ long tmp; \
+ struct rw_semaphore* ret; \
+ asm volatile("# beginning down_write\n\t" \
+ LOCK_PREFIX " xadd %1,(%3)\n\t" \
++ ____down_write_undo \
+ /* adds 0xffff0001, returns the old value */ \
+ " test " __ASM_SEL(%w1,%k1) "," __ASM_SEL(%w1,%k1) "\n\t" \
+ /* was the active mask 0 before? */\
+@@ -165,6 +192,14 @@ static inline void __up_read(struct rw_semaphore *sem)
long tmp;
asm volatile("# beginning __up_read\n\t"
LOCK_PREFIX " xadd %1,(%2)\n\t"
@@ -23160,7 +23197,7 @@ index ceec86eb..872e33a 100644
/* subtracts 1, returns the old value */
" jns 1f\n\t"
" call call_rwsem_wake\n" /* expects old value in %edx */
-@@ -173,6 +205,14 @@ static inline void __up_write(struct rw_semaphore *sem)
+@@ -183,6 +218,14 @@ static inline void __up_write(struct rw_semaphore *sem)
long tmp;
asm volatile("# beginning __up_write\n\t"
LOCK_PREFIX " xadd %1,(%2)\n\t"
@@ -23175,7 +23212,7 @@ index ceec86eb..872e33a 100644
/* subtracts 0xffff0001, returns the old value */
" jns 1f\n\t"
" call call_rwsem_wake\n" /* expects old value in %edx */
-@@ -190,6 +230,14 @@ static inline void __downgrade_write(struct rw_semaphore *sem)
+@@ -200,6 +243,14 @@ static inline void __downgrade_write(struct rw_semaphore *sem)
{
asm volatile("# beginning __downgrade_write\n\t"
LOCK_PREFIX _ASM_ADD "%2,(%1)\n\t"
@@ -23190,7 +23227,7 @@ index ceec86eb..872e33a 100644
/*
* transitions 0xZZZZ0001 -> 0xYYYY0001 (i386)
* 0xZZZZZZZZ00000001 -> 0xYYYYYYYY00000001 (x86_64)
-@@ -208,7 +256,15 @@ static inline void __downgrade_write(struct rw_semaphore *sem)
+@@ -218,7 +269,15 @@ static inline void __downgrade_write(struct rw_semaphore *sem)
*/
static inline void rwsem_atomic_add(long delta, struct rw_semaphore *sem)
{
@@ -23207,7 +23244,7 @@ index ceec86eb..872e33a 100644
: "+m" (sem->count)
: "er" (delta));
}
-@@ -218,7 +274,7 @@ static inline void rwsem_atomic_add(long delta, struct rw_semaphore *sem)
+@@ -228,7 +287,7 @@ static inline void rwsem_atomic_add(long delta, struct rw_semaphore *sem)
*/
static inline long rwsem_atomic_update(long delta, struct rw_semaphore *sem)
{
@@ -23217,10 +23254,10 @@ index ceec86eb..872e33a 100644
#endif /* __KERNEL__ */
diff --git a/arch/x86/include/asm/segment.h b/arch/x86/include/asm/segment.h
-index 7d5a192..23ef1aa 100644
+index 1549caa0..aa9ebe1 100644
--- a/arch/x86/include/asm/segment.h
+++ b/arch/x86/include/asm/segment.h
-@@ -82,14 +82,20 @@
+@@ -83,14 +83,20 @@
* 26 - ESPFIX small SS
* 27 - per-cpu [ offset to per-cpu data area ]
* 28 - stack_canary-20 [ for stack protector ] <=== cacheline #8
@@ -23243,7 +23280,7 @@ index 7d5a192..23ef1aa 100644
#define GDT_ENTRY_KERNEL_DS 13
#define GDT_ENTRY_DEFAULT_USER_CS 14
#define GDT_ENTRY_DEFAULT_USER_DS 15
-@@ -106,6 +112,12 @@
+@@ -107,6 +113,12 @@
#define GDT_ENTRY_PERCPU 27
#define GDT_ENTRY_STACK_CANARY 28
@@ -23256,7 +23293,7 @@ index 7d5a192..23ef1aa 100644
#define GDT_ENTRY_DOUBLEFAULT_TSS 31
/*
-@@ -118,6 +130,7 @@
+@@ -119,6 +131,7 @@
*/
#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS*8)
@@ -23264,7 +23301,7 @@ index 7d5a192..23ef1aa 100644
#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS*8)
#define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS*8 + 3)
#define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS*8 + 3)
-@@ -129,7 +142,7 @@
+@@ -130,7 +143,7 @@
#define PNP_CS16 (GDT_ENTRY_PNPBIOS_CS16*8)
/* "Is this PNP code selector (PNP_CS32 or PNP_CS16)?" */
@@ -23273,7 +23310,7 @@ index 7d5a192..23ef1aa 100644
/* data segment for BIOS: */
#define PNP_DS (GDT_ENTRY_PNPBIOS_DS*8)
-@@ -176,6 +189,8 @@
+@@ -177,6 +190,8 @@
#define GDT_ENTRY_DEFAULT_USER_DS 5
#define GDT_ENTRY_DEFAULT_USER_CS 6
@@ -23282,7 +23319,7 @@ index 7d5a192..23ef1aa 100644
/* Needs two entries */
#define GDT_ENTRY_TSS 8
/* Needs two entries */
-@@ -187,10 +202,12 @@
+@@ -188,10 +203,12 @@
/* Abused to load per CPU data from limit */
#define GDT_ENTRY_PER_CPU 15
@@ -23296,7 +23333,7 @@ index 7d5a192..23ef1aa 100644
/*
* Segment selector values corresponding to the above entries:
-@@ -200,7 +217,9 @@
+@@ -201,7 +218,9 @@
*/
#define __KERNEL32_CS (GDT_ENTRY_KERNEL32_CS*8)
#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS*8)
@@ -23429,7 +23466,7 @@ index 58505f0..bff3b5b 100644
#endif
}
diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h
-index 7c247e7..2f17b1b 100644
+index 0944218..2f17b1b 100644
--- a/arch/x86/include/asm/stacktrace.h
+++ b/arch/x86/include/asm/stacktrace.h
@@ -11,28 +11,20 @@
@@ -23440,7 +23477,7 @@ index 7c247e7..2f17b1b 100644
+struct task_struct;
struct stacktrace_ops;
--typedef unsigned long (*walk_stack_t)(struct thread_info *tinfo,
+-typedef unsigned long (*walk_stack_t)(struct task_struct *task,
- unsigned long *stack,
- unsigned long bp,
- const struct stacktrace_ops *ops,
@@ -23457,13 +23494,13 @@ index 7c247e7..2f17b1b 100644
+ int *graph);
-extern unsigned long
--print_context_stack(struct thread_info *tinfo,
+-print_context_stack(struct task_struct *task,
- unsigned long *stack, unsigned long bp,
- const struct stacktrace_ops *ops, void *data,
- unsigned long *end, int *graph);
-
-extern unsigned long
--print_context_stack_bp(struct thread_info *tinfo,
+-print_context_stack_bp(struct task_struct *task,
- unsigned long *stack, unsigned long bp,
- const struct stacktrace_ops *ops, void *data,
- unsigned long *end, int *graph);
@@ -23579,10 +23616,10 @@ index 90dbbd9..04e8caa 100644
#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)
diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h
-index 751bf4b..a1278b5 100644
+index 8f321a1..6207183 100644
--- a/arch/x86/include/asm/switch_to.h
+++ b/arch/x86/include/asm/switch_to.h
-@@ -112,7 +112,7 @@ do { \
+@@ -110,7 +110,7 @@ do { \
"call __switch_to\n\t" \
"movq "__percpu_arg([current_task])",%%rsi\n\t" \
__switch_canary \
@@ -23591,7 +23628,7 @@ index 751bf4b..a1278b5 100644
"movq %%rax,%%rdi\n\t" \
"testl %[_tif_fork],%P[ti_flags](%%r8)\n\t" \
"jnz ret_from_fork\n\t" \
-@@ -123,7 +123,7 @@ do { \
+@@ -121,7 +121,7 @@ do { \
[threadrsp] "i" (offsetof(struct task_struct, thread.sp)), \
[ti_flags] "i" (offsetof(struct thread_info, flags)), \
[_tif_fork] "i" (_TIF_FORK), \
@@ -23625,7 +23662,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 ffae84d..20997c3 100644
+index 30c133a..5cdfb3f 100644
--- a/arch/x86/include/asm/thread_info.h
+++ b/arch/x86/include/asm/thread_info.h
@@ -39,7 +39,7 @@
@@ -23752,7 +23789,7 @@ index ffae84d..20997c3 100644
#endif
-@@ -279,6 +250,13 @@ static inline bool is_ia32_task(void)
+@@ -279,6 +250,13 @@ static inline bool in_ia32_syscall(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);
@@ -23767,7 +23804,7 @@ index ffae84d..20997c3 100644
#endif /* _ASM_X86_THREAD_INFO_H */
diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
-index 1fde8d5..de33497 100644
+index 4e5be94..44a409e 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -135,18 +135,44 @@ static inline void cr4_set_bits_and_update_boot(unsigned long mask)
@@ -23888,18 +23925,18 @@ 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 2e7513d..792107f 100644
+index 2982387..a619e60c 100644
--- a/arch/x86/include/asm/uaccess.h
+++ b/arch/x86/include/asm/uaccess.h
-@@ -7,6 +7,7 @@
- #include <linux/compiler.h>
+@@ -8,6 +8,7 @@
+ #include <linux/kasan-checks.h>
#include <linux/thread_info.h>
#include <linux/string.h>
+#include <linux/spinlock.h>
#include <asm/asm.h>
#include <asm/page.h>
#include <asm/smap.h>
-@@ -29,7 +30,12 @@
+@@ -30,7 +31,12 @@
#define get_ds() (KERNEL_DS)
#define get_fs() (current_thread_info()->addr_limit)
@@ -23912,7 +23949,7 @@ index 2e7513d..792107f 100644
#define segment_eq(a, b) ((a).seg == (b).seg)
-@@ -86,8 +92,36 @@ static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, un
+@@ -87,8 +93,36 @@ static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, un
* checks that the pointer is in the user space range - after calling
* this function, memory access functions may still return -EFAULT.
*/
@@ -23951,7 +23988,7 @@ index 2e7513d..792107f 100644
/*
* The exception table consists of triples of addresses relative to the
-@@ -145,11 +179,13 @@ extern int __get_user_bad(void);
+@@ -146,11 +180,13 @@ extern int __get_user_bad(void);
#define __uaccess_end() clac()
/*
@@ -23968,7 +24005,7 @@ index 2e7513d..792107f 100644
/**
* get_user: - Get a simple variable from user space.
-@@ -189,10 +225,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -190,10 +226,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
register void *__sp asm(_ASM_SP); \
__chk_user_ptr(ptr); \
might_fault(); \
@@ -23981,7 +24018,7 @@ index 2e7513d..792107f 100644
__builtin_expect(__ret_gu, 0); \
})
-@@ -200,13 +238,21 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -201,13 +239,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")
@@ -24006,7 +24043,7 @@ index 2e7513d..792107f 100644
"3:" \
".section .fixup,\"ax\"\n" \
"4: movl %3,%0\n" \
-@@ -219,8 +265,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -220,8 +266,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
#define __put_user_asm_ex_u64(x, addr) \
asm volatile("\n" \
@@ -24017,7 +24054,7 @@ index 2e7513d..792107f 100644
"3:" \
_ASM_EXTABLE_EX(1b, 2b) \
_ASM_EXTABLE_EX(2b, 3b) \
-@@ -268,10 +314,11 @@ extern void __put_user_8(void);
+@@ -269,10 +315,11 @@ extern void __put_user_8(void);
#define put_user(x, ptr) \
({ \
int __ret_pu; \
@@ -24031,7 +24068,7 @@ index 2e7513d..792107f 100644
switch (sizeof(*(ptr))) { \
case 1: \
__put_user_x(1, __pu_val, ptr, __ret_pu); \
-@@ -289,6 +336,7 @@ extern void __put_user_8(void);
+@@ -290,6 +337,7 @@ extern void __put_user_8(void);
__put_user_x(X, __pu_val, ptr, __ret_pu); \
break; \
} \
@@ -24039,7 +24076,7 @@ index 2e7513d..792107f 100644
__builtin_expect(__ret_pu, 0); \
})
-@@ -356,10 +404,10 @@ do { \
+@@ -357,10 +405,10 @@ do { \
__chk_user_ptr(ptr); \
switch (size) { \
case 1: \
@@ -24052,7 +24089,7 @@ index 2e7513d..792107f 100644
break; \
case 4: \
__get_user_asm(x, ptr, retval, "l", "k", "=r", errret); \
-@@ -373,17 +421,21 @@ do { \
+@@ -374,17 +422,21 @@ do { \
} while (0)
#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \
@@ -24078,7 +24115,7 @@ index 2e7513d..792107f 100644
/*
* This doesn't do __uaccess_begin/end - the exception handling
-@@ -394,10 +446,10 @@ do { \
+@@ -395,10 +447,10 @@ do { \
__chk_user_ptr(ptr); \
switch (size) { \
case 1: \
@@ -24091,7 +24128,7 @@ index 2e7513d..792107f 100644
break; \
case 4: \
__get_user_asm_ex(x, ptr, "l", "k", "=r"); \
-@@ -411,7 +463,7 @@ do { \
+@@ -412,7 +464,7 @@ do { \
} while (0)
#define __get_user_asm_ex(x, addr, itype, rtype, ltype) \
@@ -24100,7 +24137,7 @@ index 2e7513d..792107f 100644
"2:\n" \
_ASM_EXTABLE_EX(1b, 2b) \
: ltype(x) : "m" (__m(addr)))
-@@ -432,13 +484,24 @@ do { \
+@@ -433,13 +485,24 @@ do { \
__uaccess_begin(); \
__get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT); \
__uaccess_end(); \
@@ -24127,7 +24164,7 @@ index 2e7513d..792107f 100644
/*
* Tell gcc we read from memory instead of writing: this is because
-@@ -446,8 +509,10 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -447,8 +510,10 @@ struct __large_struct { unsigned long buf[100]; };
* aliasing issues.
*/
#define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \
@@ -24139,7 +24176,7 @@ index 2e7513d..792107f 100644
"2:\n" \
".section .fixup,\"ax\"\n" \
"3: mov %3,%0\n" \
-@@ -455,10 +520,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -456,10 +521,12 @@ struct __large_struct { unsigned long buf[100]; };
".previous\n" \
_ASM_EXTABLE(1b, 3b) \
: "=r"(err) \
@@ -24154,7 +24191,7 @@ index 2e7513d..792107f 100644
"2:\n" \
_ASM_EXTABLE_EX(1b, 2b) \
: : ltype(x), "m" (__m(addr)))
-@@ -468,11 +535,13 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -469,11 +536,13 @@ struct __large_struct { unsigned long buf[100]; };
*/
#define uaccess_try do { \
current_thread_info()->uaccess_err = 0; \
@@ -24168,7 +24205,7 @@ index 2e7513d..792107f 100644
(err) |= (current_thread_info()->uaccess_err ? -EFAULT : 0); \
} while (0)
-@@ -498,8 +567,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -499,8 +568,12 @@ struct __large_struct { unsigned long buf[100]; };
* On error, the variable @x is set to zero.
*/
@@ -24181,7 +24218,7 @@ index 2e7513d..792107f 100644
/**
* __put_user: - Write a simple value into user space, with less checking.
-@@ -522,8 +595,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -523,8 +596,12 @@ struct __large_struct { unsigned long buf[100]; };
* Returns zero on success, or -EFAULT on error.
*/
@@ -24194,7 +24231,7 @@ index 2e7513d..792107f 100644
#define __get_user_unaligned __get_user
#define __put_user_unaligned __put_user
-@@ -541,7 +618,7 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -542,7 +619,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)))); \
@@ -24203,7 +24240,7 @@ index 2e7513d..792107f 100644
} while (0)
#define put_user_try uaccess_try
-@@ -559,7 +636,7 @@ extern __must_check long strlen_user(const char __user *str);
+@@ -560,7 +637,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);
@@ -24212,7 +24249,7 @@ index 2e7513d..792107f 100644
extern void __cmpxchg_wrong_size(void)
__compiletime_error("Bad argument size for cmpxchg");
-@@ -567,22 +644,23 @@ extern void __cmpxchg_wrong_size(void)
+@@ -568,22 +645,23 @@ extern void __cmpxchg_wrong_size(void)
#define __user_atomic_cmpxchg_inatomic(uval, ptr, old, new, size) \
({ \
int __ret = 0; \
@@ -24241,7 +24278,7 @@ index 2e7513d..792107f 100644
: "i" (-EFAULT), "q" (__new), "1" (__old) \
: "memory" \
); \
-@@ -591,14 +669,14 @@ extern void __cmpxchg_wrong_size(void)
+@@ -592,14 +670,14 @@ extern void __cmpxchg_wrong_size(void)
case 2: \
{ \
asm volatile("\n" \
@@ -24258,7 +24295,7 @@ index 2e7513d..792107f 100644
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
); \
-@@ -607,14 +685,14 @@ extern void __cmpxchg_wrong_size(void)
+@@ -608,14 +686,14 @@ extern void __cmpxchg_wrong_size(void)
case 4: \
{ \
asm volatile("\n" \
@@ -24275,7 +24312,7 @@ index 2e7513d..792107f 100644
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
); \
-@@ -626,14 +704,14 @@ extern void __cmpxchg_wrong_size(void)
+@@ -627,14 +705,14 @@ extern void __cmpxchg_wrong_size(void)
__cmpxchg_wrong_size(); \
\
asm volatile("\n" \
@@ -24292,7 +24329,7 @@ index 2e7513d..792107f 100644
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
); \
-@@ -643,6 +721,7 @@ extern void __cmpxchg_wrong_size(void)
+@@ -644,6 +722,7 @@ extern void __cmpxchg_wrong_size(void)
__cmpxchg_wrong_size(); \
} \
__uaccess_end(); \
@@ -24300,7 +24337,7 @@ index 2e7513d..792107f 100644
*__uval = __old; \
__ret; \
})
-@@ -666,17 +745,6 @@ extern struct movsl_mask {
+@@ -667,17 +746,6 @@ extern struct movsl_mask {
#define ARCH_HAS_NOCACHE_UACCESS 1
@@ -24318,7 +24355,7 @@ index 2e7513d..792107f 100644
#ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
# define copy_user_diag __compiletime_error
#else
-@@ -686,7 +754,7 @@ unsigned long __must_check _copy_to_user(void __user *to, const void *from,
+@@ -687,7 +755,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")
@@ -24327,7 +24364,7 @@ index 2e7513d..792107f 100644
#undef copy_user_diag
-@@ -699,7 +767,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
+@@ -700,7 +768,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
extern void
__compiletime_warning("copy_to_user() buffer size is not provably correct")
@@ -24336,7 +24373,7 @@ index 2e7513d..792107f 100644
#define __copy_to_user_overflow(size, count) __copy_to_user_overflow()
#else
-@@ -714,10 +782,16 @@ __copy_from_user_overflow(int size, unsigned long count)
+@@ -715,10 +783,16 @@ __copy_from_user_overflow(int size, unsigned long count)
#endif
@@ -24354,7 +24391,7 @@ index 2e7513d..792107f 100644
might_fault();
-@@ -739,12 +813,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
+@@ -742,12 +816,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
* case, and do only runtime checking for non-constant sizes.
*/
@@ -24376,13 +24413,15 @@ index 2e7513d..792107f 100644
return n;
}
-@@ -752,17 +829,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
+@@ -755,19 +832,20 @@ 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)
{
- int sz = __compiletime_object_size(from);
+ size_t sz = __compiletime_object_size(from);
+ kasan_check_read(from, n);
+
might_fault();
/* See the comment in copy_from_user() above. */
@@ -24403,13 +24442,13 @@ index 2e7513d..792107f 100644
return n;
}
diff --git a/arch/x86/include/asm/uaccess_32.h b/arch/x86/include/asm/uaccess_32.h
-index 3fe0eac..18dfa8b 100644
+index 4b32da24..73da0ef 100644
--- a/arch/x86/include/asm/uaccess_32.h
+++ b/arch/x86/include/asm/uaccess_32.h
-@@ -40,9 +40,14 @@ unsigned long __must_check __copy_from_user_ll_nocache_nozero
- * anything, so this is accurate.
+@@ -34,9 +34,14 @@ unsigned long __must_check __copy_from_user_ll_nocache_nozero
+ * The caller should also make sure he pins the user space address
+ * so that we don't result in page fault and sleep.
*/
-
-static __always_inline unsigned long __must_check
+static __always_inline __size_overflow(3) unsigned long __must_check
__copy_to_user_inatomic(void __user *to, const void *from, unsigned long n)
@@ -24419,10 +24458,10 @@ index 3fe0eac..18dfa8b 100644
+
+ check_object_size(from, n, true);
+
- if (__builtin_constant_p(n)) {
- unsigned long ret;
+ return __copy_to_user_ll(to, from, n);
+ }
-@@ -95,12 +100,16 @@ static __always_inline unsigned long __must_check
+@@ -59,12 +64,16 @@ static __always_inline unsigned long __must_check
__copy_to_user(void __user *to, const void *from, unsigned long n)
{
might_fault();
@@ -24437,10 +24476,10 @@ index 3fe0eac..18dfa8b 100644
+ if ((long)n < 0)
+ return n;
+
- /* Avoid zeroing the tail if the copy fails..
- * If 'n' is constant and 1, 2, or 4, we do still zero on a failure,
- * but as the zeroing behaviour is only significant when n is not
-@@ -157,6 +166,12 @@ static __always_inline unsigned long
+ return __copy_from_user_ll_nozero(to, from, n);
+ }
+
+@@ -95,6 +104,12 @@ static __always_inline unsigned long
__copy_from_user(void *to, const void __user *from, unsigned long n)
{
might_fault();
@@ -24453,7 +24492,7 @@ index 3fe0eac..18dfa8b 100644
if (__builtin_constant_p(n)) {
unsigned long ret;
-@@ -185,6 +200,10 @@ static __always_inline unsigned long __copy_from_user_nocache(void *to,
+@@ -123,6 +138,10 @@ static __always_inline unsigned long __copy_from_user_nocache(void *to,
const void __user *from, unsigned long n)
{
might_fault();
@@ -24464,7 +24503,7 @@ index 3fe0eac..18dfa8b 100644
if (__builtin_constant_p(n)) {
unsigned long ret;
-@@ -213,7 +232,10 @@ static __always_inline unsigned long
+@@ -151,7 +170,10 @@ static __always_inline unsigned long
__copy_from_user_inatomic_nocache(void *to, const void __user *from,
unsigned long n)
{
@@ -24477,10 +24516,10 @@ 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 3076986..7688db9 100644
+index 2eac2aa..bf537a3 100644
--- a/arch/x86/include/asm/uaccess_64.h
+++ b/arch/x86/include/asm/uaccess_64.h
-@@ -10,6 +10,9 @@
+@@ -11,6 +11,9 @@
#include <asm/alternative.h>
#include <asm/cpufeatures.h>
#include <asm/page.h>
@@ -24490,7 +24529,7 @@ index 3076986..7688db9 100644
/*
* Copy To/From Userspace
-@@ -23,8 +26,8 @@ copy_user_generic_string(void *to, const void *from, unsigned len);
+@@ -24,8 +27,8 @@ copy_user_generic_string(void *to, const void *from, unsigned len);
__must_check unsigned long
copy_user_generic_unrolled(void *to, const void *from, unsigned len);
@@ -24501,7 +24540,7 @@ index 3076986..7688db9 100644
{
unsigned ret;
-@@ -46,152 +49,201 @@ copy_user_generic(void *to, const void *from, unsigned len)
+@@ -47,67 +50,86 @@ copy_user_generic(void *to, const void *from, unsigned len)
}
__must_check unsigned long
@@ -24601,7 +24640,8 @@ index 3076986..7688db9 100644
+unsigned long __copy_from_user(void *dst, const void __user *src, unsigned long size)
{
might_fault();
- return __copy_from_user_nocheck(dst, src, size);
+ kasan_check_write(dst, size);
+@@ -115,66 +137,85 @@ int __copy_from_user(void *dst, const void __user *src, unsigned size)
}
static __always_inline __must_check
@@ -24699,7 +24739,8 @@ index 3076986..7688db9 100644
+unsigned long __copy_to_user(void __user *dst, const void *src, unsigned long size)
{
might_fault();
- return __copy_to_user_nocheck(dst, src, size);
+ kasan_check_read(src, size);
+@@ -182,19 +223,30 @@ int __copy_to_user(void __user *dst, const void *src, unsigned size)
}
static __always_inline __must_check
@@ -24735,7 +24776,7 @@ index 3076986..7688db9 100644
ret, "b", "b", "=q", 1);
if (likely(!ret))
__put_user_asm(tmp, (u8 __user *)dst,
-@@ -202,7 +254,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
+@@ -205,7 +257,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
case 2: {
u16 tmp;
__uaccess_begin();
@@ -24744,7 +24785,7 @@ index 3076986..7688db9 100644
ret, "w", "w", "=r", 2);
if (likely(!ret))
__put_user_asm(tmp, (u16 __user *)dst,
-@@ -214,7 +266,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
+@@ -217,7 +269,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
case 4: {
u32 tmp;
__uaccess_begin();
@@ -24753,7 +24794,7 @@ index 3076986..7688db9 100644
ret, "l", "k", "=r", 4);
if (likely(!ret))
__put_user_asm(tmp, (u32 __user *)dst,
-@@ -225,7 +277,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
+@@ -228,7 +280,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
case 8: {
u64 tmp;
__uaccess_begin();
@@ -24762,7 +24803,7 @@ index 3076986..7688db9 100644
ret, "q", "", "=r", 8);
if (likely(!ret))
__put_user_asm(tmp, (u64 __user *)dst,
-@@ -234,41 +286,58 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
+@@ -237,45 +289,63 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
return ret;
}
default:
@@ -24778,6 +24819,7 @@ index 3076986..7688db9 100644
+static __must_check __always_inline unsigned long
+__copy_from_user_inatomic(void *dst, const void __user *src, unsigned long size)
{
+ kasan_check_write(dst, size);
return __copy_from_user_nocheck(dst, src, size);
}
@@ -24786,6 +24828,7 @@ index 3076986..7688db9 100644
+static __must_check __always_inline unsigned long
+__copy_to_user_inatomic(void __user *dst, const void *src, unsigned long size)
{
+ kasan_check_read(src, size);
return __copy_to_user_nocheck(dst, src, size);
}
@@ -24800,6 +24843,7 @@ index 3076986..7688db9 100644
+__copy_from_user_nocache(void *dst, const void __user *src, unsigned long size)
{
might_fault();
+ kasan_check_write(dst, size);
+
+ if (size > INT_MAX)
+ return size;
@@ -24818,6 +24862,8 @@ index 3076986..7688db9 100644
- unsigned size)
+ unsigned long size)
{
+ kasan_check_write(dst, size);
++
+ if (size > INT_MAX)
+ return size;
+
@@ -24848,7 +24894,7 @@ index 5b238981..77fdd78 100644
#define WORD_AT_A_TIME_CONSTANTS { REPEAT_BYTE(0x01), REPEAT_BYTE(0x80) }
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
-index 1ae89a2..a279bf4 100644
+index 4dcdf74..9eb489e 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -126,7 +126,7 @@ struct x86_init_ops {
@@ -24869,16 +24915,7 @@ index 1ae89a2..a279bf4 100644
struct timespec;
-@@ -165,7 +165,7 @@ struct x86_platform_ops {
- void (*save_sched_clock_state)(void);
- void (*restore_sched_clock_state)(void);
- void (*apic_post_init)(void);
--};
-+} __no_const;
-
- struct pci_dev;
-
-@@ -174,12 +174,12 @@ struct x86_msi_ops {
+@@ -222,12 +222,12 @@ struct x86_msi_ops {
void (*teardown_msi_irq)(unsigned int irq);
void (*teardown_msi_irqs)(struct pci_dev *dev);
void (*restore_msi_irqs)(struct pci_dev *dev);
@@ -24920,10 +24957,10 @@ index 9dafe59..0293c1d 100644
#define BIOS_ROM_BASE 0xffe00000
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
-index 616ebd2..7386ebf 100644
+index 0503f5b..f00b6e8 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
-@@ -42,7 +42,7 @@ obj-$(CONFIG_MODIFY_LDT_SYSCALL) += ldt.o
+@@ -46,7 +46,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
@@ -24933,10 +24970,10 @@ index 616ebd2..7386ebf 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 8c2f1ef..e4e5c19 100644
+index 9414f84..724b296 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)
+@@ -1349,7 +1349,7 @@ static void __init acpi_reduced_hw_init(void)
* If your system is blacklisted here, but you find that acpi=force
* works for you, please contact linux-acpi@vger.kernel.org
*/
@@ -24945,7 +24982,7 @@ index 8c2f1ef..e4e5c19 100644
/*
* Boxes that need ACPI disabled
*/
-@@ -1416,7 +1416,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
+@@ -1424,7 +1424,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
};
/* second table for DMI checks that should run after early-quirks */
@@ -24992,10 +25029,10 @@ index 0c26b1b..a766e85 100644
bogus_magic:
jmp bogus_magic
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
-index 25f9093..3418d54 100644
+index 5cb272a..2bcff83 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
-@@ -20,6 +20,7 @@
+@@ -21,6 +21,7 @@
#include <asm/tlbflush.h>
#include <asm/io.h>
#include <asm/fixmap.h>
@@ -25003,7 +25040,7 @@ index 25f9093..3418d54 100644
int __read_mostly alternatives_patched;
-@@ -261,7 +262,9 @@ static void __init_or_module add_nops(void *insns, unsigned int len)
+@@ -262,7 +263,9 @@ static void __init_or_module add_nops(void *insns, unsigned int len)
unsigned int noplen = len;
if (noplen > ASM_NOP_MAX)
noplen = ASM_NOP_MAX;
@@ -25013,7 +25050,7 @@ index 25f9093..3418d54 100644
insns += noplen;
len -= noplen;
}
-@@ -289,6 +292,13 @@ recompute_jump(struct alt_instr *a, u8 *orig_insn, u8 *repl_insn, u8 *insnbuf)
+@@ -290,6 +293,13 @@ recompute_jump(struct alt_instr *a, u8 *orig_insn, u8 *repl_insn, u8 *insnbuf)
if (a->replacementlen != 5)
return;
@@ -25027,7 +25064,7 @@ index 25f9093..3418d54 100644
o_dspl = *(s32 *)(insnbuf + 1);
/* next_rip of the replacement JMP */
-@@ -364,6 +374,7 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
+@@ -365,6 +375,7 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
{
struct alt_instr *a;
u8 *instr, *replacement;
@@ -25035,7 +25072,7 @@ index 25f9093..3418d54 100644
u8 insnbuf[MAX_PATCH_LEN];
DPRINTK("alt table %p -> %p", start, end);
-@@ -379,46 +390,71 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
+@@ -380,46 +391,71 @@ void __init_or_module apply_alternatives(struct alt_instr *start,
for (a = start; a < end; a++) {
int insnbuf_sz = 0;
@@ -25121,7 +25158,7 @@ index 25f9093..3418d54 100644
text_poke_early(instr, insnbuf, insnbuf_sz);
}
-@@ -434,10 +470,16 @@ static void alternatives_smp_lock(const s32 *start, const s32 *end,
+@@ -435,10 +471,16 @@ static void alternatives_smp_lock(const s32 *start, const s32 *end,
for (poff = start; poff < end; poff++) {
u8 *ptr = (u8 *)poff + *poff;
@@ -25139,7 +25176,7 @@ index 25f9093..3418d54 100644
text_poke(ptr, ((unsigned char []){0xf0}), 1);
}
mutex_unlock(&text_mutex);
-@@ -452,10 +494,16 @@ static void alternatives_smp_unlock(const s32 *start, const s32 *end,
+@@ -453,10 +495,16 @@ static void alternatives_smp_unlock(const s32 *start, const s32 *end,
for (poff = start; poff < end; poff++) {
u8 *ptr = (u8 *)poff + *poff;
@@ -25157,7 +25194,7 @@ index 25f9093..3418d54 100644
text_poke(ptr, ((unsigned char []){0x3E}), 1);
}
mutex_unlock(&text_mutex);
-@@ -592,7 +640,7 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start,
+@@ -593,7 +641,7 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start,
BUG_ON(p->len > MAX_PATCH_LEN);
/* prep the buffer with the original instructions */
@@ -25166,7 +25203,7 @@ index 25f9093..3418d54 100644
used = pv_init_ops.patch(p->instrtype, p->clobbers, insnbuf,
(unsigned long)p->instr, p->len);
-@@ -639,7 +687,7 @@ void __init alternative_instructions(void)
+@@ -640,7 +688,7 @@ void __init alternative_instructions(void)
if (!uniproc_patched || num_possible_cpus() == 1)
free_init_pages("SMP alternatives",
(unsigned long)__smp_locks,
@@ -25175,7 +25212,7 @@ index 25f9093..3418d54 100644
#endif
apply_paravirt(__parainstructions, __parainstructions_end);
-@@ -660,13 +708,17 @@ void __init alternative_instructions(void)
+@@ -661,13 +709,17 @@ void __init alternative_instructions(void)
* instructions. And on the local CPU you need to be protected again NMI or MCE
* handlers seeing an inconsistent instruction while you patch.
*/
@@ -25195,7 +25232,7 @@ index 25f9093..3418d54 100644
local_irq_restore(flags);
/* Could also do a CLFLUSH here to speed up CPU recovery; but
that causes hangs on some VIA CPUs. */
-@@ -689,19 +741,25 @@ void *__init_or_module text_poke_early(void *addr, const void *opcode,
+@@ -690,19 +742,25 @@ void *__init_or_module text_poke_early(void *addr, const void *opcode,
void *text_poke(void *addr, const void *opcode, size_t len)
{
unsigned long flags;
@@ -25227,7 +25264,7 @@ index 25f9093..3418d54 100644
local_irq_save(flags);
set_fixmap(FIX_TEXT_POKE0, page_to_phys(pages[0]));
if (pages[1])
-@@ -718,6 +776,7 @@ void *text_poke(void *addr, const void *opcode, size_t len)
+@@ -719,6 +777,7 @@ void *text_poke(void *addr, const void *opcode, size_t len)
for (i = 0; i < len; i++)
BUG_ON(((char *)addr)[i] != ((char *)opcode)[i]);
local_irq_restore(flags);
@@ -25235,7 +25272,7 @@ index 25f9093..3418d54 100644
return addr;
}
-@@ -771,7 +830,7 @@ int poke_int3_handler(struct pt_regs *regs)
+@@ -772,7 +831,7 @@ int poke_int3_handler(struct pt_regs *regs)
*/
void *text_poke_bp(void *addr, const void *opcode, size_t len, void *handler)
{
@@ -25245,7 +25282,7 @@ index 25f9093..3418d54 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 d356987..ed8a52b 100644
+index 60078a6..b9fb105 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;
@@ -25298,11 +25335,11 @@ index 76f89e2..4a349aaa 100644
.name = "physical flat",
.probe = physflat_probe,
diff --git a/arch/x86/kernel/apic/apic_noop.c b/arch/x86/kernel/apic/apic_noop.c
-index 331a7a0..2173347 100644
+index 13d19ed..fe1730f 100644
--- a/arch/x86/kernel/apic/apic_noop.c
+++ b/arch/x86/kernel/apic/apic_noop.c
@@ -109,7 +109,7 @@ static void noop_apic_write(u32 reg, u32 v)
- WARN_ON_ONCE(cpu_has_apic && !disable_apic);
+ WARN_ON_ONCE(boot_cpu_has(X86_FEATURE_APIC) && !disable_apic);
}
-struct apic apic_noop = {
@@ -25324,7 +25361,7 @@ index cf9bd89..75fcb85 100644
.name = "bigsmp",
.probe = probe_bigsmp,
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
-index fdb0fbf..352c2f0 100644
+index 446702e..ed37083 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1682,7 +1682,7 @@ static unsigned int startup_ioapic_irq(struct irq_data *data)
@@ -25408,7 +25445,7 @@ index f316e34..48c21c5 100644
static int cmdline_apic __initdata;
diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
-index ef49551..ba2e857 100644
+index a5e400a..d070a03 100644
--- a/arch/x86/kernel/apic/vector.c
+++ b/arch/x86/kernel/apic/vector.c
@@ -37,6 +37,7 @@ static struct irq_chip lapic_controller;
@@ -25454,10 +25491,10 @@ 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 d7ce96a..99cedd7 100644
+index 2900315..ff2a970 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)
+@@ -554,7 +554,7 @@ static int uv_probe(void)
return apic == &apic_x2apic_uv_x;
}
@@ -25467,7 +25504,7 @@ index d7ce96a..99cedd7 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 9307f18..a43f175 100644
+index c7364bd..20cd21a 100644
--- a/arch/x86/kernel/apm_32.c
+++ b/arch/x86/kernel/apm_32.c
@@ -432,7 +432,7 @@ static DEFINE_MUTEX(apm_mutex);
@@ -25551,7 +25588,7 @@ index 9307f18..a43f175 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 5c04246..e280385 100644
+index 674134e..bb9947e 100644
--- a/arch/x86/kernel/asm-offsets.c
+++ b/arch/x86/kernel/asm-offsets.c
@@ -32,6 +32,8 @@ void common(void) {
@@ -25590,7 +25627,7 @@ index 5c04246..e280385 100644
#ifdef CONFIG_XEN
BLANK();
OFFSET(XEN_vcpu_info_mask, vcpu_info, evtchn_upcall_mask);
-@@ -85,4 +105,5 @@ void common(void) {
+@@ -86,4 +106,5 @@ void common(void) {
BLANK();
DEFINE(PTREGS_SIZE, sizeof(struct pt_regs));
@@ -25612,10 +25649,10 @@ index 4a8697f..8a13428 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 7b76eb6..99cb9cc 100644
+index f5c69d8..5eecf58 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
-@@ -776,7 +776,7 @@ static void init_amd(struct cpuinfo_x86 *c)
+@@ -780,7 +780,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) */
@@ -25645,10 +25682,10 @@ index a972ac4..938c163 100644
/*
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index f45a4b9..9d999f8 100644
+index 0fe6953..a253a78 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 = {
+@@ -93,60 +93,6 @@ static const struct cpu_dev default_cpu = {
static const struct cpu_dev *this_cpu = &default_cpu;
@@ -25709,7 +25746,7 @@ index f45a4b9..9d999f8 100644
static int __init x86_mpx_setup(char *s)
{
/* require an exact match without trailing characters */
-@@ -278,6 +224,10 @@ static __always_inline void setup_smep(struct cpuinfo_x86 *c)
+@@ -281,6 +227,10 @@ static __always_inline void setup_smep(struct cpuinfo_x86 *c)
{
if (cpu_has(c, X86_FEATURE_SMEP))
cr4_set_bits(X86_CR4_SMEP);
@@ -25720,7 +25757,7 @@ index f45a4b9..9d999f8 100644
}
static __init int setup_disable_smap(char *arg)
-@@ -303,6 +253,109 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
+@@ -306,6 +256,109 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
}
}
@@ -25830,7 +25867,7 @@ index f45a4b9..9d999f8 100644
/*
* Protection Keys are not available in 32-bit mode.
*/
-@@ -448,7 +501,7 @@ void switch_to_new_gdt(int cpu)
+@@ -451,7 +504,7 @@ void switch_to_new_gdt(int cpu)
{
struct desc_ptr gdt_descr;
@@ -25839,7 +25876,7 @@ index f45a4b9..9d999f8 100644
gdt_descr.size = GDT_SIZE - 1;
load_gdt(&gdt_descr);
/* Reload the per-cpu base */
-@@ -1004,6 +1057,20 @@ static void identify_cpu(struct cpuinfo_x86 *c)
+@@ -1042,6 +1095,20 @@ static void identify_cpu(struct cpuinfo_x86 *c)
setup_smep(c);
setup_smap(c);
@@ -25860,16 +25897,16 @@ index f45a4b9..9d999f8 100644
/*
* The vendor-specific functions might have changed features.
* Now we do "generic changes."
-@@ -1081,7 +1148,7 @@ void enable_sep_cpu(void)
- int cpu;
+@@ -1122,7 +1189,7 @@ void enable_sep_cpu(void)
+ return;
cpu = get_cpu();
- tss = &per_cpu(cpu_tss, cpu);
+ tss = cpu_tss + cpu;
- if (!boot_cpu_has(X86_FEATURE_SEP))
- goto out;
-@@ -1227,10 +1294,12 @@ static __init int setup_disablecpuid(char *arg)
+ /*
+ * We cache MSR_IA32_SYSENTER_CS's value in the TSS's ss1 field --
+@@ -1264,10 +1331,12 @@ static __init int setup_disablecpuid(char *arg)
}
__setup("clearcpuid=", setup_disablecpuid);
@@ -25885,7 +25922,7 @@ index f45a4b9..9d999f8 100644
DEFINE_PER_CPU_FIRST(union irq_stack_union,
irq_stack_union) __aligned(PAGE_SIZE) __visible;
-@@ -1342,21 +1411,21 @@ EXPORT_PER_CPU_SYMBOL(current_task);
+@@ -1379,21 +1448,21 @@ EXPORT_PER_CPU_SYMBOL(current_task);
DEFINE_PER_CPU(int, __preempt_count) = INIT_PREEMPT_COUNT;
EXPORT_PER_CPU_SYMBOL(__preempt_count);
@@ -25914,7 +25951,7 @@ index f45a4b9..9d999f8 100644
/*
* Clear all 6 debug registers:
*/
-@@ -1432,7 +1501,7 @@ void cpu_init(void)
+@@ -1469,7 +1538,7 @@ void cpu_init(void)
*/
load_ucode_ap();
@@ -25923,7 +25960,7 @@ index f45a4b9..9d999f8 100644
oist = &per_cpu(orig_ist, cpu);
#ifdef CONFIG_NUMA
-@@ -1464,7 +1533,6 @@ void cpu_init(void)
+@@ -1501,7 +1570,6 @@ void cpu_init(void)
wrmsrl(MSR_KERNEL_GS_BASE, 0);
barrier();
@@ -25931,7 +25968,7 @@ index f45a4b9..9d999f8 100644
x2apic_setup();
/*
-@@ -1516,7 +1584,7 @@ void cpu_init(void)
+@@ -1553,7 +1621,7 @@ void cpu_init(void)
{
int cpu = smp_processor_id();
struct task_struct *curr = current;
@@ -25993,7 +26030,7 @@ index de6626c..c84e8c1 100644
return &cache_private_group;
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
-index f0c921b..2c7b33b 100644
+index 92e5e37..bc2c026 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -47,6 +47,7 @@
@@ -26004,7 +26041,7 @@ index f0c921b..2c7b33b 100644
#include "mce-internal.h"
-@@ -211,8 +212,7 @@ static struct notifier_block mce_srao_nb;
+@@ -209,8 +210,7 @@ static struct notifier_block mce_srao_nb;
void mce_register_decode_chain(struct notifier_block *nb)
{
/* Ensure SRAO notifier has the highest priority in the decode chain. */
@@ -26014,7 +26051,16 @@ index f0c921b..2c7b33b 100644
atomic_notifier_chain_register(&x86_mce_decoder_chain, nb);
}
-@@ -236,7 +236,7 @@ static void print_mce(struct mce *m)
+@@ -262,7 +262,7 @@ static inline u32 smca_misc_reg(int bank)
+ return MSR_AMD64_SMCA_MCx_MISC(bank);
+ }
+
+-struct mca_msr_regs msr_ops = {
++struct mca_msr_regs msr_ops __read_only = {
+ .ctl = ctl_reg,
+ .status = status_reg,
+ .addr = addr_reg,
+@@ -281,7 +281,7 @@ static void print_mce(struct mce *m)
!(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "",
m->cs, m->ip);
@@ -26023,7 +26069,7 @@ index f0c921b..2c7b33b 100644
print_symbol("{%s}", m->ip);
pr_cont("\n");
}
-@@ -269,10 +269,10 @@ static void print_mce(struct mce *m)
+@@ -314,10 +314,10 @@ static void print_mce(struct mce *m)
#define PANIC_TIMEOUT 5 /* 5 seconds */
@@ -26036,7 +26082,7 @@ index f0c921b..2c7b33b 100644
/* Panic in progress. Enable interrupts and wait for final IPI */
static void wait_for_panic(void)
-@@ -296,7 +296,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+@@ -343,7 +343,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
/*
* Make sure only one CPU runs in machine check panic
*/
@@ -26045,7 +26091,7 @@ index f0c921b..2c7b33b 100644
wait_for_panic();
barrier();
-@@ -304,7 +304,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+@@ -351,7 +351,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
console_verbose();
} else {
/* Don't log too much for fake panic */
@@ -26053,8 +26099,8 @@ index f0c921b..2c7b33b 100644
+ if (atomic_inc_return_unchecked(&mce_fake_panicked) > 1)
return;
}
- /* First print corrected ones that are still unlogged */
-@@ -343,7 +343,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+ pending = mce_gen_pool_prepare_records();
+@@ -387,7 +387,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
if (!fake_panic) {
if (panic_timeout == 0)
panic_timeout = mca_cfg.panic_timeout;
@@ -26063,7 +26109,7 @@ index f0c921b..2c7b33b 100644
} else
pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg);
}
-@@ -717,7 +717,7 @@ static int mce_timed_out(u64 *t, const char *msg)
+@@ -761,7 +761,7 @@ static int mce_timed_out(u64 *t, const char *msg)
* might have been modified by someone else.
*/
rmb();
@@ -26072,7 +26118,20 @@ index f0c921b..2c7b33b 100644
wait_for_panic();
if (!mca_cfg.monarch_timeout)
goto out;
-@@ -1684,7 +1684,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)
+@@ -1691,10 +1691,12 @@ static void __mcheck_cpu_init_vendor(struct cpuinfo_x86 *c)
+ * Install proper ops for Scalable MCA enabled processors
+ */
+ if (mce_flags.smca) {
++ pax_open_kernel();
+ msr_ops.ctl = smca_ctl_reg;
+ msr_ops.status = smca_status_reg;
+ msr_ops.addr = smca_addr_reg;
+ msr_ops.misc = smca_misc_reg;
++ pax_close_kernel();
+ }
+ mce_amd_feature_init(c);
+
+@@ -1747,7 +1749,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)
}
/* Call the installed machine check handler for this CPU setup. */
@@ -26081,7 +26140,7 @@ index f0c921b..2c7b33b 100644
unexpected_machine_check;
/*
-@@ -1713,7 +1713,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
+@@ -1776,7 +1778,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
return;
}
@@ -26091,7 +26150,7 @@ index f0c921b..2c7b33b 100644
__mcheck_cpu_init_generic();
__mcheck_cpu_init_vendor(c);
-@@ -1744,7 +1746,7 @@ void mcheck_cpu_clear(struct cpuinfo_x86 *c)
+@@ -1808,7 +1812,7 @@ void mcheck_cpu_clear(struct cpuinfo_x86 *c)
*/
static DEFINE_SPINLOCK(mce_chrdev_state_lock);
@@ -26100,7 +26159,7 @@ index f0c921b..2c7b33b 100644
static int mce_chrdev_open_exclu; /* already open exclusive? */
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)
+@@ -1816,7 +1820,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
spin_lock(&mce_chrdev_state_lock);
if (mce_chrdev_open_exclu ||
@@ -26109,7 +26168,7 @@ index f0c921b..2c7b33b 100644
spin_unlock(&mce_chrdev_state_lock);
return -EBUSY;
-@@ -1760,7 +1762,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
+@@ -1824,7 +1828,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
if (file->f_flags & O_EXCL)
mce_chrdev_open_exclu = 1;
@@ -26118,7 +26177,7 @@ index f0c921b..2c7b33b 100644
spin_unlock(&mce_chrdev_state_lock);
-@@ -1771,7 +1773,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file)
+@@ -1835,7 +1839,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file)
{
spin_lock(&mce_chrdev_state_lock);
@@ -26127,7 +26186,7 @@ index f0c921b..2c7b33b 100644
mce_chrdev_open_exclu = 0;
spin_unlock(&mce_chrdev_state_lock);
-@@ -2463,7 +2465,7 @@ static __init void mce_init_banks(void)
+@@ -2529,7 +2533,7 @@ static __init void mce_init_banks(void)
for (i = 0; i < mca_cfg.banks; i++) {
struct mce_bank *b = &mce_banks[i];
@@ -26136,7 +26195,7 @@ index f0c921b..2c7b33b 100644
sysfs_attr_init(&a->attr);
a->attr.name = b->attrname;
-@@ -2570,7 +2572,7 @@ struct dentry *mce_get_debugfs_dir(void)
+@@ -2636,7 +2640,7 @@ struct dentry *mce_get_debugfs_dir(void)
static void mce_reset(void)
{
cpu_missing = 0;
@@ -26190,7 +26249,7 @@ index c6a722e..4016140 100644
wmb();
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
-index cbb3cf0..f3b73a3 100644
+index 65cbbcd..c41a7f8 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -1003,13 +1003,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
@@ -26223,10 +26282,10 @@ index 10c11b4..18c4d71 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 19f5736..8f92a72 100644
+index 16e37a2..61decea 100644
--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
-@@ -722,7 +722,8 @@ static DEFINE_RAW_SPINLOCK(set_atomicity_lock);
+@@ -726,7 +726,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.
*/
@@ -26236,7 +26295,7 @@ index 19f5736..8f92a72 100644
{
unsigned long cr0;
-@@ -758,7 +759,8 @@ static void prepare_set(void) __acquires(set_atomicity_lock)
+@@ -762,7 +763,8 @@ static void prepare_set(void) __acquires(set_atomicity_lock)
wbinvd();
}
@@ -26247,7 +26306,7 @@ index 19f5736..8f92a72 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 10f8d47..481f5b4 100644
+index 7d393ec..488842d 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);
@@ -26260,7 +26319,7 @@ index 10f8d47..481f5b4 100644
const struct mtrr_ops *mtrr_if;
diff --git a/arch/x86/kernel/cpu/mtrr/mtrr.h b/arch/x86/kernel/cpu/mtrr/mtrr.h
-index 951884d..4796b75 100644
+index 6c7ced0..55ee554 100644
--- a/arch/x86/kernel/cpu/mtrr/mtrr.h
+++ b/arch/x86/kernel/cpu/mtrr/mtrr.h
@@ -25,7 +25,7 @@ struct mtrr_ops {
@@ -26273,7 +26332,7 @@ 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/vmware.c b/arch/x86/kernel/cpu/vmware.c
-index 364e583..1124b95 100644
+index 8cac429..ccecccb 100644
--- a/arch/x86/kernel/cpu/vmware.c
+++ b/arch/x86/kernel/cpu/vmware.c
@@ -136,7 +136,7 @@ static bool __init vmware_legacy_x2apic_available(void)
@@ -26334,7 +26393,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 8efa57a..9750a3d 100644
+index ef8017c..1543ef8 100644
--- a/arch/x86/kernel/dumpstack.c
+++ b/arch/x86/kernel/dumpstack.c
@@ -2,6 +2,9 @@
@@ -26347,7 +26406,7 @@ index 8efa57a..9750a3d 100644
#include <linux/kallsyms.h>
#include <linux/kprobes.h>
#include <linux/uaccess.h>
-@@ -35,23 +38,21 @@ static void printk_stack_address(unsigned long address, int reliable,
+@@ -35,7 +38,7 @@ static void printk_stack_address(unsigned long address, int reliable,
void printk_address(unsigned long address)
{
@@ -26356,49 +26415,23 @@ index 8efa57a..9750a3d 100644
}
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
- static void
- print_ftrace_graph_addr(unsigned long addr, void *data,
- const struct stacktrace_ops *ops,
-- struct thread_info *tinfo, int *graph)
-+ struct task_struct *task, int *graph)
- {
-- struct task_struct *task;
- unsigned long ret_addr;
- int index;
-
- if (addr != (unsigned long)return_to_handler)
- return;
-
-- task = tinfo->task;
- index = task->curr_ret_stack;
-
- if (!task->ret_stack || index < *graph)
-@@ -68,7 +69,7 @@ print_ftrace_graph_addr(unsigned long addr, void *data,
- static inline void
- print_ftrace_graph_addr(unsigned long addr, void *data,
- const struct stacktrace_ops *ops,
-- struct thread_info *tinfo, int *graph)
-+ struct task_struct *task, int *graph)
- { }
- #endif
-
-@@ -79,10 +80,8 @@ print_ftrace_graph_addr(unsigned long addr, void *data,
+@@ -77,10 +80,8 @@ print_ftrace_graph_addr(unsigned long addr, void *data,
* severe exception (double fault, nmi, stack fault, debug, mce) hardware stack
*/
--static inline int valid_stack_ptr(struct thread_info *tinfo,
+-static inline int valid_stack_ptr(struct task_struct *task,
- void *p, unsigned int size, void *end)
+static inline int valid_stack_ptr(void *t, void *p, unsigned int size, void *end)
{
-- void *t = tinfo;
+- void *t = task_stack_page(task);
if (end) {
if (p < end && p >= (end-THREAD_SIZE))
return 1;
-@@ -93,14 +92,14 @@ static inline int valid_stack_ptr(struct thread_info *tinfo,
+@@ -91,14 +92,14 @@ static inline int valid_stack_ptr(struct task_struct *task,
}
unsigned long
--print_context_stack(struct thread_info *tinfo,
+-print_context_stack(struct task_struct *task,
+print_context_stack(struct task_struct *task, void *stack_start,
unsigned long *stack, unsigned long bp,
const struct stacktrace_ops *ops, void *data,
@@ -26406,48 +26439,30 @@ index 8efa57a..9750a3d 100644
{
struct stack_frame *frame = (struct stack_frame *)bp;
-- while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) {
+- while (valid_stack_ptr(task, stack, sizeof(*stack), end)) {
+ while (valid_stack_ptr(stack_start, stack, sizeof(*stack), end)) {
unsigned long addr;
addr = *stack;
-@@ -112,7 +111,7 @@ print_context_stack(struct thread_info *tinfo,
- } else {
- ops->address(data, addr, 0);
- }
-- print_ftrace_graph_addr(addr, data, ops, tinfo, graph);
-+ print_ftrace_graph_addr(addr, data, ops, task, graph);
- }
- stack++;
- }
-@@ -121,7 +120,7 @@ print_context_stack(struct thread_info *tinfo,
+@@ -119,7 +120,7 @@ print_context_stack(struct task_struct *task,
EXPORT_SYMBOL_GPL(print_context_stack);
unsigned long
--print_context_stack_bp(struct thread_info *tinfo,
+-print_context_stack_bp(struct task_struct *task,
+print_context_stack_bp(struct task_struct *task, void *stack_start,
unsigned long *stack, unsigned long bp,
const struct stacktrace_ops *ops, void *data,
unsigned long *end, int *graph)
-@@ -129,7 +128,7 @@ print_context_stack_bp(struct thread_info *tinfo,
+@@ -127,7 +128,7 @@ print_context_stack_bp(struct task_struct *task,
struct stack_frame *frame = (struct stack_frame *)bp;
unsigned long *ret_addr = &frame->return_address;
-- while (valid_stack_ptr(tinfo, ret_addr, sizeof(*ret_addr), end)) {
+- while (valid_stack_ptr(task, ret_addr, sizeof(*ret_addr), end)) {
+ while (valid_stack_ptr(stack_start, ret_addr, sizeof(*ret_addr), end)) {
unsigned long addr = *ret_addr;
if (!__kernel_text_address(addr))
-@@ -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);
-+ print_ftrace_graph_addr(addr, data, ops, task, graph);
- }
-
- return (unsigned long)frame;
-@@ -228,6 +227,8 @@ unsigned long oops_begin(void)
+@@ -226,6 +227,8 @@ unsigned long oops_begin(void)
EXPORT_SYMBOL_GPL(oops_begin);
NOKPROBE_SYMBOL(oops_begin);
@@ -26456,7 +26471,7 @@ index 8efa57a..9750a3d 100644
void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
{
if (regs && kexec_should_crash(current))
-@@ -249,7 +250,10 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
+@@ -247,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");
@@ -26469,14 +26484,13 @@ index 8efa57a..9750a3d 100644
NOKPROBE_SYMBOL(oops_end);
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
-index 464ffd6..01f2cda 100644
+index fef917e..01f2cda 100644
--- a/arch/x86/kernel/dumpstack_32.c
+++ b/arch/x86/kernel/dumpstack_32.c
-@@ -61,15 +61,14 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -61,13 +61,14 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
bp = stack_frame(task, regs);
for (;;) {
-- struct thread_info *context;
+ void *stack_start = (void *)((unsigned long)stack & ~(THREAD_SIZE-1));
void *end_stack;
@@ -26484,13 +26498,12 @@ index 464ffd6..01f2cda 100644
if (!end_stack)
end_stack = is_softirq_stack(stack, cpu);
-- context = task_thread_info(task);
-- bp = ops->walk_stack(context, stack, bp, ops, data,
+- bp = ops->walk_stack(task, stack, bp, ops, data,
+ bp = ops->walk_stack(task, stack_start, stack, bp, ops, data,
end_stack, &graph);
/* Stop if not on irq stack */
-@@ -137,16 +136,17 @@ void show_regs(struct pt_regs *regs)
+@@ -135,16 +136,17 @@ void show_regs(struct pt_regs *regs)
unsigned int code_len = code_bytes;
unsigned char c;
u8 *ip;
@@ -26510,7 +26523,7 @@ index 464ffd6..01f2cda 100644
code_len = code_len - code_prologue + 1;
}
for (i = 0; i < code_len; i++, ip++) {
-@@ -155,7 +155,7 @@ void show_regs(struct pt_regs *regs)
+@@ -153,7 +155,7 @@ void show_regs(struct pt_regs *regs)
pr_cont(" Bad EIP value.");
break;
}
@@ -26519,7 +26532,7 @@ index 464ffd6..01f2cda 100644
pr_cont(" <%02x>", c);
else
pr_cont(" %02x", c);
-@@ -168,6 +168,7 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -166,6 +168,7 @@ int is_valid_bugaddr(unsigned long ip)
{
unsigned short ud2;
@@ -26527,7 +26540,7 @@ index 464ffd6..01f2cda 100644
if (ip < PAGE_OFFSET)
return 0;
if (probe_kernel_address((unsigned short *)ip, ud2))
-@@ -175,3 +176,15 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -173,3 +176,15 @@ int is_valid_bugaddr(unsigned long ip)
return ud2 == 0x0b0f;
}
@@ -26544,16 +26557,10 @@ index 464ffd6..01f2cda 100644
+EXPORT_SYMBOL(pax_check_alloca);
+#endif
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
-index 5f1c626..059e830 100644
+index d558a8a..059e830 100644
--- a/arch/x86/kernel/dumpstack_64.c
+++ b/arch/x86/kernel/dumpstack_64.c
-@@ -153,12 +153,12 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
- const struct stacktrace_ops *ops, void *data)
- {
- const unsigned cpu = get_cpu();
-- struct thread_info *tinfo;
- unsigned long *irq_stack = (unsigned long *)per_cpu(irq_stack_ptr, cpu);
- unsigned long dummy;
+@@ -158,6 +158,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
unsigned used = 0;
int graph = 0;
int done = 0;
@@ -26561,15 +26568,7 @@ index 5f1c626..059e830 100644
if (!task)
task = current;
-@@ -179,7 +179,6 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
- * current stack address. If the stacks consist of nested
- * exceptions
- */
-- tinfo = task_thread_info(task);
- while (!done) {
- unsigned long *stack_end;
- enum stack_type stype;
-@@ -192,17 +191,19 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -190,17 +191,19 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
done = 1;
switch (stype) {
@@ -26588,12 +26587,12 @@ index 5f1c626..059e830 100644
if (ops->stack(data, id) < 0)
break;
-- bp = ops->walk_stack(tinfo, stack, bp, ops,
+- bp = ops->walk_stack(task, stack, bp, ops,
+ bp = ops->walk_stack(task, stack_end - EXCEPTION_STKSZ, stack, bp, ops,
data, stack_end, &graph);
ops->stack(data, "<EOE>");
/*
-@@ -210,15 +211,16 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -208,15 +211,16 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
* second-to-last pointer (index -2 to end) in the
* exception stack:
*/
@@ -26607,24 +26606,24 @@ index 5f1c626..059e830 100644
-
if (ops->stack(data, "IRQ") < 0)
break;
-- bp = ops->walk_stack(tinfo, stack, bp,
+- bp = ops->walk_stack(task, stack, bp,
+ bp = ops->walk_stack(task, irq_stack, stack, bp,
ops, data, stack_end, &graph);
/*
* We link to the next stack (which would be
-@@ -237,10 +239,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -235,10 +239,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
}
}
- /*
- * This handles the process stack:
- */
-- bp = ops->walk_stack(tinfo, stack, bp, ops, data, NULL, &graph);
+- bp = ops->walk_stack(task, stack, bp, ops, data, NULL, &graph);
+out:
put_cpu();
}
EXPORT_SYMBOL(dump_trace);
-@@ -347,8 +346,55 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -345,8 +346,55 @@ int is_valid_bugaddr(unsigned long ip)
{
unsigned short ud2;
@@ -26709,7 +26708,7 @@ index 8a12199..e63bebf 100644
#include <asm/processor.h>
#include <asm/fcntl.h>
diff --git a/arch/x86/kernel/espfix_64.c b/arch/x86/kernel/espfix_64.c
-index 4d38416..ec7cc4e 100644
+index 04f89ca..43ad7de 100644
--- a/arch/x86/kernel/espfix_64.c
+++ b/arch/x86/kernel/espfix_64.c
@@ -41,6 +41,7 @@
@@ -26806,7 +26805,7 @@ 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 8e37cc8..0ce76b8 100644
+index 9702754..1858c7b 100644
--- a/arch/x86/kernel/fpu/core.c
+++ b/arch/x86/kernel/fpu/core.c
@@ -131,7 +131,7 @@ void __kernel_fpu_end(void)
@@ -26894,45 +26893,39 @@ index 8e37cc8..0ce76b8 100644
fpu->counter++;
kernel_fpu_enable();
}
-@@ -509,25 +509,25 @@ void fpu__clear(struct fpu *fpu)
- static inline unsigned short get_fpu_cwd(struct fpu *fpu)
- {
- if (cpu_has_fxsr) {
-- return fpu->state.fxsave.cwd;
-+ return fpu->state->fxsave.cwd;
- } else {
-- return (unsigned short)fpu->state.fsave.cwd;
-+ return (unsigned short)fpu->state->fsave.cwd;
- }
- }
+@@ -523,11 +523,11 @@ int fpu__exception_code(struct fpu *fpu, int trap_nr)
+ * fully reproduce the context of the exception.
+ */
+ if (boot_cpu_has(X86_FEATURE_FXSR)) {
+- cwd = fpu->state.fxsave.cwd;
+- swd = fpu->state.fxsave.swd;
++ cwd = fpu->state->fxsave.cwd;
++ swd = fpu->state->fxsave.swd;
+ } else {
+- cwd = (unsigned short)fpu->state.fsave.cwd;
+- swd = (unsigned short)fpu->state.fsave.swd;
++ cwd = (unsigned short)fpu->state->fsave.cwd;
++ swd = (unsigned short)fpu->state->fsave.swd;
+ }
- static inline unsigned short get_fpu_swd(struct fpu *fpu)
- {
- if (cpu_has_fxsr) {
-- return fpu->state.fxsave.swd;
-+ return fpu->state->fxsave.swd;
- } else {
-- return (unsigned short)fpu->state.fsave.swd;
-+ return (unsigned short)fpu->state->fsave.swd;
- }
- }
+ err = swd & ~cwd;
+@@ -541,7 +541,7 @@ int fpu__exception_code(struct fpu *fpu, int trap_nr)
+ unsigned short mxcsr = MXCSR_DEFAULT;
- static inline unsigned short get_fpu_mxcsr(struct fpu *fpu)
- {
- if (cpu_has_xmm) {
-- return fpu->state.fxsave.mxcsr;
-+ return fpu->state->fxsave.mxcsr;
- } else {
- return MXCSR_DEFAULT;
+ if (boot_cpu_has(X86_FEATURE_XMM))
+- mxcsr = fpu->state.fxsave.mxcsr;
++ mxcsr = fpu->state->fxsave.mxcsr;
+
+ err = ~(mxcsr >> 7) & mxcsr;
}
diff --git a/arch/x86/kernel/fpu/init.c b/arch/x86/kernel/fpu/init.c
-index 54c86ff..703757b 100644
+index aacfd7a..3f07533 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)
/* Flush out any pending x87 state: */
#ifdef CONFIG_MATH_EMULATION
- if (!cpu_has_fpu)
+ if (!boot_cpu_has(X86_FEATURE_FPU))
- fpstate_init_soft(&current->thread.fpu.state.soft);
+ fpstate_init_soft(&current->thread.fpu.state->soft);
else
@@ -27000,10 +26993,10 @@ index 54c86ff..703757b 100644
fpu__init_system_ctx_switch();
}
diff --git a/arch/x86/kernel/fpu/regset.c b/arch/x86/kernel/fpu/regset.c
-index 8bd1c00..765a913 100644
+index 81422df..f89e945 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,
+@@ -40,7 +40,7 @@ int xfpregs_get(struct task_struct *target, const struct user_regset *regset,
fpstate_sanitize_xstate(fpu);
return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
@@ -27012,7 +27005,7 @@ index 8bd1c00..765a913 100644
}
int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
-@@ -54,19 +54,19 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
+@@ -57,19 +57,19 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
fpstate_sanitize_xstate(fpu);
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
@@ -27029,13 +27022,13 @@ index 8bd1c00..765a913 100644
* update the header bits in the xsave header, indicating the
* presence of FP and SSE state.
*/
- if (cpu_has_xsave)
+ if (boot_cpu_has(X86_FEATURE_XSAVE))
- fpu->state.xsave.header.xfeatures |= XFEATURE_MASK_FPSSE;
+ fpu->state->xsave.header.xfeatures |= XFEATURE_MASK_FPSSE;
return ret;
}
-@@ -84,7 +84,7 @@ int xstateregs_get(struct task_struct *target, const struct user_regset *regset,
+@@ -87,7 +87,7 @@ int xstateregs_get(struct task_struct *target, const struct user_regset *regset,
fpu__activate_fpstate_read(fpu);
@@ -27044,7 +27037,7 @@ index 8bd1c00..765a913 100644
/*
* Copy the 48bytes defined by the software first into the xstate
-@@ -113,7 +113,7 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset,
+@@ -116,7 +116,7 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset,
fpu__activate_fpstate_write(fpu);
@@ -27053,7 +27046,7 @@ index 8bd1c00..765a913 100644
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, xsave, 0, -1);
/*
-@@ -204,7 +204,7 @@ static inline u32 twd_fxsr_to_i387(struct fxregs_state *fxsave)
+@@ -207,7 +207,7 @@ static inline u32 twd_fxsr_to_i387(struct fxregs_state *fxsave)
void
convert_from_fxsr(struct user_i387_ia32_struct *env, struct task_struct *tsk)
{
@@ -27062,7 +27055,7 @@ index 8bd1c00..765a913 100644
struct _fpreg *to = (struct _fpreg *) &env->st_space[0];
struct _fpxreg *from = (struct _fpxreg *) &fxsave->st_space[0];
int i;
-@@ -242,7 +242,7 @@ void convert_to_fxsr(struct task_struct *tsk,
+@@ -245,7 +245,7 @@ void convert_to_fxsr(struct task_struct *tsk,
const struct user_i387_ia32_struct *env)
{
@@ -27071,28 +27064,28 @@ index 8bd1c00..765a913 100644
struct _fpreg *from = (struct _fpreg *) &env->st_space[0];
struct _fpxreg *to = (struct _fpxreg *) &fxsave->st_space[0];
int i;
-@@ -280,7 +280,7 @@ int fpregs_get(struct task_struct *target, const struct user_regset *regset,
+@@ -283,7 +283,7 @@ int fpregs_get(struct task_struct *target, const struct user_regset *regset,
- if (!cpu_has_fxsr)
+ if (!boot_cpu_has(X86_FEATURE_FXSR))
return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
- &fpu->state.fsave, 0,
+ &fpu->state->fsave, 0,
-1);
fpstate_sanitize_xstate(fpu);
-@@ -311,7 +311,7 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset,
+@@ -314,7 +314,7 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset,
- if (!cpu_has_fxsr)
+ if (!boot_cpu_has(X86_FEATURE_FXSR))
return user_regset_copyin(&pos, &count, &kbuf, &ubuf,
- &fpu->state.fsave, 0,
+ &fpu->state->fsave, 0,
-1);
if (pos > 0 || count < sizeof(env))
-@@ -326,7 +326,7 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset,
+@@ -329,7 +329,7 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset,
* presence of FP.
*/
- if (cpu_has_xsave)
+ if (boot_cpu_has(X86_FEATURE_XSAVE))
- fpu->state.xsave.header.xfeatures |= XFEATURE_MASK_FP;
+ fpu->state->xsave.header.xfeatures |= XFEATURE_MASK_FP;
return ret;
@@ -27189,7 +27182,7 @@ 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 b48ef35..10f3b79 100644
+index 4ea2a59..bbecb39 100644
--- a/arch/x86/kernel/fpu/xstate.c
+++ b/arch/x86/kernel/fpu/xstate.c
@@ -122,14 +122,14 @@ EXPORT_SYMBOL_GPL(cpu_has_xfeatures);
@@ -27336,7 +27329,7 @@ index d036cfb..cb4c991 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 1f4422d..995e17d 100644
+index b72fb0b..7cb3f8a 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -62,12 +62,12 @@ again:
@@ -27390,7 +27383,7 @@ index 1f4422d..995e17d 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 af11129..e506d32 100644
+index 6f8902b..5d42150 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -27,6 +27,12 @@
@@ -27620,26 +27613,7 @@ index af11129..e506d32 100644
movw %cx, 8 * GDT_ENTRY_STACK_CANARY + 2(%eax)
shrl $16, %ecx
movb %cl, 8 * GDT_ENTRY_STACK_CANARY + 4(%eax)
-@@ -558,7 +650,7 @@ early_idt_handler_common:
- cmpl $2,(%esp) # X86_TRAP_NMI
- je .Lis_nmi # Ignore NMI
-
-- cmpl $2,%ss:early_recursion_flag
-+ cmpl $1,%ss:early_recursion_flag
- je hlt_loop
- incl %ss:early_recursion_flag
-
-@@ -596,8 +688,8 @@ early_idt_handler_common:
- pushl (20+6*4)(%esp) /* trapno */
- pushl $fault_msg
- call printk
--#endif
- call dump_stack
-+#endif
- hlt_loop:
- hlt
- jmp hlt_loop
-@@ -617,8 +709,11 @@ ENDPROC(early_idt_handler_common)
+@@ -608,8 +700,11 @@ ENDPROC(early_idt_handler_common)
/* This is the default interrupt "handler" :-) */
ALIGN
ignore_int:
@@ -27652,7 +27626,7 @@ index af11129..e506d32 100644
pushl %eax
pushl %ecx
pushl %edx
-@@ -627,9 +722,6 @@ ignore_int:
+@@ -618,9 +713,6 @@ ignore_int:
movl $(__KERNEL_DS),%eax
movl %eax,%ds
movl %eax,%es
@@ -27662,7 +27636,7 @@ index af11129..e506d32 100644
pushl 16(%esp)
pushl 24(%esp)
pushl 32(%esp)
-@@ -660,11 +752,8 @@ ENTRY(initial_code)
+@@ -655,11 +747,8 @@ ENTRY(initial_code)
ENTRY(setup_once_ref)
.long setup_once
@@ -27676,7 +27650,7 @@ index af11129..e506d32 100644
#ifdef CONFIG_X86_PAE
initial_pg_pmd:
.fill 1024*KPMDS,4,0
-@@ -677,15 +766,18 @@ initial_pg_fixmap:
+@@ -672,15 +761,18 @@ initial_pg_fixmap:
ENTRY(empty_zero_page)
.fill 4096,1,0
ENTRY(swapper_pg_dir)
@@ -27699,7 +27673,7 @@ index af11129..e506d32 100644
ENTRY(initial_page_table)
.long pa(initial_pg_pmd+PGD_IDENT_ATTR),0 /* low identity map */
# if KPMDS == 3
-@@ -703,13 +795,21 @@ ENTRY(initial_page_table)
+@@ -698,13 +790,21 @@ ENTRY(initial_page_table)
# else
# error "Kernel PMDs should be 1, 2 or 3"
# endif
@@ -27723,7 +27697,7 @@ index af11129..e506d32 100644
__INITRODATA
int_msg:
-@@ -737,7 +837,7 @@ fault_msg:
+@@ -719,7 +819,7 @@ int_msg:
* segment size, and 32-bit linear address value:
*/
@@ -27732,7 +27706,7 @@ index af11129..e506d32 100644
.globl boot_gdt_descr
.globl idt_descr
-@@ -746,7 +846,7 @@ fault_msg:
+@@ -728,7 +828,7 @@ int_msg:
.word 0 # 32 bit align gdt_desc.address
boot_gdt_descr:
.word __BOOT_DS+7
@@ -27741,7 +27715,7 @@ index af11129..e506d32 100644
.word 0 # 32-bit align idt_desc.address
idt_descr:
-@@ -757,7 +857,7 @@ idt_descr:
+@@ -739,7 +839,7 @@ idt_descr:
.word 0 # 32 bit align gdt_desc.address
ENTRY(early_gdt_descr)
.word GDT_ENTRIES*8-1
@@ -27750,7 +27724,7 @@ index af11129..e506d32 100644
/*
* The boot_gdt must mirror the equivalent in setup.S and is
-@@ -766,5 +866,65 @@ ENTRY(early_gdt_descr)
+@@ -748,5 +848,65 @@ ENTRY(early_gdt_descr)
.align L1_CACHE_BYTES
ENTRY(boot_gdt)
.fill GDT_ENTRY_BOOT_CS,8,0
@@ -27819,7 +27793,7 @@ index af11129..e506d32 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 22fbf9d..1137e22 100644
+index 5df831e..47801b0 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -20,6 +20,8 @@
@@ -27828,10 +27802,10 @@ index 22fbf9d..1137e22 100644
#include <asm/nops.h>
+#include <asm/cpufeatures.h>
+#include <asm/alternative-asm.h>
+ #include "../entry/calling.h"
#ifdef CONFIG_PARAVIRT
- #include <asm/asm-offsets.h>
-@@ -40,6 +42,12 @@
+@@ -41,6 +43,12 @@
L4_PAGE_OFFSET = pgd_index(__PAGE_OFFSET)
L4_START_KERNEL = pgd_index(__START_KERNEL_map)
L3_START_KERNEL = pud_index(__START_KERNEL_map)
@@ -27844,7 +27818,7 @@ index 22fbf9d..1137e22 100644
.text
__HEAD
-@@ -89,11 +97,36 @@ startup_64:
+@@ -98,11 +106,36 @@ startup_64:
* Fixup the physical addresses in the page table
*/
addq %rbp, early_level4_pgt + (L4_START_KERNEL*8)(%rip)
@@ -27883,7 +27857,7 @@ index 22fbf9d..1137e22 100644
/*
* Set up the identity mapping for the switchover. These
-@@ -177,11 +210,12 @@ ENTRY(secondary_startup_64)
+@@ -186,11 +219,12 @@ ENTRY(secondary_startup_64)
/* Sanitize CPU configuration */
call verify_cpu
@@ -27898,7 +27872,7 @@ index 22fbf9d..1137e22 100644
movq %rcx, %cr4
/* Setup early boot stage 4 level pagetables. */
-@@ -202,10 +236,24 @@ ENTRY(secondary_startup_64)
+@@ -211,10 +245,24 @@ ENTRY(secondary_startup_64)
movl $MSR_EFER, %ecx
rdmsr
btsl $_EFER_SCE, %eax /* Enable System Call */
@@ -27924,7 +27898,7 @@ index 22fbf9d..1137e22 100644
1: wrmsr /* Make changes effective */
/* Setup cr0 */
-@@ -285,6 +333,7 @@ ENTRY(secondary_startup_64)
+@@ -294,6 +342,7 @@ ENTRY(secondary_startup_64)
* REX.W + FF /5 JMP m16:64 Jump far, absolute indirect,
* address given in m16:64.
*/
@@ -27932,7 +27906,7 @@ index 22fbf9d..1137e22 100644
movq initial_code(%rip),%rax
pushq $0 # fake return address to stop unwinder
pushq $__KERNEL_CS # set correct cs
-@@ -318,7 +367,7 @@ ENDPROC(start_cpu0)
+@@ -327,7 +376,7 @@ ENDPROC(start_cpu0)
.quad INIT_PER_CPU_VAR(irq_stack_union)
GLOBAL(stack_start)
@@ -27941,24 +27915,7 @@ index 22fbf9d..1137e22 100644
.word 0
__FINITDATA
-@@ -398,7 +447,7 @@ early_idt_handler_common:
- call dump_stack
- #ifdef CONFIG_KALLSYMS
- leaq early_idt_ripmsg(%rip),%rdi
-- movq 40(%rsp),%rsi # %rip again
-+ movq 88(%rsp),%rsi # %rip again
- call __print_symbol
- #endif
- #endif /* EARLY_PRINTK */
-@@ -427,6 +476,7 @@ ENDPROC(early_idt_handler_common)
- early_recursion_flag:
- .long 0
-
-+ __READ_ONLY
- #ifdef CONFIG_EARLY_PRINTK
- early_idt_msg:
- .asciz "PANIC: early exception %02lx rip %lx:%lx error %lx cr2 %lx\n"
-@@ -449,40 +499,70 @@ GLOBAL(name)
+@@ -416,40 +465,70 @@ GLOBAL(name)
__INITDATA
NEXT_PAGE(early_level4_pgt)
.fill 511,8,0
@@ -28041,7 +27998,7 @@ index 22fbf9d..1137e22 100644
NEXT_PAGE(level2_kernel_pgt)
/*
-@@ -499,31 +579,79 @@ NEXT_PAGE(level2_kernel_pgt)
+@@ -466,31 +545,79 @@ NEXT_PAGE(level2_kernel_pgt)
KERNEL_IMAGE_SIZE/PMD_SIZE)
NEXT_PAGE(level2_fixmap_pgt)
@@ -28294,7 +28251,7 @@ index 61521dc..5ce5a37 100644
}
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
-index 38da8f2..5653e36 100644
+index c627bf8..5653e36 100644
--- a/arch/x86/kernel/irq_32.c
+++ b/arch/x86/kernel/irq_32.c
@@ -23,6 +23,8 @@
@@ -28368,7 +28325,7 @@ index 38da8f2..5653e36 100644
return 1;
}
-@@ -109,32 +120,18 @@ static inline int execute_on_irq_stack(int overflow, struct irq_desc *desc)
+@@ -109,23 +120,11 @@ static inline int execute_on_irq_stack(int overflow, struct irq_desc *desc)
*/
void irq_ctx_init(int cpu)
{
@@ -28394,16 +28351,7 @@ index 38da8f2..5653e36 100644
}
void do_softirq_own_stack(void)
- {
-- struct thread_info *curstk;
- struct irq_stack *irqstk;
- u32 *isp, *prev_esp;
-
-- curstk = current_stack();
- irqstk = __this_cpu_read(softirq_stack);
-
- /* build the stack frame on the softirq stack */
-@@ -144,7 +141,16 @@ void do_softirq_own_stack(void)
+@@ -142,7 +141,16 @@ void do_softirq_own_stack(void)
prev_esp = (u32 *)irqstk;
*prev_esp = current_stack_pointer();
@@ -28443,10 +28391,10 @@ index 206d0b9..ecb677c 100644
panic("low stack detected by irq handler - check messages\n");
#endif
diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
-index e565e0e..fdfeb45 100644
+index fc25f69..d31d60c 100644
--- a/arch/x86/kernel/jump_label.c
+++ b/arch/x86/kernel/jump_label.c
-@@ -31,6 +31,8 @@ static void bug_at(unsigned char *ip, int line)
+@@ -32,6 +32,8 @@ static void bug_at(unsigned char *ip, int line)
* Something went wrong. Crash the box, as something could be
* corrupting the kernel.
*/
@@ -28455,7 +28403,7 @@ index e565e0e..fdfeb45 100644
pr_warning("Unexpected op at %pS [%p] (%02x %02x %02x %02x %02x) %s:%d\n",
ip, ip, ip[0], ip[1], ip[2], ip[3], ip[4], __FILE__, line);
BUG();
-@@ -51,7 +53,7 @@ static void __jump_label_transform(struct jump_entry *entry,
+@@ -52,7 +54,7 @@ static void __jump_label_transform(struct jump_entry *entry,
* Jump label is enabled for the first time.
* So we expect a default_nop...
*/
@@ -28464,7 +28412,7 @@ index e565e0e..fdfeb45 100644
!= 0))
bug_at((void *)entry->code, __LINE__);
} else {
-@@ -59,7 +61,7 @@ static void __jump_label_transform(struct jump_entry *entry,
+@@ -60,7 +62,7 @@ static void __jump_label_transform(struct jump_entry *entry,
* ...otherwise expect an ideal_nop. Otherwise
* something went horribly wrong.
*/
@@ -28473,7 +28421,7 @@ index e565e0e..fdfeb45 100644
!= 0))
bug_at((void *)entry->code, __LINE__);
}
-@@ -75,13 +77,13 @@ static void __jump_label_transform(struct jump_entry *entry,
+@@ -76,13 +78,13 @@ static void __jump_label_transform(struct jump_entry *entry,
* are converting the default nop to the ideal nop.
*/
if (init) {
@@ -28490,10 +28438,10 @@ 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 2da6ee9..fc0ca78 100644
+index 04cde52..8b2900b 100644
--- a/arch/x86/kernel/kgdb.c
+++ b/arch/x86/kernel/kgdb.c
-@@ -228,7 +228,10 @@ static void kgdb_correct_hw_break(void)
+@@ -229,7 +229,10 @@ static void kgdb_correct_hw_break(void)
bp->attr.bp_addr = breakinfo[breakno].addr;
bp->attr.bp_len = breakinfo[breakno].len;
bp->attr.bp_type = breakinfo[breakno].type;
@@ -28505,7 +28453,7 @@ index 2da6ee9..fc0ca78 100644
info->len = breakinfo[breakno].len;
info->type = breakinfo[breakno].type;
val = arch_install_hw_breakpoint(bp);
-@@ -475,12 +478,12 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
+@@ -476,12 +479,12 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
case 'k':
/* clear the trace bit */
linux_regs->flags &= ~X86_EFLAGS_TF;
@@ -28520,7 +28468,7 @@ index 2da6ee9..fc0ca78 100644
raw_smp_processor_id());
}
-@@ -550,7 +553,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd)
+@@ -551,7 +554,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd)
switch (cmd) {
case DIE_DEBUG:
@@ -28529,7 +28477,7 @@ index 2da6ee9..fc0ca78 100644
if (user_mode(regs))
return single_step_cont(regs, args);
break;
-@@ -753,11 +756,11 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
+@@ -754,11 +757,11 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
char opc[BREAK_INSTR_SIZE];
bpt->type = BP_BREAKPOINT;
@@ -28543,7 +28491,7 @@ index 2da6ee9..fc0ca78 100644
arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE);
if (!err)
return err;
-@@ -769,7 +772,7 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
+@@ -770,7 +773,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);
@@ -28552,7 +28500,7 @@ index 2da6ee9..fc0ca78 100644
if (err)
return err;
if (memcmp(opc, arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE))
-@@ -793,13 +796,13 @@ int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
+@@ -794,13 +797,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);
@@ -28569,10 +28517,10 @@ index 2da6ee9..fc0ca78 100644
}
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
-index 44bcd57..044428a 100644
+index 7847e5c..cec50fd 100644
--- a/arch/x86/kernel/kprobes/core.c
+++ b/arch/x86/kernel/kprobes/core.c
-@@ -121,9 +121,12 @@ __synthesize_relative_insn(void *from, void *to, u8 op)
+@@ -122,9 +122,12 @@ __synthesize_relative_insn(void *from, void *to, u8 op)
s32 raddr;
} __packed *insn;
@@ -28586,7 +28534,7 @@ index 44bcd57..044428a 100644
}
/* Insert a jump instruction at address 'from', which jumps to address 'to'.*/
-@@ -169,7 +172,7 @@ int can_boost(kprobe_opcode_t *opcodes)
+@@ -170,7 +173,7 @@ int can_boost(kprobe_opcode_t *opcodes)
kprobe_opcode_t opcode;
kprobe_opcode_t *orig_opcodes = opcodes;
@@ -28595,7 +28543,7 @@ index 44bcd57..044428a 100644
return 0; /* Page fault may occur on this address. */
retry:
-@@ -261,12 +264,12 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
+@@ -262,12 +265,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.
*/
@@ -28610,7 +28558,7 @@ index 44bcd57..044428a 100644
}
/*
-@@ -368,7 +371,9 @@ int __copy_instruction(u8 *dest, u8 *src)
+@@ -369,7 +372,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;
@@ -28620,7 +28568,7 @@ index 44bcd57..044428a 100644
#ifdef CONFIG_X86_64
if (insn_rip_relative(&insn)) {
-@@ -395,7 +400,9 @@ int __copy_instruction(u8 *dest, u8 *src)
+@@ -396,7 +401,9 @@ int __copy_instruction(u8 *dest, u8 *src)
return 0;
}
disp = (u8 *) dest + insn_offset_displacement(&insn);
@@ -28630,7 +28578,7 @@ index 44bcd57..044428a 100644
}
#endif
return length;
-@@ -537,7 +544,7 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
+@@ -538,7 +545,7 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
* nor set current_kprobe, because it doesn't use single
* stepping.
*/
@@ -28639,7 +28587,7 @@ index 44bcd57..044428a 100644
preempt_enable_no_resched();
return;
}
-@@ -554,9 +561,9 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
+@@ -555,9 +562,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)
@@ -28651,7 +28599,7 @@ index 44bcd57..044428a 100644
}
NOKPROBE_SYMBOL(setup_singlestep);
-@@ -641,7 +648,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
+@@ -642,7 +649,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
setup_singlestep(p, regs, kcb, 0);
return 1;
}
@@ -28660,7 +28608,7 @@ index 44bcd57..044428a 100644
/*
* The breakpoint instruction was removed right
* after we hit it. Another cpu has removed
-@@ -687,6 +694,9 @@ asm(
+@@ -688,6 +695,9 @@ asm(
" movq %rax, 152(%rsp)\n"
RESTORE_REGS_STRING
" popfq\n"
@@ -28670,7 +28618,7 @@ index 44bcd57..044428a 100644
#else
" pushf\n"
SAVE_REGS_STRING
-@@ -828,7 +838,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs,
+@@ -829,7 +839,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs,
struct kprobe_ctlblk *kcb)
{
unsigned long *tos = stack_addr(regs);
@@ -28680,10 +28628,10 @@ index 44bcd57..044428a 100644
kprobe_opcode_t *insn = p->ainsn.insn;
diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
-index 7b3b9d1..e2478b91 100644
+index 4425f59..34a112f 100644
--- a/arch/x86/kernel/kprobes/opt.c
+++ b/arch/x86/kernel/kprobes/opt.c
-@@ -79,6 +79,7 @@ found:
+@@ -80,6 +80,7 @@ found:
/* Insert a move instruction which sets a pointer to eax/rdi (1st arg). */
static void synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long val)
{
@@ -28691,7 +28639,7 @@ index 7b3b9d1..e2478b91 100644
#ifdef CONFIG_X86_64
*addr++ = 0x48;
*addr++ = 0xbf;
-@@ -86,6 +87,7 @@ static void synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long val)
+@@ -87,6 +88,7 @@ static void synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long val)
*addr++ = 0xb8;
#endif
*(unsigned long *)addr = val;
@@ -28699,7 +28647,7 @@ index 7b3b9d1..e2478b91 100644
}
asm (
-@@ -342,7 +344,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
+@@ -343,7 +345,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
* Verify if the address gap is in 2GB range, because this uses
* a relative jump.
*/
@@ -28708,13 +28656,13 @@ index 7b3b9d1..e2478b91 100644
if (abs(rel) > 0x7fffffff) {
__arch_remove_optimized_kprobe(op, 0);
return -ERANGE;
-@@ -359,16 +361,18 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
+@@ -360,16 +362,18 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
op->optinsn.size = ret;
/* Copy arch-dep-instance from template */
- memcpy(buf, &optprobe_template_entry, TMPL_END_IDX);
+ pax_open_kernel();
-+ memcpy(buf, ktla_ktva(&optprobe_template_entry), TMPL_END_IDX);
++ memcpy(buf, (u8 *)ktla_ktva((unsigned long)&optprobe_template_entry), TMPL_END_IDX);
+ pax_close_kernel();
/* Set probe information */
@@ -28722,24 +28670,24 @@ index 7b3b9d1..e2478b91 100644
/* Set probe function call */
- synthesize_relcall(buf + TMPL_CALL_IDX, optimized_callback);
-+ synthesize_relcall(ktva_ktla(buf) + TMPL_CALL_IDX, optimized_callback);
++ synthesize_relcall((u8 *)ktva_ktla((unsigned long)buf) + TMPL_CALL_IDX, optimized_callback);
/* Set returning jmp instruction at the tail of out-of-line buffer */
- synthesize_reljump(buf + TMPL_END_IDX + op->optinsn.size,
-+ synthesize_reljump(ktva_ktla(buf) + TMPL_END_IDX + op->optinsn.size,
++ synthesize_reljump((u8 *)ktva_ktla((unsigned long)buf) + TMPL_END_IDX + op->optinsn.size,
(u8 *)op->kp.addr + op->optinsn.size);
flush_icache_range((unsigned long) buf,
-@@ -393,7 +397,7 @@ void arch_optimize_kprobes(struct list_head *oplist)
+@@ -394,7 +398,7 @@ void arch_optimize_kprobes(struct list_head *oplist)
WARN_ON(kprobe_disabled(&op->kp));
/* Backup instructions which will be replaced by jump address */
- memcpy(op->optinsn.copied_insn, op->kp.addr + INT3_SIZE,
-+ memcpy(op->optinsn.copied_insn, ktla_ktva(op->kp.addr) + INT3_SIZE,
++ memcpy(op->optinsn.copied_insn, (u8 *)ktla_ktva((unsigned long)op->kp.addr) + INT3_SIZE,
RELATIVE_ADDR_SIZE);
insn_buf[0] = RELATIVEJUMP_OPCODE;
-@@ -441,7 +445,7 @@ int setup_detour_execution(struct kprobe *p, struct pt_regs *regs, int reenter)
+@@ -442,7 +446,7 @@ int setup_detour_execution(struct kprobe *p, struct pt_regs *regs, int reenter)
/* This kprobe is really able to run optimized path. */
op = container_of(p, struct optimized_kprobe, kp);
/* Detour through copied instructions */
@@ -28762,10 +28710,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 8079508..b34be72 100644
+index eea2a6f..4e97ff3 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
-@@ -554,7 +554,7 @@ static uint32_t __init kvm_detect(void)
+@@ -546,7 +546,7 @@ static uint32_t __init kvm_detect(void)
return kvm_cpuid_base();
}
@@ -28930,33 +28878,6 @@ index 6707039..254f32c 100644
switch (func) {
case 0:
ret = read_ldt(ptr, bytecount);
-diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c
-index 92fc1a5..478b427 100644
---- a/arch/x86/kernel/livepatch.c
-+++ b/arch/x86/kernel/livepatch.c
-@@ -38,8 +38,10 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
- {
- size_t size = 4;
- unsigned long val;
-- unsigned long core = (unsigned long)mod->core_layout.base;
-- unsigned long core_size = mod->core_layout.size;
-+ unsigned long core_rx = (unsigned long)mod->core_layout.base_rx;
-+ unsigned long core_rw = (unsigned long)mod->core_layout.base_rw;
-+ unsigned long core_size_rx = mod->core_layout.size_rx;
-+ unsigned long core_size_rw = mod->core_layout.size_rw;
-
- switch (type) {
- case R_X86_64_NONE:
-@@ -62,7 +64,8 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
- return -EINVAL;
- }
-
-- if (loc < core || loc >= core + core_size)
-+ if ((loc < core_rx || loc >= core_rx + core_size_rx) &&
-+ (loc < core_rw || loc >= core_rw + core_size_rw))
- /* loc does not point to any symbol inside the module */
- return -EINVAL;
-
diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
index 469b23d..5449cfe 100644
--- a/arch/x86/kernel/machine_kexec_32.c
@@ -28989,7 +28910,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 ed48a9f..23a6a8f 100644
+index 61924222..0e4856e 100644
--- a/arch/x86/kernel/mcount_64.S
+++ b/arch/x86/kernel/mcount_64.S
@@ -7,7 +7,7 @@
@@ -29012,12 +28933,12 @@ index ed48a9f..23a6a8f 100644
ENTRY(ftrace_caller)
/* save_mcount_regs fills in first two parameters */
-@@ -182,9 +183,10 @@ GLOBAL(ftrace_graph_call)
- jmp ftrace_stub
+@@ -183,9 +184,10 @@ GLOBAL(ftrace_graph_call)
#endif
--GLOBAL(ftrace_stub)
-+RAP_ENTRY(ftrace_stub)
+ /* This is weak to keep gas from relaxing the jumps */
+-WEAK(ftrace_stub)
++RAP_WEAK(ftrace_stub)
+ pax_force_retaddr
retq
-END(ftrace_caller)
@@ -29025,7 +28946,7 @@ index ed48a9f..23a6a8f 100644
ENTRY(ftrace_regs_caller)
/* Save the current flags before any operations that can change them */
-@@ -255,7 +257,7 @@ GLOBAL(ftrace_regs_caller_end)
+@@ -256,7 +258,7 @@ GLOBAL(ftrace_regs_caller_end)
jmp ftrace_epilogue
@@ -29034,7 +28955,7 @@ index ed48a9f..23a6a8f 100644
#else /* ! CONFIG_DYNAMIC_FTRACE */
-@@ -274,6 +276,7 @@ fgraph_trace:
+@@ -275,6 +277,7 @@ fgraph_trace:
#endif
GLOBAL(ftrace_stub)
@@ -29042,7 +28963,7 @@ index ed48a9f..23a6a8f 100644
retq
trace:
-@@ -286,12 +289,13 @@ trace:
+@@ -287,12 +290,13 @@ trace:
* ip and parent ip are used and the list function is called when
* function tracing is enabled.
*/
@@ -29057,7 +28978,7 @@ index ed48a9f..23a6a8f 100644
#endif /* CONFIG_DYNAMIC_FTRACE */
#endif /* CONFIG_FUNCTION_TRACER */
-@@ -313,8 +317,9 @@ ENTRY(ftrace_graph_caller)
+@@ -314,8 +318,9 @@ ENTRY(ftrace_graph_caller)
restore_mcount_regs
@@ -29068,7 +28989,7 @@ index ed48a9f..23a6a8f 100644
GLOBAL(return_to_handler)
subq $24, %rsp
-@@ -330,5 +335,7 @@ GLOBAL(return_to_handler)
+@@ -331,5 +336,7 @@ GLOBAL(return_to_handler)
movq 8(%rsp), %rdx
movq (%rsp), %rax
addq $24, %rsp
@@ -29077,10 +28998,10 @@ index ed48a9f..23a6a8f 100644
+ENDPROC(return_to_handler)
#endif
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
-index 005c03e..7000fe4 100644
+index 477ae80..c8e40a3 100644
--- a/arch/x86/kernel/module.c
+++ b/arch/x86/kernel/module.c
-@@ -75,17 +75,17 @@ static unsigned long int get_module_load_offset(void)
+@@ -76,17 +76,17 @@ static unsigned long int get_module_load_offset(void)
}
#endif
@@ -29102,7 +29023,7 @@ index 005c03e..7000fe4 100644
__builtin_return_address(0));
if (p && (kasan_module_alloc(p, size) < 0)) {
vfree(p);
-@@ -95,6 +95,51 @@ void *module_alloc(unsigned long size)
+@@ -96,6 +96,51 @@ void *module_alloc(unsigned long size)
return p;
}
@@ -29154,7 +29075,7 @@ index 005c03e..7000fe4 100644
#ifdef CONFIG_X86_32
int apply_relocate(Elf32_Shdr *sechdrs,
const char *strtab,
-@@ -105,14 +150,16 @@ int apply_relocate(Elf32_Shdr *sechdrs,
+@@ -106,14 +151,16 @@ int apply_relocate(Elf32_Shdr *sechdrs,
unsigned int i;
Elf32_Rel *rel = (void *)sechdrs[relsec].sh_addr;
Elf32_Sym *sym;
@@ -29174,7 +29095,7 @@ index 005c03e..7000fe4 100644
/* This is the symbol it is referring to. Note that all
undefined symbols have been resolved. */
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
-@@ -121,11 +168,15 @@ int apply_relocate(Elf32_Shdr *sechdrs,
+@@ -122,11 +169,15 @@ int apply_relocate(Elf32_Shdr *sechdrs,
switch (ELF32_R_TYPE(rel[i].r_info)) {
case R_386_32:
/* We add the value into the location given */
@@ -29192,7 +29113,7 @@ index 005c03e..7000fe4 100644
break;
default:
pr_err("%s: Unknown relocation: %u\n",
-@@ -170,21 +221,30 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
+@@ -171,21 +222,30 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
case R_X86_64_NONE:
break;
case R_X86_64_64:
@@ -29430,7 +29351,7 @@ index 33ee3e0..6d23e5c 100644
#endif /* SMP */
};
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
-index f08ac28..4599189 100644
+index 7b3b3f2..68b5f72 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -64,6 +64,9 @@ u64 _paravirt_ident_64(u64 x)
@@ -29483,9 +29404,9 @@ index f08ac28..4599189 100644
-struct pv_info pv_info = {
+struct pv_info pv_info __read_only = {
.name = "bare hardware",
- .paravirt_enabled = 0,
.kernel_rpl = 0,
-@@ -303,16 +310,16 @@ struct pv_info pv_info = {
+ .shared_kernel_pmd = 1, /* Only used when CONFIG_X86_PAE is set */
+@@ -302,16 +309,16 @@ struct pv_info pv_info = {
#endif
};
@@ -29505,7 +29426,7 @@ index f08ac28..4599189 100644
.save_fl = __PV_IS_CALLEE_SAVE(native_save_fl),
.restore_fl = __PV_IS_CALLEE_SAVE(native_restore_fl),
.irq_disable = __PV_IS_CALLEE_SAVE(native_irq_disable),
-@@ -324,7 +331,23 @@ __visible struct pv_irq_ops pv_irq_ops = {
+@@ -323,7 +330,23 @@ __visible struct pv_irq_ops pv_irq_ops = {
#endif
};
@@ -29530,7 +29451,7 @@ index f08ac28..4599189 100644
.cpuid = native_cpuid,
.get_debugreg = native_get_debugreg,
.set_debugreg = native_set_debugreg,
-@@ -356,8 +379,8 @@ __visible struct pv_cpu_ops pv_cpu_ops = {
+@@ -357,8 +380,8 @@ __visible struct pv_cpu_ops pv_cpu_ops = {
.write_gdt_entry = native_write_gdt_entry,
.write_idt_entry = native_write_idt_entry,
@@ -29541,7 +29462,7 @@ index f08ac28..4599189 100644
.load_sp0 = native_load_sp0,
-@@ -370,8 +393,8 @@ __visible struct pv_cpu_ops pv_cpu_ops = {
+@@ -371,8 +394,8 @@ __visible struct pv_cpu_ops pv_cpu_ops = {
.set_iopl_mask = native_set_iopl_mask,
.io_delay = native_io_delay,
@@ -29552,7 +29473,7 @@ index f08ac28..4599189 100644
};
/* At this point, native_get/set_debugreg has real function entries */
-@@ -379,15 +402,64 @@ NOKPROBE_SYMBOL(native_get_debugreg);
+@@ -380,15 +403,64 @@ NOKPROBE_SYMBOL(native_get_debugreg);
NOKPROBE_SYMBOL(native_set_debugreg);
NOKPROBE_SYMBOL(native_load_idt);
@@ -29619,7 +29540,7 @@ index f08ac28..4599189 100644
.read_cr2 = native_read_cr2,
.write_cr2 = native_write_cr2,
-@@ -400,20 +472,20 @@ struct pv_mmu_ops pv_mmu_ops = {
+@@ -401,20 +473,20 @@ struct pv_mmu_ops pv_mmu_ops = {
.flush_tlb_others = native_flush_tlb_others,
.pgd_alloc = __paravirt_pgd_alloc,
@@ -29648,7 +29569,7 @@ index f08ac28..4599189 100644
.ptep_modify_prot_start = __ptep_modify_prot_start,
.ptep_modify_prot_commit = __ptep_modify_prot_commit,
-@@ -434,6 +506,7 @@ struct pv_mmu_ops pv_mmu_ops = {
+@@ -435,6 +507,7 @@ struct pv_mmu_ops pv_mmu_ops = {
.make_pud = PTE_IDENT,
.set_pgd = native_set_pgd,
@@ -29656,7 +29577,7 @@ index f08ac28..4599189 100644
#endif
#endif /* CONFIG_PGTABLE_LEVELS >= 3 */
-@@ -443,9 +516,9 @@ struct pv_mmu_ops pv_mmu_ops = {
+@@ -444,9 +517,9 @@ struct pv_mmu_ops pv_mmu_ops = {
.make_pte = PTE_IDENT,
.make_pgd = PTE_IDENT,
@@ -29669,7 +29590,7 @@ index f08ac28..4599189 100644
.lazy_mode = {
.enter = paravirt_nop,
-@@ -454,6 +527,12 @@ struct pv_mmu_ops pv_mmu_ops = {
+@@ -455,6 +528,12 @@ struct pv_mmu_ops pv_mmu_ops = {
},
.set_fixmap = native_set_fixmap,
@@ -29724,7 +29645,7 @@ index 833b1d3..f839e8b 100644
}
}
diff --git a/arch/x86/kernel/pci-iommu_table.c b/arch/x86/kernel/pci-iommu_table.c
-index 35ccf75..7a15747 100644
+index f712dfd..0172a75 100644
--- a/arch/x86/kernel/pci-iommu_table.c
+++ b/arch/x86/kernel/pci-iommu_table.c
@@ -2,7 +2,7 @@
@@ -29750,7 +29671,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 2915d54..8e43324 100644
+index 96becbb..a18444b 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -15,6 +15,7 @@
@@ -29820,7 +29741,7 @@ index 2915d54..8e43324 100644
/*
* Free current thread data structures etc..
*/
-@@ -105,7 +127,7 @@ void exit_thread(void)
+@@ -104,7 +126,7 @@ void exit_thread(struct task_struct *tsk)
struct fpu *fpu = &t->fpu;
if (bp) {
@@ -29829,7 +29750,7 @@ index 2915d54..8e43324 100644
t->io_bitmap_ptr = NULL;
clear_thread_flag(TIF_IO_BITMAP);
-@@ -127,6 +149,9 @@ void flush_thread(void)
+@@ -126,6 +148,9 @@ void flush_thread(void)
{
struct task_struct *tsk = current;
@@ -29839,7 +29760,7 @@ index 2915d54..8e43324 100644
flush_ptrace_hw_breakpoint(tsk);
memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
-@@ -268,7 +293,7 @@ static void __exit_idle(void)
+@@ -267,7 +292,7 @@ static void __exit_idle(void)
void exit_idle(void)
{
/* idle loop has pid 0 */
@@ -29848,7 +29769,7 @@ index 2915d54..8e43324 100644
return;
__exit_idle();
}
-@@ -321,7 +346,7 @@ bool xen_set_default_idle(void)
+@@ -320,7 +345,7 @@ bool xen_set_default_idle(void)
return ret;
}
#endif
@@ -29857,7 +29778,7 @@ index 2915d54..8e43324 100644
{
local_irq_disable();
/*
-@@ -499,13 +524,6 @@ static int __init idle_setup(char *str)
+@@ -498,13 +523,6 @@ static int __init idle_setup(char *str)
}
early_param("idle", idle_setup);
@@ -29871,7 +29792,7 @@ index 2915d54..8e43324 100644
unsigned long arch_randomize_brk(struct mm_struct *mm)
{
unsigned long range_end = mm->brk + 0x02000000;
-@@ -537,9 +555,7 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -536,9 +554,7 @@ unsigned long get_wchan(struct task_struct *p)
* PADDING
* ----------- top = topmax - TOP_OF_KERNEL_STACK_PADDING
* stack
@@ -29882,7 +29803,7 @@ index 2915d54..8e43324 100644
*
* The tasks stack pointer points at the location where the
* framepointer is stored. The data on the stack is:
-@@ -550,7 +566,7 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -549,7 +565,7 @@ unsigned long get_wchan(struct task_struct *p)
*/
top = start + THREAD_SIZE - TOP_OF_KERNEL_STACK_PADDING;
top -= 2 * sizeof(unsigned long);
@@ -29891,7 +29812,7 @@ index 2915d54..8e43324 100644
sp = READ_ONCE(p->thread.sp);
if (sp < bottom || sp > top)
-@@ -567,3 +583,35 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -566,3 +582,35 @@ unsigned long get_wchan(struct task_struct *p)
} while (count++ < 16 && p->state != TASK_RUNNING);
return 0;
}
@@ -30027,10 +29948,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 6cbab31..2fd4ca3 100644
+index 6e789ca..7c4bae4 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
-@@ -162,9 +162,10 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
+@@ -143,9 +143,10 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
struct pt_regs *childregs;
struct task_struct *me = current;
@@ -30042,8 +29963,8 @@ index 6cbab31..2fd4ca3 100644
set_tsk_thread_flag(p, TIF_FORK);
p->thread.io_bitmap_ptr = NULL;
-@@ -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;
+@@ -155,6 +156,8 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
+ p->thread.fsbase = p->thread.fsindex ? 0 : me->thread.fsbase;
savesegment(es, p->thread.es);
savesegment(ds, p->thread.ds);
+ savesegment(ss, p->thread.ss);
@@ -30051,16 +29972,16 @@ index 6cbab31..2fd4ca3 100644
memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps));
if (unlikely(p->flags & PF_KTHREAD)) {
-@@ -281,7 +284,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -262,7 +265,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();
- struct tss_struct *tss = &per_cpu(cpu_tss, cpu);
+ struct tss_struct *tss = cpu_tss + cpu;
- unsigned fsindex, gsindex;
+ unsigned prev_fsindex, prev_gsindex;
fpu_switch_t fpu_switch;
-@@ -332,6 +335,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -313,6 +316,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
if (unlikely(next->ds | prev->ds))
loadsegment(ds, next->ds);
@@ -30071,7 +29992,7 @@ index 6cbab31..2fd4ca3 100644
/*
* Switch FS and GS.
*
-@@ -403,10 +410,13 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -422,10 +429,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);
@@ -30086,7 +30007,7 @@ index 6cbab31..2fd4ca3 100644
* Now maybe reload the debug registers and handle I/O bitmaps
*/
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
-index 32e9d9c..afd5732 100644
+index 600edd2..d514c66 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -169,10 +169,10 @@ unsigned long kernel_stack_pointer(struct pt_regs *regs)
@@ -30102,8 +30023,8 @@ index 32e9d9c..afd5732 100644
if (prev_esp)
return (unsigned long)prev_esp;
-@@ -429,6 +429,20 @@ static int putreg(struct task_struct *child,
- if (child->thread.gs != value)
+@@ -411,6 +411,20 @@ static int putreg(struct task_struct *child,
+ if (child->thread.gsbase != value)
return do_arch_prctl(child, ARCH_SET_GS, value);
return 0;
+
@@ -30123,7 +30044,7 @@ index 32e9d9c..afd5732 100644
#endif
}
-@@ -565,7 +579,7 @@ static void ptrace_triggered(struct perf_event *bp,
+@@ -533,7 +547,7 @@ static void ptrace_triggered(struct perf_event *bp,
static unsigned long ptrace_get_dr7(struct perf_event *bp[])
{
int i;
@@ -30132,7 +30053,7 @@ index 32e9d9c..afd5732 100644
struct arch_hw_breakpoint *info;
for (i = 0; i < HBP_NUM; i++) {
-@@ -799,7 +813,7 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -767,7 +781,7 @@ long arch_ptrace(struct task_struct *child, long request,
unsigned long addr, unsigned long data)
{
int ret;
@@ -30141,7 +30062,7 @@ index 32e9d9c..afd5732 100644
switch (request) {
/* read the word at location addr in the USER area. */
-@@ -884,14 +898,14 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -852,14 +866,14 @@ long arch_ptrace(struct task_struct *child, long request,
if ((int) addr < 0)
return -EIO;
ret = do_get_thread_area(child, addr,
@@ -30158,7 +30079,7 @@ index 32e9d9c..afd5732 100644
break;
#endif
-@@ -1279,7 +1293,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+@@ -1247,7 +1261,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
#ifdef CONFIG_X86_64
@@ -30167,7 +30088,7 @@ index 32e9d9c..afd5732 100644
[REGSET_GENERAL] = {
.core_note_type = NT_PRSTATUS,
.n = sizeof(struct user_regs_struct) / sizeof(long),
-@@ -1320,7 +1334,7 @@ static const struct user_regset_view user_x86_64_view = {
+@@ -1288,7 +1302,7 @@ static const struct user_regset_view user_x86_64_view = {
#endif /* CONFIG_X86_64 */
#if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
@@ -30176,7 +30097,7 @@ index 32e9d9c..afd5732 100644
[REGSET_GENERAL] = {
.core_note_type = NT_PRSTATUS,
.n = sizeof(struct user_regs_struct32) / sizeof(u32),
-@@ -1373,7 +1387,7 @@ static const struct user_regset_view user_x86_32_view = {
+@@ -1341,7 +1355,7 @@ static const struct user_regset_view user_x86_32_view = {
*/
u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];
@@ -30185,7 +30106,7 @@ index 32e9d9c..afd5732 100644
{
#ifdef CONFIG_X86_64
x86_64_regsets[REGSET_XSTATE].n = size / sizeof(u64);
-@@ -1408,7 +1422,7 @@ static void fill_sigtrap_info(struct task_struct *tsk,
+@@ -1376,7 +1390,7 @@ static void fill_sigtrap_info(struct task_struct *tsk,
memset(info, 0, sizeof(*info));
info->si_signo = SIGTRAP;
info->si_code = si_code;
@@ -30195,7 +30116,7 @@ index 32e9d9c..afd5732 100644
void user_single_step_siginfo(struct task_struct *tsk,
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
-index 99bfc02..c85b4c4 100644
+index 06c58ce..8f89e99 100644
--- a/arch/x86/kernel/pvclock.c
+++ b/arch/x86/kernel/pvclock.c
@@ -51,11 +51,11 @@ void pvclock_touch_watchdogs(void)
@@ -30212,7 +30133,7 @@ index 99bfc02..c85b4c4 100644
}
u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src)
-@@ -105,11 +105,11 @@ cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
+@@ -112,11 +112,11 @@ cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
* updating at the same time, and one of them could be slightly behind,
* making the assumption that last_value always go forward fail to hold.
*/
@@ -30227,7 +30148,7 @@ index 99bfc02..c85b4c4 100644
return ret;
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
-index ab0adc0..502dfc2 100644
+index a9b31eb..71706d1 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -70,6 +70,11 @@ static int __init set_bios_reboot(const struct dmi_system_id *d)
@@ -30291,7 +30212,7 @@ index ab0adc0..502dfc2 100644
{
int i;
int attempt = 0;
-@@ -639,13 +666,13 @@ void native_machine_shutdown(void)
+@@ -648,13 +675,13 @@ void native_machine_shutdown(void)
#endif
}
@@ -30307,7 +30228,7 @@ index ab0adc0..502dfc2 100644
{
pr_notice("machine restart\n");
-@@ -654,7 +681,7 @@ static void native_machine_restart(char *__unused)
+@@ -663,7 +690,7 @@ static void native_machine_restart(char *__unused)
__machine_emergency_restart(0);
}
@@ -30316,7 +30237,7 @@ index ab0adc0..502dfc2 100644
{
/* Stop other cpus and apics */
machine_shutdown();
-@@ -664,7 +691,7 @@ static void native_machine_halt(void)
+@@ -673,7 +700,7 @@ static void native_machine_halt(void)
stop_this_cpu(NULL);
}
@@ -30325,7 +30246,7 @@ index ab0adc0..502dfc2 100644
{
if (pm_power_off) {
if (!reboot_force)
-@@ -673,9 +700,10 @@ static void native_machine_power_off(void)
+@@ -682,9 +709,10 @@ static void native_machine_power_off(void)
}
/* A fallback in case there is no PM info available */
tboot_shutdown(TB_SHUTDOWN_HALT);
@@ -30365,7 +30286,7 @@ 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 2367ae0..2d1264d 100644
+index c4e7b39..429c9b9 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -113,6 +113,7 @@
@@ -30392,7 +30313,7 @@ index 2367ae0..2d1264d 100644
#endif
/* Boot loader ID and version as integers, for the benefit of proc_dointvec */
-@@ -759,7 +762,7 @@ static void __init trim_bios_range(void)
+@@ -767,7 +770,7 @@ static void __init trim_bios_range(void)
* area (640->1Mb) as ram even though it is not.
* take them out.
*/
@@ -30401,7 +30322,7 @@ index 2367ae0..2d1264d 100644
sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
}
-@@ -767,7 +770,7 @@ static void __init trim_bios_range(void)
+@@ -775,7 +778,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)
{
@@ -30410,7 +30331,7 @@ index 2367ae0..2d1264d 100644
u64 size = __pa_symbol(_end) - start;
/*
-@@ -848,8 +851,8 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
+@@ -856,8 +859,8 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
void __init setup_arch(char **cmdline_p)
{
@@ -30421,7 +30342,7 @@ index 2367ae0..2d1264d 100644
early_reserve_initrd();
-@@ -942,16 +945,16 @@ void __init setup_arch(char **cmdline_p)
+@@ -950,16 +953,16 @@ void __init setup_arch(char **cmdline_p)
if (!boot_params.hdr.root_flags)
root_mountflags &= ~MS_RDONLY;
@@ -30521,7 +30442,7 @@ 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 548ddf7..9b53e78 100644
+index 22cc2f9..249765f 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -226,7 +226,7 @@ static unsigned long align_sigframe(unsigned long sp)
@@ -30533,7 +30454,7 @@ index 548ddf7..9b53e78 100644
#else /* !CONFIG_X86_32 */
sp = round_down(sp, 16) - 8;
#endif
-@@ -335,10 +335,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
+@@ -334,10 +334,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
}
if (current->mm->context.vdso)
@@ -30546,7 +30467,7 @@ index 548ddf7..9b53e78 100644
if (ksig->ka.sa.sa_flags & SA_RESTORER)
restorer = ksig->ka.sa.sa_restorer;
-@@ -352,7 +351,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
+@@ -351,7 +350,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.
*/
@@ -30555,7 +30476,7 @@ index 548ddf7..9b53e78 100644
if (err)
return -EFAULT;
-@@ -399,8 +398,10 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
+@@ -398,8 +397,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. */
@@ -30568,7 +30489,7 @@ index 548ddf7..9b53e78 100644
if (ksig->ka.sa.sa_flags & SA_RESTORER)
restorer = ksig->ka.sa.sa_restorer;
put_user_ex(restorer, &frame->pretcode);
-@@ -412,7 +413,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
+@@ -411,7 +412,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.
*/
@@ -30577,7 +30498,7 @@ index 548ddf7..9b53e78 100644
} put_user_catch(err);
err |= copy_siginfo_to_user(&frame->info, &ksig->info);
-@@ -682,7 +683,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
+@@ -681,7 +682,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
{
int usig = ksig->sig;
sigset_t *set = sigmask_to_save();
@@ -30591,7 +30512,7 @@ index 548ddf7..9b53e78 100644
/* Set up the stack frame */
if (is_ia32_frame()) {
-@@ -693,7 +699,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
+@@ -692,7 +698,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 {
@@ -30614,7 +30535,7 @@ 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 0e4329e..286c7ca 100644
+index fafe8b9..d6ee9af 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -221,14 +221,17 @@ static void notrace start_secondary(void *unused)
@@ -31009,7 +30930,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 e72a07f..b67cc32 100644
+index 9b0185f..7776af1 100644
--- a/arch/x86/kernel/tboot.c
+++ b/arch/x86/kernel/tboot.c
@@ -44,6 +44,7 @@
@@ -31020,7 +30941,7 @@ index e72a07f..b67cc32 100644
#include "../realmode/rm/wakeup.h"
-@@ -151,6 +152,10 @@ static int map_tboot_pages(unsigned long vaddr, unsigned long start_pfn,
+@@ -145,6 +146,10 @@ static int map_tboot_pages(unsigned long vaddr, unsigned long start_pfn,
if (!tboot_pg_dir)
return -1;
@@ -31031,7 +30952,7 @@ index e72a07f..b67cc32 100644
for (; nr > 0; nr--, vaddr += PAGE_SIZE, start_pfn++) {
if (map_tboot_page(vaddr, start_pfn, PAGE_KERNEL_EXEC))
return -1;
-@@ -221,8 +226,6 @@ static int tboot_setup_sleep(void)
+@@ -215,8 +220,6 @@ static int tboot_setup_sleep(void)
void tboot_shutdown(u32 shutdown_type)
{
@@ -31040,7 +30961,7 @@ index e72a07f..b67cc32 100644
if (!tboot_enabled())
return;
-@@ -242,9 +245,12 @@ void tboot_shutdown(u32 shutdown_type)
+@@ -236,9 +239,12 @@ void tboot_shutdown(u32 shutdown_type)
tboot->shutdown_type = shutdown_type;
switch_to_tboot_pt();
@@ -31055,7 +30976,7 @@ index e72a07f..b67cc32 100644
/* should not reach here */
while (1)
-@@ -310,7 +316,7 @@ static int tboot_extended_sleep(u8 sleep_state, u32 val_a, u32 val_b)
+@@ -304,7 +310,7 @@ static int tboot_extended_sleep(u8 sleep_state, u32 val_a, u32 val_b)
return -ENODEV;
}
@@ -31064,7 +30985,7 @@ index e72a07f..b67cc32 100644
static int tboot_wait_for_aps(int num_aps)
{
-@@ -334,9 +340,9 @@ static int tboot_cpu_callback(struct notifier_block *nfb, unsigned long action,
+@@ -328,9 +334,9 @@ static int tboot_cpu_callback(struct notifier_block *nfb, unsigned long action,
{
switch (action) {
case CPU_DYING:
@@ -31076,7 +30997,7 @@ index e72a07f..b67cc32 100644
return NOTIFY_BAD;
break;
}
-@@ -422,7 +428,7 @@ static __init int tboot_late_init(void)
+@@ -416,7 +422,7 @@ static __init int tboot_late_init(void)
tboot_create_trampoline();
@@ -31117,10 +31038,10 @@ index d39c091..1df4349 100644
return pc;
}
diff --git a/arch/x86/kernel/tls.c b/arch/x86/kernel/tls.c
-index 7fc5e84..c6e445a 100644
+index 9692a5e..aea9fa5 100644
--- a/arch/x86/kernel/tls.c
+++ b/arch/x86/kernel/tls.c
-@@ -139,6 +139,11 @@ int do_set_thread_area(struct task_struct *p, int idx,
+@@ -140,6 +140,11 @@ int do_set_thread_area(struct task_struct *p, int idx,
if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
return -EINVAL;
@@ -31131,8 +31052,8 @@ index 7fc5e84..c6e445a 100644
+
set_tls_desc(p, idx, &info, 1);
- return 0;
-@@ -256,7 +261,7 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset,
+ /*
+@@ -298,7 +303,7 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset,
if (kbuf)
info = kbuf;
@@ -31160,10 +31081,10 @@ 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 87bd6b6..8f46fc9 100644
+index 00f03d8..94ee9fc 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
-@@ -70,7 +70,7 @@
+@@ -71,7 +71,7 @@
#include <asm/proto.h>
/* No need to be aligned, but done to keep all IDTs defined the same way. */
@@ -31172,7 +31093,7 @@ index 87bd6b6..8f46fc9 100644
#else
#include <asm/processor-flags.h>
#include <asm/setup.h>
-@@ -78,7 +78,7 @@ gate_desc debug_idt_table[NR_VECTORS] __page_aligned_bss;
+@@ -79,7 +79,7 @@ gate_desc debug_idt_table[NR_VECTORS] __page_aligned_bss;
#endif
/* Must be page-aligned because the real IDT is used in a fixmap. */
@@ -31181,16 +31102,7 @@ index 87bd6b6..8f46fc9 100644
DECLARE_BITMAP(used_vectors, NR_VECTORS);
EXPORT_SYMBOL_GPL(used_vectors);
-@@ -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.
- */
-- BUG_ON((unsigned long)(current_top_of_stack() -
-+ BUG_ON((unsigned long)(current_top_of_stack(smp_processor_id()) -
- current_stack_pointer()) >= THREAD_SIZE);
-
- preempt_enable_no_resched();
-@@ -168,7 +168,7 @@ void ist_end_non_atomic(void)
+@@ -169,7 +169,7 @@ void ist_end_non_atomic(void)
}
static nokprobe_inline int
@@ -31199,7 +31111,7 @@ index 87bd6b6..8f46fc9 100644
struct pt_regs *regs, long error_code)
{
if (v8086_mode(regs)) {
-@@ -188,8 +188,25 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
+@@ -189,8 +189,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;
@@ -31225,7 +31137,7 @@ index 87bd6b6..8f46fc9 100644
return 0;
}
-@@ -228,7 +245,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr,
+@@ -229,7 +246,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr,
}
static void
@@ -31234,7 +31146,7 @@ index 87bd6b6..8f46fc9 100644
long error_code, siginfo_t *info)
{
struct task_struct *tsk = current;
-@@ -251,7 +268,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
+@@ -252,7 +269,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",
@@ -31243,7 +31155,7 @@ index 87bd6b6..8f46fc9 100644
regs->ip, regs->sp, error_code);
print_vma_addr(" in ", regs->ip);
pr_cont("\n");
-@@ -331,6 +348,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
+@@ -332,6 +349,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;
@@ -31255,7 +31167,7 @@ index 87bd6b6..8f46fc9 100644
#ifdef CONFIG_DOUBLEFAULT
df_debug(regs, error_code);
#endif
-@@ -443,11 +465,35 @@ do_general_protection(struct pt_regs *regs, long error_code)
+@@ -444,11 +466,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,
@@ -31292,7 +31204,7 @@ index 87bd6b6..8f46fc9 100644
tsk->thread.error_code = error_code;
tsk->thread.trap_nr = X86_TRAP_GP;
-@@ -545,6 +591,9 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
+@@ -546,6 +592,9 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
container_of(task_pt_regs(current),
struct bad_iret_stack, regs);
@@ -31302,7 +31214,7 @@ index 87bd6b6..8f46fc9 100644
/* Copy the IRET target to the new stack. */
memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8);
-@@ -716,7 +765,7 @@ exit:
+@@ -717,7 +766,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.
*/
@@ -31311,7 +31223,7 @@ index 87bd6b6..8f46fc9 100644
"Overran or corrupted SYSENTER stack\n");
#endif
ist_exit(regs);
-@@ -846,7 +895,7 @@ void __init early_trap_init(void)
+@@ -847,7 +896,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().
*/
@@ -31320,7 +31232,7 @@ index 87bd6b6..8f46fc9 100644
/* int3 can be called from all */
set_system_intr_gate(X86_TRAP_BP, &int3);
#ifdef CONFIG_X86_32
-@@ -931,7 +980,7 @@ void __init trap_init(void)
+@@ -932,7 +981,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().
*/
@@ -31329,7 +31241,7 @@ index 87bd6b6..8f46fc9 100644
/* int3 can be called from all */
set_system_intr_gate_ist(X86_TRAP_BP, &int3, DEBUG_STACK);
-@@ -939,7 +988,7 @@ void __init trap_init(void)
+@@ -940,7 +989,7 @@ void __init trap_init(void)
#ifdef CONFIG_X86_64
memcpy(&debug_idt_table, &idt_table, IDT_ENTRIES * 16);
@@ -31339,7 +31251,7 @@ index 87bd6b6..8f46fc9 100644
#endif
}
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
-index c9c4c7c..f6a623a 100644
+index 38ba6de..6c77173 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -156,7 +156,7 @@ static void cyc2ns_write_end(int cpu, struct cyc2ns_data *data)
@@ -31352,7 +31264,7 @@ index c9c4c7c..f6a623a 100644
/*
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
-index bf4db6e..624137c 100644
+index 6c1ff31..cc5d294 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -287,7 +287,7 @@ static int uprobe_init_insn(struct arch_uprobe *auprobe, struct insn *insn, bool
@@ -31446,7 +31358,7 @@ index 3dce1ca..3dce2ad 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 4c941f8..459a84d 100644
+index 9297a00..3dc41ac 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -26,6 +26,13 @@
@@ -31768,10 +31680,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 bbbaa80..25071dc 100644
+index 7597b42..4c3b5e9 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
-@@ -222,15 +222,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
+@@ -224,15 +224,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
struct kvm_cpuid2 *cpuid,
struct kvm_cpuid_entry2 __user *entries)
{
@@ -31795,7 +31707,7 @@ index bbbaa80..25071dc 100644
vcpu->arch.cpuid_nent = cpuid->nent;
kvm_apic_set_version(vcpu);
kvm_x86_ops->cpuid_update(vcpu);
-@@ -243,15 +248,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
+@@ -245,15 +250,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
struct kvm_cpuid2 *cpuid,
struct kvm_cpuid_entry2 __user *entries)
{
@@ -31959,7 +31871,7 @@ 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 9db4709..0423b6f 100644
+index 5f42d03..052f8a4 100644
--- a/arch/x86/kvm/ioapic.c
+++ b/arch/x86/kvm/ioapic.c
@@ -413,6 +413,8 @@ static void kvm_ioapic_eoi_inject_work(struct work_struct *work)
@@ -31972,7 +31884,7 @@ index 9db4709..0423b6f 100644
{
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 1a2da0e..d1a84c1 100644
+index a397200..b4a6f32 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -57,7 +57,7 @@
@@ -31982,8 +31894,8 @@ index 1a2da0e..d1a84c1 100644
-#define apic_debug(fmt, arg...)
+#define apic_debug(fmt, arg...) do {} while (0)
- #define APIC_LVT_NUM 6
/* 14 is the version for Xeon and Pentium 8.4.8*/
+ #define APIC_VERSION (0x14UL | ((KVM_APIC_LVT_NUM - 1) << 16))
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
index bc019f7..51a5631 100644
--- a/arch/x86/kvm/paging_tmpl.h
@@ -31998,10 +31910,10 @@ index bc019f7..51a5631 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 31346a3..038711e 100644
+index 16ef31b..23496f1 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
-@@ -3533,7 +3533,11 @@ static void reload_tss(struct kvm_vcpu *vcpu)
+@@ -4120,7 +4120,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);
@@ -32013,7 +31925,7 @@ index 31346a3..038711e 100644
load_TR_desc();
}
-@@ -3932,6 +3936,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -4559,6 +4563,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
#endif
#endif
@@ -32024,8 +31936,8 @@ index 31346a3..038711e 100644
reload_tss(vcpu);
local_irq_disable();
-@@ -4307,7 +4315,7 @@ static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu)
- {
+@@ -4955,7 +4963,7 @@ static inline void avic_post_state_restore(struct kvm_vcpu *vcpu)
+ avic_handle_ldr_update(vcpu);
}
-static struct kvm_x86_ops svm_x86_ops = {
@@ -32034,7 +31946,7 @@ index 31346a3..038711e 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 c4217a2..964fb8e 100644
+index 64a79f2..d392b19 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -1589,14 +1589,14 @@ static __always_inline void vmcs_writel(unsigned long field, unsigned long value
@@ -32077,7 +31989,7 @@ index c4217a2..964fb8e 100644
rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */
-@@ -2483,7 +2491,7 @@ static void setup_msrs(struct vcpu_vmx *vmx)
+@@ -2485,7 +2493,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
*/
@@ -32086,7 +31998,7 @@ index c4217a2..964fb8e 100644
{
u64 host_tsc, tsc_offset;
-@@ -4724,7 +4732,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4726,7 +4734,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 */
@@ -32097,7 +32009,7 @@ index c4217a2..964fb8e 100644
/* Save the most likely value for this task's CR4 in the VMCS. */
cr4 = cr4_read_shadow();
-@@ -4751,7 +4762,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4753,7 +4764,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;
@@ -32106,7 +32018,7 @@ index c4217a2..964fb8e 100644
rdmsr(MSR_IA32_SYSENTER_CS, low32, high32);
vmcs_write32(HOST_IA32_SYSENTER_CS, low32);
-@@ -6299,11 +6310,17 @@ static __init int hardware_setup(void)
+@@ -6314,11 +6325,17 @@ static __init int hardware_setup(void)
* page upon invalidation. No need to do anything if not
* using the APIC_ACCESS_ADDR VMCS field.
*/
@@ -32126,7 +32038,7 @@ index c4217a2..964fb8e 100644
if (enable_ept && !cpu_has_vmx_ept_2m_page())
kvm_disable_largepages();
-@@ -6373,10 +6390,12 @@ static __init int hardware_setup(void)
+@@ -6385,10 +6402,12 @@ static __init int hardware_setup(void)
enable_pml = 0;
if (!enable_pml) {
@@ -32139,7 +32051,7 @@ index c4217a2..964fb8e 100644
}
kvm_set_posted_intr_wakeup_handler(wakeup_handler);
-@@ -8706,6 +8725,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8718,6 +8737,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
"jmp 2f \n\t"
"1: " __ex(ASM_VMX_VMRESUME) "\n\t"
"2: "
@@ -32152,7 +32064,7 @@ index c4217a2..964fb8e 100644
/* Save guest registers, load host registers, keep flags */
"mov %0, %c[wordsize](%%" _ASM_SP ") \n\t"
"pop %0 \n\t"
-@@ -8758,6 +8783,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8770,6 +8795,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))
@@ -32164,7 +32076,7 @@ index c4217a2..964fb8e 100644
: "cc", "memory"
#ifdef CONFIG_X86_64
, "rax", "rbx", "rdi", "rsi"
-@@ -8771,7 +8801,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8783,7 +8813,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
if (debugctlmsr)
update_debugctlmsr(debugctlmsr);
@@ -32173,7 +32085,7 @@ index c4217a2..964fb8e 100644
/*
* The sysexit path does not restore ds/es, so we must set them to
* a reasonable value ourselves.
-@@ -8780,8 +8810,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8792,8 +8822,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.
*/
@@ -32194,7 +32106,7 @@ index c4217a2..964fb8e 100644
#endif
vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP)
-@@ -10893,7 +10933,7 @@ out:
+@@ -10905,7 +10945,7 @@ out:
return ret;
}
@@ -32204,10 +32116,10 @@ index c4217a2..964fb8e 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 6b9701b..86084df 100644
+index 7da5dd2..b667a94 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
-@@ -1945,8 +1945,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
+@@ -1940,8 +1940,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
{
struct kvm *kvm = vcpu->kvm;
int lm = is_long_mode(vcpu);
@@ -32218,7 +32130,7 @@ index 6b9701b..86084df 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;
-@@ -2647,6 +2647,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
+@@ -2646,6 +2646,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
if (n < msr_list.nmsrs)
goto out;
r = -EFAULT;
@@ -32227,7 +32139,7 @@ index 6b9701b..86084df 100644
if (copy_to_user(user_msr_list->indices, &msrs_to_save,
num_msrs_to_save * sizeof(u32)))
goto out;
-@@ -3051,7 +3053,7 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,
+@@ -3054,7 +3056,7 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,
static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
{
@@ -32236,7 +32148,7 @@ index 6b9701b..86084df 100644
u64 xstate_bv = xsave->header.xfeatures;
u64 valid;
-@@ -3087,7 +3089,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
+@@ -3090,7 +3092,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
static void load_xsave(struct kvm_vcpu *vcpu, u8 *src)
{
@@ -32245,7 +32157,7 @@ index 6b9701b..86084df 100644
u64 xstate_bv = *(u64 *)(src + XSAVE_HDR_OFFSET);
u64 valid;
-@@ -3131,7 +3133,7 @@ static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu,
+@@ -3134,7 +3136,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,
@@ -32254,7 +32166,7 @@ index 6b9701b..86084df 100644
sizeof(struct fxregs_state));
*(u64 *)&guest_xsave->region[XSAVE_HDR_OFFSET / sizeof(u32)] =
XFEATURE_MASK_FPSSE;
-@@ -3156,7 +3158,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
+@@ -3159,7 +3161,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
} else {
if (xstate_bv & ~XFEATURE_MASK_FPSSE)
return -EINVAL;
@@ -32263,7 +32175,7 @@ index 6b9701b..86084df 100644
guest_xsave->region, sizeof(struct fxregs_state));
}
return 0;
-@@ -6447,6 +6449,7 @@ void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
+@@ -6450,6 +6452,7 @@ void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
* exiting to the userspace. Otherwise, the value will be returned to the
* userspace.
*/
@@ -32271,7 +32183,7 @@ index 6b9701b..86084df 100644
static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
{
int r;
-@@ -6717,6 +6720,7 @@ out:
+@@ -6720,6 +6723,7 @@ out:
return r;
}
@@ -32279,7 +32191,7 @@ index 6b9701b..86084df 100644
static inline int vcpu_block(struct kvm *kvm, struct kvm_vcpu *vcpu)
{
if (!kvm_arch_vcpu_runnable(vcpu) &&
-@@ -7264,7 +7268,7 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
+@@ -7267,7 +7271,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 =
@@ -32288,7 +32200,7 @@ index 6b9701b..86084df 100644
memcpy(fpu->fpr, fxsave->st_space, 128);
fpu->fcw = fxsave->cwd;
-@@ -7281,7 +7285,7 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
+@@ -7284,7 +7288,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 =
@@ -32297,19 +32209,19 @@ index 6b9701b..86084df 100644
memcpy(fxsave->st_space, fpu->fpr, 128);
fxsave->cwd = fpu->fcw;
-@@ -7297,9 +7301,9 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
+@@ -7300,9 +7304,9 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
static void fx_init(struct kvm_vcpu *vcpu)
{
- fpstate_init(&vcpu->arch.guest_fpu.state);
+ fpstate_init(vcpu->arch.guest_fpu.state);
- if (cpu_has_xsaves)
+ if (boot_cpu_has(X86_FEATURE_XSAVES))
- vcpu->arch.guest_fpu.state.xsave.header.xcomp_bv =
+ vcpu->arch.guest_fpu.state->xsave.header.xcomp_bv =
host_xcr0 | XSTATE_COMPACTION_ENABLED;
/*
-@@ -7322,7 +7326,7 @@ void kvm_load_guest_fpu(struct kvm_vcpu *vcpu)
+@@ -7325,7 +7329,7 @@ void kvm_load_guest_fpu(struct kvm_vcpu *vcpu)
*/
vcpu->guest_fpu_loaded = 1;
__kernel_fpu_begin();
@@ -32318,7 +32230,7 @@ index 6b9701b..86084df 100644
trace_kvm_fpu(1);
}
-@@ -7624,6 +7628,8 @@ bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu)
+@@ -7627,6 +7631,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);
@@ -32327,7 +32239,7 @@ index 6b9701b..86084df 100644
int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
{
struct page *page;
-@@ -7641,11 +7647,14 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
+@@ -7644,11 +7650,14 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
else
vcpu->arch.mp_state = KVM_MP_STATE_UNINITIALIZED;
@@ -32346,7 +32258,7 @@ index 6b9701b..86084df 100644
vcpu->arch.pio_data = page_address(page);
kvm_set_tsc_khz(vcpu, max_tsc_khz);
-@@ -7703,6 +7712,9 @@ fail_mmu_destroy:
+@@ -7706,6 +7715,9 @@ fail_mmu_destroy:
kvm_mmu_destroy(vcpu);
fail_free_pio_data:
free_page((unsigned long)vcpu->arch.pio_data);
@@ -32356,7 +32268,7 @@ index 6b9701b..86084df 100644
fail:
return r;
}
-@@ -7721,6 +7733,8 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
+@@ -7724,6 +7736,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);
@@ -32366,7 +32278,7 @@ index 6b9701b..86084df 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 fd57d3a..7e9ec76 100644
+index 3847e73..39f5456 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)
@@ -34226,10 +34138,10 @@ index e0817a1..bc9cf66 100644
xor %eax,%eax
EXIT
diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S
-index be110ef..6728d71 100644
+index bf2c607..0e6d18b 100644
--- a/arch/x86/lib/rwsem.S
+++ b/arch/x86/lib/rwsem.S
-@@ -93,6 +93,7 @@ ENTRY(call_rwsem_down_read_failed)
+@@ -95,6 +95,7 @@ ENTRY(call_rwsem_down_read_failed)
__ASM_SIZE(pop,) %__ASM_REG(dx)
restore_common_regs
FRAME_END
@@ -34237,7 +34149,7 @@ index be110ef..6728d71 100644
ret
ENDPROC(call_rwsem_down_read_failed)
-@@ -103,6 +104,7 @@ ENTRY(call_rwsem_down_write_failed)
+@@ -105,6 +106,7 @@ ENTRY(call_rwsem_down_write_failed)
call rwsem_down_write_failed
restore_common_regs
FRAME_END
@@ -34245,7 +34157,7 @@ index be110ef..6728d71 100644
ret
ENDPROC(call_rwsem_down_write_failed)
-@@ -116,6 +118,7 @@ ENTRY(call_rwsem_wake)
+@@ -128,6 +130,7 @@ ENTRY(call_rwsem_wake)
call rwsem_wake
restore_common_regs
1: FRAME_END
@@ -34253,7 +34165,7 @@ index be110ef..6728d71 100644
ret
ENDPROC(call_rwsem_wake)
-@@ -128,5 +131,6 @@ ENTRY(call_rwsem_downgrade_wake)
+@@ -140,5 +143,6 @@ ENTRY(call_rwsem_downgrade_wake)
__ASM_SIZE(pop,) %__ASM_REG(dx)
restore_common_regs
FRAME_END
@@ -34261,7 +34173,7 @@ index be110ef..6728d71 100644
ret
ENDPROC(call_rwsem_downgrade_wake)
diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c
-index 91d93b9..4b22130 100644
+index b559d92..625a909 100644
--- a/arch/x86/lib/usercopy_32.c
+++ b/arch/x86/lib/usercopy_32.c
@@ -42,11 +42,13 @@ do { \
@@ -34759,7 +34671,7 @@ index 91d93b9..4b22130 100644
return n;
}
@@ -632,60 +743,38 @@ unsigned long __copy_from_user_ll_nocache_nozero(void *to, const void __user *fr
- if (n > 64 && cpu_has_xmm2)
+ if (n > 64 && static_cpu_has(X86_FEATURE_XMM2))
n = __copy_user_intel_nocache(to, from, n);
else
- __copy_user(to, from, n);
@@ -35047,10 +34959,10 @@ index 0054835..a3bd671 100644
void fconst(void)
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
-index f989132..7c590d6 100644
+index 62c0043..0fae532 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
-@@ -39,3 +39,6 @@ obj-$(CONFIG_NUMA_EMU) += numa_emulation.o
+@@ -38,3 +38,6 @@ obj-$(CONFIG_NUMA_EMU) += numa_emulation.o
obj-$(CONFIG_X86_INTEL_MPX) += mpx.o
obj-$(CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS) += pkeys.o
@@ -35155,17 +35067,18 @@ index 99bfb19..237fb1d 100644
} else {
walk_pud_level(m, &st, *start,
diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c
-index 82447b3..95c2b03 100644
+index 4bb53b8..7e79b52 100644
--- a/arch/x86/mm/extable.c
+++ b/arch/x86/mm/extable.c
-@@ -1,5 +1,6 @@
+@@ -1,6 +1,7 @@
#include <linux/module.h>
#include <asm/uaccess.h>
+ #include <asm/traps.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 *,
+@@ -8,12 +9,25 @@ typedef bool (*ex_handler_t)(const struct exception_table_entry *,
static inline unsigned long
ex_fixup_addr(const struct exception_table_entry *x)
{
@@ -35193,7 +35106,7 @@ index 82447b3..95c2b03 100644
}
bool ex_handler_default(const struct exception_table_entry *fixup,
-@@ -61,7 +75,7 @@ int fixup_exception(struct pt_regs *regs, int trapnr)
+@@ -99,7 +113,7 @@ int fixup_exception(struct pt_regs *regs, int trapnr)
ex_handler_t handler;
#ifdef CONFIG_PNPBIOS
@@ -35203,7 +35116,7 @@ index 82447b3..95c2b03 100644
extern u32 pnp_bios_is_utter_crap;
pnp_bios_is_utter_crap = 1;
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
-index 5ce1ed0..f713160 100644
+index 7d1fa7c..5c07d66 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -14,6 +14,8 @@
@@ -35288,7 +35201,7 @@ index 5ce1ed0..f713160 100644
@@ -294,10 +335,27 @@ void vmalloc_sync_all(void)
for (address = VMALLOC_START & PMD_MASK;
- address >= TASK_SIZE && address < FIXADDR_TOP;
+ address >= TASK_SIZE_MAX && address < FIXADDR_TOP;
address += PMD_SIZE) {
+
+#ifdef CONFIG_PAX_PER_CPU_PGD
@@ -35428,11 +35341,10 @@ index 5ce1ed0..f713160 100644
printk(KERN_ALERT "BUG: unable to handle kernel ");
if (address < PAGE_SIZE)
printk(KERN_CONT "NULL pointer dereference");
-@@ -854,6 +950,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
- return;
+@@ -855,6 +951,21 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
}
#endif
-+
+
+#if defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC)
+ if (pax_is_fetch_fault(regs, error_code, address)) {
+
@@ -35448,10 +35360,10 @@ index 5ce1ed0..f713160 100644
+ }
+#endif
+
- /* Kernel addresses are always protection faults: */
- if (address >= TASK_SIZE)
- error_code |= PF_PROT;
-@@ -961,7 +1073,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
+ /*
+ * To avoid leaking information about the kernel page table
+ * layout, pretend that user-mode accesses to kernel addresses
+@@ -966,7 +1077,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",
@@ -35460,7 +35372,7 @@ index 5ce1ed0..f713160 100644
code = BUS_MCEERR_AR;
}
#endif
-@@ -1020,6 +1132,109 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte)
+@@ -1025,6 +1136,109 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte)
return 1;
}
@@ -35570,7 +35482,7 @@ index 5ce1ed0..f713160 100644
/*
* Handle a spurious fault caused by a stale TLB entry.
*
-@@ -1107,6 +1322,10 @@ access_error(unsigned long error_code, struct vm_area_struct *vma)
+@@ -1112,6 +1326,10 @@ access_error(unsigned long error_code, struct vm_area_struct *vma)
{
/* This is only called for the current mm, so: */
bool foreign = false;
@@ -35581,7 +35493,7 @@ index 5ce1ed0..f713160 100644
/*
* 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,
+@@ -1183,6 +1401,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
tsk = current;
mm = tsk->mm;
@@ -35604,7 +35516,7 @@ index 5ce1ed0..f713160 100644
/*
* Detect and handle instructions that would cause a page fault for
* both a tracked kernel page and a userspace page.
-@@ -1304,6 +1539,11 @@ retry:
+@@ -1309,6 +1543,11 @@ retry:
might_sleep();
}
@@ -35616,7 +35528,7 @@ index 5ce1ed0..f713160 100644
vma = find_vma(mm, address);
if (unlikely(!vma)) {
bad_area(regs, error_code, address);
-@@ -1315,18 +1555,24 @@ retry:
+@@ -1320,18 +1559,24 @@ retry:
bad_area(regs, error_code, address);
return;
}
@@ -35652,7 +35564,7 @@ index 5ce1ed0..f713160 100644
if (unlikely(expand_stack(vma, address))) {
bad_area(regs, error_code, address);
return;
-@@ -1446,3 +1692,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code)
+@@ -1451,3 +1696,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code)
}
NOKPROBE_SYMBOL(trace_do_page_fault);
#endif /* CONFIG_TRACING */
@@ -35995,7 +35907,7 @@ index a6d7392..3b105a8 100644
return (void *)vaddr;
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
-index 740d7ac..4091827 100644
+index 2ae8584..e8f8f29 100644
--- a/arch/x86/mm/hugetlbpage.c
+++ b/arch/x86/mm/hugetlbpage.c
@@ -74,23 +74,24 @@ int pud_huge(pud_t pud)
@@ -36097,7 +36009,7 @@ index 740d7ac..4091827 100644
#endif /* CONFIG_HUGETLB_PAGE */
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
-index 9d56f27..0d15fff 100644
+index 372aad2..15d0667 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -4,6 +4,7 @@
@@ -36205,7 +36117,7 @@ index 9d56f27..0d15fff 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 bd7a9b9..f1dad0b 100644
+index 84df150..aacf18e 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);
@@ -36433,7 +36345,7 @@ index bd7a9b9..f1dad0b 100644
((unsigned long)&_etext - (unsigned long)&_text) >> 10);
/*
-@@ -871,7 +873,7 @@ static noinline int do_test_wp_bit(void)
+@@ -868,7 +870,7 @@ static noinline int do_test_wp_bit(void)
const int rodata_test_data = 0xC3;
EXPORT_SYMBOL_GPL(rodata_test_data);
@@ -36442,7 +36354,7 @@ index bd7a9b9..f1dad0b 100644
void set_kernel_text_rw(void)
{
-@@ -881,6 +883,7 @@ void set_kernel_text_rw(void)
+@@ -878,6 +880,7 @@ void set_kernel_text_rw(void)
if (!kernel_set_to_readonly)
return;
@@ -36450,7 +36362,7 @@ index bd7a9b9..f1dad0b 100644
pr_debug("Set kernel text: %lx - %lx for read write\n",
start, start+size);
-@@ -895,6 +898,7 @@ void set_kernel_text_ro(void)
+@@ -892,6 +895,7 @@ void set_kernel_text_ro(void)
if (!kernel_set_to_readonly)
return;
@@ -36458,7 +36370,7 @@ index bd7a9b9..f1dad0b 100644
pr_debug("Set kernel text: %lx - %lx for read only\n",
start, start+size);
-@@ -907,7 +911,7 @@ static void mark_nxdata_nx(void)
+@@ -904,7 +908,7 @@ static void mark_nxdata_nx(void)
* When this called, init has already been executed and released,
* so everything past _etext should be NX.
*/
@@ -36467,7 +36379,7 @@ index bd7a9b9..f1dad0b 100644
/*
* This comes from is_kernel_text upper limit. Also HPAGE where used:
*/
-@@ -923,26 +927,52 @@ void mark_rodata_ro(void)
+@@ -920,26 +924,52 @@ void mark_rodata_ro(void)
unsigned long start = PFN_ALIGN(_text);
unsigned long size = PFN_ALIGN(_etext) - start;
@@ -36529,10 +36441,10 @@ index bd7a9b9..f1dad0b 100644
#ifdef CONFIG_CPA_DEBUG
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
-index 214afda..7fd6c3f 100644
+index bce2e5d..2a2bf30 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
-@@ -138,7 +138,7 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page,
+@@ -66,7 +66,7 @@
* around without checking the pgd every time.
*/
@@ -36541,7 +36453,7 @@ index 214afda..7fd6c3f 100644
EXPORT_SYMBOL_GPL(__supported_pte_mask);
int force_personality32;
-@@ -171,7 +171,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -99,7 +99,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);
@@ -36554,7 +36466,7 @@ index 214afda..7fd6c3f 100644
/*
* When it is called after memory hot remove, pgd_none()
-@@ -182,6 +187,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -110,6 +115,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
continue;
spin_lock(&pgd_lock);
@@ -36580,7 +36492,7 @@ index 214afda..7fd6c3f 100644
list_for_each_entry(page, &pgd_list, lru) {
pgd_t *pgd;
spinlock_t *pgt_lock;
-@@ -190,6 +214,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -118,6 +142,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);
@@ -36588,7 +36500,7 @@ index 214afda..7fd6c3f 100644
if (!pgd_none(*pgd_ref) && !pgd_none(*pgd))
BUG_ON(pgd_page_vaddr(*pgd)
-@@ -203,7 +228,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -131,7 +156,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
set_pgd(pgd, *pgd_ref);
}
@@ -36599,7 +36511,7 @@ index 214afda..7fd6c3f 100644
}
spin_unlock(&pgd_lock);
}
-@@ -236,7 +264,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
+@@ -164,7 +192,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
{
if (pgd_none(*pgd)) {
pud_t *pud = (pud_t *)spp_getpage();
@@ -36608,7 +36520,7 @@ index 214afda..7fd6c3f 100644
if (pud != pud_offset(pgd, 0))
printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n",
pud, pud_offset(pgd, 0));
-@@ -248,7 +276,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
+@@ -176,7 +204,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
{
if (pud_none(*pud)) {
pmd_t *pmd = (pmd_t *) spp_getpage();
@@ -36617,7 +36529,7 @@ index 214afda..7fd6c3f 100644
if (pmd != pmd_offset(pud, 0))
printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n",
pmd, pmd_offset(pud, 0));
-@@ -277,7 +305,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte)
+@@ -205,7 +233,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);
@@ -36627,7 +36539,7 @@ index 214afda..7fd6c3f 100644
/*
* It's enough to flush this one mapping.
-@@ -339,14 +369,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size,
+@@ -267,14 +297,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();
@@ -36644,7 +36556,7 @@ index 214afda..7fd6c3f 100644
}
pmd = pmd_offset(pud, phys);
BUG_ON(!pmd_none(*pmd));
-@@ -587,7 +615,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
+@@ -515,7 +543,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
prot);
spin_lock(&init_mm.page_table_lock);
@@ -36653,7 +36565,7 @@ index 214afda..7fd6c3f 100644
spin_unlock(&init_mm.page_table_lock);
}
__flush_tlb_all();
-@@ -628,7 +656,7 @@ kernel_physical_mapping_init(unsigned long start,
+@@ -556,7 +584,7 @@ kernel_physical_mapping_init(unsigned long start,
page_size_mask);
spin_lock(&init_mm.page_table_lock);
@@ -36662,7 +36574,7 @@ index 214afda..7fd6c3f 100644
spin_unlock(&init_mm.page_table_lock);
pgd_changed = true;
}
-@@ -1078,7 +1106,7 @@ void __init mem_init(void)
+@@ -1006,7 +1034,7 @@ void __init mem_init(void)
const int rodata_test_data = 0xC3;
EXPORT_SYMBOL_GPL(rodata_test_data);
@@ -36671,7 +36583,7 @@ index 214afda..7fd6c3f 100644
void set_kernel_text_rw(void)
{
-@@ -1107,8 +1135,7 @@ void set_kernel_text_ro(void)
+@@ -1035,8 +1063,7 @@ void set_kernel_text_ro(void)
if (!kernel_set_to_readonly)
return;
@@ -36681,7 +36593,7 @@ index 214afda..7fd6c3f 100644
/*
* Set the kernel identity mapping for text RO.
-@@ -1119,18 +1146,23 @@ void set_kernel_text_ro(void)
+@@ -1047,18 +1074,23 @@ void set_kernel_text_ro(void)
void mark_rodata_ro(void)
{
unsigned long start = PFN_ALIGN(_text);
@@ -36709,7 +36621,7 @@ index 214afda..7fd6c3f 100644
/*
* The rodata/data/bss/brk section (but not the kernel text!)
* should also be not-executable.
-@@ -1156,12 +1188,54 @@ void mark_rodata_ro(void)
+@@ -1084,12 +1116,54 @@ void mark_rodata_ro(void)
set_memory_ro(start, (end-start) >> PAGE_SHIFT);
#endif
@@ -36781,7 +36693,7 @@ index 9c0ff04..9020d5f 100644
return (void *)vaddr;
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
-index 0d8d53d..74815a4 100644
+index f089491..467113c 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -59,8 +59,8 @@ static int __ioremap_check_ram(unsigned long start_pfn, unsigned long nr_pages,
@@ -37065,7 +36977,7 @@ index 8047687..6351be43 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 f70c1ff..fdb449c 100644
+index 9c086c5..421e25b 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
@@ -529,7 +529,7 @@ static void __init numa_clear_kernel_node_hotplug(void)
@@ -37078,7 +36990,7 @@ index f70c1ff..fdb449c 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 01be9ec..2b8c8c7 100644
+index 7a1f7bb..b245aea 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -258,7 +258,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
@@ -37171,7 +37083,7 @@ index 01be9ec..2b8c8c7 100644
unsigned long address)
{
struct page *base;
-@@ -1157,6 +1180,7 @@ static int __cpa_process_fault(struct cpa_data *cpa, unsigned long vaddr,
+@@ -1163,6 +1186,7 @@ static int __cpa_process_fault(struct cpa_data *cpa, unsigned long vaddr,
}
}
@@ -37179,7 +37091,7 @@ index 01be9ec..2b8c8c7 100644
static int __change_page_attr(struct cpa_data *cpa, int primary)
{
unsigned long address;
-@@ -1215,7 +1239,9 @@ repeat:
+@@ -1221,7 +1245,9 @@ repeat:
* Do we really change anything ?
*/
if (pte_val(old_pte) != pte_val(new_pte)) {
@@ -37190,10 +37102,10 @@ index 01be9ec..2b8c8c7 100644
}
cpa->numpages = 1;
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
-index faec01e..437ec71 100644
+index fb0604f..b9e0399 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
-@@ -589,7 +589,7 @@ int free_memtype(u64 start, u64 end)
+@@ -633,7 +633,7 @@ int free_memtype(u64 start, u64 end)
if (IS_ERR(entry)) {
pr_info("x86/PAT: %s:%d freeing invalid memtype [mem %#010Lx-%#010Lx]\n",
@@ -37202,7 +37114,7 @@ index faec01e..437ec71 100644
return -EINVAL;
}
-@@ -712,8 +712,8 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
+@@ -756,8 +756,8 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
while (cursor < to) {
if (!devmem_is_allowed(pfn)) {
@@ -37213,7 +37125,7 @@ index faec01e..437ec71 100644
return 0;
}
cursor += PAGE_SIZE;
-@@ -783,7 +783,7 @@ int kernel_map_sync_memtype(u64 base, unsigned long size,
+@@ -808,7 +808,7 @@ int kernel_map_sync_memtype(u64 base, unsigned long size,
if (ioremap_change_attr((unsigned long)__va(base), id_sz, pcm) < 0) {
pr_info("x86/PAT: %s:%d ioremap_change_attr failed %s for [mem %#010Lx-%#010Lx]\n",
@@ -37222,7 +37134,7 @@ index faec01e..437ec71 100644
cattr_name(pcm),
base, (unsigned long long)(base + size-1));
return -EINVAL;
-@@ -818,7 +818,7 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
+@@ -843,7 +843,7 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
pcm = lookup_memtype(paddr);
if (want_pcm != pcm) {
pr_warn("x86/PAT: %s:%d map pfn RAM range req %s for [mem %#010Lx-%#010Lx], got %s\n",
@@ -37231,7 +37143,7 @@ index faec01e..437ec71 100644
cattr_name(want_pcm),
(unsigned long long)paddr,
(unsigned long long)(paddr + size - 1),
-@@ -839,7 +839,7 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
+@@ -864,7 +864,7 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
!is_new_memtype_allowed(paddr, size, want_pcm, pcm)) {
free_memtype(paddr, paddr + size);
pr_err("x86/PAT: %s:%d map pfn expected mapping type %s for [mem %#010Lx-%#010Lx], got %s\n",
@@ -37303,7 +37215,7 @@ index 9f0614d..92ae64a 100644
p += get_opcode(p, &opcode);
for (i = 0; i < ARRAY_SIZE(imm_wop); i++)
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
-index 4eb287e..a021315 100644
+index aa0ff4b..be1aee7 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
@@ -98,10 +98,75 @@ static inline void pgd_list_del(pgd_t *pgd)
@@ -37718,10 +37630,10 @@ index f65a33f..f408a99 100644
}
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
-index fe9b9f7..35b4936e 100644
+index 5643fd0..3104402 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
-@@ -45,7 +45,11 @@ void leave_mm(int cpu)
+@@ -47,7 +47,11 @@ void leave_mm(int cpu)
BUG();
if (cpumask_test_cpu(cpu, mm_cpumask(active_mm))) {
cpumask_clear_cpu(cpu, mm_cpumask(active_mm));
@@ -37733,6 +37645,160 @@ index fe9b9f7..35b4936e 100644
/*
* This gets called in the idle path where RCU
* functions differently. Tracing normally
+@@ -61,6 +65,51 @@ EXPORT_SYMBOL_GPL(leave_mm);
+
+ #endif /* CONFIG_SMP */
+
++static void pax_switch_mm(struct mm_struct *next, unsigned int cpu)
++{
++
++#ifdef CONFIG_PAX_PER_CPU_PGD
++ pax_open_kernel();
++
++#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF))
++ __clone_user_pgds(get_cpu_pgd(cpu, user), next->pgd);
++ else
++#endif
++
++ __clone_user_pgds(get_cpu_pgd(cpu, kernel), next->pgd);
++
++ __shadow_user_pgds(get_cpu_pgd(cpu, kernel) + USER_PGD_PTRS, next->pgd);
++
++ pax_close_kernel();
++
++ BUG_ON((__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL) != (read_cr3() & __PHYSICAL_MASK) && (__pa(get_cpu_pgd(cpu, user)) | PCID_USER) != (read_cr3() & __PHYSICAL_MASK));
++
++#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
++ if (static_cpu_has(X86_FEATURE_PCIDUDEREF)) {
++ if (static_cpu_has(X86_FEATURE_INVPCID)) {
++ u64 descriptor[2];
++ descriptor[0] = PCID_USER;
++ asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_CONTEXT) : "memory");
++ if (!static_cpu_has(X86_FEATURE_STRONGUDEREF)) {
++ descriptor[0] = PCID_KERNEL;
++ asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_CONTEXT) : "memory");
++ }
++ } else {
++ write_cr3(__pa(get_cpu_pgd(cpu, user)) | PCID_USER);
++ if (static_cpu_has(X86_FEATURE_STRONGUDEREF))
++ write_cr3(__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL | PCID_NOFLUSH);
++ else
++ write_cr3(__pa(get_cpu_pgd(cpu, kernel)) | PCID_KERNEL);
++ }
++ } else
++#endif
++
++ load_cr3(get_cpu_pgd(cpu, kernel));
++#endif
++
++}
++
+ void switch_mm(struct mm_struct *prev, struct mm_struct *next,
+ struct task_struct *tsk)
+ {
+@@ -75,9 +124,15 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
+ struct task_struct *tsk)
+ {
+ unsigned cpu = smp_processor_id();
++#if defined(CONFIG_X86_32) && defined(CONFIG_SMP) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
++ int tlbstate = TLBSTATE_OK;
++#endif
+
+ if (likely(prev != next)) {
+ #ifdef CONFIG_SMP
++#if defined(CONFIG_X86_32) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
++ tlbstate = this_cpu_read(cpu_tlbstate.state);
++#endif
+ this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK);
+ this_cpu_write(cpu_tlbstate.active_mm, next);
+ #endif
+@@ -96,7 +151,7 @@ void switch_mm_irqs_off(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
+- * be sent, and CPU 0's TLB will contain a stale entry.)
++ * be sent, and CPU 1's TLB will contain a stale entry.)
+ *
+ * The bad outcome can occur if either CPU's load is
+ * reordered before that CPU's store, so both CPUs must
+@@ -111,7 +166,11 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
+ * ordering guarantee we need.
+ *
+ */
++#ifdef CONFIG_PAX_PER_CPU_PGD
++ pax_switch_mm(next, cpu);
++#else
+ load_cr3(next->pgd);
++#endif
+
+ trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
+
+@@ -137,9 +196,31 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
+ if (unlikely(prev->context.ldt != next->context.ldt))
+ load_mm_ldt(next);
+ #endif
++
++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC) && defined(CONFIG_SMP)
++ if (!(__supported_pte_mask & _PAGE_NX)) {
++ smp_mb__before_atomic();
++ cpumask_clear_cpu(cpu, &prev->context.cpu_user_cs_mask);
++ smp_mb__after_atomic();
++ cpumask_set_cpu(cpu, &next->context.cpu_user_cs_mask);
++ }
++#endif
++
++#if defined(CONFIG_X86_32) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
++ if (unlikely(prev->context.user_cs_base != next->context.user_cs_base ||
++ prev->context.user_cs_limit != next->context.user_cs_limit))
++ set_user_cs(next->context.user_cs_base, next->context.user_cs_limit, cpu);
++#ifdef CONFIG_SMP
++ else if (unlikely(tlbstate != TLBSTATE_OK))
++ set_user_cs(next->context.user_cs_base, next->context.user_cs_limit, cpu);
++#endif
++#endif
++
+ }
++ else {
++ pax_switch_mm(next, cpu);
++
+ #ifdef CONFIG_SMP
+- else {
+ this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK);
+ BUG_ON(this_cpu_read(cpu_tlbstate.active_mm) != next);
+
+@@ -160,13 +241,30 @@ void switch_mm_irqs_off(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.
+ */
++
++#ifndef CONFIG_PAX_PER_CPU_PGD
+ load_cr3(next->pgd);
+ trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
++#endif
++
+ load_mm_cr4(next);
+ load_mm_ldt(next);
++
++#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC)
++ if (!(__supported_pte_mask & _PAGE_NX))
++ cpumask_set_cpu(cpu, &next->context.cpu_user_cs_mask);
++#endif
++
++#if defined(CONFIG_X86_32) && (defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC))
++#ifdef CONFIG_PAX_PAGEEXEC
++ if (!((next->pax_flags & MF_PAX_PAGEEXEC) && (__supported_pte_mask & _PAGE_NX)))
++#endif
++ set_user_cs(next->context.user_cs_base, next->context.user_cs_limit, cpu);
++#endif
++
+ }
++#endif
+ }
+-#endif
+ }
+
+ #ifdef CONFIG_SMP
diff --git a/arch/x86/mm/uderef_64.c b/arch/x86/mm/uderef_64.c
new file mode 100644
index 0000000..3fda3f3
@@ -37866,7 +37932,7 @@ index f2a7faf..b77bb6c 100644
+ pax_force_retaddr
ret
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
-index 4286f36..54471fd 100644
+index fe04a04..99be1fa 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -14,7 +14,11 @@
@@ -37881,7 +37947,7 @@ index 4286f36..54471fd 100644
/*
* assembly code in arch/x86/net/bpf_jit.S
-@@ -176,7 +180,9 @@ static u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
+@@ -183,7 +187,9 @@ static u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
static void jit_fill_hole(void *area, unsigned int size)
{
/* fill whole space with int3 instructions */
@@ -37891,7 +37957,7 @@ index 4286f36..54471fd 100644
}
struct jit_context {
-@@ -1060,7 +1066,9 @@ common_load:
+@@ -1076,7 +1082,9 @@ common_load:
pr_err("bpf_jit_compile fatal error\n");
return -EFAULT;
}
@@ -37901,7 +37967,7 @@ index 4286f36..54471fd 100644
}
proglen += ilen;
addrs[i] = proglen;
-@@ -1137,7 +1145,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
+@@ -1169,7 +1177,6 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
if (image) {
bpf_flush_icache(header, image + proglen);
@@ -37909,7 +37975,7 @@ index 4286f36..54471fd 100644
prog->bpf_func = (void *)image;
prog->jited = 1;
}
-@@ -1150,12 +1157,8 @@ void bpf_jit_free(struct bpf_prog *fp)
+@@ -1188,12 +1195,8 @@ void bpf_jit_free(struct bpf_prog *fp)
unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
struct bpf_binary_header *header = (void *)addr;
@@ -37952,7 +38018,7 @@ index cb31a44..b942435 100644
return NULL;
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
-index 0e07e09..334d300 100644
+index 28c0412..568d0a4 100644
--- a/arch/x86/oprofile/nmi_int.c
+++ b/arch/x86/oprofile/nmi_int.c
@@ -23,6 +23,7 @@
@@ -38006,7 +38072,7 @@ index 660a83c..6ff762b 100644
return 0;
}
diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
-index d90528e..a44aa09 100644
+index 350f709..77882e0 100644
--- a/arch/x86/oprofile/op_model_ppro.c
+++ b/arch/x86/oprofile/op_model_ppro.c
@@ -19,6 +19,7 @@
@@ -38397,10 +38463,10 @@ index 338402b9..29ea50ab 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 49e4dd4..d714abf 100644
+index b226b3f..c9a3540 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
-@@ -93,6 +93,11 @@ pgd_t * __init efi_call_phys_prolog(void)
+@@ -91,6 +91,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));
}
@@ -38412,7 +38478,7 @@ index 49e4dd4..d714abf 100644
out:
__flush_tlb_all();
-@@ -120,6 +125,10 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
+@@ -118,6 +123,10 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
kfree(save_pgd);
@@ -38423,7 +38489,7 @@ index 49e4dd4..d714abf 100644
__flush_tlb_all();
early_code_mapping_set_exec(0);
}
-@@ -220,8 +229,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
+@@ -218,8 +227,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
unsigned npages;
pgd_t *pgd;
@@ -38578,21 +38644,21 @@ 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 92723ae..c9adfb7 100644
+index cd95075..a7b6d47 100644
--- a/arch/x86/platform/efi/efi_stub_64.S
+++ b/arch/x86/platform/efi/efi_stub_64.S
-@@ -12,6 +12,7 @@
+@@ -11,6 +11,7 @@
+ #include <asm/msr.h>
#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; \
-@@ -54,5 +55,6 @@ ENTRY(efi_call)
+@@ -53,5 +54,6 @@ ENTRY(efi_call)
addq $48, %rsp
RESTORE_XMM
- FRAME_END
+ popq %rbp
+ pax_force_retaddr 0, 1
ret
ENDPROC(efi_call)
@@ -39147,10 +39213,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 880862c..53dcb02 100644
+index 760789a..dbf5054 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
-@@ -132,8 +132,6 @@ EXPORT_SYMBOL_GPL(xen_start_info);
+@@ -131,8 +131,6 @@ EXPORT_SYMBOL_GPL(xen_start_info);
struct shared_info xen_dummy_shared_info;
@@ -39159,7 +39225,7 @@ index 880862c..53dcb02 100644
RESERVE_BRK(shared_info_page_brk, PAGE_SIZE);
__read_mostly int xen_have_vector_callback;
EXPORT_SYMBOL_GPL(xen_have_vector_callback);
-@@ -591,8 +589,7 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
+@@ -590,8 +588,7 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
{
unsigned long va = dtr->address;
unsigned int size = dtr->size + 1;
@@ -39169,7 +39235,7 @@ index 880862c..53dcb02 100644
int f;
/*
-@@ -640,8 +637,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr)
+@@ -639,8 +636,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr)
{
unsigned long va = dtr->address;
unsigned int size = dtr->size + 1;
@@ -39179,7 +39245,7 @@ index 880862c..53dcb02 100644
int f;
/*
-@@ -649,7 +645,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr)
+@@ -648,7 +644,7 @@ static void __init xen_load_gdt_boot(const struct desc_ptr *dtr)
* 8-byte entries, or 16 4k pages..
*/
@@ -39188,7 +39254,7 @@ index 880862c..53dcb02 100644
BUG_ON(va & ~PAGE_MASK);
for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
-@@ -778,7 +774,7 @@ static int cvt_gate_to_trap(int vector, const gate_desc *val,
+@@ -777,7 +773,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.
*/
@@ -39197,7 +39263,7 @@ index 880862c..53dcb02 100644
addr = (unsigned long)xen_debug;
else if (addr == (unsigned long)int3)
addr = (unsigned long)xen_int3;
-@@ -1263,7 +1259,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
+@@ -1283,7 +1279,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
.end_context_switch = xen_end_context_switch,
};
@@ -39206,7 +39272,7 @@ index 880862c..53dcb02 100644
{
struct sched_shutdown r = { .reason = reason };
int cpu;
-@@ -1271,26 +1267,26 @@ static void xen_reboot(int reason)
+@@ -1291,26 +1287,26 @@ static void xen_reboot(int reason)
for_each_online_cpu(cpu)
xen_pmu_finish(cpu);
@@ -39239,7 +39305,7 @@ index 880862c..53dcb02 100644
{
if (pm_power_off)
pm_power_off();
-@@ -1443,8 +1439,11 @@ static void __ref xen_setup_gdt(int cpu)
+@@ -1463,8 +1459,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;
@@ -39253,7 +39319,7 @@ index 880862c..53dcb02 100644
pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry;
pv_cpu_ops.load_gdt = xen_load_gdt;
-@@ -1561,7 +1560,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1583,7 +1582,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
__userpte_alloc_gfp &= ~__GFP_HIGHMEM;
/* Work out if we support NX */
@@ -39272,7 +39338,7 @@ index 880862c..53dcb02 100644
/* Get mfn list */
xen_build_dynamic_phys_to_machine();
-@@ -1589,13 +1598,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1611,13 +1620,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
machine_ops = xen_machine_ops;
@@ -39287,10 +39353,10 @@ index 880862c..53dcb02 100644
#ifdef CONFIG_ACPI_NUMA
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 478a2de..4f5e7b6 100644
+index 6743371..26347de 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)
+@@ -1939,7 +1939,14 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
* L3_k[511] -> level2_fixmap_pgt */
convert_pfn_mfn(level3_kernel_pgt);
@@ -39305,7 +39371,7 @@ index 478a2de..4f5e7b6 100644
convert_pfn_mfn(level2_fixmap_pgt);
}
/* We get [511][511] and have Xen's version of level2_kernel_pgt */
-@@ -1980,11 +1987,25 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
+@@ -1969,11 +1976,25 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
set_page_prot(init_level4_pgt, PAGE_KERNEL_RO);
set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO);
set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO);
@@ -39332,7 +39398,7 @@ index 478a2de..4f5e7b6 100644
/* Pin down new L4 */
pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,
-@@ -2395,6 +2416,7 @@ static void __init xen_post_allocator_init(void)
+@@ -2384,6 +2405,7 @@ static void __init xen_post_allocator_init(void)
pv_mmu_ops.set_pud = xen_set_pud;
#if CONFIG_PGTABLE_LEVELS == 4
pv_mmu_ops.set_pgd = xen_set_pgd;
@@ -39340,7 +39406,7 @@ index 478a2de..4f5e7b6 100644
#endif
/* This will work as long as patching hasn't happened yet
-@@ -2423,6 +2445,10 @@ static void xen_leave_lazy_mmu(void)
+@@ -2413,6 +2435,10 @@ static void xen_leave_lazy_mmu(void)
preempt_enable();
}
@@ -39351,7 +39417,7 @@ index 478a2de..4f5e7b6 100644
static const struct pv_mmu_ops xen_mmu_ops __initconst = {
.read_cr2 = xen_read_cr2,
.write_cr2 = xen_write_cr2,
-@@ -2435,7 +2461,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
+@@ -2425,7 +2451,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
.flush_tlb_single = xen_flush_tlb_single,
.flush_tlb_others = xen_flush_tlb_others,
@@ -39360,7 +39426,7 @@ index 478a2de..4f5e7b6 100644
.pgd_alloc = xen_pgd_alloc,
.pgd_free = xen_pgd_free,
-@@ -2472,6 +2498,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
+@@ -2462,6 +2488,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
.pud_val = PV_CALLEE_SAVE(xen_pud_val),
.make_pud = PV_CALLEE_SAVE(xen_make_pud),
.set_pgd = xen_set_pgd_hyper,
@@ -39509,10 +39575,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 807d25e..ac1e9e7 100644
+index 0e4aa42..a05fa6e 100644
--- a/block/bio.c
+++ b/block/bio.c
-@@ -1149,7 +1149,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
+@@ -1138,7 +1138,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
/*
* Overflow, abort
*/
@@ -39521,7 +39587,7 @@ index 807d25e..ac1e9e7 100644
return ERR_PTR(-EINVAL);
nr_pages += end - start;
-@@ -1274,7 +1274,7 @@ struct bio *bio_map_user_iov(struct request_queue *q,
+@@ -1263,7 +1263,7 @@ struct bio *bio_map_user_iov(struct request_queue *q,
/*
* Overflow, abort
*/
@@ -39711,7 +39777,7 @@ index 9f42526..fcc8648 100644
EXPORT_SYMBOL(blk_unregister_region);
diff --git a/block/partitions/efi.c b/block/partitions/efi.c
-index 26cb624..a49c3a5 100644
+index bcd86e5..fe457ef 100644
--- a/block/partitions/efi.c
+++ b/block/partitions/efi.c
@@ -293,14 +293,14 @@ static gpt_entry *alloc_read_gpt_entries(struct parsed_partitions *state,
@@ -40009,10 +40075,10 @@ index f71b756..b96847c 100644
#endif
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
-index 4361bc9..5d5306e 100644
+index c1d138e..fa32222f 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
-@@ -419,7 +419,7 @@ static int video_set_report_key_events(const struct dmi_system_id *id)
+@@ -406,7 +406,7 @@ static int video_set_report_key_events(const struct dmi_system_id *id)
return 0;
}
@@ -40106,7 +40172,7 @@ index 60746ef..02a1ddc 100644
do_div(period, (count + 1));
if (period > max_period) {
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
-index b719ab3..371e2a6 100644
+index ab23479..9aa32bf 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -75,7 +75,7 @@ MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
@@ -40136,29 +40202,36 @@ index 75f128e..72b03af 100644
bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj);
if (!bgrt_kobj)
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
-index 96809cd..6a49f979 100644
+index bdc67ba..a82756b 100644
--- a/drivers/acpi/blacklist.c
+++ b/drivers/acpi/blacklist.c
-@@ -47,7 +47,7 @@ struct acpi_blacklist_item {
+@@ -47,13 +47,13 @@ struct acpi_blacklist_item {
u32 is_critical_error;
};
--static struct dmi_system_id acpi_osi_dmi_table[] __initdata;
-+static const struct dmi_system_id acpi_osi_dmi_table[] __initconst;
+-static struct dmi_system_id acpi_rev_dmi_table[] __initdata;
++static const struct dmi_system_id acpi_rev_dmi_table[] __initconst;
/*
* POLICY: If *anything* doesn't work, put it on the blacklist.
-@@ -168,7 +168,7 @@ static int __init dmi_enable_rev_override(const struct dmi_system_id *d)
+ * If they are critical errors, mark it critical, and abort driver load.
+ */
+-static struct acpi_blacklist_item acpi_blacklist[] __initdata = {
++static const struct acpi_blacklist_item acpi_blacklist[] __initconst = {
+ /* Compaq Presario 1700 */
+ {"PTLTD ", " DSDT ", 0x06040000, ACPI_SIG_DSDT, less_than_or_equal,
+ "Multiple problems", 1},
+@@ -144,7 +144,7 @@ static int __init dmi_enable_rev_override(const struct dmi_system_id *d)
}
#endif
--static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
-+static const struct dmi_system_id acpi_osi_dmi_table[] __initconst = {
- {
- .callback = dmi_disable_osi_vista,
- .ident = "Fujitsu Siemens",
+-static struct dmi_system_id acpi_rev_dmi_table[] __initdata = {
++static const struct dmi_system_id acpi_rev_dmi_table[] __initconst = {
+ #ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
+ /*
+ * DELL XPS 13 (2015) switches sound between HDA and I2S
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
-index c068c82..7611bc1 100644
+index 262ca31..31a014f 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)
@@ -40224,20 +40297,20 @@ index 993fd31..cc15d14 100644
}
EXPORT_SYMBOL_GPL(acpi_dev_pm_attach);
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
-index b420fb4..b66c430 100644
+index 290d6f5..888bde8 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
-@@ -1503,7 +1503,7 @@ static int ec_clear_on_resume(const struct dmi_system_id *id)
+@@ -1536,7 +1536,7 @@ static int ec_correct_ecdt(const struct dmi_system_id *id)
return 0;
}
-static struct dmi_system_id ec_dmi_table[] __initdata = {
+static const struct dmi_system_id ec_dmi_table[] __initconst = {
{
- ec_skip_dsdt_scan, "Compal JFL92", {
- DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),
-@@ -1610,7 +1610,7 @@ error:
- return -ENODEV;
+ ec_correct_ecdt, "Asus L4R", {
+ DMI_MATCH(DMI_BIOS_VERSION, "1008.006"),
+@@ -1613,7 +1613,7 @@ error:
+ return ret;
}
-static int param_set_event_clearing(const char *val, struct kernel_param *kp)
@@ -40245,7 +40318,7 @@ index b420fb4..b66c430 100644
{
int result = 0;
-@@ -1628,7 +1628,7 @@ static int param_set_event_clearing(const char *val, struct kernel_param *kp)
+@@ -1631,7 +1631,7 @@ static int param_set_event_clearing(const char *val, struct kernel_param *kp)
return result;
}
@@ -40254,6 +40327,19 @@ index b420fb4..b66c430 100644
{
switch (ec_event_clearing) {
case ACPI_EC_EVT_TIMING_STATUS:
+diff --git a/drivers/acpi/osi.c b/drivers/acpi/osi.c
+index 849f9d2..c97dd81 100644
+--- a/drivers/acpi/osi.c
++++ b/drivers/acpi/osi.c
+@@ -318,7 +318,7 @@ static int __init dmi_disable_osi_win8(const struct dmi_system_id *d)
+ * Note that _OSI("Linux")/_OSI("Darwin") determined here can be overridden
+ * by acpi_osi=!Linux/acpi_osi=!Darwin command line options.
+ */
+-static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
++static const struct dmi_system_id acpi_osi_dmi_table[] __initconst = {
+ {
+ .callback = dmi_disable_osi_vista,
+ .ident = "Fujitsu Siemens",
diff --git a/drivers/acpi/pci_slot.c b/drivers/acpi/pci_slot.c
index 7188e53..6012bc4 100644
--- a/drivers/acpi/pci_slot.c
@@ -40294,10 +40380,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 2a8b596..90a329e 100644
+index 7a2e4d4..0de00c5 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
-@@ -149,7 +149,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
+@@ -154,7 +154,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
return 0;
}
@@ -40307,7 +40393,7 @@ index 2a8b596..90a329e 100644
.callback = init_old_suspend_ordering,
.ident = "Abit KN9 (nForce4 variant)",
diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
-index 0243d37..dcf52db 100644
+index 4b3a9e2..c80f3c2 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -227,7 +227,7 @@ module_param_cb(trace_method_name, &param_ops_trace_method, &trace_method_name,
@@ -40351,7 +40437,7 @@ index 0243d37..dcf52db 100644
static void delete_gpe_attr_array(void)
{
-@@ -777,13 +777,13 @@ static void __exit interrupt_stats_exit(void)
+@@ -776,13 +776,13 @@ static void __exit interrupt_stats_exit(void)
}
static ssize_t
@@ -40381,7 +40467,7 @@ index 82707f9..a6b19f5 100644
* Award BIOS on this AOpen makes thermal control almost worthless.
* http://bugzilla.kernel.org/show_bug.cgi?id=8842
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
-index 1316ddd..0f10a1d 100644
+index 3d13276..e4d0f31 100644
--- a/drivers/acpi/video_detect.c
+++ b/drivers/acpi/video_detect.c
@@ -41,7 +41,6 @@ ACPI_MODULE_NAME("video");
@@ -40426,10 +40512,10 @@ index 16288e7..91ab5f3 100644
int ret;
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
-index 55e257c..554c697 100644
+index 31c183a..f09c966 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
-@@ -103,7 +103,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
+@@ -104,7 +104,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
static void ata_dev_xfermask(struct ata_device *dev);
static unsigned long ata_dev_blacklisted(const struct ata_device *dev);
@@ -40438,7 +40524,7 @@ index 55e257c..554c697 100644
struct ata_force_param {
const char *name;
-@@ -4804,7 +4804,7 @@ void ata_qc_free(struct ata_queued_cmd *qc)
+@@ -4987,7 +4987,7 @@ void ata_qc_free(struct ata_queued_cmd *qc)
struct ata_port *ap;
unsigned int tag;
@@ -40447,7 +40533,7 @@ index 55e257c..554c697 100644
ap = qc->ap;
qc->flags = 0;
-@@ -4821,7 +4821,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc)
+@@ -5004,7 +5004,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc)
struct ata_port *ap;
struct ata_link *link;
@@ -40456,7 +40542,7 @@ index 55e257c..554c697 100644
WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
ap = qc->ap;
link = qc->dev->link;
-@@ -5928,6 +5928,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
+@@ -6111,6 +6111,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
return;
spin_lock(&lock);
@@ -40464,7 +40550,7 @@ index 55e257c..554c697 100644
for (cur = ops->inherits; cur; cur = cur->inherits) {
void **inherit = (void **)cur;
-@@ -5941,8 +5942,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
+@@ -6124,8 +6125,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
if (IS_ERR(*pp))
*pp = NULL;
@@ -40475,7 +40561,7 @@ index 55e257c..554c697 100644
spin_unlock(&lock);
}
-@@ -6138,7 +6140,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
+@@ -6321,7 +6323,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
/* give ports names and add SCSI hosts */
for (i = 0; i < host->n_ports; i++) {
@@ -40485,10 +40571,10 @@ index 55e257c..554c697 100644
}
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
-index 567859c..ffe7c75 100644
+index bfec66f..e3e9c6e 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)
+@@ -4673,7 +4673,7 @@ int ata_sas_port_init(struct ata_port *ap)
if (rc)
return rc;
@@ -40498,7 +40584,7 @@ index 567859c..ffe7c75 100644
}
EXPORT_SYMBOL_GPL(ata_sas_port_init);
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
-index f840ca1..edd6ef3 100644
+index 3b301a4..ff15676 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -53,7 +53,7 @@ enum {
@@ -40681,10 +40767,10 @@ index 6339efd..2b441d5 100644
dma_complete++;
}
diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c
-index a969a7e..f5c5cd8 100644
+index 85aaf22..8730d15 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)
+@@ -753,7 +753,7 @@ static void process_txdone_queue (struct fs_dev *dev, struct queue *q)
}
}
@@ -40693,7 +40779,7 @@ index a969a7e..f5c5cd8 100644
fs_dprintk (FS_DEBUG_TXMEM, "i");
fs_dprintk (FS_DEBUG_ALLOC, "Free t-skb: %p\n", skb);
-@@ -816,7 +816,7 @@ static void process_incoming (struct fs_dev *dev, struct queue *q)
+@@ -820,7 +820,7 @@ static void process_incoming (struct fs_dev *dev, struct queue *q)
#endif
skb_put (skb, qe->p1 & 0xffff);
ATM_SKB(skb)->vcc = atm_vcc;
@@ -40702,7 +40788,7 @@ index a969a7e..f5c5cd8 100644
__net_timestamp(skb);
fs_dprintk (FS_DEBUG_ALLOC, "Free rec-skb: %p (pushed)\n", skb);
atm_vcc->push (atm_vcc, skb);
-@@ -837,12 +837,12 @@ static void process_incoming (struct fs_dev *dev, struct queue *q)
+@@ -841,12 +841,12 @@ static void process_incoming (struct fs_dev *dev, struct queue *q)
kfree (pe);
}
if (atm_vcc)
@@ -41043,7 +41129,7 @@ index 074616b..d6b3d5f 100644
}
atomic_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc);
diff --git a/drivers/atm/iphase.c b/drivers/atm/iphase.c
-index 7d00f29..a9a6c74 100644
+index 809dd1e..ee10755 100644
--- a/drivers/atm/iphase.c
+++ b/drivers/atm/iphase.c
@@ -1146,7 +1146,7 @@ static int rx_pkt(struct atm_dev *dev)
@@ -41650,10 +41736,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 56705b5..4e938f5 100644
+index de23b64..7821200 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
-@@ -1841,8 +1841,10 @@ int genpd_dev_pm_attach(struct device *dev)
+@@ -1814,8 +1814,10 @@ int genpd_dev_pm_attach(struct device *dev)
goto out;
}
@@ -42114,7 +42200,7 @@ index 7a1cf7e..0330e12 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 fa20977..1285a70 100644
+index 2ba1494..e799369 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
@@ -42158,7 +42244,7 @@ index fa20977..1285a70 100644
idr_destroy(&connection->peer_devices);
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
-index 1fd1dcc..30ab091 100644
+index 0bac9c8..8b1cde594 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)
@@ -42172,7 +42258,7 @@ index 1fd1dcc..30ab091 100644
DEFINE_MUTEX(notification_mutex);
-@@ -4389,7 +4389,7 @@ void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib)
+@@ -4393,7 +4393,7 @@ void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib)
unsigned seq;
int err = -ENOMEM;
@@ -42181,7 +42267,7 @@ index 1fd1dcc..30ab091 100644
msg = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
if (!msg)
goto failed;
-@@ -4441,7 +4441,7 @@ void notify_resource_state(struct sk_buff *skb,
+@@ -4445,7 +4445,7 @@ void notify_resource_state(struct sk_buff *skb,
int err;
if (!skb) {
@@ -42190,7 +42276,7 @@ index 1fd1dcc..30ab091 100644
skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
err = -ENOMEM;
if (!skb)
-@@ -4492,7 +4492,7 @@ void notify_device_state(struct sk_buff *skb,
+@@ -4496,7 +4496,7 @@ void notify_device_state(struct sk_buff *skb,
int err;
if (!skb) {
@@ -42199,7 +42285,7 @@ index 1fd1dcc..30ab091 100644
skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
err = -ENOMEM;
if (!skb)
-@@ -4541,7 +4541,7 @@ void notify_connection_state(struct sk_buff *skb,
+@@ -4545,7 +4545,7 @@ void notify_connection_state(struct sk_buff *skb,
int err;
if (!skb) {
@@ -42208,7 +42294,7 @@ index 1fd1dcc..30ab091 100644
skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
err = -ENOMEM;
if (!skb)
-@@ -4591,7 +4591,7 @@ void notify_peer_device_state(struct sk_buff *skb,
+@@ -4595,7 +4595,7 @@ void notify_peer_device_state(struct sk_buff *skb,
int err;
if (!skb) {
@@ -42217,7 +42303,7 @@ index 1fd1dcc..30ab091 100644
skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
err = -ENOMEM;
if (!skb)
-@@ -4634,7 +4634,7 @@ void notify_helper(enum drbd_notification_type type,
+@@ -4638,7 +4638,7 @@ void notify_helper(enum drbd_notification_type type,
{
struct drbd_resource *resource = device ? device->resource : connection->resource;
struct drbd_helper_info helper_info;
@@ -42591,7 +42677,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 0ede6d7..9bc6529 100644
+index 81666a5..938f3bb 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -64,7 +64,7 @@
@@ -42768,7 +42854,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 3ec0766..bf9f1e9 100644
+index 601f64f..3958e475 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -17,7 +17,8 @@ config DEVMEM
@@ -42781,9 +42867,9 @@ index 3ec0766..bf9f1e9 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
-@@ -587,6 +588,7 @@ config DEVPORT
+@@ -585,6 +586,7 @@ config TELCLOCK
+ config DEVPORT
bool
- depends on !M68K
depends on ISA || PCI
+ depends on !GRKERNSEC_KMEM
default y
@@ -42912,7 +42998,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 1e25b52..9b8ee6a 100644
+index 7b1c412..0b41fca 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -302,7 +302,7 @@ struct smi_info {
@@ -42945,7 +43031,7 @@ index 1e25b52..9b8ee6a 100644
module_param_call(hotmod, hotmod_handler, NULL, NULL, 0200);
MODULE_PARM_DESC(hotmod, "Add and remove interfaces. See"
-@@ -1806,7 +1806,7 @@ static struct smi_info *smi_info_alloc(void)
+@@ -1819,7 +1819,7 @@ static struct smi_info *smi_info_alloc(void)
return info;
}
@@ -42954,7 +43040,7 @@ index 1e25b52..9b8ee6a 100644
{
char *str = kstrdup(val, GFP_KERNEL);
int rv;
-@@ -3626,7 +3626,7 @@ static int try_smi_init(struct smi_info *new_smi)
+@@ -3639,7 +3639,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++)
@@ -42964,7 +43050,7 @@ index 1e25b52..9b8ee6a 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 8b3be8b..c342470 100644
+index 097c868..f14f1d2 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -284,17 +284,17 @@ struct ssif_info {
@@ -43170,10 +43256,10 @@ index 678fa97..5598cef 100644
*ppos = i;
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
-index 22c2765..d92c8fa 100644
+index d28922d..3c343d6 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
-@@ -2340,7 +2340,7 @@ static void mgslpc_close(struct tty_struct *tty, struct file * filp)
+@@ -2333,7 +2333,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",
@@ -43182,7 +43268,7 @@ index 22c2765..d92c8fa 100644
if (tty_port_close_start(port, tty, filp) == 0)
goto cleanup;
-@@ -2358,7 +2358,7 @@ static void mgslpc_close(struct tty_struct *tty, struct file * filp)
+@@ -2351,7 +2351,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__,
@@ -43191,7 +43277,7 @@ index 22c2765..d92c8fa 100644
}
/* Wait until the transmitter is empty.
-@@ -2500,7 +2500,7 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp)
+@@ -2493,7 +2493,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",
@@ -43200,7 +43286,7 @@ index 22c2765..d92c8fa 100644
port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
-@@ -2511,11 +2511,11 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp)
+@@ -2504,11 +2504,11 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp)
goto cleanup;
}
spin_lock(&port->lock);
@@ -43214,7 +43300,7 @@ index 22c2765..d92c8fa 100644
/* 1st open on this device, init hardware */
retval = startup(info, tty);
if (retval < 0)
-@@ -3904,7 +3904,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
+@@ -3897,7 +3897,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
unsigned short new_crctype;
/* return error if TTY interface open */
@@ -43223,7 +43309,7 @@ index 22c2765..d92c8fa 100644
return -EBUSY;
switch (encoding)
-@@ -4008,7 +4008,7 @@ static int hdlcdev_open(struct net_device *dev)
+@@ -4001,7 +4001,7 @@ static int hdlcdev_open(struct net_device *dev)
/* arbitrate between network and tty opens */
spin_lock_irqsave(&info->netlock, flags);
@@ -43232,7 +43318,7 @@ index 22c2765..d92c8fa 100644
printk(KERN_WARNING "%s: hdlc_open returning busy\n", dev->name);
spin_unlock_irqrestore(&info->netlock, flags);
return -EBUSY;
-@@ -4098,7 +4098,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+@@ -4091,7 +4091,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 */
@@ -43242,10 +43328,10 @@ index 22c2765..d92c8fa 100644
if (cmd != SIOCWANDEV)
diff --git a/drivers/char/random.c b/drivers/char/random.c
-index b583e53..f3bb4ac 100644
+index 0158d3b..69116a2 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
-@@ -289,9 +289,6 @@
+@@ -290,9 +290,6 @@
/*
* To allow fractional bits to be tracked, the entropy_count field is
* denominated in units of 1/8th bits.
@@ -43255,7 +43341,7 @@ index b583e53..f3bb4ac 100644
*/
#define ENTROPY_SHIFT 3
#define ENTROPY_BITS(r) ((r)->entropy_count >> ENTROPY_SHIFT)
-@@ -442,9 +439,9 @@ struct entropy_store {
+@@ -443,9 +440,9 @@ struct entropy_store {
};
static void push_to_pool(struct work_struct *work);
@@ -43268,7 +43354,7 @@ index b583e53..f3bb4ac 100644
static struct entropy_store input_pool = {
.poolinfo = &poolinfo_table[0],
-@@ -654,7 +651,7 @@ retry:
+@@ -655,7 +652,7 @@ retry:
/* The +2 corresponds to the /4 in the denominator */
do {
@@ -43277,7 +43363,7 @@ index b583e53..f3bb4ac 100644
unsigned int add =
((pool_size - entropy_count)*anfrac*3) >> s;
-@@ -1227,7 +1224,7 @@ static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
+@@ -1228,7 +1225,7 @@ static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
extract_buf(r, tmp);
i = min_t(int, nbytes, EXTRACT_SIZE);
@@ -43286,7 +43372,7 @@ index b583e53..f3bb4ac 100644
ret = -EFAULT;
break;
}
-@@ -1668,7 +1665,7 @@ static char sysctl_bootid[16];
+@@ -1649,7 +1646,7 @@ static char sysctl_bootid[16];
static int proc_do_uuid(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -43295,7 +43381,7 @@ index b583e53..f3bb4ac 100644
unsigned char buf[64], tmp_uuid[16], *uuid;
uuid = table->data;
-@@ -1698,7 +1695,7 @@ static int proc_do_uuid(struct ctl_table *table, int write,
+@@ -1679,7 +1676,7 @@ static int proc_do_uuid(struct ctl_table *table, int write,
static int proc_do_entropy(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -43449,18 +43535,18 @@ 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 1f903e1f8..5f1b4cb 100644
+index 00269de..3e17e60 100644
--- a/drivers/clk/clk-composite.c
+++ b/drivers/clk/clk-composite.c
-@@ -194,7 +194,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name,
- struct clk *clk;
+@@ -221,7 +221,7 @@ struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name,
+ struct clk_hw *hw;
struct clk_init_data init;
struct clk_composite *composite;
- struct clk_ops *clk_composite_ops;
+ clk_ops_no_const *clk_composite_ops;
+ int ret;
composite = kzalloc(sizeof(*composite), GFP_KERNEL);
- if (!composite)
diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h
index aa872d2..afeae37 100644
--- a/drivers/clk/samsung/clk.h
@@ -43650,10 +43736,10 @@ index 5fcf247..446780a 100644
return 0;
}
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
-index fb57121..ff57f22 100644
+index 32a1505..586dac0 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
-@@ -658,8 +658,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
+@@ -697,8 +697,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
data->acpi_perf_cpu = cpu;
policy->driver_data = data;
@@ -43667,7 +43753,7 @@ index fb57121..ff57f22 100644
result = acpi_processor_register_performance(perf, cpu);
if (result)
-@@ -798,7 +801,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
+@@ -836,7 +839,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:
@@ -43678,7 +43764,7 @@ index fb57121..ff57f22 100644
break;
default:
break;
-@@ -892,8 +897,10 @@ static void __init acpi_cpufreq_boost_init(void)
+@@ -933,8 +938,10 @@ static void __init acpi_cpufreq_boost_init(void)
if (!msrs)
return;
@@ -43692,10 +43778,10 @@ index fb57121..ff57f22 100644
cpu_notifier_register_begin();
diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
-index 5f8dbe6..57754e5 100644
+index 3957de8..fe991bb 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
-@@ -368,7 +368,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev)
+@@ -366,7 +366,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev)
if (ret)
return ret;
@@ -43707,10 +43793,10 @@ index 5f8dbe6..57754e5 100644
ret = cpufreq_register_driver(&dt_cpufreq_driver);
if (ret)
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
-index c4acfc5..95ed094 100644
+index 5617c70..eef44db 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
-@@ -434,12 +434,12 @@ EXPORT_SYMBOL_GPL(cpufreq_freq_transition_end);
+@@ -511,12 +511,12 @@ EXPORT_SYMBOL_GPL(cpufreq_disable_fast_switch);
* SYSFS INTERFACE *
*********************************************************************/
static ssize_t show_boost(struct kobject *kobj,
@@ -43725,7 +43811,7 @@ index c4acfc5..95ed094 100644
const char *buf, size_t count)
{
int ret, enable;
-@@ -1999,7 +1999,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor)
+@@ -2103,7 +2103,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor)
read_unlock_irqrestore(&cpufreq_driver_lock, flags);
mutex_lock(&cpufreq_governor_mutex);
@@ -43734,7 +43820,7 @@ index c4acfc5..95ed094 100644
mutex_unlock(&cpufreq_governor_mutex);
return;
}
-@@ -2207,7 +2207,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb,
+@@ -2300,7 +2300,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
@@ -43743,7 +43829,7 @@ index c4acfc5..95ed094 100644
.notifier_call = cpufreq_cpu_callback,
};
-@@ -2250,13 +2250,17 @@ int cpufreq_boost_trigger_state(int state)
+@@ -2343,13 +2343,17 @@ int cpufreq_boost_trigger_state(int state)
return 0;
write_lock_irqsave(&cpufreq_driver_lock, flags);
@@ -43763,7 +43849,7 @@ index c4acfc5..95ed094 100644
write_unlock_irqrestore(&cpufreq_driver_lock, flags);
pr_err("%s: Cannot %s BOOST\n",
-@@ -2297,7 +2301,9 @@ int cpufreq_enable_boost_support(void)
+@@ -2390,7 +2394,9 @@ int cpufreq_enable_boost_support(void)
if (cpufreq_boost_supported())
return 0;
@@ -43774,7 +43860,7 @@ index c4acfc5..95ed094 100644
/* This will get removed on driver unregister */
return create_boost_sysfs_file();
-@@ -2354,8 +2360,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
+@@ -2447,8 +2453,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
cpufreq_driver = driver_data;
write_unlock_irqrestore(&cpufreq_driver_lock, flags);
@@ -43789,10 +43875,10 @@ index c4acfc5..95ed094 100644
if (cpufreq_boost_supported()) {
ret = create_boost_sysfs_file();
diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h
-index 61ff82f..ccc29a1 100644
+index 34eb214..7d41bf1 100644
--- a/drivers/cpufreq/cpufreq_governor.h
+++ b/drivers/cpufreq/cpufreq_governor.h
-@@ -176,7 +176,7 @@ static inline struct dbs_governor *dbs_governor_of(struct cpufreq_policy *policy
+@@ -152,7 +152,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);
@@ -43802,10 +43888,10 @@ index 61ff82f..ccc29a1 100644
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 acd8027..1d206c6 100644
+index 3001634..911f7d1 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
-@@ -410,7 +410,7 @@ static void od_start(struct cpufreq_policy *policy)
+@@ -415,7 +415,7 @@ static void od_start(struct cpufreq_policy *policy)
ondemand_powersave_bias_init(policy);
}
@@ -43814,7 +43900,7 @@ index acd8027..1d206c6 100644
.powersave_bias_target = generic_powersave_bias_target,
};
-@@ -471,14 +471,18 @@ void od_register_powersave_bias_handler(unsigned int (*f)
+@@ -476,14 +476,18 @@ void od_register_powersave_bias_handler(unsigned int (*f)
(struct cpufreq_policy *, unsigned int, unsigned int),
unsigned int powersave_bias)
{
@@ -43836,10 +43922,10 @@ index acd8027..1d206c6 100644
}
EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler);
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index b230eba..aeb6923 100644
+index 1fa1a32..0f3e23e 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
-@@ -249,13 +249,13 @@ struct pstate_funcs {
+@@ -276,13 +276,13 @@ struct pstate_funcs {
struct cpu_defaults {
struct pstate_adjust_policy pid_policy;
struct pstate_funcs funcs;
@@ -43854,8 +43940,8 @@ index b230eba..aeb6923 100644
+static struct pstate_funcs *pstate_funcs;
static int hwp_active;
-
-@@ -521,13 +521,13 @@ static void __init intel_pstate_debug_expose_params(void)
+ #ifdef CONFIG_ACPI
+@@ -651,13 +651,13 @@ static void __init intel_pstate_debug_expose_params(void)
/************************** sysfs begin ************************/
#define show_one(file_name, object) \
static ssize_t show_##file_name \
@@ -43871,7 +43957,7 @@ index b230eba..aeb6923 100644
{
struct cpudata *cpu;
int total, no_turbo, turbo_pct;
-@@ -543,7 +543,7 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
+@@ -673,7 +673,7 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
}
static ssize_t show_num_pstates(struct kobject *kobj,
@@ -43880,7 +43966,7 @@ index b230eba..aeb6923 100644
{
struct cpudata *cpu;
int total;
-@@ -554,7 +554,7 @@ static ssize_t show_num_pstates(struct kobject *kobj,
+@@ -684,7 +684,7 @@ static ssize_t show_num_pstates(struct kobject *kobj,
}
static ssize_t show_no_turbo(struct kobject *kobj,
@@ -43889,7 +43975,7 @@ index b230eba..aeb6923 100644
{
ssize_t ret;
-@@ -567,7 +567,7 @@ static ssize_t show_no_turbo(struct kobject *kobj,
+@@ -697,7 +697,7 @@ static ssize_t show_no_turbo(struct kobject *kobj,
return ret;
}
@@ -43898,7 +43984,7 @@ index b230eba..aeb6923 100644
const char *buf, size_t count)
{
unsigned int input;
-@@ -591,7 +591,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
+@@ -721,7 +721,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
return count;
}
@@ -43907,7 +43993,7 @@ index b230eba..aeb6923 100644
const char *buf, size_t count)
{
unsigned int input;
-@@ -616,7 +616,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
+@@ -745,7 +745,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
return count;
}
@@ -43916,7 +44002,7 @@ index b230eba..aeb6923 100644
const char *buf, size_t count)
{
unsigned int input;
-@@ -1002,19 +1002,19 @@ static void intel_pstate_set_min_pstate(struct cpudata *cpu)
+@@ -1130,19 +1130,19 @@ static void intel_pstate_set_min_pstate(struct cpudata *cpu)
* right CPU.
*/
wrmsrl_on_cpu(cpu->cpu, MSR_IA32_PERF_CTL,
@@ -43944,7 +44030,7 @@ index b230eba..aeb6923 100644
intel_pstate_set_min_pstate(cpu);
}
-@@ -1164,7 +1164,7 @@ static inline void intel_pstate_update_pstate(struct cpudata *cpu, int pstate)
+@@ -1287,7 +1287,7 @@ static inline void intel_pstate_update_pstate(struct cpudata *cpu, int pstate)
return;
intel_pstate_record_pstate(cpu, pstate);
@@ -43953,7 +44039,7 @@ index b230eba..aeb6923 100644
}
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)
+@@ -1297,7 +1297,7 @@ static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu)
from = cpu->pstate.current_pstate;
@@ -43962,7 +44048,7 @@ index b230eba..aeb6923 100644
intel_pstate_update_pstate(cpu, target_pstate);
-@@ -1434,15 +1434,15 @@ static unsigned int force_load;
+@@ -1582,15 +1582,15 @@ static unsigned int force_load;
static int intel_pstate_msrs_not_valid(void)
{
@@ -43982,7 +44068,7 @@ index b230eba..aeb6923 100644
{
pid_params.sample_rate_ms = policy->sample_rate_ms;
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)
+@@ -1603,15 +1603,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
static void copy_cpu_funcs(struct pstate_funcs *funcs)
{
@@ -43998,12 +44084,12 @@ index b230eba..aeb6923 100644
+ pstate_funcs = funcs;
}
- #if IS_ENABLED(CONFIG_ACPI)
+ #ifdef CONFIG_ACPI
diff --git a/drivers/cpufreq/p4-clockmod.c b/drivers/cpufreq/p4-clockmod.c
-index 5dd95da..ac41e5e 100644
+index fd77812..97e3efe 100644
--- a/drivers/cpufreq/p4-clockmod.c
+++ b/drivers/cpufreq/p4-clockmod.c
-@@ -134,10 +134,14 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
+@@ -130,10 +130,14 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
case 0x0F: /* Core Duo */
case 0x16: /* Celeron Core */
case 0x1C: /* Atom */
@@ -44020,7 +44106,7 @@ index 5dd95da..ac41e5e 100644
/* fall through */
case 0x09: /* Pentium M (Banias) */
return speedstep_get_frequency(SPEEDSTEP_CPU_PM);
-@@ -149,7 +153,9 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
+@@ -145,7 +149,9 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
/* on P-4s, the TSC runs with constant frequency independent whether
* throttling is active or not. */
@@ -44030,7 +44116,7 @@ index 5dd95da..ac41e5e 100644
+ pax_close_kernel();
if (speedstep_detect_processor() == SPEEDSTEP_CPU_P4M) {
- printk(KERN_WARNING PFX "Warning: Pentium 4-M detected. "
+ pr_warn("Warning: Pentium 4-M detected. The speedstep-ich or acpi cpufreq modules offer voltage scaling in addition of frequency scaling. You should use either one instead of p4-clockmod, if possible.\n");
diff --git a/drivers/cpufreq/sparc-us3-cpufreq.c b/drivers/cpufreq/sparc-us3-cpufreq.c
index 9bb42ba..b01b4a2 100644
--- a/drivers/cpufreq/sparc-us3-cpufreq.c
@@ -44142,10 +44228,10 @@ index 9bb42ba..b01b4a2 100644
MODULE_AUTHOR("David S. Miller <davem@redhat.com>");
diff --git a/drivers/cpufreq/speedstep-centrino.c b/drivers/cpufreq/speedstep-centrino.c
-index 7d4a315..ce41fb3 100644
+index 41bc539..e46a74d 100644
--- a/drivers/cpufreq/speedstep-centrino.c
+++ b/drivers/cpufreq/speedstep-centrino.c
-@@ -351,8 +351,11 @@ static int centrino_cpu_init(struct cpufreq_policy *policy)
+@@ -352,8 +352,11 @@ static int centrino_cpu_init(struct cpufreq_policy *policy)
!cpu_has(cpu, X86_FEATURE_EST))
return -ENODEV;
@@ -44279,7 +44365,7 @@ index b40d9c8..dcbcd94 100644
struct adf_accel_dev *accel_dev = adf_devmgr_pci_to_accel_dev(pdev);
diff --git a/drivers/crypto/qat/qat_common/adf_sriov.c b/drivers/crypto/qat/qat_common/adf_sriov.c
-index 38a0415..fc27277 100644
+index 4a526e2..6b28829 100644
--- a/drivers/crypto/qat/qat_common/adf_sriov.c
+++ b/drivers/crypto/qat/qat_common/adf_sriov.c
@@ -93,7 +93,7 @@ static void adf_iov_send_resp(struct work_struct *work)
@@ -44301,11 +44387,11 @@ index 38a0415..fc27277 100644
mutex_init(&vf_info->pf2vf_lock);
ratelimit_state_init(&vf_info->vf2pf_ratelimit,
diff --git a/drivers/crypto/qat/qat_common/adf_vf_isr.c b/drivers/crypto/qat/qat_common/adf_vf_isr.c
-index 09427b3..50f7306 100644
+index aa689ca..5cd8360 100644
--- a/drivers/crypto/qat/qat_common/adf_vf_isr.c
+++ b/drivers/crypto/qat/qat_common/adf_vf_isr.c
-@@ -90,9 +90,9 @@ static void adf_disable_msi(struct adf_accel_dev *accel_dev)
- pci_disable_msi(pdev);
+@@ -112,9 +112,9 @@ static void adf_dev_stop_async(struct work_struct *work)
+ kfree(stop_data);
}
-static void adf_pf2vf_bh_handler(void *data)
@@ -44316,7 +44402,7 @@ index 09427b3..50f7306 100644
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
struct adf_bar *pmisc =
&GET_BARS(accel_dev)[hw_data->get_misc_bar_id(hw_data)];
-@@ -143,7 +143,7 @@ err:
+@@ -183,7 +183,7 @@ err:
static int adf_setup_pf2vf_bh(struct adf_accel_dev *accel_dev)
{
tasklet_init(&accel_dev->vf.pf2vf_bh_tasklet,
@@ -44326,10 +44412,10 @@ index 09427b3..50f7306 100644
mutex_init(&accel_dev->vf.vf2pf_lock);
return 0;
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
-index 984c5e9..c873659 100644
+index e92418f..8ba37fb 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
-@@ -717,7 +717,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
+@@ -800,7 +800,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
goto err_out;
}
@@ -44338,7 +44424,7 @@ index 984c5e9..c873659 100644
list_for_each_entry(devfreq, &devfreq_list, node) {
int ret = 0;
-@@ -805,7 +805,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor)
+@@ -888,7 +888,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor)
}
}
@@ -44347,11 +44433,24 @@ index 984c5e9..c873659 100644
err_out:
mutex_unlock(&devfreq_list_lock);
+diff --git a/drivers/devfreq/governor_passive.c b/drivers/devfreq/governor_passive.c
+index 9ef46e2..775fc75 100644
+--- a/drivers/devfreq/governor_passive.c
++++ b/drivers/devfreq/governor_passive.c
+@@ -151,7 +151,7 @@ static int devfreq_passive_event_handler(struct devfreq *devfreq,
+ struct devfreq_passive_data *p_data
+ = (struct devfreq_passive_data *)devfreq->data;
+ struct devfreq *parent = (struct devfreq *)p_data->parent;
+- struct notifier_block *nb = &p_data->nb;
++ notifier_block_no_const *nb = &p_data->nb;
+ int ret = 0;
+
+ if (!parent)
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
-index 4a2c07e..8f4b1cc 100644
+index 6355ab3..0f2a459 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
-@@ -880,10 +880,9 @@ static int dma_buf_describe(struct seq_file *s)
+@@ -881,10 +881,9 @@ static int dma_buf_describe(struct seq_file *s)
static int dma_buf_show(struct seq_file *s, void *unused)
{
@@ -44364,6 +44463,19 @@ index 4a2c07e..8f4b1cc 100644
}
static int dma_buf_debug_open(struct inode *inode, struct file *file)
+diff --git a/drivers/dma/qcom/hidma.c b/drivers/dma/qcom/hidma.c
+index 41b5c6d..644f4ea 100644
+--- a/drivers/dma/qcom/hidma.c
++++ b/drivers/dma/qcom/hidma.c
+@@ -547,7 +547,7 @@ static ssize_t hidma_show_values(struct device *dev,
+ static int hidma_create_sysfs_entry(struct hidma_dev *dev, char *name,
+ int mode)
+ {
+- struct device_attribute *attrs;
++ device_attribute_no_const *attrs;
+ char *name_copy;
+
+ attrs = devm_kmalloc(dev->ddev.dev, sizeof(struct device_attribute),
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
@@ -44435,7 +44547,7 @@ index 93da1a4..5e2c149 100644
goto err_out;
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
-index 26e65ab..9a1e25d 100644
+index 10c305b..4e92041 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -50,7 +50,7 @@ int edac_mc_get_poll_msec(void)
@@ -44803,10 +44915,10 @@ 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 3a69ed5..0cfea9c6 100644
+index 05509f3..498c7ec 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 = {
+@@ -177,15 +177,17 @@ static struct attribute_group efi_subsys_attr_group = {
};
static struct efivars generic_efivars;
@@ -44831,7 +44943,7 @@ index 3a69ed5..0cfea9c6 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 096adcb..0235592 100644
+index 116b244..b16d9f2 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)
@@ -44843,6 +44955,19 @@ index 096adcb..0235592 100644
int error;
/* new_var */
+diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
+index c069451..fca41b6 100644
+--- a/drivers/firmware/efi/libstub/Makefile
++++ b/drivers/firmware/efi/libstub/Makefile
+@@ -20,6 +20,8 @@ KBUILD_CFLAGS := $(cflags-y) -DDISABLE_BRANCH_PROFILING \
+ $(call cc-option,-ffreestanding) \
+ $(call cc-option,-fno-stack-protector)
+
++KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS))
++
+ GCOV_PROFILE := n
+ KASAN_SANITIZE := n
+ UBSAN_SANITIZE := n
diff --git a/drivers/firmware/efi/runtime-map.c b/drivers/firmware/efi/runtime-map.c
index 5c55227..97f4978 100644
--- a/drivers/firmware/efi/runtime-map.c
@@ -44908,7 +45033,7 @@ 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 b5d0580..893aa47 100644
+index 03e0458..4a13085 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
@@ -58,7 +58,7 @@ bool psci_tos_resident_on(int cpu)
@@ -44996,10 +45121,10 @@ index 425501c..cad19ba 100644
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 551dfa9..fc6ca83 100644
+index b98ede7..c83e860 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
-@@ -1068,7 +1068,7 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)
+@@ -1029,7 +1029,7 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)
writel_relaxed(0, base + bank->regs->ctrl);
}
@@ -45008,7 +45133,7 @@ index 551dfa9..fc6ca83 100644
{
static int gpio;
int irq_base = 0;
-@@ -1158,7 +1158,7 @@ static int omap_gpio_probe(struct platform_device *pdev)
+@@ -1119,7 +1119,7 @@ static int omap_gpio_probe(struct platform_device *pdev)
const struct omap_gpio_platform_data *pdata;
struct resource *res;
struct gpio_bank *bank;
@@ -45018,10 +45143,10 @@ index 551dfa9..fc6ca83 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 4d9a315c..b1fed42 100644
+index 681c93f..143a923 100644
--- a/drivers/gpio/gpio-rcar.c
+++ b/drivers/gpio/gpio-rcar.c
-@@ -369,7 +369,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
+@@ -388,7 +388,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
struct gpio_rcar_priv *p;
struct resource *io, *irq;
struct gpio_chip *gpio_chip;
@@ -45044,10 +45169,10 @@ index ac8deb0..f3caa10 100644
return -EINVAL;
}
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
-index 996a733..742b84f 100644
+index be74bd3..76e7fc2 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
-@@ -1031,8 +1031,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
+@@ -1059,8 +1059,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
}
if (gpiochip->irqchip) {
@@ -45060,7 +45185,7 @@ index 996a733..742b84f 100644
gpiochip->irqchip = NULL;
}
}
-@@ -1109,8 +1111,10 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
+@@ -1137,8 +1139,10 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
*/
if (!irqchip->irq_request_resources &&
!irqchip->irq_release_resources) {
@@ -45074,10 +45199,10 @@ index 996a733..742b84f 100644
/*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index 1bcbade..c8d5713 100644
+index e055d5be..45982ec 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -1709,7 +1709,7 @@ void amdgpu_debugfs_cleanup(struct drm_minor *minor);
+@@ -1771,7 +1771,7 @@ void amdgpu_debugfs_cleanup(struct drm_minor *minor);
* amdgpu smumgr functions
*/
struct amdgpu_smumgr_funcs {
@@ -45086,15 +45211,6 @@ index 1bcbade..c8d5713 100644
int (*request_smu_load_fw)(struct amdgpu_device *adev);
int (*request_smu_specific_fw)(struct amdgpu_device *adev, uint32_t fwtype);
};
-@@ -2339,7 +2339,7 @@ static inline void amdgpu_unregister_atpx_handler(void) {}
- * KMS
- */
- extern const struct drm_ioctl_desc amdgpu_ioctls_kms[];
--extern int amdgpu_max_kms_ioctl;
-+extern const int amdgpu_max_kms_ioctl;
-
- 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 35a1248..fd2510a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
@@ -45109,10 +45225,10 @@ index 35a1248..fd2510a 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 3e21732..21fc524 100644
+index cf6f49f..dffb8ab 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
-@@ -1076,49 +1076,49 @@ int amdgpu_cgs_call_acpi_method(void *cgs_device,
+@@ -1105,50 +1105,50 @@ int amdgpu_cgs_call_acpi_method(struct cgs_device *cgs_device,
}
static const struct cgs_ops amdgpu_cgs_ops = {
@@ -45147,6 +45263,7 @@ index 3e21732..21fc524 100644
- amdgpu_cgs_pm_query_clock_limits,
- amdgpu_cgs_set_camera_voltages,
- amdgpu_cgs_get_firmware_info,
+- amdgpu_cgs_rel_firmware,
- amdgpu_cgs_set_powergating_state,
- amdgpu_cgs_set_clockgating_state,
- amdgpu_cgs_get_active_displays_info,
@@ -45184,6 +45301,7 @@ index 3e21732..21fc524 100644
+ .pm_query_clock_limits = amdgpu_cgs_pm_query_clock_limits,
+ .set_camera_voltages = amdgpu_cgs_set_camera_voltages,
+ .get_firmware_info = amdgpu_cgs_get_firmware_info,
++ .rel_firmware = amdgpu_cgs_rel_firmware,
+ .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,
@@ -45201,9 +45319,9 @@ index 3e21732..21fc524 100644
+ .irq_put = amdgpu_cgs_irq_put
};
- void *amdgpu_cgs_create_device(struct amdgpu_device *adev)
+ struct cgs_device *amdgpu_cgs_create_device(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
-index 7ef2c13..dff07e5 100644
+index cb07da4..e7cd288 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -701,7 +701,7 @@ static int amdgpu_connector_lvds_get_modes(struct drm_connector *connector)
@@ -45243,7 +45361,7 @@ 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 2139da7..222ef8b 100644
+index 6e92008..6051afc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1054,7 +1054,7 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
@@ -45256,10 +45374,10 @@ index 2139da7..222ef8b 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 f1e17d6..e7d750a 100644
+index f888c01..7cf5bfe 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-@@ -491,7 +491,7 @@ static struct drm_driver kms_driver = {
+@@ -515,7 +515,7 @@ static struct drm_driver kms_driver = {
.driver_features =
DRIVER_USE_AGP |
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
@@ -45268,7 +45386,7 @@ index f1e17d6..e7d750a 100644
.dev_priv_size = 0,
.load = amdgpu_driver_load_kms,
.open = amdgpu_driver_open_kms,
-@@ -542,9 +542,6 @@ static struct drm_driver kms_driver = {
+@@ -566,9 +566,6 @@ static struct drm_driver kms_driver = {
.patchlevel = KMS_DRIVER_PATCHLEVEL,
};
@@ -45278,9 +45396,9 @@ index f1e17d6..e7d750a 100644
static struct pci_driver amdgpu_kms_pci_driver = {
.name = DRIVER_NAME,
.id_table = pciidlist,
-@@ -563,20 +560,21 @@ static int __init amdgpu_init(void)
+@@ -588,19 +585,20 @@ static int __init amdgpu_init(void)
+ return -EINVAL;
}
- #endif
DRM_INFO("amdgpu kernel modesetting enabled.\n");
- driver = &kms_driver;
- pdriver = &amdgpu_kms_pci_driver;
@@ -45292,7 +45410,6 @@ index f1e17d6..e7d750a 100644
+ pax_close_kernel();
+
amdgpu_register_atpx_handler();
-
/* let modprobe override vga console setting */
- return drm_pci_init(driver, pdriver);
+ return drm_pci_init(&kms_driver, &amdgpu_kms_pci_driver);
@@ -45305,17 +45422,43 @@ index f1e17d6..e7d750a 100644
+ drm_pci_exit(&kms_driver, &amdgpu_kms_pci_driver);
amdgpu_unregister_atpx_handler();
amdgpu_sync_fini();
+ amdgpu_fence_slab_fini();
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+index 870f949..4a61ca8 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+@@ -414,7 +414,12 @@ static int amdgpu_debugfs_ring_info(struct seq_file *m, void *data)
+ return 0;
}
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
-index d78739d..64027ae 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
-@@ -756,4 +756,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);
+
+-static struct drm_info_list amdgpu_debugfs_ring_info_list[AMDGPU_MAX_RINGS];
++static drm_info_list_no_const amdgpu_debugfs_ring_info_list[AMDGPU_MAX_RINGS] __read_only = {
++ [0 ... AMDGPU_MAX_RINGS - 1] = {
++ .show = amdgpu_debugfs_ring_info,
++ .driver_features = 0,
++ }
++};
+ static char amdgpu_debugfs_ring_names[AMDGPU_MAX_RINGS][32];
+
+ #endif
+@@ -425,7 +430,7 @@ static int amdgpu_debugfs_ring_init(struct amdgpu_device *adev,
+ #if defined(CONFIG_DEBUG_FS)
+ unsigned offset = (uint8_t*)ring - (uint8_t*)adev;
+ unsigned i;
+- struct drm_info_list *info;
++ drm_info_list_no_const *info;
+ char *name;
+
+ for (i = 0; i < ARRAY_SIZE(amdgpu_debugfs_ring_info_list); ++i) {
+@@ -440,8 +445,6 @@ static int amdgpu_debugfs_ring_init(struct amdgpu_device *adev,
+ name = &amdgpu_debugfs_ring_names[i][0];
+ sprintf(name, "amdgpu_ring_%s", ring->name);
+ info->name = name;
+- info->show = amdgpu_debugfs_ring_info;
+- info->driver_features = 0;
+ info->data = (void*)(uintptr_t)offset;
+
+ return amdgpu_debugfs_add_files(adev, info, 1);
diff --git a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c
index b336c91..c015ca7 100644
--- a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c
@@ -45383,10 +45526,10 @@ index 083893d..d4f66f5 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 07ac724..1c4ca38 100644
+index ee3e04e..65f7436 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,
+@@ -418,7 +418,7 @@ static int kfd_ioctl_set_memory_policy(struct file *filep,
(args->alternate_policy == KFD_IOC_CACHE_POLICY_COHERENT)
? cache_policy_coherent : cache_policy_noncoherent;
@@ -45427,7 +45570,7 @@ index 3f95f7c..0a62dad 100644
return 0;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
-index 4bb7f42..320fcac 100644
+index f49c551..ad74c7e 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -242,7 +242,7 @@ static int create_compute_queue_nocpsch(struct device_queue_manager *dqm,
@@ -45740,7 +45883,7 @@ index 7f134aa..cd34d4a 100644
if (!interrupt_ring)
return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
-index 8fa8941..5ae07df 100644
+index 9beae87..1fe9326 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
@@ -56,7 +56,7 @@ static bool initialize(struct kernel_queue *kq, struct kfd_dev *dev,
@@ -45840,12 +45983,12 @@ index 7b69070..d7bd78b 100644
if (retval != 0)
return retval;
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_clockpowergating.c b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_clockpowergating.c
-index ff08ce4..5b8758f 100644
+index 436fc16..7282298 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_clockpowergating.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_clockpowergating.c
@@ -239,10 +239,16 @@ int cz_dpm_powergate_vce(struct pp_hwmgr *hwmgr, bool bgate)
- static struct phm_master_table_item cz_enable_clock_power_gatings_list[] = {
+ static const struct phm_master_table_item cz_enable_clock_power_gatings_list[] = {
/*we don't need an exit table here, because there is only D3 cold on Kv*/
- { phm_cf_want_uvd_power_gating, cz_tf_uvd_power_gating_initialize },
- { phm_cf_want_vce_power_gating, cz_tf_vce_power_gating_initialize },
@@ -45862,15 +46005,15 @@ index ff08ce4..5b8758f 100644
+ { }
};
- struct phm_master_table_header cz_phm_enable_clock_power_gatings_master = {
+ const 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 5682490..bec743b 100644
+index 1f14c47..11bb711 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c
@@ -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[] = {
+ static const struct phm_master_table_item cz_set_power_state_list[] = {
- {NULL, cz_tf_update_sclk_limit},
- {NULL, cz_tf_set_deep_sleep_sclk_threshold},
- {NULL, cz_tf_set_watermark_threshold},
@@ -45887,11 +46030,11 @@ index 5682490..bec743b 100644
+ { }
};
- 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 const struct phm_master_table_header cz_set_power_state_master = {
+@@ -932,15 +932,15 @@ static const struct phm_master_table_header cz_set_power_state_master = {
};
- static struct phm_master_table_item cz_setup_asic_list[] = {
+ static const struct phm_master_table_item cz_setup_asic_list[] = {
- {NULL, cz_tf_reset_active_process_mask},
- {NULL, cz_tf_upload_pptable_to_smu},
- {NULL, cz_tf_init_sclk_limit},
@@ -45912,11 +46055,11 @@ index 5682490..bec743b 100644
+ { }
};
- static struct phm_master_table_header cz_setup_asic_master = {
+ static const struct phm_master_table_header cz_setup_asic_master = {
@@ -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[] = {
+ static const struct phm_master_table_item cz_power_down_asic_list[] = {
- {NULL, cz_tf_power_up_display_clock_sys_pll},
- {NULL, cz_tf_clear_nb_dpm_flag},
- {NULL, cz_tf_reset_cc6_data},
@@ -45927,11 +46070,11 @@ index 5682490..bec743b 100644
+ { }
};
- static struct phm_master_table_header cz_power_down_asic_master = {
+ static const struct phm_master_table_header cz_power_down_asic_master = {
@@ -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[] = {
+ static const struct phm_master_table_item cz_disable_dpm_list[] = {
- { NULL, cz_tf_check_for_dpm_enabled},
- {NULL, NULL},
+ { .tableFunction = cz_tf_check_for_dpm_enabled },
@@ -45939,10 +46082,10 @@ index 5682490..bec743b 100644
};
-@@ -1108,13 +1108,13 @@ static struct phm_master_table_header cz_disable_dpm_master = {
+@@ -1108,13 +1108,13 @@ static const struct phm_master_table_header cz_disable_dpm_master = {
};
- static struct phm_master_table_item cz_enable_dpm_list[] = {
+ static const struct phm_master_table_item cz_enable_dpm_list[] = {
- { NULL, cz_tf_check_for_dpm_disabled },
- { NULL, cz_tf_program_voting_clients },
- { NULL, cz_tf_start_dpm},
@@ -45959,14 +46102,14 @@ index 5682490..bec743b 100644
+ { },
};
- static struct phm_master_table_header cz_enable_dpm_master = {
+ static const struct phm_master_table_header cz_enable_dpm_master = {
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/fiji_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/fiji_thermal.c
-index e76a7de..ae5fb7e 100644
+index 92976b6..7d1f7f6 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/fiji_thermal.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/fiji_thermal.c
@@ -617,17 +617,17 @@ static int tf_fiji_thermal_disable_alert(struct pp_hwmgr *hwmgr,
- static struct phm_master_table_item
+ static const struct phm_master_table_item
fiji_thermal_start_thermal_controller_master_list[] = {
- {NULL, tf_fiji_thermal_initialize},
- {NULL, tf_fiji_thermal_set_temperature_range},
@@ -45987,10 +46130,10 @@ index e76a7de..ae5fb7e 100644
+ { }
};
- static struct phm_master_table_header
+ static const struct phm_master_table_header
@@ -639,10 +639,10 @@ fiji_thermal_start_thermal_controller_master = {
- static struct phm_master_table_item
+ static const struct phm_master_table_item
fiji_thermal_set_temperature_range_master_list[] = {
- {NULL, tf_fiji_thermal_disable_alert},
- {NULL, tf_fiji_thermal_set_temperature_range},
@@ -46002,15 +46145,60 @@ index e76a7de..ae5fb7e 100644
+ { }
};
- struct phm_master_table_header
+ static const struct phm_master_table_header
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_thermal.c
+index b206632..eeb4724 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_thermal.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_thermal.c
+@@ -645,18 +645,18 @@ static int tf_polaris10_thermal_avfs_enable(struct pp_hwmgr *hwmgr,
+
+ static const struct phm_master_table_item
+ polaris10_thermal_start_thermal_controller_master_list[] = {
+- {NULL, tf_polaris10_thermal_initialize},
+- {NULL, tf_polaris10_thermal_set_temperature_range},
+- {NULL, tf_polaris10_thermal_enable_alert},
+- {NULL, tf_polaris10_thermal_avfs_enable},
++ { .tableFunction = tf_polaris10_thermal_initialize },
++ { .tableFunction = tf_polaris10_thermal_set_temperature_range },
++ { .tableFunction = tf_polaris10_thermal_enable_alert },
++ { .tableFunction = tf_polaris10_thermal_avfs_enable },
+ /* We should restrict performance levels to low before we halt the SMC.
+ * On the other hand we are still in boot state when we do this
+ * so it would be pointless.
+ * If this assumption changes we have to revisit this table.
+ */
+- {NULL, tf_polaris10_thermal_setup_fan_table},
+- {NULL, tf_polaris10_thermal_start_smc_fan_control},
+- {NULL, NULL}
++ { .tableFunction = tf_polaris10_thermal_setup_fan_table },
++ { .tableFunction = tf_polaris10_thermal_start_smc_fan_control },
++ { }
+ };
+
+ static const struct phm_master_table_header
+@@ -668,10 +668,10 @@ polaris10_thermal_start_thermal_controller_master = {
+
+ static const struct phm_master_table_item
+ polaris10_thermal_set_temperature_range_master_list[] = {
+- {NULL, tf_polaris10_thermal_disable_alert},
+- {NULL, tf_polaris10_thermal_set_temperature_range},
+- {NULL, tf_polaris10_thermal_enable_alert},
+- {NULL, NULL}
++ { .tableFunction = tf_polaris10_thermal_disable_alert },
++ { .tableFunction = tf_polaris10_thermal_set_temperature_range },
++ { .tableFunction = tf_polaris10_thermal_enable_alert },
++ { }
+ };
+
+ static const struct phm_master_table_header
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_thermal.c
-index a188174..74acdc0 100644
+index 47ef1ca..d352d38 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_thermal.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_thermal.c
@@ -526,16 +526,16 @@ static int tf_tonga_thermal_disable_alert(struct pp_hwmgr *hwmgr, void *input, v
}
- static struct phm_master_table_item tonga_thermal_start_thermal_controller_master_list[] = {
+ static const struct phm_master_table_item tonga_thermal_start_thermal_controller_master_list[] = {
- { NULL, tf_tonga_thermal_initialize },
- { NULL, tf_tonga_thermal_set_temperature_range },
- { NULL, tf_tonga_thermal_enable_alert },
@@ -46029,11 +46217,11 @@ index a188174..74acdc0 100644
+ { }
};
- static struct phm_master_table_header tonga_thermal_start_thermal_controller_master = {
-@@ -545,10 +545,10 @@ static struct phm_master_table_header tonga_thermal_start_thermal_controller_mas
+ static const struct phm_master_table_header tonga_thermal_start_thermal_controller_master = {
+@@ -545,10 +545,10 @@ static const struct phm_master_table_header tonga_thermal_start_thermal_controll
};
- static struct phm_master_table_item tonga_thermal_set_temperature_range_master_list[] = {
+ static const struct phm_master_table_item tonga_thermal_set_temperature_range_master_list[] = {
- { NULL, tf_tonga_thermal_disable_alert},
- { NULL, tf_tonga_thermal_set_temperature_range},
- { NULL, tf_tonga_thermal_enable_alert},
@@ -46044,9 +46232,9 @@ index a188174..74acdc0 100644
+ { }
};
- struct phm_master_table_header tonga_thermal_set_temperature_range_master = {
+ static const 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 a5ff945..78ff889 100644
+index c16248c..cc9af95 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,
@@ -46059,7 +46247,7 @@ index a5ff945..78ff889 100644
return 0;
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-index 9403145..b8842f1 100644
+index 070095a..c3899f8 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
@@ -49,7 +49,7 @@ struct amd_sched_entity {
@@ -46072,7 +46260,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 dc115ae..7ecd14b 100644
+index 2a732c4..47124cc 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
@@ -46085,10 +46273,10 @@ index dc115ae..7ecd14b 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 82043c2..92ebd4e 100644
+index 439824a..7b1cf0c 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
-@@ -215,6 +215,7 @@ static struct drm_driver armada_drm_driver = {
+@@ -214,6 +214,7 @@ static struct drm_driver armada_drm_driver = {
.driver_features = DRIVER_GEM | DRIVER_MODESET |
DRIVER_HAVE_IRQ | DRIVER_PRIME,
.ioctls = armada_ioctls,
@@ -46096,7 +46284,7 @@ index 82043c2..92ebd4e 100644
.fops = &armada_drm_fops,
};
-@@ -335,8 +336,6 @@ static int __init armada_drm_init(void)
+@@ -334,8 +335,6 @@ static int __init armada_drm_init(void)
{
int ret;
@@ -46106,7 +46294,7 @@ index 82043c2..92ebd4e 100644
if (ret)
return ret;
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
-index a965e7e..5ba937e 100644
+index c337922..fad0e80 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -773,7 +773,7 @@ static int ast_get_modes(struct drm_connector *connector)
@@ -46119,10 +46307,10 @@ index a965e7e..5ba937e 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 96926f0..69097ba 100644
+index 207a2cb..666b75a 100644
--- a/drivers/gpu/drm/bochs/bochs_kms.c
+++ b/drivers/gpu/drm/bochs/bochs_kms.c
-@@ -194,7 +194,7 @@ int bochs_connector_get_modes(struct drm_connector *connector)
+@@ -187,7 +187,7 @@ int bochs_connector_get_modes(struct drm_connector *connector)
return count;
}
@@ -46132,10 +46320,10 @@ index 96926f0..69097ba 100644
{
struct bochs_device *bochs =
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
-index 691a1b9..8d05d29 100644
+index 0e3cc66..005ade8 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
-@@ -4256,7 +4256,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -4285,7 +4285,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
goto done;
}
@@ -46145,10 +46333,10 @@ index 691a1b9..8d05d29 100644
ret = -EFAULT;
goto done;
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
-index 167c8d3..bf13708 100644
+index bff8922..f11da92 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
-@@ -467,7 +467,7 @@ void drm_unplug_dev(struct drm_device *dev)
+@@ -469,7 +469,7 @@ void drm_unplug_dev(struct drm_device *dev)
drm_device_set_unplugged(dev);
@@ -46157,8 +46345,38 @@ index 167c8d3..bf13708 100644
drm_put_dev(dev);
}
mutex_unlock(&drm_global_mutex);
+diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
+index 5075fae..16bdafc 100644
+--- a/drivers/gpu/drm/drm_fb_cma_helper.c
++++ b/drivers/gpu/drm/drm_fb_cma_helper.c
+@@ -322,7 +322,7 @@ static int drm_fbdev_cma_defio_init(struct fb_info *fbi,
+ struct drm_gem_cma_object *cma_obj)
+ {
+ struct fb_deferred_io *fbdefio;
+- struct fb_ops *fbops;
++ fb_ops_no_const *fbops;
+
+ /*
+ * Per device structures are needed because:
+@@ -333,6 +333,7 @@ static int drm_fbdev_cma_defio_init(struct fb_info *fbi,
+ fbops = kzalloc(sizeof(*fbops), GFP_KERNEL);
+ if (!fbdefio || !fbops) {
+ kfree(fbdefio);
++ kfree(fbops);
+ return -ENOMEM;
+ }
+
+@@ -348,7 +349,7 @@ static int drm_fbdev_cma_defio_init(struct fb_info *fbi,
+ fbdefio->deferred_io = drm_fb_helper_deferred_io;
+ fbi->fbdefio = fbdefio;
+ fb_deferred_io_init(fbi);
+- fbi->fbops->fb_mmap = drm_fbdev_cma_deferred_io_mmap;
++ fbops->fb_mmap = drm_fbdev_cma_deferred_io_mmap;
+
+ return 0;
+ }
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
-index aeef58e..1594209 100644
+index 7af7f8b..01047e3 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -131,7 +131,7 @@ int drm_open(struct inode *inode, struct file *filp)
@@ -46179,16 +46397,16 @@ index aeef58e..1594209 100644
drm_minor_release(minor);
return retcode;
}
-@@ -449,7 +449,7 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -445,7 +445,7 @@ int drm_release(struct inode *inode, struct file *filp)
mutex_lock(&drm_global_mutex);
- DRM_DEBUG("open_count = %d\n", dev->open_count);
+ DRM_DEBUG("open_count = %ld\n", local_read(&dev->open_count));
- mutex_lock(&dev->struct_mutex);
+ mutex_lock(&dev->filelist_mutex);
list_del(&file_priv->lhead);
-@@ -464,10 +464,10 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -463,10 +463,10 @@ int drm_release(struct inode *inode, struct file *filp)
* Begin inline drm_release
*/
@@ -46201,16 +46419,16 @@ index aeef58e..1594209 100644
/* if the master has gone away we can't do anything with the lock */
if (file_priv->minor->master)
-@@ -537,7 +537,7 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -536,7 +536,7 @@ int drm_release(struct inode *inode, struct file *filp)
* End inline drm_release
*/
- if (!--dev->open_count) {
+ if (local_dec_and_test(&dev->open_count)) {
- retcode = drm_lastclose(dev);
+ 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)
+@@ -675,6 +675,11 @@ unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait)
}
EXPORT_SYMBOL(drm_poll);
@@ -46222,7 +46440,7 @@ index aeef58e..1594209 100644
/**
* 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,
+@@ -714,7 +719,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: */
@@ -46293,7 +46511,7 @@ index 3d2e91c..d31c4c9 100644
item->object = NULL;
}
diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
-index cbb4fc0..5c756cb9 100644
+index 5d469b2..2a576b2 100644
--- a/drivers/gpu/drm/drm_info.c
+++ b/drivers/gpu/drm/drm_info.c
@@ -77,10 +77,13 @@ int drm_vm_info(struct seq_file *m, void *data)
@@ -46376,10 +46594,10 @@ index 57676f8..020e7ca 100644
ret = drm_ioctl(filp, cmd, arg);
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index 8ce2a0c..d09a8f6 100644
+index b7a39771c..9dcd7f6 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
-@@ -685,7 +685,7 @@ long drm_ioctl(struct file *filp,
+@@ -633,7 +633,7 @@ long drm_ioctl(struct file *filp,
struct drm_file *file_priv = filp->private_data;
struct drm_device *dev;
const struct drm_ioctl_desc *ioctl = NULL;
@@ -46389,7 +46607,7 @@ index 8ce2a0c..d09a8f6 100644
int retcode = -EINVAL;
char stack_kdata[128];
diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
-index a1fff11..425c24b 100644
+index 29d5a54..50781bc 100644
--- a/drivers/gpu/drm/drm_pci.c
+++ b/drivers/gpu/drm/drm_pci.c
@@ -308,7 +308,7 @@ int drm_get_pci_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
@@ -46423,10 +46641,10 @@ 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 5344940..3764f99 100644
+index 2dd820e..8dba3e9 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)
+@@ -599,7 +599,6 @@ static int exynos_drm_platform_probe(struct platform_device *pdev)
struct component_match *match;
pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
@@ -46435,7 +46653,7 @@ index 5344940..3764f99 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 193d360..3dd24ce 100644
+index 8564c3d..3008478 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -1057,6 +1057,11 @@ int exynos_g2d_get_ver_ioctl(struct drm_device *drm_dev, void *data,
@@ -46503,7 +46721,7 @@ 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..9b8a71f 100644
+index a05c0206..01bfdad 100644
--- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
@@ -120,9 +120,14 @@ static void dsi_set_pipe_plane_enable_state(struct drm_device *dev,
@@ -46559,12 +46777,12 @@ index 8b2eb32..78566a8 100644
{
if (mode->clock > 165000)
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
-index 4e1c685..c67f299f 100644
+index 82b8ce4..6401ce82 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)
+@@ -375,7 +375,6 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
+ drm_irq_install(dev, dev->pdev->irq);
- dev->vblank_disable_allowed = true;
dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
- dev->driver->get_vblank_counter = psb_get_vblank_counter;
@@ -46690,10 +46908,10 @@ index 5e6a301..b6e143e 100644
/*
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
-index 1c6d227..c97b56e 100644
+index b3198fc..48383ba 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)
+@@ -416,7 +416,7 @@ static bool i915_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.
*/
@@ -46702,14 +46920,14 @@ index 1c6d227..c97b56e 100644
}
static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
-@@ -1382,4 +1382,4 @@ const struct drm_ioctl_desc i915_ioctls[] = {
+@@ -1584,4 +1584,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 6d2fb3f..691eabb 100644
+index 85c4deb..1b6fe7d 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -43,7 +43,7 @@
@@ -46721,7 +46939,7 @@ index 6d2fb3f..691eabb 100644
#define GEN_DEFAULT_PIPEOFFSETS \
.pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
-@@ -1711,7 +1711,7 @@ static const struct file_operations i915_driver_fops = {
+@@ -1707,7 +1707,7 @@ static const struct file_operations i915_driver_fops = {
.llseek = noop_llseek,
};
@@ -46730,7 +46948,7 @@ index 6d2fb3f..691eabb 100644
/* Don't use MTRRs here; the Xserver or userspace app should
* deal with them for Intel hardware.
*/
-@@ -1761,6 +1761,7 @@ static struct pci_driver i915_pci_driver = {
+@@ -1757,6 +1757,7 @@ static struct pci_driver i915_pci_driver = {
static int __init i915_init(void)
{
@@ -46738,15 +46956,15 @@ index 6d2fb3f..691eabb 100644
driver.num_ioctls = i915_max_ioctl;
/*
-@@ -1778,6 +1779,7 @@ static int __init i915_init(void)
- #endif
+@@ -1772,6 +1773,7 @@ static int __init i915_init(void)
+ driver.driver_features &= ~DRIVER_MODESET;
if (!(driver.driver_features & DRIVER_MODESET)) {
+ pax_close_kernel();
/* Silently fail loading to not upset userspace. */
DRM_DEBUG_DRIVER("KMS and UMS disabled.\n");
return 0;
-@@ -1785,6 +1787,7 @@ static int __init i915_init(void)
+@@ -1779,6 +1781,7 @@ static int __init i915_init(void)
if (i915.nuclear_pageflip)
driver.driver_features |= DRIVER_ATOMIC;
@@ -46755,10 +46973,10 @@ index 6d2fb3f..691eabb 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 daba7eb..a5b2287 100644
+index bc3f2e6..f8e9150 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
-@@ -2721,7 +2721,7 @@ struct drm_i915_cmd_table {
+@@ -2747,7 +2747,7 @@ struct drm_i915_cmd_table {
#include "i915_trace.h"
extern const struct drm_ioctl_desc i915_ioctls[];
@@ -46768,10 +46986,10 @@ index daba7eb..a5b2287 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 1328bc5..d25ea51 100644
+index 33df74d..a789df1 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-@@ -997,12 +997,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
+@@ -1000,12 +1000,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,
@@ -46787,59 +47005,26 @@ index 1328bc5..d25ea51 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 49e4f26..a1aceb1 100644
+index 92acdff..a682121 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
-@@ -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,
-- size_t *stolen,
-- phys_addr_t *mappable_base,
-+ u64 *stolen,
-+ u64 *mappable_base,
- u64 *mappable_end)
- {
- struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -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,
-- size_t *stolen,
-- phys_addr_t *mappable_base,
-+ u64 *stolen,
-+ u64 *mappable_base,
- u64 *mappable_end)
- {
- struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -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,
-- size_t *stolen,
-- phys_addr_t *mappable_base,
-+ u64 *stolen,
-+ u64 *mappable_base,
- u64 *mappable_end)
- {
- struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -3216,8 +3216,8 @@ int i915_gem_gtt_init(struct drm_device *dev)
+@@ -3213,8 +3213,8 @@ int i915_ggtt_init_hw(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);
-- DRM_DEBUG_DRIVER("GMADR size = %lldM\n", gtt->mappable_end >> 20);
-- DRM_DEBUG_DRIVER("GTT stolen size = %zdM\n", gtt->stolen_size >> 20);
-+ DRM_DEBUG_DRIVER("GMADR size = %lluM\n", gtt->mappable_end >> 20);
-+ DRM_DEBUG_DRIVER("GTT stolen size = %lluM\n", gtt->stolen_size >> 20);
+ ggtt->base.total >> 20);
+- DRM_DEBUG_DRIVER("GMADR size = %lldM\n", ggtt->mappable_end >> 20);
+- DRM_DEBUG_DRIVER("GTT stolen size = %zdM\n", ggtt->stolen_size >> 20);
++ DRM_DEBUG_DRIVER("GMADR size = %lluM\n", ggtt->mappable_end >> 20);
++ DRM_DEBUG_DRIVER("GTT stolen size = %lluM\n", ggtt->stolen_size >> 20);
#ifdef CONFIG_INTEL_IOMMU
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 8774f1b..4227d0b 100644
+index 0008543..a86b6e8 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
-@@ -345,13 +345,13 @@ struct i915_address_space {
- struct i915_gtt {
+@@ -342,14 +342,14 @@ struct i915_address_space {
+ struct i915_ggtt {
struct i915_address_space base;
- size_t stolen_size; /* Total size of stolen memory */
@@ -46847,6 +47032,7 @@ index 8774f1b..4227d0b 100644
size_t stolen_usable_size; /* Total size minus BIOS reserved */
size_t stolen_reserved_base;
size_t stolen_reserved_size;
+ size_t size; /* Total size of Global GTT */
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 */
@@ -46854,15 +47040,6 @@ index 8774f1b..4227d0b 100644
/** "Graphics Stolen Memory" holds the global PTEs */
void __iomem *gsm;
-@@ -362,7 +362,7 @@ struct i915_gtt {
-
- /* global gtt ops */
- int (*gtt_probe)(struct drm_device *dev, u64 *gtt_total,
-- size_t *stolen, phys_addr_t *mappable_base,
-+ u64 *stolen, u64 *mappable_base,
- u64 *mappable_end);
- };
-
diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c
index 97f3a56..32c712e 100644
--- a/drivers/gpu/drm/i915/i915_ioc32.c
@@ -46897,12 +47074,12 @@ 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 d1a46ef..4999f42 100644
+index aab47f7..28aabbe 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
-@@ -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);
+@@ -4614,14 +4614,15 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
+ INIT_DELAYED_WORK(&dev_priv->gpu_error.hangcheck_work,
+ i915_hangcheck_elapsed);
+ pax_open_kernel();
if (IS_GEN2(dev_priv)) {
@@ -46919,7 +47096,7 @@ index d1a46ef..4999f42 100644
dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
}
-@@ -4588,32 +4589,32 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
+@@ -4633,32 +4634,32 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
if (!IS_GEN2(dev_priv))
dev->vblank_disable_immediate = true;
@@ -46971,8 +47148,8 @@ index d1a46ef..4999f42 100644
+ const_cast(dev->driver->disable_vblank) = gen8_disable_vblank;
if (IS_BROXTON(dev))
dev_priv->display.hpd_irq_setup = bxt_hpd_irq_setup;
- else if (HAS_PCH_SPT(dev))
-@@ -4621,35 +4622,36 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
+ else if (HAS_PCH_SPT(dev) || HAS_PCH_KBP(dev))
+@@ -4666,35 +4667,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)) {
@@ -47030,10 +47207,10 @@ index d1a46ef..4999f42 100644
/**
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index e5db9e1..e07f0de 100644
+index 3074c56..2f67a37 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -15140,13 +15140,13 @@ struct intel_quirk {
+@@ -15190,13 +15190,13 @@ struct intel_quirk {
int subsystem_vendor;
int subsystem_device;
void (*hook)(struct drm_device *dev);
@@ -47050,7 +47227,7 @@ index e5db9e1..e07f0de 100644
static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
{
-@@ -15154,18 +15154,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
+@@ -15204,18 +15204,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
return 1;
}
@@ -47081,7 +47258,7 @@ index e5db9e1..e07f0de 100644
.hook = quirk_invert_brightness,
},
};
-@@ -15248,7 +15250,7 @@ static void intel_init_quirks(struct drm_device *dev)
+@@ -15298,7 +15300,7 @@ static void intel_init_quirks(struct drm_device *dev)
q->hook(dev);
}
for (i = 0; i < ARRAY_SIZE(intel_dmi_quirks); i++) {
@@ -47091,10 +47268,10 @@ index e5db9e1..e07f0de 100644
}
}
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
-index 05229b9..de0cefc 100644
+index 8265665..c5593dc 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
-@@ -335,7 +335,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
+@@ -331,7 +331,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
if (imxdrm->pipes >= MAX_CRTC)
return -EINVAL;
@@ -47261,7 +47438,7 @@ index 484b4d1..54685f2 100644
dev->vblank_disable_immediate = true;
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
-index cdf5227..6b332f1 100644
+index db76b94..a1e2e00 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,
@@ -47274,7 +47451,7 @@ index cdf5227..6b332f1 100644
/* easy option one - intel vendor ID means Integrated */
if (pdev->vendor == PCI_VENDOR_ID_INTEL)
diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
-index 4dca65a..3486961 100644
+index a1570b1..0e3c08c 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
@@ -964,7 +964,7 @@ static int parse_bit_tmds_tbl_entry(struct drm_device *dev, struct nvbios *bios,
@@ -47287,7 +47464,7 @@ 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 e81aefe..dd2a354 100644
+index c108408..575750a 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -862,7 +862,7 @@ get_tmds_link_bandwidth(struct drm_connector *connector, bool hdmi)
@@ -47300,7 +47477,7 @@ index e81aefe..dd2a354 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 d06877d..3404100 100644
+index 11f8dd9..8efc333 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -82,9 +82,8 @@ MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1
@@ -47346,10 +47523,10 @@ index d06877d..3404100 100644
nouveau_display_options();
-diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h
-index 5c363ed..98fa924 100644
---- a/drivers/gpu/drm/nouveau/nouveau_drm.h
-+++ b/drivers/gpu/drm/nouveau/nouveau_drm.h
+diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
+index 822a021..a131e66 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
++++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -124,7 +124,6 @@ struct nouveau_drm {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref;
@@ -47372,7 +47549,7 @@ index 462679a..88e32a7 100644
if (nr < DRM_COMMAND_BASE)
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
-index d2e7d20..7bbe51f 100644
+index bcee914..8a38eb3 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -107,10 +107,10 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man,
@@ -47425,7 +47602,7 @@ index d2e7d20..7bbe51f 100644
int
diff --git a/drivers/gpu/drm/nouveau/nouveau_usif.c b/drivers/gpu/drm/nouveau/nouveau_usif.c
-index e9f52ef..b25cd62 100644
+index 675e9e0..088f227 100644
--- a/drivers/gpu/drm/nouveau/nouveau_usif.c
+++ b/drivers/gpu/drm/nouveau/nouveau_usif.c
@@ -186,6 +186,11 @@ usif_notify_del(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
@@ -47450,7 +47627,7 @@ index e9f52ef..b25cd62 100644
ntfy->p->e.base.length = sizeof(ntfy->p->e.base) + ntfy->reply;
diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
-index af89c36..83ef136 100644
+index c6a180a..c5c7855 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -73,7 +73,7 @@ nouveau_switcheroo_can_switch(struct pci_dev *pdev)
@@ -47544,7 +47721,7 @@ index 9f3dd09..8ccc40d 100644
mutex_lock(&panel_list_mutex);
list_add_tail(&dssdev->panel_list, &panel_list);
diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
-index fdc1833..f307630 100644
+index b5d4b41..7519e7d 100644
--- a/drivers/gpu/drm/qxl/qxl_cmd.c
+++ b/drivers/gpu/drm/qxl/qxl_cmd.c
@@ -285,27 +285,27 @@ static int wait_for_io_cmd_user(struct qxl_device *qdev, uint8_t val, long port,
@@ -47601,10 +47778,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 030409a..de26914 100644
+index 8b5d543..9093126 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
-@@ -828,7 +828,7 @@ static int qxl_conn_get_modes(struct drm_connector *connector)
+@@ -829,7 +829,7 @@ static int qxl_conn_get_modes(struct drm_connector *connector)
return ret;
}
@@ -47614,7 +47791,7 @@ index 030409a..de26914 100644
{
struct drm_device *ddev = connector->dev;
diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
-index 7307b07..3346540 100644
+index dc9df5f..baa8573 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
+++ b/drivers/gpu/drm/qxl/qxl_drv.c
@@ -37,7 +37,7 @@
@@ -47626,7 +47803,7 @@ index 7307b07..3346540 100644
static const struct pci_device_id pciidlist[] = {
{ 0x1b36, 0x100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8,
0xffff00, 0 },
-@@ -279,7 +279,11 @@ static int __init qxl_init(void)
+@@ -277,7 +277,11 @@ static int __init qxl_init(void)
if (qxl_modeset == 0)
return -EINVAL;
@@ -47640,7 +47817,7 @@ index 7307b07..3346540 100644
}
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
-index 3f3897e..0bc8075 100644
+index 3ad6604..e5f2f77 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.h
+++ b/drivers/gpu/drm/qxl/qxl_drv.h
@@ -292,10 +292,10 @@ struct qxl_device {
@@ -47659,10 +47836,10 @@ index 3f3897e..0bc8075 100644
wait_queue_head_t display_event;
wait_queue_head_t cursor_event;
diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c
-index 7c2e782..d3ca7da 100644
+index 5a4c8c4..faf4c73 100644
--- a/drivers/gpu/drm/qxl/qxl_ioctl.c
+++ b/drivers/gpu/drm/qxl/qxl_ioctl.c
-@@ -184,7 +184,7 @@ static int qxl_process_single_command(struct qxl_device *qdev,
+@@ -183,7 +183,7 @@ static int qxl_process_single_command(struct qxl_device *qdev,
/* TODO copy slow path code from i915 */
fb_cmd = qxl_bo_kmap_atomic_page(qdev, cmd_bo, (release->release_offset & PAGE_SIZE));
@@ -47671,7 +47848,7 @@ index 7c2e782..d3ca7da 100644
{
struct qxl_drawable *draw = fb_cmd;
-@@ -204,7 +204,7 @@ static int qxl_process_single_command(struct qxl_device *qdev,
+@@ -203,7 +203,7 @@ static int qxl_process_single_command(struct qxl_device *qdev,
struct drm_qxl_reloc reloc;
if (copy_from_user(&reloc,
@@ -47680,7 +47857,7 @@ index 7c2e782..d3ca7da 100644
sizeof(reloc))) {
ret = -EFAULT;
goto out_free_bos;
-@@ -283,10 +283,10 @@ static int qxl_execbuffer_ioctl(struct drm_device *dev, void *data,
+@@ -282,10 +282,10 @@ static int qxl_execbuffer_ioctl(struct drm_device *dev, void *data,
for (cmd_num = 0; cmd_num < execbuffer->commands_num; ++cmd_num) {
@@ -47694,7 +47871,7 @@ index 7c2e782..d3ca7da 100644
sizeof(user_cmd)))
return -EFAULT;
-@@ -440,4 +440,4 @@ const struct drm_ioctl_desc qxl_ioctls[] = {
+@@ -439,4 +439,4 @@ const struct drm_ioctl_desc qxl_ioctls[] = {
DRM_AUTH),
};
@@ -47744,7 +47921,7 @@ index 0bf1e20..42a7310 100644
ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq);
qdev->ram_header->int_mask = QXL_INTERRUPT_MASK;
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
-index 9534127..1d17b3f 100644
+index 0738d74..3a2f5f0 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -103,7 +103,7 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev)
@@ -47767,7 +47944,7 @@ index 9534127..1d17b3f 100644
}
vma->vm_ops = &qxl_ttm_vm_ops;
return 0;
-@@ -464,25 +466,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data)
+@@ -466,25 +468,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data)
static int qxl_ttm_debugfs_init(struct qxl_device *qdev)
{
#if defined(CONFIG_DEBUG_FS)
@@ -48028,7 +48205,7 @@ index 81a63d7..5c7f8e7 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 cb29868..33523a2 100644
+index 21c44b2..d5aad3a 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1274,7 +1274,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
@@ -48041,10 +48218,10 @@ index cb29868..33523a2 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 ccd4ad4..a1ffcff 100644
+index b55aa74..7a345cd 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
-@@ -132,7 +132,7 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int crtc,
+@@ -135,7 +135,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[];
@@ -48053,7 +48230,7 @@ index ccd4ad4..a1ffcff 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,
-@@ -503,7 +503,7 @@ static struct drm_driver kms_driver = {
+@@ -514,7 +514,7 @@ static struct drm_driver kms_driver = {
.driver_features =
DRIVER_USE_AGP |
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
@@ -48062,7 +48239,7 @@ index ccd4ad4..a1ffcff 100644
.load = radeon_driver_load_kms,
.open = radeon_driver_open_kms,
.preclose = radeon_driver_preclose_kms,
-@@ -580,8 +580,11 @@ static int __init radeon_init(void)
+@@ -589,8 +589,11 @@ static int __init radeon_init(void)
DRM_INFO("radeon kernel modesetting enabled.\n");
driver = &kms_driver;
pdriver = &radeon_kms_pci_driver;
@@ -48156,10 +48333,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 90f7394..ccdec03 100644
+index 590b037..2755d23 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
-@@ -968,7 +968,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size)
+@@ -970,7 +970,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size)
man->size = size >> PAGE_SHIFT;
}
@@ -48168,7 +48345,7 @@ index 90f7394..ccdec03 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)
-@@ -1009,8 +1009,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma)
+@@ -1011,8 +1011,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma)
}
if (unlikely(ttm_vm_ops == NULL)) {
ttm_vm_ops = vma->vm_ops;
@@ -48257,10 +48434,10 @@ 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..47ff1c9 100644
+index 4e99029..cbfd7c6 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)
+@@ -133,7 +133,7 @@ static int cursor_dbg_show(struct seq_file *s, void *data)
return 0;
}
@@ -48269,7 +48446,7 @@ index 3abb400..47ff1c9 100644
{ "cursor", cursor_dbg_show, 0, NULL },
};
-@@ -140,8 +140,10 @@ static int cursor_debugfs_init(struct sti_cursor *cursor,
+@@ -142,8 +142,10 @@ static int cursor_debugfs_init(struct sti_cursor *cursor,
{
unsigned int i;
@@ -48305,10 +48482,10 @@ index 25f7663..db8f927 100644
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..da4db0f 100644
+index ff33c38..e0e62a9 100644
--- a/drivers/gpu/drm/sti/sti_gdp.c
+++ b/drivers/gpu/drm/sti/sti_gdp.c
-@@ -297,22 +297,22 @@ static int gdp_node_dbg_show(struct seq_file *s, void *arg)
+@@ -298,22 +298,22 @@ static int gdp_node_dbg_show(struct seq_file *s, void *arg)
return 0;
}
@@ -48335,7 +48512,7 @@ index ff3d3e7..da4db0f 100644
{ "gdp3", gdp_dbg_show, 0, NULL },
{ "gdp3_node", gdp_node_dbg_show, 0, NULL },
};
-@@ -320,7 +320,7 @@ static struct drm_info_list gdp3_debugfs_files[] = {
+@@ -321,7 +321,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;
@@ -48344,7 +48521,7 @@ index ff3d3e7..da4db0f 100644
int nb_files;
switch (gdp->plane.desc) {
-@@ -344,8 +344,10 @@ static int gdp_debugfs_init(struct sti_gdp *gdp, struct drm_minor *minor)
+@@ -345,8 +345,10 @@ static int gdp_debugfs_init(struct sti_gdp *gdp, struct drm_minor *minor)
return -EINVAL;
}
@@ -48356,10 +48533,10 @@ index ff3d3e7..da4db0f 100644
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..99afbbe 100644
+index f7d3464..98b044f 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)
+@@ -401,7 +401,7 @@ static int hda_dbg_show(struct seq_file *s, void *data)
return 0;
}
@@ -48368,7 +48545,7 @@ index ec0d017..99afbbe 100644
{ "hda", hda_dbg_show, 0, NULL },
};
-@@ -415,8 +415,10 @@ static int hda_debugfs_init(struct sti_hda *hda, struct drm_minor *minor)
+@@ -416,8 +416,10 @@ static int hda_debugfs_init(struct sti_hda *hda, struct drm_minor *minor)
{
unsigned int i;
@@ -48404,10 +48581,10 @@ index 6ef0715..dbc27b0 100644
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..d70a2e6 100644
+index 1edec29..7feb262 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)
+@@ -634,7 +634,7 @@ static int hqvdp_dbg_show(struct seq_file *s, void *data)
return 0;
}
@@ -48416,7 +48593,7 @@ index e05b0dc..d70a2e6 100644
{ "hqvdp", hqvdp_dbg_show, 0, NULL },
};
-@@ -641,8 +641,10 @@ static int hqvdp_debugfs_init(struct sti_hqvdp *hqvdp, struct drm_minor *minor)
+@@ -642,8 +642,10 @@ static int hqvdp_debugfs_init(struct sti_hqvdp *hqvdp, struct drm_minor *minor)
{
unsigned int i;
@@ -48428,10 +48605,10 @@ index e05b0dc..d70a2e6 100644
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..d53380c 100644
+index aed7801..80688a8 100644
--- a/drivers/gpu/drm/sti/sti_mixer.c
+++ b/drivers/gpu/drm/sti/sti_mixer.c
-@@ -179,18 +179,18 @@ static int mixer_dbg_show(struct seq_file *s, void *arg)
+@@ -180,18 +180,18 @@ static int mixer_dbg_show(struct seq_file *s, void *arg)
return 0;
}
@@ -48453,7 +48630,7 @@ index e7425c3..d53380c 100644
int nb_files;
switch (mixer->id) {
-@@ -206,8 +206,10 @@ static int mixer_debugfs_init(struct sti_mixer *mixer, struct drm_minor *minor)
+@@ -207,8 +207,10 @@ static int mixer_debugfs_init(struct sti_mixer *mixer, struct drm_minor *minor)
return -EINVAL;
}
@@ -48465,10 +48642,10 @@ index e7425c3..d53380c 100644
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..88de356 100644
+index f983db5..197243e 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)
+@@ -591,7 +591,7 @@ static int tvout_dbg_show(struct seq_file *s, void *data)
return 0;
}
@@ -48477,7 +48654,7 @@ index 2c99016..88de356 100644
{ "tvout", tvout_dbg_show, 0, NULL },
};
-@@ -605,8 +605,10 @@ static int tvout_debugfs_init(struct sti_tvout *tvout, struct drm_minor *minor)
+@@ -606,8 +606,10 @@ static int tvout_debugfs_init(struct sti_tvout *tvout, struct drm_minor *minor)
{
unsigned int i;
@@ -48489,10 +48666,10 @@ index 2c99016..88de356 100644
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..c4f2be6 100644
+index 523ed19..9b28a88 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)
+@@ -126,7 +126,7 @@ static int vid_dbg_show(struct seq_file *s, void *arg)
return 0;
}
@@ -48501,7 +48678,7 @@ index 5a2c5dc..c4f2be6 100644
{ "vid", vid_dbg_show, 0, NULL },
};
-@@ -133,8 +133,10 @@ static int vid_debugfs_init(struct sti_vid *vid, struct drm_minor *minor)
+@@ -134,8 +134,10 @@ static int vid_debugfs_init(struct sti_vid *vid, struct drm_minor *minor)
{
unsigned int i;
@@ -48513,7 +48690,7 @@ index 5a2c5dc..c4f2be6 100644
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 fb2b4b0..46f430e 100644
+index 39940f5..2dc6661 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -1640,7 +1640,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor)
@@ -48526,7 +48703,7 @@ index fb2b4b0..46f430e 100644
err = drm_debugfs_create_files(dc->debugfs_files,
ARRAY_SIZE(debugfs_files),
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
-index 44e1027..3548928 100644
+index d1239eb..d550362 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -62,7 +62,7 @@ struct tegra_dsi {
@@ -48640,7 +48817,7 @@ index a1803fb..c53f6b0 100644
kobject_put(&zone->kobj);
return ret;
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
-index 025c429..314062f 100644
+index a37de5d..4a0db00 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -54,7 +54,7 @@
@@ -48717,7 +48894,7 @@ index 025c429..314062f 100644
/* set zero flag for page allocation if required */
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
-index 624d941..106fa1f 100644
+index bef9f6f..ca48e17 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
@@ -56,7 +56,7 @@
@@ -48808,10 +48985,10 @@ 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 fd1eb9d..8ef346a 100644
+index d5df555..b3323da 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)
+@@ -239,7 +239,6 @@ static int udl_fb_release(struct fb_info *info, int user)
fb_deferred_io_cleanup(info);
kfree(info->fbdefio);
info->fbdefio = NULL;
@@ -48820,10 +48997,10 @@ index fd1eb9d..8ef346a 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 b7d2ff0..d2e1f7b 100644
+index 250ed7e..9252e4e 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -132,6 +132,11 @@ static int compare_dev(struct device *dev, void *data)
+@@ -133,6 +133,11 @@ static int compare_dev(struct device *dev, void *data)
return dev == data;
}
@@ -48835,7 +49012,7 @@ index b7d2ff0..d2e1f7b 100644
static void vc4_match_add_drivers(struct device *dev,
struct component_match **match,
struct platform_driver *const *drivers,
-@@ -143,8 +148,7 @@ static void vc4_match_add_drivers(struct device *dev,
+@@ -144,8 +149,7 @@ static void vc4_match_add_drivers(struct device *dev,
struct device_driver *drv = &drivers[i]->driver;
struct device *p = NULL, *d;
@@ -48977,10 +49154,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 5fd1fd0..0766d9b 100644
+index d4305da..343b500 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
-@@ -327,7 +327,7 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector)
+@@ -319,7 +319,7 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector)
return count;
}
@@ -48990,7 +49167,7 @@ index 5fd1fd0..0766d9b 100644
{
struct virtio_gpu_output *output =
diff --git a/drivers/gpu/drm/virtio/virtgpu_ttm.c b/drivers/gpu/drm/virtio/virtgpu_ttm.c
-index 9fd924c..c64b065 100644
+index a058081..6574390 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ttm.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ttm.c
@@ -198,11 +198,11 @@ static void ttm_bo_man_debug(struct ttm_mem_type_manager *man,
@@ -49011,7 +49188,7 @@ 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 cab0c54..c03f271 100644
+index 89fb194..665aa29 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -438,7 +438,7 @@ struct vmw_private {
@@ -49140,10 +49317,10 @@ index cbd7c98..170a5ba 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 4f9c5c6..50d91fb 100644
+index 8ea3a26..51a45ff 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
-@@ -2635,7 +2635,7 @@ EXPORT_SYMBOL_GPL(hid_ignore);
+@@ -2633,7 +2633,7 @@ EXPORT_SYMBOL_GPL(hid_ignore);
int hid_add_device(struct hid_device *hdev)
{
@@ -49152,7 +49329,7 @@ index 4f9c5c6..50d91fb 100644
int ret;
if (WARN_ON(hdev->status & HID_STAT_ADDED))
-@@ -2679,7 +2679,7 @@ int hid_add_device(struct hid_device *hdev)
+@@ -2677,7 +2677,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,
@@ -49295,7 +49472,7 @@ index a1c086b..b45a999 100644
}
diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c
-index b853b4b..3647b37 100644
+index df35fb7..fff7e4e 100644
--- a/drivers/hv/hv_balloon.c
+++ b/drivers/hv/hv_balloon.c
@@ -471,7 +471,7 @@ MODULE_PARM_DESC(hot_add, "If set attempt memory hot_add");
@@ -49361,7 +49538,7 @@ index b853b4b..3647b37 100644
version_req.version.version = dm->next_version;
/*
-@@ -1487,7 +1487,7 @@ static int balloon_probe(struct hv_device *dev,
+@@ -1488,7 +1488,7 @@ static int balloon_probe(struct hv_device *dev,
memset(&version_req, 0, sizeof(struct dm_version_request));
version_req.hdr.type = DM_VERSION_REQUEST;
version_req.hdr.size = sizeof(struct dm_version_request);
@@ -49370,7 +49547,7 @@ index b853b4b..3647b37 100644
version_req.version.version = DYNMEM_PROTOCOL_VERSION_WIN10;
version_req.is_last_attempt = 0;
-@@ -1518,7 +1518,7 @@ static int balloon_probe(struct hv_device *dev,
+@@ -1519,7 +1519,7 @@ static int balloon_probe(struct hv_device *dev,
memset(&cap_msg, 0, sizeof(struct dm_capabilities));
cap_msg.hdr.type = DM_CAPABILITIES_REPORT;
cap_msg.hdr.size = sizeof(struct dm_capabilities);
@@ -49380,10 +49557,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 12321b9..89d89f2 100644
+index 718b5c7..c1bf203 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
-@@ -561,7 +561,7 @@ enum vmbus_connect_state {
+@@ -566,7 +566,7 @@ enum vmbus_connect_state {
struct vmbus_connection {
enum vmbus_connect_state conn_state;
@@ -49487,10 +49664,10 @@ index 6a27eb2..349ed23 100644
};
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
-index a9356a3..0785f99 100644
+index 2ac87d5..0ef2555 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
-@@ -844,7 +844,7 @@ static const struct i8k_config_data i8k_config_data[] = {
+@@ -849,7 +849,7 @@ static const struct i8k_config_data i8k_config_data[] = {
},
};
@@ -49499,20 +49676,15 @@ index a9356a3..0785f99 100644
{
.ident = "Dell Inspiron",
.matches = {
-@@ -960,8 +960,12 @@ MODULE_DEVICE_TABLE(dmi, i8k_dmi_table);
+@@ -965,7 +965,7 @@ MODULE_DEVICE_TABLE(dmi, i8k_dmi_table);
* of affected Dell machines for which we disallow I8K_SMM_GET_FAN_TYPE call.
* See bug: https://bugzilla.kernel.org/show_bug.cgi?id=100121
*/
-static struct dmi_system_id i8k_blacklist_fan_type_dmi_table[] __initdata = {
+static const struct dmi_system_id i8k_blacklist_fan_type_dmi_table[] __initconst = {
{
-+ /*
-+ * CPU fan speed going up and down on Dell Studio XPS 8000
-+ * for unknown reasons.
-+ */
.ident = "Dell Studio XPS 8000",
.matches = {
- DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c
index 1f64378..2b6e615 100644
--- a/drivers/hwmon/ibmaem.c
@@ -49730,10 +49902,10 @@ 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 0b1108d..8f253a0 100644
+index 6ecfd76..48d53aa 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,
+@@ -274,7 +274,7 @@ static noinline int i2cdev_ioctl_rdwr(struct i2c_client *client,
break;
}
@@ -49756,7 +49928,7 @@ index ef907fd..1b61cf2 100644
}
}
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
-index 37a8a90..4724cbd 100644
+index 05dbcce..7489e32 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -178,7 +178,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
@@ -49791,10 +49963,71 @@ index d127ace..6ee866f 100644
int i, j = 1;
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
-index c6935de..1ecb47f 100644
+index c966492..4e66371 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
-@@ -1114,8 +1114,10 @@ static void sklh_idle_state_table_update(void)
+@@ -1172,40 +1172,50 @@ static void bxt_idle_state_table_update(void)
+ if (msr) {
+ unsigned int usec = irtl_2_usec(msr);
+
+- bxt_cstates[2].exit_latency = usec;
+- bxt_cstates[2].target_residency = usec;
++ pax_open_kernel();
++ const_cast(bxt_cstates[2].exit_latency) = usec;
++ const_cast(bxt_cstates[2].target_residency) = usec;
++ pax_close_kernel();
+ }
+
+ rdmsrl(MSR_PKGC7_IRTL, msr);
+ if (msr) {
+ unsigned int usec = irtl_2_usec(msr);
+
+- bxt_cstates[3].exit_latency = usec;
+- bxt_cstates[3].target_residency = usec;
++ pax_open_kernel();
++ const_cast(bxt_cstates[3].exit_latency) = usec;
++ const_cast(bxt_cstates[3].target_residency) = usec;
++ pax_close_kernel();
+ }
+
+ rdmsrl(MSR_PKGC8_IRTL, msr);
+ if (msr) {
+ unsigned int usec = irtl_2_usec(msr);
+
+- bxt_cstates[4].exit_latency = usec;
+- bxt_cstates[4].target_residency = usec;
++ pax_open_kernel();
++ const_cast(bxt_cstates[4].exit_latency) = usec;
++ const_cast(bxt_cstates[4].target_residency) = usec;
++ pax_close_kernel();
+ }
+
+ rdmsrl(MSR_PKGC9_IRTL, msr);
+ if (msr) {
+ unsigned int usec = irtl_2_usec(msr);
+
+- bxt_cstates[5].exit_latency = usec;
+- bxt_cstates[5].target_residency = usec;
++ pax_open_kernel();
++ const_cast(bxt_cstates[5].exit_latency) = usec;
++ const_cast(bxt_cstates[5].target_residency) = usec;
++ pax_close_kernel();
+ }
+
+ rdmsrl(MSR_PKGC10_IRTL, msr);
+ if (msr) {
+ unsigned int usec = irtl_2_usec(msr);
+
+- bxt_cstates[6].exit_latency = usec;
+- bxt_cstates[6].target_residency = usec;
++ pax_open_kernel();
++ const_cast(bxt_cstates[6].exit_latency) = usec;
++ const_cast(bxt_cstates[6].target_residency) = usec;
++ pax_close_kernel();
+ }
+
+ }
+@@ -1248,8 +1258,10 @@ static void sklh_idle_state_table_update(void)
return;
}
@@ -49808,10 +50041,10 @@ index c6935de..1ecb47f 100644
/*
* intel_idle_state_table_update()
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
-index 70cb7eb..f2ee8de 100644
+index e6319a9..9e14f05 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
-@@ -604,7 +604,7 @@ static ssize_t iio_write_channel_info(struct device *dev,
+@@ -689,7 +689,7 @@ static ssize_t iio_write_channel_info(struct device *dev,
}
static
@@ -49820,19 +50053,6 @@ index 70cb7eb..f2ee8de 100644
const char *postfix,
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 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,
- name = id->name;
- } else if (ACPI_HANDLE(&client->dev))
- name = ak8975_match_acpi_device(&client->dev, &chipset);
-- else
-+ if (!name)
- return -ENOSYS;
-
- if (chipset >= AK_MAX_TYPE) {
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index c995255..7de0b49 100644
--- a/drivers/infiniband/core/cm.c
@@ -50098,10 +50318,10 @@ index cdbb1f1..7ed4277 100644
}
}
diff --git a/drivers/infiniband/core/netlink.c b/drivers/infiniband/core/netlink.c
-index d47df93..93e4cfd 100644
+index 9b8c20c..307a1a7 100644
--- a/drivers/infiniband/core/netlink.c
+++ b/drivers/infiniband/core/netlink.c
-@@ -177,11 +177,10 @@ static int ibnl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -176,11 +176,10 @@ static int ibnl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
}
{
@@ -50115,6 +50335,19 @@ index d47df93..93e4cfd 100644
}
}
}
+diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
+index 60df4f8..b5a134d 100644
+--- a/drivers/infiniband/core/sysfs.c
++++ b/drivers/infiniband/core/sysfs.c
+@@ -893,7 +893,7 @@ static struct attribute *alloc_hsa_lifespan(char *name, u8 port_num)
+ static void setup_hw_stats(struct ib_device *device, struct ib_port *port,
+ u8 port_num)
+ {
+- struct attribute_group *hsag;
++ attribute_group_no_const *hsag;
+ struct rdma_hw_stats *stats;
+ int i, ret;
+
diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c
index 7713ef0..0bb2981 100644
--- a/drivers/infiniband/core/ucm.c
@@ -50137,7 +50370,7 @@ index 7713ef0..0bb2981 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 6fdc7ecd..ae148f7 100644
+index 825021d..91dac4e 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,
@@ -50182,7 +50415,7 @@ index ae2e8b2..d5dcc7d 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 df43f87..e08169c 100644
+index f6f34a7..0977536 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -180,7 +180,7 @@ struct c4iw_rdev {
@@ -50195,10 +50428,10 @@ index df43f87..e08169c 100644
int wr_log_size;
};
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
-index 008be07..a73412de 100644
+index 55d0651..c94e88f 100644
--- a/drivers/infiniband/hw/cxgb4/mem.c
+++ b/drivers/infiniband/hw/cxgb4/mem.c
-@@ -257,7 +257,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
+@@ -258,7 +258,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
int err;
struct fw_ri_tpte tpt;
u32 stag_idx;
@@ -50207,7 +50440,7 @@ index 008be07..a73412de 100644
if (c4iw_fatal_error(rdev))
return -EIO;
-@@ -278,7 +278,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
+@@ -279,7 +279,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);
@@ -50216,11 +50449,24 @@ index 008be07..a73412de 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/hfi1/pcie.c b/drivers/infiniband/hw/hfi1/pcie.c
+index 0bac21e..2b9ef9c 100644
+--- a/drivers/infiniband/hw/hfi1/pcie.c
++++ b/drivers/infiniband/hw/hfi1/pcie.c
+@@ -537,7 +537,7 @@ static void tune_pcie_caps(struct hfi1_devdata *dd)
+ * PCI error infrastructure, registered via pci
+ */
+ static pci_ers_result_t
+-pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct hfi1_devdata *dd = pci_get_drvdata(pdev);
+ pci_ers_result_t ret = PCI_ERS_RESULT_RECOVERED;
diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
-index f05802b..d0827d4 100644
+index 2c4b4d0..b45e806 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)
+@@ -4604,46 +4604,46 @@ static void i40iw_hw_stat_refresh_all(struct i40iw_dev_pestat *devstat)
}
static struct i40iw_cqp_ops iw_cqp_ops = {
@@ -50294,28 +50540,7 @@ index f05802b..d0827d4 100644
};
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,
+@@ -4662,61 +4662,59 @@ static struct i40iw_priv_qp_ops iw_priv_qp_ops = {
};
static struct i40iw_priv_cq_ops iw_priv_cq_ops = {
@@ -50419,10 +50644,10 @@ index f05802b..d0827d4 100644
/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_uk.c b/drivers/infiniband/hw/i40iw/i40iw_uk.c
-index f78c3dc..f09670e 100644
+index e35faea8..21fc7b8f 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)
+@@ -926,29 +926,29 @@ enum i40iw_status_code i40iw_get_wqe_shift(u32 wqdepth, u32 sge, u32 inline_data
}
static struct i40iw_qp_uk_ops iw_qp_uk_ops = {
@@ -50470,10 +50695,10 @@ index f78c3dc..f09670e 100644
/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_user.h b/drivers/infiniband/hw/i40iw/i40iw_user.h
-index 5cd971b..01b798c 100644
+index 4627646..98912d6 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 {
+@@ -343,7 +343,7 @@ struct i40iw_device_uk_ops {
struct i40iw_dev_uk {
struct i40iw_device_uk_ops ops_uk;
@@ -50483,7 +50708,7 @@ index 5cd971b..01b798c 100644
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
+index 9c2e53d..8aef3b6 100644
--- a/drivers/infiniband/hw/mlx4/mad.c
+++ b/drivers/infiniband/hw/mlx4/mad.c
@@ -99,7 +99,7 @@ __be64 mlx4_ib_gen_node_guid(void)
@@ -50496,10 +50721,10 @@ index d68f506..00ff84a 100644
}
diff --git a/drivers/infiniband/hw/mlx4/mcg.c b/drivers/infiniband/hw/mlx4/mcg.c
-index 99451d8..a9f0747 100644
+index 8f7ad07..5d02b6d 100644
--- a/drivers/infiniband/hw/mlx4/mcg.c
+++ b/drivers/infiniband/hw/mlx4/mcg.c
-@@ -1046,7 +1046,7 @@ int mlx4_ib_mcg_port_init(struct mlx4_ib_demux_ctx *ctx)
+@@ -1043,7 +1043,7 @@ int mlx4_ib_mcg_port_init(struct mlx4_ib_demux_ctx *ctx)
{
char name[20];
@@ -50509,7 +50734,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 1eca01c..ed165df 100644
+index 29acda2..86bbd08 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 {
@@ -50959,10 +51184,10 @@ index 4166452..fc952c3 100644
}
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
-index 9291453..b3d0366 100644
+index 2b27d13..8f9d46c 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)
+@@ -461,7 +461,7 @@ static bool nes_nic_send(struct sk_buff *skb, struct net_device *netdev)
/**
* nes_netdev_start_xmit
*/
@@ -50971,7 +51196,7 @@ index 9291453..b3d0366 100644
{
struct nes_vnic *nesvnic = netdev_priv(netdev);
struct nes_device *nesdev = nesvnic->nesdev;
-@@ -1268,36 +1268,36 @@ static void nes_netdev_get_ethtool_stats(struct net_device *netdev,
+@@ -1264,36 +1264,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;
@@ -51029,7 +51254,7 @@ index 9291453..b3d0366 100644
/**
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
-index fba69a3..ecf3aee 100644
+index 464d6da..ccff860 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -46,9 +46,9 @@
@@ -51045,7 +51270,7 @@ index fba69a3..ecf3aee 100644
static void nes_unregister_ofa_device(struct nes_ib_device *nesibdev);
static int nes_dereg_mr(struct ib_mr *ib_mr);
-@@ -1041,7 +1041,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
+@@ -1040,7 +1040,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
if (init_attr->create_flags)
return ERR_PTR(-EINVAL);
@@ -51054,7 +51279,7 @@ index fba69a3..ecf3aee 100644
switch (init_attr->qp_type) {
case IB_QPT_RC:
if (nes_drv_opt & NES_DRV_OPT_NO_INLINE_DATA) {
-@@ -1375,7 +1375,7 @@ static int nes_destroy_qp(struct ib_qp *ibqp)
+@@ -1376,7 +1376,7 @@ static int nes_destroy_qp(struct ib_qp *ibqp)
struct iw_cm_event cm_event;
int ret = 0;
@@ -51064,7 +51289,7 @@ index fba69a3..ecf3aee 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 82d7c4b..5da4377 100644
+index ce40340..b211076 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 = {
@@ -51076,7 +51301,7 @@ index 82d7c4b..5da4377 100644
module_param_call(txselect, setup_txselect, param_get_string,
&kp_txselect, S_IWUSR | S_IRUGO);
MODULE_PARM_DESC(txselect,
-@@ -6192,7 +6192,7 @@ static void set_no_qsfp_atten(struct qib_devdata *dd, int change)
+@@ -6177,7 +6177,7 @@ static void set_no_qsfp_atten(struct qib_devdata *dd, int change)
}
/* handle the txselect parameter changing */
@@ -51086,10 +51311,10 @@ index 82d7c4b..5da4377 100644
struct qib_devdata *dd;
unsigned long val;
diff --git a/drivers/infiniband/hw/qib/qib_pcie.c b/drivers/infiniband/hw/qib/qib_pcie.c
-index 4758a38..571a55f 100644
+index 6abe1c6..f866a31 100644
--- a/drivers/infiniband/hw/qib/qib_pcie.c
+++ b/drivers/infiniband/hw/qib/qib_pcie.c
-@@ -628,7 +628,7 @@ static void qib_tune_pcie_caps(struct qib_devdata *dd)
+@@ -622,7 +622,7 @@ static void qib_tune_pcie_caps(struct qib_devdata *dd)
* PCI error infrastructure, registered via pci
*/
static pci_ers_result_t
@@ -51099,10 +51324,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 80807d6..a72293a 100644
+index 5f58c41..d96d038 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
-@@ -948,7 +948,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
+@@ -1022,7 +1022,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
spin_unlock_irqrestore(&priv->lock, flags);
}
@@ -51125,7 +51350,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 8b42401..f855977 100644
+index 4a41556..8fcf256 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);
@@ -51148,7 +51373,7 @@ index 8b42401..f855977 100644
pr_debug("QP event %d on cm_id=%p sess_name=%s state=%d\n",
event->event, ch->cm_id, ch->sess_name, ch->state);
-@@ -1825,8 +1826,7 @@ retry:
+@@ -1622,8 +1623,7 @@ retry:
}
qp_init->qp_context = (void *)ch;
@@ -51331,23 +51556,11 @@ index 92e2243..8fd9092 100644
{
.ident = "Shift",
.matches = {
-diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
-index dd1dc39..f595bbe 100644
---- a/drivers/iommu/Kconfig
-+++ b/drivers/iommu/Kconfig
-@@ -128,6 +128,7 @@ config AMD_IOMMU_STATS
- bool "Export AMD IOMMU statistics to debugfs"
- depends on AMD_IOMMU
- select DEBUG_FS
-+ depends on !GRKERNSEC_KMEM
- ---help---
- This option enables code in the AMD IOMMU driver to collect various
- statistics about whats happening in the driver and exports that
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
-index 5efadad..d1b358e 100644
+index 634f6363..cfe6f70 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
-@@ -804,11 +804,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
+@@ -825,11 +825,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
static void build_completion_wait(struct iommu_cmd *cmd, u64 address)
{
@@ -51372,23 +51585,113 @@ 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 3e20208..e0a3c34 100644
+index 5f6b3bc..5fb943b 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
-@@ -1562,7 +1562,7 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain)
+@@ -626,7 +626,7 @@ struct arm_smmu_domain {
+ struct arm_smmu_device *smmu;
+ struct mutex init_mutex; /* Protects smmu pointer */
+
+- struct io_pgtable_ops *pgtbl_ops;
++ struct io_pgtable *pgtbl;
+ spinlock_t pgtbl_lock;
+
+ enum arm_smmu_domain_stage stage;
+@@ -1445,7 +1445,7 @@ static void arm_smmu_domain_free(struct iommu_domain *domain)
+ struct arm_smmu_device *smmu = smmu_domain->smmu;
+
+ iommu_put_dma_cookie(domain);
+- free_io_pgtable_ops(smmu_domain->pgtbl_ops);
++ free_io_pgtable(smmu_domain->pgtbl);
+
+ /* Free the CD and ASID, if we allocated them */
+ if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
+@@ -1523,7 +1523,7 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain)
+ unsigned long ias, oas;
+ enum io_pgtable_fmt fmt;
+ struct io_pgtable_cfg pgtbl_cfg;
+- struct io_pgtable_ops *pgtbl_ops;
++ struct io_pgtable *iop;
+ int (*finalise_stage_fn)(struct arm_smmu_domain *,
+ struct io_pgtable_cfg *);
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
+@@ -1561,16 +1561,16 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain)
.iommu_dev = smmu->dev,
};
- pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
-+ pgtbl_ops = alloc_io_pgtable(fmt, &pgtbl_cfg, smmu_domain);
- if (!pgtbl_ops)
+- if (!pgtbl_ops)
++ iop = alloc_io_pgtable(fmt, &pgtbl_cfg, smmu_domain);
++ if (!iop)
return -ENOMEM;
+ domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
+- smmu_domain->pgtbl_ops = pgtbl_ops;
++ smmu_domain->pgtbl = iop;
+
+ ret = finalise_stage_fn(smmu_domain, &pgtbl_cfg);
+ if (ret < 0)
+- free_io_pgtable_ops(pgtbl_ops);
++ free_io_pgtable(iop);
+
+ return ret;
+ }
+@@ -1708,13 +1708,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);
+- struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
++ struct io_pgtable *iop = smmu_domain->pgtbl;
+
+- if (!ops)
++ if (!iop)
+ return -ENODEV;
+
+ spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
+- ret = ops->map(ops, iova, paddr, size, prot);
++ ret = iop->ops->map(iop, iova, paddr, size, prot);
+ spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
+ return ret;
+ }
+@@ -1725,13 +1725,13 @@ arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova, size_t size)
+ size_t ret;
+ unsigned long flags;
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
+- struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
++ struct io_pgtable *iop = smmu_domain->pgtbl;
+
+- if (!ops)
++ if (!iop)
+ return 0;
+
+ spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
+- ret = ops->unmap(ops, iova, size);
++ ret = iop->ops->unmap(iop, iova, size);
+ spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
+ return ret;
+ }
+@@ -1742,13 +1742,13 @@ arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
+ phys_addr_t ret;
+ unsigned long flags;
+ struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
+- struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
++ struct io_pgtable *iop = smmu_domain->pgtbl;
+
+- if (!ops)
++ if (!iop)
+ return 0;
+
+ spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
+- ret = ops->iova_to_phys(ops, iova);
++ ret = iop->ops->iova_to_phys(iop, iova);
+ spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
+
+ return ret;
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
-index 7c39ac4..c43d295 100644
+index 9345a3f..dc983d1 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
-@@ -349,7 +349,7 @@ enum arm_smmu_domain_stage {
+@@ -389,7 +389,7 @@ enum arm_smmu_domain_stage {
struct arm_smmu_domain {
struct arm_smmu_device *smmu;
@@ -51397,7 +51700,7 @@ index 7c39ac4..c43d295 100644
spinlock_t pgtbl_lock;
struct arm_smmu_cfg cfg;
enum arm_smmu_domain_stage stage;
-@@ -816,7 +816,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -851,7 +851,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
{
int irq, start, ret = 0;
unsigned long ias, oas;
@@ -51406,7 +51709,7 @@ index 7c39ac4..c43d295 100644
struct io_pgtable_cfg pgtbl_cfg;
enum io_pgtable_fmt fmt;
struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
-@@ -908,14 +908,16 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -970,8 +970,8 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
};
smmu_domain->smmu = smmu;
@@ -51417,16 +51720,7 @@ index 7c39ac4..c43d295 100644
ret = -ENOMEM;
goto out_clear_smmu;
}
-
- /* Update our support page sizes to reflect the page table format */
-- arm_smmu_ops.pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
-+ pax_open_kernel();
-+ const_cast(arm_smmu_ops.pgsize_bitmap) = pgtbl_cfg.pgsize_bitmap;
-+ pax_close_kernel();
-
- /* Initialise the context bank with our page table cfg */
- arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
-@@ -936,7 +938,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -998,7 +998,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 */
@@ -51435,7 +51729,7 @@ index 7c39ac4..c43d295 100644
return 0;
out_clear_smmu:
-@@ -969,7 +971,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
+@@ -1031,7 +1031,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
free_irq(irq, domain);
}
@@ -51444,7 +51738,7 @@ index 7c39ac4..c43d295 100644
__arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
}
-@@ -1206,13 +1208,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
+@@ -1268,13 +1268,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);
@@ -51461,7 +51755,7 @@ index 7c39ac4..c43d295 100644
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
return ret;
}
-@@ -1223,13 +1225,13 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
+@@ -1285,13 +1285,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);
@@ -51478,7 +51772,7 @@ index 7c39ac4..c43d295 100644
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
return ret;
}
-@@ -1240,7 +1242,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
+@@ -1302,7 +1302,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;
@@ -51487,7 +51781,7 @@ index 7c39ac4..c43d295 100644
struct device *dev = smmu->dev;
void __iomem *cb_base;
u32 tmp;
-@@ -1261,7 +1263,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
+@@ -1323,7 +1323,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);
@@ -51495,8 +51789,8 @@ index 7c39ac4..c43d295 100644
+ return iop->ops->iova_to_phys(iop, iova);
}
- phys = readl_relaxed(cb_base + ARM_SMMU_CB_PAR_LO);
-@@ -1282,9 +1284,9 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
+ phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
+@@ -1342,9 +1342,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);
@@ -51508,7 +51802,7 @@ index 7c39ac4..c43d295 100644
return 0;
spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
-@@ -1292,7 +1294,7 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
+@@ -1352,7 +1352,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 {
@@ -51517,19 +51811,23 @@ index 7c39ac4..c43d295 100644
}
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
-@@ -1714,7 +1716,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
- size |= SZ_64K | SZ_512M;
- }
+@@ -1829,10 +1829,12 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
+ if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
+ smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
-- arm_smmu_ops.pgsize_bitmap &= size;
+ pax_open_kernel();
-+ const_cast(arm_smmu_ops.pgsize_bitmap) &= size;
+ if (arm_smmu_ops.pgsize_bitmap == -1UL)
+- arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
++ const_cast(arm_smmu_ops.pgsize_bitmap) = smmu->pgsize_bitmap;
+ else
+- arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
++ const_cast(arm_smmu_ops.pgsize_bitmap) |= smmu->pgsize_bitmap;
+ pax_close_kernel();
- dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n", size);
+ dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
+ smmu->pgsize_bitmap);
- 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
+index 8c61399..a141537 100644
--- a/drivers/iommu/io-pgtable-arm-v7s.c
+++ b/drivers/iommu/io-pgtable-arm-v7s.c
@@ -49,9 +49,6 @@
@@ -51542,7 +51840,7 @@ index 9488e3c..1411569 100644
/*
* 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,
+@@ -424,11 +421,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);
}
@@ -51556,7 +51854,7 @@ index 9488e3c..1411569 100644
int ret;
/* If no access, then nothing to do */
-@@ -580,10 +576,10 @@ static int __arm_v7s_unmap(struct arm_v7s_io_pgtable *data,
+@@ -591,10 +587,10 @@ static int __arm_v7s_unmap(struct arm_v7s_io_pgtable *data,
return __arm_v7s_unmap(data, iova, size, lvl + 1, ptep);
}
@@ -51569,7 +51867,7 @@ index 9488e3c..1411569 100644
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,
+@@ -604,10 +600,10 @@ static int arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova,
return unmapped;
}
@@ -51582,7 +51880,7 @@ index 9488e3c..1411569 100644
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,
+@@ -626,6 +622,12 @@ static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable_ops *ops,
return (pte & mask) | (iova & ~mask);
}
@@ -51595,7 +51893,7 @@ index 9488e3c..1411569 100644
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,
+@@ -656,11 +658,7 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
if (!data->l2_tables)
goto out_free_data;
@@ -51608,7 +51906,7 @@ index 9488e3c..1411569 100644
/* 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 = {
+@@ -749,7 +747,7 @@ static struct iommu_gather_ops dummy_tlb_ops = {
static int __init arm_v7s_do_selftests(void)
{
@@ -51617,7 +51915,7 @@ index 9488e3c..1411569 100644
struct io_pgtable_cfg cfg = {
.tlb = &dummy_tlb_ops,
.oas = 32,
-@@ -747,8 +745,8 @@ static int __init arm_v7s_do_selftests(void)
+@@ -764,8 +762,8 @@ static int __init arm_v7s_do_selftests(void)
cfg_cookie = &cfg;
@@ -51628,7 +51926,7 @@ index 9488e3c..1411569 100644
pr_err("selftest: failed to allocate io pgtable ops\n");
return -EINVAL;
}
-@@ -757,13 +755,13 @@ static int __init arm_v7s_do_selftests(void)
+@@ -774,13 +772,13 @@ static int __init arm_v7s_do_selftests(void)
* Initial sanity checks.
* Empty page tables shouldn't provide any translations.
*/
@@ -51645,7 +51943,7 @@ index 9488e3c..1411569 100644
return __FAIL(ops);
/*
-@@ -773,18 +771,18 @@ static int __init arm_v7s_do_selftests(void)
+@@ -790,18 +788,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;
@@ -51667,7 +51965,7 @@ index 9488e3c..1411569 100644
return __FAIL(ops);
iova += SZ_16M;
-@@ -798,14 +796,14 @@ static int __init arm_v7s_do_selftests(void)
+@@ -815,14 +813,14 @@ static int __init arm_v7s_do_selftests(void)
size = 1UL << __ffs(cfg.pgsize_bitmap);
while (i < loopnr) {
iova_start = i * SZ_16M;
@@ -51685,7 +51983,7 @@ index 9488e3c..1411569 100644
!= (size + 42))
return __FAIL(ops);
i++;
-@@ -817,17 +815,17 @@ static int __init arm_v7s_do_selftests(void)
+@@ -834,17 +832,17 @@ static int __init arm_v7s_do_selftests(void)
while (i != BITS_PER_LONG) {
size = 1UL << i;
@@ -51707,7 +52005,7 @@ index 9488e3c..1411569 100644
return __FAIL(ops);
iova += SZ_16M;
-@@ -835,7 +833,7 @@ static int __init arm_v7s_do_selftests(void)
+@@ -852,7 +850,7 @@ static int __init arm_v7s_do_selftests(void)
i = find_next_bit(&cfg.pgsize_bitmap, BITS_PER_LONG, i);
}
@@ -51717,7 +52015,7 @@ index 9488e3c..1411569 100644
selftest_running = false;
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
-index f433b51..5cc8f88 100644
+index a1ed1b7..3df0f22 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -39,9 +39,6 @@
@@ -51730,7 +52028,7 @@ index f433b51..5cc8f88 100644
/*
* For consistency with the architecture, we always consider
* ARM_LPAE_MAX_LEVELS levels, with the walk starting at level n >=0
-@@ -376,10 +373,10 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data,
+@@ -381,10 +378,10 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data,
return pte;
}
@@ -51743,7 +52041,7 @@ index f433b51..5cc8f88 100644
arm_lpae_iopte *ptep = data->pgd;
int ret, lvl = ARM_LPAE_START_LVL(data);
arm_lpae_iopte prot;
-@@ -525,11 +522,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
+@@ -530,11 +527,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep);
}
@@ -51757,7 +52055,7 @@ index f433b51..5cc8f88 100644
arm_lpae_iopte *ptep = data->pgd;
int lvl = ARM_LPAE_START_LVL(data);
-@@ -540,10 +537,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
+@@ -545,10 +542,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
return unmapped;
}
@@ -51770,7 +52068,7 @@ index f433b51..5cc8f88 100644
arm_lpae_iopte pte, *ptep = data->pgd;
int lvl = ARM_LPAE_START_LVL(data);
-@@ -610,6 +607,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg)
+@@ -615,6 +612,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg)
}
}
@@ -51783,7 +52081,7 @@ index f433b51..5cc8f88 100644
static struct arm_lpae_io_pgtable *
arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
{
-@@ -646,11 +649,7 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
+@@ -651,11 +654,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)));
@@ -51796,7 +52094,7 @@ index f433b51..5cc8f88 100644
return data;
}
-@@ -911,15 +910,15 @@ static void dummy_tlb_sync(void *cookie)
+@@ -916,15 +915,15 @@ static void dummy_tlb_sync(void *cookie)
WARN_ON(cookie != cfg_cookie);
}
@@ -51815,7 +52113,7 @@ index f433b51..5cc8f88 100644
struct io_pgtable_cfg *cfg = &data->iop.cfg;
pr_err("cfg: pgsize_bitmap 0x%lx, ias %u-bit\n",
-@@ -929,9 +928,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops)
+@@ -934,9 +933,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops)
data->bits_per_level, data->pgd);
}
@@ -51827,7 +52125,7 @@ index f433b51..5cc8f88 100644
selftest_running = false; \
-EFAULT; \
})
-@@ -946,30 +945,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -951,30 +950,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
int i, j;
unsigned long iova;
size_t size;
@@ -51869,7 +52167,7 @@ index f433b51..5cc8f88 100644
/*
* Distinct mappings of different granule sizes.
-@@ -979,19 +980,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -984,19 +985,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
while (j != BITS_PER_LONG) {
size = 1UL << j;
@@ -51895,7 +52193,7 @@ index f433b51..5cc8f88 100644
iova += SZ_1G;
j++;
-@@ -1000,15 +1001,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -1005,15 +1006,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
/* Partial unmap */
size = 1UL << __ffs(cfg->pgsize_bitmap);
@@ -51917,7 +52215,7 @@ index f433b51..5cc8f88 100644
/* Full unmap */
iova = 0;
-@@ -1016,25 +1017,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -1021,25 +1022,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
while (j != BITS_PER_LONG) {
size = 1UL << j;
@@ -51953,10 +52251,10 @@ index f433b51..5cc8f88 100644
selftest_running = false;
diff --git a/drivers/iommu/io-pgtable.c b/drivers/iommu/io-pgtable.c
-index 876f6a7..cb29f0f 100644
+index 127558d..bc60b81 100644
--- a/drivers/iommu/io-pgtable.c
+++ b/drivers/iommu/io-pgtable.c
-@@ -38,7 +38,7 @@ io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] =
+@@ -37,7 +37,7 @@ io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] = {
#endif
};
@@ -51965,7 +52263,7 @@ index 876f6a7..cb29f0f 100644
struct io_pgtable_cfg *cfg,
void *cookie)
{
-@@ -60,21 +60,18 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt,
+@@ -59,21 +59,18 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt,
iop->cookie = cookie;
iop->cfg = *cfg;
@@ -51991,10 +52289,10 @@ index 876f6a7..cb29f0f 100644
io_pgtable_init_table[iop->fmt]->free(iop);
}
diff --git a/drivers/iommu/io-pgtable.h b/drivers/iommu/io-pgtable.h
-index d4f5027..0265cd8 100644
+index 969d82c..1ba9b6e 100644
--- a/drivers/iommu/io-pgtable.h
+++ b/drivers/iommu/io-pgtable.h
-@@ -103,17 +103,18 @@ struct io_pgtable_cfg {
+@@ -109,17 +109,18 @@ struct io_pgtable_cfg {
* These functions map directly onto the iommu_ops member functions with
* the same names.
*/
@@ -52017,7 +52315,7 @@ index d4f5027..0265cd8 100644
*
* @fmt: The page table format.
* @cfg: The page table configuration. This will be modified to represent
-@@ -122,9 +123,9 @@ struct io_pgtable_ops {
+@@ -128,9 +129,9 @@ struct io_pgtable_ops {
* @cookie: An opaque token provided by the IOMMU driver and passed back to
* the callback routines in cfg->tlb.
*/
@@ -52030,7 +52328,7 @@ index d4f5027..0265cd8 100644
/**
* free_io_pgtable_ops() - Free an io_pgtable_ops structure. The caller
-@@ -133,7 +134,7 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt,
+@@ -139,7 +140,7 @@ struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt,
*
* @ops: The ops returned from alloc_io_pgtable_ops.
*/
@@ -52039,7 +52337,7 @@ index d4f5027..0265cd8 100644
/*
-@@ -155,11 +156,9 @@ struct io_pgtable {
+@@ -161,11 +162,9 @@ struct io_pgtable {
void *cookie;
bool tlb_sync_pending;
struct io_pgtable_cfg cfg;
@@ -52053,10 +52351,10 @@ index d4f5027..0265cd8 100644
{
iop->cfg.tlb->tlb_flush_all(iop->cookie);
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
-index b9df141..7c67a2d 100644
+index 3000051..b26bce1 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
-@@ -957,7 +957,7 @@ static int iommu_bus_notifier(struct notifier_block *nb,
+@@ -953,7 +953,7 @@ static int iommu_bus_notifier(struct notifier_block *nb,
static int iommu_bus_init(struct bus_type *bus, const struct iommu_ops *ops)
{
int err;
@@ -52125,7 +52423,7 @@ index 2fdbac6..7095311 100644
static int ipmmu_find_utlbs(struct ipmmu_vmsa_device *mmu, struct device *dev,
diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
-index 8adaaea..99dab8e 100644
+index 49721b4..62874d3 100644
--- a/drivers/iommu/irq_remapping.c
+++ b/drivers/iommu/irq_remapping.c
@@ -153,7 +153,7 @@ int __init irq_remap_enable_fault_handling(void)
@@ -52138,10 +52436,10 @@ 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
+index c3043d8..3243e9c 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
-@@ -110,7 +110,7 @@ struct mtk_iommu_domain {
+@@ -111,7 +111,7 @@ struct mtk_iommu_domain {
spinlock_t pgtlock; /* lock for page table */
struct io_pgtable_cfg cfg;
@@ -52150,26 +52448,16 @@ index 929a66a..4e61ad0 100644
struct iommu_domain domain;
};
-@@ -257,14 +257,16 @@ static int mtk_iommu_domain_finalise(struct mtk_iommu_data *data)
- .iommu_dev = data->dev,
- };
+@@ -262,7 +262,7 @@ static int mtk_iommu_domain_finalise(struct mtk_iommu_data *data)
+ if (data->enable_4GB)
+ dom->cfg.quirks |= IO_PGTABLE_QUIRK_ARM_MTK_4GB;
- 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,
+@@ -355,7 +355,7 @@ static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova,
int ret;
spin_lock_irqsave(&dom->pgtlock, flags);
@@ -52178,7 +52466,7 @@ index 929a66a..4e61ad0 100644
spin_unlock_irqrestore(&dom->pgtlock, flags);
return ret;
-@@ -364,7 +366,7 @@ static size_t mtk_iommu_unmap(struct iommu_domain *domain,
+@@ -369,7 +369,7 @@ static size_t mtk_iommu_unmap(struct iommu_domain *domain,
size_t unmapsz;
spin_lock_irqsave(&dom->pgtlock, flags);
@@ -52187,7 +52475,7 @@ index 929a66a..4e61ad0 100644
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,
+@@ -383,7 +383,7 @@ static phys_addr_t mtk_iommu_iova_to_phys(struct iommu_domain *domain,
phys_addr_t pa;
spin_lock_irqsave(&dom->pgtlock, flags);
@@ -52196,7 +52484,7 @@ index 929a66a..4e61ad0 100644
spin_unlock_irqrestore(&dom->pgtlock, flags);
return pa;
-@@ -654,7 +656,7 @@ static int mtk_iommu_remove(struct platform_device *pdev)
+@@ -662,7 +662,7 @@ static int mtk_iommu_remove(struct platform_device *pdev)
if (iommu_present(&platform_bus_type))
bus_set_iommu(&platform_bus_type, NULL);
@@ -52206,10 +52494,10 @@ index 929a66a..4e61ad0 100644
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 5c4da58..54606f1 100644
+index fbc4ae2..36c69ec 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)
+@@ -392,7 +392,7 @@ static void gic_handle_cascade_irq(struct irq_desc *desc)
chained_irq_exit(chip, desc);
}
@@ -53661,10 +53949,10 @@ 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 947d5c9..d75f751 100644
+index 63eaa0a..00a663c 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)
+@@ -1499,9 +1499,9 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp)
#ifdef ISDN_DEBUG_MODEM_OPEN
printk(KERN_DEBUG "isdn_tty_open %s, count = %d\n", tty->name,
@@ -53676,7 +53964,7 @@ index 947d5c9..d75f751 100644
port->tty = tty;
/*
* Start up serial port
-@@ -1549,7 +1549,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
+@@ -1545,7 +1545,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
#endif
return;
}
@@ -53685,7 +53973,7 @@ index 947d5c9..d75f751 100644
/*
* Uh, oh. tty->count is 1, which means that the tty
* structure will be freed. Info->count should always
-@@ -1558,15 +1558,15 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
+@@ -1554,15 +1554,15 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
* serial port won't be shutdown.
*/
printk(KERN_ERR "isdn_tty_close: bad port count; tty->count is 1, "
@@ -53707,16 +53995,16 @@ index 947d5c9..d75f751 100644
#ifdef ISDN_DEBUG_MODEM_OPEN
printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n");
#endif
-@@ -1621,7 +1621,7 @@ isdn_tty_hangup(struct tty_struct *tty)
+@@ -1617,7 +1617,7 @@ isdn_tty_hangup(struct tty_struct *tty)
if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_hangup"))
return;
isdn_tty_shutdown(info);
- port->count = 0;
+ atomic_set(&port->count, 0);
- port->flags &= ~ASYNC_NORMAL_ACTIVE;
+ tty_port_set_active(port, 0);
port->tty = NULL;
wake_up_interruptible(&port->open_wait);
-@@ -1966,7 +1966,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup)
+@@ -1962,7 +1962,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];
@@ -53726,7 +54014,7 @@ index 947d5c9..d75f751 100644
if ((info->emu.mdmreg[REG_SI1] & si2bit[si1]) && /* SI1 is matching */
(info->emu.mdmreg[REG_SI2] == si2)) { /* SI2 is matching */
diff --git a/drivers/isdn/i4l/isdn_x25iface.c b/drivers/isdn/i4l/isdn_x25iface.c
-index e2d4e58..40cd045 100644
+index 0c5d8de..ba60076 100644
--- a/drivers/isdn/i4l/isdn_x25iface.c
+++ b/drivers/isdn/i4l/isdn_x25iface.c
@@ -53,14 +53,14 @@ static int isdn_x25iface_disconn_ind(struct concap_proto *);
@@ -53903,7 +54191,7 @@ index 0f9ed1e..492789f 100644
.callback = clevo_mail_led_dmi_callback,
.ident = "Clevo D410J",
diff --git a/drivers/leds/leds-ss4200.c b/drivers/leds/leds-ss4200.c
-index 046cb70..79757fd 100644
+index 732eb86..a9db867 100644
--- a/drivers/leds/leds-ss4200.c
+++ b/drivers/leds/leds-ss4200.c
@@ -91,7 +91,7 @@ MODULE_PARM_DESC(nodetect, "Skip DMI-based hardware detection");
@@ -53959,7 +54247,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 adc162c..5ecc00b 100644
+index 6e9042e..befd030 100644
--- a/drivers/lguest/x86/core.c
+++ b/drivers/lguest/x86/core.c
@@ -60,7 +60,7 @@ static struct {
@@ -54066,7 +54354,7 @@ 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 3ab6495..457e2ea 100644
+index 2103e97..dc6e50c 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -241,7 +241,7 @@ static void rrpc_put_blks(struct rrpc *rrpc)
@@ -54078,8 +54366,8 @@ index 3ab6495..457e2ea 100644
return &rrpc->luns[next % rrpc->nr_luns];
}
-@@ -1390,7 +1390,7 @@ static void *rrpc_init(struct nvm_dev *dev, struct gendisk *tdisk,
- rrpc->nr_luns = lun_end - lun_begin + 1;
+@@ -1388,7 +1388,7 @@ static void *rrpc_init(struct nvm_dev *dev, struct gendisk *tdisk,
+ rrpc->nr_sects = (unsigned long long)dev->sec_per_lun * rrpc->nr_luns;
/* simple round-robin strategy */
- atomic_set(&rrpc->next_lun, -1);
@@ -54088,7 +54376,7 @@ index 3ab6495..457e2ea 100644
ret = rrpc_area_init(rrpc, &soffset);
if (ret < 0) {
diff --git a/drivers/lightnvm/rrpc.h b/drivers/lightnvm/rrpc.h
-index 2653484..d581105 100644
+index 87e84b5..3635ab8 100644
--- a/drivers/lightnvm/rrpc.h
+++ b/drivers/lightnvm/rrpc.h
@@ -111,7 +111,7 @@ struct rrpc {
@@ -54113,10 +54401,10 @@ index 4d20088..de60cb2 100644
Keeps all active closures in a linked list and provides a debugfs
interface to list them, which makes it possible to see asynchronous
diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
-index 8eeab72..292b65d 100644
+index ca4abe1..0b029ef 100644
--- a/drivers/md/bcache/alloc.c
+++ b/drivers/md/bcache/alloc.c
-@@ -633,7 +633,7 @@ bool bch_alloc_sectors(struct cache_set *c, struct bkey *k, unsigned sectors,
+@@ -631,7 +631,7 @@ bool bch_alloc_sectors(struct cache_set *c, struct bkey *k, unsigned sectors,
for (i = 0; i < KEY_PTRS(&b->key); i++) {
SET_PTR_OFFSET(&b->key, i, PTR_OFFSET(&b->key, i) + sectors);
@@ -54148,10 +54436,10 @@ index 6b420a5..d5acb8f 100644
struct gc_stat {
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
-index 22b9e34..d8406e7 100644
+index eab505e..a848c16 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
-@@ -337,15 +337,17 @@ static void btree_complete_write(struct btree *b, struct btree_write *w)
+@@ -336,15 +336,17 @@ static void btree_complete_write(struct btree *b, struct btree_write *w)
w->journal = NULL;
}
@@ -54171,7 +54459,7 @@ index 22b9e34..d8406e7 100644
struct btree *b = container_of(cl, struct btree, io);
struct btree_write *w = btree_prev_write(b);
-@@ -359,8 +361,9 @@ static void __btree_node_write_done(struct closure *cl)
+@@ -358,8 +360,9 @@ static void __btree_node_write_done(struct closure *cl)
closure_return_with_destructor(cl, btree_node_write_unlock);
}
@@ -54182,7 +54470,7 @@ index 22b9e34..d8406e7 100644
struct btree *b = container_of(cl, struct btree, io);
struct bio_vec *bv;
int n;
-@@ -368,7 +371,7 @@ static void btree_node_write_done(struct closure *cl)
+@@ -367,7 +370,7 @@ static void btree_node_write_done(struct closure *cl)
bio_for_each_segment_all(bv, b->bio, n)
__free_page(bv->bv_page);
@@ -54191,7 +54479,7 @@ index 22b9e34..d8406e7 100644
}
static void btree_node_write_endio(struct bio *bio)
-@@ -468,7 +471,7 @@ void __bch_btree_node_write(struct btree *b, struct closure *parent)
+@@ -467,7 +470,7 @@ void __bch_btree_node_write(struct btree *b, struct closure *parent)
do_btree_node_write(b);
@@ -54740,7 +55028,7 @@ index adbff14..018c2d2 100644
struct cache_stat_collector collector;
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
-index a296425..c5d881c 100644
+index f5dbb4e..26a4c2e 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -241,8 +241,9 @@ static void __write_super(struct cache_sb *sb, struct bio *bio)
@@ -54905,10 +55193,10 @@ index b3ff57d..b2e30fb 100644
return size;
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
-index b9346cd..708ea8f 100644
+index 6012367..f45567b 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
-@@ -118,14 +118,16 @@ static void dirty_init(struct keybuf_key *w)
+@@ -117,14 +117,16 @@ static void dirty_init(struct keybuf_key *w)
bch_bio_map(bio, NULL);
}
@@ -54927,7 +55215,7 @@ index b9346cd..708ea8f 100644
struct dirty_io *io = container_of(cl, struct dirty_io, cl);
struct keybuf_key *w = io->bio.bi_private;
struct cached_dev *dc = io->dc;
-@@ -177,8 +179,9 @@ static void dirty_endio(struct bio *bio)
+@@ -176,8 +178,9 @@ static void dirty_endio(struct bio *bio)
closure_put(&io->cl);
}
@@ -54938,7 +55226,7 @@ index b9346cd..708ea8f 100644
struct dirty_io *io = container_of(cl, struct dirty_io, cl);
struct keybuf_key *w = io->bio.bi_private;
-@@ -204,8 +207,9 @@ static void read_dirty_endio(struct bio *bio)
+@@ -203,8 +206,9 @@ static void read_dirty_endio(struct bio *bio)
dirty_endio(bio);
}
@@ -54950,10 +55238,10 @@ index b9346cd..708ea8f 100644
closure_bio_submit(&io->bio, cl);
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
-index 3fe86b5..fd3b459 100644
+index d8129ec..4d96ec3 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
-@@ -1928,7 +1928,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
+@@ -1965,7 +1965,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
chunk_kb ? "KB" : "B");
if (bitmap->storage.file) {
seq_printf(seq, ", file: ");
@@ -55262,7 +55550,7 @@ index ee0510f..69457f6 100644
if (writethrough_mode(&cache->features))
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
-index 2adf81d..c3e8e3c 100644
+index 2c7ca25..ada556c 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1774,7 +1774,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param)
@@ -55274,11 +55562,69 @@ index 2adf81d..c3e8e3c 100644
if (!*param->name) {
DMWARN("name not supplied when creating device");
return -EINVAL;
+diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
+index 52baf8a..d331c6f 100644
+--- a/drivers/md/dm-mpath.c
++++ b/drivers/md/dm-mpath.c
+@@ -87,7 +87,7 @@ struct multipath {
+
+ atomic_t nr_valid_paths; /* Total number of usable paths */
+ atomic_t pg_init_in_progress; /* Only one pg_init allowed at once */
+- atomic_t pg_init_count; /* Number of times pg_init called */
++ atomic_unchecked_t pg_init_count;/* Number of times pg_init called */
+
+ /*
+ * We must use a mempool of dm_mpath_io structs so that we
+@@ -196,7 +196,7 @@ static struct multipath *alloc_multipath(struct dm_target *ti, bool use_blk_mq)
+ set_bit(MPATHF_QUEUE_IO, &m->flags);
+ atomic_set(&m->nr_valid_paths, 0);
+ atomic_set(&m->pg_init_in_progress, 0);
+- atomic_set(&m->pg_init_count, 0);
++ atomic_set_unchecked(&m->pg_init_count, 0);
+ m->pg_init_delay_msecs = DM_PG_INIT_DELAY_DEFAULT;
+ INIT_WORK(&m->trigger_event, trigger_event);
+ init_waitqueue_head(&m->pg_init_wait);
+@@ -284,7 +284,7 @@ static int __pg_init_all_paths(struct multipath *m)
+ if (atomic_read(&m->pg_init_in_progress) || test_bit(MPATHF_PG_INIT_DISABLED, &m->flags))
+ return 0;
+
+- atomic_inc(&m->pg_init_count);
++ atomic_inc_unchecked(&m->pg_init_count);
+ clear_bit(MPATHF_PG_INIT_REQUIRED, &m->flags);
+
+ /* Check here to reset pg_init_required */
+@@ -330,7 +330,7 @@ static void __switch_pg(struct multipath *m, struct priority_group *pg)
+ clear_bit(MPATHF_QUEUE_IO, &m->flags);
+ }
+
+- atomic_set(&m->pg_init_count, 0);
++ atomic_set_unchecked(&m->pg_init_count, 0);
+ }
+
+ static struct pgpath *choose_path_in_pg(struct multipath *m,
+@@ -1195,7 +1195,7 @@ static bool pg_init_limit_reached(struct multipath *m, struct pgpath *pgpath)
+
+ spin_lock_irqsave(&m->lock, flags);
+
+- if (atomic_read(&m->pg_init_count) <= m->pg_init_retries &&
++ if (atomic_read_unchecked(&m->pg_init_count) <= m->pg_init_retries &&
+ !test_bit(MPATHF_PG_INIT_DISABLED, &m->flags))
+ set_bit(MPATHF_PG_INIT_REQUIRED, &m->flags);
+ else
+@@ -1449,7 +1449,7 @@ static void multipath_status(struct dm_target *ti, status_type_t type,
+ /* Features */
+ if (type == STATUSTYPE_INFO)
+ DMEMIT("2 %u %u ", test_bit(MPATHF_QUEUE_IO, &m->flags),
+- atomic_read(&m->pg_init_count));
++ atomic_read_unchecked(&m->pg_init_count));
+ else {
+ DMEMIT("%u ", test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) +
+ (m->pg_init_retries > 0) * 2 +
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
-index a090121..9f14702 100644
+index 5253274..01585f7 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
-@@ -1452,7 +1452,7 @@ static void raid_status(struct dm_target *ti, status_type_t type,
+@@ -1457,7 +1457,7 @@ static void raid_status(struct dm_target *ti, status_type_t type,
DMEMIT(" %llu",
(strcmp(rs->md.last_sync_action, "check")) ? 0 :
(unsigned long long)
@@ -55439,7 +55785,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 f9e8f0b..a305122 100644
+index 626a5ec..158a89c 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,
@@ -55474,7 +55820,7 @@ index 43824d7..fb6a7b0 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 3d3ac13..4a7d0f3 100644
+index 1b2f962..e2efabd 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -170,8 +170,8 @@ struct mapped_device {
@@ -55525,7 +55871,7 @@ index 3d3ac13..4a7d0f3 100644
{
rcu_read_unlock();
}
-@@ -2371,8 +2375,8 @@ static struct mapped_device *alloc_dev(int minor)
+@@ -2369,8 +2373,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);
@@ -55536,7 +55882,7 @@ index 3d3ac13..4a7d0f3 100644
INIT_LIST_HEAD(&md->uevent_list);
INIT_LIST_HEAD(&md->table_devices);
spin_lock_init(&md->uevent_lock);
-@@ -2515,7 +2519,7 @@ static void event_callback(void *context)
+@@ -2513,7 +2517,7 @@ static void event_callback(void *context)
dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj);
@@ -55545,7 +55891,7 @@ index 3d3ac13..4a7d0f3 100644
wake_up(&md->eventq);
}
-@@ -3453,18 +3457,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
+@@ -3451,18 +3455,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
uint32_t dm_next_uevent_seq(struct mapped_device *md)
{
@@ -55568,7 +55914,7 @@ index 3d3ac13..4a7d0f3 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 85b16aa..99b84b1 100644
+index 866825f..0c08c28 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -198,10 +198,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
@@ -55602,7 +55948,7 @@ index 85b16aa..99b84b1 100644
sb->raid_disks = cpu_to_le32(mddev->raid_disks);
sb->size = cpu_to_le64(mddev->dev_sectors);
-@@ -2714,7 +2714,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store);
+@@ -2715,7 +2715,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store);
static ssize_t
errors_show(struct md_rdev *rdev, char *page)
{
@@ -55611,7 +55957,7 @@ index 85b16aa..99b84b1 100644
}
static ssize_t
-@@ -2726,7 +2726,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
+@@ -2727,7 +2727,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
rv = kstrtouint(buf, 10, &n);
if (rv < 0)
return rv;
@@ -55620,7 +55966,7 @@ index 85b16aa..99b84b1 100644
return len;
}
static struct rdev_sysfs_entry rdev_errors =
-@@ -3176,8 +3176,8 @@ int md_rdev_init(struct md_rdev *rdev)
+@@ -3177,8 +3177,8 @@ int md_rdev_init(struct md_rdev *rdev)
rdev->sb_loaded = 0;
rdev->bb_page = NULL;
atomic_set(&rdev->nr_pending, 0);
@@ -55631,7 +55977,7 @@ index 85b16aa..99b84b1 100644
INIT_LIST_HEAD(&rdev->same_set);
init_waitqueue_head(&rdev->blocked_wait);
-@@ -4394,7 +4394,7 @@ mismatch_cnt_show(struct mddev *mddev, char *page)
+@@ -4395,7 +4395,7 @@ mismatch_cnt_show(struct mddev *mddev, char *page)
{
return sprintf(page, "%llu\n",
(unsigned long long)
@@ -55640,7 +55986,7 @@ index 85b16aa..99b84b1 100644
}
static struct md_sysfs_entry md_mismatches = __ATTR_RO(mismatch_cnt);
-@@ -5082,7 +5082,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data)
+@@ -5087,7 +5087,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data)
return NULL;
}
@@ -55649,7 +55995,7 @@ index 85b16aa..99b84b1 100644
{
/* val must be "md_*" where * is not all digits.
* We allocate an array with a large free minor number, and
-@@ -5432,7 +5432,7 @@ static void md_clean(struct mddev *mddev)
+@@ -5437,7 +5437,7 @@ static void md_clean(struct mddev *mddev)
mddev->new_layout = 0;
mddev->new_chunk_sectors = 0;
mddev->curr_resync = 0;
@@ -55658,7 +56004,7 @@ index 85b16aa..99b84b1 100644
mddev->suspend_lo = mddev->suspend_hi = 0;
mddev->sync_speed_min = mddev->sync_speed_max = 0;
mddev->recovery = 0;
-@@ -5846,9 +5846,10 @@ static int get_array_info(struct mddev *mddev, void __user *arg)
+@@ -5851,9 +5851,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;
@@ -55671,7 +56017,7 @@ index 85b16aa..99b84b1 100644
info.nr_disks = nr;
info.raid_disks = mddev->raid_disks;
info.md_minor = mddev->md_minor;
-@@ -7411,7 +7412,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
+@@ -7420,7 +7421,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
spin_unlock(&pers_lock);
seq_printf(seq, "\n");
@@ -55680,7 +56026,7 @@ index 85b16aa..99b84b1 100644
return 0;
}
if (v == (void*)2) {
-@@ -7511,7 +7512,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
+@@ -7520,7 +7521,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
return error;
seq = file->private_data;
@@ -55689,7 +56035,7 @@ index 85b16aa..99b84b1 100644
return error;
}
-@@ -7528,7 +7529,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
+@@ -7537,7 +7538,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
/* always allow read */
mask = POLLIN | POLLRDNORM;
@@ -55698,7 +56044,7 @@ index 85b16aa..99b84b1 100644
mask |= POLLERR | POLLPRI;
return mask;
}
-@@ -7628,7 +7629,7 @@ static int is_mddev_idle(struct mddev *mddev, int init)
+@@ -7637,7 +7638,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]) -
@@ -55707,7 +56053,7 @@ index 85b16aa..99b84b1 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.
-@@ -7879,7 +7880,7 @@ void md_do_sync(struct md_thread *thread)
+@@ -7901,7 +7902,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;
@@ -55716,7 +56062,7 @@ index 85b16aa..99b84b1 100644
/* we don't use the checkpoint if there's a bitmap */
if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
j = mddev->resync_min;
-@@ -8875,11 +8876,11 @@ static __exit void md_exit(void)
+@@ -8895,11 +8896,11 @@ static __exit void md_exit(void)
subsys_initcall(md_init);
module_exit(md_exit)
@@ -55803,7 +56149,7 @@ index 3e6d115..ffecdeb 100644
/*----------------------------------------------------------------*/
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index a7f2b9c..38362f6 100644
+index c7c8cde..913b672 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)
@@ -55843,7 +56189,7 @@ index a7f2b9c..38362f6 100644
"md/raid1:%s: read error corrected "
"(%d sectors at %llu on %s)\n",
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
-index e3fd725..9e365b2 100644
+index c7de2a5..b476a79 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -1068,7 +1068,7 @@ static void __make_request(struct mddev *mddev, struct bio *bio)
@@ -55924,7 +56270,7 @@ index e3fd725..9e365b2 100644
rdev_dec_pending(rdev, mddev);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
-index e48c262..e88ac00 100644
+index 8959e6d..b90f4e1 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,
@@ -56047,7 +56393,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 e1684c5..3fc5b59 100644
+index 75a3f4b..06b70a3 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,
@@ -56367,10 +56713,10 @@ index 4ab6586..e1c352e 100644
unsigned int p2m_timeouts;
diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c b/drivers/media/pci/sta2x11/sta2x11_vip.c
-index 753411c..e3498f8 100644
+index 1fc195f..8fe473b 100644
--- a/drivers/media/pci/sta2x11/sta2x11_vip.c
+++ b/drivers/media/pci/sta2x11/sta2x11_vip.c
-@@ -786,8 +786,9 @@ static struct video_device video_dev_template = {
+@@ -778,8 +778,9 @@ static struct video_device video_dev_template = {
*
* IRQ_HANDLED, interrupt done.
*/
@@ -56381,7 +56727,7 @@ index 753411c..e3498f8 100644
unsigned int status;
status = reg_read(vip, DVP_ITS);
-@@ -1079,7 +1080,7 @@ static int sta2x11_vip_init_one(struct pci_dev *pdev,
+@@ -1071,7 +1072,7 @@ static int sta2x11_vip_init_one(struct pci_dev *pdev,
spin_lock_init(&vip->slock);
ret = request_irq(pdev->irq,
@@ -56458,19 +56804,6 @@ index 80caa70..d076ecf 100644
vma->vm_ops = &zoran_vm_ops;
vma->vm_flags |= VM_DONTEXPAND;
-diff --git a/drivers/media/platform/am437x/am437x-vpfe.c b/drivers/media/platform/am437x/am437x-vpfe.c
-index de32e3a..e6a7bff 100644
---- a/drivers/media/platform/am437x/am437x-vpfe.c
-+++ b/drivers/media/platform/am437x/am437x-vpfe.c
-@@ -1706,7 +1706,7 @@ static int vpfe_get_app_input_index(struct vpfe_device *vpfe,
- sdinfo = &cfg->sub_devs[i];
- client = v4l2_get_subdevdata(sdinfo->sd);
- if (client->addr == curr_client->addr &&
-- client->adapter->nr == client->adapter->nr) {
-+ client->adapter->nr == curr_client->adapter->nr) {
- if (vpfe->current_input >= 1)
- return -1;
- *app_input_index = j + vpfe->current_input;
diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c
index 70c28d1..ff21b13 100644
--- a/drivers/media/platform/omap/omap_vout.c
@@ -56508,7 +56841,7 @@ index 70c28d1..ff21b13 100644
videobuf_queue_dma_contig_init(q, &video_vbq_ops, q->dev,
diff --git a/drivers/media/platform/s5p-tv/mixer.h b/drivers/media/platform/s5p-tv/mixer.h
-index 42cd270..b8ebb97 100644
+index 4dd62a9..ec811d0 100644
--- a/drivers/media/platform/s5p-tv/mixer.h
+++ b/drivers/media/platform/s5p-tv/mixer.h
@@ -156,7 +156,7 @@ struct mxr_layer {
@@ -56521,15 +56854,15 @@ index 42cd270..b8ebb97 100644
const struct mxr_format **fmt_array;
/** size of format array */
diff --git a/drivers/media/platform/s5p-tv/mixer_grp_layer.c b/drivers/media/platform/s5p-tv/mixer_grp_layer.c
-index db3163b2..d7a6b4d 100644
+index d4d2564..f4570ea 100644
--- a/drivers/media/platform/s5p-tv/mixer_grp_layer.c
+++ b/drivers/media/platform/s5p-tv/mixer_grp_layer.c
@@ -235,7 +235,7 @@ struct mxr_layer *mxr_graph_layer_create(struct mxr_device *mdev, int idx)
{
struct mxr_layer *layer;
int ret;
-- struct mxr_layer_ops ops = {
-+ static struct mxr_layer_ops ops = {
+- const struct mxr_layer_ops ops = {
++ static const struct mxr_layer_ops ops = {
.release = mxr_graph_layer_release,
.buffer_set = mxr_graph_buffer_set,
.stream_set = mxr_graph_stream_set,
@@ -56547,7 +56880,7 @@ index a0ec14a..225f4ac 100644
if (done && done != layer->shadow_buf)
vb2_buffer_done(&done->vb.vb2_buf, VB2_BUF_STATE_DONE);
diff --git a/drivers/media/platform/s5p-tv/mixer_video.c b/drivers/media/platform/s5p-tv/mixer_video.c
-index d9e7f03..2732585 100644
+index 7ab5578..88024b5 100644
--- a/drivers/media/platform/s5p-tv/mixer_video.c
+++ b/drivers/media/platform/s5p-tv/mixer_video.c
@@ -210,7 +210,7 @@ static void mxr_layer_default_geo(struct mxr_layer *layer)
@@ -56647,15 +56980,15 @@ index d9e7f03..2732585 100644
spin_lock_init(&layer->enq_slock);
INIT_LIST_HEAD(&layer->enq_list);
diff --git a/drivers/media/platform/s5p-tv/mixer_vp_layer.c b/drivers/media/platform/s5p-tv/mixer_vp_layer.c
-index dd002a4..7fafd8a 100644
+index 6fa6f67..04b574b 100644
--- a/drivers/media/platform/s5p-tv/mixer_vp_layer.c
+++ b/drivers/media/platform/s5p-tv/mixer_vp_layer.c
@@ -207,7 +207,7 @@ struct mxr_layer *mxr_vp_layer_create(struct mxr_device *mdev, int idx)
{
struct mxr_layer *layer;
int ret;
-- struct mxr_layer_ops ops = {
-+ static struct mxr_layer_ops ops = {
+- const struct mxr_layer_ops ops = {
++ static const struct mxr_layer_ops ops = {
.release = mxr_vp_layer_release,
.buffer_set = mxr_vp_buffer_set,
.stream_set = mxr_vp_stream_set,
@@ -57390,7 +57723,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 1a093e5..f865fff 100644
+index 83e9a3e..e52b7f1 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)
@@ -57550,10 +57883,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 170dd68..19b339d 100644
+index 528390f..cacc274 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
-@@ -2406,49 +2406,216 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops,
+@@ -2425,49 +2425,216 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops,
return -ENOTTY;
}
@@ -57790,7 +58123,7 @@ index 170dd68..19b339d 100644
.debug = _debug, \
}
-@@ -2459,17 +2626,17 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
+@@ -2478,17 +2645,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)),
@@ -57812,7 +58145,7 @@ index 170dd68..19b339d 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)),
-@@ -2477,19 +2644,19 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
+@@ -2496,19 +2663,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),
@@ -57840,7 +58173,7 @@ index 170dd68..19b339d 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)),
-@@ -2497,14 +2664,14 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
+@@ -2516,14 +2683,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),
@@ -57861,7 +58194,7 @@ index 170dd68..19b339d 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)),
-@@ -2512,26 +2679,26 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
+@@ -2531,26 +2698,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),
@@ -57900,7 +58233,7 @@ index 170dd68..19b339d 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)),
-@@ -2600,7 +2767,7 @@ static long __video_do_ioctl(struct file *file,
+@@ -2619,7 +2786,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;
@@ -57909,7 +58242,7 @@ index 170dd68..19b339d 100644
const struct v4l2_ioctl_info *info;
void *fh = file->private_data;
struct v4l2_fh *vfh = NULL;
-@@ -2636,14 +2803,8 @@ static long __video_do_ioctl(struct file *file,
+@@ -2655,14 +2822,8 @@ static long __video_do_ioctl(struct file *file,
}
write_only = _IOC_DIR(cmd) == _IOC_WRITE;
@@ -57926,7 +58259,7 @@ index 170dd68..19b339d 100644
} else if (!ops->vidioc_default) {
ret = -ENOTTY;
} else {
-@@ -2691,7 +2852,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
+@@ -2710,7 +2871,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
ret = -EINVAL;
break;
}
@@ -57935,7 +58268,7 @@ index 170dd68..19b339d 100644
*kernel_ptr = (void **)&buf->m.planes;
*array_size = sizeof(struct v4l2_plane) * buf->length;
ret = 1;
-@@ -2708,7 +2869,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
+@@ -2727,7 +2888,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
ret = -EINVAL;
break;
}
@@ -57944,7 +58277,7 @@ index 170dd68..19b339d 100644
*kernel_ptr = (void **)&edid->edid;
*array_size = edid->blocks * 128;
ret = 1;
-@@ -2726,7 +2887,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
+@@ -2745,7 +2906,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
ret = -EINVAL;
break;
}
@@ -57953,7 +58286,7 @@ index 170dd68..19b339d 100644
*kernel_ptr = (void **)&ctrls->controls;
*array_size = sizeof(struct v4l2_ext_control)
* ctrls->count;
-@@ -2827,7 +2988,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
+@@ -2846,7 +3007,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
}
if (has_array_args) {
@@ -57963,51 +58296,63 @@ index 170dd68..19b339d 100644
err = -EFAULT;
goto out_array_args;
diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
-index 859b4a1..a6f983f 100644
+index 15508df..5f0ee4e 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
-@@ -232,7 +232,6 @@ struct omap3_gpmc_regs {
- };
-
- static struct gpmc_client_irq gpmc_client_irq[GPMC_NR_IRQ];
--static struct irq_chip gpmc_irq_chip;
- static int gpmc_irq_start;
-
- static struct resource gpmc_mem_root;
-@@ -1165,6 +1164,17 @@ static void gpmc_irq_noop(struct irq_data *data) { }
+@@ -234,7 +234,7 @@ struct omap3_gpmc_regs {
+ struct gpmc_device {
+ struct device *dev;
+ int irq;
+- struct irq_chip irq_chip;
++ struct irq_chip *irq_chip;
+ struct gpio_chip gpio_chip;
+ int nirqs;
+ };
+@@ -1255,10 +1255,10 @@ static int gpmc_irq_map(struct irq_domain *d, unsigned int virq,
+ irq_set_chip_data(virq, gpmc);
+ if (hw < GPMC_NR_NAND_IRQS) {
+ irq_modify_status(virq, IRQ_NOREQUEST, IRQ_NOAUTOEN);
+- irq_set_chip_and_handler(virq, &gpmc->irq_chip,
++ irq_set_chip_and_handler(virq, gpmc->irq_chip,
+ handle_simple_irq);
+ } else {
+- irq_set_chip_and_handler(virq, &gpmc->irq_chip,
++ irq_set_chip_and_handler(virq, gpmc->irq_chip,
+ handle_edge_irq);
+ }
- static unsigned int gpmc_irq_noop_ret(struct irq_data *data) { return 0; }
+@@ -1304,6 +1304,16 @@ static irqreturn_t gpmc_handle_irq(int irq, void *data)
+ return IRQ_HANDLED;
+ }
+static struct irq_chip gpmc_irq_chip = {
+ .name = "gpmc",
-+ .irq_startup = gpmc_irq_noop_ret,
+ .irq_enable = gpmc_irq_enable,
+ .irq_disable = gpmc_irq_disable,
-+ .irq_shutdown = gpmc_irq_noop,
-+ .irq_ack = gpmc_irq_noop,
-+ .irq_mask = gpmc_irq_noop,
-+ .irq_unmask = gpmc_irq_noop,
++ .irq_ack = gpmc_irq_ack,
++ .irq_mask = gpmc_irq_mask,
++ .irq_unmask = gpmc_irq_unmask,
++ .irq_set_type = gpmc_irq_set_type,
+};
+
- static int gpmc_setup_irq(void)
+ static int gpmc_setup_irq(struct gpmc_device *gpmc)
{
- int i;
-@@ -1179,15 +1189,6 @@ static int gpmc_setup_irq(void)
- return gpmc_irq_start;
- }
-
-- gpmc_irq_chip.name = "gpmc";
-- gpmc_irq_chip.irq_startup = gpmc_irq_noop_ret;
-- gpmc_irq_chip.irq_enable = gpmc_irq_enable;
-- gpmc_irq_chip.irq_disable = gpmc_irq_disable;
-- gpmc_irq_chip.irq_shutdown = gpmc_irq_noop;
-- gpmc_irq_chip.irq_ack = gpmc_irq_noop;
-- gpmc_irq_chip.irq_mask = gpmc_irq_noop;
-- gpmc_irq_chip.irq_unmask = gpmc_irq_noop;
--
- gpmc_client_irq[0].bitmask = GPMC_IRQ_FIFOEVENTENABLE;
- gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT;
+ u32 regval;
+@@ -1316,13 +1326,7 @@ static int gpmc_setup_irq(struct gpmc_device *gpmc)
+ regval = gpmc_read_reg(GPMC_IRQSTATUS);
+ gpmc_write_reg(GPMC_IRQSTATUS, regval);
+- gpmc->irq_chip.name = "gpmc";
+- gpmc->irq_chip.irq_enable = gpmc_irq_enable;
+- gpmc->irq_chip.irq_disable = gpmc_irq_disable;
+- gpmc->irq_chip.irq_ack = gpmc_irq_ack;
+- gpmc->irq_chip.irq_mask = gpmc_irq_mask;
+- gpmc->irq_chip.irq_unmask = gpmc_irq_unmask;
+- gpmc->irq_chip.irq_set_type = gpmc_irq_set_type;
++ gpmc->irq_chip = &gpmc_irq_chip;
+
+ gpmc_irq_domain = irq_domain_add_linear(gpmc->dev->of_node,
+ gpmc->nirqs,
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 5537f8d..f990a1d 100644
--- a/drivers/message/fusion/mptbase.c
@@ -58057,7 +58402,7 @@ index 5537f8d..f990a1d 100644
seq_printf(m, " {CurRepSz=%d} x {CurRepDepth=%d} = %d bytes ^= 0x%x\n",
ioc->reply_sz, ioc->reply_depth, ioc->reply_sz*ioc->reply_depth, sz);
diff --git a/drivers/message/fusion/mptlan.c b/drivers/message/fusion/mptlan.c
-index cbe9607..50db310 100644
+index 6955c9e..03bc466 100644
--- a/drivers/message/fusion/mptlan.c
+++ b/drivers/message/fusion/mptlan.c
@@ -680,7 +680,7 @@ out:
@@ -58070,7 +58415,7 @@ index cbe9607..50db310 100644
{
struct mpt_lan_priv *priv = netdev_priv(dev);
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
-index 7ebccfa..a0cd0e6 100644
+index 7ee1667..c36740d 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -446,6 +446,23 @@ mptsas_is_end_device(struct mptsas_devinfo * attached)
@@ -58122,7 +58467,7 @@ index 7ebccfa..a0cd0e6 100644
mptsas_get_port(struct mptsas_phyinfo *phy_info)
{
diff --git a/drivers/mfd/ab8500-debugfs.c b/drivers/mfd/ab8500-debugfs.c
-index 69d9fff..62cd090 100644
+index 0aecd7b..41bf9bf 100644
--- a/drivers/mfd/ab8500-debugfs.c
+++ b/drivers/mfd/ab8500-debugfs.c
@@ -100,7 +100,7 @@ static int irq_last;
@@ -58161,7 +58506,7 @@ index 70443b1..e6da89d 100644
if (node && !pdata) {
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
-index f7ab115..16b2087 100644
+index 11cab15..d144bd9 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -230,7 +230,7 @@ static int tps65910_irq_init(struct tps65910 *tps65910, int irq,
@@ -58174,7 +58519,7 @@ index f7ab115..16b2087 100644
if (!irq) {
dev_warn(tps65910->dev, "No interrupt support, no core IRQ\n");
diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
-index 40e51b0..af35565 100644
+index b46c0cf..89e322b 100644
--- a/drivers/mfd/twl4030-irq.c
+++ b/drivers/mfd/twl4030-irq.c
@@ -34,6 +34,7 @@
@@ -58747,10 +59092,10 @@ index 557f978..c8ce9fb 100644
{
struct xpnet_pending_msg *queued_msg;
diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
-index 71b6455..9cc7886 100644
+index bf0d770..9b331b0d 100644
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
-@@ -582,9 +582,10 @@ static int show_list(struct seq_file *s, void *unused)
+@@ -581,9 +581,10 @@ static int show_list(struct seq_file *s, void *unused)
return 0;
}
@@ -58763,7 +59108,7 @@ index 71b6455..9cc7886 100644
struct kim_data_s *kim_data = dev_get_drvdata(dev);
return sprintf(buf, "%d\n", kim_data->ldisc_install);
}
-@@ -611,47 +612,50 @@ static ssize_t store_baud_rate(struct device *dev,
+@@ -610,47 +611,50 @@ static ssize_t store_baud_rate(struct device *dev,
}
#endif /* if DEBUG */
@@ -58842,10 +59187,10 @@ index c032eef..16a2a74 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 68d5da2..7cf7308 100644
+index 1e8d838..265d97b 100644
--- a/drivers/mmc/host/dw_mmc.h
+++ b/drivers/mmc/host/dw_mmc.h
-@@ -297,5 +297,5 @@ struct dw_mci_drv_data {
+@@ -295,5 +295,5 @@ struct dw_mci_drv_data {
struct mmc_ios *ios);
int (*switch_voltage)(struct mmc_host *mmc,
struct mmc_ios *ios);
@@ -58853,10 +59198,10 @@ index 68d5da2..7cf7308 100644
+} __do_const;
#endif /* _DW_MMC_H_ */
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
-index 2e6c968..0a99c02 100644
+index df990bb..e647253 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
-@@ -1633,7 +1633,9 @@ static int mmci_probe(struct amba_device *dev,
+@@ -1613,7 +1613,9 @@ static int mmci_probe(struct amba_device *dev,
mmc->caps |= MMC_CAP_CMD23;
if (variant->busy_detect) {
@@ -58868,10 +59213,10 @@ index 2e6c968..0a99c02 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 f9ac3bb..4709b44 100644
+index 24ebc9a..f75606a 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
-@@ -2091,7 +2091,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
+@@ -2076,7 +2076,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");
@@ -58883,7 +59228,7 @@ index f9ac3bb..4709b44 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 2d300d8..35cc03f 100644
+index 9d3ae1f..43420eb 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -1190,9 +1190,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
@@ -58920,6 +59265,22 @@ index 70c724b..0c24beb 100644
}
/* It supports additional host capabilities if needed */
+diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
+index f44e2ab..6ce0c2c 100644
+--- a/drivers/mmc/host/tmio_mmc_pio.c
++++ b/drivers/mmc/host/tmio_mmc_pio.c
+@@ -1072,7 +1072,10 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,
+ goto host_free;
+ }
+
+- tmio_mmc_ops.start_signal_voltage_switch = _host->start_signal_voltage_switch;
++ pax_open_kernel();
++ const_cast(tmio_mmc_ops.start_signal_voltage_switch) =
++ _host->start_signal_voltage_switch;
++ pax_close_kernel();
+ mmc->ops = &tmio_mmc_ops;
+
+ mmc->caps |= MMC_CAP_4_BIT_DATA | pdata->capabilities;
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c
index 9a1a6ff..b8f1a57 100644
--- a/drivers/mtd/chips/cfi_cmdset_0020.c
@@ -59103,7 +59464,7 @@ index 585596c..da877c2 100644
return brcmnand_probe(pdev, soc);
}
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
-index e553aff..62fc6b8 100644
+index 0b0c937..e3a9cca 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)
@@ -59125,7 +59486,7 @@ index e553aff..62fc6b8 100644
{
BUG();
}
-@@ -760,9 +770,9 @@ static int cafe_nand_probe(struct pci_dev *pdev,
+@@ -780,9 +790,9 @@ static int cafe_nand_probe(struct pci_dev *pdev,
cafe->nand.ecc.size = mtd->writesize;
cafe->nand.ecc.bytes = 14;
cafe->nand.ecc.strength = 4;
@@ -59139,7 +59500,7 @@ index e553aff..62fc6b8 100644
cafe->nand.ecc.write_oob = cafe_nand_write_oob;
cafe->nand.ecc.read_page = cafe_nand_read_page;
diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
-index 30bf5f6..9bb67d1 100644
+index 0476ae8..8d320ef 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -24,6 +24,7 @@
@@ -59151,10 +59512,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 8122c69..96522f2 100644
+index 6e46156..923c436 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
-@@ -388,7 +388,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, enum dma_data_direction dr)
+@@ -414,7 +414,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) &&
@@ -59176,7 +59537,7 @@ index a5dfbfb..8042ab4 100644
#include <linux/mtd/nand.h>
#include <linux/mtd/nftl.h>
diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
-index b096f8b..727cc94 100644
+index 3692dd5..b731a9b 100644
--- a/drivers/mtd/sm_ftl.c
+++ b/drivers/mtd/sm_ftl.c
@@ -56,7 +56,7 @@ static ssize_t sm_attr_show(struct device *dev, struct device_attribute *attr,
@@ -59189,10 +59550,10 @@ index b096f8b..727cc94 100644
struct sm_sysfs_attribute *vendor_attribute;
char *vendor;
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
-index 22fd19c..54e16b1 100644
+index ef36182..d5736e4 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
-@@ -1377,7 +1377,7 @@ static int __init bytes_str_to_int(const char *str)
+@@ -1386,7 +1386,7 @@ static int __init bytes_str_to_int(const char *str)
* This function returns zero in case of success and a negative error code in
* case of error.
*/
@@ -59202,10 +59563,10 @@ index 22fd19c..54e16b1 100644
int i, len;
struct mtd_dev_param *p;
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
-index db760e8..d53ca99 100644
+index b8df0f5..0d64b6e 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
-@@ -662,7 +662,7 @@ nla_put_failure:
+@@ -666,7 +666,7 @@ nla_put_failure:
return -EMSGSIZE;
}
@@ -59302,11 +59663,11 @@ index 1deb8ff..4e2b0c1 100644
struct bfin_can_priv *priv = netdev_priv(dev);
struct bfin_can_regs __iomem *reg = priv->membase;
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
-index 910c12e..b9c005d 100644
+index ad535a8..b7e3ad7 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
-@@ -1008,7 +1008,7 @@ static int can_newlink(struct net *src_net, struct net_device *dev,
- return -EOPNOTSUPP;
+@@ -1016,7 +1016,7 @@ static void can_dellink(struct net_device *dev, struct list_head *head)
+ return;
}
-static struct rtnl_link_ops can_link_ops __read_mostly = {
@@ -59328,10 +59689,10 @@ index 41c0fc9..517f7e3 100644
const struct flexcan_priv *priv = netdev_priv(dev);
struct flexcan_regs __iomem *regs = priv->regs;
diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c
-index 5d04f54..9586a90 100644
+index f13bb8d..26e4a44 100644
--- a/drivers/net/can/janz-ican3.c
+++ b/drivers/net/can/janz-ican3.c
-@@ -1598,7 +1598,7 @@ static int ican3_stop(struct net_device *ndev)
+@@ -1684,7 +1684,7 @@ static int ican3_stop(struct net_device *ndev)
return 0;
}
@@ -59432,7 +59793,7 @@ index c89b9aee..66151c0 100644
if (!request_mem_region(mem->start, mem_size, pdev->name)) {
diff --git a/drivers/net/ethernet/8390/axnet_cs.c b/drivers/net/ethernet/8390/axnet_cs.c
-index ec6eac1..4426e27 100644
+index 4ea717d..549ae69 100644
--- a/drivers/net/ethernet/8390/axnet_cs.c
+++ b/drivers/net/ethernet/8390/axnet_cs.c
@@ -96,7 +96,7 @@ static void get_8390_hdr(struct net_device *,
@@ -59500,7 +59861,7 @@ index 2f79d29..ed5a64e 100644
void __iomem *shmem = ei_status.mem + (start_page << 8);
shmem -= ei_status.tx_start_page << 8;
diff --git a/drivers/net/ethernet/adi/bfin_mac.c b/drivers/net/ethernet/adi/bfin_mac.c
-index 74139cb..6c2a056 100644
+index 3d2245f..9ac7187 100644
--- a/drivers/net/ethernet/adi/bfin_mac.c
+++ b/drivers/net/ethernet/adi/bfin_mac.c
@@ -1123,7 +1123,7 @@ static void tx_reclaim_skb_timeout(unsigned long lp)
@@ -59513,7 +59874,7 @@ index 74139cb..6c2a056 100644
{
struct bfin_mac_local *lp = netdev_priv(dev);
diff --git a/drivers/net/ethernet/allwinner/sun4i-emac.c b/drivers/net/ethernet/allwinner/sun4i-emac.c
-index 8d50314..df65782 100644
+index de2c4bf..716e0c8 100644
--- a/drivers/net/ethernet/allwinner/sun4i-emac.c
+++ b/drivers/net/ethernet/allwinner/sun4i-emac.c
@@ -438,7 +438,7 @@ static void emac_timeout(struct net_device *dev)
@@ -59562,7 +59923,7 @@ index f749e4d..23a27f1 100644
/* Scatter/gather IO is not supported,
* so it is turned off
diff --git a/drivers/net/ethernet/amd/7990.c b/drivers/net/ethernet/amd/7990.c
-index 66d0b73c..5e0763f 100644
+index dcf2a1f..ec0c782 100644
--- a/drivers/net/ethernet/amd/7990.c
+++ b/drivers/net/ethernet/amd/7990.c
@@ -535,7 +535,7 @@ void lance_tx_timeout(struct net_device *dev)
@@ -59612,7 +59973,7 @@ index 9496005..1fb7ac2 100644
IPG_CONVERGE_JIFFIES;
lp->ipg_data.ipg = DEFAULT_IPG;
diff --git a/drivers/net/ethernet/amd/atarilance.c b/drivers/net/ethernet/amd/atarilance.c
-index b10964e..93b7cb8 100644
+index d2bc8e5..2285a75 100644
--- a/drivers/net/ethernet/amd/atarilance.c
+++ b/drivers/net/ethernet/amd/atarilance.c
@@ -339,7 +339,7 @@ static unsigned long lance_probe1( struct net_device *dev, struct lance_addr
@@ -59634,7 +59995,7 @@ index b10964e..93b7cb8 100644
struct lance_private *lp = netdev_priv(dev);
struct lance_ioreg *IO = lp->iobase;
diff --git a/drivers/net/ethernet/amd/declance.c b/drivers/net/ethernet/amd/declance.c
-index b584b78..5e994f9 100644
+index b799c7a..58bd5b3 100644
--- a/drivers/net/ethernet/amd/declance.c
+++ b/drivers/net/ethernet/amd/declance.c
@@ -893,7 +893,7 @@ static void lance_tx_timeout(struct net_device *dev)
@@ -59647,7 +60008,7 @@ index b584b78..5e994f9 100644
struct lance_private *lp = netdev_priv(dev);
volatile struct lance_regs *ll = lp->ll;
diff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c
-index 7ccebae..237f6bb 100644
+index c22bf52..a83f5f6 100644
--- a/drivers/net/ethernet/amd/pcnet32.c
+++ b/drivers/net/ethernet/amd/pcnet32.c
@@ -318,7 +318,7 @@ static struct net_device_stats *pcnet32_get_stats(struct net_device *);
@@ -59702,7 +60063,7 @@ index 3d8c6b2..35160ad 100644
struct lance_private *lp = netdev_priv(dev);
int entry, len;
diff --git a/drivers/net/ethernet/amd/sunlance.c b/drivers/net/ethernet/amd/sunlance.c
-index 7847638..6126840 100644
+index 9b56b40..f183a4d 100644
--- a/drivers/net/ethernet/amd/sunlance.c
+++ b/drivers/net/ethernet/amd/sunlance.c
@@ -1106,7 +1106,7 @@ static void lance_tx_timeout(struct net_device *dev)
@@ -60484,7 +60845,7 @@ index 98d9d63..3825a58 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 fd20088..2c16ef15 100644
+index d208b17..b5c2cf7 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
@@ -123,7 +123,7 @@ static void xgene_enet_delete_bufpool(struct xgene_enet_desc_ring *buf_pool)
@@ -60519,10 +60880,10 @@ index a3a9392..d4c1818 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 8611811..be1aaac 100644
+index e708e36..7de02e6 100644
--- a/drivers/net/ethernet/atheros/alx/main.c
+++ b/drivers/net/ethernet/atheros/alx/main.c
-@@ -1497,7 +1497,7 @@ static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);
+@@ -1464,7 +1464,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,
@@ -60532,10 +60893,10 @@ index 8611811..be1aaac 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 d0084d4..d5d7f46 100644
+index a3200ea..d02b523 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
-@@ -2715,7 +2715,7 @@ static void atl1c_remove(struct pci_dev *pdev)
+@@ -2704,7 +2704,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,
@@ -60545,10 +60906,10 @@ index d0084d4..d5d7f46 100644
struct net_device *netdev = pci_get_drvdata(pdev);
struct atl1c_adapter *adapter = netdev_priv(netdev);
diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-index 59a03a1..1ae287b 100644
+index 974713b..5e0112b 100644
--- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
-@@ -2485,7 +2485,7 @@ static void atl1e_remove(struct pci_dev *pdev)
+@@ -2475,7 +2475,7 @@ static void atl1e_remove(struct pci_dev *pdev)
* this device has been detected.
*/
static pci_ers_result_t
@@ -60558,10 +60919,10 @@ index 59a03a1..1ae287b 100644
struct net_device *netdev = pci_get_drvdata(pdev);
struct atl1e_adapter *adapter = netdev_priv(netdev);
diff --git a/drivers/net/ethernet/aurora/nb8800.c b/drivers/net/ethernet/aurora/nb8800.c
-index 08a23e6..2ffb80f 100644
+index 1a3555d..d4d8a5a 100644
--- a/drivers/net/ethernet/aurora/nb8800.c
+++ b/drivers/net/ethernet/aurora/nb8800.c
-@@ -395,7 +395,7 @@ static void nb8800_tx_dma_start_irq(struct net_device *dev)
+@@ -396,7 +396,7 @@ static void nb8800_tx_dma_start_irq(struct net_device *dev)
spin_unlock(&priv->tx_lock);
}
@@ -61152,10 +61513,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 d465bd7..85bff75 100644
+index a59d55e..f537eff 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
-@@ -14201,7 +14201,7 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
+@@ -14176,7 +14176,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,
@@ -61204,10 +61565,10 @@ index 4048fc5..333809f 100644
/**
* bnx2x_config_rx_mode - Send and RX_MODE ramrod according to the provided parameters.
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-index c39a7f5..f145270 100644
+index c777cde..7fa85f9 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
-@@ -6149,7 +6149,7 @@ init_err_free:
+@@ -6421,7 +6421,7 @@ init_err_free:
* this device has been detected.
*/
static pci_ers_result_t bnxt_io_error_detected(struct pci_dev *pdev,
@@ -61217,7 +61578,7 @@ index c39a7f5..f145270 100644
struct net_device *netdev = pci_get_drvdata(pdev);
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
-index 3010080..49824f1 100644
+index ff300f7..0e84e81 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -18124,7 +18124,7 @@ static void tg3_shutdown(struct pci_dev *pdev)
@@ -61610,10 +61971,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 a63551d0a..f460dd6 100644
+index cb07d95..2e48443 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
-@@ -1329,7 +1329,7 @@ dma_error:
+@@ -1324,7 +1324,7 @@ dma_error:
return 0;
}
@@ -61622,7 +61983,7 @@ index a63551d0a..f460dd6 100644
{
u16 queue_index = skb_get_queue_mapping(skb);
struct macb *bp = netdev_priv(dev);
-@@ -2628,7 +2628,7 @@ static int at91ether_close(struct net_device *dev)
+@@ -2613,7 +2613,7 @@ static int at91ether_close(struct net_device *dev)
}
/* Transmit packet */
@@ -61657,7 +62018,7 @@ index 245c063..74ed9c9 100644
mdio_cmd->op = op;
mdio_cmd->mdio_addr = loc;
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c
-index 34d269c..69e1ac2 100644
+index 0e7e7da..814e3ca 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c
@@ -475,7 +475,7 @@ static void stop_pci_io(struct octeon_device *oct)
@@ -61687,7 +62048,7 @@ index 34d269c..69e1ac2 100644
{
struct lio *lio;
struct octnet_buf_free_info *finfo;
-@@ -3174,7 +3174,7 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
+@@ -3175,7 +3175,7 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
dev_dbg(&octeon_dev->pci_dev->dev,
"requesting config for interface %d, iqs %d, oqs %d\n",
i, num_iqueues, num_oqueues);
@@ -61696,7 +62057,7 @@ index 34d269c..69e1ac2 100644
ctx->octeon_id = lio_get_device_id(octeon_dev);
init_waitqueue_head(&ctx->wc);
-@@ -3237,8 +3237,11 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
+@@ -3238,8 +3238,11 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
props = &octeon_dev->props[i];
props->netdev = netdev;
@@ -61737,10 +62098,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 d1e3f09..23cfbef 100644
+index 477db47..f2b8a2c 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-@@ -4177,7 +4177,7 @@ bye:
+@@ -4195,7 +4195,7 @@ bye:
/* EEH callbacks */
static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev,
@@ -61750,10 +62111,10 @@ index d1e3f09..23cfbef 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 4a707c3..de12401 100644
+index 734dd77..85f036e 100644
--- a/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
+++ b/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
-@@ -546,7 +546,7 @@ int t4vf_sge_alloc_eth_txq(struct adapter *, struct sge_eth_txq *,
+@@ -550,7 +550,7 @@ int t4vf_sge_alloc_eth_txq(struct adapter *, struct sge_eth_txq *,
unsigned int);
void t4vf_free_sge_resources(struct adapter *);
@@ -61763,7 +62124,7 @@ index 4a707c3..de12401 100644
const struct pkt_gl *);
diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
-index 1ccd282..93f6dd4 100644
+index 1bb57d3..6b9d78e 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)
@@ -61776,7 +62137,7 @@ index 1ccd282..93f6dd4 100644
u32 wr_mid;
u64 cntrl, *end;
diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c
-index 48d9194..68ced25 100644
+index 1471e16..fa50073 100644
--- a/drivers/net/ethernet/davicom/dm9000.c
+++ b/drivers/net/ethernet/davicom/dm9000.c
@@ -1021,7 +1021,7 @@ static void dm9000_send_packet(struct net_device *dev,
@@ -61789,7 +62150,7 @@ index 48d9194..68ced25 100644
{
unsigned long flags;
diff --git a/drivers/net/ethernet/dec/tulip/de4x5.c b/drivers/net/ethernet/dec/tulip/de4x5.c
-index 3acde3b..284086c 100644
+index cbe8497..1c7dcc9 100644
--- a/drivers/net/ethernet/dec/tulip/de4x5.c
+++ b/drivers/net/ethernet/dec/tulip/de4x5.c
@@ -912,7 +912,7 @@ static int de4x5_init(struct net_device *dev);
@@ -61810,7 +62171,7 @@ index 3acde3b..284086c 100644
lp->timer.data = (unsigned long)dev;
de4x5_parse_params(dev);
-@@ -1740,8 +1740,9 @@ de4x5_tx(struct net_device *dev)
+@@ -1743,8 +1743,9 @@ de4x5_tx(struct net_device *dev)
}
static void
@@ -61821,7 +62182,7 @@ index 3acde3b..284086c 100644
struct de4x5_private *lp = netdev_priv(dev);
int next_tick = DE4X5_AUTOSENSE_MS;
int dt;
-@@ -2368,7 +2369,7 @@ autoconf_media(struct net_device *dev)
+@@ -2371,7 +2372,7 @@ autoconf_media(struct net_device *dev)
lp->media = INIT;
lp->tcount = 0;
@@ -61830,7 +62191,7 @@ index 3acde3b..284086c 100644
return lp->media;
}
-@@ -5373,7 +5374,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+@@ -5376,7 +5377,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
for (i=0; i<ETH_ALEN; i++) {
tmp.addr[i] = dev->dev_addr[i];
}
@@ -61839,7 +62200,7 @@ index 3acde3b..284086c 100644
break;
case DE4X5_SET_HWADDR: /* Set the hardware address */
-@@ -5413,7 +5414,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+@@ -5416,7 +5417,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
spin_lock_irqsave(&lp->lock, flags);
memcpy(&statbuf, &lp->pktStats, ioc->len);
spin_unlock_irqrestore(&lp->lock, flags);
@@ -61849,7 +62210,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 5366864..5aab985 100644
+index ed98ef1..5b80ca5 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)
@@ -61861,7 +62222,7 @@ index 5366864..5aab985 100644
}
static void populate_erx_stats(struct be_adapter *adapter,
-@@ -5467,7 +5467,7 @@ static void be_shutdown(struct pci_dev *pdev)
+@@ -5469,7 +5469,7 @@ static void be_shutdown(struct pci_dev *pdev)
}
static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
@@ -61871,7 +62232,7 @@ index 5366864..5aab985 100644
struct be_adapter *adapter = pci_get_drvdata(pdev);
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
-index 84384e1..9643fe6 100644
+index e7cf313..304fdbb 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -30,6 +30,8 @@
@@ -61883,7 +62244,7 @@ index 84384e1..9643fe6 100644
#include <net/ip.h>
#include "ftgmac100.h"
-@@ -1120,7 +1122,7 @@ static int ftgmac100_stop(struct net_device *netdev)
+@@ -1102,7 +1104,7 @@ static int ftgmac100_stop(struct net_device *netdev)
return 0;
}
@@ -61915,10 +62276,10 @@ index dce5f7b..222e709 100644
struct ftmac100 *priv = netdev_priv(netdev);
dma_addr_t map;
diff --git a/drivers/net/ethernet/freescale/fec_mpc52xx.c b/drivers/net/ethernet/freescale/fec_mpc52xx.c
-index 25553ee..0b3cdea 100644
+index 446ae9d..79d1d75 100644
--- a/drivers/net/ethernet/freescale/fec_mpc52xx.c
+++ b/drivers/net/ethernet/freescale/fec_mpc52xx.c
-@@ -306,7 +306,7 @@ static int mpc52xx_fec_close(struct net_device *dev)
+@@ -305,7 +305,7 @@ static int mpc52xx_fec_close(struct net_device *dev)
* invariant will hold if you make sure that the netif_*_queue()
* calls are done at the proper times.
*/
@@ -61928,7 +62289,7 @@ index 25553ee..0b3cdea 100644
struct mpc52xx_fec_priv *priv = netdev_priv(dev);
struct bcom_fec_bd *bd;
diff --git a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
-index 48a9c17..0745505 100644
+index 61fd486..06047eb 100644
--- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
+++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
@@ -509,7 +509,7 @@ static struct sk_buff *tx_skb_align_workaround(struct net_device *dev,
@@ -61941,7 +62302,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 d2f917a..ed4d7f5 100644
+index 2e6785b..193f8a2 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -112,7 +112,7 @@
@@ -61953,7 +62314,7 @@ index d2f917a..ed4d7f5 100644
static void gfar_reset_task(struct work_struct *work);
static void gfar_timeout(struct net_device *dev);
static int gfar_close(struct net_device *dev);
-@@ -2315,7 +2315,7 @@ static inline bool gfar_csum_errata_76(struct gfar_private *priv,
+@@ -2316,7 +2316,7 @@ static inline bool gfar_csum_errata_76(struct gfar_private *priv,
/* This is called by the kernel when a frame is ready for transmission.
* It is pointed to by the dev->hard_start_xmit function pointer
*/
@@ -61989,7 +62350,7 @@ index 0c4afe9..d888314 100644
struct hip04_priv *priv = netdev_priv(ndev);
struct net_device_stats *stats = &ndev->stats;
diff --git a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
-index e51892d..3e645f4 100644
+index b9f2ea5..82cb18e 100644
--- a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
+++ b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
@@ -601,7 +601,7 @@ static irqreturn_t hix5hd2_interrupt(int irq, void *dev_id)
@@ -62002,10 +62363,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 a1cb461..05164e3 100644
+index 7a757e8..9509b7f 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
-@@ -845,16 +845,18 @@ int hns_dsaf_ae_init(struct dsaf_device *dsaf_dev)
+@@ -818,16 +818,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);
@@ -62027,7 +62388,7 @@ index a1cb461..05164e3 100644
snprintf(ae_dev->name, AE_NAME_SIZE, "%s%d", DSAF_DEVICE_NAME,
(int)atomic_inc_return(&id));
diff --git a/drivers/net/ethernet/i825xx/lib82596.c b/drivers/net/ethernet/i825xx/lib82596.c
-index c984998..187fa04 100644
+index 3dbc53c2..fa08fb8 100644
--- a/drivers/net/ethernet/i825xx/lib82596.c
+++ b/drivers/net/ethernet/i825xx/lib82596.c
@@ -347,7 +347,7 @@ static const char init_setup[] =
@@ -62049,10 +62410,10 @@ index c984998..187fa04 100644
struct i596_private *lp = netdev_priv(dev);
struct tx_cmd *tx_cmd;
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
-index 2a0dc12..d590cfd 100644
+index 54efa9a..0d297bd 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
-@@ -2048,7 +2048,7 @@ static void ehea_xmit3(struct sk_buff *skb, struct net_device *dev,
+@@ -2047,7 +2047,7 @@ static void ehea_xmit3(struct sk_buff *skb, struct net_device *dev,
dev_consume_skb_any(skb);
}
@@ -62062,7 +62423,7 @@ index 2a0dc12..d590cfd 100644
struct ehea_port *port = netdev_priv(dev);
struct ehea_swqe *swqe;
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
-index 5d7db6c..1592aba 100644
+index 4c9771d..3b030dc 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -1385,7 +1385,7 @@ static inline int emac_xmit_finish(struct emac_instance *dev, int len)
@@ -62097,7 +62458,7 @@ 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 ae90d4f..666cb68 100644
+index f42129d..d2e3932 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -5272,7 +5272,7 @@ static void e1000_netpoll(struct net_device *netdev)
@@ -62110,10 +62471,10 @@ index ae90d4f..666cb68 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 9b4ec13..c0cd7ab 100644
+index 2b2e2f8..ad9257f 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)
+@@ -6771,7 +6771,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,
@@ -62123,10 +62484,10 @@ index 9b4ec13..c0cd7ab 100644
struct net_device *netdev = pci_get_drvdata(pdev);
struct e1000_adapter *adapter = netdev_priv(netdev);
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
-index 4eb7a6f..da3c328 100644
+index e05aca9..f6c507e 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
-@@ -2249,7 +2249,7 @@ static int fm10k_suspend(struct pci_dev *pdev,
+@@ -2185,7 +2185,7 @@ static int fm10k_suspend(struct pci_dev *pdev,
* this device has been detected.
*/
static pci_ers_result_t fm10k_io_error_detected(struct pci_dev *pdev,
@@ -62136,10 +62497,10 @@ index 4eb7a6f..da3c328 100644
struct fm10k_intfc *interface = pci_get_drvdata(pdev);
struct net_device *netdev = interface->netdev;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ptp.c b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
-index 565ca7c..dcdf764 100644
+index ed39cba..76569b9 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c
-@@ -418,7 +418,7 @@ void i40e_ptp_set_increment(struct i40e_pf *pf)
+@@ -417,7 +417,7 @@ void i40e_ptp_set_increment(struct i40e_pf *pf)
wr32(hw, I40E_PRTTSYN_INC_H, incval >> 32);
/* Update the base adjustement value. */
@@ -62149,10 +62510,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 55a1405c..b722e63 100644
+index ef3d642..4479a38 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
-@@ -7750,7 +7750,7 @@ static void igb_netpoll(struct net_device *netdev)
+@@ -7809,7 +7809,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,
@@ -62162,10 +62523,10 @@ index 55a1405c..b722e63 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 c124422..5d471ad 100644
+index b0778ba..ed4357a 100644
--- a/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/drivers/net/ethernet/intel/igbvf/netdev.c
-@@ -2523,7 +2523,7 @@ static void igbvf_netpoll(struct net_device *netdev)
+@@ -2511,7 +2511,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,
@@ -62175,10 +62536,10 @@ index c124422..5d471ad 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 7df3fe2..88f9610 100644
+index 8bebd86..61406f4 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
-@@ -9551,7 +9551,7 @@ static void ixgbe_remove(struct pci_dev *pdev)
+@@ -9818,7 +9818,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,
@@ -62188,10 +62549,10 @@ index 7df3fe2..88f9610 100644
struct ixgbe_adapter *adapter = pci_get_drvdata(pdev);
struct net_device *netdev = adapter->netdev;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
-index ef1504d..e1c3402 100644
+index e5431bf..1db690e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
-@@ -1119,7 +1119,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
+@@ -1122,7 +1122,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
}
/* update the base incval used to calculate frequency adjustment */
@@ -62201,10 +62562,10 @@ 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 b0edae9..c068ee7 100644
+index acc2401..8f9a051 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)
+@@ -3614,7 +3614,7 @@ static int ixgbevf_maybe_stop_tx(struct ixgbevf_ring *tx_ring, int size)
return __ixgbevf_maybe_stop_tx(tx_ring, size);
}
@@ -62213,7 +62574,7 @@ index b0edae9..c068ee7 100644
{
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
struct ixgbevf_tx_buffer *first;
-@@ -4148,7 +4148,7 @@ static void ixgbevf_remove(struct pci_dev *pdev)
+@@ -4200,7 +4200,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,
@@ -62223,10 +62584,10 @@ index b0edae9..c068ee7 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 c442f6a..f41971a 100644
+index 54d5154..5371b4a 100644
--- a/drivers/net/ethernet/marvell/pxa168_eth.c
+++ b/drivers/net/ethernet/marvell/pxa168_eth.c
-@@ -1272,7 +1272,7 @@ static int pxa168_rx_poll(struct napi_struct *napi, int budget)
+@@ -1270,7 +1270,7 @@ static int pxa168_rx_poll(struct napi_struct *napi, int budget)
return work_done;
}
@@ -62236,10 +62597,10 @@ index c442f6a..f41971a 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_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-index a386f04..532dac2 100644
+index 76aa4d2..30ac36b 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-@@ -482,8 +482,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
+@@ -473,8 +473,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
wmb();
/* we want to dirty this cache line once */
@@ -62251,10 +62612,10 @@ index a386f04..532dac2 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 12c77a7..d3814dd 100644
+index 546fab0..8eeb822 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
-@@ -4056,7 +4056,7 @@ static const struct pci_device_id mlx4_pci_table[] = {
+@@ -4057,7 +4057,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,
@@ -62264,10 +62625,10 @@ index 12c77a7..d3814dd 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 6892746f..bd445ae 100644
+index 6695893..6abc392 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
-@@ -1349,7 +1349,7 @@ static void remove_one(struct pci_dev *pdev)
+@@ -1384,7 +1384,7 @@ static void remove_one(struct pci_dev *pdev)
}
static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev,
@@ -62277,10 +62638,10 @@ index 6892746f..bd445ae 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 668b2f4..add3ac0 100644
+index 3740800..ab88252 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
-@@ -3228,7 +3228,7 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused,
+@@ -3533,7 +3533,7 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
@@ -62290,7 +62651,7 @@ index 668b2f4..add3ac0 100644
};
diff --git a/drivers/net/ethernet/micrel/ks8695net.c b/drivers/net/ethernet/micrel/ks8695net.c
-index a8522d8..2126286 100644
+index 20cb85b..6135d90 100644
--- a/drivers/net/ethernet/micrel/ks8695net.c
+++ b/drivers/net/ethernet/micrel/ks8695net.c
@@ -1156,7 +1156,7 @@ ks8695_timeout(struct net_device *ndev)
@@ -62316,7 +62677,7 @@ index 2fc5cd5..6c6108a 100644
int retv = NETDEV_TX_OK;
struct ks_net *ks = netdev_priv(netdev);
diff --git a/drivers/net/ethernet/moxa/moxart_ether.c b/drivers/net/ethernet/moxa/moxart_ether.c
-index 3e67f45..f1e1504 100644
+index 4367dd6..c32f151 100644
--- a/drivers/net/ethernet/moxa/moxart_ether.c
+++ b/drivers/net/ethernet/moxa/moxart_ether.c
@@ -319,7 +319,7 @@ static irqreturn_t moxart_mac_interrupt(int irq, void *dev_id)
@@ -62329,10 +62690,10 @@ index 3e67f45..f1e1504 100644
struct moxart_mac_priv_t *priv = netdev_priv(ndev);
void *desc;
diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
-index 9ba9758..9c7c77f 100644
+index 2874dff..fe466a4 100644
--- a/drivers/net/ethernet/neterion/s2io.c
+++ b/drivers/net/ethernet/neterion/s2io.c
-@@ -8563,7 +8563,7 @@ static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro,
+@@ -8556,7 +8556,7 @@ static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro,
* this device has been detected.
*/
static pci_ers_result_t s2io_io_error_detected(struct pci_dev *pdev,
@@ -62380,10 +62741,10 @@ index e0993eb..d8d7f50 100644
struct __vxge_hw_device *hldev = pci_get_drvdata(pdev);
struct net_device *netdev = hldev->ndev;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
-index 43c618b..bb6e368 100644
+index ba26bb3..cdf1919 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
-@@ -630,7 +630,7 @@ static void nfp_net_tx_csum(struct nfp_net *nn, struct nfp_net_r_vector *r_vec,
+@@ -752,7 +752,7 @@ static void nfp_net_tx_csum(struct nfp_net *nn, struct nfp_net_r_vector *r_vec,
*
* Return: NETDEV_TX_OK on success.
*/
@@ -62393,7 +62754,7 @@ index 43c618b..bb6e368 100644
struct nfp_net *nn = netdev_priv(netdev);
const struct skb_frag_struct *frag;
diff --git a/drivers/net/ethernet/netx-eth.c b/drivers/net/ethernet/netx-eth.c
-index 9fbc302..f87f84a 100644
+index adbc47f..d072612 100644
--- a/drivers/net/ethernet/netx-eth.c
+++ b/drivers/net/ethernet/netx-eth.c
@@ -107,7 +107,7 @@ static void netx_eth_set_multicast_list(struct net_device *ndev)
@@ -62406,7 +62767,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 52d9a94..cc230d4 100644
+index 87b7b81..b352c4b 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,
@@ -62447,10 +62808,10 @@ index b1ce7aa..c082651 100644
struct netdata_local *pldat = netdev_priv(ndev);
u32 len, txidx;
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-index 3b98b263b..13d2129 100644
+index 3cd87a4..3eb33e7 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-@@ -2131,7 +2131,7 @@ static int pch_gbe_stop(struct net_device *netdev)
+@@ -2130,7 +2130,7 @@ static int pch_gbe_stop(struct net_device *netdev)
* - NETDEV_TX_OK: Normal end
* - NETDEV_TX_BUSY: Error end
*/
@@ -62459,7 +62820,7 @@ index 3b98b263b..13d2129 100644
{
struct pch_gbe_adapter *adapter = netdev_priv(netdev);
struct pch_gbe_tx_ring *tx_ring = adapter->tx_ring;
-@@ -2447,7 +2447,7 @@ static const struct net_device_ops pch_gbe_netdev_ops = {
+@@ -2439,7 +2439,7 @@ static const struct net_device_ops pch_gbe_netdev_ops = {
};
static pci_ers_result_t pch_gbe_io_error_detected(struct pci_dev *pdev,
@@ -62469,7 +62830,7 @@ 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 9c6eed9..a3ef643 100644
+index 7a0281a..ff425351 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
@@ -1757,7 +1757,7 @@ err_out:
@@ -62482,19 +62843,19 @@ index 9c6eed9..a3ef643 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
+index 1182361..fe70de3 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,
-
+@@ -1116,9 +1116,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;
+- *(__be32 *)&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;
++ *(__be32 *)&p_drv_version->name[i] = val;
}
memset(&mb_params, 0, sizeof(mb_params));
@@ -62545,10 +62906,10 @@ index 3490675..cf148ea 100644
default:
dev_err(&adapter->pdev->dev, "Invalid Virtual NIC opmode\n");
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
-index 1205f6f..4b7c75b 100644
+index 1c29105..5126b11 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
-@@ -3970,7 +3970,7 @@ static void qlcnic_82xx_io_resume(struct pci_dev *pdev)
+@@ -3976,7 +3976,7 @@ static void qlcnic_82xx_io_resume(struct pci_dev *pdev)
}
static pci_ers_result_t qlcnic_io_error_detected(struct pci_dev *pdev,
@@ -62571,7 +62932,7 @@ index 0844b7c..afa10a1 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 94f08f1..501c50d 100644
+index 0e62d74..6f697a0 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -798,22 +798,22 @@ struct rtl8169_private {
@@ -62602,10 +62963,10 @@ index 94f08f1..501c50d 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 ceea74c..fa02088 100644
+index 04cd39f..c14453a 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
-@@ -2305,7 +2305,7 @@ static void sh_eth_tx_timeout(struct net_device *ndev)
+@@ -2294,7 +2294,7 @@ static void sh_eth_tx_timeout(struct net_device *ndev)
}
/* Packet transmit function */
@@ -62637,7 +62998,7 @@ index 28b775e..110ef62 100644
};
diff --git a/drivers/net/ethernet/seeq/sgiseeq.c b/drivers/net/ethernet/seeq/sgiseeq.c
-index ca73366..8debe39 100644
+index c2bd537..540a981 100644
--- a/drivers/net/ethernet/seeq/sgiseeq.c
+++ b/drivers/net/ethernet/seeq/sgiseeq.c
@@ -578,7 +578,7 @@ static inline int sgiseeq_reset(struct net_device *dev)
@@ -62755,7 +63116,7 @@ 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 a733868..7fc73e1 100644
+index cb49c96..c1498cc 100644
--- a/drivers/net/ethernet/smsc/smc911x.c
+++ b/drivers/net/ethernet/smsc/smc911x.c
@@ -514,7 +514,7 @@ static void smc911x_hardware_send_pkt(struct net_device *dev)
@@ -62768,7 +63129,7 @@ index a733868..7fc73e1 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 c5ed27c..bea1ce5 100644
+index 18ac52d..5fd8ce3 100644
--- a/drivers/net/ethernet/smsc/smc91x.c
+++ b/drivers/net/ethernet/smsc/smc91x.c
@@ -637,7 +637,7 @@ done: if (!THROTTLE_TX_PKTS)
@@ -62781,10 +63142,10 @@ index c5ed27c..bea1ce5 100644
struct smc_local *lp = netdev_priv(dev);
void __iomem *ioaddr = lp->base;
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
-index 8af2556..6da27b9 100644
+index b5ab5e1..7173c1f 100644
--- a/drivers/net/ethernet/smsc/smsc911x.c
+++ b/drivers/net/ethernet/smsc/smsc911x.c
-@@ -1673,7 +1673,7 @@ static int smsc911x_stop(struct net_device *dev)
+@@ -1671,7 +1671,7 @@ static int smsc911x_stop(struct net_device *dev)
}
/* Entry point for transmitting a packet */
@@ -62794,12 +63155,12 @@ index 8af2556..6da27b9 100644
struct smsc911x_data *pdata = netdev_priv(dev);
unsigned int freespace;
diff --git a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
-index 3f20bb1..59add41 100644
+index ce9aa79..ad1831f 100644
--- a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
-@@ -140,8 +140,8 @@ void dwmac_mmc_ctrl(void __iomem *ioaddr, unsigned int mode)
+@@ -140,8 +140,8 @@ void dwmac_mmc_ctrl(void __iomem *mmcaddr, unsigned int mode)
- writel(value, ioaddr + MMC_CNTRL);
+ writel(value, mmcaddr + MMC_CNTRL);
- pr_debug("stmmac: MMC ctrl register (offset 0x%x): 0x%08x\n",
- MMC_CNTRL, value);
@@ -62879,7 +63240,7 @@ index 904a5a1..6ef5cff 100644
struct sk_buff *curr = segs;
diff --git a/drivers/net/ethernet/synopsys/dwc_eth_qos.c b/drivers/net/ethernet/synopsys/dwc_eth_qos.c
-index af11ed1..21bca5f 100644
+index 158213c..814fb25 100644
--- a/drivers/net/ethernet/synopsys/dwc_eth_qos.c
+++ b/drivers/net/ethernet/synopsys/dwc_eth_qos.c
@@ -2173,7 +2173,7 @@ static void dwceqos_tx_rollback(struct net_local *lp, struct dwceqos_tx *tx)
@@ -62905,7 +63266,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 1d0942c..0c473eb 100644
+index 3251666..6eb86ae 100644
--- a/drivers/net/ethernet/ti/netcp_core.c
+++ b/drivers/net/ethernet/ti/netcp_core.c
@@ -1237,7 +1237,7 @@ out:
@@ -62918,7 +63279,7 @@ index 1d0942c..0c473eb 100644
struct netcp_intf *netcp = netdev_priv(ndev);
int subqueue = skb_get_queue_mapping(skb);
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c
-index 2b7550c..f75bc6c 100644
+index 9d14731..7d6ad91 100644
--- a/drivers/net/ethernet/via/via-rhine.c
+++ b/drivers/net/ethernet/via/via-rhine.c
@@ -2600,7 +2600,7 @@ static struct platform_driver rhine_driver_platform = {
@@ -62931,20 +63292,20 @@ index 2b7550c..f75bc6c 100644
.ident = "EPIA-M",
.matches = {
diff --git a/drivers/net/ethernet/wiznet/w5100.c b/drivers/net/ethernet/wiznet/w5100.c
-index 8b282d0..134ab2e 100644
+index 4f6255c..0f3aabe 100644
--- a/drivers/net/ethernet/wiznet/w5100.c
+++ b/drivers/net/ethernet/wiznet/w5100.c
-@@ -437,7 +437,7 @@ static void w5100_tx_timeout(struct net_device *ndev)
- netif_wake_queue(ndev);
+@@ -836,7 +836,7 @@ static void w5100_tx_work(struct work_struct *work)
+ w5100_tx_skb(priv->ndev, skb);
}
-static int w5100_start_tx(struct sk_buff *skb, struct net_device *ndev)
+static netdev_tx_t w5100_start_tx(struct sk_buff *skb, struct net_device *ndev)
{
struct w5100_priv *priv = netdev_priv(ndev);
- u16 offset;
+
diff --git a/drivers/net/ethernet/wiznet/w5300.c b/drivers/net/ethernet/wiznet/w5300.c
-index 8da7b93..719204a 100644
+index 0b37ce9..4ec594b 100644
--- a/drivers/net/ethernet/wiznet/w5300.c
+++ b/drivers/net/ethernet/wiznet/w5300.c
@@ -366,7 +366,7 @@ static void w5300_tx_timeout(struct net_device *ndev)
@@ -62957,7 +63318,7 @@ index 8da7b93..719204a 100644
struct w5300_priv *priv = netdev_priv(ndev);
diff --git a/drivers/net/ethernet/xilinx/ll_temac_main.c b/drivers/net/ethernet/xilinx/ll_temac_main.c
-index 5a1068d..6de663b 100644
+index 7397087..962089d 100644
--- a/drivers/net/ethernet/xilinx/ll_temac_main.c
+++ b/drivers/net/ethernet/xilinx/ll_temac_main.c
@@ -673,7 +673,7 @@ static inline int temac_check_tx_bd_space(struct temac_local *lp, int num_frag)
@@ -62970,7 +63331,7 @@ index 5a1068d..6de663b 100644
struct temac_local *lp = netdev_priv(ndev);
struct cdmac_bd *cur_p;
diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
-index 4684644..6687c7f 100644
+index 8c7f5be..b9a09fc 100644
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
@@ -652,7 +652,7 @@ static inline int axienet_check_tx_bd_space(struct axienet_local *lp,
@@ -62983,10 +63344,10 @@ index 4684644..6687c7f 100644
u32 ii;
u32 num_frag;
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
-index c70e515..4abd90a 100644
+index 9b3dc3c..db4d0a2 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
-@@ -1513,7 +1513,7 @@ nla_put_failure:
+@@ -1495,7 +1495,7 @@ nla_put_failure:
return -EMSGSIZE;
}
@@ -62995,8 +63356,57 @@ index c70e515..4abd90a 100644
.kind = "geneve",
.maxtype = IFLA_GENEVE_MAX,
.policy = geneve_policy,
+@@ -1561,7 +1561,7 @@ static int geneve_netdevice_event(struct notifier_block *unused,
+ return NOTIFY_DONE;
+ }
+
+-static struct notifier_block geneve_notifier_block __read_mostly = {
++static struct notifier_block geneve_notifier_block = {
+ .notifier_call = geneve_netdevice_event,
+ };
+
+diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
+index 4e976a0..3c6ae49 100644
+--- a/drivers/net/gtp.c
++++ b/drivers/net/gtp.c
+@@ -59,7 +59,7 @@ struct pdp_ctx {
+ struct in_addr ms_addr_ip4;
+ struct in_addr sgsn_addr_ip4;
+
+- atomic_t tx_seq;
++ atomic_unchecked_t tx_seq;
+ struct rcu_head rcu_head;
+ };
+
+@@ -408,7 +408,7 @@ static inline void gtp0_push_header(struct sk_buff *skb, struct pdp_ctx *pctx)
+ gtp0->flags = 0x1e; /* v0, GTP-non-prime. */
+ gtp0->type = GTP_TPDU;
+ gtp0->length = htons(payload_len);
+- gtp0->seq = htons((atomic_inc_return(&pctx->tx_seq) - 1) % 0xffff);
++ gtp0->seq = htons((atomic_inc_return_unchecked(&pctx->tx_seq) - 1) % 0xffff);
+ gtp0->flow = htons(pctx->u.v0.flow);
+ gtp0->number = 0xff;
+ gtp0->spare[0] = gtp0->spare[1] = gtp0->spare[2] = 0xff;
+@@ -752,7 +752,7 @@ nla_put_failure:
+ return -EMSGSIZE;
+ }
+
+-static struct rtnl_link_ops gtp_link_ops __read_mostly = {
++static struct rtnl_link_ops gtp_link_ops = {
+ .kind = "gtp",
+ .maxtype = IFLA_GTP_MAX,
+ .policy = gtp_policy,
+@@ -960,7 +960,7 @@ static int ipv4_pdp_add(struct net_device *dev, struct genl_info *info)
+ return -ENOMEM;
+
+ ipv4_pdp_fill(pctx, info);
+- atomic_set(&pctx->tx_seq, 0);
++ atomic_set_unchecked(&pctx->tx_seq, 0);
+
+ switch (pctx->gtp_version) {
+ case GTP_V0:
diff --git a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c
-index 72c9f1f..98f72c8 100644
+index 78dbc44..b7831d0 100644
--- a/drivers/net/hamradio/baycom_epp.c
+++ b/drivers/net/hamradio/baycom_epp.c
@@ -768,7 +768,7 @@ static void epp_bh(struct work_struct *work)
@@ -63009,7 +63419,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 8b3bd8e..f67d832 100644
+index c270c5a..f925f05 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -162,7 +162,7 @@ struct rndis_device {
@@ -63022,10 +63432,10 @@ index 8b3bd8e..f67d832 100644
spinlock_t request_lock;
struct list_head req_list;
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
-index b8121eb..d17ef42 100644
+index 6a69b5c..5446caf 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
-@@ -353,7 +353,7 @@ not_ip:
+@@ -352,7 +352,7 @@ not_ip:
return ret_val;
}
@@ -63035,7 +63445,7 @@ index b8121eb..d17ef42 100644
struct net_device_context *net_device_ctx = netdev_priv(net);
struct hv_netvsc_packet *packet = NULL;
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
-index c4e1e04..c1f4cba 100644
+index 97c292b..09671d5a 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,
@@ -63047,7 +63457,7 @@ index c4e1e04..c1f4cba 100644
/* Add to the request list */
spin_lock_irqsave(&dev->request_lock, flags);
-@@ -922,7 +922,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
+@@ -918,7 +918,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
/* Setup the rndis set */
halt = &request->request_msg.msg.halt_req;
@@ -63056,7 +63466,7 @@ index c4e1e04..c1f4cba 100644
/* Ignore return since this msg is optional. */
rndis_filter_send_request(dev, request);
-@@ -1136,8 +1136,7 @@ int rndis_filter_device_add(struct hv_device *dev,
+@@ -1134,8 +1134,7 @@ int rndis_filter_device_add(struct hv_device *dev,
if (net_device->num_chn == 1)
goto out;
@@ -63067,10 +63477,10 @@ index c4e1e04..c1f4cba 100644
net_device->num_chn = 1;
dev_info(&dev->device, "No memory for subchannels.\n");
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
-index cc56fac..c15b884 100644
+index 66c0eea..27486de 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
-@@ -287,7 +287,7 @@ static int ifb_validate(struct nlattr *tb[], struct nlattr *data[])
+@@ -290,7 +290,7 @@ static int ifb_validate(struct nlattr *tb[], struct nlattr *data[])
return 0;
}
@@ -63093,10 +63503,10 @@ index d6d0524..109f6ad 100644
}
}
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
-index 57941d3..99d97ae 100644
+index 1c4d395..b8cb009 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
-@@ -757,15 +757,15 @@ static int ipvlan_addr4_event(struct notifier_block *unused,
+@@ -754,15 +754,15 @@ static int ipvlan_addr4_event(struct notifier_block *unused,
return NOTIFY_OK;
}
@@ -63115,19 +63525,6 @@ index 57941d3..99d97ae 100644
.notifier_call = ipvlan_addr6_event,
};
-diff --git a/drivers/net/irda/sh_irda.c b/drivers/net/irda/sh_irda.c
-index c96b46b..09f0e8c 100644
---- a/drivers/net/irda/sh_irda.c
-+++ b/drivers/net/irda/sh_irda.c
-@@ -620,7 +620,7 @@ static int sh_irda_init_iobuf(struct sh_irda_self *self, int rxsize, int txsize)
-
-
- ************************************************************************/
--static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev)
-+static netdev_tx_t sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev)
- {
- struct sh_irda_self *self = netdev_priv(ndev);
- struct device *dev = &self->ndev->dev;
diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c
index a0849f4..147a4a6 100644
--- a/drivers/net/irda/vlsi_ir.c
@@ -63238,10 +63635,10 @@ index a400288..0c59bcd 100644
.init = loopback_net_init,
};
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
-index 8f3c55d..223d73b 100644
+index 8bcd78f..a8a3ed1 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
-@@ -3218,7 +3218,7 @@ nla_put_failure:
+@@ -3295,7 +3295,7 @@ nla_put_failure:
return -EMSGSIZE;
}
@@ -63251,7 +63648,7 @@ index 8f3c55d..223d73b 100644
.priv_size = sizeof(struct macsec_dev),
.maxtype = IFLA_MACSEC_MAX,
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
-index 2bcf1f3..f2bef9c 100644
+index cb01023..68f4e44 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -335,7 +335,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
@@ -63263,7 +63660,7 @@ index 2bcf1f3..f2bef9c 100644
}
static void macvlan_flush_sources(struct macvlan_port *port,
-@@ -1485,13 +1485,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
+@@ -1483,13 +1483,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
int macvlan_link_register(struct rtnl_link_ops *ops)
{
/* common fields */
@@ -63286,7 +63683,7 @@ index 2bcf1f3..f2bef9c 100644
return rtnl_link_register(ops);
};
-@@ -1579,7 +1581,7 @@ static int macvlan_device_event(struct notifier_block *unused,
+@@ -1577,7 +1579,7 @@ static int macvlan_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
@@ -63296,10 +63693,10 @@ index 2bcf1f3..f2bef9c 100644
};
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
-index 9a35aa4..ef7ef34 100644
+index bd67209..2718882 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
-@@ -485,7 +485,7 @@ static void macvtap_setup(struct net_device *dev)
+@@ -496,7 +496,7 @@ static void macvtap_setup(struct net_device *dev)
dev->tx_queue_len = TUN_READQ_SIZE;
}
@@ -63308,7 +63705,7 @@ index 9a35aa4..ef7ef34 100644
.kind = "macvtap",
.setup = macvtap_setup,
.newlink = macvtap_newlink,
-@@ -1094,7 +1094,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
+@@ -1105,7 +1105,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
ret = 0;
u = q->flags;
@@ -63317,7 +63714,7 @@ index 9a35aa4..ef7ef34 100644
put_user(u, &ifr->ifr_flags))
ret = -EFAULT;
macvtap_put_vlan(vlan);
-@@ -1177,8 +1177,8 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
+@@ -1188,8 +1188,8 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
}
ret = 0;
u = vlan->dev->type;
@@ -63328,7 +63725,7 @@ index 9a35aa4..ef7ef34 100644
put_user(u, &ifr->ifr_hwaddr.sa_family))
ret = -EFAULT;
macvtap_put_vlan(vlan);
-@@ -1312,7 +1312,7 @@ static int macvtap_device_event(struct notifier_block *unused,
+@@ -1333,7 +1333,7 @@ static int macvtap_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
@@ -63351,7 +63748,7 @@ index 7b7c70e..a92dc83 100644
.priv_size = sizeof(struct nlmon),
.setup = nlmon_setup,
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
-index e551f3a..e5fdf87 100644
+index e977ba9..e3df8dcd8 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -411,7 +411,7 @@ static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
@@ -63395,10 +63792,19 @@ 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 f572b31..3a19b6ff 100644
+index a30ee42..b904eb3 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)
+@@ -1135,7 +1135,7 @@ static struct net *ppp_nl_get_link_net(const struct net_device *dev)
+ return ppp->ppp_net;
+ }
+
+-static struct rtnl_link_ops ppp_link_ops __read_mostly = {
++static struct rtnl_link_ops ppp_link_ops = {
+ .kind = "ppp",
+ .maxtype = IFLA_PPP_MAX,
+ .policy = ppp_nl_policy,
+@@ -1253,7 +1253,6 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
void __user *addr = (void __user *) ifr->ifr_ifru.ifru_data;
struct ppp_stats stats;
struct ppp_comp_stats cstats;
@@ -63406,7 +63812,7 @@ index f572b31..3a19b6ff 100644
switch (cmd) {
case SIOCGPPPSTATS:
-@@ -1078,8 +1077,7 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+@@ -1275,8 +1274,7 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
break;
case SIOCGPPPVER:
@@ -63430,7 +63836,7 @@ index ae0905e..f22c8e9d 100644
return NET_RX_SUCCESS;
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
-index 9cfe6ae..3ec3a5f 100644
+index a31f461..949a77a 100644
--- a/drivers/net/rionet.c
+++ b/drivers/net/rionet.c
@@ -170,7 +170,7 @@ static int rionet_queue_tx_msg(struct sk_buff *skb, struct net_device *ndev,
@@ -63456,10 +63862,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 2ace126..c06df62 100644
+index fdee772..6c3ba123 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
-@@ -2148,7 +2148,7 @@ static unsigned int team_get_num_rx_queues(void)
+@@ -2150,7 +2150,7 @@ static unsigned int team_get_num_rx_queues(void)
return TEAM_DEFAULT_NUM_RX_QUEUES;
}
@@ -63468,7 +63874,7 @@ index 2ace126..c06df62 100644
.kind = DRV_NAME,
.priv_size = sizeof(struct team),
.setup = team_setup,
-@@ -2943,7 +2943,7 @@ static int team_device_event(struct notifier_block *unused,
+@@ -2945,7 +2945,7 @@ static int team_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
@@ -63478,10 +63884,10 @@ index 2ace126..c06df62 100644
};
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
-index dda4905..c0a1944 100644
+index e16487c..95eee32 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
-@@ -1491,7 +1491,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
+@@ -1558,7 +1558,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
return -EINVAL;
}
@@ -63490,7 +63896,7 @@ index dda4905..c0a1944 100644
.kind = DRV_NAME,
.priv_size = sizeof(struct tun_struct),
.setup = tun_setup,
-@@ -1892,7 +1892,7 @@ unlock:
+@@ -1970,7 +1970,7 @@ unlock:
}
static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
@@ -63499,7 +63905,7 @@ index dda4905..c0a1944 100644
{
struct tun_file *tfile = file->private_data;
struct tun_struct *tun;
-@@ -1906,6 +1906,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
+@@ -1984,6 +1984,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
int le;
int ret;
@@ -63510,7 +63916,7 @@ index dda4905..c0a1944 100644
if (copy_from_user(&ifr, argp, ifreq_len))
return -EFAULT;
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
-index 111d907..1dbbd3f 100644
+index 4b44586..ae19659 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -70,7 +70,7 @@
@@ -63628,13 +64034,13 @@ index 76465b1..2d72355 100644
struct ipheth_device *dev = netdev_priv(net);
struct usb_device *udev = dev->udev;
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
-index d1f78c2..5596ab1 100644
+index e9654a6..dec6e0e 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
-@@ -619,7 +619,7 @@ struct r8152 {
- int (*eee_get)(struct r8152 *, struct ethtool_eee *);
+@@ -631,7 +631,7 @@ struct r8152 {
int (*eee_set)(struct r8152 *, struct ethtool_eee *);
bool (*in_nway)(struct r8152 *);
+ void (*autosuspend_en)(struct r8152 *tp, bool enable);
- } rtl_ops;
+ } __no_const rtl_ops;
@@ -63663,7 +64069,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 49d84e5..2492568 100644
+index e0638e5..b0874cc 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -48,7 +48,7 @@ module_param(gso, bool, 0444);
@@ -63676,10 +64082,10 @@ index 49d84e5..2492568 100644
#define VIRTNET_DRIVER_VERSION "1.0.0"
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
-index 8a8f1e5..15da5ea 100644
+index 8bd8c7e..1dcbf60 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
-@@ -781,7 +781,7 @@ static const struct nla_policy vrf_nl_policy[IFLA_VRF_MAX + 1] = {
+@@ -809,7 +809,7 @@ static const struct nla_policy vrf_nl_policy[IFLA_VRF_MAX + 1] = {
[IFLA_VRF_TABLE] = { .type = NLA_U32 },
};
@@ -63688,7 +64094,7 @@ index 8a8f1e5..15da5ea 100644
.kind = DRV_NAME,
.priv_size = sizeof(struct net_vrf),
-@@ -818,7 +818,7 @@ out:
+@@ -846,7 +846,7 @@ out:
return NOTIFY_DONE;
}
@@ -63698,10 +64104,10 @@ index 8a8f1e5..15da5ea 100644
};
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
-index 7e29b55..13e9b3e 100644
+index b3b9db6..9386b66 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
-@@ -3119,7 +3119,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev)
+@@ -3230,7 +3230,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev)
return vxlan->net;
}
@@ -63710,13 +64116,13 @@ index 7e29b55..13e9b3e 100644
.kind = "vxlan",
.maxtype = IFLA_VXLAN_MAX,
.policy = vxlan_policy,
-@@ -3167,7 +3167,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused,
+@@ -3314,7 +3314,7 @@ static int vxlan_netdevice_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
-static struct notifier_block vxlan_notifier_block __read_mostly = {
+static struct notifier_block vxlan_notifier_block = {
- .notifier_call = vxlan_lowerdev_event,
+ .notifier_call = vxlan_netdevice_event,
};
diff --git a/drivers/net/wan/lmc/lmc_media.c b/drivers/net/wan/lmc/lmc_media.c
@@ -63901,10 +64307,10 @@ index 0b60295..b8bfa5b 100644
if (rd == NULL) {
result = -ENOMEM;
diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
-index edf3629..9f20ef9 100644
+index 9fb8d74..90debe0 100644
--- a/drivers/net/wireless/ath/ath10k/ce.c
+++ b/drivers/net/wireless/ath/ath10k/ce.c
-@@ -878,12 +878,12 @@ static int ath10k_ce_init_dest_ring(struct ath10k *ar,
+@@ -880,12 +880,12 @@ static int ath10k_ce_init_dest_ring(struct ath10k *ar,
return 0;
}
@@ -63919,7 +64325,7 @@ index edf3629..9f20ef9 100644
dma_addr_t base_addr;
nentries = roundup_pow_of_two(nentries);
-@@ -929,7 +929,7 @@ ath10k_ce_alloc_dest_ring(struct ath10k *ar, unsigned int ce_id,
+@@ -931,7 +931,7 @@ ath10k_ce_alloc_dest_ring(struct ath10k *ar, unsigned int ce_id,
const struct ce_attr *attr)
{
struct ath10k_ce_ring *dest_ring;
@@ -63929,7 +64335,7 @@ index edf3629..9f20ef9 100644
nentries = roundup_pow_of_two(attr->dest_nentries);
diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
-index e70aa38..2fcc407 100644
+index cc82718..336fff3 100644
--- a/drivers/net/wireless/ath/ath10k/htc.h
+++ b/drivers/net/wireless/ath/ath10k/htc.h
@@ -270,13 +270,13 @@ enum ath10k_htc_ep_id {
@@ -63949,10 +64355,10 @@ index e70aa38..2fcc407 100644
/* service connection information */
struct ath10k_htc_svc_conn_req {
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
-index 5f3acfe..e0d6a6b 100644
+index 7a1970e..f50ce2b 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
-@@ -914,7 +914,7 @@ void ath6kl_tx_data_cleanup(struct ath6kl *ar);
+@@ -915,7 +915,7 @@ void ath6kl_tx_data_cleanup(struct ath6kl *ar);
struct ath6kl_cookie *ath6kl_alloc_cookie(struct ath6kl *ar);
void ath6kl_free_cookie(struct ath6kl *ar, struct ath6kl_cookie *cookie);
@@ -63975,7 +64381,7 @@ index 40432fe..57d85b3 100644
struct ath6kl *ar = ath6kl_priv(dev);
struct ath6kl_cookie *cookie = NULL;
diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig
-index 40fa915..9e5e0c4 100644
+index f68cb00..7e16ed6 100644
--- a/drivers/net/wireless/ath/ath9k/Kconfig
+++ b/drivers/net/wireless/ath/ath9k/Kconfig
@@ -3,7 +3,6 @@ config ATH9K_HW
@@ -64210,10 +64616,10 @@ index da84b70..83e4978 100644
static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
-index 831a544..d846785 100644
+index 9cbca12..eae7c79 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -671,7 +671,7 @@ struct ath_hw_private_ops {
+@@ -672,7 +672,7 @@ struct ath_hw_private_ops {
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
bool (*is_aic_enabled)(struct ath_hw *ah);
#endif /* CONFIG_ATH9K_BTCOEX_SUPPORT */
@@ -64222,7 +64628,7 @@ index 831a544..d846785 100644
/**
* struct ath_spec_scan - parameters for Atheros spectral scan
-@@ -747,7 +747,7 @@ struct ath_hw_ops {
+@@ -748,7 +748,7 @@ struct ath_hw_ops {
#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
void (*set_bt_ant_diversity)(struct ath_hw *hw, bool enable);
#endif
@@ -64232,10 +64638,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 3aed43a..f415cc5 100644
+index 8b63988..2fd4697 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2594,16 +2594,18 @@ void ath9k_fill_chanctx_ops(void)
+@@ -2589,16 +2589,18 @@ void ath9k_fill_chanctx_ops(void)
if (!ath9k_is_chanctx_enabled())
return;
@@ -64327,7 +64733,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 4d1527a..4f60738 100644
+index ffb22a0..231c7bc 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)
@@ -64376,7 +64782,7 @@ index 4d1527a..4f60738 100644
for (i = 0; i < ar->hw->queues; i++) {
skb_queue_head_init(&ar->tx_status[i]);
diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c
-index ae86a600..28696b2 100644
+index 2bf04c9..ae05957 100644
--- a/drivers/net/wireless/ath/carl9170/tx.c
+++ b/drivers/net/wireless/ath/carl9170/tx.c
@@ -193,7 +193,7 @@ static int carl9170_alloc_dev_space(struct ar9170 *ar, struct sk_buff *skb)
@@ -64398,7 +64804,7 @@ index ae86a600..28696b2 100644
if (atomic_read(&ar->tx_ampdu_upload))
diff --git a/drivers/net/wireless/ath/wil6210/pcie_bus.c b/drivers/net/wireless/ath/wil6210/pcie_bus.c
-index e36f2a0..462af92 100644
+index aeb72c4..aafc0cc 100644
--- a/drivers/net/wireless/ath/wil6210/pcie_bus.c
+++ b/drivers/net/wireless/ath/wil6210/pcie_bus.c
@@ -152,7 +152,7 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
@@ -64411,20 +64817,20 @@ index e36f2a0..462af92 100644
.fw_recovery = wil_platform_rop_fw_recovery,
};
diff --git a/drivers/net/wireless/ath/wil6210/wil_platform.h b/drivers/net/wireless/ath/wil6210/wil_platform.h
-index 9a949d9..1307d61 100644
+index 33d4a34..b8335d9 100644
--- a/drivers/net/wireless/ath/wil6210/wil_platform.h
+++ b/drivers/net/wireless/ath/wil6210/wil_platform.h
-@@ -29,7 +29,7 @@ struct wil_platform_ops {
+@@ -35,7 +35,7 @@ struct wil_platform_ops {
int (*resume)(void *handle);
void (*uninit)(void *handle);
- int (*notify_crash)(void *handle);
+ int (*notify)(void *handle, enum wil_platform_event evt);
-};
+} __no_const;
/**
* 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 1efb1d6..66134a3 100644
+index 7c10804..9ea162d 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)
@@ -64437,7 +64843,7 @@ index 1efb1d6..66134a3 100644
return msecs_to_jiffies((s->poll_timeout[2] << 16)
| (s->poll_timeout[1] << 8)
diff --git a/drivers/net/wireless/atmel/atmel.c b/drivers/net/wireless/atmel/atmel.c
-index 6a1f03c..8a14da4 100644
+index bf2e9a0..b55366e 100644
--- a/drivers/net/wireless/atmel/atmel.c
+++ b/drivers/net/wireless/atmel/atmel.c
@@ -1663,9 +1663,10 @@ EXPORT_SYMBOL(stop_atmel_card);
@@ -64851,7 +65257,7 @@ index 6a1f03c..8a14da4 100644
static const iw_handler atmel_private_handler[] =
diff --git a/drivers/net/wireless/broadcom/b43/phy_lp.c b/drivers/net/wireless/broadcom/b43/phy_lp.c
-index 058a9f2..d5cb1ba 100644
+index 6922cbb..c45026c 100644
--- a/drivers/net/wireless/broadcom/b43/phy_lp.c
+++ b/drivers/net/wireless/broadcom/b43/phy_lp.c
@@ -2502,7 +2502,7 @@ static int lpphy_b2063_tune(struct b43_wldev *dev,
@@ -64864,7 +65270,7 @@ index 058a9f2..d5cb1ba 100644
u32 freqref, vco_freq, val1, val2, val3, timeout, timeoutref, count;
u16 old_comm15, scale;
diff --git a/drivers/net/wireless/broadcom/b43legacy/main.c b/drivers/net/wireless/broadcom/b43legacy/main.c
-index afc1fb3..79698d1 100644
+index 83770d2..3ec8a40 100644
--- a/drivers/net/wireless/broadcom/b43legacy/main.c
+++ b/drivers/net/wireless/broadcom/b43legacy/main.c
@@ -1304,8 +1304,9 @@ static void handle_irq_ucode_debug(struct b43legacy_wldev *dev)
@@ -64888,10 +65294,10 @@ index afc1fb3..79698d1 100644
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
+index 62f475e..c5c90d3 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 = {
+@@ -5077,6 +5077,50 @@ static struct cfg80211_ops brcmf_cfg80211_ops = {
.tdls_oper = brcmf_cfg80211_tdls_oper,
};
@@ -64942,7 +65348,7 @@ index d5c2a27..4ed31de 100644
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,
+@@ -6703,7 +6747,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;
@@ -64951,7 +65357,7 @@ index d5c2a27..4ed31de 100644
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,
+@@ -6715,15 +6759,10 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
return NULL;
}
@@ -64968,7 +65374,7 @@ index d5c2a27..4ed31de 100644
#endif
wiphy = wiphy_new(ops, sizeof(struct brcmf_cfg80211_info));
if (!wiphy) {
-@@ -6781,7 +6820,6 @@ priv_out:
+@@ -6862,7 +6901,6 @@ priv_out:
ifp->vif = NULL;
wiphy_out:
brcmf_free_wiphy(wiphy);
@@ -64976,7 +65382,7 @@ index d5c2a27..4ed31de 100644
return NULL;
}
-@@ -6792,7 +6830,6 @@ void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg)
+@@ -6873,7 +6911,6 @@ void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg)
brcmf_btcoex_detach(cfg);
wiphy_unregister(cfg->wiphy);
@@ -65032,7 +65438,7 @@ index dd87747..27d0934 100644
void wlapi_free_timer(struct wlapi_timer *t);
void wlapi_add_timer(struct wlapi_timer *t, uint ms, int periodic);
diff --git a/drivers/net/wireless/cisco/airo.c b/drivers/net/wireless/cisco/airo.c
-index d2353f6..03379d9 100644
+index ca3cd21..2d7ecf0 100644
--- a/drivers/net/wireless/cisco/airo.c
+++ b/drivers/net/wireless/cisco/airo.c
@@ -4779,7 +4779,7 @@ static int get_dec_u16( char *buffer, int *start, int limit ) {
@@ -65546,7 +65952,7 @@ index d2353f6..03379d9 100644
/* Only super-user can write RIDs */
diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2100.c b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
-index f93a7f7..eb25e2b 100644
+index bfa542c..c2488f7 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
@@ -3220,8 +3220,9 @@ static void ipw2100_tx_send_data(struct ipw2100_priv *priv)
@@ -65580,7 +65986,7 @@ index f93a7f7..eb25e2b 100644
/* NOTE: We do not start the deferred work for status checks yet */
priv->stop_rf_kill = 1;
diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2200.c b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-index ed0adaf..4bb4f53 100644
+index 5adb7ce..3a0c6fa 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
@@ -1968,8 +1968,9 @@ static void notify_wx_assoc_event(struct ipw_priv *priv)
@@ -65605,7 +66011,7 @@ index ed0adaf..4bb4f53 100644
return ret;
}
diff --git a/drivers/net/wireless/intel/iwlegacy/3945-mac.c b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
-index af1b3e6..c014779 100644
+index 466912e..a59ae61 100644
--- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
@@ -1399,8 +1399,9 @@ il3945_dump_nic_error_log(struct il_priv *il)
@@ -65649,7 +66055,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 b75f4ef..8fe465b 100644
+index a91d170..4b3876a 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)
@@ -65663,7 +66069,7 @@ index b75f4ef..8fe465b 100644
u32 inta, handled = 0;
u32 inta_fh;
unsigned long flags;
-@@ -6256,9 +6257,7 @@ il4965_setup_deferred_work(struct il_priv *il)
+@@ -6259,9 +6260,7 @@ il4965_setup_deferred_work(struct il_priv *il)
setup_timer(&il->watchdog, il_bg_watchdog, (unsigned long)il);
@@ -65675,7 +66081,7 @@ index b75f4ef..8fe465b 100644
static void
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c b/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c
-index 74c5161..f0a52a5 100644
+index f6591c8..363b5b3 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c
@@ -190,7 +190,7 @@ static ssize_t iwl_dbgfs_sram_write(struct file *file,
@@ -65811,7 +66217,7 @@ 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
+index 8dda52a..2591e0c 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,
@@ -65833,7 +66239,7 @@ index 1799469..f0c488d 100644
} 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 c1a3131..2592a24 100644
+index 4fdc3da..4f63dd9 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
@@ -258,7 +258,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
@@ -65870,10 +66276,10 @@ index c1a3131..2592a24 100644
((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 34731e2..9bd389b 100644
+index 779bafc..6ec6ea1 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
-@@ -290,7 +290,7 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
+@@ -405,7 +405,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);
@@ -65882,7 +66288,7 @@ index 34731e2..9bd389b 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,
+@@ -418,7 +418,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;
@@ -65892,10 +66298,10 @@ index 34731e2..9bd389b 100644
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 b2b7935..cc6abc7 100644
+index f603d78..4a66baa 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
-@@ -2308,7 +2308,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
+@@ -2299,7 +2299,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
struct isr_statistics *isr_stats = &trans_pcie->isr_stats;
char buf[8];
@@ -65904,7 +66310,7 @@ index b2b7935..cc6abc7 100644
u32 reset_flag;
memset(buf, 0, sizeof(buf));
-@@ -2329,7 +2329,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
+@@ -2320,7 +2320,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
{
struct iwl_trans *trans = file->private_data;
char buf[8];
@@ -67472,10 +67878,10 @@ 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 06664ba..974b505 100644
+index 4dd5adc..7c1c2a4 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -3219,20 +3219,20 @@ static int __init init_mac80211_hwsim(void)
+@@ -3224,20 +3224,20 @@ static int __init init_mac80211_hwsim(void)
if (channels < 1)
return -EINVAL;
@@ -67524,7 +67930,7 @@ 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 3cfa946..101832c 100644
+index 8b67a55..423f9d6 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -808,7 +808,7 @@ mwifiex_clone_skb_for_tx_status(struct mwifiex_private *priv,
@@ -67537,10 +67943,10 @@ index 3cfa946..101832c 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 de36438..ac74367 100644
+index 0c7937e..adcf08b 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
-@@ -503,7 +503,7 @@ static int mwifiex_init_rxq_ring(struct mwifiex_adapter *adapter)
+@@ -507,7 +507,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,
@@ -67549,7 +67955,7 @@ index de36438..ac74367 100644
if (!skb) {
mwifiex_dbg(adapter, ERROR,
"Unable to allocate skb for RX ring.\n");
-@@ -1315,7 +1315,7 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter)
+@@ -1319,7 +1319,7 @@ static int mwifiex_pcie_process_recv_data(struct mwifiex_adapter *adapter)
}
skb_tmp = mwifiex_alloc_dma_align_buf(MWIFIEX_RX_DATA_BUF_SIZE,
@@ -67559,30 +67965,10 @@ index de36438..ac74367 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 b2c839a..5647267 100644
+index bdc51ff..674465e 100644
--- a/drivers/net/wireless/marvell/mwifiex/sdio.c
+++ b/drivers/net/wireless/marvell/mwifiex/sdio.c
-@@ -1123,8 +1123,7 @@ static void mwifiex_deaggr_sdio_pkt(struct mwifiex_adapter *adapter,
- __func__, pkt_len, blk_size);
- break;
- }
-- skb_deaggr = mwifiex_alloc_dma_align_buf(pkt_len,
-- GFP_KERNEL | GFP_DMA);
-+ skb_deaggr = mwifiex_alloc_dma_align_buf(pkt_len, GFP_KERNEL);
- if (!skb_deaggr)
- break;
- skb_put(skb_deaggr, pkt_len);
-@@ -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],
-- GFP_KERNEL |
-- GFP_DMA);
-+ GFP_KERNEL);
- if (!skb_deaggr) {
- mwifiex_dbg(adapter, ERROR, "skb allocation failure\t"
- "drop pkt len=%d type=%d\n",
-@@ -1416,7 +1414,7 @@ rx_curr_single:
+@@ -1492,7 +1492,7 @@ rx_curr_single:
mwifiex_dbg(adapter, INFO, "info: RX: port: %d, rx_len: %d\n",
port, rx_len);
@@ -67591,7 +67977,7 @@ index b2c839a..5647267 100644
if (!skb) {
mwifiex_dbg(adapter, ERROR,
"single skb allocated fail,\t"
-@@ -1521,7 +1519,7 @@ static int mwifiex_process_int_status(struct mwifiex_adapter *adapter)
+@@ -1597,7 +1597,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);
@@ -67667,7 +68053,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 7fa0128..8b7e948 100644
+index bf3f0a3..9d2a6d0 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)
@@ -67698,10 +68084,10 @@ index 7fa0128..8b7e948 100644
u32 reg;
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-index 6418620..31729cf 100644
+index f68d492..38ba52d 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
-@@ -377,7 +377,7 @@ struct rt2x00_intf {
+@@ -378,7 +378,7 @@ struct rt2x00_intf {
* for hardware which doesn't support hardware
* sequence counting.
*/
@@ -67727,7 +68113,7 @@ index 68b620b..92ecd9e 100644
hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
hdr->seq_ctrl |= cpu_to_le16(seqno);
diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.c b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
-index 24a3436..b74d6b7 100644
+index 03013eb..ade7027 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
@@ -63,7 +63,7 @@ MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
@@ -67749,7 +68135,7 @@ index 24a3436..b74d6b7 100644
u32 reg;
diff --git a/drivers/net/wireless/ralink/rt2x00/rt73usb.c b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
-index 7bbc869..d69e243 100644
+index c1397a6..82c223d 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
@@ -61,7 +61,7 @@ MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
@@ -67771,7 +68157,7 @@ index 7bbc869..d69e243 100644
u32 reg;
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
-index 7a40d8d..09b0e06 100644
+index 264466f..ab69236 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.c
+++ b/drivers/net/wireless/realtek/rtlwifi/base.c
@@ -467,15 +467,15 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw)
@@ -67829,10 +68215,10 @@ 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 e5037d1..ce357fe 100644
+index d12586d..d6f3388 100644
--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
-@@ -1100,13 +1100,16 @@ done:
+@@ -1098,13 +1098,16 @@ done:
return ret;
}
@@ -67851,7 +68237,7 @@ index e5037d1..ce357fe 100644
struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-@@ -1226,12 +1229,8 @@ static void _rtl_pci_init_struct(struct ieee80211_hw *hw,
+@@ -1225,12 +1228,8 @@ static void _rtl_pci_init_struct(struct ieee80211_hw *hw,
rtlpci->acm_method = EACMWAY2_SW;
/*task */
@@ -67867,7 +68253,7 @@ index e5037d1..ce357fe 100644
rtl_lps_change_work_callback);
}
diff --git a/drivers/net/wireless/realtek/rtlwifi/ps.c b/drivers/net/wireless/realtek/rtlwifi/ps.c
-index b69321d..ee3a01c 100644
+index 93579cac..0d490ad 100644
--- a/drivers/net/wireless/realtek/rtlwifi/ps.c
+++ b/drivers/net/wireless/realtek/rtlwifi/ps.c
@@ -205,7 +205,7 @@ static void _rtl_ps_inactive_ps(struct ieee80211_hw *hw)
@@ -67879,7 +68265,7 @@ index b69321d..ee3a01c 100644
{
struct rtl_works *rtlworks =
container_of_dwork_rtl(data, struct rtl_works, ips_nic_off_wq);
-@@ -595,7 +595,7 @@ void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
+@@ -591,7 +591,7 @@ void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flag);
}
@@ -67888,7 +68274,7 @@ index b69321d..ee3a01c 100644
{
struct rtl_works *rtlworks =
container_of_dwork_rtl(data, struct rtl_works, ps_rfon_wq);
-@@ -687,7 +687,7 @@ void rtl_lps_change_work_callback(struct work_struct *work)
+@@ -683,7 +683,7 @@ void rtl_lps_change_work_callback(struct work_struct *work)
}
EXPORT_SYMBOL_GPL(rtl_lps_change_work_callback);
@@ -67947,7 +68333,7 @@ index b661f896..ebea675 100644
wl1251_info("using SDIO interrupt");
}
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
-index a0d6ccc..36e1ae3 100644
+index 22009e1..2e5e0c1 100644
--- a/drivers/net/wireless/ti/wl12xx/main.c
+++ b/drivers/net/wireless/ti/wl12xx/main.c
@@ -656,7 +656,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
@@ -67973,7 +68359,7 @@ index a0d6ccc..36e1ae3 100644
wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER,
WL127X_IFTYPE_SR_VER, WL127X_MAJOR_SR_VER,
diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
-index 1bf26cc..7dd1267 100644
+index ae47c79..db9c714 100644
--- a/drivers/net/wireless/ti/wl18xx/main.c
+++ b/drivers/net/wireless/ti/wl18xx/main.c
@@ -2018,8 +2018,10 @@ static int wl18xx_setup(struct wl1271 *wl)
@@ -67990,7 +68376,7 @@ index 1bf26cc..7dd1267 100644
/* Enable 11a Band only if we have 5G antennas */
diff --git a/drivers/net/wireless/zydas/zd1201.c b/drivers/net/wireless/zydas/zd1201.c
-index 6f5c793..42f0dde 100644
+index dea049b..ef3bcdd 100644
--- a/drivers/net/wireless/zydas/zd1201.c
+++ b/drivers/net/wireless/zydas/zd1201.c
@@ -891,7 +891,7 @@ static void zd1201_set_multicast(struct net_device *dev)
@@ -68438,11 +68824,11 @@ index a912dc0..a8225ba 100644
ZD_ASSERT(in_interrupt());
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
-index f5231a2..966574d 100644
+index 83deeeb..bbc8855 100644
--- a/drivers/net/xen-netback/interface.c
+++ b/drivers/net/xen-netback/interface.c
-@@ -142,7 +142,7 @@ void xenvif_wake_queue(struct xenvif_queue *queue)
- netif_tx_wake_queue(netdev_get_tx_queue(dev, id));
+@@ -178,7 +178,7 @@ static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
+ return vif->hash.mapping[skb_get_hash_raw(skb) % size];
}
-static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev)
@@ -68464,10 +68850,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 4fd733f..9240d85 100644
+index befac5b..f37ddef7 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
-@@ -2126,7 +2126,7 @@ static int nvme_resume(struct device *dev)
+@@ -2060,7 +2060,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,
@@ -68477,10 +68863,10 @@ index 4fd733f..9240d85 100644
struct nvme_dev *dev = pci_get_drvdata(pdev);
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
-index 3349d2a..226e4df 100644
+index 33daffc..65eceee 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
-@@ -1179,7 +1179,9 @@ static int __init of_fdt_raw_init(void)
+@@ -1284,7 +1284,9 @@ static int __init of_fdt_raw_init(void)
pr_warn("fdt: not creating '/sys/firmware/fdt': CRC check failed\n");
return 0;
}
@@ -68636,7 +69022,7 @@ index bdef916..88c7dee 100644
};
diff --git a/drivers/parport/procfs.c b/drivers/parport/procfs.c
-index c776333..aa6b325 100644
+index 74ed3e4..3e74a1c 100644
--- a/drivers/parport/procfs.c
+++ b/drivers/parport/procfs.c
@@ -65,7 +65,7 @@ static int do_active_device(struct ctl_table *table, int write,
@@ -68657,24 +69043,11 @@ index c776333..aa6b325 100644
}
#endif /* IEEE1284.3 support. */
-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;
--};
-+} __do_const;
-
- struct gen_pci_cfg_windows {
- struct resource res;
diff --git a/drivers/pci/hotplug/acpiphp_ibm.c b/drivers/pci/hotplug/acpiphp_ibm.c
-index 2f6d3a1..cb43cfc 100644
+index f6221d7..80121ae 100644
--- a/drivers/pci/hotplug/acpiphp_ibm.c
+++ b/drivers/pci/hotplug/acpiphp_ibm.c
-@@ -463,7 +463,9 @@ static int __init ibm_acpiphp_init(void)
+@@ -465,7 +465,9 @@ static int __init ibm_acpiphp_init(void)
goto init_cleanup;
}
@@ -68867,10 +69240,10 @@ index a080f44..24ad26c 100644
/**
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
-index 342b691..aede3f4 100644
+index d319a9c..6a247fe 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
-@@ -1137,7 +1137,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
+@@ -1136,7 +1136,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;
@@ -68879,7 +69252,7 @@ index 342b691..aede3f4 100644
char *res_attr_name;
int retval;
-@@ -1317,7 +1317,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor
+@@ -1316,7 +1316,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;
@@ -68888,7 +69261,7 @@ index 342b691..aede3f4 100644
/* If the device has VPD, try to expose it in sysfs. */
if (dev->vpd) {
-@@ -1364,7 +1364,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
+@@ -1363,7 +1363,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
{
int retval;
int rom_size;
@@ -68968,7 +69341,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 bf8405f..80490e5 100644
+index 8e3ef72..f777af2 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,
@@ -69030,10 +69403,10 @@ index 55641a3..ff9c8dc 100644
if (res->flags & IORESOURCE_IO)
return pci_cardbus_io_size;
diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
-index c8969dd..4764267 100644
+index 38facef..ac0ba00 100644
--- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
+++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
-@@ -1207,7 +1207,7 @@ static int nmk_gpio_probe(struct platform_device *dev)
+@@ -1194,7 +1194,7 @@ static int nmk_gpio_probe(struct platform_device *dev)
struct device_node *np = dev->dev.of_node;
struct nmk_gpio_chip *nmk_chip;
struct gpio_chip *chip;
@@ -69043,7 +69416,7 @@ index c8969dd..4764267 100644
bool supports_sleepmode;
int irq;
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
-index 523b6b7..eb4c74d 100644
+index b7c0d6f..0ec1e8c 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -24,6 +24,7 @@
@@ -69054,7 +69427,7 @@ index 523b6b7..eb4c74d 100644
#include "pinctrl-at91.h"
#include "core.h"
-@@ -1609,7 +1610,9 @@ static int at91_gpio_of_irq_setup(struct platform_device *pdev,
+@@ -1601,7 +1602,9 @@ static int at91_gpio_of_irq_setup(struct platform_device *pdev,
at91_gpio->pioc_hwirq = irqd_to_hwirq(d);
/* Setup proper .irq_set_type function */
@@ -69066,10 +69439,10 @@ index 523b6b7..eb4c74d 100644
/* Disable irqs of this PIO controller */
writel_relaxed(~0, at91_gpio->regbase + PIO_IDR);
diff --git a/drivers/platform/chrome/chromeos_laptop.c b/drivers/platform/chrome/chromeos_laptop.c
-index 2b441e9..0377267 100644
+index e8a44a9..d859973 100644
--- a/drivers/platform/chrome/chromeos_laptop.c
+++ b/drivers/platform/chrome/chromeos_laptop.c
-@@ -498,7 +498,7 @@ static struct chromeos_laptop cr48 = {
+@@ -518,7 +518,7 @@ static struct chromeos_laptop cr48 = {
.callback = chromeos_laptop_dmi_matched, \
.driver_data = (void *)&board_
@@ -69079,10 +69452,10 @@ index 2b441e9..0377267 100644
.ident = "Samsung Series 5 550",
.matches = {
diff --git a/drivers/platform/chrome/chromeos_pstore.c b/drivers/platform/chrome/chromeos_pstore.c
-index 3474920..acc9581 100644
+index 308a853..b0693fd 100644
--- a/drivers/platform/chrome/chromeos_pstore.c
+++ b/drivers/platform/chrome/chromeos_pstore.c
-@@ -13,7 +13,7 @@
+@@ -14,7 +14,7 @@
#include <linux/platform_device.h>
#include <linux/pstore_ram.h>
@@ -69140,10 +69513,10 @@ index 4034d2d..53ed0bd 100644
/*
* Early Macbook Pros with switchable graphics use nvidia
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index a96630d..0fe8410 100644
+index a26dca3..7626b8c 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1867,6 +1867,10 @@ static int show_dsts(struct seq_file *m, void *data)
+@@ -1872,6 +1872,10 @@ static int show_dsts(struct seq_file *m, void *data)
int err;
u32 retval = -1;
@@ -69154,7 +69527,7 @@ index a96630d..0fe8410 100644
err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
if (err < 0)
-@@ -1883,6 +1887,10 @@ static int show_devs(struct seq_file *m, void *data)
+@@ -1888,6 +1892,10 @@ static int show_devs(struct seq_file *m, void *data)
int err;
u32 retval = -1;
@@ -69165,7 +69538,7 @@ index a96630d..0fe8410 100644
err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
&retval);
-@@ -1907,6 +1915,10 @@ static int show_call(struct seq_file *m, void *data)
+@@ -1912,6 +1920,10 @@ static int show_call(struct seq_file *m, void *data)
union acpi_object *obj;
acpi_status status;
@@ -69302,10 +69675,10 @@ index e6aac72..e11ff24 100644
.ident = "Samsung Q10",
.matches = {
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
-index e9caa34..72ed655 100644
+index 1dba359..2850ab9 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
-@@ -2553,7 +2553,7 @@ static void sony_nc_gfx_switch_cleanup(struct platform_device *pd)
+@@ -2556,7 +2556,7 @@ static void sony_nc_gfx_switch_cleanup(struct platform_device *pd)
}
/* High speed charging function */
@@ -69314,7 +69687,7 @@ index e9caa34..72ed655 100644
static ssize_t sony_nc_highspeed_charging_store(struct device *dev,
struct device_attribute *attr,
-@@ -2627,7 +2627,7 @@ static void sony_nc_highspeed_charging_cleanup(struct platform_device *pd)
+@@ -2630,7 +2630,7 @@ static void sony_nc_highspeed_charging_cleanup(struct platform_device *pd)
}
/* low battery function */
@@ -69323,7 +69696,7 @@ index e9caa34..72ed655 100644
static ssize_t sony_nc_lowbatt_store(struct device *dev,
struct device_attribute *attr,
-@@ -2693,7 +2693,7 @@ static void sony_nc_lowbatt_cleanup(struct platform_device *pd)
+@@ -2696,7 +2696,7 @@ static void sony_nc_lowbatt_cleanup(struct platform_device *pd)
}
/* fan speed function */
@@ -69332,7 +69705,7 @@ index e9caa34..72ed655 100644
static ssize_t sony_nc_hsfan_store(struct device *dev,
struct device_attribute *attr,
-@@ -2800,7 +2800,7 @@ static void sony_nc_fanspeed_cleanup(struct platform_device *pd)
+@@ -2803,7 +2803,7 @@ static void sony_nc_fanspeed_cleanup(struct platform_device *pd)
}
/* USB charge function */
@@ -69341,7 +69714,7 @@ index e9caa34..72ed655 100644
static ssize_t sony_nc_usb_charge_store(struct device *dev,
struct device_attribute *attr,
-@@ -2874,7 +2874,7 @@ static void sony_nc_usb_charge_cleanup(struct platform_device *pd)
+@@ -2877,7 +2877,7 @@ static void sony_nc_usb_charge_cleanup(struct platform_device *pd)
}
/* Panel ID function */
@@ -69350,7 +69723,7 @@ index e9caa34..72ed655 100644
static ssize_t sony_nc_panelid_show(struct device *dev,
struct device_attribute *attr, char *buffer)
-@@ -2921,7 +2921,7 @@ static void sony_nc_panelid_cleanup(struct platform_device *pd)
+@@ -2924,7 +2924,7 @@ static void sony_nc_panelid_cleanup(struct platform_device *pd)
}
/* smart connect function */
@@ -69359,7 +69732,7 @@ index e9caa34..72ed655 100644
static ssize_t sony_nc_smart_conn_store(struct device *dev,
struct device_attribute *attr,
-@@ -4877,7 +4877,7 @@ static struct acpi_driver sony_pic_driver = {
+@@ -4880,7 +4880,7 @@ static struct acpi_driver sony_pic_driver = {
.drv.pm = &sony_pic_pm,
};
@@ -69369,10 +69742,10 @@ 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 9255ff3..b38a0d9 100644
+index b65ce75..d92001e 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,
+@@ -2462,10 +2462,10 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn,
&& !tp_features.bright_unkfw)
TPACPI_MAY_SEND_KEY(TP_ACPI_HOTKEYSCAN_FNHOME);
}
@@ -69384,7 +69757,7 @@ index 9255ff3..b38a0d9 100644
/*
* Polling driver
-@@ -4164,7 +4164,7 @@ static int bluetooth_get_status(void)
+@@ -4203,7 +4203,7 @@ static int bluetooth_get_status(void)
TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF;
}
@@ -69393,7 +69766,7 @@ index 9255ff3..b38a0d9 100644
{
int status;
-@@ -4352,7 +4352,7 @@ static int wan_get_status(void)
+@@ -4391,7 +4391,7 @@ static int wan_get_status(void)
TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF;
}
@@ -69402,7 +69775,7 @@ index 9255ff3..b38a0d9 100644
{
int status;
-@@ -4538,7 +4538,7 @@ static int uwb_get_status(void)
+@@ -4577,7 +4577,7 @@ static int uwb_get_status(void)
TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF;
}
@@ -69411,7 +69784,7 @@ index 9255ff3..b38a0d9 100644
{
int status;
-@@ -9450,7 +9450,7 @@ static struct ibm_init_struct ibms_init[] __initdata = {
+@@ -9526,7 +9526,7 @@ static struct ibm_init_struct ibms_init[] __initdata = {
},
};
@@ -69494,7 +69867,7 @@ index 438d4c7..ca8a2fb 100644
+ pax_close_kernel();
}
diff --git a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c
-index facd43b..b291260 100644
+index 81603d9..dd8f9e1 100644
--- a/drivers/pnp/pnpbios/core.c
+++ b/drivers/pnp/pnpbios/core.c
@@ -494,7 +494,7 @@ static int __init exploding_pnp_bios(const struct dmi_system_id *d)
@@ -69573,7 +69946,7 @@ index cc439fd..8fa30df 100644
#endif /* CONFIG_SYSFS */
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
-index 456987c..45396a3 100644
+index b13cd07..3c68692 100644
--- a/drivers/power/power_supply_core.c
+++ b/drivers/power/power_supply_core.c
@@ -28,7 +28,10 @@ EXPORT_SYMBOL_GPL(power_supply_class);
@@ -69588,7 +69961,7 @@ index 456987c..45396a3 100644
#define POWER_SUPPLY_DEFERRED_REGISTER_TIME msecs_to_jiffies(10)
-@@ -960,7 +963,7 @@ static int __init power_supply_class_init(void)
+@@ -965,7 +968,7 @@ static int __init power_supply_class_init(void)
return PTR_ERR(power_supply_class);
power_supply_class->dev_uevent = power_supply_uevent;
@@ -69860,10 +70233,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 fd0e4e3..2f2eba9 100644
+index ec8184d5..33fe31c 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
-@@ -3861,7 +3861,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+@@ -3913,7 +3913,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;
@@ -69872,15 +70245,15 @@ index fd0e4e3..2f2eba9 100644
struct regulator_dev *rdev;
struct device *dev;
int ret, i;
-@@ -3954,7 +3954,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+@@ -4006,7 +4006,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",
- (unsigned long) atomic_inc_return(&regulator_no));
+ (unsigned long) atomic_inc_return_unchecked(&regulator_no));
- ret = device_register(&rdev->dev);
- if (ret != 0) {
- put_device(&rdev->dev);
+
+ /* set regulator constraints */
+ if (init_data)
diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c
index b87f62d..34f1cdf 100644
--- a/drivers/regulator/max8660.c
@@ -69899,10 +70272,10 @@ index b87f62d..34f1cdf 100644
/*
diff --git a/drivers/regulator/max8973-regulator.c b/drivers/regulator/max8973-regulator.c
-index 5b75b7c..8b1bb06 100644
+index 08d2f13..5cad68a 100644
--- a/drivers/regulator/max8973-regulator.c
+++ b/drivers/regulator/max8973-regulator.c
-@@ -658,9 +658,11 @@ static int max8973_probe(struct i2c_client *client,
+@@ -754,9 +754,11 @@ static int max8973_probe(struct i2c_client *client,
if (!pdata->enable_ext_control) {
max->desc.enable_reg = MAX8973_VOUT;
max->desc.enable_mask = MAX8973_VOUT_ENABLE;
@@ -69917,7 +70290,7 @@ index 5b75b7c..8b1bb06 100644
break;
}
-@@ -688,9 +690,11 @@ static int max8973_probe(struct i2c_client *client,
+@@ -784,9 +786,11 @@ static int max8973_probe(struct i2c_client *client,
max->desc.enable_reg = MAX8973_VOUT;
max->desc.enable_mask = MAX8973_VOUT_ENABLE;
@@ -69953,10 +70326,10 @@ 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 3d7d58a..308df86 100644
+index db3958b..4d1f2ae 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)
+@@ -329,9 +329,10 @@ void rproc_free_vring(struct rproc_vring *rvring)
*
* Returns 0 on success, or an appropriate error code otherwise
*/
@@ -69968,7 +70341,7 @@ index 3d7d58a..308df86 100644
struct device *dev = &rproc->dev;
struct rproc_vdev *rvdev;
int i, ret;
-@@ -404,9 +405,10 @@ free_rvdev:
+@@ -406,9 +407,10 @@ free_rvdev:
*
* Returns 0 on success, or an appropriate error code otherwise
*/
@@ -69980,7 +70353,7 @@ index 3d7d58a..308df86 100644
struct rproc_mem_entry *trace;
struct device *dev = &rproc->dev;
void *ptr;
-@@ -484,9 +486,10 @@ static int rproc_handle_trace(struct rproc *rproc, struct fw_rsc_trace *rsc,
+@@ -486,9 +488,10 @@ static int rproc_handle_trace(struct rproc *rproc, struct fw_rsc_trace *rsc,
* and not allow firmwares to request access to physical addresses that
* are outside those ranges.
*/
@@ -69992,7 +70365,7 @@ index 3d7d58a..308df86 100644
struct rproc_mem_entry *mapping;
struct device *dev = &rproc->dev;
int ret;
-@@ -556,10 +559,11 @@ out:
+@@ -558,10 +561,11 @@ out:
* pressure is important; it may have a substantial impact on performance.
*/
static int rproc_handle_carveout(struct rproc *rproc,
@@ -70005,7 +70378,7 @@ index 3d7d58a..308df86 100644
struct rproc_mem_entry *carveout, *mapping;
struct device *dev = &rproc->dev;
dma_addr_t dma;
-@@ -678,9 +682,11 @@ free_carv:
+@@ -680,9 +684,11 @@ free_carv:
return ret;
}
@@ -70018,7 +70391,7 @@ index 3d7d58a..308df86 100644
/* Summarize the number of notification IDs */
rproc->max_notifyid += rsc->num_of_vrings;
-@@ -692,18 +698,18 @@ static int rproc_count_vrings(struct rproc *rproc, struct fw_rsc_vdev *rsc,
+@@ -694,18 +700,18 @@ static int rproc_count_vrings(struct rproc *rproc, struct fw_rsc_vdev *rsc,
* enum fw_resource_type.
*/
static rproc_handle_resource_t rproc_loading_handlers[RSC_LAST] = {
@@ -70068,7 +70441,7 @@ index 9a3f2a6..c19b00a 100644
platform_set_drvdata(pdev, rtc);
if (rtc->irq != -1)
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
-index 84fb541..a526dd0 100644
+index fbe9c72..1432a06 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -735,7 +735,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
@@ -70104,7 +70477,7 @@ index a6d9434..dc26b71 100644
case RTC_PIE_ON:
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
-index ecb7dba..d2ea086 100644
+index 821d9c0..d71c3b5 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -111,7 +111,7 @@ struct ds1307 {
@@ -70116,6 +70489,25 @@ index ecb7dba..d2ea086 100644
enum ds_type type;
unsigned long flags;
#define HAS_NVRAM 0 /* bit 0 == sysfs file active */
+diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
+index d1bf93a..4271bfd 100644
+--- a/drivers/rtc/rtc-m41t80.c
++++ b/drivers/rtc/rtc-m41t80.c
+@@ -776,9 +776,11 @@ static int m41t80_probe(struct i2c_client *client,
+ dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
+ client->irq = 0;
+ } else {
+- m41t80_rtc_ops.read_alarm = m41t80_read_alarm;
+- m41t80_rtc_ops.set_alarm = m41t80_set_alarm;
+- m41t80_rtc_ops.alarm_irq_enable = m41t80_alarm_irq_enable;
++ pax_open_kernel();
++ const_cast(m41t80_rtc_ops.read_alarm) = m41t80_read_alarm;
++ const_cast(m41t80_rtc_ops.set_alarm) = m41t80_set_alarm;
++ const_cast(m41t80_rtc_ops.alarm_irq_enable) = m41t80_alarm_irq_enable;
++ pax_close_kernel();
+ /* Enable the wakealarm */
+ device_init_wakeup(&client->dev, true);
+ }
diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c
index d99a705..99654e7 100644
--- a/drivers/rtc/rtc-m48t59.c
@@ -70131,6 +70523,25 @@ index d99a705..99654e7 100644
ret = sysfs_create_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr);
if (ret)
+diff --git a/drivers/rtc/rtc-rv3029c2.c b/drivers/rtc/rtc-rv3029c2.c
+index 1f9f7b4..6f87883 100644
+--- a/drivers/rtc/rtc-rv3029c2.c
++++ b/drivers/rtc/rtc-rv3029c2.c
+@@ -832,9 +832,11 @@ static int rv3029_probe(struct device *dev, struct regmap *regmap, int irq,
+ dev_warn(dev, "unable to request IRQ, alarms disabled\n");
+ rv3029->irq = 0;
+ } else {
+- rv3029_rtc_ops.read_alarm = rv3029_read_alarm;
+- rv3029_rtc_ops.set_alarm = rv3029_set_alarm;
+- rv3029_rtc_ops.alarm_irq_enable = rv3029_alarm_irq_enable;
++ pax_open_kernel();
++ const_cast(rv3029_rtc_ops.read_alarm) = rv3029_read_alarm;
++ const_cast(rv3029_rtc_ops.set_alarm) = rv3029_set_alarm;
++ const_cast(rv3029_rtc_ops.alarm_irq_enable) = rv3029_alarm_irq_enable;
++ pax_close_kernel();
+ }
+ }
+
diff --git a/drivers/rtc/rtc-rv8803.c b/drivers/rtc/rtc-rv8803.c
index f623038..c22e72a 100644
--- a/drivers/rtc/rtc-rv8803.c
@@ -70205,10 +70616,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 7dfd0fa..5535b6b 100644
+index 6678d1f..0293b70 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
-@@ -772,6 +772,11 @@ static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd)
+@@ -770,6 +770,11 @@ static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd)
return 0;
}
@@ -70220,7 +70631,7 @@ index 7dfd0fa..5535b6b 100644
int aac_probe_container(struct aac_dev *dev, int cid)
{
struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL);
-@@ -784,7 +789,7 @@ int aac_probe_container(struct aac_dev *dev, int cid)
+@@ -782,7 +787,7 @@ int aac_probe_container(struct aac_dev *dev, int cid)
return -ENOMEM;
}
scsicmd->list.next = NULL;
@@ -70586,7 +70997,7 @@ index 1e7e139..c2031dd 100644
/*
diff --git a/drivers/scsi/bfa/bfa_fcs.h b/drivers/scsi/bfa/bfa_fcs.h
-index 06dc215..543c5aaa 100644
+index 0f797a5..73b170a 100644
--- a/drivers/scsi/bfa/bfa_fcs.h
+++ b/drivers/scsi/bfa/bfa_fcs.h
@@ -67,8 +67,10 @@ struct bfa_fcs_s;
@@ -70718,7 +71129,7 @@ index 06dc215..543c5aaa 100644
struct bfad_itnim_s *itnim_drv; /* driver peer instance */
struct bfa_fcs_s *fcs; /* fcs instance */
diff --git a/drivers/scsi/bfa/bfa_fcs_fcpim.c b/drivers/scsi/bfa/bfa_fcs_fcpim.c
-index 4f089d7..89b3d8e 100644
+index 2e3b19e..7a9b729 100644
--- a/drivers/scsi/bfa/bfa_fcs_fcpim.c
+++ b/drivers/scsi/bfa/bfa_fcs_fcpim.c
@@ -60,7 +60,7 @@ static void bfa_fcs_itnim_sm_hcb_offline(struct bfa_fcs_itnim_s *itnim,
@@ -70730,7 +71141,7 @@ index 4f089d7..89b3d8e 100644
{BFA_SM(bfa_fcs_itnim_sm_offline), BFA_ITNIM_OFFLINE},
{BFA_SM(bfa_fcs_itnim_sm_prli_send), BFA_ITNIM_PRLI_SEND},
{BFA_SM(bfa_fcs_itnim_sm_prli), BFA_ITNIM_PRLI_SENT},
-@@ -672,7 +672,7 @@ bfa_status_t
+@@ -673,7 +673,7 @@ bfa_status_t
bfa_fcs_itnim_get_online_state(struct bfa_fcs_itnim_s *itnim)
{
bfa_trc(itnim->fcs, itnim->rport->pid);
@@ -70739,7 +71150,7 @@ index 4f089d7..89b3d8e 100644
case BFA_ITNIM_ONLINE:
case BFA_ITNIM_INITIATIOR:
return BFA_STATUS_OK;
-@@ -772,7 +772,7 @@ bfa_fcs_itnim_attr_get(struct bfa_fcs_lport_s *port, wwn_t rpwwn,
+@@ -773,7 +773,7 @@ bfa_fcs_itnim_attr_get(struct bfa_fcs_lport_s *port, wwn_t rpwwn,
if (itnim == NULL)
return BFA_STATUS_NO_FCPIM_NEXUS;
@@ -71777,10 +72188,10 @@ index 641c60e..5bfb1f1 100644
int rc = -ENODEV;
struct net_device *netdev = NULL;
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
-index 5be944c..4a7936d 100644
+index ff8dcd5..b53efa2 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
-@@ -914,10 +914,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q)
+@@ -942,10 +942,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)
@@ -71793,7 +72204,7 @@ index 5be944c..4a7936d 100644
if ((rq->head[rq->current_entry] & 1) == rq->wraparound) {
a = rq->head[rq->current_entry];
-@@ -1099,7 +1099,7 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h,
+@@ -1127,7 +1127,7 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h,
break;
default:
set_performant_mode(h, c, reply_queue);
@@ -71802,7 +72213,7 @@ index 5be944c..4a7936d 100644
}
}
-@@ -6843,17 +6843,17 @@ static void __iomem *remap_pci_mem(ulong base, ulong size)
+@@ -6951,17 +6951,17 @@ static void __iomem *remap_pci_mem(ulong base, ulong size)
static inline unsigned long get_next_completion(struct ctlr_info *h, u8 q)
{
@@ -71823,7 +72234,7 @@ index 5be944c..4a7936d 100644
(h->interrupts_enabled == 0);
}
-@@ -7781,7 +7781,7 @@ static int hpsa_pci_init(struct ctlr_info *h)
+@@ -7889,7 +7889,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;
@@ -71832,7 +72243,7 @@ index 5be944c..4a7936d 100644
h->needs_abort_tags_swizzled =
ctlr_needs_abort_tags_swizzled(h->board_id);
-@@ -8180,7 +8180,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
+@@ -8288,7 +8288,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
unsigned long flags;
u32 lockup_detected;
@@ -71841,7 +72252,7 @@ index 5be944c..4a7936d 100644
spin_lock_irqsave(&h->lock, flags);
lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET);
if (!lockup_detected) {
-@@ -8516,7 +8516,7 @@ reinit_after_soft_reset:
+@@ -8626,7 +8626,7 @@ reinit_after_soft_reset:
}
/* make sure the board interrupts are off */
@@ -71850,7 +72261,7 @@ index 5be944c..4a7936d 100644
rc = hpsa_request_irqs(h, do_hpsa_intr_msi, do_hpsa_intr_intx);
if (rc)
-@@ -8574,7 +8574,7 @@ reinit_after_soft_reset:
+@@ -8679,7 +8679,7 @@ reinit_after_soft_reset:
* fake ones to scoop up any residual completions.
*/
spin_lock_irqsave(&h->lock, flags);
@@ -71859,7 +72270,7 @@ index 5be944c..4a7936d 100644
spin_unlock_irqrestore(&h->lock, flags);
hpsa_free_irqs(h);
rc = hpsa_request_irqs(h, hpsa_msix_discard_completions,
-@@ -8604,9 +8604,9 @@ reinit_after_soft_reset:
+@@ -8709,9 +8709,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");
@@ -71871,7 +72282,7 @@ index 5be944c..4a7936d 100644
rc = controller_reset_failed(h->cfgtable);
if (rc)
-@@ -8633,7 +8633,7 @@ reinit_after_soft_reset:
+@@ -8738,7 +8738,7 @@ reinit_after_soft_reset:
/* Turn the interrupts on so we can service requests */
@@ -71880,7 +72291,7 @@ index 5be944c..4a7936d 100644
hpsa_hba_inquiry(h);
-@@ -8654,7 +8654,7 @@ reinit_after_soft_reset:
+@@ -8764,7 +8764,7 @@ reinit_after_soft_reset:
clean7: /* perf, sg, cmd, irq, shost, pci, lu, aer/h */
hpsa_free_performant_mode(h);
@@ -71889,7 +72300,7 @@ index 5be944c..4a7936d 100644
clean6: /* sg, cmd, irq, pci, lockup, wq/aer/h */
hpsa_free_sg_chain_blocks(h);
clean5: /* cmd, irq, shost, pci, lu, aer/h */
-@@ -8789,7 +8789,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
+@@ -8899,7 +8899,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
* To write all data in the battery backed cache to disks
*/
hpsa_flush_cache(h);
@@ -71898,7 +72309,7 @@ index 5be944c..4a7936d 100644
hpsa_free_irqs(h); /* init_one 4 */
hpsa_disable_interrupt_mode(h); /* pci_init 2 */
}
-@@ -8931,7 +8931,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -9041,7 +9041,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));
@@ -71907,7 +72318,7 @@ index 5be944c..4a7936d 100644
/* This is a bit complicated. There are 8 registers on
* the controller which we write to to tell it 8 different
-@@ -8973,7 +8973,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -9083,7 +9083,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))
@@ -71916,7 +72327,7 @@ index 5be944c..4a7936d 100644
/* Controller spec: zero out this buffer. */
for (i = 0; i < h->nreply_queues; i++)
-@@ -9003,12 +9003,12 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -9113,12 +9113,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) {
@@ -71932,10 +72343,10 @@ index 5be944c..4a7936d 100644
writel(4, &h->cfgtable->HostWrite.CoalIntCount);
}
diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
-index d06bb74..8650763 100644
+index a1487e6..53a2c5d 100644
--- a/drivers/scsi/hpsa.h
+++ b/drivers/scsi/hpsa.h
-@@ -178,7 +178,7 @@ struct ctlr_info {
+@@ -179,7 +179,7 @@ struct ctlr_info {
unsigned int msix_vector;
unsigned int msi_vector;
int intr_mode; /* either PERF_MODE_INT or SIMPLE_MODE_INT */
@@ -71944,7 +72355,7 @@ index d06bb74..8650763 100644
/* queue and queue Info */
unsigned int Qdepth;
-@@ -578,38 +578,38 @@ static unsigned long SA5_ioaccel_mode1_completed(struct ctlr_info *h, u8 q)
+@@ -579,38 +579,38 @@ static unsigned long SA5_ioaccel_mode1_completed(struct ctlr_info *h, u8 q)
}
static struct access_method SA5_access = {
@@ -72036,7 +72447,7 @@ index 4d1c511..d5744cb 100644
wait_queue_head_t reset_wq;
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
-index d6a691e..59e3128 100644
+index d6803a9..412f546 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -947,7 +947,7 @@ static void ipr_send_command(struct ipr_cmnd *ipr_cmd)
@@ -72326,10 +72737,10 @@ index 30f9ef0..a1e29ac 100644
}
EXPORT_SYMBOL(fc_exch_update_stats);
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
-index 9c706d8..d3e3ed2 100644
+index 935c430..a73e08b 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
-@@ -535,7 +535,7 @@ static struct ata_port_operations sas_sata_ops = {
+@@ -538,7 +538,7 @@ static struct ata_port_operations sas_sata_ops = {
.postreset = ata_std_postreset,
.error_handler = ata_std_error_handler,
.post_internal_cmd = sas_ata_post_internal,
@@ -72339,7 +72750,7 @@ index 9c706d8..d3e3ed2 100644
.qc_issue = sas_ata_qc_issue,
.qc_fill_rtf = sas_ata_qc_fill_rtf,
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
-index 90a3ca5..a68c8cd 100644
+index d5bd420..a0f6ea6 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -430,7 +430,7 @@ struct lpfc_vport {
@@ -72455,10 +72866,10 @@ index a63542b..80692ee 100644
snprintf(name, sizeof(name), "discovery_trace");
vport->debug_disc_trc =
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
-index f57d02c..6ba534b 100644
+index b43f7ac..a635694 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
-@@ -11028,7 +11028,7 @@ lpfc_pci_resume_one(struct pci_dev *pdev)
+@@ -11045,7 +11045,7 @@ lpfc_pci_resume_one(struct pci_dev *pdev)
* PCI_ERS_RESULT_DISCONNECT - device could not be recovered
**/
static pci_ers_result_t
@@ -72467,7 +72878,7 @@ index f57d02c..6ba534b 100644
{
struct Scsi_Host *shost = pci_get_drvdata(pdev);
struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
-@@ -11436,8 +11436,10 @@ lpfc_init(void)
+@@ -11453,8 +11453,10 @@ lpfc_init(void)
"misc_register returned with status %d", error);
if (lpfc_enable_npiv) {
@@ -72516,10 +72927,10 @@ index 3bd0be6..f9b0725e 100644
/**
diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h
-index fce414a..3c5884e 100644
+index ca86c88..175be62 100644
--- a/drivers/scsi/megaraid/megaraid_sas.h
+++ b/drivers/scsi/megaraid/megaraid_sas.h
-@@ -2046,7 +2046,7 @@ struct megasas_instance {
+@@ -2048,7 +2048,7 @@ struct megasas_instance {
s8 init_id;
u16 max_num_sge;
@@ -72529,10 +72940,10 @@ index fce414a..3c5884e 100644
u16 max_scsi_cmds;
u16 ldio_threshold;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
-index 8c44b9c..a55ec7f 100644
+index 751f13e..c68a4f99 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
-@@ -104,7 +104,7 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
+@@ -105,7 +105,7 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
*
*/
static int
@@ -72542,10 +72953,10 @@ index 8c44b9c..a55ec7f 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 e0e4920..62b1b8e1 100644
+index 6bff13e..f00582c 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
-@@ -282,7 +282,7 @@ struct _scsi_io_transfer {
+@@ -280,7 +280,7 @@ struct _scsi_io_transfer {
* Note: The logging levels are defined in mpt3sas_debug.h.
*/
static int
@@ -72554,7 +72965,7 @@ index e0e4920..62b1b8e1 100644
{
int ret = param_set_int(val, kp);
struct MPT3SAS_ADAPTER *ioc;
-@@ -8910,7 +8910,7 @@ scsih_resume(struct pci_dev *pdev)
+@@ -8932,7 +8932,7 @@ scsih_resume(struct pci_dev *pdev)
* PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT
*/
pci_ers_result_t
@@ -72870,10 +73281,10 @@ index 7c0b60c..0c2c9de 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 8a44d15..a3a925a 100644
+index ca39deb..bd37bc2 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
-@@ -668,7 +668,7 @@ static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd)
+@@ -678,7 +678,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 */
@@ -72882,7 +73293,7 @@ index 8a44d15..a3a925a 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);
-@@ -835,8 +835,9 @@ static void qlt_undelete_sess(struct qla_tgt_sess *sess)
+@@ -845,8 +845,9 @@ static void qlt_undelete_sess(struct qla_tgt_sess *sess)
sess->deleted = 0;
}
@@ -72893,7 +73304,7 @@ index 8a44d15..a3a925a 100644
struct qla_tgt *tgt = container_of(work, struct qla_tgt,
sess_del_work);
struct scsi_qla_host *vha = tgt->vha;
-@@ -5817,7 +5818,7 @@ static struct qla_tgt_sess *qlt_make_local_sess(struct scsi_qla_host *vha,
+@@ -5825,7 +5826,7 @@ static struct qla_tgt_sess *qlt_make_local_sess(struct scsi_qla_host *vha,
retry:
global_resets =
@@ -72902,7 +73313,7 @@ index 8a44d15..a3a925a 100644
rc = qla24xx_get_loop_id(vha, s_id, &loop_id);
if (rc != 0) {
-@@ -5856,12 +5857,12 @@ retry:
+@@ -5864,12 +5865,12 @@ retry:
}
if (global_resets !=
@@ -72917,7 +73328,7 @@ index 8a44d15..a3a925a 100644
qla_tgt->tgt_global_resets_count));
goto retry;
}
-@@ -6074,8 +6075,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha)
+@@ -6080,8 +6081,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);
@@ -72927,7 +73338,7 @@ index 8a44d15..a3a925a 100644
spin_lock_init(&tgt->sess_work_lock);
INIT_WORK(&tgt->sess_work, qlt_sess_work_fn);
INIT_LIST_HEAD(&tgt->sess_works_list);
-@@ -6083,7 +6083,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha)
+@@ -6089,7 +6089,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);
@@ -72937,10 +73348,10 @@ index 8a44d15..a3a925a 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 d857fee..01fc070 100644
+index f26c5f6..e88e9c5 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
-@@ -877,7 +877,7 @@ struct qla_tgt {
+@@ -876,7 +876,7 @@ struct qla_tgt {
struct list_head srr_imm_list;
struct work_struct srr_work;
@@ -73042,129 +73453,117 @@ index 1deb6ad..3057db5 100644
if (drv->done)
good_bytes = drv->done(cmd);
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
-index f3d69a98..40f8223 100644
+index 0f9ba41..104dc67 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
-@@ -559,9 +559,9 @@ static bool scsi_debug_host_lock = DEF_HOST_LOCK;
- static bool scsi_debug_strict = DEF_STRICT;
- static bool sdebug_any_injecting_opt;
-
--static atomic_t sdebug_cmnd_count;
--static atomic_t sdebug_completions;
--static atomic_t sdebug_a_tsf; /* counter of 'almost' TSFs */
-+static atomic_unchecked_t sdebug_cmnd_count;
-+static atomic_unchecked_t sdebug_completions;
-+static atomic_unchecked_t sdebug_a_tsf; /* counter of 'almost' TSFs */
-
- #define DEV_READONLY(TGT) (0)
-
-@@ -3447,7 +3447,7 @@ static void sdebug_q_cmd_complete(unsigned long indx)
- struct scsi_cmnd *scp;
- struct sdebug_dev_info *devip;
-
-- atomic_inc(&sdebug_completions);
-+ atomic_inc_unchecked(&sdebug_completions);
- qa_indx = indx;
- if ((qa_indx < 0) || (qa_indx >= SCSI_DEBUG_CANQUEUE)) {
- pr_err("wild qa_indx=%d\n", qa_indx);
-@@ -3507,7 +3507,7 @@ sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
- struct scsi_cmnd *scp;
- struct sdebug_dev_info *devip;
-
-- atomic_inc(&sdebug_completions);
-+ atomic_inc_unchecked(&sdebug_completions);
- qa_indx = sd_hrtp->qa_indx;
- if ((qa_indx < 0) || (qa_indx >= SCSI_DEBUG_CANQUEUE)) {
- pr_err("wild qa_indx=%d\n", qa_indx);
-@@ -3976,9 +3976,9 @@ schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
- (SCSI_DEBUG_OPT_RARE_TSF & scsi_debug_opts) &&
- (scsi_result == 0)) {
- if ((num_in_q == (qdepth - 1)) &&
-- (atomic_inc_return(&sdebug_a_tsf) >=
-+ (atomic_inc_return_unchecked(&sdebug_a_tsf) >=
- abs(scsi_debug_every_nth))) {
-- atomic_set(&sdebug_a_tsf, 0);
-+ atomic_set_unchecked(&sdebug_a_tsf, 0);
- inject = 1;
- scsi_result = device_qfull_result;
- }
-@@ -4182,7 +4182,7 @@ static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer, int lengt
- return -EINVAL;
- scsi_debug_opts = opts;
- if (scsi_debug_every_nth != 0)
-- atomic_set(&sdebug_cmnd_count, 0);
-+ atomic_set_unchecked(&sdebug_cmnd_count, 0);
- return length;
+@@ -289,10 +289,10 @@ struct sdebug_queue {
+ atomic_t blocked; /* to temporarily stop more being queued */
+ };
+
+-static atomic_t sdebug_cmnd_count; /* number of incoming commands */
+-static atomic_t sdebug_completions; /* count of deferred completions */
+-static atomic_t sdebug_miss_cpus; /* submission + completion cpus differ */
+-static atomic_t sdebug_a_tsf; /* 'almost task set full' counter */
++static atomic_unchecked_t sdebug_cmnd_count; /* number of incoming commands */
++static atomic_unchecked_t sdebug_completions; /* count of deferred completions */
++static atomic_unchecked_t sdebug_miss_cpus; /* submission + completion cpus differ */
++static atomic_unchecked_t sdebug_a_tsf; /* 'almost task set full' counter */
+
+ struct opcode_info_t {
+ u8 num_attached; /* 0 if this is it (i.e. a leaf); use 0xff */
+@@ -3453,9 +3453,9 @@ static void sdebug_q_cmd_complete(struct sdebug_defer *sd_dp)
+ qc_idx = sd_dp->qc_idx;
+ sqp = sdebug_q_arr + sd_dp->sqa_idx;
+ if (sdebug_statistics) {
+- atomic_inc(&sdebug_completions);
++ atomic_inc_unchecked(&sdebug_completions);
+ if (raw_smp_processor_id() != sd_dp->issuing_cpu)
+- atomic_inc(&sdebug_miss_cpus);
++ atomic_inc_unchecked(&sdebug_miss_cpus);
+ }
+ if (unlikely((qc_idx < 0) || (qc_idx >= SDEBUG_CANQUEUE))) {
+ pr_err("wild qc_idx=%d\n", qc_idx);
+@@ -3927,23 +3927,23 @@ static void tweak_cmnd_count(void)
+ if (modulo < 2)
+ return;
+ block_unblock_all_queues(true);
+- count = atomic_read(&sdebug_cmnd_count);
+- atomic_set(&sdebug_cmnd_count, (count / modulo) * modulo);
++ count = atomic_read_unchecked(&sdebug_cmnd_count);
++ atomic_set_unchecked(&sdebug_cmnd_count, (count / modulo) * modulo);
+ block_unblock_all_queues(false);
}
-@@ -4197,8 +4197,8 @@ static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
- if (scsi_debug_every_nth > 0)
- snprintf(b, sizeof(b), " (curr:%d)",
- ((SCSI_DEBUG_OPT_RARE_TSF & scsi_debug_opts) ?
-- atomic_read(&sdebug_a_tsf) :
-- atomic_read(&sdebug_cmnd_count)));
-+ atomic_read_unchecked(&sdebug_a_tsf) :
-+ atomic_read_unchecked(&sdebug_cmnd_count)));
- else
- b[0] = '\0';
-
-@@ -4213,7 +4213,7 @@ static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
- SCSI_DEBUG_VERSION, scsi_debug_version_date,
- scsi_debug_num_tgts, scsi_debug_dev_size_mb, scsi_debug_opts,
- scsi_debug_every_nth, b, scsi_debug_delay, scsi_debug_ndelay,
-- scsi_debug_max_luns, atomic_read(&sdebug_completions),
-+ scsi_debug_max_luns, atomic_read_unchecked(&sdebug_completions),
- scsi_debug_sector_size, sdebug_cylinders_per, sdebug_heads,
- sdebug_sectors_per, num_aborts, num_dev_resets,
- num_target_resets, num_bus_resets, num_host_resets,
-@@ -4328,8 +4328,8 @@ opts_done:
- sdebug_any_injecting_opt = true;
- else if (SCSI_DEBUG_OPT_SHORT_TRANSFER & opts)
- sdebug_any_injecting_opt = true;
+ static void clear_queue_stats(void)
+ {
- atomic_set(&sdebug_cmnd_count, 0);
+- atomic_set(&sdebug_completions, 0);
+- atomic_set(&sdebug_miss_cpus, 0);
- atomic_set(&sdebug_a_tsf, 0);
+ atomic_set_unchecked(&sdebug_cmnd_count, 0);
++ atomic_set_unchecked(&sdebug_completions, 0);
++ atomic_set_unchecked(&sdebug_miss_cpus, 0);
+ atomic_set_unchecked(&sdebug_a_tsf, 0);
- return count;
}
- static DRIVER_ATTR_RW(opts);
-@@ -4459,7 +4459,7 @@ static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
- if ((count > 0) && (1 == sscanf(buf, "%d", &nth))) {
- scsi_debug_every_nth = nth;
-- atomic_set(&sdebug_cmnd_count, 0);
-+ atomic_set_unchecked(&sdebug_cmnd_count, 0);
- return count;
- }
- return -EINVAL;
-@@ -4783,8 +4783,8 @@ static int __init scsi_debug_init(void)
- int k;
- int ret;
-
-- atomic_set(&sdebug_cmnd_count, 0);
-- atomic_set(&sdebug_completions, 0);
-+ atomic_set_unchecked(&sdebug_cmnd_count, 0);
-+ atomic_set_unchecked(&sdebug_completions, 0);
- atomic_set(&retired_max_queue, 0);
-
- if (scsi_debug_ndelay >= 1000000000) {
-@@ -5106,9 +5106,9 @@ check_inject(struct scsi_cmnd *scp)
-
- memset(ep, 0, sizeof(struct sdebug_scmd_extra_t));
-
-- if (atomic_inc_return(&sdebug_cmnd_count) >=
-+ if (atomic_inc_return_unchecked(&sdebug_cmnd_count) >=
- abs(scsi_debug_every_nth)) {
-- atomic_set(&sdebug_cmnd_count, 0);
-+ atomic_set_unchecked(&sdebug_cmnd_count, 0);
- if (scsi_debug_every_nth < -1)
- scsi_debug_every_nth = -1;
- if (SCSI_DEBUG_OPT_TIMEOUT & scsi_debug_opts)
+ static void setup_inject(struct sdebug_queue *sqp,
+ struct sdebug_queued_cmd *sqcp)
+ {
+- if ((atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0)
++ if ((atomic_read_unchecked(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0)
+ return;
+ sqcp->inj_recovered = !!(SDEBUG_OPT_RECOVERED_ERR & sdebug_opts);
+ sqcp->inj_transport = !!(SDEBUG_OPT_TRANSPORT_ERR & sdebug_opts);
+@@ -4000,9 +4000,9 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
+ (SDEBUG_OPT_RARE_TSF & sdebug_opts) &&
+ (scsi_result == 0))) {
+ if ((num_in_q == (qdepth - 1)) &&
+- (atomic_inc_return(&sdebug_a_tsf) >=
++ (atomic_inc_return_unchecked(&sdebug_a_tsf) >=
+ abs(sdebug_every_nth))) {
+- atomic_set(&sdebug_a_tsf, 0);
++ atomic_set_unchecked(&sdebug_a_tsf, 0);
+ inject = 1;
+ scsi_result = device_qfull_result;
+ }
+@@ -4257,10 +4257,10 @@ static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
+ TICK_NSEC / 1000, "statistics", sdebug_statistics,
+ sdebug_mq_active);
+ seq_printf(m, "cmnd_count=%d, completions=%d, %s=%d, a_tsf=%d\n",
+- atomic_read(&sdebug_cmnd_count),
+- atomic_read(&sdebug_completions),
+- "miss_cpus", atomic_read(&sdebug_miss_cpus),
+- atomic_read(&sdebug_a_tsf));
++ atomic_read_unchecked(&sdebug_cmnd_count),
++ atomic_read_unchecked(&sdebug_completions),
++ "miss_cpus", atomic_read_unchecked(&sdebug_miss_cpus),
++ atomic_read_unchecked(&sdebug_a_tsf));
+
+ seq_printf(m, "submit_queues=%d\n", submit_queues);
+ for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
+@@ -5213,7 +5213,7 @@ static int sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
+
+ static bool fake_timeout(struct scsi_cmnd *scp)
+ {
+- if (0 == (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth))) {
++ if (0 == (atomic_read_unchecked(&sdebug_cmnd_count) % abs(sdebug_every_nth))) {
+ if (sdebug_every_nth < -1)
+ sdebug_every_nth = -1;
+ if (SDEBUG_OPT_TIMEOUT & sdebug_opts)
+@@ -5244,7 +5244,7 @@ static int scsi_debug_queuecommand(struct Scsi_Host *shost,
+
+ scsi_set_resid(scp, 0);
+ if (sdebug_statistics)
+- atomic_inc(&sdebug_cmnd_count);
++ atomic_inc_unchecked(&sdebug_cmnd_count);
+ if (unlikely(sdebug_verbose &&
+ !(SDEBUG_OPT_NO_CDB_NOISE & sdebug_opts))) {
+ char b[120];
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
-index f704d02..18cad07 100644
+index c71344a..94f1f9e 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
-@@ -1602,7 +1602,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)
+@@ -1513,7 +1513,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;
@@ -73173,7 +73572,7 @@ index f704d02..18cad07 100644
/*
* SCSI request completion path will do scsi_device_unbusy(),
-@@ -1625,9 +1625,9 @@ static void scsi_softirq_done(struct request *rq)
+@@ -1536,9 +1536,9 @@ static void scsi_softirq_done(struct request *rq)
INIT_LIST_HEAD(&cmd->eh_entry);
@@ -73185,7 +73584,7 @@ index f704d02..18cad07 100644
disposition = scsi_decide_disposition(cmd);
if (disposition != SUCCESS &&
-@@ -1668,7 +1668,7 @@ static int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
+@@ -1579,7 +1579,7 @@ static int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
struct Scsi_Host *host = cmd->device->host;
int rtn = 0;
@@ -73195,10 +73594,10 @@ index f704d02..18cad07 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 c7e4b5e..ee7495b 100644
+index 0734927..427833a 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
-@@ -847,7 +847,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr, \
+@@ -848,7 +848,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr, \
char *buf) \
{ \
struct scsi_device *sdev = to_scsi_device(dev); \
@@ -73208,7 +73607,7 @@ index c7e4b5e..ee7495b 100644
} \
static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL)
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
-index 8a88226..0d26fd1 100644
+index 0f3a386..1616cee 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -502,7 +502,7 @@ static DECLARE_TRANSPORT_CLASS(fc_vport_class,
@@ -73248,7 +73647,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 4414816..95c7991 100644
+index 42bca61..ceceb5d 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -79,7 +79,7 @@ struct iscsi_internal {
@@ -73260,16 +73659,16 @@ index 4414816..95c7991 100644
static struct workqueue_struct *iscsi_eh_timer_workq;
static DEFINE_IDA(iscsi_sess_ida);
-@@ -2074,7 +2074,7 @@ int iscsi_add_session(struct iscsi_cls_session *session, unsigned int target_id)
+@@ -2073,7 +2073,7 @@ int iscsi_add_session(struct iscsi_cls_session *session, unsigned int target_id)
+ int id = 0;
int err;
- ihost = shost->shost_data;
- session->sid = atomic_add_return(1, &iscsi_session_nr);
+ session->sid = atomic_add_return_unchecked(1, &iscsi_session_nr);
if (target_id == ISCSI_MAX_TARGET) {
id = ida_simple_get(&iscsi_sess_ida, 0, 0, GFP_KERNEL);
-@@ -4524,7 +4524,7 @@ static __init int iscsi_transport_init(void)
+@@ -4523,7 +4523,7 @@ static __init int iscsi_transport_init(void)
printk(KERN_INFO "Loading iSCSI transport class v%s.\n",
ISCSI_TRANSPORT_VERSION);
@@ -73332,7 +73731,7 @@ index e3cd3ec..97ab643 100644
transport_setup_device(&rport->dev);
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index 41c3a2c..9aa3d32 100644
+index 60bff78..36bbe07 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -112,7 +112,7 @@ static int sd_resume(struct device *);
@@ -73344,7 +73743,7 @@ index 41c3a2c..9aa3d32 100644
static int sd_eh_action(struct scsi_cmnd *, int);
static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer);
static void scsi_disk_release(struct device *cdev);
-@@ -1757,7 +1757,7 @@ static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
+@@ -1762,7 +1762,7 @@ static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
*
* Note: potentially run from within an ISR. Must not block.
**/
@@ -73353,7 +73752,7 @@ index 41c3a2c..9aa3d32 100644
{
int result = SCpnt->result;
unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);
-@@ -3071,7 +3071,7 @@ static int sd_probe(struct device *dev)
+@@ -3076,7 +3076,7 @@ static int sd_probe(struct device *dev)
sdkp->disk = gd;
sdkp->index = index;
atomic_set(&sdkp->openers, 0);
@@ -73437,10 +73836,10 @@ index de2c1bf..60b8563 100644
.read = fuse_read,
};
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
-index 0239b45..b196163 100644
+index 77e6e45..19e6c3d 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -2934,7 +2934,7 @@ int spi_bus_unlock(struct spi_master *master)
+@@ -2937,7 +2937,7 @@ int spi_bus_unlock(struct spi_master *master)
EXPORT_SYMBOL_GPL(spi_bus_unlock);
/* portable code must never pass more than 32 bytes */
@@ -73449,42 +73848,11 @@ index 0239b45..b196163 100644
static u8 *buf;
-diff --git a/drivers/staging/android/timed_output.c b/drivers/staging/android/timed_output.c
-index aff9cdb..a2f1a81 100644
---- a/drivers/staging/android/timed_output.c
-+++ b/drivers/staging/android/timed_output.c
-@@ -26,7 +26,7 @@
- #include "timed_output.h"
-
- static struct class *timed_output_class;
--static atomic_t device_count;
-+static atomic_unchecked_t device_count;
-
- static ssize_t enable_show(struct device *dev, struct device_attribute *attr,
- char *buf)
-@@ -66,7 +66,7 @@ static int create_timed_output_class(void)
- timed_output_class = class_create(THIS_MODULE, "timed_output");
- if (IS_ERR(timed_output_class))
- return PTR_ERR(timed_output_class);
-- atomic_set(&device_count, 0);
-+ atomic_set_unchecked(&device_count, 0);
- timed_output_class->dev_groups = timed_output_groups;
- }
-
-@@ -84,7 +84,7 @@ int timed_output_dev_register(struct timed_output_dev *tdev)
- if (ret < 0)
- return ret;
-
-- tdev->index = atomic_inc_return(&device_count);
-+ tdev->index = atomic_inc_return_unchecked(&device_count);
- tdev->dev = device_create(timed_output_class, NULL,
- 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 7c7b477..8f133af 100644
+index 629080f..b6db85a 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)
+@@ -312,8 +312,8 @@ static void comedi_file_reset(struct file *file)
}
cfp->last_attached = dev->attached;
cfp->last_detach_count = dev->detach_count;
@@ -73495,7 +73863,7 @@ index 7c7b477..8f133af 100644
}
static void comedi_file_check(struct file *file)
-@@ -1989,7 +1989,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, unsigned long arg,
+@@ -1992,7 +1992,7 @@ static int do_setrsubd_ioctl(struct comedi_device *dev, unsigned long arg,
!(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;
@@ -73504,7 +73872,7 @@ index 7c7b477..8f133af 100644
return 0;
}
-@@ -2031,7 +2031,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, unsigned long arg,
+@@ -2034,7 +2034,7 @@ static int do_setwsubd_ioctl(struct comedi_device *dev, unsigned long arg,
(s_old->async->cmd.flags & CMDF_WRITE))
return -EBUSY;
@@ -73592,7 +73960,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 62e5eca..fbd4927 100644
+index a06b46c..b49c700 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)
@@ -73623,52 +73991,32 @@ index a60d72f..ef54d2f 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 dcb6e50..6d3b10f 100644
+index a63d86c..aea8493 100644
--- a/drivers/staging/lustre/lnet/selftest/brw_test.c
+++ b/drivers/staging/lustre/lnet/selftest/brw_test.c
-@@ -490,13 +490,11 @@ brw_server_handle(struct srpc_server_rpc *rpc)
+@@ -488,14 +488,11 @@ brw_server_handle(struct srpc_server_rpc *rpc)
return 0;
}
--sfw_test_client_ops_t brw_test_client;
+-struct sfw_test_client_ops 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_prep_rpc = brw_client_prep_rpc;
- brw_test_client.tso_done_rpc = brw_client_done_rpc;
-+sfw_test_client_ops_t brw_test_client = {
++struct sfw_test_client_ops brw_test_client = {
+ .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;
+ struct srpc_service brw_test_service;
diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c
-index e2c5323..403c917 100644
+index 30e4f71..a3216ff 100644
--- a/drivers/staging/lustre/lnet/selftest/framework.c
+++ b/drivers/staging/lustre/lnet/selftest/framework.c
@@ -1659,12 +1659,10 @@ sfw_startup(void)
@@ -73685,14 +74033,15 @@ index e2c5323..403c917 100644
rc = sfw_register_test(&ping_test_service, &ping_test_client);
LASSERT(!rc);
diff --git a/drivers/staging/lustre/lnet/selftest/ping_test.c b/drivers/staging/lustre/lnet/selftest/ping_test.c
-index 81a4504..507a945 100644
+index ad26fe9..bbe81b5 100644
--- a/drivers/staging/lustre/lnet/selftest/ping_test.c
+++ b/drivers/staging/lustre/lnet/selftest/ping_test.c
-@@ -210,14 +210,12 @@ ping_server_handle(struct srpc_server_rpc *rpc)
+@@ -210,15 +210,12 @@ ping_server_handle(struct srpc_server_rpc *rpc)
return 0;
}
--sfw_test_client_ops_t ping_test_client;
+-struct sfw_test_client_ops ping_test_client;
+-
-void ping_init_test_client(void)
-{
- ping_test_client.tso_init = ping_client_init;
@@ -73700,38 +74049,38 @@ index 81a4504..507a945 100644
- 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 = {
++struct sfw_test_client_ops ping_test_client = {
+ .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)
+ struct srpc_service ping_test_service;
+
diff --git a/drivers/staging/lustre/lnet/selftest/selftest.h b/drivers/staging/lustre/lnet/selftest/selftest.h
-index e689ca1..b7555bb 100644
+index 4eac1c9..498313a 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)
+@@ -612,13 +612,11 @@ srpc_wait_service_shutdown(struct srpc_service *sv)
}
- extern sfw_test_client_ops_t brw_test_client;
+ extern struct sfw_test_client_ops brw_test_client;
-void brw_init_test_client(void);
- extern srpc_service_t brw_test_service;
+ extern struct srpc_service brw_test_service;
void brw_init_test_service(void);
- extern sfw_test_client_ops_t ping_test_client;
+ extern struct sfw_test_client_ops ping_test_client;
-void ping_init_test_client(void);
- extern srpc_service_t ping_test_service;
+ extern struct srpc_service 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 5aae1d0..75f31ca 100644
+index 9c53c17..c8b7b4c 100644
--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
-@@ -759,7 +759,7 @@ static inline ino_t lu_igif_ino(const struct lu_fid *fid)
+@@ -788,7 +788,7 @@ static inline ino_t lu_igif_ino(const struct lu_fid *fid)
return fid_seq(fid);
}
@@ -73740,7 +74089,7 @@ index 5aae1d0..75f31ca 100644
/**
* Get inode generation from a igif.
-@@ -826,8 +826,8 @@ static inline int fid_is_zero(const struct lu_fid *fid)
+@@ -855,8 +855,8 @@ static inline int fid_is_zero(const struct lu_fid *fid)
return fid_seq(fid) == 0 && fid_oid(fid) == 0;
}
@@ -73751,7 +74100,7 @@ index 5aae1d0..75f31ca 100644
static inline int lu_fid_eq(const struct lu_fid *f0, const struct lu_fid *f1)
{
-@@ -1131,7 +1131,7 @@ struct ptlrpc_body_v2 {
+@@ -1161,7 +1161,7 @@ struct ptlrpc_body_v2 {
__u64 pb_padding[4];
};
@@ -73760,7 +74109,7 @@ index 5aae1d0..75f31ca 100644
/* message body offset for lustre_msg_v2 */
/* ptlrpc body offset in all request/reply messages */
-@@ -1361,7 +1361,7 @@ struct obd_connect_data {
+@@ -1394,7 +1394,7 @@ struct obd_connect_data {
* reserve the flag for future use.
*/
@@ -73769,7 +74118,7 @@ index 5aae1d0..75f31ca 100644
/*
* Supported checksum algorithms. Up to 32 checksum types are supported.
-@@ -1708,10 +1708,10 @@ struct hsm_state_set {
+@@ -1748,10 +1748,10 @@ struct hsm_state_set {
__u64 hss_clearmask;
};
@@ -73783,7 +74132,7 @@ index 5aae1d0..75f31ca 100644
/* ost_body.data values for OST_BRW */
-@@ -1753,7 +1753,7 @@ struct obd_ioobj {
+@@ -1798,7 +1798,7 @@ struct obd_ioobj {
#define ioobj_max_brw_set(ioo, num) \
do { (ioo)->ioo_max_brw = ((num) - 1) << IOOBJ_MAX_BRW_BITS; } while (0)
@@ -73792,7 +74141,7 @@ index 5aae1d0..75f31ca 100644
/* multiple of 8 bytes => can array */
struct niobuf_remote {
-@@ -1762,7 +1762,7 @@ struct niobuf_remote {
+@@ -1807,7 +1807,7 @@ struct niobuf_remote {
__u32 flags;
};
@@ -73801,7 +74150,7 @@ index 5aae1d0..75f31ca 100644
/* lock value block communicated between the filter and llite */
-@@ -1827,7 +1827,7 @@ struct obd_quotactl {
+@@ -1872,7 +1872,7 @@ struct obd_quotactl {
struct obd_dqblk qc_dqblk;
};
@@ -73810,7 +74159,7 @@ index 5aae1d0..75f31ca 100644
#define Q_QUOTACHECK 0x800100 /* deprecated as of 2.4 */
#define Q_INITQUOTA 0x800101 /* deprecated as of 2.4 */
-@@ -1939,7 +1939,7 @@ enum mdt_reint_cmd {
+@@ -1984,7 +1984,7 @@ enum mdt_reint_cmd {
REINT_MAX
};
@@ -73819,7 +74168,7 @@ index 5aae1d0..75f31ca 100644
/* the disposition of the intent outlines what was executed */
#define DISP_IT_EXECD 0x00000001
-@@ -2098,7 +2098,7 @@ struct mdt_body {
+@@ -2143,7 +2143,7 @@ struct mdt_body {
__u64 padding_10;
}; /* 216 */
@@ -73828,7 +74177,7 @@ index 5aae1d0..75f31ca 100644
struct mdt_ioepoch {
struct lustre_handle handle;
-@@ -2107,7 +2107,7 @@ struct mdt_ioepoch {
+@@ -2152,7 +2152,7 @@ struct mdt_ioepoch {
__u32 padding;
};
@@ -73837,16 +74186,16 @@ index 5aae1d0..75f31ca 100644
/* permissions for md_perm.mp_perm */
enum {
-@@ -2434,7 +2434,7 @@ struct mdt_rec_reint {
+@@ -2479,7 +2479,7 @@ struct mdt_rec_reint {
__u32 rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */
};
-void lustre_swab_mdt_rec_reint(struct mdt_rec_reint *rr);
+void lustre_swab_mdt_rec_reint(void *rr);
+ /* lmv structures */
struct lmv_desc {
- __u32 ld_tgt_count; /* how many MDS's */
-@@ -2624,13 +2624,13 @@ union ldlm_gl_desc {
+@@ -2678,13 +2678,13 @@ union ldlm_gl_desc {
struct ldlm_gl_lquota_desc lquota_desc;
};
@@ -73862,7 +74211,7 @@ index 5aae1d0..75f31ca 100644
struct ldlm_resource_desc {
enum ldlm_type lr_type;
-@@ -2655,7 +2655,7 @@ struct ldlm_request {
+@@ -2709,7 +2709,7 @@ struct ldlm_request {
struct lustre_handle lock_handle[LDLM_LOCKREQ_HANDLES];
};
@@ -73871,7 +74220,7 @@ index 5aae1d0..75f31ca 100644
/* If LDLM_ENQUEUE, 1 slot is already occupied, 1 is available.
* Otherwise, 2 are available.
-@@ -2678,7 +2678,7 @@ struct ldlm_reply {
+@@ -2732,7 +2732,7 @@ struct ldlm_reply {
__u64 lock_policy_res2;
};
@@ -73880,7 +74229,7 @@ index 5aae1d0..75f31ca 100644
#define ldlm_flags_to_wire(flags) ((__u32)(flags))
#define ldlm_flags_from_wire(flags) ((__u64)(flags))
-@@ -2723,7 +2723,7 @@ struct mgs_target_info {
+@@ -2777,7 +2777,7 @@ struct mgs_target_info {
char mti_params[MTI_PARAM_MAXLEN];
};
@@ -73889,7 +74238,7 @@ index 5aae1d0..75f31ca 100644
struct mgs_nidtbl_entry {
__u64 mne_version; /* table version of this entry */
-@@ -2750,14 +2750,14 @@ struct mgs_config_body {
+@@ -2804,14 +2804,14 @@ struct mgs_config_body {
__u32 mcb_units; /* # of units for bulk transfer */
};
@@ -73906,7 +74255,7 @@ index 5aae1d0..75f31ca 100644
/* Config marker flags (in config log) */
#define CM_START 0x01
-@@ -3184,9 +3184,9 @@ struct ll_fiemap_info_key {
+@@ -3238,9 +3238,9 @@ struct ll_fiemap_info_key {
struct ll_user_fiemap fiemap;
};
@@ -73919,7 +74268,7 @@ index 5aae1d0..75f31ca 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);
-@@ -3195,19 +3195,19 @@ void lustre_swab_lov_user_md_objects(struct lov_user_ost_data *lod,
+@@ -3249,19 +3249,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 */
@@ -73946,7 +74295,7 @@ index 5aae1d0..75f31ca 100644
/* security opcodes */
enum sec_cmd {
-@@ -3240,7 +3240,7 @@ struct lustre_capa {
+@@ -3294,7 +3294,7 @@ struct lustre_capa {
__u8 lc_hmac[CAPA_HMAC_MAX_LEN]; /** HMAC */
} __packed;
@@ -73955,7 +74304,7 @@ index 5aae1d0..75f31ca 100644
/** lustre_capa::lc_opc */
enum {
-@@ -3324,7 +3324,7 @@ struct layout_intent {
+@@ -3378,7 +3378,7 @@ struct layout_intent {
__u64 li_end;
};
@@ -73964,7 +74313,7 @@ index 5aae1d0..75f31ca 100644
/**
* On the wire version of hsm_progress structure.
-@@ -3344,12 +3344,10 @@ struct hsm_progress_kernel {
+@@ -3398,12 +3398,10 @@ struct hsm_progress_kernel {
__u64 hpk_padding2;
} __packed;
@@ -73981,7 +74330,7 @@ index 5aae1d0..75f31ca 100644
/** layout swap request structure
* fid1 and fid2 are in mdt_body
-@@ -3358,7 +3356,7 @@ struct mdc_swap_layouts {
+@@ -3412,7 +3410,7 @@ struct mdc_swap_layouts {
__u64 msl_flags;
} __packed;
@@ -73990,7 +74339,7 @@ index 5aae1d0..75f31ca 100644
struct close_data {
struct lustre_handle cd_handle;
-@@ -3367,7 +3365,7 @@ struct close_data {
+@@ -3421,7 +3419,7 @@ struct close_data {
__u64 cd_reserved[8];
};
@@ -74000,10 +74349,10 @@ index 5aae1d0..75f31ca 100644
#endif
/** @} lustreidl */
diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h
-index 8b0364f..66ddfbf 100644
+index 9cade14..28c1861 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 {
+@@ -968,9 +968,9 @@ struct ldlm_ast_work {
struct ldlm_enqueue_info {
__u32 ei_type; /** Type of the lock being enqueued. */
__u32 ei_mode; /** Mode of the lock being enqueued. */
@@ -74016,7 +74365,7 @@ index 8b0364f..66ddfbf 100644
void *ei_cbdata; /** Data to be passed into callbacks. */
};
-@@ -1060,7 +1060,7 @@ struct ldlm_callback_suite {
+@@ -1064,7 +1064,7 @@ struct ldlm_callback_suite {
ldlm_completion_callback lcs_completion;
ldlm_blocking_callback lcs_blocking;
ldlm_glimpse_callback lcs_glimpse;
@@ -74026,10 +74375,10 @@ index 8b0364f..66ddfbf 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 69586a52..e4a2921 100644
+index a7973d5..b44385e 100644
--- a/drivers/staging/lustre/lustre/include/lustre_net.h
+++ b/drivers/staging/lustre/lustre/include/lustre_net.h
-@@ -2571,7 +2571,7 @@ void *lustre_msg_buf_v2(struct lustre_msg_v2 *m, int n, int min_size);
+@@ -2573,7 +2573,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);
@@ -74039,10 +74388,10 @@ index 69586a52..e4a2921 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 4264d97..038b93f 100644
+index 2d926e0..48c1add 100644
--- a/drivers/staging/lustre/lustre/include/obd.h
+++ b/drivers/staging/lustre/lustre/include/obd.h
-@@ -1195,7 +1195,7 @@ struct md_ops {
+@@ -1134,7 +1134,7 @@ struct md_ops {
* lprocfs_alloc_md_stats() in obdclass/lprocfs_status.c. Also, add a
* wrapper function in include/linux/obd_class.h.
*/
@@ -74052,10 +74401,10 @@ index 4264d97..038b93f 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 b88b786..645197d 100644
+index 349bfcc..fde40a7 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
-@@ -148,7 +148,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
+@@ -147,7 +147,7 @@ static int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
int added = (mode == LCK_NL);
int overlaps = 0;
int splitted = 0;
@@ -74065,10 +74414,10 @@ index b88b786..645197d 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 74e193e..c23cd85 100644
+index 107314e..528c5a6 100644
--- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
+++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
-@@ -1828,8 +1828,9 @@ static int ldlm_chain_lock_for_replay(struct ldlm_lock *lock, void *closure)
+@@ -1857,8 +1857,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,
@@ -74079,7 +74428,7 @@ index 74e193e..c23cd85 100644
struct ldlm_lock *lock;
struct ldlm_reply *reply;
struct obd_export *exp;
-@@ -1956,7 +1957,7 @@ static int replay_one_lock(struct obd_import *imp, struct ldlm_lock *lock)
+@@ -1985,7 +1986,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];
@@ -74089,7 +74438,7 @@ index 74e193e..c23cd85 100644
return 0;
diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c
-index e4c8288..7e9ed16 100644
+index 4b00d1a..dd3cc63 100644
--- a/drivers/staging/lustre/lustre/llite/dir.c
+++ b/drivers/staging/lustre/lustre/llite/dir.c
@@ -140,7 +140,7 @@
@@ -74102,10 +74451,10 @@ index e4c8288..7e9ed16 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 4296aac..c485767 100644
+index 86cb3f8..f224438 100644
--- a/drivers/staging/lustre/lustre/lov/lov_io.c
+++ b/drivers/staging/lustre/lustre/lov/lov_io.c
-@@ -831,12 +831,32 @@ static void lov_empty_io_fini(const struct lu_env *env,
+@@ -814,12 +814,32 @@ static void lov_empty_io_fini(const struct lu_env *env,
}
static void lov_empty_impossible(const struct lu_env *env,
@@ -74132,15 +74481,15 @@ index 4296aac..c485767 100644
+
+static int lov_empty_impossible4(const struct lu_env *env,
+ const struct cl_io_slice *slice,
-+ const struct cl_page_slice *page,
-+ unsigned from, unsigned to)
++ struct cl_page_list *queue, int from, int to,
++ cl_commit_cbt cb)
+{
+ LBUG();
+}
/**
* An io operation vector for files without stripes.
-@@ -846,32 +866,32 @@ static const struct cl_io_operations lov_empty_io_ops = {
+@@ -829,32 +849,32 @@ static const struct cl_io_operations lov_empty_io_ops = {
[CIT_READ] = {
.cio_fini = lov_empty_io_fini,
#if 0
@@ -74189,20 +74538,14 @@ index 4296aac..c485767 100644
},
[CIT_FSYNC] = {
.cio_fini = lov_empty_io_fini
-@@ -882,13 +902,13 @@ static const struct cl_io_operations lov_empty_io_ops = {
+@@ -863,8 +883,8 @@ static const struct cl_io_operations lov_empty_io_ops = {
+ .cio_fini = lov_empty_io_fini
+ }
},
- .req_op = {
- [CRT_READ] = {
-- .cio_submit = LOV_EMPTY_IMPOSSIBLE
-+ .cio_submit = lov_empty_impossible3
- },
- [CRT_WRITE] = {
-- .cio_submit = LOV_EMPTY_IMPOSSIBLE
-+ .cio_submit = lov_empty_impossible3
- }
- },
-- .cio_commit_write = LOV_EMPTY_IMPOSSIBLE
-+ .cio_commit_write = lov_empty_impossible4
+- .cio_submit = LOV_EMPTY_IMPOSSIBLE,
+- .cio_commit_async = LOV_EMPTY_IMPOSSIBLE
++ .cio_submit = lov_empty_impossible3,
++ .cio_commit_async = lov_empty_impossible4
};
int lov_io_init_raid0(const struct lu_env *env, struct cl_object *obj,
@@ -74282,10 +74625,10 @@ index 967ba2e..6f341521 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 30526eb..7cfe274 100644
+index 47417f8..1d0354c 100644
--- a/drivers/staging/lustre/lustre/osc/osc_request.c
+++ b/drivers/staging/lustre/lustre/osc/osc_request.c
-@@ -211,8 +211,9 @@ static inline void osc_pack_req_body(struct ptlrpc_request *req,
+@@ -212,8 +212,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,
@@ -74296,7 +74639,7 @@ index 30526eb..7cfe274 100644
struct ost_body *body;
if (rc != 0)
-@@ -257,7 +258,7 @@ static int osc_getattr_async(struct obd_export *exp, struct obd_info *oinfo,
+@@ -258,7 +259,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);
@@ -74305,7 +74648,7 @@ index 30526eb..7cfe274 100644
CLASSERT(sizeof(*aa) <= sizeof(req->rq_async_args));
aa = ptlrpc_req_async_args(req);
-@@ -353,8 +354,9 @@ out:
+@@ -354,8 +355,9 @@ out:
static int osc_setattr_interpret(const struct lu_env *env,
struct ptlrpc_request *req,
@@ -74316,7 +74659,7 @@ index 30526eb..7cfe274 100644
struct ost_body *body;
if (rc != 0)
-@@ -404,8 +406,7 @@ int osc_setattr_async_base(struct obd_export *exp, struct obd_info *oinfo,
+@@ -405,8 +407,7 @@ int osc_setattr_async_base(struct obd_export *exp, struct obd_info *oinfo,
/* Do not wait for response. */
ptlrpcd_add_req(req);
} else {
@@ -74326,7 +74669,7 @@ index 30526eb..7cfe274 100644
CLASSERT(sizeof(*sa) <= sizeof(req->rq_async_args));
sa = ptlrpc_req_async_args(req);
-@@ -547,7 +548,7 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo,
+@@ -548,7 +549,7 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo,
ptlrpc_request_set_replen(req);
@@ -74335,7 +74678,7 @@ index 30526eb..7cfe274 100644
CLASSERT(sizeof(*sa) <= sizeof(req->rq_async_args));
sa = ptlrpc_req_async_args(req);
sa->sa_oa = oinfo->oi_oa;
-@@ -2139,8 +2140,9 @@ static int osc_enqueue_fini(struct ptlrpc_request *req, struct ost_lvb *lvb,
+@@ -2177,8 +2178,9 @@ static int osc_enqueue_fini(struct ptlrpc_request *req,
static int osc_enqueue_interpret(const struct lu_env *env,
struct ptlrpc_request *req,
@@ -74344,11 +74687,11 @@ index 30526eb..7cfe274 100644
{
+ struct osc_enqueue_args *aa = _aa;
struct ldlm_lock *lock;
- struct lustre_handle handle;
- __u32 mode;
-@@ -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;
+ struct lustre_handle *lockh = &aa->oa_lockh;
+ enum ldlm_mode mode = aa->oa_mode;
+@@ -2365,8 +2367,7 @@ no_match:
+ aa->oa_flags = NULL;
+ }
- req->rq_interpret_reply =
- (ptlrpc_interpterer_t)osc_enqueue_interpret;
@@ -74356,7 +74699,7 @@ index 30526eb..7cfe274 100644
if (rqset == PTLRPCD_SET)
ptlrpcd_add_req(req);
else
-@@ -2423,8 +2424,9 @@ int osc_cancel_base(struct lustre_handle *lockh, __u32 mode)
+@@ -2442,8 +2443,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,
@@ -74367,20 +74710,20 @@ index 30526eb..7cfe274 100644
struct obd_statfs *msfs;
if (rc == -EBADR)
-@@ -2492,7 +2494,7 @@ static int osc_statfs_async(struct obd_export *exp,
+@@ -2511,7 +2513,7 @@ static int osc_statfs_async(struct obd_export *exp,
req->rq_no_delay = 1;
}
- req->rq_interpret_reply = (ptlrpc_interpterer_t)osc_statfs_interpret;
+ req->rq_interpret_reply = osc_statfs_interpret;
- CLASSERT (sizeof(*aa) <= sizeof(req->rq_async_args));
+ CLASSERT(sizeof(*aa) <= sizeof(req->rq_async_args));
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 5b06901..e27766d 100644
+index c0ecd16..27f0540 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/layout.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/layout.c
-@@ -768,8 +768,8 @@ struct req_capsule;
+@@ -785,8 +785,8 @@ struct req_capsule;
.rmf_name = (name), \
.rmf_flags = (flags), \
.rmf_size = (size), \
@@ -74391,7 +74734,7 @@ index 5b06901..e27766d 100644
}
struct req_msg_field RMF_GENERIC_DATA =
-@@ -1872,8 +1872,7 @@ static void *__req_capsule_get(struct req_capsule *pill,
+@@ -1893,8 +1893,7 @@ static void *__req_capsule_get(struct req_capsule *pill,
msg = __req_msg(pill, loc);
LASSERT(msg);
@@ -74402,7 +74745,7 @@ index 5b06901..e27766d 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 492d63f..a8a4f76 100644
+index 811acf6..44a4c33 100644
--- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c
+++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c
@@ -693,7 +693,7 @@ int lustre_msg_bufcount(struct lustre_msg *m)
@@ -74414,7 +74757,7 @@ index 492d63f..a8a4f76 100644
{
/* max_len == 0 means the string should fill the buffer */
char *str;
-@@ -1467,8 +1467,10 @@ EXPORT_SYMBOL(do_set_info_async);
+@@ -1465,8 +1465,10 @@ EXPORT_SYMBOL(do_set_info_async);
/* byte flipping routines for all wire types declared in
* lustre_idl.h implemented here.
*/
@@ -74426,7 +74769,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&b->pb_type);
__swab32s(&b->pb_version);
__swab32s(&b->pb_opc);
-@@ -1499,8 +1501,10 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *b)
+@@ -1497,8 +1499,10 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *b)
}
EXPORT_SYMBOL(lustre_swab_ptlrpc_body);
@@ -74438,8 +74781,8 @@ index 492d63f..a8a4f76 100644
__swab64s(&ocd->ocd_connect_flags);
__swab32s(&ocd->ocd_version);
__swab32s(&ocd->ocd_grant);
-@@ -1575,8 +1579,10 @@ static void lustre_swab_obdo(struct obdo *o)
-
+@@ -1572,8 +1576,10 @@ static void lustre_swab_obdo(struct obdo *o)
+ CLASSERT(offsetof(typeof(*o), o_padding_6) != 0);
}
-void lustre_swab_obd_statfs(struct obd_statfs *os)
@@ -74450,7 +74793,7 @@ index 492d63f..a8a4f76 100644
__swab64s(&os->os_type);
__swab64s(&os->os_blocks);
__swab64s(&os->os_bfree);
-@@ -1600,42 +1606,54 @@ void lustre_swab_obd_statfs(struct obd_statfs *os)
+@@ -1597,42 +1603,54 @@ void lustre_swab_obd_statfs(struct obd_statfs *os)
}
EXPORT_SYMBOL(lustre_swab_obd_statfs);
@@ -74511,7 +74854,7 @@ index 492d63f..a8a4f76 100644
lustre_swab_lu_fid(&desc->lquota_desc.gl_id.qid_fid);
__swab64s(&desc->lquota_desc.gl_flags);
__swab64s(&desc->lquota_desc.gl_ver);
-@@ -1679,8 +1697,10 @@ void lustre_swab_lquota_lvb(struct lquota_lvb *lvb)
+@@ -1676,8 +1694,10 @@ void lustre_swab_lquota_lvb(struct lquota_lvb *lvb)
}
EXPORT_SYMBOL(lustre_swab_lquota_lvb);
@@ -74523,7 +74866,7 @@ index 492d63f..a8a4f76 100644
lustre_swab_lu_fid(&b->fid1);
lustre_swab_lu_fid(&b->fid2);
/* handle is opaque */
-@@ -1713,8 +1733,10 @@ void lustre_swab_mdt_body(struct mdt_body *b)
+@@ -1710,8 +1730,10 @@ void lustre_swab_mdt_body(struct mdt_body *b)
}
EXPORT_SYMBOL(lustre_swab_mdt_body);
@@ -74535,7 +74878,7 @@ index 492d63f..a8a4f76 100644
/* handle is opaque */
__swab64s(&b->ioepoch);
__swab32s(&b->flags);
-@@ -1722,8 +1744,9 @@ void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b)
+@@ -1719,8 +1741,9 @@ void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b)
}
EXPORT_SYMBOL(lustre_swab_mdt_ioepoch);
@@ -74546,7 +74889,7 @@ index 492d63f..a8a4f76 100644
int i;
__swab32s(&mti->mti_lustre_ver);
-@@ -1761,16 +1784,20 @@ void lustre_swab_mgs_nidtbl_entry(struct mgs_nidtbl_entry *entry)
+@@ -1758,16 +1781,20 @@ void lustre_swab_mgs_nidtbl_entry(struct mgs_nidtbl_entry *entry)
}
EXPORT_SYMBOL(lustre_swab_mgs_nidtbl_entry);
@@ -74569,7 +74912,7 @@ index 492d63f..a8a4f76 100644
__swab64s(&body->mcr_offset);
__swab64s(&body->mcr_size);
}
-@@ -1798,8 +1825,10 @@ static void lustre_swab_obd_dqblk(struct obd_dqblk *b)
+@@ -1795,8 +1822,10 @@ static void lustre_swab_obd_dqblk(struct obd_dqblk *b)
CLASSERT(offsetof(typeof(*b), dqb_padding) != 0);
}
@@ -74581,7 +74924,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&q->qc_cmd);
__swab32s(&q->qc_type);
__swab32s(&q->qc_id);
-@@ -1840,8 +1869,9 @@ static void lustre_swab_fiemap_extent(struct ll_fiemap_extent *fm_extent)
+@@ -1837,8 +1866,9 @@ static void lustre_swab_fiemap_extent(struct ll_fiemap_extent *fm_extent)
__swab32s(&fm_extent->fe_device);
}
@@ -74592,7 +74935,7 @@ index 492d63f..a8a4f76 100644
int i;
__swab64s(&fiemap->fm_start);
-@@ -1856,8 +1886,10 @@ void lustre_swab_fiemap(struct ll_user_fiemap *fiemap)
+@@ -1853,8 +1883,10 @@ void lustre_swab_fiemap(struct ll_user_fiemap *fiemap)
}
EXPORT_SYMBOL(lustre_swab_fiemap);
@@ -74604,7 +74947,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&rr->rr_opcode);
__swab32s(&rr->rr_cap);
__swab32s(&rr->rr_fsuid);
-@@ -1989,8 +2021,10 @@ static void lustre_swab_ldlm_policy_data(ldlm_wire_policy_data_t *d)
+@@ -1986,8 +2018,10 @@ static void lustre_swab_ldlm_policy_data(ldlm_wire_policy_data_t *d)
__swab32s(&d->l_flock.lfw_pid);
}
@@ -74616,7 +74959,7 @@ index 492d63f..a8a4f76 100644
__swab64s(&i->opc);
}
EXPORT_SYMBOL(lustre_swab_ldlm_intent);
-@@ -2010,8 +2044,10 @@ static void lustre_swab_ldlm_lock_desc(struct ldlm_lock_desc *l)
+@@ -2007,8 +2041,10 @@ static void lustre_swab_ldlm_lock_desc(struct ldlm_lock_desc *l)
lustre_swab_ldlm_policy_data(&l->l_policy_data);
}
@@ -74628,7 +74971,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&rq->lock_flags);
lustre_swab_ldlm_lock_desc(&rq->lock_desc);
__swab32s(&rq->lock_count);
-@@ -2019,8 +2055,10 @@ void lustre_swab_ldlm_request(struct ldlm_request *rq)
+@@ -2016,8 +2052,10 @@ void lustre_swab_ldlm_request(struct ldlm_request *rq)
}
EXPORT_SYMBOL(lustre_swab_ldlm_request);
@@ -74640,7 +74983,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&r->lock_flags);
CLASSERT(offsetof(typeof(*r), lock_padding) != 0);
lustre_swab_ldlm_lock_desc(&r->lock_desc);
-@@ -2031,8 +2069,10 @@ void lustre_swab_ldlm_reply(struct ldlm_reply *r)
+@@ -2028,8 +2066,10 @@ void lustre_swab_ldlm_reply(struct ldlm_reply *r)
EXPORT_SYMBOL(lustre_swab_ldlm_reply);
/* Dump functions */
@@ -74652,7 +74995,7 @@ index 492d63f..a8a4f76 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,
-@@ -2040,8 +2080,10 @@ void dump_ioo(struct obd_ioobj *ioo)
+@@ -2037,8 +2077,10 @@ void dump_ioo(struct obd_ioobj *ioo)
}
EXPORT_SYMBOL(dump_ioo);
@@ -74664,7 +75007,7 @@ index 492d63f..a8a4f76 100644
CDEBUG(D_RPCTRACE, "niobuf_remote: offset=%llu, len=%d, flags=%x\n",
nb->offset, nb->len, nb->flags);
}
-@@ -2109,14 +2151,18 @@ static void dump_obdo(struct obdo *oa)
+@@ -2106,14 +2148,18 @@ static void dump_obdo(struct obdo *oa)
CDEBUG(D_RPCTRACE, "obdo: o_lcookie = (llog_cookie dumping not yet implemented)\n");
}
@@ -74685,7 +75028,7 @@ index 492d63f..a8a4f76 100644
CDEBUG(D_RPCTRACE, "rmf_rcs: %d\n", *rc);
}
EXPORT_SYMBOL(dump_rcs);
-@@ -2193,8 +2239,10 @@ void _debug_req(struct ptlrpc_request *req,
+@@ -2190,8 +2236,10 @@ void _debug_req(struct ptlrpc_request *req,
}
EXPORT_SYMBOL(_debug_req);
@@ -74697,7 +75040,7 @@ index 492d63f..a8a4f76 100644
lustre_swab_lu_fid(&c->lc_fid);
__swab64s(&c->lc_opc);
__swab64s(&c->lc_uid);
-@@ -2206,15 +2254,19 @@ void lustre_swab_lustre_capa(struct lustre_capa *c)
+@@ -2203,15 +2251,19 @@ void lustre_swab_lustre_capa(struct lustre_capa *c)
}
EXPORT_SYMBOL(lustre_swab_lustre_capa);
@@ -74719,7 +75062,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&hss->hss_valid);
__swab64s(&hss->hss_setmask);
__swab64s(&hss->hss_clearmask);
-@@ -2228,23 +2280,29 @@ static void lustre_swab_hsm_extent(struct hsm_extent *extent)
+@@ -2225,23 +2277,29 @@ static void lustre_swab_hsm_extent(struct hsm_extent *extent)
__swab64s(&extent->length);
}
@@ -74752,7 +75095,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&li->li_opc);
__swab32s(&li->li_flags);
__swab64s(&li->li_start);
-@@ -2252,8 +2310,10 @@ void lustre_swab_layout_intent(struct layout_intent *li)
+@@ -2249,8 +2307,10 @@ void lustre_swab_layout_intent(struct layout_intent *li)
}
EXPORT_SYMBOL(lustre_swab_layout_intent);
@@ -74764,7 +75107,7 @@ index 492d63f..a8a4f76 100644
lustre_swab_lu_fid(&hpk->hpk_fid);
__swab64s(&hpk->hpk_cookie);
__swab64s(&hpk->hpk_extent.offset);
-@@ -2263,8 +2323,10 @@ void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk)
+@@ -2260,8 +2320,10 @@ void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk)
}
EXPORT_SYMBOL(lustre_swab_hsm_progress_kernel);
@@ -74776,7 +75119,7 @@ index 492d63f..a8a4f76 100644
__swab32s(&hr->hr_action);
__swab32s(&hr->hr_archive_id);
__swab64s(&hr->hr_flags);
-@@ -2273,14 +2335,18 @@ void lustre_swab_hsm_request(struct hsm_request *hr)
+@@ -2270,14 +2332,18 @@ void lustre_swab_hsm_request(struct hsm_request *hr)
}
EXPORT_SYMBOL(lustre_swab_hsm_request);
@@ -74797,24 +75140,11 @@ index 492d63f..a8a4f76 100644
lustre_swab_lu_fid(&cd->cd_fid);
__swab64s(&cd->cd_data_version);
}
-diff --git a/drivers/staging/rdma/hfi1/pcie.c b/drivers/staging/rdma/hfi1/pcie.c
-index 0bac21e..2b9ef9c 100644
---- a/drivers/staging/rdma/hfi1/pcie.c
-+++ b/drivers/staging/rdma/hfi1/pcie.c
-@@ -537,7 +537,7 @@ static void tune_pcie_caps(struct hfi1_devdata *dd)
- * PCI error infrastructure, registered via pci
- */
- static pci_ers_result_t
--pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
-+pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
- {
- 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 591a912..484a285 100644
+index 7f32b39..e24cff3 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
-@@ -3990,7 +3990,7 @@ static void init_mlme_ext_priv_value(struct adapter *padapter)
+@@ -3978,7 +3978,7 @@ static void init_mlme_ext_priv_value(struct adapter *padapter)
_12M_RATE_, _24M_RATE_, 0xff,
};
@@ -74823,7 +75153,7 @@ index 591a912..484a285 100644
pmlmeext->mgnt_seq = 0;/* reset to zero when disconnect at client mode */
pmlmeext->cur_channel = padapter->registrypriv.channel;
-@@ -4183,7 +4183,7 @@ void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext)
+@@ -4171,7 +4171,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)
{
@@ -74832,7 +75162,7 @@ index 591a912..484a285 100644
u8 *pframe = precv_frame->rx_data;
if (ptable->func) {
-@@ -4202,7 +4202,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
+@@ -4190,7 +4190,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 */
@@ -74841,7 +75171,7 @@ index 591a912..484a285 100644
u8 *pframe = precv_frame->rx_data;
struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe));
-@@ -4227,7 +4227,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
+@@ -4215,7 +4215,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
index = GetFrameSubType(pframe) >> 4;
@@ -74850,7 +75180,7 @@ index 591a912..484a285 100644
RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("Currently we do not support reserved sub-fr-type=%d\n", index));
return;
}
-@@ -4317,7 +4317,7 @@ void report_survey_event(struct adapter *padapter,
+@@ -4305,7 +4305,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);
@@ -74859,7 +75189,7 @@ index 591a912..484a285 100644
psurvey_evt = (struct survey_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
-@@ -4369,7 +4369,7 @@ void report_surveydone_event(struct adapter *padapter)
+@@ -4355,7 +4355,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);
@@ -74868,7 +75198,7 @@ index 591a912..484a285 100644
psurveydone_evt = (struct surveydone_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt;
-@@ -4415,7 +4415,7 @@ void report_join_res(struct adapter *padapter, int res)
+@@ -4399,7 +4399,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);
@@ -74877,7 +75207,7 @@ index 591a912..484a285 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));
-@@ -4468,7 +4468,7 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi
+@@ -4450,7 +4450,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);
@@ -74886,7 +75216,7 @@ index 591a912..484a285 100644
pdel_sta_evt = (struct stadel_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
memcpy((unsigned char *)(&(pdel_sta_evt->macaddr)), MacAddr, ETH_ALEN);
-@@ -4523,7 +4523,7 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int
+@@ -4503,7 +4503,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);
@@ -74896,10 +75226,10 @@ index 591a912..484a285 100644
padd_sta_evt = (struct stassoc_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
memcpy((unsigned char *)(&(padd_sta_evt->macaddr)), MacAddr, ETH_ALEN);
diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c
-index d6d009a..c21609e 100644
+index 255d6f2..52553d3 100644
--- a/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c
+++ b/drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c
-@@ -35,7 +35,7 @@ int rtl8188eu_init_recv_priv(struct adapter *padapter)
+@@ -30,7 +30,7 @@ int rtl8188eu_init_recv_priv(struct adapter *padapter)
struct recv_buf *precvbuf;
tasklet_init(&precvpriv->recv_tasklet,
@@ -74909,10 +75239,10 @@ 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 c96d804..76d5771 100644
+index ec21d8c..1c2e09c 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)
+@@ -26,7 +26,7 @@ s32 rtl8188eu_init_xmit_priv(struct adapter *adapt)
struct xmit_priv *pxmitpriv = &adapt->xmitpriv;
tasklet_init(&pxmitpriv->xmit_tasklet,
@@ -74922,10 +75252,10 @@ index c96d804..76d5771 100644
return _SUCCESS;
}
diff --git a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h
-index 2670d6b..b9a6852 100644
+index 8990748..7727f80 100644
--- a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h
+++ b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h
-@@ -205,17 +205,9 @@ void PHY_GetTxPowerLevel8188E(struct adapter *adapter, u32 *powerlevel);
+@@ -200,17 +200,9 @@ void PHY_GetTxPowerLevel8188E(struct adapter *adapter, u32 *powerlevel);
void PHY_ScanOperationBackup8188E(struct adapter *Adapter, u8 Operation);
@@ -74944,10 +75274,10 @@ index 2670d6b..b9a6852 100644
/*--------------------------Exported Function prototype---------------------*/
diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h
-index 1b1c102..4f76875 100644
+index eaf939b..356437b 100644
--- a/drivers/staging/rtl8188eu/include/hal_intf.h
+++ b/drivers/staging/rtl8188eu/include/hal_intf.h
-@@ -217,7 +217,7 @@ struct hal_ops {
+@@ -212,7 +212,7 @@ struct hal_ops {
void (*hal_notch_filter)(struct adapter *adapter, bool enable);
void (*hal_reset_security_engine)(struct adapter *adapter);
@@ -74956,7 +75286,7 @@ index 1b1c102..4f76875 100644
enum rt_eeprom_type {
EEPROM_93C46,
-@@ -251,7 +251,6 @@ void rtw_hal_sw_led_deinit(struct adapter *padapter);
+@@ -246,7 +246,6 @@ void rtw_hal_sw_led_deinit(struct adapter *padapter);
u32 rtw_hal_power_on(struct adapter *padapter);
uint rtw_hal_init(struct adapter *padapter);
uint rtw_hal_deinit(struct adapter *padapter);
@@ -74964,7 +75294,7 @@ index 1b1c102..4f76875 100644
void rtw_hal_set_hwreg(struct adapter *padapter, u8 variable, u8 *val);
void rtw_hal_get_hwreg(struct adapter *padapter, u8 variable, u8 *val);
-@@ -280,8 +279,6 @@ void rtw_hal_free_recv_priv(struct adapter *padapter);
+@@ -275,8 +274,6 @@ void rtw_hal_free_recv_priv(struct adapter *padapter);
void rtw_hal_update_ra_mask(struct adapter *padapter, u32 mac_id, u8 level);
void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg, u8 level);
@@ -74974,10 +75304,10 @@ index 1b1c102..4f76875 100644
void rtw_hal_bcn_related_reg_setting(struct adapter *padapter);
diff --git a/drivers/staging/rtl8188eu/include/odm_precomp.h b/drivers/staging/rtl8188eu/include/odm_precomp.h
-index 0f236da..d2507aa 100644
+index 9e5fe17..bdb77bb 100644
--- a/drivers/staging/rtl8188eu/include/odm_precomp.h
+++ b/drivers/staging/rtl8188eu/include/odm_precomp.h
-@@ -75,7 +75,7 @@ void odm_RSSIMonitorCheckCE(struct odm_dm_struct *pDM_Odm);
+@@ -70,7 +70,7 @@ void odm_RSSIMonitorCheckCE(struct odm_dm_struct *pDM_Odm);
void odm_TXPowerTrackingThermalMeterInit(struct odm_dm_struct *pDM_Odm);
void odm_EdcaTurboCheckCE(struct odm_dm_struct *pDM_Odm);
void odm_TXPowerTrackingCheckCE(struct odm_dm_struct *pDM_Odm);
@@ -74987,10 +75317,10 @@ index 0f236da..d2507aa 100644
void odm_HwAntDiv(struct odm_dm_struct *pDM_Odm);
diff --git a/drivers/staging/rtl8188eu/include/recv_osdep.h b/drivers/staging/rtl8188eu/include/recv_osdep.h
-index fdeb603..3db91e6 100644
+index cad3158..a1ca486 100644
--- a/drivers/staging/rtl8188eu/include/recv_osdep.h
+++ b/drivers/staging/rtl8188eu/include/recv_osdep.h
-@@ -35,7 +35,6 @@ void rtw_recv_returnpacket(struct net_device *cnxt, struct sk_buff *retpkt);
+@@ -30,7 +30,6 @@ void rtw_recv_returnpacket(struct net_device *cnxt, struct sk_buff *retpkt);
void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup);
@@ -74999,10 +75329,10 @@ index fdeb603..3db91e6 100644
void rtw_os_recv_resource_alloc(struct recv_frame *recvfr);
diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_recv.h b/drivers/staging/rtl8188eu/include/rtl8188e_recv.h
-index 5fed30d..efd81d5 100644
+index 54048bc..e86fdf4 100644
--- a/drivers/staging/rtl8188eu/include/rtl8188e_recv.h
+++ b/drivers/staging/rtl8188eu/include/rtl8188e_recv.h
-@@ -59,7 +59,7 @@ enum rx_packet_type {
+@@ -54,7 +54,7 @@ enum rx_packet_type {
s32 rtl8188eu_init_recv_priv(struct adapter *padapter);
void rtl8188eu_free_recv_priv(struct adapter *padapter);
void rtl8188eu_recv_hdl(struct adapter *padapter, struct recv_buf *precvbuf);
@@ -75012,10 +75342,10 @@ index 5fed30d..efd81d5 100644
void rtl8188e_process_phy_info(struct adapter *padapter, void *prframe);
void update_recvframe_phyinfo_88e(struct recv_frame *fra, struct phy_stat *phy);
diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h b/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h
-index 0b96d42..117d0b5 100644
+index 65a63df..171cfed 100644
--- a/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h
+++ b/drivers/staging/rtl8188eu/include/rtl8188e_xmit.h
-@@ -163,7 +163,7 @@ s32 rtl8188eu_hal_xmit(struct adapter *padapter, struct xmit_frame *frame);
+@@ -158,7 +158,7 @@ s32 rtl8188eu_hal_xmit(struct adapter *padapter, struct xmit_frame *frame);
s32 rtl8188eu_mgnt_xmit(struct adapter *padapter, struct xmit_frame *frame);
s32 rtl8188eu_xmit_buf_handler(struct adapter *padapter);
#define hal_xmit_handler rtl8188eu_xmit_buf_handler
@@ -75025,10 +75355,10 @@ index 0b96d42..117d0b5 100644
struct xmit_priv *pxmitpriv,
struct xmit_buf *pxmitbuf);
diff --git a/drivers/staging/rtl8188eu/include/rtw_cmd.h b/drivers/staging/rtl8188eu/include/rtw_cmd.h
-index 9e9f5f4..eff152f 100644
+index 08ca592..0eeed5d 100644
--- a/drivers/staging/rtl8188eu/include/rtw_cmd.h
+++ b/drivers/staging/rtl8188eu/include/rtw_cmd.h
-@@ -373,7 +373,6 @@ void rtw_readtssi_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
+@@ -368,7 +368,6 @@ void rtw_readtssi_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
void rtw_setstaKey_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
void rtw_setassocsta_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cm);
@@ -75037,10 +75367,10 @@ index 9e9f5f4..eff152f 100644
struct _cmd_callback {
u32 cmd_code;
diff --git a/drivers/staging/rtl8188eu/include/rtw_eeprom.h b/drivers/staging/rtl8188eu/include/rtw_eeprom.h
-index 904fea1..008aa74 100644
+index 5dd7384..337cc49 100644
--- a/drivers/staging/rtl8188eu/include/rtw_eeprom.h
+++ b/drivers/staging/rtl8188eu/include/rtw_eeprom.h
-@@ -121,10 +121,4 @@ struct eeprom_priv {
+@@ -116,10 +116,4 @@ struct eeprom_priv {
u8 efuse_eeprom_data[HWSET_MAX_SIZE_512];
};
@@ -75052,10 +75382,10 @@ index 904fea1..008aa74 100644
-
#endif /* __RTL871X_EEPROM_H__ */
diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl.h b/drivers/staging/rtl8188eu/include/rtw_ioctl.h
-index ee2cb54..03dc80b 100644
+index 3a652df..4b3ac6b 100644
--- a/drivers/staging/rtl8188eu/include/rtw_ioctl.h
+++ b/drivers/staging/rtl8188eu/include/rtw_ioctl.h
-@@ -108,13 +108,4 @@ static int oid_null_function(struct oid_par_priv *poid_par_priv) {
+@@ -103,13 +103,4 @@ static int oid_null_function(struct oid_par_priv *poid_par_priv) {
extern struct iw_handler_def rtw_handlers_def;
@@ -75070,10 +75400,10 @@ 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 4471133..a1522eb 100644
+index 27382ff..851aeb0 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 {
+@@ -404,7 +404,7 @@ struct p2p_oper_class_map {
struct mlme_ext_priv {
struct adapter *padapter;
u8 mlmeext_init;
@@ -75082,7 +75412,7 @@ index 4471133..a1522eb 100644
u16 mgnt_seq;
unsigned char cur_channel;
-@@ -555,8 +555,6 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *addr,
+@@ -550,8 +550,6 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *addr,
void beacon_timing_control(struct adapter *padapter);
u8 set_tx_beacon_cmd(struct adapter *padapter);
@@ -75091,7 +75421,7 @@ index 4471133..a1522eb 100644
void update_mgnt_tx_rate(struct adapter *padapter, u8 rate);
void update_mgntframe_attrib(struct adapter *padapter,
struct pkt_attrib *pattrib);
-@@ -604,12 +602,6 @@ struct cmd_hdl {
+@@ -599,12 +597,6 @@ struct cmd_hdl {
u8 (*h2cfuns)(struct adapter *padapter, u8 *pbuf);
};
@@ -75104,7 +75434,7 @@ index 4471133..a1522eb 100644
u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf);
u8 disconnect_hdl(struct adapter *padapter, u8 *pbuf);
u8 createbss_hdl(struct adapter *padapter, u8 *pbuf);
-@@ -618,8 +610,6 @@ u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf);
+@@ -613,8 +605,6 @@ u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf);
u8 setauth_hdl(struct adapter *padapter, u8 *pbuf);
u8 setkey_hdl(struct adapter *padapter, u8 *pbuf);
u8 set_stakey_hdl(struct adapter *padapter, u8 *pbuf);
@@ -75114,10 +75444,10 @@ index 4471133..a1522eb 100644
u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf);
diff --git a/drivers/staging/rtl8188eu/include/xmit_osdep.h b/drivers/staging/rtl8188eu/include/xmit_osdep.h
-index 13965f2..0ea64d0 100644
+index f96ca6a..104d496 100644
--- a/drivers/staging/rtl8188eu/include/xmit_osdep.h
+++ b/drivers/staging/rtl8188eu/include/xmit_osdep.h
-@@ -40,7 +40,7 @@ struct sta_xmit_priv;
+@@ -35,7 +35,7 @@ struct sta_xmit_priv;
struct xmit_frame;
struct xmit_buf;
@@ -75127,10 +75457,10 @@ index 13965f2..0ea64d0 100644
void rtw_os_xmit_schedule(struct adapter *padapter);
diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
-index 0fea338..acc951f 100644
+index ce1e1a1..315c3e1 100644
--- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
-@@ -814,10 +814,10 @@ void usb_write_port_cancel(struct adapter *padapter)
+@@ -810,10 +810,10 @@ void usb_write_port_cancel(struct adapter *padapter)
}
}
@@ -75143,7 +75473,7 @@ index 0fea338..acc951f 100644
struct recv_priv *precvpriv = &adapt->recvpriv;
while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) {
-@@ -833,10 +833,10 @@ void rtl8188eu_recv_tasklet(void *priv)
+@@ -829,10 +829,10 @@ void rtl8188eu_recv_tasklet(void *priv)
}
}
@@ -75157,10 +75487,10 @@ index 0fea338..acc951f 100644
if (check_fwstate(&adapt->mlmepriv, _FW_UNDER_SURVEY))
diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
-index 1593e28..a4345f9 100644
+index 221e275..bc552c9 100644
--- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
-@@ -213,7 +213,7 @@ static int rtw_mlcst2unicst(struct adapter *padapter, struct sk_buff *skb)
+@@ -208,7 +208,7 @@ static int rtw_mlcst2unicst(struct adapter *padapter, struct sk_buff *skb)
}
@@ -75170,7 +75500,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 9b7cc7d..527055c 100644
+index 13a5ddc..8a876d9 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 = {
@@ -75529,7 +75859,7 @@ index 776e179..5a021e6 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 cfab715..07c64b3 100644
+index 62154e3..bf1e431 100644
--- a/drivers/staging/rtl8192e/rtllib_softmac.c
+++ b/drivers/staging/rtl8192e/rtllib_softmac.c
@@ -574,7 +574,7 @@ out:
@@ -75673,7 +76003,7 @@ index 68931e5..2d98eb2 100644
diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
-index ae1274c..febf7fa 100644
+index d705595..5472509 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
@@ -1765,9 +1765,9 @@ static short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h,
@@ -75711,10 +76041,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 849a95e..debfb75 100644
+index 8c1d737..0d3f6d2e 100644
--- a/drivers/staging/rtl8192u/r8192U_core.c
+++ b/drivers/staging/rtl8192u/r8192U_core.c
-@@ -2380,7 +2380,7 @@ static void rtl8192_init_priv_lock(struct r8192_priv *priv)
+@@ -2368,7 +2368,7 @@ static void rtl8192_init_priv_lock(struct r8192_priv *priv)
static void rtl819x_watchdog_wqcallback(struct work_struct *work);
@@ -75723,7 +76053,7 @@ index 849a95e..debfb75 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)
-@@ -2403,7 +2403,7 @@ static void rtl8192_init_priv_task(struct net_device *dev)
+@@ -2391,7 +2391,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,
@@ -75732,7 +76062,7 @@ index 849a95e..debfb75 100644
(unsigned long)priv);
}
-@@ -4910,8 +4910,9 @@ static void rtl8192_rx_cmd(struct sk_buff *skb)
+@@ -4878,8 +4878,9 @@ static void rtl8192_rx_cmd(struct sk_buff *skb)
}
}
@@ -75744,7 +76074,7 @@ index 849a95e..debfb75 100644
struct rtl8192_rx_info *info;
diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c
-index d187508..a2e3800 100644
+index f25b34c..487a963 100644
--- a/drivers/staging/rtl8712/rtl8712_recv.c
+++ b/drivers/staging/rtl8712/rtl8712_recv.c
@@ -45,7 +45,7 @@ static u8 bridge_tunnel_header[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8};
@@ -75811,7 +76141,7 @@ index c9218be..ecda3f6 100644
-
#endif
diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c
-index c6d952f..69cfa68 100644
+index 99256ba..1b789b8 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,
@@ -75837,7 +76167,7 @@ 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 454cdf6..e0a1337 100644
+index 6f1234570..3c8fb5a 100644
--- a/drivers/staging/rtl8712/usb_ops_linux.c
+++ b/drivers/staging/rtl8712/usb_ops_linux.c
@@ -331,10 +331,10 @@ void r8712_usb_read_port_cancel(struct _adapter *padapter)
@@ -75880,7 +76210,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 f4fff38..c8c4865 100644
+index 7dd1540..52d1392 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)
@@ -76093,7 +76423,7 @@ index a86f36e..8addfe7 100644
-
#endif /* __RTL871X_EEPROM_H__ */
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
-index ea2a6c9..7348e18 100644
+index 0e7d3da..4a54c4fa3 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
@@ -406,7 +406,7 @@ struct p2p_oper_class_map {
@@ -76105,7 +76435,7 @@ index ea2a6c9..7348e18 100644
u16 mgnt_seq;
/* struct fw_priv fwpriv; */
-@@ -543,8 +543,6 @@ void report_add_sta_event23a(struct rtw_adapter *padapter,
+@@ -541,8 +541,6 @@ void report_add_sta_event23a(struct rtw_adapter *padapter,
unsigned char *MacAddr, int cam_idx);
int set_tx_beacon_cmd23a(struct rtw_adapter*padapter);
@@ -76114,7 +76444,7 @@ index ea2a6c9..7348e18 100644
void update_mgnt_tx_rate23a(struct rtw_adapter *padapter, u8 rate);
void update_mgntframe_attrib23a(struct rtw_adapter *padapter,
struct pkt_attrib *pattrib);
-@@ -597,14 +595,6 @@ struct cmd_hdl {
+@@ -595,14 +593,6 @@ struct cmd_hdl {
};
@@ -76129,7 +76459,7 @@ index ea2a6c9..7348e18 100644
int NULL_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-@@ -614,8 +604,6 @@ int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
+@@ -612,8 +602,6 @@ int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
int setauth_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
int setkey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
int set_stakey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
@@ -76186,7 +76516,7 @@ 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 12d1844..46d0889 100644
+index 0da559d..f8aee41 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2430,7 +2430,7 @@ static int rtw_cfg80211_monitor_if_close(struct net_device *ndev)
@@ -76279,10 +76609,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 be0d057..9f34086 100644
+index fd7c9a6..5c373da 100644
--- a/drivers/staging/unisys/visornic/visornic_main.c
+++ b/drivers/staging/unisys/visornic/visornic_main.c
-@@ -807,7 +807,7 @@ static inline bool vnic_hit_low_watermark(struct visornic_devdata *devdata,
+@@ -797,7 +797,7 @@ static inline bool vnic_hit_low_watermark(struct visornic_devdata *devdata,
* can be called again.
* Returns NETDEV_TX_OK.
*/
@@ -76292,7 +76622,7 @@ index be0d057..9f34086 100644
{
struct visornic_devdata *devdata;
diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c
-index 1a2dda0..f1cb7d1 100644
+index e4c3165..d0c9eeb 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,
@@ -76305,7 +76635,7 @@ index 1a2dda0..f1cb7d1 100644
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
+index aa59e7f..094dd59 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,
@@ -76318,7 +76648,7 @@ index b74e320..bd00d63 100644
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 01f3222..81ea93a 100644
+index 8d2dd0d..ba0194a 100644
--- a/drivers/staging/wilc1000/host_interface.h
+++ b/drivers/staging/wilc1000/host_interface.h
@@ -1,6 +1,7 @@
@@ -76330,10 +76660,10 @@ index 01f3222..81ea93a 100644
#define IP_ALEN 4
diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
-index bfa754b..4c98e72 100644
+index 4f93c11..6305d2c 100644
--- a/drivers/staging/wilc1000/linux_wlan.c
+++ b/drivers/staging/wilc1000/linux_wlan.c
-@@ -1037,7 +1037,7 @@ static void linux_wlan_tx_complete(void *priv, int status)
+@@ -985,7 +985,7 @@ static void linux_wlan_tx_complete(void *priv, int status)
kfree(pv_data);
}
@@ -76343,7 +76673,7 @@ index bfa754b..4c98e72 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 d41b8b6..2099b97 100644
+index 4268e2f..4311354 100644
--- a/drivers/staging/wilc1000/wilc_spi.c
+++ b/drivers/staging/wilc1000/wilc_spi.c
@@ -19,6 +19,7 @@
@@ -76355,7 +76685,7 @@ index d41b8b6..2099b97 100644
#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 bcd4bfa..41bfba0 100644
+index 30e5312..1493a73 100644
--- a/drivers/staging/wilc1000/wilc_wlan.h
+++ b/drivers/staging/wilc1000/wilc_wlan.h
@@ -295,7 +295,7 @@ void wilc_chip_sleep_manually(struct wilc *wilc);
@@ -76368,7 +76698,7 @@ index bcd4bfa..41bfba0 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 88255ce..aab2121 100644
+index 90cc8cd..b98abd7 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)
@@ -76381,7 +76711,7 @@ index 88255ce..aab2121 100644
{
int result = 0;
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
-index c57e788..24d15dd 100644
+index 58bb6ed..d77a7e3 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[] = {
@@ -76486,7 +76816,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 d8ec44b..08609d8 100644
+index b8e509c..f12be01 100644
--- a/drivers/thermal/of-thermal.c
+++ b/drivers/thermal/of-thermal.c
@@ -31,6 +31,7 @@
@@ -76497,7 +76827,7 @@ index d8ec44b..08609d8 100644
#include "thermal_core.h"
-@@ -417,9 +418,11 @@ thermal_zone_of_add_sensor(struct device_node *zone,
+@@ -425,9 +426,11 @@ thermal_zone_of_add_sensor(struct device_node *zone,
tz->ops = ops;
tz->sensor_data = data;
@@ -76512,7 +76842,7 @@ index d8ec44b..08609d8 100644
mutex_unlock(&tzd->lock);
return tzd;
-@@ -545,9 +548,11 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
+@@ -553,9 +556,11 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
return;
mutex_lock(&tzd->lock);
@@ -76528,7 +76858,7 @@ index d8ec44b..08609d8 100644
tz->ops = NULL;
tz->sensor_data = NULL;
diff --git a/drivers/thermal/x86_pkg_temp_thermal.c b/drivers/thermal/x86_pkg_temp_thermal.c
-index 7fc919f..5521ec1 100644
+index 97f0a2b..5fa3381 100644
--- a/drivers/thermal/x86_pkg_temp_thermal.c
+++ b/drivers/thermal/x86_pkg_temp_thermal.c
@@ -567,7 +567,7 @@ static int pkg_temp_thermal_cpu_callback(struct notifier_block *nfb,
@@ -76541,7 +76871,7 @@ index 7fc919f..5521ec1 100644
};
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
-index d67e542..dc84c3d 100644
+index 3840d6b..5292ea3 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)
@@ -76557,7 +76887,7 @@ index d67e542..dc84c3d 100644
#endif
/*
-@@ -3959,7 +3959,7 @@ static int cyclades_proc_show(struct seq_file *m, void *v)
+@@ -3951,7 +3951,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];
@@ -76567,7 +76897,7 @@ index d67e542..dc84c3d 100644
struct tty_struct *tty;
struct tty_ldisc *ld;
diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
-index e46d628..d826fa1 100644
+index ce86487..8ff3311 100644
--- a/drivers/tty/hvc/hvc_console.c
+++ b/drivers/tty/hvc/hvc_console.c
@@ -343,7 +343,7 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
@@ -76625,7 +76955,7 @@ index e46d628..d826fa1 100644
spin_lock_irqsave(&hp->lock, flags);
diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
-index 5997b17..6851dbc 100644
+index 3c4d7c2..3410b86 100644
--- a/drivers/tty/hvc/hvcs.c
+++ b/drivers/tty/hvc/hvcs.c
@@ -83,6 +83,7 @@
@@ -76722,7 +77052,7 @@ index 5997b17..6851dbc 100644
return HVCS_BUFF_LEN - hvcsd->chars_in_buffer;
diff --git a/drivers/tty/hvc/hvsi.c b/drivers/tty/hvc/hvsi.c
-index a75146f..a52c717 100644
+index 96ce6bd..208f20a 100644
--- a/drivers/tty/hvc/hvsi.c
+++ b/drivers/tty/hvc/hvsi.c
@@ -85,7 +85,7 @@ struct hvsi_struct {
@@ -76958,7 +77288,7 @@ index 345cebb..d5a1e9e 100644
ipwireless_disassociate_network_ttys(network,
ttyj->channel_idx);
diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
-index 92982d7..758ecfe 100644
+index 60d37b2..3d222ca 100644
--- a/drivers/tty/moxa.c
+++ b/drivers/tty/moxa.c
@@ -1188,7 +1188,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
@@ -76971,7 +77301,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 365dfd8..7b7d867 100644
+index 54cab59..3c05ac4 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)
@@ -77104,10 +77434,10 @@ index bdf0e6e..ea92f7e 100644
EXPORT_SYMBOL_GPL(n_tty_inherit_ops);
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
-index e198996..f2b79a2 100644
+index 51e0d32..d1ac13c 100644
--- a/drivers/tty/pty.c
+++ b/drivers/tty/pty.c
-@@ -852,8 +852,10 @@ static void __init unix98_pty_init(void)
+@@ -856,8 +856,10 @@ static void __init unix98_pty_init(void)
panic("Couldn't register Unix98 pts driver");
/* Now create the /dev/ptmx special device */
@@ -77120,10 +77450,10 @@ index e198996..f2b79a2 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 0b802cd..70afed6 100644
+index b0cc47c..58ea7a9 100644
--- a/drivers/tty/rocket.c
+++ b/drivers/tty/rocket.c
-@@ -905,7 +905,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
+@@ -906,7 +906,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
tty->driver_data = info;
tty_port_tty_set(port, tty);
@@ -77132,7 +77462,7 @@ index 0b802cd..70afed6 100644
atomic_inc(&rp_num_ports_open);
#ifdef ROCKET_DEBUG_OPEN
-@@ -914,7 +914,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
+@@ -915,7 +915,7 @@ static int rp_open(struct tty_struct *tty, struct file *filp)
#endif
}
#ifdef ROCKET_DEBUG_OPEN
@@ -77141,7 +77471,7 @@ index 0b802cd..70afed6 100644
#endif
/*
-@@ -1498,7 +1498,7 @@ static void rp_hangup(struct tty_struct *tty)
+@@ -1500,7 +1500,7 @@ static void rp_hangup(struct tty_struct *tty)
#endif
rp_flush_buffer(tty);
spin_lock_irqsave(&info->port.lock, flags);
@@ -77151,7 +77481,7 @@ index 0b802cd..70afed6 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 2f4f5ee..fed5cc6 100644
+index 0fbd7c0..66c6010 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)
@@ -77180,10 +77510,10 @@ index 2f4f5ee..fed5cc6 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 4eedd1d..4868f61 100644
+index 8dd250f..84599cb 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
-@@ -5620,7 +5620,7 @@ static struct pci_device_id serial_pci_tbl[] = {
+@@ -5632,7 +5632,7 @@ static struct pci_device_id serial_pci_tbl[] = {
};
static pci_ers_result_t serial8250_io_error_detected(struct pci_dev *dev,
@@ -77192,19 +77522,6 @@ index 4eedd1d..4868f61 100644
{
struct serial_private *priv = pci_get_drvdata(dev);
-diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c
-index 2085a6c..d386346 100644
---- a/drivers/tty/serial/ifx6x60.c
-+++ b/drivers/tty/serial/ifx6x60.c
-@@ -651,7 +651,7 @@ static void ifx_spi_complete(void *ctx)
- struct ifx_spi_device *ifx_dev = ctx;
- int length;
- int actual_length;
-- unsigned char more;
-+ unsigned char more = 0;
- unsigned char cts;
- int local_write_pending = 0;
- int queue_length;
diff --git a/drivers/tty/serial/ioc4_serial.c b/drivers/tty/serial/ioc4_serial.c
index e5c42fe..f091b02 100644
--- a/drivers/tty/serial/ioc4_serial.c
@@ -77380,10 +77697,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 96d3ce8..112fce3 100644
+index b7d80bd..50fc855 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
-@@ -1528,7 +1528,7 @@ static struct uart_driver msm_uart_driver = {
+@@ -1561,7 +1561,7 @@ static struct uart_driver msm_uart_driver = {
.cons = MSM_CONSOLE,
};
@@ -77392,7 +77709,7 @@ index 96d3ce8..112fce3 100644
static const struct of_device_id msm_uartdm_table[] = {
{ .compatible = "qcom,msm-uartdm-v1.1", .data = (void *)UARTDM_1P1 },
-@@ -1552,7 +1552,7 @@ static int msm_serial_probe(struct platform_device *pdev)
+@@ -1585,7 +1585,7 @@ static int msm_serial_probe(struct platform_device *pdev)
line = pdev->id;
if (line < 0)
@@ -77434,10 +77751,10 @@ index 99bb231..ba80b07 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 a126a60..b68a648 100644
+index a333c59..61594a8 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
-@@ -1374,7 +1374,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
+@@ -1473,7 +1473,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);
@@ -77446,25 +77763,16 @@ index a126a60..b68a648 100644
spin_unlock_irq(&port->lock);
return;
}
-@@ -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;
-
- /*
-@@ -1505,7 +1505,7 @@ static void uart_hangup(struct tty_struct *tty)
+@@ -1614,7 +1614,7 @@ static void uart_hangup(struct tty_struct *tty)
uart_flush_buffer(tty);
uart_shutdown(tty, state);
spin_lock_irqsave(&port->lock, flags);
- port->count = 0;
+ atomic_set(&port->count, 0);
- clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags);
spin_unlock_irqrestore(&port->lock, flags);
+ tty_port_set_active(port, 0);
tty_port_tty_set(port, NULL);
-@@ -1587,7 +1587,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
+@@ -1717,7 +1717,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);
@@ -77473,31 +77781,11 @@ index a126a60..b68a648 100644
spin_unlock_irq(&port->lock);
/*
-diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c
-index d08baa6..4bb0007 100644
---- a/drivers/tty/serial/uartlite.c
-+++ b/drivers/tty/serial/uartlite.c
-@@ -345,13 +345,13 @@ static int ulite_request_port(struct uart_port *port)
- return -EBUSY;
- }
-
-- port->private_data = &uartlite_be;
-+ port->private_data = (void *)&uartlite_be;
- ret = uart_in32(ULITE_CONTROL, port);
- uart_out32(ULITE_CONTROL_RST_TX, ULITE_CONTROL, port);
- ret = uart_in32(ULITE_STATUS, port);
- /* Endianess detection */
- if ((ret & ULITE_STATUS_TXEMPTY) != ULITE_STATUS_TXEMPTY)
-- port->private_data = &uartlite_le;
-+ port->private_data = (void *)&uartlite_le;
-
- return 0;
- }
diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c
-index f5476e2..78f1fb9 100644
+index c13e27e..335a512 100644
--- a/drivers/tty/synclink.c
+++ b/drivers/tty/synclink.c
-@@ -3085,7 +3085,7 @@ static void mgsl_close(struct tty_struct *tty, struct file * filp)
+@@ -3075,7 +3075,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",
@@ -77506,7 +77794,7 @@ index f5476e2..78f1fb9 100644
if (tty_port_close_start(&info->port, tty, filp) == 0)
goto cleanup;
-@@ -3103,7 +3103,7 @@ static void mgsl_close(struct tty_struct *tty, struct file * filp)
+@@ -3093,7 +3093,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__,
@@ -77515,7 +77803,7 @@ index f5476e2..78f1fb9 100644
} /* end of mgsl_close() */
-@@ -3202,8 +3202,8 @@ static void mgsl_hangup(struct tty_struct *tty)
+@@ -3192,8 +3192,8 @@ static void mgsl_hangup(struct tty_struct *tty)
mgsl_flush_buffer(tty);
shutdown(info);
@@ -77523,10 +77811,10 @@ index f5476e2..78f1fb9 100644
- info->port.count = 0;
+
+ atomic_set(&info->port.count, 0);
- info->port.flags &= ~ASYNC_NORMAL_ACTIVE;
+ tty_port_set_active(&info->port, 0);
info->port.tty = NULL;
-@@ -3291,10 +3291,10 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
+@@ -3281,10 +3281,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",
@@ -77538,8 +77826,8 @@ index f5476e2..78f1fb9 100644
+ atomic_dec(&port->count);
spin_unlock_irqrestore(&info->irq_spinlock, flags);
port->blocked_open++;
-
-@@ -3321,7 +3321,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
+
+@@ -3311,7 +3311,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",
@@ -77548,7 +77836,7 @@ index f5476e2..78f1fb9 100644
tty_unlock(tty);
schedule();
-@@ -3333,12 +3333,12 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
+@@ -3323,12 +3323,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))
@@ -77562,8 +77850,8 @@ index f5476e2..78f1fb9 100644
+ __FILE__,__LINE__, tty->driver->name, atomic_read(&port->count));
if (!retval)
- port->flags |= ASYNC_NORMAL_ACTIVE;
-@@ -3390,7 +3390,7 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp)
+ tty_port_set_active(port, 1);
+@@ -3380,7 +3380,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",
@@ -77572,7 +77860,7 @@ index f5476e2..78f1fb9 100644
info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
-@@ -3400,10 +3400,10 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp)
+@@ -3390,10 +3390,10 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp)
spin_unlock_irqrestore(&info->netlock, flags);
goto cleanup;
}
@@ -77585,7 +77873,7 @@ index f5476e2..78f1fb9 100644
/* 1st open on this device, init hardware */
retval = startup(info);
if (retval < 0)
-@@ -3427,8 +3427,8 @@ cleanup:
+@@ -3417,8 +3417,8 @@ cleanup:
if (retval) {
if (tty->count == 1)
info->port.tty = NULL; /* tty layer will release tty struct */
@@ -77596,7 +77884,7 @@ index f5476e2..78f1fb9 100644
}
return retval;
-@@ -7647,7 +7647,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
+@@ -7637,7 +7637,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
unsigned short new_crctype;
/* return error if TTY interface open */
@@ -77605,7 +77893,7 @@ index f5476e2..78f1fb9 100644
return -EBUSY;
switch (encoding)
-@@ -7743,7 +7743,7 @@ static int hdlcdev_open(struct net_device *dev)
+@@ -7733,7 +7733,7 @@ static int hdlcdev_open(struct net_device *dev)
/* arbitrate between network and tty opens */
spin_lock_irqsave(&info->netlock, flags);
@@ -77614,7 +77902,7 @@ index f5476e2..78f1fb9 100644
printk(KERN_WARNING "%s: hdlc_open returning busy\n", dev->name);
spin_unlock_irqrestore(&info->netlock, flags);
return -EBUSY;
-@@ -7829,7 +7829,7 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+@@ -7819,7 +7819,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 */
@@ -77624,7 +77912,7 @@ index f5476e2..78f1fb9 100644
if (cmd != SIOCWANDEV)
diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
-index c0a2f5a..a621130 100644
+index 7aca2d4..45a7121 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)
@@ -77684,9 +77972,9 @@ index c0a2f5a..a621130 100644
spin_lock_irqsave(&info->port.lock, flags);
- info->port.count = 0;
+ atomic_set(&info->port.count, 0);
- info->port.flags &= ~ASYNC_NORMAL_ACTIVE;
info->port.tty = NULL;
spin_unlock_irqrestore(&info->port.lock, flags);
+ tty_port_set_active(&info->port, 0);
@@ -1435,7 +1435,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
unsigned short new_crctype;
@@ -77723,7 +78011,7 @@ index c0a2f5a..a621130 100644
port->pending_bh && !port->bh_running &&
!port->bh_requested) {
DBGISR(("%s bh queued\n", port->device_name));
-@@ -3289,7 +3289,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
+@@ -3282,7 +3282,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);
@@ -77732,7 +78020,7 @@ index c0a2f5a..a621130 100644
spin_unlock_irqrestore(&info->lock, flags);
port->blocked_open++;
-@@ -3324,7 +3324,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
+@@ -3317,7 +3317,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))
@@ -77742,7 +78030,7 @@ index c0a2f5a..a621130 100644
if (!retval)
diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c
-index 90da0c7..05a09c0 100644
+index dec1565..bbf9fcc 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)
@@ -77802,9 +78090,9 @@ index 90da0c7..05a09c0 100644
spin_lock_irqsave(&info->port.lock, flags);
- info->port.count = 0;
+ atomic_set(&info->port.count, 0);
- info->port.flags &= ~ASYNC_NORMAL_ACTIVE;
info->port.tty = NULL;
spin_unlock_irqrestore(&info->port.lock, flags);
+ tty_port_set_active(&info->port, 1);
@@ -1551,7 +1551,7 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
unsigned short new_crctype;
@@ -77841,7 +78129,7 @@ index 90da0c7..05a09c0 100644
port->pending_bh && !port->bh_running &&
!port->bh_requested ) {
if ( debug_level >= DEBUG_LEVEL_ISR )
-@@ -3307,10 +3307,10 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
+@@ -3300,10 +3300,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",
@@ -77854,7 +78142,7 @@ index 90da0c7..05a09c0 100644
spin_unlock_irqrestore(&info->lock, flags);
port->blocked_open++;
-@@ -3337,7 +3337,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
+@@ -3330,7 +3330,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",
@@ -77863,7 +78151,7 @@ index 90da0c7..05a09c0 100644
tty_unlock(tty);
schedule();
-@@ -3347,12 +3347,12 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
+@@ -3340,12 +3340,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))
@@ -77877,7 +78165,7 @@ index 90da0c7..05a09c0 100644
+ __FILE__,__LINE__, tty->driver->name, atomic_read(&port->count));
if (!retval)
- port->flags |= ASYNC_NORMAL_ACTIVE;
+ tty_port_set_active(port, 1);
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index e513940..fb19436 100644
--- a/drivers/tty/sysrq.c
@@ -77892,7 +78180,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 24d5491..a74f792 100644
+index 734a635..0518bb7 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -105,6 +105,8 @@
@@ -77904,7 +78192,7 @@ index 24d5491..a74f792 100644
#undef TTY_DEBUG_HANGUP
#ifdef TTY_DEBUG_HANGUP
# define tty_debug_hangup(tty, f, args...) tty_debug(tty, f, ##args)
-@@ -2291,6 +2293,8 @@ static int tiocsti(struct tty_struct *tty, char __user *p)
+@@ -2286,6 +2288,8 @@ static int tiocsti(struct tty_struct *tty, char __user *p)
char ch, mbz = 0;
struct tty_ldisc *ld;
@@ -77913,7 +78201,7 @@ index 24d5491..a74f792 100644
if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
return -EPERM;
if (get_user(ch, p))
-@@ -3565,7 +3569,7 @@ EXPORT_SYMBOL(tty_devnum);
+@@ -3560,7 +3564,7 @@ EXPORT_SYMBOL(tty_devnum);
void tty_default_fops(struct file_operations *fops)
{
@@ -77963,19 +78251,19 @@ index 68947f6..1f85fef2 100644
raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags);
}
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
-index dbcca30..7549b6f 100644
+index c3f9d93..f81070c 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)
+@@ -236,7 +236,7 @@ void tty_port_hangup(struct tty_port *port)
unsigned long flags;
spin_lock_irqsave(&port->lock, flags);
- port->count = 0;
+ atomic_set(&port->count, 0);
- port->flags &= ~ASYNC_NORMAL_ACTIVE;
tty = port->tty;
if (tty)
-@@ -387,7 +387,7 @@ int tty_port_block_til_ready(struct tty_port *port,
+ set_bit(TTY_IO_ERROR, &tty->flags);
+@@ -388,7 +388,7 @@ int tty_port_block_til_ready(struct tty_port *port,
/* The port lock protects the port counts */
spin_lock_irqsave(&port->lock, flags);
@@ -77984,16 +78272,16 @@ index dbcca30..7549b6f 100644
port->blocked_open++;
spin_unlock_irqrestore(&port->lock, flags);
-@@ -428,7 +428,7 @@ int tty_port_block_til_ready(struct tty_port *port,
+@@ -429,7 +429,7 @@ int tty_port_block_til_ready(struct tty_port *port,
we must not mess that up further */
spin_lock_irqsave(&port->lock, flags);
if (!tty_hung_up_p(filp))
- port->count++;
+ atomic_inc(&port->count);
port->blocked_open--;
+ spin_unlock_irqrestore(&port->lock, flags);
if (retval == 0)
- port->flags |= ASYNC_NORMAL_ACTIVE;
-@@ -461,18 +461,18 @@ int tty_port_close_start(struct tty_port *port,
+@@ -462,18 +462,18 @@ int tty_port_close_start(struct tty_port *port,
return 0;
spin_lock_irqsave(&port->lock, flags);
@@ -78019,7 +78307,7 @@ index dbcca30..7549b6f 100644
spin_unlock_irqrestore(&port->lock, flags);
return 0;
}
-@@ -566,7 +566,7 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty,
+@@ -567,7 +567,7 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty,
struct file *filp)
{
spin_lock_irq(&port->lock);
@@ -78090,7 +78378,7 @@ index 1e93a37..81c499f 100644
ret = -EPERM;
goto reterr;
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
-index bcc1fc0..0d989a9 100644
+index fba021f..977a54e 100644
--- a/drivers/uio/uio.c
+++ b/drivers/uio/uio.c
@@ -25,6 +25,7 @@
@@ -78110,7 +78398,7 @@ index bcc1fc0..0d989a9 100644
}
static DEVICE_ATTR_RO(event);
-@@ -393,7 +394,7 @@ void uio_event_notify(struct uio_info *info)
+@@ -401,7 +402,7 @@ void uio_event_notify(struct uio_info *info)
{
struct uio_device *idev = info->uio_dev;
@@ -78119,7 +78407,7 @@ index bcc1fc0..0d989a9 100644
wake_up_interruptible(&idev->wait);
kill_fasync(&idev->async_queue, SIGIO, POLL_IN);
}
-@@ -446,7 +447,7 @@ static int uio_open(struct inode *inode, struct file *filep)
+@@ -454,7 +455,7 @@ static int uio_open(struct inode *inode, struct file *filep)
}
listener->dev = idev;
@@ -78128,7 +78416,7 @@ index bcc1fc0..0d989a9 100644
filep->private_data = listener;
if (idev->info->open) {
-@@ -497,7 +498,7 @@ static unsigned int uio_poll(struct file *filep, poll_table *wait)
+@@ -505,7 +506,7 @@ static unsigned int uio_poll(struct file *filep, poll_table *wait)
return -EIO;
poll_wait(filep, &idev->wait, wait);
@@ -78137,7 +78425,7 @@ index bcc1fc0..0d989a9 100644
return POLLIN | POLLRDNORM;
return 0;
}
-@@ -522,7 +523,7 @@ static ssize_t uio_read(struct file *filep, char __user *buf,
+@@ -530,7 +531,7 @@ static ssize_t uio_read(struct file *filep, char __user *buf,
do {
set_current_state(TASK_INTERRUPTIBLE);
@@ -78146,7 +78434,7 @@ index bcc1fc0..0d989a9 100644
if (event_count != listener->event_count) {
__set_current_state(TASK_RUNNING);
if (copy_to_user(buf, &event_count, count))
-@@ -580,9 +581,13 @@ static ssize_t uio_write(struct file *filep, const char __user *buf,
+@@ -588,9 +589,13 @@ static ssize_t uio_write(struct file *filep, const char __user *buf,
static int uio_find_mem_index(struct vm_area_struct *vma)
{
struct uio_device *idev = vma->vm_private_data;
@@ -78161,7 +78449,7 @@ index bcc1fc0..0d989a9 100644
return -1;
return (int)vma->vm_pgoff;
}
-@@ -814,7 +819,7 @@ int __uio_register_device(struct module *owner,
+@@ -822,7 +827,7 @@ int __uio_register_device(struct module *owner,
idev->owner = owner;
idev->info = info;
init_waitqueue_head(&idev->wait);
@@ -78311,7 +78599,7 @@ index ef04b50..7582d99 100644
file->f_version = event_count;
return POLLIN | POLLRDNORM;
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
-index 52c4461..adf74f5 100644
+index e9f5043..8ecfc4d 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -289,7 +289,7 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes,
@@ -78350,23 +78638,7 @@ index 52c4461..adf74f5 100644
if (copy_to_user(buf,
dev->rawdescriptors[i] + (*ppos - pos),
min(len, alloclen))) {
-@@ -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)
- {
-- struct usbdevfs_connectinfo ci = {
-- .devnum = ps->dev->devnum,
-- .slow = ps->dev->speed == USB_SPEED_LOW
-- };
-+ struct usbdevfs_connectinfo ci;
-+
-+ memset(&ci, 0, sizeof(ci));
-+ ci.devnum = ps->dev->devnum;
-+ ci.slow = ps->dev->speed == USB_SPEED_LOW;
-
- if (copy_to_user(arg, &ci, sizeof(ci)))
- return -EFAULT;
-@@ -1680,7 +1681,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
+@@ -1681,7 +1681,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
}
}
as->urb->dev = ps->dev;
@@ -78376,10 +78648,10 @@ index 52c4461..adf74f5 100644
(uurb->endpoint & USB_DIR_IN);
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
-index 2d107d0..9489679 100644
+index d2e3f65..e389998 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
-@@ -1629,7 +1629,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
+@@ -1630,7 +1630,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
*/
usb_get_urb(urb);
atomic_inc(&urb->use_count);
@@ -78388,7 +78660,7 @@ index 2d107d0..9489679 100644
usbmon_urb_submit(&hcd->self, urb);
/* NOTE requirements on root-hub callers (usbfs and the hub
-@@ -1656,7 +1656,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
+@@ -1657,7 +1657,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);
@@ -78398,7 +78670,7 @@ index 2d107d0..9489679 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 1ab42bf..0b2f334 100644
+index bee1351..dd3b48b 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -26,6 +26,7 @@
@@ -78409,7 +78681,7 @@ index 1ab42bf..0b2f334 100644
#include <asm/uaccess.h>
#include <asm/byteorder.h>
-@@ -4788,6 +4789,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
+@@ -4790,6 +4791,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
goto done;
return;
}
@@ -78434,7 +78706,7 @@ index c953a0f..54c64f4 100644
static DEVICE_ATTR_RO(urbnum);
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
-index 479187c3..55625b2a 100644
+index 5e80697..1e91073 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -444,7 +444,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
@@ -78513,7 +78785,7 @@ index f2ac0cb..4038262 100644
#include "u_uac1.h"
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
-index 6af145f..17d4bf2 100644
+index 3580f19..ab3d212 100644
--- a/drivers/usb/gadget/function/u_serial.c
+++ b/drivers/usb/gadget/function/u_serial.c
@@ -747,9 +747,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
@@ -78623,10 +78895,10 @@ 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 ae1b6e6..2aa775a 100644
+index a962b89..185683a 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)
+@@ -573,7 +573,7 @@ static int ehci_init(struct usb_hcd *hcd)
/* Accept arbitrarily long scatter-gather lists */
if (!(hcd->driver->flags & HCD_LOCAL_MEM))
@@ -78636,7 +78908,7 @@ index ae1b6e6..2aa775a 100644
/* 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 ffc9029..46f0741 100644
+index 74f62d6..459983a 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -777,7 +777,7 @@ static struct urb *request_single_step_set_feature_urb(
@@ -78674,10 +78946,10 @@ index eca3710..eca7127 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 360a5e9..ff82e6c 100644
+index 66efa9a..50b719d 100644
--- a/drivers/usb/host/fotg210-hcd.c
+++ b/drivers/usb/host/fotg210-hcd.c
-@@ -5031,7 +5031,7 @@ static int hcd_fotg210_init(struct usb_hcd *hcd)
+@@ -5025,7 +5025,7 @@ static int hcd_fotg210_init(struct usb_hcd *hcd)
/* Accept arbitrarily long scatter-gather lists */
if (!(hcd->driver->flags & HCD_LOCAL_MEM))
@@ -78726,7 +78998,7 @@ index 1db0626..2e9f5ea 100644
hwahc = container_of(wusbhc, struct hwahc, wusbhc);
hwahc_init(hwahc);
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
-index 04dcedf..de1615b 100644
+index 0449235..8f5e347e 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -444,7 +444,7 @@ static int ohci_init (struct ohci_hcd *ohci)
@@ -78778,10 +79050,10 @@ index c10972f..7a2d5db5 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 8b5b2ac..052a44e 100644
+index d7d5025..87d3be1 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
-@@ -1878,9 +1878,9 @@ td_cleanup:
+@@ -1871,9 +1871,9 @@ td_cleanup:
* unsigned). Play it safe and say we didn't transfer anything.
*/
if (urb->actual_length > urb->transfer_buffer_length) {
@@ -78793,7 +79065,7 @@ index 8b5b2ac..052a44e 100644
urb->actual_length = 0;
if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
*status = -EREMOTEIO;
-@@ -1959,10 +1959,15 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
+@@ -1952,10 +1952,15 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
return finish_td(xhci, td, event_trb, event, ep, status, false);
case COMP_STOP:
/* Did we stop at data stage? */
@@ -78813,7 +79085,7 @@ index 8b5b2ac..052a44e 100644
/* fall through */
case COMP_STOP_INVAL:
return finish_td(xhci, td, event_trb, event, ep, status, false);
-@@ -1976,12 +1981,15 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
+@@ -1969,12 +1974,15 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
/* else fall through */
case COMP_STALL:
/* Did we transfer part of the data (middle) phase? */
@@ -78835,7 +79107,7 @@ index 8b5b2ac..052a44e 100644
td->urb->actual_length = 0;
return finish_td(xhci, td, event_trb, event, ep, status, false);
-@@ -2014,9 +2022,12 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
+@@ -2007,9 +2015,12 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
* the last TRB.
*/
td->urb_length_set = true;
@@ -78851,7 +79123,7 @@ index 8b5b2ac..052a44e 100644
xhci_dbg(xhci, "Waiting for status "
"stage event\n");
return 0;
-@@ -2211,11 +2222,7 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
+@@ -2204,11 +2215,7 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
/* Fast path - was this the last TRB in the TD for this URB? */
} else if (event_trb == td->last_trb) {
if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) {
@@ -78864,7 +79136,7 @@ index 8b5b2ac..052a44e 100644
xhci_warn(xhci, "HC gave bad length "
"of %d bytes left\n",
EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)));
-@@ -2224,7 +2231,10 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
+@@ -2217,7 +2224,10 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
*status = -EREMOTEIO;
else
*status = 0;
@@ -78877,10 +79149,10 @@ index 8b5b2ac..052a44e 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 3272805..a3f7895 100644
+index f2f9518..24850e7 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -4878,7 +4878,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
+@@ -4837,7 +4837,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
int retval;
/* Accept arbitrarily long scatter-gather lists */
@@ -78912,7 +79184,7 @@ index a0a3827..d7ec10b 100644
props.type = BACKLIGHT_RAW;
props.max_brightness = 0xff;
diff --git a/drivers/usb/misc/sisusbvga/sisusb_con.c b/drivers/usb/misc/sisusbvga/sisusb_con.c
-index ace3430..7536bac 100644
+index afa8532..7ec10d6 100644
--- a/drivers/usb/misc/sisusbvga/sisusb_con.c
+++ b/drivers/usb/misc/sisusbvga/sisusb_con.c
@@ -1416,32 +1416,94 @@ static void sisusbdummycon_init(struct vc_data *vc, int init)
@@ -78981,7 +79253,7 @@ index ace3430..7536bac 100644
+ return 0;
+}
+
-+static int sisusb_con_set_palette(struct vc_data *a, unsigned char *b)
++static int sisusb_con_set_palette(struct vc_data *a, const unsigned char *b)
+{
+ return 0;
+}
@@ -79029,7 +79301,7 @@ index ace3430..7536bac 100644
int
diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
-index a66b01b..95a41b4 100644
+index 8967715..4a3791b 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)
@@ -79038,7 +79310,7 @@ index a66b01b..95a41b4 100644
- ++port->port.count;
+ atomic_inc(&port->port.count);
- if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) {
+ if (!tty_port_initialized(&port->port)) {
if (serial->type->set_termios) {
/*
@@ -172,7 +172,7 @@ static int usb_console_setup(struct console *co, char *options)
@@ -79069,10 +79341,10 @@ index a66b01b..95a41b4 100644
struct usb_serial *serial;
int retval = -ENODEV;
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
-index 5e67f63..2ef08d6 100644
+index ffd0867..eb28464 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
-@@ -689,7 +689,7 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
+@@ -709,7 +709,7 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
if (need_auto_sense) {
int temp_result;
struct scsi_eh_save ses;
@@ -79082,10 +79354,10 @@ index 5e67f63..2ef08d6 100644
const u8 *scdd;
u8 fm_ili;
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
-index 9de988a..4a45fdc 100644
+index ef2d8cd..c3982dd 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
-@@ -915,7 +915,7 @@ static void usb_stor_scan_dwork(struct work_struct *work)
+@@ -942,7 +942,7 @@ static void usb_stor_scan_dwork(struct work_struct *work)
clear_bit(US_FLIDX_SCAN_PENDING, &us->dflags);
}
@@ -79095,10 +79367,10 @@ index 9de988a..4a45fdc 100644
struct usb_device *usb_dev = interface_to_usbdev(intf);
diff --git a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h
-index da0ad32..50b5bbe 100644
+index 8fae28b..8b4bfec 100644
--- a/drivers/usb/storage/usb.h
+++ b/drivers/usb/storage/usb.h
-@@ -63,7 +63,7 @@ struct us_unusual_dev {
+@@ -64,7 +64,7 @@ struct us_unusual_dev {
__u8 useProtocol;
__u8 useTransport;
int (*initFunction)(struct us_data *);
@@ -79121,7 +79393,7 @@ index a863a98..d272795 100644
/*
* NOTE:
diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
-index fca5110..60c91ba 100644
+index 2e0450b..6ebf0f6 100644
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -447,7 +447,7 @@ static void vhci_tx_urb(struct urb *urb)
@@ -79213,10 +79485,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 712a849..c3ecd41 100644
+index 188b1ff..044b13e 100644
--- a/drivers/vfio/pci/vfio_pci.c
+++ b/drivers/vfio/pci/vfio_pci.c
-@@ -1172,7 +1172,7 @@ static void vfio_pci_remove(struct pci_dev *pdev)
+@@ -1207,7 +1207,7 @@ static void vfio_pci_remove(struct pci_dev *pdev)
}
static pci_ers_result_t vfio_pci_aer_err_detected(struct pci_dev *pdev,
@@ -79312,7 +79584,7 @@ index 84a110a..96312c3 100644
.ident = "Sahara Touch-iT",
.matches = {
diff --git a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c
-index 0efc52f..4e72706 100644
+index 0efc52f..3a691cb 100644
--- a/drivers/video/console/dummycon.c
+++ b/drivers/video/console/dummycon.c
@@ -41,12 +41,74 @@ static void dummycon_init(struct vc_data *vc, int init)
@@ -79380,7 +79652,7 @@ index 0efc52f..4e72706 100644
+ return 0;
+}
+
-+static int dummycon_set_palette(struct vc_data *a, unsigned char *b)
++static int dummycon_set_palette(struct vc_data *a, const unsigned char *b)
+{
+ return 0;
+}
@@ -79429,7 +79701,7 @@ index 0efc52f..4e72706 100644
};
EXPORT_SYMBOL_GPL(dummy_con);
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
-index 6e92917..2f3dbad 100644
+index afd3301..75dcf57 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -106,7 +106,7 @@ static int fbcon_softback_size = 32768;
@@ -79442,10 +79714,10 @@ index 6e92917..2f3dbad 100644
static int first_fb_vc;
static int last_fb_vc = MAX_NR_CONSOLES - 1;
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
-index 517f565..a0a8f49 100644
+index 8bf9110..8276633 100644
--- a/drivers/video/console/vgacon.c
+++ b/drivers/video/console/vgacon.c
-@@ -1411,24 +1411,33 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
+@@ -1410,24 +1410,33 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
* The console `switch' structure for the VGA based console
*/
@@ -79613,10 +79885,10 @@ index 10c988a..f7d9299 100644
+ .set_pll = aty_set_pll,
};
diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c
-index 57721c7..332b94b 100644
+index 74b5bca..5bddbea 100644
--- a/drivers/video/fbdev/core/fb_defio.c
+++ b/drivers/video/fbdev/core/fb_defio.c
-@@ -207,7 +207,9 @@ void fb_deferred_io_init(struct fb_info *info)
+@@ -208,7 +208,9 @@ void fb_deferred_io_init(struct fb_info *info)
BUG_ON(!fbdefio);
mutex_init(&fbdefio->lock);
@@ -79627,7 +79899,7 @@ index 57721c7..332b94b 100644
INIT_DELAYED_WORK(&info->deferred_work, fb_deferred_io_work);
INIT_LIST_HEAD(&fbdefio->pagelist);
if (fbdefio->delay == 0) /* set a default of 1 s */
-@@ -238,7 +240,9 @@ void fb_deferred_io_cleanup(struct fb_info *info)
+@@ -239,7 +241,9 @@ void fb_deferred_io_cleanup(struct fb_info *info)
page->mapping = NULL;
}
@@ -79639,7 +79911,7 @@ index 57721c7..332b94b 100644
}
EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup);
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
-index 4e73b6f..69a6b87 100644
+index 76c1ad9..6ec5e94 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1301,7 +1301,7 @@ static int do_fscreeninfo_to_user(struct fb_fix_screeninfo *fix,
@@ -79676,7 +79948,7 @@ index 4e73b6f..69a6b87 100644
struct fb_info * const info = file->private_data;
diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
-index e2451bd..ab7ccd1 100644
+index 2fd49b2..67e3d86 100644
--- a/drivers/video/fbdev/hyperv_fb.c
+++ b/drivers/video/fbdev/hyperv_fb.c
@@ -240,7 +240,7 @@ static uint screen_fb_size;
@@ -95428,7 +95700,7 @@ index 0000000..43d7c4f
+:1095D00080000A8080000A00800009808000090065
+:00000001FF
diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
-index ac9225e..e190518 100644
+index c37fb9c..51d73a3 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,
@@ -95441,7 +95713,7 @@ index ac9225e..e190518 100644
return ret;
}
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
-index a34702c..ff71f79 100644
+index 1b51eaa..0627a09 100644
--- a/fs/9p/vfs_inode_dotl.c
+++ b/fs/9p/vfs_inode_dotl.c
@@ -179,7 +179,7 @@ static int v9fs_mapped_dotl_flags(int flags)
@@ -95463,10 +95735,10 @@ index a34702c..ff71f79 100644
{ ATTR_UID, P9_ATTR_UID },
{ ATTR_GID, P9_ATTR_GID },
diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
-index 2d0cbbd..a6d61492 100644
+index 72c0335..551e08c 100644
--- a/fs/Kconfig.binfmt
+++ b/fs/Kconfig.binfmt
-@@ -103,7 +103,7 @@ config HAVE_AOUT
+@@ -111,7 +111,7 @@ config HAVE_AOUT
config BINFMT_AOUT
tristate "Kernel support for a.out and ECOFF binaries"
@@ -95555,7 +95827,7 @@ index 71d5982..3112bf6 100644
/*
* flock.c
diff --git a/fs/aio.c b/fs/aio.c
-index 155f842..89922d8 100644
+index fb8e45b..d651330 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -450,7 +450,7 @@ static int aio_setup_ring(struct kioctx *ctx)
@@ -95583,7 +95855,7 @@ 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 0146d91..aaf11f3 100644
+index 631f155..7f9c24c 100644
--- a/fs/autofs4/waitq.c
+++ b/fs/autofs4/waitq.c
@@ -56,7 +56,7 @@ static int autofs4_write(struct autofs_sb_info *sbi,
@@ -95595,7 +95867,7 @@ index 0146d91..aaf11f3 100644
ssize_t wr = 0;
sigpipe = sigismember(&current->pending.signal, SIGPIPE);
-@@ -343,6 +343,10 @@ static int validate_request(struct autofs_wait_queue **wait,
+@@ -344,6 +344,10 @@ static int validate_request(struct autofs_wait_queue **wait,
return 1;
}
@@ -95606,7 +95878,7 @@ index 0146d91..aaf11f3 100644
int autofs4_wait(struct autofs_sb_info *sbi,
struct dentry *dentry, enum autofs_notify notify)
{
-@@ -388,7 +392,12 @@ int autofs4_wait(struct autofs_sb_info *sbi,
+@@ -389,7 +393,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))
@@ -95651,7 +95923,7 @@ index 2722387..56059b5 100644
{
if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c
-index 4c55668..eeae150 100644
+index ae1b540..15cfacf 100644
--- a/fs/binfmt_aout.c
+++ b/fs/binfmt_aout.c
@@ -16,6 +16,7 @@
@@ -95684,7 +95956,7 @@ index 4c55668..eeae150 100644
if ((dump.u_ssize + 1) * PAGE_SIZE > cprm->limit)
dump.u_ssize = 0;
-@@ -232,6 +237,8 @@ static int load_aout_binary(struct linux_binprm * bprm)
+@@ -228,6 +233,8 @@ static int load_aout_binary(struct linux_binprm * bprm)
rlim = rlimit(RLIMIT_DATA);
if (rlim >= RLIM_INFINITY)
rlim = ~0;
@@ -95693,7 +95965,7 @@ index 4c55668..eeae150 100644
if (ex.a_data + ex.a_bss > rlim)
return -ENOMEM;
-@@ -261,6 +268,27 @@ static int load_aout_binary(struct linux_binprm * bprm)
+@@ -257,6 +264,27 @@ static int load_aout_binary(struct linux_binprm * bprm)
install_exec_creds(bprm);
@@ -95721,7 +95993,7 @@ index 4c55668..eeae150 100644
if (N_MAGIC(ex) == OMAGIC) {
unsigned long text_addr, map_size;
loff_t pos;
-@@ -312,7 +340,7 @@ static int load_aout_binary(struct linux_binprm * bprm)
+@@ -311,7 +339,7 @@ static int load_aout_binary(struct linux_binprm * bprm)
return error;
error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
@@ -95731,7 +96003,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 81381cc..b8c8a51 100644
+index a7a28110..eddc1f5 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -36,6 +36,7 @@
@@ -95782,16 +96054,16 @@ index 81381cc..b8c8a51 100644
start = ELF_PAGEALIGN(start);
end = ELF_PAGEALIGN(end);
if (end > start) {
-@@ -101,7 +121,7 @@ static int set_brk(unsigned long start, unsigned long end)
- if (BAD_ADDR(addr))
- return addr;
+@@ -100,7 +120,7 @@ static int set_brk(unsigned long start, unsigned long end)
+ if (error)
+ return error;
}
- current->mm->start_brk = current->mm->brk = end;
+ current->mm->start_brk = current->mm->brk = e;
return 0;
}
-@@ -162,12 +182,13 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
+@@ -161,12 +181,13 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
elf_addr_t __user *u_rand_bytes;
const char *k_platform = ELF_PLATFORM;
const char *k_base_platform = ELF_BASE_PLATFORM;
@@ -95806,7 +96078,7 @@ index 81381cc..b8c8a51 100644
/*
* In some cases (e.g. Hyper-Threading), we want to avoid L1
-@@ -209,8 +230,12 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
+@@ -208,8 +229,12 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
* Generate 16 random bytes for userspace PRNG seeding.
*/
get_random_bytes(k_rand_bytes, sizeof(k_rand_bytes));
@@ -95821,7 +96093,7 @@ index 81381cc..b8c8a51 100644
if (__copy_to_user(u_rand_bytes, k_rand_bytes, sizeof(k_rand_bytes)))
return -EFAULT;
-@@ -325,9 +350,11 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
+@@ -324,9 +349,11 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
return -EFAULT;
current->mm->env_end = p;
@@ -95834,7 +96106,7 @@ index 81381cc..b8c8a51 100644
return -EFAULT;
return 0;
}
-@@ -518,14 +545,14 @@ static inline int arch_check_elf(struct elfhdr *ehdr, bool has_interp,
+@@ -517,14 +544,14 @@ static inline int arch_check_elf(struct elfhdr *ehdr, bool has_interp,
an ELF header */
static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
@@ -95852,7 +96124,7 @@ index 81381cc..b8c8a51 100644
unsigned long total_size;
int i;
-@@ -545,6 +572,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -544,6 +571,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
goto out;
}
@@ -95864,7 +96136,7 @@ index 81381cc..b8c8a51 100644
eppnt = interp_elf_phdata;
for (i = 0; i < interp_elf_ex->e_phnum; i++, eppnt++) {
if (eppnt->p_type == PT_LOAD) {
-@@ -568,8 +600,6 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -567,8 +599,6 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
map_addr = elf_map(interpreter, load_addr + vaddr,
eppnt, elf_prot, elf_type, total_size);
total_size = 0;
@@ -95873,7 +96145,7 @@ index 81381cc..b8c8a51 100644
error = map_addr;
if (BAD_ADDR(map_addr))
goto out;
-@@ -588,8 +618,8 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -587,8 +617,8 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
k = load_addr + eppnt->p_vaddr;
if (BAD_ADDR(k) ||
eppnt->p_filesz > eppnt->p_memsz ||
@@ -95884,22 +96156,22 @@ index 81381cc..b8c8a51 100644
error = -ENOMEM;
goto out;
}
-@@ -628,9 +658,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -627,9 +657,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1);
/* Map the last of the bss segment */
- error = vm_brk(elf_bss, last_bss - elf_bss);
-- if (BAD_ADDR(error))
+- if (error)
- goto out;
+ if (last_bss > elf_bss) {
+ error = vm_brk(elf_bss, last_bss - elf_bss);
-+ if (BAD_ADDR(error))
++ if (error)
+ goto out;
+ }
}
error = load_addr;
-@@ -638,6 +670,336 @@ out:
+@@ -637,6 +669,336 @@ out:
return error;
}
@@ -96236,7 +96508,7 @@ index 81381cc..b8c8a51 100644
/*
* These are the functions used to load ELF style executables and shared
* libraries. There is no binary dependent code anywhere else.
-@@ -651,6 +1013,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top)
+@@ -650,6 +1012,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top)
{
unsigned long random_variable = 0;
@@ -96248,7 +96520,7 @@ index 81381cc..b8c8a51 100644
if ((current->flags & PF_RANDOMIZE) &&
!(current->personality & ADDR_NO_RANDOMIZE)) {
random_variable = get_random_long();
-@@ -670,7 +1037,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -669,7 +1036,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
unsigned long load_addr = 0, load_bias = 0;
int load_addr_set = 0;
char * elf_interpreter = NULL;
@@ -96257,7 +96529,7 @@ index 81381cc..b8c8a51 100644
struct elf_phdr *elf_ppnt, *elf_phdata, *interp_elf_phdata = NULL;
unsigned long elf_bss, elf_brk;
int retval, i;
-@@ -685,6 +1052,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -684,6 +1051,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
struct elfhdr interp_elf_ex;
} *loc;
struct arch_elf_state arch_state = INIT_ARCH_ELF_STATE;
@@ -96265,7 +96537,7 @@ index 81381cc..b8c8a51 100644
loc = kmalloc(sizeof(*loc), GFP_KERNEL);
if (!loc) {
-@@ -845,6 +1213,77 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -844,6 +1212,77 @@ static int load_elf_binary(struct linux_binprm *bprm)
/* Do this immediately, since STACK_TOP as used in setup_arg_pages
may depend on the personality. */
SET_PERSONALITY2(loc->elf_ex, &arch_state);
@@ -96343,7 +96615,7 @@ index 81381cc..b8c8a51 100644
if (elf_read_implies_exec(loc->elf_ex, executable_stack))
current->personality |= READ_IMPLIES_EXEC;
-@@ -920,8 +1359,21 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -919,8 +1358,21 @@ static int load_elf_binary(struct linux_binprm *bprm)
if (current->flags & PF_RANDOMIZE)
load_bias += arch_mmap_rnd();
load_bias = ELF_PAGESTART(load_bias);
@@ -96367,7 +96639,7 @@ index 81381cc..b8c8a51 100644
if (!total_size) {
retval = -EINVAL;
goto out_free_dentry;
-@@ -957,9 +1409,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -956,9 +1408,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
* allowed task size. Note that p_filesz must always be
* <= p_memsz so it is only necessary to check p_memsz.
*/
@@ -96380,7 +96652,7 @@ index 81381cc..b8c8a51 100644
/* set_brk can never work. Avoid overflows. */
retval = -EINVAL;
goto out_free_dentry;
-@@ -995,16 +1447,43 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -994,16 +1446,43 @@ static int load_elf_binary(struct linux_binprm *bprm)
if (retval)
goto out_free_dentry;
if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) {
@@ -96429,7 +96701,7 @@ index 81381cc..b8c8a51 100644
load_bias, interp_elf_phdata);
if (!IS_ERR((void *)elf_entry)) {
/*
-@@ -1055,6 +1534,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -1054,6 +1533,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
current->mm->end_data = end_data;
current->mm->start_stack = bprm->p;
@@ -96437,7 +96709,7 @@ index 81381cc..b8c8a51 100644
if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) {
current->mm->brk = current->mm->start_brk =
arch_randomize_brk(current->mm);
-@@ -1062,6 +1542,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -1061,6 +1541,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
current->brk_randomized = 1;
#endif
}
@@ -96445,7 +96717,7 @@ index 81381cc..b8c8a51 100644
if (current->personality & MMAP_PAGE_ZERO) {
/* Why this, you ask??? Well SVr4 maps page 0 as read-only,
-@@ -1230,7 +1711,7 @@ static bool always_dump_vma(struct vm_area_struct *vma)
+@@ -1232,7 +1713,7 @@ static bool always_dump_vma(struct vm_area_struct *vma)
* Decide what to dump of a segment, part, all or none.
*/
static unsigned long vma_dump_size(struct vm_area_struct *vma,
@@ -96454,7 +96726,7 @@ index 81381cc..b8c8a51 100644
{
#define FILTER(type) (mm_flags & (1UL << MMF_DUMP_##type))
-@@ -1277,7 +1758,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
+@@ -1279,7 +1760,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
if (vma->vm_file == NULL)
return 0;
@@ -96463,7 +96735,7 @@ index 81381cc..b8c8a51 100644
goto whole;
/*
-@@ -1377,7 +1858,7 @@ static void fill_elf_header(struct elfhdr *elf, int segs,
+@@ -1379,7 +1860,7 @@ static void fill_elf_header(struct elfhdr *elf, int segs,
return;
}
@@ -96472,7 +96744,7 @@ index 81381cc..b8c8a51 100644
{
phdr->p_type = PT_NOTE;
phdr->p_offset = offset;
-@@ -1484,9 +1965,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
+@@ -1486,9 +1967,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
{
elf_addr_t *auxv = (elf_addr_t *) mm->saved_auxv;
int i = 0;
@@ -96484,7 +96756,7 @@ index 81381cc..b8c8a51 100644
fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv);
}
-@@ -1495,7 +1976,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
+@@ -1497,7 +1978,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
{
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
@@ -96493,7 +96765,7 @@ index 81381cc..b8c8a51 100644
set_fs(old_fs);
fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata);
}
-@@ -2215,7 +2696,7 @@ static int elf_core_dump(struct coredump_params *cprm)
+@@ -2217,7 +2698,7 @@ static int elf_core_dump(struct coredump_params *cprm)
vma = next_vma(vma, gate_vma)) {
unsigned long dump_size;
@@ -96502,7 +96774,7 @@ index 81381cc..b8c8a51 100644
vma_filesz[i++] = dump_size;
vma_data_size += dump_size;
}
-@@ -2323,6 +2804,167 @@ out:
+@@ -2325,6 +2806,167 @@ out:
#endif /* CONFIG_ELF_CORE */
@@ -96671,7 +96943,7 @@ index 81381cc..b8c8a51 100644
{
register_binfmt(&elf_format);
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
-index 083ea2bc..46a3cd3 100644
+index 2035893..f42edf1 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)
@@ -96693,10 +96965,10 @@ index 083ea2bc..46a3cd3 100644
for (i = 0; i < numnote; i++)
sz += notesize(notes + i);
diff --git a/fs/block_dev.c b/fs/block_dev.c
-index 20a2c02..5daa230 100644
+index 71ccab1..8e55e4e 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
-@@ -770,7 +770,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
+@@ -852,7 +852,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 */
@@ -96706,7 +96978,7 @@ index 20a2c02..5daa230 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 234707c..fa73ff27 100644
+index a85cf7d..bf8fc07 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)
@@ -96735,10 +97007,10 @@ index 234707c..fa73ff27 100644
WARN_ON(trans->transid != btrfs_header_generation(parent));
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
-index 208d199..c8a54d0 100644
+index 4274a7b..401b2fe 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
-@@ -979,8 +979,8 @@ struct btrfs_dev_replace {
+@@ -358,8 +358,8 @@ struct btrfs_dev_replace {
u64 replace_state; /* see #define above */
u64 time_started; /* seconds since 1-Jan-1970 */
u64 time_stopped; /* seconds since 1-Jan-1970 */
@@ -96749,7 +97021,7 @@ index 208d199..c8a54d0 100644
u64 cursor_left;
u64 committed_cursor_left;
-@@ -1615,7 +1615,7 @@ struct btrfs_fs_info {
+@@ -846,7 +846,7 @@ struct btrfs_fs_info {
/* this protects tree_mod_seq_list */
spinlock_t tree_mod_seq_lock;
@@ -96758,7 +97030,7 @@ index 208d199..c8a54d0 100644
struct list_head tree_mod_seq_list;
/* this protects tree_mod_log */
-@@ -1925,7 +1925,7 @@ struct btrfs_root {
+@@ -1156,7 +1156,7 @@ struct btrfs_root {
struct list_head log_ctxs[2];
atomic_t log_writers;
atomic_t log_commit[2];
@@ -96768,7 +97040,7 @@ index 208d199..c8a54d0 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 6cef006..48c10a6 100644
+index d3aaabb..a069679 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -456,7 +456,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
@@ -96799,7 +97071,7 @@ index 6cef006..48c10a6 100644
ret = btrfs_wq_run_delayed_node(delayed_root, fs_info, 0);
if (ret)
diff --git a/fs/btrfs/delayed-inode.h b/fs/btrfs/delayed-inode.h
-index 0167853c..b7d2bb4 100644
+index 2495b3d..8bdbb07 100644
--- a/fs/btrfs/delayed-inode.h
+++ b/fs/btrfs/delayed-inode.h
@@ -43,7 +43,7 @@ struct btrfs_delayed_root {
@@ -96843,10 +97115,10 @@ index 430b368..85f12e1 100644
/* first set the basic ref node struct up */
atomic_set(&ref->refs, 1);
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
-index 26bcb48..0d4f068 100644
+index 63ef9cd..b0d7148 100644
--- a/fs/btrfs/dev-replace.c
+++ b/fs/btrfs/dev-replace.c
-@@ -85,8 +85,8 @@ no_valid_dev_replace_entry_found:
+@@ -82,8 +82,8 @@ no_valid_dev_replace_entry_found:
dev_replace->replace_state = 0;
dev_replace->time_started = 0;
dev_replace->time_stopped = 0;
@@ -96857,7 +97129,7 @@ index 26bcb48..0d4f068 100644
dev_replace->cursor_left = 0;
dev_replace->committed_cursor_left = 0;
dev_replace->cursor_left_last_write_of_item = 0;
-@@ -115,9 +115,9 @@ no_valid_dev_replace_entry_found:
+@@ -112,9 +112,9 @@ no_valid_dev_replace_entry_found:
dev_replace->time_started = btrfs_dev_replace_time_started(eb, ptr);
dev_replace->time_stopped =
btrfs_dev_replace_time_stopped(eb, ptr);
@@ -96869,7 +97141,7 @@ index 26bcb48..0d4f068 100644
btrfs_dev_replace_num_uncorrectable_read_errors(eb, ptr));
dev_replace->cursor_left = btrfs_dev_replace_cursor_left(eb, ptr);
dev_replace->committed_cursor_left = dev_replace->cursor_left;
-@@ -277,9 +277,9 @@ int btrfs_run_dev_replace(struct btrfs_trans_handle *trans,
+@@ -274,9 +274,9 @@ int btrfs_run_dev_replace(struct btrfs_trans_handle *trans,
btrfs_set_dev_replace_time_started(eb, ptr, dev_replace->time_started);
btrfs_set_dev_replace_time_stopped(eb, ptr, dev_replace->time_stopped);
btrfs_set_dev_replace_num_write_errors(eb, ptr,
@@ -96881,7 +97153,7 @@ index 26bcb48..0d4f068 100644
dev_replace->cursor_left_last_write_of_item =
dev_replace->cursor_left;
btrfs_set_dev_replace_cursor_left(eb, ptr,
-@@ -394,8 +394,8 @@ int btrfs_dev_replace_start(struct btrfs_root *root,
+@@ -377,8 +377,8 @@ int btrfs_dev_replace_start(struct btrfs_root *root, char *tgtdev_name,
dev_replace->cursor_right = 0;
dev_replace->is_valid = 1;
dev_replace->item_needs_writeback = 1;
@@ -96889,10 +97161,10 @@ index 26bcb48..0d4f068 100644
- atomic64_set(&dev_replace->num_uncorrectable_read_errors, 0);
+ atomic64_set_unchecked(&dev_replace->num_write_errors, 0);
+ atomic64_set_unchecked(&dev_replace->num_uncorrectable_read_errors, 0);
- args->result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;
btrfs_dev_replace_unlock(dev_replace, 1);
-@@ -659,9 +659,9 @@ void btrfs_dev_replace_status(struct btrfs_fs_info *fs_info,
+ ret = btrfs_sysfs_add_device_link(tgt_device->fs_devices, tgt_device);
+@@ -648,9 +648,9 @@ void btrfs_dev_replace_status(struct btrfs_fs_info *fs_info,
args->status.time_started = dev_replace->time_started;
args->status.time_stopped = dev_replace->time_stopped;
args->status.num_write_errors =
@@ -96905,10 +97177,10 @@ index 26bcb48..0d4f068 100644
case BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED:
case BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED:
diff --git a/fs/btrfs/dev-replace.h b/fs/btrfs/dev-replace.h
-index 29e3ef5..37e8d79 100644
+index e922b42..2a5a145 100644
--- a/fs/btrfs/dev-replace.h
+++ b/fs/btrfs/dev-replace.h
-@@ -40,8 +40,8 @@ void btrfs_dev_replace_set_lock_blocking(struct btrfs_dev_replace *dev_replace);
+@@ -42,8 +42,8 @@ void btrfs_dev_replace_set_lock_blocking(struct btrfs_dev_replace *dev_replace);
void btrfs_dev_replace_clear_lock_blocking(
struct btrfs_dev_replace *dev_replace);
@@ -96920,10 +97192,10 @@ index 29e3ef5..37e8d79 100644
}
#endif
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
-index 4e47849..d0d47dc 100644
+index 60ce119..b517fc9 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
-@@ -1278,7 +1278,7 @@ static void __setup_root(u32 nodesize, u32 sectorsize, u32 stripesize,
+@@ -1279,7 +1279,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);
@@ -96932,7 +97204,7 @@ index 4e47849..d0d47dc 100644
atomic_set(&root->orphan_inodes, 0);
atomic_set(&root->refs, 1);
atomic_set(&root->will_be_snapshoted, 0);
-@@ -2612,7 +2612,7 @@ int open_ctree(struct super_block *sb,
+@@ -2622,7 +2622,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);
@@ -96942,7 +97214,7 @@ index 4e47849..d0d47dc 100644
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 318b048..d91951ea 100644
+index e0715fc..76857e9 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)
@@ -96968,10 +97240,10 @@ index 318b048..d91951ea 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 af5c7fa..64568af 100644
+index 2234e88..6f43c26 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
-@@ -1939,7 +1939,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
+@@ -1937,7 +1937,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
return ret;
inode_lock(inode);
@@ -96980,7 +97252,7 @@ index af5c7fa..64568af 100644
full_sync = test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
&BTRFS_I(inode)->runtime_flags);
/*
-@@ -1993,7 +1993,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
+@@ -1991,7 +1991,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
inode_unlock(inode);
goto out;
}
@@ -96990,7 +97262,7 @@ index af5c7fa..64568af 100644
/*
* If the last transaction that changed this file was before the current
diff --git a/fs/btrfs/free-space-cache.h b/fs/btrfs/free-space-cache.h
-index 33178c4..ff2e4ad 100644
+index 3af651c..30b9644 100644
--- a/fs/btrfs/free-space-cache.h
+++ b/fs/btrfs/free-space-cache.h
@@ -48,6 +48,7 @@ struct btrfs_free_space_op {
@@ -97002,7 +97274,7 @@ index 33178c4..ff2e4ad 100644
struct btrfs_io_ctl;
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
-index 0b7792e..be2ccab17 100644
+index f8b6d41..17457e7 100644
--- a/fs/btrfs/raid56.c
+++ b/fs/btrfs/raid56.c
@@ -153,7 +153,7 @@ struct btrfs_raid_bio {
@@ -97137,10 +97409,10 @@ index 0b7792e..be2ccab17 100644
* build a list of bios to read all the missing parts of this
* stripe
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
-index 4678f03..0cadde2 100644
+index 70427ef..91038c2 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
-@@ -3667,7 +3667,7 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,
+@@ -3716,7 +3716,7 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,
if (ret)
break;
if (is_dev_replace &&
@@ -97150,10 +97422,10 @@ index 4678f03..0cadde2 100644
break;
}
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
-index d7c138f..02ad00f 100644
+index 60e7179..8439191 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
-@@ -248,7 +248,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
+@@ -244,7 +244,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
function, line, errstr);
return;
}
@@ -97163,10 +97435,10 @@ index d7c138f..02ad00f 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 539e7b5..9de4167 100644
+index 4879656..5d76f84 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
-@@ -483,7 +483,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add)
+@@ -495,7 +495,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];
@@ -97176,7 +97448,7 @@ index 539e7b5..9de4167 100644
.attrs = attrs,
};
diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c
-index f54bf45..6a69b0b 100644
+index 02223f3..9239b41 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)
@@ -97189,10 +97461,10 @@ index f54bf45..6a69b0b 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 5142475..b290272 100644
+index 3956bb2..b44385f 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)
+@@ -409,7 +409,7 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache,
int ret;
u64 offset;
u64 max_extent_size;
@@ -97202,7 +97474,7 @@ index 5142475..b290272 100644
.use_bitmap = test_use_bitmap,
};
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
-index 43885e5..21cba1c 100644
+index 948aa18..ae3bc17 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -277,7 +277,7 @@ loop:
@@ -97215,7 +97487,7 @@ index 43885e5..21cba1c 100644
spin_lock_init(&cur_trans->delayed_refs.lock);
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
-index 517d0cc..a22c356 100644
+index c05f69a..2469b31 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -173,7 +173,7 @@ static int start_log_trans(struct btrfs_trans_handle *trans,
@@ -97268,10 +97540,10 @@ 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 bd0f45f..d28e89b 100644
+index 589f128..88f2043 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
-@@ -232,7 +232,7 @@ static struct btrfs_device *__alloc_device(void)
+@@ -247,7 +247,7 @@ static struct btrfs_device *__alloc_device(void)
spin_lock_init(&dev->reada_lock);
atomic_set(&dev->reada_in_flight, 0);
@@ -97280,7 +97552,7 @@ index bd0f45f..d28e89b 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);
-@@ -5198,7 +5198,7 @@ static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes)
+@@ -5240,7 +5240,7 @@ static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes)
sizeof(u64) * (total_stripes),
GFP_NOFS|__GFP_NOFAIL);
@@ -97289,7 +97561,7 @@ index bd0f45f..d28e89b 100644
atomic_set(&bbio->refs, 1);
return bbio;
-@@ -5881,7 +5881,7 @@ static void btrfs_end_bio(struct bio *bio)
+@@ -5934,7 +5934,7 @@ static void btrfs_end_bio(struct bio *bio)
int is_orig_bio = 0;
if (bio->bi_error) {
@@ -97298,7 +97570,7 @@ index bd0f45f..d28e89b 100644
if (bio->bi_error == -EIO || bio->bi_error == -EREMOTEIO) {
unsigned int stripe_index =
btrfs_io_bio(bio)->stripe_index;
-@@ -5919,7 +5919,7 @@ static void btrfs_end_bio(struct bio *bio)
+@@ -5972,7 +5972,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
*/
@@ -97307,16 +97579,16 @@ index bd0f45f..d28e89b 100644
bio->bi_error = -EIO;
} else {
/*
-@@ -6030,7 +6030,7 @@ static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio,
+@@ -6083,7 +6083,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)
{
- atomic_inc(&bbio->error);
+ atomic_inc_unchecked(&bbio->error);
if (atomic_dec_and_test(&bbio->stripes_pending)) {
- /* Shoud be the original bio. */
+ /* Should be the original bio. */
WARN_ON(bio != bbio->orig_bio);
-@@ -6827,10 +6827,10 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans,
+@@ -6958,10 +6958,10 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans,
if (!device->dev_stats_valid || !btrfs_dev_stats_dirty(device))
continue;
@@ -97330,7 +97602,7 @@ index bd0f45f..d28e89b 100644
mutex_unlock(&fs_devices->device_list_mutex);
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
-index 1939ebd..2330751 100644
+index 0ac90f8..9adeaff 100644
--- a/fs/btrfs/volumes.h
+++ b/fs/btrfs/volumes.h
@@ -148,8 +148,8 @@ struct btrfs_device {
@@ -97353,7 +97625,7 @@ index 1939ebd..2330751 100644
int max_errors;
int num_stripes;
int mirror_num;
-@@ -507,21 +507,21 @@ int btrfs_remove_chunk(struct btrfs_trans_handle *trans,
+@@ -466,21 +466,21 @@ int btrfs_remove_chunk(struct btrfs_trans_handle *trans,
static inline int btrfs_dev_stats_dirty(struct btrfs_device *dev)
{
@@ -97379,7 +97651,7 @@ index 1939ebd..2330751 100644
}
static inline int btrfs_dev_stat_read_and_reset(struct btrfs_device *dev,
-@@ -529,18 +529,18 @@ static inline int btrfs_dev_stat_read_and_reset(struct btrfs_device *dev,
+@@ -488,18 +488,18 @@ static inline int btrfs_dev_stat_read_and_reset(struct btrfs_device *dev,
{
int ret;
@@ -97403,7 +97675,7 @@ index 1939ebd..2330751 100644
static inline void btrfs_dev_stat_reset(struct btrfs_device *dev,
diff --git a/fs/buffer.c b/fs/buffer.c
-index af0d9a8..2437a67 100644
+index 754813a..4c25e3c 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -3406,7 +3406,7 @@ void __init buffer_init(void)
@@ -97584,17 +97856,17 @@ index eccd339..4c1d995 100644
return 0;
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
-index 4fb2bbc..2f8aa11 100644
+index 6e0fedf..37aeaec 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
-@@ -197,10 +197,18 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx,
+@@ -261,10 +261,18 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx,
spin_unlock(&dentry->d_lock);
if (emit_dentry) {
+ char d_name[DNAME_INLINE_LEN];
+ const unsigned char *name;
+
- dout(" %llu (%llu) dentry %p %pd %p\n", di->offset, ctx->pos,
+ dout(" %llx dentry %p %pd %p\n", di->offset,
dentry, dentry, d_inode(dentry));
ctx->pos = di->offset;
- if (!dir_emit(ctx, dentry->d_name.name,
@@ -97607,20 +97879,11 @@ index 4fb2bbc..2f8aa11 100644
dentry->d_name.len,
ceph_translate_ino(dentry->d_sb,
d_inode(dentry)->i_ino),
-@@ -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);
-- int off = fpos_off(ctx->pos);
-+ unsigned int off = fpos_off(ctx->pos);
- int err;
- u32 ftype;
- struct ceph_mds_reply_info_parsed *rinfo;
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
-index f12d5e2..4d49bf1 100644
+index 91e0248..08de6ce 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
-@@ -904,7 +904,7 @@ static int ceph_compare_super(struct super_block *sb, void *data)
+@@ -918,7 +918,7 @@ static int ceph_compare_super(struct super_block *sb, void *data)
/*
* construct our own bdi so we can control readahead, etc.
*/
@@ -97629,7 +97892,7 @@ index f12d5e2..4d49bf1 100644
static int ceph_register_bdi(struct super_block *sb,
struct ceph_fs_client *fsc)
-@@ -921,7 +921,7 @@ static int ceph_register_bdi(struct super_block *sb,
+@@ -935,7 +935,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",
@@ -97683,10 +97946,10 @@ index 788e191..ca209d6 100644
server->ops->print_stats(m, tcon);
}
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
-index 89201564..eafd380 100644
+index 5d841f3..761ed68 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
-@@ -1151,7 +1151,7 @@ cifs_init_request_bufs(void)
+@@ -1143,7 +1143,7 @@ cifs_init_request_bufs(void)
*/
cifs_req_cachep = kmem_cache_create("cifs_request",
CIFSMaxBufSize + max_hdr_size, 0,
@@ -97695,7 +97958,7 @@ index 89201564..eafd380 100644
if (cifs_req_cachep == NULL)
return -ENOMEM;
-@@ -1178,7 +1178,7 @@ cifs_init_request_bufs(void)
+@@ -1170,7 +1170,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",
@@ -97704,7 +97967,7 @@ index 89201564..eafd380 100644
NULL);
if (cifs_sm_req_cachep == NULL) {
mempool_destroy(cifs_req_poolp);
-@@ -1263,8 +1263,8 @@ init_cifs(void)
+@@ -1255,8 +1255,8 @@ init_cifs(void)
atomic_set(&bufAllocCount, 0);
atomic_set(&smBufAllocCount, 0);
#ifdef CONFIG_CIFS_STATS2
@@ -97716,10 +97979,10 @@ index 89201564..eafd380 100644
atomic_set(&midCount, 0);
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
-index f2cc0b3..f5168a7 100644
+index 8f1d8c1..2f3f665 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
-@@ -843,35 +843,35 @@ struct cifs_tcon {
+@@ -841,35 +841,35 @@ struct cifs_tcon {
__u16 Flags; /* optional support bits */
enum statusEnum tidStatus;
#ifdef CONFIG_CIFS_STATS
@@ -97779,7 +98042,7 @@ index f2cc0b3..f5168a7 100644
} smb2_stats;
#endif /* CONFIG_CIFS_SMB2 */
} stats;
-@@ -1221,7 +1221,7 @@ convert_delimiter(char *path, char delim)
+@@ -1219,7 +1219,7 @@ convert_delimiter(char *path, char delim)
}
#ifdef CONFIG_CIFS_STATS
@@ -97788,7 +98051,7 @@ index f2cc0b3..f5168a7 100644
static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
unsigned int bytes)
-@@ -1588,8 +1588,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
+@@ -1586,8 +1586,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
/* Various Debug counters */
GLOBAL_EXTERN atomic_t bufAllocCount; /* current number allocated */
#ifdef CONFIG_CIFS_STATS2
@@ -97800,10 +98063,10 @@ index f2cc0b3..f5168a7 100644
GLOBAL_EXTERN atomic_t smBufAllocCount;
GLOBAL_EXTERN atomic_t midCount;
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
-index c03d074..0465e40 100644
+index d4890b6..a79317e 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
-@@ -1372,7 +1372,7 @@ cifs_free_llist(struct list_head *llist)
+@@ -1379,7 +1379,7 @@ cifs_free_llist(struct list_head *llist)
int
cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
@@ -97812,7 +98075,7 @@ index c03d074..0465e40 100644
{
int rc = 0, stored_rc;
int types[] = {LOCKING_ANDX_LARGE_FILES,
-@@ -2054,10 +2054,14 @@ static int cifs_writepages(struct address_space *mapping,
+@@ -2062,10 +2062,14 @@ static int cifs_writepages(struct address_space *mapping,
index = mapping->writeback_index; /* Start from prev offset */
end = -1;
} else {
@@ -97830,7 +98093,7 @@ index c03d074..0465e40 100644
scanned = true;
}
server = cifs_sb_master_tcon(cifs_sb)->ses->server;
-@@ -2531,7 +2535,7 @@ cifs_write_from_iter(loff_t offset, size_t len, struct iov_iter *from,
+@@ -2539,7 +2543,7 @@ cifs_write_from_iter(loff_t offset, size_t len, struct iov_iter *from,
wdata->pid = pid;
wdata->bytes = cur_len;
wdata->pagesz = PAGE_SIZE;
@@ -98154,7 +98417,7 @@ index 5bb630a..043dc70 100644
return hit;
diff --git a/fs/coda/dir.c b/fs/coda/dir.c
-index 42e731b..2f87bc5 100644
+index 6fb8672..da34e6a 100644
--- a/fs/coda/dir.c
+++ b/fs/coda/dir.c
@@ -29,11 +29,10 @@
@@ -98170,7 +98433,7 @@ index 42e731b..2f87bc5 100644
/* inode operations for directories */
/* access routines: lookup, readlink, permission */
-@@ -562,7 +561,7 @@ const struct inode_operations coda_dir_inode_operations = {
+@@ -568,7 +567,7 @@ const struct inode_operations coda_dir_inode_operations = {
.symlink = coda_symlink,
.mkdir = coda_mkdir,
.rmdir = coda_rmdir,
@@ -98180,7 +98443,7 @@ index 42e731b..2f87bc5 100644
.permission = coda_permission,
.getattr = coda_getattr,
diff --git a/fs/compat.c b/fs/compat.c
-index a71936a..1659c19 100644
+index be6e48b..f7baebf 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -54,7 +54,7 @@
@@ -98255,8 +98518,8 @@ index a71936a..1659c19 100644
+
dirent = buf->previous;
if (dirent) {
- if (__put_user(offset, &dirent->d_off))
-@@ -979,6 +990,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd,
+ if (signal_pending(current))
+@@ -981,6 +992,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -98264,7 +98527,7 @@ index a71936a..1659c19 100644
error = iterate_dir(f.file, &buf.ctx);
if (error >= 0)
error = buf.error;
-@@ -999,6 +1011,7 @@ struct compat_getdents_callback64 {
+@@ -1001,6 +1013,7 @@ struct compat_getdents_callback64 {
struct dir_context ctx;
struct linux_dirent64 __user *current_dir;
struct linux_dirent64 __user *previous;
@@ -98272,7 +98535,7 @@ index a71936a..1659c19 100644
int count;
int error;
};
-@@ -1017,6 +1030,10 @@ static int compat_filldir64(struct dir_context *ctx, const char *name,
+@@ -1019,6 +1032,10 @@ static int compat_filldir64(struct dir_context *ctx, const char *name,
buf->error = -EINVAL; /* only used if we fail.. */
if (reclen > buf->count)
return -EINVAL;
@@ -98283,7 +98546,7 @@ index a71936a..1659c19 100644
dirent = buf->previous;
if (dirent) {
-@@ -1066,13 +1083,13 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd,
+@@ -1070,13 +1087,13 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -98299,7 +98562,7 @@ index a71936a..1659c19 100644
error = -EFAULT;
else
error = count - buf.count;
-@@ -1327,7 +1344,7 @@ COMPAT_SYSCALL_DEFINE5(select, int, n, compat_ulong_t __user *, inp,
+@@ -1331,7 +1348,7 @@ COMPAT_SYSCALL_DEFINE5(select, int, n, compat_ulong_t __user *, inp,
}
struct compat_sel_arg_struct {
@@ -98371,11 +98634,11 @@ index bd01b92..f6fcace 100644
return 1;
if (a < b)
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
-index ea59c89..568f279 100644
+index 56fb261..156ee82 100644
--- a/fs/configfs/dir.c
+++ b/fs/configfs/dir.c
-@@ -1639,7 +1639,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
- }
+@@ -1638,7 +1638,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
+ list_move(q, &parent_sd->s_children);
for (p = q->next; p != &parent_sd->s_children; p = p->next) {
struct configfs_dirent *next;
- const char *name;
@@ -98384,8 +98647,8 @@ index ea59c89..568f279 100644
int len;
struct inode *inode = NULL;
-@@ -1648,7 +1649,12 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
- continue;
+@@ -1669,7 +1670,12 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
+ ino = iunique(sb, 2);
name = configfs_get_name(next);
- len = strlen(name);
@@ -98396,13 +98659,13 @@ index ea59c89..568f279 100644
+ } else
+ len = strlen(name);
- /*
- * We'll have a dentry and an inode for
+ if (!dir_emit(ctx, name, len, ino, dt_type(next)))
+ return 0;
diff --git a/fs/coredump.c b/fs/coredump.c
-index 47c32c3..dc0e594 100644
+index 281b768..f39dcdf 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
-@@ -481,8 +481,8 @@ static void wait_for_dump_helpers(struct file *file)
+@@ -483,8 +483,8 @@ static void wait_for_dump_helpers(struct file *file)
struct pipe_inode_info *pipe = file->private_data;
pipe_lock(pipe);
@@ -98413,7 +98676,7 @@ index 47c32c3..dc0e594 100644
wake_up_interruptible_sync(&pipe->wait);
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
pipe_unlock(pipe);
-@@ -491,11 +491,11 @@ static void wait_for_dump_helpers(struct file *file)
+@@ -493,11 +493,11 @@ static void wait_for_dump_helpers(struct file *file)
* We actually want wait_event_freezable() but then we need
* to clear TIF_SIGPENDING and improve dump_interrupted().
*/
@@ -98428,7 +98691,7 @@ index 47c32c3..dc0e594 100644
pipe_unlock(pipe);
}
-@@ -542,7 +542,9 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -544,7 +544,9 @@ void do_coredump(const siginfo_t *siginfo)
/* require nonrelative corefile path and be extra careful */
bool need_suid_safe = false;
bool core_dumped = false;
@@ -98439,7 +98702,7 @@ index 47c32c3..dc0e594 100644
struct coredump_params cprm = {
.siginfo = siginfo,
.regs = signal_pt_regs(),
-@@ -555,12 +557,17 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -557,12 +559,17 @@ void do_coredump(const siginfo_t *siginfo)
.mm_flags = mm->flags,
};
@@ -98459,7 +98722,7 @@ index 47c32c3..dc0e594 100644
goto fail;
cred = prepare_creds();
-@@ -578,7 +585,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -580,7 +587,7 @@ void do_coredump(const siginfo_t *siginfo)
need_suid_safe = true;
}
@@ -98468,7 +98731,7 @@ index 47c32c3..dc0e594 100644
if (retval < 0)
goto fail_creds;
-@@ -621,7 +628,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -623,7 +630,7 @@ void do_coredump(const siginfo_t *siginfo)
}
cprm.limit = RLIM_INFINITY;
@@ -98477,7 +98740,7 @@ index 47c32c3..dc0e594 100644
if (core_pipe_limit && (core_pipe_limit < dump_count)) {
printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n",
task_tgid_vnr(current), current->comm);
-@@ -655,6 +662,8 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -657,6 +664,8 @@ void do_coredump(const siginfo_t *siginfo)
int open_flags = O_CREAT | O_RDWR | O_NOFOLLOW |
O_LARGEFILE | O_EXCL;
@@ -98486,7 +98749,7 @@ index 47c32c3..dc0e594 100644
if (cprm.limit < binfmt->min_coredump)
goto fail_unlock;
-@@ -680,7 +689,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -682,7 +691,7 @@ void do_coredump(const siginfo_t *siginfo)
* If it doesn't exist, that's fine. If there's some
* other problem, we'll catch it at the filp_open().
*/
@@ -98495,7 +98758,7 @@ index 47c32c3..dc0e594 100644
set_fs(old_fs);
}
-@@ -761,7 +770,7 @@ close_fail:
+@@ -763,7 +772,7 @@ close_fail:
filp_close(cprm.file, NULL);
fail_dropcount:
if (ispipe)
@@ -98504,7 +98767,7 @@ index 47c32c3..dc0e594 100644
fail_unlock:
kfree(cn.corename);
coredump_finish(mm, core_dumped);
-@@ -782,6 +791,8 @@ int dump_emit(struct coredump_params *cprm, const void *addr, int nr)
+@@ -784,6 +793,8 @@ int dump_emit(struct coredump_params *cprm, const void *addr, int nr)
struct file *file = cprm->file;
loff_t pos = file->f_pos;
ssize_t n;
@@ -98514,10 +98777,10 @@ index 47c32c3..dc0e594 100644
return 0;
while (nr) {
diff --git a/fs/dcache.c b/fs/dcache.c
-index 44008e3..c6ec6f3 100644
+index d6847d7..448382e 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
-@@ -328,8 +328,9 @@ static inline void dentry_rcuwalk_invalidate(struct dentry *dentry)
+@@ -339,8 +339,9 @@ static inline void dentry_rcuwalk_invalidate(struct dentry *dentry)
* and is unhashed.
*/
static void dentry_iput(struct dentry * dentry)
@@ -98529,7 +98792,7 @@ index 44008e3..c6ec6f3 100644
{
struct inode *inode = dentry->d_inode;
if (inode) {
-@@ -353,8 +354,9 @@ static void dentry_iput(struct dentry * dentry)
+@@ -364,8 +365,9 @@ static void dentry_iput(struct dentry * dentry)
* d_iput() operation if defined. dentry remains in-use.
*/
static void dentry_unlink_inode(struct dentry * dentry)
@@ -98541,7 +98804,7 @@ index 44008e3..c6ec6f3 100644
{
struct inode *inode = dentry->d_inode;
-@@ -534,7 +536,7 @@ static void __dentry_kill(struct dentry *dentry)
+@@ -578,7 +580,7 @@ static void __dentry_kill(struct dentry *dentry)
* dentry_iput drops the locks, at which point nobody (except
* transient RCU lookups) can reach this dentry.
*/
@@ -98550,7 +98813,7 @@ index 44008e3..c6ec6f3 100644
this_cpu_dec(nr_dentry);
if (dentry->d_op && dentry->d_op->d_release)
dentry->d_op->d_release(dentry);
-@@ -556,7 +558,8 @@ static void __dentry_kill(struct dentry *dentry)
+@@ -600,7 +602,8 @@ static void __dentry_kill(struct dentry *dentry)
* Returns dentry requiring refcount drop, or NULL if we're done.
*/
static struct dentry *dentry_kill(struct dentry *dentry)
@@ -98560,7 +98823,7 @@ index 44008e3..c6ec6f3 100644
{
struct inode *inode = dentry->d_inode;
struct dentry *parent = NULL;
-@@ -587,7 +590,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
+@@ -631,7 +634,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
struct dentry *parent = dentry->d_parent;
if (IS_ROOT(dentry))
return NULL;
@@ -98569,7 +98832,7 @@ index 44008e3..c6ec6f3 100644
return NULL;
if (likely(spin_trylock(&parent->d_lock)))
return parent;
-@@ -649,8 +652,8 @@ static inline bool fast_dput(struct dentry *dentry)
+@@ -693,8 +696,8 @@ static inline bool fast_dput(struct dentry *dentry)
*/
if (unlikely(ret < 0)) {
spin_lock(&dentry->d_lock);
@@ -98580,7 +98843,7 @@ index 44008e3..c6ec6f3 100644
spin_unlock(&dentry->d_lock);
return 1;
}
-@@ -705,7 +708,7 @@ static inline bool fast_dput(struct dentry *dentry)
+@@ -749,7 +752,7 @@ static inline bool fast_dput(struct dentry *dentry)
* else could have killed it and marked it dead. Either way, we
* don't need to do anything else.
*/
@@ -98589,7 +98852,7 @@ index 44008e3..c6ec6f3 100644
spin_unlock(&dentry->d_lock);
return 1;
}
-@@ -715,7 +718,7 @@ static inline bool fast_dput(struct dentry *dentry)
+@@ -759,7 +762,7 @@ static inline bool fast_dput(struct dentry *dentry)
* lock, and we just tested that it was zero, so we can just
* set it to 1.
*/
@@ -98598,7 +98861,7 @@ index 44008e3..c6ec6f3 100644
return 0;
}
-@@ -777,7 +780,7 @@ repeat:
+@@ -823,7 +826,7 @@ repeat:
dentry->d_flags |= DCACHE_REFERENCED;
dentry_lru_add(dentry);
@@ -98607,7 +98870,7 @@ index 44008e3..c6ec6f3 100644
spin_unlock(&dentry->d_lock);
return;
-@@ -792,7 +795,7 @@ EXPORT_SYMBOL(dput);
+@@ -838,7 +841,7 @@ EXPORT_SYMBOL(dput);
/* This must be called with d_lock held */
static inline void __dget_dlock(struct dentry *dentry)
{
@@ -98616,7 +98879,7 @@ index 44008e3..c6ec6f3 100644
}
static inline void __dget(struct dentry *dentry)
-@@ -833,8 +836,8 @@ repeat:
+@@ -879,8 +882,8 @@ repeat:
goto repeat;
}
rcu_read_unlock();
@@ -98627,7 +98890,7 @@ index 44008e3..c6ec6f3 100644
spin_unlock(&ret->d_lock);
return ret;
}
-@@ -912,9 +915,9 @@ restart:
+@@ -958,9 +961,9 @@ restart:
spin_lock(&inode->i_lock);
hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) {
spin_lock(&dentry->d_lock);
@@ -98639,7 +98902,7 @@ index 44008e3..c6ec6f3 100644
__dentry_kill(dentry);
dput(parent);
goto restart;
-@@ -949,7 +952,7 @@ static void shrink_dentry_list(struct list_head *list)
+@@ -995,7 +998,7 @@ static void shrink_dentry_list(struct list_head *list)
* We found an inuse dentry which was not removed from
* the LRU because of laziness during lookup. Do not free it.
*/
@@ -98648,7 +98911,7 @@ index 44008e3..c6ec6f3 100644
spin_unlock(&dentry->d_lock);
if (parent)
spin_unlock(&parent->d_lock);
-@@ -987,8 +990,8 @@ static void shrink_dentry_list(struct list_head *list)
+@@ -1033,8 +1036,8 @@ static void shrink_dentry_list(struct list_head *list)
dentry = parent;
while (dentry && !lockref_put_or_lock(&dentry->d_lockref)) {
parent = lock_parent(dentry);
@@ -98659,7 +98922,7 @@ index 44008e3..c6ec6f3 100644
spin_unlock(&dentry->d_lock);
if (parent)
spin_unlock(&parent->d_lock);
-@@ -1028,7 +1031,7 @@ static enum lru_status dentry_lru_isolate(struct list_head *item,
+@@ -1074,7 +1077,7 @@ static enum lru_status dentry_lru_isolate(struct list_head *item,
* counts, just remove them from the LRU. Otherwise give them
* another pass through the LRU.
*/
@@ -98668,7 +98931,7 @@ index 44008e3..c6ec6f3 100644
d_lru_isolate(lru, dentry);
spin_unlock(&dentry->d_lock);
return LRU_REMOVED;
-@@ -1362,7 +1365,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry)
+@@ -1411,7 +1414,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry)
} else {
if (dentry->d_flags & DCACHE_LRU_LIST)
d_lru_del(dentry);
@@ -98677,7 +98940,7 @@ index 44008e3..c6ec6f3 100644
d_shrink_add(dentry, &data->dispose);
data->found++;
}
-@@ -1410,7 +1413,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
+@@ -1459,7 +1462,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
return D_WALK_CONTINUE;
/* root with refcount 1 is fine */
@@ -98686,7 +98949,7 @@ index 44008e3..c6ec6f3 100644
return D_WALK_CONTINUE;
printk(KERN_ERR "BUG: Dentry %p{i=%lx,n=%pd} "
-@@ -1419,7 +1422,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
+@@ -1468,7 +1471,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
dentry->d_inode ?
dentry->d_inode->i_ino : 0UL,
dentry,
@@ -98695,16 +98958,16 @@ index 44008e3..c6ec6f3 100644
dentry->d_sb->s_type->name,
dentry->d_sb->s_id);
WARN_ON(1);
-@@ -1560,7 +1563,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
- dentry->d_iname[DNAME_INLINE_LEN-1] = 0;
- if (name->len > DNAME_INLINE_LEN-1) {
+@@ -1613,7 +1616,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+ dname = dentry->d_iname;
+ } else if (name->len > DNAME_INLINE_LEN-1) {
size_t size = offsetof(struct external_name, name[1]);
- struct external_name *p = kmalloc(size + name->len,
+ struct external_name *p = kmalloc(round_up(size + name->len, sizeof(unsigned long)),
GFP_KERNEL_ACCOUNT);
if (!p) {
kmem_cache_free(dentry_cache, dentry);
-@@ -1584,7 +1587,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1637,7 +1640,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
smp_wmb();
dentry->d_name.name = dname;
@@ -98713,7 +98976,7 @@ index 44008e3..c6ec6f3 100644
dentry->d_flags = 0;
spin_lock_init(&dentry->d_lock);
seqcount_init(&dentry->d_seq);
-@@ -1593,6 +1596,9 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1646,6 +1649,9 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
dentry->d_sb = sb;
dentry->d_op = NULL;
dentry->d_fsdata = NULL;
@@ -98723,7 +98986,7 @@ index 44008e3..c6ec6f3 100644
INIT_HLIST_BL_NODE(&dentry->d_hash);
INIT_LIST_HEAD(&dentry->d_lru);
INIT_LIST_HEAD(&dentry->d_subdirs);
-@@ -2245,7 +2251,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
+@@ -2311,7 +2317,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
goto next;
}
@@ -98732,7 +98995,7 @@ index 44008e3..c6ec6f3 100644
found = dentry;
spin_unlock(&dentry->d_lock);
break;
-@@ -2313,7 +2319,7 @@ again:
+@@ -2379,7 +2385,7 @@ again:
spin_lock(&dentry->d_lock);
inode = dentry->d_inode;
isdir = S_ISDIR(inode->i_mode);
@@ -98741,7 +99004,7 @@ index 44008e3..c6ec6f3 100644
if (!spin_trylock(&inode->i_lock)) {
spin_unlock(&dentry->d_lock);
cpu_relax();
-@@ -3336,7 +3342,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry)
+@@ -3598,7 +3604,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;
@@ -98750,7 +99013,7 @@ index 44008e3..c6ec6f3 100644
}
}
return D_WALK_CONTINUE;
-@@ -3444,7 +3450,8 @@ void __init vfs_caches_init_early(void)
+@@ -3706,7 +3712,8 @@ void __init vfs_caches_init_early(void)
void __init vfs_caches_init(void)
{
names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0,
@@ -98760,11 +99023,33 @@ index 44008e3..c6ec6f3 100644
dcache_init();
inode_init();
+diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c
+index 592059f..8faaef38 100644
+--- a/fs/debugfs/file.c
++++ b/fs/debugfs/file.c
+@@ -212,7 +212,7 @@ static int full_proxy_release(struct inode *inode, struct file *filp)
+ return 0;
+ }
+
+-static void __full_proxy_fops_init(struct file_operations *proxy_fops,
++static void __full_proxy_fops_init(file_operations_no_const *proxy_fops,
+ const struct file_operations *real_fops)
+ {
+ proxy_fops->release = full_proxy_release;
+@@ -232,7 +232,7 @@ static int full_proxy_open(struct inode *inode, struct file *filp)
+ {
+ const struct dentry *dentry = F_DENTRY(filp);
+ const struct file_operations *real_fops = NULL;
+- struct file_operations *proxy_fops = NULL;
++ file_operations_no_const *proxy_fops = NULL;
+ int srcu_idx, r;
+
+ r = debugfs_use_file_start(dentry, &srcu_idx);
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
-index 8580831..36166e5 100644
+index 4bc1f68..8815afb 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
-@@ -247,6 +247,10 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
+@@ -253,6 +253,10 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
struct dentry *dentry;
int error;
@@ -98775,7 +99060,7 @@ index 8580831..36166e5 100644
pr_debug("debugfs: creating file '%s'\n",name);
if (IS_ERR(parent))
-@@ -406,6 +410,10 @@ EXPORT_SYMBOL_GPL(debugfs_create_file_size);
+@@ -466,6 +470,10 @@ EXPORT_SYMBOL_GPL(debugfs_create_file_size);
* If debugfs is not enabled in the kernel, the value -%ENODEV will be
* returned.
*/
@@ -98786,7 +99071,7 @@ index 8580831..36166e5 100644
struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
{
struct dentry *dentry = start_creating(name, parent);
-@@ -418,7 +426,12 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
+@@ -478,7 +486,12 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
if (unlikely(!inode))
return failed_creating(dentry);
@@ -98800,7 +99085,7 @@ index 8580831..36166e5 100644
inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &simple_dir_operations;
-@@ -721,6 +734,10 @@ static int __init debugfs_init(void)
+@@ -789,6 +802,10 @@ static int __init debugfs_init(void)
{
int retval;
@@ -98811,44 +99096,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 f024040..27794b1 100644
---- a/fs/ecryptfs/file.c
-+++ b/fs/ecryptfs/file.c
-@@ -169,6 +169,19 @@ out:
- return rc;
- }
-
-+static int ecryptfs_mmap(struct file *file, struct vm_area_struct *vma)
-+{
-+ struct file *lower_file = ecryptfs_file_to_lower(file);
-+ /*
-+ * Don't allow mmap on top of file systems that don't support it
-+ * natively. If FILESYSTEM_MAX_STACK_DEPTH > 2 or ecryptfs
-+ * allows recursive mounting, this will need to be extended.
-+ */
-+ if (!lower_file->f_op->mmap)
-+ return -ENODEV;
-+ return generic_file_mmap(file, vma);
-+}
-+
- /**
- * ecryptfs_open
- * @inode: inode speciying file to open
-@@ -403,7 +416,7 @@ const struct file_operations ecryptfs_main_fops = {
- #ifdef CONFIG_COMPAT
- .compat_ioctl = ecryptfs_compat_ioctl,
- #endif
-- .mmap = generic_file_mmap,
-+ .mmap = ecryptfs_mmap,
- .open = ecryptfs_open,
- .flush = ecryptfs_flush,
- .release = ecryptfs_release,
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
-index 224b49e..980370c 100644
+index 9d153b6..60baa46 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
-@@ -654,7 +654,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz)
+@@ -639,7 +639,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,
@@ -98871,7 +99123,7 @@ 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 c4010b8..a64ddfb 100644
+index 887c1c9..bb6f3604 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -57,8 +57,20 @@
@@ -98986,7 +99238,7 @@ index c4010b8..a64ddfb 100644
/*
* Limit to 1/4-th the stack size for the argv+env strings.
* This ensures that:
-@@ -280,6 +311,11 @@ static int __bprm_mm_init(struct linux_binprm *bprm)
+@@ -279,6 +310,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;
@@ -98998,7 +99250,7 @@ index c4010b8..a64ddfb 100644
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
INIT_LIST_HEAD(&vma->anon_vma_chain);
-@@ -291,6 +327,12 @@ static int __bprm_mm_init(struct linux_binprm *bprm)
+@@ -290,6 +326,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 *);
@@ -99108,11 +99360,10 @@ index c4010b8..a64ddfb 100644
#endif
if (bprm->loader)
-@@ -701,8 +744,28 @@ int setup_arg_pages(struct linux_binprm *bprm,
- bprm->exec -= stack_shift;
+@@ -703,8 +746,27 @@ int setup_arg_pages(struct linux_binprm *bprm,
+ if (down_write_killable(&mm->mmap_sem))
+ return -EINTR;
- down_write(&mm->mmap_sem);
-+
+ /* Move stack pages down in memory. */
+ if (stack_shift) {
+ ret = shift_arg_pages(vma, stack_shift);
@@ -99137,7 +99388,7 @@ index c4010b8..a64ddfb 100644
/*
* Adjust stack execute permissions; explicitly enable for
* EXSTACK_ENABLE_X, disable for EXSTACK_DISABLE_X and leave alone
-@@ -721,13 +784,6 @@ int setup_arg_pages(struct linux_binprm *bprm,
+@@ -723,13 +785,6 @@ int setup_arg_pages(struct linux_binprm *bprm,
goto out_unlock;
BUG_ON(prev != vma);
@@ -99151,7 +99402,7 @@ index c4010b8..a64ddfb 100644
/* mprotect_fixup is overkill to remove the temporary stack flags */
vma->vm_flags &= ~VM_STACK_INCOMPLETE_SETUP;
-@@ -751,6 +807,27 @@ int setup_arg_pages(struct linux_binprm *bprm,
+@@ -753,6 +808,27 @@ int setup_arg_pages(struct linux_binprm *bprm,
#endif
current->mm->start_stack = bprm->p;
ret = expand_stack(vma, stack_base);
@@ -99179,7 +99430,7 @@ index c4010b8..a64ddfb 100644
if (ret)
ret = -EFAULT;
-@@ -766,6 +843,7 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
+@@ -768,6 +844,7 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
{
struct file *file;
int err;
@@ -99187,7 +99438,7 @@ index c4010b8..a64ddfb 100644
struct open_flags open_exec_flags = {
.open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC,
.acc_mode = MAY_EXEC,
-@@ -791,12 +869,22 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
+@@ -793,12 +870,22 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
if (path_noexec(&file->f_path))
goto exit;
@@ -99211,7 +99462,7 @@ index c4010b8..a64ddfb 100644
out:
return file;
-@@ -826,10 +914,13 @@ int kernel_read(struct file *file, loff_t offset,
+@@ -828,10 +915,13 @@ int kernel_read(struct file *file, loff_t offset,
loff_t pos = offset;
int result;
@@ -99226,7 +99477,7 @@ index c4010b8..a64ddfb 100644
set_fs(old_fs);
return result;
}
-@@ -1373,7 +1464,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm)
+@@ -1388,7 +1478,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm)
}
rcu_read_unlock();
@@ -99235,7 +99486,7 @@ index c4010b8..a64ddfb 100644
bprm->unsafe |= LSM_UNSAFE_SHARE;
else
p->fs->in_exec = 1;
-@@ -1574,6 +1665,31 @@ static int exec_binprm(struct linux_binprm *bprm)
+@@ -1591,6 +1681,31 @@ static int exec_binprm(struct linux_binprm *bprm)
return ret;
}
@@ -99267,7 +99518,7 @@ index c4010b8..a64ddfb 100644
/*
* sys_execve() executes a new program.
*/
-@@ -1582,6 +1698,11 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1599,6 +1714,11 @@ static int do_execveat_common(int fd, struct filename *filename,
struct user_arg_ptr envp,
int flags)
{
@@ -99279,7 +99530,7 @@ index c4010b8..a64ddfb 100644
char *pathbuf = NULL;
struct linux_binprm *bprm;
struct file *file;
-@@ -1591,6 +1712,8 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1608,6 +1728,8 @@ static int do_execveat_common(int fd, struct filename *filename,
if (IS_ERR(filename))
return PTR_ERR(filename);
@@ -99288,7 +99539,7 @@ index c4010b8..a64ddfb 100644
/*
* We move the actual failure in case of RLIMIT_NPROC excess from
* set*uid() to execve() because too many poorly written programs
-@@ -1654,6 +1777,11 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1671,6 +1793,11 @@ static int do_execveat_common(int fd, struct filename *filename,
}
bprm->interp = bprm->filename;
@@ -99300,7 +99551,7 @@ index c4010b8..a64ddfb 100644
retval = bprm_mm_init(bprm);
if (retval)
goto out_unmark;
-@@ -1670,24 +1798,70 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1687,24 +1814,70 @@ static int do_execveat_common(int fd, struct filename *filename,
if (retval < 0)
goto out;
@@ -99375,7 +99626,7 @@ index c4010b8..a64ddfb 100644
current->fs->in_exec = 0;
current->in_execve = 0;
acct_update_integrals(current);
-@@ -1699,6 +1873,14 @@ static int do_execveat_common(int fd, struct filename *filename,
+@@ -1716,6 +1889,14 @@ static int do_execveat_common(int fd, struct filename *filename,
put_files_struct(displaced);
return retval;
@@ -99390,7 +99641,7 @@ index c4010b8..a64ddfb 100644
out:
if (bprm->mm) {
acct_arg_size(bprm, 0);
-@@ -1845,3 +2027,316 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd,
+@@ -1862,3 +2043,316 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd,
argv, envp, flags);
}
#endif
@@ -99708,7 +99959,7 @@ index c4010b8..a64ddfb 100644
+EXPORT_SYMBOL(report_size_overflow);
+#endif
diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c
-index 49e1bd0..41978bb 100644
+index 9dc4c6d..ed7c0e7 100644
--- a/fs/exofs/inode.c
+++ b/fs/exofs/inode.c
@@ -470,6 +470,11 @@ fail:
@@ -99750,7 +100001,7 @@ index 9f9992b..8b59411 100644
}
return 1;
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
-index b78caf2..b568bde 100644
+index 1d93795..77dd5a4 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -273,10 +273,8 @@ static int ext2_show_options(struct seq_file *seq, struct dentry *root)
@@ -99802,7 +100053,7 @@ index 1a5e3bf..3229306 100644
cleanup:
brelse(bh);
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
-index fe1f50f..3f4c870 100644
+index 3020fd7..6f1b8a2 100644
--- a/fs/ext4/balloc.c
+++ b/fs/ext4/balloc.c
@@ -563,8 +563,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi,
@@ -99817,10 +100068,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 349afeb..904541a 100644
+index b84aa1c..36fd3b0 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
-@@ -1441,19 +1441,19 @@ struct ext4_sb_info {
+@@ -1445,19 +1445,19 @@ struct ext4_sb_info {
unsigned long s_mb_last_start;
/* stats for buddy allocator */
@@ -99851,10 +100102,10 @@ index 349afeb..904541a 100644
/* locality groups */
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
-index 95bf467..d9294fc 100644
+index 2a2eef9..f37183d 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,
+@@ -868,7 +868,7 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block,
struct ext4_extent_header *eh;
struct buffer_head *bh;
struct ext4_ext_path *path = orig_path ? *orig_path : NULL;
@@ -99864,7 +100115,7 @@ index 95bf467..d9294fc 100644
eh = ext_inode_hdr(inode);
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
-index 9d26fa2..169a7b1 100644
+index c1ab3ec..d5064c9 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -1921,7 +1921,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac,
@@ -99981,7 +100232,7 @@ index 9d26fa2..169a7b1 100644
return 0;
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
-index 34038e3..322fe62 100644
+index cf68100..f96c5c0 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -413,7 +413,7 @@ static int set_flexbg_block_bitmap(struct super_block *sb, handle_t *handle,
@@ -100023,10 +100274,10 @@ 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 304c712..2c8f9bd 100644
+index 3822a5a..de73791 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
-@@ -1306,7 +1306,7 @@ static ext4_fsblk_t get_sb_block(void **data)
+@@ -1307,7 +1307,7 @@ static ext4_fsblk_t get_sb_block(void **data)
}
#define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
@@ -100073,6 +100324,44 @@ index e79bd32..769b6b3 100644
}
static int
+diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
+index 916e7c2..9ffb088 100644
+--- a/fs/f2fs/f2fs.h
++++ b/fs/f2fs/f2fs.h
+@@ -49,7 +49,7 @@ enum {
+ };
+
+ struct f2fs_fault_info {
+- atomic_t inject_ops;
++ atomic_unchecked_t inject_ops;
+ unsigned int inject_rate;
+ unsigned int inject_type;
+ };
+@@ -75,9 +75,8 @@ static inline bool time_to_inject(int type)
+ else if (type == FAULT_DIR_DEPTH && !IS_FAULT_SET(type))
+ return false;
+
+- atomic_inc(&f2fs_fault.inject_ops);
+- if (atomic_read(&f2fs_fault.inject_ops) >= f2fs_fault.inject_rate) {
+- atomic_set(&f2fs_fault.inject_ops, 0);
++ if (atomic_inc_return_unchecked(&f2fs_fault.inject_ops) >= f2fs_fault.inject_rate) {
++ atomic_set_unchecked(&f2fs_fault.inject_ops, 0);
+ printk("%sF2FS-fs : inject %s in %pF\n",
+ KERN_INFO,
+ fault_name[type],
+diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
+index 74cc852..5d5d8b9 100644
+--- a/fs/f2fs/super.c
++++ b/fs/f2fs/super.c
+@@ -54,7 +54,7 @@ char *fault_name[FAULT_MAX] = {
+ static void f2fs_build_fault_attr(unsigned int rate)
+ {
+ if (rate) {
+- atomic_set(&f2fs_fault.inject_ops, 0);
++ atomic_set_unchecked(&f2fs_fault.inject_ops, 0);
+ f2fs_fault.inject_rate = rate;
+ f2fs_fault.inject_type = (1 << FAULT_MAX) - 1;
+ } else {
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 350a2c8..9fb9bf7 100644
--- a/fs/fcntl.c
@@ -100129,7 +100418,7 @@ index ca3c3dd..0c5456e 100644
retval = -EFAULT;
goto out_handle;
diff --git a/fs/file.c b/fs/file.c
-index 1fbc5c0..7cfb36d 100644
+index 6b1acdf..b908eba 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -16,6 +16,7 @@
@@ -100168,7 +100457,7 @@ index 1fbc5c0..7cfb36d 100644
{
struct fdtable *fdt;
int expanded = 0;
-@@ -817,7 +820,9 @@ bool get_close_on_exec(unsigned int fd)
+@@ -822,7 +825,9 @@ bool get_close_on_exec(unsigned int fd)
static int do_dup2(struct files_struct *files,
struct file *file, unsigned fd, unsigned flags)
@@ -100179,7 +100468,7 @@ index 1fbc5c0..7cfb36d 100644
{
struct file *tofree;
struct fdtable *fdt;
-@@ -867,6 +872,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
+@@ -872,6 +877,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
if (!file)
return __close_fd(files, fd);
@@ -100187,7 +100476,7 @@ index 1fbc5c0..7cfb36d 100644
if (fd >= rlimit(RLIMIT_NOFILE))
return -EBADF;
-@@ -893,6 +899,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
+@@ -898,6 +904,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
if (unlikely(oldfd == newfd))
return -EINVAL;
@@ -100195,7 +100484,7 @@ index 1fbc5c0..7cfb36d 100644
if (newfd >= rlimit(RLIMIT_NOFILE))
return -EBADF;
-@@ -948,6 +955,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
+@@ -953,6 +960,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
int f_dupfd(unsigned int from, struct file *file, unsigned flags)
{
int err;
@@ -100275,7 +100564,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 592cea5..a93fb5c 100644
+index fe7e83a..6e42cdc 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -880,9 +880,9 @@ fs_initcall(cgroup_writeback_init);
@@ -100300,7 +100589,7 @@ index 592cea5..a93fb5c 100644
{
struct bdi_writeback *wb = inode_to_wb(inode);
-@@ -1136,9 +1136,8 @@ static int write_inode(struct inode *inode, struct writeback_control *wbc)
+@@ -1137,9 +1137,8 @@ static int write_inode(struct inode *inode, struct writeback_control *wbc)
* Wait for writeback on an inode to complete. Called with i_lock held.
* Caller must make sure inode cannot go away when we drop i_lock.
*/
@@ -100311,7 +100600,7 @@ index 592cea5..a93fb5c 100644
{
DEFINE_WAIT_BIT(wq, &inode->i_state, __I_SYNC);
wait_queue_head_t *wqh;
-@@ -1167,8 +1166,8 @@ void inode_wait_for_writeback(struct inode *inode)
+@@ -1168,8 +1167,8 @@ void inode_wait_for_writeback(struct inode *inode)
* held and drops it. It is aimed for callers not holding any inode reference
* so once i_lock is dropped, inode can go away.
*/
@@ -101077,7 +101366,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 3078b67..0c0e3c6 100644
+index c8c4f79..0512aeb 100644
--- a/fs/fscache/page.c
+++ b/fs/fscache/page.c
@@ -74,7 +74,7 @@ try_again:
@@ -101395,7 +101684,7 @@ index 3078b67..0c0e3c6 100644
fscache_stat(&fscache_n_cop_write_page);
ret = object->cache->ops->write_page(op, page);
fscache_stat_d(&fscache_n_cop_write_page);
-@@ -933,7 +933,7 @@ int __fscache_write_page(struct fscache_cookie *cookie,
+@@ -935,7 +935,7 @@ int __fscache_write_page(struct fscache_cookie *cookie,
ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
ASSERT(PageFsCache(page));
@@ -101404,7 +101693,7 @@ index 3078b67..0c0e3c6 100644
if (test_bit(FSCACHE_COOKIE_INVALIDATING, &cookie->flags)) {
_leave(" = -ENOBUFS [invalidating]");
-@@ -992,7 +992,7 @@ int __fscache_write_page(struct fscache_cookie *cookie,
+@@ -994,7 +994,7 @@ int __fscache_write_page(struct fscache_cookie *cookie,
spin_unlock(&cookie->stores_lock);
spin_unlock(&object->lock);
@@ -101413,7 +101702,7 @@ index 3078b67..0c0e3c6 100644
op->store_limit = object->store_limit;
__fscache_use_cookie(cookie);
-@@ -1001,8 +1001,8 @@ int __fscache_write_page(struct fscache_cookie *cookie,
+@@ -1003,8 +1003,8 @@ int __fscache_write_page(struct fscache_cookie *cookie,
spin_unlock(&cookie->lock);
radix_tree_preload_end();
@@ -101424,7 +101713,7 @@ index 3078b67..0c0e3c6 100644
/* the work queue now carries its own ref on the object */
fscache_put_operation(&op->op);
-@@ -1010,14 +1010,14 @@ int __fscache_write_page(struct fscache_cookie *cookie,
+@@ -1012,14 +1012,14 @@ int __fscache_write_page(struct fscache_cookie *cookie,
return 0;
already_queued:
@@ -101441,7 +101730,7 @@ index 3078b67..0c0e3c6 100644
_leave(" = 0");
return 0;
-@@ -1039,14 +1039,14 @@ nobufs:
+@@ -1041,14 +1041,14 @@ nobufs:
fscache_put_operation(&op->op);
if (wake_cookie)
__fscache_wake_unused_cookie(cookie);
@@ -101458,7 +101747,7 @@ index 3078b67..0c0e3c6 100644
_leave(" = -ENOMEM");
return -ENOMEM;
}
-@@ -1064,7 +1064,7 @@ void __fscache_uncache_page(struct fscache_cookie *cookie, struct page *page)
+@@ -1066,7 +1066,7 @@ void __fscache_uncache_page(struct fscache_cookie *cookie, struct page *page)
ASSERTCMP(cookie->def->type, !=, FSCACHE_COOKIE_TYPE_INDEX);
ASSERTCMP(page, !=, NULL);
@@ -101467,7 +101756,7 @@ index 3078b67..0c0e3c6 100644
/* cache withdrawal may beat us to it */
if (!PageFsCache(page))
-@@ -1115,7 +1115,7 @@ void fscache_mark_page_cached(struct fscache_retrieval *op, struct page *page)
+@@ -1117,7 +1117,7 @@ void fscache_mark_page_cached(struct fscache_retrieval *op, struct page *page)
struct fscache_cookie *cookie = op->op.object->cookie;
#ifdef CONFIG_FSCACHE_STATS
@@ -101906,7 +102195,7 @@ index cbece12..9b01171 100644
}
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
-index dcad5e2..562be95 100644
+index 9154f86..d653e02 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -825,9 +825,9 @@ struct fuse_fill_data {
@@ -101922,7 +102211,7 @@ index dcad5e2..562be95 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 1ce6766..16c31cb 100644
+index 9961d843..e3981b0 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -29,7 +29,7 @@ static struct kmem_cache *fuse_inode_cachep;
@@ -101934,7 +102223,7 @@ index 1ce6766..16c31cb 100644
unsigned max_user_bgreq;
module_param_call(max_user_bgreq, set_global_limit, param_get_uint,
-@@ -814,7 +814,7 @@ static void sanitize_global_limit(unsigned *limit)
+@@ -828,7 +828,7 @@ static void sanitize_global_limit(unsigned *limit)
*limit = (1 << 16) - 1;
}
@@ -101944,7 +102233,7 @@ index 1ce6766..16c31cb 100644
int rv;
diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
-index 1bbbee9..d085f3f 100644
+index 37b7bc1..7e33492 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)
@@ -101957,10 +102246,10 @@ index 1bbbee9..d085f3f 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 208efc7..a6de70f 100644
+index e0f98e4..8772e3a 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,
+@@ -776,7 +776,7 @@ static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len,
{
loff_t max = *len;
const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
@@ -101970,7 +102259,7 @@ index 208efc7..a6de70f 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 6539131..09e2dce 100644
+index 706fd93..9325aff 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)
@@ -101985,7 +102274,7 @@ index 6539131..09e2dce 100644
}
if (held1 && held2 && list_empty(&gl->gl_holders))
clear_bit(GLF_QUEUED, &gl->gl_flags);
-@@ -553,9 +553,9 @@ out:
+@@ -560,9 +560,9 @@ out:
out_sched:
clear_bit(GLF_LOCK, &gl->gl_flags);
smp_mb__after_atomic();
@@ -101997,7 +102286,7 @@ index 6539131..09e2dce 100644
return;
out_unlock:
-@@ -690,7 +690,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
+@@ -697,7 +697,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
gl->gl_node.next = NULL;
gl->gl_flags = 0;
gl->gl_name = name;
@@ -102006,7 +102295,7 @@ index 6539131..09e2dce 100644
gl->gl_state = LM_ST_UNLOCKED;
gl->gl_target = LM_ST_UNLOCKED;
gl->gl_demote_state = LM_ST_EXCLUSIVE;
-@@ -979,9 +979,9 @@ int gfs2_glock_nq(struct gfs2_holder *gh)
+@@ -986,9 +986,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);
@@ -102018,7 +102307,7 @@ index 6539131..09e2dce 100644
}
run_queue(gl, 1);
spin_unlock(&gl->gl_lockref.lock);
-@@ -1286,7 +1286,7 @@ void gfs2_glock_complete(struct gfs2_glock *gl, int ret)
+@@ -1293,7 +1293,7 @@ void gfs2_glock_complete(struct gfs2_glock *gl, int ret)
}
}
@@ -102027,7 +102316,7 @@ index 6539131..09e2dce 100644
set_bit(GLF_REPLY_PENDING, &gl->gl_flags);
spin_unlock(&gl->gl_lockref.lock);
-@@ -1345,12 +1345,12 @@ add_back_to_lru:
+@@ -1352,12 +1352,12 @@ add_back_to_lru:
goto add_back_to_lru;
}
clear_bit(GLF_LRU, &gl->gl_flags);
@@ -102042,7 +102331,7 @@ index 6539131..09e2dce 100644
spin_unlock(&gl->gl_lockref.lock);
cond_resched_lock(&lru_lock);
}
-@@ -1677,7 +1677,7 @@ void gfs2_dump_glock(struct seq_file *seq, const struct gfs2_glock *gl)
+@@ -1684,7 +1684,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),
@@ -102052,10 +102341,10 @@ index 6539131..09e2dce 100644
list_for_each_entry(gh, &gl->gl_holders, gh_list)
dump_holder(seq, gh);
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
-index 437fd73..4f85148 100644
+index 5db59d4..817f4eb 100644
--- a/fs/gfs2/glops.c
+++ b/fs/gfs2/glops.c
-@@ -556,9 +556,9 @@ static void iopen_go_callback(struct gfs2_glock *gl, bool remote)
+@@ -549,9 +549,9 @@ static void iopen_go_callback(struct gfs2_glock *gl, bool remote)
if (gl->gl_demote_state == LM_ST_UNLOCKED &&
gl->gl_state == LM_ST_SHARED && ip) {
@@ -102149,10 +102438,10 @@ index 4ea71eb..19effa7 100644
static int can_do_hugetlb_shm(void)
{
diff --git a/fs/inode.c b/fs/inode.c
-index 69b8b52..9b58c2d 100644
+index 4ccbc21..2a84b51 100644
--- a/fs/inode.c
+++ b/fs/inode.c
-@@ -850,19 +850,19 @@ unsigned int get_next_ino(void)
+@@ -851,19 +851,19 @@ unsigned int get_next_ino(void)
unsigned int *p = &get_cpu_var(last_ino);
unsigned int res = *p;
@@ -102191,10 +102480,10 @@ index 116a333..0f56deb 100644
if (ret)
goto out;
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
-index 2ad98d6..00f8858 100644
+index 7007809..8b69fb9 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
-@@ -1073,7 +1073,7 @@ restart_loop:
+@@ -1077,7 +1077,7 @@ restart_loop:
*/
stats.ts_tid = commit_transaction->t_tid;
stats.run.rs_handle_count =
@@ -102204,7 +102493,7 @@ index 2ad98d6..00f8858 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 67c1038..adcb8e3 100644
+index 1749519..d7b5daf 100644
--- a/fs/jbd2/transaction.c
+++ b/fs/jbd2/transaction.c
@@ -91,7 +91,7 @@ jbd2_get_transaction(journal_t *journal, transaction_t *transaction)
@@ -102304,7 +102593,7 @@ index b25d28a..7934a69 100644
/*
diff --git a/fs/jfs/super.c b/fs/jfs/super.c
-index 78d5991..73ba3e4 100644
+index cec8814..e554192 100644
--- a/fs/jfs/super.c
+++ b/fs/jfs/super.c
@@ -898,7 +898,7 @@ static int __init init_jfs_fs(void)
@@ -102317,7 +102606,7 @@ index 78d5991..73ba3e4 100644
if (jfs_inode_cachep == NULL)
return -ENOMEM;
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
-index 37f9678..e2528dc 100644
+index 8a65240..59ccf62 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -334,7 +334,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn)
@@ -102329,7 +102618,7 @@ index 37f9678..e2528dc 100644
{
unsigned long hash = init_name_hash();
unsigned int len = strlen(name);
-@@ -1073,6 +1073,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry,
+@@ -1074,6 +1074,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);
@@ -102343,7 +102632,7 @@ index 37f9678..e2528dc 100644
}
diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c
-index 7247252..c73808e 100644
+index e157400..1b16643 100644
--- a/fs/kernfs/file.c
+++ b/fs/kernfs/file.c
@@ -34,7 +34,7 @@ static DEFINE_MUTEX(kernfs_open_file_mutex);
@@ -102364,7 +102653,7 @@ index 7247252..c73808e 100644
return of->kn->attr.ops->seq_show(sf, v);
}
-@@ -207,7 +207,7 @@ static ssize_t kernfs_file_direct_read(struct kernfs_open_file *of,
+@@ -208,7 +208,7 @@ static ssize_t kernfs_file_direct_read(struct kernfs_open_file *of,
goto out_free;
}
@@ -102373,7 +102662,7 @@ index 7247252..c73808e 100644
ops = kernfs_ops(of->kn);
if (ops->read)
len = ops->read(of, buf, len, *ppos);
-@@ -272,7 +272,7 @@ static ssize_t kernfs_fop_write(struct file *file, const char __user *user_buf,
+@@ -275,7 +275,7 @@ static ssize_t kernfs_fop_write(struct file *file, const char __user *user_buf,
{
struct kernfs_open_file *of = kernfs_of(file);
const struct kernfs_ops *ops;
@@ -102382,7 +102671,7 @@ index 7247252..c73808e 100644
char *buf;
if (of->atomic_write_len) {
-@@ -385,12 +385,12 @@ static int kernfs_vma_page_mkwrite(struct vm_area_struct *vma,
+@@ -391,12 +391,12 @@ static int kernfs_vma_page_mkwrite(struct vm_area_struct *vma,
return ret;
}
@@ -102398,7 +102687,7 @@ index 7247252..c73808e 100644
if (!of->vm_ops)
return -EINVAL;
-@@ -569,7 +569,7 @@ static int kernfs_get_open_node(struct kernfs_node *kn,
+@@ -575,7 +575,7 @@ static int kernfs_get_open_node(struct kernfs_node *kn,
return -ENOMEM;
atomic_set(&new_on->refcnt, 0);
@@ -102407,7 +102696,7 @@ index 7247252..c73808e 100644
init_waitqueue_head(&new_on->poll);
INIT_LIST_HEAD(&new_on->files);
goto retry;
-@@ -792,7 +792,7 @@ static unsigned int kernfs_fop_poll(struct file *filp, poll_table *wait)
+@@ -799,7 +799,7 @@ static unsigned int kernfs_fop_poll(struct file *filp, poll_table *wait)
kernfs_put_active(kn);
@@ -102416,7 +102705,7 @@ index 7247252..c73808e 100644
goto trigger;
return DEFAULT_POLLMASK;
-@@ -823,7 +823,7 @@ repeat:
+@@ -830,7 +830,7 @@ repeat:
on = kn->attr.open;
if (on) {
@@ -102426,24 +102715,17 @@ index 7247252..c73808e 100644
}
diff --git a/fs/libfs.c b/fs/libfs.c
-index f3fa82c..b316fbf 100644
+index 74dc8b9..45e1cf4 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
-@@ -155,6 +155,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
-
- for (p = q->next; p != &dentry->d_subdirs; p = p->next) {
- struct dentry *next = list_entry(p, struct dentry, d_child);
+@@ -194,7 +194,15 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
+ if (ctx->pos == 2)
+ p = &dentry->d_subdirs;
+ while ((next = next_positive(dentry, p, 1)) != NULL) {
+- if (!dir_emit(ctx, next->d_name.name, next->d_name.len,
+ char d_name[sizeof(next->d_iname)];
+ const unsigned char *name;
+
- spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
- if (!simple_positive(next)) {
- spin_unlock(&next->d_lock);
-@@ -163,7 +166,12 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
-
- spin_unlock(&next->d_lock);
- spin_unlock(&dentry->d_lock);
-- if (!dir_emit(ctx, next->d_name.name, next->d_name.len,
+ name = next->d_name.name;
+ if (name == next->d_iname) {
+ memcpy(d_name, name, next->d_name.len);
@@ -102451,8 +102733,8 @@ index f3fa82c..b316fbf 100644
+ }
+ if (!dir_emit(ctx, name, next->d_name.len,
d_inode(next)->i_ino, dt_type(d_inode(next))))
- return 0;
- spin_lock(&dentry->d_lock);
+ break;
+ moved = true;
diff --git a/fs/lockd/clnt4xdr.c b/fs/lockd/clnt4xdr.c
index d3e40db..a300f9c 100644
--- a/fs/lockd/clnt4xdr.c
@@ -102799,10 +103081,10 @@ index 19166d4..c841d52 100644
.p_replen = SM_unmonres_sz,
.p_statidx = NSMPROC_UNMON,
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
-index 154a107..7b77da4 100644
+index fc4084e..25d725d 100644
--- a/fs/lockd/svc.c
+++ b/fs/lockd/svc.c
-@@ -591,7 +591,7 @@ static struct ctl_table nlm_sysctl_root[] = {
+@@ -598,7 +598,7 @@ static struct ctl_table nlm_sysctl_root[] = {
*/
#define param_set_min_max(name, type, which_strtol, min, max) \
@@ -103618,7 +103900,7 @@ index b76a62b..317c6ff 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 ddbed2b..4267e7c 100644
+index 2d5336b..14e0552 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)
@@ -103782,10 +104064,10 @@ 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 aaa3b69..c610f44 100644
+index 70580ab..cdede72 100644
--- a/fs/namei.c
+++ b/fs/namei.c
-@@ -336,17 +336,32 @@ int generic_permission(struct inode *inode, int mask)
+@@ -337,17 +337,32 @@ int generic_permission(struct inode *inode, int mask)
if (ret != -EACCES)
return ret;
@@ -103822,7 +104104,7 @@ index aaa3b69..c610f44 100644
* Read/write DACs are always overridable.
* Executable DACs are overridable when there is
* at least one exec bit set.
-@@ -355,14 +370,6 @@ int generic_permission(struct inode *inode, int mask)
+@@ -356,14 +371,6 @@ int generic_permission(struct inode *inode, int mask)
if (capable_wrt_inode_uidgid(inode, CAP_DAC_OVERRIDE))
return 0;
@@ -103837,7 +104119,7 @@ index aaa3b69..c610f44 100644
return -EACCES;
}
EXPORT_SYMBOL(generic_permission);
-@@ -514,12 +521,35 @@ struct nameidata {
+@@ -515,12 +522,35 @@ struct nameidata {
struct inode *link_inode;
unsigned root_seq;
int dfd;
@@ -103874,7 +104156,7 @@ index aaa3b69..c610f44 100644
p->dfd = dfd;
p->name = name;
p->total_link_count = old ? old->total_link_count : 0;
-@@ -536,6 +566,10 @@ static void restore_nameidata(void)
+@@ -537,6 +567,10 @@ static void restore_nameidata(void)
old->total_link_count = now->total_link_count;
if (now->stack != now->internal)
kfree(now->stack);
@@ -103885,7 +104167,7 @@ index aaa3b69..c610f44 100644
}
static int __nd_alloc_stack(struct nameidata *nd)
-@@ -555,6 +589,7 @@ static int __nd_alloc_stack(struct nameidata *nd)
+@@ -556,6 +590,7 @@ static int __nd_alloc_stack(struct nameidata *nd)
}
memcpy(p, nd->internal, sizeof(nd->internal));
nd->stack = p;
@@ -103893,7 +104175,7 @@ index aaa3b69..c610f44 100644
return 0;
}
-@@ -576,8 +611,32 @@ static bool path_connected(const struct path *path)
+@@ -577,8 +612,32 @@ static bool path_connected(const struct path *path)
return is_subdir(path->dentry, mnt->mnt_root);
}
@@ -103926,7 +104208,7 @@ index aaa3b69..c610f44 100644
if (likely(nd->depth != EMBEDDED_LEVELS))
return 0;
if (likely(nd->stack != nd->internal))
-@@ -603,6 +662,14 @@ static void terminate_walk(struct nameidata *nd)
+@@ -604,6 +663,14 @@ static void terminate_walk(struct nameidata *nd)
path_put(&nd->path);
for (i = 0; i < nd->depth; i++)
path_put(&nd->stack[i].link);
@@ -103941,7 +104223,7 @@ index aaa3b69..c610f44 100644
if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
path_put(&nd->root);
nd->root.mnt = NULL;
-@@ -1014,6 +1081,9 @@ const char *get_link(struct nameidata *nd)
+@@ -1015,6 +1082,9 @@ const char *get_link(struct nameidata *nd)
if (unlikely(error))
return ERR_PTR(error);
@@ -103951,7 +104233,7 @@ index aaa3b69..c610f44 100644
nd->last_type = LAST_BIND;
res = inode->i_link;
if (!res) {
-@@ -1683,6 +1753,23 @@ static int pick_link(struct nameidata *nd, struct path *link,
+@@ -1701,6 +1771,23 @@ static int pick_link(struct nameidata *nd, struct path *link,
}
}
@@ -103975,16 +104257,16 @@ index aaa3b69..c610f44 100644
last = nd->stack + nd->depth++;
last->link = *link;
clear_delayed_call(&last->done);
-@@ -1830,7 +1917,7 @@ EXPORT_SYMBOL(full_name_hash);
+@@ -1938,7 +2025,7 @@ EXPORT_SYMBOL(hashlen_string);
static inline u64 hash_name(const char *name)
{
- unsigned long a, b, adata, bdata, mask, hash, len;
+ unsigned long a = 0, b, x = 0, y = 0, adata, bdata, mask, len;
- const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
+ static const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
- hash = a = 0;
len = -sizeof(unsigned long);
-@@ -1998,6 +2085,10 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
+ do {
+@@ -2120,6 +2207,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;
@@ -103995,7 +104277,7 @@ index aaa3b69..c610f44 100644
if (flags & LOOKUP_ROOT) {
struct dentry *root = nd->root.dentry;
struct inode *inode = root->d_inode;
-@@ -2129,6 +2220,14 @@ static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path
+@@ -2251,6 +2342,14 @@ static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path
if (!err)
err = complete_walk(nd);
@@ -104010,7 +104292,7 @@ index aaa3b69..c610f44 100644
if (!err && nd->flags & LOOKUP_DIRECTORY)
if (!d_can_lookup(nd->path.dentry))
err = -ENOTDIR;
-@@ -2177,6 +2276,14 @@ static int path_parentat(struct nameidata *nd, unsigned flags,
+@@ -2299,6 +2398,14 @@ static int path_parentat(struct nameidata *nd, unsigned flags,
err = link_path_walk(s, nd);
if (!err)
err = complete_walk(nd);
@@ -104025,7 +104307,7 @@ index aaa3b69..c610f44 100644
if (!err) {
*parent = nd->path;
nd->path.mnt = NULL;
-@@ -2776,6 +2883,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
+@@ -2926,6 +3033,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
if (flag & O_NOATIME && !inode_owner_or_capable(inode))
return -EPERM;
@@ -104039,11 +104321,10 @@ index aaa3b69..c610f44 100644
return 0;
}
-@@ -3036,6 +3150,21 @@ static int lookup_open(struct nameidata *nd, struct path *path,
+@@ -3165,6 +3279,20 @@ no_open:
+
/* Negative dentry, just create the file */
- if (!dentry->d_inode && (op->open_flag & O_CREAT)) {
- umode_t mode = op->mode;
-+
+ if (!dentry->d_inode && (open_flag & O_CREAT)) {
+ error = gr_chroot_pathat(nd->dfd, dentry, nd->path.mnt, nd->flags);
+ if (error)
+ goto out_dput;
@@ -104058,19 +104339,18 @@ index aaa3b69..c610f44 100644
+ goto out_dput;
+ }
+
- if (!IS_POSIXACL(dir->d_inode))
- mode &= ~current_umask();
- /*
-@@ -3057,6 +3186,8 @@ static int lookup_open(struct nameidata *nd, struct path *path,
- nd->flags & LOOKUP_EXCL);
+ *opened |= FILE_CREATED;
+ audit_inode_child(dir_inode, dentry, AUDIT_TYPE_CHILD_CREATE);
+ if (!dir_inode->i_op->create) {
+@@ -3175,6 +3303,7 @@ no_open:
+ open_flag & O_EXCL);
if (error)
goto out_dput;
-+ else
-+ gr_handle_create(dentry, nd->path.mnt);
++ gr_handle_create(dentry, nd->path.mnt);
+ fsnotify_create(dir_inode, dentry);
}
- out_no_open:
- path->dentry = dentry;
-@@ -3163,6 +3294,11 @@ retry_lookup:
+ if (unlikely(create_error) && !dentry->d_inode) {
+@@ -3289,6 +3418,11 @@ static int do_last(struct nameidata *nd,
goto finish_open_created;
}
@@ -104082,7 +104362,7 @@ index aaa3b69..c610f44 100644
/*
* If atomic_open() acquired write access it is dropped now due to
* possible mount and symlink following (this might be optimized away if
-@@ -3182,6 +3318,13 @@ retry_lookup:
+@@ -3308,6 +3442,13 @@ static int do_last(struct nameidata *nd,
return -ENOENT;
}
@@ -104096,10 +104376,10 @@ index aaa3b69..c610f44 100644
/*
* create/update audit record if it already exists.
*/
-@@ -3219,6 +3362,21 @@ finish_open:
- path_put(&save_parent);
+@@ -3336,6 +3477,21 @@ finish_open:
+ error = complete_walk(nd);
+ if (error)
return error;
- }
+
+ if (!gr_acl_handle_hidden_file(nd->path.dentry, nd->path.mnt)) {
+ error = -ENOENT;
@@ -104116,9 +104396,9 @@ index aaa3b69..c610f44 100644
+ }
+
audit_inode(nd->name, nd->path.dentry, 0);
- if (unlikely(d_is_symlink(nd->path.dentry)) && !(open_flag & O_PATH)) {
- error = -ELOOP;
-@@ -3494,9 +3652,11 @@ static struct dentry *filename_create(int dfd, struct filename *name,
+ error = -EISDIR;
+ if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry))
+@@ -3592,9 +3748,11 @@ static struct dentry *filename_create(int dfd, struct filename *name,
goto unlock;
error = -EEXIST;
@@ -104132,7 +104412,7 @@ index aaa3b69..c610f44 100644
/*
* Special case - lookup gave negative, but... we had foo/bar/
* From the vfs_mknod() POV we just have a negative dentry -
-@@ -3550,6 +3710,20 @@ inline struct dentry *user_path_create(int dfd, const char __user *pathname,
+@@ -3648,6 +3806,20 @@ inline struct dentry *user_path_create(int dfd, const char __user *pathname,
}
EXPORT_SYMBOL(user_path_create);
@@ -104153,7 +104433,7 @@ index aaa3b69..c610f44 100644
int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
{
int error = may_create(dir, dentry);
-@@ -3613,6 +3787,17 @@ retry:
+@@ -3711,6 +3883,17 @@ retry:
if (!IS_POSIXACL(path.dentry->d_inode))
mode &= ~current_umask();
@@ -104171,7 +104451,7 @@ index aaa3b69..c610f44 100644
error = security_path_mknod(&path, dentry, mode, dev);
if (error)
goto out;
-@@ -3628,6 +3813,8 @@ retry:
+@@ -3728,6 +3911,8 @@ retry:
error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
break;
}
@@ -104180,7 +104460,7 @@ index aaa3b69..c610f44 100644
out:
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
-@@ -3682,9 +3869,16 @@ retry:
+@@ -3782,9 +3967,16 @@ retry:
if (!IS_POSIXACL(path.dentry->d_inode))
mode &= ~current_umask();
@@ -104197,7 +104477,7 @@ index aaa3b69..c610f44 100644
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
-@@ -3745,6 +3939,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
+@@ -3845,6 +4037,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
struct path path;
struct qstr last;
int type;
@@ -104206,7 +104486,7 @@ index aaa3b69..c610f44 100644
unsigned int lookup_flags = 0;
retry:
name = user_path_parent(dfd, pathname,
-@@ -3777,10 +3973,20 @@ retry:
+@@ -3877,10 +4071,20 @@ retry:
error = -ENOENT;
goto exit3;
}
@@ -104227,7 +104507,7 @@ index aaa3b69..c610f44 100644
exit3:
dput(dentry);
exit2:
-@@ -3875,6 +4081,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
+@@ -3975,6 +4179,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
int type;
struct inode *inode = NULL;
struct inode *delegated_inode = NULL;
@@ -104236,7 +104516,7 @@ index aaa3b69..c610f44 100644
unsigned int lookup_flags = 0;
retry:
name = user_path_parent(dfd, pathname,
-@@ -3901,10 +4109,21 @@ retry_deleg:
+@@ -4001,10 +4207,21 @@ retry_deleg:
if (d_is_negative(dentry))
goto slashes;
ihold(inode);
@@ -104258,7 +104538,7 @@ index aaa3b69..c610f44 100644
exit2:
dput(dentry);
}
-@@ -3993,9 +4212,17 @@ retry:
+@@ -4093,9 +4310,17 @@ retry:
if (IS_ERR(dentry))
goto out_putname;
@@ -104276,7 +104556,7 @@ index aaa3b69..c610f44 100644
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
-@@ -4099,6 +4326,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
+@@ -4199,6 +4424,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;
@@ -104284,7 +104564,7 @@ index aaa3b69..c610f44 100644
int how = 0;
int error;
-@@ -4122,7 +4350,7 @@ retry:
+@@ -4222,7 +4448,7 @@ retry:
if (error)
return error;
@@ -104293,7 +104573,7 @@ index aaa3b69..c610f44 100644
(how & LOOKUP_REVAL));
error = PTR_ERR(new_dentry);
if (IS_ERR(new_dentry))
-@@ -4134,11 +4362,26 @@ retry:
+@@ -4234,11 +4460,26 @@ retry:
error = may_linkat(&old_path);
if (unlikely(error))
goto out_dput;
@@ -104320,7 +104600,7 @@ index aaa3b69..c610f44 100644
done_path_create(&new_path, new_dentry);
if (delegated_inode) {
error = break_deleg_wait(&delegated_inode);
-@@ -4457,6 +4700,20 @@ retry_deleg:
+@@ -4557,6 +4798,20 @@ retry_deleg:
if (new_dentry == trap)
goto exit5;
@@ -104341,7 +104621,7 @@ index aaa3b69..c610f44 100644
error = security_path_rename(&old_path, old_dentry,
&new_path, new_dentry, flags);
if (error)
-@@ -4464,6 +4721,9 @@ retry_deleg:
+@@ -4564,6 +4819,9 @@ retry_deleg:
error = vfs_rename(old_path.dentry->d_inode, old_dentry,
new_path.dentry->d_inode, new_dentry,
&delegated_inode, flags);
@@ -104351,7 +104631,7 @@ index aaa3b69..c610f44 100644
exit5:
dput(new_dentry);
exit4:
-@@ -4520,14 +4780,24 @@ EXPORT_SYMBOL(vfs_whiteout);
+@@ -4620,14 +4878,24 @@ EXPORT_SYMBOL(vfs_whiteout);
int readlink_copy(char __user *buffer, int buflen, const char *link)
{
@@ -104378,7 +104658,7 @@ index aaa3b69..c610f44 100644
out:
return len;
diff --git a/fs/namespace.c b/fs/namespace.c
-index 783004a..419cf4a 100644
+index 419f746..db66ea9 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1516,6 +1516,9 @@ static int do_umount(struct mount *mnt, int flags)
@@ -104401,7 +104681,7 @@ index 783004a..419cf4a 100644
return retval;
}
-@@ -1600,7 +1606,7 @@ static inline bool may_mandlock(void)
+@@ -1601,7 +1607,7 @@ static inline bool may_mandlock(void)
* unixes. Our API is identical to OSF/1 to avoid making a mess of AMD
*/
@@ -104410,7 +104690,7 @@ index 783004a..419cf4a 100644
{
struct path path;
struct mount *mnt;
-@@ -1645,7 +1651,7 @@ out:
+@@ -1646,7 +1652,7 @@ out:
/*
* The 2.0 compatible umount. No flags.
*/
@@ -104419,7 +104699,7 @@ index 783004a..419cf4a 100644
{
return sys_umount(name, 0);
}
-@@ -2723,6 +2729,16 @@ long do_mount(const char *dev_name, const char __user *dir_name,
+@@ -2724,6 +2730,16 @@ long do_mount(const char *dev_name, const char __user *dir_name,
MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
MS_STRICTATIME);
@@ -104436,7 +104716,7 @@ index 783004a..419cf4a 100644
if (flags & MS_REMOUNT)
retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,
data_page);
-@@ -2736,7 +2752,10 @@ long do_mount(const char *dev_name, const char __user *dir_name,
+@@ -2737,7 +2753,10 @@ long do_mount(const char *dev_name, const char __user *dir_name,
retval = do_new_mount(&path, type_page, flags, mnt_flags,
dev_name, data_page);
dput_out:
@@ -104447,7 +104727,7 @@ index 783004a..419cf4a 100644
return retval;
}
-@@ -2754,7 +2773,7 @@ static void free_mnt_ns(struct mnt_namespace *ns)
+@@ -2755,7 +2774,7 @@ static void free_mnt_ns(struct mnt_namespace *ns)
* number incrementing at 10Ghz will take 12,427 years to wrap which
* is effectively never, so we can ignore the possibility.
*/
@@ -104456,7 +104736,7 @@ index 783004a..419cf4a 100644
static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
{
-@@ -2770,7 +2789,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2771,7 +2790,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
return ERR_PTR(ret);
}
new_ns->ns.ops = &mntns_operations;
@@ -104465,7 +104745,7 @@ index 783004a..419cf4a 100644
atomic_set(&new_ns->count, 1);
new_ns->root = NULL;
INIT_LIST_HEAD(&new_ns->list);
-@@ -2780,6 +2799,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2781,6 +2800,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
return new_ns;
}
@@ -104473,7 +104753,7 @@ index 783004a..419cf4a 100644
struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns,
struct user_namespace *user_ns, struct fs_struct *new_fs)
{
-@@ -2901,8 +2921,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
+@@ -2902,8 +2922,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
}
EXPORT_SYMBOL(mount_subtree);
@@ -104484,7 +104764,7 @@ index 783004a..419cf4a 100644
{
int ret;
char *kernel_type;
-@@ -3008,6 +3028,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
+@@ -3009,6 +3029,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
if (error)
goto out2;
@@ -104496,7 +104776,7 @@ index 783004a..419cf4a 100644
get_fs_root(current->fs, &root);
old_mp = lock_mount(&old);
error = PTR_ERR(old_mp);
-@@ -3330,7 +3355,7 @@ static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns)
+@@ -3331,7 +3356,7 @@ static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns)
!ns_capable(current_user_ns(), CAP_SYS_ADMIN))
return -EPERM;
@@ -104567,7 +104847,7 @@ index 5fe1cec..d0f4ac0 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 7c9fbf5..8c165b9 100644
+index aaa2e8d..deb6e76 100644
--- a/fs/nfs/callback_proc.c
+++ b/fs/nfs/callback_proc.c
@@ -19,10 +19,12 @@
@@ -104597,7 +104877,7 @@ index 7c9fbf5..8c165b9 100644
struct inode *inode;
__be32 res;
-@@ -269,7 +272,7 @@ static u32 do_callback_layoutrecall(struct nfs_client *clp,
+@@ -270,7 +273,7 @@ static u32 do_callback_layoutrecall(struct nfs_client *clp,
}
@@ -104606,7 +104886,7 @@ index 7c9fbf5..8c165b9 100644
void *dummy, struct cb_process_state *cps)
{
u32 res;
-@@ -296,9 +299,10 @@ static void pnfs_recall_all_layouts(struct nfs_client *clp)
+@@ -297,9 +300,10 @@ static void pnfs_recall_all_layouts(struct nfs_client *clp)
do_callback_layoutrecall(clp, &args);
}
@@ -104618,7 +104898,7 @@ index 7c9fbf5..8c165b9 100644
int i;
__be32 res = 0;
struct nfs_client *clp = cps->clp;
-@@ -443,10 +447,12 @@ out:
+@@ -444,10 +448,12 @@ out:
return status;
}
@@ -104633,7 +104913,7 @@ index 7c9fbf5..8c165b9 100644
struct nfs4_slot_table *tbl;
struct nfs4_slot *slot;
struct nfs_client *clp;
-@@ -548,9 +554,10 @@ validate_bitmap_values(unsigned long mask)
+@@ -549,9 +555,10 @@ validate_bitmap_values(unsigned long mask)
return (mask & ~RCA4_TYPE_MASK_ALL) == 0;
}
@@ -104645,7 +104925,7 @@ index 7c9fbf5..8c165b9 100644
__be32 status;
fmode_t flags = 0;
-@@ -583,9 +590,10 @@ out:
+@@ -584,9 +591,10 @@ out:
}
/* Reduce the fore channel's max_slots to the target value */
@@ -104658,7 +104938,7 @@ index 7c9fbf5..8c165b9 100644
__be32 status;
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
-index 976c906..16b86ac 100644
+index d81f96a..e1d0f2f 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -53,7 +53,7 @@ struct callback_op {
@@ -104685,7 +104965,7 @@ index 976c906..16b86ac 100644
{
return xdr_ressize_check(rqstp, p);
}
-@@ -193,8 +193,9 @@ static __be32 decode_op_hdr(struct xdr_stream *xdr, unsigned int *op)
+@@ -199,8 +199,9 @@ static __be32 decode_op_hdr(struct xdr_stream *xdr, unsigned int *op)
return 0;
}
@@ -104696,7 +104976,7 @@ index 976c906..16b86ac 100644
__be32 status;
status = decode_fh(xdr, &args->fh);
-@@ -206,8 +207,9 @@ out:
+@@ -212,8 +213,9 @@ out:
return status;
}
@@ -104707,7 +104987,7 @@ index 976c906..16b86ac 100644
__be32 *p;
__be32 status;
-@@ -230,8 +232,9 @@ out:
+@@ -241,8 +243,9 @@ static __be32 decode_layout_stateid(struct xdr_stream *xdr, nfs4_stateid *statei
static __be32 decode_layoutrecall_args(struct svc_rqst *rqstp,
struct xdr_stream *xdr,
@@ -104718,7 +104998,7 @@ index 976c906..16b86ac 100644
__be32 *p;
__be32 status = 0;
uint32_t iomode;
-@@ -290,8 +293,9 @@ out:
+@@ -301,8 +304,9 @@ out:
static
__be32 decode_devicenotify_args(struct svc_rqst *rqstp,
struct xdr_stream *xdr,
@@ -104729,7 +105009,7 @@ index 976c906..16b86ac 100644
__be32 *p;
__be32 status = 0;
u32 tmp;
-@@ -431,8 +435,9 @@ out:
+@@ -442,8 +446,9 @@ out:
static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp,
struct xdr_stream *xdr,
@@ -104740,7 +105020,7 @@ index 976c906..16b86ac 100644
__be32 *p;
int i;
__be32 status;
-@@ -493,8 +498,9 @@ out_free:
+@@ -504,8 +509,9 @@ out_free:
static __be32 decode_recallany_args(struct svc_rqst *rqstp,
struct xdr_stream *xdr,
@@ -104751,7 +105031,7 @@ index 976c906..16b86ac 100644
uint32_t bitmap[2];
__be32 *p, status;
-@@ -512,8 +518,9 @@ static __be32 decode_recallany_args(struct svc_rqst *rqstp,
+@@ -523,8 +529,9 @@ static __be32 decode_recallany_args(struct svc_rqst *rqstp,
static __be32 decode_recallslot_args(struct svc_rqst *rqstp,
struct xdr_stream *xdr,
@@ -104762,7 +105042,7 @@ index 976c906..16b86ac 100644
__be32 *p;
p = read_buf(xdr, 4);
-@@ -648,8 +655,9 @@ static __be32 encode_op_hdr(struct xdr_stream *xdr, uint32_t op, __be32 res)
+@@ -659,8 +666,9 @@ static __be32 encode_op_hdr(struct xdr_stream *xdr, uint32_t op, __be32 res)
return 0;
}
@@ -104773,7 +105053,7 @@ index 976c906..16b86ac 100644
__be32 *savep = NULL;
__be32 status = res->status;
-@@ -691,8 +699,9 @@ static __be32 encode_sessionid(struct xdr_stream *xdr,
+@@ -702,8 +710,9 @@ static __be32 encode_sessionid(struct xdr_stream *xdr,
static __be32 encode_cb_sequence_res(struct svc_rqst *rqstp,
struct xdr_stream *xdr,
@@ -104784,7 +105064,7 @@ index 976c906..16b86ac 100644
__be32 *p;
__be32 status = res->csr_status;
-@@ -952,43 +961,41 @@ static struct callback_op callback_ops[] = {
+@@ -963,43 +972,41 @@ static struct callback_op callback_ops[] = {
.res_maxsize = CB_OP_HDR_RES_MAXSZ,
},
[OP_CB_GETATTR] = {
@@ -104844,7 +105124,7 @@ index 976c906..16b86ac 100644
.res_maxsize = CB_OP_RECALLSLOT_RES_MAXSZ,
},
#endif /* CONFIG_NFS_V4_1 */
-@@ -1000,13 +1007,13 @@ static struct callback_op callback_ops[] = {
+@@ -1011,13 +1018,13 @@ static struct callback_op callback_ops[] = {
static struct svc_procedure nfs4_callback_procedures1[] = {
[CB_NULL] = {
.pc_func = nfs4_callback_null,
@@ -104862,10 +105142,10 @@ index 976c906..16b86ac 100644
.pc_ressize = 256,
.pc_xdrressize = NFS4_CALLBACK_BUFSIZE,
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
-index a7dd1fe..9d5f829 100644
+index 19d93d0..e1164ca 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
-@@ -681,8 +681,9 @@ out:
+@@ -699,8 +699,9 @@ out:
* We only need to convert from xdr once so future lookups are much simpler
*/
static
@@ -104876,20 +105156,20 @@ index a7dd1fe..9d5f829 100644
struct inode *inode = file_inode(desc->file);
int ret;
-@@ -715,7 +716,7 @@ static
- struct page *get_cache_page(nfs_readdir_descriptor_t *desc)
- {
- return read_cache_page(file_inode(desc->file)->i_mapping,
+@@ -735,7 +736,7 @@ struct page *get_cache_page(nfs_readdir_descriptor_t *desc)
+
+ for (;;) {
+ page = read_cache_page(file_inode(desc->file)->i_mapping,
- desc->page_index, (filler_t *)nfs_readdir_filler, desc);
+ desc->page_index, nfs_readdir_filler, desc);
- }
-
- /*
+ if (IS_ERR(page) || grab_page(page))
+ break;
+ put_page(page);
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
-index 738c84a..fd9100f 100644
+index dda689d..747eaf2 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
+@@ -1319,16 +1319,16 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat
return 0;
}
@@ -104910,10 +105190,10 @@ index 738c84a..fd9100f 100644
EXPORT_SYMBOL_GPL(nfs_inc_attr_generation_counter);
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
-index f1d1d2c..d4a961d 100644
+index 5154fa6..1e29054 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
-@@ -608,9 +608,10 @@ unsigned long nfs_block_size(unsigned long bsize, unsigned char *nrbitsp)
+@@ -609,9 +609,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)
{
@@ -105819,10 +106099,10 @@ index 267126d..19c97b8 100644
.p_replen = ACL3_setaclres_sz,
.p_timer = 0,
diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c
-index 0ca482a..5df90f3 100644
+index 6dc6f2a..d541eb1c 100644
--- a/fs/nfs/nfs42xdr.c
+++ b/fs/nfs/nfs42xdr.c
-@@ -165,10 +165,12 @@ static void encode_clone(struct xdr_stream *xdr,
+@@ -205,10 +205,12 @@ static void encode_clone(struct xdr_stream *xdr,
/*
* Encode ALLOCATE request
*/
@@ -105837,7 +106117,22 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr = {
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
-@@ -184,10 +186,12 @@ static void nfs4_xdr_enc_allocate(struct rpc_rqst *req,
+@@ -224,10 +226,12 @@ static void nfs4_xdr_enc_allocate(struct rpc_rqst *req,
+ /*
+ * Encode COPY request
+ */
+-static void nfs4_xdr_enc_copy(struct rpc_rqst *req,
++static void nfs4_xdr_enc_copy(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs42_copy_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs42_copy_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -244,10 +248,12 @@ static void nfs4_xdr_enc_copy(struct rpc_rqst *req,
/*
* Encode DEALLOCATE request
*/
@@ -105852,7 +106147,7 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr = {
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
-@@ -203,10 +207,12 @@ static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req,
+@@ -263,10 +269,12 @@ static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req,
/*
* Encode SEEK request
*/
@@ -105867,7 +106162,7 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr = {
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
-@@ -221,10 +227,12 @@ static void nfs4_xdr_enc_seek(struct rpc_rqst *req,
+@@ -281,10 +289,12 @@ static void nfs4_xdr_enc_seek(struct rpc_rqst *req,
/*
* Encode LAYOUTSTATS request
*/
@@ -105882,7 +106177,7 @@ index 0ca482a..5df90f3 100644
int i;
struct compound_hdr hdr = {
-@@ -243,10 +251,12 @@ static void nfs4_xdr_enc_layoutstats(struct rpc_rqst *req,
+@@ -303,10 +313,12 @@ static void nfs4_xdr_enc_layoutstats(struct rpc_rqst *req,
/*
* Encode CLONE request
*/
@@ -105897,7 +106192,7 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr = {
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
-@@ -306,10 +316,12 @@ static int decode_clone(struct xdr_stream *xdr)
+@@ -422,10 +434,12 @@ static int decode_clone(struct xdr_stream *xdr)
/*
* Decode ALLOCATE request
*/
@@ -105912,7 +106207,22 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr;
int status;
-@@ -333,10 +345,12 @@ out:
+@@ -449,10 +463,12 @@ out:
+ /*
+ * Decode COPY response
+ */
+-static int nfs4_xdr_dec_copy(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_copy(void *_rqstp,
+ struct xdr_stream *xdr,
+- struct nfs42_copy_res *res)
++ void *_res)
+ {
++ struct rpc_rqst *rqstp = _rqstp;
++ struct nfs42_copy_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -479,10 +495,12 @@ out:
/*
* Decode DEALLOCATE request
*/
@@ -105927,7 +106237,7 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr;
int status;
-@@ -360,10 +374,12 @@ out:
+@@ -506,10 +524,12 @@ out:
/*
* Decode SEEK request
*/
@@ -105942,7 +106252,7 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr;
int status;
-@@ -384,10 +400,12 @@ out:
+@@ -530,10 +550,12 @@ out:
/*
* Decode LAYOUTSTATS request
*/
@@ -105957,7 +106267,7 @@ index 0ca482a..5df90f3 100644
struct compound_hdr hdr;
int status, i;
-@@ -414,10 +432,12 @@ out:
+@@ -560,10 +582,12 @@ out:
/*
* Decode CLONE request
*/
@@ -105973,7 +106283,7 @@ index 0ca482a..5df90f3 100644
int status;
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
-index 88474a4..55ee771 100644
+index 661e753..fb6944d 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)
@@ -106672,7 +106982,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr = {
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
-@@ -6067,10 +6122,11 @@ static int decode_free_stateid(struct xdr_stream *xdr,
+@@ -6091,10 +6146,11 @@ static int decode_free_stateid(struct xdr_stream *xdr,
/*
* Decode OPEN_DOWNGRADE response
*/
@@ -106686,7 +106996,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6094,9 +6150,10 @@ out:
+@@ -6118,9 +6174,10 @@ out:
/*
* Decode ACCESS response
*/
@@ -106699,7 +107009,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6120,9 +6177,10 @@ out:
+@@ -6144,9 +6201,10 @@ out:
/*
* Decode LOOKUP response
*/
@@ -106712,7 +107022,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6149,10 +6207,11 @@ out:
+@@ -6173,10 +6231,11 @@ out:
/*
* Decode LOOKUP_ROOT response
*/
@@ -106726,7 +107036,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6176,9 +6235,10 @@ out:
+@@ -6200,9 +6259,10 @@ out:
/*
* Decode REMOVE response
*/
@@ -106739,7 +107049,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6199,9 +6259,10 @@ out:
+@@ -6223,9 +6283,10 @@ out:
/*
* Decode RENAME response
*/
@@ -106752,7 +107062,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6228,9 +6289,10 @@ out:
+@@ -6252,9 +6313,10 @@ out:
/*
* Decode LINK response
*/
@@ -106765,7 +107075,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6267,9 +6329,10 @@ out:
+@@ -6291,9 +6353,10 @@ out:
/*
* Decode CREATE response
*/
@@ -106778,7 +107088,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6296,8 +6359,8 @@ out:
+@@ -6320,8 +6383,8 @@ out:
/*
* Decode SYMLINK response
*/
@@ -106789,7 +107099,7 @@ index 88474a4..55ee771 100644
{
return nfs4_xdr_dec_create(rqstp, xdr, res);
}
-@@ -6305,9 +6368,10 @@ static int nfs4_xdr_dec_symlink(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+@@ -6329,9 +6392,10 @@ static int nfs4_xdr_dec_symlink(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
/*
* Decode GETATTR response
*/
@@ -106802,7 +107112,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6328,9 +6392,10 @@ out:
+@@ -6352,9 +6416,10 @@ out:
/*
* Encode an SETACL request
*/
@@ -106815,7 +107125,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr = {
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
-@@ -6346,9 +6411,10 @@ static void nfs4_xdr_enc_setacl(struct rpc_rqst *req, struct xdr_stream *xdr,
+@@ -6370,9 +6435,10 @@ static void nfs4_xdr_enc_setacl(struct rpc_rqst *req, struct xdr_stream *xdr,
* Decode SETACL response
*/
static int
@@ -106828,7 +107138,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6370,9 +6436,10 @@ out:
+@@ -6394,9 +6460,10 @@ out:
* Decode GETACL response
*/
static int
@@ -106841,7 +107151,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6398,9 +6465,10 @@ out:
+@@ -6422,9 +6489,10 @@ out:
/*
* Decode CLOSE response
*/
@@ -106854,7 +107164,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6430,9 +6498,10 @@ out:
+@@ -6454,9 +6522,10 @@ out:
/*
* Decode OPEN response
*/
@@ -106867,7 +107177,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6461,9 +6530,9 @@ out:
+@@ -6485,9 +6554,9 @@ out:
/*
* Decode OPEN_CONFIRM response
*/
@@ -106879,7 +107189,7 @@ index 88474a4..55ee771 100644
{
struct compound_hdr hdr;
int status;
-@@ -6482,10 +6551,11 @@ out:
+@@ -6506,10 +6575,11 @@ out:
/*
* Decode OPEN response
*/
@@ -106893,7 +107203,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6511,10 +6581,11 @@ out:
+@@ -6535,10 +6605,11 @@ out:
/*
* Decode SETATTR response
*/
@@ -106907,7 +107217,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6538,9 +6609,10 @@ out:
+@@ -6562,9 +6633,10 @@ out:
/*
* Decode LOCK response
*/
@@ -106920,7 +107230,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6561,9 +6633,10 @@ out:
+@@ -6585,9 +6657,10 @@ out:
/*
* Decode LOCKT response
*/
@@ -106933,7 +107243,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6584,9 +6657,10 @@ out:
+@@ -6608,9 +6681,10 @@ out:
/*
* Decode LOCKU response
*/
@@ -106946,7 +107256,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6604,7 +6678,7 @@ out:
+@@ -6628,7 +6702,7 @@ out:
return status;
}
@@ -106955,7 +107265,7 @@ index 88474a4..55ee771 100644
struct xdr_stream *xdr, void *dummy)
{
struct compound_hdr hdr;
-@@ -6619,10 +6693,11 @@ static int nfs4_xdr_dec_release_lockowner(struct rpc_rqst *rqstp,
+@@ -6643,10 +6717,11 @@ static int nfs4_xdr_dec_release_lockowner(struct rpc_rqst *rqstp,
/*
* Decode READLINK response
*/
@@ -106969,7 +107279,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6643,9 +6718,10 @@ out:
+@@ -6667,9 +6742,10 @@ out:
/*
* Decode READDIR response
*/
@@ -106982,7 +107292,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6666,9 +6742,10 @@ out:
+@@ -6690,9 +6766,10 @@ out:
/*
* Decode Read response
*/
@@ -106995,7 +107305,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6692,9 +6769,10 @@ out:
+@@ -6716,9 +6793,10 @@ out:
/*
* Decode WRITE response
*/
@@ -107008,7 +107318,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6722,9 +6800,10 @@ out:
+@@ -6746,9 +6824,10 @@ out:
/*
* Decode COMMIT response
*/
@@ -107021,7 +107331,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6746,9 +6825,10 @@ out:
+@@ -6770,9 +6849,10 @@ out:
/*
* Decode FSINFO response
*/
@@ -107034,7 +107344,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6765,9 +6845,10 @@ static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
+@@ -6789,9 +6869,10 @@ static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
/*
* Decode PATHCONF response
*/
@@ -107047,7 +107357,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6784,9 +6865,10 @@ static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
+@@ -6808,9 +6889,10 @@ static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
/*
* Decode STATFS response
*/
@@ -107060,7 +107370,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6803,10 +6885,11 @@ static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
+@@ -6827,10 +6909,11 @@ static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
/*
* Decode GETATTR_BITMAP response
*/
@@ -107074,7 +107384,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6827,7 +6910,7 @@ out:
+@@ -6851,7 +6934,7 @@ out:
/*
* Decode RENEW response
*/
@@ -107083,7 +107393,7 @@ index 88474a4..55ee771 100644
void *__unused)
{
struct compound_hdr hdr;
-@@ -6842,9 +6925,9 @@ static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+@@ -6866,9 +6949,9 @@ static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
/*
* Decode SETCLIENTID response
*/
@@ -107095,7 +107405,7 @@ index 88474a4..55ee771 100644
{
struct compound_hdr hdr;
int status;
-@@ -6858,8 +6941,9 @@ static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req,
+@@ -6882,8 +6965,9 @@ static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req,
/*
* Decode SETCLIENTID_CONFIRM response
*/
@@ -107107,7 +107417,7 @@ index 88474a4..55ee771 100644
{
struct compound_hdr hdr;
int status;
-@@ -6873,10 +6957,11 @@ static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req,
+@@ -6897,10 +6981,11 @@ static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req,
/*
* Decode DELEGRETURN response
*/
@@ -107121,7 +107431,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6900,10 +6985,11 @@ out:
+@@ -6924,10 +7009,11 @@ out:
/*
* Decode FS_LOCATIONS response
*/
@@ -107135,7 +107445,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6943,10 +7029,11 @@ out:
+@@ -6967,10 +7053,11 @@ out:
/*
* Decode SECINFO response
*/
@@ -107149,7 +107459,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6967,10 +7054,11 @@ out:
+@@ -6991,10 +7078,11 @@ out:
/*
* Decode FSID_PRESENT response
*/
@@ -107163,7 +107473,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -6996,7 +7084,7 @@ out:
+@@ -7020,7 +7108,7 @@ out:
/*
* Decode BIND_CONN_TO_SESSION response
*/
@@ -107172,7 +107482,7 @@ index 88474a4..55ee771 100644
struct xdr_stream *xdr,
void *res)
{
-@@ -7012,7 +7100,7 @@ static int nfs4_xdr_dec_bind_conn_to_session(struct rpc_rqst *rqstp,
+@@ -7036,7 +7124,7 @@ static int nfs4_xdr_dec_bind_conn_to_session(struct rpc_rqst *rqstp,
/*
* Decode EXCHANGE_ID response
*/
@@ -107181,7 +107491,7 @@ index 88474a4..55ee771 100644
struct xdr_stream *xdr,
void *res)
{
-@@ -7028,9 +7116,9 @@ static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp,
+@@ -7052,9 +7140,9 @@ static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp,
/*
* Decode CREATE_SESSION response
*/
@@ -107193,7 +107503,7 @@ index 88474a4..55ee771 100644
{
struct compound_hdr hdr;
int status;
-@@ -7044,7 +7132,7 @@ static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp,
+@@ -7068,7 +7156,7 @@ static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp,
/*
* Decode DESTROY_SESSION response
*/
@@ -107202,7 +107512,7 @@ index 88474a4..55ee771 100644
struct xdr_stream *xdr,
void *res)
{
-@@ -7060,7 +7148,7 @@ static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp,
+@@ -7084,7 +7172,7 @@ static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp,
/*
* Decode DESTROY_CLIENTID response
*/
@@ -107211,7 +107521,7 @@ index 88474a4..55ee771 100644
struct xdr_stream *xdr,
void *res)
{
-@@ -7076,9 +7164,9 @@ static int nfs4_xdr_dec_destroy_clientid(struct rpc_rqst *rqstp,
+@@ -7100,9 +7188,9 @@ static int nfs4_xdr_dec_destroy_clientid(struct rpc_rqst *rqstp,
/*
* Decode SEQUENCE response
*/
@@ -107223,7 +107533,7 @@ index 88474a4..55ee771 100644
{
struct compound_hdr hdr;
int status;
-@@ -7092,10 +7180,11 @@ static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp,
+@@ -7116,10 +7204,11 @@ static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp,
/*
* Decode GET_LEASE_TIME response
*/
@@ -107237,7 +107547,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7112,10 +7201,11 @@ static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp,
+@@ -7136,10 +7225,11 @@ static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp,
/*
* Decode RECLAIM_COMPLETE response
*/
@@ -107251,7 +107561,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7130,10 +7220,11 @@ static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp,
+@@ -7154,10 +7244,11 @@ static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp,
/*
* Decode GETDEVINFO response
*/
@@ -107265,7 +107575,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7151,10 +7242,11 @@ out:
+@@ -7175,10 +7266,11 @@ out:
/*
* Decode LAYOUTGET response
*/
@@ -107279,7 +107589,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7175,10 +7267,11 @@ out:
+@@ -7199,10 +7291,11 @@ out:
/*
* Decode LAYOUTRETURN response
*/
@@ -107293,7 +107603,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7199,10 +7292,11 @@ out:
+@@ -7223,10 +7316,11 @@ out:
/*
* Decode LAYOUTCOMMIT response
*/
@@ -107307,7 +107617,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7226,10 +7320,11 @@ out:
+@@ -7250,10 +7344,11 @@ out:
/*
* Decode SECINFO_NO_NAME response
*/
@@ -107321,7 +107631,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7250,10 +7345,11 @@ out:
+@@ -7274,10 +7369,11 @@ out:
/*
* Decode TEST_STATEID response
*/
@@ -107335,7 +107645,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7271,10 +7367,11 @@ out:
+@@ -7295,10 +7391,11 @@ out:
/*
* Decode FREE_STATEID response
*/
@@ -107349,7 +107659,7 @@ index 88474a4..55ee771 100644
struct compound_hdr hdr;
int status;
-@@ -7439,8 +7536,8 @@ nfs4_stat_to_errno(int stat)
+@@ -7463,8 +7560,8 @@ nfs4_stat_to_errno(int stat)
#define PROC(proc, argtype, restype) \
[NFSPROC4_CLNT_##proc] = { \
.p_proc = NFSPROC4_COMPOUND, \
@@ -107755,7 +108065,7 @@ index 0c89034..36a8d76 100644
sizeof(struct nfsd3_##rest##res), \
0, \
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c
-index 51c3b06..aa8fcebc 100644
+index d818e4f..bb15590 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)
@@ -108329,7 +108639,7 @@ index 51c3b06..aa8fcebc 100644
.pc_ressize = sizeof(struct nfsd3_commitres),
.pc_cachetype = RC_NOCACHE,
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
-index 2246454..b866de8 100644
+index dba2ff8..9ac9eba 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -273,8 +273,10 @@ void fill_post_wcc(struct svc_fh *fhp)
@@ -109678,7 +109988,7 @@ index de1ff1d..bd4c347 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 9e04e49..1e7e2d3 100644
+index 70d0b9b..351c298 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2362,8 +2362,9 @@ static bool client_has_state(struct nfs4_client *clp)
@@ -109791,7 +110101,7 @@ index 9e04e49..1e7e2d3 100644
struct nfs4_client *conf, *unconf;
struct nfs4_client *old = NULL;
nfs4_verifier confirm = setclientid_confirm->sc_confirm;
-@@ -4446,8 +4456,9 @@ void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate,
+@@ -4443,8 +4453,9 @@ void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate,
__be32
nfsd4_renew(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
@@ -109802,7 +110112,7 @@ index 9e04e49..1e7e2d3 100644
struct nfs4_client *clp;
__be32 status;
struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
-@@ -4903,8 +4914,9 @@ out:
+@@ -4894,8 +4905,9 @@ out:
*/
__be32
nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
@@ -109813,7 +110123,7 @@ index 9e04e49..1e7e2d3 100644
struct nfsd4_test_stateid_id *stateid;
struct nfs4_client *cl = cstate->session->se_client;
-@@ -4917,8 +4929,9 @@ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+@@ -4908,8 +4920,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,
@@ -109824,7 +110134,7 @@ index 9e04e49..1e7e2d3 100644
stateid_t *stateid = &free_stateid->fr_stateid;
struct nfs4_stid *s;
struct nfs4_delegation *dp;
-@@ -5056,8 +5069,9 @@ static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cs
+@@ -5047,8 +5060,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,
@@ -109835,7 +110145,7 @@ index 9e04e49..1e7e2d3 100644
__be32 status;
struct nfs4_openowner *oo;
struct nfs4_ol_stateid *stp;
-@@ -5125,8 +5139,9 @@ static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_ac
+@@ -5116,8 +5130,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,
@@ -109846,7 +110156,7 @@ index 9e04e49..1e7e2d3 100644
__be32 status;
struct nfs4_ol_stateid *stp;
struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
-@@ -5194,8 +5209,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
+@@ -5185,8 +5200,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
*/
__be32
nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
@@ -109857,7 +110167,7 @@ index 9e04e49..1e7e2d3 100644
__be32 status;
struct nfs4_ol_stateid *stp;
struct net *net = SVC_NET(rqstp);
-@@ -5224,8 +5240,9 @@ out:
+@@ -5215,8 +5231,9 @@ out:
__be32
nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
@@ -109868,7 +110178,7 @@ index 9e04e49..1e7e2d3 100644
struct nfs4_delegation *dp;
stateid_t *stateid = &dr->dr_stateid;
struct nfs4_stid *s;
-@@ -5559,8 +5576,9 @@ out:
+@@ -5550,8 +5567,9 @@ out:
*/
__be32
nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
@@ -109879,7 +110189,7 @@ index 9e04e49..1e7e2d3 100644
struct nfs4_openowner *open_sop = NULL;
struct nfs4_lockowner *lock_sop = NULL;
struct nfs4_ol_stateid *lock_stp = NULL;
-@@ -5763,8 +5781,9 @@ static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct
+@@ -5754,8 +5772,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,
@@ -109890,7 +110200,7 @@ index 9e04e49..1e7e2d3 100644
struct file_lock *file_lock = NULL;
struct nfs4_lockowner *lo = NULL;
__be32 status;
-@@ -5836,8 +5855,9 @@ out:
+@@ -5827,8 +5846,9 @@ out:
__be32
nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
@@ -109901,7 +110211,7 @@ index 9e04e49..1e7e2d3 100644
struct nfs4_ol_stateid *stp;
struct file *filp = NULL;
struct file_lock *file_lock = NULL;
-@@ -5943,8 +5963,9 @@ check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner)
+@@ -5934,8 +5954,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,
@@ -109912,7 +110222,7 @@ index 9e04e49..1e7e2d3 100644
clientid_t *clid = &rlockowner->rl_clientid;
struct nfs4_stateowner *sop;
struct nfs4_lockowner *lo = NULL;
-@@ -6888,26 +6909,34 @@ clear_current_stateid(struct nfsd4_compound_state *cstate)
+@@ -6879,26 +6900,34 @@ clear_current_stateid(struct nfsd4_compound_state *cstate)
* functions to set current state id
*/
void
@@ -109951,7 +110261,7 @@ index 9e04e49..1e7e2d3 100644
put_stateid(cstate, &lock->lk_resp_stateid);
}
-@@ -6916,49 +6945,65 @@ nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lo
+@@ -6907,49 +6936,65 @@ nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lo
*/
void
@@ -112011,7 +112321,7 @@ index 79d964a..bbf050b 100644
return 1;
}
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
-index d40010e..0a2bdf7 100644
+index 6fbd81e..3c57f7b 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,
@@ -112023,16 +112333,16 @@ index d40010e..0a2bdf7 100644
set_fs(oldfs);
return nfsd_finish_read(file, count, host_err);
}
-@@ -957,7 +957,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
+@@ -960,7 +960,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
/* Write the data. */
oldfs = get_fs(); set_fs(KERNEL_DS);
-- 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);
+- host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &pos, flags);
++ host_err = vfs_writev(file, (struct iovec __force_user *)vec, vlen, &pos, flags);
set_fs(oldfs);
if (host_err < 0)
goto out_nfserr;
-@@ -1478,7 +1478,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
+@@ -1474,7 +1474,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
*/
oldfs = get_fs(); set_fs(KERNEL_DS);
@@ -112955,7 +113265,7 @@ index d7cae33..2d29660 100644
/* Copy the blockcheck stats from the superblock probe */
osb->osb_ecc_stats = *stats;
diff --git a/fs/open.c b/fs/open.c
-index 081d3d6..c1b8284a 100644
+index 93ae3cd..6cee098 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -32,6 +32,8 @@
@@ -112967,7 +113277,7 @@ index 081d3d6..c1b8284a 100644
#include "internal.h"
int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
-@@ -105,6 +107,8 @@ long vfs_truncate(struct path *path, loff_t length)
+@@ -105,6 +107,8 @@ long vfs_truncate(const struct path *path, loff_t length)
error = locks_verify_truncate(inode, NULL, length);
if (!error)
error = security_path_truncate(path);
@@ -113032,7 +113342,7 @@ index 081d3d6..c1b8284a 100644
error = 0;
dput_and_out:
path_put(&path);
-@@ -511,6 +535,16 @@ static int chmod_common(struct path *path, umode_t mode)
+@@ -511,6 +535,16 @@ static int chmod_common(const struct path *path, umode_t mode)
return error;
retry_deleg:
inode_lock(inode);
@@ -113049,7 +113359,7 @@ index 081d3d6..c1b8284a 100644
error = security_path_chmod(path, mode);
if (error)
goto out_unlock;
-@@ -576,6 +610,9 @@ static int chown_common(struct path *path, uid_t user, gid_t group)
+@@ -576,6 +610,9 @@ static int chown_common(const struct path *path, uid_t user, gid_t group)
uid = make_kuid(current_user_ns(), user);
gid = make_kgid(current_user_ns(), group);
@@ -113068,7 +113378,7 @@ index 081d3d6..c1b8284a 100644
}
putname(tmp);
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
-index cc514da..2895466 100644
+index 80aa6f1..bf87501 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -185,7 +185,7 @@ static char *ovl_read_symlink(struct dentry *realdentry)
@@ -113081,10 +113391,10 @@ index cc514da..2895466 100644
if (res < 0) {
free_page((unsigned long) buf);
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
-index d46fa60..e9a726d 100644
+index d1cdc60..38f2608 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
-@@ -373,6 +373,9 @@ struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags)
+@@ -360,6 +360,9 @@ struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags)
if (d_is_dir(dentry))
return d_backing_inode(dentry);
@@ -113095,10 +113405,10 @@ index d46fa60..e9a726d 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 7952a50f..631ff67 100644
+index 9a7693d..ca30875 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)
+@@ -196,7 +196,7 @@ void ovl_path_lower(struct dentry *dentry, struct path *path)
{
struct ovl_entry *oe = dentry->d_fsdata;
@@ -113107,7 +113417,7 @@ index 7952a50f..631ff67 100644
}
int ovl_want_write(struct dentry *dentry)
-@@ -942,8 +942,8 @@ static unsigned int ovl_split_lowerdirs(char *str)
+@@ -952,8 +952,8 @@ static unsigned int ovl_split_lowerdirs(char *str)
static int ovl_fill_super(struct super_block *sb, void *data, int silent)
{
@@ -113367,7 +113677,7 @@ index 0d3f516..91735ad 100644
if (!capable(CAP_SYS_RESOURCE) && size > pipe_max_size) {
diff --git a/fs/posix_acl.c b/fs/posix_acl.c
-index e11ea5f..20e2d4d 100644
+index edc452c..4ed2cc0 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -20,6 +20,7 @@
@@ -113376,9 +113686,9 @@ index e11ea5f..20e2d4d 100644
#include <linux/user_namespace.h>
+#include <linux/grsecurity.h>
- struct posix_acl **acl_by_type(struct inode *inode, int type)
+ static struct posix_acl **acl_by_type(struct inode *inode, int type)
{
-@@ -277,7 +278,7 @@ posix_acl_equiv_mode(const struct posix_acl *acl, umode_t *mode_p)
+@@ -311,7 +312,7 @@ posix_acl_equiv_mode(const struct posix_acl *acl, umode_t *mode_p)
}
}
if (mode_p)
@@ -113387,7 +113697,7 @@ index e11ea5f..20e2d4d 100644
return not_equiv;
}
EXPORT_SYMBOL(posix_acl_equiv_mode);
-@@ -427,7 +428,7 @@ static int posix_acl_create_masq(struct posix_acl *acl, umode_t *mode_p)
+@@ -461,7 +462,7 @@ static int posix_acl_create_masq(struct posix_acl *acl, umode_t *mode_p)
mode &= (group_obj->e_perm << 3) | ~S_IRWXG;
}
@@ -113396,7 +113706,7 @@ index e11ea5f..20e2d4d 100644
return not_equiv;
}
-@@ -485,6 +486,8 @@ __posix_acl_create(struct posix_acl **acl, gfp_t gfp, umode_t *mode_p)
+@@ -519,6 +520,8 @@ __posix_acl_create(struct posix_acl **acl, gfp_t gfp, umode_t *mode_p)
struct posix_acl *clone = posix_acl_clone(*acl, gfp);
int err = -ENOMEM;
if (clone) {
@@ -113405,7 +113715,7 @@ index e11ea5f..20e2d4d 100644
err = posix_acl_create_masq(clone, mode_p);
if (err < 0) {
posix_acl_release(clone);
-@@ -657,11 +660,12 @@ struct posix_acl *
+@@ -691,11 +694,12 @@ struct posix_acl *
posix_acl_from_xattr(struct user_namespace *user_ns,
const void *value, size_t size)
{
@@ -113420,7 +113730,7 @@ index e11ea5f..20e2d4d 100644
if (!value)
return NULL;
-@@ -687,12 +691,18 @@ posix_acl_from_xattr(struct user_namespace *user_ns,
+@@ -721,12 +725,18 @@ posix_acl_from_xattr(struct user_namespace *user_ns,
switch(acl_e->e_tag) {
case ACL_USER_OBJ:
@@ -113439,7 +113749,7 @@ index e11ea5f..20e2d4d 100644
acl_e->e_uid =
make_kuid(user_ns,
le32_to_cpu(entry->e_id));
-@@ -700,6 +710,7 @@ posix_acl_from_xattr(struct user_namespace *user_ns,
+@@ -734,6 +744,7 @@ posix_acl_from_xattr(struct user_namespace *user_ns,
goto fail;
break;
case ACL_GROUP:
@@ -113483,7 +113793,7 @@ index 1ade120..a86f1a2 100644
help
Various /proc files exist to monitor process memory utilization:
diff --git a/fs/proc/array.c b/fs/proc/array.c
-index b6c00ce..ab37ad1 100644
+index 88c7de1..3e4b510 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -60,6 +60,7 @@
@@ -113494,7 +113804,7 @@ index b6c00ce..ab37ad1 100644
#include <linux/proc_fs.h>
#include <linux/ioport.h>
#include <linux/uaccess.h>
-@@ -351,6 +352,21 @@ static void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
+@@ -369,6 +370,21 @@ static void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
cpumask_pr_args(&task->cpus_allowed));
}
@@ -113516,7 +113826,7 @@ index b6c00ce..ab37ad1 100644
int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
-@@ -369,9 +385,24 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
+@@ -387,9 +403,24 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
task_cpus_allowed(m, task);
cpuset_task_status_allowed(m, task);
task_context_switch_counts(m, task);
@@ -113541,7 +113851,7 @@ index b6c00ce..ab37ad1 100644
static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task, int whole)
{
-@@ -393,6 +424,13 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -411,6 +442,13 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
char tcomm[sizeof(task->comm)];
unsigned long flags;
@@ -113555,7 +113865,7 @@ index b6c00ce..ab37ad1 100644
state = *get_task_state(task);
vsize = eip = esp = 0;
permitted = ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS | PTRACE_MODE_NOAUDIT);
-@@ -463,6 +501,19 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -481,6 +519,19 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
gtime = task_gtime(task);
}
@@ -113575,7 +113885,7 @@ index b6c00ce..ab37ad1 100644
/* scale priority and nice values from timeslices to -20..20 */
/* to make it look like a "normal" Unix priority/nice value */
priority = task_prio(task);
-@@ -494,9 +545,15 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -512,9 +563,15 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
seq_put_decimal_ull(m, ' ', vsize);
seq_put_decimal_ull(m, ' ', mm ? get_mm_rss(mm) : 0);
seq_put_decimal_ull(m, ' ', rsslim);
@@ -113591,7 +113901,7 @@ index b6c00ce..ab37ad1 100644
seq_put_decimal_ull(m, ' ', esp);
seq_put_decimal_ull(m, ' ', eip);
/* The signal information here is obsolete.
-@@ -530,7 +587,11 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
+@@ -548,7 +605,11 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
seq_put_decimal_ull(m, ' ', cputime_to_clock_t(gtime));
seq_put_decimal_ll(m, ' ', cputime_to_clock_t(cgtime));
@@ -113604,7 +113914,7 @@ index b6c00ce..ab37ad1 100644
seq_put_decimal_ull(m, ' ', mm->start_data);
seq_put_decimal_ull(m, ' ', mm->end_data);
seq_put_decimal_ull(m, ' ', mm->start_brk);
-@@ -568,8 +629,15 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
+@@ -586,8 +647,15 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
unsigned long size = 0, resident = 0, shared = 0, text = 0, data = 0;
@@ -113621,7 +113931,7 @@ index b6c00ce..ab37ad1 100644
if (mm) {
size = task_statm(mm, &shared, &text, &data, &resident);
mmput(mm);
-@@ -592,6 +660,21 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
+@@ -610,6 +678,21 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
return 0;
}
@@ -113644,7 +113954,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 0d163a8..8af6140 100644
+index a11eb71..d48ca0e 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -113,6 +113,14 @@ struct pid_entry {
@@ -113997,7 +114307,7 @@ index 0d163a8..8af6140 100644
rcu_read_unlock();
} else {
inode->i_uid = GLOBAL_ROOT_UID;
-@@ -2369,6 +2507,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
+@@ -2374,6 +2512,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
if (!task)
goto out_no_task;
@@ -114007,7 +114317,7 @@ index 0d163a8..8af6140 100644
/*
* Yes, it does not scale. And it should not. Don't add
* new entries into /proc/<tgid>/ without very good reasons.
-@@ -2399,6 +2540,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
+@@ -2404,6 +2545,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
if (!task)
return -ENOENT;
@@ -114017,7 +114327,7 @@ index 0d163a8..8af6140 100644
if (!dir_emit_dots(file, ctx))
goto out;
-@@ -2811,7 +2955,9 @@ static const struct inode_operations proc_task_inode_operations;
+@@ -2816,7 +2960,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),
@@ -114027,7 +114337,7 @@ index 0d163a8..8af6140 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
-@@ -2829,7 +2975,7 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2834,7 +2980,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),
@@ -114036,7 +114346,7 @@ index 0d163a8..8af6140 100644
ONE("syscall", S_IRUSR, proc_pid_syscall),
#endif
REG("cmdline", S_IRUGO, proc_pid_cmdline_ops),
-@@ -2854,10 +3000,10 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2859,10 +3005,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
@@ -114049,7 +114359,7 @@ index 0d163a8..8af6140 100644
ONE("stack", S_IRUSR, proc_pid_stack),
#endif
#ifdef CONFIG_SCHED_INFO
-@@ -2891,6 +3037,9 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2896,6 +3042,9 @@ static const struct pid_entry tgid_base_stuff[] = {
#ifdef CONFIG_HARDWALL
ONE("hardwall", S_IRUGO, proc_pid_hardwall),
#endif
@@ -114059,7 +114369,7 @@ index 0d163a8..8af6140 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),
-@@ -3024,7 +3173,14 @@ static int proc_pid_instantiate(struct inode *dir,
+@@ -3029,7 +3178,14 @@ static int proc_pid_instantiate(struct inode *dir,
if (!inode)
goto out;
@@ -114074,7 +114384,7 @@ index 0d163a8..8af6140 100644
inode->i_op = &proc_tgid_base_inode_operations;
inode->i_fop = &proc_tgid_base_operations;
inode->i_flags|=S_IMMUTABLE;
-@@ -3062,7 +3218,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
+@@ -3067,7 +3223,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
if (!task)
goto out;
@@ -114086,16 +114396,16 @@ index 0d163a8..8af6140 100644
put_task_struct(task);
out:
return ERR_PTR(result);
-@@ -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),
+@@ -3221,7 +3381,7 @@ static const struct pid_entry tid_base_stuff[] = {
+ NOD("comm", S_IFREG|S_IRUGO|S_IWUSR,
+ &proc_tid_comm_inode_operations,
+ &proc_pid_set_comm_operations, {}),
-#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
+#if defined(CONFIG_HAVE_ARCH_TRACEHOOK) && !defined(CONFIG_GRKERNSEC_PROC_MEMMAP)
ONE("syscall", S_IRUSR, proc_pid_syscall),
#endif
REG("cmdline", S_IRUGO, proc_pid_cmdline_ops),
-@@ -3203,10 +3363,10 @@ static const struct pid_entry tid_base_stuff[] = {
+@@ -3248,10 +3408,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
@@ -114141,7 +114451,7 @@ index 50493ed..248166b 100644
}
fs_initcall(proc_devices_init);
diff --git a/fs/proc/fd.c b/fs/proc/fd.c
-index 56afa5e..cb7934e 100644
+index 01df23c..9b6c8f9 100644
--- a/fs/proc/fd.c
+++ b/fs/proc/fd.c
@@ -27,7 +27,8 @@ static int seq_show(struct seq_file *m, void *v)
@@ -114175,7 +114485,7 @@ index 56afa5e..cb7934e 100644
return rv;
diff --git a/fs/proc/generic.c b/fs/proc/generic.c
-index ff3ffc7..1aec0a3 100644
+index c633476..881fce8 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -22,6 +22,7 @@
@@ -114220,7 +114530,7 @@ index ff3ffc7..1aec0a3 100644
* These are the generic /proc directory operations. They
* use the in-memory "struct proc_dir_entry" tree to parse
@@ -321,6 +341,12 @@ static const struct file_operations proc_dir_operations = {
- .iterate = proc_readdir,
+ .iterate_shared = proc_readdir,
};
+static const struct file_operations proc_dir_restricted_operations = {
@@ -114523,7 +114833,7 @@ index f8595e8..e0d13cbd 100644
seq_putc(m, '\n');
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c
-index 350984a..a78a18c 100644
+index c8bbc68..d0f82d5 100644
--- a/fs/proc/proc_net.c
+++ b/fs/proc/proc_net.c
@@ -23,9 +23,27 @@
@@ -114598,7 +114908,7 @@ index 350984a..a78a18c 100644
.exit = proc_net_ns_exit,
};
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
-index fe5b6e6..cd2913c 100644
+index 5e57c3e..1aea40d 100644
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -11,13 +11,21 @@
@@ -114700,17 +115010,15 @@ index fe5b6e6..cd2913c 100644
/* careful: calling conventions are nasty here */
res = count;
error = table->proc_handler(table, write, buf, &res, ppos);
-@@ -635,6 +672,9 @@ static bool proc_sys_fill_cache(struct file *file,
+@@ -639,6 +676,7 @@ static bool proc_sys_fill_cache(struct file *file,
return false;
- } else {
- d_set_d_op(child, &proc_sys_dentry_operations);
-+
-+ gr_handle_proc_create(child, inode);
-+
- d_add(child, inode);
}
- } else {
-@@ -678,6 +718,9 @@ static int scan(struct ctl_table_header *head, struct ctl_table *table,
+ d_set_d_op(child, &proc_sys_dentry_operations);
++ gr_handle_proc_create(child, inode);
+ d_add(child, inode);
+ }
+ }
+@@ -679,6 +717,9 @@ static int scan(struct ctl_table_header *head, struct ctl_table *table,
if ((*pos)++ < ctx->pos)
return true;
@@ -114720,7 +115028,7 @@ index fe5b6e6..cd2913c 100644
if (unlikely(S_ISLNK(table->mode)))
res = proc_sys_link_fill_cache(file, ctx, head, table);
else
-@@ -771,6 +814,9 @@ static int proc_sys_getattr(struct vfsmount *mnt, struct dentry *dentry, struct
+@@ -772,6 +813,9 @@ static int proc_sys_getattr(struct vfsmount *mnt, struct dentry *dentry, struct
if (IS_ERR(head))
return PTR_ERR(head);
@@ -114730,7 +115038,7 @@ index fe5b6e6..cd2913c 100644
generic_fillattr(inode, stat);
if (table)
stat->mode = (stat->mode & S_IFMT) | table->mode;
-@@ -793,13 +839,13 @@ static const struct file_operations proc_sys_dir_file_operations = {
+@@ -794,13 +838,13 @@ static const struct file_operations proc_sys_dir_file_operations = {
.llseek = generic_file_llseek,
};
@@ -114746,7 +115054,7 @@ index fe5b6e6..cd2913c 100644
.lookup = proc_sys_lookup,
.permission = proc_sys_permission,
.setattr = proc_sys_setattr,
-@@ -876,7 +922,7 @@ static struct ctl_dir *find_subdir(struct ctl_dir *dir,
+@@ -877,7 +921,7 @@ static struct ctl_dir *find_subdir(struct ctl_dir *dir,
static struct ctl_dir *new_dir(struct ctl_table_set *set,
const char *name, int namelen)
{
@@ -114755,7 +115063,7 @@ index fe5b6e6..cd2913c 100644
struct ctl_dir *new;
struct ctl_node *node;
char *new_name;
-@@ -888,7 +934,7 @@ static struct ctl_dir *new_dir(struct ctl_table_set *set,
+@@ -889,7 +933,7 @@ static struct ctl_dir *new_dir(struct ctl_table_set *set,
return NULL;
node = (struct ctl_node *)(new + 1);
@@ -114764,7 +115072,7 @@ index fe5b6e6..cd2913c 100644
new_name = (char *)(table + 2);
memcpy(new_name, name, namelen);
new_name[namelen] = '\0';
-@@ -1057,7 +1103,8 @@ static int sysctl_check_table(const char *path, struct ctl_table *table)
+@@ -1058,7 +1102,8 @@ static int sysctl_check_table(const char *path, struct ctl_table *table)
static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table *table,
struct ctl_table_root *link_root)
{
@@ -114774,7 +115082,7 @@ index fe5b6e6..cd2913c 100644
struct ctl_table_header *links;
struct ctl_node *node;
char *link_name;
-@@ -1080,7 +1127,7 @@ static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table
+@@ -1081,7 +1126,7 @@ static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table
return NULL;
node = (struct ctl_node *)(links + 1);
@@ -114783,7 +115091,7 @@ index fe5b6e6..cd2913c 100644
link_name = (char *)&link_table[nr_entries + 1];
for (link = link_table, entry = table; entry->procname; link++, entry++) {
-@@ -1328,8 +1375,8 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
+@@ -1329,8 +1374,8 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
struct ctl_table_header ***subheader, struct ctl_table_set *set,
struct ctl_table *table)
{
@@ -114794,7 +115102,7 @@ index fe5b6e6..cd2913c 100644
int nr_files = 0;
int nr_dirs = 0;
int err = -ENOMEM;
-@@ -1341,10 +1388,9 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
+@@ -1342,10 +1387,9 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
nr_files++;
}
@@ -114806,7 +115114,7 @@ index fe5b6e6..cd2913c 100644
files = kzalloc(sizeof(struct ctl_table) * (nr_files + 1),
GFP_KERNEL);
if (!files)
-@@ -1362,7 +1408,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
+@@ -1363,7 +1407,7 @@ static int register_leaf_sysctl_tables(const char *path, char *pos,
/* Register everything except a directory full of subdirectories */
if (nr_files || !nr_dirs) {
struct ctl_table_header *header;
@@ -114816,7 +115124,7 @@ index fe5b6e6..cd2913c 100644
kfree(ctl_table_arg);
goto out;
diff --git a/fs/proc/root.c b/fs/proc/root.c
-index ec649c9..55e45e9 100644
+index 0670278..e3899d0 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -194,7 +194,15 @@ void __init proc_root_init(void)
@@ -114953,7 +115261,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 5415835..0095e58 100644
+index 4648c7f..9f5a541 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -15,12 +15,19 @@
@@ -115149,7 +115457,7 @@ index 5415835..0095e58 100644
mss.resident >> 10,
(unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
mss.shared_clean >> 10,
-@@ -1426,7 +1477,7 @@ static int pagemap_open(struct inode *inode, struct file *file)
+@@ -1433,7 +1484,7 @@ static int pagemap_open(struct inode *inode, struct file *file)
{
struct mm_struct *mm;
@@ -115158,7 +115466,7 @@ index 5415835..0095e58 100644
if (IS_ERR(mm))
return PTR_ERR(mm);
file->private_data = mm;
-@@ -1629,6 +1680,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+@@ -1636,6 +1687,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
char buffer[64];
int nid;
@@ -115172,7 +115480,7 @@ index 5415835..0095e58 100644
if (!mm)
return 0;
-@@ -1643,11 +1701,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+@@ -1650,11 +1708,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);
}
@@ -115230,7 +115538,7 @@ index faacb0c..b185575 100644
int err = PTR_ERR(priv->mm);
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
-index 8afe10c..61d505b 100644
+index 8ab782d..ef5bcbd 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,
@@ -115300,7 +115608,7 @@ index f23b5c4..da5d2f3 100644
if (sbi->s_bytesex == BYTESEX_LE)
return le32_to_cpu((__force __le32)n);
diff --git a/fs/quota/netlink.c b/fs/quota/netlink.c
-index d07a2f9..380906a 100644
+index 8b25267..0706a93 100644
--- a/fs/quota/netlink.c
+++ b/fs/quota/netlink.c
@@ -42,7 +42,7 @@ static struct genl_family quota_genl_family = {
@@ -115322,7 +115630,7 @@ index d07a2f9..380906a 100644
if (!msg_head) {
printk(KERN_ERR
diff --git a/fs/read_write.c b/fs/read_write.c
-index cf377cf..86fd2b6 100644
+index 933b53a..94e4df4 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -23,7 +23,8 @@
@@ -115335,7 +115643,7 @@ index cf377cf..86fd2b6 100644
typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *);
const struct file_operations generic_ro_fops = {
-@@ -545,7 +546,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
+@@ -526,7 +527,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
old_fs = get_fs();
set_fs(get_ds());
@@ -115344,7 +115652,7 @@ index cf377cf..86fd2b6 100644
if (count > MAX_RW_COUNT)
count = MAX_RW_COUNT;
ret = __vfs_write(file, p, count, pos);
-@@ -714,7 +715,7 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
+@@ -700,7 +701,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,
@@ -115353,7 +115661,7 @@ index cf377cf..86fd2b6 100644
{
ssize_t ret = 0;
-@@ -725,7 +726,10 @@ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter,
+@@ -711,7 +712,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;
@@ -115365,7 +115673,7 @@ index cf377cf..86fd2b6 100644
if (nr < 0) {
if (!ret)
-@@ -829,7 +833,8 @@ static ssize_t do_readv_writev(int type, struct file *file,
+@@ -815,7 +819,8 @@ static ssize_t do_readv_writev(int type, struct file *file,
struct iovec *iov = iovstack;
struct iov_iter iter;
ssize_t ret;
@@ -115375,7 +115683,7 @@ index cf377cf..86fd2b6 100644
iter_fn_t iter_fn;
ret = import_iovec(type, uvector, nr_segs,
-@@ -845,10 +850,12 @@ static ssize_t do_readv_writev(int type, struct file *file,
+@@ -831,10 +836,12 @@ static ssize_t do_readv_writev(int type, struct file *file,
goto out;
if (type == READ) {
@@ -115390,7 +115698,7 @@ index cf377cf..86fd2b6 100644
iter_fn = file->f_op->write_iter;
file_start_write(file);
}
-@@ -856,7 +863,7 @@ static ssize_t do_readv_writev(int type, struct file *file,
+@@ -842,7 +849,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, flags);
else
@@ -115399,7 +115707,7 @@ index cf377cf..86fd2b6 100644
if (type != READ)
file_end_write(file);
-@@ -1054,7 +1061,8 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
+@@ -1040,7 +1047,8 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
struct iovec *iov = iovstack;
struct iov_iter iter;
ssize_t ret;
@@ -115409,7 +115717,7 @@ index cf377cf..86fd2b6 100644
iter_fn_t iter_fn;
ret = compat_import_iovec(type, uvector, nr_segs,
-@@ -1070,10 +1078,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
+@@ -1056,10 +1064,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
goto out;
if (type == READ) {
@@ -115424,7 +115732,7 @@ index cf377cf..86fd2b6 100644
iter_fn = file->f_op->write_iter;
file_start_write(file);
}
-@@ -1081,7 +1091,7 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
+@@ -1067,7 +1077,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, flags);
else
@@ -115434,7 +115742,7 @@ index cf377cf..86fd2b6 100644
if (type != READ)
file_end_write(file);
diff --git a/fs/readdir.c b/fs/readdir.c
-index e69ef3b..ffb5456 100644
+index 9d0212c..da1afd1 100644
--- a/fs/readdir.c
+++ b/fs/readdir.c
@@ -18,6 +18,7 @@
@@ -115445,7 +115753,7 @@ index e69ef3b..ffb5456 100644
#include <asm/uaccess.h>
-@@ -71,6 +72,7 @@ struct old_linux_dirent {
+@@ -84,6 +85,7 @@ struct old_linux_dirent {
struct readdir_callback {
struct dir_context ctx;
struct old_linux_dirent __user * dirent;
@@ -115453,7 +115761,7 @@ index e69ef3b..ffb5456 100644
int result;
};
-@@ -89,6 +91,10 @@ static int fillonedir(struct dir_context *ctx, const char *name, int namlen,
+@@ -102,6 +104,10 @@ static int fillonedir(struct dir_context *ctx, const char *name, int namlen,
buf->result = -EOVERFLOW;
return -EOVERFLOW;
}
@@ -115464,7 +115772,7 @@ index e69ef3b..ffb5456 100644
buf->result++;
dirent = buf->dirent;
if (!access_ok(VERIFY_WRITE, dirent,
-@@ -120,6 +126,7 @@ SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
+@@ -133,6 +139,7 @@ SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -115472,7 +115780,7 @@ index e69ef3b..ffb5456 100644
error = iterate_dir(f.file, &buf.ctx);
if (buf.result)
error = buf.result;
-@@ -145,6 +152,7 @@ struct getdents_callback {
+@@ -158,6 +165,7 @@ struct getdents_callback {
struct dir_context ctx;
struct linux_dirent __user * current_dir;
struct linux_dirent __user * previous;
@@ -115480,7 +115788,7 @@ index e69ef3b..ffb5456 100644
int count;
int error;
};
-@@ -167,6 +175,10 @@ static int filldir(struct dir_context *ctx, const char *name, int namlen,
+@@ -180,6 +188,10 @@ static int filldir(struct dir_context *ctx, const char *name, int namlen,
buf->error = -EOVERFLOW;
return -EOVERFLOW;
}
@@ -115490,8 +115798,8 @@ index e69ef3b..ffb5456 100644
+
dirent = buf->previous;
if (dirent) {
- if (__put_user(offset, &dirent->d_off))
-@@ -212,6 +224,7 @@ SYSCALL_DEFINE3(getdents, unsigned int, fd,
+ if (signal_pending(current))
+@@ -227,6 +239,7 @@ SYSCALL_DEFINE3(getdents, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -115499,7 +115807,7 @@ index e69ef3b..ffb5456 100644
error = iterate_dir(f.file, &buf.ctx);
if (error >= 0)
error = buf.error;
-@@ -230,6 +243,7 @@ struct getdents_callback64 {
+@@ -245,6 +258,7 @@ struct getdents_callback64 {
struct dir_context ctx;
struct linux_dirent64 __user * current_dir;
struct linux_dirent64 __user * previous;
@@ -115507,7 +115815,7 @@ index e69ef3b..ffb5456 100644
int count;
int error;
};
-@@ -246,6 +260,10 @@ static int filldir64(struct dir_context *ctx, const char *name, int namlen,
+@@ -261,6 +275,10 @@ static int filldir64(struct dir_context *ctx, const char *name, int namlen,
buf->error = -EINVAL; /* only used if we fail.. */
if (reclen > buf->count)
return -EINVAL;
@@ -115517,8 +115825,8 @@ index e69ef3b..ffb5456 100644
+
dirent = buf->previous;
if (dirent) {
- if (__put_user(offset, &dirent->d_off))
-@@ -293,13 +311,13 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd,
+ if (signal_pending(current))
+@@ -310,13 +328,13 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -115617,10 +115925,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 b8f2d1e..5922f16 100644
+index c72c16c..9b21de1 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
-@@ -1872,6 +1872,10 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
+@@ -1877,6 +1877,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);
@@ -115632,7 +115940,7 @@ index b8f2d1e..5922f16 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 8692939..44f4aa3 100644
+index 8ed9da5..4ee3bb4 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -20,6 +20,7 @@
@@ -115643,7 +115951,7 @@ index 8692939..44f4aa3 100644
#include <linux/personality.h> /* for STICKY_TIMEOUTS */
#include <linux/file.h>
#include <linux/fdtable.h>
-@@ -717,7 +718,7 @@ SYSCALL_DEFINE6(pselect6, int, n, fd_set __user *, inp, fd_set __user *, outp,
+@@ -723,7 +724,7 @@ SYSCALL_DEFINE6(pselect6, int, n, fd_set __user *, inp, fd_set __user *, outp,
#ifdef __ARCH_WANT_SYS_OLD_SELECT
struct sel_arg_struct {
@@ -115652,7 +115960,7 @@ index 8692939..44f4aa3 100644
fd_set __user *inp, *outp, *exp;
struct timeval __user *tvp;
};
-@@ -880,6 +881,7 @@ int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds,
+@@ -886,6 +887,7 @@ int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds,
struct poll_list *walk = head;
unsigned long todo = nfds;
@@ -115933,7 +116241,7 @@ index dd9bf7e..3d55c3e 100644
pipe_unlock(ipipe);
diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c
-index 1e9de96..a77cc8c 100644
+index 1548b37..0624869 100644
--- a/fs/squashfs/xattr.c
+++ b/fs/squashfs/xattr.c
@@ -46,8 +46,8 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
@@ -116014,7 +116322,7 @@ index bc045c7..68725c1 100644
generic_fillattr(inode, stat);
return 0;
diff --git a/fs/super.c b/fs/super.c
-index 74914b1..c570339 100644
+index d78b984..2d01260 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -348,7 +348,8 @@ EXPORT_SYMBOL(deactivate_super);
@@ -116306,7 +116614,7 @@ index 8d974c4..b82f6ec 100644
{
if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
-index 66cdb44..2eb05e1 100644
+index 2d97952..115b9d9 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -432,7 +432,7 @@ static int userfaultfd_release(struct inode *inode, struct file *file)
@@ -116316,8 +116624,8 @@ index 66cdb44..2eb05e1 100644
- ACCESS_ONCE(ctx->released) = true;
+ ACCESS_ONCE_RW(ctx->released) = true;
- /*
- * Flush page faults out of all CPUs. NOTE: all page faults
+ if (!mmget_not_zero(mm))
+ goto wakeup;
diff --git a/fs/utimes.c b/fs/utimes.c
index 85c40f4..52fcd23 100644
--- a/fs/utimes.c
@@ -116344,7 +116652,7 @@ index 85c40f4..52fcd23 100644
error = notify_change(path->dentry, &newattrs, &delegated_inode);
inode_unlock(inode);
diff --git a/fs/xattr.c b/fs/xattr.c
-index 4861322..7266aed 100644
+index 4beafc4..02b5e0d 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -208,6 +208,27 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
@@ -116363,7 +116671,7 @@ index 4861322..7266aed 100644
+ return error;
+
+ if (inode->i_op->getxattr)
-+ error = inode->i_op->getxattr(dentry, XATTR_NAME_USER_PAX_FLAGS, value, size);
++ error = inode->i_op->getxattr(dentry, inode, XATTR_NAME_USER_PAX_FLAGS, value, size);
+ else
+ error = -EOPNOTSUPP;
+
@@ -116465,7 +116773,7 @@ index 4861322..7266aed 100644
}
fdput(f);
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
-index ce41d7f..0372726 100644
+index 932381c..a316c7b 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -557,7 +557,7 @@ xfs_bmap_validate_ret(
@@ -116500,7 +116808,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 93b3ab0..3a7a8bb 100644
+index f44f799..22e0c0f 100644
--- a/fs/xfs/xfs_dir2_readdir.c
+++ b/fs/xfs/xfs_dir2_readdir.c
@@ -140,7 +140,12 @@ xfs_dir2_sf_getdents(
@@ -116517,159 +116825,8 @@ index 93b3ab0..3a7a8bb 100644
xfs_dir3_get_dtype(dp->i_mount, filetype)))
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 bf2d607..57fcd59 100644
---- a/fs/xfs/xfs_icache.c
-+++ b/fs/xfs/xfs_icache.c
-@@ -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);
-
-- kmem_zone_free(xfs_inode_zone, ip);
--}
--
--void
--xfs_inode_free(
-- struct xfs_inode *ip)
--{
- switch (VFS_I(ip)->i_mode & S_IFMT) {
- case S_IFREG:
- case S_IFDIR:
-@@ -118,6 +111,25 @@ xfs_inode_free(
- ip->i_itemp = NULL;
- }
-
-+ kmem_zone_free(xfs_inode_zone, ip);
-+}
-+
-+static void
-+__xfs_inode_free(
-+ struct xfs_inode *ip)
-+{
-+ /* asserts to verify all state is correct here */
-+ ASSERT(atomic_read(&ip->i_pincount) == 0);
-+ ASSERT(!xfs_isiflocked(ip));
-+ XFS_STATS_DEC(ip->i_mount, vn_active);
-+
-+ call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback);
-+}
-+
-+void
-+xfs_inode_free(
-+ struct xfs_inode *ip)
-+{
- /*
- * Because we use RCU freeing we need to ensure the inode always
- * appears to be reclaimed with an invalid inode number when in the
-@@ -129,12 +141,7 @@ xfs_inode_free(
- ip->i_ino = 0;
- spin_unlock(&ip->i_flags_lock);
-
-- /* asserts to verify all state is correct here */
-- ASSERT(atomic_read(&ip->i_pincount) == 0);
-- ASSERT(!xfs_isiflocked(ip));
-- XFS_STATS_DEC(ip->i_mount, vn_active);
--
-- call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback);
-+ __xfs_inode_free(ip);
- }
-
- /*
-@@ -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);
-- radix_tree_tag_set(&ip->i_mount->m_perag_tree,
-- XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino),
-+ radix_tree_tag_set(&ip->i_mount->m_perag_tree, pag->pag_agno,
- XFS_ICI_RECLAIM_TAG);
- spin_unlock(&ip->i_mount->m_perag_lock);
-
-@@ -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);
-- radix_tree_tag_clear(&ip->i_mount->m_perag_tree,
-- XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino),
-+ radix_tree_tag_clear(&ip->i_mount->m_perag_tree, pag->pag_agno,
- XFS_ICI_RECLAIM_TAG);
- spin_unlock(&ip->i_mount->m_perag_lock);
- trace_xfs_perag_clear_reclaim(ip->i_mount, pag->pag_agno,
-@@ -929,6 +934,7 @@ xfs_reclaim_inode(
- int sync_mode)
- {
- struct xfs_buf *bp = NULL;
-+ xfs_ino_t ino = ip->i_ino; /* for radix_tree_delete */
- int error;
-
- restart:
-@@ -993,6 +999,22 @@ restart:
-
- xfs_iflock(ip);
- reclaim:
-+ /*
-+ * Because we use RCU freeing we need to ensure the inode always appears
-+ * to be reclaimed with an invalid inode number when in the free state.
-+ * We do this as early as possible under the ILOCK and flush lock so
-+ * that xfs_iflush_cluster() can be guaranteed to detect races with us
-+ * here. By doing this, we guarantee that once xfs_iflush_cluster has
-+ * locked both the XFS_ILOCK and the flush lock that it will see either
-+ * a valid, flushable inode that will serialise correctly against the
-+ * locks below, or it will see a clean (and invalid) inode that it can
-+ * skip.
-+ */
-+ spin_lock(&ip->i_flags_lock);
-+ ip->i_flags = XFS_IRECLAIM;
-+ ip->i_ino = 0;
-+ spin_unlock(&ip->i_flags_lock);
-+
- xfs_ifunlock(ip);
- xfs_iunlock(ip, XFS_ILOCK_EXCL);
-
-@@ -1006,7 +1028,7 @@ reclaim:
- */
- spin_lock(&pag->pag_ici_lock);
- if (!radix_tree_delete(&pag->pag_ici_root,
-- XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino)))
-+ XFS_INO_TO_AGINO(ip->i_mount, ino)))
- ASSERT(0);
- __xfs_inode_clear_reclaim(pag, ip);
- spin_unlock(&pag->pag_ici_lock);
-@@ -1023,7 +1045,7 @@ reclaim:
- xfs_qm_dqdetach(ip);
- xfs_iunlock(ip, XFS_ILOCK_EXCL);
-
-- xfs_inode_free(ip);
-+ __xfs_inode_free(ip);
- return error;
-
- out_ifunlock:
-diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
-index 3cbc903..e3b2798 100644
---- a/fs/xfs/xfs_inode.c
-+++ b/fs/xfs/xfs_inode.c
-@@ -3239,6 +3239,19 @@ xfs_iflush_cluster(
- continue;
- }
-
-+
-+ /*
-+ * Check the inode number again, just to be certain we are not
-+ * racing with freeing in xfs_reclaim_inode(). See the comments
-+ * in that function for more information as to why the initial
-+ * check is not sufficient.
-+ */
-+ if (!iq->i_ino) {
-+ xfs_ifunlock(iq);
-+ xfs_iunlock(iq, XFS_ILOCK_SHARED);
-+ continue;
-+ }
-+
- /*
- * 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 bcb6c19..7acb0cb 100644
+index 63a6ff2..51ebbf5 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -121,7 +121,7 @@ xfs_find_handle(
@@ -116681,7 +116838,7 @@ index bcb6c19..7acb0cb 100644
copy_to_user(hreq->ohandlen, &hsize, sizeof(__s32)))
goto out_put;
-@@ -1592,6 +1592,12 @@ xfs_ioc_swapext(
+@@ -1581,6 +1581,12 @@ xfs_ioc_swapext(
goto out_put_tmp_file;
}
@@ -117989,10 +118146,10 @@ index 0000000..e136e5f
+endif
diff --git a/grsecurity/gracl.c b/grsecurity/gracl.c
new file mode 100644
-index 0000000..3c66319
+index 0000000..a006030
--- /dev/null
+++ b/grsecurity/gracl.c
-@@ -0,0 +1,2757 @@
+@@ -0,0 +1,2773 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
@@ -120443,16 +120600,32 @@ index 0000000..3c66319
+ case PTRACE_POKETEXT:
+ case PTRACE_POKEDATA:
+ case PTRACE_POKEUSR:
-+#if !defined(CONFIG_PPC32) && !defined(CONFIG_PPC64) && !defined(CONFIG_PARISC) && !defined(CONFIG_ALPHA) && !defined(CONFIG_IA64)
++#if !defined(CONFIG_PPC32) && !defined(CONFIG_PPC64) && !defined(CONFIG_PARISC) && !defined(CONFIG_ALPHA) && !defined(CONFIG_IA64) && !defined(CONFIG_ARM64)
+ case PTRACE_SETREGS:
+ case PTRACE_SETFPREGS:
+#endif
++#ifdef CONFIG_COMPAT
++#ifdef CONFIG_ARM64
++ case COMPAT_PTRACE_SETREGS:
++ case COMPAT_PTRACE_SETVFPREGS:
++#ifdef CONFIG_HAVE_HW_BREAKPOINT
++ case COMPAT_PTRACE_SETHBPREGS:
++#endif
++#endif
++#endif
+#ifdef CONFIG_X86
+ case PTRACE_SETFPXREGS:
+#endif
+#ifdef CONFIG_ALTIVEC
+ case PTRACE_SETVRREGS:
+#endif
++#ifdef CONFIG_ARM
++ case PTRACE_SET_SYSCALL:
++ case PTRACE_SETVFPREGS:
++#ifdef CONFIG_HAVE_HW_BREAKPOINT
++ case PTRACE_SETHBPREGS:
++#endif
++#endif
+ return 1;
+ default:
+ return 0;
@@ -121694,7 +121867,7 @@ index 0000000..fce7f71
+}
diff --git a/grsecurity/gracl_ip.c b/grsecurity/gracl_ip.c
new file mode 100644
-index 0000000..950647c
+index 0000000..5da5304
--- /dev/null
+++ b/grsecurity/gracl_ip.c
@@ -0,0 +1,387 @@
@@ -121769,7 +121942,7 @@ index 0000000..950647c
+ "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", "kcm"
++ "nfc", "vsock", "kcm", "qipcrtr"
+ };
+
+const char *
@@ -128483,7 +128656,7 @@ index 9ceb03b..62b0b8f 100644
#define local_add_unless(l, _a, u) atomic_long_add_unless((&(l)->a), (_a), (u))
#define local_inc_not_zero(l) atomic_long_inc_not_zero(&(l)->a)
diff --git a/include/asm-generic/pgtable-nopmd.h b/include/asm-generic/pgtable-nopmd.h
-index 725612b..9cc513a 100644
+index 725612b..8458d85 100644
--- a/include/asm-generic/pgtable-nopmd.h
+++ b/include/asm-generic/pgtable-nopmd.h
@@ -1,14 +1,19 @@
@@ -128522,6 +128695,14 @@ index 725612b..9cc513a 100644
/*
* The "pud_xxx()" functions here are trivial for a folded two-level
* setup: the pmd is never bad, and a pmd always exists (as it's folded
+@@ -33,6 +33,7 @@ static inline void pud_clear(pud_t *pud) { }
+ #define pmd_ERROR(pmd) (pud_ERROR((pmd).pud))
+
+ #define pud_populate(mm, pmd, pte) do { } while (0)
++#define pud_populate_kernel(mm, pmd, pte) do { } while (0)
+
+ /*
+ * (pmds are folded into puds so this doesn't get actually called,
diff --git a/include/asm-generic/pgtable-nopud.h b/include/asm-generic/pgtable-nopud.h
index 810431d..0ec4804f 100644
--- a/include/asm-generic/pgtable-nopud.h
@@ -128565,7 +128746,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 9401f48..7e86f97 100644
+index d4458b6..34e3f46 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)
@@ -128629,10 +128810,10 @@ 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 339125b..903c9bf 100644
+index 081d0f2..0cd1488 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
-@@ -256,6 +256,7 @@
+@@ -258,6 +258,7 @@
VMLINUX_SYMBOL(__start_rodata) = .; \
*(.rodata) *(.rodata.*) \
*(.data..ro_after_init) /* Read only after init */ \
@@ -128640,7 +128821,7 @@ index 339125b..903c9bf 100644
*(__vermagic) /* Kernel version magic */ \
. = ALIGN(8); \
VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \
-@@ -522,6 +523,7 @@
+@@ -524,6 +525,7 @@
KERNEL_CTORS() \
MCOUNT_REC() \
*(.init.rodata) \
@@ -128648,16 +128829,16 @@ index 339125b..903c9bf 100644
FTRACE_EVENTS() \
TRACE_SYSCALLS() \
KPROBE_BLACKLIST() \
-@@ -544,6 +546,8 @@
+@@ -547,6 +549,8 @@
#define EXIT_DATA \
*(.exit.data) \
+ *(.exit.rodata) \
+ *(.exit.rodata.*) \
+ *(.fini_array) \
+ *(.dtors) \
MEM_DISCARD(exit.data) \
- MEM_DISCARD(exit.rodata)
-
-@@ -760,17 +764,18 @@
+@@ -766,17 +770,18 @@
* section in the linker script will go there too. @phdr should have
* a leading colon.
*
@@ -128680,7 +128861,7 @@ index 339125b..903c9bf 100644
/**
* PERCPU_SECTION - define output section for percpu area, simple version
-@@ -832,12 +837,14 @@
+@@ -838,12 +843,14 @@
#define INIT_DATA_SECTION(initsetup_align) \
.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { \
@@ -128750,7 +128931,7 @@ index ede6b97..1f5b11f 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 3c8422c..251247f 100644
+index 84f1a8e..5ce8d8e 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -59,6 +59,7 @@
@@ -128788,7 +128969,7 @@ index 3c8422c..251247f 100644
/**
* Creates a driver or general drm_ioctl_desc array entry for the given
-@@ -656,7 +659,8 @@ struct drm_driver {
+@@ -665,7 +668,8 @@ struct drm_driver {
/* List of devices hanging off this driver with stealth attach. */
struct list_head legacy_dev_list;
@@ -128798,7 +128979,7 @@ index 3c8422c..251247f 100644
enum drm_minor_type {
DRM_MINOR_LEGACY,
-@@ -674,7 +678,8 @@ struct drm_info_list {
+@@ -683,7 +687,8 @@ struct drm_info_list {
int (*show)(struct seq_file*, void*); /** show callback */
u32 driver_features; /**< Required driver features for this entry */
void *data;
@@ -128808,7 +128989,7 @@ index 3c8422c..251247f 100644
/**
* debugfs node structure. This structure represents a debugfs file.
-@@ -763,7 +768,7 @@ struct drm_device {
+@@ -772,7 +777,7 @@ struct drm_device {
/** \name Usage Counters */
/*@{ */
@@ -128831,7 +129012,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 b61c2d4..7b8686d 100644
+index d4619dc..22e8e77 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 {
@@ -128852,7 +129033,7 @@ index b61c2d4..7b8686d 100644
/**
* 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 9094599..19d0c344 100644
+index 33466bf..3c53007 100644
--- a/include/drm/i915_pciids.h
+++ b/include/drm/i915_pciids.h
@@ -37,7 +37,7 @@
@@ -128905,7 +129086,7 @@ index 49a8284..9643967 100644
extern void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev);
diff --git a/include/keys/asymmetric-subtype.h b/include/keys/asymmetric-subtype.h
-index 4915d40..8b913c0 100644
+index 2480469..afcbfd4 100644
--- a/include/keys/asymmetric-subtype.h
+++ b/include/keys/asymmetric-subtype.h
@@ -37,7 +37,7 @@ struct asymmetric_key_subtype {
@@ -128979,7 +129160,7 @@ 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 506c353..10739bd 100644
+index e451534..8686854 100644
--- a/include/linux/atomic.h
+++ b/include/linux/atomic.h
@@ -91,6 +91,13 @@
@@ -129093,7 +129274,7 @@ index d04aa58..3de0da8 100644
(val << factor)) >> weight : \
(val << factor); \
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
-index 576e463..28fd926 100644
+index 314b3ca..81ca9c4 100644
--- a/include/linux/binfmts.h
+++ b/include/linux/binfmts.h
@@ -44,7 +44,7 @@ struct linux_binprm {
@@ -129105,7 +129286,7 @@ index 576e463..28fd926 100644
#define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0
#define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT)
-@@ -77,8 +77,10 @@ struct linux_binfmt {
+@@ -78,8 +78,10 @@ struct linux_binfmt {
int (*load_binary)(struct linux_binprm *);
int (*load_shlib)(struct file *);
int (*core_dump)(struct coredump_params *cprm);
@@ -129131,7 +129312,7 @@ index e9b0b9a..4fc3241 100644
if (small_const_nbits(nbits))
return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits));
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
-index defeaac..856d23d 100644
+index 299e76b..ef972c1 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -75,7 +75,7 @@ static inline int get_count_order(unsigned int count)
@@ -129266,10 +129447,10 @@ index c02e669..439bd4b 100644
}
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
-index 669e419..3cacec8 100644
+index 3d9cf32..04b0e9a 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
-@@ -1669,7 +1669,7 @@ struct block_device_operations {
+@@ -1683,7 +1683,7 @@ struct block_device_operations {
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
struct module *owner;
const struct pr_ops *pr_ops;
@@ -129279,7 +129460,7 @@ index 669e419..3cacec8 100644
extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,
unsigned long);
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h
-index afc1343..9735539 100644
+index 0f3172b..e26530f 100644
--- a/include/linux/blktrace_api.h
+++ b/include/linux/blktrace_api.h
@@ -25,7 +25,7 @@ struct blk_trace {
@@ -129396,10 +129577,10 @@ 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 da95258..2d00aec 100644
+index fb39d5a..a158876 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
-@@ -215,6 +215,7 @@ struct clk_ops {
+@@ -216,6 +216,7 @@ struct clk_ops {
void (*init)(struct clk_hw *hw);
int (*debug_init)(struct clk_hw *hw, struct dentry *dentry);
};
@@ -129459,7 +129640,7 @@ index f964ef7..0679632 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 3d5202e..d1f59fe 100644
+index e294939..1ac746f 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -116,9 +116,9 @@
@@ -129475,7 +129656,7 @@ index 3d5202e..d1f59fe 100644
#define __maybe_unused __attribute__((unused))
#define __always_unused __attribute__((unused))
-@@ -184,9 +184,41 @@
+@@ -185,9 +185,41 @@
# define __compiletime_warning(message) __attribute__((warning(message)))
# define __compiletime_error(message) __attribute__((error(message)))
#endif /* __CHECKER__ */
@@ -129518,7 +129699,7 @@ index 3d5202e..d1f59fe 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 b5ff988..c71686f 100644
+index 793c082..0e408e3 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -5,11 +5,14 @@
@@ -129742,7 +129923,7 @@ index b5ff988..c71686f 100644
})
/**
-@@ -421,6 +437,42 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -425,6 +441,42 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
# define __attribute_const__ /* unimplemented */
#endif
@@ -129785,7 +129966,7 @@ index b5ff988..c71686f 100644
/*
* Tell gcc if a function is cold. The compiler will assume any path
* directly leading to the call is unlikely.
-@@ -430,6 +482,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -434,6 +486,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
#define __cold
#endif
@@ -129808,7 +129989,7 @@ index b5ff988..c71686f 100644
/* Simple shorthand for a section definition */
#ifndef __section
# define __section(S) __attribute__ ((__section__(#S)))
-@@ -452,6 +520,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -456,6 +524,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
@@ -129817,7 +129998,7 @@ index b5ff988..c71686f 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))
-@@ -531,8 +601,9 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -535,8 +605,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; \
@@ -129842,10 +130023,10 @@ index d9d6a9d..489772c 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 718e872..e16712a 100644
+index 4e81e08..0caf1e8 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
-@@ -201,10 +201,11 @@ __ATTR(_name, 0644, show_##_name, store_##_name)
+@@ -214,10 +214,11 @@ __ATTR(_name, 0644, show_##_name, store_##_name)
struct global_attr {
struct attribute attr;
ssize_t (*show)(struct kobject *kobj,
@@ -129859,7 +130040,7 @@ index 718e872..e16712a 100644
#define define_one_global_ro(_name) \
static struct global_attr _name = \
-@@ -275,7 +276,7 @@ struct cpufreq_driver {
+@@ -290,7 +291,7 @@ struct cpufreq_driver {
/* platform specific boost support code */
bool boost_enabled;
int (*set_boost)(int state);
@@ -129892,7 +130073,7 @@ index 07b83d3..3373ad6 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 40cee6b..daa215f 100644
+index e828cf6..e4b1663 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)
@@ -129993,7 +130174,7 @@ index 257db64..a73cf86 100644
#define current_cred_xxx(xxx) \
({ \
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
-index 99c9489..55a6de8 100644
+index 6e28c89..584d25a 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -510,7 +510,7 @@ struct cipher_tfm {
@@ -130028,21 +130209,21 @@ index 653589e..4ef254a 100644
return c | 0x20;
}
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
-index ad5d582..a794cac 100644
+index f53fa05..06f42e5 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
-@@ -123,6 +123,9 @@ struct dentry {
- unsigned long d_time; /* used by d_revalidate */
- void *d_fsdata; /* fs-specific data */
-
+@@ -102,6 +102,9 @@ struct dentry {
+ struct list_head d_lru; /* LRU list */
+ wait_queue_head_t *d_wait; /* in-lookup ones only */
+ };
+#ifdef CONFIG_GRKERNSEC_CHROOT_RENAME
+ atomic_t chroot_refcnt; /* tracks use of directory in chroot */
+#endif
- struct list_head d_lru; /* LRU list */
struct list_head d_child; /* child of parent list */
struct list_head d_subdirs; /* our children */
-@@ -133,7 +136,7 @@ struct dentry {
- struct hlist_node d_alias; /* inode alias list */
+ /*
+@@ -112,7 +115,7 @@ struct dentry {
+ struct hlist_bl_node d_in_lookup_hash; /* only for in-lookup ones */
struct rcu_head d_rcu;
} d_u;
-};
@@ -130050,7 +130231,7 @@ index ad5d582..a794cac 100644
/*
* dentry->d_lock spinlock nesting subclasses:
-@@ -296,7 +299,7 @@ extern struct dentry *__d_lookup_rcu(const struct dentry *parent,
+@@ -280,7 +283,7 @@ extern struct dentry *__d_lookup_rcu(const struct dentry *parent,
static inline unsigned d_count(const struct dentry *dentry)
{
@@ -130059,7 +130240,7 @@ index ad5d582..a794cac 100644
}
/*
-@@ -325,7 +328,7 @@ extern char *dentry_path(struct dentry *, char *, int);
+@@ -309,7 +312,7 @@ extern char *dentry_path(struct dentry *, char *, int);
static inline struct dentry *dget_dlock(struct dentry *dentry)
{
if (dentry)
@@ -130082,10 +130263,10 @@ index 7925bf0..d5143d2 100644
#define large_malloc(a) vmalloc(a)
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
-index 6fa02a2..aac3093 100644
+index 2de4e2e..510a09b8 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
-@@ -117,7 +117,7 @@ struct devfreq_governor {
+@@ -124,7 +124,7 @@ struct devfreq_governor {
int (*get_target_freq)(struct devfreq *this, unsigned long *freq);
int (*event_handler)(struct devfreq *devfreq,
unsigned int event, void *data);
@@ -130095,7 +130276,7 @@ index 6fa02a2..aac3093 100644
/**
* struct devfreq - Device devfreq structure
diff --git a/include/linux/device.h b/include/linux/device.h
-index 002c597..b8d6f1a 100644
+index 38f0281..72e7b70 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -346,7 +346,7 @@ struct subsys_interface {
@@ -130131,7 +130312,7 @@ index 002c597..b8d6f1a 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 9ea9aba..16b56d0 100644
+index 71c1b21..529a781 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -68,7 +68,7 @@ struct dma_map_ops {
@@ -130144,10 +130325,10 @@ index 9ea9aba..16b56d0 100644
extern struct dma_map_ops dma_noop_ops;
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 1626474..5a604e6 100644
+index f196dd0..bbcc416 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -1123,6 +1123,7 @@ struct efivar_operations {
+@@ -1184,6 +1184,7 @@ struct efivar_operations {
efi_set_variable_t *set_variable_nonblocking;
efi_query_variable_store_t *query_variable_store;
};
@@ -130176,12 +130357,12 @@ index 20fa8d8..3d0dd18 100644
#endif
diff --git a/include/linux/err.h b/include/linux/err.h
-index 56762ab..bc4a3e3 100644
+index 1e35588..ce9721b 100644
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -20,12 +20,12 @@
- #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
+ #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)
-static inline void * __must_check ERR_PTR(long error)
+static inline void * __must_check __intentional_overflow(-1) ERR_PTR(long error)
@@ -130194,6 +130375,16 @@ index 56762ab..bc4a3e3 100644
{
return (long) ptr;
}
+diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
+index 9ded8c6..e11a245 100644
+--- a/include/linux/ethtool.h
++++ b/include/linux/ethtool.h
+@@ -373,4 +373,5 @@ struct ethtool_ops {
+ int (*set_link_ksettings)(struct net_device *,
+ const struct ethtool_link_ksettings *);
+ };
++typedef struct ethtool_ops __no_const ethtool_ops_no_const;
+ #endif /* _LINUX_ETHTOOL_H */
diff --git a/include/linux/extcon.h b/include/linux/extcon.h
index 7abf674..c0a73a0 100644
--- a/include/linux/extcon.h
@@ -130208,7 +130399,7 @@ index 7abf674..c0a73a0 100644
/**
diff --git a/include/linux/fb.h b/include/linux/fb.h
-index dfe8835..4e9e29a 100644
+index a964d07..09bf71f 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -320,7 +320,8 @@ struct fb_ops {
@@ -130248,10 +130439,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 70e61b5..8eeec57 100644
+index dd28814..4d460a5 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -330,7 +330,7 @@ struct kiocb {
+@@ -331,7 +331,7 @@ struct kiocb {
void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
void *private;
int ki_flags;
@@ -130260,7 +130451,7 @@ index 70e61b5..8eeec57 100644
static inline bool is_sync_kiocb(struct kiocb *kiocb)
{
-@@ -444,7 +444,7 @@ struct address_space {
+@@ -445,7 +445,7 @@ struct address_space {
spinlock_t private_lock; /* for use by the address_space */
struct list_head private_list; /* ditto */
void *private_data; /* ditto */
@@ -130269,7 +130460,7 @@ index 70e61b5..8eeec57 100644
/*
* On most architectures that alignment is already the case; but
* must be enforced here for CRIS, to let the least significant bit
-@@ -487,7 +487,7 @@ struct block_device {
+@@ -488,7 +488,7 @@ struct block_device {
int bd_fsfreeze_count;
/* Mutex for freeze */
struct mutex bd_fsfreeze_mutex;
@@ -130278,7 +130469,7 @@ index 70e61b5..8eeec57 100644
/*
* Radix-tree tags, for tagging dirty and writeback pages within the pagecache
-@@ -686,7 +686,7 @@ struct inode {
+@@ -700,7 +700,7 @@ struct inode {
#endif
void *i_private; /* fs or device private pointer */
@@ -130287,7 +130478,7 @@ index 70e61b5..8eeec57 100644
static inline int inode_unhashed(struct inode *inode)
{
-@@ -906,7 +906,7 @@ struct file {
+@@ -935,7 +935,7 @@ struct file {
struct list_head f_tfile_llink;
#endif /* #ifdef CONFIG_EPOLL */
struct address_space *f_mapping;
@@ -130296,7 +130487,7 @@ index 70e61b5..8eeec57 100644
struct file_handle {
__u32 handle_bytes;
-@@ -1041,7 +1041,7 @@ struct file_lock {
+@@ -1070,7 +1070,7 @@ struct file_lock {
int state; /* state of grant or error if -ve */
} afs;
} fl_u;
@@ -130305,7 +130496,7 @@ index 70e61b5..8eeec57 100644
struct file_lock_context {
spinlock_t flc_lock;
-@@ -1419,7 +1419,7 @@ struct super_block {
+@@ -1448,7 +1448,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 */
@@ -130314,7 +130505,7 @@ index 70e61b5..8eeec57 100644
extern struct timespec current_fs_time(struct super_block *sb);
-@@ -1676,7 +1676,8 @@ struct file_operations {
+@@ -1706,7 +1706,8 @@ struct file_operations {
u64);
ssize_t (*dedupe_file_range)(struct file *, u64, u64, struct file *,
u64);
@@ -130324,7 +130515,7 @@ index 70e61b5..8eeec57 100644
struct inode_operations {
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
-@@ -2400,7 +2401,7 @@ extern int register_chrdev_region(dev_t, unsigned, const char *);
+@@ -2426,7 +2427,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);
@@ -130333,7 +130524,7 @@ index 70e61b5..8eeec57 100644
unsigned int count, const char *name);
extern void unregister_chrdev_region(dev_t, unsigned);
extern void chrdev_show(struct seq_file *,off_t);
-@@ -3107,4 +3108,14 @@ static inline bool dir_relax(struct inode *inode)
+@@ -3174,4 +3175,14 @@ static inline bool dir_relax_shared(struct inode *inode)
extern bool path_noexec(const struct path *path);
extern void inode_nohighmem(struct inode *inode);
@@ -130369,7 +130560,7 @@ index 0efc3e6..fd23610 100644
extern struct kmem_cache *fs_cachep;
diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h
-index 604e152..5954d0d 100644
+index 13ba552..c4db760 100644
--- a/include/linux/fscache-cache.h
+++ b/include/linux/fscache-cache.h
@@ -117,7 +117,7 @@ struct fscache_operation {
@@ -130428,10 +130619,10 @@ index 0141f25..eb29c30 100644
/*
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
-index 5c70676..0109dd5 100644
+index 359a8e4..84aab2b 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
-@@ -208,7 +208,7 @@ struct gendisk {
+@@ -209,7 +209,7 @@ struct gendisk {
struct kobject *slave_dir;
struct timer_rand_state *random;
@@ -130440,7 +130631,7 @@ index 5c70676..0109dd5 100644
struct disk_events *ev;
#ifdef CONFIG_BLK_DEV_INTEGRITY
struct kobject integrity_kobj;
-@@ -450,7 +450,7 @@ extern void disk_flush_events(struct gendisk *disk, unsigned int mask);
+@@ -433,7 +433,7 @@ extern void disk_flush_events(struct gendisk *disk, unsigned int mask);
extern unsigned int disk_clear_events(struct gendisk *disk, unsigned int mask);
/* drivers/char/random.c */
@@ -130463,10 +130654,10 @@ index 667c311..abac2a7 100644
};
diff --git a/include/linux/genl_magic_struct.h b/include/linux/genl_magic_struct.h
-index eecd19b..391d1957 100644
+index 6270a56..ddda3ac 100644
--- a/include/linux/genl_magic_struct.h
+++ b/include/linux/genl_magic_struct.h
-@@ -76,8 +76,8 @@ extern void CONCAT_(GENL_MAGIC_FAMILY, _genl_unregister)(void);
+@@ -81,8 +81,8 @@ static inline int nla_put_u64_0pad(struct sk_buff *skb, int attrtype, u64 value)
__field(attr_nr, attr_flag, name, NLA_U32, __u32, \
nla_get_u32, nla_put_u32, false)
#define __s32_field(attr_nr, attr_flag, name) \
@@ -130476,7 +130667,7 @@ index eecd19b..391d1957 100644
+ nla_get_s32, nla_put_s32, true)
#define __u64_field(attr_nr, attr_flag, name) \
__field(attr_nr, attr_flag, name, NLA_U64, __u64, \
- nla_get_u64, nla_put_u64, false)
+ nla_get_u64, nla_put_u64_0pad, false)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 570383a..8fb6742b 100644
--- a/include/linux/gfp.h
@@ -131878,7 +132069,7 @@ index bb3f329..9daed55 100644
unsigned start1, unsigned end1,
unsigned start2, unsigned end2)
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
-index 7d953c2..f511887 100644
+index c26d463..de111ba 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -314,7 +314,7 @@ struct hstate {
@@ -131891,7 +132082,7 @@ index 7d953c2..f511887 100644
char name[HSTATE_NAME_LEN];
};
diff --git a/include/linux/hugetlb_cgroup.h b/include/linux/hugetlb_cgroup.h
-index 24154c2..43ac947 100644
+index 063962f..d34f2da 100644
--- a/include/linux/hugetlb_cgroup.h
+++ b/include/linux/hugetlb_cgroup.h
@@ -26,6 +26,13 @@ struct hugetlb_cgroup;
@@ -131944,7 +132135,7 @@ index 1c7b89a..7dda400 100644
container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr)
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
-index 200cf13b..2a82cb4 100644
+index 96a25ae..f6a1b09 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -412,6 +412,7 @@ struct i2c_algorithm {
@@ -132004,7 +132195,7 @@ index aedb254..71b67e5 100644
/*
* Used for initialization calls..
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
-index f2cb8d4..2f0363e 100644
+index f8834f8..eb807a2 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -159,6 +159,12 @@ extern struct task_group root_task_group;
@@ -132053,23 +132244,23 @@ index 9fcabeb..8f78b99 100644
extern void __raise_softirq_irqoff(unsigned int nr);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
-index ef7a6ec..2b963bb 100644
+index 664683a..469d610 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -199,7 +199,7 @@ struct iommu_ops {
+ int (*of_xlate)(struct device *dev, struct of_phandle_args *args);
unsigned long pgsize_bitmap;
- void *priv;
-};
+} __do_const;
#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 0b65543..c396f13 100644
+index 6230064..1ccafa4 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
-@@ -186,7 +186,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start);
+@@ -190,7 +190,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);
@@ -132107,7 +132298,7 @@ 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 c4de623..8f0044f 100644
+index 4d758a7..f6ce482 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -399,7 +399,10 @@ struct irq_chip {
@@ -132135,7 +132326,7 @@ index c78a892..124e0b7 100644
#endif /* __IRQCHIP_MMP_H */
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h
-index dcca77c..8503b4f 100644
+index b51beeb..72974cf 100644
--- a/include/linux/irqdesc.h
+++ b/include/linux/irqdesc.h
@@ -62,7 +62,7 @@ struct irq_desc {
@@ -132148,7 +132339,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 2aed043..30ad77f 100644
+index f1f36e0..faa10c13 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -38,6 +38,9 @@ struct device_node;
@@ -132162,10 +132353,10 @@ index 2aed043..30ad77f 100644
/* Number of irqs reserved for a legacy isa controller */
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
-index fd1083c..be9252b 100644
+index efb232c..1d53bef 100644
--- a/include/linux/jbd2.h
+++ b/include/linux/jbd2.h
-@@ -672,7 +672,7 @@ struct transaction_s
+@@ -680,7 +680,7 @@ struct transaction_s
/*
* How many handles used this transaction? [t_handle_lock]
*/
@@ -132301,19 +132492,19 @@ index 6883e19..d2c7746 100644
static inline void print_ip_sym(unsigned long ip)
{
diff --git a/include/linux/key-type.h b/include/linux/key-type.h
-index 7463355..30de32e 100644
+index eaee981..d1d24c3 100644
--- a/include/linux/key-type.h
+++ b/include/linux/key-type.h
-@@ -46,7 +46,7 @@ struct key_preparsed_payload {
+@@ -45,7 +45,7 @@ struct key_preparsed_payload {
+ size_t datalen; /* Raw datalen */
size_t quotalen; /* Quota length for proposed payload */
time_t expiry; /* Expiry time of key */
- bool trusted; /* True if key is trusted */
-};
+} __randomize_layout;
typedef int (*request_key_actor_t)(struct key_construction *key,
const char *op, void *aux);
-@@ -151,7 +151,7 @@ struct key_type {
+@@ -150,7 +150,7 @@ struct key_type {
/* internal fields */
struct list_head link; /* link in types list */
struct lock_class_key lock_class; /* key->sem lock class */
@@ -132455,10 +132646,10 @@ index e15828f..531fd0a 100644
if (atomic_sub_and_test((int) count, &kref->refcount)) {
release(kref);
diff --git a/include/linux/libata.h b/include/linux/libata.h
-index 2c4ebef..f452c4d 100644
+index d15c19e..499c820 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
-@@ -994,7 +994,7 @@ struct ata_port_operations {
+@@ -1004,7 +1004,7 @@ struct ata_port_operations {
* fields must be pointers.
*/
const struct ata_port_operations *inherits;
@@ -132468,7 +132659,7 @@ index 2c4ebef..f452c4d 100644
struct ata_port_info {
unsigned long flags;
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
-index a6a42dd..e270819 100644
+index a6a42dd..9787403 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -5,6 +5,7 @@
@@ -132487,7 +132678,7 @@ index a6a42dd..e270819 100644
#define __page_aligned_bss __section(.bss..page_aligned) __aligned(PAGE_SIZE)
/*
-@@ -79,11 +81,29 @@
+@@ -79,17 +81,40 @@
#define ALIGN_STR __ALIGN_STR
#ifndef ENTRY
@@ -132500,6 +132691,21 @@ index a6a42dd..e270819 100644
+
+#define ENTRY(name) __ENTRY(name,)
+
+ #endif
++
+ #endif /* LINKER_SCRIPT */
+
+ #ifndef WEAK
+-#define WEAK(name) \
+- .weak name ASM_NL \
++#define __WEAK(name, rap_hash) \
++ .weak name ASM_NL \
++ rap_hash \
+ name:
++
++#define WEAK(name) __WEAK(name, )
++#endif
++
+#ifdef CONFIG_PAX_RAP
+#if BITS_PER_LONG == 64
+#define __ASM_RAP_HASH(hash) .quad 0, hash ASM_NL
@@ -132507,17 +132713,15 @@ index a6a42dd..e270819 100644
+#define __ASM_RAP_HASH(hash) .long 0, 0, 0, hash ASM_NL
+#else
+#error incompatible BITS_PER_LONG
- #endif
++#endif
+#define RAP_ENTRY(name) __ENTRY(name, __ASM_RAP_HASH(__rap_hash_##name))
++#define RAP_WEAK(name) __WEAK(name, __ASM_RAP_HASH(__rap_hash_##name))
+#else
+#define RAP_ENTRY(name) ENTRY(name)
-+#endif
-+
-+#endif
-+
- #endif /* LINKER_SCRIPT */
++#define RAP_WEAK(name) WEAK(name)
+ #endif
- #ifndef WEAK
+ #ifndef END
diff --git a/include/linux/list.h b/include/linux/list.h
index 5356f4d..c99970b 100644
--- a/include/linux/list.h
@@ -132689,7 +132893,7 @@ index b10b122..d37b3de 100644
#endif /* __LINUX_LOCKREF_H */
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
-index cdee11c..bc64d98 100644
+index 7ae3976..a7d21bb 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
@@ -1831,7 +1831,7 @@ struct security_hook_heads {
@@ -132760,10 +132964,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 1191d79..0c73b8a 100644
+index 56e6069..d75f0be 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
-@@ -254,7 +254,7 @@ struct mem_cgroup {
+@@ -262,7 +262,7 @@ struct mem_cgroup {
int last_scanned_node;
#if MAX_NUMNODES > 1
nodemask_t scan_nodes;
@@ -132786,7 +132990,7 @@ index 093607f..9717227 100644
register_memory_notifier(&fn##_mem_nb); \
})
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
-index 2696c1f..9320d41 100644
+index 4429d25..ae5ab54 100644
--- a/include/linux/mempolicy.h
+++ b/include/linux/mempolicy.h
@@ -91,6 +91,10 @@ static inline struct mempolicy *mpol_dup(struct mempolicy *pol)
@@ -132800,7 +133004,7 @@ index 2696c1f..9320d41 100644
static inline void mpol_get(struct mempolicy *pol)
{
-@@ -229,6 +233,9 @@ static inline void mpol_free_shared_policy(struct shared_policy *p)
+@@ -235,6 +239,9 @@ mpol_shared_policy_lookup(struct shared_policy *sp, unsigned long idx)
}
#define vma_policy(vma) NULL
@@ -132811,10 +133015,10 @@ 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 02f7f31..efa7da3c 100644
+index ece042d..d7834bf 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
-@@ -103,6 +103,7 @@ extern int mmap_rnd_compat_bits __read_mostly;
+@@ -107,6 +107,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;
@@ -132822,7 +133026,7 @@ index 02f7f31..efa7da3c 100644
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);
+@@ -182,6 +183,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 */
@@ -132834,7 +133038,7 @@ index 02f7f31..efa7da3c 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 */
-@@ -329,8 +335,8 @@ struct vm_operations_struct {
+@@ -339,8 +345,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
*/
@@ -132845,7 +133049,7 @@ index 02f7f31..efa7da3c 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
-@@ -368,6 +374,7 @@ struct vm_operations_struct {
+@@ -378,6 +384,7 @@ struct vm_operations_struct {
struct page *(*find_special_page)(struct vm_area_struct *vma,
unsigned long addr);
};
@@ -132853,7 +133057,7 @@ index 02f7f31..efa7da3c 100644
struct mmu_gather;
struct inode;
-@@ -1209,8 +1216,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address,
+@@ -1197,8 +1204,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);
@@ -132864,7 +133068,7 @@ index 02f7f31..efa7da3c 100644
static inline void unmap_shared_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen)
-@@ -1251,9 +1258,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+@@ -1239,9 +1246,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
}
#endif
@@ -132877,7 +133081,7 @@ index 02f7f31..efa7da3c 100644
long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
-@@ -1343,39 +1350,11 @@ int clear_page_dirty_for_io(struct page *page);
+@@ -1331,39 +1338,11 @@ int clear_page_dirty_for_io(struct page *page);
int get_cmdline(struct task_struct *task, char *buffer, int buflen);
@@ -132917,7 +133121,7 @@ index 02f7f31..efa7da3c 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,
-@@ -1520,8 +1499,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
+@@ -1508,8 +1487,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
{
return 0;
}
@@ -132933,7 +133137,7 @@ index 02f7f31..efa7da3c 100644
#endif
#if defined(__PAGETABLE_PMD_FOLDED) || !defined(CONFIG_MMU)
-@@ -1531,6 +1517,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
+@@ -1519,6 +1505,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
return 0;
}
@@ -132946,7 +133150,7 @@ index 02f7f31..efa7da3c 100644
static inline void mm_nr_pmds_init(struct mm_struct *mm) {}
static inline unsigned long mm_nr_pmds(struct mm_struct *mm)
-@@ -1543,6 +1535,7 @@ static inline void mm_dec_nr_pmds(struct mm_struct *mm) {}
+@@ -1531,6 +1523,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);
@@ -132954,7 +133158,7 @@ index 02f7f31..efa7da3c 100644
static inline void mm_nr_pmds_init(struct mm_struct *mm)
{
-@@ -1579,11 +1572,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
+@@ -1567,11 +1560,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
NULL: pud_offset(pgd, address);
}
@@ -132978,7 +133182,7 @@ index 02f7f31..efa7da3c 100644
#endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */
#if USE_SPLIT_PTE_PTLOCKS
-@@ -1968,12 +1973,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
+@@ -1956,12 +1961,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
bool *need_rmap_locks);
extern void exit_mmap(struct mm_struct *);
@@ -133002,7 +133206,7 @@ index 02f7f31..efa7da3c 100644
if (rlim < RLIM_INFINITY) {
if (((new - start) + (end_data - start_data)) > rlim)
return -ENOSPC;
-@@ -2008,6 +2024,7 @@ extern unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1996,6 +2012,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);
@@ -133010,7 +133214,7 @@ index 02f7f31..efa7da3c 100644
static inline unsigned long
do_mmap_pgoff(struct file *file, unsigned long addr,
-@@ -2044,10 +2061,11 @@ struct vm_unmapped_area_info {
+@@ -2032,10 +2049,11 @@ struct vm_unmapped_area_info {
unsigned long high_limit;
unsigned long align_mask;
unsigned long align_offset;
@@ -133024,7 +133228,7 @@ index 02f7f31..efa7da3c 100644
/*
* Search for an unmapped address range.
-@@ -2059,7 +2077,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
+@@ -2047,7 +2065,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
@@ -133033,7 +133237,7 @@ index 02f7f31..efa7da3c 100644
{
if (info->flags & VM_UNMAPPED_AREA_TOPDOWN)
return unmapped_area_topdown(info);
-@@ -2119,6 +2137,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add
+@@ -2107,6 +2125,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);
@@ -133044,7 +133248,7 @@ index 02f7f31..efa7da3c 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)
-@@ -2148,10 +2170,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
+@@ -2136,10 +2158,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
}
#ifdef CONFIG_MMU
@@ -133057,7 +133261,7 @@ index 02f7f31..efa7da3c 100644
{
return __pgprot(0);
}
-@@ -2334,7 +2356,7 @@ extern int get_hwpoison_page(struct page *page);
+@@ -2322,7 +2344,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);
@@ -133066,7 +133270,7 @@ index 02f7f31..efa7da3c 100644
extern int soft_offline_page(struct page *page, int flags);
-@@ -2419,5 +2441,11 @@ void __init setup_nr_node_ids(void);
+@@ -2410,5 +2432,11 @@ void __init setup_nr_node_ids(void);
static inline void setup_nr_node_ids(void) {}
#endif
@@ -133079,10 +133283,10 @@ index 02f7f31..efa7da3c 100644
#endif /* __KERNEL__ */
#endif /* _LINUX_MM_H */
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index c2d75b4..f12e13a 100644
+index ca3e517..0f6eebf 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
-@@ -352,7 +352,9 @@ struct vm_area_struct {
+@@ -357,7 +357,9 @@ struct vm_area_struct {
struct mempolicy *vm_policy; /* NUMA policy for the VMA */
#endif
struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
@@ -133093,9 +133297,9 @@ index c2d75b4..f12e13a 100644
struct core_thread {
struct task_struct *task;
-@@ -509,7 +511,25 @@ struct mm_struct {
- #ifdef CONFIG_HUGETLB_PAGE
- atomic_long_t hugetlb_usage;
+@@ -517,7 +519,25 @@ struct mm_struct {
+ #ifdef CONFIG_MMU
+ struct work_struct async_put_work;
#endif
-};
+
@@ -133143,10 +133347,10 @@ index 3ba327a..85cd5ce 100644
}
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
-index c60df92..76f3303 100644
+index 02069c2..4fa3080 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
-@@ -526,7 +526,7 @@ struct zone {
+@@ -519,7 +519,7 @@ struct zone {
ZONE_PADDING(_pad3_)
/* Zone statistics */
@@ -133178,7 +133382,7 @@ index 6e4c645..3633f7b 100644
* struct dmi_device_id appears during expansion of
* "MODULE_DEVICE_TABLE(dmi, x)". Compiler doesn't look inside it
diff --git a/include/linux/module.h b/include/linux/module.h
-index 2bb0c30..dc42cbc 100644
+index 3daf2b3..aba2d33 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -19,9 +19,11 @@
@@ -133245,7 +133449,7 @@ index 2bb0c30..dc42cbc 100644
#endif
};
-@@ -341,7 +345,7 @@ struct module {
+@@ -350,7 +354,7 @@ struct module {
/* Sysfs stuff. */
struct module_kobject mkobj;
@@ -133254,7 +133458,7 @@ index 2bb0c30..dc42cbc 100644
const char *version;
const char *srcversion;
struct kobject *holders_dir;
-@@ -449,6 +453,10 @@ struct module {
+@@ -458,6 +462,10 @@ struct module {
unsigned int num_trace_events;
struct trace_enum_map **trace_enums;
unsigned int num_trace_enums;
@@ -133265,7 +133469,7 @@ index 2bb0c30..dc42cbc 100644
#endif
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
unsigned int num_ftrace_callsites;
-@@ -476,7 +484,8 @@ struct module {
+@@ -489,7 +497,8 @@ struct module {
ctor_fn_t *ctors;
unsigned int num_ctors;
#endif
@@ -133275,7 +133479,7 @@ index 2bb0c30..dc42cbc 100644
#ifndef MODULE_ARCH_INIT
#define MODULE_ARCH_INIT {}
#endif
-@@ -497,18 +506,38 @@ bool is_module_address(unsigned long addr);
+@@ -510,18 +519,38 @@ bool is_module_address(unsigned long addr);
bool is_module_percpu_address(unsigned long addr);
bool is_module_text_address(unsigned long addr);
@@ -133443,7 +133647,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 9d90efe6..55eeb64 100644
+index 25aa03b..9817031 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -195,7 +195,7 @@ struct net_proto_family {
@@ -133456,10 +133660,10 @@ index 9d90efe6..55eeb64 100644
struct iovec;
struct kvec;
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index 78181a8..9e0ef8f 100644
+index da4b33b..0ae34af 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -1293,6 +1293,7 @@ struct net_device_ops {
+@@ -1290,6 +1290,7 @@ struct net_device_ops {
void (*ndo_set_rx_headroom)(struct net_device *dev,
int needed_headroom);
};
@@ -133467,7 +133671,7 @@ index 78181a8..9e0ef8f 100644
/**
* enum net_device_priv_flags - &struct net_device priv_flags
-@@ -1623,7 +1624,7 @@ struct net_device {
+@@ -1617,7 +1618,7 @@ struct net_device {
unsigned long base_addr;
int irq;
@@ -133476,7 +133680,7 @@ index 78181a8..9e0ef8f 100644
/*
* Some hardware also needs these fields (state,dev_list,
-@@ -1662,9 +1663,9 @@ struct net_device {
+@@ -1657,9 +1658,9 @@ struct net_device {
struct net_device_stats stats;
@@ -133489,8 +133693,8 @@ index 78181a8..9e0ef8f 100644
#ifdef CONFIG_WIRELESS_EXT
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);
+@@ -4152,7 +4153,7 @@ static inline bool netif_reduces_vlan_mtu(struct net_device *dev)
+ return dev->priv_flags & IFF_MACSEC;
}
-extern struct pernet_operations __net_initdata loopback_net_ops;
@@ -133512,7 +133716,7 @@ index 9230f9a..065b8f8 100644
/* Function to register/unregister hook points. */
int nf_register_net_hook(struct net *net, const struct nf_hook_ops *ops);
diff --git a/include/linux/netfilter/ipset/ip_set.h b/include/linux/netfilter/ipset/ip_set.h
-index f48b8a6..8971034 100644
+index 83b9a2e..5266f3b 100644
--- a/include/linux/netfilter/ipset/ip_set.h
+++ b/include/linux/netfilter/ipset/ip_set.h
@@ -104,8 +104,8 @@ struct ip_set_ext {
@@ -133556,7 +133760,7 @@ index f48b8a6..8971034 100644
}
static inline void
-@@ -384,9 +384,9 @@ ip_set_init_counter(struct ip_set_counter *counter,
+@@ -387,9 +387,9 @@ ip_set_init_counter(struct ip_set_counter *counter,
const struct ip_set_ext *ext)
{
if (ext->bytes != ULLONG_MAX)
@@ -133694,7 +133898,7 @@ index b2a0f15..4d7da32 100644
/** create a directory */
struct dentry *oprofilefs_mkdir(struct dentry *parent, char const *name);
diff --git a/include/linux/padata.h b/include/linux/padata.h
-index 4386946..f50c615 100644
+index 113ee62..70198a7 100644
--- a/include/linux/padata.h
+++ b/include/linux/padata.h
@@ -129,7 +129,7 @@ struct parallel_data {
@@ -133707,7 +133911,7 @@ 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 7e1ab15..9b26fd4 100644
+index 9735410..701e42e 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -215,7 +215,7 @@ static inline struct page *page_cache_alloc_readahead(struct address_space *x)
@@ -133764,7 +133968,7 @@ index 8c78950..0d74ed9 100644
/**
* struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot
diff --git a/include/linux/percpu.h b/include/linux/percpu.h
-index 4bc6daf..6edaab0 100644
+index 56939d3..7fb18e3 100644
--- a/include/linux/percpu.h
+++ b/include/linux/percpu.h
@@ -28,7 +28,7 @@
@@ -133777,10 +133981,10 @@ index 4bc6daf..6edaab0 100644
/*
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
-index f291275..6936e70 100644
+index 1a827ce..864eb06 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
-@@ -477,8 +477,8 @@ struct perf_event {
+@@ -557,8 +557,8 @@ struct perf_event {
enum perf_event_active_state state;
unsigned int attach_state;
@@ -133791,7 +133995,7 @@ index f291275..6936e70 100644
/*
* These are the total time in nanoseconds that the event
-@@ -529,8 +529,8 @@ struct perf_event {
+@@ -609,8 +609,8 @@ struct perf_event {
* These accumulate total time (in nanoseconds) that children
* events have been enabled and running, respectively.
*/
@@ -133802,7 +134006,7 @@ index f291275..6936e70 100644
/*
* Protect attach/detach and child_list:
-@@ -954,7 +954,7 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
+@@ -1054,7 +1054,7 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
static inline u64 __perf_event_count(struct perf_event *event)
{
@@ -133811,7 +134015,7 @@ index f291275..6936e70 100644
}
extern void perf_event_mmap(struct vm_area_struct *vma);
-@@ -987,7 +987,7 @@ static inline int perf_callchain_store(struct perf_callchain_entry *entry, u64 i
+@@ -1105,7 +1105,7 @@ static inline int perf_callchain_store(struct perf_callchain_entry_ctx *ctx, u64
}
}
@@ -133820,9 +134024,9 @@ index f291275..6936e70 100644
extern int sysctl_perf_event_mlock;
extern int sysctl_perf_event_sample_rate;
extern int sysctl_perf_cpu_time_max_percent;
-@@ -1002,19 +1002,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
- loff_t *ppos);
-
+@@ -1122,19 +1122,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
+ int perf_event_max_stack_handler(struct ctl_table *table, int write,
+ void __user *buffer, size_t *lenp, loff_t *ppos);
+static inline bool perf_paranoid_any(void)
+{
@@ -133848,7 +134052,7 @@ index f291275..6936e70 100644
}
extern void perf_event_init(void);
-@@ -1171,7 +1176,7 @@ struct perf_pmu_events_attr {
+@@ -1324,7 +1329,7 @@ struct perf_pmu_events_attr {
struct device_attribute attr;
u64 id;
const char *event_str;
@@ -133905,7 +134109,7 @@ index 24f5470..deb6089 100644
unsigned int w_counter;
struct page *tmp_page;
diff --git a/include/linux/pm.h b/include/linux/pm.h
-index 6a5d654..1051ebc 100644
+index 06eb353..dbf4a34 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -631,6 +631,7 @@ struct dev_pm_domain {
@@ -133917,12 +134121,12 @@ 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 49cd889..70d53da5 100644
+index 39285c7..d8c3f16 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
-@@ -37,7 +37,7 @@ struct gpd_dev_ops {
- int (*save_state)(struct device *dev);
- int (*restore_state)(struct device *dev);
+@@ -35,7 +35,7 @@ struct gpd_dev_ops {
+ int (*start)(struct device *dev);
+ int (*stop)(struct device *dev);
bool (*active_wakeup)(struct device *dev);
-};
+} __no_const;
@@ -133930,10 +134134,10 @@ index 49cd889..70d53da5 100644
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
+index 2e14d26..aed7c63 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
-@@ -111,7 +111,7 @@ static inline bool pm_runtime_callbacks_present(struct device *dev)
+@@ -116,7 +116,7 @@ static inline bool pm_runtime_callbacks_present(struct device *dev)
static inline void pm_runtime_mark_last_busy(struct device *dev)
{
@@ -133943,7 +134147,7 @@ index 7af093d..122df16 100644
static inline bool pm_runtime_is_irq_safe(struct device *dev)
diff --git a/include/linux/pnp.h b/include/linux/pnp.h
-index 5df733b..d55f252 100644
+index 2588ca6..b705409 100644
--- a/include/linux/pnp.h
+++ b/include/linux/pnp.h
@@ -298,7 +298,7 @@ static inline void pnp_set_drvdata(struct pnp_dev *pdev, void *data)
@@ -134069,7 +134273,7 @@ index 75e4e30..fcfde15 100644
#define preempt_set_need_resched() \
do { \
diff --git a/include/linux/printk.h b/include/linux/printk.h
-index 9ccbdf2..9987ac2 100644
+index f4da695..cce5e7c 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -43,7 +43,7 @@ static inline const char *printk_skip_level(const char *buffer)
@@ -134081,15 +134285,16 @@ index 9ccbdf2..9987ac2 100644
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
-@@ -123,6 +123,7 @@ void early_printk(const char *s, ...) { }
- #endif
+@@ -136,6 +136,8 @@ static inline void printk_nmi_flush(void) { }
+ static inline void printk_nmi_flush_on_panic(void) { }
+ #endif /* PRINTK_NMI */
- typedef __printf(1, 0) int (*printk_func_t)(const char *fmt, va_list args);
+extern int kptr_restrict;
-
++
#ifdef CONFIG_PRINTK
asmlinkage __printf(5, 0)
-@@ -158,7 +159,6 @@ extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
+ int vprintk_emit(int facility, int level,
+@@ -170,7 +172,6 @@ extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
extern int printk_delay_msec;
extern int dmesg_restrict;
@@ -134169,10 +134374,10 @@ index de0e771..9e746e9 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 393efe2..340fc1d 100644
+index bdea1cb..a094b75 100644
--- a/include/linux/psci.h
+++ b/include/linux/psci.h
-@@ -35,7 +35,7 @@ struct psci_operations {
+@@ -33,7 +33,7 @@ struct psci_operations {
int (*affinity_info)(unsigned long target_affinity,
unsigned long lowest_affinity_level);
int (*migrate_info_type)(void);
@@ -134195,7 +134400,7 @@ index 9dfb6bc..0aa55da 100644
extern bool qid_valid(struct kqid qid);
diff --git a/include/linux/random.h b/include/linux/random.h
-index 9c29122..f94151b 100644
+index e47e533..1399797 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -18,9 +18,19 @@ struct random_ready_callback {
@@ -134220,7 +134425,7 @@ index 9c29122..f94151b 100644
extern void get_random_bytes(void *buf, int nbytes);
extern int add_random_ready_callback(struct random_ready_callback *rdy);
-@@ -53,6 +63,11 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
+@@ -52,6 +62,11 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
#define prandom_init_once(pcpu_state) \
DO_ONCE(prandom_seed_full_state, (pcpu_state))
@@ -134232,7 +134437,7 @@ index 9c29122..f94151b 100644
/**
* prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro)
* @ep_ro: right open interval endpoint
-@@ -65,7 +80,7 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
+@@ -64,7 +79,7 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
*
* Returns: pseudo-random number in interval [0, ep_ro)
*/
@@ -134257,7 +134462,7 @@ index 14d7b83..a1edf56 100644
diff --git a/include/linux/rculist.h b/include/linux/rculist.h
-index 17d4f84..878f3cf 100644
+index 8beb98d..c515d45 100644
--- a/include/linux/rculist.h
+++ b/include/linux/rculist.h
@@ -59,6 +59,9 @@ void __list_add_rcu(struct list_head *new,
@@ -134305,10 +134510,10 @@ index 17d4f84..878f3cf 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 2657aff..f1259b4 100644
+index 5f1533e..8b6075e 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
-@@ -863,6 +863,7 @@ static inline void rcu_preempt_sleep_check(void)
+@@ -848,6 +848,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.
*/
@@ -134316,7 +134521,7 @@ index 2657aff..f1259b4 100644
static inline void rcu_read_lock(void)
{
__rcu_read_lock();
-@@ -917,6 +918,7 @@ static inline void rcu_read_lock(void)
+@@ -902,6 +903,7 @@ static inline void rcu_read_lock(void)
*
* See rcu_read_lock() for more information.
*/
@@ -134324,7 +134529,7 @@ index 2657aff..f1259b4 100644
static inline void rcu_read_unlock(void)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(),
-@@ -943,6 +945,7 @@ static inline void rcu_read_unlock(void)
+@@ -928,6 +930,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.
*/
@@ -134332,7 +134537,7 @@ index 2657aff..f1259b4 100644
static inline void rcu_read_lock_bh(void)
{
local_bh_disable();
-@@ -957,6 +960,7 @@ static inline void rcu_read_lock_bh(void)
+@@ -942,6 +945,7 @@ static inline void rcu_read_lock_bh(void)
*
* See rcu_read_lock_bh() for more information.
*/
@@ -134340,7 +134545,7 @@ index 2657aff..f1259b4 100644
static inline void rcu_read_unlock_bh(void)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(),
-@@ -979,6 +983,7 @@ static inline void rcu_read_unlock_bh(void)
+@@ -964,6 +968,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.
*/
@@ -134348,7 +134553,7 @@ index 2657aff..f1259b4 100644
static inline void rcu_read_lock_sched(void)
{
preempt_disable();
-@@ -989,6 +994,7 @@ static inline void rcu_read_lock_sched(void)
+@@ -974,6 +979,7 @@ static inline void rcu_read_lock_sched(void)
}
/* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */
@@ -134356,7 +134561,7 @@ index 2657aff..f1259b4 100644
static inline notrace void rcu_read_lock_sched_notrace(void)
{
preempt_disable_notrace();
-@@ -1000,6 +1006,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void)
+@@ -985,6 +991,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void)
*
* See rcu_read_lock_sched for more information.
*/
@@ -134364,7 +134569,7 @@ index 2657aff..f1259b4 100644
static inline void rcu_read_unlock_sched(void)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(),
-@@ -1010,6 +1017,7 @@ static inline void rcu_read_unlock_sched(void)
+@@ -995,6 +1002,7 @@ static inline void rcu_read_unlock_sched(void)
}
/* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */
@@ -134452,7 +134657,7 @@ index aa23238..f6f8109 100644
#define RIO_RESOURCE_MEM 0x00000100
#define RIO_RESOURCE_DOORBELL 0x00000200
diff --git a/include/linux/rmap.h b/include/linux/rmap.h
-index 49eb4f8..95a4b70 100644
+index 2b0fad8..eb42a74 100644
--- a/include/linux/rmap.h
+++ b/include/linux/rmap.h
@@ -139,8 +139,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma)
@@ -134467,7 +134672,7 @@ index 49eb4f8..95a4b70 100644
static inline void anon_vma_merge(struct vm_area_struct *vma,
struct vm_area_struct *next)
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
-index 556ec1e..38c19c9 100644
+index cb3c8fe..85365ba 100644
--- a/include/linux/scatterlist.h
+++ b/include/linux/scatterlist.h
@@ -1,6 +1,7 @@
@@ -134499,7 +134704,7 @@ index 556ec1e..38c19c9 100644
/*
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 52c4847..e87db2a 100644
+index 253538f..d34b811 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -7,7 +7,7 @@
@@ -134511,7 +134716,7 @@ index 52c4847..e87db2a 100644
};
#include <asm/param.h> /* for HZ */
-@@ -135,6 +135,7 @@ struct perf_event_context;
+@@ -134,6 +134,7 @@ struct perf_event_context;
struct blk_plug;
struct filename;
struct nameidata;
@@ -134519,7 +134724,7 @@ index 52c4847..e87db2a 100644
#define VMACACHE_BITS 2
#define VMACACHE_SIZE (1U << VMACACHE_BITS)
-@@ -441,6 +442,18 @@ struct nsproxy;
+@@ -451,6 +452,18 @@ struct nsproxy;
struct user_namespace;
#ifdef CONFIG_MMU
@@ -134538,7 +134743,7 @@ index 52c4847..e87db2a 100644
extern void arch_pick_mmap_layout(struct mm_struct *mm);
extern unsigned long
arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
-@@ -777,6 +790,17 @@ struct signal_struct {
+@@ -789,6 +802,17 @@ struct signal_struct {
#ifdef CONFIG_TASKSTATS
struct taskstats *stats;
#endif
@@ -134556,7 +134761,7 @@ index 52c4847..e87db2a 100644
#ifdef CONFIG_AUDIT
unsigned audit_tty;
struct tty_audit_buf *tty_audit_buf;
-@@ -790,7 +814,7 @@ struct signal_struct {
+@@ -806,7 +830,7 @@ struct signal_struct {
struct mutex cred_guard_mutex; /* guard against foreign influences on
* credential calculations
* (notably. ptrace) */
@@ -134565,7 +134770,7 @@ index 52c4847..e87db2a 100644
/*
* Bits in flags field of signal_struct.
-@@ -845,6 +869,14 @@ struct user_struct {
+@@ -861,6 +885,14 @@ struct user_struct {
struct key *session_keyring; /* UID's default session keyring */
#endif
@@ -134580,7 +134785,7 @@ index 52c4847..e87db2a 100644
/* Hash table maintenance information */
struct hlist_node uidhash_node;
kuid_t uid;
-@@ -852,7 +884,7 @@ struct user_struct {
+@@ -868,7 +900,7 @@ struct user_struct {
#if defined(CONFIG_PERF_EVENTS) || defined(CONFIG_BPF_SYSCALL)
atomic_long_t locked_vm;
#endif
@@ -134589,7 +134794,7 @@ index 52c4847..e87db2a 100644
extern int uids_sysfs_init(void);
-@@ -1394,6 +1426,9 @@ struct tlbflush_unmap_batch {
+@@ -1458,6 +1490,9 @@ struct tlbflush_unmap_batch {
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
void *stack;
@@ -134599,7 +134804,7 @@ index 52c4847..e87db2a 100644
atomic_t usage;
unsigned int flags; /* per process flags, defined below */
unsigned int ptrace;
-@@ -1529,8 +1564,8 @@ struct task_struct {
+@@ -1594,8 +1629,8 @@ struct task_struct {
struct list_head thread_node;
struct completion *vfork_done; /* for vfork() */
@@ -134610,7 +134815,7 @@ index 52c4847..e87db2a 100644
cputime_t utime, stime, utimescaled, stimescaled;
cputime_t gtime;
-@@ -1560,11 +1595,6 @@ struct task_struct {
+@@ -1625,11 +1660,6 @@ struct task_struct {
struct task_cputime cputime_expires;
struct list_head cpu_timers[3];
@@ -134622,7 +134827,7 @@ index 52c4847..e87db2a 100644
char comm[TASK_COMM_LEN]; /* executable name excluding path
- access with [gs]et_task_comm (which lock
it with task_lock())
-@@ -1580,6 +1610,8 @@ struct task_struct {
+@@ -1645,6 +1675,8 @@ struct task_struct {
/* hung task detection */
unsigned long last_switch_count;
#endif
@@ -134631,7 +134836,7 @@ index 52c4847..e87db2a 100644
/* filesystem information */
struct fs_struct *fs;
/* open file information */
-@@ -1657,6 +1689,10 @@ struct task_struct {
+@@ -1723,6 +1755,10 @@ struct task_struct {
unsigned int in_ubsan;
#endif
@@ -134642,7 +134847,7 @@ index 52c4847..e87db2a 100644
/* journalling filesystem info */
void *journal_info;
-@@ -1695,6 +1731,10 @@ struct task_struct {
+@@ -1761,6 +1797,10 @@ struct task_struct {
/* cg_list protected by css_set_lock and tsk->alloc_lock */
struct list_head cg_list;
#endif
@@ -134653,7 +134858,7 @@ index 52c4847..e87db2a 100644
#ifdef CONFIG_FUTEX
struct robust_list_head __user *robust_list;
#ifdef CONFIG_COMPAT
-@@ -1810,7 +1850,7 @@ struct task_struct {
+@@ -1876,7 +1916,7 @@ struct task_struct {
* Number of functions that haven't been traced
* because of depth overrun.
*/
@@ -134662,7 +134867,7 @@ index 52c4847..e87db2a 100644
/* Pause for the tracing */
atomic_t tracing_graph_pause;
#endif
-@@ -1852,22 +1892,89 @@ struct task_struct {
+@@ -1918,22 +1958,89 @@ struct task_struct {
#ifdef CONFIG_MMU
struct task_struct *oom_reaper_list;
#endif
@@ -134762,7 +134967,7 @@ index 52c4847..e87db2a 100644
/* Future-safe accessor for struct task_struct's cpus_allowed. */
#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
-@@ -1949,7 +2056,7 @@ struct pid_namespace;
+@@ -2020,7 +2127,7 @@ struct pid_namespace;
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
struct pid_namespace *ns);
@@ -134771,7 +134976,7 @@ index 52c4847..e87db2a 100644
{
return tsk->pid;
}
-@@ -2311,6 +2418,48 @@ extern u64 sched_clock_cpu(int cpu);
+@@ -2384,6 +2491,48 @@ extern u64 sched_clock_cpu(int cpu);
extern void sched_clock_init(void);
@@ -134820,7 +135025,7 @@ index 52c4847..e87db2a 100644
#ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
static inline void sched_clock_tick(void)
{
-@@ -2436,7 +2585,9 @@ extern void set_curr_task(int cpu, struct task_struct *p);
+@@ -2539,7 +2688,9 @@ extern void set_curr_task(int cpu, struct task_struct *p);
void yield(void);
union thread_union {
@@ -134830,7 +135035,7 @@ index 52c4847..e87db2a 100644
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
-@@ -2469,6 +2620,7 @@ extern struct pid_namespace init_pid_ns;
+@@ -2572,6 +2723,7 @@ extern struct pid_namespace init_pid_ns;
*/
extern struct task_struct *find_task_by_vpid(pid_t nr);
@@ -134838,7 +135043,7 @@ index 52c4847..e87db2a 100644
extern struct task_struct *find_task_by_pid_ns(pid_t nr,
struct pid_namespace *ns);
-@@ -2500,7 +2652,7 @@ extern void proc_caches_init(void);
+@@ -2603,7 +2755,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);
@@ -134847,7 +135052,7 @@ index 52c4847..e87db2a 100644
static inline int kernel_dequeue_signal(siginfo_t *info)
{
-@@ -2654,7 +2806,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
+@@ -2795,7 +2947,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
extern void exit_itimers(struct signal_struct *);
extern void flush_itimer_signals(void);
@@ -134856,7 +135061,7 @@ index 52c4847..e87db2a 100644
extern int do_execve(struct filename *,
const char __user * const __user *,
-@@ -2769,11 +2921,13 @@ static inline int thread_group_empty(struct task_struct *p)
+@@ -2910,11 +3062,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.
*/
@@ -134870,7 +135075,7 @@ index 52c4847..e87db2a 100644
static inline void task_unlock(struct task_struct *p)
{
spin_unlock(&p->alloc_lock);
-@@ -2859,9 +3013,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
+@@ -3000,9 +3154,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)
@@ -134882,6 +135087,15 @@ index 52c4847..e87db2a 100644
return (obj >= stack) && (obj < (stack + THREAD_SIZE));
}
+@@ -3379,7 +3533,7 @@ static inline unsigned long rlimit_max(unsigned int limit)
+ struct update_util_data {
+ void (*func)(struct update_util_data *data,
+ u64 time, unsigned long util, unsigned long max);
+-};
++} __no_const;
+
+ void cpufreq_add_update_util_hook(int cpu, struct update_util_data *data,
+ void (*func)(struct update_util_data *data, u64 time,
diff --git a/include/linux/scif.h b/include/linux/scif.h
index 49a35d6..c6209dd 100644
--- a/include/linux/scif.h
@@ -134896,7 +135110,7 @@ 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 157f0cb..93989df 100644
+index 14df373..4bc1552 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -30,6 +30,7 @@
@@ -134994,10 +135208,10 @@ index f3d45dd..4539816 100644
int single_release(struct inode *, struct file *);
void *__seq_open_private(struct file *, const struct seq_operations *, int);
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
-index e058210..386666a 100644
+index ead9765..2379f94 100644
--- a/include/linux/seqlock.h
+++ b/include/linux/seqlock.h
-@@ -440,42 +440,49 @@ static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start)
+@@ -443,42 +443,49 @@ static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start)
* Acts like a normal spin_lock/unlock.
* Don't need preempt_disable() because that is in the spin_lock already.
*/
@@ -135047,7 +135261,7 @@ index e058210..386666a 100644
static inline unsigned long __write_seqlock_irqsave(seqlock_t *sl)
{
unsigned long flags;
-@@ -488,6 +495,7 @@ static inline unsigned long __write_seqlock_irqsave(seqlock_t *sl)
+@@ -491,6 +498,7 @@ static inline unsigned long __write_seqlock_irqsave(seqlock_t *sl)
#define write_seqlock_irqsave(lock, flags) \
do { flags = __write_seqlock_irqsave(lock); } while (0)
@@ -135055,7 +135269,7 @@ index e058210..386666a 100644
static inline void
write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
{
-@@ -500,11 +508,13 @@ write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
+@@ -503,11 +511,13 @@ write_sequnlock_irqrestore(seqlock_t *sl, unsigned long flags)
* but doesn't update the sequence number. Acts like a normal spin_lock/unlock.
* Don't need preempt_disable() because that is in the spin_lock already.
*/
@@ -135087,7 +135301,7 @@ index 04e8818..af85805 100644
/* shm_mode upper byte flags */
#define SHM_DEST 01000 /* segment will be destroyed on last detach */
diff --git a/include/linux/signal.h b/include/linux/signal.h
-index d80259a..41a639a 100644
+index b63f63e..fe39718 100644
--- a/include/linux/signal.h
+++ b/include/linux/signal.h
@@ -303,7 +303,7 @@ static inline void allow_signal(int sig)
@@ -135100,7 +135314,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 794b924..3b11d45 100644
+index f39b371..6f5db9d 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,
@@ -135112,7 +135326,7 @@ index 794b924..3b11d45 100644
gfp_t priority)
{
return __alloc_skb(size, priority, 0, NUMA_NO_NODE);
-@@ -2188,7 +2188,7 @@ static inline unsigned char *skb_checksum_start(const struct sk_buff *skb)
+@@ -2198,7 +2198,7 @@ static inline unsigned char *skb_checksum_start(const struct sk_buff *skb)
return skb->head + skb->csum_start;
}
@@ -135121,7 +135335,7 @@ index 794b924..3b11d45 100644
{
return skb_transport_header(skb) - skb->data;
}
-@@ -2203,7 +2203,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
+@@ -2213,7 +2213,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
return skb->inner_transport_header - skb->inner_network_header;
}
@@ -135130,7 +135344,7 @@ index 794b924..3b11d45 100644
{
return skb_network_header(skb) - skb->data;
}
-@@ -2263,7 +2263,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len)
+@@ -2273,7 +2273,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
@@ -135139,7 +135353,7 @@ index 794b924..3b11d45 100644
#endif
int ___pskb_trim(struct sk_buff *skb, unsigned int len);
-@@ -2956,9 +2956,9 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
+@@ -2966,9 +2966,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);
@@ -135151,7 +135365,7 @@ index 794b924..3b11d45 100644
struct msghdr *msg, int size)
{
return skb_copy_datagram_iter(from, offset, &msg->msg_iter, size);
-@@ -3487,6 +3487,9 @@ static inline void nf_reset(struct sk_buff *skb)
+@@ -3504,6 +3504,9 @@ static inline void nf_reset(struct sk_buff *skb)
nf_bridge_put(skb->nf_bridge);
skb->nf_bridge = NULL;
#endif
@@ -135162,7 +135376,7 @@ index 794b924..3b11d45 100644
static inline void nf_reset_trace(struct sk_buff *skb)
diff --git a/include/linux/slab.h b/include/linux/slab.h
-index 508bd82..37e5199 100644
+index aeb3e6d..c8e3382b 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -15,14 +15,29 @@
@@ -135245,18 +135459,18 @@ index 508bd82..37e5199 100644
}
#endif /* !CONFIG_SLOB */
--void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment;
-+void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment __alloc_size(1) __size_overflow(1);
- void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags) __assume_slab_alignment;
+-void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment __malloc;
++void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment __malloc __alloc_size(1) __size_overflow(1);
+ void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags) __assume_slab_alignment __malloc;
void kmem_cache_free(struct kmem_cache *, 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;
-+void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignment __alloc_size(1) __size_overflow(1);
- void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node) __assume_slab_alignment;
+-void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignment __malloc;
++void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignment __malloc __alloc_size(1) __size_overflow(1);
+ void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node) __assume_slab_alignment __malloc;
#else
-static __always_inline void *__kmalloc_node(size_t size, gfp_t flags, int node)
+static __always_inline void * __alloc_size(1) __size_overflow(1) __kmalloc_node(size_t size, gfp_t flags, int node)
@@ -135264,7 +135478,7 @@ index 508bd82..37e5199 100644
return __kmalloc(size, flags);
}
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
-index 9edbbf3..c03134d 100644
+index 8694f7a..5358aef 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -40,7 +40,7 @@ struct kmem_cache {
@@ -135296,7 +135510,7 @@ index 9edbbf3..c03134d 100644
atomic_t store_user_clean;
#endif
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
-index 665cd0c..d5dccd7 100644
+index d1faa01..3776344 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -74,7 +74,7 @@ struct kmem_cache {
@@ -135455,7 +135669,7 @@ index dc8eb63..b4b9482 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 d3993a7..19af70c 100644
+index 26b6f6a..ba9f0b4 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);
@@ -135587,11 +135801,11 @@ index d3993a7..19af70c 100644
extern void kfree_const(const void *x);
--extern char *kstrdup(const char *s, gfp_t gfp);
+-extern char *kstrdup(const char *s, gfp_t gfp) __malloc;
-extern const char *kstrdup_const(const char *s, gfp_t gfp);
-extern char *kstrndup(const char *s, size_t len, gfp_t gfp);
-extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
-+extern char *kstrdup(const char *s, gfp_t gfp) __nocapture(1);
++extern char *kstrdup(const char *s, gfp_t gfp) __malloc __nocapture(1);
+extern const char *kstrdup_const(const char *s, gfp_t gfp) __nocapture(1);
+extern char *kstrndup(const char *s, size_t len, gfp_t gfp) __nocapture(1);
+extern void *kmemdup(const void *src, size_t len, gfp_t gfp) __nocapture(1);
@@ -135652,7 +135866,7 @@ index 5c9c6cd..f16c5c9 100644
#endif /* _LINUX_SUNRPC_ADDR_H */
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
-index 14d70f5..88ae065 100644
+index b6810c9..478f297 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -103,7 +103,7 @@ struct rpc_procinfo {
@@ -135678,7 +135892,7 @@ index 7ca44fb..368f7cf 100644
/*
* Mode for mapping cpus to pools.
diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
-index 3081339..22da86c 100644
+index d6917b8..e05ca83 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;
@@ -135707,10 +135921,10 @@ index 3081339..22da86c 100644
/*
* Contexts are built when an RDMA request is created and are a
diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h
-index c00f53a..8802c3b 100644
+index 91d5a5d..d2949b2 100644
--- a/include/linux/sunrpc/svcauth.h
+++ b/include/linux/sunrpc/svcauth.h
-@@ -127,7 +127,7 @@ struct auth_ops {
+@@ -128,7 +128,7 @@ struct auth_ops {
int (*release)(struct svc_rqst *rq);
void (*domain_release)(struct auth_domain *);
int (*set_client)(struct svc_rqst *rq);
@@ -135774,7 +135988,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 d795472..721a240 100644
+index d022390..80f9811 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -102,7 +102,14 @@ union bpf_attr;
@@ -136057,7 +136271,7 @@ index b4c2a48..0a13f65 100644
#endif /* _LINUX_THREAD_INFO_H */
diff --git a/include/linux/tty.h b/include/linux/tty.h
-index a344420..c3868f9 100644
+index 40144f3..610732a 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -225,7 +225,7 @@ struct tty_port {
@@ -136068,8 +136282,8 @@ index a344420..c3868f9 100644
+ atomic_t count; /* Usage count */
wait_queue_head_t open_wait; /* Open waiters */
wait_queue_head_t delta_msr_wait; /* Modem status change */
- unsigned long flags; /* TTY flags ASY_*/
-@@ -313,7 +313,7 @@ struct tty_struct {
+ unsigned long flags; /* User TTY flags ASYNC_ */
+@@ -326,7 +326,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;
@@ -136078,7 +136292,7 @@ index a344420..c3868f9 100644
/* Each of a tty's open files has private_data pointing to tty_file_private */
struct tty_file_private {
-@@ -561,7 +561,7 @@ extern int tty_port_open(struct tty_port *port,
+@@ -646,7 +646,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)
{
@@ -136123,10 +136337,10 @@ index 3971cf0..7704c48 100644
struct tty_ldisc {
diff --git a/include/linux/types.h b/include/linux/types.h
-index 70dd3df..7950943 100644
+index baf7183..161f20f 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
-@@ -160,8 +160,10 @@ typedef unsigned __bitwise__ oom_flags_t;
+@@ -159,8 +159,10 @@ typedef unsigned __bitwise__ fmode_t;
#ifdef CONFIG_PHYS_ADDR_T_64BIT
typedef u64 phys_addr_t;
@@ -136137,7 +136351,7 @@ index 70dd3df..7950943 100644
#endif
typedef phys_addr_t resource_size_t;
-@@ -176,10 +178,26 @@ typedef struct {
+@@ -175,10 +177,26 @@ typedef struct {
int counter;
} atomic_t;
@@ -136257,7 +136471,7 @@ index 33383ca..44211d6 100644
static __always_inline void put_unaligned_le16(u16 val, void *p)
diff --git a/include/linux/usb.h b/include/linux/usb.h
-index 818bf70..3925f6b 100644
+index eba1f10..94c966f 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -370,7 +370,7 @@ struct usb_bus {
@@ -136421,10 +136635,10 @@ index b39a5f3..3f5115a 100644
#endif
#endif /* _LINUX_VGA_SWITCHEROO_H_ */
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
-index d1f1d33..10415f2 100644
+index 3d9d786..56059bf 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
-@@ -17,6 +17,14 @@ struct vm_area_struct; /* vma defining user mapping in mm_types.h */
+@@ -19,6 +19,14 @@ struct notifier_block; /* in notifier.h */
#define VM_UNINITIALIZED 0x00000020 /* vm_struct is not fully initialized */
#define VM_NO_GUARD 0x00000040 /* don't add guard page */
#define VM_KASAN 0x00000080 /* has allocated kasan shadow memory */
@@ -136439,7 +136653,7 @@ index d1f1d33..10415f2 100644
/* bits [20..32] reserved for arch specific ioremap internals */
/*
-@@ -66,6 +74,7 @@ static inline void vmalloc_init(void)
+@@ -68,6 +76,7 @@ static inline void vmalloc_init(void)
#endif
extern void *vmalloc(unsigned long size);
@@ -136447,7 +136661,7 @@ index d1f1d33..10415f2 100644
extern void *vzalloc(unsigned long size);
extern void *vmalloc_user(unsigned long size);
extern void *vmalloc_node(unsigned long size, int node);
-@@ -85,6 +94,10 @@ extern void *vmap(struct page **pages, unsigned int count,
+@@ -87,6 +96,10 @@ extern void *vmap(struct page **pages, unsigned int count,
unsigned long flags, pgprot_t prot);
extern void vunmap(const void *addr);
@@ -136458,7 +136672,7 @@ index d1f1d33..10415f2 100644
extern int remap_vmalloc_range_partial(struct vm_area_struct *vma,
unsigned long uaddr, void *kaddr,
unsigned long size);
-@@ -149,7 +162,7 @@ extern void free_vm_area(struct vm_struct *area);
+@@ -151,7 +164,7 @@ extern void free_vm_area(struct vm_struct *area);
/* for /dev/kmem */
extern long vread(char *buf, char *addr, unsigned long count);
@@ -136468,7 +136682,7 @@ index d1f1d33..10415f2 100644
/*
* Internals. Dont't use..
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
-index 73fae8c..61f415d 100644
+index d2da8e0..cc37233 100644
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
@@ -108,18 +108,18 @@ static inline void vm_events_fold_cpu(int cpu)
@@ -136517,7 +136731,7 @@ index 73fae8c..61f415d 100644
#ifdef CONFIG_SMP
int cpu;
-@@ -213,14 +213,14 @@ static inline void __mod_zone_page_state(struct zone *zone,
+@@ -215,14 +215,14 @@ static inline void __mod_zone_page_state(struct zone *zone,
static inline void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
{
@@ -136552,19 +136766,19 @@ index d0b5ca5..c13529b 100644
spin_unlock(&inode->i_lock);
}
diff --git a/include/linux/xattr.h b/include/linux/xattr.h
-index 4457541..cb0d355 100644
+index 94079ba..ae4c218 100644
--- a/include/linux/xattr.h
+++ b/include/linux/xattr.h
-@@ -34,7 +34,7 @@ struct xattr_handler {
+@@ -35,7 +35,7 @@ struct xattr_handler {
int (*set)(const struct xattr_handler *, struct dentry *dentry,
- const char *name, const void *buffer, size_t size,
- int flags);
+ struct inode *inode, const char *name, const void *buffer,
+ size_t size, int flags);
-};
+} __do_const;
const char *xattr_full_name(const struct xattr_handler *, const char *);
-@@ -45,6 +45,9 @@ struct xattr {
+@@ -46,6 +46,9 @@ struct xattr {
};
ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t);
@@ -136596,7 +136810,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 76056ab..b3a839b 100644
+index 25a3190..bafa7eb 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -74,7 +74,7 @@ struct v4l2_file_operations {
@@ -136609,7 +136823,7 @@ index 76056ab..b3a839b 100644
/*
* Newer version of video_device, handled by videodev2.c
diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h
-index 9c58157..d86ebf5 100644
+index d5d45a8..2b5f3f5 100644
--- a/include/media/v4l2-device.h
+++ b/include/media/v4l2-device.h
@@ -93,7 +93,7 @@ int __must_check v4l2_device_register(struct device *dev, struct v4l2_device *v4
@@ -136661,10 +136875,10 @@ index 5ee3c68..54f883a 100644
struct l2cap_conn {
struct hci_conn *hcon;
diff --git a/include/net/bonding.h b/include/net/bonding.h
-index 791800d..db75e5f 100644
+index 6360c25..6eb51ef 100644
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
-@@ -702,7 +702,7 @@ extern struct rtnl_link_ops bond_link_ops;
+@@ -707,7 +707,7 @@ extern struct rtnl_link_ops bond_link_ops;
static inline void bond_tx_drop(struct net_device *dev, struct sk_buff *skb)
{
@@ -136859,10 +137073,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 fad74d3..bb36af9 100644
+index 08f36cd..226b9d4 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
-@@ -326,7 +326,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb)
+@@ -325,7 +325,7 @@ static inline unsigned int ip_skb_dst_mtu(struct sock *sk,
return min(skb_dst(skb)->dev->mtu, IP_MAX_MTU);
}
@@ -136885,7 +137099,7 @@ index 4079fc1..cb82cad 100644
fib_info_update_nh_saddr((net), &FIB_RES_NH(res)))
#define FIB_RES_GW(res) (FIB_RES_NH(res).nh_gw)
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
-index a6cc576..d1a5fcb 100644
+index cd6018a..996671f 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -543,7 +543,7 @@ struct ip_vs_conn {
@@ -136906,7 +137120,7 @@ index a6cc576..d1a5fcb 100644
atomic_t weight; /* server weight */
atomic_t refcnt; /* reference counter */
-@@ -924,11 +924,11 @@ struct netns_ipvs {
+@@ -931,11 +931,11 @@ struct netns_ipvs {
/* ip_vs_lblc */
int sysctl_lblc_expiration;
struct ctl_table_header *lblc_ctl_header;
@@ -136921,10 +137135,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 1be050a..472c511 100644
+index 11a0452..782492b 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
-@@ -775,7 +775,7 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb,
+@@ -780,7 +780,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.
*/
@@ -137087,10 +137301,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 e385eb3..28bc730 100644
+index be30b05..952803b 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -1539,7 +1539,7 @@ enum ieee80211_key_flags {
+@@ -1555,7 +1555,7 @@ enum ieee80211_key_flags {
* @iv_len: The IV length for this key type
*/
struct ieee80211_key_conf {
@@ -137099,7 +137313,7 @@ index e385eb3..28bc730 100644
u32 cipher;
u8 icv_len;
u8 iv_len;
-@@ -5276,7 +5276,7 @@ struct ieee80211_tx_rate_control {
+@@ -5348,7 +5348,7 @@ struct ieee80211_tx_rate_control {
struct sk_buff *skb;
struct ieee80211_tx_rate reported_rate;
bool rts, short_preamble;
@@ -137108,7 +137322,7 @@ index e385eb3..28bc730 100644
u32 rate_idx_mask;
u8 *rate_idx_mcs_mask;
bool bss;
-@@ -5313,7 +5313,7 @@ struct rate_control_ops {
+@@ -5385,7 +5385,7 @@ struct rate_control_ops {
void (*remove_sta_debugfs)(void *priv, void *priv_sta);
u32 (*get_expected_throughput)(void *priv_sta);
@@ -137116,7 +137330,7 @@ index e385eb3..28bc730 100644
+} __do_const;
static inline int rate_supported(struct ieee80211_sta *sta,
- enum ieee80211_band band,
+ enum nl80211_band band,
diff --git a/include/net/neighbour.h b/include/net/neighbour.h
index 8b68384..48fe40e 100644
--- a/include/net/neighbour.h
@@ -137224,10 +137438,10 @@ index 4089abc..bf8084a 100644
#endif /* __NET_NET_NAMESPACE_H */
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
-index fde4068..d11e09b 100644
+index b6083c3..3fecf3b 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
-@@ -286,7 +286,7 @@ static inline bool nf_is_loopback_packet(const struct sk_buff *skb)
+@@ -294,7 +294,7 @@ static inline unsigned long nf_ct_expires(const struct nf_conn *ct)
struct kernel_param;
@@ -137235,12 +137449,12 @@ index fde4068..d11e09b 100644
+int nf_conntrack_set_hashsize(const char *val, const struct kernel_param *kp);
extern unsigned int nf_conntrack_htable_size;
extern unsigned int nf_conntrack_max;
- extern unsigned int nf_conntrack_hash_rnd;
+
diff --git a/include/net/netlink.h b/include/net/netlink.h
-index 0e31727..2f2b511 100644
+index 254a0fc..040f766 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
-@@ -521,7 +521,7 @@ static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
+@@ -532,7 +532,7 @@ static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
{
if (mark) {
WARN_ON((unsigned char *) mark < skb->data);
@@ -137250,7 +137464,7 @@ index 0e31727..2f2b511 100644
}
diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h
-index 723b61c..4386367 100644
+index 38b1a80..c2d91f1 100644
--- a/include/net/netns/conntrack.h
+++ b/include/net/netns/conntrack.h
@@ -14,10 +14,10 @@ struct nf_conntrack_ecache;
@@ -137276,7 +137490,7 @@ index 723b61c..4386367 100644
};
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
-index a69cde3..ba46ea3 100644
+index d061ffe..cc6cdb96 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -119,7 +119,7 @@ struct netns_ipv4 {
@@ -137288,9 +137502,9 @@ index a69cde3..ba46ea3 100644
#ifdef CONFIG_SYSCTL
unsigned long *sysctl_local_reserved_ports;
-@@ -133,6 +133,6 @@ struct netns_ipv4 {
- struct fib_rules_ops *mr_rules_ops;
- #endif
+@@ -136,6 +136,6 @@ struct netns_ipv4 {
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+ int sysctl_fib_multipath_use_neigh;
#endif
- atomic_t rt_genid;
+ atomic_unchecked_t rt_genid;
@@ -137338,7 +137552,7 @@ index 4cd90d6..4947311 100644
struct pingfakehdr {
diff --git a/include/net/protocol.h b/include/net/protocol.h
-index da689f5..3b3d55b 100644
+index bf36ca3..c29da79 100644
--- a/include/net/protocol.h
+++ b/include/net/protocol.h
@@ -49,7 +49,7 @@ struct net_protocol {
@@ -137360,13 +137574,13 @@ index da689f5..3b3d55b 100644
#define INET6_PROTO_NOPOLICY 0x1
#define INET6_PROTO_FINAL 0x2
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
-index 2f87c1b..5a03287 100644
+index 006a7b8..739ab6b 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
-@@ -95,7 +95,7 @@ struct rtnl_link_ops {
+@@ -102,7 +102,7 @@ struct rtnl_link_ops {
+ int (*fill_linkxstats)(struct sk_buff *skb,
const struct net_device *dev,
- const struct net_device *slave_dev);
- struct net *(*get_link_net)(const struct net_device *dev);
+ int *prividx);
-};
+} __do_const;
@@ -137410,10 +137624,10 @@ index efc0174..cb23681 100644
/* Get the size of a DATA chunk payload. */
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
-index 5a404c3..942221e 100644
+index 16b013a..1e3367e 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
-@@ -512,7 +512,7 @@ struct sctp_pf {
+@@ -513,7 +513,7 @@ struct sctp_pf {
void (*to_sk_saddr)(union sctp_addr *, struct sock *sk);
void (*to_sk_daddr)(union sctp_addr *, struct sock *sk);
struct sctp_af *af;
@@ -137423,7 +137637,7 @@ index 5a404c3..942221e 100644
/* Structure to track chunk fragments that have been acked, but peer
diff --git a/include/net/snmp.h b/include/net/snmp.h
-index 35512ac..edbd85b 100644
+index c9228ad..5543dfb 100644
--- a/include/net/snmp.h
+++ b/include/net/snmp.h
@@ -67,7 +67,7 @@ struct icmp_mib {
@@ -137456,8 +137670,8 @@ index 35512ac..edbd85b 100644
};
-@@ -130,7 +130,7 @@ struct linux_xfrm_mib {
- this_cpu_inc(mib->mibs[field])
+@@ -127,7 +127,7 @@ struct linux_xfrm_mib {
+ __this_cpu_inc(mib->mibs[field])
#define SNMP_INC_STATS_ATOMIC_LONG(mib, field) \
- atomic_long_inc(&mib->mibs[field])
@@ -137466,7 +137680,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 121ffc1..0c44dfd 100644
+index ff5be7e..598bf64 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -188,7 +188,7 @@ struct sock_common {
@@ -137487,7 +137701,7 @@ index 121ffc1..0c44dfd 100644
int sk_rcvbuf;
struct sk_filter __rcu *sk_filter;
-@@ -1041,7 +1041,7 @@ struct proto {
+@@ -1069,7 +1069,7 @@ struct proto {
atomic_t socks;
#endif
int (*diag_destroy)(struct sock *sk, int err);
@@ -137496,7 +137710,7 @@ index 121ffc1..0c44dfd 100644
int proto_register(struct proto *prot, int alloc_slab);
void proto_unregister(struct proto *prot);
-@@ -1128,7 +1128,7 @@ static inline long sk_prot_mem_limits(const struct sock *sk, int index)
+@@ -1156,7 +1156,7 @@ static inline long sk_prot_mem_limits(const struct sock *sk, int index)
return sk->sk_prot->sysctl_mem[index];
}
@@ -137505,7 +137719,7 @@ index 121ffc1..0c44dfd 100644
sk_memory_allocated(const struct sock *sk)
{
return atomic_long_read(sk->sk_prot->memory_allocated);
-@@ -1687,7 +1687,7 @@ static inline bool sk_check_csum_caps(struct sock *sk)
+@@ -1759,7 +1759,7 @@ static inline bool sk_check_csum_caps(struct sock *sk)
}
static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb,
@@ -137514,7 +137728,7 @@ index 121ffc1..0c44dfd 100644
int copy, int offset)
{
if (skb->ip_summed == CHECKSUM_NONE) {
-@@ -1932,7 +1932,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
+@@ -2013,7 +2013,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
}
}
@@ -137523,7 +137737,7 @@ index 121ffc1..0c44dfd 100644
bool force_schedule);
/**
-@@ -2008,7 +2008,7 @@ struct sock_skb_cb {
+@@ -2089,14 +2089,14 @@ struct sock_skb_cb {
static inline void
sock_skb_set_dropcount(const struct sock *sk, struct sk_buff *skb)
{
@@ -137531,12 +137745,20 @@ index 121ffc1..0c44dfd 100644
+ SOCK_SKB_CB(skb)->dropcount = atomic_read_unchecked(&sk->sk_drops);
}
+ static inline void sk_drops_add(struct sock *sk, const struct sk_buff *skb)
+ {
+ int segs = max_t(u16, 1, skb_shinfo(skb)->gso_segs);
+
+- atomic_add(segs, &sk->sk_drops);
++ atomic_add_unchecked(segs, &sk->sk_drops);
+ }
+
void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
diff --git a/include/net/tcp.h b/include/net/tcp.h
-index 6db1022..7138bec 100644
+index 0bcc70f..5c46882 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
-@@ -539,7 +539,7 @@ void tcp_retransmit_timer(struct sock *sk);
+@@ -543,7 +543,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);
@@ -137545,7 +137767,7 @@ index 6db1022..7138bec 100644
void tcp_send_probe0(struct sock *);
void tcp_send_partial(struct sock *);
-@@ -728,8 +728,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
+@@ -732,8 +732,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 {
@@ -137556,20 +137778,29 @@ index 6db1022..7138bec 100644
union {
/* Note : tcp_tw_isn is used in input path only
* (isn chosen by tcp_timewait_state_process())
-@@ -757,7 +757,7 @@ struct tcp_skb_cb {
-
- __u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */
- /* 1 byte hole */
+@@ -763,7 +763,7 @@ struct tcp_skb_cb {
+ __u8 txstamp_ack:1, /* Record TX timestamp for ack? */
+ eor:1, /* Is skb MSG_EOR marked? */
+ unused:6;
- __u32 ack_seq; /* Sequence number ACK'd */
+ __u32 ack_seq __intentional_overflow(-1); /* Sequence number ACK'd */
union {
- struct inet_skb_parm h4;
- #if IS_ENABLED(CONFIG_IPV6)
+ struct {
+ /* There is space for up to 20 bytes */
+@@ -1869,7 +1869,7 @@ static inline void tcp_segs_in(struct tcp_sock *tp, const struct sk_buff *skb)
+ */
+ static inline void tcp_listendrop(const struct sock *sk)
+ {
+- atomic_inc(&((struct sock *)sk)->sk_drops);
++ atomic_inc_unchecked(&((struct sock *)sk)->sk_drops);
+ __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENDROPS);
+ }
+
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
-index d6f6e50..6fea29e 100644
+index adfebd6..5084f8e 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
-@@ -284,7 +284,6 @@ struct xfrm_dst;
+@@ -280,7 +280,6 @@ struct xfrm_dst;
struct xfrm_policy_afinfo {
unsigned short family;
struct dst_ops *dst_ops;
@@ -137577,7 +137808,7 @@ index d6f6e50..6fea29e 100644
struct dst_entry *(*dst_lookup)(struct net *net,
int tos, int oif,
const xfrm_address_t *saddr,
-@@ -303,7 +302,7 @@ struct xfrm_policy_afinfo {
+@@ -299,7 +298,7 @@ struct xfrm_policy_afinfo {
struct net_device *dev,
const struct flowi *fl);
struct dst_entry *(*blackhole_route)(struct net *net, struct dst_entry *orig);
@@ -137586,7 +137817,7 @@ index d6f6e50..6fea29e 100644
int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo);
int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo);
-@@ -342,7 +341,7 @@ struct xfrm_state_afinfo {
+@@ -338,7 +337,7 @@ struct xfrm_state_afinfo {
int (*transport_finish)(struct sk_buff *skb,
int async);
void (*local_error)(struct sk_buff *skb, u32 mtu);
@@ -137595,7 +137826,7 @@ index d6f6e50..6fea29e 100644
int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
-@@ -437,7 +436,7 @@ struct xfrm_mode {
+@@ -433,7 +432,7 @@ struct xfrm_mode {
struct module *owner;
unsigned int encap;
int flags;
@@ -137604,7 +137835,7 @@ index d6f6e50..6fea29e 100644
/* Flags for xfrm_mode. */
enum {
-@@ -532,7 +531,7 @@ struct xfrm_policy {
+@@ -528,7 +527,7 @@ struct xfrm_policy {
struct timer_list timer;
struct flow_cache_object flo;
@@ -137613,7 +137844,7 @@ index d6f6e50..6fea29e 100644
u32 priority;
u32 index;
struct xfrm_mark mark;
-@@ -603,7 +602,7 @@ struct xfrm_mgr {
+@@ -599,7 +598,7 @@ struct xfrm_mgr {
int num_bundles,
const struct xfrm_kmaddress *k);
bool (*is_alive)(const struct km_event *c);
@@ -137622,7 +137853,7 @@ index d6f6e50..6fea29e 100644
int xfrm_register_km(struct xfrm_mgr *km);
int xfrm_unregister_km(struct xfrm_mgr *km);
-@@ -1172,6 +1171,7 @@ static inline void xfrm_sk_free_policy(struct sock *sk)
+@@ -1168,6 +1167,7 @@ static inline void xfrm_sk_free_policy(struct sock *sk)
}
void xfrm_garbage_collect(struct net *net);
@@ -137630,7 +137861,7 @@ index d6f6e50..6fea29e 100644
#else
-@@ -1210,6 +1210,9 @@ static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir,
+@@ -1206,6 +1206,9 @@ static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir,
static inline void xfrm_garbage_collect(struct net *net)
{
}
@@ -137666,6 +137897,19 @@ index 92a7d85..1779570 100644
u8 info_length,
const void *private_data,
u8 private_data_len);
+diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
+index 7e440d4..2fc0a83 100644
+--- a/include/rdma/ib_verbs.h
++++ b/include/rdma/ib_verbs.h
+@@ -1187,7 +1187,7 @@ struct ib_sge {
+
+ struct ib_cqe {
+ void (*done)(struct ib_cq *cq, struct ib_wc *wc);
+-};
++} __no_const;
+
+ struct ib_send_wr {
+ struct ib_send_wr *next;
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 93d14da..734b3d8 100644
--- a/include/scsi/libfc.h
@@ -137688,10 +137932,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 a505079..bf8ba88 100644
+index a6c346d..3b33417 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
-@@ -188,9 +188,9 @@ struct scsi_device {
+@@ -194,9 +194,9 @@ struct scsi_device {
unsigned int max_device_blocked; /* what device_blocked counts down from */
#define SCSI_DEFAULT_DEVICE_BLOCKED 3
@@ -137814,7 +138058,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 02b4a21..36efb0e 100644
+index fd7b58a..fd40a10 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -920,7 +920,7 @@ struct snd_soc_codec_driver {
@@ -138067,7 +138311,7 @@ index 4cb2835..cfbc4e2 100644
__u16 len; /* Length of the following data */
diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
-index 71e1d0e..6cc9caf 100644
+index cb4a72f..3f0f045 100644
--- a/include/uapi/linux/elf.h
+++ b/include/uapi/linux/elf.h
@@ -37,6 +37,17 @@ typedef __s64 Elf64_Sxword;
@@ -138117,7 +138361,7 @@ index 71e1d0e..6cc9caf 100644
typedef struct elf32_phdr{
Elf32_Word p_type;
Elf32_Off p_offset;
-@@ -332,6 +358,8 @@ typedef struct elf64_shdr {
+@@ -334,6 +360,8 @@ typedef struct elf64_shdr {
#define EI_OSABI 7
#define EI_PAD 8
@@ -138229,7 +138473,7 @@ index 30f5362..8ed8ac9 100644
void *pmi_pal;
u8 *vbe_state_orig; /*
diff --git a/init/Kconfig b/init/Kconfig
-index 0dfd09d..177e567 100644
+index c02d897..e960810 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -286,7 +286,8 @@ config FHANDLE
@@ -138250,7 +138494,7 @@ index 0dfd09d..177e567 100644
help
This option provides tracing for the TREE_RCU and
PREEMPT_RCU implementations, permitting Makefile to
-@@ -1133,6 +1135,7 @@ endif # CGROUPS
+@@ -1155,6 +1157,7 @@ endif # CGROUPS
config CHECKPOINT_RESTORE
bool "Checkpoint/restore support" if EXPERT
select PROC_CHILDREN
@@ -138258,15 +138502,16 @@ index 0dfd09d..177e567 100644
default n
help
Enables additional kernel features in a sake of checkpoint/restore.
-@@ -1423,6 +1426,7 @@ config KALLSYMS_ALL
-
- config KALLSYMS_ABSOLUTE_PERCPU
- bool
-+ depends on KALLSYMS
- default X86_64 && SMP
-
- config KALLSYMS_BASE_RELATIVE
-@@ -1699,7 +1703,7 @@ config SLUB_DEBUG
+@@ -1627,7 +1630,7 @@ config ADVISE_SYSCALLS
+ config USERFAULTFD
+ bool "Enable userfaultfd() system call"
+ select ANON_INODES
+- depends on MMU
++ depends on MMU && !GRKERNSEC
+ help
+ Enable the userfaultfd() system call that allows to intercept and
+ handle page faults in userland.
+@@ -1740,7 +1743,7 @@ config SLUB_DEBUG
config COMPAT_BRK
bool "Disable heap randomization"
@@ -138609,10 +138854,21 @@ index b32ad7d..05f6420 100644
next_state = Reset;
return 0;
diff --git a/init/main.c b/init/main.c
-index b3c6e36..71ab08e 100644
+index eae02aa..38ba7994 100644
--- a/init/main.c
+++ b/init/main.c
-@@ -94,6 +94,8 @@ extern void init_IRQ(void);
+@@ -11,6 +11,10 @@
+
+ #define DEBUG /* Enable initcall_debug */
+
++#ifdef CONFIG_GRKERNSEC_HIDESYM
++#define __INCLUDED_BY_HIDESYM 1
++#endif
++
+ #include <linux/types.h>
+ #include <linux/module.h>
+ #include <linux/proc_fs.h>
+@@ -94,6 +98,8 @@ extern void init_IRQ(void);
extern void fork_init(void);
extern void radix_tree_init(void);
@@ -138621,7 +138877,7 @@ index b3c6e36..71ab08e 100644
/*
* 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
-@@ -155,6 +157,48 @@ static int __init set_reset_devices(char *str)
+@@ -155,6 +161,48 @@ static int __init set_reset_devices(char *str)
__setup("reset_devices", set_reset_devices);
@@ -138670,16 +138926,7 @@ index b3c6e36..71ab08e 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;
-@@ -708,7 +752,7 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn)
- struct blacklist_entry *entry;
- char *fn_name;
-
-- fn_name = kasprintf(GFP_KERNEL, "%pf", fn);
-+ fn_name = kasprintf(GFP_KERNEL, "%pX", fn);
- if (!fn_name)
- return false;
-
-@@ -759,7 +803,7 @@ int __init_or_module do_one_initcall(initcall_t fn)
+@@ -761,7 +809,7 @@ int __init_or_module do_one_initcall(initcall_t fn)
{
int count = preempt_count();
int ret;
@@ -138688,7 +138935,7 @@ index b3c6e36..71ab08e 100644
if (initcall_blacklisted(fn))
return -EPERM;
-@@ -769,18 +813,17 @@ int __init_or_module do_one_initcall(initcall_t fn)
+@@ -771,18 +819,17 @@ int __init_or_module do_one_initcall(initcall_t fn)
else
ret = fn();
@@ -138711,7 +138958,7 @@ index b3c6e36..71ab08e 100644
return ret;
}
-@@ -885,8 +928,8 @@ static int run_init_process(const char *init_filename)
+@@ -887,8 +934,8 @@ static int run_init_process(const char *init_filename)
{
argv_init[0] = init_filename;
return do_execve(getname_kernel(init_filename),
@@ -138722,7 +138969,7 @@ index b3c6e36..71ab08e 100644
}
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)
+@@ -905,6 +952,10 @@ static int try_to_run_init_process(const char *init_filename)
return ret;
}
@@ -138733,7 +138980,7 @@ index b3c6e36..71ab08e 100644
static noinline void __init kernel_init_freeable(void);
#ifdef CONFIG_DEBUG_RODATA
-@@ -951,6 +998,11 @@ static int __ref kernel_init(void *unused)
+@@ -953,6 +1004,11 @@ static int __ref kernel_init(void *unused)
ramdisk_execute_command, ret);
}
@@ -138745,7 +138992,7 @@ index b3c6e36..71ab08e 100644
/*
* We try each of these until one succeeds.
*
-@@ -1008,7 +1060,7 @@ static noinline void __init kernel_init_freeable(void)
+@@ -1010,7 +1066,7 @@ static noinline void __init kernel_init_freeable(void)
do_basic_setup();
/* Open the /dev/console on the rootfs, this should never fail */
@@ -138754,7 +139001,7 @@ index b3c6e36..71ab08e 100644
pr_err("Warning: unable to open an initial console.\n");
(void) sys_dup(0);
-@@ -1021,11 +1073,13 @@ static noinline void __init kernel_init_freeable(void)
+@@ -1023,11 +1079,13 @@ static noinline void __init kernel_init_freeable(void)
if (!ramdisk_execute_command)
ramdisk_execute_command = "/init";
@@ -138961,7 +139208,7 @@ index b3757ea..387f432 100644
/*
diff --git a/ipc/shm.c b/ipc/shm.c
-index 331fc1b..ee0e110 100644
+index 1328251..3e9e243 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -72,9 +72,17 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp);
@@ -139032,7 +139279,7 @@ index 331fc1b..ee0e110 100644
size = i_size_read(d_inode(path.dentry));
ipc_unlock_object(&shp->shm_perm);
rcu_read_unlock();
-@@ -1365,7 +1394,8 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr)
+@@ -1370,7 +1399,8 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr)
static int sysvipc_shm_proc_show(struct seq_file *s, void *it)
{
struct user_namespace *user_ns = seq_user_ns(s);
@@ -139067,10 +139314,10 @@ 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 678c3f0..188341c 100644
+index 8d528f9..ec997a7 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
-@@ -123,7 +123,7 @@ u32 audit_sig_sid = 0;
+@@ -122,7 +122,7 @@ u32 audit_sig_sid = 0;
3) suppressed due to audit_rate_limit
4) suppressed due to audit_backlog_limit
*/
@@ -139079,7 +139326,7 @@ index 678c3f0..188341c 100644
/* The netlink socket. */
static struct sock *audit_sock;
-@@ -257,7 +257,7 @@ void audit_log_lost(const char *message)
+@@ -256,7 +256,7 @@ void audit_log_lost(const char *message)
unsigned long now;
int print;
@@ -139088,7 +139335,7 @@ index 678c3f0..188341c 100644
print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit);
-@@ -274,7 +274,7 @@ void audit_log_lost(const char *message)
+@@ -273,7 +273,7 @@ void audit_log_lost(const char *message)
if (print) {
if (printk_ratelimit())
pr_warn("audit_lost=%u audit_rate_limit=%u audit_backlog_limit=%u\n",
@@ -139097,7 +139344,7 @@ index 678c3f0..188341c 100644
audit_rate_limit,
audit_backlog_limit);
audit_panic(message);
-@@ -856,7 +856,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -854,7 +854,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;
@@ -139106,7 +139353,7 @@ index 678c3f0..188341c 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;
-@@ -1173,7 +1173,7 @@ static void __net_exit audit_net_exit(struct net *net)
+@@ -1171,7 +1171,7 @@ static void __net_exit audit_net_exit(struct net *net)
netlink_kernel_release(sock);
}
@@ -139116,10 +139363,10 @@ index 678c3f0..188341c 100644
.exit = audit_net_exit,
.id = &audit_net_id,
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
-index 7d0e3cf..023002c 100644
+index 2672d10..63bd1ca 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
-@@ -1024,7 +1024,7 @@ static int audit_log_single_execve_arg(struct audit_context *context,
+@@ -1023,7 +1023,7 @@ static int audit_log_single_execve_arg(struct audit_context *context,
* for strings that are too long, we should not have created
* any.
*/
@@ -139128,7 +139375,7 @@ index 7d0e3cf..023002c 100644
send_sig(SIGKILL, current, 0);
return -1;
}
-@@ -1955,7 +1955,7 @@ int auditsc_get_stamp(struct audit_context *ctx,
+@@ -1954,7 +1954,7 @@ int auditsc_get_stamp(struct audit_context *ctx,
}
/* global counter which is incremented every time something logs in */
@@ -139137,7 +139384,7 @@ index 7d0e3cf..023002c 100644
static int audit_set_loginuid_perm(kuid_t loginuid)
{
-@@ -2022,7 +2022,7 @@ int audit_set_loginuid(kuid_t loginuid)
+@@ -2026,7 +2026,7 @@ int audit_set_loginuid(kuid_t loginuid)
/* are we setting or clearing? */
if (uid_valid(loginuid))
@@ -139147,11 +139394,11 @@ index 7d0e3cf..023002c 100644
task->sessionid = sessionid;
task->loginuid = loginuid;
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
-index be0abf6..28fce60 100644
+index b94a365..c7f20a7 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
-@@ -139,6 +139,8 @@ void __bpf_prog_free(struct bpf_prog *fp)
- EXPORT_SYMBOL_GPL(__bpf_prog_free);
+@@ -208,6 +208,8 @@ struct bpf_prog *bpf_patch_insn_single(struct bpf_prog *prog, u32 off,
+ }
#ifdef CONFIG_BPF_JIT
+extern long __rap_hash___bpf_prog_run;
@@ -139159,7 +139406,7 @@ index be0abf6..28fce60 100644
struct bpf_binary_header *
bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
unsigned int alignment,
-@@ -152,27 +154,45 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
+@@ -221,27 +223,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);
@@ -139182,7 +139429,7 @@ index be0abf6..28fce60 100644
+ hole -= 8;
+#endif
+
- start = (prandom_u32() % hole) & ~(alignment - 1);
+ start = (get_random_int() % hole) & ~(alignment - 1);
+#ifdef CONFIG_PAX_RAP
+ start += 8;
@@ -139205,9 +139452,9 @@ index be0abf6..28fce60 100644
- module_memfree(hdr);
+ module_memfree_exec(hdr);
}
- #endif /* CONFIG_BPF_JIT */
-@@ -193,7 +213,7 @@ EXPORT_SYMBOL_GPL(__bpf_call_base);
+ int bpf_jit_harden __read_mostly;
+@@ -465,7 +485,7 @@ EXPORT_SYMBOL_GPL(__bpf_call_base);
*
* Decode and execute eBPF instructions.
*/
@@ -139216,17 +139463,17 @@ index be0abf6..28fce60 100644
{
u64 stack[MAX_BPF_STACK / sizeof(u64)];
u64 regs[MAX_BPF_REG], tmp;
-@@ -698,7 +718,7 @@ static int bpf_check_tail_call(const struct bpf_prog *fp)
+@@ -971,7 +991,7 @@ static int bpf_check_tail_call(const struct bpf_prog *fp)
*/
- int bpf_prog_select_runtime(struct bpf_prog *fp)
+ struct bpf_prog *bpf_prog_select_runtime(struct bpf_prog *fp, int *err)
{
- fp->bpf_func = (void *) __bpf_prog_run;
+ fp->bpf_func = __bpf_prog_run;
- bpf_int_jit_compile(fp);
- bpf_prog_lock_ro(fp);
+ /* eBPF JITs can rewrite the program in case constant
+ * blinding is active. However, in case of error during
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
-index cf5e9f7..81ece72 100644
+index 46ecce4..46c1a1a 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -805,8 +805,16 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
@@ -139346,10 +139593,10 @@ index 45432b5..7d860f7 100644
+}
+EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog);
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
-index 86cb5c6..2b03272 100644
+index 75c0ff0..bf4be97 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
-@@ -3628,7 +3628,7 @@ static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp,
+@@ -3634,7 +3634,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),
@@ -139358,7 +139605,7 @@ index 86cb5c6..2b03272 100644
NULL, key);
if (IS_ERR(kn))
return PTR_ERR(kn);
-@@ -3732,11 +3732,14 @@ static void cgroup_exit_cftypes(struct cftype *cfts)
+@@ -3738,11 +3738,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);
@@ -139376,7 +139623,7 @@ index 86cb5c6..2b03272 100644
}
}
-@@ -3767,8 +3770,10 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3773,8 +3776,10 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
kf_ops->atomic_write_len = cft->max_write_len;
}
@@ -139389,7 +139636,7 @@ index 86cb5c6..2b03272 100644
}
return 0;
-@@ -3781,7 +3786,7 @@ static int cgroup_rm_cftypes_locked(struct cftype *cfts)
+@@ -3787,7 +3792,7 @@ static int cgroup_rm_cftypes_locked(struct cftype *cfts)
if (!cfts || !cfts[0].ss)
return -ENOENT;
@@ -139398,7 +139645,7 @@ index 86cb5c6..2b03272 100644
cgroup_apply_cftypes(cfts, false);
cgroup_exit_cftypes(cfts);
return 0;
-@@ -3838,7 +3843,7 @@ static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3844,7 +3849,7 @@ static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
mutex_lock(&cgroup_mutex);
@@ -139407,7 +139654,7 @@ index 86cb5c6..2b03272 100644
ret = cgroup_apply_cftypes(cfts, true);
if (ret)
cgroup_rm_cftypes_locked(cfts);
-@@ -3859,8 +3864,10 @@ int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3865,8 +3870,10 @@ int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
{
struct cftype *cft;
@@ -139419,7 +139666,7 @@ index 86cb5c6..2b03272 100644
return cgroup_add_cftypes(ss, cfts);
}
-@@ -3876,8 +3883,10 @@ int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3882,8 +3889,10 @@ int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
{
struct cftype *cft;
@@ -139431,17 +139678,17 @@ index 86cb5c6..2b03272 100644
return cgroup_add_cftypes(ss, cfts);
}
-@@ -6044,6 +6053,9 @@ static void cgroup_release_agent(struct work_struct *work)
+@@ -6048,6 +6057,9 @@ static void cgroup_release_agent(struct work_struct *work)
if (!pathbuf || !agentbuf)
goto out;
+ if (agentbuf[0] == '\0')
+ goto out;
+
- spin_lock_bh(&css_set_lock);
+ spin_lock_irq(&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)
+ spin_unlock_irq(&css_set_lock);
+@@ -6467,7 +6479,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v)
struct task_struct *task;
int count = 0;
@@ -139859,11 +140106,24 @@ index 2a20c0d..3eb7d03 100644
#ifdef CONFIG_MODULE_UNLOAD
{
+diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
+index 179ef46..8d030ca 100644
+--- a/kernel/events/callchain.c
++++ b/kernel/events/callchain.c
+@@ -241,7 +241,7 @@ int perf_event_max_stack_handler(struct ctl_table *table, int write,
+ {
+ int *value = table->data;
+ int new_value = *value, ret;
+- struct ctl_table new_table = *table;
++ ctl_table_no_const new_table = *table;
+
+ new_table.data = &new_value;
+ ret = proc_dointvec_minmax(&new_table, write, buffer, lenp, ppos);
diff --git a/kernel/events/core.c b/kernel/events/core.c
-index a69c90c..9344bfe 100644
+index 43d43a2d..45eaa14 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
-@@ -350,8 +350,15 @@ static struct srcu_struct pmus_srcu;
+@@ -352,8 +352,15 @@ static struct srcu_struct pmus_srcu;
* 0 - disallow raw tracepoint access for unpriv
* 1 - disallow cpu events for unpriv
* 2 - disallow kernel profiling for unpriv
@@ -139880,7 +140140,7 @@ index a69c90c..9344bfe 100644
/* Minimum for 512 kiB + 1 user control page */
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
-@@ -499,7 +506,7 @@ void perf_sample_event_took(u64 sample_len_ns)
+@@ -501,7 +508,7 @@ void perf_sample_event_took(u64 sample_len_ns)
}
}
@@ -139889,7 +140149,7 @@ index a69c90c..9344bfe 100644
static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
enum event_type_t event_type);
-@@ -965,8 +972,9 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu)
+@@ -967,8 +974,9 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu)
timer->function = perf_mux_hrtimer_handler;
}
@@ -139900,7 +140160,7 @@ index a69c90c..9344bfe 100644
struct hrtimer *timer = &cpuctx->hrtimer;
struct pmu *pmu = cpuctx->ctx.pmu;
unsigned long flags;
-@@ -2910,7 +2918,7 @@ void __perf_event_task_sched_in(struct task_struct *prev,
+@@ -3044,7 +3052,7 @@ void __perf_event_task_sched_in(struct task_struct *prev,
perf_pmu_sched_task(prev, task, true);
}
@@ -139909,7 +140169,7 @@ index a69c90c..9344bfe 100644
{
u64 frequency = event->attr.sample_freq;
u64 sec = NSEC_PER_SEC;
-@@ -3963,9 +3971,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
+@@ -4090,9 +4098,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
total += perf_event_count(event);
*enabled += event->total_time_enabled +
@@ -139921,7 +140181,7 @@ index a69c90c..9344bfe 100644
list_for_each_entry(child, &event->child_list, child_list) {
(void)perf_event_read(child, false);
-@@ -3997,12 +4005,12 @@ static int __perf_read_group_add(struct perf_event *leader,
+@@ -4124,12 +4132,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 +
@@ -139936,7 +140196,7 @@ index a69c90c..9344bfe 100644
}
/*
-@@ -4512,10 +4520,10 @@ void perf_event_update_userpage(struct perf_event *event)
+@@ -4652,10 +4660,10 @@ void perf_event_update_userpage(struct perf_event *event)
userpg->offset -= local64_read(&event->hw.prev_count);
userpg->time_enabled = enabled +
@@ -139949,7 +140209,7 @@ index a69c90c..9344bfe 100644
arch_perf_update_userpage(event, userpg, now);
-@@ -5190,7 +5198,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
+@@ -5344,7 +5352,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
/* Data. */
sp = perf_user_stack_pointer(regs);
@@ -139958,7 +140218,7 @@ index a69c90c..9344bfe 100644
dyn_size = dump_size - rem;
perf_output_skip(handle, rem);
-@@ -5281,11 +5289,11 @@ static void perf_output_read_one(struct perf_output_handle *handle,
+@@ -5435,11 +5443,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 +
@@ -139972,7 +140232,7 @@ index a69c90c..9344bfe 100644
}
if (read_format & PERF_FORMAT_ID)
values[n++] = primary_event_id(event);
-@@ -7594,8 +7602,7 @@ perf_event_mux_interval_ms_store(struct device *dev,
+@@ -8391,8 +8399,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);
@@ -139982,7 +140242,7 @@ index a69c90c..9344bfe 100644
}
put_online_cpus();
mutex_unlock(&mux_interval_mutex);
-@@ -7983,7 +7990,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
+@@ -8809,7 +8816,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));
@@ -139991,7 +140251,7 @@ index a69c90c..9344bfe 100644
event->state = PERF_EVENT_STATE_INACTIVE;
-@@ -8345,6 +8352,11 @@ SYSCALL_DEFINE5(perf_event_open,
+@@ -9200,6 +9207,11 @@ SYSCALL_DEFINE5(perf_event_open,
if (flags & ~PERF_FLAG_ALL)
return -EINVAL;
@@ -140003,7 +140263,7 @@ index a69c90c..9344bfe 100644
err = perf_copy_attr(attr_uptr, &attr);
if (err)
return err;
-@@ -8859,10 +8871,10 @@ static void sync_child_event(struct perf_event *child_event,
+@@ -9714,10 +9726,10 @@ static void sync_child_event(struct perf_event *child_event,
/*
* Add back the child's count to the parent's count:
*/
@@ -140018,10 +140278,10 @@ index a69c90c..9344bfe 100644
}
diff --git a/kernel/events/internal.h b/kernel/events/internal.h
-index 4199b6d..a4bfd7e 100644
+index 05f9f6d..d619202 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)
+@@ -123,10 +123,10 @@ static inline unsigned long perf_aux_size(struct ring_buffer *rb)
return rb->aux_nr_pages << PAGE_SHIFT;
}
@@ -140034,7 +140294,7 @@ index 4199b6d..a4bfd7e 100644
{ \
unsigned long size, written; \
\
-@@ -151,7 +151,7 @@ memcpy_common(void *dst, const void *src, unsigned long n)
+@@ -159,7 +159,7 @@ memcpy_common(void *dst, const void *src, unsigned long n)
return 0;
}
@@ -140043,7 +140303,7 @@ index 4199b6d..a4bfd7e 100644
static inline unsigned long
memcpy_skip(void *dst, const void *src, unsigned long n)
-@@ -159,7 +159,7 @@ memcpy_skip(void *dst, const void *src, unsigned long n)
+@@ -167,7 +167,7 @@ memcpy_skip(void *dst, const void *src, unsigned long n)
return 0;
}
@@ -140052,7 +140312,7 @@ index 4199b6d..a4bfd7e 100644
#ifndef arch_perf_out_copy_user
#define arch_perf_out_copy_user arch_perf_out_copy_user
-@@ -177,7 +177,7 @@ arch_perf_out_copy_user(void *dst, const void *src, unsigned long n)
+@@ -185,7 +185,7 @@ arch_perf_out_copy_user(void *dst, const void *src, unsigned long n)
}
#endif
@@ -140062,10 +140322,10 @@ index 4199b6d..a4bfd7e 100644
/* Callchain handling */
extern struct perf_callchain_entry *
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
-index 7edc95e..1313732 100644
+index b7a525a..6fe00ea 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
-@@ -1691,7 +1691,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
+@@ -1694,7 +1694,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
{
struct page *page;
uprobe_opcode_t opcode;
@@ -140073,9 +140333,9 @@ index 7edc95e..1313732 100644
+ long result;
pagefault_disable();
- result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr,
+ result = __get_user(opcode, (uprobe_opcode_t __user *)vaddr);
diff --git a/kernel/exit.c b/kernel/exit.c
-index 79c7e38..e8a4ef023 100644
+index 9e6e135..4af378d 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -170,6 +170,10 @@ void release_task(struct task_struct *p)
@@ -140247,29 +140507,29 @@ index 79c7e38..e8a4ef023 100644
if (wo->wo_flags & __WNOTHREAD)
break;
diff --git a/kernel/fork.c b/kernel/fork.c
-index d277e83..824b594 100644
+index 4a7ec0c..c49705c 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -197,12 +197,55 @@ static void free_thread_info(struct thread_info *ti)
- void thread_info_cache_init(void)
+@@ -197,12 +197,55 @@ static void free_thread_stack(unsigned long *stack)
+ void thread_stack_cache_init(void)
{
- thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE,
+ thread_stack_cache = kmem_cache_create("thread_stack", THREAD_SIZE,
- THREAD_SIZE, 0, NULL);
+ THREAD_SIZE, SLAB_USERCOPY, NULL);
- BUG_ON(thread_info_cache == NULL);
+ BUG_ON(thread_stack_cache == NULL);
}
# endif
#endif
+#ifdef CONFIG_GRKERNSEC_KSTACKOVERFLOW
-+static inline struct thread_info *gr_alloc_thread_info_node(struct task_struct *tsk,
++static inline unsigned long *gr_alloc_thread_stack_node(struct task_struct *tsk,
+ int node, void **lowmem_stack)
+{
+ struct page *pages[THREAD_SIZE / PAGE_SIZE];
+ void *ret = NULL;
+ unsigned int i;
+
-+ *lowmem_stack = alloc_thread_info_node(tsk, node);
++ *lowmem_stack = alloc_thread_stack_node(tsk, node);
+ if (*lowmem_stack == NULL)
+ goto out;
+
@@ -140279,7 +140539,7 @@ index d277e83..824b594 100644
+ /* use VM_IOREMAP to gain THREAD_SIZE alignment */
+ ret = vmap(pages, THREAD_SIZE / PAGE_SIZE, VM_IOREMAP, PAGE_KERNEL);
+ if (ret == NULL) {
-+ free_thread_info(*lowmem_stack);
++ free_thread_stack(*lowmem_stack);
+ *lowmem_stack = NULL;
+ } else
+ populate_stack(ret);
@@ -140288,19 +140548,19 @@ index d277e83..824b594 100644
+ return ret;
+}
+
-+static inline void gr_free_thread_info(struct task_struct *tsk, struct thread_info *ti)
++static inline void gr_free_thread_stack(struct task_struct *tsk, unsigned long *stack)
+{
+ unmap_process_stacks(tsk);
+}
+#else
-+static inline struct thread_info *gr_alloc_thread_info_node(struct task_struct *tsk,
++static inline unsigned long *gr_alloc_thread_stack_node(struct task_struct *tsk,
+ int node, void **lowmem_stack)
+{
-+ return alloc_thread_info_node(tsk, node);
++ return alloc_thread_stack_node(tsk, node);
+}
-+static inline void gr_free_thread_info(struct task_struct *tsk, struct thread_info *ti)
++static inline void gr_free_thread_stack(struct task_struct *tsk, unsigned long *stack)
+{
-+ free_thread_info(ti);
++ free_thread_stack(stack);
+}
+#endif
+
@@ -140311,13 +140571,13 @@ index d277e83..824b594 100644
/* SLAB cache for mm_struct structures (tsk->mm) */
static struct kmem_cache *mm_cachep;
--static void account_kernel_stack(struct thread_info *ti, int account)
-+static void account_kernel_stack(struct task_struct *tsk, struct thread_info *ti, int account)
+-static void account_kernel_stack(unsigned long *stack, int account)
++static void account_kernel_stack(struct task_struct *tsk, unsigned long *stack, int account)
{
+#ifdef CONFIG_GRKERNSEC_KSTACKOVERFLOW
+ struct zone *zone = page_zone(virt_to_page(tsk->lowmem_stack));
+#else
- struct zone *zone = page_zone(virt_to_page(ti));
+ struct zone *zone = page_zone(virt_to_page(stack));
+#endif
mod_zone_page_state(zone, NR_KERNEL_STACK, account);
@@ -140327,9 +140587,9 @@ index d277e83..824b594 100644
{
- account_kernel_stack(tsk->stack, -1);
+ account_kernel_stack(tsk, tsk->stack, -1);
- arch_release_thread_info(tsk->stack);
-- free_thread_info(tsk->stack);
-+ gr_free_thread_info(tsk, tsk->stack);
+ arch_release_thread_stack(tsk->stack);
+- free_thread_stack(tsk->stack);
++ gr_free_thread_stack(tsk, tsk->stack);
rt_mutex_debug_task_free(tsk);
ftrace_graph_exit_task(tsk);
put_seccomp_filter(tsk);
@@ -140342,34 +140602,35 @@ index d277e83..824b594 100644
#endif
void __init fork_init(void)
-@@ -344,6 +391,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, int node)
{
struct task_struct *tsk;
- struct thread_info *ti;
+ unsigned long *stack;
+ void *lowmem_stack;
- int node = tsk_fork_get_node(orig);
int err;
-@@ -351,7 +399,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+ if (node == NUMA_NO_NODE)
+@@ -352,7 +400,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node)
if (!tsk)
return NULL;
-- ti = alloc_thread_info_node(tsk, node);
-+ ti = gr_alloc_thread_info_node(tsk, node, &lowmem_stack);
- if (!ti)
+- stack = alloc_thread_stack_node(tsk, node);
++ stack = gr_alloc_thread_stack_node(tsk, node, &lowmem_stack);
+ if (!stack)
goto free_tsk;
-@@ -360,6 +408,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
- goto free_ti;
+@@ -361,6 +409,10 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node)
+ goto free_stack;
- tsk->stack = ti;
+ tsk->stack = stack;
+#ifdef CONFIG_GRKERNSEC_KSTACKOVERFLOW
+ tsk->lowmem_stack = lowmem_stack;
+#endif
++
#ifdef CONFIG_SECCOMP
/*
* We must handle setting up seccomp filters once we're under
-@@ -376,7 +427,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -377,7 +429,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node)
set_task_stack_end_magic(tsk);
#ifdef CONFIG_CC_STACKPROTECTOR
@@ -140378,20 +140639,20 @@ index d277e83..824b594 100644
#endif
/*
-@@ -391,26 +442,92 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -392,26 +444,92 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node)
tsk->task_frag.page = NULL;
tsk->wake_q.next = NULL;
-- account_kernel_stack(ti, 1);
-+ account_kernel_stack(tsk, ti, 1);
+- account_kernel_stack(stack, 1);
++ account_kernel_stack(tsk, stack, 1);
kcov_task_init(tsk);
return tsk;
- free_ti:
-- free_thread_info(ti);
-+ gr_free_thread_info(tsk, ti);
+ free_stack:
+- free_thread_stack(stack);
++ gr_free_thread_stack(tsk, stack);
free_tsk:
free_task_struct(tsk);
return NULL;
@@ -140474,8 +140735,8 @@ index d277e83..824b594 100644
- unsigned long charge;
uprobe_start_dup_mmap();
- down_write(&oldmm->mmap_sem);
-@@ -441,52 +558,14 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+ if (down_write_killable(&oldmm->mmap_sem)) {
+@@ -445,52 +563,14 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
prev = NULL;
for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) {
@@ -140532,7 +140793,7 @@ index d277e83..824b594 100644
}
/*
-@@ -518,6 +597,38 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -522,6 +602,38 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
if (retval)
goto out;
}
@@ -140571,8 +140832,8 @@ index d277e83..824b594 100644
/* a new mm has just been created */
arch_dup_mmap(oldmm, mm);
retval = 0;
-@@ -527,14 +638,6 @@ out:
- up_write(&oldmm->mmap_sem);
+@@ -532,14 +644,6 @@ out:
+ fail_uprobe_end:
uprobe_end_dup_mmap();
return retval;
-fail_nomem_anon_vma_fork:
@@ -140586,7 +140847,7 @@ index d277e83..824b594 100644
}
static inline int mm_alloc_pgd(struct mm_struct *mm)
-@@ -809,8 +912,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
+@@ -836,8 +940,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
return ERR_PTR(err);
mm = get_task_mm(task);
@@ -140597,7 +140858,7 @@ index d277e83..824b594 100644
mmput(mm);
mm = ERR_PTR(-EACCES);
}
-@@ -1011,13 +1114,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
+@@ -1038,13 +1142,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
spin_unlock(&fs->lock);
return -EAGAIN;
}
@@ -140619,7 +140880,7 @@ index d277e83..824b594 100644
return 0;
}
-@@ -1250,7 +1360,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid)
+@@ -1277,7 +1388,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.
*/
@@ -140628,7 +140889,7 @@ index d277e83..824b594 100644
unsigned long stack_start,
unsigned long stack_size,
int __user *child_tidptr,
-@@ -1321,6 +1431,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1349,6 +1460,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
#endif
retval = -EAGAIN;
@@ -140638,7 +140899,7 @@ index d277e83..824b594 100644
if (atomic_read(&p->real_cred->user->processes) >=
task_rlimit(p, RLIMIT_NPROC)) {
if (p->real_cred->user != INIT_USER &&
-@@ -1579,6 +1692,16 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1607,6 +1721,16 @@ static struct task_struct *copy_process(unsigned long clone_flags,
goto bad_fork_cancel_cgroup;
}
@@ -140655,7 +140916,7 @@ index d277e83..824b594 100644
if (likely(p->pid)) {
ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
-@@ -1668,6 +1791,8 @@ bad_fork_cleanup_count:
+@@ -1698,6 +1822,8 @@ bad_fork_cleanup_count:
bad_fork_free:
free_task(p);
fork_out:
@@ -140664,15 +140925,15 @@ index d277e83..824b594 100644
return ERR_PTR(retval);
}
-@@ -1730,6 +1855,7 @@ long _do_fork(unsigned long clone_flags,
+@@ -1761,6 +1887,7 @@ long _do_fork(unsigned long clone_flags,
p = copy_process(clone_flags, stack_start, stack_size,
- child_tidptr, NULL, trace, tls);
+ child_tidptr, NULL, trace, tls, NUMA_NO_NODE);
+ add_latent_entropy();
/*
* Do this prior waking up the new thread - the thread pointer
* might get invalid after that point, if the thread exits quickly.
-@@ -1746,6 +1872,8 @@ long _do_fork(unsigned long clone_flags,
+@@ -1777,6 +1904,8 @@ long _do_fork(unsigned long clone_flags,
if (clone_flags & CLONE_PARENT_SETTID)
put_user(nr, parent_tidptr);
@@ -140681,7 +140942,7 @@ index d277e83..824b594 100644
if (clone_flags & CLONE_VFORK) {
p->vfork_done = &vfork;
init_completion(&vfork);
-@@ -1882,7 +2010,7 @@ void __init proc_caches_init(void)
+@@ -1913,7 +2042,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);
@@ -140690,7 +140951,7 @@ index d277e83..824b594 100644
mmap_init();
nsproxy_cache_init();
}
-@@ -1930,7 +2058,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp)
+@@ -1961,7 +2090,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 */
@@ -140699,7 +140960,7 @@ index d277e83..824b594 100644
return 0;
*new_fsp = copy_fs_struct(fs);
-@@ -2043,7 +2171,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
+@@ -2074,7 +2203,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
fs = current->fs;
spin_lock(&fs->lock);
current->fs = new_fs;
@@ -140709,7 +140970,7 @@ index d277e83..824b594 100644
new_fs = NULL;
else
new_fs = fs;
-@@ -2107,7 +2236,7 @@ int unshare_files(struct files_struct **displaced)
+@@ -2138,7 +2268,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)
{
@@ -140719,7 +140980,7 @@ index d277e83..824b594 100644
int threads = max_threads;
int min = MIN_THREADS;
diff --git a/kernel/futex.c b/kernel/futex.c
-index 6555d54..4c66189 100644
+index 33664f7..14f5cdc 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -202,7 +202,7 @@ struct futex_pi_state {
@@ -140752,15 +141013,6 @@ index 6555d54..4c66189 100644
/*
* The futex address must be "naturally" aligned.
*/
-@@ -734,7 +739,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr,
-
- static int get_futex_value_locked(u32 *dest, u32 __user *from)
- {
-- int ret;
-+ unsigned long ret;
-
- pagefault_disable();
- ret = __copy_from_user_inatomic(dest, from, sizeof(u32));
@@ -3249,6 +3254,7 @@ static void __init futex_detect_cmpxchg(void)
{
#ifndef CONFIG_HAVE_FUTEX_CMPXCHG
@@ -140795,7 +141047,7 @@ 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 cc1cc64..e7b7276 100644
+index ef0bc02..2c983f5 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -956,7 +956,7 @@ static int irq_thread(void *data)
@@ -141031,10 +141283,10 @@ index 3a47fa9..bcb17e3 100644
/*
diff --git a/kernel/kexec.c b/kernel/kexec.c
-index ee70aef..55095dd 100644
+index 4384672..505eb0f 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
-@@ -224,7 +224,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
+@@ -235,7 +235,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
compat_ulong_t, flags)
{
struct compat_kexec_segment in;
@@ -141045,7 +141297,7 @@ 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 1391d3e..8681634 100644
+index 56b3ed0..f4ef481 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -850,7 +850,7 @@ int kimage_load_segment(struct kimage *image,
@@ -141335,10 +141587,10 @@ index 152da4a..4ab2150 100644
.name = "notes",
.mode = S_IRUGO,
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index 78c1c0e..5c173df 100644
+index 81f1a71..af5e34d 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
-@@ -597,6 +597,10 @@ static int static_obj(void *obj)
+@@ -598,6 +598,10 @@ static int static_obj(void *obj)
end = (unsigned long) &_end,
addr = (unsigned long) obj;
@@ -141349,7 +141601,7 @@ index 78c1c0e..5c173df 100644
/*
* static variable?
*/
-@@ -727,6 +731,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
+@@ -728,6 +732,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");
@@ -141357,7 +141609,7 @@ index 78c1c0e..5c173df 100644
printk("the code is fine but needs lockdep annotation.\n");
printk("turning off the locking correctness validator.\n");
dump_stack();
-@@ -3225,7 +3230,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
+@@ -3226,7 +3231,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
if (!class)
return 0;
}
@@ -141415,87 +141667,8 @@ index a0f61ef..b6aef3c 100644
(void *)class->contending_point[i]);
seq_printf(m, "%40s %14lu %29s %pS\n",
name, stats->contending_point[i],
-diff --git a/kernel/locking/mutex-debug.c b/kernel/locking/mutex-debug.c
-index 3ef3736..9c951fa 100644
---- a/kernel/locking/mutex-debug.c
-+++ b/kernel/locking/mutex-debug.c
-@@ -49,21 +49,21 @@ void debug_mutex_free_waiter(struct mutex_waiter *waiter)
- }
-
- void debug_mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter,
-- struct thread_info *ti)
-+ struct task_struct *task)
- {
- SMP_DEBUG_LOCKS_WARN_ON(!spin_is_locked(&lock->wait_lock));
-
- /* Mark the current thread as blocked on the lock: */
-- ti->task->blocked_on = waiter;
-+ task->blocked_on = waiter;
- }
-
- void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
-- struct thread_info *ti)
-+ struct task_struct *task)
- {
- DEBUG_LOCKS_WARN_ON(list_empty(&waiter->list));
-- DEBUG_LOCKS_WARN_ON(waiter->task != ti->task);
-- DEBUG_LOCKS_WARN_ON(ti->task->blocked_on != waiter);
-- ti->task->blocked_on = NULL;
-+ DEBUG_LOCKS_WARN_ON(waiter->task != task);
-+ DEBUG_LOCKS_WARN_ON(task->blocked_on != waiter);
-+ task->blocked_on = NULL;
-
- list_del_init(&waiter->list);
- waiter->task = NULL;
-diff --git a/kernel/locking/mutex-debug.h b/kernel/locking/mutex-debug.h
-index 0799fd3..d06ae3b 100644
---- a/kernel/locking/mutex-debug.h
-+++ b/kernel/locking/mutex-debug.h
-@@ -20,9 +20,9 @@ extern void debug_mutex_wake_waiter(struct mutex *lock,
- extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);
- extern void debug_mutex_add_waiter(struct mutex *lock,
- struct mutex_waiter *waiter,
-- struct thread_info *ti);
-+ struct task_struct *task);
- extern void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
-- struct thread_info *ti);
-+ struct task_struct *task);
- extern void debug_mutex_unlock(struct mutex *lock);
- 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 79d2d76..a70b90d 100644
---- a/kernel/locking/mutex.c
-+++ b/kernel/locking/mutex.c
-@@ -537,7 +537,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
- goto skip_wait;
-
- debug_mutex_lock_common(lock, &waiter);
-- debug_mutex_add_waiter(lock, &waiter, task_thread_info(task));
-+ debug_mutex_add_waiter(lock, &waiter, task);
-
- /* add waiting tasks to the end of the waitqueue (FIFO): */
- list_add_tail(&waiter.list, &lock->wait_list);
-@@ -584,7 +584,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
- }
- __set_task_state(task, TASK_RUNNING);
-
-- mutex_remove_waiter(lock, &waiter, current_thread_info());
-+ mutex_remove_waiter(lock, &waiter, task);
- /* set it to 0 if there are no waiters left: */
- if (likely(list_empty(&lock->wait_list)))
- atomic_set(&lock->count, 0);
-@@ -605,7 +605,7 @@ skip_wait:
- return 0;
-
- err:
-- mutex_remove_waiter(lock, &waiter, task_thread_info(task));
-+ mutex_remove_waiter(lock, &waiter, task);
- spin_unlock_mutex(&lock->wait_lock, flags);
- debug_mutex_free_waiter(&waiter);
- mutex_release(&lock->dep_map, 1, ip);
diff --git a/kernel/module.c b/kernel/module.c
-index 041200c..9a19b8c 100644
+index 5f71aa6..cae0865 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -60,6 +60,7 @@
@@ -141834,7 +142007,7 @@ index 041200c..9a19b8c 100644
static void module_enable_nx(const struct module *mod) { }
static void module_disable_nx(const struct module *mod) { }
#endif
-@@ -2025,16 +2093,19 @@ static void free_module(struct module *mod)
+@@ -2105,16 +2173,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);
@@ -141857,7 +142030,7 @@ index 041200c..9a19b8c 100644
#ifdef CONFIG_MPU
update_protections(current->mm);
-@@ -2103,9 +2174,31 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
+@@ -2183,9 +2254,31 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
int ret = 0;
const struct kernel_symbol *ksym;
@@ -141889,7 +142062,7 @@ index 041200c..9a19b8c 100644
switch (sym[i].st_shndx) {
case SHN_COMMON:
/* Ignore common symbols */
-@@ -2130,7 +2223,9 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
+@@ -2214,7 +2307,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)) {
@@ -141899,7 +142072,7 @@ index 041200c..9a19b8c 100644
break;
}
-@@ -2149,11 +2244,20 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
+@@ -2233,11 +2328,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;
@@ -141920,7 +142093,7 @@ index 041200c..9a19b8c 100644
return ret;
}
-@@ -2237,22 +2341,12 @@ static void layout_sections(struct module *mod, struct load_info *info)
+@@ -2325,22 +2429,12 @@ static void layout_sections(struct module *mod, struct load_info *info)
|| s->sh_entsize != ~0UL
|| strstarts(sname, ".init"))
continue;
@@ -141947,7 +142120,7 @@ index 041200c..9a19b8c 100644
}
pr_debug("Init section allocation order:\n");
-@@ -2266,23 +2360,13 @@ static void layout_sections(struct module *mod, struct load_info *info)
+@@ -2354,23 +2448,13 @@ static void layout_sections(struct module *mod, struct load_info *info)
|| s->sh_entsize != ~0UL
|| !strstarts(sname, ".init"))
continue;
@@ -141976,7 +142149,7 @@ index 041200c..9a19b8c 100644
}
}
-@@ -2460,7 +2544,7 @@ static void layout_symtab(struct module *mod, struct load_info *info)
+@@ -2548,7 +2632,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;
@@ -141985,7 +142158,7 @@ index 041200c..9a19b8c 100644
info->index.sym) | INIT_OFFSET_MASK;
pr_debug("\t%s\n", info->secstrings + symsect->sh_name);
-@@ -2478,23 +2562,23 @@ static void layout_symtab(struct module *mod, struct load_info *info)
+@@ -2566,23 +2650,23 @@ static void layout_symtab(struct module *mod, struct load_info *info)
}
/* Append room for core symbols at end of core part. */
@@ -142018,7 +142191,7 @@ index 041200c..9a19b8c 100644
}
/*
-@@ -2511,7 +2595,9 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
+@@ -2599,7 +2683,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. */
@@ -142029,7 +142202,7 @@ index 041200c..9a19b8c 100644
mod->kallsyms->symtab = (void *)symsec->sh_addr;
mod->kallsyms->num_symtab = symsec->sh_size / sizeof(Elf_Sym);
-@@ -2524,8 +2610,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
+@@ -2612,8 +2698,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. */
@@ -142039,8 +142212,8 @@ index 041200c..9a19b8c 100644
+ mod->core_kallsyms.strtab = s = mod->core_layout.base_rx + info->stroffs;
src = mod->kallsyms->symtab;
for (ndst = i = 0; i < mod->kallsyms->num_symtab; i++) {
- if (i == 0 ||
-@@ -2538,6 +2624,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
+ if (i == 0 || is_livepatch_module(mod) ||
+@@ -2626,6 +2712,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
}
}
mod->core_kallsyms.num_symtab = ndst;
@@ -142049,7 +142222,7 @@ index 041200c..9a19b8c 100644
}
#else
static inline void layout_symtab(struct module *mod, struct load_info *info)
-@@ -2780,7 +2868,15 @@ static struct module *setup_load_info(struct load_info *info, int flags)
+@@ -2888,7 +2976,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) {
@@ -142065,7 +142238,7 @@ index 041200c..9a19b8c 100644
return ERR_PTR(-ENOEXEC);
}
-@@ -2796,8 +2892,16 @@ static struct module *setup_load_info(struct load_info *info, int flags)
+@@ -2904,8 +3000,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");
@@ -142082,8 +142255,8 @@ index 041200c..9a19b8c 100644
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
modmagic = NULL;
-@@ -2822,7 +2926,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
- }
+@@ -2934,7 +3038,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
+ return err;
/* Set up license info based on the info section */
- set_license(mod, get_modinfo(info, "license"));
@@ -142091,7 +142264,7 @@ index 041200c..9a19b8c 100644
return 0;
}
-@@ -2919,7 +3023,7 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -3031,7 +3135,7 @@ static int move_module(struct module *mod, struct load_info *info)
void *ptr;
/* Do the allocs. */
@@ -142100,7 +142273,7 @@ index 041200c..9a19b8c 100644
/*
* The pointer to this block is stored in the module structure
* which is inside the block. Just mark it as not being a
-@@ -2929,11 +3033,11 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -3041,11 +3145,11 @@ static int move_module(struct module *mod, struct load_info *info)
if (!ptr)
return -ENOMEM;
@@ -142116,7 +142289,7 @@ index 041200c..9a19b8c 100644
/*
* The pointer to this block is stored in the module structure
* which is inside the block. This block doesn't need to be
-@@ -2942,13 +3046,45 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -3054,13 +3158,45 @@ static int move_module(struct module *mod, struct load_info *info)
*/
kmemleak_ignore(ptr);
if (!ptr) {
@@ -142166,7 +142339,7 @@ index 041200c..9a19b8c 100644
/* Transfer each section which specifies SHF_ALLOC */
pr_debug("final section addresses:\n");
-@@ -2959,16 +3095,45 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -3071,16 +3207,45 @@ static int move_module(struct module *mod, struct load_info *info)
if (!(shdr->sh_flags & SHF_ALLOC))
continue;
@@ -142219,7 +142392,7 @@ index 041200c..9a19b8c 100644
pr_debug("\t0x%lx %s\n",
(long)shdr->sh_addr, info->secstrings + shdr->sh_name);
}
-@@ -3025,12 +3190,12 @@ static void flush_module_icache(const struct module *mod)
+@@ -3137,12 +3302,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.
*/
@@ -142238,7 +142411,7 @@ index 041200c..9a19b8c 100644
set_fs(old_fs);
}
-@@ -3088,8 +3253,10 @@ static void module_deallocate(struct module *mod, struct load_info *info)
+@@ -3200,8 +3365,10 @@ static void module_deallocate(struct module *mod, struct load_info *info)
{
percpu_modfree(mod);
module_arch_freeing_init(mod);
@@ -142251,7 +142424,7 @@ index 041200c..9a19b8c 100644
}
int __weak module_finalize(const Elf_Ehdr *hdr,
-@@ -3102,7 +3269,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr,
+@@ -3214,7 +3381,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. */
@@ -142261,7 +142434,7 @@ index 041200c..9a19b8c 100644
/* Copy relocated percpu area over. */
percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr,
-@@ -3150,13 +3319,15 @@ static void do_mod_ctors(struct module *mod)
+@@ -3262,13 +3431,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;
@@ -142279,7 +142452,7 @@ index 041200c..9a19b8c 100644
kfree(m);
}
-@@ -3176,7 +3347,8 @@ static noinline int do_init_module(struct module *mod)
+@@ -3288,7 +3459,8 @@ static noinline int do_init_module(struct module *mod)
ret = -ENOMEM;
goto fail;
}
@@ -142289,7 +142462,7 @@ index 041200c..9a19b8c 100644
/*
* We want to find out whether @mod uses async during init. Clear
-@@ -3235,10 +3407,10 @@ static noinline int do_init_module(struct module *mod)
+@@ -3347,10 +3519,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);
@@ -142304,7 +142477,7 @@ index 041200c..9a19b8c 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
-@@ -3438,9 +3610,38 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3550,9 +3722,38 @@ static int load_module(struct load_info *info, const char __user *uargs,
if (err)
goto free_unload;
@@ -142343,7 +142516,7 @@ index 041200c..9a19b8c 100644
/* Fix up syms, so that st_value is a pointer to location. */
err = simplify_symbols(mod, info);
if (err < 0)
-@@ -3456,13 +3657,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3568,13 +3769,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
flush_module_icache(mod);
@@ -142357,7 +142530,7 @@ index 041200c..9a19b8c 100644
dynamic_debug_setup(info->debug, info->num_debug);
/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
-@@ -3520,11 +3714,10 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3639,11 +3833,10 @@ static int load_module(struct load_info *info, const char __user *uargs,
ddebug_cleanup:
dynamic_debug_remove(info->debug);
synchronize_sched();
@@ -142370,7 +142543,7 @@ index 041200c..9a19b8c 100644
free_unload:
module_unload_free(mod);
unlink_mod:
-@@ -3544,7 +3737,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3663,7 +3856,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() */
@@ -142380,7 +142553,7 @@ index 041200c..9a19b8c 100644
module_deallocate(mod, info);
free_copy:
-@@ -3632,10 +3826,16 @@ static const char *get_ksymbol(struct module *mod,
+@@ -3751,10 +3945,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 */
@@ -142400,7 +142573,7 @@ index 041200c..9a19b8c 100644
/* Scan for closest preceding symbol, and next symbol. (ELF
starts real symbols at 1). */
-@@ -3888,7 +4088,7 @@ static int m_show(struct seq_file *m, void *p)
+@@ -4007,7 +4207,7 @@ static int m_show(struct seq_file *m, void *p)
return 0;
seq_printf(m, "%s %u",
@@ -142409,7 +142582,7 @@ index 041200c..9a19b8c 100644
print_unload_info(m, mod);
/* Informative for users. */
-@@ -3897,7 +4097,7 @@ static int m_show(struct seq_file *m, void *p)
+@@ -4016,7 +4216,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. */
@@ -142418,7 +142591,7 @@ index 041200c..9a19b8c 100644
/* Taints info */
if (mod->taints)
-@@ -3933,7 +4133,17 @@ static const struct file_operations proc_modules_operations = {
+@@ -4052,7 +4252,17 @@ static const struct file_operations proc_modules_operations = {
static int __init proc_modules_init(void)
{
@@ -142436,7 +142609,7 @@ index 041200c..9a19b8c 100644
return 0;
}
module_init(proc_modules_init);
-@@ -3994,7 +4204,8 @@ struct module *__module_address(unsigned long addr)
+@@ -4113,7 +4323,8 @@ struct module *__module_address(unsigned long addr)
{
struct module *mod;
@@ -142446,7 +142619,7 @@ index 041200c..9a19b8c 100644
return NULL;
module_assert_mutex_or_preempt();
-@@ -4037,11 +4248,21 @@ bool is_module_text_address(unsigned long addr)
+@@ -4156,11 +4367,21 @@ bool is_module_text_address(unsigned long addr)
*/
struct module *__module_text_address(unsigned long addr)
{
@@ -142528,7 +142701,7 @@ index fd2c9ac..6263e05 100644
return -ENOENT;
}
diff --git a/kernel/padata.c b/kernel/padata.c
-index b38bea9..91acfbe 100644
+index 9932788..7052e20 100644
--- a/kernel/padata.c
+++ b/kernel/padata.c
@@ -54,7 +54,7 @@ static int padata_cpu_hash(struct parallel_data *pd)
@@ -142550,7 +142723,7 @@ index b38bea9..91acfbe 100644
atomic_set(&pd->refcnt, 0);
pd->pinst = pinst;
diff --git a/kernel/panic.c b/kernel/panic.c
-index 535c965..6d159a4 100644
+index 8aa7449..9818394 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -56,7 +56,7 @@ EXPORT_SYMBOL(panic_blink);
@@ -142562,7 +142735,7 @@ index 535c965..6d159a4 100644
{
while (1)
cpu_relax();
-@@ -483,11 +483,11 @@ void __warn(const char *file, int line, void *caller, unsigned taint,
+@@ -487,11 +487,11 @@ void __warn(const char *file, int line, void *caller, unsigned taint,
pr_warn("------------[ cut here ]------------\n");
if (file)
@@ -142576,7 +142749,7 @@ index 535c965..6d159a4 100644
raw_smp_processor_id(), current->pid, caller);
if (args)
-@@ -518,7 +518,7 @@ void __warn(const char *file, int line, void *caller, unsigned taint,
+@@ -522,7 +522,7 @@ void __warn(const char *file, int line, void *caller, unsigned taint,
}
#ifdef WANT_WARN_ON_SLOWPATH
@@ -142585,7 +142758,7 @@ index 535c965..6d159a4 100644
{
struct warn_args args;
-@@ -530,7 +530,7 @@ void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)
+@@ -534,7 +534,7 @@ void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)
}
EXPORT_SYMBOL(warn_slowpath_fmt);
@@ -142594,7 +142767,7 @@ index 535c965..6d159a4 100644
unsigned taint, const char *fmt, ...)
{
struct warn_args args;
-@@ -542,7 +542,7 @@ void warn_slowpath_fmt_taint(const char *file, int line,
+@@ -546,7 +546,7 @@ void warn_slowpath_fmt_taint(const char *file, int line,
}
EXPORT_SYMBOL(warn_slowpath_fmt_taint);
@@ -142603,7 +142776,7 @@ index 535c965..6d159a4 100644
{
__warn(file, line, __builtin_return_address(0), TAINT_WARN, NULL, NULL);
}
-@@ -557,7 +557,8 @@ EXPORT_SYMBOL(warn_slowpath_null);
+@@ -561,7 +561,8 @@ EXPORT_SYMBOL(warn_slowpath_null);
*/
__visible void __stack_chk_fail(void)
{
@@ -142614,7 +142787,7 @@ index 535c965..6d159a4 100644
}
EXPORT_SYMBOL(__stack_chk_fail);
diff --git a/kernel/pid.c b/kernel/pid.c
-index 4d73a83..9df1950 100644
+index f66162f..e950a59 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -33,6 +33,7 @@
@@ -142715,7 +142888,7 @@ index 68d3ebc..82bb833 100644
select LZO_COMPRESS
select LZO_DECOMPRESS
diff --git a/kernel/power/process.c b/kernel/power/process.c
-index df058be..42000ad 100644
+index 0c2ee97..63229a6 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -34,6 +34,7 @@ static int try_to_freeze_tasks(bool user_only)
@@ -142758,10 +142931,10 @@ index df058be..42000ad 100644
if (pm_wakeup_pending()) {
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
-index bfbf284..d3f02ee 100644
+index 60cdf63..eab5721 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -483,7 +483,7 @@ static int log_store(int facility, int level,
+@@ -484,7 +484,7 @@ static int log_store(int facility, int level,
return msg->text_len;
}
@@ -142770,7 +142943,7 @@ index bfbf284..d3f02ee 100644
static int syslog_action_restricted(int type)
{
-@@ -506,6 +506,11 @@ int check_syslog_permissions(int type, int source)
+@@ -507,6 +507,11 @@ int check_syslog_permissions(int type, int source)
if (source == SYSLOG_FROM_PROC && type != SYSLOG_ACTION_OPEN)
goto ok;
@@ -142993,13 +143166,13 @@ index d49bfa1..5eb9a32 100644
}
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
-index 250ea67..0ad5f45 100644
+index 084a28a..667eda7 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -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 DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_count);
+ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_batch);
-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;
@@ -143074,7 +143247,7 @@ index 250ea67..0ad5f45 100644
old_rp->rtort_pipe_count++;
switch (synctype[torture_random(&rand) % nsynctypes]) {
case RTWS_DEF_FREE:
-@@ -1127,7 +1127,7 @@ static void rcu_torture_timer(unsigned long unused)
+@@ -1116,7 +1116,7 @@ static void rcu_torture_timer(unsigned long unused)
return;
}
if (p->rtort_mbtest == 0)
@@ -143083,7 +143256,7 @@ index 250ea67..0ad5f45 100644
spin_lock(&rand_lock);
cur_ops->read_delay(&rand);
n_rcu_torture_timers++;
-@@ -1203,7 +1203,7 @@ rcu_torture_reader(void *arg)
+@@ -1192,7 +1192,7 @@ rcu_torture_reader(void *arg)
continue;
}
if (p->rtort_mbtest == 0)
@@ -143092,7 +143265,7 @@ index 250ea67..0ad5f45 100644
cur_ops->read_delay(&rand);
preempt_disable();
pipe_count = p->rtort_pipe_count;
-@@ -1271,11 +1271,11 @@ rcu_torture_stats_print(void)
+@@ -1260,11 +1260,11 @@ rcu_torture_stats_print(void)
rcu_torture_current,
rcu_torture_current_version,
list_empty(&rcu_torture_freelist),
@@ -143108,7 +143281,7 @@ index 250ea67..0ad5f45 100644
n_rcu_torture_boost_ktrerror,
n_rcu_torture_boost_rterror);
pr_cont("rtbf: %ld rtb: %ld nt: %ld ",
-@@ -1287,17 +1287,17 @@ rcu_torture_stats_print(void)
+@@ -1276,17 +1276,17 @@ rcu_torture_stats_print(void)
n_barrier_successes,
n_barrier_attempts,
n_rcu_torture_barrier_error);
@@ -143129,7 +143302,7 @@ index 250ea67..0ad5f45 100644
WARN_ON_ONCE(1);
}
pr_cont("Reader Pipe: ");
-@@ -1314,7 +1314,7 @@ rcu_torture_stats_print(void)
+@@ -1303,7 +1303,7 @@ rcu_torture_stats_print(void)
pr_alert("%s%s ", torture_type, TORTURE_FLAG);
pr_cont("Free-Block Circulation: ");
for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
@@ -143138,7 +143311,7 @@ index 250ea67..0ad5f45 100644
}
pr_cont("\n");
-@@ -1669,7 +1669,7 @@ rcu_torture_cleanup(void)
+@@ -1660,7 +1660,7 @@ rcu_torture_cleanup(void)
rcu_torture_stats_print(); /* -After- the stats thread is stopped! */
@@ -143147,7 +143320,7 @@ index 250ea67..0ad5f45 100644
rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE");
else if (torture_onoff_failures())
rcu_torture_print_module_parms(cur_ops,
-@@ -1794,18 +1794,18 @@ rcu_torture_init(void)
+@@ -1785,18 +1785,18 @@ rcu_torture_init(void)
rcu_torture_current = NULL;
rcu_torture_current_version = 0;
@@ -143195,10 +143368,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 9a535a8..7784424 100644
+index c7f1bc4..51dfeb4 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
-@@ -323,7 +323,7 @@ static void rcu_momentary_dyntick_idle(void)
+@@ -325,7 +325,7 @@ static void rcu_momentary_dyntick_idle(void)
*/
rdtp = this_cpu_ptr(&rcu_dynticks);
smp_mb__before_atomic(); /* Earlier stuff before QS. */
@@ -143207,7 +143380,7 @@ index 9a535a8..7784424 100644
smp_mb__after_atomic(); /* Later stuff after QS. */
break;
}
-@@ -649,10 +649,10 @@ static void rcu_eqs_enter_common(long long oldval, bool user)
+@@ -690,10 +690,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. */
@@ -143220,7 +143393,7 @@ index 9a535a8..7784424 100644
rcu_dynticks_task_enter();
/*
-@@ -785,11 +785,11 @@ static void rcu_eqs_exit_common(long long oldval, int user)
+@@ -826,11 +826,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. */
@@ -143234,7 +143407,7 @@ index 9a535a8..7784424 100644
rcu_cleanup_after_idle();
trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting);
if (IS_ENABLED(CONFIG_RCU_EQS_DEBUG) &&
-@@ -935,12 +935,12 @@ void rcu_nmi_enter(void)
+@@ -976,12 +976,12 @@ void rcu_nmi_enter(void)
* to be in the outermost NMI handler that interrupted an RCU-idle
* period (observation due to Andy Lutomirski).
*/
@@ -143250,7 +143423,7 @@ index 9a535a8..7784424 100644
incby = 1;
}
rdtp->dynticks_nmi_nesting += incby;
-@@ -965,7 +965,7 @@ void rcu_nmi_exit(void)
+@@ -1006,7 +1006,7 @@ void rcu_nmi_exit(void)
* to us!)
*/
WARN_ON_ONCE(rdtp->dynticks_nmi_nesting <= 0);
@@ -143259,7 +143432,7 @@ index 9a535a8..7784424 100644
/*
* If the nesting level is not 1, the CPU wasn't RCU-idle, so
-@@ -980,9 +980,9 @@ void rcu_nmi_exit(void)
+@@ -1021,9 +1021,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. */
@@ -143271,7 +143444,7 @@ index 9a535a8..7784424 100644
}
/**
-@@ -995,7 +995,7 @@ void rcu_nmi_exit(void)
+@@ -1036,7 +1036,7 @@ void rcu_nmi_exit(void)
*/
bool notrace __rcu_is_watching(void)
{
@@ -143280,7 +143453,7 @@ index 9a535a8..7784424 100644
}
/**
-@@ -1078,7 +1078,7 @@ static int rcu_is_cpu_rrupt_from_idle(void)
+@@ -1119,7 +1119,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)
{
@@ -143289,7 +143462,7 @@ index 9a535a8..7784424 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"));
-@@ -1103,7 +1103,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
+@@ -1144,7 +1144,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
int *rcrmp;
unsigned int snap;
@@ -143298,7 +143471,7 @@ index 9a535a8..7784424 100644
snap = (unsigned int)rdp->dynticks_snap;
/*
-@@ -2920,7 +2920,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
+@@ -3004,7 +3004,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
/*
* Do RCU core processing for the current CPU.
*/
@@ -143307,17 +143480,16 @@ index 9a535a8..7784424 100644
{
struct rcu_state *rsp;
-@@ -3566,7 +3566,7 @@ static void rcu_report_exp_rdp(struct rcu_state *rsp, struct rcu_data *rdp,
+@@ -3651,14 +3651,14 @@ 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,
-- atomic_long_t *stat, unsigned long s)
-+ atomic_long_unchecked_t *stat, unsigned long s)
+-static bool sync_exp_work_done(struct rcu_state *rsp, atomic_long_t *stat,
++static bool sync_exp_work_done(struct rcu_state *rsp, atomic_long_unchecked_t *stat,
+ unsigned long s)
{
if (rcu_exp_gp_seq_done(rsp, s)) {
- if (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);
+ trace_rcu_exp_grace_period(rsp->name, s, TPS("done"));
/* Ensure test happens before caller kfree(). */
smp_mb__before_atomic(); /* ^^^ */
- atomic_long_inc(stat);
@@ -143325,7 +143497,7 @@ index 9a535a8..7784424 100644
return true;
}
return false;
-@@ -3695,7 +3695,7 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
+@@ -3789,7 +3789,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 ||
@@ -143334,7 +143506,7 @@ index 9a535a8..7784424 100644
mask_ofl_test |= rdp->grpmask;
}
mask_ofl_ipi = rnp->expmask & ~mask_ofl_test;
-@@ -4159,7 +4159,7 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
+@@ -4284,7 +4284,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);
@@ -143342,8 +143514,8 @@ index 9a535a8..7784424 100644
+ WARN_ON_ONCE(atomic_read_unchecked(&rdp->dynticks->dynticks) != 1);
rdp->cpu = cpu;
rdp->rsp = rsp;
- mutex_init(&rdp->exp_funnel_mutex);
-@@ -4190,8 +4190,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp)
+ rcu_boot_init_nocb_percpu_data(rdp);
+@@ -4314,8 +4314,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);
@@ -143355,10 +143527,10 @@ index 9a535a8..7784424 100644
/*
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
-index df668c0..8e90779 100644
+index e3959f5..1966837 100644
--- a/kernel/rcu/tree.h
+++ b/kernel/rcu/tree.h
-@@ -115,11 +115,11 @@ struct rcu_dynticks {
+@@ -111,11 +111,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. */
@@ -143372,24 +143544,22 @@ index df668c0..8e90779 100644
/* "Idle" excludes userspace execution. */
unsigned long dynticks_idle_jiffies;
/* End of last non-NMI non-idle period. */
-@@ -388,10 +388,10 @@ struct rcu_data {
+@@ -385,9 +385,9 @@ struct rcu_data {
+ #ifdef CONFIG_RCU_FAST_NO_HZ
struct rcu_head oom_head;
#endif /* #ifdef CONFIG_RCU_FAST_NO_HZ */
- struct mutex exp_funnel_mutex;
-- atomic_long_t expedited_workdone0; /* # done by others #0. */
-- atomic_long_t expedited_workdone1; /* # done by others #1. */
-- atomic_long_t expedited_workdone2; /* # done by others #2. */
-- atomic_long_t expedited_workdone3; /* # done by others #3. */
-+ atomic_long_unchecked_t expedited_workdone0; /* # done by others #0. */
-+ atomic_long_unchecked_t expedited_workdone1; /* # done by others #1. */
-+ atomic_long_unchecked_t expedited_workdone2; /* # done by others #2. */
-+ atomic_long_unchecked_t expedited_workdone3; /* # done by others #3. */
+- atomic_long_t exp_workdone1; /* # done by others #1. */
+- atomic_long_t exp_workdone2; /* # done by others #2. */
+- atomic_long_t exp_workdone3; /* # done by others #3. */
++ atomic_long_unchecked_t exp_workdone1; /* # done by others #1. */
++ atomic_long_unchecked_t exp_workdone2; /* # done by others #2. */
++ atomic_long_unchecked_t exp_workdone3; /* # done by others #3. */
/* 7) Callback offloading. */
#ifdef CONFIG_RCU_NOCB_CPU
-@@ -506,8 +506,8 @@ struct rcu_state {
- /* End of fields guarded by barrier_mutex. */
-
+@@ -504,8 +504,8 @@ struct rcu_state {
+ struct mutex exp_mutex; /* Serialize expedited GP. */
+ struct mutex exp_wake_mutex; /* Serialize wakeup. */
unsigned long expedited_sequence; /* Take a ticket. */
- atomic_long_t expedited_normal; /* # fallbacks to normal. */
- atomic_t expedited_need_qs; /* # CPUs left to check in. */
@@ -143399,10 +143569,10 @@ index df668c0..8e90779 100644
int ncpus_snap; /* # CPUs seen last time. */
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
-index efdf7b6..bec5637 100644
+index ff1cd4e..7b55890 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
-@@ -1268,7 +1268,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
+@@ -1263,7 +1263,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
free_cpumask_var(cm);
}
@@ -143411,7 +143581,7 @@ index efdf7b6..bec5637 100644
.store = &rcu_cpu_kthread_task,
.thread_should_run = rcu_cpu_kthread_should_run,
.thread_fn = rcu_cpu_kthread,
-@@ -1737,7 +1737,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
+@@ -1732,7 +1732,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,
@@ -143420,7 +143590,7 @@ index efdf7b6..bec5637 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,
-@@ -2271,8 +2271,8 @@ static int rcu_nocb_kthread(void *arg)
+@@ -2266,8 +2266,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. */
@@ -143431,7 +143601,7 @@ index efdf7b6..bec5637 100644
rdp->n_nocbs_invoked += c;
}
return 0;
-@@ -2627,9 +2627,9 @@ static void rcu_sysidle_enter(int irq)
+@@ -2622,9 +2622,9 @@ static void rcu_sysidle_enter(int irq)
j = jiffies;
WRITE_ONCE(rdtp->dynticks_idle_jiffies, j);
smp_mb__before_atomic();
@@ -143443,7 +143613,7 @@ index efdf7b6..bec5637 100644
}
/*
-@@ -2700,9 +2700,9 @@ static void rcu_sysidle_exit(int irq)
+@@ -2695,9 +2695,9 @@ static void rcu_sysidle_exit(int irq)
/* Record end of idle period. */
smp_mb__before_atomic();
@@ -143455,7 +143625,7 @@ index efdf7b6..bec5637 100644
/*
* If we are the timekeeping CPU, we are permitted to be non-idle
-@@ -2748,7 +2748,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
+@@ -2743,7 +2743,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. */
@@ -143465,7 +143635,7 @@ index efdf7b6..bec5637 100644
*isidle = false; /* We are not idle! */
return;
diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c
-index 1088e64..d3b77f7 100644
+index 86782f9a..2e8c0a3 100644
--- a/kernel/rcu/tree_trace.c
+++ b/kernel/rcu/tree_trace.c
@@ -124,7 +124,7 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
@@ -143477,21 +143647,19 @@ index 1088e64..d3b77f7 100644
rdp->dynticks->dynticks_nesting,
rdp->dynticks->dynticks_nmi_nesting,
rdp->dynticks_fqs);
-@@ -189,15 +189,15 @@ static int show_rcuexp(struct seq_file *m, void *v)
+@@ -189,14 +189,14 @@ static int show_rcuexp(struct seq_file *m, void *v)
for_each_possible_cpu(cpu) {
rdp = per_cpu_ptr(rsp->rda, cpu);
-- s0 += atomic_long_read(&rdp->expedited_workdone0);
-- s1 += atomic_long_read(&rdp->expedited_workdone1);
-- s2 += atomic_long_read(&rdp->expedited_workdone2);
-- s3 += atomic_long_read(&rdp->expedited_workdone3);
-+ s0 += atomic_long_read_unchecked(&rdp->expedited_workdone0);
-+ s1 += atomic_long_read_unchecked(&rdp->expedited_workdone1);
-+ s2 += atomic_long_read_unchecked(&rdp->expedited_workdone2);
-+ s3 += atomic_long_read_unchecked(&rdp->expedited_workdone3);
- }
- seq_printf(m, "s=%lu wd0=%lu wd1=%lu wd2=%lu wd3=%lu n=%lu enq=%d sc=%lu\n",
- rsp->expedited_sequence, s0, s1, s2, s3,
+- s1 += atomic_long_read(&rdp->exp_workdone1);
+- s2 += atomic_long_read(&rdp->exp_workdone2);
+- s3 += atomic_long_read(&rdp->exp_workdone3);
++ s1 += atomic_long_read_unchecked(&rdp->exp_workdone1);
++ s2 += atomic_long_read_unchecked(&rdp->exp_workdone2);
++ s3 += atomic_long_read_unchecked(&rdp->exp_workdone3);
+ }
+ seq_printf(m, "s=%lu wd1=%lu wd2=%lu wd3=%lu n=%lu enq=%d sc=%lu\n",
+ rsp->expedited_sequence, s1, s2, s3,
- atomic_long_read(&rsp->expedited_normal),
- atomic_read(&rsp->expedited_need_qs),
+ atomic_long_read_unchecked(&rsp->expedited_normal),
@@ -143565,10 +143733,10 @@ index a5d966c..9c2d28b 100644
#ifdef CONFIG_RT_GROUP_SCHED
/*
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 11546a6..ba4d0d1 100644
+index 97ee9ac..f8349adf 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -2148,7 +2148,7 @@ void set_numabalancing_state(bool enabled)
+@@ -2236,7 +2236,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)
{
@@ -143577,7 +143745,7 @@ index 11546a6..ba4d0d1 100644
int err;
int state = static_branch_likely(&sched_numa_balancing);
-@@ -2211,7 +2211,7 @@ __setup("schedstats=", setup_schedstats);
+@@ -2311,7 +2311,7 @@ static void __init init_schedstats(void)
int sysctl_schedstats(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -143586,7 +143754,7 @@ index 11546a6..ba4d0d1 100644
int err;
int state = static_branch_likely(&sched_schedstats);
-@@ -2650,7 +2650,7 @@ static struct rq *finish_task_switch(struct task_struct *prev)
+@@ -2754,7 +2754,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)
{
@@ -143595,7 +143763,7 @@ index 11546a6..ba4d0d1 100644
void (*func)(struct rq *rq);
unsigned long flags;
-@@ -2658,7 +2658,7 @@ static void __balance_callback(struct rq *rq)
+@@ -2762,7 +2762,7 @@ static void __balance_callback(struct rq *rq)
head = rq->balance_callback;
rq->balance_callback = NULL;
while (head) {
@@ -143604,18 +143772,7 @@ index 11546a6..ba4d0d1 100644
next = head->next;
head->next = NULL;
head = next;
-@@ -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);
-- } else
-+ } else {
- switch_mm(oldmm, mm, next);
-+ }
-
- if (!prev->mm) {
- prev->active_mm = NULL;
-@@ -3552,6 +3553,8 @@ int can_nice(const struct task_struct *p, const int nice)
+@@ -3708,6 +3708,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);
@@ -143624,7 +143781,7 @@ index 11546a6..ba4d0d1 100644
return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) ||
capable(CAP_SYS_NICE));
}
-@@ -3578,7 +3581,8 @@ SYSCALL_DEFINE1(nice, int, increment)
+@@ -3734,7 +3736,8 @@ SYSCALL_DEFINE1(nice, int, increment)
nice = task_nice(current) + increment;
nice = clamp_val(nice, MIN_NICE, MAX_NICE);
@@ -143634,7 +143791,7 @@ index 11546a6..ba4d0d1 100644
return -EPERM;
retval = security_task_setnice(current, nice);
-@@ -3888,6 +3892,7 @@ recheck:
+@@ -4044,6 +4047,7 @@ recheck:
if (policy != p->policy && !rlim_rtprio)
return -EPERM;
@@ -143642,7 +143799,7 @@ index 11546a6..ba4d0d1 100644
/* can't increase priority */
if (attr->sched_priority > p->rt_priority &&
attr->sched_priority > rlim_rtprio)
-@@ -7419,7 +7424,7 @@ void __might_sleep(const char *file, int line, int preempt_offset)
+@@ -7529,7 +7533,7 @@ void __might_sleep(const char *file, int line, int preempt_offset)
*/
WARN_ONCE(current->state != TASK_RUNNING && current->task_state_change,
"do not call blocking ops when !TASK_RUNNING; "
@@ -143652,7 +143809,7 @@ index 11546a6..ba4d0d1 100644
(void *)current->task_state_change,
(void *)current->task_state_change);
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
-index 686ec8a..8fc3873 100644
+index fcb7f02..fac974c 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)
@@ -143667,7 +143824,7 @@ index 686ec8a..8fc3873 100644
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..6d8ac0d 100644
+index 0368c39..e4d8777 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -193,7 +193,7 @@ late_initcall(sched_init_debug);
@@ -143788,7 +143945,7 @@ index 4fbc3bd..6d8ac0d 100644
}
#endif /* CONFIG_SYSCTL */
#endif /* CONFIG_SMP */
-@@ -808,7 +817,11 @@ static int __init init_sched_debug_procfs(void)
+@@ -801,7 +810,11 @@ static int __init init_sched_debug_procfs(void)
{
struct proc_dir_entry *pe;
@@ -143801,10 +143958,10 @@ index 4fbc3bd..6d8ac0d 100644
return -ENOMEM;
return 0;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index eeaf920..9f33e68 100644
+index c8c5d2d..7f7e131 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
-@@ -8078,7 +8078,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { }
+@@ -8239,7 +8239,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).
*/
@@ -143814,7 +143971,7 @@ index eeaf920..9f33e68 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 ec4f538d..e3de404 100644
+index d5690b7..40d1c85 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -362,8 +362,8 @@ static inline int has_pushable_tasks(struct rq *rq)
@@ -143829,10 +143986,10 @@ index ec4f538d..e3de404 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 ec2e8d2..68a780e 100644
+index 898c0d2..c9e3f5b 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
-@@ -632,7 +632,10 @@ struct rq {
+@@ -641,7 +641,10 @@ struct rq {
unsigned long cpu_capacity;
unsigned long cpu_capacity_orig;
@@ -143844,7 +144001,7 @@ index ec2e8d2..68a780e 100644
unsigned char idle_balance;
/* For active balancing */
-@@ -778,7 +781,7 @@ extern int migrate_swap(struct task_struct *, struct task_struct *);
+@@ -787,7 +790,7 @@ extern int migrate_swap(struct task_struct *, struct task_struct *);
static inline void
queue_balance_callback(struct rq *rq,
@@ -143853,7 +144010,7 @@ index ec2e8d2..68a780e 100644
void (*func)(struct rq *rq))
{
lockdep_assert_held(&rq->lock);
-@@ -786,7 +789,7 @@ queue_balance_callback(struct rq *rq,
+@@ -795,7 +798,7 @@ queue_balance_callback(struct rq *rq,
if (unlikely(head->next))
return;
@@ -143862,7 +144019,7 @@ index ec2e8d2..68a780e 100644
head->next = rq->balance_callback;
rq->balance_callback = head;
}
-@@ -1240,7 +1243,7 @@ struct sched_class {
+@@ -1249,7 +1252,7 @@ struct sched_class {
#ifdef CONFIG_FAIR_GROUP_SCHED
void (*task_move_group) (struct task_struct *p);
#endif
@@ -143871,7 +144028,7 @@ index ec2e8d2..68a780e 100644
static inline void put_prev_task(struct rq *rq, struct task_struct *prev)
{
-@@ -1310,7 +1313,7 @@ extern struct dl_bandwidth def_dl_bandwidth;
+@@ -1319,7 +1322,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);
@@ -143879,9 +144036,9 @@ index ec2e8d2..68a780e 100644
+unsigned long __attribute_const__ to_ratio(u64 period, u64 runtime);
extern void init_entity_runnable_average(struct sched_entity *se);
-
+ extern void post_init_entity_util_avg(struct sched_entity *se);
diff --git a/kernel/signal.c b/kernel/signal.c
-index aa9bf00..ec5101c 100644
+index 96e9bc4..499443d 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -53,12 +53,12 @@ static struct kmem_cache *sigqueue_cachep;
@@ -144064,7 +144221,7 @@ index aa9bf00..ec5101c 100644
if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
error = check_kill_permission(sig, info, p);
/*
-@@ -3197,8 +3232,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack,
+@@ -3200,8 +3235,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack,
}
seg = get_fs();
set_fs(KERNEL_DS);
@@ -144075,7 +144232,7 @@ index aa9bf00..ec5101c 100644
compat_user_stack_pointer());
set_fs(seg);
if (ret >= 0 && uoss_ptr) {
-@@ -3482,7 +3517,7 @@ SYSCALL_DEFINE1(ssetmask, int, newmask)
+@@ -3485,7 +3520,7 @@ SYSCALL_DEFINE1(ssetmask, int, newmask)
SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
{
struct k_sigaction new_sa, old_sa;
@@ -144084,7 +144241,7 @@ index aa9bf00..ec5101c 100644
new_sa.sa.sa_handler = handler;
new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
-@@ -3490,7 +3525,7 @@ SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
+@@ -3493,7 +3528,7 @@ SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
ret = do_sigaction(sig, &new_sa, &old_sa);
@@ -144218,7 +144375,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 cf8ba54..196a680 100644
+index 89d5be4..441bef3 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)
@@ -144420,7 +144577,7 @@ index 2c5e3a8..301fb1a 100644
return -ENOSYS;
}
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index 725587f..c7834cc 100644
+index 87b2fc3..da4c155 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -95,7 +95,6 @@
@@ -144465,9 +144622,9 @@ index 725587f..c7834cc 100644
-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 */
-@@ -182,10 +183,8 @@ static int proc_taint(struct ctl_table *table, int write,
+ #ifdef CONFIG_PERF_EVENTS
+ static int six_hundred_forty_kb = 640 * 1024;
+@@ -185,10 +186,8 @@ static int proc_taint(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos);
#endif
@@ -144479,7 +144636,7 @@ index 725587f..c7834cc 100644
static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos);
-@@ -216,6 +215,8 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
+@@ -219,6 +218,8 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
#endif
@@ -144488,7 +144645,7 @@ index 725587f..c7834cc 100644
static struct ctl_table kern_table[];
static struct ctl_table vm_table[];
static struct ctl_table fs_table[];
-@@ -230,6 +231,20 @@ extern struct ctl_table epoll_table[];
+@@ -233,6 +234,20 @@ extern struct ctl_table epoll_table[];
int sysctl_legacy_va_layout;
#endif
@@ -144509,7 +144666,7 @@ index 725587f..c7834cc 100644
/* The default sysctl tables: */
static struct ctl_table sysctl_base_table[] = {
-@@ -278,6 +293,22 @@ static int max_extfrag_threshold = 1000;
+@@ -281,6 +296,22 @@ static int max_extfrag_threshold = 1000;
#endif
static struct ctl_table kern_table[] = {
@@ -144532,7 +144689,7 @@ index 725587f..c7834cc 100644
{
.procname = "sched_child_runs_first",
.data = &sysctl_sched_child_runs_first,
-@@ -641,7 +672,7 @@ static struct ctl_table kern_table[] = {
+@@ -644,7 +675,7 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(int),
.mode = 0644,
/* only handle a transition from default "0" to "1" */
@@ -144541,7 +144698,7 @@ index 725587f..c7834cc 100644
.extra1 = &one,
.extra2 = &one,
},
-@@ -652,7 +683,7 @@ static struct ctl_table kern_table[] = {
+@@ -655,7 +686,7 @@ static struct ctl_table kern_table[] = {
.data = &modprobe_path,
.maxlen = KMOD_PATH_LEN,
.mode = 0644,
@@ -144550,7 +144707,7 @@ index 725587f..c7834cc 100644
},
{
.procname = "modules_disabled",
-@@ -660,7 +691,7 @@ static struct ctl_table kern_table[] = {
+@@ -663,7 +694,7 @@ static struct ctl_table kern_table[] = {
.maxlen = sizeof(int),
.mode = 0644,
/* only handle a transition from default "0" to "1" */
@@ -144559,7 +144716,7 @@ index 725587f..c7834cc 100644
.extra1 = &one,
.extra2 = &one,
},
-@@ -815,20 +846,24 @@ static struct ctl_table kern_table[] = {
+@@ -818,20 +849,24 @@ static struct ctl_table kern_table[] = {
.data = &dmesg_restrict,
.maxlen = sizeof(int),
.mode = 0644,
@@ -144587,7 +144744,7 @@ index 725587f..c7834cc 100644
{
.procname = "ngroups_max",
.data = &ngroups_max,
-@@ -993,6 +1028,17 @@ static struct ctl_table kern_table[] = {
+@@ -996,6 +1031,17 @@ static struct ctl_table kern_table[] = {
.mode = 0644,
.proc_handler = proc_dointvec,
},
@@ -144605,7 +144762,7 @@ index 725587f..c7834cc 100644
#endif
#if defined(CONFIG_MMU)
{
-@@ -1115,10 +1161,17 @@ static struct ctl_table kern_table[] = {
+@@ -1118,10 +1164,17 @@ static struct ctl_table kern_table[] = {
*/
{
.procname = "perf_event_paranoid",
@@ -144626,7 +144783,7 @@ index 725587f..c7834cc 100644
},
{
.procname = "perf_event_mlock_kb",
-@@ -1430,6 +1483,13 @@ static struct ctl_table vm_table[] = {
+@@ -1451,6 +1504,13 @@ static struct ctl_table vm_table[] = {
.proc_handler = proc_dointvec_minmax,
.extra1 = &zero,
},
@@ -144640,7 +144797,7 @@ index 725587f..c7834cc 100644
#else
{
.procname = "nr_trim_pages",
-@@ -1942,6 +2002,16 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -1970,6 +2030,16 @@ int proc_dostring(struct ctl_table *table, int write,
(char __user *)buffer, lenp, ppos);
}
@@ -144657,7 +144814,7 @@ index 725587f..c7834cc 100644
static size_t proc_skip_spaces(char **buf)
{
size_t ret;
-@@ -2047,6 +2117,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
+@@ -2075,6 +2145,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
len = strlen(tmp);
if (len > *size)
len = *size;
@@ -144666,7 +144823,7 @@ index 725587f..c7834cc 100644
if (copy_to_user(*buf, tmp, len))
return -EFAULT;
*size -= len;
-@@ -2217,6 +2289,44 @@ int proc_dointvec(struct ctl_table *table, int write,
+@@ -2245,6 +2317,44 @@ int proc_dointvec(struct ctl_table *table, int write,
NULL,NULL);
}
@@ -144711,7 +144868,7 @@ index 725587f..c7834cc 100644
/*
* Taint values can only be increased
* This means we can safely use a temporary.
-@@ -2224,7 +2334,7 @@ int proc_dointvec(struct ctl_table *table, int write,
+@@ -2252,7 +2362,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)
{
@@ -144720,7 +144877,7 @@ index 725587f..c7834cc 100644
unsigned long tmptaint = get_taint();
int err;
-@@ -2252,16 +2362,14 @@ static int proc_taint(struct ctl_table *table, int write,
+@@ -2280,16 +2390,14 @@ static int proc_taint(struct ctl_table *table, int write,
return err;
}
@@ -144739,7 +144896,7 @@ index 725587f..c7834cc 100644
struct do_proc_dointvec_minmax_conv_param {
int *min;
-@@ -2292,6 +2400,32 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
+@@ -2320,6 +2428,32 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
return 0;
}
@@ -144772,7 +144929,7 @@ index 725587f..c7834cc 100644
/**
* proc_dointvec_minmax - read a vector of integers with min/max values
* @table: the sysctl table
-@@ -2319,6 +2453,17 @@ int proc_dointvec_minmax(struct ctl_table *table, int write,
+@@ -2347,6 +2481,17 @@ int proc_dointvec_minmax(struct ctl_table *table, int write,
do_proc_dointvec_minmax_conv, &param);
}
@@ -144790,7 +144947,7 @@ index 725587f..c7834cc 100644
static void validate_coredump_safety(void)
{
#ifdef CONFIG_COREDUMP
-@@ -2806,6 +2951,12 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -2834,6 +2979,12 @@ int proc_dostring(struct ctl_table *table, int write,
return -ENOSYS;
}
@@ -144803,7 +144960,7 @@ index 725587f..c7834cc 100644
int proc_dointvec(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
-@@ -2862,5 +3013,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
+@@ -2890,5 +3041,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
EXPORT_SYMBOL(proc_dostring);
@@ -144811,7 +144968,7 @@ index 725587f..c7834cc 100644
EXPORT_SYMBOL(proc_doulongvec_minmax);
EXPORT_SYMBOL(proc_doulongvec_ms_jiffies_minmax);
diff --git a/kernel/taskstats.c b/kernel/taskstats.c
-index 21f82c2..c1984e5 100644
+index b3f05ee..b1b5044 100644
--- a/kernel/taskstats.c
+++ b/kernel/taskstats.c
@@ -28,9 +28,12 @@
@@ -144827,7 +144984,7 @@ index 21f82c2..c1984e5 100644
/*
* Maximum length of a cpumask that can be specified in
* the TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK attribute
-@@ -567,6 +570,9 @@ err:
+@@ -540,6 +543,9 @@ err:
static int taskstats_user_cmd(struct sk_buff *skb, struct genl_info *info)
{
@@ -144900,10 +145057,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 1cafba8..eccbd51 100644
+index 39008d7..0a60468 100644
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
-@@ -1467,14 +1467,14 @@ struct k_clock clock_posix_cpu = {
+@@ -1468,14 +1468,14 @@ struct k_clock clock_posix_cpu = {
static __init int init_posix_cpu_timers(void)
{
@@ -145088,10 +145245,10 @@ index f2826c3..7e6663a 100644
}
diff --git a/kernel/time/time.c b/kernel/time/time.c
-index be115b0..5d134df 100644
+index 667b933..1668952 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)
+@@ -177,6 +177,11 @@ int do_sys_settimeofday64(const struct timespec64 *tv, const struct timezone *tz
if (tz->tz_minuteswest > 15*60 || tz->tz_minuteswest < -15*60)
return -EINVAL;
@@ -145125,10 +145282,10 @@ index 479d25c..7c25647 100644
write_seqcount_begin(&tk_core.seq);
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
-index 73164c3..094396f 100644
+index 3a95f97..133d37b 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
-@@ -1429,7 +1429,7 @@ void update_process_times(int user_tick)
+@@ -1414,7 +1414,7 @@ void update_process_times(int user_tick)
/*
* This function runs timers and the timer-tq in bottom half context.
*/
@@ -145259,7 +145416,7 @@ index 1adecb4..b4fb631 100644
return -ENOMEM;
return 0;
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
-index e45db6b..6527679 100644
+index fafeaf8..498f575 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -107,6 +107,7 @@ config TRACING
@@ -145311,7 +145468,7 @@ index e45db6b..6527679 100644
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 f94e7a2..75c8035 100644
+index 9aef865..ea3f274 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,
@@ -145342,7 +145499,7 @@ index f94e7a2..75c8035 100644
ret = -EIO;
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
-index b1870fb..02fbaa7 100644
+index 900dbb1..8a36307 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,
@@ -145357,7 +145514,7 @@ index b1870fb..02fbaa7 100644
#endif
/*
-@@ -2467,13 +2468,18 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
+@@ -2479,13 +2480,18 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
if (unlikely(ftrace_disabled))
return 0;
@@ -145378,7 +145535,7 @@ index b1870fb..02fbaa7 100644
}
/*
-@@ -4825,8 +4831,10 @@ static int ftrace_process_locs(struct module *mod,
+@@ -4849,8 +4855,10 @@ static int ftrace_process_locs(struct module *mod,
if (!count)
return 0;
@@ -145389,7 +145546,7 @@ index b1870fb..02fbaa7 100644
start_pg = ftrace_allocate_pages(count);
if (!start_pg)
-@@ -5242,7 +5250,8 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
+@@ -5266,7 +5274,8 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
__ftrace_ops_list_func(ip, parent_ip, NULL, regs);
}
#else
@@ -145399,7 +145556,7 @@ index b1870fb..02fbaa7 100644
{
__ftrace_ops_list_func(ip, parent_ip, NULL, NULL);
}
-@@ -5703,8 +5712,12 @@ int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
+@@ -5727,8 +5736,12 @@ int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
}
/* The callbacks that hook a function */
@@ -145414,7 +145571,7 @@ index b1870fb..02fbaa7 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;
-@@ -5738,7 +5751,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
+@@ -5761,7 +5774,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);
@@ -145423,7 +145580,7 @@ index b1870fb..02fbaa7 100644
t->curr_ret_stack = -1;
/* Make sure the tasks see the -1 first: */
smp_wmb();
-@@ -5933,7 +5946,7 @@ void unregister_ftrace_graph(void)
+@@ -5956,7 +5969,7 @@ void unregister_ftrace_graph(void)
goto out;
ftrace_graph_active--;
@@ -145432,7 +145589,7 @@ index b1870fb..02fbaa7 100644
ftrace_graph_entry = ftrace_graph_entry_stub;
__ftrace_graph_entry = ftrace_graph_entry_stub;
ftrace_shutdown(&graph_ops, FTRACE_STOP_FUNC_RET);
-@@ -5961,7 +5974,7 @@ static void
+@@ -5984,7 +5997,7 @@ static void
graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack)
{
atomic_set(&t->tracing_graph_pause, 0);
@@ -145785,10 +145942,10 @@ index 9c14373..5ddd763 100644
*data_page = bpage;
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index a2f0b9f..95f8a8b 100644
+index 8a4bd6b..3b741d7 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
-@@ -3552,7 +3552,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
+@@ -3649,7 +3649,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
return 0;
}
@@ -145798,10 +145955,10 @@ index a2f0b9f..95f8a8b 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 3fff4ad..95c8932 100644
+index 5167c36..34bbcb3 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
-@@ -1395,7 +1395,7 @@ void trace_printk_control(bool enabled);
+@@ -1579,7 +1579,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);
@@ -145831,10 +145988,10 @@ index 0f06532..247c8e7 100644
+ return atomic64_inc_return_unchecked(&trace_counter);
}
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
-index 6f96586..bcd069a 100644
+index 3d41558..5ae0a82 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
-@@ -2362,7 +2362,6 @@ __trace_early_add_new_event(struct trace_event_call *call,
+@@ -2437,7 +2437,6 @@ __trace_early_add_new_event(struct trace_event_call *call,
return 0;
}
@@ -145842,6 +145999,21 @@ index 6f96586..bcd069a 100644
static void __add_event_to_tracers(struct trace_event_call *call);
/* Add an additional event_call dynamically */
+diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
+index 0c05b8a..f1dcbf3 100644
+--- a/kernel/trace/trace_events_hist.c
++++ b/kernel/trace/trace_events_hist.c
+@@ -1078,8 +1078,8 @@ static void hist_trigger_show(struct seq_file *m,
+ }
+
+ seq_printf(m, "\nTotals:\n Hits: %llu\n Entries: %u\n Dropped: %llu\n",
+- (u64)atomic64_read(&hist_data->map->hits),
+- n_entries, (u64)atomic64_read(&hist_data->map->drops));
++ (u64)atomic64_read_unchecked(&hist_data->map->hits),
++ n_entries, (u64)atomic64_read_unchecked(&hist_data->map->drops));
+ }
+
+ static int hist_show(struct seq_file *m, void *v)
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index 3a0244f..3383aff 100644
--- a/kernel/trace/trace_functions_graph.c
@@ -145956,10 +146128,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 e78f364..ae5a282 100644
+index b2b6efc..52e0a3d 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
-@@ -604,6 +604,8 @@ static int perf_sysenter_enable(struct trace_event_call *call)
+@@ -605,6 +605,8 @@ static int perf_sysenter_enable(struct trace_event_call *call)
int num;
num = ((struct syscall_metadata *)call->data)->syscall_nr;
@@ -145968,7 +146140,7 @@ index e78f364..ae5a282 100644
mutex_lock(&syscall_trace_lock);
if (!sys_perf_refcount_enter)
-@@ -624,6 +626,8 @@ static void perf_sysenter_disable(struct trace_event_call *call)
+@@ -625,6 +627,8 @@ static void perf_sysenter_disable(struct trace_event_call *call)
int num;
num = ((struct syscall_metadata *)call->data)->syscall_nr;
@@ -145977,7 +146149,7 @@ index e78f364..ae5a282 100644
mutex_lock(&syscall_trace_lock);
sys_perf_refcount_enter--;
-@@ -676,6 +680,8 @@ static int perf_sysexit_enable(struct trace_event_call *call)
+@@ -677,6 +681,8 @@ static int perf_sysexit_enable(struct trace_event_call *call)
int num;
num = ((struct syscall_metadata *)call->data)->syscall_nr;
@@ -145986,7 +146158,7 @@ index e78f364..ae5a282 100644
mutex_lock(&syscall_trace_lock);
if (!sys_perf_refcount_exit)
-@@ -696,6 +702,8 @@ static void perf_sysexit_disable(struct trace_event_call *call)
+@@ -697,6 +703,8 @@ static void perf_sysexit_disable(struct trace_event_call *call)
int num;
num = ((struct syscall_metadata *)call->data)->syscall_nr;
@@ -145995,6 +146167,182 @@ index e78f364..ae5a282 100644
mutex_lock(&syscall_trace_lock);
sys_perf_refcount_exit--;
+diff --git a/kernel/trace/tracing_map.c b/kernel/trace/tracing_map.c
+index 0a689bb..e96cd14 100644
+--- a/kernel/trace/tracing_map.c
++++ b/kernel/trace/tracing_map.c
+@@ -349,7 +349,7 @@ static struct tracing_map_elt *get_free_elt(struct tracing_map *map)
+ struct tracing_map_elt *elt = NULL;
+ int idx;
+
+- idx = atomic_inc_return(&map->next_elt);
++ idx = atomic_inc_return_unchecked(&map->next_elt);
+ if (idx < map->max_elts) {
+ elt = *(TRACING_MAP_ELT(map->elts, idx));
+ if (map->ops && map->ops->elt_init)
+@@ -425,7 +425,7 @@ __tracing_map_insert(struct tracing_map *map, void *key, bool lookup_only)
+
+ if (test_key && test_key == key_hash && entry->val &&
+ keys_match(key, entry->val->key, map->key_size)) {
+- atomic64_inc(&map->hits);
++ atomic64_inc_unchecked(&map->hits);
+ return entry->val;
+ }
+
+@@ -438,14 +438,14 @@ __tracing_map_insert(struct tracing_map *map, void *key, bool lookup_only)
+
+ elt = get_free_elt(map);
+ if (!elt) {
+- atomic64_inc(&map->drops);
++ atomic64_inc_unchecked(&map->drops);
+ entry->key = 0;
+ break;
+ }
+
+ memcpy(elt->key, key, map->key_size);
+ entry->val = elt;
+- atomic64_inc(&map->hits);
++ atomic64_inc_unchecked(&map->hits);
+
+ return entry->val;
+ }
+@@ -557,9 +557,9 @@ void tracing_map_clear(struct tracing_map *map)
+ {
+ unsigned int i;
+
+- atomic_set(&map->next_elt, -1);
+- atomic64_set(&map->hits, 0);
+- atomic64_set(&map->drops, 0);
++ atomic_set_unchecked(&map->next_elt, -1);
++ atomic64_set_unchecked(&map->hits, 0);
++ atomic64_set_unchecked(&map->drops, 0);
+
+ tracing_map_array_clear(map->map);
+
+@@ -641,7 +641,7 @@ struct tracing_map *tracing_map_create(unsigned int map_bits,
+
+ map->map_bits = map_bits;
+ map->max_elts = (1 << map_bits);
+- atomic_set(&map->next_elt, -1);
++ atomic_set_unchecked(&map->next_elt, -1);
+
+ map->map_size = (1 << (map_bits + 1));
+ map->ops = ops;
+@@ -700,9 +700,10 @@ int tracing_map_init(struct tracing_map *map)
+ return err;
+ }
+
+-static int cmp_entries_dup(const struct tracing_map_sort_entry **a,
+- const struct tracing_map_sort_entry **b)
++static int cmp_entries_dup(const void *_a, const void *_b)
+ {
++ const struct tracing_map_sort_entry **a = (const struct tracing_map_sort_entry **)_a;
++ const struct tracing_map_sort_entry **b = (const struct tracing_map_sort_entry **)_b;
+ int ret = 0;
+
+ if (memcmp((*a)->key, (*b)->key, (*a)->elt->map->key_size))
+@@ -711,9 +712,10 @@ static int cmp_entries_dup(const struct tracing_map_sort_entry **a,
+ return ret;
+ }
+
+-static int cmp_entries_sum(const struct tracing_map_sort_entry **a,
+- const struct tracing_map_sort_entry **b)
++static int cmp_entries_sum(const void *_a, const void *_b)
+ {
++ const struct tracing_map_sort_entry **a = (const struct tracing_map_sort_entry **)_a;
++ const struct tracing_map_sort_entry **b = (const struct tracing_map_sort_entry **)_b;
+ const struct tracing_map_elt *elt_a, *elt_b;
+ struct tracing_map_sort_key *sort_key;
+ struct tracing_map_field *field;
+@@ -739,9 +741,10 @@ static int cmp_entries_sum(const struct tracing_map_sort_entry **a,
+ return ret;
+ }
+
+-static int cmp_entries_key(const struct tracing_map_sort_entry **a,
+- const struct tracing_map_sort_entry **b)
++static int cmp_entries_key(const void *_a, const void *_b)
+ {
++ const struct tracing_map_sort_entry **a = (const struct tracing_map_sort_entry **)_a;
++ const struct tracing_map_sort_entry **b = (const struct tracing_map_sort_entry **)_b;
+ const struct tracing_map_elt *elt_a, *elt_b;
+ struct tracing_map_sort_key *sort_key;
+ struct tracing_map_field *field;
+@@ -874,8 +877,7 @@ static int merge_dups(struct tracing_map_sort_entry **sort_entries,
+ if (n_entries < 2)
+ return total_dups;
+
+- sort(sort_entries, n_entries, sizeof(struct tracing_map_sort_entry *),
+- (int (*)(const void *, const void *))cmp_entries_dup, NULL);
++ sort(sort_entries, n_entries, sizeof(struct tracing_map_sort_entry *), cmp_entries_dup, NULL);
+
+ key = sort_entries[0]->key;
+ for (i = 1; i < n_entries; i++) {
+@@ -923,10 +925,8 @@ static void sort_secondary(struct tracing_map *map,
+ struct tracing_map_sort_key *primary_key,
+ struct tracing_map_sort_key *secondary_key)
+ {
+- int (*primary_fn)(const struct tracing_map_sort_entry **,
+- const struct tracing_map_sort_entry **);
+- int (*secondary_fn)(const struct tracing_map_sort_entry **,
+- const struct tracing_map_sort_entry **);
++ int (*primary_fn)(const void*, const void*);
++ int (*secondary_fn)(const void*, const void*);
+ unsigned i, start = 0, n_sub = 1;
+
+ if (is_key(map, primary_key->field_idx))
+@@ -958,7 +958,7 @@ static void sort_secondary(struct tracing_map *map,
+ set_sort_key(map, secondary_key);
+ sort(&entries[start], n_sub,
+ sizeof(struct tracing_map_sort_entry *),
+- (int (*)(const void *, const void *))secondary_fn, NULL);
++ secondary_fn, NULL);
+ set_sort_key(map, primary_key);
+
+ start = i + 1;
+@@ -995,8 +995,7 @@ int tracing_map_sort_entries(struct tracing_map *map,
+ unsigned int n_sort_keys,
+ struct tracing_map_sort_entry ***sort_entries)
+ {
+- int (*cmp_entries_fn)(const struct tracing_map_sort_entry **,
+- const struct tracing_map_sort_entry **);
++ int (*cmp_entries_fn)(const void*, const void*);
+ struct tracing_map_sort_entry *sort_entry, **entries;
+ int i, n_entries, ret;
+
+@@ -1042,8 +1041,7 @@ int tracing_map_sort_entries(struct tracing_map *map,
+
+ set_sort_key(map, &sort_keys[0]);
+
+- sort(entries, n_entries, sizeof(struct tracing_map_sort_entry *),
+- (int (*)(const void *, const void *))cmp_entries_fn, NULL);
++ sort(entries, n_entries, sizeof(struct tracing_map_sort_entry *), cmp_entries_fn, NULL);
+
+ if (n_sort_keys > 1)
+ sort_secondary(map,
+diff --git a/kernel/trace/tracing_map.h b/kernel/trace/tracing_map.h
+index 618838f..3dc1b9b 100644
+--- a/kernel/trace/tracing_map.h
++++ b/kernel/trace/tracing_map.h
+@@ -181,7 +181,7 @@ struct tracing_map {
+ unsigned int map_bits;
+ unsigned int map_size;
+ unsigned int max_elts;
+- atomic_t next_elt;
++ atomic_unchecked_t next_elt;
+ struct tracing_map_array *elts;
+ struct tracing_map_array *map;
+ const struct tracing_map_ops *ops;
+@@ -191,8 +191,8 @@ struct tracing_map {
+ int key_idx[TRACING_MAP_KEYS_MAX];
+ unsigned int n_keys;
+ struct tracing_map_sort_key sort_key;
+- atomic64_t hits;
+- atomic64_t drops;
++ atomic64_unchecked_t hits;
++ atomic64_unchecked_t drops;
+ };
+
+ /**
diff --git a/kernel/user.c b/kernel/user.c
index b069ccb..c59fe26 100644
--- a/kernel/user.c
@@ -146071,10 +146419,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 5f5068e..64dcad7 100644
+index 97e7b79..37552c71 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
-@@ -1948,9 +1948,8 @@ static void pool_mayday_timeout(unsigned long __pool)
+@@ -1922,9 +1922,8 @@ static void pool_mayday_timeout(unsigned long __pool)
* multiple times. Does GFP_KERNEL allocations. Called only from
* manager.
*/
@@ -146085,7 +146433,7 @@ index 5f5068e..64dcad7 100644
{
restart:
spin_unlock_irq(&pool->lock);
-@@ -2040,9 +2039,8 @@ static bool manage_workers(struct worker *worker)
+@@ -2014,9 +2013,8 @@ static bool manage_workers(struct worker *worker)
* CONTEXT:
* spin_lock_irq(pool->lock) which is released and regrabbed.
*/
@@ -146096,7 +146444,7 @@ index 5f5068e..64dcad7 100644
{
struct pool_workqueue *pwq = get_work_pwq(work);
struct worker_pool *pool = worker->pool;
-@@ -4599,7 +4597,7 @@ static void rebind_workers(struct worker_pool *pool)
+@@ -4573,7 +4571,7 @@ static void rebind_workers(struct worker_pool *pool)
WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
worker_flags |= WORKER_REBOUND;
worker_flags &= ~WORKER_UNBOUND;
@@ -146106,7 +146454,7 @@ index 5f5068e..64dcad7 100644
spin_unlock_irq(&pool->lock);
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 1e9a607..c0eb5e0 100644
+index b9cfdbf..f47bcb2 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -243,6 +243,7 @@ config PAGE_OWNER
@@ -146117,15 +146465,15 @@ index 1e9a607..c0eb5e0 100644
select STACKTRACE
select PAGE_EXTENSION
help
-@@ -257,6 +258,7 @@ config PAGE_OWNER
-
+@@ -258,6 +259,7 @@ config PAGE_OWNER
config DEBUG_FS
bool "Debug Filesystem"
+ select SRCU
+ depends on !GRKERNSEC_KMEM
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
-@@ -510,6 +512,7 @@ config DEBUG_KMEMLEAK
+@@ -511,6 +513,7 @@ config DEBUG_KMEMLEAK
bool "Kernel memory leak detector"
depends on DEBUG_KERNEL && HAVE_DEBUG_KMEMLEAK
select DEBUG_FS
@@ -146133,7 +146481,7 @@ index 1e9a607..c0eb5e0 100644
select STACKTRACE if STACKTRACE_SUPPORT
select KALLSYMS
select CRC32
-@@ -707,6 +710,7 @@ config KCOV
+@@ -708,6 +711,7 @@ config KCOV
bool "Code coverage for fuzzing"
depends on ARCH_HAS_KCOV
select DEBUG_FS
@@ -146141,7 +146489,7 @@ index 1e9a607..c0eb5e0 100644
help
KCOV exposes kernel code coverage information in a form suitable
for coverage-guided fuzzing (randomized testing).
-@@ -997,7 +1001,7 @@ config DEBUG_MUTEXES
+@@ -998,7 +1002,7 @@ config DEBUG_MUTEXES
config DEBUG_WW_MUTEX_SLOWPATH
bool "Wait/wound mutex debugging: Slowpath testing"
@@ -146150,7 +146498,7 @@ index 1e9a607..c0eb5e0 100644
select DEBUG_LOCK_ALLOC
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -1014,7 +1018,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
+@@ -1015,7 +1019,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
config DEBUG_LOCK_ALLOC
bool "Lock debugging: detect incorrect freeing of live locks"
@@ -146159,7 +146507,7 @@ index 1e9a607..c0eb5e0 100644
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
select LOCKDEP
-@@ -1028,7 +1032,7 @@ config DEBUG_LOCK_ALLOC
+@@ -1029,7 +1033,7 @@ config DEBUG_LOCK_ALLOC
config PROVE_LOCKING
bool "Lock debugging: prove locking correctness"
@@ -146168,7 +146516,7 @@ index 1e9a607..c0eb5e0 100644
select LOCKDEP
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -1079,7 +1083,7 @@ config LOCKDEP
+@@ -1080,7 +1084,7 @@ config LOCKDEP
config LOCK_STAT
bool "Lock usage statistics"
@@ -146177,7 +146525,7 @@ index 1e9a607..c0eb5e0 100644
select LOCKDEP
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -1492,6 +1496,7 @@ config NOTIFIER_ERROR_INJECTION
+@@ -1526,6 +1530,7 @@ config NOTIFIER_ERROR_INJECTION
tristate "Notifier error injection"
depends on DEBUG_KERNEL
select DEBUG_FS
@@ -146185,7 +146533,7 @@ index 1e9a607..c0eb5e0 100644
help
This option provides the ability to inject artificial errors to
specified notifier chain callbacks. It is useful to test the error
-@@ -1637,6 +1642,7 @@ config FAIL_MMC_REQUEST
+@@ -1671,6 +1676,7 @@ config FAIL_MMC_REQUEST
config FAIL_FUTEX
bool "Fault-injection capability for futexes"
select DEBUG_FS
@@ -146193,7 +146541,7 @@ index 1e9a607..c0eb5e0 100644
depends on FAULT_INJECTION && FUTEX
help
Provide fault-injection capability for futexes.
-@@ -1661,6 +1667,7 @@ config LATENCYTOP
+@@ -1695,6 +1701,7 @@ config LATENCYTOP
depends on DEBUG_KERNEL
depends on STACKTRACE_SUPPORT
depends on PROC_FS
@@ -146201,7 +146549,7 @@ index 1e9a607..c0eb5e0 100644
select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC
select KALLSYMS
select KALLSYMS_ALL
-@@ -1677,7 +1684,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
+@@ -1711,7 +1718,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
@@ -146210,7 +146558,7 @@ index 1e9a607..c0eb5e0 100644
help
Enabling this option turns a certain set of sanity checks for user
copy operations into compile time failures.
-@@ -1819,7 +1826,7 @@ endmenu # runtime tests
+@@ -1867,7 +1874,7 @@ endmenu # runtime tests
config PROVIDE_OHCI1394_DMA_INIT
bool "Remote debugging over FireWire early on boot"
@@ -146220,10 +146568,10 @@ index 1e9a607..c0eb5e0 100644
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/Makefile b/lib/Makefile
-index 7bd6fd4..643d6f9 100644
+index ff6a7a6..c952cc6 100644
--- a/lib/Makefile
+++ b/lib/Makefile
-@@ -80,7 +80,7 @@ obj-$(CONFIG_BTREE) += btree.o
+@@ -82,7 +82,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
@@ -146286,10 +146634,10 @@ index bc3656e..470f3ab 100644
file = NULL;
line = 0;
diff --git a/lib/debugobjects.c b/lib/debugobjects.c
-index 519b5a1..4e58003 100644
+index a8e1260..cf8f2be 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
-@@ -289,7 +289,7 @@ static void debug_object_is_on_stack(void *addr, int onstack)
+@@ -288,7 +288,7 @@ static void debug_object_is_on_stack(void *addr, int onstack)
if (limit > 4)
return;
@@ -146833,7 +147181,7 @@ index 5a92189..d77978d 100644
}
spin_unlock(&lockref->lock);
diff --git a/lib/nlattr.c b/lib/nlattr.c
-index f5907d2..36072be 100644
+index fce1e9a..d44559b 100644
--- a/lib/nlattr.c
+++ b/lib/nlattr.c
@@ -278,6 +278,8 @@ int nla_memcpy(void *dest, const struct nlattr *src, int count)
@@ -146859,17 +147207,17 @@ index 27fe749..2c0e855 100644
static DECLARE_WAIT_QUEUE_HEAD(percpu_ref_switch_waitq);
diff --git a/lib/radix-tree.c b/lib/radix-tree.c
-index 1624c41..1a43c06 100644
+index 8b7d845..d6f36af 100644
--- a/lib/radix-tree.c
+++ b/lib/radix-tree.c
-@@ -68,7 +68,7 @@ struct radix_tree_preload {
+@@ -64,7 +64,7 @@ struct radix_tree_preload {
/* nodes->private_data points to next preallocated node */
struct radix_tree_node *nodes;
};
-static DEFINE_PER_CPU(struct radix_tree_preload, radix_tree_preloads) = { 0, };
+static DEFINE_PER_CPU(struct radix_tree_preload, radix_tree_preloads);
- static inline void *ptr_to_indirect(void *ptr)
+ static inline void *node_to_entry(void *ptr)
{
diff --git a/lib/random32.c b/lib/random32.c
index 510d1ce..722d2b6 100644
@@ -146900,10 +147248,10 @@ index 1356454..70ce6c6 100644
void rb_insert_color(struct rb_node *node, struct rb_root *root)
diff --git a/lib/rhashtable.c b/lib/rhashtable.c
-index cc80870..6378152 100644
+index 5d845ff..c91f0af 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
-@@ -555,8 +555,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_exit);
+@@ -557,8 +557,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_exit);
* will rewind back to the beginning and you may use it immediately
* by calling rhashtable_walk_next.
*/
@@ -146913,7 +147261,7 @@ index cc80870..6378152 100644
{
struct rhashtable *ht = iter->ht;
-@@ -640,8 +640,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_next);
+@@ -642,8 +642,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_next);
*
* Finish a hash table walk.
*/
@@ -146958,10 +147306,10 @@ index 1feed6a..4ede1e9 100644
#endif
}
diff --git a/lib/strncpy_from_user.c b/lib/strncpy_from_user.c
-index 3384032..e4389a1 100644
+index 33f655e..8ca4054 100644
--- a/lib/strncpy_from_user.c
+++ b/lib/strncpy_from_user.c
-@@ -22,7 +22,7 @@
+@@ -23,7 +23,7 @@
*/
static inline long do_strncpy_from_user(char *dst, const char __user *src, long count, unsigned long max)
{
@@ -147011,7 +147359,7 @@ index 4f5b1dd..7cab418 100644
+}
+EXPORT_SYMBOL(copy_to_user_overflow);
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
-index ccb664b..be065a5 100644
+index 0967771..aaabd5d 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -16,6 +16,9 @@
@@ -147024,7 +147372,7 @@ index ccb664b..be065a5 100644
#include <stdarg.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
-@@ -679,7 +682,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
+@@ -680,7 +683,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
#ifdef CONFIG_KALLSYMS
if (*fmt == 'B')
sprint_backtrace(sym, value);
@@ -147033,7 +147381,7 @@ index ccb664b..be065a5 100644
sprint_symbol(sym, value);
else
sprint_symbol_no_offset(sym, value);
-@@ -1475,7 +1478,11 @@ char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt)
+@@ -1470,7 +1473,11 @@ char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt)
return format_flags(buf, end, flags, names);
}
@@ -147046,7 +147394,7 @@ index ccb664b..be065a5 100644
/*
* Show a '%p' thing. A kernel extension is that the '%p' is followed
-@@ -1486,8 +1493,10 @@ int kptr_restrict __read_mostly;
+@@ -1481,8 +1488,10 @@ int kptr_restrict __read_mostly;
*
* - 'F' For symbolic function descriptor pointers with offset
* - 'f' For simple symbolic function names without offset
@@ -147057,7 +147405,7 @@ index ccb664b..be065a5 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]
-@@ -1583,12 +1592,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1578,12 +1587,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
if (!ptr && *fmt != 'K') {
/*
@@ -147072,7 +147420,7 @@ index ccb664b..be065a5 100644
}
switch (*fmt) {
-@@ -1598,6 +1607,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1593,6 +1602,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
/* Fallthrough */
case 'S':
case 's':
@@ -147087,7 +147435,7 @@ index ccb664b..be065a5 100644
case 'B':
return symbol_string(buf, end, ptr, spec, fmt);
case 'R':
-@@ -1662,6 +1679,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1657,6 +1674,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
va_end(va);
return buf;
}
@@ -147096,7 +147444,7 @@ index ccb664b..be065a5 100644
case 'K':
switch (kptr_restrict) {
case 0:
-@@ -1691,6 +1710,9 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1686,6 +1705,9 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
*/
cred = current_cred();
if (!has_capability_noaudit(current, CAP_SYSLOG) ||
@@ -147106,7 +147454,7 @@ index ccb664b..be065a5 100644
!uid_eq(cred->euid, cred->uid) ||
!gid_eq(cred->egid, cred->gid))
ptr = NULL;
-@@ -1724,6 +1746,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1719,6 +1741,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
case 'G':
return flags_string(buf, end, ptr, fmt);
}
@@ -147129,7 +147477,7 @@ index ccb664b..be065a5 100644
spec.flags |= SMALL;
if (spec.field_width == -1) {
spec.field_width = default_width;
-@@ -2424,11 +2462,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2419,11 +2457,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)); \
@@ -147144,7 +147492,7 @@ index ccb664b..be065a5 100644
} \
args += sizeof(type); \
value; \
-@@ -2491,7 +2529,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2486,7 +2524,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;
@@ -147161,10 +147509,10 @@ index 0000000..7cd6065
@@ -0,0 +1 @@
+-grsec
diff --git a/mm/Kconfig b/mm/Kconfig
-index 989f8f3..3f7e8cc 100644
+index 3e2daef..1ed2829 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
-@@ -323,10 +323,11 @@ config KSM
+@@ -334,10 +334,11 @@ config KSM
root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
config DEFAULT_MMAP_MIN_ADDR
@@ -147179,7 +147527,7 @@ index 989f8f3..3f7e8cc 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.
-@@ -358,8 +359,9 @@ config MEMORY_FAILURE
+@@ -369,8 +370,9 @@ config MEMORY_FAILURE
config HWPOISON_INJECT
tristate "HWPoison pages injector"
@@ -147190,7 +147538,7 @@ index 989f8f3..3f7e8cc 100644
config NOMMU_INITIAL_TRIM_EXCESS
int "Turn on mmap() excess space trimming before booting"
-@@ -520,6 +522,7 @@ config MEM_SOFT_DIRTY
+@@ -532,6 +534,7 @@ config MEM_SOFT_DIRTY
bool "Track memory changes"
depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS
select PROC_PAGE_MONITOR
@@ -147198,7 +147546,7 @@ index 989f8f3..3f7e8cc 100644
help
This option enables memory changes tracking by introducing a
soft-dirty bit on pte-s. This bit it set when someone writes
-@@ -594,6 +597,7 @@ config ZSMALLOC_STAT
+@@ -616,6 +619,7 @@ config ZSMALLOC_STAT
bool "Export zsmalloc statistics"
depends on ZSMALLOC
select DEBUG_FS
@@ -147219,7 +147567,7 @@ index 22f4cd9..402f316 100644
depends on !KMEMCHECK
select PAGE_EXTENSION
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
-index 0c6317b..24c13bd 100644
+index ed173b8..df5f896 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -12,7 +12,7 @@
@@ -147241,10 +147589,10 @@ index 0c6317b..24c13bd 100644
bdi_destroy(bdi);
return err;
diff --git a/mm/fadvise.c b/mm/fadvise.c
-index b8024fa..132d187 100644
+index 6c707bf..c8d0529 100644
--- a/mm/fadvise.c
+++ b/mm/fadvise.c
-@@ -154,7 +154,7 @@ out:
+@@ -165,7 +165,7 @@ out:
#ifdef __ARCH_WANT_SYS_FADVISE64
@@ -147254,10 +147602,10 @@ index b8024fa..132d187 100644
return sys_fadvise64_64(fd, offset, len, advice);
}
diff --git a/mm/filemap.c b/mm/filemap.c
-index f2479af..13e3c295 100644
+index 20f3b1f..10fc7ab 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
-@@ -2244,7 +2244,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
+@@ -2241,7 +2241,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)
@@ -147266,7 +147614,7 @@ index f2479af..13e3c295 100644
file_accessed(file);
vma->vm_ops = &generic_file_vm_ops;
return 0;
-@@ -2287,7 +2287,7 @@ static struct page *wait_on_page_read(struct page *page)
+@@ -2284,7 +2284,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,
@@ -147275,7 +147623,7 @@ index f2479af..13e3c295 100644
void *data,
gfp_t gfp)
{
-@@ -2394,7 +2394,7 @@ out:
+@@ -2391,7 +2391,7 @@ out:
*/
struct page *read_cache_page(struct address_space *mapping,
pgoff_t index,
@@ -147284,7 +147632,7 @@ index f2479af..13e3c295 100644
void *data)
{
return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping));
-@@ -2416,7 +2416,7 @@ struct page *read_cache_page_gfp(struct address_space *mapping,
+@@ -2413,7 +2413,7 @@ struct page *read_cache_page_gfp(struct address_space *mapping,
pgoff_t index,
gfp_t gfp)
{
@@ -147293,7 +147641,7 @@ index f2479af..13e3c295 100644
return do_read_cache_page(mapping, index, filler, NULL, gfp);
}
-@@ -2446,6 +2446,7 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)
+@@ -2443,6 +2443,7 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)
pos = iocb->ki_pos;
if (limit != RLIM_INFINITY) {
@@ -147353,10 +147701,10 @@ index c057784..aafea3a 100644
}
EXPORT_SYMBOL(__get_user_pages);
diff --git a/mm/highmem.c b/mm/highmem.c
-index 123bcd3..c2c85db 100644
+index 50b4ca6..cf64608 100644
--- a/mm/highmem.c
+++ b/mm/highmem.c
-@@ -195,8 +195,9 @@ static void flush_all_zero_pkmaps(void)
+@@ -191,8 +191,9 @@ static void flush_all_zero_pkmaps(void)
* So no dangers, even with speculative execution.
*/
page = pte_page(pkmap_page_table[i]);
@@ -147367,7 +147715,7 @@ index 123bcd3..c2c85db 100644
set_page_address(page, NULL);
need_flush = 1;
}
-@@ -259,8 +260,11 @@ start:
+@@ -255,8 +256,11 @@ start:
}
}
vaddr = PKMAP_ADDR(last_pkmap_nr);
@@ -147380,10 +147728,10 @@ 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 19d0d08..9a1ad47 100644
+index addfe4ac..bc76631 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
-@@ -38,7 +38,60 @@ int hugepages_treat_as_movable;
+@@ -38,7 +38,72 @@ int hugepages_treat_as_movable;
int hugetlb_max_hstate __read_mostly;
unsigned int default_hstate_idx;
@@ -147418,6 +147766,12 @@ index 19d0d08..9a1ad47 100644
+ [1] = CFTYPE_INIT(1),
+# endif
+# if HUGE_MAX_HSTATE > 2
++ [2] = CFTYPE_INIT(2),
++# endif
++# if HUGE_MAX_HSTATE > 3
++ [3] = CFTYPE_INIT(3),
++# endif
++# if HUGE_MAX_HSTATE > 4
+# error PaX: add more initializers...
+# endif
+
@@ -147436,6 +147790,12 @@ index 19d0d08..9a1ad47 100644
+ HSTATE_INIT(1),
+# endif
+# if HUGE_MAX_HSTATE > 2
++ HSTATE_INIT(2),
++# endif
++# if HUGE_MAX_HSTATE > 3
++ HSTATE_INIT(3),
++# endif
++# if HUGE_MAX_HSTATE > 4
+# error PaX: add more initializers...
+# endif
+
@@ -147445,7 +147805,7 @@ index 19d0d08..9a1ad47 100644
/*
* Minimum page order among possible hugepage sizes, set to a proper value
* at boot time.
-@@ -2745,6 +2798,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
+@@ -2800,6 +2865,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)
{
@@ -147453,7 +147813,7 @@ index 19d0d08..9a1ad47 100644
struct hstate *h = &default_hstate;
unsigned long tmp = h->max_huge_pages;
int ret;
-@@ -2752,9 +2806,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
+@@ -2807,9 +2873,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
if (!hugepages_supported())
return -EOPNOTSUPP;
@@ -147467,7 +147827,7 @@ index 19d0d08..9a1ad47 100644
if (ret)
goto out;
-@@ -2789,6 +2844,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
+@@ -2844,6 +2911,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
struct hstate *h = &default_hstate;
unsigned long tmp;
int ret;
@@ -147475,7 +147835,7 @@ index 19d0d08..9a1ad47 100644
if (!hugepages_supported())
return -EOPNOTSUPP;
-@@ -2798,9 +2854,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
+@@ -2853,9 +2921,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
if (write && hstate_is_gigantic(h))
return -EINVAL;
@@ -147489,7 +147849,7 @@ index 19d0d08..9a1ad47 100644
if (ret)
goto out;
-@@ -3306,6 +3363,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3361,6 +3430,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
i_mmap_unlock_write(mapping);
}
@@ -147517,7 +147877,7 @@ index 19d0d08..9a1ad47 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
-@@ -3419,6 +3497,11 @@ retry_avoidcopy:
+@@ -3474,6 +3564,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);
@@ -147529,7 +147889,7 @@ index 19d0d08..9a1ad47 100644
/* Make the old page be freed below */
new_page = old_page;
}
-@@ -3592,6 +3675,10 @@ retry:
+@@ -3647,6 +3742,10 @@ retry:
&& (vma->vm_flags & VM_SHARED)));
set_huge_pte_at(mm, address, ptep, new_pte);
@@ -147540,7 +147900,7 @@ index 19d0d08..9a1ad47 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 */
-@@ -3660,6 +3747,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3715,6 +3814,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
struct address_space *mapping;
int need_wait_lock = 0;
@@ -147551,7 +147911,7 @@ index 19d0d08..9a1ad47 100644
address &= huge_page_mask(h);
ptep = huge_pte_offset(mm, address);
-@@ -3677,6 +3768,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3732,6 +3835,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
return VM_FAULT_OOM;
}
@@ -147579,7 +147939,7 @@ index 19d0d08..9a1ad47 100644
idx = vma_hugecache_offset(h, vma, address);
diff --git a/mm/hugetlb_cgroup.c b/mm/hugetlb_cgroup.c
-index d8fb10d..1c74822 100644
+index eec1150..af03e3e 100644
--- a/mm/hugetlb_cgroup.c
+++ b/mm/hugetlb_cgroup.c
@@ -27,7 +27,6 @@ struct hugetlb_cgroup {
@@ -147590,7 +147950,7 @@ index d8fb10d..1c74822 100644
#define MEMFILE_IDX(val) (((val) >> 16) & 0xffff)
#define MEMFILE_ATTR(val) ((val) & 0xffff)
-@@ -238,14 +237,7 @@ void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,
+@@ -254,14 +253,7 @@ void hugetlb_cgroup_uncharge_cgroup(int idx, unsigned long nr_pages,
return;
}
@@ -147606,7 +147966,7 @@ index d8fb10d..1c74822 100644
struct cftype *cft)
{
struct page_counter *counter;
-@@ -269,7 +261,7 @@ static u64 hugetlb_cgroup_read_u64(struct cgroup_subsys_state *css,
+@@ -285,7 +277,7 @@ static u64 hugetlb_cgroup_read_u64(struct cgroup_subsys_state *css,
static DEFINE_MUTEX(hugetlb_limit_mutex);
@@ -147615,7 +147975,7 @@ index d8fb10d..1c74822 100644
char *buf, size_t nbytes, loff_t off)
{
int ret, idx;
-@@ -299,7 +291,7 @@ static ssize_t hugetlb_cgroup_write(struct kernfs_open_file *of,
+@@ -316,7 +308,7 @@ static ssize_t hugetlb_cgroup_write(struct kernfs_open_file *of,
return ret ?: nbytes;
}
@@ -147624,7 +147984,7 @@ index d8fb10d..1c74822 100644
char *buf, size_t nbytes, loff_t off)
{
int ret = 0;
-@@ -335,46 +327,26 @@ static char *mem_fmt(char *buf, int size, unsigned long hsize)
+@@ -352,46 +344,26 @@ static char *mem_fmt(char *buf, int size, unsigned long hsize)
static void __init __hugetlb_cgroup_file_init(int idx)
{
@@ -147685,10 +148045,10 @@ index d8fb10d..1c74822 100644
void __init hugetlb_cgroup_file_init(void)
diff --git a/mm/internal.h b/mm/internal.h
-index b79abb6..8b28234 100644
+index 2524ec8..635a56b 100644
--- a/mm/internal.h
+++ b/mm/internal.h
-@@ -147,6 +147,7 @@ static inline struct page *pageblock_pfn_to_page(unsigned long start_pfn,
+@@ -149,6 +149,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);
@@ -147696,7 +148056,7 @@ index b79abb6..8b28234 100644
extern void prep_compound_page(struct page *page, unsigned int order);
extern int user_min_free_kbytes;
-@@ -247,7 +248,7 @@ static inline bool is_exec_mapping(vm_flags_t flags)
+@@ -250,7 +251,7 @@ static inline bool is_exec_mapping(vm_flags_t flags)
*/
static inline bool is_stack_mapping(vm_flags_t flags)
{
@@ -147706,10 +148066,10 @@ index b79abb6..8b28234 100644
/*
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
-index e642992..b6128bc 100644
+index 04320d3..9646dbb 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
-@@ -365,7 +365,7 @@ static void print_unreferenced(struct seq_file *seq,
+@@ -367,7 +367,7 @@ static void print_unreferenced(struct seq_file *seq,
for (i = 0; i < object->trace_len; i++) {
void *ptr = (void *)object->trace[i];
@@ -147718,7 +148078,7 @@ index e642992..b6128bc 100644
}
}
-@@ -1955,7 +1955,7 @@ static int __init kmemleak_late_init(void)
+@@ -1957,7 +1957,7 @@ static int __init kmemleak_late_init(void)
return -ENOMEM;
}
@@ -147728,7 +148088,7 @@ index e642992..b6128bc 100644
if (!dentry)
pr_warn("Failed to create the debugfs kmemleak file\n");
diff --git a/mm/maccess.c b/mm/maccess.c
-index d159b1c..7655796 100644
+index 78f9274..5d8c2e02 100644
--- a/mm/maccess.c
+++ b/mm/maccess.c
@@ -28,12 +28,12 @@ long __probe_kernel_read(void *dst, const void *src, size_t size)
@@ -147763,7 +148123,7 @@ index d159b1c..7655796 100644
return ret ? -EFAULT : 0;
}
diff --git a/mm/madvise.c b/mm/madvise.c
-index 07427d3..05f1d57 100644
+index 93fb63e..0aa6448 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -56,6 +56,10 @@ static long madvise_behavior(struct vm_area_struct *vma,
@@ -147837,7 +148197,7 @@ index 07427d3..05f1d57 100644
if (end == start)
return error;
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
-index a2e79b8..66b4b808 100644
+index 5339c89..19e7895 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -723,7 +723,7 @@ static void memcg_check_events(struct mem_cgroup *memcg, struct page *page)
@@ -147849,7 +148209,7 @@ index a2e79b8..66b4b808 100644
#endif
}
}
-@@ -1352,7 +1352,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg)
+@@ -1375,7 +1375,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.
*/
@@ -147858,7 +148218,7 @@ index a2e79b8..66b4b808 100644
return;
if (atomic_inc_return(&memcg->numainfo_updating) > 1)
return;
-@@ -1366,7 +1366,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg)
+@@ -1389,7 +1389,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg)
node_clear(nid, memcg->scan_nodes);
}
@@ -147868,7 +148228,7 @@ index a2e79b8..66b4b808 100644
}
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
-index ca5acee..bee974a 100644
+index 2fcca6b..e30621e 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -64,7 +64,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0;
@@ -147881,7 +148241,7 @@ index ca5acee..bee974a 100644
#if defined(CONFIG_HWPOISON_INJECT) || defined(CONFIG_HWPOISON_INJECT_MODULE)
@@ -188,7 +188,7 @@ static int kill_proc(struct task_struct *t, unsigned long addr, int trapno,
- pfn, t->comm, t->pid);
+ pfn, t->comm, t->pid);
si.si_signo = SIGBUS;
si.si_errno = 0;
- si.si_addr = (void *)addr;
@@ -147889,7 +148249,7 @@ index ca5acee..bee974a 100644
#ifdef __ARCH_SI_TRAPNO
si.si_trapno = trapno;
#endif
-@@ -779,7 +779,7 @@ static struct page_state {
+@@ -781,7 +781,7 @@ static struct page_state {
unsigned long res;
enum mf_action_page_type type;
int (*action)(struct page *p, unsigned long pfn);
@@ -147899,10 +148259,10 @@ index ca5acee..bee974a 100644
/*
* free pages are specially detected outside this table:
diff --git a/mm/memory.c b/mm/memory.c
-index 07493e3..052aa0f 100644
+index 9e04681..30759a2 100644
--- a/mm/memory.c
+++ b/mm/memory.c
-@@ -417,6 +417,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
+@@ -418,6 +418,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);
@@ -147910,7 +148270,7 @@ index 07493e3..052aa0f 100644
start &= PUD_MASK;
if (start < floor)
return;
-@@ -432,6 +433,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
+@@ -433,6 +434,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);
@@ -147918,7 +148278,7 @@ index 07493e3..052aa0f 100644
}
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,
+@@ -452,6 +454,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);
@@ -147926,7 +148286,7 @@ index 07493e3..052aa0f 100644
start &= PGDIR_MASK;
if (start < floor)
return;
-@@ -465,6 +468,8 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
+@@ -466,6 +469,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);
@@ -147935,7 +148295,7 @@ index 07493e3..052aa0f 100644
}
/*
-@@ -683,7 +688,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
+@@ -684,7 +689,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
*/
@@ -147944,7 +148304,7 @@ index 07493e3..052aa0f 100644
vma->vm_file,
vma->vm_ops ? vma->vm_ops->fault : NULL,
vma->vm_file ? vma->vm_file->f_op->mmap : NULL,
-@@ -1481,6 +1486,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr,
+@@ -1482,6 +1487,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));
@@ -147955,7 +148315,7 @@ index 07493e3..052aa0f 100644
retval = 0;
pte_unmap_unlock(pte, ptl);
return retval;
-@@ -1525,9 +1534,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
+@@ -1526,9 +1535,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)) {
@@ -147977,7 +148337,7 @@ index 07493e3..052aa0f 100644
}
return insert_page(vma, addr, page, vma->vm_page_prot);
}
-@@ -1634,6 +1655,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
+@@ -1635,6 +1656,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
pfn_t pfn)
{
BUG_ON(!(vma->vm_flags & VM_MIXEDMAP));
@@ -147985,7 +148345,7 @@ index 07493e3..052aa0f 100644
if (addr < vma->vm_start || addr >= vma->vm_end)
return -EFAULT;
-@@ -1886,7 +1908,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
+@@ -1888,7 +1910,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
BUG_ON(pud_huge(*pud));
@@ -147996,7 +148356,7 @@ index 07493e3..052aa0f 100644
if (!pmd)
return -ENOMEM;
do {
-@@ -1906,7 +1930,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
+@@ -1908,7 +1932,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
unsigned long next;
int err;
@@ -148007,7 +148367,7 @@ index 07493e3..052aa0f 100644
if (!pud)
return -ENOMEM;
do {
-@@ -2104,6 +2130,196 @@ static inline int wp_page_reuse(struct mm_struct *mm,
+@@ -2106,6 +2132,196 @@ static inline int wp_page_reuse(struct mm_struct *mm,
return VM_FAULT_WRITE;
}
@@ -148204,7 +148564,7 @@ index 07493e3..052aa0f 100644
/*
* Handle the case of a page which we actually need to copy to a new page.
*
-@@ -2158,6 +2374,12 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2160,6 +2376,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))) {
@@ -148217,7 +148577,7 @@ index 07493e3..052aa0f 100644
if (old_page) {
if (!PageAnon(old_page)) {
dec_mm_counter_fast(mm,
-@@ -2213,6 +2435,10 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2215,6 +2437,10 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
page_remove_rmap(old_page, false);
}
@@ -148228,7 +148588,7 @@ index 07493e3..052aa0f 100644
/* Free the old page.. */
new_page = old_page;
page_copied = 1;
-@@ -2646,6 +2872,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2645,6 +2871,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);
@@ -148240,7 +148600,7 @@ index 07493e3..052aa0f 100644
unlock_page(page);
if (page != swapcache) {
/*
-@@ -2669,6 +2900,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2668,6 +2899,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);
@@ -148252,7 +148612,7 @@ index 07493e3..052aa0f 100644
unlock:
pte_unmap_unlock(page_table, ptl);
out:
-@@ -2688,40 +2924,6 @@ out_release:
+@@ -2687,40 +2923,6 @@ out_release:
}
/*
@@ -148293,7 +148653,7 @@ index 07493e3..052aa0f 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.
-@@ -2731,25 +2933,22 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2730,25 +2932,22 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned int flags)
{
struct mem_cgroup *memcg;
@@ -148325,7 +148685,7 @@ index 07493e3..052aa0f 100644
if (!pte_none(*page_table))
goto unlock;
/* Deliver the page fault to userland, check inside PT lock */
-@@ -2762,6 +2961,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2761,6 +2960,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
}
/* Allocate our own private page. */
@@ -148334,7 +148694,7 @@ index 07493e3..052aa0f 100644
if (unlikely(anon_vma_prepare(vma)))
goto oom;
page = alloc_zeroed_user_highpage_movable(vma, address);
-@@ -2795,6 +2996,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2794,6 +2995,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
VM_UFFD_MISSING);
}
@@ -148346,7 +148706,7 @@ index 07493e3..052aa0f 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);
-@@ -2804,6 +3010,12 @@ setpte:
+@@ -2803,6 +3009,12 @@ setpte:
/* No need to invalidate - it was non-present before */
update_mmu_cache(vma, address, page_table);
@@ -148359,7 +148719,7 @@ index 07493e3..052aa0f 100644
unlock:
pte_unmap_unlock(page_table, ptl);
return 0;
-@@ -3038,6 +3250,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3039,6 +3251,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);
@@ -148390,7 +148750,7 @@ index 07493e3..052aa0f 100644
mem_cgroup_commit_charge(new_page, memcg, false, false);
lru_cache_add_active_or_unevictable(new_page, vma);
pte_unmap_unlock(pte, ptl);
-@@ -3147,6 +3375,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3143,6 +3371,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);
@@ -148402,7 +148762,7 @@ index 07493e3..052aa0f 100644
pte_unmap_unlock(pte, ptl);
if (set_page_dirty(fault_page))
-@@ -3398,6 +3631,12 @@ static int handle_pte_fault(struct mm_struct *mm,
+@@ -3394,6 +3627,12 @@ static int handle_pte_fault(struct mm_struct *mm,
if (flags & FAULT_FLAG_WRITE)
flush_tlb_fix_spurious_fault(vma, address);
}
@@ -148415,7 +148775,7 @@ index 07493e3..052aa0f 100644
unlock:
pte_unmap_unlock(pte, ptl);
return 0;
-@@ -3417,6 +3656,10 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3413,6 +3652,10 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
pmd_t *pmd;
pte_t *pte;
@@ -148426,7 +148786,7 @@ index 07493e3..052aa0f 100644
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,
+@@ -3421,6 +3664,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);
@@ -148461,7 +148821,7 @@ index 07493e3..052aa0f 100644
pgd = pgd_offset(mm, address);
pud = pud_alloc(mm, pgd, address);
if (!pud)
-@@ -3557,6 +3828,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
+@@ -3553,6 +3824,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
@@ -148485,7 +148845,7 @@ index 07493e3..052aa0f 100644
#endif /* __PAGETABLE_PUD_FOLDED */
#ifndef __PAGETABLE_PMD_FOLDED
-@@ -3589,6 +3877,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
+@@ -3585,6 +3873,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
@@ -148518,7 +148878,7 @@ index 07493e3..052aa0f 100644
#endif /* __PAGETABLE_PMD_FOLDED */
static int __follow_pte(struct mm_struct *mm, unsigned long address,
-@@ -3698,8 +4012,8 @@ out:
+@@ -3694,8 +4008,8 @@ out:
return ret;
}
@@ -148529,7 +148889,7 @@ index 07493e3..052aa0f 100644
{
resource_size_t phys_addr;
unsigned long prot = 0;
-@@ -3725,8 +4039,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
+@@ -3721,8 +4035,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.
*/
@@ -148540,7 +148900,7 @@ index 07493e3..052aa0f 100644
{
struct vm_area_struct *vma;
void *old_buf = buf;
-@@ -3734,7 +4048,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3730,7 +4044,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) {
@@ -148549,7 +148909,7 @@ index 07493e3..052aa0f 100644
void *maddr;
struct page *page = NULL;
-@@ -3795,8 +4109,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3791,8 +4105,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
*
* The caller must hold a reference on @mm.
*/
@@ -148560,7 +148920,7 @@ index 07493e3..052aa0f 100644
{
return __access_remote_vm(NULL, mm, addr, buf, len, write);
}
-@@ -3806,11 +4120,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
+@@ -3802,11 +4116,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
*/
@@ -148576,10 +148936,10 @@ index 07493e3..052aa0f 100644
mm = get_task_mm(tsk);
if (!mm)
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
-index 36cc01b..d862cd8 100644
+index 297d685..388696f 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
-@@ -733,6 +733,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
+@@ -730,6 +730,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
unsigned long vmstart;
unsigned long vmend;
@@ -148590,7 +148950,7 @@ index 36cc01b..d862cd8 100644
vma = find_vma(mm, start);
if (!vma || vma->vm_start > start)
return -EFAULT;
-@@ -776,6 +780,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
+@@ -773,6 +777,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
err = vma_replace_policy(vma, new_pol);
if (err)
goto out;
@@ -148607,7 +148967,7 @@ index 36cc01b..d862cd8 100644
}
out:
-@@ -1191,6 +1205,17 @@ static long do_mbind(unsigned long start, unsigned long len,
+@@ -1188,6 +1202,17 @@ static long do_mbind(unsigned long start, unsigned long len,
if (end < start)
return -EINVAL;
@@ -148625,7 +148985,7 @@ index 36cc01b..d862cd8 100644
if (end == start)
return 0;
-@@ -1416,8 +1441,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1413,8 +1438,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) &&
@@ -148635,7 +148995,7 @@ index 36cc01b..d862cd8 100644
rcu_read_unlock();
err = -EPERM;
goto out_put;
-@@ -1448,6 +1472,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1445,6 +1469,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
goto out;
}
@@ -148652,10 +149012,10 @@ index 36cc01b..d862cd8 100644
capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE);
diff --git a/mm/migrate.c b/mm/migrate.c
-index bdf3410..d7158a8 100644
+index bd3fdc2..92133a0 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
-@@ -1526,8 +1526,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,
+@@ -1527,8 +1527,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) &&
@@ -148666,7 +149026,7 @@ index bdf3410..d7158a8 100644
err = -EPERM;
goto out;
diff --git a/mm/mlock.c b/mm/mlock.c
-index 96f0010..21004da 100644
+index ef8dc9f..3f4d230 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -14,6 +14,7 @@
@@ -148712,7 +149072,7 @@ index 96f0010..21004da 100644
newflags |= flags;
/* Here we know that vma->vm_start <= nstart < vma->vm_end. */
-@@ -640,6 +650,10 @@ static int do_mlock(unsigned long start, size_t len, vm_flags_t flags)
+@@ -641,6 +651,10 @@ static __must_check int do_mlock(unsigned long start, size_t len, vm_flags_t fla
locked += current->mm->locked_vm;
/* check against resource limits */
@@ -148723,7 +149083,7 @@ index 96f0010..21004da 100644
if ((locked <= lock_limit) || capable(CAP_IPC_LOCK))
error = apply_vma_lock_flags(start, len, flags);
-@@ -720,6 +734,11 @@ static int apply_mlockall_flags(int flags)
+@@ -722,6 +736,11 @@ static int apply_mlockall_flags(int flags)
for (vma = current->mm->mmap; vma ; vma = prev->vm_next) {
vm_flags_t newflags;
@@ -148735,13 +149095,10 @@ index 96f0010..21004da 100644
newflags = vma->vm_flags & VM_LOCKED_CLEAR_MASK;
newflags |= to_add;
-@@ -749,8 +768,12 @@ SYSCALL_DEFINE1(mlockall, int, flags)
- lock_limit >>= PAGE_SHIFT;
+@@ -754,6 +773,10 @@ SYSCALL_DEFINE1(mlockall, int, flags)
+ return -EINTR;
ret = -ENOMEM;
-- down_write(&current->mm->mmap_sem);
-
-+ down_write(&current->mm->mmap_sem);
+ if (current->mm->total_vm > (ULONG_MAX >> PAGE_SHIFT))
+ gr_learn_resource(current, RLIMIT_MEMLOCK, ULONG_MAX, 1);
+ else
@@ -148763,7 +149120,7 @@ index 5b72266..dc04ce5 100644
.priority = IPC_CALLBACK_PRI, /* use lowest priority */
};
diff --git a/mm/mmap.c b/mm/mmap.c
-index bd2e1a53..cbb2d1b 100644
+index de2c176..d5c0b5f 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -43,6 +43,7 @@
@@ -148774,8 +149131,8 @@ index bd2e1a53..cbb2d1b 100644
#include <asm/uaccess.h>
#include <asm/cacheflush.h>
-@@ -73,6 +74,16 @@ int mmap_rnd_compat_bits __read_mostly = CONFIG_ARCH_MMAP_RND_COMPAT_BITS;
- static bool ignore_rlimit_data = true;
+@@ -69,6 +70,16 @@ int mmap_rnd_compat_bits __read_mostly = CONFIG_ARCH_MMAP_RND_COMPAT_BITS;
+ static bool ignore_rlimit_data;
core_param(ignore_rlimit_data, ignore_rlimit_data, bool, 0644);
+static inline void verify_mm_writelocked(struct mm_struct *mm)
@@ -148791,7 +149148,7 @@ index bd2e1a53..cbb2d1b 100644
static void unmap_region(struct mm_struct *mm,
struct vm_area_struct *vma, struct vm_area_struct *prev,
unsigned long start, unsigned long end);
-@@ -92,16 +103,25 @@ static void unmap_region(struct mm_struct *mm,
+@@ -88,16 +99,25 @@ static void unmap_region(struct mm_struct *mm,
* x: (no) no x: (no) yes x: (no) yes x: (yes) yes
*
*/
@@ -148820,7 +149177,7 @@ index bd2e1a53..cbb2d1b 100644
}
EXPORT_SYMBOL(vm_get_page_prot);
-@@ -163,6 +183,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+@@ -159,6 +179,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
struct vm_area_struct *next = vma->vm_next;
might_sleep();
@@ -148828,7 +149185,7 @@ index bd2e1a53..cbb2d1b 100644
if (vma->vm_ops && vma->vm_ops->close)
vma->vm_ops->close(vma);
if (vma->vm_file)
-@@ -176,6 +197,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len);
+@@ -172,6 +193,7 @@ static int do_brk(unsigned long addr, unsigned long len);
SYSCALL_DEFINE1(brk, unsigned long, brk)
{
@@ -148836,7 +149193,7 @@ index bd2e1a53..cbb2d1b 100644
unsigned long retval;
unsigned long newbrk, oldbrk;
struct mm_struct *mm = current->mm;
-@@ -206,7 +228,13 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
+@@ -203,7 +225,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
*/
@@ -148851,7 +149208,7 @@ index bd2e1a53..cbb2d1b 100644
mm->end_data, mm->start_data))
goto out;
-@@ -871,6 +899,12 @@ can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
+@@ -868,6 +896,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)
{
@@ -148864,7 +149221,7 @@ index bd2e1a53..cbb2d1b 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)
-@@ -892,6 +926,12 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
+@@ -889,6 +923,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)
{
@@ -148877,7 +149234,7 @@ index bd2e1a53..cbb2d1b 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;
-@@ -942,6 +982,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -939,6 +979,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
struct vm_area_struct *area, *next;
int err;
@@ -148891,7 +149248,7 @@ index bd2e1a53..cbb2d1b 100644
/*
* We later require that vma->vm_flags == vm_flags,
* so this tests vma->vm_flags & VM_SPECIAL, too.
-@@ -957,6 +1004,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -954,6 +1001,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;
@@ -148907,7 +149264,7 @@ index bd2e1a53..cbb2d1b 100644
/*
* Can it merge with the predecessor?
*/
-@@ -979,9 +1035,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -976,9 +1032,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);
@@ -148933,7 +149290,7 @@ index bd2e1a53..cbb2d1b 100644
if (err)
return NULL;
khugepaged_enter_vma_merge(prev, vm_flags);
-@@ -996,12 +1067,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -993,12 +1064,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)) {
@@ -148963,7 +149320,7 @@ index bd2e1a53..cbb2d1b 100644
if (err)
return NULL;
khugepaged_enter_vma_merge(area, vm_flags);
-@@ -1131,6 +1217,10 @@ static inline int mlock_future_check(struct mm_struct *mm,
+@@ -1128,6 +1214,10 @@ static inline int mlock_future_check(struct mm_struct *mm,
locked += mm->locked_vm;
lock_limit = rlimit(RLIMIT_MEMLOCK);
lock_limit >>= PAGE_SHIFT;
@@ -148974,7 +149331,7 @@ index bd2e1a53..cbb2d1b 100644
if (locked > lock_limit && !capable(CAP_IPC_LOCK))
return -EAGAIN;
}
-@@ -1159,7 +1249,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1156,7 +1246,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.)
*/
@@ -148983,7 +149340,7 @@ index bd2e1a53..cbb2d1b 100644
if (!(file && path_noexec(&file->f_path)))
prot |= PROT_EXEC;
-@@ -1182,7 +1272,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1179,7 +1269,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.
*/
@@ -148992,7 +149349,7 @@ index bd2e1a53..cbb2d1b 100644
if (offset_in_page(addr))
return addr;
-@@ -1199,6 +1289,43 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1196,6 +1286,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;
@@ -149036,7 +149393,7 @@ index bd2e1a53..cbb2d1b 100644
if (flags & MAP_LOCKED)
if (!can_do_mlock())
return -EPERM;
-@@ -1286,6 +1413,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1283,6 +1410,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
vm_flags |= VM_NORESERVE;
}
@@ -149046,7 +149403,7 @@ index bd2e1a53..cbb2d1b 100644
addr = mmap_region(file, addr, len, vm_flags, pgoff);
if (!IS_ERR_VALUE(addr) &&
((vm_flags & VM_LOCKED) ||
-@@ -1379,7 +1509,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma)
+@@ -1376,7 +1506,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 */
@@ -149055,7 +149412,7 @@ index bd2e1a53..cbb2d1b 100644
return 0;
/* The backer wishes to know when pages are first written to? */
-@@ -1430,7 +1560,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1427,7 +1557,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
struct rb_node **rb_link, *rb_parent;
unsigned long charged = 0;
@@ -149078,7 +149435,7 @@ index bd2e1a53..cbb2d1b 100644
if (!may_expand_vm(mm, vm_flags, len >> PAGE_SHIFT)) {
unsigned long nr_pages;
-@@ -1450,6 +1595,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1447,6 +1592,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
&rb_parent)) {
if (do_munmap(mm, addr, len))
return -ENOMEM;
@@ -149086,7 +149443,7 @@ index bd2e1a53..cbb2d1b 100644
}
/*
-@@ -1481,6 +1627,16 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1478,6 +1624,16 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
goto unacct_error;
}
@@ -149103,7 +149460,7 @@ index bd2e1a53..cbb2d1b 100644
vma->vm_mm = mm;
vma->vm_start = addr;
vma->vm_end = addr + len;
-@@ -1511,6 +1667,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1508,6 +1664,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
if (error)
goto unmap_and_free_vma;
@@ -149117,7 +149474,7 @@ index bd2e1a53..cbb2d1b 100644
/* Can addr have changed??
*
* Answer: Yes, several device drivers can do it in their
-@@ -1529,6 +1692,12 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1526,6 +1689,12 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
}
vma_link(mm, vma, prev, rb_link, rb_parent);
@@ -149130,7 +149487,7 @@ index bd2e1a53..cbb2d1b 100644
/* Once vma denies write, undo our temporary denial count */
if (file) {
if (vm_flags & VM_SHARED)
-@@ -1541,6 +1710,7 @@ out:
+@@ -1538,6 +1707,7 @@ out:
perf_event_mmap(vma);
vm_stat_account(mm, vm_flags, len >> PAGE_SHIFT);
@@ -149138,7 +149495,7 @@ index bd2e1a53..cbb2d1b 100644
if (vm_flags & VM_LOCKED) {
if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) ||
vma == get_gate_vma(current->mm)))
-@@ -1578,6 +1748,12 @@ allow_write_and_free_vma:
+@@ -1575,6 +1745,12 @@ allow_write_and_free_vma:
if (vm_flags & VM_DENYWRITE)
allow_write_access(file);
free_vma:
@@ -149151,7 +149508,7 @@ index bd2e1a53..cbb2d1b 100644
kmem_cache_free(vm_area_cachep, vma);
unacct_error:
if (charged)
-@@ -1585,7 +1761,54 @@ unacct_error:
+@@ -1582,7 +1758,54 @@ unacct_error:
return error;
}
@@ -149207,7 +149564,7 @@ index bd2e1a53..cbb2d1b 100644
{
/*
* We implement the search by looking for an rbtree node that
-@@ -1633,11 +1856,20 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
+@@ -1630,11 +1853,20 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
}
}
@@ -149218,18 +149575,18 @@ index bd2e1a53..cbb2d1b 100644
if (gap_start > high_limit)
return -ENOMEM;
+
++ gap_start += skip_heap_stack_gap(vma->vm_prev, VM_GROWSUP, gap_start, gap_end);
++ gap_end -= skip_heap_stack_gap(vma, VM_GROWSDOWN, gap_start, gap_end);
++
+ if (gap_end - gap_start > info->threadstack_offset)
+ gap_start += info->threadstack_offset;
+ else
+ gap_start = gap_end;
+
-+ gap_start += skip_heap_stack_gap(vma->vm_prev, VM_GROWSUP, gap_start, gap_end);
-+ gap_end -= skip_heap_stack_gap(vma, VM_GROWSDOWN, gap_start, gap_end);
-+
if (gap_end >= low_limit && gap_end - gap_start >= length)
goto found;
-@@ -1687,7 +1919,7 @@ found:
+@@ -1684,7 +1916,7 @@ found:
return gap_start;
}
@@ -149238,23 +149595,23 @@ index bd2e1a53..cbb2d1b 100644
{
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
-@@ -1741,6 +1973,15 @@ check_current:
+@@ -1738,6 +1970,15 @@ check_current:
gap_end = vma->vm_start;
if (gap_end < low_limit)
return -ENOMEM;
+
++ gap_start += skip_heap_stack_gap(vma->vm_prev, VM_GROWSUP, gap_start, gap_end);
++ gap_end -= skip_heap_stack_gap(vma, VM_GROWSDOWN, gap_start, gap_end);
++
+ if (gap_end - gap_start > info->threadstack_offset)
+ gap_end -= info->threadstack_offset;
+ else
+ gap_end = gap_start;
+
-+ gap_start += skip_heap_stack_gap(vma->vm_prev, VM_GROWSUP, gap_start, gap_end);
-+ gap_end -= skip_heap_stack_gap(vma, VM_GROWSDOWN, gap_start, gap_end);
-+
if (gap_start <= high_limit && gap_end - gap_start >= length)
goto found;
-@@ -1804,6 +2045,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1801,6 +2042,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;
@@ -149262,7 +149619,7 @@ index bd2e1a53..cbb2d1b 100644
if (len > TASK_SIZE - mmap_min_addr)
return -ENOMEM;
-@@ -1811,11 +2053,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1808,11 +2050,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
if (flags & MAP_FIXED)
return addr;
@@ -149279,7 +149636,7 @@ index bd2e1a53..cbb2d1b 100644
return addr;
}
-@@ -1824,6 +2070,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1821,6 +2067,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;
@@ -149287,7 +149644,7 @@ index bd2e1a53..cbb2d1b 100644
return vm_unmapped_area(&info);
}
#endif
-@@ -1842,6 +2089,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1839,6 +2086,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;
@@ -149295,7 +149652,7 @@ index bd2e1a53..cbb2d1b 100644
/* requested length too big for entire address space */
if (len > TASK_SIZE - mmap_min_addr)
-@@ -1850,12 +2098,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1847,12 +2095,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
if (flags & MAP_FIXED)
return addr;
@@ -149313,7 +149670,7 @@ index bd2e1a53..cbb2d1b 100644
return addr;
}
-@@ -1864,6 +2116,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1861,6 +2113,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;
@@ -149321,7 +149678,7 @@ index bd2e1a53..cbb2d1b 100644
addr = vm_unmapped_area(&info);
/*
-@@ -1876,6 +2129,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1873,6 +2126,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;
@@ -149334,7 +149691,7 @@ index bd2e1a53..cbb2d1b 100644
info.high_limit = TASK_SIZE;
addr = vm_unmapped_area(&info);
}
-@@ -1975,6 +2234,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
+@@ -1971,6 +2230,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
return vma;
}
@@ -149363,7 +149720,7 @@ index bd2e1a53..cbb2d1b 100644
/*
* Verify that the stack growth is acceptable and
* update accounting. This is shared with both the
-@@ -1992,8 +2273,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -1988,8 +2269,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
/* Stack limit test */
actual_size = size;
@@ -149373,7 +149730,7 @@ index bd2e1a53..cbb2d1b 100644
if (actual_size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur))
return -ENOMEM;
-@@ -2004,6 +2284,10 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2000,6 +2280,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;
@@ -149384,7 +149741,7 @@ index bd2e1a53..cbb2d1b 100644
if (locked > limit && !capable(CAP_IPC_LOCK))
return -ENOMEM;
}
-@@ -2029,17 +2313,21 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2025,17 +2309,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.
*/
@@ -149408,7 +149765,7 @@ index bd2e1a53..cbb2d1b 100644
else
return -ENOMEM;
-@@ -2047,15 +2335,24 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
+@@ -2043,15 +2331,24 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
if (unlikely(anon_vma_prepare(vma)))
return -ENOMEM;
@@ -149435,7 +149792,7 @@ index bd2e1a53..cbb2d1b 100644
unsigned long size, grow;
size = address - vma->vm_start;
-@@ -2093,6 +2390,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
+@@ -2089,6 +2386,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
}
}
}
@@ -149444,7 +149801,7 @@ index bd2e1a53..cbb2d1b 100644
anon_vma_unlock_write(vma->anon_vma);
khugepaged_enter_vma_merge(vma, vma->vm_flags);
validate_mm(mm);
-@@ -2108,6 +2407,8 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2104,6 +2403,8 @@ int expand_downwards(struct vm_area_struct *vma,
{
struct mm_struct *mm = vma->vm_mm;
int error;
@@ -149453,7 +149810,7 @@ index bd2e1a53..cbb2d1b 100644
address &= PAGE_MASK;
error = security_mmap_addr(address);
-@@ -2118,6 +2419,15 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2114,6 +2415,15 @@ int expand_downwards(struct vm_area_struct *vma,
if (unlikely(anon_vma_prepare(vma)))
return -ENOMEM;
@@ -149469,7 +149826,7 @@ index bd2e1a53..cbb2d1b 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
-@@ -2126,9 +2436,17 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2122,9 +2432,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 */
@@ -149488,7 +149845,7 @@ index bd2e1a53..cbb2d1b 100644
size = vma->vm_end - address;
grow = (vma->vm_start - address) >> PAGE_SHIFT;
-@@ -2156,13 +2474,27 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2152,13 +2470,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);
@@ -149516,7 +149873,7 @@ index bd2e1a53..cbb2d1b 100644
khugepaged_enter_vma_merge(vma, vma->vm_flags);
validate_mm(mm);
return error;
-@@ -2262,6 +2594,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2258,6 +2590,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
do {
long nrpages = vma_pages(vma);
@@ -149530,7 +149887,7 @@ index bd2e1a53..cbb2d1b 100644
if (vma->vm_flags & VM_ACCOUNT)
nr_accounted += nrpages;
vm_stat_account(mm, vma->vm_flags, -nrpages);
-@@ -2306,6 +2645,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2302,6 +2641,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 {
@@ -149547,7 +149904,7 @@ index bd2e1a53..cbb2d1b 100644
vma_rb_erase(vma, &mm->mm_rb);
mm->map_count--;
tail_vma = vma;
-@@ -2333,14 +2682,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2329,14 +2678,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
struct vm_area_struct *new;
int err;
@@ -149581,7 +149938,7 @@ index bd2e1a53..cbb2d1b 100644
/* most fields are the same, copy all, and then fixup */
*new = *vma;
-@@ -2353,6 +2721,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2349,6 +2717,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);
}
@@ -149604,7 +149961,7 @@ index bd2e1a53..cbb2d1b 100644
err = vma_dup_policy(vma, new);
if (err)
goto out_free_vma;
-@@ -2373,6 +2757,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2369,6 +2753,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);
@@ -149643,7 +150000,7 @@ index bd2e1a53..cbb2d1b 100644
/* Success. */
if (!err)
return 0;
-@@ -2382,10 +2798,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2378,10 +2794,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);
@@ -149663,7 +150020,7 @@ index bd2e1a53..cbb2d1b 100644
kmem_cache_free(vm_area_cachep, new);
return err;
}
-@@ -2397,6 +2821,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2393,6 +2817,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)
{
@@ -149679,7 +150036,7 @@ index bd2e1a53..cbb2d1b 100644
if (mm->map_count >= sysctl_max_map_count)
return -ENOMEM;
-@@ -2408,11 +2841,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2404,11 +2837,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
* work. This now handles partial unmappings.
* Jeremy Fitzhardinge <jeremy@goop.org>
*/
@@ -149710,7 +150067,7 @@ index bd2e1a53..cbb2d1b 100644
if ((offset_in_page(start)) || start > TASK_SIZE || len > TASK_SIZE-start)
return -EINVAL;
-@@ -2490,6 +2942,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
+@@ -2486,6 +2938,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);
@@ -149719,7 +150076,7 @@ index bd2e1a53..cbb2d1b 100644
return 0;
}
-@@ -2498,6 +2952,12 @@ int vm_munmap(unsigned long start, size_t len)
+@@ -2494,6 +2948,12 @@ int vm_munmap(unsigned long start, size_t len)
int ret;
struct mm_struct *mm = current->mm;
@@ -149729,11 +150086,11 @@ index bd2e1a53..cbb2d1b 100644
+ return -EINVAL;
+#endif
+
- down_write(&mm->mmap_sem);
- ret = do_munmap(mm, start, len);
- up_write(&mm->mmap_sem);
-@@ -2543,6 +3003,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
- down_write(&mm->mmap_sem);
+ if (down_write_killable(&mm->mmap_sem))
+ return -EINTR;
+
+@@ -2550,6 +3010,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+
vma = find_vma(mm, start);
+#ifdef CONFIG_PAX_SEGMEXEC
@@ -149744,7 +150101,7 @@ index bd2e1a53..cbb2d1b 100644
if (!vma || !(vma->vm_flags & VM_SHARED))
goto out;
-@@ -2603,16 +3068,6 @@ out:
+@@ -2610,16 +3075,6 @@ out:
return ret;
}
@@ -149761,7 +150118,7 @@ index bd2e1a53..cbb2d1b 100644
/*
* this is really a simplified "do_mmap". it only handles
* anonymous maps. eventually we may be able to do some
-@@ -2626,6 +3081,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2633,6 +3088,7 @@ static int do_brk(unsigned long addr, unsigned long len)
struct rb_node **rb_link, *rb_parent;
pgoff_t pgoff = addr >> PAGE_SHIFT;
int error;
@@ -149769,7 +150126,7 @@ index bd2e1a53..cbb2d1b 100644
len = PAGE_ALIGN(len);
if (!len)
-@@ -2633,10 +3089,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2640,10 +3096,24 @@ static int do_brk(unsigned long addr, unsigned long len)
flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
@@ -149794,7 +150151,7 @@ index bd2e1a53..cbb2d1b 100644
error = mlock_future_check(mm, mm->def_flags, len);
if (error)
return error;
-@@ -2654,16 +3124,17 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2661,16 +3131,17 @@ static int do_brk(unsigned long addr, unsigned long len)
&rb_parent)) {
if (do_munmap(mm, addr, len))
return -ENOMEM;
@@ -149814,7 +150171,7 @@ index bd2e1a53..cbb2d1b 100644
return -ENOMEM;
/* Can we just expand an old private anonymous mapping? */
-@@ -2677,7 +3148,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2684,7 +3155,7 @@ static int do_brk(unsigned long addr, unsigned long len)
*/
vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
if (!vma) {
@@ -149823,7 +150180,7 @@ index bd2e1a53..cbb2d1b 100644
return -ENOMEM;
}
-@@ -2691,11 +3162,12 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2698,11 +3169,12 @@ static int do_brk(unsigned long addr, unsigned long len)
vma_link(mm, vma, prev, rb_link, rb_parent);
out:
perf_event_mmap(vma);
@@ -149836,10 +150193,10 @@ index bd2e1a53..cbb2d1b 100644
+ mm->locked_vm += charged;
vma->vm_flags |= VM_SOFTDIRTY;
+ track_exec_limit(mm, addr, addr + len, flags);
- return addr;
+ return 0;
}
-@@ -2757,6 +3229,7 @@ void exit_mmap(struct mm_struct *mm)
+@@ -2766,6 +3238,7 @@ void exit_mmap(struct mm_struct *mm)
while (vma) {
if (vma->vm_flags & VM_ACCOUNT)
nr_accounted += vma_pages(vma);
@@ -149847,7 +150204,7 @@ index bd2e1a53..cbb2d1b 100644
vma = remove_vma(vma);
}
vm_unacct_memory(nr_accounted);
-@@ -2771,6 +3244,10 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2780,6 +3253,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;
@@ -149858,7 +150215,7 @@ index bd2e1a53..cbb2d1b 100644
if (find_vma_links(mm, vma->vm_start, vma->vm_end,
&prev, &rb_link, &rb_parent))
return -ENOMEM;
-@@ -2778,6 +3255,9 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2787,6 +3264,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;
@@ -149868,7 +150225,7 @@ index bd2e1a53..cbb2d1b 100644
/*
* The vm_pgoff of a purely anonymous vma should be irrelevant
* until its first write fault, when page's anon_vma and index
-@@ -2795,7 +3275,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2804,7 +3284,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
vma->vm_pgoff = vma->vm_start >> PAGE_SHIFT;
}
@@ -149890,7 +150247,7 @@ index bd2e1a53..cbb2d1b 100644
return 0;
}
-@@ -2814,6 +3308,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -2823,6 +3317,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;
@@ -149899,7 +150256,7 @@ index bd2e1a53..cbb2d1b 100644
/*
* If anonymous vma has not yet been faulted, update new pgoff
* to match new location, to increase its chance of merging.
-@@ -2880,24 +3376,67 @@ out:
+@@ -2889,27 +3385,70 @@ out:
return NULL;
}
@@ -149952,30 +150309,37 @@ index bd2e1a53..cbb2d1b 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",
+- /* Workaround for Valgrind */
+- if (rlimit(RLIMIT_DATA) == 0 &&
+- mm->data_vm + npages <= rlimit_max(RLIMIT_DATA) >> PAGE_SHIFT)
+- return true;
+- if (!ignore_rlimit_data) {
+- pr_warn_once("%s (%d): VmData %lu exceed data ulimit %lu. Update limits or use boot option ignore_rlimit_data.\n",
- current->comm, current->pid,
- (mm->data_vm + npages) << PAGE_SHIFT,
- rlimit(RLIMIT_DATA));
+- return false;
+ if (is_data_mapping(flags)) {
+ if ((mm->data_vm + npages) > (ULONG_MAX >> PAGE_SHIFT))
+ gr_learn_resource(current, RLIMIT_DATA, ULONG_MAX, 1);
- else
-- return false;
++ else
+ 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",
++ /* Workaround for Valgrind */
++ if (rlimit(RLIMIT_DATA) == 0 &&
++ mm->data_vm + npages <= rlimit_max(RLIMIT_DATA) >> PAGE_SHIFT)
++ return true;
++ if (!ignore_rlimit_data) {
++ pr_warn_once("%s (%d): VmData %lu exceed data ulimit %lu. Update limits or use boot option ignore_rlimit_data.\n",
+ current->comm, current->pid,
+ (mm->data_vm + npages) << PAGE_SHIFT,
+ rlimit(RLIMIT_DATA));
-+ else
+ return false;
-+ }
++ }
+ }
}
- return true;
-@@ -2905,6 +3444,11 @@ bool may_expand_vm(struct mm_struct *mm, vm_flags_t flags, unsigned long npages)
+@@ -2918,6 +3457,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)
{
@@ -149987,7 +150351,7 @@ index bd2e1a53..cbb2d1b 100644
mm->total_vm += npages;
if (is_exec_mapping(flags))
-@@ -2989,6 +3533,22 @@ static struct vm_area_struct *__install_special_mapping(
+@@ -3002,6 +3546,22 @@ static struct vm_area_struct *__install_special_mapping(
vma->vm_start = addr;
vma->vm_end = addr + len;
@@ -150011,7 +150375,7 @@ index bd2e1a53..cbb2d1b 100644
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
diff --git a/mm/mprotect.c b/mm/mprotect.c
-index b650c54..a3f3ca4 100644
+index 5019a1e..dc47d47 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -25,10 +25,18 @@
@@ -150202,7 +150566,7 @@ index b650c54..a3f3ca4 100644
if (!arch_validate_prot(prot))
return -EINVAL;
-@@ -406,6 +533,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -407,6 +534,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
if (start > vma->vm_start)
prev = vma;
@@ -150214,7 +150578,7 @@ index b650c54..a3f3ca4 100644
for (nstart = start ; ; ) {
unsigned long newflags;
int pkey = arch_override_mprotect_pkey(vma, prot, -1);
-@@ -421,6 +553,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -422,6 +554,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)) {
@@ -150229,7 +150593,7 @@ index b650c54..a3f3ca4 100644
error = -EACCES;
goto out;
}
-@@ -435,6 +575,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -436,6 +576,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
error = mprotect_fixup(vma, &prev, nstart, tmp, newflags);
if (error)
goto out;
@@ -150240,10 +150604,10 @@ index b650c54..a3f3ca4 100644
if (nstart < prev->vm_end)
diff --git a/mm/mremap.c b/mm/mremap.c
-index 3fa0a467..a4eab87 100644
+index 1f157ad..2a28e4a 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
-@@ -142,6 +142,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd,
+@@ -148,6 +148,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);
@@ -150256,7 +150620,7 @@ index 3fa0a467..a4eab87 100644
pte = move_soft_dirty_pte(pte);
set_pte_at(mm, new_addr, new_pte, pte);
}
-@@ -357,6 +363,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
+@@ -358,6 +364,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
if (is_vm_hugetlb_page(vma))
return ERR_PTR(-EINVAL);
@@ -150268,7 +150632,7 @@ index 3fa0a467..a4eab87 100644
/* We can't remap across vm area boundaries */
if (old_len > vma->vm_end - addr)
return ERR_PTR(-EFAULT);
-@@ -404,11 +415,19 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
+@@ -405,11 +416,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;
@@ -150289,7 +150653,7 @@ index 3fa0a467..a4eab87 100644
goto out;
/* Ensure the old/new locations do not overlap */
-@@ -481,6 +500,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -482,6 +501,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
unsigned long ret = -EINVAL;
unsigned long charged = 0;
bool locked = false;
@@ -150297,7 +150661,7 @@ index 3fa0a467..a4eab87 100644
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
return ret;
-@@ -502,6 +522,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -503,6 +523,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
if (!new_len)
return ret;
@@ -150312,10 +150676,10 @@ index 3fa0a467..a4eab87 100644
+ old_len > pax_task_size || addr > pax_task_size-old_len)
+ return ret;
+
- down_write(&current->mm->mmap_sem);
+ if (down_write_killable(&current->mm->mmap_sem))
+ return -EINTR;
- if (flags & MREMAP_FIXED) {
-@@ -552,6 +583,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -554,6 +585,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
new_addr = addr;
}
ret = addr;
@@ -150323,7 +150687,7 @@ index 3fa0a467..a4eab87 100644
goto out;
}
}
-@@ -575,7 +607,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -577,7 +609,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
goto out;
}
@@ -150337,7 +150701,7 @@ index 3fa0a467..a4eab87 100644
out:
if (offset_in_page(ret)) {
diff --git a/mm/nommu.c b/mm/nommu.c
-index c8bd59a..82b24ab 100644
+index c2e588802..b5a0b40 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -48,7 +48,6 @@ unsigned long max_mapnr;
@@ -150404,10 +150768,10 @@ index c8bd59a..82b24ab 100644
struct mm_struct *mm;
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
-index e389f0a..2dfc34c 100644
+index e248194..ff005a8 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
-@@ -873,7 +873,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
+@@ -877,7 +877,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
* card's wb_dirty may rush to many times higher than wb_setpoint.
* - the wb dirty thresh drops quickly due to change of JBOD workload
*/
@@ -150417,7 +150781,7 @@ index e389f0a..2dfc34c 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 898fe3f..78ad9e4 100644
+index 8b3e134..d47200a 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -63,6 +63,7 @@
@@ -150428,7 +150792,7 @@ index 898fe3f..78ad9e4 100644
#include <asm/sections.h>
#include <asm/tlbflush.h>
-@@ -593,7 +594,7 @@ static inline void clear_page_guard(struct zone *zone, struct page *page,
+@@ -688,7 +689,7 @@ static inline void clear_page_guard(struct zone *zone, struct page *page,
__mod_zone_freepage_state(zone, (1 << order), migratetype);
}
#else
@@ -150437,18 +150801,18 @@ index 898fe3f..78ad9e4 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,
-@@ -1027,6 +1028,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
- bool compound = PageCompound(page);
- int i, bad = 0;
+@@ -991,6 +992,10 @@ static __always_inline bool free_pages_prepare(struct page *page,
+ {
+ int bad = 0;
+#ifdef CONFIG_PAX_MEMORY_SANITIZE
+ unsigned long index = 1UL << order;
+#endif
+
VM_BUG_ON_PAGE(PageTail(page), page);
- VM_BUG_ON_PAGE(compound && compound_order(page) != order, page);
-@@ -1053,6 +1058,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
+ trace_mm_page_free(page, order);
+@@ -1033,6 +1038,12 @@ static __always_inline bool free_pages_prepare(struct page *page,
debug_check_no_obj_freed(page_address(page),
PAGE_SIZE << order);
}
@@ -150461,7 +150825,7 @@ index 898fe3f..78ad9e4 100644
arch_free_page(page, order);
kernel_poison_pages(page, 1 << order, 0);
kernel_map_pages(page, 1 << order, 0);
-@@ -1076,6 +1087,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
+@@ -1242,6 +1253,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
local_irq_restore(flags);
}
@@ -150479,10 +150843,10 @@ index 898fe3f..78ad9e4 100644
+EXPORT_SYMBOL(latent_entropy);
+#endif
+
- static void __init __free_pages_boot_core(struct page *page,
- unsigned long pfn, unsigned int order)
+ static void __init __free_pages_boot_core(struct page *page, unsigned int order)
{
-@@ -1092,6 +1117,21 @@ static void __init __free_pages_boot_core(struct page *page,
+ unsigned int nr_pages = 1 << order;
+@@ -1257,6 +1282,21 @@ static void __init __free_pages_boot_core(struct page *page, unsigned int order)
__ClearPageReserved(p);
set_page_count(p, 0);
@@ -150504,7 +150868,7 @@ index 898fe3f..78ad9e4 100644
page_zone(page)->managed_pages += nr_pages;
set_page_refcounted(page);
__free_pages(page, order);
-@@ -1148,7 +1188,6 @@ static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node,
+@@ -1313,7 +1353,6 @@ static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node,
}
#endif
@@ -150512,7 +150876,7 @@ index 898fe3f..78ad9e4 100644
void __init __free_pages_bootmem(struct page *page, unsigned long pfn,
unsigned int order)
{
-@@ -1512,8 +1551,8 @@ static inline int check_new_page(struct page *page)
+@@ -1686,8 +1725,8 @@ static inline int check_new_page(struct page *page)
static inline bool free_pages_prezeroed(bool poisoned)
{
@@ -150522,11 +150886,11 @@ index 898fe3f..78ad9e4 100644
+ (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,
+ #ifdef CONFIG_DEBUG_VM
+@@ -1732,8 +1771,12 @@ static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags
+
+ for (i = 0; i < (1 << order); i++) {
struct page *p = page + i;
- if (unlikely(check_new_page(p)))
- return 1;
+
+#ifndef CONFIG_PAX_MEMORY_SANITIZE
if (poisoned)
@@ -150536,7 +150900,7 @@ index 898fe3f..78ad9e4 100644
}
set_page_private(page, 0);
-@@ -2074,8 +2117,9 @@ static void drain_pages(unsigned int cpu)
+@@ -2281,8 +2324,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.
*/
@@ -150547,7 +150911,7 @@ index 898fe3f..78ad9e4 100644
int cpu = smp_processor_id();
if (zone)
-@@ -2135,8 +2179,7 @@ void drain_all_pages(struct zone *zone)
+@@ -2342,8 +2386,7 @@ void drain_all_pages(struct zone *zone)
else
cpumask_clear_cpu(cpu, &cpus_with_pcps);
}
@@ -150557,16 +150921,16 @@ index 898fe3f..78ad9e4 100644
}
#ifdef CONFIG_HIBERNATION
-@@ -2400,7 +2443,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
+@@ -2649,7 +2692,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
+ get_pcppage_migratetype(page));
}
- __mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order));
- if (atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
+ if (atomic_long_read_unchecked(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
!test_bit(ZONE_FAIR_DEPLETED, &zone->flags))
set_bit(ZONE_FAIR_DEPLETED, &zone->flags);
-@@ -2617,7 +2660,7 @@ static void reset_alloc_batches(struct zone *preferred_zone)
+@@ -2892,7 +2935,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) -
@@ -150575,7 +150939,7 @@ index 898fe3f..78ad9e4 100644
clear_bit(ZONE_FAIR_DEPLETED, &zone->flags);
} while (zone++ != preferred_zone);
}
-@@ -6371,7 +6414,7 @@ static void __setup_per_zone_wmarks(void)
+@@ -6858,7 +6901,7 @@ static void __setup_per_zone_wmarks(void)
__mod_zone_page_state(zone, NR_ALLOC_BATCH,
high_wmark_pages(zone) - low_wmark_pages(zone) -
@@ -150662,7 +151026,7 @@ index 40be3ae..0d20d87 100644
struct page *page;
int ret = 0;
diff --git a/mm/rmap.c b/mm/rmap.c
-index 3ebf9c4..ec385cd 100644
+index 701b93f..8fda494 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -172,6 +172,10 @@ int anon_vma_prepare(struct vm_area_struct *vma)
@@ -150766,7 +151130,7 @@ index 3ebf9c4..ec385cd 100644
/*
diff --git a/mm/shmem.c b/mm/shmem.c
-index 9ca09f5..448e8b3 100644
+index 171dee7..a05d96f 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -33,7 +33,7 @@
@@ -150787,16 +151151,17 @@ index 9ca09f5..448e8b3 100644
/*
* shmem_fallocate communicates with shmem_fault or shmem_writepage via
-@@ -2667,6 +2667,23 @@ static int shmem_xattr_handler_set(const struct xattr_handler *handler,
+@@ -2657,6 +2657,24 @@ static int shmem_xattr_handler_set(const struct xattr_handler *handler,
return simple_xattr_set(&info->xattrs, name, value, size, flags);
}
+#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
+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)
++ struct dentry *dentry, struct inode *inode,
++ const char *name, const void *value,
++ size_t size, int flags)
+{
-+ struct shmem_inode_info *info = SHMEM_I(d_inode(dentry));
++ struct shmem_inode_info *info = SHMEM_I(inode);
+
+ if (strcmp(name, XATTR_NAME_PAX_FLAGS))
+ return -EOPNOTSUPP;
@@ -150811,7 +151176,7 @@ index 9ca09f5..448e8b3 100644
static const struct xattr_handler shmem_security_xattr_handler = {
.prefix = XATTR_SECURITY_PREFIX,
.get = shmem_xattr_handler_get,
-@@ -2679,6 +2696,14 @@ static const struct xattr_handler shmem_trusted_xattr_handler = {
+@@ -2669,6 +2687,14 @@ static const struct xattr_handler shmem_trusted_xattr_handler = {
.set = shmem_xattr_handler_set,
};
@@ -150826,7 +151191,7 @@ index 9ca09f5..448e8b3 100644
static const struct xattr_handler *shmem_xattr_handlers[] = {
#ifdef CONFIG_TMPFS_POSIX_ACL
&posix_acl_access_xattr_handler,
-@@ -2686,6 +2711,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = {
+@@ -2676,6 +2702,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = {
#endif
&shmem_security_xattr_handler,
&shmem_trusted_xattr_handler,
@@ -150838,7 +151203,7 @@ index 9ca09f5..448e8b3 100644
NULL
};
-@@ -3046,8 +3076,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent)
+@@ -3036,8 +3067,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 */
@@ -150849,7 +151214,7 @@ index 9ca09f5..448e8b3 100644
return -ENOMEM;
diff --git a/mm/slab.c b/mm/slab.c
-index 17e2848..15840f7 100644
+index cc8bbc1..e42f74a 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -116,6 +116,7 @@
@@ -150860,7 +151225,7 @@ index 17e2848..15840f7 100644
#include <net/sock.h>
-@@ -279,10 +280,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
+@@ -284,10 +285,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
if ((x)->max_freeable < i) \
(x)->max_freeable = i; \
} while (0)
@@ -150877,7 +151242,7 @@ index 17e2848..15840f7 100644
#else
#define STATS_INC_ACTIVE(x) do { } while (0)
#define STATS_DEC_ACTIVE(x) do { } while (0)
-@@ -299,6 +302,8 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
+@@ -304,6 +307,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)
@@ -150886,7 +151251,7 @@ index 17e2848..15840f7 100644
#endif
#if DEBUG
-@@ -405,7 +410,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page,
+@@ -410,7 +415,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,
@@ -150895,7 +151260,7 @@ index 17e2848..15840f7 100644
{
u32 offset = (obj - page->s_mem);
return reciprocal_divide(offset, cache->reciprocal_buffer_size);
-@@ -1263,7 +1268,7 @@ void __init kmem_cache_init(void)
+@@ -1354,7 +1359,7 @@ void __init kmem_cache_init(void)
* structures first. Without this, further allocations will bug.
*/
kmalloc_caches[INDEX_NODE] = create_kmalloc_cache("kmalloc-node",
@@ -150904,7 +151269,7 @@ index 17e2848..15840f7 100644
slab_state = PARTIAL_NODE;
setup_kmalloc_cache_index_table();
-@@ -1508,7 +1513,7 @@ static void store_stackinfo(struct kmem_cache *cachep, unsigned long *addr,
+@@ -1599,7 +1604,7 @@ static void store_stackinfo(struct kmem_cache *cachep, unsigned long *addr,
while (!kstack_end(sptr)) {
svalue = *sptr++;
@@ -150913,7 +151278,7 @@ index 17e2848..15840f7 100644
*addr++ = svalue;
size -= sizeof(unsigned long);
if (size <= sizeof(unsigned long))
-@@ -1895,7 +1900,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -1986,7 +1991,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
cachep = find_mergeable(size, align, flags, name, ctor);
if (cachep) {
@@ -150922,7 +151287,7 @@ index 17e2848..15840f7 100644
/*
* Adjust the object sizes so that we clear
-@@ -2024,6 +2029,8 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
+@@ -2115,6 +2120,8 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
#endif
#endif
@@ -150931,8 +151296,8 @@ index 17e2848..15840f7 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
-@@ -3332,6 +3339,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
- kasan_slab_free(cachep, objp);
+@@ -3560,6 +3567,20 @@ void ___cache_free(struct kmem_cache *cachep, void *objp,
+ struct array_cache *ac = cpu_cache_get(cachep);
check_irq_off();
+
@@ -150952,7 +151317,7 @@ index 17e2848..15840f7 100644
kmemleak_free_recursive(objp, cachep->flags);
objp = cache_free_debugcheck(cachep, objp, caller);
-@@ -3511,7 +3532,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller)
+@@ -3739,7 +3760,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller)
return ret;
}
@@ -150961,7 +151326,7 @@ index 17e2848..15840f7 100644
{
return __do_kmalloc_node(size, flags, node, _RET_IP_);
}
-@@ -3531,7 +3552,7 @@ EXPORT_SYMBOL(__kmalloc_node_track_caller);
+@@ -3759,7 +3780,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
*/
@@ -150970,7 +151335,7 @@ index 17e2848..15840f7 100644
unsigned long caller)
{
struct kmem_cache *cachep;
-@@ -3631,6 +3652,7 @@ void kfree(const void *objp)
+@@ -3859,6 +3880,7 @@ void kfree(const void *objp)
if (unlikely(ZERO_OR_NULL_PTR(objp)))
return;
@@ -150978,7 +151343,7 @@ index 17e2848..15840f7 100644
local_irq_save(flags);
kfree_debugcheck(objp);
c = virt_to_cache(objp);
-@@ -4049,14 +4071,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
+@@ -4226,14 +4248,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
}
/* cpu stats */
{
@@ -151005,7 +151370,7 @@ index 17e2848..15840f7 100644
#endif
}
-@@ -4293,13 +4323,80 @@ static const struct file_operations proc_slabstats_operations = {
+@@ -4470,13 +4500,80 @@ static const struct file_operations proc_slabstats_operations = {
static int __init slab_proc_init(void)
{
#ifdef CONFIG_DEBUG_SLAB_LEAK
@@ -151088,7 +151453,7 @@ index 17e2848..15840f7 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 5969769..6bd0b85 100644
+index dedb1a9..a01088a 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -22,7 +22,7 @@ struct kmem_cache {
@@ -151157,7 +151522,7 @@ index 5969769..6bd0b85 100644
if (slab_equal_or_root(cachep, s))
return cachep;
diff --git a/mm/slab_common.c b/mm/slab_common.c
-index 3239bfd..a466932 100644
+index 82317ab..426f137 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -25,11 +25,35 @@
@@ -151233,8 +151598,8 @@ index 3239bfd..a466932 100644
sysfs_slab_remove(s);
#else
slab_kmem_cache_release(s);
-@@ -717,8 +741,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
-
+@@ -718,8 +742,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
+ kasan_cache_destroy(s);
mutex_lock(&slab_mutex);
- s->refcount--;
@@ -151243,7 +151608,7 @@ index 3239bfd..a466932 100644
goto out_unlock;
err = shutdown_memcg_caches(s, &release, &need_rcu_barrier);
-@@ -784,7 +807,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz
+@@ -786,7 +809,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);
@@ -151252,7 +151617,7 @@ index 3239bfd..a466932 100644
}
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,
+@@ -799,7 +822,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);
@@ -151261,7 +151626,7 @@ index 3239bfd..a466932 100644
return s;
}
-@@ -809,6 +832,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -811,6 +834,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
EXPORT_SYMBOL(kmalloc_dma_caches);
#endif
@@ -151273,7 +151638,7 @@ index 3239bfd..a466932 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
-@@ -873,6 +901,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
+@@ -875,6 +903,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
return kmalloc_dma_caches[index];
#endif
@@ -151287,7 +151652,7 @@ index 3239bfd..a466932 100644
return kmalloc_caches[index];
}
-@@ -965,7 +1000,7 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -967,7 +1002,7 @@ void __init create_kmalloc_caches(unsigned long flags)
for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
if (!kmalloc_caches[i])
@@ -151296,7 +151661,7 @@ index 3239bfd..a466932 100644
/*
* Caches that are not of the two-to-the-power-of size.
-@@ -973,9 +1008,9 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -975,9 +1010,9 @@ void __init create_kmalloc_caches(unsigned long flags)
* earlier power of two caches
*/
if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)
@@ -151308,7 +151673,7 @@ index 3239bfd..a466932 100644
}
/* Kmalloc array is now usable */
-@@ -996,6 +1031,23 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -998,6 +1033,23 @@ void __init create_kmalloc_caches(unsigned long flags)
}
}
#endif
@@ -151332,7 +151697,7 @@ index 3239bfd..a466932 100644
}
#endif /* !CONFIG_SLOB */
-@@ -1011,6 +1063,12 @@ void *kmalloc_order(size_t size, gfp_t flags, unsigned int order)
+@@ -1013,6 +1065,12 @@ void *kmalloc_order(size_t size, gfp_t flags, unsigned int order)
flags |= __GFP_COMP;
page = alloc_kmem_pages(flags, order);
@@ -151345,7 +151710,7 @@ index 3239bfd..a466932 100644
ret = page ? page_address(page) : NULL;
kmemleak_alloc(ret, size, 1, flags);
kasan_kmalloc_large(ret, size, flags);
-@@ -1053,6 +1111,9 @@ static void print_slabinfo_header(struct seq_file *m)
+@@ -1055,6 +1113,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>");
@@ -151355,7 +151720,7 @@ index 3239bfd..a466932 100644
#endif
seq_putc(m, '\n');
}
-@@ -1182,7 +1243,7 @@ static int __init slab_proc_init(void)
+@@ -1184,7 +1245,7 @@ static int __init slab_proc_init(void)
module_init(slab_proc_init);
#endif /* CONFIG_SLABINFO */
@@ -151835,7 +152200,7 @@ index 5ec1580..ced45c6 100644
EXPORT_SYMBOL(kmem_cache_free);
diff --git a/mm/slub.c b/mm/slub.c
-index 4dbb109e..f891e12 100644
+index 825ff45..c1b2ca0 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -34,6 +34,7 @@
@@ -151983,7 +152348,7 @@ index 4dbb109e..f891e12 100644
size_t ksize(const void *object)
{
size_t size = __ksize(object);
-@@ -3651,6 +3739,7 @@ void kfree(const void *x)
+@@ -3652,6 +3740,7 @@ void kfree(const void *x)
if (unlikely(ZERO_OR_NULL_PTR(x)))
return;
@@ -151991,7 +152356,7 @@ index 4dbb109e..f891e12 100644
page = virt_to_head_page(x);
if (unlikely(!PageSlab(page))) {
BUG_ON(!PageCompound(page));
-@@ -3968,7 +4057,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3969,7 +4058,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
s = find_mergeable(size, align, flags, name, ctor);
if (s) {
@@ -152000,7 +152365,7 @@ index 4dbb109e..f891e12 100644
/*
* Adjust the object sizes so that we clear
-@@ -3984,7 +4073,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3985,7 +4074,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
}
if (sysfs_slab_alias(s, name)) {
@@ -152009,7 +152374,7 @@ index 4dbb109e..f891e12 100644
s = NULL;
}
}
-@@ -3996,6 +4085,8 @@ int __kmem_cache_create(struct kmem_cache *s, unsigned long flags)
+@@ -3997,6 +4086,8 @@ int __kmem_cache_create(struct kmem_cache *s, unsigned long flags)
{
int err;
@@ -152018,7 +152383,7 @@ index 4dbb109e..f891e12 100644
err = kmem_cache_open(s, flags);
if (err)
return err;
-@@ -4101,7 +4192,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
+@@ -4102,7 +4193,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
}
#endif
@@ -152027,7 +152392,7 @@ index 4dbb109e..f891e12 100644
static int count_inuse(struct page *page)
{
return page->inuse;
-@@ -4382,7 +4473,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
+@@ -4383,7 +4474,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
len += sprintf(buf + len, "%7ld ", l->count);
if (l->addr)
@@ -152039,7 +152404,7 @@ index 4dbb109e..f891e12 100644
else
len += sprintf(buf + len, "<not-available>");
-@@ -4480,12 +4575,12 @@ static void __init resiliency_test(void)
+@@ -4481,12 +4576,12 @@ static void __init resiliency_test(void)
validate_slab_cache(kmalloc_caches[9]);
}
#else
@@ -152054,7 +152419,7 @@ index 4dbb109e..f891e12 100644
enum slab_stat_type {
SL_ALL, /* All slabs */
SL_PARTIAL, /* Only partially allocated slabs */
-@@ -4722,13 +4817,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
+@@ -4723,13 +4818,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
{
if (!s->ctor)
return 0;
@@ -152073,7 +152438,7 @@ index 4dbb109e..f891e12 100644
}
SLAB_ATTR_RO(aliases);
-@@ -4816,6 +4915,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
+@@ -4817,6 +4916,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
SLAB_ATTR_RO(cache_dma);
#endif
@@ -152096,7 +152461,7 @@ index 4dbb109e..f891e12 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));
-@@ -4871,7 +4986,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf,
+@@ -4872,7 +4987,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.
*/
@@ -152105,7 +152470,7 @@ index 4dbb109e..f891e12 100644
return -EINVAL;
s->flags &= ~SLAB_TRACE;
-@@ -4989,7 +5104,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf)
+@@ -4990,7 +5105,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)
{
@@ -152114,7 +152479,7 @@ index 4dbb109e..f891e12 100644
return -EINVAL;
s->flags &= ~SLAB_FAILSLAB;
-@@ -5121,7 +5236,7 @@ STAT_ATTR(CPU_PARTIAL_NODE, cpu_partial_node);
+@@ -5122,7 +5237,7 @@ STAT_ATTR(CPU_PARTIAL_NODE, cpu_partial_node);
STAT_ATTR(CPU_PARTIAL_DRAIN, cpu_partial_drain);
#endif
@@ -152123,7 +152488,7 @@ index 4dbb109e..f891e12 100644
&slab_size_attr.attr,
&object_size_attr.attr,
&objs_per_slab_attr.attr,
-@@ -5156,6 +5271,12 @@ static struct attribute *slab_attrs[] = {
+@@ -5157,6 +5272,12 @@ static struct attribute *slab_attrs[] = {
#ifdef CONFIG_ZONE_DMA
&cache_dma_attr.attr,
#endif
@@ -152136,7 +152501,7 @@ index 4dbb109e..f891e12 100644
#ifdef CONFIG_NUMA
&remote_node_defrag_ratio_attr.attr,
#endif
-@@ -5399,6 +5520,7 @@ static char *create_unique_id(struct kmem_cache *s)
+@@ -5400,6 +5521,7 @@ static char *create_unique_id(struct kmem_cache *s)
return name;
}
@@ -152144,7 +152509,7 @@ index 4dbb109e..f891e12 100644
static int sysfs_slab_add(struct kmem_cache *s)
{
int err;
-@@ -5470,6 +5592,7 @@ void sysfs_slab_remove(struct kmem_cache *s)
+@@ -5471,6 +5593,7 @@ void sysfs_slab_remove(struct kmem_cache *s)
kobject_del(&s->kobj);
kobject_put(&s->kobj);
}
@@ -152152,7 +152517,7 @@ index 4dbb109e..f891e12 100644
/*
* Need to buffer aliases during bootup until sysfs becomes
-@@ -5483,6 +5606,7 @@ struct saved_alias {
+@@ -5484,6 +5607,7 @@ struct saved_alias {
static struct saved_alias *alias_list;
@@ -152160,7 +152525,7 @@ index 4dbb109e..f891e12 100644
static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
{
struct saved_alias *al;
-@@ -5505,6 +5629,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
+@@ -5506,6 +5630,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
alias_list = al;
return 0;
}
@@ -152204,10 +152569,10 @@ index 5d0cf45..66e4df6 100644
}
}
diff --git a/mm/swap.c b/mm/swap.c
-index 03aacbc..3a5e649 100644
+index 90530ff..9735082 100644
--- a/mm/swap.c
+++ b/mm/swap.c
-@@ -88,6 +88,13 @@ static void __put_compound_page(struct page *page)
+@@ -91,6 +91,13 @@ static void __put_compound_page(struct page *page)
if (!PageHuge(page))
__page_cache_release(page);
dtor = get_compound_page_dtor(page);
@@ -152273,7 +152638,7 @@ index 031713ab..f2c0e55 100644
if (S_ISREG(inode->i_mode))
diff --git a/mm/util.c b/mm/util.c
-index 6cc81e7..53a6ff9 100644
+index 917e0e3..6873e84 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)
@@ -152289,7 +152654,7 @@ index 6cc81e7..53a6ff9 100644
mm->get_unmapped_area = arch_get_unmapped_area;
}
#endif
-@@ -400,6 +406,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly;
+@@ -424,6 +430,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 */
@@ -152297,7 +152662,7 @@ index 6cc81e7..53a6ff9 100644
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)
+@@ -603,6 +610,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 */
@@ -152308,10 +152673,10 @@ index 6cc81e7..53a6ff9 100644
arg_start = mm->arg_start;
arg_end = mm->arg_end;
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
-index ae7d20b..718df5c 100644
+index e11475c..3650eb9 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
-@@ -42,20 +42,65 @@ struct vfree_deferred {
+@@ -43,20 +43,65 @@ struct vfree_deferred {
struct work_struct wq;
};
static DEFINE_PER_CPU(struct vfree_deferred, vfree_deferred);
@@ -152380,7 +152745,7 @@ index ae7d20b..718df5c 100644
/*** Page table manipulation functions ***/
static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
-@@ -63,10 +108,23 @@ static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
+@@ -64,10 +109,23 @@ static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
pte_t *pte;
pte = pte_offset_kernel(pmd, addr);
@@ -152406,7 +152771,7 @@ index ae7d20b..718df5c 100644
}
static void vunmap_pmd_range(pud_t *pud, unsigned long addr, unsigned long end)
-@@ -129,16 +187,29 @@ static int vmap_pte_range(pmd_t *pmd, unsigned long addr,
+@@ -130,16 +188,29 @@ static int vmap_pte_range(pmd_t *pmd, unsigned long addr,
pte = pte_alloc_kernel(pmd, addr);
if (!pte)
return -ENOMEM;
@@ -152438,7 +152803,7 @@ index ae7d20b..718df5c 100644
return 0;
}
-@@ -148,7 +219,7 @@ static int vmap_pmd_range(pud_t *pud, unsigned long addr,
+@@ -149,7 +220,7 @@ static int vmap_pmd_range(pud_t *pud, unsigned long addr,
pmd_t *pmd;
unsigned long next;
@@ -152447,7 +152812,7 @@ index ae7d20b..718df5c 100644
if (!pmd)
return -ENOMEM;
do {
-@@ -165,7 +236,7 @@ static int vmap_pud_range(pgd_t *pgd, unsigned long addr,
+@@ -166,7 +237,7 @@ static int vmap_pud_range(pgd_t *pgd, unsigned long addr,
pud_t *pud;
unsigned long next;
@@ -152456,7 +152821,7 @@ index ae7d20b..718df5c 100644
if (!pud)
return -ENOMEM;
do {
-@@ -225,6 +296,12 @@ int is_vmalloc_or_module_addr(const void *x)
+@@ -226,6 +297,12 @@ int is_vmalloc_or_module_addr(const void *x)
if (addr >= MODULES_VADDR && addr < MODULES_END)
return 1;
#endif
@@ -152469,7 +152834,7 @@ index ae7d20b..718df5c 100644
return is_vmalloc_addr(x);
}
-@@ -245,8 +322,14 @@ struct page *vmalloc_to_page(const void *vmalloc_addr)
+@@ -246,8 +323,14 @@ struct page *vmalloc_to_page(const void *vmalloc_addr)
if (!pgd_none(*pgd)) {
pud_t *pud = pud_offset(pgd, addr);
@@ -152484,7 +152849,7 @@ index ae7d20b..718df5c 100644
if (!pmd_none(*pmd)) {
pte_t *ptep, pte;
-@@ -348,7 +431,7 @@ static void purge_vmap_area_lazy(void);
+@@ -350,7 +433,7 @@ static BLOCKING_NOTIFIER_HEAD(vmap_notify_list);
* Allocate a region of KVA of the specified size and alignment, within the
* vstart and vend.
*/
@@ -152493,7 +152858,7 @@ index ae7d20b..718df5c 100644
unsigned long align,
unsigned long vstart, unsigned long vend,
int node, gfp_t gfp_mask)
-@@ -1202,13 +1285,27 @@ void __init vmalloc_init(void)
+@@ -1228,13 +1311,27 @@ void __init vmalloc_init(void)
for_each_possible_cpu(i) {
struct vmap_block_queue *vbq;
struct vfree_deferred *p;
@@ -152522,7 +152887,7 @@ index ae7d20b..718df5c 100644
}
/* Import existing vmlist entries. */
-@@ -1333,6 +1430,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
+@@ -1359,6 +1456,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
struct vm_struct *area;
BUG_ON(in_interrupt());
@@ -152539,7 +152904,7 @@ index ae7d20b..718df5c 100644
if (flags & VM_IOREMAP)
align = 1ul << clamp_t(int, fls_long(size),
PAGE_SHIFT, IOREMAP_MAX_ORDER);
-@@ -1345,7 +1452,11 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
+@@ -1371,7 +1478,11 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
if (unlikely(!area))
return NULL;
@@ -152551,7 +152916,7 @@ index ae7d20b..718df5c 100644
size += PAGE_SIZE;
va = alloc_vmap_area(size, align, start, end, node, gfp_mask);
-@@ -1527,13 +1638,36 @@ EXPORT_SYMBOL(vfree);
+@@ -1553,13 +1664,36 @@ EXPORT_SYMBOL(vfree);
*/
void vunmap(const void *addr)
{
@@ -152591,7 +152956,7 @@ index ae7d20b..718df5c 100644
/**
* vmap - map an array of pages into virtually contiguous space
* @pages: array of page pointers
-@@ -1554,6 +1688,11 @@ void *vmap(struct page **pages, unsigned int count,
+@@ -1581,6 +1715,11 @@ void *vmap(struct page **pages, unsigned int count,
if (count > totalram_pages)
return NULL;
@@ -152600,10 +152965,10 @@ index ae7d20b..718df5c 100644
+ flags |= VM_KERNEXEC;
+#endif
+
- area = get_vm_area_caller((count << PAGE_SHIFT), flags,
- __builtin_return_address(0));
+ size = (unsigned long)count << PAGE_SHIFT;
+ area = get_vm_area_caller(size, flags, __builtin_return_address(0));
if (!area)
-@@ -1657,6 +1796,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
+@@ -1684,6 +1823,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
if (!size || (size >> PAGE_SHIFT) > totalram_pages)
goto fail;
@@ -152618,7 +152983,7 @@ index ae7d20b..718df5c 100644
area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNINITIALIZED |
vm_flags, start, end, node, gfp_mask, caller);
if (!area)
-@@ -1710,6 +1857,14 @@ static void *__vmalloc_node(unsigned long size, unsigned long align,
+@@ -1737,6 +1884,14 @@ static void *__vmalloc_node(unsigned long size, unsigned long align,
gfp_mask, prot, 0, node, caller);
}
@@ -152633,7 +152998,7 @@ index ae7d20b..718df5c 100644
void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
{
return __vmalloc_node(size, 1, gfp_mask, prot, NUMA_NO_NODE,
-@@ -1833,10 +1988,9 @@ EXPORT_SYMBOL(vzalloc_node);
+@@ -1860,10 +2015,9 @@ EXPORT_SYMBOL(vzalloc_node);
* For tight control over page level allocator and protection flags
* use __vmalloc() instead.
*/
@@ -152645,7 +153010,7 @@ index ae7d20b..718df5c 100644
NUMA_NO_NODE, __builtin_return_address(0));
}
-@@ -2143,6 +2297,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
+@@ -2170,6 +2324,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
{
struct vm_struct *area;
@@ -152654,7 +153019,7 @@ index ae7d20b..718df5c 100644
size = PAGE_ALIGN(size);
if (!PAGE_ALIGNED(uaddr) || !PAGE_ALIGNED(kaddr))
-@@ -2512,7 +2668,7 @@ found:
+@@ -2539,7 +2695,7 @@ found:
/* insert all vm's */
for (area = 0; area < nr_vms; area++)
setup_vmalloc_vm(vms[area], vas[area], VM_ALLOC,
@@ -152663,7 +153028,7 @@ index ae7d20b..718df5c 100644
kfree(vas);
return vms;
-@@ -2625,7 +2781,11 @@ static int s_show(struct seq_file *m, void *p)
+@@ -2652,7 +2808,11 @@ static int s_show(struct seq_file *m, void *p)
v->addr, v->addr + v->size, v->size);
if (v->caller)
@@ -152676,7 +153041,7 @@ index ae7d20b..718df5c 100644
if (v->nr_pages)
seq_printf(m, " pages=%d", v->nr_pages);
diff --git a/mm/vmstat.c b/mm/vmstat.c
-index 5e43004..823a5d3 100644
+index cb2a67b..d17511a 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -27,6 +27,7 @@
@@ -152734,7 +153099,7 @@ index 5e43004..823a5d3 100644
}
}
#endif
-@@ -1309,10 +1310,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
+@@ -1287,10 +1288,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
stat_items_size += sizeof(struct vm_event_state);
#endif
@@ -152758,7 +153123,16 @@ index 5e43004..823a5d3 100644
for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
v[i] = global_page_state(i);
v += NR_VM_ZONE_STAT_ITEMS;
-@@ -1578,10 +1591,16 @@ static int __init setup_vmstat(void)
+@@ -1384,7 +1397,7 @@ int vmstat_refresh(struct ctl_table *table, int write,
+ if (err)
+ return err;
+ for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) {
+- val = atomic_long_read(&vm_stat[i]);
++ val = atomic_long_read_unchecked(&vm_stat[i]);
+ if (val < 0) {
+ switch (i) {
+ case NR_ALLOC_BATCH:
+@@ -1585,10 +1598,16 @@ static int __init setup_vmstat(void)
cpu_notifier_register_done();
#endif
#ifdef CONFIG_PROC_FS
@@ -152780,10 +153154,10 @@ index 5e43004..823a5d3 100644
return 0;
}
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
-index a1e273a..2229e93 100644
+index 82a116b..2d00f22 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
-@@ -491,7 +491,7 @@ out:
+@@ -496,7 +496,7 @@ out:
return NOTIFY_DONE;
}
@@ -152792,7 +153166,7 @@ index a1e273a..2229e93 100644
.notifier_call = vlan_device_event,
};
-@@ -566,8 +566,7 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
+@@ -571,8 +571,7 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
err = -EPERM;
if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
break;
@@ -152803,10 +153177,10 @@ index a1e273a..2229e93 100644
vn = net_generic(net, vlan_net_id);
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
-index c92b52f..006c052 100644
+index 1270207..d165bb5 100644
--- a/net/8021q/vlan_netlink.c
+++ b/net/8021q/vlan_netlink.c
-@@ -245,7 +245,7 @@ static struct net *vlan_get_link_net(const struct net_device *dev)
+@@ -248,7 +248,7 @@ static struct net *vlan_get_link_net(const struct net_device *dev)
return dev_net(real_dev);
}
@@ -152904,7 +153278,7 @@ index 876fbe8..8bbea9f 100644
#undef __HANDLE_ITEM
}
diff --git a/net/atm/lec.c b/net/atm/lec.c
-index cd3b379..977a3c9 100644
+index e574a7e..2f5a14d 100644
--- a/net/atm/lec.c
+++ b/net/atm/lec.c
@@ -111,9 +111,9 @@ static inline void lec_arp_put(struct lec_arp_table *entry)
@@ -153045,10 +153419,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 cb2d1b9..b0459c4 100644
+index ce2f203..1b01697 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
-@@ -319,7 +319,7 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface)
+@@ -354,7 +354,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));
@@ -153057,7 +153431,7 @@ index cb2d1b9..b0459c4 100644
hard_iface->bat_iv.ogm_buff_len = BATADV_OGM_HLEN;
ogm_buff = kmalloc(hard_iface->bat_iv.ogm_buff_len, GFP_ATOMIC);
-@@ -926,9 +926,9 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface)
+@@ -953,9 +953,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 */
@@ -153069,7 +153443,7 @@ index cb2d1b9..b0459c4 100644
batadv_iv_ogm_slide_own_bcast_window(hard_iface);
-@@ -1618,7 +1618,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset,
+@@ -1653,7 +1653,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset,
return;
/* could be changed by schedule_own_packet() */
@@ -153079,7 +153453,7 @@ index cb2d1b9..b0459c4 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 e6956d0..f59553fa 100644
+index 65536db..eefd4ce 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -469,7 +469,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb,
@@ -153092,10 +153466,10 @@ index e6956d0..f59553fa 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 b781bf7..46bb680 100644
+index bfac086..9ea5e14 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
-@@ -690,7 +690,7 @@ batadv_reroute_unicast_packet(struct batadv_priv *bat_priv,
+@@ -719,7 +719,7 @@ batadv_reroute_unicast_packet(struct batadv_priv *bat_priv,
if (!primary_if)
goto out;
orig_addr = primary_if->net_dev->dev_addr;
@@ -153104,7 +153478,7 @@ index b781bf7..46bb680 100644
} else {
orig_node = batadv_transtable_search(bat_priv, NULL, dst_addr,
vid);
-@@ -765,7 +765,7 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv,
+@@ -795,7 +795,7 @@ static bool 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
*/
@@ -153114,7 +153488,7 @@ index b781bf7..46bb680 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 8a136b6..446d0cb 100644
+index 287a387..0c6c917 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -179,7 +179,7 @@ static void batadv_interface_set_rx_mode(struct net_device *dev)
@@ -153135,7 +153509,7 @@ index 8a136b6..446d0cb 100644
bcast_packet->seqno = htonl(seqno);
batadv_add_bcast_packet_to_list(bat_priv, skb, brd_delay);
-@@ -817,8 +817,8 @@ static int batadv_softif_init_late(struct net_device *dev)
+@@ -830,8 +830,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);
@@ -153146,7 +153520,7 @@ index 8a136b6..446d0cb 100644
atomic_set(&bat_priv->tt.local_changes, 0);
atomic_set(&bat_priv->tt.ogm_append_cnt, 0);
#ifdef CONFIG_BATMAN_ADV_BLA
-@@ -831,7 +831,7 @@ static int batadv_softif_init_late(struct net_device *dev)
+@@ -844,7 +844,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));
@@ -153155,8 +153529,8 @@ index 8a136b6..446d0cb 100644
bat_priv->primary_if = NULL;
bat_priv->num_ifaces = 0;
-@@ -1037,7 +1037,7 @@ int batadv_softif_is_valid(const struct net_device *net_dev)
- return 0;
+@@ -1062,7 +1062,7 @@ bool batadv_softif_is_valid(const struct net_device *net_dev)
+ return false;
}
-struct rtnl_link_ops batadv_link_ops __read_mostly = {
@@ -153165,10 +153539,10 @@ index 8a136b6..446d0cb 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 e7cf513..f4de9cc 100644
+index 414b207..10ab6f7 100644
--- a/net/batman-adv/sysfs.c
+++ b/net/batman-adv/sysfs.c
-@@ -143,7 +143,7 @@ struct batadv_attribute batadv_attr_##_name = { \
+@@ -145,7 +145,7 @@ struct batadv_attribute batadv_attr_##_name = { \
#define BATADV_ATTR_SIF_STORE_BOOL(_name, _post_func) \
ssize_t batadv_store_##_name(struct kobject *kobj, \
@@ -153177,7 +153551,7 @@ index e7cf513..f4de9cc 100644
size_t count) \
{ \
struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
-@@ -155,7 +155,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
+@@ -157,7 +157,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
#define BATADV_ATTR_SIF_SHOW_BOOL(_name) \
ssize_t batadv_show_##_name(struct kobject *kobj, \
@@ -153186,7 +153560,7 @@ index e7cf513..f4de9cc 100644
{ \
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); \
\
-@@ -175,7 +175,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \
+@@ -177,7 +177,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, \
@@ -153195,7 +153569,7 @@ index e7cf513..f4de9cc 100644
size_t count) \
{ \
struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
-@@ -188,7 +188,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
+@@ -190,7 +190,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, \
@@ -153204,7 +153578,7 @@ index e7cf513..f4de9cc 100644
{ \
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); \
\
-@@ -206,7 +206,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \
+@@ -208,7 +208,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, \
@@ -153213,7 +153587,7 @@ index e7cf513..f4de9cc 100644
size_t count) \
{ \
struct batadv_priv *bat_priv = batadv_vlan_kobj_to_batpriv(kobj);\
-@@ -222,7 +222,7 @@ ssize_t batadv_store_vlan_##_name(struct kobject *kobj, \
+@@ -224,7 +224,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, \
@@ -153222,7 +153596,7 @@ index e7cf513..f4de9cc 100644
{ \
struct batadv_priv *bat_priv = batadv_vlan_kobj_to_batpriv(kobj);\
struct batadv_softif_vlan *vlan = batadv_kobj_to_vlan(bat_priv, \
-@@ -244,7 +244,7 @@ ssize_t batadv_show_vlan_##_name(struct kobject *kobj, \
+@@ -246,7 +246,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, \
@@ -153231,7 +153605,7 @@ index e7cf513..f4de9cc 100644
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, \
+@@ -267,7 +267,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, \
@@ -153240,7 +153614,7 @@ index e7cf513..f4de9cc 100644
{ \
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,
+@@ -337,13 +337,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 *),
@@ -153256,7 +153630,7 @@ index e7cf513..f4de9cc 100644
attr_store, &changed);
if (post_func && changed)
post_func(net_dev);
-@@ -391,12 +391,12 @@ static inline ssize_t
+@@ -393,12 +393,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 *),
@@ -153271,7 +153645,7 @@ index e7cf513..f4de9cc 100644
attr_store);
if (post_func && ret)
post_func(net_dev);
-@@ -405,7 +405,7 @@ __batadv_store_uint_attr(const char *buff, size_t count,
+@@ -407,7 +407,7 @@ __batadv_store_uint_attr(const char *buff, size_t count,
}
static ssize_t batadv_show_bat_algo(struct kobject *kobj,
@@ -153280,7 +153654,7 @@ index e7cf513..f4de9cc 100644
{
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
-@@ -419,7 +419,7 @@ static void batadv_post_gw_reselect(struct net_device *net_dev)
+@@ -421,7 +421,7 @@ static void batadv_post_gw_reselect(struct net_device *net_dev)
batadv_gw_reselect(bat_priv);
}
@@ -153289,7 +153663,7 @@ index e7cf513..f4de9cc 100644
char *buff)
{
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
-@@ -444,7 +444,7 @@ static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct attribute *attr,
+@@ -446,7 +446,7 @@ static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct attribute *attr,
}
static ssize_t batadv_store_gw_mode(struct kobject *kobj,
@@ -153298,7 +153672,7 @@ index e7cf513..f4de9cc 100644
size_t count)
{
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
-@@ -512,7 +512,7 @@ static ssize_t batadv_store_gw_mode(struct kobject *kobj,
+@@ -514,7 +514,7 @@ static ssize_t batadv_store_gw_mode(struct kobject *kobj,
}
static ssize_t batadv_show_gw_bwidth(struct kobject *kobj,
@@ -153307,7 +153681,7 @@ index e7cf513..f4de9cc 100644
{
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
u32 down, up;
-@@ -525,7 +525,7 @@ static ssize_t batadv_show_gw_bwidth(struct kobject *kobj,
+@@ -527,7 +527,7 @@ static ssize_t batadv_show_gw_bwidth(struct kobject *kobj,
}
static ssize_t batadv_store_gw_bwidth(struct kobject *kobj,
@@ -153316,7 +153690,7 @@ index e7cf513..f4de9cc 100644
size_t count)
{
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
-@@ -546,7 +546,7 @@ static ssize_t batadv_store_gw_bwidth(struct kobject *kobj,
+@@ -548,7 +548,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,
@@ -153325,7 +153699,7 @@ index e7cf513..f4de9cc 100644
{
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
-@@ -565,7 +565,7 @@ static ssize_t batadv_show_isolation_mark(struct kobject *kobj,
+@@ -567,7 +567,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,
@@ -153334,7 +153708,7 @@ index e7cf513..f4de9cc 100644
size_t count)
{
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
-@@ -802,7 +802,7 @@ void batadv_sysfs_del_vlan(struct batadv_priv *bat_priv,
+@@ -804,7 +804,7 @@ void batadv_sysfs_del_vlan(struct batadv_priv *bat_priv,
}
static ssize_t batadv_show_mesh_iface(struct kobject *kobj,
@@ -153343,7 +153717,7 @@ index e7cf513..f4de9cc 100644
{
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
struct batadv_hard_iface *hard_iface;
-@@ -826,7 +826,7 @@ static ssize_t batadv_show_mesh_iface(struct kobject *kobj,
+@@ -828,7 +828,7 @@ static ssize_t batadv_show_mesh_iface(struct kobject *kobj,
}
static ssize_t batadv_store_mesh_iface(struct kobject *kobj,
@@ -153352,7 +153726,7 @@ index e7cf513..f4de9cc 100644
size_t count)
{
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
-@@ -883,7 +883,7 @@ out:
+@@ -886,7 +886,7 @@ out:
}
static ssize_t batadv_show_iface_status(struct kobject *kobj,
@@ -153361,7 +153735,7 @@ index e7cf513..f4de9cc 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,
+@@ -933,7 +933,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,
@@ -153370,7 +153744,7 @@ index e7cf513..f4de9cc 100644
char *buff, size_t count)
{
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
-@@ -968,7 +968,7 @@ out:
+@@ -971,7 +971,7 @@ out:
}
static ssize_t batadv_show_throughput_override(struct kobject *kobj,
@@ -153396,10 +153770,10 @@ index c76021b..3aef377 100644
};
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
-index 9b4551a..426c047 100644
+index 57ec87f..92b4b3f 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
-@@ -660,7 +660,7 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const u8 *addr,
+@@ -662,7 +662,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),
@@ -153408,7 +153782,7 @@ index 9b4551a..426c047 100644
ether_addr_copy(tt_local->common.addr, addr);
/* The local entry has to be marked as NEW to avoid to send it in
-@@ -891,7 +891,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
+@@ -892,7 +892,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
}
(*tt_data)->flags = BATADV_NO_FLAGS;
@@ -153417,16 +153791,16 @@ index 9b4551a..426c047 100644
(*tt_data)->num_vlan = htons(num_vlan);
tt_vlan = (struct batadv_tvlv_tt_vlan_data *)(*tt_data + 1);
-@@ -1009,7 +1009,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset)
+@@ -1010,7 +1010,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",
- net_dev->name, (u8)atomic_read(&bat_priv->tt.vn));
+ net_dev->name, (u8)atomic_read_unchecked(&bat_priv->tt.vn));
- seq_printf(seq, " %-13s %s %-8s %-9s (%-10s)\n", "Client", "VID",
- "Flags", "Last seen", "CRC");
+ seq_puts(seq,
+ " Client VID Flags Last seen (CRC )\n");
-@@ -2786,7 +2786,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
+@@ -2818,7 +2818,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
spin_lock_bh(&bat_priv->tt.commit_lock);
@@ -153435,7 +153809,7 @@ index 9b4551a..426c047 100644
req_ttvn = tt_data->ttvn;
orig_node = batadv_orig_hash_find(bat_priv, req_src);
-@@ -2825,7 +2825,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
+@@ -2857,7 +2857,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 {
@@ -153444,7 +153818,7 @@ index 9b4551a..426c047 100644
/* allocate the tvlv, put the tt_data and all the tt_vlan_data
* in the initial part
-@@ -3344,10 +3344,10 @@ static void batadv_tt_local_commit_changes_nolock(struct batadv_priv *bat_priv)
+@@ -3376,10 +3376,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 */
@@ -153458,7 +153832,7 @@ index 9b4551a..426c047 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 1e47fbe..7b48a58 100644
+index 74d865a..8172fc2 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -83,7 +83,7 @@ enum batadv_dhcp_recipient {
@@ -153470,7 +153844,7 @@ index 1e47fbe..7b48a58 100644
};
/**
-@@ -630,7 +630,7 @@ enum batadv_counters {
+@@ -632,7 +632,7 @@ enum batadv_counters {
* @work: work queue callback item for translation table purging
*/
struct batadv_priv_tt {
@@ -153479,7 +153853,7 @@ index 1e47fbe..7b48a58 100644
atomic_t ogm_append_cnt;
atomic_t local_changes;
struct list_head changes_list;
-@@ -906,7 +906,7 @@ struct batadv_priv {
+@@ -914,7 +914,7 @@ struct batadv_priv {
atomic_t bonding;
atomic_t fragmentation;
atomic_t packet_size_max;
@@ -153488,7 +153862,7 @@ index 1e47fbe..7b48a58 100644
#ifdef CONFIG_BATMAN_ADV_BLA
atomic_t bridge_loop_avoidance;
#endif
-@@ -925,7 +925,7 @@ struct batadv_priv {
+@@ -933,7 +933,7 @@ struct batadv_priv {
#endif
u32 isolation_mark;
u32 isolation_mark_mask;
@@ -153528,7 +153902,7 @@ index eb4f5f2..2cc4c50 100644
if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
rfc.mode != chan->mode)
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
-index e4cae72..95cc097ba 100644
+index 388ee8b..9edb2bc 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -633,7 +633,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
@@ -153623,7 +153997,7 @@ 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
+index 77e7f69..6572d43 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)
@@ -153643,10 +154017,10 @@ index 44114a9..376287c 100644
};
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
-index e9c635e..f55c87be 100644
+index 85e89f6..acba5a9 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
-@@ -1219,7 +1219,7 @@ static struct rtnl_af_ops br_af_ops __read_mostly = {
+@@ -1303,7 +1303,7 @@ static struct rtnl_af_ops br_af_ops __read_mostly = {
.get_link_af_size = br_get_link_af_size_filtered,
};
@@ -153822,7 +154196,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 dcc18c6..a236374 100644
+index 55d2bfe..aa97f12 100644
--- a/net/ceph/ceph_common.c
+++ b/net/ceph/ceph_common.c
@@ -5,7 +5,7 @@
@@ -153857,7 +154231,7 @@ index a550289..218652a 100644
switch (ss->ss_family) {
diff --git a/net/compat.c b/net/compat.c
-index 5cfd26a..3c50cb0 100644
+index 1cd2ec0..2650ce6 100644
--- a/net/compat.c
+++ b/net/compat.c
@@ -58,7 +58,7 @@ int get_compat_msghdr(struct msghdr *kmsg,
@@ -153911,7 +154285,7 @@ index 5cfd26a..3c50cb0 100644
int fdmax = (kmsg->msg_controllen - sizeof(struct compat_cmsghdr)) / sizeof(int);
int fdnum = scm->fp->count;
struct file **fp = scm->fp->fp;
-@@ -345,7 +345,7 @@ static int do_set_sock_timeout(struct socket *sock, int level,
+@@ -358,7 +358,7 @@ static int do_set_sock_timeout(struct socket *sock, int level,
return -EFAULT;
old_fs = get_fs();
set_fs(KERNEL_DS);
@@ -153920,7 +154294,7 @@ index 5cfd26a..3c50cb0 100644
set_fs(old_fs);
return err;
-@@ -406,7 +406,7 @@ static int do_get_sock_timeout(struct socket *sock, int level, int optname,
+@@ -420,7 +420,7 @@ static int do_get_sock_timeout(struct socket *sock, int level, int optname,
len = sizeof(ktime);
old_fs = get_fs();
set_fs(KERNEL_DS);
@@ -153929,7 +154303,7 @@ index 5cfd26a..3c50cb0 100644
set_fs(old_fs);
if (!err) {
-@@ -549,7 +549,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
+@@ -563,7 +563,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
case MCAST_JOIN_GROUP:
case MCAST_LEAVE_GROUP:
{
@@ -153938,7 +154312,7 @@ index 5cfd26a..3c50cb0 100644
struct group_req __user *kgr =
compat_alloc_user_space(sizeof(struct group_req));
u32 interface;
-@@ -570,7 +570,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
+@@ -584,7 +584,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
case MCAST_BLOCK_SOURCE:
case MCAST_UNBLOCK_SOURCE:
{
@@ -153947,7 +154321,7 @@ index 5cfd26a..3c50cb0 100644
struct group_source_req __user *kgsr = compat_alloc_user_space(
sizeof(struct group_source_req));
u32 interface;
-@@ -591,7 +591,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
+@@ -605,7 +605,7 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,
}
case MCAST_MSFILTER:
{
@@ -153956,7 +154330,7 @@ index 5cfd26a..3c50cb0 100644
struct group_filter __user *kgf;
u32 interface, fmode, numsrc;
-@@ -629,7 +629,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname,
+@@ -643,7 +643,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname,
char __user *optval, int __user *optlen,
int (*getsockopt)(struct sock *, int, int, char __user *, int __user *))
{
@@ -153965,7 +154339,7 @@ index 5cfd26a..3c50cb0 100644
struct group_filter __user *kgf;
int __user *koptlen;
u32 interface, fmode, numsrc;
-@@ -773,7 +773,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args)
+@@ -787,7 +787,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args)
if (call < SYS_SOCKET || call > SYS_SENDMMSG)
return -EINVAL;
@@ -153975,10 +154349,10 @@ index 5cfd26a..3c50cb0 100644
a0 = a[0];
a1 = a[1];
diff --git a/net/core/datagram.c b/net/core/datagram.c
-index fa9dc64..73dd85a 100644
+index b7de71f..808387d 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
-@@ -357,7 +357,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
+@@ -360,7 +360,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
}
kfree_skb(skb);
@@ -153988,7 +154362,7 @@ index fa9dc64..73dd85a 100644
return err;
diff --git a/net/core/dev.c b/net/core/dev.c
-index 5c925ac..098bb2d 100644
+index 904ff43..050ec70 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)
@@ -154000,8 +154374,17 @@ index 5c925ac..098bb2d 100644
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -3379,7 +3379,7 @@ recursion_alert:
- drop:
+@@ -3002,7 +3002,7 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device
+ out_kfree_skb:
+ kfree_skb(skb);
+ out_null:
+- atomic_long_inc(&dev->tx_dropped);
++ atomic_long_inc_unchecked(&dev->tx_dropped);
+ return NULL;
+ }
+
+@@ -3421,7 +3421,7 @@ recursion_alert:
+ rc = -ENETDOWN;
rcu_read_unlock_bh();
- atomic_long_inc(&dev->tx_dropped);
@@ -154009,7 +154392,7 @@ index 5c925ac..098bb2d 100644
kfree_skb_list(skb);
return rc;
out:
-@@ -3731,7 +3731,7 @@ drop:
+@@ -3774,7 +3774,7 @@ drop:
local_irq_restore(flags);
@@ -154018,7 +154401,7 @@ index 5c925ac..098bb2d 100644
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -3808,7 +3808,7 @@ int netif_rx_ni(struct sk_buff *skb)
+@@ -3851,7 +3851,7 @@ int netif_rx_ni(struct sk_buff *skb)
}
EXPORT_SYMBOL(netif_rx_ni);
@@ -154027,7 +154410,7 @@ index 5c925ac..098bb2d 100644
{
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
-@@ -4161,9 +4161,9 @@ ncls:
+@@ -4206,9 +4206,9 @@ ncls:
} else {
drop:
if (!deliver_exact)
@@ -154039,7 +154422,7 @@ index 5c925ac..098bb2d 100644
kfree_skb(skb);
/* Jamal, now you will not able to escape explaining
* me how you were going to use this. :-)
-@@ -5127,7 +5127,7 @@ out_unlock:
+@@ -5175,7 +5175,7 @@ out_unlock:
return work;
}
@@ -154048,7 +154431,7 @@ index 5c925ac..098bb2d 100644
{
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
unsigned long time_limit = jiffies + 2;
-@@ -7317,9 +7317,9 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
+@@ -7390,9 +7390,9 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
} else {
netdev_stats_to_stats64(storage, &dev->stats);
}
@@ -154061,7 +154444,7 @@ index 5c925ac..098bb2d 100644
return storage;
}
EXPORT_SYMBOL(dev_get_stats);
-@@ -7942,7 +7942,7 @@ static void __net_exit netdev_exit(struct net *net)
+@@ -8014,7 +8014,7 @@ static void __net_exit netdev_exit(struct net *net)
kfree(net->dev_index_head);
}
@@ -154070,7 +154453,7 @@ index 5c925ac..098bb2d 100644
.init = netdev_init,
.exit = netdev_exit,
};
-@@ -8042,7 +8042,7 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list)
+@@ -8114,7 +8114,7 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list)
rtnl_unlock();
}
@@ -154099,7 +154482,7 @@ index b94b1d2..da3ed7c 100644
EXPORT_SYMBOL(dev_load);
diff --git a/net/core/filter.c b/net/core/filter.c
-index ca7f832..1d60a22 100644
+index e759d90..daa69dc 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -590,7 +590,11 @@ do_pass:
@@ -154124,7 +154507,7 @@ index ca7f832..1d60a22 100644
masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL);
if (!masks)
-@@ -1068,7 +1072,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
+@@ -1072,7 +1076,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
if (!fp)
return -ENOMEM;
@@ -154174,7 +154557,7 @@ index 3937b1b..b18d1cb 100644
fle->object = flo;
else
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
-index 769cece..425d3bd 100644
+index 510cd62..ec34c6a 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -860,7 +860,7 @@ static void neigh_probe(struct neighbour *neigh)
@@ -154231,7 +154614,7 @@ index 769cece..425d3bd 100644
neigh_add_timer(neigh,
jiffies + NEIGH_VAR(neigh->parms, RETRANS_TIME));
}
-@@ -2186,7 +2186,7 @@ static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh,
+@@ -2188,7 +2188,7 @@ static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh,
ci.ndm_refcnt = atomic_read(&neigh->refcnt) - 1;
read_unlock_bh(&neigh->lock);
@@ -154240,7 +154623,7 @@ index 769cece..425d3bd 100644
nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
goto nla_put_failure;
-@@ -2874,7 +2874,7 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write,
+@@ -2876,7 +2876,7 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int size, ret;
@@ -154249,7 +154632,7 @@ index 769cece..425d3bd 100644
tmp.extra1 = &zero;
tmp.extra2 = &unres_qlen_max;
-@@ -2936,7 +2936,7 @@ static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
+@@ -2938,7 +2938,7 @@ static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
void __user *buffer,
size_t *lenp, loff_t *ppos)
{
@@ -154259,7 +154642,7 @@ index 769cece..425d3bd 100644
tmp.extra1 = &zero;
diff --git a/net/core/net-procfs.c b/net/core/net-procfs.c
-index 2bf8329..ea323e4 100644
+index 14d0934..f2a895f 100644
--- a/net/core/net-procfs.c
+++ b/net/core/net-procfs.c
@@ -79,7 +79,13 @@ static void dev_seq_printf_stats(struct seq_file *seq, struct net_device *dev)
@@ -154277,7 +154660,7 @@ index 2bf8329..ea323e4 100644
"%8llu %7llu %4llu %4llu %4llu %5llu %7llu %10llu\n",
dev->name, stats->rx_bytes, stats->rx_packets,
stats->rx_errors,
-@@ -166,7 +172,7 @@ static int softnet_seq_show(struct seq_file *seq, void *v)
+@@ -167,7 +173,7 @@ static int softnet_seq_show(struct seq_file *seq, void *v)
return 0;
}
@@ -154286,7 +154669,7 @@ index 2bf8329..ea323e4 100644
.start = dev_seq_start,
.next = dev_seq_next,
.stop = dev_seq_stop,
-@@ -196,7 +202,7 @@ static const struct seq_operations softnet_seq_ops = {
+@@ -197,7 +203,7 @@ static const struct seq_operations softnet_seq_ops = {
static int softnet_seq_open(struct inode *inode, struct file *file)
{
@@ -154295,7 +154678,7 @@ index 2bf8329..ea323e4 100644
}
static const struct file_operations softnet_seq_fops = {
-@@ -283,8 +289,13 @@ static int ptype_seq_show(struct seq_file *seq, void *v)
+@@ -284,8 +290,13 @@ static int ptype_seq_show(struct seq_file *seq, void *v)
else
seq_printf(seq, "%04x", ntohs(pt->type));
@@ -154309,7 +154692,7 @@ index 2bf8329..ea323e4 100644
}
return 0;
-@@ -347,7 +358,7 @@ static void __net_exit dev_proc_net_exit(struct net *net)
+@@ -348,7 +359,7 @@ static void __net_exit dev_proc_net_exit(struct net *net)
remove_proc_entry("dev", net->proc_net);
}
@@ -154318,7 +154701,7 @@ index 2bf8329..ea323e4 100644
.init = dev_proc_net_init,
.exit = dev_proc_net_exit,
};
-@@ -409,7 +420,7 @@ static void __net_exit dev_mc_net_exit(struct net *net)
+@@ -410,7 +421,7 @@ static void __net_exit dev_mc_net_exit(struct net *net)
remove_proc_entry("dev_mcast", net->proc_net);
}
@@ -154328,10 +154711,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 2b3f76f..66dfd6d 100644
+index 7a0b616..b6f1e17 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
-@@ -289,7 +289,7 @@ static ssize_t carrier_changes_show(struct device *dev,
+@@ -290,7 +290,7 @@ static ssize_t carrier_changes_show(struct device *dev,
{
struct net_device *netdev = to_net_dev(dev);
return sprintf(buf, fmt_dec,
@@ -154412,10 +154795,10 @@ index 94acfc8..01545c0 100644
iph->ttl = 64;
iph->protocol = IPPROTO_UDP;
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
-index 20999aa..a96919e 100644
+index 8b02df0..796c61a 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)
+@@ -3828,7 +3828,7 @@ static int __net_init pg_net_init(struct net *net)
pn->net = net;
INIT_LIST_HEAD(&pn->pktgen_threads);
pn->pktgen_exiting = false;
@@ -154425,7 +154808,7 @@ index 20999aa..a96919e 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 65763c2..4ee3747 100644
+index d69c464..4d62549 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -61,7 +61,7 @@ struct rtnl_link {
@@ -154463,7 +154846,7 @@ index 65763c2..4ee3747 100644
}
EXPORT_SYMBOL_GPL(__rtnl_link_unregister);
-@@ -1243,7 +1246,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
+@@ -1236,7 +1239,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,
@@ -154472,7 +154855,7 @@ index 65763c2..4ee3747 100644
nla_put_u8(skb, IFLA_PROTO_DOWN, dev->proto_down))
goto nla_put_failure;
-@@ -3496,7 +3499,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -3685,7 +3688,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
__rtnl_unlock();
rtnl = net->rtnl;
{
@@ -154534,7 +154917,7 @@ 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 59bf4d7..71bbed8 100644
+index eb12d21..3551c47 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -1046,7 +1046,8 @@ static void skb_headers_offset_update(struct sk_buff *skb, int off)
@@ -154556,7 +154939,7 @@ index 59bf4d7..71bbed8 100644
.update = csum_partial_ext,
.combine = csum_block_add_ext,
};
-@@ -3396,12 +3397,14 @@ void __init skb_init(void)
+@@ -3426,12 +3427,14 @@ void __init skb_init(void)
skbuff_head_cache = kmem_cache_create("skbuff_head_cache",
sizeof(struct sk_buff),
0,
@@ -154574,10 +154957,10 @@ index 59bf4d7..71bbed8 100644
}
diff --git a/net/core/sock.c b/net/core/sock.c
-index 7e73c26..e02877c 100644
+index 25dab8b..51aa624 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -412,7 +412,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -411,13 +411,13 @@ 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) {
@@ -154586,8 +154969,6 @@ index 7e73c26..e02877c 100644
trace_sock_rcvqueue_full(sk, skb);
return -ENOMEM;
}
-@@ -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)) {
- atomic_inc(&sk->sk_drops);
@@ -154595,7 +154976,7 @@ index 7e73c26..e02877c 100644
return -ENOBUFS;
}
-@@ -455,7 +455,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -463,7 +463,7 @@ int __sk_receive_skb(struct sock *sk, struct sk_buff *skb,
skb->dev = NULL;
if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
@@ -154604,7 +154985,7 @@ index 7e73c26..e02877c 100644
goto discard_and_relse;
}
if (nested)
-@@ -473,7 +473,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -481,7 +481,7 @@ int __sk_receive_skb(struct sock *sk, struct sk_buff *skb,
mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
} else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
bh_unlock_sock(sk);
@@ -154613,7 +154994,7 @@ index 7e73c26..e02877c 100644
goto discard_and_relse;
}
-@@ -880,19 +880,6 @@ set_rcvbuf:
+@@ -889,19 +889,6 @@ set_rcvbuf:
}
break;
@@ -154633,7 +155014,7 @@ index 7e73c26..e02877c 100644
case SO_ATTACH_REUSEPORT_CBPF:
ret = -EINVAL;
if (optlen == sizeof(struct sock_fprog)) {
-@@ -906,6 +893,20 @@ set_rcvbuf:
+@@ -915,6 +902,20 @@ set_rcvbuf:
}
break;
@@ -154654,7 +155035,7 @@ index 7e73c26..e02877c 100644
case SO_ATTACH_REUSEPORT_EBPF:
ret = -EINVAL;
if (optlen == sizeof(u32)) {
-@@ -919,6 +920,8 @@ set_rcvbuf:
+@@ -928,6 +929,8 @@ set_rcvbuf:
}
break;
@@ -154663,7 +155044,7 @@ index 7e73c26..e02877c 100644
case SO_DETACH_FILTER:
ret = sk_detach_filter(sk);
break;
-@@ -1028,12 +1031,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1037,12 +1040,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
struct timeval tm;
} v;
@@ -154679,7 +155060,7 @@ index 7e73c26..e02877c 100644
return -EINVAL;
memset(&v, 0, sizeof(v));
-@@ -1171,11 +1174,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1180,11 +1183,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
case SO_PEERNAME:
{
@@ -154693,7 +155074,7 @@ index 7e73c26..e02877c 100644
return -EINVAL;
if (copy_to_user(optval, address, len))
return -EFAULT;
-@@ -1263,7 +1266,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1272,7 +1275,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
if (len > lv)
len = lv;
@@ -154702,7 +155083,16 @@ index 7e73c26..e02877c 100644
return -EFAULT;
lenout:
if (put_user(len, optlen))
-@@ -1543,7 +1546,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
+@@ -1536,7 +1539,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
+ newsk->sk_dst_cache = NULL;
+ newsk->sk_wmem_queued = 0;
+ newsk->sk_forward_alloc = 0;
+- atomic_set(&newsk->sk_drops, 0);
++ atomic_set_unchecked(&newsk->sk_drops, 0);
+ newsk->sk_send_head = NULL;
+ newsk->sk_userlocks = sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
+
+@@ -1565,7 +1568,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();
@@ -154711,7 +155101,7 @@ index 7e73c26..e02877c 100644
/*
* Before updating sk_refcnt, we must commit prior changes to memory
* (Documentation/RCU/rculist_nulls.txt for details)
-@@ -2410,7 +2413,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
+@@ -2494,7 +2497,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
*/
smp_wmb();
atomic_set(&sk->sk_refcnt, 1);
@@ -154720,7 +155110,7 @@ index 7e73c26..e02877c 100644
}
EXPORT_SYMBOL(sock_init_data);
-@@ -2539,6 +2542,7 @@ void sock_enable_timestamp(struct sock *sk, int flag)
+@@ -2618,6 +2621,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)
{
@@ -154728,7 +155118,7 @@ index 7e73c26..e02877c 100644
struct sock_exterr_skb *serr;
struct sk_buff *skb;
int copied, err;
-@@ -2560,7 +2564,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
+@@ -2639,7 +2643,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
sock_recv_timestamp(msg, sk, skb);
serr = SKB_EXT_ERR(skb);
@@ -154738,7 +155128,7 @@ index 7e73c26..e02877c 100644
msg->msg_flags |= MSG_ERRQUEUE;
err = copied;
-@@ -3012,7 +3017,7 @@ static __net_exit void proto_exit_net(struct net *net)
+@@ -3091,7 +3096,7 @@ static __net_exit void proto_exit_net(struct net *net)
}
@@ -154748,7 +155138,7 @@ index 7e73c26..e02877c 100644
.exit = proto_exit_net,
};
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
-index a996ce8..e0d5d3d 100644
+index 6b10573..af9e62e 100644
--- a/net/core/sock_diag.c
+++ b/net/core/sock_diag.c
@@ -14,7 +14,7 @@
@@ -154776,7 +155166,16 @@ index a996ce8..e0d5d3d 100644
}
}
-@@ -192,8 +192,11 @@ int sock_diag_register(const struct sock_diag_handler *hndl)
+@@ -67,7 +67,7 @@ int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attrtype)
+ mem[SK_MEMINFO_WMEM_QUEUED] = sk->sk_wmem_queued;
+ mem[SK_MEMINFO_OPTMEM] = atomic_read(&sk->sk_omem_alloc);
+ mem[SK_MEMINFO_BACKLOG] = sk->sk_backlog.len;
+- mem[SK_MEMINFO_DROPS] = atomic_read(&sk->sk_drops);
++ mem[SK_MEMINFO_DROPS] = atomic_read_unchecked(&sk->sk_drops);
+
+ return nla_put(skb, attrtype, sizeof(mem), &mem);
+ }
+@@ -193,8 +193,11 @@ int sock_diag_register(const struct sock_diag_handler *hndl)
mutex_lock(&sock_diag_table_mutex);
if (sock_diag_handlers[hndl->family])
err = -EBUSY;
@@ -154789,7 +155188,7 @@ index a996ce8..e0d5d3d 100644
mutex_unlock(&sock_diag_table_mutex);
return err;
-@@ -209,7 +212,9 @@ void sock_diag_unregister(const struct sock_diag_handler *hnld)
+@@ -210,7 +213,9 @@ void sock_diag_unregister(const struct sock_diag_handler *hnld)
mutex_lock(&sock_diag_table_mutex);
BUG_ON(sock_diag_handlers[family] != hnld);
@@ -154800,7 +155199,7 @@ index a996ce8..e0d5d3d 100644
}
EXPORT_SYMBOL_GPL(sock_diag_unregister);
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
-index a6beb7b..4d833b2 100644
+index 0df2aa6..7db59f7 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -36,7 +36,7 @@ static int rps_sock_flow_sysctl(struct ctl_table *table, int write,
@@ -154839,7 +155238,7 @@ index a6beb7b..4d833b2 100644
{
.procname = "bpf_jit_enable",
.data = &bpf_jit_enable,
-@@ -419,13 +419,12 @@ static struct ctl_table netns_core_table[] = {
+@@ -428,13 +428,12 @@ static struct ctl_table netns_core_table[] = {
static __net_init int sysctl_core_net_init(struct net *net)
{
@@ -154855,7 +155254,7 @@ index a6beb7b..4d833b2 100644
if (tbl == NULL)
goto err_dup;
-@@ -435,17 +434,16 @@ static __net_init int sysctl_core_net_init(struct net *net)
+@@ -444,17 +443,16 @@ static __net_init int sysctl_core_net_init(struct net *net)
if (net->user_ns != &init_user_ns) {
tbl[0].procname = NULL;
}
@@ -154877,7 +155276,7 @@ index a6beb7b..4d833b2 100644
err_dup:
return -ENOMEM;
}
-@@ -460,7 +458,7 @@ static __net_exit void sysctl_core_net_exit(struct net *net)
+@@ -469,7 +467,7 @@ static __net_exit void sysctl_core_net_exit(struct net *net)
kfree(tbl);
}
@@ -154934,10 +155333,10 @@ index 5325b54..a0d4d69 100644
*lenp = len;
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
-index c28c474..dad38e7 100644
+index eff5dfc..966be0a 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
-@@ -980,7 +980,7 @@ static struct packet_type dsa_pack_type __read_mostly = {
+@@ -966,7 +966,7 @@ static struct packet_type dsa_pack_type __read_mostly = {
.func = dsa_switch_rcv,
};
@@ -154946,11 +155345,40 @@ index c28c474..dad38e7 100644
.notifier_call = dsa_slave_netdevice_event,
};
+diff --git a/net/dsa/slave.c b/net/dsa/slave.c
+index 152436c..d632d9ee 100644
+--- a/net/dsa/slave.c
++++ b/net/dsa/slave.c
+@@ -893,7 +893,7 @@ static const struct ethtool_ops dsa_slave_ethtool_ops = {
+ .get_eee = dsa_slave_get_eee,
+ };
+
+-static struct ethtool_ops dsa_cpu_port_ethtool_ops;
++static ethtool_ops_no_const dsa_cpu_port_ethtool_ops __read_only;
+
+ static const struct net_device_ops dsa_slave_netdev_ops = {
+ .ndo_open = dsa_slave_open,
+@@ -1127,6 +1127,7 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
+ if (master->ethtool_ops != &dsa_cpu_port_ethtool_ops) {
+ memcpy(&dst->master_ethtool_ops, master->ethtool_ops,
+ sizeof(struct ethtool_ops));
++ pax_open_kernel();
+ memcpy(&dsa_cpu_port_ethtool_ops, &dst->master_ethtool_ops,
+ sizeof(struct ethtool_ops));
+ dsa_cpu_port_ethtool_ops.get_sset_count =
+@@ -1135,6 +1136,7 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
+ dsa_cpu_port_get_ethtool_stats;
+ dsa_cpu_port_ethtool_ops.get_strings =
+ dsa_cpu_port_get_strings;
++ pax_close_kernel();
+ master->ethtool_ops = &dsa_cpu_port_ethtool_ops;
+ }
+ eth_hw_addr_inherit(slave_dev, master);
diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c
-index c7d1adc..e4d688b 100644
+index 16737cd..812d5d5 100644
--- a/net/hsr/hsr_device.c
+++ b/net/hsr/hsr_device.c
-@@ -232,7 +232,7 @@ static netdev_features_t hsr_fix_features(struct net_device *dev,
+@@ -233,7 +233,7 @@ static netdev_features_t hsr_fix_features(struct net_device *dev,
}
@@ -154960,10 +155388,10 @@ index c7d1adc..e4d688b 100644
struct hsr_priv *hsr = netdev_priv(dev);
struct hsr_port *master;
diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
-index a2c7e4c..3dc9f67 100644
+index d4d1617..06282b4 100644
--- a/net/hsr/hsr_netlink.c
+++ b/net/hsr/hsr_netlink.c
-@@ -102,7 +102,7 @@ nla_put_failure:
+@@ -108,7 +108,7 @@ nla_put_failure:
return -EMSGSIZE;
}
@@ -154973,7 +155401,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 0023c90..5cda011 100644
+index dd085db..0837270 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)
@@ -154983,7 +155411,7 @@ index 0023c90..5cda011 100644
-static struct rtnl_link_ops lowpan_link_ops __read_mostly = {
+static struct rtnl_link_ops lowpan_link_ops = {
.kind = "lowpan",
- .priv_size = LOWPAN_PRIV_SIZE(sizeof(struct lowpan_dev_info)),
+ .priv_size = LOWPAN_PRIV_SIZE(sizeof(struct lowpan_802154_dev)),
.setup = lowpan_setup,
diff --git a/net/ieee802154/6lowpan/reassembly.c b/net/ieee802154/6lowpan/reassembly.c
index 30d875d..760f4f1 100644
@@ -155057,10 +155485,10 @@ index c35fdfa..063ef67 100644
return NULL;
}
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
-index 7ad0e56..d8028ad 100644
+index d39e9e4..060428e 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
-@@ -1425,7 +1425,7 @@ int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
+@@ -1445,7 +1445,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)
@@ -155069,7 +155497,7 @@ index 7ad0e56..d8028ad 100644
#endif
return -EINVAL;
}
-@@ -1634,7 +1634,7 @@ static __net_exit void ipv4_mib_exit_net(struct net *net)
+@@ -1655,7 +1655,7 @@ static __net_exit void ipv4_mib_exit_net(struct net *net)
free_percpu(net->mib.tcp_statistics);
}
@@ -155078,7 +155506,7 @@ index 7ad0e56..d8028ad 100644
.init = ipv4_mib_init_net,
.exit = ipv4_mib_exit_net,
};
-@@ -1675,7 +1675,7 @@ static __net_exit void inet_exit_net(struct net *net)
+@@ -1696,7 +1696,7 @@ static __net_exit void inet_exit_net(struct net *net)
{
}
@@ -155088,7 +155516,7 @@ index 7ad0e56..d8028ad 100644
.exit = inet_exit_net,
};
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
-index c34c754..df0b2c8 100644
+index 89a8cac4..7d3fdc5 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)
@@ -155201,10 +155629,10 @@ index e333bc8..281d54d 100644
.exit = devinet_exit_net,
};
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
-index 63566ec..82e85abc8 100644
+index ef2ebeb..5e57972 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
-@@ -1139,12 +1139,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
+@@ -1140,12 +1140,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
#ifdef CONFIG_IP_ROUTE_MULTIPATH
fib_sync_up(dev, RTNH_F_DEAD);
#endif
@@ -155219,7 +155647,7 @@ index 63566ec..82e85abc8 100644
if (!ifa->ifa_dev->ifa_list) {
/* Last address was deleted from this interface.
* Disable IP.
-@@ -1184,7 +1184,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
+@@ -1185,7 +1185,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
#ifdef CONFIG_IP_ROUTE_MULTIPATH
fib_sync_up(dev, RTNH_F_DEAD);
#endif
@@ -155229,10 +155657,10 @@ index 63566ec..82e85abc8 100644
break;
case NETDEV_DOWN:
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
-index 2b68418..fb7bee8 100644
+index 539fa26..70f9bd0 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
-@@ -913,7 +913,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh)
+@@ -916,7 +916,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh)
nh->nh_saddr = inet_select_addr(nh->nh_dev,
nh->nh_gw,
nh->nh_parent->fib_scope);
@@ -155242,7 +155670,7 @@ index 2b68418..fb7bee8 100644
return nh->nh_saddr;
}
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
-index 6333489..be244b4 100644
+index 38abe70..5e03195 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -1228,7 +1228,7 @@ fail:
@@ -155255,11 +155683,11 @@ index 6333489..be244b4 100644
.exit = icmp_sk_exit,
};
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
-index bc5196e..dbe0be2 100644
+index fa8c398..5169c40 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
-@@ -662,8 +662,8 @@ struct sock *inet_csk_clone_lock(const struct sock *sk,
- newsk->sk_write_space = sk_stream_write_space;
+@@ -665,8 +665,8 @@ struct sock *inet_csk_clone_lock(const struct sock *sk,
+ sock_reset_flag(newsk, SOCK_RCU_FREE);
newsk->sk_mark = inet_rsk(req)->ir_mark;
- atomic64_set(&newsk->sk_cookie,
@@ -155270,10 +155698,10 @@ index bc5196e..dbe0be2 100644
newicsk->icsk_retransmits = 0;
newicsk->icsk_backoff = 0;
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
-index 5fdb02f..dc6f124 100644
+index 25af124..142abbb 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
-@@ -986,7 +986,7 @@ static int inet_diag_rcv_msg_compat(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -1004,7 +1004,7 @@ static int inet_diag_rcv_msg_compat(struct sk_buff *skb, struct nlmsghdr *nlh)
return -EINVAL;
}
{
@@ -155282,7 +155710,7 @@ index 5fdb02f..dc6f124 100644
.dump = inet_diag_dump_compat,
};
return netlink_dump_start(net->diag_nlsk, skb, nlh, &c);
-@@ -1017,7 +1017,7 @@ static int inet_diag_handler_cmd(struct sk_buff *skb, struct nlmsghdr *h)
+@@ -1035,7 +1035,7 @@ static int inet_diag_handler_cmd(struct sk_buff *skb, struct nlmsghdr *h)
return -EINVAL;
}
{
@@ -155292,7 +155720,7 @@ index 5fdb02f..dc6f124 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 0d9e9d7..9679cf4 100644
+index 77c20a4..76261b6 100644
--- a/net/ipv4/inet_hashtables.c
+++ b/net/ipv4/inet_hashtables.c
@@ -19,6 +19,7 @@
@@ -155312,7 +155740,7 @@ index 0d9e9d7..9679cf4 100644
/*
* Allocate and initialize a new local port bind bucket.
* The bindhash mutex for snum's hash chain must be held here.
-@@ -665,6 +668,9 @@ ok:
+@@ -642,6 +645,9 @@ ok:
spin_unlock(&head->lock);
if (tw)
inet_twsk_deschedule_put(tw);
@@ -155323,7 +155751,7 @@ index 0d9e9d7..9679cf4 100644
return 0;
}
diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c
-index c67f9bd..7a108d1 100644
+index 2065816..a85ea16 100644
--- a/net/ipv4/inet_timewait_sock.c
+++ b/net/ipv4/inet_timewait_sock.c
@@ -186,7 +186,7 @@ struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk,
@@ -155349,7 +155777,7 @@ 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 efbd47d..cb8f074 100644
+index bbe7f72..7a5a57f 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -282,7 +282,7 @@ static int ip_frag_too_far(struct ipq *qp)
@@ -155401,10 +155829,10 @@ index efbd47d..cb8f074 100644
return -ENOMEM;
}
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
-index 4cc8421..ba5f709 100644
+index 1d000af..19a5f33 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
-@@ -116,7 +116,7 @@ static bool log_ecn_error = true;
+@@ -110,7 +110,7 @@ static bool log_ecn_error = true;
module_param(log_ecn_error, bool, 0644);
MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
@@ -155413,7 +155841,7 @@ index 4cc8421..ba5f709 100644
static int ipgre_tunnel_init(struct net_device *dev);
static int ipgre_net_id __read_mostly;
-@@ -1231,7 +1231,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
+@@ -1082,7 +1082,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
[IFLA_GRE_COLLECT_METADATA] = { .type = NLA_FLAG },
};
@@ -155422,7 +155850,7 @@ index 4cc8421..ba5f709 100644
.kind = "gre",
.maxtype = IFLA_GRE_MAX,
.policy = ipgre_policy,
-@@ -1246,7 +1246,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
+@@ -1097,7 +1097,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
.get_link_net = ip_tunnel_get_link_net,
};
@@ -155432,7 +155860,7 @@ index 4cc8421..ba5f709 100644
.maxtype = IFLA_GRE_MAX,
.policy = ipgre_policy,
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
-index e3d7827..e59d2a7 100644
+index 4b351af..d5db78a 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -148,6 +148,10 @@
@@ -155449,7 +155877,7 @@ index e3d7827..e59d2a7 100644
@@ -223,6 +227,9 @@ static int ip_local_deliver_finish(struct net *net, struct sock *sk, struct sk_b
if (!raw) {
if (xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
- IP_INC_STATS_BH(net, IPSTATS_MIB_INUNKNOWNPROTOS);
+ __IP_INC_STATS(net, IPSTATS_MIB_INUNKNOWNPROTOS);
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
+ if (!grsec_enable_blackhole || (skb->dev->flags & IFF_LOOPBACK))
+#endif
@@ -155457,10 +155885,10 @@ index e3d7827..e59d2a7 100644
ICMP_PROT_UNREACH, 0);
}
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
-index 035ad64..a2f9d47 100644
+index 71a52f4d..2bab905 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
-@@ -1311,7 +1311,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
+@@ -1325,7 +1325,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;
@@ -155470,7 +155898,7 @@ index 035ad64..a2f9d47 100644
return -EFAULT;
return 0;
}
-@@ -1447,7 +1448,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
+@@ -1461,7 +1462,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
if (sk->sk_type != SOCK_STREAM)
return -ENOPROTOOPT;
@@ -155502,10 +155930,10 @@ index a917903..b0bdff6 100644
.maxtype = IFLA_VTI_MAX,
.policy = vti_policy,
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
-index 2ed9dd2..0682cfe 100644
+index 1d71c40..3f8a6fa 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
-@@ -332,7 +332,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg)
+@@ -334,7 +334,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg)
mm_segment_t oldfs = get_fs();
set_fs(get_ds());
@@ -155514,7 +155942,7 @@ index 2ed9dd2..0682cfe 100644
set_fs(oldfs);
return res;
}
-@@ -343,7 +343,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg)
+@@ -345,7 +345,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg)
mm_segment_t oldfs = get_fs();
set_fs(get_ds());
@@ -155523,7 +155951,7 @@ index 2ed9dd2..0682cfe 100644
set_fs(oldfs);
return res;
}
-@@ -354,7 +354,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg)
+@@ -356,7 +356,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg)
mm_segment_t oldfs = get_fs();
set_fs(get_ds());
@@ -155533,7 +155961,7 @@ index 2ed9dd2..0682cfe 100644
return res;
}
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
-index ec51d02..4e90ba9 100644
+index 9783701..1a0fb2e 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");
@@ -155545,7 +155973,7 @@ index ec51d02..4e90ba9 100644
static int ipip_err(struct sk_buff *skb, u32 info)
{
-@@ -484,7 +484,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = {
+@@ -483,7 +483,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = {
[IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
};
@@ -155555,10 +155983,10 @@ index ec51d02..4e90ba9 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 85d60c6..a109f11 100644
+index 2033f92..78ffbcc 100644
--- a/net/ipv4/netfilter/arp_tables.c
+++ b/net/ipv4/netfilter/arp_tables.c
-@@ -897,14 +897,14 @@ static int compat_table_info(const struct xt_table_info *info,
+@@ -788,13 +788,13 @@ static int compat_table_info(const struct xt_table_info *info,
#endif
static int get_info(struct net *net, void __user *user,
@@ -155569,14 +155997,12 @@ index 85d60c6..a109f11 100644
struct xt_table *t;
int ret;
-- if (*len != sizeof(struct arpt_getinfo)) {
-- duprintf("length %u != %Zu\n", *len,
-+ if (len != sizeof(struct arpt_getinfo)) {
-+ duprintf("length %u != %Zu\n", len,
- sizeof(struct arpt_getinfo));
+- if (*len != sizeof(struct arpt_getinfo))
++ if (len != sizeof(struct arpt_getinfo))
return -EINVAL;
- }
-@@ -941,7 +941,7 @@ static int get_info(struct net *net, void __user *user,
+
+ if (copy_from_user(name, user, sizeof(name)) != 0)
+@@ -829,7 +829,7 @@ static int get_info(struct net *net, void __user *user,
info.size = private->size;
strcpy(info.name, name);
@@ -155585,7 +156011,7 @@ index 85d60c6..a109f11 100644
ret = -EFAULT;
else
ret = 0;
-@@ -1589,7 +1589,7 @@ static int compat_do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user,
+@@ -1439,7 +1439,7 @@ static int compat_do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user,
switch (cmd) {
case ARPT_SO_GET_INFO:
@@ -155594,7 +156020,7 @@ index 85d60c6..a109f11 100644
break;
case ARPT_SO_GET_ENTRIES:
ret = compat_get_entries(sock_net(sk), user, len);
-@@ -1634,7 +1634,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len
+@@ -1483,7 +1483,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len
switch (cmd) {
case ARPT_SO_GET_INFO:
@@ -155604,10 +156030,10 @@ index 85d60c6..a109f11 100644
case ARPT_SO_GET_ENTRIES:
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
-index 0984ea3..d1125b0 100644
+index 54906e0..d7a3430 100644
--- a/net/ipv4/netfilter/ip_tables.c
+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -1082,14 +1082,14 @@ static int compat_table_info(const struct xt_table_info *info,
+@@ -957,13 +957,13 @@ static int compat_table_info(const struct xt_table_info *info,
#endif
static int get_info(struct net *net, void __user *user,
@@ -155618,14 +156044,12 @@ index 0984ea3..d1125b0 100644
struct xt_table *t;
int ret;
-- if (*len != sizeof(struct ipt_getinfo)) {
-- duprintf("length %u != %zu\n", *len,
-+ if (len != sizeof(struct ipt_getinfo)) {
-+ duprintf("length %u != %zu\n", len,
- sizeof(struct ipt_getinfo));
+- if (*len != sizeof(struct ipt_getinfo))
++ if (len != sizeof(struct ipt_getinfo))
return -EINVAL;
- }
-@@ -1126,7 +1126,7 @@ static int get_info(struct net *net, void __user *user,
+
+ if (copy_from_user(name, user, sizeof(name)) != 0)
+@@ -998,7 +998,7 @@ static int get_info(struct net *net, void __user *user,
info.size = private->size;
strcpy(info.name, name);
@@ -155634,7 +156058,7 @@ index 0984ea3..d1125b0 100644
ret = -EFAULT;
else
ret = 0;
-@@ -1829,7 +1829,7 @@ compat_do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1661,7 +1661,7 @@ compat_do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IPT_SO_GET_INFO:
@@ -155643,7 +156067,7 @@ index 0984ea3..d1125b0 100644
break;
case IPT_SO_GET_ENTRIES:
ret = compat_get_entries(sock_net(sk), user, len);
-@@ -1876,7 +1876,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1707,7 +1707,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IPT_SO_GET_INFO:
@@ -155666,7 +156090,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 cf9700b..9a5ded4 100644
+index 66ddcb6..0de0097 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -59,7 +59,7 @@ struct ping_table {
@@ -155705,7 +156129,7 @@ index cf9700b..9a5ded4 100644
info, (u8 *)icmph);
#endif
}
-@@ -923,10 +923,10 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
+@@ -924,10 +924,10 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
}
if (inet6_sk(sk)->rxopt.all)
@@ -155718,7 +156142,7 @@ index cf9700b..9a5ded4 100644
else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags)
ip_cmsg_recv(msg, skb);
#endif
-@@ -1123,7 +1123,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -1124,7 +1124,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,
@@ -155775,7 +156199,7 @@ index 9f665b6..5900fae 100644
.exit = ip_proc_exit_net,
};
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
-index 8d22de7..af2d996 100644
+index 438f50c..96538dd 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -325,7 +325,7 @@ static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb)
@@ -155787,7 +156211,7 @@ index 8d22de7..af2d996 100644
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -785,16 +785,20 @@ static int raw_init(struct sock *sk)
+@@ -786,16 +786,20 @@ static int raw_init(struct sock *sk)
static int raw_seticmpfilter(struct sock *sk, char __user *optval, int optlen)
{
@@ -155809,7 +156233,7 @@ index 8d22de7..af2d996 100644
if (get_user(len, optlen))
goto out;
-@@ -804,8 +808,8 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o
+@@ -805,8 +809,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;
@@ -155820,7 +156244,7 @@ index 8d22de7..af2d996 100644
goto out;
ret = 0;
out: return ret;
-@@ -1034,7 +1038,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
+@@ -1035,7 +1039,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),
@@ -155829,7 +156253,7 @@ index 8d22de7..af2d996 100644
}
static int raw_seq_show(struct seq_file *seq, void *v)
-@@ -1097,7 +1101,7 @@ static __net_exit void raw_exit_net(struct net *net)
+@@ -1098,7 +1102,7 @@ static __net_exit void raw_exit_net(struct net *net)
remove_proc_entry("raw", net->proc_net);
}
@@ -155839,7 +156263,7 @@ index 8d22de7..af2d996 100644
.exit = raw_exit_net,
};
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
-index 60398a9..e7e6456 100644
+index a1f2830..21241de 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -232,7 +232,7 @@ static const struct seq_operations rt_cache_seq_ops = {
@@ -155905,7 +156329,7 @@ index 60398a9..e7e6456 100644
}
EXPORT_SYMBOL(ip_idents_reserve);
-@@ -2768,34 +2768,34 @@ static struct ctl_table ipv4_route_flush_table[] = {
+@@ -2772,34 +2772,34 @@ static struct ctl_table ipv4_route_flush_table[] = {
.maxlen = sizeof(int),
.mode = 0200,
.proc_handler = ipv4_sysctl_rtcache_flush,
@@ -155948,7 +156372,7 @@ index 60398a9..e7e6456 100644
err_dup:
return -ENOMEM;
}
-@@ -2810,7 +2810,7 @@ static __net_exit void sysctl_route_net_exit(struct net *net)
+@@ -2814,7 +2814,7 @@ static __net_exit void sysctl_route_net_exit(struct net *net)
kfree(tbl);
}
@@ -155957,7 +156381,7 @@ index 60398a9..e7e6456 100644
.init = sysctl_route_net_init,
.exit = sysctl_route_net_exit,
};
-@@ -2818,14 +2818,14 @@ static __net_initdata struct pernet_operations sysctl_route_ops = {
+@@ -2822,14 +2822,14 @@ static __net_initdata struct pernet_operations sysctl_route_ops = {
static __net_init int rt_genid_init(struct net *net)
{
@@ -155975,7 +156399,7 @@ index 60398a9..e7e6456 100644
.init = rt_genid_init,
};
-@@ -2849,7 +2849,7 @@ static void __net_exit ipv4_inetpeer_exit(struct net *net)
+@@ -2853,7 +2853,7 @@ static void __net_exit ipv4_inetpeer_exit(struct net *net)
kfree(bp);
}
@@ -155984,7 +156408,7 @@ index 60398a9..e7e6456 100644
.init = ipv4_inetpeer_init,
.exit = ipv4_inetpeer_exit,
};
-@@ -2863,11 +2863,7 @@ int __init ip_rt_init(void)
+@@ -2867,11 +2867,7 @@ int __init ip_rt_init(void)
int rc = 0;
int cpu;
@@ -155998,7 +156422,7 @@ index 60398a9..e7e6456 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 03112a3..8890b4a 100644
+index 1cb67de..2acf1f0 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,
@@ -156055,7 +156479,7 @@ index 03112a3..8890b4a 100644
struct tcp_fastopen_context *ctxt;
int ret;
u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */
-@@ -965,13 +965,12 @@ static struct ctl_table ipv4_net_table[] = {
+@@ -976,13 +976,12 @@ static struct ctl_table ipv4_net_table[] = {
static __net_init int ipv4_sysctl_init_net(struct net *net)
{
@@ -156071,7 +156495,7 @@ index 03112a3..8890b4a 100644
if (!table)
goto err_alloc;
-@@ -980,7 +979,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
+@@ -991,7 +990,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
table[i].data += (void *)net - (void *)&init_net;
}
@@ -156083,7 +156507,7 @@ index 03112a3..8890b4a 100644
if (!net->ipv4.ipv4_hdr)
goto err_reg;
-@@ -1009,7 +1011,7 @@ static __net_exit void ipv4_sysctl_exit_net(struct net *net)
+@@ -1020,7 +1022,7 @@ static __net_exit void ipv4_sysctl_exit_net(struct net *net)
kfree(table);
}
@@ -156093,7 +156517,7 @@ index 03112a3..8890b4a 100644
.exit = ipv4_sysctl_exit_net,
};
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
-index c124c3c..40340ab 100644
+index 42bf89a..adc7e6d 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -268,11 +268,13 @@ static void tcp_ecn_rcv_synack(struct tcp_sock *tp, const struct tcphdr *th)
@@ -156119,7 +156543,7 @@ index c124c3c..40340ab 100644
sk->sk_max_pacing_rate);
}
-@@ -4722,7 +4724,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
+@@ -4735,7 +4737,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
* simplifies code)
*/
static void
@@ -156128,7 +156552,7 @@ index c124c3c..40340ab 100644
struct sk_buff *head, struct sk_buff *tail,
u32 start, u32 end)
{
-@@ -5720,6 +5722,7 @@ discard:
+@@ -5713,6 +5715,7 @@ discard:
tcp_paws_reject(&tp->rx_opt, 0))
goto discard_and_undo;
@@ -156136,7 +156560,7 @@ index c124c3c..40340ab 100644
if (th->syn) {
/* We see SYN without ACK. It is attempt of
* simultaneous connect with crossed SYNs.
-@@ -5771,6 +5774,7 @@ discard:
+@@ -5764,6 +5767,7 @@ discard:
goto discard;
#endif
}
@@ -156144,7 +156568,7 @@ index c124c3c..40340ab 100644
/* "fifth, if neither of the SYN or RST bits is set then
* drop the segment and return."
*/
-@@ -5816,7 +5820,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
+@@ -5807,7 +5811,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
goto discard;
if (th->syn) {
@@ -156153,7 +156577,7 @@ index c124c3c..40340ab 100644
goto discard;
if (icsk->icsk_af_ops->conn_request(sk, skb) < 0)
return 1;
-@@ -6148,7 +6152,7 @@ struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops,
+@@ -6124,7 +6128,7 @@ struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops,
kmemcheck_annotate_bitfield(ireq, flags);
ireq->opt = NULL;
@@ -156163,7 +156587,7 @@ index c124c3c..40340ab 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 ad45050..8203d2b 100644
+index 3708de2..2b40e93 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -88,6 +88,10 @@ int sysctl_tcp_tw_reuse __read_mostly;
@@ -156177,7 +156601,7 @@ index ad45050..8203d2b 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);
-@@ -1423,6 +1427,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
+@@ -1425,6 +1429,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0;
reset:
@@ -156187,10 +156611,10 @@ index ad45050..8203d2b 100644
tcp_v4_send_reset(rsk, skb);
discard:
kfree_skb(skb);
-@@ -1589,12 +1596,19 @@ int tcp_v4_rcv(struct sk_buff *skb)
+@@ -1592,12 +1599,19 @@ int tcp_v4_rcv(struct sk_buff *skb)
lookup:
sk = __inet_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), th->source,
- th->dest);
+ th->dest, &refcounted);
- if (!sk)
+ if (!sk) {
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
@@ -156210,9 +156634,9 @@ index ad45050..8203d2b 100644
if (sk->sk_state == TCP_NEW_SYN_RECV) {
struct request_sock *req = inet_reqsk(sk);
-@@ -1679,6 +1693,10 @@ csum_error:
+@@ -1687,6 +1701,10 @@ csum_error:
bad_packet:
- TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
+ __TCP_INC_STATS(net, TCP_MIB_INERRS);
} else {
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
+ if (!grsec_enable_blackhole || (ret == 1 &&
@@ -156221,7 +156645,7 @@ index ad45050..8203d2b 100644
tcp_v4_send_reset(NULL, skb);
}
-@@ -2419,7 +2437,7 @@ static void __net_exit tcp_sk_exit_batch(struct list_head *net_exit_list)
+@@ -2425,7 +2443,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);
}
@@ -156231,10 +156655,10 @@ index ad45050..8203d2b 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 7b7eec43..dfa9f1c 100644
+index b617826..c544a96 100644
--- a/net/ipv4/tcp_metrics.c
+++ b/net/ipv4/tcp_metrics.c
-@@ -1164,7 +1164,7 @@ static void __net_exit tcp_net_metrics_exit(struct net *net)
+@@ -1166,7 +1166,7 @@ static void __net_exit tcp_net_metrics_exit(struct net *net)
tcp_metrics_flush_all(net);
}
@@ -156244,7 +156668,7 @@ index 7b7eec43..dfa9f1c 100644
.exit = tcp_net_metrics_exit,
};
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
-index acb366d..2d66ef0 100644
+index 4b95ec4..4a83836 100644
--- a/net/ipv4/tcp_minisocks.c
+++ b/net/ipv4/tcp_minisocks.c
@@ -27,6 +27,10 @@
@@ -156258,7 +156682,7 @@ index acb366d..2d66ef0 100644
int sysctl_tcp_abort_on_overflow __read_mostly;
struct inet_timewait_death_row tcp_death_row = {
-@@ -781,7 +785,10 @@ embryonic_reset:
+@@ -784,7 +788,10 @@ embryonic_reset:
* avoid becoming vulnerable to outside attack aiming at
* resetting legit local connections.
*/
@@ -156284,7 +156708,7 @@ index f6c50af..1eb9aa5 100644
cnt += width;
}
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
-index 49bc474..9f9767d 100644
+index debdd8b..7bcef89 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -22,6 +22,10 @@
@@ -156313,7 +156737,7 @@ index 49bc474..9f9767d 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 e9853df..4b57916 100644
+index 4aed8fc..7072373 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -87,6 +87,7 @@
@@ -156335,7 +156759,7 @@ index e9853df..4b57916 100644
struct udp_table udp_table __read_mostly;
EXPORT_SYMBOL(udp_table);
-@@ -696,6 +701,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk,
+@@ -614,6 +619,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk,
return true;
}
@@ -156345,7 +156769,7 @@ index e9853df..4b57916 100644
/*
* This routine is called by the ICMP module when it gets some
* sort of error condition. If err < 0 then the socket should
-@@ -1022,9 +1030,18 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
+@@ -940,9 +948,18 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
dport = usin->sin_port;
if (dport == 0)
return -EINVAL;
@@ -156364,64 +156788,59 @@ index e9853df..4b57916 100644
daddr = inet->inet_daddr;
dport = inet->inet_dport;
/* Open fast path for connected socket.
-@@ -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));
+@@ -1199,7 +1216,7 @@ static unsigned int first_packet_length(struct sock *sk)
+ IS_UDPLITE(sk));
+ __UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS,
+ IS_UDPLITE(sk));
- atomic_inc(&sk->sk_drops);
+ atomic_inc_unchecked(&sk->sk_drops);
__skb_unlink(skb, rcvq);
__skb_queue_tail(&list_kill, skb);
}
-@@ -1362,6 +1379,10 @@ try_again:
- if (!skb)
- goto out;
+@@ -1301,10 +1318,13 @@ try_again:
+ goto csum_copy_err;
+ }
-+ err = gr_search_udp_recvmsg(sk, skb);
-+ if (err)
-+ goto out_free;
++ if (likely(!err))
++ err = gr_search_udp_recvmsg(sk, skb);
+
- ulen = skb->len - sizeof(struct udphdr);
- copied = len;
- if (copied > ulen)
-@@ -1395,7 +1416,7 @@ try_again:
if (unlikely(err)) {
trace_kfree_skb(skb, udp_recvmsg);
if (!peeked) {
- atomic_inc(&sk->sk_drops);
+ atomic_inc_unchecked(&sk->sk_drops);
- UDP_INC_STATS_USER(sock_net(sk),
- UDP_MIB_INERRORS, is_udplite);
+ UDP_INC_STATS(sock_net(sk),
+ UDP_MIB_INERRORS, is_udplite);
}
-@@ -1697,7 +1718,7 @@ csum_error:
- UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
+@@ -1611,7 +1631,7 @@ csum_error:
+ __UDP_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
drop:
- UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
+ __UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
- atomic_inc(&sk->sk_drops);
+ atomic_inc_unchecked(&sk->sk_drops);
kfree_skb(skb);
return -1;
}
-@@ -1715,7 +1736,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
- skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
+@@ -1669,7 +1689,7 @@ start_lookup:
+ nskb = skb_clone(skb, GFP_ATOMIC);
- if (!skb1) {
+ if (unlikely(!nskb)) {
- atomic_inc(&sk->sk_drops);
+ atomic_inc_unchecked(&sk->sk_drops);
- UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
- IS_UDPLITE(sk));
- UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -1921,6 +1942,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+ __UDP_INC_STATS(net, UDP_MIB_RCVBUFERRORS,
+ IS_UDPLITE(sk));
+ __UDP_INC_STATS(net, UDP_MIB_INERRORS,
+@@ -1810,6 +1830,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);
+ __UDP_INC_STATS(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
+ if (!grsec_enable_blackhole || (skb->dev->flags & IFF_LOOPBACK))
+#endif
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
/*
-@@ -2529,7 +2553,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -2375,7 +2398,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,
@@ -156541,7 +156960,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 8ec4b30..fee6f55 100644
+index 47f837a..95f8192 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -179,7 +179,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
@@ -156562,7 +156981,7 @@ index 8ec4b30..fee6f55 100644
.autoconf = 1,
.force_mld_version = 0,
.mldv1_unsolicited_report_interval = 10 * HZ,
-@@ -651,7 +651,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb,
+@@ -650,7 +650,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb,
idx = 0;
head = &net->dev_index_head[h];
rcu_read_lock();
@@ -156571,7 +156990,7 @@ index 8ec4b30..fee6f55 100644
net->dev_base_seq;
hlist_for_each_entry_rcu(dev, head, index_hlist) {
if (idx < s_idx)
-@@ -2597,7 +2597,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
+@@ -2596,7 +2596,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
p.iph.ihl = 5;
p.iph.protocol = IPPROTO_IPV6;
p.iph.ttl = 64;
@@ -156580,7 +156999,7 @@ index 8ec4b30..fee6f55 100644
if (ops->ndo_do_ioctl) {
mm_segment_t oldfs = get_fs();
-@@ -4026,16 +4026,23 @@ static const struct file_operations if6_fops = {
+@@ -4025,16 +4025,23 @@ static const struct file_operations if6_fops = {
.release = seq_release_net,
};
@@ -156605,7 +157024,7 @@ index 8ec4b30..fee6f55 100644
}
static struct pernet_operations if6_proc_net_ops = {
-@@ -4654,7 +4661,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
+@@ -4653,7 +4660,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();
@@ -156614,7 +157033,7 @@ index 8ec4b30..fee6f55 100644
for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
idx = 0;
head = &net->dev_index_head[h];
-@@ -4867,7 +4874,7 @@ static inline size_t inet6_if_nlmsg_size(void)
+@@ -4866,7 +4873,7 @@ static inline size_t inet6_if_nlmsg_size(void)
+ nla_total_size(inet6_ifla6_size()); /* IFLA_PROTINFO */
}
@@ -156623,7 +157042,7 @@ index 8ec4b30..fee6f55 100644
int items, int bytes)
{
int i;
-@@ -4877,7 +4884,7 @@ static inline void __snmp6_fill_statsdev(u64 *stats, atomic_long_t *mib,
+@@ -4876,7 +4883,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++)
@@ -156632,7 +157051,7 @@ index 8ec4b30..fee6f55 100644
memset(&stats[items], 0, pad);
}
-@@ -5332,7 +5339,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
+@@ -5333,7 +5340,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
rt_genid_bump_ipv6(net);
break;
}
@@ -156641,7 +157060,7 @@ index 8ec4b30..fee6f55 100644
}
static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
-@@ -5352,7 +5359,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
+@@ -5353,7 +5360,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
@@ -156650,7 +157069,7 @@ index 8ec4b30..fee6f55 100644
int ret;
/*
-@@ -5375,7 +5382,7 @@ static
+@@ -5376,7 +5383,7 @@ static
int addrconf_sysctl_hop_limit(struct ctl_table *ctl, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -156659,7 +157078,7 @@ index 8ec4b30..fee6f55 100644
int min_hl = 1, max_hl = 255;
lctl = *ctl;
-@@ -5391,7 +5398,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
+@@ -5392,7 +5399,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
{
struct inet6_dev *idev = ctl->extra1;
int min_mtu = IPV6_MIN_MTU;
@@ -156668,7 +157087,7 @@ index 8ec4b30..fee6f55 100644
lctl = *ctl;
lctl.extra1 = &min_mtu;
-@@ -5466,7 +5473,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
+@@ -5467,7 +5474,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
@@ -156677,7 +157096,7 @@ index 8ec4b30..fee6f55 100644
int ret;
/*
-@@ -5531,7 +5538,7 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write,
+@@ -5532,7 +5539,7 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write,
int err;
struct in6_addr addr;
char str[IPV6_MAX_STRLEN];
@@ -156686,7 +157105,7 @@ index 8ec4b30..fee6f55 100644
struct net *net = ctl->extra2;
struct ipv6_stable_secret *secret = ctl->data;
-@@ -5600,7 +5607,7 @@ int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl,
+@@ -5601,7 +5608,7 @@ int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
@@ -156695,11 +157114,20 @@ index 8ec4b30..fee6f55 100644
int ret;
/* ctl->data points to idev->cnf.ignore_routes_when_linkdown
+@@ -5941,7 +5948,7 @@ static int __addrconf_sysctl_register(struct net *net, char *dev_name,
+ struct inet6_dev *idev, struct ipv6_devconf *p)
+ {
+ int i;
+- struct ctl_table *table;
++ ctl_table_no_const *table;
+ char path[sizeof("net/ipv6/conf/") + IFNAMSIZ];
+
+ table = kmemdup(addrconf_sysctl, sizeof(addrconf_sysctl), GFP_KERNEL);
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
-index b11c37c..38e3339 100644
+index bfa86f0..8737707 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
-@@ -784,7 +784,7 @@ static int __net_init inet6_net_init(struct net *net)
+@@ -787,7 +787,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;
@@ -156709,10 +157137,10 @@ index b11c37c..38e3339 100644
err = ipv6_init_mibs(net);
if (err)
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
-index 9dd3882..a03c07e 100644
+index 37874e2..d5cd498 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
-@@ -1025,5 +1025,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
+@@ -1032,5 +1032,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,
@@ -156720,10 +157148,10 @@ index 9dd3882..a03c07e 100644
+ atomic_read_unchecked(&sp->sk_drops));
}
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
-index 0013cac..08db290 100644
+index a4fa840..eadf5a1 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
-@@ -997,7 +997,7 @@ static struct ctl_table ipv6_icmp_table_template[] = {
+@@ -1003,7 +1003,7 @@ static struct ctl_table ipv6_icmp_table_template[] = {
struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net)
{
@@ -156733,10 +157161,10 @@ index 0013cac..08db290 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 70f2628..721dd1e 100644
+index 00cf28a..4699aa3 100644
--- a/net/ipv6/inet6_hashtables.c
+++ b/net/ipv6/inet6_hashtables.c
-@@ -210,7 +210,7 @@ struct sock *inet6_lookup(struct net *net, struct inet_hashinfo *hashinfo,
+@@ -178,7 +178,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,
@@ -156746,7 +157174,7 @@ index 70f2628..721dd1e 100644
{
struct inet_hashinfo *hinfo = death_row->hashinfo;
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
-index c26fac2..f944bc7 100644
+index 771be1f..e592cb8 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -98,9 +98,9 @@ static int fib6_new_sernum(struct net *net)
@@ -156762,10 +157190,10 @@ index c26fac2..f944bc7 100644
return new;
}
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
-index 4e636e6..26d1e42 100644
+index 776d145..69772ae 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
-@@ -70,8 +70,8 @@ struct ip6gre_net {
+@@ -71,8 +71,8 @@ struct ip6gre_net {
struct net_device *fb_tunnel_dev;
};
@@ -156776,17 +157204,17 @@ index 4e636e6..26d1e42 100644
static int ip6gre_tunnel_init(struct net_device *dev);
static void ip6gre_tunnel_setup(struct net_device *dev);
static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t);
-@@ -1303,7 +1303,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
+@@ -1070,7 +1070,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
}
-static struct inet6_protocol ip6gre_protocol __read_mostly = {
+static struct inet6_protocol ip6gre_protocol = {
- .handler = ip6gre_rcv,
+ .handler = gre_rcv,
.err_handler = ip6gre_err,
.flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
-@@ -1658,7 +1658,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = {
- [IFLA_GRE_FLAGS] = { .type = NLA_U32 },
+@@ -1523,7 +1523,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = {
+ [IFLA_GRE_ENCAP_DPORT] = { .type = NLA_U16 },
};
-static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
@@ -156794,7 +157222,7 @@ index 4e636e6..26d1e42 100644
.kind = "ip6gre",
.maxtype = IFLA_GRE_MAX,
.policy = ip6gre_policy,
-@@ -1673,7 +1673,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
+@@ -1538,7 +1538,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
.get_link_net = ip6_tnl_get_link_net,
};
@@ -156804,7 +157232,7 @@ index 4e636e6..26d1e42 100644
.maxtype = IFLA_GRE_MAX,
.policy = ip6gre_policy,
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
-index 1f20345..b3499ef 100644
+index 7b0481e..cd77386 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)
@@ -156816,8 +157244,8 @@ index 1f20345..b3499ef 100644
static int ip6_tnl_net_id __read_mostly;
struct ip6_tnl_net {
-@@ -1752,7 +1752,7 @@ static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = {
- [IFLA_IPTUN_PROTO] = { .type = NLA_U8 },
+@@ -1992,7 +1992,7 @@ static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = {
+ [IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
};
-static struct rtnl_link_ops ip6_link_ops __read_mostly = {
@@ -156848,10 +157276,10 @@ index d90a11f..02af54d 100644
.maxtype = IFLA_VTI_MAX,
.policy = vti6_policy,
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
-index 4449ad1..e47579c 100644
+index a9895e1..920025e 100644
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
-@@ -1025,7 +1025,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
+@@ -1027,7 +1027,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
if (sk->sk_type != SOCK_STREAM)
return -ENOPROTOOPT;
@@ -156874,10 +157302,10 @@ index c245895..68c1693 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 9021b43..b2e6979 100644
+index 63e06c3..191ae03 100644
--- a/net/ipv6/netfilter/ip6_tables.c
+++ b/net/ipv6/netfilter/ip6_tables.c
-@@ -1094,14 +1094,14 @@ static int compat_table_info(const struct xt_table_info *info,
+@@ -985,13 +985,13 @@ static int compat_table_info(const struct xt_table_info *info,
#endif
static int get_info(struct net *net, void __user *user,
@@ -156888,14 +157316,12 @@ index 9021b43..b2e6979 100644
struct xt_table *t;
int ret;
-- if (*len != sizeof(struct ip6t_getinfo)) {
-- duprintf("length %u != %zu\n", *len,
-+ if (len != sizeof(struct ip6t_getinfo)) {
-+ duprintf("length %u != %zu\n", len,
- sizeof(struct ip6t_getinfo));
+- if (*len != sizeof(struct ip6t_getinfo))
++ if (len != sizeof(struct ip6t_getinfo))
return -EINVAL;
- }
-@@ -1138,7 +1138,7 @@ static int get_info(struct net *net, void __user *user,
+
+ if (copy_from_user(name, user, sizeof(name)) != 0)
+@@ -1026,7 +1026,7 @@ static int get_info(struct net *net, void __user *user,
info.size = private->size;
strcpy(info.name, name);
@@ -156904,7 +157330,7 @@ index 9021b43..b2e6979 100644
ret = -EFAULT;
else
ret = 0;
-@@ -1831,7 +1831,7 @@ compat_do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1680,7 +1680,7 @@ compat_do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IP6T_SO_GET_INFO:
@@ -156913,7 +157339,7 @@ index 9021b43..b2e6979 100644
break;
case IP6T_SO_GET_ENTRIES:
ret = compat_get_entries(sock_net(sk), user, len);
-@@ -1878,7 +1878,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1726,7 +1726,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
switch (cmd) {
case IP6T_SO_GET_INFO:
@@ -156965,10 +157391,10 @@ index e4347ae..c7654e7 100644
return -ENOMEM;
}
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
-index c382db7..cd9e4d9 100644
+index 3ee3e44..2f70cc3 100644
--- a/net/ipv6/ping.c
+++ b/net/ipv6/ping.c
-@@ -239,6 +239,24 @@ static struct pernet_operations ping_v6_net_ops = {
+@@ -242,6 +242,24 @@ static struct pernet_operations ping_v6_net_ops = {
};
#endif
@@ -156993,7 +157419,7 @@ index c382db7..cd9e4d9 100644
int __init pingv6_init(void)
{
#ifdef CONFIG_PROC_FS
-@@ -246,13 +264,7 @@ int __init pingv6_init(void)
+@@ -249,13 +267,7 @@ int __init pingv6_init(void)
if (ret)
return ret;
#endif
@@ -157008,7 +157434,7 @@ index c382db7..cd9e4d9 100644
return inet6_register_protosw(&pingv6_protosw);
}
-@@ -261,14 +273,9 @@ int __init pingv6_init(void)
+@@ -264,14 +276,9 @@ int __init pingv6_init(void)
*/
void pingv6_exit(void)
{
@@ -157082,7 +157508,7 @@ index 679253d0..d85dd97 100644
goto proc_dev_snmp6_fail;
return 0;
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
-index fa59dd7..d9d9c9d 100644
+index 896350d..cda3e97 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -389,7 +389,7 @@ static inline int rawv6_rcv_skb(struct sock *sk, struct sk_buff *skb)
@@ -157121,7 +157547,7 @@ index fa59dd7..d9d9c9d 100644
struct flowi6 *fl6, struct dst_entry **dstp,
unsigned int flags)
{
-@@ -922,12 +922,15 @@ do_confirm:
+@@ -928,12 +928,15 @@ do_confirm:
static int rawv6_seticmpfilter(struct sock *sk, int level, int optname,
char __user *optval, int optlen)
{
@@ -157138,7 +157564,7 @@ index fa59dd7..d9d9c9d 100644
return 0;
default:
return -ENOPROTOOPT;
-@@ -940,6 +943,7 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
+@@ -946,6 +949,7 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
char __user *optval, int __user *optlen)
{
int len;
@@ -157146,7 +157572,7 @@ index fa59dd7..d9d9c9d 100644
switch (optname) {
case ICMPV6_FILTER:
-@@ -951,7 +955,8 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
+@@ -957,7 +961,8 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname,
len = sizeof(struct icmp6_filter);
if (put_user(len, optlen))
return -EFAULT;
@@ -157157,7 +157583,7 @@ index fa59dd7..d9d9c9d 100644
return 0;
default:
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
-index e2ea311..6f07106 100644
+index 2160d5d..6816c42 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -628,12 +628,11 @@ static struct ctl_table ip6_frags_ctl_table[] = {
@@ -157199,10 +157625,10 @@ index e2ea311..6f07106 100644
return -ENOMEM;
}
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
-index 6f32944..03cad65 100644
+index 520b788..8c01b3e 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
-@@ -3538,7 +3538,7 @@ struct ctl_table ipv6_route_table_template[] = {
+@@ -3574,7 +3574,7 @@ struct ctl_table ipv6_route_table_template[] = {
struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net)
{
@@ -157212,7 +157638,7 @@ index 6f32944..03cad65 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 6c53e4e..6e83866 100644
+index 0619ac7..0be97c7 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -74,7 +74,7 @@ static void ipip6_tunnel_setup(struct net_device *dev);
@@ -157224,7 +157650,7 @@ index 6c53e4e..6e83866 100644
static int sit_net_id __read_mostly;
struct sit_net {
-@@ -1735,7 +1735,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head)
+@@ -1733,7 +1733,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head)
unregister_netdevice_queue(dev, head);
}
@@ -157247,7 +157673,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 f6d7516..8d7090d 100644
+index 2255d2b..b1c03a4 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)
@@ -157261,7 +157687,7 @@ index f6d7516..8d7090d 100644
static __u32 tcp_v6_init_sequence(const struct sk_buff *skb)
{
return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32,
-@@ -1277,6 +1281,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
+@@ -1274,6 +1278,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0;
reset:
@@ -157271,10 +157697,10 @@ index f6d7516..8d7090d 100644
tcp_v6_send_reset(sk, skb);
discard:
if (opt_skb)
-@@ -1387,12 +1394,20 @@ static int tcp_v6_rcv(struct sk_buff *skb)
- lookup:
+@@ -1386,12 +1393,20 @@ lookup:
sk = __inet6_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th),
- th->source, th->dest, inet6_iif(skb));
+ th->source, th->dest, inet6_iif(skb),
+ &refcounted);
- if (!sk)
+ if (!sk) {
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
@@ -157294,9 +157720,9 @@ index f6d7516..8d7090d 100644
if (sk->sk_state == TCP_NEW_SYN_RECV) {
struct request_sock *req = inet_reqsk(sk);
-@@ -1480,6 +1495,10 @@ csum_error:
+@@ -1481,6 +1496,10 @@ csum_error:
bad_packet:
- TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
+ __TCP_INC_STATS(net, TCP_MIB_INERRS);
} else {
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
+ if (!grsec_enable_blackhole || (ret == 1 &&
@@ -157306,7 +157732,7 @@ index f6d7516..8d7090d 100644
}
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
-index f96831d9..dae9a77 100644
+index acc09705..b43ebf5 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -78,6 +78,10 @@ static u32 udp6_ehashfn(const struct net *net,
@@ -157320,37 +157746,37 @@ index f96831d9..dae9a77 100644
static u32 udp6_portaddr_hash(const struct net *net,
const struct in6_addr *addr6,
unsigned int port)
-@@ -452,7 +456,7 @@ try_again:
+@@ -380,7 +384,7 @@ try_again:
if (unlikely(err)) {
trace_kfree_skb(skb, udpv6_recvmsg);
if (!peeked) {
- atomic_inc(&sk->sk_drops);
+ atomic_inc_unchecked(&sk->sk_drops);
if (is_udp4)
- UDP_INC_STATS_USER(sock_net(sk),
- UDP_MIB_INERRORS,
-@@ -718,7 +722,7 @@ csum_error:
- UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
+ UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS,
+ is_udplite);
+@@ -648,7 +652,7 @@ csum_error:
+ __UDP6_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
drop:
- UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
+ __UDP6_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
- atomic_inc(&sk->sk_drops);
+ atomic_inc_unchecked(&sk->sk_drops);
kfree_skb(skb);
return -1;
}
-@@ -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) {
+@@ -729,7 +733,7 @@ start_lookup:
+ }
+ nskb = skb_clone(skb, GFP_ATOMIC);
+ if (unlikely(!nskb)) {
- atomic_inc(&sk->sk_drops);
+ atomic_inc_unchecked(&sk->sk_drops);
- UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
- IS_UDPLITE(sk));
- UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -941,6 +945,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+ __UDP6_INC_STATS(net, UDP_MIB_RCVBUFERRORS,
+ IS_UDPLITE(sk));
+ __UDP6_INC_STATS(net, UDP_MIB_INERRORS,
+@@ -847,6 +851,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);
+ __UDP6_INC_STATS(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
+ if (!grsec_enable_blackhole || (skb->dev->flags & IFF_LOOPBACK))
+#endif
@@ -157516,7 +157942,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 da126ee..c75b685 100644
+index 873c4b7..6d3624f 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)
@@ -157540,7 +157966,7 @@ index da126ee..c75b685 100644
put_tty_driver(driver);
}
-@@ -310,10 +312,10 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
+@@ -311,10 +313,10 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
add_wait_queue(&port->open_wait, &wait);
pr_debug("%s(%d):block_til_ready before block on %s open_count=%d\n",
@@ -157576,7 +158002,7 @@ index da126ee..c75b685 100644
+ __FILE__, __LINE__, tty->driver->name, atomic_read(&port->count));
if (!retval)
- port->flags |= ASYNC_NORMAL_ACTIVE;
+ tty_port_set_active(port, 1);
@@ -432,12 +434,12 @@ static int ircomm_tty_open(struct tty_struct *tty, struct file *filp)
/* ++ is not atomic, so this should be protected - Jean II */
@@ -157599,9 +158025,9 @@ index da126ee..c75b685 100644
- port->count = 0;
+ atomic_set(&port->count, 0);
spin_unlock_irqrestore(&port->lock, flags);
+ tty_port_set_active(port, 0);
- wake_up_interruptible(&port->open_wait);
-@@ -1274,7 +1276,7 @@ static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m)
+@@ -1275,7 +1277,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");
@@ -157611,7 +158037,7 @@ index da126ee..c75b685 100644
seq_printf(m, "Max header size: %d\n", self->max_header_size);
diff --git a/net/irda/ircomm/ircomm_tty_attach.c b/net/irda/ircomm/ircomm_tty_attach.c
-index 61137f8..465b9ea 100644
+index 0a41101..e811c2e 100644
--- a/net/irda/ircomm/ircomm_tty_attach.c
+++ b/net/irda/ircomm/ircomm_tty_attach.c
@@ -52,7 +52,7 @@ static void ircomm_tty_getvalue_confirm(int result, __u16 obj_id,
@@ -158249,10 +158675,10 @@ index 42de4cc..f00aa3e 100644
.netns_ok = 1,
};
diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
-index cd47990..a979945 100644
+index 6c54e03..ccfec78 100644
--- a/net/l2tp/l2tp_ip6.c
+++ b/net/l2tp/l2tp_ip6.c
-@@ -762,7 +762,7 @@ static struct inet_protosw l2tp_ip6_protosw = {
+@@ -769,7 +769,7 @@ static struct inet_protosw l2tp_ip6_protosw = {
.ops = &l2tp_ip6_ops,
};
@@ -158262,7 +158688,7 @@ index cd47990..a979945 100644
};
diff --git a/net/llc/llc_proc.c b/net/llc/llc_proc.c
-index 1a3c7e0..80f8b0c 100644
+index 29c509c..c19322a 100644
--- a/net/llc/llc_proc.c
+++ b/net/llc/llc_proc.c
@@ -247,7 +247,7 @@ int __init llc_proc_init(void)
@@ -158275,10 +158701,10 @@ index 1a3c7e0..80f8b0c 100644
goto out;
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
-index fe1704c..90b2111 100644
+index 0c12e40..95e7b88 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -339,7 +339,7 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
+@@ -341,7 +341,7 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
switch (key->conf.cipher) {
case WLAN_CIPHER_SUITE_TKIP:
@@ -158287,7 +158713,7 @@ index fe1704c..90b2111 100644
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,
+@@ -381,7 +381,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 {
@@ -158296,7 +158722,7 @@ index fe1704c..90b2111 100644
seq[0] = pn64;
seq[1] = pn64 >> 8;
seq[2] = pn64 >> 16;
-@@ -541,7 +541,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
+@@ -543,7 +543,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
ret = ieee80211_vif_use_channel(sdata, chandef,
IEEE80211_CHANCTX_EXCLUSIVE);
}
@@ -158305,7 +158731,7 @@ index fe1704c..90b2111 100644
local->_oper_chandef = *chandef;
ieee80211_hw_config(local, 0);
}
-@@ -3065,7 +3065,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
+@@ -3073,7 +3073,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
sdata->vif.probe_req_reg--;
}
@@ -158314,7 +158740,7 @@ index fe1704c..90b2111 100644
break;
if (sdata->vif.probe_req_reg == 1)
-@@ -3220,8 +3220,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
+@@ -3228,8 +3228,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
if (chanctx_conf) {
*chandef = sdata->vif.bss_conf.chandef;
ret = 0;
@@ -158326,7 +158752,7 @@ index fe1704c..90b2111 100644
if (local->use_chanctx)
*chandef = local->monitor_chandef;
diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c
-index 4ab5c52..da3fdf1 100644
+index b251b2f7..c3d6215 100644
--- a/net/mac80211/debugfs.c
+++ b/net/mac80211/debugfs.c
@@ -91,7 +91,7 @@ static const struct file_operations reset_ops = {
@@ -158370,7 +158796,7 @@ index a2ef95f..5adf27d 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 4220035..04bc5c0 100644
+index 9438c94..058c068 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -30,6 +30,7 @@
@@ -158381,7 +158807,7 @@ index 4220035..04bc5c0 100644
#include "key.h"
#include "sta_info.h"
#include "debug.h"
-@@ -1106,7 +1107,7 @@ struct ieee80211_local {
+@@ -1112,7 +1113,7 @@ struct ieee80211_local {
/* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
spinlock_t queue_stop_reason_lock;
@@ -158391,7 +158817,7 @@ index 4220035..04bc5c0 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 e1cb22c..1e2ee0c 100644
+index c59af3e..e30c0ef 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)
@@ -158478,7 +158904,7 @@ index e1cb22c..1e2ee0c 100644
mutex_lock(&local->iflist_mtx);
list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
-index 8190bf27..a428476 100644
+index 7ee91d6..f522aac 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -170,7 +170,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
@@ -158513,7 +158939,7 @@ index 00a43a7..ab6deef 100644
suspend:
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
-index a4e2f4e..02bfac1 100644
+index 206698b..847e610 100644
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -901,7 +901,7 @@ int ieee80211_init_rate_ctrl_alg(struct ieee80211_local *local,
@@ -158526,10 +158952,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 861b93f..7eeb0db 100644
+index 5ccfdbd..e0e72b6 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
-@@ -351,7 +351,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
+@@ -361,7 +361,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 *));
@@ -158539,10 +158965,10 @@ index 861b93f..7eeb0db 100644
goto free;
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
-index 21f6602..90396f4 100644
+index 2030443..3956dd9 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -2908,7 +2908,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
+@@ -3099,7 +3099,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:
@@ -158552,7 +158978,7 @@ index 21f6602..90396f4 100644
crypto_hdr[1] = pn >> 8;
crypto_hdr[4] = pn >> 16;
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
-index 7390de4..3612686c 100644
+index 905003f..06b15f3 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1761,7 +1761,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
@@ -158592,7 +159018,7 @@ index 7390de4..3612686c 100644
list_for_each_entry(sdata, &local->interfaces, list) {
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
-index 1884825..37036cc 100644
+index b48c1e1..4c02b5b 100644
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
@@ -223,7 +223,7 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
@@ -158613,7 +159039,7 @@ index 1884825..37036cc 100644
pn[5] = pn64;
pn[4] = pn64 >> 8;
-@@ -673,7 +673,7 @@ static int gcmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
+@@ -679,7 +679,7 @@ static int gcmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
hdr = (struct ieee80211_hdr *)pos;
pos += hdrlen;
@@ -158622,7 +159048,7 @@ index 1884825..37036cc 100644
pn[5] = pn64;
pn[4] = pn64 >> 8;
-@@ -947,7 +947,7 @@ ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx)
+@@ -957,7 +957,7 @@ ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx)
mmie->key_id = cpu_to_le16(key->conf.keyidx);
/* PN = PN + 1 */
@@ -158631,7 +159057,7 @@ index 1884825..37036cc 100644
bip_ipn_set64(mmie->sequence_number, pn64);
-@@ -991,7 +991,7 @@ ieee80211_crypto_aes_cmac_256_encrypt(struct ieee80211_tx_data *tx)
+@@ -1001,7 +1001,7 @@ ieee80211_crypto_aes_cmac_256_encrypt(struct ieee80211_tx_data *tx)
mmie->key_id = cpu_to_le16(key->conf.keyidx);
/* PN = PN + 1 */
@@ -158640,7 +159066,7 @@ index 1884825..37036cc 100644
bip_ipn_set64(mmie->sequence_number, pn64);
-@@ -1136,7 +1136,7 @@ ieee80211_crypto_aes_gmac_encrypt(struct ieee80211_tx_data *tx)
+@@ -1146,7 +1146,7 @@ ieee80211_crypto_aes_gmac_encrypt(struct ieee80211_tx_data *tx)
mmie->key_id = cpu_to_le16(key->conf.keyidx);
/* PN = PN + 1 */
@@ -158802,10 +159228,10 @@ index a748b0c..90c1df6 100644
.get_optmin = SO_IP_SET,
.get_optmax = SO_IP_SET + 1,
diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
-index 85ca189..871f064 100644
+index 096a451..c80bc59 100644
--- a/net/netfilter/ipvs/ip_vs_conn.c
+++ b/net/netfilter/ipvs/ip_vs_conn.c
-@@ -574,7 +574,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest)
+@@ -591,7 +591,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest)
/* Increase the refcnt counter of the dest */
ip_vs_dest_hold(dest);
@@ -158814,7 +159240,7 @@ index 85ca189..871f064 100644
if (cp->protocol != IPPROTO_UDP)
conn_flags &= ~IP_VS_CONN_F_ONE_PACKET;
flags = cp->flags;
-@@ -923,7 +923,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, int dest_af,
+@@ -945,7 +945,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, int dest_af,
cp->control = NULL;
atomic_set(&cp->n_control, 0);
@@ -158823,7 +159249,7 @@ index 85ca189..871f064 100644
cp->packet_xmit = NULL;
cp->app = NULL;
-@@ -1230,7 +1230,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp)
+@@ -1252,7 +1252,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp)
/* Don't drop the entry if its number of incoming packets is not
located in [0, 8] */
@@ -158833,19 +159259,22 @@ 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 b9a4082..0e84a78 100644
+index 2c1b498..3bca85c 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,
- ret = cp->packet_xmit(skb, cp, pd->pp, iph);
+@@ -613,9 +613,9 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
/* do not touch skb anymore */
-- atomic_inc(&cp->in_pkts);
-+ atomic_inc_unchecked(&cp->in_pkts);
+ if ((cp->flags & IP_VS_CONN_F_ONE_PACKET) && cp->control)
+- atomic_inc(&cp->control->in_pkts);
++ atomic_inc_unchecked(&cp->control->in_pkts);
+ else
+- atomic_inc(&cp->in_pkts);
++ atomic_inc_unchecked(&cp->in_pkts);
ip_vs_conn_put(cp);
return ret;
}
-@@ -1833,7 +1833,7 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int
+@@ -1991,13 +1991,13 @@ 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
@@ -158854,11 +159283,18 @@ index b9a4082..0e84a78 100644
if (ipvs->sync_state & IP_VS_STATE_MASTER)
ip_vs_sync_conn(ipvs, cp, pkts);
+ else if ((cp->flags & IP_VS_CONN_F_ONE_PACKET) && cp->control)
+ /* increment is done inside ip_vs_sync_conn too */
+- atomic_inc(&cp->control->in_pkts);
++ atomic_inc_unchecked(&cp->control->in_pkts);
+
+ ip_vs_conn_put(cp);
+ return ret;
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
-index 404b2a4..ad446aa 100644
+index c3c809b..fb97ee5 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,
+@@ -841,7 +841,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
*/
ip_vs_rs_hash(ipvs, dest);
}
@@ -158867,7 +159303,7 @@ index 404b2a4..ad446aa 100644
/* bind the service */
old_svc = rcu_dereference_protected(dest->svc, 1);
-@@ -1685,7 +1685,7 @@ proc_do_sync_ports(struct ctl_table *table, int write,
+@@ -1728,7 +1728,7 @@ proc_do_sync_ports(struct ctl_table *table, int write,
* align with netns init in ip_vs_control_net_init()
*/
@@ -158876,7 +159312,7 @@ index 404b2a4..ad446aa 100644
{
.procname = "amemthresh",
.maxlen = sizeof(int),
-@@ -2040,7 +2040,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
+@@ -2083,7 +2083,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),
@@ -158885,7 +159321,7 @@ index 404b2a4..ad446aa 100644
atomic_read(&dest->weight),
atomic_read(&dest->activeconns),
atomic_read(&dest->inactconns));
-@@ -2051,7 +2051,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
+@@ -2094,7 +2094,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),
@@ -158894,7 +159330,7 @@ index 404b2a4..ad446aa 100644
atomic_read(&dest->weight),
atomic_read(&dest->activeconns),
atomic_read(&dest->inactconns));
-@@ -2560,7 +2560,7 @@ __ip_vs_get_dest_entries(struct netns_ipvs *ipvs, const struct ip_vs_get_dests *
+@@ -2603,7 +2603,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;
@@ -158903,7 +159339,7 @@ index 404b2a4..ad446aa 100644
entry.weight = atomic_read(&dest->weight);
entry.u_threshold = dest->u_threshold;
entry.l_threshold = dest->l_threshold;
-@@ -3141,7 +3141,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest)
+@@ -3196,7 +3196,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,
@@ -158912,7 +159348,7 @@ index 404b2a4..ad446aa 100644
IP_VS_CONN_F_FWD_MASK)) ||
nla_put_u32(skb, IPVS_DEST_ATTR_WEIGHT,
atomic_read(&dest->weight)) ||
-@@ -3838,7 +3838,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
+@@ -3893,7 +3893,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
{
struct net *net = ipvs->net;
int idx;
@@ -158948,7 +159384,7 @@ index 796d70e..8458955 100644
.procname = "lblcr_expiration",
.data = NULL,
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
-index 803001a..09fb00d 100644
+index 1b07578..36b88cb 100644
--- a/net/netfilter/ipvs/ip_vs_sync.c
+++ b/net/netfilter/ipvs/ip_vs_sync.c
@@ -611,7 +611,7 @@ static void ip_vs_sync_conn_v0(struct netns_ipvs *ipvs, struct ip_vs_conn *cp,
@@ -158979,10 +159415,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 dc196a0..e04d80d 100644
+index 01d3d89..fb0cd03 100644
--- a/net/netfilter/ipvs/ip_vs_xmit.c
+++ b/net/netfilter/ipvs/ip_vs_xmit.c
-@@ -1260,7 +1260,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
+@@ -1255,7 +1255,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
else
rc = NF_ACCEPT;
/* do not touch skb anymore */
@@ -158991,7 +159427,7 @@ index dc196a0..e04d80d 100644
goto out;
}
-@@ -1353,7 +1353,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
+@@ -1348,7 +1348,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
else
rc = NF_ACCEPT;
/* do not touch skb anymore */
@@ -159014,10 +159450,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 e27fd17..480a953 100644
+index 9f530ad..bca1ad4 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
-@@ -1579,7 +1579,7 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls)
+@@ -1625,7 +1625,7 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls)
}
EXPORT_SYMBOL_GPL(nf_ct_alloc_hashtable);
@@ -159026,29 +159462,11 @@ index e27fd17..480a953 100644
{
int i, bucket, rc;
unsigned int hashsize, old_size;
-@@ -1778,7 +1778,7 @@ void nf_conntrack_init_end(void)
-
- int nf_conntrack_init_net(struct net *net)
- {
-- static atomic64_t unique_id;
-+ static atomic64_unchecked_t unique_id;
- int ret = -ENOMEM;
- int cpu;
-
-@@ -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",
-- (u64)atomic64_inc_return(&unique_id));
-+ (u64)atomic64_inc_return_unchecked(&unique_id));
- if (!net->ct.slabname)
- goto err_slabname;
-
diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c
-index 4e78c57..ec8fb74 100644
+index d28011b..04d5063 100644
--- a/net/netfilter/nf_conntrack_ecache.c
+++ b/net/netfilter/nf_conntrack_ecache.c
-@@ -264,7 +264,7 @@ static struct nf_ct_ext_type event_extend __read_mostly = {
+@@ -348,7 +348,7 @@ static struct nf_ct_ext_type event_extend __read_mostly = {
#ifdef CONFIG_SYSCTL
static int nf_conntrack_event_init_sysctl(struct net *net)
{
@@ -159058,7 +159476,7 @@ index 4e78c57..ec8fb74 100644
table = kmemdup(event_sysctl_table, sizeof(event_sysctl_table),
GFP_KERNEL);
diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c
-index 3b40ec5..fbd2fb7 100644
+index 196cb39..acf8033 100644
--- a/net/netfilter/nf_conntrack_helper.c
+++ b/net/netfilter/nf_conntrack_helper.c
@@ -57,7 +57,7 @@ static struct ctl_table helper_sysctl_table[] = {
@@ -159071,10 +159489,10 @@ index 3b40ec5..fbd2fb7 100644
table = kmemdup(helper_sysctl_table, sizeof(helper_sysctl_table),
GFP_KERNEL);
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
-index 355e855..4973252 100644
+index a18d1ce..794b75b 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
-@@ -1182,10 +1182,11 @@ static int ctnetlink_get_conntrack(struct net *net, struct sock *ctnl,
+@@ -1170,10 +1170,11 @@ static int ctnetlink_get_conntrack(struct net *net, struct sock *ctnl,
int err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159087,7 +159505,7 @@ index 355e855..4973252 100644
if (cda[CTA_MARK] && cda[CTA_MARK_MASK]) {
struct ctnetlink_filter *filter;
-@@ -1194,9 +1195,9 @@ static int ctnetlink_get_conntrack(struct net *net, struct sock *ctnl,
+@@ -1182,9 +1183,9 @@ static int ctnetlink_get_conntrack(struct net *net, struct sock *ctnl,
if (IS_ERR(filter))
return PTR_ERR(filter);
@@ -159099,7 +159517,7 @@ index 355e855..4973252 100644
}
err = ctnetlink_parse_zone(cda[CTA_ZONE], &zone);
-@@ -1334,7 +1335,7 @@ static int ctnetlink_get_ct_dying(struct net *net, struct sock *ctnl,
+@@ -1322,7 +1323,7 @@ static int ctnetlink_get_ct_dying(struct net *net, struct sock *ctnl,
const struct nlattr * const cda[])
{
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159108,7 +159526,7 @@ index 355e855..4973252 100644
.dump = ctnetlink_dump_dying,
.done = ctnetlink_done_list,
};
-@@ -1356,7 +1357,7 @@ static int ctnetlink_get_ct_unconfirmed(struct net *net, struct sock *ctnl,
+@@ -1344,7 +1345,7 @@ static int ctnetlink_get_ct_unconfirmed(struct net *net, struct sock *ctnl,
const struct nlattr * const cda[])
{
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159117,7 +159535,7 @@ index 355e855..4973252 100644
.dump = ctnetlink_dump_unconfirmed,
.done = ctnetlink_done_list,
};
-@@ -2037,7 +2038,7 @@ static int ctnetlink_stat_ct_cpu(struct net *net, struct sock *ctnl,
+@@ -2025,7 +2026,7 @@ static int ctnetlink_stat_ct_cpu(struct net *net, struct sock *ctnl,
const struct nlattr * const cda[])
{
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159126,7 +159544,7 @@ index 355e855..4973252 100644
.dump = ctnetlink_ct_stat_cpu_dump,
};
return netlink_dump_start(ctnl, skb, nlh, &c);
-@@ -2737,7 +2738,7 @@ static int ctnetlink_dump_exp_ct(struct net *net, struct sock *ctnl,
+@@ -2727,7 +2728,7 @@ static int ctnetlink_dump_exp_ct(struct net *net, struct sock *ctnl,
struct nf_conntrack_tuple_hash *h;
struct nf_conn *ct;
struct nf_conntrack_zone zone;
@@ -159135,7 +159553,7 @@ index 355e855..4973252 100644
.dump = ctnetlink_exp_ct_dump_table,
.done = ctnetlink_exp_done,
};
-@@ -2756,9 +2757,8 @@ static int ctnetlink_dump_exp_ct(struct net *net, struct sock *ctnl,
+@@ -2746,9 +2747,8 @@ static int ctnetlink_dump_exp_ct(struct net *net, struct sock *ctnl,
return -ENOENT;
ct = nf_ct_tuplehash_to_ctrack(h);
@@ -159146,7 +159564,7 @@ index 355e855..4973252 100644
nf_ct_put(ct);
return err;
-@@ -2780,7 +2780,7 @@ static int ctnetlink_get_expect(struct net *net, struct sock *ctnl,
+@@ -2770,7 +2770,7 @@ static int ctnetlink_get_expect(struct net *net, struct sock *ctnl,
if (cda[CTA_EXPECT_MASTER])
return ctnetlink_dump_exp_ct(net, ctnl, skb, nlh, cda);
else {
@@ -159155,7 +159573,7 @@ index 355e855..4973252 100644
.dump = ctnetlink_exp_dump_table,
.done = ctnetlink_exp_done,
};
-@@ -3238,7 +3238,7 @@ static int ctnetlink_stat_exp_cpu(struct net *net, struct sock *ctnl,
+@@ -3236,7 +3236,7 @@ static int ctnetlink_stat_exp_cpu(struct net *net, struct sock *ctnl,
const struct nlattr * const cda[])
{
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159178,10 +159596,10 @@ index b65d586..beec902 100644
{
if (users > 0)
diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
-index 0f1a45b..a6ce792 100644
+index c026c47..89fc6b5 100644
--- a/net/netfilter/nf_conntrack_standalone.c
+++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -504,7 +504,7 @@ static struct ctl_table nf_ct_netfilter_table[] = {
+@@ -500,7 +500,7 @@ static struct ctl_table nf_ct_netfilter_table[] = {
static int nf_conntrack_standalone_init_sysctl(struct net *net)
{
@@ -159284,7 +159702,7 @@ index c68c1e5..8b5d670 100644
}
EXPORT_SYMBOL(nf_unregister_sockopt);
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
-index 2011977..ba46f29 100644
+index cf7c745..e4cd514 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -555,7 +555,7 @@ static int nf_tables_gettable(struct net *net, struct sock *nlsk,
@@ -159296,7 +159714,7 @@ index 2011977..ba46f29 100644
.dump = nf_tables_dump_tables,
};
return netlink_dump_start(nlsk, skb, nlh, &c);
-@@ -1109,7 +1109,7 @@ static int nf_tables_getchain(struct net *net, struct sock *nlsk,
+@@ -1112,7 +1112,7 @@ static int nf_tables_getchain(struct net *net, struct sock *nlsk,
int err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159305,7 +159723,7 @@ index 2011977..ba46f29 100644
.dump = nf_tables_dump_chains,
};
return netlink_dump_start(nlsk, skb, nlh, &c);
-@@ -1935,7 +1935,7 @@ static int nf_tables_getrule(struct net *net, struct sock *nlsk,
+@@ -1942,7 +1942,7 @@ static int nf_tables_getrule(struct net *net, struct sock *nlsk,
int err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159314,7 +159732,7 @@ index 2011977..ba46f29 100644
.dump = nf_tables_dump_rules,
};
return netlink_dump_start(nlsk, skb, nlh, &c);
-@@ -2622,7 +2622,7 @@ static int nf_tables_getset(struct net *net, struct sock *nlsk,
+@@ -2630,7 +2630,7 @@ static int nf_tables_getset(struct net *net, struct sock *nlsk,
return err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159323,7 +159741,7 @@ index 2011977..ba46f29 100644
.dump = nf_tables_dump_sets,
.done = nf_tables_dump_sets_done,
};
-@@ -2633,9 +2633,8 @@ static int nf_tables_getset(struct net *net, struct sock *nlsk,
+@@ -2641,9 +2641,8 @@ static int nf_tables_getset(struct net *net, struct sock *nlsk,
return -ENOMEM;
*ctx_dump = ctx;
@@ -159334,7 +159752,7 @@ index 2011977..ba46f29 100644
}
/* Only accept unspec with dump */
-@@ -3226,7 +3225,7 @@ static int nf_tables_getsetelem(struct net *net, struct sock *nlsk,
+@@ -3235,7 +3234,7 @@ static int nf_tables_getsetelem(struct net *net, struct sock *nlsk,
return -ENOENT;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159344,7 +159762,7 @@ 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 dbd0803..9d18caa 100644
+index 1b4de4b..1b5e7ed 100644
--- a/net/netfilter/nfnetlink_acct.c
+++ b/net/netfilter/nfnetlink_acct.c
@@ -28,8 +28,8 @@ MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
@@ -159400,9 +159818,9 @@ index dbd0803..9d18caa 100644
+ pkts = atomic64_read_unchecked(&acct->pkts);
+ bytes = atomic64_read_unchecked(&acct->bytes);
}
- if (nla_put_be64(skb, NFACCT_PKTS, cpu_to_be64(pkts)) ||
- nla_put_be64(skb, NFACCT_BYTES, cpu_to_be64(bytes)) ||
-@@ -266,10 +266,11 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl,
+ if (nla_put_be64(skb, NFACCT_PKTS, cpu_to_be64(pkts),
+ NFACCT_PAD) ||
+@@ -269,10 +269,11 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl,
char *acct_name;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -159415,7 +159833,7 @@ index dbd0803..9d18caa 100644
if (tb[NFACCT_FILTER]) {
struct nfacct_filter *filter;
-@@ -278,9 +279,9 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl,
+@@ -281,9 +282,9 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl,
if (IS_ERR(filter))
return PTR_ERR(filter);
@@ -159427,7 +159845,7 @@ index dbd0803..9d18caa 100644
}
if (!tb[NFACCT_NAME])
-@@ -435,8 +436,8 @@ EXPORT_SYMBOL_GPL(nfnl_acct_put);
+@@ -438,8 +439,8 @@ EXPORT_SYMBOL_GPL(nfnl_acct_put);
void nfnl_acct_update(const struct sk_buff *skb, struct nf_acct *nfacct)
{
@@ -159438,7 +159856,7 @@ index dbd0803..9d18caa 100644
}
EXPORT_SYMBOL_GPL(nfnl_acct_update);
-@@ -471,7 +472,7 @@ int nfnl_acct_overquota(const struct sk_buff *skb, struct nf_acct *nfacct)
+@@ -474,7 +475,7 @@ int nfnl_acct_overquota(const struct sk_buff *skb, struct nf_acct *nfacct)
quota = (u64 *)nfacct->data;
now = (nfacct->flags & NFACCT_F_QUOTA_PKTS) ?
@@ -159461,7 +159879,7 @@ index e924e95..1e2e233 100644
};
return netlink_dump_start(nfnl, skb, nlh, &c);
diff --git a/net/netfilter/nfnetlink_cttimeout.c b/net/netfilter/nfnetlink_cttimeout.c
-index 2671b9d..e518410 100644
+index 3c84f14..6a2372d 100644
--- a/net/netfilter/nfnetlink_cttimeout.c
+++ b/net/netfilter/nfnetlink_cttimeout.c
@@ -248,7 +248,7 @@ static int cttimeout_get_timeout(struct net *net, struct sock *ctnl,
@@ -159681,7 +160099,7 @@ index 11de55e..f25e448 100644
return 0;
}
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
-index f48e3b3..e7b3936 100644
+index 627f898c..13afbf6 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -287,7 +287,7 @@ static void netlink_overrun(struct sock *sk)
@@ -159724,7 +160142,7 @@ index f48e3b3..e7b3936 100644
cb->min_dump_alloc = control->min_dump_alloc;
cb->skb = skb;
-@@ -2451,7 +2453,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v)
+@@ -2452,7 +2454,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),
@@ -159733,7 +160151,7 @@ index f48e3b3..e7b3936 100644
sock_i_ino(s)
);
-@@ -2558,7 +2560,7 @@ static void __init netlink_add_usersock_entry(void)
+@@ -2559,7 +2561,7 @@ static void __init netlink_add_usersock_entry(void)
netlink_table_ungrab();
}
@@ -159839,7 +160257,7 @@ index 7f8897f..15b61a2 100644
};
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
-index 7c8b90b..f7528aa 100644
+index 2ee48e4..cad6e4e 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)
@@ -159906,10 +160324,10 @@ 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 8012f67..1a3168e 100644
+index b43c401..194796d 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)
+@@ -279,7 +279,7 @@ static int packet_direct_xmit(struct sk_buff *skb)
return ret;
drop:
@@ -159918,7 +160336,7 @@ index 8012f67..1a3168e 100644
kfree_skb(skb);
return NET_XMIT_DROP;
}
-@@ -1391,9 +1391,9 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f,
+@@ -1392,9 +1392,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;
@@ -159930,7 +160348,7 @@ index 8012f67..1a3168e 100644
return i;
}
-@@ -1401,7 +1401,7 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f,
+@@ -1402,7 +1402,7 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f,
i = 0;
} while (i != j);
@@ -159939,7 +160357,7 @@ index 8012f67..1a3168e 100644
return idx;
}
-@@ -1656,9 +1656,9 @@ static int fanout_add(struct sock *sk, u16 id, u16 type_flags)
+@@ -1657,9 +1657,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;
@@ -159952,8 +160370,8 @@ index 8012f67..1a3168e 100644
}
mutex_lock(&fanout_mutex);
-@@ -2132,7 +2132,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
- drop_n_acct:
+@@ -2143,7 +2143,7 @@ drop_n_acct:
+ is_drop_n_account = true;
spin_lock(&sk->sk_receive_queue.lock);
po->stats.stats1.tp_drops++;
- atomic_inc(&sk->sk_drops);
@@ -159961,7 +160379,7 @@ index 8012f67..1a3168e 100644
spin_unlock(&sk->sk_receive_queue.lock);
drop_n_restore:
-@@ -3849,7 +3849,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
+@@ -3878,7 +3878,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
case PACKET_HDRLEN:
if (len > sizeof(int))
len = sizeof(int);
@@ -159970,7 +160388,7 @@ index 8012f67..1a3168e 100644
return -EFAULT;
switch (val) {
case TPACKET_V1:
-@@ -3884,9 +3884,9 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
+@@ -3913,9 +3913,9 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
case PACKET_ROLLOVER_STATS:
if (!po->rollover)
return -EINVAL;
@@ -159983,7 +160401,7 @@ index 8012f67..1a3168e 100644
data = &rstats;
lv = sizeof(rstats);
break;
-@@ -3904,7 +3904,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
+@@ -3933,7 +3933,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
len = lv;
if (put_user(len, optlen))
return -EFAULT;
@@ -160124,7 +160542,7 @@ index 627fb79..e0856c7 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 310cabc..76b03d2 100644
+index 7c2a65a..2968164 100644
--- a/net/rds/ib_cm.c
+++ b/net/rds/ib_cm.c
@@ -830,7 +830,7 @@ void rds_ib_conn_shutdown(struct rds_connection *conn)
@@ -160159,10 +160577,10 @@ index abc8cc8..ef9adf9 100644
#endif
diff --git a/net/rds/rds.h b/net/rds/rds.h
-index 80256b0..dde73be 100644
+index 387df5f..e48448a 100644
--- a/net/rds/rds.h
+++ b/net/rds/rds.h
-@@ -464,7 +464,7 @@ struct rds_transport {
+@@ -465,7 +465,7 @@ struct rds_transport {
void (*sync_mr)(void *trans_private, int direction);
void (*free_mr)(void *trans_private, int invalidate);
void (*flush_mrs)(void);
@@ -160172,7 +160590,7 @@ index 80256b0..dde73be 100644
struct rds_sock {
struct sock rs_sk;
diff --git a/net/rds/tcp.c b/net/rds/tcp.c
-index 86187da..0a3d027 100644
+index c8a7b4c..8ba226b 100644
--- a/net/rds/tcp.c
+++ b/net/rds/tcp.c
@@ -59,7 +59,7 @@ static int rds_tcp_skbuf_handler(struct ctl_table *ctl, int write,
@@ -160193,7 +160611,7 @@ index 86187da..0a3d027 100644
sizeof(val));
set_fs(oldfs);
}
-@@ -340,7 +340,7 @@ void rds_tcp_accept_work(struct sock *sk)
+@@ -412,7 +412,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);
@@ -160203,7 +160621,7 @@ index 86187da..0a3d027 100644
memset(rtn, 0, sizeof(*rtn));
diff --git a/net/rds/tcp.h b/net/rds/tcp.h
-index 41c2283..6cad9c5 100644
+index 7940bab..83e8a4c 100644
--- a/net/rds/tcp.h
+++ b/net/rds/tcp.h
@@ -17,9 +17,9 @@ struct rds_tcp_connection {
@@ -160220,7 +160638,7 @@ index 41c2283..6cad9c5 100644
struct rds_tcp_incoming *t_tinc;
size_t t_tinc_hdr_rem;
diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c
-index 2894e60..f9c01ac 100644
+index 618be69..1664cde 100644
--- a/net/rds/tcp_send.c
+++ b/net/rds/tcp_send.c
@@ -43,7 +43,7 @@ static void rds_tcp_cork(struct socket *sock, int val)
@@ -160233,7 +160651,7 @@ index 2894e60..f9c01ac 100644
set_fs(oldfs);
}
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c
-index 9d935fa..5f6db3c 100644
+index e45e94c..f9acab4 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;
@@ -160246,10 +160664,10 @@ index 9d935fa..5f6db3c 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 16d9670..3f3ab1a 100644
+index 374478e..7928cc5 100644
--- a/net/rxrpc/ar-ack.c
+++ b/net/rxrpc/ar-ack.c
-@@ -223,7 +223,7 @@ static void rxrpc_resend(struct rxrpc_call *call)
+@@ -155,7 +155,7 @@ static void rxrpc_resend(struct rxrpc_call *call)
_enter("{%d,%d,%d,%d},",
call->acks_hard, call->acks_unacked,
@@ -160258,7 +160676,7 @@ index 16d9670..3f3ab1a 100644
CIRC_CNT(call->acks_head, call->acks_tail, call->acks_winsz));
stop = false;
-@@ -246,7 +246,7 @@ static void rxrpc_resend(struct rxrpc_call *call)
+@@ -178,7 +178,7 @@ static void rxrpc_resend(struct rxrpc_call *call)
sp->need_resend = false;
/* each Tx packet has a new serial number */
@@ -160267,7 +160685,7 @@ index 16d9670..3f3ab1a 100644
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)
+@@ -382,7 +382,7 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, u32 hard)
*/
static void rxrpc_clear_tx_window(struct rxrpc_call *call)
{
@@ -160276,7 +160694,7 @@ index 16d9670..3f3ab1a 100644
}
/*
-@@ -673,7 +673,7 @@ process_further:
+@@ -606,7 +606,7 @@ process_further:
latest = sp->hdr.serial;
hard = ntohl(ack.firstPacket);
@@ -160285,7 +160703,7 @@ index 16d9670..3f3ab1a 100644
_proto("Rx ACK %%%u { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }",
latest,
-@@ -1206,7 +1206,7 @@ void rxrpc_process_call(struct work_struct *work)
+@@ -1139,7 +1139,7 @@ void rxrpc_process_call(struct work_struct *work)
goto maybe_reschedule;
send_ACK_with_skew:
@@ -160294,7 +160712,7 @@ index 16d9670..3f3ab1a 100644
ntohl(ack.serial));
send_ACK:
mtu = call->conn->trans->peer->if_mtu;
-@@ -1218,7 +1218,7 @@ send_ACK:
+@@ -1151,7 +1151,7 @@ send_ACK:
ackinfo.rxMTU = htonl(rxrpc_rx_mtu);
ackinfo.jumbo_max = htonl(rxrpc_rx_jumbo_max);
@@ -160303,7 +160721,7 @@ index 16d9670..3f3ab1a 100644
whdr.serial = htonl(serial);
_proto("Tx ACK %%%u { m=%hu f=#%u p=#%u s=%%%u r=%s n=%u }",
serial,
-@@ -1237,7 +1237,7 @@ send_ACK:
+@@ -1170,7 +1170,7 @@ send_ACK:
send_message:
_debug("send message");
@@ -160313,7 +160731,7 @@ index 16d9670..3f3ab1a 100644
_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 7c8d300..570ba4f 100644
+index 571a41f..99be2a4 100644
--- a/net/rxrpc/ar-call.c
+++ b/net/rxrpc/ar-call.c
@@ -229,7 +229,7 @@ static struct rxrpc_call *rxrpc_alloc_call(gfp_t gfp)
@@ -160326,10 +160744,10 @@ index 7c8d300..570ba4f 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 9942da1..1559525 100644
+index 97f4fae..0ca090b 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)
+@@ -211,7 +211,7 @@ static struct rxrpc_connection *rxrpc_alloc_connection(gfp_t gfp)
rwlock_init(&conn->lock);
spin_lock_init(&conn->state_lock);
atomic_set(&conn->usage, 1);
@@ -160339,23 +160757,23 @@ index 9942da1..1559525 100644
conn->size_align = 4;
conn->header_size = sizeof(struct rxrpc_wire_header);
diff --git a/net/rxrpc/ar-connevent.c b/net/rxrpc/ar-connevent.c
-index 1bdaaed..899cdff3 100644
+index 5f95639..e9dd0ba 100644
--- a/net/rxrpc/ar-connevent.c
+++ b/net/rxrpc/ar-connevent.c
-@@ -110,7 +110,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
+@@ -112,7 +112,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
len = iov[0].iov_len + iov[1].iov_len;
- 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);
+ _proto("Tx CONN ABORT %%%u { %d }", serial, conn->local_abort);
diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c
-index 63ed75c..bba8e0c 100644
+index 6ff9741..7089125 100644
--- a/net/rxrpc/ar-input.c
+++ b/net/rxrpc/ar-input.c
-@@ -330,9 +330,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb)
+@@ -324,9 +324,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 */
@@ -160368,11 +160786,11 @@ index 63ed75c..bba8e0c 100644
/* 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 cd6cdbe..8d4020f 100644
+index f0b807a..a048bcf 100644
--- a/net/rxrpc/ar-internal.h
+++ b/net/rxrpc/ar-internal.h
-@@ -292,8 +292,8 @@ struct rxrpc_connection {
- int error; /* error code for local abort */
+@@ -299,8 +299,8 @@ struct rxrpc_connection {
+ int error; /* local error incurred */
int debug_id; /* debug ID for printks */
unsigned int call_counter; /* call ID counter */
- atomic_t serial; /* packet serial number counter */
@@ -160382,16 +160800,16 @@ index cd6cdbe..8d4020f 100644
u8 avail_calls; /* number of calls available */
u8 size_align; /* data size alignment (for security) */
u8 header_size; /* rxrpc + security header size */
-@@ -398,7 +398,7 @@ struct rxrpc_call {
+@@ -405,7 +405,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 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)
+ u32 local_abort; /* local abort code */
+ u32 remote_abort; /* remote abort code */
+ int error; /* local error incurred */
+@@ -474,7 +474,7 @@ static inline void rxrpc_abort_call(struct rxrpc_call *call, u32 abort_code)
*/
extern atomic_t rxrpc_n_skbs;
extern u32 rxrpc_epoch;
@@ -160414,7 +160832,7 @@ index 4e1e6db..1e86180 100644
}
diff --git a/net/rxrpc/ar-output.c b/net/rxrpc/ar-output.c
-index d36fb6e..2ef98a0 100644
+index 51cb100..fd82e4e 100644
--- a/net/rxrpc/ar-output.c
+++ b/net/rxrpc/ar-output.c
@@ -672,13 +672,13 @@ static int rxrpc_send_data(struct rxrpc_sock *rx,
@@ -160447,7 +160865,7 @@ index dc089b1..21889d9 100644
rxrpc_assess_MTU_size(peer);
diff --git a/net/rxrpc/ar-proc.c b/net/rxrpc/ar-proc.c
-index 525b2ba..d9373f8 100644
+index 225163b..9b2ea9f 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)
@@ -160475,10 +160893,10 @@ index 66a1a56..01f6f0b 100644
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 f0aeb81..e0f0593 100644
+index bab56ed..39fa502 100644
--- a/net/rxrpc/rxkad.c
+++ b/net/rxrpc/rxkad.c
-@@ -633,7 +633,7 @@ static int rxkad_issue_challenge(struct rxrpc_connection *conn)
+@@ -624,7 +624,7 @@ static int rxkad_issue_challenge(struct rxrpc_connection *conn)
len = iov[0].iov_len + iov[1].iov_len;
@@ -160487,7 +160905,7 @@ index f0aeb81..e0f0593 100644
whdr.serial = htonl(serial);
_proto("Tx CHALLENGE %%%u", serial);
-@@ -687,7 +687,7 @@ static int rxkad_send_response(struct rxrpc_connection *conn,
+@@ -678,7 +678,7 @@ static int rxkad_send_response(struct rxrpc_connection *conn,
len = iov[0].iov_len + iov[1].iov_len + iov[2].iov_len;
@@ -160497,10 +160915,10 @@ index f0aeb81..e0f0593 100644
_proto("Tx RESPONSE %%%u", serial);
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
-index 80742ed..c76a9c4 100644
+index f9e0e9c..829aa7b 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)
+@@ -318,7 +318,7 @@ void netif_carrier_on(struct net_device *dev)
if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
if (dev->reg_state == NETREG_UNINITIALIZED)
return;
@@ -160509,7 +160927,7 @@ index 80742ed..c76a9c4 100644
linkwatch_fire_event(dev);
if (netif_running(dev))
__netdev_watchdog_up(dev);
-@@ -371,7 +371,7 @@ void netif_carrier_off(struct net_device *dev)
+@@ -337,7 +337,7 @@ void netif_carrier_off(struct net_device *dev)
if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
if (dev->reg_state == NETREG_UNINITIALIZED)
return;
@@ -160519,7 +160937,7 @@ index 80742ed..c76a9c4 100644
}
}
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
-index c2fbde7..fedcaf4 100644
+index 3161e49..0785aa1 100644
--- a/net/sched/sch_tbf.c
+++ b/net/sched/sch_tbf.c
@@ -161,7 +161,8 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
@@ -160546,7 +160964,7 @@ index c2fbde7..fedcaf4 100644
return nb > 0 ? NET_XMIT_SUCCESS : NET_XMIT_DROP;
}
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
-index ce46f1c..0a4e659 100644
+index 0657d18..b095e6e 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -989,7 +989,7 @@ static const struct inet6_protocol sctpv6_protocol = {
@@ -160601,8 +161019,21 @@ index d3d50da..55e871e 100644
}
static int sctp_v4_protosw_init(void)
+diff --git a/net/sctp/sctp_diag.c b/net/sctp/sctp_diag.c
+index f69edcf..f015617 100644
+--- a/net/sctp/sctp_diag.c
++++ b/net/sctp/sctp_diag.c
+@@ -150,7 +150,7 @@ static int inet_sctp_diag_fill(struct sock *sk, struct sctp_association *asoc,
+ mem[SK_MEMINFO_WMEM_QUEUED] = sk->sk_wmem_queued;
+ mem[SK_MEMINFO_OPTMEM] = atomic_read(&sk->sk_omem_alloc);
+ mem[SK_MEMINFO_BACKLOG] = sk->sk_backlog.len;
+- mem[SK_MEMINFO_DROPS] = atomic_read(&sk->sk_drops);
++ mem[SK_MEMINFO_DROPS] = atomic_read_unchecked(&sk->sk_drops);
+
+ if (nla_put(skb, INET_DIAG_SKMEMINFO, sizeof(mem), &mem) < 0)
+ goto errout;
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
-index 41b081a..cfea9d6 100644
+index aa37122..2b9780d 100644
--- a/net/sctp/sm_sideeffect.c
+++ b/net/sctp/sm_sideeffect.c
@@ -444,7 +444,7 @@ static void sctp_generate_sack_event(unsigned long data)
@@ -160624,7 +161055,7 @@ index 41b081a..cfea9d6 100644
NULL, sctp_cname, sctp_tname, sctp_oname, sctp_pname,
};
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
-index 878d28e..09a9b63 100644
+index 67154b8..8550750 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -2190,11 +2190,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval,
@@ -160642,7 +161073,7 @@ index 878d28e..09a9b63 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
-@@ -4369,13 +4371,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
+@@ -4586,13 +4588,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)
{
@@ -160660,7 +161091,7 @@ index 878d28e..09a9b63 100644
return -EFAULT;
return 0;
}
-@@ -4393,6 +4398,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
+@@ -4610,6 +4615,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)
{
@@ -160669,7 +161100,7 @@ index 878d28e..09a9b63 100644
/* Applicable to UDP-style socket only */
if (sctp_style(sk, TCP))
return -EOPNOTSUPP;
-@@ -4401,7 +4408,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
+@@ -4618,7 +4625,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
len = sizeof(int);
if (put_user(len, optlen))
return -EFAULT;
@@ -160679,7 +161110,7 @@ index 878d28e..09a9b63 100644
return -EFAULT;
return 0;
}
-@@ -4775,12 +4783,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
+@@ -4992,12 +5000,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)
{
@@ -160696,7 +161127,7 @@ index 878d28e..09a9b63 100644
return -EFAULT;
return 0;
}
-@@ -4821,6 +4832,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
+@@ -5038,6 +5049,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
->addr_to_user(sp, &temp);
if (space_left < addrlen)
return -ENOMEM;
@@ -160755,7 +161186,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 5f77a8e..1d36c7e 100644
+index a1bd161..b1f7508 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -89,6 +89,7 @@
@@ -160792,7 +161223,7 @@ index 5f77a8e..1d36c7e 100644
static struct file_system_type sock_fs_type = {
.name = "sockfs",
-@@ -1100,6 +1102,8 @@ int __sock_create(struct net *net, int family, int type, int protocol,
+@@ -1096,6 +1098,8 @@ int __sock_create(struct net *net, int family, int type, int protocol,
return -EAFNOSUPPORT;
if (type < 0 || type >= SOCK_MAX)
return -EINVAL;
@@ -160801,7 +161232,7 @@ index 5f77a8e..1d36c7e 100644
/* Compatibility.
-@@ -1116,6 +1120,20 @@ int __sock_create(struct net *net, int family, int type, int protocol,
+@@ -1112,6 +1116,20 @@ int __sock_create(struct net *net, int family, int type, int protocol,
if (err)
return err;
@@ -160822,7 +161253,7 @@ index 5f77a8e..1d36c7e 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
-@@ -1367,6 +1385,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
+@@ -1363,6 +1381,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) {
@@ -160837,7 +161268,7 @@ index 5f77a8e..1d36c7e 100644
err = security_socket_bind(sock,
(struct sockaddr *)&address,
addrlen);
-@@ -1375,6 +1401,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
+@@ -1371,6 +1397,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
(struct sockaddr *)
&address, addrlen);
}
@@ -160845,7 +161276,7 @@ index 5f77a8e..1d36c7e 100644
fput_light(sock->file, fput_needed);
}
return err;
-@@ -1398,10 +1425,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
+@@ -1394,10 +1421,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
if ((unsigned int)backlog > somaxconn)
backlog = somaxconn;
@@ -160866,7 +161297,7 @@ index 5f77a8e..1d36c7e 100644
fput_light(sock->file, fput_needed);
}
return err;
-@@ -1445,6 +1482,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
+@@ -1441,6 +1478,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
newsock->type = sock->type;
newsock->ops = sock->ops;
@@ -160885,7 +161316,7 @@ index 5f77a8e..1d36c7e 100644
/*
* We don't need try_module_get here, as the listening socket (sock)
* has the protocol module (sock->ops->owner) held.
-@@ -1490,6 +1539,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
+@@ -1486,6 +1535,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
fd_install(newfd, newfile);
err = newfd;
@@ -160894,7 +161325,7 @@ index 5f77a8e..1d36c7e 100644
out_put:
fput_light(sock->file, fput_needed);
out:
-@@ -1522,6 +1573,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
+@@ -1518,6 +1569,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
int, addrlen)
{
struct socket *sock;
@@ -160902,7 +161333,7 @@ index 5f77a8e..1d36c7e 100644
struct sockaddr_storage address;
int err, fput_needed;
-@@ -1532,6 +1584,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
+@@ -1528,6 +1580,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
if (err < 0)
goto out_put;
@@ -160920,7 +161351,7 @@ index 5f77a8e..1d36c7e 100644
err =
security_socket_connect(sock, (struct sockaddr *)&address, addrlen);
if (err)
-@@ -1554,7 +1617,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
+@@ -1550,7 +1613,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
int __user *, usockaddr_len)
{
struct socket *sock;
@@ -160929,7 +161360,7 @@ index 5f77a8e..1d36c7e 100644
int len, err, fput_needed;
sock = sockfd_lookup_light(fd, &err, &fput_needed);
-@@ -1585,7 +1648,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
+@@ -1581,7 +1644,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
int __user *, usockaddr_len)
{
struct socket *sock;
@@ -160938,7 +161369,7 @@ index 5f77a8e..1d36c7e 100644
int len, err, fput_needed;
sock = sockfd_lookup_light(fd, &err, &fput_needed);
-@@ -1613,6 +1676,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
+@@ -1609,6 +1672,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
* the protocol.
*/
@@ -160947,7 +161378,7 @@ index 5f77a8e..1d36c7e 100644
SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
unsigned int, flags, struct sockaddr __user *, addr,
int, addr_len)
-@@ -1676,7 +1741,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
+@@ -1672,7 +1737,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
struct socket *sock;
struct iovec iov;
struct msghdr msg;
@@ -160956,7 +161387,7 @@ index 5f77a8e..1d36c7e 100644
int err, err2;
int fput_needed;
-@@ -1921,7 +1986,7 @@ static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg,
+@@ -1917,7 +1982,7 @@ static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg,
* checking falls down on this.
*/
if (copy_from_user(ctl_buf,
@@ -160965,7 +161396,7 @@ index 5f77a8e..1d36c7e 100644
ctl_len))
goto out_freectl;
msg_sys->msg_control = ctl_buf;
-@@ -2077,7 +2142,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
+@@ -2073,7 +2138,7 @@ static int ___sys_recvmsg(struct socket *sock, struct user_msghdr __user *msg,
ssize_t err;
/* kernel mode address */
@@ -160974,7 +161405,7 @@ index 5f77a8e..1d36c7e 100644
/* user mode address pointers */
struct sockaddr __user *uaddr;
-@@ -2723,7 +2788,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)
+@@ -2719,7 +2784,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);
@@ -160983,7 +161414,7 @@ index 5f77a8e..1d36c7e 100644
return -EFAULT;
if (put_user(convert_in ? rxnfc : compat_ptr(data),
-@@ -2834,7 +2899,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd,
+@@ -2830,7 +2895,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd,
old_fs = get_fs();
set_fs(KERNEL_DS);
err = dev_ioctl(net, cmd,
@@ -160992,7 +161423,7 @@ index 5f77a8e..1d36c7e 100644
set_fs(old_fs);
return err;
-@@ -2927,7 +2992,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd,
+@@ -2923,7 +2988,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd,
old_fs = get_fs();
set_fs(KERNEL_DS);
@@ -161001,7 +161432,7 @@ index 5f77a8e..1d36c7e 100644
set_fs(old_fs);
if (cmd == SIOCGIFMAP && !err) {
-@@ -3011,7 +3076,7 @@ static int routing_ioctl(struct net *net, struct socket *sock,
+@@ -3007,7 +3072,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);
@@ -161010,7 +161441,7 @@ index 5f77a8e..1d36c7e 100644
devname[15] = 0;
} else
r4.rt_dev = NULL;
-@@ -3238,8 +3303,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,
+@@ -3234,8 +3299,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,
int __user *uoptlen;
int err;
@@ -161021,7 +161452,7 @@ index 5f77a8e..1d36c7e 100644
set_fs(KERNEL_DS);
if (level == SOL_SOCKET)
-@@ -3259,7 +3324,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,
+@@ -3255,7 +3320,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,
char __user *uoptval;
int err;
@@ -161112,10 +161543,10 @@ index 9d88c62..53396b6 100644
#define gssx_dec_release_handle NULL
#define gssx_enc_get_mic NULL
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
-index 4605dc7..c947fa5 100644
+index e085f5a..1132fd2 100644
--- a/net/sunrpc/auth_gss/svcauth_gss.c
+++ b/net/sunrpc/auth_gss/svcauth_gss.c
-@@ -1142,7 +1142,7 @@ static int gss_proxy_save_rsc(struct cache_detail *cd,
+@@ -1141,7 +1141,7 @@ static int gss_proxy_save_rsc(struct cache_detail *cd,
uint64_t *handle)
{
struct rsc rsci, *rscp = NULL;
@@ -161124,7 +161555,7 @@ index 4605dc7..c947fa5 100644
long long ctxh;
struct gss_api_mech *gm = NULL;
time_t expiry;
-@@ -1153,7 +1153,7 @@ static int gss_proxy_save_rsc(struct cache_detail *cd,
+@@ -1152,7 +1152,7 @@ static int gss_proxy_save_rsc(struct cache_detail *cd,
status = -ENOMEM;
/* the handle needs to be just a unique id,
* use a static counter */
@@ -161147,10 +161578,10 @@ index 553bf95..c4c6132 100644
goto out_nomem;
cd->u.procfs.channel_ent = NULL;
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
-index 837dd91..7a070a7 100644
+index 2808d55..677092e 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
-@@ -1527,7 +1527,9 @@ call_start(struct rpc_task *task)
+@@ -1544,7 +1544,9 @@ call_start(struct rpc_task *task)
(RPC_IS_ASYNC(task) ? "async" : "sync"));
/* Increment call count */
@@ -161542,7 +161973,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 3b24a64..a68bd749 100644
+index 2c25606..521a8e0 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,
@@ -161563,7 +161994,7 @@ index 3b24a64..a68bd749 100644
return ret;
err:
ib_dma_unmap_sg(xprt->sc_cm_id->device,
-@@ -631,7 +631,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
+@@ -612,7 +612,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
dto_q);
list_del_init(&ctxt->dto_q);
} else {
@@ -161572,7 +162003,7 @@ index 3b24a64..a68bd749 100644
clear_bit(XPT_DATA, &xprt->xpt_flags);
ctxt = NULL;
}
-@@ -648,7 +648,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
+@@ -629,7 +629,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
}
dprintk("svcrdma: processing ctxt=%p on xprt=%p, rqstp=%p, status=%d\n",
ctxt, rdma_xprt, rqstp, ctxt->wc_status);
@@ -161582,7 +162013,7 @@ index 3b24a64..a68bd749 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 4f1b1c4..40fd2aa 100644
+index 54d53330..fd6c4ac 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
@@ -307,7 +307,7 @@ static int send_write(struct svcxprt_rdma *xprt, struct svc_rqst *rqstp,
@@ -161595,10 +162026,10 @@ index 4f1b1c4..40fd2aa 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 9066896..c2fe701 100644
+index dd94401..9540398 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
-@@ -1285,7 +1285,7 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr)
+@@ -1298,7 +1298,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);
@@ -161621,7 +162052,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 4dfc5c1..ed7921b 100644
+index 1fd4647..ebf12ff 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -65,13 +65,13 @@ struct tipc_nl_compat_cmd_dump {
@@ -161640,7 +162071,7 @@ index 4dfc5c1..ed7921b 100644
static int tipc_skb_tailroom(struct sk_buff *skb)
{
-@@ -836,7 +836,10 @@ static int tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, u32 sock)
+@@ -885,7 +885,10 @@ static int tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, u32 sock)
void *hdr;
struct nlattr *nest;
struct sk_buff *args;
@@ -161652,7 +162083,7 @@ index 4dfc5c1..ed7921b 100644
args = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
if (!args)
-@@ -859,9 +862,6 @@ static int tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, u32 sock)
+@@ -908,9 +911,6 @@ static int tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, u32 sock)
nla_nest_end(args, nest);
genlmsg_end(args, hdr);
@@ -161663,7 +162094,7 @@ index 4dfc5c1..ed7921b 100644
kfree_skb(args);
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
-index e6cb386..9eaa00c 100644
+index 0dd0224..36a22a0 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,
@@ -161676,7 +162107,7 @@ index e6cb386..9eaa00c 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 7748199..1cc52d17 100644
+index 735362c..49c97c7 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,
@@ -161706,7 +162137,7 @@ index 7748199..1cc52d17 100644
if (dentry)
touch_atime(&unix_sk(u)->path);
} else
-@@ -960,13 +973,19 @@ static int unix_mknod(struct dentry *dentry, struct path *path, umode_t mode,
+@@ -960,13 +973,19 @@ static int unix_mknod(struct dentry *dentry, const struct path *path, umode_t mo
err = security_path_mknod(path, dentry, mode, 0);
if (!err) {
@@ -161880,10 +162311,10 @@ index 21e591d..f3a0afc 100644
+ .process_negotiate = vmci_transport_notify_pkt_process_negotiate,
};
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
-index 14d5369..7142d8e 100644
+index ef2955c..bdc636d 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
-@@ -1651,8 +1651,9 @@ static int ieee80211_scan_results(struct cfg80211_registered_device *rdev,
+@@ -1657,8 +1657,9 @@ static int ieee80211_scan_results(struct cfg80211_registered_device *rdev,
int cfg80211_wext_giwscan(struct net_device *dev,
struct iw_request_info *info,
@@ -161895,10 +162326,10 @@ index 14d5369..7142d8e 100644
int res;
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
-index fd68283..0681bb2 100644
+index 9f27221..031b0c4 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
-@@ -23,8 +23,9 @@
+@@ -23,16 +23,19 @@
int cfg80211_wext_giwname(struct net_device *dev,
struct iw_request_info *info,
@@ -161906,10 +162337,10 @@ index fd68283..0681bb2 100644
+ union iwreq_data *wrqu, char *extra)
{
+ char *name = wrqu->name;
- struct wireless_dev *wdev = dev->ieee80211_ptr;
- struct ieee80211_supported_band *sband;
- bool is_ht = false, is_a = false, is_b = false, is_g = false;
-@@ -66,8 +67,9 @@ int cfg80211_wext_giwname(struct net_device *dev,
++
+ strcpy(name, "IEEE 802.11");
+ return 0;
+ }
EXPORT_WEXT_HANDLER(cfg80211_wext_giwname);
int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
@@ -161920,7 +162351,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev;
struct vif_params vifparams;
-@@ -102,8 +104,9 @@ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
+@@ -67,8 +70,9 @@ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
EXPORT_WEXT_HANDLER(cfg80211_wext_siwmode);
int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info,
@@ -161931,7 +162362,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
if (!wdev)
-@@ -139,8 +142,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwmode);
+@@ -104,8 +108,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwmode);
int cfg80211_wext_giwrange(struct net_device *dev,
struct iw_request_info *info,
@@ -161941,8 +162372,8 @@ index fd68283..0681bb2 100644
+ struct iw_point *data = &wrqu->data;
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct iw_range *range = (struct iw_range *) extra;
- enum ieee80211_band band;
-@@ -283,8 +287,9 @@ int cfg80211_wext_freq(struct iw_freq *freq)
+ enum nl80211_band band;
+@@ -248,8 +253,9 @@ int cfg80211_wext_freq(struct iw_freq *freq)
int cfg80211_wext_siwrts(struct net_device *dev,
struct iw_request_info *info,
@@ -161953,7 +162384,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
u32 orts = wdev->wiphy->rts_threshold;
-@@ -307,8 +312,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_siwrts);
+@@ -272,8 +278,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_siwrts);
int cfg80211_wext_giwrts(struct net_device *dev,
struct iw_request_info *info,
@@ -161964,7 +162395,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
rts->value = wdev->wiphy->rts_threshold;
-@@ -321,8 +327,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwrts);
+@@ -286,8 +293,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwrts);
int cfg80211_wext_siwfrag(struct net_device *dev,
struct iw_request_info *info,
@@ -161975,7 +162406,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
u32 ofrag = wdev->wiphy->frag_threshold;
-@@ -347,8 +354,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_siwfrag);
+@@ -312,8 +320,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_siwfrag);
int cfg80211_wext_giwfrag(struct net_device *dev,
struct iw_request_info *info,
@@ -161986,7 +162417,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
frag->value = wdev->wiphy->frag_threshold;
-@@ -361,8 +369,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwfrag);
+@@ -326,8 +335,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwfrag);
static int cfg80211_wext_siwretry(struct net_device *dev,
struct iw_request_info *info,
@@ -161997,7 +162428,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
u32 changed = 0;
-@@ -401,8 +410,9 @@ static int cfg80211_wext_siwretry(struct net_device *dev,
+@@ -366,8 +376,9 @@ static int cfg80211_wext_siwretry(struct net_device *dev,
int cfg80211_wext_giwretry(struct net_device *dev,
struct iw_request_info *info,
@@ -162008,7 +162439,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
retry->disabled = 0;
-@@ -586,8 +596,9 @@ static int cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
+@@ -551,8 +562,9 @@ static int cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
static int cfg80211_wext_siwencode(struct net_device *dev,
struct iw_request_info *info,
@@ -162019,7 +162450,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
int idx, err;
-@@ -646,8 +657,9 @@ static int cfg80211_wext_siwencode(struct net_device *dev,
+@@ -611,8 +623,9 @@ static int cfg80211_wext_siwencode(struct net_device *dev,
static int cfg80211_wext_siwencodeext(struct net_device *dev,
struct iw_request_info *info,
@@ -162030,7 +162461,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;
-@@ -737,8 +749,9 @@ static int cfg80211_wext_siwencodeext(struct net_device *dev,
+@@ -702,8 +715,9 @@ static int cfg80211_wext_siwencodeext(struct net_device *dev,
static int cfg80211_wext_giwencode(struct net_device *dev,
struct iw_request_info *info,
@@ -162041,7 +162472,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
int idx;
-@@ -774,8 +787,9 @@ static int cfg80211_wext_giwencode(struct net_device *dev,
+@@ -739,8 +753,9 @@ static int cfg80211_wext_giwencode(struct net_device *dev,
static int cfg80211_wext_siwfreq(struct net_device *dev,
struct iw_request_info *info,
@@ -162052,7 +162483,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
struct cfg80211_chan_def chandef = {
-@@ -817,8 +831,9 @@ static int cfg80211_wext_siwfreq(struct net_device *dev,
+@@ -782,8 +797,9 @@ static int cfg80211_wext_siwfreq(struct net_device *dev,
static int cfg80211_wext_giwfreq(struct net_device *dev,
struct iw_request_info *info,
@@ -162063,7 +162494,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
struct cfg80211_chan_def chandef;
-@@ -1076,8 +1091,9 @@ static int cfg80211_set_key_mgt(struct wireless_dev *wdev, u32 key_mgt)
+@@ -1041,8 +1057,9 @@ static int cfg80211_set_key_mgt(struct wireless_dev *wdev, u32 key_mgt)
static int cfg80211_wext_siwauth(struct net_device *dev,
struct iw_request_info *info,
@@ -162074,7 +162505,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
if (wdev->iftype != NL80211_IFTYPE_STATION)
-@@ -1109,7 +1125,7 @@ static int cfg80211_wext_siwauth(struct net_device *dev,
+@@ -1074,7 +1091,7 @@ static int cfg80211_wext_siwauth(struct net_device *dev,
static int cfg80211_wext_giwauth(struct net_device *dev,
struct iw_request_info *info,
@@ -162083,7 +162514,7 @@ index fd68283..0681bb2 100644
{
/* XXX: what do we need? */
-@@ -1118,8 +1134,9 @@ static int cfg80211_wext_giwauth(struct net_device *dev,
+@@ -1083,8 +1100,9 @@ static int cfg80211_wext_giwauth(struct net_device *dev,
static int cfg80211_wext_siwpower(struct net_device *dev,
struct iw_request_info *info,
@@ -162094,7 +162525,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
bool ps = wdev->ps;
-@@ -1165,8 +1182,9 @@ static int cfg80211_wext_siwpower(struct net_device *dev,
+@@ -1130,8 +1148,9 @@ static int cfg80211_wext_siwpower(struct net_device *dev,
static int cfg80211_wext_giwpower(struct net_device *dev,
struct iw_request_info *info,
@@ -162105,7 +162536,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
wrq->disabled = !wdev->ps;
-@@ -1220,8 +1238,9 @@ static int cfg80211_wds_wext_giwap(struct net_device *dev,
+@@ -1185,8 +1204,9 @@ static int cfg80211_wds_wext_giwap(struct net_device *dev,
static int cfg80211_wext_siwrate(struct net_device *dev,
struct iw_request_info *info,
@@ -162116,7 +162547,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
struct cfg80211_bitrate_mask mask;
-@@ -1271,8 +1290,9 @@ static int cfg80211_wext_siwrate(struct net_device *dev,
+@@ -1236,8 +1256,9 @@ static int cfg80211_wext_siwrate(struct net_device *dev,
static int cfg80211_wext_giwrate(struct net_device *dev,
struct iw_request_info *info,
@@ -162127,7 +162558,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
/* we are under RTNL - globally locked - so can use a static struct */
-@@ -1379,8 +1399,9 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
+@@ -1344,8 +1365,9 @@ static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)
static int cfg80211_wext_siwap(struct net_device *dev,
struct iw_request_info *info,
@@ -162138,7 +162569,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
switch (wdev->iftype) {
-@@ -1397,8 +1418,9 @@ static int cfg80211_wext_siwap(struct net_device *dev,
+@@ -1362,8 +1384,9 @@ static int cfg80211_wext_siwap(struct net_device *dev,
static int cfg80211_wext_giwap(struct net_device *dev,
struct iw_request_info *info,
@@ -162149,7 +162580,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
switch (wdev->iftype) {
-@@ -1415,8 +1437,9 @@ static int cfg80211_wext_giwap(struct net_device *dev,
+@@ -1380,8 +1403,9 @@ static int cfg80211_wext_giwap(struct net_device *dev,
static int cfg80211_wext_siwessid(struct net_device *dev,
struct iw_request_info *info,
@@ -162160,7 +162591,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
switch (wdev->iftype) {
-@@ -1431,8 +1454,9 @@ static int cfg80211_wext_siwessid(struct net_device *dev,
+@@ -1396,8 +1420,9 @@ static int cfg80211_wext_siwessid(struct net_device *dev,
static int cfg80211_wext_giwessid(struct net_device *dev,
struct iw_request_info *info,
@@ -162171,7 +162602,7 @@ index fd68283..0681bb2 100644
struct wireless_dev *wdev = dev->ieee80211_ptr;
data->flags = 0;
-@@ -1450,7 +1474,7 @@ static int cfg80211_wext_giwessid(struct net_device *dev,
+@@ -1415,7 +1440,7 @@ static int cfg80211_wext_giwessid(struct net_device *dev,
static int cfg80211_wext_siwpmksa(struct net_device *dev,
struct iw_request_info *info,
@@ -162180,7 +162611,7 @@ index fd68283..0681bb2 100644
{
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
-@@ -1490,38 +1514,38 @@ static int cfg80211_wext_siwpmksa(struct net_device *dev,
+@@ -1455,38 +1480,38 @@ static int cfg80211_wext_siwpmksa(struct net_device *dev,
}
static const iw_handler cfg80211_handlers[] = {
@@ -162287,10 +162718,10 @@ 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 c753211..d862a85 100644
+index dbb2738..6a52210 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,
+@@ -781,8 +781,7 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd,
*/
/* Support for very large requests */
@@ -162300,7 +162731,7 @@ index c753211..d862a85 100644
/* Allow userspace to GET more than max so
* we can support any size GET requests.
* There is still a limit : -ENOMEM.
-@@ -818,22 +817,6 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd,
+@@ -821,22 +820,6 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd,
}
}
@@ -162601,10 +163032,10 @@ index 05a6e3d..6716ec9 100644
__xfrm_sysctl_init(net);
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
-index 2cc7af8..7b5d2be 100644
+index d516845..a3c6950 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)
+@@ -2473,7 +2473,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
return -EINVAL;
{
@@ -162614,10 +163045,10 @@ index 2cc7af8..7b5d2be 100644
.done = link->done,
};
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
-index b2ab2a9..a6f6124 100644
+index 0f82314..9b1fdf0 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
-@@ -107,16 +107,20 @@ as-option = $(call try-run,\
+@@ -108,16 +108,20 @@ as-option = $(call try-run,\
as-instr = $(call try-run,\
printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
@@ -162640,7 +163071,7 @@ index b2ab2a9..a6f6124 100644
# cc-option-align
# Prefix align with either -falign or -malign
-@@ -126,7 +130,7 @@ cc-option-align = $(subst -functions=0,,\
+@@ -127,7 +131,7 @@ cc-option-align = $(subst -functions=0,,\
# cc-disable-warning
# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
cc-disable-warning = $(call try-run,\
@@ -162649,7 +163080,7 @@ index b2ab2a9..a6f6124 100644
# cc-name
# Expands to either gcc or clang
-@@ -146,7 +150,7 @@ cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3) || echo $(4))
+@@ -147,7 +151,7 @@ cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3) || echo $(4))
# cc-ldoption
# Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
cc-ldoption = $(call try-run,\
@@ -162669,7 +163100,7 @@ index 822ab4a..1d80897 100644
-subdir- += basic kconfig package
+subdir- += basic kconfig package gcc-plugins
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
-index e1bc190..b2ce235 100644
+index 0d1ca5b..11602e5 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -60,7 +60,7 @@ endif
@@ -162713,7 +163144,7 @@ index 53449a6..c1fd180 100644
warning-2 += -Wdisabled-optimization
diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins
new file mode 100644
-index 0000000..2a54819
+index 0000000..dc5098b
--- /dev/null
+++ b/scripts/Makefile.gcc-plugins
@@ -0,0 +1,100 @@
@@ -162799,7 +163230,7 @@ index 0000000..2a54819
+ ifeq ($(PLUGINCC),)
+ ifneq ($(GCC_PLUGINS_CFLAGS),)
+ ifeq ($(call cc-ifversion, -ge, 0405, y), y)
-+ $(Q)$(srctree)/scripts/gcc-plugin.sh --show-error "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)" || true
++ $(Q)$(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-plugin.sh --show-error "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)" || true)
+ @echo "Cannot use CONFIG_GCC_PLUGINS: your gcc installation does not support plugins, perhaps the necessary headers are missing?" >&2
+ else
+ @echo "Cannot use CONFIG_GCC_PLUGINS: your gcc version does not support plugins, you should upgrade it to at least gcc 4.5" >&2
@@ -162922,10 +163353,10 @@ 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 caef815..957ffde 100644
+index 746ec1e..994846b 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)
+@@ -197,7 +197,7 @@ static unsigned int strhash(const char *str, unsigned int sz)
/*
* Lookup a value in the configuration string.
*/
@@ -162934,7 +163365,7 @@ index caef815..957ffde 100644
{
struct item *aux;
-@@ -194,10 +194,10 @@ static void define_config(const char *name, int len, unsigned int hash)
+@@ -230,7 +230,7 @@ static void define_config(const char *name, int len, unsigned int hash)
/*
* Record the use of a CONFIG_* word.
*/
@@ -162942,12 +163373,8 @@ index caef815..957ffde 100644
+static void use_config(const char *m, unsigned int slen)
{
unsigned int hash = strhash(m, slen);
-- int c, i;
-+ unsigned int c, i;
- if (is_defined_config(m, slen, hash))
- return;
-@@ -218,9 +218,9 @@ static void use_config(const char *m, int slen)
+@@ -243,9 +243,9 @@ static void use_config(const char *m, int slen)
static void parse_config_file(const char *map, size_t len)
{
@@ -162959,7 +163386,7 @@ index caef815..957ffde 100644
const char *p, *q;
for (; m < end; m++) {
-@@ -421,7 +421,7 @@ static void print_deps(void)
+@@ -449,7 +449,7 @@ static void print_deps(void)
static void traps(void)
{
static char test[] __attribute__((aligned(sizeof(int)))) = "CONF";
@@ -162969,7 +163396,7 @@ index caef815..957ffde 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 0c03ac9..70a172e 100644
+index 386f956..a3b3365 100644
--- a/scripts/dtc/checks.c
+++ b/scripts/dtc/checks.c
@@ -277,7 +277,7 @@ NODE_ERROR(duplicate_property_names, NULL);
@@ -162981,7 +163408,7 @@ index 0c03ac9..70a172e 100644
if (n < strlen(node->name))
FAIL(c, "Bad character '%c' in node %s",
-@@ -297,7 +297,7 @@ NODE_ERROR(node_name_format, NULL, &node_name_chars);
+@@ -321,7 +321,7 @@ NODE_WARNING(unit_address_vs_reg, NULL);
static void check_property_name_chars(struct check *c, struct node *dt,
struct node *node, struct property *prop)
{
@@ -162990,7 +163417,7 @@ index 0c03ac9..70a172e 100644
if (n < strlen(prop->name))
FAIL(c, "Bad character '%c' in property name \"%s\", node %s",
-@@ -399,7 +399,7 @@ static void check_explicit_phandles(struct check *c, struct node *root,
+@@ -423,7 +423,7 @@ static void check_explicit_phandles(struct check *c, struct node *root,
phandle = propval_cell(prop);
@@ -162999,7 +163426,7 @@ index 0c03ac9..70a172e 100644
FAIL(c, "%s has bad value (0x%x) in %s property",
node->fullpath, phandle, prop->name);
return;
-@@ -462,7 +462,7 @@ static void fixup_phandle_references(struct check *c, struct node *dt,
+@@ -486,7 +486,7 @@ static void fixup_phandle_references(struct check *c, struct node *dt,
cell_t phandle;
for_each_marker_of_type(m, REF_PHANDLE) {
@@ -163008,7 +163435,7 @@ index 0c03ac9..70a172e 100644
refnode = get_node_by_ref(dt, m->ref);
if (! refnode) {
-@@ -688,7 +688,7 @@ static void enable_warning_error(struct check *c, bool warn, bool error)
+@@ -714,7 +714,7 @@ static void enable_warning_error(struct check *c, bool warn, bool error)
static void disable_warning_error(struct check *c, bool warn, bool error)
{
@@ -163017,7 +163444,7 @@ index 0c03ac9..70a172e 100644
/* Lowering level, also lower it for things this is the prereq
* for */
-@@ -709,7 +709,7 @@ static void disable_warning_error(struct check *c, bool warn, bool error)
+@@ -735,7 +735,7 @@ static void disable_warning_error(struct check *c, bool warn, bool error)
void parse_checks_option(bool warn, bool error, const char *arg)
{
@@ -163026,7 +163453,7 @@ index 0c03ac9..70a172e 100644
const char *name = arg;
bool enable = true;
-@@ -737,7 +737,7 @@ void parse_checks_option(bool warn, bool error, const char *arg)
+@@ -763,7 +763,7 @@ void parse_checks_option(bool warn, bool error, const char *arg)
void process_checks(bool force, struct boot_info *bi)
{
struct node *dt = bi->dt;
@@ -163062,7 +163489,7 @@ index 8cae237..dcdab66 100644
d.len += ret;
diff --git a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c
-index bd99fa2..e04d08d 100644
+index ec14954..dff184d 100644
--- a/scripts/dtc/flattree.c
+++ b/scripts/dtc/flattree.c
@@ -178,7 +178,7 @@ static void asm_emit_data(void *e, struct data d)
@@ -167972,7 +168399,7 @@ index 0000000..a7161bf
+}
diff --git a/scripts/gcc-plugins/randomize_layout_plugin.c b/scripts/gcc-plugins/randomize_layout_plugin.c
new file mode 100644
-index 0000000..3ac813e
+index 0000000..2ca34f1
--- /dev/null
+++ b/scripts/gcc-plugins/randomize_layout_plugin.c
@@ -0,0 +1,940 @@
@@ -168010,7 +168437,7 @@ index 0000000..3ac813e
+static int performance_mode;
+
+static struct plugin_info randomize_layout_plugin_info = {
-+ .version = "201607271952",
++ .version = "201402201816",
+ .help = "disable\t\t\tdo not activate plugin\n"
+ "performance-mode\tenable cacheline-aware layout randomization\n"
+};
@@ -185039,10 +185466,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..56d8f55
+index 0000000..d64cc64
--- /dev/null
+++ b/scripts/gcc-plugins/size_overflow_plugin/size_overflow_hash.data
-@@ -0,0 +1,21992 @@
+@@ -0,0 +1,22254 @@
+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
@@ -185060,6 +185487,7 @@ index 0000000..56d8f55
+enable_so_max_cache_pages_snd_emu10k1_24 max_cache_pages snd_emu10k1 0 24 &enable_so_dma_buf_sz_sxgbe_priv_data_24
+enable_so_T9_reportid_max_mxt_data_25 T9_reportid_max mxt_data 0 25 NULL
+enable_so_max_frags_vxge_hw_fifo_config_26 max_frags vxge_hw_fifo_config 0 26 NULL
++enable_so_snic_reset_stats_write_fndecl_30 snic_reset_stats_write fndecl 3 30 NULL
+enable_so_ocfs2_xattr_get_clusters_fndecl_34 ocfs2_xattr_get_clusters fndecl 0 34 NULL nohasharray
+enable_so_ath10k_core_create_fndecl_34 ath10k_core_create fndecl 1 34 &enable_so_ocfs2_xattr_get_clusters_fndecl_34
+enable_so_total_drm_buf_35 total drm_buf 0 35 NULL
@@ -185213,8 +185641,10 @@ index 0000000..56d8f55
+enable_so_security_inode_getxattr_fndecl_502 security_inode_getxattr fndecl 0 502 &enable_so_max_seg_sz_mmc_test_area_502 nohasharray
+enable_so_ll_mtu_ipw_hardware_502 ll_mtu ipw_hardware 0 502 &enable_so_security_inode_getxattr_fndecl_502
+enable_so_num_virtio_mmio_vq_info_503 num virtio_mmio_vq_info 0 503 NULL
-+enable_so_wa_xfer_status_to_errno_fndecl_506 wa_xfer_status_to_errno fndecl 0 506 NULL
-+enable_so_hlen_ip6_tnl_510 hlen ip6_tnl 0 510 NULL
++enable_so_wa_xfer_status_to_errno_fndecl_506 wa_xfer_status_to_errno fndecl 0 506 NULL nohasharray
++enable_so_tracing_map_create_fndecl_506 tracing_map_create fndecl 2 506 &enable_so_wa_xfer_status_to_errno_fndecl_506
++enable_so_hlen_ip6_tnl_510 hlen ip6_tnl 0 510 NULL nohasharray
++enable_so_mr_pool_size_srp_target_port_510 mr_pool_size srp_target_port 0 510 &enable_so_hlen_ip6_tnl_510
+enable_so_si476x_radio_read_acf_blob_fndecl_515 si476x_radio_read_acf_blob fndecl 3 515 NULL
+enable_so_length_qib_sge_516 length qib_sge 0 516 NULL
+enable_so_gfn_guest_walkerEPT_517 gfn guest_walkerEPT 0 517 NULL
@@ -185323,6 +185753,7 @@ index 0000000..56d8f55
+enable_so_SyS_sethostname_fndecl_837 SyS_sethostname fndecl 2 837 NULL
+enable_so_mdata_ofsh_cyttsp4_sysinfo_data_844 mdata_ofsh cyttsp4_sysinfo_data 0 844 NULL
+enable_so_s_inopb_ufs_sb_private_info_849 s_inopb ufs_sb_private_info 0 849 NULL
++enable_so__picolcd_flash_write_fndecl_853 _picolcd_flash_write fndecl 4 853 NULL
+enable_so_irnet_ctrl_write_fndecl_856 irnet_ctrl_write fndecl 3 856 NULL
+enable_so_rsi_copy_to_card_fndecl_858 rsi_copy_to_card fndecl 3 858 NULL nohasharray
+enable_so_nilfs_inode_by_name_fndecl_858 nilfs_inode_by_name fndecl 0 858 &enable_so_rsi_copy_to_card_fndecl_858
@@ -185427,6 +185858,7 @@ index 0000000..56d8f55
+enable_so_mdc800_device_read_fndecl_1123 mdc800_device_read fndecl 3 1123 NULL
+enable_so_ctl_in_pipe_brcmf_usbdev_info_1124 ctl_in_pipe brcmf_usbdev_info 0 1124 NULL
+enable_so_ion_handle_test_kernel_fndecl_1127 ion_handle_test_kernel fndecl 3-4 1127 NULL
++enable_so_do_kexec_load_fndecl_1129 do_kexec_load fndecl 2 1129 NULL
+enable_so_forw_xfs_dir3_icleaf_hdr_1136 forw xfs_dir3_icleaf_hdr 0 1136 NULL
+enable_so_log_num_mlx4_resource_1137 log_num mlx4_resource 0 1137 NULL
+enable_so_port_num_ib_mad_port_private_1140 port_num ib_mad_port_private 0 1140 NULL
@@ -185466,6 +185898,7 @@ index 0000000..56d8f55
+enable_so_i_sblock_bfs_inode_info_1228 i_sblock bfs_inode_info 0 1228 NULL
+enable_so_cached_dev_cache_miss_fndecl_1232 cached_dev_cache_miss fndecl 4 1232 NULL
+enable_so_pte_hole_mm_walk_1233 pte_hole mm_walk 0 1233 NULL
++enable_so_gtp_hashtable_new_fndecl_1236 gtp_hashtable_new fndecl 2 1236 NULL
+enable_so_prev_chunk_sectors_r5conf_1237 prev_chunk_sectors r5conf 0 1237 NULL
+enable_so_elf_headers_sz_kimage_arch_1238 elf_headers_sz kimage_arch 0 1238 NULL
+enable_so_buffer_dma_zd_usb_interrupt_1239 buffer_dma zd_usb_interrupt 0 1239 NULL
@@ -185517,12 +185950,14 @@ index 0000000..56d8f55
+enable_so_smsc911x_rx_get_rxstatus_fndecl_1389 smsc911x_rx_get_rxstatus fndecl 0 1389 NULL
+enable_so_stepped_offset_skb_seq_state_1395 stepped_offset skb_seq_state 0 1395 NULL
+enable_so_sctp_setsockopt_connectx_old_fndecl_1396 sctp_setsockopt_connectx_old fndecl 3 1396 NULL
-+enable_so_len_wsm_hdr_1398 len wsm_hdr 0 1398 NULL
++enable_so_len_wsm_hdr_1398 len wsm_hdr 0 1398 NULL nohasharray
++enable_so_sync_file_alloc_fndecl_1398 sync_file_alloc fndecl 1 1398 &enable_so_len_wsm_hdr_1398
+enable_so_dev_size_amd_flash_info_1399 dev_size amd_flash_info 0 1399 NULL
+enable_so_usb_transport_fail_vub300_mmc_host_1403 usb_transport_fail vub300_mmc_host 0 1403 NULL
+enable_so_cmd_size_scsi_host_template_1404 cmd_size scsi_host_template 0 1404 NULL
+enable_so_wl1271_rx_filter_get_fields_size_fndecl_1405 wl1271_rx_filter_get_fields_size fndecl 0 1405 NULL
+enable_so_num_hsi_port_1406 num hsi_port 0 1406 NULL
++enable_so_ide_core_cp_entry_fndecl_1407 ide_core_cp_entry fndecl 3 1407 NULL
+enable_so_ec_hdr_alsize_ubi_device_1411 ec_hdr_alsize ubi_device 0 1411 NULL
+enable_so_ubifs_leb_write_fndecl_1412 ubifs_leb_write fndecl 5-4 1412 NULL nohasharray
+enable_so_num_rx_bds_bcmgenet_priv_1412 num_rx_bds bcmgenet_priv 0 1412 &enable_so_ubifs_leb_write_fndecl_1412
@@ -185537,7 +185972,6 @@ index 0000000..56d8f55
+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_nr_cpusets_fndecl_1442 nr_cpusets fndecl 0 1442 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
@@ -185549,6 +185983,7 @@ index 0000000..56d8f55
+enable_so_ceph_decode_32_fndecl_1473 ceph_decode_32 fndecl 0 1473 NULL
+enable_so_xenbus_map_ring_valloc_pv_fndecl_1474 xenbus_map_ring_valloc_pv fndecl 3 1474 NULL
+enable_so_ax25_output_fndecl_1475 ax25_output fndecl 2 1475 NULL
++enable_so_iio_debugfs_write_reg_fndecl_1477 iio_debugfs_write_reg fndecl 3 1477 NULL
+enable_so_pbus_size_io_fndecl_1478 pbus_size_io fndecl 2 1478 NULL
+enable_so_nfs3_proc_symlink_fndecl_1479 nfs3_proc_symlink fndecl 4 1479 NULL
+enable_so_iscsi_sw_tcp_send_data_prep_fndecl_1485 iscsi_sw_tcp_send_data_prep fndecl 5-4 1485 NULL
@@ -185638,6 +186073,7 @@ index 0000000..56d8f55
+enable_so_userspace_do_request_fndecl_1738 userspace_do_request fndecl 5 1738 NULL
+enable_so_pci_omegapci_setup_fndecl_1740 pci_omegapci_setup fndecl 4 1740 NULL nohasharray
+enable_so_size_nhlt_specific_cfg_1740 size nhlt_specific_cfg 0 1740 &enable_so_pci_omegapci_setup_fndecl_1740
++enable_so_reg_list_format_size_bytes_amdgpu_rlc_1742 reg_list_format_size_bytes amdgpu_rlc 0 1742 NULL
+enable_so_ad_sd_write_reg_fndecl_1743 ad_sd_write_reg fndecl 3 1743 NULL nohasharray
+enable_so_nr_packets_saa7134_ts_1743 nr_packets saa7134_ts 0 1743 &enable_so_ad_sd_write_reg_fndecl_1743
+enable_so_compat_filldir_fndecl_1746 compat_filldir fndecl 3 1746 NULL
@@ -185674,6 +186110,7 @@ index 0000000..56d8f55
+enable_so_bufsize_saa7134_dmasound_1821 bufsize saa7134_dmasound 0 1821 NULL
+enable_so_lleft_ext4_allocation_request_1823 lleft ext4_allocation_request 0 1823 NULL nohasharray
+enable_so_s_size_qib_qp_1823 s_size qib_qp 0 1823 &enable_so_lleft_ext4_allocation_request_1823
++enable_so_rt2x00debug_write_eeprom_fndecl_1824 rt2x00debug_write_eeprom fndecl 3 1824 NULL
+enable_so_num_vectors_e1000_adapter_1827 num_vectors e1000_adapter 0 1827 NULL
+enable_so___add_prelim_ref_fndecl_1828 __add_prelim_ref fndecl 6-5-2 1828 NULL
+enable_so_ntfs_ucstonls_fndecl_1834 ntfs_ucstonls fndecl 3-5 1834 NULL
@@ -185697,6 +186134,7 @@ index 0000000..56d8f55
+enable_so_buf_size_cx18_stream_1878 buf_size cx18_stream 0 1878 &enable_so_sisusb_bulkin_msg_fndecl_1878
+enable_so_num_vmdq_vsis_i40e_pf_1882 num_vmdq_vsis i40e_pf 0 1882 NULL
+enable_so___clear_user_fndecl_1885 __clear_user fndecl 0 1885 NULL
++enable_so__iwl_dbgfs_fw_dbg_collect_write_fndecl_1890 _iwl_dbgfs_fw_dbg_collect_write fndecl 3 1890 NULL
+enable_so_vmxnet3_get_hdr_len_fndecl_1891 vmxnet3_get_hdr_len fndecl 0 1891 NULL
+enable_so_read_file_ani_fndecl_1898 read_file_ani fndecl 3 1898 NULL
+enable_so_cq_ecount_lpfc_sli4_hba_1907 cq_ecount lpfc_sli4_hba 0 1907 NULL
@@ -185741,7 +186179,8 @@ index 0000000..56d8f55
+enable_so_wdt87xx_i2c_xfer_fndecl_2059 wdt87xx_i2c_xfer fndecl 3-5 2059 NULL nohasharray
+enable_so_getgain_fndecl_2059 getgain fndecl 0 2059 &enable_so_wdt87xx_i2c_xfer_fndecl_2059 nohasharray
+enable_so_rt2x00queue_remove_l2pad_fndecl_2059 rt2x00queue_remove_l2pad fndecl 2 2059 &enable_so_getgain_fndecl_2059
-+enable_so_receive_n_bytes_fndecl_2063 receive_n_bytes fndecl 3 2063 NULL
++enable_so_receive_n_bytes_fndecl_2063 receive_n_bytes fndecl 3 2063 NULL nohasharray
++enable_so_kmalloc_order_trace_fndecl_2063 kmalloc_order_trace fndecl 1 2063 &enable_so_receive_n_bytes_fndecl_2063
+enable_so_val_bytes_regmap_format_2064 val_bytes regmap_format 0 2064 NULL
+enable_so_usbat_flash_read_data_fndecl_2065 usbat_flash_read_data fndecl 4 2065 NULL
+enable_so_ide_dump_status_fndecl_2068 ide_dump_status fndecl 0 2068 NULL
@@ -185753,6 +186192,7 @@ index 0000000..56d8f55
+enable_so_sensor_xres_em28xx_v4l2_2095 sensor_xres em28xx_v4l2 0 2095 NULL
+enable_so_size_nfs_fattr_2101 size nfs_fattr 0 2101 NULL
+enable_so_min_odd_fndecl_2105 min_odd fndecl 0-1-2 2105 NULL
++enable_so_qsfp1_debugfs_read_fndecl_2107 qsfp1_debugfs_read fndecl 3 2107 NULL
+enable_so_namelen_extended_attribute_2109 namelen extended_attribute 0 2109 NULL
+enable_so_dlen_nft_immediate_expr_2110 dlen nft_immediate_expr 0 2110 NULL
+enable_so_max_pkt_payload_len_nci_conn_info_2111 max_pkt_payload_len nci_conn_info 0 2111 NULL
@@ -185770,8 +186210,8 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_mdesc_kmalloc_fndecl_2141 mdesc_kmalloc fndecl 1 2141 &enable_so_connection_length_spar_controlvm_parameters_header_2141
++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__iwl_dbgfs_sta_drain_write_fndecl_2142 _iwl_dbgfs_sta_drain_write fndecl 3 2142 NULL
+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
@@ -185929,6 +186369,7 @@ index 0000000..56d8f55
+enable_so_mad_len_ib_mad_recv_wc_2683 mad_len ib_mad_recv_wc 0 2683 NULL
+enable_so_logo_lines_vardecl_fbcon_c_2685 logo_lines vardecl_fbcon.c 0 2685 NULL
+enable_so_queue_reply_fndecl_2691 queue_reply fndecl 3 2691 NULL
++enable_so___set_enter_print_fmt_fndecl_2700 __set_enter_print_fmt fndecl 0 2700 NULL
+enable_so_pkt_finish_packet_fndecl_2701 pkt_finish_packet fndecl 2 2701 NULL
+enable_so_crash_shrink_memory_fndecl_2706 crash_shrink_memory fndecl 1 2706 NULL
+enable_so_src_len_ccp_sha_engine_2711 src_len ccp_sha_engine 0 2711 NULL nohasharray
@@ -186056,7 +186497,6 @@ index 0000000..56d8f55
+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
@@ -186065,7 +186505,8 @@ index 0000000..56d8f55
+enable_so_ipip6_tunnel_change_mtu_fndecl_3119 ipip6_tunnel_change_mtu fndecl 2 3119 NULL nohasharray
+enable_so_blk_rq_map_user_fndecl_3119 blk_rq_map_user fndecl 5 3119 &enable_so_ipip6_tunnel_change_mtu_fndecl_3119 nohasharray
+enable_so_compat_filldir64_fndecl_3119 compat_filldir64 fndecl 3 3119 &enable_so_blk_rq_map_user_fndecl_3119 nohasharray
-+enable_so_controller_function_ms_boot_attr_info_3119 controller_function ms_boot_attr_info 0 3119 &enable_so_compat_filldir64_fndecl_3119
++enable_so_controller_function_ms_boot_attr_info_3119 controller_function ms_boot_attr_info 0 3119 &enable_so_compat_filldir64_fndecl_3119 nohasharray
++enable_so_key_size_tracing_map_3119 key_size tracing_map 0 3119 &enable_so_controller_function_ms_boot_attr_info_3119
+enable_so_status_whc_qhead_3133 status whc_qhead 0 3133 NULL
+enable_so_ext4_block_zero_page_range_fndecl_3135 ext4_block_zero_page_range fndecl 3 3135 NULL
+enable_so_strndup_user_fndecl_3136 strndup_user fndecl 2 3136 NULL
@@ -186119,7 +186560,6 @@ index 0000000..56d8f55
+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
@@ -186186,13 +186626,15 @@ index 0000000..56d8f55
+enable_so_len_nft_bitwise_3441 len nft_bitwise 0 3441 NULL nohasharray
+enable_so_command_setcolourbalance_fndecl_3441 command_setcolourbalance fndecl 0 3441 &enable_so_len_nft_bitwise_3441
+enable_so_uc_inSize_upc_req_3444 uc_inSize upc_req 0 3444 NULL
++enable_so_cifs_read_page_from_socket_fndecl_3452 cifs_read_page_from_socket fndecl 0 3452 NULL
+enable_so_rpipe_check_aim_fndecl_3456 rpipe_check_aim fndecl 0 3456 NULL nohasharray
+enable_so_scsi_debug_unmap_granularity_vardecl_scsi_debug_c_3456 scsi_debug_unmap_granularity vardecl_scsi_debug.c 0 3456 &enable_so_rpipe_check_aim_fndecl_3456
+enable_so_s_itb_per_group_ext4_sb_info_3459 s_itb_per_group ext4_sb_info 0 3459 NULL
+enable_so_adfs_dir_read_fndecl_3464 adfs_dir_read fndecl 2 3464 NULL
+enable_so_vm_stat_account_fndecl_3465 vm_stat_account fndecl 4 3465 NULL
+enable_so_intel_th_populate_fndecl_3473 intel_th_populate fndecl 4 3473 NULL
-+enable_so_ngpios_chv_community_3476 ngpios chv_community 0 3476 NULL
++enable_so_ngpios_chv_community_3476 ngpios chv_community 0 3476 NULL nohasharray
++enable_so_acpi_aml_write_fndecl_3476 acpi_aml_write fndecl 3 3476 &enable_so_ngpios_chv_community_3476
+enable_so_qib_qsfp_write_fndecl_3477 qib_qsfp_write fndecl 2-4-0 3477 NULL
+enable_so_namelen_xfs_dir2_sf_entry_3481 namelen xfs_dir2_sf_entry 0 3481 NULL nohasharray
+enable_so_chip_send_contexts_hfi1_devdata_3481 chip_send_contexts hfi1_devdata 0 3481 &enable_so_namelen_xfs_dir2_sf_entry_3481
@@ -186270,6 +186712,7 @@ index 0000000..56d8f55
+enable_so_srp_max_rsp_size_srpt_port_attrib_3700 srp_max_rsp_size srpt_port_attrib 0 3700 NULL
+enable_so_vmw_cmdbuf_space_pool_fndecl_3702 vmw_cmdbuf_space_pool fndecl 3 3702 NULL nohasharray
+enable_so_get_urb_error_fndecl_3702 get_urb_error fndecl 0 3702 &enable_so_vmw_cmdbuf_space_pool_fndecl_3702
++enable_so_allocate_cmdlines_buffer_fndecl_3704 allocate_cmdlines_buffer fndecl 1 3704 NULL
+enable_so_vlan_netdev_private_3705 vlan netdev_private 0 3705 NULL
+enable_so_ip_getsockopt_fndecl_3711 ip_getsockopt fndecl 0 3711 NULL
+enable_so_len_sctp_auth_bytes_3715 len sctp_auth_bytes 0 3715 NULL
@@ -186323,7 +186766,8 @@ index 0000000..56d8f55
+enable_so_size_of_priv_dvb_usb_adapter_fe_properties_3875 size_of_priv dvb_usb_adapter_fe_properties 0 3875 NULL
+enable_so_lbs_threshold_read_fndecl_3877 lbs_threshold_read fndecl 5 3877 NULL
+enable_so_console_size_ramoops_context_3884 console_size ramoops_context 0 3884 NULL
-+enable_so_s_num_blocks_omfs_sb_info_3888 s_num_blocks omfs_sb_info 0 3888 NULL
++enable_so_s_num_blocks_omfs_sb_info_3888 s_num_blocks omfs_sb_info 0 3888 NULL nohasharray
++enable_so_dbgfs_sram_len_il_priv_3888 dbgfs_sram_len il_priv 0 3888 &enable_so_s_num_blocks_omfs_sb_info_3888
+enable_so_fs_div_hfs_sb_info_3890 fs_div hfs_sb_info 0 3890 NULL
+enable_so_btrfs_inode_ref_name_len_fndecl_3891 btrfs_inode_ref_name_len fndecl 0 3891 NULL
+enable_so_snd_pcm_lib_preallocate_pages_fndecl_3892 snd_pcm_lib_preallocate_pages fndecl 4 3892 NULL nohasharray
@@ -186397,6 +186841,7 @@ index 0000000..56d8f55
+enable_so_mlx4_en_get_num_flows_fndecl_4078 mlx4_en_get_num_flows fndecl 0 4078 NULL
+enable_so_IOCRequestFrameSize_mpt3sas_facts_4079 IOCRequestFrameSize mpt3sas_facts 0 4079 NULL
+enable_so_bfad_iocmd_ioc_get_info_fndecl_4081 bfad_iocmd_ioc_get_info fndecl 0 4081 NULL
++enable_so_read_ftrace_buffer_info_4082 read ftrace_buffer_info 0 4082 NULL
+enable_so_kvm_vcpu_read_guest_page_fndecl_4083 kvm_vcpu_read_guest_page fndecl 2-5 4083 NULL nohasharray
+enable_so___set_extent_bit_fndecl_4083 __set_extent_bit fndecl 0-3-2 4083 &enable_so_kvm_vcpu_read_guest_page_fndecl_4083
+enable_so_n_drm_r128_depth_4085 n drm_r128_depth 0 4085 NULL
@@ -186436,7 +186881,8 @@ index 0000000..56d8f55
+enable_so_vfs_getxattr_fndecl_4203 vfs_getxattr fndecl 0 4203 NULL
+enable_so_sample_bits_snd_soc_dai_4206 sample_bits snd_soc_dai 0 4206 NULL nohasharray
+enable_so_parent___prelim_ref_4206 parent __prelim_ref 0 4206 &enable_so_sample_bits_snd_soc_dai_4206
-+enable_so_rx_page_order_il_hw_params_4208 rx_page_order il_hw_params 0 4208 NULL
++enable_so_rx_page_order_il_hw_params_4208 rx_page_order il_hw_params 0 4208 NULL nohasharray
++enable_so_auxv_size_prctl_mm_map_4208 auxv_size prctl_mm_map 0 4208 &enable_so_rx_page_order_il_hw_params_4208
+enable_so_rx_pkt_offset_rxpd_4210 rx_pkt_offset rxpd 0 4210 NULL
+enable_so_max_vectors_i40e_virtchnl_vf_resource_4213 max_vectors i40e_virtchnl_vf_resource 0 4213 NULL
+enable_so_ext2_setsize_fndecl_4215 ext2_setsize fndecl 2 4215 NULL nohasharray
@@ -186476,8 +186922,7 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so____copy_to_user_fndecl_4303 ___copy_to_user fndecl 0 4303 &enable_so_key_size_pkcs1pad_ctx_4303
++enable_so_key_size_pkcs1pad_ctx_4303 key_size pkcs1pad_ctx 0 4303 &enable_so_maxpacket_musb_qh_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
@@ -186505,11 +186950,12 @@ index 0000000..56d8f55
+enable_so_diReadSpecial_fndecl_4393 diReadSpecial fndecl 2 4393 NULL
+enable_so_ivtv_udma_setup_fndecl_4395 ivtv_udma_setup fndecl 4 4395 NULL
+enable_so_mgag200_bo_create_fndecl_4398 mgag200_bo_create fndecl 2 4398 NULL
-+enable_so_skb_realloc_headroom_fndecl_4399 skb_realloc_headroom fndecl 2 4399 NULL
++enable_so_skb_realloc_headroom_fndecl_4399 skb_realloc_headroom fndecl 2 4399 NULL nohasharray
++enable_so_ath10k_mem_value_write_fndecl_4399 ath10k_mem_value_write fndecl 3 4399 &enable_so_skb_realloc_headroom_fndecl_4399
+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_pxad_prep_dma_cyclic_fndecl_4411 pxad_prep_dma_cyclic fndecl 4-3 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
@@ -186549,7 +186995,6 @@ index 0000000..56d8f55
+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
@@ -186681,6 +187126,7 @@ index 0000000..56d8f55
+enable_so_read_tape_fndecl_4950 read_tape fndecl 2 4950 &enable_so_mlx5_ib_db_map_user_fndecl_4950
+enable_so_clear_extent_uptodate_fndecl_4952 clear_extent_uptodate fndecl 2-3 4952 NULL
+enable_so_myri10ge_get_txrx_fndecl_4953 myri10ge_get_txrx fndecl 2 4953 NULL
++enable_so_aat2870_reg_write_file_fndecl_4965 aat2870_reg_write_file fndecl 3 4965 NULL
+enable_so_fuse_conn_limit_read_fndecl_4967 fuse_conn_limit_read fndecl 3 4967 NULL
+enable_so_team_options_register_fndecl_4968 team_options_register fndecl 3 4968 NULL
+enable_so_radeon_align_pitch_fndecl_4969 radeon_align_pitch fndecl 0-2 4969 NULL
@@ -186843,6 +187289,7 @@ index 0000000..56d8f55
+enable_so_size_drm_radeon_gem_create_5440 size drm_radeon_gem_create 0 5440 NULL
+enable_so_vlen_nfsd_writeargs_5461 vlen nfsd_writeargs 0 5461 NULL
+enable_so_btrfs_fiemap_fndecl_5462 btrfs_fiemap fndecl 4-3 5462 NULL
++enable_so_num_stations_il_priv_5465 num_stations il_priv 0 5465 NULL
+enable_so_acpi_register_gsi_ioapic_fndecl_5477 acpi_register_gsi_ioapic fndecl 2 5477 NULL
+enable_so_max_pkeys_mthca_dev_lim_5481 max_pkeys mthca_dev_lim 0 5481 NULL
+enable_so_efs_find_entry_fndecl_5485 efs_find_entry fndecl 0 5485 NULL
@@ -186855,6 +187302,7 @@ index 0000000..56d8f55
+enable_so_pn_socket_create_fndecl_5510 pn_socket_create fndecl 3 5510 &enable_so___tipc_sendmsg_fndecl_5510
+enable_so_vmw_execbuf_submit_cmdbuf_fndecl_5516 vmw_execbuf_submit_cmdbuf fndecl 3 5516 NULL
+enable_so_nsrcs_igmpv3_query_5520 nsrcs igmpv3_query 0 5520 NULL
++enable_so_wiidebug_eeprom_read_fndecl_5523 wiidebug_eeprom_read fndecl 3 5523 NULL
+enable_so_smk_write_rules_list_fndecl_5526 smk_write_rules_list fndecl 3 5526 NULL
+enable_so_line_slgt_info_5527 line slgt_info 0 5527 NULL
+enable_so_ceph_tcp_sendpage_fndecl_5531 ceph_tcp_sendpage fndecl 0-4 5531 NULL
@@ -187110,6 +187558,8 @@ index 0000000..56d8f55
+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__iwl_dbgfs_set_nic_temperature_write_fndecl_6303 _iwl_dbgfs_set_nic_temperature_write fndecl 3 6303 NULL
++enable_so_count_leafs_fndecl_6305 count_leafs fndecl 0 6305 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
@@ -187156,6 +187606,7 @@ index 0000000..56d8f55
+enable_so_max_agbno_xfs_alloc_arg_6395 max_agbno xfs_alloc_arg 0 6395 NULL nohasharray
+enable_so_totalreserve_pages_vardecl_6395 totalreserve_pages vardecl 0 6395 &enable_so_max_agbno_xfs_alloc_arg_6395
+enable_so_i_file_acl_ext2_inode_info_6396 i_file_acl ext2_inode_info 0 6396 NULL
++enable_so_lpfc_debugfs_dif_err_write_fndecl_6403 lpfc_debugfs_dif_err_write fndecl 3 6403 NULL
+enable_so_srpt_post_send_fndecl_6405 srpt_post_send fndecl 3 6405 NULL nohasharray
+enable_so_compat_sys_ppoll_fndecl_6405 compat_sys_ppoll fndecl 2 6405 &enable_so_srpt_post_send_fndecl_6405
+enable_so_alloc_blocks_hfs_inode_info_6406 alloc_blocks hfs_inode_info 0 6406 NULL
@@ -187170,7 +187621,6 @@ index 0000000..56d8f55
+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
@@ -187208,6 +187658,7 @@ index 0000000..56d8f55
+enable_so_active_duplex_tg3_link_config_6559 active_duplex tg3_link_config 0 6559 NULL
+enable_so_verity_verify_io_fndecl_6564 verity_verify_io fndecl 0 6564 NULL
+enable_so_vlan_tpid_ovs_action_push_vlan_6565 vlan_tpid ovs_action_push_vlan 0 6565 NULL
++enable_so_num_x_edt_ft5x06_ts_data_6566 num_x edt_ft5x06_ts_data 0 6566 NULL
+enable_so_sddr09_read21_fndecl_6568 sddr09_read21 fndecl 4-3-6 6568 NULL nohasharray
+enable_so_neigh_hash_alloc_fndecl_6568 neigh_hash_alloc fndecl 1 6568 &enable_so_sddr09_read21_fndecl_6568
+enable_so_acpi_ut_create_package_object_fndecl_6569 acpi_ut_create_package_object fndecl 1 6569 NULL
@@ -187272,6 +187723,7 @@ index 0000000..56d8f55
+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
+enable_so_gnttab_alloc_grant_references_fndecl_6739 gnttab_alloc_grant_references fndecl 1 6739 NULL
++enable_so_alloc_trace_uprobe_fndecl_6740 alloc_trace_uprobe fndecl 3 6740 NULL
+enable_so_num_vectors_qed_int_param_6741 num_vectors qed_int_param 0 6741 NULL
+enable_so__read_and_match_data_map_fndecl_6747 _read_and_match_data_map fndecl 2 6747 NULL
+enable_so_rfcomm_sock_setsockopt_fndecl_6749 rfcomm_sock_setsockopt fndecl 5 6749 NULL
@@ -187353,6 +187805,7 @@ index 0000000..56d8f55
+enable_so_af9013_write_ofsm_regs_fndecl_6965 af9013_write_ofsm_regs fndecl 4 6965 NULL
+enable_so_ufs_free_blocks_fndecl_6968 ufs_free_blocks fndecl 3-2 6968 NULL nohasharray
+enable_so_tlv_put_u64_fndecl_6968 tlv_put_u64 fndecl 0 6968 &enable_so_ufs_free_blocks_fndecl_6968
++enable_so_mwifiex_verext_write_fndecl_6972 mwifiex_verext_write fndecl 3 6972 NULL
+enable_so_odm_group_width_pnfs_osd_data_map_6977 odm_group_width pnfs_osd_data_map 0 6977 NULL
+enable_so_mq_msg_max_ipc_namespace_6978 mq_msg_max ipc_namespace 0 6978 NULL
+enable_so_pvr2_v4l2_read_fndecl_6981 pvr2_v4l2_read fndecl 3 6981 NULL
@@ -187448,6 +187901,7 @@ index 0000000..56d8f55
+enable_so_drbd_drain_block_fndecl_7210 drbd_drain_block fndecl 2 7210 &enable_so_size_srp_iu_7210
+enable_so_rivafb_do_maximize_fndecl_7212 rivafb_do_maximize fndecl 3-4 7212 NULL nohasharray
+enable_so_eq_ecount_lpfc_sli4_hba_7212 eq_ecount lpfc_sli4_hba 0 7212 &enable_so_rivafb_do_maximize_fndecl_7212
++enable_so__iwl_dbgfs_bt_force_ant_write_fndecl_7214 _iwl_dbgfs_bt_force_ant_write fndecl 3 7214 NULL
+enable_so_max_id_Scsi_Host_7217 max_id Scsi_Host 0 7217 NULL
+enable_so_num_chipselect_spi_gpio_platform_data_7218 num_chipselect spi_gpio_platform_data 0 7218 NULL
+enable_so_bfad_iocmd_qos_get_attr_fndecl_7226 bfad_iocmd_qos_get_attr fndecl 0 7226 NULL
@@ -187591,6 +188045,7 @@ index 0000000..56d8f55
+enable_so_compat_SyS_migrate_pages_fndecl_7673 compat_SyS_migrate_pages fndecl 2 7673 NULL
+enable_so_rds_sendmsg_fndecl_7675 rds_sendmsg fndecl 3 7675 NULL
+enable_so_nfsd_max_blksize_vardecl_7678 nfsd_max_blksize vardecl 0 7678 NULL
++enable_so_nfp_net_shadow_rx_rings_prepare_fndecl_7679 nfp_net_shadow_rx_rings_prepare fndecl 3 7679 NULL
+enable_so_shmem_read_mapping_page_gfp_fndecl_7681 shmem_read_mapping_page_gfp fndecl 2 7681 NULL
+enable_so_UniStrnlen_fndecl_7682 UniStrnlen fndecl 0 7682 NULL
+enable_so_pm860x_page_bulk_read_fndecl_7685 pm860x_page_bulk_read fndecl 3 7685 NULL nohasharray
@@ -187638,6 +188093,7 @@ index 0000000..56d8f55
+enable_so_st_do_scsi_fndecl_7789 st_do_scsi fndecl 4 7789 NULL
+enable_so_qxl_framebuffer_surface_dirty_fndecl_7791 qxl_framebuffer_surface_dirty fndecl 6 7791 NULL nohasharray
+enable_so_pg_read_fndecl_7791 pg_read fndecl 3 7791 &enable_so_qxl_framebuffer_surface_dirty_fndecl_7791
++enable_so_sysctl_perf_event_max_stack_vardecl_7792 sysctl_perf_event_max_stack vardecl 0 7792 NULL
+enable_so_inode_getblk_fndecl_7794 inode_getblk fndecl 2-0 7794 NULL
+enable_so___clk_speculate_rates_fndecl_7795 __clk_speculate_rates fndecl 2 7795 NULL
+enable_so_remove_advertising_fndecl_7798 remove_advertising fndecl 4 7798 NULL
@@ -187828,6 +188284,7 @@ index 0000000..56d8f55
+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_batadv_iv_ogm_drop_bcast_own_sum_entry_fndecl_8430 batadv_iv_ogm_drop_bcast_own_sum_entry fndecl 2 8430 NULL
+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
@@ -187964,7 +188421,8 @@ index 0000000..56d8f55
+enable_so_data_dma_powermate_device_8783 data_dma powermate_device 0 8783 NULL
+enable_so_rx_tr_cfv_info_8786 rx_tr cfv_info 0 8786 NULL nohasharray
+enable_so___pg_advance_sg_page_iter_8786 __pg_advance sg_page_iter 0 8786 &enable_so_rx_tr_cfv_info_8786
-+enable_so_nfs_setup_write_request_fndecl_8793 nfs_setup_write_request fndecl 3-4 8793 NULL
++enable_so_nfs_setup_write_request_fndecl_8793 nfs_setup_write_request fndecl 3-4 8793 NULL nohasharray
++enable_so_mem_swapout_entry_fndecl_8793 mem_swapout_entry fndecl 3 8793 &enable_so_nfs_setup_write_request_fndecl_8793
+enable_so_lcd_vblank_len_atyfb_par_8796 lcd_vblank_len atyfb_par 0 8796 NULL
+enable_so_logic_start_scrub_parity_8798 logic_start scrub_parity 0 8798 NULL
+enable_so_write_ext_msg_fndecl_8804 write_ext_msg fndecl 3 8804 NULL
@@ -187981,7 +188439,6 @@ index 0000000..56d8f55
+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
@@ -188004,6 +188461,7 @@ index 0000000..56d8f55
+enable_so_bits_per_pixel_fb_var_screeninfo_8906 bits_per_pixel fb_var_screeninfo 0 8906 &enable_so_a_data_exec_8906
+enable_so_fll_factors_fndecl_8907 fll_factors fndecl 2-3 8907 NULL
+enable_so__xfs_buf_get_pages_fndecl_8920 _xfs_buf_get_pages fndecl 2 8920 NULL
++enable_so_rt2x00debug_read_queue_dump_fndecl_8923 rt2x00debug_read_queue_dump fndecl 3 8923 NULL
+enable_so_data_size_mdp_superblock_1_8925 data_size mdp_superblock_1 0 8925 NULL nohasharray
+enable_so_max_transfer_size_dwc2_core_params_8925 max_transfer_size dwc2_core_params 0 8925 &enable_so_data_size_mdp_superblock_1_8925
+enable_so_fip_flags_fip_header_8926 fip_flags fip_header 0 8926 NULL
@@ -188167,6 +188625,7 @@ index 0000000..56d8f55
+enable_so_mss_clamp_tcp_options_received_9378 mss_clamp tcp_options_received 0 9378 NULL
+enable_so_fix_priv_head_fndecl_9385 fix_priv_head fndecl 2 9385 NULL
+enable_so_nr_uart_driver_9391 nr uart_driver 0 9391 NULL
++enable_so_dwc2_hsotg_handle_unaligned_buf_start_fndecl_9392 dwc2_hsotg_handle_unaligned_buf_start fndecl 0 9392 NULL
+enable_so_dr_pre_altera_jtag_9393 dr_pre altera_jtag 0 9393 NULL
+enable_so_ubifs_tnc_add_nm_fndecl_9397 ubifs_tnc_add_nm fndecl 4-5 9397 NULL
+enable_so_sr_bg_blkno_ocfs2_suballoc_result_9401 sr_bg_blkno ocfs2_suballoc_result 0 9401 NULL
@@ -188182,6 +188641,7 @@ index 0000000..56d8f55
+enable_so_dgap_config_get_num_prts_fndecl_9435 dgap_config_get_num_prts fndecl 0 9435 NULL
+enable_so_ext4_restore_inline_data_fndecl_9436 ext4_restore_inline_data fndecl 5 9436 NULL
+enable_so_height_stk1160_9446 height stk1160 0 9446 NULL
++enable_so__max_socket_vardecl_x2apic_uv_x_c_9456 _max_socket vardecl_x2apic_uv_x.c 0 9456 NULL
+enable_so_evdev_get_mask_fndecl_9457 evdev_get_mask fndecl 4 9457 NULL
+enable_so_mtdchar_readoob_fndecl_9459 mtdchar_readoob fndecl 4-3 9459 NULL
+enable_so_si21_writeregs_fndecl_9460 si21_writeregs fndecl 4 9460 NULL
@@ -188409,6 +188869,7 @@ index 0000000..56d8f55
+enable_so_em28xx_init_usb_xfer_fndecl_10106 em28xx_init_usb_xfer fndecl 5-6-4 10106 NULL
+enable_so_finish_wqe_fndecl_10107 finish_wqe fndecl 3 10107 NULL nohasharray
+enable_so__regmap_raw_multi_reg_write_fndecl_10107 _regmap_raw_multi_reg_write fndecl 3 10107 &enable_so_finish_wqe_fndecl_10107
++enable_so_trace_parser_get_init_fndecl_10112 trace_parser_get_init fndecl 2 10112 NULL
+enable_so_req_sz__MPT_ADAPTER_10113 req_sz _MPT_ADAPTER 0 10113 NULL
+enable_so_tfms_count_crypt_config_10114 tfms_count crypt_config 0 10114 NULL
+enable_so_uvc_video_encode_data_fndecl_10117 uvc_video_encode_data fndecl 0-4 10117 NULL nohasharray
@@ -188520,6 +188981,7 @@ index 0000000..56d8f55
+enable_so_num_vss_cfgs_wm8994_pdata_10405 num_vss_cfgs wm8994_pdata 0 10405 &enable_so__osd_req_sizeof_alist_header_fndecl_10405
+enable_so_zap_vma_ptes_fndecl_10406 zap_vma_ptes fndecl 3-2 10406 NULL
+enable_so_u_memcpya_fndecl_10408 u_memcpya fndecl 2-3 10408 NULL
++enable_so_jfs_xattr_set_fndecl_10409 jfs_xattr_set fndecl 6 10409 NULL
+enable_so_addr_page_req_dsc_10411 addr page_req_dsc 0 10411 NULL
+enable_so_off_xtsplit_10412 off xtsplit 0 10412 NULL
+enable_so_max_ctrl_size_ims_pcu_10413 max_ctrl_size ims_pcu 0 10413 NULL
@@ -188568,7 +189030,8 @@ index 0000000..56d8f55
+enable_so_xen_set_callback_via_fndecl_10541 xen_set_callback_via fndecl 1 10541 NULL
+enable_so_y_skip_top_mt9m001_10547 y_skip_top mt9m001 0 10547 NULL nohasharray
+enable_so_isofs_get_last_session_fndecl_10547 isofs_get_last_session fndecl 0 10547 &enable_so_y_skip_top_mt9m001_10547
-+enable_so_read_cis_cache_fndecl_10548 read_cis_cache fndecl 4 10548 NULL
++enable_so_read_cis_cache_fndecl_10548 read_cis_cache fndecl 4 10548 NULL nohasharray
++enable_so_nfp_net_netdev_alloc_fndecl_10548 nfp_net_netdev_alloc fndecl 2-3 10548 &enable_so_read_cis_cache_fndecl_10548
+enable_so_nv_change_mtu_fndecl_10551 nv_change_mtu fndecl 2 10551 NULL
+enable_so_wm_adsp_read_algs_fndecl_10552 wm_adsp_read_algs fndecl 4 10552 NULL
+enable_so_new_leaf_fndecl_10553 new_leaf fndecl 3 10553 NULL
@@ -188657,7 +189120,8 @@ index 0000000..56d8f55
+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
-+enable_so_ea_write_fndecl_10791 ea_write fndecl 3 10791 &enable_so_pnode_sz_ubifs_info_10791
++enable_so_ea_write_fndecl_10791 ea_write fndecl 3 10791 &enable_so_pnode_sz_ubifs_info_10791 nohasharray
++enable_so_dwc3_testmode_write_fndecl_10791 dwc3_testmode_write fndecl 3 10791 &enable_so_ea_write_fndecl_10791
+enable_so_read32_brcmf_buscore_ops_10795 read32 brcmf_buscore_ops 0 10795 NULL
+enable_so_set_config_fndecl_10797 set_config fndecl 0 10797 NULL
+enable_so_num_events_kfd_ioctl_wait_events_args_10811 num_events kfd_ioctl_wait_events_args 0 10811 NULL nohasharray
@@ -188807,6 +189271,7 @@ index 0000000..56d8f55
+enable_so_nr_pins_timbgpio_platform_data_11195 nr_pins timbgpio_platform_data 0 11195 NULL
+enable_so_mangle_sdp_packet_fndecl_11198 mangle_sdp_packet fndecl 2-10 11198 NULL
+enable_so_snoop_send_pio_handler_fndecl_11203 snoop_send_pio_handler fndecl 3 11203 NULL
++enable_so_trace_insert_enum_map_fndecl_11206 trace_insert_enum_map fndecl 3 11206 NULL
+enable_so_vb2_fop_write_fndecl_11207 vb2_fop_write fndecl 3 11207 NULL
+enable_so_wipers_mcp4531_cfg_11208 wipers mcp4531_cfg 0 11208 NULL
+enable_so_used_bytes_ubi_volume_info_11209 used_bytes ubi_volume_info 0 11209 NULL
@@ -188871,6 +189336,7 @@ index 0000000..56d8f55
+enable_so_rxBytesRemaining_edgeport_serial_11436 rxBytesRemaining edgeport_serial 0 11436 NULL nohasharray
+enable_so_rule_cnt_ethtool_rxnfc_11436 rule_cnt ethtool_rxnfc 0 11436 &enable_so_rxBytesRemaining_edgeport_serial_11436
+enable_so_acpi_node_prop_read_fndecl_11442 acpi_node_prop_read fndecl 0 11442 NULL
++enable_so_iwl_dbgfs_log_event_write_fndecl_11443 iwl_dbgfs_log_event_write fndecl 3 11443 NULL
+enable_so_llsec_do_decrypt_auth_fndecl_11445 llsec_do_decrypt_auth fndecl 0 11445 NULL
+enable_so_ccp_init_dm_workarea_fndecl_11450 ccp_init_dm_workarea fndecl 3 11450 NULL
+enable_so___compat_sys_preadv64_fndecl_11452 __compat_sys_preadv64 fndecl 3 11452 NULL
@@ -188887,6 +189353,7 @@ index 0000000..56d8f55
+enable_so_c_cpos_ocfs2_write_cluster_desc_11481 c_cpos ocfs2_write_cluster_desc 0 11481 &enable_so_iov_shorten_fndecl_11481
+enable_so_num_crtc_drm_mode_config_11484 num_crtc drm_mode_config 0 11484 NULL
+enable_so_count_e1000_ring_11491 count e1000_ring 0 11491 NULL
++enable_so__max_pnode_vardecl_x2apic_uv_x_c_11492 _max_pnode vardecl_x2apic_uv_x.c 0 11492 NULL
+enable_so_get_ablock_fndecl_11495 get_ablock fndecl 2 11495 NULL nohasharray
+enable_so_length_RioCommand_11495 length RioCommand 0 11495 &enable_so_get_ablock_fndecl_11495
+enable_so_batadv_max_header_len_fndecl_11496 batadv_max_header_len fndecl 0 11496 NULL
@@ -188970,6 +189437,7 @@ index 0000000..56d8f55
+enable_so_num_mtt_mthca_profile_11767 num_mtt mthca_profile 0 11767 NULL
+enable_so_length_acpi_dmar_header_11768 length acpi_dmar_header 0 11768 NULL
+enable_so_grow_buffers_fndecl_11774 grow_buffers fndecl 3-2 11774 NULL
++enable_so_num_fences_sync_file_11779 num_fences sync_file 0 11779 NULL
+enable_so_pci_scan_child_bus_fndecl_11784 pci_scan_child_bus fndecl 0 11784 NULL
+enable_so_svc_pool_map_init_percpu_fndecl_11792 svc_pool_map_init_percpu fndecl 0 11792 NULL nohasharray
+enable_so_iscsi_sw_tcp_session_create_fndecl_11792 iscsi_sw_tcp_session_create fndecl 3 11792 &enable_so_svc_pool_map_init_percpu_fndecl_11792
@@ -188983,17 +189451,18 @@ index 0000000..56d8f55
+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
-+enable_so_acpi_allocate_root_table_fndecl_11829 acpi_allocate_root_table fndecl 1 11829 NULL
++enable_so_acpi_allocate_root_table_fndecl_11829 acpi_allocate_root_table fndecl 1 11829 NULL nohasharray
++enable_so_do_register_entry_fndecl_11829 do_register_entry fndecl 4 11829 &enable_so_acpi_allocate_root_table_fndecl_11829
+enable_so_length_TAG_TW_SG_Entry_ISO_11846 length TAG_TW_SG_Entry_ISO 0 11846 NULL
+enable_so_mic_vringh_copy_fndecl_11848 mic_vringh_copy fndecl 4 11848 NULL
+enable_so_num_crtc_mga_device_11851 num_crtc mga_device 0 11851 NULL
+enable_so_number_of_packets_urb_11853 number_of_packets urb 0 11853 NULL nohasharray
+enable_so_add_to_page_cache_lru_fndecl_11853 add_to_page_cache_lru fndecl 0 11853 &enable_so_number_of_packets_urb_11853
+enable_so_sg_tablesize_srp_target_port_11858 sg_tablesize srp_target_port 0 11858 NULL
++enable_so_btmrvl_pscmd_write_fndecl_11859 btmrvl_pscmd_write fndecl 3 11859 NULL
+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
@@ -189014,7 +189483,6 @@ index 0000000..56d8f55
+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
@@ -189121,6 +189589,7 @@ index 0000000..56d8f55
+enable_so_alignment_acpi_resource_memory24_12188 alignment acpi_resource_memory24 0 12188 NULL
+enable_so_max_qp_sz_mlx4_dev_cap_12189 max_qp_sz mlx4_dev_cap 0 12189 NULL
+enable_so_lpfc_bsg_diag_mode_enter_fndecl_12200 lpfc_bsg_diag_mode_enter fndecl 0 12200 NULL
++enable_so_alloc_and_copy_ftrace_hash_fndecl_12203 alloc_and_copy_ftrace_hash fndecl 1 12203 NULL
+enable_so_handle_gk20a_instobj_dma_12206 handle gk20a_instobj_dma 0 12206 NULL
+enable_so_lmc_crcSize_lmc___softc_12208 lmc_crcSize lmc___softc 0 12208 NULL
+enable_so_length_cifs_io_parms_12209 length cifs_io_parms 0 12209 NULL nohasharray
@@ -189148,15 +189617,16 @@ index 0000000..56d8f55
+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
+enable_so_sctp_make_abort_violation_fndecl_12324 sctp_make_abort_violation fndecl 4 12324 &enable_so_length_sg_mapping_iter_12324
+enable_so_ubifs_change_lp_fndecl_12325 ubifs_change_lp fndecl 3 12325 NULL
+enable_so_no_of_triplet_mwifiex_802_11d_domain_reg_12326 no_of_triplet mwifiex_802_11d_domain_reg 0 12326 NULL
++enable_so_tracing_clock_write_fndecl_12330 tracing_clock_write fndecl 3 12330 NULL
+enable_so_s_log_block_size_nilfs_super_block_12332 s_log_block_size nilfs_super_block 0 12332 NULL
-+enable_so_read_regr_pi_protocol_12333 read_regr pi_protocol 0 12333 NULL
++enable_so_read_regr_pi_protocol_12333 read_regr pi_protocol 0 12333 NULL nohasharray
++enable_so_srpt_alloc_rw_ctxs_fndecl_12333 srpt_alloc_rw_ctxs fndecl 3 12333 &enable_so_read_regr_pi_protocol_12333
+enable_so_status_w840_rx_desc_12335 status w840_rx_desc 0 12335 NULL nohasharray
+enable_so_snd_hdac_bus_exec_verb_unlocked_fndecl_12335 snd_hdac_bus_exec_verb_unlocked fndecl 0 12335 &enable_so_status_w840_rx_desc_12335
+enable_so_out_usbnet_12337 out usbnet 0 12337 NULL
@@ -189189,6 +189659,7 @@ index 0000000..56d8f55
+enable_so_buffer_size_zoran_buffer_col_12398 buffer_size zoran_buffer_col 0 12398 NULL
+enable_so_powercap_register_zone_fndecl_12399 powercap_register_zone fndecl 6 12399 NULL
+enable_so_ieee802154_alloc_hw_fndecl_12400 ieee802154_alloc_hw fndecl 1 12400 NULL
++enable_so_edt_ft5x06_debugfs_raw_data_read_fndecl_12401 edt_ft5x06_debugfs_raw_data_read fndecl 3 12401 NULL
+enable_so_acl_len_nfs_setaclargs_12402 acl_len nfs_setaclargs 0 12402 NULL
+enable_so_length_iw_point_12404 length iw_point 0 12404 NULL
+enable_so_reg_read_fndecl_12405 reg_read fndecl 4 12405 NULL
@@ -189305,7 +189776,7 @@ index 0000000..56d8f55
+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_rdma_rw_init_mr_wrs_fndecl_12719 rdma_rw_init_mr_wrs fndecl 5 12719 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
@@ -189323,6 +189794,7 @@ index 0000000..56d8f55
+enable_so_sb_fseg_start_nilfs_segment_buffer_12802 sb_fseg_start nilfs_segment_buffer 0 12802 NULL
+enable_so_mpage_readpages_fndecl_12807 mpage_readpages fndecl 3 12807 NULL
+enable_so_object_num_mxt_info_12810 object_num mxt_info 0 12810 NULL
++enable_so_testmode_write_fndecl_12814 testmode_write fndecl 3 12814 NULL
+enable_so_hint_events_per_packet_input_dev_12818 hint_events_per_packet input_dev 0 12818 NULL nohasharray
+enable_so_subdev_ioctl_fndecl_12818 subdev_ioctl fndecl 2 12818 &enable_so_hint_events_per_packet_input_dev_12818
+enable_so_xen_pirq_from_irq_fndecl_12820 xen_pirq_from_irq fndecl 0 12820 NULL
@@ -189331,6 +189803,7 @@ index 0000000..56d8f55
+enable_so_falcon_spi_device_init_fndecl_12835 falcon_spi_device_init fndecl 4 12835 NULL
+enable_so_xfs_rtfind_back_fndecl_12849 xfs_rtfind_back fndecl 3 12849 NULL
+enable_so_sbs_setup_fndecl_12851 sbs_setup fndecl 4 12851 NULL
++enable_so_of_n_addr_cells_fndecl_12852 of_n_addr_cells fndecl 0 12852 NULL
+enable_so_rx_buffer_size_macb_12864 rx_buffer_size macb 0 12864 NULL
+enable_so_snd_interval_refine_max_fndecl_12865 snd_interval_refine_max fndecl 2 12865 NULL
+enable_so_frameoffset_b43legacy_dmaring_12869 frameoffset b43legacy_dmaring 0 12869 NULL
@@ -189344,6 +189817,7 @@ index 0000000..56d8f55
+enable_so_max_response_pages_fndecl_12895 max_response_pages fndecl 0 12895 NULL
+enable_so_offset_ceph_dentry_info_12896 offset ceph_dentry_info 0 12896 NULL
+enable_so_early_init_dt_alloc_memory_arch_fndecl_12899 early_init_dt_alloc_memory_arch fndecl 2-1 12899 NULL
++enable_so_dbgfs_sram_len_iwl_mvm_12900 dbgfs_sram_len iwl_mvm 0 12900 NULL
+enable_so_tool_db_read_fndecl_12902 tool_db_read fndecl 3 12902 NULL
+enable_so_ccw_cursor_fndecl_12903 ccw_cursor fndecl 4 12903 NULL
+enable_so_capinc_tty_write_fndecl_12904 capinc_tty_write fndecl 3 12904 NULL
@@ -189380,8 +189854,6 @@ index 0000000..56d8f55
+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
@@ -189416,8 +189888,7 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_ds_data_fndecl_13093 ds_data fndecl 3 13093 &enable_so_thermal_zone_device_register_fndecl_13093
++enable_so_thermal_zone_device_register_fndecl_13093 thermal_zone_device_register fndecl 2 13093 &enable_so_cursg_ofs_ide_cmd_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
@@ -189445,6 +189916,7 @@ index 0000000..56d8f55
+enable_so_len_mtd_write_req_13154 len mtd_write_req 0 13154 NULL nohasharray
+enable_so_EraseUnitSize_erase_unit_header_t_13154 EraseUnitSize erase_unit_header_t 0 13154 &enable_so_len_mtd_write_req_13154
+enable_so_num_pg_nvm_id_group_13160 num_pg nvm_id_group 0 13160 NULL
++enable_so_nr_possible_cpus_uv_hub_info_s_13164 nr_possible_cpus uv_hub_info_s 0 13164 NULL
+enable_so_inline_xattr_size_fndecl_13166 inline_xattr_size fndecl 0 13166 NULL
+enable_so_hpfs_add_to_dnode_fndecl_13167 hpfs_add_to_dnode fndecl 4-2 13167 NULL
+enable_so_iproc_pll_clk_setup_fndecl_13179 iproc_pll_clk_setup fndecl 6 13179 NULL
@@ -189570,6 +190042,7 @@ index 0000000..56d8f55
+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
++enable_so_btmrvl_hscmd_write_fndecl_13506 btmrvl_hscmd_write fndecl 3 13506 NULL
+enable_so_scif_vreadfrom_fndecl_13516 scif_vreadfrom fndecl 4-3 13516 NULL
+enable_so_max_channels_cmipci_13517 max_channels cmipci 0 13517 NULL nohasharray
+enable_so_len_unix_address_13517 len unix_address 0 13517 &enable_so_max_channels_cmipci_13517
@@ -189592,7 +190065,7 @@ index 0000000..56d8f55
+enable_so_capture_periodsize_rme96_13564 capture_periodsize rme96 0 13564 NULL
+enable_so_trusted_set_fndecl_13568 trusted_set fndecl 5 13568 NULL nohasharray
+enable_so_init_currently_empty_zone_fndecl_13568 init_currently_empty_zone fndecl 2 13568 &enable_so_trusted_set_fndecl_13568
-+enable_so_edt_ft5x06_ts_readwrite_fndecl_13570 edt_ft5x06_ts_readwrite fndecl 2-4 13570 NULL
++enable_so_edt_ft5x06_ts_readwrite_fndecl_13570 edt_ft5x06_ts_readwrite fndecl 2-4-0 13570 NULL
+enable_so_avc_tuner_dsd_dvb_t_fndecl_13571 avc_tuner_dsd_dvb_t fndecl 0 13571 NULL
+enable_so_pitch_drm_mode_create_dumb_13574 pitch drm_mode_create_dumb 0 13574 NULL nohasharray
+enable_so_amdtp_stream_get_max_payload_fndecl_13574 amdtp_stream_get_max_payload fndecl 0 13574 &enable_so_pitch_drm_mode_create_dumb_13574
@@ -189613,6 +190086,7 @@ index 0000000..56d8f55
+enable_so_size_sm501_mem_13611 size sm501_mem 0 13611 &enable_so_cipso_v4_map_cat_rbm_hton_fndecl_13611
+enable_so_nvoices_snd_seq_oss_reg_13613 nvoices snd_seq_oss_reg 0 13613 NULL
+enable_so_us122l_start_fndecl_13617 us122l_start fndecl 2-3 13617 NULL
++enable_so_sysctl_perf_event_max_contexts_per_stack_vardecl_13620 sysctl_perf_event_max_contexts_per_stack vardecl 0 13620 NULL
+enable_so_softback_top_vardecl_fbcon_c_13621 softback_top vardecl_fbcon.c 0 13621 NULL nohasharray
+enable_so_mpt_entry_sz_mthca_dev_lim_13621 mpt_entry_sz mthca_dev_lim 0 13621 &enable_so_softback_top_vardecl_fbcon_c_13621
+enable_so_desc_size_efi_memory_map_13622 desc_size efi_memory_map 0 13622 NULL nohasharray
@@ -189630,7 +190104,8 @@ index 0000000..56d8f55
+enable_so_totalsize_fdt_header_13649 totalsize fdt_header 0 13649 NULL
+enable_so_unicast_mac_count_be_nic_res_desc_13650 unicast_mac_count be_nic_res_desc 0 13650 NULL
+enable_so_page_len_xdr_buf_13652 page_len xdr_buf 0 13652 NULL
-+enable_so_buffer_pos_vardecl_event_buffer_c_13658 buffer_pos vardecl_event_buffer.c 0 13658 NULL
++enable_so_buffer_pos_vardecl_event_buffer_c_13658 buffer_pos vardecl_event_buffer.c 0 13658 NULL nohasharray
++enable_so_lowpan_ctx_pfx_write_fndecl_13658 lowpan_ctx_pfx_write fndecl 3 13658 &enable_so_buffer_pos_vardecl_event_buffer_c_13658
+enable_so_width_s2255_vc_13661 width s2255_vc 0 13661 NULL
+enable_so_fdt_node_offset_by_prop_value_fndecl_13670 fdt_node_offset_by_prop_value fndecl 2 13670 NULL
+enable_so_qpn_ib_ucm_req_13672 qpn ib_ucm_req 0 13672 NULL
@@ -189787,6 +190262,7 @@ index 0000000..56d8f55
+enable_so_phantom_major_vardecl_phantom_c_14093 phantom_major vardecl_phantom.c 0 14093 NULL
+enable_so_snd_compr_calc_avail_fndecl_14094 snd_compr_calc_avail fndecl 0 14094 NULL
+enable_so___ext4_handle_dirty_metadata_fndecl_14098 __ext4_handle_dirty_metadata fndecl 0 14098 NULL
++enable_so_btmrvl_hscfgcmd_write_fndecl_14100 btmrvl_hscfgcmd_write fndecl 3 14100 NULL
+enable_so_data_len_vscsibk_pend_14106 data_len vscsibk_pend 0 14106 NULL
+enable_so_gue_gro_remcsum_fndecl_14109 gue_gro_remcsum fndecl 5-2 14109 NULL nohasharray
+enable_so_wil_write_file_wmi_fndecl_14109 wil_write_file_wmi fndecl 3 14109 &enable_so_gue_gro_remcsum_fndecl_14109
@@ -189808,7 +190284,8 @@ index 0000000..56d8f55
+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
++enable_so_cmd_len_scsi_cmnd_14171 cmd_len scsi_cmnd 0 14171 NULL nohasharray
++enable_so_nd_size_in_nd_cmd_pkg_14171 nd_size_in nd_cmd_pkg 0 14171 &enable_so_cmd_len_scsi_cmnd_14171
+enable_so_ath6kl_wmi_sync_point_fndecl_14172 ath6kl_wmi_sync_point fndecl 2 14172 NULL
+enable_so_len_hermes_idstring_14173 len hermes_idstring 0 14173 NULL
+enable_so_brcmf_usb_recv_ctl_fndecl_14174 brcmf_usb_recv_ctl fndecl 3 14174 NULL
@@ -189985,7 +190462,8 @@ index 0000000..56d8f55
+enable_so_ep_usbip_header_basic_14659 ep usbip_header_basic 0 14659 NULL
+enable_so_interval_solo_enc_dev_14661 interval solo_enc_dev 0 14661 NULL
+enable_so___btrfs_qgroup_release_data_fndecl_14664 __btrfs_qgroup_release_data fndecl 2-3 14664 NULL
-+enable_so_tty_copy_to_user_fndecl_14668 tty_copy_to_user fndecl 3-4 14668 NULL
++enable_so_tty_copy_to_user_fndecl_14668 tty_copy_to_user fndecl 3-4 14668 NULL nohasharray
++enable_so_mlx5_query_ports_check_fndecl_14668 mlx5_query_ports_check fndecl 3 14668 &enable_so_tty_copy_to_user_fndecl_14668
+enable_so_ext2_try_to_allocate_fndecl_14672 ext2_try_to_allocate fndecl 0-4 14672 NULL
+enable_so_sg_tablesize_usb_bus_14673 sg_tablesize usb_bus 0 14673 NULL
+enable_so_di_anextents_xfs_dinode_14674 di_anextents xfs_dinode 0 14674 NULL
@@ -189993,6 +190471,7 @@ index 0000000..56d8f55
+enable_so_file_size_squashfs_reg_inode_14679 file_size squashfs_reg_inode 0 14679 NULL
+enable_so_x86_virt_bits_cpuinfo_x86_14680 x86_virt_bits cpuinfo_x86 0 14680 NULL
+enable_so_mtu_vnic_devcmd_notify_14682 mtu vnic_devcmd_notify 0 14682 NULL
++enable_so_lpfc_idiag_cmd_get_fndecl_14683 lpfc_idiag_cmd_get fndecl 2 14683 NULL
+enable_so_rx_queue_entry_next_fndecl_14688 rx_queue_entry_next fndecl 0 14688 NULL nohasharray
+enable_so_stream_sctp_datahdr_14688 stream sctp_datahdr 0 14688 &enable_so_rx_queue_entry_next_fndecl_14688
+enable_so_ibmasm_new_command_fndecl_14689 ibmasm_new_command fndecl 2 14689 NULL
@@ -190143,6 +190622,7 @@ index 0000000..56d8f55
+enable_so_ia32_arch_ptrace_fndecl_15094 ia32_arch_ptrace fndecl 3 15094 &enable_so_cirrusfb_get_memsize_fndecl_15094
+enable_so_drm_mm_insert_node_in_range_generic_fndecl_15103 drm_mm_insert_node_in_range_generic fndecl 3 15103 NULL
+enable_so_usbat_read_blocks_fndecl_15109 usbat_read_blocks fndecl 3-4 15109 NULL
++enable_so_SYSC_bpf_fndecl_15113 SYSC_bpf fndecl 3 15113 NULL
+enable_so_split_nodes_size_interleave_fndecl_15116 split_nodes_size_interleave fndecl 3-4-5 15116 NULL
+enable_so_ubifs_tnc_replace_fndecl_15122 ubifs_tnc_replace fndecl 7-6 15122 NULL
+enable_so_read_sb_page_fndecl_15124 read_sb_page fndecl 5-4-2 15124 NULL
@@ -190302,6 +190782,7 @@ index 0000000..56d8f55
+enable_so_wsize_p9_conn_15686 wsize p9_conn 0 15686 NULL
+enable_so_total_bnx2x_sriov_15692 total bnx2x_sriov 0 15692 NULL
+enable_so_num_bytes_sigmadsp_control_15699 num_bytes sigmadsp_control 0 15699 NULL
++enable_so_btrfs_test_extent_io_fndecl_15701 btrfs_test_extent_io fndecl 1 15701 NULL
+enable_so_iov_len_kvec_15702 iov_len kvec 0 15702 NULL nohasharray
+enable_so_context_alloc_fndecl_15702 context_alloc fndecl 3 15702 &enable_so_iov_len_kvec_15702
+enable_so_blk_rq_err_bytes_fndecl_15705 blk_rq_err_bytes fndecl 0 15705 NULL
@@ -190326,6 +190807,7 @@ index 0000000..56d8f55
+enable_so_ip_tunnel_change_mtu_fndecl_15752 ip_tunnel_change_mtu fndecl 2 15752 NULL
+enable_so_transfer_done_snd_usb_substream_15753 transfer_done snd_usb_substream 0 15753 NULL
+enable_so_xres__sisbios_mode_15754 xres _sisbios_mode 0 15754 NULL
++enable_so_sockid_uv_gam_range_entry_15756 sockid uv_gam_range_entry 0 15756 NULL
+enable_so_bfad_iocmd_ioc_reset_stats_fndecl_15763 bfad_iocmd_ioc_reset_stats fndecl 0 15763 NULL
+enable_so_niu_change_mtu_fndecl_15765 niu_change_mtu fndecl 2 15765 NULL
+enable_so_header_read_sd_15767 header_read sd 0 15767 NULL
@@ -190365,6 +190847,7 @@ index 0000000..56d8f55
+enable_so_sb_set_blocksize_fndecl_15860 sb_set_blocksize fndecl 2-0 15860 NULL
+enable_so_kvm_read_guest_virt_helper_fndecl_15863 kvm_read_guest_virt_helper fndecl 3-1 15863 NULL
+enable_so_period_bytes_min_snd_pcm_hardware_15864 period_bytes_min snd_pcm_hardware 0 15864 NULL
++enable_so_SYSC_kexec_load_fndecl_15874 SYSC_kexec_load fndecl 2 15874 NULL
+enable_so_mlx4_valid_vf_state_change_fndecl_15876 mlx4_valid_vf_state_change fndecl 5 15876 NULL nohasharray
+enable_so_o2net_send_tcp_msg_fndecl_15876 o2net_send_tcp_msg fndecl 4-3 15876 &enable_so_mlx4_valid_vf_state_change_fndecl_15876
+enable_so_sel_read_mls_fndecl_15882 sel_read_mls fndecl 3 15882 NULL
@@ -190477,6 +190960,7 @@ index 0000000..56d8f55
+enable_so_ks8851_rdreg32_fndecl_16240 ks8851_rdreg32 fndecl 0 16240 NULL
+enable_so_len_wmi_p2p_rx_probe_req_event_16241 len wmi_p2p_rx_probe_req_event 0 16241 NULL
+enable_so_used_count_pvr2_buffer_16246 used_count pvr2_buffer 0 16246 NULL
++enable_so_num_r_vecs_nfp_net_16247 num_r_vecs nfp_net 0 16247 NULL
+enable_so_num_tbps___thermal_zone_16249 num_tbps __thermal_zone 0 16249 NULL
+enable_so_nilfs_iget_locked_fndecl_16250 nilfs_iget_locked fndecl 3 16250 NULL
+enable_so_offs_ubifs_scan_node_16253 offs ubifs_scan_node 0 16253 NULL
@@ -190521,6 +191005,7 @@ index 0000000..56d8f55
+enable_so_set_pio_mode_fndecl_16395 set_pio_mode fndecl 2 16395 NULL nohasharray
+enable_so_ip_options_get_alloc_fndecl_16395 ip_options_get_alloc fndecl 1 16395 &enable_so_set_pio_mode_fndecl_16395 nohasharray
+enable_so_pci_map_page_fndecl_16395 pci_map_page fndecl 0 16395 &enable_so_ip_options_get_alloc_fndecl_16395
++enable_so_rt2x00debug_read_queue_stats_fndecl_16396 rt2x00debug_read_queue_stats fndecl 3 16396 NULL
+enable_so_SYSC_setgroups_fndecl_16397 SYSC_setgroups fndecl 1 16397 NULL
+enable_so___logfs_seek_data_fndecl_16398 __logfs_seek_data fndecl 2-0 16398 NULL
+enable_so_usbat_execute_command_fndecl_16400 usbat_execute_command fndecl 3 16400 NULL
@@ -190531,7 +191016,8 @@ index 0000000..56d8f55
+enable_so_romfs_dev_read_fndecl_16412 romfs_dev_read fndecl 2-4 16412 NULL
+enable_so_bcnt_aoeif_16414 bcnt aoeif 0 16414 NULL
+enable_so_n_sectors_hpfs_super_block_16421 n_sectors hpfs_super_block 0 16421 NULL
-+enable_so_bNrInPins_uac_selector_unit_descriptor_16423 bNrInPins uac_selector_unit_descriptor 0 16423 NULL
++enable_so_bNrInPins_uac_selector_unit_descriptor_16423 bNrInPins uac_selector_unit_descriptor 0 16423 NULL nohasharray
++enable_so_per_vf_cids_qed_cdu_iids_16423 per_vf_cids qed_cdu_iids 0 16423 &enable_so_bNrInPins_uac_selector_unit_descriptor_16423
+enable_so_gem_allocate_guc_obj_fndecl_16428 gem_allocate_guc_obj fndecl 2 16428 NULL
+enable_so_numa_emulation_fndecl_16441 numa_emulation fndecl 2 16441 NULL
+enable_so_ep_in_usbtest_info_16442 ep_in usbtest_info 0 16442 NULL
@@ -190573,7 +191059,6 @@ index 0000000..56d8f55
+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
@@ -190588,10 +191073,12 @@ index 0000000..56d8f55
+enable_so_ext4_group_extend_fndecl_16613 ext4_group_extend fndecl 3 16613 NULL
+enable_so_coda_upcall_fndecl_16614 coda_upcall fndecl 2 16614 NULL
+enable_so_agf_freeblks_xfs_agf_16620 agf_freeblks xfs_agf 0 16620 NULL
++enable_so_amdgpu_ttm_gtt_read_fndecl_16621 amdgpu_ttm_gtt_read fndecl 3 16621 NULL
+enable_so_ceph_fsync_fndecl_16625 ceph_fsync fndecl 2-3 16625 NULL
+enable_so_len_t4_cqe_16627 len t4_cqe 0 16627 NULL
+enable_so_ext_tree_remove_fndecl_16629 ext_tree_remove fndecl 3-4 16629 NULL nohasharray
+enable_so_uc_outSize_upc_req_16629 uc_outSize upc_req 0 16629 &enable_so_ext_tree_remove_fndecl_16629
++enable_so_fault_inject_write_fndecl_16637 fault_inject_write fndecl 3 16637 NULL
+enable_so_crtc_hsync_start_drm_display_mode_16643 crtc_hsync_start drm_display_mode 0 16643 NULL
+enable_so_svc_pool_map_init_pernode_fndecl_16648 svc_pool_map_init_pernode fndecl 0 16648 NULL
+enable_so_nfc_hci_allocate_device_fndecl_16649 nfc_hci_allocate_device fndecl 8-6 16649 NULL
@@ -190615,9 +191102,11 @@ index 0000000..56d8f55
+enable_so_efx_ef10_pci_sriov_enable_fndecl_16694 efx_ef10_pci_sriov_enable fndecl 2 16694 NULL
+enable_so_llcp_tlv_miux_fndecl_16699 llcp_tlv_miux fndecl 0 16699 NULL
+enable_so_ad714x_spi_read_fndecl_16700 ad714x_spi_read fndecl 4 16700 NULL
-+enable_so_tlv_buf_len_mwifiex_scan_cmd_config_16702 tlv_buf_len mwifiex_scan_cmd_config 0 16702 NULL
++enable_so_tlv_buf_len_mwifiex_scan_cmd_config_16702 tlv_buf_len mwifiex_scan_cmd_config 0 16702 NULL nohasharray
++enable_so_trace_insert_enum_map_file_fndecl_16702 trace_insert_enum_map_file fndecl 3 16702 &enable_so_tlv_buf_len_mwifiex_scan_cmd_config_16702
+enable_so_hdlc_loop_fndecl_16708 hdlc_loop fndecl 0 16708 NULL
-+enable_so_vm_mmap_pgoff_fndecl_16712 vm_mmap_pgoff fndecl 3 16712 NULL
++enable_so_vm_mmap_pgoff_fndecl_16712 vm_mmap_pgoff fndecl 3 16712 NULL nohasharray
++enable_so_i2c1_debugfs_read_fndecl_16712 i2c1_debugfs_read fndecl 3 16712 &enable_so_vm_mmap_pgoff_fndecl_16712
+enable_so_ntargets_ips_ha_16718 ntargets ips_ha 0 16718 NULL
+enable_so_pcm_buf_host_rw_ofs_snd_card_asihpi_pcm_16719 pcm_buf_host_rw_ofs snd_card_asihpi_pcm 0 16719 NULL
+enable_so_opcfg_ofsl_cyttsp4_sysinfo_data_16723 opcfg_ofsl cyttsp4_sysinfo_data 0 16723 NULL
@@ -190630,7 +191119,8 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_devlink_alloc_fndecl_16742 devlink_alloc fndecl 2 16742 &enable_so_r_root_dir_omfs_root_block_16742
++enable_so_devlink_alloc_fndecl_16742 devlink_alloc fndecl 2 16742 &enable_so_r_root_dir_omfs_root_block_16742 nohasharray
++enable_so_fault_disconnect_write_fndecl_16742 fault_disconnect_write fndecl 3 16742 &enable_so_devlink_alloc_fndecl_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
@@ -190731,6 +191221,7 @@ index 0000000..56d8f55
+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___iommu_dma_alloc_pages_fndecl_17015 __iommu_dma_alloc_pages fndecl 1 17015 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
@@ -190801,6 +191292,7 @@ index 0000000..56d8f55
+enable_so_luma_size_s5p_mfc_ctx_17182 luma_size s5p_mfc_ctx 0 17182 NULL
+enable_so_pci_raw_set_power_state_fndecl_17186 pci_raw_set_power_state fndecl 0 17186 NULL
+enable_so_num_component_match_17187 num component_match 0 17187 NULL
++enable_so_ath10k_write_peer_stats_fndecl_17195 ath10k_write_peer_stats fndecl 3 17195 NULL
+enable_so_sys_pread64_fndecl_17210 sys_pread64 fndecl 3 17210 NULL
+enable_so_type_to_neq_fw_pfvf_cmd_17213 type_to_neq fw_pfvf_cmd 0 17213 NULL
+enable_so_logical_blk_num_osst_tape_17216 logical_blk_num osst_tape 0 17216 NULL
@@ -190933,6 +191425,7 @@ index 0000000..56d8f55
+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__iwl_dbgfs_indirection_tbl_write_fndecl_17597 _iwl_dbgfs_indirection_tbl_write fndecl 3 17597 NULL
+enable_so_reg_bytes_regmap_format_17598 reg_bytes regmap_format 0 17598 NULL
+enable_so_disk_num_bytes_btrfs_file_extent_item_17599 disk_num_bytes btrfs_file_extent_item 0 17599 NULL
+enable_so_qlf_len_xfs_dq_logformat_17603 qlf_len xfs_dq_logformat 0 17603 NULL nohasharray
@@ -190954,7 +191447,8 @@ index 0000000..56d8f55
+enable_so_batadv_tt_add_temporary_global_entry_fndecl_17661 batadv_tt_add_temporary_global_entry fndecl 4 17661 &enable_so_size_scsi_host_sg_pool_17661
+enable_so_stereo_cmipci_sb_reg_17667 stereo cmipci_sb_reg 0 17667 NULL
+enable_so_maybe_insert_hole_fndecl_17668 maybe_insert_hole fndecl 4-3 17668 NULL
-+enable_so_f2fs_update_extent_cache_range_fndecl_17671 f2fs_update_extent_cache_range fndecl 4-2-3 17671 NULL
++enable_so_f2fs_update_extent_cache_range_fndecl_17671 f2fs_update_extent_cache_range fndecl 4-2-3 17671 NULL nohasharray
++enable_so_submit_queues_vardecl_scsi_debug_c_17671 submit_queues vardecl_scsi_debug.c 0 17671 &enable_so_f2fs_update_extent_cache_range_fndecl_17671
+enable_so_vdma_mem_alloc_fndecl_17672 vdma_mem_alloc fndecl 1 17672 NULL
+enable_so_wl1251_cmd_template_set_fndecl_17679 wl1251_cmd_template_set fndecl 4 17679 NULL
+enable_so_memory_block_size_probed_vardecl_init_64_c_17683 memory_block_size_probed vardecl_init_64.c 0 17683 NULL nohasharray
@@ -191106,6 +191600,7 @@ index 0000000..56d8f55
+enable_so_di_nextents_xfs_icdinode_18090 di_nextents xfs_icdinode 0 18090 NULL
+enable_so_bfad_iocmd_ioc_fw_sig_inv_fndecl_18091 bfad_iocmd_ioc_fw_sig_inv fndecl 0 18091 NULL
+enable_so_inode2sd_fndecl_18094 inode2sd fndecl 3 18094 NULL
++enable_so_n_pages_tracing_map_array_18100 n_pages tracing_map_array 0 18100 NULL
+enable_so_thermal_irq_thr_high_read_fndecl_18102 thermal_irq_thr_high_read fndecl 3 18102 NULL
+enable_so_btrfs_qgroup_reserve_data_fndecl_18109 btrfs_qgroup_reserve_data fndecl 0-3-2 18109 NULL
+enable_so_do_async_mmap_readahead_fndecl_18112 do_async_mmap_readahead fndecl 5 18112 NULL nohasharray
@@ -191174,7 +191669,8 @@ index 0000000..56d8f55
+enable_so_ocfs2_calc_refcount_meta_credits_fndecl_18305 ocfs2_calc_refcount_meta_credits fndecl 5-4 18305 NULL
+enable_so_essid_len_iw_scan_req_18306 essid_len iw_scan_req 0 18306 NULL
+enable_so_add_pfn_range_mapped_fndecl_18307 add_pfn_range_mapped fndecl 2-1 18307 NULL
-+enable_so_twl4030_init_irq_fndecl_18308 twl4030_init_irq fndecl 0 18308 NULL
++enable_so_twl4030_init_irq_fndecl_18308 twl4030_init_irq fndecl 0 18308 NULL nohasharray
++enable_so_i2c_read_fndecl_18308 i2c_read fndecl 0 18308 &enable_so_twl4030_init_irq_fndecl_18308
+enable_so_zone_spanned_pages_in_node_fndecl_18320 zone_spanned_pages_in_node fndecl 0-3-4 18320 NULL
+enable_so_rpipes_wahc_18323 rpipes wahc 0 18323 NULL
+enable_so_e820_end_of_low_ram_pfn_fndecl_18324 e820_end_of_low_ram_pfn fndecl 0 18324 NULL
@@ -191471,8 +191967,7 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_x___una_u16_19163 x __una_u16 0 19163 &enable_so_page_array_size_firmware_buf_19163
++enable_so_page_array_size_firmware_buf_19163 page_array_size firmware_buf 0 19163 NULL
+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
@@ -191533,8 +192028,7 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_rockchip_clk_init_fndecl_19353 rockchip_clk_init fndecl 3 19353 &enable_so_NetworkInfoReceived_fndecl_19353
++enable_so_NetworkInfoReceived_fndecl_19353 NetworkInfoReceived fndecl 2 19353 NULL
+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
@@ -191563,6 +192057,7 @@ index 0000000..56d8f55
+enable_so_proc_read_atmdev_ops_19414 proc_read atmdev_ops 0 19414 NULL
+enable_so_num_ip_blocks_amdgpu_device_19419 num_ip_blocks amdgpu_device 0 19419 NULL
+enable_so_size_mthca_resource_19420 size mthca_resource 0 19420 NULL
++enable_so__iwl_dbgfs_cont_recording_write_fndecl_19421 _iwl_dbgfs_cont_recording_write fndecl 3 19421 NULL
+enable_so_fw_card_add_fndecl_19423 fw_card_add fndecl 2 19423 NULL
+enable_so_mixer_nid_hda_gen_spec_19429 mixer_nid hda_gen_spec 0 19429 NULL
+enable_so_config_buf_fndecl_19445 config_buf fndecl 0 19445 NULL nohasharray
@@ -191643,7 +192138,6 @@ index 0000000..56d8f55
+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
@@ -191675,6 +192169,7 @@ index 0000000..56d8f55
+enable_so_slots_end_qxl_rom_19718 slots_end qxl_rom 0 19718 NULL
+enable_so_fat32_info_sector_fat_bios_param_block_19727 fat32_info_sector fat_bios_param_block 0 19727 NULL
+enable_so_msc_win_to_user_fndecl_19728 msc_win_to_user fndecl 3 19728 NULL
++enable_so_mps_trc_write_fndecl_19736 mps_trc_write fndecl 3 19736 NULL
+enable_so_small_smb_init_no_tc_fndecl_19738 small_smb_init_no_tc fndecl 2 19738 NULL
+enable_so_max_active_conns_bnx2i_hba_19740 max_active_conns bnx2i_hba 0 19740 NULL
+enable_so_bytesperline_v4l2_pix_format_19741 bytesperline v4l2_pix_format 0 19741 NULL
@@ -191701,6 +192196,7 @@ index 0000000..56d8f55
+enable_so_eeprom_len_niu_19815 eeprom_len niu 0 19815 NULL
+enable_so_size_vring_19817 size vring 0 19817 NULL
+enable_so_ip_send_unicast_reply_fndecl_19820 ip_send_unicast_reply fndecl 7 19820 NULL
++enable_so_oid_printf_vargs_fndecl_19821 oid_printf_vargs fndecl 0 19821 NULL
+enable_so_packet_space_tso_state_19824 packet_space tso_state 0 19824 NULL
+enable_so_vring_new_virtqueue_fndecl_19828 vring_new_virtqueue fndecl 2 19828 NULL
+enable_so___nfs4_get_acl_uncached_fndecl_19830 __nfs4_get_acl_uncached fndecl 3 19830 NULL
@@ -191745,6 +192241,7 @@ index 0000000..56d8f55
+enable_so_ipoib_sendq_size_vardecl_19969 ipoib_sendq_size vardecl 0 19969 NULL
+enable_so_src_len_ccp_passthru_engine_19970 src_len ccp_passthru_engine 0 19970 NULL
+enable_so_vga_arb_read_fndecl_19973 vga_arb_read fndecl 3 19973 NULL
++enable_so_paravirt_read_msr_fndecl_19974 paravirt_read_msr fndecl 0 19974 NULL
+enable_so_le_max_key_size_read_fndecl_19975 le_max_key_size_read fndecl 3 19975 NULL
+enable_so_cmd_hix5hd2_desc_19977 cmd hix5hd2_desc 0 19977 NULL
+enable_so_protocol_gre_base_hdr_19981 protocol gre_base_hdr 0 19981 NULL
@@ -191781,7 +192278,6 @@ index 0000000..56d8f55
+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
@@ -191817,6 +192313,7 @@ index 0000000..56d8f55
+enable_so_sectors_per_block_bits_dm_bufio_client_20202 sectors_per_block_bits dm_bufio_client 0 20202 NULL
+enable_so_max_frame_size__mgslpc_info_20204 max_frame_size _mgslpc_info 0 20204 NULL
+enable_so_sbq_len_rx_ring_20205 sbq_len rx_ring 0 20205 NULL
++enable_so_i40e_dbg_netdev_ops_write_fndecl_20206 i40e_dbg_netdev_ops_write fndecl 3 20206 NULL
+enable_so_kfifo_copy_from_user_fndecl_20208 kfifo_copy_from_user fndecl 3-4-0 20208 NULL
+enable_so_dma_limit_tg3_20210 dma_limit tg3 0 20210 NULL
+enable_so_objlayout_write_done_fndecl_20211 objlayout_write_done fndecl 2 20211 NULL nohasharray
@@ -191827,9 +192324,9 @@ index 0000000..56d8f55
+enable_so_sound_write_fndecl_20221 sound_write fndecl 3 20221 &enable_so_dmah_acm_wb_20221
+enable_so_produce_va_vmci_qp_page_file_info_20224 produce_va vmci_qp_page_file_info 0 20224 NULL
+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_ll_rw_extents_stats_seq_write_fndecl_20234 ll_rw_extents_stats_seq_write fndecl 3 20234 NULL nohasharray
++enable_so_nwriters_vardecl_rcuperf_c_20234 nwriters vardecl_rcuperf.c 0 20234 &enable_so_ll_rw_extents_stats_seq_write_fndecl_20234
+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
@@ -191953,7 +192450,8 @@ index 0000000..56d8f55
+enable_so_isdn_readbchan_fndecl_20570 isdn_readbchan fndecl 5-0 20570 NULL
+enable_so_nullb_indexes_vardecl_null_blk_c_20571 nullb_indexes vardecl_null_blk.c 0 20571 NULL
+enable_so_check_defrag_in_cache_fndecl_20573 check_defrag_in_cache fndecl 3-2 20573 NULL
-+enable_so_hp_outs_auto_pin_cfg_20574 hp_outs auto_pin_cfg 0 20574 NULL
++enable_so_hp_outs_auto_pin_cfg_20574 hp_outs auto_pin_cfg 0 20574 NULL nohasharray
++enable_so_nfp_net_shadow_tx_rings_prepare_fndecl_20574 nfp_net_shadow_tx_rings_prepare fndecl 2 20574 &enable_so_hp_outs_auto_pin_cfg_20574
+enable_so_fifo_size_pxa_ep_20587 fifo_size pxa_ep 0 20587 NULL
+enable_so_nrof_flowrings_brcmf_pcie_shared_info_20590 nrof_flowrings brcmf_pcie_shared_info 0 20590 NULL
+enable_so_pci_add_cap_save_buffer_fndecl_20593 pci_add_cap_save_buffer fndecl 3 20593 NULL
@@ -191972,7 +192470,8 @@ index 0000000..56d8f55
+enable_so_cursor_size_fbcon_ops_20640 cursor_size fbcon_ops 0 20640 NULL
+enable_so_hpi_outstream_write_buf_fndecl_20645 hpi_outstream_write_buf fndecl 3 20645 NULL
+enable_so_offset_iscsi_seq_20646 offset iscsi_seq 0 20646 NULL
-+enable_so_nr_pages_ore_io_state_20648 nr_pages ore_io_state 0 20648 NULL
++enable_so_nr_pages_ore_io_state_20648 nr_pages ore_io_state 0 20648 NULL nohasharray
++enable_so_bcm2835_dma_create_cb_chain_fndecl_20648 bcm2835_dma_create_cb_chain fndecl 6 20648 &enable_so_nr_pages_ore_io_state_20648
+enable_so_m_pblk_ext4_map_blocks_20649 m_pblk ext4_map_blocks 0 20649 NULL
+enable_so_security_context_to_sid_default_fndecl_20663 security_context_to_sid_default fndecl 2 20663 NULL
+enable_so_dlm_process_incoming_buffer_fndecl_20665 dlm_process_incoming_buffer fndecl 0 20665 NULL nohasharray
@@ -191984,8 +192483,7 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_ldc_read_fndecl_20703 ldc_read fndecl 0 20703 &enable_so_SyS_semtimedop_fndecl_20703
++enable_so_SyS_semtimedop_fndecl_20703 SyS_semtimedop fndecl 3 20703 NULL
+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
@@ -192062,6 +192560,7 @@ index 0000000..56d8f55
+enable_so_nr_hotspot_blocks_smq_policy_20876 nr_hotspot_blocks smq_policy 0 20876 NULL
+enable_so_max_q_per_vf_rcb_common_cb_20877 max_q_per_vf rcb_common_cb 0 20877 NULL
+enable_so_usb_stor_intr_transfer_fndecl_20883 usb_stor_intr_transfer fndecl 3 20883 NULL
++enable_so_codec_reg_write_file_fndecl_20887 codec_reg_write_file fndecl 3 20887 NULL
+enable_so_cl_local_node_o2nm_cluster_20896 cl_local_node o2nm_cluster 0 20896 NULL
+enable_so_idiag_info_size_inet_diag_handler_20898 idiag_info_size inet_diag_handler 0 20898 NULL
+enable_so_num_rows_vardecl_arcfb_c_20902 num_rows vardecl_arcfb.c 0 20902 NULL
@@ -192077,6 +192576,7 @@ index 0000000..56d8f55
+enable_so_pkey_index_mlx4_qp_path_20950 pkey_index mlx4_qp_path 0 20950 NULL
+enable_so_gid_table_len_mthca_limits_20957 gid_table_len mthca_limits 0 20957 NULL
+enable_so_npages_mlx5_buf_20958 npages mlx5_buf 0 20958 NULL
++enable_so__iwl_dbgfs_d3_sram_write_fndecl_20960 _iwl_dbgfs_d3_sram_write fndecl 3 20960 NULL
+enable_so_calc_plane_fndecl_20962 calc_plane fndecl 0-2-1 20962 NULL
+enable_so_range_start_writeback_control_20965 range_start writeback_control 0 20965 NULL
+enable_so_dbDiscardAG_fndecl_20969 dbDiscardAG fndecl 0-3 20969 NULL
@@ -192092,6 +192592,7 @@ index 0000000..56d8f55
+enable_so_rate_ib_sa_mcmember_rec_20997 rate ib_sa_mcmember_rec 0 20997 NULL
+enable_so_udf_direct_IO_fndecl_20999 udf_direct_IO fndecl 3 20999 NULL
+enable_so_get_fd_set_fndecl_21001 get_fd_set fndecl 1 21001 NULL
++enable_so_nouveau_debugfs_pstate_set_fndecl_21004 nouveau_debugfs_pstate_set fndecl 3 21004 NULL
+enable_so_sst_hsw_module_set_param_fndecl_21007 sst_hsw_module_set_param fndecl 5 21007 NULL
+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
@@ -192155,6 +192656,7 @@ index 0000000..56d8f55
+enable_so_hsu_dma_prep_slave_sg_fndecl_21155 hsu_dma_prep_slave_sg fndecl 3 21155 NULL
+enable_so_ext4_xattr_find_entry_fndecl_21162 ext4_xattr_find_entry fndecl 0 21162 NULL
+enable_so_blk_end_request_fndecl_21163 blk_end_request fndecl 3-2 21163 NULL
++enable_so_nd_size_out_nd_cmd_pkg_21165 nd_size_out nd_cmd_pkg 0 21165 NULL
+enable_so_gfs2_dir_get_existing_buffer_fndecl_21172 gfs2_dir_get_existing_buffer fndecl 2 21172 NULL
+enable_so_mei_write_fndecl_21174 mei_write fndecl 3 21174 NULL nohasharray
+enable_so_xfs_check_block_fndecl_21174 xfs_check_block fndecl 4 21174 &enable_so_mei_write_fndecl_21174
@@ -192216,6 +192718,7 @@ index 0000000..56d8f55
+enable_so_num_paths_bna_rx_config_21315 num_paths bna_rx_config 0 21315 NULL
+enable_so_fuse_copy_page_fndecl_21316 fuse_copy_page fndecl 4-3 21316 NULL
+enable_so_tcp_fragment_fndecl_21318 tcp_fragment fndecl 3 21318 NULL
++enable_so__iwl_dbgfs_tx_flush_write_fndecl_21320 _iwl_dbgfs_tx_flush_write fndecl 3 21320 NULL
+enable_so_packet_present_len_cfg80211_wowlan_wakeup_21321 packet_present_len cfg80211_wowlan_wakeup 0 21321 NULL nohasharray
+enable_so_sq_len_queue_set_21321 sq_len queue_set 0 21321 &enable_so_packet_present_len_cfg80211_wowlan_wakeup_21321
+enable_so_mincore_unmapped_range_fndecl_21322 mincore_unmapped_range fndecl 1 21322 NULL
@@ -192238,7 +192741,8 @@ index 0000000..56d8f55
+enable_so_num_vfs_enic_21386 num_vfs enic 0 21386 NULL
+enable_so_temp_count_applesmc_registers_21387 temp_count applesmc_registers 0 21387 NULL
+enable_so_ci_ll_write_fndecl_21391 ci_ll_write fndecl 4 21391 NULL
-+enable_so_vc_scan_lines_vc_data_21393 vc_scan_lines vc_data 0 21393 NULL
++enable_so_vc_scan_lines_vc_data_21393 vc_scan_lines vc_data 0 21393 NULL nohasharray
++enable_so_cids_per_vf_qed_conn_type_cfg_21393 cids_per_vf qed_conn_type_cfg 0 21393 &enable_so_vc_scan_lines_vc_data_21393
+enable_so_digest_size_dm_verity_21399 digest_size dm_verity 0 21399 NULL
+enable_so_pg_count_agp_allocate32_21404 pg_count agp_allocate32 0 21404 NULL
+enable_so_v4l2_fh_open_fndecl_21406 v4l2_fh_open fndecl 0 21406 NULL
@@ -192275,7 +192779,6 @@ index 0000000..56d8f55
+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
@@ -192373,7 +192876,8 @@ index 0000000..56d8f55
+enable_so_tpg_alloc_fndecl_21789 tpg_alloc fndecl 2 21789 NULL
+enable_so_find_group_dir_fndecl_21790 find_group_dir fndecl 0 21790 NULL
+enable_so_idetape_chrdev_read_fndecl_21794 idetape_chrdev_read fndecl 3 21794 NULL
-+enable_so_reg_stride_regmap_21801 reg_stride regmap 0 21801 NULL
++enable_so_reg_stride_regmap_21801 reg_stride regmap 0 21801 NULL nohasharray
++enable_so___set_print_fmt_fndecl_21801 __set_print_fmt fndecl 0 21801 &enable_so_reg_stride_regmap_21801
+enable_so_num_vss_hpf_cfgs_wm8994_pdata_21802 num_vss_hpf_cfgs wm8994_pdata 0 21802 NULL
+enable_so___svc_create_fndecl_21804 __svc_create fndecl 2-3 21804 NULL
+enable_so_ecryptfs_encrypt_and_encode_filename_fndecl_21806 ecryptfs_encrypt_and_encode_filename fndecl 6 21806 NULL
@@ -192401,6 +192905,7 @@ index 0000000..56d8f55
+enable_so_mlx4_init_icm_table_fndecl_21876 mlx4_init_icm_table fndecl 4-5 21876 &enable_so_ad_sd_read_reg_fndecl_21876
+enable_so__drbd_send_page_fndecl_21886 _drbd_send_page fndecl 4 21886 NULL nohasharray
+enable_so___copy_to_user_ll_fndecl_21886 __copy_to_user_ll fndecl 0 21886 &enable_so__drbd_send_page_fndecl_21886
++enable_so_picolcd_debug_reset_write_fndecl_21888 picolcd_debug_reset_write fndecl 3 21888 NULL
+enable_so_bio_integrity_alloc_fndecl_21889 bio_integrity_alloc fndecl 3 21889 NULL
+enable_so_ext4_xattr_trusted_set_fndecl_21891 ext4_xattr_trusted_set fndecl 5 21891 NULL
+enable_so_npwm_pwm_chip_21895 npwm pwm_chip 0 21895 NULL
@@ -192412,7 +192917,6 @@ index 0000000..56d8f55
+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
@@ -192522,12 +193026,14 @@ index 0000000..56d8f55
+enable_so_ch_count_vardecl_ib_srp_c_22190 ch_count vardecl_ib_srp.c 0 22190 NULL
+enable_so_affs_alloc_block_fndecl_22192 affs_alloc_block fndecl 0-2 22192 NULL
+enable_so_sector_packet_data_22197 sector packet_data 0 22197 NULL
++enable_so_acpi_aml_read_fndecl_22207 acpi_aml_read fndecl 3 22207 NULL
+enable_so_length_ntlmssp2_name_22211 length ntlmssp2_name 0 22211 NULL
+enable_so_req_len_brcmf_cfg80211_assoc_ielen_le_22213 req_len brcmf_cfg80211_assoc_ielen_le 0 22213 NULL
+enable_so_nreaders_stress_vardecl_locktorture_c_22217 nreaders_stress vardecl_locktorture.c 0 22217 NULL nohasharray
+enable_so_xfrm_dst_alloc_copy_fndecl_22217 xfrm_dst_alloc_copy fndecl 3 22217 &enable_so_nreaders_stress_vardecl_locktorture_c_22217
+enable_so_ram_size_async_extent_22219 ram_size async_extent 0 22219 NULL
+enable_so_get_max_acpi_id_fndecl_22220 get_max_acpi_id fndecl 0 22220 NULL
++enable_so_lpfc_idiag_mbxacc_write_fndecl_22221 lpfc_idiag_mbxacc_write fndecl 3 22221 NULL
+enable_so_s_dirsize_minix_sb_info_22225 s_dirsize minix_sb_info 0 22225 NULL
+enable_so_num_areas_prism2_download_param_22233 num_areas prism2_download_param 0 22233 NULL
+enable_so_num_vlan_batadv_tvlv_tt_data_22234 num_vlan batadv_tvlv_tt_data 0 22234 NULL
@@ -192601,7 +193107,8 @@ index 0000000..56d8f55
+enable_so_do_send_fragment_fndecl_22447 do_send_fragment fndecl 3 22447 NULL
+enable_so_frame_len_ksz_desc_rx_stat_22454 frame_len ksz_desc_rx_stat 0 22454 NULL
+enable_so_ntfs_attr_vcn_to_lcn_nolock_fndecl_22455 ntfs_attr_vcn_to_lcn_nolock fndecl 2 22455 NULL
-+enable_so_llc_ui_recvmsg_fndecl_22457 llc_ui_recvmsg fndecl 3 22457 NULL
++enable_so_llc_ui_recvmsg_fndecl_22457 llc_ui_recvmsg fndecl 3 22457 NULL nohasharray
++enable_so_oid_printf_vargs_fndecl_22457 oid_printf_vargs fndecl 0 22457 &enable_so_llc_ui_recvmsg_fndecl_22457
+enable_so_ceph_zero_pagecache_range_fndecl_22464 ceph_zero_pagecache_range fndecl 3-2 22464 NULL nohasharray
+enable_so_mon_bin_ioctl_fndecl_22464 mon_bin_ioctl fndecl 3 22464 &enable_so_ceph_zero_pagecache_range_fndecl_22464
+enable_so_params1_mthca_qp_context_22465 params1 mthca_qp_context 0 22465 NULL
@@ -192630,7 +193137,8 @@ index 0000000..56d8f55
+enable_so_ocfs2_bg_discontig_add_extent_fndecl_22531 ocfs2_bg_discontig_add_extent fndecl 4 22531 NULL
+enable_so_count_pch_gbe_tx_ring_22534 count pch_gbe_tx_ring 0 22534 NULL
+enable_so_pci_iomap_wc_range_fndecl_22536 pci_iomap_wc_range fndecl 4-3 22536 NULL
-+enable_so_last_checkpoint_r5l_log_22540 last_checkpoint r5l_log 0 22540 NULL
++enable_so_last_checkpoint_r5l_log_22540 last_checkpoint r5l_log 0 22540 NULL nohasharray
++enable_so_mlx5e_create_rqt_fndecl_22540 mlx5e_create_rqt fndecl 2 22540 &enable_so_last_checkpoint_r5l_log_22540
+enable_so_submit_queue_fndecl_22542 submit_queue fndecl 5 22542 NULL
+enable_so_SyS_flistxattr_fndecl_22548 SyS_flistxattr fndecl 3 22548 NULL
+enable_so_clsb_isar_reg_22551 clsb isar_reg 0 22551 NULL
@@ -192670,7 +193178,8 @@ index 0000000..56d8f55
+enable_so_hci_si_event_fndecl_22639 hci_si_event fndecl 3 22639 NULL
+enable_so_scif_vwriteto_fndecl_22640 scif_vwriteto fndecl 4-3 22640 NULL
+enable_so_logfs_write_header_fndecl_22642 logfs_write_header fndecl 3 22642 NULL
-+enable_so_num_rcv_bufs_visornic_devdata_22643 num_rcv_bufs visornic_devdata 0 22643 NULL
++enable_so_num_rcv_bufs_visornic_devdata_22643 num_rcv_bufs visornic_devdata 0 22643 NULL nohasharray
++enable_so_rdma_alloc_hw_stats_struct_fndecl_22643 rdma_alloc_hw_stats_struct fndecl 2 22643 &enable_so_num_rcv_bufs_visornic_devdata_22643
+enable_so_sctp_setsockopt_initmsg_fndecl_22644 sctp_setsockopt_initmsg fndecl 3 22644 NULL
+enable_so_queue_size_snd_timer_params_22646 queue_size snd_timer_params 0 22646 NULL
+enable_so_do_msgsnd_fndecl_22648 do_msgsnd fndecl 4 22648 NULL
@@ -192713,6 +193222,7 @@ index 0000000..56d8f55
+enable_so_slave_num_ad7280_state_22755 slave_num ad7280_state 0 22755 NULL
+enable_so_alloc_perm_bits_fndecl_22767 alloc_perm_bits fndecl 2 22767 NULL
+enable_so_rambase_brcmf_chip_22773 rambase brcmf_chip 0 22773 NULL
++enable_so_ide_get_identity_ioctl_fndecl_22776 ide_get_identity_ioctl fndecl 0 22776 NULL
+enable_so_xfs_bmap_add_free_fndecl_22778 xfs_bmap_add_free fndecl 1-2 22778 NULL
+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
@@ -192738,6 +193248,7 @@ index 0000000..56d8f55
+enable_so_var2_apei_exec_context_22852 var2 apei_exec_context 0 22852 NULL
+enable_so_utf8s_to_utf16s_fndecl_22856 utf8s_to_utf16s fndecl 0 22856 NULL
+enable_so_size_proc_dir_entry_22859 size proc_dir_entry 0 22859 NULL
++enable_so_test_eb_bitmaps_fndecl_22861 test_eb_bitmaps fndecl 1 22861 NULL
+enable_so_sst_fill_and_send_cmd_unlocked_fndecl_22862 sst_fill_and_send_cmd_unlocked fndecl 7 22862 NULL
+enable_so_xs_sendpages_fndecl_22864 xs_sendpages fndecl 5-3 22864 NULL
+enable_so_hpfs_get_block_fndecl_22865 hpfs_get_block fndecl 2 22865 NULL
@@ -192755,6 +193266,7 @@ index 0000000..56d8f55
+enable_so_lpfc_fcp_io_channel_init_fndecl_22903 lpfc_fcp_io_channel_init fndecl 2 22903 NULL
+enable_so_count_ioctl_gntdev_map_grant_ref_22904 count ioctl_gntdev_map_grant_ref 0 22904 NULL nohasharray
+enable_so_bcma_hcd_create_pdev_fndecl_22904 bcma_hcd_create_pdev fndecl 3 22904 &enable_so_count_ioctl_gntdev_map_grant_ref_22904
++enable_so_num_y_edt_ft5x06_ts_data_22905 num_y edt_ft5x06_ts_data 0 22905 NULL
+enable_so_membase_phys_efx_nic_22907 membase_phys efx_nic 0 22907 NULL
+enable_so_vmalloc_32_fndecl_22908 vmalloc_32 fndecl 1 22908 NULL
+enable_so_cfg80211_report_obss_beacon_fndecl_22910 cfg80211_report_obss_beacon fndecl 3 22910 NULL
@@ -192764,6 +193276,7 @@ index 0000000..56d8f55
+enable_so_len_ext4_allocation_request_22920 len ext4_allocation_request 0 22920 NULL
+enable_so_e_name_len_ext4_xattr_entry_22925 e_name_len ext4_xattr_entry 0 22925 NULL
+enable_so_port100_send_frame_async_fndecl_22927 port100_send_frame_async fndecl 4 22927 NULL
++enable_so_cifs_xattr_set_fndecl_22930 cifs_xattr_set fndecl 6 22930 NULL
+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
@@ -192800,6 +193313,7 @@ index 0000000..56d8f55
+enable_so_ioctl_private_iw_point_fndecl_23018 ioctl_private_iw_point fndecl 7 23018 &enable_so_tim_len_wmi_tim_info_arg_23018
+enable_so_fw_vif_idx_ath6kl_vif_23020 fw_vif_idx ath6kl_vif 0 23020 NULL
+enable_so_nested_get_page_fndecl_23031 nested_get_page fndecl 2 23031 NULL
++enable_so_acpi_aml_write_kern_fndecl_23032 acpi_aml_write_kern fndecl 2-0 23032 NULL
+enable_so_rx_frag_size_atl1c_adapter_23034 rx_frag_size atl1c_adapter 0 23034 NULL nohasharray
+enable_so_remap_fndecl_23034 remap fndecl 3 23034 &enable_so_rx_frag_size_atl1c_adapter_23034
+enable_so_io_tlb_start_vardecl_swiotlb_c_23035 io_tlb_start vardecl_swiotlb.c 0 23035 NULL
@@ -192834,11 +193348,13 @@ index 0000000..56d8f55
+enable_so_numchips_nand_chip_23137 numchips nand_chip 0 23137 NULL
+enable_so_num_dv_ports_adv76xx_chip_info_23140 num_dv_ports adv76xx_chip_info 0 23140 NULL
+enable_so_udf_load_pvoldesc_fndecl_23141 udf_load_pvoldesc fndecl 2 23141 NULL
++enable_so_rproc_state_write_fndecl_23143 rproc_state_write fndecl 3 23143 NULL
+enable_so_max_tx_urbs_kvaser_usb_23152 max_tx_urbs kvaser_usb 0 23152 NULL
+enable_so_memblock_free_fndecl_23154 memblock_free fndecl 2-1 23154 NULL
+enable_so_oxu_create_fndecl_23159 oxu_create fndecl 3-2 23159 NULL
+enable_so_isdn_audio_xlaw2adpcm_fndecl_23162 isdn_audio_xlaw2adpcm fndecl 0 23162 NULL nohasharray
+enable_so_rx_defrag_called_read_fndecl_23162 rx_defrag_called_read fndecl 3 23162 &enable_so_isdn_audio_xlaw2adpcm_fndecl_23162
++enable_so_gfs2_xattr_set_fndecl_23165 gfs2_xattr_set fndecl 6 23165 NULL
+enable_so_width_linux_logo_23166 width linux_logo 0 23166 NULL
+enable_so_ip6_tnl_rcv_fndecl_23167 ip6_tnl_rcv fndecl 2 23167 NULL nohasharray
+enable_so_SyS_add_key_fndecl_23167 SyS_add_key fndecl 4 23167 &enable_so_ip6_tnl_rcv_fndecl_23167
@@ -192847,6 +193363,7 @@ index 0000000..56d8f55
+enable_so_retry_count_ib_cm_req_param_23173 retry_count ib_cm_req_param 0 23173 NULL
+enable_so_cyttsp_probe_fndecl_23175 cyttsp_probe fndecl 4 23175 NULL
+enable_so_x_res_vbe_mode_ib_23177 x_res vbe_mode_ib 0 23177 NULL
++enable_so_nslot_nd_namespace_index_23178 nslot nd_namespace_index 0 23178 NULL
+enable_so_uhid_char_read_fndecl_23187 uhid_char_read fndecl 3 23187 NULL
+enable_so_tx_tx_retry_data_read_fndecl_23189 tx_tx_retry_data_read fndecl 3 23189 NULL
+enable_so___reuseport_alloc_fndecl_23190 __reuseport_alloc fndecl 1 23190 NULL
@@ -192902,7 +193419,8 @@ index 0000000..56d8f55
+enable_so_default_blksize_st_modedef_23371 default_blksize st_modedef 0 23371 NULL
+enable_so_packet_buffer_init_fndecl_23380 packet_buffer_init fndecl 2 23380 NULL
+enable_so_kernel_map_sync_memtype_fndecl_23381 kernel_map_sync_memtype fndecl 1 23381 NULL
-+enable_so_length_dmi_header_23383 length dmi_header 0 23383 NULL
++enable_so_length_dmi_header_23383 length dmi_header 0 23383 NULL nohasharray
++enable_so_nreaders_vardecl_rcuperf_c_23383 nreaders vardecl_rcuperf.c 0 23383 &enable_so_length_dmi_header_23383
+enable_so_pcpu_atom_size_vardecl_percpu_c_23384 pcpu_atom_size vardecl_percpu.c 0 23384 NULL
+enable_so_sf_entsize_xfs_dir_ops_23386 sf_entsize xfs_dir_ops 0 23386 NULL nohasharray
+enable_so_dstirq_mpc_intsrc_23386 dstirq mpc_intsrc 0 23386 &enable_so_sf_entsize_xfs_dir_ops_23386
@@ -192958,7 +193476,8 @@ index 0000000..56d8f55
+enable_so_cosa_write_fndecl_23549 cosa_write fndecl 3 23549 NULL
+enable_so_ufs_inode_getblock_fndecl_23550 ufs_inode_getblock fndecl 4-3-2-0 23550 NULL nohasharray
+enable_so_inode_no_exofs_dir_entry_23550 inode_no exofs_dir_entry 0 23550 &enable_so_ufs_inode_getblock_fndecl_23550
-+enable_so_ast_fbdev_set_base_fndecl_23556 ast_fbdev_set_base fndecl 2 23556 NULL
++enable_so_ast_fbdev_set_base_fndecl_23556 ast_fbdev_set_base fndecl 2 23556 NULL nohasharray
++enable_so_n_fields_tracing_map_23556 n_fields tracing_map 0 23556 &enable_so_ast_fbdev_set_base_fndecl_23556
+enable_so_xfs_dabuf_map_fndecl_23558 xfs_dabuf_map fndecl 2 23558 NULL
+enable_so_p_chmask_f_uac2_opts_23559 p_chmask f_uac2_opts 0 23559 NULL
+enable_so_max_length_axi_dmac_chan_23560 max_length axi_dmac_chan 0 23560 NULL
@@ -192996,7 +193515,8 @@ index 0000000..56d8f55
+enable_so_viafb_bpp1_vardecl_viafbdev_c_23657 viafb_bpp1 vardecl_viafbdev.c 0 23657 NULL
+enable_so_cmtp_send_interopmsg_fndecl_23659 cmtp_send_interopmsg fndecl 7 23659 NULL
+enable_so_unix_stream_sendpage_fndecl_23660 unix_stream_sendpage fndecl 4-3 23660 NULL nohasharray
-+enable_so_elem_count_mlxsw_pci_queue_ops_23660 elem_count mlxsw_pci_queue_ops 0 23660 &enable_so_unix_stream_sendpage_fndecl_23660
++enable_so_elem_count_mlxsw_pci_queue_ops_23660 elem_count mlxsw_pci_queue_ops 0 23660 &enable_so_unix_stream_sendpage_fndecl_23660 nohasharray
++enable_so_reg_list_size_bytes_rlc_firmware_header_v2_0_23660 reg_list_size_bytes rlc_firmware_header_v2_0 0 23660 &enable_so_elem_count_mlxsw_pci_queue_ops_23660
+enable_so_fat_length_msdos_sb_info_23672 fat_length msdos_sb_info 0 23672 NULL
+enable_so_mlx5_core_access_reg_fndecl_23674 mlx5_core_access_reg fndecl 3-5 23674 NULL
+enable_so_xfs_get_blocks_fndecl_23679 xfs_get_blocks fndecl 2 23679 NULL nohasharray
@@ -193077,6 +193597,7 @@ index 0000000..56d8f55
+enable_so_vdisplay_drm_display_mode_23870 vdisplay drm_display_mode 0 23870 NULL
+enable_so_ohead_offs_ubifs_info_23876 ohead_offs ubifs_info 0 23876 NULL nohasharray
+enable_so_c_data_offs_pvr2_ioread_23876 c_data_offs pvr2_ioread 0 23876 &enable_so_ohead_offs_ubifs_info_23876
++enable_so_write_file_tpc_fndecl_23877 write_file_tpc fndecl 3 23877 NULL
+enable_so_operand_2_len_ccp_ecc_modular_math_23882 operand_2_len ccp_ecc_modular_math 0 23882 NULL
+enable_so_load_msg_fndecl_23884 load_msg fndecl 2 23884 NULL
+enable_so_snd_korg1212_copy_to_fndecl_23887 snd_korg1212_copy_to fndecl 6 23887 NULL
@@ -193097,6 +193618,7 @@ index 0000000..56d8f55
+enable_so_p9_client_readdir_fndecl_23927 p9_client_readdir fndecl 0-3 23927 NULL
+enable_so_disk_len_btrfs_ordered_extent_23932 disk_len btrfs_ordered_extent 0 23932 NULL
+enable_so_smiapp_write_8_fndecl_23937 smiapp_write_8 fndecl 2 23937 NULL
++enable_so_tracing_trace_options_write_fndecl_23946 tracing_trace_options_write fndecl 3 23946 NULL
+enable_so_btrfs_setxattr_fndecl_23956 btrfs_setxattr fndecl 4 23956 NULL
+enable_so_init_q_fndecl_23959 init_q fndecl 4 23959 NULL
+enable_so_input_buffer_size_vardecl_seq_midi_c_23961 input_buffer_size vardecl_seq_midi.c 0 23961 NULL
@@ -193152,7 +193674,6 @@ index 0000000..56d8f55
+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
@@ -193416,7 +193937,8 @@ index 0000000..56d8f55
+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
++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_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
@@ -193424,7 +193946,8 @@ index 0000000..56d8f55
+enable_so_afs_proc_rootcell_write_fndecl_24797 afs_proc_rootcell_write fndecl 3 24797 NULL
+enable_so_usHSyncWidth__ATOM_DTD_FORMAT_24801 usHSyncWidth _ATOM_DTD_FORMAT 0 24801 NULL nohasharray
+enable_so_index_vardecl_atiixp_c_24801 index vardecl_atiixp.c 0 24801 &enable_so_usHSyncWidth__ATOM_DTD_FORMAT_24801
-+enable_so_mprotect_fixup_fndecl_24803 mprotect_fixup fndecl 4-3 24803 NULL
++enable_so_mprotect_fixup_fndecl_24803 mprotect_fixup fndecl 4-3 24803 NULL nohasharray
++enable_so_write_file_tx99_fndecl_24803 write_file_tx99 fndecl 3 24803 &enable_so_mprotect_fixup_fndecl_24803
+enable_so___read_extent_tree_block_fndecl_24804 __read_extent_tree_block fndecl 4 24804 NULL
+enable_so_copy_to_urb_quirk_fndecl_24807 copy_to_urb_quirk fndecl 3-0-4 24807 NULL nohasharray
+enable_so_num_q_vectors_i40e_vsi_24807 num_q_vectors i40e_vsi 0 24807 &enable_so_copy_to_urb_quirk_fndecl_24807
@@ -193447,6 +193970,7 @@ index 0000000..56d8f55
+enable_so_wLength_usbdevfs_ctrltransfer_24851 wLength usbdevfs_ctrltransfer 0 24851 &enable_so_acpi_ut_create_string_object_fndecl_24851
+enable_so_pa_len_ext4_prealloc_space_24852 pa_len ext4_prealloc_space 0 24852 NULL
+enable_so_body_len_vardecl_initramfs_c_24853 body_len vardecl_initramfs.c 0 24853 NULL
++enable_so_sdebug_sector_size_vardecl_scsi_debug_c_24855 sdebug_sector_size vardecl_scsi_debug.c 0 24855 NULL
+enable_so_usbhs_pipe_config_update_fndecl_24856 usbhs_pipe_config_update fndecl 4 24856 NULL
+enable_so_compat_sys_process_vm_readv_fndecl_24861 compat_sys_process_vm_readv fndecl 5-3 24861 NULL nohasharray
+enable_so_bgpio_init_fndecl_24861 bgpio_init fndecl 3 24861 &enable_so_compat_sys_process_vm_readv_fndecl_24861
@@ -193569,12 +194093,14 @@ index 0000000..56d8f55
+enable_so_s_writesize_logfs_super_25176 s_writesize logfs_super 0 25176 &enable_so_cipso_v4_map_cat_rng_hton_fndecl_25176
+enable_so_btrfs_create_repair_bio_fndecl_25181 btrfs_create_repair_bio fndecl 5 25181 NULL
+enable_so_heapstart_sis_video_info_25184 heapstart sis_video_info 0 25184 NULL
++enable_so_il_dbgfs_disable_ht40_write_fndecl_25194 il_dbgfs_disable_ht40_write fndecl 3 25194 NULL
+enable_so_coex_tx_win_size_mwifiex_adapter_25195 coex_tx_win_size mwifiex_adapter 0 25195 NULL
+enable_so_run_filter_fndecl_25196 run_filter fndecl 0-3 25196 NULL
+enable_so_iso_in_endp_ttusbir_25197 iso_in_endp ttusbir 0 25197 NULL nohasharray
+enable_so_SyS_fgetxattr_fndecl_25197 SyS_fgetxattr fndecl 4 25197 &enable_so_iso_in_endp_ttusbir_25197
+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_dlen_cxgbit_lro_pdu_cb_25201 dlen cxgbit_lro_pdu_cb 0 25201 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
@@ -193704,6 +194230,7 @@ index 0000000..56d8f55
+enable_so_s_partition_len_udf_part_map_25593 s_partition_len udf_part_map 0 25593 NULL nohasharray
+enable_so_MaxReplyDescriptorPostQueueDepth_mpt3sas_facts_25593 MaxReplyDescriptorPostQueueDepth mpt3sas_facts 0 25593 &enable_so_s_partition_len_udf_part_map_25593
+enable_so_pcm_playback_analog_channels_snd_tscm_spec_25594 pcm_playback_analog_channels snd_tscm_spec 0 25594 NULL
++enable_so_udelay_test_write_fndecl_25596 udelay_test_write fndecl 3 25596 NULL
+enable_so_isr_hw_pm_mode_changes_read_fndecl_25597 isr_hw_pm_mode_changes_read fndecl 3 25597 NULL nohasharray
+enable_so_dma_tx_requested_read_fndecl_25597 dma_tx_requested_read fndecl 3 25597 &enable_so_isr_hw_pm_mode_changes_read_fndecl_25597
+enable_so_max_cmd_sg_entries_ctlr_info_25601 max_cmd_sg_entries ctlr_info 0 25601 NULL
@@ -193720,6 +194247,7 @@ index 0000000..56d8f55
+enable_so_getxattr_inode_operations_25660 getxattr inode_operations 0 25660 NULL
+enable_so_s5c73m3_spi_write_fndecl_25661 s5c73m3_spi_write fndecl 4-3 25661 NULL nohasharray
+enable_so_btt_write_pg_fndecl_25661 btt_write_pg fndecl 0 25661 &enable_so_s5c73m3_spi_write_fndecl_25661
++enable_so_min_bytes_needed_fndecl_25664 min_bytes_needed fndecl 0 25664 NULL
+enable_so_eec_entry_sz_mthca_dev_lim_25665 eec_entry_sz mthca_dev_lim 0 25665 NULL
+enable_so_m_ag_maxlevels_xfs_mount_25666 m_ag_maxlevels xfs_mount 0 25666 NULL nohasharray
+enable_so_HWPartsNum_qinfo_chip_25666 HWPartsNum qinfo_chip 0 25666 &enable_so_m_ag_maxlevels_xfs_mount_25666
@@ -193729,7 +194257,6 @@ index 0000000..56d8f55
+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
@@ -193806,7 +194333,8 @@ index 0000000..56d8f55
+enable_so_gid_tbl_len_ib_port_immutable_25893 gid_tbl_len ib_port_immutable 0 25893 &enable_so_intf_num_smi_info_25893
+enable_so_walk_page_range_fndecl_25894 walk_page_range fndecl 0 25894 NULL
+enable_so_ath6kl_regdump_read_fndecl_25898 ath6kl_regdump_read fndecl 3 25898 NULL
-+enable_so_vram_remap_vardecl_uvesafb_c_25907 vram_remap vardecl_uvesafb.c 0 25907 NULL
++enable_so_vram_remap_vardecl_uvesafb_c_25907 vram_remap vardecl_uvesafb.c 0 25907 NULL nohasharray
++enable_so_nfp_net_tx_ring_alloc_fndecl_25907 nfp_net_tx_ring_alloc fndecl 2 25907 &enable_so_vram_remap_vardecl_uvesafb_c_25907
+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 nohasharray
@@ -193823,6 +194351,7 @@ index 0000000..56d8f55
+enable_so_len_xsd_sockmsg_25963 len xsd_sockmsg 0 25963 NULL
+enable_so_ieee802154_hdr_get_sechdr_fndecl_25965 ieee802154_hdr_get_sechdr fndecl 0 25965 NULL
+enable_so_memblock_remove_range_fndecl_25969 memblock_remove_range fndecl 3-2 25969 NULL
++enable_so__iwl_dbgfs_sram_write_fndecl_25972 _iwl_dbgfs_sram_write fndecl 3 25972 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
@@ -193841,6 +194370,7 @@ index 0000000..56d8f55
+enable_so_ll_recv_fndecl_26047 ll_recv fndecl 3 26047 NULL
+enable_so_md_template_size_netxen_minidump_26050 md_template_size netxen_minidump 0 26050 NULL
+enable_so_port_ipoib_dev_priv_26051 port ipoib_dev_priv 0 26051 NULL
++enable_so_picolcd_debug_eeprom_read_fndecl_26054 picolcd_debug_eeprom_read fndecl 3 26054 NULL
+enable_so_l2cap_send_cmd_fndecl_26055 l2cap_send_cmd fndecl 4 26055 NULL
+enable_so__pcol_init_fndecl_26056 _pcol_init fndecl 2 26056 NULL
+enable_so_physical_for_dev_replace_scrub_copy_nocow_ctx_26059 physical_for_dev_replace scrub_copy_nocow_ctx 0 26059 NULL
@@ -194019,7 +194549,8 @@ index 0000000..56d8f55
+enable_so_npages_kvm_memory_slot_26541 npages kvm_memory_slot 0 26541 NULL
+enable_so_nfsd_drc_max_mem_vardecl_26544 nfsd_drc_max_mem vardecl 0 26544 NULL nohasharray
+enable_so_sctp_setsockopt_default_sndinfo_fndecl_26544 sctp_setsockopt_default_sndinfo fndecl 3 26544 &enable_so_nfsd_drc_max_mem_vardecl_26544
-+enable_so_onenand_write_fndecl_26546 onenand_write fndecl 2 26546 NULL
++enable_so_onenand_write_fndecl_26546 onenand_write fndecl 2 26546 NULL nohasharray
++enable_so_rss_lut_size_i40evf_adapter_26546 rss_lut_size i40evf_adapter 0 26546 &enable_so_onenand_write_fndecl_26546
+enable_so_pci_irq_pcmcia_socket_26558 pci_irq pcmcia_socket 0 26558 NULL
+enable_so_maxdepth_sfq_sched_data_26560 maxdepth sfq_sched_data 0 26560 NULL
+enable_so_cld_pipe_downcall_fndecl_26561 cld_pipe_downcall fndecl 3 26561 NULL
@@ -194150,6 +194681,7 @@ index 0000000..56d8f55
+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
+enable_so_to_skip_sd_26922 to_skip sd 0 26922 NULL
++enable_so_jfs_xattr_set_os2_fndecl_26923 jfs_xattr_set_os2 fndecl 6 26923 NULL
+enable_so_count_vnic_res_26925 count vnic_res 0 26925 NULL
+enable_so_depth_vpdma_data_format_26927 depth vpdma_data_format 0 26927 NULL
+enable_so_major_intel_th_26929 major intel_th 0 26929 NULL
@@ -194242,7 +194774,7 @@ index 0000000..56d8f55
+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_sys_bpf_fndecl_27150 sys_bpf 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
@@ -194277,6 +194809,7 @@ index 0000000..56d8f55
+enable_so_acks_winsz_rxrpc_call_27236 acks_winsz rxrpc_call 0 27236 &enable_so_qib_cfgctxts_vardecl_27236
+enable_so_do_splice_fndecl_27239 do_splice fndecl 5 27239 NULL
+enable_so_hfsplus_brec_find_fndecl_27243 hfsplus_brec_find fndecl 0 27243 NULL
++enable_so_name_len_ceph_mds_reply_dir_entry_27245 name_len ceph_mds_reply_dir_entry 0 27245 NULL
+enable_so_sisusb_recv_bulk_msg_fndecl_27246 sisusb_recv_bulk_msg fndecl 3-2 27246 NULL
+enable_so_skb_read_pdu_data_fndecl_27249 skb_read_pdu_data fndecl 4 27249 NULL
+enable_so_ocfs2_xattr_value_truncate_fndecl_27252 ocfs2_xattr_value_truncate fndecl 3 27252 NULL nohasharray
@@ -194315,8 +194848,7 @@ index 0000000..56d8f55
+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 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_find_new_extents_fndecl_27368 find_new_extents fndecl 5 27368 NULL
+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
@@ -194419,6 +194951,7 @@ index 0000000..56d8f55
+enable_so_size_compat_ip6t_replace_27672 size compat_ip6t_replace 0 27672 NULL
+enable_so_ib_umem_get_fndecl_27678 ib_umem_get fndecl 2-3 27678 NULL
+enable_so_tlbflush_write_file_fndecl_27685 tlbflush_write_file fndecl 3 27685 NULL
++enable_so__iwl_dbgfs_prph_reg_write_fndecl_27686 _iwl_dbgfs_prph_reg_write fndecl 3 27686 NULL
+enable_so_bnx2x_iov_init_one_fndecl_27687 bnx2x_iov_init_one fndecl 3 27687 NULL
+enable_so_mt9m111_get_global_gain_fndecl_27689 mt9m111_get_global_gain fndecl 0 27689 NULL
+enable_so_ipv6_get_l4proto_fndecl_27691 ipv6_get_l4proto fndecl 2 27691 NULL
@@ -194445,6 +194978,7 @@ index 0000000..56d8f55
+enable_so_si_blocks_ocfs2_slot_info_27753 si_blocks ocfs2_slot_info 0 27753 NULL
+enable_so_sparse_mem_maps_populate_node_fndecl_27758 sparse_mem_maps_populate_node fndecl 4 27758 NULL nohasharray
+enable_so_sel_read_class_fndecl_27758 sel_read_class fndecl 3 27758 &enable_so_sparse_mem_maps_populate_node_fndecl_27758
++enable_so_dwc3_link_state_write_fndecl_27762 dwc3_link_state_write fndecl 3 27762 NULL
+enable_so_nr_sendmsg_fndecl_27763 nr_sendmsg fndecl 3 27763 NULL
+enable_so_h_drm_vmw_rect_27765 h drm_vmw_rect 0 27765 NULL
+enable_so_instat_endpoint_keyspan_device_details_27768 instat_endpoint keyspan_device_details 0 27768 NULL nohasharray
@@ -194624,13 +195158,15 @@ index 0000000..56d8f55
+enable_so_data_pad_ubi_vtbl_record_28297 data_pad ubi_vtbl_record 0 28297 NULL
+enable_so_byte_count_il_rx_phy_res_28304 byte_count il_rx_phy_res 0 28304 NULL
+enable_so_flags2_psb_s_28305 flags2 psb_s 0 28305 NULL
++enable_so_create_trace_uprobe_fndecl_28307 create_trace_uprobe fndecl 1 28307 NULL
+enable_so___xfs_get_blocks_fndecl_28308 __xfs_get_blocks fndecl 2 28308 NULL
+enable_so_sst25l_read_fndecl_28315 sst25l_read fndecl 3 28315 NULL
+enable_so_comedi_read_fndecl_28316 comedi_read fndecl 3 28316 NULL
+enable_so_npages_mlx4_buf_28321 npages mlx4_buf 0 28321 NULL
+enable_so_version_tclass_flow_ib_grh_28322 version_tclass_flow ib_grh 0 28322 NULL
+enable_so_set_video_mode_Kiara_fndecl_28325 set_video_mode_Kiara fndecl 4 28325 NULL
-+enable_so_raw_descs_length_ffs_data_28328 raw_descs_length ffs_data 0 28328 NULL
++enable_so_raw_descs_length_ffs_data_28328 raw_descs_length ffs_data 0 28328 NULL nohasharray
++enable_so__iwl_dbgfs_disable_power_off_write_fndecl_28328 _iwl_dbgfs_disable_power_off_write fndecl 3 28328 &enable_so_raw_descs_length_ffs_data_28328
+enable_so_max_segment_size_brcmf_sdio_dev_28330 max_segment_size brcmf_sdio_dev 0 28330 NULL nohasharray
+enable_so_size_videobuf_dmabuf_28330 size videobuf_dmabuf 0 28330 &enable_so_max_segment_size_brcmf_sdio_dev_28330
+enable_so_asix_read_cmd_fndecl_28334 asix_read_cmd fndecl 5 28334 NULL
@@ -194718,6 +195254,7 @@ index 0000000..56d8f55
+enable_so_out_max_chans_snd_card_asihpi_28574 out_max_chans snd_card_asihpi 0 28574 NULL nohasharray
+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__iwl_dbgfs_ss_force_write_fndecl_28587 _iwl_dbgfs_ss_force_write fndecl 3 28587 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
@@ -194759,6 +195296,7 @@ index 0000000..56d8f55
+enable_so_size_fuse_notify_store_out_28704 size fuse_notify_store_out 0 28704 &enable_so_cw_bmove_fndecl_28704
+enable_so_CIFSSMBWrite2_fndecl_28705 CIFSSMBWrite2 fndecl 5 28705 NULL
+enable_so_mlx4_init_cmpt_table_fndecl_28706 mlx4_init_cmpt_table fndecl 3 28706 NULL
++enable_so_lpfc_idiag_ctlacc_write_fndecl_28715 lpfc_idiag_ctlacc_write fndecl 3 28715 NULL
+enable_so_nilfs_bmap_lookup_contig_fndecl_28717 nilfs_bmap_lookup_contig fndecl 0 28717 NULL nohasharray
+enable_so_oprofilefs_ulong_to_user_fndecl_28717 oprofilefs_ulong_to_user fndecl 3 28717 &enable_so_nilfs_bmap_lookup_contig_fndecl_28717
+enable_so_phys_smscore_buffer_t_28719 phys smscore_buffer_t 0 28719 NULL nohasharray
@@ -194790,7 +195328,8 @@ index 0000000..56d8f55
+enable_so_e820_remove_range_fndecl_28810 e820_remove_range fndecl 1-2 28810 NULL nohasharray
+enable_so_ide_queue_pc_tail_fndecl_28810 ide_queue_pc_tail fndecl 5 28810 &enable_so_e820_remove_range_fndecl_28810
+enable_so_sisusb_send_bridge_packet_fndecl_28818 sisusb_send_bridge_packet fndecl 2 28818 NULL
-+enable_so_ceph_build_auth_fndecl_28825 ceph_build_auth fndecl 0 28825 NULL
++enable_so_ceph_build_auth_fndecl_28825 ceph_build_auth fndecl 0 28825 NULL nohasharray
++enable_so_oid_printf_vargs_fndecl_28825 oid_printf_vargs fndecl 0 28825 &enable_so_ceph_build_auth_fndecl_28825
+enable_so_sdio_memcpy_toio_fndecl_28828 sdio_memcpy_toio fndecl 4 28828 NULL
+enable_so_vram_end_radeon_mc_28831 vram_end radeon_mc 0 28831 NULL
+enable_so_right_qxl_urect_28833 right qxl_urect 0 28833 NULL nohasharray
@@ -194828,6 +195367,7 @@ index 0000000..56d8f55
+enable_so_tegra_sflash_start_cpu_based_transfer_fndecl_28927 tegra_sflash_start_cpu_based_transfer fndecl 0 28927 NULL
+enable_so_block_hfs_extent_28930 block hfs_extent 0 28930 NULL
+enable_so_rpcrdma_count_chunks_fndecl_28931 rpcrdma_count_chunks fndecl 0 28931 NULL
++enable_so_wil_write_led_blink_time_fndecl_28933 wil_write_led_blink_time fndecl 3 28933 NULL
+enable_so_usbat_write_block_fndecl_28938 usbat_write_block fndecl 4-6 28938 NULL
+enable_so_pgs_per_blk_nvm_dev_28942 pgs_per_blk nvm_dev 0 28942 NULL
+enable_so_alsa_index_vardecl_thinkpad_acpi_c_28952 alsa_index vardecl_thinkpad_acpi.c 0 28952 NULL
@@ -194864,8 +195404,8 @@ index 0000000..56d8f55
+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_batadv_skb_head_push_fndecl_29043 batadv_skb_head_push fndecl 2 29043 NULL nohasharray
++enable_so_devm_mfd_add_devices_fndecl_29043 devm_mfd_add_devices fndecl 4 29043 &enable_so_batadv_skb_head_push_fndecl_29043
+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
@@ -194876,6 +195416,7 @@ index 0000000..56d8f55
+enable_so_nfs4_xattr_set_nfs4_acl_fndecl_29062 nfs4_xattr_set_nfs4_acl fndecl 5 29062 NULL
+enable_so_use_dmio_fndecl_29065 use_dmio fndecl 3 29065 NULL
+enable_so_ucFakeEDIDLength__ATOM_FAKE_EDID_PATCH_RECORD_29067 ucFakeEDIDLength _ATOM_FAKE_EDID_PATCH_RECORD 0 29067 NULL
++enable_so_i40e_dbg_command_write_fndecl_29070 i40e_dbg_command_write fndecl 3 29070 NULL
+enable_so_isku_sysfs_read_keys_capslock_fndecl_29075 isku_sysfs_read_keys_capslock fndecl 6 29075 NULL
+enable_so_tse_change_mtu_fndecl_29076 tse_change_mtu fndecl 2 29076 NULL
+enable_so_dev_irnet_write_fndecl_29077 dev_irnet_write fndecl 3 29077 NULL
@@ -194892,8 +195433,7 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_sys_oabi_ipc_fndecl_29147 sys_oabi_ipc fndecl 3 29147 &enable_so_y1_virtio_gpu_framebuffer_29147
++enable_so_y1_virtio_gpu_framebuffer_29147 y1 virtio_gpu_framebuffer 0 29147 NULL
+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
@@ -194938,7 +195478,8 @@ index 0000000..56d8f55
+enable_so_reg_shift_sccnxp_pdata_29283 reg_shift sccnxp_pdata 0 29283 NULL
+enable_so_sh_last_alloc_nilfs_sufile_header_29285 sh_last_alloc nilfs_sufile_header 0 29285 NULL
+enable_so_vmbus_open_fndecl_29289 vmbus_open fndecl 3-2 29289 NULL
-+enable_so_data_len_ceph_msg_header_29290 data_len ceph_msg_header 0 29290 NULL
++enable_so_data_len_ceph_msg_header_29290 data_len ceph_msg_header 0 29290 NULL nohasharray
++enable_so__iwl_dbgfs_tof_range_req_ext_write_fndecl_29290 _iwl_dbgfs_tof_range_req_ext_write fndecl 3 29290 &enable_so_data_len_ceph_msg_header_29290
+enable_so_btmrvl_sdio_host_to_card_fndecl_29291 btmrvl_sdio_host_to_card fndecl 3 29291 NULL
+enable_so_leb_start_ubi_device_29292 leb_start ubi_device 0 29292 NULL
+enable_so_user_ptr_drm_i915_gem_userptr_29294 user_ptr drm_i915_gem_userptr 0 29294 NULL
@@ -194953,7 +195494,6 @@ index 0000000..56d8f55
+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
@@ -194989,7 +195529,8 @@ index 0000000..56d8f55
+enable_so___alloc_bootmem_low_nopanic_fndecl_29400 __alloc_bootmem_low_nopanic fndecl 2-1-3 29400 NULL nohasharray
+enable_so_irq_set_msi_desc_off_fndecl_29400 irq_set_msi_desc_off fndecl 1 29400 &enable_so___alloc_bootmem_low_nopanic_fndecl_29400 nohasharray
+enable_so_octeon_alloc_recv_info_fndecl_29400 octeon_alloc_recv_info fndecl 1 29400 &enable_so_irq_set_msi_desc_off_fndecl_29400
-+enable_so_hpfs_map_sector_fndecl_29402 hpfs_map_sector fndecl 2 29402 NULL
++enable_so_hpfs_map_sector_fndecl_29402 hpfs_map_sector fndecl 2 29402 NULL nohasharray
++enable_so_hisax_cs_setup_fndecl_29402 hisax_cs_setup fndecl 0 29402 &enable_so_hpfs_map_sector_fndecl_29402
+enable_so_udp_gro_complete_fndecl_29407 udp_gro_complete fndecl 2 29407 NULL
+enable_so_sisfb_mem_sis_video_info_29418 sisfb_mem sis_video_info 0 29418 NULL
+enable_so_xop_data_nents_xcopy_op_29423 xop_data_nents xcopy_op 0 29423 NULL
@@ -195033,6 +195574,7 @@ index 0000000..56d8f55
+enable_so_iwl_mvm_send_cmd_pdu_fndecl_29560 iwl_mvm_send_cmd_pdu fndecl 0 29560 NULL
+enable_so_calculate_iosize_fndecl_29562 calculate_iosize fndecl 0-4-5-3-2-1 29562 NULL
+enable_so_ieee80211_rx_bss_info_fndecl_29564 ieee80211_rx_bss_info fndecl 3 29564 NULL
++enable_so_fs_devrw_entry_fndecl_29575 fs_devrw_entry fndecl 3 29575 NULL
+enable_so_addr_drm_amdgpu_gem_userptr_29582 addr drm_amdgpu_gem_userptr 0 29582 NULL
+enable_so___allowed_ingress_fndecl_29584 __allowed_ingress fndecl 2 29584 NULL
+enable_so_xstateregs_get_fndecl_29585 xstateregs_get fndecl 4 29585 NULL nohasharray
@@ -195209,6 +195751,7 @@ index 0000000..56d8f55
+enable_so_if_real_bytes_xfs_ifork_30126 if_real_bytes xfs_ifork 0 30126 NULL
+enable_so_max_total_qng_asc_dvc_var_30137 max_total_qng asc_dvc_var 0 30137 NULL
+enable_so_hdr_len_ieee80211_fast_tx_30143 hdr_len ieee80211_fast_tx 0 30143 NULL
++enable_so_ath10k_write_btcoex_fndecl_30144 ath10k_write_btcoex fndecl 3 30144 NULL
+enable_so_map_mr_sg_ib_device_30147 map_mr_sg ib_device 0 30147 NULL
+enable_so_chunk_len_nfcmrvl_fw_dnld_30149 chunk_len nfcmrvl_fw_dnld 0 30149 NULL
+enable_so_i915_gem_object_create_stolen_for_preallocated_fndecl_30151 i915_gem_object_create_stolen_for_preallocated fndecl 4-2-3 30151 NULL nohasharray
@@ -195258,7 +195801,6 @@ index 0000000..56d8f55
+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
@@ -195269,6 +195811,7 @@ index 0000000..56d8f55
+enable_so_logi_dj_raw_event_fndecl_30304 logi_dj_raw_event fndecl 4 30304 NULL
+enable_so_m_ts_msg_msg_30307 m_ts msg_msg 0 30307 NULL
+enable_so_alloc_alien_cache_fndecl_30308 alloc_alien_cache fndecl 2 30308 NULL
++enable_so_tracing_buffers_read_fndecl_30311 tracing_buffers_read fndecl 3 30311 NULL
+enable_so_ki_pos_kiocb_30312 ki_pos kiocb 0 30312 NULL
+enable_so_wbuf_pagesize_jffs2_sb_info_30318 wbuf_pagesize jffs2_sb_info 0 30318 NULL
+enable_so_nfakewriters_vardecl_rcutorture_c_30320 nfakewriters vardecl_rcutorture.c 0 30320 NULL
@@ -195276,6 +195819,7 @@ index 0000000..56d8f55
+enable_so_avc_stream_set_format_fndecl_30322 avc_stream_set_format fndecl 5 30322 NULL
+enable_so_name_len_discovery_t_30331 name_len discovery_t 0 30331 NULL
+enable_so_tc90522_master_xfer_fndecl_30332 tc90522_master_xfer fndecl 3 30332 NULL
++enable_so_nr_ops_rdma_rw_ctx_30338 nr_ops rdma_rw_ctx 0 30338 NULL
+enable_so_bfad_iocmd_vport_get_stats_fndecl_30341 bfad_iocmd_vport_get_stats fndecl 0 30341 NULL
+enable_so_acpi_os_map_memory_fndecl_30346 acpi_os_map_memory fndecl 2-1 30346 NULL
+enable_so_overflow_maj_vardecl_ucm_c_30347 overflow_maj vardecl_ucm.c 0 30347 NULL
@@ -195347,7 +195891,8 @@ index 0000000..56d8f55
+enable_so_entries_usb_sg_request_30570 entries usb_sg_request 0 30570 NULL
+enable_so_snd_pcm_oss_write1_fndecl_30571 snd_pcm_oss_write1 fndecl 3 30571 NULL
+enable_so_s_iblkno_ufs_sb_private_info_30572 s_iblkno ufs_sb_private_info 0 30572 NULL nohasharray
-+enable_so_key_len_ubifs_info_30572 key_len ubifs_info 0 30572 &enable_so_s_iblkno_ufs_sb_private_info_30572
++enable_so_key_len_ubifs_info_30572 key_len ubifs_info 0 30572 &enable_so_s_iblkno_ufs_sb_private_info_30572 nohasharray
++enable_so_wiidebug_drm_write_fndecl_30572 wiidebug_drm_write fndecl 3 30572 &enable_so_key_len_ubifs_info_30572
+enable_so_udf_get_pblock_virt20_fndecl_30574 udf_get_pblock_virt20 fndecl 4 30574 NULL
+enable_so_pio_ide_pio_info_30575 pio ide_pio_info 0 30575 NULL nohasharray
+enable_so_mid_get_vbt_data_r0_fndecl_30575 mid_get_vbt_data_r0 fndecl 2 30575 &enable_so_pio_ide_pio_info_30575
@@ -195400,6 +195945,7 @@ index 0000000..56d8f55
+enable_so_bin_cl_size_drm_vc4_submit_cl_30710 bin_cl_size drm_vc4_submit_cl 0 30710 NULL
+enable_so_sched_autogroup_write_fndecl_30715 sched_autogroup_write fndecl 3 30715 NULL
+enable_so_numPhys_PVSCSIConfigPageController_30726 numPhys PVSCSIConfigPageController 0 30726 NULL
++enable_so___alloc_preds_fndecl_30727 __alloc_preds fndecl 2 30727 NULL
+enable_so_lbs_threshold_write_fndecl_30733 lbs_threshold_write fndecl 5 30733 NULL
+enable_so_sock_recvmsg_fndecl_30735 sock_recvmsg fndecl 0 30735 NULL nohasharray
+enable_so_num_descriptors_pmc_ctx_30735 num_descriptors pmc_ctx 0 30735 &enable_so_sock_recvmsg_fndecl_30735
@@ -195428,7 +195974,8 @@ index 0000000..56d8f55
+enable_so_ResidualCnt_ErrorInfo_30806 ResidualCnt ErrorInfo 0 30806 NULL
+enable_so_buf_dma_gtco_30808 buf_dma gtco 0 30808 NULL nohasharray
+enable_so_sadb_key_bits_sadb_key_30808 sadb_key_bits sadb_key 0 30808 &enable_so_buf_dma_gtco_30808
-+enable_so_unmerge_ksm_pages_fndecl_30809 unmerge_ksm_pages fndecl 2 30809 NULL
++enable_so_unmerge_ksm_pages_fndecl_30809 unmerge_ksm_pages fndecl 2 30809 NULL nohasharray
++enable_so_il_dbgfs_missed_beacon_write_fndecl_30809 il_dbgfs_missed_beacon_write fndecl 3 30809 &enable_so_unmerge_ksm_pages_fndecl_30809
+enable_so_si21_readregs_fndecl_30810 si21_readregs fndecl 4 30810 NULL nohasharray
+enable_so_xfs_ialloc_read_agi_fndecl_30810 xfs_ialloc_read_agi fndecl 3 30810 &enable_so_si21_readregs_fndecl_30810
+enable_so_totalram_sysinfo_30812 totalram sysinfo 0 30812 NULL
@@ -195701,7 +196248,8 @@ index 0000000..56d8f55
+enable_so_num_txq_bna_attr_31588 num_txq bna_attr 0 31588 NULL
+enable_so_v_max_out_saa7146_standard_31591 v_max_out saa7146_standard 0 31591 NULL
+enable_so_nbchannel_capi_profile_31592 nbchannel capi_profile 0 31592 NULL
-+enable_so_radeon_gart_size_auto_fndecl_31605 radeon_gart_size_auto fndecl 0 31605 NULL
++enable_so_radeon_gart_size_auto_fndecl_31605 radeon_gart_size_auto fndecl 0 31605 NULL nohasharray
++enable_so_compute_real_fndecl_31605 compute_real fndecl 0-1 31605 &enable_so_radeon_gart_size_auto_fndecl_31605
+enable_so_sys_mprotect_fndecl_31611 sys_mprotect fndecl 2-1 31611 NULL
+enable_so_ino_logfs_object_header_31613 ino logfs_object_header 0 31613 NULL
+enable_so_iterate_fd_fndecl_31615 iterate_fd fndecl 0 31615 NULL
@@ -195801,7 +196349,6 @@ index 0000000..56d8f55
+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
@@ -195852,6 +196399,7 @@ index 0000000..56d8f55
+enable_so_bg_next_group_ocfs2_group_desc_32003 bg_next_group ocfs2_group_desc 0 32003 &enable_so_blocksize_sddr09_card_info_32003 nohasharray
+enable_so_bfad_iocmd_port_enable_fndecl_32003 bfad_iocmd_port_enable fndecl 0 32003 &enable_so_bg_next_group_ocfs2_group_desc_32003
+enable_so_ss_descs_count_ffs_data_32006 ss_descs_count ffs_data 0 32006 NULL
++enable_so_rt2x00debug_write_bbp_fndecl_32007 rt2x00debug_write_bbp fndecl 3 32007 NULL
+enable_so_play_iframe_fndecl_32008 play_iframe fndecl 3 32008 NULL
+enable_so_ad7879_spi_multi_read_fndecl_32009 ad7879_spi_multi_read fndecl 3 32009 NULL
+enable_so_size_tiger_dma_32013 size tiger_dma 0 32013 NULL nohasharray
@@ -195867,6 +196415,7 @@ index 0000000..56d8f55
+enable_so_next_free_pstore_32049 next_free pstore 0 32049 NULL
+enable_so_kvm_mmu_page_set_gfn_fndecl_32050 kvm_mmu_page_set_gfn fndecl 2 32050 NULL
+enable_so_g_num_of_iommus_vardecl_intel_iommu_c_32059 g_num_of_iommus vardecl_intel-iommu.c 0 32059 NULL
++enable_so___jfs_xattr_set_fndecl_32062 __jfs_xattr_set fndecl 4 32062 NULL
+enable_so_assoc_sta_del_all_sta_32069 assoc_sta del_all_sta 0 32069 NULL
+enable_so_config_size_nd_cmd_get_config_size_32073 config_size nd_cmd_get_config_size 0 32073 NULL
+enable_so_rproc_recovery_write_fndecl_32074 rproc_recovery_write fndecl 3 32074 NULL
@@ -195887,6 +196436,7 @@ index 0000000..56d8f55
+enable_so_rcvegrcnt_qib_ctxtdata_32127 rcvegrcnt qib_ctxtdata 0 32127 NULL
+enable_so_ip6_make_skb_fndecl_32129 ip6_make_skb fndecl 5-4 32129 NULL nohasharray
+enable_so_first_slot_vardecl_cpcihp_generic_c_32129 first_slot vardecl_cpcihp_generic.c 0 32129 &enable_so_ip6_make_skb_fndecl_32129
++enable_so_lpfc_debugfs_max_slow_ring_trc_vardecl_lpfc_debugfs_c_32130 lpfc_debugfs_max_slow_ring_trc vardecl_lpfc_debugfs.c 0 32130 NULL
+enable_so_sb_gquotino_xfs_sb_32131 sb_gquotino xfs_sb 0 32131 NULL
+enable_so_sync_request_fndecl_32141 sync_request fndecl 2 32141 NULL nohasharray
+enable_so_fsector_t_vardecl_floppy_c_32141 fsector_t vardecl_floppy.c 0 32141 &enable_so_sync_request_fndecl_32141
@@ -195949,6 +196499,7 @@ index 0000000..56d8f55
+enable_so_num_gpes_vardecl_sysfs_c_32294 num_gpes vardecl_sysfs.c 0 32294 NULL
+enable_so_IA_TX_BUF_SZ_vardecl_iphase_c_32295 IA_TX_BUF_SZ vardecl_iphase.c 0 32295 NULL nohasharray
+enable_so_dma_size_sst_pdata_32295 dma_size sst_pdata 0 32295 &enable_so_IA_TX_BUF_SZ_vardecl_iphase_c_32295
++enable_so_il_dbgfs_clear_ucode_stats_write_fndecl_32299 il_dbgfs_clear_ucode_stats_write fndecl 3 32299 NULL
+enable_so_rept_size_usbtouch_device_info_32306 rept_size usbtouch_device_info 0 32306 NULL
+enable_so_sizeof_namespace_index_fndecl_32312 sizeof_namespace_index fndecl 0 32312 NULL
+enable_so_snd_info_text_entry_write_fndecl_32315 snd_info_text_entry_write fndecl 3 32315 NULL
@@ -196075,7 +196626,8 @@ index 0000000..56d8f55
+enable_so_nrof_flowrings_brcmf_msgbuf_32666 nrof_flowrings brcmf_msgbuf 0 32666 NULL
+enable_so_rtsx_usb_transfer_data_fndecl_32669 rtsx_usb_transfer_data fndecl 4-2-0-5 32669 NULL
+enable_so_compressed_bio_size_fndecl_32676 compressed_bio_size fndecl 0-2 32676 NULL
-+enable_so_engine_start_viafb_dev_32681 engine_start viafb_dev 0 32681 NULL
++enable_so_engine_start_viafb_dev_32681 engine_start viafb_dev 0 32681 NULL nohasharray
++enable_so_ab3100_get_set_reg_fndecl_32681 ab3100_get_set_reg fndecl 3 32681 &enable_so_engine_start_viafb_dev_32681
+enable_so_length_ib_umem_32690 length ib_umem 0 32690 NULL
+enable_so_radeon_drm_ioctl_fndecl_32696 radeon_drm_ioctl fndecl 2 32696 NULL
+enable_so_ubifs_prepare_node_fndecl_32700 ubifs_prepare_node fndecl 3 32700 NULL
@@ -196173,7 +196725,8 @@ index 0000000..56d8f55
+enable_so_mtdchar_write_fndecl_33004 mtdchar_write fndecl 3 33004 NULL
+enable_so_dwNtbInMaxSize_usb_cdc_ncm_ntb_parameters_33006 dwNtbInMaxSize usb_cdc_ncm_ntb_parameters 0 33006 NULL
+enable_so_pktshift_sge_33011 pktshift sge 0 33011 NULL nohasharray
-+enable_so_offset_fl_pg_chunk_33011 offset fl_pg_chunk 0 33011 &enable_so_pktshift_sge_33011
++enable_so_offset_fl_pg_chunk_33011 offset fl_pg_chunk 0 33011 &enable_so_pktshift_sge_33011 nohasharray
++enable_so_mr_per_cmd_srp_target_port_33011 mr_per_cmd srp_target_port 0 33011 &enable_so_offset_fl_pg_chunk_33011
+enable_so_size_qlcnic_82xx_dump_template_hdr_33013 size qlcnic_82xx_dump_template_hdr 0 33013 NULL nohasharray
+enable_so_ion_ioctl_fndecl_33013 ion_ioctl fndecl 2 33013 &enable_so_size_qlcnic_82xx_dump_template_hdr_33013
+enable_so_nr_regions_amd_flash_info_33022 nr_regions amd_flash_info 0 33022 NULL
@@ -196231,7 +196784,8 @@ index 0000000..56d8f55
+enable_so___get_vm_area_caller_fndecl_33139 __get_vm_area_caller fndecl 1-3 33139 &enable_so_acpi_os_write_memory_fndecl_33139
+enable_so_size_bmp_header_33141 size bmp_header 0 33141 NULL nohasharray
+enable_so_hostname_len_nlm_lookup_host_info_33141 hostname_len nlm_lookup_host_info 0 33141 &enable_so_size_bmp_header_33141
-+enable_so_fm_extent_count_fiemap_33144 fm_extent_count fiemap 0 33144 NULL
++enable_so_fm_extent_count_fiemap_33144 fm_extent_count fiemap 0 33144 NULL nohasharray
++enable_so_ucNumEntries__ATOM_Polaris_SCLK_Dependency_Table_33144 ucNumEntries _ATOM_Polaris_SCLK_Dependency_Table 0 33144 &enable_so_fm_extent_count_fiemap_33144
+enable_so_l2cap_segment_le_sdu_fndecl_33145 l2cap_segment_le_sdu fndecl 4 33145 NULL
+enable_so_putused_user_fndecl_33152 putused_user fndecl 3 33152 NULL
+enable_so_osd_req_list_partition_objects_fndecl_33155 osd_req_list_partition_objects fndecl 5 33155 NULL nohasharray
@@ -196242,6 +196796,7 @@ index 0000000..56d8f55
+enable_so_walk_pgd_range_fndecl_33169 walk_pgd_range fndecl 0 33169 NULL
+enable_so_cx231xx_init_isoc_fndecl_33174 cx231xx_init_isoc fndecl 4-2-3 33174 NULL
+enable_so_hcs_params2_xhci_hcd_33175 hcs_params2 xhci_hcd 0 33175 NULL
++enable_so__min_socket_vardecl_x2apic_uv_x_c_33176 _min_socket vardecl_x2apic_uv_x.c 0 33176 NULL
+enable_so_set_connectable_fndecl_33177 set_connectable fndecl 4 33177 NULL
+enable_so_rw_devices_btrfs_fs_devices_33182 rw_devices btrfs_fs_devices 0 33182 NULL
+enable_so_arp_filter_size_mwifiex_adapter_33183 arp_filter_size mwifiex_adapter 0 33183 NULL
@@ -196285,10 +196840,12 @@ index 0000000..56d8f55
+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
++enable_so_tracing_set_trace_write_fndecl_33307 tracing_set_trace_write fndecl 3 33307 NULL
+enable_so_max_width_vsp1_rwpf_33314 max_width vsp1_rwpf 0 33314 NULL
+enable_so_nl80211_send_deauth_fndecl_33315 nl80211_send_deauth fndecl 4 33315 NULL nohasharray
+enable_so_ima_show_htable_value_fndecl_33315 ima_show_htable_value fndecl 2 33315 &enable_so_nl80211_send_deauth_fndecl_33315
+enable_so_static_rate_ib_ah_attr_33316 static_rate ib_ah_attr 0 33316 NULL
++enable_so__iwl_dbgfs_bf_params_write_fndecl_33318 _iwl_dbgfs_bf_params_write fndecl 3 33318 NULL
+enable_so_index_vardecl_via82xx_modem_c_33320 index vardecl_via82xx_modem.c 0 33320 NULL
+enable_so_acpi_gsb_i2c_read_bytes_fndecl_33322 acpi_gsb_i2c_read_bytes fndecl 4 33322 NULL
+enable_so_hlen_h4_recv_pkt_33324 hlen h4_recv_pkt 0 33324 NULL
@@ -196352,7 +196909,8 @@ index 0000000..56d8f55
+enable_so___asymmetric_key_hex_to_key_id_fndecl_33513 __asymmetric_key_hex_to_key_id fndecl 3 33513 &enable_so_error_rx_excessive_frame_len_read_fndecl_33513
+enable_so_check_mirror_fndecl_33517 check_mirror fndecl 2-1 33517 NULL nohasharray
+enable_so_usblp_read_fndecl_33517 usblp_read fndecl 3 33517 &enable_so_check_mirror_fndecl_33517
-+enable_so_len_writequeue_entry_33522 len writequeue_entry 0 33522 NULL
++enable_so_len_writequeue_entry_33522 len writequeue_entry 0 33522 NULL nohasharray
++enable_so_write_file_regval_fndecl_33522 write_file_regval fndecl 3 33522 &enable_so_len_writequeue_entry_33522
+enable_so_evdev_set_mask_fndecl_33528 evdev_set_mask fndecl 4-0 33528 NULL
+enable_so_offset_port_buffer_33530 offset port_buffer 0 33530 NULL
+enable_so___mxt_write_reg_fndecl_33533 __mxt_write_reg fndecl 3 33533 NULL
@@ -196448,6 +197006,7 @@ index 0000000..56d8f55
+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
++enable_so_edt_ft5x06_register_read_fndecl_33803 edt_ft5x06_register_read fndecl 0 33803 NULL
+enable_so_page_size_vmw_cmdbuf_alloc_info_33815 page_size vmw_cmdbuf_alloc_info 0 33815 NULL nohasharray
+enable_so_next_send_psn_mthca_qp_context_33815 next_send_psn mthca_qp_context 0 33815 &enable_so_page_size_vmw_cmdbuf_alloc_info_33815
+enable_so_custom_length_iscsi_stats_33819 custom_length iscsi_stats 0 33819 NULL
@@ -196521,6 +197080,7 @@ index 0000000..56d8f55
+enable_so_dib9000_risc_apb_access_write_fndecl_34004 dib9000_risc_apb_access_write fndecl 5 34004 NULL
+enable_so_batadv_tvlv_unicast_send_fndecl_34005 batadv_tvlv_unicast_send fndecl 7 34005 NULL
+enable_so_rxextrahdrroom_dma_info_34007 rxextrahdrroom dma_info 0 34007 NULL
++enable_so_of_n_size_cells_fndecl_34009 of_n_size_cells fndecl 0 34009 NULL
+enable_so_ctxtcnt_qib_devdata_34012 ctxtcnt qib_devdata 0 34012 NULL
+enable_so_size_vmw_cotable_info_34013 size vmw_cotable_info 0 34013 NULL nohasharray
+enable_so_periodic_size_ehci_hcd_34013 periodic_size ehci_hcd 0 34013 &enable_so_size_vmw_cotable_info_34013
@@ -196590,7 +197150,8 @@ index 0000000..56d8f55
+enable_so_krb5_decrypt_fndecl_34166 krb5_decrypt fndecl 5 34166 NULL
+enable_so_save_mr_fndecl_34167 save_mr fndecl 4 34167 NULL
+enable_so_blockmask_sddr55_card_info_34172 blockmask sddr55_card_info 0 34172 NULL
-+enable_so_osst_seek_sector_fndecl_34173 osst_seek_sector fndecl 3 34173 NULL
++enable_so_osst_seek_sector_fndecl_34173 osst_seek_sector fndecl 3 34173 NULL nohasharray
++enable_so_ucNumEntries__ATOM_Polaris10_PCIE_Table_34173 ucNumEntries _ATOM_Polaris10_PCIE_Table 0 34173 &enable_so_osst_seek_sector_fndecl_34173
+enable_so_bfad_iocmd_phy_update_fndecl_34178 bfad_iocmd_phy_update fndecl 0 34178 NULL
+enable_so_buffers_pipe_inode_info_34187 buffers pipe_inode_info 0 34187 NULL
+enable_so_sys_recv_fndecl_34188 sys_recv fndecl 3 34188 NULL
@@ -196687,11 +197248,13 @@ index 0000000..56d8f55
+enable_so_speakup_file_write_fndecl_34533 speakup_file_write fndecl 3 34533 NULL
+enable_so_bfad_iocmd_itnim_get_itnstats_fndecl_34534 bfad_iocmd_itnim_get_itnstats fndecl 0 34534 NULL nohasharray
+enable_so_track_pfn_remap_fndecl_34534 track_pfn_remap fndecl 3-5 34534 &enable_so_bfad_iocmd_itnim_get_itnstats_fndecl_34534
++enable_so_total_vfs_qed_hw_sriov_info_34538 total_vfs qed_hw_sriov_info 0 34538 NULL
+enable_so_resid_sg_io_hdr_34541 resid sg_io_hdr 0 34541 NULL
+enable_so_host_size_scsi_transport_template_34551 host_size scsi_transport_template 0 34551 NULL
+enable_so_dvb_aplay_fndecl_34555 dvb_aplay fndecl 3 34555 NULL
+enable_so_maximum_mfc_control_34558 maximum mfc_control 0 34558 NULL
-+enable_so_maxpacket_limit_usb_ep_34566 maxpacket_limit usb_ep 0 34566 NULL
++enable_so_maxpacket_limit_usb_ep_34566 maxpacket_limit usb_ep 0 34566 NULL nohasharray
++enable_so_target_alloc_sgl_fndecl_34566 target_alloc_sgl fndecl 3 34566 &enable_so_maxpacket_limit_usb_ep_34566
+enable_so_rx_ring_num_config_param_34571 rx_ring_num config_param 0 34571 NULL
+enable_so_sb16_copy_from_user_fndecl_34575 sb16_copy_from_user fndecl 10-7-6 34575 NULL
+enable_so_blkno_range2trim_34581 blkno range2trim 0 34581 NULL
@@ -196713,9 +197276,9 @@ index 0000000..56d8f55
+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_type_tw686x_dev_34645 type tw686x_dev 0 34645 NULL
+enable_so_idef6cpy_gru_control_block_extended_34646 idef6cpy gru_control_block_extended 0 34646 NULL
+enable_so_ramdisk_store_fndecl_34654 ramdisk_store fndecl 4 34654 NULL
+enable_so_uwb_est_used_vardecl_est_c_34662 uwb_est_used vardecl_est.c 0 34662 NULL
@@ -196791,6 +197354,7 @@ index 0000000..56d8f55
+enable_so_log_sz_mlx5_flow_table_group_34853 log_sz mlx5_flow_table_group 0 34853 &enable_so_good_peb_count_ubi_device_34853 nohasharray
+enable_so_fw_iso_buffer_init_fndecl_34853 fw_iso_buffer_init fndecl 3 34853 &enable_so_log_sz_mlx5_flow_table_group_34853
+enable_so_nilfs_ioctl_do_get_suinfo_fndecl_34854 nilfs_ioctl_do_get_suinfo fndecl 6 34854 NULL
++enable_so_flags_write_fndecl_34858 flags_write fndecl 3 34858 NULL
+enable_so_max_msix_vectors_fm10k_mac_info_34860 max_msix_vectors fm10k_mac_info 0 34860 NULL
+enable_so_tipc_link_set_mtu_fndecl_34861 tipc_link_set_mtu fndecl 2 34861 NULL nohasharray
+enable_so_gk20a_instobj_ctor_iommu_fndecl_34861 gk20a_instobj_ctor_iommu fndecl 2 34861 &enable_so_tipc_link_set_mtu_fndecl_34861
@@ -196852,7 +197416,8 @@ index 0000000..56d8f55
+enable_so_kzalloc_fndecl_35015 kzalloc fndecl 1 35015 NULL
+enable_so_skb_zerocopy_fndecl_35016 skb_zerocopy fndecl 4-3 35016 NULL
+enable_so_read_capacity_10_fndecl_35017 read_capacity_10 fndecl 0 35017 NULL
-+enable_so_no_ids_squashfs_super_block_35022 no_ids squashfs_super_block 0 35022 NULL
++enable_so_no_ids_squashfs_super_block_35022 no_ids squashfs_super_block 0 35022 NULL nohasharray
++enable_so_lpfc_idiag_pcicfg_write_fndecl_35022 lpfc_idiag_pcicfg_write fndecl 3 35022 &enable_so_no_ids_squashfs_super_block_35022
+enable_so__add_sg_continuation_descriptor_fndecl_35026 _add_sg_continuation_descriptor fndecl 3 35026 NULL
+enable_so_vSync_width_panel_info_35029 vSync_width panel_info 0 35029 NULL nohasharray
+enable_so_set_nservers_fndecl_35029 set_nservers fndecl 2 35029 &enable_so_vSync_width_panel_info_35029
@@ -197228,9 +197793,11 @@ index 0000000..56d8f55
+enable_so_update_ind_extent_range_fndecl_36049 update_ind_extent_range fndecl 3 36049 NULL
+enable_so_rx_status_len_bcm_rsb_36064 rx_status_len bcm_rsb 0 36064 NULL
+enable_so_piobcnt2k_qib_devdata_36065 piobcnt2k qib_devdata 0 36065 NULL
++enable_so_iwl_mvm_send_patterns_fndecl_36067 iwl_mvm_send_patterns fndecl 0 36067 NULL
+enable_so_xfrm_compile_policy_fndecl_36070 xfrm_compile_policy fndecl 4 36070 NULL
+enable_so_usb_stor_control_msg_fndecl_36073 usb_stor_control_msg fndecl 8-2 36073 NULL
+enable_so_wa_populate_buf_in_urb_fndecl_36077 wa_populate_buf_in_urb fndecl 4-3 36077 NULL
++enable_so_nfs4_xattr_get_nfs4_acl_fndecl_36079 nfs4_xattr_get_nfs4_acl fndecl 6 36079 NULL
+enable_so_blocksize_alauda_media_info_36080 blocksize alauda_media_info 0 36080 NULL nohasharray
+enable_so_nwriters_stress_vardecl_locktorture_c_36080 nwriters_stress vardecl_locktorture.c 0 36080 &enable_so_blocksize_alauda_media_info_36080
+enable_so_wdm_write_fndecl_36084 wdm_write fndecl 3 36084 NULL
@@ -197275,7 +197842,8 @@ index 0000000..56d8f55
+enable_so_xfs_vm_write_begin_fndecl_36211 xfs_vm_write_begin fndecl 3-4 36211 NULL
+enable_so_nfs_try_to_update_request_fndecl_36213 nfs_try_to_update_request fndecl 3-4 36213 NULL nohasharray
+enable_so_btrfs_find_all_roots_fndecl_36213 btrfs_find_all_roots fndecl 3 36213 &enable_so_nfs_try_to_update_request_fndecl_36213
-+enable_so_v4l2_ctrl_g_ctrl_fndecl_36216 v4l2_ctrl_g_ctrl fndecl 0 36216 NULL
++enable_so_v4l2_ctrl_g_ctrl_fndecl_36216 v4l2_ctrl_g_ctrl fndecl 0 36216 NULL nohasharray
++enable_so_qsfp1_debugfs_write_fndecl_36216 qsfp1_debugfs_write fndecl 3 36216 &enable_so_v4l2_ctrl_g_ctrl_fndecl_36216
+enable_so_bnx2i_send_nl_mesg_fndecl_36218 bnx2i_send_nl_mesg fndecl 4 36218 NULL
+enable_so_alloc_xen_mmio_fndecl_36220 alloc_xen_mmio fndecl 0-1 36220 NULL
+enable_so_page_size_spi_eeprom_36227 page_size spi_eeprom 0 36227 NULL nohasharray
@@ -197328,7 +197896,8 @@ index 0000000..56d8f55
+enable_so_xfs_symlink_blocks_fndecl_36326 xfs_symlink_blocks fndecl 0-2 36326 NULL nohasharray
+enable_so_xferred_rbd_obj_request_36326 xferred rbd_obj_request 0 36326 &enable_so_xfs_symlink_blocks_fndecl_36326
+enable_so_do_verify_xattr_datum_fndecl_36328 do_verify_xattr_datum fndecl 0 36328 NULL
-+enable_so_ima_write_template_field_data_fndecl_36336 ima_write_template_field_data fndecl 2 36336 NULL
++enable_so_ima_write_template_field_data_fndecl_36336 ima_write_template_field_data fndecl 2 36336 NULL nohasharray
++enable_so_create_trace_kprobe_fndecl_36336 create_trace_kprobe fndecl 1 36336 &enable_so_ima_write_template_field_data_fndecl_36336
+enable_so_c_size_p_sizes_36338 c_size p_sizes 0 36338 NULL nohasharray
+enable_so_hidp_send_frame_fndecl_36338 hidp_send_frame fndecl 3 36338 &enable_so_c_size_p_sizes_36338
+enable_so_digest_encode_fndecl_36340 digest_encode fndecl 0 36340 NULL
@@ -197425,6 +197994,7 @@ index 0000000..56d8f55
+enable_so_gamma_size_drm_mode_crtc_lut_36622 gamma_size drm_mode_crtc_lut 0 36622 NULL
+enable_so_raw_serial_size_x509_certificate_36629 raw_serial_size x509_certificate 0 36629 NULL
+enable_so_block_count_mspro_sys_info_36630 block_count mspro_sys_info 0 36630 NULL
++enable_so_acpi_aml_read_user_fndecl_36632 acpi_aml_read_user fndecl 2 36632 NULL
+enable_so_i915_gem_execbuffer_parse_fndecl_36633 i915_gem_execbuffer_parse fndecl 6-5 36633 NULL nohasharray
+enable_so_opcfg_ofsh_cyttsp4_sysinfo_data_36633 opcfg_ofsh cyttsp4_sysinfo_data 0 36633 &enable_so_i915_gem_execbuffer_parse_fndecl_36633
+enable_so_read_super_block_fndecl_36638 read_super_block fndecl 2 36638 NULL
@@ -197501,6 +198071,7 @@ index 0000000..56d8f55
+enable_so_raid5_compute_sector_fndecl_36860 raid5_compute_sector fndecl 0-2 36860 NULL
+enable_so_acpi_register_gsi_pic_fndecl_36869 acpi_register_gsi_pic fndecl 0-2 36869 NULL
+enable_so_vtotal_drm_display_mode_36870 vtotal drm_display_mode 0 36870 NULL
++enable_so_int_tasklet_entry_fndecl_36871 int_tasklet_entry fndecl 3 36871 NULL
+enable_so_qlcnic_83xx_sysfs_flash_write_fndecl_36872 qlcnic_83xx_sysfs_flash_write fndecl 4 36872 NULL
+enable_so_self_inum_vardecl_self_c_36873 self_inum vardecl_self.c 0 36873 NULL nohasharray
+enable_so_txd_size_bdx_priv_36873 txd_size bdx_priv 0 36873 &enable_so_self_inum_vardecl_self_c_36873 nohasharray
@@ -197532,7 +198103,6 @@ index 0000000..56d8f55
+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
@@ -197827,7 +198397,8 @@ index 0000000..56d8f55
+enable_so_cleanmarker_size_jffs2_sb_info_37959 cleanmarker_size jffs2_sb_info 0 37959 NULL
+enable_so_num_kcontrols_snd_soc_tplg_dapm_widget_37960 num_kcontrols snd_soc_tplg_dapm_widget 0 37960 NULL
+enable_so_consume_size_vmci_qp_alloc_info_vmvm_37962 consume_size vmci_qp_alloc_info_vmvm 0 37962 NULL
-+enable_so_unmap_vmas_fndecl_37967 unmap_vmas fndecl 4-3 37967 NULL
++enable_so_unmap_vmas_fndecl_37967 unmap_vmas fndecl 4-3 37967 NULL nohasharray
++enable_so_mbox_write_fndecl_37967 mbox_write fndecl 3 37967 &enable_so_unmap_vmas_fndecl_37967
+enable_so_ieee80211_if_write_uapsd_queues_fndecl_37973 ieee80211_if_write_uapsd_queues fndecl 3 37973 NULL
+enable_so_vortex_core_init_fndecl_37980 vortex_core_init fndecl 0 37980 NULL
+enable_so_key_search_fndecl_37982 key_search fndecl 0 37982 NULL
@@ -197899,7 +198470,8 @@ index 0000000..56d8f55
+enable_so_zone_end_strip_zone_38191 zone_end strip_zone 0 38191 NULL
+enable_so_nf_ct_ext_create_fndecl_38195 nf_ct_ext_create fndecl 3 38195 NULL
+enable_so_drm_property_create_fndecl_38196 drm_property_create fndecl 4 38196 NULL
-+enable_so_nilfs_cpfile_checkpoints_in_block_fndecl_38197 nilfs_cpfile_checkpoints_in_block fndecl 0-2-3 38197 NULL
++enable_so_nilfs_cpfile_checkpoints_in_block_fndecl_38197 nilfs_cpfile_checkpoints_in_block fndecl 0-2-3 38197 NULL nohasharray
++enable_so_pfpg_size_nvm_dev_38197 pfpg_size nvm_dev 0 38197 &enable_so_nilfs_cpfile_checkpoints_in_block_fndecl_38197
+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
@@ -197926,6 +198498,7 @@ index 0000000..56d8f55
+enable_so_bLength_usb_cdc_country_functional_desc_38256 bLength usb_cdc_country_functional_desc 0 38256 &enable_so_rsize_nfs_server_38256
+enable_so__osd_req_cdb_len_fndecl_38259 _osd_req_cdb_len fndecl 0 38259 NULL
+enable_so_security_set_fndecl_38262 security_set fndecl 5 38262 NULL
++enable_so_i2c2_debugfs_read_fndecl_38270 i2c2_debugfs_read fndecl 3 38270 NULL
+enable_so_prepare_header100_fndecl_38275 prepare_header100 fndecl 3-0 38275 NULL
+enable_so_min_pnp_port_38276 min pnp_port 0 38276 NULL
+enable_so_numpmkid_host_if_pmkid_attr_38277 numpmkid host_if_pmkid_attr 0 38277 NULL nohasharray
@@ -197975,6 +198548,7 @@ index 0000000..56d8f55
+enable_so_sl_tclass_flowlabel_mthca_qp_path_38402 sl_tclass_flowlabel mthca_qp_path 0 38402 NULL
+enable_so__c4iw_write_mem_dma_fndecl_38404 _c4iw_write_mem_dma fndecl 3 38404 NULL
+enable_so_parent_offset_isofs_fid_38408 parent_offset isofs_fid 0 38408 NULL
++enable_so_dwc3_mode_write_fndecl_38414 dwc3_mode_write fndecl 3 38414 NULL
+enable_so_xdr_xcode_array2_fndecl_38417 xdr_xcode_array2 fndecl 2 38417 NULL
+enable_so_count_grant_map_38422 count grant_map 0 38422 NULL
+enable_so_bond_next_port_mlx4_ib_dev_38423 bond_next_port mlx4_ib_dev 0 38423 NULL nohasharray
@@ -198143,6 +198717,7 @@ index 0000000..56d8f55
+enable_so_srs_nslot_sptlrpc_rule_set_38854 srs_nslot sptlrpc_rule_set 0 38854 NULL
+enable_so_count_ixgbevf_ring_38867 count ixgbevf_ring 0 38867 NULL
+enable_so_sectors_per_track_mspro_devinfo_38870 sectors_per_track mspro_devinfo 0 38870 NULL
++enable_so_nrealwriters_vardecl_rcuperf_c_38873 nrealwriters vardecl_rcuperf.c 0 38873 NULL
+enable_so_mask_mthca_alloc_38874 mask mthca_alloc 0 38874 NULL nohasharray
+enable_so_if_sdio_handle_data_fndecl_38874 if_sdio_handle_data fndecl 3 38874 &enable_so_mask_mthca_alloc_38874
+enable_so_wmi_set_ie_fndecl_38876 wmi_set_ie fndecl 3 38876 NULL
@@ -198176,8 +198751,7 @@ index 0000000..56d8f55
+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 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_drm_fb_helper_sys_write_fndecl_38945 drm_fb_helper_sys_write fndecl 3 38945 NULL
+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
@@ -198217,7 +198791,8 @@ index 0000000..56d8f55
+enable_so_bnxt_get_max_irq_fndecl_39067 bnxt_get_max_irq fndecl 0 39067 NULL nohasharray
+enable_so_n_buckets_bpf_htab_39067 n_buckets bpf_htab 0 39067 &enable_so_bnxt_get_max_irq_fndecl_39067
+enable_so_iscsit_handle_immediate_data_fndecl_39071 iscsit_handle_immediate_data fndecl 3 39071 NULL
-+enable_so_max_rules_crush_map_39073 max_rules crush_map 0 39073 NULL
++enable_so_max_rules_crush_map_39073 max_rules crush_map 0 39073 NULL nohasharray
++enable_so_num_counters_rdma_hw_stats_39073 num_counters rdma_hw_stats 0 39073 &enable_so_max_rules_crush_map_39073
+enable_so_usbatm_write_cells_fndecl_39074 usbatm_write_cells fndecl 0 39074 NULL
+enable_so_block_id_ms_boot_header_39075 block_id ms_boot_header 0 39075 NULL
+enable_so_frame_len_b43_rxhdr_fw4_39076 frame_len b43_rxhdr_fw4 0 39076 NULL
@@ -198247,6 +198822,7 @@ index 0000000..56d8f55
+enable_so_system_sample_rate_hdsp_39140 system_sample_rate hdsp 0 39140 NULL
+enable_so_drvr_sglimit_blogic_adapter_39142 drvr_sglimit blogic_adapter 0 39142 NULL
+enable_so_mmc_test_buffer_transfer_fndecl_39150 mmc_test_buffer_transfer fndecl 4 39150 NULL
++enable_so_of_phandle_iterator_args_fndecl_39151 of_phandle_iterator_args fndecl 0 39151 NULL
+enable_so_raid56_parity_alloc_scrub_rbio_fndecl_39153 raid56_parity_alloc_scrub_rbio fndecl 4 39153 NULL
+enable_so_port_srpt_port_39154 port srpt_port 0 39154 NULL
+enable_so_size_intel_initial_plane_config_39155 size intel_initial_plane_config 0 39155 NULL
@@ -198291,6 +198867,7 @@ index 0000000..56d8f55
+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
+enable_so_sky2_rx_tag_fndecl_39276 sky2_rx_tag fndecl 2 39276 NULL
++enable_so_soc_codec_reg_show_fndecl_39277 soc_codec_reg_show fndecl 3-0 39277 NULL
+enable_so_idata_dma_usb_xpad_39278 idata_dma usb_xpad 0 39278 NULL
+enable_so_size_tomoyo_condition_39281 size tomoyo_condition 0 39281 NULL
+enable_so_find_parent_nodes_fndecl_39282 find_parent_nodes fndecl 3 39282 NULL
@@ -198319,7 +198896,8 @@ index 0000000..56d8f55
+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_fscrypt_fname_alloc_buffer_fndecl_39339 fscrypt_fname_alloc_buffer fndecl 2 39339 NULL nohasharray
++enable_so_musb_softconnect_write_fndecl_39339 musb_softconnect_write fndecl 3 39339 &enable_so_fscrypt_fname_alloc_buffer_fndecl_39339
+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
@@ -198346,7 +198924,8 @@ index 0000000..56d8f55
+enable_so___page_set_anon_rmap_fndecl_39401 __page_set_anon_rmap fndecl 3 39401 NULL
+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_total_vfs_fm10k_iov_info_39412 total_vfs fm10k_iov_info 0 39412 NULL nohasharray
++enable_so__iwl_dbgfs_send_echo_cmd_write_fndecl_39412 _iwl_dbgfs_send_echo_cmd_write fndecl 3 39412 &enable_so_total_vfs_fm10k_iov_info_39412
+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
@@ -198361,6 +198940,7 @@ index 0000000..56d8f55
+enable_so_iov_len_iovec_39437 iov_len iovec 0 39437 &enable_so_ring_size__drm_i810_init_39437
+enable_so_show_device_status_fndecl_39440 show_device_status fndecl 0 39440 NULL
+enable_so_virtio_cread16_fndecl_39444 virtio_cread16 fndecl 0 39444 NULL
++enable_so_tp_la_write_fndecl_39445 tp_la_write fndecl 3 39445 NULL
+enable_so_sdio_uart_write_fndecl_39449 sdio_uart_write fndecl 3 39449 NULL
+enable_so_zl10036_write_fndecl_39451 zl10036_write fndecl 3 39451 NULL nohasharray
+enable_so_ocfs2_add_refcount_flag_fndecl_39451 ocfs2_add_refcount_flag fndecl 6-7-5 39451 &enable_so_zl10036_write_fndecl_39451
@@ -198380,7 +198960,8 @@ index 0000000..56d8f55
+enable_so_pktdev_major_vardecl_pktcdvd_c_39506 pktdev_major vardecl_pktcdvd.c 0 39506 NULL
+enable_so_rds_iw_sysctl_max_recv_wr_vardecl_39508 rds_iw_sysctl_max_recv_wr vardecl 0 39508 NULL
+enable_so_ppp_read_fndecl_39514 ppp_read fndecl 3 39514 NULL
-+enable_so_lbs_dev_info_fndecl_39516 lbs_dev_info fndecl 3 39516 NULL
++enable_so_lbs_dev_info_fndecl_39516 lbs_dev_info fndecl 3 39516 NULL nohasharray
++enable_so_mwifiex_timeshare_coex_write_fndecl_39516 mwifiex_timeshare_coex_write fndecl 3 39516 &enable_so_lbs_dev_info_fndecl_39516
+enable_so_error_tx_resume_failure_read_fndecl_39521 error_tx_resume_failure_read fndecl 3 39521 NULL
+enable_so_len_batadv_tvlv_hdr_39527 len batadv_tvlv_hdr 0 39527 NULL nohasharray
+enable_so_txsize_grcan_device_config_39527 txsize grcan_device_config 0 39527 &enable_so_len_batadv_tvlv_hdr_39527
@@ -198502,7 +199083,8 @@ index 0000000..56d8f55
+enable_so_xres_panel_info_39849 xres panel_info 0 39849 NULL
+enable_so_di_nextents_xfs_dinode_39855 di_nextents xfs_dinode 0 39855 NULL
+enable_so_imtu_l2cap_chan_39857 imtu l2cap_chan 0 39857 NULL
-+enable_so_usb_stor_reset_common_fndecl_39866 usb_stor_reset_common fndecl 7 39866 NULL
++enable_so_usb_stor_reset_common_fndecl_39866 usb_stor_reset_common fndecl 7 39866 NULL nohasharray
++enable_so_carl9170_debugfs_write_fndecl_39866 carl9170_debugfs_write fndecl 3 39866 &enable_so_usb_stor_reset_common_fndecl_39866
+enable_so_self_check_write_fndecl_39867 self_check_write fndecl 5 39867 NULL
+enable_so___bdev_writeseg_fndecl_39876 __bdev_writeseg fndecl 2-4 39876 NULL
+enable_so_do_shrink_slab_fndecl_39881 do_shrink_slab fndecl 4-3 39881 NULL
@@ -198649,6 +199231,7 @@ index 0000000..56d8f55
+enable_so_srpt_alloc_ioctx_ring_fndecl_40353 srpt_alloc_ioctx_ring fndecl 3-4-2 40353 &enable_so_default_llseek_fndecl_40353
+enable_so_pgbase_pnfs_device_40355 pgbase pnfs_device 0 40355 NULL
+enable_so_rbd_img_request_submit_fndecl_40356 rbd_img_request_submit fndecl 0 40356 NULL
++enable_so_reg_list_format_size_bytes_rlc_firmware_header_v2_0_40357 reg_list_format_size_bytes rlc_firmware_header_v2_0 0 40357 NULL
+enable_so_cblock_dm_cache_migration_40361 cblock dm_cache_migration 0 40361 NULL
+enable_so_cfpkt_setlen_fndecl_40364 cfpkt_setlen fndecl 2 40364 NULL nohasharray
+enable_so_max_wrs_rds_ib_device_40364 max_wrs rds_ib_device 0 40364 &enable_so_cfpkt_setlen_fndecl_40364
@@ -198658,7 +199241,9 @@ index 0000000..56d8f55
+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_qsfp_read_fndecl_40391 qsfp_read fndecl 0 40391 NULL
++enable_so_px_raw_event_fndecl_40392 px_raw_event fndecl 4 40392 NULL nohasharray
++enable_so_alloc_test_extent_buffer_fndecl_40392 alloc_test_extent_buffer fndecl 2 40392 &enable_so_px_raw_event_fndecl_40392
+enable_so_file_secno_bplus_leaf_node_40394 file_secno bplus_leaf_node 0 40394 NULL nohasharray
+enable_so_sb_root_hpfs_sb_info_40394 sb_root hpfs_sb_info 0 40394 &enable_so_file_secno_bplus_leaf_node_40394
+enable_so_snd_ak4113_external_rate_fndecl_40404 snd_ak4113_external_rate fndecl 0 40404 NULL nohasharray
@@ -198809,7 +199394,6 @@ index 0000000..56d8f55
+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
@@ -198819,6 +199403,7 @@ index 0000000..56d8f55
+enable_so_nvram_llseek_fndecl_40869 nvram_llseek fndecl 2 40869 NULL
+enable_so_reply_queue_count_MPT3SAS_ADAPTER_40870 reply_queue_count MPT3SAS_ADAPTER 0 40870 NULL
+enable_so_sector_count_partition_40874 sector_count partition 0 40874 NULL
++enable_so_scsi_dispatch_cmd_entry_fndecl_40875 scsi_dispatch_cmd_entry fndecl 3 40875 NULL
+enable_so_config_len_mic_device_desc_40877 config_len mic_device_desc 0 40877 NULL
+enable_so_min_agbno_xfs_alloc_arg_40884 min_agbno xfs_alloc_arg 0 40884 NULL nohasharray
+enable_so_osst_set_options_fndecl_40884 osst_set_options fndecl 2 40884 &enable_so_min_agbno_xfs_alloc_arg_40884
@@ -198912,7 +199497,8 @@ index 0000000..56d8f55
+enable_so_calib_fail_count_read_fndecl_41171 calib_fail_count_read fndecl 3 41171 NULL
+enable_so_suspend_dtim_interval_read_fndecl_41176 suspend_dtim_interval_read fndecl 3 41176 NULL
+enable_so_size_brnf_frag_data_41177 size brnf_frag_data 0 41177 NULL
-+enable_so_start_flakey_c_41178 start flakey_c 0 41178 NULL
++enable_so_start_flakey_c_41178 start flakey_c 0 41178 NULL nohasharray
++enable_so_traceprobe_probes_write_fndecl_41178 traceprobe_probes_write fndecl 3 41178 &enable_so_start_flakey_c_41178
+enable_so_lro_wqe_sz_mlx5e_params_41180 lro_wqe_sz mlx5e_params 0 41180 NULL
+enable_so_gfn_guest_walker64_41182 gfn guest_walker64 0 41182 NULL
+enable_so_index_vardecl_via82xx_c_41183 index vardecl_via82xx.c 0 41183 NULL
@@ -198961,7 +199547,7 @@ index 0000000..56d8f55
+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 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_d40_size_2_dmalen_fndecl_41311 d40_size_2_dmalen fndecl 0-3-2-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
@@ -198980,6 +199566,7 @@ index 0000000..56d8f55
+enable_so_efx_tsoh_get_buffer_fndecl_41355 efx_tsoh_get_buffer fndecl 3 41355 NULL
+enable_so_usb_stor_probe1_fndecl_41357 usb_stor_probe1 fndecl 0 41357 NULL
+enable_so_rx_rx_out_of_mpdu_nodes_read_fndecl_41359 rx_rx_out_of_mpdu_nodes_read fndecl 3 41359 NULL
++enable_so__iwl_dbgfs_d0i3_refs_write_fndecl_41361 _iwl_dbgfs_d0i3_refs_write fndecl 3 41361 NULL
+enable_so_sl_ocrdma_dev_41367 sl ocrdma_dev 0 41367 NULL
+enable_so_num_eq_entries_hba_parameters_41369 num_eq_entries hba_parameters 0 41369 NULL
+enable_so_wrsent_cyberjack_private_41371 wrsent cyberjack_private 0 41371 NULL
@@ -199000,6 +199587,7 @@ index 0000000..56d8f55
+enable_so_snd_pcm_oss_capture_position_fixup_fndecl_41434 snd_pcm_oss_capture_position_fixup fndecl 0 41434 NULL
+enable_so_l1_size_vardecl_acpi_extlog_c_41440 l1_size vardecl_acpi_extlog.c 0 41440 NULL
+enable_so_vram_remap_vardecl_vesafb_c_41441 vram_remap vardecl_vesafb.c 0 41441 NULL
++enable_so_rt2x00debug_write_csr_fndecl_41442 rt2x00debug_write_csr fndecl 3 41442 NULL
+enable_so_udf_NLStoCS0_fndecl_41451 udf_NLStoCS0 fndecl 0 41451 NULL
+enable_so_rf_blkno_ocfs2_refcount_tree_41452 rf_blkno ocfs2_refcount_tree 0 41452 NULL
+enable_so_dm_wmfw_adsp1_alg_hdr_41454 dm wmfw_adsp1_alg_hdr 0 41454 NULL
@@ -199017,10 +199605,12 @@ index 0000000..56d8f55
+enable_so_redirected_tty_write_fndecl_41474 redirected_tty_write fndecl 3 41474 NULL
+enable_so_get_var_len_fndecl_41483 get_var_len fndecl 0 41483 NULL
+enable_so_video_offset_sis_video_info_41491 video_offset sis_video_info 0 41491 NULL
-+enable_so_lpddr_info_query_fndecl_41492 lpddr_info_query fndecl 0 41492 NULL
++enable_so_lpddr_info_query_fndecl_41492 lpddr_info_query fndecl 0 41492 NULL nohasharray
++enable_so__iwl_dbgfs_quota_min_write_fndecl_41492 _iwl_dbgfs_quota_min_write fndecl 3 41492 &enable_so_lpddr_info_query_fndecl_41492
+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
++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_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
@@ -199114,7 +199704,8 @@ index 0000000..56d8f55
+enable_so_pcibios_enable_device_fndecl_41776 pcibios_enable_device fndecl 0 41776 NULL
+enable_so_ath9k_multi_regread_fndecl_41779 ath9k_multi_regread fndecl 4 41779 NULL
+enable_so_dma_rx_size_stmmac_priv_41781 dma_rx_size stmmac_priv 0 41781 NULL nohasharray
-+enable_so_pg_vec_len_packet_ring_buffer_41781 pg_vec_len packet_ring_buffer 0 41781 &enable_so_dma_rx_size_stmmac_priv_41781
++enable_so_pg_vec_len_packet_ring_buffer_41781 pg_vec_len packet_ring_buffer 0 41781 &enable_so_dma_rx_size_stmmac_priv_41781 nohasharray
++enable_so_alloc_dummy_extent_buffer_fndecl_41781 alloc_dummy_extent_buffer fndecl 2 41781 &enable_so_pg_vec_len_packet_ring_buffer_41781
+enable_so_scif_get_pages_fndecl_41783 scif_get_pages fndecl 2-3 41783 NULL
+enable_so_numtx_velocity_opt_41785 numtx velocity_opt 0 41785 NULL
+enable_so_num_bytes_drm_dp_remote_i2c_write_41786 num_bytes drm_dp_remote_i2c_write 0 41786 NULL
@@ -199169,6 +199760,7 @@ index 0000000..56d8f55
+enable_so_rx_rx_done_read_fndecl_41938 rx_rx_done_read fndecl 3 41938 NULL
+enable_so_n_sel_arg_struct_41940 n sel_arg_struct 0 41940 NULL
+enable_so_rmmio_size_cirrus_device_41950 rmmio_size cirrus_device 0 41950 NULL
++enable_so_compat_packet_setsockopt_fndecl_41954 compat_packet_setsockopt fndecl 5 41954 NULL
+enable_so_smb_buf_length_smb_hdr_41959 smb_buf_length smb_hdr 0 41959 NULL nohasharray
+enable_so_kmem_zalloc_greedy_fndecl_41959 kmem_zalloc_greedy fndecl 3-2 41959 &enable_so_smb_buf_length_smb_hdr_41959
+enable_so_ide_init_sg_cmd_fndecl_41962 ide_init_sg_cmd fndecl 2 41962 NULL
@@ -199224,6 +199816,7 @@ index 0000000..56d8f55
+enable_so_namelen_xenpf_symdata_42085 namelen xenpf_symdata 0 42085 NULL
+enable_so_raw_issuer_size_x509_certificate_42091 raw_issuer_size x509_certificate 0 42091 NULL
+enable_so_rtsx_pci_send_cmd_fndecl_42093 rtsx_pci_send_cmd fndecl 0 42093 NULL
++enable_so_read_page_owner_fndecl_42094 read_page_owner fndecl 3 42094 NULL
+enable_so_outsize_cros_ec_command_42095 outsize cros_ec_command 0 42095 NULL
+enable_so_do_syslog_fndecl_42100 do_syslog fndecl 3 42100 NULL
+enable_so_gtt_size_radeon_mc_42102 gtt_size radeon_mc 0 42102 NULL nohasharray
@@ -199279,7 +199872,8 @@ index 0000000..56d8f55
+enable_so_snd_pcm_plug_write_transfer_fndecl_42268 snd_pcm_plug_write_transfer fndecl 3-0 42268 NULL
+enable_so_sge_length_qib_sge_42274 sge_length qib_sge 0 42274 NULL
+enable_so_write_file_spectral_period_fndecl_42275 write_file_spectral_period fndecl 3 42275 NULL
-+enable_so_if_sdio_read_scratch_fndecl_42279 if_sdio_read_scratch fndecl 0 42279 NULL
++enable_so_if_sdio_read_scratch_fndecl_42279 if_sdio_read_scratch fndecl 0 42279 NULL nohasharray
++enable_so_f2fs_kmalloc_fndecl_42279 f2fs_kmalloc fndecl 1 42279 &enable_so_if_sdio_read_scratch_fndecl_42279
+enable_so_cfg_sriov_nr_virtfn_lpfc_hba_42280 cfg_sriov_nr_virtfn lpfc_hba 0 42280 NULL nohasharray
+enable_so_rx_pending_ethtool_ringparam_42280 rx_pending ethtool_ringparam 0 42280 &enable_so_cfg_sriov_nr_virtfn_lpfc_hba_42280
+enable_so_append_to_buffer_fndecl_42285 append_to_buffer fndecl 3 42285 NULL
@@ -199365,7 +199959,8 @@ index 0000000..56d8f55
+enable_so_cn_netlink_send_mult_fndecl_42523 cn_netlink_send_mult fndecl 2 42523 NULL
+enable_so_maxframe_size_fc_rport_priv_42527 maxframe_size fc_rport_priv 0 42527 NULL
+enable_so_size_rx_desc_42538 size rx_desc 0 42538 NULL
-+enable_so_max_payload_len_pn533_frame_ops_42544 max_payload_len pn533_frame_ops 0 42544 NULL
++enable_so_max_payload_len_pn533_frame_ops_42544 max_payload_len pn533_frame_ops 0 42544 NULL nohasharray
++enable_so_info_debugfs_read_fndecl_42544 info_debugfs_read fndecl 3 42544 &enable_so_max_payload_len_pn533_frame_ops_42544
+enable_so_fdt_num_mem_rsv_fndecl_42546 fdt_num_mem_rsv fndecl 0 42546 NULL nohasharray
+enable_so_num_reg_channel_bounds_42546 num reg_channel_bounds 0 42546 &enable_so_fdt_num_mem_rsv_fndecl_42546
+enable_so_xfs_dir_cilookup_result_fndecl_42547 xfs_dir_cilookup_result fndecl 3 42547 NULL
@@ -199515,7 +200110,6 @@ index 0000000..56d8f55
+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
@@ -199528,6 +200122,7 @@ index 0000000..56d8f55
+enable_so_vb2_dc_get_userptr_fndecl_42957 vb2_dc_get_userptr fndecl 2-3 42957 NULL
+enable_so_brcmf_usb_tx_ctlpkt_fndecl_42958 brcmf_usb_tx_ctlpkt fndecl 3 42958 NULL
+enable_so_kernfs_iop_setxattr_fndecl_42959 kernfs_iop_setxattr fndecl 4 42959 NULL
++enable_so_wm_coeff_tlv_get_fndecl_42961 wm_coeff_tlv_get fndecl 3 42961 NULL
+enable_so_gpio_count_async_state_42965 gpio_count async_state 0 42965 NULL nohasharray
+enable_so_udf_get_block_fndecl_42965 udf_get_block fndecl 2 42965 &enable_so_gpio_count_async_state_42965
+enable_so___pskb_copy_fclone_fndecl_42969 __pskb_copy_fclone fndecl 2 42969 NULL
@@ -199566,6 +200161,7 @@ index 0000000..56d8f55
+enable_so_acpi_dev_get_ioresource_fndecl_43062 acpi_dev_get_ioresource fndecl 3-2 43062 &enable_so_inode_number_squashfs_base_inode_43062
+enable_so_len_ib_ucm_rep_43064 len ib_ucm_rep 0 43064 NULL
+enable_so_len_srp_direct_buf_43066 len srp_direct_buf 0 43066 NULL
++enable_so_quirk_simultaneous_discovery_write_fndecl_43076 quirk_simultaneous_discovery_write fndecl 3 43076 NULL
+enable_so_raw_skid_size_pkcs7_parse_context_43081 raw_skid_size pkcs7_parse_context 0 43081 NULL
+enable_so_output_buffer_size_vardecl_seq_midi_c_43084 output_buffer_size vardecl_seq_midi.c 0 43084 NULL
+enable_so_bttv_prepare_buffer_fndecl_43088 bttv_prepare_buffer fndecl 6-5 43088 NULL
@@ -199737,6 +200333,7 @@ index 0000000..56d8f55
+enable_so_sb_rextslog_xfs_sb_43520 sb_rextslog xfs_sb 0 43520 NULL nohasharray
+enable_so_ptp_read_fndecl_43520 ptp_read fndecl 4 43520 &enable_so_sb_rextslog_xfs_sb_43520
+enable_so_fifo_pool_size_snd_seq_user_client_43523 fifo_pool_size snd_seq_user_client 0 43523 NULL
++enable_so__iwl_dbgfs_rx_phyinfo_write_fndecl_43525 _iwl_dbgfs_rx_phyinfo_write fndecl 3 43525 NULL
+enable_so_xfs_dir2_leaf_getdents_fndecl_43533 xfs_dir2_leaf_getdents fndecl 3 43533 NULL
+enable_so_mei_amthif_read_start_fndecl_43534 mei_amthif_read_start fndecl 0 43534 NULL
+enable_so_dccps_gsr_dccp_sock_43535 dccps_gsr dccp_sock 0 43535 NULL
@@ -199774,6 +200371,7 @@ index 0000000..56d8f55
+enable_so_sdricoh_mmc_cmd_fndecl_43641 sdricoh_mmc_cmd fndecl 0 43641 NULL
+enable_so_info_server_fndecl_43644 info_server fndecl 4 43644 NULL
+enable_so_bfad_iocmd_pcifn_create_fndecl_43645 bfad_iocmd_pcifn_create fndecl 0 43645 NULL
++enable_so_name_len_ceph_object_id_43655 name_len ceph_object_id 0 43655 NULL
+enable_so_nf_nat_sip_fndecl_43657 nf_nat_sip fndecl 2 43657 NULL
+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
@@ -199816,7 +200414,6 @@ index 0000000..56d8f55
+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
@@ -199897,17 +200494,20 @@ index 0000000..56d8f55
+enable_so_rbd_img_obj_exists_submit_fndecl_44011 rbd_img_obj_exists_submit fndecl 0 44011 NULL
+enable_so_ext2_direct_IO_fndecl_44012 ext2_direct_IO fndecl 3 44012 NULL
+enable_so_level_pid_namespace_44021 level pid_namespace 0 44021 NULL
-+enable_so_nr_chnls_nvm_dev_44026 nr_chnls nvm_dev 0 44026 NULL
++enable_so_nr_chnls_nvm_dev_44026 nr_chnls nvm_dev 0 44026 NULL nohasharray
++enable_so__iwl_dbgfs_stop_ctdp_write_fndecl_44026 _iwl_dbgfs_stop_ctdp_write fndecl 3 44026 &enable_so_nr_chnls_nvm_dev_44026
+enable_so_rx_buffer_truesize_efx_nic_44027 rx_buffer_truesize efx_nic 0 44027 NULL
+enable_so_response_length_ib_uverbs_ex_create_qp_resp_44030 response_length ib_uverbs_ex_create_qp_resp 0 44030 NULL
+enable_so_SyS_kexec_file_load_fndecl_44032 SyS_kexec_file_load fndecl 3 44032 NULL
+enable_so_wilc_gnrl_async_info_received_fndecl_44034 wilc_gnrl_async_info_received fndecl 3 44034 NULL
+enable_so_regsize_octeon_mdiobus_44041 regsize octeon_mdiobus 0 44041 NULL
+enable_so_convert_extent_bit_fndecl_44046 convert_extent_bit fndecl 2-3 44046 NULL
++enable_so_nfp_net_set_ring_size_fndecl_44050 nfp_net_set_ring_size fndecl 3-2 44050 NULL
+enable_so_nr_rings_xen_blkif_44058 nr_rings xen_blkif 0 44058 NULL
+enable_so_ahc_linux_map_seg_fndecl_44059 ahc_linux_map_seg fndecl 4-5 44059 NULL nohasharray
+enable_so_btrfs_submit_direct_fndecl_44059 btrfs_submit_direct fndecl 4 44059 &enable_so_ahc_linux_map_seg_fndecl_44059
+enable_so_prog_page_fndecl_44060 prog_page fndecl 2 44060 NULL
++enable_so_num_trace_enums_module_44062 num_trace_enums module 0 44062 NULL
+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
@@ -199984,6 +200584,7 @@ index 0000000..56d8f55
+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_btusb_setup_qca_download_fw_fndecl_44343 btusb_setup_qca_download_fw fndecl 0 44343 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
+enable_so_count_v4l2_ext_controls_44346 count v4l2_ext_controls 0 44346 &enable_so_tail_circ_buf_44346
@@ -200005,6 +200606,7 @@ index 0000000..56d8f55
+enable_so_reiserfs_xattr_set_fndecl_44389 reiserfs_xattr_set fndecl 4 44389 NULL nohasharray
+enable_so_bfad_iocmd_ioc_get_attr_fndecl_44389 bfad_iocmd_ioc_get_attr fndecl 0 44389 &enable_so_reiserfs_xattr_set_fndecl_44389
+enable_so_hidpp_prefix_name_fndecl_44393 hidpp_prefix_name fndecl 2 44393 NULL
++enable_so_num_rx_rings_nfp_net_44395 num_rx_rings nfp_net 0 44395 NULL
+enable_so_s_raid_stripe_width_ext4_super_block_44401 s_raid_stripe_width ext4_super_block 0 44401 NULL
+enable_so_num_iscsi_tasks_cnic_local_44404 num_iscsi_tasks cnic_local 0 44404 NULL
+enable_so_compat_SyS_select_fndecl_44405 compat_SyS_select fndecl 1 44405 NULL
@@ -200058,7 +200660,6 @@ index 0000000..56d8f55
+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
@@ -200117,11 +200718,13 @@ index 0000000..56d8f55
+enable_so_offset_drm_map_44692 offset drm_map 0 44692 NULL
+enable_so_start_linear_c_44708 start linear_c 0 44708 NULL
+enable_so_au_rslack_rpc_auth_44712 au_rslack rpc_auth 0 44712 NULL
++enable_so_asic_flags_write_fndecl_44717 asic_flags_write fndecl 3 44717 NULL
+enable_so_altera_irscan_fndecl_44719 altera_irscan fndecl 2 44719 NULL
+enable_so___nilfs_get_page_block_fndecl_44723 __nilfs_get_page_block fndecl 4 44723 NULL
+enable_so_inlen_mimd_44727 inlen mimd 0 44727 NULL nohasharray
+enable_so_kmalloc_order_fndecl_44727 kmalloc_order fndecl 1 44727 &enable_so_inlen_mimd_44727
+enable_so_nd_blk_rw_integrity_fndecl_44728 nd_blk_rw_integrity fndecl 0 44728 NULL
++enable_so_amdgpu_job_alloc_fndecl_44730 amdgpu_job_alloc fndecl 2 44730 NULL
+enable_so_assoc_req_ies_len_station_info_44731 assoc_req_ies_len station_info 0 44731 NULL nohasharray
+enable_so_buffer_size_st_buffer_44731 buffer_size st_buffer 0 44731 &enable_so_assoc_req_ies_len_station_info_44731
+enable_so_ino_nilfs_recovery_block_44737 ino nilfs_recovery_block 0 44737 NULL
@@ -200165,6 +200768,7 @@ index 0000000..56d8f55
+enable_so_squashfs_read_id_index_table_fndecl_44826 squashfs_read_id_index_table fndecl 4 44826 NULL
+enable_so_vlan_tag_be_rx_compl_info_44830 vlan_tag be_rx_compl_info 0 44830 NULL nohasharray
+enable_so_fix_read_error_fndecl_44830 fix_read_error fndecl 4-3 44830 &enable_so_vlan_tag_be_rx_compl_info_44830
++enable_so_snprint_stack_trace_fndecl_44832 snprint_stack_trace fndecl 0 44832 NULL
+enable_so_dequeue_event_fndecl_44835 dequeue_event fndecl 3 44835 NULL
+enable_so_name_len_exofs_dir_entry_44838 name_len exofs_dir_entry 0 44838 NULL
+enable_so_xt_compat_match_offset_fndecl_44840 xt_compat_match_offset fndecl 0 44840 NULL nohasharray
@@ -200228,15 +200832,16 @@ index 0000000..56d8f55
+enable_so_eeprom_size_il_cfg_44998 eeprom_size il_cfg 0 44998 &enable_so_host_int_set_join_req_fndecl_44998
+enable_so_ocfs2_list_xattr_tree_rec_fndecl_45001 ocfs2_list_xattr_tree_rec fndecl 3 45001 NULL
+enable_so_prism54_wpa_bss_ie_get_fndecl_45006 prism54_wpa_bss_ie_get fndecl 0 45006 NULL
++enable_so_mlx5e_redirect_rqt_fndecl_45007 mlx5e_redirect_rqt fndecl 3 45007 NULL
+enable_so_bnx2fc_initiate_els_fndecl_45008 bnx2fc_initiate_els fndecl 4 45008 NULL
+enable_so_video_usercopy_fndecl_45012 video_usercopy fndecl 2 45012 NULL
+enable_so_size_e820entry_45018 size e820entry 0 45018 NULL
+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_write_file_dfs_fndecl_45047 write_file_dfs fndecl 3 45047 NULL
+enable_so_alloc_upcall_fndecl_45049 alloc_upcall fndecl 2 45049 NULL nohasharray
+enable_so_ib_uverbs_rereg_mr_fndecl_45049 ib_uverbs_rereg_mr fndecl 4 45049 &enable_so_alloc_upcall_fndecl_45049
+enable_so_hs_extra_bytes_cfs_hash_45050 hs_extra_bytes cfs_hash 0 45050 NULL
@@ -200248,8 +200853,7 @@ index 0000000..56d8f55
+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 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_unmap_mapping_range_vma_fndecl_45084 unmap_mapping_range_vma fndecl 2-3 45084 NULL
+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
@@ -200268,6 +200872,7 @@ index 0000000..56d8f55
+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
++enable_so_rpc_max_bc_payload_fndecl_45131 rpc_max_bc_payload fndecl 0 45131 NULL
+enable_so_img_x_zoran_jpg_settings_45135 img_x zoran_jpg_settings 0 45135 NULL
+enable_so_offset_mlx4_clock_params_45137 offset mlx4_clock_params 0 45137 NULL
+enable_so_specified_table_size_vardecl_45152 specified_table_size vardecl 0 45152 NULL
@@ -200441,7 +201046,8 @@ index 0000000..56d8f55
+enable_so_sys_add_key_fndecl_45691 sys_add_key fndecl 4 45691 NULL nohasharray
+enable_so_nvme_trans_copy_to_user_fndecl_45691 nvme_trans_copy_to_user fndecl 3 45691 &enable_so_sys_add_key_fndecl_45691
+enable_so_endpt_ubifs_unclean_leb_45692 endpt ubifs_unclean_leb 0 45692 NULL nohasharray
-+enable_so_hd_end_request_cur_fndecl_45692 hd_end_request_cur fndecl 1 45692 &enable_so_endpt_ubifs_unclean_leb_45692
++enable_so_hd_end_request_cur_fndecl_45692 hd_end_request_cur fndecl 1 45692 &enable_so_endpt_ubifs_unclean_leb_45692 nohasharray
++enable_so_iommu_dma_alloc_fndecl_45692 iommu_dma_alloc fndecl 2 45692 &enable_so_hd_end_request_cur_fndecl_45692
+enable_so___netdev_adjacent_dev_insert_fndecl_45697 __netdev_adjacent_dev_insert fndecl 0 45697 NULL
+enable_so_write_file_spectral_short_repeat_fndecl_45700 write_file_spectral_short_repeat fndecl 3 45700 NULL
+enable_so_shift_badblocks_45703 shift badblocks 0 45703 NULL
@@ -200518,6 +201124,7 @@ index 0000000..56d8f55
+enable_so_vce_v1_0_bo_size_fndecl_45909 vce_v1_0_bo_size fndecl 0 45909 NULL
+enable_so_bg_itable_unused_hi_ext4_group_desc_45918 bg_itable_unused_hi ext4_group_desc 0 45918 NULL
+enable_so_alloc_sglist_fndecl_45919 alloc_sglist fndecl 3-2-1 45919 NULL
++enable_so_lpfc_idiag_queacc_write_fndecl_45920 lpfc_idiag_queacc_write fndecl 3 45920 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
@@ -200658,6 +201265,7 @@ index 0000000..56d8f55
+enable_so_recently_deleted_fndecl_46346 recently_deleted fndecl 3 46346 NULL
+enable_so_zoran_v4l_set_format_fndecl_46347 zoran_v4l_set_format fndecl 2-3 46347 NULL
+enable_so_fc_frame_alloc_fill_fndecl_46353 fc_frame_alloc_fill fndecl 2 46353 NULL
++enable_so___qsfp_debugfs_write_fndecl_46356 __qsfp_debugfs_write fndecl 3 46356 NULL
+enable_so_dvb_ep_isoc_em28xx_46357 dvb_ep_isoc em28xx 0 46357 NULL
+enable_so_shadow_image_fndecl_46361 shadow_image fndecl 3 46361 NULL
+enable_so_debilen_av7110_46363 debilen av7110 0 46363 NULL
@@ -200685,6 +201293,7 @@ index 0000000..56d8f55
+enable_so_btrfsic_process_superblock_dev_mirror_fndecl_46444 btrfsic_process_superblock_dev_mirror fndecl 4 46444 NULL nohasharray
+enable_so_iblock_execute_unmap_fndecl_46444 iblock_execute_unmap fndecl 3-2 46444 &enable_so_btrfsic_process_superblock_dev_mirror_fndecl_46444
+enable_so_C_SYSC_get_mempolicy_fndecl_46447 C_SYSC_get_mempolicy fndecl 3 46447 NULL
++enable_so__iwl_dbgfs_bcast_filters_write_fndecl_46448 _iwl_dbgfs_bcast_filters_write fndecl 3 46448 NULL
+enable_so_fb_base_phys_mb862xxfb_par_46449 fb_base_phys mb862xxfb_par 0 46449 NULL
+enable_so_sglen_usbtest_param_32_46451 sglen usbtest_param_32 0 46451 NULL
+enable_so_untranslate_fndecl_46453 untranslate fndecl 3 46453 NULL
@@ -200743,6 +201352,7 @@ index 0000000..56d8f55
+enable_so_cfpkt_extr_head_fndecl_46598 cfpkt_extr_head fndecl 3 46598 NULL
+enable_so_len_ext4_str_46600 len ext4_str 0 46600 NULL
+enable_so_cma_init_reserved_mem_fndecl_46602 cma_init_reserved_mem fndecl 3-2 46602 NULL
++enable_so_nfp_net_msix_alloc_fndecl_46607 nfp_net_msix_alloc fndecl 0 46607 NULL
+enable_so_init_state_fndecl_46614 init_state fndecl 2 46614 NULL
+enable_so_pci_scan_bridge_fndecl_46615 pci_scan_bridge fndecl 3-0 46615 NULL nohasharray
+enable_so_jmb38x_ms_count_slots_fndecl_46615 jmb38x_ms_count_slots fndecl 0 46615 &enable_so_pci_scan_bridge_fndecl_46615
@@ -200789,7 +201399,6 @@ index 0000000..56d8f55
+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
@@ -200797,6 +201406,7 @@ index 0000000..56d8f55
+enable_so_s_bshift_ufs_sb_private_info_46773 s_bshift ufs_sb_private_info 0 46773 NULL nohasharray
+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_acpi_aml_lock_write_fndecl_46777 acpi_aml_lock_write fndecl 0 46777 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 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
@@ -201120,6 +201730,7 @@ index 0000000..56d8f55
+enable_so_max_active_ib_mad_queue_47691 max_active ib_mad_queue 0 47691 &enable_so_cno_nilfs_super_data_47691
+enable_so_virtblk_queue_depth_vardecl_virtio_blk_c_47692 virtblk_queue_depth vardecl_virtio_blk.c 0 47692 NULL
+enable_so_paging64_gpte_to_gfn_lvl_fndecl_47694 paging64_gpte_to_gfn_lvl fndecl 0-2-1 47694 NULL
++enable_so_efi_capsule_write_fndecl_47697 efi_capsule_write fndecl 3 47697 NULL
+enable_so_afavlab_setup_fndecl_47698 afavlab_setup fndecl 4 47698 NULL
+enable_so_gpu_mem_base_vml_par_47703 gpu_mem_base vml_par 0 47703 NULL
+enable_so_xfs_iext_realloc_indirect_fndecl_47704 xfs_iext_realloc_indirect fndecl 2 47704 NULL nohasharray
@@ -201134,6 +201745,7 @@ index 0000000..56d8f55
+enable_so_oxu_init_fndecl_47714 oxu_init fndecl 3-2 47714 NULL
+enable_so_tegra_sflash_start_transfer_one_fndecl_47723 tegra_sflash_start_transfer_one fndecl 0 47723 NULL
+enable_so_max_size_ttm_pool_opts_47726 max_size ttm_pool_opts 0 47726 NULL
++enable_so_batadv_send_tt_request_fndecl_47727 batadv_send_tt_request fndecl 5 47727 NULL
+enable_so_bdev_stack_limits_fndecl_47732 bdev_stack_limits fndecl 3 47732 NULL
+enable_so_copy_nocow_pages_for_inode_fndecl_47736 copy_nocow_pages_for_inode fndecl 2 47736 NULL
+enable_so_geneve_build_skb_fndecl_47741 geneve_build_skb fndecl 5 47741 NULL nohasharray
@@ -201225,6 +201837,8 @@ index 0000000..56d8f55
+enable_so_size_nfs_fh_48014 size nfs_fh 0 48014 NULL
+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_drm_malloc_gfp_fndecl_48018 drm_malloc_gfp fndecl 1-2 48018 NULL
++enable_so_lpfc_idiag_baracc_write_fndecl_48021 lpfc_idiag_baracc_write fndecl 3 48021 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
@@ -201313,6 +201927,7 @@ index 0000000..56d8f55
+enable_so_ci_flags_f2fs_crypt_info_48318 ci_flags f2fs_crypt_info 0 48318 NULL
+enable_so_ngroups_group_info_48320 ngroups group_info 0 48320 NULL
+enable_so_pin_down_extent_fndecl_48324 pin_down_extent fndecl 4-3 48324 NULL
++enable_so__iwl_dbgfs_lqm_send_cmd_write_fndecl_48326 _iwl_dbgfs_lqm_send_cmd_write fndecl 3 48326 NULL
+enable_so_acpi_efi_48328 acpi efi 0 48328 NULL nohasharray
+enable_so_btn_rec_size_cyttsp4_sysinfo_ofs_48328 btn_rec_size cyttsp4_sysinfo_ofs 0 48328 &enable_so_acpi_efi_48328
+enable_so_vga_scan_lines_vardecl_vgacon_c_48330 vga_scan_lines vardecl_vgacon.c 0 48330 NULL
@@ -201350,7 +201965,8 @@ index 0000000..56d8f55
+enable_so_tty_register_device_attr_fndecl_48438 tty_register_device_attr fndecl 2 48438 NULL
+enable_so_natids_tid_info_48439 natids tid_info 0 48439 NULL
+enable_so_bzImage64_load_fndecl_48447 bzImage64_load fndecl 5-7 48447 NULL
-+enable_so_compat_keyctl_instantiate_key_iov_fndecl_48452 compat_keyctl_instantiate_key_iov fndecl 3 48452 NULL
++enable_so_compat_keyctl_instantiate_key_iov_fndecl_48452 compat_keyctl_instantiate_key_iov fndecl 3 48452 NULL nohasharray
++enable_so_alloc_ftrace_hash_fndecl_48452 alloc_ftrace_hash fndecl 1 48452 &enable_so_compat_keyctl_instantiate_key_iov_fndecl_48452
+enable_so_read_file_eeprom_fndecl_48455 read_file_eeprom fndecl 3 48455 NULL
+enable_so_dp_out_buf_len_digi_port_48457 dp_out_buf_len digi_port 0 48457 NULL nohasharray
+enable_so_xen_align_and_add_e820_region_fndecl_48457 xen_align_and_add_e820_region fndecl 2-1 48457 &enable_so_dp_out_buf_len_digi_port_48457 nohasharray
@@ -201370,7 +201986,8 @@ index 0000000..56d8f55
+enable_so_addidata_apci7800_setup_fndecl_48487 addidata_apci7800_setup fndecl 4 48487 &enable_so___origin_write_fndecl_48487
+enable_so_sisusb_clear_vram_fndecl_48489 sisusb_clear_vram fndecl 2-3 48489 NULL
+enable_so_l_len_ocfs2_space_resv_48490 l_len ocfs2_space_resv 0 48490 NULL
-+enable_so_ydepth_sh_veu_format_48498 ydepth sh_veu_format 0 48498 NULL
++enable_so_ydepth_sh_veu_format_48498 ydepth sh_veu_format 0 48498 NULL nohasharray
++enable_so_rss_key_write_fndecl_48498 rss_key_write fndecl 3 48498 &enable_so_ydepth_sh_veu_format_48498
+enable_so_ping_v6_sendmsg_fndecl_48499 ping_v6_sendmsg fndecl 3 48499 NULL
+enable_so_encode_filename_fndecl_48501 encode_filename fndecl 3 48501 NULL
+enable_so_len_cfg80211_bss_ies_48503 len cfg80211_bss_ies 0 48503 NULL
@@ -201381,7 +201998,7 @@ index 0000000..56d8f55
+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_fscrypt_fname_encrypted_size_fndecl_48527 fscrypt_fname_encrypted_size fndecl 0 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
@@ -201414,7 +202031,6 @@ index 0000000..56d8f55
+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
@@ -201522,7 +202138,9 @@ index 0000000..56d8f55
+enable_so_memblock_clear_hotplug_fndecl_48883 memblock_clear_hotplug fndecl 2-1 48883 &enable_so_diva_init_dma_map_fndecl_48883
+enable_so_cl_in_max_entry_size_mvumi_hs_page1_48890 cl_in_max_entry_size mvumi_hs_page1 0 48890 NULL nohasharray
+enable_so_bylength_atto_vda_ae_hdr_48890 bylength atto_vda_ae_hdr 0 48890 &enable_so_cl_in_max_entry_size_mvumi_hs_page1_48890
++enable_so_radeon_ttm_gtt_read_fndecl_48900 radeon_ttm_gtt_read fndecl 3 48900 NULL
+enable_so_nr_buffers_drm_nouveau_gem_pushbuf_48902 nr_buffers drm_nouveau_gem_pushbuf 0 48902 NULL
++enable_so_nr_addr_filters_pmu_48905 nr_addr_filters pmu 0 48905 NULL
+enable_so_RPyLen_hfs_cat_file_48906 RPyLen hfs_cat_file 0 48906 NULL
+enable_so_offset_scatterlist_48908 offset scatterlist 0 48908 NULL nohasharray
+enable_so_max_devices_support_mvumi_hs_page1_48908 max_devices_support mvumi_hs_page1 0 48908 &enable_so_offset_scatterlist_48908
@@ -201614,7 +202232,8 @@ index 0000000..56d8f55
+enable_so_tx_tr_cfv_info_49171 tx_tr cfv_info 0 49171 NULL
+enable_so_ipr_alloc_ucode_buffer_fndecl_49172 ipr_alloc_ucode_buffer fndecl 1 49172 NULL
+enable_so_guc_fw_size_intel_guc_fw_49177 guc_fw_size intel_guc_fw 0 49177 NULL
-+enable_so_nilfs_sufile_do_cancel_free_fndecl_49183 nilfs_sufile_do_cancel_free fndecl 2 49183 NULL
++enable_so_nilfs_sufile_do_cancel_free_fndecl_49183 nilfs_sufile_do_cancel_free fndecl 2 49183 NULL nohasharray
++enable_so_allocate_probes_fndecl_49183 allocate_probes fndecl 1 49183 &enable_so_nilfs_sufile_do_cancel_free_fndecl_49183
+enable_so_s_last_ino_logfs_super_49185 s_last_ino logfs_super 0 49185 NULL
+enable_so_page_size_nvme_ctrl_49190 page_size nvme_ctrl 0 49190 NULL
+enable_so_len_fb_cmap_user_49195 len fb_cmap_user 0 49195 NULL
@@ -201777,8 +202396,10 @@ index 0000000..56d8f55
+enable_so_clk_core_get_rate_nolock_fndecl_49685 clk_core_get_rate_nolock fndecl 0 49685 NULL
+enable_so_subsampling_s5p_jpeg_fmt_49688 subsampling s5p_jpeg_fmt 0 49688 NULL nohasharray
+enable_so___seq_open_private_fndecl_49688 __seq_open_private fndecl 3 49688 &enable_so_subsampling_s5p_jpeg_fmt_49688
++enable_so_batadv_iv_ogm_drop_bcast_own_entry_fndecl_49690 batadv_iv_ogm_drop_bcast_own_entry fndecl 2 49690 NULL
+enable_so_report_size_iowarrior_49692 report_size iowarrior 0 49692 NULL nohasharray
+enable_so_set_extent_bit_fndecl_49692 set_extent_bit fndecl 3-2 49692 &enable_so_report_size_iowarrior_49692
++enable_so_pnode_uv_gam_range_entry_49695 pnode uv_gam_range_entry 0 49695 NULL
+enable_so_security_inode_listxattr_fndecl_49699 security_inode_listxattr fndecl 0 49699 NULL
+enable_so_s_segshift_logfs_super_49707 s_segshift logfs_super 0 49707 NULL
+enable_so_pg_write_fndecl_49709 pg_write fndecl 3 49709 NULL
@@ -201808,6 +202429,7 @@ index 0000000..56d8f55
+enable_so_seeks_shrinker_49793 seeks shrinker 0 49793 NULL
+enable_so_nilfs_mdt_init_fndecl_49794 nilfs_mdt_init fndecl 3 49794 NULL
+enable_so_outlen_mimd_49796 outlen mimd 0 49796 NULL
++enable_so_write_file_wow_fndecl_49799 write_file_wow fndecl 3 49799 NULL
+enable_so_substream_alloc_pages_fndecl_49800 substream_alloc_pages fndecl 3 49800 NULL
+enable_so_n_mmc_ies_whc_49802 n_mmc_ies whc 0 49802 NULL
+enable_so_ocfs2_zero_partial_clusters_fndecl_49803 ocfs2_zero_partial_clusters fndecl 2-3 49803 NULL
@@ -201866,8 +202488,7 @@ index 0000000..56d8f55
+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 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_tty_write_room_fndecl_49980 tty_write_room fndecl 0 49980 &enable_so_subtract_range_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
@@ -201965,6 +202586,7 @@ index 0000000..56d8f55
+enable_so_insert_reserved_file_extent_fndecl_50316 insert_reserved_file_extent fndecl 6-3-7 50316 NULL
+enable_so___cfg80211_connect_result_fndecl_50317 __cfg80211_connect_result fndecl 4-6 50317 NULL nohasharray
+enable_so_fs_cgfsize_efs_super_50317 fs_cgfsize efs_super 0 50317 &enable_so___cfg80211_connect_result_fndecl_50317
++enable_so__iwl_dbgfs_pm_params_write_fndecl_50318 _iwl_dbgfs_pm_params_write fndecl 3 50318 NULL
+enable_so_scif_rma_copy_fndecl_50320 scif_rma_copy fndecl 2-5-4-3 50320 NULL
+enable_so_rbytes_ceph_mds_reply_inode_50321 rbytes ceph_mds_reply_inode 0 50321 NULL
+enable_so_VST_kyrofb_info_50324 VST kyrofb_info 0 50324 NULL
@@ -201998,6 +202620,7 @@ index 0000000..56d8f55
+enable_so_nilfs_gccache_submit_read_data_fndecl_50434 nilfs_gccache_submit_read_data fndecl 3-4 50434 NULL
+enable_so_pkt_size_asender_cmd_50437 pkt_size asender_cmd 0 50437 NULL
+enable_so_sbp_count_se_tpg_luns_fndecl_50444 sbp_count_se_tpg_luns fndecl 0 50444 NULL
++enable_so_il_dbgfs_sram_write_fndecl_50445 il_dbgfs_sram_write fndecl 3 50445 NULL
+enable_so_nfsd4_encode_fattr_to_buf_fndecl_50449 nfsd4_encode_fattr_to_buf fndecl 2 50449 NULL nohasharray
+enable_so_nr_phys_segments_request_50449 nr_phys_segments request 0 50449 &enable_so_nfsd4_encode_fattr_to_buf_fndecl_50449
+enable_so_nfsd_drc_mem_used_vardecl_50456 nfsd_drc_mem_used vardecl 0 50456 NULL
@@ -202012,6 +202635,7 @@ index 0000000..56d8f55
+enable_so_snd_sbmixer_add_ctl_fndecl_50491 snd_sbmixer_add_ctl fndecl 5 50491 NULL
+enable_so_max_pages_nilfs_write_info_50494 max_pages nilfs_write_info 0 50494 NULL
+enable_so_udf_new_block_fndecl_50500 udf_new_block fndecl 0 50500 NULL
++enable_so_lpfc_idiag_extacc_write_fndecl_50501 lpfc_idiag_extacc_write fndecl 3 50501 NULL
+enable_so_bio_clone_range_fndecl_50502 bio_clone_range fndecl 2-3 50502 NULL
+enable_so_mwifiex_read_data_sync_fndecl_50504 mwifiex_read_data_sync fndecl 3 50504 NULL
+enable_so_readahead_tree_block_fndecl_50505 readahead_tree_block fndecl 2 50505 NULL
@@ -202065,7 +202689,8 @@ index 0000000..56d8f55
+enable_so_pvid_net_bridge_vlan_group_50651 pvid net_bridge_vlan_group 0 50651 NULL
+enable_so_xor_sources_dmatest_params_50653 xor_sources dmatest_params 0 50653 NULL
+enable_so_recalc_rate_clk_ops_50655 recalc_rate clk_ops 0 50655 NULL
-+enable_so_io_size_tulip_chip_table_50656 io_size tulip_chip_table 0 50656 NULL
++enable_so_io_size_tulip_chip_table_50656 io_size tulip_chip_table 0 50656 NULL nohasharray
++enable_so_qsfp2_debugfs_write_fndecl_50656 qsfp2_debugfs_write fndecl 3 50656 &enable_so_io_size_tulip_chip_table_50656
+enable_so_proc_coredump_filter_read_fndecl_50658 proc_coredump_filter_read fndecl 3 50658 NULL
+enable_so_ucNumEntries__ATOM_Tonga_SCLK_Dependency_Table_50666 ucNumEntries _ATOM_Tonga_SCLK_Dependency_Table 0 50666 NULL
+enable_so_da9150_i2c_write_device_fndecl_50670 da9150_i2c_write_device fndecl 3 50670 NULL
@@ -202082,6 +202707,7 @@ index 0000000..56d8f55
+enable_so_rxkad_secure_packet_encrypt_fndecl_50687 rxkad_secure_packet_encrypt fndecl 3 50687 NULL nohasharray
+enable_so_hv_mem_hot_add_fndecl_50687 hv_mem_hot_add fndecl 1 50687 &enable_so_rxkad_secure_packet_encrypt_fndecl_50687
+enable_so_dm_bm_read_try_lock_fndecl_50688 dm_bm_read_try_lock fndecl 2-0 50688 NULL
++enable_so_ftrace_pid_write_fndecl_50701 ftrace_pid_write fndecl 3 50701 NULL
+enable_so___find_rev_next_bit_fndecl_50712 __find_rev_next_bit fndecl 0-3-2 50712 NULL
+enable_so_back_xfs_da3_icnode_hdr_50715 back xfs_da3_icnode_hdr 0 50715 NULL
+enable_so_sc18is602_wait_ready_fndecl_50717 sc18is602_wait_ready fndecl 0 50717 NULL
@@ -202149,7 +202775,6 @@ index 0000000..56d8f55
+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
@@ -202189,10 +202814,10 @@ index 0000000..56d8f55
+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
++enable_so_soft_pp_table_size_pp_hwmgr_51014 soft_pp_table_size pp_hwmgr 0 51014 NULL
+enable_so_room_ceph_pagelist_51016 room ceph_pagelist 0 51016 NULL
+enable_so_sg_count_realtek_pci_sdmmc_51022 sg_count realtek_pci_sdmmc 0 51022 NULL
+enable_so_num_of_queues_il_cfg_51023 num_of_queues il_cfg 0 51023 NULL
@@ -202262,6 +202887,7 @@ index 0000000..56d8f55
+enable_so_mt9v032_calc_ratio_fndecl_51219 mt9v032_calc_ratio fndecl 0 51219 NULL
+enable_so_vsi_oltext_vxfs_sb_info_51222 vsi_oltext vxfs_sb_info 0 51222 NULL
+enable_so_mem_cgroup_count_precharge_pte_range_fndecl_51229 mem_cgroup_count_precharge_pte_range fndecl 2 51229 NULL
++enable_so_rt2x00debug_write_rf_fndecl_51232 rt2x00debug_write_rf fndecl 3 51232 NULL
+enable_so_stb0899_read_regs_fndecl_51234 stb0899_read_regs fndecl 4 51234 NULL nohasharray
+enable_so_pte_entry_mm_walk_51234 pte_entry mm_walk 0 51234 &enable_so_stb0899_read_regs_fndecl_51234
+enable_so_proc_set_size_fndecl_51237 proc_set_size fndecl 2 51237 NULL
@@ -202348,6 +202974,7 @@ index 0000000..56d8f55
+enable_so_count_atl1_tpd_ring_51510 count atl1_tpd_ring 0 51510 NULL
+enable_so_pkt_alloc_packet_data_fndecl_51515 pkt_alloc_packet_data fndecl 1 51515 NULL nohasharray
+enable_so__rtw_malloc_fndecl_51515 _rtw_malloc fndecl 1 51515 &enable_so_pkt_alloc_packet_data_fndecl_51515
++enable_so_nfp_net_rx_ring_alloc_fndecl_51524 nfp_net_rx_ring_alloc fndecl 3 51524 NULL
+enable_so_size_fb_pixmap_51528 size fb_pixmap 0 51528 NULL
+enable_so_index_v4l2_subdev_frame_interval_enum_51537 index v4l2_subdev_frame_interval_enum 0 51537 NULL
+enable_so_mft_no__ntfs_inode_51541 mft_no _ntfs_inode 0 51541 NULL
@@ -202389,7 +203016,8 @@ index 0000000..56d8f55
+enable_so_cifs_send_async_read_fndecl_51630 cifs_send_async_read fndecl 2 51630 NULL
+enable_so_m25p80_read_fndecl_51631 m25p80_read fndecl 3 51631 NULL
+enable_so_nodesize_btrfs_root_51633 nodesize btrfs_root 0 51633 NULL nohasharray
-+enable_so_wil_vring_init_bcast_fndecl_51633 wil_vring_init_bcast fndecl 3 51633 &enable_so_nodesize_btrfs_root_51633
++enable_so_wil_vring_init_bcast_fndecl_51633 wil_vring_init_bcast fndecl 3 51633 &enable_so_nodesize_btrfs_root_51633 nohasharray
++enable_so__iwl_dbgfs_fw_dbg_conf_write_fndecl_51633 _iwl_dbgfs_fw_dbg_conf_write fndecl 3 51633 &enable_so_wil_vring_init_bcast_fndecl_51633
+enable_so_SyS_llistxattr_fndecl_51635 SyS_llistxattr fndecl 3 51635 NULL
+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
@@ -202397,6 +203025,7 @@ index 0000000..56d8f55
+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_ath10k_mem_value_read_fndecl_51648 ath10k_mem_value_read fndecl 3 51648 NULL
+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 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
@@ -202477,6 +203106,7 @@ index 0000000..56d8f55
+enable_so_MaxFrameSize_s_smt_os_51875 MaxFrameSize s_smt_os 0 51875 NULL
+enable_so_vbi_height_em28xx_v4l2_51876 vbi_height em28xx_v4l2 0 51876 NULL
+enable_so_lright_ext4_allocation_request_51877 lright ext4_allocation_request 0 51877 NULL
++enable_so_direct_entry_fndecl_51879 direct_entry fndecl 3 51879 NULL
+enable_so_compat_udp_setsockopt_fndecl_51883 compat_udp_setsockopt fndecl 5 51883 NULL
+enable_so_skb_headroom_port100_51893 skb_headroom port100 0 51893 NULL
+enable_so_sys_select_fndecl_51896 sys_select fndecl 1 51896 NULL
@@ -202545,6 +203175,7 @@ index 0000000..56d8f55
+enable_so_btrfs_next_old_leaf_fndecl_52050 btrfs_next_old_leaf fndecl 0 52050 NULL nohasharray
+enable_so_section_size_nvsp_1_message_send_send_buffer_complete_52050 section_size nvsp_1_message_send_send_buffer_complete 0 52050 &enable_so_btrfs_next_old_leaf_fndecl_52050
+enable_so_cxgb_change_mtu_fndecl_52055 cxgb_change_mtu fndecl 2 52055 NULL
++enable_so__iwl_dbgfs_scan_ant_rxchain_write_fndecl_52060 _iwl_dbgfs_scan_ant_rxchain_write fndecl 3 52060 NULL
+enable_so_scif_register_fndecl_52065 scif_register fndecl 3 52065 NULL
+enable_so_event_rx_mismatch_read_fndecl_52069 event_rx_mismatch_read fndecl 3 52069 NULL
+enable_so_lpfc_bsg_copy_data_fndecl_52084 lpfc_bsg_copy_data fndecl 0-3 52084 NULL
@@ -202644,6 +203275,7 @@ index 0000000..56d8f55
+enable_so___do_replace_fndecl_52344 __do_replace fndecl 5 52344 NULL
+enable_so_xpc_connect_fndecl_52346 xpc_connect fndecl 5 52346 NULL
+enable_so_mac_header_sk_buff_52356 mac_header sk_buff 0 52356 NULL
++enable_so__iwl_dbgfs_fw_restart_write_fndecl_52357 _iwl_dbgfs_fw_restart_write fndecl 3 52357 NULL
+enable_so_pipe_src_h_intel_crtc_state_52358 pipe_src_h intel_crtc_state 0 52358 NULL nohasharray
+enable_so_blk_queue_max_hw_sectors_fndecl_52358 blk_queue_max_hw_sectors fndecl 2 52358 &enable_so_pipe_src_h_intel_crtc_state_52358 nohasharray
+enable_so_rtl_read_byte_fndecl_52358 rtl_read_byte fndecl 0 52358 &enable_so_blk_queue_max_hw_sectors_fndecl_52358
@@ -202661,6 +203293,7 @@ index 0000000..56d8f55
+enable_so_ath6kl_wmi_set_ie_cmd_fndecl_52383 ath6kl_wmi_set_ie_cmd fndecl 6-2 52383 NULL nohasharray
+enable_so_sg_pgoffset_sg_page_iter_52383 sg_pgoffset sg_page_iter 0 52383 &enable_so_ath6kl_wmi_set_ie_cmd_fndecl_52383
+enable_so_error_tbc_exch_mismatch_read_fndecl_52388 error_tbc_exch_mismatch_read fndecl 3 52388 NULL
++enable_so_raw_bufsize_edt_ft5x06_ts_data_52390 raw_bufsize edt_ft5x06_ts_data 0 52390 NULL
+enable_so_jffs2_write_dirent_fndecl_52396 jffs2_write_dirent fndecl 5 52396 NULL
+enable_so_u132_hcd_initial_input_recv_fndecl_52397 u132_hcd_initial_input_recv fndecl 4 52397 NULL
+enable_so_srp_map_idb_fndecl_52402 srp_map_idb fndecl 5-0 52402 NULL
@@ -202727,7 +203360,8 @@ index 0000000..56d8f55
+enable_so_end_logsuper_52574 end logsuper 0 52574 NULL
+enable_so_amdgpu_ttm_tt_set_userptr_fndecl_52575 amdgpu_ttm_tt_set_userptr fndecl 2 52575 NULL nohasharray
+enable_so_data_length_iscsi_r2t_info_52575 data_length iscsi_r2t_info 0 52575 &enable_so_amdgpu_ttm_tt_set_userptr_fndecl_52575
-+enable_so_device_create_groups_vargs_fndecl_52576 device_create_groups_vargs fndecl 3 52576 NULL
++enable_so_device_create_groups_vargs_fndecl_52576 device_create_groups_vargs fndecl 3 52576 NULL nohasharray
++enable_so_il4965_rs_sta_dbgfs_scale_table_write_fndecl_52576 il4965_rs_sta_dbgfs_scale_table_write fndecl 3 52576 &enable_so_device_create_groups_vargs_fndecl_52576
+enable_so___mincore_unmapped_range_fndecl_52595 __mincore_unmapped_range fndecl 1 52595 NULL
+enable_so_xfs_shift_file_space_fndecl_52596 xfs_shift_file_space fndecl 2-3 52596 NULL
+enable_so_cached_dev_init_fndecl_52600 cached_dev_init fndecl 2 52600 NULL
@@ -202769,6 +203403,7 @@ index 0000000..56d8f55
+enable_so_fpHeight_nvidia_par_52691 fpHeight nvidia_par 0 52691 NULL nohasharray
+enable_so_urb_done_max3421_hcd_52691 urb_done max3421_hcd 0 52691 &enable_so_fpHeight_nvidia_par_52691
+enable_so_max_data_link_payload_nfc_hci_dev_52699 max_data_link_payload nfc_hci_dev 0 52699 NULL
++enable_so__iwl_dbgfs_bcast_filters_macs_write_fndecl_52702 _iwl_dbgfs_bcast_filters_macs_write fndecl 3 52702 NULL
+enable_so_count_vfio_pci_hot_reset_52708 count vfio_pci_hot_reset 0 52708 NULL
+enable_so_gen_ie_buf_len_mwifiex_private_52710 gen_ie_buf_len mwifiex_private 0 52710 NULL
+enable_so_s_je_fill_logfs_super_52713 s_je_fill logfs_super 0 52713 NULL
@@ -202862,6 +203497,7 @@ index 0000000..56d8f55
+enable_so_BC_Read_Reg_IsdnCardState_53020 BC_Read_Reg IsdnCardState 0 53020 NULL
+enable_so_bytesused_ivtv_buffer_53021 bytesused ivtv_buffer 0 53021 NULL
+enable_so_tty_insert_flip_string_fixed_flag_fndecl_53031 tty_insert_flip_string_fixed_flag fndecl 4-0 53031 NULL
++enable_so_ni_peertxcredits_lnet_ni_53034 ni_peertxcredits lnet_ni 0 53034 NULL
+enable_so_xfs_filestream_pick_ag_fndecl_53040 xfs_filestream_pick_ag fndecl 2 53040 NULL nohasharray
+enable_so_nports0_adapter_info_53040 nports0 adapter_info 0 53040 &enable_so_xfs_filestream_pick_ag_fndecl_53040
+enable_so_xmit_fifo_size_serial_struct_53048 xmit_fifo_size serial_struct 0 53048 NULL
@@ -202920,6 +203556,8 @@ index 0000000..56d8f55
+enable_so_xoffset_fb_var_screeninfo_53153 xoffset fb_var_screeninfo 0 53153 NULL
+enable_so_fat_cont_expand_fndecl_53155 fat_cont_expand fndecl 2 53155 NULL
+enable_so_sb_blocksize_xfs_sb_53160 sb_blocksize xfs_sb 0 53160 NULL
++enable_so_lpfc_debugfs_max_disc_trc_vardecl_lpfc_debugfs_c_53169 lpfc_debugfs_max_disc_trc vardecl_lpfc_debugfs.c 0 53169 NULL
++enable_so_num_tx_rings_nfp_net_53170 num_tx_rings nfp_net 0 53170 NULL
+enable_so_buf_size_mwifiex_event_scan_result_53175 buf_size mwifiex_event_scan_result 0 53175 NULL
+enable_so_tegra_spi_start_tx_dma_fndecl_53177 tegra_spi_start_tx_dma fndecl 0-2 53177 NULL
+enable_so_offset_page_frag_53180 offset page_frag 0 53180 NULL
@@ -203010,6 +203648,7 @@ index 0000000..56d8f55
+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
+enable_so_rxHeader3_edgeport_serial_53418 rxHeader3 edgeport_serial 0 53418 &enable_so_vlan_dev_set_egress_priority_fndecl_53418
++enable_so_codec_reg_read_file_fndecl_53419 codec_reg_read_file fndecl 3 53419 NULL
+enable_so_expand_stack_fndecl_53426 expand_stack fndecl 2 53426 NULL nohasharray
+enable_so_nbits_nvmem_cell_info_53426 nbits nvmem_cell_info 0 53426 &enable_so_expand_stack_fndecl_53426
+enable_so_compat_sys_mbind_fndecl_53427 compat_sys_mbind fndecl 2-1-5 53427 NULL nohasharray
@@ -203219,7 +203858,8 @@ index 0000000..56d8f55
+enable_so_cfpkt_add_head_fndecl_53990 cfpkt_add_head fndecl 3 53990 &enable_so_hfsplus_create_cat_fndecl_53990
+enable_so_cm_write_fndecl_53993 cm_write fndecl 3 53993 NULL
+enable_so_btrfs_init_new_buffer_fndecl_53996 btrfs_init_new_buffer fndecl 3 53996 NULL
-+enable_so_size_drbd_interval_54002 size drbd_interval 0 54002 NULL
++enable_so_size_drbd_interval_54002 size drbd_interval 0 54002 NULL nohasharray
++enable_so_int_hardware_entry_fndecl_54002 int_hardware_entry fndecl 3 54002 &enable_so_size_drbd_interval_54002
+enable_so_ax88179_change_mtu_fndecl_54007 ax88179_change_mtu fndecl 2 54007 NULL
+enable_so_nonstatic_find_io_fndecl_54015 nonstatic_find_io fndecl 4 54015 NULL
+enable_so_submit_stripe_bio_fndecl_54016 submit_stripe_bio fndecl 4 54016 NULL
@@ -203229,6 +203869,7 @@ index 0000000..56d8f55
+enable_so_s_nextid_exofs_sb_info_54042 s_nextid exofs_sb_info 0 54042 NULL
+enable_so_sierra_write_fndecl_54049 sierra_write fndecl 4 54049 NULL
+enable_so_sci_probe_single_fndecl_54053 sci_probe_single fndecl 2 54053 NULL
++enable_so__iwl_dbgfs_uapsd_misbehaving_write_fndecl_54054 _iwl_dbgfs_uapsd_misbehaving_write fndecl 3 54054 NULL
+enable_so_storvsc_ringbuffer_size_vardecl_storvsc_drv_c_54060 storvsc_ringbuffer_size vardecl_storvsc_drv.c 0 54060 NULL
+enable_so_msb_update_block_fndecl_54063 msb_update_block fndecl 0-4-2 54063 NULL
+enable_so_tunables_read_fndecl_54066 tunables_read fndecl 3 54066 NULL
@@ -203280,7 +203921,8 @@ index 0000000..56d8f55
+enable_so_num_bytes_drm_dp_remote_dpcd_write_54181 num_bytes drm_dp_remote_dpcd_write 0 54181 NULL
+enable_so_len_xfs_alloc_arg_54187 len xfs_alloc_arg 0 54187 NULL
+enable_so_cpu_type_read_fndecl_54191 cpu_type_read fndecl 3 54191 NULL
-+enable_so_nfs_llseek_dir_fndecl_54192 nfs_llseek_dir fndecl 2 54192 NULL
++enable_so_nfs_llseek_dir_fndecl_54192 nfs_llseek_dir fndecl 2 54192 NULL nohasharray
++enable_so__iwl_dbgfs_fw_nmi_write_fndecl_54192 _iwl_dbgfs_fw_nmi_write fndecl 3 54192 &enable_so_nfs_llseek_dir_fndecl_54192
+enable_so_tp_ep_bcm5974_config_54193 tp_ep bcm5974_config 0 54193 NULL
+enable_so_current_speed_ide_drive_s_54197 current_speed ide_drive_s 0 54197 NULL
+enable_so_ipw2100_set_essid_fndecl_54200 ipw2100_set_essid fndecl 3 54200 NULL
@@ -203319,6 +203961,7 @@ index 0000000..56d8f55
+enable_so_key_size_crypt_config_54287 key_size crypt_config 0 54287 NULL
+enable_so_fat_file_fsync_fndecl_54291 fat_file_fsync fndecl 2-3 54291 NULL
+enable_so_thoff_flow_dissector_key_control_54299 thoff flow_dissector_key_control 0 54299 NULL
++enable_so_rss_key_size_i40evf_adapter_54301 rss_key_size i40evf_adapter 0 54301 NULL
+enable_so_ntfs_attr_extend_initialized_fndecl_54303 ntfs_attr_extend_initialized fndecl 2 54303 NULL nohasharray
+enable_so_count_ext4_new_flex_group_data_54303 count ext4_new_flex_group_data 0 54303 &enable_so_ntfs_attr_extend_initialized_fndecl_54303
+enable_so_ceph_osdc_start_request_fndecl_54305 ceph_osdc_start_request fndecl 0 54305 NULL
@@ -203414,6 +204057,7 @@ index 0000000..56d8f55
+enable_so_bandlength_Kiara_table_entry_54541 bandlength Kiara_table_entry 0 54541 &enable_so_v_sync_strt_wid_crtc_54541
+enable_so_s_dev_table_count_exofs_fscb_54542 s_dev_table_count exofs_fscb 0 54542 NULL
+enable_so_dvb_dmxdev_section_callback_fndecl_54550 dvb_dmxdev_section_callback fndecl 2-4 54550 NULL
++enable_so___i2c_debugfs_read_fndecl_54556 __i2c_debugfs_read fndecl 3 54556 NULL
+enable_so_pages_snd_sg_buf_54557 pages snd_sg_buf 0 54557 NULL
+enable_so_interval_exp_blk_integrity_54558 interval_exp blk_integrity 0 54558 NULL
+enable_so_cp_nr_rings_bnxt_54565 cp_nr_rings bnxt 0 54565 NULL
@@ -203514,6 +204158,7 @@ index 0000000..56d8f55
+enable_so_target_count_dm_ioctl_54826 target_count dm_ioctl 0 54826 NULL
+enable_so_last_adv_data_len_discovery_state_54833 last_adv_data_len discovery_state 0 54833 NULL
+enable_so_kernel_readv_fndecl_54834 kernel_readv fndecl 3 54834 NULL
++enable_so_i2c1_debugfs_write_fndecl_54837 i2c1_debugfs_write fndecl 3 54837 NULL
+enable_so_ixgbe_pci_sriov_configure_fndecl_54843 ixgbe_pci_sriov_configure fndecl 2 54843 NULL
+enable_so_reiserfs_readpages_fndecl_54846 reiserfs_readpages fndecl 4 54846 NULL
+enable_so_blkdev_direct_IO_fndecl_54850 blkdev_direct_IO fndecl 3 54850 NULL
@@ -203658,6 +204303,7 @@ index 0000000..56d8f55
+enable_so_readlen_proc_data_55289 readlen proc_data 0 55289 &enable_so_hdrlen_ipv6_rt_hdr_55289
+enable_so_c_can_read_msg_object_fndecl_55291 c_can_read_msg_object fndecl 3 55291 NULL
+enable_so_sq905c_command_fndecl_55293 sq905c_command fndecl 0 55293 NULL
++enable_so_C_SYSC_kexec_load_fndecl_55294 C_SYSC_kexec_load fndecl 2 55294 NULL
+enable_so_regmap_irq_chip_get_base_fndecl_55298 regmap_irq_chip_get_base fndecl 0 55298 NULL
+enable_so_upd_bytes_ubi_volume_55301 upd_bytes ubi_volume 0 55301 NULL
+enable_so_memcg_update_all_caches_fndecl_55303 memcg_update_all_caches fndecl 1 55303 NULL
@@ -203750,8 +204396,7 @@ index 0000000..56d8f55
+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 nohasharray
-+enable_so_x___una_u64_55615 x __una_u64 0 55615 &enable_so_ybpp_camif_fmt_55615
++enable_so_ybpp_camif_fmt_55615 ybpp camif_fmt 0 55615 &enable_so_initial_width_vmw_private_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
@@ -203780,6 +204425,7 @@ index 0000000..56d8f55
+enable_so_fbcon_resize_fndecl_55724 fbcon_resize fndecl 3-2 55724 NULL
+enable_so_kvm_vcpu_gfn_to_page_fndecl_55725 kvm_vcpu_gfn_to_page fndecl 2 55725 NULL
+enable_so_dst_command_fndecl_55728 dst_command fndecl 3 55728 NULL
++enable_so_mpi_from_key_fndecl_55729 mpi_from_key fndecl 0 55729 NULL
+enable_so_vsi_iext_vxfs_sb_info_55734 vsi_iext vxfs_sb_info 0 55734 NULL nohasharray
+enable_so_nilfs_direct_delete_and_convert_fndecl_55734 nilfs_direct_delete_and_convert fndecl 0 55734 &enable_so_vsi_iext_vxfs_sb_info_55734
+enable_so_btrfs_delalloc_reserve_metadata_fndecl_55736 btrfs_delalloc_reserve_metadata fndecl 0 55736 NULL
@@ -203794,7 +204440,8 @@ index 0000000..56d8f55
+enable_so_offset_xfs_bmalloca_55767 offset xfs_bmalloca 0 55767 NULL
+enable_so_s_next_psn_qib_qp_55768 s_next_psn qib_qp 0 55768 NULL
+enable_so_flag_lpfc_dmabufext_55771 flag lpfc_dmabufext 0 55771 NULL
-+enable_so_dump_emit_fndecl_55772 dump_emit fndecl 3 55772 NULL
++enable_so_dump_emit_fndecl_55772 dump_emit fndecl 3 55772 NULL nohasharray
++enable_so_cmd_read_size_wiimote_state_55772 cmd_read_size wiimote_state 0 55772 &enable_so_dump_emit_fndecl_55772
+enable_so_ppp_write_fndecl_55777 ppp_write fndecl 3 55777 NULL
+enable_so_rx_rx_xfr_read_fndecl_55779 rx_rx_xfr_read fndecl 3 55779 NULL
+enable_so_width_cx25821_channel_55782 width cx25821_channel 0 55782 NULL
@@ -203814,6 +204461,7 @@ index 0000000..56d8f55
+enable_so_dr_free_blk_ocfs2_dx_root_block_55848 dr_free_blk ocfs2_dx_root_block 0 55848 NULL
+enable_so_s_segment_usage_size_nilfs_super_block_55851 s_segment_usage_size nilfs_super_block 0 55851 NULL
+enable_so___cfg80211_disconnected_fndecl_55853 __cfg80211_disconnected fndecl 3 55853 NULL
++enable_so_rdma_rw_init_map_wrs_fndecl_55859 rdma_rw_init_map_wrs fndecl 4 55859 NULL
+enable_so_ceph_msgpool_init_fndecl_55860 ceph_msgpool_init fndecl 3-4 55860 NULL nohasharray
+enable_so_cw1200_queue_init_fndecl_55860 cw1200_queue_init fndecl 4 55860 &enable_so_ceph_msgpool_init_fndecl_55860
+enable_so_do_raw_getsockopt_fndecl_55863 do_raw_getsockopt fndecl 0 55863 NULL
@@ -203833,6 +204481,7 @@ index 0000000..56d8f55
+enable_so_ad7280_chain_setup_fndecl_55912 ad7280_chain_setup fndecl 0 55912 NULL
+enable_so_rocker_port_kcalloc_fndecl_55915 rocker_port_kcalloc fndecl 5-4 55915 NULL
+enable_so_isr_fiqs_read_fndecl_55916 isr_fiqs_read fndecl 3 55916 NULL
++enable_so__iwl_dbgfs_tof_enable_write_fndecl_55919 _iwl_dbgfs_tof_enable_write fndecl 3 55919 NULL
+enable_so_mrf24j40_long_regmap_read_fndecl_55922 mrf24j40_long_regmap_read fndecl 3-5 55922 NULL
+enable_so_nf_nat_mangle_udp_packet_fndecl_55926 nf_nat_mangle_udp_packet fndecl 4-6-8 55926 NULL
+enable_so_change_prot_numa_fndecl_55935 change_prot_numa fndecl 3-2 55935 NULL
@@ -203915,6 +204564,7 @@ index 0000000..56d8f55
+enable_so_av7110_vbi_write_fndecl_56131 av7110_vbi_write fndecl 3 56131 &enable_so_size_direct_56131
+enable_so_sl_max_ip_sf_socklist_56140 sl_max ip_sf_socklist 0 56140 NULL
+enable_so_prepare_add_efi_setup_data_fndecl_56147 prepare_add_efi_setup_data fndecl 3-2 56147 NULL
++enable_so__iwl_dbgfs_low_latency_write_fndecl_56153 _iwl_dbgfs_low_latency_write fndecl 3 56153 NULL
+enable_so_reiserfs_resize_fndecl_56154 reiserfs_resize fndecl 2 56154 NULL
+enable_so_i2c_hid_get_raw_report_fndecl_56155 i2c_hid_get_raw_report fndecl 4 56155 NULL
+enable_so_ipx_pktsize_ipxhdr_56157 ipx_pktsize ipxhdr 0 56157 NULL
@@ -203957,6 +204607,7 @@ index 0000000..56d8f55
+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
@@ -204116,6 +204767,7 @@ index 0000000..56d8f55
+enable_so_ib_uverbs_create_cq_fndecl_56793 ib_uverbs_create_cq fndecl 4 56793 NULL
+enable_so_context_id_bnx2fc_rport_56807 context_id bnx2fc_rport 0 56807 NULL nohasharray
+enable_so_state_count_acpi_processor_performance_56807 state_count acpi_processor_performance 0 56807 &enable_so_context_id_bnx2fc_rport_56807
++enable_so_write_file_bt_ant_diversity_fndecl_56808 write_file_bt_ant_diversity fndecl 3 56808 NULL
+enable_so_num_pages_vmci_queue_kern_if_56812 num_pages vmci_queue_kern_if 0 56812 NULL
+enable_so_di_entries_gfs2_dinode_56817 di_entries gfs2_dinode 0 56817 NULL
+enable_so_dm_thin_remove_range_fndecl_56819 dm_thin_remove_range fndecl 0 56819 NULL
@@ -204165,7 +204817,8 @@ index 0000000..56d8f55
+enable_so_xt_compat_target_offset_fndecl_56923 xt_compat_target_offset fndecl 0 56923 &enable_so_ip6_find_1stfragopt_fndecl_56923
+enable_so_usb_gstrings_attach_fndecl_56924 usb_gstrings_attach fndecl 3 56924 NULL
+enable_so_vram_vardecl_nvidia_c_56925 vram vardecl_nvidia.c 0 56925 NULL
-+enable_so_beiscsi_process_async_pdu_fndecl_56929 beiscsi_process_async_pdu fndecl 6 56929 NULL
++enable_so_beiscsi_process_async_pdu_fndecl_56929 beiscsi_process_async_pdu fndecl 6 56929 NULL nohasharray
++enable_so_nrealreaders_vardecl_rcuperf_c_56929 nrealreaders vardecl_rcuperf.c 0 56929 &enable_so_beiscsi_process_async_pdu_fndecl_56929
+enable_so_data_len_ib_mac_iocb_rsp_56930 data_len ib_mac_iocb_rsp 0 56930 NULL
+enable_so_align_buffer_sz_sdhci_host_56931 align_buffer_sz sdhci_host 0 56931 NULL
+enable_so_csize_jffs2_tmp_dnode_info_56933 csize jffs2_tmp_dnode_info 0 56933 NULL
@@ -204226,7 +204879,6 @@ index 0000000..56d8f55
+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
@@ -204299,6 +204951,8 @@ index 0000000..56d8f55
+enable_so_interrupt_in_endpoint_size_ld_usb_57321 interrupt_in_endpoint_size ld_usb 0 57321 NULL
+enable_so_acpi_gsi_to_irq_fndecl_57326 acpi_gsi_to_irq fndecl 1 57326 NULL
+enable_so_fb_read_fndecl_57329 fb_read fndecl 3 57329 NULL
++enable_so_page_bytes_remain_capsule_info_57335 page_bytes_remain capsule_info 0 57335 NULL
++enable_so_musb_test_mode_write_fndecl_57341 musb_test_mode_write fndecl 3 57341 NULL
+enable_so_ext4_expand_extra_isize_ea_fndecl_57344 ext4_expand_extra_isize_ea fndecl 2 57344 NULL
+enable_so_root_hpfs_super_block_57345 root hpfs_super_block 0 57345 NULL
+enable_so_align_nf_ct_ext_type_57348 align nf_ct_ext_type 0 57348 NULL
@@ -204311,8 +204965,7 @@ index 0000000..56d8f55
+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 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_icl_ag_xfs_icreate_log_57387 icl_ag xfs_icreate_log 0 57387 NULL
+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
@@ -204325,6 +204978,7 @@ index 0000000..56d8f55
+enable_so_skb_pull_fndecl_57408 skb_pull fndecl 2 57408 NULL nohasharray
+enable_so_cryptlen_chachapoly_req_ctx_57408 cryptlen chachapoly_req_ctx 0 57408 &enable_so_skb_pull_fndecl_57408
+enable_so_copy_page_from_iter_iovec_fndecl_57409 copy_page_from_iter_iovec fndecl 3 57409 NULL
++enable_so__iwl_dbgfs_bt_tx_prio_write_fndecl_57418 _iwl_dbgfs_bt_tx_prio_write fndecl 3 57418 NULL
+enable_so_numbered_hid_report_enum_57419 numbered hid_report_enum 0 57419 NULL
+enable_so_blkdev_get_block_fndecl_57432 blkdev_get_block fndecl 2 57432 NULL
+enable_so_key_size_ecryptfs_crypt_stat_57436 key_size ecryptfs_crypt_stat 0 57436 NULL
@@ -204336,7 +204990,8 @@ index 0000000..56d8f55
+enable_so_diva_os_copy_to_user_fndecl_57455 diva_os_copy_to_user fndecl 4 57455 NULL
+enable_so_pix_clock_mt9m032_platform_data_57458 pix_clock mt9m032_platform_data 0 57458 NULL
+enable_so_cp_table_size_radeon_rlc_57462 cp_table_size radeon_rlc 0 57462 NULL
-+enable_so_ib_ipath_lkey_table_size_vardecl_57463 ib_ipath_lkey_table_size vardecl 0 57463 NULL
++enable_so_ib_ipath_lkey_table_size_vardecl_57463 ib_ipath_lkey_table_size vardecl 0 57463 NULL nohasharray
++enable_so_wm_coeff_tlv_put_fndecl_57463 wm_coeff_tlv_put fndecl 3 57463 &enable_so_ib_ipath_lkey_table_size_vardecl_57463
+enable_so_r8712_usbctrl_vendorreq_fndecl_57466 r8712_usbctrl_vendorreq fndecl 6 57466 NULL
+enable_so_drbd_bm_capacity_fndecl_57473 drbd_bm_capacity fndecl 0 57473 NULL
+enable_so_hfs_add_extent_fndecl_57475 hfs_add_extent fndecl 4-3 57475 NULL
@@ -204492,6 +205147,7 @@ index 0000000..56d8f55
+enable_so_xdi_copy_to_user_fndecl_57879 xdi_copy_to_user fndecl 4 57879 NULL
+enable_so_max_devices_hpt_iop_request_get_config_57889 max_devices hpt_iop_request_get_config 0 57889 NULL
+enable_so_psn_qib_swqe_57901 psn qib_swqe 0 57901 NULL
++enable_so_exynos_srom_alloc_reg_dump_fndecl_57914 exynos_srom_alloc_reg_dump fndecl 2 57914 NULL
+enable_so_fat_sectors_fat_bios_param_block_57917 fat_sectors fat_bios_param_block 0 57917 NULL
+enable_so_MaxXmitDataSegmentLength_iscsi_conn_ops_57926 MaxXmitDataSegmentLength iscsi_conn_ops 0 57926 NULL
+enable_so_radeon_audio_update_acr_fndecl_57929 radeon_audio_update_acr fndecl 2 57929 NULL
@@ -204570,7 +205226,8 @@ index 0000000..56d8f55
+enable_so_ll_rw_extents_stats_pp_seq_write_fndecl_58136 ll_rw_extents_stats_pp_seq_write fndecl 3 58136 &enable_so_n_bitrates_ieee80211_supported_band_58136
+enable_so_nvif_object_init_fndecl_58137 nvif_object_init fndecl 5 58137 NULL
+enable_so_mtd_read_fndecl_58140 mtd_read fndecl 0 58140 NULL
-+enable_so_pci_alloc_child_bus_fndecl_58142 pci_alloc_child_bus fndecl 3 58142 NULL
++enable_so_pci_alloc_child_bus_fndecl_58142 pci_alloc_child_bus fndecl 3 58142 NULL nohasharray
++enable_so_qsfp2_debugfs_read_fndecl_58142 qsfp2_debugfs_read fndecl 3 58142 &enable_so_pci_alloc_child_bus_fndecl_58142
+enable_so_packet_recvmsg_fndecl_58143 packet_recvmsg fndecl 3 58143 NULL
+enable_so_hr_block_bytes_o2hb_region_58145 hr_block_bytes o2hb_region 0 58145 NULL
+enable_so_security_inode_setattr_fndecl_58146 security_inode_setattr fndecl 0 58146 NULL nohasharray
@@ -204588,6 +205245,7 @@ index 0000000..56d8f55
+enable_so_total_num_uuars_mlx5_ib_alloc_ucontext_req_v2_58191 total_num_uuars mlx5_ib_alloc_ucontext_req_v2 0 58191 NULL
+enable_so_virtfn_remove_fndecl_58193 virtfn_remove fndecl 2 58193 NULL
+enable_so_npages_ttm_page_pool_58200 npages ttm_page_pool 0 58200 NULL
++enable_so_lpfc_idiag_drbacc_write_fndecl_58203 lpfc_idiag_drbacc_write fndecl 3 58203 NULL
+enable_so_o2net_init_msg_fndecl_58204 o2net_init_msg fndecl 2 58204 NULL nohasharray
+enable_so_SyS_lgetxattr_fndecl_58204 SyS_lgetxattr fndecl 4 58204 &enable_so_o2net_init_msg_fndecl_58204
+enable_so_maxOutstanding_AdapterControlBlock_58208 maxOutstanding AdapterControlBlock 0 58208 NULL
@@ -204648,7 +205306,8 @@ index 0000000..56d8f55
+enable_so_window_vardecl_tcp_cdg_c_58396 window vardecl_tcp_cdg.c 0 58396 NULL
+enable_so_hci_prepare_cmd_fndecl_58399 hci_prepare_cmd fndecl 3 58399 NULL
+enable_so_ip_vs_sync_buff_create_v0_fndecl_58401 ip_vs_sync_buff_create_v0 fndecl 2 58401 NULL
-+enable_so_lbs_wrrf_write_fndecl_58409 lbs_wrrf_write fndecl 3 58409 NULL
++enable_so_lbs_wrrf_write_fndecl_58409 lbs_wrrf_write fndecl 3 58409 NULL nohasharray
++enable_so_orangefs_debug_write_fndecl_58409 orangefs_debug_write fndecl 3 58409 &enable_so_lbs_wrrf_write_fndecl_58409
+enable_so_amdtp_stream_init_fndecl_58410 amdtp_stream_init fndecl 7 58410 NULL
+enable_so_remove_raw_fndecl_58413 remove_raw fndecl 4 58413 NULL
+enable_so_vzalloc_fndecl_58414 vzalloc fndecl 1 58414 NULL nohasharray
@@ -204677,6 +205336,7 @@ index 0000000..56d8f55
+enable_so_caif_seqpkt_sendmsg_fndecl_58458 caif_seqpkt_sendmsg fndecl 3 58458 NULL
+enable_so_NumProtectionFields_cfi_pri_intelext_58461 NumProtectionFields cfi_pri_intelext 0 58461 NULL
+enable_so_btrfs_clone_fndecl_58462 btrfs_clone fndecl 5-3-6 58462 NULL
++enable_so_pgsize_bitmap_iommu_domain_58464 pgsize_bitmap iommu_domain 0 58464 NULL
+enable_so_ebcnt_vardecl_torturetest_c_58475 ebcnt vardecl_torturetest.c 0 58475 NULL
+enable_so_newpart_fndecl_58478 newpart fndecl 6-4 58478 NULL
+enable_so_nbchan_capidrv_contr_58481 nbchan capidrv_contr 0 58481 NULL
@@ -204745,6 +205405,7 @@ index 0000000..56d8f55
+enable_so_page10_len_ses_device_58648 page10_len ses_device 0 58648 NULL
+enable_so_mwifiex_alloc_dma_align_buf_fndecl_58656 mwifiex_alloc_dma_align_buf fndecl 1 58656 NULL nohasharray
+enable_so_highest_bit_swap_info_struct_58656 highest_bit swap_info_struct 0 58656 &enable_so_mwifiex_alloc_dma_align_buf_fndecl_58656
++enable_so_cfg80211_connect_bss_fndecl_58657 cfg80211_connect_bss fndecl 7-5 58657 NULL
+enable_so_mxms_headerlen_fndecl_58666 mxms_headerlen fndecl 0 58666 NULL
+enable_so_rx_rx_rts_timeout_read_fndecl_58667 rx_rx_rts_timeout_read fndecl 3 58667 NULL
+enable_so_max_key_len_hfs_btree_58671 max_key_len hfs_btree 0 58671 NULL
@@ -204799,6 +205460,7 @@ index 0000000..56d8f55
+enable_so_f2fs_replace_block_fndecl_58838 f2fs_replace_block fndecl 4 58838 NULL
+enable_so_tx_internal_desc_overflow_read_fndecl_58839 tx_internal_desc_overflow_read fndecl 3 58839 NULL
+enable_so_virtqueue_add_fndecl_58841 virtqueue_add fndecl 3 58841 NULL
++enable_so_kvm_debugfs_num_entries_vardecl_kvm_main_c_58842 kvm_debugfs_num_entries vardecl_kvm_main.c 0 58842 NULL
+enable_so_nr_scratch_dwc3_58852 nr_scratch dwc3 0 58852 NULL
+enable_so_ms_lib_read_extrablock_fndecl_58857 ms_lib_read_extrablock fndecl 4 58857 NULL
+enable_so_ucs2_utf8size_fndecl_58859 ucs2_utf8size fndecl 0 58859 NULL
@@ -204854,7 +205516,6 @@ index 0000000..56d8f55
+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
@@ -204967,6 +205628,7 @@ index 0000000..56d8f55
+enable_so_pcpu_nr_units_vardecl_percpu_c_59323 pcpu_nr_units vardecl_percpu.c 0 59323 NULL
+enable_so_nv_getlen_fndecl_59327 nv_getlen fndecl 0-3 59327 NULL
+enable_so_i2c_inb_fndecl_59328 i2c_inb fndecl 0 59328 NULL
++enable_so_pinconf_dbg_config_write_fndecl_59336 pinconf_dbg_config_write fndecl 3 59336 NULL
+enable_so_stmmac_set_bfsize_fndecl_59337 stmmac_set_bfsize fndecl 0 59337 NULL
+enable_so_raw_sendmsg_fndecl_59341 raw_sendmsg fndecl 3 59341 NULL
+enable_so_affs_iget_fndecl_59342 affs_iget fndecl 2 59342 NULL
@@ -205033,7 +205695,8 @@ index 0000000..56d8f55
+enable_so_length_acpi_pnp_device_id_59493 length acpi_pnp_device_id 0 59493 NULL
+enable_so_vma_to_resize_fndecl_59495 vma_to_resize fndecl 2-3 59495 NULL
+enable_so_rx_ringsz_alx_priv_59496 rx_ringsz alx_priv 0 59496 NULL
-+enable_so_src_addr_width_dma_slave_config_59497 src_addr_width dma_slave_config 0 59497 NULL
++enable_so_src_addr_width_dma_slave_config_59497 src_addr_width dma_slave_config 0 59497 NULL nohasharray
++enable_so_il_dbgfs_clear_traffic_stats_write_fndecl_59497 il_dbgfs_clear_traffic_stats_write fndecl 3 59497 &enable_so_src_addr_width_dma_slave_config_59497
+enable_so_hd29l2_wr_regs_fndecl_59501 hd29l2_wr_regs fndecl 4 59501 NULL nohasharray
+enable_so_pci_frontend_enable_msix_fndecl_59501 pci_frontend_enable_msix fndecl 3 59501 &enable_so_hd29l2_wr_regs_fndecl_59501
+enable_so_lastbuf_for_pio_qib_chip_specific_59509 lastbuf_for_pio qib_chip_specific 0 59509 NULL
@@ -205167,6 +205830,7 @@ index 0000000..56d8f55
+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
@@ -205287,7 +205951,8 @@ index 0000000..56d8f55
+enable_so_length_squashfs_page_actor_60249 length squashfs_page_actor 0 60249 NULL
+enable_so_ah_rf_banks_size_ath5k_hw_60250 ah_rf_banks_size ath5k_hw 0 60250 NULL
+enable_so_dirty_bytes_extent_io_tree_60254 dirty_bytes extent_io_tree 0 60254 NULL
-+enable_so_sector_size_jffs2_sb_info_60255 sector_size jffs2_sb_info 0 60255 NULL
++enable_so_sector_size_jffs2_sb_info_60255 sector_size jffs2_sb_info 0 60255 NULL nohasharray
++enable_so__iwl_dbgfs_tof_range_request_write_fndecl_60255 _iwl_dbgfs_tof_range_request_write fndecl 3 60255 &enable_so_sector_size_jffs2_sb_info_60255
+enable_so_xenvif_change_mtu_fndecl_60258 xenvif_change_mtu fndecl 2 60258 NULL
+enable_so_len_mwifiex_assoc_event_60259 len mwifiex_assoc_event 0 60259 NULL
+enable_so_size_of_priv_dvb_usb_adapter_properties_60261 size_of_priv dvb_usb_adapter_properties 0 60261 NULL
@@ -205311,6 +205976,7 @@ index 0000000..56d8f55
+enable_so_eor_jfs_log_60327 eor jfs_log 0 60327 NULL
+enable_so_rq_addrlen_svc_rqst_60328 rq_addrlen svc_rqst 0 60328 NULL
+enable_so_upper_vardecl_matroxfb_base_c_60329 upper vardecl_matroxfb_base.c 0 60329 NULL
++enable_so_int_hw_irq_en_fndecl_60331 int_hw_irq_en fndecl 3 60331 NULL
+enable_so_bd_add_to_bdi_fndecl_60336 bd_add_to_bdi fndecl 0-2 60336 NULL
+enable_so_buf_size__IOCTL_Command_struct_60338 buf_size _IOCTL_Command_struct 0 60338 NULL
+enable_so_offset_nvkm_mem_60339 offset nvkm_mem 0 60339 NULL
@@ -205341,7 +206007,8 @@ index 0000000..56d8f55
+enable_so_hippi_header_fndecl_60434 hippi_header fndecl 3 60434 NULL
+enable_so___i2c_hid_command_fndecl_60442 __i2c_hid_command fndecl 6-8 60442 NULL
+enable_so_minimum_cx88_ctrl_60444 minimum cx88_ctrl 0 60444 NULL
-+enable_so_digestsize_hash_alg_common_60446 digestsize hash_alg_common 0 60446 NULL
++enable_so_digestsize_hash_alg_common_60446 digestsize hash_alg_common 0 60446 NULL nohasharray
++enable_so_quirk_strict_duplicate_filter_write_fndecl_60446 quirk_strict_duplicate_filter_write fndecl 3 60446 &enable_so_digestsize_hash_alg_common_60446
+enable_so_count_hscx_hw_60448 count hscx_hw 0 60448 NULL
+enable_so_lib80211_tkip_decrypt_fndecl_60450 lib80211_tkip_decrypt fndecl 2 60450 NULL
+enable_so_maxsgentries_ctlr_info_60455 maxsgentries ctlr_info 0 60455 NULL
@@ -205499,7 +206166,8 @@ index 0000000..56d8f55
+enable_so_segments_adv7511_state_edid_60947 segments adv7511_state_edid 0 60947 NULL
+enable_so_ipv6_recv_rxpmtu_fndecl_60949 ipv6_recv_rxpmtu fndecl 3 60949 NULL
+enable_so_efi_memmap_hi_efi_info_60951 efi_memmap_hi efi_info 0 60951 NULL
-+enable_so_audit_make_reply_fndecl_60952 audit_make_reply fndecl 7 60952 NULL
++enable_so_audit_make_reply_fndecl_60952 audit_make_reply fndecl 7 60952 NULL nohasharray
++enable_so_posix_acl_xattr_set_fndecl_60952 posix_acl_xattr_set fndecl 6 60952 &enable_so_audit_make_reply_fndecl_60952
+enable_so_ocfs2_dx_dir_new_cluster_fndecl_60953 ocfs2_dx_dir_new_cluster fndecl 3 60953 NULL
+enable_so_s_partition_root_udf_part_map_60954 s_partition_root udf_part_map 0 60954 NULL
+enable_so_get_rdac_req_fndecl_60969 get_rdac_req fndecl 3 60969 NULL
@@ -205510,6 +206178,7 @@ index 0000000..56d8f55
+enable_so_count_nvif_ioctl_sclass_v0_60980 count nvif_ioctl_sclass_v0 0 60980 &enable_so_isdn_write_fndecl_60980
+enable_so_first_block_migrate_struct_60989 first_block migrate_struct 0 60989 NULL nohasharray
+enable_so_weight_dlm_member_60989 weight dlm_member 0 60989 &enable_so_first_block_migrate_struct_60989
++enable_so_devm_create_dax_dev_fndecl_60990 devm_create_dax_dev fndecl 3 60990 NULL
+enable_so_rtl8152_change_mtu_fndecl_60996 rtl8152_change_mtu fndecl 2 60996 NULL
+enable_so_endp_out_zd1201_61001 endp_out zd1201 0 61001 NULL
+enable_so_ocfs2_xattr_block_find_fndecl_61008 ocfs2_xattr_block_find fndecl 0 61008 NULL
@@ -205559,7 +206228,7 @@ index 0000000..56d8f55
+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_host1x_job_alloc_fndecl_61171 host1x_job_alloc fndecl 4-3-2 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
@@ -205589,13 +206258,13 @@ index 0000000..56d8f55
+enable_so_channels_max_hdmi_spec_61238 channels_max hdmi_spec 0 61238 &enable_so_max_data_pkt_payload_size_nci_rf_intf_activated_ntf_61238
+enable_so_tipc_add_tlv_fndecl_61239 tipc_add_tlv fndecl 4 61239 NULL
+enable_so_hidraw_get_report_fndecl_61242 hidraw_get_report fndecl 3 61242 NULL
-+enable_so_rcar_dmac_prep_dma_cyclic_fndecl_61249 rcar_dmac_prep_dma_cyclic fndecl 4-3 61249 NULL
++enable_so_rcar_dmac_prep_dma_cyclic_fndecl_61249 rcar_dmac_prep_dma_cyclic fndecl 4-3 61249 NULL nohasharray
++enable_so_i2c2_debugfs_write_fndecl_61249 i2c2_debugfs_write fndecl 3 61249 &enable_so_rcar_dmac_prep_dma_cyclic_fndecl_61249
+enable_so_ext4_reserve_inode_write_fndecl_61253 ext4_reserve_inode_write fndecl 0 61253 NULL nohasharray
+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 nohasharray
-+enable_so____copy_from_user_fndecl_61266 ___copy_from_user fndecl 0 61266 &enable_so_key_create_or_update_fndecl_61266
++enable_so_key_create_or_update_fndecl_61266 key_create_or_update fndecl 5 61266 NULL
+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
@@ -205780,6 +206449,7 @@ index 0000000..56d8f55
+enable_so_num_arfs_vnic_enet_config_61794 num_arfs vnic_enet_config 0 61794 NULL
+enable_so_size_snd_cs46xx_region_61796 size snd_cs46xx_region 0 61796 NULL
+enable_so_vxfs_bmap_typed_fndecl_61801 vxfs_bmap_typed fndecl 0-2 61801 NULL
++enable_so___qsfp_debugfs_read_fndecl_61803 __qsfp_debugfs_read fndecl 3 61803 NULL
+enable_so_imm_count_iscsi_task_61804 imm_count iscsi_task 0 61804 NULL
+enable_so_fat_alloc_clusters_fndecl_61813 fat_alloc_clusters fndecl 0 61813 NULL nohasharray
+enable_so_end_map_range_61813 end map_range 0 61813 &enable_so_fat_alloc_clusters_fndecl_61813
@@ -205787,6 +206457,7 @@ index 0000000..56d8f55
+enable_so_m_rsumsize_xfs_mount_61815 m_rsumsize xfs_mount 0 61815 NULL
+enable_so_ttm_get_pages_fndecl_61821 ttm_get_pages fndecl 2 61821 NULL
+enable_so_bnx2x_init_wr_zp_fndecl_61822 bnx2x_init_wr_zp fndecl 3 61822 NULL
++enable_so_tracing_resize_saved_cmdlines_fndecl_61823 tracing_resize_saved_cmdlines fndecl 1 61823 NULL
+enable_so_mmc_switch_status_error_fndecl_61826 mmc_switch_status_error fndecl 0 61826 NULL
+enable_so_SYSC_set_mempolicy_fndecl_61827 SYSC_set_mempolicy fndecl 3 61827 NULL
+enable_so_txq_req_tg3_61834 txq_req tg3 0 61834 NULL nohasharray
@@ -205813,6 +206484,7 @@ index 0000000..56d8f55
+enable_so_srp_alloc_iu_fndecl_61904 srp_alloc_iu fndecl 2 61904 NULL nohasharray
+enable_so_MaxRecvDataSegmentLength_iscsi_conn_ops_61904 MaxRecvDataSegmentLength iscsi_conn_ops 0 61904 &enable_so_srp_alloc_iu_fndecl_61904
+enable_so_maxframe_size_fc_rport_61909 maxframe_size fc_rport 0 61909 NULL
++enable_so_mlx5_set_ports_check_fndecl_61910 mlx5_set_ports_check fndecl 3 61910 NULL
+enable_so_rxsize_channel_data_61912 rxsize channel_data 0 61912 NULL
+enable_so_cxd2820r_wr_regs_i2c_fndecl_61922 cxd2820r_wr_regs_i2c fndecl 5 61922 NULL
+enable_so_raid_disks_mdp_superblock_1_61927 raid_disks mdp_superblock_1 0 61927 NULL
@@ -205881,7 +206553,8 @@ index 0000000..56d8f55
+enable_so_task_ctx_size_pmu_62102 task_ctx_size pmu 0 62102 NULL
+enable_so_yoffset_fb_var_screeninfo_62110 yoffset fb_var_screeninfo 0 62110 NULL nohasharray
+enable_so_bulk_out_ep_bfusb_data_62110 bulk_out_ep bfusb_data 0 62110 &enable_so_yoffset_fb_var_screeninfo_62110
-+enable_so_tx_queue_status_read_fndecl_62113 tx_queue_status_read fndecl 3 62113 NULL
++enable_so_tx_queue_status_read_fndecl_62113 tx_queue_status_read fndecl 3 62113 NULL nohasharray
++enable_so___i2c_debugfs_write_fndecl_62113 __i2c_debugfs_write fndecl 3 62113 &enable_so_tx_queue_status_read_fndecl_62113
+enable_so_bo_offset_vmw_surface_offset_62116 bo_offset vmw_surface_offset 0 62116 NULL
+enable_so_st_nci_hci_dm_vdc_measurement_value_fndecl_62123 st_nci_hci_dm_vdc_measurement_value fndecl 3 62123 NULL nohasharray
+enable_so_sched_read_attr_fndecl_62123 sched_read_attr fndecl 3 62123 &enable_so_st_nci_hci_dm_vdc_measurement_value_fndecl_62123
@@ -205911,6 +206584,7 @@ index 0000000..56d8f55
+enable_so_param_count_acpi_evaluate_info_62202 param_count acpi_evaluate_info 0 62202 NULL
+enable_so_inum_size_entry_62204 inum size_entry 0 62204 NULL
+enable_so_locked_rate_snd_sb_62221 locked_rate snd_sb 0 62221 NULL
++enable_so_generic_file_direct_write_fndecl_62226 generic_file_direct_write fndecl 0 62226 NULL
+enable_so_datainterval_snd_usb_endpoint_62227 datainterval snd_usb_endpoint 0 62227 NULL
+enable_so_sense_len_request_62229 sense_len request 0 62229 NULL
+enable_so_shmem_getpage_gfp_fndecl_62239 shmem_getpage_gfp fndecl 2 62239 NULL
@@ -205946,6 +206620,7 @@ index 0000000..56d8f55
+enable_so_reiserfs_update_sd_size_fndecl_62345 reiserfs_update_sd_size fndecl 3 62345 NULL nohasharray
+enable_so_lov_emerg_alloc_fndecl_62345 lov_emerg_alloc fndecl 1 62345 &enable_so_reiserfs_update_sd_size_fndecl_62345
+enable_so_switchdev_obj_size_fndecl_62346 switchdev_obj_size fndecl 0 62346 NULL
++enable_so_write_file_spectral_bins_fndecl_62347 write_file_spectral_bins fndecl 3 62347 NULL
+enable_so_pcl_status_pcl_62348 pcl_status pcl 0 62348 NULL
+enable_so_C_SYSC_select_fndecl_62350 C_SYSC_select fndecl 1 62350 NULL
+enable_so_mpi_resize_fndecl_62353 mpi_resize fndecl 2 62353 NULL
@@ -206007,7 +206682,8 @@ index 0000000..56d8f55
+enable_so_filemap_write_and_wait_range_fndecl_62492 filemap_write_and_wait_range fndecl 0-2-3 62492 NULL nohasharray
+enable_so_svc_sock_setbufsize_fndecl_62492 svc_sock_setbufsize fndecl 2 62492 &enable_so_filemap_write_and_wait_range_fndecl_62492
+enable_so_evtchn_write_fndecl_62493 evtchn_write fndecl 3 62493 NULL
-+enable_so_try_charge_fndecl_62496 try_charge fndecl 0 62496 NULL
++enable_so_try_charge_fndecl_62496 try_charge fndecl 0 62496 NULL nohasharray
++enable_so_args_count_arm_smmu_phandle_args_62496 args_count arm_smmu_phandle_args 0 62496 &enable_so_try_charge_fndecl_62496
+enable_so_vmci_transport_set_buffer_size_fndecl_62498 vmci_transport_set_buffer_size fndecl 2 62498 NULL
+enable_so_de_type_gfs2_dirent_62502 de_type gfs2_dirent 0 62502 NULL
+enable_so_max_enic_rfs_flw_tbl_62505 max enic_rfs_flw_tbl 0 62505 NULL
@@ -206184,6 +206860,7 @@ index 0000000..56d8f55
+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
+enable_so_display_width_vivid_dev_63040 display_width vivid_dev 0 63040 NULL
++enable_so_acpi_aml_write_user_fndecl_63043 acpi_aml_write_user fndecl 2-0 63043 NULL
+enable_so_reset_psn_fndecl_63045 reset_psn fndecl 2 63045 NULL
+enable_so_ttymajor_vardecl_synclink_cs_c_63046 ttymajor vardecl_synclink_cs.c 0 63046 NULL
+enable_so_len_ixgbe_tx_buffer_63047 len ixgbe_tx_buffer 0 63047 NULL
@@ -206257,7 +206934,8 @@ index 0000000..56d8f55
+enable_so_npins_intel_pinctrl_soc_data_63239 npins intel_pinctrl_soc_data 0 63239 &enable_so_tx_frag_failed_read_fndecl_63239
+enable_so_mod_len_start_info_63244 mod_len start_info 0 63244 NULL
+enable_so_acpi_ut_get_resource_length_fndecl_63256 acpi_ut_get_resource_length fndecl 0 63256 NULL
-+enable_so_ep_image_mts_desc_63258 ep_image mts_desc 0 63258 NULL
++enable_so_ep_image_mts_desc_63258 ep_image mts_desc 0 63258 NULL nohasharray
++enable_so_nvme_init_iod_fndecl_63258 nvme_init_iod fndecl 2 63258 &enable_so_ep_image_mts_desc_63258
+enable_so_cachefiles_daemon_write_fndecl_63260 cachefiles_daemon_write fndecl 3 63260 NULL
+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
@@ -206284,7 +206962,8 @@ index 0000000..56d8f55
+enable_so_gf100_vm_create_fndecl_63335 gf100_vm_create fndecl 3-2 63335 NULL
+enable_so_bulk_out_endpointAddress_usb_serial_port_63340 bulk_out_endpointAddress usb_serial_port 0 63340 NULL
+enable_so_clipcount_out_vivid_dev_63343 clipcount_out vivid_dev 0 63343 NULL
-+enable_so_len_n_flags_iwl_rx_packet_63345 len_n_flags iwl_rx_packet 0 63345 NULL
++enable_so_len_n_flags_iwl_rx_packet_63345 len_n_flags iwl_rx_packet 0 63345 NULL nohasharray
++enable_so_pf_cids_qed_cdu_iids_63345 pf_cids qed_cdu_iids 0 63345 &enable_so_len_n_flags_iwl_rx_packet_63345
+enable_so_src_offset_scif_copy_work_63353 src_offset scif_copy_work 0 63353 NULL
+enable_so_alloc_thread_groups_fndecl_63354 alloc_thread_groups fndecl 2 63354 NULL
+enable_so_x_zoran_overlay_settings_63359 x zoran_overlay_settings 0 63359 NULL
@@ -206340,6 +207019,7 @@ index 0000000..56d8f55
+enable_so_width_v4l2_pix_format_63491 width v4l2_pix_format 0 63491 NULL
+enable_so_sb_spino_align_xfs_sb_63492 sb_spino_align xfs_sb 0 63492 NULL
+enable_so_find_last_bit_fndecl_63495 find_last_bit fndecl 0-2 63495 NULL
++enable_so__gr_table_len_vardecl_x2apic_uv_x_c_63497 _gr_table_len vardecl_x2apic_uv_x.c 0 63497 NULL
+enable_so___pcpu_size_to_slot_fndecl_63500 __pcpu_size_to_slot fndecl 0 63500 NULL
+enable_so_read_data_offset_smb_version_operations_63502 read_data_offset smb_version_operations 0 63502 NULL
+enable_so_ufs_nfs_get_inode_fndecl_63508 ufs_nfs_get_inode fndecl 2 63508 NULL
@@ -206365,7 +207045,8 @@ index 0000000..56d8f55
+enable_so_sctp_setsockopt_del_key_fndecl_63571 sctp_setsockopt_del_key fndecl 3 63571 &enable_so_ulong_read_file_fndecl_63571
+enable_so_unmap_granularity_scsi_disk_63574 unmap_granularity scsi_disk 0 63574 NULL
+enable_so_xfs_vm_readpages_fndecl_63575 xfs_vm_readpages fndecl 4 63575 NULL
-+enable_so_bnep_sock_create_fndecl_63577 bnep_sock_create fndecl 3 63577 NULL
++enable_so_bnep_sock_create_fndecl_63577 bnep_sock_create fndecl 3 63577 NULL nohasharray
++enable_so__min_pnode_vardecl_x2apic_uv_x_c_63577 _min_pnode vardecl_x2apic_uv_x.c 0 63577 &enable_so_bnep_sock_create_fndecl_63577
+enable_so_num_ethernet_queues_bnx2x_63578 num_ethernet_queues bnx2x 0 63578 NULL
+enable_so_xfs_vm_write_failed_fndecl_63582 xfs_vm_write_failed fndecl 3 63582 NULL
+enable_so__mlx4_set_path_fndecl_63583 _mlx4_set_path fndecl 7 63583 NULL
@@ -206433,6 +207114,7 @@ index 0000000..56d8f55
+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_alloc_trace_kprobe_fndecl_63786 alloc_trace_kprobe fndecl 6 63786 NULL
+enable_so_num_slices_myri10ge_priv_63789 num_slices myri10ge_priv 0 63789 NULL
+enable_so_order_pmcraid_sglist_63792 order pmcraid_sglist 0 63792 NULL nohasharray
+enable_so_orinoco_mic_fndecl_63792 orinoco_mic fndecl 7 63792 &enable_so_order_pmcraid_sglist_63792 nohasharray
@@ -206495,15 +207177,13 @@ index 0000000..56d8f55
+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 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_hdr_dwords_qib_verbs_txreq_63946 hdr_dwords qib_verbs_txreq 0 63946 &enable_so_get_znodes_to_commit_fndecl_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
@@ -206551,6 +207231,7 @@ index 0000000..56d8f55
+enable_so_ncells_nvmem_config_64108 ncells nvmem_config 0 64108 NULL nohasharray
+enable_so_nvme_trans_unit_serial_page_fndecl_64108 nvme_trans_unit_serial_page fndecl 4 64108 &enable_so_ncells_nvmem_config_64108
+enable_so_lmac_count_bgx_64109 lmac_count bgx 0 64109 NULL
++enable_so_btmrvl_fwdump_write_fndecl_64113 btmrvl_fwdump_write fndecl 3 64113 NULL
+enable_so_fc_copy_buffer_to_sglist_fndecl_64115 fc_copy_buffer_to_sglist fndecl 0-2 64115 NULL
+enable_so_compat_write_data_parport_operations_64123 compat_write_data parport_operations 0 64123 NULL
+enable_so_of_property_count_strings_fndecl_64124 of_property_count_strings fndecl 0 64124 NULL
@@ -206628,8 +207309,8 @@ index 0000000..56d8f55
+enable_so_r592_test_fifo_empty_fndecl_64351 r592_test_fifo_empty fndecl 0 64351 NULL
+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__iwl_dbgfs_tof_range_abort_write_fndecl_64357 _iwl_dbgfs_tof_range_abort_write fndecl 3 64357 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
@@ -206686,6 +207367,7 @@ index 0000000..56d8f55
+enable_so_read_status_fndecl_64497 read_status fndecl 0 64497 NULL
+enable_so_ext_ramdisk_size_boot_params_64498 ext_ramdisk_size boot_params 0 64498 NULL
+enable_so_num_def_tx_descs_octeon_config_64501 num_def_tx_descs octeon_config 0 64501 NULL
++enable_so_ds3000_writeFW_fndecl_64503 ds3000_writeFW fndecl 0 64503 NULL
+enable_so_omap_hsmmc_dma_cleanup_fndecl_64504 omap_hsmmc_dma_cleanup fndecl 2 64504 NULL
+enable_so_dvb_demux_ioctl_fndecl_64510 dvb_demux_ioctl fndecl 2 64510 NULL
+enable_so_fc_plogi_get_maxframe_fndecl_64511 fc_plogi_get_maxframe fndecl 0-2 64511 NULL
@@ -206693,6 +207375,7 @@ index 0000000..56d8f55
+enable_so_insize_cros_ec_command_64521 insize cros_ec_command 0 64521 NULL
+enable_so_hdr_len_st_proto_s_64523 hdr_len st_proto_s 0 64523 NULL
+enable_so_tun_alloc_skb_fndecl_64531 tun_alloc_skb fndecl 4-3-2 64531 NULL
++enable_so_partition_create_desc_fndecl_64535 partition_create_desc fndecl 3 64535 NULL
+enable_so_txq_cnt_tg3_64539 txq_cnt tg3 0 64539 NULL
+enable_so_cfg80211_process_disassoc_fndecl_64540 cfg80211_process_disassoc fndecl 3 64540 NULL
+enable_so_fw_dump_tmplt_size_scsi_qla_host_64541 fw_dump_tmplt_size scsi_qla_host 0 64541 NULL
@@ -206834,6 +207517,7 @@ index 0000000..56d8f55
+enable_so_rd_size_uhid_create_req_64916 rd_size uhid_create_req 0 64916 NULL
+enable_so_dma_attach_fndecl_64917 dma_attach fndecl 8-7-10-5-6 64917 NULL
+enable_so_roccat_read_fndecl_64918 roccat_read fndecl 3 64918 NULL
++enable_so_piothreshold_vardecl_64919 piothreshold vardecl 0 64919 NULL
+enable_so_nl80211_send_mlme_event_fndecl_64920 nl80211_send_mlme_event fndecl 4 64920 NULL
+enable_so_ath10k_wmi_tlv_op_gen_bcn_tmpl_fndecl_64938 ath10k_wmi_tlv_op_gen_bcn_tmpl fndecl 8 64938 NULL nohasharray
+enable_so_sq_max_wqes_per_wr_mlx4_ib_qp_64938 sq_max_wqes_per_wr mlx4_ib_qp 0 64938 &enable_so_ath10k_wmi_tlv_op_gen_bcn_tmpl_fndecl_64938
@@ -206862,6 +207546,7 @@ index 0000000..56d8f55
+enable_so_actual_size_saa7164_user_buffer_65010 actual_size saa7164_user_buffer 0 65010 NULL
+enable_so_compat_sys_process_vm_writev_fndecl_65017 compat_sys_process_vm_writev fndecl 5-3 65017 NULL
+enable_so_cmd_len_sg_io_hdr_65018 cmd_len sg_io_hdr 0 65018 NULL
++enable_so_print_page_owner_fndecl_65020 print_page_owner fndecl 2 65020 NULL
+enable_so_dfs_file_write_fndecl_65023 dfs_file_write fndecl 3 65023 NULL
+enable_so_intr_size_usb_pcwd_private_65024 intr_size usb_pcwd_private 0 65024 NULL
+enable_so_au8522_rc_read_fndecl_65026 au8522_rc_read fndecl 5 65026 NULL
@@ -206917,7 +207602,8 @@ index 0000000..56d8f55
+enable_so_dma_txsize_vardecl_stmmac_main_c_65161 dma_txsize vardecl_stmmac_main.c 0 65161 &enable_so_nexthdrlen_lowpan_nhc_65161
+enable_so_mwifiex_cmd_append_vsie_tlv_fndecl_65164 mwifiex_cmd_append_vsie_tlv fndecl 0 65164 NULL
+enable_so_ccp_get_dm_area_fndecl_65170 ccp_get_dm_area fndecl 4 65170 NULL
-+enable_so___ext4_block_zero_page_range_fndecl_65173 __ext4_block_zero_page_range fndecl 3 65173 NULL
++enable_so___ext4_block_zero_page_range_fndecl_65173 __ext4_block_zero_page_range fndecl 3 65173 NULL nohasharray
++enable_so__iwl_dbgfs_max_amsdu_len_write_fndecl_65173 _iwl_dbgfs_max_amsdu_len_write fndecl 3 65173 &enable_so___ext4_block_zero_page_range_fndecl_65173
+enable_so_crb_read_netxen_adapter_65178 crb_read netxen_adapter 0 65178 NULL
+enable_so_xfs_rtget_summary_fndecl_65179 xfs_rtget_summary fndecl 4-3 65179 NULL
+enable_so_usb_gadget_get_string_fndecl_65180 usb_gadget_get_string fndecl 0 65180 NULL
@@ -206961,12 +207647,14 @@ index 0000000..56d8f55
+enable_so_update_stat_data_fndecl_65289 update_stat_data fndecl 3 65289 NULL
+enable_so_hpfs_translate_name_fndecl_65290 hpfs_translate_name fndecl 3 65290 NULL
+enable_so_wear_eb_count_vardecl_nandsim_c_65291 wear_eb_count vardecl_nandsim.c 0 65291 NULL
-+enable_so_usb_stor_probe2_fndecl_65298 usb_stor_probe2 fndecl 0 65298 NULL
++enable_so_usb_stor_probe2_fndecl_65298 usb_stor_probe2 fndecl 0 65298 NULL nohasharray
++enable_so_rt2x00debug_write_rfcsr_fndecl_65298 rt2x00debug_write_rfcsr fndecl 3 65298 &enable_so_usb_stor_probe2_fndecl_65298
+enable_so_txfifo_size_lpuart_port_65300 txfifo_size lpuart_port 0 65300 NULL nohasharray
+enable_so_ntfs_bmap_fndecl_65300 ntfs_bmap fndecl 2 65300 &enable_so_txfifo_size_lpuart_port_65300
+enable_so_memory_lseek_fndecl_65306 memory_lseek fndecl 2 65306 NULL
+enable_so_in_param_mlx4_vhcr_65311 in_param mlx4_vhcr 0 65311 NULL
-+enable_so_mt312_read_fndecl_65312 mt312_read fndecl 4 65312 NULL
++enable_so_mt312_read_fndecl_65312 mt312_read fndecl 4 65312 NULL nohasharray
++enable_so_rockchip_clk_init_fndecl_65312 rockchip_clk_init fndecl 3 65312 &enable_so_mt312_read_fndecl_65312
+enable_so_max_pfn_vardecl_65317 max_pfn vardecl 0 65317 NULL
+enable_so_ExtPageLength__MPI2_CONFIG_REPLY_65319 ExtPageLength _MPI2_CONFIG_REPLY 0 65319 NULL
+enable_so_data_length_iscsi_scsi_req_65321 data_length iscsi_scsi_req 0 65321 NULL nohasharray
@@ -207034,7 +207722,8 @@ index 0000000..56d8f55
+enable_so_cts_cbc_encrypt_fndecl_65526 cts_cbc_encrypt fndecl 5 65526 &enable_so__recv_fndecl_65526
+enable_so_write_page_nocow_fndecl_65527 write_page_nocow fndecl 2 65527 NULL
+enable_so_size_mei_msg_data_65529 size mei_msg_data 0 65529 NULL
-+enable_so_connector_write_fndecl_65534 connector_write fndecl 3 65534 NULL
++enable_so_connector_write_fndecl_65534 connector_write fndecl 3 65534 NULL nohasharray
++enable_so_bcm2835_dma_prep_dma_memcpy_fndecl_65534 bcm2835_dma_prep_dma_memcpy fndecl 4 65534 &enable_so_connector_write_fndecl_65534
diff --git a/scripts/gcc-plugins/size_overflow_plugin/size_overflow_hash_aux.data b/scripts/gcc-plugins/size_overflow_plugin/size_overflow_hash_aux.data
new file mode 100644
index 0000000..74e91b2
@@ -211866,10 +212555,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 638b143e..0dd7e2b 100644
+index 1f22a18..1c1b79c 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
-@@ -93,7 +93,7 @@ static inline int is_arm_mapping_symbol(const char *str)
+@@ -92,7 +92,7 @@ static inline int is_arm_mapping_symbol(const char *str)
}
static int check_symbol_range(const char *sym, unsigned long long addr,
@@ -211878,7 +212567,7 @@ index 638b143e..0dd7e2b 100644
{
size_t i;
struct addr_range *ar;
-@@ -184,7 +184,7 @@ static int read_symbol(FILE *in, struct sym_entry *s)
+@@ -183,7 +183,7 @@ static int read_symbol(FILE *in, struct sym_entry *s)
}
static int symbol_in_range(struct sym_entry *s, struct addr_range *ranges,
@@ -211924,10 +212613,10 @@ index aed678e..1a703de 100644
struct symbol *sym = current_entry->sym;
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
-index 25cf0c2..eb178ce 100644
+index 2432298..faeeb2e 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
-@@ -956,7 +956,7 @@ const char *sym_escape_string_value(const char *in)
+@@ -970,7 +970,7 @@ const char *sym_escape_string_value(const char *in)
struct sym_match {
struct symbol *sym;
@@ -211936,7 +212625,7 @@ index 25cf0c2..eb178ce 100644
};
/* Compare matched symbols as thus:
-@@ -978,8 +978,8 @@ static int sym_rel_comp(const void *sym1, const void *sym2)
+@@ -992,8 +992,8 @@ static int sym_rel_comp(const void *sym1, const void *sym2)
* exactly; if this is the case, we can't decide which comes first,
* and we fallback to sorting alphabetically.
*/
@@ -211948,10 +212637,10 @@ index 25cf0c2..eb178ce 100644
return -1;
if (!exact1 && exact2)
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
-index 49d61ad..69ee2cf 100755
+index f0f6d9d..9728575 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
-@@ -184,7 +184,7 @@ else
+@@ -180,7 +180,7 @@ else
fi;
# final build of init/
@@ -212208,10 +212897,10 @@ index 71b4a8a..dcb89c5 100644
rm -f $(2) $(objtree)/.scmversion
diff --git a/scripts/package/builddeb b/scripts/package/builddeb
-index 6c3b038..4bac93f 100755
+index 86e56fe..4d4418a 100755
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
-@@ -326,6 +326,7 @@ fi
+@@ -329,6 +329,7 @@ fi
(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
@@ -212220,7 +212909,7 @@ 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 b6de63c..a6d2224 100755
+index 57673ba..c722dc4 100755
--- a/scripts/package/mkspec
+++ b/scripts/package/mkspec
@@ -120,22 +120,33 @@ echo 'rm -f $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE/{build,source}"
@@ -212266,7 +212955,7 @@ index b6de63c..a6d2224 100755
echo "fi"
echo ""
echo "%preun"
-@@ -144,10 +155,10 @@ echo "new-kernel-pkg --remove $KERNELRELEASE --rminitrd --initrdfile=/boot/initr
+@@ -149,10 +160,10 @@ echo "/sbin/update-bootloader --remove $KERNELRELEASE"
echo "fi"
echo ""
echo "%files"
@@ -212279,7 +212968,7 @@ index b6de63c..a6d2224 100755
echo "/lib/firmware/$KERNELRELEASE"
echo "/boot/*"
echo ""
-@@ -157,9 +168,11 @@ echo "/usr/include"
+@@ -162,9 +173,11 @@ echo "/usr/include"
echo ""
if ! $PREBUILT; then
echo "%files devel"
@@ -212355,10 +213044,10 @@ index f72f48f..769a657 100755
# Find all available archs
find_all_archs()
diff --git a/security/Kconfig b/security/Kconfig
-index e4523789..ed95c0f 100644
+index 176758c..1222b4a 100644
--- a/security/Kconfig
+++ b/security/Kconfig
-@@ -4,6 +4,1020 @@
+@@ -4,6 +4,1021 @@
menu "Security options"
@@ -213309,6 +213998,7 @@ index e4523789..ed95c0f 100644
+ bool "Prevent various integer overflows in function size parameters"
+ default y if GRKERNSEC_CONFIG_AUTO
+ depends on GCC_PLUGINS
++ depends on !SPARC64 && !ARM64
+ help
+ By saying Y here the kernel recomputes expressions of function
+ arguments marked by a size_overflow attribute with double integer
@@ -213379,7 +214069,7 @@ index e4523789..ed95c0f 100644
source security/keys/Kconfig
config SECURITY_DMESG_RESTRICT
-@@ -104,7 +1118,7 @@ config INTEL_TXT
+@@ -104,7 +1119,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
@@ -213389,12 +214079,12 @@ index e4523789..ed95c0f 100644
help
This is the portion of low virtual memory which should be protected
diff --git a/security/apparmor/file.c b/security/apparmor/file.c
-index 913f377..6e392d5 100644
+index d186674..84037da 100644
--- a/security/apparmor/file.c
+++ b/security/apparmor/file.c
@@ -348,8 +348,8 @@ static inline bool xindex_is_subset(u32 link, u32 target)
int aa_path_link(struct aa_profile *profile, struct dentry *old_dentry,
- struct path *new_dir, struct dentry *new_dentry)
+ const struct path *new_dir, struct dentry *new_dentry)
{
- struct path link = { new_dir->mnt, new_dentry };
- struct path target = { new_dir->mnt, old_dentry };
@@ -213417,10 +214107,10 @@ index c28b0f2..3b9fee0 100644
struct dentry *dents[AAFS_NS_SIZEOF];
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
-index 5ee8201..53d479f 100644
+index 7798e16..1079224 100644
--- a/security/apparmor/lsm.c
+++ b/security/apparmor/lsm.c
-@@ -176,7 +176,7 @@ static int common_perm_dir_dentry(int op, struct path *dir,
+@@ -176,7 +176,7 @@ static int common_perm_dir_dentry(int op, const struct path *dir,
struct dentry *dentry, u32 mask,
struct path_cond *cond)
{
@@ -213429,16 +214119,7 @@ index 5ee8201..53d479f 100644
return common_perm(op, &path, mask, cond);
}
-@@ -193,7 +193,7 @@ static int common_perm_dir_dentry(int op, struct path *dir,
- static int common_perm_mnt_dentry(int op, struct vfsmount *mnt,
- struct dentry *dentry, u32 mask)
- {
-- struct path path = { mnt, dentry };
-+ struct path path = { .mnt = mnt, .dentry = dentry };
- struct path_cond cond = { d_backing_inode(dentry)->i_uid,
- d_backing_inode(dentry)->i_mode
- };
-@@ -315,8 +315,8 @@ static int apparmor_path_rename(struct path *old_dir, struct dentry *old_dentry,
+@@ -306,8 +306,8 @@ static int apparmor_path_rename(const struct path *old_dir, struct dentry *old_d
profile = aa_current_profile();
if (!unconfined(profile)) {
@@ -213449,7 +214130,7 @@ index 5ee8201..53d479f 100644
struct path_cond cond = { d_backing_inode(old_dentry)->i_uid,
d_backing_inode(old_dentry)->i_mode
};
-@@ -679,11 +679,11 @@ static const struct kernel_param_ops param_ops_aalockpolicy = {
+@@ -656,11 +656,11 @@ static const struct kernel_param_ops param_ops_aalockpolicy = {
.get = param_get_aalockpolicy
};
@@ -213465,7 +214146,7 @@ index 5ee8201..53d479f 100644
/* Flag values, also controllable via /sys/module/apparmor/parameters
* We define special types as we want to do additional mediation.
-@@ -793,7 +793,7 @@ static int param_get_aauint(char *buffer, const struct kernel_param *kp)
+@@ -770,7 +770,7 @@ static int param_get_aauint(char *buffer, const struct kernel_param *kp)
return param_get_uint(buffer, kp);
}
@@ -213474,7 +214155,7 @@ index 5ee8201..53d479f 100644
{
if (!capable(CAP_MAC_ADMIN))
return -EPERM;
-@@ -804,7 +804,7 @@ static int param_get_audit(char *buffer, struct kernel_param *kp)
+@@ -781,7 +781,7 @@ static int param_get_audit(char *buffer, struct kernel_param *kp)
return sprintf(buffer, "%s", audit_mode_names[aa_g_audit]);
}
@@ -213483,7 +214164,7 @@ index 5ee8201..53d479f 100644
{
int i;
if (!capable(CAP_MAC_ADMIN))
-@@ -826,7 +826,7 @@ static int param_set_audit(const char *val, struct kernel_param *kp)
+@@ -803,7 +803,7 @@ static int param_set_audit(const char *val, struct kernel_param *kp)
return -EINVAL;
}
@@ -213492,7 +214173,7 @@ index 5ee8201..53d479f 100644
{
if (!capable(CAP_MAC_ADMIN))
return -EPERM;
-@@ -837,7 +837,7 @@ static int param_get_mode(char *buffer, struct kernel_param *kp)
+@@ -814,7 +814,7 @@ static int param_get_mode(char *buffer, struct kernel_param *kp)
return sprintf(buffer, "%s", aa_profile_mode_names[aa_g_profile_mode]);
}
@@ -213524,7 +214205,7 @@ index 705c287..81257f1 100644
/* freed below */
name = kmalloc(strlen(parent->base.hname) + 2 + 7 + 8, GFP_KERNEL);
diff --git a/security/commoncap.c b/security/commoncap.c
-index 48071ed..b805e0f 100644
+index e7fadde..7efafa2 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -438,6 +438,32 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data
@@ -213571,7 +214252,7 @@ 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 5d0f611..89bfac7 100644
+index d3a939b..44e8d75 100644
--- a/security/integrity/ima/ima.h
+++ b/security/integrity/ima/ima.h
@@ -129,8 +129,8 @@ int ima_init_template(void);
@@ -213586,7 +214267,7 @@ index 5d0f611..89bfac7 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 370e42d..00dafb8 100644
+index 5a2218f..a277bd0 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,
@@ -213631,10 +214312,10 @@ index 552705d..9920f4fb 100644
hlist_add_head_rcu(&qe->hnext, &ima_htable.queue[key]);
return 0;
diff --git a/security/keys/internal.h b/security/keys/internal.h
-index 5105c2c..a5010e6 100644
+index a705a7d..898c675 100644
--- a/security/keys/internal.h
+++ b/security/keys/internal.h
-@@ -90,12 +90,16 @@ extern void key_type_put(struct key_type *ktype);
+@@ -91,12 +91,16 @@ extern void key_type_put(struct key_type *ktype);
extern int __key_link_begin(struct key *keyring,
const struct keyring_index_key *index_key,
@@ -213653,7 +214334,7 @@ index 5105c2c..a5010e6 100644
extern key_ref_t find_key_to_update(key_ref_t keyring_ref,
const struct keyring_index_key *index_key);
-@@ -191,7 +195,7 @@ struct request_key_auth {
+@@ -192,7 +196,7 @@ struct request_key_auth {
void *callout_info;
size_t callout_len;
pid_t pid;
@@ -213663,10 +214344,10 @@ 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 af7f682..9c7e4ae6 100644
+index 346fbf2..84458b1 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,
+@@ -287,7 +287,7 @@ struct key *key_alloc(struct key_type *type, const char *desc,
atomic_set(&key->usage, 1);
init_rwsem(&key->sem);
@@ -213675,7 +214356,7 @@ index af7f682..9c7e4ae6 100644
key->index_key.type = type;
key->user = user;
key->quotalen = quotalen;
-@@ -1079,7 +1079,9 @@ int register_key_type(struct key_type *ktype)
+@@ -1101,7 +1101,9 @@ int register_key_type(struct key_type *ktype)
struct key_type *p;
int ret;
@@ -213686,7 +214367,7 @@ index af7f682..9c7e4ae6 100644
ret = -EEXIST;
down_write(&key_types_sem);
-@@ -1091,7 +1093,7 @@ int register_key_type(struct key_type *ktype)
+@@ -1113,7 +1115,7 @@ int register_key_type(struct key_type *ktype)
}
/* store the type */
@@ -213695,7 +214376,7 @@ index af7f682..9c7e4ae6 100644
pr_notice("Key type %s registered\n", ktype->name);
ret = 0;
-@@ -1113,7 +1115,7 @@ EXPORT_SYMBOL(register_key_type);
+@@ -1135,7 +1137,7 @@ EXPORT_SYMBOL(register_key_type);
void unregister_key_type(struct key_type *ktype)
{
down_write(&key_types_sem);
@@ -213704,7 +214385,7 @@ index af7f682..9c7e4ae6 100644
downgrade_write(&key_types_sem);
key_gc_keytype(ktype);
pr_notice("Key type %s unregistered\n", ktype->name);
-@@ -1131,10 +1133,10 @@ void __init key_init(void)
+@@ -1153,10 +1155,10 @@ void __init key_init(void)
0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
/* add the special key types */
@@ -213720,10 +214401,10 @@ index af7f682..9c7e4ae6 100644
/* record the root user tracking */
rb_link_node(&root_key_user.node,
diff --git a/security/keys/keyring.c b/security/keys/keyring.c
-index f931ccf..ed9cd36 100644
+index c91e4e0..d3193f6 100644
--- a/security/keys/keyring.c
+++ b/security/keys/keyring.c
-@@ -1071,8 +1071,6 @@ static int keyring_detect_cycle(struct key *A, struct key *B)
+@@ -1095,8 +1095,6 @@ static int keyring_detect_cycle(struct key *A, struct key *B)
int __key_link_begin(struct key *keyring,
const struct keyring_index_key *index_key,
struct assoc_array_edit **_edit)
@@ -213732,7 +214413,7 @@ index f931ccf..ed9cd36 100644
{
struct assoc_array_edit *edit;
int ret;
-@@ -1172,8 +1170,6 @@ void __key_link(struct key *key, struct assoc_array_edit **_edit)
+@@ -1196,8 +1194,6 @@ void __key_link(struct key *key, struct assoc_array_edit **_edit)
void __key_link_end(struct key *keyring,
const struct keyring_index_key *index_key,
struct assoc_array_edit *edit)
@@ -213806,10 +214487,10 @@ index 1450f85..a91e0bc 100644
}
rtnl_unlock();
diff --git a/security/tomoyo/file.c b/security/tomoyo/file.c
-index 2367b10..a0c3c51 100644
+index 7041a58..223f21f 100644
--- a/security/tomoyo/file.c
+++ b/security/tomoyo/file.c
-@@ -692,7 +692,7 @@ int tomoyo_path_number_perm(const u8 type, struct path *path,
+@@ -692,7 +692,7 @@ int tomoyo_path_number_perm(const u8 type, const struct path *path,
{
struct tomoyo_request_info r;
struct tomoyo_obj_info obj = {
@@ -213836,7 +214517,7 @@ index 2367b10..a0c3c51 100644
};
int error;
struct tomoyo_path_info buf;
-@@ -843,7 +843,7 @@ int tomoyo_mkdev_perm(const u8 operation, struct path *path,
+@@ -843,7 +843,7 @@ int tomoyo_mkdev_perm(const u8 operation, const struct path *path,
{
struct tomoyo_request_info r;
struct tomoyo_obj_info obj = {
@@ -213845,7 +214526,7 @@ index 2367b10..a0c3c51 100644
};
int error = -ENOMEM;
struct tomoyo_path_info buf;
-@@ -890,8 +890,8 @@ int tomoyo_path2_perm(const u8 operation, struct path *path1,
+@@ -890,8 +890,8 @@ int tomoyo_path2_perm(const u8 operation, const struct path *path1,
struct tomoyo_path_info buf2;
struct tomoyo_request_info r;
struct tomoyo_obj_info obj = {
@@ -213857,7 +214538,7 @@ index 2367b10..a0c3c51 100644
int idx;
diff --git a/security/tomoyo/mount.c b/security/tomoyo/mount.c
-index 390c646..f2f8db3 100644
+index 14b53fb..8829296 100644
--- a/security/tomoyo/mount.c
+++ b/security/tomoyo/mount.c
@@ -118,6 +118,10 @@ static int tomoyo_mount_acl(struct tomoyo_request_info *r,
@@ -213872,20 +214553,20 @@ index 390c646..f2f8db3 100644
if (!fstype) {
error = -ENODEV;
diff --git a/security/tomoyo/tomoyo.c b/security/tomoyo/tomoyo.c
-index cbf3df4..22b11df 100644
+index 75c9987..b9569d4 100644
--- a/security/tomoyo/tomoyo.c
+++ b/security/tomoyo/tomoyo.c
-@@ -165,7 +165,7 @@ static int tomoyo_path_truncate(struct path *path)
+@@ -165,7 +165,7 @@ static int tomoyo_path_truncate(const struct path *path)
*/
- static int tomoyo_path_unlink(struct path *parent, struct dentry *dentry)
+ static int tomoyo_path_unlink(const struct path *parent, struct dentry *dentry)
{
- struct path path = { parent->mnt, dentry };
+ struct path path = { .mnt = parent->mnt, .dentry = dentry };
return tomoyo_path_perm(TOMOYO_TYPE_UNLINK, &path, NULL);
}
-@@ -181,7 +181,7 @@ static int tomoyo_path_unlink(struct path *parent, struct dentry *dentry)
- static int tomoyo_path_mkdir(struct path *parent, struct dentry *dentry,
+@@ -181,7 +181,7 @@ static int tomoyo_path_unlink(const struct path *parent, struct dentry *dentry)
+ static int tomoyo_path_mkdir(const struct path *parent, struct dentry *dentry,
umode_t mode)
{
- struct path path = { parent->mnt, dentry };
@@ -213893,17 +214574,17 @@ index cbf3df4..22b11df 100644
return tomoyo_path_number_perm(TOMOYO_TYPE_MKDIR, &path,
mode & S_IALLUGO);
}
-@@ -196,7 +196,7 @@ static int tomoyo_path_mkdir(struct path *parent, struct dentry *dentry,
+@@ -196,7 +196,7 @@ static int tomoyo_path_mkdir(const struct path *parent, struct dentry *dentry,
*/
- static int tomoyo_path_rmdir(struct path *parent, struct dentry *dentry)
+ static int tomoyo_path_rmdir(const struct path *parent, struct dentry *dentry)
{
- struct path path = { parent->mnt, dentry };
+ struct path path = { .mnt = parent->mnt, .dentry = dentry };
return tomoyo_path_perm(TOMOYO_TYPE_RMDIR, &path, NULL);
}
-@@ -212,7 +212,7 @@ static int tomoyo_path_rmdir(struct path *parent, struct dentry *dentry)
- static int tomoyo_path_symlink(struct path *parent, struct dentry *dentry,
+@@ -212,7 +212,7 @@ static int tomoyo_path_rmdir(const struct path *parent, struct dentry *dentry)
+ static int tomoyo_path_symlink(const struct path *parent, struct dentry *dentry,
const char *old_name)
{
- struct path path = { parent->mnt, dentry };
@@ -213911,8 +214592,8 @@ index cbf3df4..22b11df 100644
return tomoyo_path_perm(TOMOYO_TYPE_SYMLINK, &path, old_name);
}
-@@ -229,7 +229,7 @@ static int tomoyo_path_symlink(struct path *parent, struct dentry *dentry,
- static int tomoyo_path_mknod(struct path *parent, struct dentry *dentry,
+@@ -229,7 +229,7 @@ static int tomoyo_path_symlink(const struct path *parent, struct dentry *dentry,
+ static int tomoyo_path_mknod(const struct path *parent, struct dentry *dentry,
umode_t mode, unsigned int dev)
{
- struct path path = { parent->mnt, dentry };
@@ -213920,8 +214601,8 @@ index cbf3df4..22b11df 100644
int type = TOMOYO_TYPE_CREATE;
const unsigned int perm = mode & S_IALLUGO;
-@@ -268,8 +268,8 @@ static int tomoyo_path_mknod(struct path *parent, struct dentry *dentry,
- static int tomoyo_path_link(struct dentry *old_dentry, struct path *new_dir,
+@@ -268,8 +268,8 @@ static int tomoyo_path_mknod(const struct path *parent, struct dentry *dentry,
+ static int tomoyo_path_link(struct dentry *old_dentry, const struct path *new_dir,
struct dentry *new_dentry)
{
- struct path path1 = { new_dir->mnt, old_dentry };
@@ -213931,8 +214612,8 @@ index cbf3df4..22b11df 100644
return tomoyo_path2_perm(TOMOYO_TYPE_LINK, &path1, &path2);
}
-@@ -288,8 +288,8 @@ static int tomoyo_path_rename(struct path *old_parent,
- struct path *new_parent,
+@@ -288,8 +288,8 @@ static int tomoyo_path_rename(const struct path *old_parent,
+ const struct path *new_parent,
struct dentry *new_dentry)
{
- struct path path1 = { old_parent->mnt, old_dentry };
@@ -213942,7 +214623,7 @@ index cbf3df4..22b11df 100644
return tomoyo_path2_perm(TOMOYO_TYPE_RENAME, &path1, &path2);
}
-@@ -417,7 +417,7 @@ static int tomoyo_sb_mount(const char *dev_name, struct path *path,
+@@ -417,7 +417,7 @@ static int tomoyo_sb_mount(const char *dev_name, const struct path *path,
*/
static int tomoyo_sb_umount(struct vfsmount *mnt, int flags)
{
@@ -213964,10 +214645,10 @@ index 90c605e..bf3a29a 100644
help
This selects Yama, which extends DAC support with additional
diff --git a/security/yama/yama_lsm.c b/security/yama/yama_lsm.c
-index cb6ed10..fb00554 100644
+index 0309f21..0c9bdfb 100644
--- a/security/yama/yama_lsm.c
+++ b/security/yama/yama_lsm.c
-@@ -357,7 +357,7 @@ static struct security_hook_list yama_hooks[] = {
+@@ -425,7 +425,7 @@ static struct security_hook_list yama_hooks[] = {
static int yama_dointvec_minmax(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -214109,7 +214790,7 @@ index 1f64ab0..26a7233 100644
if (err < 0)
return err;
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
-index 3a9b66c..2b38b21 100644
+index bb12615..b5e4ff9 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -1867,8 +1867,9 @@ EXPORT_SYMBOL(snd_pcm_lib_ioctl);
@@ -214124,7 +214805,7 @@ index 3a9b66c..2b38b21 100644
unsigned long flags;
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
-index 9106d8e..e7e2e3ca 100644
+index c61fd50f7..3081340 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -3014,11 +3014,11 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
@@ -214496,10 +215177,10 @@ index bebddc6..f5976be 100644
EXPORT_SYMBOL_GPL(amdtp_am824_midi_trigger);
diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
-index ed29026..933d2ae 100644
+index 00060c4..9ba6f37 100644
--- a/sound/firewire/amdtp-stream.c
+++ b/sound/firewire/amdtp-stream.c
-@@ -344,7 +344,7 @@ static void update_pcm_pointers(struct amdtp_stream *s,
+@@ -350,7 +350,7 @@ static void update_pcm_pointers(struct amdtp_stream *s,
ptr = s->pcm_buffer_pointer + frames;
if (ptr >= pcm->runtime->buffer_size)
ptr -= pcm->runtime->buffer_size;
@@ -214508,7 +215189,7 @@ index ed29026..933d2ae 100644
s->pcm_period_pointer += frames;
if (s->pcm_period_pointer >= pcm->runtime->period_size) {
-@@ -811,7 +811,7 @@ EXPORT_SYMBOL(amdtp_stream_pcm_pointer);
+@@ -833,7 +833,7 @@ EXPORT_SYMBOL(amdtp_stream_pcm_pointer);
void amdtp_stream_update(struct amdtp_stream *s)
{
/* Precomputing. */
@@ -214518,10 +215199,10 @@ index ed29026..933d2ae 100644
CIP_SID_MASK;
}
diff --git a/sound/firewire/amdtp-stream.h b/sound/firewire/amdtp-stream.h
-index 8775704..8fea566 100644
+index c1bc7fa..40d7cbc 100644
--- a/sound/firewire/amdtp-stream.h
+++ b/sound/firewire/amdtp-stream.h
-@@ -215,7 +215,7 @@ static inline bool amdtp_stream_pcm_running(struct amdtp_stream *s)
+@@ -207,7 +207,7 @@ static inline bool amdtp_stream_pcm_running(struct amdtp_stream *s)
static inline void amdtp_stream_pcm_trigger(struct amdtp_stream *s,
struct snd_pcm_substream *pcm)
{
@@ -214531,7 +215212,7 @@ index 8775704..8fea566 100644
static inline bool cip_sfc_is_base_44100(enum cip_sfc sfc)
diff --git a/sound/firewire/digi00x/amdtp-dot.c b/sound/firewire/digi00x/amdtp-dot.c
-index 0ac92ab..a2081aa 100644
+index b3cffd0..f17b591 100644
--- a/sound/firewire/digi00x/amdtp-dot.c
+++ b/sound/firewire/digi00x/amdtp-dot.c
@@ -365,7 +365,7 @@ void amdtp_dot_midi_trigger(struct amdtp_stream *s, unsigned int port,
@@ -215007,10 +215688,10 @@ index 4c26076..a13f370 100644
chip->pci = pci;
chip->irq = -1;
diff --git a/sound/soc/codecs/cx20442.c b/sound/soc/codecs/cx20442.c
-index d6f4abb..5d59f0c 100644
+index fb3885f..7c89556 100644
--- a/sound/soc/codecs/cx20442.c
+++ b/sound/soc/codecs/cx20442.c
-@@ -263,6 +263,12 @@ static int v253_hangup(struct tty_struct *tty)
+@@ -264,6 +264,12 @@ static int v253_hangup(struct tty_struct *tty)
return 0;
}
@@ -215023,7 +215704,7 @@ index d6f4abb..5d59f0c 100644
/* Line discipline .receive_buf() */
static void v253_receive(struct tty_struct *tty,
const unsigned char *cp, char *fp, int count)
-@@ -280,7 +286,7 @@ static void v253_receive(struct tty_struct *tty,
+@@ -281,7 +287,7 @@ static void v253_receive(struct tty_struct *tty,
/* Set up codec driver access to modem controls */
cx20442->control_data = tty;
@@ -215104,31 +215785,23 @@ 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 b6e310d..c562dcd 100644
+index deabe73..fd16886 100644
--- a/sound/soc/intel/skylake/skl-sst-dsp.h
+++ b/sound/soc/intel/skylake/skl-sst-dsp.h
-@@ -121,14 +121,14 @@ struct skl_dsp_fw_ops {
- int (*load_mod)(struct sst_dsp *ctx, u16 mod_id, char *mod_name);
+@@ -121,7 +121,7 @@ struct skl_dsp_fw_ops {
+ int (*load_mod)(struct sst_dsp *ctx, u16 mod_id, u8 *mod_name);
int (*unload_mod)(struct sst_dsp *ctx, u16 mod_id);
-};
+} __no_const;
struct skl_dsp_loader_ops {
- int (*alloc_dma_buf)(struct device *dev,
- struct snd_dma_buffer *dmab, size_t size);
- int (*free_dma_buf)(struct device *dev,
- struct snd_dma_buffer *dmab);
--};
-+} __no_const;
-
- struct skl_load_module_info {
- u16 mod_id;
+ int stream_tag;
diff --git a/sound/soc/soc-ac97.c b/sound/soc/soc-ac97.c
-index 7e0acd8..b4b2acb 100644
+index bc4a55b..ce6b925 100644
--- a/sound/soc/soc-ac97.c
+++ b/sound/soc/soc-ac97.c
-@@ -416,8 +416,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
+@@ -414,8 +414,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
if (ret)
return ret;
@@ -215373,10 +216046,10 @@ index 0a578fe..b81f62d 100644
})
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
-index 7cb1224..a08f426 100644
+index 48bd520..88f2088 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
-@@ -90,12 +90,17 @@ LIST_HEAD(vm_list);
+@@ -93,12 +93,17 @@ LIST_HEAD(vm_list);
static cpumask_var_t cpus_hardware_enabled;
static int kvm_usage_count;
@@ -215396,7 +216069,7 @@ index 7cb1224..a08f426 100644
struct dentry *kvm_debugfs_dir;
EXPORT_SYMBOL_GPL(kvm_debugfs_dir);
-@@ -843,7 +848,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
+@@ -902,7 +907,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)) ||
@@ -215405,7 +216078,7 @@ index 7cb1224..a08f426 100644
(void __user *)(unsigned long)mem->userspace_addr,
mem->memory_size)))
goto out;
-@@ -1905,9 +1910,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
+@@ -1964,9 +1969,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len)
{
@@ -215425,7 +216098,7 @@ index 7cb1224..a08f426 100644
}
EXPORT_SYMBOL_GPL(kvm_clear_guest_page);
-@@ -2246,7 +2259,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
+@@ -2317,7 +2330,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
return 0;
}
@@ -215434,7 +216107,7 @@ index 7cb1224..a08f426 100644
.release = kvm_vcpu_release,
.unlocked_ioctl = kvm_vcpu_ioctl,
#ifdef CONFIG_KVM_COMPAT
-@@ -2960,7 +2973,7 @@ out:
+@@ -3035,7 +3048,7 @@ out:
}
#endif
@@ -215443,7 +216116,7 @@ index 7cb1224..a08f426 100644
.release = kvm_vm_release,
.unlocked_ioctl = kvm_vm_ioctl,
#ifdef CONFIG_KVM_COMPAT
-@@ -3031,7 +3044,7 @@ out:
+@@ -3113,7 +3126,7 @@ out:
return r;
}
@@ -215452,7 +216125,7 @@ index 7cb1224..a08f426 100644
.unlocked_ioctl = kvm_dev_ioctl,
.compat_ioctl = kvm_dev_ioctl,
.llseek = noop_llseek,
-@@ -3057,7 +3070,7 @@ static void hardware_enable_nolock(void *junk)
+@@ -3139,7 +3152,7 @@ static void hardware_enable_nolock(void *junk)
if (r) {
cpumask_clear_cpu(cpu, cpus_hardware_enabled);
@@ -215461,7 +216134,7 @@ index 7cb1224..a08f426 100644
pr_info("kvm: enabling virtualization on CPU%d failed\n", cpu);
}
}
-@@ -3112,10 +3125,10 @@ static int hardware_enable_all(void)
+@@ -3194,10 +3207,10 @@ static int hardware_enable_all(void)
kvm_usage_count++;
if (kvm_usage_count == 1) {
@@ -215474,7 +216147,7 @@ index 7cb1224..a08f426 100644
hardware_disable_all_nolock();
r = -EBUSY;
}
-@@ -3569,7 +3582,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3752,7 +3765,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,
@@ -215483,7 +216156,7 @@ index 7cb1224..a08f426 100644
if (!kvm_vcpu_cache) {
r = -ENOMEM;
goto out_free_3;
-@@ -3579,9 +3592,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3762,9 +3775,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
if (r)
goto out_free;
@@ -215495,7 +216168,7 @@ index 7cb1224..a08f426 100644
r = misc_register(&kvm_dev);
if (r) {
-@@ -3591,9 +3606,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3774,9 +3789,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
register_syscore_ops(&kvm_syscore_ops);
diff --git a/4.6.5/4425_grsec_remove_EI_PAX.patch b/4.7.0/4425_grsec_remove_EI_PAX.patch
index c988c9a..ba92792 100644
--- a/4.6.5/4425_grsec_remove_EI_PAX.patch
+++ b/4.7.0/4425_grsec_remove_EI_PAX.patch
@@ -8,7 +8,7 @@ X-Gentoo-Bug-URL: https://bugs.gentoo.org/445600
diff -Nuar linux-3.7.1-hardened.orig/security/Kconfig linux-3.7.1-hardened/security/Kconfig
--- linux-3.7.1-hardened.orig/security/Kconfig 2012-12-26 08:39:29.000000000 -0500
+++ linux-3.7.1-hardened/security/Kconfig 2012-12-26 09:05:44.000000000 -0500
-@@ -280,7 +280,7 @@
+@@ -277,7 +277,7 @@
config PAX_EI_PAX
bool 'Use legacy ELF header marking'
diff --git a/4.6.5/4427_force_XATTR_PAX_tmpfs.patch b/4.7.0/4427_force_XATTR_PAX_tmpfs.patch
index 4ee3f0c..b4714fc 100644
--- a/4.6.5/4427_force_XATTR_PAX_tmpfs.patch
+++ b/4.7.0/4427_force_XATTR_PAX_tmpfs.patch
@@ -6,15 +6,15 @@ 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
-@@ -2665,7 +2665,6 @@
+@@ -2657,7 +2657,6 @@
return simple_xattr_set(&info->xattrs, name, value, size, flags);
}
-#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
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)
-@@ -2680,7 +2679,6 @@
+ struct dentry *dentry, struct inode *inode,
+ const char *name, const void *value,
+@@ -2673,7 +2672,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,
-@@ -2694,13 +2692,11 @@
+@@ -2687,13 +2685,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
-@@ -2710,9 +2706,7 @@
+@@ -2703,9 +2699,7 @@
&shmem_security_xattr_handler,
&shmem_trusted_xattr_handler,
diff --git a/4.6.5/4430_grsec-remove-localversion-grsec.patch b/4.7.0/4430_grsec-remove-localversion-grsec.patch
index 31cf878..31cf878 100644
--- a/4.6.5/4430_grsec-remove-localversion-grsec.patch
+++ b/4.7.0/4430_grsec-remove-localversion-grsec.patch
diff --git a/4.6.5/4435_grsec-mute-warnings.patch b/4.7.0/4435_grsec-mute-warnings.patch
index b7564e4..8929222 100644
--- a/4.6.5/4435_grsec-mute-warnings.patch
+++ b/4.7.0/4435_grsec-mute-warnings.patch
@@ -32,7 +32,7 @@ Acked-by: Christian Heim <phreak@gentoo.org>
diff -Naur linux-4.0.2-hardened.orig/Makefile linux-4.0.2-hardened/Makefile
--- linux-4.0.2-hardened.orig/Makefile 2015-05-09 21:08:19.243113731 -0400
+++ linux-4.0.2-hardened/Makefile 2015-05-09 21:10:37.775120037 -0400
-@@ -298,7 +298,7 @@
+@@ -302,7 +302,7 @@
HOSTCC = gcc
HOSTCXX = g++
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
diff --git a/4.6.5/4440_grsec-remove-protected-paths.patch b/4.7.0/4440_grsec-remove-protected-paths.patch
index 741546d..741546d 100644
--- a/4.6.5/4440_grsec-remove-protected-paths.patch
+++ b/4.7.0/4440_grsec-remove-protected-paths.patch
diff --git a/4.6.5/4450_grsec-kconfig-default-gids.patch b/4.7.0/4450_grsec-kconfig-default-gids.patch
index ccf0abd..e892c8a 100644
--- a/4.6.5/4450_grsec-kconfig-default-gids.patch
+++ b/4.7.0/4450_grsec-kconfig-default-gids.patch
@@ -73,7 +73,7 @@ diff -Naur a/grsecurity/Kconfig b/grsecurity/Kconfig
diff -Nuar a/security/Kconfig b/security/Kconfig
--- a/security/Kconfig 2012-10-13 09:51:35.000000000 -0400
+++ b/security/Kconfig 2012-10-13 09:52:59.000000000 -0400
-@@ -208,7 +208,7 @@
+@@ -205,7 +205,7 @@
config GRKERNSEC_PROC_GID
int "GID exempted from /proc restrictions"
@@ -82,7 +82,7 @@ diff -Nuar a/security/Kconfig b/security/Kconfig
help
Setting this GID determines which group will be exempted from
grsecurity's /proc restrictions, allowing users of the specified
-@@ -219,7 +219,7 @@
+@@ -216,7 +216,7 @@
config GRKERNSEC_TPE_UNTRUSTED_GID
int "GID for TPE-untrusted users"
depends on GRKERNSEC_CONFIG_SERVER && GRKERNSEC_TPE && !GRKERNSEC_TPE_INVERT
@@ -91,7 +91,7 @@ diff -Nuar a/security/Kconfig b/security/Kconfig
help
Setting this GID determines which group untrusted users should
be added to. These users will be placed under grsecurity's Trusted Path
-@@ -231,7 +231,7 @@
+@@ -228,7 +228,7 @@
config GRKERNSEC_TPE_TRUSTED_GID
int "GID for TPE-trusted users"
depends on GRKERNSEC_CONFIG_SERVER && GRKERNSEC_TPE && GRKERNSEC_TPE_INVERT
@@ -100,7 +100,7 @@ diff -Nuar a/security/Kconfig b/security/Kconfig
help
Setting this GID determines what group TPE restrictions will be
*disabled* for. If the sysctl option is enabled, a sysctl option
-@@ -240,7 +240,7 @@
+@@ -237,7 +237,7 @@
config GRKERNSEC_SYMLINKOWN_GID
int "GID for users with kernel-enforced SymlinksIfOwnerMatch"
depends on GRKERNSEC_CONFIG_SERVER
diff --git a/4.6.5/4465_selinux-avc_audit-log-curr_ip.patch b/4.7.0/4465_selinux-avc_audit-log-curr_ip.patch
index 7248385..7248385 100644
--- a/4.6.5/4465_selinux-avc_audit-log-curr_ip.patch
+++ b/4.7.0/4465_selinux-avc_audit-log-curr_ip.patch
diff --git a/4.6.5/4470_disable-compat_vdso.patch b/4.7.0/4470_disable-compat_vdso.patch
index fd822fe..0f82d7e 100644
--- a/4.6.5/4470_disable-compat_vdso.patch
+++ b/4.7.0/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
-@@ -2077,29 +2077,8 @@
+@@ -2052,29 +2052,8 @@
config COMPAT_VDSO
def_bool n
diff --git a/4.6.5/4475_emutramp_default_on.patch b/4.7.0/4475_emutramp_default_on.patch
index feb8c7b..2db58ab 100644
--- a/4.6.5/4475_emutramp_default_on.patch
+++ b/4.7.0/4475_emutramp_default_on.patch
@@ -10,7 +10,7 @@ See bug:
diff -Naur linux-3.9.2-hardened.orig/security/Kconfig linux-3.9.2-hardened/security/Kconfig
--- linux-3.9.2-hardened.orig/security/Kconfig 2013-05-18 08:53:41.000000000 -0400
+++ linux-3.9.2-hardened/security/Kconfig 2013-05-18 09:17:57.000000000 -0400
-@@ -440,7 +440,7 @@
+@@ -437,7 +437,7 @@
config PAX_EMUTRAMP
bool "Emulate trampolines"
@@ -19,7 +19,7 @@ diff -Naur linux-3.9.2-hardened.orig/security/Kconfig linux-3.9.2-hardened/secur
depends on (PAX_PAGEEXEC || PAX_SEGMEXEC) && (PARISC || X86)
help
There are some programs and libraries that for one reason or
-@@ -463,6 +463,12 @@
+@@ -460,6 +460,12 @@
utilities to disable CONFIG_PAX_PAGEEXEC and CONFIG_PAX_SEGMEXEC
for the affected files.