summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--4.4.8/4427_force_XATTR_PAX_tmpfs.patch35
-rw-r--r--4.5.2/0000_README (renamed from 4.4.8/0000_README)6
-rw-r--r--4.5.2/1001_linux-4.5.2.patch (renamed from 4.4.8/1007_linux-4.4.8.patch)2008
-rw-r--r--4.5.2/4420_grsecurity-3.1-4.5.2-201604282058.patch (renamed from 4.4.8/4420_grsecurity-3.1-4.4.8-201604252206.patch)41813
-rw-r--r--4.5.2/4425_grsec_remove_EI_PAX.patch (renamed from 4.4.8/4425_grsec_remove_EI_PAX.patch)0
-rw-r--r--4.5.2/4427_force_XATTR_PAX_tmpfs.patch57
-rw-r--r--4.5.2/4430_grsec-remove-localversion-grsec.patch (renamed from 4.4.8/4430_grsec-remove-localversion-grsec.patch)0
-rw-r--r--4.5.2/4435_grsec-mute-warnings.patch (renamed from 4.4.8/4435_grsec-mute-warnings.patch)0
-rw-r--r--4.5.2/4440_grsec-remove-protected-paths.patch (renamed from 4.4.8/4440_grsec-remove-protected-paths.patch)0
-rw-r--r--4.5.2/4450_grsec-kconfig-default-gids.patch (renamed from 4.4.8/4450_grsec-kconfig-default-gids.patch)0
-rw-r--r--4.5.2/4465_selinux-avc_audit-log-curr_ip.patch (renamed from 4.4.8/4465_selinux-avc_audit-log-curr_ip.patch)0
-rw-r--r--4.5.2/4470_disable-compat_vdso.patch (renamed from 4.4.8/4470_disable-compat_vdso.patch)2
-rw-r--r--4.5.2/4475_emutramp_default_on.patch (renamed from 4.4.8/4475_emutramp_default_on.patch)0
13 files changed, 35965 insertions, 7956 deletions
diff --git a/4.4.8/4427_force_XATTR_PAX_tmpfs.patch b/4.4.8/4427_force_XATTR_PAX_tmpfs.patch
deleted file mode 100644
index f6aea64..0000000
--- a/4.4.8/4427_force_XATTR_PAX_tmpfs.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From: Anthony G. Basile <blueness@gentoo.org>
-
-For users that emerge without XATTR_PAX support enabled, we still want user.pax.flags
-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 2013-06-11 21:00:18.000000000 -0400
-+++ b/mm/shmem.c 2013-06-11 21:08:18.000000000 -0400
-@@ -2564,11 +2564,7 @@
- static int shmem_xattr_validate(const char *name)
- {
- struct { const char *prefix; size_t len; } arr[] = {
--
--#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
- { XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN},
--#endif
--
- { XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN },
- { XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN }
- };
-@@ -2624,14 +2620,12 @@
- if (err)
- return err;
-
--#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
- if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) {
- if (strcmp(name, XATTR_NAME_PAX_FLAGS))
- return -EOPNOTSUPP;
- if (size > 8)
- return -EINVAL;
- }
--#endif
-
- return simple_xattr_set(&info->xattrs, name, value, size, flags);
- }
diff --git a/4.4.8/0000_README b/4.5.2/0000_README
index 31bb556..6857874 100644
--- a/4.4.8/0000_README
+++ b/4.5.2/0000_README
@@ -2,11 +2,11 @@ README
-----------------------------------------------------------------------------
Individual Patch Descriptions:
-----------------------------------------------------------------------------
-Patch: 1007_linux-4.4.8.patch
+Patch: 1001_linux-4.5.2.patch
From: http://www.kernel.org
-Desc: Linux 4.4.8
+Desc: Linux 4.5.2
-Patch: 4420_grsecurity-3.1-4.4.8-201604252206.patch
+Patch: 4420_grsecurity-3.1-4.5.2-201604282058.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/4.4.8/1007_linux-4.4.8.patch b/4.5.2/1001_linux-4.5.2.patch
index e8c236b..2c2064e 100644
--- a/4.4.8/1007_linux-4.4.8.patch
+++ b/4.5.2/1001_linux-4.5.2.patch
@@ -22,10 +22,10 @@ index 08a4a32..0326154 100644
trstn
tdi
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 742f69d..0e4102a 100644
+index 9a53c92..21e4b48 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -3928,6 +3928,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -4016,6 +4016,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
sector if the number is odd);
i = IGNORE_DEVICE (don't bind to this
device);
@@ -35,17 +35,35 @@ index 742f69d..0e4102a 100644
unlock ejectable media);
m = MAX_SECTORS_64 (don't transfer more
diff --git a/Makefile b/Makefile
-index 5a493e7..1928fcd 100644
+index c621889..1ecaaeb 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
VERSION = 4
- PATCHLEVEL = 4
--SUBLEVEL = 7
-+SUBLEVEL = 8
+ PATCHLEVEL = 5
+-SUBLEVEL = 1
++SUBLEVEL = 2
EXTRAVERSION =
NAME = Blurry Fish Butt
+diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
+index 7d0cba6f..c86ea8a 100644
+--- a/arch/arm/kernel/setup.c
++++ b/arch/arm/kernel/setup.c
+@@ -430,11 +430,13 @@ static void __init patch_aeabi_idiv(void)
+ pr_info("CPU: div instructions available: patching division code\n");
+
+ fn_addr = ((uintptr_t)&__aeabi_uidiv) & ~1;
++ asm ("" : "+g" (fn_addr));
+ ((u32 *)fn_addr)[0] = udiv_instruction();
+ ((u32 *)fn_addr)[1] = bx_lr_instruction();
+ flush_icache_range(fn_addr, fn_addr + 8);
+
+ fn_addr = ((uintptr_t)&__aeabi_idiv) & ~1;
++ asm ("" : "+g" (fn_addr));
+ ((u32 *)fn_addr)[0] = sdiv_instruction();
+ ((u32 *)fn_addr)[1] = bx_lr_instruction();
+ flush_icache_range(fn_addr, fn_addr + 8);
diff --git a/arch/arm64/include/asm/opcodes.h b/arch/arm64/include/asm/opcodes.h
index 4e603ea..123f45d 100644
--- a/arch/arm64/include/asm/opcodes.h
@@ -57,7 +75,7 @@ index 4e603ea..123f45d 100644
+
#include <../../arm/include/asm/opcodes.h>
diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c
-index 8aee3ae..c1492ba 100644
+index c536c9e..0931155 100644
--- a/arch/arm64/kernel/debug-monitors.c
+++ b/arch/arm64/kernel/debug-monitors.c
@@ -186,20 +186,21 @@ static void clear_regs_spsr_ss(struct pt_regs *regs)
@@ -177,7 +195,7 @@ index bdeed9d..433c4b9 100644
irq_set_irq_type(s1, IRQ_TYPE_LEVEL_LOW);
diff --git a/arch/mips/alchemy/devboards/db1550.c b/arch/mips/alchemy/devboards/db1550.c
-index 5740bcf..6c37b93 100644
+index b518f02..1c01d6e 100644
--- a/arch/mips/alchemy/devboards/db1550.c
+++ b/arch/mips/alchemy/devboards/db1550.c
@@ -514,7 +514,7 @@ static void __init db1550_devices(void)
@@ -268,6 +286,60 @@ index 490cea5..5c62065 100644
break;
case msa_st_op:
+diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
+index 14f655c..86ed376 100644
+--- a/arch/parisc/Kconfig
++++ b/arch/parisc/Kconfig
+@@ -29,6 +29,7 @@ config PARISC
+ select TTY # Needed for pdc_cons.c
+ select HAVE_DEBUG_STACKOVERFLOW
+ select HAVE_ARCH_AUDITSYSCALL
++ select HAVE_ARCH_SECCOMP_FILTER
+ select ARCH_NO_COHERENT_DMA_MMAP
+
+ help
+diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h
+index 0448a2c..3387307 100644
+--- a/arch/parisc/include/asm/compat.h
++++ b/arch/parisc/include/asm/compat.h
+@@ -183,6 +183,13 @@ typedef struct compat_siginfo {
+ int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
+ int _fd;
+ } _sigpoll;
++
++ /* SIGSYS */
++ struct {
++ compat_uptr_t _call_addr; /* calling user insn */
++ int _syscall; /* triggering system call number */
++ compat_uint_t _arch; /* AUDIT_ARCH_* of syscall */
++ } _sigsys;
+ } _sifields;
+ } compat_siginfo_t;
+
+diff --git a/arch/parisc/include/asm/syscall.h b/arch/parisc/include/asm/syscall.h
+index a5eba95..637ce8d 100644
+--- a/arch/parisc/include/asm/syscall.h
++++ b/arch/parisc/include/asm/syscall.h
+@@ -39,6 +39,19 @@ static inline void syscall_get_arguments(struct task_struct *tsk,
+ }
+ }
+
++static inline void syscall_set_return_value(struct task_struct *task,
++ struct pt_regs *regs,
++ int error, long val)
++{
++ regs->gr[28] = error ? error : val;
++}
++
++static inline void syscall_rollback(struct task_struct *task,
++ struct pt_regs *regs)
++{
++ /* do nothing */
++}
++
+ static inline int syscall_get_arch(void)
+ {
+ int arch = AUDIT_ARCH_PARISC;
diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h
index 0abdd4c..1960b87 100644
--- a/arch/parisc/include/asm/uaccess.h
@@ -313,6 +385,69 @@ index 568b2c6..3cad8aa 100644
EXPORT_SYMBOL(fixup_get_user_skip_1);
EXPORT_SYMBOL(fixup_get_user_skip_2);
EXPORT_SYMBOL(fixup_put_user_skip_1);
+diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
+index ce0b2b4..8fb81a3 100644
+--- a/arch/parisc/kernel/ptrace.c
++++ b/arch/parisc/kernel/ptrace.c
+@@ -270,7 +270,8 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+ long do_syscall_trace_enter(struct pt_regs *regs)
+ {
+ /* Do the secure computing check first. */
+- secure_computing_strict(regs->gr[20]);
++ if (secure_computing() == -1)
++ return -1;
+
+ if (test_thread_flag(TIF_SYSCALL_TRACE) &&
+ tracehook_report_syscall_entry(regs)) {
+@@ -296,7 +297,11 @@ long do_syscall_trace_enter(struct pt_regs *regs)
+ regs->gr[23] & 0xffffffff);
+
+ out:
+- return regs->gr[20];
++ /*
++ * Sign extend the syscall number to 64bit since it may have been
++ * modified by a compat ptrace call
++ */
++ return (int) ((u32) regs->gr[20]);
+ }
+
+ void do_syscall_trace_exit(struct pt_regs *regs)
+diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c
+index 984abbe..c342b2e 100644
+--- a/arch/parisc/kernel/signal32.c
++++ b/arch/parisc/kernel/signal32.c
+@@ -371,6 +371,11 @@ copy_siginfo_to_user32 (compat_siginfo_t __user *to, const siginfo_t *from)
+ val = (compat_int_t)from->si_int;
+ err |= __put_user(val, &to->si_int);
+ break;
++ case __SI_SYS >> 16:
++ err |= __put_user(ptr_to_compat(from->si_call_addr), &to->si_call_addr);
++ err |= __put_user(from->si_syscall, &to->si_syscall);
++ err |= __put_user(from->si_arch, &to->si_arch);
++ break;
+ }
+ }
+ return err;
+diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
+index fbafa0d..c976ebf 100644
+--- a/arch/parisc/kernel/syscall.S
++++ b/arch/parisc/kernel/syscall.S
+@@ -329,6 +329,7 @@ tracesys_next:
+
+ ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
+ LDREG TI_TASK(%r1), %r1
++ LDREG TASK_PT_GR28(%r1), %r28 /* Restore return value */
+ LDREG TASK_PT_GR26(%r1), %r26 /* Restore the users args */
+ LDREG TASK_PT_GR25(%r1), %r25
+ LDREG TASK_PT_GR24(%r1), %r24
+@@ -342,6 +343,7 @@ tracesys_next:
+ stw %r21, -56(%r30) /* 6th argument */
+ #endif
+
++ cmpib,COND(=),n -1,%r20,tracesys_exit /* seccomp may have returned -1 */
+ comiclr,>>= __NR_Linux_syscalls, %r20, %r0
+ b,n .Ltracesys_nosys
+
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
index 553b098..77e2262 100644
--- a/arch/parisc/kernel/traps.c
@@ -371,11 +506,24 @@ index a762864..f906444 100644
d->fault_space = regs->isr;
d->fault_addr = regs->ior;
+diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
+index 3c5736e..54ed9c7 100644
+--- a/arch/powerpc/kernel/process.c
++++ b/arch/powerpc/kernel/process.c
+@@ -854,7 +854,7 @@ void restore_tm_state(struct pt_regs *regs)
+ static inline void save_sprs(struct thread_struct *t)
+ {
+ #ifdef CONFIG_ALTIVEC
+- if (cpu_has_feature(cpu_has_feature(CPU_FTR_ALTIVEC)))
++ if (cpu_has_feature(CPU_FTR_ALTIVEC))
+ t->vrsave = mfspr(SPRN_VRSAVE);
+ #endif
+ #ifdef CONFIG_PPC_BOOK3S_64
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
-index 9833fee..807f159 100644
+index 744e24b..4a811ca 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
-@@ -486,13 +486,13 @@ static void hugepd_free(struct mmu_gather *tlb, void *hugepte)
+@@ -414,13 +414,13 @@ static void hugepd_free(struct mmu_gather *tlb, void *hugepte)
{
struct hugepd_freelist **batchp;
@@ -391,11 +539,43 @@ index 9833fee..807f159 100644
return;
}
+diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c
+index 13dab0c..3776aca 100644
+--- a/arch/s390/mm/gup.c
++++ b/arch/s390/mm/gup.c
+@@ -20,9 +20,9 @@
+ static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr,
+ unsigned long end, int write, struct page **pages, int *nr)
+ {
++ struct page *head, *page;
+ unsigned long mask;
+ pte_t *ptep, pte;
+- struct page *page;
+
+ mask = (write ? _PAGE_PROTECT : 0) | _PAGE_INVALID | _PAGE_SPECIAL;
+
+@@ -37,12 +37,14 @@ static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr,
+ return 0;
+ VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
+ page = pte_page(pte);
+- if (!page_cache_get_speculative(page))
++ head = compound_head(page);
++ if (!page_cache_get_speculative(head))
+ return 0;
+ if (unlikely(pte_val(pte) != pte_val(*ptep))) {
+- put_page(page);
++ put_page(head);
+ return 0;
+ }
++ VM_BUG_ON_PAGE(compound_head(page) != head, page);
+ pages[*nr] = page;
+ (*nr)++;
+
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
-index 30cfd64..9d2abb2 100644
+index 44adbb8..f8dba20 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
-@@ -41,7 +41,7 @@
+@@ -42,7 +42,7 @@
#define KVM_PIO_PAGE_OFFSET 1
#define KVM_COALESCED_MMIO_PAGE_OFFSET 2
@@ -404,24 +584,11 @@ index 30cfd64..9d2abb2 100644
#define KVM_IRQCHIP_NUM_PINS KVM_IOAPIC_NUM_PINS
-diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
-index fa1195d..164e3f8 100644
---- a/arch/x86/include/asm/pci_x86.h
-+++ b/arch/x86/include/asm/pci_x86.h
-@@ -93,6 +93,8 @@ extern raw_spinlock_t pci_config_lock;
- extern int (*pcibios_enable_irq)(struct pci_dev *dev);
- extern void (*pcibios_disable_irq)(struct pci_dev *dev);
-
-+extern bool mp_should_keep_irq(struct device *dev);
-+
- struct pci_raw_ops {
- int (*read)(unsigned int domain, unsigned int bus, unsigned int devfn,
- int reg, int len, u32 *val);
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index 8bfc5fc..7eb4ebd 100644
+index d47d231..eca5bd9 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
-@@ -6024,12 +6024,10 @@ static int inject_pending_event(struct kvm_vcpu *vcpu, bool req_int_win)
+@@ -6074,12 +6074,10 @@ static int inject_pending_event(struct kvm_vcpu *vcpu, bool req_int_win)
}
/* try to inject new event if pending */
@@ -438,7 +605,7 @@ index 8bfc5fc..7eb4ebd 100644
} else if (kvm_cpu_has_injectable_intr(vcpu)) {
/*
* Because interrupts can be injected asynchronously, we are
-@@ -6474,10 +6472,12 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
+@@ -6548,10 +6546,12 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
if (inject_pending_event(vcpu, req_int_win) != 0)
req_immediate_exit = true;
/* enable NMI/IRQ window open exits if needed */
@@ -455,128 +622,6 @@ index 8bfc5fc..7eb4ebd 100644
if (kvm_lapic_enabled(vcpu)) {
update_cr8_intercept(vcpu);
-diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
-index eccd4d9..8fd6f44 100644
---- a/arch/x86/pci/common.c
-+++ b/arch/x86/pci/common.c
-@@ -673,28 +673,22 @@ int pcibios_add_device(struct pci_dev *dev)
- return 0;
- }
-
--int pcibios_alloc_irq(struct pci_dev *dev)
-+int pcibios_enable_device(struct pci_dev *dev, int mask)
- {
-- /*
-- * If the PCI device was already claimed by core code and has
-- * MSI enabled, probing of the pcibios IRQ will overwrite
-- * dev->irq. So bail out if MSI is already enabled.
-- */
-- if (pci_dev_msi_enabled(dev))
-- return -EBUSY;
-+ int err;
-
-- return pcibios_enable_irq(dev);
--}
-+ if ((err = pci_enable_resources(dev, mask)) < 0)
-+ return err;
-
--void pcibios_free_irq(struct pci_dev *dev)
--{
-- if (pcibios_disable_irq)
-- pcibios_disable_irq(dev);
-+ if (!pci_dev_msi_enabled(dev))
-+ return pcibios_enable_irq(dev);
-+ return 0;
- }
-
--int pcibios_enable_device(struct pci_dev *dev, int mask)
-+void pcibios_disable_device (struct pci_dev *dev)
- {
-- return pci_enable_resources(dev, mask);
-+ if (!pci_dev_msi_enabled(dev) && pcibios_disable_irq)
-+ pcibios_disable_irq(dev);
- }
-
- int pci_ext_cfg_avail(void)
-diff --git a/arch/x86/pci/intel_mid_pci.c b/arch/x86/pci/intel_mid_pci.c
-index 0d24e7c..8b93e63 100644
---- a/arch/x86/pci/intel_mid_pci.c
-+++ b/arch/x86/pci/intel_mid_pci.c
-@@ -215,7 +215,7 @@ static int intel_mid_pci_irq_enable(struct pci_dev *dev)
- int polarity;
- int ret;
-
-- if (pci_has_managed_irq(dev))
-+ if (dev->irq_managed && dev->irq > 0)
- return 0;
-
- switch (intel_mid_identify_cpu()) {
-@@ -256,13 +256,10 @@ static int intel_mid_pci_irq_enable(struct pci_dev *dev)
-
- static void intel_mid_pci_irq_disable(struct pci_dev *dev)
- {
-- if (pci_has_managed_irq(dev)) {
-+ if (!mp_should_keep_irq(&dev->dev) && dev->irq_managed &&
-+ dev->irq > 0) {
- mp_unmap_irq(dev->irq);
- dev->irq_managed = 0;
-- /*
-- * Don't reset dev->irq here, otherwise
-- * intel_mid_pci_irq_enable() will fail on next call.
-- */
- }
- }
-
-diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c
-index 32e7034..9bd1154 100644
---- a/arch/x86/pci/irq.c
-+++ b/arch/x86/pci/irq.c
-@@ -1202,7 +1202,7 @@ static int pirq_enable_irq(struct pci_dev *dev)
- struct pci_dev *temp_dev;
- int irq;
-
-- if (pci_has_managed_irq(dev))
-+ if (dev->irq_managed && dev->irq > 0)
- return 0;
-
- irq = IO_APIC_get_PCI_irq_vector(dev->bus->number,
-@@ -1230,7 +1230,8 @@ static int pirq_enable_irq(struct pci_dev *dev)
- }
- dev = temp_dev;
- if (irq >= 0) {
-- pci_set_managed_irq(dev, irq);
-+ dev->irq_managed = 1;
-+ dev->irq = irq;
- dev_info(&dev->dev, "PCI->APIC IRQ transform: "
- "INT %c -> IRQ %d\n", 'A' + pin - 1, irq);
- return 0;
-@@ -1256,10 +1257,24 @@ static int pirq_enable_irq(struct pci_dev *dev)
- return 0;
- }
-
-+bool mp_should_keep_irq(struct device *dev)
-+{
-+ if (dev->power.is_prepared)
-+ return true;
-+#ifdef CONFIG_PM
-+ if (dev->power.runtime_status == RPM_SUSPENDING)
-+ return true;
-+#endif
-+
-+ return false;
-+}
-+
- static void pirq_disable_irq(struct pci_dev *dev)
- {
-- if (io_apic_assign_pci_irqs && pci_has_managed_irq(dev)) {
-+ if (io_apic_assign_pci_irqs && !mp_should_keep_irq(&dev->dev) &&
-+ dev->irq_managed && dev->irq) {
- mp_unmap_irq(dev->irq);
-- pci_reset_managed_irq(dev);
-+ dev->irq = 0;
-+ dev->irq_managed = 0;
- }
- }
diff --git a/crypto/asymmetric_keys/pkcs7_trust.c b/crypto/asymmetric_keys/pkcs7_trust.c
index 90d6d47..ecdb5a2 100644
--- a/crypto/asymmetric_keys/pkcs7_trust.c
@@ -590,58 +635,8 @@ index 90d6d47..ecdb5a2 100644
for (p = pkcs7->certs; p; p = p->next)
p->seen = false;
-diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
-index c933675..8a10a7a 100644
---- a/drivers/acpi/pci_irq.c
-+++ b/drivers/acpi/pci_irq.c
-@@ -409,7 +409,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
- return 0;
- }
-
-- if (pci_has_managed_irq(dev))
-+ if (dev->irq_managed && dev->irq > 0)
- return 0;
-
- entry = acpi_pci_irq_lookup(dev, pin);
-@@ -454,7 +454,8 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
- kfree(entry);
- return rc;
- }
-- pci_set_managed_irq(dev, rc);
-+ dev->irq = rc;
-+ dev->irq_managed = 1;
-
- if (link)
- snprintf(link_desc, sizeof(link_desc), " -> Link[%s]", link);
-@@ -477,9 +478,17 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
- u8 pin;
-
- pin = dev->pin;
-- if (!pin || !pci_has_managed_irq(dev))
-+ if (!pin || !dev->irq_managed || dev->irq <= 0)
- return;
-
-+ /* Keep IOAPIC pin configuration when suspending */
-+ if (dev->dev.power.is_prepared)
-+ return;
-+#ifdef CONFIG_PM
-+ if (dev->dev.power.runtime_status == RPM_SUSPENDING)
-+ return;
-+#endif
-+
- entry = acpi_pci_irq_lookup(dev, pin);
- if (!entry)
- return;
-@@ -499,6 +508,6 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
- dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin));
- if (gsi >= 0) {
- acpi_unregister_gsi(gsi);
-- pci_reset_managed_irq(dev);
-+ dev->irq_managed = 0;
- }
- }
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
-index 81ea69f..fbdddd6 100644
+index 4a87678..9745cf9 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1955,7 +1955,7 @@ static struct ceph_osd_request *rbd_osd_req_create(
@@ -671,11 +666,89 @@ index 81ea69f..fbdddd6 100644
if (!obj_request->bio_list)
goto out_unwind;
} else if (type == OBJ_REQUEST_PAGES) {
+diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
+index 99b375c..90c1511 100644
+--- a/drivers/gpio/gpio-pca953x.c
++++ b/drivers/gpio/gpio-pca953x.c
+@@ -18,6 +18,7 @@
+ #include <linux/i2c.h>
+ #include <linux/platform_data/pca953x.h>
+ #include <linux/slab.h>
++#include <asm/unaligned.h>
+ #include <linux/of_platform.h>
+ #include <linux/acpi.h>
+
+@@ -159,7 +160,7 @@ static int pca953x_write_regs(struct pca953x_chip *chip, int reg, u8 *val)
+ switch (chip->chip_type) {
+ case PCA953X_TYPE:
+ ret = i2c_smbus_write_word_data(chip->client,
+- reg << 1, (u16) *val);
++ reg << 1, cpu_to_le16(get_unaligned((u16 *)val)));
+ break;
+ case PCA957X_TYPE:
+ ret = i2c_smbus_write_byte_data(chip->client, reg << 1,
+diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
+index b2b7b78..76ac906 100644
+--- a/drivers/gpio/gpio-pxa.c
++++ b/drivers/gpio/gpio-pxa.c
+@@ -283,8 +283,8 @@ static int pxa_gpio_direction_output(struct gpio_chip *chip,
+ writel_relaxed(mask, base + (value ? GPSR_OFFSET : GPCR_OFFSET));
+
+ ret = pinctrl_gpio_direction_output(chip->base + offset);
+- if (!ret)
+- return 0;
++ if (ret)
++ return ret;
+
+ spin_lock_irqsave(&gpio_lock, flags);
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+index 7a4b101..75cb5b9 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+@@ -816,10 +816,13 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
+ struct drm_device *ddev = adev->ddev;
+ struct drm_crtc *crtc;
+ uint32_t line_time_us, vblank_lines;
++ struct cgs_mode_info *mode_info;
+
+ if (info == NULL)
+ return -EINVAL;
+
++ mode_info = info->mode_info;
++
+ if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) {
+ list_for_each_entry(crtc,
+ &ddev->mode_config.crtc_list, head) {
+@@ -828,7 +831,7 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
+ info->active_display_mask |= (1 << amdgpu_crtc->crtc_id);
+ info->display_count++;
+ }
+- if (info->mode_info != NULL &&
++ if (mode_info != NULL &&
+ crtc->enabled && amdgpu_crtc->enabled &&
+ amdgpu_crtc->hw_mode.clock) {
+ line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) /
+@@ -836,10 +839,10 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
+ vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end -
+ amdgpu_crtc->hw_mode.crtc_vdisplay +
+ (amdgpu_crtc->v_border * 2);
+- info->mode_info->vblank_time_us = vblank_lines * line_time_us;
+- info->mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode);
+- info->mode_info->ref_clock = adev->clock.spll.reference_freq;
+- info->mode_info++;
++ mode_info->vblank_time_us = vblank_lines * line_time_us;
++ mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode);
++ mode_info->ref_clock = adev->clock.spll.reference_freq;
++ mode_info = NULL;
+ }
+ }
+ }
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
-index 272110c..ea87033 100644
+index b806079..53964b1 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
-@@ -898,14 +898,6 @@ static int gmc_v7_0_early_init(void *handle)
+@@ -902,14 +902,6 @@ static int gmc_v7_0_early_init(void *handle)
gmc_v7_0_set_gart_funcs(adev);
gmc_v7_0_set_irq_funcs(adev);
@@ -690,7 +763,7 @@ index 272110c..ea87033 100644
return 0;
}
-@@ -926,6 +918,14 @@ static int gmc_v7_0_sw_init(void *handle)
+@@ -930,6 +922,14 @@ static int gmc_v7_0_sw_init(void *handle)
if (r)
return r;
@@ -706,10 +779,10 @@ index 272110c..ea87033 100644
if (r)
return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
-index ba4ad00..0842308 100644
+index 3efd455..e59251f 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
-@@ -852,14 +852,6 @@ static int gmc_v8_0_early_init(void *handle)
+@@ -856,14 +856,6 @@ static int gmc_v8_0_early_init(void *handle)
gmc_v8_0_set_gart_funcs(adev);
gmc_v8_0_set_irq_funcs(adev);
@@ -724,7 +797,7 @@ index ba4ad00..0842308 100644
return 0;
}
-@@ -870,6 +862,8 @@ static int gmc_v8_0_late_init(void *handle)
+@@ -874,6 +866,8 @@ static int gmc_v8_0_late_init(void *handle)
return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0);
}
@@ -733,7 +806,7 @@ index ba4ad00..0842308 100644
static int gmc_v8_0_sw_init(void *handle)
{
int r;
-@@ -880,6 +874,19 @@ static int gmc_v8_0_sw_init(void *handle)
+@@ -884,6 +878,19 @@ static int gmc_v8_0_sw_init(void *handle)
if (r)
return r;
@@ -875,10 +948,10 @@ index a82b891..7285adb 100644
if (rps->vce_active) {
rps->evclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].evclk;
diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
-index 62c7b1d..73e41a8 100644
+index 200419d..18a2acb 100644
--- a/drivers/gpu/drm/udl/udl_fb.c
+++ b/drivers/gpu/drm/udl/udl_fb.c
-@@ -539,7 +539,7 @@ static int udlfb_create(struct drm_fb_helper *helper,
+@@ -538,7 +538,7 @@ static int udlfb_create(struct drm_fb_helper *helper,
out_destroy_fbi:
drm_fb_helper_release_fbi(helper);
out_gfree:
@@ -901,7 +974,7 @@ index 2a0a784..d7528e0 100644
return 0;
}
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
-index 5dd426f..0df32fe 100644
+index ad71160..ae83af6 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -951,14 +951,6 @@ static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count)
@@ -1029,10 +1102,10 @@ index 5dd426f..0df32fe 100644
if (status >= 0 && hid->driver && hid->driver->reset_resume) {
int ret = hid->driver->reset_resume(hid);
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
-index 01a4f05..3c0f47a 100644
+index 99ef77f..94a8875 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
-@@ -2493,6 +2493,17 @@ void wacom_setup_device_quirks(struct wacom *wacom)
+@@ -2409,6 +2409,17 @@ void wacom_setup_device_quirks(struct wacom *wacom)
}
/*
@@ -1075,7 +1148,7 @@ index 36544c4..303d0c9 100644
sysfs_remove_group(&spi->dev.kobj, &max1110_attr_group);
sysfs_remove_group(&spi->dev.kobj, &max1111_attr_group);
diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c
-index 2d33f1e..291c61a 100644
+index c73331f7..2072a31 100644
--- a/drivers/iio/accel/bmc150-accel-core.c
+++ b/drivers/iio/accel/bmc150-accel-core.c
@@ -547,7 +547,7 @@ static int bmc150_accel_get_axis(struct bmc150_accel_data *data,
@@ -1113,7 +1186,7 @@ index 2d33f1e..291c61a 100644
.event_spec = &bmc150_accel_event, \
.num_event_specs = 1 \
diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
-index 02ff789..acb3b30 100644
+index bbce3b0..4dac567 100644
--- a/drivers/iio/gyro/bmg160_core.c
+++ b/drivers/iio/gyro/bmg160_core.c
@@ -452,7 +452,7 @@ static int bmg160_get_temp(struct bmg160_data *data, int *val)
@@ -1160,6 +1233,18 @@ index 02ff789..acb3b30 100644
}
mutex_unlock(&data->mutex);
+diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
+index 139ae91..5b6abc5 100644
+--- a/drivers/iio/industrialio-buffer.c
++++ b/drivers/iio/industrialio-buffer.c
+@@ -645,6 +645,7 @@ static int iio_verify_update(struct iio_dev *indio_dev,
+ unsigned int modes;
+
+ memset(config, 0, sizeof(*config));
++ config->watermark = ~0;
+
+ /*
+ * If there is just one buffer and we are removing it there is nothing
diff --git a/drivers/iio/magnetometer/st_magn.h b/drivers/iio/magnetometer/st_magn.h
index 06a4d9c..9daca46 100644
--- a/drivers/iio/magnetometer/st_magn.h
@@ -1187,10 +1272,10 @@ index 0e3b009..515bb8b 100644
ret = iommu_group_add_device(group, dev);
diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
-index 15516a6..323aad3 100644
+index 2d782ce..7ae89c6 100644
--- a/drivers/media/platform/coda/coda-common.c
+++ b/drivers/media/platform/coda/coda-common.c
-@@ -2119,14 +2119,12 @@ static int coda_probe(struct platform_device *pdev)
+@@ -2118,14 +2118,12 @@ static int coda_probe(struct platform_device *pdev)
pdev_id = of_id ? of_id->data : platform_get_device_id(pdev);
@@ -1222,10 +1307,10 @@ index 6310aca..d41ae95 100644
vsp1_sru_write(sru, VI6_SRU_CTRL1, VI6_SRU_CTRL1_PARAM5);
diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c
-index 0934024..d91ded7 100644
+index 9e29e70..d898880 100644
--- a/drivers/media/usb/au0828/au0828-core.c
+++ b/drivers/media/usb/au0828/au0828-core.c
-@@ -159,7 +159,7 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
+@@ -192,7 +192,7 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
Set the status so poll routines can check and avoid
access after disconnect.
*/
@@ -1257,7 +1342,7 @@ index b0f0679..3d6687f 100644
au8522_rc_clear(ir, 0xe0, 1 << 4);
}
diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c
-index 45c622e..7b2fe1b 100644
+index a136257..8bc69af 100644
--- a/drivers/media/usb/au0828/au0828-video.c
+++ b/drivers/media/usb/au0828/au0828-video.c
@@ -104,14 +104,13 @@ static inline void print_err_status(struct au0828_dev *dev,
@@ -1289,7 +1374,7 @@ index 45c622e..7b2fe1b 100644
return 0;
if (urb->status < 0) {
-@@ -766,10 +765,10 @@ static int au0828_stream_interrupt(struct au0828_dev *dev)
+@@ -822,10 +821,10 @@ static int au0828_stream_interrupt(struct au0828_dev *dev)
int ret = 0;
dev->stream_state = STREAM_INTERRUPT;
@@ -1302,7 +1387,7 @@ index 45c622e..7b2fe1b 100644
dprintk(1, "%s device is misconfigured!\n", __func__);
return ret;
}
-@@ -958,7 +957,7 @@ static int au0828_v4l2_open(struct file *filp)
+@@ -1014,7 +1013,7 @@ static int au0828_v4l2_open(struct file *filp)
int ret;
dprintk(1,
@@ -1311,7 +1396,7 @@ index 45c622e..7b2fe1b 100644
__func__, dev->std_set_in_tuner_core, dev->dev_state,
dev->streaming_users, dev->users);
-@@ -977,7 +976,7 @@ static int au0828_v4l2_open(struct file *filp)
+@@ -1033,7 +1032,7 @@ static int au0828_v4l2_open(struct file *filp)
au0828_analog_stream_enable(dev);
au0828_analog_stream_reset(dev);
dev->stream_state = STREAM_OFF;
@@ -1320,7 +1405,7 @@ index 45c622e..7b2fe1b 100644
}
dev->users++;
mutex_unlock(&dev->lock);
-@@ -991,7 +990,7 @@ static int au0828_v4l2_close(struct file *filp)
+@@ -1047,7 +1046,7 @@ static int au0828_v4l2_close(struct file *filp)
struct video_device *vdev = video_devdata(filp);
dprintk(1,
@@ -1329,7 +1414,7 @@ index 45c622e..7b2fe1b 100644
__func__, dev->std_set_in_tuner_core, dev->dev_state,
dev->streaming_users, dev->users);
-@@ -1007,7 +1006,7 @@ static int au0828_v4l2_close(struct file *filp)
+@@ -1063,7 +1062,7 @@ static int au0828_v4l2_close(struct file *filp)
del_timer_sync(&dev->vbi_timeout);
}
@@ -1338,7 +1423,7 @@ index 45c622e..7b2fe1b 100644
goto end;
if (dev->users == 1) {
-@@ -1036,7 +1035,7 @@ static void au0828_init_tuner(struct au0828_dev *dev)
+@@ -1092,7 +1091,7 @@ static void au0828_init_tuner(struct au0828_dev *dev)
.type = V4L2_TUNER_ANALOG_TV,
};
@@ -1347,7 +1432,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
if (dev->std_set_in_tuner_core)
-@@ -1108,7 +1107,7 @@ static int vidioc_querycap(struct file *file, void *priv,
+@@ -1164,7 +1163,7 @@ static int vidioc_querycap(struct file *file, void *priv,
struct video_device *vdev = video_devdata(file);
struct au0828_dev *dev = video_drvdata(file);
@@ -1356,7 +1441,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
strlcpy(cap->driver, "au0828", sizeof(cap->driver));
-@@ -1151,7 +1150,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
+@@ -1207,7 +1206,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1365,7 +1450,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
f->fmt.pix.width = dev->width;
-@@ -1170,7 +1169,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
+@@ -1226,7 +1225,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1374,7 +1459,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
return au0828_set_format(dev, VIDIOC_TRY_FMT, f);
-@@ -1182,7 +1181,7 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
+@@ -1238,7 +1237,7 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
struct au0828_dev *dev = video_drvdata(file);
int rc;
@@ -1383,7 +1468,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
rc = check_dev(dev);
-@@ -1204,7 +1203,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
+@@ -1260,7 +1259,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1392,7 +1477,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
if (norm == dev->std)
-@@ -1236,7 +1235,7 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
+@@ -1292,7 +1291,7 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1401,7 +1486,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
*norm = dev->std;
-@@ -1259,7 +1258,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
+@@ -1315,7 +1314,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
[AU0828_VMUX_DEBUG] = "tv debug"
};
@@ -1410,7 +1495,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
tmp = input->index;
-@@ -1289,7 +1288,7 @@ static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
+@@ -1345,7 +1344,7 @@ static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1419,7 +1504,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
*i = dev->ctrl_input;
-@@ -1300,7 +1299,7 @@ static void au0828_s_input(struct au0828_dev *dev, int index)
+@@ -1356,7 +1355,7 @@ static void au0828_s_input(struct au0828_dev *dev, int index)
{
int i;
@@ -1428,7 +1513,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
switch (AUVI_INPUT(index).type) {
-@@ -1385,7 +1384,7 @@ static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
+@@ -1441,7 +1440,7 @@ static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1437,7 +1522,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
a->index = dev->ctrl_ainput;
-@@ -1405,7 +1404,7 @@ static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio
+@@ -1461,7 +1460,7 @@ static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio
if (a->index != dev->ctrl_ainput)
return -EINVAL;
@@ -1446,7 +1531,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
return 0;
}
-@@ -1417,7 +1416,7 @@ static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
+@@ -1473,7 +1472,7 @@ static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
if (t->index != 0)
return -EINVAL;
@@ -1455,7 +1540,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
strcpy(t->name, "Auvitek tuner");
-@@ -1437,7 +1436,7 @@ static int vidioc_s_tuner(struct file *file, void *priv,
+@@ -1493,7 +1492,7 @@ static int vidioc_s_tuner(struct file *file, void *priv,
if (t->index != 0)
return -EINVAL;
@@ -1464,7 +1549,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
au0828_init_tuner(dev);
-@@ -1459,7 +1458,7 @@ static int vidioc_g_frequency(struct file *file, void *priv,
+@@ -1515,7 +1514,7 @@ static int vidioc_g_frequency(struct file *file, void *priv,
if (freq->tuner != 0)
return -EINVAL;
@@ -1473,7 +1558,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
freq->frequency = dev->ctrl_freq;
return 0;
-@@ -1474,7 +1473,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
+@@ -1530,7 +1529,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
if (freq->tuner != 0)
return -EINVAL;
@@ -1482,7 +1567,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
au0828_init_tuner(dev);
-@@ -1500,7 +1499,7 @@ static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
+@@ -1556,7 +1555,7 @@ static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1491,7 +1576,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
format->fmt.vbi.samples_per_line = dev->vbi_width;
-@@ -1526,7 +1525,7 @@ static int vidioc_cropcap(struct file *file, void *priv,
+@@ -1582,7 +1581,7 @@ static int vidioc_cropcap(struct file *file, void *priv,
if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL;
@@ -1500,7 +1585,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
cc->bounds.left = 0;
-@@ -1548,7 +1547,7 @@ static int vidioc_g_register(struct file *file, void *priv,
+@@ -1604,7 +1603,7 @@ static int vidioc_g_register(struct file *file, void *priv,
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1509,7 +1594,7 @@ index 45c622e..7b2fe1b 100644
dev->std_set_in_tuner_core, dev->dev_state);
reg->val = au0828_read(dev, reg->reg);
-@@ -1561,7 +1560,7 @@ static int vidioc_s_register(struct file *file, void *priv,
+@@ -1617,7 +1616,7 @@ static int vidioc_s_register(struct file *file, void *priv,
{
struct au0828_dev *dev = video_drvdata(file);
@@ -1519,7 +1604,7 @@ index 45c622e..7b2fe1b 100644
return au0828_writereg(dev, reg->reg, reg->val);
diff --git a/drivers/media/usb/au0828/au0828.h b/drivers/media/usb/au0828/au0828.h
-index 60b5939..d1b6405a 100644
+index 8276072..b28a05d 100644
--- a/drivers/media/usb/au0828/au0828.h
+++ b/drivers/media/usb/au0828/au0828.h
@@ -21,6 +21,7 @@
@@ -1552,37 +1637,8 @@ index 60b5939..d1b6405a 100644
enum au0828_stream_state stream_state;
wait_queue_head_t open;
-diff --git a/drivers/media/usb/usbvision/usbvision-video.c b/drivers/media/usb/usbvision/usbvision-video.c
-index b693206..d1dc1a1 100644
---- a/drivers/media/usb/usbvision/usbvision-video.c
-+++ b/drivers/media/usb/usbvision/usbvision-video.c
-@@ -1463,9 +1463,23 @@ static int usbvision_probe(struct usb_interface *intf,
-
- if (usbvision_device_data[model].interface >= 0)
- interface = &dev->actconfig->interface[usbvision_device_data[model].interface]->altsetting[0];
-- else
-+ else if (ifnum < dev->actconfig->desc.bNumInterfaces)
- interface = &dev->actconfig->interface[ifnum]->altsetting[0];
-+ else {
-+ dev_err(&intf->dev, "interface %d is invalid, max is %d\n",
-+ ifnum, dev->actconfig->desc.bNumInterfaces - 1);
-+ ret = -ENODEV;
-+ goto err_usb;
-+ }
-+
-+ if (interface->desc.bNumEndpoints < 2) {
-+ dev_err(&intf->dev, "interface %d has %d endpoints, but must"
-+ " have minimum 2\n", ifnum, interface->desc.bNumEndpoints);
-+ ret = -ENODEV;
-+ goto err_usb;
-+ }
- endpoint = &interface->endpoint[1].desc;
-+
- if (!usb_endpoint_xfer_isoc(endpoint)) {
- dev_err(&intf->dev, "%s: interface %d. has non-ISO endpoint!\n",
- __func__, ifnum);
diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
-index 45ee07d..6101548 100644
+index df3b8ec..a04d0f7 100644
--- a/drivers/mmc/host/sdhci-pci-core.c
+++ b/drivers/mmc/host/sdhci-pci-core.c
@@ -390,6 +390,7 @@ static int byt_sd_probe_slot(struct sdhci_pci_slot *slot)
@@ -1638,11 +1694,142 @@ index d1a0b4d..89e7151 100644
#define PCI_DEVICE_ID_INTEL_APL_SD 0x5aca
#define PCI_DEVICE_ID_INTEL_APL_EMMC 0x5acc
#define PCI_DEVICE_ID_INTEL_APL_SDIO 0x5ad0
+diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
+index c7f27fe..452bf500 100644
+--- a/drivers/mmc/host/sdhci-pxav3.c
++++ b/drivers/mmc/host/sdhci-pxav3.c
+@@ -309,8 +309,30 @@ static void pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
+ __func__, uhs, ctrl_2);
+ }
+
++static void pxav3_set_power(struct sdhci_host *host, unsigned char mode,
++ unsigned short vdd)
++{
++ struct mmc_host *mmc = host->mmc;
++ u8 pwr = host->pwr;
++
++ sdhci_set_power(host, mode, vdd);
++
++ if (host->pwr == pwr)
++ return;
++
++ if (host->pwr == 0)
++ vdd = 0;
++
++ if (!IS_ERR(mmc->supply.vmmc)) {
++ spin_unlock_irq(&host->lock);
++ mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
++ spin_lock_irq(&host->lock);
++ }
++}
++
+ static const struct sdhci_ops pxav3_sdhci_ops = {
+ .set_clock = sdhci_set_clock,
++ .set_power = pxav3_set_power,
+ .platform_send_init_74_clocks = pxav3_gen_init_74_clocks,
+ .get_max_clock = sdhci_pltfm_clk_get_max_clock,
+ .set_bus_width = sdhci_set_bus_width,
+diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
+index 8059d72..6d485b5 100644
+--- a/drivers/mmc/host/sdhci.c
++++ b/drivers/mmc/host/sdhci.c
+@@ -1250,10 +1250,24 @@ clock_set:
+ }
+ EXPORT_SYMBOL_GPL(sdhci_set_clock);
+
+-static void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
+- unsigned short vdd)
++static void sdhci_set_power_reg(struct sdhci_host *host, unsigned char mode,
++ unsigned short vdd)
+ {
+ struct mmc_host *mmc = host->mmc;
++
++ spin_unlock_irq(&host->lock);
++ mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
++ spin_lock_irq(&host->lock);
++
++ if (mode != MMC_POWER_OFF)
++ sdhci_writeb(host, SDHCI_POWER_ON, SDHCI_POWER_CONTROL);
++ else
++ sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
++}
++
++void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
++ unsigned short vdd)
++{
+ u8 pwr = 0;
+
+ if (mode != MMC_POWER_OFF) {
+@@ -1285,7 +1299,6 @@ static void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
+ sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
+ if (host->quirks2 & SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON)
+ sdhci_runtime_pm_bus_off(host);
+- vdd = 0;
+ } else {
+ /*
+ * Spec says that we should clear the power reg before setting
+@@ -1316,12 +1329,20 @@ static void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
+ if (host->quirks & SDHCI_QUIRK_DELAY_AFTER_POWER)
+ mdelay(10);
+ }
++}
++EXPORT_SYMBOL_GPL(sdhci_set_power);
+
+- if (!IS_ERR(mmc->supply.vmmc)) {
+- spin_unlock_irq(&host->lock);
+- mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
+- spin_lock_irq(&host->lock);
+- }
++static void __sdhci_set_power(struct sdhci_host *host, unsigned char mode,
++ unsigned short vdd)
++{
++ struct mmc_host *mmc = host->mmc;
++
++ if (host->ops->set_power)
++ host->ops->set_power(host, mode, vdd);
++ else if (!IS_ERR(mmc->supply.vmmc))
++ sdhci_set_power_reg(host, mode, vdd);
++ else
++ sdhci_set_power(host, mode, vdd);
+ }
+
+ /*****************************************************************************\
+@@ -1471,7 +1492,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios)
+ }
+ }
+
+- sdhci_set_power(host, ios->power_mode, ios->vdd);
++ __sdhci_set_power(host, ios->power_mode, ios->vdd);
+
+ if (host->ops->platform_send_init_74_clocks)
+ host->ops->platform_send_init_74_clocks(host, ios->power_mode);
+diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
+index 0115e99..033d72b 100644
+--- a/drivers/mmc/host/sdhci.h
++++ b/drivers/mmc/host/sdhci.h
+@@ -529,6 +529,8 @@ struct sdhci_ops {
+ #endif
+
+ void (*set_clock)(struct sdhci_host *host, unsigned int clock);
++ void (*set_power)(struct sdhci_host *host, unsigned char mode,
++ unsigned short vdd);
+
+ int (*enable_dma)(struct sdhci_host *host);
+ unsigned int (*get_max_clock)(struct sdhci_host *host);
+@@ -660,6 +662,8 @@ static inline bool sdhci_sdio_irq_enabled(struct sdhci_host *host)
+ }
+
+ void sdhci_set_clock(struct sdhci_host *host, unsigned int clock);
++void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
++ unsigned short vdd);
+ void sdhci_set_bus_width(struct sdhci_host *host, int width);
+ void sdhci_reset(struct sdhci_host *host, u8 mask);
+ void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing);
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
-index 28bbca0..b3d70a7 100644
+index b7f1a99..5ec8195 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
-@@ -3260,6 +3260,30 @@ static int bond_close(struct net_device *bond_dev)
+@@ -3308,6 +3308,30 @@ static int bond_close(struct net_device *bond_dev)
return 0;
}
@@ -1673,7 +1860,7 @@ index 28bbca0..b3d70a7 100644
static struct rtnl_link_stats64 *bond_get_stats(struct net_device *bond_dev,
struct rtnl_link_stats64 *stats)
{
-@@ -3268,43 +3292,23 @@ static struct rtnl_link_stats64 *bond_get_stats(struct net_device *bond_dev,
+@@ -3316,43 +3340,23 @@ static struct rtnl_link_stats64 *bond_get_stats(struct net_device *bond_dev,
struct list_head *iter;
struct slave *slave;
@@ -1727,7 +1914,7 @@ index 28bbca0..b3d70a7 100644
return stats;
}
-@@ -4118,6 +4122,7 @@ void bond_setup(struct net_device *bond_dev)
+@@ -4166,6 +4170,7 @@ void bond_setup(struct net_device *bond_dev)
struct bonding *bond = netdev_priv(bond_dev);
spin_lock_init(&bond->mode_lock);
@@ -1736,7 +1923,7 @@ index 28bbca0..b3d70a7 100644
/* Initialize pointers */
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
-index 17f017a..0fb3f8d 100644
+index d7e01a7..6746fd0 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -1197,7 +1197,7 @@ static unsigned int __bcmgenet_tx_reclaim(struct net_device *dev,
@@ -1757,31 +1944,46 @@ index 17f017a..0fb3f8d 100644
length_status = (skb_len << DMA_BUFLENGTH_SHIFT) | dma_desc_flags |
(priv->hw_params->qtag_mask << DMA_TX_QTAG_SHIFT) |
DMA_TX_APPEND_CRC;
-diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c
-index 060dd39..973dade 100644
---- a/drivers/net/ethernet/jme.c
-+++ b/drivers/net/ethernet/jme.c
-@@ -3312,13 +3312,14 @@ jme_resume(struct device *dev)
- jme_reset_phy_processor(jme);
- jme_phy_calibration(jme);
- jme_phy_setEA(jme);
-- jme_start_irq(jme);
- netif_device_attach(netdev);
-
- atomic_inc(&jme->link_changing);
-
- jme_reset_link(jme);
-
-+ jme_start_irq(jme);
+diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
+index acb1c5b..2ee05ce 100644
+--- a/drivers/net/ethernet/marvell/mvneta.c
++++ b/drivers/net/ethernet/marvell/mvneta.c
+@@ -3070,17 +3070,17 @@ static int mvneta_stop(struct net_device *dev)
+ struct mvneta_port *pp = netdev_priv(dev);
+
+ /* Inform that we are stopping so we don't want to setup the
+- * driver for new CPUs in the notifiers
++ * driver for new CPUs in the notifiers. The code of the
++ * notifier for CPU online is protected by the same spinlock,
++ * so when we get the lock, the notifer work is done.
+ */
+ spin_lock(&pp->lock);
+ pp->is_stopped = true;
++ spin_unlock(&pp->lock);
+
- return 0;
- }
+ mvneta_stop_dev(pp);
+ mvneta_mdio_remove(pp);
+ unregister_cpu_notifier(&pp->cpu_notifier);
+- /* Now that the notifier are unregistered, we can release le
+- * lock
+- */
+- spin_unlock(&pp->lock);
+ on_each_cpu(mvneta_percpu_disable, pp, true);
+ free_percpu_irq(dev->irq, pp->ports);
+ mvneta_cleanup_rxqs(pp);
+@@ -3612,6 +3612,7 @@ static int mvneta_probe(struct platform_device *pdev)
+ dev->ethtool_ops = &mvneta_eth_tool_ops;
+
+ pp = netdev_priv(dev);
++ spin_lock_init(&pp->lock);
+ pp->phy_node = phy_node;
+ pp->phy_interface = phy_mode;
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
-index cad6c44..d314d96 100644
+index 25ce1b0..cd9b2b2 100644
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
-@@ -3132,7 +3132,7 @@ static int verify_qp_parameters(struct mlx4_dev *dev,
+@@ -3141,7 +3141,7 @@ static int verify_qp_parameters(struct mlx4_dev *dev,
case QP_TRANS_RTS2RTS:
case QP_TRANS_SQD2SQD:
case QP_TRANS_SQD2RTS:
@@ -1790,7 +1992,7 @@ index cad6c44..d314d96 100644
if (optpar & MLX4_QP_OPTPAR_PRIMARY_ADDR_PATH) {
port = (qp_ctx->pri_path.sched_queue >> 6 & 1) + 1;
if (dev->caps.port_mask[port] != MLX4_PORT_TYPE_IB)
-@@ -3151,6 +3151,7 @@ static int verify_qp_parameters(struct mlx4_dev *dev,
+@@ -3160,6 +3160,7 @@ static int verify_qp_parameters(struct mlx4_dev *dev,
if (qp_ctx->alt_path.mgid_index >= num_gids)
return -EINVAL;
}
@@ -1799,10 +2001,10 @@ index cad6c44..d314d96 100644
default:
break;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
-index 4365c8b..605f641 100644
+index 3b89ed2..65a115f 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
-@@ -61,6 +61,8 @@ struct mlxsw_sp {
+@@ -118,6 +118,8 @@ struct mlxsw_sp {
#define MLXSW_SP_DEFAULT_LEARNING_INTERVAL 100
unsigned int interval; /* ms */
} fdb_notify;
@@ -1810,12 +2012,12 @@ index 4365c8b..605f641 100644
+#define MLXSW_SP_MAX_AGEING_TIME 1000000
#define MLXSW_SP_DEFAULT_AGEING_TIME 300
u32 ageing_time;
- struct {
+ struct mlxsw_sp_upper master_bridge;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
-index 7dbeafa..d4c4c2b 100644
+index 7b56098..e1c74ef 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
-@@ -232,8 +232,13 @@ static int mlxsw_sp_port_attr_br_ageing_set(struct mlxsw_sp_port *mlxsw_sp_port,
+@@ -311,8 +311,13 @@ static int mlxsw_sp_port_attr_br_ageing_set(struct mlxsw_sp_port *mlxsw_sp_port,
unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t);
u32 ageing_time = jiffies_to_msecs(ageing_jiffies) / 1000;
@@ -1972,24 +2174,11 @@ index 9979764..b28e73e 100644
skb = new_skb;
/* Frame error, so drop the packet. */
-diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
-index 689a4a5..1ef0393 100644
---- a/drivers/net/ethernet/qualcomm/qca_spi.c
-+++ b/drivers/net/ethernet/qualcomm/qca_spi.c
-@@ -811,7 +811,7 @@ qcaspi_netdev_setup(struct net_device *dev)
- dev->netdev_ops = &qcaspi_netdev_ops;
- qcaspi_set_ethtool_ops(dev);
- dev->watchdog_timeo = QCASPI_TX_TIMEOUT;
-- dev->flags = IFF_MULTICAST;
-+ dev->priv_flags &= ~IFF_TX_SKB_SHARING;
- dev->tx_queue_len = 100;
-
- qca = netdev_priv(dev);
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
-index 6a8fc0f..36fc942 100644
+index 7384499..01f6d5b 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
-@@ -1185,11 +1185,8 @@ static void sh_eth_ring_format(struct net_device *ndev)
+@@ -1136,11 +1136,8 @@ static void sh_eth_ring_format(struct net_device *ndev)
break;
sh_eth_set_receive_align(skb);
@@ -1997,33 +2186,33 @@ index 6a8fc0f..36fc942 100644
- rxdesc = &mdp->rx_ring[i];
/* The size of the buffer is a multiple of 32 bytes. */
buf_len = ALIGN(mdp->rx_buf_sz, 32);
-- rxdesc->len = cpu_to_edmac(mdp, buf_len << 16);
+- rxdesc->len = cpu_to_le32(buf_len << 16);
dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len,
DMA_FROM_DEVICE);
if (dma_mapping_error(&ndev->dev, dma_addr)) {
-@@ -1197,6 +1194,10 @@ static void sh_eth_ring_format(struct net_device *ndev)
+@@ -1148,6 +1145,10 @@ static void sh_eth_ring_format(struct net_device *ndev)
break;
}
mdp->rx_skbuff[i] = skb;
+
+ /* RX descriptor */
+ rxdesc = &mdp->rx_ring[i];
-+ rxdesc->len = cpu_to_edmac(mdp, buf_len << 16);
- rxdesc->addr = cpu_to_edmac(mdp, dma_addr);
- rxdesc->status = cpu_to_edmac(mdp, RD_RACT | RD_RFP);
++ rxdesc->len = cpu_to_le32(buf_len << 16);
+ rxdesc->addr = cpu_to_le32(dma_addr);
+ rxdesc->status = cpu_to_le32(RD_RACT | RD_RFP);
-@@ -1212,7 +1213,8 @@ static void sh_eth_ring_format(struct net_device *ndev)
+@@ -1163,7 +1164,8 @@ static void sh_eth_ring_format(struct net_device *ndev)
mdp->dirty_rx = (u32) (i - mdp->num_rx_ring);
/* Mark the last entry as wrapping the ring. */
-- rxdesc->status |= cpu_to_edmac(mdp, RD_RDLE);
+- rxdesc->status |= cpu_to_le32(RD_RDLE);
+ if (rxdesc)
-+ rxdesc->status |= cpu_to_edmac(mdp, RD_RDLE);
++ rxdesc->status |= cpu_to_le32(RD_RDLE);
memset(mdp->tx_ring, 0, tx_ringsize);
diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
-index 52ec3d6..2b34622 100644
+index 166a7fc..f39e719 100644
--- a/drivers/net/ethernet/rocker/rocker.c
+++ b/drivers/net/ethernet/rocker/rocker.c
@@ -239,6 +239,7 @@ struct rocker {
@@ -2071,7 +2260,7 @@ index 52ec3d6..2b34622 100644
if (err) {
dev_err(&pdev->dev, "failed to probe ports\n");
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
-index 0fc5219..159a687 100644
+index d636d05..95394ed 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -760,6 +760,8 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
@@ -2099,10 +2288,10 @@ index 0fc5219..159a687 100644
skb = macvtap_alloc_skb(&q->sk, MACVTAP_RESERVE, copylen,
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
-index 9a863c6..174e06e 100644
+index d61da9ec..aafe237 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
-@@ -567,7 +567,7 @@ static int get_filter(void __user *arg, struct sock_filter **p)
+@@ -575,7 +575,7 @@ static int get_filter(void __user *arg, struct sock_filter **p)
static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
@@ -2111,7 +2300,7 @@ index 9a863c6..174e06e 100644
struct ppp *ppp;
int err = -EFAULT, val, val2, i;
struct ppp_idle idle;
-@@ -577,9 +577,14 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+@@ -585,9 +585,14 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
void __user *argp = (void __user *)arg;
int __user *p = argp;
@@ -2129,7 +2318,7 @@ index 9a863c6..174e06e 100644
if (cmd == PPPIOCDETACH) {
/*
-@@ -594,7 +599,6 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+@@ -602,7 +607,6 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
* this fd and reopening /dev/ppp.
*/
err = -EINVAL;
@@ -2137,7 +2326,7 @@ index 9a863c6..174e06e 100644
if (pf->kind == INTERFACE) {
ppp = PF_TO_PPP(pf);
rtnl_lock();
-@@ -608,15 +612,13 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+@@ -616,15 +620,13 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
} else
pr_warn("PPPIOCDETACH file->f_count=%ld\n",
atomic_long_read(&file->f_count));
@@ -2154,7 +2343,7 @@ index 9a863c6..174e06e 100644
pch = PF_TO_CHANNEL(pf);
switch (cmd) {
-@@ -638,17 +640,16 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+@@ -646,17 +648,16 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
err = chan->ops->ioctl(chan, cmd, arg);
up_read(&pch->chan_sem);
}
@@ -2175,7 +2364,7 @@ index 9a863c6..174e06e 100644
ppp = PF_TO_PPP(pf);
switch (cmd) {
case PPPIOCSMRU:
-@@ -823,7 +824,10 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+@@ -831,7 +832,10 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
default:
err = -ENOTTY;
}
@@ -2186,7 +2375,7 @@ index 9a863c6..174e06e 100644
return err;
}
-@@ -836,7 +840,6 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
+@@ -844,7 +848,6 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
struct ppp_net *pn;
int __user *p = (int __user *)arg;
@@ -2194,7 +2383,7 @@ index 9a863c6..174e06e 100644
switch (cmd) {
case PPPIOCNEWUNIT:
/* Create a new ppp unit */
-@@ -886,7 +889,7 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
+@@ -894,7 +897,7 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
default:
err = -ENOTTY;
}
@@ -2203,7 +2392,7 @@ index 9a863c6..174e06e 100644
return err;
}
-@@ -2290,7 +2293,7 @@ int ppp_register_net_channel(struct net *net, struct ppp_channel *chan)
+@@ -2304,7 +2307,7 @@ int ppp_register_net_channel(struct net *net, struct ppp_channel *chan)
pch->ppp = NULL;
pch->chan = chan;
@@ -2212,7 +2401,7 @@ index 9a863c6..174e06e 100644
chan->ppp = pch;
init_ppp_file(&pch->file, CHANNEL);
pch->file.hdrlen = chan->hdrlen;
-@@ -2387,6 +2390,8 @@ ppp_unregister_channel(struct ppp_channel *chan)
+@@ -2401,6 +2404,8 @@ ppp_unregister_channel(struct ppp_channel *chan)
spin_lock_bh(&pn->all_channels_lock);
list_del(&pch->list);
spin_unlock_bh(&pn->all_channels_lock);
@@ -2221,16 +2410,8 @@ index 9a863c6..174e06e 100644
pch->file.dead = 1;
wake_up_interruptible(&pch->file.rwait);
-@@ -2803,6 +2808,7 @@ static struct ppp *ppp_create_interface(struct net *net, int unit,
-
- out2:
- mutex_unlock(&pn->all_ppp_mutex);
-+ rtnl_unlock();
- free_netdev(dev);
- out1:
- *retp = ret;
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
-index f0db770..2d186bd 100644
+index 88bb8cc..81ecc2e 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -621,7 +621,8 @@ static int tun_attach(struct tun_struct *tun, struct file *file, bool skip_filte
@@ -2259,7 +2440,7 @@ index f0db770..2d186bd 100644
break;
}
}
-@@ -1463,6 +1462,8 @@ static void tun_setup(struct net_device *dev)
+@@ -1466,6 +1465,8 @@ static void tun_setup(struct net_device *dev)
dev->ethtool_ops = &tun_ethtool_ops;
dev->destructor = tun_free_netdev;
@@ -2268,7 +2449,7 @@ index f0db770..2d186bd 100644
}
/* Trivial set of netlink ops to allow deleting tun or tap
-@@ -1804,7 +1805,7 @@ static void tun_detach_filter(struct tun_struct *tun, int n)
+@@ -1807,7 +1808,7 @@ static void tun_detach_filter(struct tun_struct *tun, int n)
for (i = 0; i < n; i++) {
tfile = rtnl_dereference(tun->tfiles[i]);
@@ -2277,7 +2458,7 @@ index f0db770..2d186bd 100644
}
tun->filter_attached = false;
-@@ -1817,7 +1818,8 @@ static int tun_attach_filter(struct tun_struct *tun)
+@@ -1820,7 +1821,8 @@ static int tun_attach_filter(struct tun_struct *tun)
for (i = 0; i < tun->numqueues; i++) {
tfile = rtnl_dereference(tun->tfiles[i]);
@@ -2287,54 +2468,11 @@ index f0db770..2d186bd 100644
if (ret) {
tun_detach_filter(tun, i);
return ret;
-diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
-index 3da70bf..7cba2c3 100644
---- a/drivers/net/usb/cdc_ether.c
-+++ b/drivers/net/usb/cdc_ether.c
-@@ -160,6 +160,12 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)
- info->u = header.usb_cdc_union_desc;
- info->header = header.usb_cdc_header_desc;
- info->ether = header.usb_cdc_ether_desc;
-+ if (!info->u) {
-+ if (rndis)
-+ goto skip;
-+ else /* in that case a quirk is mandatory */
-+ goto bad_desc;
-+ }
- /* we need a master/control interface (what we're
- * probed with) and a slave/data interface; union
- * descriptors sort this all out.
-@@ -256,7 +262,7 @@ skip:
- goto bad_desc;
- }
-
-- } else if (!info->header || !info->u || (!rndis && !info->ether)) {
-+ } else if (!info->header || (!rndis && !info->ether)) {
- dev_dbg(&intf->dev, "missing cdc %s%s%sdescriptor\n",
- info->header ? "" : "header ",
- info->u ? "" : "union ",
-diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
-index e8a1144..8c2bb77 100644
---- a/drivers/net/usb/cdc_ncm.c
-+++ b/drivers/net/usb/cdc_ncm.c
-@@ -794,7 +794,11 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
-
- iface_no = ctx->data->cur_altsetting->desc.bInterfaceNumber;
-
-- /* reset data interface */
-+ /* Reset data interface. Some devices will not reset properly
-+ * unless they are configured first. Toggle the altsetting to
-+ * force a reset
-+ */
-+ usb_set_interface(dev->udev, iface_no, data_altsetting);
- temp = usb_set_interface(dev->udev, iface_no, 0);
- if (temp) {
- dev_dbg(&intf->dev, "set interface failed\n");
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
-index 982e0acd..a34f491 100644
+index a3a4ccf..1232a8c6 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
-@@ -699,6 +699,7 @@ static const struct usb_device_id products[] = {
+@@ -844,6 +844,7 @@ static const struct usb_device_id products[] = {
{QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */
{QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */
{QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
@@ -2342,86 +2480,6 @@ index 982e0acd..a34f491 100644
{QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */
{QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */
{QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */
-@@ -718,8 +719,10 @@ static const struct usb_device_id products[] = {
- {QMI_FIXED_INTF(0x1199, 0x9061, 8)}, /* Sierra Wireless Modem */
- {QMI_FIXED_INTF(0x1199, 0x9070, 8)}, /* Sierra Wireless MC74xx/EM74xx */
- {QMI_FIXED_INTF(0x1199, 0x9070, 10)}, /* Sierra Wireless MC74xx/EM74xx */
-- {QMI_FIXED_INTF(0x1199, 0x9071, 8)}, /* Sierra Wireless MC74xx/EM74xx */
-- {QMI_FIXED_INTF(0x1199, 0x9071, 10)}, /* Sierra Wireless MC74xx/EM74xx */
-+ {QMI_FIXED_INTF(0x1199, 0x9071, 8)}, /* Sierra Wireless MC74xx */
-+ {QMI_FIXED_INTF(0x1199, 0x9071, 10)}, /* Sierra Wireless MC74xx */
-+ {QMI_FIXED_INTF(0x1199, 0x9079, 8)}, /* Sierra Wireless EM74xx */
-+ {QMI_FIXED_INTF(0x1199, 0x9079, 10)}, /* Sierra Wireless EM74xx */
- {QMI_FIXED_INTF(0x1bbb, 0x011e, 4)}, /* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */
- {QMI_FIXED_INTF(0x1bbb, 0x0203, 2)}, /* Alcatel L800MA */
- {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */
-diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
-index 0744bf2..c2ea4e5 100644
---- a/drivers/net/usb/usbnet.c
-+++ b/drivers/net/usb/usbnet.c
-@@ -1766,6 +1766,13 @@ out3:
- if (info->unbind)
- info->unbind (dev, udev);
- out1:
-+ /* subdrivers must undo all they did in bind() if they
-+ * fail it, but we may fail later and a deferred kevent
-+ * may trigger an error resubmitting itself and, worse,
-+ * schedule a timer. So we kill it all just in case.
-+ */
-+ cancel_work_sync(&dev->kevent);
-+ del_timer_sync(&dev->delay);
- free_netdev(net);
- out:
- return status;
-diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
-index 0a242b2..903bda4 100644
---- a/drivers/net/vrf.c
-+++ b/drivers/net/vrf.c
-@@ -114,20 +114,23 @@ static struct dst_ops vrf_dst_ops = {
- #if IS_ENABLED(CONFIG_IPV6)
- static bool check_ipv6_frame(const struct sk_buff *skb)
- {
-- const struct ipv6hdr *ipv6h = (struct ipv6hdr *)skb->data;
-- size_t hlen = sizeof(*ipv6h);
-+ const struct ipv6hdr *ipv6h;
-+ struct ipv6hdr _ipv6h;
- bool rc = true;
-
-- if (skb->len < hlen)
-+ ipv6h = skb_header_pointer(skb, 0, sizeof(_ipv6h), &_ipv6h);
-+ if (!ipv6h)
- goto out;
-
- if (ipv6h->nexthdr == NEXTHDR_ICMP) {
- const struct icmp6hdr *icmph;
-+ struct icmp6hdr _icmph;
-
-- if (skb->len < hlen + sizeof(*icmph))
-+ icmph = skb_header_pointer(skb, sizeof(_ipv6h),
-+ sizeof(_icmph), &_icmph);
-+ if (!icmph)
- goto out;
-
-- icmph = (struct icmp6hdr *)(skb->data + sizeof(*ipv6h));
- switch (icmph->icmp6_type) {
- case NDISC_ROUTER_SOLICITATION:
- case NDISC_ROUTER_ADVERTISEMENT:
-diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
-index e0fcda4..3c0df70 100644
---- a/drivers/net/vxlan.c
-+++ b/drivers/net/vxlan.c
-@@ -1306,8 +1306,10 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
- gbp = (struct vxlanhdr_gbp *)vxh;
- md->gbp = ntohs(gbp->policy_id);
-
-- if (tun_dst)
-+ if (tun_dst) {
- tun_dst->u.tun_info.key.tun_flags |= TUNNEL_VXLAN_OPT;
-+ tun_dst->u.tun_info.options_len = sizeof(*md);
-+ }
-
- if (gbp->dont_learn)
- md->gbp |= VXLAN_GBP_DONT_LEARN;
diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c
index 44541dbc..69b994f 100644
--- a/drivers/net/wan/farsync.c
@@ -2436,10 +2494,10 @@ index 44541dbc..69b994f 100644
dev->irq = card->irq;
diff --git a/drivers/net/wireless/ath/ath9k/eeprom.c b/drivers/net/wireless/ath/ath9k/eeprom.c
-index cc81482..113a43f 100644
+index 73fb423..a794157 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom.c
+++ b/drivers/net/wireless/ath/ath9k/eeprom.c
-@@ -403,10 +403,9 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
+@@ -477,10 +477,9 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
if (match) {
if (AR_SREV_9287(ah)) {
@@ -2451,7 +2509,7 @@ index cc81482..113a43f 100644
ath9k_hw_fill_vpd_table(minPwrT4[i], maxPwrT4[i],
data_9287[idxL].pwrPdg[i],
data_9287[idxL].vpdPdg[i],
-@@ -416,7 +415,7 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
+@@ -490,7 +489,7 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
} else if (eeprom_4k) {
for (i = 0; i < numXpdGains; i++) {
minPwrT4[i] = data_4k[idxL].pwrPdg[i][0];
@@ -2460,7 +2518,7 @@ index cc81482..113a43f 100644
ath9k_hw_fill_vpd_table(minPwrT4[i], maxPwrT4[i],
data_4k[idxL].pwrPdg[i],
data_4k[idxL].vpdPdg[i],
-@@ -426,7 +425,7 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
+@@ -500,7 +499,7 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
} else {
for (i = 0; i < numXpdGains; i++) {
minPwrT4[i] = data_def[idxL].pwrPdg[i][0];
@@ -2470,7 +2528,7 @@ index cc81482..113a43f 100644
data_def[idxL].pwrPdg[i],
data_def[idxL].vpdPdg[i],
diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
-index 496b9b6..5f47356 100644
+index 576eb70..cdbab06 100644
--- a/drivers/nvdimm/bus.c
+++ b/drivers/nvdimm/bus.c
@@ -335,7 +335,7 @@ static const struct nd_cmd_desc __nd_cmd_dimm_descs[] = {
@@ -2483,10 +2541,10 @@ index 496b9b6..5f47356 100644
[ND_CMD_SMART_THRESHOLD] = {
.out_num = 2,
diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
-index 71805a1..9d39745 100644
+index ae81a2f..f0b56b3 100644
--- a/drivers/nvdimm/pfn_devs.c
+++ b/drivers/nvdimm/pfn_devs.c
-@@ -275,7 +275,7 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn)
+@@ -315,7 +315,7 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn)
} else {
/* from init we validate */
if (memcmp(nd_pfn->uuid, pfn_sb->uuid, 16) != 0)
@@ -2494,7 +2552,7 @@ index 71805a1..9d39745 100644
+ return -ENODEV;
}
- /*
+ if (nd_pfn->align > nvdimm_namespace_capacity(ndns)) {
diff --git a/drivers/pcmcia/db1xxx_ss.c b/drivers/pcmcia/db1xxx_ss.c
index 4c2fa05..944674e 100644
--- a/drivers/pcmcia/db1xxx_ss.c
@@ -2566,10 +2624,10 @@ index a5bb939..1029aa7 100644
imx_pinctrl_desc.name = dev_name(&pdev->dev);
diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
-index eebfae0..f844b4a 100644
+index 3524061..c8969dd 100644
--- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
+++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
-@@ -995,7 +995,7 @@ static void nmk_gpio_dbg_show_one(struct seq_file *s,
+@@ -990,7 +990,7 @@ static void nmk_gpio_dbg_show_one(struct seq_file *s,
int val;
if (pull)
@@ -2579,7 +2637,7 @@ index eebfae0..f844b4a 100644
seq_printf(s, " gpio-%-3d (%-20.20s) in %s %s",
gpio,
diff --git a/drivers/pinctrl/pinctrl-pistachio.c b/drivers/pinctrl/pinctrl-pistachio.c
-index 85c9046..6b1a47f 100644
+index 856f736..2673cd9 100644
--- a/drivers/pinctrl/pinctrl-pistachio.c
+++ b/drivers/pinctrl/pinctrl-pistachio.c
@@ -469,27 +469,27 @@ static const char * const pistachio_mips_pll_lock_groups[] = {
@@ -2676,7 +2734,7 @@ index 00265f0..8b381d6 100644
static int sun8i_a33_pinctrl_probe(struct platform_device *pdev)
diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
-index dead97d..a4a5b50 100644
+index 7a2465f..884c2b3 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
@@ -578,7 +578,7 @@ static void sunxi_pinctrl_irq_release_resources(struct irq_data *d)
@@ -2808,8 +2866,23 @@ index e248e81..0afce1a 100644
}
static inline u32 sunxi_irq_status_offset(u16 irq)
+diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
+index b1bf42b..1deb6ad 100644
+--- a/drivers/scsi/scsi.c
++++ b/drivers/scsi/scsi.c
+@@ -784,8 +784,9 @@ void scsi_attach_vpd(struct scsi_device *sdev)
+ int pg83_supported = 0;
+ unsigned char __rcu *vpd_buf, *orig_vpd_buf = NULL;
+
+- if (sdev->skip_vpd_pages)
++ if (!scsi_device_supports_vpd(sdev))
+ return;
++
+ retry_pg0:
+ vpd_buf = kmalloc(vpd_len, GFP_KERNEL);
+ if (!vpd_buf)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index cc84ea7..0d7c6e8 100644
+index 5a5457a..974ca5b 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1275,18 +1275,19 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
@@ -2853,10 +2926,27 @@ index cc84ea7..0d7c6e8 100644
blk_queue_physical_block_size(sdp->request_queue,
sdkp->physical_block_size);
sdkp->device->sector_size = sector_size;
-@@ -2812,11 +2805,6 @@ static int sd_try_extended_inquiry(struct scsi_device *sdp)
- return 0;
+@@ -2795,28 +2788,6 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
+ sdkp->ws10 = 1;
}
+-static int sd_try_extended_inquiry(struct scsi_device *sdp)
+-{
+- /* Attempt VPD inquiry if the device blacklist explicitly calls
+- * for it.
+- */
+- if (sdp->try_vpd_pages)
+- return 1;
+- /*
+- * Although VPD inquiries can go to SCSI-2 type devices,
+- * some USB ones crash on receiving them, and the pages
+- * we currently ask for are for SPC-3 and beyond
+- */
+- if (sdp->scsi_level > SCSI_SPC_2 && !sdp->skip_vpd_pages)
+- return 1;
+- return 0;
+-}
+-
-static inline u32 logical_to_sectors(struct scsi_device *sdev, u32 blocks)
-{
- return blocks << (ilog2(sdev->sector_size) - 9);
@@ -2865,7 +2955,16 @@ index cc84ea7..0d7c6e8 100644
/**
* sd_revalidate_disk - called the first time a new disk is seen,
* performs disk spin up, read_capacity, etc.
-@@ -2900,7 +2888,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
+@@ -2856,7 +2827,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
+ if (sdkp->media_present) {
+ sd_read_capacity(sdkp, buffer);
+
+- if (sd_try_extended_inquiry(sdp)) {
++ if (scsi_device_supports_vpd(sdp)) {
+ sd_read_block_provisioning(sdkp);
+ sd_read_block_limits(sdkp);
+ sd_read_block_characteristics(sdkp);
+@@ -2900,7 +2871,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
/* Combine with controller limits */
q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q));
@@ -2915,32 +3014,6 @@ index e237e9f..df56021 100644
mutex_lock(&dev->buffer_lock);
ion_buffer_add(dev, buffer);
mutex_unlock(&dev->buffer_lock);
-diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 2a27488..84df093 100644
---- a/drivers/usb/core/hub.c
-+++ b/drivers/usb/core/hub.c
-@@ -5392,6 +5392,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
- }
-
- bos = udev->bos;
-+ udev->bos = NULL;
-
- for (i = 0; i < SET_CONFIG_TRIES; ++i) {
-
-@@ -5484,11 +5485,8 @@ done:
- usb_set_usb2_hardware_lpm(udev, 1);
- usb_unlocked_enable_lpm(udev);
- usb_enable_ltm(udev);
-- /* release the new BOS descriptor allocated by hub_port_init() */
-- if (udev->bos != bos) {
-- usb_release_bos_descriptor(udev);
-- udev->bos = bos;
-- }
-+ usb_release_bos_descriptor(udev);
-+ udev->bos = bos;
- return 0;
-
- re_enumerate:
diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
index c0f5c65..f1893e0 100644
--- a/drivers/usb/renesas_usbhs/fifo.c
@@ -2964,7 +3037,7 @@ index c0f5c65..f1893e0 100644
schedule_work(&pkt->work);
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
-index 8f7a78e..fa14198 100644
+index 657f967..2510535 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -158,10 +158,14 @@ static void usbhsg_queue_done(struct usbhs_priv *priv, struct usbhs_pkt *pkt)
@@ -2984,7 +3057,7 @@ index 8f7a78e..fa14198 100644
static void usbhsg_queue_push(struct usbhsg_uep *uep,
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
-index ce0cd6e..9baf081 100644
+index c90a7e4..e4ade8d 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -2,7 +2,7 @@
@@ -3085,7 +3158,7 @@ index 43576ed..9de988a 100644
f |= US_FL_NOT_LOCKABLE;
break;
diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
-index 8e5cf19..4469202 100644
+index 7760fc1..1f413a2 100644
--- a/drivers/virtio/virtio_pci_modern.c
+++ b/drivers/virtio/virtio_pci_modern.c
@@ -17,6 +17,7 @@
@@ -3162,10 +3235,10 @@ index 524c221..4436778 100644
}
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
-index 0f09526..5e5db36 100644
+index 098bb8f..9a30ca6 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
-@@ -1885,7 +1885,7 @@ static int start_ordered_ops(struct inode *inode, loff_t start, loff_t end)
+@@ -1883,7 +1883,7 @@ static int start_ordered_ops(struct inode *inode, loff_t start, loff_t end)
*/
int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
{
@@ -3175,10 +3248,10 @@ index 0f09526..5e5db36 100644
struct btrfs_root *root = BTRFS_I(inode)->root;
struct btrfs_trans_handle *trans;
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
-index 323e12c..0e044d7 100644
+index 978c3a8..849a30a 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
-@@ -4406,6 +4406,127 @@ static int btrfs_log_trailing_hole(struct btrfs_trans_handle *trans,
+@@ -4414,6 +4414,127 @@ static int btrfs_log_trailing_hole(struct btrfs_trans_handle *trans,
return ret;
}
@@ -3306,7 +3379,7 @@ index 323e12c..0e044d7 100644
/* log a single inode in the tree log.
* At least one parent directory for this inode must exist in the tree
* or be logged already.
-@@ -4578,6 +4699,22 @@ again:
+@@ -4586,6 +4707,22 @@ again:
if (min_key.type == BTRFS_INODE_ITEM_KEY)
need_log_inode_item = false;
@@ -3330,10 +3403,10 @@ index 323e12c..0e044d7 100644
if (min_key.type == BTRFS_XATTR_ITEM_KEY) {
if (ins_nr == 0)
diff --git a/fs/dcache.c b/fs/dcache.c
-index 877bcbb..18effa3 100644
+index 2398f9f9..7566b26 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
-@@ -1666,7 +1666,8 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
+@@ -1667,7 +1667,8 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
DCACHE_OP_REVALIDATE |
DCACHE_OP_WEAK_REVALIDATE |
DCACHE_OP_DELETE |
@@ -3343,7 +3416,7 @@ index 877bcbb..18effa3 100644
dentry->d_op = op;
if (!op)
return;
-@@ -1684,6 +1685,8 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
+@@ -1685,6 +1686,8 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
dentry->d_flags |= DCACHE_OP_PRUNE;
if (op->d_select_inode)
dentry->d_flags |= DCACHE_OP_SELECT_INODE;
@@ -3352,11 +3425,44 @@ index 877bcbb..18effa3 100644
}
EXPORT_SYMBOL(d_set_d_op);
+diff --git a/fs/ext4/crypto.c b/fs/ext4/crypto.c
+index 38f7562..ecb5439 100644
+--- a/fs/ext4/crypto.c
++++ b/fs/ext4/crypto.c
+@@ -475,13 +475,16 @@ uint32_t ext4_validate_encryption_key_size(uint32_t mode, uint32_t size)
+ */
+ static int ext4_d_revalidate(struct dentry *dentry, unsigned int flags)
+ {
+- struct inode *dir = d_inode(dentry->d_parent);
+- struct ext4_crypt_info *ci = EXT4_I(dir)->i_crypt_info;
++ struct dentry *dir;
++ struct ext4_crypt_info *ci;
+ int dir_has_key, cached_with_key;
+
+- if (!ext4_encrypted_inode(dir))
++ dir = dget_parent(dentry);
++ if (!ext4_encrypted_inode(d_inode(dir))) {
++ dput(dir);
+ return 0;
+-
++ }
++ ci = EXT4_I(d_inode(dir))->i_crypt_info;
+ if (ci && ci->ci_keyring_key &&
+ (ci->ci_keyring_key->flags & ((1 << KEY_FLAG_INVALIDATED) |
+ (1 << KEY_FLAG_REVOKED) |
+@@ -491,6 +494,7 @@ static int ext4_d_revalidate(struct dentry *dentry, unsigned int flags)
+ /* this should eventually be an flag in d_flags */
+ cached_with_key = dentry->d_fsdata != NULL;
+ dir_has_key = (ci != NULL);
++ dput(dir);
+
+ /*
+ * If the dentry was cached without the key, and it is a
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
-index cc7ca4e..d4156e1 100644
+index 157b458a..b213449 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
-@@ -850,6 +850,29 @@ do { \
+@@ -900,6 +900,29 @@ do { \
#include "extents_status.h"
/*
@@ -3386,8 +3492,43 @@ index cc7ca4e..d4156e1 100644
* fourth extended file system inode data in memory
*/
struct ext4_inode_info {
+diff --git a/fs/ext4/file.c b/fs/ext4/file.c
+index 4cd318f..38847f3 100644
+--- a/fs/ext4/file.c
++++ b/fs/ext4/file.c
+@@ -335,7 +335,7 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
+ struct super_block *sb = inode->i_sb;
+ struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
+ struct vfsmount *mnt = filp->f_path.mnt;
+- struct inode *dir = filp->f_path.dentry->d_parent->d_inode;
++ struct dentry *dir;
+ struct path path;
+ char buf[64], *cp;
+ int ret;
+@@ -379,14 +379,18 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
+ if (ext4_encryption_info(inode) == NULL)
+ return -ENOKEY;
+ }
+- if (ext4_encrypted_inode(dir) &&
+- !ext4_is_child_context_consistent_with_parent(dir, inode)) {
++
++ dir = dget_parent(file_dentry(filp));
++ if (ext4_encrypted_inode(d_inode(dir)) &&
++ !ext4_is_child_context_consistent_with_parent(d_inode(dir), inode)) {
+ ext4_warning(inode->i_sb,
+ "Inconsistent encryption contexts: %lu/%lu\n",
+- (unsigned long) dir->i_ino,
++ (unsigned long) d_inode(dir)->i_ino,
+ (unsigned long) inode->i_ino);
++ dput(dir);
+ return -EPERM;
+ }
++ dput(dir);
+ /*
+ * Set up the jbd2_inode if we are opening the inode for
+ * writing and the journal is present
diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
-index e032a04..9bdbf98 100644
+index 4098acc..796ff0e 100644
--- a/fs/ext4/move_extent.c
+++ b/fs/ext4/move_extent.c
@@ -60,10 +60,10 @@ ext4_double_down_write_data_sem(struct inode *first, struct inode *second)
@@ -3403,7 +3544,7 @@ index e032a04..9bdbf98 100644
}
}
-@@ -483,6 +483,13 @@ mext_check_arguments(struct inode *orig_inode,
+@@ -484,6 +484,13 @@ mext_check_arguments(struct inode *orig_inode,
return -EBUSY;
}
@@ -3418,10 +3559,10 @@ index e032a04..9bdbf98 100644
if (!(ext4_test_inode_flag(orig_inode, EXT4_INODE_EXTENTS))) {
ext4_debug("ext4 move extent: orig file is not extents "
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
-index c9ab67d..ba1cf0b 100644
+index 3ed01ec..a76ca67 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
-@@ -1292,9 +1292,9 @@ static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
+@@ -1324,9 +1324,9 @@ static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
return -1;
}
if (ext4_has_feature_quota(sb)) {
@@ -3434,7 +3575,7 @@ index c9ab67d..ba1cf0b 100644
}
qname = match_strdup(args);
if (!qname) {
-@@ -1657,10 +1657,10 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
+@@ -1689,10 +1689,10 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
return -1;
}
if (ext4_has_feature_quota(sb)) {
@@ -3448,7 +3589,7 @@ index c9ab67d..ba1cf0b 100644
}
sbi->s_jquota_fmt = m->mount_opt;
#endif
-@@ -1721,11 +1721,11 @@ static int parse_options(char *options, struct super_block *sb,
+@@ -1753,11 +1753,11 @@ static int parse_options(char *options, struct super_block *sb,
#ifdef CONFIG_QUOTA
if (ext4_has_feature_quota(sb) &&
(test_opt(sb, USRQUOTA) || test_opt(sb, GRPQUOTA))) {
@@ -3465,7 +3606,7 @@ index c9ab67d..ba1cf0b 100644
if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA])
clear_opt(sb, USRQUOTA);
-@@ -4936,6 +4936,20 @@ static int ext4_quota_on_mount(struct super_block *sb, int type)
+@@ -5021,6 +5021,20 @@ static int ext4_quota_on_mount(struct super_block *sb, int type)
EXT4_SB(sb)->s_jquota_fmt, type);
}
@@ -3486,7 +3627,7 @@ index c9ab67d..ba1cf0b 100644
/*
* Standard function to be called on quota_on
*/
-@@ -4975,8 +4989,12 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
+@@ -5060,8 +5074,12 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
if (err)
return err;
}
@@ -3501,7 +3642,7 @@ index c9ab67d..ba1cf0b 100644
}
static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
-@@ -5002,8 +5020,11 @@ static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
+@@ -5088,8 +5106,11 @@ static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
/* Don't account quota for quota files to avoid recursion */
qf_inode->i_flags |= S_NOQUOTA;
@@ -3514,7 +3655,7 @@ index c9ab67d..ba1cf0b 100644
return err;
}
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
-index ce5a218..5fc2162 100644
+index 9cce670..7ded177 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -377,7 +377,7 @@ int nfs_readdir_xdr_filler(struct page **pages, nfs_readdir_descriptor_t *desc,
@@ -3545,10 +3686,10 @@ index ce5a218..5fc2162 100644
nfs_readdir_descriptor_t my_desc,
*desc = &my_desc;
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
-index 3e2071a..f714b98 100644
+index 86faecf..847b678 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
-@@ -927,7 +927,7 @@ int nfs_open(struct inode *inode, struct file *filp)
+@@ -940,7 +940,7 @@ int nfs_open(struct inode *inode, struct file *filp)
{
struct nfs_open_context *ctx;
@@ -3558,7 +3699,7 @@ index 3e2071a..f714b98 100644
return PTR_ERR(ctx);
nfs_file_set_open_context(filp, ctx);
diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
-index db9b5fe..679e003 100644
+index 57ca1c8..2a9ff14 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -26,7 +26,7 @@ static int
@@ -3580,10 +3721,10 @@ index db9b5fe..679e003 100644
if (IS_ERR(ctx))
goto out;
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
-index 000b2ed..a1acc60 100644
+index 619ad4b..4399ea8 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
-@@ -276,6 +276,37 @@ static void ovl_dentry_release(struct dentry *dentry)
+@@ -295,6 +295,37 @@ static void ovl_dentry_release(struct dentry *dentry)
}
}
@@ -3621,7 +3762,7 @@ index 000b2ed..a1acc60 100644
static int ovl_dentry_revalidate(struct dentry *dentry, unsigned int flags)
{
struct ovl_entry *oe = dentry->d_fsdata;
-@@ -320,11 +351,13 @@ static int ovl_dentry_weak_revalidate(struct dentry *dentry, unsigned int flags)
+@@ -339,11 +370,13 @@ static int ovl_dentry_weak_revalidate(struct dentry *dentry, unsigned int flags)
static const struct dentry_operations ovl_dentry_operations = {
.d_release = ovl_dentry_release,
.d_select_inode = ovl_d_select_inode,
@@ -3649,7 +3790,7 @@ index 22ab246..eeae401 100644
#endif /* GCC_VERSION >= 40500 */
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
-index 8a2e009..f513dd8 100644
+index c4b5f4b..03dda7b 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -161,6 +161,7 @@ struct dentry_operations {
@@ -3682,16 +3823,18 @@ index 8a2e009..f513dd8 100644
+
#endif /* __LINUX_DCACHE_H */
diff --git a/include/linux/filter.h b/include/linux/filter.h
-index 5972ffe..5110d42 100644
+index 43aa1f8..a51a536 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
-@@ -446,8 +446,12 @@ int bpf_prog_create_from_user(struct bpf_prog **pfp, struct sock_fprog *fprog,
+@@ -465,10 +465,14 @@ int bpf_prog_create_from_user(struct bpf_prog **pfp, struct sock_fprog *fprog,
void bpf_prog_destroy(struct bpf_prog *fp);
int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
+int __sk_attach_filter(struct sock_fprog *fprog, struct sock *sk,
+ bool locked);
int sk_attach_bpf(u32 ufd, struct sock *sk);
+ int sk_reuseport_attach_filter(struct sock_fprog *fprog, struct sock *sk);
+ int sk_reuseport_attach_bpf(u32 ufd, struct sock *sk);
int sk_detach_filter(struct sock *sk);
+int __sk_detach_filter(struct sock *sk, bool locked);
+
@@ -3699,10 +3842,10 @@ index 5972ffe..5110d42 100644
unsigned int len);
diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 22c5a0c..ab3d8d9 100644
+index 2c7f8d9..83c77b0 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -1207,6 +1207,16 @@ static inline struct inode *file_inode(const struct file *f)
+@@ -1234,6 +1234,16 @@ static inline struct inode *file_inode(const struct file *f)
return f->f_inode;
}
@@ -3735,10 +3878,10 @@ index a338a688..dcb89e3 100644
extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index 3143c84..04c068e 100644
+index 5440b7b..6d1d8f4 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -265,6 +265,7 @@ struct header_ops {
+@@ -267,6 +267,7 @@ struct header_ops {
void (*cache_update)(struct hh_cache *hh,
const struct net_device *dev,
const unsigned char *haddr);
@@ -3746,7 +3889,7 @@ index 3143c84..04c068e 100644
};
/* These flag bits are private to the generic network queueing
-@@ -1398,8 +1399,7 @@ enum netdev_priv_flags {
+@@ -1420,8 +1421,7 @@ enum netdev_priv_flags {
* @dma: DMA channel
* @mtu: Interface MTU value
* @type: Interface hardware type
@@ -3756,7 +3899,7 @@ index 3143c84..04c068e 100644
*
* @needed_headroom: Extra headroom the hardware may need, but not in all
* cases can this be guaranteed
-@@ -2493,6 +2493,24 @@ static inline int dev_parse_header(const struct sk_buff *skb,
+@@ -2627,6 +2627,24 @@ static inline int dev_parse_header(const struct sk_buff *skb,
return dev->header_ops->parse(skb, haddr);
}
@@ -3781,93 +3924,6 @@ index 3143c84..04c068e 100644
typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len);
int register_gifconf(unsigned int family, gifconf_func_t *gifconf);
static inline int unregister_gifconf(unsigned int family)
-diff --git a/include/linux/pci.h b/include/linux/pci.h
-index 4e554bf..e89c7ee 100644
---- a/include/linux/pci.h
-+++ b/include/linux/pci.h
-@@ -989,23 +989,6 @@ static inline int pci_is_managed(struct pci_dev *pdev)
- return pdev->is_managed;
- }
-
--static inline void pci_set_managed_irq(struct pci_dev *pdev, unsigned int irq)
--{
-- pdev->irq = irq;
-- pdev->irq_managed = 1;
--}
--
--static inline void pci_reset_managed_irq(struct pci_dev *pdev)
--{
-- pdev->irq = 0;
-- pdev->irq_managed = 0;
--}
--
--static inline bool pci_has_managed_irq(struct pci_dev *pdev)
--{
-- return pdev->irq_managed && pdev->irq > 0;
--}
--
- void pci_disable_device(struct pci_dev *dev);
-
- extern unsigned int pcibios_max_latency;
-diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index 75f136a..4fde618 100644
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -1908,6 +1908,30 @@ static inline void skb_reserve(struct sk_buff *skb, int len)
- skb->tail += len;
- }
-
-+/**
-+ * skb_tailroom_reserve - adjust reserved_tailroom
-+ * @skb: buffer to alter
-+ * @mtu: maximum amount of headlen permitted
-+ * @needed_tailroom: minimum amount of reserved_tailroom
-+ *
-+ * Set reserved_tailroom so that headlen can be as large as possible but
-+ * not larger than mtu and tailroom cannot be smaller than
-+ * needed_tailroom.
-+ * The required headroom should already have been reserved before using
-+ * this function.
-+ */
-+static inline void skb_tailroom_reserve(struct sk_buff *skb, unsigned int mtu,
-+ unsigned int needed_tailroom)
-+{
-+ SKB_LINEAR_ASSERT(skb);
-+ if (mtu < skb_tailroom(skb) - needed_tailroom)
-+ /* use at most mtu */
-+ skb->reserved_tailroom = skb_tailroom(skb) - mtu;
-+ else
-+ /* use up to all available space */
-+ skb->reserved_tailroom = needed_tailroom;
-+}
-+
- #define ENCAP_TYPE_ETHER 0
- #define ENCAP_TYPE_IPPROTO 1
-
-@@ -2724,6 +2748,23 @@ static inline void skb_postpull_rcsum(struct sk_buff *skb,
-
- unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
-
-+static inline void skb_postpush_rcsum(struct sk_buff *skb,
-+ const void *start, unsigned int len)
-+{
-+ /* For performing the reverse operation to skb_postpull_rcsum(),
-+ * we can instead of ...
-+ *
-+ * skb->csum = csum_add(skb->csum, csum_partial(start, len, 0));
-+ *
-+ * ... just use this equivalent version here to save a few
-+ * instructions. Feeding csum of 0 in csum_partial() and later
-+ * on adding skb->csum is equivalent to feed skb->csum in the
-+ * first place.
-+ */
-+ if (skb->ip_summed == CHECKSUM_COMPLETE)
-+ skb->csum = csum_partial(start, len, skb->csum);
-+}
-+
- /**
- * pskb_trim_rcsum - trim received skb and update checksum
- * @skb: buffer to trim
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
index 7f5f78b..245f57d 100644
--- a/include/linux/usb_usual.h
@@ -3882,10 +3938,10 @@ index 7f5f78b..245f57d 100644
#define US_FLAG(name, value) US_FL_##name = value ,
enum { US_DO_ALL_FLAGS };
diff --git a/include/net/bonding.h b/include/net/bonding.h
-index c1740a2..93abe5f 100644
+index ee6c520..791800d 100644
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
-@@ -214,6 +214,7 @@ struct bonding {
+@@ -215,6 +215,7 @@ struct bonding {
* ALB mode (6) - to sync the use and modifications of its hash table
*/
spinlock_t mode_lock;
@@ -3893,6 +3949,42 @@ index c1740a2..93abe5f 100644
u8 send_peer_notif;
u8 igmp_retrans;
#ifdef CONFIG_PROC_FS
+diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
+index f63a167..ba93c0f 100644
+--- a/include/scsi/scsi_device.h
++++ b/include/scsi/scsi_device.h
+@@ -513,6 +513,31 @@ static inline int scsi_device_tpgs(struct scsi_device *sdev)
+ return sdev->inquiry ? (sdev->inquiry[5] >> 4) & 0x3 : 0;
+ }
+
++/**
++ * scsi_device_supports_vpd - test if a device supports VPD pages
++ * @sdev: the &struct scsi_device to test
++ *
++ * If the 'try_vpd_pages' flag is set it takes precedence.
++ * Otherwise we will assume VPD pages are supported if the
++ * SCSI level is at least SPC-3 and 'skip_vpd_pages' is not set.
++ */
++static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
++{
++ /* Attempt VPD inquiry if the device blacklist explicitly calls
++ * for it.
++ */
++ if (sdev->try_vpd_pages)
++ return 1;
++ /*
++ * Although VPD inquiries can go to SCSI-2 type devices,
++ * some USB ones crash on receiving them, and the pages
++ * we currently ask for are for SPC-3 and beyond
++ */
++ if (sdev->scsi_level > SCSI_SPC_2 && !sdev->skip_vpd_pages)
++ return 1;
++ return 0;
++}
++
+ #define MODULE_ALIAS_SCSI_DEVICE(type) \
+ MODULE_ALIAS("scsi:t-" __stringify(type) "*")
+ #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x"
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index 4504ca6..50da680 100644
--- a/kernel/bpf/helpers.c
@@ -3906,47 +3998,11 @@ index 4504ca6..50da680 100644
return 0;
}
-diff --git a/kernel/events/core.c b/kernel/events/core.c
-index faf2067..1e889a0 100644
---- a/kernel/events/core.c
-+++ b/kernel/events/core.c
-@@ -1580,14 +1580,14 @@ event_sched_out(struct perf_event *event,
-
- perf_pmu_disable(event->pmu);
-
-+ event->tstamp_stopped = tstamp;
-+ event->pmu->del(event, 0);
-+ event->oncpu = -1;
- event->state = PERF_EVENT_STATE_INACTIVE;
- if (event->pending_disable) {
- event->pending_disable = 0;
- event->state = PERF_EVENT_STATE_OFF;
- }
-- event->tstamp_stopped = tstamp;
-- event->pmu->del(event, 0);
-- event->oncpu = -1;
-
- if (!is_software_event(event))
- cpuctx->active_oncpu--;
-@@ -8583,7 +8583,12 @@ err_context:
- perf_unpin_context(ctx);
- put_ctx(ctx);
- err_alloc:
-- free_event(event);
-+ /*
-+ * If event_file is set, the fput() above will have called ->release()
-+ * and that will take care of freeing the event.
-+ */
-+ if (!event_file)
-+ free_event(event);
- err_cpus:
- put_online_cpus();
- err_task:
diff --git a/mm/page_isolation.c b/mm/page_isolation.c
-index 4568fd5..00c9646 100644
+index 92c4c36..31555b6 100644
--- a/mm/page_isolation.c
+++ b/mm/page_isolation.c
-@@ -283,11 +283,11 @@ struct page *alloc_migrate_target(struct page *page, unsigned long private,
+@@ -289,11 +289,11 @@ struct page *alloc_migrate_target(struct page *page, unsigned long private,
* now as a simple work-around, we use the next node for destination.
*/
if (PageHuge(page)) {
@@ -3991,10 +4047,10 @@ index b563a3f..2fa3be9 100644
EXPORT_SYMBOL(ax25_header_ops);
diff --git a/net/bridge/br_stp.c b/net/bridge/br_stp.c
-index 5f3f645..eff69cb 100644
+index b3cca12..e2670c5 100644
--- a/net/bridge/br_stp.c
+++ b/net/bridge/br_stp.c
-@@ -567,6 +567,14 @@ int br_set_max_age(struct net_bridge *br, unsigned long val)
+@@ -568,6 +568,14 @@ int br_set_max_age(struct net_bridge *br, unsigned long val)
}
@@ -4009,7 +4065,7 @@ index 5f3f645..eff69cb 100644
int br_set_ageing_time(struct net_bridge *br, u32 ageing_time)
{
struct switchdev_attr attr = {
-@@ -577,11 +585,8 @@ int br_set_ageing_time(struct net_bridge *br, u32 ageing_time)
+@@ -579,11 +587,8 @@ int br_set_ageing_time(struct net_bridge *br, u32 ageing_time)
unsigned long t = clock_t_to_jiffies(ageing_time);
int err;
@@ -4023,10 +4079,10 @@ index 5f3f645..eff69cb 100644
br->ageing_time = t;
diff --git a/net/core/filter.c b/net/core/filter.c
-index 37157c4..f393a22 100644
+index bba502f..fb2951c 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
-@@ -1139,7 +1139,8 @@ void bpf_prog_destroy(struct bpf_prog *fp)
+@@ -1147,7 +1147,8 @@ void bpf_prog_destroy(struct bpf_prog *fp)
}
EXPORT_SYMBOL_GPL(bpf_prog_destroy);
@@ -4036,7 +4092,7 @@ index 37157c4..f393a22 100644
{
struct sk_filter *fp, *old_fp;
-@@ -1155,10 +1156,8 @@ static int __sk_attach_prog(struct bpf_prog *prog, struct sock *sk)
+@@ -1163,10 +1164,8 @@ static int __sk_attach_prog(struct bpf_prog *prog, struct sock *sk)
return -ENOMEM;
}
@@ -4048,7 +4104,7 @@ index 37157c4..f393a22 100644
if (old_fp)
sk_filter_uncharge(sk, old_fp);
-@@ -1175,7 +1174,8 @@ static int __sk_attach_prog(struct bpf_prog *prog, struct sock *sk)
+@@ -1245,7 +1244,8 @@ struct bpf_prog *__get_filter(struct sock_fprog *fprog, struct sock *sk)
* occurs or there is insufficient memory for the filter a negative
* errno code is returned. On success the return is zero.
*/
@@ -4056,9 +4112,9 @@ index 37157c4..f393a22 100644
+int __sk_attach_filter(struct sock_fprog *fprog, struct sock *sk,
+ bool locked)
{
- unsigned int fsize = bpf_classic_proglen(fprog);
- unsigned int bpf_fsize = bpf_prog_size(fprog->len);
-@@ -1213,7 +1213,7 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
+ struct bpf_prog *prog = __get_filter(fprog, sk);
+ int err;
+@@ -1253,7 +1253,7 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
if (IS_ERR(prog))
return PTR_ERR(prog);
@@ -4067,7 +4123,7 @@ index 37157c4..f393a22 100644
if (err < 0) {
__bpf_prog_release(prog);
return err;
-@@ -1221,7 +1221,12 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
+@@ -1261,7 +1261,12 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
return 0;
}
@@ -4079,18 +4135,18 @@ index 37157c4..f393a22 100644
+ return __sk_attach_filter(fprog, sk, sock_owned_by_user(sk));
+}
- int sk_attach_bpf(u32 ufd, struct sock *sk)
+ int sk_reuseport_attach_filter(struct sock_fprog *fprog, struct sock *sk)
{
-@@ -1240,7 +1245,7 @@ int sk_attach_bpf(u32 ufd, struct sock *sk)
- return -EINVAL;
- }
+@@ -1307,7 +1312,7 @@ int sk_attach_bpf(u32 ufd, struct sock *sk)
+ if (IS_ERR(prog))
+ return PTR_ERR(prog);
- err = __sk_attach_prog(prog, sk);
+ err = __sk_attach_prog(prog, sk, sock_owned_by_user(sk));
if (err < 0) {
bpf_prog_put(prog);
return err;
-@@ -1913,7 +1918,7 @@ static int __init register_sk_filter_ops(void)
+@@ -2105,7 +2110,7 @@ static int __init register_sk_filter_ops(void)
}
late_initcall(register_sk_filter_ops);
@@ -4099,7 +4155,7 @@ index 37157c4..f393a22 100644
{
int ret = -ENOENT;
struct sk_filter *filter;
-@@ -1921,8 +1926,7 @@ int sk_detach_filter(struct sock *sk)
+@@ -2113,8 +2118,7 @@ int sk_detach_filter(struct sock *sk)
if (sock_flag(sk, SOCK_FILTER_LOCKED))
return -EPERM;
@@ -4109,7 +4165,7 @@ index 37157c4..f393a22 100644
if (filter) {
RCU_INIT_POINTER(sk->sk_filter, NULL);
sk_filter_uncharge(sk, filter);
-@@ -1931,7 +1935,12 @@ int sk_detach_filter(struct sock *sk)
+@@ -2123,7 +2127,12 @@ int sk_detach_filter(struct sock *sk)
return ret;
}
@@ -4124,7 +4180,7 @@ index 37157c4..f393a22 100644
int sk_get_filter(struct sock *sk, struct sock_filter __user *ubuf,
unsigned int len)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index 34ba7a0..ca966f7 100644
+index 8261d95..215e613 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -905,6 +905,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
@@ -4135,47 +4191,6 @@ index 34ba7a0..ca966f7 100644
+ nla_total_size(1); /* IFLA_PROTO_DOWN */
}
-diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index 5bf88f5..8616d11 100644
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -2948,6 +2948,24 @@ 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
-@@ -4084,9 +4102,9 @@ struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb,
- if (!pskb_may_pull(skb_chk, offset))
- goto err;
-
-- __skb_pull(skb_chk, offset);
-+ skb_pull_rcsum(skb_chk, offset);
- ret = skb_chkf(skb_chk);
-- __skb_push(skb_chk, offset);
-+ skb_push_rcsum(skb_chk, offset);
-
- if (ret)
- goto err;
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index 902d606..8be8f27 100644
--- a/net/dccp/ipv4.c
@@ -4189,6 +4204,40 @@ index 902d606..8be8f27 100644
if (!between48(seq, dccp_rsk(req)->dreq_iss, dccp_rsk(req)->dreq_gss)) {
NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
} else {
+diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
+index fa4daba..d8fb47f 100644
+--- a/net/dsa/dsa.c
++++ b/net/dsa/dsa.c
+@@ -935,6 +935,14 @@ static void dsa_remove_dst(struct dsa_switch_tree *dst)
+ {
+ int i;
+
++ dst->master_netdev->dsa_ptr = NULL;
++
++ /* If we used a tagging format that doesn't have an ethertype
++ * field, make sure that all packets from this point get sent
++ * without the tag and go through the regular receive path.
++ */
++ wmb();
++
+ for (i = 0; i < dst->pd->nr_chips; i++) {
+ struct dsa_switch *ds = dst->ds[i];
+
+@@ -988,14 +996,6 @@ static int dsa_suspend(struct device *d)
+ struct dsa_switch_tree *dst = platform_get_drvdata(pdev);
+ int i, ret = 0;
+
+- dst->master_netdev->dsa_ptr = NULL;
+-
+- /* If we used a tagging format that doesn't have an ethertype
+- * field, make sure that all packets from this point get sent
+- * without the tag and go through the regular receive path.
+- */
+- wmb();
+-
+ for (i = 0; i < dst->pd->nr_chips; i++) {
+ struct dsa_switch *ds = dst->ds[i];
+
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index f6303b1..0212591 100644
--- a/net/ipv4/devinet.c
@@ -4263,64 +4312,6 @@ index 4734475..8a9246d 100644
if (!(ok & BRD_OK))
fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim);
if (subnet && ifa->ifa_prefixlen < 31) {
-diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
-index 05e4cba..b3086cf 100644
---- a/net/ipv4/igmp.c
-+++ b/net/ipv4/igmp.c
-@@ -356,9 +356,8 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
- skb_dst_set(skb, &rt->dst);
- skb->dev = dev;
-
-- skb->reserved_tailroom = skb_end_offset(skb) -
-- min(mtu, skb_end_offset(skb));
- skb_reserve(skb, hlen);
-+ skb_tailroom_reserve(skb, mtu, tlen);
-
- skb_reset_network_header(skb);
- pip = ip_hdr(skb);
-diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
-index 49f0285..f2ad521 100644
---- a/net/ipv4/ip_output.c
-+++ b/net/ipv4/ip_output.c
-@@ -1237,13 +1237,16 @@ ssize_t ip_append_page(struct sock *sk, struct flowi4 *fl4, struct page *page,
- if (!skb)
- return -EINVAL;
-
-- cork->length += size;
- if ((size + skb->len > mtu) &&
- (sk->sk_protocol == IPPROTO_UDP) &&
- (rt->dst.dev->features & NETIF_F_UFO)) {
-+ if (skb->ip_summed != CHECKSUM_PARTIAL)
-+ return -EOPNOTSUPP;
-+
- skb_shinfo(skb)->gso_size = mtu - fragheaderlen;
- skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
- }
-+ cork->length += size;
-
- while (size > 0) {
- if (skb_is_gso(skb)) {
-diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
-index cbb51f3..ce30c8b 100644
---- a/net/ipv4/ip_tunnel.c
-+++ b/net/ipv4/ip_tunnel.c
-@@ -663,6 +663,8 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
- inner_iph = (const struct iphdr *)skb_inner_network_header(skb);
- connected = (tunnel->parms.iph.daddr != 0);
-
-+ memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
-+
- dst = tnl_params->daddr;
- if (dst == 0) {
- /* NBMA tunnel */
-@@ -760,7 +762,6 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
- tunnel->err_time + IPTUNNEL_ERR_TIMEO)) {
- tunnel->err_count--;
-
-- memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
- dst_link_failure(skb);
- } else
- tunnel->err_count = 0;
diff --git a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c b/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c
index c6eb421..ea91058 100644
--- a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c
@@ -4347,10 +4338,10 @@ index c6eb421..ea91058 100644
}
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
-index 8c7e631..048418b 100644
+index 487ac67..a7b1a90 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
-@@ -320,8 +320,6 @@ void tcp_req_err(struct sock *sk, u32 seq, bool abort)
+@@ -319,8 +319,6 @@ void tcp_req_err(struct sock *sk, u32 seq, bool abort)
/* ICMPs are not backlogged, hence we cannot get
* an established socket here.
*/
@@ -4359,45 +4350,11 @@ index 8c7e631..048418b 100644
if (seq != tcp_rsk(req)->snt_isn) {
NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
} else if (abort) {
-diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
-index c8cbc2b..a726d78 100644
---- a/net/ipv4/tcp_metrics.c
-+++ b/net/ipv4/tcp_metrics.c
-@@ -550,7 +550,7 @@ reset:
- */
- if (crtt > tp->srtt_us) {
- /* Set RTO like tcp_rtt_estimator(), but from cached RTT. */
-- crtt /= 8 * USEC_PER_MSEC;
-+ crtt /= 8 * USEC_PER_SEC / HZ;
- inet_csk(sk)->icsk_rto = crtt + max(2 * crtt, tcp_rto_min(sk));
- } else if (tp->srtt_us == 0) {
- /* RFC6298: 5.7 We've failed to get a valid RTT sample from
-diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
-index ac6b196..9475a27 100644
---- a/net/ipv4/tcp_minisocks.c
-+++ b/net/ipv4/tcp_minisocks.c
-@@ -458,7 +458,7 @@ struct sock *tcp_create_openreq_child(const struct sock *sk,
-
- newtp->rcv_wup = newtp->copied_seq =
- newtp->rcv_nxt = treq->rcv_isn + 1;
-- newtp->segs_in = 0;
-+ newtp->segs_in = 1;
-
- newtp->snd_sml = newtp->snd_una =
- newtp->snd_nxt = newtp->snd_up = treq->snt_isn + 1;
-@@ -818,6 +818,7 @@ int tcp_child_process(struct sock *parent, struct sock *child,
- int ret = 0;
- int state = child->sk_state;
-
-+ tcp_sk(child)->segs_in += max_t(u16, 1, skb_shinfo(skb)->gso_segs);
- if (!sock_owned_by_user(child)) {
- ret = tcp_rcv_state_process(child, skb);
- /* Wakeup parent, send SIGIO */
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
-index 7f8ab46..21fbb54 100644
+index 95d2f19..eb8933b 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
-@@ -1990,10 +1990,14 @@ void udp_v4_early_demux(struct sk_buff *skb)
+@@ -2082,10 +2082,14 @@ void udp_v4_early_demux(struct sk_buff *skb)
if (!in_dev)
return;
@@ -4416,51 +4373,8 @@ index 7f8ab46..21fbb54 100644
sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr,
uh->source, iph->saddr, dif);
} else if (skb->pkt_type == PACKET_HOST) {
-diff --git a/net/ipv4/udp_tunnel.c b/net/ipv4/udp_tunnel.c
-index aba4286..280a9bd 100644
---- a/net/ipv4/udp_tunnel.c
-+++ b/net/ipv4/udp_tunnel.c
-@@ -89,6 +89,8 @@ int udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb,
- uh->source = src_port;
- uh->len = htons(skb->len);
-
-+ memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
-+
- udp_set_csum(nocheck, skb, src, dst, skb->len);
-
- return iptunnel_xmit(sk, rt, skb, src, dst, IPPROTO_UDP,
-diff --git a/net/ipv6/exthdrs_core.c b/net/ipv6/exthdrs_core.c
-index 5c5d23e..9508a20 100644
---- a/net/ipv6/exthdrs_core.c
-+++ b/net/ipv6/exthdrs_core.c
-@@ -257,7 +257,11 @@ int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset,
- *fragoff = _frag_off;
- return hp->nexthdr;
- }
-- return -ENOENT;
-+ if (!found)
-+ return -ENOENT;
-+ if (fragoff)
-+ *fragoff = _frag_off;
-+ break;
- }
- hdrlen = 8;
- } else if (nexthdr == NEXTHDR_AUTH) {
-diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
-index e5ea177..4650c68 100644
---- a/net/ipv6/ip6_gre.c
-+++ b/net/ipv6/ip6_gre.c
-@@ -778,6 +778,8 @@ static inline int ip6gre_xmit_ipv4(struct sk_buff *skb, struct net_device *dev)
- __u32 mtu;
- int err;
-
-+ memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
-+
- if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))
- encap_limit = t->parms.encap_limit;
-
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
-index 31144c4..a175152 100644
+index a163102..2a6606c 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1091,8 +1091,8 @@ static inline int ip6_ufo_append_data(struct sock *sk,
@@ -4493,7 +4407,7 @@ index 31144c4..a175152 100644
if (err)
goto error;
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
-index 137fca4..3991b21 100644
+index 6c5dfec..3991b21 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -343,12 +343,12 @@ static int ip6_tnl_create2(struct net_device *dev)
@@ -4510,35 +4424,11 @@ index 137fca4..3991b21 100644
dev_hold(dev);
ip6_tnl_link(ip6n, t);
-@@ -1180,6 +1180,8 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
- u8 tproto;
- int err;
-
-+ memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
-+
- tproto = ACCESS_ONCE(t->parms.proto);
- if (tproto != IPPROTO_IPIP && tproto != 0)
- return -1;
-diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
-index 5ee56d0..d64ee7e 100644
---- a/net/ipv6/mcast.c
-+++ b/net/ipv6/mcast.c
-@@ -1574,9 +1574,8 @@ static struct sk_buff *mld_newpack(struct inet6_dev *idev, unsigned int mtu)
- return NULL;
-
- skb->priority = TC_PRIO_CONTROL;
-- skb->reserved_tailroom = skb_end_offset(skb) -
-- min(mtu, skb_end_offset(skb));
- skb_reserve(skb, hlen);
-+ skb_tailroom_reserve(skb, mtu, tlen);
-
- if (__ipv6_get_lladdr(idev, &addr_buf, IFA_F_TENTATIVE)) {
- /* <draft-ietf-magma-mld-source-05.txt>:
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
-index 9da3287..6665e1a 100644
+index 422dd01..6794120 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
-@@ -837,8 +837,8 @@ start_lookup:
+@@ -883,8 +883,8 @@ start_lookup:
flush_stack(stack, count, skb, count - 1);
} else {
if (!inner_flushed)
@@ -4549,20 +4439,6 @@ index 9da3287..6665e1a 100644
consume_skb(skb);
}
return 0;
-@@ -916,11 +916,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
- ret = udpv6_queue_rcv_skb(sk, skb);
- sock_put(sk);
-
-- /* a return value > 0 means to resubmit the input, but
-- * it wants the return to be -protocol, or 0
-- */
-+ /* a return value > 0 means to resubmit the input */
- if (ret > 0)
-- return -ret;
-+ return ret;
-
- return 0;
- }
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
index ec22078..42de4cc 100644
--- a/net/l2tp/l2tp_ip.c
@@ -4622,7 +4498,7 @@ index a2c8747..9ee4ddb 100644
print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length);
}
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
-index 6a12b0f..980e9e9 100644
+index 978d3bc..1b33d89 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -7,6 +7,7 @@
@@ -4633,7 +4509,7 @@ index 6a12b0f..980e9e9 100644
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
-@@ -1484,14 +1485,21 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
+@@ -1485,14 +1486,21 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
sdata_info(sdata, "Trigger new scan to find an IBSS to join\n");
@@ -4678,10 +4554,10 @@ index c9e325d..7a2b791 100644
}
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
-index 4cbf36c..a3bb8f7 100644
+index 60d093f..261df74 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -2250,7 +2250,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
+@@ -2249,7 +2249,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
struct ieee80211_local *local = rx->local;
struct ieee80211_sub_if_data *sdata = rx->sdata;
struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
@@ -4690,7 +4566,7 @@ index 4cbf36c..a3bb8f7 100644
hdr = (struct ieee80211_hdr *) skb->data;
hdrlen = ieee80211_hdrlen(hdr->frame_control);
-@@ -2319,7 +2319,8 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
+@@ -2318,7 +2318,8 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
ether_addr_equal(sdata->vif.addr, hdr->addr3))
return RX_CONTINUE;
@@ -4701,10 +4577,10 @@ index 4cbf36c..a3bb8f7 100644
IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion);
return RX_DROP_MONITOR;
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
-index f91d187..67066d0 100644
+index a4a4f89..23ed038 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
-@@ -256,11 +256,11 @@ void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
+@@ -257,11 +257,11 @@ void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
}
/* Caller must hold local->sta_mtx */
@@ -4720,7 +4596,7 @@ index f91d187..67066d0 100644
}
static void sta_deliver_ps_frames(struct work_struct *wk)
-@@ -484,11 +484,17 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
+@@ -498,11 +498,17 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
{
struct ieee80211_local *local = sta->local;
struct ieee80211_sub_if_data *sdata = sta->sdata;
@@ -4739,7 +4615,7 @@ index f91d187..67066d0 100644
/* check if STA exists already */
if (sta_info_get_bss(sdata, sta->sta.addr)) {
err = -EEXIST;
-@@ -503,7 +509,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
+@@ -517,7 +523,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
set_sta_flag(sta, WLAN_STA_BLOCK_BA);
/* make the station visible */
@@ -4750,7 +4626,7 @@ index f91d187..67066d0 100644
list_add_tail_rcu(&sta->list, &local->sta_list);
-@@ -520,10 +528,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
+@@ -534,10 +542,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
ieee80211_sta_debugfs_add(sta);
rate_control_add_sta_debugfs(sta);
@@ -4764,7 +4640,7 @@ index f91d187..67066d0 100644
sta_dbg(sdata, "Inserted STA %pM\n", sta->sta.addr);
-@@ -538,6 +545,7 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
+@@ -552,6 +559,7 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
out_remove:
sta_info_hash_del(local, sta);
list_del_rcu(&sta->list);
@@ -4772,7 +4648,7 @@ index f91d187..67066d0 100644
local->num_sta--;
synchronize_net();
__cleanup_single_sta(sta);
-@@ -882,7 +890,7 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
+@@ -898,7 +906,7 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
{
struct ieee80211_local *local = sta->local;
struct ieee80211_sub_if_data *sdata = sta->sdata;
@@ -4781,7 +4657,7 @@ index f91d187..67066d0 100644
int ret;
/*
-@@ -920,8 +928,11 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
+@@ -936,8 +944,11 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr);
@@ -4796,10 +4672,10 @@ index f91d187..67066d0 100644
rate_control_remove_sta_debugfs(sta);
ieee80211_sta_debugfs_remove(sta);
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
-index c32fc41..881bc20 100644
+index b18c5ed..0b80a71 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
-@@ -518,6 +518,9 @@ static struct net_device *find_outdev(struct net *net,
+@@ -543,6 +543,9 @@ static struct net_device *find_outdev(struct net *net,
if (!dev)
return ERR_PTR(-ENODEV);
@@ -4892,25 +4768,12 @@ index 992396a..da1ae0e1 100644
sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
if (!gso_type && (len > dev->mtu + reserve + extra_len) &&
-diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
-index ec52912..ce46f1c 100644
---- a/net/sctp/ipv6.c
-+++ b/net/sctp/ipv6.c
-@@ -526,6 +526,8 @@ static int sctp_v6_cmp_addr(const union sctp_addr *addr1,
- }
- return 0;
- }
-+ if (addr1->v6.sin6_port != addr2->v6.sin6_port)
-+ return 0;
- if (!ipv6_addr_equal(&addr1->v6.sin6_addr, &addr2->v6.sin6_addr))
- return 0;
- /* If this is a linklocal address, compare the scope_id. */
diff --git a/net/socket.c b/net/socket.c
-index d730ef9..263b334 100644
+index c044d1e..db13ae8 100644
--- a/net/socket.c
+++ b/net/socket.c
-@@ -2238,31 +2238,31 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
- break;
+@@ -2240,31 +2240,31 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
+ cond_resched();
}
-out_put:
@@ -4960,136 +4823,6 @@ index d730ef9..263b334 100644
}
SYSCALL_DEFINE5(recvmmsg, int, fd, struct mmsghdr __user *, mmsg,
-diff --git a/net/tipc/socket.c b/net/tipc/socket.c
-index b53246f..e53003c 100644
---- a/net/tipc/socket.c
-+++ b/net/tipc/socket.c
-@@ -673,7 +673,7 @@ static int tipc_sendmcast(struct socket *sock, struct tipc_name_seq *seq,
- struct tipc_sock *tsk = tipc_sk(sk);
- struct net *net = sock_net(sk);
- struct tipc_msg *mhdr = &tsk->phdr;
-- struct sk_buff_head *pktchain = &sk->sk_write_queue;
-+ struct sk_buff_head pktchain;
- struct iov_iter save = msg->msg_iter;
- uint mtu;
- int rc;
-@@ -687,14 +687,16 @@ static int tipc_sendmcast(struct socket *sock, struct tipc_name_seq *seq,
- msg_set_nameupper(mhdr, seq->upper);
- msg_set_hdr_sz(mhdr, MCAST_H_SIZE);
-
-+ skb_queue_head_init(&pktchain);
-+
- new_mtu:
- mtu = tipc_bcast_get_mtu(net);
-- rc = tipc_msg_build(mhdr, msg, 0, dsz, mtu, pktchain);
-+ rc = tipc_msg_build(mhdr, msg, 0, dsz, mtu, &pktchain);
- if (unlikely(rc < 0))
- return rc;
-
- do {
-- rc = tipc_bcast_xmit(net, pktchain);
-+ rc = tipc_bcast_xmit(net, &pktchain);
- if (likely(!rc))
- return dsz;
-
-@@ -704,7 +706,7 @@ new_mtu:
- if (!rc)
- continue;
- }
-- __skb_queue_purge(pktchain);
-+ __skb_queue_purge(&pktchain);
- if (rc == -EMSGSIZE) {
- msg->msg_iter = save;
- goto new_mtu;
-@@ -863,7 +865,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dsz)
- struct net *net = sock_net(sk);
- struct tipc_msg *mhdr = &tsk->phdr;
- u32 dnode, dport;
-- struct sk_buff_head *pktchain = &sk->sk_write_queue;
-+ struct sk_buff_head pktchain;
- struct sk_buff *skb;
- struct tipc_name_seq *seq;
- struct iov_iter save;
-@@ -924,17 +926,18 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dsz)
- msg_set_hdr_sz(mhdr, BASIC_H_SIZE);
- }
-
-+ skb_queue_head_init(&pktchain);
- save = m->msg_iter;
- new_mtu:
- mtu = tipc_node_get_mtu(net, dnode, tsk->portid);
-- rc = tipc_msg_build(mhdr, m, 0, dsz, mtu, pktchain);
-+ rc = tipc_msg_build(mhdr, m, 0, dsz, mtu, &pktchain);
- if (rc < 0)
- return rc;
-
- do {
-- skb = skb_peek(pktchain);
-+ skb = skb_peek(&pktchain);
- TIPC_SKB_CB(skb)->wakeup_pending = tsk->link_cong;
-- rc = tipc_node_xmit(net, pktchain, dnode, tsk->portid);
-+ rc = tipc_node_xmit(net, &pktchain, dnode, tsk->portid);
- if (likely(!rc)) {
- if (sock->state != SS_READY)
- sock->state = SS_CONNECTING;
-@@ -946,7 +949,7 @@ new_mtu:
- if (!rc)
- continue;
- }
-- __skb_queue_purge(pktchain);
-+ __skb_queue_purge(&pktchain);
- if (rc == -EMSGSIZE) {
- m->msg_iter = save;
- goto new_mtu;
-@@ -1016,7 +1019,7 @@ static int __tipc_send_stream(struct socket *sock, struct msghdr *m, size_t dsz)
- struct net *net = sock_net(sk);
- struct tipc_sock *tsk = tipc_sk(sk);
- struct tipc_msg *mhdr = &tsk->phdr;
-- struct sk_buff_head *pktchain = &sk->sk_write_queue;
-+ struct sk_buff_head pktchain;
- DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
- u32 portid = tsk->portid;
- int rc = -EINVAL;
-@@ -1044,17 +1047,19 @@ static int __tipc_send_stream(struct socket *sock, struct msghdr *m, size_t dsz)
-
- timeo = sock_sndtimeo(sk, m->msg_flags & MSG_DONTWAIT);
- dnode = tsk_peer_node(tsk);
-+ skb_queue_head_init(&pktchain);
-
- next:
- save = m->msg_iter;
- mtu = tsk->max_pkt;
- send = min_t(uint, dsz - sent, TIPC_MAX_USER_MSG_SIZE);
-- rc = tipc_msg_build(mhdr, m, sent, send, mtu, pktchain);
-+ rc = tipc_msg_build(mhdr, m, sent, send, mtu, &pktchain);
- if (unlikely(rc < 0))
- return rc;
-+
- do {
- if (likely(!tsk_conn_cong(tsk))) {
-- rc = tipc_node_xmit(net, pktchain, dnode, portid);
-+ rc = tipc_node_xmit(net, &pktchain, dnode, portid);
- if (likely(!rc)) {
- tsk->sent_unacked++;
- sent += send;
-@@ -1063,7 +1068,7 @@ next:
- goto next;
- }
- if (rc == -EMSGSIZE) {
-- __skb_queue_purge(pktchain);
-+ __skb_queue_purge(&pktchain);
- tsk->max_pkt = tipc_node_get_mtu(net, dnode,
- portid);
- m->msg_iter = save;
-@@ -1077,7 +1082,7 @@ next:
- rc = tipc_wait_for_sndpkt(sock, &timeo);
- } while (!rc);
-
-- __skb_queue_purge(pktchain);
-+ __skb_queue_purge(&pktchain);
- return sent ? sent : rc;
- }
-
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
index ad7f5b3..1c4ad47 100644
--- a/net/xfrm/xfrm_input.c
@@ -5111,10 +4844,10 @@ index ad7f5b3..1c4ad47 100644
if (nexthdr <= 0) {
if (nexthdr == -EBADMSG) {
diff --git a/sound/core/timer.c b/sound/core/timer.c
-index f24c9fc..b982d1b 100644
+index dca817f..e5e7e43 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
-@@ -1051,8 +1051,8 @@ static int snd_timer_s_start(struct snd_timer * timer)
+@@ -1041,8 +1041,8 @@ static int snd_timer_s_start(struct snd_timer * timer)
njiff += timer->sticks - priv->correction;
priv->correction = 0;
}
@@ -5125,63 +4858,36 @@ index f24c9fc..b982d1b 100644
return 0;
}
+diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
+index e68fa44..0c95856 100644
+--- a/sound/pci/hda/patch_hdmi.c
++++ b/sound/pci/hda/patch_hdmi.c
+@@ -1623,6 +1623,8 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
+
+ mutex_lock(&per_pin->lock);
+ pin_eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE);
++ eld->monitor_present = pin_eld->monitor_present;
++
+ if (pin_eld->monitor_present)
+ eld->eld_valid = !!(present & AC_PINSENSE_ELDV);
+ else
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
-index 6968b79..1402ba9 100644
+index 4f5ca0b..1402ba9 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
-@@ -3801,6 +3801,10 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
-
- static void alc_headset_mode_default(struct hda_codec *codec)
- {
-+ static struct coef_fw coef0225[] = {
-+ UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
-+ {}
-+ };
- static struct coef_fw coef0255[] = {
- WRITE_COEF(0x45, 0xc089),
- WRITE_COEF(0x45, 0xc489),
-@@ -3842,6 +3846,9 @@ static void alc_headset_mode_default(struct hda_codec *codec)
- };
-
- switch (codec->core.vendor_id) {
-+ case 0x10ec0225:
-+ alc_process_coef_fw(codec, coef0225);
-+ break;
- case 0x10ec0255:
- case 0x10ec0256:
- alc_process_coef_fw(codec, coef0255);
-@@ -4750,6 +4757,10 @@ enum {
- ALC293_FIXUP_LENOVO_SPK_NOISE,
- ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
+@@ -4759,6 +4759,8 @@ enum {
ALC255_FIXUP_DELL_SPK_NOISE,
-+ ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
-+ ALC280_FIXUP_HP_HEADSET_MIC,
+ ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
+ ALC280_FIXUP_HP_HEADSET_MIC,
+ ALC221_FIXUP_HP_FRONT_MIC,
+ ALC292_FIXUP_TPT460,
};
static const struct hda_fixup alc269_fixups[] = {
-@@ -5375,6 +5386,36 @@ static const struct hda_fixup alc269_fixups[] = {
+@@ -5401,6 +5403,19 @@ static const struct hda_fixup alc269_fixups[] = {
.chained = true,
- .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
+ .chain_id = ALC269_FIXUP_HEADSET_MIC,
},
-+ [ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = {
-+ .type = HDA_FIXUP_VERBS,
-+ .v.verbs = (const struct hda_verb[]) {
-+ /* Disable pass-through path for FRONT 14h */
-+ { 0x20, AC_VERB_SET_COEF_INDEX, 0x36 },
-+ { 0x20, AC_VERB_SET_PROC_COEF, 0x57d7 },
-+ {}
-+ },
-+ .chained = true,
-+ .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
-+ },
-+ [ALC280_FIXUP_HP_HEADSET_MIC] = {
-+ .type = HDA_FIXUP_FUNC,
-+ .v.func = alc_fixup_disable_aamix,
-+ .chained = true,
-+ .chain_id = ALC269_FIXUP_HEADSET_MIC,
-+ },
+ [ALC221_FIXUP_HP_FRONT_MIC] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
@@ -5198,16 +4904,15 @@ index 6968b79..1402ba9 100644
};
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
-@@ -5479,6 +5520,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
- SND_PCI_QUIRK(0x103c, 0x2335, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
+@@ -5506,6 +5521,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x2336, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
-+ SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
+ SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
+ SND_PCI_QUIRK(0x103c, 0x8256, "HP", ALC221_FIXUP_HP_FRONT_MIC),
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
-@@ -5527,7 +5570,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+@@ -5554,7 +5570,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
@@ -5216,7 +4921,7 @@ index 6968b79..1402ba9 100644
SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
-@@ -5622,6 +5665,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
+@@ -5649,6 +5665,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
{.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
{.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
{.id = ALC292_FIXUP_TPT440, .name = "tpt440"},
@@ -5224,20 +4929,7 @@ index 6968b79..1402ba9 100644
{}
};
#define ALC225_STANDARD_PINS \
-@@ -5648,10 +5692,10 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
- {0x21, 0x03211020}
-
- static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
-- SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
-+ SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
- ALC225_STANDARD_PINS,
- {0x14, 0x901701a0}),
-- SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
-+ SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
- ALC225_STANDARD_PINS,
- {0x14, 0x901701b0}),
- SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
-@@ -6379,6 +6423,7 @@ enum {
+@@ -6406,6 +6423,7 @@ enum {
ALC668_FIXUP_AUTO_MUTE,
ALC668_FIXUP_DELL_DISABLE_AAMIX,
ALC668_FIXUP_DELL_XPS13,
@@ -5245,7 +4937,7 @@ index 6968b79..1402ba9 100644
};
static const struct hda_fixup alc662_fixups[] = {
-@@ -6619,6 +6664,12 @@ static const struct hda_fixup alc662_fixups[] = {
+@@ -6646,6 +6664,12 @@ static const struct hda_fixup alc662_fixups[] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc_fixup_bass_chmap,
},
@@ -5258,7 +4950,7 @@ index 6968b79..1402ba9 100644
};
static const struct snd_pci_quirk alc662_fixup_tbl[] = {
-@@ -6641,8 +6692,9 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
+@@ -6668,8 +6692,9 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
SND_PCI_QUIRK(0x1028, 0x0698, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
diff --git a/4.4.8/4420_grsecurity-3.1-4.4.8-201604252206.patch b/4.5.2/4420_grsecurity-3.1-4.5.2-201604282058.patch
index a7a3280..00a02a9 100644
--- a/4.4.8/4420_grsecurity-3.1-4.4.8-201604252206.patch
+++ b/4.5.2/4420_grsecurity-3.1-4.5.2-201604282058.patch
@@ -311,10 +311,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 0e4102a..d24a808 100644
+index 21e4b48..82bb512 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -1282,6 +1282,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -1300,6 +1300,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
[KNL] Should the hard-lockup detector generate
backtraces on all cpus.
Format: <integer>
@@ -327,7 +327,7 @@ index 0e4102a..d24a808 100644
hashdist= [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes. Defaults on
-@@ -2418,6 +2424,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2476,6 +2482,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
noexec=on: enable non-executable mappings (default)
noexec=off: disable non-executable mappings
@@ -338,7 +338,7 @@ index 0e4102a..d24a808 100644
nosmap [X86]
Disable SMAP (Supervisor Mode Access Prevention)
even if it is supported by processor.
-@@ -2716,6 +2726,35 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2772,6 +2782,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.
@@ -374,49 +374,8 @@ index 0e4102a..d24a808 100644
pcbit= [HW,ISDN]
pcd. [PARIDE]
-diff --git a/Documentation/sysctl/fs.txt b/Documentation/sysctl/fs.txt
-index 88152f2..302b5ed 100644
---- a/Documentation/sysctl/fs.txt
-+++ b/Documentation/sysctl/fs.txt
-@@ -32,6 +32,8 @@ Currently, these files are in /proc/sys/fs:
- - nr_open
- - overflowuid
- - overflowgid
-+- pipe-user-pages-hard
-+- pipe-user-pages-soft
- - protected_hardlinks
- - protected_symlinks
- - suid_dumpable
-@@ -159,6 +161,27 @@ The default is 65534.
-
- ==============================================================
-
-+pipe-user-pages-hard:
-+
-+Maximum total number of pages a non-privileged user may allocate for pipes.
-+Once this limit is reached, no new pipes may be allocated until usage goes
-+below the limit again. When set to 0, no limit is applied, which is the default
-+setting.
-+
-+==============================================================
-+
-+pipe-user-pages-soft:
-+
-+Maximum total number of pages a non-privileged user may allocate for pipes
-+before the pipe size gets limited to a single page. Once this limit is reached,
-+new pipes will be limited to a single page in size for this user in order to
-+limit total memory usage, and trying to increase them using fcntl() will be
-+denied until usage goes below the limit again. The default value allows to
-+allocate up to 1024 pipes at their default size. When set to 0, no limit is
-+applied.
-+
-+==============================================================
-+
- protected_hardlinks:
-
- A long-standing class of security issues is the hardlink-based
diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
-index af70d15..ccd3786 100644
+index a93b414..f50a50b 100644
--- a/Documentation/sysctl/kernel.txt
+++ b/Documentation/sysctl/kernel.txt
@@ -42,6 +42,7 @@ show up in /proc/sys/kernel:
@@ -449,7 +408,7 @@ index af70d15..ccd3786 100644
A toggle value indicating if modules are allowed to be loaded
diff --git a/Makefile b/Makefile
-index 1928fcd..e58439b 100644
+index 1ecaaeb..8e81686 100644
--- a/Makefile
+++ b/Makefile
@@ -298,7 +298,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
@@ -474,7 +433,7 @@ index 1928fcd..e58439b 100644
$(Q)$(MAKE) $(build)=scripts/basic
$(Q)rm -f .tmp_quiet_recordmcount
-@@ -616,6 +618,8 @@ endif
+@@ -622,6 +624,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)
@@ -483,7 +442,7 @@ index 1928fcd..e58439b 100644
ifdef CONFIG_READABLE_ASM
# Disable optimizations that make assembler listings hard to read.
# reorder blocks reorders the control in the function
-@@ -708,7 +712,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
+@@ -714,7 +718,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
else
KBUILD_CFLAGS += -g
endif
@@ -492,7 +451,7 @@ index 1928fcd..e58439b 100644
endif
ifdef CONFIG_DEBUG_INFO_DWARF4
KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,)
-@@ -879,7 +883,7 @@ export mod_sign_cmd
+@@ -886,7 +890,7 @@ export mod_sign_cmd
ifeq ($(KBUILD_EXTMOD),)
@@ -501,7 +460,7 @@ index 1928fcd..e58439b 100644
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
-@@ -930,6 +934,8 @@ endif
+@@ -937,6 +941,8 @@ endif
# The actual objects are generated when descending,
# make sure no implicit rule kicks in
@@ -510,7 +469,7 @@ index 1928fcd..e58439b 100644
$(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
# Handle descending into subdirectories listed in $(vmlinux-dirs)
-@@ -939,7 +945,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
+@@ -946,7 +952,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
# Error messages still appears in the original language
PHONY += $(vmlinux-dirs)
@@ -519,7 +478,7 @@ index 1928fcd..e58439b 100644
$(Q)$(MAKE) $(build)=$@
define filechk_kernel.release
-@@ -982,10 +988,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
+@@ -989,10 +995,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
archprepare: archheaders archscripts prepare1 scripts_basic
@@ -533,7 +492,7 @@ index 1928fcd..e58439b 100644
prepare: prepare0
# Generate some files
-@@ -1096,6 +1105,8 @@ all: modules
+@@ -1103,6 +1112,8 @@ all: modules
# using awk while concatenating to the final file.
PHONY += modules
@@ -542,7 +501,7 @@ index 1928fcd..e58439b 100644
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
@$(kecho) ' Building modules, stage 2.';
-@@ -1111,7 +1122,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
+@@ -1118,7 +1129,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
# Target to prepare building external modules
PHONY += modules_prepare
@@ -551,7 +510,7 @@ index 1928fcd..e58439b 100644
# Target to install modules
PHONY += modules_install
-@@ -1177,7 +1188,11 @@ MRPROPER_FILES += .config .config.old .version .old_version \
+@@ -1184,7 +1195,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 \
@@ -564,7 +523,7 @@ index 1928fcd..e58439b 100644
# clean - Delete most, but leave enough to build external modules
#
-@@ -1216,7 +1231,7 @@ distclean: mrproper
+@@ -1223,7 +1238,7 @@ distclean: mrproper
@find $(srctree) $(RCS_FIND_IGNORE) \
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
@@ -573,7 +532,7 @@ index 1928fcd..e58439b 100644
-type f -print | xargs rm -f
-@@ -1383,6 +1398,8 @@ PHONY += $(module-dirs) modules
+@@ -1390,6 +1405,8 @@ PHONY += $(module-dirs) modules
$(module-dirs): crmodverdir $(objtree)/Module.symvers
$(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
@@ -582,7 +541,7 @@ index 1928fcd..e58439b 100644
modules: $(module-dirs)
@$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
-@@ -1524,17 +1541,21 @@ else
+@@ -1531,17 +1548,21 @@ else
target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
endif
@@ -608,7 +567,7 @@ index 1928fcd..e58439b 100644
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
%.symtypes: %.c prepare scripts FORCE
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
-@@ -1546,11 +1567,15 @@ endif
+@@ -1553,11 +1574,15 @@ endif
$(build)=$(build-dir)
# Make sure the latest headers are built for Documentation
Documentation/: headers_install
@@ -729,15 +688,15 @@ index a9a1195..e9b8417 100644
#define _PAGE_NORMAL(x) __pgprot(_PAGE_VALID | __ACCESS_BITS | (x))
diff --git a/arch/alpha/kernel/module.c b/arch/alpha/kernel/module.c
-index 2fd00b7..cfd5069 100644
+index 936bc8f..bb1859f 100644
--- a/arch/alpha/kernel/module.c
+++ b/arch/alpha/kernel/module.c
@@ -160,7 +160,7 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab,
/* The small sections were sorted to the end of the segment.
The following should definitely cover them. */
-- gp = (u64)me->module_core + me->core_size - 0x8000;
-+ gp = (u64)me->module_core_rw + me->core_size_rw - 0x8000;
+- gp = (u64)me->core_layout.base + me->core_layout.size - 0x8000;
++ gp = (u64)me->core_layout.base_rw + me->core_layout.size_rw - 0x8000;
got = sechdrs[me->arch.gotsecindex].sh_addr;
for (i = 0; i < n; i++) {
@@ -957,7 +916,7 @@ 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 6312f60..bd07545 100644
+index 8a188bc..26608f1 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -528,6 +528,7 @@ config ARC_DBG_TLB_MISS_COUNT
@@ -969,10 +928,10 @@ index 6312f60..bd07545 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 34e1569..b48ad87 100644
+index 4f799e5..261490f 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
-@@ -1690,6 +1690,7 @@ config HIGHPTE
+@@ -1622,6 +1622,7 @@ config HIGHPTE
config CPU_SW_DOMAIN_PAN
bool "Enable use of CPU domains to implement privileged no-access"
depends on MMU && !ARM_LPAE
@@ -980,7 +939,7 @@ index 34e1569..b48ad87 100644
default y
help
Increase kernel security by ensuring that normal kernel accesses
-@@ -1766,7 +1767,7 @@ config ALIGNMENT_TRAP
+@@ -1698,7 +1699,7 @@ config ALIGNMENT_TRAP
config UACCESS_WITH_MEMCPY
bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()"
@@ -989,7 +948,7 @@ index 34e1569..b48ad87 100644
default y if CPU_FEROCEON
help
Implement faster copy_to_user and clear_user methods for CPU
-@@ -2001,6 +2002,7 @@ config KEXEC
+@@ -1953,6 +1954,7 @@ config KEXEC
depends on (!SMP || PM_SLEEP_SMP)
depends on !CPU_V7M
select KEXEC_CORE
@@ -998,7 +957,7 @@ index 34e1569..b48ad87 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/arm/Kconfig.debug b/arch/arm/Kconfig.debug
-index ddbb361..caf403d 100644
+index c6b6175..2884505 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -7,6 +7,7 @@ config ARM_PTDUMP
@@ -1663,12 +1622,12 @@ 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 0f84249..8e83c55 100644
+index 3848259..bee9d84 100644
--- a/arch/arm/include/asm/cpuidle.h
+++ b/arch/arm/include/asm/cpuidle.h
@@ -32,7 +32,7 @@ struct device_node;
struct cpuidle_ops {
- int (*suspend)(int cpu, unsigned long arg);
+ int (*suspend)(unsigned long arg);
int (*init)(struct device_node *, int cpu);
-};
+} __no_const;
@@ -1828,7 +1787,7 @@ index 9e614a1..3302cca 100644
struct dma_struct {
void *addr; /* single DMA address */
diff --git a/arch/arm/include/asm/mach/map.h b/arch/arm/include/asm/mach/map.h
-index f98c7f3..e5c626d 100644
+index 9b7c328..2dfe68b 100644
--- a/arch/arm/include/asm/mach/map.h
+++ b/arch/arm/include/asm/mach/map.h
@@ -23,17 +23,19 @@ struct map_desc {
@@ -1988,7 +1947,7 @@ index aeddd28..207745c 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 a745a2a..481350a 100644
+index dc46398..70dab92 100644
--- a/arch/arm/include/asm/pgtable-3level.h
+++ b/arch/arm/include/asm/pgtable-3level.h
@@ -80,6 +80,7 @@
@@ -1999,8 +1958,8 @@ index a745a2a..481350a 100644
#define L_PTE_XN (_AT(pteval_t, 1) << 54) /* XN */
#define L_PTE_DIRTY (_AT(pteval_t, 1) << 55)
#define L_PTE_SPECIAL (_AT(pteval_t, 1) << 56)
-@@ -91,10 +92,12 @@
- #define L_PMD_SECT_SPLITTING (_AT(pmdval_t, 1) << 56)
+@@ -90,10 +91,12 @@
+ #define L_PMD_SECT_DIRTY (_AT(pmdval_t, 1) << 55)
#define L_PMD_SECT_NONE (_AT(pmdval_t, 1) << 57)
#define L_PMD_SECT_RDONLY (_AT(pteval_t, 1) << 58)
+#define PMD_SECT_RDONLY PMD_SECT_AP2
@@ -2393,10 +2352,10 @@ index 5af0ed1..cea83883 100644
#define PSR_ENDIAN_MASK 0x00000200 /* Endianness state mask */
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
-index f89811f..1d110d1 100644
+index 7e45f69..2c047db 100644
--- a/arch/arm/kernel/armksyms.c
+++ b/arch/arm/kernel/armksyms.c
-@@ -58,7 +58,7 @@ EXPORT_SYMBOL(arm_delay_ops);
+@@ -59,7 +59,7 @@ EXPORT_SYMBOL(arm_delay_ops);
/* networking */
EXPORT_SYMBOL(csum_partial);
@@ -2406,7 +2365,7 @@ index f89811f..1d110d1 100644
EXPORT_SYMBOL(__csum_ipv6_magic);
diff --git a/arch/arm/kernel/cpuidle.c b/arch/arm/kernel/cpuidle.c
-index 318da33..373689f 100644
+index 703926e..39aa432 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[];
@@ -2791,7 +2750,7 @@ index 059c3da..8e45cfc 100644
flush_icache_range((unsigned long)base + offset, offset +
length);
diff --git a/arch/arm/kernel/module-plts.c b/arch/arm/kernel/module-plts.c
-index 097e2e2..3927085 100644
+index 0c7efc3..3927085 100644
--- a/arch/arm/kernel/module-plts.c
+++ b/arch/arm/kernel/module-plts.c
@@ -30,17 +30,12 @@ struct plt_entries {
@@ -2800,7 +2759,7 @@ index 097e2e2..3927085 100644
-static bool in_init(const struct module *mod, u32 addr)
-{
-- return addr - (u32)mod->module_init < mod->init_size;
+- return addr - (u32)mod->init_layout.base < mod->init_layout.size;
-}
-
u32 get_module_plt(struct module *mod, unsigned long loc, Elf32_Addr val)
@@ -3066,10 +3025,10 @@ index 3826935..8ed63ed 100644
/*
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index 20edd34..e18ac81 100644
+index c86ea8a..fd03a2d 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
-@@ -110,21 +110,23 @@ EXPORT_SYMBOL(elf_hwcap);
+@@ -113,21 +113,23 @@ EXPORT_SYMBOL(elf_hwcap);
unsigned int elf_hwcap2 __read_mostly;
EXPORT_SYMBOL(elf_hwcap2);
@@ -3098,7 +3057,7 @@ index 20edd34..e18ac81 100644
EXPORT_SYMBOL(outer_cache);
#endif
-@@ -255,9 +257,13 @@ static int __get_cpu_architecture(void)
+@@ -258,9 +260,13 @@ static int __get_cpu_architecture(void)
* Register 0 and check for VMSAv7 or PMSAv7 */
unsigned int mmfr0 = read_cpuid_ext(CPUID_EXT_MMFR0);
if ((mmfr0 & 0x0000000f) >= 0x00000003 ||
@@ -3172,10 +3131,10 @@ index 7b8f214..ece8e28 100644
- return page;
-}
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index b263613..93419ed 100644
+index 37312f6..bb32c9b 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
-@@ -78,7 +78,7 @@ enum ipi_msg_type {
+@@ -82,7 +82,7 @@ enum ipi_msg_type {
static DECLARE_COMPLETION(cpu_running);
@@ -3271,19 +3230,19 @@ index 8b60fde..8d986dd 100644
# ifdef CONFIG_ARM_KERNMEM_PERMS
. = ALIGN(1<<SECTION_SHIFT);
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index e06fd29..0d3f8ab 100644
+index dda1959..0de41b4 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
-@@ -57,7 +57,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 */
-static atomic64_t kvm_vmid_gen = ATOMIC64_INIT(1);
+static atomic64_unchecked_t kvm_vmid_gen = ATOMIC64_INIT(1);
- static u8 kvm_next_vmid;
+ static u32 kvm_next_vmid;
+ static unsigned int kvm_vmid_bits __read_mostly;
static DEFINE_SPINLOCK(kvm_vmid_lock);
-
-@@ -380,7 +380,7 @@ void force_vm_exit(const cpumask_t *mask)
+@@ -387,7 +387,7 @@ void force_vm_exit(const cpumask_t *mask)
*/
static bool need_new_vmid_gen(struct kvm *kvm)
{
@@ -3292,7 +3251,7 @@ index e06fd29..0d3f8ab 100644
}
/**
-@@ -413,7 +413,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -420,7 +420,7 @@ static void update_vttbr(struct kvm *kvm)
/* First user of a new VMID generation? */
if (unlikely(kvm_next_vmid == 0)) {
@@ -3301,7 +3260,7 @@ index e06fd29..0d3f8ab 100644
kvm_next_vmid = 1;
/*
-@@ -430,7 +430,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -437,7 +437,7 @@ static void update_vttbr(struct kvm *kvm)
kvm_call_hyp(__kvm_flush_vm_context);
}
@@ -3309,7 +3268,7 @@ index e06fd29..0d3f8ab 100644
+ kvm->arch.vmid_gen = atomic64_read_unchecked(&kvm_vmid_gen);
kvm->arch.vmid = kvm_next_vmid;
kvm_next_vmid++;
-
+ kvm_next_vmid &= (1 << kvm_vmid_bits) - 1;
diff --git a/arch/arm/lib/copy_page.S b/arch/arm/lib/copy_page.S
index 6ee2f67..d1cce76 100644
--- a/arch/arm/lib/copy_page.S
@@ -3351,10 +3310,10 @@ index 8044591..c9b2609 100644
.const_udelay = __loop_const_udelay,
.udelay = __loop_udelay,
diff --git a/arch/arm/lib/uaccess_with_memcpy.c b/arch/arm/lib/uaccess_with_memcpy.c
-index 588bbc2..4f57e0b 100644
+index 6bd1089..e999400 100644
--- a/arch/arm/lib/uaccess_with_memcpy.c
+++ b/arch/arm/lib/uaccess_with_memcpy.c
-@@ -85,7 +85,7 @@ pin_page_for_write(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
+@@ -84,7 +84,7 @@ pin_page_for_write(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
return 1;
}
@@ -3363,7 +3322,7 @@ index 588bbc2..4f57e0b 100644
__copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
{
unsigned long ua_flags;
-@@ -158,7 +158,7 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
+@@ -157,7 +157,7 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
return n;
}
@@ -3447,7 +3406,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 79e1f87..6dd91e3 100644
+index c625cc1..3f47aae 100644
--- a/arch/arm/mach-omap2/omap-smp.c
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -19,6 +19,7 @@
@@ -3459,10 +3418,10 @@ index 79e1f87..6dd91e3 100644
#include <asm/smp_scu.h>
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
-index 72ebc4c..18c4406 100644
+index f7ff3b9..e6d5420 100644
--- a/arch/arm/mach-omap2/omap_device.c
+++ b/arch/arm/mach-omap2/omap_device.c
-@@ -504,7 +504,7 @@ void omap_device_delete(struct omap_device *od)
+@@ -515,7 +515,7 @@ void omap_device_delete(struct omap_device *od)
struct platform_device __init *omap_device_build(const char *pdev_name,
int pdev_id,
struct omap_hwmod *oh,
@@ -3471,7 +3430,7 @@ index 72ebc4c..18c4406 100644
{
struct omap_hwmod *ohs[] = { oh };
-@@ -532,7 +532,7 @@ struct platform_device __init *omap_device_build(const char *pdev_name,
+@@ -543,7 +543,7 @@ struct platform_device __init *omap_device_build(const char *pdev_name,
struct platform_device __init *omap_device_build_ss(const char *pdev_name,
int pdev_id,
struct omap_hwmod **ohs,
@@ -3500,7 +3459,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 8e0bd59..1d0b85e 100644
+index b6d62e4..6ba9f74 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 {
@@ -3564,7 +3523,7 @@ index ff0a68c..b312aa0 100644
sizeof(struct omap_wd_timer_platform_data));
WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n",
diff --git a/arch/arm/mach-shmobile/platsmp-apmu.c b/arch/arm/mach-shmobile/platsmp-apmu.c
-index 911884f..2f3aa90 100644
+index aba75c8..b55a9d7 100644
--- a/arch/arm/mach-shmobile/platsmp-apmu.c
+++ b/arch/arm/mach-shmobile/platsmp-apmu.c
@@ -22,6 +22,7 @@
@@ -3575,7 +3534,7 @@ index 911884f..2f3aa90 100644
#include "common.h"
#include "platsmp-apmu.h"
-@@ -233,6 +234,8 @@ static int shmobile_smp_apmu_enter_suspend(suspend_state_t state)
+@@ -232,6 +233,8 @@ static int shmobile_smp_apmu_enter_suspend(suspend_state_t state)
void __init shmobile_smp_apmu_suspend_init(void)
{
@@ -3623,7 +3582,7 @@ index 8538910..2f39bc4 100644
#include <linux/delay.h>
#include <linux/io.h>
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c
-index f66816c..228b951 100644
+index 7cd9865..a00b6ab 100644
--- a/arch/arm/mach-zynq/platsmp.c
+++ b/arch/arm/mach-zynq/platsmp.c
@@ -24,6 +24,7 @@
@@ -3635,7 +3594,7 @@ index f66816c..228b951 100644
#include "common.h"
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
-index 4121886..d24c0a1 100644
+index 549f6d3..909a9dc 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -442,6 +442,7 @@ config CPU_32v5
@@ -3682,7 +3641,7 @@ index 4121886..d24c0a1 100644
select GENERIC_TIME_VSYSCALL
help
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
-index 493692d..42a4504 100644
+index 9f9d542..5189649 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -44,7 +44,7 @@ struct l2c_init_data {
@@ -3993,10 +3952,10 @@ index 05ec5e0..0b70277 100644
unsigned long search_exception_table(unsigned long addr);
void early_abt_enable(void);
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
-index 7f8cd1b..6ac64cd 100644
+index 49bd081..a4502de 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
-@@ -742,7 +742,46 @@ void free_tcmmem(void)
+@@ -745,7 +745,46 @@ void free_tcmmem(void)
{
#ifdef CONFIG_HAVE_TCM
extern char __tcm_start, __tcm_end;
@@ -4044,10 +4003,10 @@ index 7f8cd1b..6ac64cd 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 0c81056..97279f7 100644
+index 66a978d..e808c4b 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
-@@ -405,9 +405,9 @@ __arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached)
+@@ -406,9 +406,9 @@ __arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached)
unsigned int mtype;
if (cached)
@@ -4060,7 +4019,7 @@ index 0c81056..97279f7 100644
return __arm_ioremap_caller(phys_addr, size, mtype,
__builtin_return_address(0));
diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
-index 407dc78..047ce9d 100644
+index 66353ca..8aad9f8 100644
--- a/arch/arm/mm/mmap.c
+++ b/arch/arm/mm/mmap.c
@@ -59,6 +59,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
@@ -4092,7 +4051,7 @@ index 407dc78..047ce9d 100644
return addr;
}
-@@ -99,6 +103,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -99,19 +103,21 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
info.high_limit = TASK_SIZE;
info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0;
info.align_offset = pgoff << PAGE_SHIFT;
@@ -4100,7 +4059,16 @@ index 407dc78..047ce9d 100644
return vm_unmapped_area(&info);
}
-@@ -112,6 +117,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+ unsigned long
+-arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+- const unsigned long len, const unsigned long pgoff,
+- const unsigned long flags)
++arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr0,
++ unsigned long len, unsigned long pgoff,
++ unsigned long flags)
+ {
+ struct vm_area_struct *vma;
+ struct mm_struct *mm = current->mm;
unsigned long addr = addr0;
int do_align = 0;
int aliasing = cache_is_vipt_aliasing();
@@ -4137,7 +4105,7 @@ index 407dc78..047ce9d 100644
addr = vm_unmapped_area(&info);
/*
-@@ -183,14 +193,30 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+@@ -182,14 +192,30 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
unsigned long random_factor = 0UL;
@@ -4169,7 +4137,7 @@ index 407dc78..047ce9d 100644
}
}
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
-index 4867f5d..dbfed1e 100644
+index 434d76f..af843d5 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -243,7 +243,15 @@ __setup("noalign", noalign_setup);
@@ -4374,7 +4342,7 @@ index 4867f5d..dbfed1e 100644
break;
}
pr_info("Memory policy: %sData cache %s\n",
-@@ -896,7 +937,7 @@ static void __init create_mapping(struct map_desc *md)
+@@ -958,7 +999,7 @@ static void __init create_mapping(struct map_desc *md)
return;
}
@@ -4383,7 +4351,7 @@ index 4867f5d..dbfed1e 100644
md->virtual >= PAGE_OFFSET && md->virtual < FIXADDR_START &&
(md->virtual < VMALLOC_START || md->virtual >= VMALLOC_END)) {
pr_warn("BUG: mapping for 0x%08llx at 0x%08lx out of vmalloc space\n",
-@@ -1266,18 +1307,15 @@ void __init arm_mm_memblock_reserve(void)
+@@ -1309,18 +1350,15 @@ void __init arm_mm_memblock_reserve(void)
* Any other function or debugging method which may touch any device _will_
* crash the kernel.
*/
@@ -4406,7 +4374,7 @@ index 4867f5d..dbfed1e 100644
/*
* Clear page table except top pmd used by early fixmaps
-@@ -1293,7 +1331,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
+@@ -1336,7 +1374,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK);
map.virtual = MODULES_VADDR;
map.length = ((unsigned long)_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK;
@@ -4415,7 +4383,7 @@ index 4867f5d..dbfed1e 100644
create_mapping(&map);
#endif
-@@ -1304,14 +1342,14 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
+@@ -1347,14 +1385,14 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
map.pfn = __phys_to_pfn(FLUSH_BASE_PHYS);
map.virtual = FLUSH_BASE;
map.length = SZ_1M;
@@ -4432,7 +4400,7 @@ index 4867f5d..dbfed1e 100644
create_mapping(&map);
#endif
-@@ -1320,7 +1358,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
+@@ -1363,7 +1401,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
* location (0xffff0000). If we aren't using high-vectors, also
* create a mapping at the low-vectors virtual address.
*/
@@ -4441,7 +4409,7 @@ index 4867f5d..dbfed1e 100644
map.virtual = 0xffff0000;
map.length = PAGE_SIZE;
#ifdef CONFIG_KUSER_HELPERS
-@@ -1383,8 +1421,10 @@ static void __init kmap_init(void)
+@@ -1426,8 +1464,10 @@ static void __init kmap_init(void)
static void __init map_lowmem(void)
{
struct memblock_region *reg;
@@ -4452,7 +4420,7 @@ index 4867f5d..dbfed1e 100644
/* Map all the lowmem memory banks. */
for_each_memblock(memory, reg) {
-@@ -1397,11 +1437,48 @@ static void __init map_lowmem(void)
+@@ -1443,11 +1483,48 @@ static void __init map_lowmem(void)
if (start >= end)
break;
@@ -4502,7 +4470,7 @@ index 4867f5d..dbfed1e 100644
create_mapping(&map);
} else if (start >= kernel_x_end) {
-@@ -1425,7 +1502,7 @@ static void __init map_lowmem(void)
+@@ -1471,7 +1548,7 @@ static void __init map_lowmem(void)
map.pfn = __phys_to_pfn(kernel_x_start);
map.virtual = __phys_to_virt(kernel_x_start);
map.length = kernel_x_end - kernel_x_start;
@@ -4511,7 +4479,7 @@ index 4867f5d..dbfed1e 100644
create_mapping(&map);
-@@ -1438,6 +1515,7 @@ static void __init map_lowmem(void)
+@@ -1484,6 +1561,7 @@ static void __init map_lowmem(void)
create_mapping(&map);
}
}
@@ -4519,20 +4487,6 @@ index 4867f5d..dbfed1e 100644
}
}
-diff --git a/arch/arm/mm/pageattr.c b/arch/arm/mm/pageattr.c
-index cf30daf..d19b1ad 100644
---- a/arch/arm/mm/pageattr.c
-+++ b/arch/arm/mm/pageattr.c
-@@ -49,6 +49,9 @@ static int change_memory_common(unsigned long addr, int numpages,
- WARN_ON_ONCE(1);
- }
-
-+ if (!numpages)
-+ return 0;
-+
- if (start < MODULES_VADDR || start >= MODULES_END)
- return -EINVAL;
-
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
index 93d0b6d..2db6d99 100644
--- a/arch/arm/net/bpf_jit_32.c
@@ -4677,7 +4631,7 @@ index a5bc92d..0bb4730 100644
+ pax_close_kernel();
}
diff --git a/arch/arm64/Kconfig.debug b/arch/arm64/Kconfig.debug
-index 04fb73b..368beca 100644
+index e13c4bf..3feaea7 100644
--- a/arch/arm64/Kconfig.debug
+++ b/arch/arm64/Kconfig.debug
@@ -6,6 +6,7 @@ config ARM64_PTDUMP
@@ -4762,7 +4716,7 @@ index b2ede967..865eed5 100644
#define user_addr_max get_fs
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
-index 354144e..f8c556b 100644
+index a6e757c..00fc586 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,
@@ -5036,10 +4990,10 @@ index 69952c18..4fa2908 100644
#define ARCH_DMA_MINALIGN L1_CACHE_BYTES
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
-index eb0249e..388ff32 100644
+index fb0515e..ca9715a 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
-@@ -519,6 +519,7 @@ config KEXEC
+@@ -518,6 +518,7 @@ config KEXEC
bool "kexec system call"
depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
select KEXEC_CORE
@@ -5261,84 +5215,57 @@ index 4f3fb6cc..254055e 100644
})
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c
-index b15933c..098b1c8 100644
+index 6ab0ae7..88f1b60 100644
--- a/arch/ia64/kernel/module.c
+++ b/arch/ia64/kernel/module.c
-@@ -484,15 +484,39 @@ module_frob_arch_sections (Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, char *secstrings,
- }
-
+@@ -486,13 +486,13 @@ module_frob_arch_sections (Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, char *secstrings,
static inline int
-+in_init_rx (const struct module *mod, uint64_t addr)
-+{
-+ return addr - (uint64_t) mod->module_init_rx < mod->init_size_rx;
-+}
-+
-+static inline int
-+in_init_rw (const struct module *mod, uint64_t addr)
-+{
-+ return addr - (uint64_t) mod->module_init_rw < mod->init_size_rw;
-+}
-+
-+static inline int
in_init (const struct module *mod, uint64_t addr)
{
-- return addr - (uint64_t) mod->module_init < mod->init_size;
-+ return in_init_rx(mod, addr) || in_init_rw(mod, addr);
-+}
-+
-+static inline int
-+in_core_rx (const struct module *mod, uint64_t addr)
-+{
-+ return addr - (uint64_t) mod->module_core_rx < mod->core_size_rx;
-+}
-+
-+static inline int
-+in_core_rw (const struct module *mod, uint64_t addr)
-+{
-+ return addr - (uint64_t) mod->module_core_rw < mod->core_size_rw;
+- return addr - (uint64_t) mod->init_layout.base < mod->init_layout.size;
++ return within_module_init(addr, mod);
}
static inline int
in_core (const struct module *mod, uint64_t addr)
{
-- return addr - (uint64_t) mod->module_core < mod->core_size;
-+ return in_core_rx(mod, addr) || in_core_rw(mod, addr);
+- return addr - (uint64_t) mod->core_layout.base < mod->core_layout.size;
++ return within_module_core(addr, mod);
}
static inline int
-@@ -675,7 +699,14 @@ do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend,
- break;
+@@ -676,6 +676,14 @@ do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend,
case RV_BDREL:
-- val -= (uint64_t) (in_init(mod, val) ? mod->module_init : mod->module_core);
-+ if (in_init_rx(mod, val))
-+ val -= (uint64_t) mod->module_init_rx;
-+ else if (in_init_rw(mod, val))
-+ val -= (uint64_t) mod->module_init_rw;
-+ else if (in_core_rx(mod, val))
-+ val -= (uint64_t) mod->module_core_rx;
-+ else if (in_core_rw(mod, val))
-+ val -= (uint64_t) mod->module_core_rw;
+ val -= (uint64_t) (in_init(mod, val) ? mod->init_layout.base : mod->core_layout.base);
++ if (within_module_rx(val, &mod->init_layout))
++ val -= mod->init_layout.base_rx;
++ else if (within_module_rw(val, &mod->init_layout))
++ val -= mod->init_layout.base_rw;
++ else if (within_module_rx(val, &mod->core_layout))
++ val -= mod->core_layout.base_rx;
++ else if (within_module_rw(val, &mod->core_layout))
++ val -= mod->core_layout.base_rw;
break;
case RV_LTV:
-@@ -810,15 +841,15 @@ apply_relocate_add (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symind
+@@ -810,15 +818,15 @@ apply_relocate_add (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symind
* addresses have been selected...
*/
uint64_t gp;
-- if (mod->core_size > MAX_LTOFF)
-+ if (mod->core_size_rx + mod->core_size_rw > MAX_LTOFF)
+- if (mod->core_layout.size > MAX_LTOFF)
++ if (mod->core_layout.size_rx + mod->core_layout.size_rw > MAX_LTOFF)
/*
* This takes advantage of fact that SHF_ARCH_SMALL gets allocated
* at the end of the module.
*/
-- gp = mod->core_size - MAX_LTOFF / 2;
-+ gp = mod->core_size_rx + mod->core_size_rw - MAX_LTOFF / 2;
+- gp = mod->core_layout.size - MAX_LTOFF / 2;
++ gp = mod->core_layout.size_rx + mod->core_layout.size_rw - MAX_LTOFF / 2;
else
-- gp = mod->core_size / 2;
-- gp = (uint64_t) mod->module_core + ((gp + 7) & -8);
-+ gp = (mod->core_size_rx + mod->core_size_rw) / 2;
-+ gp = (uint64_t) mod->module_core_rx + ((gp + 7) & -8);
+- gp = mod->core_layout.size / 2;
+- gp = (uint64_t) mod->core_layout.base + ((gp + 7) & -8);
++ gp = (mod->core_layout.size_rx + mod->core_layout.size_rw) / 2;
++ gp = (uint64_t) mod->core_layout.base_rx + ((gp + 7) & -8);
mod->arch.gp = gp;
DEBUGP("%s: placing gp at 0x%lx\n", __func__, gp);
}
@@ -5594,10 +5521,10 @@ index 4efe96a..60e8699 100644
#define SMP_CACHE_BYTES L1_CACHE_BYTES
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index db45961..6932668 100644
+index d3da79d..e607104 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -2642,6 +2642,7 @@ source "kernel/Kconfig.preempt"
+@@ -2656,6 +2656,7 @@ source "kernel/Kconfig.preempt"
config KEXEC
bool "Kexec system call"
select KEXEC_CORE
@@ -6255,10 +6182,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 b01a6ff..aa29db0 100644
+index e090fc3..eae24400 100644
--- a/arch/mips/include/asm/elf.h
+++ b/arch/mips/include/asm/elf.h
-@@ -420,6 +420,13 @@ extern const char *__elf_platform;
+@@ -425,6 +425,13 @@ extern const char *__elf_platform;
#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
#endif
@@ -6418,7 +6345,7 @@ index b336037..5b874cc 100644
/*
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
-index 18826aa..f5a6216 100644
+index 9a4fe01..3aa92e9 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -20,6 +20,9 @@
@@ -6486,7 +6413,7 @@ index 095ecaf..f1da6ff 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 1188e00..41cf144 100644
+index 1b992c6..4f250db 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];
@@ -6504,7 +6431,7 @@ index 1188e00..41cf144 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 9287678..f870e47 100644
+index abd3aff..ab1b84a 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];
@@ -6590,10 +6517,10 @@ index f63a289..53037c22 100644
/* Run the generated entry code */
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
-index f2975d4..f61d355 100644
+index eddd5fd..97314be 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
-@@ -541,18 +541,6 @@ out:
+@@ -539,18 +539,6 @@ out:
return pc;
}
@@ -6613,10 +6540,10 @@ index f2975d4..f61d355 100644
{
struct pt_regs *regs;
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
-index 4f0ac78..491124a 100644
+index a5279b2..50b73be 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
-@@ -873,6 +873,10 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -870,6 +870,10 @@ long arch_ptrace(struct task_struct *child, long request,
return ret;
}
@@ -6627,7 +6554,7 @@ index 4f0ac78..491124a 100644
/*
* Notification of system call entry/exit
* - triggered by current->work.syscall_trace
-@@ -891,6 +895,11 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
+@@ -888,6 +892,11 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
tracehook_report_syscall_entry(regs))
ret = -1;
@@ -6640,21 +6567,21 @@ index 4f0ac78..491124a 100644
trace_sys_enter(regs, regs->regs[2]);
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c
-index 2242bdd..b284048 100644
+index 4472a7f..c5905e6 100644
--- a/arch/mips/kernel/sync-r4k.c
+++ b/arch/mips/kernel/sync-r4k.c
@@ -18,8 +18,8 @@
#include <asm/mipsregs.h>
- static atomic_t count_start_flag = ATOMIC_INIT(0);
+ static unsigned int initcount = 0;
-static atomic_t count_count_start = ATOMIC_INIT(0);
-static atomic_t count_count_stop = ATOMIC_INIT(0);
+static atomic_unchecked_t count_count_start = ATOMIC_INIT(0);
+static atomic_unchecked_t count_count_stop = ATOMIC_INIT(0);
- static atomic_t count_reference = ATOMIC_INIT(0);
#define COUNTON 100
-@@ -58,13 +58,13 @@ void synchronise_count_master(int cpu)
+ #define NR_LOOPS 3
+@@ -46,13 +46,13 @@ void synchronise_count_master(int cpu)
for (i = 0; i < NR_LOOPS; i++) {
/* slaves loop on '!= 2' */
@@ -6665,15 +6592,15 @@ index 2242bdd..b284048 100644
+ atomic_set_unchecked(&count_count_stop, 0);
smp_wmb();
- /* this lets the slaves write their count register */
+ /* Let the slave writes its count register */
- atomic_inc(&count_count_start);
+ atomic_inc_unchecked(&count_count_start);
+ /* Count will be initialised to current timer */
+ if (i == 1)
+@@ -67,11 +67,11 @@ void synchronise_count_master(int cpu)
/*
- * Everyone initialises count in the last loop:
-@@ -75,11 +75,11 @@ void synchronise_count_master(int cpu)
- /*
- * Wait for all slaves to leave the synchronization point:
+ * Wait for slave to leave the synchronization point:
*/
- while (atomic_read(&count_count_stop) != 1)
+ while (atomic_read_unchecked(&count_count_stop) != 1)
@@ -6686,8 +6613,8 @@ index 2242bdd..b284048 100644
}
/* Arrange for an interrupt in a short while */
write_c0_compare(read_c0_count() + COUNTON);
-@@ -112,8 +112,8 @@ void synchronise_count_slave(int cpu)
- initcount = atomic_read(&count_reference);
+@@ -96,8 +96,8 @@ void synchronise_count_slave(int cpu)
+ */
for (i = 0; i < NR_LOOPS; i++) {
- atomic_inc(&count_count_start);
@@ -6697,7 +6624,7 @@ index 2242bdd..b284048 100644
mb();
/*
-@@ -122,8 +122,8 @@ void synchronise_count_slave(int cpu)
+@@ -106,8 +106,8 @@ void synchronise_count_slave(int cpu)
if (i == NR_LOOPS-1)
write_c0_count(initcount);
@@ -6709,7 +6636,7 @@ index 2242bdd..b284048 100644
}
/* Arrange for an interrupt in a short while */
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
-index ca9a810..e00a026 100644
+index bf14da9..d1e0ded 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -697,7 +697,18 @@ asmlinkage void do_ov(struct pt_regs *regs)
@@ -6903,8 +6830,25 @@ index 4b88fa0..b16bc17 100644
tsk->thread.cp0_badvaddr = address;
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
+--- a/arch/mips/mm/init.c
++++ b/arch/mips/mm/init.c
+@@ -468,10 +468,10 @@ void __init mem_init(void)
+
+ #ifdef CONFIG_64BIT
+ if ((unsigned long) &_text > (unsigned long) CKSEG0)
+- /* The -4 is a hack so that user tools don't have to handle
++ /* The -0x2000-4 is a hack so that user tools don't have to handle
+ the overflow. */
+ kclist_add(&kcore_kseg0, (void *) CKSEG0,
+- 0x80000000 - 4, KCORE_TEXT);
++ 0x80000000 - 0x2000 - 4, KCORE_TEXT);
+ #endif
+ }
+ #endif /* !CONFIG_NEED_MULTIPLE_NODES */
diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c
-index 5c81fdd..db158d3 100644
+index 3530376..81fb96b 100644
--- a/arch/mips/mm/mmap.c
+++ b/arch/mips/mm/mmap.c
@@ -59,6 +59,7 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
@@ -6978,7 +6922,7 @@ index 5c81fdd..db158d3 100644
-static inline unsigned long brk_rnd(void)
-{
-- unsigned long rnd = get_random_int();
+- unsigned long rnd = get_random_long();
-
- rnd = rnd << PAGE_SHIFT;
- /* 8MB for 32bit, 256MB for 64bit */
@@ -7120,6 +7064,19 @@ index bcb5df2..84fabd2 100644
#define L1_CACHE_WAYDISP 0x1000 /* distance from one way to the next */
#define L1_CACHE_TAG_VALID 0x00000001 /* cache tag valid bit */
+diff --git a/arch/nios2/lib/memset.c b/arch/nios2/lib/memset.c
+index c2cfcb1..2fcefe7 100644
+--- a/arch/nios2/lib/memset.c
++++ b/arch/nios2/lib/memset.c
+@@ -68,7 +68,7 @@ void *memset(void *s, int c, size_t count)
+ "=r" (charcnt), /* %1 Output */
+ "=r" (dwordcnt), /* %2 Output */
+ "=r" (fill8reg), /* %3 Output */
+- "=r" (wrkrega) /* %4 Output */
++ "=&r" (wrkrega) /* %4 Output only */
+ : "r" (c), /* %5 Input */
+ "0" (s), /* %0 Input/Output */
+ "1" (count) /* %1 Input/Output */
diff --git a/arch/openrisc/include/asm/cache.h b/arch/openrisc/include/asm/cache.h
index 4ce7a01..449202a 100644
--- a/arch/openrisc/include/asm/cache.h
@@ -7263,105 +7220,79 @@ index 1960b87..e8f57e3 100644
else
copy_from_user_overflow();
diff --git a/arch/parisc/kernel/module.c b/arch/parisc/kernel/module.c
-index 3c63a82..b1d6ee9 100644
+index b9d75d9..dae5c9a 100644
--- a/arch/parisc/kernel/module.c
+++ b/arch/parisc/kernel/module.c
-@@ -98,16 +98,38 @@
-
- /* three functions to determine where in the module core
+@@ -100,14 +100,12 @@
* or init pieces the location is */
-+static inline int in_init_rx(struct module *me, void *loc)
-+{
-+ return (loc >= me->module_init_rx &&
-+ loc < (me->module_init_rx + me->init_size_rx));
-+}
-+
-+static inline int in_init_rw(struct module *me, void *loc)
-+{
-+ return (loc >= me->module_init_rw &&
-+ loc < (me->module_init_rw + me->init_size_rw));
-+}
-+
static inline int in_init(struct module *me, void *loc)
{
-- return (loc >= me->module_init &&
-- loc <= (me->module_init + me->init_size));
-+ return in_init_rx(me, loc) || in_init_rw(me, loc);
-+}
-+
-+static inline int in_core_rx(struct module *me, void *loc)
-+{
-+ return (loc >= me->module_core_rx &&
-+ loc < (me->module_core_rx + me->core_size_rx));
-+}
-+
-+static inline int in_core_rw(struct module *me, void *loc)
-+{
-+ return (loc >= me->module_core_rw &&
-+ loc < (me->module_core_rw + me->core_size_rw));
+- return (loc >= me->init_layout.base &&
+- loc <= (me->init_layout.base + me->init_layout.size));
++ within_module_init((unsigned long)loc, me);
}
static inline int in_core(struct module *me, void *loc)
{
-- return (loc >= me->module_core &&
-- loc <= (me->module_core + me->core_size));
-+ return in_core_rx(me, loc) || in_core_rw(me, loc);
+- return (loc >= me->core_layout.base &&
+- loc <= (me->core_layout.base + me->core_layout.size));
++ within_module_core((unsigned long)loc, me);
}
static inline int in_local(struct module *me, void *loc)
-@@ -367,13 +389,13 @@ int module_frob_arch_sections(CONST Elf_Ehdr *hdr,
+@@ -367,13 +365,13 @@ int module_frob_arch_sections(CONST Elf_Ehdr *hdr,
}
/* align things a bit */
-- me->core_size = ALIGN(me->core_size, 16);
-- me->arch.got_offset = me->core_size;
-- me->core_size += gots * sizeof(struct got_entry);
-+ me->core_size_rw = ALIGN(me->core_size_rw, 16);
-+ me->arch.got_offset = me->core_size_rw;
-+ me->core_size_rw += gots * sizeof(struct got_entry);
-
-- me->core_size = ALIGN(me->core_size, 16);
-- me->arch.fdesc_offset = me->core_size;
-- me->core_size += fdescs * sizeof(Elf_Fdesc);
-+ me->core_size_rw = ALIGN(me->core_size_rw, 16);
-+ me->arch.fdesc_offset = me->core_size_rw;
-+ me->core_size_rw += fdescs * sizeof(Elf_Fdesc);
+- me->core_layout.size = ALIGN(me->core_layout.size, 16);
+- me->arch.got_offset = me->core_layout.size;
+- me->core_layout.size += gots * sizeof(struct got_entry);
++ me->core_layout.size_rw = ALIGN(me->core_layout.size_rw, 16);
++ me->arch.got_offset = me->core_layout.size_rw;
++ me->core_layout.size_rw += gots * sizeof(struct got_entry);
+
+- me->core_layout.size = ALIGN(me->core_layout.size, 16);
+- me->arch.fdesc_offset = me->core_layout.size;
+- me->core_layout.size += fdescs * sizeof(Elf_Fdesc);
++ me->core_layout.size_rw = ALIGN(me->core_layout.size_rw, 16);
++ me->arch.fdesc_offset = me->core_layout.size_rw;
++ me->core_layout.size_rw += fdescs * sizeof(Elf_Fdesc);
me->arch.got_max = gots;
me->arch.fdesc_max = fdescs;
-@@ -391,7 +413,7 @@ static Elf64_Word get_got(struct module *me, unsigned long value, long addend)
+@@ -391,7 +389,7 @@ static Elf64_Word get_got(struct module *me, unsigned long value, long addend)
BUG_ON(value == 0);
-- got = me->module_core + me->arch.got_offset;
-+ got = me->module_core_rw + me->arch.got_offset;
+- got = me->core_layout.base + me->arch.got_offset;
++ got = me->core_layout.base_rw + me->arch.got_offset;
for (i = 0; got[i].addr; i++)
if (got[i].addr == value)
goto out;
-@@ -409,7 +431,7 @@ static Elf64_Word get_got(struct module *me, unsigned long value, long addend)
+@@ -409,7 +407,7 @@ static Elf64_Word get_got(struct module *me, unsigned long value, long addend)
#ifdef CONFIG_64BIT
static Elf_Addr get_fdesc(struct module *me, unsigned long value)
{
-- Elf_Fdesc *fdesc = me->module_core + me->arch.fdesc_offset;
-+ Elf_Fdesc *fdesc = me->module_core_rw + me->arch.fdesc_offset;
+- Elf_Fdesc *fdesc = me->core_layout.base + me->arch.fdesc_offset;
++ Elf_Fdesc *fdesc = me->core_layout.base_rw + me->arch.fdesc_offset;
if (!value) {
printk(KERN_ERR "%s: zero OPD requested!\n", me->name);
-@@ -427,7 +449,7 @@ static Elf_Addr get_fdesc(struct module *me, unsigned long value)
+@@ -427,7 +425,7 @@ static Elf_Addr get_fdesc(struct module *me, unsigned long value)
/* Create new one */
fdesc->addr = value;
-- fdesc->gp = (Elf_Addr)me->module_core + me->arch.got_offset;
-+ fdesc->gp = (Elf_Addr)me->module_core_rw + me->arch.got_offset;
+- fdesc->gp = (Elf_Addr)me->core_layout.base + me->arch.got_offset;
++ fdesc->gp = (Elf_Addr)me->core_layout.base_rw + me->arch.got_offset;
return (Elf_Addr)fdesc;
}
#endif /* CONFIG_64BIT */
-@@ -839,7 +861,7 @@ register_unwind_table(struct module *me,
+@@ -839,7 +837,7 @@ register_unwind_table(struct module *me,
table = (unsigned char *)sechdrs[me->arch.unwind_section].sh_addr;
end = table + sechdrs[me->arch.unwind_section].sh_size;
-- gp = (Elf_Addr)me->module_core + me->arch.got_offset;
-+ gp = (Elf_Addr)me->module_core_rw + me->arch.got_offset;
+- gp = (Elf_Addr)me->core_layout.base + me->arch.got_offset;
++ gp = (Elf_Addr)me->core_layout.base_rw + me->arch.got_offset;
DEBUGP("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n",
me->arch.unwind_section, table, end, gp);
@@ -7626,10 +7557,10 @@ index f906444..0bb73ae 100644
/*
* If for any reason at all we couldn't handle the fault, make
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
-index db49e0d..de977a0 100644
+index 9faa18c..6061610 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
-@@ -421,6 +421,7 @@ config KEXEC
+@@ -419,6 +419,7 @@ config KEXEC
bool "kexec system call"
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) || PPC_BOOK3E
select KEXEC_CORE
@@ -8150,6 +8081,18 @@ index 55f106e..70cc82a 100644
" subf %0,%2,%0 \n\
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
+--- a/arch/powerpc/include/asm/book3s/32/hash.h
++++ b/arch/powerpc/include/asm/book3s/32/hash.h
+@@ -20,6 +20,7 @@
+ #define _PAGE_HASHPTE 0x002 /* hash_page has made an HPTE for this pte */
+ #define _PAGE_USER 0x004 /* usermode access allowed */
+ #define _PAGE_GUARDED 0x008 /* G: prohibit speculative access */
++#define _PAGE_EXEC _PAGE_GUARDED
+ #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/cache.h b/arch/powerpc/include/asm/cache.h
index 5f8229e..385d90b 100644
--- a/arch/powerpc/include/asm/cache.h
@@ -8313,7 +8256,7 @@ index 8565c25..2865190 100644
return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0);
}
diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
-index 3140c19..0c43168 100644
+index e34124f..c146c14 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;
@@ -8364,13 +8307,13 @@ 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 4b0be20..c15a27d 100644
+index 69ef28a..216486d 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, PUD)
+ #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)
@@ -8384,10 +8327,10 @@ index 4b0be20..c15a27d 100644
+ pud_populate(mm, pud, pmd);
+}
+
- #define pmd_populate(mm, pmd, pte_page) \
- pmd_populate_kernel(mm, pmd, page_address(pte_page))
- #define pmd_populate_kernel(mm, pmd, pte) pmd_set(pmd, (unsigned long)(pte))
-@@ -173,6 +179,7 @@ extern void __tlb_remove_table(void *_table);
+ static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
+ pte_t *pte)
+ {
+@@ -172,6 +178,7 @@ extern void __tlb_remove_table(void *_table);
#endif
#define pud_populate(mm, pud, pmd) pud_set(pud, (unsigned long)pmd)
@@ -8396,31 +8339,19 @@ index 4b0be20..c15a27d 100644
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 b64b421..cc8447a 100644
+index ac9fb11..4efa476 100644
--- a/arch/powerpc/include/asm/pgtable.h
+++ b/arch/powerpc/include/asm/pgtable.h
-@@ -2,6 +2,7 @@
+@@ -1,6 +1,7 @@
+ #ifndef _ASM_POWERPC_PGTABLE_H
#define _ASM_POWERPC_PGTABLE_H
- #ifdef __KERNEL__
+#include <linux/const.h>
#ifndef __ASSEMBLY__
#include <linux/mmdebug.h>
#include <linux/mmzone.h>
-diff --git a/arch/powerpc/include/asm/pte-hash32.h b/arch/powerpc/include/asm/pte-hash32.h
-index 62cfb0c..50c6402 100644
---- a/arch/powerpc/include/asm/pte-hash32.h
-+++ b/arch/powerpc/include/asm/pte-hash32.h
-@@ -20,6 +20,7 @@
- #define _PAGE_HASHPTE 0x002 /* hash_page has made an HPTE for this pte */
- #define _PAGE_USER 0x004 /* usermode access allowed */
- #define _PAGE_GUARDED 0x008 /* G: prohibit speculative access */
-+#define _PAGE_EXEC _PAGE_GUARDED
- #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/reg.h b/arch/powerpc/include/asm/reg.h
-index 2220f7a..5a9420e 100644
+index c4cb2ff..b04130e 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -253,6 +253,7 @@
@@ -8537,7 +8468,7 @@ index 7efee4a..48d47cc 100644
#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
_TIF_NOTIFY_RESUME | _TIF_UPROBE | \
diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h
-index 2a8ebae..5643c6f 100644
+index b7c20f0..4adc0f1 100644
--- a/arch/powerpc/include/asm/uaccess.h
+++ b/arch/powerpc/include/asm/uaccess.h
@@ -58,6 +58,7 @@
@@ -8548,7 +8479,7 @@ index 2a8ebae..5643c6f 100644
#define access_ok(type, addr, size) \
(__chk_user_ptr(addr), \
__access_ok((__force unsigned long)(addr), (size), get_fs()))
-@@ -318,52 +319,6 @@ do { \
+@@ -303,52 +304,6 @@ do { \
extern unsigned long __copy_tofrom_user(void __user *to,
const void __user *from, unsigned long size);
@@ -8601,7 +8532,7 @@ index 2a8ebae..5643c6f 100644
static inline unsigned long __copy_from_user_inatomic(void *to,
const void __user *from, unsigned long n)
{
-@@ -387,6 +342,10 @@ static inline unsigned long __copy_from_user_inatomic(void *to,
+@@ -372,6 +327,10 @@ static inline unsigned long __copy_from_user_inatomic(void *to,
if (ret == 0)
return 0;
}
@@ -8612,7 +8543,7 @@ index 2a8ebae..5643c6f 100644
return __copy_tofrom_user((__force void __user *)to, from, n);
}
-@@ -413,6 +372,10 @@ static inline unsigned long __copy_to_user_inatomic(void __user *to,
+@@ -398,6 +357,10 @@ static inline unsigned long __copy_to_user_inatomic(void __user *to,
if (ret == 0)
return 0;
}
@@ -8623,7 +8554,7 @@ index 2a8ebae..5643c6f 100644
return __copy_tofrom_user(to, (__force const void __user *)from, n);
}
-@@ -430,6 +393,92 @@ static inline unsigned long __copy_to_user(void __user *to,
+@@ -415,6 +378,92 @@ static inline unsigned long __copy_to_user(void __user *to,
return __copy_to_user_inatomic(to, from, size);
}
@@ -8717,7 +8648,7 @@ index 2a8ebae..5643c6f 100644
static inline unsigned long clear_user(void __user *addr, unsigned long size)
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
-index ba33693..d8db875 100644
+index 794f22a..f8de42b 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -14,6 +14,11 @@ CFLAGS_prom_init.o += -fPIC
@@ -8764,10 +8695,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 0a0399c2..262a2e6 100644
+index 7716ceb..6018173 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
-@@ -1591,10 +1591,10 @@ handle_page_fault:
+@@ -1572,10 +1572,10 @@ handle_page_fault:
11: ld r4,_DAR(r1)
ld r5,_DSISR(r1)
addi r3,r1,STACK_FRAME_OVERHEAD
@@ -8801,7 +8732,7 @@ index 290559d..0094ddb 100644
#endif
}
diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c
-index c94d2e0..992a9ce 100644
+index 2c01665..85a54a8 100644
--- a/arch/powerpc/kernel/module_32.c
+++ b/arch/powerpc/kernel/module_32.c
@@ -158,7 +158,7 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr,
@@ -8817,14 +8748,14 @@ index c94d2e0..992a9ce 100644
pr_debug("Doing plt for call to 0x%x at 0x%x\n", val, (unsigned int)location);
/* Init, or core PLT? */
-- if (location >= mod->module_core
-- && location < mod->module_core + mod->core_size)
-+ if ((location >= mod->module_core_rx && location < mod->module_core_rx + mod->core_size_rx) ||
-+ (location >= mod->module_core_rw && location < mod->module_core_rw + mod->core_size_rw))
+- if (location >= mod->core_layout.base
+- && location < mod->core_layout.base + mod->core_layout.size)
++ if ((location >= mod->core_layout.base_rx && location < mod->core_layout.base_rx + mod->core_layout.size_rx) ||
++ (location >= mod->core_layout.base_rw && location < mod->core_layout.base_rw + mod->core_layout.size_rw))
entry = (void *)sechdrs[mod->arch.core_plt_section].sh_addr;
- else
-+ else if ((location >= mod->module_init_rx && location < mod->module_init_rx + mod->init_size_rx) ||
-+ (location >= mod->module_init_rw && location < mod->module_init_rw + mod->init_size_rw))
++ else if ((location >= mod->init_layout.base_rx && location < mod->init_layout.base_rx + mod->init_layout.size_rx) ||
++ (location >= mod->init_layout.base_rw && location < mod->init_layout.base_rw + mod->init_layout.size_rw))
entry = (void *)sechdrs[mod->arch.init_plt_section].sh_addr;
+ else {
+ printk(KERN_ERR "%s: invalid R_PPC_REL24 entry found\n", mod->name);
@@ -8837,16 +8768,16 @@ index c94d2e0..992a9ce 100644
}
#ifdef CONFIG_DYNAMIC_FTRACE
module->arch.tramp =
-- do_plt_call(module->module_core,
-+ do_plt_call(module->module_core_rx,
+- do_plt_call(module->core_layout.base,
++ do_plt_call(module->core_layout.base_rx,
(unsigned long)ftrace_caller,
sechdrs, module);
#endif
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
-index ef2ad2d..645e131 100644
+index 54ed9c7..f7d6e72 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
-@@ -1069,8 +1069,8 @@ void show_regs(struct pt_regs * regs)
+@@ -1185,8 +1185,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
*/
@@ -8857,7 +8788,7 @@ index ef2ad2d..645e131 100644
#endif
show_stack(current, (unsigned long *) regs->gpr[1]);
if (!user_mode(regs))
-@@ -1586,10 +1586,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1695,10 +1695,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
newsp = stack[0];
ip = stack[STACK_FRAME_LR_SAVE];
if (!firstframe || ip != lr) {
@@ -8870,7 +8801,7 @@ index ef2ad2d..645e131 100644
(void *)current->ret_stack[curr_frame].ret);
curr_frame--;
}
-@@ -1609,7 +1609,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1718,7 +1718,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;
@@ -8879,7 +8810,7 @@ index ef2ad2d..645e131 100644
regs->trap, (void *)regs->nip, (void *)lr);
firstframe = 1;
}
-@@ -1645,49 +1645,3 @@ void notrace __ppc64_runlatch_off(void)
+@@ -1754,49 +1754,3 @@ void notrace __ppc64_runlatch_off(void)
mtspr(SPRN_CTRLT, ctrl);
}
#endif /* CONFIG_PPC64 */
@@ -8897,9 +8828,9 @@ index ef2ad2d..645e131 100644
-
- /* 8MB for 32bit, 1GB for 64bit */
- if (is_32bit_task())
-- rnd = (long)(get_random_int() % (1<<(23-PAGE_SHIFT)));
+- rnd = (get_random_long() % (1UL<<(23-PAGE_SHIFT)));
- else
-- rnd = (long)(get_random_int() % (1<<(30-PAGE_SHIFT)));
+- rnd = (get_random_long() % (1UL<<(30-PAGE_SHIFT)));
-
- return rnd << PAGE_SHIFT;
-}
@@ -8930,10 +8861,10 @@ index ef2ad2d..645e131 100644
-}
-
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
-index 737c0d0..59c7417 100644
+index 30a03c0..e2d507b 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
-@@ -1800,6 +1800,10 @@ static int do_seccomp(struct pt_regs *regs)
+@@ -1801,6 +1801,10 @@ static int do_seccomp(struct pt_regs *regs)
static inline int do_seccomp(struct pt_regs *regs) { return 0; }
#endif /* CONFIG_SECCOMP */
@@ -8944,7 +8875,7 @@ index 737c0d0..59c7417 100644
/**
* do_syscall_trace_enter() - Do syscall tracing on kernel entry.
* @regs: the pt_regs of the task to trace (current)
-@@ -1828,6 +1832,11 @@ long do_syscall_trace_enter(struct pt_regs *regs)
+@@ -1829,6 +1833,11 @@ long do_syscall_trace_enter(struct pt_regs *regs)
if (do_seccomp(regs))
return -1;
@@ -8956,7 +8887,7 @@ index 737c0d0..59c7417 100644
if (test_thread_flag(TIF_SYSCALL_TRACE)) {
/*
* The tracer may decide to abort the syscall, if so tracehook
-@@ -1870,6 +1879,11 @@ void do_syscall_trace_leave(struct pt_regs *regs)
+@@ -1871,6 +1880,11 @@ void do_syscall_trace_leave(struct pt_regs *regs)
{
int step;
@@ -8969,10 +8900,10 @@ index 737c0d0..59c7417 100644
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
-index ef7c24e..755a485 100644
+index b6aa378..a491f51 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
-@@ -1018,7 +1018,7 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
+@@ -1000,7 +1000,7 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
/* Save user registers on the stack */
frame = &rt_sf->uc.uc_mcontext;
addr = frame;
@@ -8982,10 +8913,10 @@ index ef7c24e..755a485 100644
tramp = current->mm->context.vdso_base + vdso32_rt_sigtramp;
} else {
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
-index c676ece..188c057 100644
+index 2552079..a290dc8a 100644
--- a/arch/powerpc/kernel/signal_64.c
+++ b/arch/powerpc/kernel/signal_64.c
-@@ -769,7 +769,7 @@ int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs
+@@ -751,7 +751,7 @@ int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs
current->thread.fp_state.fpscr = 0;
/* Set up to return from userspace. */
@@ -8995,7 +8926,7 @@ index c676ece..188c057 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 37de90f..12472ac 100644
+index b6becc7..31a89c4 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -36,6 +36,7 @@
@@ -9053,7 +8984,7 @@ index 37de90f..12472ac 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 b457bfa..9018cde 100644
+index def1b8b..51ae209 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -34,6 +34,7 @@
@@ -9218,7 +9149,7 @@ index a67c6d7..a662e6d 100644
goto bail;
}
diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
-index 0f0502e..bc3e7a3 100644
+index 4087705..7e75693 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)
@@ -9255,7 +9186,7 @@ index 0f0502e..bc3e7a3 100644
}
}
diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
-index 0f432a7..abfe841 100644
+index 42954f0..a8252e2 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,
@@ -9267,7 +9198,7 @@ index 0f432a7..abfe841 100644
}
static int slice_low_has_vma(struct mm_struct *mm, unsigned long slice)
-@@ -277,6 +277,12 @@ static unsigned long slice_find_area_bottomup(struct mm_struct *mm,
+@@ -276,6 +276,12 @@ static unsigned long slice_find_area_bottomup(struct mm_struct *mm,
info.align_offset = 0;
addr = TASK_UNMAPPED_BASE;
@@ -9280,7 +9211,7 @@ index 0f432a7..abfe841 100644
while (addr < TASK_SIZE) {
info.low_limit = addr;
if (!slice_scan_available(addr, available, 1, &addr))
-@@ -410,6 +416,11 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
+@@ -409,6 +415,11 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
if (fixed && addr > (mm->task_size - len))
return -ENOMEM;
@@ -9292,8 +9223,23 @@ index 0f432a7..abfe841 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,
+ }
+
+ unsigned long arch_get_unmapped_area_topdown(struct file *filp,
+- const unsigned long addr0,
+- const unsigned long len,
+- const unsigned long pgoff,
+- const unsigned long flags)
++ unsigned long addr0,
++ unsigned long len,
++ unsigned long pgoff,
++ unsigned long flags)
+ {
+ return slice_get_unmapped_area(addr0, len, flags,
+ current->mm->context.user_psize, 1);
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c
-index 5038fd5..87a2033 100644
+index 2936a00..2e73ed6 100644
--- a/arch/powerpc/platforms/cell/spufs/file.c
+++ b/arch/powerpc/platforms/cell/spufs/file.c
@@ -263,9 +263,9 @@ spufs_mem_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
@@ -9309,10 +9255,10 @@ index 5038fd5..87a2033 100644
struct spu_context *ctx = vma->vm_file->private_data;
unsigned long offset = address - vma->vm_start;
diff --git a/arch/s390/Kconfig.debug b/arch/s390/Kconfig.debug
-index c56878e..073d04e 100644
+index 26c5d5be..a308c28 100644
--- a/arch/s390/Kconfig.debug
+++ b/arch/s390/Kconfig.debug
-@@ -21,6 +21,7 @@ config S390_PTDUMP
+@@ -9,6 +9,7 @@ config S390_PTDUMP
bool "Export kernel pagetable layout to userspace via debugfs"
depends on DEBUG_KERNEL
select DEBUG_FS
@@ -9356,10 +9302,10 @@ index 4d7ccac..d03d0ad 100644
#define __read_mostly __attribute__((__section__(".data..read_mostly")))
diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
-index bab6739..f0d5493 100644
+index 563ab9f..65d8bd4 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
-@@ -163,6 +163,13 @@ extern unsigned int vdso_enabled;
+@@ -167,6 +167,13 @@ extern unsigned int vdso_enabled;
(STACK_TOP / 3 * 2) : \
(STACK_TOP / 3 * 2) & ~((1UL << 32) - 1))
@@ -9426,23 +9372,23 @@ index 9dd4cc4..36f4b84 100644
return n;
}
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
-index 0c1a679..e1df357 100644
+index 7873e17..d21af5b 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,
/* Increase core size by size of got & plt and set start
offsets for got and plt. */
-- me->core_size = ALIGN(me->core_size, 4);
-- me->arch.got_offset = me->core_size;
-- me->core_size += me->arch.got_size;
-- me->arch.plt_offset = me->core_size;
-- me->core_size += me->arch.plt_size;
-+ me->core_size_rw = ALIGN(me->core_size_rw, 4);
-+ me->arch.got_offset = me->core_size_rw;
-+ me->core_size_rw += me->arch.got_size;
-+ me->arch.plt_offset = me->core_size_rx;
-+ me->core_size_rx += me->arch.plt_size;
+- me->core_layout.size = ALIGN(me->core_layout.size, 4);
+- me->arch.got_offset = me->core_layout.size;
+- me->core_layout.size += me->arch.got_size;
+- me->arch.plt_offset = me->core_layout.size;
+- me->core_layout.size += me->arch.plt_size;
++ me->core_layout.size_rw = ALIGN(me->core_layout.size_rw, 4);
++ me->arch.got_offset = me->core_layout.size_rw;
++ me->core_layout.size_rw += me->arch.got_size;
++ me->arch.plt_offset = me->core_layout.size_rx;
++ me->core_layout.size_rx += me->arch.plt_size;
return 0;
}
@@ -9450,8 +9396,8 @@ index 0c1a679..e1df357 100644
if (info->got_initialized == 0) {
Elf_Addr *gotent;
-- gotent = me->module_core + me->arch.got_offset +
-+ gotent = me->module_core_rw + me->arch.got_offset +
+- gotent = me->core_layout.base + me->arch.got_offset +
++ gotent = me->core_layout.base_rw + me->arch.got_offset +
info->got_offset;
*gotent = val;
info->got_initialized = 1;
@@ -9459,8 +9405,8 @@ index 0c1a679..e1df357 100644
rc = apply_rela_bits(loc, val, 0, 64, 0);
else if (r_type == R_390_GOTENT ||
r_type == R_390_GOTPLTENT) {
-- val += (Elf_Addr) me->module_core - loc;
-+ val += (Elf_Addr) me->module_core_rw - loc;
+- val += (Elf_Addr) me->core_layout.base - loc;
++ val += (Elf_Addr) me->core_layout.base_rw - loc;
rc = apply_rela_bits(loc, val, 1, 32, 1);
}
break;
@@ -9468,8 +9414,8 @@ index 0c1a679..e1df357 100644
case R_390_PLTOFF64: /* 16 bit offset from GOT to PLT. */
if (info->plt_initialized == 0) {
unsigned int *ip;
-- ip = me->module_core + me->arch.plt_offset +
-+ ip = me->module_core_rx + me->arch.plt_offset +
+- ip = me->core_layout.base + me->arch.plt_offset +
++ ip = me->core_layout.base_rx + me->arch.plt_offset +
info->plt_offset;
ip[0] = 0x0d10e310; /* basr 1,0; lg 1,10(1); br 1 */
ip[1] = 0x100a0004;
@@ -9477,8 +9423,8 @@ index 0c1a679..e1df357 100644
val - loc + 0xffffUL < 0x1ffffeUL) ||
(r_type == R_390_PLT32DBL &&
val - loc + 0xffffffffULL < 0x1fffffffeULL)))
-- val = (Elf_Addr) me->module_core +
-+ val = (Elf_Addr) me->module_core_rx +
+- val = (Elf_Addr) me->core_layout.base +
++ val = (Elf_Addr) me->core_layout.base_rx +
me->arch.plt_offset +
info->plt_offset;
val += rela->r_addend - loc;
@@ -9486,8 +9432,8 @@ index 0c1a679..e1df357 100644
case R_390_GOTOFF32: /* 32 bit offset to GOT. */
case R_390_GOTOFF64: /* 64 bit offset to GOT. */
val = val + rela->r_addend -
-- ((Elf_Addr) me->module_core + me->arch.got_offset);
-+ ((Elf_Addr) me->module_core_rw + me->arch.got_offset);
+- ((Elf_Addr) me->core_layout.base + me->arch.got_offset);
++ ((Elf_Addr) me->core_layout.base_rw + me->arch.got_offset);
if (r_type == R_390_GOTOFF16)
rc = apply_rela_bits(loc, val, 0, 16, 0);
else if (r_type == R_390_GOTOFF32)
@@ -9495,13 +9441,13 @@ index 0c1a679..e1df357 100644
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. */
-- val = (Elf_Addr) me->module_core + me->arch.got_offset +
-+ val = (Elf_Addr) me->module_core_rw + me->arch.got_offset +
+- val = (Elf_Addr) me->core_layout.base + me->arch.got_offset +
++ val = (Elf_Addr) me->core_layout.base_rw + me->arch.got_offset +
rela->r_addend - loc;
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 114ee8b..7d1123f 100644
+index 2bba7df..587489f 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -233,23 +233,3 @@ unsigned long get_wchan(struct task_struct *p)
@@ -9529,9 +9475,22 @@ index 114ee8b..7d1123f 100644
- return (ret > mm->brk) ? ret : mm->brk;
-}
diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
-index ea01477..ff5ec44 100644
+index 45c4daa..42703fb 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,
+ }
+
+ static unsigned long
+-s390_get_unmapped_area_topdown(struct file *filp, const unsigned long addr,
+- const unsigned long len, const unsigned long pgoff,
+- const unsigned long flags)
++s390_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
++ unsigned long len, unsigned long pgoff,
++ unsigned long flags)
+ {
+ struct mm_struct *mm = current->mm;
+ unsigned long area;
@@ -229,6 +229,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
{
unsigned long random_factor = 0UL;
@@ -9623,7 +9582,7 @@ index ef9e555..331bd29 100644
#define __read_mostly __attribute__((__section__(".data..read_mostly")))
diff --git a/arch/sh/mm/mmap.c b/arch/sh/mm/mmap.c
-index 6777177..cb5e44f 100644
+index 6777177..d44b592 100644
--- a/arch/sh/mm/mmap.c
+++ b/arch/sh/mm/mmap.c
@@ -36,6 +36,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
@@ -9662,7 +9621,18 @@ index 6777177..cb5e44f 100644
info.high_limit = TASK_SIZE;
info.align_mask = do_colour_align ? (PAGE_MASK & shm_align_mask) : 0;
info.align_offset = pgoff << PAGE_SHIFT;
-@@ -85,6 +89,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -77,14 +81,15 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
+ }
+
+ unsigned long
+-arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+- const unsigned long len, const unsigned long pgoff,
+- const unsigned long flags)
++arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr0,
++ unsigned long len, unsigned long pgoff,
++ unsigned long flags)
+ {
+ struct vm_area_struct *vma;
struct mm_struct *mm = current->mm;
unsigned long addr = addr0;
int do_colour_align;
@@ -10232,7 +10202,7 @@ index bd56c28..4b63d83 100644
#include <asm/uaccess_64.h>
#else
diff --git a/arch/sparc/include/asm/uaccess_32.h b/arch/sparc/include/asm/uaccess_32.h
-index 64ee103..388aef0 100644
+index 57aca27..a87e6eb 100644
--- a/arch/sparc/include/asm/uaccess_32.h
+++ b/arch/sparc/include/asm/uaccess_32.h
@@ -47,6 +47,7 @@
@@ -10243,7 +10213,7 @@ index 64ee103..388aef0 100644
#define access_ok(type, addr, size) \
({ (void)(type); __access_ok((unsigned long)(addr), size); })
-@@ -313,27 +314,46 @@ unsigned long __copy_user(void __user *to, const void __user *from, unsigned lon
+@@ -248,27 +249,46 @@ unsigned long __copy_user(void __user *to, const void __user *from, unsigned lon
static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
{
@@ -10295,7 +10265,7 @@ index 64ee103..388aef0 100644
}
diff --git a/arch/sparc/include/asm/uaccess_64.h b/arch/sparc/include/asm/uaccess_64.h
-index ea6e9a2..5703598 100644
+index e9a51d6..3ef910c 100644
--- a/arch/sparc/include/asm/uaccess_64.h
+++ b/arch/sparc/include/asm/uaccess_64.h
@@ -10,6 +10,7 @@
@@ -10318,7 +10288,7 @@ index ea6e9a2..5703598 100644
static inline int access_ok(int type, const void __user * addr, unsigned long size)
{
return 1;
-@@ -250,8 +256,15 @@ unsigned long copy_from_user_fixup(void *to, const void __user *from,
+@@ -210,8 +216,15 @@ unsigned long copy_from_user_fixup(void *to, const void __user *from,
static inline unsigned long __must_check
copy_from_user(void *to, const void __user *from, unsigned long size)
{
@@ -10335,7 +10305,7 @@ index ea6e9a2..5703598 100644
if (unlikely(ret))
ret = copy_from_user_fixup(to, from, size);
-@@ -267,8 +280,15 @@ unsigned long copy_to_user_fixup(void __user *to, const void *from,
+@@ -227,8 +240,15 @@ unsigned long copy_to_user_fixup(void __user *to, const void *from,
static inline unsigned long __must_check
copy_to_user(void __user *to, const void *from, unsigned long size)
{
@@ -10541,7 +10511,7 @@ index 646988d..b88905f 100644
info.flags = 0;
info.length = len;
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
-index c690c8e..1d5798e 100644
+index b489e97..44620ad 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -89,13 +89,14 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
@@ -10603,7 +10573,19 @@ index c690c8e..1d5798e 100644
info.high_limit = task_size;
addr = vm_unmapped_area(&info);
}
-@@ -150,6 +161,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -141,15 +152,16 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
+ }
+
+ unsigned long
+-arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+- const unsigned long len, const unsigned long pgoff,
+- const unsigned long flags)
++arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr0,
++ unsigned long len, unsigned long pgoff,
++ unsigned long flags)
+ {
+ struct vm_area_struct *vma;
+ struct mm_struct *mm = current->mm;
unsigned long task_size = STACK_TOP32;
unsigned long addr = addr0;
int do_color_align;
@@ -10676,7 +10658,7 @@ index c690c8e..1d5798e 100644
+#endif
+
if (current->flags & PF_RANDOMIZE) {
- unsigned long val = get_random_int();
+ unsigned long val = get_random_long();
if (test_thread_flag(TIF_32BIT))
@@ -275,7 +301,7 @@ static unsigned long mmap_rnd(void)
@@ -10714,7 +10696,7 @@ index c690c8e..1d5798e 100644
}
}
diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S
-index bb00089..e0ea580 100644
+index c4a1b5c..c5e0ef3 100644
--- a/arch/sparc/kernel/syscalls.S
+++ b/arch/sparc/kernel/syscalls.S
@@ -62,7 +62,7 @@ sys32_rt_sigreturn:
@@ -10726,7 +10708,7 @@ index bb00089..e0ea580 100644
be,pt %icc, rtrap
nop
call syscall_trace_leave
-@@ -194,7 +194,7 @@ linux_sparc_syscall32:
+@@ -230,7 +230,7 @@ linux_sparc_syscall32:
srl %i3, 0, %o3 ! IEU0
srl %i2, 0, %o2 ! IEU0 Group
@@ -10735,7 +10717,7 @@ index bb00089..e0ea580 100644
bne,pn %icc, linux_syscall_trace32 ! CTI
mov %i0, %l5 ! IEU1
5: call %l7 ! CTI Group brk forced
-@@ -218,7 +218,7 @@ linux_sparc_syscall:
+@@ -254,7 +254,7 @@ linux_sparc_syscall:
mov %i3, %o3 ! IEU1
mov %i4, %o4 ! IEU0 Group
@@ -10744,7 +10726,7 @@ index bb00089..e0ea580 100644
bne,pn %icc, linux_syscall_trace ! CTI Group
mov %i0, %l5 ! IEU0
2: call %l7 ! CTI Group brk forced
-@@ -233,7 +233,7 @@ ret_sys_call:
+@@ -269,7 +269,7 @@ ret_sys_call:
cmp %o0, -ERESTART_RESTARTBLOCK
bgeu,pn %xcc, 1f
@@ -11478,7 +11460,7 @@ index c399e7b..2387414 100644
if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
goto bad_area;
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
-index dbabe57..d34d315 100644
+index cb841a3..f2061fb 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -23,6 +23,9 @@
@@ -11500,7 +11482,7 @@ index dbabe57..d34d315 100644
printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr);
dump_stack();
unhandled_fault(regs->tpc, current, regs);
-@@ -279,6 +282,466 @@ static void noinline __kprobes bogus_32bit_fault_tpc(struct pt_regs *regs)
+@@ -276,6 +279,466 @@ static void noinline __kprobes bogus_32bit_fault_tpc(struct pt_regs *regs)
show_regs(regs);
}
@@ -11967,7 +11949,7 @@ index dbabe57..d34d315 100644
asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
{
enum ctx_state prev_state = exception_enter();
-@@ -353,6 +816,29 @@ retry:
+@@ -350,6 +813,29 @@ retry:
if (!vma)
goto bad_area;
@@ -11998,7 +11980,7 @@ index dbabe57..d34d315 100644
* load/store/atomic was a write or not, it only says that there
* was no match. So in such a case we (carefully) read the
diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
-index 131eaf4..285ea31 100644
+index 131eaf4..4ad6678 100644
--- a/arch/sparc/mm/hugetlbpage.c
+++ b/arch/sparc/mm/hugetlbpage.c
@@ -25,8 +25,10 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp,
@@ -12037,13 +12019,19 @@ index 131eaf4..285ea31 100644
info.high_limit = task_size;
addr = vm_unmapped_area(&info);
}
-@@ -55,7 +64,8 @@ static unsigned long
- hugetlb_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
- const unsigned long len,
- const unsigned long pgoff,
+@@ -52,10 +61,11 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp,
+ }
+
+ static unsigned long
+-hugetlb_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+- const unsigned long len,
+- const unsigned long pgoff,
- const unsigned long flags)
-+ const unsigned long flags,
-+ const unsigned long offset)
++hugetlb_get_unmapped_area_topdown(struct file *filp, unsigned long addr0,
++ unsigned long len,
++ unsigned long pgoff,
++ unsigned long flags,
++ unsigned long offset)
{
struct mm_struct *mm = current->mm;
unsigned long addr = addr0;
@@ -12104,7 +12092,7 @@ index 131eaf4..285ea31 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 3025bd5..4934c29 100644
+index 6f21685..5831fed 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;
@@ -12142,10 +12130,10 @@ index 3025bd5..4934c29 100644
#endif /* CONFIG_DEBUG_DCFLUSH */
}
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
-index 8ec7a45..b0c6dc1 100644
+index de4a4ff..477c014 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
-@@ -205,6 +205,7 @@ source "kernel/Kconfig.hz"
+@@ -203,6 +203,7 @@ source "kernel/Kconfig.hz"
config KEXEC
bool "kexec system call"
select KEXEC_CORE
@@ -12276,7 +12264,7 @@ index 2e0a6b1..a64d0f5 100644
#endif
diff --git a/arch/um/include/asm/page.h b/arch/um/include/asm/page.h
-index 71c5d13..4c7b9f1 100644
+index f878bec..ca09300 100644
--- a/arch/um/include/asm/page.h
+++ b/arch/um/include/asm/page.h
@@ -14,6 +14,9 @@
@@ -12290,7 +12278,7 @@ index 71c5d13..4c7b9f1 100644
struct page;
diff --git a/arch/um/include/asm/pgtable-3level.h b/arch/um/include/asm/pgtable-3level.h
-index 2b4274e..754fe06 100644
+index bae8523..ba9484b 100644
--- a/arch/um/include/asm/pgtable-3level.h
+++ b/arch/um/include/asm/pgtable-3level.h
@@ -58,6 +58,7 @@
@@ -12346,10 +12334,10 @@ index ad8f795..2c7eec6 100644
/*
* Memory returned by kmalloc() may be used for DMA, so we must make
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 436639a..3d211bb 100644
+index 3bf45a0..7b04039 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
-@@ -36,14 +36,13 @@ config X86
+@@ -38,14 +38,13 @@ config X86
select ARCH_MIGHT_HAVE_PC_SERIO
select ARCH_SUPPORTS_ATOMIC_RMW
select ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT
@@ -12365,7 +12353,7 @@ index 436639a..3d211bb 100644
select ARCH_WANT_FRAME_POINTERS
select ARCH_WANT_IPC_PARSE_VERSION if X86_32
select ARCH_WANT_OPTIONAL_GPIOLIB
-@@ -87,7 +86,7 @@ config X86
+@@ -91,7 +90,7 @@ config X86
select HAVE_ARCH_TRACEHOOK
select HAVE_ARCH_TRANSPARENT_HUGEPAGE
select HAVE_BPF_JIT if X86_64
@@ -12374,7 +12362,7 @@ index 436639a..3d211bb 100644
select HAVE_CMPXCHG_DOUBLE
select HAVE_CMPXCHG_LOCAL
select HAVE_CONTEXT_TRACKING if X86_64
-@@ -276,7 +275,7 @@ config X86_64_SMP
+@@ -290,7 +289,7 @@ config X86_64_SMP
config X86_32_LAZY_GS
def_bool y
@@ -12383,7 +12371,7 @@ index 436639a..3d211bb 100644
config ARCH_HWEIGHT_CFLAGS
string
-@@ -648,6 +647,7 @@ config SCHED_OMIT_FRAME_POINTER
+@@ -674,6 +673,7 @@ config SCHED_OMIT_FRAME_POINTER
menuconfig HYPERVISOR_GUEST
bool "Linux guest support"
@@ -12391,7 +12379,7 @@ index 436639a..3d211bb 100644
---help---
Say Y here to enable options for running Linux under various hyper-
visors. This option enables basic hypervisor detection and platform
-@@ -1039,6 +1039,7 @@ config VM86
+@@ -1073,6 +1073,7 @@ config VM86
config X86_16BIT
bool "Enable support for 16-bit segments" if EXPERT
@@ -12399,7 +12387,7 @@ index 436639a..3d211bb 100644
default y
depends on MODIFY_LDT_SYSCALL
---help---
-@@ -1193,6 +1194,7 @@ choice
+@@ -1227,6 +1228,7 @@ choice
config NOHIGHMEM
bool "off"
@@ -12407,7 +12395,7 @@ index 436639a..3d211bb 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
-@@ -1229,6 +1231,7 @@ config NOHIGHMEM
+@@ -1263,6 +1265,7 @@ config NOHIGHMEM
config HIGHMEM4G
bool "4GB"
@@ -12415,7 +12403,7 @@ index 436639a..3d211bb 100644
---help---
Select this if you have a 32-bit processor and between 1 and 4
gigabytes of physical RAM.
-@@ -1281,7 +1284,7 @@ config PAGE_OFFSET
+@@ -1315,7 +1318,7 @@ config PAGE_OFFSET
hex
default 0xB0000000 if VMSPLIT_3G_OPT
default 0x80000000 if VMSPLIT_2G
@@ -12424,7 +12412,7 @@ index 436639a..3d211bb 100644
default 0x40000000 if VMSPLIT_1G
default 0xC0000000
depends on X86_32
-@@ -1302,7 +1305,6 @@ config X86_PAE
+@@ -1336,7 +1339,6 @@ config X86_PAE
config ARCH_PHYS_ADDR_T_64BIT
def_bool y
@@ -12432,7 +12420,7 @@ index 436639a..3d211bb 100644
config ARCH_DMA_ADDR_T_64BIT
def_bool y
-@@ -1433,7 +1435,7 @@ config ARCH_PROC_KCORE_TEXT
+@@ -1467,7 +1469,7 @@ config ARCH_PROC_KCORE_TEXT
config ILLEGAL_POINTER_VALUE
hex
@@ -12441,7 +12429,7 @@ index 436639a..3d211bb 100644
default 0xdead000000000000 if X86_64
source "mm/Kconfig"
-@@ -1742,6 +1744,7 @@ source kernel/Kconfig.hz
+@@ -1776,6 +1778,7 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call"
select KEXEC_CORE
@@ -12449,7 +12437,7 @@ index 436639a..3d211bb 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
-@@ -1924,7 +1927,9 @@ config X86_NEED_RELOCS
+@@ -1958,7 +1961,9 @@ config X86_NEED_RELOCS
config PHYSICAL_ALIGN
hex "Alignment value to which kernel should be aligned"
@@ -12460,7 +12448,7 @@ index 436639a..3d211bb 100644
range 0x2000 0x1000000 if X86_32
range 0x200000 0x1000000 if X86_64
---help---
-@@ -2007,6 +2012,7 @@ config COMPAT_VDSO
+@@ -2041,6 +2046,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
@@ -12468,7 +12456,7 @@ index 436639a..3d211bb 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
-@@ -2047,15 +2053,6 @@ choice
+@@ -2081,15 +2087,6 @@ choice
If unsure, select "Emulate".
@@ -12484,7 +12472,7 @@ index 436639a..3d211bb 100644
config LEGACY_VSYSCALL_EMULATE
bool "Emulate"
help
-@@ -2136,6 +2133,22 @@ config MODIFY_LDT_SYSCALL
+@@ -2170,6 +2167,22 @@ config MODIFY_LDT_SYSCALL
Saying 'N' here may make sense for embedded or server kernels.
@@ -12539,18 +12527,18 @@ index 3ba5ff2..44bdacc 100644
config X86_MINIMUM_CPU_FAMILY
int
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
-index 137dfa9..6efdd4e 100644
+index 9b18ed9..9528749 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
-@@ -72,6 +72,7 @@ config X86_PTDUMP
- bool "Export kernel pagetable layout to userspace via debugfs"
+@@ -55,6 +55,7 @@ config X86_PTDUMP
+ tristate "Export kernel pagetable layout to userspace via debugfs"
depends on DEBUG_KERNEL
select DEBUG_FS
+ depends on !GRKERNSEC_KMEM
select X86_PTDUMP_CORE
---help---
Say Y here if you want to show the kernel pagetable layout in a
-@@ -94,7 +95,7 @@ config EFI_PGT_DUMP
+@@ -77,7 +78,7 @@ config EFI_PGT_DUMP
config DEBUG_RODATA
bool "Write protect kernel read-only data structures"
default y
@@ -12559,7 +12547,7 @@ index 137dfa9..6efdd4e 100644
---help---
Mark the kernel read-only data as write-protected in the pagetables,
in order to catch accidental (and incorrect) writes to such const
-@@ -140,7 +141,7 @@ config DEBUG_WX
+@@ -123,7 +124,7 @@ config DEBUG_WX
config DEBUG_SET_MODULE_RONX
bool "Set loadable kernel module data as NX and text as RO"
@@ -12568,7 +12556,7 @@ index 137dfa9..6efdd4e 100644
---help---
This option helps catch unintended modifications to loadable
kernel module's text and read-only data. It also prevents execution
-@@ -392,6 +393,7 @@ config X86_DEBUG_FPU
+@@ -375,6 +376,7 @@ config X86_DEBUG_FPU
config PUNIT_ATOM_DEBUG
tristate "ATOM Punit debug driver"
select DEBUG_FS
@@ -12619,7 +12607,7 @@ index 4086abc..52a0a9b 100644
+*** Please upgrade your binutils to 2.18 or newer
+endef
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
-index 2ee62db..5f320a9 100644
+index bbe1a62..ec6a3ec 100644
--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -58,6 +58,9 @@ clean-files += cpustr.h
@@ -12631,7 +12619,7 @@ index 2ee62db..5f320a9 100644
+endif
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
GCOV_PROFILE := n
-
+ UBSAN_SANITIZE := n
diff --git a/arch/x86/boot/bitops.h b/arch/x86/boot/bitops.h
index 878e4b9..20537ab 100644
--- a/arch/x86/boot/bitops.h
@@ -12668,16 +12656,33 @@ index 9011a88..06aa820 100644
}
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
-index 0a291cd..9686efc 100644
+index f9ce75d..0b1600d 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
-@@ -30,6 +30,9 @@ KBUILD_CFLAGS += $(cflags-y)
+@@ -30,6 +30,26 @@ KBUILD_CFLAGS += $(cflags-y)
KBUILD_CFLAGS += -mno-mmx -mno-sse
KBUILD_CFLAGS += $(call cc-option,-ffreestanding)
KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
+ifdef CONSTIFY_PLUGIN
+KBUILD_CFLAGS += -fplugin-arg-constify_plugin-no-constify
+endif
++
++ifdef CONFIG_DEBUG_INFO
++ifdef CONFIG_DEBUG_INFO_SPLIT
++KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
++else
++KBUILD_CFLAGS += -g
++endif
++KBUILD_AFLAGS += -Wa,--gdwarf-2
++endif
++ifdef CONFIG_DEBUG_INFO_DWARF4
++KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,)
++endif
++
++ifdef CONFIG_DEBUG_INFO_REDUCED
++KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \
++ $(call cc-option,-fno-var-tracking)
++endif
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
GCOV_PROFILE := n
@@ -12971,7 +12976,7 @@ index 9105655..41779c1 100644
movq r1,r2; \
movq r3,r4; \
diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S
-index 6bd2c6c..368c93e 100644
+index 6bd2c6c..cd46c9d 100644
--- a/arch/x86/crypto/aesni-intel_asm.S
+++ b/arch/x86/crypto/aesni-intel_asm.S
@@ -31,6 +31,7 @@
@@ -13253,7 +13258,7 @@ index 6bd2c6c..368c93e 100644
ret
ENDPROC(_key_expansion_256b)
-@@ -1905,6 +1912,7 @@ ENTRY(aesni_set_key)
+@@ -1905,13 +1912,14 @@ ENTRY(aesni_set_key)
#ifndef __x86_64__
popl KEYP
#endif
@@ -13261,6 +13266,14 @@ index 6bd2c6c..368c93e 100644
ret
ENDPROC(aesni_set_key)
+ /*
+ * void aesni_enc(struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src)
+ */
+-ENTRY(aesni_enc)
++RAP_ENTRY(aesni_enc)
+ #ifndef __x86_64__
+ pushl KEYP
+ pushl KLEN
@@ -1927,6 +1935,7 @@ ENTRY(aesni_enc)
popl KLEN
popl KEYP
@@ -13277,7 +13290,7 @@ index 6bd2c6c..368c93e 100644
ret
ENDPROC(_aesni_enc1)
-@@ -2094,6 +2104,7 @@ _aesni_enc4:
+@@ -2094,13 +2104,14 @@ _aesni_enc4:
AESENCLAST KEY STATE2
AESENCLAST KEY STATE3
AESENCLAST KEY STATE4
@@ -13285,6 +13298,14 @@ index 6bd2c6c..368c93e 100644
ret
ENDPROC(_aesni_enc4)
+ /*
+ * void aesni_dec (struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src)
+ */
+-ENTRY(aesni_dec)
++RAP_ENTRY(aesni_dec)
+ #ifndef __x86_64__
+ pushl KEYP
+ pushl KLEN
@@ -2117,6 +2128,7 @@ ENTRY(aesni_dec)
popl KLEN
popl KEYP
@@ -13373,8 +13394,24 @@ index 6bd2c6c..368c93e 100644
ret
ENDPROC(aesni_xts_crypt8)
+diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
+index 3633ad6..2bf146f 100644
+--- a/arch/x86/crypto/aesni-intel_glue.c
++++ b/arch/x86/crypto/aesni-intel_glue.c
+@@ -82,9 +82,9 @@ struct aesni_xts_ctx {
+
+ asmlinkage int aesni_set_key(struct crypto_aes_ctx *ctx, const u8 *in_key,
+ unsigned int key_len);
+-asmlinkage void aesni_enc(struct crypto_aes_ctx *ctx, u8 *out,
++asmlinkage void aesni_enc(void *ctx, u8 *out,
+ const u8 *in);
+-asmlinkage void aesni_dec(struct crypto_aes_ctx *ctx, u8 *out,
++asmlinkage void aesni_dec(void *ctx, u8 *out,
+ const u8 *in);
+ asmlinkage void aesni_ecb_enc(struct crypto_aes_ctx *ctx, u8 *out,
+ const u8 *in, unsigned int len);
diff --git a/arch/x86/crypto/blowfish-x86_64-asm_64.S b/arch/x86/crypto/blowfish-x86_64-asm_64.S
-index 246c670..466e2d6 100644
+index 246c670..4fb7603 100644
--- a/arch/x86/crypto/blowfish-x86_64-asm_64.S
+++ b/arch/x86/crypto/blowfish-x86_64-asm_64.S
@@ -21,6 +21,7 @@
@@ -13385,7 +13422,7 @@ index 246c670..466e2d6 100644
.file "blowfish-x86_64-asm.S"
.text
-@@ -149,9 +150,11 @@ ENTRY(__blowfish_enc_blk)
+@@ -149,13 +150,15 @@ ENTRY(__blowfish_enc_blk)
jnz .L__enc_xor;
write_block();
@@ -13397,6 +13434,11 @@ index 246c670..466e2d6 100644
ret;
ENDPROC(__blowfish_enc_blk)
+-ENTRY(blowfish_dec_blk)
++RAP_ENTRY(blowfish_dec_blk)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -183,6 +186,7 @@ ENTRY(blowfish_dec_blk)
movq %r11, %rbp;
@@ -13413,7 +13455,7 @@ index 246c670..466e2d6 100644
ret;
.L__enc_xor4:
-@@ -341,6 +346,7 @@ ENTRY(__blowfish_enc_blk_4way)
+@@ -341,10 +346,11 @@ ENTRY(__blowfish_enc_blk_4way)
popq %rbx;
popq %rbp;
@@ -13421,6 +13463,11 @@ index 246c670..466e2d6 100644
ret;
ENDPROC(__blowfish_enc_blk_4way)
+-ENTRY(blowfish_dec_blk_4way)
++RAP_ENTRY(blowfish_dec_blk_4way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -375,5 +381,6 @@ ENTRY(blowfish_dec_blk_4way)
popq %rbx;
popq %rbp;
@@ -13429,7 +13476,7 @@ index 246c670..466e2d6 100644
ret;
ENDPROC(blowfish_dec_blk_4way)
diff --git a/arch/x86/crypto/camellia-aesni-avx-asm_64.S b/arch/x86/crypto/camellia-aesni-avx-asm_64.S
-index ce71f92..1dce7ec 100644
+index ce71f92..059975a 100644
--- a/arch/x86/crypto/camellia-aesni-avx-asm_64.S
+++ b/arch/x86/crypto/camellia-aesni-avx-asm_64.S
@@ -16,6 +16,7 @@
@@ -13472,7 +13519,16 @@ index ce71f92..1dce7ec 100644
ret;
.align 8
-@@ -904,6 +909,7 @@ ENTRY(camellia_ecb_enc_16way)
+@@ -884,7 +889,7 @@ __camellia_dec_blk16:
+ jmp .Ldec_max24;
+ ENDPROC(__camellia_dec_blk16)
+
+-ENTRY(camellia_ecb_enc_16way)
++RAP_ENTRY(camellia_ecb_enc_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
+@@ -904,10 +909,11 @@ ENTRY(camellia_ecb_enc_16way)
%xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9,
%xmm8, %rsi);
@@ -13480,7 +13536,12 @@ index ce71f92..1dce7ec 100644
ret;
ENDPROC(camellia_ecb_enc_16way)
-@@ -932,6 +938,7 @@ ENTRY(camellia_ecb_dec_16way)
+-ENTRY(camellia_ecb_dec_16way)
++RAP_ENTRY(camellia_ecb_dec_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
+@@ -932,10 +938,11 @@ ENTRY(camellia_ecb_dec_16way)
%xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9,
%xmm8, %rsi);
@@ -13488,6 +13549,11 @@ index ce71f92..1dce7ec 100644
ret;
ENDPROC(camellia_ecb_dec_16way)
+-ENTRY(camellia_cbc_dec_16way)
++RAP_ENTRY(camellia_cbc_dec_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
@@ -981,6 +988,7 @@ ENTRY(camellia_cbc_dec_16way)
%xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9,
%xmm8, %rsi);
@@ -13496,6 +13562,15 @@ index ce71f92..1dce7ec 100644
ret;
ENDPROC(camellia_cbc_dec_16way)
+@@ -990,7 +998,7 @@ ENDPROC(camellia_cbc_dec_16way)
+ vpslldq $8, tmp, tmp; \
+ vpsubq tmp, x, x;
+
+-ENTRY(camellia_ctr_16way)
++RAP_ENTRY(camellia_ctr_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
@@ -1092,6 +1100,7 @@ ENTRY(camellia_ctr_16way)
%xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9,
%xmm8, %rsi);
@@ -13504,7 +13579,7 @@ index ce71f92..1dce7ec 100644
ret;
ENDPROC(camellia_ctr_16way)
-@@ -1234,6 +1243,7 @@ camellia_xts_crypt_16way:
+@@ -1234,10 +1243,11 @@ camellia_xts_crypt_16way:
%xmm15, %xmm14, %xmm13, %xmm12, %xmm11, %xmm10, %xmm9,
%xmm8, %rsi);
@@ -13512,8 +13587,22 @@ index ce71f92..1dce7ec 100644
ret;
ENDPROC(camellia_xts_crypt_16way)
+-ENTRY(camellia_xts_enc_16way)
++RAP_ENTRY(camellia_xts_enc_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
+@@ -1251,7 +1261,7 @@ ENTRY(camellia_xts_enc_16way)
+ jmp camellia_xts_crypt_16way;
+ ENDPROC(camellia_xts_enc_16way)
+
+-ENTRY(camellia_xts_dec_16way)
++RAP_ENTRY(camellia_xts_dec_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
diff --git a/arch/x86/crypto/camellia-aesni-avx2-asm_64.S b/arch/x86/crypto/camellia-aesni-avx2-asm_64.S
-index 0e0b886..5a3123c 100644
+index 0e0b886..7bad080 100644
--- a/arch/x86/crypto/camellia-aesni-avx2-asm_64.S
+++ b/arch/x86/crypto/camellia-aesni-avx2-asm_64.S
@@ -11,6 +11,7 @@
@@ -13556,7 +13645,16 @@ index 0e0b886..5a3123c 100644
ret;
.align 8
-@@ -948,6 +953,7 @@ ENTRY(camellia_ecb_enc_32way)
+@@ -924,7 +929,7 @@ __camellia_dec_blk32:
+ jmp .Ldec_max24;
+ ENDPROC(__camellia_dec_blk32)
+
+-ENTRY(camellia_ecb_enc_32way)
++RAP_ENTRY(camellia_ecb_enc_32way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (32 blocks)
+@@ -948,10 +953,11 @@ ENTRY(camellia_ecb_enc_32way)
vzeroupper;
@@ -13564,7 +13662,12 @@ index 0e0b886..5a3123c 100644
ret;
ENDPROC(camellia_ecb_enc_32way)
-@@ -980,6 +986,7 @@ ENTRY(camellia_ecb_dec_32way)
+-ENTRY(camellia_ecb_dec_32way)
++RAP_ENTRY(camellia_ecb_dec_32way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (32 blocks)
+@@ -980,10 +986,11 @@ ENTRY(camellia_ecb_dec_32way)
vzeroupper;
@@ -13572,6 +13675,11 @@ index 0e0b886..5a3123c 100644
ret;
ENDPROC(camellia_ecb_dec_32way)
+-ENTRY(camellia_cbc_dec_32way)
++RAP_ENTRY(camellia_cbc_dec_32way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (32 blocks)
@@ -1046,6 +1053,7 @@ ENTRY(camellia_cbc_dec_32way)
vzeroupper;
@@ -13580,6 +13688,15 @@ index 0e0b886..5a3123c 100644
ret;
ENDPROC(camellia_cbc_dec_32way)
+@@ -1063,7 +1071,7 @@ ENDPROC(camellia_cbc_dec_32way)
+ vpslldq $8, tmp1, tmp1; \
+ vpsubq tmp1, x, x;
+
+-ENTRY(camellia_ctr_32way)
++RAP_ENTRY(camellia_ctr_32way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (32 blocks)
@@ -1184,6 +1192,7 @@ ENTRY(camellia_ctr_32way)
vzeroupper;
@@ -13588,7 +13705,7 @@ index 0e0b886..5a3123c 100644
ret;
ENDPROC(camellia_ctr_32way)
-@@ -1349,6 +1358,7 @@ camellia_xts_crypt_32way:
+@@ -1349,10 +1358,11 @@ camellia_xts_crypt_32way:
vzeroupper;
@@ -13596,8 +13713,22 @@ index 0e0b886..5a3123c 100644
ret;
ENDPROC(camellia_xts_crypt_32way)
+-ENTRY(camellia_xts_enc_32way)
++RAP_ENTRY(camellia_xts_enc_32way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (32 blocks)
+@@ -1367,7 +1377,7 @@ ENTRY(camellia_xts_enc_32way)
+ jmp camellia_xts_crypt_32way;
+ ENDPROC(camellia_xts_enc_32way)
+
+-ENTRY(camellia_xts_dec_32way)
++RAP_ENTRY(camellia_xts_dec_32way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (32 blocks)
diff --git a/arch/x86/crypto/camellia-x86_64-asm_64.S b/arch/x86/crypto/camellia-x86_64-asm_64.S
-index 310319c..db3d7b5 100644
+index 310319c..9253a8f 100644
--- a/arch/x86/crypto/camellia-x86_64-asm_64.S
+++ b/arch/x86/crypto/camellia-x86_64-asm_64.S
@@ -21,6 +21,7 @@
@@ -13608,7 +13739,7 @@ index 310319c..db3d7b5 100644
.file "camellia-x86_64-asm_64.S"
.text
-@@ -228,12 +229,14 @@ ENTRY(__camellia_enc_blk)
+@@ -228,16 +229,18 @@ ENTRY(__camellia_enc_blk)
enc_outunpack(mov, RT1);
movq RRBP, %rbp;
@@ -13623,6 +13754,11 @@ index 310319c..db3d7b5 100644
ret;
ENDPROC(__camellia_enc_blk)
+-ENTRY(camellia_dec_blk)
++RAP_ENTRY(camellia_dec_blk)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -272,6 +275,7 @@ ENTRY(camellia_dec_blk)
dec_outunpack();
@@ -13639,7 +13775,7 @@ index 310319c..db3d7b5 100644
ret;
.L__enc2_xor:
-@@ -470,6 +475,7 @@ ENTRY(__camellia_enc_blk_2way)
+@@ -470,10 +475,11 @@ ENTRY(__camellia_enc_blk_2way)
movq RRBP, %rbp;
popq %rbx;
@@ -13647,6 +13783,11 @@ index 310319c..db3d7b5 100644
ret;
ENDPROC(__camellia_enc_blk_2way)
+-ENTRY(camellia_dec_blk_2way)
++RAP_ENTRY(camellia_dec_blk_2way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -510,5 +516,6 @@ ENTRY(camellia_dec_blk_2way)
movq RRBP, %rbp;
@@ -13654,8 +13795,118 @@ index 310319c..db3d7b5 100644
+ pax_force_retaddr
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
+--- a/arch/x86/crypto/camellia_aesni_avx2_glue.c
++++ b/arch/x86/crypto/camellia_aesni_avx2_glue.c
+@@ -27,20 +27,20 @@
+ #define CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS 32
+
+ /* 32-way AVX2/AES-NI parallel cipher functions */
+-asmlinkage void camellia_ecb_enc_32way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_ecb_enc_32way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void camellia_ecb_dec_32way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_ecb_dec_32way(void *ctx, u8 *dst,
+ const u8 *src);
+
+-asmlinkage void camellia_cbc_dec_32way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_cbc_dec_32way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void camellia_ctr_32way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void camellia_ctr_32way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+-asmlinkage void camellia_xts_enc_32way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
+-asmlinkage void camellia_xts_dec_32way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void camellia_xts_enc_32way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
++asmlinkage void camellia_xts_dec_32way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+ 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
+--- a/arch/x86/crypto/camellia_aesni_avx_glue.c
++++ b/arch/x86/crypto/camellia_aesni_avx_glue.c
+@@ -26,28 +26,28 @@
+ #define CAMELLIA_AESNI_PARALLEL_BLOCKS 16
+
+ /* 16-way parallel cipher functions (avx/aes-ni) */
+-asmlinkage void camellia_ecb_enc_16way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_ecb_enc_16way(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(camellia_ecb_enc_16way);
+
+-asmlinkage void camellia_ecb_dec_16way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_ecb_dec_16way(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(camellia_ecb_dec_16way);
+
+-asmlinkage void camellia_cbc_dec_16way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_cbc_dec_16way(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(camellia_cbc_dec_16way);
+
+-asmlinkage void camellia_ctr_16way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void camellia_ctr_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+ EXPORT_SYMBOL_GPL(camellia_ctr_16way);
+
+-asmlinkage void camellia_xts_enc_16way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void camellia_xts_enc_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+ EXPORT_SYMBOL_GPL(camellia_xts_enc_16way);
+
+-asmlinkage void camellia_xts_dec_16way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void camellia_xts_dec_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+ EXPORT_SYMBOL_GPL(camellia_xts_dec_16way);
+
+ void camellia_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+diff --git a/arch/x86/crypto/camellia_glue.c b/arch/x86/crypto/camellia_glue.c
+index 5c8b626..934a4b6 100644
+--- a/arch/x86/crypto/camellia_glue.c
++++ b/arch/x86/crypto/camellia_glue.c
+@@ -39,7 +39,7 @@
+ asmlinkage void __camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst,
+ const u8 *src, bool xor);
+ EXPORT_SYMBOL_GPL(__camellia_enc_blk);
+-asmlinkage void camellia_dec_blk(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_dec_blk(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(camellia_dec_blk);
+
+@@ -47,7 +47,7 @@ EXPORT_SYMBOL_GPL(camellia_dec_blk);
+ asmlinkage void __camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst,
+ const u8 *src, bool xor);
+ EXPORT_SYMBOL_GPL(__camellia_enc_blk_2way);
+-asmlinkage void camellia_dec_blk_2way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_dec_blk_2way(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(camellia_dec_blk_2way);
+
+@@ -1279,8 +1279,10 @@ static int camellia_setkey(struct crypto_tfm *tfm, const u8 *in_key,
+ &tfm->crt_flags);
+ }
+
+-void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src)
++void camellia_decrypt_cbc_2way(void *ctx, u8 *_dst, const u8 *_src)
+ {
++ u128 *dst = (u128 *)_dst;
++ u128 *src = (u128 *)_src;
+ u128 iv = *src;
+
+ camellia_dec_blk_2way(ctx, (u8 *)dst, (u8 *)src);
diff --git a/arch/x86/crypto/cast5-avx-x86_64-asm_64.S b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S
-index c35fd5d..2d8c7db 100644
+index c35fd5d..563138e 100644
--- a/arch/x86/crypto/cast5-avx-x86_64-asm_64.S
+++ b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S
@@ -24,6 +24,7 @@
@@ -13682,7 +13933,16 @@ index c35fd5d..2d8c7db 100644
ret;
.L__skip_dec:
-@@ -388,6 +391,7 @@ ENTRY(cast5_ecb_enc_16way)
+@@ -359,7 +362,7 @@ __cast5_dec_blk16:
+ jmp .L__dec_tail;
+ ENDPROC(__cast5_dec_blk16)
+
+-ENTRY(cast5_ecb_enc_16way)
++RAP_ENTRY(cast5_ecb_enc_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -388,10 +391,11 @@ ENTRY(cast5_ecb_enc_16way)
vmovdqu RR4, (6*4*4)(%r11);
vmovdqu RL4, (7*4*4)(%r11);
@@ -13690,6 +13950,11 @@ index c35fd5d..2d8c7db 100644
ret;
ENDPROC(cast5_ecb_enc_16way)
+-ENTRY(cast5_ecb_dec_16way)
++RAP_ENTRY(cast5_ecb_dec_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -420,6 +424,7 @@ ENTRY(cast5_ecb_dec_16way)
vmovdqu RR4, (6*4*4)(%r11);
vmovdqu RL4, (7*4*4)(%r11);
@@ -13794,7 +14059,7 @@ index c35fd5d..2d8c7db 100644
ret;
ENDPROC(cast5_ctr_16way)
diff --git a/arch/x86/crypto/cast6-avx-x86_64-asm_64.S b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S
-index e3531f8..e123f35 100644
+index e3531f8..564f08b 100644
--- a/arch/x86/crypto/cast6-avx-x86_64-asm_64.S
+++ b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S
@@ -24,6 +24,7 @@
@@ -13813,7 +14078,7 @@ index e3531f8..e123f35 100644
ret;
ENDPROC(__cast6_enc_blk8)
-@@ -340,6 +342,7 @@ __cast6_dec_blk8:
+@@ -340,10 +342,11 @@ __cast6_dec_blk8:
outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM);
outunpack_blocks(RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM);
@@ -13821,7 +14086,12 @@ index e3531f8..e123f35 100644
ret;
ENDPROC(__cast6_dec_blk8)
-@@ -358,6 +361,7 @@ ENTRY(cast6_ecb_enc_8way)
+-ENTRY(cast6_ecb_enc_8way)
++RAP_ENTRY(cast6_ecb_enc_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -358,10 +361,11 @@ ENTRY(cast6_ecb_enc_8way)
store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -13829,7 +14099,12 @@ index e3531f8..e123f35 100644
ret;
ENDPROC(cast6_ecb_enc_8way)
-@@ -376,6 +380,7 @@ ENTRY(cast6_ecb_dec_8way)
+-ENTRY(cast6_ecb_dec_8way)
++RAP_ENTRY(cast6_ecb_dec_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -376,33 +380,35 @@ ENTRY(cast6_ecb_dec_8way)
store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -13837,7 +14112,11 @@ index e3531f8..e123f35 100644
ret;
ENDPROC(cast6_ecb_dec_8way)
-@@ -386,19 +391,20 @@ ENTRY(cast6_cbc_dec_8way)
+-ENTRY(cast6_cbc_dec_8way)
++RAP_ENTRY(cast6_cbc_dec_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
* %rdx: src
*/
@@ -13862,7 +14141,12 @@ index e3531f8..e123f35 100644
ret;
ENDPROC(cast6_cbc_dec_8way)
-@@ -410,20 +416,21 @@ ENTRY(cast6_ctr_8way)
+-ENTRY(cast6_ctr_8way)
++RAP_ENTRY(cast6_ctr_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -410,24 +416,25 @@ ENTRY(cast6_ctr_8way)
* %rcx: iv (little endian, 128bit)
*/
@@ -13888,7 +14172,12 @@ index e3531f8..e123f35 100644
ret;
ENDPROC(cast6_ctr_8way)
-@@ -446,6 +453,7 @@ ENTRY(cast6_xts_enc_8way)
+-ENTRY(cast6_xts_enc_8way)
++RAP_ENTRY(cast6_xts_enc_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -446,10 +453,11 @@ ENTRY(cast6_xts_enc_8way)
/* dst <= regs xor IVs(in dst) */
store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -13896,6 +14185,11 @@ index e3531f8..e123f35 100644
ret;
ENDPROC(cast6_xts_enc_8way)
+-ENTRY(cast6_xts_dec_8way)
++RAP_ENTRY(cast6_xts_dec_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -468,5 +476,6 @@ ENTRY(cast6_xts_dec_8way)
/* dst <= regs xor IVs(in dst) */
store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -13903,6 +14197,39 @@ index e3531f8..e123f35 100644
+ pax_force_retaddr
ret;
ENDPROC(cast6_xts_dec_8way)
+diff --git a/arch/x86/crypto/cast6_avx_glue.c b/arch/x86/crypto/cast6_avx_glue.c
+index fca4595..e5d2127 100644
+--- a/arch/x86/crypto/cast6_avx_glue.c
++++ b/arch/x86/crypto/cast6_avx_glue.c
+@@ -41,20 +41,20 @@
+
+ #define CAST6_PARALLEL_BLOCKS 8
+
+-asmlinkage void cast6_ecb_enc_8way(struct cast6_ctx *ctx, u8 *dst,
++asmlinkage void cast6_ecb_enc_8way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void cast6_ecb_dec_8way(struct cast6_ctx *ctx, u8 *dst,
++asmlinkage void cast6_ecb_dec_8way(void *ctx, u8 *dst,
+ const u8 *src);
+
+-asmlinkage void cast6_cbc_dec_8way(struct cast6_ctx *ctx, u8 *dst,
++asmlinkage void cast6_cbc_dec_8way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void cast6_ctr_8way(struct cast6_ctx *ctx, u8 *dst, const u8 *src,
++asmlinkage void cast6_ctr_8way(void *ctx, u128 *dst, const u128 *src,
+ le128 *iv);
+
+-asmlinkage void cast6_xts_enc_8way(struct cast6_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
+-asmlinkage void cast6_xts_dec_8way(struct cast6_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void cast6_xts_enc_8way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
++asmlinkage void cast6_xts_dec_8way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+ static void cast6_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+ {
diff --git a/arch/x86/crypto/crc32c-pcl-intel-asm_64.S b/arch/x86/crypto/crc32c-pcl-intel-asm_64.S
index 4fe27e0..2885e731 100644
--- a/arch/x86/crypto/crc32c-pcl-intel-asm_64.S
@@ -13958,6 +14285,19 @@ index 5d1e007..098cb4f 100644
+ pax_force_retaddr
ret
ENDPROC(clmul_ghash_update)
+diff --git a/arch/x86/crypto/glue_helper.c b/arch/x86/crypto/glue_helper.c
+index 6a85598..fed2ada 100644
+--- a/arch/x86/crypto/glue_helper.c
++++ b/arch/x86/crypto/glue_helper.c
+@@ -165,7 +165,7 @@ __glue_cbc_decrypt_128bit(const struct common_glue_ctx *gctx,
+ src -= num_blocks - 1;
+ dst -= num_blocks - 1;
+
+- gctx->funcs[i].fn_u.cbc(ctx, dst, src);
++ gctx->funcs[i].fn_u.cbc(ctx, (u8 *)dst, (u8 *)src);
+
+ nbytes -= bsize;
+ if (nbytes < bsize)
diff --git a/arch/x86/crypto/salsa20-x86_64-asm_64.S b/arch/x86/crypto/salsa20-x86_64-asm_64.S
index 9279e0b..c4b3d2c 100644
--- a/arch/x86/crypto/salsa20-x86_64-asm_64.S
@@ -13992,7 +14332,7 @@ index 9279e0b..c4b3d2c 100644
ret
ENDPROC(salsa20_ivsetup)
diff --git a/arch/x86/crypto/serpent-avx-x86_64-asm_64.S b/arch/x86/crypto/serpent-avx-x86_64-asm_64.S
-index 2f202f4..d9164d6 100644
+index 2f202f4..e671172 100644
--- a/arch/x86/crypto/serpent-avx-x86_64-asm_64.S
+++ b/arch/x86/crypto/serpent-avx-x86_64-asm_64.S
@@ -24,6 +24,7 @@
@@ -14011,7 +14351,7 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(__serpent_enc_blk8_avx)
-@@ -672,6 +674,7 @@ __serpent_dec_blk8_avx:
+@@ -672,10 +674,11 @@ __serpent_dec_blk8_avx:
write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2);
write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2);
@@ -14019,7 +14359,12 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(__serpent_dec_blk8_avx)
-@@ -688,6 +691,7 @@ ENTRY(serpent_ecb_enc_8way_avx)
+-ENTRY(serpent_ecb_enc_8way_avx)
++RAP_ENTRY(serpent_ecb_enc_8way_avx)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -688,10 +691,11 @@ ENTRY(serpent_ecb_enc_8way_avx)
store_8way(%rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -14027,7 +14372,12 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(serpent_ecb_enc_8way_avx)
-@@ -704,6 +708,7 @@ ENTRY(serpent_ecb_dec_8way_avx)
+-ENTRY(serpent_ecb_dec_8way_avx)
++RAP_ENTRY(serpent_ecb_dec_8way_avx)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -704,10 +708,11 @@ ENTRY(serpent_ecb_dec_8way_avx)
store_8way(%rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2);
@@ -14035,7 +14385,12 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(serpent_ecb_dec_8way_avx)
-@@ -720,6 +725,7 @@ ENTRY(serpent_cbc_dec_8way_avx)
+-ENTRY(serpent_cbc_dec_8way_avx)
++RAP_ENTRY(serpent_cbc_dec_8way_avx)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -720,10 +725,11 @@ ENTRY(serpent_cbc_dec_8way_avx)
store_cbc_8way(%rdx, %rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2);
@@ -14043,7 +14398,12 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(serpent_cbc_dec_8way_avx)
-@@ -738,6 +744,7 @@ ENTRY(serpent_ctr_8way_avx)
+-ENTRY(serpent_ctr_8way_avx)
++RAP_ENTRY(serpent_ctr_8way_avx)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -738,10 +744,11 @@ ENTRY(serpent_ctr_8way_avx)
store_ctr_8way(%rdx, %rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -14051,7 +14411,12 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(serpent_ctr_8way_avx)
-@@ -758,6 +765,7 @@ ENTRY(serpent_xts_enc_8way_avx)
+-ENTRY(serpent_xts_enc_8way_avx)
++RAP_ENTRY(serpent_xts_enc_8way_avx)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -758,10 +765,11 @@ ENTRY(serpent_xts_enc_8way_avx)
/* dst <= regs xor IVs(in dst) */
store_xts_8way(%rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -14059,6 +14424,11 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(serpent_xts_enc_8way_avx)
+-ENTRY(serpent_xts_dec_8way_avx)
++RAP_ENTRY(serpent_xts_dec_8way_avx)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -778,5 +786,6 @@ ENTRY(serpent_xts_dec_8way_avx)
/* dst <= regs xor IVs(in dst) */
store_xts_8way(%rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2);
@@ -14067,7 +14437,7 @@ index 2f202f4..d9164d6 100644
ret;
ENDPROC(serpent_xts_dec_8way_avx)
diff --git a/arch/x86/crypto/serpent-avx2-asm_64.S b/arch/x86/crypto/serpent-avx2-asm_64.S
-index b222085..abd483c 100644
+index b222085..c43efce 100644
--- a/arch/x86/crypto/serpent-avx2-asm_64.S
+++ b/arch/x86/crypto/serpent-avx2-asm_64.S
@@ -15,6 +15,7 @@
@@ -14086,7 +14456,7 @@ index b222085..abd483c 100644
ret;
ENDPROC(__serpent_enc_blk16)
-@@ -664,6 +666,7 @@ __serpent_dec_blk16:
+@@ -664,10 +666,11 @@ __serpent_dec_blk16:
write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2);
write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2);
@@ -14094,7 +14464,12 @@ index b222085..abd483c 100644
ret;
ENDPROC(__serpent_dec_blk16)
-@@ -684,6 +687,7 @@ ENTRY(serpent_ecb_enc_16way)
+-ENTRY(serpent_ecb_enc_16way)
++RAP_ENTRY(serpent_ecb_enc_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -684,10 +687,11 @@ ENTRY(serpent_ecb_enc_16way)
vzeroupper;
@@ -14102,7 +14477,12 @@ index b222085..abd483c 100644
ret;
ENDPROC(serpent_ecb_enc_16way)
-@@ -704,6 +708,7 @@ ENTRY(serpent_ecb_dec_16way)
+-ENTRY(serpent_ecb_dec_16way)
++RAP_ENTRY(serpent_ecb_dec_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -704,10 +708,11 @@ ENTRY(serpent_ecb_dec_16way)
vzeroupper;
@@ -14110,7 +14490,12 @@ index b222085..abd483c 100644
ret;
ENDPROC(serpent_ecb_dec_16way)
-@@ -725,6 +730,7 @@ ENTRY(serpent_cbc_dec_16way)
+-ENTRY(serpent_cbc_dec_16way)
++RAP_ENTRY(serpent_cbc_dec_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -725,10 +730,11 @@ ENTRY(serpent_cbc_dec_16way)
vzeroupper;
@@ -14118,7 +14503,12 @@ index b222085..abd483c 100644
ret;
ENDPROC(serpent_cbc_dec_16way)
-@@ -748,6 +754,7 @@ ENTRY(serpent_ctr_16way)
+-ENTRY(serpent_ctr_16way)
++RAP_ENTRY(serpent_ctr_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
+@@ -748,10 +754,11 @@ ENTRY(serpent_ctr_16way)
vzeroupper;
@@ -14126,7 +14516,12 @@ index b222085..abd483c 100644
ret;
ENDPROC(serpent_ctr_16way)
-@@ -772,6 +779,7 @@ ENTRY(serpent_xts_enc_16way)
+-ENTRY(serpent_xts_enc_16way)
++RAP_ENTRY(serpent_xts_enc_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
+@@ -772,10 +779,11 @@ ENTRY(serpent_xts_enc_16way)
vzeroupper;
@@ -14134,6 +14529,11 @@ index b222085..abd483c 100644
ret;
ENDPROC(serpent_xts_enc_16way)
+-ENTRY(serpent_xts_dec_16way)
++RAP_ENTRY(serpent_xts_dec_16way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst (16 blocks)
@@ -796,5 +804,6 @@ ENTRY(serpent_xts_dec_16way)
vzeroupper;
@@ -14175,6 +14575,94 @@ index acc066c..1559cc4 100644
+ pax_force_retaddr
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
+--- a/arch/x86/crypto/serpent_avx2_glue.c
++++ b/arch/x86/crypto/serpent_avx2_glue.c
+@@ -27,18 +27,18 @@
+ #define SERPENT_AVX2_PARALLEL_BLOCKS 16
+
+ /* 16-way AVX2 parallel cipher functions */
+-asmlinkage void serpent_ecb_enc_16way(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_ecb_enc_16way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void serpent_ecb_dec_16way(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_ecb_dec_16way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void serpent_cbc_dec_16way(void *ctx, u128 *dst, const u128 *src);
++asmlinkage void serpent_cbc_dec_16way(void *ctx, u8 *dst, const u8 *src);
+
+ asmlinkage void serpent_ctr_16way(void *ctx, u128 *dst, const u128 *src,
+ le128 *iv);
+-asmlinkage void serpent_xts_enc_16way(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
+-asmlinkage void serpent_xts_dec_16way(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void serpent_xts_enc_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
++asmlinkage void serpent_xts_dec_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+ static const struct common_glue_ctx serpent_enc = {
+ .num_funcs = 3,
+diff --git a/arch/x86/crypto/serpent_avx_glue.c b/arch/x86/crypto/serpent_avx_glue.c
+index 5dc3702..10f232a 100644
+--- a/arch/x86/crypto/serpent_avx_glue.c
++++ b/arch/x86/crypto/serpent_avx_glue.c
+@@ -41,28 +41,28 @@
+ #include <asm/crypto/glue_helper.h>
+
+ /* 8-way parallel cipher functions */
+-asmlinkage void serpent_ecb_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_ecb_enc_8way_avx(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(serpent_ecb_enc_8way_avx);
+
+-asmlinkage void serpent_ecb_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_ecb_dec_8way_avx(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(serpent_ecb_dec_8way_avx);
+
+-asmlinkage void serpent_cbc_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_cbc_dec_8way_avx(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(serpent_cbc_dec_8way_avx);
+
+-asmlinkage void serpent_ctr_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void serpent_ctr_8way_avx(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+ EXPORT_SYMBOL_GPL(serpent_ctr_8way_avx);
+
+-asmlinkage void serpent_xts_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void serpent_xts_enc_8way_avx(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+ EXPORT_SYMBOL_GPL(serpent_xts_enc_8way_avx);
+
+-asmlinkage void serpent_xts_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void serpent_xts_dec_8way_avx(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+ EXPORT_SYMBOL_GPL(serpent_xts_dec_8way_avx);
+
+ void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+diff --git a/arch/x86/crypto/serpent_sse2_glue.c b/arch/x86/crypto/serpent_sse2_glue.c
+index 3643dd5..17d5e30 100644
+--- a/arch/x86/crypto/serpent_sse2_glue.c
++++ b/arch/x86/crypto/serpent_sse2_glue.c
+@@ -45,8 +45,10 @@
+ #include <asm/crypto/serpent-sse2.h>
+ #include <asm/crypto/glue_helper.h>
+
+-static void serpent_decrypt_cbc_xway(void *ctx, u128 *dst, const u128 *src)
++static void serpent_decrypt_cbc_xway(void *ctx, u8 *_dst, const u8 *_src)
+ {
++ u128 *dst = (u128 *)_dst;
++ const u128 *src = (const u128 *)_src;
+ u128 ivs[SERPENT_PARALLEL_BLOCKS - 1];
+ unsigned int j;
+
diff --git a/arch/x86/crypto/sha-mb/sha1_mb.c b/arch/x86/crypto/sha-mb/sha1_mb.c
index a841e97..8381c09d 100644
--- a/arch/x86/crypto/sha-mb/sha1_mb.c
@@ -14193,7 +14681,7 @@ index a841e97..8381c09d 100644
}
}
diff --git a/arch/x86/crypto/sha1_ssse3_asm.S b/arch/x86/crypto/sha1_ssse3_asm.S
-index a410950..9dfe7ad 100644
+index a410950..02d2056 100644
--- a/arch/x86/crypto/sha1_ssse3_asm.S
+++ b/arch/x86/crypto/sha1_ssse3_asm.S
@@ -29,6 +29,7 @@
@@ -14204,7 +14692,13 @@ index a410950..9dfe7ad 100644
#define CTX %rdi // arg1
#define BUF %rsi // arg2
-@@ -75,9 +76,9 @@
+@@ -71,13 +72,14 @@
+ * param: function's name
+ */
+ .macro SHA1_VECTOR_ASM name
+- ENTRY(\name)
++ALIGN
++ RAP_ENTRY(\name)
push %rbx
push %rbp
@@ -14216,7 +14710,7 @@ index a410950..9dfe7ad 100644
sub $64, %rsp # allocate workspace
and $~15, %rsp # align stack
-@@ -99,11 +100,12 @@
+@@ -99,11 +101,12 @@
xor %rax, %rax
rep stosq
@@ -14231,8 +14725,161 @@ index a410950..9dfe7ad 100644
ret
ENDPROC(\name)
+diff --git a/arch/x86/crypto/sha1_ssse3_glue.c b/arch/x86/crypto/sha1_ssse3_glue.c
+index dd14616..53358bb 100644
+--- a/arch/x86/crypto/sha1_ssse3_glue.c
++++ b/arch/x86/crypto/sha1_ssse3_glue.c
+@@ -31,8 +31,8 @@
+ #include <crypto/sha1_base.h>
+ #include <asm/fpu/api.h>
+
+-typedef void (sha1_transform_fn)(u32 *digest, const char *data,
+- unsigned int rounds);
++typedef void (sha1_transform_fn)(struct sha1_state *digest, const u8 *data,
++ int rounds);
+
+ static int sha1_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len, sha1_transform_fn *sha1_xform)
+@@ -47,8 +47,7 @@ static int sha1_update(struct shash_desc *desc, const u8 *data,
+ BUILD_BUG_ON(offsetof(struct sha1_state, state) != 0);
+
+ kernel_fpu_begin();
+- sha1_base_do_update(desc, data, len,
+- (sha1_block_fn *)sha1_xform);
++ sha1_base_do_update(desc, data, len, sha1_xform);
+ kernel_fpu_end();
+
+ return 0;
+@@ -62,29 +61,26 @@ static int sha1_finup(struct shash_desc *desc, const u8 *data,
+
+ kernel_fpu_begin();
+ if (len)
+- sha1_base_do_update(desc, data, len,
+- (sha1_block_fn *)sha1_xform);
+- sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_xform);
++ sha1_base_do_update(desc, data, len, sha1_xform);
++ sha1_base_do_finalize(desc, sha1_xform);
+ kernel_fpu_end();
+
+ return sha1_base_finish(desc, out);
+ }
+
+-asmlinkage void sha1_transform_ssse3(u32 *digest, const char *data,
+- unsigned int rounds);
++asmlinkage void sha1_transform_ssse3(struct sha1_state *digest, const u8 *data,
++ int rounds);
+
+ static int sha1_ssse3_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
+ {
+- return sha1_update(desc, data, len,
+- (sha1_transform_fn *) sha1_transform_ssse3);
++ return sha1_update(desc, data, len, sha1_transform_ssse3);
+ }
+
+ static int sha1_ssse3_finup(struct shash_desc *desc, const u8 *data,
+ unsigned int len, u8 *out)
+ {
+- return sha1_finup(desc, data, len, out,
+- (sha1_transform_fn *) sha1_transform_ssse3);
++ return sha1_finup(desc, data, len, out, sha1_transform_ssse3);
+ }
+
+ /* Add padding and return the message digest. */
+@@ -124,21 +120,19 @@ static void unregister_sha1_ssse3(void)
+ }
+
+ #ifdef CONFIG_AS_AVX
+-asmlinkage void sha1_transform_avx(u32 *digest, const char *data,
+- unsigned int rounds);
++asmlinkage void sha1_transform_avx(struct sha1_state *digest, const u8 *data,
++ int rounds);
+
+ static int sha1_avx_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
+ {
+- return sha1_update(desc, data, len,
+- (sha1_transform_fn *) sha1_transform_avx);
++ return sha1_update(desc, data, len, sha1_transform_avx);
+ }
+
+ static int sha1_avx_finup(struct shash_desc *desc, const u8 *data,
+ unsigned int len, u8 *out)
+ {
+- return sha1_finup(desc, data, len, out,
+- (sha1_transform_fn *) sha1_transform_avx);
++ return sha1_finup(desc, data, len, out, sha1_transform_avx);
+ }
+
+ static int sha1_avx_final(struct shash_desc *desc, u8 *out)
+@@ -196,8 +190,8 @@ static inline void unregister_sha1_avx(void) { }
+ #if defined(CONFIG_AS_AVX2) && (CONFIG_AS_AVX)
+ #define SHA1_AVX2_BLOCK_OPTSIZE 4 /* optimal 4*64 bytes of SHA1 blocks */
+
+-asmlinkage void sha1_transform_avx2(u32 *digest, const char *data,
+- unsigned int rounds);
++asmlinkage void sha1_transform_avx2(struct sha1_state *digest, const u8 *data,
++ int rounds);
+
+ static bool avx2_usable(void)
+ {
+@@ -209,8 +203,8 @@ static bool avx2_usable(void)
+ return false;
+ }
+
+-static void sha1_apply_transform_avx2(u32 *digest, const char *data,
+- unsigned int rounds)
++static void sha1_apply_transform_avx2(struct sha1_state *digest, const u8 *data,
++ int rounds)
+ {
+ /* Select the optimal transform based on data block size */
+ if (rounds >= SHA1_AVX2_BLOCK_OPTSIZE)
+@@ -222,15 +216,13 @@ static void sha1_apply_transform_avx2(u32 *digest, const char *data,
+ static int sha1_avx2_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
+ {
+- return sha1_update(desc, data, len,
+- (sha1_transform_fn *) sha1_apply_transform_avx2);
++ return sha1_update(desc, data, len, sha1_apply_transform_avx2);
+ }
+
+ static int sha1_avx2_finup(struct shash_desc *desc, const u8 *data,
+ unsigned int len, u8 *out)
+ {
+- return sha1_finup(desc, data, len, out,
+- (sha1_transform_fn *) sha1_apply_transform_avx2);
++ return sha1_finup(desc, data, len, out, sha1_apply_transform_avx2);
+ }
+
+ static int sha1_avx2_final(struct shash_desc *desc, u8 *out)
+@@ -274,21 +266,19 @@ static inline void unregister_sha1_avx2(void) { }
+ #endif
+
+ #ifdef CONFIG_AS_SHA1_NI
+-asmlinkage void sha1_ni_transform(u32 *digest, const char *data,
+- unsigned int rounds);
++asmlinkage void sha1_ni_transform(struct sha1_state *digest, const u8 *data,
++ int rounds);
+
+ static int sha1_ni_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
+ {
+- return sha1_update(desc, data, len,
+- (sha1_transform_fn *) sha1_ni_transform);
++ return sha1_update(desc, data, len, sha1_ni_transform);
+ }
+
+ static int sha1_ni_finup(struct shash_desc *desc, const u8 *data,
+ unsigned int len, u8 *out)
+ {
+- return sha1_finup(desc, data, len, out,
+- (sha1_transform_fn *) sha1_ni_transform);
++ return sha1_finup(desc, data, len, out, sha1_ni_transform);
+ }
+
+ static int sha1_ni_final(struct shash_desc *desc, u8 *out)
diff --git a/arch/x86/crypto/sha256-avx-asm.S b/arch/x86/crypto/sha256-avx-asm.S
-index 92b3b5d..0dc1dcb 100644
+index 92b3b5d..8732479 100644
--- a/arch/x86/crypto/sha256-avx-asm.S
+++ b/arch/x86/crypto/sha256-avx-asm.S
@@ -49,6 +49,7 @@
@@ -14243,7 +14890,17 @@ index 92b3b5d..0dc1dcb 100644
## assume buffers not aligned
#define VMOVDQ vmovdqu
-@@ -460,6 +461,7 @@ done_hash:
+@@ -347,8 +348,7 @@ a = TMP_
+ ## arg 3 : Num blocks
+ ########################################################################
+ .text
+-ENTRY(sha256_transform_avx)
+-.align 32
++RAP_ENTRY(sha256_transform_avx)
+ pushq %rbx
+ pushq %rbp
+ pushq %r13
+@@ -460,6 +460,7 @@ done_hash:
popq %r13
popq %rbp
popq %rbx
@@ -14252,7 +14909,7 @@ index 92b3b5d..0dc1dcb 100644
ENDPROC(sha256_transform_avx)
diff --git a/arch/x86/crypto/sha256-avx2-asm.S b/arch/x86/crypto/sha256-avx2-asm.S
-index 570ec5e..cf2b625 100644
+index 570ec5e..9bcfa25 100644
--- a/arch/x86/crypto/sha256-avx2-asm.S
+++ b/arch/x86/crypto/sha256-avx2-asm.S
@@ -50,6 +50,7 @@
@@ -14263,7 +14920,17 @@ index 570ec5e..cf2b625 100644
## assume buffers not aligned
#define VMOVDQ vmovdqu
-@@ -720,6 +721,7 @@ done_hash:
+@@ -528,8 +529,7 @@ STACK_SIZE = _RSP + _RSP_SIZE
+ ## arg 3 : Num blocks
+ ########################################################################
+ .text
+-ENTRY(sha256_transform_rorx)
+-.align 32
++RAP_ENTRY(sha256_transform_rorx)
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+@@ -720,6 +720,7 @@ done_hash:
popq %r12
popq %rbp
popq %rbx
@@ -14272,7 +14939,7 @@ index 570ec5e..cf2b625 100644
ENDPROC(sha256_transform_rorx)
diff --git a/arch/x86/crypto/sha256-ssse3-asm.S b/arch/x86/crypto/sha256-ssse3-asm.S
-index 2cedc44..5144899 100644
+index 2cedc44..6fb8582 100644
--- a/arch/x86/crypto/sha256-ssse3-asm.S
+++ b/arch/x86/crypto/sha256-ssse3-asm.S
@@ -47,6 +47,7 @@
@@ -14283,7 +14950,18 @@ index 2cedc44..5144899 100644
## assume buffers not aligned
#define MOVDQ movdqu
-@@ -471,6 +472,7 @@ done_hash:
+@@ -352,9 +353,7 @@ a = TMP_
+ ## arg 2 : pointer to input data
+ ## arg 3 : Num blocks
+ ########################################################################
+-.text
+-ENTRY(sha256_transform_ssse3)
+-.align 32
++RAP_ENTRY(sha256_transform_ssse3)
+ pushq %rbx
+ pushq %rbp
+ pushq %r13
+@@ -471,6 +470,7 @@ done_hash:
popq %rbp
popq %rbx
@@ -14291,8 +14969,80 @@ index 2cedc44..5144899 100644
ret
ENDPROC(sha256_transform_ssse3)
+diff --git a/arch/x86/crypto/sha256_ssse3_glue.c b/arch/x86/crypto/sha256_ssse3_glue.c
+index 5f4d608..ddce00d 100644
+--- a/arch/x86/crypto/sha256_ssse3_glue.c
++++ b/arch/x86/crypto/sha256_ssse3_glue.c
+@@ -40,9 +40,9 @@
+ #include <asm/fpu/api.h>
+ #include <linux/string.h>
+
+-asmlinkage void sha256_transform_ssse3(u32 *digest, const char *data,
+- u64 rounds);
+-typedef void (sha256_transform_fn)(u32 *digest, const char *data, u64 rounds);
++asmlinkage void sha256_transform_ssse3(struct sha256_state *digest, const u8 *data,
++ int rounds);
++typedef void (sha256_transform_fn)(struct sha256_state *digest, const u8 *data, int rounds);
+
+ static int sha256_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len, sha256_transform_fn *sha256_xform)
+@@ -57,8 +57,7 @@ static int sha256_update(struct shash_desc *desc, const u8 *data,
+ BUILD_BUG_ON(offsetof(struct sha256_state, state) != 0);
+
+ kernel_fpu_begin();
+- sha256_base_do_update(desc, data, len,
+- (sha256_block_fn *)sha256_xform);
++ sha256_base_do_update(desc, data, len, sha256_xform);
+ kernel_fpu_end();
+
+ return 0;
+@@ -72,9 +71,8 @@ static int sha256_finup(struct shash_desc *desc, const u8 *data,
+
+ kernel_fpu_begin();
+ if (len)
+- sha256_base_do_update(desc, data, len,
+- (sha256_block_fn *)sha256_xform);
+- sha256_base_do_finalize(desc, (sha256_block_fn *)sha256_xform);
++ sha256_base_do_update(desc, data, len, sha256_xform);
++ sha256_base_do_finalize(desc, sha256_xform);
+ kernel_fpu_end();
+
+ return sha256_base_finish(desc, out);
+@@ -146,8 +144,8 @@ static void unregister_sha256_ssse3(void)
+ }
+
+ #ifdef CONFIG_AS_AVX
+-asmlinkage void sha256_transform_avx(u32 *digest, const char *data,
+- u64 rounds);
++asmlinkage void sha256_transform_avx(struct sha256_state *digest, const u8 *data,
++ int rounds);
+
+ static int sha256_avx_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
+@@ -230,8 +228,8 @@ static inline void unregister_sha256_avx(void) { }
+ #endif
+
+ #if defined(CONFIG_AS_AVX2) && defined(CONFIG_AS_AVX)
+-asmlinkage void sha256_transform_rorx(u32 *digest, const char *data,
+- u64 rounds);
++asmlinkage void sha256_transform_rorx(struct sha256_state *digest, const u8 *data,
++ int rounds);
+
+ static int sha256_avx2_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
+@@ -312,8 +310,8 @@ static inline void unregister_sha256_avx2(void) { }
+ #endif
+
+ #ifdef CONFIG_AS_SHA256_NI
+-asmlinkage void sha256_ni_transform(u32 *digest, const char *data,
+- u64 rounds); /*unsigned int rounds);*/
++asmlinkage void sha256_ni_transform(struct sha256_state *digest, const u8 *data,
++ int rounds); /*unsigned int rounds);*/
+
+ static int sha256_ni_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
diff --git a/arch/x86/crypto/sha512-avx-asm.S b/arch/x86/crypto/sha512-avx-asm.S
-index 565274d..af6bc08 100644
+index 565274d..779d34a 100644
--- a/arch/x86/crypto/sha512-avx-asm.S
+++ b/arch/x86/crypto/sha512-avx-asm.S
@@ -49,6 +49,7 @@
@@ -14303,7 +15053,17 @@ index 565274d..af6bc08 100644
.text
-@@ -364,6 +365,7 @@ updateblock:
+@@ -277,7 +278,8 @@ frame_size = frame_GPRSAVE + GPRSAVE_SIZE
+ # message blocks.
+ # L is the message length in SHA512 blocks
+ ########################################################################
+-ENTRY(sha512_transform_avx)
++ALIGN
++RAP_ENTRY(sha512_transform_avx)
+ cmp $0, msglen
+ je nowork
+
+@@ -364,6 +366,7 @@ updateblock:
mov frame_RSPSAVE(%rsp), %rsp
nowork:
@@ -14312,7 +15072,7 @@ index 565274d..af6bc08 100644
ENDPROC(sha512_transform_avx)
diff --git a/arch/x86/crypto/sha512-avx2-asm.S b/arch/x86/crypto/sha512-avx2-asm.S
-index 1f20b35..f25c8c1 100644
+index 1f20b35..ab1f3a8 100644
--- a/arch/x86/crypto/sha512-avx2-asm.S
+++ b/arch/x86/crypto/sha512-avx2-asm.S
@@ -51,6 +51,7 @@
@@ -14323,7 +15083,17 @@ index 1f20b35..f25c8c1 100644
.text
-@@ -678,6 +679,7 @@ done_hash:
+@@ -568,7 +569,8 @@ frame_size = frame_GPRSAVE + GPRSAVE_SIZE
+ # message blocks.
+ # L is the message length in SHA512 blocks
+ ########################################################################
+-ENTRY(sha512_transform_rorx)
++ALIGN
++RAP_ENTRY(sha512_transform_rorx)
+ # Allocate Stack Space
+ mov %rsp, %rax
+ sub $frame_size, %rsp
+@@ -678,6 +680,7 @@ done_hash:
# Restore Stack Pointer
mov frame_RSPSAVE(%rsp), %rsp
@@ -14332,7 +15102,7 @@ index 1f20b35..f25c8c1 100644
ENDPROC(sha512_transform_rorx)
diff --git a/arch/x86/crypto/sha512-ssse3-asm.S b/arch/x86/crypto/sha512-ssse3-asm.S
-index e610e29..ffcb5ed 100644
+index e610e29..83f1cde 100644
--- a/arch/x86/crypto/sha512-ssse3-asm.S
+++ b/arch/x86/crypto/sha512-ssse3-asm.S
@@ -48,6 +48,7 @@
@@ -14343,7 +15113,17 @@ index e610e29..ffcb5ed 100644
.text
-@@ -363,6 +364,7 @@ updateblock:
+@@ -275,7 +276,8 @@ frame_size = frame_GPRSAVE + GPRSAVE_SIZE
+ # message blocks.
+ # L is the message length in SHA512 blocks.
+ ########################################################################
+-ENTRY(sha512_transform_ssse3)
++ALIGN
++RAP_ENTRY(sha512_transform_ssse3)
+
+ cmp $0, msglen
+ je nowork
+@@ -363,6 +365,7 @@ updateblock:
mov frame_RSPSAVE(%rsp), %rsp
nowork:
@@ -14351,8 +15131,70 @@ index e610e29..ffcb5ed 100644
ret
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
+--- a/arch/x86/crypto/sha512_ssse3_glue.c
++++ b/arch/x86/crypto/sha512_ssse3_glue.c
+@@ -39,10 +39,10 @@
+
+ #include <linux/string.h>
+
+-asmlinkage void sha512_transform_ssse3(u64 *digest, const char *data,
+- u64 rounds);
++asmlinkage void sha512_transform_ssse3(struct sha512_state *digest, const u8 *data,
++ int rounds);
+
+-typedef void (sha512_transform_fn)(u64 *digest, const char *data, u64 rounds);
++typedef void (sha512_transform_fn)(struct sha512_state *digest, const u8 *data, int rounds);
+
+ static int sha512_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len, sha512_transform_fn *sha512_xform)
+@@ -57,8 +57,7 @@ static int sha512_update(struct shash_desc *desc, const u8 *data,
+ BUILD_BUG_ON(offsetof(struct sha512_state, state) != 0);
+
+ kernel_fpu_begin();
+- sha512_base_do_update(desc, data, len,
+- (sha512_block_fn *)sha512_xform);
++ sha512_base_do_update(desc, data, len, sha512_xform);
+ kernel_fpu_end();
+
+ return 0;
+@@ -72,9 +71,8 @@ static int sha512_finup(struct shash_desc *desc, const u8 *data,
+
+ kernel_fpu_begin();
+ if (len)
+- sha512_base_do_update(desc, data, len,
+- (sha512_block_fn *)sha512_xform);
+- sha512_base_do_finalize(desc, (sha512_block_fn *)sha512_xform);
++ sha512_base_do_update(desc, data, len, sha512_xform);
++ sha512_base_do_finalize(desc, sha512_xform);
+ kernel_fpu_end();
+
+ return sha512_base_finish(desc, out);
+@@ -146,8 +144,8 @@ static void unregister_sha512_ssse3(void)
+ }
+
+ #ifdef CONFIG_AS_AVX
+-asmlinkage void sha512_transform_avx(u64 *digest, const char *data,
+- u64 rounds);
++asmlinkage void sha512_transform_avx(struct sha512_state *digest, const u8 *data,
++ int rounds);
+ static bool avx_usable(void)
+ {
+ if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL)) {
+@@ -229,8 +227,8 @@ static inline void unregister_sha512_avx(void) { }
+ #endif
+
+ #if defined(CONFIG_AS_AVX2) && defined(CONFIG_AS_AVX)
+-asmlinkage void sha512_transform_rorx(u64 *digest, const char *data,
+- u64 rounds);
++asmlinkage void sha512_transform_rorx(struct sha512_state *digest, const u8 *data,
++ int rounds);
+
+ static int sha512_avx2_update(struct shash_desc *desc, const u8 *data,
+ unsigned int len)
diff --git a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S
-index 0505813..b067311 100644
+index 0505813..912c9c1 100644
--- a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S
+++ b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S
@@ -24,6 +24,7 @@
@@ -14371,7 +15213,7 @@ index 0505813..b067311 100644
ret;
ENDPROC(__twofish_enc_blk8)
-@@ -324,6 +326,7 @@ __twofish_dec_blk8:
+@@ -324,10 +326,11 @@ __twofish_dec_blk8:
outunpack_blocks(RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2);
outunpack_blocks(RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2);
@@ -14379,7 +15221,12 @@ index 0505813..b067311 100644
ret;
ENDPROC(__twofish_dec_blk8)
-@@ -342,6 +345,7 @@ ENTRY(twofish_ecb_enc_8way)
+-ENTRY(twofish_ecb_enc_8way)
++RAP_ENTRY(twofish_ecb_enc_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -342,10 +345,11 @@ ENTRY(twofish_ecb_enc_8way)
store_8way(%r11, RC1, RD1, RA1, RB1, RC2, RD2, RA2, RB2);
@@ -14387,7 +15234,12 @@ index 0505813..b067311 100644
ret;
ENDPROC(twofish_ecb_enc_8way)
-@@ -360,6 +364,7 @@ ENTRY(twofish_ecb_dec_8way)
+-ENTRY(twofish_ecb_dec_8way)
++RAP_ENTRY(twofish_ecb_dec_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -360,33 +364,35 @@ ENTRY(twofish_ecb_dec_8way)
store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -14395,7 +15247,11 @@ index 0505813..b067311 100644
ret;
ENDPROC(twofish_ecb_dec_8way)
-@@ -370,19 +375,20 @@ ENTRY(twofish_cbc_dec_8way)
+-ENTRY(twofish_cbc_dec_8way)
++RAP_ENTRY(twofish_cbc_dec_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
* %rdx: src
*/
@@ -14420,7 +15276,12 @@ index 0505813..b067311 100644
ret;
ENDPROC(twofish_cbc_dec_8way)
-@@ -394,20 +400,21 @@ ENTRY(twofish_ctr_8way)
+-ENTRY(twofish_ctr_8way)
++RAP_ENTRY(twofish_ctr_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -394,24 +400,25 @@ ENTRY(twofish_ctr_8way)
* %rcx: iv (little endian, 128bit)
*/
@@ -14446,7 +15307,12 @@ index 0505813..b067311 100644
ret;
ENDPROC(twofish_ctr_8way)
-@@ -430,6 +437,7 @@ ENTRY(twofish_xts_enc_8way)
+-ENTRY(twofish_xts_enc_8way)
++RAP_ENTRY(twofish_xts_enc_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
+@@ -430,10 +437,11 @@ ENTRY(twofish_xts_enc_8way)
/* dst <= regs xor IVs(in dst) */
store_xts_8way(%r11, RC1, RD1, RA1, RB1, RC2, RD2, RA2, RB2);
@@ -14454,6 +15320,11 @@ index 0505813..b067311 100644
ret;
ENDPROC(twofish_xts_enc_8way)
+-ENTRY(twofish_xts_dec_8way)
++RAP_ENTRY(twofish_xts_dec_8way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -452,5 +460,6 @@ ENTRY(twofish_xts_dec_8way)
/* dst <= regs xor IVs(in dst) */
store_xts_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2);
@@ -14461,8 +15332,21 @@ index 0505813..b067311 100644
+ pax_force_retaddr
ret;
ENDPROC(twofish_xts_dec_8way)
+diff --git a/arch/x86/crypto/twofish-i586-asm_32.S b/arch/x86/crypto/twofish-i586-asm_32.S
+index 694ea45..91cc5b2 100644
+--- a/arch/x86/crypto/twofish-i586-asm_32.S
++++ b/arch/x86/crypto/twofish-i586-asm_32.S
+@@ -220,7 +220,7 @@
+ xor %esi, d ## D;\
+ ror $1, d ## D;
+
+-ENTRY(twofish_enc_blk)
++RAP_ENTRY(twofish_enc_blk)
+ push %ebp /* save registers according to calling convention*/
+ push %ebx
+ push %esi
diff --git a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
-index 1c3b7ce..02f578d 100644
+index 1c3b7ce..c9912c7 100644
--- a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
+++ b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
@@ -21,6 +21,7 @@
@@ -14481,7 +15365,7 @@ index 1c3b7ce..02f578d 100644
ret;
.L__enc_xor3:
-@@ -269,6 +271,7 @@ ENTRY(__twofish_enc_blk_3way)
+@@ -269,10 +271,11 @@ ENTRY(__twofish_enc_blk_3way)
popq %r13;
popq %r14;
popq %r15;
@@ -14489,6 +15373,11 @@ index 1c3b7ce..02f578d 100644
ret;
ENDPROC(__twofish_enc_blk_3way)
+-ENTRY(twofish_dec_blk_3way)
++RAP_ENTRY(twofish_dec_blk_3way)
+ /* input:
+ * %rdi: ctx, CTX
+ * %rsi: dst
@@ -308,5 +311,6 @@ ENTRY(twofish_dec_blk_3way)
popq %r13;
popq %r14;
@@ -14497,7 +15386,7 @@ index 1c3b7ce..02f578d 100644
ret;
ENDPROC(twofish_dec_blk_3way)
diff --git a/arch/x86/crypto/twofish-x86_64-asm_64.S b/arch/x86/crypto/twofish-x86_64-asm_64.S
-index a350c99..c1bac24 100644
+index a350c99..080c5ab 100644
--- a/arch/x86/crypto/twofish-x86_64-asm_64.S
+++ b/arch/x86/crypto/twofish-x86_64-asm_64.S
@@ -22,6 +22,7 @@
@@ -14508,7 +15397,16 @@ index a350c99..c1bac24 100644
#define a_offset 0
#define b_offset 4
-@@ -265,6 +266,7 @@ ENTRY(twofish_enc_blk)
+@@ -215,7 +216,7 @@
+ xor %r8d, d ## D;\
+ ror $1, d ## D;
+
+-ENTRY(twofish_enc_blk)
++RAP_ENTRY(twofish_enc_blk)
+ pushq R1
+
+ /* %rdi contains the ctx address */
+@@ -265,10 +266,11 @@ ENTRY(twofish_enc_blk)
popq R1
movl $1,%eax
@@ -14516,6 +15414,11 @@ index a350c99..c1bac24 100644
ret
ENDPROC(twofish_enc_blk)
+-ENTRY(twofish_dec_blk)
++RAP_ENTRY(twofish_dec_blk)
+ pushq R1
+
+ /* %rdi contains the ctx address */
@@ -317,5 +319,6 @@ ENTRY(twofish_dec_blk)
popq R1
@@ -14523,11 +15426,121 @@ index a350c99..c1bac24 100644
+ pax_force_retaddr
ret
ENDPROC(twofish_dec_blk)
+diff --git a/arch/x86/crypto/twofish_avx_glue.c b/arch/x86/crypto/twofish_avx_glue.c
+index b7a3904b..3e4d0d6 100644
+--- a/arch/x86/crypto/twofish_avx_glue.c
++++ b/arch/x86/crypto/twofish_avx_glue.c
+@@ -46,24 +46,25 @@
+ #define TWOFISH_PARALLEL_BLOCKS 8
+
+ /* 8-way parallel cipher functions */
+-asmlinkage void twofish_ecb_enc_8way(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_ecb_enc_8way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void twofish_ecb_dec_8way(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_ecb_dec_8way(void *ctx, u8 *dst,
+ const u8 *src);
+
+-asmlinkage void twofish_cbc_dec_8way(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_cbc_dec_8way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void twofish_ctr_8way(struct twofish_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void twofish_ctr_8way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+-asmlinkage void twofish_xts_enc_8way(struct twofish_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
+-asmlinkage void twofish_xts_dec_8way(struct twofish_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void twofish_xts_enc_8way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
++asmlinkage void twofish_xts_dec_8way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+-static inline void twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst,
++static inline void twofish_enc_blk_3way(void *_ctx, u8 *dst,
+ const u8 *src)
+ {
++ struct twofish_ctx *ctx = _ctx;
+ __twofish_enc_blk_3way(ctx, dst, src, false);
+ }
+
+diff --git a/arch/x86/crypto/twofish_glue.c b/arch/x86/crypto/twofish_glue.c
+index 77e06c2..a45c27b 100644
+--- a/arch/x86/crypto/twofish_glue.c
++++ b/arch/x86/crypto/twofish_glue.c
+@@ -44,10 +44,10 @@
+ #include <linux/module.h>
+ #include <linux/types.h>
+
+-asmlinkage void twofish_enc_blk(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_enc_blk(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(twofish_enc_blk);
+-asmlinkage void twofish_dec_blk(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_dec_blk(void *ctx, u8 *dst,
+ const u8 *src);
+ EXPORT_SYMBOL_GPL(twofish_dec_blk);
+
+diff --git a/arch/x86/crypto/twofish_glue_3way.c b/arch/x86/crypto/twofish_glue_3way.c
+index 56d8a08..a9f21f5 100644
+--- a/arch/x86/crypto/twofish_glue_3way.c
++++ b/arch/x86/crypto/twofish_glue_3way.c
+@@ -36,21 +36,21 @@
+ EXPORT_SYMBOL_GPL(__twofish_enc_blk_3way);
+ EXPORT_SYMBOL_GPL(twofish_dec_blk_3way);
+
+-static inline void twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst,
++static inline void twofish_enc_blk_3way(void *ctx, u8 *dst,
+ const u8 *src)
+ {
+ __twofish_enc_blk_3way(ctx, dst, src, false);
+ }
+
+-static inline void twofish_enc_blk_xor_3way(struct twofish_ctx *ctx, u8 *dst,
++static inline void twofish_enc_blk_xor_3way(void *ctx, u8 *dst,
+ const u8 *src)
+ {
+ __twofish_enc_blk_3way(ctx, dst, src, true);
+ }
+
+-void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src)
++void twofish_dec_blk_cbc_3way(void *ctx, u8 *_dst, const u8 *_src)
+ {
+- u128 ivs[2];
++ u128 ivs[2], *dst = (u128 *)_dst, *src = (u128 *)_src;
+
+ ivs[0] = src[0];
+ ivs[1] = src[1];
+@@ -118,10 +118,10 @@ static const struct common_glue_ctx twofish_ctr = {
+
+ .funcs = { {
+ .num_blocks = 3,
+- .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_ctr_3way) }
++ .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_enc_blk_ctr_3way) }
+ }, {
+ .num_blocks = 1,
+- .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_ctr) }
++ .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_enc_blk_ctr) }
+ } }
+ };
+
+diff --git a/arch/x86/entry/Makefile b/arch/x86/entry/Makefile
+index bd55ded..1310c8e 100644
+--- a/arch/x86/entry/Makefile
++++ b/arch/x86/entry/Makefile
+@@ -9,3 +9,5 @@ obj-y += vsyscall/
+
+ obj-$(CONFIG_IA32_EMULATION) += entry_64_compat.o syscall_32.o
+
++CFLAGS_REMOVE_syscall_32.o = $(RAP_PLUGIN_ABS_CFLAGS)
++CFLAGS_REMOVE_syscall_64.o = $(RAP_PLUGIN_ABS_CFLAGS)
diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h
-index 3c71dd9..008b8db 100644
+index e32206e0..809adae 100644
--- a/arch/x86/entry/calling.h
+++ b/arch/x86/entry/calling.h
-@@ -93,23 +93,26 @@ For 32-bit we have the following conventions - kernel is built with
+@@ -95,23 +95,26 @@ For 32-bit we have the following conventions - kernel is built with
.endm
.macro SAVE_C_REGS_HELPER offset=0 rax=1 rcx=1 r8910=1 r11=1
@@ -14563,7 +15576,7 @@ index 3c71dd9..008b8db 100644
.endm
.macro SAVE_C_REGS offset=0
SAVE_C_REGS_HELPER \offset, 1, 1, 1, 1
-@@ -128,67 +131,78 @@ For 32-bit we have the following conventions - kernel is built with
+@@ -130,67 +133,78 @@ For 32-bit we have the following conventions - kernel is built with
.endm
.macro SAVE_EXTRA_REGS offset=0
@@ -14670,7 +15683,7 @@ index 3c71dd9..008b8db 100644
.macro REMOVE_PT_GPREGS_FROM_STACK addskip=0
diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
-index 1a4477c..9bc8a3a 100644
+index 1a4477c..0031513 100644
--- a/arch/x86/entry/common.c
+++ b/arch/x86/entry/common.c
@@ -32,9 +32,7 @@
@@ -14761,7 +15774,60 @@ index 1a4477c..9bc8a3a 100644
/*
* First do one-time work. If these work items are enabled, we
* want to run them exactly once per syscall exit with IRQs on.
-@@ -415,6 +432,7 @@ __visible long do_fast_syscall_32(struct pt_regs *regs)
+@@ -387,10 +404,52 @@ __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs)
+ * the high bits are zero. Make sure we zero-extend all
+ * of the args.
+ */
++#ifdef CONFIG_PAX_RAP
++#ifdef CONFIG_X86_64
++ asm volatile("movl %[param1],%%edi\n\t"
++ "movl %[param2],%%esi\n\t"
++ "movl %[param3],%%edx\n\t"
++ "movl %[param4],%%ecx\n\t"
++ "movl %[param5],%%r8d\n\t"
++ "movl %[param6],%%r9d\n\t"
++ "call *%P[syscall]\n\t"
++ "mov %%rax,%[result]\n\t"
++ : [result] "=m" (regs->ax)
++ : [syscall] "m" (ia32_sys_call_table[nr]),
++ [param1] "m" (regs->bx),
++ [param2] "m" (regs->cx),
++ [param3] "m" (regs->dx),
++ [param4] "m" (regs->si),
++ [param5] "m" (regs->di),
++ [param6] "m" (regs->bp)
++ : "di", "si", "dx", "cx", "r8", "r9", "memory");
++#else
++#error XXX VERIFY
++ asm volatile("pushl %[param6]\n\t"
++ "pushl %[param5]\n\t"
++ "pushl %[param4]\n\t"
++ "pushl %[param3]\n\t"
++ "pushl %[param2]\n\t"
++ "pushl %[param1]\n\t"
++ "call *%P[syscall]\n\t"
++ "addl $6*8,%%esp\n\t"
++ "mov %%eax,%[result]\n\t"
++ : [result] "=m" (regs->ax)
++ : [syscall] "m" (ia32_sys_call_table[nr]),
++ [param1] "m" (regs->bx),
++ [param2] "m" (regs->cx),
++ [param3] "m" (regs->dx),
++ [param4] "m" (regs->si),
++ [param5] "m" (regs->di),
++ [param6] "m" (regs->bp)
++ : "ax", "dx", "cx", "memory");
++#endif
++#else
+ regs->ax = ia32_sys_call_table[nr](
+ (unsigned int)regs->bx, (unsigned int)regs->cx,
+ (unsigned int)regs->dx, (unsigned int)regs->si,
+ (unsigned int)regs->di, (unsigned int)regs->bp);
++#endif
+ }
+
+ syscall_return_slowpath(regs);
+@@ -415,6 +474,7 @@ __visible long do_fast_syscall_32(struct pt_regs *regs)
unsigned long landing_pad = (unsigned long)current->mm->context.vdso +
vdso_image_32.sym_int80_landing_pad;
@@ -14769,7 +15835,7 @@ index 1a4477c..9bc8a3a 100644
/*
* SYSENTER loses EIP, and even SYSCALL32 needs us to skip forward
-@@ -435,11 +453,9 @@ __visible long do_fast_syscall_32(struct pt_regs *regs)
+@@ -435,11 +495,9 @@ __visible long do_fast_syscall_32(struct pt_regs *regs)
* Micro-optimization: the pointer we're following is explicitly
* 32 bits, so it can't be out of range.
*/
@@ -14784,7 +15850,7 @@ index 1a4477c..9bc8a3a 100644
) {
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
-index f3b6d54..d41929e 100644
+index bb3e376..567eb30 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -147,13 +147,157 @@
@@ -15015,7 +16081,7 @@ index f3b6d54..d41929e 100644
#endif
# SYSENTER call handler stub
-@@ -300,6 +461,10 @@ sysenter_past_esp:
+@@ -301,6 +462,10 @@ sysenter_past_esp:
pushl %eax /* pt_regs->orig_ax */
SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */
@@ -15026,7 +16092,7 @@ index f3b6d54..d41929e 100644
/*
* User mode is traced as though IRQs are on, and SYSENTER
* turned them off.
-@@ -312,11 +477,20 @@ sysenter_past_esp:
+@@ -313,11 +478,20 @@ sysenter_past_esp:
ALTERNATIVE "testl %eax, %eax; jz .Lsyscall_32_done", \
"jmp .Lsyscall_32_done", X86_FEATURE_XENPV
@@ -15047,8 +16113,8 @@ index f3b6d54..d41929e 100644
PTGS_TO_GS
popl %ebx /* pt_regs->bx */
addl $2*4, %esp /* skip pt_regs->cx and pt_regs->dx */
-@@ -332,10 +506,16 @@ sysenter_past_esp:
- ENABLE_INTERRUPTS_SYSEXIT
+@@ -334,10 +508,16 @@ sysenter_past_esp:
+ sysexit
.pushsection .fixup, "ax"
-2: movl $0, PT_FS(%esp)
@@ -15066,7 +16132,7 @@ index f3b6d54..d41929e 100644
PTGS_TO_GS_EX
ENDPROC(entry_SYSENTER_32)
-@@ -345,6 +525,10 @@ ENTRY(entry_INT80_32)
+@@ -347,6 +527,10 @@ ENTRY(entry_INT80_32)
pushl %eax /* pt_regs->orig_ax */
SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */
@@ -15077,7 +16143,7 @@ index f3b6d54..d41929e 100644
/*
* User mode is traced as though IRQs are on. Unlike the 64-bit
* case, INT80 is a trap gate on 32-bit kernels, so interrupts
-@@ -355,6 +539,13 @@ ENTRY(entry_INT80_32)
+@@ -357,6 +541,13 @@ ENTRY(entry_INT80_32)
call do_syscall_32_irqs_on
.Lsyscall_32_done:
@@ -15091,7 +16157,7 @@ index f3b6d54..d41929e 100644
restore_all:
TRACE_IRQS_IRET
restore_all_notrace:
-@@ -409,14 +600,34 @@ ldt_ss:
+@@ -411,14 +602,34 @@ ldt_ss:
* compensating for the offset by changing to the ESPFIX segment with
* a base address that matches for the difference.
*/
@@ -15129,7 +16195,7 @@ index f3b6d54..d41929e 100644
pushl $__ESPFIX_SS
pushl %eax /* new kernel esp */
/*
-@@ -440,8 +651,15 @@ ENDPROC(entry_INT80_32)
+@@ -442,8 +653,15 @@ ENDPROC(entry_INT80_32)
*/
#ifdef CONFIG_X86_ESPFIX32
/* fixup the stack */
@@ -15147,7 +16213,7 @@ index f3b6d54..d41929e 100644
shl $16, %eax
addl %esp, %eax /* the adjusted stack pointer */
pushl $__KERNEL_DS
-@@ -477,7 +695,7 @@ ENTRY(irq_entries_start)
+@@ -479,7 +697,7 @@ ENTRY(irq_entries_start)
jmp common_interrupt
.align 8
.endr
@@ -15156,7 +16222,7 @@ index f3b6d54..d41929e 100644
/*
* the CPU automatically disables interrupts when executing an IRQ vector,
-@@ -524,7 +742,7 @@ ENTRY(coprocessor_error)
+@@ -526,7 +744,7 @@ ENTRY(coprocessor_error)
pushl $0
pushl $do_coprocessor_error
jmp error_code
@@ -15165,7 +16231,7 @@ index f3b6d54..d41929e 100644
ENTRY(simd_coprocessor_error)
ASM_CLAC
-@@ -538,25 +756,25 @@ ENTRY(simd_coprocessor_error)
+@@ -540,7 +758,7 @@ ENTRY(simd_coprocessor_error)
pushl $do_simd_coprocessor_error
#endif
jmp error_code
@@ -15174,28 +16240,16 @@ index f3b6d54..d41929e 100644
ENTRY(device_not_available)
ASM_CLAC
- pushl $-1 # mark this as an int
- pushl $do_device_not_available
- jmp error_code
--END(device_not_available)
-+ENDPROC(device_not_available)
-
- #ifdef CONFIG_PARAVIRT
+@@ -553,7 +771,7 @@ END(device_not_available)
ENTRY(native_iret)
iret
_ASM_EXTABLE(native_iret, iret_exc)
-END(native_iret)
+ENDPROC(native_iret)
-
- ENTRY(native_irq_enable_sysexit)
- sti
- sysexit
--END(native_irq_enable_sysexit)
-+ENDPROC(native_irq_enable_sysexit)
#endif
ENTRY(overflow)
-@@ -564,59 +782,59 @@ ENTRY(overflow)
+@@ -561,59 +779,59 @@ ENTRY(overflow)
pushl $0
pushl $do_overflow
jmp error_code
@@ -15264,7 +16318,7 @@ index f3b6d54..d41929e 100644
#ifdef CONFIG_X86_MCE
ENTRY(machine_check)
-@@ -624,7 +842,7 @@ ENTRY(machine_check)
+@@ -621,7 +839,7 @@ ENTRY(machine_check)
pushl $0
pushl machine_check_vector
jmp error_code
@@ -15273,7 +16327,7 @@ index f3b6d54..d41929e 100644
#endif
ENTRY(spurious_interrupt_bug)
-@@ -632,7 +850,7 @@ ENTRY(spurious_interrupt_bug)
+@@ -629,7 +847,7 @@ ENTRY(spurious_interrupt_bug)
pushl $0
pushl $do_spurious_interrupt_bug
jmp error_code
@@ -15282,7 +16336,7 @@ index f3b6d54..d41929e 100644
#ifdef CONFIG_XEN
/*
-@@ -739,7 +957,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
+@@ -736,7 +954,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
ENTRY(mcount)
ret
@@ -15291,7 +16345,7 @@ index f3b6d54..d41929e 100644
ENTRY(ftrace_caller)
pushl %eax
-@@ -769,7 +987,7 @@ ftrace_graph_call:
+@@ -766,7 +984,7 @@ ftrace_graph_call:
.globl ftrace_stub
ftrace_stub:
ret
@@ -15300,7 +16354,7 @@ index f3b6d54..d41929e 100644
ENTRY(ftrace_regs_caller)
pushf /* push flags before compare (in cs location) */
-@@ -867,7 +1085,7 @@ trace:
+@@ -864,7 +1082,7 @@ trace:
popl %ecx
popl %eax
jmp ftrace_stub
@@ -15309,7 +16363,7 @@ index f3b6d54..d41929e 100644
#endif /* CONFIG_DYNAMIC_FTRACE */
#endif /* CONFIG_FUNCTION_TRACER */
-@@ -885,7 +1103,7 @@ ENTRY(ftrace_graph_caller)
+@@ -882,7 +1100,7 @@ ENTRY(ftrace_graph_caller)
popl %ecx
popl %eax
ret
@@ -15318,7 +16372,7 @@ index f3b6d54..d41929e 100644
.globl return_to_handler
return_to_handler:
-@@ -904,7 +1122,7 @@ ENTRY(trace_page_fault)
+@@ -901,7 +1119,7 @@ ENTRY(trace_page_fault)
ASM_CLAC
pushl $trace_do_page_fault
jmp error_code
@@ -15327,7 +16381,7 @@ index f3b6d54..d41929e 100644
#endif
ENTRY(page_fault)
-@@ -933,14 +1151,17 @@ error_code:
+@@ -930,14 +1148,17 @@ error_code:
movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart
REG_TO_PTGS %ecx
SET_KERNEL_GS %ecx
@@ -15347,16 +16401,25 @@ index f3b6d54..d41929e 100644
/*
* Debug traps and NMI can happen at the one SYSENTER instruction
-@@ -978,7 +1199,7 @@ debug_stack_correct:
+@@ -962,7 +1183,7 @@ END(page_fault)
+ pushl $sysenter_past_esp
+ .endm
+
+-ENTRY(debug)
++ENTRY(int1)
+ ASM_CLAC
+ cmpl $entry_SYSENTER_32, (%esp)
+ jne debug_stack_correct
+@@ -975,7 +1196,7 @@ debug_stack_correct:
movl %esp, %eax # pt_regs pointer
call do_debug
jmp ret_from_exception
-END(debug)
-+ENDPROC(debug)
++ENDPROC(int1)
/*
* NMI is doubly nasty. It can happen _while_ we're handling
-@@ -1017,6 +1238,9 @@ nmi_stack_correct:
+@@ -1014,6 +1235,9 @@ nmi_stack_correct:
xorl %edx, %edx # zero error code
movl %esp, %eax # pt_regs pointer
call do_nmi
@@ -15366,7 +16429,16 @@ index f3b6d54..d41929e 100644
jmp restore_all_notrace
nmi_stack_fixup:
-@@ -1050,11 +1274,14 @@ nmi_espfix_stack:
+@@ -1023,7 +1247,7 @@ nmi_stack_fixup:
+ nmi_debug_stack_check:
+ cmpw $__KERNEL_CS, 16(%esp)
+ jne nmi_stack_correct
+- cmpl $debug, (%esp)
++ cmpl $int1, (%esp)
+ jb nmi_stack_correct
+ cmpl $debug_esp_fix_insn, (%esp)
+ ja nmi_stack_correct
+@@ -1047,11 +1271,14 @@ nmi_espfix_stack:
FIXUP_ESPFIX_STACK # %eax == %esp
xorl %edx, %edx # zero error code
call do_nmi
@@ -15382,7 +16454,7 @@ index f3b6d54..d41929e 100644
ENTRY(int3)
ASM_CLAC
-@@ -1065,17 +1292,17 @@ ENTRY(int3)
+@@ -1062,17 +1289,17 @@ ENTRY(int3)
movl %esp, %eax # pt_regs pointer
call do_int3
jmp ret_from_exception
@@ -15404,7 +16476,7 @@ index f3b6d54..d41929e 100644
+ENDPROC(async_page_fault)
#endif
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
-index a55697d..66473ae 100644
+index 9d34d3c..2398c40 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -36,6 +36,8 @@
@@ -16012,9 +17084,9 @@ index a55697d..66473ae 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
-@@ -524,7 +951,9 @@ END(irq_entries_start)
- call enter_from_user_mode
- #endif
+@@ -522,7 +949,9 @@ END(irq_entries_start)
+
+ CALL_enter_from_user_mode
-1:
+ jmp 2f
@@ -16023,7 +17095,7 @@ index a55697d..66473ae 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
-@@ -536,6 +965,7 @@ END(irq_entries_start)
+@@ -534,6 +963,7 @@ END(irq_entries_start)
incl PER_CPU_VAR(irq_count)
cmovzq PER_CPU_VAR(irq_stack_ptr), %rsp
pushq %rdi
@@ -16031,7 +17103,7 @@ index a55697d..66473ae 100644
/* We entered an interrupt context - irqs are off: */
TRACE_IRQS_OFF
-@@ -567,6 +997,8 @@ ret_from_intr:
+@@ -565,6 +995,8 @@ ret_from_intr:
GLOBAL(retint_user)
mov %rsp,%rdi
call prepare_exit_to_usermode
@@ -16040,7 +17112,7 @@ index a55697d..66473ae 100644
TRACE_IRQS_IRETQ
SWAPGS
jmp restore_regs_and_iret
-@@ -584,6 +1016,21 @@ retint_kernel:
+@@ -582,6 +1014,21 @@ retint_kernel:
jmp 0b
1:
#endif
@@ -16062,7 +17134,7 @@ index a55697d..66473ae 100644
/*
* The iretq could re-enable interrupts:
*/
-@@ -627,15 +1074,15 @@ native_irq_return_ldt:
+@@ -625,15 +1072,15 @@ native_irq_return_ldt:
SWAPGS
movq PER_CPU_VAR(espfix_waddr), %rdi
movq %rax, (0*8)(%rdi) /* RAX */
@@ -16083,7 +17155,7 @@ index a55697d..66473ae 100644
movq %rax, (4*8)(%rdi)
andl $0xffff0000, %eax
popq %rdi
-@@ -645,7 +1092,7 @@ native_irq_return_ldt:
+@@ -643,7 +1090,7 @@ native_irq_return_ldt:
popq %rax
jmp native_irq_return_iret
#endif
@@ -16092,7 +17164,7 @@ index a55697d..66473ae 100644
/*
* APIC interrupts.
-@@ -657,7 +1104,7 @@ ENTRY(\sym)
+@@ -655,7 +1102,7 @@ ENTRY(\sym)
.Lcommon_\sym:
interrupt \do_sym
jmp ret_from_intr
@@ -16101,7 +17173,7 @@ index a55697d..66473ae 100644
.endm
#ifdef CONFIG_TRACING
-@@ -722,7 +1169,7 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt
+@@ -720,7 +1167,7 @@ apicinterrupt IRQ_WORK_VECTOR irq_work_interrupt smp_irq_work_interrupt
/*
* Exception entry points.
*/
@@ -16110,7 +17182,7 @@ index a55697d..66473ae 100644
.macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
ENTRY(\sym)
-@@ -769,6 +1216,12 @@ ENTRY(\sym)
+@@ -767,6 +1214,12 @@ ENTRY(\sym)
.endif
.if \shift_ist != -1
@@ -16123,7 +17195,7 @@ index a55697d..66473ae 100644
subq $EXCEPTION_STKSZ, CPU_TSS_IST(\shift_ist)
.endif
-@@ -812,7 +1265,7 @@ ENTRY(\sym)
+@@ -810,7 +1263,7 @@ ENTRY(\sym)
jmp error_exit /* %ebx: no swapgs flag */
.endif
@@ -16132,7 +17204,7 @@ index a55697d..66473ae 100644
.endm
#ifdef CONFIG_TRACING
-@@ -854,8 +1307,9 @@ gs_change:
+@@ -852,8 +1305,9 @@ gs_change:
2: mfence /* workaround */
SWAPGS
popfq
@@ -16143,7 +17215,7 @@ index a55697d..66473ae 100644
_ASM_EXTABLE(gs_change, bad_gs)
.section .fixup, "ax"
-@@ -877,8 +1331,9 @@ ENTRY(do_softirq_own_stack)
+@@ -875,8 +1329,9 @@ ENTRY(do_softirq_own_stack)
call __do_softirq
leaveq
decl PER_CPU_VAR(irq_count)
@@ -16154,7 +17226,7 @@ index a55697d..66473ae 100644
#ifdef CONFIG_XEN
idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
-@@ -914,7 +1369,7 @@ ENTRY(xen_do_hypervisor_callback) /* do_hypervisor_callback(struct *pt_regs) */
+@@ -912,7 +1367,7 @@ ENTRY(xen_do_hypervisor_callback) /* do_hypervisor_callback(struct *pt_regs) */
call xen_maybe_preempt_hcall
#endif
jmp error_exit
@@ -16163,7 +17235,7 @@ index a55697d..66473ae 100644
/*
* Hypervisor uses this for application faults while it executes.
-@@ -959,7 +1414,7 @@ ENTRY(xen_failsafe_callback)
+@@ -957,7 +1412,7 @@ ENTRY(xen_failsafe_callback)
SAVE_C_REGS
SAVE_EXTRA_REGS
jmp error_exit
@@ -16172,7 +17244,16 @@ index a55697d..66473ae 100644
apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
xen_hvm_callback_vector xen_evtchn_do_upcall
-@@ -1008,8 +1463,34 @@ ENTRY(paranoid_entry)
+@@ -969,7 +1424,7 @@ apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
+ hyperv_callback_vector hyperv_vector_handler
+ #endif /* CONFIG_HYPERV */
+
+-idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
++idtentry int1 do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
+ idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
+ idtentry stack_segment do_stack_segment has_error_code=1
+
+@@ -1006,8 +1461,34 @@ ENTRY(paranoid_entry)
js 1f /* negative -> in kernel */
SWAPGS
xorl %ebx, %ebx
@@ -16209,7 +17290,7 @@ index a55697d..66473ae 100644
/*
* "Paranoid" exit path from exception stack. This is invoked
-@@ -1026,19 +1507,26 @@ END(paranoid_entry)
+@@ -1024,19 +1505,26 @@ END(paranoid_entry)
ENTRY(paranoid_exit)
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF_DEBUG
@@ -16238,7 +17319,7 @@ index a55697d..66473ae 100644
/*
* Save all registers in pt_regs, and switch gs if needed.
-@@ -1052,13 +1540,18 @@ ENTRY(error_entry)
+@@ -1050,13 +1538,18 @@ ENTRY(error_entry)
testb $3, CS+8(%rsp)
jz .Lerror_kernelspace
@@ -16258,10 +17339,10 @@ index a55697d..66473ae 100644
.Lerror_entry_from_usermode_after_swapgs:
/*
* We need to tell lockdep that IRQs are off. We can't do this until
-@@ -1069,10 +1562,12 @@ ENTRY(error_entry)
- #ifdef CONFIG_CONTEXT_TRACKING
- call enter_from_user_mode
- #endif
+@@ -1065,10 +1558,12 @@ ENTRY(error_entry)
+ */
+ TRACE_IRQS_OFF
+ CALL_enter_from_user_mode
+ pax_force_retaddr
ret
@@ -16271,7 +17352,7 @@ index a55697d..66473ae 100644
ret
/*
-@@ -1090,14 +1585,16 @@ ENTRY(error_entry)
+@@ -1086,14 +1581,16 @@ ENTRY(error_entry)
cmpq %rax, RIP+8(%rsp)
je .Lbstep_iret
cmpq $gs_change, RIP+8(%rsp)
@@ -16290,7 +17371,7 @@ index a55697d..66473ae 100644
.Lbstep_iret:
/* Fix truncated RIP */
-@@ -1111,6 +1608,12 @@ ENTRY(error_entry)
+@@ -1107,6 +1604,12 @@ ENTRY(error_entry)
*/
SWAPGS
@@ -16303,7 +17384,7 @@ index a55697d..66473ae 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
-@@ -1121,11 +1624,11 @@ ENTRY(error_entry)
+@@ -1117,11 +1620,11 @@ ENTRY(error_entry)
mov %rax, %rsp
decl %ebx
jmp .Lerror_entry_from_usermode_after_swapgs
@@ -16317,7 +17398,7 @@ index a55697d..66473ae 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
*/
-@@ -1133,10 +1636,10 @@ ENTRY(error_exit)
+@@ -1129,10 +1632,10 @@ ENTRY(error_exit)
movl %ebx, %eax
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF
@@ -16330,7 +17411,7 @@ index a55697d..66473ae 100644
/* Runs on exception stack */
ENTRY(nmi)
-@@ -1190,6 +1693,8 @@ ENTRY(nmi)
+@@ -1186,6 +1689,8 @@ ENTRY(nmi)
* other IST entries.
*/
@@ -16339,7 +17420,7 @@ index a55697d..66473ae 100644
/* Use %rdx as our temp variable throughout */
pushq %rdx
-@@ -1233,6 +1738,12 @@ ENTRY(nmi)
+@@ -1229,6 +1734,12 @@ ENTRY(nmi)
pushq %r14 /* pt_regs->r14 */
pushq %r15 /* pt_regs->r15 */
@@ -16352,7 +17433,7 @@ index a55697d..66473ae 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
-@@ -1243,12 +1754,19 @@ ENTRY(nmi)
+@@ -1239,12 +1750,19 @@ ENTRY(nmi)
movq $-1, %rsi
call do_nmi
@@ -16372,7 +17453,7 @@ index a55697d..66473ae 100644
jmp restore_c_regs_and_iret
.Lnmi_from_kernel:
-@@ -1370,6 +1888,7 @@ nested_nmi_out:
+@@ -1366,6 +1884,7 @@ nested_nmi_out:
popq %rdx
/* We are returning to kernel mode, so this cannot result in a fault. */
@@ -16380,7 +17461,7 @@ index a55697d..66473ae 100644
INTERRUPT_RETURN
first_nmi:
-@@ -1398,7 +1917,7 @@ first_nmi:
+@@ -1394,7 +1913,7 @@ first_nmi:
pushq %rsp /* RSP (minus 8 because of the previous push) */
addq $8, (%rsp) /* Fix up RSP */
pushfq /* RFLAGS */
@@ -16389,7 +17470,7 @@ index a55697d..66473ae 100644
pushq $1f /* RIP */
INTERRUPT_RETURN /* continues at repeat_nmi below */
1:
-@@ -1443,20 +1962,22 @@ end_repeat_nmi:
+@@ -1439,20 +1958,22 @@ end_repeat_nmi:
ALLOC_PT_GPREGS_ON_STACK
/*
@@ -16415,7 +17496,7 @@ index a55697d..66473ae 100644
jnz nmi_restore
nmi_swapgs:
SWAPGS_UNSAFE_STACK
-@@ -1467,6 +1988,8 @@ nmi_restore:
+@@ -1463,6 +1984,8 @@ nmi_restore:
/* Point RSP at the "iret" frame. */
REMOVE_PT_GPREGS_FROM_STACK 6*8
@@ -16424,7 +17505,7 @@ index a55697d..66473ae 100644
/*
* Clear "NMI executing". Set DF first so that we can easily
* distinguish the remaining code between here and IRET from
-@@ -1484,9 +2007,9 @@ nmi_restore:
+@@ -1480,9 +2003,9 @@ nmi_restore:
* mode, so this cannot result in a fault.
*/
INTERRUPT_RETURN
@@ -16437,10 +17518,10 @@ index a55697d..66473ae 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 15cfeba..da22a57 100644
+index 3c990ee..d49c8f4 100644
--- a/arch/x86/entry/entry_64_compat.S
+++ b/arch/x86/entry/entry_64_compat.S
-@@ -13,8 +13,10 @@
+@@ -13,11 +13,39 @@
#include <asm/irqflags.h>
#include <asm/asm.h>
#include <asm/smap.h>
@@ -16451,10 +17532,6 @@ index 15cfeba..da22a57 100644
.section .entry.text, "ax"
-@@ -25,6 +27,32 @@ ENTRY(native_usergs_sysret32)
- ENDPROC(native_usergs_sysret32)
- #endif
-
+ .macro pax_enter_kernel_user
+ pax_set_fptr_mask
+#ifdef CONFIG_PAX_MEMORY_UDEREF
@@ -16484,7 +17561,7 @@ index 15cfeba..da22a57 100644
/*
* 32-bit SYSENTER instruction entry.
*
-@@ -76,26 +104,36 @@ ENTRY(entry_SYSENTER_compat)
+@@ -69,26 +97,36 @@ ENTRY(entry_SYSENTER_compat)
ASM_CLAC /* Clear AC after saving FLAGS */
pushq $__USER32_CS /* pt_regs->cs */
@@ -16531,7 +17608,7 @@ index 15cfeba..da22a57 100644
/*
* Sysenter doesn't filter flags, so we need to clear NT
* ourselves. To save a few cycles, we can check whether
-@@ -181,17 +219,27 @@ ENTRY(entry_SYSCALL_compat)
+@@ -174,17 +212,27 @@ ENTRY(entry_SYSCALL_compat)
pushq %rdx /* pt_regs->dx */
pushq %rbp /* pt_regs->cx (stashed in bp) */
pushq $-ENOSYS /* pt_regs->ax */
@@ -16568,7 +17645,7 @@ index 15cfeba..da22a57 100644
/*
* User mode is traced as though IRQs are on, and SYSENTER
-@@ -207,11 +255,18 @@ ENTRY(entry_SYSCALL_compat)
+@@ -200,11 +248,18 @@ ENTRY(entry_SYSCALL_compat)
/* Opportunistic SYSRET */
sysret32_from_system_call:
@@ -16587,16 +17664,16 @@ index 15cfeba..da22a57 100644
addq $RAX, %rsp /* Skip r8-r15 */
popq %rax /* pt_regs->rax */
popq %rdx /* Skip pt_regs->cx */
-@@ -239,7 +294,7 @@ sysret32_from_system_call:
- xorq %r10, %r10
+@@ -233,7 +288,7 @@ sysret32_from_system_call:
movq RSP-ORIG_RAX(%rsp), %rsp
- USERGS_SYSRET32
+ swapgs
+ sysretl
-END(entry_SYSCALL_compat)
+ENDPROC(entry_SYSCALL_compat)
/*
* Emulated IA32 system calls via int 0x80.
-@@ -286,11 +341,11 @@ ENTRY(entry_INT80_compat)
+@@ -280,11 +335,11 @@ ENTRY(entry_INT80_compat)
pushq %rdx /* pt_regs->dx */
pushq %rcx /* pt_regs->cx */
pushq $-ENOSYS /* pt_regs->ax */
@@ -16613,7 +17690,7 @@ index 15cfeba..da22a57 100644
pushq %rbx /* pt_regs->rbx */
pushq %rbp /* pt_regs->rbp */
pushq %r12 /* pt_regs->r12 */
-@@ -299,6 +354,12 @@ ENTRY(entry_INT80_compat)
+@@ -293,6 +348,12 @@ ENTRY(entry_INT80_compat)
pushq %r15 /* pt_regs->r15 */
cld
@@ -16626,7 +17703,7 @@ index 15cfeba..da22a57 100644
/*
* User mode is traced as though IRQs are on, and the interrupt
* gate turned them off.
-@@ -310,10 +371,12 @@ ENTRY(entry_INT80_compat)
+@@ -304,10 +365,12 @@ ENTRY(entry_INT80_compat)
.Lsyscall_32_done:
/* Go back to user mode. */
@@ -16661,10 +17738,10 @@ index efb2b93..8a9cb8e 100644
_ASM_NOKPROBE(restore)
#endif
diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile
-index 265c0ed..a706eb9 100644
+index c854541..1786538 100644
--- a/arch/x86/entry/vdso/Makefile
+++ b/arch/x86/entry/vdso/Makefile
-@@ -69,7 +69,7 @@ CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \
+@@ -70,7 +70,7 @@ CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \
-fno-omit-frame-pointer -foptimize-sibling-calls \
-DDISABLE_BRANCH_PROFILING -DBUILD_VDSO
@@ -16673,7 +17750,7 @@ index 265c0ed..a706eb9 100644
#
# vDSO code runs in userspace and -pg doesn't help with profiling anyway.
-@@ -139,6 +139,7 @@ KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS))
+@@ -140,6 +140,7 @@ KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS))
KBUILD_CFLAGS_32 := $(filter-out -mcmodel=kernel,$(KBUILD_CFLAGS_32))
KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32))
KBUILD_CFLAGS_32 := $(filter-out -mfentry,$(KBUILD_CFLAGS_32))
@@ -16681,7 +17758,7 @@ index 265c0ed..a706eb9 100644
KBUILD_CFLAGS_32 += -m32 -msoft-float -mregparm=0 -fpic
KBUILD_CFLAGS_32 += $(call cc-option, -fno-stack-protector)
KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls)
-@@ -162,7 +163,7 @@ quiet_cmd_vdso = VDSO $@
+@@ -163,7 +164,7 @@ quiet_cmd_vdso = VDSO $@
-Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \
sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@'
@@ -16690,6 +17767,17 @@ index 265c0ed..a706eb9 100644
$(call cc-ldoption, -Wl$(comma)--build-id) -Wl,-Bsymbolic $(LTO_CFLAGS)
GCOV_PROFILE := n
+diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c
+index 1a50e09..3e25e7a 100644
+--- 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)
+ *t = result;
+ return result;
+ }
+-int time(time_t *t)
++time_t time(time_t *t)
+ __attribute__((weak, alias("__vdso_time")));
diff --git a/arch/x86/entry/vdso/vdso2c.h b/arch/x86/entry/vdso/vdso2c.h
index 0224987..0359810 100644
--- a/arch/x86/entry/vdso/vdso2c.h
@@ -16731,10 +17819,10 @@ index 0224987..0359810 100644
fprintf(outfile, "const struct vdso_image %s = {\n", name);
diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c
-index 64df471..8346804 100644
+index b8f69e2..2489643 100644
--- a/arch/x86/entry/vdso/vma.c
+++ b/arch/x86/entry/vdso/vma.c
-@@ -19,10 +19,7 @@
+@@ -20,10 +20,7 @@
#include <asm/page.h>
#include <asm/hpet.h>
#include <asm/desc.h>
@@ -16746,9 +17834,9 @@ index 64df471..8346804 100644
void __init init_vdso_image(const struct vdso_image *image)
{
-@@ -101,6 +98,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
- .pages = no_pages,
+@@ -103,6 +100,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
};
+ struct pvclock_vsyscall_time_info *pvti;
+#ifdef CONFIG_PAX_RANDMMAP
+ if (mm->pax_flags & MF_PAX_RANDMMAP)
@@ -16758,7 +17846,7 @@ index 64df471..8346804 100644
if (calculate_addr) {
addr = vdso_addr(current->mm->start_stack,
image->size - image->sym_vvar_start);
-@@ -111,14 +113,14 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
+@@ -113,14 +115,14 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
down_write(&mm->mmap_sem);
addr = get_unmapped_area(NULL, addr,
@@ -16775,15 +17863,14 @@ index 64df471..8346804 100644
/*
* MAYWRITE to allow gdb to COW and set breakpoints
-@@ -163,15 +165,12 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
- hpet_address >> PAGE_SHIFT,
- PAGE_SIZE,
- pgprot_noncached(PAGE_READONLY));
+@@ -178,14 +180,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr)
+ __pa(pvti) >> PAGE_SHIFT,
+ PAGE_SIZE,
+ PAGE_READONLY);
-
- if (ret)
- goto up_fail;
}
- #endif
up_fail:
if (ret)
@@ -16792,7 +17879,7 @@ index 64df471..8346804 100644
up_write(&mm->mmap_sem);
return ret;
-@@ -190,9 +189,6 @@ static int load_vdso32(void)
+@@ -204,9 +203,6 @@ static int load_vdso32(void)
#ifdef CONFIG_X86_64
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{
@@ -16802,7 +17889,7 @@ index 64df471..8346804 100644
return map_vdso(&vdso_image_64, true);
}
-@@ -201,12 +197,8 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm,
+@@ -215,12 +211,8 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm,
int uses_interp)
{
#ifdef CONFIG_X86_X32_ABI
@@ -16816,7 +17903,7 @@ index 64df471..8346804 100644
#endif
#ifdef CONFIG_IA32_EMULATION
return load_vdso32();
-@@ -223,15 +215,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
+@@ -237,15 +229,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
#endif
#ifdef CONFIG_X86_64
@@ -17179,10 +18266,10 @@ index 7bfc85b..65d1ec4 100644
ALTINSTR_REPLACEMENT(newinstr2, feature2, 2) \
".popsection"
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
-index 163769d..d41133e 100644
+index e8c4fba..8d42c8c 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
-@@ -45,7 +45,7 @@ static inline void generic_apic_probe(void)
+@@ -50,7 +50,7 @@ static inline void generic_apic_probe(void)
#ifdef CONFIG_X86_LOCAL_APIC
@@ -17214,10 +18301,10 @@ index 20370c6..a2eb9b0 100644
"popl %%ebp\n\t"
"popl %%edi\n\t"
diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h
-index ae5fb83..f6a093d 100644
+index 3e86742..1b19554 100644
--- a/arch/x86/include/asm/atomic.h
+++ b/arch/x86/include/asm/atomic.h
-@@ -28,6 +28,17 @@ static __always_inline int atomic_read(const atomic_t *v)
+@@ -27,6 +27,17 @@ static __always_inline int atomic_read(const atomic_t *v)
}
/**
@@ -17235,7 +18322,7 @@ index ae5fb83..f6a093d 100644
* atomic_set - set atomic variable
* @v: pointer of type atomic_t
* @i: required value
-@@ -40,6 +51,18 @@ static __always_inline void atomic_set(atomic_t *v, int i)
+@@ -39,6 +50,18 @@ static __always_inline void atomic_set(atomic_t *v, int i)
}
/**
@@ -17254,7 +18341,7 @@ index ae5fb83..f6a093d 100644
* atomic_add - add integer to atomic variable
* @i: integer value to add
* @v: pointer of type atomic_t
-@@ -48,7 +71,29 @@ static __always_inline void atomic_set(atomic_t *v, int i)
+@@ -47,7 +70,29 @@ static __always_inline void atomic_set(atomic_t *v, int i)
*/
static __always_inline void atomic_add(int i, atomic_t *v)
{
@@ -17285,7 +18372,7 @@ index ae5fb83..f6a093d 100644
: "+m" (v->counter)
: "ir" (i));
}
-@@ -62,7 +107,29 @@ static __always_inline void atomic_add(int i, atomic_t *v)
+@@ -61,7 +106,29 @@ static __always_inline void atomic_add(int i, atomic_t *v)
*/
static __always_inline void atomic_sub(int i, atomic_t *v)
{
@@ -17316,7 +18403,7 @@ index ae5fb83..f6a093d 100644
: "+m" (v->counter)
: "ir" (i));
}
-@@ -78,7 +145,7 @@ static __always_inline void atomic_sub(int i, atomic_t *v)
+@@ -77,7 +144,7 @@ static __always_inline void atomic_sub(int i, atomic_t *v)
*/
static __always_inline int atomic_sub_and_test(int i, atomic_t *v)
{
@@ -17325,7 +18412,7 @@ index ae5fb83..f6a093d 100644
}
/**
-@@ -89,7 +156,27 @@ static __always_inline int atomic_sub_and_test(int i, atomic_t *v)
+@@ -88,7 +155,27 @@ static __always_inline int atomic_sub_and_test(int i, atomic_t *v)
*/
static __always_inline void atomic_inc(atomic_t *v)
{
@@ -17354,7 +18441,7 @@ index ae5fb83..f6a093d 100644
: "+m" (v->counter));
}
-@@ -101,7 +188,27 @@ static __always_inline void atomic_inc(atomic_t *v)
+@@ -100,7 +187,27 @@ static __always_inline void atomic_inc(atomic_t *v)
*/
static __always_inline void atomic_dec(atomic_t *v)
{
@@ -17383,7 +18470,7 @@ index ae5fb83..f6a093d 100644
: "+m" (v->counter));
}
-@@ -115,7 +222,7 @@ static __always_inline void atomic_dec(atomic_t *v)
+@@ -114,7 +221,7 @@ static __always_inline void atomic_dec(atomic_t *v)
*/
static __always_inline int atomic_dec_and_test(atomic_t *v)
{
@@ -17392,7 +18479,7 @@ index ae5fb83..f6a093d 100644
}
/**
-@@ -128,7 +235,20 @@ static __always_inline int atomic_dec_and_test(atomic_t *v)
+@@ -127,7 +234,20 @@ static __always_inline int atomic_dec_and_test(atomic_t *v)
*/
static __always_inline int atomic_inc_and_test(atomic_t *v)
{
@@ -17414,7 +18501,7 @@ index ae5fb83..f6a093d 100644
}
/**
-@@ -142,7 +262,7 @@ static __always_inline int atomic_inc_and_test(atomic_t *v)
+@@ -141,7 +261,7 @@ static __always_inline int atomic_inc_and_test(atomic_t *v)
*/
static __always_inline int atomic_add_negative(int i, atomic_t *v)
{
@@ -17423,7 +18510,7 @@ index ae5fb83..f6a093d 100644
}
/**
-@@ -152,7 +272,19 @@ static __always_inline int atomic_add_negative(int i, atomic_t *v)
+@@ -151,7 +271,19 @@ static __always_inline int atomic_add_negative(int i, atomic_t *v)
*
* Atomically adds @i to @v and returns @i + @v
*/
@@ -17444,7 +18531,7 @@ index ae5fb83..f6a093d 100644
{
return i + xadd(&v->counter, i);
}
-@@ -164,15 +296,24 @@ static __always_inline int atomic_add_return(int i, atomic_t *v)
+@@ -163,15 +295,24 @@ static __always_inline int atomic_add_return(int i, atomic_t *v)
*
* Atomically subtracts @i from @v and returns @v - @i
*/
@@ -17471,7 +18558,7 @@ index ae5fb83..f6a093d 100644
{
return cmpxchg(&v->counter, old, new);
}
-@@ -182,6 +323,11 @@ static inline int atomic_xchg(atomic_t *v, int new)
+@@ -181,6 +322,11 @@ static inline int atomic_xchg(atomic_t *v, int new)
return xchg(&v->counter, new);
}
@@ -17483,7 +18570,7 @@ index ae5fb83..f6a093d 100644
#define ATOMIC_OP(op) \
static inline void atomic_##op(int i, atomic_t *v) \
{ \
-@@ -208,12 +354,25 @@ ATOMIC_OP(xor)
+@@ -207,12 +353,25 @@ ATOMIC_OP(xor)
*/
static __always_inline int __atomic_add_unless(atomic_t *v, int a, int u)
{
@@ -17512,7 +18599,7 @@ index ae5fb83..f6a093d 100644
if (likely(old == c))
break;
c = old;
-@@ -222,6 +381,49 @@ static __always_inline int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -221,6 +380,49 @@ static __always_inline int __atomic_add_unless(atomic_t *v, int a, int u)
}
/**
@@ -17563,10 +18650,10 @@ index ae5fb83..f6a093d 100644
* @v: pointer to type int
*
diff --git a/arch/x86/include/asm/atomic64_32.h b/arch/x86/include/asm/atomic64_32.h
-index a11c30b..66fd8a0 100644
+index a984111..9c1ae68 100644
--- a/arch/x86/include/asm/atomic64_32.h
+++ b/arch/x86/include/asm/atomic64_32.h
-@@ -12,6 +12,14 @@ typedef struct {
+@@ -11,6 +11,14 @@ typedef struct {
u64 __aligned(8) counter;
} atomic64_t;
@@ -17581,7 +18668,7 @@ index a11c30b..66fd8a0 100644
#define ATOMIC64_INIT(val) { (val) }
#define __ATOMIC64_DECL(sym) void atomic64_##sym(atomic64_t *, ...)
-@@ -37,21 +45,31 @@ typedef struct {
+@@ -36,21 +44,31 @@ typedef struct {
ATOMIC64_DECL_ONE(sym##_386)
ATOMIC64_DECL_ONE(add_386);
@@ -17613,7 +18700,7 @@ index a11c30b..66fd8a0 100644
ATOMIC64_DECL(dec_if_positive);
ATOMIC64_DECL(inc_not_zero);
ATOMIC64_DECL(add_unless);
-@@ -77,6 +95,21 @@ static inline long long atomic64_cmpxchg(atomic64_t *v, long long o, long long n
+@@ -76,6 +94,21 @@ static inline long long atomic64_cmpxchg(atomic64_t *v, long long o, long long n
}
/**
@@ -17635,7 +18722,7 @@ index a11c30b..66fd8a0 100644
* atomic64_xchg - xchg atomic64 variable
* @v: pointer to type atomic64_t
* @n: value to assign
-@@ -112,6 +145,22 @@ static inline void atomic64_set(atomic64_t *v, long long i)
+@@ -111,6 +144,22 @@ static inline void atomic64_set(atomic64_t *v, long long i)
}
/**
@@ -17658,7 +18745,7 @@ index a11c30b..66fd8a0 100644
* atomic64_read - read atomic64 variable
* @v: pointer to type atomic64_t
*
-@@ -125,6 +174,19 @@ static inline long long atomic64_read(const atomic64_t *v)
+@@ -124,6 +173,19 @@ static inline long long atomic64_read(const atomic64_t *v)
}
/**
@@ -17678,7 +18765,7 @@ index a11c30b..66fd8a0 100644
* atomic64_add_return - add and return
* @i: integer value to add
* @v: pointer to type atomic64_t
-@@ -139,6 +201,21 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v)
+@@ -138,6 +200,21 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v)
return i;
}
@@ -17700,7 +18787,7 @@ index a11c30b..66fd8a0 100644
/*
* Other variants with different arithmetic operators:
*/
-@@ -158,6 +235,14 @@ static inline long long atomic64_inc_return(atomic64_t *v)
+@@ -157,6 +234,14 @@ static inline long long atomic64_inc_return(atomic64_t *v)
return a;
}
@@ -17715,7 +18802,7 @@ index a11c30b..66fd8a0 100644
static inline long long atomic64_dec_return(atomic64_t *v)
{
long long a;
-@@ -182,6 +267,21 @@ static inline long long atomic64_add(long long i, atomic64_t *v)
+@@ -181,6 +266,21 @@ static inline long long atomic64_add(long long i, atomic64_t *v)
}
/**
@@ -18248,11 +19335,11 @@ index acdee09..e5c31cd 100644
struct compat_timespec {
compat_time_t tv_sec;
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
-index f7ba9fb..d3945be 100644
+index 7ad8c94..00a0aa3 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
-@@ -217,7 +217,8 @@
- #define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */
+@@ -203,7 +203,8 @@
+
#define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */
#define X86_FEATURE_XENPV ( 8*32+16) /* "" Xen paravirtual guest */
-
@@ -18261,7 +19348,7 @@ index f7ba9fb..d3945be 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*/
-@@ -225,7 +226,7 @@
+@@ -211,7 +212,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 */
@@ -18270,7 +19357,7 @@ index f7ba9fb..d3945be 100644
#define X86_FEATURE_BMI2 ( 9*32+ 8) /* 2nd group bit manipulation extensions */
#define X86_FEATURE_ERMS ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */
#define X86_FEATURE_INVPCID ( 9*32+10) /* Invalidate Processor Context ID */
-@@ -461,7 +462,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+@@ -462,7 +463,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
#ifdef CONFIG_X86_DEBUG_STATIC_CPU_HAS
t_warn:
@@ -18280,7 +19367,7 @@ index f7ba9fb..d3945be 100644
return false;
#endif
-@@ -482,7 +484,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+@@ -483,7 +485,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
".section .discard,\"aw\",@progbits\n"
" .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
".previous\n"
@@ -18289,7 +19376,7 @@ index f7ba9fb..d3945be 100644
"3: movb $1,%0\n"
"4:\n"
".previous\n"
-@@ -517,7 +519,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -518,7 +520,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
" .byte 5f - 4f\n" /* repl len */
" .byte 3b - 2b\n" /* pad len */
".previous\n"
@@ -18298,7 +19385,7 @@ index f7ba9fb..d3945be 100644
"4: jmp %l[t_no]\n"
"5:\n"
".previous\n"
-@@ -552,7 +554,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -553,7 +555,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
".section .discard,\"aw\",@progbits\n"
" .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
".previous\n"
@@ -18307,7 +19394,7 @@ index f7ba9fb..d3945be 100644
"3: movb $0,%0\n"
"4:\n"
".previous\n"
-@@ -567,7 +569,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -568,7 +570,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
".section .discard,\"aw\",@progbits\n"
" .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */
".previous\n"
@@ -18316,6 +19403,208 @@ index f7ba9fb..d3945be 100644
"5: movb $1,%0\n"
"6:\n"
".previous\n"
+diff --git a/arch/x86/include/asm/crypto/camellia.h b/arch/x86/include/asm/crypto/camellia.h
+index bb93333..e3d3d57 100644
+--- a/arch/x86/include/asm/crypto/camellia.h
++++ b/arch/x86/include/asm/crypto/camellia.h
+@@ -39,34 +39,35 @@ extern int xts_camellia_setkey(struct crypto_tfm *tfm, const u8 *key,
+ /* regular block cipher functions */
+ asmlinkage void __camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst,
+ const u8 *src, bool xor);
+-asmlinkage void camellia_dec_blk(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_dec_blk(void *ctx, u8 *dst,
+ const u8 *src);
+
+ /* 2-way parallel cipher functions */
+ asmlinkage void __camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst,
+ const u8 *src, bool xor);
+-asmlinkage void camellia_dec_blk_2way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_dec_blk_2way(void *ctx, u8 *dst,
+ const u8 *src);
+
+ /* 16-way parallel cipher functions (avx/aes-ni) */
+-asmlinkage void camellia_ecb_enc_16way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_ecb_enc_16way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void camellia_ecb_dec_16way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_ecb_dec_16way(void *ctx, u8 *dst,
+ const u8 *src);
+
+-asmlinkage void camellia_cbc_dec_16way(struct camellia_ctx *ctx, u8 *dst,
++asmlinkage void camellia_cbc_dec_16way(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void camellia_ctr_16way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void camellia_ctr_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+-asmlinkage void camellia_xts_enc_16way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
+-asmlinkage void camellia_xts_dec_16way(struct camellia_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void camellia_xts_enc_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
++asmlinkage void camellia_xts_dec_16way(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+-static inline void camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst,
++static inline void camellia_enc_blk(void *_ctx, u8 *dst,
+ const u8 *src)
+ {
++ struct camellia_ctx *ctx = _ctx;
+ __camellia_enc_blk(ctx, dst, src, false);
+ }
+
+@@ -76,9 +77,10 @@ static inline void camellia_enc_blk_xor(struct camellia_ctx *ctx, u8 *dst,
+ __camellia_enc_blk(ctx, dst, src, true);
+ }
+
+-static inline void camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst,
++static inline void camellia_enc_blk_2way(void *_ctx, u8 *dst,
+ const u8 *src)
+ {
++ struct camellia_ctx *ctx = _ctx;
+ __camellia_enc_blk_2way(ctx, dst, src, false);
+ }
+
+@@ -89,7 +91,7 @@ static inline void camellia_enc_blk_xor_2way(struct camellia_ctx *ctx, u8 *dst,
+ }
+
+ /* glue helpers */
+-extern void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src);
++extern void camellia_decrypt_cbc_2way(void *ctx, u8 *dst, const u8 *src);
+ extern void camellia_crypt_ctr(void *ctx, u128 *dst, const u128 *src,
+ le128 *iv);
+ extern void camellia_crypt_ctr_2way(void *ctx, u128 *dst, const u128 *src,
+diff --git a/arch/x86/include/asm/crypto/glue_helper.h b/arch/x86/include/asm/crypto/glue_helper.h
+index 03bb106..9e7a45c 100644
+--- a/arch/x86/include/asm/crypto/glue_helper.h
++++ b/arch/x86/include/asm/crypto/glue_helper.h
+@@ -11,16 +11,16 @@
+ #include <crypto/b128ops.h>
+
+ typedef void (*common_glue_func_t)(void *ctx, u8 *dst, const u8 *src);
+-typedef void (*common_glue_cbc_func_t)(void *ctx, u128 *dst, const u128 *src);
++typedef void (*common_glue_cbc_func_t)(void *ctx, u8 *dst, const u8 *src);
+ typedef void (*common_glue_ctr_func_t)(void *ctx, u128 *dst, const u128 *src,
+ le128 *iv);
+ typedef void (*common_glue_xts_func_t)(void *ctx, u128 *dst, const u128 *src,
+ le128 *iv);
+
+-#define GLUE_FUNC_CAST(fn) ((common_glue_func_t)(fn))
+-#define GLUE_CBC_FUNC_CAST(fn) ((common_glue_cbc_func_t)(fn))
+-#define GLUE_CTR_FUNC_CAST(fn) ((common_glue_ctr_func_t)(fn))
+-#define GLUE_XTS_FUNC_CAST(fn) ((common_glue_xts_func_t)(fn))
++#define GLUE_FUNC_CAST(fn) (fn)
++#define GLUE_CBC_FUNC_CAST(fn) (fn)
++#define GLUE_CTR_FUNC_CAST(fn) (fn)
++#define GLUE_XTS_FUNC_CAST(fn) (fn)
+
+ struct common_glue_func_entry {
+ unsigned int num_blocks; /* number of blocks that @fn will process */
+diff --git a/arch/x86/include/asm/crypto/serpent-avx.h b/arch/x86/include/asm/crypto/serpent-avx.h
+index 33c2b8a..586871f 100644
+--- a/arch/x86/include/asm/crypto/serpent-avx.h
++++ b/arch/x86/include/asm/crypto/serpent-avx.h
+@@ -16,20 +16,20 @@ struct serpent_xts_ctx {
+ struct serpent_ctx crypt_ctx;
+ };
+
+-asmlinkage void serpent_ecb_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_ecb_enc_8way_avx(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void serpent_ecb_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_ecb_dec_8way_avx(void *ctx, u8 *dst,
+ const u8 *src);
+
+-asmlinkage void serpent_cbc_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
++asmlinkage void serpent_cbc_dec_8way_avx(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void serpent_ctr_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void serpent_ctr_8way_avx(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+-asmlinkage void serpent_xts_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
+-asmlinkage void serpent_xts_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+- const u8 *src, le128 *iv);
++asmlinkage void serpent_xts_enc_8way_avx(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
++asmlinkage void serpent_xts_dec_8way_avx(void *ctx, u128 *dst,
++ const u128 *src, le128 *iv);
+
+ extern void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src,
+ le128 *iv);
+diff --git a/arch/x86/include/asm/crypto/serpent-sse2.h b/arch/x86/include/asm/crypto/serpent-sse2.h
+index e6e77df..fe42081 100644
+--- a/arch/x86/include/asm/crypto/serpent-sse2.h
++++ b/arch/x86/include/asm/crypto/serpent-sse2.h
+@@ -13,7 +13,7 @@ asmlinkage void __serpent_enc_blk_4way(struct serpent_ctx *ctx, u8 *dst,
+ asmlinkage void serpent_dec_blk_4way(struct serpent_ctx *ctx, u8 *dst,
+ const u8 *src);
+
+-static inline void serpent_enc_blk_xway(struct serpent_ctx *ctx, u8 *dst,
++static inline void serpent_enc_blk_xway(void *ctx, u8 *dst,
+ const u8 *src)
+ {
+ __serpent_enc_blk_4way(ctx, dst, src, false);
+@@ -25,7 +25,7 @@ static inline void serpent_enc_blk_xway_xor(struct serpent_ctx *ctx, u8 *dst,
+ __serpent_enc_blk_4way(ctx, dst, src, true);
+ }
+
+-static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst,
++static inline void serpent_dec_blk_xway(void *ctx, u8 *dst,
+ const u8 *src)
+ {
+ serpent_dec_blk_4way(ctx, dst, src);
+@@ -40,7 +40,7 @@ asmlinkage void __serpent_enc_blk_8way(struct serpent_ctx *ctx, u8 *dst,
+ asmlinkage void serpent_dec_blk_8way(struct serpent_ctx *ctx, u8 *dst,
+ const u8 *src);
+
+-static inline void serpent_enc_blk_xway(struct serpent_ctx *ctx, u8 *dst,
++static inline void serpent_enc_blk_xway(void *ctx, u8 *dst,
+ const u8 *src)
+ {
+ __serpent_enc_blk_8way(ctx, dst, src, false);
+@@ -52,7 +52,7 @@ static inline void serpent_enc_blk_xway_xor(struct serpent_ctx *ctx, u8 *dst,
+ __serpent_enc_blk_8way(ctx, dst, src, true);
+ }
+
+-static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst,
++static inline void serpent_dec_blk_xway(void *ctx, u8 *dst,
+ const u8 *src)
+ {
+ serpent_dec_blk_8way(ctx, dst, src);
+diff --git a/arch/x86/include/asm/crypto/twofish.h b/arch/x86/include/asm/crypto/twofish.h
+index 878c51c..86fc65f 100644
+--- a/arch/x86/include/asm/crypto/twofish.h
++++ b/arch/x86/include/asm/crypto/twofish.h
+@@ -17,19 +17,19 @@ struct twofish_xts_ctx {
+ };
+
+ /* regular block cipher functions from twofish_x86_64 module */
+-asmlinkage void twofish_enc_blk(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_enc_blk(void *ctx, u8 *dst,
+ const u8 *src);
+-asmlinkage void twofish_dec_blk(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_dec_blk(void *ctx, u8 *dst,
+ const u8 *src);
+
+ /* 3-way parallel cipher functions */
+-asmlinkage void __twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void __twofish_enc_blk_3way(void *ctx, u8 *dst,
+ const u8 *src, bool xor);
+-asmlinkage void twofish_dec_blk_3way(struct twofish_ctx *ctx, u8 *dst,
++asmlinkage void twofish_dec_blk_3way(void *ctx, u8 *dst,
+ const u8 *src);
+
+ /* helpers from twofish_x86_64-3way module */
+-extern void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src);
++extern void twofish_dec_blk_cbc_3way(void *ctx, u8 *dst, const u8 *src);
+ extern void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src,
+ le128 *iv);
+ extern void twofish_enc_blk_ctr_3way(void *ctx, u128 *dst, const u128 *src,
diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
index 4e10d73..7319a47 100644
--- a/arch/x86/include/asm/desc.h
@@ -18718,10 +20007,10 @@ index 1c7eefe..d0e4702 100644
};
diff --git a/arch/x86/include/asm/fpu/internal.h b/arch/x86/include/asm/fpu/internal.h
-index 3c3550c..ca9e4c3 100644
+index 0fd440d..5f883a5 100644
--- a/arch/x86/include/asm/fpu/internal.h
+++ b/arch/x86/include/asm/fpu/internal.h
-@@ -97,8 +97,11 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu);
+@@ -98,8 +98,11 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu);
#define user_insn(insn, output, input...) \
({ \
int err; \
@@ -18734,7 +20023,7 @@ index 3c3550c..ca9e4c3 100644
"2: " ASM_CLAC "\n" \
".section .fixup,\"ax\"\n" \
"3: movl $-1,%[err]\n" \
-@@ -107,6 +110,7 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu);
+@@ -108,6 +111,7 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu);
_ASM_EXTABLE(1b, 3b) \
: [err] "=r" (err), output \
: "0"(0), input); \
@@ -18742,7 +20031,7 @@ index 3c3550c..ca9e4c3 100644
err; \
})
-@@ -186,9 +190,9 @@ static inline int copy_user_to_fregs(struct fregs_state __user *fx)
+@@ -187,9 +191,9 @@ static inline int copy_user_to_fregs(struct fregs_state __user *fx)
static inline void copy_fxregs_to_kernel(struct fpu *fpu)
{
if (config_enabled(CONFIG_X86_32))
@@ -18754,7 +20043,7 @@ index 3c3550c..ca9e4c3 100644
else {
/* Using "rex64; fxsave %0" is broken because, if the memory
* operand uses any extended registers for addressing, a second
-@@ -205,15 +209,15 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu)
+@@ -206,15 +210,15 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu)
* an extended register is needed for addressing (fix submitted
* to mainline 2005-11-21).
*
@@ -18773,25 +20062,20 @@ index 3c3550c..ca9e4c3 100644
}
}
-@@ -388,12 +392,16 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf)
+@@ -386,9 +390,11 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf)
if (unlikely(err))
return -EFAULT;
+ pax_open_userland();
- __asm__ __volatile__(ASM_STAC "\n"
-- "1:"XSAVE"\n"
-+ "1:"
-+ __copyuser_seg
-+ XSAVE"\n"
- "2: " ASM_CLAC "\n"
- xstate_fault(err)
- : "D" (buf), "a" (-1), "d" (-1), "0" (err)
- : "memory");
+ stac();
+- XSTATE_OP(XSAVE, buf, -1, -1, err);
++ XSTATE_OP(__copyuser_seg XSAVE, buf, -1, -1, err);
+ clac();
+ pax_close_userland();
+
return err;
}
-
-@@ -402,17 +410,21 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf)
+@@ -398,14 +404,16 @@ static inline int copy_xregs_to_user(struct xregs_state __user *buf)
*/
static inline int copy_user_to_xregs(struct xregs_state __user *buf, u64 mask)
{
@@ -18799,23 +20083,18 @@ index 3c3550c..ca9e4c3 100644
+ struct xregs_state *xstate = ((__force_kernel struct xregs_state *)buf);
u32 lmask = mask;
u32 hmask = mask >> 32;
- int err = 0;
+ int err;
+ pax_open_userland();
- __asm__ __volatile__(ASM_STAC "\n"
-- "1:"XRSTOR"\n"
-+ "1:"
-+ __copyuser_seg
-+ XRSTOR"\n"
- "2: " ASM_CLAC "\n"
- xstate_fault(err)
- : "D" (xstate), "a" (lmask), "d" (hmask), "0" (err)
- : "memory"); /* memory required? */
+ stac();
+- XSTATE_OP(XRSTOR, xstate, lmask, hmask, err);
++ XSTATE_OP(__copyuser_seg XRSTOR, xstate, lmask, hmask, err);
+ clac();
+ pax_close_userland();
+
return err;
}
-
-@@ -429,7 +441,7 @@ static inline int copy_user_to_xregs(struct xregs_state __user *buf, u64 mask)
+@@ -423,7 +431,7 @@ static inline int copy_user_to_xregs(struct xregs_state __user *buf, u64 mask)
static inline int copy_fpregs_to_fpstate(struct fpu *fpu)
{
if (likely(use_xsave())) {
@@ -18824,7 +20103,7 @@ index 3c3550c..ca9e4c3 100644
return 1;
}
-@@ -442,7 +454,7 @@ static inline int copy_fpregs_to_fpstate(struct fpu *fpu)
+@@ -436,7 +444,7 @@ static inline int copy_fpregs_to_fpstate(struct fpu *fpu)
* Legacy FPU register saving, FNSAVE always clears FPU registers,
* so we have to mark them inactive:
*/
@@ -18833,7 +20112,7 @@ index 3c3550c..ca9e4c3 100644
return 0;
}
-@@ -471,7 +483,7 @@ static inline void copy_kernel_to_fpregs(union fpregs_state *fpstate)
+@@ -465,7 +473,7 @@ static inline void copy_kernel_to_fpregs(union fpregs_state *fpstate)
"fnclex\n\t"
"emms\n\t"
"fildl %P[addr]" /* set F?P to defined value */
@@ -18842,7 +20121,7 @@ index 3c3550c..ca9e4c3 100644
}
__copy_kernel_to_fpregs(fpstate);
-@@ -611,7 +623,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu)
+@@ -605,7 +613,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu)
if (fpu.preload) {
new_fpu->counter++;
__fpregs_activate(new_fpu);
@@ -18851,7 +20130,7 @@ index 3c3550c..ca9e4c3 100644
} else {
__fpregs_deactivate_hw();
}
-@@ -623,7 +635,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu)
+@@ -617,7 +625,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu)
if (fpu_want_lazy_restore(new_fpu, cpu))
fpu.preload = 0;
else
@@ -18860,7 +20139,7 @@ index 3c3550c..ca9e4c3 100644
fpregs_activate(new_fpu);
}
}
-@@ -643,7 +655,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu)
+@@ -637,7 +645,7 @@ switch_fpu_prepare(struct fpu *old_fpu, struct fpu *new_fpu, int cpu)
static inline void switch_fpu_finish(struct fpu *new_fpu, fpu_switch_t fpu_switch)
{
if (fpu_switch.preload)
@@ -19022,10 +20301,10 @@ index b4c1f54..e290c08 100644
pagefault_enable();
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h
-index 59caa55..e4d3fec 100644
+index 84b3d19..8ea9f03 100644
--- a/arch/x86/include/asm/hw_irq.h
+++ b/arch/x86/include/asm/hw_irq.h
-@@ -159,8 +159,8 @@ static inline void unlock_vector_lock(void) {}
+@@ -164,8 +164,8 @@ static inline void unlock_vector_lock(void) {}
#endif /* CONFIG_X86_LOCAL_APIC */
/* Statistics */
@@ -19163,6 +20442,31 @@ index 4421b5d..8543006 100644
#define flush_insn_slot(p) do { } while (0)
+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
++++ b/arch/x86/include/asm/kvm_emulate.h
+@@ -279,6 +279,8 @@ enum x86emul_mode {
+ #define X86EMUL_SMM_MASK (1 << 6)
+ #define X86EMUL_SMM_INSIDE_NMI_MASK (1 << 7)
+
++struct fastop;
++
+ struct x86_emulate_ctxt {
+ const struct x86_emulate_ops *ops;
+
+@@ -311,7 +313,10 @@ struct x86_emulate_ctxt {
+ struct operand src;
+ struct operand src2;
+ struct operand dst;
+- int (*execute)(struct x86_emulate_ctxt *ctxt);
++ union {
++ int (*execute)(struct x86_emulate_ctxt *ctxt);
++ void (*fastop)(struct fastop *fake);
++ } u;
+ int (*check_perm)(struct x86_emulate_ctxt *ctxt);
+ /*
+ * The following six fields are cleared together,
diff --git a/arch/x86/include/asm/local.h b/arch/x86/include/asm/local.h
index 4ad6560..75c7bdd 100644
--- a/arch/x86/include/asm/local.h
@@ -19600,7 +20904,7 @@ index bfd9b2a..0d64fc2 100644
#define activate_mm(prev, next) \
diff --git a/arch/x86/include/asm/module.h b/arch/x86/include/asm/module.h
-index e3b7819..b257c64 100644
+index e3b7819..ba128ec 100644
--- a/arch/x86/include/asm/module.h
+++ b/arch/x86/include/asm/module.h
@@ -5,6 +5,7 @@
@@ -19611,7 +20915,7 @@ index e3b7819..b257c64 100644
#elif defined CONFIG_M486
#define MODULE_PROC_FAMILY "486 "
#elif defined CONFIG_M586
-@@ -57,8 +58,20 @@
+@@ -57,8 +58,26 @@
#error unknown processor family
#endif
@@ -19631,7 +20935,13 @@ index e3b7819..b257c64 100644
+#define MODULE_PAX_UDEREF ""
+#endif
+
-+#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_PAX_KERNEXEC MODULE_PAX_UDEREF
++#ifdef CONFIG_PAX_RAP
++#define MODULE_PAX_RAP "RAP "
++#else
++#define MODULE_PAX_RAP ""
++#endif
++
++#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_PAX_KERNEXEC MODULE_PAX_UDEREF MODULE_PAX_RAP
+
#endif /* _ASM_X86_MODULE_H */
diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h
@@ -19775,10 +21085,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 c759b3c..043875b 100644
+index f619250..8b851d8 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
-@@ -536,7 +536,7 @@ static inline pmd_t __pmd(pmdval_t val)
+@@ -510,7 +510,7 @@ static inline pmd_t __pmd(pmdval_t val)
return (pmd_t) { ret };
}
@@ -19787,7 +21097,7 @@ index c759b3c..043875b 100644
{
pmdval_t ret;
-@@ -602,6 +602,18 @@ static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
+@@ -576,6 +576,18 @@ static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
val);
}
@@ -19806,7 +21116,7 @@ index c759b3c..043875b 100644
static inline void pgd_clear(pgd_t *pgdp)
{
set_pgd(pgdp, __pgd(0));
-@@ -686,6 +698,21 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
+@@ -660,6 +672,21 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
pv_mmu_ops.set_fixmap(idx, phys, flags);
}
@@ -19828,7 +21138,7 @@ index c759b3c..043875b 100644
#if defined(CONFIG_SMP) && defined(CONFIG_PARAVIRT_SPINLOCKS)
#ifdef CONFIG_QUEUED_SPINLOCKS
-@@ -909,7 +936,7 @@ extern void default_banner(void);
+@@ -883,7 +910,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)
@@ -19837,7 +21147,7 @@ index c759b3c..043875b 100644
#endif
#define INTERRUPT_RETURN \
-@@ -979,6 +1006,21 @@ extern void default_banner(void);
+@@ -941,6 +968,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))
@@ -19860,7 +21170,7 @@ index c759b3c..043875b 100644
#endif /* __ASSEMBLY__ */
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
-index 3d44191..1992d40 100644
+index 77db561..bc4a1ea 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 {
@@ -19887,7 +21197,7 @@ index 3d44191..1992d40 100644
struct pv_cpu_ops {
/* hooks for various privileged instructions */
-@@ -195,7 +195,7 @@ struct pv_cpu_ops {
+@@ -178,7 +178,7 @@ struct pv_cpu_ops {
void (*start_context_switch)(struct task_struct *prev);
void (*end_context_switch)(struct task_struct *next);
@@ -19896,25 +21206,16 @@ index 3d44191..1992d40 100644
struct pv_irq_ops {
/*
-@@ -218,7 +218,7 @@ struct pv_irq_ops {
+@@ -201,7 +201,7 @@ struct pv_irq_ops {
#ifdef CONFIG_X86_64
void (*adjust_exception_frame)(void);
#endif
-};
+} __no_randomize_layout;
- struct pv_apic_ops {
- #ifdef CONFIG_X86_LOCAL_APIC
-@@ -226,7 +226,7 @@ struct pv_apic_ops {
- unsigned long start_eip,
- unsigned long start_esp);
- #endif
--};
-+} __no_const __no_randomize_layout;
-
struct pv_mmu_ops {
unsigned long (*read_cr2)(void);
-@@ -316,6 +316,7 @@ struct pv_mmu_ops {
+@@ -285,6 +285,7 @@ struct pv_mmu_ops {
struct paravirt_callee_save make_pud;
void (*set_pgd)(pgd_t *pudp, pgd_t pgdval);
@@ -19922,7 +21223,7 @@ index 3d44191..1992d40 100644
#endif /* CONFIG_PGTABLE_LEVELS == 4 */
#endif /* CONFIG_PGTABLE_LEVELS >= 3 */
-@@ -327,7 +328,13 @@ struct pv_mmu_ops {
+@@ -296,7 +297,13 @@ struct pv_mmu_ops {
an mfn. We can tell which is which from the index. */
void (*set_fixmap)(unsigned /* enum fixed_addresses */ idx,
phys_addr_t phys, pgprot_t flags);
@@ -19937,7 +21238,7 @@ index 3d44191..1992d40 100644
struct arch_spinlock;
#ifdef CONFIG_SMP
-@@ -349,11 +356,14 @@ struct pv_lock_ops {
+@@ -318,11 +325,14 @@ struct pv_lock_ops {
struct paravirt_callee_save lock_spinning;
void (*unlock_kick)(struct arch_spinlock *lock, __ticket_t ticket);
#endif /* !CONFIG_QUEUED_SPINLOCKS */
@@ -19954,8 +21255,8 @@ index 3d44191..1992d40 100644
struct paravirt_patch_template {
struct pv_init_ops pv_init_ops;
struct pv_time_ops pv_time_ops;
-@@ -362,7 +372,7 @@ struct paravirt_patch_template {
- struct pv_apic_ops pv_apic_ops;
+@@ -330,7 +340,7 @@ struct paravirt_patch_template {
+ struct pv_irq_ops pv_irq_ops;
struct pv_mmu_ops pv_mmu_ops;
struct pv_lock_ops pv_lock_ops;
-};
@@ -20066,7 +21367,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 6ec0c8b..1e50b49 100644
+index 0687c47..7425416 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);
@@ -20077,7 +21378,7 @@ index 6ec0c8b..1e50b49 100644
#define pgd_clear(pgd) native_pgd_clear(pgd)
#endif
-@@ -91,12 +92,53 @@ extern struct mm_struct *pgd_page_get_mm(struct page *page);
+@@ -88,12 +89,53 @@ extern struct mm_struct *pgd_page_get_mm(struct page *page);
#define arch_end_context_switch(prev) do {} while(0)
@@ -20131,7 +21432,7 @@ index 6ec0c8b..1e50b49 100644
static inline int pte_dirty(pte_t pte)
{
return pte_flags(pte) & _PAGE_DIRTY;
-@@ -157,6 +199,11 @@ static inline unsigned long pud_pfn(pud_t pud)
+@@ -154,6 +196,11 @@ static inline unsigned long pud_pfn(pud_t pud)
return (pud_val(pud) & pud_pfn_mask(pud)) >> PAGE_SHIFT;
}
@@ -20143,7 +21444,7 @@ index 6ec0c8b..1e50b49 100644
#define pte_page(pte) pfn_to_page(pte_pfn(pte))
static inline int pmd_large(pmd_t pte)
-@@ -210,9 +257,29 @@ static inline pte_t pte_wrprotect(pte_t pte)
+@@ -209,9 +256,29 @@ static inline pte_t pte_wrprotect(pte_t pte)
return pte_clear_flags(pte, _PAGE_RW);
}
@@ -20174,7 +21475,7 @@ index 6ec0c8b..1e50b49 100644
}
static inline pte_t pte_mkdirty(pte_t pte)
-@@ -445,6 +512,16 @@ pte_t *populate_extra_pte(unsigned long vaddr);
+@@ -459,6 +526,16 @@ pte_t *populate_extra_pte(unsigned long vaddr);
#endif
#ifndef __ASSEMBLY__
@@ -20191,7 +21492,7 @@ index 6ec0c8b..1e50b49 100644
#include <linux/mm_types.h>
#include <linux/mmdebug.h>
#include <linux/log2.h>
-@@ -638,7 +715,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd)
+@@ -659,7 +736,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:
*/
@@ -20200,7 +21501,7 @@ index 6ec0c8b..1e50b49 100644
/* to find an entry in a page-table-directory. */
static inline unsigned long pud_index(unsigned long address)
-@@ -653,7 +730,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address)
+@@ -674,7 +751,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address)
static inline int pgd_bad(pgd_t pgd)
{
@@ -20209,7 +21510,7 @@ index 6ec0c8b..1e50b49 100644
}
static inline int pgd_none(pgd_t pgd)
-@@ -676,7 +753,12 @@ static inline int pgd_none(pgd_t pgd)
+@@ -697,7 +774,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;
*/
@@ -20223,7 +21524,7 @@ index 6ec0c8b..1e50b49 100644
/*
* a shortcut which implies the use of the kernel's pgd, instead
* of a process's
-@@ -687,6 +769,25 @@ static inline int pgd_none(pgd_t pgd)
+@@ -708,6 +790,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)
@@ -20249,7 +21550,7 @@ index 6ec0c8b..1e50b49 100644
#ifndef __ASSEMBLY__
extern int direct_gbpages;
-@@ -853,11 +954,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm,
+@@ -862,11 +963,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.
*/
@@ -20444,22 +21745,24 @@ index e6844df..432b56e 100644
#endif /* _ASM_X86_PGTABLE_64_DEFS_H */
diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
-index 79c9185..d1e3128 100644
+index 4432ab7..43778ff 100644
--- a/arch/x86/include/asm/pgtable_types.h
+++ b/arch/x86/include/asm/pgtable_types.h
-@@ -85,8 +85,10 @@
-
- #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
+@@ -87,9 +87,12 @@
#define _PAGE_NX (_AT(pteval_t, 1) << _PAGE_BIT_NX)
+ #define _PAGE_DEVMAP (_AT(u64, 1) << _PAGE_BIT_DEVMAP)
+ #define __HAVE_ARCH_PTE_DEVMAP
-#else
+#elif defined(CONFIG_KMEMCHECK) || defined(CONFIG_MEM_SOFT_DIRTY)
#define _PAGE_NX (_AT(pteval_t, 0))
+ #define _PAGE_DEVMAP (_AT(pteval_t, 0))
+#else
+#define _PAGE_NX (_AT(pteval_t, 1) << _PAGE_BIT_HIDDEN)
++#define _PAGE_DEVMAP (_AT(pteval_t, 0))
#endif
#define _PAGE_PROTNONE (_AT(pteval_t, 1) << _PAGE_BIT_PROTNONE)
-@@ -141,6 +143,9 @@ enum page_cache_mode {
+@@ -144,6 +147,9 @@ enum page_cache_mode {
#define PAGE_READONLY_EXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | \
_PAGE_ACCESSED)
@@ -20469,7 +21772,7 @@ index 79c9185..d1e3128 100644
#define __PAGE_KERNEL_EXEC \
(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_GLOBAL)
#define __PAGE_KERNEL (__PAGE_KERNEL_EXEC | _PAGE_NX)
-@@ -148,7 +153,7 @@ enum page_cache_mode {
+@@ -151,7 +157,7 @@ enum page_cache_mode {
#define __PAGE_KERNEL_RO (__PAGE_KERNEL & ~_PAGE_RW)
#define __PAGE_KERNEL_RX (__PAGE_KERNEL_EXEC & ~_PAGE_RW)
#define __PAGE_KERNEL_NOCACHE (__PAGE_KERNEL | _PAGE_NOCACHE)
@@ -20478,7 +21781,7 @@ index 79c9185..d1e3128 100644
#define __PAGE_KERNEL_VVAR (__PAGE_KERNEL_RO | _PAGE_USER)
#define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE)
#define __PAGE_KERNEL_LARGE_EXEC (__PAGE_KERNEL_EXEC | _PAGE_PSE)
-@@ -194,7 +199,7 @@ enum page_cache_mode {
+@@ -197,7 +203,7 @@ enum page_cache_mode {
#ifdef CONFIG_X86_64
#define __PAGE_KERNEL_IDENT_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC
#else
@@ -20487,7 +21790,7 @@ index 79c9185..d1e3128 100644
#define PDE_IDENT_ATTR 0x063 /* PRESENT+RW+DIRTY+ACCESSED */
#define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */
#endif
-@@ -233,7 +238,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd)
+@@ -236,7 +242,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd)
{
return native_pgd_val(pgd) & PTE_FLAGS_MASK;
}
@@ -20505,7 +21808,7 @@ index 79c9185..d1e3128 100644
#if CONFIG_PGTABLE_LEVELS > 3
typedef struct { pudval_t pud; } pud_t;
-@@ -247,8 +262,6 @@ static inline pudval_t native_pud_val(pud_t pud)
+@@ -250,8 +266,6 @@ static inline pudval_t native_pud_val(pud_t pud)
return pud.pud;
}
#else
@@ -20514,7 +21817,7 @@ index 79c9185..d1e3128 100644
static inline pudval_t native_pud_val(pud_t pud)
{
return native_pgd_val(pud.pgd);
-@@ -268,8 +281,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd)
+@@ -271,8 +285,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd)
return pmd.pmd;
}
#else
@@ -20523,7 +21826,7 @@ index 79c9185..d1e3128 100644
static inline pmdval_t native_pmd_val(pmd_t pmd)
{
return native_pgd_val(pmd.pud.pgd);
-@@ -386,7 +397,6 @@ typedef struct page *pgtable_t;
+@@ -389,7 +401,6 @@ typedef struct page *pgtable_t;
extern pteval_t __supported_pte_mask;
extern void set_nx(void);
@@ -20532,7 +21835,7 @@ index 79c9185..d1e3128 100644
#define pgprot_writecombine pgprot_writecombine
extern pgprot_t pgprot_writecombine(pgprot_t prot);
diff --git a/arch/x86/include/asm/pmem.h b/arch/x86/include/asm/pmem.h
-index d8ce3ec..96b12e2 100644
+index c57fd1e..426fc11 100644
--- a/arch/x86/include/asm/pmem.h
+++ b/arch/x86/include/asm/pmem.h
@@ -41,7 +41,7 @@ static inline void arch_memcpy_to_pmem(void __pmem *dst, const void *src,
@@ -20558,7 +21861,7 @@ index 01bcde8..a6f1377 100644
/*
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index 2d5a50c..9fc95aaf 100644
+index 20c11d1..f4a4f69 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -136,7 +136,7 @@ struct cpuinfo_x86 {
@@ -20820,7 +22123,7 @@ index 9c6b890..5305f53 100644
u32 gdt_base;
#else
diff --git a/arch/x86/include/asm/reboot.h b/arch/x86/include/asm/reboot.h
-index a82c4f1..ac45053 100644
+index 2cb1cc2..787d524 100644
--- a/arch/x86/include/asm/reboot.h
+++ b/arch/x86/include/asm/reboot.h
@@ -6,13 +6,13 @@
@@ -21228,10 +22531,10 @@ index ba665eb..0f72938 100644
static __always_inline void clac(void)
diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
-index 222a6a3..839da8d 100644
+index dfcf072..97cd79a 100644
--- a/arch/x86/include/asm/smp.h
+++ b/arch/x86/include/asm/smp.h
-@@ -35,7 +35,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map);
+@@ -26,7 +26,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map);
/* cpus sharing the last level cache: */
DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_llc_shared_map);
DECLARE_PER_CPU_READ_MOSTLY(u16, cpu_llc_id);
@@ -21240,7 +22543,7 @@ index 222a6a3..839da8d 100644
static inline struct cpumask *cpu_llc_shared_mask(int cpu)
{
-@@ -68,7 +68,7 @@ struct smp_ops {
+@@ -59,7 +59,7 @@ struct smp_ops {
void (*send_call_func_ipi)(const struct cpumask *mask);
void (*send_call_func_single_ipi)(int cpu);
@@ -21249,7 +22552,7 @@ index 222a6a3..839da8d 100644
/* Globals due to paravirt */
extern void set_cpu_sibling_map(int cpu);
-@@ -182,14 +182,8 @@ extern unsigned disabled_cpus;
+@@ -170,14 +170,8 @@ extern unsigned disabled_cpus;
extern int safe_smp_processor_id(void);
#elif defined(CONFIG_X86_64_SMP)
@@ -21598,8 +22901,30 @@ index 6df2029..a359a58 100644
asm volatile("invlpg (%0)" ::"r" (addr) : "memory");
}
+diff --git a/arch/x86/include/asm/traps.h b/arch/x86/include/asm/traps.h
+index c3496619..3f3a7dc 100644
+--- a/arch/x86/include/asm/traps.h
++++ b/arch/x86/include/asm/traps.h
+@@ -10,7 +10,7 @@
+ #define dotraplinkage __visible
+
+ asmlinkage void divide_error(void);
+-asmlinkage void debug(void);
++asmlinkage void int1(void);
+ asmlinkage void nmi(void);
+ asmlinkage void int3(void);
+ asmlinkage void xen_debug(void);
+@@ -107,7 +107,7 @@ extern int panic_on_unrecovered_nmi;
+
+ void math_emulate(struct math_emu_info *);
+ #ifndef CONFIG_X86_32
+-asmlinkage void smp_thermal_interrupt(void);
++asmlinkage void smp_thermal_interrupt(struct pt_regs *regs);
+ asmlinkage void smp_threshold_interrupt(void);
+ 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 09b1b0a..8f56367 100644
+index a4a30e4..44891b7 100644
--- a/arch/x86/include/asm/uaccess.h
+++ b/arch/x86/include/asm/uaccess.h
@@ -7,6 +7,7 @@
@@ -21662,8 +22987,8 @@ index 09b1b0a..8f56367 100644
/*
* The exception table consists of pairs of addresses relative to the
-@@ -135,11 +169,13 @@ extern int __get_user_8(void);
- extern int __get_user_bad(void);
+@@ -138,11 +172,13 @@ extern int __get_user_bad(void);
+ #define __uaccess_end() clac()
/*
- * This is a type: either unsigned long, if the argument fits into
@@ -21679,7 +23004,7 @@ index 09b1b0a..8f56367 100644
/**
* get_user: - Get a simple variable from user space.
-@@ -178,10 +214,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -181,10 +217,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX); \
__chk_user_ptr(ptr); \
might_fault(); \
@@ -21692,7 +23017,7 @@ index 09b1b0a..8f56367 100644
__builtin_expect(__ret_gu, 0); \
})
-@@ -189,13 +227,21 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -192,13 +230,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")
@@ -21709,26 +23034,26 @@ index 09b1b0a..8f56367 100644
#ifdef CONFIG_X86_32
#define __put_user_asm_u64(x, addr, err, errret) \
- asm volatile(ASM_STAC "\n" \
+ asm volatile("\n" \
- "1: movl %%eax,0(%2)\n" \
- "2: movl %%edx,4(%2)\n" \
+ "1: "__copyuser_seg"movl %%eax,0(%2)\n" \
+ "2: "__copyuser_seg"movl %%edx,4(%2)\n" \
- "3: " ASM_CLAC "\n" \
+ "3:" \
".section .fixup,\"ax\"\n" \
"4: movl %3,%0\n" \
-@@ -208,8 +254,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -211,8 +257,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
#define __put_user_asm_ex_u64(x, addr) \
- asm volatile(ASM_STAC "\n" \
+ asm volatile("\n" \
- "1: movl %%eax,0(%1)\n" \
- "2: movl %%edx,4(%1)\n" \
+ "1: "__copyuser_seg"movl %%eax,0(%1)\n" \
+ "2: "__copyuser_seg"movl %%edx,4(%1)\n" \
- "3: " ASM_CLAC "\n" \
+ "3:" \
_ASM_EXTABLE_EX(1b, 2b) \
_ASM_EXTABLE_EX(2b, 3b) \
-@@ -257,10 +303,11 @@ extern void __put_user_8(void);
+@@ -260,10 +306,11 @@ extern void __put_user_8(void);
#define put_user(x, ptr) \
({ \
int __ret_pu; \
@@ -21742,7 +23067,7 @@ index 09b1b0a..8f56367 100644
switch (sizeof(*(ptr))) { \
case 1: \
__put_user_x(1, __pu_val, ptr, __ret_pu); \
-@@ -278,6 +325,7 @@ extern void __put_user_8(void);
+@@ -281,6 +328,7 @@ extern void __put_user_8(void);
__put_user_x(X, __pu_val, ptr, __ret_pu); \
break; \
} \
@@ -21750,7 +23075,7 @@ index 09b1b0a..8f56367 100644
__builtin_expect(__ret_pu, 0); \
})
-@@ -341,10 +389,10 @@ do { \
+@@ -348,10 +396,10 @@ do { \
__chk_user_ptr(ptr); \
switch (size) { \
case 1: \
@@ -21763,16 +23088,16 @@ index 09b1b0a..8f56367 100644
break; \
case 4: \
__get_user_asm(x, ptr, retval, "l", "k", "=r", errret); \
-@@ -358,27 +406,31 @@ do { \
+@@ -365,17 +413,21 @@ do { \
} while (0)
#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \
+do { \
+ pax_open_userland(); \
- asm volatile(ASM_STAC "\n" \
+ asm volatile("\n" \
- "1: mov"itype" %2,%"rtype"1\n" \
+ "1: "__copyuser_seg"mov"itype" %2,%"rtype"1\n"\
- "2: " ASM_CLAC "\n" \
+ "2:\n" \
".section .fixup,\"ax\"\n" \
"3: mov %3,%0\n" \
- " xor"itype" %"rtype"1,%"rtype"1\n" \
@@ -21787,8 +23112,9 @@ index 09b1b0a..8f56367 100644
+ pax_close_userland(); \
+} while (0)
- #define __get_user_size_ex(x, ptr, size) \
- do { \
+ /*
+ * This doesn't do __uaccess_begin/end - the exception handling
+@@ -386,10 +438,10 @@ do { \
__chk_user_ptr(ptr); \
switch (size) { \
case 1: \
@@ -21801,7 +23127,7 @@ index 09b1b0a..8f56367 100644
break; \
case 4: \
__get_user_asm_ex(x, ptr, "l", "k", "=r"); \
-@@ -392,7 +444,7 @@ do { \
+@@ -403,7 +455,7 @@ do { \
} while (0)
#define __get_user_asm_ex(x, addr, itype, rtype, ltype) \
@@ -21810,13 +23136,10 @@ index 09b1b0a..8f56367 100644
"2:\n" \
_ASM_EXTABLE_EX(1b, 2b) \
: ltype(x) : "m" (__m(addr)))
-@@ -407,15 +459,26 @@ do { \
- #define __get_user_nocheck(x, ptr, size) \
- ({ \
- int __gu_err; \
-- unsigned long __gu_val; \
-+ __inttype(*(ptr)) __gu_val; \
+@@ -424,13 +476,24 @@ do { \
+ __uaccess_begin(); \
__get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT); \
+ __uaccess_end(); \
- (x) = (__force __typeof__(*(ptr)))__gu_val; \
+ (x) = (__typeof__(*(ptr)))__gu_val; \
__builtin_expect(__gu_err, 0); \
@@ -21840,19 +23163,19 @@ index 09b1b0a..8f56367 100644
/*
* Tell gcc we read from memory instead of writing: this is because
-@@ -423,8 +486,10 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -438,8 +501,10 @@ struct __large_struct { unsigned long buf[100]; };
* aliasing issues.
*/
#define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \
+do { \
+ pax_open_userland(); \
- asm volatile(ASM_STAC "\n" \
+ asm volatile("\n" \
- "1: mov"itype" %"rtype"1,%2\n" \
+ "1: "__copyuser_seg"mov"itype" %"rtype"1,%2\n"\
- "2: " ASM_CLAC "\n" \
+ "2:\n" \
".section .fixup,\"ax\"\n" \
"3: mov %3,%0\n" \
-@@ -432,10 +497,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -447,10 +512,12 @@ struct __large_struct { unsigned long buf[100]; };
".previous\n" \
_ASM_EXTABLE(1b, 3b) \
: "=r"(err) \
@@ -21867,21 +23190,21 @@ index 09b1b0a..8f56367 100644
"2:\n" \
_ASM_EXTABLE_EX(1b, 2b) \
: : ltype(x), "m" (__m(addr)))
-@@ -445,11 +512,13 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -460,11 +527,13 @@ struct __large_struct { unsigned long buf[100]; };
*/
#define uaccess_try do { \
current_thread_info()->uaccess_err = 0; \
+ pax_open_userland(); \
- stac(); \
+ __uaccess_begin(); \
barrier();
#define uaccess_catch(err) \
- clac(); \
+ __uaccess_end(); \
+ pax_close_userland(); \
(err) |= (current_thread_info()->uaccess_err ? -EFAULT : 0); \
} while (0)
-@@ -475,8 +544,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -490,8 +559,12 @@ struct __large_struct { unsigned long buf[100]; };
* On error, the variable @x is set to zero.
*/
@@ -21894,7 +23217,7 @@ index 09b1b0a..8f56367 100644
/**
* __put_user: - Write a simple value into user space, with less checking.
-@@ -499,8 +572,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -514,8 +587,12 @@ struct __large_struct { unsigned long buf[100]; };
* Returns zero on success, or -EFAULT on error.
*/
@@ -21907,7 +23230,7 @@ index 09b1b0a..8f56367 100644
#define __get_user_unaligned __get_user
#define __put_user_unaligned __put_user
-@@ -518,7 +595,7 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -533,7 +610,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)))); \
@@ -21916,7 +23239,7 @@ index 09b1b0a..8f56367 100644
} while (0)
#define put_user_try uaccess_try
-@@ -536,7 +613,7 @@ extern __must_check long strlen_user(const char __user *str);
+@@ -551,7 +628,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);
@@ -21925,7 +23248,7 @@ index 09b1b0a..8f56367 100644
extern void __cmpxchg_wrong_size(void)
__compiletime_error("Bad argument size for cmpxchg");
-@@ -544,21 +621,22 @@ extern void __cmpxchg_wrong_size(void)
+@@ -559,22 +636,23 @@ extern void __cmpxchg_wrong_size(void)
#define __user_atomic_cmpxchg_inatomic(uval, ptr, old, new, size) \
({ \
int __ret = 0; \
@@ -21936,13 +23259,14 @@ index 09b1b0a..8f56367 100644
+ __typeof__(*(uval)) __old = (old); \
+ __typeof__(*(uval)) __new = (new); \
+ pax_open_userland(); \
+ __uaccess_begin(); \
switch (size) { \
case 1: \
{ \
- asm volatile("\t" ASM_STAC "\n" \
+ asm volatile("\n" \
- "1:\t" LOCK_PREFIX "cmpxchgb %4, %2\n" \
+ "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgb %4, %2\n"\
- "2:\t" ASM_CLAC "\n" \
+ "2:\n" \
"\t.section .fixup, \"ax\"\n" \
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
@@ -21953,13 +23277,13 @@ index 09b1b0a..8f56367 100644
: "i" (-EFAULT), "q" (__new), "1" (__old) \
: "memory" \
); \
-@@ -567,14 +645,14 @@ extern void __cmpxchg_wrong_size(void)
+@@ -583,14 +661,14 @@ extern void __cmpxchg_wrong_size(void)
case 2: \
{ \
- asm volatile("\t" ASM_STAC "\n" \
+ asm volatile("\n" \
- "1:\t" LOCK_PREFIX "cmpxchgw %4, %2\n" \
+ "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgw %4, %2\n"\
- "2:\t" ASM_CLAC "\n" \
+ "2:\n" \
"\t.section .fixup, \"ax\"\n" \
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
@@ -21970,13 +23294,13 @@ index 09b1b0a..8f56367 100644
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
); \
-@@ -583,14 +661,14 @@ extern void __cmpxchg_wrong_size(void)
+@@ -599,14 +677,14 @@ extern void __cmpxchg_wrong_size(void)
case 4: \
{ \
- asm volatile("\t" ASM_STAC "\n" \
+ asm volatile("\n" \
- "1:\t" LOCK_PREFIX "cmpxchgl %4, %2\n" \
+ "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgl %4, %2\n"\
- "2:\t" ASM_CLAC "\n" \
+ "2:\n" \
"\t.section .fixup, \"ax\"\n" \
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
@@ -21987,13 +23311,13 @@ index 09b1b0a..8f56367 100644
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
); \
-@@ -602,14 +680,14 @@ extern void __cmpxchg_wrong_size(void)
+@@ -618,14 +696,14 @@ extern void __cmpxchg_wrong_size(void)
__cmpxchg_wrong_size(); \
\
- asm volatile("\t" ASM_STAC "\n" \
+ asm volatile("\n" \
- "1:\t" LOCK_PREFIX "cmpxchgq %4, %2\n" \
+ "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgq %4, %2\n"\
- "2:\t" ASM_CLAC "\n" \
+ "2:\n" \
"\t.section .fixup, \"ax\"\n" \
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
@@ -22004,15 +23328,15 @@ index 09b1b0a..8f56367 100644
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
); \
-@@ -618,6 +696,7 @@ extern void __cmpxchg_wrong_size(void)
- default: \
+@@ -635,6 +713,7 @@ extern void __cmpxchg_wrong_size(void)
__cmpxchg_wrong_size(); \
} \
+ __uaccess_end(); \
+ pax_close_userland(); \
*__uval = __old; \
__ret; \
})
-@@ -641,17 +720,6 @@ extern struct movsl_mask {
+@@ -658,17 +737,6 @@ extern struct movsl_mask {
#define ARCH_HAS_NOCACHE_UACCESS 1
@@ -22030,7 +23354,7 @@ index 09b1b0a..8f56367 100644
#ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
# define copy_user_diag __compiletime_error
#else
-@@ -661,7 +729,7 @@ unsigned long __must_check _copy_to_user(void __user *to, const void *from,
+@@ -678,7 +746,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")
@@ -22039,7 +23363,7 @@ index 09b1b0a..8f56367 100644
#undef copy_user_diag
-@@ -674,7 +742,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
+@@ -691,7 +759,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
extern void
__compiletime_warning("copy_to_user() buffer size is not provably correct")
@@ -22048,7 +23372,7 @@ index 09b1b0a..8f56367 100644
#define __copy_to_user_overflow(size, count) __copy_to_user_overflow()
#else
-@@ -689,10 +757,16 @@ __copy_from_user_overflow(int size, unsigned long count)
+@@ -706,10 +774,16 @@ __copy_from_user_overflow(int size, unsigned long count)
#endif
@@ -22066,7 +23390,7 @@ index 09b1b0a..8f56367 100644
might_fault();
-@@ -714,12 +788,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
+@@ -731,12 +805,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
* case, and do only runtime checking for non-constant sizes.
*/
@@ -22088,7 +23412,7 @@ index 09b1b0a..8f56367 100644
return n;
}
-@@ -727,17 +804,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
+@@ -744,17 +821,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
static inline unsigned long __must_check
copy_to_user(void __user *to, const void *from, unsigned long n)
{
@@ -22115,7 +23439,7 @@ index 09b1b0a..8f56367 100644
return n;
}
diff --git a/arch/x86/include/asm/uaccess_32.h b/arch/x86/include/asm/uaccess_32.h
-index f5dcb52..da2c15b 100644
+index 3fe0eac..18dfa8b 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
@@ -22134,7 +23458,7 @@ index f5dcb52..da2c15b 100644
if (__builtin_constant_p(n)) {
unsigned long ret;
-@@ -87,12 +92,16 @@ static __always_inline unsigned long __must_check
+@@ -95,12 +100,16 @@ static __always_inline unsigned long __must_check
__copy_to_user(void __user *to, const void *from, unsigned long n)
{
might_fault();
@@ -22152,7 +23476,7 @@ index f5dcb52..da2c15b 100644
/* 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
-@@ -143,6 +152,12 @@ static __always_inline unsigned long
+@@ -157,6 +166,12 @@ static __always_inline unsigned long
__copy_from_user(void *to, const void __user *from, unsigned long n)
{
might_fault();
@@ -22165,7 +23489,7 @@ index f5dcb52..da2c15b 100644
if (__builtin_constant_p(n)) {
unsigned long ret;
-@@ -165,6 +180,10 @@ static __always_inline unsigned long __copy_from_user_nocache(void *to,
+@@ -185,6 +200,10 @@ static __always_inline unsigned long __copy_from_user_nocache(void *to,
const void __user *from, unsigned long n)
{
might_fault();
@@ -22176,7 +23500,7 @@ index f5dcb52..da2c15b 100644
if (__builtin_constant_p(n)) {
unsigned long ret;
-@@ -187,7 +206,10 @@ static __always_inline unsigned long
+@@ -213,7 +232,10 @@ static __always_inline unsigned long
__copy_from_user_inatomic_nocache(void *to, const void __user *from,
unsigned long n)
{
@@ -22189,7 +23513,7 @@ index f5dcb52..da2c15b 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 f2f9b39..2ae1bf8 100644
+index b89c34c..93a6bce 100644
--- a/arch/x86/include/asm/uaccess_64.h
+++ b/arch/x86/include/asm/uaccess_64.h
@@ -10,6 +10,9 @@
@@ -22213,7 +23537,7 @@ index f2f9b39..2ae1bf8 100644
{
unsigned ret;
-@@ -46,121 +49,170 @@ copy_user_generic(void *to, const void *from, unsigned len)
+@@ -46,152 +49,201 @@ copy_user_generic(void *to, const void *from, unsigned len)
}
__must_check unsigned long
@@ -22250,43 +23574,57 @@ index f2f9b39..2ae1bf8 100644
- return copy_user_generic(dst, (__force void *)src, size);
+ return copy_user_generic(dst, (__force_kernel const void *)____m(src), size);
switch (size) {
-- case 1:__get_user_asm(*(u8 *)dst, (u8 __user *)src,
-+ case 1:__get_user_asm(*(u8 *)dst, (const u8 __user *)src,
+ case 1:
+ __uaccess_begin();
+- __get_user_asm(*(u8 *)dst, (u8 __user *)src,
++ __get_user_asm(*(u8 *)dst, (const u8 __user *)src,
ret, "b", "b", "=q", 1);
+ __uaccess_end();
return ret;
-- case 2:__get_user_asm(*(u16 *)dst, (u16 __user *)src,
-+ case 2:__get_user_asm(*(u16 *)dst, (const u16 __user *)src,
+ case 2:
+ __uaccess_begin();
+- __get_user_asm(*(u16 *)dst, (u16 __user *)src,
++ __get_user_asm(*(u16 *)dst, (const u16 __user *)src,
ret, "w", "w", "=r", 2);
+ __uaccess_end();
return ret;
-- case 4:__get_user_asm(*(u32 *)dst, (u32 __user *)src,
-+ case 4:__get_user_asm(*(u32 *)dst, (const u32 __user *)src,
+ case 4:
+ __uaccess_begin();
+- __get_user_asm(*(u32 *)dst, (u32 __user *)src,
++ __get_user_asm(*(u32 *)dst, (const u32 __user *)src,
ret, "l", "k", "=r", 4);
+ __uaccess_end();
return ret;
-- case 8:__get_user_asm(*(u64 *)dst, (u64 __user *)src,
-+ case 8:__get_user_asm(*(u64 *)dst, (const u64 __user *)src,
+ case 8:
+ __uaccess_begin();
+- __get_user_asm(*(u64 *)dst, (u64 __user *)src,
++ __get_user_asm(*(u64 *)dst, (const u64 __user *)src,
ret, "q", "", "=r", 8);
+ __uaccess_end();
return ret;
case 10:
+ __uaccess_begin();
- __get_user_asm(*(u64 *)dst, (u64 __user *)src,
+ __get_user_asm(*(u64 *)dst, (const u64 __user *)src,
ret, "q", "", "=r", 10);
- if (unlikely(ret))
- return ret;
- __get_user_asm(*(u16 *)(8 + (char *)dst),
-- (u16 __user *)(8 + (char __user *)src),
-+ (const u16 __user *)(8 + (const char __user *)src),
- ret, "w", "w", "=r", 2);
+ if (likely(!ret))
+ __get_user_asm(*(u16 *)(8 + (char *)dst),
+- (u16 __user *)(8 + (char __user *)src),
++ (const u16 __user *)(8 + (const char __user *)src),
+ ret, "w", "w", "=r", 2);
+ __uaccess_end();
return ret;
case 16:
+ __uaccess_begin();
- __get_user_asm(*(u64 *)dst, (u64 __user *)src,
+ __get_user_asm(*(u64 *)dst, (const u64 __user *)src,
ret, "q", "", "=r", 16);
- if (unlikely(ret))
- return ret;
- __get_user_asm(*(u64 *)(8 + (char *)dst),
-- (u64 __user *)(8 + (char __user *)src),
-+ (const u64 __user *)(8 + (const char __user *)src),
- ret, "q", "", "=r", 8);
+ if (likely(!ret))
+ __get_user_asm(*(u64 *)(8 + (char *)dst),
+- (u64 __user *)(8 + (char __user *)src),
++ (const u64 __user *)(8 + (const char __user *)src),
+ ret, "q", "", "=r", 8);
+ __uaccess_end();
return ret;
default:
- return copy_user_generic(dst, (__force void *)src, size);
@@ -22332,43 +23670,59 @@ index f2f9b39..2ae1bf8 100644
- return copy_user_generic((__force void *)dst, src, size);
+ return copy_user_generic((__force_kernel void *)____m(dst), src, size);
switch (size) {
-- case 1:__put_user_asm(*(u8 *)src, (u8 __user *)dst,
-+ case 1:__put_user_asm(*(const u8 *)src, (u8 __user *)dst,
+ case 1:
+ __uaccess_begin();
+- __put_user_asm(*(u8 *)src, (u8 __user *)dst,
++ __put_user_asm(*(const u8 *)src, (u8 __user *)dst,
ret, "b", "b", "iq", 1);
+ __uaccess_end();
return ret;
-- case 2:__put_user_asm(*(u16 *)src, (u16 __user *)dst,
-+ case 2:__put_user_asm(*(const u16 *)src, (u16 __user *)dst,
+ case 2:
+ __uaccess_begin();
+- __put_user_asm(*(u16 *)src, (u16 __user *)dst,
++ __put_user_asm(*(const u16 *)src, (u16 __user *)dst,
ret, "w", "w", "ir", 2);
+ __uaccess_end();
return ret;
-- case 4:__put_user_asm(*(u32 *)src, (u32 __user *)dst,
-+ case 4:__put_user_asm(*(const u32 *)src, (u32 __user *)dst,
+ case 4:
+ __uaccess_begin();
+- __put_user_asm(*(u32 *)src, (u32 __user *)dst,
++ __put_user_asm(*(const u32 *)src, (u32 __user *)dst,
ret, "l", "k", "ir", 4);
+ __uaccess_end();
return ret;
-- case 8:__put_user_asm(*(u64 *)src, (u64 __user *)dst,
-+ case 8:__put_user_asm(*(const u64 *)src, (u64 __user *)dst,
+ case 8:
+ __uaccess_begin();
+- __put_user_asm(*(u64 *)src, (u64 __user *)dst,
++ __put_user_asm(*(const u64 *)src, (u64 __user *)dst,
ret, "q", "", "er", 8);
+ __uaccess_end();
return ret;
case 10:
+ __uaccess_begin();
- __put_user_asm(*(u64 *)src, (u64 __user *)dst,
+ __put_user_asm(*(const u64 *)src, (u64 __user *)dst,
ret, "q", "", "er", 10);
- if (unlikely(ret))
- return ret;
- asm("":::"memory");
-- __put_user_asm(4[(u16 *)src], 4 + (u16 __user *)dst,
-+ __put_user_asm(4[(const u16 *)src], 4 + (u16 __user *)dst,
- ret, "w", "w", "ir", 2);
+ if (likely(!ret)) {
+ asm("":::"memory");
+- __put_user_asm(4[(u16 *)src], 4 + (u16 __user *)dst,
++ __put_user_asm(4[(const u16 *)src], 4 + (u16 __user *)dst,
+ ret, "w", "w", "ir", 2);
+ }
+ __uaccess_end();
return ret;
case 16:
+ __uaccess_begin();
- __put_user_asm(*(u64 *)src, (u64 __user *)dst,
+ __put_user_asm(*(const u64 *)src, (u64 __user *)dst,
ret, "q", "", "er", 16);
- if (unlikely(ret))
- return ret;
- asm("":::"memory");
-- __put_user_asm(1[(u64 *)src], 1 + (u64 __user *)dst,
-+ __put_user_asm(1[(const u64 *)src], 1 + (u64 __user *)dst,
- ret, "q", "", "er", 8);
+ if (likely(!ret)) {
+ asm("":::"memory");
+- __put_user_asm(1[(u64 *)src], 1 + (u64 __user *)dst,
++ __put_user_asm(1[(const u64 *)src], 1 + (u64 __user *)dst,
+ ret, "q", "", "er", 8);
+ }
+ __uaccess_end();
return ret;
default:
- return copy_user_generic((__force void *)dst, src, size);
@@ -22411,39 +23765,40 @@ index f2f9b39..2ae1bf8 100644
switch (size) {
case 1: {
u8 tmp;
+ __uaccess_begin();
- __get_user_asm(tmp, (u8 __user *)src,
+ __get_user_asm(tmp, (const u8 __user *)src,
ret, "b", "b", "=q", 1);
if (likely(!ret))
__put_user_asm(tmp, (u8 __user *)dst,
-@@ -169,7 +221,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
- }
+@@ -202,7 +254,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
case 2: {
u16 tmp;
+ __uaccess_begin();
- __get_user_asm(tmp, (u16 __user *)src,
+ __get_user_asm(tmp, (const u16 __user *)src,
ret, "w", "w", "=r", 2);
if (likely(!ret))
__put_user_asm(tmp, (u16 __user *)dst,
-@@ -179,7 +231,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
-
+@@ -214,7 +266,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
case 4: {
u32 tmp;
+ __uaccess_begin();
- __get_user_asm(tmp, (u32 __user *)src,
+ __get_user_asm(tmp, (const u32 __user *)src,
ret, "l", "k", "=r", 4);
if (likely(!ret))
__put_user_asm(tmp, (u32 __user *)dst,
-@@ -188,7 +240,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
- }
+@@ -225,7 +277,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
case 8: {
u64 tmp;
+ __uaccess_begin();
- __get_user_asm(tmp, (u64 __user *)src,
+ __get_user_asm(tmp, (const u64 __user *)src,
ret, "q", "", "=r", 8);
if (likely(!ret))
__put_user_asm(tmp, (u64 __user *)dst,
-@@ -196,41 +248,58 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
+@@ -234,41 +286,58 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
return ret;
}
default:
@@ -22529,10 +23884,10 @@ 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 cd0fc0c..64e7559 100644
+index 1ae89a2..a279bf4 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
-@@ -128,7 +128,7 @@ struct x86_init_ops {
+@@ -126,7 +126,7 @@ struct x86_init_ops {
struct x86_init_timers timers;
struct x86_init_iommu iommu;
struct x86_init_pci pci;
@@ -22541,7 +23896,7 @@ index cd0fc0c..64e7559 100644
/**
* struct x86_cpuinit_ops - platform specific cpu hotplug setups
-@@ -139,7 +139,7 @@ struct x86_cpuinit_ops {
+@@ -137,7 +137,7 @@ struct x86_cpuinit_ops {
void (*setup_percpu_clockev)(void);
void (*early_percpu_clock_init)(void);
void (*fixup_cpu_id)(struct cpuinfo_x86 *c, int node);
@@ -22550,7 +23905,7 @@ index cd0fc0c..64e7559 100644
struct timespec;
-@@ -167,7 +167,7 @@ struct x86_platform_ops {
+@@ -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);
@@ -22559,7 +23914,7 @@ index cd0fc0c..64e7559 100644
struct pci_dev;
-@@ -176,12 +176,12 @@ struct x86_msi_ops {
+@@ -174,12 +174,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);
@@ -22931,10 +24286,10 @@ index 25f9093..f630040 100644
bp_int3_handler = handler;
bp_int3_addr = (u8 *)addr + sizeof(int3);
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
-index 2f69e3b..f301e5f 100644
+index 8a5cdda..ef3aabc 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
-@@ -171,7 +171,7 @@ int first_system_vector = FIRST_SYSTEM_VECTOR;
+@@ -177,7 +177,7 @@ int first_system_vector = FIRST_SYSTEM_VECTOR;
/*
* Debug level, exported for io_apic.c
*/
@@ -22943,7 +24298,7 @@ index 2f69e3b..f301e5f 100644
int pic_mode;
-@@ -1868,7 +1868,7 @@ static void __smp_error_interrupt(struct pt_regs *regs)
+@@ -1878,7 +1878,7 @@ static void __smp_error_interrupt(struct pt_regs *regs)
apic_write(APIC_ESR, 0);
v = apic_read(APIC_ESR);
ack_APIC_irq();
@@ -22953,7 +24308,7 @@ index 2f69e3b..f301e5f 100644
apic_printk(APIC_DEBUG, KERN_DEBUG "APIC error on CPU%d: %02x",
smp_processor_id(), v);
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c
-index f92ab36..1884323 100644
+index 9968f30..b06feae 100644
--- a/arch/x86/kernel/apic/apic_flat_64.c
+++ b/arch/x86/kernel/apic/apic_flat_64.c
@@ -25,7 +25,7 @@
@@ -22974,7 +24329,7 @@ index f92ab36..1884323 100644
.name = "flat",
.probe = flat_probe,
.acpi_madt_oem_check = flat_acpi_madt_oem_check,
-@@ -259,7 +259,7 @@ static int physflat_probe(void)
+@@ -249,7 +249,7 @@ static int physflat_probe(void)
return 0;
}
@@ -22984,10 +24339,10 @@ index f92ab36..1884323 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 0d96749..ce6b722 100644
+index 331a7a0..2173347 100644
--- a/arch/x86/kernel/apic/apic_noop.c
+++ b/arch/x86/kernel/apic/apic_noop.c
-@@ -108,7 +108,7 @@ static void noop_apic_write(u32 reg, u32 v)
+@@ -109,7 +109,7 @@ static void noop_apic_write(u32 reg, u32 v)
WARN_ON_ONCE(cpu_has_apic && !disable_apic);
}
@@ -22997,10 +24352,10 @@ index 0d96749..ce6b722 100644
.probe = noop_probe,
.acpi_madt_oem_check = NULL,
diff --git a/arch/x86/kernel/apic/bigsmp_32.c b/arch/x86/kernel/apic/bigsmp_32.c
-index 971cf88..a8e01ae 100644
+index cf9bd89..75fcb85 100644
--- a/arch/x86/kernel/apic/bigsmp_32.c
+++ b/arch/x86/kernel/apic/bigsmp_32.c
-@@ -147,7 +147,7 @@ static int probe_bigsmp(void)
+@@ -142,7 +142,7 @@ static int probe_bigsmp(void)
return dmi_bigsmp;
}
@@ -23010,7 +24365,7 @@ index 971cf88..a8e01ae 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..1426add 100644
+index fdb0fbf..352c2f0 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)
@@ -23040,6 +24395,15 @@ index fdb0fbf..1426add 100644
.name = "IO-APIC",
.irq_startup = startup_ioapic_irq,
.irq_mask = mask_ioapic_irq,
+@@ -1878,7 +1878,7 @@ static struct irq_chip ioapic_chip __read_mostly = {
+ .flags = IRQCHIP_SKIP_SET_WAKE,
+ };
+
+-static struct irq_chip ioapic_ir_chip __read_mostly = {
++static struct irq_chip ioapic_ir_chip = {
+ .name = "IR-IO-APIC",
+ .irq_startup = startup_ioapic_irq,
+ .irq_mask = mask_ioapic_irq,
@@ -1936,7 +1936,7 @@ static void ack_lapic_irq(struct irq_data *data)
ack_APIC_irq();
}
@@ -23050,10 +24414,10 @@ index fdb0fbf..1426add 100644
.irq_mask = mask_lapic_irq,
.irq_unmask = unmask_lapic_irq,
diff --git a/arch/x86/kernel/apic/msi.c b/arch/x86/kernel/apic/msi.c
-index 5f1feb6..199d454 100644
+index ade2532..5fc7f4f9 100644
--- a/arch/x86/kernel/apic/msi.c
+++ b/arch/x86/kernel/apic/msi.c
-@@ -267,7 +267,7 @@ static void hpet_msi_write_msg(struct irq_data *data, struct msi_msg *msg)
+@@ -269,7 +269,7 @@ static void hpet_msi_write_msg(struct irq_data *data, struct msi_msg *msg)
hpet_msi_write(irq_data_get_irq_handler_data(data), msg);
}
@@ -23063,7 +24427,7 @@ index 5f1feb6..199d454 100644
.irq_unmask = hpet_msi_unmask,
.irq_mask = hpet_msi_mask,
diff --git a/arch/x86/kernel/apic/probe_32.c b/arch/x86/kernel/apic/probe_32.c
-index 7694ae6..5abb08e 100644
+index f316e34..48c21c5 100644
--- a/arch/x86/kernel/apic/probe_32.c
+++ b/arch/x86/kernel/apic/probe_32.c
@@ -72,7 +72,7 @@ static int probe_default(void)
@@ -23075,7 +24439,7 @@ index 7694ae6..5abb08e 100644
.name = "default",
.probe = probe_default,
-@@ -126,7 +126,7 @@ static struct apic apic_default = {
+@@ -127,7 +127,7 @@ static struct apic apic_default = {
apic_driver(apic_default);
@@ -23085,10 +24449,10 @@ index 7694ae6..5abb08e 100644
static int cmdline_apic __initdata;
diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
-index 7af2505..d1ea63f 100644
+index ad59d70..c3570b7 100644
--- a/arch/x86/kernel/apic/vector.c
+++ b/arch/x86/kernel/apic/vector.c
-@@ -36,6 +36,7 @@ static struct irq_chip lapic_controller;
+@@ -37,6 +37,7 @@ static struct irq_chip lapic_controller;
static struct apic_chip_data *legacy_irq_data[NR_IRQS_LEGACY];
#endif
@@ -23096,7 +24460,7 @@ index 7af2505..d1ea63f 100644
void lock_vector_lock(void)
{
/* Used to the online set of cpus does not change
-@@ -44,6 +45,7 @@ void lock_vector_lock(void)
+@@ -45,6 +46,7 @@ void lock_vector_lock(void)
raw_spin_lock(&vector_lock);
}
@@ -23105,10 +24469,10 @@ index 7af2505..d1ea63f 100644
{
raw_spin_unlock(&vector_lock);
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
-index cc8311c..d72f027 100644
+index aca8b75..4c1a7f5 100644
--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
-@@ -234,7 +234,7 @@ static void cluster_vector_allocation_domain(int cpu, struct cpumask *retmask,
+@@ -242,7 +242,7 @@ static void cluster_vector_allocation_domain(int cpu, struct cpumask *retmask,
cpumask_and(retmask, mask, per_cpu(cpus_in_cluster, cpu));
}
@@ -23118,10 +24482,10 @@ index cc8311c..d72f027 100644
.name = "cluster x2apic",
.probe = x2apic_cluster_probe,
diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c
-index 662e915..e721634 100644
+index a1242e2..0e7f712 100644
--- a/arch/x86/kernel/apic/x2apic_phys.c
+++ b/arch/x86/kernel/apic/x2apic_phys.c
-@@ -90,7 +90,7 @@ static int x2apic_phys_probe(void)
+@@ -98,7 +98,7 @@ static int x2apic_phys_probe(void)
return apic == &apic_x2apic_phys;
}
@@ -23131,7 +24495,7 @@ index 662e915..e721634 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 4a13946..067ed8c 100644
+index 624db005..86c508a 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)
@@ -23228,7 +24592,7 @@ index 052c9c3..bc22ccdba 100644
proc_create("apm", 0, NULL, &apm_file_ops);
diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c
-index 439df97..884bc37 100644
+index 84a7524..e8edc49 100644
--- a/arch/x86/kernel/asm-offsets.c
+++ b/arch/x86/kernel/asm-offsets.c
@@ -32,6 +32,8 @@ void common(void) {
@@ -23240,8 +24604,8 @@ index 439df97..884bc37 100644
BLANK();
OFFSET(crypto_tfm_ctx_offset, crypto_tfm, __crt_ctx);
-@@ -70,8 +72,26 @@ void common(void) {
- #endif
+@@ -67,8 +69,26 @@ void common(void) {
+ OFFSET(PV_CPU_iret, pv_cpu_ops, iret);
OFFSET(PV_CPU_read_cr0, pv_cpu_ops, read_cr0);
OFFSET(PV_MMU_read_cr2, pv_mmu_ops, read_cr2);
+
@@ -23268,10 +24632,10 @@ index 439df97..884bc37 100644
BLANK();
OFFSET(XEN_vcpu_info_mask, vcpu_info, evtchn_upcall_mask);
diff --git a/arch/x86/kernel/asm-offsets_64.c b/arch/x86/kernel/asm-offsets_64.c
-index d8f42f9..a46f1fc 100644
+index f2edafb..460f4e6 100644
--- a/arch/x86/kernel/asm-offsets_64.c
+++ b/arch/x86/kernel/asm-offsets_64.c
-@@ -59,6 +59,7 @@ int main(void)
+@@ -58,6 +58,7 @@ int main(void)
BLANK();
#undef ENTRY
@@ -23295,10 +24659,10 @@ index 5803130..c899b3d 100644
obj-y += common.o
obj-y += rdrand.o
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
-index a8816b3..a9c0bf8 100644
+index a07956a..368a2eb 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
-@@ -767,7 +767,7 @@ static void init_amd(struct cpuinfo_x86 *c)
+@@ -766,7 +766,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) */
@@ -23328,7 +24692,7 @@ index 04f0fe5..3c0598c 100644
/*
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index c2b7522..a9a9453 100644
+index 37830de..54677f5 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 = {
@@ -23511,7 +24875,7 @@ index c2b7522..a9a9453 100644
gdt_descr.size = GDT_SIZE - 1;
load_gdt(&gdt_descr);
/* Reload the per-cpu base */
-@@ -919,6 +968,20 @@ static void identify_cpu(struct cpuinfo_x86 *c)
+@@ -916,6 +965,20 @@ static void identify_cpu(struct cpuinfo_x86 *c)
setup_smep(c);
setup_smap(c);
@@ -23532,7 +24896,7 @@ index c2b7522..a9a9453 100644
/*
* The vendor-specific functions might have changed features.
* Now we do "generic changes."
-@@ -993,7 +1056,7 @@ void enable_sep_cpu(void)
+@@ -990,7 +1053,7 @@ void enable_sep_cpu(void)
int cpu;
cpu = get_cpu();
@@ -23541,7 +24905,7 @@ index c2b7522..a9a9453 100644
if (!boot_cpu_has(X86_FEATURE_SEP))
goto out;
-@@ -1139,10 +1202,12 @@ static __init int setup_disablecpuid(char *arg)
+@@ -1136,10 +1199,12 @@ static __init int setup_disablecpuid(char *arg)
}
__setup("clearcpuid=", setup_disablecpuid);
@@ -23557,7 +24921,7 @@ index c2b7522..a9a9453 100644
DEFINE_PER_CPU_FIRST(union irq_stack_union,
irq_stack_union) __aligned(PAGE_SIZE) __visible;
-@@ -1254,21 +1319,21 @@ EXPORT_PER_CPU_SYMBOL(current_task);
+@@ -1251,21 +1316,21 @@ EXPORT_PER_CPU_SYMBOL(current_task);
DEFINE_PER_CPU(int, __preempt_count) = INIT_PREEMPT_COUNT;
EXPORT_PER_CPU_SYMBOL(__preempt_count);
@@ -23586,7 +24950,7 @@ index c2b7522..a9a9453 100644
/*
* Clear all 6 debug registers:
*/
-@@ -1344,7 +1409,7 @@ void cpu_init(void)
+@@ -1341,7 +1406,7 @@ void cpu_init(void)
*/
load_ucode_ap();
@@ -23595,7 +24959,7 @@ index c2b7522..a9a9453 100644
oist = &per_cpu(orig_ist, cpu);
#ifdef CONFIG_NUMA
-@@ -1376,7 +1441,6 @@ void cpu_init(void)
+@@ -1373,7 +1438,6 @@ void cpu_init(void)
wrmsrl(MSR_KERNEL_GS_BASE, 0);
barrier();
@@ -23603,7 +24967,7 @@ index c2b7522..a9a9453 100644
x2apic_setup();
/*
-@@ -1428,7 +1492,7 @@ void cpu_init(void)
+@@ -1425,7 +1489,7 @@ void cpu_init(void)
{
int cpu = smp_processor_id();
struct task_struct *curr = current;
@@ -23613,7 +24977,7 @@ index c2b7522..a9a9453 100644
wait_for_master_cpu(cpu);
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
-index e38d338..48498df 100644
+index 0b6c523..54d8406 100644
--- a/arch/x86/kernel/cpu/intel_cacheinfo.c
+++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
@@ -519,25 +519,23 @@ cache_private_attrs_is_visible(struct kobject *kobj,
@@ -23665,7 +25029,7 @@ index e38d338..48498df 100644
return &cache_private_group;
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
-index 7e8a736..c00fc59 100644
+index a006f4c..9c0afe2 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -47,6 +47,7 @@
@@ -23676,7 +25040,7 @@ index 7e8a736..c00fc59 100644
#include "mce-internal.h"
-@@ -212,8 +213,7 @@ static struct notifier_block mce_srao_nb;
+@@ -211,8 +212,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. */
@@ -23686,7 +25050,7 @@ index 7e8a736..c00fc59 100644
atomic_notifier_chain_register(&x86_mce_decoder_chain, nb);
}
-@@ -237,7 +237,7 @@ static void print_mce(struct mce *m)
+@@ -236,7 +236,7 @@ static void print_mce(struct mce *m)
!(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "",
m->cs, m->ip);
@@ -23695,7 +25059,7 @@ index 7e8a736..c00fc59 100644
print_symbol("{%s}", m->ip);
pr_cont("\n");
}
-@@ -270,10 +270,10 @@ static void print_mce(struct mce *m)
+@@ -269,10 +269,10 @@ static void print_mce(struct mce *m)
#define PANIC_TIMEOUT 5 /* 5 seconds */
@@ -23708,7 +25072,7 @@ index 7e8a736..c00fc59 100644
/* Panic in progress. Enable interrupts and wait for final IPI */
static void wait_for_panic(void)
-@@ -297,7 +297,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+@@ -296,7 +296,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
/*
* Make sure only one CPU runs in machine check panic
*/
@@ -23717,7 +25081,7 @@ index 7e8a736..c00fc59 100644
wait_for_panic();
barrier();
-@@ -305,7 +305,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
+@@ -304,7 +304,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
console_verbose();
} else {
/* Don't log too much for fake panic */
@@ -23726,7 +25090,7 @@ index 7e8a736..c00fc59 100644
return;
}
/* First print corrected ones that are still unlogged */
-@@ -344,7 +344,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)
if (!fake_panic) {
if (panic_timeout == 0)
panic_timeout = mca_cfg.panic_timeout;
@@ -23735,7 +25099,7 @@ index 7e8a736..c00fc59 100644
} else
pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg);
}
-@@ -697,7 +697,7 @@ static int mce_timed_out(u64 *t, const char *msg)
+@@ -717,7 +717,7 @@ static int mce_timed_out(u64 *t, const char *msg)
* might have been modified by someone else.
*/
rmb();
@@ -23744,7 +25108,7 @@ index 7e8a736..c00fc59 100644
wait_for_panic();
if (!mca_cfg.monarch_timeout)
goto out;
-@@ -1669,7 +1669,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)
+@@ -1671,7 +1671,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)
}
/* Call the installed machine check handler for this CPU setup. */
@@ -23753,7 +25117,7 @@ index 7e8a736..c00fc59 100644
unexpected_machine_check;
/*
-@@ -1698,7 +1698,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
+@@ -1700,7 +1700,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
return;
}
@@ -23763,7 +25127,7 @@ index 7e8a736..c00fc59 100644
__mcheck_cpu_init_generic();
__mcheck_cpu_init_vendor(c);
-@@ -1729,7 +1731,7 @@ void mcheck_cpu_clear(struct cpuinfo_x86 *c)
+@@ -1731,7 +1733,7 @@ void mcheck_cpu_clear(struct cpuinfo_x86 *c)
*/
static DEFINE_SPINLOCK(mce_chrdev_state_lock);
@@ -23772,7 +25136,7 @@ index 7e8a736..c00fc59 100644
static int mce_chrdev_open_exclu; /* already open exclusive? */
static int mce_chrdev_open(struct inode *inode, struct file *file)
-@@ -1737,7 +1739,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
+@@ -1739,7 +1741,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
spin_lock(&mce_chrdev_state_lock);
if (mce_chrdev_open_exclu ||
@@ -23781,7 +25145,7 @@ index 7e8a736..c00fc59 100644
spin_unlock(&mce_chrdev_state_lock);
return -EBUSY;
-@@ -1745,7 +1747,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
+@@ -1747,7 +1749,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file)
if (file->f_flags & O_EXCL)
mce_chrdev_open_exclu = 1;
@@ -23790,7 +25154,7 @@ index 7e8a736..c00fc59 100644
spin_unlock(&mce_chrdev_state_lock);
-@@ -1756,7 +1758,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file)
+@@ -1758,7 +1760,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file)
{
spin_lock(&mce_chrdev_state_lock);
@@ -23799,7 +25163,7 @@ index 7e8a736..c00fc59 100644
mce_chrdev_open_exclu = 0;
spin_unlock(&mce_chrdev_state_lock);
-@@ -2446,7 +2448,7 @@ static __init void mce_init_banks(void)
+@@ -2448,7 +2450,7 @@ static __init void mce_init_banks(void)
for (i = 0; i < mca_cfg.banks; i++) {
struct mce_bank *b = &mce_banks[i];
@@ -23808,7 +25172,7 @@ index 7e8a736..c00fc59 100644
sysfs_attr_init(&a->attr);
a->attr.name = b->attrname;
-@@ -2553,7 +2555,7 @@ struct dentry *mce_get_debugfs_dir(void)
+@@ -2555,7 +2557,7 @@ struct dentry *mce_get_debugfs_dir(void)
static void mce_reset(void)
{
cpu_missing = 0;
@@ -23862,10 +25226,10 @@ index 01dd870..6fd1c59 100644
wmb();
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
-index ac8975a..37d9aa6 100644
+index 4f4735b..05b4ca6 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
-@@ -1016,13 +1016,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
+@@ -1012,13 +1012,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
static int get_ucode_user(void *to, const void *from, size_t n)
{
@@ -23895,7 +25259,7 @@ index 20e242e..14b1629 100644
.detect = ms_hyperv_platform,
.init_platform = ms_hyperv_init_platform,
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
-index 3b533cf..b40d426 100644
+index c870af1..173e1cc 100644
--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
@@ -723,7 +723,8 @@ static DEFINE_RAW_SPINLOCK(set_atomicity_lock);
@@ -23919,7 +25283,7 @@ index 3b533cf..b40d426 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 f891b47..9dff300 100644
+index 5c3d149..a052b18 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);
@@ -23945,10 +25309,10 @@ index 951884d..4796b75 100644
extern int generic_get_free_region(unsigned long base, unsigned long size,
int replace_reg);
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
-index a3aeb2c..935e1d7 100644
+index 6532f5b..5de6c88 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
-@@ -1531,7 +1531,7 @@ static void __init pmu_check_apic(void)
+@@ -1534,7 +1534,7 @@ static void __init pmu_check_apic(void)
}
@@ -23957,7 +25321,7 @@ index a3aeb2c..935e1d7 100644
.name = "format",
.attrs = NULL,
};
-@@ -1630,7 +1630,7 @@ static struct attribute *events_attr[] = {
+@@ -1642,7 +1642,7 @@ static struct attribute *events_attr[] = {
NULL,
};
@@ -23966,7 +25330,7 @@ index a3aeb2c..935e1d7 100644
.name = "events",
.attrs = events_attr,
};
-@@ -2216,7 +2216,7 @@ valid_user_frame(const void __user *fp, unsigned long size)
+@@ -2228,7 +2228,7 @@ valid_user_frame(const void __user *fp, unsigned long size)
static unsigned long get_segment_base(unsigned int segment)
{
struct desc_struct *desc;
@@ -23975,7 +25339,7 @@ index a3aeb2c..935e1d7 100644
if ((segment & SEGMENT_TI_MASK) == SEGMENT_LDT) {
#ifdef CONFIG_MODIFY_LDT_SYSCALL
-@@ -2238,7 +2238,7 @@ static unsigned long get_segment_base(unsigned int segment)
+@@ -2250,7 +2250,7 @@ static unsigned long get_segment_base(unsigned int segment)
if (idx > GDT_ENTRIES)
return 0;
@@ -23984,20 +25348,20 @@ index a3aeb2c..935e1d7 100644
}
return get_desc_base(desc);
-@@ -2328,7 +2328,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
+@@ -2355,7 +2355,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
break;
perf_callchain_store(entry, frame.return_address);
-- fp = frame.next_frame;
-+ fp = (const void __force_user *)frame.next_frame;
+- fp = (void __user *)frame.next_frame;
++ fp = (void __force_user *)frame.next_frame;
}
+ pagefault_enable();
}
-
diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h
-index ee70445..7c6859c 100644
+index 98be6d6..b44c81a 100644
--- a/arch/x86/kernel/cpu/perf_event.h
+++ b/arch/x86/kernel/cpu/perf_event.h
-@@ -792,7 +792,7 @@ static inline void set_linear_ip(struct pt_regs *regs, unsigned long ip)
+@@ -787,7 +787,7 @@ static inline void set_linear_ip(struct pt_regs *regs, unsigned long ip)
regs->cs = kernel_ip(ip) ? __KERNEL_CS : __USER_CS;
if (regs->flags & X86_VM_MASK)
regs->flags ^= (PERF_EFLAGS_VM | X86_VM_MASK);
@@ -24007,9 +25371,25 @@ index ee70445..7c6859c 100644
ssize_t x86_event_sysfs_show(char *page, u64 config, u64 event);
diff --git a/arch/x86/kernel/cpu/perf_event_amd_iommu.c b/arch/x86/kernel/cpu/perf_event_amd_iommu.c
-index 97242a9..cf9c30e 100644
+index 97242a9..ba15e8c 100644
--- a/arch/x86/kernel/cpu/perf_event_amd_iommu.c
+++ b/arch/x86/kernel/cpu/perf_event_amd_iommu.c
+@@ -80,12 +80,12 @@ static struct attribute_group amd_iommu_format_group = {
+ * sysfs events attributes
+ *---------------------------------------------*/
+ struct amd_iommu_event_desc {
+- struct kobj_attribute attr;
++ struct device_attribute attr;
+ const char *event;
+ };
+
+-static ssize_t _iommu_event_show(struct kobject *kobj,
+- struct kobj_attribute *attr, char *buf)
++static ssize_t _iommu_event_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
+ {
+ struct amd_iommu_event_desc *event =
+ container_of(attr, struct amd_iommu_event_desc, attr);
@@ -402,7 +402,7 @@ static void perf_iommu_del(struct perf_event *event, int flags)
static __init int _init_events_attrs(struct perf_amd_iommu *perf_iommu)
{
@@ -24020,10 +25400,10 @@ index 97242a9..cf9c30e 100644
while (amd_iommu_v2_event_descs[i].attr.attr.name)
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
-index 078de2e..7ac50e5 100644
+index 760aec1..3c64694 100644
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
-@@ -2140,6 +2140,8 @@ __intel_get_event_constraints(struct cpu_hw_events *cpuc, int idx,
+@@ -2185,6 +2185,8 @@ __intel_get_event_constraints(struct cpu_hw_events *cpuc, int idx,
}
static void
@@ -24032,7 +25412,7 @@ index 078de2e..7ac50e5 100644
intel_start_scheduling(struct cpu_hw_events *cpuc)
{
struct intel_excl_cntrs *excl_cntrs = cpuc->excl_cntrs;
-@@ -2149,14 +2151,18 @@ intel_start_scheduling(struct cpu_hw_events *cpuc)
+@@ -2194,14 +2196,18 @@ intel_start_scheduling(struct cpu_hw_events *cpuc)
/*
* nothing needed if in group validation mode
*/
@@ -24053,7 +25433,7 @@ index 078de2e..7ac50e5 100644
xl = &excl_cntrs->states[tid];
-@@ -2196,6 +2202,8 @@ static void intel_commit_scheduling(struct cpu_hw_events *cpuc, int idx, int cnt
+@@ -2241,6 +2247,8 @@ static void intel_commit_scheduling(struct cpu_hw_events *cpuc, int idx, int cnt
}
static void
@@ -24062,7 +25442,7 @@ index 078de2e..7ac50e5 100644
intel_stop_scheduling(struct cpu_hw_events *cpuc)
{
struct intel_excl_cntrs *excl_cntrs = cpuc->excl_cntrs;
-@@ -2205,13 +2213,18 @@ intel_stop_scheduling(struct cpu_hw_events *cpuc)
+@@ -2250,13 +2258,18 @@ intel_stop_scheduling(struct cpu_hw_events *cpuc)
/*
* nothing needed if in group validation mode
*/
@@ -24083,7 +25463,7 @@ index 078de2e..7ac50e5 100644
xl = &excl_cntrs->states[tid];
-@@ -2394,19 +2407,22 @@ static void intel_put_excl_constraints(struct cpu_hw_events *cpuc,
+@@ -2439,19 +2452,22 @@ static void intel_put_excl_constraints(struct cpu_hw_events *cpuc,
* unused now.
*/
if (hwc->idx >= 0) {
@@ -24108,7 +25488,7 @@ index 078de2e..7ac50e5 100644
raw_spin_unlock(&excl_cntrs->lock);
}
}
-@@ -3279,10 +3295,10 @@ __init int intel_pmu_init(void)
+@@ -3360,10 +3376,10 @@ __init int intel_pmu_init(void)
x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3);
if (boot_cpu_has(X86_FEATURE_PDCM)) {
@@ -24169,7 +25549,7 @@ index a316ca9..99344f4 100644
ret = intel_cqm_setup_rmid_cache();
if (ret)
diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c
-index 7abb2b8..ea24517 100644
+index 9551401..649b91c 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_ds.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c
@@ -598,7 +598,7 @@ int intel_pmu_drain_bts_buffer(void)
@@ -24181,7 +25561,7 @@ index 7abb2b8..ea24517 100644
x86_pmu.drain_pebs(&regs);
}
-@@ -869,7 +869,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs)
+@@ -876,7 +876,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs)
struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
unsigned long from = cpuc->lbr_entries[0].from;
unsigned long old_to, to = cpuc->lbr_entries[0].to;
@@ -24190,7 +25570,7 @@ index 7abb2b8..ea24517 100644
int is_64bit = 0;
void *kaddr;
int size;
-@@ -921,6 +921,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs)
+@@ -928,6 +928,7 @@ static int intel_pmu_pebs_fixup_ip(struct pt_regs *regs)
} else {
kaddr = (void *)to;
}
@@ -24198,7 +25578,7 @@ index 7abb2b8..ea24517 100644
do {
struct insn insn;
-@@ -1069,7 +1070,7 @@ static void setup_pebs_sample_data(struct perf_event *event,
+@@ -1076,7 +1077,7 @@ static void setup_pebs_sample_data(struct perf_event *event,
}
if (event->attr.precise_ip > 1 && x86_pmu.intel_cap.pebs_format >= 2) {
@@ -24208,10 +25588,10 @@ index 7abb2b8..ea24517 100644
} else if (event->attr.precise_ip > 1 && intel_pmu_pebs_fixup_ip(regs))
regs->flags |= PERF_EFLAGS_EXACT;
diff --git a/arch/x86/kernel/cpu/perf_event_intel_lbr.c b/arch/x86/kernel/cpu/perf_event_intel_lbr.c
-index 659f01e..ef67d60 100644
+index 653f88d..11b6b78 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_lbr.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_lbr.c
-@@ -686,7 +686,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort)
+@@ -704,7 +704,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort)
* Ensure we don't blindy read any address by validating it is
* a known text address.
*/
@@ -24220,7 +25600,7 @@ index 659f01e..ef67d60 100644
addr = (void *)from;
/*
* Assume we can get the maximum possible size
-@@ -708,7 +708,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort)
+@@ -726,7 +726,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort)
#ifdef CONFIG_X86_64
is64 = kernel_ip((unsigned long)addr) || !test_thread_flag(TIF_IA32);
#endif
@@ -24230,10 +25610,10 @@ index 659f01e..ef67d60 100644
if (!insn.opcode.got)
return X86_BR_ABORT;
diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c
-index 868e119..be39b45 100644
+index c0bbd10..727ae15e 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_pt.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c
-@@ -132,14 +132,10 @@ static const struct attribute_group *pt_attr_groups[] = {
+@@ -133,14 +133,10 @@ static const struct attribute_group *pt_attr_groups[] = {
static int __init pt_pmu_hw_init(void)
{
@@ -24250,7 +25630,7 @@ index 868e119..be39b45 100644
for (i = 0; i < PT_CPUID_LEAVES; i++) {
cpuid_count(20, i,
&pt_pmu.caps[CR_EAX + i*PT_CPUID_REGS_NUM],
-@@ -148,39 +144,25 @@ static int __init pt_pmu_hw_init(void)
+@@ -149,39 +145,25 @@ static int __init pt_pmu_hw_init(void)
&pt_pmu.caps[CR_EDX + i*PT_CPUID_REGS_NUM]);
}
@@ -24298,7 +25678,7 @@ index 868e119..be39b45 100644
}
#define RTIT_CTL_CYC_PSB (RTIT_CTL_CYCLEACC | \
-@@ -996,7 +978,7 @@ static void pt_event_start(struct perf_event *event, int mode)
+@@ -997,7 +979,7 @@ static void pt_event_start(struct perf_event *event, int mode)
return;
}
@@ -24307,7 +25687,7 @@ index 868e119..be39b45 100644
event->hw.state = 0;
pt_config_buffer(buf->cur->table, buf->cur_idx,
-@@ -1012,7 +994,7 @@ static void pt_event_stop(struct perf_event *event, int mode)
+@@ -1013,7 +995,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().
*/
@@ -24317,10 +25697,28 @@ index 868e119..be39b45 100644
if (event->hw.state == PERF_HES_STOPPED)
diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
-index ed446bd..413b10e 100644
+index 24a351a..d429cd7 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
-@@ -496,7 +496,7 @@ static struct attribute *rapl_events_knl_attr[] = {
+@@ -97,14 +97,14 @@ static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = {
+ #define RAPL_EVENT_MASK 0xFFULL
+
+ #define DEFINE_RAPL_FORMAT_ATTR(_var, _name, _format) \
+-static ssize_t __rapl_##_var##_show(struct kobject *kobj, \
+- struct kobj_attribute *attr, \
++static ssize_t __rapl_##_var##_show(struct device *dev, \
++ struct device_attribute *attr, \
+ char *page) \
+ { \
+ BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
+ return sprintf(page, _format "\n"); \
+ } \
+-static struct kobj_attribute format_attr_##_var = \
++static struct device_attribute format_attr_##_var = \
+ __ATTR(_name, 0444, __rapl_##_var##_show, NULL)
+
+ #define RAPL_CNTR_WIDTH 32 /* 32-bit rapl counters */
+@@ -483,7 +483,7 @@ static struct attribute *rapl_events_knl_attr[] = {
NULL,
};
@@ -24330,9 +25728,20 @@ index ed446bd..413b10e 100644
.attrs = NULL, /* patched at runtime */
};
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
-index 61215a6..ceee0e5 100644
+index 3bf41d4..b5dc2c2 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+@@ -74,8 +74,8 @@ end:
+ return map;
+ }
+
+-ssize_t uncore_event_show(struct kobject *kobj,
+- struct kobj_attribute *attr, char *buf)
++ssize_t uncore_event_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
+ {
+ struct uncore_event_desc *event =
+ container_of(attr, struct uncore_event_desc, attr);
@@ -785,7 +785,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types)
static int __init uncore_type_init(struct intel_uncore_type *type)
{
@@ -24343,18 +25752,50 @@ index 61215a6..ceee0e5 100644
int i, j;
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
-index 2f0a4a9..8f4b802 100644
+index a7086b8..ccac9b1 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
-@@ -115,7 +115,7 @@ struct intel_uncore_box {
+@@ -113,9 +113,9 @@ struct intel_uncore_box {
+ #define UNCORE_BOX_FLAG_INITIATED 0
+
struct uncore_event_desc {
- struct kobj_attribute attr;
+- struct kobj_attribute attr;
++ struct device_attribute attr;
const char *config;
-};
+} __do_const;
struct pci2phy_map {
struct list_head list;
+@@ -126,8 +126,8 @@ struct pci2phy_map {
+ int uncore_pcibus_to_physid(struct pci_bus *bus);
+ struct pci2phy_map *__find_pci2phy_map(int segment);
+
+-ssize_t uncore_event_show(struct kobject *kobj,
+- struct kobj_attribute *attr, char *buf);
++ssize_t uncore_event_show(struct device *dev,
++ struct device_attribute *attr, char *buf);
+
+ #define INTEL_UNCORE_EVENT_DESC(_name, _config) \
+ { \
+@@ -136,14 +136,14 @@ ssize_t uncore_event_show(struct kobject *kobj,
+ }
+
+ #define DEFINE_UNCORE_FORMAT_ATTR(_var, _name, _format) \
+-static ssize_t __uncore_##_var##_show(struct kobject *kobj, \
+- struct kobj_attribute *attr, \
++static ssize_t __uncore_##_var##_show(struct device *dev, \
++ struct device_attribute *attr, \
+ char *page) \
+ { \
+ BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
+ return sprintf(page, _format "\n"); \
+ } \
+-static struct kobj_attribute format_attr_##_var = \
++static struct device_attribute format_attr_##_var = \
+ __ATTR(_name, 0444, __uncore_##_var##_show, NULL)
+
+ static inline unsigned uncore_pci_box_ctl(struct intel_uncore_box *box)
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
index 628a059..83bced6 100644
--- a/arch/x86/kernel/cpu/vmware.c
@@ -24627,7 +26068,7 @@ 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..14b4999 100644
+index 5f1c626..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,
@@ -24681,7 +26122,7 @@ index 5f1c626..14b4999 100644
* exception stack:
*/
+ if ((u16)stack_end[-1] != __KERNEL_DS)
-+ break;
++ goto out;
stack = (unsigned long *) stack_end[-2];
done = 0;
break;
@@ -24695,7 +26136,7 @@ index 5f1c626..14b4999 100644
ops, data, stack_end, &graph);
/*
* We link to the next stack (which would be
-@@ -237,10 +239,6 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -237,10 +239,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
}
}
@@ -24703,10 +26144,11 @@ index 5f1c626..14b4999 100644
- * This handles the process stack:
- */
- bp = ops->walk_stack(tinfo, stack, bp, ops, data, NULL, &graph);
++out:
put_cpu();
}
EXPORT_SYMBOL(dump_trace);
-@@ -347,8 +345,55 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -347,8 +346,55 @@ int is_valid_bugaddr(unsigned long ip)
{
unsigned short ud2;
@@ -24888,7 +26330,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 d25097c..4c36ff6 100644
+index d5804ad..4c36ff6 100644
--- a/arch/x86/kernel/fpu/core.c
+++ b/arch/x86/kernel/fpu/core.c
@@ -127,7 +127,7 @@ void __kernel_fpu_end(void)
@@ -24954,19 +26396,7 @@ index d25097c..4c36ff6 100644
fpu->counter++;
kernel_fpu_enable();
}
-@@ -409,8 +409,10 @@ static inline void copy_init_fpstate_to_fpregs(void)
- {
- if (use_xsave())
- copy_kernel_to_xregs(&init_fpstate.xsave, -1);
-- else
-+ else if (static_cpu_has(X86_FEATURE_FXSR))
- copy_kernel_to_fxregs(&init_fpstate.fxsave);
-+ else
-+ copy_kernel_to_fregs(&init_fpstate.fsave);
- }
-
- /*
-@@ -442,25 +444,25 @@ void fpu__clear(struct fpu *fpu)
+@@ -444,25 +444,25 @@ void fpu__clear(struct fpu *fpu)
static inline unsigned short get_fpu_cwd(struct fpu *fpu)
{
if (cpu_has_fxsr) {
@@ -24998,10 +26428,10 @@ index d25097c..4c36ff6 100644
return MXCSR_DEFAULT;
}
diff --git a/arch/x86/kernel/fpu/init.c b/arch/x86/kernel/fpu/init.c
-index be39b5f..1095798 100644
+index bd08fb7..dc29a0a 100644
--- a/arch/x86/kernel/fpu/init.c
+++ b/arch/x86/kernel/fpu/init.c
-@@ -42,7 +42,7 @@ static void fpu__init_cpu_generic(void)
+@@ -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)
@@ -25010,22 +26440,22 @@ index be39b5f..1095798 100644
else
#endif
asm volatile ("fninit");
-@@ -129,7 +129,7 @@ static void __init fpu__init_system_generic(void)
- * Set up the legacy init FPU context. (xstate init might overwrite this
- * with a more modern format, if the CPU supports it.)
- */
-- fpstate_init_fxstate(&init_fpstate.fxsave);
-+ fpstate_init(&init_fpstate);
-
- fpu__init_system_mxcsr();
- }
-@@ -143,42 +143,7 @@ static void __init fpu__init_system_generic(void)
+@@ -148,51 +148,7 @@ static void __init fpu__init_system_generic(void)
unsigned int xstate_size;
EXPORT_SYMBOL_GPL(xstate_size);
--/* Enforce that 'MEMBER' is the last field of 'TYPE': */
+-/* Get alignment of the TYPE. */
+-#define TYPE_ALIGN(TYPE) offsetof(struct { char x; TYPE test; }, test)
+-
+-/*
+- * Enforce that 'MEMBER' is the last field of 'TYPE'.
+- *
+- * Align the computed size with alignment of the TYPE,
+- * because that's how C aligns structs.
+- */
-#define CHECK_MEMBER_AT_END_OF(TYPE, MEMBER) \
-- BUILD_BUG_ON(sizeof(TYPE) != offsetofend(TYPE, MEMBER))
+- BUILD_BUG_ON(sizeof(TYPE) != ALIGN(offsetofend(TYPE, MEMBER), \
+- TYPE_ALIGN(TYPE)))
-
-/*
- * We append the 'struct fpu' to the task_struct:
@@ -25063,7 +26493,7 @@ index be39b5f..1095798 100644
/*
* Set up the xstate_size based on the legacy FPU context size.
-@@ -331,7 +296,6 @@ void __init fpu__init_system(struct cpuinfo_x86 *c)
+@@ -400,7 +356,6 @@ void __init fpu__init_system(struct cpuinfo_x86 *c)
fpu__init_system_generic();
fpu__init_system_xstate_size_legacy();
fpu__init_system_xstate();
@@ -25261,10 +26691,10 @@ index 31c6a60..523f27e 100644
} else {
sanitize_restored_xstate(tsk, &env, xfeatures, fx_only);
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
-index 70fc312..30dfd14 100644
+index d425cda5..011b570 100644
--- a/arch/x86/kernel/fpu/xstate.c
+++ b/arch/x86/kernel/fpu/xstate.c
-@@ -109,14 +109,14 @@ EXPORT_SYMBOL_GPL(cpu_has_xfeatures);
+@@ -110,14 +110,14 @@ EXPORT_SYMBOL_GPL(cpu_has_xfeatures);
*/
void fpstate_sanitize_xstate(struct fpu *fpu)
{
@@ -25289,7 +26719,7 @@ index 70fc312..30dfd14 100644
+ return get_xsave_addr(&fpu->state->xsave, xsave_state);
}
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
-index 311bcf3..83b8e85 100644
+index 29408d6..cd88f18 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -89,7 +89,7 @@ static unsigned long text_ip_addr(unsigned long ip)
@@ -25307,10 +26737,10 @@ index 311bcf3..83b8e85 100644
+ ip = ktla_ktva(ip);
+
+ ftrace_expected = old_code;
+
/*
- * Note: Due to modules and __init, code can
- * disappear and change, we need to protect against faulting
-@@ -230,7 +232,7 @@ static int update_ftrace_func(unsigned long ip, void *new)
+@@ -233,7 +235,7 @@ static int update_ftrace_func(unsigned long ip, void *new)
unsigned char old[MCOUNT_INSN_SIZE];
int ret;
@@ -25319,7 +26749,7 @@ index 311bcf3..83b8e85 100644
ftrace_update_func = ip;
/* Make sure the breakpoints see the ftrace_update_func update */
-@@ -311,7 +313,7 @@ static int add_break(unsigned long ip, const char *old)
+@@ -314,7 +316,7 @@ static int add_break(unsigned long ip, const char *old)
unsigned char replaced[MCOUNT_INSN_SIZE];
unsigned char brk = BREAKPOINT_INSTRUCTION;
@@ -25327,8 +26757,8 @@ index 311bcf3..83b8e85 100644
+ if (probe_kernel_read(replaced, (void *)ktla_ktva(ip), MCOUNT_INSN_SIZE))
return -EFAULT;
- /* Make sure it is what we expect it to be */
-@@ -674,11 +676,11 @@ static unsigned char *ftrace_jmp_replace(unsigned long ip, unsigned long addr)
+ ftrace_expected = old;
+@@ -681,11 +683,11 @@ static unsigned char *ftrace_jmp_replace(unsigned long ip, unsigned long addr)
/* Module allocation simplifies allocating memory for code */
static inline void *alloc_tramp(unsigned long size)
{
@@ -25342,7 +26772,7 @@ index 311bcf3..83b8e85 100644
}
#else
/* Trampolines can only be created if modules are supported */
-@@ -757,7 +759,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+@@ -764,7 +766,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
*tramp_size = size + MCOUNT_INSN_SIZE + sizeof(void *);
/* Copy ftrace_caller onto the trampoline memory */
@@ -25352,7 +26782,7 @@ index 311bcf3..83b8e85 100644
if (WARN_ON(ret < 0)) {
tramp_free(trampoline);
return 0;
-@@ -767,6 +771,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+@@ -774,6 +778,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
/* The trampoline ends with a jmp to ftrace_return */
jmp = ftrace_jmp_replace(ip, (unsigned long)ftrace_return);
@@ -25360,7 +26790,7 @@ index 311bcf3..83b8e85 100644
memcpy(trampoline + size, jmp, MCOUNT_INSN_SIZE);
/*
-@@ -779,6 +784,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+@@ -786,6 +791,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
ptr = (unsigned long *)(trampoline + size + MCOUNT_INSN_SIZE);
*ptr = (unsigned long)ops;
@@ -25368,7 +26798,7 @@ index 311bcf3..83b8e85 100644
op_offset -= start_offset;
memcpy(&op_ptr, trampoline + op_offset, OP_REF_SIZE);
-@@ -796,7 +802,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
+@@ -803,7 +809,9 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
op_ptr.offset = offset;
/* put in the new offset to the ftrace_ops */
@@ -25379,7 +26809,7 @@ index 311bcf3..83b8e85 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 f129a9a..af8f6da 100644
+index 2c0f340..76c1d24 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -68,12 +68,12 @@ again:
@@ -26811,7 +28241,7 @@ index 47190bd..0165c4d 100644
.detect = kvm_detect,
.x2apic_available = kvm_para_available,
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
-index 2bd81e3..2d5e042 100644
+index 72cef58..252d1b0 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -29,7 +29,7 @@
@@ -26831,8 +28261,8 @@ index 2bd81e3..2d5e042 100644
+static struct pvclock_vsyscall_time_info hv_clock[NR_CPUS] __page_aligned_bss;
static struct pvclock_wall_clock wall_clock;
- /*
-@@ -156,7 +156,7 @@ bool kvm_check_and_clear_guest_paused(void)
+ struct pvclock_vsyscall_time_info *pvclock_pvti_cpu0_va(void)
+@@ -161,7 +161,7 @@ bool kvm_check_and_clear_guest_paused(void)
struct pvclock_vcpu_time_info *src;
int cpu = smp_processor_id();
@@ -26841,7 +28271,7 @@ index 2bd81e3..2d5e042 100644
return ret;
src = &hv_clock[cpu].pvti;
-@@ -183,7 +183,7 @@ int kvm_register_clock(char *txt)
+@@ -188,7 +188,7 @@ int kvm_register_clock(char *txt)
int low, high, ret;
struct pvclock_vcpu_time_info *src;
@@ -26850,7 +28280,7 @@ index 2bd81e3..2d5e042 100644
return 0;
src = &hv_clock[cpu].pvti;
-@@ -243,7 +243,6 @@ static void kvm_shutdown(void)
+@@ -248,7 +248,6 @@ static void kvm_shutdown(void)
void __init kvmclock_init(void)
{
struct pvclock_vcpu_time_info *vcpu_time;
@@ -26858,7 +28288,7 @@ index 2bd81e3..2d5e042 100644
int size, cpu;
u8 flags;
-@@ -261,15 +260,8 @@ void __init kvmclock_init(void)
+@@ -266,15 +265,8 @@ void __init kvmclock_init(void)
printk(KERN_INFO "kvm-clock: Using msrs %x and %x",
msr_kvm_system_time, msr_kvm_wall_clock);
@@ -26875,7 +28305,7 @@ index 2bd81e3..2d5e042 100644
return;
}
-@@ -310,7 +302,7 @@ int __init kvm_setup_vsyscall_timeinfo(void)
+@@ -314,7 +306,7 @@ int __init kvm_setup_vsyscall_timeinfo(void)
struct pvclock_vcpu_time_info *vcpu_time;
unsigned int size;
@@ -26967,23 +28397,23 @@ index 6acc9dd..f72931d 100644
case 0:
ret = read_ldt(ptr, bytecount);
diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c
-index d1d35cc..d5b1193 100644
+index 92fc1a5..478b427 100644
--- a/arch/x86/kernel/livepatch.c
+++ b/arch/x86/kernel/livepatch.c
-@@ -41,8 +41,10 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
- int ret, numpages, size = 4;
- bool readonly;
+@@ -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->module_core;
-- unsigned long core_size = mod->core_size;
-+ unsigned long core_rx = (unsigned long)mod->module_core_rx;
-+ unsigned long core_rw = (unsigned long)mod->module_core_rw;
-+ unsigned long core_size_rx = mod->core_size_rx;
-+ unsigned long core_size_rw = mod->core_size_rw;
+- 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:
-@@ -65,14 +67,15 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
+@@ -62,7 +64,8 @@ int klp_write_module_reloc(struct module *mod, unsigned long type,
return -EINVAL;
}
@@ -26993,14 +28423,6 @@ index d1d35cc..d5b1193 100644
/* loc does not point to any symbol inside the module */
return -EINVAL;
- readonly = false;
-
- #ifdef CONFIG_DEBUG_SET_MODULE_RONX
-- if (loc < core + mod->core_ro_size)
-+ if (loc < core_rx + core_size_rx)
- readonly = true;
- #endif
-
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
@@ -27033,7 +28455,7 @@ index 469b23d..5449cfe 100644
relocate_kernel_ptr = control_page;
page_list[PA_CONTROL_PAGE] = __pa(control_page);
diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S
-index 87e1762..994fdb6 100644
+index 87e1762..f08a93d 100644
--- a/arch/x86/kernel/mcount_64.S
+++ b/arch/x86/kernel/mcount_64.S
@@ -7,7 +7,7 @@
@@ -27056,10 +28478,12 @@ index 87e1762..994fdb6 100644
ENTRY(ftrace_caller)
/* save_mcount_regs fills in first two parameters */
-@@ -181,8 +182,9 @@ GLOBAL(ftrace_graph_call)
+@@ -180,9 +181,10 @@ GLOBAL(ftrace_graph_call)
+ jmp ftrace_stub
#endif
- GLOBAL(ftrace_stub)
+-GLOBAL(ftrace_stub)
++RAP_ENTRY(ftrace_stub)
+ pax_force_retaddr
retq
-END(ftrace_caller)
@@ -27266,7 +28690,7 @@ index 005c03e..7000fe4 100644
if ((s64)val != *(s32 *)loc)
goto overflow;
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
-index 113e707..0a690e1 100644
+index 64f9616..c94695d 100644
--- a/arch/x86/kernel/msr.c
+++ b/arch/x86/kernel/msr.c
@@ -39,6 +39,7 @@
@@ -27277,7 +28701,7 @@ index 113e707..0a690e1 100644
#include <asm/processor.h>
#include <asm/msr.h>
-@@ -105,6 +106,11 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
+@@ -83,6 +84,11 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
int err = 0;
ssize_t bytes = 0;
@@ -27289,7 +28713,7 @@ index 113e707..0a690e1 100644
if (count % 8)
return -EINVAL; /* Invalid chunk size */
-@@ -152,6 +158,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
+@@ -130,6 +136,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
err = -EBADF;
break;
}
@@ -27300,7 +28724,7 @@ index 113e707..0a690e1 100644
if (copy_from_user(&regs, uregs, sizeof regs)) {
err = -EFAULT;
break;
-@@ -235,7 +245,7 @@ static int msr_class_cpu_callback(struct notifier_block *nfb,
+@@ -213,7 +223,7 @@ static int msr_class_cpu_callback(struct notifier_block *nfb,
return notifier_from_errno(err);
}
@@ -27310,10 +28734,10 @@ index 113e707..0a690e1 100644
};
diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c
-index 697f90d..8b1c639 100644
+index 8a2cdd7..5b45fda 100644
--- a/arch/x86/kernel/nmi.c
+++ b/arch/x86/kernel/nmi.c
-@@ -98,16 +98,16 @@ fs_initcall(nmi_warning_debugfs);
+@@ -99,16 +99,16 @@ fs_initcall(nmi_warning_debugfs);
static void nmi_max_handler(struct irq_work *w)
{
@@ -27333,7 +28757,7 @@ index 697f90d..8b1c639 100644
}
static int nmi_handle(unsigned int type, struct pt_regs *regs)
-@@ -134,11 +134,11 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs)
+@@ -135,11 +135,11 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs)
delta = sched_clock() - delta;
trace_nmi_handler(a->handler, (int)delta, thishandled);
@@ -27348,7 +28772,7 @@ index 697f90d..8b1c639 100644
}
rcu_read_unlock();
-@@ -148,7 +148,7 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs)
+@@ -149,7 +149,7 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs)
}
NOKPROBE_SYMBOL(nmi_handle);
@@ -27357,7 +28781,7 @@ index 697f90d..8b1c639 100644
{
struct nmi_desc *desc = nmi_to_desc(type);
unsigned long flags;
-@@ -156,7 +156,8 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action)
+@@ -157,7 +157,8 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action)
if (!action->handler)
return -EINVAL;
@@ -27367,7 +28791,7 @@ index 697f90d..8b1c639 100644
spin_lock_irqsave(&desc->lock, flags);
-@@ -174,9 +175,9 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action)
+@@ -175,9 +176,9 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action)
* event confuses some handlers (kdump uses this flag)
*/
if (action->flags & NMI_FLAG_FIRST)
@@ -27379,7 +28803,7 @@ index 697f90d..8b1c639 100644
spin_unlock_irqrestore(&desc->lock, flags);
return 0;
-@@ -199,7 +200,7 @@ void unregister_nmi_handler(unsigned int type, const char *name)
+@@ -200,7 +201,7 @@ void unregister_nmi_handler(unsigned int type, const char *name)
if (!strcmp(n->name, name)) {
WARN(in_nmi(),
"Trying to free NMI (%s) from NMI context!\n", n->name);
@@ -27388,7 +28812,7 @@ index 697f90d..8b1c639 100644
break;
}
}
-@@ -481,6 +482,17 @@ static DEFINE_PER_CPU(int, update_debug_stack);
+@@ -501,6 +502,17 @@ static DEFINE_PER_CPU(int, update_debug_stack);
dotraplinkage notrace void
do_nmi(struct pt_regs *regs, long error_code)
{
@@ -27442,7 +28866,7 @@ index 33ee3e0..da3519a 100644
#ifdef CONFIG_QUEUED_SPINLOCKS
.queued_spin_lock_slowpath = native_queued_spin_lock_slowpath,
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
-index c2130ae..d52ca15 100644
+index f08ac28..0151389 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -64,6 +64,9 @@ u64 _paravirt_ident_64(u64 x)
@@ -27455,7 +28879,7 @@ index c2130ae..d52ca15 100644
void __init default_banner(void)
{
-@@ -150,16 +153,20 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,
+@@ -139,15 +142,19 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,
if (opfunc == NULL)
/* If there's no function, patch it with a ud2a (BUG) */
@@ -27463,8 +28887,7 @@ index c2130ae..d52ca15 100644
- else if (opfunc == _paravirt_nop)
+ ret = paravirt_patch_insns(insnbuf, len, (const char *)ktva_ktla((unsigned long)ud2a), ud2a+sizeof(ud2a));
+ else if (opfunc == (void *)_paravirt_nop)
- /* If the operation is a nop, then nop the callsite */
- ret = paravirt_patch_nop();
+ ret = 0;
/* identity functions just return their single argument */
- else if (opfunc == _paravirt_ident_32)
@@ -27479,8 +28902,8 @@ index c2130ae..d52ca15 100644
+#endif
else if (type == PARAVIRT_PATCH(pv_cpu_ops.iret) ||
- #ifdef CONFIG_X86_32
-@@ -186,7 +193,7 @@ unsigned paravirt_patch_insns(void *insnbuf, unsigned len,
+ type == PARAVIRT_PATCH(pv_cpu_ops.usergs_sysret64))
+@@ -170,7 +177,7 @@ unsigned paravirt_patch_insns(void *insnbuf, unsigned len,
if (insn_len > len || start == NULL)
insn_len = len;
else
@@ -27489,7 +28912,7 @@ index c2130ae..d52ca15 100644
return insn_len;
}
-@@ -310,7 +317,7 @@ enum paravirt_lazy_mode paravirt_get_lazy_mode(void)
+@@ -292,7 +299,7 @@ enum paravirt_lazy_mode paravirt_get_lazy_mode(void)
return this_cpu_read(paravirt_lazy_mode);
}
@@ -27498,7 +28921,7 @@ index c2130ae..d52ca15 100644
.name = "bare hardware",
.paravirt_enabled = 0,
.kernel_rpl = 0,
-@@ -321,16 +328,16 @@ struct pv_info pv_info = {
+@@ -303,16 +310,16 @@ struct pv_info pv_info = {
#endif
};
@@ -27518,7 +28941,7 @@ index c2130ae..d52ca15 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),
-@@ -342,7 +349,7 @@ __visible struct pv_irq_ops pv_irq_ops = {
+@@ -324,7 +331,7 @@ __visible struct pv_irq_ops pv_irq_ops = {
#endif
};
@@ -27527,17 +28950,10 @@ index c2130ae..d52ca15 100644
.cpuid = native_cpuid,
.get_debugreg = native_get_debugreg,
.set_debugreg = native_set_debugreg,
-@@ -403,21 +410,26 @@ NOKPROBE_SYMBOL(native_get_debugreg);
+@@ -379,15 +386,20 @@ NOKPROBE_SYMBOL(native_get_debugreg);
NOKPROBE_SYMBOL(native_set_debugreg);
NOKPROBE_SYMBOL(native_load_idt);
--struct pv_apic_ops pv_apic_ops = {
-+struct pv_apic_ops pv_apic_ops __read_only= {
- #ifdef CONFIG_X86_LOCAL_APIC
- .startup_ipi_hook = paravirt_nop,
- #endif
- };
-
-#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE)
+#ifdef CONFIG_X86_32
+#ifdef CONFIG_X86_PAE
@@ -27557,7 +28973,7 @@ index c2130ae..d52ca15 100644
.read_cr2 = native_read_cr2,
.write_cr2 = native_write_cr2,
-@@ -467,6 +479,7 @@ struct pv_mmu_ops pv_mmu_ops = {
+@@ -434,6 +446,7 @@ struct pv_mmu_ops pv_mmu_ops = {
.make_pud = PTE_IDENT,
.set_pgd = native_set_pgd,
@@ -27565,7 +28981,7 @@ index c2130ae..d52ca15 100644
#endif
#endif /* CONFIG_PGTABLE_LEVELS >= 3 */
-@@ -487,6 +500,12 @@ struct pv_mmu_ops pv_mmu_ops = {
+@@ -454,6 +467,12 @@ struct pv_mmu_ops pv_mmu_ops = {
},
.set_fixmap = native_set_fixmap,
@@ -27579,7 +28995,7 @@ index c2130ae..d52ca15 100644
EXPORT_SYMBOL_GPL(pv_time_ops);
diff --git a/arch/x86/kernel/paravirt_patch_64.c b/arch/x86/kernel/paravirt_patch_64.c
-index 8aa0558..465512e 100644
+index e70087a..b083377 100644
--- a/arch/x86/kernel/paravirt_patch_64.c
+++ b/arch/x86/kernel/paravirt_patch_64.c
@@ -9,7 +9,11 @@ DEF_NATIVE(pv_irq_ops, save_fl, "pushfq; popq %rax");
@@ -27594,7 +29010,7 @@ index 8aa0558..465512e 100644
DEF_NATIVE(pv_cpu_ops, clts, "clts");
DEF_NATIVE(pv_cpu_ops, wbinvd, "wbinvd");
-@@ -62,7 +66,11 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
+@@ -59,7 +63,11 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
PATCH_SITE(pv_mmu_ops, read_cr3);
PATCH_SITE(pv_mmu_ops, write_cr3);
PATCH_SITE(pv_cpu_ops, clts);
@@ -27607,7 +29023,7 @@ index 8aa0558..465512e 100644
#if defined(CONFIG_PARAVIRT_SPINLOCKS) && defined(CONFIG_QUEUED_SPINLOCKS)
case PARAVIRT_PATCH(pv_lock_ops.queued_spin_unlock):
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
-index 0497f71..7186c0d 100644
+index 833b1d3..f839e8b 100644
--- a/arch/x86/kernel/pci-calgary_64.c
+++ b/arch/x86/kernel/pci-calgary_64.c
@@ -1347,7 +1347,7 @@ static void __init get_tce_space_from_tar(void)
@@ -27633,7 +29049,7 @@ index 35ccf75..7a15747 100644
#define DEBUG 1
diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c
-index adf0392..88a7576 100644
+index 7c577a1..3557b10 100644
--- a/arch/x86/kernel/pci-swiotlb.c
+++ b/arch/x86/kernel/pci-swiotlb.c
@@ -40,7 +40,7 @@ void x86_swiotlb_free_coherent(struct device *dev, size_t size,
@@ -27923,7 +29339,7 @@ index 9f95091..6885108 100644
return prev_p;
}
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
-index 4cbb60f..7cc4cb4 100644
+index 9f75187..9b2d358 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -160,9 +160,10 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
@@ -27982,10 +29398,10 @@ index 4cbb60f..7cc4cb4 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 558f50e..2312c52 100644
+index 32e9d9c..afd5732 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
-@@ -184,10 +184,10 @@ unsigned long kernel_stack_pointer(struct pt_regs *regs)
+@@ -169,10 +169,10 @@ unsigned long kernel_stack_pointer(struct pt_regs *regs)
unsigned long sp = (unsigned long)&regs->sp;
u32 *prev_esp;
@@ -27998,7 +29414,7 @@ index 558f50e..2312c52 100644
if (prev_esp)
return (unsigned long)prev_esp;
-@@ -444,6 +444,20 @@ static int putreg(struct task_struct *child,
+@@ -429,6 +429,20 @@ static int putreg(struct task_struct *child,
if (child->thread.gs != value)
return do_arch_prctl(child, ARCH_SET_GS, value);
return 0;
@@ -28019,7 +29435,7 @@ index 558f50e..2312c52 100644
#endif
}
-@@ -580,7 +594,7 @@ static void ptrace_triggered(struct perf_event *bp,
+@@ -565,7 +579,7 @@ static void ptrace_triggered(struct perf_event *bp,
static unsigned long ptrace_get_dr7(struct perf_event *bp[])
{
int i;
@@ -28028,7 +29444,7 @@ index 558f50e..2312c52 100644
struct arch_hw_breakpoint *info;
for (i = 0; i < HBP_NUM; i++) {
-@@ -814,7 +828,7 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -799,7 +813,7 @@ long arch_ptrace(struct task_struct *child, long request,
unsigned long addr, unsigned long data)
{
int ret;
@@ -28037,7 +29453,7 @@ index 558f50e..2312c52 100644
switch (request) {
/* read the word at location addr in the USER area. */
-@@ -899,14 +913,14 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -884,14 +898,14 @@ long arch_ptrace(struct task_struct *child, long request,
if ((int) addr < 0)
return -EIO;
ret = do_get_thread_area(child, addr,
@@ -28054,7 +29470,7 @@ index 558f50e..2312c52 100644
break;
#endif
-@@ -1294,7 +1308,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+@@ -1279,7 +1293,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
#ifdef CONFIG_X86_64
@@ -28063,7 +29479,7 @@ index 558f50e..2312c52 100644
[REGSET_GENERAL] = {
.core_note_type = NT_PRSTATUS,
.n = sizeof(struct user_regs_struct) / sizeof(long),
-@@ -1335,7 +1349,7 @@ static const struct user_regset_view user_x86_64_view = {
+@@ -1320,7 +1334,7 @@ static const struct user_regset_view user_x86_64_view = {
#endif /* CONFIG_X86_64 */
#if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
@@ -28072,7 +29488,7 @@ index 558f50e..2312c52 100644
[REGSET_GENERAL] = {
.core_note_type = NT_PRSTATUS,
.n = sizeof(struct user_regs_struct32) / sizeof(u32),
-@@ -1388,7 +1402,7 @@ static const struct user_regset_view user_x86_32_view = {
+@@ -1373,7 +1387,7 @@ static const struct user_regset_view user_x86_32_view = {
*/
u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];
@@ -28081,7 +29497,7 @@ index 558f50e..2312c52 100644
{
#ifdef CONFIG_X86_64
x86_64_regsets[REGSET_XSTATE].n = size / sizeof(u64);
-@@ -1423,7 +1437,7 @@ static void fill_sigtrap_info(struct task_struct *tsk,
+@@ -1408,7 +1422,7 @@ static void fill_sigtrap_info(struct task_struct *tsk,
memset(info, 0, sizeof(*info));
info->si_signo = SIGTRAP;
info->si_code = si_code;
@@ -28091,7 +29507,7 @@ index 558f50e..2312c52 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 2f355d2..e75ed0a 100644
+index 99bfc02..c85b4c4 100644
--- a/arch/x86/kernel/pvclock.c
+++ b/arch/x86/kernel/pvclock.c
@@ -51,11 +51,11 @@ void pvclock_touch_watchdogs(void)
@@ -28123,7 +29539,7 @@ index 2f355d2..e75ed0a 100644
return ret;
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
-index f660d63..564a120 100644
+index ab0adc0..502dfc2 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)
@@ -28261,7 +29677,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 d2bbe34..9d8fdaa 100644
+index d3d80e6..5c5b8de 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -112,6 +112,7 @@
@@ -28497,7 +29913,7 @@ index cb6282c..7cda5d0 100644
}
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
-index 12c8286..aa65d13 100644
+index 658777c..6285f88 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -336,7 +336,7 @@ static int __init nonmi_ipi_setup(char *str)
@@ -28510,7 +29926,7 @@ index 12c8286..aa65d13 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 fbabe4f..c686333 100644
+index 24d57f7..36e49a2 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -213,14 +213,17 @@ static void notrace start_secondary(void *unused)
@@ -28535,7 +29951,7 @@ index fbabe4f..c686333 100644
/*
* Check TSC synchronization with the BP:
*/
-@@ -810,16 +813,15 @@ void common_cpu_up(unsigned int cpu, struct task_struct *idle)
+@@ -803,16 +806,15 @@ void common_cpu_up(unsigned int cpu, struct task_struct *idle)
alternatives_enable_smp();
per_cpu(current_task, cpu) = idle;
@@ -28554,7 +29970,7 @@ index fbabe4f..c686333 100644
}
/*
-@@ -840,9 +842,11 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
+@@ -833,9 +835,11 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
unsigned long timeout;
idle->thread.sp = (unsigned long) (((struct pt_regs *)
@@ -28567,7 +29983,7 @@ index fbabe4f..c686333 100644
initial_code = (unsigned long)start_secondary;
stack_start = idle->thread.sp;
-@@ -990,6 +994,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
+@@ -983,6 +987,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
common_cpu_up(cpu, tidle);
@@ -28609,7 +30025,7 @@ index c9a0738..f0ab628 100644
switch (opcode[i]) {
diff --git a/arch/x86/kernel/sys_i386_32.c b/arch/x86/kernel/sys_i386_32.c
new file mode 100644
-index 0000000..5877189
+index 0000000..920e413
--- /dev/null
+++ b/arch/x86/kernel/sys_i386_32.c
@@ -0,0 +1,189 @@
@@ -28737,9 +30153,9 @@ index 0000000..5877189
+}
+
+unsigned long
-+arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
-+ const unsigned long len, const unsigned long pgoff,
-+ const unsigned long flags)
++arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr0,
++ unsigned long len, unsigned long pgoff,
++ unsigned long flags)
+{
+ struct vm_area_struct *vma;
+ struct mm_struct *mm = current->mm;
@@ -28803,7 +30219,7 @@ index 0000000..5877189
+ return arch_get_unmapped_area(filp, addr0, len, pgoff, flags);
+}
diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
-index 10e0272..b4bb9a7 100644
+index 10e0272..a73232f 100644
--- a/arch/x86/kernel/sys_x86_64.c
+++ b/arch/x86/kernel/sys_x86_64.c
@@ -97,8 +97,8 @@ out:
@@ -28854,7 +30270,7 @@ index 10e0272..b4bb9a7 100644
return addr;
}
-@@ -157,6 +161,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -157,18 +161,20 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
info.align_mask = get_align_mask();
info.align_offset += get_align_bits();
}
@@ -28862,7 +30278,15 @@ index 10e0272..b4bb9a7 100644
return vm_unmapped_area(&info);
}
-@@ -169,6 +174,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+ unsigned long
+-arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+- const unsigned long len, const unsigned long pgoff,
+- const unsigned long flags)
++arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr0,
++ unsigned long len, unsigned long pgoff,
++ unsigned long flags)
+ {
+ struct vm_area_struct *vma;
struct mm_struct *mm = current->mm;
unsigned long addr = addr0;
struct vm_unmapped_area_info info;
@@ -29048,7 +30472,7 @@ index 1c113db..287b42e 100644
static int trace_irq_vector_refcount;
static DEFINE_MUTEX(irq_vector_mutex);
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
-index ade185a..2452e8b 100644
+index ade185a..4c354a0 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -70,7 +70,7 @@
@@ -29087,7 +30511,7 @@ index ade185a..2452e8b 100644
struct pt_regs *regs, long error_code)
{
if (v8086_mode(regs)) {
-@@ -202,8 +202,20 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
+@@ -202,8 +202,25 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
if (!fixup_exception(regs)) {
tsk->thread.error_code = error_code;
tsk->thread.trap_nr = trapnr;
@@ -29097,6 +30521,11 @@ index ade185a..2452e8b 100644
+ str = "PAX: suspicious stack segment fault";
+#endif
+
++#ifdef CONFIG_PAX_RAP
++ if (trapnr == X86_TRAP_UD)
++ str = "PAX: overwritten function pointer or return address detected";
++#endif
++
die(str, regs, error_code);
}
+
@@ -29108,7 +30537,7 @@ index ade185a..2452e8b 100644
return 0;
}
-@@ -242,7 +254,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr,
+@@ -242,7 +259,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr,
}
static void
@@ -29117,7 +30546,7 @@ index ade185a..2452e8b 100644
long error_code, siginfo_t *info)
{
struct task_struct *tsk = current;
-@@ -266,7 +278,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
+@@ -266,7 +283,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",
@@ -29126,7 +30555,7 @@ index ade185a..2452e8b 100644
regs->ip, regs->sp, error_code);
print_vma_addr(" in ", regs->ip);
pr_cont("\n");
-@@ -347,6 +359,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
+@@ -347,6 +364,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;
@@ -29138,7 +30567,7 @@ index ade185a..2452e8b 100644
#ifdef CONFIG_DOUBLEFAULT
df_debug(regs, error_code);
#endif
-@@ -459,11 +476,35 @@ do_general_protection(struct pt_regs *regs, long error_code)
+@@ -459,11 +481,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,
@@ -29175,7 +30604,7 @@ index ade185a..2452e8b 100644
tsk->thread.error_code = error_code;
tsk->thread.trap_nr = X86_TRAP_GP;
-@@ -559,6 +600,9 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
+@@ -559,6 +605,9 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
container_of(task_pt_regs(current),
struct bad_iret_stack, regs);
@@ -29185,8 +30614,35 @@ index ade185a..2452e8b 100644
/* Copy the IRET target to the new stack. */
memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8);
+@@ -805,7 +854,7 @@ void __init early_trap_init(void)
+ * since we don't have trace_debug and it will be reset to
+ * 'debug' in trap_init() by set_intr_gate_ist().
+ */
+- set_intr_gate_notrace(X86_TRAP_DB, debug);
++ set_intr_gate_notrace(X86_TRAP_DB, int1);
+ /* int3 can be called from all */
+ set_system_intr_gate(X86_TRAP_BP, &int3);
+ #ifdef CONFIG_X86_32
+@@ -890,7 +939,7 @@ void __init trap_init(void)
+ * in early_trap_init(). However, ITS works only after
+ * cpu_init() loads TSS. See comments in early_trap_init().
+ */
+- set_intr_gate_ist(X86_TRAP_DB, &debug, DEBUG_STACK);
++ set_intr_gate_ist(X86_TRAP_DB, &int1, DEBUG_STACK);
+ /* int3 can be called from all */
+ set_system_intr_gate_ist(X86_TRAP_BP, &int3, DEBUG_STACK);
+
+@@ -898,7 +947,7 @@ void __init trap_init(void)
+
+ #ifdef CONFIG_X86_64
+ memcpy(&debug_idt_table, &idt_table, IDT_ENTRIES * 16);
+- set_nmi_gate(X86_TRAP_DB, &debug);
++ set_nmi_gate(X86_TRAP_DB, &int1);
+ set_nmi_gate(X86_TRAP_BP, &int3);
+ #endif
+ }
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
-index c7c4d9c..ddd1454 100644
+index 3d743da..d74c208 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -151,7 +151,7 @@ static void cyc2ns_write_end(int cpu, struct cyc2ns_data *data)
@@ -29221,7 +30677,7 @@ index bf4db6e..624137c 100644
force_sig_info(SIGSEGV, SEND_SIG_FORCED, current);
}
diff --git a/arch/x86/kernel/verify_cpu.S b/arch/x86/kernel/verify_cpu.S
-index 4cf401f..ae8c9cf 100644
+index 07efb35..2bf8766 100644
--- a/arch/x86/kernel/verify_cpu.S
+++ b/arch/x86/kernel/verify_cpu.S
@@ -20,6 +20,7 @@
@@ -29233,7 +30689,7 @@ index 4cf401f..ae8c9cf 100644
* verify_cpu, returns the status of longmode and SSE in register %eax.
* 0: Success 1: Failure
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
-index 5246193..c6bed42 100644
+index e574b85..5514c57 100644
--- a/arch/x86/kernel/vm86_32.c
+++ b/arch/x86/kernel/vm86_32.c
@@ -144,7 +144,7 @@ void save_v86_state(struct kernel_vm86_regs *regs, int retval)
@@ -29245,7 +30701,7 @@ index 5246193..c6bed42 100644
tsk->thread.sp0 = vm86->saved_sp0;
tsk->thread.sysenter_cs = __KERNEL_CS;
load_sp0(tss, &tsk->thread);
-@@ -259,6 +259,13 @@ static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus)
+@@ -263,6 +263,13 @@ static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus)
return -EPERM;
}
@@ -29259,7 +30715,7 @@ index 5246193..c6bed42 100644
if (!vm86) {
if (!(vm86 = kzalloc(sizeof(*vm86), GFP_KERNEL)))
return -ENOMEM;
-@@ -354,7 +361,7 @@ static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus)
+@@ -358,7 +365,7 @@ static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus)
vm86->saved_sp0 = tsk->thread.sp0;
lazy_save_gs(vm86->regs32.gs);
@@ -29267,8 +30723,8 @@ index 5246193..c6bed42 100644
+ tss = cpu_tss + get_cpu();
/* make room for real-mode segments */
tsk->thread.sp0 += 16;
- if (cpu_has_sep)
-@@ -535,7 +542,7 @@ static void do_int(struct kernel_vm86_regs *regs, int i,
+
+@@ -541,7 +548,7 @@ static void do_int(struct kernel_vm86_regs *regs, int i,
goto cannot_handle;
if (i == 0x21 && is_revectored(AH(regs), &vm86->int21_revectored))
goto cannot_handle;
@@ -29277,7 +30733,7 @@ index 5246193..c6bed42 100644
if (get_user(segoffs, intr_ptr))
goto cannot_handle;
if ((segoffs >> 16) == BIOSSEG)
-@@ -828,6 +835,14 @@ static inline int get_and_reset_irq(int irqnumber)
+@@ -834,6 +841,14 @@ static inline int get_and_reset_irq(int irqnumber)
static int do_vm86_irq_handling(int subfunction, int irqnumber)
{
int ret;
@@ -29584,10 +31040,10 @@ index a0695be..33e180c 100644
+EXPORT_SYMBOL(cpu_pgd);
+#endif
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
-index 3839628..2e5b5b35 100644
+index dad5fe9..ce5f4ba 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
-@@ -92,7 +92,7 @@ struct x86_cpuinit_ops x86_cpuinit = {
+@@ -91,7 +91,7 @@ struct x86_cpuinit_ops x86_cpuinit = {
static void default_nmi_init(void) { };
static int default_i8042_detect(void) { return 1; };
@@ -29596,7 +31052,7 @@ index 3839628..2e5b5b35 100644
.calibrate_tsc = native_calibrate_tsc,
.get_wallclock = mach_get_cmos_time,
.set_wallclock = mach_set_rtc_mmss,
-@@ -108,7 +108,7 @@ struct x86_platform_ops x86_platform = {
+@@ -107,7 +107,7 @@ struct x86_platform_ops x86_platform = {
EXPORT_SYMBOL_GPL(x86_platform);
#if defined(CONFIG_PCI_MSI)
@@ -29605,7 +31061,7 @@ index 3839628..2e5b5b35 100644
.setup_msi_irqs = native_setup_msi_irqs,
.teardown_msi_irq = native_teardown_msi_irq,
.teardown_msi_irqs = default_teardown_msi_irqs,
-@@ -137,7 +137,7 @@ void arch_restore_msi_irqs(struct pci_dev *dev)
+@@ -136,7 +136,7 @@ void arch_restore_msi_irqs(struct pci_dev *dev)
}
#endif
@@ -29666,9 +31122,18 @@ index 6525e92..28559d2 100644
out:
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
-index b9b09fe..138addd 100644
+index b9b09fe..2e1cfb3 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
+@@ -959,7 +959,7 @@ static int em_bsr_c(struct x86_emulate_ctxt *ctxt)
+ static u8 test_cc(unsigned int condition, unsigned long flags)
+ {
+ u8 rc;
+- void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf);
++ void (*fop)(struct fastop *) = (void *)em_setcc + 4 * (condition & 0xf);
+
+ flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF;
+ asm("push %[flags]; popf; call *%[fastop]"
@@ -1881,7 +1881,7 @@ static int em_push_sreg(struct x86_emulate_ctxt *ctxt)
static int em_pop_sreg(struct x86_emulate_ctxt *ctxt)
{
@@ -29696,6 +31161,37 @@ index b9b09fe..138addd 100644
0xffffffff00000000ULL,
0, 0, 0, /* CR3 checked later */
CR4_RESERVED_BITS,
+@@ -4956,7 +4956,10 @@ done_prefixes:
+ if (ctxt->d == 0)
+ return EMULATION_FAILED;
+
+- ctxt->execute = opcode.u.execute;
++ if (ctxt->d & Fastop)
++ ctxt->u.fastop = opcode.u.fastop;
++ else
++ ctxt->u.execute = opcode.u.execute;
+
+ if (unlikely(ctxt->ud) && likely(!(ctxt->d & EmulateOnUD)))
+ return EMULATION_FAILED;
+@@ -5267,15 +5270,14 @@ special_insn:
+ else
+ ctxt->eflags &= ~X86_EFLAGS_RF;
+
+- if (ctxt->execute) {
++ if (ctxt->u.execute) {
+ if (ctxt->d & Fastop) {
+- void (*fop)(struct fastop *) = (void *)ctxt->execute;
+- rc = fastop(ctxt, fop);
++ rc = fastop(ctxt, ctxt->u.fastop);
+ if (rc != X86EMUL_CONTINUE)
+ goto done;
+ goto writeback;
+ }
+- rc = ctxt->execute(ctxt);
++ rc = ctxt->u.execute(ctxt);
+ if (rc != X86EMUL_CONTINUE)
+ goto done;
+ goto writeback;
diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
index 7cc2360..6ae1236 100644
--- a/arch/x86/kvm/i8259.c
@@ -29766,7 +31262,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 88d0a92..fa8b52a 100644
+index 1facfd6..51dcfd3 100644
--- a/arch/x86/kvm/ioapic.c
+++ b/arch/x86/kvm/ioapic.c
@@ -405,6 +405,8 @@ static void kvm_ioapic_eoi_inject_work(struct work_struct *work)
@@ -29779,10 +31275,10 @@ index 88d0a92..fa8b52a 100644
{
int i;
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
-index 4d30b86..94115f0 100644
+index 36591fa..3b2fa3f 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
-@@ -56,7 +56,7 @@
+@@ -57,7 +57,7 @@
#define APIC_BUS_CYCLE_NS 1
/* #define apic_debug(fmt,arg...) printk(KERN_WARNING fmt,##arg) */
@@ -29792,7 +31288,7 @@ index 4d30b86..94115f0 100644
#define APIC_LVT_NUM 6
/* 14 is the version for Xeon and Pentium 8.4.8*/
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
-index 7be8a25..7d71250 100644
+index 2ce4f05..ab8fa72 100644
--- a/arch/x86/kvm/paging_tmpl.h
+++ b/arch/x86/kvm/paging_tmpl.h
@@ -335,7 +335,7 @@ retry_walk:
@@ -29805,10 +31301,10 @@ index 7be8a25..7d71250 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 899c40f..a114588 100644
+index c13a64b..2075a7c 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
-@@ -3490,7 +3490,11 @@ static void reload_tss(struct kvm_vcpu *vcpu)
+@@ -3529,7 +3529,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);
@@ -29820,7 +31316,7 @@ index 899c40f..a114588 100644
load_TR_desc();
}
-@@ -3885,6 +3889,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -3928,6 +3932,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
#endif
#endif
@@ -29831,7 +31327,7 @@ index 899c40f..a114588 100644
reload_tss(vcpu);
local_irq_disable();
-@@ -4260,7 +4268,7 @@ static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu)
+@@ -4303,7 +4311,7 @@ static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu)
{
}
@@ -29841,25 +31337,27 @@ index 899c40f..a114588 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 f34ab71..049ebd8 100644
+index 539062e..0aa69ab 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
-@@ -1514,12 +1514,12 @@ static void vmcs_write64(unsigned long field, u64 value)
- #endif
+@@ -1575,14 +1575,14 @@ static __always_inline void vmcs_writel(unsigned long field, unsigned long value
+ __vmcs_writel(field, value);
}
--static void vmcs_clear_bits(unsigned long field, u32 mask)
-+static void vmcs_clear_bits(unsigned long field, unsigned long mask)
+-static __always_inline void vmcs_clear_bits(unsigned long field, u32 mask)
++static __always_inline void vmcs_clear_bits(unsigned long field, unsigned long mask)
{
- vmcs_writel(field, vmcs_readl(field) & ~mask);
+ BUILD_BUG_ON_MSG(__builtin_constant_p(field) && ((field) & 0x6000) == 0x2000,
+ "vmcs_clear_bits does not support 64-bit fields");
+ __vmcs_writel(field, __vmcs_readl(field) & ~mask);
}
--static void vmcs_set_bits(unsigned long field, u32 mask)
-+static void vmcs_set_bits(unsigned long field, unsigned long mask)
+-static __always_inline void vmcs_set_bits(unsigned long field, u32 mask)
++static __always_inline void vmcs_set_bits(unsigned long field, unsigned long mask)
{
- vmcs_writel(field, vmcs_readl(field) | mask);
- }
-@@ -1786,7 +1786,11 @@ static void reload_tss(void)
+ BUILD_BUG_ON_MSG(__builtin_constant_p(field) && ((field) & 0x6000) == 0x2000,
+ "vmcs_set_bits does not support 64-bit fields");
+@@ -1851,7 +1851,11 @@ static void reload_tss(void)
struct desc_struct *descs;
descs = (void *)gdt->address;
@@ -29871,7 +31369,7 @@ index f34ab71..049ebd8 100644
load_TR_desc();
}
-@@ -2078,6 +2082,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
+@@ -2143,6 +2147,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */
vmcs_writel(HOST_GDTR_BASE, gdt->address); /* 22.2.4 */
@@ -29882,7 +31380,7 @@ index f34ab71..049ebd8 100644
rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */
-@@ -2395,7 +2403,7 @@ static void setup_msrs(struct vcpu_vmx *vmx)
+@@ -2460,7 +2468,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
*/
@@ -29891,7 +31389,7 @@ index f34ab71..049ebd8 100644
{
u64 host_tsc, tsc_offset;
-@@ -4633,7 +4641,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4693,7 +4701,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 */
@@ -29902,7 +31400,7 @@ index f34ab71..049ebd8 100644
/* Save the most likely value for this task's CR4 in the VMCS. */
cr4 = cr4_read_shadow();
-@@ -4660,7 +4671,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4720,7 +4731,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;
@@ -29911,7 +31409,7 @@ index f34ab71..049ebd8 100644
rdmsr(MSR_IA32_SYSENTER_CS, low32, high32);
vmcs_write32(HOST_IA32_SYSENTER_CS, low32);
-@@ -6210,11 +6221,17 @@ static __init int hardware_setup(void)
+@@ -6277,11 +6288,17 @@ static __init int hardware_setup(void)
* page upon invalidation. No need to do anything if not
* using the APIC_ACCESS_ADDR VMCS field.
*/
@@ -29931,23 +31429,7 @@ index f34ab71..049ebd8 100644
if (enable_ept && !cpu_has_vmx_ept_2m_page())
kvm_disable_largepages();
-@@ -6231,6 +6248,7 @@ static __init int hardware_setup(void)
- kvm_tsc_scaling_ratio_frac_bits = 48;
- }
-
-+ pax_open_kernel();
- if (enable_apicv)
- kvm_x86_ops->update_cr8_intercept = NULL;
- else {
-@@ -6239,6 +6257,7 @@ static __init int hardware_setup(void)
- kvm_x86_ops->deliver_posted_interrupt = NULL;
- kvm_x86_ops->sync_pir_to_irr = vmx_sync_pir_to_irr_dummy;
- }
-+ pax_close_kernel();
-
- vmx_disable_intercept_for_msr(MSR_FS_BASE, false);
- vmx_disable_intercept_for_msr(MSR_GS_BASE, false);
-@@ -6293,10 +6312,12 @@ static __init int hardware_setup(void)
+@@ -6351,10 +6368,12 @@ static __init int hardware_setup(void)
enable_pml = 0;
if (!enable_pml) {
@@ -29960,7 +31442,7 @@ index f34ab71..049ebd8 100644
}
kvm_set_posted_intr_wakeup_handler(wakeup_handler);
-@@ -8615,6 +8636,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8673,6 +8692,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
"jmp 2f \n\t"
"1: " __ex(ASM_VMX_VMRESUME) "\n\t"
"2: "
@@ -29973,7 +31455,7 @@ index f34ab71..049ebd8 100644
/* Save guest registers, load host registers, keep flags */
"mov %0, %c[wordsize](%%" _ASM_SP ") \n\t"
"pop %0 \n\t"
-@@ -8667,6 +8694,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8725,6 +8750,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))
@@ -29985,7 +31467,7 @@ index f34ab71..049ebd8 100644
: "cc", "memory"
#ifdef CONFIG_X86_64
, "rax", "rbx", "rdi", "rsi"
-@@ -8680,7 +8712,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8738,7 +8768,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
if (debugctlmsr)
update_debugctlmsr(debugctlmsr);
@@ -29994,7 +31476,7 @@ index f34ab71..049ebd8 100644
/*
* The sysexit path does not restore ds/es, so we must set them to
* a reasonable value ourselves.
-@@ -8689,8 +8721,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -8747,8 +8777,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.
*/
@@ -30015,7 +31497,7 @@ index f34ab71..049ebd8 100644
#endif
vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP)
-@@ -10772,7 +10814,7 @@ out:
+@@ -10830,7 +10870,7 @@ out:
return ret;
}
@@ -30025,10 +31507,10 @@ index f34ab71..049ebd8 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 7eb4ebd..9431608 100644
+index eca5bd9..5cf1b68 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
-@@ -1937,8 +1937,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
+@@ -1945,8 +1945,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
{
struct kvm *kvm = vcpu->kvm;
int lm = is_long_mode(vcpu);
@@ -30039,7 +31521,7 @@ index 7eb4ebd..9431608 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;
-@@ -2636,6 +2636,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
+@@ -2647,6 +2647,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
if (n < msr_list.nmsrs)
goto out;
r = -EFAULT;
@@ -30048,7 +31530,7 @@ index 7eb4ebd..9431608 100644
if (copy_to_user(user_msr_list->indices, &msrs_to_save,
num_msrs_to_save * sizeof(u32)))
goto out;
-@@ -3029,7 +3031,7 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,
+@@ -3047,7 +3049,7 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,
static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
{
@@ -30057,7 +31539,7 @@ index 7eb4ebd..9431608 100644
u64 xstate_bv = xsave->header.xfeatures;
u64 valid;
-@@ -3065,7 +3067,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
+@@ -3083,7 +3085,7 @@ static void fill_xsave(u8 *dest, struct kvm_vcpu *vcpu)
static void load_xsave(struct kvm_vcpu *vcpu, u8 *src)
{
@@ -30066,7 +31548,7 @@ index 7eb4ebd..9431608 100644
u64 xstate_bv = *(u64 *)(src + XSAVE_HDR_OFFSET);
u64 valid;
-@@ -3109,7 +3111,7 @@ static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu,
+@@ -3127,7 +3129,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,
@@ -30075,7 +31557,7 @@ index 7eb4ebd..9431608 100644
sizeof(struct fxregs_state));
*(u64 *)&guest_xsave->region[XSAVE_HDR_OFFSET / sizeof(u32)] =
XFEATURE_MASK_FPSSE;
-@@ -3134,7 +3136,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
+@@ -3152,7 +3154,7 @@ static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
} else {
if (xstate_bv & ~XFEATURE_MASK_FPSSE)
return -EINVAL;
@@ -30084,7 +31566,7 @@ index 7eb4ebd..9431608 100644
guest_xsave->region, sizeof(struct fxregs_state));
}
return 0;
-@@ -6362,6 +6364,7 @@ void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
+@@ -6422,6 +6424,7 @@ void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm,
* exiting to the userspace. Otherwise, the value will be returned to the
* userspace.
*/
@@ -30092,7 +31574,7 @@ index 7eb4ebd..9431608 100644
static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
{
int r;
-@@ -6612,6 +6615,7 @@ out:
+@@ -6686,6 +6689,7 @@ out:
return r;
}
@@ -30100,7 +31582,7 @@ index 7eb4ebd..9431608 100644
static inline int vcpu_block(struct kvm *kvm, struct kvm_vcpu *vcpu)
{
if (!kvm_arch_vcpu_runnable(vcpu) &&
-@@ -7159,7 +7163,7 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
+@@ -7233,7 +7237,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 =
@@ -30109,7 +31591,7 @@ index 7eb4ebd..9431608 100644
memcpy(fpu->fpr, fxsave->st_space, 128);
fpu->fcw = fxsave->cwd;
-@@ -7176,7 +7180,7 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
+@@ -7250,7 +7254,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 =
@@ -30118,7 +31600,7 @@ index 7eb4ebd..9431608 100644
memcpy(fxsave->st_space, fpu->fpr, 128);
fxsave->cwd = fpu->fcw;
-@@ -7192,9 +7196,9 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
+@@ -7266,9 +7270,9 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
static void fx_init(struct kvm_vcpu *vcpu)
{
@@ -30130,7 +31612,7 @@ index 7eb4ebd..9431608 100644
host_xcr0 | XSTATE_COMPACTION_ENABLED;
/*
-@@ -7218,7 +7222,7 @@ void kvm_load_guest_fpu(struct kvm_vcpu *vcpu)
+@@ -7292,7 +7296,7 @@ void kvm_load_guest_fpu(struct kvm_vcpu *vcpu)
kvm_put_guest_xcr0(vcpu);
vcpu->guest_fpu_loaded = 1;
__kernel_fpu_begin();
@@ -30139,7 +31621,7 @@ index 7eb4ebd..9431608 100644
trace_kvm_fpu(1);
}
-@@ -7521,6 +7525,8 @@ bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu)
+@@ -7595,6 +7599,8 @@ bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu)
struct static_key kvm_no_apic_vcpu __read_mostly;
@@ -30148,7 +31630,7 @@ index 7eb4ebd..9431608 100644
int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
{
struct page *page;
-@@ -7537,11 +7543,14 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
+@@ -7612,11 +7618,14 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
else
vcpu->arch.mp_state = KVM_MP_STATE_UNINITIALIZED;
@@ -30167,7 +31649,7 @@ index 7eb4ebd..9431608 100644
vcpu->arch.pio_data = page_address(page);
kvm_set_tsc_khz(vcpu, max_tsc_khz);
-@@ -7597,6 +7606,9 @@ fail_mmu_destroy:
+@@ -7674,6 +7683,9 @@ fail_mmu_destroy:
kvm_mmu_destroy(vcpu);
fail_free_pio_data:
free_page((unsigned long)vcpu->arch.pio_data);
@@ -30177,7 +31659,7 @@ index 7eb4ebd..9431608 100644
fail:
return r;
}
-@@ -7614,6 +7626,8 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
+@@ -7692,6 +7704,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);
@@ -30187,7 +31669,7 @@ index 7eb4ebd..9431608 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 a43b2ea..e64e453 100644
+index 4ba229a..470f861 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)
@@ -32779,10 +34261,10 @@ index 5e044d5..d342fce 100644
#define FPU_CS (*(unsigned short *) &(FPU_info->regs->cs))
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
-index 65c47fd..3e0fd98 100644
+index f9d38a4..556175f 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
-@@ -33,3 +33,7 @@ obj-$(CONFIG_ACPI_NUMA) += srat.o
+@@ -34,3 +34,7 @@ obj-$(CONFIG_ACPI_NUMA) += srat.o
obj-$(CONFIG_NUMA_EMU) += numa_emulation.o
obj-$(CONFIG_X86_INTEL_MPX) += mpx.o
@@ -33590,10 +35072,10 @@ index e830c71..f7e9e6c 100644
+ return ret ? -EFAULT : 0;
+}
diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c
-index ae9a37b..c5f8310 100644
+index d8a798d..6f803ca 100644
--- a/arch/x86/mm/gup.c
+++ b/arch/x86/mm/gup.c
-@@ -266,7 +266,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
+@@ -302,7 +302,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
addr = start;
len = (unsigned long) nr_pages << PAGE_SHIFT;
end = start + len;
@@ -33602,7 +35084,7 @@ index ae9a37b..c5f8310 100644
(void __user *)start, len)))
return 0;
-@@ -342,6 +342,10 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write,
+@@ -378,6 +378,10 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write,
goto slow_irqon;
#endif
@@ -33639,7 +35121,7 @@ index a6d7392..3b105a8 100644
return (void *)vaddr;
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
-index 42982b2..7168fc3 100644
+index 740d7ac..4091827 100644
--- a/arch/x86/mm/hugetlbpage.c
+++ b/arch/x86/mm/hugetlbpage.c
@@ -74,23 +74,24 @@ int pud_huge(pud_t pud)
@@ -34204,10 +35686,10 @@ index cb4ef3d..377ec5a 100644
printk(KERN_INFO "Write protecting the kernel text: %luk\n",
size >> 10);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
-index ec081fe..14e8743 100644
+index 5488d21..6063860 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
-@@ -136,7 +136,7 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page,
+@@ -137,7 +137,7 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page,
* around without checking the pgd every time.
*/
@@ -34216,7 +35698,7 @@ index ec081fe..14e8743 100644
EXPORT_SYMBOL_GPL(__supported_pte_mask);
int force_personality32;
-@@ -169,7 +169,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -170,7 +170,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);
@@ -34229,7 +35711,7 @@ index ec081fe..14e8743 100644
/*
* When it is called after memory hot remove, pgd_none()
-@@ -180,6 +185,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -181,6 +186,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
continue;
spin_lock(&pgd_lock);
@@ -34255,7 +35737,7 @@ index ec081fe..14e8743 100644
list_for_each_entry(page, &pgd_list, lru) {
pgd_t *pgd;
spinlock_t *pgt_lock;
-@@ -188,6 +212,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -189,6 +213,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);
@@ -34263,7 +35745,7 @@ index ec081fe..14e8743 100644
if (!pgd_none(*pgd_ref) && !pgd_none(*pgd))
BUG_ON(pgd_page_vaddr(*pgd)
-@@ -201,7 +226,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+@@ -202,7 +227,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
set_pgd(pgd, *pgd_ref);
}
@@ -34274,7 +35756,7 @@ index ec081fe..14e8743 100644
}
spin_unlock(&pgd_lock);
}
-@@ -234,7 +262,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
+@@ -235,7 +263,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
{
if (pgd_none(*pgd)) {
pud_t *pud = (pud_t *)spp_getpage();
@@ -34283,7 +35765,7 @@ index ec081fe..14e8743 100644
if (pud != pud_offset(pgd, 0))
printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n",
pud, pud_offset(pgd, 0));
-@@ -246,7 +274,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
+@@ -247,7 +275,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
{
if (pud_none(*pud)) {
pmd_t *pmd = (pmd_t *) spp_getpage();
@@ -34292,7 +35774,7 @@ index ec081fe..14e8743 100644
if (pmd != pmd_offset(pud, 0))
printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n",
pmd, pmd_offset(pud, 0));
-@@ -275,7 +303,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte)
+@@ -276,7 +304,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);
@@ -34302,7 +35784,7 @@ index ec081fe..14e8743 100644
/*
* It's enough to flush this one mapping.
-@@ -337,14 +367,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size,
+@@ -338,14 +368,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();
@@ -34319,7 +35801,7 @@ index ec081fe..14e8743 100644
}
pmd = pmd_offset(pud, phys);
BUG_ON(!pmd_none(*pmd));
-@@ -585,7 +613,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
+@@ -586,7 +614,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
prot);
spin_lock(&init_mm.page_table_lock);
@@ -34328,7 +35810,7 @@ index ec081fe..14e8743 100644
spin_unlock(&init_mm.page_table_lock);
}
__flush_tlb_all();
-@@ -626,7 +654,7 @@ kernel_physical_mapping_init(unsigned long start,
+@@ -627,7 +655,7 @@ kernel_physical_mapping_init(unsigned long start,
page_size_mask);
spin_lock(&init_mm.page_table_lock);
@@ -34354,7 +35836,7 @@ index 9c0ff04..9020d5f 100644
return (void *)vaddr;
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
-index b9c78f3..c757af4 100644
+index 0d8d53d..5f7315c 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,
@@ -34464,7 +35946,7 @@ index b4f2e7e..96c9c3e 100644
pte = kmemcheck_pte_lookup(address);
diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
-index 844b06d..f363c86 100644
+index 72bb52f..4bc6d52 100644
--- a/arch/x86/mm/mmap.c
+++ b/arch/x86/mm/mmap.c
@@ -52,7 +52,7 @@ static unsigned long stack_maxrandom_size(void)
@@ -34631,18 +36113,9 @@ index ef05755..7125725 100644
err_out:
/* info might be NULL, but kfree() handles that */
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
-index c3b3f65..5bfe5dc 100644
+index d04f809..683f0be 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
-@@ -469,7 +469,7 @@ static void __init numa_clear_kernel_node_hotplug(void)
- {
- int i, nid;
- nodemask_t numa_kernel_nodes = NODE_MASK_NONE;
-- unsigned long start, end;
-+ u64 start, end;
- struct memblock_region *r;
-
- /*
@@ -508,7 +508,7 @@ static void __init numa_clear_kernel_node_hotplug(void)
}
}
@@ -34653,10 +36126,10 @@ index c3b3f65..5bfe5dc 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 b599a78..4ac899d 100644
+index 9cf96d8..ce09f13 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
-@@ -259,7 +259,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -264,7 +264,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
*/
#ifdef CONFIG_PCI_BIOS
if (pcibios_enabled && within(pfn, BIOS_BEGIN >> PAGE_SHIFT, BIOS_END >> PAGE_SHIFT))
@@ -34665,7 +36138,7 @@ index b599a78..4ac899d 100644
#endif
/*
-@@ -267,9 +267,10 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -272,9 +272,10 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
* Does not cover __inittext since that is gone later on. On
* 64bit we do not enforce !NX on the low mapping
*/
@@ -34678,7 +36151,7 @@ index b599a78..4ac899d 100644
/*
* The .rodata section needs to be read-only. Using the pfn
* catches all aliases.
-@@ -277,6 +278,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -282,6 +283,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
if (within(pfn, __pa_symbol(__start_rodata) >> PAGE_SHIFT,
__pa_symbol(__end_rodata) >> PAGE_SHIFT))
pgprot_val(forbidden) |= _PAGE_RW;
@@ -34686,7 +36159,7 @@ index b599a78..4ac899d 100644
#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA)
/*
-@@ -315,6 +317,13 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
+@@ -320,6 +322,13 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
}
#endif
@@ -34700,7 +36173,7 @@ index b599a78..4ac899d 100644
prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden));
return prot;
-@@ -451,23 +460,37 @@ EXPORT_SYMBOL_GPL(slow_virt_to_phys);
+@@ -456,23 +465,37 @@ EXPORT_SYMBOL_GPL(slow_virt_to_phys);
static void __set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte)
{
/* change init_mm */
@@ -34740,7 +36213,7 @@ index b599a78..4ac899d 100644
}
static int
-@@ -704,6 +727,10 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address,
+@@ -709,6 +732,10 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address,
return 0;
}
@@ -34751,7 +36224,7 @@ index b599a78..4ac899d 100644
static int split_large_page(struct cpa_data *cpa, pte_t *kpte,
unsigned long address)
{
-@@ -1147,6 +1174,9 @@ static int __cpa_process_fault(struct cpa_data *cpa, unsigned long vaddr,
+@@ -1152,6 +1179,9 @@ static int __cpa_process_fault(struct cpa_data *cpa, unsigned long vaddr,
}
}
@@ -34761,7 +36234,7 @@ index b599a78..4ac899d 100644
static int __change_page_attr(struct cpa_data *cpa, int primary)
{
unsigned long address;
-@@ -1205,7 +1235,9 @@ repeat:
+@@ -1210,7 +1240,9 @@ repeat:
* Do we really change anything ?
*/
if (pte_val(old_pte) != pte_val(new_pte)) {
@@ -34772,19 +36245,19 @@ index b599a78..4ac899d 100644
}
cpa->numpages = 1;
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
-index 188e3e0..5c75446 100644
+index f4ae536..e250eec 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
-@@ -588,7 +588,7 @@ int free_memtype(u64 start, u64 end)
+@@ -589,7 +589,7 @@ int free_memtype(u64 start, u64 end)
- if (!entry) {
+ if (IS_ERR(entry)) {
pr_info("x86/PAT: %s:%d freeing invalid memtype [mem %#010Lx-%#010Lx]\n",
- current->comm, current->pid, start, end - 1);
+ current->comm, task_pid_nr(current), start, end - 1);
return -EINVAL;
}
-@@ -711,8 +711,8 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
+@@ -712,8 +712,8 @@ static inline int range_is_allowed(unsigned long pfn, unsigned long size)
while (cursor < to) {
if (!devmem_is_allowed(pfn)) {
@@ -34795,7 +36268,7 @@ index 188e3e0..5c75446 100644
return 0;
}
cursor += PAGE_SIZE;
-@@ -782,7 +782,7 @@ int kernel_map_sync_memtype(u64 base, unsigned long size,
+@@ -783,7 +783,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",
@@ -34804,7 +36277,7 @@ index 188e3e0..5c75446 100644
cattr_name(pcm),
base, (unsigned long long)(base + size-1));
return -EINVAL;
-@@ -817,7 +817,7 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
+@@ -818,7 +818,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",
@@ -34813,7 +36286,7 @@ index 188e3e0..5c75446 100644
cattr_name(want_pcm),
(unsigned long long)paddr,
(unsigned long long)(paddr + size - 1),
-@@ -838,7 +838,7 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
+@@ -839,7 +839,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",
@@ -34823,10 +36296,10 @@ index 188e3e0..5c75446 100644
(unsigned long long)paddr,
(unsigned long long)(paddr + size - 1),
diff --git a/arch/x86/mm/pat_rbtree.c b/arch/x86/mm/pat_rbtree.c
-index 6393108..890adda 100644
+index 2f770225..22a4d23 100644
--- a/arch/x86/mm/pat_rbtree.c
+++ b/arch/x86/mm/pat_rbtree.c
-@@ -161,7 +161,7 @@ success:
+@@ -171,7 +171,7 @@ success:
failure:
pr_info("x86/PAT: %s:%d conflicting memory types %Lx-%Lx %s<->%s\n",
@@ -34885,7 +36358,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 fb0a9dd..5ab49c4 100644
+index 4eb287e..e91945b 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)
@@ -35173,7 +36646,7 @@ index fb0a9dd..5ab49c4 100644
pgd_dtor(pgd);
paravirt_pgd_free(mm, pgd);
_pgd_free(pgd);
-@@ -544,6 +616,55 @@ void __init reserve_top_address(unsigned long reserve)
+@@ -526,6 +598,50 @@ void __init reserve_top_address(unsigned long reserve)
int fixmaps_set;
@@ -35192,11 +36665,6 @@ index fb0a9dd..5ab49c4 100644
+ case VSYSCALL_PAGE:
+ break;
+#endif
-+
-+#ifdef CONFIG_PARAVIRT_CLOCK
-+ case PVCLOCK_FIXMAP_BEGIN ... PVCLOCK_FIXMAP_END:
-+ break;
-+#endif
+ }
+
+ pgd = pgd_offset_k(address);
@@ -35229,7 +36697,7 @@ index fb0a9dd..5ab49c4 100644
void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
{
unsigned long address = __fix_to_virt(idx);
-@@ -554,6 +675,7 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
+@@ -536,6 +652,7 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
}
set_pte_vaddr(address, pte);
fixmaps_set++;
@@ -35237,7 +36705,7 @@ index fb0a9dd..5ab49c4 100644
}
void native_set_fixmap(enum fixed_addresses idx, phys_addr_t phys,
-@@ -620,9 +742,11 @@ int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot)
+@@ -602,9 +719,11 @@ int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot)
prot = pgprot_4k_2_large(prot);
@@ -35268,7 +36736,7 @@ index 75cc097..79a097f 100644
/*
* It's enough to flush this one mapping.
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
-index 90555bf..f5f1828 100644
+index 92e2eac..92fc081 100644
--- a/arch/x86/mm/setup_nx.c
+++ b/arch/x86/mm/setup_nx.c
@@ -5,8 +5,10 @@
@@ -35293,7 +36761,7 @@ index 90555bf..f5f1828 100644
void x86_configure_nx(void)
{
+#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
- if (cpu_has_nx && !disable_nx)
+ if (boot_cpu_has(X86_FEATURE_NX) && !disable_nx)
__supported_pte_mask |= _PAGE_NX;
else
+#endif
@@ -35449,7 +36917,7 @@ index 4093216..44b6b83 100644
+ pax_force_retaddr
ret
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
-index 7599197..8e986f3 100644
+index 4286f36..54471fd 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -14,7 +14,11 @@
@@ -35474,7 +36942,7 @@ index 7599197..8e986f3 100644
}
struct jit_context {
-@@ -1030,7 +1036,9 @@ common_load:
+@@ -1060,7 +1066,9 @@ common_load:
pr_err("bpf_jit_compile fatal error\n");
return -EFAULT;
}
@@ -35484,7 +36952,7 @@ index 7599197..8e986f3 100644
}
proglen += ilen;
addrs[i] = proglen;
-@@ -1107,7 +1115,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
+@@ -1137,7 +1145,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
if (image) {
bpf_flush_icache(header, image + proglen);
@@ -35492,7 +36960,7 @@ index 7599197..8e986f3 100644
prog->bpf_func = (void *)image;
prog->jited = 1;
}
-@@ -1120,12 +1127,8 @@ void bpf_jit_free(struct bpf_prog *fp)
+@@ -1150,12 +1157,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;
@@ -35535,7 +37003,7 @@ index 4e664bd..2beeaa2 100644
return NULL;
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
-index 1d2e639..f6ef82a 100644
+index 1d2e639..d7f0e67 100644
--- a/arch/x86/oprofile/nmi_int.c
+++ b/arch/x86/oprofile/nmi_int.c
@@ -23,6 +23,7 @@
@@ -35546,6 +37014,15 @@ index 1d2e639..f6ef82a 100644
#include "op_counter.h"
#include "op_x86_model.h"
+@@ -614,7 +615,7 @@ enum __force_cpu_type {
+
+ static int force_cpu_type;
+
+-static int set_cpu_type(const char *str, struct kernel_param *kp)
++static int set_cpu_type(const char *str, const struct kernel_param *kp)
+ {
+ if (!strcmp(str, "timer")) {
+ force_cpu_type = timer;
@@ -785,8 +786,11 @@ int __init op_nmi_init(struct oprofile_operations *ops)
if (ret)
return ret;
@@ -35671,7 +37148,7 @@ index 9bd1154..e9d4656 100644
.callback = fix_broken_hp_bios_irq9,
.ident = "HP Pavilion N5400 Series Laptop",
diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c
-index 9b83b90..2c256c5 100644
+index 9770e55..76067ec 100644
--- a/arch/x86/pci/pcbios.c
+++ b/arch/x86/pci/pcbios.c
@@ -79,7 +79,7 @@ union bios32 {
@@ -35803,129 +37280,51 @@ index 9b83b90..2c256c5 100644
: "memory");
local_irq_restore(flags);
-@@ -189,7 +235,10 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
-
- switch (len) {
- case 1:
-- __asm__("lcall *(%%esi); cld\n\t"
-+ __asm__("movw %w6, %%ds\n\t"
-+ "lcall *%%ss:(%%esi); cld\n\t"
-+ "push %%ss\n\t"
-+ "pop %%ds\n\t"
- "jc 1f\n\t"
- "xor %%ah, %%ah\n"
- "1:"
-@@ -198,7 +247,8 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
- : "1" (PCIBIOS_READ_CONFIG_BYTE),
- "b" (bx),
- "D" ((long)reg),
-- "S" (&pci_indirect));
-+ "S" (&pci_indirect),
-+ "r" (__PCIBIOS_DS));
- /*
- * Zero-extend the result beyond 8 bits, do not trust the
- * BIOS having done it:
-@@ -206,7 +256,10 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
- *value &= 0xff;
- break;
- case 2:
-- __asm__("lcall *(%%esi); cld\n\t"
-+ __asm__("movw %w6, %%ds\n\t"
-+ "lcall *%%ss:(%%esi); cld\n\t"
-+ "push %%ss\n\t"
-+ "pop %%ds\n\t"
- "jc 1f\n\t"
- "xor %%ah, %%ah\n"
- "1:"
-@@ -215,7 +268,8 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
- : "1" (PCIBIOS_READ_CONFIG_WORD),
- "b" (bx),
- "D" ((long)reg),
-- "S" (&pci_indirect));
-+ "S" (&pci_indirect),
-+ "r" (__PCIBIOS_DS));
- /*
- * Zero-extend the result beyond 16 bits, do not trust the
- * BIOS having done it:
-@@ -223,7 +277,10 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
- *value &= 0xffff;
- break;
- case 4:
-- __asm__("lcall *(%%esi); cld\n\t"
-+ __asm__("movw %w6, %%ds\n\t"
-+ "lcall *%%ss:(%%esi); cld\n\t"
-+ "push %%ss\n\t"
-+ "pop %%ds\n\t"
- "jc 1f\n\t"
- "xor %%ah, %%ah\n"
- "1:"
-@@ -232,7 +289,8 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
- : "1" (PCIBIOS_READ_CONFIG_DWORD),
- "b" (bx),
- "D" ((long)reg),
-- "S" (&pci_indirect));
-+ "S" (&pci_indirect),
-+ "r" (__PCIBIOS_DS));
+@@ -202,7 +248,10 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
break;
}
-@@ -256,7 +314,10 @@ static int pci_bios_write(unsigned int seg, unsigned int bus,
-
- switch (len) {
- case 1:
-- __asm__("lcall *(%%esi); cld\n\t"
-+ __asm__("movw %w6, %%ds\n\t"
-+ "lcall *%%ss:(%%esi); cld\n\t"
-+ "push %%ss\n\t"
-+ "pop %%ds\n\t"
- "jc 1f\n\t"
- "xor %%ah, %%ah\n"
- "1:"
-@@ -265,10 +326,14 @@ static int pci_bios_write(unsigned int seg, unsigned int bus,
- "c" (value),
- "b" (bx),
- "D" ((long)reg),
-- "S" (&pci_indirect));
-+ "S" (&pci_indirect),
-+ "r" (__PCIBIOS_DS));
- break;
- case 2:
-- __asm__("lcall *(%%esi); cld\n\t"
-+ __asm__("movw %w6, %%ds\n\t"
-+ "lcall *%%ss:(%%esi); cld\n\t"
-+ "push %%ss\n\t"
-+ "pop %%ds\n\t"
- "jc 1f\n\t"
- "xor %%ah, %%ah\n"
- "1:"
-@@ -277,10 +342,14 @@ static int pci_bios_write(unsigned int seg, unsigned int bus,
- "c" (value),
- "b" (bx),
- "D" ((long)reg),
-- "S" (&pci_indirect));
-+ "S" (&pci_indirect),
-+ "r" (__PCIBIOS_DS));
- break;
- case 4:
-- __asm__("lcall *(%%esi); cld\n\t"
-+ __asm__("movw %w6, %%ds\n\t"
-+ "lcall *%%ss:(%%esi); cld\n\t"
-+ "push %%ss\n\t"
-+ "pop %%ds\n\t"
- "jc 1f\n\t"
- "xor %%ah, %%ah\n"
- "1:"
-@@ -289,7 +358,8 @@ static int pci_bios_write(unsigned int seg, unsigned int bus,
- "c" (value),
- "b" (bx),
- "D" ((long)reg),
-- "S" (&pci_indirect));
-+ "S" (&pci_indirect),
-+ "r" (__PCIBIOS_DS));
+- __asm__("lcall *(%%esi); cld\n\t"
++ __asm__("movw %w6, %%ds\n\t"
++ "lcall *%%ss:(%%esi); cld\n\t"
++ "push %%ss\n\t"
++ "pop %%ds\n\t"
+ "jc 1f\n\t"
+ "xor %%ah, %%ah\n"
+ "1:"
+@@ -211,7 +260,8 @@ static int pci_bios_read(unsigned int seg, unsigned int bus,
+ : "1" (number),
+ "b" (bx),
+ "D" ((long)reg),
+- "S" (&pci_indirect));
++ "S" (&pci_indirect),
++ "r" (__PCIBIOS_DS));
+ /*
+ * Zero-extend the result beyond 8 or 16 bits, do not trust the
+ * BIOS having done it:
+@@ -250,7 +300,10 @@ static int pci_bios_write(unsigned int seg, unsigned int bus,
break;
}
-@@ -394,10 +464,13 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
+- __asm__("lcall *(%%esi); cld\n\t"
++ __asm__("movw %w6, %%ds\n\t"
++ "lcall *%%ss:(%%esi); cld\n\t"
++ "push %%ss\n\t"
++ "pop %%ds\n\t"
+ "jc 1f\n\t"
+ "xor %%ah, %%ah\n"
+ "1:"
+@@ -259,7 +312,8 @@ static int pci_bios_write(unsigned int seg, unsigned int bus,
+ "c" (value),
+ "b" (bx),
+ "D" ((long)reg),
+- "S" (&pci_indirect));
++ "S" (&pci_indirect),
++ "r" (__PCIBIOS_DS));
+
+ raw_spin_unlock_irqrestore(&pci_config_lock, flags);
+
+@@ -362,10 +416,13 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
DBG("PCI: Fetching IRQ routing table... ");
__asm__("push %%es\n\t"
@@ -35940,7 +37339,7 @@ index 9b83b90..2c256c5 100644
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
-@@ -408,7 +481,8 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
+@@ -376,7 +433,8 @@ struct irq_routing_table * pcibios_get_irq_routing_table(void)
"1" (0),
"D" ((long) &opt),
"S" (&pci_indirect),
@@ -35950,7 +37349,7 @@ index 9b83b90..2c256c5 100644
: "memory");
DBG("OK ret=%d, size=%d, map=%x\n", ret, opt.size, map);
if (ret & 0xff00)
-@@ -432,7 +506,10 @@ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
+@@ -400,7 +458,10 @@ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
{
int ret;
@@ -35962,7 +37361,7 @@ index 9b83b90..2c256c5 100644
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"1:"
-@@ -440,7 +517,8 @@ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
+@@ -408,7 +469,8 @@ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
: "0" (PCIBIOS_SET_PCI_HW_INT),
"b" ((dev->bus->number << 8) | dev->devfn),
"c" ((irq << 8) | (pin + 10)),
@@ -35972,6 +37371,35 @@ index 9b83b90..2c256c5 100644
return !(ret & 0xff00);
}
EXPORT_SYMBOL(pcibios_set_irq_routing);
+diff --git a/arch/x86/pci/vmd.c b/arch/x86/pci/vmd.c
+index d57e480..20eb97a 100644
+--- a/arch/x86/pci/vmd.c
++++ b/arch/x86/pci/vmd.c
+@@ -374,7 +374,7 @@ static void vmd_teardown_dma_ops(struct vmd_dev *vmd)
+ #define ASSIGN_VMD_DMA_OPS(source, dest, fn) \
+ do { \
+ if (source->fn) \
+- dest->fn = vmd_##fn; \
++ *(void **)&dest->fn = vmd_##fn; \
+ } while (0)
+
+ static void vmd_setup_dma_ops(struct vmd_dev *vmd)
+@@ -388,6 +388,7 @@ static void vmd_setup_dma_ops(struct vmd_dev *vmd)
+
+ if (!source)
+ return;
++ pax_open_kernel();
+ ASSIGN_VMD_DMA_OPS(source, dest, alloc);
+ ASSIGN_VMD_DMA_OPS(source, dest, free);
+ ASSIGN_VMD_DMA_OPS(source, dest, mmap);
+@@ -405,6 +406,7 @@ static void vmd_setup_dma_ops(struct vmd_dev *vmd)
+ #ifdef ARCH_HAS_DMA_GET_REQUIRED_MASK
+ ASSIGN_VMD_DMA_OPS(source, dest, get_required_mask);
+ #endif
++ pax_close_kernel();
+ add_dma_domain(domain);
+ }
+ #undef ASSIGN_VMD_DMA_OPS
diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c
index ed5b673..24d2d53 100644
--- a/arch/x86/platform/efi/efi_32.c
@@ -36221,7 +37649,7 @@ index 86d0f9e..6d499f4 100644
ENDPROC(efi_call)
diff --git a/arch/x86/platform/intel-mid/intel-mid.c b/arch/x86/platform/intel-mid/intel-mid.c
-index 1bbc21e..8a50853 100644
+index 90bb997..3cca066 100644
--- a/arch/x86/platform/intel-mid/intel-mid.c
+++ b/arch/x86/platform/intel-mid/intel-mid.c
@@ -63,7 +63,7 @@ enum intel_mid_timer_options intel_mid_timer_options;
@@ -36318,10 +37746,10 @@ index d6ee929..3637cb5 100644
.getproplen = olpc_dt_getproplen,
.getproperty = olpc_dt_getproperty,
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
-index 9ab5279..8ba4611 100644
+index d5f6499..12939f1 100644
--- a/arch/x86/power/cpu.c
+++ b/arch/x86/power/cpu.c
-@@ -134,11 +134,8 @@ static void do_fpu_end(void)
+@@ -159,11 +159,8 @@ static void do_fpu_end(void)
static void fix_processor_context(void)
{
int cpu = smp_processor_id();
@@ -36335,7 +37763,7 @@ index 9ab5279..8ba4611 100644
set_tss_desc(cpu, t); /*
* This just modifies memory; should not be
* necessary. But... This is necessary, because
-@@ -147,10 +144,6 @@ static void fix_processor_context(void)
+@@ -172,10 +169,6 @@ static void fix_processor_context(void)
*/
#ifdef CONFIG_X86_64
@@ -36375,10 +37803,10 @@ index 0b7a63d..dff2199 100644
#endif
}
diff --git a/arch/x86/realmode/rm/Makefile b/arch/x86/realmode/rm/Makefile
-index 2730d77..2e4cd19 100644
+index 3e75fcf..4cfefb8 100644
--- a/arch/x86/realmode/rm/Makefile
+++ b/arch/x86/realmode/rm/Makefile
-@@ -68,5 +68,8 @@ $(obj)/realmode.relocs: $(obj)/realmode.elf FORCE
+@@ -68,6 +68,9 @@ $(obj)/realmode.relocs: $(obj)/realmode.elf FORCE
KBUILD_CFLAGS := $(LINUXINCLUDE) $(REALMODE_CFLAGS) -D_SETUP -D_WAKEUP \
-I$(srctree)/arch/x86/boot
@@ -36387,6 +37815,7 @@ index 2730d77..2e4cd19 100644
+endif
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
GCOV_PROFILE := n
+ UBSAN_SANITIZE := n
diff --git a/arch/x86/realmode/rm/header.S b/arch/x86/realmode/rm/header.S
index a28221d..93c40f1 100644
--- a/arch/x86/realmode/rm/header.S
@@ -36514,7 +37943,7 @@ index 604a37e..e49702a 100644
relocs-objs := relocs_32.o relocs_64.o relocs_common.o
PHONY += relocs
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
-index 0c2fae8..88d7719 100644
+index 0c2fae8..1d2a079 100644
--- a/arch/x86/tools/relocs.c
+++ b/arch/x86/tools/relocs.c
@@ -1,5 +1,7 @@
@@ -36533,7 +37962,15 @@ index 0c2fae8..88d7719 100644
struct relocs {
uint32_t *offset;
-@@ -386,9 +389,39 @@ static void read_ehdr(FILE *fp)
+@@ -45,6 +48,7 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = {
+ "^(xen_irq_disable_direct_reloc$|"
+ "xen_save_fl_direct_reloc$|"
+ "VDSO|"
++ "__rap_hash_|"
+ "__crc_)",
+
+ /*
+@@ -386,9 +390,39 @@ static void read_ehdr(FILE *fp)
}
}
@@ -36574,7 +38011,7 @@ index 0c2fae8..88d7719 100644
Elf_Shdr shdr;
secs = calloc(ehdr.e_shnum, sizeof(struct section));
-@@ -423,7 +456,7 @@ static void read_shdrs(FILE *fp)
+@@ -423,7 +457,7 @@ static void read_shdrs(FILE *fp)
static void read_strtabs(FILE *fp)
{
@@ -36583,7 +38020,7 @@ index 0c2fae8..88d7719 100644
for (i = 0; i < ehdr.e_shnum; i++) {
struct section *sec = &secs[i];
if (sec->shdr.sh_type != SHT_STRTAB) {
-@@ -448,7 +481,7 @@ static void read_strtabs(FILE *fp)
+@@ -448,7 +482,7 @@ static void read_strtabs(FILE *fp)
static void read_symtabs(FILE *fp)
{
@@ -36592,7 +38029,7 @@ index 0c2fae8..88d7719 100644
for (i = 0; i < ehdr.e_shnum; i++) {
struct section *sec = &secs[i];
if (sec->shdr.sh_type != SHT_SYMTAB) {
-@@ -479,9 +512,11 @@ static void read_symtabs(FILE *fp)
+@@ -479,9 +513,11 @@ static void read_symtabs(FILE *fp)
}
@@ -36606,7 +38043,7 @@ index 0c2fae8..88d7719 100644
for (i = 0; i < ehdr.e_shnum; i++) {
struct section *sec = &secs[i];
if (sec->shdr.sh_type != SHT_REL_TYPE) {
-@@ -501,9 +536,22 @@ static void read_relocs(FILE *fp)
+@@ -501,9 +537,22 @@ static void read_relocs(FILE *fp)
die("Cannot read symbol table: %s\n",
strerror(errno));
}
@@ -36630,7 +38067,7 @@ index 0c2fae8..88d7719 100644
rel->r_info = elf_xword_to_cpu(rel->r_info);
#if (SHT_REL_TYPE == SHT_RELA)
rel->r_addend = elf_xword_to_cpu(rel->r_addend);
-@@ -515,7 +563,7 @@ static void read_relocs(FILE *fp)
+@@ -515,7 +564,7 @@ static void read_relocs(FILE *fp)
static void print_absolute_symbols(void)
{
@@ -36639,7 +38076,7 @@ index 0c2fae8..88d7719 100644
const char *format;
if (ELF_BITS == 64)
-@@ -528,7 +576,7 @@ static void print_absolute_symbols(void)
+@@ -528,7 +577,7 @@ static void print_absolute_symbols(void)
for (i = 0; i < ehdr.e_shnum; i++) {
struct section *sec = &secs[i];
char *sym_strtab;
@@ -36648,7 +38085,7 @@ index 0c2fae8..88d7719 100644
if (sec->shdr.sh_type != SHT_SYMTAB) {
continue;
-@@ -555,7 +603,7 @@ static void print_absolute_symbols(void)
+@@ -555,7 +604,7 @@ static void print_absolute_symbols(void)
static void print_absolute_relocs(void)
{
@@ -36657,7 +38094,7 @@ index 0c2fae8..88d7719 100644
const char *format;
if (ELF_BITS == 64)
-@@ -568,7 +616,7 @@ static void print_absolute_relocs(void)
+@@ -568,7 +617,7 @@ static void print_absolute_relocs(void)
struct section *sec_applies, *sec_symtab;
char *sym_strtab;
Elf_Sym *sh_symtab;
@@ -36666,7 +38103,7 @@ index 0c2fae8..88d7719 100644
if (sec->shdr.sh_type != SHT_REL_TYPE) {
continue;
}
-@@ -645,13 +693,13 @@ static void add_reloc(struct relocs *r, uint32_t offset)
+@@ -645,13 +694,13 @@ static void add_reloc(struct relocs *r, uint32_t offset)
static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel,
Elf_Sym *sym, const char *symname))
{
@@ -36682,7 +38119,7 @@ index 0c2fae8..88d7719 100644
struct section *sec = &secs[i];
if (sec->shdr.sh_type != SHT_REL_TYPE) {
-@@ -697,7 +745,7 @@ static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel,
+@@ -697,7 +746,7 @@ static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel,
* kernel data and does not require special treatment.
*
*/
@@ -36691,7 +38128,7 @@ index 0c2fae8..88d7719 100644
static Elf_Addr per_cpu_load_addr;
static void percpu_init(void)
-@@ -830,6 +878,23 @@ static int do_reloc32(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,
+@@ -830,6 +879,23 @@ static int do_reloc32(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,
{
unsigned r_type = ELF32_R_TYPE(rel->r_info);
int shn_abs = (sym->st_shndx == SHN_ABS) && !is_reloc(S_REL, symname);
@@ -36715,7 +38152,7 @@ index 0c2fae8..88d7719 100644
switch (r_type) {
case R_386_NONE:
-@@ -968,7 +1033,7 @@ static int write32_as_text(uint32_t v, FILE *f)
+@@ -968,7 +1034,7 @@ static int write32_as_text(uint32_t v, FILE *f)
static void emit_relocs(int as_text, int use_real_mode)
{
@@ -36724,7 +38161,7 @@ index 0c2fae8..88d7719 100644
int (*write_reloc)(uint32_t, FILE *) = write32;
int (*do_reloc)(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,
const char *symname);
-@@ -1078,10 +1143,11 @@ void process(FILE *fp, int use_real_mode, int as_text,
+@@ -1078,10 +1144,11 @@ void process(FILE *fp, int use_real_mode, int as_text,
{
regex_init(use_real_mode);
read_ehdr(fp);
@@ -36776,7 +38213,7 @@ 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 beab8c7..9a29803 100644
+index e3679db..16b93d1 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -131,8 +131,6 @@ EXPORT_SYMBOL_GPL(xen_start_info);
@@ -36817,8 +38254,17 @@ index beab8c7..9a29803 100644
BUG_ON(va & ~PAGE_MASK);
for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
-@@ -1271,7 +1267,7 @@ static const struct pv_apic_ops xen_apic_ops __initconst = {
- #endif
+@@ -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.
+ */
+- if (addr == (unsigned long)debug)
++ if (addr == (unsigned long)int1)
+ addr = (unsigned long)xen_debug;
+ else if (addr == (unsigned long)int3)
+ addr = (unsigned long)xen_int3;
+@@ -1262,7 +1258,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
+ .end_context_switch = xen_end_context_switch,
};
-static void xen_reboot(int reason)
@@ -36826,7 +38272,7 @@ index beab8c7..9a29803 100644
{
struct sched_shutdown r = { .reason = reason };
int cpu;
-@@ -1279,26 +1275,26 @@ static void xen_reboot(int reason)
+@@ -1270,26 +1266,26 @@ static void xen_reboot(int reason)
for_each_online_cpu(cpu)
xen_pmu_finish(cpu);
@@ -36859,7 +38305,7 @@ index beab8c7..9a29803 100644
{
if (pm_power_off)
pm_power_off();
-@@ -1451,8 +1447,11 @@ static void __ref xen_setup_gdt(int cpu)
+@@ -1442,8 +1438,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;
@@ -36873,7 +38319,7 @@ index beab8c7..9a29803 100644
pv_cpu_ops.write_gdt_entry = xen_write_gdt_entry;
pv_cpu_ops.load_gdt = xen_load_gdt;
-@@ -1570,7 +1569,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1560,7 +1559,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
__userpte_alloc_gfp &= ~__GFP_HIGHMEM;
/* Work out if we support NX */
@@ -36892,7 +38338,7 @@ index beab8c7..9a29803 100644
/* Get mfn list */
xen_build_dynamic_phys_to_machine();
-@@ -1598,13 +1607,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1588,13 +1597,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
machine_ops = xen_machine_ops;
@@ -36907,7 +38353,7 @@ index beab8c7..9a29803 100644
#ifdef CONFIG_ACPI_NUMA
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index cb5e266..cd5bcab 100644
+index c913ca4..b6d8c05 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1950,7 +1950,11 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
@@ -36954,7 +38400,7 @@ index cb5e266..cd5bcab 100644
#endif
/* This will work as long as patching hasn't happened yet
-@@ -2473,6 +2489,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
+@@ -2472,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,
@@ -37016,10 +38462,10 @@ index 3f4ebf0..f074dc1 100644
}
diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S
-index fd92a64..1f72641 100644
+index feb6d40..e59382c 100644
--- a/arch/x86/xen/xen-asm_32.S
+++ b/arch/x86/xen/xen-asm_32.S
-@@ -99,7 +99,7 @@ ENTRY(xen_iret)
+@@ -85,7 +85,7 @@ ENTRY(xen_iret)
pushw %fs
movl $(__KERNEL_PERCPU), %eax
movl %eax, %fs
@@ -37051,7 +38497,7 @@ index b65f59a..c43f9c6 100644
mov %rsi,xen_start_info
mov $init_thread_union+THREAD_SIZE,%rsp
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
-index 1399423..b1ae0fa 100644
+index 4140b07..a391b69 100644
--- a/arch/x86/xen/xen-ops.h
+++ b/arch/x86/xen/xen-ops.h
@@ -16,8 +16,6 @@ void xen_syscall_target(void);
@@ -37102,7 +38548,7 @@ 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 d4d1443..bb167da 100644
+index cf75915..02d854f 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1143,7 +1143,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
@@ -37124,7 +38570,7 @@ index d4d1443..bb167da 100644
nr_pages += end - start;
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
-index 5a37188..0361054 100644
+index 66e6f1a..8fb30f4 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -561,10 +561,10 @@ u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
@@ -37159,7 +38605,7 @@ index 5a37188..0361054 100644
percpu_counter_sum_positive(&rwstat->cpu_cnt[i]),
&sum.aux_cnt[i]);
}
-@@ -877,13 +877,13 @@ static int blkcg_print_stat(struct seq_file *sf, void *v)
+@@ -886,13 +886,13 @@ static int blkcg_print_stat(struct seq_file *sf, void *v)
rwstat = blkg_rwstat_recursive_sum(blkg, NULL,
offsetof(struct blkcg_gq, stat_bytes));
@@ -37177,24 +38623,11 @@ index 5a37188..0361054 100644
spin_unlock_irq(blkg->q->queue_lock);
-diff --git a/block/blk-iopoll.c b/block/blk-iopoll.c
-index 0736729..2ec3b48 100644
---- a/block/blk-iopoll.c
-+++ b/block/blk-iopoll.c
-@@ -74,7 +74,7 @@ void blk_iopoll_complete(struct blk_iopoll *iop)
- }
- EXPORT_SYMBOL(blk_iopoll_complete);
-
--static void blk_iopoll_softirq(struct softirq_action *h)
-+static __latent_entropy void blk_iopoll_softirq(void)
- {
- struct list_head *list = this_cpu_ptr(&blk_cpu_iopoll);
- int rearm = 0, budget = blk_iopoll_budget;
diff --git a/block/blk-map.c b/block/blk-map.c
-index f565e11..f05b424 100644
+index a54f054..760b494 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
-@@ -214,7 +214,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf,
+@@ -245,7 +245,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf,
if (!len || !kbuf)
return -EINVAL;
@@ -37285,10 +38718,10 @@ index f678c73..f35aa18 100644
err = -EFAULT;
goto out;
diff --git a/block/genhd.c b/block/genhd.c
-index e5cafa51..65e4557 100644
+index 9f42526..fcc8648 100644
--- a/block/genhd.c
+++ b/block/genhd.c
-@@ -470,21 +470,24 @@ static char *bdevt_str(dev_t devt, char *buf)
+@@ -471,21 +471,24 @@ static char *bdevt_str(dev_t devt, char *buf)
/*
* Register device numbers dev..(dev+range-1)
@@ -37405,8 +38838,34 @@ index 0774799..7afc734 100644
if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len))
goto error;
+diff --git a/crypto/cast6_generic.c b/crypto/cast6_generic.c
+index 058c8d7..55229dd 100644
+--- a/crypto/cast6_generic.c
++++ b/crypto/cast6_generic.c
+@@ -181,8 +181,9 @@ static inline void QBAR(u32 *block, u8 *Kr, u32 *Km)
+ block[2] ^= F1(block[3], Kr[0], Km[0]);
+ }
+
+-void __cast6_encrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf)
++void __cast6_encrypt(void *_c, u8 *outbuf, const u8 *inbuf)
+ {
++ struct cast6_ctx *c = _c;
+ const __be32 *src = (const __be32 *)inbuf;
+ __be32 *dst = (__be32 *)outbuf;
+ u32 block[4];
+@@ -219,8 +220,9 @@ static void cast6_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
+ __cast6_encrypt(crypto_tfm_ctx(tfm), outbuf, inbuf);
+ }
+
+-void __cast6_decrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf)
++void __cast6_decrypt(void *_c, u8 *outbuf, const u8 *inbuf)
+ {
++ struct cast6_ctx *c = _c;
+ const __be32 *src = (const __be32 *)inbuf;
+ __be32 *dst = (__be32 *)outbuf;
+ u32 block[4];
diff --git a/crypto/cryptd.c b/crypto/cryptd.c
-index c81861b..dbf894f 100644
+index 7921251..ba86330 100644
--- a/crypto/cryptd.c
+++ b/crypto/cryptd.c
@@ -63,7 +63,7 @@ struct cryptd_blkcipher_ctx {
@@ -37453,6 +38912,75 @@ index ee9cfb9..30b36ed 100644
if (!ret)
kobject_uevent(&pinst->kobj, KOBJ_ADD);
+diff --git a/crypto/salsa20_generic.c b/crypto/salsa20_generic.c
+index f550b5d..8488beb 100644
+--- a/crypto/salsa20_generic.c
++++ b/crypto/salsa20_generic.c
+@@ -104,7 +104,7 @@ static void salsa20_wordtobyte(u8 output[64], const u32 input[16])
+ static const char sigma[16] = "expand 32-byte k";
+ static const char tau[16] = "expand 16-byte k";
+
+-static void salsa20_keysetup(struct salsa20_ctx *ctx, const u8 *k, u32 kbytes)
++static void __salsa20_keysetup(struct salsa20_ctx *ctx, const u8 *k, u32 kbytes)
+ {
+ const char *constants;
+
+@@ -128,7 +128,7 @@ static void salsa20_keysetup(struct salsa20_ctx *ctx, const u8 *k, u32 kbytes)
+ ctx->input[15] = U8TO32_LITTLE(constants + 12);
+ }
+
+-static void salsa20_ivsetup(struct salsa20_ctx *ctx, const u8 *iv)
++static void __salsa20_ivsetup(struct salsa20_ctx *ctx, const u8 *iv)
+ {
+ ctx->input[6] = U8TO32_LITTLE(iv + 0);
+ ctx->input[7] = U8TO32_LITTLE(iv + 4);
+@@ -136,7 +136,7 @@ static void salsa20_ivsetup(struct salsa20_ctx *ctx, const u8 *iv)
+ ctx->input[9] = 0;
+ }
+
+-static void salsa20_encrypt_bytes(struct salsa20_ctx *ctx, u8 *dst,
++static void __salsa20_encrypt_bytes(struct salsa20_ctx *ctx, u8 *dst,
+ const u8 *src, unsigned int bytes)
+ {
+ u8 buf[64];
+@@ -170,7 +170,7 @@ static int setkey(struct crypto_tfm *tfm, const u8 *key,
+ unsigned int keysize)
+ {
+ struct salsa20_ctx *ctx = crypto_tfm_ctx(tfm);
+- salsa20_keysetup(ctx, key, keysize);
++ __salsa20_keysetup(ctx, key, keysize);
+ return 0;
+ }
+
+@@ -186,24 +186,24 @@ static int encrypt(struct blkcipher_desc *desc,
+ blkcipher_walk_init(&walk, dst, src, nbytes);
+ err = blkcipher_walk_virt_block(desc, &walk, 64);
+
+- salsa20_ivsetup(ctx, walk.iv);
++ __salsa20_ivsetup(ctx, walk.iv);
+
+ if (likely(walk.nbytes == nbytes))
+ {
+- salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
++ __salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
+ walk.src.virt.addr, nbytes);
+ return blkcipher_walk_done(desc, &walk, 0);
+ }
+
+ while (walk.nbytes >= 64) {
+- salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
++ __salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
+ walk.src.virt.addr,
+ walk.nbytes - (walk.nbytes % 64));
+ err = blkcipher_walk_done(desc, &walk, walk.nbytes % 64);
+ }
+
+ if (walk.nbytes) {
+- salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
++ __salsa20_encrypt_bytes(ctx, walk.dst.virt.addr,
+ walk.src.virt.addr, walk.nbytes);
+ err = blkcipher_walk_done(desc, &walk, 0);
+ }
diff --git a/crypto/scatterwalk.c b/crypto/scatterwalk.c
index ea5815c..5880da6 100644
--- a/crypto/scatterwalk.c
@@ -37480,6 +39008,32 @@ index ea5815c..5880da6 100644
return;
scatterwalk_start(&walk, sg);
+diff --git a/crypto/serpent_generic.c b/crypto/serpent_generic.c
+index 94970a7..f0c8d26 100644
+--- a/crypto/serpent_generic.c
++++ b/crypto/serpent_generic.c
+@@ -442,8 +442,9 @@ int serpent_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen)
+ }
+ EXPORT_SYMBOL_GPL(serpent_setkey);
+
+-void __serpent_encrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src)
++void __serpent_encrypt(void *_ctx, u8 *dst, const u8 *src)
+ {
++ struct serpent_ctx *ctx = _ctx;
+ const u32 *k = ctx->expkey;
+ const __le32 *s = (const __le32 *)src;
+ __le32 *d = (__le32 *)dst;
+@@ -507,8 +508,9 @@ static void serpent_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
+ __serpent_encrypt(ctx, dst, src);
+ }
+
+-void __serpent_decrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src)
++void __serpent_decrypt(void *_ctx, u8 *dst, const u8 *src)
+ {
++ struct serpent_ctx *ctx = _ctx;
+ const u32 *k = ctx->expkey;
+ const __le32 *s = (const __le32 *)src;
+ __le32 *d = (__le32 *)dst;
diff --git a/crypto/zlib.c b/crypto/zlib.c
index d51a30a..b6891a3 100644
--- a/crypto/zlib.c
@@ -37525,11 +39079,24 @@ index d51a30a..b6891a3 100644
: DEF_WBITS;
stream->workspace = vzalloc(zlib_inflate_workspacesize());
+diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
+index f71b756..b96847c 100644
+--- a/drivers/acpi/ac.c
++++ b/drivers/acpi/ac.c
+@@ -70,7 +70,7 @@ static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume);
+
+ #ifdef CONFIG_ACPI_PROCFS_POWER
+ extern struct proc_dir_entry *acpi_lock_ac_dir(void);
+-extern void *acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir);
++extern void acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir);
+ static int acpi_ac_open_fs(struct inode *inode, struct file *file);
+ #endif
+
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
-index 5fdac39..ce3c90e 100644
+index a76f8be..28cef93 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
-@@ -412,7 +412,7 @@ static int video_enable_only_lcd(const struct dmi_system_id *d)
+@@ -426,7 +426,7 @@ static int video_set_report_key_events(const struct dmi_system_id *id)
return 0;
}
@@ -37539,7 +39106,7 @@ index 5fdac39..ce3c90e 100644
* Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
*/
diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c
-index d62a616..387dbd0 100644
+index f76e0ea..4b83315 100644
--- a/drivers/acpi/acpica/hwxfsleep.c
+++ b/drivers/acpi/acpica/hwxfsleep.c
@@ -70,11 +70,12 @@ static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id);
@@ -37622,6 +39189,19 @@ index 3dd9c46..cf0678f 100644
period = duration;
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
+--- a/drivers/acpi/battery.c
++++ b/drivers/acpi/battery.c
+@@ -75,7 +75,7 @@ MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
+
+ #ifdef CONFIG_ACPI_PROCFS_POWER
+ extern struct proc_dir_entry *acpi_lock_battery_dir(void);
+-extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
++extern void acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
+
+ enum acpi_battery_files {
+ info_tag = 0,
diff --git a/drivers/acpi/bgrt.c b/drivers/acpi/bgrt.c
index a83e3c6..c3d617f 100644
--- a/drivers/acpi/bgrt.c
@@ -37662,7 +39242,7 @@ index 96809cd..6a49f979 100644
.callback = dmi_disable_osi_vista,
.ident = "Fujitsu Siemens",
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
-index a212cef..443c9c4 100644
+index 891c42d..ac31987 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)
@@ -37699,10 +39279,10 @@ index c68e724..e863008 100644
/* parse the table header to get the table length */
if (count <= sizeof(struct acpi_table_header))
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
-index 08a02cd..1fa9787 100644
+index cd2c3d6..2031a4a 100644
--- a/drivers/acpi/device_pm.c
+++ b/drivers/acpi/device_pm.c
-@@ -1024,6 +1024,8 @@ EXPORT_SYMBOL_GPL(acpi_subsys_freeze);
+@@ -1025,6 +1025,8 @@ EXPORT_SYMBOL_GPL(acpi_subsys_freeze);
#endif /* CONFIG_PM_SLEEP */
@@ -37711,7 +39291,7 @@ index 08a02cd..1fa9787 100644
static struct dev_pm_domain acpi_general_pm_domain = {
.ops = {
.runtime_suspend = acpi_subsys_runtime_suspend,
-@@ -1040,6 +1042,7 @@ static struct dev_pm_domain acpi_general_pm_domain = {
+@@ -1041,6 +1043,7 @@ static struct dev_pm_domain acpi_general_pm_domain = {
.restore_early = acpi_subsys_resume_early,
#endif
},
@@ -37719,7 +39299,7 @@ index 08a02cd..1fa9787 100644
};
/**
-@@ -1117,7 +1120,6 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on)
+@@ -1118,7 +1121,6 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on)
acpi_device_wakeup(adev, ACPI_STATE_S0, false);
}
@@ -37728,7 +39308,7 @@ index 08a02cd..1fa9787 100644
}
EXPORT_SYMBOL_GPL(acpi_dev_pm_attach);
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
-index b420fb4..e8d7e29 100644
+index b420fb4..b66c430 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)
@@ -37740,6 +39320,24 @@ index b420fb4..e8d7e29 100644
{
ec_skip_dsdt_scan, "Compal JFL92", {
DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),
+@@ -1610,7 +1610,7 @@ error:
+ return -ENODEV;
+ }
+
+-static int param_set_event_clearing(const char *val, struct kernel_param *kp)
++static int param_set_event_clearing(const char *val, const struct kernel_param *kp)
+ {
+ int result = 0;
+
+@@ -1628,7 +1628,7 @@ static int param_set_event_clearing(const char *val, struct kernel_param *kp)
+ return result;
+ }
+
+-static int param_get_event_clearing(char *buffer, struct kernel_param *kp)
++static int param_get_event_clearing(char *buffer, const struct kernel_param *kp)
+ {
+ switch (ec_event_clearing) {
+ case ACPI_EC_EVT_TIMING_STATUS:
diff --git a/drivers/acpi/pci_slot.c b/drivers/acpi/pci_slot.c
index 7188e53..6012bc4 100644
--- a/drivers/acpi/pci_slot.c
@@ -37780,7 +39378,7 @@ 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 e3322ad..4a03c27 100644
+index f054cad..e3c1453 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -148,7 +148,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
@@ -37793,9 +39391,36 @@ index e3322ad..4a03c27 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..774aa56 100644
+index 0243d37..dcf52db 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,
+ module_param_cb(trace_debug_layer, &param_ops_trace_attrib, &acpi_gbl_trace_dbg_layer, 0644);
+ module_param_cb(trace_debug_level, &param_ops_trace_attrib, &acpi_gbl_trace_dbg_level, 0644);
+
+-static int param_set_trace_state(const char *val, struct kernel_param *kp)
++static int param_set_trace_state(const char *val, const struct kernel_param *kp)
+ {
+ acpi_status status;
+ const char *method = trace_method_name;
+@@ -263,7 +263,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp)
+ return 0;
+ }
+
+-static int param_get_trace_state(char *buffer, struct kernel_param *kp)
++static int param_get_trace_state(char *buffer, const struct kernel_param *kp)
+ {
+ if (!(acpi_gbl_trace_flags & ACPI_TRACE_ENABLED))
+ return sprintf(buffer, "disable");
+@@ -292,7 +292,7 @@ MODULE_PARM_DESC(aml_debug_output,
+ "To enable/disable the ACPI Debug Object output.");
+
+ /* /sys/module/acpi/parameters/acpica_version */
+-static int param_get_acpica_version(char *buffer, struct kernel_param *kp)
++static int param_get_acpica_version(char *buffer, const struct kernel_param *kp)
+ {
+ int result;
+
@@ -486,11 +486,11 @@ static u32 num_counters;
static struct attribute **all_attrs;
static u32 acpi_gpe_count;
@@ -37810,6 +39435,22 @@ index 0243d37..774aa56 100644
static void delete_gpe_attr_array(void)
{
+@@ -777,13 +777,13 @@ static void __exit interrupt_stats_exit(void)
+ }
+
+ static ssize_t
+-acpi_show_profile(struct device *dev, struct device_attribute *attr,
++acpi_show_profile(struct kobject *kobj, struct kobj_attribute *attr,
+ char *buf)
+ {
+ return sprintf(buf, "%d\n", acpi_gbl_FADT.preferred_profile);
+ }
+
+-static const struct device_attribute pm_profile_attr =
++static const struct kobj_attribute pm_profile_attr =
+ __ATTR(pm_profile, S_IRUGO, acpi_show_profile, NULL);
+
+ static ssize_t hotplug_enabled_show(struct kobject *kobj,
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 82707f9..a6b19f5 100644
--- a/drivers/acpi/thermal.c
@@ -37824,7 +39465,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 80e55cb..f660caf 100644
+index 1316ddd..0f10a1d 100644
--- a/drivers/acpi/video_detect.c
+++ b/drivers/acpi/video_detect.c
@@ -41,7 +41,6 @@ ACPI_MODULE_NAME("video");
@@ -37835,7 +39476,7 @@ index 80e55cb..f660caf 100644
static struct work_struct backlight_notify_work;
static enum acpi_backlight_type acpi_backlight_cmdline = acpi_backlight_undef;
-@@ -294,6 +293,10 @@ static int acpi_video_backlight_notify(struct notifier_block *nb,
+@@ -311,6 +310,10 @@ static int acpi_video_backlight_notify(struct notifier_block *nb,
return NOTIFY_OK;
}
@@ -37846,7 +39487,7 @@ index 80e55cb..f660caf 100644
/*
* Determine which type of backlight interface to use on this system,
* First check cmdline, then dmi quirks, then do autodetect.
-@@ -324,8 +327,6 @@ enum acpi_backlight_type acpi_video_get_backlight_type(void)
+@@ -341,8 +344,6 @@ enum acpi_backlight_type acpi_video_get_backlight_type(void)
&video_caps, NULL);
INIT_WORK(&backlight_notify_work,
acpi_video_backlight_notify_work);
@@ -37855,11 +39496,24 @@ index 80e55cb..f660caf 100644
if (backlight_register_notifier(&backlight_nb) == 0)
backlight_notifier_registered = true;
init_done = true;
+diff --git a/drivers/android/binder.c b/drivers/android/binder.c
+index 7d00b7a..d5fd80d 100644
+--- a/drivers/android/binder.c
++++ b/drivers/android/binder.c
+@@ -120,7 +120,7 @@ static DECLARE_WAIT_QUEUE_HEAD(binder_user_error_wait);
+ static int binder_stop_on_user_error;
+
+ static int binder_set_stop_on_user_error(const char *val,
+- struct kernel_param *kp)
++ const struct kernel_param *kp)
+ {
+ int ret;
+
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
-index b79cb10..7daa9f7 100644
+index 55e257c..28b9a25 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
-@@ -102,7 +102,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
+@@ -103,7 +103,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);
@@ -37868,7 +39522,7 @@ index b79cb10..7daa9f7 100644
struct ata_force_param {
const char *name;
-@@ -4801,7 +4801,7 @@ void ata_qc_free(struct ata_queued_cmd *qc)
+@@ -4804,7 +4804,7 @@ void ata_qc_free(struct ata_queued_cmd *qc)
struct ata_port *ap;
unsigned int tag;
@@ -37877,7 +39531,7 @@ index b79cb10..7daa9f7 100644
ap = qc->ap;
qc->flags = 0;
-@@ -4818,7 +4818,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc)
+@@ -4821,7 +4821,7 @@ void __ata_qc_complete(struct ata_queued_cmd *qc)
struct ata_port *ap;
struct ata_link *link;
@@ -37886,7 +39540,7 @@ index b79cb10..7daa9f7 100644
WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
ap = qc->ap;
link = qc->dev->link;
-@@ -5925,6 +5925,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
+@@ -5928,6 +5928,7 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
return;
spin_lock(&lock);
@@ -37894,7 +39548,7 @@ index b79cb10..7daa9f7 100644
for (cur = ops->inherits; cur; cur = cur->inherits) {
void **inherit = (void **)cur;
-@@ -5938,8 +5939,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
+@@ -5941,8 +5942,9 @@ static void ata_finalize_port_ops(struct ata_port_operations *ops)
if (IS_ERR(*pp))
*pp = NULL;
@@ -37905,7 +39559,7 @@ index b79cb10..7daa9f7 100644
spin_unlock(&lock);
}
-@@ -6135,7 +6137,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
+@@ -6138,7 +6140,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++) {
@@ -38834,10 +40488,10 @@ index ddc4ceb..36e29aa 100644
}
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
-index 3d7fb65..0f26393 100644
+index 6ac2b2b..6373ebd 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
-@@ -843,7 +843,7 @@ static void solos_bh(unsigned long card_arg)
+@@ -849,7 +849,7 @@ static void solos_bh(unsigned long card_arg)
}
atm_charge(vcc, skb->truesize);
vcc->push(vcc, skb);
@@ -38846,7 +40500,7 @@ index 3d7fb65..0f26393 100644
break;
case PKT_STATUS:
-@@ -1124,7 +1124,7 @@ static uint32_t fpga_tx(struct solos_card *card)
+@@ -1130,7 +1130,7 @@ static uint32_t fpga_tx(struct solos_card *card)
vcc = SKB_CB(oldskb)->vcc;
if (vcc) {
@@ -38987,7 +40641,7 @@ index 8fc654f..36e28e9 100644
LIST_HEAD(todo);
int cnt;
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c
-index 68f0314..ca2a609 100644
+index 44a74cf..a5dd826 100644
--- a/drivers/base/devtmpfs.c
+++ b/drivers/base/devtmpfs.c
@@ -354,7 +354,7 @@ int devtmpfs_mount(const char *mntdir)
@@ -39028,7 +40682,7 @@ index 560751b..3a4847a 100644
static ssize_t show_node_state(struct device *dev,
struct device_attribute *attr, char *buf)
diff --git a/drivers/base/platform-msi.c b/drivers/base/platform-msi.c
-index 5df4575..986184b 100644
+index 279e539..b87ed03 100644
--- a/drivers/base/platform-msi.c
+++ b/drivers/base/platform-msi.c
@@ -24,6 +24,8 @@
@@ -39037,10 +40691,10 @@ index 5df4575..986184b 100644
+#include <asm/pgtable.h>
+
- #define DEV_ID_SHIFT 24
+ #define DEV_ID_SHIFT 21
+ #define MAX_DEV_MSIS (1 << (32 - DEV_ID_SHIFT))
- /*
-@@ -77,10 +79,12 @@ static void platform_msi_update_dom_ops(struct msi_domain_info *info)
+@@ -81,10 +83,12 @@ static void platform_msi_update_dom_ops(struct msi_domain_info *info)
BUG_ON(!ops);
@@ -39055,7 +40709,7 @@ index 5df4575..986184b 100644
}
static void platform_msi_write_msg(struct irq_data *data, struct msi_msg *msg)
-@@ -98,16 +102,18 @@ static void platform_msi_update_chip_ops(struct msi_domain_info *info)
+@@ -102,16 +106,18 @@ static void platform_msi_update_chip_ops(struct msi_domain_info *info)
struct irq_chip *chip = info->chip;
BUG_ON(!chip);
@@ -39078,12 +40732,12 @@ index 5df4575..986184b 100644
+ pax_close_kernel();
}
- static void platform_msi_free_descs(struct device *dev)
+ 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 65f50ec..acab2a1 100644
+index 301b785..82070c6 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
-@@ -1810,8 +1810,11 @@ int genpd_dev_pm_attach(struct device *dev)
+@@ -1804,8 +1804,10 @@ int genpd_dev_pm_attach(struct device *dev)
goto out;
}
@@ -39093,15 +40747,76 @@ index 65f50ec..acab2a1 100644
+ *(void **)&dev->pm_domain->detach = genpd_dev_pm_detach;
+ *(void **)&dev->pm_domain->sync = genpd_dev_pm_sync;
+ pax_close_kernel();
-+
- ret = genpd_poweron(pd);
- out:
+ mutex_lock(&pd->lock);
+ ret = genpd_poweron(pd, 0);
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
-index e1a10a0..a6bc363 100644
+index 4c70550..223bba1 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
-@@ -263,8 +263,8 @@ static int rpm_check_suspend_allowed(struct device *dev)
+@@ -16,35 +16,32 @@
+
+ typedef int (*pm_callback_t)(struct device *);
+
+-static pm_callback_t __rpm_get_callback(struct device *dev, size_t cb_offset)
+-{
+- pm_callback_t cb;
+- const struct dev_pm_ops *ops;
+-
+- if (dev->pm_domain)
+- ops = &dev->pm_domain->ops;
+- else if (dev->type && dev->type->pm)
+- ops = dev->type->pm;
+- else if (dev->class && dev->class->pm)
+- ops = dev->class->pm;
+- else if (dev->bus && dev->bus->pm)
+- ops = dev->bus->pm;
+- else
+- ops = NULL;
+-
+- if (ops)
+- cb = *(pm_callback_t *)((void *)ops + cb_offset);
+- else
+- cb = NULL;
+-
+- if (!cb && dev->driver && dev->driver->pm)
+- cb = *(pm_callback_t *)((void *)dev->driver->pm + cb_offset);
+-
+- return cb;
+-}
+-
+-#define RPM_GET_CALLBACK(dev, callback) \
+- __rpm_get_callback(dev, offsetof(struct dev_pm_ops, callback))
++#define RPM_GET_CALLBACK(dev, callback) \
++({ \
++ pm_callback_t cb; \
++ const struct dev_pm_ops *ops; \
++ \
++ if (dev->pm_domain) \
++ ops = &dev->pm_domain->ops; \
++ else if (dev->type && dev->type->pm) \
++ ops = dev->type->pm; \
++ else if (dev->class && dev->class->pm) \
++ ops = dev->class->pm; \
++ else if (dev->bus && dev->bus->pm) \
++ ops = dev->bus->pm; \
++ else \
++ ops = NULL; \
++ \
++ if (ops) \
++ cb = ops->callback; \
++ else \
++ cb = NULL; \
++ \
++ if (!cb && dev->driver && dev->driver->pm) \
++ cb = dev->driver->pm->callback; \
++ \
++ cb; \
++})
+
+ static int rpm_resume(struct device *dev, int rpmflags);
+ static int rpm_suspend(struct device *dev, int rpmflags);
+@@ -263,8 +260,8 @@ static int rpm_check_suspend_allowed(struct device *dev)
* @cb: Runtime PM callback to run.
* @dev: Device to run the callback for.
*/
@@ -39111,7 +40826,7 @@ index e1a10a0..a6bc363 100644
{
int retval;
-@@ -412,8 +412,8 @@ static int rpm_callback(int (*cb)(struct device *), struct device *dev)
+@@ -412,8 +409,8 @@ static int rpm_callback(int (*cb)(struct device *), struct device *dev)
*
* This function must be called under dev->power.lock with interrupts disabled.
*/
@@ -39121,7 +40836,7 @@ index e1a10a0..a6bc363 100644
{
int (*callback)(struct device *);
struct device *parent = NULL;
-@@ -594,8 +594,8 @@ static int rpm_suspend(struct device *dev, int rpmflags)
+@@ -594,8 +591,8 @@ static int rpm_suspend(struct device *dev, int rpmflags)
*
* This function must be called under dev->power.lock with interrupts disabled.
*/
@@ -39184,32 +40899,32 @@ index a1e0b9a..81fc106 100644
split_counters(&cnt, &inpr);
diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
-index 3f0a7e2..8195e50 100644
+index 1ee3d40..3274424 100644
--- a/drivers/base/regmap/regmap-debugfs.c
+++ b/drivers/base/regmap/regmap-debugfs.c
-@@ -401,7 +401,7 @@ static ssize_t regmap_access_read_file(struct file *file,
- char __user *user_buf, size_t count,
- loff_t *ppos)
- {
-- int reg_len, tot_len;
-+ size_t reg_len, tot_len;
- size_t buf_pos = 0;
- loff_t p = 0;
- ssize_t ret;
-@@ -434,7 +434,7 @@ static ssize_t regmap_access_read_file(struct file *file,
- /* Format the register */
- snprintf(buf + buf_pos, count - buf_pos,
- "%.*x: %c %c %c %c\n",
-- reg_len, i,
-+ (int)reg_len, i,
- regmap_readable(map, i) ? 'y' : 'n',
- regmap_writeable(map, i) ? 'y' : 'n',
- regmap_volatile(map, i) ? 'y' : 'n',
+@@ -400,7 +400,7 @@ static const struct file_operations regmap_reg_ranges_fops = {
+ static int regmap_access_show(struct seq_file *s, void *ignored)
+ {
+ struct regmap *map = s->private;
+- int i, reg_len;
++ size_t i, reg_len;
+
+ reg_len = regmap_calc_reg_len(map->max_register);
+
+@@ -410,7 +410,7 @@ static int regmap_access_show(struct seq_file *s, void *ignored)
+ continue;
+
+ /* Format the register */
+- seq_printf(s, "%.*x: %c %c %c %c\n", reg_len, i,
++ seq_printf(s, "%.*x: %c %c %c %c\n", (int)reg_len, i,
+ regmap_readable(map, i) ? 'y' : 'n',
+ regmap_writeable(map, i) ? 'y' : 'n',
+ regmap_volatile(map, i) ? 'y' : 'n',
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
-index 4ac63c0..9007855 100644
+index ee54e84..f00a29c 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
-@@ -344,8 +344,8 @@ static void regmap_unlock_mutex(void *__map)
+@@ -401,8 +401,8 @@ static void regmap_unlock_mutex(void *__map)
mutex_unlock(&map->mutex);
}
@@ -39219,7 +40934,7 @@ index 4ac63c0..9007855 100644
{
struct regmap *map = __map;
unsigned long flags;
-@@ -354,8 +354,8 @@ __acquires(&map->spinlock)
+@@ -411,8 +411,8 @@ __acquires(&map->spinlock)
map->spinlock_flags = flags;
}
@@ -39252,10 +40967,10 @@ index 8d98a32..61d3165 100644
}
EXPORT_SYMBOL_GPL(unregister_syscore_ops);
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
-index 0422c47..b222c7a 100644
+index 63c2064..34fae98 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
-@@ -3024,7 +3024,7 @@ static void start_io(ctlr_info_t *h)
+@@ -3018,7 +3018,7 @@ static void start_io(ctlr_info_t *h)
while (!list_empty(&h->reqQ)) {
c = list_entry(h->reqQ.next, CommandList_struct, list);
/* can't do anything if fifo is full */
@@ -39264,7 +40979,7 @@ index 0422c47..b222c7a 100644
dev_warn(&h->pdev->dev, "fifo full\n");
break;
}
-@@ -3034,7 +3034,7 @@ static void start_io(ctlr_info_t *h)
+@@ -3028,7 +3028,7 @@ static void start_io(ctlr_info_t *h)
h->Qdepth--;
/* Tell the controller execute command */
@@ -39273,7 +40988,7 @@ index 0422c47..b222c7a 100644
/* Put job onto the completed Q */
addQ(&h->cmpQ, c);
-@@ -3460,17 +3460,17 @@ startio:
+@@ -3454,17 +3454,17 @@ startio:
static inline unsigned long get_next_completion(ctlr_info_t *h)
{
@@ -39294,7 +41009,7 @@ index 0422c47..b222c7a 100644
(h->interrupts_enabled == 0));
}
-@@ -3503,7 +3503,7 @@ static inline u32 next_command(ctlr_info_t *h)
+@@ -3497,7 +3497,7 @@ static inline u32 next_command(ctlr_info_t *h)
u32 a;
if (unlikely(!(h->transMethod & CFGTBL_Trans_Performant)))
@@ -39303,7 +41018,7 @@ index 0422c47..b222c7a 100644
if ((*(h->reply_pool_head) & 1) == (h->reply_pool_wraparound)) {
a = *(h->reply_pool_head); /* Next cmd in ring buffer */
-@@ -4060,7 +4060,7 @@ static void cciss_put_controller_into_performant_mode(ctlr_info_t *h)
+@@ -4054,7 +4054,7 @@ static void cciss_put_controller_into_performant_mode(ctlr_info_t *h)
trans_support & CFGTBL_Trans_use_short_tags);
/* Change the access methods to the performant access methods */
@@ -39312,7 +41027,7 @@ index 0422c47..b222c7a 100644
h->transMethod = CFGTBL_Trans_Performant;
return;
-@@ -4334,7 +4334,7 @@ static int cciss_pci_init(ctlr_info_t *h)
+@@ -4328,7 +4328,7 @@ static int cciss_pci_init(ctlr_info_t *h)
if (prod_index < 0)
return -ENODEV;
h->product_name = products[prod_index].product_name;
@@ -39321,7 +41036,7 @@ index 0422c47..b222c7a 100644
if (cciss_board_disabled(h)) {
dev_warn(&h->pdev->dev, "controller appears to be disabled\n");
-@@ -5065,7 +5065,7 @@ reinit_after_soft_reset:
+@@ -5059,7 +5059,7 @@ reinit_after_soft_reset:
}
/* make sure the board interrupts are off */
@@ -39330,7 +41045,7 @@ index 0422c47..b222c7a 100644
rc = cciss_request_irq(h, do_cciss_msix_intr, do_cciss_intx);
if (rc)
goto clean2;
-@@ -5115,7 +5115,7 @@ reinit_after_soft_reset:
+@@ -5109,7 +5109,7 @@ reinit_after_soft_reset:
* fake ones to scoop up any residual completions.
*/
spin_lock_irqsave(&h->lock, flags);
@@ -39339,7 +41054,7 @@ index 0422c47..b222c7a 100644
spin_unlock_irqrestore(&h->lock, flags);
free_irq(h->intr[h->intr_mode], h);
rc = cciss_request_irq(h, cciss_msix_discard_completions,
-@@ -5135,9 +5135,9 @@ reinit_after_soft_reset:
+@@ -5129,9 +5129,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");
@@ -39351,7 +41066,7 @@ index 0422c47..b222c7a 100644
rc = controller_reset_failed(h->cfgtable);
if (rc)
-@@ -5160,7 +5160,7 @@ reinit_after_soft_reset:
+@@ -5154,7 +5154,7 @@ reinit_after_soft_reset:
cciss_scsi_setup(h);
/* Turn the interrupts on so we can service requests */
@@ -39360,7 +41075,7 @@ index 0422c47..b222c7a 100644
/* Get the firmware version */
inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
-@@ -5232,7 +5232,7 @@ static void cciss_shutdown(struct pci_dev *pdev)
+@@ -5226,7 +5226,7 @@ static void cciss_shutdown(struct pci_dev *pdev)
kfree(flush_buf);
if (return_code != IO_OK)
dev_warn(&h->pdev->dev, "Error flushing cache\n");
@@ -39559,10 +41274,10 @@ index be73e9d..7fbf140 100644
cmdlist_t *reqQ;
cmdlist_t *cmpQ;
diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c
-index 9462d27..4b9f997 100644
+index 92d6fc0..e4e1e27 100644
--- a/drivers/block/drbd/drbd_bitmap.c
+++ b/drivers/block/drbd/drbd_bitmap.c
-@@ -1027,7 +1027,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_ho
+@@ -1019,7 +1019,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_ho
submit_bio(rw, bio);
/* this should not count as user activity and cause the
* resync to throttle -- see drbd_rs_should_slow_down(). */
@@ -39572,10 +41287,10 @@ index 9462d27..4b9f997 100644
}
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
-index e66d453..edaae71 100644
+index 34bc84e..8bac095 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
-@@ -386,7 +386,7 @@ struct drbd_epoch {
+@@ -382,7 +382,7 @@ struct drbd_epoch {
struct drbd_connection *connection;
struct list_head list;
unsigned int barrier_nr;
@@ -39584,7 +41299,7 @@ index e66d453..edaae71 100644
atomic_t active; /* increased on every req. added, and dec on every finished. */
unsigned long flags;
};
-@@ -947,7 +947,7 @@ struct drbd_device {
+@@ -951,7 +951,7 @@ struct drbd_device {
unsigned int al_tr_number;
int al_tr_cycle;
wait_queue_head_t seq_wait;
@@ -39593,7 +41308,7 @@ index e66d453..edaae71 100644
unsigned int peer_seq;
spinlock_t peer_seq_lock;
unsigned long comm_bm_set; /* communicated number of set bits. */
-@@ -956,8 +956,8 @@ struct drbd_device {
+@@ -960,8 +960,8 @@ struct drbd_device {
struct mutex own_state_mutex;
struct mutex *state_mutex; /* either own_state_mutex or first_peer_device(device)->connection->cstate_mutex */
char congestion_reason; /* Why we where congested... */
@@ -39605,10 +41320,10 @@ index e66d453..edaae71 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 74d97f4..bb5a486 100644
+index 5b43dfb..d5f6e5c 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
-@@ -1328,7 +1328,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet
+@@ -1329,7 +1329,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet
p->sector = sector;
p->block_id = block_id;
p->blksize = blksize;
@@ -39617,7 +41332,7 @@ index 74d97f4..bb5a486 100644
return drbd_send_command(peer_device, sock, cmd, sizeof(*p), NULL, 0);
}
-@@ -1634,7 +1634,7 @@ int drbd_send_dblock(struct drbd_peer_device *peer_device, struct drbd_request *
+@@ -1635,7 +1635,7 @@ int drbd_send_dblock(struct drbd_peer_device *peer_device, struct drbd_request *
return -EIO;
p->sector = cpu_to_be64(req->i.sector);
p->block_id = (unsigned long)req;
@@ -39626,7 +41341,7 @@ index 74d97f4..bb5a486 100644
dp_flags = bio_flags_to_wire(peer_device->connection, req->master_bio->bi_rw);
if (device->state.conn >= C_SYNC_SOURCE &&
device->state.conn <= C_PAUSED_SYNC_T)
-@@ -1915,8 +1915,8 @@ void drbd_init_set_defaults(struct drbd_device *device)
+@@ -1907,8 +1907,8 @@ void drbd_init_set_defaults(struct drbd_device *device)
atomic_set(&device->unacked_cnt, 0);
atomic_set(&device->local_cnt, 0);
atomic_set(&device->pp_in_use_by_net, 0);
@@ -39637,7 +41352,7 @@ index 74d97f4..bb5a486 100644
atomic_set(&device->ap_in_flight, 0);
atomic_set(&device->md_io.in_use, 0);
-@@ -2683,8 +2683,8 @@ void drbd_destroy_connection(struct kref *kref)
+@@ -2675,8 +2675,8 @@ void drbd_destroy_connection(struct kref *kref)
struct drbd_connection *connection = container_of(kref, struct drbd_connection, kref);
struct drbd_resource *resource = connection->resource;
@@ -39649,17 +41364,21 @@ index 74d97f4..bb5a486 100644
idr_destroy(&connection->peer_devices);
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
-index e80cbef..42533f1 100644
+index c055c5e..5cb3c1e 100644
--- a/drivers/block/drbd/drbd_nl.c
+++ b/drivers/block/drbd/drbd_nl.c
-@@ -3637,13 +3637,13 @@ finish:
+@@ -89,8 +89,8 @@ int drbd_adm_get_initial_state(struct sk_buff *skb, struct netlink_callback *cb)
+ #include "drbd_nla.h"
+ #include <linux/genl_magic_func.h>
- void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib)
- {
-- static atomic_t drbd_genl_seq = ATOMIC_INIT(2); /* two. */
-+ static atomic_unchecked_t drbd_genl_seq = ATOMIC_INIT(2); /* two. */
- struct sk_buff *msg;
- struct drbd_genlmsghdr *d_out;
+-static atomic_t drbd_genl_seq = ATOMIC_INIT(2); /* two. */
+-static atomic_t notify_genl_seq = ATOMIC_INIT(2); /* two. */
++static atomic_unchecked_t drbd_genl_seq = ATOMIC_INIT(2); /* two. */
++static atomic_unchecked_t notify_genl_seq = ATOMIC_INIT(2); /* two. */
+
+ DEFINE_MUTEX(notification_mutex);
+
+@@ -4374,7 +4374,7 @@ void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib)
unsigned seq;
int err = -ENOMEM;
@@ -39668,11 +41387,56 @@ index e80cbef..42533f1 100644
msg = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
if (!msg)
goto failed;
+@@ -4426,7 +4426,7 @@ void notify_resource_state(struct sk_buff *skb,
+ int err;
+
+ if (!skb) {
+- seq = atomic_inc_return(&notify_genl_seq);
++ seq = atomic_inc_return_unchecked(&notify_genl_seq);
+ skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
+ err = -ENOMEM;
+ if (!skb)
+@@ -4477,7 +4477,7 @@ void notify_device_state(struct sk_buff *skb,
+ int err;
+
+ if (!skb) {
+- seq = atomic_inc_return(&notify_genl_seq);
++ seq = atomic_inc_return_unchecked(&notify_genl_seq);
+ skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
+ err = -ENOMEM;
+ if (!skb)
+@@ -4526,7 +4526,7 @@ void notify_connection_state(struct sk_buff *skb,
+ int err;
+
+ if (!skb) {
+- seq = atomic_inc_return(&notify_genl_seq);
++ seq = atomic_inc_return_unchecked(&notify_genl_seq);
+ skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
+ err = -ENOMEM;
+ if (!skb)
+@@ -4576,7 +4576,7 @@ void notify_peer_device_state(struct sk_buff *skb,
+ int err;
+
+ if (!skb) {
+- seq = atomic_inc_return(&notify_genl_seq);
++ seq = atomic_inc_return_unchecked(&notify_genl_seq);
+ skb = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
+ err = -ENOMEM;
+ if (!skb)
+@@ -4619,7 +4619,7 @@ void notify_helper(enum drbd_notification_type type,
+ {
+ struct drbd_resource *resource = device ? device->resource : connection->resource;
+ struct drbd_helper_info helper_info;
+- unsigned int seq = atomic_inc_return(&notify_genl_seq);
++ unsigned int seq = atomic_inc_return_unchecked(&notify_genl_seq);
+ struct sk_buff *skb = NULL;
+ struct drbd_genlmsghdr *dh;
+ int err;
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
-index b4b5680..4ae7b27 100644
+index 1957fe8..de39941 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
-@@ -871,7 +871,7 @@ int drbd_connected(struct drbd_peer_device *peer_device)
+@@ -895,7 +895,7 @@ int drbd_connected(struct drbd_peer_device *peer_device)
struct drbd_device *device = peer_device->device;
int err;
@@ -39681,7 +41445,7 @@ index b4b5680..4ae7b27 100644
device->peer_seq = 0;
device->state_mutex = peer_device->connection->agreed_pro_version < 100 ?
-@@ -1234,7 +1234,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio
+@@ -1266,7 +1266,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio
do {
next_epoch = NULL;
@@ -39690,7 +41454,7 @@ index b4b5680..4ae7b27 100644
switch (ev & ~EV_CLEANUP) {
case EV_PUT:
-@@ -1274,7 +1274,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio
+@@ -1306,7 +1306,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio
rv = FE_DESTROYED;
} else {
epoch->flags = 0;
@@ -39699,7 +41463,7 @@ index b4b5680..4ae7b27 100644
/* atomic_set(&epoch->active, 0); is already zero */
if (rv == FE_STILL_LIVE)
rv = FE_RECYCLED;
-@@ -1551,7 +1551,7 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf
+@@ -1577,7 +1577,7 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf
conn_wait_active_ee_empty(connection);
drbd_flush(connection);
@@ -39708,7 +41472,7 @@ index b4b5680..4ae7b27 100644
epoch = kmalloc(sizeof(struct drbd_epoch), GFP_NOIO);
if (epoch)
break;
-@@ -1565,11 +1565,11 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf
+@@ -1591,11 +1591,11 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf
}
epoch->flags = 0;
@@ -39722,7 +41486,7 @@ index b4b5680..4ae7b27 100644
list_add(&epoch->list, &connection->current_epoch->list);
connection->current_epoch = epoch;
connection->epochs++;
-@@ -1781,7 +1781,9 @@ static int e_end_resync_block(struct drbd_work *w, int unused)
+@@ -1807,7 +1807,9 @@ static int e_end_resync_block(struct drbd_work *w, int unused)
}
static int recv_resync_read(struct drbd_peer_device *peer_device, sector_t sector,
@@ -39733,7 +41497,7 @@ index b4b5680..4ae7b27 100644
{
struct drbd_device *device = peer_device->device;
struct drbd_peer_request *peer_req;
-@@ -1803,7 +1805,7 @@ static int recv_resync_read(struct drbd_peer_device *peer_device, sector_t secto
+@@ -1829,7 +1831,7 @@ static int recv_resync_read(struct drbd_peer_device *peer_device, sector_t secto
list_add_tail(&peer_req->w.list, &device->sync_ee);
spin_unlock_irq(&device->resource->req_lock);
@@ -39742,7 +41506,7 @@ index b4b5680..4ae7b27 100644
if (drbd_submit_peer_request(device, peer_req, WRITE, DRBD_FAULT_RS_WR) == 0)
return 0;
-@@ -1901,7 +1903,7 @@ static int receive_RSDataReply(struct drbd_connection *connection, struct packet
+@@ -1927,7 +1929,7 @@ static int receive_RSDataReply(struct drbd_connection *connection, struct packet
drbd_send_ack_dp(peer_device, P_NEG_ACK, p, pi->size);
}
@@ -39751,7 +41515,7 @@ index b4b5680..4ae7b27 100644
return err;
}
-@@ -2291,7 +2293,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info *
+@@ -2317,7 +2319,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info *
err = wait_for_and_update_peer_seq(peer_device, peer_seq);
drbd_send_ack_dp(peer_device, P_NEG_ACK, p, pi->size);
@@ -39760,7 +41524,7 @@ index b4b5680..4ae7b27 100644
err2 = drbd_drain_block(peer_device, pi->size);
if (!err)
err = err2;
-@@ -2335,7 +2337,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info *
+@@ -2361,7 +2363,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info *
spin_lock(&connection->epoch_lock);
peer_req->epoch = connection->current_epoch;
@@ -39769,7 +41533,7 @@ index b4b5680..4ae7b27 100644
atomic_inc(&peer_req->epoch->active);
spin_unlock(&connection->epoch_lock);
-@@ -2480,7 +2482,7 @@ bool drbd_rs_c_min_rate_throttle(struct drbd_device *device)
+@@ -2506,7 +2508,7 @@ bool drbd_rs_c_min_rate_throttle(struct drbd_device *device)
curr_events = (int)part_stat_read(&disk->part0, sectors[0]) +
(int)part_stat_read(&disk->part0, sectors[1]) -
@@ -39778,7 +41542,7 @@ index b4b5680..4ae7b27 100644
if (atomic_read(&device->ap_actlog_cnt)
|| curr_events - device->rs_last_events > 64) {
-@@ -2619,7 +2621,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet
+@@ -2645,7 +2647,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet
device->use_csums = true;
} else if (pi->cmd == P_OV_REPLY) {
/* track progress, we may need to throttle */
@@ -39787,7 +41551,7 @@ index b4b5680..4ae7b27 100644
peer_req->w.cb = w_e_end_ov_reply;
dec_rs_pending(device);
/* drbd_rs_begin_io done when we sent this request,
-@@ -2692,7 +2694,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet
+@@ -2718,7 +2720,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet
goto out_free_e;
submit_for_resync:
@@ -39796,7 +41560,7 @@ index b4b5680..4ae7b27 100644
submit:
update_receiver_timing_details(connection, drbd_submit_peer_request);
-@@ -4565,7 +4567,7 @@ struct data_cmd {
+@@ -4591,7 +4593,7 @@ struct data_cmd {
int expect_payload;
size_t pkt_size;
int (*fn)(struct drbd_connection *, struct packet_info *);
@@ -39805,7 +41569,7 @@ index b4b5680..4ae7b27 100644
static struct data_cmd drbd_cmd_handler[] = {
[P_DATA] = { 1, sizeof(struct p_data), receive_Data },
-@@ -4679,7 +4681,7 @@ static void conn_disconnect(struct drbd_connection *connection)
+@@ -4709,7 +4711,7 @@ static void conn_disconnect(struct drbd_connection *connection)
if (!list_empty(&connection->current_epoch->list))
drbd_err(connection, "ASSERTION FAILED: connection->current_epoch->list not empty\n");
/* ok, no more ee's on the fly, it is safe to reset the epoch_size */
@@ -39814,7 +41578,7 @@ index b4b5680..4ae7b27 100644
connection->send.seen_any_write_yet = false;
drbd_info(connection, "Connection closed\n");
-@@ -5183,7 +5185,7 @@ static int got_IsInSync(struct drbd_connection *connection, struct packet_info *
+@@ -5213,7 +5215,7 @@ static int got_IsInSync(struct drbd_connection *connection, struct packet_info *
put_ldev(device);
}
dec_rs_pending(device);
@@ -39823,20 +41587,113 @@ index b4b5680..4ae7b27 100644
return 0;
}
-@@ -5471,7 +5473,7 @@ static int connection_finish_peer_reqs(struct drbd_connection *connection)
- struct asender_cmd {
+@@ -5464,7 +5466,7 @@ static int got_skip(struct drbd_connection *connection, struct packet_info *pi)
+ struct meta_sock_cmd {
size_t pkt_size;
int (*fn)(struct drbd_connection *connection, struct packet_info *);
-};
+} __do_const;
- static struct asender_cmd asender_tbl[] = {
- [P_PING] = { 0, got_Ping },
+ static void set_rcvtimeo(struct drbd_connection *connection, bool ping_timeout)
+ {
+diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c
+index 5a7ef78..bbd058b 100644
+--- a/drivers/block/drbd/drbd_state.c
++++ b/drivers/block/drbd/drbd_state.c
+@@ -1497,9 +1497,10 @@ int drbd_bitmap_io_from_worker(struct drbd_device *device,
+
+ void notify_resource_state_change(struct sk_buff *skb,
+ unsigned int seq,
+- struct drbd_resource_state_change *resource_state_change,
++ void *_resource_state_change,
+ enum drbd_notification_type type)
+ {
++ struct drbd_resource_state_change *resource_state_change = _resource_state_change;
+ struct drbd_resource *resource = resource_state_change->resource;
+ struct resource_info resource_info = {
+ .res_role = resource_state_change->role[NEW],
+@@ -1513,9 +1514,10 @@ void notify_resource_state_change(struct sk_buff *skb,
+
+ void notify_connection_state_change(struct sk_buff *skb,
+ unsigned int seq,
+- struct drbd_connection_state_change *connection_state_change,
++ void *_connection_state_change,
+ enum drbd_notification_type type)
+ {
++ struct drbd_connection_state_change *connection_state_change = _connection_state_change;
+ struct drbd_connection *connection = connection_state_change->connection;
+ struct connection_info connection_info = {
+ .conn_connection_state = connection_state_change->cstate[NEW],
+@@ -1527,9 +1529,10 @@ void notify_connection_state_change(struct sk_buff *skb,
+
+ void notify_device_state_change(struct sk_buff *skb,
+ unsigned int seq,
+- struct drbd_device_state_change *device_state_change,
++ void *_device_state_change,
+ enum drbd_notification_type type)
+ {
++ struct drbd_device_state_change *device_state_change = _device_state_change;
+ struct drbd_device *device = device_state_change->device;
+ struct device_info device_info = {
+ .dev_disk_state = device_state_change->disk_state[NEW],
+@@ -1540,9 +1543,10 @@ void notify_device_state_change(struct sk_buff *skb,
+
+ void notify_peer_device_state_change(struct sk_buff *skb,
+ unsigned int seq,
+- struct drbd_peer_device_state_change *p,
++ void *_p,
+ enum drbd_notification_type type)
+ {
++ struct drbd_peer_device_state_change *p = _p;
+ struct drbd_peer_device *peer_device = p->peer_device;
+ struct peer_device_info peer_device_info = {
+ .peer_repl_state = p->repl_state[NEW],
+diff --git a/drivers/block/drbd/drbd_state.h b/drivers/block/drbd/drbd_state.h
+index bd98953..488e501 100644
+--- a/drivers/block/drbd/drbd_state.h
++++ b/drivers/block/drbd/drbd_state.h
+@@ -126,7 +126,7 @@ extern enum drbd_state_rv _drbd_set_state(struct drbd_device *, union drbd_state
+ enum chg_state_flags,
+ struct completion *done);
+ extern void print_st_err(struct drbd_device *, union drbd_state,
+- union drbd_state, int);
++ union drbd_state, enum drbd_state_rv);
+
+ enum drbd_state_rv
+ _conn_request_state(struct drbd_connection *connection, union drbd_state mask, union drbd_state val,
+diff --git a/drivers/block/drbd/drbd_state_change.h b/drivers/block/drbd/drbd_state_change.h
+index 9e503a1..ac60262 100644
+--- a/drivers/block/drbd/drbd_state_change.h
++++ b/drivers/block/drbd/drbd_state_change.h
+@@ -45,19 +45,19 @@ extern void forget_state_change(struct drbd_state_change *);
+
+ extern void notify_resource_state_change(struct sk_buff *,
+ unsigned int,
+- struct drbd_resource_state_change *,
++ void *,
+ enum drbd_notification_type type);
+ extern void notify_connection_state_change(struct sk_buff *,
+ unsigned int,
+- struct drbd_connection_state_change *,
++ void *,
+ enum drbd_notification_type type);
+ extern void notify_device_state_change(struct sk_buff *,
+ unsigned int,
+- struct drbd_device_state_change *,
++ void *,
+ enum drbd_notification_type type);
+ extern void notify_peer_device_state_change(struct sk_buff *,
+ unsigned int,
+- struct drbd_peer_device_state_change *,
++ void *,
+ enum drbd_notification_type type);
+
+ #endif /* DRBD_STATE_CHANGE_H */
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
-index 5578c14..a05f791 100644
+index eff716c..4c52ef7 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
-@@ -94,7 +94,8 @@ void drbd_md_endio(struct bio *bio)
+@@ -87,7 +87,8 @@ void drbd_md_endio(struct bio *bio)
/* reads on behalf of the partner,
* "submitted" by the receiver
*/
@@ -39846,7 +41703,7 @@ index 5578c14..a05f791 100644
{
unsigned long flags = 0;
struct drbd_peer_device *peer_device = peer_req->peer_device;
-@@ -115,7 +116,8 @@ static void drbd_endio_read_sec_final(struct drbd_peer_request *peer_req) __rele
+@@ -108,7 +109,8 @@ static void drbd_endio_read_sec_final(struct drbd_peer_request *peer_req) __rele
/* writes on behalf of the partner, or resync writes,
* "submitted" by the receiver, final stage. */
@@ -39856,7 +41713,7 @@ index 5578c14..a05f791 100644
{
unsigned long flags = 0;
struct drbd_peer_device *peer_device = peer_req->peer_device;
-@@ -386,7 +388,7 @@ static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector,
+@@ -391,7 +393,7 @@ static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector,
list_add_tail(&peer_req->w.list, &device->read_ee);
spin_unlock_irq(&device->resource->req_lock);
@@ -39865,7 +41722,7 @@ index 5578c14..a05f791 100644
if (drbd_submit_peer_request(device, peer_req, READ, DRBD_FAULT_RS_RD) == 0)
return 0;
-@@ -531,7 +533,7 @@ static int drbd_rs_number_requests(struct drbd_device *device)
+@@ -536,7 +538,7 @@ static int drbd_rs_number_requests(struct drbd_device *device)
unsigned int sect_in; /* Number of sectors that came in since the last turn */
int number, mxb;
@@ -39874,7 +41731,7 @@ index 5578c14..a05f791 100644
device->rs_in_flight -= sect_in;
rcu_read_lock();
-@@ -1573,8 +1575,8 @@ void drbd_rs_controller_reset(struct drbd_device *device)
+@@ -1583,8 +1585,8 @@ void drbd_rs_controller_reset(struct drbd_device *device)
struct gendisk *disk = device->ldev->backing_bdev->bd_contains->bd_disk;
struct fifo_buffer *plan;
@@ -39885,6 +41742,38 @@ index 5578c14..a05f791 100644
device->rs_in_flight = 0;
device->rs_last_events =
(int)part_stat_read(&disk->part0, sectors[0]) +
+diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
+index 84708a5..95c0e55 100644
+--- a/drivers/block/floppy.c
++++ b/drivers/block/floppy.c
+@@ -961,6 +961,10 @@ static void empty(void)
+ {
+ }
+
++static void empty2(int i)
++{
++}
++
+ static void (*floppy_work_fn)(void);
+
+ static void floppy_work_workfn(struct work_struct *work)
+@@ -1953,14 +1957,14 @@ static const struct cont_t wakeup_cont = {
+ .interrupt = empty,
+ .redo = do_wakeup,
+ .error = empty,
+- .done = (done_f)empty
++ .done = empty2
+ };
+
+ static const struct cont_t intr_cont = {
+ .interrupt = empty,
+ .redo = process_fd_request,
+ .error = empty,
+- .done = (done_f)empty
++ .done = empty2
+ };
+
+ static int wait_til_done(void (*handler)(void), bool interruptible)
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index d06c62e..cd04d96 100644
--- a/drivers/block/pktcdvd.c
@@ -39908,7 +41797,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 fbdddd6..060ff07 100644
+index 9745cf9..8dbe1b5 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -64,7 +64,7 @@
@@ -39991,7 +41880,7 @@ index e5565fb..71be10b4 100644
+ .command_completed = smart1_completed,
};
diff --git a/drivers/bluetooth/btwilink.c b/drivers/bluetooth/btwilink.c
-index 57eb935..eafd6b8 100644
+index 24a652f..2dffae6 100644
--- a/drivers/bluetooth/btwilink.c
+++ b/drivers/bluetooth/btwilink.c
@@ -275,7 +275,7 @@ static int ti_st_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
@@ -40034,7 +41923,7 @@ index 577cc4b..bfe0c2d 100644
return 0;
}
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
-index c206ccd..375691c 100644
+index 1b257ea..ea76b22 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -610,7 +610,6 @@ int register_cdrom(struct cdrom_device_info *cdi)
@@ -40076,7 +41965,7 @@ index c206ccd..375691c 100644
if (cgc.buffer)
break;
-@@ -3435,7 +3436,7 @@ static int cdrom_print_info(const char *header, int val, char *info,
+@@ -3431,7 +3432,7 @@ static int cdrom_print_info(const char *header, int val, char *info,
struct cdrom_device_info *cdi;
int ret;
@@ -40182,7 +42071,7 @@ index 4f94375..413694e 100644
return -EINVAL;
else
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
-index 240b6cf..e0ba20c 100644
+index be54e53..50272fe 100644
--- a/drivers/char/hpet.c
+++ b/drivers/char/hpet.c
@@ -574,7 +574,7 @@ static inline unsigned long hpet_time_div(struct hpets *hpets,
@@ -40195,7 +42084,7 @@ index 240b6cf..e0ba20c 100644
{
struct hpet_timer __iomem *timer;
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
-index e3536da..b1617f0 100644
+index 94fb407..603dd43 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -436,7 +436,7 @@ struct ipmi_smi {
@@ -40217,9 +42106,9 @@ index e3536da..b1617f0 100644
- ((unsigned int) atomic_read(&(intf)->stats[IPMI_STAT_ ## stat]))
+ ((unsigned int) atomic_read_unchecked(&(intf)->stats[IPMI_STAT_ ## stat]))
- static char *addr_src_to_str[] = { "invalid", "hotmod", "hardcoded", "SPMI",
- "ACPI", "SMBIOS", "PCI",
-@@ -2834,7 +2834,7 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
+ static const char * const addr_src_to_str[] = {
+ "invalid", "hotmod", "hardcoded", "SPMI", "ACPI", "SMBIOS", "PCI",
+@@ -2835,7 +2835,7 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
INIT_LIST_HEAD(&intf->cmd_rcvrs);
init_waitqueue_head(&intf->waitq);
for (i = 0; i < IPMI_NUM_STATS; i++)
@@ -40228,11 +42117,24 @@ index e3536da..b1617f0 100644
intf->proc_dir = NULL;
+diff --git a/drivers/char/ipmi/ipmi_poweroff.c b/drivers/char/ipmi/ipmi_poweroff.c
+index 9f2e3be..676c910 100644
+--- a/drivers/char/ipmi/ipmi_poweroff.c
++++ b/drivers/char/ipmi/ipmi_poweroff.c
+@@ -66,7 +66,7 @@ static void (*specific_poweroff_func)(ipmi_user_t user);
+ /* Holds the old poweroff function so we can restore it on removal. */
+ static void (*old_poweroff_func)(void);
+
+-static int set_param_ifnum(const char *val, struct kernel_param *kp)
++static int set_param_ifnum(const char *val, const struct kernel_param *kp)
+ {
+ 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 4cc72fa..4c6f80d 100644
+index 7fddd86..f5b038e 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
-@@ -300,7 +300,7 @@ struct smi_info {
+@@ -302,7 +302,7 @@ struct smi_info {
unsigned char slave_addr;
/* Counters and things for the proc filesystem. */
@@ -40241,7 +42143,7 @@ index 4cc72fa..4c6f80d 100644
struct task_struct *thread;
-@@ -309,9 +309,9 @@ struct smi_info {
+@@ -311,9 +311,9 @@ struct smi_info {
};
#define smi_inc_stat(smi, stat) \
@@ -40253,7 +42155,25 @@ index 4cc72fa..4c6f80d 100644
#define SI_MAX_PARMS 4
-@@ -3620,7 +3620,7 @@ static int try_smi_init(struct smi_info *new_smi)
+@@ -1345,7 +1345,7 @@ static unsigned int num_slave_addrs;
+ #define IPMI_MEM_ADDR_SPACE 1
+ static const char * const addr_space_to_str[] = { "i/o", "mem" };
+
+-static int hotmod_handler(const char *val, struct kernel_param *kp);
++static int hotmod_handler(const char *val, const struct kernel_param *kp);
+
+ 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)
+ return info;
+ }
+
+-static int hotmod_handler(const char *val, struct kernel_param *kp)
++static int hotmod_handler(const char *val, const struct kernel_param *kp)
+ {
+ char *str = kstrdup(val, GFP_KERNEL);
+ int rv;
+@@ -3623,7 +3623,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++)
@@ -40263,7 +42183,7 @@ index 4cc72fa..4c6f80d 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 90e6246..58acb77 100644
+index 5f1c3d0..8fca936 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -284,17 +284,17 @@ struct ssif_info {
@@ -40307,7 +42227,7 @@ index 90e6246..58acb77 100644
if (ssif_info->supports_pec)
ssif_info->client->flags |= I2C_CLIENT_PEC;
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index 6b1721f..fda9398 100644
+index 4f6f94c..1e20d2f5 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -18,6 +18,7 @@
@@ -40456,10 +42376,10 @@ index 6b1721f..fda9398 100644
return tty_init();
diff --git a/drivers/char/nvram.c b/drivers/char/nvram.c
-index 97c2d8d..aa03a89 100644
+index 0129232..422edaa 100644
--- a/drivers/char/nvram.c
+++ b/drivers/char/nvram.c
-@@ -247,7 +247,7 @@ static ssize_t nvram_read(struct file *file, char __user *buf,
+@@ -235,7 +235,7 @@ static ssize_t nvram_read(struct file *file, char __user *buf,
spin_unlock_irq(&rtc_lock);
@@ -40541,7 +42461,7 @@ index 45df4bf..22d88d4 100644
if (cmd != SIOCWANDEV)
diff --git a/drivers/char/random.c b/drivers/char/random.c
-index d0da5d8..739fd3a 100644
+index b583e53..f3bb4ac 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -289,9 +289,6 @@
@@ -40843,10 +42763,10 @@ index b5bcd77..0f7bd99 100644
return 0;
}
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
-index cec1ee2..d8e33a0 100644
+index 51eef87..d944fa7 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
-@@ -687,8 +687,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
+@@ -682,8 +682,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
data->acpi_perf_cpu = cpu;
policy->driver_data = data;
@@ -40860,7 +42780,7 @@ index cec1ee2..d8e33a0 100644
result = acpi_processor_register_performance(perf, cpu);
if (result)
-@@ -821,7 +824,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
+@@ -816,7 +819,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:
@@ -40871,24 +42791,24 @@ index cec1ee2..d8e33a0 100644
break;
default:
break;
-@@ -916,8 +921,10 @@ static void __init acpi_cpufreq_boost_init(void)
+@@ -910,8 +915,10 @@ static void __init acpi_cpufreq_boost_init(void)
if (!msrs)
return;
-- acpi_cpufreq_driver.boost_supported = true;
+- acpi_cpufreq_driver.set_boost = set_boost;
- acpi_cpufreq_driver.boost_enabled = boost_state(0);
+ pax_open_kernel();
-+ *(bool *)&acpi_cpufreq_driver.boost_supported = true;
++ *(void **)&acpi_cpufreq_driver.set_boost = set_boost;
+ *(bool *)&acpi_cpufreq_driver.boost_enabled = boost_state(0);
+ pax_close_kernel();
cpu_notifier_register_begin();
diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
-index 90d6408..0df4580 100644
+index 0ca74d0..15705fb 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
-@@ -456,7 +456,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev)
+@@ -461,7 +461,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev)
if (!IS_ERR(cpu_reg))
regulator_put(cpu_reg);
@@ -40900,9 +42820,24 @@ index 90d6408..0df4580 100644
ret = cpufreq_register_driver(&dt_cpufreq_driver);
if (ret)
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
-index 8412ce5..3a40e15 100644
+index e979ec7..a024e16 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
+@@ -474,12 +474,12 @@ EXPORT_SYMBOL_GPL(cpufreq_freq_transition_end);
+ * SYSFS INTERFACE *
+ *********************************************************************/
+ static ssize_t show_boost(struct kobject *kobj,
+- struct attribute *attr, char *buf)
++ struct kobj_attribute *attr, char *buf)
+ {
+ return sprintf(buf, "%d\n", cpufreq_driver->boost_enabled);
+ }
+
+-static ssize_t store_boost(struct kobject *kobj, struct attribute *attr,
++static ssize_t store_boost(struct kobject *kobj, struct kobj_attribute *attr,
+ const char *buf, size_t count)
+ {
+ int ret, enable;
@@ -2048,7 +2048,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor)
read_unlock_irqrestore(&cpufreq_driver_lock, flags);
@@ -40941,32 +42876,18 @@ index 8412ce5..3a40e15 100644
write_unlock_irqrestore(&cpufreq_driver_lock, flags);
pr_err("%s: Cannot %s BOOST\n",
-@@ -2350,8 +2354,11 @@ static int create_boost_sysfs_file(void)
- * Check if driver provides function to enable boost -
- * if not, use cpufreq_boost_set_sw as default
- */
-- if (!cpufreq_driver->set_boost)
-- cpufreq_driver->set_boost = cpufreq_boost_set_sw;
-+ if (!cpufreq_driver->set_boost) {
-+ pax_open_kernel();
-+ *(void **)&cpufreq_driver->set_boost = cpufreq_boost_set_sw;
-+ pax_close_kernel();
-+ }
-
- ret = sysfs_create_file(cpufreq_global_kobject, &boost.attr);
- if (ret)
-@@ -2375,7 +2382,9 @@ int cpufreq_enable_boost_support(void)
+@@ -2361,7 +2365,9 @@ int cpufreq_enable_boost_support(void)
if (cpufreq_boost_supported())
return 0;
-- cpufreq_driver->boost_supported = true;
+- cpufreq_driver->set_boost = cpufreq_boost_set_sw;
+ pax_open_kernel();
-+ *(bool *)&cpufreq_driver->boost_supported = true;
++ *(void **)&cpufreq_driver->set_boost = cpufreq_boost_set_sw;
+ pax_close_kernel();
/* This will get removed on driver unregister */
return create_boost_sysfs_file();
-@@ -2432,8 +2441,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
+@@ -2418,8 +2424,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
cpufreq_driver = driver_data;
write_unlock_irqrestore(&cpufreq_driver_lock, flags);
@@ -40978,13 +42899,13 @@ index 8412ce5..3a40e15 100644
+ pax_close_kernel();
+ }
- ret = create_boost_sysfs_file();
- if (ret)
+ if (cpufreq_boost_supported()) {
+ ret = create_boost_sysfs_file();
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
-index d994b0f..b0b9d15 100644
+index e0d1110..575e673 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
-@@ -465,7 +465,7 @@ static int cpufreq_governor_start(struct cpufreq_policy *policy,
+@@ -497,7 +497,7 @@ static int cpufreq_governor_start(struct cpufreq_policy *policy,
cs_dbs_info->down_skip = 0;
cs_dbs_info->requested_freq = policy->cur;
} else {
@@ -40994,10 +42915,28 @@ index d994b0f..b0b9d15 100644
od_dbs_info->rate_mult = 1;
diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h
-index 5621bb0..a854d3c 100644
+index 91e767a0..3b40724 100644
--- a/drivers/cpufreq/cpufreq_governor.h
+++ b/drivers/cpufreq/cpufreq_governor.h
-@@ -217,7 +217,7 @@ struct common_dbs_data {
+@@ -75,7 +75,7 @@ __ATTR(_name, 0644, show_##_name##_gov_pol, store_##_name##_gov_pol)
+ /* Create show/store routines */
+ #define show_one(_gov, file_name) \
+ static ssize_t show_##file_name##_gov_sys \
+-(struct kobject *kobj, struct attribute *attr, char *buf) \
++(struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
+ { \
+ struct _gov##_dbs_tuners *tuners = _gov##_dbs_cdata.gdbs_data->tuners; \
+ return sprintf(buf, "%u\n", tuners->file_name); \
+@@ -91,7 +91,7 @@ static ssize_t show_##file_name##_gov_pol \
+
+ #define store_one(_gov, file_name) \
+ static ssize_t store_##file_name##_gov_sys \
+-(struct kobject *kobj, struct attribute *attr, const char *buf, size_t count) \
++(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) \
+ { \
+ struct dbs_data *dbs_data = _gov##_dbs_cdata.gdbs_data; \
+ return store_##file_name(dbs_data, buf, count); \
+@@ -219,7 +219,7 @@ struct common_dbs_data {
void (*exit)(struct dbs_data *dbs_data, bool notify);
/* Governor specific ops, see below */
@@ -41006,7 +42945,7 @@ index 5621bb0..a854d3c 100644
/*
* Protects governor's data (struct dbs_data and struct common_dbs_data)
-@@ -239,7 +239,7 @@ struct od_ops {
+@@ -241,7 +241,7 @@ struct od_ops {
unsigned int (*powersave_bias_target)(struct cpufreq_policy *policy,
unsigned int freq_next, unsigned int relation);
void (*freq_increase)(struct cpufreq_policy *policy, unsigned int freq);
@@ -41015,11 +42954,20 @@ index 5621bb0..a854d3c 100644
static inline int delay_for_sampling_rate(unsigned int sampling_rate)
{
+@@ -256,7 +256,7 @@ static inline int delay_for_sampling_rate(unsigned int sampling_rate)
+
+ #define declare_show_sampling_rate_min(_gov) \
+ static ssize_t show_sampling_rate_min_gov_sys \
+-(struct kobject *kobj, struct attribute *attr, char *buf) \
++(struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
+ { \
+ struct dbs_data *dbs_data = _gov##_dbs_cdata.gdbs_data; \
+ return sprintf(buf, "%u\n", dbs_data->min_sampling_rate); \
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
-index 03ac6ce..2d7a94b 100644
+index eae5107..26e7a39 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
-@@ -509,7 +509,7 @@ static void od_exit(struct dbs_data *dbs_data, bool notify)
+@@ -534,7 +534,7 @@ static void od_exit(struct dbs_data *dbs_data, bool notify)
define_get_cpu_dbs_routines(od_cpu_dbs_info);
@@ -41028,7 +42976,7 @@ index 03ac6ce..2d7a94b 100644
.powersave_bias_init_cpu = ondemand_powersave_bias_init_cpu,
.powersave_bias_target = generic_powersave_bias_target,
.freq_increase = dbs_freq_increase,
-@@ -568,14 +568,18 @@ void od_register_powersave_bias_handler(unsigned int (*f)
+@@ -593,14 +593,18 @@ void od_register_powersave_bias_handler(unsigned int (*f)
(struct cpufreq_policy *, unsigned int, unsigned int),
unsigned int powersave_bias)
{
@@ -41050,15 +42998,11 @@ index 03ac6ce..2d7a94b 100644
}
EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler);
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
-index 98fb882..9f1d2a4 100644
+index cd83d47..3ad4309 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
-@@ -138,10 +138,10 @@ struct pstate_funcs {
- struct cpu_defaults {
- struct pstate_adjust_policy pid_policy;
- struct pstate_funcs funcs;
--};
-+} __do_const;
+@@ -147,7 +147,7 @@ static inline int32_t get_target_pstate_use_performance(struct cpudata *cpu);
+ static inline int32_t get_target_pstate_use_cpu_load(struct cpudata *cpu);
static struct pstate_adjust_policy pid_params;
-static struct pstate_funcs pstate_funcs;
@@ -41066,7 +43010,68 @@ index 98fb882..9f1d2a4 100644
static int hwp_active;
struct perf_limits {
-@@ -840,19 +840,19 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate, bool force)
+@@ -374,13 +374,13 @@ static void __init intel_pstate_debug_expose_params(void)
+ /************************** sysfs begin ************************/
+ #define show_one(file_name, object) \
+ static ssize_t show_##file_name \
+- (struct kobject *kobj, struct attribute *attr, char *buf) \
++ (struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
+ { \
+ return sprintf(buf, "%u\n", limits->object); \
+ }
+
+ static ssize_t show_turbo_pct(struct kobject *kobj,
+- struct attribute *attr, char *buf)
++ struct kobj_attribute *attr, char *buf)
+ {
+ struct cpudata *cpu;
+ int total, no_turbo, turbo_pct;
+@@ -396,7 +396,7 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
+ }
+
+ static ssize_t show_num_pstates(struct kobject *kobj,
+- struct attribute *attr, char *buf)
++ struct kobj_attribute *attr, char *buf)
+ {
+ struct cpudata *cpu;
+ int total;
+@@ -407,7 +407,7 @@ static ssize_t show_num_pstates(struct kobject *kobj,
+ }
+
+ static ssize_t show_no_turbo(struct kobject *kobj,
+- struct attribute *attr, char *buf)
++ struct kobj_attribute *attr, char *buf)
+ {
+ ssize_t ret;
+
+@@ -420,7 +420,7 @@ static ssize_t show_no_turbo(struct kobject *kobj,
+ return ret;
+ }
+
+-static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
++static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
+ const char *buf, size_t count)
+ {
+ unsigned int input;
+@@ -444,7 +444,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
+ return count;
+ }
+
+-static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
++static ssize_t store_max_perf_pct(struct kobject *a, struct kobj_attribute *b,
+ const char *buf, size_t count)
+ {
+ unsigned int input;
+@@ -469,7 +469,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
+ return count;
+ }
+
+-static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b,
++static ssize_t store_min_perf_pct(struct kobject *a, struct kobj_attribute *b,
+ const char *buf, size_t count)
+ {
+ unsigned int input;
+@@ -850,19 +850,19 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate, bool force)
cpu->pstate.current_pstate = pstate;
@@ -41094,7 +43099,16 @@ index 98fb882..9f1d2a4 100644
intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false);
}
-@@ -1210,15 +1210,15 @@ static unsigned int force_load;
+@@ -1016,7 +1016,7 @@ static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu)
+
+ from = cpu->pstate.current_pstate;
+
+- target_pstate = pstate_funcs.get_target_pstate(cpu);
++ target_pstate = pstate_funcs->get_target_pstate(cpu);
+
+ intel_pstate_set_pstate(cpu, target_pstate, true);
+
+@@ -1249,15 +1249,15 @@ static unsigned int force_load;
static int intel_pstate_msrs_not_valid(void)
{
@@ -41114,7 +43128,7 @@ index 98fb882..9f1d2a4 100644
{
pid_params.sample_rate_ms = policy->sample_rate_ms;
pid_params.p_gain_pct = policy->p_gain_pct;
-@@ -1230,13 +1230,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
+@@ -1269,15 +1269,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy)
static void copy_cpu_funcs(struct pstate_funcs *funcs)
{
@@ -41125,6 +43139,8 @@ index 98fb882..9f1d2a4 100644
- pstate_funcs.get_scaling = funcs->get_scaling;
- pstate_funcs.set = funcs->set;
- pstate_funcs.get_vid = funcs->get_vid;
+- pstate_funcs.get_target_pstate = funcs->get_target_pstate;
+-
+ pstate_funcs = funcs;
}
@@ -41328,6 +43344,38 @@ index fb9f511..213e6cc 100644
if (!cpuidle_curr_governor ||
cpuidle_curr_governor->rating < gov->rating)
cpuidle_switch_governor(gov);
+diff --git a/drivers/cpuidle/governors/ladder.c b/drivers/cpuidle/governors/ladder.c
+index 63bd5a4..eea2dff 100644
+--- a/drivers/cpuidle/governors/ladder.c
++++ b/drivers/cpuidle/governors/ladder.c
+@@ -173,6 +173,15 @@ static void ladder_reflect(struct cpuidle_device *dev, int index)
+
+ static struct cpuidle_governor ladder_governor = {
+ .name = "ladder",
++ .rating = 25,
++ .enable = ladder_enable_device,
++ .select = ladder_select_state,
++ .reflect = ladder_reflect,
++ .owner = THIS_MODULE,
++};
++
++static struct cpuidle_governor ladder_governor_nohz = {
++ .name = "ladder",
+ .rating = 10,
+ .enable = ladder_enable_device,
+ .select = ladder_select_state,
+@@ -190,10 +199,8 @@ static int __init init_ladder(void)
+ * governor is better so give it a higher rating than the menu
+ * governor.
+ */
+- if (!tick_nohz_enabled)
+- ladder_governor.rating = 25;
+
+- return cpuidle_register_governor(&ladder_governor);
++ return cpuidle_register_governor(tick_nohz_enabled ? &ladder_governor_nohz : &ladder_governor);
+ }
+
+ postcore_initcall(init_ladder);
diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
index 832a2c3..1794080 100644
--- a/drivers/cpuidle/sysfs.c
@@ -41370,10 +43418,10 @@ index 8ef06fa..ab9945f 100644
state.msg_bits = rctx->msg_bits;
state.first = rctx->first;
diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c
-index ca5c71a..df88d0c 100644
+index eee2c7e..268aa3e 100644
--- a/drivers/crypto/hifn_795x.c
+++ b/drivers/crypto/hifn_795x.c
-@@ -49,7 +49,7 @@ module_param_string(hifn_pll_ref, hifn_pll_ref, sizeof(hifn_pll_ref), 0444);
+@@ -37,7 +37,7 @@ module_param_string(hifn_pll_ref, hifn_pll_ref, sizeof(hifn_pll_ref), 0444);
MODULE_PARM_DESC(hifn_pll_ref,
"PLL reference clock (pci[freq] or ext[freq], default ext)");
@@ -41382,12 +43430,12 @@ index ca5c71a..df88d0c 100644
#define ACRYPTO_OP_DECRYPT 0
#define ACRYPTO_OP_ENCRYPT 1
-@@ -2575,7 +2575,7 @@ static int hifn_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+@@ -2483,7 +2483,7 @@ static int hifn_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto err_out_disable_pci_device;
snprintf(name, sizeof(name), "hifn%d",
-- atomic_inc_return(&hifn_dev_number)-1);
-+ atomic_inc_return_unchecked(&hifn_dev_number)-1);
+- atomic_inc_return(&hifn_dev_number) - 1);
++ atomic_inc_return_unchecked(&hifn_dev_number) - 1);
err = pci_request_regions(pdev, name);
if (err)
@@ -41413,7 +43461,7 @@ index bd985e7..74071e4 100644
u64 len;
int src_nents;
diff --git a/drivers/crypto/marvell/hash.c b/drivers/crypto/marvell/hash.c
-index 6ec55b4..27b314e 100644
+index 683cca9..7ca2e0f 100644
--- a/drivers/crypto/marvell/hash.c
+++ b/drivers/crypto/marvell/hash.c
@@ -45,69 +45,25 @@ mv_cesa_ahash_req_iter_next_op(struct mv_cesa_ahash_dma_iter *iter)
@@ -41546,7 +43594,7 @@ index 6ec55b4..27b314e 100644
return mv_cesa_dma_add_data_transfer(chain,
CESA_SA_DATA_SRAM_OFFSET,
ahashdreq->cache_dma,
-@@ -844,10 +798,6 @@ static int mv_cesa_ahash_import(struct ahash_request *req, const void *hash,
+@@ -848,10 +802,6 @@ static int mv_cesa_ahash_import(struct ahash_request *req, const void *hash,
if (!cache_ptr)
return 0;
@@ -41557,7 +43605,7 @@ index 6ec55b4..27b314e 100644
memcpy(creq->cache, cache, cache_ptr);
creq->cache_ptr = cache_ptr;
-@@ -856,9 +806,14 @@ static int mv_cesa_ahash_import(struct ahash_request *req, const void *hash,
+@@ -860,9 +810,14 @@ static int mv_cesa_ahash_import(struct ahash_request *req, const void *hash,
static int mv_cesa_md5_init(struct ahash_request *req)
{
@@ -41572,7 +43620,7 @@ index 6ec55b4..27b314e 100644
mv_cesa_ahash_init(req, &tmpl, true);
-@@ -919,9 +874,15 @@ struct ahash_alg mv_md5_alg = {
+@@ -923,9 +878,15 @@ struct ahash_alg mv_md5_alg = {
static int mv_cesa_sha1_init(struct ahash_request *req)
{
@@ -41588,7 +43636,7 @@ index 6ec55b4..27b314e 100644
mv_cesa_ahash_init(req, &tmpl, false);
-@@ -982,9 +943,18 @@ struct ahash_alg mv_sha1_alg = {
+@@ -986,9 +947,18 @@ struct ahash_alg mv_sha1_alg = {
static int mv_cesa_sha256_init(struct ahash_request *req)
{
@@ -41607,11 +43655,71 @@ index 6ec55b4..27b314e 100644
mv_cesa_ahash_init(req, &tmpl, false);
+diff --git a/drivers/crypto/qat/qat_common/adf_aer.c b/drivers/crypto/qat/qat_common/adf_aer.c
+index e78a1d7..f6ef8aa 100644
+--- a/drivers/crypto/qat/qat_common/adf_aer.c
++++ b/drivers/crypto/qat/qat_common/adf_aer.c
+@@ -56,7 +56,7 @@
+ static struct workqueue_struct *device_reset_wq;
+
+ static pci_ers_result_t adf_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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 1117a8b..6f9dd73 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)
+ kfree(pf2vf_resp);
+ }
+
+-static void adf_vf2pf_bh_handler(void *data)
++static void adf_vf2pf_bh_handler(unsigned long data)
+ {
+ struct adf_accel_vf_info *vf_info = (struct adf_accel_vf_info *)data;
+ struct adf_pf2vf_resp *pf2vf_resp;
+@@ -131,7 +131,7 @@ static int adf_enable_sriov(struct adf_accel_dev *accel_dev)
+ vf_info->vf_nr = i;
+
+ tasklet_init(&vf_info->vf2pf_bh_tasklet,
+- (void *)adf_vf2pf_bh_handler,
++ adf_vf2pf_bh_handler,
+ (unsigned long)vf_info);
+ 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
+--- 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);
+ }
+
+-static void adf_pf2vf_bh_handler(void *data)
++static void adf_pf2vf_bh_handler(unsigned long data)
+ {
+- struct adf_accel_dev *accel_dev = data;
++ struct adf_accel_dev *accel_dev = (struct adf_accel_dev *)data;
+ 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:
+ static int adf_setup_pf2vf_bh(struct adf_accel_dev *accel_dev)
+ {
+ tasklet_init(&accel_dev->vf.pf2vf_bh_tasklet,
+- (void *)adf_pf2vf_bh_handler, (unsigned long)accel_dev);
++ adf_pf2vf_bh_handler, (unsigned long)accel_dev);
+
+ mutex_init(&accel_dev->vf.vf2pf_lock);
+ return 0;
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
-index ca848cc..9049c89 100644
+index 984c5e9..c873659 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
-@@ -671,7 +671,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
+@@ -717,7 +717,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
goto err_out;
}
@@ -41620,7 +43728,7 @@ index ca848cc..9049c89 100644
list_for_each_entry(devfreq, &devfreq_list, node) {
int ret = 0;
-@@ -759,7 +759,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor)
+@@ -805,7 +805,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor)
}
}
@@ -41658,10 +43766,10 @@ index 11707df..2ea96f7 100644
/* Run before NMI debug handler and KGDB */
diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c
-index 5358737..2064670 100644
+index a979003..773b7f0 100644
--- a/drivers/edac/edac_device.c
+++ b/drivers/edac/edac_device.c
-@@ -474,9 +474,9 @@ void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev,
+@@ -468,9 +468,9 @@ void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev,
*/
int edac_device_alloc_index(void)
{
@@ -41673,10 +43781,32 @@ index 5358737..2064670 100644
}
EXPORT_SYMBOL_GPL(edac_device_alloc_index);
+diff --git a/drivers/edac/edac_device_sysfs.c b/drivers/edac/edac_device_sysfs.c
+index 93da1a4..5e2c149 100644
+--- a/drivers/edac/edac_device_sysfs.c
++++ b/drivers/edac/edac_device_sysfs.c
+@@ -749,7 +749,7 @@ static int edac_device_add_main_sysfs_attributes(
+ */
+ while (sysfs_attrib->attr.name != NULL) {
+ err = sysfs_create_file(&edac_dev->kobj,
+- (struct attribute*) sysfs_attrib);
++ &sysfs_attrib->attr);
+ if (err)
+ goto err_out;
+
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
-index 58aed67..e6817a1 100644
+index 26e65ab..9a1e25d 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)
+ return edac_mc_poll_msec;
+ }
+
+-static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
++static int edac_set_poll_msec(const char *val, const struct kernel_param *kp)
+ {
+ unsigned long l;
+ int ret;
@@ -154,7 +154,7 @@ static const char * const edac_caps[] = {
struct dev_ch_attribute {
struct device_attribute attr;
@@ -41686,8 +43816,21 @@ index 58aed67..e6817a1 100644
#define DEVICE_CHANNEL(_name, _mode, _show, _store, _var) \
static struct dev_ch_attribute dev_attr_legacy_##_name = \
+diff --git a/drivers/edac/edac_module.c b/drivers/edac/edac_module.c
+index 5f8543b..46aa017 100644
+--- a/drivers/edac/edac_module.c
++++ b/drivers/edac/edac_module.c
+@@ -19,7 +19,7 @@
+
+ #ifdef CONFIG_EDAC_DEBUG
+
+-static int edac_set_debug_level(const char *buf, struct kernel_param *kp)
++static int edac_set_debug_level(const char *buf, const struct kernel_param *kp)
+ {
+ unsigned long val;
+ int ret;
diff --git a/drivers/edac/edac_pci.c b/drivers/edac/edac_pci.c
-index b4b3860..08d7faa 100644
+index 9968538..fa53f93 100644
--- a/drivers/edac/edac_pci.c
+++ b/drivers/edac/edac_pci.c
@@ -29,7 +29,7 @@
@@ -41699,7 +43842,7 @@ index b4b3860..08d7faa 100644
/*
* edac_pci_alloc_ctl_info
-@@ -314,7 +314,7 @@ EXPORT_SYMBOL_GPL(edac_pci_reset_delay_period);
+@@ -255,7 +255,7 @@ static void edac_pci_workq_teardown(struct edac_pci_ctl_info *pci)
*/
int edac_pci_alloc_index(void)
{
@@ -41709,7 +43852,7 @@ index b4b3860..08d7faa 100644
EXPORT_SYMBOL_GPL(edac_pci_alloc_index);
diff --git a/drivers/edac/edac_pci_sysfs.c b/drivers/edac/edac_pci_sysfs.c
-index 24d877f..4e30133 100644
+index 6e3428b..9bdb207 100644
--- a/drivers/edac/edac_pci_sysfs.c
+++ b/drivers/edac/edac_pci_sysfs.c
@@ -23,8 +23,8 @@ static int edac_pci_log_pe = 1; /* log PCI parity errors */
@@ -41732,7 +43875,7 @@ index 24d877f..4e30133 100644
/* Set of show/store abstract level functions for PCI Parity object */
static ssize_t edac_pci_dev_show(struct kobject *kobj, struct attribute *attr,
-@@ -576,7 +576,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
+@@ -564,7 +564,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
edac_printk(KERN_CRIT, EDAC_PCI,
"Signaled System Error on %s\n",
pci_name(dev));
@@ -41741,7 +43884,7 @@ index 24d877f..4e30133 100644
}
if (status & (PCI_STATUS_PARITY)) {
-@@ -584,7 +584,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
+@@ -572,7 +572,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
"Master Data Parity Error on %s\n",
pci_name(dev));
@@ -41750,7 +43893,7 @@ index 24d877f..4e30133 100644
}
if (status & (PCI_STATUS_DETECTED_PARITY)) {
-@@ -592,7 +592,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
+@@ -580,7 +580,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
"Detected Parity Error on %s\n",
pci_name(dev));
@@ -41759,7 +43902,7 @@ index 24d877f..4e30133 100644
}
}
-@@ -615,7 +615,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
+@@ -603,7 +603,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
edac_printk(KERN_CRIT, EDAC_PCI, "Bridge "
"Signaled System Error on %s\n",
pci_name(dev));
@@ -41768,7 +43911,7 @@ index 24d877f..4e30133 100644
}
if (status & (PCI_STATUS_PARITY)) {
-@@ -623,7 +623,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
+@@ -611,7 +611,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
"Master Data Parity Error on "
"%s\n", pci_name(dev));
@@ -41777,7 +43920,7 @@ index 24d877f..4e30133 100644
}
if (status & (PCI_STATUS_DETECTED_PARITY)) {
-@@ -631,7 +631,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
+@@ -619,7 +619,7 @@ static void edac_pci_dev_parity_test(struct pci_dev *dev)
"Detected Parity Error on %s\n",
pci_name(dev));
@@ -41786,7 +43929,7 @@ index 24d877f..4e30133 100644
}
}
}
-@@ -669,7 +669,7 @@ void edac_pci_do_parity_check(void)
+@@ -657,7 +657,7 @@ void edac_pci_do_parity_check(void)
if (!check_pci_errors)
return;
@@ -41795,7 +43938,7 @@ index 24d877f..4e30133 100644
/* scan all PCI devices looking for a Parity Error on devices and
* bridges.
-@@ -681,7 +681,7 @@ void edac_pci_do_parity_check(void)
+@@ -669,7 +669,7 @@ void edac_pci_do_parity_check(void)
/* Only if operator has selected panic on PCI Error */
if (edac_pci_get_panic_on_pe()) {
/* If the count is different 'after' from 'before' */
@@ -41842,6 +43985,28 @@ index 57ea7f4..af06b76 100644
card->driver->update_phy_reg(card, 4,
PHY_LINK_ACTIVE | PHY_CONTENDER, 0);
+diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c
+index 36a7c2d..3cea1bf 100644
+--- a/drivers/firewire/core-cdev.c
++++ b/drivers/firewire/core-cdev.c
+@@ -970,7 +970,7 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg)
+ {
+ struct fw_cdev_create_iso_context *a = &arg->create_iso_context;
+ struct fw_iso_context *context;
+- fw_iso_callback_t cb;
++ void *cb;
+ int ret;
+
+ BUILD_BUG_ON(FW_CDEV_ISO_CONTEXT_TRANSMIT != FW_ISO_CONTEXT_TRANSMIT ||
+@@ -995,7 +995,7 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg)
+ break;
+
+ case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:
+- cb = (fw_iso_callback_t)iso_mc_callback;
++ cb = iso_mc_callback;
+ break;
+
+ default:
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c
index f9e3aee..269dbdb 100644
--- a/drivers/firewire/core-device.c
@@ -41855,6 +44020,19 @@ index f9e3aee..269dbdb 100644
static ssize_t show_immediate(struct device *dev,
struct device_attribute *dattr, char *buf)
+diff --git a/drivers/firewire/core-iso.c b/drivers/firewire/core-iso.c
+index 38c0aa6..95466e4 100644
+--- a/drivers/firewire/core-iso.c
++++ b/drivers/firewire/core-iso.c
+@@ -162,7 +162,7 @@ size_t fw_iso_buffer_lookup(struct fw_iso_buffer *buffer, dma_addr_t completed)
+
+ struct fw_iso_context *fw_iso_context_create(struct fw_card *card,
+ int type, int channel, int speed, size_t header_size,
+- fw_iso_callback_t callback, void *callback_data)
++ void *callback, void *callback_data)
+ {
+ struct fw_iso_context *ctx;
+
diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-transaction.c
index d6a09b9..18e90dd 100644
--- a/drivers/firewire/core-transaction.c
@@ -41908,7 +44086,7 @@ index c2f5117..e36414d 100644
/*
* FIXME: Make sure this bitmask is cleared when we clear the busReset
diff --git a/drivers/firmware/dmi-id.c b/drivers/firmware/dmi-id.c
-index 94a58a0..f5eba42 100644
+index 94a58a0..5b8dd03 100644
--- a/drivers/firmware/dmi-id.c
+++ b/drivers/firmware/dmi-id.c
@@ -16,7 +16,7 @@
@@ -41920,11 +44098,27 @@ index 94a58a0..f5eba42 100644
#define to_dmi_dev_attr(_dev_attr) \
container_of(_dev_attr, struct dmi_device_attribute, dev_attr)
+@@ -159,9 +159,14 @@ static int dmi_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
+ return 0;
+ }
+
++static void dmi_dev_release(struct device *dev)
++{
++ kfree(dev);
++}
++
+ static struct class dmi_class = {
+ .name = "dmi",
+- .dev_release = (void(*)(struct device *)) kfree,
++ .dev_release = dmi_dev_release,
+ .dev_uevent = dmi_dev_uevent,
+ };
+
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
-index 0e08e66..7824b4a 100644
+index 88bebe1..c7b636f 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
-@@ -690,14 +690,18 @@ static int __init dmi_init(void)
+@@ -712,14 +712,18 @@ static int __init dmi_init(void)
if (!dmi_table)
goto err_tables;
@@ -41969,10 +44163,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 027ca21..65689be 100644
+index 2cd37da..8bcbe8b 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
-@@ -174,14 +174,16 @@ static struct attribute_group efi_subsys_attr_group = {
+@@ -176,14 +176,16 @@ static struct attribute_group efi_subsys_attr_group = {
};
static struct efivars generic_efivars;
@@ -42072,10 +44266,10 @@ index 5de3ed2..d839c56 100644
.sysfs_ops = &memmap_attr_ops,
.default_attrs = def_attrs,
diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c
-index d24f35d..5875c5d 100644
+index f25cd79..7b7ad07 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
-@@ -54,7 +54,7 @@ bool psci_tos_resident_on(int cpu)
+@@ -55,7 +55,7 @@ bool psci_tos_resident_on(int cpu)
return cpu == resident_cpu;
}
@@ -42085,10 +44279,10 @@ index d24f35d..5875c5d 100644
typedef unsigned long (psci_fn)(unsigned long, unsigned long,
unsigned long, unsigned long);
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
-index 5e71538..00b7406 100644
+index cd007a6..6fd1a2e 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
-@@ -441,9 +441,9 @@ static struct irq_chip *davinci_gpio_get_irq_chip(unsigned int irq)
+@@ -439,9 +439,9 @@ static struct irq_chip *davinci_gpio_get_irq_chip(unsigned int irq)
return &gpio_unbanked.chip;
};
@@ -42100,7 +44294,7 @@ index 5e71538..00b7406 100644
gpio_unbanked = *irq_get_chip(irq);
return &gpio_unbanked;
-@@ -473,7 +473,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
+@@ -471,7 +471,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev)
struct davinci_gpio_regs __iomem *g;
struct irq_domain *irq_domain = NULL;
const struct of_device_id *match;
@@ -42110,7 +44304,7 @@ index 5e71538..00b7406 100644
/*
diff --git a/drivers/gpio/gpio-em.c b/drivers/gpio/gpio-em.c
-index 6bca1e1..ed8b22e 100644
+index 8d32ccc..2d2ca61 100644
--- a/drivers/gpio/gpio-em.c
+++ b/drivers/gpio/gpio-em.c
@@ -274,7 +274,7 @@ static int em_gio_probe(struct platform_device *pdev)
@@ -42123,7 +44317,7 @@ index 6bca1e1..ed8b22e 100644
unsigned int ngpios;
int ret;
diff --git a/drivers/gpio/gpio-ich.c b/drivers/gpio/gpio-ich.c
-index 4ba7ed5..1536b5d 100644
+index a489338..3c0a85b 100644
--- a/drivers/gpio/gpio-ich.c
+++ b/drivers/gpio/gpio-ich.c
@@ -94,7 +94,7 @@ struct ichx_desc {
@@ -42136,7 +44330,7 @@ index 4ba7ed5..1536b5d 100644
static struct {
spinlock_t lock;
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
-index f7fbb46..cee8e40 100644
+index 189f672..c52c254 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -1069,7 +1069,7 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)
@@ -42158,10 +44352,10 @@ index f7fbb46..cee8e40 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 2a81224..ec01fb3 100644
+index d9ab0cd..406ce88 100644
--- a/drivers/gpio/gpio-rcar.c
+++ b/drivers/gpio/gpio-rcar.c
-@@ -398,7 +398,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
+@@ -421,7 +421,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
struct gpio_rcar_priv *p;
struct resource *io, *irq;
struct gpio_chip *gpio_chip;
@@ -42169,9 +44363,9 @@ index 2a81224..ec01fb3 100644
+ irq_chip_no_const *irq_chip;
struct device *dev = &pdev->dev;
const char *name = dev_name(dev);
- int ret;
+ unsigned int npins;
diff --git a/drivers/gpio/gpio-vr41xx.c b/drivers/gpio/gpio-vr41xx.c
-index c1caa45..f0f97d2 100644
+index ac8deb0..f3caa10 100644
--- a/drivers/gpio/gpio-vr41xx.c
+++ b/drivers/gpio/gpio-vr41xx.c
@@ -224,7 +224,7 @@ static int giu_get_irq(unsigned int irq)
@@ -42184,10 +44378,10 @@ index c1caa45..f0f97d2 100644
return -EINVAL;
}
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
-index 4e4c308..d041d75 100644
+index 5c1ba87..ab4a059 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
-@@ -638,8 +638,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
+@@ -669,8 +669,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
}
if (gpiochip->irqchip) {
@@ -42200,7 +44394,7 @@ index 4e4c308..d041d75 100644
gpiochip->irqchip = NULL;
}
}
-@@ -715,8 +717,10 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
+@@ -747,8 +749,10 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
*/
if (!irqchip->irq_request_resources &&
!irqchip->irq_release_resources) {
@@ -42214,10 +44408,19 @@ index 4e4c308..d041d75 100644
/*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index bb1099c..8eff7b2 100644
+index 5e7770f..a84a2c6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -2338,7 +2338,7 @@ static inline void amdgpu_unregister_atpx_handler(void) {}
+@@ -1733,7 +1733,7 @@ void amdgpu_debugfs_cleanup(struct drm_minor *minor);
+ * amdgpu smumgr functions
+ */
+ struct amdgpu_smumgr_funcs {
+- int (*check_fw_load_finish)(struct amdgpu_device *adev, uint32_t fwtype);
++ int (*check_fw_load_finish)(struct amdgpu_device *adev, enum AMDGPU_UCODE_ID fwtype);
+ int (*request_smu_load_fw)(struct amdgpu_device *adev);
+ int (*request_smu_specific_fw)(struct amdgpu_device *adev, uint32_t fwtype);
+ };
+@@ -2345,7 +2345,7 @@ static inline void amdgpu_unregister_atpx_handler(void) {}
* KMS
*/
extern const struct drm_ioctl_desc amdgpu_ioctls_kms[];
@@ -42226,11 +44429,24 @@ index bb1099c..8eff7b2 100644
int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags);
int amdgpu_driver_unload_kms(struct drm_device *dev);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
+index 81dc6b6..2762d6b 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
+@@ -493,7 +493,7 @@ static int amdgpu_atpx_init(void)
+ * look up whether we are the integrated or discrete GPU (all asics).
+ * Returns the client id.
+ */
+-static int amdgpu_atpx_get_client_id(struct pci_dev *pdev)
++static enum vga_switcheroo_client_id amdgpu_atpx_get_client_id(struct pci_dev *pdev)
+ {
+ 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 8e99514..3d68786 100644
+index 75cb5b9..2f6481f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
-@@ -737,44 +737,44 @@ static int amdgpu_cgs_get_firmware_info(void *cgs_device,
+@@ -1066,48 +1066,48 @@ int amdgpu_cgs_call_acpi_method(void *cgs_device,
}
static const struct cgs_ops amdgpu_cgs_ops = {
@@ -42253,6 +44469,7 @@ index 8e99514..3d68786 100644
- amdgpu_cgs_write_pci_config_byte,
- amdgpu_cgs_write_pci_config_word,
- amdgpu_cgs_write_pci_config_dword,
+- amdgpu_cgs_get_pci_resource,
- amdgpu_cgs_atom_get_data_table,
- amdgpu_cgs_atom_get_cmd_table_revs,
- amdgpu_cgs_atom_exec_cmd_table,
@@ -42265,7 +44482,10 @@ index 8e99514..3d68786 100644
- amdgpu_cgs_set_camera_voltages,
- amdgpu_cgs_get_firmware_info,
- amdgpu_cgs_set_powergating_state,
-- amdgpu_cgs_set_clockgating_state
+- amdgpu_cgs_set_clockgating_state,
+- amdgpu_cgs_get_active_displays_info,
+- amdgpu_cgs_call_acpi_method,
+- amdgpu_cgs_query_system_info,
+ .gpu_mem_info = amdgpu_cgs_gpu_mem_info,
+ .gmap_kmem = amdgpu_cgs_gmap_kmem,
+ .gunmap_kmem = amdgpu_cgs_gunmap_kmem,
@@ -42285,6 +44505,7 @@ index 8e99514..3d68786 100644
+ .write_pci_config_byte = amdgpu_cgs_write_pci_config_byte,
+ .write_pci_config_word = amdgpu_cgs_write_pci_config_word,
+ .write_pci_config_dword = amdgpu_cgs_write_pci_config_dword,
++ .get_pci_resource = amdgpu_cgs_get_pci_resource,
+ .atom_get_data_table = amdgpu_cgs_atom_get_data_table,
+ .atom_get_cmd_table_revs = amdgpu_cgs_atom_get_cmd_table_revs,
+ .atom_exec_cmd_table = amdgpu_cgs_atom_exec_cmd_table,
@@ -42297,7 +44518,10 @@ index 8e99514..3d68786 100644
+ .set_camera_voltages = amdgpu_cgs_set_camera_voltages,
+ .get_firmware_info = amdgpu_cgs_get_firmware_info,
+ .set_powergating_state = amdgpu_cgs_set_powergating_state,
-+ .set_clockgating_state = amdgpu_cgs_set_clockgating_state
++ .set_clockgating_state = amdgpu_cgs_set_clockgating_state,
++ .get_active_displays_info = amdgpu_cgs_get_active_displays_info,
++ .call_acpi_method = amdgpu_cgs_call_acpi_method,
++ .query_system_info = amdgpu_cgs_query_system_info
};
static const struct cgs_os_ops amdgpu_cgs_os_ops = {
@@ -42310,11 +44534,51 @@ index 8e99514..3d68786 100644
};
void *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 119cdc2..fd6698c 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)
+ return ret;
+ }
+
+-static int amdgpu_connector_lvds_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status amdgpu_connector_lvds_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_encoder *encoder = amdgpu_connector_best_single_encoder(connector);
+@@ -838,7 +838,7 @@ static int amdgpu_connector_vga_get_modes(struct drm_connector *connector)
+ return ret;
+ }
+
+-static int amdgpu_connector_vga_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status amdgpu_connector_vga_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_device *dev = connector->dev;
+@@ -1158,7 +1158,7 @@ static void amdgpu_connector_dvi_force(struct drm_connector *connector)
+ amdgpu_connector->use_digital = true;
+ }
+
+-static int amdgpu_connector_dvi_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status amdgpu_connector_dvi_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_device *dev = connector->dev;
+@@ -1427,7 +1427,7 @@ out:
+ return ret;
+ }
+
+-static int amdgpu_connector_dp_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status amdgpu_connector_dp_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ 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 9d88023..5fe8189 100644
+index d6c68d0..ea00f37 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-@@ -1081,7 +1081,7 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
+@@ -1091,7 +1091,7 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
* locking inversion with the driver load path. And the access here is
* completely racy anyway. So don't bother with locking for now.
*/
@@ -42324,10 +44588,10 @@ index 9d88023..5fe8189 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 8d6668c..ea61792 100644
+index 9ef1db8..bfd5d78 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
-@@ -481,7 +481,7 @@ static struct drm_driver kms_driver = {
+@@ -495,7 +495,7 @@ static struct drm_driver kms_driver = {
.driver_features =
DRIVER_USE_AGP |
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
@@ -42336,7 +44600,7 @@ index 8d6668c..ea61792 100644
.dev_priv_size = 0,
.load = amdgpu_driver_load_kms,
.open = amdgpu_driver_open_kms,
-@@ -532,9 +532,6 @@ static struct drm_driver kms_driver = {
+@@ -546,9 +546,6 @@ static struct drm_driver kms_driver = {
.patchlevel = KMS_DRIVER_PATCHLEVEL,
};
@@ -42346,7 +44610,7 @@ index 8d6668c..ea61792 100644
static struct pci_driver amdgpu_kms_pci_driver = {
.name = DRIVER_NAME,
.id_table = pciidlist,
-@@ -552,22 +549,23 @@ static int __init amdgpu_init(void)
+@@ -566,22 +563,23 @@ static int __init amdgpu_init(void)
}
#endif
DRM_INFO("amdgpu kernel modesetting enabled.\n");
@@ -42386,8 +44650,74 @@ index e23843f..9ecc6f3 100644
};
-int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms);
+const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms);
+diff --git a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c
+index e35340a..9f6d286 100644
+--- a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c
++++ b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c
+@@ -513,7 +513,7 @@ static int fiji_smu_request_load_fw(struct amdgpu_device *adev)
+ return 0;
+ }
+
+-static uint32_t fiji_smu_get_mask_for_fw_type(uint32_t fw_type)
++static uint32_t fiji_smu_get_mask_for_fw_type(enum AMDGPU_UCODE_ID fw_type)
+ {
+ switch (fw_type) {
+ case AMDGPU_UCODE_ID_SDMA0:
+@@ -539,7 +539,7 @@ static uint32_t fiji_smu_get_mask_for_fw_type(uint32_t fw_type)
+ }
+
+ static int fiji_smu_check_fw_load_finish(struct amdgpu_device *adev,
+- uint32_t fw_type)
++ enum AMDGPU_UCODE_ID fw_type)
+ {
+ uint32_t fw_mask = fiji_smu_get_mask_for_fw_type(fw_type);
+ int i;
+diff --git a/drivers/gpu/drm/amd/amdgpu/iceland_smc.c b/drivers/gpu/drm/amd/amdgpu/iceland_smc.c
+index 090486c..699728e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/iceland_smc.c
++++ b/drivers/gpu/drm/amd/amdgpu/iceland_smc.c
+@@ -418,7 +418,7 @@ static enum AMDGPU_UCODE_ID iceland_convert_fw_type(uint32_t fw_type)
+ }
+ }
+
+-static uint32_t iceland_smu_get_mask_for_fw_type(uint32_t fw_type)
++static uint32_t iceland_smu_get_mask_for_fw_type(enum AMDGPU_UCODE_ID fw_type)
+ {
+ switch (fw_type) {
+ case AMDGPU_UCODE_ID_SDMA0:
+@@ -556,7 +556,7 @@ static int iceland_smu_request_load_fw(struct amdgpu_device *adev)
+ }
+
+ static int iceland_smu_check_fw_load_finish(struct amdgpu_device *adev,
+- uint32_t fw_type)
++ enum AMDGPU_UCODE_ID fw_type)
+ {
+ uint32_t fw_mask = iceland_smu_get_mask_for_fw_type(fw_type);
+ int i;
+diff --git a/drivers/gpu/drm/amd/amdgpu/tonga_smc.c b/drivers/gpu/drm/amd/amdgpu/tonga_smc.c
+index 361c49a..1113506 100644
+--- a/drivers/gpu/drm/amd/amdgpu/tonga_smc.c
++++ b/drivers/gpu/drm/amd/amdgpu/tonga_smc.c
+@@ -515,7 +515,7 @@ static int tonga_smu_request_load_fw(struct amdgpu_device *adev)
+ return 0;
+ }
+
+-static uint32_t tonga_smu_get_mask_for_fw_type(uint32_t fw_type)
++static uint32_t tonga_smu_get_mask_for_fw_type(enum AMDGPU_UCODE_ID fw_type)
+ {
+ switch (fw_type) {
+ case AMDGPU_UCODE_ID_SDMA0:
+@@ -541,7 +541,7 @@ static uint32_t tonga_smu_get_mask_for_fw_type(uint32_t fw_type)
+ }
+
+ static int tonga_smu_check_fw_load_finish(struct amdgpu_device *adev,
+- uint32_t fw_type)
++ enum AMDGPU_UCODE_ID fw_type)
+ {
+ 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 c6a1b4c..32873f8 100644
+index d2b49c0..478e036 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,
@@ -42844,10 +45174,10 @@ index 7b69070..d7bd78b 100644
if (retval != 0)
return retval;
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-index 3a4820e..ece12c8 100644
+index 8b2becd..2d8f572 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-@@ -135,7 +135,7 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
+@@ -139,7 +139,7 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
if (r)
return r;
@@ -42855,9 +45185,9 @@ index 3a4820e..ece12c8 100644
+ atomic_set_unchecked(&entity->fence_seq, 0);
entity->fence_context = fence_context_alloc(1);
- /* Add the entity to the run queue */
+ return 0;
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-index a0f0ae5..1771582 100644
+index 9403145..b8842f1 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 {
@@ -42883,10 +45213,10 @@ index 87c78ee..59dc36e 100644
s_entity->fence_context, seq);
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
-index 77ab93d..ae69bac 100644
+index 3bd7e1c..565fe46 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
-@@ -217,6 +217,7 @@ static struct drm_driver armada_drm_driver = {
+@@ -218,6 +218,7 @@ static struct drm_driver armada_drm_driver = {
.driver_features = DRIVER_GEM | DRIVER_MODESET |
DRIVER_HAVE_IRQ | DRIVER_PRIME,
.ioctls = armada_ioctls,
@@ -42894,7 +45224,7 @@ index 77ab93d..ae69bac 100644
.fops = &armada_drm_fops,
};
-@@ -337,8 +338,6 @@ static int __init armada_drm_init(void)
+@@ -338,8 +339,6 @@ static int __init armada_drm_init(void)
{
int ret;
@@ -42903,11 +45233,62 @@ index 77ab93d..ae69bac 100644
ret = platform_driver_register(&armada_lcd_platform_driver);
if (ret)
return ret;
+diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
+index 0123458..4169580 100644
+--- a/drivers/gpu/drm/ast/ast_mode.c
++++ b/drivers/gpu/drm/ast/ast_mode.c
+@@ -789,7 +789,7 @@ static int ast_get_modes(struct drm_connector *connector)
+ return 0;
+ }
+
+-static int ast_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status ast_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct ast_private *ast = connector->dev->dev_private;
+diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
+index 2849f1b..86f509b 100644
+--- a/drivers/gpu/drm/bochs/bochs_kms.c
++++ b/drivers/gpu/drm/bochs/bochs_kms.c
+@@ -210,7 +210,7 @@ int bochs_connector_get_modes(struct drm_connector *connector)
+ return count;
+ }
+
+-static int bochs_connector_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status bochs_connector_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct bochs_device *bochs =
+diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
+index 9a7b446..33576d3 100644
+--- a/drivers/gpu/drm/drm_atomic.c
++++ b/drivers/gpu/drm/drm_atomic.c
+@@ -1339,6 +1339,11 @@ EXPORT_SYMBOL(drm_atomic_async_commit);
+ * The big monstor ioctl
+ */
+
++static void free_vblank_event(struct drm_pending_event *event)
++{
++ kfree(event);
++}
++
+ static struct drm_pending_vblank_event *create_vblank_event(
+ struct drm_device *dev, struct drm_file *file_priv, uint64_t user_data)
+ {
+@@ -1366,7 +1371,7 @@ static struct drm_pending_vblank_event *create_vblank_event(
+ e->event.user_data = user_data;
+ e->base.event = &e->event.base;
+ e->base.file_priv = file_priv;
+- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
++ e->base.destroy = free_vblank_event;
+
+ out:
+ return e;
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
-index 24c5434..d4671de 100644
+index f619121..ef03460 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
-@@ -4090,7 +4090,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -4152,7 +4152,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
goto done;
}
@@ -42916,11 +45297,33 @@ index 24c5434..d4671de 100644
&prop_enum->name, DRM_PROP_NAME_LEN)) {
ret = -EFAULT;
goto done;
+@@ -5229,6 +5229,11 @@ out:
+ return ret;
+ }
+
++static void drm_mode_page_flip_dmabuf_destroy(struct drm_pending_event *event)
++{
++ kfree(event);
++}
++
+ /**
+ * drm_mode_page_flip_ioctl - schedule an asynchronous fb update
+ * @dev: DRM device
+@@ -5327,8 +5332,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
+ e->event.user_data = page_flip->user_data;
+ e->base.event = &e->event.base;
+ e->base.file_priv = file_priv;
+- e->base.destroy =
+- (void (*) (struct drm_pending_event *)) kfree;
++ e->base.destroy = drm_mode_page_flip_dmabuf_destroy;
+ }
+
+ crtc->primary->old_fb = crtc->primary->fb;
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
-index 7dd6728..6271b191 100644
+index 167c8d3..bf13708 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
-@@ -471,7 +471,7 @@ void drm_unplug_dev(struct drm_device *dev)
+@@ -467,7 +467,7 @@ void drm_unplug_dev(struct drm_device *dev)
drm_device_set_unplugged(dev);
@@ -42930,7 +45333,7 @@ index 7dd6728..6271b191 100644
}
mutex_unlock(&drm_global_mutex);
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
-index 6b5625e..d49b9fb 100644
+index 1ea8790..03efb49 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -89,7 +89,7 @@ int drm_open(struct inode *inode, struct file *filp)
@@ -42951,7 +45354,7 @@ index 6b5625e..d49b9fb 100644
drm_minor_release(minor);
return retcode;
}
-@@ -405,7 +405,7 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -407,7 +407,7 @@ int drm_release(struct inode *inode, struct file *filp)
mutex_lock(&drm_global_mutex);
@@ -42960,7 +45363,7 @@ index 6b5625e..d49b9fb 100644
mutex_lock(&dev->struct_mutex);
list_del(&file_priv->lhead);
-@@ -420,10 +420,10 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -422,10 +422,10 @@ int drm_release(struct inode *inode, struct file *filp)
* Begin inline drm_release
*/
@@ -42973,7 +45376,7 @@ index 6b5625e..d49b9fb 100644
/* if the master has gone away we can't do anything with the lock */
if (file_priv->minor->master)
-@@ -493,7 +493,7 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -495,7 +495,7 @@ int drm_release(struct inode *inode, struct file *filp)
* End inline drm_release
*/
@@ -43139,8 +45542,33 @@ index 8ce2a0c..d09a8f6 100644
unsigned int nr = DRM_IOCTL_NR(cmd);
int retcode = -EINVAL;
char stack_kdata[128];
+diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
+index 1fe1457..a3e7822 100644
+--- a/drivers/gpu/drm/drm_irq.c
++++ b/drivers/gpu/drm/drm_irq.c
+@@ -1646,6 +1646,11 @@ int drm_modeset_ctl(struct drm_device *dev, void *data,
+ return 0;
+ }
+
++static void drm_vblank_dmabuf_destroy(struct drm_pending_event *event)
++{
++ kfree(event);
++}
++
+ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
+ union drm_wait_vblank *vblwait,
+ struct drm_file *file_priv)
+@@ -1670,7 +1675,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
+ e->event.user_data = vblwait->request.signal;
+ e->base.event = &e->event.base;
+ e->base.file_priv = file_priv;
+- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
++ e->base.destroy = drm_vblank_dmabuf_destroy;
+
+ spin_lock_irqsave(&dev->event_lock, flags);
+
diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
-index fcd2a86..f50489e 100644
+index a1fff11..425c24b 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,
@@ -43164,7 +45592,7 @@ index fcd2a86..f50489e 100644
for (i = 0; pdriver->id_table[i].vendor != 0; i++) {
pid = &pdriver->id_table[i];
-@@ -457,7 +460,7 @@ void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver)
+@@ -477,7 +480,7 @@ void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver)
} else {
list_for_each_entry_safe(dev, tmp, &driver->legacy_dev_list,
legacy_dev_list) {
@@ -43174,10 +45602,10 @@ index fcd2a86..f50489e 100644
}
}
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
-index 2c6019d..6508989 100644
+index 68f0f36..4e8daee 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
-@@ -616,7 +616,6 @@ static int exynos_drm_platform_probe(struct platform_device *pdev)
+@@ -605,7 +605,6 @@ static int exynos_drm_platform_probe(struct platform_device *pdev)
struct component_match *match;
pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
@@ -43185,33 +45613,96 @@ index 2c6019d..6508989 100644
match = exynos_drm_match_add(&pdev->dev);
if (IS_ERR(match))
-diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
-index d4813e0..6c1ab4d 100644
---- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
-+++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
-@@ -825,10 +825,16 @@ void mdfld_dsi_dpi_mode_set(struct drm_encoder *encoder,
- u32 pipeconf_reg = PIPEACONF;
- u32 dspcntr_reg = DSPACNTR;
-
-- u32 pipeconf = dev_priv->pipeconf[pipe];
-- u32 dspcntr = dev_priv->dspcntr[pipe];
-+ u32 pipeconf;
-+ u32 dspcntr;
- u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX;
-
-+ if (pipe == -1)
-+ return;
-+
-+ pipeconf = dev_priv->pipeconf[pipe];
-+ dspcntr = dev_priv->dspcntr[pipe];
+diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+index 8dfe6e1..e7957e6 100644
+--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
++++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+@@ -1060,6 +1060,11 @@ int exynos_g2d_get_ver_ioctl(struct drm_device *drm_dev, void *data,
+ return 0;
+ }
+
++static void exynos_g2d_dmabuf_destroy(struct drm_pending_event *event)
++{
++ kfree(event);
++}
+
- if (pipe) {
- pipeconf_reg = PIPECCONF;
- dspcntr_reg = DSPCCNTR;
+ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
+ struct drm_file *file)
+ {
+@@ -1118,7 +1123,7 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
+ e->event.user_data = req->user_data;
+ e->base.event = &e->event.base;
+ e->base.file_priv = file;
+- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
++ e->base.destroy = exynos_g2d_dmabuf_destroy;
+
+ node->event = e;
+ }
+diff --git a/drivers/gpu/drm/gma500/cdv_intel_crt.c b/drivers/gpu/drm/gma500/cdv_intel_crt.c
+index d0717a8..563f087 100644
+--- a/drivers/gpu/drm/gma500/cdv_intel_crt.c
++++ b/drivers/gpu/drm/gma500/cdv_intel_crt.c
+@@ -64,7 +64,7 @@ static void cdv_intel_crt_dpms(struct drm_encoder *encoder, int mode)
+ REG_WRITE(reg, temp);
+ }
+
+-static int cdv_intel_crt_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status cdv_intel_crt_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c
+index 7bb1f1af..a35770e 100644
+--- a/drivers/gpu/drm/gma500/cdv_intel_dp.c
++++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c
+@@ -505,7 +505,7 @@ static void cdv_intel_edp_backlight_off (struct gma_encoder *intel_encoder)
+ msleep(intel_dp->backlight_off_delay);
+ }
+
+-static int
++static enum drm_mode_status
+ cdv_intel_dp_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
+index ddf2d77..4e9e184 100644
+--- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
++++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
+@@ -223,7 +223,7 @@ static int cdv_hdmi_get_modes(struct drm_connector *connector)
+ return ret;
+ }
+
+-static int cdv_hdmi_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status cdv_hdmi_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ if (mode->clock > 165000)
+diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
+index 813ef23..17928d6 100644
+--- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
++++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
+@@ -244,7 +244,7 @@ static void cdv_intel_lvds_restore(struct drm_connector *connector)
+ {
+ }
+
+-static int cdv_intel_lvds_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status cdv_intel_lvds_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_device *dev = connector->dev;
diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_output.c b/drivers/gpu/drm/gma500/mdfld_dsi_output.c
-index 89f705c..d262d0b 100644
+index d758f4c..7828190 100644
--- a/drivers/gpu/drm/gma500/mdfld_dsi_output.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_output.c
+@@ -351,7 +351,7 @@ static int mdfld_dsi_connector_get_modes(struct drm_connector *connector)
+ return 0;
+ }
+
+-static int mdfld_dsi_connector_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status mdfld_dsi_connector_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct mdfld_dsi_connector *dsi_connector =
@@ -382,14 +382,14 @@ static int mdfld_dsi_connector_mode_valid(struct drm_connector *connector,
return MODE_OK;
}
@@ -43230,6 +45721,19 @@ index 89f705c..d262d0b 100644
}
static struct drm_encoder *mdfld_dsi_connector_best_encoder(
+diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi.c b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
+index 2d18499..3d5f8b9 100644
+--- a/drivers/gpu/drm/gma500/oaktrail_hdmi.c
++++ b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
+@@ -509,7 +509,7 @@ static void oaktrail_hdmi_dpms(struct drm_encoder *encoder, int mode)
+ HDMI_WRITE(HDMI_VIDEO_REG, temp);
+ }
+
+-static int oaktrail_hdmi_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status oaktrail_hdmi_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ if (mode->clock > 165000)
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index 92e7e57..5d74ff5 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
@@ -43242,6 +45746,58 @@ index 92e7e57..5d74ff5 100644
psb_modeset_init(dev);
psb_fbdev_init(dev);
+diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h
+index 2a3b7c6..fbd3fa3 100644
+--- a/drivers/gpu/drm/gma500/psb_intel_drv.h
++++ b/drivers/gpu/drm/gma500/psb_intel_drv.h
+@@ -255,7 +255,7 @@ extern int intelfb_remove(struct drm_device *dev,
+ extern bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder,
+ const struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+-extern int psb_intel_lvds_mode_valid(struct drm_connector *connector,
++extern enum drm_mode_status psb_intel_lvds_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode);
+ extern int psb_intel_lvds_set_property(struct drm_connector *connector,
+ struct drm_property *property,
+diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c
+index b1b9331..6b254ef 100644
+--- a/drivers/gpu/drm/gma500/psb_intel_lvds.c
++++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c
+@@ -343,7 +343,7 @@ static void psb_intel_lvds_restore(struct drm_connector *connector)
+ }
+ }
+
+-int psb_intel_lvds_mode_valid(struct drm_connector *connector,
++enum drm_mode_status psb_intel_lvds_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_psb_private *dev_priv = connector->dev->dev_private;
+diff --git a/drivers/gpu/drm/gma500/psb_intel_sdvo.c b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+index e787d37..91622fd 100644
+--- a/drivers/gpu/drm/gma500/psb_intel_sdvo.c
++++ b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+@@ -1158,7 +1158,7 @@ static void psb_intel_sdvo_dpms(struct drm_encoder *encoder, int mode)
+ return;
+ }
+
+-static int psb_intel_sdvo_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status psb_intel_sdvo_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct psb_intel_sdvo *psb_intel_sdvo = intel_attached_sdvo(connector);
+diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
+index f8ee740..223ee4c 100644
+--- a/drivers/gpu/drm/i2c/tda998x_drv.c
++++ b/drivers/gpu/drm/i2c/tda998x_drv.c
+@@ -864,7 +864,7 @@ tda998x_encoder_mode_fixup(struct drm_encoder *encoder,
+ return true;
+ }
+
+-static int tda998x_connector_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status tda998x_connector_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ /* TDA19988 dotclock can go up to 165MHz */
diff --git a/drivers/gpu/drm/i810/i810_dma.c b/drivers/gpu/drm/i810/i810_dma.c
index d918567..6cfd904 100644
--- a/drivers/gpu/drm/i810/i810_dma.c
@@ -43296,11 +45852,24 @@ index 93ec5dc..204ec92 100644
#define I810_BASE(reg) ((unsigned long) \
dev_priv->mmio_map->handle)
+diff --git a/drivers/gpu/drm/i915/dvo.h b/drivers/gpu/drm/i915/dvo.h
+index 5e6a301..b6e143e 100644
+--- a/drivers/gpu/drm/i915/dvo.h
++++ b/drivers/gpu/drm/i915/dvo.h
+@@ -74,7 +74,7 @@ struct intel_dvo_dev_ops {
+ *
+ * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
+ */
+- int (*mode_valid)(struct intel_dvo_device *dvo,
++ enum drm_mode_status (*mode_valid)(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode);
+
+ /*
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
-index 61fcb3b..bad2d5f 100644
+index d70d96f..d3a598e 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
-@@ -354,7 +354,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
+@@ -356,7 +356,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.
*/
@@ -43309,14 +45878,14 @@ index 61fcb3b..bad2d5f 100644
}
static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
-@@ -1331,4 +1331,4 @@ const struct drm_ioctl_desc i915_ioctls[] = {
+@@ -1334,4 +1334,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 a6ad938..ad4ff46 100644
+index f357058..5638302 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -40,7 +40,7 @@
@@ -43328,7 +45897,7 @@ index a6ad938..ad4ff46 100644
#define GEN_DEFAULT_PIPEOFFSETS \
.pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
-@@ -1690,7 +1690,7 @@ static const struct file_operations i915_driver_fops = {
+@@ -1672,7 +1672,7 @@ static const struct file_operations i915_driver_fops = {
.llseek = noop_llseek,
};
@@ -43337,7 +45906,7 @@ index a6ad938..ad4ff46 100644
/* Don't use MTRRs here; the Xserver or userspace app should
* deal with them for Intel hardware.
*/
-@@ -1740,6 +1740,7 @@ static struct pci_driver i915_pci_driver = {
+@@ -1722,6 +1722,7 @@ static struct pci_driver i915_pci_driver = {
static int __init i915_init(void)
{
@@ -43345,7 +45914,7 @@ index a6ad938..ad4ff46 100644
driver.num_ioctls = i915_max_ioctl;
/*
-@@ -1757,6 +1758,7 @@ static int __init i915_init(void)
+@@ -1739,6 +1740,7 @@ static int __init i915_init(void)
#endif
if (!(driver.driver_features & DRIVER_MODESET)) {
@@ -43353,7 +45922,7 @@ index a6ad938..ad4ff46 100644
/* Silently fail loading to not upset userspace. */
DRM_DEBUG_DRIVER("KMS and UMS disabled.\n");
return 0;
-@@ -1764,6 +1766,7 @@ static int __init i915_init(void)
+@@ -1746,6 +1748,7 @@ static int __init i915_init(void)
if (i915.nuclear_pageflip)
driver.driver_features |= DRIVER_ATOMIC;
@@ -43362,10 +45931,10 @@ index a6ad938..ad4ff46 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 d3ce4da..73a3dda 100644
+index b0847b9..c6116c8 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
-@@ -2637,7 +2637,7 @@ struct drm_i915_cmd_table {
+@@ -2665,7 +2665,7 @@ struct drm_i915_cmd_table {
#include "i915_trace.h"
extern const struct drm_ioctl_desc i915_ioctls[];
@@ -43375,10 +45944,10 @@ index d3ce4da..73a3dda 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 6ed7d63a..1863cfa 100644
+index dccb517..c5da26b 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-@@ -965,12 +965,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
+@@ -1001,12 +1001,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,
@@ -43394,10 +45963,10 @@ index 6ed7d63a..1863cfa 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 86c7500..f4d2025 100644
+index 56f4f2e..5f6e773 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
-@@ -2953,8 +2953,8 @@ static void chv_setup_private_ppat(struct drm_i915_private *dev_priv)
+@@ -3011,8 +3011,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,
@@ -43408,7 +45977,7 @@ index 86c7500..f4d2025 100644
u64 *mappable_end)
{
struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -3001,8 +3001,8 @@ static int gen8_gmch_probe(struct drm_device *dev,
+@@ -3062,8 +3062,8 @@ static int gen8_gmch_probe(struct drm_device *dev,
static int gen6_gmch_probe(struct drm_device *dev,
u64 *gtt_total,
@@ -43419,7 +45988,7 @@ index 86c7500..f4d2025 100644
u64 *mappable_end)
{
struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -3052,8 +3052,8 @@ static void gen6_gmch_remove(struct i915_address_space *vm)
+@@ -3113,8 +3113,8 @@ static void gen6_gmch_remove(struct i915_address_space *vm)
static int i915_gmch_probe(struct drm_device *dev,
u64 *gtt_total,
@@ -43430,7 +45999,7 @@ index 86c7500..f4d2025 100644
u64 *mappable_end)
{
struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -3121,8 +3121,8 @@ int i915_gem_gtt_init(struct drm_device *dev)
+@@ -3182,8 +3182,8 @@ int i915_gem_gtt_init(struct drm_device *dev)
/* GMADR is the PCI mmio aperture into the global GTT. */
DRM_INFO("Memory usable by graphics device = %lluM\n",
gtt->base.total >> 20);
@@ -43442,10 +46011,10 @@ index 86c7500..f4d2025 100644
if (intel_iommu_gfx_mapped)
DRM_INFO("VT-d active for gfx access\n");
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
-index a216397..2906614 100644
+index b448ad8..422a8c5 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
-@@ -344,11 +344,11 @@ struct i915_address_space {
+@@ -341,11 +341,11 @@ struct i915_address_space {
struct i915_gtt {
struct i915_address_space base;
@@ -43459,7 +46028,7 @@ index a216397..2906614 100644
/** "Graphics Stolen Memory" holds the global PTEs */
void __iomem *gsm;
-@@ -359,7 +359,7 @@ struct i915_gtt {
+@@ -356,7 +356,7 @@ struct i915_gtt {
/* global gtt ops */
int (*gtt_probe)(struct drm_device *dev, u64 *gtt_total,
@@ -43502,10 +46071,10 @@ index 97f3a56..32c712e 100644
ret = drm_ioctl(filp, cmd, arg);
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
-index 0f42a27..8d376ee 100644
+index fa8afa7..0bac957 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
-@@ -4399,14 +4399,15 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
+@@ -4490,14 +4490,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);
@@ -43524,7 +46093,7 @@ index 0f42a27..8d376ee 100644
dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
}
-@@ -4418,32 +4419,32 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
+@@ -4509,32 +4510,32 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
if (!IS_GEN2(dev_priv))
dev->vblank_disable_immediate = true;
@@ -43577,7 +46146,7 @@ index 0f42a27..8d376ee 100644
if (IS_BROXTON(dev))
dev_priv->display.hpd_irq_setup = bxt_hpd_irq_setup;
else if (HAS_PCH_SPT(dev))
-@@ -4451,35 +4452,36 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
+@@ -4542,35 +4543,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)) {
@@ -43635,10 +46204,10 @@ index 0f42a27..8d376ee 100644
/**
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index f859a5b..c6ef76b 100644
+index 46947ff..c3efaa4 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -14731,13 +14731,13 @@ struct intel_quirk {
+@@ -15106,13 +15106,13 @@ struct intel_quirk {
int subsystem_vendor;
int subsystem_device;
void (*hook)(struct drm_device *dev);
@@ -43654,7 +46223,7 @@ index f859a5b..c6ef76b 100644
static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
{
-@@ -14745,18 +14745,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
+@@ -15120,18 +15120,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
return 1;
}
@@ -43686,10 +46255,10 @@ index f859a5b..c6ef76b 100644
},
};
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
-index 7b990b4..452d7e4 100644
+index 2f57d79..7152e6e 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
-@@ -354,7 +354,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
+@@ -348,7 +348,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
if (imxdrm->pipes >= MAX_CRTC)
return -EINVAL;
@@ -43822,6 +46391,32 @@ index 792f924..aeb1334 100644
-int mga_max_ioctl = ARRAY_SIZE(mga_ioctls);
+const int mga_max_ioctl = ARRAY_SIZE(mga_ioctls);
+diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
+index dc13c48..7d8d1cd 100644
+--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
++++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
+@@ -1586,7 +1586,7 @@ static uint32_t mga_vga_calculate_mode_bandwidth(struct drm_display_mode *mode,
+
+ #define MODE_BANDWIDTH MODE_BAD
+
+-static int mga_vga_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status mga_vga_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_device *dev = connector->dev;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
+index d5e6938..3c38707 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,
+ return nouveau_dsm_set_discrete_state(nouveau_dsm_priv.dhandle, state);
+ }
+
+-static int nouveau_dsm_get_client_id(struct pci_dev *pdev)
++static enum vga_switcheroo_client_id nouveau_dsm_get_client_id(struct pci_dev *pdev)
+ {
+ /* 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
--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
@@ -43835,11 +46430,24 @@ index 4dca65a..3486961 100644
#define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry })
+diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
+index fcebfae..2a7341d 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
++++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
+@@ -843,7 +843,7 @@ get_tmds_link_bandwidth(struct drm_connector *connector, bool hdmi)
+ return 112000;
+ }
+
+-static int
++static enum drm_mode_status
+ nouveau_connector_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
-index 1d3ee51..5fb4449 100644
+index 2f2f252e..305b42e 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
-@@ -76,9 +76,8 @@ MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1
+@@ -80,9 +80,8 @@ MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1
int nouveau_runtime_pm = -1;
module_param_named(runpm, nouveau_runtime_pm, int, 0400);
@@ -43850,7 +46458,7 @@ index 1d3ee51..5fb4449 100644
static u64
nouveau_pci_name(struct pci_dev *pdev)
-@@ -915,7 +914,7 @@ nouveau_driver_fops = {
+@@ -919,7 +918,7 @@ nouveau_driver_fops = {
};
static struct drm_driver
@@ -43859,16 +46467,16 @@ index 1d3ee51..5fb4449 100644
.driver_features =
DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_RENDER |
DRIVER_KMS_LEGACY_CONTEXT,
-@@ -927,6 +926,8 @@ driver_stub = {
+@@ -931,6 +930,8 @@ driver_stub = {
.postclose = nouveau_drm_postclose,
.lastclose = nouveau_vga_lastclose,
+ .set_busid = drm_pci_set_busid,
+
#if defined(CONFIG_DEBUG_FS)
- .debugfs_init = nouveau_debugfs_init,
- .debugfs_cleanup = nouveau_debugfs_takedown,
-@@ -1064,10 +1065,10 @@ err_free:
+ .debugfs_init = nouveau_drm_debugfs_init,
+ .debugfs_cleanup = nouveau_drm_debugfs_cleanup,
+@@ -1063,10 +1064,10 @@ err_free:
static int __init
nouveau_drm_init(void)
{
@@ -43883,7 +46491,7 @@ index 1d3ee51..5fb4449 100644
nouveau_display_options();
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h
-index a02813e..c30a6b0 100644
+index 5c363ed..98fa924 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.h
@@ -124,7 +124,6 @@ struct nouveau_drm {
@@ -43960,6 +46568,31 @@ 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
+--- 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)
+ return ret;
+ }
+
++static void usif_notify_release(struct drm_pending_event *event)
++{
++ kfree(event);
++}
++
+ static int
+ usif_notify_get(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
+ {
+@@ -212,7 +217,7 @@ usif_notify_get(struct drm_file *f, void *data, u32 size, void *argv, u32 argc)
+ ntfy->p->base.event = &ntfy->p->e.base;
+ ntfy->p->base.file_priv = f;
+ ntfy->p->base.pid = current->pid;
+- ntfy->p->base.destroy =(void(*)(struct drm_pending_event *))kfree;
++ ntfy->p->base.destroy = usif_notify_release;
+ ntfy->p->e.base.type = DRM_NOUVEAU_EVENT_NVIF;
+ 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
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -43973,19 +46606,85 @@ index af89c36..83ef136 100644
}
static const struct vga_switcheroo_client_ops
+diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
+index b2557e8..2d4f9f4 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
+@@ -151,11 +151,16 @@ shadow_fw_init(struct nvkm_bios *bios, const char *name)
+ return (void *)fw;
+ }
+
++static void shadow_fw_fini(void *fw)
++{
++ release_firmware(fw);
++}
++
+ static const struct nvbios_source
+ shadow_fw = {
+ .name = "firmware",
+ .init = shadow_fw_init,
+- .fini = (void(*)(void *))release_firmware,
++ .fini = shadow_fw_fini,
+ .read = shadow_fw_read,
+ .rw = false,
+ };
+diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c
+index 9b91da0..b3fa90d 100644
+--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c
++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c
+@@ -111,11 +111,16 @@ platform_init(struct nvkm_bios *bios, const char *name)
+ return ERR_PTR(ret);
+ }
+
++static void platform_fini(void *data)
++{
++ kfree(data);
++}
++
+ const struct nvbios_source
+ nvbios_platform = {
+ .name = "PLATFORM",
+ .init = platform_init,
+- .fini = (void(*)(void *))kfree,
++ .fini = platform_fini,
+ .read = pcirom_read,
+ .rw = true,
+ };
diff --git a/drivers/gpu/drm/omapdrm/Makefile b/drivers/gpu/drm/omapdrm/Makefile
-index 778372b..4b81cb4 100644
+index fe4c222..48b7b75 100644
--- a/drivers/gpu/drm/omapdrm/Makefile
+++ b/drivers/gpu/drm/omapdrm/Makefile
-@@ -3,7 +3,7 @@
- # Direct Rendering Infrastructure (DRI)
- #
+@@ -6,7 +6,7 @@
+ obj-y += dss/
+ obj-y += displays/
-ccflags-y := -Iinclude/drm -Werror
+ccflags-y := -Iinclude/drm
omapdrm-y := omap_drv.o \
omap_irq.o \
omap_debugfs.o \
+diff --git a/drivers/gpu/drm/omapdrm/dss/display.c b/drivers/gpu/drm/omapdrm/dss/display.c
+index ef5b902..47cf7f5 100644
+--- a/drivers/gpu/drm/omapdrm/dss/display.c
++++ b/drivers/gpu/drm/omapdrm/dss/display.c
+@@ -161,12 +161,14 @@ int omapdss_register_display(struct omap_dss_device *dssdev)
+ if (dssdev->name == NULL)
+ dssdev->name = dssdev->alias;
+
++ pax_open_kernel();
+ if (drv && drv->get_resolution == NULL)
+- drv->get_resolution = omapdss_default_get_resolution;
++ *(void **)&drv->get_resolution = omapdss_default_get_resolution;
+ if (drv && drv->get_recommended_bpp == NULL)
+- drv->get_recommended_bpp = omapdss_default_get_recommended_bpp;
++ *(void **)&drv->get_recommended_bpp = omapdss_default_get_recommended_bpp;
+ if (drv && drv->get_timings == NULL)
+- drv->get_timings = omapdss_default_get_timings;
++ *(void **)&drv->get_timings = omapdss_default_get_timings;
++ pax_close_kernel();
+
+ 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
--- a/drivers/gpu/drm/qxl/qxl_cmd.c
@@ -44043,6 +46742,19 @@ index 6911b8c..89d6867 100644
seq_printf(m, "%d\n", qdev->irq_received_error);
return 0;
}
+diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
+index 8627651..87df69f 100644
+--- a/drivers/gpu/drm/qxl/qxl_display.c
++++ b/drivers/gpu/drm/qxl/qxl_display.c
+@@ -831,7 +831,7 @@ static int qxl_conn_get_modes(struct drm_connector *connector)
+ return ret;
+ }
+
+-static int qxl_conn_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status qxl_conn_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ 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..8eecdd0 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
@@ -44070,7 +46782,7 @@ index 7307b07..8eecdd0 100644
}
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
-index 01a8694..584fb48 100644
+index 6e6b9b1..4462096 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.h
+++ b/drivers/gpu/drm/qxl/qxl_drv.h
@@ -290,10 +290,10 @@ struct qxl_device {
@@ -44174,7 +46886,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 0cbc4c9..0e46686 100644
+index 9534127..3fbab8c 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)
@@ -44395,8 +47107,70 @@ index b928c17..e5d9400 100644
if (regcomp
(&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) {
+diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
+index 9bc408c..3bb75f5 100644
+--- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c
++++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c
+@@ -491,7 +491,7 @@ static int radeon_atpx_init(void)
+ * look up whether we are the integrated or discrete GPU (all asics).
+ * Returns the client id.
+ */
+-static int radeon_atpx_get_client_id(struct pci_dev *pdev)
++static enum vga_switcheroo_client_id radeon_atpx_get_client_id(struct pci_dev *pdev)
+ {
+ if (radeon_atpx_priv.dhandle == ACPI_HANDLE(&pdev->dev))
+ return VGA_SWITCHEROO_IGD;
+diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
+index 340f3f5..3a0afbe 100644
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -851,7 +851,7 @@ static int radeon_lvds_get_modes(struct drm_connector *connector)
+ return ret;
+ }
+
+-static int radeon_lvds_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status radeon_lvds_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_encoder *encoder = radeon_best_single_encoder(connector);
+@@ -994,7 +994,7 @@ static int radeon_vga_get_modes(struct drm_connector *connector)
+ return ret;
+ }
+
+-static int radeon_vga_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status radeon_vga_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_device *dev = connector->dev;
+@@ -1133,7 +1133,7 @@ static int radeon_tv_get_modes(struct drm_connector *connector)
+ return 1;
+ }
+
+-static int radeon_tv_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status radeon_tv_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ if ((mode->hdisplay > 1024) || (mode->vdisplay > 768))
+@@ -1464,7 +1464,7 @@ static void radeon_dvi_force(struct drm_connector *connector)
+ radeon_connector->use_digital = true;
+ }
+
+-static int radeon_dvi_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ struct drm_device *dev = connector->dev;
+@@ -1761,7 +1761,7 @@ out:
+ return ret;
+ }
+
+-static int radeon_dp_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ 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 f78f111..3df7de6 100644
+index e239633..4ae1159 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1259,7 +1259,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
@@ -44409,7 +47183,7 @@ index f78f111..3df7de6 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 5b6a6f5..7f4e55a 100644
+index e266ffc..0392d08 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -130,7 +130,7 @@ extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int crtc,
@@ -44421,7 +47195,7 @@ index 5b6a6f5..7f4e55a 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,
-@@ -566,7 +566,7 @@ static struct drm_driver kms_driver = {
+@@ -484,7 +484,7 @@ static struct drm_driver kms_driver = {
.driver_features =
DRIVER_USE_AGP |
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
@@ -44430,7 +47204,7 @@ index 5b6a6f5..7f4e55a 100644
.load = radeon_driver_load_kms,
.open = radeon_driver_open_kms,
.preclose = radeon_driver_preclose_kms,
-@@ -650,8 +650,11 @@ static int __init radeon_init(void)
+@@ -561,8 +561,11 @@ static int __init radeon_init(void)
DRM_INFO("radeon kernel modesetting enabled.\n");
driver = &kms_driver;
pdriver = &radeon_kms_pci_driver;
@@ -44444,41 +47218,6 @@ index 5b6a6f5..7f4e55a 100644
radeon_register_atpx_handler();
} else {
-@@ -659,8 +662,10 @@ static int __init radeon_init(void)
- DRM_INFO("radeon userspace modesetting enabled.\n");
- driver = &driver_old;
- pdriver = &radeon_pci_driver;
-- driver->driver_features &= ~DRIVER_MODESET;
-- driver->num_ioctls = radeon_max_ioctl;
-+
-+ pax_open_kernel();
-+ *(int *)&driver->num_ioctls = radeon_max_ioctl;
-+ pax_close_kernel();
- #else
- DRM_ERROR("No UMS support in radeon module!\n");
- return -EINVAL;
-diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
-index 0caafc7..32afc20 100644
---- a/drivers/gpu/drm/radeon/radeon_drv.h
-+++ b/drivers/gpu/drm/radeon/radeon_drv.h
-@@ -264,7 +264,7 @@ typedef struct drm_radeon_private {
-
- /* SW interrupt */
- wait_queue_head_t swi_queue;
-- atomic_t swi_emitted;
-+ atomic_unchecked_t swi_emitted;
- int vblank_crtc;
- uint32_t irq_enable_reg;
- uint32_t r500_disp_irq_reg;
-@@ -336,7 +336,7 @@ typedef struct drm_radeon_kcmd_buffer {
-
- extern int radeon_no_wb;
- extern struct drm_ioctl_desc radeon_ioctls[];
--extern int radeon_max_ioctl;
-+extern const int radeon_max_ioctl;
-
- extern u32 radeon_get_ring_head(drm_radeon_private_t *dev_priv);
- extern void radeon_set_ring_head(drm_radeon_private_t *dev_priv, u32 val);
diff --git a/drivers/gpu/drm/radeon/radeon_ioc32.c b/drivers/gpu/drm/radeon/radeon_ioc32.c
index 0b98ea1..a3c770f 100644
--- a/drivers/gpu/drm/radeon/radeon_ioc32.c
@@ -44521,68 +47260,43 @@ index 0b98ea1..a3c770f 100644
else
ret = drm_ioctl(filp, cmd, arg);
-diff --git a/drivers/gpu/drm/radeon/radeon_irq.c b/drivers/gpu/drm/radeon/radeon_irq.c
-index 688afb6..4b95df6 100644
---- a/drivers/gpu/drm/radeon/radeon_irq.c
-+++ b/drivers/gpu/drm/radeon/radeon_irq.c
-@@ -226,8 +226,8 @@ static int radeon_emit_irq(struct drm_device * dev)
- unsigned int ret;
- RING_LOCALS;
-
-- atomic_inc(&dev_priv->swi_emitted);
-- ret = atomic_read(&dev_priv->swi_emitted);
-+ atomic_inc_unchecked(&dev_priv->swi_emitted);
-+ ret = atomic_read_unchecked(&dev_priv->swi_emitted);
-
- BEGIN_RING(4);
- OUT_RING_REG(RADEON_LAST_SWI_REG, ret);
-@@ -353,7 +353,7 @@ int radeon_driver_irq_postinstall(struct drm_device *dev)
- drm_radeon_private_t *dev_priv =
- (drm_radeon_private_t *) dev->dev_private;
-
-- atomic_set(&dev_priv->swi_emitted, 0);
-+ atomic_set_unchecked(&dev_priv->swi_emitted, 0);
- init_waitqueue_head(&dev_priv->swi_queue);
-
- dev->max_vblank_count = 0x001fffff;
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
-index d290a8a..e165ba9 100644
+index 414953c..1b26674 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
+@@ -822,7 +822,7 @@ u32 radeon_get_vblank_counter_kms(struct drm_device *dev, unsigned int pipe)
+ * Enable the interrupt on the requested crtc (all asics).
+ * Returns 0 on success, -EINVAL on failure.
+ */
+-int radeon_enable_vblank_kms(struct drm_device *dev, int crtc)
++int radeon_enable_vblank_kms(struct drm_device *dev, unsigned int crtc)
+ {
+ struct radeon_device *rdev = dev->dev_private;
+ unsigned long irqflags;
+@@ -848,7 +848,7 @@ int radeon_enable_vblank_kms(struct drm_device *dev, int crtc)
+ *
+ * Disable the interrupt on the requested crtc (all asics).
+ */
+-void radeon_disable_vblank_kms(struct drm_device *dev, int crtc)
++void radeon_disable_vblank_kms(struct drm_device *dev, unsigned int crtc)
+ {
+ struct radeon_device *rdev = dev->dev_private;
+ unsigned long irqflags;
+@@ -877,7 +877,7 @@ void radeon_disable_vblank_kms(struct drm_device *dev, int crtc)
+ * scanout position. (all asics).
+ * Returns postive status flags on success, negative error on failure.
+ */
+-int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc,
++int radeon_get_vblank_timestamp_kms(struct drm_device *dev, unsigned int crtc,
+ int *max_error,
+ struct timeval *vblank_time,
+ unsigned flags)
@@ -946,4 +946,4 @@ const struct drm_ioctl_desc radeon_ioctls_kms[] = {
DRM_IOCTL_DEF_DRV(RADEON_GEM_OP, radeon_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
DRM_IOCTL_DEF_DRV(RADEON_GEM_USERPTR, radeon_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
};
-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_state.c b/drivers/gpu/drm/radeon/radeon_state.c
-index 15aee72..c6df119 100644
---- a/drivers/gpu/drm/radeon/radeon_state.c
-+++ b/drivers/gpu/drm/radeon/radeon_state.c
-@@ -2168,7 +2168,7 @@ static int radeon_cp_clear(struct drm_device *dev, void *data, struct drm_file *
- if (sarea_priv->nbox > RADEON_NR_SAREA_CLIPRECTS)
- sarea_priv->nbox = RADEON_NR_SAREA_CLIPRECTS;
-
-- if (copy_from_user(&depth_boxes, clear->depth_boxes,
-+ if (sarea_priv->nbox > RADEON_NR_SAREA_CLIPRECTS || copy_from_user(&depth_boxes, clear->depth_boxes,
- sarea_priv->nbox * sizeof(depth_boxes[0])))
- return -EFAULT;
-
-@@ -3031,7 +3031,7 @@ static int radeon_cp_getparam(struct drm_device *dev, void *data, struct drm_fil
- {
- drm_radeon_private_t *dev_priv = dev->dev_private;
- drm_radeon_getparam_t *param = data;
-- int value;
-+ int value = 0;
-
- DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
-
-@@ -3258,4 +3258,4 @@ struct drm_ioctl_desc radeon_ioctls[] = {
- DRM_IOCTL_DEF_DRV(RADEON_CS, r600_cs_legacy_ioctl, DRM_AUTH)
- };
-
--int radeon_max_ioctl = ARRAY_SIZE(radeon_ioctls);
-+const int radeon_max_ioctl = ARRAY_SIZE(radeon_ioctls);
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index e06ac54..46eabfd 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -44685,10 +47399,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/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
-index e9f24a8..d790ccc 100644
+index dde6f20..1969ca6 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
-@@ -1654,7 +1654,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor)
+@@ -1657,7 +1657,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor)
}
for (i = 0; i < ARRAY_SIZE(debugfs_files); i++)
@@ -44698,7 +47412,7 @@ index e9f24a8..d790ccc 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 f0a138e..a390c07 100644
+index 44e1027..3548928 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -62,7 +62,7 @@ struct tegra_dsi {
@@ -44711,7 +47425,7 @@ index f0a138e..a390c07 100644
struct dentry *debugfs;
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
-index 52b32cb..a8b2d5b 100644
+index b7ef492..8968507 100644
--- a/drivers/gpu/drm/tegra/hdmi.c
+++ b/drivers/gpu/drm/tegra/hdmi.c
@@ -64,7 +64,7 @@ struct tegra_hdmi {
@@ -44724,7 +47438,7 @@ index 52b32cb..a8b2d5b 100644
struct dentry *debugfs;
};
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
-index 3eff7cf..06e8322 100644
+index 757c6e8..710a6ff 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -1003,8 +1003,11 @@ static int tegra_sor_debugfs_init(struct tegra_sor *sor,
@@ -44953,11 +47667,24 @@ index 624d941..106fa1f 100644
p->pool->dev_name, p->pool->name, current->pid,
nr_free, shrink_pages);
}
+diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c
+index 4709b54..beb015d 100644
+--- a/drivers/gpu/drm/udl/udl_connector.c
++++ b/drivers/gpu/drm/udl/udl_connector.c
+@@ -80,7 +80,7 @@ static int udl_get_modes(struct drm_connector *connector)
+ return ret;
+ }
+
+-static int udl_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status udl_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ 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 73e41a8..46d7a6a 100644
+index 18a2acb..0ca5376 100644
--- a/drivers/gpu/drm/udl/udl_fb.c
+++ b/drivers/gpu/drm/udl/udl_fb.c
-@@ -367,7 +367,6 @@ static int udl_fb_release(struct fb_info *info, int user)
+@@ -366,7 +366,6 @@ static int udl_fb_release(struct fb_info *info, int user)
fb_deferred_io_cleanup(info);
kfree(info->fbdefio);
info->fbdefio = NULL;
@@ -44965,6 +47692,32 @@ index 73e41a8..46d7a6a 100644
}
pr_warn("released /dev/fb%d user=%d count=%d\n",
+diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
+index f1655ff..e40254b 100644
+--- a/drivers/gpu/drm/vc4/vc4_drv.c
++++ b/drivers/gpu/drm/vc4/vc4_drv.c
+@@ -142,6 +142,11 @@ static int compare_dev(struct device *dev, void *data)
+ return dev == data;
+ }
+
++static int vc4_match(struct device *dev, void *drv)
++{
++ return platform_bus_type.match(dev, drv);
++}
++
+ static void vc4_match_add_drivers(struct device *dev,
+ struct component_match **match,
+ struct platform_driver *const *drivers,
+@@ -153,8 +158,7 @@ static void vc4_match_add_drivers(struct device *dev,
+ struct device_driver *drv = &drivers[i]->driver;
+ struct device *p = NULL, *d;
+
+- while ((d = bus_find_device(&platform_bus_type, p, drv,
+- (void *)platform_bus_type.match))) {
++ while ((d = bus_find_device(&platform_bus_type, p, drv, vc4_match))) {
+ put_device(p);
+ component_match_add(dev, match, compare_dev, d);
+ p = d;
diff --git a/drivers/gpu/drm/via/via_dma.c b/drivers/gpu/drm/via/via_dma.c
index d17d8f2..67e8e48b 100644
--- a/drivers/gpu/drm/via/via_dma.c
@@ -45096,6 +47849,19 @@ index ea8172c..6ceff63 100644
irqwait->request.type &= ~_DRM_VBLANK_RELATIVE;
case VIA_IRQ_ABSOLUTE:
break;
+diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
+index a165f03..d89bd6a 100644
+--- a/drivers/gpu/drm/virtio/virtgpu_display.c
++++ b/drivers/gpu/drm/virtio/virtgpu_display.c
+@@ -330,7 +330,7 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector)
+ return count;
+ }
+
+-static int virtio_gpu_conn_mode_valid(struct drm_connector *connector,
++static enum drm_mode_status virtio_gpu_conn_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+ 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
--- a/drivers/gpu/drm/virtio/virtgpu_ttm.c
@@ -45130,6 +47896,31 @@ index 469cdd5..958866a 100644
wait_queue_head_t fence_queue;
wait_queue_head_t fifo_queue;
spinlock_t waiter_lock;
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+index 8e689b4..6c9eb8f 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+@@ -1016,6 +1016,11 @@ struct vmw_event_fence_pending {
+ struct drm_vmw_event_fence event;
+ };
+
++static void vmw_event_fence_dmabuf_destroy(struct drm_pending_event *event)
++{
++ kfree(event);
++}
++
+ static int vmw_event_fence_action_create(struct drm_file *file_priv,
+ struct vmw_fence_obj *fence,
+ uint32_t flags,
+@@ -1055,7 +1060,7 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
+
+ event->base.event = &event->event.base;
+ event->base.file_priv = file_priv;
+- event->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
++ event->base.destroy = vmw_event_fence_dmabuf_destroy;
+
+
+ if (flags & DRM_VMW_FE_FLAG_REQ_TIME)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
index b6a0806..9fb5479 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
@@ -45225,10 +48016,10 @@ index efd1ffd..0ae13ca 100644
marker = list_first_entry(&queue->head,
struct vmw_marker, head);
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
-index 41edd5a..cb008f0 100644
+index 665ab9f..7006609 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
-@@ -910,7 +910,7 @@ static int vga_switcheroo_runtime_resume(struct device *dev)
+@@ -911,7 +911,7 @@ static int vga_switcheroo_runtime_resume(struct device *dev)
* where the power switch is separate to the device being powered down.
*/
int vga_switcheroo_init_domain_pm_ops(struct device *dev,
@@ -45237,7 +48028,7 @@ index 41edd5a..cb008f0 100644
{
/* copy over all the bus versions */
if (dev->bus && dev->bus->pm) {
-@@ -981,7 +981,7 @@ static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev)
+@@ -982,7 +982,7 @@ static int vga_switcheroo_runtime_resume_hdmi_audio(struct device *dev)
*/
int
vga_switcheroo_init_domain_pm_optimus_hdmi_audio(struct device *dev,
@@ -45247,7 +48038,7 @@ index 41edd5a..cb008f0 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 ec791e1..169a46d 100644
+index 99446ff..ab93719 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2584,7 +2584,7 @@ EXPORT_SYMBOL_GPL(hid_ignore);
@@ -45268,6 +48059,19 @@ index ec791e1..169a46d 100644
hid_debug_register(hdev, dev_name(&hdev->dev));
ret = device_add(&hdev->dev);
+diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
+index d6fa496..dde31aa 100644
+--- a/drivers/hid/hid-magicmouse.c
++++ b/drivers/hid/hid-magicmouse.c
+@@ -34,7 +34,7 @@ module_param(emulate_scroll_wheel, bool, 0644);
+ MODULE_PARM_DESC(emulate_scroll_wheel, "Emulate a scroll wheel");
+
+ static unsigned int scroll_speed = 32;
+-static int param_set_scroll_speed(const char *val, struct kernel_param *kp) {
++static int param_set_scroll_speed(const char *val, const struct kernel_param *kp) {
+ unsigned long speed;
+ if (!val || kstrtoul(val, 0, &speed) || speed > 63)
+ return -EINVAL;
diff --git a/drivers/hid/hid-sensor-custom.c b/drivers/hid/hid-sensor-custom.c
index 5614fee..8a6f5f6 100644
--- a/drivers/hid/hid-sensor-custom.c
@@ -45295,10 +48099,10 @@ index c13fb5b..55a3802 100644
*off += size;
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
-index 9098f13..19a4855 100644
+index 1161d68..7a42e2c 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
-@@ -382,7 +382,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
+@@ -383,7 +383,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
int ret = 0;
next_gpadl_handle =
@@ -45307,7 +48111,7 @@ index 9098f13..19a4855 100644
ret = create_gpadl_header(kbuffer, size, &msginfo, &msgcount);
if (ret)
-@@ -705,9 +705,7 @@ int vmbus_sendpacket_pagebuffer_ctl(struct vmbus_channel *channel,
+@@ -728,9 +728,7 @@ int vmbus_sendpacket_pagebuffer_ctl(struct vmbus_channel *channel,
* Adjust the size down since vmbus_channel_packet_page_buffer is the
* largest size we support
*/
@@ -45319,10 +48123,10 @@ index 9098f13..19a4855 100644
packetlen_aligned = ALIGN(packetlen, sizeof(u64));
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
-index 6341be8..1a2fc8d 100644
+index 11bca51..17bdc9b 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
-@@ -95,7 +95,7 @@ static u64 do_hypercall(u64 control, void *input, void *output)
+@@ -95,7 +95,7 @@ u64 hv_do_hypercall(u64 control, void *input, void *output)
{
u64 input_address = (input) ? virt_to_phys(input) : 0;
u64 output_address = (output) ? virt_to_phys(output) : 0;
@@ -45331,7 +48135,7 @@ index 6341be8..1a2fc8d 100644
#ifdef CONFIG_X86_64
u64 hv_status = 0;
-@@ -219,7 +219,7 @@ int hv_init(void)
+@@ -218,7 +218,7 @@ int hv_init(void)
/* See if the hypercall page is already set */
rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
@@ -45426,10 +48230,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 3782636..7dc4e6c 100644
+index 4ebc796..776f2b1 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
-@@ -654,7 +654,7 @@ enum vmbus_connect_state {
+@@ -568,7 +568,7 @@ enum vmbus_connect_state {
struct vmbus_connection {
enum vmbus_connect_state conn_state;
@@ -45537,11 +48341,11 @@ index c43318d..72f7656 100644
.ident = "Dell Inspiron",
.matches = {
diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c
-index 7a8a6fb..015c1fd 100644
+index 1f64378..2b6e615 100644
--- a/drivers/hwmon/ibmaem.c
+++ b/drivers/hwmon/ibmaem.c
@@ -924,7 +924,7 @@ static int aem_register_sensors(struct aem_data *data,
- struct aem_rw_sensor_template *rw)
+ const struct aem_rw_sensor_template *rw)
{
struct device *dev = &data->pdev->dev;
- struct sensor_device_attribute *sensors = data->sensors;
@@ -45563,11 +48367,11 @@ index 17ae2eb..21b71dd 100644
int in_i = 1, temp_i = 1, curr_i = 1, humidity_i = 1;
enum iio_chan_type type;
diff --git a/drivers/hwmon/nct6683.c b/drivers/hwmon/nct6683.c
-index 37f0170..414ec2c 100644
+index 559c596..3de1a96 100644
--- a/drivers/hwmon/nct6683.c
+++ b/drivers/hwmon/nct6683.c
-@@ -397,11 +397,11 @@ static struct attribute_group *
- nct6683_create_attr_group(struct device *dev, struct sensor_template_group *tg,
+@@ -404,11 +404,11 @@ nct6683_create_attr_group(struct device *dev,
+ const struct sensor_template_group *tg,
int repeat)
{
- struct sensor_device_attribute_2 *a2;
@@ -45582,11 +48386,11 @@ index 37f0170..414ec2c 100644
int i, j, count;
diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c
-index d7ebdf8..5d0cfb2 100644
+index d087a8e..54e963a 100644
--- a/drivers/hwmon/nct6775.c
+++ b/drivers/hwmon/nct6775.c
-@@ -1048,10 +1048,10 @@ static struct attribute_group *
- nct6775_create_attr_group(struct device *dev, struct sensor_template_group *tg,
+@@ -1049,10 +1049,10 @@ nct6775_create_attr_group(struct device *dev,
+ const struct sensor_template_group *tg,
int repeat)
{
- struct attribute_group *group;
@@ -45727,7 +48531,7 @@ index 65e3240..e6c511d 100644
/* Wrapper access functions for multiplexed SMBus */
static DEFINE_MUTEX(amd756_lock);
diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
-index 1543d35d..6515f503 100644
+index 7368be0..00f2259 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -61,7 +61,7 @@ struct dw_scl_sda_cfg {
@@ -45791,6 +48595,28 @@ index 37a8a90..4724cbd 100644
sector_t block)
{
ide_hwif_t *hwif = drive->hwif;
+diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
+index d127ace..6ee866f 100644
+--- a/drivers/ide/ide.c
++++ b/drivers/ide/ide.c
+@@ -244,7 +244,7 @@ struct chs_geom {
+ static unsigned int ide_disks;
+ static struct chs_geom ide_disks_chs[MAX_HWIFS * MAX_DRIVES];
+
+-static int ide_set_disk_chs(const char *str, struct kernel_param *kp)
++static int ide_set_disk_chs(const char *str, const struct kernel_param *kp)
+ {
+ unsigned int a, b, c = 0, h = 0, s = 0, i, j = 1;
+
+@@ -328,7 +328,7 @@ static void ide_dev_apply_params(ide_drive_t *drive, u8 unit)
+
+ static unsigned int ide_ignore_cable;
+
+-static int ide_set_ignore_cable(const char *s, struct kernel_param *kp)
++static int ide_set_ignore_cable(const char *s, const struct kernel_param *kp)
+ {
+ int i, j = 1;
+
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index 146eed70b..7679efd 100644
--- a/drivers/idle/intel_idle.c
@@ -45809,10 +48635,10 @@ index 146eed70b..7679efd 100644
/*
* intel_idle_state_table_update()
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
-index 159ede6..856c0d5 100644
+index af7cc1e..9d2d06c 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
-@@ -594,7 +594,7 @@ static ssize_t iio_write_channel_info(struct device *dev,
+@@ -603,7 +603,7 @@ static ssize_t iio_write_channel_info(struct device *dev,
}
static
@@ -45835,7 +48661,7 @@ index b13936d..65322b2 100644
if (chipset >= AK_MAX_TYPE) {
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
-index d6d2b35..a97866a 100644
+index 1d92e09..215593e 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -115,7 +115,7 @@ static char const counter_group_names[CM_COUNTER_GROUPS]
@@ -45847,6 +48673,15 @@ index d6d2b35..a97866a 100644
};
struct cm_counter_attribute {
+@@ -1432,7 +1432,7 @@ static void cm_format_mra(struct cm_mra_msg *mra_msg,
+ static void cm_format_rej(struct cm_rej_msg *rej_msg,
+ struct cm_id_private *cm_id_priv,
+ enum ib_cm_rej_reason reason,
+- void *ari,
++ const void *ari,
+ u8 ari_length,
+ const void *private_data,
+ u8 private_data_len)
@@ -1476,7 +1476,7 @@ static void cm_dup_req_handler(struct cm_work *work,
struct ib_mad_send_buf *msg = NULL;
int ret;
@@ -45856,7 +48691,7 @@ index d6d2b35..a97866a 100644
counter[CM_REQ_COUNTER]);
/* Quick state check to discard duplicate REQs. */
-@@ -1862,7 +1862,7 @@ static void cm_dup_rep_handler(struct cm_work *work)
+@@ -1884,7 +1884,7 @@ static void cm_dup_rep_handler(struct cm_work *work)
if (!cm_id_priv)
return;
@@ -45865,7 +48700,7 @@ index d6d2b35..a97866a 100644
counter[CM_REP_COUNTER]);
ret = cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg);
if (ret)
-@@ -2029,7 +2029,7 @@ static int cm_rtu_handler(struct cm_work *work)
+@@ -2051,7 +2051,7 @@ static int cm_rtu_handler(struct cm_work *work)
if (cm_id_priv->id.state != IB_CM_REP_SENT &&
cm_id_priv->id.state != IB_CM_MRA_REP_RCVD) {
spin_unlock_irq(&cm_id_priv->lock);
@@ -45874,7 +48709,7 @@ index d6d2b35..a97866a 100644
counter[CM_RTU_COUNTER]);
goto out;
}
-@@ -2212,7 +2212,7 @@ static int cm_dreq_handler(struct cm_work *work)
+@@ -2234,7 +2234,7 @@ static int cm_dreq_handler(struct cm_work *work)
cm_id_priv = cm_acquire_id(dreq_msg->remote_comm_id,
dreq_msg->local_comm_id);
if (!cm_id_priv) {
@@ -45883,7 +48718,7 @@ index d6d2b35..a97866a 100644
counter[CM_DREQ_COUNTER]);
cm_issue_drep(work->port, work->mad_recv_wc);
return -EINVAL;
-@@ -2237,7 +2237,7 @@ static int cm_dreq_handler(struct cm_work *work)
+@@ -2259,7 +2259,7 @@ static int cm_dreq_handler(struct cm_work *work)
case IB_CM_MRA_REP_RCVD:
break;
case IB_CM_TIMEWAIT:
@@ -45892,7 +48727,7 @@ index d6d2b35..a97866a 100644
counter[CM_DREQ_COUNTER]);
if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg))
goto unlock;
-@@ -2251,7 +2251,7 @@ static int cm_dreq_handler(struct cm_work *work)
+@@ -2273,7 +2273,7 @@ static int cm_dreq_handler(struct cm_work *work)
cm_free_msg(msg);
goto deref;
case IB_CM_DREQ_RCVD:
@@ -45901,7 +48736,23 @@ index d6d2b35..a97866a 100644
counter[CM_DREQ_COUNTER]);
goto unlock;
default:
-@@ -2618,7 +2618,7 @@ static int cm_mra_handler(struct cm_work *work)
+@@ -2336,12 +2336,13 @@ out:
+ }
+
+ int ib_send_cm_rej(struct ib_cm_id *cm_id,
+- enum ib_cm_rej_reason reason,
+- void *ari,
++ int _reason,
++ const void *ari,
+ u8 ari_length,
+ const void *private_data,
+ u8 private_data_len)
+ {
++ enum ib_cm_rej_reason reason = _reason;
+ struct cm_id_private *cm_id_priv;
+ struct ib_mad_send_buf *msg;
+ unsigned long flags;
+@@ -2640,7 +2641,7 @@ static int cm_mra_handler(struct cm_work *work)
ib_modify_mad(cm_id_priv->av.port->mad_agent,
cm_id_priv->msg, timeout)) {
if (cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD)
@@ -45910,7 +48761,7 @@ index d6d2b35..a97866a 100644
counter_group[CM_RECV_DUPLICATES].
counter[CM_MRA_COUNTER]);
goto out;
-@@ -2627,7 +2627,7 @@ static int cm_mra_handler(struct cm_work *work)
+@@ -2649,7 +2650,7 @@ static int cm_mra_handler(struct cm_work *work)
break;
case IB_CM_MRA_REQ_RCVD:
case IB_CM_MRA_REP_RCVD:
@@ -45919,7 +48770,7 @@ index d6d2b35..a97866a 100644
counter[CM_MRA_COUNTER]);
/* fall through */
default:
-@@ -2789,7 +2789,7 @@ static int cm_lap_handler(struct cm_work *work)
+@@ -2811,7 +2812,7 @@ static int cm_lap_handler(struct cm_work *work)
case IB_CM_LAP_IDLE:
break;
case IB_CM_MRA_LAP_SENT:
@@ -45928,7 +48779,7 @@ index d6d2b35..a97866a 100644
counter[CM_LAP_COUNTER]);
if (cm_alloc_response_msg(work->port, work->mad_recv_wc, &msg))
goto unlock;
-@@ -2805,7 +2805,7 @@ static int cm_lap_handler(struct cm_work *work)
+@@ -2827,7 +2828,7 @@ static int cm_lap_handler(struct cm_work *work)
cm_free_msg(msg);
goto deref;
case IB_CM_LAP_RCVD:
@@ -45937,7 +48788,32 @@ index d6d2b35..a97866a 100644
counter[CM_LAP_COUNTER]);
goto unlock;
default:
-@@ -3091,7 +3091,7 @@ static int cm_sidr_req_handler(struct cm_work *work)
+@@ -2859,7 +2860,7 @@ deref: cm_deref_id(cm_id_priv);
+ static void cm_format_apr(struct cm_apr_msg *apr_msg,
+ struct cm_id_private *cm_id_priv,
+ enum ib_cm_apr_status status,
+- void *info,
++ const void *info,
+ u8 info_length,
+ const void *private_data,
+ u8 private_data_len)
+@@ -2879,12 +2880,13 @@ static void cm_format_apr(struct cm_apr_msg *apr_msg,
+ }
+
+ int ib_send_cm_apr(struct ib_cm_id *cm_id,
+- enum ib_cm_apr_status status,
+- void *info,
++ int _status,
++ const void *info,
+ u8 info_length,
+ const void *private_data,
+ u8 private_data_len)
+ {
++ enum ib_cm_apr_status status = _status;
+ struct cm_id_private *cm_id_priv;
+ struct ib_mad_send_buf *msg;
+ unsigned long flags;
+@@ -3113,7 +3115,7 @@ static int cm_sidr_req_handler(struct cm_work *work)
cur_cm_id_priv = cm_insert_remote_sidr(cm_id_priv);
if (cur_cm_id_priv) {
spin_unlock_irq(&cm.lock);
@@ -45946,7 +48822,7 @@ index d6d2b35..a97866a 100644
counter[CM_SIDR_REQ_COUNTER]);
goto out; /* Duplicate message. */
}
-@@ -3305,10 +3305,10 @@ static void cm_send_handler(struct ib_mad_agent *mad_agent,
+@@ -3327,10 +3329,10 @@ static void cm_send_handler(struct ib_mad_agent *mad_agent,
if (!msg->context[0] && (attr_index != CM_REJ_COUNTER))
msg->retries = 1;
@@ -45959,7 +48835,7 @@ index d6d2b35..a97866a 100644
&port->counter_group[CM_XMIT_RETRIES].
counter[attr_index]);
-@@ -3534,7 +3534,7 @@ static void cm_recv_handler(struct ib_mad_agent *mad_agent,
+@@ -3557,7 +3559,7 @@ static void cm_recv_handler(struct ib_mad_agent *mad_agent,
}
attr_id = be16_to_cpu(mad_recv_wc->recv_buf.mad->mad_hdr.attr_id);
@@ -45968,7 +48844,7 @@ index d6d2b35..a97866a 100644
counter[attr_id - CM_ATTR_ID_OFFSET]);
work = kmalloc(sizeof *work + sizeof(struct ib_sa_path_rec) * paths,
-@@ -3751,7 +3751,7 @@ static ssize_t cm_show_counter(struct kobject *obj, struct attribute *attr,
+@@ -3764,7 +3766,7 @@ static ssize_t cm_show_counter(struct kobject *obj, struct attribute *attr,
cm_attr = container_of(attr, struct cm_counter_attribute, attr);
return sprintf(buf, "%ld\n",
@@ -45978,7 +48854,7 @@ index d6d2b35..a97866a 100644
static const struct sysfs_ops cm_counter_ops = {
diff --git a/drivers/infiniband/core/fmr_pool.c b/drivers/infiniband/core/fmr_pool.c
-index 9f5ad7c..588cd84 100644
+index 6ac3683..5723799e 100644
--- a/drivers/infiniband/core/fmr_pool.c
+++ b/drivers/infiniband/core/fmr_pool.c
@@ -98,8 +98,8 @@ struct ib_fmr_pool {
@@ -46014,7 +48890,7 @@ index 9f5ad7c..588cd84 100644
!kthread_should_stop())
schedule();
__set_current_state(TASK_RUNNING);
-@@ -282,8 +282,8 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
+@@ -266,8 +266,8 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
pool->dirty_watermark = params->dirty_watermark;
pool->dirty_len = 0;
spin_lock_init(&pool->pool_lock);
@@ -46025,7 +48901,7 @@ index 9f5ad7c..588cd84 100644
init_waitqueue_head(&pool->force_wait);
pool->thread = kthread_run(ib_fmr_cleanup_thread,
-@@ -411,11 +411,11 @@ int ib_flush_fmr_pool(struct ib_fmr_pool *pool)
+@@ -395,11 +395,11 @@ int ib_flush_fmr_pool(struct ib_fmr_pool *pool)
}
spin_unlock_irq(&pool->pool_lock);
@@ -46039,7 +48915,7 @@ index 9f5ad7c..588cd84 100644
return -EINTR;
return 0;
-@@ -525,7 +525,7 @@ int ib_fmr_pool_unmap(struct ib_pool_fmr *fmr)
+@@ -509,7 +509,7 @@ int ib_fmr_pool_unmap(struct ib_pool_fmr *fmr)
} else {
list_add_tail(&fmr->list, &pool->dirty_list);
if (++pool->dirty_len >= pool->dirty_watermark) {
@@ -46066,11 +48942,32 @@ index d47df93..93e4cfd 100644
}
}
}
+diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c
+index 6b4e8a0..271bdc3 100644
+--- a/drivers/infiniband/core/ucm.c
++++ b/drivers/infiniband/core/ucm.c
+@@ -919,14 +919,14 @@ static ssize_t ib_ucm_send_rej(struct ib_ucm_file *file,
+ const char __user *inbuf,
+ int in_len, int out_len)
+ {
+- return ib_ucm_send_info(file, inbuf, in_len, (void *)ib_send_cm_rej);
++ return ib_ucm_send_info(file, inbuf, in_len, ib_send_cm_rej);
+ }
+
+ static ssize_t ib_ucm_send_apr(struct ib_ucm_file *file,
+ const char __user *inbuf,
+ int in_len, int out_len)
+ {
+- return ib_ucm_send_info(file, inbuf, in_len, (void *)ib_send_cm_apr);
++ return ib_ucm_send_info(file, inbuf, in_len, ib_send_cm_apr);
+ }
+
+ 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 1c02dea..5f1efa6 100644
+index 6c6fbff..6eb969d 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
-@@ -961,6 +961,9 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverbs_file *file,
+@@ -949,6 +949,9 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverbs_file *file,
if (copy_from_user(&cmd, buf, sizeof cmd))
return -EFAULT;
@@ -46081,7 +48978,7 @@ index 1c02dea..5f1efa6 100644
(unsigned long) cmd.response + sizeof resp,
in_len - sizeof cmd, out_len - sizeof resp);
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
-index 58fce174..f6de2c2 100644
+index 8024ea4..e671455 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -122,7 +122,7 @@ void c4iw_log_wr_stats(struct t4_wq *wq, struct t4_cqe *cqe)
@@ -46102,7 +48999,7 @@ index 58fce174..f6de2c2 100644
(dev->rdev.wr_log_size - 1);
end = idx - 1;
if (end < 0)
-@@ -860,7 +860,7 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
+@@ -852,7 +852,7 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
sizeof(*rdev->wr_log), GFP_KERNEL);
if (rdev->wr_log) {
rdev->wr_log_size = 1 << c4iw_wr_log_size_order;
@@ -46112,7 +49009,7 @@ index 58fce174..f6de2c2 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 00e55fa..44a2635 100644
+index fb2de75..67d931a 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -180,7 +180,7 @@ struct c4iw_rdev {
@@ -46125,7 +49022,7 @@ index 00e55fa..44a2635 100644
int wr_log_size;
};
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
-index e1629ab..22d07b9 100644
+index 7849890..cfabd18 100644
--- a/drivers/infiniband/hw/cxgb4/mem.c
+++ b/drivers/infiniband/hw/cxgb4/mem.c
@@ -256,7 +256,7 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
@@ -46147,10 +49044,10 @@ index e1629ab..22d07b9 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/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
-index 870e56b..c1985ce 100644
+index d68f506..00ff84a 100644
--- a/drivers/infiniband/hw/mlx4/mad.c
+++ b/drivers/infiniband/hw/mlx4/mad.c
-@@ -98,7 +98,7 @@ __be64 mlx4_ib_gen_node_guid(void)
+@@ -99,7 +99,7 @@ __be64 mlx4_ib_gen_node_guid(void)
__be64 mlx4_ib_get_new_demux_tid(struct mlx4_ib_demux_ctx *ctx)
{
@@ -46173,10 +49070,10 @@ 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 1caa11e..2ebefd7 100644
+index 52ce7b0..8172e21 100644
--- a/drivers/infiniband/hw/mlx4/mlx4_ib.h
+++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h
-@@ -450,7 +450,7 @@ struct mlx4_ib_demux_ctx {
+@@ -457,7 +457,7 @@ struct mlx4_ib_demux_ctx {
struct list_head mcg_mgid0_list;
struct workqueue_struct *mcg_wq;
struct mlx4_ib_demux_pv_ctx **tun;
@@ -46270,7 +49167,7 @@ index ed9a989..6aa5dc2 100644
int list_len, u64 iova, u64 total_size,
u32 access, struct mthca_mr *mr)
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
-index dc2d48c..c1deb7b 100644
+index 9866c35..9c627c9 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -772,7 +772,7 @@ unlock:
@@ -46364,7 +49261,7 @@ index bd9d132..70d84f4 100644
extern u32 int_mod_timer_init;
extern u32 int_mod_cq_depth_256;
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
-index 8a3ad17..e1ed4bc 100644
+index cb9f0f2..a0bd53c 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -69,14 +69,14 @@ u32 cm_packets_dropped;
@@ -46392,7 +49289,7 @@ index 8a3ad17..e1ed4bc 100644
@@ -135,28 +135,28 @@ static void record_ird_ord(struct nes_cm_node *, u16, u16);
/* instance of function pointers for client API */
/* set address of this instance to cm_core->cm_ops at cm_core alloc */
- static struct nes_cm_ops nes_cm_api = {
+ static const struct nes_cm_ops nes_cm_api = {
- mini_cm_accelerated,
- mini_cm_listen,
- mini_cm_del_listen,
@@ -46517,7 +49414,7 @@ index 8a3ad17..e1ed4bc 100644
nes_disconnect(nesqp, 1);
cm_id->provider_data = nesqp;
-@@ -3278,7 +3278,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
+@@ -3277,7 +3277,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n",
nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener);
@@ -46526,7 +49423,7 @@ index 8a3ad17..e1ed4bc 100644
nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n",
netdev_refcnt_read(nesvnic->netdev));
-@@ -3476,7 +3476,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
+@@ -3473,7 +3473,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
struct nes_cm_core *cm_core;
u8 *start_buff;
@@ -46535,7 +49432,7 @@ index 8a3ad17..e1ed4bc 100644
cm_node = (struct nes_cm_node *)cm_id->provider_data;
loopback = cm_node->loopbackpartner;
cm_core = cm_node->cm_core;
-@@ -3541,7 +3541,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
+@@ -3538,7 +3538,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
ntohs(raddr->sin_port), ntohl(laddr->sin_addr.s_addr),
ntohs(laddr->sin_port));
@@ -46544,7 +49441,7 @@ index 8a3ad17..e1ed4bc 100644
nesqp->active_conn = 1;
/* cache the cm_id in the qp */
-@@ -3688,7 +3688,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
+@@ -3685,7 +3685,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
g_cm_core->api->stop_listener(g_cm_core, (void *)cm_node);
return err;
}
@@ -46553,7 +49450,7 @@ index 8a3ad17..e1ed4bc 100644
}
cm_id->add_ref(cm_id);
-@@ -3795,7 +3795,7 @@ static void cm_event_connected(struct nes_cm_event *event)
+@@ -3792,7 +3792,7 @@ static void cm_event_connected(struct nes_cm_event *event)
if (nesqp->destroyed)
return;
@@ -46562,7 +49459,7 @@ index 8a3ad17..e1ed4bc 100644
nes_debug(NES_DBG_CM, "QP%u attempting to connect to 0x%08X:0x%04X on"
" local port 0x%04X. jiffies = %lu.\n",
nesqp->hwqp.qp_id, ntohl(raddr->sin_addr.s_addr),
-@@ -3980,7 +3980,7 @@ static void cm_event_reset(struct nes_cm_event *event)
+@@ -3977,7 +3977,7 @@ static void cm_event_reset(struct nes_cm_event *event)
cm_id->add_ref(cm_id);
ret = cm_id->event_handler(cm_id, &cm_event);
@@ -46571,7 +49468,7 @@ index 8a3ad17..e1ed4bc 100644
cm_event.event = IW_CM_EVENT_CLOSE;
cm_event.status = 0;
cm_event.provider_data = cm_id->provider_data;
-@@ -4020,7 +4020,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event)
+@@ -4017,7 +4017,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event)
return;
cm_id = cm_node->cm_id;
@@ -46580,7 +49477,7 @@ index 8a3ad17..e1ed4bc 100644
nes_debug(NES_DBG_CM, "cm_node = %p - cm_id = %p, jiffies = %lu\n",
cm_node, cm_id, jiffies);
-@@ -4069,7 +4069,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event)
+@@ -4066,7 +4066,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event)
return;
cm_id = cm_node->cm_id;
@@ -46623,9 +49520,18 @@ index 4166452..fc952c3 100644
}
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
-index 6a0bdfa..f587041 100644
+index 6a0bdfa..57f9580 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)
+ /**
+ * nes_netdev_start_xmit
+ */
+-static int nes_netdev_start_xmit(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t nes_netdev_start_xmit(struct sk_buff *skb, struct net_device *netdev)
+ {
+ struct nes_vnic *nesvnic = netdev_priv(netdev);
+ struct nes_device *nesdev = nesvnic->nesdev;
@@ -1274,39 +1274,39 @@ static void nes_netdev_get_ethtool_stats(struct net_device *netdev,
target_stat_values[++index] = mh_detected;
target_stat_values[++index] = mh_pauses_sent;
@@ -46687,7 +49593,7 @@ index 6a0bdfa..f587041 100644
/**
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
-index 137880a..f3248f4 100644
+index 8c4daf7..77a87ab 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -46,9 +46,9 @@
@@ -46703,7 +49609,7 @@ index 137880a..f3248f4 100644
static void nes_unregister_ofa_device(struct nes_ib_device *nesibdev);
static int nes_dereg_mr(struct ib_mr *ib_mr);
-@@ -1114,7 +1114,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);
@@ -46712,7 +49618,7 @@ index 137880a..f3248f4 100644
switch (init_attr->qp_type) {
case IB_QPT_RC:
if (nes_drv_opt & NES_DRV_OPT_NO_INLINE_DATA) {
-@@ -1448,7 +1448,7 @@ static int nes_destroy_qp(struct ib_qp *ibqp)
+@@ -1374,7 +1374,7 @@ static int nes_destroy_qp(struct ib_qp *ibqp)
struct iw_cm_event cm_event;
int ret = 0;
@@ -46733,6 +49639,54 @@ index 7df16f7..7e1b21e 100644
#include "qib_common.h"
#include "qib_verbs.h"
+diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
+index 6c8ff10..73cfbb6 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 = {
+ .string = txselect_list,
+ .maxlen = MAX_ATTEN_LEN
+ };
+-static int setup_txselect(const char *, struct kernel_param *);
++static int setup_txselect(const char *, const struct kernel_param *);
+ module_param_call(txselect, setup_txselect, param_get_string,
+ &kp_txselect, S_IWUSR | S_IRUGO);
+ MODULE_PARM_DESC(txselect,
+@@ -6194,7 +6194,7 @@ static void set_no_qsfp_atten(struct qib_devdata *dd, int change)
+ }
+
+ /* handle the txselect parameter changing */
+-static int setup_txselect(const char *str, struct kernel_param *kp)
++static int setup_txselect(const char *str, const struct kernel_param *kp)
+ {
+ 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
+--- 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)
+ * PCI error infrastructure, registered via pci
+ */
+ static pci_ers_result_t
+-qib_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++qib_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct qib_devdata *dd = pci_get_drvdata(pdev);
+ pci_ers_result_t ret = PCI_ERS_RESULT_RECOVERED;
+diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
+index 25509bb..0c443df 100644
+--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
++++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
+@@ -947,7 +947,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
+ spin_unlock_irqrestore(&priv->lock, flags);
+ }
+
+-static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct ipoib_dev_priv *priv = netdev_priv(dev);
+ struct ipoib_neigh *neigh;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
index cdc7df4..a2fdfdb 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
@@ -46746,6 +49700,40 @@ index cdc7df4..a2fdfdb 100644
.kind = "ipoib",
.maxtype = IFLA_IPOIB_MAX,
.policy = ipoib_policy,
+diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
+index 4328679..5a01e76 100644
+--- 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);
+ MODULE_PARM_DESC(srpt_srq_size,
+ "Shared receive queue (SRQ) size.");
+
+-static int srpt_get_u64_x(char *buffer, struct kernel_param *kp)
++static int srpt_get_u64_x(char *buffer, const struct kernel_param *kp)
+ {
+ return sprintf(buffer, "0x%016llx", *(u64 *)kp->arg);
+ }
+@@ -223,8 +223,9 @@ static void srpt_srq_event(struct ib_event *event, void *ctx)
+ /**
+ * srpt_qp_event() - QP event callback function.
+ */
+-static void srpt_qp_event(struct ib_event *event, struct srpt_rdma_ch *ch)
++static void srpt_qp_event(struct ib_event *event, void *_ch)
+ {
++ struct srpt_rdma_ch *ch = _ch;
+ pr_debug("QP event %d on cm_id=%p sess_name=%s state=%d\n",
+ event->event, ch->cm_id, ch->sess_name, srpt_get_ch_state(ch));
+
+@@ -1908,8 +1909,7 @@ retry:
+ }
+
+ qp_init->qp_context = (void *)ch;
+- qp_init->event_handler
+- = (void(*)(struct ib_event *, void*))srpt_qp_event;
++ qp_init->event_handler = srpt_qp_event;
+ qp_init->send_cq = ch->cq;
+ qp_init->recv_cq = ch->cq;
+ qp_init->srq = sdev->srq;
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index e9ae3d5..96e4940 100644
--- a/drivers/input/evdev.c
@@ -46863,7 +49851,7 @@ index b604564..3f14ae4 100644
return count;
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
-index 8f82897..f5efcd9 100644
+index 1ca7f55..2562607 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -512,7 +512,7 @@ static void serio_release_port(struct device *dev)
@@ -46920,7 +49908,7 @@ index 92e2243..8fd9092 100644
.ident = "Shift",
.matches = {
diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
-index d214f22..b3afa9f 100644
+index b6c4d03..880c40b 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -197,28 +197,34 @@ static int sur40_command(struct sur40_state *dev,
@@ -46975,7 +49963,7 @@ index d214f22..b3afa9f 100644
}
diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
-index b9094e9..a4885c6 100644
+index a1e75cb..88d1c47 100644
--- a/drivers/iommu/Kconfig
+++ b/drivers/iommu/Kconfig
@@ -109,6 +109,7 @@ config AMD_IOMMU_STATS
@@ -46987,10 +49975,10 @@ index b9094e9..a4885c6 100644
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 fc836f5..9802f00 100644
+index 374c129..928e753 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
-@@ -695,11 +695,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
+@@ -739,11 +739,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
static void build_completion_wait(struct iommu_cmd *cmd, u64 address)
{
@@ -47015,10 +50003,10 @@ index fc836f5..9802f00 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 4e5118a..6b1675e 100644
+index 2087534..c3f6b6c 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
-@@ -1539,7 +1539,7 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain)
+@@ -1554,7 +1554,7 @@ static int arm_smmu_domain_finalise(struct iommu_domain *domain)
.iommu_dev = smmu->dev,
};
@@ -47028,7 +50016,7 @@ index 4e5118a..6b1675e 100644
return -ENOMEM;
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
-index 47dc7a7..aa39188 100644
+index 59ee4b8..6632759 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -341,7 +341,7 @@ enum arm_smmu_domain_stage {
@@ -47040,7 +50028,7 @@ index 47dc7a7..aa39188 100644
spinlock_t pgtbl_lock;
struct arm_smmu_cfg cfg;
enum arm_smmu_domain_stage stage;
-@@ -798,7 +798,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -808,7 +808,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
{
int irq, start, ret = 0;
unsigned long ias, oas;
@@ -47049,7 +50037,7 @@ index 47dc7a7..aa39188 100644
struct io_pgtable_cfg pgtbl_cfg;
enum io_pgtable_fmt fmt;
struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
-@@ -884,14 +884,16 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -894,14 +894,16 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
};
smmu_domain->smmu = smmu;
@@ -47069,7 +50057,7 @@ index 47dc7a7..aa39188 100644
/* Initialise the context bank with our page table cfg */
arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
-@@ -912,7 +914,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -922,7 +924,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 */
@@ -47078,17 +50066,16 @@ index 47dc7a7..aa39188 100644
return 0;
out_clear_smmu:
-@@ -945,8 +947,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
+@@ -955,7 +957,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
free_irq(irq, domain);
}
-- if (smmu_domain->pgtbl_ops)
-- free_io_pgtable_ops(smmu_domain->pgtbl_ops);
+- free_io_pgtable_ops(smmu_domain->pgtbl_ops);
+ free_io_pgtable(smmu_domain->pgtbl);
-
__arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
}
-@@ -1172,13 +1173,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
+
+@@ -1180,13 +1182,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);
@@ -47105,7 +50092,7 @@ index 47dc7a7..aa39188 100644
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
return ret;
}
-@@ -1189,13 +1190,13 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
+@@ -1197,13 +1199,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);
@@ -47122,7 +50109,7 @@ index 47dc7a7..aa39188 100644
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
return ret;
}
-@@ -1206,7 +1207,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
+@@ -1214,7 +1216,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;
@@ -47131,7 +50118,7 @@ index 47dc7a7..aa39188 100644
struct device *dev = smmu->dev;
void __iomem *cb_base;
u32 tmp;
-@@ -1227,7 +1228,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
+@@ -1235,7 +1237,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);
@@ -47140,7 +50127,7 @@ index 47dc7a7..aa39188 100644
}
phys = readl_relaxed(cb_base + ARM_SMMU_CB_PAR_LO);
-@@ -1248,9 +1249,9 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
+@@ -1256,9 +1258,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);
@@ -47152,7 +50139,7 @@ index 47dc7a7..aa39188 100644
return 0;
spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
-@@ -1258,7 +1259,7 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
+@@ -1266,7 +1268,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 {
@@ -47161,7 +50148,7 @@ index 47dc7a7..aa39188 100644
}
spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
-@@ -1676,7 +1677,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
+@@ -1685,7 +1687,9 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
size |= SZ_64K | SZ_512M;
}
@@ -47173,23 +50160,20 @@ index 47dc7a7..aa39188 100644
if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
-index dad768c..6783134 100644
+index 381ca5a..f383021 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
-@@ -38,12 +38,6 @@
+@@ -39,9 +39,6 @@
#define io_pgtable_to_data(x) \
container_of((x), struct arm_lpae_io_pgtable, iop)
--#define io_pgtable_ops_to_pgtable(x) \
-- container_of((x), struct io_pgtable, ops)
--
-#define io_pgtable_ops_to_data(x) \
- io_pgtable_to_data(io_pgtable_ops_to_pgtable(x))
-
/*
* For consistency with the architecture, we always consider
* ARM_LPAE_MAX_LEVELS levels, with the walk starting at level n >=0
-@@ -376,10 +370,10 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data,
+@@ -376,10 +373,10 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data,
return pte;
}
@@ -47202,7 +50186,7 @@ index dad768c..6783134 100644
arm_lpae_iopte *ptep = data->pgd;
int ret, lvl = ARM_LPAE_START_LVL(data);
arm_lpae_iopte prot;
-@@ -524,12 +518,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
+@@ -527,12 +524,11 @@ static int __arm_lpae_unmap(struct arm_lpae_io_pgtable *data,
return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep);
}
@@ -47217,7 +50201,7 @@ index dad768c..6783134 100644
arm_lpae_iopte *ptep = data->pgd;
int lvl = ARM_LPAE_START_LVL(data);
-@@ -540,10 +533,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
+@@ -543,10 +539,10 @@ static int arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
return unmapped;
}
@@ -47230,7 +50214,7 @@ index dad768c..6783134 100644
arm_lpae_iopte pte, *ptep = data->pgd;
int lvl = ARM_LPAE_START_LVL(data);
-@@ -610,6 +603,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg)
+@@ -613,6 +609,12 @@ static void arm_lpae_restrict_pgsizes(struct io_pgtable_cfg *cfg)
}
}
@@ -47243,7 +50227,7 @@ index dad768c..6783134 100644
static struct arm_lpae_io_pgtable *
arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
{
-@@ -646,11 +645,7 @@ arm_lpae_alloc_pgtable(struct io_pgtable_cfg *cfg)
+@@ -649,11 +651,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)));
@@ -47256,7 +50240,7 @@ index dad768c..6783134 100644
return data;
}
-@@ -908,9 +903,9 @@ static struct iommu_gather_ops dummy_tlb_ops __initdata = {
+@@ -911,9 +909,9 @@ static struct iommu_gather_ops dummy_tlb_ops __initdata = {
.tlb_sync = dummy_tlb_sync,
};
@@ -47268,7 +50252,7 @@ index dad768c..6783134 100644
struct io_pgtable_cfg *cfg = &data->iop.cfg;
pr_err("cfg: pgsize_bitmap 0x%lx, ias %u-bit\n",
-@@ -920,9 +915,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops)
+@@ -923,9 +921,9 @@ static void __init arm_lpae_dump_ops(struct io_pgtable_ops *ops)
data->bits_per_level, data->pgd);
}
@@ -47280,7 +50264,7 @@ index dad768c..6783134 100644
selftest_running = false; \
-EFAULT; \
})
-@@ -937,30 +932,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -940,30 +938,32 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
int i, j;
unsigned long iova;
size_t size;
@@ -47322,7 +50306,7 @@ index dad768c..6783134 100644
/*
* Distinct mappings of different granule sizes.
-@@ -970,19 +967,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -973,19 +973,19 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
while (j != BITS_PER_LONG) {
size = 1UL << j;
@@ -47348,7 +50332,7 @@ index dad768c..6783134 100644
iova += SZ_1G;
j++;
-@@ -991,15 +988,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -994,15 +994,15 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
/* Partial unmap */
size = 1UL << __ffs(cfg->pgsize_bitmap);
@@ -47370,7 +50354,7 @@ index dad768c..6783134 100644
/* Full unmap */
iova = 0;
-@@ -1007,25 +1004,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
+@@ -1010,25 +1010,25 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
while (j != BITS_PER_LONG) {
size = 1UL << j;
@@ -47444,7 +50428,7 @@ index 6f2e319..c24d09a 100644
io_pgtable_init_table[iop->fmt]->free(iop);
}
diff --git a/drivers/iommu/io-pgtable.h b/drivers/iommu/io-pgtable.h
-index ac9e234..a2f206e 100644
+index 36673c8..9b3fcbe 100644
--- a/drivers/iommu/io-pgtable.h
+++ b/drivers/iommu/io-pgtable.h
@@ -78,17 +78,18 @@ struct io_pgtable_cfg {
@@ -47492,7 +50476,7 @@ index ac9e234..a2f206e 100644
/*
-@@ -128,7 +129,7 @@ struct io_pgtable {
+@@ -128,11 +129,9 @@ struct io_pgtable {
enum io_pgtable_fmt fmt;
void *cookie;
struct io_pgtable_cfg cfg;
@@ -47500,7 +50484,11 @@ index ac9e234..a2f206e 100644
+ const struct io_pgtable_ops *ops;
};
+-#define io_pgtable_ops_to_pgtable(x) container_of((x), struct io_pgtable, ops)
+-
/**
+ * struct io_pgtable_init_fns - Alloc/free a set of page tables for a
+ * particular format.
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 515bb8b..c2bb880 100644
--- a/drivers/iommu/iommu.c
@@ -47515,7 +50503,7 @@ index 515bb8b..c2bb880 100644
.ops = ops,
};
diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
-index dfb868e..7447315a 100644
+index 2fdbac6..7095311 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -41,7 +41,7 @@ struct ipmmu_vmsa_domain {
@@ -47587,18 +50575,18 @@ index 8adaaea..99dab8e 100644
void ir_ack_apic_edge(struct irq_data *data)
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
-index abf2ffa..29cac65 100644
+index 8f9ebf7..e614150 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
-@@ -382,7 +382,7 @@ static void gic_handle_cascade_irq(struct irq_desc *desc)
+@@ -379,7 +379,7 @@ static void gic_handle_cascade_irq(struct irq_desc *desc)
chained_irq_exit(chip, desc);
}
-static struct irq_chip gic_chip = {
+static irq_chip_no_const gic_chip __read_only = {
- .name = "GIC",
.irq_mask = gic_mask_irq,
.irq_unmask = gic_unmask_irq,
+ .irq_eoi = gic_eoi_irq,
diff --git a/drivers/irqchip/irq-i8259.c b/drivers/irqchip/irq-i8259.c
index 6b304eb..6e3a1413 100644
--- a/drivers/irqchip/irq-i8259.c
@@ -47613,10 +50601,10 @@ index 6b304eb..6e3a1413 100644
* Theoretically we do not have to handle this IRQ,
* but in Linux this does not cause problems and is
diff --git a/drivers/irqchip/irq-renesas-intc-irqpin.c b/drivers/irqchip/irq-renesas-intc-irqpin.c
-index c325806..b18ef0f 100644
+index 713177d..3849ddd 100644
--- a/drivers/irqchip/irq-renesas-intc-irqpin.c
+++ b/drivers/irqchip/irq-renesas-intc-irqpin.c
-@@ -384,7 +384,7 @@ static int intc_irqpin_probe(struct platform_device *pdev)
+@@ -396,7 +396,7 @@ static int intc_irqpin_probe(struct platform_device *pdev)
struct intc_irqpin_iomem *i;
struct resource *io[INTC_IRQPIN_REG_NR];
struct resource *irq;
@@ -47625,6 +50613,19 @@ index c325806..b18ef0f 100644
void (*enable_fn)(struct irq_data *d);
void (*disable_fn)(struct irq_data *d);
const char *name = dev_name(dev);
+diff --git a/drivers/irqchip/irq-ts4800.c b/drivers/irqchip/irq-ts4800.c
+index 4192bdc..dabf7a7 100644
+--- a/drivers/irqchip/irq-ts4800.c
++++ b/drivers/irqchip/irq-ts4800.c
+@@ -93,7 +93,7 @@ static int ts4800_ic_probe(struct platform_device *pdev)
+ {
+ struct device_node *node = pdev->dev.of_node;
+ struct ts4800_irq_data *data;
+- struct irq_chip *irq_chip;
++ irq_chip_no_const *irq_chip;
+ struct resource *res;
+ int parent_irq;
+
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c
index 6a2df32..dc962f1 100644
--- a/drivers/isdn/capi/capi.c
@@ -47738,10 +50739,10 @@ index 600c79b..3752bab 100644
mutex_unlock(&cs->mutex);
diff --git a/drivers/isdn/gigaset/ser-gigaset.c b/drivers/isdn/gigaset/ser-gigaset.c
-index 2a506fe..fdbe969 100644
+index d1f8ab9..c0412f2 100644
--- a/drivers/isdn/gigaset/ser-gigaset.c
+++ b/drivers/isdn/gigaset/ser-gigaset.c
-@@ -452,22 +452,22 @@ static int gigaset_set_line_ctrl(struct cardstate *cs, unsigned cflag)
+@@ -445,22 +445,22 @@ static int gigaset_set_line_ctrl(struct cardstate *cs, unsigned cflag)
}
static const struct gigaset_ops ops = {
@@ -47854,6 +50855,1042 @@ index 4d9b195..455075c 100644
return -EFAULT;
} else {
memcpy(buf, dp, left);
+diff --git a/drivers/isdn/hardware/eicon/capifunc.c b/drivers/isdn/hardware/eicon/capifunc.c
+index 7a0bdbd..0a7b7db 100644
+--- a/drivers/isdn/hardware/eicon/capifunc.c
++++ b/drivers/isdn/hardware/eicon/capifunc.c
+@@ -57,7 +57,7 @@ static u16 diva_send_message(struct capi_ctr *,
+ diva_os_message_buffer_s *);
+ extern void diva_os_set_controller_struct(struct capi_ctr *);
+
+-extern void DIVA_DIDD_Read(DESCRIPTOR *, int);
++extern void DIVA_DIDD_Read(void *, int);
+
+ /*
+ * debug
+@@ -1032,7 +1032,6 @@ static void didd_callback(void *context, DESCRIPTOR *adapter, int removal)
+ stop_dbg();
+ } else {
+ memcpy(&MAdapter, adapter, sizeof(MAdapter));
+- dprintf = (DIVA_DI_PRINTF) MAdapter.request;
+ DbgRegister("CAPI20", DRIVERRELEASE_CAPI, DBG_DEFAULT);
+ }
+ } else if ((adapter->type > 0) && (adapter->type < 16)) { /* IDI Adapter */
+@@ -1060,7 +1059,6 @@ static int divacapi_connect_didd(void)
+ for (x = 0; x < MAX_DESCRIPTORS; x++) {
+ if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */
+ memcpy(&MAdapter, &DIDD_Table[x], sizeof(DAdapter));
+- dprintf = (DIVA_DI_PRINTF) MAdapter.request;
+ DbgRegister("CAPI20", DRIVERRELEASE_CAPI, DBG_DEFAULT);
+ break;
+ }
+@@ -1072,7 +1070,7 @@ static int divacapi_connect_didd(void)
+ req.didd_notify.e.Req = 0;
+ req.didd_notify.e.Rc =
+ IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY;
+- req.didd_notify.info.callback = (void *)didd_callback;
++ req.didd_notify.info.callback = didd_callback;
+ req.didd_notify.info.context = NULL;
+ DAdapter.request((ENTITY *)&req);
+ if (req.didd_notify.e.Rc != 0xff) {
+diff --git a/drivers/isdn/hardware/eicon/dadapter.c b/drivers/isdn/hardware/eicon/dadapter.c
+index 5142099..642b7de 100644
+--- a/drivers/isdn/hardware/eicon/dadapter.c
++++ b/drivers/isdn/hardware/eicon/dadapter.c
+@@ -63,10 +63,14 @@ static void no_printf(unsigned char *format, ...)
+ ------------------------------------------------------------------------- */
+ #include "debuglib.c"
+
++static void IDI_CALL_LINK_T no_request(ENTITY IDI_CALL_ENTITY_T *i)
++{
++}
++
+ static DESCRIPTOR MAdapter = {IDI_DIMAINT, /* Adapter Type */
+ 0x00, /* Channels */
+ 0x0000, /* Features */
+- (IDI_CALL)no_printf};
++ no_request};
+ /* --------------------------------------------------------------------------
+ DAdapter. Only IDI clients with buffer, that is huge enough to
+ get all descriptors will receive information about DAdapter
+@@ -100,6 +104,11 @@ void diva_didd_load_time_init(void) {
+ void diva_didd_load_time_finit(void) {
+ diva_os_destroy_spin_lock(&didd_spin, "didd");
+ }
++
++static void diva_didd_no_request(ENTITY *e)
++{
++}
++
+ /* --------------------------------------------------------------------------
+ Called in order to register new adapter in adapter array
+ return adapter handle (> 0) on success
+@@ -111,13 +120,12 @@ static int diva_didd_add_descriptor(DESCRIPTOR *d) {
+ if (d->type == IDI_DIMAINT) {
+ if (d->request) {
+ MAdapter.request = d->request;
+- dprintf = (DIVA_DI_PRINTF)d->request;
+ diva_notify_adapter_change(&MAdapter, 0); /* Inserted */
+ DBG_TRC(("DIMAINT registered, dprintf=%08x", d->request))
+ } else {
+ DBG_TRC(("DIMAINT removed"))
+ diva_notify_adapter_change(&MAdapter, 1); /* About to remove */
+- MAdapter.request = (IDI_CALL)no_printf;
++ MAdapter.request = diva_didd_no_request;
+ dprintf = no_printf;
+ }
+ return (NEW_MAX_DESCRIPTORS);
+@@ -149,7 +157,7 @@ static int diva_didd_remove_descriptor(IDI_CALL request) {
+ DBG_TRC(("DIMAINT removed"))
+ dprintf = no_printf;
+ diva_notify_adapter_change(&MAdapter, 1); /* About to remove */
+- MAdapter.request = (IDI_CALL)no_printf;
++ MAdapter.request = diva_didd_no_request;
+ return (0);
+ }
+ for (i = 0; (Adapters && (i < NEW_MAX_DESCRIPTORS)); i++) {
+@@ -222,7 +230,7 @@ static void IDI_CALL_LINK_T diva_dadapter_request( \
+ case IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY: {
+ diva_didd_adapter_notify_t *pinfo = &syncReq->didd_notify.info;
+ pinfo->handle = diva_register_adapter_callback( \
+- (didd_adapter_change_callback_t)pinfo->callback,
++ pinfo->callback,
+ (void IDI_CALL_ENTITY_T *)pinfo->context);
+ e->Rc = 0xff;
+ } break;
+diff --git a/drivers/isdn/hardware/eicon/diddfunc.c b/drivers/isdn/hardware/eicon/diddfunc.c
+index b0b23ed..e3d4e18 100644
+--- a/drivers/isdn/hardware/eicon/diddfunc.c
++++ b/drivers/isdn/hardware/eicon/diddfunc.c
+@@ -28,12 +28,12 @@ static DESCRIPTOR _DAdapter;
+ /*
+ * didd callback function
+ */
+-static void *didd_callback(void *context, DESCRIPTOR *adapter,
++static void didd_callback(void *context, DESCRIPTOR *adapter,
+ int removal)
+ {
+ if (adapter->type == IDI_DADAPTER) {
+ DBG_ERR(("Notification about IDI_DADAPTER change ! Oops."))
+- return (NULL);
++ return;
+ } else if (adapter->type == IDI_DIMAINT) {
+ if (removal) {
+ DbgDeregister();
+@@ -41,7 +41,6 @@ static void *didd_callback(void *context, DESCRIPTOR *adapter,
+ DbgRegister("DIDD", DRIVERRELEASE_DIDD, DBG_DEFAULT);
+ }
+ }
+- return (NULL);
+ }
+
+ /*
+@@ -63,7 +62,7 @@ static int __init connect_didd(void)
+ req.didd_notify.e.Req = 0;
+ req.didd_notify.e.Rc =
+ IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY;
+- req.didd_notify.info.callback = (void *)didd_callback;
++ req.didd_notify.info.callback = didd_callback;
+ req.didd_notify.info.context = NULL;
+ _DAdapter.request((ENTITY *)&req);
+ if (req.didd_notify.e.Rc != 0xff)
+diff --git a/drivers/isdn/hardware/eicon/divasfunc.c b/drivers/isdn/hardware/eicon/divasfunc.c
+index 4be5f88..1dbd479 100644
+--- a/drivers/isdn/hardware/eicon/divasfunc.c
++++ b/drivers/isdn/hardware/eicon/divasfunc.c
+@@ -130,12 +130,12 @@ static void stop_dbg(void)
+ /*
+ * didd callback function
+ */
+-static void *didd_callback(void *context, DESCRIPTOR *adapter,
++static void didd_callback(void *context, DESCRIPTOR *adapter,
+ int removal)
+ {
+ if (adapter->type == IDI_DADAPTER) {
+ DBG_ERR(("Notification about IDI_DADAPTER change ! Oops."));
+- return (NULL);
++ return;
+ }
+
+ if (adapter->type == IDI_DIMAINT) {
+@@ -143,11 +143,9 @@ static void *didd_callback(void *context, DESCRIPTOR *adapter,
+ stop_dbg();
+ } else {
+ memcpy(&MAdapter, adapter, sizeof(MAdapter));
+- dprintf = (DIVA_DI_PRINTF) MAdapter.request;
+ start_dbg();
+ }
+ }
+- return (NULL);
+ }
+
+ /*
+@@ -169,7 +167,7 @@ static int __init connect_didd(void)
+ req.didd_notify.e.Req = 0;
+ req.didd_notify.e.Rc =
+ IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY;
+- req.didd_notify.info.callback = (void *)didd_callback;
++ req.didd_notify.info.callback = didd_callback;
+ req.didd_notify.info.context = NULL;
+ DAdapter.request((ENTITY *)&req);
+ if (req.didd_notify.e.Rc != 0xff) {
+@@ -179,7 +177,6 @@ static int __init connect_didd(void)
+ notify_handle = req.didd_notify.info.handle;
+ } else if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */
+ memcpy(&MAdapter, &DIDD_Table[x], sizeof(DAdapter));
+- dprintf = (DIVA_DI_PRINTF) MAdapter.request;
+ start_dbg();
+ }
+ }
+diff --git a/drivers/isdn/hardware/eicon/divasync.h b/drivers/isdn/hardware/eicon/divasync.h
+index dd6b53a..42661f6 100644
+--- a/drivers/isdn/hardware/eicon/divasync.h
++++ b/drivers/isdn/hardware/eicon/divasync.h
+@@ -138,7 +138,7 @@ typedef struct _diva_xdi_dma_descriptor_operation {
+ #define IDI_SYNC_REQ_DIDD_GET_CFG_LIB_IFC 0x10
+ typedef struct _diva_didd_adapter_notify {
+ dword handle; /* Notification handle */
+- void *callback;
++ didd_adapter_change_callback_t callback;
+ void *context;
+ } diva_didd_adapter_notify_t;
+ typedef struct _diva_didd_add_adapter {
+diff --git a/drivers/isdn/hardware/eicon/idifunc.c b/drivers/isdn/hardware/eicon/idifunc.c
+index fef6586..22353ff 100644
+--- a/drivers/isdn/hardware/eicon/idifunc.c
++++ b/drivers/isdn/hardware/eicon/idifunc.c
+@@ -154,18 +154,17 @@ rescan:
+ /*
+ * DIDD notify callback
+ */
+-static void *didd_callback(void *context, DESCRIPTOR *adapter,
++static void didd_callback(void *context, DESCRIPTOR *adapter,
+ int removal)
+ {
+ if (adapter->type == IDI_DADAPTER) {
+ DBG_ERR(("Notification about IDI_DADAPTER change ! Oops."));
+- return (NULL);
++ return;
+ } else if (adapter->type == IDI_DIMAINT) {
+ if (removal) {
+ stop_dbg();
+ } else {
+ memcpy(&MAdapter, adapter, sizeof(MAdapter));
+- dprintf = (DIVA_DI_PRINTF) MAdapter.request;
+ DbgRegister("User IDI", DRIVERRELEASE_IDI, DBG_DEFAULT);
+ }
+ } else if ((adapter->type > 0) && (adapter->type < 16)) { /* IDI Adapter */
+@@ -175,7 +174,6 @@ static void *didd_callback(void *context, DESCRIPTOR *adapter,
+ um_new_card(adapter);
+ }
+ }
+- return (NULL);
+ }
+
+ /*
+@@ -197,7 +195,7 @@ static int __init connect_didd(void)
+ req.didd_notify.e.Req = 0;
+ req.didd_notify.e.Rc =
+ IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY;
+- req.didd_notify.info.callback = (void *)didd_callback;
++ req.didd_notify.info.callback = didd_callback;
+ req.didd_notify.info.context = NULL;
+ DAdapter.request((ENTITY *)&req);
+ if (req.didd_notify.e.Rc != 0xff) {
+@@ -207,7 +205,6 @@ static int __init connect_didd(void)
+ notify_handle = req.didd_notify.info.handle;
+ } else if (DIDD_Table[x].type == IDI_DIMAINT) { /* MAINT found */
+ memcpy(&MAdapter, &DIDD_Table[x], sizeof(DAdapter));
+- dprintf = (DIVA_DI_PRINTF) MAdapter.request;
+ DbgRegister("User IDI", DRIVERRELEASE_IDI, DBG_DEFAULT);
+ } else if ((DIDD_Table[x].type > 0)
+ && (DIDD_Table[x].type < 16)) { /* IDI Adapter found */
+diff --git a/drivers/isdn/hardware/eicon/mntfunc.c b/drivers/isdn/hardware/eicon/mntfunc.c
+index 1cd9aff..1a3e2b6 100644
+--- a/drivers/isdn/hardware/eicon/mntfunc.c
++++ b/drivers/isdn/hardware/eicon/mntfunc.c
+@@ -26,8 +26,13 @@ extern void DIVA_DIDD_Read(void *, int);
+ static dword notify_handle;
+ static DESCRIPTOR DAdapter;
+ static DESCRIPTOR MAdapter;
++
++static void didd_nothing(ENTITY IDI_CALL_ENTITY_T *e)
++{
++ diva_maint_prtComp(e);
++}
+ static DESCRIPTOR MaintDescriptor =
+-{ IDI_DIMAINT, 0, 0, (IDI_CALL) diva_maint_prtComp };
++{ IDI_DIMAINT, 0, 0, didd_nothing };
+
+ extern int diva_os_copy_to_user(void *os_handle, void __user *dst,
+ const void *src, int length);
+@@ -44,7 +49,7 @@ static void no_printf(unsigned char *x, ...)
+ /*
+ * DIDD callback function
+ */
+-static void *didd_callback(void *context, DESCRIPTOR *adapter,
++static void didd_callback(void *context, DESCRIPTOR *adapter,
+ int removal)
+ {
+ if (adapter->type == IDI_DADAPTER) {
+@@ -56,7 +61,6 @@ static void *didd_callback(void *context, DESCRIPTOR *adapter,
+ dprintf = no_printf;
+ } else {
+ memcpy(&MAdapter, adapter, sizeof(MAdapter));
+- dprintf = (DIVA_DI_PRINTF) MAdapter.request;
+ DbgRegister("MAINT", DRIVERRELEASE_MNT, DBG_DEFAULT);
+ }
+ } else if ((adapter->type > 0) && (adapter->type < 16)) {
+@@ -66,7 +70,6 @@ static void *didd_callback(void *context, DESCRIPTOR *adapter,
+ diva_mnt_add_xdi_adapter(adapter);
+ }
+ }
+- return (NULL);
+ }
+
+ /*
+@@ -88,7 +91,7 @@ static int __init connect_didd(void)
+ req.didd_notify.e.Req = 0;
+ req.didd_notify.e.Rc =
+ IDI_SYNC_REQ_DIDD_REGISTER_ADAPTER_NOTIFY;
+- req.didd_notify.info.callback = (void *)didd_callback;
++ req.didd_notify.info.callback = didd_callback;
+ req.didd_notify.info.context = NULL;
+ DAdapter.request((ENTITY *)&req);
+ if (req.didd_notify.e.Rc != 0xff)
+diff --git a/drivers/isdn/hardware/mISDN/avmfritz.c b/drivers/isdn/hardware/mISDN/avmfritz.c
+index 292991c..f36f4cb 100644
+--- a/drivers/isdn/hardware/mISDN/avmfritz.c
++++ b/drivers/isdn/hardware/mISDN/avmfritz.c
+@@ -156,7 +156,7 @@ _set_debug(struct fritzcard *card)
+ }
+
+ static int
+-set_debug(const char *val, struct kernel_param *kp)
++set_debug(const char *val, const struct kernel_param *kp)
+ {
+ int ret;
+ struct fritzcard *card;
+diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c
+index 28543d7..bd8cf91 100644
+--- a/drivers/isdn/hardware/mISDN/hfcmulti.c
++++ b/drivers/isdn/hardware/mISDN/hfcmulti.c
+@@ -2856,8 +2856,9 @@ irq_notforus:
+ */
+
+ static void
+-hfcmulti_dbusy_timer(struct hfc_multi *hc)
++hfcmulti_dbusy_timer(unsigned long _hc)
+ {
++ //struct hfc_multi *hc = (struct hfc_multi *)_hc;
+ }
+
+
+@@ -3878,7 +3879,7 @@ hfcmulti_initmode(struct dchannel *dch)
+ if (hc->dnum[pt]) {
+ mode_hfcmulti(hc, dch->slot, dch->dev.D.protocol,
+ -1, 0, -1, 0);
+- dch->timer.function = (void *) hfcmulti_dbusy_timer;
++ dch->timer.function = hfcmulti_dbusy_timer;
+ dch->timer.data = (long) dch;
+ init_timer(&dch->timer);
+ }
+@@ -3986,7 +3987,7 @@ hfcmulti_initmode(struct dchannel *dch)
+ hc->chan[i].slot_rx = -1;
+ hc->chan[i].conf = -1;
+ mode_hfcmulti(hc, i, dch->dev.D.protocol, -1, 0, -1, 0);
+- dch->timer.function = (void *) hfcmulti_dbusy_timer;
++ dch->timer.function = hfcmulti_dbusy_timer;
+ dch->timer.data = (long) dch;
+ init_timer(&dch->timer);
+ hc->chan[i - 2].slot_tx = -1;
+diff --git a/drivers/isdn/hardware/mISDN/hfcpci.c b/drivers/isdn/hardware/mISDN/hfcpci.c
+index ff48da6..497fb7b 100644
+--- a/drivers/isdn/hardware/mISDN/hfcpci.c
++++ b/drivers/isdn/hardware/mISDN/hfcpci.c
+@@ -301,8 +301,9 @@ reset_hfcpci(struct hfc_pci *hc)
+ * Timer function called when kernel timer expires
+ */
+ static void
+-hfcpci_Timer(struct hfc_pci *hc)
++hfcpci_Timer(unsigned long _hc)
+ {
++ struct hfc_pci *hc = (struct hfc_pci *)_hc;
+ hc->hw.timer.expires = jiffies + 75;
+ /* WD RESET */
+ /*
+@@ -1241,8 +1242,9 @@ hfcpci_int(int intno, void *dev_id)
+ * timer callback for D-chan busy resolution. Currently no function
+ */
+ static void
+-hfcpci_dbusy_timer(struct hfc_pci *hc)
++hfcpci_dbusy_timer(unsigned long _hc)
+ {
++// struct hfc_pci *hc = (struct hfc_pci *)_hc;
+ }
+
+ /*
+@@ -1717,7 +1719,7 @@ static void
+ inithfcpci(struct hfc_pci *hc)
+ {
+ printk(KERN_DEBUG "inithfcpci: entered\n");
+- hc->dch.timer.function = (void *) hfcpci_dbusy_timer;
++ hc->dch.timer.function = hfcpci_dbusy_timer;
+ hc->dch.timer.data = (long) &hc->dch;
+ init_timer(&hc->dch.timer);
+ hc->chanlimit = 2;
+@@ -2044,7 +2046,7 @@ setup_hw(struct hfc_pci *hc)
+ Write_hfc(hc, HFCPCI_INT_M1, hc->hw.int_m1);
+ /* At this point the needed PCI config is done */
+ /* fifos are still not enabled */
+- hc->hw.timer.function = (void *) hfcpci_Timer;
++ hc->hw.timer.function = hfcpci_Timer;
+ hc->hw.timer.data = (long) hc;
+ init_timer(&hc->hw.timer);
+ /* default PCM master */
+@@ -2293,9 +2295,9 @@ _hfcpci_softirq(struct device *dev, void *arg)
+ }
+
+ static void
+-hfcpci_softirq(void *arg)
++hfcpci_softirq(unsigned long arg)
+ {
+- WARN_ON_ONCE(driver_for_each_device(&hfc_driver.driver, NULL, arg,
++ WARN_ON_ONCE(driver_for_each_device(&hfc_driver.driver, NULL, (void *)arg,
+ _hfcpci_softirq) != 0);
+
+ /* if next event would be in the past ... */
+@@ -2330,7 +2332,7 @@ HFC_init(void)
+ if (poll != HFCPCI_BTRANS_THRESHOLD) {
+ printk(KERN_INFO "%s: Using alternative poll value of %d\n",
+ __func__, poll);
+- hfc_tl.function = (void *)hfcpci_softirq;
++ hfc_tl.function = hfcpci_softirq;
+ hfc_tl.data = 0;
+ init_timer(&hfc_tl);
+ hfc_tl.expires = jiffies + tics;
+diff --git a/drivers/isdn/hardware/mISDN/mISDNinfineon.c b/drivers/isdn/hardware/mISDN/mISDNinfineon.c
+index d5bdbaf..a7cdc61 100644
+--- a/drivers/isdn/hardware/mISDN/mISDNinfineon.c
++++ b/drivers/isdn/hardware/mISDN/mISDNinfineon.c
+@@ -244,7 +244,7 @@ _set_debug(struct inf_hw *card)
+ }
+
+ static int
+-set_debug(const char *val, struct kernel_param *kp)
++set_debug(const char *val, const struct kernel_param *kp)
+ {
+ int ret;
+ struct inf_hw *card;
+@@ -586,9 +586,10 @@ reset_inf(struct inf_hw *hw)
+ }
+
+ static int
+-inf_ctrl(struct inf_hw *hw, u32 cmd, u_long arg)
++inf_ctrl(struct ipac_hw *_hw, u32 cmd, u_long arg)
+ {
+ int ret = 0;
++ struct inf_hw *hw = container_of(_hw, struct inf_hw, ipac);
+
+ switch (cmd) {
+ case HW_RESET_REQ:
+@@ -915,7 +916,7 @@ setup_instance(struct inf_hw *card)
+ spin_lock_init(&card->lock);
+ card->ipac.isac.hwlock = &card->lock;
+ card->ipac.hwlock = &card->lock;
+- card->ipac.ctrl = (void *)&inf_ctrl;
++ card->ipac.ctrl = &inf_ctrl;
+
+ err = setup_io(card);
+ if (err)
+diff --git a/drivers/isdn/hardware/mISDN/mISDNipac.c b/drivers/isdn/hardware/mISDN/mISDNipac.c
+index cb428b9..cb3d37c 100644
+--- a/drivers/isdn/hardware/mISDN/mISDNipac.c
++++ b/drivers/isdn/hardware/mISDN/mISDNipac.c
+@@ -725,8 +725,9 @@ isac_release(struct isac_hw *isac)
+ }
+
+ static void
+-dbusy_timer_handler(struct isac_hw *isac)
++dbusy_timer_handler(unsigned long _isac)
+ {
++ struct isac_hw *isac = (struct isac_hw *)_isac;
+ int rbch, star;
+ u_long flags;
+
+@@ -794,7 +795,7 @@ isac_init(struct isac_hw *isac)
+ }
+ isac->mon_tx = NULL;
+ isac->mon_rx = NULL;
+- isac->dch.timer.function = (void *) dbusy_timer_handler;
++ isac->dch.timer.function = dbusy_timer_handler;
+ isac->dch.timer.data = (long)isac;
+ init_timer(&isac->dch.timer);
+ isac->mocr = 0xaa;
+diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c
+index afde4ed..e9fcae4 100644
+--- a/drivers/isdn/hardware/mISDN/netjet.c
++++ b/drivers/isdn/hardware/mISDN/netjet.c
+@@ -111,7 +111,7 @@ _set_debug(struct tiger_hw *card)
+ }
+
+ static int
+-set_debug(const char *val, struct kernel_param *kp)
++set_debug(const char *val, const struct kernel_param *kp)
+ {
+ int ret;
+ struct tiger_hw *card;
+diff --git a/drivers/isdn/hardware/mISDN/speedfax.c b/drivers/isdn/hardware/mISDN/speedfax.c
+index 9815bb4..3d6181e 100644
+--- a/drivers/isdn/hardware/mISDN/speedfax.c
++++ b/drivers/isdn/hardware/mISDN/speedfax.c
+@@ -94,7 +94,7 @@ _set_debug(struct sfax_hw *card)
+ }
+
+ static int
+-set_debug(const char *val, struct kernel_param *kp)
++set_debug(const char *val, const struct kernel_param *kp)
+ {
+ int ret;
+ struct sfax_hw *card;
+@@ -186,9 +186,10 @@ reset_speedfax(struct sfax_hw *sf)
+ }
+
+ static int
+-sfax_ctrl(struct sfax_hw *sf, u32 cmd, u_long arg)
++sfax_ctrl(void *_sf, u32 cmd, u_long arg)
+ {
+ int ret = 0;
++ struct sfax_hw *sf = (struct sfax_hw *)_sf;
+
+ switch (cmd) {
+ case HW_RESET_REQ:
+@@ -386,7 +387,7 @@ setup_instance(struct sfax_hw *card)
+ spin_lock_init(&card->lock);
+ card->isac.hwlock = &card->lock;
+ card->isar.hwlock = &card->lock;
+- card->isar.ctrl = (void *)&sfax_ctrl;
++ card->isar.ctrl = &sfax_ctrl;
+ card->isac.name = card->name;
+ card->isar.name = card->name;
+ card->isar.owner = THIS_MODULE;
+diff --git a/drivers/isdn/hardware/mISDN/w6692.c b/drivers/isdn/hardware/mISDN/w6692.c
+index 7416755..2914e7c 100644
+--- a/drivers/isdn/hardware/mISDN/w6692.c
++++ b/drivers/isdn/hardware/mISDN/w6692.c
+@@ -101,7 +101,7 @@ _set_debug(struct w6692_hw *card)
+ }
+
+ static int
+-set_debug(const char *val, struct kernel_param *kp)
++set_debug(const char *val, const struct kernel_param *kp)
+ {
+ int ret;
+ struct w6692_hw *card;
+@@ -819,8 +819,9 @@ w6692_irq(int intno, void *dev_id)
+ }
+
+ static void
+-dbusy_timer_handler(struct dchannel *dch)
++dbusy_timer_handler(unsigned long _dch)
+ {
++ struct dchannel *dch = (struct dchannel *)_dch;
+ struct w6692_hw *card = dch->hw;
+ int rbch, star;
+ u_long flags;
+@@ -852,7 +853,7 @@ void initW6692(struct w6692_hw *card)
+ {
+ u8 val;
+
+- card->dch.timer.function = (void *)dbusy_timer_handler;
++ card->dch.timer.function = dbusy_timer_handler;
+ card->dch.timer.data = (u_long)&card->dch;
+ init_timer(&card->dch.timer);
+ w6692_mode(&card->bc[0], ISDN_P_NONE);
+diff --git a/drivers/isdn/hisax/amd7930_fn.c b/drivers/isdn/hisax/amd7930_fn.c
+index 36817e0..b02bb98 100644
+--- a/drivers/isdn/hisax/amd7930_fn.c
++++ b/drivers/isdn/hisax/amd7930_fn.c
+@@ -685,8 +685,9 @@ DC_Close_Amd7930(struct IsdnCardState *cs) {
+
+
+ static void
+-dbusy_timer_handler(struct IsdnCardState *cs)
++dbusy_timer_handler(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ u_long flags;
+ struct PStack *stptr;
+ WORD dtcr, der;
+@@ -789,7 +790,7 @@ void Amd7930_init(struct IsdnCardState *cs)
+ void setup_Amd7930(struct IsdnCardState *cs)
+ {
+ INIT_WORK(&cs->tqueue, Amd7930_bh);
+- cs->dbusytimer.function = (void *) dbusy_timer_handler;
++ cs->dbusytimer.function = dbusy_timer_handler;
+ cs->dbusytimer.data = (long) cs;
+ init_timer(&cs->dbusytimer);
+ }
+diff --git a/drivers/isdn/hisax/arcofi.c b/drivers/isdn/hisax/arcofi.c
+index 29ec2df..9c7123c 100644
+--- a/drivers/isdn/hisax/arcofi.c
++++ b/drivers/isdn/hisax/arcofi.c
+@@ -112,7 +112,8 @@ arcofi_fsm(struct IsdnCardState *cs, int event, void *data) {
+ }
+
+ static void
+-arcofi_timer(struct IsdnCardState *cs) {
++arcofi_timer(unsigned long _cs) {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ arcofi_fsm(cs, ARCOFI_TIMEOUT, NULL);
+ }
+
+@@ -125,7 +126,7 @@ clear_arcofi(struct IsdnCardState *cs) {
+
+ void
+ init_arcofi(struct IsdnCardState *cs) {
+- cs->dc.isac.arcofitimer.function = (void *) arcofi_timer;
++ cs->dc.isac.arcofitimer.function = arcofi_timer;
+ cs->dc.isac.arcofitimer.data = (long) cs;
+ init_timer(&cs->dc.isac.arcofitimer);
+ init_waitqueue_head(&cs->dc.isac.arcofi_wait);
+diff --git a/drivers/isdn/hisax/diva.c b/drivers/isdn/hisax/diva.c
+index 4fc90de..fda68cd 100644
+--- a/drivers/isdn/hisax/diva.c
++++ b/drivers/isdn/hisax/diva.c
+@@ -796,8 +796,9 @@ reset_diva(struct IsdnCardState *cs)
+ #define DIVA_ASSIGN 1
+
+ static void
+-diva_led_handler(struct IsdnCardState *cs)
++diva_led_handler(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ int blink = 0;
+
+ if ((cs->subtyp == DIVA_IPAC_ISA) ||
+@@ -898,7 +899,7 @@ Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg)
+ (cs->subtyp != DIVA_IPAC_PCI) &&
+ (cs->subtyp != DIVA_IPACX_PCI)) {
+ spin_lock_irqsave(&cs->lock, flags);
+- diva_led_handler(cs);
++ diva_led_handler((unsigned long)cs);
+ spin_unlock_irqrestore(&cs->lock, flags);
+ }
+ return (0);
+@@ -976,7 +977,7 @@ static int setup_diva_common(struct IsdnCardState *cs)
+ printk(KERN_INFO "Diva: IPACX Design Id: %x\n",
+ MemReadISAC_IPACX(cs, IPACX_ID) & 0x3F);
+ } else { /* DIVA 2.0 */
+- cs->hw.diva.tl.function = (void *) diva_led_handler;
++ cs->hw.diva.tl.function = diva_led_handler;
+ cs->hw.diva.tl.data = (long) cs;
+ init_timer(&cs->hw.diva.tl);
+ cs->readisac = &ReadISAC;
+diff --git a/drivers/isdn/hisax/elsa.c b/drivers/isdn/hisax/elsa.c
+index d8ef64d..9c50267 100644
+--- a/drivers/isdn/hisax/elsa.c
++++ b/drivers/isdn/hisax/elsa.c
+@@ -606,8 +606,9 @@ check_arcofi(struct IsdnCardState *cs)
+ #endif /* ARCOFI_USE */
+
+ static void
+-elsa_led_handler(struct IsdnCardState *cs)
++elsa_led_handler(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ int blink = 0;
+
+ if (cs->subtyp == ELSA_PCMCIA || cs->subtyp == ELSA_PCMCIA_IPAC)
+@@ -715,7 +716,7 @@ Elsa_card_msg(struct IsdnCardState *cs, int mt, void *arg)
+ init_modem(cs);
+ }
+ #endif
+- elsa_led_handler(cs);
++ elsa_led_handler((unsigned long)cs);
+ return (ret);
+ case (MDL_REMOVE | REQUEST):
+ cs->hw.elsa.status &= 0;
+@@ -767,7 +768,7 @@ Elsa_card_msg(struct IsdnCardState *cs, int mt, void *arg)
+ else
+ cs->hw.elsa.status &= ~ELSA_BAD_PWR;
+ }
+- elsa_led_handler(cs);
++ elsa_led_handler((unsigned long)cs);
+ return (ret);
+ }
+
+@@ -1147,7 +1148,7 @@ static int setup_elsa_common(struct IsdnCard *card)
+ init_arcofi(cs);
+ #endif
+ setup_isac(cs);
+- cs->hw.elsa.tl.function = (void *) elsa_led_handler;
++ cs->hw.elsa.tl.function = elsa_led_handler;
+ cs->hw.elsa.tl.data = (long) cs;
+ init_timer(&cs->hw.elsa.tl);
+ /* Teste Timer */
+diff --git a/drivers/isdn/hisax/fsm.c b/drivers/isdn/hisax/fsm.c
+index c7a9471..5409bd3 100644
+--- a/drivers/isdn/hisax/fsm.c
++++ b/drivers/isdn/hisax/fsm.c
+@@ -85,8 +85,9 @@ FsmChangeState(struct FsmInst *fi, int newstate)
+ }
+
+ static void
+-FsmExpireTimer(struct FsmTimer *ft)
++FsmExpireTimer(unsigned long _ft)
+ {
++ struct FsmTimer *ft = (struct FsmTimer *)_ft;
+ #if FSM_TIMER_DEBUG
+ if (ft->fi->debug)
+ ft->fi->printdebug(ft->fi, "FsmExpireTimer %lx", (long) ft);
+@@ -98,7 +99,7 @@ void
+ FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft)
+ {
+ ft->fi = fi;
+- ft->tl.function = (void *) FsmExpireTimer;
++ ft->tl.function = FsmExpireTimer;
+ ft->tl.data = (long) ft;
+ #if FSM_TIMER_DEBUG
+ if (ft->fi->debug)
+diff --git a/drivers/isdn/hisax/hfc4s8s_l1.c b/drivers/isdn/hisax/hfc4s8s_l1.c
+index 9600cd7..86ca5a3 100644
+--- a/drivers/isdn/hisax/hfc4s8s_l1.c
++++ b/drivers/isdn/hisax/hfc4s8s_l1.c
+@@ -299,8 +299,9 @@ Read_hfc16_stable(hfc4s8s_hw *hw, int reg)
+ /* D-channel call from HiSax */
+ /*****************************/
+ static void
+-dch_l2l1(struct hisax_d_if *iface, int pr, void *arg)
++dch_l2l1(struct hisax_if *_iface, int pr, void *arg)
+ {
++ struct hisax_d_if *iface = container_of(_iface, struct hisax_d_if, ifc);
+ struct hfc4s8s_l1 *l1 = iface->ifc.priv;
+ struct sk_buff *skb = (struct sk_buff *) arg;
+ u_long flags;
+@@ -591,8 +592,9 @@ bch_l2l1(struct hisax_if *ifc, int pr, void *arg)
+ /* layer 1 timer function */
+ /**************************/
+ static void
+-hfc_l1_timer(struct hfc4s8s_l1 *l1)
++hfc_l1_timer(unsigned long _l1)
+ {
++ struct hfc4s8s_l1 *l1 = (struct hfc4s8s_l1 *)_l1;
+ u_long flags;
+
+ if (!l1->enabled)
+@@ -1396,16 +1398,16 @@ setup_instance(hfc4s8s_hw *hw)
+ l1p = hw->l1 + i;
+ spin_lock_init(&l1p->lock);
+ l1p->hw = hw;
+- l1p->l1_timer.function = (void *) hfc_l1_timer;
++ l1p->l1_timer.function = hfc_l1_timer;
+ l1p->l1_timer.data = (long) (l1p);
+ init_timer(&l1p->l1_timer);
+ l1p->st_num = i;
+ skb_queue_head_init(&l1p->d_tx_queue);
+ l1p->d_if.ifc.priv = hw->l1 + i;
+- l1p->d_if.ifc.l2l1 = (void *) dch_l2l1;
++ l1p->d_if.ifc.l2l1 = dch_l2l1;
+
+ spin_lock_init(&l1p->b_ch[0].lock);
+- l1p->b_ch[0].b_if.ifc.l2l1 = (void *) bch_l2l1;
++ l1p->b_ch[0].b_if.ifc.l2l1 = bch_l2l1;
+ l1p->b_ch[0].b_if.ifc.priv = (void *) &l1p->b_ch[0];
+ l1p->b_ch[0].l1p = hw->l1 + i;
+ l1p->b_ch[0].bchan = 1;
+@@ -1413,7 +1415,7 @@ setup_instance(hfc4s8s_hw *hw)
+ skb_queue_head_init(&l1p->b_ch[0].tx_queue);
+
+ spin_lock_init(&l1p->b_ch[1].lock);
+- l1p->b_ch[1].b_if.ifc.l2l1 = (void *) bch_l2l1;
++ l1p->b_ch[1].b_if.ifc.l2l1 = bch_l2l1;
+ l1p->b_ch[1].b_if.ifc.priv = (void *) &l1p->b_ch[1];
+ l1p->b_ch[1].l1p = hw->l1 + i;
+ l1p->b_ch[1].bchan = 2;
+diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c
+index 90449e1..9a5394c 100644
+--- a/drivers/isdn/hisax/hfc_pci.c
++++ b/drivers/isdn/hisax/hfc_pci.c
+@@ -165,8 +165,9 @@ reset_hfcpci(struct IsdnCardState *cs)
+ /* Timer function called when kernel timer expires */
+ /***************************************************/
+ static void
+-hfcpci_Timer(struct IsdnCardState *cs)
++hfcpci_Timer(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ cs->hw.hfcpci.timer.expires = jiffies + 75;
+ /* WD RESET */
+ /* WriteReg(cs, HFCD_DATA, HFCD_CTMT, cs->hw.hfcpci.ctmt | 0x80);
+@@ -1095,8 +1096,9 @@ hfcpci_interrupt(int intno, void *dev_id)
+ /* timer callback for D-chan busy resolution. Currently no function */
+ /********************************************************************/
+ static void
+-hfcpci_dbusy_timer(struct IsdnCardState *cs)
++hfcpci_dbusy_timer(unsigned long _cs)
+ {
++ //struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ }
+
+ /*************************************/
+@@ -1582,7 +1584,7 @@ inithfcpci(struct IsdnCardState *cs)
+ cs->bcs[1].BC_SetStack = setstack_2b;
+ cs->bcs[0].BC_Close = close_hfcpci;
+ cs->bcs[1].BC_Close = close_hfcpci;
+- cs->dbusytimer.function = (void *) hfcpci_dbusy_timer;
++ cs->dbusytimer.function = hfcpci_dbusy_timer;
+ cs->dbusytimer.data = (long) cs;
+ init_timer(&cs->dbusytimer);
+ mode_hfcpci(cs->bcs, 0, 0);
+@@ -1746,7 +1748,7 @@ setup_hfcpci(struct IsdnCard *card)
+ cs->BC_Write_Reg = NULL;
+ cs->irq_func = &hfcpci_interrupt;
+ cs->irq_flags |= IRQF_SHARED;
+- cs->hw.hfcpci.timer.function = (void *) hfcpci_Timer;
++ cs->hw.hfcpci.timer.function = hfcpci_Timer;
+ cs->hw.hfcpci.timer.data = (long) cs;
+ init_timer(&cs->hw.hfcpci.timer);
+ cs->cardmsg = &hfcpci_card_msg;
+diff --git a/drivers/isdn/hisax/hfc_sx.c b/drivers/isdn/hisax/hfc_sx.c
+index 13b2151..d3e0732 100644
+--- a/drivers/isdn/hisax/hfc_sx.c
++++ b/drivers/isdn/hisax/hfc_sx.c
+@@ -418,8 +418,9 @@ reset_hfcsx(struct IsdnCardState *cs)
+ /* Timer function called when kernel timer expires */
+ /***************************************************/
+ static void
+-hfcsx_Timer(struct IsdnCardState *cs)
++hfcsx_Timer(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ cs->hw.hfcsx.timer.expires = jiffies + 75;
+ /* WD RESET */
+ /* WriteReg(cs, HFCD_DATA, HFCD_CTMT, cs->hw.hfcsx.ctmt | 0x80);
+@@ -860,8 +861,9 @@ hfcsx_interrupt(int intno, void *dev_id)
+ /* timer callback for D-chan busy resolution. Currently no function */
+ /********************************************************************/
+ static void
+-hfcsx_dbusy_timer(struct IsdnCardState *cs)
++hfcsx_dbusy_timer(unsigned long _cs)
+ {
++ //struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ }
+
+ /*************************************/
+@@ -1495,7 +1497,7 @@ int setup_hfcsx(struct IsdnCard *card)
+ } else
+ return (0); /* no valid card type */
+
+- cs->dbusytimer.function = (void *) hfcsx_dbusy_timer;
++ cs->dbusytimer.function = hfcsx_dbusy_timer;
+ cs->dbusytimer.data = (long) cs;
+ init_timer(&cs->dbusytimer);
+ INIT_WORK(&cs->tqueue, hfcsx_bh);
+@@ -1507,7 +1509,7 @@ int setup_hfcsx(struct IsdnCard *card)
+ cs->BC_Write_Reg = NULL;
+ cs->irq_func = &hfcsx_interrupt;
+
+- cs->hw.hfcsx.timer.function = (void *) hfcsx_Timer;
++ cs->hw.hfcsx.timer.function = hfcsx_Timer;
+ cs->hw.hfcsx.timer.data = (long) cs;
+ cs->hw.hfcsx.b_fifo_size = 0; /* fifo size still unknown */
+ cs->hw.hfcsx.cirm = ccd_sp_irqtab[cs->irq & 0xF]; /* RAM not evaluated */
+diff --git a/drivers/isdn/hisax/hfc_usb.c b/drivers/isdn/hisax/hfc_usb.c
+index 678bd52..1c4f12a 100644
+--- a/drivers/isdn/hisax/hfc_usb.c
++++ b/drivers/isdn/hisax/hfc_usb.c
+@@ -343,8 +343,10 @@ handle_led(hfcusb_data *hfc, int event)
+
+ /* ISDN l1 timer T3 expires */
+ static void
+-l1_timer_expire_t3(hfcusb_data *hfc)
++l1_timer_expire_t3(unsigned long _hfc)
+ {
++ hfcusb_data *hfc = (hfcusb_data *)_hfc;
++
+ hfc->d_if.ifc.l1l2(&hfc->d_if.ifc, PH_DEACTIVATE | INDICATION,
+ NULL);
+
+@@ -360,8 +362,10 @@ l1_timer_expire_t3(hfcusb_data *hfc)
+
+ /* ISDN l1 timer T4 expires */
+ static void
+-l1_timer_expire_t4(hfcusb_data *hfc)
++l1_timer_expire_t4(unsigned long _hfc)
+ {
++ hfcusb_data *hfc = (hfcusb_data *)_hfc;
++
+ hfc->d_if.ifc.l1l2(&hfc->d_if.ifc, PH_DEACTIVATE | INDICATION,
+ NULL);
+
+@@ -1167,12 +1171,12 @@ hfc_usb_init(hfcusb_data *hfc)
+ /* init the t3 timer */
+ init_timer(&hfc->t3_timer);
+ hfc->t3_timer.data = (long) hfc;
+- hfc->t3_timer.function = (void *) l1_timer_expire_t3;
++ hfc->t3_timer.function = l1_timer_expire_t3;
+
+ /* init the t4 timer */
+ init_timer(&hfc->t4_timer);
+ hfc->t4_timer.data = (long) hfc;
+- hfc->t4_timer.function = (void *) l1_timer_expire_t4;
++ hfc->t4_timer.function = l1_timer_expire_t4;
+
+ /* init the background machinery for control requests */
+ hfc->ctrl_read.bRequestType = 0xc0;
+diff --git a/drivers/isdn/hisax/icc.c b/drivers/isdn/hisax/icc.c
+index 96d1df0..77a05ee 100644
+--- a/drivers/isdn/hisax/icc.c
++++ b/drivers/isdn/hisax/icc.c
+@@ -580,8 +580,9 @@ DC_Close_icc(struct IsdnCardState *cs) {
+ }
+
+ static void
+-dbusy_timer_handler(struct IsdnCardState *cs)
++dbusy_timer_handler(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ struct PStack *stptr;
+ int rbch, star;
+
+@@ -676,7 +677,7 @@ clear_pending_icc_ints(struct IsdnCardState *cs)
+ void setup_icc(struct IsdnCardState *cs)
+ {
+ INIT_WORK(&cs->tqueue, icc_bh);
+- cs->dbusytimer.function = (void *) dbusy_timer_handler;
++ cs->dbusytimer.function = dbusy_timer_handler;
+ cs->dbusytimer.data = (long) cs;
+ init_timer(&cs->dbusytimer);
+ }
+diff --git a/drivers/isdn/hisax/ipacx.c b/drivers/isdn/hisax/ipacx.c
+index 9cc26b4..d7fa044 100644
+--- a/drivers/isdn/hisax/ipacx.c
++++ b/drivers/isdn/hisax/ipacx.c
+@@ -35,7 +35,7 @@
+ static void ph_command(struct IsdnCardState *cs, unsigned int command);
+ static inline void cic_int(struct IsdnCardState *cs);
+ static void dch_l2l1(struct PStack *st, int pr, void *arg);
+-static void dbusy_timer_handler(struct IsdnCardState *cs);
++static void dbusy_timer_handler(unsigned long _cs);
+ static void dch_empty_fifo(struct IsdnCardState *cs, int count);
+ static void dch_fill_fifo(struct IsdnCardState *cs);
+ static inline void dch_int(struct IsdnCardState *cs);
+@@ -198,8 +198,9 @@ dch_l2l1(struct PStack *st, int pr, void *arg)
+ //----------------------------------------------------------
+ //----------------------------------------------------------
+ static void
+-dbusy_timer_handler(struct IsdnCardState *cs)
++dbusy_timer_handler(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ struct PStack *st;
+ int rbchd, stard;
+
+@@ -424,7 +425,7 @@ dch_init(struct IsdnCardState *cs)
+
+ cs->setstack_d = dch_setstack;
+
+- cs->dbusytimer.function = (void *) dbusy_timer_handler;
++ cs->dbusytimer.function = dbusy_timer_handler;
+ cs->dbusytimer.data = (long) cs;
+ init_timer(&cs->dbusytimer);
+
+diff --git a/drivers/isdn/hisax/isac.c b/drivers/isdn/hisax/isac.c
+index 7fdf78f..eb02640 100644
+--- a/drivers/isdn/hisax/isac.c
++++ b/drivers/isdn/hisax/isac.c
+@@ -579,8 +579,9 @@ DC_Close_isac(struct IsdnCardState *cs)
+ }
+
+ static void
+-dbusy_timer_handler(struct IsdnCardState *cs)
++dbusy_timer_handler(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ struct PStack *stptr;
+ int rbch, star;
+
+@@ -672,7 +673,7 @@ void clear_pending_isac_ints(struct IsdnCardState *cs)
+ void setup_isac(struct IsdnCardState *cs)
+ {
+ INIT_WORK(&cs->tqueue, isac_bh);
+- cs->dbusytimer.function = (void *) dbusy_timer_handler;
++ cs->dbusytimer.function = dbusy_timer_handler;
+ cs->dbusytimer.data = (long) cs;
+ init_timer(&cs->dbusytimer);
+ }
+diff --git a/drivers/isdn/hisax/isar.c b/drivers/isdn/hisax/isar.c
+index f4956c7..122d249 100644
+--- a/drivers/isdn/hisax/isar.c
++++ b/drivers/isdn/hisax/isar.c
+@@ -1267,7 +1267,8 @@ isar_int_main(struct IsdnCardState *cs)
+ }
+
+ static void
+-ftimer_handler(struct BCState *bcs) {
++ftimer_handler(unsigned long _bcs) {
++ struct BCState *bcs = (struct BCState *)_bcs;
+ if (bcs->cs->debug)
+ debugl1(bcs->cs, "ftimer flags %04lx",
+ bcs->Flag);
+@@ -1902,7 +1903,7 @@ void initisar(struct IsdnCardState *cs)
+ cs->bcs[1].BC_SetStack = setstack_isar;
+ cs->bcs[0].BC_Close = close_isarstate;
+ cs->bcs[1].BC_Close = close_isarstate;
+- cs->bcs[0].hw.isar.ftimer.function = (void *) ftimer_handler;
++ cs->bcs[0].hw.isar.ftimer.function = ftimer_handler;
+ cs->bcs[0].hw.isar.ftimer.data = (long) &cs->bcs[0];
+ init_timer(&cs->bcs[0].hw.isar.ftimer);
+ cs->bcs[1].hw.isar.ftimer.function = (void *) ftimer_handler;
+diff --git a/drivers/isdn/hisax/isdnl3.c b/drivers/isdn/hisax/isdnl3.c
+index c754706..8b1ffd5 100644
+--- a/drivers/isdn/hisax/isdnl3.c
++++ b/drivers/isdn/hisax/isdnl3.c
+@@ -160,8 +160,9 @@ newl3state(struct l3_process *pc, int state)
+ }
+
+ static void
+-L3ExpireTimer(struct L3Timer *t)
++L3ExpireTimer(unsigned long _t)
+ {
++ struct L3Timer *t = (struct L3Timer *)_t;
+ t->pc->st->lli.l4l3(t->pc->st, t->event, t->pc);
+ }
+
+@@ -169,7 +170,7 @@ void
+ L3InitTimer(struct l3_process *pc, struct L3Timer *t)
+ {
+ t->pc = pc;
+- t->tl.function = (void *) L3ExpireTimer;
++ t->tl.function = L3ExpireTimer;
+ t->tl.data = (long) t;
+ init_timer(&t->tl);
+ }
+diff --git a/drivers/isdn/hisax/w6692.c b/drivers/isdn/hisax/w6692.c
+index a858955..908285b 100644
+--- a/drivers/isdn/hisax/w6692.c
++++ b/drivers/isdn/hisax/w6692.c
+@@ -681,8 +681,9 @@ DC_Close_W6692(struct IsdnCardState *cs)
+ }
+
+ static void
+-dbusy_timer_handler(struct IsdnCardState *cs)
++dbusy_timer_handler(unsigned long _cs)
+ {
++ struct IsdnCardState *cs = (struct IsdnCardState *)_cs;
+ struct PStack *stptr;
+ int rbch, star;
+ u_long flags;
+@@ -901,7 +902,7 @@ static void initW6692(struct IsdnCardState *cs, int part)
+ if (part & 1) {
+ cs->setstack_d = setstack_W6692;
+ cs->DC_Close = DC_Close_W6692;
+- cs->dbusytimer.function = (void *) dbusy_timer_handler;
++ cs->dbusytimer.function = dbusy_timer_handler;
+ cs->dbusytimer.data = (long) cs;
+ init_timer(&cs->dbusytimer);
+ resetW6692(cs);
diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c
index 9b856e1..fa03c92 100644
--- a/drivers/isdn/i4l/isdn_common.c
@@ -47989,50 +52026,173 @@ index 358a574..b4987ea 100644
return -EFAULT;
} else
memcpy(msg, buf, count);
+diff --git a/drivers/isdn/mISDN/dsp.h b/drivers/isdn/mISDN/dsp.h
+index fc1733a..27bf261 100644
+--- a/drivers/isdn/mISDN/dsp.h
++++ b/drivers/isdn/mISDN/dsp.h
+@@ -247,7 +247,7 @@ extern void dsp_cmx_hardware(struct dsp_conf *conf, struct dsp *dsp);
+ extern int dsp_cmx_conf(struct dsp *dsp, u32 conf_id);
+ extern void dsp_cmx_receive(struct dsp *dsp, struct sk_buff *skb);
+ extern void dsp_cmx_hdlc(struct dsp *dsp, struct sk_buff *skb);
+-extern void dsp_cmx_send(void *arg);
++extern void dsp_cmx_send(unsigned long arg);
+ extern void dsp_cmx_transmit(struct dsp *dsp, struct sk_buff *skb);
+ extern int dsp_cmx_del_conf_member(struct dsp *dsp);
+ extern int dsp_cmx_del_conf(struct dsp_conf *conf);
+@@ -259,7 +259,7 @@ extern u8 *dsp_dtmf_goertzel_decode(struct dsp *dsp, u8 *data, int len,
+
+ extern int dsp_tone(struct dsp *dsp, int tone);
+ extern void dsp_tone_copy(struct dsp *dsp, u8 *data, int len);
+-extern void dsp_tone_timeout(void *arg);
++extern void dsp_tone_timeout(unsigned long arg);
+
+ extern void dsp_bf_encrypt(struct dsp *dsp, u8 *data, int len);
+ extern void dsp_bf_decrypt(struct dsp *dsp, u8 *data, int len);
diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c
-index 8e3aa00..65200ac 100644
+index 8e3aa00..723faf8 100644
--- a/drivers/isdn/mISDN/dsp_cmx.c
+++ b/drivers/isdn/mISDN/dsp_cmx.c
-@@ -1625,7 +1625,7 @@ unsigned long dsp_spl_jiffies; /* calculate the next time to fire */
+@@ -1625,8 +1625,8 @@ unsigned long dsp_spl_jiffies; /* calculate the next time to fire */
static u16 dsp_count; /* last sample count */
static int dsp_count_valid; /* if we have last sample count */
-void
+-dsp_cmx_send(void *arg)
+void __intentional_overflow(-1)
- dsp_cmx_send(void *arg)
++dsp_cmx_send(unsigned long arg)
{
struct dsp_conf *conf;
+ struct dsp_conf_member *member;
+diff --git a/drivers/isdn/mISDN/dsp_core.c b/drivers/isdn/mISDN/dsp_core.c
+index 0222b1a..67fb76a 100644
+--- a/drivers/isdn/mISDN/dsp_core.c
++++ b/drivers/isdn/mISDN/dsp_core.c
+@@ -1092,7 +1092,7 @@ dspcreate(struct channel_req *crq)
+ ndsp->pcm_bank_tx = -1;
+ ndsp->hfc_conf = -1; /* current conference number */
+ /* set tone timer */
+- ndsp->tone.tl.function = (void *)dsp_tone_timeout;
++ ndsp->tone.tl.function = dsp_tone_timeout;
+ ndsp->tone.tl.data = (long) ndsp;
+ init_timer(&ndsp->tone.tl);
+
+@@ -1204,7 +1204,7 @@ static int __init dsp_init(void)
+ }
+
+ /* set sample timer */
+- dsp_spl_tl.function = (void *)dsp_cmx_send;
++ dsp_spl_tl.function = dsp_cmx_send;
+ dsp_spl_tl.data = 0;
+ init_timer(&dsp_spl_tl);
+ dsp_spl_tl.expires = jiffies + dsp_tics;
+diff --git a/drivers/isdn/mISDN/dsp_tones.c b/drivers/isdn/mISDN/dsp_tones.c
+index 057e0d6..ed229b5 100644
+--- a/drivers/isdn/mISDN/dsp_tones.c
++++ b/drivers/isdn/mISDN/dsp_tones.c
+@@ -457,9 +457,9 @@ dsp_tone_hw_message(struct dsp *dsp, u8 *sample, int len)
+ * timer expires *
+ *****************/
+ void
+-dsp_tone_timeout(void *arg)
++dsp_tone_timeout(unsigned long arg)
+ {
+- struct dsp *dsp = arg;
++ struct dsp *dsp = (struct dsp *)arg;
+ struct dsp_tone *tone = &dsp->tone;
+ struct pattern *pat = (struct pattern *)tone->pattern;
+ int index = tone->index;
+diff --git a/drivers/isdn/mISDN/fsm.c b/drivers/isdn/mISDN/fsm.c
+index 26477d4..4fa3876 100644
+--- a/drivers/isdn/mISDN/fsm.c
++++ b/drivers/isdn/mISDN/fsm.c
+@@ -97,8 +97,9 @@ mISDN_FsmChangeState(struct FsmInst *fi, int newstate)
+ EXPORT_SYMBOL(mISDN_FsmChangeState);
+
+ static void
+-FsmExpireTimer(struct FsmTimer *ft)
++FsmExpireTimer(unsigned long _ft)
+ {
++ struct FsmTimer *ft = (struct FsmTimer *)_ft;
+ #if FSM_TIMER_DEBUG
+ if (ft->fi->debug)
+ ft->fi->printdebug(ft->fi, "FsmExpireTimer %lx", (long) ft);
+@@ -110,7 +111,7 @@ void
+ mISDN_FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft)
+ {
+ ft->fi = fi;
+- ft->tl.function = (void *) FsmExpireTimer;
++ ft->tl.function = FsmExpireTimer;
+ ft->tl.data = (long) ft;
+ #if FSM_TIMER_DEBUG
+ if (ft->fi->debug)
+diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c
+index 67c2187..fc71e33 100644
+--- a/drivers/isdn/mISDN/l1oip_core.c
++++ b/drivers/isdn/mISDN/l1oip_core.c
+@@ -840,7 +840,7 @@ l1oip_send_bh(struct work_struct *work)
+ * timer stuff
+ */
+ static void
+-l1oip_keepalive(void *data)
++l1oip_keepalive(unsigned long data)
+ {
+ struct l1oip *hc = (struct l1oip *)data;
+
+@@ -848,7 +848,7 @@ l1oip_keepalive(void *data)
+ }
+
+ static void
+-l1oip_timeout(void *data)
++l1oip_timeout(unsigned long data)
+ {
+ struct l1oip *hc = (struct l1oip *)data;
+ struct dchannel *dch = hc->chan[hc->d_idx].dch;
+@@ -1435,13 +1435,13 @@ init_card(struct l1oip *hc, int pri, int bundle)
+ if (ret)
+ return ret;
+
+- hc->keep_tl.function = (void *)l1oip_keepalive;
++ hc->keep_tl.function = l1oip_keepalive;
+ hc->keep_tl.data = (ulong)hc;
+ init_timer(&hc->keep_tl);
+ hc->keep_tl.expires = jiffies + 2 * HZ; /* two seconds first time */
+ add_timer(&hc->keep_tl);
+
+- hc->timeout_tl.function = (void *)l1oip_timeout;
++ hc->timeout_tl.function = l1oip_timeout;
+ hc->timeout_tl.data = (ulong)hc;
+ init_timer(&hc->timeout_tl);
+ hc->timeout_on = 0; /* state that we have timer off */
diff --git a/drivers/lguest/core.c b/drivers/lguest/core.c
-index 312ffd3..d060510 100644
+index 9e385b3..7077882 100644
--- a/drivers/lguest/core.c
+++ b/drivers/lguest/core.c
-@@ -96,9 +96,17 @@ static __init int map_switcher(void)
- * The end address needs +1 because __get_vm_area allocates an
- * extra guard page, so we need space for that.
+@@ -87,7 +87,7 @@ static __init int map_switcher(void)
+ * Copy in the compiled-in Switcher code (from x86/switcher_32.S).
+ * It goes in the first page, which we map in momentarily.
+ */
+- memcpy(kmap(lg_switcher_pages[0]), start_switcher_text,
++ memcpy(kmap(lg_switcher_pages[0]), (void *)ktla_ktva((unsigned long)start_switcher_text),
+ end_switcher_text - start_switcher_text);
+ kunmap(lg_switcher_pages[0]);
+
+@@ -106,9 +106,16 @@ static __init int map_switcher(void)
+ * We want the switcher text to be read-only and executable, and
+ * the stacks to be read-write and non-executable.
*/
+
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_KERNEXEC)
-+ switcher_vma = __get_vm_area(TOTAL_SWITCHER_PAGES * PAGE_SIZE,
-+ VM_ALLOC | VM_KERNEXEC, switcher_addr, switcher_addr
-+ + (TOTAL_SWITCHER_PAGES+1) * PAGE_SIZE);
++ switcher_text_vma = __get_vm_area(PAGE_SIZE, VM_ALLOC|VM_NO_GUARD|VM_KERNEXEC,
++ switcher_addr,
++ switcher_addr + PAGE_SIZE);
+#else
- switcher_vma = __get_vm_area(TOTAL_SWITCHER_PAGES * PAGE_SIZE,
- VM_ALLOC, switcher_addr, switcher_addr
- + (TOTAL_SWITCHER_PAGES+1) * PAGE_SIZE);
+ switcher_text_vma = __get_vm_area(PAGE_SIZE, VM_ALLOC|VM_NO_GUARD,
+ switcher_addr,
+ switcher_addr + PAGE_SIZE);
+#endif
-+
- if (!switcher_vma) {
- err = -ENOMEM;
- printk("lguest: could not map switcher pages high\n");
-@@ -121,7 +129,7 @@ static __init int map_switcher(void)
- * Now the Switcher is mapped at the right address, we can't fail!
- * Copy in the compiled-in Switcher code (from x86/switcher_32.S).
- */
-- memcpy(switcher_vma->addr, start_switcher_text,
-+ memcpy(switcher_vma->addr, (void *)ktla_ktva((unsigned long)start_switcher_text),
- end_switcher_text - start_switcher_text);
- printk(KERN_INFO "lguest: mapped switcher at %p\n",
+ if (!switcher_text_vma) {
+ err = -ENOMEM;
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c
index e3abebc9..6a35328 100644
--- a/drivers/lguest/page_tables.c
@@ -48154,10 +52314,10 @@ index 40634b0..4f5855e 100644
// Every interrupt can come to us here
// But we must truly tell each apart.
diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
-index 134e4fa..243bffe 100644
+index 307db1e..c35f298 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
-@@ -218,7 +218,7 @@ static void rrpc_put_blks(struct rrpc *rrpc)
+@@ -231,7 +231,7 @@ static void rrpc_put_blks(struct rrpc *rrpc)
static struct rrpc_lun *get_next_lun(struct rrpc *rrpc)
{
@@ -48166,7 +52326,7 @@ index 134e4fa..243bffe 100644
return &rrpc->luns[next % rrpc->nr_luns];
}
-@@ -1286,7 +1286,7 @@ static void *rrpc_init(struct nvm_dev *dev, struct gendisk *tdisk,
+@@ -1340,7 +1340,7 @@ static void *rrpc_init(struct nvm_dev *dev, struct gendisk *tdisk,
rrpc->nr_luns = lun_end - lun_begin + 1;
/* simple round-robin strategy */
@@ -48176,10 +52336,10 @@ index 134e4fa..243bffe 100644
ret = rrpc_luns_init(rrpc, lun_begin, lun_end);
if (ret) {
diff --git a/drivers/lightnvm/rrpc.h b/drivers/lightnvm/rrpc.h
-index a9696a0..75d0008 100644
+index f7b3733..0bed14d 100644
--- a/drivers/lightnvm/rrpc.h
+++ b/drivers/lightnvm/rrpc.h
-@@ -99,7 +99,7 @@ struct rrpc {
+@@ -110,7 +110,7 @@ struct rrpc {
/* Write strategy variables. Move these into each for structure for each
* strategy
*/
@@ -48485,10 +52645,10 @@ index b3ff57d..b2e30fb 100644
return size;
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
-index 4f22e91..5b13fde 100644
+index d80cce4..d7f15c4 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
-@@ -1931,7 +1931,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
+@@ -1927,7 +1927,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
chunk_kb ? "KB" : "B");
if (bitmap->storage.file) {
seq_printf(seq, ", file: ");
@@ -48498,10 +52658,19 @@ index 4f22e91..5b13fde 100644
seq_printf(seq, "\n");
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
-index 515f83e..56f11f0 100644
+index bb9b92e..001e258 100644
--- a/drivers/md/dm-cache-target.c
+++ b/drivers/md/dm-cache-target.c
-@@ -185,16 +185,16 @@ struct cache_features {
+@@ -118,7 +118,7 @@ static void iot_io_end(struct io_tracker *iot, sector_t len)
+ */
+ struct dm_hook_info {
+ bio_end_io_t *bi_end_io;
+-};
++} __no_const;
+
+ static void dm_hook_bio(struct dm_hook_info *h, struct bio *bio,
+ bio_end_io_t *bi_end_io, void *bi_private)
+@@ -182,16 +182,16 @@ struct cache_features {
};
struct cache_stats {
@@ -48528,7 +52697,7 @@ index 515f83e..56f11f0 100644
};
/*
-@@ -273,8 +273,8 @@ struct cache {
+@@ -270,8 +270,8 @@ struct cache {
atomic_t nr_io_migrations;
wait_queue_head_t quiescing_wait;
@@ -48539,7 +52708,31 @@ index 515f83e..56f11f0 100644
/*
* cache_size entries, dirty if set
-@@ -640,7 +640,7 @@ static void set_discard(struct cache *cache, dm_dblock_t b)
+@@ -395,8 +395,10 @@ static struct dm_bio_prison_cell *alloc_prison_cell(struct cache *cache)
+ return dm_bio_prison_alloc_cell(cache->prison, GFP_NOWAIT);
+ }
+
+-static void free_prison_cell(struct cache *cache, struct dm_bio_prison_cell *cell)
++static void free_prison_cell(void *_cache, struct dm_bio_prison_cell *cell)
+ {
++ struct cache *cache = _cache;
++
+ dm_bio_prison_free_cell(cache->prison, cell);
+ }
+
+@@ -493,8 +495,10 @@ static struct dm_bio_prison_cell *prealloc_get_cell(struct prealloc *p)
+ * You can't have more than two cells in a prealloc struct. BUG() will be
+ * called if you try and overfill.
+ */
+-static void prealloc_put_cell(struct prealloc *p, struct dm_bio_prison_cell *cell)
++static void prealloc_put_cell(void *_p, struct dm_bio_prison_cell *cell)
+ {
++ struct prealloc *p = _p;
++
+ if (!p->cell2)
+ p->cell2 = cell;
+
+@@ -637,7 +641,7 @@ static void set_discard(struct cache *cache, dm_dblock_t b)
unsigned long flags;
BUG_ON(from_dblock(b) >= from_dblock(cache->discard_nr_blocks));
@@ -48548,7 +52741,7 @@ index 515f83e..56f11f0 100644
spin_lock_irqsave(&cache->lock, flags);
set_bit(from_dblock(b), cache->discard_bitset);
-@@ -688,10 +688,10 @@ static void load_stats(struct cache *cache)
+@@ -685,10 +689,10 @@ static void load_stats(struct cache *cache)
struct dm_cache_statistics stats;
dm_cache_metadata_get_stats(cache->cmd, &stats);
@@ -48563,7 +52756,7 @@ index 515f83e..56f11f0 100644
}
static void save_stats(struct cache *cache)
-@@ -701,10 +701,10 @@ static void save_stats(struct cache *cache)
+@@ -698,10 +702,10 @@ static void save_stats(struct cache *cache)
if (get_cache_mode(cache) >= CM_READ_ONLY)
return;
@@ -48578,7 +52771,7 @@ index 515f83e..56f11f0 100644
dm_cache_metadata_set_stats(cache->cmd, &stats);
}
-@@ -1327,7 +1327,7 @@ static bool bio_writes_complete_block(struct cache *cache, struct bio *bio)
+@@ -1324,7 +1328,7 @@ static bool bio_writes_complete_block(struct cache *cache, struct bio *bio)
static void avoid_copy(struct dm_cache_migration *mg)
{
@@ -48587,7 +52780,16 @@ index 515f83e..56f11f0 100644
migration_success_pre_commit(mg);
}
-@@ -1654,13 +1654,13 @@ static bool spare_migration_bandwidth(struct cache *cache)
+@@ -1634,7 +1638,7 @@ static void process_discard_bio(struct cache *cache, struct prealloc *structs,
+
+ cell_prealloc = prealloc_get_cell(structs);
+ r = bio_detain_range(cache, dblock_to_oblock(cache, b), dblock_to_oblock(cache, e), bio, cell_prealloc,
+- (cell_free_fn) prealloc_put_cell,
++ prealloc_put_cell,
+ structs, &new_ocell);
+ if (r > 0)
+ return;
+@@ -1651,13 +1655,13 @@ static bool spare_migration_bandwidth(struct cache *cache)
static void inc_hit_counter(struct cache *cache, struct bio *bio)
{
@@ -48603,7 +52805,16 @@ index 515f83e..56f11f0 100644
&cache->stats.read_miss : &cache->stats.write_miss);
}
-@@ -1833,7 +1833,7 @@ static void process_cell(struct cache *cache, struct prealloc *structs,
+@@ -1788,7 +1792,7 @@ static int cell_locker(struct policy_locker *locker, dm_oblock_t b)
+ struct dm_bio_prison_cell *cell_prealloc = prealloc_get_cell(l->structs);
+
+ return bio_detain(l->cache, b, NULL, cell_prealloc,
+- (cell_free_fn) prealloc_put_cell,
++ prealloc_put_cell,
+ l->structs, &l->cell);
+ }
+
+@@ -1830,7 +1834,7 @@ static void process_cell(struct cache *cache, struct prealloc *structs,
*/
if (bio_data_dir(bio) == WRITE) {
@@ -48612,7 +52823,7 @@ index 515f83e..56f11f0 100644
invalidate(cache, structs, block, lookup_result.cblock, new_ocell);
release_cell = false;
-@@ -1866,14 +1866,14 @@ static void process_cell(struct cache *cache, struct prealloc *structs,
+@@ -1863,14 +1867,14 @@ static void process_cell(struct cache *cache, struct prealloc *structs,
break;
case POLICY_NEW:
@@ -48630,7 +52841,16 @@ index 515f83e..56f11f0 100644
demote_then_promote(cache, structs, lookup_result.old_oblock,
block, lookup_result.cblock,
ool.cell, new_ocell);
-@@ -1927,7 +1927,7 @@ static int commit(struct cache *cache, bool clean_shutdown)
+@@ -1900,7 +1904,7 @@ static void process_bio(struct cache *cache, struct prealloc *structs,
+ */
+ cell_prealloc = prealloc_get_cell(structs);
+ r = bio_detain(cache, block, bio, cell_prealloc,
+- (cell_free_fn) prealloc_put_cell,
++ prealloc_put_cell,
+ structs, &new_ocell);
+ if (r > 0)
+ return;
+@@ -1924,7 +1928,7 @@ static int commit(struct cache *cache, bool clean_shutdown)
if (get_cache_mode(cache) >= CM_READ_ONLY)
return -EINVAL;
@@ -48639,7 +52859,7 @@ index 515f83e..56f11f0 100644
r = dm_cache_commit(cache->cmd, clean_shutdown);
if (r)
metadata_operation_failed(cache, "dm_cache_commit", r);
-@@ -2158,32 +2158,32 @@ static void process_invalidation_requests(struct cache *cache)
+@@ -2155,32 +2159,32 @@ static void process_invalidation_requests(struct cache *cache)
*--------------------------------------------------------------*/
static bool is_quiescing(struct cache *cache)
{
@@ -48678,7 +52898,7 @@ index 515f83e..56f11f0 100644
}
static void wait_for_migrations(struct cache *cache)
-@@ -2870,8 +2870,8 @@ static int cache_create(struct cache_args *ca, struct cache **result)
+@@ -2867,8 +2871,8 @@ static int cache_create(struct cache_args *ca, struct cache **result)
init_waitqueue_head(&cache->migration_wait);
init_waitqueue_head(&cache->quiescing_wait);
@@ -48689,7 +52909,7 @@ index 515f83e..56f11f0 100644
r = -ENOMEM;
atomic_set(&cache->nr_dirty, 0);
-@@ -2938,12 +2938,12 @@ static int cache_create(struct cache_args *ca, struct cache **result)
+@@ -2935,12 +2939,12 @@ static int cache_create(struct cache_args *ca, struct cache **result)
load_stats(cache);
@@ -48708,7 +52928,16 @@ index 515f83e..56f11f0 100644
spin_lock_init(&cache->invalidation_lock);
INIT_LIST_HEAD(&cache->invalidation_requests);
-@@ -3554,12 +3554,12 @@ static void cache_status(struct dm_target *ti, status_type_t type,
+@@ -3057,7 +3061,7 @@ static int cache_map(struct dm_target *ti, struct bio *bio)
+ }
+
+ r = bio_detain(cache, block, bio, cell,
+- (cell_free_fn) free_prison_cell,
++ free_prison_cell,
+ cache, &cell);
+ if (r) {
+ if (r < 0)
+@@ -3551,12 +3555,12 @@ static void cache_status(struct dm_target *ti, status_type_t type,
cache->sectors_per_block,
(unsigned long long) from_cblock(residency),
(unsigned long long) from_cblock(cache->cache_size),
@@ -48918,7 +53147,7 @@ index cb5d0da..a06db6d 100644
"start=%llu, len=%llu, dev_size=%llu",
dm_device_name(ti->table->md), bdevname(bdev, b),
diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
-index 911ada6..85d4750 100644
+index 185010d..1cc08ad9 100644
--- a/drivers/md/dm-thin-metadata.c
+++ b/drivers/md/dm-thin-metadata.c
@@ -405,7 +405,7 @@ static void __setup_btree_details(struct dm_pool_metadata *pmd)
@@ -49035,10 +53264,10 @@ index c338aeb..671c671 100644
void dm_uevent_add(struct mapped_device *md, struct list_head *elist)
diff --git a/drivers/md/md.c b/drivers/md/md.c
-index b1e1f6b..8fe237a 100644
+index e55e6cf..9d2a4c7 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
-@@ -197,10 +197,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
+@@ -198,10 +198,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
* start build, activate spare
*/
static DECLARE_WAIT_QUEUE_HEAD(md_event_waiters);
@@ -49051,16 +53280,7 @@ index b1e1f6b..8fe237a 100644
wake_up(&md_event_waiters);
}
EXPORT_SYMBOL_GPL(md_new_event);
-@@ -210,7 +210,7 @@ EXPORT_SYMBOL_GPL(md_new_event);
- */
- static void md_new_event_inintr(struct mddev *mddev)
- {
-- atomic_inc(&md_event_count);
-+ atomic_inc_unchecked(&md_event_count);
- wake_up(&md_event_waiters);
- }
-
-@@ -1434,7 +1434,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
+@@ -1424,7 +1424,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) &&
(le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET))
rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset);
@@ -49069,7 +53289,7 @@ index b1e1f6b..8fe237a 100644
rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256;
bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1;
-@@ -1703,7 +1703,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
+@@ -1693,7 +1693,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
else
sb->resync_offset = cpu_to_le64(0);
@@ -49078,7 +53298,7 @@ index b1e1f6b..8fe237a 100644
sb->raid_disks = cpu_to_le32(mddev->raid_disks);
sb->size = cpu_to_le64(mddev->dev_sectors);
-@@ -2711,7 +2711,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store);
+@@ -2708,7 +2708,7 @@ __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store);
static ssize_t
errors_show(struct md_rdev *rdev, char *page)
{
@@ -49087,7 +53307,7 @@ index b1e1f6b..8fe237a 100644
}
static ssize_t
-@@ -2723,7 +2723,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
+@@ -2720,7 +2720,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
rv = kstrtouint(buf, 10, &n);
if (rv < 0)
return rv;
@@ -49096,7 +53316,7 @@ index b1e1f6b..8fe237a 100644
return len;
}
static struct rdev_sysfs_entry rdev_errors =
-@@ -3167,8 +3167,8 @@ int md_rdev_init(struct md_rdev *rdev)
+@@ -3170,8 +3170,8 @@ int md_rdev_init(struct md_rdev *rdev)
rdev->sb_loaded = 0;
rdev->bb_page = NULL;
atomic_set(&rdev->nr_pending, 0);
@@ -49107,7 +53327,7 @@ index b1e1f6b..8fe237a 100644
INIT_LIST_HEAD(&rdev->same_set);
init_waitqueue_head(&rdev->blocked_wait);
-@@ -4392,7 +4392,7 @@ mismatch_cnt_show(struct mddev *mddev, char *page)
+@@ -4388,7 +4388,7 @@ mismatch_cnt_show(struct mddev *mddev, char *page)
{
return sprintf(page, "%llu\n",
(unsigned long long)
@@ -49116,7 +53336,16 @@ index b1e1f6b..8fe237a 100644
}
static struct md_sysfs_entry md_mismatches = __ATTR_RO(mismatch_cnt);
-@@ -5431,7 +5431,7 @@ static void md_clean(struct mddev *mddev)
+@@ -5076,7 +5076,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data)
+ return NULL;
+ }
+
+-static int add_named_array(const char *val, struct kernel_param *kp)
++static int add_named_array(const char *val, const struct kernel_param *kp)
+ {
+ /* val must be "md_*" where * is not all digits.
+ * We allocate an array with a large free minor number, and
+@@ -5426,7 +5426,7 @@ static void md_clean(struct mddev *mddev)
mddev->new_layout = 0;
mddev->new_chunk_sectors = 0;
mddev->curr_resync = 0;
@@ -49125,9 +53354,9 @@ index b1e1f6b..8fe237a 100644
mddev->suspend_lo = mddev->suspend_hi = 0;
mddev->sync_speed_min = mddev->sync_speed_max = 0;
mddev->recovery = 0;
-@@ -5847,9 +5847,10 @@ static int get_array_info(struct mddev *mddev, void __user *arg)
+@@ -5841,9 +5841,10 @@ static int get_array_info(struct mddev *mddev, void __user *arg)
info.patch_version = MD_PATCHLEVEL_VERSION;
- info.ctime = mddev->ctime;
+ info.ctime = clamp_t(time64_t, mddev->ctime, 0, U32_MAX);
info.level = mddev->level;
- info.size = mddev->dev_sectors / 2;
- if (info.size != mddev->dev_sectors / 2) /* overflow */
@@ -49138,7 +53367,7 @@ index b1e1f6b..8fe237a 100644
info.nr_disks = nr;
info.raid_disks = mddev->raid_disks;
info.md_minor = mddev->md_minor;
-@@ -7391,7 +7392,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
+@@ -7406,7 +7407,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
spin_unlock(&pers_lock);
seq_printf(seq, "\n");
@@ -49147,7 +53376,7 @@ index b1e1f6b..8fe237a 100644
return 0;
}
if (v == (void*)2) {
-@@ -7491,7 +7492,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
+@@ -7506,7 +7507,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
return error;
seq = file->private_data;
@@ -49156,7 +53385,7 @@ index b1e1f6b..8fe237a 100644
return error;
}
-@@ -7508,7 +7509,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
+@@ -7523,7 +7524,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
/* always allow read */
mask = POLLIN | POLLRDNORM;
@@ -49165,7 +53394,7 @@ index b1e1f6b..8fe237a 100644
mask |= POLLERR | POLLPRI;
return mask;
}
-@@ -7608,7 +7609,7 @@ static int is_mddev_idle(struct mddev *mddev, int init)
+@@ -7623,7 +7624,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]) -
@@ -49174,7 +53403,7 @@ index b1e1f6b..8fe237a 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.
-@@ -7859,7 +7860,7 @@ void md_do_sync(struct md_thread *thread)
+@@ -7874,7 +7875,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;
@@ -49183,11 +53412,25 @@ index b1e1f6b..8fe237a 100644
/* we don't use the checkpoint if there's a bitmap */
if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
j = mddev->resync_min;
+@@ -8870,11 +8871,11 @@ static __exit void md_exit(void)
+ subsys_initcall(md_init);
+ module_exit(md_exit)
+
+-static int get_ro(char *buffer, struct kernel_param *kp)
++static int get_ro(char *buffer, const struct kernel_param *kp)
+ {
+ return sprintf(buffer, "%d", start_readonly);
+ }
+-static int set_ro(const char *val, struct kernel_param *kp)
++static int set_ro(const char *val, const struct kernel_param *kp)
+ {
+ return kstrtouint(val, 10, (unsigned int *)&start_readonly);
+ }
diff --git a/drivers/md/md.h b/drivers/md/md.h
-index dfa57b4..7af9cda 100644
+index b5c4be7..d8da717 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
-@@ -102,13 +102,13 @@ struct md_rdev {
+@@ -96,13 +96,13 @@ struct md_rdev {
* only maintained for arrays that
* support hot removal
*/
@@ -49203,7 +53446,7 @@ index dfa57b4..7af9cda 100644
* for reporting to userspace and storing
* in superblock.
*/
-@@ -314,7 +314,7 @@ struct mddev {
+@@ -282,7 +282,7 @@ struct mddev {
sector_t resync_max_sectors; /* may be set by personality */
@@ -49212,7 +53455,7 @@ index dfa57b4..7af9cda 100644
* parity/replica mismatch found
*/
-@@ -492,7 +492,7 @@ extern void mddev_unlock(struct mddev *mddev);
+@@ -461,7 +461,7 @@ extern void mddev_unlock(struct mddev *mddev);
static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors)
{
@@ -49256,10 +53499,10 @@ index 3e6d115..ffecdeb 100644
/*----------------------------------------------------------------*/
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index 515554c..51df664 100644
+index bb5bce0..518482b 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
-@@ -1063,7 +1063,7 @@ static void make_request(struct mddev *mddev, struct bio * bio)
+@@ -1063,7 +1063,7 @@ static void raid1_make_request(struct mddev *mddev, struct bio * bio)
struct blk_plug_cb *cb;
struct raid1_plug_cb *plug = NULL;
int first_clone;
@@ -49296,7 +53539,7 @@ index 515554c..51df664 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 ebb0dd6..2be20c1 100644
+index e3fd725..9e365b2 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)
@@ -49377,10 +53620,10 @@ index ebb0dd6..2be20c1 100644
rdev_dec_pending(rdev, mddev);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
-index 10ce885..b98e542 100644
+index 32d5287..f9e1b58 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
-@@ -1112,23 +1112,23 @@ async_copy_data(int frombio, struct bio *bio, struct page **page,
+@@ -1110,23 +1110,23 @@ async_copy_data(int frombio, struct bio *bio, struct page **page,
struct bio_vec bvl;
struct bvec_iter iter;
struct page *bio_page;
@@ -49410,7 +53653,7 @@ index 10ce885..b98e542 100644
if (page_offset < 0) {
b_offset = -page_offset;
-@@ -2019,6 +2019,10 @@ static int grow_one_stripe(struct r5conf *conf, gfp_t gfp)
+@@ -2017,6 +2017,10 @@ static int grow_one_stripe(struct r5conf *conf, gfp_t gfp)
return 1;
}
@@ -49421,7 +53664,7 @@ index 10ce885..b98e542 100644
static int grow_stripes(struct r5conf *conf, int num)
{
struct kmem_cache *sc;
-@@ -2029,7 +2033,11 @@ static int grow_stripes(struct r5conf *conf, int num)
+@@ -2027,7 +2031,11 @@ static int grow_stripes(struct r5conf *conf, int num)
"raid%d-%s", conf->level, mdname(conf->mddev));
else
sprintf(conf->cache_name[0],
@@ -49433,7 +53676,7 @@ index 10ce885..b98e542 100644
sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]);
conf->active_name = 0;
-@@ -2332,21 +2340,21 @@ static void raid5_end_read_request(struct bio * bi)
+@@ -2330,21 +2338,21 @@ static void raid5_end_read_request(struct bio * bi)
mdname(conf->mddev), STRIPE_SECTORS,
(unsigned long long)s,
bdevname(rdev->bdev, b));
@@ -49459,7 +53702,7 @@ index 10ce885..b98e542 100644
if (test_bit(R5_ReadRepl, &sh->dev[i].flags))
printk_ratelimited(
KERN_WARNING
-@@ -2374,7 +2382,7 @@ static void raid5_end_read_request(struct bio * bi)
+@@ -2372,7 +2380,7 @@ static void raid5_end_read_request(struct bio * bi)
mdname(conf->mddev),
(unsigned long long)s,
bdn);
@@ -49468,7 +53711,7 @@ index 10ce885..b98e542 100644
> conf->max_nr_stripes)
printk(KERN_WARNING
"md/raid:%s: Too many read errors, failing device %s.\n",
-@@ -3746,7 +3754,7 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh,
+@@ -3744,7 +3752,7 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh,
*/
set_bit(STRIPE_INSYNC, &sh->state);
else {
@@ -49477,7 +53720,7 @@ index 10ce885..b98e542 100644
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
/* don't try to repair!! */
set_bit(STRIPE_INSYNC, &sh->state);
-@@ -3898,7 +3906,7 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh,
+@@ -3896,7 +3904,7 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh,
*/
}
} else {
@@ -49486,19 +53729,32 @@ index 10ce885..b98e542 100644
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
/* don't try to repair!! */
set_bit(STRIPE_INSYNC, &sh->state);
+diff --git a/drivers/media/dvb-core/dvb_net.c b/drivers/media/dvb-core/dvb_net.c
+index ce6a711..f87ae51 100644
+--- a/drivers/media/dvb-core/dvb_net.c
++++ b/drivers/media/dvb-core/dvb_net.c
+@@ -882,7 +882,7 @@ static int dvb_net_sec_callback(const u8 *buffer1, size_t buffer1_len,
+ return 0;
+ }
+
+-static int dvb_net_tx(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t dvb_net_tx(struct sk_buff *skb, struct net_device *dev)
+ {
+ 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 13bb57f..0ca21b2 100644
+index 560450a..4a72ed8 100644
--- a/drivers/media/dvb-core/dvbdev.c
+++ b/drivers/media/dvb-core/dvbdev.c
-@@ -272,7 +272,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
- const struct dvb_device *template, void *priv, int type)
+@@ -428,7 +428,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
+ int demux_sink_pads)
{
struct dvb_device *dvbdev;
- struct file_operations *dvbdevfops;
+ file_operations_no_const *dvbdevfops;
struct device *clsdev;
int minor;
- int id;
+ int id, ret;
diff --git a/drivers/media/dvb-frontends/af9033.h b/drivers/media/dvb-frontends/af9033.h
index 6ad22b6..6e90e2a 100644
--- a/drivers/media/dvb-frontends/af9033.h
@@ -49511,6 +53767,71 @@ index 6ad22b6..6e90e2a 100644
+} __no_const;
#endif /* AF9033_H */
+diff --git a/drivers/media/dvb-frontends/cx24116.c b/drivers/media/dvb-frontends/cx24116.c
+index 8814f36..2adf845 100644
+--- a/drivers/media/dvb-frontends/cx24116.c
++++ b/drivers/media/dvb-frontends/cx24116.c
+@@ -1462,7 +1462,7 @@ static int cx24116_tune(struct dvb_frontend *fe, bool re_tune,
+ return cx24116_read_status(fe, status);
+ }
+
+-static int cx24116_get_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo cx24116_get_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_HW;
+ }
+diff --git a/drivers/media/dvb-frontends/cx24117.c b/drivers/media/dvb-frontends/cx24117.c
+index 5f77bc8..6d34c94 100644
+--- a/drivers/media/dvb-frontends/cx24117.c
++++ b/drivers/media/dvb-frontends/cx24117.c
+@@ -1555,7 +1555,7 @@ static int cx24117_tune(struct dvb_frontend *fe, bool re_tune,
+ return cx24117_read_status(fe, status);
+ }
+
+-static int cx24117_get_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo cx24117_get_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_HW;
+ }
+diff --git a/drivers/media/dvb-frontends/cx24120.c b/drivers/media/dvb-frontends/cx24120.c
+index 3b0ef52..75afcce 100644
+--- a/drivers/media/dvb-frontends/cx24120.c
++++ b/drivers/media/dvb-frontends/cx24120.c
+@@ -1492,7 +1492,7 @@ static int cx24120_tune(struct dvb_frontend *fe, bool re_tune,
+ return cx24120_read_status(fe, status);
+ }
+
+-static int cx24120_get_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo cx24120_get_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_HW;
+ }
+diff --git a/drivers/media/dvb-frontends/cx24123.c b/drivers/media/dvb-frontends/cx24123.c
+index 0fe7fb1..b0bed47 100644
+--- a/drivers/media/dvb-frontends/cx24123.c
++++ b/drivers/media/dvb-frontends/cx24123.c
+@@ -1009,7 +1009,7 @@ static int cx24123_tune(struct dvb_frontend *fe,
+ return retval;
+ }
+
+-static int cx24123_get_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo cx24123_get_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_HW;
+ }
+diff --git a/drivers/media/dvb-frontends/cxd2820r_core.c b/drivers/media/dvb-frontends/cxd2820r_core.c
+index 24a457d..b206eca 100644
+--- a/drivers/media/dvb-frontends/cxd2820r_core.c
++++ b/drivers/media/dvb-frontends/cxd2820r_core.c
+@@ -571,7 +571,7 @@ error:
+ return DVBFE_ALGO_SEARCH_ERROR;
+ }
+
+-static int cxd2820r_get_frontend_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo cxd2820r_get_frontend_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_CUSTOM;
+ }
diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h
index 6ae9899..07d8543 100644
--- a/drivers/media/dvb-frontends/dib3000.h
@@ -49550,8 +53871,91 @@ index 2b8b4b1..8cef451 100644
#if IS_REACHABLE(CONFIG_DVB_DIB8000)
void *dib8000_attach(struct dib8000_ops *ops);
+diff --git a/drivers/media/dvb-frontends/hd29l2.c b/drivers/media/dvb-frontends/hd29l2.c
+index 40e359f..550aea4 100644
+--- a/drivers/media/dvb-frontends/hd29l2.c
++++ b/drivers/media/dvb-frontends/hd29l2.c
+@@ -555,7 +555,7 @@ err:
+ return DVBFE_ALGO_SEARCH_ERROR;
+ }
+
+-static int hd29l2_get_frontend_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo hd29l2_get_frontend_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_CUSTOM;
+ }
+diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c
+index 721fbc0..fe21cc9 100644
+--- a/drivers/media/dvb-frontends/lgdt3306a.c
++++ b/drivers/media/dvb-frontends/lgdt3306a.c
+@@ -1734,7 +1734,7 @@ static int lgdt3306a_get_tune_settings(struct dvb_frontend *fe,
+ return 0;
+ }
+
+-static int lgdt3306a_search(struct dvb_frontend *fe)
++static enum dvbfe_search lgdt3306a_search(struct dvb_frontend *fe)
+ {
+ enum fe_status status = 0;
+ int i, ret;
+diff --git a/drivers/media/dvb-frontends/mt312.c b/drivers/media/dvb-frontends/mt312.c
+index c36e676..6c3f140 100644
+--- a/drivers/media/dvb-frontends/mt312.c
++++ b/drivers/media/dvb-frontends/mt312.c
+@@ -381,7 +381,7 @@ static int mt312_send_master_cmd(struct dvb_frontend *fe,
+ }
+
+ static int mt312_send_burst(struct dvb_frontend *fe,
+- const enum fe_sec_mini_cmd c)
++ enum fe_sec_mini_cmd c)
+ {
+ struct mt312_state *state = fe->demodulator_priv;
+ const u8 mini_tab[2] = { 0x02, 0x03 };
+@@ -405,7 +405,7 @@ static int mt312_send_burst(struct dvb_frontend *fe,
+ }
+
+ static int mt312_set_tone(struct dvb_frontend *fe,
+- const enum fe_sec_tone_mode t)
++ enum fe_sec_tone_mode t)
+ {
+ struct mt312_state *state = fe->demodulator_priv;
+ const u8 tone_tab[2] = { 0x01, 0x00 };
+@@ -429,7 +429,7 @@ static int mt312_set_tone(struct dvb_frontend *fe,
+ }
+
+ static int mt312_set_voltage(struct dvb_frontend *fe,
+- const enum fe_sec_voltage v)
++ enum fe_sec_voltage v)
+ {
+ struct mt312_state *state = fe->demodulator_priv;
+ const u8 volt_tab[3] = { 0x00, 0x40, 0x00 };
+diff --git a/drivers/media/dvb-frontends/s921.c b/drivers/media/dvb-frontends/s921.c
+index d6a8fa6..b525f9c 100644
+--- a/drivers/media/dvb-frontends/s921.c
++++ b/drivers/media/dvb-frontends/s921.c
+@@ -464,7 +464,7 @@ static int s921_tune(struct dvb_frontend *fe,
+ return rc;
+ }
+
+-static int s921_get_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo s921_get_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_HW;
+ }
+diff --git a/drivers/media/pci/bt8xx/dst.c b/drivers/media/pci/bt8xx/dst.c
+index 4a90eee..2cec315 100644
+--- a/drivers/media/pci/bt8xx/dst.c
++++ b/drivers/media/pci/bt8xx/dst.c
+@@ -1683,7 +1683,7 @@ static int dst_tune_frontend(struct dvb_frontend* fe,
+ return 0;
+ }
+
+-static int dst_get_tuning_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo dst_get_tuning_algo(struct dvb_frontend *fe)
+ {
+ return dst_algo ? DVBFE_ALGO_HW : DVBFE_ALGO_SW;
+ }
diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
-index aef9acf..722ff02 100644
+index 5f331df..674b0e0 100644
--- a/drivers/media/pci/cx88/cx88-video.c
+++ b/drivers/media/pci/cx88/cx88-video.c
@@ -50,9 +50,9 @@ MODULE_VERSION(CX88_VERSION);
@@ -49568,7 +53972,7 @@ index aef9acf..722ff02 100644
module_param_array(video_nr, int, NULL, 0444);
module_param_array(vbi_nr, int, NULL, 0444);
diff --git a/drivers/media/pci/ivtv/ivtv-driver.c b/drivers/media/pci/ivtv/ivtv-driver.c
-index c2e60b4..5eeccc0 100644
+index 374033a..461c38c 100644
--- a/drivers/media/pci/ivtv/ivtv-driver.c
+++ b/drivers/media/pci/ivtv/ivtv-driver.c
@@ -83,7 +83,7 @@ static struct pci_device_id ivtv_pci_tbl[] = {
@@ -49580,6 +53984,32 @@ index c2e60b4..5eeccc0 100644
/* Parameter declarations */
static int cardtype[IVTV_MAX_CARDS];
+diff --git a/drivers/media/pci/pt1/va1j5jf8007s.c b/drivers/media/pci/pt1/va1j5jf8007s.c
+index d0e70dc0..e4fee68 100644
+--- a/drivers/media/pci/pt1/va1j5jf8007s.c
++++ b/drivers/media/pci/pt1/va1j5jf8007s.c
+@@ -102,7 +102,7 @@ static int va1j5jf8007s_read_snr(struct dvb_frontend *fe, u16 *snr)
+ return 0;
+ }
+
+-static int va1j5jf8007s_get_frontend_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo va1j5jf8007s_get_frontend_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_HW;
+ }
+diff --git a/drivers/media/pci/pt1/va1j5jf8007t.c b/drivers/media/pci/pt1/va1j5jf8007t.c
+index 0268f20..de9dff7 100644
+--- a/drivers/media/pci/pt1/va1j5jf8007t.c
++++ b/drivers/media/pci/pt1/va1j5jf8007t.c
+@@ -92,7 +92,7 @@ static int va1j5jf8007t_read_snr(struct dvb_frontend *fe, u16 *snr)
+ return 0;
+ }
+
+-static int va1j5jf8007t_get_frontend_algo(struct dvb_frontend *fe)
++static enum dvbfe_algo va1j5jf8007t_get_frontend_algo(struct dvb_frontend *fe)
+ {
+ return DVBFE_ALGO_HW;
+ }
diff --git a/drivers/media/pci/solo6x10/solo6x10-core.c b/drivers/media/pci/solo6x10/solo6x10-core.c
index f50d072..0214f25 100644
--- a/drivers/media/pci/solo6x10/solo6x10-core.c
@@ -49657,6 +54087,28 @@ index 4e7db89..bd7ef95 100644
};
struct zoran_buffer {
+diff --git a/drivers/media/pci/zoran/zoran_card.c b/drivers/media/pci/zoran/zoran_card.c
+index 9d2697f..65fb18f 100644
+--- a/drivers/media/pci/zoran/zoran_card.c
++++ b/drivers/media/pci/zoran/zoran_card.c
+@@ -1356,7 +1356,7 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ if (zr->card.video_codec) {
+ codec_name = codecid_to_modulename(zr->card.video_codec);
+ if (codec_name) {
+- result = request_module(codec_name);
++ result = request_module("%s", codec_name);
+ if (result) {
+ dprintk(1,
+ KERN_ERR
+@@ -1368,7 +1368,7 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ if (zr->card.video_vfe) {
+ vfe_name = codecid_to_modulename(zr->card.video_vfe);
+ if (vfe_name) {
+- result = request_module(vfe_name);
++ result = request_module("%s", vfe_name);
+ if (result < 0) {
+ dprintk(1,
+ KERN_ERR
diff --git a/drivers/media/pci/zoran/zoran_driver.c b/drivers/media/pci/zoran/zoran_driver.c
index 80caa70..d076ecf 100644
--- a/drivers/media/pci/zoran/zoran_driver.c
@@ -49754,7 +54206,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 dc1c679..30aae739b 100644
+index d9e7f03..2732585 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)
@@ -49866,6 +54318,19 @@ index dd002a4..7fafd8a 100644
.release = mxr_vp_layer_release,
.buffer_set = mxr_vp_buffer_set,
.stream_set = mxr_vp_stream_set,
+diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c
+index 46c7186..47130c8 100644
+--- a/drivers/media/platform/soc_camera/soc_camera.c
++++ b/drivers/media/platform/soc_camera/soc_camera.c
+@@ -1791,7 +1791,7 @@ static int soc_camera_probe(struct soc_camera_host *ici,
+ goto eadd;
+
+ if (shd->module_name)
+- ret = request_module(shd->module_name);
++ ret = request_module("%s", shd->module_name);
+
+ ret = shd->add_device(icd);
+ if (ret < 0)
diff --git a/drivers/media/platform/sti/c8sectpfe/Kconfig b/drivers/media/platform/sti/c8sectpfe/Kconfig
index 7420a50..e6f31a0 100644
--- a/drivers/media/platform/sti/c8sectpfe/Kconfig
@@ -49904,7 +54369,7 @@ index 82affae..42833ec 100644
}
diff --git a/drivers/media/radio/radio-maxiradio.c b/drivers/media/radio/radio-maxiradio.c
-index 5236035..c622c74 100644
+index 70fd8e8..0088740 100644
--- a/drivers/media/radio/radio-maxiradio.c
+++ b/drivers/media/radio/radio-maxiradio.c
@@ -61,7 +61,7 @@ MODULE_PARM_DESC(radio_nr, "Radio device number");
@@ -49917,7 +54382,7 @@ index 5236035..c622c74 100644
#define PCI_VENDOR_ID_GUILLEMOT 0x5046
#define PCI_DEVICE_ID_GUILLEMOT_MAXIRADIO 0x1001
diff --git a/drivers/media/radio/radio-shark.c b/drivers/media/radio/radio-shark.c
-index 050b3bb..79f62b9 100644
+index 85667a9..ec4dc0a 100644
--- a/drivers/media/radio/radio-shark.c
+++ b/drivers/media/radio/radio-shark.c
@@ -79,7 +79,7 @@ struct shark_device {
@@ -49930,7 +54395,7 @@ index 050b3bb..79f62b9 100644
static void shark_write_val(struct snd_tea575x *tea, u32 val)
{
diff --git a/drivers/media/radio/radio-shark2.c b/drivers/media/radio/radio-shark2.c
-index 8654e0d..0608a64 100644
+index 0e65a85..3fa6f5c 100644
--- a/drivers/media/radio/radio-shark2.c
+++ b/drivers/media/radio/radio-shark2.c
@@ -74,7 +74,7 @@ struct shark_device {
@@ -49943,7 +54408,7 @@ index 8654e0d..0608a64 100644
static int shark_write_reg(struct radio_tea5777 *tea, u64 reg)
{
diff --git a/drivers/media/radio/radio-si476x.c b/drivers/media/radio/radio-si476x.c
-index 9cbb8cd..2bf2ff3 100644
+index 859f0c0..46e3c75 100644
--- a/drivers/media/radio/radio-si476x.c
+++ b/drivers/media/radio/radio-si476x.c
@@ -1445,7 +1445,7 @@ static int si476x_radio_probe(struct platform_device *pdev)
@@ -50674,8 +55139,147 @@ index 6c3c477..6c435a4 100644
return 1;
}
+diff --git a/drivers/media/usb/pvrusb2/pvrusb2-context.c b/drivers/media/usb/pvrusb2/pvrusb2-context.c
+index fd888a6..0d01210 100644
+--- a/drivers/media/usb/pvrusb2/pvrusb2-context.c
++++ b/drivers/media/usb/pvrusb2/pvrusb2-context.c
+@@ -103,8 +103,10 @@ static void pvr2_context_destroy(struct pvr2_context *mp)
+ }
+
+
+-static void pvr2_context_notify(struct pvr2_context *mp)
++static void pvr2_context_notify(void *_mp)
+ {
++ struct pvr2_context *mp = _mp;
++
+ pvr2_context_set_notify(mp,!0);
+ }
+
+@@ -119,9 +121,7 @@ static void pvr2_context_check(struct pvr2_context *mp)
+ pvr2_trace(PVR2_TRACE_CTXT,
+ "pvr2_context %p (initialize)", mp);
+ /* Finish hardware initialization */
+- if (pvr2_hdw_initialize(mp->hdw,
+- (void (*)(void *))pvr2_context_notify,
+- mp)) {
++ if (pvr2_hdw_initialize(mp->hdw, pvr2_context_notify, mp)) {
+ mp->video_stream.stream =
+ pvr2_hdw_get_video_stream(mp->hdw);
+ /* Trigger interface initialization. By doing this
+diff --git a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
+index 8c95793..2309b9e 100644
+--- a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
++++ b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
+@@ -101,8 +101,10 @@ static int pvr2_dvb_feed_thread(void *data)
+ return stat;
+ }
+
+-static void pvr2_dvb_notify(struct pvr2_dvb_adapter *adap)
++static void pvr2_dvb_notify(void *_adap)
+ {
++ struct pvr2_dvb_adapter *adap = _adap;
++
+ wake_up(&adap->buffer_wait_data);
+ }
+
+@@ -161,8 +163,7 @@ static int pvr2_dvb_stream_do_start(struct pvr2_dvb_adapter *adap)
+ if (!(adap->buffer_storage[idx])) return -ENOMEM;
+ }
+
+- pvr2_stream_set_callback(pvr->video_stream.stream,
+- (pvr2_stream_callback) pvr2_dvb_notify, adap);
++ pvr2_stream_set_callback(pvr->video_stream.stream, pvr2_dvb_notify, adap);
+
+ ret = pvr2_stream_set_buffer_count(stream, PVR2_DVB_BUFFER_COUNT);
+ if (ret < 0) return ret;
+diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+index 0533ef2..2248d97 100644
+--- 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)
+
+ cm = &hdw->hdw_desc->client_modules;
+ for (idx = 0; idx < cm->cnt; idx++) {
+- request_module(cm->lst[idx]);
++ request_module("%s", cm->lst[idx]);
+ }
+
+ ct = &hdw->hdw_desc->client_table;
+diff --git a/drivers/media/usb/pvrusb2/pvrusb2-std.c b/drivers/media/usb/pvrusb2/pvrusb2-std.c
+index 9a596a3..38de071 100644
+--- a/drivers/media/usb/pvrusb2/pvrusb2-std.c
++++ b/drivers/media/usb/pvrusb2/pvrusb2-std.c
+@@ -216,7 +216,7 @@ unsigned int pvr2_std_id_to_str(char *bufPtr, unsigned int bufSize,
+ bufSize -= c2;
+ bufPtr += c2;
+ c2 = scnprintf(bufPtr,bufSize,
+- ip->name);
++ "%s", ip->name);
+ c1 += c2;
+ bufSize -= c2;
+ bufPtr += c2;
+diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
+index 81f788b..9619f47 100644
+--- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
++++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
+@@ -1069,8 +1069,10 @@ static int pvr2_v4l2_open(struct file *file)
+ }
+
+
+-static void pvr2_v4l2_notify(struct pvr2_v4l2_fh *fhp)
++static void pvr2_v4l2_notify(void *_fhp)
+ {
++ struct pvr2_v4l2_fh *fhp = _fhp;
++
+ wake_up(&fhp->wait_data);
+ }
+
+@@ -1103,7 +1105,7 @@ static int pvr2_v4l2_iosetup(struct pvr2_v4l2_fh *fh)
+
+ hdw = fh->channel.mc_head->hdw;
+ sp = fh->pdi->stream->stream;
+- pvr2_stream_set_callback(sp,(pvr2_stream_callback)pvr2_v4l2_notify,fh);
++ pvr2_stream_set_callback(sp,pvr2_v4l2_notify,fh);
+ pvr2_hdw_set_stream_type(hdw,fh->pdi->config);
+ if ((ret = pvr2_hdw_set_streaming(hdw,!0)) < 0) return ret;
+ return pvr2_ioread_set_enabled(fh->rhp,!0);
+diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
+index 4e71488..1bcd8a5 100644
+--- a/drivers/media/usb/uvc/uvc_driver.c
++++ b/drivers/media/usb/uvc/uvc_driver.c
+@@ -2058,7 +2058,7 @@ static int uvc_reset_resume(struct usb_interface *intf)
+ * Module parameters
+ */
+
+-static int uvc_clock_param_get(char *buffer, struct kernel_param *kp)
++static int uvc_clock_param_get(char *buffer, const struct kernel_param *kp)
+ {
+ if (uvc_clock_param == CLOCK_MONOTONIC)
+ return sprintf(buffer, "CLOCK_MONOTONIC");
+@@ -2066,7 +2066,7 @@ static int uvc_clock_param_get(char *buffer, struct kernel_param *kp)
+ return sprintf(buffer, "CLOCK_REALTIME");
+ }
+
+-static int uvc_clock_param_set(const char *val, struct kernel_param *kp)
++static int uvc_clock_param_set(const char *val, const struct kernel_param *kp)
+ {
+ if (strncasecmp(val, "clock_", strlen("clock_")) == 0)
+ val += strlen("clock_");
+diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
+index 5b80850..97b8443 100644
+--- a/drivers/media/v4l2-core/v4l2-common.c
++++ b/drivers/media/v4l2-core/v4l2-common.c
+@@ -268,7 +268,7 @@ struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
+ BUG_ON(!v4l2_dev);
+
+ if (info->modalias[0])
+- request_module(info->modalias);
++ request_module("%s", info->modalias);
+
+ spi = spi_new_device(master, info);
+
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
-index f38c076..072bb90 100644
+index 019644f..a988084 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -448,7 +448,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
@@ -50733,7 +55337,7 @@ index f38c076..072bb90 100644
}
diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c
-index 5b0a30b..1974b38 100644
+index 06fa5f1..2231dda 100644
--- a/drivers/media/v4l2-core/v4l2-device.c
+++ b/drivers/media/v4l2-core/v4l2-device.c
@@ -74,9 +74,9 @@ int v4l2_device_put(struct v4l2_device *v4l2_dev)
@@ -50749,12 +55353,210 @@ index 5b0a30b..1974b38 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 7486af2..a1f2e87 100644
+index 8a018c6..83f25a7 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
-@@ -2382,7 +2382,8 @@ struct v4l2_ioctl_info {
- struct file *file, void *fh, void *p);
- } u;
+@@ -2372,49 +2372,222 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops,
+ return -ENOTTY;
+ }
+
++static int v4l_vidioc_g_fbuf(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_fbuf(file, fh, arg);
++}
++
++static int v4l_vidioc_s_fbuf(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_fbuf(file, fh, arg);
++}
++
++static int v4l_vidioc_expbuf(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_expbuf(file, fh, arg);
++}
++
++static int v4l_vidioc_g_std(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_std(file, fh, arg);
++}
++
++static int v4l_vidioc_g_audio(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_audio(file, fh, arg);
++}
++
++static int v4l_vidioc_s_audio(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_audio(file, fh, arg);
++}
++
++static int v4l_vidioc_g_input(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_input(file, fh, arg);
++}
++
++static int v4l_vidioc_g_edid(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_edid(file, fh, arg);
++}
++
++static int v4l_vidioc_s_edid(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_edid(file, fh, arg);
++}
++
++static int v4l_vidioc_g_output(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_output(file, fh, arg);
++}
++
++static int v4l_vidioc_g_audout(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_audout(file, fh, arg);
++}
++
++static int v4l_vidioc_s_audout(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_audout(file, fh, arg);
++}
++
++static int v4l_vidioc_s_modulator(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_modulator(file, fh, arg);
++}
++
++static int v4l_vidioc_g_selection(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_selection(file, fh, arg);
++}
++
++static int v4l_vidioc_s_selection(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_selection(file, fh, arg);
++}
++
++static int v4l_vidioc_g_jpegcomp(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_jpegcomp(file, fh, arg);
++}
++
++static int v4l_vidioc_s_jpegcomp(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_jpegcomp(file, fh, arg);
++}
++
++static int v4l_vidioc_enumaudio(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_enumaudio(file, fh, arg);
++}
++
++static int v4l_vidioc_enumaudout(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_enumaudout(file, fh, arg);
++}
++
++static int v4l_vidioc_enum_framesizes(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_enum_framesizes(file, fh, arg);
++}
++
++static int v4l_vidioc_enum_frameintervals(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_enum_frameintervals(file, fh, arg);
++}
++
++static int v4l_vidioc_g_enc_index(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_enc_index(file, fh, arg);
++}
++
++static int v4l_vidioc_encoder_cmd(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_encoder_cmd(file, fh, arg);
++}
++
++static int v4l_vidioc_try_encoder_cmd(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_try_encoder_cmd(file, fh, arg);
++}
++
++static int v4l_vidioc_decoder_cmd(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_decoder_cmd(file, fh, arg);
++}
++
++static int v4l_vidioc_try_decoder_cmd(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_try_decoder_cmd(file, fh, arg);
++}
++
++static int v4l_vidioc_s_dv_timings(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_s_dv_timings(file, fh, arg);
++}
++
++static int v4l_vidioc_g_dv_timings(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_g_dv_timings(file, fh, arg);
++}
++
++static int v4l_vidioc_enum_dv_timings(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_enum_dv_timings(file, fh, arg);
++}
++
++static int v4l_vidioc_query_dv_timings(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_query_dv_timings(file, fh, arg);
++}
++
++static int v4l_vidioc_dv_timings_cap(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *arg)
++{
++ return ops->vidioc_dv_timings_cap(file, fh, arg);
++}
++
+ struct v4l2_ioctl_info {
+ unsigned int ioctl;
+ u32 flags;
+ const char * const name;
+- union {
+- u32 offset;
+- int (*func)(const struct v4l2_ioctl_ops *ops,
+- struct file *file, void *fh, void *p);
+- } u;
++ int (*func)(const struct v4l2_ioctl_ops *ops,
++ struct file *file, void *fh, void *p);
void (*debug)(const void *arg, bool write_only);
-};
+} __do_const;
@@ -50762,7 +55564,152 @@ index 7486af2..a1f2e87 100644
/* This control needs a priority check */
#define INFO_FL_PRIO (1 << 0)
-@@ -2566,7 +2567,7 @@ static long __video_do_ioctl(struct file *file,
+ /* This control can be valid if the filehandle passes a control handler. */
+ #define INFO_FL_CTRL (1 << 1)
+-/* This is a standard ioctl, no need for special code */
+-#define INFO_FL_STD (1 << 2)
+ /* This is ioctl has its own function */
+-#define INFO_FL_FUNC (1 << 3)
++#define INFO_FL_FUNC (1 << 2)
+ /* Queuing ioctl */
+-#define INFO_FL_QUEUE (1 << 4)
++#define INFO_FL_QUEUE (1 << 3)
+ /* Zero struct from after the field to the end */
+ #define INFO_FL_CLEAR(v4l2_struct, field) \
+ ((offsetof(struct v4l2_struct, field) + \
+ sizeof(((struct v4l2_struct *)0)->field)) << 16)
+ #define INFO_FL_CLEAR_MASK (_IOC_SIZEMASK << 16)
+
+-#define IOCTL_INFO_STD(_ioctl, _vidioc, _debug, _flags) \
+- [_IOC_NR(_ioctl)] = { \
+- .ioctl = _ioctl, \
+- .flags = _flags | INFO_FL_STD, \
+- .name = #_ioctl, \
+- .u.offset = offsetof(struct v4l2_ioctl_ops, _vidioc), \
+- .debug = _debug, \
+- }
+-
+ #define IOCTL_INFO_FNC(_ioctl, _func, _debug, _flags) \
+ [_IOC_NR(_ioctl)] = { \
+ .ioctl = _ioctl, \
+ .flags = _flags | INFO_FL_FUNC, \
+ .name = #_ioctl, \
+- .u.func = _func, \
++ .func = _func, \
+ .debug = _debug, \
+ }
+
+@@ -2425,17 +2598,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)),
+- IOCTL_INFO_STD(VIDIOC_G_FBUF, vidioc_g_fbuf, v4l_print_framebuffer, 0),
+- IOCTL_INFO_STD(VIDIOC_S_FBUF, vidioc_s_fbuf, v4l_print_framebuffer, INFO_FL_PRIO),
++ IOCTL_INFO_FNC(VIDIOC_G_FBUF, v4l_vidioc_g_fbuf, v4l_print_framebuffer, 0),
++ IOCTL_INFO_FNC(VIDIOC_S_FBUF, v4l_vidioc_s_fbuf, v4l_print_framebuffer, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_OVERLAY, v4l_overlay, v4l_print_u32, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_QBUF, v4l_qbuf, v4l_print_buffer, INFO_FL_QUEUE),
+- IOCTL_INFO_STD(VIDIOC_EXPBUF, vidioc_expbuf, v4l_print_exportbuffer, INFO_FL_QUEUE | INFO_FL_CLEAR(v4l2_exportbuffer, flags)),
++ IOCTL_INFO_FNC(VIDIOC_EXPBUF, v4l_vidioc_expbuf, v4l_print_exportbuffer, INFO_FL_QUEUE | INFO_FL_CLEAR(v4l2_exportbuffer, flags)),
+ IOCTL_INFO_FNC(VIDIOC_DQBUF, v4l_dqbuf, v4l_print_buffer, INFO_FL_QUEUE),
+ IOCTL_INFO_FNC(VIDIOC_STREAMON, v4l_streamon, v4l_print_buftype, INFO_FL_PRIO | INFO_FL_QUEUE),
+ IOCTL_INFO_FNC(VIDIOC_STREAMOFF, v4l_streamoff, v4l_print_buftype, INFO_FL_PRIO | INFO_FL_QUEUE),
+ IOCTL_INFO_FNC(VIDIOC_G_PARM, v4l_g_parm, v4l_print_streamparm, INFO_FL_CLEAR(v4l2_streamparm, type)),
+ IOCTL_INFO_FNC(VIDIOC_S_PARM, v4l_s_parm, v4l_print_streamparm, INFO_FL_PRIO),
+- IOCTL_INFO_STD(VIDIOC_G_STD, vidioc_g_std, v4l_print_std, 0),
++ IOCTL_INFO_FNC(VIDIOC_G_STD, v4l_vidioc_g_std, v4l_print_std, 0),
+ IOCTL_INFO_FNC(VIDIOC_S_STD, v4l_s_std, v4l_print_std, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_ENUMSTD, v4l_enumstd, v4l_print_standard, INFO_FL_CLEAR(v4l2_standard, index)),
+ IOCTL_INFO_FNC(VIDIOC_ENUMINPUT, v4l_enuminput, v4l_print_enuminput, INFO_FL_CLEAR(v4l2_input, index)),
+@@ -2443,19 +2616,19 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
+ 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),
+- IOCTL_INFO_STD(VIDIOC_G_AUDIO, vidioc_g_audio, v4l_print_audio, 0),
+- IOCTL_INFO_STD(VIDIOC_S_AUDIO, vidioc_s_audio, v4l_print_audio, INFO_FL_PRIO),
++ IOCTL_INFO_FNC(VIDIOC_G_AUDIO, v4l_vidioc_g_audio, v4l_print_audio, 0),
++ IOCTL_INFO_FNC(VIDIOC_S_AUDIO, v4l_vidioc_s_audio, v4l_print_audio, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_QUERYCTRL, v4l_queryctrl, v4l_print_queryctrl, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_queryctrl, id)),
+ IOCTL_INFO_FNC(VIDIOC_QUERYMENU, v4l_querymenu, v4l_print_querymenu, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_querymenu, index)),
+- IOCTL_INFO_STD(VIDIOC_G_INPUT, vidioc_g_input, v4l_print_u32, 0),
++ IOCTL_INFO_FNC(VIDIOC_G_INPUT, v4l_vidioc_g_input, v4l_print_u32, 0),
+ IOCTL_INFO_FNC(VIDIOC_S_INPUT, v4l_s_input, v4l_print_u32, INFO_FL_PRIO),
+- IOCTL_INFO_STD(VIDIOC_G_EDID, vidioc_g_edid, v4l_print_edid, 0),
+- IOCTL_INFO_STD(VIDIOC_S_EDID, vidioc_s_edid, v4l_print_edid, INFO_FL_PRIO),
+- IOCTL_INFO_STD(VIDIOC_G_OUTPUT, vidioc_g_output, v4l_print_u32, 0),
++ IOCTL_INFO_FNC(VIDIOC_G_EDID, v4l_vidioc_g_edid, v4l_print_edid, 0),
++ IOCTL_INFO_FNC(VIDIOC_S_EDID, v4l_vidioc_s_edid, v4l_print_edid, INFO_FL_PRIO),
++ IOCTL_INFO_FNC(VIDIOC_G_OUTPUT, v4l_vidioc_g_output, v4l_print_u32, 0),
+ IOCTL_INFO_FNC(VIDIOC_S_OUTPUT, v4l_s_output, v4l_print_u32, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_ENUMOUTPUT, v4l_enumoutput, v4l_print_enumoutput, INFO_FL_CLEAR(v4l2_output, index)),
+- IOCTL_INFO_STD(VIDIOC_G_AUDOUT, vidioc_g_audout, v4l_print_audioout, 0),
+- IOCTL_INFO_STD(VIDIOC_S_AUDOUT, vidioc_s_audout, v4l_print_audioout, INFO_FL_PRIO),
++ IOCTL_INFO_FNC(VIDIOC_G_AUDOUT, v4l_vidioc_g_audout, v4l_print_audioout, 0),
++ IOCTL_INFO_FNC(VIDIOC_S_AUDOUT, v4l_vidioc_s_audout, v4l_print_audioout, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_G_MODULATOR, v4l_g_modulator, v4l_print_modulator, INFO_FL_CLEAR(v4l2_modulator, index)),
+ IOCTL_INFO_FNC(VIDIOC_S_MODULATOR, v4l_s_modulator, v4l_print_modulator, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_G_FREQUENCY, v4l_g_frequency, v4l_print_frequency, INFO_FL_CLEAR(v4l2_frequency, tuner)),
+@@ -2463,14 +2636,14 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
+ 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),
+- IOCTL_INFO_STD(VIDIOC_G_SELECTION, vidioc_g_selection, v4l_print_selection, INFO_FL_CLEAR(v4l2_selection, r)),
+- IOCTL_INFO_STD(VIDIOC_S_SELECTION, vidioc_s_selection, v4l_print_selection, INFO_FL_PRIO | INFO_FL_CLEAR(v4l2_selection, r)),
+- IOCTL_INFO_STD(VIDIOC_G_JPEGCOMP, vidioc_g_jpegcomp, v4l_print_jpegcompression, 0),
+- IOCTL_INFO_STD(VIDIOC_S_JPEGCOMP, vidioc_s_jpegcomp, v4l_print_jpegcompression, INFO_FL_PRIO),
++ IOCTL_INFO_FNC(VIDIOC_G_SELECTION, v4l_vidioc_g_selection, v4l_print_selection, INFO_FL_CLEAR(v4l2_selection, r)),
++ IOCTL_INFO_FNC(VIDIOC_S_SELECTION, v4l_vidioc_s_selection, v4l_print_selection, INFO_FL_PRIO | INFO_FL_CLEAR(v4l2_selection, r)),
++ IOCTL_INFO_FNC(VIDIOC_G_JPEGCOMP, v4l_vidioc_g_jpegcomp, v4l_print_jpegcompression, 0),
++ IOCTL_INFO_FNC(VIDIOC_S_JPEGCOMP, v4l_vidioc_s_jpegcomp, v4l_print_jpegcompression, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_QUERYSTD, v4l_querystd, v4l_print_std, 0),
+ IOCTL_INFO_FNC(VIDIOC_TRY_FMT, v4l_try_fmt, v4l_print_format, 0),
+- IOCTL_INFO_STD(VIDIOC_ENUMAUDIO, vidioc_enumaudio, v4l_print_audio, INFO_FL_CLEAR(v4l2_audio, index)),
+- IOCTL_INFO_STD(VIDIOC_ENUMAUDOUT, vidioc_enumaudout, v4l_print_audioout, INFO_FL_CLEAR(v4l2_audioout, index)),
++ IOCTL_INFO_FNC(VIDIOC_ENUMAUDIO, v4l_vidioc_enumaudio, v4l_print_audio, INFO_FL_CLEAR(v4l2_audio, index)),
++ IOCTL_INFO_FNC(VIDIOC_ENUMAUDOUT, v4l_vidioc_enumaudout, v4l_print_audioout, INFO_FL_CLEAR(v4l2_audioout, index)),
+ IOCTL_INFO_FNC(VIDIOC_G_PRIORITY, v4l_g_priority, v4l_print_u32, 0),
+ IOCTL_INFO_FNC(VIDIOC_S_PRIORITY, v4l_s_priority, v4l_print_u32, INFO_FL_PRIO),
+ IOCTL_INFO_FNC(VIDIOC_G_SLICED_VBI_CAP, v4l_g_sliced_vbi_cap, v4l_print_sliced_vbi_cap, INFO_FL_CLEAR(v4l2_sliced_vbi_cap, type)),
+@@ -2478,26 +2651,26 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = {
+ 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),
+- IOCTL_INFO_STD(VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes, v4l_print_frmsizeenum, INFO_FL_CLEAR(v4l2_frmsizeenum, pixel_format)),
+- IOCTL_INFO_STD(VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals, v4l_print_frmivalenum, INFO_FL_CLEAR(v4l2_frmivalenum, height)),
+- IOCTL_INFO_STD(VIDIOC_G_ENC_INDEX, vidioc_g_enc_index, v4l_print_enc_idx, 0),
+- IOCTL_INFO_STD(VIDIOC_ENCODER_CMD, vidioc_encoder_cmd, v4l_print_encoder_cmd, INFO_FL_PRIO | INFO_FL_CLEAR(v4l2_encoder_cmd, flags)),
+- IOCTL_INFO_STD(VIDIOC_TRY_ENCODER_CMD, vidioc_try_encoder_cmd, v4l_print_encoder_cmd, INFO_FL_CLEAR(v4l2_encoder_cmd, flags)),
+- IOCTL_INFO_STD(VIDIOC_DECODER_CMD, vidioc_decoder_cmd, v4l_print_decoder_cmd, INFO_FL_PRIO),
+- IOCTL_INFO_STD(VIDIOC_TRY_DECODER_CMD, vidioc_try_decoder_cmd, v4l_print_decoder_cmd, 0),
++ IOCTL_INFO_FNC(VIDIOC_ENUM_FRAMESIZES, v4l_vidioc_enum_framesizes, v4l_print_frmsizeenum, INFO_FL_CLEAR(v4l2_frmsizeenum, pixel_format)),
++ IOCTL_INFO_FNC(VIDIOC_ENUM_FRAMEINTERVALS, v4l_vidioc_enum_frameintervals, v4l_print_frmivalenum, INFO_FL_CLEAR(v4l2_frmivalenum, height)),
++ IOCTL_INFO_FNC(VIDIOC_G_ENC_INDEX, v4l_vidioc_g_enc_index, v4l_print_enc_idx, 0),
++ IOCTL_INFO_FNC(VIDIOC_ENCODER_CMD, v4l_vidioc_encoder_cmd, v4l_print_encoder_cmd, INFO_FL_PRIO | INFO_FL_CLEAR(v4l2_encoder_cmd, flags)),
++ IOCTL_INFO_FNC(VIDIOC_TRY_ENCODER_CMD, v4l_vidioc_try_encoder_cmd, v4l_print_encoder_cmd, INFO_FL_CLEAR(v4l2_encoder_cmd, flags)),
++ IOCTL_INFO_FNC(VIDIOC_DECODER_CMD, v4l_vidioc_decoder_cmd, v4l_print_decoder_cmd, INFO_FL_PRIO),
++ IOCTL_INFO_FNC(VIDIOC_TRY_DECODER_CMD, v4l_vidioc_try_decoder_cmd, v4l_print_decoder_cmd, 0),
+ IOCTL_INFO_FNC(VIDIOC_DBG_S_REGISTER, v4l_dbg_s_register, v4l_print_dbg_register, 0),
+ IOCTL_INFO_FNC(VIDIOC_DBG_G_REGISTER, v4l_dbg_g_register, v4l_print_dbg_register, 0),
+ IOCTL_INFO_FNC(VIDIOC_S_HW_FREQ_SEEK, v4l_s_hw_freq_seek, v4l_print_hw_freq_seek, INFO_FL_PRIO),
+- IOCTL_INFO_STD(VIDIOC_S_DV_TIMINGS, vidioc_s_dv_timings, v4l_print_dv_timings, INFO_FL_PRIO),
+- IOCTL_INFO_STD(VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings, v4l_print_dv_timings, 0),
++ IOCTL_INFO_FNC(VIDIOC_S_DV_TIMINGS, v4l_vidioc_s_dv_timings, v4l_print_dv_timings, INFO_FL_PRIO),
++ IOCTL_INFO_FNC(VIDIOC_G_DV_TIMINGS, v4l_vidioc_g_dv_timings, v4l_print_dv_timings, 0),
+ IOCTL_INFO_FNC(VIDIOC_DQEVENT, v4l_dqevent, v4l_print_event, 0),
+ IOCTL_INFO_FNC(VIDIOC_SUBSCRIBE_EVENT, v4l_subscribe_event, v4l_print_event_subscription, 0),
+ IOCTL_INFO_FNC(VIDIOC_UNSUBSCRIBE_EVENT, v4l_unsubscribe_event, v4l_print_event_subscription, 0),
+ IOCTL_INFO_FNC(VIDIOC_CREATE_BUFS, v4l_create_bufs, v4l_print_create_buffers, INFO_FL_PRIO | INFO_FL_QUEUE),
+ IOCTL_INFO_FNC(VIDIOC_PREPARE_BUF, v4l_prepare_buf, v4l_print_buffer, INFO_FL_QUEUE),
+- IOCTL_INFO_STD(VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings, v4l_print_enum_dv_timings, 0),
+- IOCTL_INFO_STD(VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings, v4l_print_dv_timings, 0),
+- IOCTL_INFO_STD(VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap, v4l_print_dv_timings_cap, INFO_FL_CLEAR(v4l2_dv_timings_cap, type)),
++ IOCTL_INFO_FNC(VIDIOC_ENUM_DV_TIMINGS, v4l_vidioc_enum_dv_timings, v4l_print_enum_dv_timings, 0),
++ IOCTL_INFO_FNC(VIDIOC_QUERY_DV_TIMINGS, v4l_vidioc_query_dv_timings, v4l_print_dv_timings, 0),
++ IOCTL_INFO_FNC(VIDIOC_DV_TIMINGS_CAP, v4l_vidioc_dv_timings_cap, v4l_print_dv_timings_cap, INFO_FL_CLEAR(v4l2_dv_timings_cap, type)),
+ IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0),
+ IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)),
+ IOCTL_INFO_FNC(VIDIOC_QUERY_EXT_CTRL, v4l_query_ext_ctrl, v4l_print_query_ext_ctrl, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_query_ext_ctrl, id)),
+@@ -2566,7 +2739,7 @@ static long __video_do_ioctl(struct file *file,
struct video_device *vfd = video_devdata(file);
const struct v4l2_ioctl_ops *ops = vfd->ioctl_ops;
bool write_only = false;
@@ -50771,7 +55718,24 @@ index 7486af2..a1f2e87 100644
const struct v4l2_ioctl_info *info;
void *fh = file->private_data;
struct v4l2_fh *vfh = NULL;
-@@ -2657,7 +2658,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
+@@ -2602,14 +2775,8 @@ static long __video_do_ioctl(struct file *file,
+ }
+
+ write_only = _IOC_DIR(cmd) == _IOC_WRITE;
+- if (info->flags & INFO_FL_STD) {
+- typedef int (*vidioc_op)(struct file *file, void *fh, void *p);
+- const void *p = vfd->ioctl_ops;
+- const vidioc_op *vidioc = p + info->u.offset;
+-
+- ret = (*vidioc)(file, fh, arg);
+- } else if (info->flags & INFO_FL_FUNC) {
+- ret = info->u.func(ops, file, fh, arg);
++ if (info->flags & INFO_FL_FUNC) {
++ ret = info->func(ops, file, fh, arg);
+ } else if (!ops->vidioc_default) {
+ ret = -ENOTTY;
+ } else {
+@@ -2657,7 +2824,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
ret = -EINVAL;
break;
}
@@ -50780,7 +55744,7 @@ index 7486af2..a1f2e87 100644
*kernel_ptr = (void **)&buf->m.planes;
*array_size = sizeof(struct v4l2_plane) * buf->length;
ret = 1;
-@@ -2674,7 +2675,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
+@@ -2674,7 +2841,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
ret = -EINVAL;
break;
}
@@ -50789,7 +55753,7 @@ index 7486af2..a1f2e87 100644
*kernel_ptr = (void **)&edid->edid;
*array_size = edid->blocks * 128;
ret = 1;
-@@ -2692,7 +2693,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
+@@ -2692,7 +2859,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size,
ret = -EINVAL;
break;
}
@@ -50798,7 +55762,7 @@ index 7486af2..a1f2e87 100644
*kernel_ptr = (void **)&ctrls->controls;
*array_size = sizeof(struct v4l2_ext_control)
* ctrls->count;
-@@ -2793,7 +2794,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
+@@ -2793,7 +2960,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
}
if (has_array_args) {
@@ -50854,9 +55818,27 @@ index 6515dfc..3d39b80 100644
gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT;
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
-index 5dcc031..e08ecd2 100644
+index 5dcc031..d5e16c2 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
+@@ -99,7 +99,7 @@ module_param(mpt_channel_mapping, int, 0);
+ MODULE_PARM_DESC(mpt_channel_mapping, " Mapping id's to channels (default=0)");
+
+ static int mpt_debug_level;
+-static int mpt_set_debug_level(const char *val, struct kernel_param *kp);
++static int mpt_set_debug_level(const char *val, const struct kernel_param *kp);
+ module_param_call(mpt_debug_level, mpt_set_debug_level, param_get_int,
+ &mpt_debug_level, 0600);
+ MODULE_PARM_DESC(mpt_debug_level,
+@@ -242,7 +242,7 @@ pci_enable_io_access(struct pci_dev *pdev)
+ pci_write_config_word(pdev, PCI_COMMAND, command_reg);
+ }
+
+-static int mpt_set_debug_level(const char *val, struct kernel_param *kp)
++static int mpt_set_debug_level(const char *val, const struct kernel_param *kp)
+ {
+ int ret = param_set_int(val, kp);
+ MPT_ADAPTER *ioc;
@@ -6722,8 +6722,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v)
seq_printf(m, " MaxChainDepth = 0x%02x frames\n", ioc->facts.MaxChainDepth);
seq_printf(m, " MinBlockSize = 0x%02x bytes\n", 4*ioc->facts.BlockSize);
@@ -50883,6 +55865,19 @@ index 5dcc031..e08ecd2 100644
sz = (ioc->reply_sz * ioc->reply_depth) + 128;
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
+--- a/drivers/message/fusion/mptlan.c
++++ b/drivers/message/fusion/mptlan.c
+@@ -680,7 +680,7 @@ out:
+ }
+
+ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
+-static int
++static netdev_tx_t
+ mpt_lan_sdu_send (struct sk_buff *skb, struct net_device *dev)
+ {
+ 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
--- a/drivers/message/fusion/mptsas.c
@@ -50936,7 +55931,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 0236cd7..53b10d7 100644
+index 69d9fff..62cd090 100644
--- a/drivers/mfd/ab8500-debugfs.c
+++ b/drivers/mfd/ab8500-debugfs.c
@@ -100,7 +100,7 @@ static int irq_last;
@@ -50962,7 +55957,7 @@ index 05b9245..9f05055 100644
.ident = "BBL6",
.matches = {
diff --git a/drivers/mfd/max8925-i2c.c b/drivers/mfd/max8925-i2c.c
-index b0fe810..eee08c4 100644
+index 70443b1..e6da89d 100644
--- a/drivers/mfd/max8925-i2c.c
+++ b/drivers/mfd/max8925-i2c.c
@@ -152,7 +152,7 @@ static int max8925_probe(struct i2c_client *client,
@@ -51031,7 +56026,7 @@ index cc8645b..7cc15e4 100644
c2dev->dev = device_create(c2port_class, NULL, 0, c2dev,
"c2port%d", c2dev->id);
diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c
-index 99635dd..5098638 100644
+index 99635dd..255bd78 100644
--- a/drivers/misc/kgdbts.c
+++ b/drivers/misc/kgdbts.c
@@ -834,7 +834,7 @@ static void run_plant_and_detach_test(int is_early)
@@ -51052,6 +56047,15 @@ index 99635dd..5098638 100644
BREAK_INSTR_SIZE);
if (memcmp(before, after, BREAK_INSTR_SIZE)) {
printk(KERN_CRIT "kgdbts: ERROR kgdb corrupted memory\n");
+@@ -1130,7 +1130,7 @@ static void kgdbts_put_char(u8 chr)
+ ts.run_test(0, chr);
+ }
+
+-static int param_set_kgdbts_var(const char *kmessage, struct kernel_param *kp)
++static int param_set_kgdbts_var(const char *kmessage, const struct kernel_param *kp)
+ {
+ int len = strlen(kmessage);
+
diff --git a/drivers/misc/lis3lv02d/lis3lv02d.c b/drivers/misc/lis3lv02d/lis3lv02d.c
index fb8705f..dc2f679 100644
--- a/drivers/misc/lis3lv02d/lis3lv02d.c
@@ -51403,10 +56407,42 @@ index c862cd4..0d176fe 100644
extern struct xpc_interface xpc_interface;
diff --git a/drivers/misc/sgi-xp/xp_main.c b/drivers/misc/sgi-xp/xp_main.c
-index 01be66d..e3a0c7e 100644
+index 01be66d..4a305b4 100644
--- a/drivers/misc/sgi-xp/xp_main.c
+++ b/drivers/misc/sgi-xp/xp_main.c
-@@ -78,13 +78,13 @@ xpc_notloaded(void)
+@@ -71,20 +71,42 @@ EXPORT_SYMBOL_GPL(xpc_registrations);
+ /*
+ * Initialize the XPC interface to indicate that XPC isn't loaded.
+ */
+-static enum xp_retval
+-xpc_notloaded(void)
++static void xpc_notloaded_connect(int ch_number)
++{
++}
++
++static void xpc_notloaded_disconnect(int ch_number)
++{
++}
++
++static enum xp_retval xpc_notloaded_send(short partid, int ch_number, u32 flags, void *payload,
++ u16 payload_size)
++{
++ return xpNotLoaded;
++}
++
++static enum xp_retval xpc_notloaded_send_notify(short partid, int ch_number, u32 flags, void *payload,
++ u16 payload_size, xpc_notify_func func, void *key)
++{
++ return xpNotLoaded;
++}
++
++static void xpc_notloaded_received(short partid, int ch_number, void *payload)
++{
++}
++
++static enum xp_retval xpc_notloaded_partid_to_nasids(short partid, void *nasid_mask)
+ {
+ return xpNotLoaded;
}
struct xpc_interface xpc_interface = {
@@ -51414,18 +56450,42 @@ index 01be66d..e3a0c7e 100644
- (void (*)(int))xpc_notloaded,
- (enum xp_retval(*)(short, int, u32, void *, u16))xpc_notloaded,
- (enum xp_retval(*)(short, int, u32, void *, u16, xpc_notify_func,
-+ .connect = (void (*)(int))xpc_notloaded,
-+ .disconnect = (void (*)(int))xpc_notloaded,
-+ .send = (enum xp_retval(*)(short, int, u32, void *, u16))xpc_notloaded,
-+ .send_notify = (enum xp_retval(*)(short, int, u32, void *, u16, xpc_notify_func,
- void *))xpc_notloaded,
+- void *))xpc_notloaded,
- (void (*)(short, int, void *))xpc_notloaded,
- (enum xp_retval(*)(short, void *))xpc_notloaded
-+ .received = (void (*)(short, int, void *))xpc_notloaded,
-+ .partid_to_nasids = (enum xp_retval(*)(short, void *))xpc_notloaded
++ .connect = xpc_notloaded_connect,
++ .disconnect = xpc_notloaded_disconnect,
++ .send = xpc_notloaded_send,
++ .send_notify = xpc_notloaded_send_notify,
++ .received = xpc_notloaded_received,
++ .partid_to_nasids = xpc_notloaded_partid_to_nasids
};
EXPORT_SYMBOL_GPL(xpc_interface);
+@@ -115,17 +137,12 @@ EXPORT_SYMBOL_GPL(xpc_set_interface);
+ void
+ xpc_clear_interface(void)
+ {
+- xpc_interface.connect = (void (*)(int))xpc_notloaded;
+- xpc_interface.disconnect = (void (*)(int))xpc_notloaded;
+- xpc_interface.send = (enum xp_retval(*)(short, int, u32, void *, u16))
+- xpc_notloaded;
+- xpc_interface.send_notify = (enum xp_retval(*)(short, int, u32, void *,
+- u16, xpc_notify_func,
+- void *))xpc_notloaded;
+- xpc_interface.received = (void (*)(short, int, void *))
+- xpc_notloaded;
+- xpc_interface.partid_to_nasids = (enum xp_retval(*)(short, void *))
+- xpc_notloaded;
++ xpc_interface.connect = xpc_notloaded_connect;
++ xpc_interface.disconnect = xpc_notloaded_disconnect;
++ xpc_interface.send = xpc_notloaded_send;
++ xpc_interface.send_notify = xpc_notloaded_send_notify;
++ xpc_interface.received = xpc_notloaded_received;
++ xpc_interface.partid_to_nasids = xpc_notloaded_partid_to_nasids;
+ }
+ EXPORT_SYMBOL_GPL(xpc_clear_interface);
+
diff --git a/drivers/misc/sgi-xp/xpc.h b/drivers/misc/sgi-xp/xpc.h
index b94d5f7..7f494c5 100644
--- a/drivers/misc/sgi-xp/xpc.h
@@ -51460,6 +56520,114 @@ index 7f32712..8539ab2 100644
/*
* Timer function to enforce the timelimit on the partition disengage.
+diff --git a/drivers/misc/sgi-xp/xpnet.c b/drivers/misc/sgi-xp/xpnet.c
+index 557f978..c8ce9fb 100644
+--- a/drivers/misc/sgi-xp/xpnet.c
++++ b/drivers/misc/sgi-xp/xpnet.c
+@@ -421,7 +421,7 @@ xpnet_send(struct sk_buff *skb, struct xpnet_pending_msg *queued_msg,
+ * destination partid. If the destination partid octets are 0xffff,
+ * this packet is to be broadcast to all connected partitions.
+ */
+-static int
++static netdev_tx_t
+ xpnet_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ 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
+--- 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)
+ return 0;
+ }
+
+-static ssize_t show_install(struct device *dev,
+- struct device_attribute *attr, char *buf)
++static ssize_t show_install(struct kobject *_dev,
++ struct kobj_attribute *attr, char *buf)
+ {
++ struct device *dev = (struct device *)_dev;
+ 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,
+ }
+ #endif /* if DEBUG */
+
+-static ssize_t show_dev_name(struct device *dev,
+- struct device_attribute *attr, char *buf)
++static ssize_t show_dev_name(struct kobject *_dev,
++ struct kobj_attribute *attr, char *buf)
+ {
++ struct device *dev = (struct device *)_dev;
+ struct kim_data_s *kim_data = dev_get_drvdata(dev);
+ return sprintf(buf, "%s\n", kim_data->dev_name);
+ }
+
+-static ssize_t show_baud_rate(struct device *dev,
+- struct device_attribute *attr, char *buf)
++static ssize_t show_baud_rate(struct kobject *_dev,
++ struct kobj_attribute *attr, char *buf)
+ {
++ struct device *dev = (struct device *)_dev;
+ struct kim_data_s *kim_data = dev_get_drvdata(dev);
+ return sprintf(buf, "%d\n", kim_data->baud_rate);
+ }
+
+-static ssize_t show_flow_cntrl(struct device *dev,
+- struct device_attribute *attr, char *buf)
++static ssize_t show_flow_cntrl(struct kobject *_dev,
++ struct kobj_attribute *attr, char *buf)
+ {
++ struct device *dev = (struct device *)_dev;
+ struct kim_data_s *kim_data = dev_get_drvdata(dev);
+ return sprintf(buf, "%d\n", kim_data->flow_cntrl);
+ }
+
+ /* structures specific for sysfs entries */
+ static struct kobj_attribute ldisc_install =
+-__ATTR(install, 0444, (void *)show_install, NULL);
++__ATTR(install, 0444, show_install, NULL);
+
+ static struct kobj_attribute uart_dev_name =
+ #ifdef DEBUG /* TODO: move this to debug-fs if possible */
+-__ATTR(dev_name, 0644, (void *)show_dev_name, (void *)store_dev_name);
++__ATTR(dev_name, 0644, show_dev_name, store_dev_name);
+ #else
+-__ATTR(dev_name, 0444, (void *)show_dev_name, NULL);
++__ATTR(dev_name, 0444, show_dev_name, NULL);
+ #endif
+
+ static struct kobj_attribute uart_baud_rate =
+ #ifdef DEBUG /* TODO: move to debugfs */
+-__ATTR(baud_rate, 0644, (void *)show_baud_rate, (void *)store_baud_rate);
++__ATTR(baud_rate, 0644, show_baud_rate, store_baud_rate);
+ #else
+-__ATTR(baud_rate, 0444, (void *)show_baud_rate, NULL);
++__ATTR(baud_rate, 0444, show_baud_rate, NULL);
+ #endif
+
+ static struct kobj_attribute uart_flow_cntrl =
+-__ATTR(flow_cntrl, 0444, (void *)show_flow_cntrl, NULL);
++__ATTR(flow_cntrl, 0444, show_flow_cntrl, NULL);
+
+ static struct attribute *uim_attrs[] = {
+ &ldisc_install.attr,
+diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c
+index 7fc9174..bf669b2 100644
+--- a/drivers/mmc/card/mmc_test.c
++++ b/drivers/mmc/card/mmc_test.c
+@@ -2076,8 +2076,8 @@ static int mmc_test_rw_multiple_size(struct mmc_test_card *test,
+ {
+ int ret = 0;
+ int i;
+- void *pre_req = test->card->host->ops->pre_req;
+- void *post_req = test->card->host->ops->post_req;
++ void (*pre_req)(struct mmc_host *, struct mmc_request *, bool) = test->card->host->ops->pre_req;
++ void (*post_req)(struct mmc_host *, struct mmc_request *, int) = test->card->host->ops->post_req;
+
+ if (rw->do_nonblock_req &&
+ ((!pre_req && post_req) || (pre_req && !post_req))) {
diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
index f695b58..7b7d017 100644
--- a/drivers/mmc/host/dw_mmc.h
@@ -51472,10 +56640,10 @@ index f695b58..7b7d017 100644
+} __do_const;
#endif /* _DW_MMC_H_ */
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
-index acece32..a872279 100644
+index 0d6ca41..d438654 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,
+@@ -1634,7 +1634,9 @@ static int mmci_probe(struct amba_device *dev,
mmc->caps |= MMC_CAP_CMD23;
if (variant->busy_detect) {
@@ -51487,7 +56655,7 @@ index acece32..a872279 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 7fb0753..ad156f0 100644
+index f6e4d97..57358ff 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -2088,7 +2088,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
@@ -51502,10 +56670,10 @@ index 7fb0753..ad156f0 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 1f1582f..b396c3a 100644
+index f25f292..a0e1250 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
-@@ -1191,9 +1191,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
+@@ -1194,9 +1194,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
host->ioaddr + 0x6c);
}
@@ -51552,8 +56720,169 @@ index 9a1a6ff..b8f1a57 100644
if (!ECCBUF_SIZE) {
/* We should fall back to a general writev implementation.
+diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
+index e2c0057..b468819 100644
+--- a/drivers/mtd/devices/block2mtd.c
++++ b/drivers/mtd/devices/block2mtd.c
+@@ -431,7 +431,7 @@ static int block2mtd_setup2(const char *val)
+ }
+
+
+-static int block2mtd_setup(const char *val, struct kernel_param *kp)
++static int block2mtd_setup(const char *val, const struct kernel_param *kp)
+ {
+ #ifdef MODULE
+ return block2mtd_setup2(val);
+diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c
+index 8b66e52..7287696 100644
+--- a/drivers/mtd/devices/phram.c
++++ b/drivers/mtd/devices/phram.c
+@@ -266,7 +266,7 @@ static int phram_setup(const char *val)
+ return ret;
+ }
+
+-static int phram_param_call(const char *val, struct kernel_param *kp)
++static int phram_param_call(const char *val, const struct kernel_param *kp)
+ {
+ #ifdef MODULE
+ return phram_setup(val);
+diff --git a/drivers/mtd/maps/gpio-addr-flash.c b/drivers/mtd/maps/gpio-addr-flash.c
+index 385305e..8051e87 100644
+--- a/drivers/mtd/maps/gpio-addr-flash.c
++++ b/drivers/mtd/maps/gpio-addr-flash.c
+@@ -128,7 +128,7 @@ static void gf_copy_from(struct map_info *map, void *to, unsigned long from, ssi
+ * @map: MTD map state
+ * @ofs: desired offset to write
+ */
+-static void gf_write(struct map_info *map, map_word d1, unsigned long ofs)
++static void gf_write(struct map_info *map, const map_word d1, unsigned long ofs)
+ {
+ struct async_state *state = gf_map_info_to_state(map);
+ uint16_t d;
+diff --git a/drivers/mtd/maps/latch-addr-flash.c b/drivers/mtd/maps/latch-addr-flash.c
+index 6dc97aa..c251b90 100644
+--- a/drivers/mtd/maps/latch-addr-flash.c
++++ b/drivers/mtd/maps/latch-addr-flash.c
+@@ -52,7 +52,7 @@ static map_word lf_read(struct map_info *map, unsigned long ofs)
+ return datum;
+ }
+
+-static void lf_write(struct map_info *map, map_word datum, unsigned long ofs)
++static void lf_write(struct map_info *map, const map_word datum, unsigned long ofs)
+ {
+ struct latch_addr_flash_info *info;
+
+diff --git a/drivers/mtd/maps/pci.c b/drivers/mtd/maps/pci.c
+index eb0242e..1a4c5b9 100644
+--- a/drivers/mtd/maps/pci.c
++++ b/drivers/mtd/maps/pci.c
+@@ -59,13 +59,13 @@ static void mtd_pci_copyfrom(struct map_info *_map, void *to, unsigned long from
+ memcpy_fromio(to, map->base + map->translate(map, from), len);
+ }
+
+-static void mtd_pci_write8(struct map_info *_map, map_word val, unsigned long ofs)
++static void mtd_pci_write8(struct map_info *_map, const map_word val, unsigned long ofs)
+ {
+ struct map_pci_info *map = (struct map_pci_info *)_map;
+ writeb(val.x[0], map->base + map->translate(map, ofs));
+ }
+
+-static void mtd_pci_write32(struct map_info *_map, map_word val, unsigned long ofs)
++static void mtd_pci_write32(struct map_info *_map, const map_word val, unsigned long ofs)
+ {
+ struct map_pci_info *map = (struct map_pci_info *)_map;
+ writel(val.x[0], map->base + map->translate(map, ofs));
+diff --git a/drivers/mtd/maps/pcmciamtd.c b/drivers/mtd/maps/pcmciamtd.c
+index 70bb403..3ae94c6 100644
+--- a/drivers/mtd/maps/pcmciamtd.c
++++ b/drivers/mtd/maps/pcmciamtd.c
+@@ -161,7 +161,7 @@ static void pcmcia_copy_from_remap(struct map_info *map, void *to, unsigned long
+ }
+
+
+-static void pcmcia_write8_remap(struct map_info *map, map_word d, unsigned long adr)
++static void pcmcia_write8_remap(struct map_info *map, const map_word d, unsigned long adr)
+ {
+ void __iomem *addr = remap_window(map, adr);
+
+@@ -173,7 +173,7 @@ static void pcmcia_write8_remap(struct map_info *map, map_word d, unsigned long
+ }
+
+
+-static void pcmcia_write16_remap(struct map_info *map, map_word d, unsigned long adr)
++static void pcmcia_write16_remap(struct map_info *map, const map_word d, unsigned long adr)
+ {
+ void __iomem *addr = remap_window(map, adr);
+ if(!addr)
+@@ -256,7 +256,7 @@ static void pcmcia_copy_from(struct map_info *map, void *to, unsigned long from,
+ }
+
+
+-static void pcmcia_write8(struct map_info *map, map_word d, unsigned long adr)
++static void pcmcia_write8(struct map_info *map, const map_word d, unsigned long adr)
+ {
+ void __iomem *win_base = (void __iomem *)map->map_priv_2;
+
+@@ -269,7 +269,7 @@ static void pcmcia_write8(struct map_info *map, map_word d, unsigned long adr)
+ }
+
+
+-static void pcmcia_write16(struct map_info *map, map_word d, unsigned long adr)
++static void pcmcia_write16(struct map_info *map, const map_word d, unsigned long adr)
+ {
+ void __iomem *win_base = (void __iomem *)map->map_priv_2;
+
+diff --git a/drivers/mtd/maps/sbc_gxx.c b/drivers/mtd/maps/sbc_gxx.c
+index 556a2df..e771329 100644
+--- a/drivers/mtd/maps/sbc_gxx.c
++++ b/drivers/mtd/maps/sbc_gxx.c
+@@ -138,7 +138,7 @@ static void sbc_gxx_copy_from(struct map_info *map, void *to, unsigned long from
+ }
+ }
+
+-static void sbc_gxx_write8(struct map_info *map, map_word d, unsigned long adr)
++static void sbc_gxx_write8(struct map_info *map, const map_word d, unsigned long adr)
+ {
+ spin_lock(&sbc_gxx_spin);
+ sbc_gxx_page(map, adr);
+diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
+index aa1a616..a47a33d 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)
+ return IRQ_HANDLED;
+ }
+
+-static void cafe_nand_bug(struct mtd_info *mtd)
++static void cafe_nand_bug_hwctl(struct mtd_info *mtd, int mode)
++{
++ BUG();
++}
++
++static int cafe_nand_bug_calculate(struct mtd_info *mtd, const uint8_t *dat, uint8_t *ecc_code)
++{
++ BUG();
++}
++
++static int cafe_nand_bug_correct(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, uint8_t *calc_ecc)
+ {
+ BUG();
+ }
+@@ -760,9 +770,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;
+- cafe->nand.ecc.hwctl = (void *)cafe_nand_bug;
+- cafe->nand.ecc.calculate = (void *)cafe_nand_bug;
+- cafe->nand.ecc.correct = (void *)cafe_nand_bug;
++ cafe->nand.ecc.hwctl = cafe_nand_bug_hwctl;
++ cafe->nand.ecc.calculate = cafe_nand_bug_calculate;
++ cafe->nand.ecc.correct = cafe_nand_bug_correct;
+ cafe->nand.ecc.write_page = cafe_nand_write_page_lowlevel;
+ 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 67eb2be..d1e2bf5 100644
+index 30bf5f6..9bb67d1 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -24,6 +24,7 @@
@@ -51565,7 +56894,7 @@ index 67eb2be..d1e2bf5 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 2064ada..7c62920 100644
+index 235ddcb..778a09d 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -386,7 +386,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, enum dma_data_direction dr)
@@ -51590,7 +56919,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 c23184a..4115c41 100644
+index b096f8b..727cc94 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,
@@ -51602,6 +56931,19 @@ index c23184a..4115c41 100644
struct attribute **attributes;
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
+--- 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)
+ * This function returns zero in case of success and a negative error code in
+ * case of error.
+ */
+-static int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp)
++static int __init ubi_mtd_param_parse(const char *val, const struct kernel_param *kp)
+ {
+ 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
--- a/drivers/net/bonding/bond_netlink.c
@@ -51616,9 +56958,18 @@ index db760e8..d53ca99 100644
.priv_size = sizeof(struct bonding),
.setup = bond_setup,
diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
-index 615c65d..c6c0439 100644
+index 615c65d..e45dc26 100644
--- a/drivers/net/caif/caif_hsi.c
+++ b/drivers/net/caif/caif_hsi.c
+@@ -1011,7 +1011,7 @@ static void cfhsi_aggregation_tout(unsigned long arg)
+ cfhsi_start_tx(cfhsi);
+ }
+
+-static int cfhsi_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t cfhsi_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct cfhsi *cfhsi = NULL;
+ int start_xfer = 0;
@@ -1444,7 +1444,7 @@ err:
return -ENODEV;
}
@@ -51628,6 +56979,45 @@ index 615c65d..c6c0439 100644
.kind = "cfhsi",
.priv_size = sizeof(struct cfhsi),
.setup = cfhsi_setup,
+diff --git a/drivers/net/caif/caif_serial.c b/drivers/net/caif/caif_serial.c
+index c2dea49..4bf83b5 100644
+--- a/drivers/net/caif/caif_serial.c
++++ b/drivers/net/caif/caif_serial.c
+@@ -277,7 +277,7 @@ error:
+ return tty_wr;
+ }
+
+-static int caif_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t caif_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct ser_device *ser;
+
+diff --git a/drivers/net/caif/caif_spi.c b/drivers/net/caif/caif_spi.c
+index 4721948..7d77dde 100644
+--- a/drivers/net/caif/caif_spi.c
++++ b/drivers/net/caif/caif_spi.c
+@@ -486,7 +486,7 @@ static void cfspi_xfer_done_cb(struct cfspi_ifc *ifc)
+ complete(&cfspi->comp);
+ }
+
+-static int cfspi_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t cfspi_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct cfspi *cfspi = NULL;
+ unsigned long flags;
+diff --git a/drivers/net/caif/caif_virtio.c b/drivers/net/caif/caif_virtio.c
+index b306210..c5345de 100644
+--- a/drivers/net/caif/caif_virtio.c
++++ b/drivers/net/caif/caif_virtio.c
+@@ -519,7 +519,7 @@ err:
+ }
+
+ /* Put the CAIF packet on the virtio ring and kick the receiver */
+-static int cfv_netdev_tx(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t cfv_netdev_tx(struct sk_buff *skb, struct net_device *netdev)
+ {
+ struct cfv_info *cfv = netdev_priv(netdev);
+ struct buf_info *buf_info;
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
index 6d04183..d69aee9 100644
--- a/drivers/net/can/Kconfig
@@ -51654,6 +57044,19 @@ index 141c2a4..ca734ed 100644
.kind = "can",
.maxtype = IFLA_CAN_MAX,
.policy = can_policy,
+diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c
+index 5d04f54..9586a90 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)
+ return 0;
+ }
+
+-static int ican3_xmit(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t ican3_xmit(struct sk_buff *skb, struct net_device *ndev)
+ {
+ struct ican3_dev *mod = netdev_priv(ndev);
+ struct can_frame *cf = (struct can_frame *)skb->data;
diff --git a/drivers/net/can/led.c b/drivers/net/can/led.c
index c1b6676..50a8a51 100644
--- a/drivers/net/can/led.c
@@ -51667,6 +57070,19 @@ index c1b6676..50a8a51 100644
.notifier_call = can_led_notifier,
};
+diff --git a/drivers/net/can/sun4i_can.c b/drivers/net/can/sun4i_can.c
+index 68ef0a4..9e4938b 100644
+--- a/drivers/net/can/sun4i_can.c
++++ b/drivers/net/can/sun4i_can.c
+@@ -409,7 +409,7 @@ static int sun4ican_set_mode(struct net_device *dev, enum can_mode mode)
+ * xx xx xx xx ff ll 00 11 22 33 44 55 66 77
+ * [ can_id ] [flags] [len] [can data (up to 8 bytes]
+ */
+-static int sun4ican_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t sun4ican_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct sun4ican_priv *priv = netdev_priv(dev);
+ struct can_frame *cf = (struct can_frame *)skb->data;
diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c
index 674f367..ec3a31f 100644
--- a/drivers/net/can/vcan.c
@@ -51680,6 +57096,19 @@ index 674f367..ec3a31f 100644
.kind = "vcan",
.setup = vcan_setup,
};
+diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
+index c71a035..08768ce 100644
+--- a/drivers/net/can/xilinx_can.c
++++ b/drivers/net/can/xilinx_can.c
+@@ -386,7 +386,7 @@ static int xcan_do_set_mode(struct net_device *ndev, enum can_mode mode)
+ *
+ * Return: 0 on success and failure value on error
+ */
+-static int xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+ {
+ struct xcan_priv *priv = netdev_priv(ndev);
+ struct net_device_stats *stats = &ndev->stats;
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
index 69fc840..77a32fc 100644
--- a/drivers/net/dummy.c
@@ -51694,10 +57123,10 @@ index 69fc840..77a32fc 100644
.setup = dummy_setup,
.validate = dummy_validate,
diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c
-index 0443654..4f0aa18 100644
+index c89b9ae..7dcddfd 100644
--- a/drivers/net/ethernet/8390/ax88796.c
+++ b/drivers/net/ethernet/8390/ax88796.c
-@@ -889,9 +889,11 @@ static int ax_probe(struct platform_device *pdev)
+@@ -878,9 +878,11 @@ static int ax_probe(struct platform_device *pdev)
if (ax->plat->reg_offsets)
ei_local->reg_offset = ax->plat->reg_offsets;
else {
@@ -51710,11 +57139,88 @@ index 0443654..4f0aa18 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
+--- 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 *,
+ static void block_input(struct net_device *dev, int count,
+ struct sk_buff *skb, int ring_offset);
+ static void block_output(struct net_device *dev, int count,
+- const u_char *buf, const int start_page);
++ const u_char *buf, int start_page);
+
+ static void axnet_detach(struct pcmcia_device *p_dev);
+
+@@ -667,7 +667,7 @@ static void block_input(struct net_device *dev, int count,
+ /*====================================================================*/
+
+ static void block_output(struct net_device *dev, int count,
+- const u_char *buf, const int start_page)
++ const u_char *buf, int start_page)
+ {
+ unsigned int nic_base = dev->base_addr;
+
+diff --git a/drivers/net/ethernet/8390/ne2k-pci.c b/drivers/net/ethernet/8390/ne2k-pci.c
+index 57e9791..c93b6a0 100644
+--- a/drivers/net/ethernet/8390/ne2k-pci.c
++++ b/drivers/net/ethernet/8390/ne2k-pci.c
+@@ -172,8 +172,8 @@ static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *
+ int ring_page);
+ static void ne2k_pci_block_input(struct net_device *dev, int count,
+ struct sk_buff *skb, int ring_offset);
+-static void ne2k_pci_block_output(struct net_device *dev, const int count,
+- const unsigned char *buf, const int start_page);
++static void ne2k_pci_block_output(struct net_device *dev, int count,
++ const unsigned char *buf, int start_page);
+ static const struct ethtool_ops ne2k_pci_ethtool_ops;
+
+
+@@ -563,7 +563,7 @@ static void ne2k_pci_block_input(struct net_device *dev, int count,
+ }
+
+ static void ne2k_pci_block_output(struct net_device *dev, int count,
+- const unsigned char *buf, const int start_page)
++ const unsigned char *buf, int start_page)
+ {
+ long nic_base = NE_BASE;
+ unsigned long dma_start;
+diff --git a/drivers/net/ethernet/8390/pcnet_cs.c b/drivers/net/ethernet/8390/pcnet_cs.c
+index 2f79d29..ed5a64e 100644
+--- a/drivers/net/ethernet/8390/pcnet_cs.c
++++ b/drivers/net/ethernet/8390/pcnet_cs.c
+@@ -1208,7 +1208,7 @@ static void dma_block_input(struct net_device *dev, int count,
+ /*====================================================================*/
+
+ static void dma_block_output(struct net_device *dev, int count,
+- const u_char *buf, const int start_page)
++ const u_char *buf, int start_page)
+ {
+ unsigned int nic_base = dev->base_addr;
+ struct pcnet_dev *info = PRIV(dev);
+@@ -1387,7 +1387,7 @@ static void shmem_block_input(struct net_device *dev, int count,
+ /*====================================================================*/
+
+ static void shmem_block_output(struct net_device *dev, int count,
+- const u_char *buf, const int start_page)
++ const u_char *buf, int start_page)
+ {
+ void __iomem *shmem = ei_status.mem + (start_page << 8);
+ shmem -= ei_status.tx_start_page << 8;
diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
-index fe64482..9a24726 100644
+index f749e4d..23a27f1 100644
--- a/drivers/net/ethernet/altera/altera_tse_main.c
+++ b/drivers/net/ethernet/altera/altera_tse_main.c
-@@ -1255,7 +1255,7 @@ static int tse_shutdown(struct net_device *dev)
+@@ -551,7 +551,7 @@ static irqreturn_t altera_isr(int irq, void *dev_id)
+ * physically contiguous fragment starting at
+ * skb->data, for length of skb_headlen(skb).
+ */
+-static int tse_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t tse_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct altera_tse_private *priv = netdev_priv(dev);
+ unsigned int txsize = priv->tx_ring_size;
+@@ -1243,7 +1243,7 @@ static int tse_shutdown(struct net_device *dev)
return 0;
}
@@ -51723,7 +57229,7 @@ index fe64482..9a24726 100644
.ndo_open = tse_open,
.ndo_stop = tse_shutdown,
.ndo_start_xmit = tse_start_xmit,
-@@ -1492,11 +1492,13 @@ static int altera_tse_probe(struct platform_device *pdev)
+@@ -1480,11 +1480,13 @@ static int altera_tse_probe(struct platform_device *pdev)
ndev->netdev_ops = &altera_tse_netdev_ops;
altera_tse_set_ethtool_ops(ndev);
@@ -51737,6 +57243,63 @@ index fe64482..9a24726 100644
/* Scatter/gather IO is not supported,
* so it is turned off
+diff --git a/drivers/net/ethernet/amd/amd8111e.c b/drivers/net/ethernet/amd/amd8111e.c
+index 9496005..1fb7ac2 100644
+--- a/drivers/net/ethernet/amd/amd8111e.c
++++ b/drivers/net/ethernet/amd/amd8111e.c
+@@ -1690,8 +1690,9 @@ static int amd8111e_resume(struct pci_dev *pci_dev)
+ return 0;
+ }
+
+-static void amd8111e_config_ipg(struct net_device *dev)
++static void amd8111e_config_ipg(unsigned long _dev)
+ {
++ struct net_device *dev = (struct net_device *)_dev;
+ struct amd8111e_priv *lp = netdev_priv(dev);
+ struct ipg_info *ipg_data = &lp->ipg_data;
+ void __iomem *mmio = lp->mmio;
+@@ -1904,7 +1905,7 @@ static int amd8111e_probe_one(struct pci_dev *pdev,
+ if(lp->options & OPTION_DYN_IPG_ENABLE){
+ init_timer(&lp->ipg_data.ipg_timer);
+ lp->ipg_data.ipg_timer.data = (unsigned long) dev;
+- lp->ipg_data.ipg_timer.function = (void *)&amd8111e_config_ipg;
++ lp->ipg_data.ipg_timer.function = &amd8111e_config_ipg;
+ lp->ipg_data.ipg_timer.expires = jiffies +
+ IPG_CONVERGE_JIFFIES;
+ lp->ipg_data.ipg = DEFAULT_IPG;
+diff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c
+index 7ccebae..237f6bb 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 *);
+ static void pcnet32_load_multicast(struct net_device *dev);
+ static void pcnet32_set_multicast_list(struct net_device *);
+ static int pcnet32_ioctl(struct net_device *, struct ifreq *, int);
+-static void pcnet32_watchdog(struct net_device *);
++static void pcnet32_watchdog(unsigned long);
+ static int mdio_read(struct net_device *dev, int phy_id, int reg_num);
+ static void mdio_write(struct net_device *dev, int phy_id, int reg_num,
+ int val);
+@@ -1915,7 +1915,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
+
+ init_timer(&lp->watchdog_timer);
+ lp->watchdog_timer.data = (unsigned long)dev;
+- lp->watchdog_timer.function = (void *)&pcnet32_watchdog;
++ lp->watchdog_timer.function = &pcnet32_watchdog;
+
+ /* The PCNET32-specific entries in the device structure. */
+ dev->netdev_ops = &pcnet32_netdev_ops;
+@@ -2837,8 +2837,9 @@ static void pcnet32_check_media(struct net_device *dev, int verbose)
+ * Could possibly be changed to use mii_check_media instead.
+ */
+
+-static void pcnet32_watchdog(struct net_device *dev)
++static void pcnet32_watchdog(unsigned long _dev)
+ {
++ struct net_device *dev = (struct net_device *)_dev;
+ struct pcnet32_private *lp = netdev_priv(dev);
+ unsigned long flags;
+
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
index b6fa891..31ef157 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h
@@ -52026,7 +57589,7 @@ index f6a7161..aa98a8b 100644
+ .set_rss_lookup_table = xgbe_set_rss_lookup_table,
+};
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-index 53ce122..de7d19d 100644
+index 8a9b493..d41363f 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -245,7 +245,7 @@ static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel,
@@ -52184,8 +57747,12 @@ index 53ce122..de7d19d 100644
DBGPR("-->xgbe_close\n");
-@@ -1391,8 +1391,8 @@ static int xgbe_close(struct net_device *netdev)
- static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
+@@ -1388,11 +1388,11 @@ static int xgbe_close(struct net_device *netdev)
+ return 0;
+ }
+
+-static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
- struct xgbe_hw_if *hw_if = &pdata->hw_if;
@@ -52491,11 +58058,111 @@ index e234b99..4f0e2a1 100644
/* Function prototypes*/
void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *);
+diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+index 5eb9b20..8c5d652 100644
+--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
++++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+@@ -130,7 +130,7 @@ static void xgene_enet_delete_bufpool(struct xgene_enet_desc_ring *buf_pool)
+ buf_pool->tail = tail;
+ }
+
+-static irqreturn_t xgene_enet_rx_irq(const int irq, void *data)
++static irqreturn_t xgene_enet_rx_irq(int irq, void *data)
+ {
+ struct xgene_enet_desc_ring *rx_ring = data;
+
+@@ -597,7 +597,7 @@ static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring,
+ return processed;
+ }
+
+-static int xgene_enet_napi(struct napi_struct *napi, const int budget)
++static int xgene_enet_napi(struct napi_struct *napi, int budget)
+ {
+ struct xgene_enet_desc_ring *ring;
+ int processed;
+diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c
+index 6446af1..e669e35 100644
+--- a/drivers/net/ethernet/arc/emac_main.c
++++ b/drivers/net/ethernet/arc/emac_main.c
+@@ -645,7 +645,7 @@ static struct net_device_stats *arc_emac_stats(struct net_device *ndev)
+ *
+ * This function is invoked from upper layers to initiate transmission.
+ */
+-static int arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t arc_emac_tx(struct sk_buff *skb, struct net_device *ndev)
+ {
+ 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 55b118e..6de7cd0 100644
+--- a/drivers/net/ethernet/atheros/alx/main.c
++++ b/drivers/net/ethernet/atheros/alx/main.c
+@@ -1451,7 +1451,7 @@ static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);
+
+
+ static pci_ers_result_t alx_pci_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct alx_priv *alx = pci_get_drvdata(pdev);
+ struct net_device *netdev = alx->dev;
+diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+index 8b5988e..672022e 100644
+--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
++++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+@@ -2719,7 +2719,7 @@ static void atl1c_remove(struct pci_dev *pdev)
+ * this device has been detected.
+ */
+ static pci_ers_result_t atl1c_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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
+--- 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)
+ * this device has been detected.
+ */
+ static pci_ers_result_t
+-atl1e_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++atl1e_io_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ 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
+--- 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)
+ spin_unlock(&priv->tx_lock);
+ }
+
+-static int nb8800_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t nb8800_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct nb8800_priv *priv = netdev_priv(dev);
+ struct nb8800_tx_desc *txd;
+diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
+index 8fc3f3c..d97e01e 100644
+--- a/drivers/net/ethernet/broadcom/bnx2.c
++++ b/drivers/net/ethernet/broadcom/bnx2.c
+@@ -8701,7 +8701,7 @@ static SIMPLE_DEV_PM_OPS(bnx2_pm_ops, bnx2_suspend, bnx2_resume);
+ * this device has been detected.
+ */
+ static pci_ers_result_t bnx2_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *dev = pci_get_drvdata(pdev);
+ struct bnx2 *bp = netdev_priv(dev);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
-index b7d32e8..ea5b559 100644
+index 4cbb03f8..d94eebe 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
-@@ -1122,7 +1122,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp)
+@@ -1115,7 +1115,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp)
static inline void bnx2x_init_bp_objs(struct bnx2x *bp)
{
/* RX_MODE controlling object */
@@ -52504,6 +58171,561 @@ index b7d32e8..ea5b559 100644
/* multicast configuration controlling object */
bnx2x_init_mcast_obj(bp, &bp->mcast_obj, bp->fp->cl_id, bp->fp->cid,
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+index 1fb8010..0a8dc20 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+@@ -5621,7 +5621,7 @@ static int bnx2x_get_link_speed_duplex(struct bnx2x_phy *phy,
+ return 0;
+ }
+
+-static int bnx2x_link_settings_status(struct bnx2x_phy *phy,
++static u8 bnx2x_link_settings_status(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -5695,7 +5695,7 @@ static int bnx2x_link_settings_status(struct bnx2x_phy *phy,
+ return rc;
+ }
+
+-static int bnx2x_warpcore_read_status(struct bnx2x_phy *phy,
++static u8 bnx2x_warpcore_read_status(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -7436,7 +7436,7 @@ static void bnx2x_8073_specific_func(struct bnx2x_phy *phy,
+ }
+ }
+
+-static int bnx2x_8073_config_init(struct bnx2x_phy *phy,
++static void bnx2x_8073_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -7499,7 +7499,7 @@ static int bnx2x_8073_config_init(struct bnx2x_phy *phy,
+ if (params->loopback_mode == LOOPBACK_EXT) {
+ bnx2x_807x_force_10G(bp, phy);
+ DP(NETIF_MSG_LINK, "Forced speed 10G on 807X\n");
+- return 0;
++ return;
+ } else {
+ bnx2x_cl45_write(bp, phy,
+ MDIO_PMA_DEVAD, MDIO_PMA_REG_BCM_CTRL, 0x0002);
+@@ -7581,7 +7581,6 @@ static int bnx2x_8073_config_init(struct bnx2x_phy *phy,
+ bnx2x_cl45_write(bp, phy, MDIO_AN_DEVAD, MDIO_AN_REG_CTRL, 0x1200);
+ DP(NETIF_MSG_LINK, "807x Autoneg Restart: Advertise 1G=%x, 10G=%x\n",
+ ((val & (1<<5)) > 0), ((val & (1<<7)) > 0));
+- return 0;
+ }
+
+ static u8 bnx2x_8073_read_status(struct bnx2x_phy *phy,
+@@ -7748,7 +7747,7 @@ static void bnx2x_8073_link_reset(struct bnx2x_phy *phy,
+ /******************************************************************/
+ /* BCM8705 PHY SECTION */
+ /******************************************************************/
+-static int bnx2x_8705_config_init(struct bnx2x_phy *phy,
++static void bnx2x_8705_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -7772,7 +7771,6 @@ static int bnx2x_8705_config_init(struct bnx2x_phy *phy,
+ MDIO_WIS_DEVAD, MDIO_WIS_REG_LASI_CNTL, 0x1);
+ /* BCM8705 doesn't have microcode, hence the 0 */
+ bnx2x_save_spirom_version(bp, params->port, params->shmem_base, 0);
+- return 0;
+ }
+
+ static u8 bnx2x_8705_read_status(struct bnx2x_phy *phy,
+@@ -8959,7 +8957,7 @@ static u8 bnx2x_8706_8726_read_status(struct bnx2x_phy *phy,
+ /******************************************************************/
+ /* BCM8706 PHY SECTION */
+ /******************************************************************/
+-static u8 bnx2x_8706_config_init(struct bnx2x_phy *phy,
++static void bnx2x_8706_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -9061,11 +9059,9 @@ static u8 bnx2x_8706_config_init(struct bnx2x_phy *phy,
+ bnx2x_cl45_write(bp, phy,
+ MDIO_PMA_DEVAD, MDIO_PMA_REG_DIGITAL_CTRL, tmp1);
+ }
+-
+- return 0;
+ }
+
+-static int bnx2x_8706_read_status(struct bnx2x_phy *phy,
++static u8 bnx2x_8706_read_status(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -9142,7 +9138,7 @@ static u8 bnx2x_8726_read_status(struct bnx2x_phy *phy,
+ }
+
+
+-static int bnx2x_8726_config_init(struct bnx2x_phy *phy,
++static void bnx2x_8726_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -9223,8 +9219,6 @@ static int bnx2x_8726_config_init(struct bnx2x_phy *phy,
+ phy->tx_preemphasis[1]);
+ }
+
+- return 0;
+-
+ }
+
+ static void bnx2x_8726_link_reset(struct bnx2x_phy *phy,
+@@ -9360,7 +9354,7 @@ static void bnx2x_8727_config_speed(struct bnx2x_phy *phy,
+ }
+ }
+
+-static int bnx2x_8727_config_init(struct bnx2x_phy *phy,
++static void bnx2x_8727_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -9442,8 +9436,6 @@ static int bnx2x_8727_config_init(struct bnx2x_phy *phy,
+ MDIO_PMA_DEVAD, MDIO_PMA_REG_PHY_IDENTIFIER,
+ (tmp2 & 0x7fff));
+ }
+-
+- return 0;
+ }
+
+ static void bnx2x_8727_handle_mod_abs(struct bnx2x_phy *phy,
+@@ -10018,7 +10010,7 @@ static int bnx2x_848xx_cmn_config_init(struct bnx2x_phy *phy,
+ return 0;
+ }
+
+-static int bnx2x_8481_config_init(struct bnx2x_phy *phy,
++static void bnx2x_8481_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -10032,7 +10024,7 @@ static int bnx2x_8481_config_init(struct bnx2x_phy *phy,
+ bnx2x_wait_reset_complete(bp, phy, params);
+
+ bnx2x_cl45_write(bp, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 1<<15);
+- return bnx2x_848xx_cmn_config_init(phy, params, vars);
++ bnx2x_848xx_cmn_config_init(phy, params, vars);
+ }
+
+ #define PHY848xx_CMDHDLR_WAIT 300
+@@ -10282,7 +10274,7 @@ static u8 bnx2x_84833_get_reset_gpios(struct bnx2x *bp,
+ return reset_gpios;
+ }
+
+-static int bnx2x_84833_hw_reset_phy(struct bnx2x_phy *phy,
++static void bnx2x_84833_hw_reset_phy(struct bnx2x_phy *phy,
+ struct link_params *params)
+ {
+ struct bnx2x *bp = params->bp;
+@@ -10311,8 +10303,6 @@ static int bnx2x_84833_hw_reset_phy(struct bnx2x_phy *phy,
+ udelay(10);
+ DP(NETIF_MSG_LINK, "84833 hw reset on pin values 0x%x\n",
+ reset_gpios);
+-
+- return 0;
+ }
+
+ static int bnx2x_8483x_disable_eee(struct bnx2x_phy *phy,
+@@ -10355,7 +10345,7 @@ static int bnx2x_8483x_enable_eee(struct bnx2x_phy *phy,
+ }
+
+ #define PHY84833_CONSTANT_LATENCY 1193
+-static int bnx2x_848x3_config_init(struct bnx2x_phy *phy,
++static void bnx2x_848x3_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -10502,7 +10492,7 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy,
+ if (rc) {
+ DP(NETIF_MSG_LINK, "Failed to configure EEE timers\n");
+ bnx2x_8483x_disable_eee(phy, params, vars);
+- return rc;
++ return;
+ }
+
+ if ((phy->req_duplex == DUPLEX_FULL) &&
+@@ -10514,7 +10504,7 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy,
+ rc = bnx2x_8483x_disable_eee(phy, params, vars);
+ if (rc) {
+ DP(NETIF_MSG_LINK, "Failed to set EEE advertisement\n");
+- return rc;
++ return;
+ }
+ } else {
+ vars->eee_status &= ~SHMEM_EEE_SUPPORTED_MASK;
+@@ -10553,7 +10543,6 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy,
+ MDIO_84833_TOP_CFG_XGPHY_STRAP1,
+ (u16)~MDIO_84833_SUPER_ISOLATE);
+ }
+- return rc;
+ }
+
+ static u8 bnx2x_848xx_read_status(struct bnx2x_phy *phy,
+@@ -11113,7 +11102,7 @@ static void bnx2x_54618se_specific_func(struct bnx2x_phy *phy,
+ }
+ }
+
+-static int bnx2x_54618se_config_init(struct bnx2x_phy *phy,
++static void bnx2x_54618se_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -11315,8 +11304,6 @@ static int bnx2x_54618se_config_init(struct bnx2x_phy *phy,
+
+ bnx2x_cl22_write(bp, phy,
+ MDIO_PMA_REG_CTRL, autoneg_val);
+-
+- return 0;
+ }
+
+
+@@ -11540,7 +11527,7 @@ static void bnx2x_7101_config_loopback(struct bnx2x_phy *phy,
+ MDIO_XS_DEVAD, MDIO_XS_SFX7101_XGXS_TEST1, 0x100);
+ }
+
+-static int bnx2x_7101_config_init(struct bnx2x_phy *phy,
++static void bnx2x_7101_config_init(struct bnx2x_phy *phy,
+ struct link_params *params,
+ struct link_vars *vars)
+ {
+@@ -11577,7 +11564,6 @@ static int bnx2x_7101_config_init(struct bnx2x_phy *phy,
+ MDIO_PMA_DEVAD, MDIO_PMA_REG_7101_VER2, &fw_ver2);
+ bnx2x_save_spirom_version(bp, params->port,
+ (u32)(fw_ver1<<16 | fw_ver2), phy->ver_addr);
+- return 0;
+ }
+
+ static u8 bnx2x_7101_read_status(struct bnx2x_phy *phy,
+@@ -11746,9 +11732,9 @@ static const struct bnx2x_phy phy_serdes = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_xgxs_config_init,
+- .read_status = (read_status_t)bnx2x_link_settings_status,
+- .link_reset = (link_reset_t)bnx2x_int_link_reset,
++ .config_init = bnx2x_xgxs_config_init,
++ .read_status = bnx2x_link_settings_status,
++ .link_reset = bnx2x_int_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+ .format_fw_ver = (format_fw_ver_t)NULL,
+ .hw_reset = (hw_reset_t)NULL,
+@@ -11782,14 +11768,14 @@ static const struct bnx2x_phy phy_xgxs = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_xgxs_config_init,
+- .read_status = (read_status_t)bnx2x_link_settings_status,
+- .link_reset = (link_reset_t)bnx2x_int_link_reset,
+- .config_loopback = (config_loopback_t)bnx2x_set_xgxs_loopback,
++ .config_init = bnx2x_xgxs_config_init,
++ .read_status = bnx2x_link_settings_status,
++ .link_reset = bnx2x_int_link_reset,
++ .config_loopback = bnx2x_set_xgxs_loopback,
+ .format_fw_ver = (format_fw_ver_t)NULL,
+ .hw_reset = (hw_reset_t)NULL,
+ .set_link_led = (set_link_led_t)NULL,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_xgxs_specific_func
++ .phy_specific_func = bnx2x_xgxs_specific_func
+ };
+ static const struct bnx2x_phy phy_warpcore = {
+ .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT,
+@@ -11820,12 +11806,12 @@ static const struct bnx2x_phy phy_warpcore = {
+ .speed_cap_mask = 0,
+ /* req_duplex = */0,
+ /* rsrv = */0,
+- .config_init = (config_init_t)bnx2x_warpcore_config_init,
+- .read_status = (read_status_t)bnx2x_warpcore_read_status,
+- .link_reset = (link_reset_t)bnx2x_warpcore_link_reset,
+- .config_loopback = (config_loopback_t)bnx2x_set_warpcore_loopback,
++ .config_init = bnx2x_warpcore_config_init,
++ .read_status = bnx2x_warpcore_read_status,
++ .link_reset = bnx2x_warpcore_link_reset,
++ .config_loopback = bnx2x_set_warpcore_loopback,
+ .format_fw_ver = (format_fw_ver_t)NULL,
+- .hw_reset = (hw_reset_t)bnx2x_warpcore_hw_reset,
++ .hw_reset = bnx2x_warpcore_hw_reset,
+ .set_link_led = (set_link_led_t)NULL,
+ .phy_specific_func = (phy_specific_func_t)NULL
+ };
+@@ -11851,13 +11837,13 @@ static const struct bnx2x_phy phy_7101 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_7101_config_init,
+- .read_status = (read_status_t)bnx2x_7101_read_status,
+- .link_reset = (link_reset_t)bnx2x_common_ext_link_reset,
+- .config_loopback = (config_loopback_t)bnx2x_7101_config_loopback,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_7101_format_ver,
+- .hw_reset = (hw_reset_t)bnx2x_7101_hw_reset,
+- .set_link_led = (set_link_led_t)bnx2x_7101_set_link_led,
++ .config_init = bnx2x_7101_config_init,
++ .read_status = bnx2x_7101_read_status,
++ .link_reset = bnx2x_common_ext_link_reset,
++ .config_loopback = bnx2x_7101_config_loopback,
++ .format_fw_ver = bnx2x_7101_format_ver,
++ .hw_reset = bnx2x_7101_hw_reset,
++ .set_link_led = bnx2x_7101_set_link_led,
+ .phy_specific_func = (phy_specific_func_t)NULL
+ };
+ static const struct bnx2x_phy phy_8073 = {
+@@ -11882,14 +11868,14 @@ static const struct bnx2x_phy phy_8073 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_8073_config_init,
+- .read_status = (read_status_t)bnx2x_8073_read_status,
+- .link_reset = (link_reset_t)bnx2x_8073_link_reset,
++ .config_init = bnx2x_8073_config_init,
++ .read_status = bnx2x_8073_read_status,
++ .link_reset = bnx2x_8073_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver,
++ .format_fw_ver = bnx2x_format_ver,
+ .hw_reset = (hw_reset_t)NULL,
+ .set_link_led = (set_link_led_t)NULL,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_8073_specific_func
++ .phy_specific_func = bnx2x_8073_specific_func
+ };
+ static const struct bnx2x_phy phy_8705 = {
+ .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705,
+@@ -11910,11 +11896,11 @@ static const struct bnx2x_phy phy_8705 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_8705_config_init,
+- .read_status = (read_status_t)bnx2x_8705_read_status,
+- .link_reset = (link_reset_t)bnx2x_common_ext_link_reset,
++ .config_init = bnx2x_8705_config_init,
++ .read_status = bnx2x_8705_read_status,
++ .link_reset = bnx2x_common_ext_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_null_format_ver,
++ .format_fw_ver = bnx2x_null_format_ver,
+ .hw_reset = (hw_reset_t)NULL,
+ .set_link_led = (set_link_led_t)NULL,
+ .phy_specific_func = (phy_specific_func_t)NULL
+@@ -11939,11 +11925,11 @@ static const struct bnx2x_phy phy_8706 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_8706_config_init,
+- .read_status = (read_status_t)bnx2x_8706_read_status,
+- .link_reset = (link_reset_t)bnx2x_common_ext_link_reset,
++ .config_init = bnx2x_8706_config_init,
++ .read_status = bnx2x_8706_read_status,
++ .link_reset = bnx2x_common_ext_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver,
++ .format_fw_ver = bnx2x_format_ver,
+ .hw_reset = (hw_reset_t)NULL,
+ .set_link_led = (set_link_led_t)NULL,
+ .phy_specific_func = (phy_specific_func_t)NULL
+@@ -11971,11 +11957,11 @@ static const struct bnx2x_phy phy_8726 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_8726_config_init,
+- .read_status = (read_status_t)bnx2x_8726_read_status,
+- .link_reset = (link_reset_t)bnx2x_8726_link_reset,
+- .config_loopback = (config_loopback_t)bnx2x_8726_config_loopback,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver,
++ .config_init = bnx2x_8726_config_init,
++ .read_status = bnx2x_8726_read_status,
++ .link_reset = bnx2x_8726_link_reset,
++ .config_loopback = bnx2x_8726_config_loopback,
++ .format_fw_ver = bnx2x_format_ver,
+ .hw_reset = (hw_reset_t)NULL,
+ .set_link_led = (set_link_led_t)NULL,
+ .phy_specific_func = (phy_specific_func_t)NULL
+@@ -12002,14 +11988,14 @@ static const struct bnx2x_phy phy_8727 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_8727_config_init,
+- .read_status = (read_status_t)bnx2x_8727_read_status,
+- .link_reset = (link_reset_t)bnx2x_8727_link_reset,
++ .config_init = bnx2x_8727_config_init,
++ .read_status = bnx2x_8727_read_status,
++ .link_reset = bnx2x_8727_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver,
+- .hw_reset = (hw_reset_t)bnx2x_8727_hw_reset,
+- .set_link_led = (set_link_led_t)bnx2x_8727_set_link_led,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_8727_specific_func
++ .format_fw_ver = bnx2x_format_ver,
++ .hw_reset = bnx2x_8727_hw_reset,
++ .set_link_led = bnx2x_8727_set_link_led,
++ .phy_specific_func = bnx2x_8727_specific_func
+ };
+ static const struct bnx2x_phy phy_8481 = {
+ .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481,
+@@ -12037,13 +12023,13 @@ static const struct bnx2x_phy phy_8481 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_8481_config_init,
+- .read_status = (read_status_t)bnx2x_848xx_read_status,
+- .link_reset = (link_reset_t)bnx2x_8481_link_reset,
++ .config_init = bnx2x_8481_config_init,
++ .read_status = bnx2x_848xx_read_status,
++ .link_reset = bnx2x_8481_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver,
+- .hw_reset = (hw_reset_t)bnx2x_8481_hw_reset,
+- .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led,
++ .format_fw_ver = bnx2x_848xx_format_ver,
++ .hw_reset = bnx2x_8481_hw_reset,
++ .set_link_led = bnx2x_848xx_set_link_led,
+ .phy_specific_func = (phy_specific_func_t)NULL
+ };
+
+@@ -12074,14 +12060,14 @@ static const struct bnx2x_phy phy_84823 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_848x3_config_init,
+- .read_status = (read_status_t)bnx2x_848xx_read_status,
+- .link_reset = (link_reset_t)bnx2x_848x3_link_reset,
++ .config_init = bnx2x_848x3_config_init,
++ .read_status = bnx2x_848xx_read_status,
++ .link_reset = bnx2x_848x3_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver,
++ .format_fw_ver = bnx2x_848xx_format_ver,
+ .hw_reset = (hw_reset_t)NULL,
+- .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func
++ .set_link_led = bnx2x_848xx_set_link_led,
++ .phy_specific_func = bnx2x_848xx_specific_func
+ };
+
+ static const struct bnx2x_phy phy_84833 = {
+@@ -12109,14 +12095,14 @@ static const struct bnx2x_phy phy_84833 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_848x3_config_init,
+- .read_status = (read_status_t)bnx2x_848xx_read_status,
+- .link_reset = (link_reset_t)bnx2x_848x3_link_reset,
++ .config_init = bnx2x_848x3_config_init,
++ .read_status = bnx2x_848xx_read_status,
++ .link_reset = bnx2x_848x3_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver,
+- .hw_reset = (hw_reset_t)bnx2x_84833_hw_reset_phy,
+- .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func
++ .format_fw_ver = bnx2x_848xx_format_ver,
++ .hw_reset = bnx2x_84833_hw_reset_phy,
++ .set_link_led = bnx2x_848xx_set_link_led,
++ .phy_specific_func = bnx2x_848xx_specific_func
+ };
+
+ static const struct bnx2x_phy phy_84834 = {
+@@ -12143,14 +12129,14 @@ static const struct bnx2x_phy phy_84834 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_848x3_config_init,
+- .read_status = (read_status_t)bnx2x_848xx_read_status,
+- .link_reset = (link_reset_t)bnx2x_848x3_link_reset,
++ .config_init = bnx2x_848x3_config_init,
++ .read_status = bnx2x_848xx_read_status,
++ .link_reset = bnx2x_848x3_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver,
+- .hw_reset = (hw_reset_t)bnx2x_84833_hw_reset_phy,
+- .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func
++ .format_fw_ver = bnx2x_848xx_format_ver,
++ .hw_reset = bnx2x_84833_hw_reset_phy,
++ .set_link_led = bnx2x_848xx_set_link_led,
++ .phy_specific_func = bnx2x_848xx_specific_func
+ };
+
+ static const struct bnx2x_phy phy_84858 = {
+@@ -12177,14 +12163,14 @@ static const struct bnx2x_phy phy_84858 = {
+ .speed_cap_mask = 0,
+ .req_duplex = 0,
+ .rsrv = 0,
+- .config_init = (config_init_t)bnx2x_848x3_config_init,
+- .read_status = (read_status_t)bnx2x_848xx_read_status,
+- .link_reset = (link_reset_t)bnx2x_848x3_link_reset,
++ .config_init = bnx2x_848x3_config_init,
++ .read_status = bnx2x_848xx_read_status,
++ .link_reset = bnx2x_848x3_link_reset,
+ .config_loopback = (config_loopback_t)NULL,
+- .format_fw_ver = (format_fw_ver_t)bnx2x_8485x_format_ver,
+- .hw_reset = (hw_reset_t)bnx2x_84833_hw_reset_phy,
+- .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func
++ .format_fw_ver = bnx2x_8485x_format_ver,
++ .hw_reset = bnx2x_84833_hw_reset_phy,
++ .set_link_led = bnx2x_848xx_set_link_led,
++ .phy_specific_func = bnx2x_848xx_specific_func
+ };
+
+ static const struct bnx2x_phy phy_54618se = {
+@@ -12211,14 +12197,14 @@ static const struct bnx2x_phy phy_54618se = {
+ .speed_cap_mask = 0,
+ /* req_duplex = */0,
+ /* rsrv = */0,
+- .config_init = (config_init_t)bnx2x_54618se_config_init,
+- .read_status = (read_status_t)bnx2x_54618se_read_status,
+- .link_reset = (link_reset_t)bnx2x_54618se_link_reset,
+- .config_loopback = (config_loopback_t)bnx2x_54618se_config_loopback,
++ .config_init = bnx2x_54618se_config_init,
++ .read_status = bnx2x_54618se_read_status,
++ .link_reset = bnx2x_54618se_link_reset,
++ .config_loopback = bnx2x_54618se_config_loopback,
+ .format_fw_ver = (format_fw_ver_t)NULL,
+ .hw_reset = (hw_reset_t)NULL,
+- .set_link_led = (set_link_led_t)bnx2x_5461x_set_link_led,
+- .phy_specific_func = (phy_specific_func_t)bnx2x_54618se_specific_func
++ .set_link_led = bnx2x_5461x_set_link_led,
++ .phy_specific_func = bnx2x_54618se_specific_func
+ };
+ /*****************************************************************/
+ /* */
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
+index b7d2511..a625bae 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
+@@ -126,7 +126,7 @@ struct link_vars;
+ struct link_params;
+ struct bnx2x_phy;
+
+-typedef u8 (*config_init_t)(struct bnx2x_phy *phy, struct link_params *params,
++typedef void (*config_init_t)(struct bnx2x_phy *phy, struct link_params *params,
+ struct link_vars *vars);
+ typedef u8 (*read_status_t)(struct bnx2x_phy *phy, struct link_params *params,
+ struct link_vars *vars);
+@@ -134,7 +134,7 @@ typedef void (*link_reset_t)(struct bnx2x_phy *phy,
+ struct link_params *params);
+ typedef void (*config_loopback_t)(struct bnx2x_phy *phy,
+ struct link_params *params);
+-typedef u8 (*format_fw_ver_t)(u32 raw, u8 *str, u16 *len);
++typedef int (*format_fw_ver_t)(u32 raw, u8 *str, u16 *len);
+ typedef void (*hw_reset_t)(struct bnx2x_phy *phy, struct link_params *params);
+ typedef void (*set_link_led_t)(struct bnx2x_phy *phy,
+ struct link_params *params, u8 mode);
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+index 2bf9c87..5a36b0f 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+@@ -14130,7 +14130,7 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
+ * this device has been detected.
+ */
+ static pci_ers_result_t bnx2x_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *dev = pci_get_drvdata(pdev);
+ struct bnx2x *bp = netdev_priv(dev);
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
index ff702a7..cb3ae16 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
@@ -52543,8 +58765,21 @@ 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/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
+index 3010080..49824f1 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)
+ * this device has been detected.
+ */
+ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct tg3 *tp = netdev_priv(netdev);
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h
-index 31c9f82..e65e986 100644
+index 3b5e98e..52b3916 100644
--- a/drivers/net/ethernet/broadcom/tg3.h
+++ b/drivers/net/ethernet/broadcom/tg3.h
@@ -150,6 +150,7 @@
@@ -52555,10 +58790,183 @@ index 31c9f82..e65e986 100644
#define CHIPREV_ID_5750_C2 0x4202
#define CHIPREV_ID_5752_A0_HW 0x5000
#define CHIPREV_ID_5752_A0 0x6000
+diff --git a/drivers/net/ethernet/brocade/bna/bfa_cs.h b/drivers/net/ethernet/brocade/bna/bfa_cs.h
+index 1d11d66..8f7a3cb 100644
+--- a/drivers/net/ethernet/brocade/bna/bfa_cs.h
++++ b/drivers/net/ethernet/brocade/bna/bfa_cs.h
+@@ -34,10 +34,19 @@ struct bfa_sm_table {
+ int state; /*!< state machine encoding */
+ char *name; /*!< state name for display */
+ };
+-#define BFA_SM(_sm) ((bfa_sm_t)(_sm))
++#define BFA_SM(_sm) (_sm)
++
++#define bfa_sm_set_state(_sm, _state) ((_sm)->sm = (_state))
++#define bfa_sm_cmp_state(_sm, _state) ((_sm)->sm == (_state))
+
+ /* State machine with entry actions. */
+-typedef void (*bfa_fsm_t)(void *fsm, int event);
++struct bfa_ioc;
++enum ioc_event;
++struct bfa_iocpf;
++enum iocpf_event;
++
++typedef void (*bfa_fsm_ioc_t)(struct bfa_ioc *fsm, enum ioc_event event);
++typedef void (*bfa_fsm_iocpf_t)(struct bfa_iocpf *fsm, enum iocpf_event event);
+
+ /* oc - object class eg. bfa_ioc
+ * st - state, eg. reset
+@@ -49,16 +58,37 @@ typedef void (*bfa_fsm_t)(void *fsm, int event);
+ static void oc ## _sm_ ## st ## _entry(otype * fsm)
+
+ #define bfa_fsm_set_state(_fsm, _state) do { \
+- (_fsm)->fsm = (bfa_fsm_t)(_state); \
++ (_fsm)->fsm = (_state); \
+ _state ## _entry(_fsm); \
+ } while (0)
+
+ #define bfa_fsm_send_event(_fsm, _event) ((_fsm)->fsm((_fsm), (_event)))
+-#define bfa_fsm_cmp_state(_fsm, _state) \
+- ((_fsm)->fsm == (bfa_fsm_t)(_state))
++#define bfa_fsm_cmp_state(_fsm, _state) ((_fsm)->fsm == (_state))
++
++/* For converting from state machine function to state encoding. */
++struct iocpf_sm_table {
++ bfa_fsm_iocpf_t sm; /*!< state machine function */
++ int state; /*!< state machine encoding */
++ char *name; /*!< state name for display */
++};
++struct ioc_sm_table {
++ bfa_fsm_ioc_t sm; /*!< state machine function */
++ int state; /*!< state machine encoding */
++ char *name; /*!< state name for display */
++};
++
++static inline int
++iocpf_sm_to_state(const struct iocpf_sm_table *smt, bfa_fsm_iocpf_t sm)
++{
++ int i = 0;
++
++ while (smt[i].sm && smt[i].sm != sm)
++ i++;
++ return smt[i].state;
++}
+
+ static inline int
+-bfa_sm_to_state(const struct bfa_sm_table *smt, bfa_sm_t sm)
++ioc_sm_to_state(const struct ioc_sm_table *smt, bfa_fsm_ioc_t sm)
+ {
+ int i = 0;
+
+diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
+index 9e59663..3564807 100644
+--- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c
++++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
+@@ -122,7 +122,7 @@ bfa_fsm_state_decl(bfa_ioc, disabling, struct bfa_ioc, enum ioc_event);
+ bfa_fsm_state_decl(bfa_ioc, disabled, struct bfa_ioc, enum ioc_event);
+ bfa_fsm_state_decl(bfa_ioc, hwfail, struct bfa_ioc, enum ioc_event);
+
+-static struct bfa_sm_table ioc_sm_table[] = {
++static struct ioc_sm_table ioc_sm_table[] = {
+ {BFA_SM(bfa_ioc_sm_uninit), BFA_IOC_UNINIT},
+ {BFA_SM(bfa_ioc_sm_reset), BFA_IOC_RESET},
+ {BFA_SM(bfa_ioc_sm_enabling), BFA_IOC_ENABLING},
+@@ -191,7 +191,7 @@ bfa_fsm_state_decl(bfa_iocpf, disabling_sync, struct bfa_iocpf,
+ enum iocpf_event);
+ bfa_fsm_state_decl(bfa_iocpf, disabled, struct bfa_iocpf, enum iocpf_event);
+
+-static struct bfa_sm_table iocpf_sm_table[] = {
++static struct iocpf_sm_table iocpf_sm_table[] = {
+ {BFA_SM(bfa_iocpf_sm_reset), BFA_IOCPF_RESET},
+ {BFA_SM(bfa_iocpf_sm_fwcheck), BFA_IOCPF_FWMISMATCH},
+ {BFA_SM(bfa_iocpf_sm_mismatch), BFA_IOCPF_FWMISMATCH},
+@@ -2862,12 +2862,12 @@ static enum bfa_ioc_state
+ bfa_ioc_get_state(struct bfa_ioc *ioc)
+ {
+ enum bfa_iocpf_state iocpf_st;
+- enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm);
++ enum bfa_ioc_state ioc_st = ioc_sm_to_state(ioc_sm_table, ioc->fsm);
+
+ if (ioc_st == BFA_IOC_ENABLING ||
+ ioc_st == BFA_IOC_FAIL || ioc_st == BFA_IOC_INITFAIL) {
+
+- iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm);
++ iocpf_st = iocpf_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm);
+
+ switch (iocpf_st) {
+ case BFA_IOCPF_SEMWAIT:
+@@ -2985,7 +2985,7 @@ bfa_nw_iocpf_timeout(struct bfa_ioc *ioc)
+ {
+ enum bfa_iocpf_state iocpf_st;
+
+- iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm);
++ iocpf_st = iocpf_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm);
+
+ if (iocpf_st == BFA_IOCPF_HWINIT)
+ bfa_ioc_poll_fwinit(ioc);
+diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.h b/drivers/net/ethernet/brocade/bna/bfa_ioc.h
+index 2c0b4c0..97873eb 100644
+--- a/drivers/net/ethernet/brocade/bna/bfa_ioc.h
++++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.h
+@@ -156,7 +156,7 @@ struct bfa_ioc_notify {
+ } while (0)
+
+ struct bfa_iocpf {
+- bfa_fsm_t fsm;
++ bfa_fsm_iocpf_t fsm;
+ struct bfa_ioc *ioc;
+ bool fw_mismatch_notified;
+ bool auto_recover;
+@@ -164,7 +164,7 @@ struct bfa_iocpf {
+ };
+
+ struct bfa_ioc {
+- bfa_fsm_t fsm;
++ bfa_fsm_ioc_t fsm;
+ struct bfa *bfa;
+ struct bfa_pcidev pcidev;
+ struct timer_list ioc_timer;
+diff --git a/drivers/net/ethernet/brocade/bna/bfa_msgq.h b/drivers/net/ethernet/brocade/bna/bfa_msgq.h
+index 66bc8b5..bf64466 100644
+--- a/drivers/net/ethernet/brocade/bna/bfa_msgq.h
++++ b/drivers/net/ethernet/brocade/bna/bfa_msgq.h
+@@ -63,8 +63,10 @@ enum bfa_msgq_cmdq_flags {
+ BFA_MSGQ_CMDQ_F_DB_UPDATE = 1,
+ };
+
++enum cmdq_event;
++
+ struct bfa_msgq_cmdq {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bfa_msgq_cmdq *, enum cmdq_event);
+ enum bfa_msgq_cmdq_flags flags;
+
+ u16 producer_index;
+@@ -89,8 +91,10 @@ enum bfa_msgq_rspq_flags {
+
+ typedef void (*bfa_msgq_mcfunc_t)(void *cbarg, struct bfi_msgq_mhdr *mhdr);
+
++enum rspq_event;
++
+ struct bfa_msgq_rspq {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bfa_msgq_rspq *, enum rspq_event);
+ enum bfa_msgq_rspq_flags flags;
+
+ u16 producer_index;
diff --git a/drivers/net/ethernet/brocade/bna/bna_enet.c b/drivers/net/ethernet/brocade/bna/bna_enet.c
-index 4e5c387..bba8173 100644
+index 4e5c387..0791dab 100644
--- a/drivers/net/ethernet/brocade/bna/bna_enet.c
+++ b/drivers/net/ethernet/brocade/bna/bna_enet.c
+@@ -1265,7 +1265,7 @@ bna_enet_mtu_get(struct bna_enet *enet)
+ void
+ bna_enet_enable(struct bna_enet *enet)
+ {
+- if (enet->fsm != (bfa_sm_t)bna_enet_sm_stopped)
++ if (enet->fsm != bna_enet_sm_stopped)
+ return;
+
+ enet->flags |= BNA_ENET_F_ENABLED;
@@ -1676,10 +1676,10 @@ bna_cb_ioceth_reset(void *arg)
}
@@ -52574,6 +58982,204 @@ index 4e5c387..bba8173 100644
};
static void bna_attr_init(struct bna_ioceth *ioceth)
+@@ -1759,12 +1759,12 @@ bna_ioceth_uninit(struct bna_ioceth *ioceth)
+ void
+ bna_ioceth_enable(struct bna_ioceth *ioceth)
+ {
+- if (ioceth->fsm == (bfa_fsm_t)bna_ioceth_sm_ready) {
++ if (ioceth->fsm == bna_ioceth_sm_ready) {
+ bnad_cb_ioceth_ready(ioceth->bna->bnad);
+ return;
+ }
+
+- if (ioceth->fsm == (bfa_fsm_t)bna_ioceth_sm_stopped)
++ if (ioceth->fsm == bna_ioceth_sm_stopped)
+ bfa_fsm_send_event(ioceth, IOCETH_E_ENABLE);
+ }
+
+diff --git a/drivers/net/ethernet/brocade/bna/bna_tx_rx.c b/drivers/net/ethernet/brocade/bna/bna_tx_rx.c
+index 95bc470..c12be9f 100644
+--- a/drivers/net/ethernet/brocade/bna/bna_tx_rx.c
++++ b/drivers/net/ethernet/brocade/bna/bna_tx_rx.c
+@@ -1964,7 +1964,7 @@ static void
+ bna_rx_stop(struct bna_rx *rx)
+ {
+ rx->rx_flags &= ~BNA_RX_F_ENET_STARTED;
+- if (rx->fsm == (bfa_fsm_t) bna_rx_sm_stopped)
++ if (rx->fsm == bna_rx_sm_stopped)
+ bna_rx_mod_cb_rx_stopped(&rx->bna->rx_mod, rx);
+ else {
+ rx->stop_cbfn = bna_rx_mod_cb_rx_stopped;
+@@ -2543,7 +2543,7 @@ bna_rx_destroy(struct bna_rx *rx)
+ void
+ bna_rx_enable(struct bna_rx *rx)
+ {
+- if (rx->fsm != (bfa_sm_t)bna_rx_sm_stopped)
++ if (rx->fsm != bna_rx_sm_stopped)
+ return;
+
+ rx->rx_flags |= BNA_RX_F_ENABLED;
+@@ -3531,7 +3531,7 @@ bna_tx_destroy(struct bna_tx *tx)
+ void
+ bna_tx_enable(struct bna_tx *tx)
+ {
+- if (tx->fsm != (bfa_sm_t)bna_tx_sm_stopped)
++ if (tx->fsm != bna_tx_sm_stopped)
+ return;
+
+ tx->flags |= BNA_TX_F_ENABLED;
+diff --git a/drivers/net/ethernet/brocade/bna/bna_types.h b/drivers/net/ethernet/brocade/bna/bna_types.h
+index c438d03..4653f43 100644
+--- a/drivers/net/ethernet/brocade/bna/bna_types.h
++++ b/drivers/net/ethernet/brocade/bna/bna_types.h
+@@ -320,8 +320,10 @@ struct bna_attr {
+
+ /* IOCEth */
+
++enum bna_ioceth_event;
++
+ struct bna_ioceth {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bna_ioceth *, enum bna_ioceth_event);
+ struct bfa_ioc ioc;
+
+ struct bna_attr attr;
+@@ -342,8 +344,10 @@ struct bna_pause_config {
+ enum bna_status rx_pause;
+ };
+
++enum bna_enet_event;
++
+ struct bna_enet {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bna_enet *, enum bna_enet_event);
+ enum bna_enet_flags flags;
+
+ enum bna_enet_type type;
+@@ -368,8 +372,10 @@ struct bna_enet {
+
+ /* Ethport */
+
++enum bna_ethport_event;
++
+ struct bna_ethport {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bna_ethport *, enum bna_ethport_event);
+ enum bna_ethport_flags flags;
+
+ enum bna_link_status link_status;
+@@ -462,13 +468,15 @@ struct bna_txq {
+ };
+
+ /* Tx object */
++enum bna_tx_event;
++
+ struct bna_tx {
+ /* This should be the first one */
+ struct list_head qe;
+ int rid;
+ int hw_id;
+
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bna_tx *, enum bna_tx_event);
+ enum bna_tx_flags flags;
+
+ enum bna_tx_type type;
+@@ -706,8 +714,10 @@ struct bna_rxp {
+ };
+
+ /* RxF structure (hardware Rx Function) */
++enum bna_rxf_event;
++
+ struct bna_rxf {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bna_rxf *, enum bna_rxf_event);
+
+ struct bfa_msgq_cmd_entry msgq_cmd;
+ union {
+@@ -777,13 +787,15 @@ struct bna_rxf {
+ };
+
+ /* Rx object */
++enum bna_rx_event;
++
+ struct bna_rx {
+ /* This should be the first one */
+ struct list_head qe;
+ int rid;
+ int hw_id;
+
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bna_rx *, enum bna_rx_event);
+
+ enum bna_rx_type type;
+
+diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
+index 771cc26..c681a90 100644
+--- a/drivers/net/ethernet/brocade/bna/bnad.c
++++ b/drivers/net/ethernet/brocade/bna/bnad.c
+@@ -1118,8 +1118,9 @@ bnad_cb_tx_resume(struct bnad *bnad, struct bna_tx *tx)
+ * Free all TxQs buffers and then notify TX_E_CLEANUP_DONE to Tx fsm.
+ */
+ static void
+-bnad_tx_cleanup(struct delayed_work *work)
++bnad_tx_cleanup(struct work_struct *_work)
+ {
++ struct delayed_work *work = (struct delayed_work *)_work;
+ struct bnad_tx_info *tx_info =
+ container_of(work, struct bnad_tx_info, tx_cleanup_work);
+ struct bnad *bnad = NULL;
+@@ -1197,7 +1198,7 @@ bnad_cb_rx_stall(struct bnad *bnad, struct bna_rx *rx)
+ * Free all RxQs buffers and then notify RX_E_CLEANUP_DONE to Rx fsm.
+ */
+ static void
+-bnad_rx_cleanup(void *work)
++bnad_rx_cleanup(struct work_struct *work)
+ {
+ struct bnad_rx_info *rx_info =
+ container_of(work, struct bnad_rx_info, rx_cleanup_work);
+@@ -2021,8 +2022,7 @@ bnad_setup_tx(struct bnad *bnad, u32 tx_id)
+ }
+ tx_info->tx = tx;
+
+- INIT_DELAYED_WORK(&tx_info->tx_cleanup_work,
+- (work_func_t)bnad_tx_cleanup);
++ INIT_DELAYED_WORK(&tx_info->tx_cleanup_work, bnad_tx_cleanup);
+
+ /* Register ISR for the Tx object */
+ if (intr_info->intr_type == BNA_INTR_T_MSIX) {
+@@ -2278,8 +2278,7 @@ bnad_setup_rx(struct bnad *bnad, u32 rx_id)
+ rx_info->rx = rx;
+ spin_unlock_irqrestore(&bnad->bna_lock, flags);
+
+- INIT_WORK(&rx_info->rx_cleanup_work,
+- (work_func_t)(bnad_rx_cleanup));
++ INIT_WORK(&rx_info->rx_cleanup_work, bnad_rx_cleanup);
+
+ /*
+ * Init NAPI, so that state is set to NAPI_STATE_SCHED,
+diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
+index 50c9410..afd792e 100644
+--- a/drivers/net/ethernet/cadence/macb.c
++++ b/drivers/net/ethernet/cadence/macb.c
+@@ -1279,7 +1279,7 @@ dma_error:
+ return 0;
+ }
+
+-static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t macb_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ u16 queue_index = skb_get_queue_mapping(skb);
+ struct macb *bp = netdev_priv(dev);
+@@ -2550,7 +2550,7 @@ static int at91ether_close(struct net_device *dev)
+ }
+
+ /* Transmit packet */
+-static int at91ether_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t at91ether_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct macb *lp = netdev_priv(dev);
+
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
index 245c063..74ed9c9 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
@@ -52600,10 +59206,19 @@ 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 b895044..f8ed0c3 100644
+index 34d269c..43dcc17 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c
-@@ -1726,7 +1726,7 @@ static void if_cfg_callback(struct octeon_device *oct,
+@@ -475,7 +475,7 @@ static void stop_pci_io(struct octeon_device *oct)
+ * this device has been detected.
+ */
+ static pci_ers_result_t liquidio_pcie_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct octeon_device *oct = pci_get_drvdata(pdev);
+
+@@ -1724,7 +1724,7 @@ static void if_cfg_callback(struct octeon_device *oct,
if (resp->status)
dev_err(&oct->pci_dev->dev, "nic if cfg instruction failed. Status: %llx\n",
CVM_CAST64(resp->status));
@@ -52612,7 +59227,16 @@ index b895044..f8ed0c3 100644
/* This barrier is required to be sure that the response has been
* written fully before waking up the handler
-@@ -3176,7 +3176,7 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
+@@ -2662,7 +2662,7 @@ static inline u32 get_ipv6_5tuple_tag(struct sk_buff *skb)
+ * @returns whether the packet was transmitted to the device okay or not
+ * (NETDEV_TX_OK or NETDEV_TX_BUSY)
+ */
+-static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
+ {
+ struct lio *lio;
+ struct octnet_buf_free_info *finfo;
+@@ -3174,7 +3174,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);
@@ -52621,7 +59245,7 @@ index b895044..f8ed0c3 100644
ctx->octeon_id = lio_get_device_id(octeon_dev);
init_waitqueue_head(&ctx->wc);
-@@ -3239,8 +3239,11 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
+@@ -3237,8 +3237,11 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)
props = &octeon_dev->props[i];
props->netdev = netdev;
@@ -52635,6 +59259,19 @@ index b895044..f8ed0c3 100644
/* Associate the routines that will handle different
* netdev tasks.
+diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+index 60908ea..4ecee32 100644
+--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
++++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+@@ -2996,7 +2996,7 @@ void t3_fatal_err(struct adapter *adapter)
+ * this device has been detected.
+ */
+ static pci_ers_result_t t3_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct adapter *adapter = pci_get_drvdata(pdev);
+
diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.h b/drivers/net/ethernet/chelsio/cxgb3/l2t.h
index 8cffcdf..aadf043 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/l2t.h
@@ -52648,11 +59285,88 @@ index 8cffcdf..aadf043 100644
#define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb)
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+index b8a5fb0..39f0c9a 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+@@ -4103,7 +4103,7 @@ bye:
+ /* EEH callbacks */
+
+ static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ int i;
+ struct adapter *adap = pci_get_drvdata(pdev);
+diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h b/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
+index 6049f70..6e1f19e 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
++++ b/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
+@@ -538,7 +538,7 @@ int t4vf_sge_alloc_eth_txq(struct adapter *, struct sge_eth_txq *,
+ unsigned int);
+ void t4vf_free_sge_resources(struct adapter *);
+
+-int t4vf_eth_xmit(struct sk_buff *, struct net_device *);
++netdev_tx_t t4vf_eth_xmit(struct sk_buff *, struct net_device *);
+ int t4vf_ethrx_handler(struct sge_rspq *, const __be64 *,
+ const struct pkt_gl *);
+
+diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/sge.c b/drivers/net/ethernet/chelsio/cxgb4vf/sge.c
+index 6528231..8503500 100644
+--- 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)
+ *
+ * Add a packet to an SGE Ethernet TX queue. Runs with softirqs disabled.
+ */
+-int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
++netdev_tx_t t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ u32 wr_mid;
+ u64 cntrl, *end;
diff --git a/drivers/net/ethernet/dec/tulip/de4x5.c b/drivers/net/ethernet/dec/tulip/de4x5.c
-index 8966f31..e15a101 100644
+index 3acde3b..284086c 100644
--- a/drivers/net/ethernet/dec/tulip/de4x5.c
+++ b/drivers/net/ethernet/dec/tulip/de4x5.c
-@@ -5373,7 +5373,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+@@ -912,7 +912,7 @@ static int de4x5_init(struct net_device *dev);
+ static int de4x5_sw_reset(struct net_device *dev);
+ static int de4x5_rx(struct net_device *dev);
+ static int de4x5_tx(struct net_device *dev);
+-static void de4x5_ast(struct net_device *dev);
++static void de4x5_ast(unsigned long _dev);
+ static int de4x5_txur(struct net_device *dev);
+ static int de4x5_rx_ovfc(struct net_device *dev);
+
+@@ -1149,7 +1149,7 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
+ lp->gendev = gendev;
+ spin_lock_init(&lp->lock);
+ init_timer(&lp->timer);
+- lp->timer.function = (void (*)(unsigned long))de4x5_ast;
++ lp->timer.function = de4x5_ast;
+ lp->timer.data = (unsigned long)dev;
+ de4x5_parse_params(dev);
+
+@@ -1740,8 +1740,9 @@ de4x5_tx(struct net_device *dev)
+ }
+
+ static void
+-de4x5_ast(struct net_device *dev)
++de4x5_ast(unsigned long _dev)
+ {
++ struct net_device *dev = (struct net_device *)_dev;
+ 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)
+ lp->media = INIT;
+ lp->tcount = 0;
+
+- de4x5_ast(dev);
++ de4x5_ast((unsigned long)dev);
+
+ return lp->media;
+ }
+@@ -5373,7 +5374,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];
}
@@ -52661,7 +59375,7 @@ index 8966f31..e15a101 100644
break;
case DE4X5_SET_HWADDR: /* Set the hardware address */
-@@ -5413,7 +5413,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+@@ -5413,7 +5414,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);
@@ -52671,10 +59385,10 @@ index 8966f31..e15a101 100644
break;
}
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
-index 8a1d9ff..5cc81dd 100644
+index d1cf127..9d52393 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
-@@ -551,7 +551,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
+@@ -556,7 +556,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
if (wrapped)
newacc += 65536;
@@ -52683,8 +59397,17 @@ index 8a1d9ff..5cc81dd 100644
}
static void populate_erx_stats(struct be_adapter *adapter,
+@@ -5395,7 +5395,7 @@ static void be_shutdown(struct pci_dev *pdev)
+ }
+
+ static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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 6d0c5d5..55be363 100644
+index 84384e1..baac17d 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -30,6 +30,8 @@
@@ -52709,6 +59432,109 @@ index dce5f7b..2433466 100644
#include "ftmac100.h"
+diff --git a/drivers/net/ethernet/hisilicon/hip04_eth.c b/drivers/net/ethernet/hisilicon/hip04_eth.c
+index 0c4afe9..d888314 100644
+--- a/drivers/net/ethernet/hisilicon/hip04_eth.c
++++ b/drivers/net/ethernet/hisilicon/hip04_eth.c
+@@ -422,7 +422,7 @@ static void hip04_start_tx_timer(struct hip04_priv *priv)
+ ns, HRTIMER_MODE_REL);
+ }
+
+-static int hip04_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t hip04_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+ {
+ 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
+--- 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)
+ return IRQ_HANDLED;
+ }
+
+-static int hix5hd2_net_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t hix5hd2_net_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct hix5hd2_priv *priv = netdev_priv(dev);
+ struct hix5hd2_desc *desc;
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+index d4f92ed..38fdf5b 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+@@ -857,16 +857,18 @@ int hns_dsaf_ae_init(struct dsaf_device *dsaf_dev)
+ struct hnae_ae_dev *ae_dev = &dsaf_dev->ae_dev;
+ static atomic_t id = ATOMIC_INIT(-1);
+
++ pax_open_kernel();
+ switch (dsaf_dev->dsaf_ver) {
+ case AE_VERSION_1:
+- hns_dsaf_ops.toggle_ring_irq = hns_ae_toggle_ring_irq;
++ *(void **)&hns_dsaf_ops.toggle_ring_irq = hns_ae_toggle_ring_irq;
+ break;
+ case AE_VERSION_2:
+- hns_dsaf_ops.toggle_ring_irq = hns_aev2_toggle_ring_irq;
++ *(void **)&hns_dsaf_ops.toggle_ring_irq = hns_aev2_toggle_ring_irq;
+ break;
+ default:
+ break;
+ }
++ pax_close_kernel();
+
+ snprintf(ae_dev->name, AE_NAME_SIZE, "%s%d", DSAF_DEVICE_NAME,
+ (int)atomic_inc_return(&id));
+diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
+index 068789e..f4928f0 100644
+--- a/drivers/net/ethernet/intel/e100.c
++++ b/drivers/net/ethernet/intel/e100.c
+@@ -3106,7 +3106,7 @@ static void e100_shutdown(struct pci_dev *pdev)
+ * @pdev: Pointer to PCI device
+ * @state: The current pci connection state
+ */
+-static pci_ers_result_t e100_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++static pci_ers_result_t e100_io_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct nic *nic = netdev_priv(netdev);
+diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
+index 3fc7bde..de784b9 100644
+--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
++++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
+@@ -5255,7 +5255,7 @@ static void e1000_netpoll(struct net_device *netdev)
+ * this device has been detected.
+ */
+ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct e1000_adapter *adapter = netdev_priv(netdev);
+diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
+index c71ba1b..3d364c1 100644
+--- 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)
+ * this device has been detected.
+ */
+ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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
+--- 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,
+ * this device has been detected.
+ */
+ static pci_ers_result_t fm10k_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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
--- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c
@@ -52722,11 +59548,50 @@ index 565ca7c..dcdf764 100644
smp_mb(); /* Force the above update. */
}
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index 31e5f39..d3a8073 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -7612,7 +7612,7 @@ static void igb_netpoll(struct net_device *netdev)
+ * this device has been detected.
+ **/
+ static pci_ers_result_t igb_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct igb_adapter *adapter = netdev_priv(netdev);
+diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
+index 297af80..ae51655 100644
+--- a/drivers/net/ethernet/intel/igbvf/netdev.c
++++ b/drivers/net/ethernet/intel/igbvf/netdev.c
+@@ -2507,7 +2507,7 @@ static void igbvf_netpoll(struct net_device *netdev)
+ * this device has been detected.
+ */
+ static pci_ers_result_t igbvf_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct igbvf_adapter *adapter = netdev_priv(netdev);
+diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+index c4003a8..e464fee 100644
+--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+@@ -9349,7 +9349,7 @@ static void ixgbe_remove(struct pci_dev *pdev)
+ * this device has been detected.
+ */
+ static pci_ers_result_t ixgbe_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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 e5ba040..d47531c 100644
+index ef1504d..e1c3402 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
-@@ -782,7 +782,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
+@@ -1119,7 +1119,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter)
}
/* update the base incval used to calculate frequency adjustment */
@@ -52735,8 +59600,43 @@ index e5ba040..d47531c 100644
smp_mb();
/* need lock to prevent incorrect read while modifying cyclecounter */
+diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+index 3558f01..ff4a352 100644
+--- 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)
+ return __ixgbevf_maybe_stop_tx(tx_ring, size);
+ }
+
+-static int ixgbevf_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t ixgbevf_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
+ {
+ struct ixgbevf_adapter *adapter = netdev_priv(netdev);
+ struct ixgbevf_tx_buffer *first;
+@@ -4144,7 +4144,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,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct ixgbevf_adapter *adapter = netdev_priv(netdev);
+diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c
+index 7ace07d..b9eab92 100644
+--- a/drivers/net/ethernet/marvell/pxa168_eth.c
++++ b/drivers/net/ethernet/marvell/pxa168_eth.c
+@@ -1270,7 +1270,7 @@ static int pxa168_rx_poll(struct napi_struct *napi, int budget)
+ return work_done;
+ }
+
+-static int pxa168_eth_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t pxa168_eth_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct pxa168_eth_private *pep = netdev_priv(dev);
+ struct net_device_stats *stats = &dev->stats;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
-index e7a5000..982753a 100644
+index 41440b2..0ccefa2 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
@@ -61,7 +61,7 @@ static int mlx4_alloc_pages(struct mlx4_en_priv *priv,
@@ -52749,10 +59649,10 @@ index e7a5000..982753a 100644
if (likely(page))
break;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-index 4421bf54..c07afb0 100644
+index e0946ab..308403f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
-@@ -475,8 +475,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
+@@ -477,8 +477,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
wmb();
/* we want to dirty this cache line once */
@@ -52763,29 +59663,37 @@ index 4421bf54..c07afb0 100644
netdev_tx_completed_queue(ring->tx_queue, packets, bytes);
-diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-index 1203d89..7895359 100644
---- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
-@@ -2033,8 +2033,11 @@ static void mlx5e_build_netdev(struct net_device *netdev)
+diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
+index f8674ae..7ef8ac5 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/main.c
++++ b/drivers/net/ethernet/mellanox/mlx4/main.c
+@@ -3951,7 +3951,7 @@ static const struct pci_device_id mlx4_pci_table[] = {
+ MODULE_DEVICE_TABLE(pci, mlx4_pci_table);
- SET_NETDEV_DEV(netdev, &mdev->pdev->dev);
+ static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct mlx4_dev_persistent *persist = pci_get_drvdata(pdev);
-- if (priv->params.num_tc > 1)
-- mlx5e_netdev_ops.ndo_select_queue = mlx5e_select_queue;
-+ if (priv->params.num_tc > 1) {
-+ pax_open_kernel();
-+ *(void **)&mlx5e_netdev_ops.ndo_select_queue = mlx5e_select_queue;
-+ pax_close_kernel();
-+ }
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
+index 1545a94..418888c 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
+@@ -1367,7 +1367,7 @@ static void remove_one(struct pci_dev *pdev)
+ }
- netdev->netdev_ops = &mlx5e_netdev_ops;
- netdev->watchdog_timeo = 15 * HZ;
+ static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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 3be4a23..e89602b 100644
+index a94daa8..d1d3bd0 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
-@@ -1915,7 +1915,7 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused,
+@@ -2994,7 +2994,7 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
@@ -52794,6 +59702,32 @@ index 3be4a23..e89602b 100644
.notifier_call = mlxsw_sp_netdevice_event,
};
+diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c
+index 2fc5cd5..6c6108a 100644
+--- a/drivers/net/ethernet/micrel/ks8851_mll.c
++++ b/drivers/net/ethernet/micrel/ks8851_mll.c
+@@ -1020,7 +1020,7 @@ static void ks_write_qmu(struct ks_net *ks, u8 *pdata, u16 len)
+ * spin_lock_irqsave is required because tx and rx should be mutual exclusive.
+ * So while tx is in-progress, prevent IRQ interrupt from happenning.
+ */
+-static int ks_start_xmit(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t ks_start_xmit(struct sk_buff *skb, struct net_device *netdev)
+ {
+ int retv = NETDEV_TX_OK;
+ struct ks_net *ks = netdev_priv(netdev);
+diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
+index 9ba9758..9c7c77f 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,
+ * this device has been detected.
+ */
+ static pci_ers_result_t s2io_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct s2io_nic *sp = netdev_priv(netdev);
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c
index 6223930..975033d 100644
--- a/drivers/net/ethernet/neterion/vxge/vxge-config.c
@@ -52819,6 +59753,32 @@ index 6223930..975033d 100644
fifo->mempool =
__vxge_hw_mempool_create(vpath->hldev,
fifo->config->memblock_size,
+diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c
+index e0993eb..d8d7f50 100644
+--- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
++++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
+@@ -4043,7 +4043,7 @@ static int vxge_pm_resume(struct pci_dev *pdev)
+ * this device has been detected.
+ */
+ static pci_ers_result_t vxge_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ 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
+--- 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,
+ *
+ * Return: NETDEV_TX_OK on success.
+ */
+-static int nfp_net_tx(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t nfp_net_tx(struct sk_buff *skb, struct net_device *netdev)
+ {
+ struct nfp_net *nn = netdev_priv(netdev);
+ const struct skb_frag_struct *frag;
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 75e88f4..1db3bf6 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
@@ -52834,6 +59794,41 @@ index 75e88f4..1db3bf6 100644
__le32 txvlan;
__le32 flaglen;
};
+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
+--- 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)
+ * - NETDEV_TX_OK: Normal end
+ * - NETDEV_TX_BUSY: Error end
+ */
+-static int pch_gbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t pch_gbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
+ {
+ 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 = {
+ };
+
+ static pci_ers_result_t pch_gbe_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct pch_gbe_adapter *adapter = netdev_priv(netdev);
+diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+index 6409a06..e5bd4d6 100644
+--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
++++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+@@ -1756,7 +1756,7 @@ err_out:
+ }
+
+ static pci_ers_result_t netxen_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct netxen_adapter *adapter = pci_get_drvdata(pdev);
+
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index bf89216..4044d8c 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -52880,6 +59875,19 @@ index 3490675..0b9e15a 100644
break;
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
+--- 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)
+ }
+
+ static pci_ers_result_t qlcnic_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
+ struct qlcnic_hardware_ops *hw_ops = adapter->ahw->hw_ops;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
index cda9e60..4019992 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
@@ -52894,7 +59902,7 @@ index cda9e60..4019992 100644
u32 entry_offset, dump, no_entries, buf_offset = 0;
int i, k, ops_cnt, ops_index, dump_size = 0;
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
-index 79ef799..59bbd1f 100644
+index dd2cf37..e36c9bb 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -798,22 +798,22 @@ struct rtl8169_private {
@@ -52924,8 +59932,21 @@ index 79ef799..59bbd1f 100644
int (*set_speed)(struct net_device *, u8 aneg, u16 sp, u8 dpx, u32 adv);
int (*get_settings)(struct net_device *, struct ethtool_cmd *);
+diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
+index 01f6d5b..5584cdb 100644
+--- a/drivers/net/ethernet/renesas/sh_eth.c
++++ b/drivers/net/ethernet/renesas/sh_eth.c
+@@ -2322,7 +2322,7 @@ static void sh_eth_tx_timeout(struct net_device *ndev)
+ }
+
+ /* Packet transmit function */
+-static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+ {
+ struct sh_eth_private *mdp = netdev_priv(ndev);
+ struct sh_eth_txdesc *txdesc;
diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
-index 2b34622..c406e81 100644
+index f39e719..d05dce9 100644
--- a/drivers/net/ethernet/rocker/rocker.c
+++ b/drivers/net/ethernet/rocker/rocker.c
@@ -5418,7 +5418,7 @@ out:
@@ -53029,6 +60050,19 @@ index 9d78830..74fc649 100644
if (tx_done != state->packet_count) {
/* Don't free the skbs; they will be picked up on TX
* overflow or channel teardown.
+diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
+index 8af2556..6da27b9 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)
+ }
+
+ /* Entry point for transmitting a packet */
+-static int smsc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t smsc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ 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
--- a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
@@ -53044,6 +60078,19 @@ index 3f20bb1..59add41 100644
}
/* To mask all all interrupts.*/
+diff --git a/drivers/net/ethernet/synopsys/dwc_eth_qos.c b/drivers/net/ethernet/synopsys/dwc_eth_qos.c
+index af11ed1..21bca5f 100644
+--- a/drivers/net/ethernet/synopsys/dwc_eth_qos.c
++++ 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)
+ lp->gso_size = tx->prev_gso_size;
+ }
+
+-static int dwceqos_start_xmit(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t dwceqos_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+ {
+ struct net_local *lp = netdev_priv(ndev);
+ struct dwceqos_tx trans;
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c
index 2b7550c..f75bc6c 100644
--- a/drivers/net/ethernet/via/via-rhine.c
@@ -53057,11 +60104,37 @@ 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
+--- 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);
+ }
+
+-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
+--- 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)
+ netif_wake_queue(ndev);
+ }
+
+-static int w5300_start_tx(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t w5300_start_tx(struct sk_buff *skb, struct net_device *ndev)
+ {
+ struct w5300_priv *priv = netdev_priv(ndev);
+
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
-index 58efdec..4184f70 100644
+index 0bf7edd..7fc5d06 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
-@@ -1321,7 +1321,7 @@ nla_put_failure:
+@@ -1443,7 +1443,7 @@ nla_put_failure:
return -EMSGSIZE;
}
@@ -53071,19 +60144,19 @@ index 58efdec..4184f70 100644
.maxtype = IFLA_GENEVE_MAX,
.policy = geneve_policy,
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
-index 5fa98f5..74440cc 100644
+index fcb92c0..a900f7d 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
-@@ -178,7 +178,7 @@ struct rndis_device {
+@@ -162,7 +162,7 @@ struct rndis_device {
+
enum rndis_device_state state;
bool link_state;
- bool link_change;
- atomic_t new_req_id;
+ atomic_unchecked_t new_req_id;
spinlock_t request_lock;
struct list_head req_list;
-@@ -628,6 +628,7 @@ struct nvsp_message {
+@@ -619,6 +619,7 @@ struct nvsp_message {
#define NETVSC_PACKET_SIZE 4096
#define VRSS_SEND_TAB_SIZE 16
@@ -53091,7 +60164,7 @@ index 5fa98f5..74440cc 100644
#define RNDIS_MAX_PKT_DEFAULT 8
#define RNDIS_PKT_ALIGN_DEFAULT 8
-@@ -692,13 +693,13 @@ struct netvsc_device {
+@@ -696,13 +697,13 @@ struct netvsc_device {
struct net_device *ndev;
@@ -53107,7 +60180,7 @@ index 5fa98f5..74440cc 100644
/* Holds rndis device info */
void *extension;
-@@ -710,7 +711,7 @@ struct netvsc_device {
+@@ -714,7 +715,7 @@ struct netvsc_device {
/* The sub channel callback buffer */
unsigned char *sub_cb_buf;
@@ -53117,10 +60190,19 @@ index 5fa98f5..74440cc 100644
u32 pkt_align; /* alignment bytes, e.g. 8 */
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
-index 409b48e..710a23f 100644
+index 98e34fe..19c8206 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
-@@ -875,6 +875,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
+@@ -348,7 +348,7 @@ not_ip:
+ return ret_val;
+ }
+
+-static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
++static netdev_tx_t netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+ {
+ struct net_device_context *net_device_ctx = netdev_priv(net);
+ struct hv_netvsc_packet *packet = NULL;
+@@ -799,6 +799,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
struct netvsc_device *nvdev = hv_get_drvdata(hdev);
struct netvsc_device_info device_info;
int limit = ETH_DATA_LEN;
@@ -53128,7 +60210,7 @@ index 409b48e..710a23f 100644
int ret = 0;
if (nvdev == NULL || nvdev->destroy)
-@@ -890,6 +891,8 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
+@@ -814,6 +815,8 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
if (ret)
goto out;
@@ -53137,7 +60219,7 @@ index 409b48e..710a23f 100644
nvdev->start_remove = true;
rndis_filter_device_remove(hdev);
-@@ -900,7 +903,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
+@@ -824,7 +827,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
memset(&device_info, 0, sizeof(device_info));
device_info.ring_size = ring_size;
@@ -53147,7 +60229,7 @@ index 409b48e..710a23f 100644
rndis_filter_device_add(hdev, &device_info);
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
-index 5931a79..b0645bb 100644
+index a37bbda..625cb2a 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,
@@ -53159,7 +60241,7 @@ index 5931a79..b0645bb 100644
/* Add to the request list */
spin_lock_irqsave(&dev->request_lock, flags);
-@@ -924,7 +924,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
+@@ -922,7 +922,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
/* Setup the rndis set */
halt = &request->request_msg.msg.halt_req;
@@ -53168,7 +60250,7 @@ index 5931a79..b0645bb 100644
/* Ignore return since this msg is optional. */
rndis_filter_send_request(dev, request);
-@@ -1115,9 +1115,9 @@ int rndis_filter_device_add(struct hv_device *dev,
+@@ -1113,9 +1113,9 @@ int rndis_filter_device_add(struct hv_device *dev,
if (ret || rsscap.num_recv_que < 2)
goto out;
@@ -53180,7 +60262,7 @@ index 5931a79..b0645bb 100644
/*
* We will limit the VRSS channels to the number CPUs in the NUMA node
-@@ -1138,8 +1138,7 @@ int rndis_filter_device_add(struct hv_device *dev,
+@@ -1136,8 +1136,7 @@ int rndis_filter_device_add(struct hv_device *dev,
if (net_device->num_chn == 1)
goto out;
@@ -53217,7 +60299,7 @@ index 8c48bb2..0a03401 100644
}
}
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
-index a9268db..19d067f 100644
+index f94392d..2132934 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -751,15 +751,15 @@ static int ipvlan_addr4_event(struct notifier_block *unused,
@@ -53239,6 +60321,19 @@ index a9268db..19d067f 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
@@ -53337,7 +60432,7 @@ index f9db2ce..6cd460c 100644
}
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
-index 06c8bfe..a081f70 100644
+index 94e6888..1d08b6a 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -335,7 +335,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
@@ -53349,7 +60444,7 @@ index 06c8bfe..a081f70 100644
}
static void macvlan_flush_sources(struct macvlan_port *port,
-@@ -1483,13 +1483,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
+@@ -1484,13 +1484,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
int macvlan_link_register(struct rtnl_link_ops *ops)
{
/* common fields */
@@ -53372,7 +60467,7 @@ index 06c8bfe..a081f70 100644
return rtnl_link_register(ops);
};
-@@ -1575,7 +1577,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;
}
@@ -53382,7 +60477,7 @@ index 06c8bfe..a081f70 100644
};
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
-index 159a687..2f1fae5 100644
+index 95394ed..a08b026 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -485,7 +485,7 @@ static void macvtap_setup(struct net_device *dev)
@@ -53437,10 +60532,10 @@ 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 0bfbaba..c81a3588 100644
+index e551f3a..e5fdf87 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
-@@ -249,7 +249,7 @@ static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
+@@ -411,7 +411,7 @@ static int get_phy_c45_devs_in_pkg(struct mii_bus *bus, int addr, int dev_addr,
* zero on success.
*
*/
@@ -53449,7 +60544,7 @@ index 0bfbaba..c81a3588 100644
struct phy_c45_device_ids *c45_ids) {
int phy_reg;
int i, reg_addr;
-@@ -320,7 +320,7 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
+@@ -482,7 +482,7 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
* its return value is in turn returned.
*
*/
@@ -53458,7 +60553,7 @@ index 0bfbaba..c81a3588 100644
bool is_c45, struct phy_c45_device_ids *c45_ids)
{
int phy_reg;
-@@ -358,7 +358,7 @@ static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
+@@ -520,7 +520,7 @@ static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
{
struct phy_c45_device_ids c45_ids = {0};
@@ -53467,11 +60562,24 @@ index 0bfbaba..c81a3588 100644
int r;
r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
+diff --git a/drivers/net/plip/plip.c b/drivers/net/plip/plip.c
+index 9c4b41a..03da80b 100644
+--- a/drivers/net/plip/plip.c
++++ b/drivers/net/plip/plip.c
+@@ -950,7 +950,7 @@ plip_interrupt(void *dev_id)
+ spin_unlock_irqrestore(&nl->lock, flags);
+ }
+
+-static int
++static netdev_tx_t
+ plip_tx_packet(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct net_local *nl = netdev_priv(dev);
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
-index 174e06e..51e015c 100644
+index aafe237..5a65f90 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
-@@ -1048,7 +1048,6 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+@@ -1056,7 +1056,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;
@@ -53479,7 +60587,7 @@ index 174e06e..51e015c 100644
switch (cmd) {
case SIOCGPPPSTATS:
-@@ -1070,8 +1069,7 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+@@ -1078,8 +1077,7 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
break;
case SIOCGPPPVER:
@@ -53490,7 +60598,7 @@ index 174e06e..51e015c 100644
err = 0;
break;
diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c
-index f7e8c79..d5531cd 100644
+index ae0905e..7a7d9b2 100644
--- a/drivers/net/ppp/pptp.c
+++ b/drivers/net/ppp/pptp.c
@@ -369,6 +369,7 @@ allow_packet:
@@ -53501,6 +60609,19 @@ index f7e8c79..d5531cd 100644
ppp_input(&po->chan, skb);
return NET_RX_SUCCESS;
+diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
+index e7034c5..cf4cf05 100644
+--- a/drivers/net/rionet.c
++++ b/drivers/net/rionet.c
+@@ -165,7 +165,7 @@ static int rionet_queue_tx_msg(struct sk_buff *skb, struct net_device *ndev,
+ return 0;
+ }
+
+-static int rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
++static netdev_tx_t rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+ {
+ int i;
+ struct rionet_private *rnet = netdev_priv(ndev);
diff --git a/drivers/net/slip/slhc.c b/drivers/net/slip/slhc.c
index 27ed252..80cffde 100644
--- a/drivers/net/slip/slhc.c
@@ -53515,10 +60636,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 59fefca..b1422b1 100644
+index 718ceea..7571cce 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
-@@ -2107,7 +2107,7 @@ static unsigned int team_get_num_rx_queues(void)
+@@ -2135,7 +2135,7 @@ static unsigned int team_get_num_rx_queues(void)
return TEAM_DEFAULT_NUM_RX_QUEUES;
}
@@ -53527,7 +60648,7 @@ index 59fefca..b1422b1 100644
.kind = DRV_NAME,
.priv_size = sizeof(struct team),
.setup = team_setup,
-@@ -2897,7 +2897,7 @@ static int team_device_event(struct notifier_block *unused,
+@@ -2930,7 +2930,7 @@ static int team_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
@@ -53537,10 +60658,10 @@ index 59fefca..b1422b1 100644
};
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
-index 2d186bd..519779a 100644
+index 81ecc2e..248806a 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
-@@ -1474,7 +1474,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
+@@ -1477,7 +1477,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
return -EINVAL;
}
@@ -53549,7 +60670,7 @@ index 2d186bd..519779a 100644
.kind = DRV_NAME,
.priv_size = sizeof(struct tun_struct),
.setup = tun_setup,
-@@ -1874,7 +1874,7 @@ unlock:
+@@ -1877,7 +1877,7 @@ unlock:
}
static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
@@ -53558,7 +60679,7 @@ index 2d186bd..519779a 100644
{
struct tun_file *tfile = file->private_data;
struct tun_struct *tun;
-@@ -1888,6 +1888,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
+@@ -1891,6 +1891,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
int le;
int ret;
@@ -53569,7 +60690,7 @@ index 2d186bd..519779a 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..1ee643e 100644
+index 111d907..1dbbd3f 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -70,7 +70,7 @@
@@ -53599,7 +60720,18 @@ index 111d907..1ee643e 100644
return;
if (serial->parent->port_spec & HSO_INFO_CRC_BUG)
-@@ -1282,8 +1282,7 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp)
+@@ -1237,8 +1237,9 @@ static void hso_std_serial_read_bulk_callback(struct urb *urb)
+ * This needs to be a tasklet otherwise we will
+ * end up recursively calling this function.
+ */
+-static void hso_unthrottle_tasklet(struct hso_serial *serial)
++static void hso_unthrottle_tasklet(unsigned long _serial)
+ {
++ struct hso_serial *serial = (struct hso_serial *)_serial;
+ unsigned long flags;
+
+ spin_lock_irqsave(&serial->serial_lock, flags);
+@@ -1282,18 +1283,17 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp)
tty_port_tty_set(&serial->port, tty);
/* check for port already opened, if not set the termios */
@@ -53609,7 +60741,10 @@ index 111d907..1ee643e 100644
serial->rx_state = RX_IDLE;
/* Force default termio settings */
_hso_serial_set_termios(tty, NULL);
-@@ -1293,7 +1292,7 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp)
+ tasklet_init(&serial->unthrottle_tasklet,
+- (void (*)(unsigned long))hso_unthrottle_tasklet,
++ hso_unthrottle_tasklet,
+ (unsigned long)serial);
result = hso_start_serial_device(serial->parent, GFP_KERNEL);
if (result) {
hso_stop_serial_device(serial->parent);
@@ -53618,7 +60753,7 @@ index 111d907..1ee643e 100644
} else {
kref_get(&serial->parent->ref);
}
-@@ -1331,10 +1330,10 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp)
+@@ -1331,10 +1331,10 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp)
/* reset the rts and dtr */
/* do the actual close */
@@ -53632,7 +60767,7 @@ index 111d907..1ee643e 100644
tty_port_tty_set(&serial->port, NULL);
if (!usb_gone)
hso_stop_serial_device(serial->parent);
-@@ -1417,7 +1416,7 @@ static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old)
+@@ -1417,7 +1417,7 @@ static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old)
/* the actual setup */
spin_lock_irqsave(&serial->serial_lock, flags);
@@ -53641,7 +60776,7 @@ index 111d907..1ee643e 100644
_hso_serial_set_termios(tty, old);
else
tty->termios = *old;
-@@ -1891,7 +1890,7 @@ static void intr_callback(struct urb *urb)
+@@ -1891,7 +1891,7 @@ static void intr_callback(struct urb *urb)
D1("Pending read interrupt on port %d\n", i);
spin_lock(&serial->serial_lock);
if (serial->rx_state == RX_IDLE &&
@@ -53650,7 +60785,7 @@ index 111d907..1ee643e 100644
/* Setup and send a ctrl req read on
* port i */
if (!serial->rx_urb_filled[0]) {
-@@ -3058,7 +3057,7 @@ static int hso_resume(struct usb_interface *iface)
+@@ -3058,7 +3058,7 @@ static int hso_resume(struct usb_interface *iface)
/* Start all serial ports */
for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) {
if (serial_table[i] && (serial_table[i]->interface == iface)) {
@@ -53659,11 +60794,24 @@ index 111d907..1ee643e 100644
result =
hso_start_serial_device(serial_table[i], GFP_NOIO);
hso_kick_transmit(dev2ser(serial_table[i]));
+diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
+index 76465b1..2d72355 100644
+--- a/drivers/net/usb/ipheth.c
++++ b/drivers/net/usb/ipheth.c
+@@ -400,7 +400,7 @@ static int ipheth_close(struct net_device *net)
+ return 0;
+ }
+
+-static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
++static netdev_tx_t ipheth_tx(struct sk_buff *skb, struct net_device *net)
+ {
+ 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 2fb637a..1e442a2 100644
+index d1f78c2..5596ab1 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
-@@ -615,7 +615,7 @@ struct r8152 {
+@@ -619,7 +619,7 @@ struct r8152 {
int (*eee_get)(struct r8152 *, struct ethtool_eee *);
int (*eee_set)(struct r8152 *, struct ethtool_eee *);
bool (*in_nway)(struct r8152 *);
@@ -53695,7 +60843,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 f94ab78..675a3a4 100644
+index 767ab11..d02d99c 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -48,7 +48,7 @@ module_param(gso, bool, 0444);
@@ -53708,10 +60856,10 @@ index f94ab78..675a3a4 100644
#define VIRTNET_DRIVER_VERSION "1.0.0"
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
-index 903bda4..ee77e53 100644
+index bdcf617..c7fedcd 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
-@@ -942,7 +942,7 @@ static const struct nla_policy vrf_nl_policy[IFLA_VRF_MAX + 1] = {
+@@ -884,7 +884,7 @@ static const struct nla_policy vrf_nl_policy[IFLA_VRF_MAX + 1] = {
[IFLA_VRF_TABLE] = { .type = NLA_U32 },
};
@@ -53720,7 +60868,7 @@ index 903bda4..ee77e53 100644
.kind = DRV_NAME,
.priv_size = sizeof(struct net_vrf),
-@@ -976,7 +976,7 @@ out:
+@@ -918,7 +918,7 @@ out:
return NOTIFY_DONE;
}
@@ -53730,10 +60878,10 @@ index 903bda4..ee77e53 100644
};
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
-index 3c0df70..a884dac 100644
+index 1c32bd1..a6a9694 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
-@@ -3146,7 +3146,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev)
+@@ -3169,7 +3169,7 @@ static struct net *vxlan_get_link_net(const struct net_device *dev)
return vxlan->net;
}
@@ -53742,7 +60890,7 @@ index 3c0df70..a884dac 100644
.kind = "vxlan",
.maxtype = IFLA_VXLAN_MAX,
.policy = vxlan_policy,
-@@ -3194,7 +3194,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused,
+@@ -3217,7 +3217,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused,
return NOTIFY_DONE;
}
@@ -53751,19 +60899,6 @@ index 3c0df70..a884dac 100644
.notifier_call = vxlan_lowerdev_event,
};
-diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c
-index 7a72407..6292259 100644
---- a/drivers/net/wan/dscc4.c
-+++ b/drivers/net/wan/dscc4.c
-@@ -1626,7 +1626,7 @@ try:
- if (state & Xpr) {
- void __iomem *scc_addr;
- unsigned long ring;
-- int i;
-+ unsigned int i;
-
- /*
- * - the busy condition happens (sometimes);
diff --git a/drivers/net/wan/lmc/lmc_media.c b/drivers/net/wan/lmc/lmc_media.c
index 5920c99..ff2e4a5 100644
--- a/drivers/net/wan/lmc/lmc_media.c
@@ -53945,32 +61080,6 @@ index 0b60295..b8bfa5b 100644
GFP_KERNEL);
if (rd == NULL) {
result = -ENOMEM;
-diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
-index 17c40f0..9646fee 100644
---- a/drivers/net/wireless/airo.c
-+++ b/drivers/net/wireless/airo.c
-@@ -7857,7 +7857,7 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
- struct airo_info *ai = dev->ml_priv;
- int ridcode;
- int enabled;
-- static int (* writer)(struct airo_info *, u16 rid, const void *, int, int);
-+ int (* writer)(struct airo_info *, u16 rid, const void *, int, int);
- unsigned char *iobuf;
-
- /* Only super-user can write RIDs */
-diff --git a/drivers/net/wireless/at76c50x-usb.c b/drivers/net/wireless/at76c50x-usb.c
-index dab2513..4c4b65d 100644
---- a/drivers/net/wireless/at76c50x-usb.c
-+++ b/drivers/net/wireless/at76c50x-usb.c
-@@ -353,7 +353,7 @@ static int at76_dfu_get_state(struct usb_device *udev, u8 *state)
- }
-
- /* Convert timeout from the DFU status to jiffies */
--static inline unsigned long at76_get_timeout(struct dfu_status *s)
-+static inline unsigned long __intentional_overflow(-1) at76_get_timeout(struct dfu_status *s)
- {
- return msecs_to_jiffies((s->poll_timeout[2] << 16)
- | (s->poll_timeout[1] << 8)
diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
index edf3629..9f20ef9 100644
--- a/drivers/net/wireless/ath/ath10k/ce.c
@@ -54019,8 +61128,34 @@ 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
+--- 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);
+
+ struct ath6kl_cookie *ath6kl_alloc_cookie(struct ath6kl *ar);
+ void ath6kl_free_cookie(struct ath6kl *ar, struct ath6kl_cookie *cookie);
+-int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev);
++netdev_tx_t ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev);
+
+ struct aggr_info *aggr_init(struct ath6kl_vif *vif);
+ void aggr_conn_init(struct ath6kl_vif *vif, struct aggr_info *aggr_info,
+diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c
+index 40432fe..57d85b3 100644
+--- a/drivers/net/wireless/ath/ath6kl/txrx.c
++++ b/drivers/net/wireless/ath/ath6kl/txrx.c
+@@ -353,7 +353,7 @@ fail_ctrl_tx:
+ return status;
+ }
+
+-int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)
++netdev_tx_t ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)
+ {
+ 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 fee0cad..a7a3b63 100644
+index 40fa915..9e5e0c4 100644
--- a/drivers/net/wireless/ath/ath9k/Kconfig
+++ b/drivers/net/wireless/ath/ath9k/Kconfig
@@ -3,7 +3,6 @@ config ATH9K_HW
@@ -54277,10 +61412,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 d184e68..1ba76e5 100644
+index c1b33fd..9f904b1 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2585,16 +2585,18 @@ void ath9k_fill_chanctx_ops(void)
+@@ -2589,16 +2589,18 @@ void ath9k_fill_chanctx_ops(void)
if (!ath9k_is_chanctx_enabled())
return;
@@ -54442,23 +61577,463 @@ index ae86a600..28696b2 100644
ar->tx_ampdu_schedule = false;
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
+--- 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)
+ struct wil6210_priv *wil;
+ struct device *dev = &pdev->dev;
+ int rc;
+- const struct wil_platform_rops rops = {
++ static const struct wil_platform_rops rops = {
+ .ramdump = wil_platform_rop_ramdump,
+ .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 d7fa19b..6d84263 100644
+index 9a949d9..1307d61 100644
--- a/drivers/net/wireless/ath/wil6210/wil_platform.h
+++ b/drivers/net/wireless/ath/wil6210/wil_platform.h
-@@ -27,7 +27,7 @@ struct wil_platform_ops {
- int (*suspend)(void *handle);
+@@ -29,7 +29,7 @@ struct wil_platform_ops {
int (*resume)(void *handle);
void (*uninit)(void *handle);
+ int (*notify_crash)(void *handle);
-};
+} __no_const;
- void *wil_platform_init(struct device *dev, struct wil_platform_ops *ops);
+ /**
+ * struct wil_platform_rops - wil platform module callbacks from
+diff --git a/drivers/net/wireless/atmel/at76c50x-usb.c b/drivers/net/wireless/atmel/at76c50x-usb.c
+index dab2513..4c4b65d 100644
+--- 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)
+ }
+
+ /* Convert timeout from the DFU status to jiffies */
+-static inline unsigned long at76_get_timeout(struct dfu_status *s)
++static inline unsigned long __intentional_overflow(-1) at76_get_timeout(struct dfu_status *s)
+ {
+ 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
+--- a/drivers/net/wireless/atmel/atmel.c
++++ b/drivers/net/wireless/atmel/atmel.c
+@@ -1663,9 +1663,10 @@ EXPORT_SYMBOL(stop_atmel_card);
+
+ static int atmel_set_essid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->essid;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ /* Check if we asked for `any' */
+@@ -1691,9 +1692,10 @@ static int atmel_set_essid(struct net_device *dev,
+
+ static int atmel_get_essid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->essid;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ /* Get the current SSID */
+@@ -1712,9 +1714,10 @@ static int atmel_get_essid(struct net_device *dev,
+
+ static int atmel_get_wap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *awrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct sockaddr *awrq = &wrqu->ap_addr;
+ struct atmel_private *priv = netdev_priv(dev);
+ memcpy(awrq->sa_data, priv->CurrentBSSID, ETH_ALEN);
+ awrq->sa_family = ARPHRD_ETHER;
+@@ -1724,9 +1727,10 @@ static int atmel_get_wap(struct net_device *dev,
+
+ static int atmel_set_encode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->encoding;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ /* Basic checking: do we have a key to set ?
+@@ -1813,9 +1817,10 @@ static int atmel_set_encode(struct net_device *dev,
+
+ static int atmel_get_encode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->encoding;
+ struct atmel_private *priv = netdev_priv(dev);
+ int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
+
+@@ -2023,18 +2028,20 @@ static int atmel_get_auth(struct net_device *dev,
+
+ static int atmel_get_name(struct net_device *dev,
+ struct iw_request_info *info,
+- char *cwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ char *cwrq = wrqu->name;
+ strcpy(cwrq, "IEEE 802.11-DS");
+ return 0;
+ }
+
+ static int atmel_set_rate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->bitrate;
+ struct atmel_private *priv = netdev_priv(dev);
-diff --git a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c
+ if (vwrq->fixed == 0) {
+@@ -2073,9 +2080,10 @@ static int atmel_set_rate(struct net_device *dev,
+
+ static int atmel_set_mode(struct net_device *dev,
+ struct iw_request_info *info,
+- __u32 *uwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ __u32 *uwrq = &wrqu->mode;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ if (*uwrq != IW_MODE_ADHOC && *uwrq != IW_MODE_INFRA)
+@@ -2087,9 +2095,10 @@ static int atmel_set_mode(struct net_device *dev,
+
+ static int atmel_get_mode(struct net_device *dev,
+ struct iw_request_info *info,
+- __u32 *uwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ __u32 *uwrq = &wrqu->mode;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ *uwrq = priv->operating_mode;
+@@ -2098,9 +2107,10 @@ static int atmel_get_mode(struct net_device *dev,
+
+ static int atmel_get_rate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->bitrate;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ if (priv->auto_tx_rate) {
+@@ -2128,9 +2138,10 @@ static int atmel_get_rate(struct net_device *dev,
+
+ static int atmel_set_power(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->power;
+ struct atmel_private *priv = netdev_priv(dev);
+ priv->power_mode = vwrq->disabled ? 0 : 1;
+ return -EINPROGRESS;
+@@ -2138,9 +2149,10 @@ static int atmel_set_power(struct net_device *dev,
+
+ static int atmel_get_power(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->power;
+ struct atmel_private *priv = netdev_priv(dev);
+ vwrq->disabled = priv->power_mode ? 0 : 1;
+ vwrq->flags = IW_POWER_ON;
+@@ -2149,9 +2161,10 @@ static int atmel_get_power(struct net_device *dev,
+
+ static int atmel_set_retry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->retry;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ if (!vwrq->disabled && (vwrq->flags & IW_RETRY_LIMIT)) {
+@@ -2172,9 +2185,10 @@ static int atmel_set_retry(struct net_device *dev,
+
+ static int atmel_get_retry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->retry;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ vwrq->disabled = 0; /* Can't be disabled */
+@@ -2195,9 +2209,10 @@ static int atmel_get_retry(struct net_device *dev,
+
+ static int atmel_set_rts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->rts;
+ struct atmel_private *priv = netdev_priv(dev);
+ int rthr = vwrq->value;
+
+@@ -2213,9 +2228,10 @@ static int atmel_set_rts(struct net_device *dev,
+
+ static int atmel_get_rts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->rts;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ vwrq->value = priv->rts_threshold;
+@@ -2227,9 +2243,10 @@ static int atmel_get_rts(struct net_device *dev,
+
+ static int atmel_set_frag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->frag;
+ struct atmel_private *priv = netdev_priv(dev);
+ int fthr = vwrq->value;
+
+@@ -2246,9 +2263,10 @@ static int atmel_set_frag(struct net_device *dev,
+
+ static int atmel_get_frag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->frag;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ vwrq->value = priv->frag_threshold;
+@@ -2260,9 +2278,10 @@ static int atmel_get_frag(struct net_device *dev,
+
+ static int atmel_set_freq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *fwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_freq *fwrq = &wrqu->freq;
+ struct atmel_private *priv = netdev_priv(dev);
+ int rc = -EINPROGRESS; /* Call commit handler */
+
+@@ -2290,9 +2309,10 @@ static int atmel_set_freq(struct net_device *dev,
+
+ static int atmel_get_freq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *fwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_freq *fwrq = &wrqu->freq;
+ struct atmel_private *priv = netdev_priv(dev);
+
+ fwrq->m = priv->channel;
+@@ -2302,7 +2322,7 @@ static int atmel_get_freq(struct net_device *dev,
+
+ static int atmel_set_scan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *dwrq,
+ char *extra)
+ {
+ struct atmel_private *priv = netdev_priv(dev);
+@@ -2340,9 +2360,10 @@ static int atmel_set_scan(struct net_device *dev,
+
+ static int atmel_get_scan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct atmel_private *priv = netdev_priv(dev);
+ int i;
+ char *current_ev = extra;
+@@ -2411,9 +2432,10 @@ static int atmel_get_scan(struct net_device *dev,
+
+ static int atmel_get_range(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct atmel_private *priv = netdev_priv(dev);
+ struct iw_range *range = (struct iw_range *) extra;
+ int k, i, j;
+@@ -2485,9 +2507,10 @@ static int atmel_get_range(struct net_device *dev,
+
+ static int atmel_set_wap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *awrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct sockaddr *awrq = &wrqu->ap_addr;
+ struct atmel_private *priv = netdev_priv(dev);
+ int i;
+ static const u8 any[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+@@ -2527,7 +2550,7 @@ static int atmel_set_wap(struct net_device *dev,
+
+ static int atmel_config_commit(struct net_device *dev,
+ struct iw_request_info *info, /* NULL */
+- void *zwrq, /* NULL */
++ union iwreq_data *zwrq, /* NULL */
+ char *extra) /* NULL */
+ {
+ return atmel_open(dev);
+@@ -2535,61 +2558,61 @@ static int atmel_config_commit(struct net_device *dev,
+
+ static const iw_handler atmel_handler[] =
+ {
+- (iw_handler) atmel_config_commit, /* SIOCSIWCOMMIT */
+- (iw_handler) atmel_get_name, /* SIOCGIWNAME */
+- (iw_handler) NULL, /* SIOCSIWNWID */
+- (iw_handler) NULL, /* SIOCGIWNWID */
+- (iw_handler) atmel_set_freq, /* SIOCSIWFREQ */
+- (iw_handler) atmel_get_freq, /* SIOCGIWFREQ */
+- (iw_handler) atmel_set_mode, /* SIOCSIWMODE */
+- (iw_handler) atmel_get_mode, /* SIOCGIWMODE */
+- (iw_handler) NULL, /* SIOCSIWSENS */
+- (iw_handler) NULL, /* SIOCGIWSENS */
+- (iw_handler) NULL, /* SIOCSIWRANGE */
+- (iw_handler) atmel_get_range, /* SIOCGIWRANGE */
+- (iw_handler) NULL, /* SIOCSIWPRIV */
+- (iw_handler) NULL, /* SIOCGIWPRIV */
+- (iw_handler) NULL, /* SIOCSIWSTATS */
+- (iw_handler) NULL, /* SIOCGIWSTATS */
+- (iw_handler) NULL, /* SIOCSIWSPY */
+- (iw_handler) NULL, /* SIOCGIWSPY */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) atmel_set_wap, /* SIOCSIWAP */
+- (iw_handler) atmel_get_wap, /* SIOCGIWAP */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* SIOCGIWAPLIST */
+- (iw_handler) atmel_set_scan, /* SIOCSIWSCAN */
+- (iw_handler) atmel_get_scan, /* SIOCGIWSCAN */
+- (iw_handler) atmel_set_essid, /* SIOCSIWESSID */
+- (iw_handler) atmel_get_essid, /* SIOCGIWESSID */
+- (iw_handler) NULL, /* SIOCSIWNICKN */
+- (iw_handler) NULL, /* SIOCGIWNICKN */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) atmel_set_rate, /* SIOCSIWRATE */
+- (iw_handler) atmel_get_rate, /* SIOCGIWRATE */
+- (iw_handler) atmel_set_rts, /* SIOCSIWRTS */
+- (iw_handler) atmel_get_rts, /* SIOCGIWRTS */
+- (iw_handler) atmel_set_frag, /* SIOCSIWFRAG */
+- (iw_handler) atmel_get_frag, /* SIOCGIWFRAG */
+- (iw_handler) NULL, /* SIOCSIWTXPOW */
+- (iw_handler) NULL, /* SIOCGIWTXPOW */
+- (iw_handler) atmel_set_retry, /* SIOCSIWRETRY */
+- (iw_handler) atmel_get_retry, /* SIOCGIWRETRY */
+- (iw_handler) atmel_set_encode, /* SIOCSIWENCODE */
+- (iw_handler) atmel_get_encode, /* SIOCGIWENCODE */
+- (iw_handler) atmel_set_power, /* SIOCSIWPOWER */
+- (iw_handler) atmel_get_power, /* SIOCGIWPOWER */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* SIOCSIWGENIE */
+- (iw_handler) NULL, /* SIOCGIWGENIE */
+- (iw_handler) atmel_set_auth, /* SIOCSIWAUTH */
+- (iw_handler) atmel_get_auth, /* SIOCGIWAUTH */
+- (iw_handler) atmel_set_encodeext, /* SIOCSIWENCODEEXT */
+- (iw_handler) atmel_get_encodeext, /* SIOCGIWENCODEEXT */
+- (iw_handler) NULL, /* SIOCSIWPMKSA */
++ atmel_config_commit, /* SIOCSIWCOMMIT */
++ atmel_get_name, /* SIOCGIWNAME */
++ NULL, /* SIOCSIWNWID */
++ NULL, /* SIOCGIWNWID */
++ atmel_set_freq, /* SIOCSIWFREQ */
++ atmel_get_freq, /* SIOCGIWFREQ */
++ atmel_set_mode, /* SIOCSIWMODE */
++ atmel_get_mode, /* SIOCGIWMODE */
++ NULL, /* SIOCSIWSENS */
++ NULL, /* SIOCGIWSENS */
++ NULL, /* SIOCSIWRANGE */
++ atmel_get_range, /* SIOCGIWRANGE */
++ NULL, /* SIOCSIWPRIV */
++ NULL, /* SIOCGIWPRIV */
++ NULL, /* SIOCSIWSTATS */
++ NULL, /* SIOCGIWSTATS */
++ NULL, /* SIOCSIWSPY */
++ NULL, /* SIOCGIWSPY */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ atmel_set_wap, /* SIOCSIWAP */
++ atmel_get_wap, /* SIOCGIWAP */
++ NULL, /* -- hole -- */
++ NULL, /* SIOCGIWAPLIST */
++ atmel_set_scan, /* SIOCSIWSCAN */
++ atmel_get_scan, /* SIOCGIWSCAN */
++ atmel_set_essid, /* SIOCSIWESSID */
++ atmel_get_essid, /* SIOCGIWESSID */
++ NULL, /* SIOCSIWNICKN */
++ NULL, /* SIOCGIWNICKN */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ atmel_set_rate, /* SIOCSIWRATE */
++ atmel_get_rate, /* SIOCGIWRATE */
++ atmel_set_rts, /* SIOCSIWRTS */
++ atmel_get_rts, /* SIOCGIWRTS */
++ atmel_set_frag, /* SIOCSIWFRAG */
++ atmel_get_frag, /* SIOCGIWFRAG */
++ NULL, /* SIOCSIWTXPOW */
++ NULL, /* SIOCGIWTXPOW */
++ atmel_set_retry, /* SIOCSIWRETRY */
++ atmel_get_retry, /* SIOCGIWRETRY */
++ atmel_set_encode, /* SIOCSIWENCODE */
++ atmel_get_encode, /* SIOCGIWENCODE */
++ atmel_set_power, /* SIOCSIWPOWER */
++ atmel_get_power, /* SIOCGIWPOWER */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ NULL, /* SIOCSIWGENIE */
++ NULL, /* SIOCGIWGENIE */
++ atmel_set_auth, /* SIOCSIWAUTH */
++ atmel_get_auth, /* SIOCGIWAUTH */
++ atmel_set_encodeext, /* SIOCSIWENCODEEXT */
++ atmel_get_encodeext, /* SIOCGIWENCODEEXT */
++ NULL, /* SIOCSIWPMKSA */
+ };
+
+ 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
---- a/drivers/net/wireless/b43/phy_lp.c
-+++ b/drivers/net/wireless/b43/phy_lp.c
+--- 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,
{
struct ssb_bus *bus = dev->dev->sdev->bus;
@@ -54468,11 +62043,684 @@ index 058a9f2..d5cb1ba 100644
u32 crystal_freq = bus->chipco.pmu.crystalfreq * 1000;
u32 freqref, vco_freq, val1, val2, val3, timeout, timeoutref, count;
u16 old_comm15, scale;
-diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c b/drivers/net/wireless/iwlegacy/3945-mac.c
-index af1b3e6..d5d82713 100644
---- a/drivers/net/wireless/iwlegacy/3945-mac.c
-+++ b/drivers/net/wireless/iwlegacy/3945-mac.c
-@@ -3633,7 +3633,9 @@ il3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+diff --git a/drivers/net/wireless/broadcom/b43legacy/main.c b/drivers/net/wireless/broadcom/b43legacy/main.c
+index afc1fb3..79698d1 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)
+ }
+
+ /* Interrupt handler bottom-half */
+-static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev)
++static void b43legacy_interrupt_tasklet(unsigned long _dev)
+ {
++ struct b43legacy_wldev *dev = (struct b43legacy_wldev *)_dev;
+ u32 reason;
+ u32 dma_reason[ARRAY_SIZE(dev->dma_reason)];
+ u32 merged_dma_reason = 0;
+@@ -3775,7 +3776,7 @@ static int b43legacy_one_core_attach(struct ssb_device *dev,
+ b43legacy_set_status(wldev, B43legacy_STAT_UNINIT);
+ wldev->bad_frames_preempt = modparam_bad_frames_preempt;
+ tasklet_init(&wldev->isr_tasklet,
+- (void (*)(unsigned long))b43legacy_interrupt_tasklet,
++ b43legacy_interrupt_tasklet,
+ (unsigned long)wldev);
+ if (modparam_pio)
+ wldev->__using_pio = true;
+diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
+index 1c4e9dd..a6388e7 100644
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
+@@ -394,8 +394,9 @@ struct shared_phy *wlc_phy_shared_attach(struct shared_phy_params *shp)
+ return sh;
+ }
+
+-static void wlc_phy_timercb_phycal(struct brcms_phy *pi)
++static void wlc_phy_timercb_phycal(void *_pi)
+ {
++ struct brcms_phy *pi = _pi;
+ uint delay = 5;
+
+ if (PHY_PERICAL_MPHASE_PENDING(pi)) {
+diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
+index a0de5db..b723817 100644
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
+@@ -57,12 +57,11 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim)
+ }
+
+ struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim,
+- void (*fn)(struct brcms_phy *pi),
++ void (*fn)(void *pi),
+ void *arg, const char *name)
+ {
+ return (struct wlapi_timer *)
+- brcms_init_timer(physhim->wl, (void (*)(void *))fn,
+- arg, name);
++ brcms_init_timer(physhim->wl, fn, arg, name);
+ }
+
+ void wlapi_free_timer(struct wlapi_timer *t)
+diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h
+index dd87747..27d0934 100644
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h
+@@ -131,7 +131,7 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim);
+
+ /* PHY to WL utility functions */
+ struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim,
+- void (*fn)(struct brcms_phy *pi),
++ void (*fn)(void *pi),
+ void *arg, const char *name);
+ 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
+--- 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 ) {
+ }
+
+ static int airo_config_commit(struct net_device *dev,
+- struct iw_request_info *info, void *zwrq,
++ struct iw_request_info *info, union iwreq_data *zwrq,
+ char *extra);
+
+ static inline int sniffing_mode(struct airo_info *ai)
+@@ -5766,9 +5766,11 @@ static int airo_get_quality (StatusRid *status_rid, CapabilityRid *cap_rid)
+ */
+ static int airo_get_name(struct net_device *dev,
+ struct iw_request_info *info,
+- char *cwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ char *cwrq = wrqu->name;
++
+ strcpy(cwrq, "IEEE 802.11-DS");
+ return 0;
+ }
+@@ -5779,9 +5781,10 @@ static int airo_get_name(struct net_device *dev,
+ */
+ static int airo_set_freq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *fwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_freq *fwrq = &wrqu->freq;
+ struct airo_info *local = dev->ml_priv;
+ int rc = -EINPROGRESS; /* Call commit handler */
+
+@@ -5820,9 +5823,10 @@ static int airo_set_freq(struct net_device *dev,
+ */
+ static int airo_get_freq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *fwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_freq *fwrq = &wrqu->freq;
+ struct airo_info *local = dev->ml_priv;
+ StatusRid status_rid; /* Card status info */
+ int ch;
+@@ -5852,9 +5856,10 @@ static int airo_get_freq(struct net_device *dev,
+ */
+ static int airo_set_essid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->essid;
+ struct airo_info *local = dev->ml_priv;
+ SsidRid SSID_rid; /* SSIDs */
+
+@@ -5897,9 +5902,10 @@ static int airo_set_essid(struct net_device *dev,
+ */
+ static int airo_get_essid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->essid;
+ struct airo_info *local = dev->ml_priv;
+ StatusRid status_rid; /* Card status info */
+
+@@ -5925,9 +5931,10 @@ static int airo_get_essid(struct net_device *dev,
+ */
+ static int airo_set_wap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *awrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct sockaddr *awrq = &wrqu->ap_addr;
+ struct airo_info *local = dev->ml_priv;
+ Cmd cmd;
+ Resp rsp;
+@@ -5960,9 +5967,10 @@ static int airo_set_wap(struct net_device *dev,
+ */
+ static int airo_get_wap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *awrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct sockaddr *awrq = &wrqu->ap_addr;
+ struct airo_info *local = dev->ml_priv;
+ StatusRid status_rid; /* Card status info */
+
+@@ -5981,9 +5989,10 @@ static int airo_get_wap(struct net_device *dev,
+ */
+ static int airo_set_nick(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct airo_info *local = dev->ml_priv;
+
+ /* Check the size of the string */
+@@ -6004,9 +6013,10 @@ static int airo_set_nick(struct net_device *dev,
+ */
+ static int airo_get_nick(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -6023,9 +6033,10 @@ static int airo_get_nick(struct net_device *dev,
+ */
+ static int airo_set_rate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->bitrate;
+ struct airo_info *local = dev->ml_priv;
+ CapabilityRid cap_rid; /* Card capability info */
+ u8 brate = 0;
+@@ -6093,9 +6104,10 @@ static int airo_set_rate(struct net_device *dev,
+ */
+ static int airo_get_rate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->bitrate;
+ struct airo_info *local = dev->ml_priv;
+ StatusRid status_rid; /* Card status info */
+
+@@ -6115,9 +6127,10 @@ static int airo_get_rate(struct net_device *dev,
+ */
+ static int airo_set_rts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->rts;
+ struct airo_info *local = dev->ml_priv;
+ int rthr = vwrq->value;
+
+@@ -6139,9 +6152,10 @@ static int airo_set_rts(struct net_device *dev,
+ */
+ static int airo_get_rts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->rts;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -6158,9 +6172,10 @@ static int airo_get_rts(struct net_device *dev,
+ */
+ static int airo_set_frag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->frag;
+ struct airo_info *local = dev->ml_priv;
+ int fthr = vwrq->value;
+
+@@ -6183,9 +6198,10 @@ static int airo_set_frag(struct net_device *dev,
+ */
+ static int airo_get_frag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->frag;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -6202,9 +6218,10 @@ static int airo_get_frag(struct net_device *dev,
+ */
+ static int airo_set_mode(struct net_device *dev,
+ struct iw_request_info *info,
+- __u32 *uwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ __u32 *uwrq = &wrqu->mode;
+ struct airo_info *local = dev->ml_priv;
+ int reset = 0;
+
+@@ -6265,9 +6282,10 @@ static int airo_set_mode(struct net_device *dev,
+ */
+ static int airo_get_mode(struct net_device *dev,
+ struct iw_request_info *info,
+- __u32 *uwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ __u32 *uwrq = &wrqu->mode;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -6300,9 +6318,10 @@ static inline int valid_index(struct airo_info *ai, int index)
+ */
+ static int airo_set_encode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->encoding;
+ struct airo_info *local = dev->ml_priv;
+ int perm = (dwrq->flags & IW_ENCODE_TEMP ? 0 : 1);
+ __le16 currentAuthType = local->config.authType;
+@@ -6399,9 +6418,10 @@ static int airo_set_encode(struct net_device *dev,
+ */
+ static int airo_get_encode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->encoding;
+ struct airo_info *local = dev->ml_priv;
+ int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
+ int wep_key_len;
+@@ -6746,9 +6766,10 @@ static int airo_get_auth(struct net_device *dev,
+ */
+ static int airo_set_txpow(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->txpower;
+ struct airo_info *local = dev->ml_priv;
+ CapabilityRid cap_rid; /* Card capability info */
+ int i;
+@@ -6783,9 +6804,10 @@ static int airo_set_txpow(struct net_device *dev,
+ */
+ static int airo_get_txpow(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->txpower;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -6803,9 +6825,10 @@ static int airo_get_txpow(struct net_device *dev,
+ */
+ static int airo_set_retry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->retry;
+ struct airo_info *local = dev->ml_priv;
+ int rc = -EINVAL;
+
+@@ -6841,9 +6864,10 @@ static int airo_set_retry(struct net_device *dev,
+ */
+ static int airo_get_retry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->retry;
+ struct airo_info *local = dev->ml_priv;
+
+ vwrq->disabled = 0; /* Can't be disabled */
+@@ -6872,9 +6896,10 @@ static int airo_get_retry(struct net_device *dev,
+ */
+ static int airo_get_range(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct airo_info *local = dev->ml_priv;
+ struct iw_range *range = (struct iw_range *) extra;
+ CapabilityRid cap_rid; /* Card capability info */
+@@ -6998,9 +7023,10 @@ static int airo_get_range(struct net_device *dev,
+ */
+ static int airo_set_power(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->power;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -7055,9 +7081,10 @@ static int airo_set_power(struct net_device *dev,
+ */
+ static int airo_get_power(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->power;
+ struct airo_info *local = dev->ml_priv;
+ __le16 mode;
+
+@@ -7086,9 +7113,10 @@ static int airo_get_power(struct net_device *dev,
+ */
+ static int airo_set_sens(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->sens;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -7105,9 +7133,10 @@ static int airo_set_sens(struct net_device *dev,
+ */
+ static int airo_get_sens(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->sens;
+ struct airo_info *local = dev->ml_priv;
+
+ readConfigRid(local, 1);
+@@ -7125,9 +7154,10 @@ static int airo_get_sens(struct net_device *dev,
+ */
+ static int airo_get_aplist(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct airo_info *local = dev->ml_priv;
+ struct sockaddr *address = (struct sockaddr *) extra;
+ struct iw_quality *qual;
+@@ -7203,7 +7233,7 @@ static int airo_get_aplist(struct net_device *dev,
+ */
+ static int airo_set_scan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *dwrq,
+ char *extra)
+ {
+ struct airo_info *ai = dev->ml_priv;
+@@ -7434,9 +7464,10 @@ static inline char *airo_translate_scan(struct net_device *dev,
+ */
+ static int airo_get_scan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *dwrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct airo_info *ai = dev->ml_priv;
+ BSSListElement *net;
+ int err = 0;
+@@ -7478,7 +7509,7 @@ out:
+ */
+ static int airo_config_commit(struct net_device *dev,
+ struct iw_request_info *info, /* NULL */
+- void *zwrq, /* NULL */
++ union iwreq_data *zwrq, /* NULL */
+ char *extra) /* NULL */
+ {
+ struct airo_info *local = dev->ml_priv;
+@@ -7528,61 +7559,61 @@ static const struct iw_priv_args airo_private_args[] = {
+
+ static const iw_handler airo_handler[] =
+ {
+- (iw_handler) airo_config_commit, /* SIOCSIWCOMMIT */
+- (iw_handler) airo_get_name, /* SIOCGIWNAME */
+- (iw_handler) NULL, /* SIOCSIWNWID */
+- (iw_handler) NULL, /* SIOCGIWNWID */
+- (iw_handler) airo_set_freq, /* SIOCSIWFREQ */
+- (iw_handler) airo_get_freq, /* SIOCGIWFREQ */
+- (iw_handler) airo_set_mode, /* SIOCSIWMODE */
+- (iw_handler) airo_get_mode, /* SIOCGIWMODE */
+- (iw_handler) airo_set_sens, /* SIOCSIWSENS */
+- (iw_handler) airo_get_sens, /* SIOCGIWSENS */
+- (iw_handler) NULL, /* SIOCSIWRANGE */
+- (iw_handler) airo_get_range, /* SIOCGIWRANGE */
+- (iw_handler) NULL, /* SIOCSIWPRIV */
+- (iw_handler) NULL, /* SIOCGIWPRIV */
+- (iw_handler) NULL, /* SIOCSIWSTATS */
+- (iw_handler) NULL, /* SIOCGIWSTATS */
++ airo_config_commit, /* SIOCSIWCOMMIT */
++ airo_get_name, /* SIOCGIWNAME */
++ NULL, /* SIOCSIWNWID */
++ NULL, /* SIOCGIWNWID */
++ airo_set_freq, /* SIOCSIWFREQ */
++ airo_get_freq, /* SIOCGIWFREQ */
++ airo_set_mode, /* SIOCSIWMODE */
++ airo_get_mode, /* SIOCGIWMODE */
++ airo_set_sens, /* SIOCSIWSENS */
++ airo_get_sens, /* SIOCGIWSENS */
++ NULL, /* SIOCSIWRANGE */
++ airo_get_range, /* SIOCGIWRANGE */
++ NULL, /* SIOCSIWPRIV */
++ NULL, /* SIOCGIWPRIV */
++ NULL, /* SIOCSIWSTATS */
++ NULL, /* SIOCGIWSTATS */
+ iw_handler_set_spy, /* SIOCSIWSPY */
+ iw_handler_get_spy, /* SIOCGIWSPY */
+ iw_handler_set_thrspy, /* SIOCSIWTHRSPY */
+ iw_handler_get_thrspy, /* SIOCGIWTHRSPY */
+- (iw_handler) airo_set_wap, /* SIOCSIWAP */
+- (iw_handler) airo_get_wap, /* SIOCGIWAP */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) airo_get_aplist, /* SIOCGIWAPLIST */
+- (iw_handler) airo_set_scan, /* SIOCSIWSCAN */
+- (iw_handler) airo_get_scan, /* SIOCGIWSCAN */
+- (iw_handler) airo_set_essid, /* SIOCSIWESSID */
+- (iw_handler) airo_get_essid, /* SIOCGIWESSID */
+- (iw_handler) airo_set_nick, /* SIOCSIWNICKN */
+- (iw_handler) airo_get_nick, /* SIOCGIWNICKN */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) airo_set_rate, /* SIOCSIWRATE */
+- (iw_handler) airo_get_rate, /* SIOCGIWRATE */
+- (iw_handler) airo_set_rts, /* SIOCSIWRTS */
+- (iw_handler) airo_get_rts, /* SIOCGIWRTS */
+- (iw_handler) airo_set_frag, /* SIOCSIWFRAG */
+- (iw_handler) airo_get_frag, /* SIOCGIWFRAG */
+- (iw_handler) airo_set_txpow, /* SIOCSIWTXPOW */
+- (iw_handler) airo_get_txpow, /* SIOCGIWTXPOW */
+- (iw_handler) airo_set_retry, /* SIOCSIWRETRY */
+- (iw_handler) airo_get_retry, /* SIOCGIWRETRY */
+- (iw_handler) airo_set_encode, /* SIOCSIWENCODE */
+- (iw_handler) airo_get_encode, /* SIOCGIWENCODE */
+- (iw_handler) airo_set_power, /* SIOCSIWPOWER */
+- (iw_handler) airo_get_power, /* SIOCGIWPOWER */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* SIOCSIWGENIE */
+- (iw_handler) NULL, /* SIOCGIWGENIE */
+- (iw_handler) airo_set_auth, /* SIOCSIWAUTH */
+- (iw_handler) airo_get_auth, /* SIOCGIWAUTH */
+- (iw_handler) airo_set_encodeext, /* SIOCSIWENCODEEXT */
+- (iw_handler) airo_get_encodeext, /* SIOCGIWENCODEEXT */
+- (iw_handler) NULL, /* SIOCSIWPMKSA */
++ airo_set_wap, /* SIOCSIWAP */
++ airo_get_wap, /* SIOCGIWAP */
++ NULL, /* -- hole -- */
++ airo_get_aplist, /* SIOCGIWAPLIST */
++ airo_set_scan, /* SIOCSIWSCAN */
++ airo_get_scan, /* SIOCGIWSCAN */
++ airo_set_essid, /* SIOCSIWESSID */
++ airo_get_essid, /* SIOCGIWESSID */
++ airo_set_nick, /* SIOCSIWNICKN */
++ airo_get_nick, /* SIOCGIWNICKN */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ airo_set_rate, /* SIOCSIWRATE */
++ airo_get_rate, /* SIOCGIWRATE */
++ airo_set_rts, /* SIOCSIWRTS */
++ airo_get_rts, /* SIOCGIWRTS */
++ airo_set_frag, /* SIOCSIWFRAG */
++ airo_get_frag, /* SIOCGIWFRAG */
++ airo_set_txpow, /* SIOCSIWTXPOW */
++ airo_get_txpow, /* SIOCGIWTXPOW */
++ airo_set_retry, /* SIOCSIWRETRY */
++ airo_get_retry, /* SIOCGIWRETRY */
++ airo_set_encode, /* SIOCSIWENCODE */
++ airo_get_encode, /* SIOCGIWENCODE */
++ airo_set_power, /* SIOCSIWPOWER */
++ airo_get_power, /* SIOCGIWPOWER */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ NULL, /* SIOCSIWGENIE */
++ NULL, /* SIOCGIWGENIE */
++ airo_set_auth, /* SIOCSIWAUTH */
++ airo_get_auth, /* SIOCGIWAUTH */
++ airo_set_encodeext, /* SIOCSIWENCODEEXT */
++ airo_get_encodeext, /* SIOCGIWENCODEEXT */
++ NULL, /* SIOCSIWPMKSA */
+ };
+
+ /* Note : don't describe AIROIDIFC and AIROOLDIDIFC in here.
+@@ -7845,7 +7876,7 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
+ struct airo_info *ai = dev->ml_priv;
+ int ridcode;
+ int enabled;
+- static int (* writer)(struct airo_info *, u16 rid, const void *, int, int);
++ int (* writer)(struct airo_info *, u16 rid, const void *, int, int);
+ unsigned char *iobuf;
+
+ /* 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
+--- 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)
+ }
+ }
+
+-static void ipw2100_irq_tasklet(struct ipw2100_priv *priv)
++static void ipw2100_irq_tasklet(unsigned long _priv)
+ {
++ struct ipw2100_priv *priv = (struct ipw2100_priv *)_priv;
+ struct net_device *dev = priv->net_dev;
+ unsigned long flags;
+ u32 inta, tmp;
+@@ -6029,7 +6030,7 @@ static void ipw2100_rf_kill(struct work_struct *work)
+ spin_unlock_irqrestore(&priv->low_lock, flags);
+ }
+
+-static void ipw2100_irq_tasklet(struct ipw2100_priv *priv);
++static void ipw2100_irq_tasklet(unsigned long _priv);
+
+ static const struct net_device_ops ipw2100_netdev_ops = {
+ .ndo_open = ipw2100_open,
+@@ -6158,8 +6159,7 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
+ INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
+ INIT_DELAYED_WORK(&priv->scan_event, ipw2100_scan_event);
+
+- tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+- ipw2100_irq_tasklet, (unsigned long)priv);
++ tasklet_init(&priv->irq_tasklet, ipw2100_irq_tasklet, (unsigned long)priv);
+
+ /* 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
+--- 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)
+ wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL);
+ }
+
+-static void ipw_irq_tasklet(struct ipw_priv *priv)
++static void ipw_irq_tasklet(unsigned long _priv)
+ {
++ struct ipw_priv *priv = (struct ipw_priv *)_priv;
+ u32 inta, inta_mask, handled = 0;
+ unsigned long flags;
+ int rc = 0;
+@@ -10705,8 +10706,7 @@ static int ipw_setup_deferred_work(struct ipw_priv *priv)
+ INIT_WORK(&priv->qos_activate, ipw_bg_qos_activate);
+ #endif /* CONFIG_IPW2200_QOS */
+
+- tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+- ipw_irq_tasklet, (unsigned long)priv);
++ tasklet_init(&priv->irq_tasklet, ipw_irq_tasklet, (unsigned long)priv);
+
+ return ret;
+ }
+diff --git a/drivers/net/wireless/intel/iwlegacy/3945-mac.c b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
+index af1b3e6..9bc08d3 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)
+ }
+
+ static void
+-il3945_irq_tasklet(struct il_priv *il)
++il3945_irq_tasklet(unsigned long _il)
+ {
++ struct il_priv *il = (struct il_priv *)_il;
+ u32 inta, handled = 0;
+ u32 inta_fh;
+ unsigned long flags;
+@@ -3432,7 +3433,7 @@ il3945_setup_deferred_work(struct il_priv *il)
+ setup_timer(&il->watchdog, il_bg_watchdog, (unsigned long)il);
+
+ tasklet_init(&il->irq_tasklet,
+- (void (*)(unsigned long))il3945_irq_tasklet,
++ il3945_irq_tasklet,
+ (unsigned long)il);
+ }
+
+@@ -3469,7 +3470,7 @@ static struct attribute_group il3945_attribute_group = {
+ .attrs = il3945_sysfs_entries,
+ };
+
+-static struct ieee80211_ops il3945_mac_ops __read_mostly = {
++static struct ieee80211_ops il3945_mac_ops = {
+ .tx = il3945_mac_tx,
+ .start = il3945_mac_start,
+ .stop = il3945_mac_stop,
+@@ -3633,7 +3634,9 @@ il3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
*/
if (il3945_mod_params.disable_hw_scan) {
D_INFO("Disabling hw_scan\n");
@@ -54483,11 +62731,37 @@ index af1b3e6..d5d82713 100644
}
D_INFO("*** LOAD DRIVER ***\n");
-diff --git a/drivers/net/wireless/iwlwifi/dvm/debugfs.c b/drivers/net/wireless/iwlwifi/dvm/debugfs.c
-index b15e44f..8658af2 100644
---- a/drivers/net/wireless/iwlwifi/dvm/debugfs.c
-+++ b/drivers/net/wireless/iwlwifi/dvm/debugfs.c
-@@ -188,7 +188,7 @@ static ssize_t iwl_dbgfs_sram_write(struct file *file,
+diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
+index fd38aa0..4db38f7 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)
+ }
+
+ static void
+-il4965_irq_tasklet(struct il_priv *il)
++il4965_irq_tasklet(unsigned long _il)
+ {
++ struct il_priv *il = (struct il_priv *)_il;
+ u32 inta, handled = 0;
+ u32 inta_fh;
+ unsigned long flags;
+@@ -6254,9 +6255,7 @@ il4965_setup_deferred_work(struct il_priv *il)
+
+ setup_timer(&il->watchdog, il_bg_watchdog, (unsigned long)il);
+
+- tasklet_init(&il->irq_tasklet,
+- (void (*)(unsigned long))il4965_irq_tasklet,
+- (unsigned long)il);
++ tasklet_init(&il->irq_tasklet, il4965_irq_tasklet, (unsigned long)il);
+ }
+
+ 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
+--- 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,
{
struct iwl_priv *priv = file->private_data;
char buf[64];
@@ -54496,7 +62770,7 @@ index b15e44f..8658af2 100644
u32 offset, len;
memset(buf, 0, sizeof(buf));
-@@ -454,7 +454,7 @@ static ssize_t iwl_dbgfs_rx_handlers_write(struct file *file,
+@@ -456,7 +456,7 @@ static ssize_t iwl_dbgfs_rx_handlers_write(struct file *file,
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54505,7 +62779,7 @@ index b15e44f..8658af2 100644
u32 reset_flag;
memset(buf, 0, sizeof(buf));
-@@ -535,7 +535,7 @@ static ssize_t iwl_dbgfs_disable_ht40_write(struct file *file,
+@@ -537,7 +537,7 @@ static ssize_t iwl_dbgfs_disable_ht40_write(struct file *file,
{
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54514,7 +62788,7 @@ index b15e44f..8658af2 100644
int ht40;
memset(buf, 0, sizeof(buf));
-@@ -587,7 +587,7 @@ static ssize_t iwl_dbgfs_sleep_level_override_write(struct file *file,
+@@ -589,7 +589,7 @@ static ssize_t iwl_dbgfs_sleep_level_override_write(struct file *file,
{
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54523,7 +62797,7 @@ index b15e44f..8658af2 100644
int value;
memset(buf, 0, sizeof(buf));
-@@ -679,10 +679,10 @@ DEBUGFS_READ_FILE_OPS(temperature);
+@@ -681,10 +681,10 @@ DEBUGFS_READ_FILE_OPS(temperature);
DEBUGFS_READ_WRITE_FILE_OPS(sleep_level_override);
DEBUGFS_READ_FILE_OPS(current_sleep_command);
@@ -54538,7 +62812,7 @@ index b15e44f..8658af2 100644
"%-32s current cumulative delta max\n";
static int iwl_statistics_flag(struct iwl_priv *priv, char *buf, int bufsz)
-@@ -1852,7 +1852,7 @@ static ssize_t iwl_dbgfs_clear_ucode_statistics_write(struct file *file,
+@@ -1854,7 +1854,7 @@ static ssize_t iwl_dbgfs_clear_ucode_statistics_write(struct file *file,
{
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54547,7 +62821,7 @@ index b15e44f..8658af2 100644
int clear;
memset(buf, 0, sizeof(buf));
-@@ -1897,7 +1897,7 @@ static ssize_t iwl_dbgfs_ucode_tracing_write(struct file *file,
+@@ -1899,7 +1899,7 @@ static ssize_t iwl_dbgfs_ucode_tracing_write(struct file *file,
{
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54556,7 +62830,7 @@ index b15e44f..8658af2 100644
int trace;
memset(buf, 0, sizeof(buf));
-@@ -1968,7 +1968,7 @@ static ssize_t iwl_dbgfs_missed_beacon_write(struct file *file,
+@@ -1970,7 +1970,7 @@ static ssize_t iwl_dbgfs_missed_beacon_write(struct file *file,
{
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54565,7 +62839,7 @@ index b15e44f..8658af2 100644
int missed;
memset(buf, 0, sizeof(buf));
-@@ -2009,7 +2009,7 @@ static ssize_t iwl_dbgfs_plcp_delta_write(struct file *file,
+@@ -2011,7 +2011,7 @@ static ssize_t iwl_dbgfs_plcp_delta_write(struct file *file,
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54574,7 +62848,7 @@ index b15e44f..8658af2 100644
int plcp;
memset(buf, 0, sizeof(buf));
-@@ -2069,7 +2069,7 @@ static ssize_t iwl_dbgfs_txfifo_flush_write(struct file *file,
+@@ -2071,7 +2071,7 @@ static ssize_t iwl_dbgfs_txfifo_flush_write(struct file *file,
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54583,7 +62857,7 @@ index b15e44f..8658af2 100644
int flush;
memset(buf, 0, sizeof(buf));
-@@ -2159,7 +2159,7 @@ static ssize_t iwl_dbgfs_protection_mode_write(struct file *file,
+@@ -2161,7 +2161,7 @@ static ssize_t iwl_dbgfs_protection_mode_write(struct file *file,
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54592,7 +62866,7 @@ index b15e44f..8658af2 100644
int rts;
if (!priv->cfg->ht_params)
-@@ -2200,7 +2200,7 @@ static ssize_t iwl_dbgfs_echo_test_write(struct file *file,
+@@ -2202,7 +2202,7 @@ static ssize_t iwl_dbgfs_echo_test_write(struct file *file,
{
struct iwl_priv *priv = file->private_data;
char buf[8];
@@ -54601,7 +62875,7 @@ index b15e44f..8658af2 100644
memset(buf, 0, sizeof(buf));
buf_size = min(count, sizeof(buf) - 1);
-@@ -2234,7 +2234,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file,
+@@ -2236,7 +2236,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file,
struct iwl_priv *priv = file->private_data;
u32 event_log_flag;
char buf[8];
@@ -54610,7 +62884,7 @@ index b15e44f..8658af2 100644
/* check that the interface is up */
if (!iwl_is_ready(priv))
-@@ -2288,7 +2288,7 @@ static ssize_t iwl_dbgfs_calib_disabled_write(struct file *file,
+@@ -2290,7 +2290,7 @@ static ssize_t iwl_dbgfs_calib_disabled_write(struct file *file,
struct iwl_priv *priv = file->private_data;
char buf[8];
u32 calib_disabled;
@@ -54619,11 +62893,11 @@ index b15e44f..8658af2 100644
memset(buf, 0, sizeof(buf));
buf_size = min(count, sizeof(buf) - 1);
-diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c
-index 29ae58e..305baa0 100644
---- a/drivers/net/wireless/iwlwifi/mvm/d3.c
-+++ b/drivers/net/wireless/iwlwifi/mvm/d3.c
-@@ -279,7 +279,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
+diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
+index d3e21d9..5f07571 100644
+--- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
++++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
+@@ -308,7 +308,7 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc;
aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc;
@@ -54632,20 +62906,20 @@ index 29ae58e..305baa0 100644
aes_tx_sc->pn = cpu_to_le64(pn64);
} else {
aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc;
-@@ -1448,7 +1448,7 @@ static void iwl_mvm_d3_update_gtks(struct ieee80211_hw *hw,
- switch (key->cipher) {
+@@ -1596,7 +1596,7 @@ static void iwl_mvm_d3_update_keys(struct ieee80211_hw *hw,
case WLAN_CIPHER_SUITE_CCMP:
- iwl_mvm_set_aes_rx_seq(sc->aes.unicast_rsc, key);
+ iwl_mvm_set_aes_rx_seq(data->mvm, sc->aes.unicast_rsc,
+ sta, key);
- atomic64_set(&key->tx_pn, le64_to_cpu(sc->aes.tsc.pn));
+ atomic64_set_unchecked(&key->tx_pn, le64_to_cpu(sc->aes.tsc.pn));
break;
case WLAN_CIPHER_SUITE_TKIP:
iwl_mvm_tkip_sc_to_seq(&sc->tkip.tsc, &seq);
-diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
-index 6743edf..22a86c5 100644
---- a/drivers/net/wireless/iwlwifi/mvm/tx.c
-+++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
-@@ -284,7 +284,7 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
+diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+index a040edc..4ea3fa7 100644
+--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
++++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+@@ -286,7 +286,7 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
case WLAN_CIPHER_SUITE_CCMP:
case WLAN_CIPHER_SUITE_CCMP_256:
iwl_mvm_set_tx_cmd_ccmp(info, tx_cmd);
@@ -54654,11 +62928,11 @@ index 6743edf..22a86c5 100644
crypto_hdr[0] = pn;
crypto_hdr[2] = 0;
crypto_hdr[3] = 0x20 | (keyconf->keyidx << 6);
-diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
-index 8c72047..e54deaa 100644
---- a/drivers/net/wireless/iwlwifi/pcie/trans.c
-+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
-@@ -2058,7 +2058,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
+diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+index 5a854c6..8871801 100644
+--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
++++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+@@ -2123,7 +2123,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
struct isr_statistics *isr_stats = &trans_pcie->isr_stats;
char buf[8];
@@ -54667,7 +62941,7 @@ index 8c72047..e54deaa 100644
u32 reset_flag;
memset(buf, 0, sizeof(buf));
-@@ -2079,7 +2079,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
+@@ -2144,7 +2144,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
{
struct iwl_trans *trans = file->private_data;
char buf[8];
@@ -54676,11 +62950,1569 @@ index 8c72047..e54deaa 100644
int csr;
memset(buf, 0, sizeof(buf));
+diff --git a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
+index 3e5fa78..ca2e051 100644
+--- a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
++++ b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
+@@ -101,8 +101,9 @@ static int prism2_get_datarates(struct net_device *dev, u8 *rates)
+
+ static int prism2_get_name(struct net_device *dev,
+ struct iw_request_info *info,
+- char *name, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ char *name = wrqu->name;
+ u8 rates[10];
+ int len, i, over2 = 0;
+
+@@ -123,8 +124,9 @@ static int prism2_get_name(struct net_device *dev,
+
+ static int prism2_ioctl_siwencode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq, char *keybuf)
++ union iwreq_data *wrqu, char *keybuf)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ int i;
+@@ -225,8 +227,9 @@ static int prism2_ioctl_siwencode(struct net_device *dev,
+
+ static int prism2_ioctl_giwencode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq, char *key)
++ union iwreq_data *wrqu, char *key)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ int i, len;
+@@ -331,8 +334,9 @@ static int hostap_set_rate(struct net_device *dev)
+
+ static int prism2_ioctl_siwrate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -391,8 +395,9 @@ static int prism2_ioctl_siwrate(struct net_device *dev,
+
+ static int prism2_ioctl_giwrate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ u16 val;
+ struct hostap_interface *iface;
+ local_info_t *local;
+@@ -450,8 +455,9 @@ static int prism2_ioctl_giwrate(struct net_device *dev,
+
+ static int prism2_ioctl_siwsens(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *sens, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *sens = &wrqu->sens;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -471,8 +477,9 @@ static int prism2_ioctl_siwsens(struct net_device *dev,
+
+ static int prism2_ioctl_giwsens(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *sens, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *sens = &wrqu->sens;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ __le16 val;
+@@ -495,8 +502,9 @@ static int prism2_ioctl_giwsens(struct net_device *dev,
+ /* Deprecated in new wireless extension API */
+ static int prism2_ioctl_giwaplist(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ struct sockaddr *addr;
+@@ -536,8 +544,9 @@ static int prism2_ioctl_giwaplist(struct net_device *dev,
+
+ static int prism2_ioctl_siwrts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ __le16 val;
+@@ -563,8 +572,9 @@ static int prism2_ioctl_siwrts(struct net_device *dev,
+
+ static int prism2_ioctl_giwrts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ __le16 val;
+@@ -586,8 +596,9 @@ static int prism2_ioctl_giwrts(struct net_device *dev,
+
+ static int prism2_ioctl_siwfrag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ __le16 val;
+@@ -613,8 +624,9 @@ static int prism2_ioctl_siwfrag(struct net_device *dev,
+
+ static int prism2_ioctl_giwfrag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ __le16 val;
+@@ -679,11 +691,12 @@ static int hostap_join_ap(struct net_device *dev)
+
+ static int prism2_ioctl_siwap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *ap_addr, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ #ifdef PRISM2_NO_STATION_MODES
+ return -EOPNOTSUPP;
+ #else /* PRISM2_NO_STATION_MODES */
++ struct sockaddr *ap_addr = &wrqu->ap_addr;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -719,8 +732,9 @@ static int prism2_ioctl_siwap(struct net_device *dev,
+
+ static int prism2_ioctl_giwap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *ap_addr, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct sockaddr *ap_addr = &wrqu->ap_addr;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -755,8 +769,9 @@ static int prism2_ioctl_giwap(struct net_device *dev,
+
+ static int prism2_ioctl_siwnickn(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *nickname)
++ union iwreq_data *wrqu, char *nickname)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -776,8 +791,9 @@ static int prism2_ioctl_siwnickn(struct net_device *dev,
+
+ static int prism2_ioctl_giwnickn(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *nickname)
++ union iwreq_data *wrqu, char *nickname)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ int len;
+@@ -803,8 +819,9 @@ static int prism2_ioctl_giwnickn(struct net_device *dev,
+
+ static int prism2_ioctl_siwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *freq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *freq = &wrqu->freq;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -840,8 +857,9 @@ static int prism2_ioctl_siwfreq(struct net_device *dev,
+
+ static int prism2_ioctl_giwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *freq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *freq = &wrqu->freq;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ u16 val;
+@@ -884,8 +902,9 @@ static void hostap_monitor_set_type(local_info_t *local)
+
+ static int prism2_ioctl_siwessid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *ssid)
++ union iwreq_data *wrqu, char *ssid)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -920,8 +939,9 @@ static int prism2_ioctl_siwessid(struct net_device *dev,
+
+ static int prism2_ioctl_giwessid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *essid)
++ union iwreq_data *wrqu, char *essid)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ u16 val;
+@@ -956,8 +976,9 @@ static int prism2_ioctl_giwessid(struct net_device *dev,
+
+ static int prism2_ioctl_giwrange(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ struct iw_range *range = (struct iw_range *) extra;
+@@ -1131,8 +1152,9 @@ static int hostap_monitor_mode_disable(local_info_t *local)
+
+ static int prism2_ioctl_siwmode(struct net_device *dev,
+ struct iw_request_info *info,
+- __u32 *mode, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 *mode = &wrqu->mode;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ int double_reset = 0;
+@@ -1207,8 +1229,9 @@ static int prism2_ioctl_siwmode(struct net_device *dev,
+
+ static int prism2_ioctl_giwmode(struct net_device *dev,
+ struct iw_request_info *info,
+- __u32 *mode, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 *mode = &wrqu->mode;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -1232,11 +1255,12 @@ static int prism2_ioctl_giwmode(struct net_device *dev,
+
+ static int prism2_ioctl_siwpower(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *wrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ #ifdef PRISM2_NO_STATION_MODES
+ return -EOPNOTSUPP;
+ #else /* PRISM2_NO_STATION_MODES */
++ struct iw_param *wrq = &wrqu->power;
+ int ret = 0;
+
+ if (wrq->disabled)
+@@ -1291,11 +1315,12 @@ static int prism2_ioctl_siwpower(struct net_device *dev,
+
+ static int prism2_ioctl_giwpower(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ #ifdef PRISM2_NO_STATION_MODES
+ return -EOPNOTSUPP;
+ #else /* PRISM2_NO_STATION_MODES */
++ struct iw_param *rrq = &wrqu->power;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ __le16 enable, mcast;
+@@ -1349,8 +1374,9 @@ static int prism2_ioctl_giwpower(struct net_device *dev,
+
+ static int prism2_ioctl_siwretry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct hostap_interface *iface;
+ local_info_t *local;
+
+@@ -1410,8 +1436,9 @@ static int prism2_ioctl_siwretry(struct net_device *dev,
+
+ static int prism2_ioctl_giwretry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ __le16 shortretry, longretry, lifetime, altretry;
+@@ -1504,8 +1531,9 @@ static u16 prism2_txpower_dBm_to_hfa386x(int val)
+
+ static int prism2_ioctl_siwtxpow(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ #ifdef RAW_TXPOWER_SETTING
+@@ -1585,9 +1613,10 @@ static int prism2_ioctl_siwtxpow(struct net_device *dev,
+
+ static int prism2_ioctl_giwtxpow(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ #ifdef RAW_TXPOWER_SETTING
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ u16 resp0;
+@@ -1720,8 +1749,9 @@ static inline int prism2_request_scan(struct net_device *dev)
+
+ static int prism2_ioctl_siwscan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ int ret;
+@@ -2068,8 +2098,9 @@ static inline int prism2_ioctl_giwscan_sta(struct net_device *dev,
+
+ static int prism2_ioctl_giwscan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface;
+ local_info_t *local;
+ int res;
+@@ -2314,7 +2345,7 @@ static int prism2_ioctl_priv_inquire(struct net_device *dev, int *i)
+
+ static int prism2_ioctl_priv_prism2_param(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ struct hostap_interface *iface;
+ local_info_t *local;
+@@ -2665,7 +2696,7 @@ static int prism2_ioctl_priv_prism2_param(struct net_device *dev,
+
+ static int prism2_ioctl_priv_get_prism2_param(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ struct hostap_interface *iface;
+ local_info_t *local;
+@@ -2852,7 +2883,7 @@ static int prism2_ioctl_priv_get_prism2_param(struct net_device *dev,
+
+ static int prism2_ioctl_priv_readmif(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ struct hostap_interface *iface;
+ local_info_t *local;
+@@ -2873,7 +2904,7 @@ static int prism2_ioctl_priv_readmif(struct net_device *dev,
+
+ static int prism2_ioctl_priv_writemif(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ struct hostap_interface *iface;
+ local_info_t *local;
+@@ -2911,7 +2942,7 @@ static int prism2_ioctl_priv_monitor(struct net_device *dev, int *i)
+ /* Disable monitor mode - old mode was not saved, so go to
+ * Master mode */
+ mode = IW_MODE_MASTER;
+- ret = prism2_ioctl_siwmode(dev, NULL, &mode, NULL);
++ ret = prism2_ioctl_siwmode(dev, NULL, (union iwreq_data *)&mode, NULL);
+ } else if (*i == 1) {
+ /* netlink socket mode is not supported anymore since it did
+ * not separate different devices from each other and was not
+@@ -2928,7 +2959,7 @@ static int prism2_ioctl_priv_monitor(struct net_device *dev, int *i)
+ break;
+ }
+ mode = IW_MODE_MONITOR;
+- ret = prism2_ioctl_siwmode(dev, NULL, &mode, NULL);
++ ret = prism2_ioctl_siwmode(dev, NULL, (union iwreq_data *)&mode, NULL);
+ hostap_monitor_mode_enable(local);
+ } else
+ ret = -EINVAL;
+@@ -3094,8 +3125,9 @@ static int prism2_set_genericelement(struct net_device *dev, u8 *elem,
+
+ static int prism2_ioctl_siwauth(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *data = &wrqu->param;
+ struct hostap_interface *iface = netdev_priv(dev);
+ local_info_t *local = iface->local;
+
+@@ -3160,8 +3192,9 @@ static int prism2_ioctl_siwauth(struct net_device *dev,
+
+ static int prism2_ioctl_giwauth(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *data = &wrqu->param;
+ struct hostap_interface *iface = netdev_priv(dev);
+ local_info_t *local = iface->local;
+
+@@ -3199,8 +3232,9 @@ static int prism2_ioctl_giwauth(struct net_device *dev,
+
+ static int prism2_ioctl_siwencodeext(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct hostap_interface *iface = netdev_priv(dev);
+ local_info_t *local = iface->local;
+ struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;
+@@ -3373,8 +3407,9 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev,
+
+ static int prism2_ioctl_giwencodeext(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct hostap_interface *iface = netdev_priv(dev);
+ local_info_t *local = iface->local;
+ struct lib80211_crypt_data **crypt;
+@@ -3681,16 +3716,19 @@ static int prism2_ioctl_set_assoc_ap_addr(local_info_t *local,
+
+ static int prism2_ioctl_siwgenie(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
++
+ return prism2_set_genericelement(dev, extra, data->length);
+ }
+
+
+ static int prism2_ioctl_giwgenie(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct hostap_interface *iface = netdev_priv(dev);
+ local_info_t *local = iface->local;
+ int len = local->generic_elem_len - 2;
+@@ -3728,7 +3766,7 @@ static int prism2_ioctl_set_generic_element(local_info_t *local,
+
+ static int prism2_ioctl_siwmlme(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *data, char *extra)
+ {
+ struct hostap_interface *iface = netdev_priv(dev);
+ local_info_t *local = iface->local;
+@@ -3943,10 +3981,10 @@ static const iw_handler prism2_handler[] =
+
+ static const iw_handler prism2_private_handler[] =
+ { /* SIOCIWFIRSTPRIV + */
+- (iw_handler) prism2_ioctl_priv_prism2_param, /* 0 */
+- (iw_handler) prism2_ioctl_priv_get_prism2_param, /* 1 */
+- (iw_handler) prism2_ioctl_priv_writemif, /* 2 */
+- (iw_handler) prism2_ioctl_priv_readmif, /* 3 */
++ prism2_ioctl_priv_prism2_param, /* 0 */
++ prism2_ioctl_priv_get_prism2_param, /* 1 */
++ prism2_ioctl_priv_writemif, /* 2 */
++ prism2_ioctl_priv_readmif, /* 3 */
+ };
+
+ const struct iw_handler_def hostap_iw_handler_def =
+diff --git a/drivers/net/wireless/intersil/orinoco/wext.c b/drivers/net/wireless/intersil/orinoco/wext.c
+index 1d4dae4..0508fc1 100644
+--- a/drivers/net/wireless/intersil/orinoco/wext.c
++++ b/drivers/net/wireless/intersil/orinoco/wext.c
+@@ -154,9 +154,10 @@ static struct iw_statistics *orinoco_get_wireless_stats(struct net_device *dev)
+
+ static int orinoco_ioctl_setwap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *ap_addr,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct sockaddr *ap_addr = &wrqu->ap_addr;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int err = -EINPROGRESS; /* Call commit handler */
+ unsigned long flags;
+@@ -213,9 +214,10 @@ static int orinoco_ioctl_setwap(struct net_device *dev,
+
+ static int orinoco_ioctl_getwap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *ap_addr,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct sockaddr *ap_addr = &wrqu->ap_addr;
+ struct orinoco_private *priv = ndev_priv(dev);
+
+ int err = 0;
+@@ -234,9 +236,10 @@ static int orinoco_ioctl_getwap(struct net_device *dev,
+
+ static int orinoco_ioctl_setiwencode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq,
++ union iwreq_data *wrqu,
+ char *keybuf)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int index = (erq->flags & IW_ENCODE_INDEX) - 1;
+ int setindex = priv->tx_key;
+@@ -325,9 +328,10 @@ static int orinoco_ioctl_setiwencode(struct net_device *dev,
+
+ static int orinoco_ioctl_getiwencode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq,
++ union iwreq_data *wrqu,
+ char *keybuf)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int index = (erq->flags & IW_ENCODE_INDEX) - 1;
+ unsigned long flags;
+@@ -361,9 +365,10 @@ static int orinoco_ioctl_getiwencode(struct net_device *dev,
+
+ static int orinoco_ioctl_setessid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq,
++ union iwreq_data *wrqu,
+ char *essidbuf)
+ {
++ struct iw_point *erq = &wrqu->essid;
+ struct orinoco_private *priv = ndev_priv(dev);
+ unsigned long flags;
+
+@@ -392,9 +397,10 @@ static int orinoco_ioctl_setessid(struct net_device *dev,
+
+ static int orinoco_ioctl_getessid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq,
++ union iwreq_data *wrqu,
+ char *essidbuf)
+ {
++ struct iw_point *erq = &wrqu->essid;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int active;
+ int err = 0;
+@@ -420,9 +426,10 @@ static int orinoco_ioctl_getessid(struct net_device *dev,
+
+ static int orinoco_ioctl_setfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *frq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_freq *frq = &wrqu->freq;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int chan = -1;
+ unsigned long flags;
+@@ -469,9 +476,10 @@ static int orinoco_ioctl_setfreq(struct net_device *dev,
+
+ static int orinoco_ioctl_getfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *frq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_freq *frq = &wrqu->freq;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int tmp;
+
+@@ -488,9 +496,10 @@ static int orinoco_ioctl_getfreq(struct net_device *dev,
+
+ static int orinoco_ioctl_getsens(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *srq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *srq = &wrqu->sens;
+ struct orinoco_private *priv = ndev_priv(dev);
+ struct hermes *hw = &priv->hw;
+ u16 val;
+@@ -517,9 +526,10 @@ static int orinoco_ioctl_getsens(struct net_device *dev,
+
+ static int orinoco_ioctl_setsens(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *srq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *srq = &wrqu->sens;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int val = srq->value;
+ unsigned long flags;
+@@ -540,9 +550,10 @@ static int orinoco_ioctl_setsens(struct net_device *dev,
+
+ static int orinoco_ioctl_setrate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int ratemode;
+ int bitrate; /* 100s of kilobits */
+@@ -574,9 +585,10 @@ static int orinoco_ioctl_setrate(struct net_device *dev,
+
+ static int orinoco_ioctl_getrate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rrq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int err = 0;
+ int bitrate, automatic;
+@@ -610,9 +622,10 @@ static int orinoco_ioctl_getrate(struct net_device *dev,
+
+ static int orinoco_ioctl_setpower(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *prq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *prq = &wrqu->power;
+ struct orinoco_private *priv = ndev_priv(dev);
+ int err = -EINPROGRESS; /* Call commit handler */
+ unsigned long flags;
+@@ -664,9 +677,10 @@ static int orinoco_ioctl_setpower(struct net_device *dev,
+
+ static int orinoco_ioctl_getpower(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *prq,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_param *prq = &wrqu->power;
+ struct orinoco_private *priv = ndev_priv(dev);
+ struct hermes *hw = &priv->hw;
+ int err = 0;
+@@ -1097,7 +1111,7 @@ static int orinoco_ioctl_set_mlme(struct net_device *dev,
+
+ static int orinoco_ioctl_reset(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+@@ -1121,7 +1135,7 @@ static int orinoco_ioctl_reset(struct net_device *dev,
+
+ static int orinoco_ioctl_setibssport(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+
+ {
+@@ -1143,7 +1157,7 @@ static int orinoco_ioctl_setibssport(struct net_device *dev,
+
+ static int orinoco_ioctl_getibssport(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+@@ -1155,7 +1169,7 @@ static int orinoco_ioctl_getibssport(struct net_device *dev,
+
+ static int orinoco_ioctl_setport3(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+@@ -1201,7 +1215,7 @@ static int orinoco_ioctl_setport3(struct net_device *dev,
+
+ static int orinoco_ioctl_getport3(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+@@ -1213,7 +1227,7 @@ static int orinoco_ioctl_getport3(struct net_device *dev,
+
+ static int orinoco_ioctl_setpreamble(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+@@ -1245,7 +1259,7 @@ static int orinoco_ioctl_setpreamble(struct net_device *dev,
+
+ static int orinoco_ioctl_getpreamble(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+@@ -1265,9 +1279,10 @@ static int orinoco_ioctl_getpreamble(struct net_device *dev,
+ * For Wireless Tools 25 and 26 append "dummy" are the end. */
+ static int orinoco_ioctl_getrid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct orinoco_private *priv = ndev_priv(dev);
+ struct hermes *hw = &priv->hw;
+ int rid = data->flags;
+@@ -1303,7 +1318,7 @@ static int orinoco_ioctl_getrid(struct net_device *dev,
+ /* Commit handler, called after set operations */
+ static int orinoco_ioctl_commit(struct net_device *dev,
+ struct iw_request_info *info,
+- void *wrqu,
++ union iwreq_data *wrqu,
+ char *extra)
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+@@ -1347,36 +1362,36 @@ static const struct iw_priv_args orinoco_privtab[] = {
+ */
+
+ static const iw_handler orinoco_handler[] = {
+- IW_HANDLER(SIOCSIWCOMMIT, (iw_handler)orinoco_ioctl_commit),
+- IW_HANDLER(SIOCGIWNAME, (iw_handler)cfg80211_wext_giwname),
+- IW_HANDLER(SIOCSIWFREQ, (iw_handler)orinoco_ioctl_setfreq),
+- IW_HANDLER(SIOCGIWFREQ, (iw_handler)orinoco_ioctl_getfreq),
+- IW_HANDLER(SIOCSIWMODE, (iw_handler)cfg80211_wext_siwmode),
+- IW_HANDLER(SIOCGIWMODE, (iw_handler)cfg80211_wext_giwmode),
+- IW_HANDLER(SIOCSIWSENS, (iw_handler)orinoco_ioctl_setsens),
+- IW_HANDLER(SIOCGIWSENS, (iw_handler)orinoco_ioctl_getsens),
+- IW_HANDLER(SIOCGIWRANGE, (iw_handler)cfg80211_wext_giwrange),
++ IW_HANDLER(SIOCSIWCOMMIT, orinoco_ioctl_commit),
++ IW_HANDLER(SIOCGIWNAME, cfg80211_wext_giwname),
++ IW_HANDLER(SIOCSIWFREQ, orinoco_ioctl_setfreq),
++ IW_HANDLER(SIOCGIWFREQ, orinoco_ioctl_getfreq),
++ IW_HANDLER(SIOCSIWMODE, cfg80211_wext_siwmode),
++ IW_HANDLER(SIOCGIWMODE, cfg80211_wext_giwmode),
++ IW_HANDLER(SIOCSIWSENS, orinoco_ioctl_setsens),
++ IW_HANDLER(SIOCGIWSENS, orinoco_ioctl_getsens),
++ IW_HANDLER(SIOCGIWRANGE, cfg80211_wext_giwrange),
+ IW_HANDLER(SIOCSIWSPY, iw_handler_set_spy),
+ IW_HANDLER(SIOCGIWSPY, iw_handler_get_spy),
+ IW_HANDLER(SIOCSIWTHRSPY, iw_handler_set_thrspy),
+ IW_HANDLER(SIOCGIWTHRSPY, iw_handler_get_thrspy),
+- IW_HANDLER(SIOCSIWAP, (iw_handler)orinoco_ioctl_setwap),
+- IW_HANDLER(SIOCGIWAP, (iw_handler)orinoco_ioctl_getwap),
+- IW_HANDLER(SIOCSIWSCAN, (iw_handler)cfg80211_wext_siwscan),
+- IW_HANDLER(SIOCGIWSCAN, (iw_handler)cfg80211_wext_giwscan),
+- IW_HANDLER(SIOCSIWESSID, (iw_handler)orinoco_ioctl_setessid),
+- IW_HANDLER(SIOCGIWESSID, (iw_handler)orinoco_ioctl_getessid),
+- IW_HANDLER(SIOCSIWRATE, (iw_handler)orinoco_ioctl_setrate),
+- IW_HANDLER(SIOCGIWRATE, (iw_handler)orinoco_ioctl_getrate),
+- IW_HANDLER(SIOCSIWRTS, (iw_handler)cfg80211_wext_siwrts),
+- IW_HANDLER(SIOCGIWRTS, (iw_handler)cfg80211_wext_giwrts),
+- IW_HANDLER(SIOCSIWFRAG, (iw_handler)cfg80211_wext_siwfrag),
+- IW_HANDLER(SIOCGIWFRAG, (iw_handler)cfg80211_wext_giwfrag),
+- IW_HANDLER(SIOCGIWRETRY, (iw_handler)cfg80211_wext_giwretry),
+- IW_HANDLER(SIOCSIWENCODE, (iw_handler)orinoco_ioctl_setiwencode),
+- IW_HANDLER(SIOCGIWENCODE, (iw_handler)orinoco_ioctl_getiwencode),
+- IW_HANDLER(SIOCSIWPOWER, (iw_handler)orinoco_ioctl_setpower),
+- IW_HANDLER(SIOCGIWPOWER, (iw_handler)orinoco_ioctl_getpower),
++ IW_HANDLER(SIOCSIWAP, orinoco_ioctl_setwap),
++ IW_HANDLER(SIOCGIWAP, orinoco_ioctl_getwap),
++ IW_HANDLER(SIOCSIWSCAN, cfg80211_wext_siwscan),
++ IW_HANDLER(SIOCGIWSCAN, cfg80211_wext_giwscan),
++ IW_HANDLER(SIOCSIWESSID, orinoco_ioctl_setessid),
++ IW_HANDLER(SIOCGIWESSID, orinoco_ioctl_getessid),
++ IW_HANDLER(SIOCSIWRATE, orinoco_ioctl_setrate),
++ IW_HANDLER(SIOCGIWRATE, orinoco_ioctl_getrate),
++ IW_HANDLER(SIOCSIWRTS, cfg80211_wext_siwrts),
++ IW_HANDLER(SIOCGIWRTS, cfg80211_wext_giwrts),
++ IW_HANDLER(SIOCSIWFRAG, cfg80211_wext_siwfrag),
++ IW_HANDLER(SIOCGIWFRAG, cfg80211_wext_giwfrag),
++ IW_HANDLER(SIOCGIWRETRY, cfg80211_wext_giwretry),
++ IW_HANDLER(SIOCSIWENCODE, orinoco_ioctl_setiwencode),
++ IW_HANDLER(SIOCGIWENCODE, orinoco_ioctl_getiwencode),
++ IW_HANDLER(SIOCSIWPOWER, orinoco_ioctl_setpower),
++ IW_HANDLER(SIOCGIWPOWER, orinoco_ioctl_getpower),
+ IW_HANDLER(SIOCSIWGENIE, orinoco_ioctl_set_genie),
+ IW_HANDLER(SIOCGIWGENIE, orinoco_ioctl_get_genie),
+ IW_HANDLER(SIOCSIWMLME, orinoco_ioctl_set_mlme),
+@@ -1391,15 +1406,15 @@ static const iw_handler orinoco_handler[] = {
+ Added typecasting since we no longer use iwreq_data -- Moustafa
+ */
+ static const iw_handler orinoco_private_handler[] = {
+- [0] = (iw_handler)orinoco_ioctl_reset,
+- [1] = (iw_handler)orinoco_ioctl_reset,
+- [2] = (iw_handler)orinoco_ioctl_setport3,
+- [3] = (iw_handler)orinoco_ioctl_getport3,
+- [4] = (iw_handler)orinoco_ioctl_setpreamble,
+- [5] = (iw_handler)orinoco_ioctl_getpreamble,
+- [6] = (iw_handler)orinoco_ioctl_setibssport,
+- [7] = (iw_handler)orinoco_ioctl_getibssport,
+- [9] = (iw_handler)orinoco_ioctl_getrid,
++ [0] = orinoco_ioctl_reset,
++ [1] = orinoco_ioctl_reset,
++ [2] = orinoco_ioctl_setport3,
++ [3] = orinoco_ioctl_getport3,
++ [4] = orinoco_ioctl_setpreamble,
++ [5] = orinoco_ioctl_getpreamble,
++ [6] = orinoco_ioctl_setibssport,
++ [7] = orinoco_ioctl_getibssport,
++ [9] = orinoco_ioctl_getrid,
+ };
+
+ const struct iw_handler_def orinoco_handler_def = {
+diff --git a/drivers/net/wireless/intersil/prism54/isl_ioctl.c b/drivers/net/wireless/intersil/prism54/isl_ioctl.c
+index 48e8a97..3499ec8 100644
+--- a/drivers/net/wireless/intersil/prism54/isl_ioctl.c
++++ b/drivers/net/wireless/intersil/prism54/isl_ioctl.c
+@@ -45,7 +45,7 @@ static void prism54_wpa_bss_ie_add(islpci_private *priv, u8 *bssid,
+ u8 *wpa_ie, size_t wpa_ie_len);
+ static size_t prism54_wpa_bss_ie_get(islpci_private *priv, u8 *bssid, u8 *wpa_ie);
+ static int prism54_set_wpa(struct net_device *, struct iw_request_info *,
+- __u32 *, char *);
++ union iwreq_data *, char *);
+
+ /* In 500 kbps */
+ static const unsigned char scan_rate_list[] = { 2, 4, 11, 22,
+@@ -240,7 +240,7 @@ prism54_get_wireless_stats(struct net_device *ndev)
+
+ static int
+ prism54_commit(struct net_device *ndev, struct iw_request_info *info,
+- char *cwrq, char *extra)
++ union iwreq_data *cwrq, char *extra)
+ {
+ islpci_private *priv = netdev_priv(ndev);
+
+@@ -256,8 +256,9 @@ prism54_commit(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_name(struct net_device *ndev, struct iw_request_info *info,
+- char *cwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ char *cwrq = wrqu->name;
+ islpci_private *priv = netdev_priv(ndev);
+ char *capabilities;
+ union oid_res_t r;
+@@ -287,8 +288,9 @@ prism54_get_name(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_freq(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_freq *fwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *fwrq = &wrqu->freq;
+ islpci_private *priv = netdev_priv(ndev);
+ int rvalue;
+ u32 c;
+@@ -307,8 +309,9 @@ prism54_set_freq(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_freq(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_freq *fwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *fwrq = &wrqu->freq;
+ islpci_private *priv = netdev_priv(ndev);
+ union oid_res_t r;
+ int rvalue;
+@@ -324,8 +327,9 @@ prism54_get_freq(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_mode(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 *uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+ u32 mlmeautolevel = CARD_DEFAULT_MLME_MODE;
+
+@@ -368,8 +372,9 @@ prism54_set_mode(struct net_device *ndev, struct iw_request_info *info,
+ /* Use mib cache */
+ static int
+ prism54_get_mode(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 *uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+
+ BUG_ON((priv->iw_mode < IW_MODE_AUTO) || (priv->iw_mode >
+@@ -386,8 +391,9 @@ prism54_get_mode(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_sens(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->sens;
+ islpci_private *priv = netdev_priv(ndev);
+ u32 sens;
+
+@@ -399,8 +405,9 @@ prism54_set_sens(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_sens(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->sens;
+ islpci_private *priv = netdev_priv(ndev);
+ union oid_res_t r;
+ int rvalue;
+@@ -416,8 +423,9 @@ prism54_get_sens(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_range(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ struct iw_range *range = (struct iw_range *) extra;
+ islpci_private *priv = netdev_priv(ndev);
+ u8 *data;
+@@ -521,8 +529,9 @@ prism54_get_range(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_wap(struct net_device *ndev, struct iw_request_info *info,
+- struct sockaddr *awrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct sockaddr *awrq = &wrqu->ap_addr;
+ islpci_private *priv = netdev_priv(ndev);
+ char bssid[6];
+ int rvalue;
+@@ -543,8 +552,9 @@ prism54_set_wap(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_wap(struct net_device *ndev, struct iw_request_info *info,
+- struct sockaddr *awrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct sockaddr *awrq = &wrqu->ap_addr;
+ islpci_private *priv = netdev_priv(ndev);
+ union oid_res_t r;
+ int rvalue;
+@@ -559,7 +569,7 @@ prism54_get_wap(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_scan(struct net_device *dev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *vwrq, char *extra)
+ {
+ /* hehe the device does this automagicaly */
+ return 0;
+@@ -679,8 +689,9 @@ prism54_translate_bss(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_scan(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ int i, rvalue;
+ struct obj_bsslist *bsslist;
+@@ -733,8 +744,9 @@ prism54_get_scan(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_essid(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ struct obj_ssid essid;
+
+@@ -760,8 +772,9 @@ prism54_set_essid(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_essid(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ struct obj_ssid *essid;
+ union oid_res_t r;
+@@ -790,8 +803,9 @@ prism54_get_essid(struct net_device *ndev, struct iw_request_info *info,
+ */
+ static int
+ prism54_set_nick(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+
+ if (dwrq->length > IW_ESSID_MAX_SIZE)
+@@ -807,8 +821,9 @@ prism54_set_nick(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_nick(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+
+ dwrq->length = 0;
+@@ -826,9 +841,9 @@ prism54_get_nick(struct net_device *ndev, struct iw_request_info *info,
+ static int
+ prism54_set_rate(struct net_device *ndev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+-
++ struct iw_param *vwrq = &wrqu->bitrate;
+ islpci_private *priv = netdev_priv(ndev);
+ u32 rate, profile;
+ char *data;
+@@ -899,8 +914,9 @@ prism54_set_rate(struct net_device *ndev,
+ static int
+ prism54_get_rate(struct net_device *ndev,
+ struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->bitrate;
+ islpci_private *priv = netdev_priv(ndev);
+ int rvalue;
+ char *data;
+@@ -926,8 +942,9 @@ prism54_get_rate(struct net_device *ndev,
+
+ static int
+ prism54_set_rts(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->rts;
+ islpci_private *priv = netdev_priv(ndev);
+
+ return mgt_set_request(priv, DOT11_OID_RTSTHRESH, 0, &vwrq->value);
+@@ -935,8 +952,9 @@ prism54_set_rts(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_rts(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->rts;
+ islpci_private *priv = netdev_priv(ndev);
+ union oid_res_t r;
+ int rvalue;
+@@ -950,8 +968,9 @@ prism54_get_rts(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_frag(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->frag;
+ islpci_private *priv = netdev_priv(ndev);
+
+ return mgt_set_request(priv, DOT11_OID_FRAGTHRESH, 0, &vwrq->value);
+@@ -959,8 +978,9 @@ prism54_set_frag(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_frag(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->frag;
+ islpci_private *priv = netdev_priv(ndev);
+ union oid_res_t r;
+ int rvalue;
+@@ -980,8 +1000,9 @@ prism54_get_frag(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_retry(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->retry;
+ islpci_private *priv = netdev_priv(ndev);
+ u32 slimit = 0, llimit = 0; /* short and long limit */
+ u32 lifetime = 0;
+@@ -1022,8 +1043,9 @@ prism54_set_retry(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_retry(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->retry;
+ islpci_private *priv = netdev_priv(ndev);
+ union oid_res_t r;
+ int rvalue = 0;
+@@ -1054,8 +1076,9 @@ prism54_get_retry(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_encode(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ int rvalue = 0, force = 0;
+ int authen = DOT11_AUTH_OS, invoke = 0, exunencrypt = 0;
+@@ -1155,8 +1178,9 @@ prism54_set_encode(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_encode(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ struct obj_key *key;
+ u32 devindex, index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
+@@ -1203,8 +1227,9 @@ prism54_get_encode(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_txpower(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->txpower;
+ islpci_private *priv = netdev_priv(ndev);
+ union oid_res_t r;
+ int rvalue;
+@@ -1223,8 +1248,9 @@ prism54_get_txpower(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_txpower(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_param *vwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->txpower;
+ islpci_private *priv = netdev_priv(ndev);
+ s32 u = vwrq->value;
+
+@@ -1249,8 +1275,9 @@ prism54_set_txpower(struct net_device *ndev, struct iw_request_info *info,
+
+ static int prism54_set_genie(struct net_device *ndev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ int alen, ret = 0;
+ struct obj_attachment *attach;
+@@ -1298,8 +1325,9 @@ static int prism54_set_genie(struct net_device *ndev,
+
+ static int prism54_get_genie(struct net_device *ndev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ int len = priv->wpa_ie_len;
+
+@@ -1739,7 +1767,7 @@ out:
+
+ static int
+ prism54_reset(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data * uwrq, char *extra)
+ {
+ islpci_reset(netdev_priv(ndev), 0);
+
+@@ -1748,8 +1776,9 @@ prism54_reset(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ union oid_res_t r;
+ int rvalue;
+ enum oid_num_t n = dwrq->flags;
+@@ -1763,8 +1792,9 @@ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_u32(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ u32 oid = uwrq[0], u = uwrq[1];
+
+ return mgt_set_request(netdev_priv(ndev), oid, 0, &u);
+@@ -1772,8 +1802,9 @@ prism54_set_u32(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_raw(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ u32 oid = dwrq->flags;
+
+ return mgt_set_request(netdev_priv(ndev), oid, 0, extra);
+@@ -1819,7 +1850,7 @@ prism54_acl_clean(struct islpci_acl *acl)
+
+ static int
+ prism54_add_mac(struct net_device *ndev, struct iw_request_info *info,
+- struct sockaddr *awrq, char *extra)
++ union iwreq_data *awrq, char *extra)
+ {
+ islpci_private *priv = netdev_priv(ndev);
+ struct islpci_acl *acl = &priv->acl;
+@@ -1848,7 +1879,7 @@ prism54_add_mac(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,
+- struct sockaddr *awrq, char *extra)
++ union iwreq_data *awrq, char *extra)
+ {
+ islpci_private *priv = netdev_priv(ndev);
+ struct islpci_acl *acl = &priv->acl;
+@@ -1875,8 +1906,9 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *dwrq = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ struct islpci_acl *acl = &priv->acl;
+ struct mac_entry *entry;
+@@ -1903,8 +1935,9 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_policy(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+ struct islpci_acl *acl = &priv->acl;
+ u32 mlmeautolevel;
+@@ -1939,8 +1972,9 @@ prism54_set_policy(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_policy(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+ struct islpci_acl *acl = &priv->acl;
+
+@@ -1979,7 +2013,7 @@ prism54_mac_accept(struct islpci_acl *acl, char *mac)
+
+ static int
+ prism54_kick_all(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *dwrq, char *extra)
++ union iwreq_data *dwrq, char *extra)
+ {
+ struct obj_mlme *mlme;
+ int rvalue;
+@@ -1999,7 +2033,7 @@ prism54_kick_all(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_kick_mac(struct net_device *ndev, struct iw_request_info *info,
+- struct sockaddr *awrq, char *extra)
++ union iwreq_data *awrq, char *extra)
+ {
+ struct obj_mlme *mlme;
+ struct sockaddr *addr = (struct sockaddr *) extra;
+@@ -2085,8 +2119,7 @@ link_changed(struct net_device *ndev, u32 bitrate)
+ netif_carrier_on(ndev);
+ if (priv->iw_mode == IW_MODE_INFRA) {
+ union iwreq_data uwrq;
+- prism54_get_wap(ndev, NULL, (struct sockaddr *) &uwrq,
+- NULL);
++ prism54_get_wap(ndev, NULL, &uwrq, NULL);
+ wireless_send_event(ndev, SIOCGIWAP, &uwrq, NULL);
+ } else
+ send_simple_event(netdev_priv(ndev),
+@@ -2498,8 +2531,9 @@ prism54_set_mac_address(struct net_device *ndev, void *addr)
+
+ static int
+ prism54_set_wpa(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+ u32 mlme, authen, dot1x, filter, wep;
+
+@@ -2542,8 +2576,9 @@ prism54_set_wpa(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_wpa(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+ *uwrq = priv->wpa;
+ return 0;
+@@ -2551,8 +2586,9 @@ prism54_get_wpa(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_set_prismhdr(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+ priv->monitor_type =
+ (*uwrq ? ARPHRD_IEEE80211_PRISM : ARPHRD_IEEE80211);
+@@ -2564,8 +2600,9 @@ prism54_set_prismhdr(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_get_prismhdr(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+ *uwrq = (priv->monitor_type == ARPHRD_IEEE80211_PRISM);
+ return 0;
+@@ -2573,8 +2610,9 @@ prism54_get_prismhdr(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_debug_oid(struct net_device *ndev, struct iw_request_info *info,
+- __u32 * uwrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ __u32 * uwrq = &wrqu->mode;
+ islpci_private *priv = netdev_priv(ndev);
+
+ priv->priv_oid = *uwrq;
+@@ -2585,8 +2623,9 @@ prism54_debug_oid(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_debug_get_oid(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ struct islpci_mgmtframe *response;
+ int ret = -EIO;
+@@ -2621,8 +2660,9 @@ prism54_debug_get_oid(struct net_device *ndev, struct iw_request_info *info,
+
+ static int
+ prism54_debug_set_oid(struct net_device *ndev, struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ islpci_private *priv = netdev_priv(ndev);
+ struct islpci_mgmtframe *response;
+ int ret = 0, response_op = PIMFOR_OP_ERROR;
+@@ -2682,60 +2722,60 @@ prism54_set_spy(struct net_device *ndev,
+ }
+
+ static const iw_handler prism54_handler[] = {
+- (iw_handler) prism54_commit, /* SIOCSIWCOMMIT */
+- (iw_handler) prism54_get_name, /* SIOCGIWNAME */
+- (iw_handler) NULL, /* SIOCSIWNWID */
+- (iw_handler) NULL, /* SIOCGIWNWID */
+- (iw_handler) prism54_set_freq, /* SIOCSIWFREQ */
+- (iw_handler) prism54_get_freq, /* SIOCGIWFREQ */
+- (iw_handler) prism54_set_mode, /* SIOCSIWMODE */
+- (iw_handler) prism54_get_mode, /* SIOCGIWMODE */
+- (iw_handler) prism54_set_sens, /* SIOCSIWSENS */
+- (iw_handler) prism54_get_sens, /* SIOCGIWSENS */
+- (iw_handler) NULL, /* SIOCSIWRANGE */
+- (iw_handler) prism54_get_range, /* SIOCGIWRANGE */
+- (iw_handler) NULL, /* SIOCSIWPRIV */
+- (iw_handler) NULL, /* SIOCGIWPRIV */
+- (iw_handler) NULL, /* SIOCSIWSTATS */
+- (iw_handler) NULL, /* SIOCGIWSTATS */
++ prism54_commit, /* SIOCSIWCOMMIT */
++ prism54_get_name, /* SIOCGIWNAME */
++ NULL, /* SIOCSIWNWID */
++ NULL, /* SIOCGIWNWID */
++ prism54_set_freq, /* SIOCSIWFREQ */
++ prism54_get_freq, /* SIOCGIWFREQ */
++ prism54_set_mode, /* SIOCSIWMODE */
++ prism54_get_mode, /* SIOCGIWMODE */
++ prism54_set_sens, /* SIOCSIWSENS */
++ prism54_get_sens, /* SIOCGIWSENS */
++ NULL, /* SIOCSIWRANGE */
++ prism54_get_range, /* SIOCGIWRANGE */
++ NULL, /* SIOCSIWPRIV */
++ NULL, /* SIOCGIWPRIV */
++ NULL, /* SIOCSIWSTATS */
++ NULL, /* SIOCGIWSTATS */
+ prism54_set_spy, /* SIOCSIWSPY */
+ iw_handler_get_spy, /* SIOCGIWSPY */
+ iw_handler_set_thrspy, /* SIOCSIWTHRSPY */
+ iw_handler_get_thrspy, /* SIOCGIWTHRSPY */
+- (iw_handler) prism54_set_wap, /* SIOCSIWAP */
+- (iw_handler) prism54_get_wap, /* SIOCGIWAP */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* SIOCGIWAPLIST deprecated */
+- (iw_handler) prism54_set_scan, /* SIOCSIWSCAN */
+- (iw_handler) prism54_get_scan, /* SIOCGIWSCAN */
+- (iw_handler) prism54_set_essid, /* SIOCSIWESSID */
+- (iw_handler) prism54_get_essid, /* SIOCGIWESSID */
+- (iw_handler) prism54_set_nick, /* SIOCSIWNICKN */
+- (iw_handler) prism54_get_nick, /* SIOCGIWNICKN */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) prism54_set_rate, /* SIOCSIWRATE */
+- (iw_handler) prism54_get_rate, /* SIOCGIWRATE */
+- (iw_handler) prism54_set_rts, /* SIOCSIWRTS */
+- (iw_handler) prism54_get_rts, /* SIOCGIWRTS */
+- (iw_handler) prism54_set_frag, /* SIOCSIWFRAG */
+- (iw_handler) prism54_get_frag, /* SIOCGIWFRAG */
+- (iw_handler) prism54_set_txpower, /* SIOCSIWTXPOW */
+- (iw_handler) prism54_get_txpower, /* SIOCGIWTXPOW */
+- (iw_handler) prism54_set_retry, /* SIOCSIWRETRY */
+- (iw_handler) prism54_get_retry, /* SIOCGIWRETRY */
+- (iw_handler) prism54_set_encode, /* SIOCSIWENCODE */
+- (iw_handler) prism54_get_encode, /* SIOCGIWENCODE */
+- (iw_handler) NULL, /* SIOCSIWPOWER */
+- (iw_handler) NULL, /* SIOCGIWPOWER */
++ prism54_set_wap, /* SIOCSIWAP */
++ prism54_get_wap, /* SIOCGIWAP */
++ NULL, /* -- hole -- */
++ NULL, /* SIOCGIWAPLIST deprecated */
++ prism54_set_scan, /* SIOCSIWSCAN */
++ prism54_get_scan, /* SIOCGIWSCAN */
++ prism54_set_essid, /* SIOCSIWESSID */
++ prism54_get_essid, /* SIOCGIWESSID */
++ prism54_set_nick, /* SIOCSIWNICKN */
++ prism54_get_nick, /* SIOCGIWNICKN */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ prism54_set_rate, /* SIOCSIWRATE */
++ prism54_get_rate, /* SIOCGIWRATE */
++ prism54_set_rts, /* SIOCSIWRTS */
++ prism54_get_rts, /* SIOCGIWRTS */
++ prism54_set_frag, /* SIOCSIWFRAG */
++ prism54_get_frag, /* SIOCGIWFRAG */
++ prism54_set_txpower, /* SIOCSIWTXPOW */
++ prism54_get_txpower, /* SIOCGIWTXPOW */
++ prism54_set_retry, /* SIOCSIWRETRY */
++ prism54_get_retry, /* SIOCGIWRETRY */
++ prism54_set_encode, /* SIOCSIWENCODE */
++ prism54_get_encode, /* SIOCGIWENCODE */
++ NULL, /* SIOCSIWPOWER */
++ NULL, /* SIOCGIWPOWER */
+ NULL, /* -- hole -- */
+ NULL, /* -- hole -- */
+- (iw_handler) prism54_set_genie, /* SIOCSIWGENIE */
+- (iw_handler) prism54_get_genie, /* SIOCGIWGENIE */
+- (iw_handler) prism54_set_auth, /* SIOCSIWAUTH */
+- (iw_handler) prism54_get_auth, /* SIOCGIWAUTH */
+- (iw_handler) prism54_set_encodeext, /* SIOCSIWENCODEEXT */
+- (iw_handler) prism54_get_encodeext, /* SIOCGIWENCODEEXT */
++ prism54_set_genie, /* SIOCSIWGENIE */
++ prism54_get_genie, /* SIOCGIWGENIE */
++ prism54_set_auth, /* SIOCSIWAUTH */
++ prism54_get_auth, /* SIOCGIWAUTH */
++ prism54_set_encodeext, /* SIOCSIWENCODEEXT */
++ prism54_get_encodeext, /* SIOCGIWENCODEEXT */
+ NULL, /* SIOCSIWPMKSA */
+ };
+
+@@ -2872,31 +2912,31 @@ static const struct iw_priv_args prism54_private_args[] = {
+ };
+
+ static const iw_handler prism54_private_handler[] = {
+- (iw_handler) prism54_reset,
+- (iw_handler) prism54_get_policy,
+- (iw_handler) prism54_set_policy,
+- (iw_handler) prism54_get_mac,
+- (iw_handler) prism54_add_mac,
+- (iw_handler) NULL,
+- (iw_handler) prism54_del_mac,
+- (iw_handler) NULL,
+- (iw_handler) prism54_kick_mac,
+- (iw_handler) NULL,
+- (iw_handler) prism54_kick_all,
+- (iw_handler) prism54_get_wpa,
+- (iw_handler) prism54_set_wpa,
+- (iw_handler) NULL,
+- (iw_handler) prism54_debug_oid,
+- (iw_handler) prism54_debug_get_oid,
+- (iw_handler) prism54_debug_set_oid,
+- (iw_handler) prism54_get_oid,
+- (iw_handler) prism54_set_u32,
+- (iw_handler) NULL,
+- (iw_handler) prism54_set_raw,
+- (iw_handler) NULL,
+- (iw_handler) prism54_set_raw,
+- (iw_handler) prism54_get_prismhdr,
+- (iw_handler) prism54_set_prismhdr,
++ prism54_reset,
++ prism54_get_policy,
++ prism54_set_policy,
++ prism54_get_mac,
++ prism54_add_mac,
++ NULL,
++ prism54_del_mac,
++ NULL,
++ prism54_kick_mac,
++ NULL,
++ prism54_kick_all,
++ prism54_get_wpa,
++ prism54_set_wpa,
++ NULL,
++ prism54_debug_oid,
++ prism54_debug_get_oid,
++ prism54_debug_set_oid,
++ prism54_get_oid,
++ prism54_set_u32,
++ NULL,
++ prism54_set_raw,
++ NULL,
++ prism54_set_raw,
++ prism54_get_prismhdr,
++ prism54_set_prismhdr,
+ };
+
+ 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 c00a7daaa..4f9ed30 100644
+index a28414c..26c8768 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
-@@ -3150,20 +3150,20 @@ static int __init init_mac80211_hwsim(void)
+@@ -3218,20 +3218,20 @@ static int __init init_mac80211_hwsim(void)
if (channels < 1)
return -EINVAL;
@@ -54715,10 +64547,120 @@ index c00a7daaa..4f9ed30 100644
spin_lock_init(&hwsim_radio_lock);
INIT_LIST_HEAD(&hwsim_radios);
-diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
-index 3282ddb..26aabb5 100644
---- a/drivers/net/wireless/rt2x00/rt2x00.h
-+++ b/drivers/net/wireless/rt2x00/rt2x00.h
+diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
+index 79c16de..efdebed 100644
+--- a/drivers/net/wireless/marvell/mwifiex/main.c
++++ b/drivers/net/wireless/marvell/mwifiex/main.c
+@@ -794,7 +794,7 @@ mwifiex_clone_skb_for_tx_status(struct mwifiex_private *priv,
+ /*
+ * CFG802.11 network device handler for data transmission.
+ */
+-static int
++static netdev_tx_t
+ mwifiex_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
+index 155f343..5db43e7 100644
+--- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
+@@ -54,7 +54,7 @@
+ rt2x00mmio_regbusy_read((__dev), RFCSR, RFCSR_BUSY, (__reg))
+
+ static void rt2400pci_bbp_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u8 value)
++ const unsigned int word, u8 value)
+ {
+ u32 reg;
+
+@@ -109,7 +109,7 @@ static void rt2400pci_bbp_read(struct rt2x00_dev *rt2x00dev,
+ }
+
+ static void rt2400pci_rf_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u32 value)
++ const unsigned int word, u32 value)
+ {
+ u32 reg;
+
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
+index 2553cdd..6a60ef9 100644
+--- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
+@@ -54,7 +54,7 @@
+ rt2x00mmio_regbusy_read((__dev), RFCSR, RFCSR_BUSY, (__reg))
+
+ static void rt2500pci_bbp_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u8 value)
++ const unsigned int word, u8 value)
+ {
+ u32 reg;
+
+@@ -109,7 +109,7 @@ static void rt2500pci_bbp_read(struct rt2x00_dev *rt2x00dev,
+ }
+
+ static void rt2500pci_rf_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u32 value)
++ const unsigned int word, u32 value)
+ {
+ u32 reg;
+
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
+index 2d64611..66754f4 100644
+--- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c
+@@ -142,7 +142,7 @@ static int rt2500usb_regbusy_read(struct rt2x00_dev *rt2x00dev,
+ rt2500usb_regbusy_read((__dev), PHY_CSR10, PHY_CSR10_RF_BUSY, (__reg))
+
+ static void rt2500usb_bbp_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u8 value)
++ const unsigned int word, u8 value)
+ {
+ u16 reg;
+
+@@ -196,7 +196,7 @@ static void rt2500usb_bbp_read(struct rt2x00_dev *rt2x00dev,
+ }
+
+ static void rt2500usb_rf_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u32 value)
++ const unsigned int word, u32 value)
+ {
+ u16 reg;
+
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+index a26afca..156b152 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)
+ }
+
+ static void rt2800_bbp_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u8 value)
++ const unsigned int word, u8 value)
+ {
+ u32 reg;
+
+@@ -140,7 +140,7 @@ static void rt2800_bbp_read(struct rt2x00_dev *rt2x00dev,
+ }
+
+ static void rt2800_rfcsr_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u8 value)
++ const unsigned int word, u8 value)
+ {
+ u32 reg;
+
+@@ -195,7 +195,7 @@ static void rt2800_rfcsr_read(struct rt2x00_dev *rt2x00dev,
+ }
+
+ static void rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u32 value)
++ const unsigned int word, u32 value)
+ {
+ u32 reg;
+
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+index 2642714..d79a7e9 100644
+--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
@@ -377,7 +377,7 @@ struct rt2x00_intf {
* for hardware which doesn't support hardware
* sequence counting.
@@ -54728,10 +64670,10 @@ index 3282ddb..26aabb5 100644
};
static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
-diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
index 68b620b..92ecd9e 100644
---- a/drivers/net/wireless/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
+--- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
@@ -224,9 +224,9 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev,
* sequence counter given by mac80211.
*/
@@ -54744,6 +64686,200 @@ 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
+--- 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.");
+ H2M_MAILBOX_CSR_OWNER, (__reg))
+
+ static void rt61pci_bbp_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u8 value)
++ const unsigned int word, u8 value)
+ {
+ u32 reg;
+
+@@ -118,7 +118,7 @@ static void rt61pci_bbp_read(struct rt2x00_dev *rt2x00dev,
+ }
+
+ static void rt61pci_rf_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u32 value)
++ const unsigned int word, u32 value)
+ {
+ u32 reg;
+
+diff --git a/drivers/net/wireless/ralink/rt2x00/rt73usb.c b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
+index 7bbc869..d69e243 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.");
+ rt2x00usb_regbusy_read((__dev), PHY_CSR4, PHY_CSR4_BUSY, (__reg))
+
+ static void rt73usb_bbp_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u8 value)
++ const unsigned int word, u8 value)
+ {
+ u32 reg;
+
+@@ -116,7 +116,7 @@ static void rt73usb_bbp_read(struct rt2x00_dev *rt2x00dev,
+ }
+
+ static void rt73usb_rf_write(struct rt2x00_dev *rt2x00dev,
+- const unsigned int word, const u32 value)
++ const unsigned int word, u32 value)
+ {
+ u32 reg;
+
+diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
+index 0517a4f..cac8e6b 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)
+ rtlpriv->works.hw = hw;
+ rtlpriv->works.rtl_wq = alloc_workqueue("%s", 0, 0, rtlpriv->cfg->name);
+ INIT_DELAYED_WORK(&rtlpriv->works.watchdog_wq,
+- (void *)rtl_watchdog_wq_callback);
++ rtl_watchdog_wq_callback);
+ INIT_DELAYED_WORK(&rtlpriv->works.ips_nic_off_wq,
+- (void *)rtl_ips_nic_off_wq_callback);
++ rtl_ips_nic_off_wq_callback);
+ INIT_DELAYED_WORK(&rtlpriv->works.ps_work,
+- (void *)rtl_swlps_wq_callback);
++ rtl_swlps_wq_callback);
+ INIT_DELAYED_WORK(&rtlpriv->works.ps_rfon_wq,
+- (void *)rtl_swlps_rfon_wq_callback);
++ rtl_swlps_rfon_wq_callback);
+ INIT_DELAYED_WORK(&rtlpriv->works.fwevt_wq,
+- (void *)rtl_fwevt_wq_callback);
++ rtl_fwevt_wq_callback);
+
+ }
+
+@@ -1559,7 +1559,7 @@ void rtl_beacon_statistic(struct ieee80211_hw *hw, struct sk_buff *skb)
+ }
+ EXPORT_SYMBOL_GPL(rtl_beacon_statistic);
+
+-void rtl_watchdog_wq_callback(void *data)
++void rtl_watchdog_wq_callback(struct work_struct *data)
+ {
+ struct rtl_works *rtlworks = container_of_dwork_rtl(data,
+ struct rtl_works,
+@@ -1722,7 +1722,7 @@ void rtl_watch_dog_timer_callback(unsigned long data)
+ mod_timer(&rtlpriv->works.watchdog_timer,
+ jiffies + MSECS(RTL_WATCH_DOG_TIME));
+ }
+-void rtl_fwevt_wq_callback(void *data)
++void rtl_fwevt_wq_callback(struct work_struct *data)
+ {
+ struct rtl_works *rtlworks =
+ container_of_dwork_rtl(data, struct rtl_works, fwevt_wq);
+diff --git a/drivers/net/wireless/realtek/rtlwifi/base.h b/drivers/net/wireless/realtek/rtlwifi/base.h
+index 74233d6..482e495 100644
+--- a/drivers/net/wireless/realtek/rtlwifi/base.h
++++ b/drivers/net/wireless/realtek/rtlwifi/base.h
+@@ -134,8 +134,8 @@ int rtl_rx_agg_start(struct ieee80211_hw *hw,
+ struct ieee80211_sta *sta, u16 tid);
+ int rtl_rx_agg_stop(struct ieee80211_hw *hw,
+ struct ieee80211_sta *sta, u16 tid);
+-void rtl_watchdog_wq_callback(void *data);
+-void rtl_fwevt_wq_callback(void *data);
++void rtl_watchdog_wq_callback(struct work_struct *data);
++void rtl_fwevt_wq_callback(struct work_struct *data);
+
+ 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 7f471bf..de826f0 100644
+--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
++++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
+@@ -1100,13 +1100,16 @@ done:
+ return ret;
+ }
+
+-static void _rtl_pci_irq_tasklet(struct ieee80211_hw *hw)
++static void _rtl_pci_irq_tasklet(unsigned long _hw)
+ {
++ struct ieee80211_hw *hw = (struct ieee80211_hw *)_hw;
++
+ _rtl_pci_tx_chk_waitq(hw);
+ }
+
+-static void _rtl_pci_prepare_bcn_tasklet(struct ieee80211_hw *hw)
++static void _rtl_pci_prepare_bcn_tasklet(unsigned long _hw)
+ {
++ struct ieee80211_hw *hw = (struct ieee80211_hw *)_hw;
+ 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,
+ rtlpci->acm_method = EACMWAY2_SW;
+
+ /*task */
+- tasklet_init(&rtlpriv->works.irq_tasklet,
+- (void (*)(unsigned long))_rtl_pci_irq_tasklet,
+- (unsigned long)hw);
+- tasklet_init(&rtlpriv->works.irq_prepare_bcn_tasklet,
+- (void (*)(unsigned long))_rtl_pci_prepare_bcn_tasklet,
+- (unsigned long)hw);
++ tasklet_init(&rtlpriv->works.irq_tasklet, _rtl_pci_irq_tasklet, (unsigned long)hw);
++ tasklet_init(&rtlpriv->works.irq_prepare_bcn_tasklet, _rtl_pci_prepare_bcn_tasklet, (unsigned long)hw);
+ INIT_WORK(&rtlpriv->works.lps_change_work,
+ 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
+--- 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)
+ ppsc->swrf_processing = false;
+ }
+
+-void rtl_ips_nic_off_wq_callback(void *data)
++void rtl_ips_nic_off_wq_callback(struct work_struct *data)
+ {
+ 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)
+ spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flag);
+ }
+
+-void rtl_swlps_rfon_wq_callback(void *data)
++void rtl_swlps_rfon_wq_callback(struct work_struct *data)
+ {
+ 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)
+ }
+ EXPORT_SYMBOL_GPL(rtl_lps_change_work_callback);
+
+-void rtl_swlps_wq_callback(void *data)
++void rtl_swlps_wq_callback(struct work_struct *data)
+ {
+ struct rtl_works *rtlworks = container_of_dwork_rtl(data,
+ struct rtl_works,
+diff --git a/drivers/net/wireless/realtek/rtlwifi/ps.h b/drivers/net/wireless/realtek/rtlwifi/ps.h
+index 29dfc51..8297755 100644
+--- a/drivers/net/wireless/realtek/rtlwifi/ps.h
++++ b/drivers/net/wireless/realtek/rtlwifi/ps.h
+@@ -35,15 +35,15 @@ bool rtl_ps_enable_nic(struct ieee80211_hw *hw);
+ bool rtl_ps_disable_nic(struct ieee80211_hw *hw);
+ void rtl_ips_nic_off(struct ieee80211_hw *hw);
+ void rtl_ips_nic_on(struct ieee80211_hw *hw);
+-void rtl_ips_nic_off_wq_callback(void *data);
++void rtl_ips_nic_off_wq_callback(struct work_struct *data);
+ void rtl_lps_enter(struct ieee80211_hw *hw);
+ void rtl_lps_leave(struct ieee80211_hw *hw);
+
+ void rtl_lps_set_psmode(struct ieee80211_hw *hw, u8 rt_psmode);
+
+ void rtl_swlps_beacon(struct ieee80211_hw *hw, void *data, unsigned int len);
+-void rtl_swlps_wq_callback(void *data);
+-void rtl_swlps_rfon_wq_callback(void *data);
++void rtl_swlps_wq_callback(struct work_struct *data);
++void rtl_swlps_rfon_wq_callback(struct work_struct *data);
+ void rtl_swlps_rf_awake(struct ieee80211_hw *hw);
+ void rtl_swlps_rf_sleep(struct ieee80211_hw *hw);
+ void rtl_p2p_ps_cmd(struct ieee80211_hw *hw , u8 p2p_ps_state);
diff --git a/drivers/net/wireless/ti/wl1251/sdio.c b/drivers/net/wireless/ti/wl1251/sdio.c
index b661f896..ddf7d2b 100644
--- a/drivers/net/wireless/ti/wl1251/sdio.c
@@ -54771,10 +64907,10 @@ index b661f896..ddf7d2b 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 af0fe2e..d04986b 100644
+index a0d6ccc..93d9ac5 100644
--- a/drivers/net/wireless/ti/wl12xx/main.c
+++ b/drivers/net/wireless/ti/wl12xx/main.c
-@@ -655,7 +655,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
+@@ -656,7 +656,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
sizeof(wl->conf.mem));
/* read data preparation is only needed by wl127x */
@@ -54785,7 +64921,7 @@ index af0fe2e..d04986b 100644
wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER,
WL127X_IFTYPE_SR_VER, WL127X_MAJOR_SR_VER,
-@@ -680,7 +682,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
+@@ -681,7 +683,9 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
sizeof(wl->conf.mem));
/* read data preparation is only needed by wl127x */
@@ -54797,10 +64933,10 @@ index af0fe2e..d04986b 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 50cce42..f40cfd3 100644
+index 1bf26cc..3b15c02 100644
--- a/drivers/net/wireless/ti/wl18xx/main.c
+++ b/drivers/net/wireless/ti/wl18xx/main.c
-@@ -2005,8 +2005,10 @@ static int wl18xx_setup(struct wl1271 *wl)
+@@ -2018,8 +2018,10 @@ static int wl18xx_setup(struct wl1271 *wl)
}
if (!checksum_param) {
@@ -54813,10 +64949,445 @@ index 50cce42..f40cfd3 100644
}
/* Enable 11a Band only if we have 5G antennas */
-diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
+diff --git a/drivers/net/wireless/zydas/zd1201.c b/drivers/net/wireless/zydas/zd1201.c
+index 6f5c793..42f0dde 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)
+ }
+
+ static int zd1201_config_commit(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *data, char *essid)
++ struct iw_request_info *info, union iwreq_data *data, char *essid)
+ {
+ struct zd1201 *zd = netdev_priv(dev);
+
+@@ -899,15 +899,18 @@ static int zd1201_config_commit(struct net_device *dev,
+ }
+
+ static int zd1201_get_name(struct net_device *dev,
+- struct iw_request_info *info, char *name, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ char *name = wrqu->name;
++
+ strcpy(name, "IEEE 802.11b");
+ return 0;
+ }
+
+ static int zd1201_set_freq(struct net_device *dev,
+- struct iw_request_info *info, struct iw_freq *freq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *freq = &wrqu->freq;
+ struct zd1201 *zd = netdev_priv(dev);
+ short channel = 0;
+ int err;
+@@ -927,8 +930,9 @@ static int zd1201_set_freq(struct net_device *dev,
+ }
+
+ static int zd1201_get_freq(struct net_device *dev,
+- struct iw_request_info *info, struct iw_freq *freq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *freq = &wrqu->freq;
+ struct zd1201 *zd = netdev_priv(dev);
+ short channel;
+ int err;
+@@ -943,8 +947,9 @@ static int zd1201_get_freq(struct net_device *dev,
+ }
+
+ static int zd1201_set_mode(struct net_device *dev,
+- struct iw_request_info *info, __u32 *mode, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ __u32 *mode = &wrqu->mode;
+ struct zd1201 *zd = netdev_priv(dev);
+ short porttype, monitor = 0;
+ unsigned char buffer[IW_ESSID_MAX_SIZE+2];
+@@ -1005,8 +1010,9 @@ static int zd1201_set_mode(struct net_device *dev,
+ }
+
+ static int zd1201_get_mode(struct net_device *dev,
+- struct iw_request_info *info, __u32 *mode, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ __u32 *mode = &wrqu->mode;
+ struct zd1201 *zd = netdev_priv(dev);
+ short porttype;
+ int err;
+@@ -1042,8 +1048,9 @@ static int zd1201_get_mode(struct net_device *dev,
+ }
+
+ static int zd1201_get_range(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *wrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *wrq = &wrqu->data;
+ struct iw_range *range = (struct iw_range *)extra;
+
+ wrq->length = sizeof(struct iw_range);
+@@ -1081,8 +1088,9 @@ static int zd1201_get_range(struct net_device *dev,
+ * the stats after asking the bssid.
+ */
+ static int zd1201_get_wap(struct net_device *dev,
+- struct iw_request_info *info, struct sockaddr *ap_addr, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct sockaddr *ap_addr = &wrqu->ap_addr;
+ struct zd1201 *zd = netdev_priv(dev);
+ unsigned char buffer[6];
+
+@@ -1102,15 +1110,16 @@ static int zd1201_get_wap(struct net_device *dev,
+ }
+
+ static int zd1201_set_scan(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *srq, char *extra)
++ struct iw_request_info *info, union iwreq_data *srq, char *extra)
+ {
+ /* We do everything in get_scan */
+ return 0;
+ }
+
+ static int zd1201_get_scan(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *srq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *srq = &wrqu->data;
+ struct zd1201 *zd = netdev_priv(dev);
+ int err, i, j, enabled_save;
+ struct iw_event iwe;
+@@ -1201,8 +1210,9 @@ static int zd1201_get_scan(struct net_device *dev,
+ }
+
+ static int zd1201_set_essid(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *data, char *essid)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *essid)
+ {
++ struct iw_point *data = &wrqu->essid;
+ struct zd1201 *zd = netdev_priv(dev);
+
+ if (data->length > IW_ESSID_MAX_SIZE)
+@@ -1216,8 +1226,9 @@ static int zd1201_set_essid(struct net_device *dev,
+ }
+
+ static int zd1201_get_essid(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *data, char *essid)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *essid)
+ {
++ struct iw_point *data = &wrqu->essid;
+ struct zd1201 *zd = netdev_priv(dev);
+
+ memcpy(essid, zd->essid, zd->essidlen);
+@@ -1228,8 +1239,10 @@ static int zd1201_get_essid(struct net_device *dev,
+ }
+
+ static int zd1201_get_nick(struct net_device *dev, struct iw_request_info *info,
+- struct iw_point *data, char *nick)
++ union iwreq_data *wrqu, char *nick)
+ {
++ struct iw_point *data = &wrqu->data;
++
+ strcpy(nick, "zd1201");
+ data->flags = 1;
+ data->length = strlen(nick);
+@@ -1237,8 +1250,9 @@ static int zd1201_get_nick(struct net_device *dev, struct iw_request_info *info,
+ }
+
+ static int zd1201_set_rate(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct zd1201 *zd = netdev_priv(dev);
+ short rate;
+ int err;
+@@ -1270,8 +1284,9 @@ static int zd1201_set_rate(struct net_device *dev,
+ }
+
+ static int zd1201_get_rate(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->bitrate;
+ struct zd1201 *zd = netdev_priv(dev);
+ short rate;
+ int err;
+@@ -1303,8 +1318,9 @@ static int zd1201_get_rate(struct net_device *dev,
+ }
+
+ static int zd1201_set_rts(struct net_device *dev, struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ struct zd1201 *zd = netdev_priv(dev);
+ int err;
+ short val = rts->value;
+@@ -1323,8 +1339,9 @@ static int zd1201_set_rts(struct net_device *dev, struct iw_request_info *info,
+ }
+
+ static int zd1201_get_rts(struct net_device *dev, struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ struct zd1201 *zd = netdev_priv(dev);
+ short rtst;
+ int err;
+@@ -1340,8 +1357,9 @@ static int zd1201_get_rts(struct net_device *dev, struct iw_request_info *info,
+ }
+
+ static int zd1201_set_frag(struct net_device *dev, struct iw_request_info *info,
+- struct iw_param *frag, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *frag = &wrqu->frag;
+ struct zd1201 *zd = netdev_priv(dev);
+ int err;
+ short val = frag->value;
+@@ -1361,8 +1379,9 @@ static int zd1201_set_frag(struct net_device *dev, struct iw_request_info *info,
+ }
+
+ static int zd1201_get_frag(struct net_device *dev, struct iw_request_info *info,
+- struct iw_param *frag, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *frag = &wrqu->frag;
+ struct zd1201 *zd = netdev_priv(dev);
+ short fragt;
+ int err;
+@@ -1378,20 +1397,21 @@ static int zd1201_get_frag(struct net_device *dev, struct iw_request_info *info,
+ }
+
+ static int zd1201_set_retry(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *rrq, char *extra)
+ {
+ return 0;
+ }
+
+ static int zd1201_get_retry(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *rrq, char *extra)
+ {
+ return 0;
+ }
+
+ static int zd1201_set_encode(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *erq, char *key)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *key)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct zd1201 *zd = netdev_priv(dev);
+ short i;
+ int err, rid;
+@@ -1447,8 +1467,9 @@ static int zd1201_set_encode(struct net_device *dev,
+ }
+
+ static int zd1201_get_encode(struct net_device *dev,
+- struct iw_request_info *info, struct iw_point *erq, char *key)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *key)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct zd1201 *zd = netdev_priv(dev);
+ short i;
+ int err;
+@@ -1480,8 +1501,9 @@ static int zd1201_get_encode(struct net_device *dev,
+ }
+
+ static int zd1201_set_power(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *vwrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->power;
+ struct zd1201 *zd = netdev_priv(dev);
+ short enabled, duration, level;
+ int err;
+@@ -1519,8 +1541,9 @@ out:
+ }
+
+ static int zd1201_get_power(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *vwrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *vwrq = &wrqu->power;
+ struct zd1201 *zd = netdev_priv(dev);
+ short enabled, level, duration;
+ int err;
+@@ -1557,57 +1580,58 @@ static int zd1201_get_power(struct net_device *dev,
+
+ static const iw_handler zd1201_iw_handler[] =
+ {
+- (iw_handler) zd1201_config_commit, /* SIOCSIWCOMMIT */
+- (iw_handler) zd1201_get_name, /* SIOCGIWNAME */
+- (iw_handler) NULL, /* SIOCSIWNWID */
+- (iw_handler) NULL, /* SIOCGIWNWID */
+- (iw_handler) zd1201_set_freq, /* SIOCSIWFREQ */
+- (iw_handler) zd1201_get_freq, /* SIOCGIWFREQ */
+- (iw_handler) zd1201_set_mode, /* SIOCSIWMODE */
+- (iw_handler) zd1201_get_mode, /* SIOCGIWMODE */
+- (iw_handler) NULL, /* SIOCSIWSENS */
+- (iw_handler) NULL, /* SIOCGIWSENS */
+- (iw_handler) NULL, /* SIOCSIWRANGE */
+- (iw_handler) zd1201_get_range, /* SIOCGIWRANGE */
+- (iw_handler) NULL, /* SIOCSIWPRIV */
+- (iw_handler) NULL, /* SIOCGIWPRIV */
+- (iw_handler) NULL, /* SIOCSIWSTATS */
+- (iw_handler) NULL, /* SIOCGIWSTATS */
+- (iw_handler) NULL, /* SIOCSIWSPY */
+- (iw_handler) NULL, /* SIOCGIWSPY */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL/*zd1201_set_wap*/, /* SIOCSIWAP */
+- (iw_handler) zd1201_get_wap, /* SIOCGIWAP */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* SIOCGIWAPLIST */
+- (iw_handler) zd1201_set_scan, /* SIOCSIWSCAN */
+- (iw_handler) zd1201_get_scan, /* SIOCGIWSCAN */
+- (iw_handler) zd1201_set_essid, /* SIOCSIWESSID */
+- (iw_handler) zd1201_get_essid, /* SIOCGIWESSID */
+- (iw_handler) NULL, /* SIOCSIWNICKN */
+- (iw_handler) zd1201_get_nick, /* SIOCGIWNICKN */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) NULL, /* -- hole -- */
+- (iw_handler) zd1201_set_rate, /* SIOCSIWRATE */
+- (iw_handler) zd1201_get_rate, /* SIOCGIWRATE */
+- (iw_handler) zd1201_set_rts, /* SIOCSIWRTS */
+- (iw_handler) zd1201_get_rts, /* SIOCGIWRTS */
+- (iw_handler) zd1201_set_frag, /* SIOCSIWFRAG */
+- (iw_handler) zd1201_get_frag, /* SIOCGIWFRAG */
+- (iw_handler) NULL, /* SIOCSIWTXPOW */
+- (iw_handler) NULL, /* SIOCGIWTXPOW */
+- (iw_handler) zd1201_set_retry, /* SIOCSIWRETRY */
+- (iw_handler) zd1201_get_retry, /* SIOCGIWRETRY */
+- (iw_handler) zd1201_set_encode, /* SIOCSIWENCODE */
+- (iw_handler) zd1201_get_encode, /* SIOCGIWENCODE */
+- (iw_handler) zd1201_set_power, /* SIOCSIWPOWER */
+- (iw_handler) zd1201_get_power, /* SIOCGIWPOWER */
++ zd1201_config_commit, /* SIOCSIWCOMMIT */
++ zd1201_get_name, /* SIOCGIWNAME */
++ NULL, /* SIOCSIWNWID */
++ NULL, /* SIOCGIWNWID */
++ zd1201_set_freq, /* SIOCSIWFREQ */
++ zd1201_get_freq, /* SIOCGIWFREQ */
++ zd1201_set_mode, /* SIOCSIWMODE */
++ zd1201_get_mode, /* SIOCGIWMODE */
++ NULL, /* SIOCSIWSENS */
++ NULL, /* SIOCGIWSENS */
++ NULL, /* SIOCSIWRANGE */
++ zd1201_get_range, /* SIOCGIWRANGE */
++ NULL, /* SIOCSIWPRIV */
++ NULL, /* SIOCGIWPRIV */
++ NULL, /* SIOCSIWSTATS */
++ NULL, /* SIOCGIWSTATS */
++ NULL, /* SIOCSIWSPY */
++ NULL, /* SIOCGIWSPY */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ NULL/*zd1201_set_wap*/, /* SIOCSIWAP */
++ zd1201_get_wap, /* SIOCGIWAP */
++ NULL, /* -- hole -- */
++ NULL, /* SIOCGIWAPLIST */
++ zd1201_set_scan, /* SIOCSIWSCAN */
++ zd1201_get_scan, /* SIOCGIWSCAN */
++ zd1201_set_essid, /* SIOCSIWESSID */
++ zd1201_get_essid, /* SIOCGIWESSID */
++ NULL, /* SIOCSIWNICKN */
++ zd1201_get_nick, /* SIOCGIWNICKN */
++ NULL, /* -- hole -- */
++ NULL, /* -- hole -- */
++ zd1201_set_rate, /* SIOCSIWRATE */
++ zd1201_get_rate, /* SIOCGIWRATE */
++ zd1201_set_rts, /* SIOCSIWRTS */
++ zd1201_get_rts, /* SIOCGIWRTS */
++ zd1201_set_frag, /* SIOCSIWFRAG */
++ zd1201_get_frag, /* SIOCGIWFRAG */
++ NULL, /* SIOCSIWTXPOW */
++ NULL, /* SIOCGIWTXPOW */
++ zd1201_set_retry, /* SIOCSIWRETRY */
++ zd1201_get_retry, /* SIOCGIWRETRY */
++ zd1201_set_encode, /* SIOCSIWENCODE */
++ zd1201_get_encode, /* SIOCGIWENCODE */
++ zd1201_set_power, /* SIOCSIWPOWER */
++ zd1201_get_power, /* SIOCGIWPOWER */
+ };
+
+ static int zd1201_set_hostauth(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->param;
+ struct zd1201 *zd = netdev_priv(dev);
+
+ if (!zd->ap)
+@@ -1617,8 +1641,9 @@ static int zd1201_set_hostauth(struct net_device *dev,
+ }
+
+ static int zd1201_get_hostauth(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->param;
+ struct zd1201 *zd = netdev_priv(dev);
+ short hostauth;
+ int err;
+@@ -1636,8 +1661,9 @@ static int zd1201_get_hostauth(struct net_device *dev,
+ }
+
+ static int zd1201_auth_sta(struct net_device *dev,
+- struct iw_request_info *info, struct sockaddr *sta, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct sockaddr *sta = &wrqu->addr;
+ struct zd1201 *zd = netdev_priv(dev);
+ unsigned char buffer[10];
+
+@@ -1652,8 +1678,9 @@ static int zd1201_auth_sta(struct net_device *dev,
+ }
+
+ static int zd1201_set_maxassoc(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->param;
+ struct zd1201 *zd = netdev_priv(dev);
+ int err;
+
+@@ -1667,8 +1694,9 @@ static int zd1201_set_maxassoc(struct net_device *dev,
+ }
+
+ static int zd1201_get_maxassoc(struct net_device *dev,
+- struct iw_request_info *info, struct iw_param *rrq, char *extra)
++ struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rrq = &wrqu->param;
+ struct zd1201 *zd = netdev_priv(dev);
+ short maxassoc;
+ int err;
+@@ -1686,12 +1714,12 @@ static int zd1201_get_maxassoc(struct net_device *dev,
+ }
+
+ static const iw_handler zd1201_private_handler[] = {
+- (iw_handler) zd1201_set_hostauth, /* ZD1201SIWHOSTAUTH */
+- (iw_handler) zd1201_get_hostauth, /* ZD1201GIWHOSTAUTH */
+- (iw_handler) zd1201_auth_sta, /* ZD1201SIWAUTHSTA */
+- (iw_handler) NULL, /* nothing to get */
+- (iw_handler) zd1201_set_maxassoc, /* ZD1201SIMAXASSOC */
+- (iw_handler) zd1201_get_maxassoc, /* ZD1201GIMAXASSOC */
++ zd1201_set_hostauth, /* ZD1201SIWHOSTAUTH */
++ zd1201_get_hostauth, /* ZD1201GIWHOSTAUTH */
++ zd1201_auth_sta, /* ZD1201SIWAUTHSTA */
++ NULL, /* nothing to get */
++ zd1201_set_maxassoc, /* ZD1201SIMAXASSOC */
++ zd1201_get_maxassoc, /* ZD1201GIMAXASSOC */
+ };
+
+ static const struct iw_priv_args zd1201_private_args[] = {
+diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
index a912dc0..a8225ba 100644
---- a/drivers/net/wireless/zd1211rw/zd_usb.c
-+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
+--- a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
++++ b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
@@ -385,7 +385,7 @@ static inline void handle_regs_int(struct urb *urb)
{
struct zd_usb *usb = urb->context;
@@ -54826,6 +65397,19 @@ index a912dc0..a8225ba 100644
u16 int_num;
ZD_ASSERT(in_interrupt());
+diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
+index 680f578..cf80097 100644
+--- a/drivers/nvme/host/pci.c
++++ b/drivers/nvme/host/pci.c
+@@ -2183,7 +2183,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,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct nvme_dev *dev = pci_get_drvdata(pdev);
+
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 655f79d..509e3cd 100644
--- a/drivers/of/fdt.c
@@ -54949,20 +65533,9 @@ index 1fc622b..8c48fc3 100644
extern struct oprofile_stat_struct oprofile_stats;
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c
-index dd92c5e..dfc04b5 100644
+index b48ac630..df1b012 100644
--- a/drivers/oprofile/oprofilefs.c
+++ b/drivers/oprofile/oprofilefs.c
-@@ -176,8 +176,8 @@ int oprofilefs_create_ro_ulong(struct dentry *root,
-
- static ssize_t atomic_read_file(struct file *file, char __user *buf, size_t count, loff_t *offset)
- {
-- atomic_t *val = file->private_data;
-- return oprofilefs_ulong_to_user(atomic_read(val), buf, count, offset);
-+ atomic_unchecked_t *val = file->private_data;
-+ return oprofilefs_ulong_to_user(atomic_read_unchecked(val), buf, count, offset);
- }
-
-
@@ -189,7 +189,7 @@ static const struct file_operations atomic_ro_fops = {
@@ -55008,7 +65581,7 @@ index c776333..aa6b325 100644
#endif /* IEEE1284.3 support. */
diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c
-index 5434c90..c7f4ead 100644
+index 1652bc7..4f999c4 100644
--- a/drivers/pci/host/pci-host-generic.c
+++ b/drivers/pci/host/pci-host-generic.c
@@ -28,7 +28,7 @@
@@ -55021,10 +65594,10 @@ index 5434c90..c7f4ead 100644
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 6ca2399..68d866b 100644
+index 2f6d3a1..5bc1bf1 100644
--- a/drivers/pci/hotplug/acpiphp_ibm.c
+++ b/drivers/pci/hotplug/acpiphp_ibm.c
-@@ -452,7 +452,9 @@ static int __init ibm_acpiphp_init(void)
+@@ -463,7 +463,9 @@ static int __init ibm_acpiphp_init(void)
goto init_cleanup;
}
@@ -55036,7 +65609,7 @@ index 6ca2399..68d866b 100644
return retval;
diff --git a/drivers/pci/hotplug/cpcihp_generic.c b/drivers/pci/hotplug/cpcihp_generic.c
-index 66b7bbe..26bee78 100644
+index 88a44a7..de358ce 100644
--- a/drivers/pci/hotplug/cpcihp_generic.c
+++ b/drivers/pci/hotplug/cpcihp_generic.c
@@ -73,7 +73,6 @@ static u16 port;
@@ -55061,13 +65634,13 @@ index 66b7bbe..26bee78 100644
@@ -165,7 +168,6 @@ static int __init cpcihp_generic_init(void)
pci_dev_put(dev);
- memset(&generic_hpc, 0, sizeof (struct cpci_hp_controller));
+ memset(&generic_hpc, 0, sizeof(struct cpci_hp_controller));
- generic_hpc_ops.query_enum = query_enum;
generic_hpc.ops = &generic_hpc_ops;
status = cpci_hp_register_controller(&generic_hpc);
diff --git a/drivers/pci/hotplug/cpcihp_zt5550.c b/drivers/pci/hotplug/cpcihp_zt5550.c
-index 7ecf34e..effed62 100644
+index 5f49c3f..989cd41 100644
--- a/drivers/pci/hotplug/cpcihp_zt5550.c
+++ b/drivers/pci/hotplug/cpcihp_zt5550.c
@@ -59,7 +59,6 @@
@@ -55086,13 +65659,13 @@ index 7ecf34e..effed62 100644
+ .query_enum = zt5550_hc_query_enum,
+};
+
- static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
+ static int zt5550_hc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
{
int status;
-@@ -215,16 +218,17 @@ static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id
+@@ -215,16 +218,17 @@ static int zt5550_hc_init_one(struct pci_dev *pdev, const struct pci_device_id *
dbg("returned from zt5550_hc_config");
- memset(&zt5550_hpc, 0, sizeof (struct cpci_hp_controller));
+ memset(&zt5550_hpc, 0, sizeof(struct cpci_hp_controller));
- zt5550_hpc_ops.query_enum = zt5550_hc_query_enum;
zt5550_hpc.ops = &zt5550_hpc_ops;
if (!poll) {
@@ -55112,12 +65685,12 @@ index 7ecf34e..effed62 100644
info("using ENUM# polling mode");
}
diff --git a/drivers/pci/hotplug/cpqphp_nvram.c b/drivers/pci/hotplug/cpqphp_nvram.c
-index 1e08ff8c..3cd145f 100644
+index c25fc90..b054774 100644
--- a/drivers/pci/hotplug/cpqphp_nvram.c
+++ b/drivers/pci/hotplug/cpqphp_nvram.c
-@@ -425,8 +425,10 @@ static u32 store_HRT (void __iomem *rom_start)
+@@ -425,8 +425,10 @@ static u32 store_HRT(void __iomem *rom_start)
- void compaq_nvram_init (void __iomem *rom_start)
+ void compaq_nvram_init(void __iomem *rom_start)
{
+#ifndef CONFIG_PAX_KERNEXEC
if (rom_start)
@@ -55127,10 +65700,10 @@ index 1e08ff8c..3cd145f 100644
dbg("int15 entry = %p\n", compaq_int15_entry_point);
diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c
-index d1fab97..71d04bf 100644
+index 9acd199..0645a09 100644
--- a/drivers/pci/hotplug/pci_hotplug_core.c
+++ b/drivers/pci/hotplug/pci_hotplug_core.c
-@@ -436,8 +436,10 @@ int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *bus,
+@@ -434,8 +434,10 @@ int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *bus,
return -EINVAL;
}
@@ -55144,7 +65717,7 @@ index d1fab97..71d04bf 100644
mutex_lock(&pci_hp_mutex);
/*
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c
-index 612b21a..9494a5e 100644
+index ac531e6..716d058 100644
--- a/drivers/pci/hotplug/pciehp_core.c
+++ b/drivers/pci/hotplug/pciehp_core.c
@@ -87,7 +87,7 @@ static int init_slot(struct controller *ctrl)
@@ -55157,10 +65730,10 @@ index 612b21a..9494a5e 100644
int retval = -ENOMEM;
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
-index 7eaa4c8..b858f21 100644
+index a080f44..9ff42d9 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
-@@ -472,8 +472,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev)
+@@ -474,8 +474,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev)
{
struct attribute **msi_attrs;
struct attribute *msi_attr;
@@ -55171,7 +65744,7 @@ index 7eaa4c8..b858f21 100644
const struct attribute_group **msi_irq_groups;
struct msi_desc *entry;
int ret = -ENOMEM;
-@@ -535,7 +535,7 @@ error_attrs:
+@@ -537,7 +537,7 @@ error_attrs:
count = 0;
msi_attr = msi_attrs[count];
while (msi_attr) {
@@ -55180,7 +65753,7 @@ index 7eaa4c8..b858f21 100644
kfree(msi_attr->name);
kfree(msi_dev_attr);
++count;
-@@ -1234,12 +1234,14 @@ static void pci_msi_domain_update_dom_ops(struct msi_domain_info *info)
+@@ -1233,12 +1233,14 @@ static void pci_msi_domain_update_dom_ops(struct msi_domain_info *info)
if (ops == NULL) {
info->ops = &pci_msi_domain_ops_default;
} else {
@@ -55198,7 +65771,7 @@ index 7eaa4c8..b858f21 100644
}
}
-@@ -1248,12 +1250,14 @@ static void pci_msi_domain_update_chip_ops(struct msi_domain_info *info)
+@@ -1247,12 +1249,14 @@ static void pci_msi_domain_update_chip_ops(struct msi_domain_info *info)
struct irq_chip *chip = info->chip;
BUG_ON(!chip);
@@ -55217,10 +65790,10 @@ index 7eaa4c8..b858f21 100644
/**
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
-index eead54c..a611b6c 100644
+index 95d9e7b..f0ad49e 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
-@@ -1143,7 +1143,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
+@@ -1133,7 +1133,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;
@@ -55229,7 +65802,7 @@ index eead54c..a611b6c 100644
int retval;
res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC);
-@@ -1320,7 +1320,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor
+@@ -1310,7 +1310,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;
@@ -55238,7 +65811,7 @@ index eead54c..a611b6c 100644
/* If the device has VPD, try to expose it in sysfs. */
if (dev->vpd) {
-@@ -1367,7 +1367,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
+@@ -1357,7 +1357,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
{
int retval;
int rom_size = 0;
@@ -55248,7 +65821,7 @@ index eead54c..a611b6c 100644
if (!sysfs_initialized)
return -EACCES;
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
-index d390fc1..d410fda 100644
+index 9a1660f..278d340 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -103,7 +103,7 @@ struct pci_vpd_ops {
@@ -55260,8 +65833,17 @@ index d390fc1..d410fda 100644
};
int pci_vpd_pci22_init(struct pci_dev *dev);
+@@ -302,7 +302,7 @@ static inline int pci_iov_bus_range(struct pci_bus *bus)
+
+ #endif /* CONFIG_PCI_IOV */
+
+-unsigned long pci_cardbus_resource_alignment(struct resource *);
++unsigned long pci_cardbus_resource_alignment(const struct resource *);
+
+ static inline resource_size_t pci_resource_alignment(struct pci_dev *dev,
+ struct resource *res)
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
-index 317e355..21f7b91 100644
+index 2dfe7fd..61f8677 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -27,9 +27,9 @@
@@ -55277,6 +65859,24 @@ index 317e355..21f7b91 100644
#define ASPM_STATE_L0S (ASPM_STATE_L0S_UP | ASPM_STATE_L0S_DW)
#define ASPM_STATE_ALL (ASPM_STATE_L0S | ASPM_STATE_L1)
+@@ -775,7 +775,7 @@ void pci_disable_link_state(struct pci_dev *pdev, int state)
+ }
+ EXPORT_SYMBOL(pci_disable_link_state);
+
+-static int pcie_aspm_set_policy(const char *val, struct kernel_param *kp)
++static int pcie_aspm_set_policy(const char *val, const struct kernel_param *kp)
+ {
+ int i;
+ struct pcie_link_state *link;
+@@ -802,7 +802,7 @@ static int pcie_aspm_set_policy(const char *val, struct kernel_param *kp)
+ return 0;
+ }
+
+-static int pcie_aspm_get_policy(char *buffer, struct kernel_param *kp)
++static int pcie_aspm_get_policy(char *buffer, const struct kernel_param *kp)
+ {
+ int i, cnt = 0;
+ for (i = 0; i < ARRAY_SIZE(policy_str); i++)
diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
index be35da2..ec16cdb 100644
--- a/drivers/pci/pcie/portdrv_pci.c
@@ -55291,7 +65891,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 7aafb5f..8fbfd44 100644
+index 6b0056e..c8105d5 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -182,7 +182,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
@@ -55324,11 +65924,24 @@ index 3f155e7..0f4b1f0 100644
proc_create("devices", 0, proc_bus_pci_dir,
&proc_bus_pci_dev_operations);
proc_initialized = 1;
+diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
+index 7796d0a..c83b0ae 100644
+--- a/drivers/pci/setup-bus.c
++++ b/drivers/pci/setup-bus.c
+@@ -1115,7 +1115,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
+ return 0;
+ }
+
+-unsigned long pci_cardbus_resource_alignment(struct resource *res)
++unsigned long pci_cardbus_resource_alignment(const struct resource *res)
+ {
+ 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 f844b4a..5e43134 100644
+index c8969dd..4764267 100644
--- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
+++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
-@@ -1212,7 +1212,7 @@ static int nmk_gpio_probe(struct platform_device *dev)
+@@ -1207,7 +1207,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;
@@ -55338,7 +65951,7 @@ index f844b4a..5e43134 100644
bool supports_sleepmode;
int irq;
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
-index 0d2fc0c..6f9ff62 100644
+index 523b6b7..e9aa88d 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -24,6 +24,7 @@
@@ -55349,7 +65962,7 @@ index 0d2fc0c..6f9ff62 100644
#include "pinctrl-at91.h"
#include "core.h"
-@@ -1613,7 +1614,9 @@ static int at91_gpio_of_irq_setup(struct platform_device *pdev,
+@@ -1609,7 +1610,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 */
@@ -55395,11 +66008,24 @@ index 1e1e594..8fe59c5 100644
.name = "rgb_zones",
};
+diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c
+index f236250..6b4d0a9 100644
+--- a/drivers/platform/x86/apple-gmux.c
++++ b/drivers/platform/x86/apple-gmux.c
+@@ -425,7 +425,7 @@ static int gmux_set_power_state(enum vga_switcheroo_client_id id,
+ return gmux_set_discrete_state(apple_gmux_data, state);
+ }
+
+-static int gmux_get_client_id(struct pci_dev *pdev)
++static enum vga_switcheroo_client_id gmux_get_client_id(struct pci_dev *pdev)
+ {
+ /*
+ * 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 f96f7b8..2d17b99 100644
+index a96630d..0fe8410 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1870,6 +1870,10 @@ static int show_dsts(struct seq_file *m, void *data)
+@@ -1867,6 +1867,10 @@ static int show_dsts(struct seq_file *m, void *data)
int err;
u32 retval = -1;
@@ -55410,7 +66036,7 @@ index f96f7b8..2d17b99 100644
err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
if (err < 0)
-@@ -1886,6 +1890,10 @@ static int show_devs(struct seq_file *m, void *data)
+@@ -1883,6 +1887,10 @@ static int show_devs(struct seq_file *m, void *data)
int err;
u32 retval = -1;
@@ -55421,7 +66047,7 @@ index f96f7b8..2d17b99 100644
err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
&retval);
-@@ -1910,6 +1918,10 @@ static int show_call(struct seq_file *m, void *data)
+@@ -1907,6 +1915,10 @@ static int show_call(struct seq_file *m, void *data)
union acpi_object *obj;
acpi_status status;
@@ -55558,10 +66184,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 f73c295..711e2f4 100644
+index e9caa34..72ed655 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
-@@ -2528,7 +2528,7 @@ static void sony_nc_gfx_switch_cleanup(struct platform_device *pd)
+@@ -2553,7 +2553,7 @@ static void sony_nc_gfx_switch_cleanup(struct platform_device *pd)
}
/* High speed charging function */
@@ -55570,7 +66196,7 @@ index f73c295..711e2f4 100644
static ssize_t sony_nc_highspeed_charging_store(struct device *dev,
struct device_attribute *attr,
-@@ -2602,7 +2602,7 @@ static void sony_nc_highspeed_charging_cleanup(struct platform_device *pd)
+@@ -2627,7 +2627,7 @@ static void sony_nc_highspeed_charging_cleanup(struct platform_device *pd)
}
/* low battery function */
@@ -55579,7 +66205,7 @@ index f73c295..711e2f4 100644
static ssize_t sony_nc_lowbatt_store(struct device *dev,
struct device_attribute *attr,
-@@ -2668,7 +2668,7 @@ static void sony_nc_lowbatt_cleanup(struct platform_device *pd)
+@@ -2693,7 +2693,7 @@ static void sony_nc_lowbatt_cleanup(struct platform_device *pd)
}
/* fan speed function */
@@ -55588,7 +66214,7 @@ index f73c295..711e2f4 100644
static ssize_t sony_nc_hsfan_store(struct device *dev,
struct device_attribute *attr,
-@@ -2775,7 +2775,7 @@ static void sony_nc_fanspeed_cleanup(struct platform_device *pd)
+@@ -2800,7 +2800,7 @@ static void sony_nc_fanspeed_cleanup(struct platform_device *pd)
}
/* USB charge function */
@@ -55597,7 +66223,7 @@ index f73c295..711e2f4 100644
static ssize_t sony_nc_usb_charge_store(struct device *dev,
struct device_attribute *attr,
-@@ -2849,7 +2849,7 @@ static void sony_nc_usb_charge_cleanup(struct platform_device *pd)
+@@ -2874,7 +2874,7 @@ static void sony_nc_usb_charge_cleanup(struct platform_device *pd)
}
/* Panel ID function */
@@ -55606,7 +66232,7 @@ index f73c295..711e2f4 100644
static ssize_t sony_nc_panelid_show(struct device *dev,
struct device_attribute *attr, char *buffer)
-@@ -2896,7 +2896,7 @@ static void sony_nc_panelid_cleanup(struct platform_device *pd)
+@@ -2921,7 +2921,7 @@ static void sony_nc_panelid_cleanup(struct platform_device *pd)
}
/* smart connect function */
@@ -55615,7 +66241,7 @@ index f73c295..711e2f4 100644
static ssize_t sony_nc_smart_conn_store(struct device *dev,
struct device_attribute *attr,
-@@ -4852,7 +4852,7 @@ static struct acpi_driver sony_pic_driver = {
+@@ -4877,7 +4877,7 @@ static struct acpi_driver sony_pic_driver = {
.drv.pm = &sony_pic_pm,
};
@@ -55625,10 +66251,10 @@ index f73c295..711e2f4 100644
.ident = "Sony Vaio",
.matches = {
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
-index 0bed473..c867ae2 100644
+index a268a7a..67a0be4 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
-@@ -2460,10 +2460,10 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn,
+@@ -2461,10 +2461,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);
}
@@ -55640,6 +66266,50 @@ index 0bed473..c867ae2 100644
/*
* Polling driver
+@@ -4164,7 +4164,7 @@ static int bluetooth_get_status(void)
+ TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF;
+ }
+
+-static int bluetooth_set_status(enum tpacpi_rfkill_state state)
++static int bluetooth_set_status(const enum tpacpi_rfkill_state state)
+ {
+ int status;
+
+@@ -4221,6 +4221,7 @@ static const struct attribute_group bluetooth_attr_group = {
+ .attrs = bluetooth_attributes,
+ };
+
++const struct tpacpi_rfk_ops bluetooth_tprfk_ops_;
+ static const struct tpacpi_rfk_ops bluetooth_tprfk_ops = {
+ .get_status = bluetooth_get_status,
+ .set_status = bluetooth_set_status,
+@@ -4352,7 +4353,7 @@ static int wan_get_status(void)
+ TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF;
+ }
+
+-static int wan_set_status(enum tpacpi_rfkill_state state)
++static int wan_set_status(const enum tpacpi_rfkill_state state)
+ {
+ int status;
+
+@@ -4538,7 +4539,7 @@ static int uwb_get_status(void)
+ TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF;
+ }
+
+-static int uwb_set_status(enum tpacpi_rfkill_state state)
++static int uwb_set_status(const enum tpacpi_rfkill_state state)
+ {
+ int status;
+
+@@ -9450,7 +9451,7 @@ static struct ibm_init_struct ibms_init[] __initdata = {
+ },
+ };
+
+-static int __init set_ibm_param(const char *val, struct kernel_param *kp)
++static int __init set_ibm_param(const char *val, const struct kernel_param *kp)
+ {
+ unsigned int i;
+ struct ibm_struct *ibm;
diff --git a/drivers/pnp/pnpbios/bioscalls.c b/drivers/pnp/pnpbios/bioscalls.c
index 438d4c7..ca8a2fb 100644
--- a/drivers/pnp/pnpbios/bioscalls.c
@@ -55807,7 +66477,7 @@ index ed2d7fd..266b28f 100644
__power_supply_attrs[i] = &power_supply_attrs[i].attr;
}
diff --git a/drivers/power/reset/at91-reset.c b/drivers/power/reset/at91-reset.c
-index 3f6b5dd..02c9986 100644
+index 1b5d450..3257054 100644
--- a/drivers/power/reset/at91-reset.c
+++ b/drivers/power/reset/at91-reset.c
@@ -17,6 +17,7 @@
@@ -55818,7 +66488,7 @@ index 3f6b5dd..02c9986 100644
#include <soc/at91/at91sam9_ddrsdr.h>
#include <soc/at91/at91sam9_sdramc.h>
-@@ -205,7 +206,9 @@ static int __init at91_reset_probe(struct platform_device *pdev)
+@@ -206,7 +207,9 @@ static int __init at91_reset_probe(struct platform_device *pdev)
}
match = of_match_node(at91_reset_of_match, pdev->dev.of_node);
@@ -55830,7 +66500,7 @@ index 3f6b5dd..02c9986 100644
sclk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(sclk))
diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c
-index 84419af..268ede8 100644
+index 14bde0d..89f2669 100644
--- a/drivers/powercap/powercap_sys.c
+++ b/drivers/powercap/powercap_sys.c
@@ -154,8 +154,77 @@ struct powercap_constraint_attr {
@@ -56045,10 +66715,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 7b94b8e..1b35017 100644
+index 744c988..a269ffb 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
-@@ -3842,7 +3842,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+@@ -3839,7 +3839,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;
@@ -56057,7 +66727,7 @@ index 7b94b8e..1b35017 100644
struct regulator_dev *rdev;
struct device *dev;
int ret, i;
-@@ -3925,7 +3925,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+@@ -3922,7 +3922,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",
@@ -56137,6 +66807,96 @@ index 0d17c92..a29f627 100644
mc13892_regulators[MC13892_VCAM].desc.ops = &mc13892_vcam_ops;
mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13892_regulators,
+diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
+index 9e03d15..36e341c 100644
+--- a/drivers/remoteproc/remoteproc_core.c
++++ b/drivers/remoteproc/remoteproc_core.c
+@@ -327,9 +327,10 @@ void rproc_free_vring(struct rproc_vring *rvring)
+ *
+ * Returns 0 on success, or an appropriate error code otherwise
+ */
+-static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
++static int rproc_handle_vdev(struct rproc *rproc, void *_rsc,
+ int offset, int avail)
+ {
++ struct fw_rsc_vdev *rsc = _rsc;
+ struct device *dev = &rproc->dev;
+ struct rproc_vdev *rvdev;
+ int i, ret;
+@@ -404,9 +405,10 @@ free_rvdev:
+ *
+ * Returns 0 on success, or an appropriate error code otherwise
+ */
+-static int rproc_handle_trace(struct rproc *rproc, struct fw_rsc_trace *rsc,
++static int rproc_handle_trace(struct rproc *rproc, void *_rsc,
+ int offset, int avail)
+ {
++ struct fw_rsc_trace *rsc = _rsc;
+ 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,
+ * and not allow firmwares to request access to physical addresses that
+ * are outside those ranges.
+ */
+-static int rproc_handle_devmem(struct rproc *rproc, struct fw_rsc_devmem *rsc,
++static int rproc_handle_devmem(struct rproc *rproc, void *_rsc,
+ int offset, int avail)
+ {
++ struct fw_rsc_devmem *rsc = _rsc;
+ struct rproc_mem_entry *mapping;
+ struct device *dev = &rproc->dev;
+ int ret;
+@@ -556,10 +559,11 @@ out:
+ * pressure is important; it may have a substantial impact on performance.
+ */
+ static int rproc_handle_carveout(struct rproc *rproc,
+- struct fw_rsc_carveout *rsc,
++ void *_rsc,
+ int offset, int avail)
+
+ {
++ struct fw_rsc_carveout *rsc = _rsc;
+ struct rproc_mem_entry *carveout, *mapping;
+ struct device *dev = &rproc->dev;
+ dma_addr_t dma;
+@@ -678,9 +682,11 @@ free_carv:
+ return ret;
+ }
+
+-static int rproc_count_vrings(struct rproc *rproc, struct fw_rsc_vdev *rsc,
++static int rproc_count_vrings(struct rproc *rproc, void *_rsc,
+ int offset, int avail)
+ {
++ struct fw_rsc_vdev *rsc = _rsc;
++
+ /* 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,
+ * enum fw_resource_type.
+ */
+ static rproc_handle_resource_t rproc_loading_handlers[RSC_LAST] = {
+- [RSC_CARVEOUT] = (rproc_handle_resource_t)rproc_handle_carveout,
+- [RSC_DEVMEM] = (rproc_handle_resource_t)rproc_handle_devmem,
+- [RSC_TRACE] = (rproc_handle_resource_t)rproc_handle_trace,
++ [RSC_CARVEOUT] = rproc_handle_carveout,
++ [RSC_DEVMEM] = rproc_handle_devmem,
++ [RSC_TRACE] = rproc_handle_trace,
+ [RSC_VDEV] = NULL, /* VDEVs were handled upon registrarion */
+ };
+
+ static rproc_handle_resource_t rproc_vdev_handler[RSC_LAST] = {
+- [RSC_VDEV] = (rproc_handle_resource_t)rproc_handle_vdev,
++ [RSC_VDEV] = rproc_handle_vdev,
+ };
+
+ static rproc_handle_resource_t rproc_count_vrings_handler[RSC_LAST] = {
+- [RSC_VDEV] = (rproc_handle_resource_t)rproc_count_vrings,
++ [RSC_VDEV] = rproc_count_vrings,
+ };
+
+ /* handle firmware resource entries before booting the remote processor */
diff --git a/drivers/rtc/rtc-armada38x.c b/drivers/rtc/rtc-armada38x.c
index 9a3f2a6..604f463 100644
--- a/drivers/rtc/rtc-armada38x.c
@@ -56163,7 +66923,7 @@ index 9a3f2a6..604f463 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 8f7034b..2ddd4b3 100644
+index 84fb541..fee0421a 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)
@@ -56199,7 +66959,7 @@ index a6d9434..dc26b71 100644
case RTC_PIE_ON:
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
-index aa705bb..629dbb4 100644
+index cf685f6..2311b8f 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -107,7 +107,7 @@ struct ds1307 {
@@ -56227,7 +66987,7 @@ index d99a705..f8ebd79 100644
ret = sysfs_create_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr);
if (ret)
diff --git a/drivers/rtc/rtc-rv8803.c b/drivers/rtc/rtc-rv8803.c
-index e7329e2..6160c59 100644
+index 7155c08..10ba718 100644
--- a/drivers/rtc/rtc-rv8803.c
+++ b/drivers/rtc/rtc-rv8803.c
@@ -423,6 +423,15 @@ static struct rtc_class_ops rv8803_rtc_ops = {
@@ -56263,6 +67023,25 @@ index e7329e2..6160c59 100644
if (IS_ERR(rv8803->rtc)) {
dev_err(&client->dev, "unable to register the class device\n");
return PTR_ERR(rv8803->rtc);
+diff --git a/drivers/rtc/rtc-rx8010.c b/drivers/rtc/rtc-rx8010.c
+index 772d221..60e31aa 100644
+--- a/drivers/rtc/rtc-rx8010.c
++++ b/drivers/rtc/rtc-rx8010.c
+@@ -489,9 +489,11 @@ static int rx8010_probe(struct i2c_client *client,
+ dev_err(&client->dev, "unable to request IRQ\n");
+ client->irq = 0;
+ } else {
+- rx8010_rtc_ops.read_alarm = rx8010_read_alarm;
+- rx8010_rtc_ops.set_alarm = rx8010_set_alarm;
+- rx8010_rtc_ops.alarm_irq_enable = rx8010_alarm_irq_enable;
++ pax_open_kernel();
++ *(void **)&rx8010_rtc_ops.read_alarm = rx8010_read_alarm;
++ *(void **)&rx8010_rtc_ops.set_alarm = rx8010_set_alarm;
++ *(void **)&rx8010_rtc_ops.alarm_irq_enable = rx8010_alarm_irq_enable;
++ pax_close_kernel();
+ }
+ }
+
diff --git a/drivers/rtc/rtc-test.c b/drivers/rtc/rtc-test.c
index 3a2da4c..e88493c 100644
--- a/drivers/rtc/rtc-test.c
@@ -56280,11 +67059,328 @@ index 3a2da4c..e88493c 100644
}
rtc = devm_rtc_device_register(&plat_dev->dev, "test",
+diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
+index e4c2437..2297164 100644
+--- a/drivers/scsi/aacraid/aachba.c
++++ b/drivers/scsi/aacraid/aachba.c
+@@ -647,7 +647,7 @@ static void _aac_probe_container2(void * context, struct fib * fibptr)
+ }
+ aac_fib_complete(fibptr);
+ aac_fib_free(fibptr);
+- callback = (int (*)(struct scsi_cmnd *))(scsicmd->SCp.ptr);
++ callback = scsicmd->SCp.ptr;
+ scsicmd->SCp.ptr = NULL;
+ (*callback)(scsicmd);
+ return;
+@@ -726,7 +726,7 @@ static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(stru
+
+ dinfo->count = cpu_to_le32(scmd_id(scsicmd));
+ dinfo->type = cpu_to_le32(FT_FILESYS);
+- scsicmd->SCp.ptr = (char *)callback;
++ scsicmd->SCp.ptr = callback;
+
+ status = aac_fib_send(ContainerCommand,
+ fibptr,
+@@ -775,6 +775,11 @@ static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd)
+ return 0;
+ }
+
++static void aac_probe_container_scsi_done(struct scsi_cmnd * scsicmd)
++{
++ scsicmd->device = NULL;
++}
++
+ int aac_probe_container(struct aac_dev *dev, int cid)
+ {
+ struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL);
+@@ -787,7 +792,7 @@ int aac_probe_container(struct aac_dev *dev, int cid)
+ return -ENOMEM;
+ }
+ scsicmd->list.next = NULL;
+- scsicmd->scsi_done = (void (*)(struct scsi_cmnd*))aac_probe_container_callback1;
++ scsicmd->scsi_done = aac_probe_container_scsi_done;
+
+ scsicmd->device = scsidev;
+ scsidev->sdev_state = 0;
+diff --git a/drivers/scsi/aic7xxx/aic79xx.h b/drivers/scsi/aic7xxx/aic79xx.h
+index d47b527..f2c4a89 100644
+--- a/drivers/scsi/aic7xxx/aic79xx.h
++++ b/drivers/scsi/aic7xxx/aic79xx.h
+@@ -1046,7 +1046,7 @@ typedef enum {
+
+ typedef uint8_t ahd_mode_state;
+
+-typedef void ahd_callback_t (void *);
++typedef void ahd_linux_callback_t (u_long);
+
+ struct ahd_completion
+ {
+diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
+index 109e2c9..7d3c9b5 100644
+--- a/drivers/scsi/aic7xxx/aic79xx_core.c
++++ b/drivers/scsi/aic7xxx/aic79xx_core.c
+@@ -207,7 +207,7 @@ static void ahd_add_scb_to_free_list(struct ahd_softc *ahd,
+ static u_int ahd_rem_wscb(struct ahd_softc *ahd, u_int scbid,
+ u_int prev, u_int next, u_int tid);
+ static void ahd_reset_current_bus(struct ahd_softc *ahd);
+-static ahd_callback_t ahd_stat_timer;
++static ahd_linux_callback_t ahd_stat_timer;
+ #ifdef AHD_DUMP_SEQ
+ static void ahd_dumpseq(struct ahd_softc *ahd);
+ #endif
+@@ -7041,10 +7041,9 @@ static const char *termstat_strings[] = {
+ /***************************** Timer Facilities *******************************/
+ #define ahd_timer_init init_timer
+ #define ahd_timer_stop del_timer_sync
+-typedef void ahd_linux_callback_t (u_long);
+
+ static void
+-ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_callback_t *func, void *arg)
++ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_linux_callback_t *func, void *arg)
+ {
+ struct ahd_softc *ahd;
+
+@@ -7052,7 +7051,7 @@ ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_callback_t *func, void *arg)
+ del_timer(timer);
+ timer->data = (u_long)arg;
+ timer->expires = jiffies + (usec * HZ)/1000000;
+- timer->function = (ahd_linux_callback_t*)func;
++ timer->function = func;
+ add_timer(timer);
+ }
+
+@@ -8878,9 +8877,9 @@ ahd_reset_channel(struct ahd_softc *ahd, char channel, int initiate_reset)
+
+ /**************************** Statistics Processing ***************************/
+ static void
+-ahd_stat_timer(void *arg)
++ahd_stat_timer(unsigned long arg)
+ {
+- struct ahd_softc *ahd = arg;
++ struct ahd_softc *ahd = (struct ahd_softc *)arg;
+ u_long s;
+ int enint_coal;
+
+diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
+index 069e5c5..f67b786 100644
+--- a/drivers/scsi/be2iscsi/be_main.c
++++ b/drivers/scsi/be2iscsi/be_main.c
+@@ -5460,7 +5460,7 @@ beiscsi_hw_health_check(struct work_struct *work)
+
+
+ static pci_ers_result_t beiscsi_eeh_err_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct beiscsi_hba *phba = NULL;
+
+diff --git a/drivers/scsi/bfa/bfa.h b/drivers/scsi/bfa/bfa.h
+index 0e119d8..1bf8a49 100644
+--- a/drivers/scsi/bfa/bfa.h
++++ b/drivers/scsi/bfa/bfa.h
+@@ -225,8 +225,10 @@ struct bfa_faa_args_s {
+ bfa_boolean_t busy;
+ };
+
++enum iocfc_event;
++
+ struct bfa_iocfc_s {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bfa_iocfc_s *, enum iocfc_event);
+ struct bfa_s *bfa;
+ struct bfa_iocfc_cfg_s cfg;
+ u32 req_cq_pi[BFI_IOC_MAX_CQS];
+diff --git a/drivers/scsi/bfa/bfa_core.c b/drivers/scsi/bfa/bfa_core.c
+index 2ea0db4..82ea057 100644
+--- a/drivers/scsi/bfa/bfa_core.c
++++ b/drivers/scsi/bfa/bfa_core.c
+@@ -1900,15 +1900,13 @@ bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q)
+ struct list_head *qe;
+ struct list_head *qen;
+ struct bfa_cb_qe_s *hcb_qe;
+- bfa_cb_cbfn_status_t cbfn;
+
+ list_for_each_safe(qe, qen, comp_q) {
+ hcb_qe = (struct bfa_cb_qe_s *) qe;
+ if (hcb_qe->pre_rmv) {
+ /* qe is invalid after return, dequeue before cbfn() */
+ list_del(qe);
+- cbfn = (bfa_cb_cbfn_status_t)(hcb_qe->cbfn);
+- cbfn(hcb_qe->cbarg, hcb_qe->fw_status);
++ hcb_qe->cbfn(hcb_qe->cbarg, hcb_qe->fw_status);
+ } else
+ hcb_qe->cbfn(hcb_qe->cbarg, BFA_TRUE);
+ }
+diff --git a/drivers/scsi/bfa/bfa_cs.h b/drivers/scsi/bfa/bfa_cs.h
+index da9cf65..8cbfcff 100644
+--- a/drivers/scsi/bfa/bfa_cs.h
++++ b/drivers/scsi/bfa/bfa_cs.h
+@@ -217,8 +217,6 @@ bfa_q_is_on_q_func(struct list_head *q, struct list_head *qe)
+ * @ BFA state machine interfaces
+ */
+
+-typedef void (*bfa_sm_t)(void *sm, int event);
+-
+ /*
+ * oc - object class eg. bfa_ioc
+ * st - state, eg. reset
+@@ -228,20 +226,75 @@ typedef void (*bfa_sm_t)(void *sm, int event);
+ #define bfa_sm_state_decl(oc, st, otype, etype) \
+ static void oc ## _sm_ ## st(otype * fsm, etype event)
+
+-#define bfa_sm_set_state(_sm, _state) ((_sm)->sm = (bfa_sm_t)(_state))
++#define bfa_sm_set_state(_sm, _state) ((_sm)->sm = (_state))
+ #define bfa_sm_send_event(_sm, _event) ((_sm)->sm((_sm), (_event)))
+ #define bfa_sm_get_state(_sm) ((_sm)->sm)
+-#define bfa_sm_cmp_state(_sm, _state) ((_sm)->sm == (bfa_sm_t)(_state))
++#define bfa_sm_cmp_state(_sm, _state) ((_sm)->sm == (_state))
+
+ /*
+ * For converting from state machine function to state encoding.
+ */
+-struct bfa_sm_table_s {
+- bfa_sm_t sm; /* state machine function */
++struct bfa_iocpf_s;
++enum iocpf_event;
++typedef void (*bfa_fsm_iocpf_t)(struct bfa_iocpf_s *, enum iocpf_event);
++
++struct iocpf_sm_table_s {
++ bfa_fsm_iocpf_t sm; /* state machine function */
+ int state; /* state machine encoding */
+ char *name; /* state name for display */
+ };
+-#define BFA_SM(_sm) ((bfa_sm_t)(_sm))
++
++struct bfa_ioc_s;
++enum ioc_event;
++typedef void (*bfa_fsm_ioc_t)(struct bfa_ioc_s *, enum ioc_event);
++
++struct ioc_sm_table_s {
++ bfa_fsm_ioc_t sm; /* state machine function */
++ int state; /* state machine encoding */
++ char *name; /* state name for display */
++};
++
++struct bfa_fcs_rport_s;
++enum rport_event;
++typedef void(*bfa_fcs_rport_t)(struct bfa_fcs_rport_s *, enum rport_event);
++
++struct rport_sm_table_s {
++ bfa_fcs_rport_t sm; /* state machine function */
++ int state; /* state machine encoding */
++ char *name; /* state name for display */
++};
++
++struct bfa_fcs_vport_s;
++enum bfa_fcs_vport_event;
++typedef void(*bfa_fcs_vport_t)(struct bfa_fcs_vport_s *, enum bfa_fcs_vport_event);
++
++struct vport_sm_table_s {
++ bfa_fcs_vport_t sm; /* state machine function */
++ int state; /* state machine encoding */
++ char *name; /* state name for display */
++};
++
++struct bfa_fcs_itnim_s;
++enum bfa_fcs_itnim_event;
++typedef void(*bfa_fcs_itnim_t)(struct bfa_fcs_itnim_s *, enum bfa_fcs_itnim_event);
++
++struct itnim_sm_table_s {
++ bfa_fcs_itnim_t sm; /* state machine function */
++ int state; /* state machine encoding */
++ char *name; /* state name for display */
++};
++
++struct bfa_fcport_s;
++enum bfa_fcport_sm_event;
++typedef void(*bfa_fcport_t)(struct bfa_fcport_s *, enum bfa_fcport_sm_event);
++
++struct fcport_sm_table_s {
++ bfa_fcport_t sm; /* state machine function */
++ int state; /* state machine encoding */
++ char *name; /* state name for display */
++};
++
++#define BFA_SM(_sm) (_sm)
+
+ /*
+ * State machine with entry actions.
+@@ -259,17 +312,66 @@ typedef void (*bfa_fsm_t)(void *fsm, int event);
+ static void oc ## _sm_ ## st ## _entry(otype * fsm)
+
+ #define bfa_fsm_set_state(_fsm, _state) do { \
+- (_fsm)->fsm = (bfa_fsm_t)(_state); \
++ (_fsm)->fsm = (_state); \
+ _state ## _entry(_fsm); \
+ } while (0)
+
+ #define bfa_fsm_send_event(_fsm, _event) ((_fsm)->fsm((_fsm), (_event)))
+ #define bfa_fsm_get_state(_fsm) ((_fsm)->fsm)
+-#define bfa_fsm_cmp_state(_fsm, _state) \
+- ((_fsm)->fsm == (bfa_fsm_t)(_state))
++#define bfa_fsm_cmp_state(_fsm, _state) ((_fsm)->fsm == (_state))
+
+ static inline int
+-bfa_sm_to_state(struct bfa_sm_table_s *smt, bfa_sm_t sm)
++iocpf_sm_to_state(struct iocpf_sm_table_s *smt, bfa_fsm_iocpf_t sm)
++{
++ int i = 0;
++
++ while (smt[i].sm && smt[i].sm != sm)
++ i++;
++ return smt[i].state;
++}
++
++static inline int
++ioc_sm_to_state(struct ioc_sm_table_s *smt, bfa_fsm_ioc_t sm)
++{
++ int i = 0;
++
++ while (smt[i].sm && smt[i].sm != sm)
++ i++;
++ return smt[i].state;
++}
++
++static inline int
++rport_sm_to_state(struct rport_sm_table_s *smt, bfa_fcs_rport_t sm)
++{
++ int i = 0;
++
++ while (smt[i].sm && smt[i].sm != sm)
++ i++;
++ return smt[i].state;
++}
++
++static inline int
++vport_sm_to_state(struct vport_sm_table_s *smt, bfa_fcs_vport_t sm)
++{
++ int i = 0;
++
++ while (smt[i].sm && smt[i].sm != sm)
++ i++;
++ return smt[i].state;
++}
++
++static inline int
++itnim_sm_to_state(struct itnim_sm_table_s *smt, bfa_fcs_itnim_t sm)
++{
++ int i = 0;
++
++ while (smt[i].sm && smt[i].sm != sm)
++ i++;
++ return smt[i].state;
++}
++
++static inline int
++fcport_sm_to_state(struct fcport_sm_table_s *smt, bfa_fcport_t sm)
+ {
+ int i = 0;
+
diff --git a/drivers/scsi/bfa/bfa_fcpim.h b/drivers/scsi/bfa/bfa_fcpim.h
-index e693af6..2e525b6 100644
+index e93921d..ee6b4c0 100644
--- a/drivers/scsi/bfa/bfa_fcpim.h
+++ b/drivers/scsi/bfa/bfa_fcpim.h
-@@ -36,7 +36,7 @@ struct bfa_iotag_s {
+@@ -37,7 +37,7 @@ struct bfa_iotag_s {
struct bfa_itn_s {
bfa_isr_func_t isr;
@@ -56293,11 +67389,50 @@ index e693af6..2e525b6 100644
void bfa_itn_create(struct bfa_s *bfa, struct bfa_rport_s *rport,
void (*isr)(struct bfa_s *bfa, struct bfi_msg_s *m));
+@@ -165,9 +165,11 @@ struct bfa_fcp_mod_s {
+ /*
+ * BFA IO (initiator mode)
+ */
++enum bfa_ioim_event;
++
+ struct bfa_ioim_s {
+ struct list_head qe; /* queue elememt */
+- bfa_sm_t sm; /* BFA ioim state machine */
++ void (*sm)(struct bfa_ioim_s *, enum bfa_ioim_event);/* BFA ioim state machine */
+ struct bfa_s *bfa; /* BFA module */
+ struct bfa_fcpim_s *fcpim; /* parent fcpim module */
+ struct bfa_itnim_s *itnim; /* i-t-n nexus for this IO */
+@@ -197,9 +199,11 @@ struct bfa_ioim_sp_s {
+ /*
+ * BFA Task management command (initiator mode)
+ */
++enum bfa_tskim_event;
++
+ struct bfa_tskim_s {
+ struct list_head qe;
+- bfa_sm_t sm;
++ void (*sm)(struct bfa_tskim_s *, enum bfa_tskim_event);
+ struct bfa_s *bfa; /* BFA module */
+ struct bfa_fcpim_s *fcpim; /* parent fcpim module */
+ struct bfa_itnim_s *itnim; /* i-t-n nexus for this IO */
+@@ -219,9 +223,11 @@ struct bfa_tskim_s {
+ /*
+ * BFA i-t-n (initiator mode)
+ */
++enum bfa_itnim_event;
++
+ struct bfa_itnim_s {
+ struct list_head qe; /* queue element */
+- bfa_sm_t sm; /* i-t-n im BFA state machine */
++ void (*sm)(struct bfa_itnim_s *, enum bfa_itnim_event);/* i-t-n im BFA state machine */
+ struct bfa_s *bfa; /* bfa instance */
+ struct bfa_rport_s *rport; /* bfa rport */
+ void *ditn; /* driver i-t-n structure */
diff --git a/drivers/scsi/bfa/bfa_fcs.c b/drivers/scsi/bfa/bfa_fcs.c
-index 0f19455..ef7adb5 100644
+index 1e7e139..c2031dd 100644
--- a/drivers/scsi/bfa/bfa_fcs.c
+++ b/drivers/scsi/bfa/bfa_fcs.c
-@@ -38,10 +38,21 @@ struct bfa_fcs_mod_s {
+@@ -39,10 +39,21 @@ struct bfa_fcs_mod_s {
#define BFA_FCS_MODULE(_mod) { _mod ## _modinit, _mod ## _modexit }
static struct bfa_fcs_mod_s fcs_modules[] = {
@@ -56323,11 +67458,174 @@ index 0f19455..ef7adb5 100644
};
/*
+diff --git a/drivers/scsi/bfa/bfa_fcs.h b/drivers/scsi/bfa/bfa_fcs.h
+index 06dc215..543c5aa 100644
+--- a/drivers/scsi/bfa/bfa_fcs.h
++++ b/drivers/scsi/bfa/bfa_fcs.h
+@@ -67,8 +67,10 @@ struct bfa_fcs_s;
+ #define BFA_FCS_PID_IS_WKA(pid) ((bfa_ntoh3b(pid) > 0xFFF000) ? 1 : 0)
+ #define BFA_FCS_MAX_RPORT_LOGINS 1024
+
++enum vport_ns_event;
++
+ struct bfa_fcs_lport_ns_s {
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_lport_ns_s *, enum vport_ns_event);/* state machine */
+ struct bfa_timer_s timer;
+ struct bfa_fcs_lport_s *port; /* parent port */
+ struct bfa_fcxp_s *fcxp;
+@@ -77,18 +79,20 @@ struct bfa_fcs_lport_ns_s {
+ u8 num_rsnn_nn_retries;
+ };
+
++enum port_scn_event;
+
+ struct bfa_fcs_lport_scn_s {
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_lport_scn_s *, enum port_scn_event);/* state machine */
+ struct bfa_timer_s timer;
+ struct bfa_fcs_lport_s *port; /* parent port */
+ struct bfa_fcxp_s *fcxp;
+ struct bfa_fcxp_wqe_s fcxp_wqe;
+ };
+
++enum port_fdmi_event;
+
+ struct bfa_fcs_lport_fdmi_s {
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_lport_fdmi_s *, enum port_fdmi_event);/* state machine */
+ struct bfa_timer_s timer;
+ struct bfa_fcs_lport_ms_s *ms; /* parent ms */
+ struct bfa_fcxp_s *fcxp;
+@@ -97,9 +101,10 @@ struct bfa_fcs_lport_fdmi_s {
+ u8 rsvd[3];
+ };
+
++enum port_ms_event;
+
+ struct bfa_fcs_lport_ms_s {
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_lport_ms_s *, enum port_ms_event);/* state machine */
+ struct bfa_timer_s timer;
+ struct bfa_fcs_lport_s *port; /* parent port */
+ struct bfa_fcxp_s *fcxp;
+@@ -139,10 +144,11 @@ union bfa_fcs_lport_topo_u {
+ struct bfa_fcs_lport_n2n_s pn2n;
+ };
+
++enum bfa_fcs_lport_event;
+
+ struct bfa_fcs_lport_s {
+ struct list_head qe; /* used by port/vport */
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_lport_s *, enum bfa_fcs_lport_event); /* state machine */
+ struct bfa_fcs_fabric_s *fabric; /* parent fabric */
+ struct bfa_lport_cfg_s port_cfg; /* port configuration */
+ struct bfa_timer_s link_timer; /* timer for link offline */
+@@ -179,10 +185,11 @@ enum bfa_fcs_fabric_type {
+ BFA_FCS_FABRIC_LOOP = 3,
+ };
+
++enum bfa_fcs_fabric_event;
+
+ struct bfa_fcs_fabric_s {
+ struct list_head qe; /* queue element */
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_fabric_s *, enum bfa_fcs_fabric_event); /* state machine */
+ struct bfa_fcs_s *fcs; /* FCS instance */
+ struct bfa_fcs_lport_s bport; /* base logical port */
+ enum bfa_fcs_fabric_type fab_type; /* fabric type */
+@@ -355,9 +362,11 @@ void bfa_fcs_lport_scn_process_rscn(struct bfa_fcs_lport_s *port,
+ struct fchs_s *rx_frame, u32 len);
+ void bfa_fcs_lport_lip_scn_online(bfa_fcs_lport_t *port);
+
++enum bfa_fcs_vport_event;
++
+ struct bfa_fcs_vport_s {
+ struct list_head qe; /* queue elem */
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_vport_s *, enum bfa_fcs_vport_event);/* state machine */
+ bfa_fcs_lport_t lport; /* logical port */
+ struct bfa_timer_s timer;
+ struct bfad_vport_s *vport_drv; /* Driver private */
+@@ -409,8 +418,10 @@ struct bfa_fcs_tin_s;
+ struct bfa_fcs_iprp_s;
+
+ /* Rport Features (RPF) */
++enum rpf_event;
++
+ struct bfa_fcs_rpf_s {
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_rpf_s *, enum rpf_event); /* state machine */
+ struct bfa_fcs_rport_s *rport; /* parent rport */
+ struct bfa_timer_s timer; /* general purpose timer */
+ struct bfa_fcxp_s *fcxp; /* FCXP needed for discarding */
+@@ -425,6 +436,8 @@ struct bfa_fcs_rpf_s {
+ */
+ };
+
++enum rport_event;
++
+ struct bfa_fcs_rport_s {
+ struct list_head qe; /* used by port/vport */
+ struct bfa_fcs_lport_s *port; /* parent FCS port */
+@@ -441,7 +454,7 @@ struct bfa_fcs_rport_s {
+ wwn_t pwwn; /* port wwn of rport */
+ wwn_t nwwn; /* node wwn of rport */
+ struct bfa_rport_symname_s psym_name; /* port symbolic name */
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_rport_s *, enum rport_event); /* state machine */
+ struct bfa_timer_s timer; /* general purpose timer */
+ struct bfa_fcs_itnim_s *itnim; /* ITN initiator mode role */
+ struct bfa_fcs_tin_s *tin; /* ITN initiator mode role */
+@@ -502,9 +515,10 @@ void bfa_fcs_rpf_rport_offline(struct bfa_fcs_rport_s *rport);
+ * forward declarations
+ */
+ struct bfad_itnim_s;
++enum bfa_fcs_itnim_event;
+
+ struct bfa_fcs_itnim_s {
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_fcs_itnim_s *, enum bfa_fcs_itnim_event);/* state machine */
+ struct bfa_fcs_rport_s *rport; /* parent remote rport */
+ 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
+--- 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,
+ static void bfa_fcs_itnim_sm_initiator(struct bfa_fcs_itnim_s *itnim,
+ enum bfa_fcs_itnim_event event);
+
+-static struct bfa_sm_table_s itnim_sm_table[] = {
++static struct itnim_sm_table_s itnim_sm_table[] = {
+ {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
+ bfa_fcs_itnim_get_online_state(struct bfa_fcs_itnim_s *itnim)
+ {
+ bfa_trc(itnim->fcs, itnim->rport->pid);
+- switch (bfa_sm_to_state(itnim_sm_table, itnim->sm)) {
++ switch (itnim_sm_to_state(itnim_sm_table, itnim->sm)) {
+ 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,
+ if (itnim == NULL)
+ return BFA_STATUS_NO_FCPIM_NEXUS;
+
+- attr->state = bfa_sm_to_state(itnim_sm_table, itnim->sm);
++ attr->state = itnim_sm_to_state(itnim_sm_table, itnim->sm);
+ attr->retry = itnim->seq_rec;
+ attr->rec_support = itnim->rec_support;
+ attr->conf_comp = itnim->conf_comp;
diff --git a/drivers/scsi/bfa/bfa_fcs_lport.c b/drivers/scsi/bfa/bfa_fcs_lport.c
-index ff75ef8..2dfe00a 100644
+index 7733ad5..11f32d1 100644
--- a/drivers/scsi/bfa/bfa_fcs_lport.c
+++ b/drivers/scsi/bfa/bfa_fcs_lport.c
-@@ -89,15 +89,26 @@ static struct {
+@@ -90,15 +90,26 @@ static struct {
void (*offline) (struct bfa_fcs_lport_s *port);
} __port_action[] = {
{
@@ -56363,11 +67661,88 @@ index ff75ef8..2dfe00a 100644
/*
* fcs_port_sm FCS logical port state machine
+@@ -6040,7 +6051,7 @@ static void bfa_fcs_vport_sm_stopping(struct bfa_fcs_vport_s *vport,
+ static void bfa_fcs_vport_sm_logo_for_stop(struct bfa_fcs_vport_s *vport,
+ enum bfa_fcs_vport_event event);
+
+-static struct bfa_sm_table_s vport_sm_table[] = {
++static struct vport_sm_table_s vport_sm_table[] = {
+ {BFA_SM(bfa_fcs_vport_sm_uninit), BFA_FCS_VPORT_UNINIT},
+ {BFA_SM(bfa_fcs_vport_sm_created), BFA_FCS_VPORT_CREATED},
+ {BFA_SM(bfa_fcs_vport_sm_offline), BFA_FCS_VPORT_OFFLINE},
+@@ -6871,7 +6882,7 @@ bfa_fcs_vport_get_attr(struct bfa_fcs_vport_s *vport,
+ memset(attr, 0, sizeof(struct bfa_vport_attr_s));
+
+ bfa_fcs_lport_get_attr(&vport->lport, &attr->port_attr);
+- attr->vport_state = bfa_sm_to_state(vport_sm_table, vport->sm);
++ attr->vport_state = vport_sm_to_state(vport_sm_table, vport->sm);
+ }
+
+
+diff --git a/drivers/scsi/bfa/bfa_fcs_rport.c b/drivers/scsi/bfa/bfa_fcs_rport.c
+index de50349..6d676be 100644
+--- a/drivers/scsi/bfa/bfa_fcs_rport.c
++++ b/drivers/scsi/bfa/bfa_fcs_rport.c
+@@ -144,7 +144,7 @@ static void bfa_fcs_rport_sm_fc4_off_delete(struct bfa_fcs_rport_s *rport,
+ static void bfa_fcs_rport_sm_delete_pending(struct bfa_fcs_rport_s *rport,
+ enum rport_event event);
+
+-static struct bfa_sm_table_s rport_sm_table[] = {
++static struct rport_sm_table_s rport_sm_table[] = {
+ {BFA_SM(bfa_fcs_rport_sm_uninit), BFA_RPORT_UNINIT},
+ {BFA_SM(bfa_fcs_rport_sm_plogi_sending), BFA_RPORT_PLOGI},
+ {BFA_SM(bfa_fcs_rport_sm_plogiacc_sending), BFA_RPORT_ONLINE},
+@@ -2980,7 +2980,7 @@ bfa_fcs_rport_send_ls_rjt(struct bfa_fcs_rport_s *rport, struct fchs_s *rx_fchs,
+ int
+ bfa_fcs_rport_get_state(struct bfa_fcs_rport_s *rport)
+ {
+- return bfa_sm_to_state(rport_sm_table, rport->sm);
++ return rport_sm_to_state(rport_sm_table, rport->sm);
+ }
+
+
+diff --git a/drivers/scsi/bfa/bfa_ioc.c b/drivers/scsi/bfa/bfa_ioc.c
+index 251e2ff..cef239a 100644
+--- a/drivers/scsi/bfa/bfa_ioc.c
++++ b/drivers/scsi/bfa/bfa_ioc.c
+@@ -148,7 +148,7 @@ bfa_fsm_state_decl(bfa_ioc, disabling, struct bfa_ioc_s, enum ioc_event);
+ bfa_fsm_state_decl(bfa_ioc, disabled, struct bfa_ioc_s, enum ioc_event);
+ bfa_fsm_state_decl(bfa_ioc, hwfail, struct bfa_ioc_s, enum ioc_event);
+
+-static struct bfa_sm_table_s ioc_sm_table[] = {
++static struct ioc_sm_table_s ioc_sm_table[] = {
+ {BFA_SM(bfa_ioc_sm_uninit), BFA_IOC_UNINIT},
+ {BFA_SM(bfa_ioc_sm_reset), BFA_IOC_RESET},
+ {BFA_SM(bfa_ioc_sm_enabling), BFA_IOC_ENABLING},
+@@ -236,7 +236,7 @@ bfa_fsm_state_decl(bfa_iocpf, disabling_sync, struct bfa_iocpf_s,
+ enum iocpf_event);
+ bfa_fsm_state_decl(bfa_iocpf, disabled, struct bfa_iocpf_s, enum iocpf_event);
+
+-static struct bfa_sm_table_s iocpf_sm_table[] = {
++static struct iocpf_sm_table_s iocpf_sm_table[] = {
+ {BFA_SM(bfa_iocpf_sm_reset), BFA_IOCPF_RESET},
+ {BFA_SM(bfa_iocpf_sm_fwcheck), BFA_IOCPF_FWMISMATCH},
+ {BFA_SM(bfa_iocpf_sm_mismatch), BFA_IOCPF_FWMISMATCH},
+@@ -2830,12 +2830,12 @@ enum bfa_ioc_state
+ bfa_ioc_get_state(struct bfa_ioc_s *ioc)
+ {
+ enum bfa_iocpf_state iocpf_st;
+- enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm);
++ enum bfa_ioc_state ioc_st = ioc_sm_to_state(ioc_sm_table, ioc->fsm);
+
+ if (ioc_st == BFA_IOC_ENABLING ||
+ ioc_st == BFA_IOC_FAIL || ioc_st == BFA_IOC_INITFAIL) {
+
+- iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm);
++ iocpf_st = iocpf_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm);
+
+ switch (iocpf_st) {
+ case BFA_IOCPF_SEMWAIT:
diff --git a/drivers/scsi/bfa/bfa_ioc.h b/drivers/scsi/bfa/bfa_ioc.h
-index a38aafa0..fe8f03b 100644
+index 713745d..78b9671 100644
--- a/drivers/scsi/bfa/bfa_ioc.h
+++ b/drivers/scsi/bfa/bfa_ioc.h
-@@ -258,7 +258,7 @@ struct bfa_ioc_cbfn_s {
+@@ -259,7 +259,7 @@ struct bfa_ioc_cbfn_s {
bfa_ioc_disable_cbfn_t disable_cbfn;
bfa_ioc_hbfail_cbfn_t hbfail_cbfn;
bfa_ioc_reset_cbfn_t reset_cbfn;
@@ -56376,7 +67751,30 @@ index a38aafa0..fe8f03b 100644
/*
* IOC event notification mechanism.
-@@ -352,7 +352,7 @@ struct bfa_ioc_hwif_s {
+@@ -286,16 +286,20 @@ struct bfa_ioc_notify_s {
+ (__notify)->cbarg = (__cbarg); \
+ } while (0)
+
++enum iocpf_event;
++
+ struct bfa_iocpf_s {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bfa_iocpf_s *, enum iocpf_event);
+ struct bfa_ioc_s *ioc;
+ bfa_boolean_t fw_mismatch_notified;
+ bfa_boolean_t auto_recover;
+ u32 poll_time;
+ };
+
++enum ioc_event;
++
+ struct bfa_ioc_s {
+- bfa_fsm_t fsm;
++ void (*fsm)(struct bfa_ioc_s *, enum ioc_event);
+ struct bfa_s *bfa;
+ struct bfa_pcidev_s pcidev;
+ struct bfa_timer_mod_s *timer_mod;
+@@ -353,7 +357,7 @@ struct bfa_ioc_hwif_s {
void (*ioc_set_alt_fwstate) (struct bfa_ioc_s *ioc,
enum bfi_ioc_state fwstate);
enum bfi_ioc_state (*ioc_get_alt_fwstate) (struct bfa_ioc_s *ioc);
@@ -56385,11 +67783,23 @@ index a38aafa0..fe8f03b 100644
/*
* Queue element to wait for room in request queue. FIFO order is
+@@ -779,8 +783,10 @@ struct bfa_dconf_s {
+ };
+ #pragma pack()
+
++enum bfa_dconf_event;
++
+ struct bfa_dconf_mod_s {
+- bfa_sm_t sm;
++ void (*sm)(struct bfa_dconf_mod_s *, enum bfa_dconf_event);
+ u8 instance;
+ bfa_boolean_t read_data_valid;
+ bfa_boolean_t min_cfg;
diff --git a/drivers/scsi/bfa/bfa_modules.h b/drivers/scsi/bfa/bfa_modules.h
-index a14c784..6de6790 100644
+index 53135f2..640621b 100644
--- a/drivers/scsi/bfa/bfa_modules.h
+++ b/drivers/scsi/bfa/bfa_modules.h
-@@ -78,12 +78,12 @@ enum {
+@@ -79,12 +79,12 @@ enum {
\
extern struct bfa_module_s hal_mod_ ## __mod; \
struct bfa_module_s hal_mod_ ## __mod = { \
@@ -56408,6 +67818,735 @@ index a14c784..6de6790 100644
}
#define BFA_CACHELINE_SZ (256)
+diff --git a/drivers/scsi/bfa/bfa_svc.c b/drivers/scsi/bfa/bfa_svc.c
+index 12de292..ec9f0ab 100644
+--- a/drivers/scsi/bfa/bfa_svc.c
++++ b/drivers/scsi/bfa/bfa_svc.c
+@@ -225,7 +225,7 @@ static void bfa_fcport_ln_sm_up_dn_nf(struct bfa_fcport_ln_s *ln,
+ static void bfa_fcport_ln_sm_up_dn_up_nf(struct bfa_fcport_ln_s *ln,
+ enum bfa_fcport_ln_sm_event event);
+
+-static struct bfa_sm_table_s hal_port_sm_table[] = {
++static struct fcport_sm_table_s hal_port_sm_table[] = {
+ {BFA_SM(bfa_fcport_sm_uninit), BFA_PORT_ST_UNINIT},
+ {BFA_SM(bfa_fcport_sm_enabling_qwait), BFA_PORT_ST_ENABLING_QWAIT},
+ {BFA_SM(bfa_fcport_sm_enabling), BFA_PORT_ST_ENABLING},
+@@ -3642,7 +3642,7 @@ bfa_fcport_isr(struct bfa_s *bfa, struct bfi_msg_s *msg)
+ fcport->event_arg.i2hmsg = i2hmsg;
+
+ bfa_trc(bfa, msg->mhdr.msg_id);
+- bfa_trc(bfa, bfa_sm_to_state(hal_port_sm_table, fcport->sm));
++ bfa_trc(bfa, fcport_sm_to_state(hal_port_sm_table, fcport->sm));
+
+ switch (msg->mhdr.msg_id) {
+ case BFI_FCPORT_I2H_ENABLE_RSP:
+@@ -4077,7 +4077,7 @@ bfa_fcport_get_attr(struct bfa_s *bfa, struct bfa_port_attr_s *attr)
+
+ attr->pport_cfg.path_tov = bfa_fcpim_path_tov_get(bfa);
+ attr->pport_cfg.q_depth = bfa_fcpim_qdepth_get(bfa);
+- attr->port_state = bfa_sm_to_state(hal_port_sm_table, fcport->sm);
++ attr->port_state = fcport_sm_to_state(hal_port_sm_table, fcport->sm);
+
+ attr->fec_state = fcport->fec_state;
+
+@@ -4159,7 +4159,7 @@ bfa_fcport_is_disabled(struct bfa_s *bfa)
+ {
+ struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa);
+
+- return bfa_sm_to_state(hal_port_sm_table, fcport->sm) ==
++ return fcport_sm_to_state(hal_port_sm_table, fcport->sm) ==
+ BFA_PORT_ST_DISABLED;
+
+ }
+@@ -4169,7 +4169,7 @@ bfa_fcport_is_dport(struct bfa_s *bfa)
+ {
+ struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa);
+
+- return (bfa_sm_to_state(hal_port_sm_table, fcport->sm) ==
++ return (fcport_sm_to_state(hal_port_sm_table, fcport->sm) ==
+ BFA_PORT_ST_DPORT);
+ }
+
+@@ -4178,7 +4178,7 @@ bfa_fcport_is_ddport(struct bfa_s *bfa)
+ {
+ struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa);
+
+- return (bfa_sm_to_state(hal_port_sm_table, fcport->sm) ==
++ return (fcport_sm_to_state(hal_port_sm_table, fcport->sm) ==
+ BFA_PORT_ST_DDPORT);
+ }
+
+diff --git a/drivers/scsi/bfa/bfa_svc.h b/drivers/scsi/bfa/bfa_svc.h
+index ea2278b..6f51a73 100644
+--- a/drivers/scsi/bfa/bfa_svc.h
++++ b/drivers/scsi/bfa/bfa_svc.h
+@@ -160,6 +160,8 @@ struct bfa_fcxp_rsp_info_s {
+ u32 rsp_maxlen; /* max response length expected */
+ };
+
++typedef void (*bfa_sm_t)(void *sm, int event);
++
+ struct bfa_fcxp_s {
+ struct list_head qe; /* fcxp queue element */
+ bfa_sm_t sm; /* state machine */
+@@ -295,9 +297,11 @@ struct bfa_rport_info_s {
+ /*
+ * BFA rport data structure
+ */
++enum bfa_rport_event;
++
+ struct bfa_rport_s {
+ struct list_head qe; /* queue element */
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfa_rport_s *, enum bfa_rport_event);/* state machine */
+ struct bfa_s *bfa; /* backpointer to BFA */
+ void *rport_drv; /* fcs/driver rport object */
+ u16 fw_handle; /* firmware rport handle */
+@@ -388,10 +392,12 @@ void bfa_uf_res_recfg(struct bfa_s *bfa, u16 num_uf_fw);
+ /*
+ * LPS - bfa lport login/logout service interface
+ */
++enum bfa_lps_event;
++
+ struct bfa_lps_s {
+ struct list_head qe; /* queue element */
+ struct bfa_s *bfa; /* parent bfa instance */
+- bfa_sm_t sm; /* finite state machine */
++ void (*sm)(struct bfa_lps_s *, enum bfa_lps_event);/* finite state machine */
+ u8 bfa_tag; /* lport tag */
+ u8 fw_tag; /* lport fw tag */
+ u8 reqq; /* lport request queue */
+@@ -450,9 +456,11 @@ void bfa_lps_isr(struct bfa_s *bfa, struct bfi_msg_s *msg);
+ /*
+ * Link notification data structure
+ */
++enum bfa_fcport_ln_sm_event;
++
+ struct bfa_fcport_ln_s {
+ struct bfa_fcport_s *fcport;
+- bfa_sm_t sm;
++ void (*sm)(struct bfa_fcport_ln_s *, enum bfa_fcport_ln_sm_event);
+ struct bfa_cb_qe_s ln_qe; /* BFA callback queue elem for ln */
+ enum bfa_port_linkstate ln_event; /* ln event for callback */
+ };
+@@ -466,7 +474,7 @@ struct bfa_fcport_trunk_s {
+ */
+ struct bfa_fcport_s {
+ struct bfa_s *bfa; /* parent BFA instance */
+- bfa_sm_t sm; /* port state machine */
++ void (*sm)(struct bfa_fcport_s *, enum bfa_fcport_sm_event); /* port state machine */
+ wwn_t nwwn; /* node wwn of physical port */
+ wwn_t pwwn; /* port wwn of physical oprt */
+ enum bfa_port_speed speed_sup;
+@@ -714,9 +722,11 @@ struct bfa_fcdiag_lb_s {
+ u32 status;
+ };
+
++enum bfa_dport_sm_event;
++
+ struct bfa_dport_s {
+ struct bfa_s *bfa; /* Back pointer to BFA */
+- bfa_sm_t sm; /* finite state machine */
++ void (*sm)(struct bfa_dport_s *, enum bfa_dport_sm_event);/* finite state machine */
+ struct bfa_reqq_wait_s reqq_wait;
+ bfa_cb_diag_t cbfn;
+ void *cbarg;
+diff --git a/drivers/scsi/bfa/bfad.c b/drivers/scsi/bfa/bfad.c
+index 9d253cb..bb533ea 100644
+--- a/drivers/scsi/bfa/bfad.c
++++ b/drivers/scsi/bfa/bfad.c
+@@ -408,6 +408,16 @@ bfad_hcb_comp(void *arg, bfa_status_t status)
+ complete(&fcomp->comp);
+ }
+
++void
++bfad_stats_comp(void *arg, bfa_boolean_t _status)
++{
++ struct bfad_hal_comp *fcomp = (struct bfad_hal_comp *)arg;
++ bfa_status_t status = (bfa_status_t)_status;
++
++ fcomp->status = status;
++ complete(&fcomp->comp);
++}
++
+ /*
+ * bfa_init callback
+ */
+@@ -1442,7 +1452,7 @@ bfad_pci_remove(struct pci_dev *pdev)
+ * PCI Error Recovery entry, error detected.
+ */
+ static pci_ers_result_t
+-bfad_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++bfad_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct bfad_s *bfad = pci_get_drvdata(pdev);
+ unsigned long flags;
+diff --git a/drivers/scsi/bfa/bfad_bsg.c b/drivers/scsi/bfa/bfad_bsg.c
+index d1ad020..661c0f9 100644
+--- a/drivers/scsi/bfa/bfad_bsg.c
++++ b/drivers/scsi/bfa/bfad_bsg.c
+@@ -2145,7 +2145,7 @@ bfad_iocmd_fcport_get_stats(struct bfad_s *bfad, void *cmd)
+ struct bfa_cb_pending_q_s cb_qe;
+
+ init_completion(&fcomp.comp);
+- bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp,
++ bfa_pending_q_init(&cb_qe, bfad_stats_comp,
+ &fcomp, &iocmd->stats);
+ spin_lock_irqsave(&bfad->bfad_lock, flags);
+ iocmd->status = bfa_fcport_get_stats(&bfad->bfa, &cb_qe);
+@@ -2169,7 +2169,7 @@ bfad_iocmd_fcport_reset_stats(struct bfad_s *bfad, void *cmd)
+ struct bfa_cb_pending_q_s cb_qe;
+
+ init_completion(&fcomp.comp);
+- bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, &fcomp, NULL);
++ bfa_pending_q_init(&cb_qe, bfad_stats_comp, &fcomp, NULL);
+
+ spin_lock_irqsave(&bfad->bfad_lock, flags);
+ iocmd->status = bfa_fcport_clear_stats(&bfad->bfa, &cb_qe);
+@@ -2453,7 +2453,7 @@ bfad_iocmd_qos_get_stats(struct bfad_s *bfad, void *cmd)
+ struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa);
+
+ init_completion(&fcomp.comp);
+- bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp,
++ bfa_pending_q_init(&cb_qe, bfad_stats_comp,
+ &fcomp, &iocmd->stats);
+
+ spin_lock_irqsave(&bfad->bfad_lock, flags);
+@@ -2484,7 +2484,7 @@ bfad_iocmd_qos_reset_stats(struct bfad_s *bfad, void *cmd)
+ struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa);
+
+ init_completion(&fcomp.comp);
+- bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp,
++ bfa_pending_q_init(&cb_qe, bfad_stats_comp,
+ &fcomp, NULL);
+
+ spin_lock_irqsave(&bfad->bfad_lock, flags);
+diff --git a/drivers/scsi/bfa/bfad_drv.h b/drivers/scsi/bfa/bfad_drv.h
+index f9e8620..807a983 100644
+--- a/drivers/scsi/bfa/bfad_drv.h
++++ b/drivers/scsi/bfa/bfad_drv.h
+@@ -187,8 +187,10 @@ union bfad_tmp_buf {
+ /*
+ * BFAD (PCI function) data structure
+ */
++enum bfad_sm_event;
++
+ struct bfad_s {
+- bfa_sm_t sm; /* state machine */
++ void (*sm)(struct bfad_s *, enum bfad_sm_event); /* state machine */
+ struct list_head list_entry;
+ struct bfa_s bfa;
+ struct bfa_fcs_s bfa_fcs;
+@@ -309,6 +311,7 @@ void bfad_fcs_stop(struct bfad_s *bfad);
+ void bfad_remove_intr(struct bfad_s *bfad);
+ void bfad_hal_mem_release(struct bfad_s *bfad);
+ void bfad_hcb_comp(void *arg, bfa_status_t status);
++void bfad_stats_comp(void *arg, bfa_boolean_t _status);
+
+ int bfad_setup_intr(struct bfad_s *bfad);
+ void bfad_remove_intr(struct bfad_s *bfad);
+diff --git a/drivers/scsi/csiostor/csio_defs.h b/drivers/scsi/csiostor/csio_defs.h
+index c38017b..3268e62 100644
+--- a/drivers/scsi/csiostor/csio_defs.h
++++ b/drivers/scsi/csiostor/csio_defs.h
+@@ -73,7 +73,8 @@ csio_list_deleted(struct list_head *list)
+ #define csio_list_prev(elem) (((struct list_head *)(elem))->prev)
+
+ /* State machine */
+-typedef void (*csio_sm_state_t)(void *, uint32_t);
++struct csio_sm;
++typedef void (*csio_sm_state_t)(struct csio_sm *, uint32_t);
+
+ struct csio_sm {
+ struct list_head sm_list;
+@@ -81,9 +82,9 @@ struct csio_sm {
+ };
+
+ static inline void
+-csio_set_state(void *smp, void *state)
++csio_set_state(struct csio_sm *smp, csio_sm_state_t state)
+ {
+- ((struct csio_sm *)smp)->sm_state = (csio_sm_state_t)state;
++ smp->sm_state = state;
+ }
+
+ static inline void
+@@ -93,21 +94,21 @@ csio_init_state(struct csio_sm *smp, void *state)
+ }
+
+ static inline void
+-csio_post_event(void *smp, uint32_t evt)
++csio_post_event(struct csio_sm *smp, uint32_t evt)
+ {
+- ((struct csio_sm *)smp)->sm_state(smp, evt);
++ smp->sm_state(smp, evt);
+ }
+
+ static inline csio_sm_state_t
+-csio_get_state(void *smp)
++csio_get_state(struct csio_sm *smp)
+ {
+- return ((struct csio_sm *)smp)->sm_state;
++ return smp->sm_state;
+ }
+
+ static inline bool
+-csio_match_state(void *smp, void *state)
++csio_match_state(struct csio_sm *smp, csio_sm_state_t state)
+ {
+- return (csio_get_state(smp) == (csio_sm_state_t)state);
++ return (csio_get_state(smp) == state);
+ }
+
+ #define CSIO_ASSERT(cond) BUG_ON(!(cond))
+diff --git a/drivers/scsi/csiostor/csio_hw.c b/drivers/scsi/csiostor/csio_hw.c
+index 622bdab..1a31d41 100644
+--- a/drivers/scsi/csiostor/csio_hw.c
++++ b/drivers/scsi/csiostor/csio_hw.c
+@@ -89,15 +89,15 @@ static void csio_mgmtm_cleanup(struct csio_mgmtm *);
+ static void csio_hw_mbm_cleanup(struct csio_hw *);
+
+ /* State machine forward declarations */
+-static void csio_hws_uninit(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_configuring(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_initializing(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_ready(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_quiescing(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_quiesced(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_resetting(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_removing(struct csio_hw *, enum csio_hw_ev);
+-static void csio_hws_pcierr(struct csio_hw *, enum csio_hw_ev);
++static void csio_hws_uninit(struct csio_sm *, uint32_t);
++static void csio_hws_configuring(struct csio_sm *, uint32_t);
++static void csio_hws_initializing(struct csio_sm *, uint32_t);
++static void csio_hws_ready(struct csio_sm *, uint32_t);
++static void csio_hws_quiescing(struct csio_sm *, uint32_t);
++static void csio_hws_quiesced(struct csio_sm *, uint32_t);
++static void csio_hws_resetting(struct csio_sm *, uint32_t);
++static void csio_hws_removing(struct csio_sm *, uint32_t);
++static void csio_hws_pcierr(struct csio_sm *, uint32_t);
+
+ static void csio_hw_initialize(struct csio_hw *hw);
+ static void csio_evtq_stop(struct csio_hw *hw);
+@@ -105,12 +105,12 @@ static void csio_evtq_start(struct csio_hw *hw);
+
+ int csio_is_hw_ready(struct csio_hw *hw)
+ {
+- return csio_match_state(hw, csio_hws_ready);
++ return csio_match_state(&hw->sm, csio_hws_ready);
+ }
+
+ int csio_is_hw_removing(struct csio_hw *hw)
+ {
+- return csio_match_state(hw, csio_hws_removing);
++ return csio_match_state(&hw->sm, csio_hws_removing);
+ }
+
+
+@@ -2326,8 +2326,11 @@ csio_hw_fatal_err(struct csio_hw *hw)
+ *
+ */
+ static void
+-csio_hws_uninit(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_uninit(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+@@ -2351,8 +2354,11 @@ csio_hws_uninit(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_configuring(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_configuring(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+@@ -2389,8 +2395,11 @@ csio_hws_configuring(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_initializing(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_initializing(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+@@ -2427,8 +2436,11 @@ csio_hws_initializing(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_ready(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_ready(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ /* Remember the event */
+ hw->evtflag = evt;
+
+@@ -2476,8 +2488,11 @@ csio_hws_ready(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_quiescing(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_quiescing(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+@@ -2536,8 +2551,11 @@ csio_hws_quiescing(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_quiesced(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_quiesced(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+@@ -2561,8 +2579,11 @@ csio_hws_quiesced(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_resetting(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_resetting(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+@@ -2587,8 +2608,11 @@ csio_hws_resetting(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_removing(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_removing(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+@@ -2622,8 +2646,11 @@ csio_hws_removing(struct csio_hw *hw, enum csio_hw_ev evt)
+ *
+ */
+ static void
+-csio_hws_pcierr(struct csio_hw *hw, enum csio_hw_ev evt)
++csio_hws_pcierr(struct csio_sm *_hw, uint32_t _evt)
+ {
++ struct csio_hw *hw = container_of(_hw, struct csio_hw, sm);
++ enum csio_hw_ev evt = _evt;
++
+ hw->prev_evt = hw->cur_evt;
+ hw->cur_evt = evt;
+ CSIO_INC_STATS(hw, n_evt_sm[evt]);
+diff --git a/drivers/scsi/csiostor/csio_init.c b/drivers/scsi/csiostor/csio_init.c
+index dbe416f..25a9a5b 100644
+--- a/drivers/scsi/csiostor/csio_init.c
++++ b/drivers/scsi/csiostor/csio_init.c
+@@ -1053,7 +1053,7 @@ static void csio_remove_one(struct pci_dev *pdev)
+ *
+ */
+ static pci_ers_result_t
+-csio_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++csio_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct csio_hw *hw = pci_get_drvdata(pdev);
+
+diff --git a/drivers/scsi/csiostor/csio_lnode.c b/drivers/scsi/csiostor/csio_lnode.c
+index c00b2ff..da72dbc 100644
+--- a/drivers/scsi/csiostor/csio_lnode.c
++++ b/drivers/scsi/csiostor/csio_lnode.c
+@@ -55,10 +55,10 @@ int csio_fdmi_enable = 1;
+ #define PORT_ID_PTR(_x) ((uint8_t *)(&_x) + 1)
+
+ /* Lnode SM declarations */
+-static void csio_lns_uninit(struct csio_lnode *, enum csio_ln_ev);
+-static void csio_lns_online(struct csio_lnode *, enum csio_ln_ev);
+-static void csio_lns_ready(struct csio_lnode *, enum csio_ln_ev);
+-static void csio_lns_offline(struct csio_lnode *, enum csio_ln_ev);
++static void csio_lns_uninit(struct csio_sm *, uint32_t);
++static void csio_lns_online(struct csio_sm *, uint32_t);
++static void csio_lns_ready(struct csio_sm *, uint32_t);
++static void csio_lns_offline(struct csio_sm *, uint32_t);
+
+ static int csio_ln_mgmt_submit_req(struct csio_ioreq *,
+ void (*io_cbfn) (struct csio_hw *, struct csio_ioreq *),
+@@ -1077,7 +1077,7 @@ csio_handle_link_down(struct csio_hw *hw, uint8_t portid, uint32_t fcfi,
+ int
+ csio_is_lnode_ready(struct csio_lnode *ln)
+ {
+- return (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready));
++ return (csio_get_state(&ln->sm) == csio_lns_ready);
+ }
+
+ /*****************************************************************************/
+@@ -1093,8 +1093,10 @@ csio_is_lnode_ready(struct csio_lnode *ln)
+ * Return - none.
+ */
+ static void
+-csio_lns_uninit(struct csio_lnode *ln, enum csio_ln_ev evt)
++csio_lns_uninit(struct csio_sm *_ln, uint32_t _evt)
+ {
++ struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm);
++ enum csio_ln_ev evt = _evt;
+ struct csio_hw *hw = csio_lnode_to_hw(ln);
+ struct csio_lnode *rln = hw->rln;
+ int rv;
+@@ -1146,8 +1148,10 @@ csio_lns_uninit(struct csio_lnode *ln, enum csio_ln_ev evt)
+ * Return - none.
+ */
+ static void
+-csio_lns_online(struct csio_lnode *ln, enum csio_ln_ev evt)
++csio_lns_online(struct csio_sm *_ln, uint32_t _evt)
+ {
++ struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm);
++ enum csio_ln_ev evt = _evt;
+ struct csio_hw *hw = csio_lnode_to_hw(ln);
+
+ CSIO_INC_STATS(ln, n_evt_sm[evt]);
+@@ -1198,8 +1202,10 @@ csio_lns_online(struct csio_lnode *ln, enum csio_ln_ev evt)
+ * Return - none.
+ */
+ static void
+-csio_lns_ready(struct csio_lnode *ln, enum csio_ln_ev evt)
++csio_lns_ready(struct csio_sm *_ln, uint32_t _evt)
+ {
++ struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm);
++ enum csio_ln_ev evt = _evt;
+ struct csio_hw *hw = csio_lnode_to_hw(ln);
+
+ CSIO_INC_STATS(ln, n_evt_sm[evt]);
+@@ -1272,8 +1278,10 @@ csio_lns_ready(struct csio_lnode *ln, enum csio_ln_ev evt)
+ * Return - none.
+ */
+ static void
+-csio_lns_offline(struct csio_lnode *ln, enum csio_ln_ev evt)
++csio_lns_offline(struct csio_sm *_ln, uint32_t _evt)
+ {
++ struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm);
++ enum csio_ln_ev evt = _evt;
+ struct csio_hw *hw = csio_lnode_to_hw(ln);
+ struct csio_lnode *rln = hw->rln;
+ int rv;
+@@ -1349,15 +1357,15 @@ csio_free_fcfinfo(struct kref *kref)
+ void
+ csio_lnode_state_to_str(struct csio_lnode *ln, int8_t *str)
+ {
+- if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_uninit)) {
++ if (csio_get_state(&ln->sm) == csio_lns_uninit) {
+ strcpy(str, "UNINIT");
+ return;
+ }
+- if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready)) {
++ if (csio_get_state(&ln->sm) == csio_lns_ready) {
+ strcpy(str, "READY");
+ return;
+ }
+- if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_offline)) {
++ if (csio_get_state(&ln->sm) == csio_lns_offline) {
+ strcpy(str, "OFFLINE");
+ return;
+ }
+diff --git a/drivers/scsi/csiostor/csio_rnode.c b/drivers/scsi/csiostor/csio_rnode.c
+index e9c3b04..4ba3a59 100644
+--- a/drivers/scsi/csiostor/csio_rnode.c
++++ b/drivers/scsi/csiostor/csio_rnode.c
+@@ -46,10 +46,10 @@ static int csio_rnode_init(struct csio_rnode *, struct csio_lnode *);
+ static void csio_rnode_exit(struct csio_rnode *);
+
+ /* Static machine forward declarations */
+-static void csio_rns_uninit(struct csio_rnode *, enum csio_rn_ev);
+-static void csio_rns_ready(struct csio_rnode *, enum csio_rn_ev);
+-static void csio_rns_offline(struct csio_rnode *, enum csio_rn_ev);
+-static void csio_rns_disappeared(struct csio_rnode *, enum csio_rn_ev);
++static void csio_rns_uninit(struct csio_sm *, uint32_t);
++static void csio_rns_ready(struct csio_sm *, uint32_t);
++static void csio_rns_offline(struct csio_sm *, uint32_t);
++static void csio_rns_disappeared(struct csio_sm *, uint32_t);
+
+ /* RNF event mapping */
+ static enum csio_rn_ev fwevt_to_rnevt[] = {
+@@ -88,13 +88,13 @@ static enum csio_rn_ev fwevt_to_rnevt[] = {
+ int
+ csio_is_rnode_ready(struct csio_rnode *rn)
+ {
+- return csio_match_state(rn, csio_rns_ready);
++ return csio_match_state(&rn->sm, csio_rns_ready);
+ }
+
+ static int
+ csio_is_rnode_uninit(struct csio_rnode *rn)
+ {
+- return csio_match_state(rn, csio_rns_uninit);
++ return csio_match_state(&rn->sm, csio_rns_uninit);
+ }
+
+ static int
+@@ -601,8 +601,10 @@ __csio_unreg_rnode(struct csio_rnode *rn)
+ *
+ */
+ static void
+-csio_rns_uninit(struct csio_rnode *rn, enum csio_rn_ev evt)
++csio_rns_uninit(struct csio_sm *_rn, uint32_t _evt)
+ {
++ struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm);
++ enum csio_rn_ev evt = _evt;
+ struct csio_lnode *ln = csio_rnode_to_lnode(rn);
+ int ret = 0;
+
+@@ -641,8 +643,10 @@ csio_rns_uninit(struct csio_rnode *rn, enum csio_rn_ev evt)
+ *
+ */
+ static void
+-csio_rns_ready(struct csio_rnode *rn, enum csio_rn_ev evt)
++csio_rns_ready(struct csio_sm *_rn, uint32_t _evt)
+ {
++ struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm);
++ enum csio_rn_ev evt = _evt;
+ struct csio_lnode *ln = csio_rnode_to_lnode(rn);
+ int ret = 0;
+
+@@ -726,8 +730,10 @@ csio_rns_ready(struct csio_rnode *rn, enum csio_rn_ev evt)
+ *
+ */
+ static void
+-csio_rns_offline(struct csio_rnode *rn, enum csio_rn_ev evt)
++csio_rns_offline(struct csio_sm *_rn, uint32_t _evt)
+ {
++ struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm);
++ enum csio_rn_ev evt = _evt;
+ struct csio_lnode *ln = csio_rnode_to_lnode(rn);
+ int ret = 0;
+
+@@ -785,8 +791,10 @@ csio_rns_offline(struct csio_rnode *rn, enum csio_rn_ev evt)
+ *
+ */
+ static void
+-csio_rns_disappeared(struct csio_rnode *rn, enum csio_rn_ev evt)
++csio_rns_disappeared(struct csio_sm *_rn, uint32_t _evt)
+ {
++ struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm);
++ enum csio_rn_ev evt = _evt;
+ struct csio_lnode *ln = csio_rnode_to_lnode(rn);
+ int ret = 0;
+
+diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
+index c2a6f9f..5a37cc4 100644
+--- a/drivers/scsi/csiostor/csio_scsi.c
++++ b/drivers/scsi/csiostor/csio_scsi.c
+@@ -65,12 +65,12 @@ static int csio_ddp_descs = 128;
+ static int csio_do_abrt_cls(struct csio_hw *,
+ struct csio_ioreq *, bool);
+
+-static void csio_scsis_uninit(struct csio_ioreq *, enum csio_scsi_ev);
+-static void csio_scsis_io_active(struct csio_ioreq *, enum csio_scsi_ev);
+-static void csio_scsis_tm_active(struct csio_ioreq *, enum csio_scsi_ev);
+-static void csio_scsis_aborting(struct csio_ioreq *, enum csio_scsi_ev);
+-static void csio_scsis_closing(struct csio_ioreq *, enum csio_scsi_ev);
+-static void csio_scsis_shost_cmpl_await(struct csio_ioreq *, enum csio_scsi_ev);
++static void csio_scsis_uninit(struct csio_sm *, uint32_t);
++static void csio_scsis_io_active(struct csio_sm *, uint32_t);
++static void csio_scsis_tm_active(struct csio_sm *, uint32_t);
++static void csio_scsis_aborting(struct csio_sm *, uint32_t);
++static void csio_scsis_closing(struct csio_sm *, uint32_t);
++static void csio_scsis_shost_cmpl_await(struct csio_sm *, uint32_t);
+
+ /*
+ * csio_scsi_match_io - Match an ioreq with the given SCSI level data.
+@@ -700,8 +700,10 @@ csio_scsi_abrt_cls(struct csio_ioreq *req, bool abort)
+ /* START: SCSI SM */
+ /*****************************************************************************/
+ static void
+-csio_scsis_uninit(struct csio_ioreq *req, enum csio_scsi_ev evt)
++csio_scsis_uninit(struct csio_sm *_req, uint32_t _evt)
+ {
++ struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm);
++ enum csio_scsi_ev evt = _evt;
+ struct csio_hw *hw = req->lnode->hwp;
+ struct csio_scsim *scsim = csio_hw_to_scsim(hw);
+
+@@ -770,8 +772,10 @@ csio_scsis_uninit(struct csio_ioreq *req, enum csio_scsi_ev evt)
+ }
+
+ static void
+-csio_scsis_io_active(struct csio_ioreq *req, enum csio_scsi_ev evt)
++csio_scsis_io_active(struct csio_sm *_req, uint32_t _evt)
+ {
++ struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm);
++ enum csio_scsi_ev evt = _evt;
+ struct csio_hw *hw = req->lnode->hwp;
+ struct csio_scsim *scm = csio_hw_to_scsim(hw);
+ struct csio_rnode *rn;
+@@ -842,8 +846,10 @@ csio_scsis_io_active(struct csio_ioreq *req, enum csio_scsi_ev evt)
+ }
+
+ static void
+-csio_scsis_tm_active(struct csio_ioreq *req, enum csio_scsi_ev evt)
++csio_scsis_tm_active(struct csio_sm *_req, uint32_t _evt)
+ {
++ struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm);
++ enum csio_scsi_ev evt = _evt;
+ struct csio_hw *hw = req->lnode->hwp;
+ struct csio_scsim *scm = csio_hw_to_scsim(hw);
+
+@@ -885,8 +891,10 @@ csio_scsis_tm_active(struct csio_ioreq *req, enum csio_scsi_ev evt)
+ }
+
+ static void
+-csio_scsis_aborting(struct csio_ioreq *req, enum csio_scsi_ev evt)
++csio_scsis_aborting(struct csio_sm *_req, uint32_t _evt)
+ {
++ struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm);
++ enum csio_scsi_ev evt = _evt;
+ struct csio_hw *hw = req->lnode->hwp;
+ struct csio_scsim *scm = csio_hw_to_scsim(hw);
+
+@@ -982,8 +990,10 @@ csio_scsis_aborting(struct csio_ioreq *req, enum csio_scsi_ev evt)
+ }
+
+ static void
+-csio_scsis_closing(struct csio_ioreq *req, enum csio_scsi_ev evt)
++csio_scsis_closing(struct csio_sm *_req, uint32_t _evt)
+ {
++ struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm);
++ enum csio_scsi_ev evt = _evt;
+ struct csio_hw *hw = req->lnode->hwp;
+ struct csio_scsim *scm = csio_hw_to_scsim(hw);
+
+@@ -1046,8 +1056,11 @@ csio_scsis_closing(struct csio_ioreq *req, enum csio_scsi_ev evt)
+ }
+
+ static void
+-csio_scsis_shost_cmpl_await(struct csio_ioreq *req, enum csio_scsi_ev evt)
++csio_scsis_shost_cmpl_await(struct csio_sm *_req, uint32_t _evt)
+ {
++ struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm);
++ enum csio_scsi_ev evt = _evt;
++
+ switch (evt) {
+ case CSIO_SCSIE_ABORT:
+ case CSIO_SCSIE_CLOSE:
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c
index f3bb7af..ead83a2 100644
--- a/drivers/scsi/cxgbi/libcxgbi.c
@@ -56464,6 +68603,64 @@ index 045c4e1..13de803 100644
error = bus_register(&fcoe_bus_type);
if (error)
+diff --git a/drivers/scsi/fcoe/fcoe_transport.c b/drivers/scsi/fcoe/fcoe_transport.c
+index d7597c0..fa26730 100644
+--- a/drivers/scsi/fcoe/fcoe_transport.c
++++ b/drivers/scsi/fcoe/fcoe_transport.c
+@@ -32,13 +32,13 @@ MODULE_AUTHOR("Open-FCoE.org");
+ MODULE_DESCRIPTION("FIP discovery protocol and FCoE transport for FCoE HBAs");
+ MODULE_LICENSE("GPL v2");
+
+-static int fcoe_transport_create(const char *, struct kernel_param *);
+-static int fcoe_transport_destroy(const char *, struct kernel_param *);
++static int fcoe_transport_create(const char *, const struct kernel_param *);
++static int fcoe_transport_destroy(const char *, const struct kernel_param *);
+ static int fcoe_transport_show(char *buffer, const struct kernel_param *kp);
+ static struct fcoe_transport *fcoe_transport_lookup(struct net_device *device);
+ static struct fcoe_transport *fcoe_netdev_map_lookup(struct net_device *device);
+-static int fcoe_transport_enable(const char *, struct kernel_param *);
+-static int fcoe_transport_disable(const char *, struct kernel_param *);
++static int fcoe_transport_enable(const char *, const struct kernel_param *);
++static int fcoe_transport_disable(const char *, const struct kernel_param *);
+ static int libfcoe_device_notification(struct notifier_block *notifier,
+ ulong event, void *ptr);
+
+@@ -842,7 +842,7 @@ EXPORT_SYMBOL(fcoe_ctlr_destroy_store);
+ *
+ * Returns: 0 for success
+ */
+-static int fcoe_transport_create(const char *buffer, struct kernel_param *kp)
++static int fcoe_transport_create(const char *buffer, const struct kernel_param *kp)
+ {
+ int rc = -ENODEV;
+ struct net_device *netdev = NULL;
+@@ -907,7 +907,7 @@ out_nodev:
+ *
+ * Returns: 0 for success
+ */
+-static int fcoe_transport_destroy(const char *buffer, struct kernel_param *kp)
++static int fcoe_transport_destroy(const char *buffer, const struct kernel_param *kp)
+ {
+ int rc = -ENODEV;
+ struct net_device *netdev = NULL;
+@@ -951,7 +951,7 @@ out_nodev:
+ *
+ * Returns: 0 for success
+ */
+-static int fcoe_transport_disable(const char *buffer, struct kernel_param *kp)
++static int fcoe_transport_disable(const char *buffer, const struct kernel_param *kp)
+ {
+ int rc = -ENODEV;
+ struct net_device *netdev = NULL;
+@@ -985,7 +985,7 @@ out_nodev:
+ *
+ * Returns: 0 for success
+ */
+-static int fcoe_transport_enable(const char *buffer, struct kernel_param *kp)
++static int fcoe_transport_enable(const char *buffer, const struct kernel_param *kp)
+ {
+ int rc = -ENODEV;
+ struct net_device *netdev = NULL;
diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
index 82ac1cd..aeee84c 100644
--- a/drivers/scsi/hosts.c
@@ -56487,10 +68684,10 @@ index 82ac1cd..aeee84c 100644
/* These three are default values which can be overridden */
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
-index a386036..03dff12 100644
+index 38ce0e3..f74fc2a 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
-@@ -916,10 +916,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q)
+@@ -912,10 +912,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)
@@ -56503,7 +68700,7 @@ index a386036..03dff12 100644
if ((rq->head[rq->current_entry] & 1) == rq->wraparound) {
a = rq->head[rq->current_entry];
-@@ -1101,7 +1101,7 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h,
+@@ -1097,7 +1097,7 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h,
break;
default:
set_performant_mode(h, c, reply_queue);
@@ -56512,7 +68709,7 @@ index a386036..03dff12 100644
}
}
-@@ -6746,17 +6746,17 @@ static void __iomem *remap_pci_mem(ulong base, ulong size)
+@@ -6839,17 +6839,17 @@ static void __iomem *remap_pci_mem(ulong base, ulong size)
static inline unsigned long get_next_completion(struct ctlr_info *h, u8 q)
{
@@ -56533,7 +68730,7 @@ index a386036..03dff12 100644
(h->interrupts_enabled == 0);
}
-@@ -7684,7 +7684,7 @@ static int hpsa_pci_init(struct ctlr_info *h)
+@@ -7777,7 +7777,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;
@@ -56542,7 +68739,7 @@ index a386036..03dff12 100644
h->needs_abort_tags_swizzled =
ctlr_needs_abort_tags_swizzled(h->board_id);
-@@ -8083,7 +8083,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
+@@ -8176,7 +8176,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
unsigned long flags;
u32 lockup_detected;
@@ -56551,7 +68748,7 @@ index a386036..03dff12 100644
spin_lock_irqsave(&h->lock, flags);
lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET);
if (!lockup_detected) {
-@@ -8419,7 +8419,7 @@ reinit_after_soft_reset:
+@@ -8512,7 +8512,7 @@ reinit_after_soft_reset:
}
/* make sure the board interrupts are off */
@@ -56560,7 +68757,7 @@ index a386036..03dff12 100644
rc = hpsa_request_irqs(h, do_hpsa_intr_msi, do_hpsa_intr_intx);
if (rc)
-@@ -8477,7 +8477,7 @@ reinit_after_soft_reset:
+@@ -8570,7 +8570,7 @@ reinit_after_soft_reset:
* fake ones to scoop up any residual completions.
*/
spin_lock_irqsave(&h->lock, flags);
@@ -56569,7 +68766,7 @@ index a386036..03dff12 100644
spin_unlock_irqrestore(&h->lock, flags);
hpsa_free_irqs(h);
rc = hpsa_request_irqs(h, hpsa_msix_discard_completions,
-@@ -8507,9 +8507,9 @@ reinit_after_soft_reset:
+@@ -8600,9 +8600,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");
@@ -56581,7 +68778,7 @@ index a386036..03dff12 100644
rc = controller_reset_failed(h->cfgtable);
if (rc)
-@@ -8536,7 +8536,7 @@ reinit_after_soft_reset:
+@@ -8629,7 +8629,7 @@ reinit_after_soft_reset:
/* Turn the interrupts on so we can service requests */
@@ -56590,7 +68787,7 @@ index a386036..03dff12 100644
hpsa_hba_inquiry(h);
-@@ -8557,7 +8557,7 @@ reinit_after_soft_reset:
+@@ -8650,7 +8650,7 @@ reinit_after_soft_reset:
clean7: /* perf, sg, cmd, irq, shost, pci, lu, aer/h */
hpsa_free_performant_mode(h);
@@ -56599,7 +68796,7 @@ index a386036..03dff12 100644
clean6: /* sg, cmd, irq, pci, lockup, wq/aer/h */
hpsa_free_sg_chain_blocks(h);
clean5: /* cmd, irq, shost, pci, lu, aer/h */
-@@ -8692,7 +8692,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
+@@ -8785,7 +8785,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
* To write all data in the battery backed cache to disks
*/
hpsa_flush_cache(h);
@@ -56608,7 +68805,7 @@ index a386036..03dff12 100644
hpsa_free_irqs(h); /* init_one 4 */
hpsa_disable_interrupt_mode(h); /* pci_init 2 */
}
-@@ -8834,7 +8834,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -8927,7 +8927,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));
@@ -56617,7 +68814,7 @@ index a386036..03dff12 100644
/* This is a bit complicated. There are 8 registers on
* the controller which we write to to tell it 8 different
-@@ -8876,7 +8876,7 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -8969,7 +8969,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))
@@ -56626,7 +68823,7 @@ index a386036..03dff12 100644
/* Controller spec: zero out this buffer. */
for (i = 0; i < h->nreply_queues; i++)
-@@ -8906,12 +8906,12 @@ static int hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -8999,12 +8999,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) {
@@ -56642,7 +68839,7 @@ index a386036..03dff12 100644
writel(4, &h->cfgtable->HostWrite.CoalIntCount);
}
diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
-index ae5beda..59e7332 100644
+index fdd39fc..a2176e0 100644
--- a/drivers/scsi/hpsa.h
+++ b/drivers/scsi/hpsa.h
@@ -177,7 +177,7 @@ struct ctlr_info {
@@ -56746,9 +68943,36 @@ index 4d1c511..d5744cb 100644
wait_queue_head_t reset_wq;
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
-index 43ac626..1bf014e9 100644
+index d6a691e..59e3128 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)
+ **/
+ static void ipr_do_req(struct ipr_cmnd *ipr_cmd,
+ void (*done) (struct ipr_cmnd *),
+- void (*timeout_func) (struct ipr_cmnd *), u32 timeout)
++ void (*timeout_func) (unsigned long), u32 timeout)
+ {
+ list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q);
+
+@@ -955,7 +955,7 @@ static void ipr_do_req(struct ipr_cmnd *ipr_cmd,
+
+ ipr_cmd->timer.data = (unsigned long) ipr_cmd;
+ ipr_cmd->timer.expires = jiffies + timeout;
+- ipr_cmd->timer.function = (void (*)(unsigned long))timeout_func;
++ ipr_cmd->timer.function = timeout_func;
+
+ add_timer(&ipr_cmd->timer);
+
+@@ -1037,7 +1037,7 @@ static void ipr_init_ioadl(struct ipr_cmnd *ipr_cmd, dma_addr_t dma_addr,
+ * none
+ **/
+ static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd,
+- void (*timeout_func) (struct ipr_cmnd *ipr_cmd),
++ void (*timeout_func) (unsigned long ipr_cmd),
+ u32 timeout)
+ {
+ struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
@@ -1057,7 +1057,7 @@ static int ipr_get_hrrq_index(struct ipr_ioa_cfg *ioa_cfg)
if (ioa_cfg->hrrq_num == 1)
hrrq = 0;
@@ -56758,7 +68982,60 @@ index 43ac626..1bf014e9 100644
hrrq = (hrrq % (ioa_cfg->hrrq_num - 1)) + 1;
}
return hrrq;
-@@ -8107,9 +8107,9 @@ static void ipr_init_ioa_mem(struct ipr_ioa_cfg *ioa_cfg)
+@@ -2600,8 +2600,9 @@ static void ipr_process_error(struct ipr_cmnd *ipr_cmd)
+ * Return value:
+ * none
+ **/
+-static void ipr_timeout(struct ipr_cmnd *ipr_cmd)
++static void ipr_timeout(unsigned long _ipr_cmd)
+ {
++ struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd;
+ unsigned long lock_flags = 0;
+ struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+@@ -2632,8 +2633,9 @@ static void ipr_timeout(struct ipr_cmnd *ipr_cmd)
+ * Return value:
+ * none
+ **/
+-static void ipr_oper_timeout(struct ipr_cmnd *ipr_cmd)
++static void ipr_oper_timeout(unsigned long _ipr_cmd)
+ {
++ struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd;
+ unsigned long lock_flags = 0;
+ struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+@@ -5263,8 +5265,9 @@ static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd)
+ * Return value:
+ * none
+ **/
+-static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd)
++static void ipr_abort_timeout(unsigned long _ipr_cmd)
+ {
++ struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd;
+ struct ipr_cmnd *reset_cmd;
+ struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+ struct ipr_cmd_pkt *cmd_pkt;
+@@ -8036,8 +8039,9 @@ static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd)
+ * Return value:
+ * none
+ **/
+-static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd)
++static void ipr_reset_timer_done(unsigned long _ipr_cmd)
+ {
++ struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd;
+ struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+ unsigned long lock_flags = 0;
+
+@@ -8075,7 +8079,7 @@ static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd,
+
+ ipr_cmd->timer.data = (unsigned long) ipr_cmd;
+ ipr_cmd->timer.expires = jiffies + timeout;
+- ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done;
++ ipr_cmd->timer.function = ipr_reset_timer_done;
+ add_timer(&ipr_cmd->timer);
+ }
+
+@@ -8105,9 +8109,9 @@ static void ipr_init_ioa_mem(struct ipr_ioa_cfg *ioa_cfg)
ioa_cfg->identify_hrrq_index = 0;
if (ioa_cfg->hrrq_num == 1)
@@ -56770,8 +69047,35 @@ index 43ac626..1bf014e9 100644
/* Zero out config table */
memset(ioa_cfg->u.cfg_table, 0, ioa_cfg->cfg_table_size);
+@@ -8161,7 +8165,7 @@ static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd)
+
+ ipr_cmd->timer.data = (unsigned long) ipr_cmd;
+ ipr_cmd->timer.expires = jiffies + stage_time * HZ;
+- ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout;
++ ipr_cmd->timer.function = ipr_oper_timeout;
+ ipr_cmd->done = ipr_reset_ioa_job;
+ add_timer(&ipr_cmd->timer);
+
+@@ -8233,7 +8237,7 @@ static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd)
+
+ ipr_cmd->timer.data = (unsigned long) ipr_cmd;
+ ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ);
+- ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout;
++ ipr_cmd->timer.function = ipr_oper_timeout;
+ ipr_cmd->done = ipr_reset_ioa_job;
+ add_timer(&ipr_cmd->timer);
+ list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q);
+@@ -9221,7 +9225,7 @@ static void ipr_pci_perm_failure(struct pci_dev *pdev)
+ * PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT
+ */
+ static pci_ers_result_t ipr_pci_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ switch (state) {
+ case pci_channel_io_frozen:
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
-index a34c7a5..797901a 100644
+index 56c5706..209ec50 100644
--- a/drivers/scsi/ipr.h
+++ b/drivers/scsi/ipr.h
@@ -1535,7 +1535,7 @@ struct ipr_ioa_cfg {
@@ -56942,10 +69246,10 @@ 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 ceee9a3..59939c5 100644
+index 90a3ca5..a68c8cd 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
-@@ -435,7 +435,7 @@ struct lpfc_vport {
+@@ -430,7 +430,7 @@ struct lpfc_vport {
struct dentry *debug_nodelist;
struct dentry *vport_debugfs_root;
struct lpfc_debugfs_trc *disc_trc;
@@ -56954,7 +69258,7 @@ index ceee9a3..59939c5 100644
#endif
uint8_t stat_data_enabled;
uint8_t stat_data_blocked;
-@@ -887,8 +887,8 @@ struct lpfc_hba {
+@@ -891,8 +891,8 @@ struct lpfc_hba {
struct timer_list fabric_block_timer;
unsigned long bit_flags;
#define FABRIC_COMANDS_BLOCKED 0
@@ -56965,7 +69269,7 @@ index ceee9a3..59939c5 100644
unsigned long last_rsrc_error_time;
unsigned long last_ramp_down_time;
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-@@ -923,7 +923,7 @@ struct lpfc_hba {
+@@ -927,7 +927,7 @@ struct lpfc_hba {
struct dentry *debug_slow_ring_trc;
struct lpfc_debugfs_trc *slow_ring_trc;
@@ -57058,10 +69362,19 @@ index 25aa9b9..d700a65 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 db9446c..627edd4 100644
+index a544366..311a655 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
-@@ -11425,8 +11425,10 @@ lpfc_init(void)
+@@ -11027,7 +11027,7 @@ lpfc_pci_resume_one(struct pci_dev *pdev)
+ * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
+ **/
+ static pci_ers_result_t
+-lpfc_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++lpfc_io_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct Scsi_Host *shost = pci_get_drvdata(pdev);
+ struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
+@@ -11435,8 +11435,10 @@ lpfc_init(void)
"misc_register returned with status %d", error);
if (lpfc_enable_npiv) {
@@ -57075,7 +69388,7 @@ index db9446c..627edd4 100644
lpfc_transport_template =
fc_attach_transport(&lpfc_transport_functions);
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
-index 4679ed4..4ddcfea 100644
+index 152b3c8..cfb6a1d 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -261,7 +261,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba)
@@ -57122,8 +69435,43 @@ index c0f7c8c..2903f29 100644
u16 max_mfi_cmds;
u16 max_scsi_cmds;
u32 max_sectors_per_req;
+diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
+index 83658ac..4269881 100644
+--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
++++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
+@@ -100,7 +100,7 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
+ *
+ */
+ static int
+-_scsih_set_fwfault_debug(const char *val, struct kernel_param *kp)
++_scsih_set_fwfault_debug(const char *val, const struct kernel_param *kp)
+ {
+ int ret = param_set_int(val, kp);
+ struct MPT3SAS_ADAPTER *ioc;
+diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+index 9ab77b0..3cc9611 100644
+--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+@@ -282,7 +282,7 @@ struct _scsi_io_transfer {
+ * Note: The logging levels are defined in mpt3sas_debug.h.
+ */
+ static int
+-_scsih_set_debug_level(const char *val, struct kernel_param *kp)
++_scsih_set_debug_level(const char *val, const struct kernel_param *kp)
+ {
+ int ret = param_set_int(val, kp);
+ struct MPT3SAS_ADAPTER *ioc;
+@@ -8702,7 +8702,7 @@ scsih_resume(struct pci_dev *pdev)
+ * PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT
+ */
+ pci_ers_result_t
+-scsih_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++scsih_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct Scsi_Host *shost = pci_get_drvdata(pdev);
+ struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
-index b2a88200..f469ddd 100644
+index b2a88200..d66f0cc 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -201,8 +201,8 @@ static int pmcraid_slave_alloc(struct scsi_device *scsi_dev)
@@ -57137,6 +69485,105 @@ index b2a88200..f469ddd 100644
rc = 0;
}
spin_unlock_irqrestore(&pinstance->resource_lock, lock_flags);
+@@ -557,8 +557,9 @@ static void pmcraid_reset_type(struct pmcraid_instance *pinstance)
+
+ static void pmcraid_ioa_reset(struct pmcraid_cmd *);
+
+-static void pmcraid_bist_done(struct pmcraid_cmd *cmd)
++static void pmcraid_bist_done(unsigned long _cmd)
+ {
++ struct pmcraid_cmd *cmd = (struct pmcraid_cmd *)_cmd;
+ struct pmcraid_instance *pinstance = cmd->drv_inst;
+ unsigned long lock_flags;
+ int rc;
+@@ -573,8 +574,7 @@ static void pmcraid_bist_done(struct pmcraid_cmd *cmd)
+ cmd->timer.expires = jiffies + cmd->time_left;
+ cmd->time_left = 0;
+ cmd->timer.data = (unsigned long)cmd;
+- cmd->timer.function =
+- (void (*)(unsigned long))pmcraid_bist_done;
++ cmd->timer.function = pmcraid_bist_done;
+ add_timer(&cmd->timer);
+ } else {
+ cmd->time_left = 0;
+@@ -607,7 +607,7 @@ static void pmcraid_start_bist(struct pmcraid_cmd *cmd)
+ cmd->time_left = msecs_to_jiffies(PMCRAID_BIST_TIMEOUT);
+ cmd->timer.data = (unsigned long)cmd;
+ cmd->timer.expires = jiffies + msecs_to_jiffies(PMCRAID_BIST_TIMEOUT);
+- cmd->timer.function = (void (*)(unsigned long))pmcraid_bist_done;
++ cmd->timer.function = pmcraid_bist_done;
+ add_timer(&cmd->timer);
+ }
+
+@@ -617,8 +617,9 @@ static void pmcraid_start_bist(struct pmcraid_cmd *cmd)
+ * Return value
+ * None
+ */
+-static void pmcraid_reset_alert_done(struct pmcraid_cmd *cmd)
++static void pmcraid_reset_alert_done(unsigned long _cmd)
+ {
++ struct pmcraid_cmd *cmd = (struct pmcraid_cmd *)_cmd;
+ struct pmcraid_instance *pinstance = cmd->drv_inst;
+ u32 status = ioread32(pinstance->ioa_status);
+ unsigned long lock_flags;
+@@ -639,8 +640,7 @@ static void pmcraid_reset_alert_done(struct pmcraid_cmd *cmd)
+ cmd->time_left -= PMCRAID_CHECK_FOR_RESET_TIMEOUT;
+ cmd->timer.data = (unsigned long)cmd;
+ cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT;
+- cmd->timer.function =
+- (void (*)(unsigned long))pmcraid_reset_alert_done;
++ cmd->timer.function = pmcraid_reset_alert_done;
+ add_timer(&cmd->timer);
+ }
+ }
+@@ -678,8 +678,7 @@ static void pmcraid_reset_alert(struct pmcraid_cmd *cmd)
+ cmd->time_left = PMCRAID_RESET_TIMEOUT;
+ cmd->timer.data = (unsigned long)cmd;
+ cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT;
+- cmd->timer.function =
+- (void (*)(unsigned long))pmcraid_reset_alert_done;
++ cmd->timer.function = pmcraid_reset_alert_done;
+ add_timer(&cmd->timer);
+
+ iowrite32(DOORBELL_IOA_RESET_ALERT,
+@@ -704,8 +703,9 @@ static void pmcraid_reset_alert(struct pmcraid_cmd *cmd)
+ * Return value:
+ * None
+ */
+-static void pmcraid_timeout_handler(struct pmcraid_cmd *cmd)
++static void pmcraid_timeout_handler(unsigned long _cmd)
+ {
++ struct pmcraid_cmd *cmd = (struct pmcraid_cmd *)_cmd;
+ struct pmcraid_instance *pinstance = cmd->drv_inst;
+ unsigned long lock_flags;
+
+@@ -920,7 +920,7 @@ static void pmcraid_send_cmd(
+ struct pmcraid_cmd *cmd,
+ void (*cmd_done) (struct pmcraid_cmd *),
+ unsigned long timeout,
+- void (*timeout_func) (struct pmcraid_cmd *)
++ void (*timeout_func) (unsigned long)
+ )
+ {
+ /* initialize done function */
+@@ -930,7 +930,7 @@ static void pmcraid_send_cmd(
+ /* setup timeout handler */
+ cmd->timer.data = (unsigned long)cmd;
+ cmd->timer.expires = jiffies + timeout;
+- cmd->timer.function = (void (*)(unsigned long))timeout_func;
++ cmd->timer.function = timeout_func;
+ add_timer(&cmd->timer);
+ }
+
+@@ -1968,7 +1968,7 @@ static void pmcraid_soft_reset(struct pmcraid_cmd *cmd)
+ cmd->timer.data = (unsigned long)cmd;
+ cmd->timer.expires = jiffies +
+ msecs_to_jiffies(PMCRAID_TRANSOP_TIMEOUT);
+- cmd->timer.function = (void (*)(unsigned long))pmcraid_timeout_handler;
++ cmd->timer.function = pmcraid_timeout_handler;
+
+ if (!timer_pending(&cmd->timer))
+ add_timer(&cmd->timer);
@@ -2641,9 +2641,9 @@ static int pmcraid_error_handler(struct pmcraid_cmd *cmd)
/* If this was a SCSI read/write command keep count of errors */
@@ -57230,10 +69677,10 @@ index e1d150f..6c6df44 100644
/* To indicate add/delete/modify during CCN */
u8 change_detected;
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
-index 6b942d9..cd44452 100644
+index 6992ebc..30d7691 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
-@@ -2206,7 +2206,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable)
+@@ -2242,7 +2242,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable)
return 0;
}
@@ -57242,7 +69689,7 @@ index 6b942d9..cd44452 100644
.show_host_node_name = 1,
.show_host_port_name = 1,
-@@ -2254,7 +2254,7 @@ struct fc_function_template qla2xxx_transport_functions = {
+@@ -2290,7 +2290,7 @@ struct fc_function_template qla2xxx_transport_functions = {
.bsg_timeout = qla24xx_bsg_timeout,
};
@@ -57252,10 +69699,21 @@ index 6b942d9..cd44452 100644
.show_host_node_name = 1,
.show_host_port_name = 1,
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
-index 7686bfe..4710893 100644
+index 0103e46..6220a84 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
-@@ -571,8 +571,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t);
+@@ -176,8 +176,8 @@ extern void qla2x00_disable_board_on_pci_error(struct work_struct *);
+ */
+ extern struct scsi_host_template qla2xxx_driver_template;
+ extern struct scsi_transport_template *qla2xxx_transport_vport_template;
+-extern void qla2x00_timer(scsi_qla_host_t *);
+-extern void qla2x00_start_timer(scsi_qla_host_t *, void *, unsigned long);
++extern void qla2x00_timer(unsigned long);
++extern void qla2x00_start_timer(scsi_qla_host_t *, void (*)(unsigned long), unsigned long);
+ extern void qla24xx_deallocate_vp_id(scsi_qla_host_t *);
+ extern int qla24xx_disable_vp (scsi_qla_host_t *);
+ extern int qla24xx_enable_vp (scsi_qla_host_t *);
+@@ -578,8 +578,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t);
struct device_attribute;
extern struct device_attribute *qla2x00_host_attrs[];
struct fc_function_template;
@@ -57267,10 +69725,25 @@ index 7686bfe..4710893 100644
extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool);
extern void qla2x00_init_host_attr(scsi_qla_host_t *);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
-index fc6674d..8f3aa03 100644
+index f6c7ce3..2dd675b 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
-@@ -1429,8 +1429,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha)
+@@ -291,12 +291,12 @@ struct scsi_transport_template *qla2xxx_transport_vport_template = NULL;
+ */
+
+ __inline__ void
+-qla2x00_start_timer(scsi_qla_host_t *vha, void *func, unsigned long interval)
++qla2x00_start_timer(scsi_qla_host_t *vha, void (*func)(unsigned long), unsigned long interval)
+ {
+ init_timer(&vha->timer);
+ vha->timer.expires = jiffies + interval * HZ;
+ vha->timer.data = (unsigned long)vha;
+- vha->timer.function = (void (*)(unsigned long))func;
++ vha->timer.function = func;
+ add_timer(&vha->timer);
+ vha->timer_active = 1;
+ }
+@@ -1441,8 +1441,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha)
!pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) {
/* Ok, a 64bit DMA mask is applicable. */
ha->flags.enable_64bit_addressing = 1;
@@ -57283,20 +69756,51 @@ index fc6674d..8f3aa03 100644
return;
}
}
+@@ -5290,8 +5292,9 @@ qla2x00_rst_aen(scsi_qla_host_t *vha)
+ * Context: Interrupt
+ ***************************************************************************/
+ void
+-qla2x00_timer(scsi_qla_host_t *vha)
++qla2x00_timer(unsigned long _vha)
+ {
++ scsi_qla_host_t *vha = (scsi_qla_host_t *)_vha;
+ unsigned long cpu_flags = 0;
+ int start_dpc = 0;
+ int index;
+@@ -5553,7 +5556,7 @@ qla2x00_release_firmware(void)
+ }
+
+ static pci_ers_result_t
+-qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++qla2xxx_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ 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 75514a1..8526741 100644
+index ee967be..7fcb8c0 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
-@@ -506,7 +506,7 @@ static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd)
+@@ -667,7 +667,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 */
- atomic_inc(&vha->vha_tgt.qla_tgt->tgt_global_resets_count);
+ atomic_inc_unchecked(&vha->vha_tgt.qla_tgt->tgt_global_resets_count);
+ spin_lock_irqsave(&ha->tgt.sess_lock, flags);
qlt_clear_tgt_db(vha->vha_tgt.qla_tgt);
- #if 0 /* FIXME: do we need to choose a session here? */
- if (!list_empty(&ha->tgt.qla_tgt->sess_list)) {
-@@ -5536,7 +5536,7 @@ static struct qla_tgt_sess *qlt_make_local_sess(struct scsi_qla_host *vha,
+ spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
+@@ -834,8 +834,9 @@ static void qlt_undelete_sess(struct qla_tgt_sess *sess)
+ sess->deleted = 0;
+ }
+
+-static void qlt_del_sess_work_fn(struct delayed_work *work)
++static void qlt_del_sess_work_fn(struct work_struct *_work)
+ {
++ struct delayed_work *work = container_of(_work, struct delayed_work, work);
+ struct qla_tgt *tgt = container_of(work, struct qla_tgt,
+ sess_del_work);
+ struct scsi_qla_host *vha = tgt->vha;
+@@ -5806,7 +5807,7 @@ static struct qla_tgt_sess *qlt_make_local_sess(struct scsi_qla_host *vha,
retry:
global_resets =
@@ -57305,8 +69809,8 @@ index 75514a1..8526741 100644
rc = qla24xx_get_loop_id(vha, s_id, &loop_id);
if (rc != 0) {
-@@ -5563,12 +5563,12 @@ retry:
- return NULL;
+@@ -5845,12 +5846,12 @@ retry:
+ }
if (global_resets !=
- atomic_read(&vha->vha_tgt.qla_tgt->tgt_global_resets_count)) {
@@ -57320,7 +69824,17 @@ index 75514a1..8526741 100644
qla_tgt->tgt_global_resets_count));
goto retry;
}
-@@ -5784,7 +5784,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha)
+@@ -6063,8 +6064,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);
+- INIT_DELAYED_WORK(&tgt->sess_del_work,
+- (void (*)(struct work_struct *))qlt_del_sess_work_fn);
++ INIT_DELAYED_WORK(&tgt->sess_del_work, qlt_del_sess_work_fn);
+ spin_lock_init(&tgt->sess_work_lock);
+ INIT_WORK(&tgt->sess_work, qlt_sess_work_fn);
+ INIT_LIST_HEAD(&tgt->sess_works_list);
+@@ -6072,7 +6072,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha)
INIT_LIST_HEAD(&tgt->srr_ctio_list);
INIT_LIST_HEAD(&tgt->srr_imm_list);
INIT_WORK(&tgt->srr_work, qlt_handle_srr_work);
@@ -57330,10 +69844,10 @@ index 75514a1..8526741 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 bca584a..9cb3ed9 100644
+index 22a6a76..7f73de1 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
-@@ -876,7 +876,7 @@ struct qla_tgt {
+@@ -877,7 +877,7 @@ struct qla_tgt {
struct list_head srr_imm_list;
struct work_struct srr_work;
@@ -57356,9 +69870,27 @@ index a7cfc27..151f483 100644
uint32_t default_time2wait; /* Default Min time between
* relogins (+aens) */
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
-index 01c3610..3e92008 100644
+index 01c3610..f287da9 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
+@@ -3956,7 +3956,7 @@ exit_session_conn_param:
+ * Timer routines
+ */
+
+-static void qla4xxx_start_timer(struct scsi_qla_host *ha, void *func,
++static void qla4xxx_start_timer(struct scsi_qla_host *ha, void (*func)(unsigned long),
+ unsigned long interval)
+ {
+ DEBUG(printk("scsi: %s: Starting timer thread for adapter %d\n",
+@@ -3964,7 +3964,7 @@ static void qla4xxx_start_timer(struct scsi_qla_host *ha, void *func,
+ init_timer(&ha->timer);
+ ha->timer.expires = jiffies + interval * HZ;
+ ha->timer.data = (unsigned long)ha;
+- ha->timer.function = (void (*)(unsigned long))func;
++ ha->timer.function = func;
+ add_timer(&ha->timer);
+ ha->timer_active = 1;
+ }
@@ -4490,12 +4490,12 @@ static void qla4xxx_check_relogin_flash_ddb(struct iscsi_cls_session *cls_sess)
*/
if (!iscsi_is_session_online(cls_sess)) {
@@ -57374,7 +69906,18 @@ index 01c3610..3e92008 100644
ddb_entry->default_time2wait + 4));
set_bit(DPC_RELOGIN_DEVICE, &ha->dpc_flags);
atomic_set(&ddb_entry->retry_relogin_timer,
-@@ -6603,7 +6603,7 @@ static void qla4xxx_setup_flash_ddb_entry(struct scsi_qla_host *ha,
+@@ -4508,8 +4508,9 @@ static void qla4xxx_check_relogin_flash_ddb(struct iscsi_cls_session *cls_sess)
+ * qla4xxx_timer - checks every second for work to do.
+ * @ha: Pointer to host adapter structure.
+ **/
+-static void qla4xxx_timer(struct scsi_qla_host *ha)
++static void qla4xxx_timer(unsigned long _ha)
+ {
++ struct scsi_qla_host *ha = (struct scsi_qla_host *)_ha;
+ int start_dpc = 0;
+ uint16_t w;
+
+@@ -6603,7 +6604,7 @@ static void qla4xxx_setup_flash_ddb_entry(struct scsi_qla_host *ha,
atomic_set(&ddb_entry->retry_relogin_timer, INVALID_ENTRY);
atomic_set(&ddb_entry->relogin_timer, 0);
@@ -57383,8 +69926,17 @@ index 01c3610..3e92008 100644
def_timeout = le16_to_cpu(ddb_entry->fw_ddb_entry.def_timeout);
ddb_entry->default_relogin_timeout =
(def_timeout > LOGIN_TOV) && (def_timeout < LOGIN_TOV * 10) ?
+@@ -9557,7 +9558,7 @@ exit_host_reset:
+ * RECOVERED - driver's pci_resume()
+ */
+ static pci_ers_result_t
+-qla4xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
++qla4xxx_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state)
+ {
+ struct scsi_qla_host *ha = pci_get_drvdata(pdev);
+
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
-index d07fb65..4a162c0 100644
+index 1deb6ad..3057db5 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -591,7 +591,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
@@ -57397,10 +69949,10 @@ index d07fb65..4a162c0 100644
if (drv->done)
good_bytes = drv->done(cmd);
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
-index dd8ad2a..5c5a30c 100644
+index 8c6e318..1c58581 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
-@@ -1597,7 +1597,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)
+@@ -1599,7 +1599,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;
@@ -57409,7 +69961,7 @@ index dd8ad2a..5c5a30c 100644
/*
* SCSI request completion path will do scsi_device_unbusy(),
-@@ -1620,9 +1620,9 @@ static void scsi_softirq_done(struct request *rq)
+@@ -1622,9 +1622,9 @@ static void scsi_softirq_done(struct request *rq)
INIT_LIST_HEAD(&cmd->eh_entry);
@@ -57421,7 +69973,7 @@ index dd8ad2a..5c5a30c 100644
disposition = scsi_decide_disposition(cmd);
if (disposition != SUCCESS &&
-@@ -1663,7 +1663,7 @@ static int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
+@@ -1665,7 +1665,7 @@ static int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
struct Scsi_Host *host = cmd->device->host;
int rtn = 0;
@@ -57431,10 +69983,10 @@ index dd8ad2a..5c5a30c 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 c8115b4..c31cd19 100644
+index 00bc721..7a16d8a 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
-@@ -813,7 +813,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr, \
+@@ -818,7 +818,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr, \
char *buf) \
{ \
struct scsi_device *sdev = to_scsi_device(dev); \
@@ -57444,7 +69996,7 @@ index c8115b4..c31cd19 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 24eaaf6..de30ec9 100644
+index 8a88226..0d26fd1 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,
@@ -57514,8 +70066,21 @@ index e4b3d8f..3ab4dad 100644
err = class_register(&iscsi_transport_class);
if (err)
+diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
+index 319868f..a00cda5 100644
+--- a/drivers/scsi/scsi_transport_spi.c
++++ b/drivers/scsi/scsi_transport_spi.c
+@@ -758,7 +758,7 @@ spi_dv_device_compare_inquiry(struct scsi_device *sdev, u8 *buffer,
+ static enum spi_compare_returns
+ spi_dv_retrain(struct scsi_device *sdev, u8 *buffer, u8 *ptr,
+ enum spi_compare_returns
+- (*compare_fn)(struct scsi_device *, u8 *, u8 *, int))
++ (*compare_fn)(struct scsi_device *, u8 *, u8 *, const int))
+ {
+ struct spi_internal *i = to_spi_internal(sdev->host->transportt);
+ struct scsi_target *starget = sdev->sdev_target;
diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c
-index e3cd3ec..00560ec 100644
+index e3cd3ec..97ab643 100644
--- a/drivers/scsi/scsi_transport_srp.c
+++ b/drivers/scsi/scsi_transport_srp.c
@@ -35,7 +35,7 @@
@@ -57536,6 +70101,15 @@ index e3cd3ec..00560ec 100644
return 0;
}
+@@ -226,7 +226,7 @@ static ssize_t show_reconnect_delay(struct device *dev,
+
+ static ssize_t store_reconnect_delay(struct device *dev,
+ struct device_attribute *attr,
+- const char *buf, const size_t count)
++ const char *buf, size_t count)
+ {
+ struct srp_rport *rport = transport_class_to_srp_rport(dev);
+ int res, delay;
@@ -752,7 +752,7 @@ struct srp_rport *srp_rport_add(struct Scsi_Host *shost,
rport_fast_io_fail_timedout);
INIT_DELAYED_WORK(&rport->dev_loss_work, rport_dev_loss_timedout);
@@ -57546,7 +70120,7 @@ index e3cd3ec..00560ec 100644
transport_setup_device(&rport->dev);
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index 0d7c6e8..288e969 100644
+index 974ca5b..f42903f 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -112,7 +112,7 @@ static int sd_resume(struct device *);
@@ -57567,7 +70141,7 @@ index 0d7c6e8..288e969 100644
{
int result = SCpnt->result;
unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);
-@@ -3088,7 +3088,7 @@ static int sd_probe(struct device *dev)
+@@ -3071,7 +3071,7 @@ static int sd_probe(struct device *dev)
sdkp->disk = gd;
sdkp->index = index;
atomic_set(&sdkp->openers, 0);
@@ -57651,10 +70225,10 @@ index de2c1bf..60b8563 100644
.read = fuse_read,
};
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
-index dee1cb8..3626295 100644
+index 47eff80..415be5a 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -2506,7 +2506,7 @@ int spi_bus_unlock(struct spi_master *master)
+@@ -2528,7 +2528,7 @@ int spi_bus_unlock(struct spi_master *master)
EXPORT_SYMBOL_GPL(spi_bus_unlock);
/* portable code must never pass more than 32 bytes */
@@ -57695,7 +70269,7 @@ index aff9cdb..a2f1a81 100644
MKDEV(0, tdev->index), NULL, "%s", tdev->name);
if (IS_ERR(tdev->dev))
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
-index 7b4af51..63d4c51 100644
+index d57fade..106a0f7 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)
@@ -57753,8 +70327,21 @@ index 3ccdec9..fcd4277 100644
/**
* struct fbtft_display - Describes the display properties
+diff --git a/drivers/staging/gdm724x/gdm_lte.c b/drivers/staging/gdm724x/gdm_lte.c
+index 17d148f..68f3b55 100644
+--- a/drivers/staging/gdm724x/gdm_lte.c
++++ b/drivers/staging/gdm724x/gdm_lte.c
+@@ -410,7 +410,7 @@ static s32 gdm_lte_tx_nic_type(struct net_device *dev, struct sk_buff *skb)
+ return nic_type;
+ }
+
+-static int gdm_lte_tx(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t gdm_lte_tx(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct nic *nic = netdev_priv(dev);
+ u32 nic_type;
diff --git a/drivers/staging/gdm724x/gdm_tty.c b/drivers/staging/gdm724x/gdm_tty.c
-index e2c0f22..72fe9cc 100644
+index eb7e252..b7bd5e5 100644
--- a/drivers/staging/gdm724x/gdm_tty.c
+++ b/drivers/staging/gdm724x/gdm_tty.c
@@ -44,7 +44,7 @@
@@ -57766,6 +70353,19 @@ index e2c0f22..72fe9cc 100644
static struct tty_driver *gdm_driver[TTY_MAX_COUNT];
static struct gdm *gdm_table[TTY_MAX_COUNT][GDM_TTY_MINOR];
+diff --git a/drivers/staging/gdm72xx/gdm_wimax.c b/drivers/staging/gdm72xx/gdm_wimax.c
+index ba03f93..842d70c 100644
+--- a/drivers/staging/gdm72xx/gdm_wimax.c
++++ b/drivers/staging/gdm72xx/gdm_wimax.c
+@@ -250,7 +250,7 @@ int gdm_wimax_send_tx(struct sk_buff *skb, struct net_device *dev)
+ return ret;
+ }
+
+-static int gdm_wimax_tx(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t gdm_wimax_tx(struct sk_buff *skb, struct net_device *dev)
+ {
+ int ret = 0;
+
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 50c162e..b5d8b7e 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -57780,7 +70380,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 35acb1a..055b04d 100644
+index f45ebed..490e439 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)
@@ -57794,8 +70394,25 @@ index 35acb1a..055b04d 100644
GFP_KERNEL);
if (!st->iio_attr)
return -ENOMEM;
+diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h
+index f4fa725..e68e0ac 100644
+--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h
++++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h
+@@ -307,10 +307,8 @@ typedef struct ksock_conn {
+ struct ksock_route *ksnc_route; /* owning route */
+ struct list_head ksnc_list; /* stash on peer's conn list */
+ struct socket *ksnc_sock; /* actual socket */
+- void *ksnc_saved_data_ready; /* socket's original
+- * data_ready() callback */
+- void *ksnc_saved_write_space; /* socket's original
+- * write_space() callback */
++ void (*ksnc_saved_data_ready)(struct sock *sk); /* socket's original data_ready() callback */
++ void (*ksnc_saved_write_space)(struct sock *sk); /* socket's original write_space() callback */
+ 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/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c
-index 0605c65..d722199 100644
+index 1f04cc1..038e003 100644
--- a/drivers/staging/lustre/lnet/selftest/brw_test.c
+++ b/drivers/staging/lustre/lnet/selftest/brw_test.c
@@ -487,13 +487,11 @@ brw_server_handle(struct srpc_server_rpc *rpc)
@@ -57818,7 +70435,7 @@ index 0605c65..d722199 100644
srpc_service_t brw_test_service;
diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c
-index f18e500..77fef26 100644
+index 1a2da74..6cc62b9 100644
--- a/drivers/staging/lustre/lnet/selftest/framework.c
+++ b/drivers/staging/lustre/lnet/selftest/framework.c
@@ -1624,12 +1624,10 @@ static srpc_service_t sfw_services[] = {
@@ -57872,11 +70489,327 @@ index d426536..92f0086 100644
srpc_service_t ping_test_service;
void ping_init_test_service(void)
+diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+index b064b58..8af38df 100644
+--- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
++++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
+@@ -751,7 +751,7 @@ static inline ino_t lu_igif_ino(const struct lu_fid *fid)
+ return fid_seq(fid);
+ }
+
+-void lustre_swab_ost_id(struct ost_id *oid);
++void lustre_swab_ost_id(void *oid);
+
+ /**
+ * Get inode generation from a igif.
+@@ -818,8 +818,8 @@ static inline int fid_is_zero(const struct lu_fid *fid)
+ return fid_seq(fid) == 0 && fid_oid(fid) == 0;
+ }
+
+-void lustre_swab_lu_fid(struct lu_fid *fid);
+-void lustre_swab_lu_seq_range(struct lu_seq_range *range);
++void lustre_swab_lu_fid(void *fid);
++void lustre_swab_lu_seq_range(void *range);
+
+ static inline int lu_fid_eq(const struct lu_fid *f0, const struct lu_fid *f1)
+ {
+@@ -1137,7 +1137,7 @@ struct ptlrpc_body_v2 {
+ __u64 pb_padding[4];
+ };
+
+-void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb);
++void lustre_swab_ptlrpc_body(void *pb);
+
+ /* message body offset for lustre_msg_v2 */
+ /* ptlrpc body offset in all request/reply messages */
+@@ -1400,7 +1400,7 @@ struct obd_connect_data {
+ * the matching OBD_CONNECT flag, so that can be approved and landed easily to
+ * reserve the flag for future use. */
+
+-void lustre_swab_connect(struct obd_connect_data *ocd);
++void lustre_swab_connect(void *ocd);
+
+ /*
+ * Supported checksum algorithms. Up to 32 checksum types are supported.
+@@ -1742,10 +1742,10 @@ struct hsm_state_set {
+ __u64 hss_clearmask;
+ };
+
+-void lustre_swab_hsm_user_state(struct hsm_user_state *hus);
+-void lustre_swab_hsm_state_set(struct hsm_state_set *hss);
++void lustre_swab_hsm_user_state(void *hus);
++void lustre_swab_hsm_state_set(void *hss);
+
+-void lustre_swab_obd_statfs(struct obd_statfs *os);
++void lustre_swab_obd_statfs(void *os);
+
+ /* ost_body.data values for OST_BRW */
+
+@@ -1785,7 +1785,7 @@ struct obd_ioobj {
+ #define ioobj_max_brw_set(ioo, num) \
+ do { (ioo)->ioo_max_brw = ((num) - 1) << IOOBJ_MAX_BRW_BITS; } while (0)
+
+-void lustre_swab_obd_ioobj(struct obd_ioobj *ioo);
++void lustre_swab_obd_ioobj(void *ioo);
+
+ /* multiple of 8 bytes => can array */
+ struct niobuf_remote {
+@@ -1794,7 +1794,7 @@ struct niobuf_remote {
+ __u32 flags;
+ };
+
+-void lustre_swab_niobuf_remote(struct niobuf_remote *nbr);
++void lustre_swab_niobuf_remote(void *nbr);
+
+ /* lock value block communicated between the filter and llite */
+
+@@ -1869,7 +1869,7 @@ struct obd_quotactl {
+ struct obd_dqblk qc_dqblk;
+ };
+
+-void lustre_swab_obd_quotactl(struct obd_quotactl *q);
++void lustre_swab_obd_quotactl(void *q);
+
+ #define Q_QUOTACHECK 0x800100 /* deprecated as of 2.4 */
+ #define Q_INITQUOTA 0x800101 /* deprecated as of 2.4 */
+@@ -1918,7 +1918,7 @@ struct quota_body {
+ #define QUOTA_DQACQ_FL_REL 0x4 /* release quota */
+ #define QUOTA_DQACQ_FL_REPORT 0x8 /* report usage */
+
+-void lustre_swab_quota_body(struct quota_body *b);
++void lustre_swab_quota_body(void *b);
+
+ /* Quota types currently supported */
+ enum {
+@@ -2078,7 +2078,7 @@ typedef enum {
+ REINT_MAX
+ } mds_reint_t, mdt_reint_t;
+
+-void lustre_swab_generic_32s(__u32 *val);
++void lustre_swab_generic_32s(void *val);
+
+ /* the disposition of the intent outlines what was executed */
+ #define DISP_IT_EXECD 0x00000001
+@@ -2235,7 +2235,7 @@ struct mdt_body {
+ __u64 padding_10;
+ }; /* 216 */
+
+-void lustre_swab_mdt_body(struct mdt_body *b);
++void lustre_swab_mdt_body(void *b);
+
+ struct mdt_ioepoch {
+ struct lustre_handle handle;
+@@ -2244,7 +2244,7 @@ struct mdt_ioepoch {
+ __u32 padding;
+ };
+
+-void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b);
++void lustre_swab_mdt_ioepoch(void *b);
+
+ /* permissions for md_perm.mp_perm */
+ enum {
+@@ -2571,7 +2571,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);
+
+ struct lmv_desc {
+ __u32 ld_tgt_count; /* how many MDS's */
+@@ -2759,13 +2759,13 @@ union ldlm_gl_desc {
+ struct ldlm_gl_lquota_desc lquota_desc;
+ };
+
+-void lustre_swab_gl_desc(union ldlm_gl_desc *);
++void lustre_swab_gl_desc(void *);
+
+ struct ldlm_intent {
+ __u64 opc;
+ };
+
+-void lustre_swab_ldlm_intent(struct ldlm_intent *i);
++void lustre_swab_ldlm_intent(void *i);
+
+ struct ldlm_resource_desc {
+ ldlm_type_t lr_type;
+@@ -2790,7 +2790,7 @@ struct ldlm_request {
+ struct lustre_handle lock_handle[LDLM_LOCKREQ_HANDLES];
+ };
+
+-void lustre_swab_ldlm_request(struct ldlm_request *rq);
++void lustre_swab_ldlm_request(void *rq);
+
+ /* If LDLM_ENQUEUE, 1 slot is already occupied, 1 is available.
+ * Otherwise, 2 are available. */
+@@ -2812,7 +2812,7 @@ struct ldlm_reply {
+ __u64 lock_policy_res2;
+ };
+
+-void lustre_swab_ldlm_reply(struct ldlm_reply *r);
++void lustre_swab_ldlm_reply(void *r);
+
+ #define ldlm_flags_to_wire(flags) ((__u32)(flags))
+ #define ldlm_flags_from_wire(flags) ((__u64)(flags))
+@@ -2857,7 +2857,7 @@ struct mgs_target_info {
+ char mti_params[MTI_PARAM_MAXLEN];
+ };
+
+-void lustre_swab_mgs_target_info(struct mgs_target_info *oinfo);
++void lustre_swab_mgs_target_info(void *oinfo);
+
+ struct mgs_nidtbl_entry {
+ __u64 mne_version; /* table version of this entry */
+@@ -2884,14 +2884,14 @@ struct mgs_config_body {
+ __u32 mcb_units; /* # of units for bulk transfer */
+ };
+
+-void lustre_swab_mgs_config_body(struct mgs_config_body *body);
++void lustre_swab_mgs_config_body(void *body);
+
+ struct mgs_config_res {
+ __u64 mcr_offset; /* index of last config log */
+ __u64 mcr_size; /* size of the log */
+ };
+
+-void lustre_swab_mgs_config_res(struct mgs_config_res *body);
++void lustre_swab_mgs_config_res(void *body);
+
+ /* Config marker flags (in config log) */
+ #define CM_START 0x01
+@@ -3324,9 +3324,9 @@ struct ll_fiemap_info_key {
+ struct ll_user_fiemap fiemap;
+ };
+
+-void lustre_swab_ost_body(struct ost_body *b);
+-void lustre_swab_ost_last_id(__u64 *id);
+-void lustre_swab_fiemap(struct ll_user_fiemap *fiemap);
++void lustre_swab_ost_body(void *b);
++void lustre_swab_ost_last_id(void *id);
++void lustre_swab_fiemap(void *fiemap);
+
+ void lustre_swab_lov_user_md_v1(struct lov_user_md_v1 *lum);
+ void lustre_swab_lov_user_md_v3(struct lov_user_md_v3 *lum);
+@@ -3335,19 +3335,19 @@ void lustre_swab_lov_user_md_objects(struct lov_user_ost_data *lod,
+ void lustre_swab_lov_mds_md(struct lov_mds_md *lmm);
+
+ /* llog_swab.c */
+-void lustre_swab_llogd_body(struct llogd_body *d);
+-void lustre_swab_llog_hdr(struct llog_log_hdr *h);
+-void lustre_swab_llogd_conn_body(struct llogd_conn_body *d);
++void lustre_swab_llogd_body(void *d);
++void lustre_swab_llog_hdr(void *h);
++void lustre_swab_llogd_conn_body(void *d);
+ void lustre_swab_llog_rec(struct llog_rec_hdr *rec);
+
+ struct lustre_cfg;
+ void lustre_swab_lustre_cfg(struct lustre_cfg *lcfg);
+
+ /* Functions for dumping PTLRPC fields */
+-void dump_rniobuf(struct niobuf_remote *rnb);
+-void dump_ioo(struct obd_ioobj *nb);
+-void dump_ost_body(struct ost_body *ob);
+-void dump_rcs(__u32 *rc);
++void dump_rniobuf(void *rnb);
++void dump_ioo(void *nb);
++void dump_ost_body(void *ob);
++void dump_rcs(void *rc);
+
+ #define IDX_INFO_MAGIC 0x3D37CC37
+
+@@ -3393,7 +3393,7 @@ struct idx_info {
+ __u64 ii_pad3;
+ };
+
+-void lustre_swab_idx_info(struct idx_info *ii);
++void lustre_swab_idx_info(void *ii);
+
+ #define II_END_OFF MDS_DIR_END_OFF /* all entries have been read */
+
+@@ -3465,7 +3465,7 @@ struct lustre_capa {
+ __u8 lc_hmac[CAPA_HMAC_MAX_LEN]; /** HMAC */
+ } __attribute__((packed));
+
+-void lustre_swab_lustre_capa(struct lustre_capa *c);
++void lustre_swab_lustre_capa(void *c);
+
+ /** lustre_capa::lc_opc */
+ enum {
+@@ -3549,7 +3549,7 @@ struct layout_intent {
+ __u64 li_end;
+ };
+
+-void lustre_swab_layout_intent(struct layout_intent *li);
++void lustre_swab_layout_intent(void *li);
+
+ /**
+ * On the wire version of hsm_progress structure.
+@@ -3569,12 +3569,12 @@ struct hsm_progress_kernel {
+ __u64 hpk_padding2;
+ } __attribute__((packed));
+
+-void lustre_swab_hsm_user_state(struct hsm_user_state *hus);
+-void lustre_swab_hsm_current_action(struct hsm_current_action *action);
+-void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk);
+-void lustre_swab_hsm_user_state(struct hsm_user_state *hus);
+-void lustre_swab_hsm_user_item(struct hsm_user_item *hui);
+-void lustre_swab_hsm_request(struct hsm_request *hr);
++void lustre_swab_hsm_user_state(void *hus);
++void lustre_swab_hsm_current_action(void *action);
++void lustre_swab_hsm_progress_kernel(void *hpk);
++void lustre_swab_hsm_user_state(void *hus);
++void lustre_swab_hsm_user_item(void *hui);
++void lustre_swab_hsm_request(void *hr);
+
+ /**
+ * These are object update opcode under UPDATE_OBJ, which is currently
+@@ -3659,8 +3659,8 @@ struct update_reply {
+ __u32 ur_lens[0];
+ };
+
+-void lustre_swab_update_buf(struct update_buf *ub);
+-void lustre_swab_update_reply_buf(struct update_reply *ur);
++void lustre_swab_update_buf(void *ub);
++void lustre_swab_update_reply_buf(void *ur);
+
+ /** layout swap request structure
+ * fid1 and fid2 are in mdt_body
+@@ -3669,7 +3669,7 @@ struct mdc_swap_layouts {
+ __u64 msl_flags;
+ } __packed;
+
+-void lustre_swab_swap_layouts(struct mdc_swap_layouts *msl);
++void lustre_swab_swap_layouts(void *msl);
+
+ struct close_data {
+ struct lustre_handle cd_handle;
+@@ -3678,7 +3678,7 @@ struct close_data {
+ __u64 cd_reserved[8];
+ };
+
+-void lustre_swab_close_data(struct close_data *data);
++void lustre_swab_close_data(void *data);
+
+ #endif
+ /** @} lustreidl */
diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h
-index 0e75a15..7290f30 100644
+index 9b319f1..42e8150 100644
--- a/drivers/staging/lustre/lustre/include/lustre_dlm.h
+++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h
-@@ -1061,7 +1061,7 @@ struct ldlm_callback_suite {
+@@ -964,9 +964,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. */
+- void *ei_cb_bl; /** blocking lock callback */
+- void *ei_cb_cp; /** lock completion callback */
+- void *ei_cb_gl; /** lock glimpse callback */
++ ldlm_blocking_callback ei_cb_bl; /** blocking lock callback */
++ ldlm_completion_callback ei_cb_cp; /** lock completion callback */
++ ldlm_glimpse_callback ei_cb_gl; /** lock glimpse callback */
+ void *ei_cbdata; /** Data to be passed into callbacks. */
+ };
+
+@@ -1059,7 +1059,7 @@ struct ldlm_callback_suite {
ldlm_completion_callback lcs_completion;
ldlm_blocking_callback lcs_blocking;
ldlm_glimpse_callback lcs_glimpse;
@@ -57885,8 +70818,21 @@ index 0e75a15..7290f30 100644
/* ldlm_lockd.c */
int ldlm_get_ref(void);
+diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h
+index d834ddd..a650f2a 100644
+--- a/drivers/staging/lustre/lustre/include/lustre_net.h
++++ b/drivers/staging/lustre/lustre/include/lustre_net.h
+@@ -2564,7 +2564,7 @@ void *lustre_msg_buf_v2(struct lustre_msg_v2 *m, int n, int min_size);
+ 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);
+-char *lustre_msg_string(struct lustre_msg *m, int n, int max_len);
++void *lustre_msg_string(struct lustre_msg *m, int n, int max_len);
+ __u32 lustre_msghdr_get_flags(struct lustre_msg *msg);
+ 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 5e93afc..4fd41bf 100644
+index bcbe613..fed09d3 100644
--- a/drivers/staging/lustre/lustre/include/obd.h
+++ b/drivers/staging/lustre/lustre/include/obd.h
@@ -1213,7 +1213,7 @@ struct md_ops {
@@ -57911,8 +70857,32 @@ index 4310154..605d035 100644
CDEBUG(D_DLMTRACE,
"flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
+diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
+index b9eb377..eadc037 100644
+--- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
++++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c
+@@ -1785,8 +1785,9 @@ static int ldlm_chain_lock_for_replay(struct ldlm_lock *lock, void *closure)
+
+ static int replay_lock_interpret(const struct lu_env *env,
+ struct ptlrpc_request *req,
+- struct ldlm_async_args *aa, int rc)
++ void *_aa, int rc)
+ {
++ struct ldlm_async_args *aa = _aa;
+ struct ldlm_lock *lock;
+ struct ldlm_reply *reply;
+ struct obd_export *exp;
+@@ -1910,7 +1911,7 @@ static int replay_one_lock(struct obd_import *imp, struct ldlm_lock *lock)
+ CLASSERT(sizeof(*aa) <= sizeof(req->rq_async_args));
+ aa = ptlrpc_req_async_args(req);
+ aa->lock_handle = body->lock_handle[0];
+- req->rq_interpret_reply = (ptlrpc_interpterer_t)replay_lock_interpret;
++ req->rq_interpret_reply = replay_lock_interpret;
+ ptlrpcd_add_req(req);
+
+ return 0;
diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c
-index e7c2b26..29a29f1 100644
+index 329d78c..9756f9e 100644
--- a/drivers/staging/lustre/lustre/libcfs/module.c
+++ b/drivers/staging/lustre/lustre/libcfs/module.c
@@ -322,11 +322,11 @@ out:
@@ -57932,8 +70902,762 @@ index e7c2b26..29a29f1 100644
};
static int proc_call_handler(void *data, int write, loff_t *ppos,
+diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c
+index 8982f7d..c04fda5 100644
+--- a/drivers/staging/lustre/lustre/llite/dir.c
++++ b/drivers/staging/lustre/lustre/llite/dir.c
+@@ -140,7 +140,7 @@
+ */
+
+ /* returns the page unlocked, but with a reference */
+-static int ll_dir_filler(void *_hash, struct page *page0)
++static int ll_dir_filler(struct file *_hash, struct page *page0)
+ {
+ struct inode *inode = page0->mapping->host;
+ int hash64 = ll_i2sbi(inode)->ll_flags & LL_SBI_64BIT_HASH;
+diff --git a/drivers/staging/lustre/lustre/lov/lov_io.c b/drivers/staging/lustre/lustre/lov/lov_io.c
+index 93fe69e..af92b7a 100644
+--- a/drivers/staging/lustre/lustre/lov/lov_io.c
++++ b/drivers/staging/lustre/lustre/lov/lov_io.c
+@@ -833,12 +833,32 @@ static void lov_empty_io_fini(const struct lu_env *env,
+ }
+
+ static void lov_empty_impossible(const struct lu_env *env,
+- struct cl_io_slice *ios)
++ const struct cl_io_slice *ios)
+ {
+ LBUG();
+ }
+
+-#define LOV_EMPTY_IMPOSSIBLE ((void *)lov_empty_impossible)
++static int lov_empty_impossible2(const struct lu_env *env,
++ const struct cl_io_slice *ios)
++{
++ LBUG();
++}
++
++static int lov_empty_impossible3(const struct lu_env *env,
++ const struct cl_io_slice *slice,
++ enum cl_req_type crt,
++ struct cl_2queue *queue)
++{
++ LBUG();
++}
++
++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)
++{
++ LBUG();
++}
+
+ /**
+ * An io operation vector for files without stripes.
+@@ -848,32 +868,32 @@ static const struct cl_io_operations lov_empty_io_ops = {
+ [CIT_READ] = {
+ .cio_fini = lov_empty_io_fini,
+ #if 0
+- .cio_iter_init = LOV_EMPTY_IMPOSSIBLE,
+- .cio_lock = LOV_EMPTY_IMPOSSIBLE,
+- .cio_start = LOV_EMPTY_IMPOSSIBLE,
+- .cio_end = LOV_EMPTY_IMPOSSIBLE
++ .cio_iter_init = lov_empty_impossible2,
++ .cio_lock = lov_empty_impossible2,
++ .cio_start = lov_empty_impossible2,
++ .cio_end = lov_empty_impossible
+ #endif
+ },
+ [CIT_WRITE] = {
+ .cio_fini = lov_empty_io_fini,
+- .cio_iter_init = LOV_EMPTY_IMPOSSIBLE,
+- .cio_lock = LOV_EMPTY_IMPOSSIBLE,
+- .cio_start = LOV_EMPTY_IMPOSSIBLE,
+- .cio_end = LOV_EMPTY_IMPOSSIBLE
++ .cio_iter_init = lov_empty_impossible2,
++ .cio_lock = lov_empty_impossible2,
++ .cio_start = lov_empty_impossible2,
++ .cio_end = lov_empty_impossible
+ },
+ [CIT_SETATTR] = {
+ .cio_fini = lov_empty_io_fini,
+- .cio_iter_init = LOV_EMPTY_IMPOSSIBLE,
+- .cio_lock = LOV_EMPTY_IMPOSSIBLE,
+- .cio_start = LOV_EMPTY_IMPOSSIBLE,
+- .cio_end = LOV_EMPTY_IMPOSSIBLE
++ .cio_iter_init = lov_empty_impossible2,
++ .cio_lock = lov_empty_impossible2,
++ .cio_start = lov_empty_impossible2,
++ .cio_end = lov_empty_impossible
+ },
+ [CIT_FAULT] = {
+ .cio_fini = lov_empty_io_fini,
+- .cio_iter_init = LOV_EMPTY_IMPOSSIBLE,
+- .cio_lock = LOV_EMPTY_IMPOSSIBLE,
+- .cio_start = LOV_EMPTY_IMPOSSIBLE,
+- .cio_end = LOV_EMPTY_IMPOSSIBLE
++ .cio_iter_init = lov_empty_impossible2,
++ .cio_lock = lov_empty_impossible2,
++ .cio_start = lov_empty_impossible2,
++ .cio_end = lov_empty_impossible
+ },
+ [CIT_FSYNC] = {
+ .cio_fini = lov_empty_io_fini
+@@ -884,13 +904,13 @@ static const struct cl_io_operations lov_empty_io_ops = {
+ },
+ .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
+ };
+
+ int lov_io_init_raid0(const struct lu_env *env, struct cl_object *obj,
+diff --git a/drivers/staging/lustre/lustre/obdclass/llog_swab.c b/drivers/staging/lustre/lustre/obdclass/llog_swab.c
+index 3aa7393..10619c9 100644
+--- a/drivers/staging/lustre/lustre/obdclass/llog_swab.c
++++ b/drivers/staging/lustre/lustre/obdclass/llog_swab.c
+@@ -58,16 +58,20 @@ static void print_llogd_body(struct llogd_body *d)
+ CDEBUG(D_OTHER, "\tlgd_cur_offset: %#llx\n", d->lgd_cur_offset);
+ }
+
+-void lustre_swab_lu_fid(struct lu_fid *fid)
++void lustre_swab_lu_fid(void *_fid)
+ {
++ struct lu_fid *fid = _fid;
++
+ __swab64s(&fid->f_seq);
+ __swab32s(&fid->f_oid);
+ __swab32s(&fid->f_ver);
+ }
+ EXPORT_SYMBOL(lustre_swab_lu_fid);
+
+-void lustre_swab_ost_id(struct ost_id *oid)
++void lustre_swab_ost_id(void *_oid)
+ {
++ struct ost_id *oid = _oid;
++
+ if (fid_seq_is_mdt0(oid->oi.oi_seq)) {
+ __swab64s(&oid->oi.oi_id);
+ __swab64s(&oid->oi.oi_seq);
+@@ -84,8 +88,10 @@ static void lustre_swab_llog_id(struct llog_logid *log_id)
+ __swab32s(&log_id->lgl_ogen);
+ }
+
+-void lustre_swab_llogd_body(struct llogd_body *d)
++void lustre_swab_llogd_body(void *_d)
+ {
++ struct llogd_body *d = _d;
++
+ print_llogd_body(d);
+ lustre_swab_llog_id(&d->lgd_logid);
+ __swab32s(&d->lgd_ctxt_idx);
+@@ -98,8 +104,10 @@ void lustre_swab_llogd_body(struct llogd_body *d)
+ }
+ EXPORT_SYMBOL(lustre_swab_llogd_body);
+
+-void lustre_swab_llogd_conn_body(struct llogd_conn_body *d)
++void lustre_swab_llogd_conn_body(void *_d)
+ {
++ struct llogd_conn_body *d = _d;
++
+ __swab64s(&d->lgdc_gen.mnt_cnt);
+ __swab64s(&d->lgdc_gen.conn_cnt);
+ lustre_swab_llog_id(&d->lgdc_logid);
+@@ -114,8 +122,10 @@ static void lustre_swab_ll_fid(struct ll_fid *fid)
+ __swab32s(&fid->f_type);
+ }
+
+-void lustre_swab_lu_seq_range(struct lu_seq_range *range)
++void lustre_swab_lu_seq_range(void *_range)
+ {
++ struct lu_seq_range *range = _range;
++
+ __swab64s(&range->lsr_start);
+ __swab64s(&range->lsr_end);
+ __swab32s(&range->lsr_index);
+@@ -294,8 +304,10 @@ static void print_llog_hdr(struct llog_log_hdr *h)
+ CDEBUG(D_OTHER, "\tllh_tail.lrt_len: %#x\n", h->llh_tail.lrt_len);
+ }
+
+-void lustre_swab_llog_hdr(struct llog_log_hdr *h)
++void lustre_swab_llog_hdr(void *_h)
+ {
++ struct llog_log_hdr *h = _h;
++
+ print_llog_hdr(h);
+
+ lustre_swab_llog_rec(&h->llh_hdr);
+diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c
+index 7034f0a..427966a 100644
+--- a/drivers/staging/lustre/lustre/osc/osc_request.c
++++ b/drivers/staging/lustre/lustre/osc/osc_request.c
+@@ -212,8 +212,9 @@ static inline void osc_pack_req_body(struct ptlrpc_request *req,
+
+ static int osc_getattr_interpret(const struct lu_env *env,
+ struct ptlrpc_request *req,
+- struct osc_async_args *aa, int rc)
++ void *_aa, int rc)
+ {
++ struct osc_async_args *aa = _aa;
+ struct ost_body *body;
+
+ if (rc != 0)
+@@ -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);
+- req->rq_interpret_reply = (ptlrpc_interpterer_t)osc_getattr_interpret;
++ req->rq_interpret_reply = osc_getattr_interpret;
+
+ CLASSERT(sizeof(*aa) <= sizeof(req->rq_async_args));
+ aa = ptlrpc_req_async_args(req);
+@@ -354,8 +355,9 @@ out:
+
+ static int osc_setattr_interpret(const struct lu_env *env,
+ struct ptlrpc_request *req,
+- struct osc_setattr_args *sa, int rc)
++ void *_sa, int rc)
+ {
++ struct osc_setattr_args *sa = _sa;
+ struct ost_body *body;
+
+ if (rc != 0)
+@@ -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 {
+- req->rq_interpret_reply =
+- (ptlrpc_interpterer_t)osc_setattr_interpret;
++ req->rq_interpret_reply = osc_setattr_interpret;
+
+ CLASSERT(sizeof(*sa) <= sizeof(req->rq_async_args));
+ sa = ptlrpc_req_async_args(req);
+@@ -548,7 +549,7 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo,
+
+ ptlrpc_request_set_replen(req);
+
+- req->rq_interpret_reply = (ptlrpc_interpterer_t)osc_setattr_interpret;
++ req->rq_interpret_reply = osc_setattr_interpret;
+ CLASSERT(sizeof(*sa) <= sizeof(req->rq_async_args));
+ sa = ptlrpc_req_async_args(req);
+ sa->sa_oa = oinfo->oi_oa;
+@@ -2117,8 +2118,9 @@ static int osc_enqueue_fini(struct ptlrpc_request *req, struct ost_lvb *lvb,
+
+ static int osc_enqueue_interpret(const struct lu_env *env,
+ struct ptlrpc_request *req,
+- struct osc_enqueue_args *aa, int rc)
++ void *_aa, int rc)
+ {
++ struct osc_enqueue_args *aa = _aa;
+ struct ldlm_lock *lock;
+ struct lustre_handle handle;
+ __u32 mode;
+@@ -2315,8 +2317,7 @@ int osc_enqueue_base(struct obd_export *exp, struct ldlm_res_id *res_id,
+ aa->oa_lockh = lockh;
+ aa->oa_agl = !!agl;
+
+- req->rq_interpret_reply =
+- (ptlrpc_interpterer_t)osc_enqueue_interpret;
++ req->rq_interpret_reply = osc_enqueue_interpret;
+ if (rqset == PTLRPCD_SET)
+ ptlrpcd_add_req(req);
+ else
+@@ -2389,8 +2390,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,
+- struct osc_async_args *aa, int rc)
++ void *_aa, int rc)
+ {
++ struct osc_async_args *aa = _aa;
+ struct obd_statfs *msfs;
+
+ if (rc == -EBADR)
+@@ -2456,7 +2458,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));
+ aa = ptlrpc_req_async_args(req);
+ aa->aa_oi = oinfo;
+diff --git a/drivers/staging/lustre/lustre/ptlrpc/layout.c b/drivers/staging/lustre/lustre/ptlrpc/layout.c
+index c0e613c..aff501f 100644
+--- a/drivers/staging/lustre/lustre/ptlrpc/layout.c
++++ b/drivers/staging/lustre/lustre/ptlrpc/layout.c
+@@ -811,8 +811,8 @@ struct req_capsule;
+ .rmf_name = (name), \
+ .rmf_flags = (flags), \
+ .rmf_size = (size), \
+- .rmf_swabber = (void (*)(void *))(swabber), \
+- .rmf_dumper = (void (*)(void *))(dumper) \
++ .rmf_swabber = (swabber), \
++ .rmf_dumper = (dumper) \
+ }
+
+ struct req_msg_field RMF_GENERIC_DATA =
+@@ -1959,8 +1959,7 @@ static void *__req_capsule_get(struct req_capsule *pill,
+ msg = __req_msg(pill, loc);
+ LASSERT(msg != NULL);
+
+- getter = (field->rmf_flags & RMF_F_STRING) ?
+- (typeof(getter))lustre_msg_string : lustre_msg_buf;
++ getter = (field->rmf_flags & RMF_F_STRING) ? lustre_msg_string : lustre_msg_buf;
+
+ if (field->rmf_flags & RMF_F_STRUCT_ARRAY) {
+ /*
+diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c
+index f3cb518..ed6f36b 100644
+--- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c
++++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c
+@@ -690,7 +690,7 @@ int lustre_msg_bufcount(struct lustre_msg *m)
+ }
+ EXPORT_SYMBOL(lustre_msg_bufcount);
+
+-char *lustre_msg_string(struct lustre_msg *m, int index, int max_len)
++void *lustre_msg_string(struct lustre_msg *m, int index, int max_len)
+ {
+ /* max_len == 0 means the string should fill the buffer */
+ char *str;
+@@ -1462,8 +1462,10 @@ EXPORT_SYMBOL(do_set_info_async);
+ /* byte flipping routines for all wire types declared in
+ * lustre_idl.h implemented here.
+ */
+-void lustre_swab_ptlrpc_body(struct ptlrpc_body *b)
++void lustre_swab_ptlrpc_body(void *_b)
+ {
++ struct ptlrpc_body *b = _b;
++
+ __swab32s(&b->pb_type);
+ __swab32s(&b->pb_version);
+ __swab32s(&b->pb_opc);
+@@ -1493,8 +1495,10 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *b)
+ }
+ EXPORT_SYMBOL(lustre_swab_ptlrpc_body);
+
+-void lustre_swab_connect(struct obd_connect_data *ocd)
++void lustre_swab_connect(void *_ocd)
+ {
++ struct obd_connect_data *ocd = _ocd;
++
+ __swab64s(&ocd->ocd_connect_flags);
+ __swab32s(&ocd->ocd_version);
+ __swab32s(&ocd->ocd_grant);
+@@ -1567,8 +1571,10 @@ static void lustre_swab_obdo(struct obdo *o)
+
+ }
+
+-void lustre_swab_obd_statfs(struct obd_statfs *os)
++void lustre_swab_obd_statfs(void *_os)
+ {
++ struct obd_statfs *os = _os;
++
+ __swab64s(&os->os_type);
+ __swab64s(&os->os_blocks);
+ __swab64s(&os->os_bfree);
+@@ -1592,42 +1598,54 @@ void lustre_swab_obd_statfs(struct obd_statfs *os)
+ }
+ EXPORT_SYMBOL(lustre_swab_obd_statfs);
+
+-void lustre_swab_obd_ioobj(struct obd_ioobj *ioo)
++void lustre_swab_obd_ioobj(void *_ioo)
+ {
++ struct obd_ioobj *ioo = _ioo;
++
+ lustre_swab_ost_id(&ioo->ioo_oid);
+ __swab32s(&ioo->ioo_max_brw);
+ __swab32s(&ioo->ioo_bufcnt);
+ }
+ EXPORT_SYMBOL(lustre_swab_obd_ioobj);
+
+-void lustre_swab_niobuf_remote(struct niobuf_remote *nbr)
++void lustre_swab_niobuf_remote(void *_nbr)
+ {
++ struct niobuf_remote *nbr = _nbr;
++
+ __swab64s(&nbr->offset);
+ __swab32s(&nbr->len);
+ __swab32s(&nbr->flags);
+ }
+ EXPORT_SYMBOL(lustre_swab_niobuf_remote);
+
+-void lustre_swab_ost_body(struct ost_body *b)
++void lustre_swab_ost_body(void *_b)
+ {
++ struct ost_body *b = _b;
++
+ lustre_swab_obdo(&b->oa);
+ }
+ EXPORT_SYMBOL(lustre_swab_ost_body);
+
+-void lustre_swab_ost_last_id(u64 *id)
++void lustre_swab_ost_last_id(void *_id)
+ {
++ u64 *id = _id;
++
+ __swab64s(id);
+ }
+ EXPORT_SYMBOL(lustre_swab_ost_last_id);
+
+-void lustre_swab_generic_32s(__u32 *val)
++void lustre_swab_generic_32s(void *_val)
+ {
++ __u32 *val = _val;
++
+ __swab32s(val);
+ }
+ EXPORT_SYMBOL(lustre_swab_generic_32s);
+
+-void lustre_swab_gl_desc(union ldlm_gl_desc *desc)
++void lustre_swab_gl_desc(void *_desc)
+ {
++ union ldlm_gl_desc *desc = _desc;
++
+ lustre_swab_lu_fid(&desc->lquota_desc.gl_id.qid_fid);
+ __swab64s(&desc->lquota_desc.gl_flags);
+ __swab64s(&desc->lquota_desc.gl_ver);
+@@ -1671,8 +1689,10 @@ void lustre_swab_lquota_lvb(struct lquota_lvb *lvb)
+ }
+ EXPORT_SYMBOL(lustre_swab_lquota_lvb);
+
+-void lustre_swab_mdt_body(struct mdt_body *b)
++void lustre_swab_mdt_body(void *_b)
+ {
++ struct mdt_body *b = _b;
++
+ lustre_swab_lu_fid(&b->fid1);
+ lustre_swab_lu_fid(&b->fid2);
+ /* handle is opaque */
+@@ -1705,8 +1725,10 @@ void lustre_swab_mdt_body(struct mdt_body *b)
+ }
+ EXPORT_SYMBOL(lustre_swab_mdt_body);
+
+-void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b)
++void lustre_swab_mdt_ioepoch(void *_b)
+ {
++ struct mdt_ioepoch *b = _b;
++
+ /* handle is opaque */
+ __swab64s(&b->ioepoch);
+ __swab32s(&b->flags);
+@@ -1714,8 +1736,9 @@ void lustre_swab_mdt_ioepoch(struct mdt_ioepoch *b)
+ }
+ EXPORT_SYMBOL(lustre_swab_mdt_ioepoch);
+
+-void lustre_swab_mgs_target_info(struct mgs_target_info *mti)
++void lustre_swab_mgs_target_info(void *_mti)
+ {
++ struct mgs_target_info *mti = _mti;
+ int i;
+
+ __swab32s(&mti->mti_lustre_ver);
+@@ -1753,16 +1776,20 @@ void lustre_swab_mgs_nidtbl_entry(struct mgs_nidtbl_entry *entry)
+ }
+ EXPORT_SYMBOL(lustre_swab_mgs_nidtbl_entry);
+
+-void lustre_swab_mgs_config_body(struct mgs_config_body *body)
++void lustre_swab_mgs_config_body(void *_body)
+ {
++ struct mgs_config_body *body = _body;
++
+ __swab64s(&body->mcb_offset);
+ __swab32s(&body->mcb_units);
+ __swab16s(&body->mcb_type);
+ }
+ EXPORT_SYMBOL(lustre_swab_mgs_config_body);
+
+-void lustre_swab_mgs_config_res(struct mgs_config_res *body)
++void lustre_swab_mgs_config_res(void *_body)
+ {
++ struct mgs_config_res *body = _body;
++
+ __swab64s(&body->mcr_offset);
+ __swab64s(&body->mcr_size);
+ }
+@@ -1790,8 +1817,10 @@ static void lustre_swab_obd_dqblk(struct obd_dqblk *b)
+ CLASSERT(offsetof(typeof(*b), dqb_padding) != 0);
+ }
+
+-void lustre_swab_obd_quotactl(struct obd_quotactl *q)
++void lustre_swab_obd_quotactl(void *_q)
+ {
++ struct obd_quotactl *q = _q;
++
+ __swab32s(&q->qc_cmd);
+ __swab32s(&q->qc_type);
+ __swab32s(&q->qc_id);
+@@ -1832,8 +1861,9 @@ static void lustre_swab_fiemap_extent(struct ll_fiemap_extent *fm_extent)
+ __swab32s(&fm_extent->fe_device);
+ }
+
+-void lustre_swab_fiemap(struct ll_user_fiemap *fiemap)
++void lustre_swab_fiemap(void *_fiemap)
+ {
++ struct ll_user_fiemap *fiemap = _fiemap;
+ int i;
+
+ __swab64s(&fiemap->fm_start);
+@@ -1848,8 +1878,10 @@ void lustre_swab_fiemap(struct ll_user_fiemap *fiemap)
+ }
+ EXPORT_SYMBOL(lustre_swab_fiemap);
+
+-void lustre_swab_idx_info(struct idx_info *ii)
++void lustre_swab_idx_info(void *_ii)
+ {
++ struct idx_info *ii = _ii;
++
+ __swab32s(&ii->ii_magic);
+ __swab32s(&ii->ii_flags);
+ __swab16s(&ii->ii_count);
+@@ -1862,8 +1894,10 @@ void lustre_swab_idx_info(struct idx_info *ii)
+ __swab16s(&ii->ii_recsize);
+ }
+
+-void lustre_swab_mdt_rec_reint (struct mdt_rec_reint *rr)
++void lustre_swab_mdt_rec_reint (void *_rr)
+ {
++ struct mdt_rec_reint *rr = _rr;
++
+ __swab32s(&rr->rr_opcode);
+ __swab32s(&rr->rr_cap);
+ __swab32s(&rr->rr_fsuid);
+@@ -1994,8 +2028,10 @@ static void lustre_swab_ldlm_policy_data(ldlm_wire_policy_data_t *d)
+ __swab32s(&d->l_flock.lfw_pid);
+ }
+
+-void lustre_swab_ldlm_intent(struct ldlm_intent *i)
++void lustre_swab_ldlm_intent(void *_i)
+ {
++ struct ldlm_intent *i = _i;
++
+ __swab64s(&i->opc);
+ }
+ EXPORT_SYMBOL(lustre_swab_ldlm_intent);
+@@ -2015,8 +2051,10 @@ static void lustre_swab_ldlm_lock_desc(struct ldlm_lock_desc *l)
+ lustre_swab_ldlm_policy_data(&l->l_policy_data);
+ }
+
+-void lustre_swab_ldlm_request(struct ldlm_request *rq)
++void lustre_swab_ldlm_request(void *_rq)
+ {
++ struct ldlm_request *rq = _rq;
++
+ __swab32s(&rq->lock_flags);
+ lustre_swab_ldlm_lock_desc(&rq->lock_desc);
+ __swab32s(&rq->lock_count);
+@@ -2024,8 +2062,10 @@ void lustre_swab_ldlm_request(struct ldlm_request *rq)
+ }
+ EXPORT_SYMBOL(lustre_swab_ldlm_request);
+
+-void lustre_swab_ldlm_reply(struct ldlm_reply *r)
++void lustre_swab_ldlm_reply(void *_r)
+ {
++ struct ldlm_reply *r = _r;
++
+ __swab32s(&r->lock_flags);
+ CLASSERT(offsetof(typeof(*r), lock_padding) != 0);
+ lustre_swab_ldlm_lock_desc(&r->lock_desc);
+@@ -2035,8 +2075,10 @@ void lustre_swab_ldlm_reply(struct ldlm_reply *r)
+ }
+ EXPORT_SYMBOL(lustre_swab_ldlm_reply);
+
+-void lustre_swab_quota_body(struct quota_body *b)
++void lustre_swab_quota_body(void *_b)
+ {
++ struct quota_body *b = _b;
++
+ lustre_swab_lu_fid(&b->qb_fid);
+ lustre_swab_lu_fid((struct lu_fid *)&b->qb_id);
+ __swab32s(&b->qb_flags);
+@@ -2046,8 +2088,10 @@ void lustre_swab_quota_body(struct quota_body *b)
+ }
+
+ /* Dump functions */
+-void dump_ioo(struct obd_ioobj *ioo)
++void dump_ioo(void *_ioo)
+ {
++ struct obd_ioobj *ioo = _ioo;
++
+ CDEBUG(D_RPCTRACE,
+ "obd_ioobj: ioo_oid=" DOSTID ", ioo_max_brw=%#x, ioo_bufct=%d\n",
+ POSTID(&ioo->ioo_oid), ioo->ioo_max_brw,
+@@ -2055,8 +2099,10 @@ void dump_ioo(struct obd_ioobj *ioo)
+ }
+ EXPORT_SYMBOL(dump_ioo);
+
+-void dump_rniobuf(struct niobuf_remote *nb)
++void dump_rniobuf(void *_nb)
+ {
++ struct niobuf_remote *nb = _nb;
++
+ CDEBUG(D_RPCTRACE, "niobuf_remote: offset=%llu, len=%d, flags=%x\n",
+ nb->offset, nb->len, nb->flags);
+ }
+@@ -2124,14 +2170,18 @@ static void dump_obdo(struct obdo *oa)
+ CDEBUG(D_RPCTRACE, "obdo: o_lcookie = (llog_cookie dumping not yet implemented)\n");
+ }
+
+-void dump_ost_body(struct ost_body *ob)
++void dump_ost_body(void *_ob)
+ {
++ struct ost_body *ob = _ob;
++
+ dump_obdo(&ob->oa);
+ }
+ EXPORT_SYMBOL(dump_ost_body);
+
+-void dump_rcs(__u32 *rc)
++void dump_rcs(void *_rc)
+ {
++ __u32 *rc = _rc;
++
+ CDEBUG(D_RPCTRACE, "rmf_rcs: %d\n", *rc);
+ }
+ EXPORT_SYMBOL(dump_rcs);
+@@ -2208,8 +2258,10 @@ void _debug_req(struct ptlrpc_request *req,
+ }
+ EXPORT_SYMBOL(_debug_req);
+
+-void lustre_swab_lustre_capa(struct lustre_capa *c)
++void lustre_swab_lustre_capa(void *_c)
+ {
++ struct lustre_capa *c = _c;
++
+ lustre_swab_lu_fid(&c->lc_fid);
+ __swab64s(&c->lc_opc);
+ __swab64s(&c->lc_uid);
+@@ -2221,15 +2273,19 @@ void lustre_swab_lustre_capa(struct lustre_capa *c)
+ }
+ EXPORT_SYMBOL(lustre_swab_lustre_capa);
+
+-void lustre_swab_hsm_user_state(struct hsm_user_state *state)
++void lustre_swab_hsm_user_state(void *_state)
+ {
++ struct hsm_user_state *state = _state;
++
+ __swab32s(&state->hus_states);
+ __swab32s(&state->hus_archive_id);
+ }
+ EXPORT_SYMBOL(lustre_swab_hsm_user_state);
+
+-void lustre_swab_hsm_state_set(struct hsm_state_set *hss)
++void lustre_swab_hsm_state_set(void *_hss)
+ {
++ struct hsm_state_set *hss = _hss;
++
+ __swab32s(&hss->hss_valid);
+ __swab64s(&hss->hss_setmask);
+ __swab64s(&hss->hss_clearmask);
+@@ -2243,23 +2299,29 @@ static void lustre_swab_hsm_extent(struct hsm_extent *extent)
+ __swab64s(&extent->length);
+ }
+
+-void lustre_swab_hsm_current_action(struct hsm_current_action *action)
++void lustre_swab_hsm_current_action(void *_action)
+ {
++ struct hsm_current_action *action = _action;
++
+ __swab32s(&action->hca_state);
+ __swab32s(&action->hca_action);
+ lustre_swab_hsm_extent(&action->hca_location);
+ }
+ EXPORT_SYMBOL(lustre_swab_hsm_current_action);
+
+-void lustre_swab_hsm_user_item(struct hsm_user_item *hui)
++void lustre_swab_hsm_user_item(void *_hui)
+ {
++ struct hsm_user_item *hui = _hui;
++
+ lustre_swab_lu_fid(&hui->hui_fid);
+ lustre_swab_hsm_extent(&hui->hui_extent);
+ }
+ EXPORT_SYMBOL(lustre_swab_hsm_user_item);
+
+-void lustre_swab_layout_intent(struct layout_intent *li)
++void lustre_swab_layout_intent(void *_li)
+ {
++ struct layout_intent *li = _li;
++
+ __swab32s(&li->li_opc);
+ __swab32s(&li->li_flags);
+ __swab64s(&li->li_start);
+@@ -2267,8 +2329,10 @@ void lustre_swab_layout_intent(struct layout_intent *li)
+ }
+ EXPORT_SYMBOL(lustre_swab_layout_intent);
+
+-void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk)
++void lustre_swab_hsm_progress_kernel(void *_hpk)
+ {
++ struct hsm_progress_kernel *hpk = _hpk;
++
+ lustre_swab_lu_fid(&hpk->hpk_fid);
+ __swab64s(&hpk->hpk_cookie);
+ __swab64s(&hpk->hpk_extent.offset);
+@@ -2278,8 +2342,10 @@ void lustre_swab_hsm_progress_kernel(struct hsm_progress_kernel *hpk)
+ }
+ EXPORT_SYMBOL(lustre_swab_hsm_progress_kernel);
+
+-void lustre_swab_hsm_request(struct hsm_request *hr)
++void lustre_swab_hsm_request(void *_hr)
+ {
++ struct hsm_request *hr = _hr;
++
+ __swab32s(&hr->hr_action);
+ __swab32s(&hr->hr_archive_id);
+ __swab64s(&hr->hr_flags);
+@@ -2288,15 +2354,18 @@ void lustre_swab_hsm_request(struct hsm_request *hr)
+ }
+ EXPORT_SYMBOL(lustre_swab_hsm_request);
+
+-void lustre_swab_update_buf(struct update_buf *ub)
++void lustre_swab_update_buf(void *_ub)
+ {
++ struct update_buf *ub = _ub;
++
+ __swab32s(&ub->ub_magic);
+ __swab32s(&ub->ub_count);
+ }
+ EXPORT_SYMBOL(lustre_swab_update_buf);
+
+-void lustre_swab_update_reply_buf(struct update_reply *ur)
++void lustre_swab_update_reply_buf(void *_ur)
+ {
++ struct update_reply *ur = _ur;
+ int i;
+
+ __swab32s(&ur->ur_version);
+@@ -2306,14 +2375,18 @@ void lustre_swab_update_reply_buf(struct update_reply *ur)
+ }
+ EXPORT_SYMBOL(lustre_swab_update_reply_buf);
+
+-void lustre_swab_swap_layouts(struct mdc_swap_layouts *msl)
++void lustre_swab_swap_layouts(void *_msl)
+ {
++ struct mdc_swap_layouts *msl = _msl;
++
+ __swab64s(&msl->msl_flags);
+ }
+ EXPORT_SYMBOL(lustre_swab_swap_layouts);
+
+-void lustre_swab_close_data(struct close_data *cd)
++void lustre_swab_close_data(void *_cd)
+ {
++ struct close_data *cd = _cd;
++
+ lustre_swab_lu_fid(&cd->cd_fid);
+ __swab64s(&cd->cd_data_version);
+ }
diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c
-index 6aed3cf..3cdcb89 100644
+index 6aed3cf..f4a36a8 100644
--- a/drivers/staging/octeon/ethernet-rx.c
+++ b/drivers/staging/octeon/ethernet-rx.c
@@ -365,15 +365,15 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
@@ -57960,19 +71684,22 @@ index 6aed3cf..3cdcb89 100644
#endif
}
netif_receive_skb(skb);
-@@ -384,10 +384,10 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
+@@ -384,11 +384,11 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
dev->name);
*/
#ifdef CONFIG_64BIT
- atomic64_add(1,
+- (atomic64_t *)&priv->stats.rx_dropped);
+ atomic64_add_unchecked(1,
- (atomic64_t *)&priv->stats.rx_dropped);
++ (atomic64_unchecked_t *)&priv->stats.rx_dropped);
#else
- atomic_add(1,
+- (atomic_t *)&priv->stats.rx_dropped);
+ atomic_add_unchecked(1,
- (atomic_t *)&priv->stats.rx_dropped);
++ (atomic_unchecked_t *)&priv->stats.rx_dropped);
#endif
dev_kfree_skb_irq(skb);
+ }
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
index f69fb5c..be5da97 100644
--- a/drivers/staging/octeon/ethernet.c
@@ -57993,78 +71720,46 @@ index f69fb5c..be5da97 100644
#endif
}
-diff --git a/drivers/staging/rdma/ehca/ehca_irq.c b/drivers/staging/rdma/ehca/ehca_irq.c
-index 8615d7c..1396623 100644
---- a/drivers/staging/rdma/ehca/ehca_irq.c
-+++ b/drivers/staging/rdma/ehca/ehca_irq.c
-@@ -802,7 +802,7 @@ static void comp_task(unsigned int cpu)
- spin_unlock_irq(&cct->task_lock);
- }
-
--static struct smp_hotplug_thread comp_pool_threads = {
-+static struct smp_hotplug_thread comp_pool_threads __read_only = {
- .thread_should_run = comp_task_should_run,
- .thread_fn = comp_task,
- .thread_comm = "ehca_comp/%u",
-diff --git a/drivers/staging/rdma/ipath/ipath_rc.c b/drivers/staging/rdma/ipath/ipath_rc.c
-index d4aa535..022fa57 100644
---- a/drivers/staging/rdma/ipath/ipath_rc.c
-+++ b/drivers/staging/rdma/ipath/ipath_rc.c
-@@ -1868,7 +1868,7 @@ void ipath_rc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
- struct ib_atomic_eth *ateth;
- struct ipath_ack_entry *e;
- u64 vaddr;
-- atomic64_t *maddr;
-+ atomic64_unchecked_t *maddr;
- u64 sdata;
- u32 rkey;
- u8 next;
-@@ -1903,11 +1903,11 @@ void ipath_rc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
- IB_ACCESS_REMOTE_ATOMIC)))
- goto nack_acc_unlck;
- /* Perform atomic OP and save result. */
-- maddr = (atomic64_t *) qp->r_sge.sge.vaddr;
-+ maddr = (atomic64_unchecked_t *) qp->r_sge.sge.vaddr;
- sdata = be64_to_cpu(ateth->swap_data);
- e = &qp->s_ack_queue[qp->r_head_ack_queue];
- e->atomic_data = (opcode == OP(FETCH_ADD)) ?
-- (u64) atomic64_add_return(sdata, maddr) - sdata :
-+ (u64) atomic64_add_return_unchecked(sdata, maddr) - sdata :
- (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
- be64_to_cpu(ateth->compare_data),
- sdata);
-diff --git a/drivers/staging/rdma/ipath/ipath_ruc.c b/drivers/staging/rdma/ipath/ipath_ruc.c
-index e541a01..a41777d 100644
---- a/drivers/staging/rdma/ipath/ipath_ruc.c
-+++ b/drivers/staging/rdma/ipath/ipath_ruc.c
-@@ -265,7 +265,7 @@ static void ipath_ruc_loopback(struct ipath_qp *sqp)
- unsigned long flags;
- struct ib_wc wc;
- u64 sdata;
-- atomic64_t *maddr;
-+ atomic64_unchecked_t *maddr;
- enum ib_wc_status send_status;
+diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c
+index 70b8f4f..6b477e9 100644
+--- a/drivers/staging/panel/panel.c
++++ b/drivers/staging/panel/panel.c
+@@ -1991,7 +1991,7 @@ static void panel_process_inputs(void)
+ }
+ }
- /*
-@@ -381,11 +381,11 @@ again:
- IB_ACCESS_REMOTE_ATOMIC)))
- goto acc_err;
- /* Perform atomic OP and save result. */
-- maddr = (atomic64_t *) qp->r_sge.sge.vaddr;
-+ maddr = (atomic64_unchecked_t *) qp->r_sge.sge.vaddr;
- sdata = wqe->atomic_wr.compare_add;
- *(u64 *) sqp->s_sge.sge.vaddr =
- (wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD) ?
-- (u64) atomic64_add_return(sdata, maddr) - sdata :
-+ (u64) atomic64_add_return_unchecked(sdata, maddr) - sdata :
- (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
- sdata, wqe->atomic_wr.swap);
- goto send_comp;
+-static void panel_scan_timer(void)
++static void panel_scan_timer(unsigned long data)
+ {
+ if (keypad.enabled && keypad_initialized) {
+ if (spin_trylock_irq(&pprt_lock)) {
+@@ -2027,7 +2027,7 @@ static void init_scan_timer(void)
+ if (scan_timer.function)
+ return; /* already started */
+
+- setup_timer(&scan_timer, (void *)&panel_scan_timer, 0);
++ setup_timer(&scan_timer, &panel_scan_timer, 0);
+ scan_timer.expires = jiffies + INPUT_POLL_TIME;
+ add_timer(&scan_timer);
+ }
+diff --git a/drivers/staging/rdma/hfi1/pcie.c b/drivers/staging/rdma/hfi1/pcie.c
+index 8317b07..99824f2 100644
+--- a/drivers/staging/rdma/hfi1/pcie.c
++++ b/drivers/staging/rdma/hfi1/pcie.c
+@@ -541,7 +541,7 @@ static void tune_pcie_caps(struct hfi1_devdata *dd)
+ * 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 d900546..266edcf 100644
+index 3eca687..247c0b8 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
-@@ -3983,7 +3983,7 @@ static void init_mlme_ext_priv_value(struct adapter *padapter)
+@@ -3992,7 +3992,7 @@ static void init_mlme_ext_priv_value(struct adapter *padapter)
_12M_RATE_, _24M_RATE_, 0xff,
};
@@ -58073,7 +71768,34 @@ index d900546..266edcf 100644
pmlmeext->mgnt_seq = 0;/* reset to zero when disconnect at client mode */
pmlmeext->cur_channel = padapter->registrypriv.channel;
-@@ -4310,7 +4310,7 @@ void report_survey_event(struct adapter *padapter,
+@@ -4185,7 +4185,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)
+ {
+- u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
++ static const u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+ u8 *pframe = precv_frame->rx_data;
+
+ if (ptable->func) {
+@@ -4204,7 +4204,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 */
+- u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
++ static const u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+ u8 *pframe = precv_frame->rx_data;
+ struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe));
+
+@@ -4229,7 +4229,7 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
+
+ index = GetFrameSubType(pframe) >> 4;
+
+- if (index > 13) {
++ if (index > ARRAY_SIZE(mlme_sta_tbl)) {
+ RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("Currently we do not support reserved sub-fr-type=%d\n", index));
+ return;
+ }
+@@ -4319,7 +4319,7 @@ void report_survey_event(struct adapter *padapter,
pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
pc2h_evt_hdr->len = sizeof(struct survey_event);
pc2h_evt_hdr->ID = GEN_EVT_CODE(_Survey);
@@ -58082,7 +71804,7 @@ index d900546..266edcf 100644
psurvey_evt = (struct survey_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
-@@ -4362,7 +4362,7 @@ void report_surveydone_event(struct adapter *padapter)
+@@ -4371,7 +4371,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);
@@ -58091,7 +71813,7 @@ index d900546..266edcf 100644
psurveydone_evt = (struct surveydone_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt;
-@@ -4408,7 +4408,7 @@ void report_join_res(struct adapter *padapter, int res)
+@@ -4417,7 +4417,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);
@@ -58100,7 +71822,7 @@ index d900546..266edcf 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));
-@@ -4461,7 +4461,7 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi
+@@ -4470,7 +4470,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);
@@ -58109,7 +71831,7 @@ index d900546..266edcf 100644
pdel_sta_evt = (struct stadel_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
memcpy((unsigned char *)(&(pdel_sta_evt->macaddr)), MacAddr, ETH_ALEN);
-@@ -4516,7 +4516,7 @@ void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int
+@@ -4525,7 +4525,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);
@@ -58118,8 +71840,56 @@ index d900546..266edcf 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
+--- 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)
+ struct recv_buf *precvbuf;
+
+ tasklet_init(&precvpriv->recv_tasklet,
+- (void(*)(unsigned long))rtl8188eu_recv_tasklet,
++ rtl8188eu_recv_tasklet,
+ (unsigned long)padapter);
+
+ /* init recv_buf */
+diff --git a/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c
+index e04303c..6861369 100644
+--- 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)
+ struct xmit_priv *pxmitpriv = &adapt->xmitpriv;
+
+ tasklet_init(&pxmitpriv->xmit_tasklet,
+- (void(*)(unsigned long))rtl8188eu_xmit_tasklet,
++ rtl8188eu_xmit_tasklet,
+ (unsigned long)adapt);
+ return _SUCCESS;
+ }
+diff --git a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h
+index e058162..28d8a63 100644
+--- a/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h
++++ b/drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h
+@@ -207,17 +207,9 @@ void PHY_GetTxPowerLevel8188E(struct adapter *adapter, u32 *powerlevel);
+
+ void PHY_ScanOperationBackup8188E(struct adapter *Adapter, u8 Operation);
+
+-/* Call after initialization */
+-void ChkFwCmdIoDone(struct adapter *adapter);
+-
+ /* BB/MAC/RF other monitor API */
+ void PHY_SetRFPathSwitch_8188E(struct adapter *adapter, bool main);
+
+-void PHY_SwitchEphyParameter(struct adapter *adapter);
+-
+-void PHY_EnableHostClkReq(struct adapter *adapter);
+-
+-bool SetAntennaConfig92C(struct adapter *adapter, u8 defaultant);
+
+ /*--------------------------Exported Function prototype---------------------*/
+
diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h
-index 1b1c102..375e471 100644
+index 1b1c102..4f76875 100644
--- a/drivers/staging/rtl8188eu/include/hal_intf.h
+++ b/drivers/staging/rtl8188eu/include/hal_intf.h
@@ -217,7 +217,7 @@ struct hal_ops {
@@ -58131,8 +71901,121 @@ index 1b1c102..375e471 100644
enum rt_eeprom_type {
EEPROM_93C46,
+@@ -251,7 +251,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);
+-void rtw_hal_stop(struct adapter *padapter);
+ 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);
+
+ 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);
+-void rtw_hal_clone_data(struct adapter *dst_adapt,
+- struct adapter *src_adapt);
+
+ 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
+--- 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);
+ 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);
+-void odm_SwAntDivChkAntSwitchCallback(void *FunctionContext);
++void odm_SwAntDivChkAntSwitchCallback(unsigned long FunctionContext);
+ void odm_InitHybridAntDiv(struct odm_dm_struct *pDM_Odm);
+ 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
+--- 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);
+
+ void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup);
+
+-int rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter);
+ void rtw_free_recv_priv(struct recv_priv *precvpriv);
+
+ 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
+--- a/drivers/staging/rtl8188eu/include/rtl8188e_recv.h
++++ b/drivers/staging/rtl8188eu/include/rtl8188e_recv.h
+@@ -59,7 +59,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);
+-void rtl8188eu_recv_tasklet(void *priv);
++void rtl8188eu_recv_tasklet(unsigned long _priv);
+ void rtl8188e_query_rx_phy_status(struct recv_frame *fr, struct phy_stat *phy);
+ 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
+--- 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);
+ 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
+-void rtl8188eu_xmit_tasklet(void *priv);
++void rtl8188eu_xmit_tasklet(unsigned long _priv);
+ s32 rtl8188eu_xmitframe_complete(struct adapter *padapter,
+ 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
+--- 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);
+
+ void rtw_setstaKey_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
+ void rtw_setassocsta_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cm);
+-void rtw_getrttbl_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
+
+ 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
+--- a/drivers/staging/rtl8188eu/include/rtw_eeprom.h
++++ b/drivers/staging/rtl8188eu/include/rtw_eeprom.h
+@@ -121,10 +121,4 @@ struct eeprom_priv {
+ u8 efuse_eeprom_data[HWSET_MAX_SIZE_512];
+ };
+
+-void eeprom_write16(struct adapter *padapter, u16 reg, u16 data);
+-u16 eeprom_read16(struct adapter *padapter, u16 reg);
+-void read_eeprom_content(struct adapter *padapter);
+-void eeprom_read_sz(struct adapter *adapt, u16 reg, u8 *data, u32 sz);
+-void read_eeprom_content_by_attrib(struct adapter *padapter);
+-
+ #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
+--- 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) {
+
+ extern struct iw_handler_def rtw_handlers_def;
+
+-int drv_query_info(struct net_device *miniportadaptercontext, NDIS_OID oid,
+- void *informationbuffer, u32 informationbufferlength,
+- u32 *byteswritten, u32 *bytesneeded);
+-
+-int drv_set_info(struct net_device *MiniportAdapterContext,
+- NDIS_OID oid, void *informationbuffer,
+- u32 informationbufferlength, u32 *bytesread,
+- u32 *bytesneeded);
+-
+ #endif /* #ifndef __INC_CEINFO_ */
diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h
-index 9093a5f..5863f9b 100644
+index 9093a5f..eb007cd 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 {
@@ -58144,6 +72027,690 @@ index 9093a5f..5863f9b 100644
u16 mgnt_seq;
unsigned char cur_channel;
+@@ -555,8 +555,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);
+-unsigned int setup_beacon_frame(struct adapter *padapter,
+- unsigned char *beacon_frame);
+ 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 {
+ u8 (*h2cfuns)(struct adapter *padapter, u8 *pbuf);
+ };
+
+-u8 read_macreg_hdl(struct adapter *padapter, u8 *pbuf);
+-u8 write_macreg_hdl(struct adapter *padapter, u8 *pbuf);
+-u8 read_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
+-u8 write_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
+-u8 read_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
+-u8 write_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
+ 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);
+ 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);
+-u8 set_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
+-u8 del_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
+ u8 add_ba_hdl(struct adapter *padapter, unsigned char *pbuf);
+
+ 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
+--- a/drivers/staging/rtl8188eu/include/xmit_osdep.h
++++ b/drivers/staging/rtl8188eu/include/xmit_osdep.h
+@@ -40,7 +40,7 @@ struct sta_xmit_priv;
+ struct xmit_frame;
+ struct xmit_buf;
+
+-int rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev);
++netdev_tx_t rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev);
+
+ 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..e6f2263 100644
+--- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
++++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
+@@ -814,7 +814,7 @@ void usb_write_port_cancel(struct adapter *padapter)
+ }
+ }
+
+-void rtl8188eu_recv_tasklet(void *priv)
++void rtl8188eu_recv_tasklet(unsigned long priv)
+ {
+ struct sk_buff *pskb;
+ struct adapter *adapt = priv;
+@@ -833,7 +833,7 @@ void rtl8188eu_recv_tasklet(void *priv)
+ }
+ }
+
+-void rtl8188eu_xmit_tasklet(void *priv)
++void rtl8188eu_xmit_tasklet(unsigned long priv)
+ {
+ int ret = false;
+ struct adapter *adapt = priv;
+diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
+index 1593e28..a4345f9 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)
+ }
+
+
+-int rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev)
++netdev_tx_t rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev)
+ {
+ struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c
+index 8f989a9..781fed8 100644
+--- 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 = {
+ };
+
+ static short _rtl92e_is_tx_queue_empty(struct net_device *dev);
+-static void _rtl92e_watchdog_wq_cb(void *data);
++static void _rtl92e_watchdog_wq_cb(struct work_struct *data);
+ static void _rtl92e_watchdog_timer_cb(unsigned long data);
+ static void _rtl92e_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
+ int rate);
+@@ -92,13 +92,13 @@ static int _rtl92e_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
+ static void _rtl92e_tx_cmd(struct net_device *dev, struct sk_buff *skb);
+ static short _rtl92e_tx(struct net_device *dev, struct sk_buff *skb);
+ static short _rtl92e_pci_initdescring(struct net_device *dev);
+-static void _rtl92e_irq_tx_tasklet(struct r8192_priv *priv);
+-static void _rtl92e_irq_rx_tasklet(struct r8192_priv *priv);
++static void _rtl92e_irq_tx_tasklet(unsigned long priv);
++static void _rtl92e_irq_rx_tasklet(unsigned long priv);
+ static void _rtl92e_cancel_deferred_work(struct r8192_priv *priv);
+ static int _rtl92e_up(struct net_device *dev, bool is_silent_reset);
+ static int _rtl92e_try_up(struct net_device *dev);
+ static int _rtl92e_down(struct net_device *dev, bool shutdownrf);
+-static void _rtl92e_restart(void *data);
++static void _rtl92e_restart(struct work_struct *data);
+
+ /****************************************************************************
+ -----------------------------IO STUFF-------------------------
+@@ -375,7 +375,7 @@ static struct rtllib_qos_parameters def_qos_parameters = {
+ {0, 0, 0, 0}
+ };
+
+-static void _rtl92e_update_beacon(void *data)
++static void _rtl92e_update_beacon(struct work_struct *data)
+ {
+ struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv,
+ update_beacon_wq.work);
+@@ -391,7 +391,7 @@ static void _rtl92e_update_beacon(void *data)
+ _rtl92e_update_cap(dev, net->capability);
+ }
+
+-static void _rtl92e_qos_activate(void *data)
++static void _rtl92e_qos_activate(struct work_struct *data)
+ {
+ struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv,
+ qos_activate);
+@@ -527,8 +527,9 @@ static int _rtl92e_handle_assoc_response(struct net_device *dev,
+ return 0;
+ }
+
+-static void _rtl92e_prepare_beacon(struct r8192_priv *priv)
++static void _rtl92e_prepare_beacon(unsigned long _priv)
+ {
++ struct r8192_priv *priv = (struct r8192_priv *)_priv;
+ struct net_device *dev = priv->rtllib->dev;
+ struct sk_buff *pskb = NULL, *pnewskb = NULL;
+ struct cb_desc *tcb_desc = NULL;
+@@ -1003,30 +1004,30 @@ static void _rtl92e_init_priv_task(struct net_device *dev)
+ struct r8192_priv *priv = rtllib_priv(dev);
+
+ priv->priv_wq = create_workqueue(DRV_NAME);
+- INIT_WORK_RSL(&priv->reset_wq, (void *)_rtl92e_restart, dev);
+- INIT_WORK_RSL(&priv->rtllib->ips_leave_wq, (void *)rtl92e_ips_leave_wq,
++ INIT_WORK_RSL(&priv->reset_wq, _rtl92e_restart, dev);
++ INIT_WORK_RSL(&priv->rtllib->ips_leave_wq, rtl92e_ips_leave_wq,
+ dev);
+ INIT_DELAYED_WORK_RSL(&priv->watch_dog_wq,
+- (void *)_rtl92e_watchdog_wq_cb, dev);
++ _rtl92e_watchdog_wq_cb, dev);
+ INIT_DELAYED_WORK_RSL(&priv->txpower_tracking_wq,
+- (void *)rtl92e_dm_txpower_tracking_wq, dev);
++ rtl92e_dm_txpower_tracking_wq, dev);
+ INIT_DELAYED_WORK_RSL(&priv->rfpath_check_wq,
+- (void *)rtl92e_dm_rf_pathcheck_wq, dev);
++ rtl92e_dm_rf_pathcheck_wq, dev);
+ INIT_DELAYED_WORK_RSL(&priv->update_beacon_wq,
+- (void *)_rtl92e_update_beacon, dev);
+- INIT_WORK_RSL(&priv->qos_activate, (void *)_rtl92e_qos_activate, dev);
++ _rtl92e_update_beacon, dev);
++ INIT_WORK_RSL(&priv->qos_activate, _rtl92e_qos_activate, dev);
+ INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_wakeup_wq,
+- (void *) rtl92e_hw_wakeup_wq, dev);
++ rtl92e_hw_wakeup_wq, dev);
+ INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_sleep_wq,
+- (void *) rtl92e_hw_sleep_wq, dev);
++ rtl92e_hw_sleep_wq, dev);
+ tasklet_init(&priv->irq_rx_tasklet,
+- (void(*)(unsigned long))_rtl92e_irq_rx_tasklet,
++ _rtl92e_irq_rx_tasklet,
+ (unsigned long)priv);
+ tasklet_init(&priv->irq_tx_tasklet,
+- (void(*)(unsigned long))_rtl92e_irq_tx_tasklet,
++ _rtl92e_irq_tx_tasklet,
+ (unsigned long)priv);
+ tasklet_init(&priv->irq_prepare_beacon_tasklet,
+- (void(*)(unsigned long))_rtl92e_prepare_beacon,
++ _rtl92e_prepare_beacon,
+ (unsigned long)priv);
+ }
+
+@@ -1378,7 +1379,7 @@ static void _rtl92e_update_rxcounts(struct r8192_priv *priv, u32 *TotalRxBcnNum,
+ }
+ }
+
+-static void _rtl92e_watchdog_wq_cb(void *data)
++static void _rtl92e_watchdog_wq_cb(struct work_struct *data)
+ {
+ struct r8192_priv *priv = container_of_dwork_rsl(data,
+ struct r8192_priv, watch_dog_wq);
+@@ -2143,13 +2144,15 @@ static void _rtl92e_tx_resume(struct net_device *dev)
+ }
+ }
+
+-static void _rtl92e_irq_tx_tasklet(struct r8192_priv *priv)
++static void _rtl92e_irq_tx_tasklet(unsigned long _priv)
+ {
++ struct r8192_priv *priv = (struct r8192_priv *)_priv;
+ _rtl92e_tx_resume(priv->rtllib->dev);
+ }
+
+-static void _rtl92e_irq_rx_tasklet(struct r8192_priv *priv)
++static void _rtl92e_irq_rx_tasklet(unsigned long _priv)
+ {
++ struct r8192_priv *priv= (struct r8192_priv *)_priv;
+ _rtl92e_rx_normal(priv->rtllib->dev);
+
+ rtl92e_writel(priv->rtllib->dev, INTA_MASK,
+@@ -2237,7 +2240,7 @@ void rtl92e_commit(struct net_device *dev)
+ _rtl92e_up(dev, false);
+ }
+
+-static void _rtl92e_restart(void *data)
++static void _rtl92e_restart(struct work_struct *data)
+ {
+ struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv,
+ reset_wq);
+diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
+index a7777a3..8e28a32 100644
+--- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
+@@ -588,12 +588,12 @@ void force_pci_posting(struct net_device *dev);
+ void rtl92e_rx_enable(struct net_device *);
+ void rtl92e_tx_enable(struct net_device *);
+
+-void rtl92e_hw_sleep_wq(void *data);
++void rtl92e_hw_sleep_wq(struct work_struct *data);
+ void rtl92e_commit(struct net_device *dev);
+
+ void rtl92e_check_rfctrl_gpio_timer(unsigned long data);
+
+-void rtl92e_hw_wakeup_wq(void *data);
++void rtl92e_hw_wakeup_wq(struct work_struct *data);
+
+ void rtl92e_reset_desc_ring(struct net_device *dev);
+ void rtl92e_set_wireless_mode(struct net_device *dev, u8 wireless_mode);
+diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
+index ef03242..eef2177 100644
+--- a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c
+@@ -195,7 +195,7 @@ static void _rtl92e_dm_deinit_fsync(struct net_device *dev);
+ static void _rtl92e_dm_check_txrateandretrycount(struct net_device *dev);
+ static void _rtl92e_dm_check_ac_dc_power(struct net_device *dev);
+ static void _rtl92e_dm_check_fsync(struct net_device *dev);
+-static void _rtl92e_dm_check_rf_ctrl_gpio(void *data);
++static void _rtl92e_dm_check_rf_ctrl_gpio(struct work_struct *data);
+ static void _rtl92e_dm_fsync_timer_callback(unsigned long data);
+
+ /*---------------------Define local function prototype-----------------------*/
+@@ -229,7 +229,7 @@ void rtl92e_dm_init(struct net_device *dev)
+ _rtl92e_dm_init_wa_broadcom_iot(dev);
+
+ INIT_DELAYED_WORK_RSL(&priv->gpio_change_rf_wq,
+- (void *)_rtl92e_dm_check_rf_ctrl_gpio, dev);
++ _rtl92e_dm_check_rf_ctrl_gpio, dev);
+ }
+
+ void rtl92e_dm_deinit(struct net_device *dev)
+@@ -932,7 +932,7 @@ static void _rtl92e_dm_tx_power_tracking_cb_thermal(struct net_device *dev)
+ priv->txpower_count = 0;
+ }
+
+-void rtl92e_dm_txpower_tracking_wq(void *data)
++void rtl92e_dm_txpower_tracking_wq(struct work_struct *data)
+ {
+ struct r8192_priv *priv = container_of_dwork_rsl(data,
+ struct r8192_priv, txpower_tracking_wq);
+@@ -1815,7 +1815,7 @@ static void _rtl92e_dm_init_wa_broadcom_iot(struct net_device *dev)
+ pHTInfo->WAIotTH = WAIotTHVal;
+ }
+
+-static void _rtl92e_dm_check_rf_ctrl_gpio(void *data)
++static void _rtl92e_dm_check_rf_ctrl_gpio(struct work_struct *data)
+ {
+ struct r8192_priv *priv = container_of_dwork_rsl(data,
+ struct r8192_priv, gpio_change_rf_wq);
+@@ -1869,7 +1869,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data)
+ }
+ }
+
+-void rtl92e_dm_rf_pathcheck_wq(void *data)
++void rtl92e_dm_rf_pathcheck_wq(struct work_struct *data)
+ {
+ struct r8192_priv *priv = container_of_dwork_rsl(data,
+ struct r8192_priv,
+diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h
+index 756a0dd..d2de5e8 100644
+--- a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h
++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h
+@@ -191,13 +191,13 @@ void rtl92e_dm_watchdog(struct net_device *dev);
+
+
+ void rtl92e_init_adaptive_rate(struct net_device *dev);
+-void rtl92e_dm_txpower_tracking_wq(void *data);
++void rtl92e_dm_txpower_tracking_wq(struct work_struct *data);
+
+ void rtl92e_dm_cck_txpower_adjust(struct net_device *dev, bool binch14);
+
+ void rtl92e_dm_restore_state(struct net_device *dev);
+ void rtl92e_dm_backup_state(struct net_device *dev);
+ void rtl92e_dm_init_edca_turbo(struct net_device *dev);
+-void rtl92e_dm_rf_pathcheck_wq(void *data);
++void rtl92e_dm_rf_pathcheck_wq(struct work_struct *data);
+ void rtl92e_dm_init_txpower_tracking(struct net_device *dev);
+ #endif /*__R8192UDM_H__ */
+diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c
+index 9a4d1bc..3add233 100644
+--- a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c
++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c
+@@ -44,7 +44,7 @@ static void _rtl92e_hw_sleep(struct net_device *dev)
+ rtl92e_set_rf_state(dev, eRfSleep, RF_CHANGE_BY_PS);
+ }
+
+-void rtl92e_hw_sleep_wq(void *data)
++void rtl92e_hw_sleep_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_dwork_rsl(data,
+ struct rtllib_device, hw_sleep_wq);
+@@ -73,7 +73,7 @@ void rtl92e_hw_wakeup(struct net_device *dev)
+ rtl92e_set_rf_state(dev, eRfOn, RF_CHANGE_BY_PS);
+ }
+
+-void rtl92e_hw_wakeup_wq(void *data)
++void rtl92e_hw_wakeup_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_dwork_rsl(data,
+ struct rtllib_device, hw_wakeup_wq);
+@@ -175,7 +175,7 @@ void rtl92e_ips_leave(struct net_device *dev)
+ }
+ }
+
+-void rtl92e_ips_leave_wq(void *data)
++void rtl92e_ips_leave_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_work_rsl(data,
+ struct rtllib_device, ips_leave_wq);
+diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.h b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.h
+index a46f4cf..8f46fda 100644
+--- a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.h
++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.h
+@@ -24,6 +24,7 @@
+ #include <linux/types.h>
+
+ struct net_device;
++struct work_struct;
+
+ #define RT_CHECK_FOR_HANG_PERIOD 2
+
+@@ -31,7 +32,7 @@ void rtl92e_hw_wakeup(struct net_device *dev);
+ void rtl92e_enter_sleep(struct net_device *dev, u64 time);
+ void rtl92e_rtllib_ips_leave_wq(struct net_device *dev);
+ void rtl92e_rtllib_ips_leave(struct net_device *dev);
+-void rtl92e_ips_leave_wq(void *data);
++void rtl92e_ips_leave_wq(struct work_struct *data);
+
+ void rtl92e_ips_enter(struct net_device *dev);
+ void rtl92e_ips_leave(struct net_device *dev);
+diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c b/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c
+index 70df6a1..21c9f2e 100644
+--- a/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c
++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c
+@@ -1187,30 +1187,30 @@ static const struct iw_priv_args r8192_private_args[] = {
+ };
+
+ static iw_handler r8192_private_handler[] = {
+- (iw_handler)_rtl92e_wx_set_debug, /*SIOCIWSECONDPRIV*/
+- (iw_handler)_rtl92e_wx_set_scan_type,
+- (iw_handler)_rtl92e_wx_set_rawtx,
+- (iw_handler)_rtl92e_wx_force_reset,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)_rtl92e_wx_adapter_power_status,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)_rtl92e_wx_set_lps_awake_interval,
+- (iw_handler)_rtl92e_wx_set_force_lps,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)NULL,
+- (iw_handler)_rtl92e_wx_set_promisc_mode,
+- (iw_handler)_rtl92e_wx_get_promisc_mode,
++ _rtl92e_wx_set_debug, /*SIOCIWSECONDPRIV*/
++ _rtl92e_wx_set_scan_type,
++ _rtl92e_wx_set_rawtx,
++ _rtl92e_wx_force_reset,
++ NULL,
++ NULL,
++ _rtl92e_wx_adapter_power_status,
++ NULL,
++ NULL,
++ NULL,
++ _rtl92e_wx_set_lps_awake_interval,
++ _rtl92e_wx_set_force_lps,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ _rtl92e_wx_set_promisc_mode,
++ _rtl92e_wx_get_promisc_mode,
+ };
+
+ static struct iw_statistics *_rtl92e_get_wireless_stats(struct net_device *dev)
+diff --git a/drivers/staging/rtl8192e/rtllib.h b/drivers/staging/rtl8192e/rtllib.h
+index 563ac12..2ba2482 100644
+--- a/drivers/staging/rtl8192e/rtllib.h
++++ b/drivers/staging/rtl8192e/rtllib.h
+@@ -1994,7 +1994,7 @@ int rtllib_encrypt_fragment(
+ struct sk_buff *frag,
+ int hdr_len);
+
+-int rtllib_xmit(struct sk_buff *skb, struct net_device *dev);
++netdev_tx_t rtllib_xmit(struct sk_buff *skb, struct net_device *dev);
+ void rtllib_txb_free(struct rtllib_txb *);
+
+ /* rtllib_rx.c */
+@@ -2108,7 +2108,7 @@ int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a,
+
+ int rtllib_wx_get_freq(struct rtllib_device *ieee, struct iw_request_info *a,
+ union iwreq_data *wrqu, char *b);
+-void rtllib_wx_sync_scan_wq(void *data);
++void rtllib_wx_sync_scan_wq(struct work_struct *data);
+
+ int rtllib_wx_set_rawtx(struct rtllib_device *ieee,
+ struct iw_request_info *info,
+diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c
+index d0fedb0..59293cc 100644
+--- a/drivers/staging/rtl8192e/rtllib_softmac.c
++++ b/drivers/staging/rtl8192e/rtllib_softmac.c
+@@ -574,7 +574,7 @@ out:
+ wireless_send_event(ieee->dev, SIOCGIWSCAN, &wrqu, NULL);
+ }
+
+-static void rtllib_softmac_scan_wq(void *data)
++static void rtllib_softmac_scan_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_dwork_rsl(data,
+ struct rtllib_device, softmac_scan_wq);
+@@ -1514,7 +1514,7 @@ static void rtllib_associate_step2(struct rtllib_device *ieee)
+ }
+ }
+
+-static void rtllib_associate_complete_wq(void *data)
++static void rtllib_associate_complete_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = (struct rtllib_device *)
+ container_of_work_rsl(data,
+@@ -1583,7 +1583,7 @@ static void rtllib_associate_complete(struct rtllib_device *ieee)
+ queue_work_rsl(ieee->wq, &ieee->associate_complete_wq);
+ }
+
+-static void rtllib_associate_procedure_wq(void *data)
++static void rtllib_associate_procedure_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_dwork_rsl(data,
+ struct rtllib_device,
+@@ -2055,8 +2055,9 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time)
+
+ }
+
+-static inline void rtllib_sta_ps(struct rtllib_device *ieee)
++static inline void rtllib_sta_ps(unsigned long _ieee)
+ {
++ struct rtllib_device *ieee = (struct rtllib_device *)_ieee;
+ u64 time;
+ short sleep;
+ unsigned long flags, flags2;
+@@ -2583,7 +2584,7 @@ static void rtllib_start_monitor_mode(struct rtllib_device *ieee)
+ }
+ }
+
+-static void rtllib_start_ibss_wq(void *data)
++static void rtllib_start_ibss_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_dwork_rsl(data,
+ struct rtllib_device, start_ibss_wq);
+@@ -2749,7 +2750,7 @@ static void rtllib_start_bss(struct rtllib_device *ieee)
+ spin_unlock_irqrestore(&ieee->lock, flags);
+ }
+
+-static void rtllib_link_change_wq(void *data)
++static void rtllib_link_change_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_dwork_rsl(data,
+ struct rtllib_device, link_change_wq);
+@@ -2775,7 +2776,7 @@ void rtllib_disassociate(struct rtllib_device *ieee)
+ notify_wx_assoc_event(ieee);
+ }
+
+-static void rtllib_associate_retry_wq(void *data)
++static void rtllib_associate_retry_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_dwork_rsl(data,
+ struct rtllib_device, associate_retry_wq);
+@@ -3031,19 +3032,18 @@ void rtllib_softmac_init(struct rtllib_device *ieee)
+ ieee->wq = create_workqueue(DRV_NAME);
+
+ INIT_DELAYED_WORK_RSL(&ieee->link_change_wq,
+- (void *)rtllib_link_change_wq, ieee);
++ rtllib_link_change_wq, ieee);
+ INIT_DELAYED_WORK_RSL(&ieee->start_ibss_wq,
+- (void *)rtllib_start_ibss_wq, ieee);
++ rtllib_start_ibss_wq, ieee);
+ INIT_WORK_RSL(&ieee->associate_complete_wq,
+- (void *)rtllib_associate_complete_wq, ieee);
++ rtllib_associate_complete_wq, ieee);
+ INIT_DELAYED_WORK_RSL(&ieee->associate_procedure_wq,
+- (void *)rtllib_associate_procedure_wq, ieee);
++ rtllib_associate_procedure_wq, ieee);
+ INIT_DELAYED_WORK_RSL(&ieee->softmac_scan_wq,
+- (void *)rtllib_softmac_scan_wq, ieee);
++ rtllib_softmac_scan_wq, ieee);
+ INIT_DELAYED_WORK_RSL(&ieee->associate_retry_wq,
+- (void *)rtllib_associate_retry_wq, ieee);
+- INIT_WORK_RSL(&ieee->wx_sync_scan_wq, (void *)rtllib_wx_sync_scan_wq,
+- ieee);
++ rtllib_associate_retry_wq, ieee);
++ INIT_WORK_RSL(&ieee->wx_sync_scan_wq, rtllib_wx_sync_scan_wq, ieee);
+
+ sema_init(&ieee->wx_sem, 1);
+ sema_init(&ieee->scan_sem, 1);
+@@ -3053,7 +3053,7 @@ void rtllib_softmac_init(struct rtllib_device *ieee)
+ spin_lock_init(&ieee->beacon_lock);
+
+ tasklet_init(&ieee->ps_task,
+- (void(*)(unsigned long)) rtllib_sta_ps,
++ rtllib_sta_ps,
+ (unsigned long)ieee);
+
+ }
+diff --git a/drivers/staging/rtl8192e/rtllib_softmac_wx.c b/drivers/staging/rtl8192e/rtllib_softmac_wx.c
+index 86f52ac7..0d95442 100644
+--- a/drivers/staging/rtl8192e/rtllib_softmac_wx.c
++++ b/drivers/staging/rtl8192e/rtllib_softmac_wx.c
+@@ -327,7 +327,7 @@ out:
+ }
+ EXPORT_SYMBOL(rtllib_wx_set_mode);
+
+-void rtllib_wx_sync_scan_wq(void *data)
++void rtllib_wx_sync_scan_wq(struct work_struct *data)
+ {
+ struct rtllib_device *ieee = container_of_work_rsl(data,
+ struct rtllib_device, wx_sync_scan_wq);
+diff --git a/drivers/staging/rtl8192e/rtllib_tx.c b/drivers/staging/rtl8192e/rtllib_tx.c
+index 58fc70e..3fe041e 100644
+--- a/drivers/staging/rtl8192e/rtllib_tx.c
++++ b/drivers/staging/rtl8192e/rtllib_tx.c
+@@ -981,7 +981,7 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
+ return 1;
+
+ }
+-int rtllib_xmit(struct sk_buff *skb, struct net_device *dev)
++netdev_tx_t rtllib_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ memset(skb->cb, 0, sizeof(skb->cb));
+ return rtllib_xmit_inter(skb, dev);
+diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h b/drivers/staging/rtl8192u/ieee80211/ieee80211.h
+index 967ef9a..5038be8 100644
+--- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h
++++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h
+@@ -2179,7 +2179,7 @@ int ieee80211_set_encryption(struct ieee80211_device *ieee);
+ int ieee80211_encrypt_fragment(struct ieee80211_device *ieee,
+ struct sk_buff *frag, int hdr_len);
+
+-int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev);
++netdev_tx_t ieee80211_xmit(struct sk_buff *skb, struct net_device *dev);
+ void ieee80211_txb_free(struct ieee80211_txb *);
+
+
+diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
+index 38c3eb7..fa242a7 100644
+--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
++++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
+@@ -1762,9 +1762,9 @@ static short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h,
+
+ }
+
+-static inline void ieee80211_sta_ps(struct ieee80211_device *ieee)
++static inline void ieee80211_sta_ps(unsigned long _ieee)
+ {
+-
++ struct ieee80211_device *ieee = (struct ieee80211_device *)_ieee;
+ u32 th, tl;
+ short sleep;
+
+@@ -2739,7 +2739,7 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee)
+ spin_lock_init(&ieee->beacon_lock);
+
+ tasklet_init(&ieee->ps_task,
+- (void(*)(unsigned long)) ieee80211_sta_ps,
++ ieee80211_sta_ps,
+ (unsigned long)ieee);
+
+ }
+diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c
+index 1ab0aea..41de55c 100644
+--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c
++++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c
+@@ -594,7 +594,7 @@ static void ieee80211_query_seqnum(struct ieee80211_device *ieee,
+ }
+ }
+
+-int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev)
++netdev_tx_t ieee80211_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct ieee80211_device *ieee = netdev_priv(dev);
+ struct ieee80211_txb *txb = NULL;
+diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c
+index f4a4eae..2f3eb39 100644
+--- a/drivers/staging/rtl8192u/r8192U_core.c
++++ b/drivers/staging/rtl8192u/r8192U_core.c
+@@ -2375,7 +2375,7 @@ static void rtl8192_init_priv_lock(struct r8192_priv *priv)
+
+ static void rtl819x_watchdog_wqcallback(struct work_struct *work);
+
+-static void rtl8192_irq_rx_tasklet(struct r8192_priv *priv);
++static void rtl8192_irq_rx_tasklet(unsigned long priv);
+ /* init tasklet and wait_queue here. only 2.6 above kernel is considered */
+ #define DRV_NAME "wlan0"
+ static void rtl8192_init_priv_task(struct net_device *dev)
+@@ -2399,7 +2399,7 @@ static void rtl8192_init_priv_task(struct net_device *dev)
+ INIT_WORK(&priv->qos_activate, rtl8192_qos_activate);
+
+ tasklet_init(&priv->irq_rx_tasklet,
+- (void(*)(unsigned long))rtl8192_irq_rx_tasklet,
++ rtl8192_irq_rx_tasklet,
+ (unsigned long)priv);
+ }
+
+@@ -4907,8 +4907,9 @@ static void rtl8192_rx_cmd(struct sk_buff *skb)
+ }
+ }
+
+-static void rtl8192_irq_rx_tasklet(struct r8192_priv *priv)
++static void rtl8192_irq_rx_tasklet(unsigned long _priv)
+ {
++ struct r8192_priv *priv = (struct r8192_priv *)_priv;
+ struct sk_buff *skb;
+ 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
+--- 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};
+ /* Ethernet-II snap header (RFC1042 for most EtherTypes) */
+ static u8 rfc1042_header[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00};
+
+-static void recv_tasklet(void *priv);
++static void recv_tasklet(unsigned long _priv);
+
+ int r8712_init_recv_priv(struct recv_priv *precvpriv, struct _adapter *padapter)
+ {
+@@ -79,7 +79,7 @@ int r8712_init_recv_priv(struct recv_priv *precvpriv, struct _adapter *padapter)
+ }
+ precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
+ tasklet_init(&precvpriv->recv_tasklet,
+- (void(*)(unsigned long))recv_tasklet,
++ recv_tasklet,
+ (unsigned long)padapter);
+ skb_queue_head_init(&precvpriv->rx_skb_queue);
+
+@@ -1103,7 +1103,7 @@ _exit_recvbuf2recvframe:
+ return _SUCCESS;
+ }
+
+-static void recv_tasklet(void *priv)
++static void recv_tasklet(unsigned long priv)
+ {
+ struct sk_buff *pskb;
+ struct _adapter *padapter = (struct _adapter *)priv;
diff --git a/drivers/staging/rtl8712/rtl871x_io.h b/drivers/staging/rtl8712/rtl871x_io.h
index 26dd24c..2eb37c9 100644
--- a/drivers/staging/rtl8712/rtl871x_io.h
@@ -58157,6 +72724,94 @@ index 26dd24c..2eb37c9 100644
struct io_req {
struct list_head list;
+diff --git a/drivers/staging/rtl8712/rtl871x_ioctl.h b/drivers/staging/rtl8712/rtl871x_ioctl.h
+index c9218be..ecda3f6 100644
+--- a/drivers/staging/rtl8712/rtl871x_ioctl.h
++++ b/drivers/staging/rtl8712/rtl871x_ioctl.h
+@@ -76,18 +76,4 @@ uint oid_null_function(struct oid_par_priv *poid_par_priv);
+
+ extern struct iw_handler_def r871x_handlers_def;
+
+-uint drv_query_info(struct net_device *MiniportAdapterContext,
+- uint Oid,
+- void *InformationBuffer,
+- u32 InformationBufferLength,
+- u32 *BytesWritten,
+- u32 *BytesNeeded);
+-
+-uint drv_set_info(struct net_device *MiniportAdapterContext,
+- uint Oid,
+- void *InformationBuffer,
+- u32 InformationBufferLength,
+- u32 *BytesRead,
+- u32 *BytesNeeded);
+-
+ #endif
+diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c
+index 68d65d2..060b3a3 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,
+ alloc_hwxmits(padapter);
+ init_hwxmits(pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry);
+ tasklet_init(&pxmitpriv->xmit_tasklet,
+- (void(*)(unsigned long))r8712_xmit_bh,
++ r8712_xmit_bh,
+ (unsigned long)padapter);
+ return _SUCCESS;
+ }
+diff --git a/drivers/staging/rtl8712/rtl871x_xmit.h b/drivers/staging/rtl8712/rtl871x_xmit.h
+index a9633c3..77b0c85 100644
+--- a/drivers/staging/rtl8712/rtl871x_xmit.h
++++ b/drivers/staging/rtl8712/rtl871x_xmit.h
+@@ -291,7 +291,7 @@ int r8712_pre_xmit(struct _adapter *padapter, struct xmit_frame *pxmitframe);
+ int r8712_xmit_enqueue(struct _adapter *padapter,
+ struct xmit_frame *pxmitframe);
+ int r8712_xmit_direct(struct _adapter *padapter, struct xmit_frame *pxmitframe);
+-void r8712_xmit_bh(void *priv);
++void r8712_xmit_bh(unsigned long priv);
+
+ void xmitframe_xmitbuf_attach(struct xmit_frame *pxmitframe,
+ struct xmit_buf *pxmitbuf);
+diff --git a/drivers/staging/rtl8712/usb_ops_linux.c b/drivers/staging/rtl8712/usb_ops_linux.c
+index 489a9e6..6dd73de 100644
+--- a/drivers/staging/rtl8712/usb_ops_linux.c
++++ b/drivers/staging/rtl8712/usb_ops_linux.c
+@@ -326,7 +326,7 @@ void r8712_usb_read_port_cancel(struct _adapter *padapter)
+ }
+ }
+
+-void r8712_xmit_bh(void *priv)
++void r8712_xmit_bh(unsigned long priv)
+ {
+ int ret = false;
+ struct _adapter *padapter = (struct _adapter *)priv;
+diff --git a/drivers/staging/rtl8712/xmit_linux.c b/drivers/staging/rtl8712/xmit_linux.c
+index d398183..0ceb8ad 100644
+--- a/drivers/staging/rtl8712/xmit_linux.c
++++ b/drivers/staging/rtl8712/xmit_linux.c
+@@ -159,7 +159,7 @@ void r8712_xmit_complete(struct _adapter *padapter, struct xmit_frame *pxframe)
+ pxframe->pkt = NULL;
+ }
+
+-int r8712_xmit_entry(_pkt *pkt, struct net_device *pnetdev)
++netdev_tx_t r8712_xmit_entry(_pkt *pkt, struct net_device *pnetdev)
+ {
+ struct xmit_frame *pxmitframe = NULL;
+ struct _adapter *padapter = netdev_priv(pnetdev);
+diff --git a/drivers/staging/rtl8712/xmit_osdep.h b/drivers/staging/rtl8712/xmit_osdep.h
+index 8eba7ca..6c4ce81 100644
+--- a/drivers/staging/rtl8712/xmit_osdep.h
++++ b/drivers/staging/rtl8712/xmit_osdep.h
+@@ -46,7 +46,7 @@ struct sta_xmit_priv;
+ struct xmit_frame;
+ struct xmit_buf;
+
+-int r8712_xmit_entry(_pkt *pkt, struct net_device *pnetdev);
++netdev_tx_t r8712_xmit_entry(_pkt *pkt, struct net_device *pnetdev);
+ void r8712_SetFilter(struct work_struct *work);
+ int r8712_xmit_resource_alloc(struct _adapter *padapter,
+ struct xmit_buf *pxmitbuf);
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index d28f29a..e3d2f19 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -58215,6 +72870,80 @@ index d28f29a..e3d2f19 100644
padd_sta_evt = (struct stassoc_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
ether_addr_copy((unsigned char *)&padd_sta_evt->macaddr, MacAddr);
+diff --git a/drivers/staging/rtl8723au/core/rtw_xmit.c b/drivers/staging/rtl8723au/core/rtw_xmit.c
+index a4b6bb6..b22a6be 100644
+--- a/drivers/staging/rtl8723au/core/rtw_xmit.c
++++ b/drivers/staging/rtl8723au/core/rtw_xmit.c
+@@ -183,7 +183,7 @@ int _rtw_init_xmit_priv23a(struct xmit_priv *pxmitpriv,
+ mutex_init(&pxmitpriv->ack_tx_mutex);
+ rtw_sctx_init23a(&pxmitpriv->ack_tx_ops, 0);
+ tasklet_init(&padapter->xmitpriv.xmit_tasklet,
+- (void(*)(unsigned long))rtl8723au_xmit_tasklet,
++ rtl8723au_xmit_tasklet,
+ (unsigned long)padapter);
+
+ exit:
+diff --git a/drivers/staging/rtl8723au/hal/rtl8723au_recv.c b/drivers/staging/rtl8723au/hal/rtl8723au_recv.c
+index 0fec84b..298d283 100644
+--- a/drivers/staging/rtl8723au/hal/rtl8723au_recv.c
++++ b/drivers/staging/rtl8723au/hal/rtl8723au_recv.c
+@@ -33,7 +33,7 @@ int rtl8723au_init_recv_priv(struct rtw_adapter *padapter)
+ struct sk_buff *pskb;
+
+ tasklet_init(&precvpriv->recv_tasklet,
+- (void(*)(unsigned long))rtl8723au_recv_tasklet,
++ rtl8723au_recv_tasklet,
+ (unsigned long)padapter);
+
+ precvpriv->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
+diff --git a/drivers/staging/rtl8723au/hal/usb_ops_linux.c b/drivers/staging/rtl8723au/hal/usb_ops_linux.c
+index 371e6b3..ab5f50b 100644
+--- a/drivers/staging/rtl8723au/hal/usb_ops_linux.c
++++ b/drivers/staging/rtl8723au/hal/usb_ops_linux.c
+@@ -487,7 +487,7 @@ _exit_recvbuf2recvframe:
+ return _SUCCESS;
+ }
+
+-void rtl8723au_recv_tasklet(void *priv)
++void rtl8723au_recv_tasklet(unsigned long priv)
+ {
+ struct sk_buff *pskb;
+ struct rtw_adapter *padapter = (struct rtw_adapter *)priv;
+@@ -662,7 +662,7 @@ int rtl8723au_read_port(struct rtw_adapter *adapter, u32 cnt,
+ return ret;
+ }
+
+-void rtl8723au_xmit_tasklet(void *priv)
++void rtl8723au_xmit_tasklet(unsigned long priv)
+ {
+ int ret;
+ struct rtw_adapter *padapter = (struct rtw_adapter *)priv;
+diff --git a/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h b/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h
+index bcf3657..74d4742 100644
+--- a/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h
++++ b/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h
+@@ -135,7 +135,6 @@ void PHY_SetBWMode23a8723A(struct rtw_adapter *pAdapter,
+ /* */
+ void PHY_SwChnl8723A(struct rtw_adapter *pAdapter, u8 channel);
+ /* Call after initialization */
+-void ChkFwCmdIoDone(struct rtw_adapter *Adapter);
+
+ /* */
+ /* Modify the value of the hw register when beacon interval be changed. */
+@@ -144,13 +143,6 @@ void
+ rtl8192c_PHY_SetBeaconHwReg(struct rtw_adapter *Adapter, u16 BeaconInterval);
+
+
+-void PHY_SwitchEphyParameter(struct rtw_adapter *Adapter);
+-
+-void PHY_EnableHostClkReq(struct rtw_adapter *Adapter);
+-
+-bool
+-SetAntennaConfig92C(struct rtw_adapter *Adapter, u8 DefaultAnt);
+-
+ /*--------------------------Exported Function prototype---------------------*/
+
+ #define PHY_SetMacReg PHY_SetBBReg
diff --git a/drivers/staging/rtl8723au/include/drv_types.h b/drivers/staging/rtl8723au/include/drv_types.h
index e83463a..84230f3 100644
--- a/drivers/staging/rtl8723au/include/drv_types.h
@@ -58228,8 +72957,76 @@ index e83463a..84230f3 100644
/*-------- below is for PCIE INTERFACE --------*/
+diff --git a/drivers/staging/rtl8723au/include/hal_intf.h b/drivers/staging/rtl8723au/include/hal_intf.h
+index b924d47..1e3e51c 100644
+--- a/drivers/staging/rtl8723au/include/hal_intf.h
++++ b/drivers/staging/rtl8723au/include/hal_intf.h
+@@ -97,10 +97,8 @@ int pm_netdev_open23a(struct net_device *pnetdev, u8 bnormal);
+
+ int rtl8723au_hal_init(struct rtw_adapter *padapter);
+ int rtl8723au_hal_deinit(struct rtw_adapter *padapter);
+-void rtw_hal_stop(struct rtw_adapter *padapter);
+
+ void rtw_hal_update_ra_mask23a(struct sta_info *psta, u8 rssi_level);
+-void rtw_hal_clone_data(struct rtw_adapter *dst_padapter, struct rtw_adapter *src_padapter);
+
+ void hw_var_set_correct_tsf(struct rtw_adapter *padapter);
+ void hw_var_set_mlme_disconnect(struct rtw_adapter *padapter);
+diff --git a/drivers/staging/rtl8723au/include/recv_osdep.h b/drivers/staging/rtl8723au/include/recv_osdep.h
+index c2d3f1b..bb0dc02 100644
+--- a/drivers/staging/rtl8723au/include/recv_osdep.h
++++ b/drivers/staging/rtl8723au/include/recv_osdep.h
+@@ -26,7 +26,6 @@ int rtw_recv_indicatepkt23a(struct rtw_adapter *adapter, struct recv_frame *prec
+
+ void rtw_handle_tkip_mic_err23a(struct rtw_adapter *padapter, u8 bgroup);
+
+-int rtw_init_recv_priv(struct recv_priv *precvpriv, struct rtw_adapter *padapter);
+ void rtw_free_recv_priv (struct recv_priv *precvpriv);
+
+ int rtw_os_recv_resource_init(struct recv_priv *precvpriv, struct rtw_adapter *padapter);
+diff --git a/drivers/staging/rtl8723au/include/rtw_ap.h b/drivers/staging/rtl8723au/include/rtw_ap.h
+index 9f8d235..a642aac 100644
+--- a/drivers/staging/rtl8723au/include/rtw_ap.h
++++ b/drivers/staging/rtl8723au/include/rtw_ap.h
+@@ -26,8 +26,6 @@
+ void init_mlme_ap_info23a(struct rtw_adapter *padapter);
+ void free_mlme_ap_info23a(struct rtw_adapter *padapter);
+ /* void update_BCNTIM(struct rtw_adapter *padapter); */
+-void rtw_add_bcn_ie(struct rtw_adapter *padapter, struct wlan_bssid_ex *pnetwork, u8 index, u8 *data, u8 len);
+-void rtw_remove_bcn_ie(struct rtw_adapter *padapter, struct wlan_bssid_ex *pnetwork, u8 index);
+ void update_beacon23a(struct rtw_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
+ void add_RATid23a(struct rtw_adapter *padapter, struct sta_info *psta, u8 rssi_level);
+ void expire_timeout_chk23a(struct rtw_adapter *padapter);
+diff --git a/drivers/staging/rtl8723au/include/rtw_cmd.h b/drivers/staging/rtl8723au/include/rtw_cmd.h
+index d1fa95d..338b933 100644
+--- a/drivers/staging/rtl8723au/include/rtw_cmd.h
++++ b/drivers/staging/rtl8723au/include/rtw_cmd.h
+@@ -712,7 +712,6 @@ int rtw_ps_cmd23a(struct rtw_adapter*padapter);
+ int rtw_chk_hi_queue_cmd23a(struct rtw_adapter*padapter);
+ #endif
+
+-int rtw_set_chplan_cmd(struct rtw_adapter*padapter, u8 chplan, u8 enqueue);
+ int rtw_led_blink_cmd(struct rtw_adapter*padapter, struct led_8723a *pLed);
+ int rtw_set_csa_cmd(struct rtw_adapter*padapter, u8 new_ch_no);
+
+diff --git a/drivers/staging/rtl8723au/include/rtw_eeprom.h b/drivers/staging/rtl8723au/include/rtw_eeprom.h
+index a86f36e..8addfe7 100644
+--- a/drivers/staging/rtl8723au/include/rtw_eeprom.h
++++ b/drivers/staging/rtl8723au/include/rtw_eeprom.h
+@@ -125,11 +125,4 @@ struct eeprom_priv {
+ u8 efuse_eeprom_data[HWSET_MAX_SIZE_512]; /* 92C:256bytes, 88E:512bytes, we use union set (512bytes) */
+ };
+
+-void eeprom_write16(struct rtw_adapter *padapter, u16 reg, u16 data);
+-u16 eeprom_read16(struct rtw_adapter *padapter, u16 reg);
+-void read_eeprom_content(struct rtw_adapter *padapter);
+-void eeprom_read_sz(struct rtw_adapter *padapter, u16 reg, u8 *data, u32 sz);
+-
+-void read_eeprom_content_by_attrib(struct rtw_adapter *padapter);
+-
+ #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..91d10ea 100644
+index ea2a6c9..7348e18 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 {
@@ -58241,10 +73038,55 @@ index ea2a6c9..91d10ea 100644
u16 mgnt_seq;
/* struct fw_priv fwpriv; */
+@@ -543,8 +543,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);
+-unsigned int setup_beacon_frame(struct rtw_adapter *padapter,
+- unsigned char *beacon_frame);
+ 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 {
+ };
+
+
+-int read_macreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
+-int write_macreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
+-int read_bbreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
+-int write_bbreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
+-int read_rfreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
+-int write_rfreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
+-
+-
+ 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);
+ 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);
+-int set_assocsta_hdl(struct rtw_adapter *padapter, const u8 *pbuf);
+-int del_assocsta_hdl(struct rtw_adapter *padapter, const u8 *pbuf);
+ int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
+
+ int mlme_evt_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
diff --git a/drivers/staging/rtl8723au/include/usb_ops.h b/drivers/staging/rtl8723au/include/usb_ops.h
-index ff11e13..69680d1 100644
+index ff11e13..22a13ac 100644
--- a/drivers/staging/rtl8723au/include/usb_ops.h
+++ b/drivers/staging/rtl8723au/include/usb_ops.h
+@@ -36,9 +36,9 @@ enum {
+
+ void rtl8723au_set_hw_type(struct rtw_adapter *padapter);
+
+-void rtl8723au_recv_tasklet(void *priv);
++void rtl8723au_recv_tasklet(unsigned long priv);
+
+-void rtl8723au_xmit_tasklet(void *priv);
++void rtl8723au_xmit_tasklet(unsigned long priv);
+
+ /* Increase and check if the continual_urb_error of this @param dvobjprive is
+ * larger than MAX_CONTINUAL_URB_ERR. Return result
@@ -48,7 +48,7 @@ static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobj)
int ret = false;
int value;
@@ -58263,11 +73105,50 @@ index ff11e13..69680d1 100644
}
bool rtl8723au_chip_configure(struct rtw_adapter *padapter);
+diff --git a/drivers/staging/rtl8723au/include/xmit_osdep.h b/drivers/staging/rtl8723au/include/xmit_osdep.h
+index 2be04c48..a494e09 100644
+--- a/drivers/staging/rtl8723au/include/xmit_osdep.h
++++ b/drivers/staging/rtl8723au/include/xmit_osdep.h
+@@ -21,7 +21,7 @@
+
+ #define NR_XMITFRAME 256
+
+-int rtw_xmit23a_entry23a(struct sk_buff *pkt, struct net_device *pnetdev);
++netdev_tx_t rtw_xmit23a_entry23a(struct sk_buff *pkt, struct net_device *pnetdev);
+
+ void rtw_os_xmit_schedule23a(struct rtw_adapter *padapter);
+
+diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+index 0ae2180..cb7945c 100644
+--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
++++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+@@ -2435,7 +2435,7 @@ static int rtw_cfg80211_monitor_if_close(struct net_device *ndev)
+ return 0;
+ }
+
+-static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb,
++static netdev_tx_t rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb,
+ struct net_device *ndev)
+ {
+ int ret = 0;
+diff --git a/drivers/staging/rtl8723au/os_dep/xmit_linux.c b/drivers/staging/rtl8723au/os_dep/xmit_linux.c
+index 9a14074..3d02410 100644
+--- a/drivers/staging/rtl8723au/os_dep/xmit_linux.c
++++ b/drivers/staging/rtl8723au/os_dep/xmit_linux.c
+@@ -117,7 +117,7 @@ static void rtw_check_xmit_resource(struct rtw_adapter *padapter,
+ }
+ }
+
+-int rtw_xmit23a_entry23a(struct sk_buff *skb, struct net_device *pnetdev)
++netdev_tx_t rtw_xmit23a_entry23a(struct sk_buff *skb, struct net_device *pnetdev)
+ {
+ struct rtw_adapter *padapter = netdev_priv(pnetdev);
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
-index 860e1c2..609ee2a 100644
+index c78421b..f75c4c4 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
-@@ -722,6 +722,7 @@ static struct fb_ops lynxfb_ops = {
+@@ -720,6 +720,7 @@ static struct fb_ops lynxfb_ops = {
.fb_set_par = lynxfb_ops_set_par,
.fb_setcolreg = lynxfb_ops_setcolreg,
.fb_blank = lynxfb_ops_blank,
@@ -58275,7 +73156,7 @@ index 860e1c2..609ee2a 100644
.fb_fillrect = cfb_fillrect,
.fb_imageblit = cfb_imageblit,
.fb_copyarea = cfb_copyarea,
-@@ -767,7 +768,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
+@@ -765,7 +766,6 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
par->index = index;
output->channel = &crtc->channel;
sm750fb_set_drv(par);
@@ -58283,7 +73164,7 @@ index 860e1c2..609ee2a 100644
/*
* set current cursor variable and proc pointer,
-@@ -784,16 +784,20 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
+@@ -782,16 +782,20 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
memset_io(crtc->cursor.vstart, 0, crtc->cursor.size);
if (!g_hwcursor) {
@@ -58330,11 +73211,24 @@ index 39edd20..d860d0c 100644
/** Register functions (in the bus driver) to get called by visorchipset
* whenever a bus or device appears for which this guest is to be the
+diff --git a/drivers/staging/unisys/visornic/visornic_main.c b/drivers/staging/unisys/visornic/visornic_main.c
+index 0519470..14d4074 100644
+--- a/drivers/staging/unisys/visornic/visornic_main.c
++++ b/drivers/staging/unisys/visornic/visornic_main.c
+@@ -809,7 +809,7 @@ static inline bool vnic_hit_low_watermark(struct visornic_devdata *devdata,
+ * can be called again.
+ * Returns NETDEV_TX_OK.
+ */
+-static int
++static netdev_tx_t
+ visornic_xmit(struct sk_buff *skb, struct net_device *netdev)
+ {
+ struct visornic_devdata *devdata;
diff --git a/drivers/staging/wilc1000/host_interface.h b/drivers/staging/wilc1000/host_interface.h
-index b854db5..4c721d5 100644
+index 8faac27..ed87447 100644
--- a/drivers/staging/wilc1000/host_interface.h
+++ b/drivers/staging/wilc1000/host_interface.h
-@@ -10,6 +10,7 @@
+@@ -1,6 +1,7 @@
#ifndef HOST_INT_H
#define HOST_INT_H
@@ -58342,108 +73236,71 @@ index b854db5..4c721d5 100644
#include "coreconfigurator.h"
#define IP_ALEN 4
-diff --git a/drivers/staging/wilc1000/wilc_sdio.c b/drivers/staging/wilc1000/wilc_sdio.c
-index 300c571..a39d663 100644
---- a/drivers/staging/wilc1000/wilc_sdio.c
-+++ b/drivers/staging/wilc1000/wilc_sdio.c
-@@ -993,22 +993,22 @@ static int sdio_sync_ext(int nint /* how mant interrupts to enable. */)
- ********************************************/
-
- wilc_hif_func_t hif_sdio = {
-- sdio_init,
-- sdio_deinit,
-- sdio_read_reg,
-- sdio_write_reg,
-- sdio_read,
-- sdio_write,
-- sdio_sync,
-- sdio_clear_int,
-- sdio_read_int,
-- sdio_clear_int_ext,
-- sdio_read_size,
-- sdio_write,
-- sdio_read,
-- sdio_sync_ext,
-+ .hif_init = sdio_init,
-+ .hif_deinit = sdio_deinit,
-+ .hif_read_reg = sdio_read_reg,
-+ .hif_write_reg = sdio_write_reg,
-+ .hif_block_rx = sdio_read,
-+ .hif_block_tx = sdio_write,
-+ .hif_sync = sdio_sync,
-+ .hif_clear_int = sdio_clear_int,
-+ .hif_read_int = sdio_read_int,
-+ .hif_clear_int_ext = sdio_clear_int_ext,
-+ .hif_read_size = sdio_read_size,
-+ .hif_block_tx_ext = sdio_write,
-+ .hif_block_rx_ext = sdio_read,
-+ .hif_sync_ext = sdio_sync_ext,
-
-- sdio_set_max_speed,
-- sdio_set_default_speed,
-+ .hif_set_max_bus_speed = sdio_set_max_speed,
-+ .hif_set_default_bus_speed = sdio_set_default_speed,
- };
+diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
+index 54fe9d7..47110ad 100644
+--- a/drivers/staging/wilc1000/linux_wlan.c
++++ b/drivers/staging/wilc1000/linux_wlan.c
+@@ -1135,7 +1135,7 @@ static void linux_wlan_tx_complete(void *priv, int status)
+ kfree(pv_data);
+ }
+-int wilc_mac_xmit(struct sk_buff *skb, struct net_device *ndev)
++netdev_tx_t wilc_mac_xmit(struct sk_buff *skb, struct net_device *ndev)
+ {
+ 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 599508b..fc69923 100644
+index 86de50c..812eb42 100644
--- a/drivers/staging/wilc1000/wilc_spi.c
+++ b/drivers/staging/wilc1000/wilc_spi.c
-@@ -1257,20 +1257,20 @@ static int spi_sync_ext(int nint /* how mant interrupts to enable. */)
- *
- ********************************************/
- wilc_hif_func_t hif_spi = {
-- spi_init,
-- spi_deinit,
-- spi_read_reg,
-- spi_write_reg,
-- spi_read,
-- spi_write,
-- spi_sync,
-- spi_clear_int,
-- spi_read_int,
-- spi_clear_int_ext,
-- spi_read_size,
-- spi_write,
-- spi_read,
-- spi_sync_ext,
-- spi_max_bus_speed,
-- spi_default_bus_speed,
-+ .hif_init = spi_init,
-+ .hif_deinit = spi_deinit,
-+ .hif_read_reg = spi_read_reg,
-+ .hif_write_reg = spi_write_reg,
-+ .hif_block_rx = spi_read,
-+ .hif_block_tx = spi_write,
-+ .hif_sync = spi_sync,
-+ .hif_clear_int = spi_clear_int,
-+ .hif_read_int = spi_read_int,
-+ .hif_clear_int_ext = spi_clear_int_ext,
-+ .hif_read_size = spi_read_size,
-+ .hif_block_tx_ext = spi_write,
-+ .hif_block_rx_ext = spi_read,
-+ .hif_sync_ext = spi_sync_ext,
-+ .hif_set_max_bus_speed = spi_max_bus_speed,
-+ .hif_set_default_bus_speed = spi_default_bus_speed,
- };
-diff --git a/drivers/staging/wilc1000/wilc_wlan.h b/drivers/staging/wilc1000/wilc_wlan.h
-index 57e1d51..b922b75 100644
---- a/drivers/staging/wilc1000/wilc_wlan.h
-+++ b/drivers/staging/wilc1000/wilc_wlan.h
-@@ -1,7 +1,7 @@
- #ifndef WILC_WLAN_H
- #define WILC_WLAN_H
+@@ -20,6 +20,7 @@
--
+ #include "linux_wlan_common.h"
+ #include <linux/string.h>
+#include <linux/netdevice.h>
+ #include "wilc_wlan_if.h"
+ #include "wilc_wlan.h"
+ #include "wilc_wfi_netdevice.h"
+@@ -120,8 +121,6 @@ static u8 crc7(u8 crc, const u8 *buffer, u32 len)
- #define ISWILC1000(id) (((id & 0xfffff000) == 0x100000) ? 1 : 0)
+ #define USE_SPI_DMA 0
+-static const struct wilc1000_ops wilc1000_spi_ops;
+-
+ static int wilc_bus_probe(struct spi_device *spi)
+ {
+ int ret, gpio;
+diff --git a/drivers/staging/wilc1000/wilc_wlan.h b/drivers/staging/wilc1000/wilc_wlan.h
+index 2edd744..908a222 100644
+--- a/drivers/staging/wilc1000/wilc_wlan.h
++++ b/drivers/staging/wilc1000/wilc_wlan.h
+@@ -287,7 +287,7 @@ void wilc_chip_sleep_manually(struct wilc *wilc);
+
+ void wilc_enable_tcp_ack_filter(bool value);
+ int wilc_wlan_get_num_conn_ifcs(struct wilc *);
+-int wilc_mac_xmit(struct sk_buff *skb, struct net_device *dev);
++netdev_tx_t wilc_mac_xmit(struct sk_buff *skb, struct net_device *dev);
+
+ int wilc_mac_open(struct net_device *ndev);
+ int wilc_mac_close(struct net_device *ndev);
+diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c
+index a9c1e0b..5e513c6 100644
+--- 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)
+ * Returns:
+ * zero on success, non-zero on failure.
+ ----------------------------------------------------------------*/
+-static int p80211knetdev_hard_start_xmit(struct sk_buff *skb,
++static netdev_tx_t p80211knetdev_hard_start_xmit(struct sk_buff *skb,
+ netdevice_t *netdev)
+ {
+ int result = 0;
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
-index 35f7d31..a9928a7 100644
+index 3072f1a..1071742 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
-@@ -58,7 +58,7 @@ static const u32 sbp_unit_directory_template[] = {
+@@ -56,7 +56,7 @@ static const u32 sbp_unit_directory_template[] = {
#define SESSION_MAINTENANCE_INTERVAL HZ
@@ -58452,7 +73309,7 @@ index 35f7d31..a9928a7 100644
static void session_maintenance_work(struct work_struct *);
static int sbp_run_transaction(struct fw_card *, int, int, int, int,
-@@ -439,7 +439,7 @@ static void sbp_management_request_login(
+@@ -437,7 +437,7 @@ static void sbp_management_request_login(
login->login_lun = unpacked_lun;
login->status_fifo_addr = sbp2_pointer_to_addr(&req->orb.status_fifo);
login->exclusive = LOGIN_ORB_EXCLUSIVE(be32_to_cpu(req->orb.misc));
@@ -58545,7 +73402,7 @@ index 5836e55..740ab89 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 be4eedc..96aaf2f 100644
+index 9043f8f..ab0f354 100644
--- a/drivers/thermal/of-thermal.c
+++ b/drivers/thermal/of-thermal.c
@@ -31,6 +31,7 @@
@@ -58571,7 +73428,7 @@ index be4eedc..96aaf2f 100644
mutex_unlock(&tzd->lock);
return tzd;
-@@ -549,9 +552,11 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
+@@ -545,9 +548,11 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
return;
mutex_lock(&tzd->lock);
@@ -58600,7 +73457,7 @@ index 7fc919f..5521ec1 100644
};
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
-index d4a1331..dc8fe71 100644
+index abbed20..acf0737 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)
@@ -59017,10 +73874,10 @@ 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 14c54e0..1efd4f2 100644
+index 92982d7..758ecfe 100644
--- a/drivers/tty/moxa.c
+++ b/drivers/tty/moxa.c
-@@ -1189,7 +1189,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
+@@ -1188,7 +1188,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
}
ch = &brd->ports[port % MAX_PORTS_PER_BOARD];
@@ -59030,7 +73887,7 @@ index 14c54e0..1efd4f2 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 c3fe026..9cfe421 100644
+index c3fe026..66cd166 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)
@@ -59042,6 +73899,15 @@ index c3fe026..9cfe421 100644
kfree(dlci);
return NULL;
}
+@@ -2665,7 +2665,7 @@ static inline void muxnet_put(struct gsm_mux_net *mux_net)
+ kref_put(&mux_net->ref, net_free);
+ }
+
+-static int gsm_mux_net_start_xmit(struct sk_buff *skb,
++static netdev_tx_t gsm_mux_net_start_xmit(struct sk_buff *skb,
+ struct net_device *net)
+ {
+ struct gsm_mux_net *mux_net = netdev_priv(net);
@@ -2957,7 +2957,7 @@ static int gsmtty_open(struct tty_struct *tty, struct file *filp)
struct gsm_dlci *dlci = tty->driver_data;
struct tty_port *port = &dlci->port;
@@ -59052,10 +73918,10 @@ index c3fe026..9cfe421 100644
dlci->modem_rx = 0;
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
-index cf000b3..a399250 100644
+index b280abaa..3ccd7d1 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
-@@ -1507,7 +1507,7 @@ n_tty_receive_char_lnext(struct tty_struct *tty, unsigned char c, char flag)
+@@ -1515,7 +1515,7 @@ n_tty_receive_char_lnext(struct tty_struct *tty, unsigned char c, char flag)
static void
n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp,
@@ -59064,7 +73930,7 @@ index cf000b3..a399250 100644
{
struct n_tty_data *ldata = tty->disc_data;
size_t n, head;
-@@ -1527,7 +1527,7 @@ n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp,
+@@ -1535,7 +1535,7 @@ n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp,
static void
n_tty_receive_buf_raw(struct tty_struct *tty, const unsigned char *cp,
@@ -59073,7 +73939,7 @@ index cf000b3..a399250 100644
{
struct n_tty_data *ldata = tty->disc_data;
char flag = TTY_NORMAL;
-@@ -1544,7 +1544,7 @@ n_tty_receive_buf_raw(struct tty_struct *tty, const unsigned char *cp,
+@@ -1552,7 +1552,7 @@ n_tty_receive_buf_raw(struct tty_struct *tty, const unsigned char *cp,
static void
n_tty_receive_buf_closing(struct tty_struct *tty, const unsigned char *cp,
@@ -59082,7 +73948,7 @@ index cf000b3..a399250 100644
{
char flag = TTY_NORMAL;
-@@ -1560,7 +1560,7 @@ n_tty_receive_buf_closing(struct tty_struct *tty, const unsigned char *cp,
+@@ -1568,7 +1568,7 @@ n_tty_receive_buf_closing(struct tty_struct *tty, const unsigned char *cp,
static void
n_tty_receive_buf_standard(struct tty_struct *tty, const unsigned char *cp,
@@ -59091,7 +73957,7 @@ index cf000b3..a399250 100644
{
struct n_tty_data *ldata = tty->disc_data;
char flag = TTY_NORMAL;
-@@ -1594,7 +1594,7 @@ n_tty_receive_buf_standard(struct tty_struct *tty, const unsigned char *cp,
+@@ -1602,7 +1602,7 @@ n_tty_receive_buf_standard(struct tty_struct *tty, const unsigned char *cp,
static void
n_tty_receive_buf_fast(struct tty_struct *tty, const unsigned char *cp,
@@ -59100,7 +73966,7 @@ index cf000b3..a399250 100644
{
struct n_tty_data *ldata = tty->disc_data;
char flag = TTY_NORMAL;
-@@ -1619,7 +1619,7 @@ n_tty_receive_buf_fast(struct tty_struct *tty, const unsigned char *cp,
+@@ -1627,7 +1627,7 @@ n_tty_receive_buf_fast(struct tty_struct *tty, const unsigned char *cp,
}
static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
@@ -59109,7 +73975,7 @@ index cf000b3..a399250 100644
{
struct n_tty_data *ldata = tty->disc_data;
bool preops = I_ISTRIP(tty) || (I_IUCLC(tty) && L_IEXTEN(tty));
-@@ -1697,10 +1697,10 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
+@@ -1705,10 +1705,10 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
*/
static int
n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp,
@@ -59122,7 +73988,7 @@ index cf000b3..a399250 100644
down_read(&tty->termios_rwsem);
-@@ -1723,15 +1723,16 @@ n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp,
+@@ -1731,15 +1731,16 @@ n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp,
room = N_TTY_BUF_SIZE - (ldata->read_head - tail);
if (I_PARMRK(tty))
room = (room + 2) / 3;
@@ -59143,7 +74009,7 @@ index cf000b3..a399250 100644
n = min(count, room);
if (!n)
-@@ -2550,6 +2551,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
+@@ -2549,6 +2550,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
{
*ops = tty_ldisc_N_TTY;
ops->owner = NULL;
@@ -59153,7 +74019,7 @@ index cf000b3..a399250 100644
}
EXPORT_SYMBOL_GPL(n_tty_inherit_ops);
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
-index 78e9836..021d40e 100644
+index 2348fa6..14894f4 100644
--- a/drivers/tty/pty.c
+++ b/drivers/tty/pty.c
@@ -879,8 +879,10 @@ static void __init unix98_pty_init(void)
@@ -59200,7 +74066,7 @@ index 802eac7..f5dcf07 100644
clear_bit((info->aiop * 8) + info->chan, (void *) &xmit_flags[info->board]);
spin_unlock_irqrestore(&info->port.lock, flags);
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
-index 3912646..9a324e9 100644
+index c9720a9..f6c9276 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)
@@ -59228,6 +74094,19 @@ index 3912646..9a324e9 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 7cd6f9a..d13ac0a 100644
+--- a/drivers/tty/serial/8250/8250_pci.c
++++ b/drivers/tty/serial/8250/8250_pci.c
+@@ -5656,7 +5656,7 @@ static struct pci_device_id serial_pci_tbl[] = {
+ };
+
+ static pci_ers_result_t serial8250_io_error_detected(struct pci_dev *dev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct serial_private *priv = pci_get_drvdata(dev);
+
diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c
index 88246f7..9036604 100644
--- a/drivers/tty/serial/ifx6x60.c
@@ -59272,6 +74151,19 @@ index e5c42fe..f091b02 100644
&soft->is_intr_type[intr_type].is_num_intrs);
this_mir = this_ir = pending_intrs(soft, intr_type);
+diff --git a/drivers/tty/serial/jsm/jsm_driver.c b/drivers/tty/serial/jsm/jsm_driver.c
+index a119f11..120444e 100644
+--- a/drivers/tty/serial/jsm/jsm_driver.c
++++ b/drivers/tty/serial/jsm/jsm_driver.c
+@@ -336,7 +336,7 @@ static struct pci_driver jsm_driver = {
+ };
+
+ static pci_ers_result_t jsm_io_error_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct jsm_board *brd = pci_get_drvdata(pdev);
+
diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c
index 117df15..2f7dfcf 100644
--- a/drivers/tty/serial/kgdb_nmi.c
@@ -59288,7 +74180,7 @@ index 117df15..2f7dfcf 100644
return 0;
}
diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c
-index a260cde..6b2b5ce 100644
+index a260cde..604fce9 100644
--- a/drivers/tty/serial/kgdboc.c
+++ b/drivers/tty/serial/kgdboc.c
@@ -24,8 +24,9 @@
@@ -59368,6 +74260,15 @@ index a260cde..6b2b5ce 100644
return 0;
return configure_kgdboc();
+@@ -245,7 +252,7 @@ static void kgdboc_put_char(u8 chr)
+ kgdb_tty_line, chr);
+ }
+
+-static int param_set_kgdboc_var(const char *kmessage, struct kernel_param *kp)
++static int param_set_kgdboc_var(const char *kmessage, const struct kernel_param *kp)
+ {
+ int len = strlen(kmessage);
+
@@ -272,7 +279,7 @@ static int param_set_kgdboc_var(const char *kmessage, struct kernel_param *kp)
if (config[len - 1] == '\n')
config[len - 1] = '\0';
@@ -59448,7 +74349,7 @@ index d72cd73..aac0435 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 def5199..34857ea 100644
+index b1f54ab..de9edc3 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -1384,7 +1384,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
@@ -59638,7 +74539,7 @@ index 6188059..24bff50 100644
if (cmd != SIOCWANDEV)
diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
-index 6fc39fb..bb25ac4 100644
+index 5505ea8..d92b90e 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)
@@ -59893,10 +74794,10 @@ index fb00a06..bb80abd 100644
if (!retval)
port->flags |= ASYNC_NORMAL_ACTIVE;
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
-index 5381a72..ad8c38f 100644
+index e513940..fb19436 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
-@@ -1083,7 +1083,7 @@ EXPORT_SYMBOL(unregister_sysrq_key);
+@@ -1089,7 +1089,7 @@ EXPORT_SYMBOL(unregister_sysrq_key);
static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
@@ -59906,7 +74807,7 @@ index 5381a72..ad8c38f 100644
if (get_user(c, buf))
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
-index 7cef543..d58dc7d 100644
+index a7eacef..7aea89e 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -105,6 +105,8 @@
@@ -59918,7 +74819,7 @@ index 7cef543..d58dc7d 100644
#undef TTY_DEBUG_HANGUP
#ifdef TTY_DEBUG_HANGUP
# define tty_debug_hangup(tty, f, args...) tty_debug(tty, f, ##args)
-@@ -2281,6 +2283,8 @@ static int tiocsti(struct tty_struct *tty, char __user *p)
+@@ -2276,6 +2278,8 @@ static int tiocsti(struct tty_struct *tty, char __user *p)
char ch, mbz = 0;
struct tty_ldisc *ld;
@@ -59927,7 +74828,7 @@ index 7cef543..d58dc7d 100644
if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
return -EPERM;
if (get_user(ch, p))
-@@ -3564,7 +3568,7 @@ EXPORT_SYMBOL(tty_devnum);
+@@ -3555,7 +3559,7 @@ EXPORT_SYMBOL(tty_devnum);
void tty_default_fops(struct file_operations *fops)
{
@@ -59937,7 +74838,7 @@ index 7cef543..d58dc7d 100644
/*
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
-index 629e3c8..ff89802 100644
+index a054d03..c007e888 100644
--- a/drivers/tty/tty_ldisc.c
+++ b/drivers/tty/tty_ldisc.c
@@ -68,7 +68,7 @@ int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc)
@@ -59977,7 +74878,7 @@ index 629e3c8..ff89802 100644
raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags);
}
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
-index 482f33f..a90921e 100644
+index 846ed48..ffb3cbc 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)
@@ -60007,25 +74908,24 @@ index 482f33f..a90921e 100644
port->blocked_open--;
if (retval == 0)
port->flags |= ASYNC_NORMAL_ACTIVE;
-@@ -461,19 +461,19 @@ int tty_port_close_start(struct tty_port *port,
+@@ -461,18 +461,18 @@ int tty_port_close_start(struct tty_port *port,
return 0;
spin_lock_irqsave(&port->lock, flags);
- if (tty->count == 1 && port->count != 1) {
+ if (tty->count == 1 && atomic_read(&port->count) != 1) {
- printk(KERN_WARNING
- "tty_port_close_start: tty->count = 1 port count = %d.\n",
-- port->count);
+ tty_warn(tty, "%s: tty->count = 1 port count = %d\n", __func__,
+- port->count);
- port->count = 1;
-+ atomic_read(&port->count));
++ atomic_read(&port->count));
+ atomic_set(&port->count, 1);
}
- if (--port->count < 0) {
+ if (atomic_dec_return(&port->count) < 0) {
- printk(KERN_WARNING "tty_port_close_start: count = %d\n",
-- port->count);
+ tty_warn(tty, "%s: bad port count (%d)\n", __func__,
+- port->count);
- port->count = 0;
-+ atomic_read(&port->count));
++ atomic_read(&port->count));
+ atomic_set(&port->count, 0);
}
@@ -60034,7 +74934,7 @@ index 482f33f..a90921e 100644
spin_unlock_irqrestore(&port->lock, flags);
return 0;
}
-@@ -570,7 +570,7 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty,
+@@ -569,7 +569,7 @@ int tty_port_open(struct tty_port *port, struct tty_struct *tty,
struct file *filp)
{
spin_lock_irq(&port->lock);
@@ -60295,7 +75195,7 @@ index ccfaba9..523f476 100644
int write_used; /* number of non-empty write buffers */
int transmitting;
diff --git a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
-index 2a3bbdf..91d72cf 100644
+index cffa0a0..1758349 100644
--- a/drivers/usb/core/devices.c
+++ b/drivers/usb/core/devices.c
@@ -126,7 +126,7 @@ static const char format_endpt[] =
@@ -60326,10 +75226,10 @@ index 2a3bbdf..91d72cf 100644
file->f_version = event_count;
return POLLIN | POLLRDNORM;
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
-index 38ae877c..9bf9e7d 100644
+index 59e7a33..86f0d9a 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
-@@ -187,7 +187,7 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes,
+@@ -168,7 +168,7 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes,
struct usb_dev_state *ps = file->private_data;
struct usb_device *dev = ps->dev;
ssize_t ret = 0;
@@ -60338,7 +75238,7 @@ index 38ae877c..9bf9e7d 100644
loff_t pos;
int i;
-@@ -229,22 +229,22 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes,
+@@ -210,22 +210,22 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes,
for (i = 0; nbytes && i < dev->descriptor.bNumConfigurations; i++) {
struct usb_config_descriptor *config =
(struct usb_config_descriptor *)dev->rawdescriptors[i];
@@ -60365,7 +75265,7 @@ index 38ae877c..9bf9e7d 100644
if (copy_to_user(buf,
dev->rawdescriptors[i] + (*ppos - pos),
min(len, alloclen))) {
-@@ -1502,7 +1502,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
+@@ -1485,7 +1485,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
}
}
as->urb->dev = ps->dev;
@@ -60375,7 +75275,7 @@ index 38ae877c..9bf9e7d 100644
(uurb->endpoint & USB_DIR_IN);
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
-index 1c102d6..d15688e 100644
+index df0e3b9..5d9abce 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -1605,7 +1605,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
@@ -60397,7 +75297,7 @@ index 1c102d6..d15688e 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 84df093..f2238d4 100644
+index 84f6574..036bf7c 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -26,6 +26,7 @@
@@ -60408,7 +75308,7 @@ index 84df093..f2238d4 100644
#include <asm/uaccess.h>
#include <asm/byteorder.h>
-@@ -4717,6 +4718,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
+@@ -4732,6 +4733,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
goto done;
return;
}
@@ -60433,10 +75333,10 @@ index 65b6e6b..c0afa90 100644
static DEVICE_ATTR_RO(urbnum);
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
-index f8bbd0b..85b2e6a 100644
+index ebb29ca..8ef33ed 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
-@@ -447,7 +447,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
+@@ -448,7 +448,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
set_dev_node(&dev->dev, dev_to_node(bus->controller));
dev->state = USB_STATE_ATTACHED;
dev->lpm_disable_count = 1;
@@ -60486,6 +75386,19 @@ index 8cfc319..4868255 100644
return 0;
}
+diff --git a/drivers/usb/gadget/function/f_phonet.c b/drivers/usb/gadget/function/f_phonet.c
+index 157441d..c0825d6 100644
+--- a/drivers/usb/gadget/function/f_phonet.c
++++ b/drivers/usb/gadget/function/f_phonet.c
+@@ -223,7 +223,7 @@ static void pn_tx_complete(struct usb_ep *ep, struct usb_request *req)
+ netif_wake_queue(dev);
+ }
+
+-static int pn_net_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t pn_net_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct phonet_port *port = netdev_priv(dev);
+ struct f_phonet *fp;
diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c
index 6a2346b..22dd790 100644
--- a/drivers/usb/gadget/function/f_uac1.c
@@ -60499,10 +75412,10 @@ index 6a2346b..22dd790 100644
#include "u_uac1.h"
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
-index f7771d8..5942693 100644
+index 6af145f..17d4bf2 100644
--- a/drivers/usb/gadget/function/u_serial.c
+++ b/drivers/usb/gadget/function/u_serial.c
-@@ -733,9 +733,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
+@@ -747,9 +747,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
spin_lock_irq(&port->port_lock);
/* already open? Great. */
@@ -60514,7 +75427,7 @@ index f7771d8..5942693 100644
/* currently opening/closing? wait ... */
} else if (port->openclose) {
-@@ -794,7 +794,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
+@@ -808,7 +808,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
tty->driver_data = port;
port->port.tty = tty;
@@ -60523,7 +75436,7 @@ index f7771d8..5942693 100644
port->openclose = false;
/* if connected, start the I/O stream */
-@@ -836,11 +836,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
+@@ -850,11 +850,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
spin_lock_irq(&port->port_lock);
@@ -60538,7 +75451,7 @@ index f7771d8..5942693 100644
goto exit;
}
-@@ -850,7 +850,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
+@@ -864,7 +864,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
* and sleep if necessary
*/
port->openclose = true;
@@ -60547,7 +75460,7 @@ index f7771d8..5942693 100644
gser = port->port_usb;
if (gser && gser->disconnect)
-@@ -1066,7 +1066,7 @@ static int gs_closed(struct gs_port *port)
+@@ -1320,7 +1320,7 @@ static int gs_closed(struct gs_port *port)
int cond;
spin_lock_irq(&port->port_lock);
@@ -60556,7 +75469,7 @@ index f7771d8..5942693 100644
spin_unlock_irq(&port->port_lock);
return cond;
}
-@@ -1209,7 +1209,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
+@@ -1465,7 +1465,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
/* if it's already open, start I/O ... and notify the serial
* protocol about open/close status (connect/disconnect).
*/
@@ -60565,7 +75478,7 @@ index f7771d8..5942693 100644
pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
gs_start_io(port);
if (gser->connect)
-@@ -1255,7 +1255,7 @@ void gserial_disconnect(struct gserial *gser)
+@@ -1512,7 +1512,7 @@ void gserial_disconnect(struct gserial *gser)
port->port_usb = NULL;
gser->ioport = NULL;
@@ -60574,7 +75487,7 @@ index f7771d8..5942693 100644
wake_up_interruptible(&port->drain_wait);
if (port->port.tty)
tty_hangup(port->port.tty);
-@@ -1268,7 +1268,7 @@ void gserial_disconnect(struct gserial *gser)
+@@ -1525,7 +1525,7 @@ void gserial_disconnect(struct gserial *gser)
/* finally, free any unused/unusable I/O buffers */
spin_lock_irqsave(&port->port_lock, flags);
@@ -60595,6 +75508,28 @@ index c78c841..48fd281 100644
#include "u_uac1.h"
+diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
+index 87fb0fd..d2be0ad 100644
+--- a/drivers/usb/gadget/legacy/inode.c
++++ b/drivers/usb/gadget/legacy/inode.c
+@@ -1702,6 +1702,8 @@ static struct usb_gadget_driver gadgetfs_driver = {
+
+ static void gadgetfs_nop(struct usb_gadget *arg) { }
+
++static int gadgetfs_nop2(struct usb_gadget *arg, const struct usb_ctrlrequest *req) { }
++
+ static int gadgetfs_probe(struct usb_gadget *gadget,
+ struct usb_gadget_driver *driver)
+ {
+@@ -1713,7 +1715,7 @@ static struct usb_gadget_driver probe_driver = {
+ .max_speed = USB_SPEED_HIGH,
+ .bind = gadgetfs_probe,
+ .unbind = gadgetfs_nop,
+- .setup = (void *)gadgetfs_nop,
++ .setup = gadgetfs_nop2,
+ .disconnect = gadgetfs_nop,
+ .driver = {
+ .name = "nop",
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
index dde4445..f51cd5a 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
@@ -60609,7 +75544,7 @@ index dde4445..f51cd5a 100644
dum->hs_hcd = hcd_to_dummy_hcd(hcd);
dum->hs_hcd->dum = dum;
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
-index 48c92bf..3f30f77 100644
+index 14178bb..34d20c3 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)
@@ -60644,7 +75579,7 @@ index 086a711..1caf013 100644
if (!retval && !wait_for_completion_timeout(&done,
msecs_to_jiffies(2000))) {
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
-index 54f5332..8b8335c 100644
+index aad0777..19cc70f 100644
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -44,9 +44,9 @@
@@ -60712,7 +75647,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 760cb57..fc7f8ad 100644
+index 04dcedf..de1615b 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)
@@ -60751,7 +75686,7 @@ index a7de8e8..e1ef134 100644
spin_lock_init(&uhci->lock);
setup_timer(&uhci->fsbr_timer, uhci_fsbr_timeout,
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
-index c2d6520..04853a9 100644
+index f0640b7..f87a6f9 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -32,7 +32,7 @@
@@ -60764,10 +75699,10 @@ index c2d6520..04853a9 100644
/* Device for a quirk */
#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
-index 776d59c..ae87b88 100644
+index 0c8087d..0f5a685 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
-@@ -4853,7 +4853,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
+@@ -4870,7 +4870,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
int retval;
/* Accept arbitrarily long scatter-gather lists */
@@ -60798,6 +75733,123 @@ index a0a3827..d7ec10b 100644
memset(&props, 0, sizeof(struct backlight_properties));
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
+--- 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)
+ vc_resize(vc, 80, 25);
+ }
+
+-static int sisusbdummycon_dummy(void)
++static void sisusb_con_deinit(struct vc_data *a)
+ {
+- return 0;
+ }
+
+-#define SISUSBCONDUMMY (void *)sisusbdummycon_dummy
++static void sisusb_con_clear(struct vc_data *a, int b, int c, int d, int e)
++{
++}
++
++static void sisusb_con_putc(struct vc_data *a, int b, int c, int d)
++{
++}
++
++static void sisusb_con_putcs(struct vc_data *a, const unsigned short *b, int c, int d, int e)
++{
++}
++
++static void sisusb_con_cursor(struct vc_data *a, int b)
++{
++}
++
++static int sisusb_con_scroll(struct vc_data *a, int b, int c, int d, int e)
++{
++ return 0;
++}
++
++static void sisusb_con_bmove(struct vc_data *a, int b, int c, int d, int e, int f, int g)
++{
++}
++
++static int sisusb_con_switch(struct vc_data *a)
++{
++ return 0;
++}
++
++static int sisusb_con_blank(struct vc_data *a, int b, int c)
++{
++ return 0;
++}
++
++static int sisusb_con_font_set(struct vc_data *a, struct console_font *b, unsigned c)
++{
++ return 0;
++}
++
++static int sisusb_con_font_get(struct vc_data *a, struct console_font *b)
++{
++ return 0;
++}
++
++static int sisusb_con_font_default(struct vc_data *a, struct console_font *b, char *c)
++{
++ return 0;
++}
++
++static int sisusb_con_font_copy(struct vc_data *a, int b)
++{
++ return 0;
++}
++
++static int sisusb_con_set_palette(struct vc_data *a, unsigned char *b)
++{
++ return 0;
++}
++
++static int sisusb_con_scrolldelta(struct vc_data *a, int b)
++{
++ return 0;
++}
+
+ static const struct consw sisusb_dummy_con = {
+ .owner = THIS_MODULE,
+ .con_startup = sisusbdummycon_startup,
+ .con_init = sisusbdummycon_init,
+- .con_deinit = SISUSBCONDUMMY,
+- .con_clear = SISUSBCONDUMMY,
+- .con_putc = SISUSBCONDUMMY,
+- .con_putcs = SISUSBCONDUMMY,
+- .con_cursor = SISUSBCONDUMMY,
+- .con_scroll = SISUSBCONDUMMY,
+- .con_bmove = SISUSBCONDUMMY,
+- .con_switch = SISUSBCONDUMMY,
+- .con_blank = SISUSBCONDUMMY,
+- .con_font_set = SISUSBCONDUMMY,
+- .con_font_get = SISUSBCONDUMMY,
+- .con_font_default = SISUSBCONDUMMY,
+- .con_font_copy = SISUSBCONDUMMY,
+- .con_set_palette = SISUSBCONDUMMY,
+- .con_scrolldelta = SISUSBCONDUMMY,
++ .con_deinit = sisusb_con_deinit,
++ .con_clear = sisusb_con_clear,
++ .con_putc = sisusb_con_putc,
++ .con_putcs = sisusb_con_putcs,
++ .con_cursor = sisusb_con_cursor,
++ .con_scroll = sisusb_con_scroll,
++ .con_bmove = sisusb_con_bmove,
++ .con_switch = sisusb_con_switch,
++ .con_blank = sisusb_con_blank,
++ .con_font_set = sisusb_con_font_set,
++ .con_font_get = sisusb_con_font_get,
++ .con_font_default = sisusb_con_font_default,
++ .con_font_copy = sisusb_con_font_copy,
++ .con_set_palette = sisusb_con_set_palette,
++ .con_scrolldelta = sisusb_con_scrolldelta,
+ };
+
+ int
diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
index 3806e70..55c508b 100644
--- a/drivers/usb/serial/console.c
@@ -61004,6 +76056,19 @@ index 69af4fd..da390d7 100644
}
/* Return the xfer's ID. */
+diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c
+index 8c80a48..8a205a9 100644
+--- a/drivers/vfio/pci/vfio_pci.c
++++ b/drivers/vfio/pci/vfio_pci.c
+@@ -1011,7 +1011,7 @@ static void vfio_pci_remove(struct pci_dev *pdev)
+ }
+
+ static pci_ers_result_t vfio_pci_aer_err_detected(struct pci_dev *pdev,
+- pci_channel_state_t state)
++ enum pci_channel_state state)
+ {
+ struct vfio_pci_device *vdev;
+ struct vfio_device *device;
diff --git a/drivers/vhost/vringh.c b/drivers/vhost/vringh.c
index 3bb02c6..a01ff38 100644
--- a/drivers/vhost/vringh.c
@@ -61090,6 +76155,123 @@ 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
+--- 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)
+ vc_resize(vc, DUMMY_COLUMNS, DUMMY_ROWS);
+ }
+
+-static int dummycon_dummy(void)
++static void dummycon_deinit(struct vc_data *a)
++{
++}
++
++static void dummycon_clear(struct vc_data *a, int b, int c, int d, int e)
++{
++}
++
++static void dummycon_putc(struct vc_data *a, int b, int c, int d)
++{
++}
++
++static void dummycon_putcs(struct vc_data *a, const unsigned short *b, int c, int d, int e)
++{
++}
++
++static void dummycon_cursor(struct vc_data *a, int b)
++{
++}
++
++static int dummycon_scroll(struct vc_data *a, int b, int c, int d, int e)
++{
++ return 0;
++}
++
++static void dummycon_bmove(struct vc_data *a, int b, int c, int d, int e, int f, int g)
++{
++}
++
++static int dummycon_switch(struct vc_data *a)
+ {
+ return 0;
+ }
+
+-#define DUMMY (void *)dummycon_dummy
++static int dummycon_blank(struct vc_data *a, int b, int c)
++{
++ return 0;
++}
++
++static int dummycon_font_set(struct vc_data *a, struct console_font *b, unsigned c)
++{
++ return 0;
++}
++
++static int dummycon_font_get(struct vc_data *a, struct console_font *b)
++{
++ return 0;
++}
++
++static int dummycon_font_default(struct vc_data *a, struct console_font *b , char *c)
++{
++ return 0;
++}
++
++static int dummycon_font_copy(struct vc_data *a, int b)
++{
++ return 0;
++}
++
++static int dummycon_set_palette(struct vc_data *a, unsigned char *b)
++{
++ return 0;
++}
++
++static int dummycon_scrolldelta(struct vc_data *a, int b)
++{
++ return 0;
++}
+
+ /*
+ * The console `switch' structure for the dummy console
+@@ -58,20 +120,20 @@ const struct consw dummy_con = {
+ .owner = THIS_MODULE,
+ .con_startup = dummycon_startup,
+ .con_init = dummycon_init,
+- .con_deinit = DUMMY,
+- .con_clear = DUMMY,
+- .con_putc = DUMMY,
+- .con_putcs = DUMMY,
+- .con_cursor = DUMMY,
+- .con_scroll = DUMMY,
+- .con_bmove = DUMMY,
+- .con_switch = DUMMY,
+- .con_blank = DUMMY,
+- .con_font_set = DUMMY,
+- .con_font_get = DUMMY,
+- .con_font_default = DUMMY,
+- .con_font_copy = DUMMY,
+- .con_set_palette = DUMMY,
+- .con_scrolldelta = DUMMY,
++ .con_deinit = dummycon_deinit,
++ .con_clear = dummycon_clear,
++ .con_putc = dummycon_putc,
++ .con_putcs = dummycon_putcs,
++ .con_cursor = dummycon_cursor,
++ .con_scroll = dummycon_scroll,
++ .con_bmove = dummycon_bmove,
++ .con_switch = dummycon_switch,
++ .con_blank = dummycon_blank,
++ .con_font_set = dummycon_font_set,
++ .con_font_get = dummycon_font_get,
++ .con_font_default = dummycon_font_default,
++ .con_font_copy = dummycon_font_copy,
++ .con_set_palette = dummycon_set_palette,
++ .con_scrolldelta = dummycon_scrolldelta,
+ };
+ EXPORT_SYMBOL_GPL(dummy_con);
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 6e92917..2f3dbad 100644
--- a/drivers/video/console/fbcon.c
@@ -61103,6 +76285,51 @@ index 6e92917..2f3dbad 100644
/* console mappings */
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
+--- 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,
+ * The console `switch' structure for the VGA based console
+ */
+
+-static int vgacon_dummy(struct vc_data *c)
++static void vgacon_clear(struct vc_data *vc, int a, int b, int c, int d)
+ {
+- return 0;
+ }
+
+-#define DUMMY (void *) vgacon_dummy
++static void vgacon_putc(struct vc_data *vc, int a, int b, int c)
++{
++}
++
++static void vgacon_putcs(struct vc_data *vc, const unsigned short *a, int b, int c, int d)
++{
++}
++
++static void vgacon_bmove(struct vc_data *vc, int a, int b, int c, int d, int e, int f)
++{
++}
+
+ const struct consw vga_con = {
+ .owner = THIS_MODULE,
+ .con_startup = vgacon_startup,
+ .con_init = vgacon_init,
+ .con_deinit = vgacon_deinit,
+- .con_clear = DUMMY,
+- .con_putc = DUMMY,
+- .con_putcs = DUMMY,
++ .con_clear = vgacon_clear,
++ .con_putc = vgacon_putc,
++ .con_putcs = vgacon_putcs,
+ .con_cursor = vgacon_cursor,
+ .con_scroll = vgacon_scroll,
+- .con_bmove = DUMMY,
++ .con_bmove = vgacon_bmove,
+ .con_switch = vgacon_switch,
+ .con_blank = vgacon_blank,
+ .con_font_set = vgacon_font_set,
diff --git a/drivers/video/fbdev/arcfb.c b/drivers/video/fbdev/arcfb.c
index 1b0b233..6f34c2c 100644
--- a/drivers/video/fbdev/arcfb.c
@@ -61150,6 +76377,27 @@ index f34ed47f..026367f 100644
info->flags |= FBINFO_HWACCEL_DISABLED;
}
+diff --git a/drivers/video/fbdev/aty/mach64_ct.c b/drivers/video/fbdev/aty/mach64_ct.c
+index 51f29d6..2c15339 100644
+--- a/drivers/video/fbdev/aty/mach64_ct.c
++++ b/drivers/video/fbdev/aty/mach64_ct.c
+@@ -630,13 +630,14 @@ static void aty_resume_pll_ct(const struct fb_info *info,
+ aty_st_pll_ct(EXT_VPLL_CNTL, pll->ct.ext_vpll_cntl, par);
+ }
+
+-static int dummy(void)
++static int aty_set_dac(const struct fb_info * info,
++ const union aty_pll * pll, u32 bpp, u32 accel)
+ {
+ return 0;
+ }
+
+ const struct aty_dac_ops aty_dac_ct = {
+- .set_dac = (void *) dummy,
++ .set_dac = aty_set_dac
+ };
+
+ const struct aty_pll_ops aty_pll_ct = {
diff --git a/drivers/video/fbdev/aty/mach64_cursor.c b/drivers/video/fbdev/aty/mach64_cursor.c
index 2fa0317..4983f2a 100644
--- a/drivers/video/fbdev/aty/mach64_cursor.c
@@ -61173,8 +76421,43 @@ index 2fa0317..4983f2a 100644
return 0;
}
+diff --git a/drivers/video/fbdev/aty/mach64_gx.c b/drivers/video/fbdev/aty/mach64_gx.c
+index 10c988a..f7d9299 100644
+--- a/drivers/video/fbdev/aty/mach64_gx.c
++++ b/drivers/video/fbdev/aty/mach64_gx.c
+@@ -894,17 +894,26 @@ static int aty_set_dac_unsupported(const struct fb_info *info,
+ return 0;
+ }
+
+-static int dummy(void)
++static int aty_var_to_pll(const struct fb_info * info, u32 vclk_per, u32 bpp, union aty_pll * pll)
+ {
+ return 0;
+ }
+
++static u32 aty_pll_to_var(const struct fb_info * info, const union aty_pll * pll)
++{
++ return 0;
++}
++
++static void aty_set_pll(const struct fb_info * info, const union aty_pll * pll)
++{
++}
++
+ const struct aty_dac_ops aty_dac_unsupported = {
+ .set_dac = aty_set_dac_unsupported,
+ };
+
+ const struct aty_pll_ops aty_pll_unsupported = {
+- .var_to_pll = (void *) dummy,
+- .pll_to_var = (void *) dummy,
+- .set_pll = (void *) dummy,
++ .var_to_pll = aty_var_to_pll,
++ .pll_to_var = aty_pll_to_var,
++ .set_pll = aty_set_pll,
+ };
diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c
-index 3fc63c2..eec5e49 100644
+index 57721c7..55142ed 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)
@@ -61198,7 +76481,7 @@ index 3fc63c2..eec5e49 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 0705d88..0e17c07 100644
+index 4e73b6f..69a6b87 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,
@@ -61403,10 +76686,10 @@ index ce7dab7..a87baf8 100644
info->var.accel_flags = (!noaccel);
-diff --git a/drivers/video/fbdev/omap2/dss/display.c b/drivers/video/fbdev/omap2/dss/display.c
+diff --git a/drivers/video/fbdev/omap2/omapfb/dss/display.c b/drivers/video/fbdev/omap2/omapfb/dss/display.c
index ef5b902..47cf7f5 100644
---- a/drivers/video/fbdev/omap2/dss/display.c
-+++ b/drivers/video/fbdev/omap2/dss/display.c
+--- a/drivers/video/fbdev/omap2/omapfb/dss/display.c
++++ b/drivers/video/fbdev/omap2/omapfb/dss/display.c
@@ -161,12 +161,14 @@ int omapdss_register_display(struct omap_dss_device *dssdev)
if (dssdev->name == NULL)
dssdev->name = dssdev->alias;
@@ -61459,6 +76742,19 @@ index 82c0a8c..42499a1 100644
};
static int sh_mobile_lcdc_sginit(struct fb_info *info,
+diff --git a/drivers/video/fbdev/sis/sis_main.h b/drivers/video/fbdev/sis/sis_main.h
+index 32e23c2..7b73082 100644
+--- a/drivers/video/fbdev/sis/sis_main.h
++++ b/drivers/video/fbdev/sis/sis_main.h
+@@ -763,7 +763,7 @@ extern void SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsig
+ extern unsigned short SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg);
+ extern void SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
+ extern void SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
+- unsigned char myor, unsigned char myand);
++ unsigned char myor, unsigned short myand);
+ extern void SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
+ extern void SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
+ extern unsigned short SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
index 9279e5f..d5f5276 100644
--- a/drivers/video/fbdev/smscufx.c
@@ -64578,6 +79874,19 @@ index 4436778..bfcd027 100644
.name = "xen-percpu",
.irq_disable = disable_dynirq,
+diff --git a/drivers/xen/xen-pciback/pci_stub.c b/drivers/xen/xen-pciback/pci_stub.c
+index 258b7c3..6aad74a 100644
+--- a/drivers/xen/xen-pciback/pci_stub.c
++++ b/drivers/xen/xen-pciback/pci_stub.c
+@@ -831,7 +831,7 @@ end:
+ */
+
+ static pci_ers_result_t xen_pcibk_error_detected(struct pci_dev *dev,
+- pci_channel_state_t error)
++ enum pci_channel_state error)
+ {
+ struct pcistub_device *psdev;
+ pci_ers_result_t result;
diff --git a/drivers/xen/xenfs/xenstored.c b/drivers/xen/xenfs/xenstored.c
index fef20db..d28b1ab 100644
--- a/drivers/xen/xenfs/xenstored.c
@@ -64612,7 +79921,7 @@ index e297e1b..aeb0982 100644
fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
diff --git a/firmware/WHENCE b/firmware/WHENCE
-index 0c4d96d..b17700f 100644
+index de6f22e..51fbae7 100644
--- a/firmware/WHENCE
+++ b/firmware/WHENCE
@@ -653,21 +653,23 @@ Found in hex form in kernel source.
@@ -76960,6 +92269,41 @@ index 0000000..43d7c4f
+:1095C00080080000800E00008008008080080000F5
+:1095D00080000A8080000A00800009808000090065
+:00000001FF
+diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
+index e9e0437..a442193 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,
+ if (ret == 0)
+ return ret;
+
+- ret = read_cache_pages(mapping, pages, (void *)v9fs_vfs_readpage, filp);
++ ret = read_cache_pages(mapping, pages, v9fs_vfs_readpage, filp);
+ p9_debug(P9_DEBUG_VFS, " = %d\n", ret);
+ return ret;
+ }
+diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
+index a34702c..ff71f79 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)
+ {
+ int i;
+ int rflags = 0;
+- struct dotl_openflag_map dotl_oflag_map[] = {
++ static const struct dotl_openflag_map dotl_oflag_map[] = {
+ { O_CREAT, P9_DOTL_CREATE },
+ { O_EXCL, P9_DOTL_EXCL },
+ { O_NOCTTY, P9_DOTL_NOCTTY },
+@@ -526,7 +526,7 @@ static int v9fs_mapped_iattr_valid(int iattr_valid)
+ {
+ int i;
+ int p9_iattr_valid = 0;
+- struct dotl_iattr_map dotl_iattr_map[] = {
++ static const struct dotl_iattr_map dotl_iattr_map[] = {
+ { ATTR_MODE, P9_ATTR_MODE },
+ { ATTR_UID, P9_ATTR_UID },
+ { ATTR_GID, P9_ATTR_GID },
diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
index 2d0cbbd..a6d61492 100644
--- a/fs/Kconfig.binfmt
@@ -76973,11 +92317,46 @@ index 2d0cbbd..a6d61492 100644
---help---
A.out (Assembler.OUTput) is a set of formats for libraries and
executables used in the earliest versions of UNIX. Linux used
+diff --git a/fs/afs/file.c b/fs/afs/file.c
+index 999bc3c..3926949 100644
+--- a/fs/afs/file.c
++++ b/fs/afs/file.c
+@@ -122,11 +122,11 @@ static void afs_file_readpage_read_complete(struct page *page,
+ /*
+ * read page from file, directory or symlink, given a key to use
+ */
+-int afs_page_filler(void *data, struct page *page)
++int afs_page_filler(struct file *data, struct page *page)
+ {
+ struct inode *inode = page->mapping->host;
+ struct afs_vnode *vnode = AFS_FS_I(inode);
+- struct key *key = data;
++ struct key *key = (struct key *)data;
+ size_t len;
+ off_t offset;
+ int ret;
+@@ -220,14 +220,14 @@ static int afs_readpage(struct file *file, struct page *page)
+ if (file) {
+ key = file->private_data;
+ ASSERT(key != NULL);
+- ret = afs_page_filler(key, page);
++ ret = afs_page_filler((struct file *)key, page);
+ } else {
+ struct inode *inode = page->mapping->host;
+ key = afs_request_key(AFS_FS_S(inode->i_sb)->volume->cell);
+ if (IS_ERR(key)) {
+ ret = PTR_ERR(key);
+ } else {
+- ret = afs_page_filler(key, page);
++ ret = afs_page_filler((struct file *)key, page);
+ key_put(key);
+ }
+ }
diff --git a/fs/afs/inode.c b/fs/afs/inode.c
-index e06f5a2..81d07ac 100644
+index 86cc726..b9b7f73 100644
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
-@@ -141,7 +141,7 @@ struct inode *afs_iget_autocell(struct inode *dir, const char *dev_name,
+@@ -142,7 +142,7 @@ struct inode *afs_iget_autocell(struct inode *dir, const char *dev_name,
struct afs_vnode *vnode;
struct super_block *sb;
struct inode *inode;
@@ -76986,7 +92365,7 @@ index e06f5a2..81d07ac 100644
_enter("{%x:%u},%*.*s,",
AFS_FS_I(dir)->fid.vid, AFS_FS_I(dir)->fid.vnode,
-@@ -154,7 +154,7 @@ struct inode *afs_iget_autocell(struct inode *dir, const char *dev_name,
+@@ -155,7 +155,7 @@ struct inode *afs_iget_autocell(struct inode *dir, const char *dev_name,
data.fid.unique = 0;
data.fid.vnode = 0;
@@ -76995,6 +92374,28 @@ index e06f5a2..81d07ac 100644
afs_iget5_autocell_test, afs_iget5_set,
&data);
if (!inode) {
+diff --git a/fs/afs/internal.h b/fs/afs/internal.h
+index 71d5982..3112bf6 100644
+--- a/fs/afs/internal.h
++++ b/fs/afs/internal.h
+@@ -15,7 +15,7 @@
+ #include <linux/pagemap.h>
+ #include <linux/skbuff.h>
+ #include <linux/rxrpc.h>
+-#include <linux/key.h>
++#include <linux/key-type.h>
+ #include <linux/workqueue.h>
+ #include <linux/sched.h>
+ #include <linux/fscache.h>
+@@ -498,7 +498,7 @@ extern const struct file_operations afs_file_operations;
+
+ extern int afs_open(struct inode *, struct file *);
+ extern int afs_release(struct inode *, struct file *);
+-extern int afs_page_filler(void *, struct page *);
++extern int afs_page_filler(struct file *, struct page *);
+
+ /*
+ * flock.c
diff --git a/fs/aio.c b/fs/aio.c
index 155f842..89922d8 100644
--- a/fs/aio.c
@@ -77009,7 +92410,7 @@ index 155f842..89922d8 100644
file = aio_private_file(ctx, nr_pages);
diff --git a/fs/attr.c b/fs/attr.c
-index 6530ced..559e5e6 100644
+index 25b24d0..85550fc 100644
--- a/fs/attr.c
+++ b/fs/attr.c
@@ -102,6 +102,10 @@ int inode_newsize_ok(const struct inode *inode, loff_t offset)
@@ -77172,7 +92573,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 3a93755..daf2ccc 100644
+index 7d914c6..a86ce2a 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -36,6 +36,7 @@
@@ -77275,7 +92676,7 @@ index 3a93755..daf2ccc 100644
return -EFAULT;
return 0;
}
-@@ -516,14 +543,14 @@ static inline int arch_check_elf(struct elfhdr *ehdr, bool has_interp,
+@@ -518,14 +545,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,
@@ -77293,7 +92694,7 @@ index 3a93755..daf2ccc 100644
unsigned long total_size;
int i;
-@@ -543,6 +570,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -545,6 +572,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
goto out;
}
@@ -77305,7 +92706,7 @@ index 3a93755..daf2ccc 100644
eppnt = interp_elf_phdata;
for (i = 0; i < interp_elf_ex->e_phnum; i++, eppnt++) {
if (eppnt->p_type == PT_LOAD) {
-@@ -566,8 +598,6 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -568,8 +600,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;
@@ -77314,7 +92715,7 @@ index 3a93755..daf2ccc 100644
error = map_addr;
if (BAD_ADDR(map_addr))
goto out;
-@@ -586,8 +616,8 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -588,8 +618,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 ||
@@ -77325,7 +92726,7 @@ index 3a93755..daf2ccc 100644
error = -ENOMEM;
goto out;
}
-@@ -626,9 +656,11 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+@@ -628,9 +658,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 */
@@ -77340,7 +92741,7 @@ index 3a93755..daf2ccc 100644
}
error = load_addr;
-@@ -636,6 +668,336 @@ out:
+@@ -638,6 +670,336 @@ out:
return error;
}
@@ -77677,7 +93078,7 @@ index 3a93755..daf2ccc 100644
/*
* These are the functions used to load ELF style executables and shared
* libraries. There is no binary dependent code anywhere else.
-@@ -649,6 +1011,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top)
+@@ -651,6 +1013,11 @@ static unsigned long randomize_stack_top(unsigned long stack_top)
{
unsigned long random_variable = 0;
@@ -77688,8 +93089,8 @@ index 3a93755..daf2ccc 100644
+
if ((current->flags & PF_RANDOMIZE) &&
!(current->personality & ADDR_NO_RANDOMIZE)) {
- random_variable = (unsigned long) get_random_int();
-@@ -668,7 +1035,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+ random_variable = get_random_long();
+@@ -670,7 +1037,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;
@@ -77698,7 +93099,7 @@ index 3a93755..daf2ccc 100644
struct elf_phdr *elf_ppnt, *elf_phdata, *interp_elf_phdata = NULL;
unsigned long elf_bss, elf_brk;
int retval, i;
-@@ -683,6 +1050,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -685,6 +1052,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;
@@ -77706,7 +93107,7 @@ index 3a93755..daf2ccc 100644
loc = kmalloc(sizeof(*loc), GFP_KERNEL);
if (!loc) {
-@@ -841,6 +1209,77 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -845,6 +1213,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);
@@ -77784,7 +93185,7 @@ index 3a93755..daf2ccc 100644
if (elf_read_implies_exec(loc->elf_ex, executable_stack))
current->personality |= READ_IMPLIES_EXEC;
-@@ -916,8 +1355,21 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -920,8 +1359,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);
@@ -77808,7 +93209,7 @@ index 3a93755..daf2ccc 100644
if (!total_size) {
retval = -EINVAL;
goto out_free_dentry;
-@@ -953,9 +1405,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -957,9 +1409,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.
*/
@@ -77821,7 +93222,7 @@ index 3a93755..daf2ccc 100644
/* set_brk can never work. Avoid overflows. */
retval = -EINVAL;
goto out_free_dentry;
-@@ -991,16 +1443,43 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -995,16 +1447,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))) {
@@ -77870,7 +93271,7 @@ index 3a93755..daf2ccc 100644
load_bias, interp_elf_phdata);
if (!IS_ERR((void *)elf_entry)) {
/*
-@@ -1051,6 +1530,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -1055,6 +1534,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
current->mm->end_data = end_data;
current->mm->start_stack = bprm->p;
@@ -77878,7 +93279,7 @@ index 3a93755..daf2ccc 100644
if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) {
current->mm->brk = current->mm->start_brk =
arch_randomize_brk(current->mm);
-@@ -1058,6 +1538,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -1062,6 +1542,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
current->brk_randomized = 1;
#endif
}
@@ -77886,7 +93287,7 @@ index 3a93755..daf2ccc 100644
if (current->personality & MMAP_PAGE_ZERO) {
/* Why this, you ask??? Well SVr4 maps page 0 as read-only,
-@@ -1226,7 +1707,7 @@ static bool always_dump_vma(struct vm_area_struct *vma)
+@@ -1230,7 +1711,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,
@@ -77895,7 +93296,7 @@ index 3a93755..daf2ccc 100644
{
#define FILTER(type) (mm_flags & (1UL << MMF_DUMP_##type))
-@@ -1273,7 +1754,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
+@@ -1277,7 +1758,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
if (vma->vm_file == NULL)
return 0;
@@ -77904,7 +93305,7 @@ index 3a93755..daf2ccc 100644
goto whole;
/*
-@@ -1373,7 +1854,7 @@ static void fill_elf_header(struct elfhdr *elf, int segs,
+@@ -1377,7 +1858,7 @@ static void fill_elf_header(struct elfhdr *elf, int segs,
return;
}
@@ -77913,7 +93314,7 @@ index 3a93755..daf2ccc 100644
{
phdr->p_type = PT_NOTE;
phdr->p_offset = offset;
-@@ -1480,9 +1961,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
+@@ -1484,9 +1965,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;
@@ -77925,7 +93326,7 @@ index 3a93755..daf2ccc 100644
fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv);
}
-@@ -1491,7 +1972,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
+@@ -1495,7 +1976,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
{
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
@@ -77934,7 +93335,7 @@ index 3a93755..daf2ccc 100644
set_fs(old_fs);
fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata);
}
-@@ -2211,7 +2692,7 @@ static int elf_core_dump(struct coredump_params *cprm)
+@@ -2215,7 +2696,7 @@ static int elf_core_dump(struct coredump_params *cprm)
vma = next_vma(vma, gate_vma)) {
unsigned long dump_size;
@@ -77943,7 +93344,7 @@ index 3a93755..daf2ccc 100644
vma_filesz[i++] = dump_size;
vma_data_size += dump_size;
}
-@@ -2319,6 +2800,167 @@ out:
+@@ -2323,6 +2804,167 @@ out:
#endif /* CONFIG_ELF_CORE */
@@ -78134,10 +93535,10 @@ index b1adb92..81d396b 100644
for (i = 0; i < numnote; i++)
sz += notesize(notes + i);
diff --git a/fs/block_dev.c b/fs/block_dev.c
-index 44d4a1e..99df269 100644
+index 826b164..690322d 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
-@@ -762,7 +762,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
+@@ -766,7 +766,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 */
@@ -78147,7 +93548,7 @@ index 44d4a1e..99df269 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 5b8e235..33d31fc 100644
+index 769e0ff..0f57508 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -357,7 +357,7 @@ static inline void tree_mod_log_write_unlock(struct btrfs_fs_info *fs_info)
@@ -78176,10 +93577,10 @@ index 5b8e235..33d31fc 100644
WARN_ON(trans->transid != btrfs_header_generation(parent));
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
-index 385b449..289f2c4 100644
+index bfe4a33..1bd2b22 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
-@@ -1576,7 +1576,7 @@ struct btrfs_fs_info {
+@@ -1618,7 +1618,7 @@ struct btrfs_fs_info {
/* this protects tree_mod_seq_list */
spinlock_t tree_mod_seq_lock;
@@ -78188,7 +93589,7 @@ index 385b449..289f2c4 100644
struct list_head tree_mod_seq_list;
/* this protects tree_mod_log */
-@@ -1881,7 +1881,7 @@ struct btrfs_root {
+@@ -1925,7 +1925,7 @@ struct btrfs_root {
struct list_head log_ctxs[2];
atomic_t log_writers;
atomic_t log_commit[2];
@@ -78198,10 +93599,10 @@ index 385b449..289f2c4 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 02b934d..a8126a4 100644
+index b57daa8..45ab28e 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
-@@ -462,7 +462,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
+@@ -457,7 +457,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
static void finish_one_item(struct btrfs_delayed_root *delayed_root)
{
@@ -78210,7 +93611,7 @@ index 02b934d..a8126a4 100644
/*
* atomic_dec_return implies a barrier for waitqueue_active
-@@ -1416,7 +1416,7 @@ void btrfs_assert_delayed_root_empty(struct btrfs_root *root)
+@@ -1411,7 +1411,7 @@ void btrfs_assert_delayed_root_empty(struct btrfs_root *root)
static int could_end_wait(struct btrfs_delayed_root *delayed_root, int seq)
{
@@ -78219,7 +93620,7 @@ index 02b934d..a8126a4 100644
if (val < seq || val >= seq + BTRFS_DELAYED_BATCH)
return 1;
-@@ -1441,7 +1441,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root)
+@@ -1436,7 +1436,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root)
int seq;
int ret;
@@ -78251,7 +93652,7 @@ index 0167853c..b7d2bb4 100644
spin_lock_init(&delayed_root->lock);
init_waitqueue_head(&delayed_root->wait);
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
-index e06dd75a..22221aa 100644
+index 914ac13..6a872f7 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -660,7 +660,7 @@ add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
@@ -78273,10 +93674,10 @@ index e06dd75a..22221aa 100644
/* first set the basic ref node struct up */
atomic_set(&ref->refs, 1);
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
-index 41fb431..9b5ad63 100644
+index 4545e2e..4a2c0a9 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
-@@ -1263,7 +1263,7 @@ static void __setup_root(u32 nodesize, u32 sectorsize, u32 stripesize,
+@@ -1271,7 +1271,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);
@@ -78285,7 +93686,7 @@ index 41fb431..9b5ad63 100644
atomic_set(&root->orphan_inodes, 0);
atomic_set(&root->refs, 1);
atomic_set(&root->will_be_snapshoted, 0);
-@@ -2582,7 +2582,7 @@ int open_ctree(struct super_block *sb,
+@@ -2603,7 +2603,7 @@ int open_ctree(struct super_block *sb,
atomic_set(&fs_info->nr_async_bios, 0);
atomic_set(&fs_info->defrag_running, 0);
atomic_set(&fs_info->qgroup_op_seq, 0);
@@ -78295,7 +93696,7 @@ index 41fb431..9b5ad63 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 6a98bdd..fed3da6 100644
+index 84fb56d..ee0fe69 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)
@@ -78321,20 +93722,20 @@ index 6a98bdd..fed3da6 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 5e5db36..b5ac5d4 100644
+index 9a30ca6..830e945 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
-@@ -1912,7 +1912,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
+@@ -1910,7 +1910,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
return ret;
- mutex_lock(&inode->i_mutex);
+ inode_lock(inode);
- atomic_inc(&root->log_batch);
+ atomic_inc_unchecked(&root->log_batch);
full_sync = test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
&BTRFS_I(inode)->runtime_flags);
/*
-@@ -1966,7 +1966,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
- mutex_unlock(&inode->i_mutex);
+@@ -1964,7 +1964,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
+ inode_unlock(inode);
goto out;
}
- atomic_inc(&root->log_batch);
@@ -78342,8 +93743,20 @@ index 5e5db36..b5ac5d4 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
+--- a/fs/btrfs/free-space-cache.h
++++ b/fs/btrfs/free-space-cache.h
+@@ -48,6 +48,7 @@ struct btrfs_free_space_op {
+ bool (*use_bitmap)(struct btrfs_free_space_ctl *ctl,
+ struct btrfs_free_space *info);
+ };
++typedef struct btrfs_free_space_op __no_const btrfs_free_space_op_no_const;
+
+ struct btrfs_io_ctl;
+
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
-index 1a33d3e..4830234 100644
+index 5516136..8480a2f 100644
--- a/fs/btrfs/raid56.c
+++ b/fs/btrfs/raid56.c
@@ -153,7 +153,7 @@ struct btrfs_raid_bio {
@@ -78355,16 +93768,16 @@ index 1a33d3e..4830234 100644
/*
* these are two arrays of pointers. We allocate the
* rbio big enough to hold them both and setup their
-@@ -902,7 +902,7 @@ static void raid_write_end_io(struct bio *bio)
- err = 0;
-
+@@ -916,7 +916,7 @@ static void raid_write_end_io(struct bio *bio)
/* OK, we have read all the stripes we need to. */
-- if (atomic_read(&rbio->error) > rbio->bbio->max_errors)
-+ if (atomic_read_unchecked(&rbio->error) > rbio->bbio->max_errors)
+ max_errors = (rbio->operation == BTRFS_RBIO_PARITY_SCRUB) ?
+ 0 : rbio->bbio->max_errors;
+- if (atomic_read(&rbio->error) > max_errors)
++ if (atomic_read_unchecked(&rbio->error) > max_errors)
err = -EIO;
rbio_orig_end_io(rbio, err);
-@@ -987,7 +987,7 @@ static struct btrfs_raid_bio *alloc_rbio(struct btrfs_root *root,
+@@ -999,7 +999,7 @@ static struct btrfs_raid_bio *alloc_rbio(struct btrfs_root *root,
rbio->faila = -1;
rbio->failb = -1;
atomic_set(&rbio->refs, 1);
@@ -78373,7 +93786,7 @@ index 1a33d3e..4830234 100644
atomic_set(&rbio->stripes_pending, 0);
/*
-@@ -1211,7 +1211,7 @@ static noinline void finish_rmw(struct btrfs_raid_bio *rbio)
+@@ -1208,7 +1208,7 @@ static noinline void finish_rmw(struct btrfs_raid_bio *rbio)
set_bit(RBIO_RMW_LOCKED_BIT, &rbio->flags);
spin_unlock_irq(&rbio->bio_list_lock);
@@ -78382,7 +93795,7 @@ index 1a33d3e..4830234 100644
/*
* now that we've set rmw_locked, run through the
-@@ -1399,11 +1399,11 @@ static int fail_rbio_index(struct btrfs_raid_bio *rbio, int failed)
+@@ -1396,11 +1396,11 @@ static int fail_rbio_index(struct btrfs_raid_bio *rbio, int failed)
if (rbio->faila == -1) {
/* first failure on this rbio */
rbio->faila = failed;
@@ -78396,7 +93809,7 @@ index 1a33d3e..4830234 100644
} else {
ret = -EIO;
}
-@@ -1465,7 +1465,7 @@ static void raid_rmw_end_io(struct bio *bio)
+@@ -1462,7 +1462,7 @@ static void raid_rmw_end_io(struct bio *bio)
if (!atomic_dec_and_test(&rbio->stripes_pending))
return;
@@ -78405,7 +93818,7 @@ index 1a33d3e..4830234 100644
goto cleanup;
/*
-@@ -1521,7 +1521,7 @@ static int raid56_rmw_stripe(struct btrfs_raid_bio *rbio)
+@@ -1517,7 +1517,7 @@ static int raid56_rmw_stripe(struct btrfs_raid_bio *rbio)
index_rbio_pages(rbio);
@@ -78414,7 +93827,7 @@ index 1a33d3e..4830234 100644
/*
* build a list of bios to read all the missing parts of this
* stripe
-@@ -2014,7 +2014,7 @@ static void raid_recover_end_io(struct bio *bio)
+@@ -2009,7 +2009,7 @@ static void raid_recover_end_io(struct bio *bio)
if (!atomic_dec_and_test(&rbio->stripes_pending))
return;
@@ -78423,7 +93836,7 @@ index 1a33d3e..4830234 100644
rbio_orig_end_io(rbio, -EIO);
else
__raid_recover_end_io(rbio);
-@@ -2044,7 +2044,7 @@ static int __raid56_parity_recover(struct btrfs_raid_bio *rbio)
+@@ -2038,7 +2038,7 @@ static int __raid56_parity_recover(struct btrfs_raid_bio *rbio)
if (ret)
goto cleanup;
@@ -78432,7 +93845,7 @@ index 1a33d3e..4830234 100644
/*
* read everything that hasn't failed. Thanks to the
-@@ -2053,7 +2053,7 @@ static int __raid56_parity_recover(struct btrfs_raid_bio *rbio)
+@@ -2047,7 +2047,7 @@ static int __raid56_parity_recover(struct btrfs_raid_bio *rbio)
*/
for (stripe = 0; stripe < rbio->real_stripes; stripe++) {
if (rbio->faila == stripe || rbio->failb == stripe) {
@@ -78441,7 +93854,7 @@ index 1a33d3e..4830234 100644
continue;
}
-@@ -2083,7 +2083,7 @@ static int __raid56_parity_recover(struct btrfs_raid_bio *rbio)
+@@ -2077,7 +2077,7 @@ static int __raid56_parity_recover(struct btrfs_raid_bio *rbio)
* were up to date, or we might have no bios to read because
* the devices were gone.
*/
@@ -78450,16 +93863,7 @@ index 1a33d3e..4830234 100644
__raid_recover_end_io(rbio);
goto out;
} else {
-@@ -2306,7 +2306,7 @@ static void raid_write_parity_end_io(struct bio *bio)
-
- err = 0;
-
-- if (atomic_read(&rbio->error))
-+ if (atomic_read_unchecked(&rbio->error))
- err = -EIO;
-
- rbio_orig_end_io(rbio, err);
-@@ -2370,7 +2370,7 @@ static noinline void finish_parity_scrub(struct btrfs_raid_bio *rbio,
+@@ -2338,7 +2338,7 @@ static noinline void finish_parity_scrub(struct btrfs_raid_bio *rbio,
SetPageUptodate(q_page);
}
@@ -78468,7 +93872,7 @@ index 1a33d3e..4830234 100644
for_each_set_bit(pagenr, rbio->dbitmap, rbio->stripe_npages) {
struct page *p;
-@@ -2489,7 +2489,7 @@ static inline int is_data_stripe(struct btrfs_raid_bio *rbio, int stripe)
+@@ -2457,7 +2457,7 @@ static inline int is_data_stripe(struct btrfs_raid_bio *rbio, int stripe)
*/
static void validate_rbio_for_parity_scrub(struct btrfs_raid_bio *rbio)
{
@@ -78477,7 +93881,7 @@ index 1a33d3e..4830234 100644
goto cleanup;
if (rbio->faila >= 0 || rbio->failb >= 0) {
-@@ -2586,7 +2586,7 @@ static void raid56_parity_scrub_stripe(struct btrfs_raid_bio *rbio)
+@@ -2554,7 +2554,7 @@ static void raid56_parity_scrub_stripe(struct btrfs_raid_bio *rbio)
bio_list_init(&bio_list);
@@ -78487,7 +93891,7 @@ index 1a33d3e..4830234 100644
* build a list of bios to read all the missing parts of this
* stripe
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
-index fe609b8..6475fee 100644
+index d41e09fe..0a20548 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -248,7 +248,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
@@ -78500,10 +93904,10 @@ index fe609b8..6475fee 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 e0ac859..dc1657f 100644
+index 539e7b5..9de4167 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
-@@ -481,7 +481,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add)
+@@ -483,7 +483,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add)
for (set = 0; set < FEAT_MAX; set++) {
int i;
struct attribute *attrs[2];
@@ -78513,10 +93917,10 @@ index e0ac859..dc1657f 100644
.attrs = attrs,
};
diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c
-index 9626252..e130203 100644
+index 0e1e61a..227b156 100644
--- a/fs/btrfs/tests/btrfs-tests.c
+++ b/fs/btrfs/tests/btrfs-tests.c
-@@ -116,7 +116,7 @@ struct btrfs_fs_info *btrfs_alloc_dummy_fs_info(void)
+@@ -119,7 +119,7 @@ struct btrfs_fs_info *btrfs_alloc_dummy_fs_info(void)
fs_info->running_transaction = NULL;
fs_info->qgroup_tree = RB_ROOT;
fs_info->qgroup_ulist = NULL;
@@ -78526,36 +93930,23 @@ index 9626252..e130203 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 8b72b00..6c30bdc 100644
+index c9ad97b..006bc77 100644
--- a/fs/btrfs/tests/free-space-tests.c
+++ b/fs/btrfs/tests/free-space-tests.c
-@@ -470,7 +470,9 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
- * extent entry.
- */
- use_bitmap_op = cache->free_space_ctl->op->use_bitmap;
-- cache->free_space_ctl->op->use_bitmap = test_use_bitmap;
-+ pax_open_kernel();
-+ *(void **)&cache->free_space_ctl->op->use_bitmap = test_use_bitmap;
-+ pax_close_kernel();
-
- /*
- * Extent entry covering free space range [128Mb - 256Kb, 128Mb - 128Kb[
-@@ -877,7 +879,9 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
- if (ret)
- return ret;
-
-- cache->free_space_ctl->op->use_bitmap = use_bitmap_op;
-+ pax_open_kernel();
-+ *(void **)&cache->free_space_ctl->op->use_bitmap = use_bitmap_op;
-+ pax_close_kernel();
- __btrfs_remove_free_space_cache(cache->free_space_ctl);
-
- return 0;
+@@ -405,7 +405,7 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
+ int ret;
+ u64 offset;
+ u64 max_extent_size;
+- const struct btrfs_free_space_op test_free_space_ops = {
++ const btrfs_free_space_op_no_const test_free_space_ops = {
+ .recalc_thresholds = cache->free_space_ctl->op->recalc_thresholds,
+ .use_bitmap = test_use_bitmap,
+ };
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
-index be8eae8..f884717 100644
+index b6031ce..5d53523 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
-@@ -260,7 +260,7 @@ loop:
+@@ -277,7 +277,7 @@ loop:
if (!RB_EMPTY_ROOT(&fs_info->tree_mod_log))
WARN(1, KERN_ERR "BTRFS: tree_mod_log rb tree not empty when "
"creating a fresh transaction\n");
@@ -78565,7 +93956,7 @@ index be8eae8..f884717 100644
spin_lock_init(&cur_trans->delayed_refs.lock);
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
-index 0e044d7..21ad436 100644
+index 849a30a..f7563af 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -172,7 +172,7 @@ static int start_log_trans(struct btrfs_trans_handle *trans,
@@ -78618,10 +94009,10 @@ index 6916a78..4598936 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 9c62a6f..3c7df72 100644
+index 366b335..54dba62 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
-@@ -231,7 +231,7 @@ static struct btrfs_device *__alloc_device(void)
+@@ -232,7 +232,7 @@ static struct btrfs_device *__alloc_device(void)
spin_lock_init(&dev->reada_lock);
atomic_set(&dev->reada_in_flight, 0);
@@ -78630,7 +94021,7 @@ index 9c62a6f..3c7df72 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);
-@@ -5185,7 +5185,7 @@ static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes)
+@@ -5197,7 +5197,7 @@ static struct btrfs_bio *alloc_btrfs_bio(int total_stripes, int real_stripes)
sizeof(u64) * (total_stripes),
GFP_NOFS|__GFP_NOFAIL);
@@ -78639,7 +94030,7 @@ index 9c62a6f..3c7df72 100644
atomic_set(&bbio->refs, 1);
return bbio;
-@@ -5866,7 +5866,7 @@ static void btrfs_end_bio(struct bio *bio)
+@@ -5876,7 +5876,7 @@ static void btrfs_end_bio(struct bio *bio)
int is_orig_bio = 0;
if (bio->bi_error) {
@@ -78648,7 +94039,7 @@ index 9c62a6f..3c7df72 100644
if (bio->bi_error == -EIO || bio->bi_error == -EREMOTEIO) {
unsigned int stripe_index =
btrfs_io_bio(bio)->stripe_index;
-@@ -5904,7 +5904,7 @@ static void btrfs_end_bio(struct bio *bio)
+@@ -5914,7 +5914,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
*/
@@ -78657,7 +94048,7 @@ index 9c62a6f..3c7df72 100644
bio->bi_error = -EIO;
} else {
/*
-@@ -6015,7 +6015,7 @@ static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio,
+@@ -6025,7 +6025,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)
{
@@ -78666,7 +94057,7 @@ index 9c62a6f..3c7df72 100644
if (atomic_dec_and_test(&bbio->stripes_pending)) {
/* Shoud be the original bio. */
WARN_ON(bio != bbio->orig_bio);
-@@ -6777,10 +6777,10 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans,
+@@ -6822,10 +6822,10 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans,
if (!device->dev_stats_valid || !btrfs_dev_stats_dirty(device))
continue;
@@ -78680,7 +94071,7 @@ index 9c62a6f..3c7df72 100644
mutex_unlock(&fs_devices->device_list_mutex);
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
-index d5c84f6..0badba4 100644
+index 1939ebd..2330751 100644
--- a/fs/btrfs/volumes.h
+++ b/fs/btrfs/volumes.h
@@ -148,8 +148,8 @@ struct btrfs_device {
@@ -78753,10 +94144,10 @@ index d5c84f6..0badba4 100644
static inline void btrfs_dev_stat_reset(struct btrfs_device *dev,
diff --git a/fs/buffer.c b/fs/buffer.c
-index 4f4cd95..f19e4ab 100644
+index e1632ab..f6ffc2d 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
-@@ -3417,7 +3417,7 @@ void __init buffer_init(void)
+@@ -3408,7 +3408,7 @@ void __init buffer_init(void)
bh_cachep = kmem_cache_create("buffer_head",
sizeof(struct buffer_head), 0,
(SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|
@@ -78786,7 +94177,7 @@ index 6af790f..ec4c1e6 100644
cache->brun_percent < 100);
diff --git a/fs/cachefiles/daemon.c b/fs/cachefiles/daemon.c
-index f601def..b2cf704 100644
+index 452e98d..8af9de3 100644
--- a/fs/cachefiles/daemon.c
+++ b/fs/cachefiles/daemon.c
@@ -196,7 +196,7 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer,
@@ -78807,7 +94198,7 @@ index f601def..b2cf704 100644
return -EOPNOTSUPP;
/* drag the command string into the kernel so we can parse it */
-@@ -385,7 +385,7 @@ static int cachefiles_daemon_fstop(struct cachefiles_cache *cache, char *args)
+@@ -379,7 +379,7 @@ static int cachefiles_daemon_fstop(struct cachefiles_cache *cache, char *args)
if (args[0] != '%' || args[1] != '\0')
return -EINVAL;
@@ -78816,7 +94207,7 @@ index f601def..b2cf704 100644
return cachefiles_daemon_range_error(cache, args);
cache->fstop_percent = fstop;
-@@ -457,7 +457,7 @@ static int cachefiles_daemon_bstop(struct cachefiles_cache *cache, char *args)
+@@ -451,7 +451,7 @@ static int cachefiles_daemon_bstop(struct cachefiles_cache *cache, char *args)
if (args[0] != '%' || args[1] != '\0')
return -EINVAL;
@@ -78864,7 +94255,7 @@ index 9c4b737..0bc3fd18 100644
#else
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
-index c4b8934..8c9b05c 100644
+index 1c2334c..0595c5f 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -312,7 +312,7 @@ try_again:
@@ -78907,7 +94298,7 @@ index eccd339..4c1d995 100644
return 0;
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
-index 9314b4e..4a1f602 100644
+index fd11fb2..cdc7627 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -214,10 +214,18 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx,
@@ -78940,7 +94331,7 @@ index 9314b4e..4a1f602 100644
u32 ftype;
struct ceph_mds_reply_info_parsed *rinfo;
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
-index f446afa..0ad3b8e 100644
+index ca4d5e8..16ec9c0 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -907,7 +907,7 @@ static int ceph_compare_super(struct super_block *sb, void *data)
@@ -79006,10 +94397,10 @@ index 50b2684..aa33a91 100644
server->ops->print_stats(m, tcon);
}
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
-index cbc0f4b..230e61a 100644
+index 2eea403..61eb375 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
-@@ -1077,7 +1077,7 @@ cifs_init_request_bufs(void)
+@@ -1153,7 +1153,7 @@ cifs_init_request_bufs(void)
*/
cifs_req_cachep = kmem_cache_create("cifs_request",
CIFSMaxBufSize + max_hdr_size, 0,
@@ -79018,7 +94409,7 @@ index cbc0f4b..230e61a 100644
if (cifs_req_cachep == NULL)
return -ENOMEM;
-@@ -1104,7 +1104,7 @@ cifs_init_request_bufs(void)
+@@ -1180,7 +1180,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",
@@ -79027,7 +94418,7 @@ index cbc0f4b..230e61a 100644
NULL);
if (cifs_sm_req_cachep == NULL) {
mempool_destroy(cifs_req_poolp);
-@@ -1189,8 +1189,8 @@ init_cifs(void)
+@@ -1265,8 +1265,8 @@ init_cifs(void)
atomic_set(&bufAllocCount, 0);
atomic_set(&smBufAllocCount, 0);
#ifdef CONFIG_CIFS_STATS2
@@ -79039,10 +94430,10 @@ index cbc0f4b..230e61a 100644
atomic_set(&midCount, 0);
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
-index 2b510c5..8962775 100644
+index a25b251..b56d8c7 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
-@@ -835,35 +835,35 @@ struct cifs_tcon {
+@@ -843,35 +843,35 @@ struct cifs_tcon {
__u16 Flags; /* optional support bits */
enum statusEnum tidStatus;
#ifdef CONFIG_CIFS_STATS
@@ -79102,7 +94493,7 @@ index 2b510c5..8962775 100644
} smb2_stats;
#endif /* CONFIG_CIFS_SMB2 */
} stats;
-@@ -1213,7 +1213,7 @@ convert_delimiter(char *path, char delim)
+@@ -1221,7 +1221,7 @@ convert_delimiter(char *path, char delim)
}
#ifdef CONFIG_CIFS_STATS
@@ -79111,7 +94502,7 @@ index 2b510c5..8962775 100644
static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
unsigned int bytes)
-@@ -1580,8 +1580,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
+@@ -1588,8 +1588,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
/* Various Debug counters */
GLOBAL_EXTERN atomic_t bufAllocCount; /* current number allocated */
#ifdef CONFIG_CIFS_STATS2
@@ -79123,9 +94514,18 @@ index 2b510c5..8962775 100644
GLOBAL_EXTERN atomic_t smBufAllocCount;
GLOBAL_EXTERN atomic_t midCount;
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
-index 0068e82..5ee5c2c 100644
+index ff882ae..6a5c8e5 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
+@@ -1372,7 +1372,7 @@ cifs_free_llist(struct list_head *llist)
+
+ int
+ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
+- unsigned int xid)
++ const unsigned int xid)
+ {
+ int rc = 0, stored_rc;
+ int types[] = {LOCKING_ANDX_LARGE_FILES,
@@ -2054,10 +2054,14 @@ static int cifs_writepages(struct address_space *mapping,
index = mapping->writeback_index; /* Start from prev offset */
end = -1;
@@ -79154,7 +94554,7 @@ index 0068e82..5ee5c2c 100644
if (!wdata->cfile->invalidHandle ||
diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
-index 8442b8b..ea6986f 100644
+index 813fe13..eac10c6 100644
--- a/fs/cifs/misc.c
+++ b/fs/cifs/misc.c
@@ -170,7 +170,7 @@ cifs_buf_get(void)
@@ -79285,10 +94685,10 @@ index fc537c2..47d654c 100644
}
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
-index 53ccdde..3debfe6 100644
+index 3525ed7..ac8afb7 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
-@@ -422,8 +422,8 @@ smb2_clear_stats(struct cifs_tcon *tcon)
+@@ -427,8 +427,8 @@ smb2_clear_stats(struct cifs_tcon *tcon)
#ifdef CONFIG_CIFS_STATS
int i;
for (i = 0; i < NUMBER_OF_SMB2_COMMANDS; i++) {
@@ -79299,7 +94699,7 @@ index 53ccdde..3debfe6 100644
}
#endif
}
-@@ -463,65 +463,65 @@ static void
+@@ -468,65 +468,65 @@ static void
smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
{
#ifdef CONFIG_CIFS_STATS
@@ -79406,10 +94806,10 @@ index 53ccdde..3debfe6 100644
}
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
-index 373b5cd..b231fe6 100644
+index 42e1f44..017e7f6 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
-@@ -2390,8 +2390,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
+@@ -2388,8 +2388,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
default:
cifs_dbg(VFS, "info level %u isn't supported\n",
srch_inf->info_level);
@@ -79467,8 +94867,34 @@ index 5bb630a..043dc70 100644
spin_unlock(&cii->c_lock);
return hit;
+diff --git a/fs/coda/dir.c b/fs/coda/dir.c
+index 42e731b..2f87bc5 100644
+--- a/fs/coda/dir.c
++++ b/fs/coda/dir.c
+@@ -29,11 +29,10 @@
+ #include "coda_int.h"
+
+ /* same as fs/bad_inode.c */
+-static int coda_return_EIO(void)
++static int coda_mknod(struct inode *inode, struct dentry *dentry, umode_t mode, dev_t dev)
+ {
+ return -EIO;
+ }
+-#define CODA_EIO_ERROR ((void *) (coda_return_EIO))
+
+ /* inode operations for directories */
+ /* access routines: lookup, readlink, permission */
+@@ -562,7 +561,7 @@ const struct inode_operations coda_dir_inode_operations = {
+ .symlink = coda_symlink,
+ .mkdir = coda_mkdir,
+ .rmdir = coda_rmdir,
+- .mknod = CODA_EIO_ERROR,
++ .mknod = coda_mknod,
+ .rename = coda_rename,
+ .permission = coda_permission,
+ .getattr = coda_getattr,
diff --git a/fs/compat.c b/fs/compat.c
-index 6fd272d..39582b6 100644
+index a71936a..1659c19 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -54,7 +54,7 @@
@@ -79498,7 +94924,7 @@ index 6fd272d..39582b6 100644
goto out;
if (nr_segs > fast_segs) {
ret = -ENOMEM;
-@@ -844,6 +844,7 @@ struct compat_old_linux_dirent {
+@@ -843,6 +843,7 @@ struct compat_old_linux_dirent {
struct compat_readdir_callback {
struct dir_context ctx;
struct compat_old_linux_dirent __user *dirent;
@@ -79506,7 +94932,7 @@ index 6fd272d..39582b6 100644
int result;
};
-@@ -863,6 +864,10 @@ static int compat_fillonedir(struct dir_context *ctx, const char *name,
+@@ -862,6 +863,10 @@ static int compat_fillonedir(struct dir_context *ctx, const char *name,
buf->result = -EOVERFLOW;
return -EOVERFLOW;
}
@@ -79517,7 +94943,7 @@ index 6fd272d..39582b6 100644
buf->result++;
dirent = buf->dirent;
if (!access_ok(VERIFY_WRITE, dirent,
-@@ -894,6 +899,7 @@ COMPAT_SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
+@@ -893,6 +898,7 @@ COMPAT_SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -79525,7 +94951,7 @@ index 6fd272d..39582b6 100644
error = iterate_dir(f.file, &buf.ctx);
if (buf.result)
error = buf.result;
-@@ -913,6 +919,7 @@ struct compat_getdents_callback {
+@@ -912,6 +918,7 @@ struct compat_getdents_callback {
struct dir_context ctx;
struct compat_linux_dirent __user *current_dir;
struct compat_linux_dirent __user *previous;
@@ -79533,7 +94959,7 @@ index 6fd272d..39582b6 100644
int count;
int error;
};
-@@ -935,6 +942,10 @@ static int compat_filldir(struct dir_context *ctx, const char *name, int namlen,
+@@ -934,6 +941,10 @@ static int compat_filldir(struct dir_context *ctx, const char *name, int namlen,
buf->error = -EOVERFLOW;
return -EOVERFLOW;
}
@@ -79544,7 +94970,7 @@ index 6fd272d..39582b6 100644
dirent = buf->previous;
if (dirent) {
if (__put_user(offset, &dirent->d_off))
-@@ -980,6 +991,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd,
+@@ -979,6 +990,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -79552,7 +94978,7 @@ index 6fd272d..39582b6 100644
error = iterate_dir(f.file, &buf.ctx);
if (error >= 0)
error = buf.error;
-@@ -1000,6 +1012,7 @@ struct compat_getdents_callback64 {
+@@ -999,6 +1011,7 @@ struct compat_getdents_callback64 {
struct dir_context ctx;
struct linux_dirent64 __user *current_dir;
struct linux_dirent64 __user *previous;
@@ -79560,7 +94986,7 @@ index 6fd272d..39582b6 100644
int count;
int error;
};
-@@ -1018,6 +1031,10 @@ static int compat_filldir64(struct dir_context *ctx, const char *name,
+@@ -1017,6 +1030,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;
@@ -79571,7 +94997,7 @@ index 6fd272d..39582b6 100644
dirent = buf->previous;
if (dirent) {
-@@ -1067,13 +1084,13 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd,
+@@ -1066,13 +1083,13 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd,
if (!f.file)
return -EBADF;
@@ -79587,7 +95013,7 @@ index 6fd272d..39582b6 100644
error = -EFAULT;
else
error = count - buf.count;
-@@ -1328,7 +1345,7 @@ COMPAT_SYSCALL_DEFINE5(select, int, n, compat_ulong_t __user *, inp,
+@@ -1327,7 +1344,7 @@ COMPAT_SYSCALL_DEFINE5(select, int, n, compat_ulong_t __user *, inp,
}
struct compat_sel_arg_struct {
@@ -79615,386 +95041,19 @@ index 4d24d17..4f8c09e 100644
/*
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
-index dcf2653..3b9fb0c 100644
+index 6402eaf..113b3f7 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
-@@ -58,6 +58,8 @@
- #include <linux/atalk.h>
- #include <linux/gfp.h>
-
-+#include "internal.h"
-+
- #include <net/bluetooth/bluetooth.h>
- #include <net/bluetooth/hci_sock.h>
- #include <net/bluetooth/rfcomm.h>
-@@ -115,19 +117,38 @@
- #include <asm/fbio.h>
- #endif
-
--static int w_long(unsigned int fd, unsigned int cmd,
-- compat_ulong_t __user *argp)
-+#define convert_in_user(srcptr, dstptr) \
-+({ \
-+ typeof(*srcptr) val; \
-+ \
-+ get_user(val, srcptr) || put_user(val, dstptr); \
-+})
-+
-+static int do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
- {
-- mm_segment_t old_fs = get_fs();
- int err;
-- unsigned long val;
-
-- set_fs (KERNEL_DS);
-- err = sys_ioctl(fd, cmd, (unsigned long)&val);
-- set_fs (old_fs);
-- if (!err && put_user(val, argp))
-+ err = security_file_ioctl(file, cmd, arg);
-+ if (err)
-+ return err;
-+
-+ return vfs_ioctl(file, cmd, arg);
-+}
-+
-+static int w_long(struct file *file,
-+ unsigned int cmd, compat_ulong_t __user *argp)
-+{
-+ int err;
-+ unsigned long __user *valp = compat_alloc_user_space(sizeof(*valp));
-+
-+ if (valp == NULL)
-+ return -EFAULT;
-+ err = do_ioctl(file, cmd, (unsigned long)valp);
-+ if (err)
-+ return err;
-+ if (convert_in_user(valp, argp))
- return -EFAULT;
-- return err;
-+ return 0;
- }
-
- struct compat_video_event {
-@@ -139,23 +160,23 @@ struct compat_video_event {
- } u;
- };
-
--static int do_video_get_event(unsigned int fd, unsigned int cmd,
-- struct compat_video_event __user *up)
-+static int do_video_get_event(struct file *file,
-+ unsigned int cmd, struct compat_video_event __user *up)
- {
-- struct video_event kevent;
-- mm_segment_t old_fs = get_fs();
-+ struct video_event __user *kevent =
-+ compat_alloc_user_space(sizeof(*kevent));
- int err;
-
-- set_fs(KERNEL_DS);
-- err = sys_ioctl(fd, cmd, (unsigned long) &kevent);
-- set_fs(old_fs);
-+ if (kevent == NULL)
-+ return -EFAULT;
-
-+ err = do_ioctl(file, cmd, (unsigned long)kevent);
- if (!err) {
-- err = put_user(kevent.type, &up->type);
-- err |= put_user(kevent.timestamp, &up->timestamp);
-- err |= put_user(kevent.u.size.w, &up->u.size.w);
-- err |= put_user(kevent.u.size.h, &up->u.size.h);
-- err |= put_user(kevent.u.size.aspect_ratio,
-+ err = convert_in_user(&kevent->type, &up->type);
-+ err |= convert_in_user(&kevent->timestamp, &up->timestamp);
-+ err |= convert_in_user(&kevent->u.size.w, &up->u.size.w);
-+ err |= convert_in_user(&kevent->u.size.h, &up->u.size.h);
-+ err |= convert_in_user(&kevent->u.size.aspect_ratio,
- &up->u.size.aspect_ratio);
- if (err)
- err = -EFAULT;
-@@ -169,8 +190,8 @@ struct compat_video_still_picture {
- int32_t size;
- };
-
--static int do_video_stillpicture(unsigned int fd, unsigned int cmd,
-- struct compat_video_still_picture __user *up)
-+static int do_video_stillpicture(struct file *file,
-+ unsigned int cmd, struct compat_video_still_picture __user *up)
- {
- struct video_still_picture __user *up_native;
- compat_uptr_t fp;
-@@ -190,7 +211,7 @@ static int do_video_stillpicture(unsigned int fd, unsigned int cmd,
- if (err)
- return -EFAULT;
-
-- err = sys_ioctl(fd, cmd, (unsigned long) up_native);
-+ err = do_ioctl(file, cmd, (unsigned long) up_native);
-
- return err;
- }
-@@ -200,8 +221,8 @@ struct compat_video_spu_palette {
- compat_uptr_t palette;
- };
-
--static int do_video_set_spu_palette(unsigned int fd, unsigned int cmd,
-- struct compat_video_spu_palette __user *up)
-+static int do_video_set_spu_palette(struct file *file,
-+ unsigned int cmd, struct compat_video_spu_palette __user *up)
- {
- struct video_spu_palette __user *up_native;
- compat_uptr_t palp;
-@@ -218,7 +239,7 @@ static int do_video_set_spu_palette(unsigned int fd, unsigned int cmd,
- if (err)
- return -EFAULT;
-
-- err = sys_ioctl(fd, cmd, (unsigned long) up_native);
-+ err = do_ioctl(file, cmd, (unsigned long) up_native);
-
- return err;
- }
-@@ -276,7 +297,7 @@ static int sg_build_iovec(sg_io_hdr_t __user *sgio, void __user *dxferp, u16 iov
- return 0;
- }
-
--static int sg_ioctl_trans(unsigned int fd, unsigned int cmd,
-+static int sg_ioctl_trans(struct file *file, unsigned int cmd,
- sg_io_hdr32_t __user *sgio32)
- {
- sg_io_hdr_t __user *sgio;
-@@ -289,7 +310,7 @@ static int sg_ioctl_trans(unsigned int fd, unsigned int cmd,
- if (get_user(interface_id, &sgio32->interface_id))
- return -EFAULT;
- if (interface_id != 'S')
-- return sys_ioctl(fd, cmd, (unsigned long)sgio32);
-+ return do_ioctl(file, cmd, (unsigned long)sgio32);
-
- if (get_user(iovec_count, &sgio32->iovec_count))
- return -EFAULT;
-@@ -349,7 +370,7 @@ static int sg_ioctl_trans(unsigned int fd, unsigned int cmd,
- if (put_user(compat_ptr(data), &sgio->usr_ptr))
- return -EFAULT;
-
-- err = sys_ioctl(fd, cmd, (unsigned long) sgio);
-+ err = do_ioctl(file, cmd, (unsigned long) sgio);
-
- if (err >= 0) {
- void __user *datap;
-@@ -380,13 +401,13 @@ struct compat_sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */
- int unused;
- };
-
--static int sg_grt_trans(unsigned int fd, unsigned int cmd, struct
-- compat_sg_req_info __user *o)
-+static int sg_grt_trans(struct file *file,
-+ unsigned int cmd, struct compat_sg_req_info __user *o)
- {
- int err, i;
- sg_req_info_t __user *r;
- r = compat_alloc_user_space(sizeof(sg_req_info_t)*SG_MAX_QUEUE);
-- err = sys_ioctl(fd,cmd,(unsigned long)r);
-+ err = do_ioctl(file, cmd, (unsigned long)r);
- if (err < 0)
- return err;
- for (i = 0; i < SG_MAX_QUEUE; i++) {
-@@ -412,8 +433,8 @@ struct sock_fprog32 {
- #define PPPIOCSPASS32 _IOW('t', 71, struct sock_fprog32)
- #define PPPIOCSACTIVE32 _IOW('t', 70, struct sock_fprog32)
-
--static int ppp_sock_fprog_ioctl_trans(unsigned int fd, unsigned int cmd,
-- struct sock_fprog32 __user *u_fprog32)
-+static int ppp_sock_fprog_ioctl_trans(struct file *file,
-+ unsigned int cmd, struct sock_fprog32 __user *u_fprog32)
- {
- struct sock_fprog __user *u_fprog64 = compat_alloc_user_space(sizeof(struct sock_fprog));
- void __user *fptr64;
-@@ -435,7 +456,7 @@ static int ppp_sock_fprog_ioctl_trans(unsigned int fd, unsigned int cmd,
- else
- cmd = PPPIOCSACTIVE;
-
-- return sys_ioctl(fd, cmd, (unsigned long) u_fprog64);
-+ return do_ioctl(file, cmd, (unsigned long) u_fprog64);
- }
-
- struct ppp_option_data32 {
-@@ -451,7 +472,7 @@ struct ppp_idle32 {
- };
- #define PPPIOCGIDLE32 _IOR('t', 63, struct ppp_idle32)
-
--static int ppp_gidle(unsigned int fd, unsigned int cmd,
-+static int ppp_gidle(struct file *file, unsigned int cmd,
- struct ppp_idle32 __user *idle32)
- {
- struct ppp_idle __user *idle;
-@@ -460,7 +481,7 @@ static int ppp_gidle(unsigned int fd, unsigned int cmd,
-
- idle = compat_alloc_user_space(sizeof(*idle));
-
-- err = sys_ioctl(fd, PPPIOCGIDLE, (unsigned long) idle);
-+ err = do_ioctl(file, PPPIOCGIDLE, (unsigned long) idle);
-
- if (!err) {
- if (get_user(xmit, &idle->xmit_idle) ||
-@@ -472,7 +493,7 @@ static int ppp_gidle(unsigned int fd, unsigned int cmd,
- return err;
- }
-
--static int ppp_scompress(unsigned int fd, unsigned int cmd,
-+static int ppp_scompress(struct file *file, unsigned int cmd,
- struct ppp_option_data32 __user *odata32)
- {
- struct ppp_option_data __user *odata;
-@@ -492,7 +513,7 @@ static int ppp_scompress(unsigned int fd, unsigned int cmd,
- sizeof(__u32) + sizeof(int)))
- return -EFAULT;
-
-- return sys_ioctl(fd, PPPIOCSCOMPRESS, (unsigned long) odata);
-+ return do_ioctl(file, PPPIOCSCOMPRESS, (unsigned long) odata);
- }
-
- #ifdef CONFIG_BLOCK
-@@ -512,12 +533,13 @@ struct mtpos32 {
- };
- #define MTIOCPOS32 _IOR('m', 3, struct mtpos32)
-
--static int mt_ioctl_trans(unsigned int fd, unsigned int cmd, void __user *argp)
-+static int mt_ioctl_trans(struct file *file,
-+ unsigned int cmd, void __user *argp)
- {
-- mm_segment_t old_fs = get_fs();
-- struct mtget get;
-+ /* NULL initialization to make gcc shut up */
-+ struct mtget __user *get = NULL;
- struct mtget32 __user *umget32;
-- struct mtpos pos;
-+ struct mtpos __user *pos = NULL;
- struct mtpos32 __user *upos32;
- unsigned long kcmd;
- void *karg;
-@@ -526,32 +548,34 @@ static int mt_ioctl_trans(unsigned int fd, unsigned int cmd, void __user *argp)
- switch(cmd) {
- case MTIOCPOS32:
- kcmd = MTIOCPOS;
-- karg = &pos;
-+ pos = compat_alloc_user_space(sizeof(*pos));
-+ karg = pos;
- break;
- default: /* MTIOCGET32 */
- kcmd = MTIOCGET;
-- karg = &get;
-+ get = compat_alloc_user_space(sizeof(*get));
-+ karg = get;
- break;
- }
-- set_fs (KERNEL_DS);
-- err = sys_ioctl (fd, kcmd, (unsigned long)karg);
-- set_fs (old_fs);
-+ if (karg == NULL)
-+ return -EFAULT;
-+ err = do_ioctl(file, kcmd, (unsigned long)karg);
- if (err)
- return err;
- switch (cmd) {
- case MTIOCPOS32:
- upos32 = argp;
-- err = __put_user(pos.mt_blkno, &upos32->mt_blkno);
-+ err = convert_in_user(&pos->mt_blkno, &upos32->mt_blkno);
- break;
- case MTIOCGET32:
- umget32 = argp;
-- err = __put_user(get.mt_type, &umget32->mt_type);
-- err |= __put_user(get.mt_resid, &umget32->mt_resid);
-- err |= __put_user(get.mt_dsreg, &umget32->mt_dsreg);
-- err |= __put_user(get.mt_gstat, &umget32->mt_gstat);
-- err |= __put_user(get.mt_erreg, &umget32->mt_erreg);
-- err |= __put_user(get.mt_fileno, &umget32->mt_fileno);
-- err |= __put_user(get.mt_blkno, &umget32->mt_blkno);
-+ err = convert_in_user(&get->mt_type, &umget32->mt_type);
-+ err |= convert_in_user(&get->mt_resid, &umget32->mt_resid);
-+ err |= convert_in_user(&get->mt_dsreg, &umget32->mt_dsreg);
-+ err |= convert_in_user(&get->mt_gstat, &umget32->mt_gstat);
-+ err |= convert_in_user(&get->mt_erreg, &umget32->mt_erreg);
-+ err |= convert_in_user(&get->mt_fileno, &umget32->mt_fileno);
-+ err |= convert_in_user(&get->mt_blkno, &umget32->mt_blkno);
- break;
- }
- return err ? -EFAULT: 0;
-@@ -605,42 +629,41 @@ struct serial_struct32 {
- compat_int_t reserved[1];
- };
-
--static int serial_struct_ioctl(unsigned fd, unsigned cmd,
-- struct serial_struct32 __user *ss32)
-+static int serial_struct_ioctl(struct file *file,
-+ unsigned cmd, struct serial_struct32 __user *ss32)
- {
- typedef struct serial_struct32 SS32;
- int err;
-- struct serial_struct ss;
-- mm_segment_t oldseg = get_fs();
-+ struct serial_struct __user *ss = compat_alloc_user_space(sizeof(*ss));
- __u32 udata;
- unsigned int base;
-+ unsigned char *iomem_base;
-
-+ if (ss == NULL)
-+ return -EFAULT;
- if (cmd == TIOCSSERIAL) {
-- if (!access_ok(VERIFY_READ, ss32, sizeof(SS32)))
-- return -EFAULT;
-- if (__copy_from_user(&ss, ss32, offsetof(SS32, iomem_base)))
-+ if (copy_in_user(ss, ss32, offsetof(SS32, iomem_base)) ||
-+ get_user(udata, &ss32->iomem_base))
- return -EFAULT;
-- if (__get_user(udata, &ss32->iomem_base))
-+ iomem_base = compat_ptr(udata);
-+ if (put_user(iomem_base, &ss->iomem_base) ||
-+ convert_in_user(&ss32->iomem_reg_shift,
-+ &ss->iomem_reg_shift) ||
-+ convert_in_user(&ss32->port_high, &ss->port_high) ||
-+ put_user(0UL, &ss->iomap_base))
- return -EFAULT;
-- ss.iomem_base = compat_ptr(udata);
-- if (__get_user(ss.iomem_reg_shift, &ss32->iomem_reg_shift) ||
-- __get_user(ss.port_high, &ss32->port_high))
-- return -EFAULT;
-- ss.iomap_base = 0UL;
- }
-- set_fs(KERNEL_DS);
-- err = sys_ioctl(fd,cmd,(unsigned long)(&ss));
-- set_fs(oldseg);
-+ err = do_ioctl(file, cmd, (unsigned long)ss);
- if (cmd == TIOCGSERIAL && err >= 0) {
-- if (!access_ok(VERIFY_WRITE, ss32, sizeof(SS32)))
-- return -EFAULT;
-- if (__copy_to_user(ss32,&ss,offsetof(SS32,iomem_base)))
-+ if (copy_in_user(ss32, ss, offsetof(SS32, iomem_base)) ||
-+ get_user(iomem_base, &ss->iomem_base))
- return -EFAULT;
-- base = (unsigned long)ss.iomem_base >> 32 ?
-- 0xffffffff : (unsigned)(unsigned long)ss.iomem_base;
-- if (__put_user(base, &ss32->iomem_base) ||
-- __put_user(ss.iomem_reg_shift, &ss32->iomem_reg_shift) ||
-- __put_user(ss.port_high, &ss32->port_high))
-+ base = (unsigned long)iomem_base >> 32 ?
-+ 0xffffffff : (unsigned)(unsigned long)iomem_base;
-+ if (put_user(base, &ss32->iomem_base) ||
-+ convert_in_user(&ss->iomem_reg_shift,
-+ &ss32->iomem_reg_shift) ||
-+ convert_in_user(&ss->port_high, &ss32->port_high))
+@@ -645,7 +645,7 @@ static int serial_struct_ioctl(struct file *file,
+ if (copy_in_user(ss, ss32, offsetof(SS32, iomem_base)) ||
+ get_user(udata, &ss32->iomem_base))
return -EFAULT;
- }
- return err;
-@@ -674,8 +697,8 @@ struct i2c_rdwr_aligned {
- struct i2c_msg msgs[0];
- };
-
--static int do_i2c_rdwr_ioctl(unsigned int fd, unsigned int cmd,
-- struct i2c_rdwr_ioctl_data32 __user *udata)
-+static int do_i2c_rdwr_ioctl(struct file *file,
-+ unsigned int cmd, struct i2c_rdwr_ioctl_data32 __user *udata)
- {
- struct i2c_rdwr_aligned __user *tdata;
- struct i2c_msg __user *tmsgs;
-@@ -704,15 +727,15 @@ static int do_i2c_rdwr_ioctl(unsigned int fd, unsigned int cmd,
+- iomem_base = compat_ptr(udata);
++ iomem_base = (unsigned char __force_kernel *)compat_ptr(udata);
+ if (put_user(iomem_base, &ss->iomem_base) ||
+ convert_in_user(&ss32->iomem_reg_shift,
+ &ss->iomem_reg_shift) ||
+@@ -727,8 +727,8 @@ static int do_i2c_rdwr_ioctl(struct file *file,
for (i = 0; i < nmsgs; i++) {
if (copy_in_user(&tmsgs[i].addr, &umsgs[i].addr, 3*sizeof(u16)))
return -EFAULT;
@@ -80004,67 +95063,8 @@ index dcf2653..3b9fb0c 100644
+ put_user(compat_ptr(datap), (u8 __user * __user *)&tmsgs[i].buf))
return -EFAULT;
}
-- return sys_ioctl(fd, cmd, (unsigned long)tdata);
-+ return do_ioctl(file, cmd, (unsigned long)tdata);
- }
-
--static int do_i2c_smbus_ioctl(unsigned int fd, unsigned int cmd,
-- struct i2c_smbus_ioctl_data32 __user *udata)
-+static int do_i2c_smbus_ioctl(struct file *file,
-+ unsigned int cmd, struct i2c_smbus_ioctl_data32 __user *udata)
- {
- struct i2c_smbus_ioctl_data __user *tdata;
- compat_caddr_t datap;
-@@ -734,7 +757,7 @@ static int do_i2c_smbus_ioctl(unsigned int fd, unsigned int cmd,
- __put_user(compat_ptr(datap), &tdata->data))
- return -EFAULT;
-
-- return sys_ioctl(fd, cmd, (unsigned long)tdata);
-+ return do_ioctl(file, cmd, (unsigned long)tdata);
- }
-
- #define RTC_IRQP_READ32 _IOR('p', 0x0b, compat_ulong_t)
-@@ -742,29 +765,27 @@ static int do_i2c_smbus_ioctl(unsigned int fd, unsigned int cmd,
- #define RTC_EPOCH_READ32 _IOR('p', 0x0d, compat_ulong_t)
- #define RTC_EPOCH_SET32 _IOW('p', 0x0e, compat_ulong_t)
-
--static int rtc_ioctl(unsigned fd, unsigned cmd, void __user *argp)
-+static int rtc_ioctl(struct file *file,
-+ unsigned cmd, void __user *argp)
- {
-- mm_segment_t oldfs = get_fs();
-- compat_ulong_t val32;
-- unsigned long kval;
-+ unsigned long __user *valp = compat_alloc_user_space(sizeof(*valp));
- int ret;
-
-+ if (valp == NULL)
-+ return -EFAULT;
- switch (cmd) {
- case RTC_IRQP_READ32:
- case RTC_EPOCH_READ32:
-- set_fs(KERNEL_DS);
-- ret = sys_ioctl(fd, (cmd == RTC_IRQP_READ32) ?
-+ ret = do_ioctl(file, (cmd == RTC_IRQP_READ32) ?
- RTC_IRQP_READ : RTC_EPOCH_READ,
-- (unsigned long)&kval);
-- set_fs(oldfs);
-+ (unsigned long)valp);
- if (ret)
- return ret;
-- val32 = kval;
-- return put_user(val32, (unsigned int __user *)argp);
-+ return convert_in_user(valp, (unsigned int __user *)argp);
- case RTC_IRQP_SET32:
-- return sys_ioctl(fd, RTC_IRQP_SET, (unsigned long)argp);
-+ return do_ioctl(file, RTC_IRQP_SET, (unsigned long)argp);
- case RTC_EPOCH_SET32:
-- return sys_ioctl(fd, RTC_EPOCH_SET, (unsigned long)argp);
-+ return do_ioctl(file, RTC_EPOCH_SET, (unsigned long)argp);
- }
-
- return -ENOIOCTLCMD;
-@@ -798,7 +819,7 @@ static int compat_ioctl_preallocate(struct file *file,
+ return do_ioctl(file, cmd, (unsigned long)tdata);
+@@ -819,7 +819,7 @@ static int compat_ioctl_preallocate(struct file *file,
copy_in_user(&p->l_len, &p32->l_len, sizeof(s64)) ||
copy_in_user(&p->l_sysid, &p32->l_sysid, sizeof(s32)) ||
copy_in_user(&p->l_pid, &p32->l_pid, sizeof(u32)) ||
@@ -80073,94 +95073,7 @@ index dcf2653..3b9fb0c 100644
return -EFAULT;
return ioctl_preallocate(file, p);
-@@ -1436,53 +1457,53 @@ IGNORE_IOCTL(FBIOGCURSOR32)
- * a compat_ioctl operation in the place that handleѕ the
- * ioctl for the native case.
- */
--static long do_ioctl_trans(int fd, unsigned int cmd,
-+static long do_ioctl_trans(unsigned int cmd,
- unsigned long arg, struct file *file)
- {
- void __user *argp = compat_ptr(arg);
-
- switch (cmd) {
- case PPPIOCGIDLE32:
-- return ppp_gidle(fd, cmd, argp);
-+ return ppp_gidle(file, cmd, argp);
- case PPPIOCSCOMPRESS32:
-- return ppp_scompress(fd, cmd, argp);
-+ return ppp_scompress(file, cmd, argp);
- case PPPIOCSPASS32:
- case PPPIOCSACTIVE32:
-- return ppp_sock_fprog_ioctl_trans(fd, cmd, argp);
-+ return ppp_sock_fprog_ioctl_trans(file, cmd, argp);
- #ifdef CONFIG_BLOCK
- case SG_IO:
-- return sg_ioctl_trans(fd, cmd, argp);
-+ return sg_ioctl_trans(file, cmd, argp);
- case SG_GET_REQUEST_TABLE:
-- return sg_grt_trans(fd, cmd, argp);
-+ return sg_grt_trans(file, cmd, argp);
- case MTIOCGET32:
- case MTIOCPOS32:
-- return mt_ioctl_trans(fd, cmd, argp);
-+ return mt_ioctl_trans(file, cmd, argp);
- #endif
- /* Serial */
- case TIOCGSERIAL:
- case TIOCSSERIAL:
-- return serial_struct_ioctl(fd, cmd, argp);
-+ return serial_struct_ioctl(file, cmd, argp);
- /* i2c */
- case I2C_FUNCS:
-- return w_long(fd, cmd, argp);
-+ return w_long(file, cmd, argp);
- case I2C_RDWR:
-- return do_i2c_rdwr_ioctl(fd, cmd, argp);
-+ return do_i2c_rdwr_ioctl(file, cmd, argp);
- case I2C_SMBUS:
-- return do_i2c_smbus_ioctl(fd, cmd, argp);
-+ return do_i2c_smbus_ioctl(file, cmd, argp);
- /* Not implemented in the native kernel */
- case RTC_IRQP_READ32:
- case RTC_IRQP_SET32:
- case RTC_EPOCH_READ32:
- case RTC_EPOCH_SET32:
-- return rtc_ioctl(fd, cmd, argp);
-+ return rtc_ioctl(file, cmd, argp);
-
- /* dvb */
- case VIDEO_GET_EVENT:
-- return do_video_get_event(fd, cmd, argp);
-+ return do_video_get_event(file, cmd, argp);
- case VIDEO_STILLPICTURE:
-- return do_video_stillpicture(fd, cmd, argp);
-+ return do_video_stillpicture(file, cmd, argp);
- case VIDEO_SET_SPU_PALETTE:
-- return do_video_set_spu_palette(fd, cmd, argp);
-+ return do_video_set_spu_palette(file, cmd, argp);
- }
-
- /*
-@@ -1513,7 +1534,7 @@ static long do_ioctl_trans(int fd, unsigned int cmd,
- case NBD_SET_BLKSIZE:
- case NBD_SET_SIZE:
- case NBD_SET_SIZE_BLOCKS:
-- return do_vfs_ioctl(file, fd, cmd, arg);
-+ return vfs_ioctl(file, cmd, arg);
- }
-
- return -ENOIOCTLCMD;
-@@ -1602,7 +1623,7 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd,
- if (compat_ioctl_check_table(XFORM(cmd)))
- goto found_handler;
-
-- error = do_ioctl_trans(fd, cmd, arg, f.file);
-+ error = do_ioctl_trans(cmd, arg, f.file);
- if (error == -ENOIOCTLCMD)
- error = -ENOTTY;
-
-@@ -1621,8 +1642,8 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd,
+@@ -1639,8 +1639,8 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd,
static int __init init_sys32_ioctl_cmp(const void *p, const void *q)
{
unsigned int a, b;
@@ -80172,10 +95085,10 @@ index dcf2653..3b9fb0c 100644
return 1;
if (a < b)
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
-index a7a1b21..023d87a 100644
+index f419519..c00b5b1 100644
--- a/fs/configfs/dir.c
+++ b/fs/configfs/dir.c
-@@ -1540,7 +1540,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
+@@ -1648,7 +1648,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
}
for (p = q->next; p != &parent_sd->s_children; p = p->next) {
struct configfs_dirent *next;
@@ -80185,7 +95098,7 @@ index a7a1b21..023d87a 100644
int len;
struct inode *inode = NULL;
-@@ -1549,7 +1550,12 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
+@@ -1657,7 +1658,12 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
continue;
name = configfs_get_name(next);
@@ -80200,10 +95113,10 @@ index a7a1b21..023d87a 100644
/*
* We'll have a dentry and an inode for
diff --git a/fs/coredump.c b/fs/coredump.c
-index dfc87c5..9e773ba 100644
+index 47c32c3..dc0e594 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
-@@ -459,8 +459,8 @@ static void wait_for_dump_helpers(struct file *file)
+@@ -481,8 +481,8 @@ static void wait_for_dump_helpers(struct file *file)
struct pipe_inode_info *pipe = file->private_data;
pipe_lock(pipe);
@@ -80214,7 +95127,7 @@ index dfc87c5..9e773ba 100644
wake_up_interruptible_sync(&pipe->wait);
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
pipe_unlock(pipe);
-@@ -469,11 +469,11 @@ static void wait_for_dump_helpers(struct file *file)
+@@ -491,11 +491,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().
*/
@@ -80229,7 +95142,7 @@ index dfc87c5..9e773ba 100644
pipe_unlock(pipe);
}
-@@ -520,7 +520,9 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -542,7 +542,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;
@@ -80240,7 +95153,7 @@ index dfc87c5..9e773ba 100644
struct coredump_params cprm = {
.siginfo = siginfo,
.regs = signal_pt_regs(),
-@@ -533,12 +535,17 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -555,12 +557,17 @@ void do_coredump(const siginfo_t *siginfo)
.mm_flags = mm->flags,
};
@@ -80260,7 +95173,7 @@ index dfc87c5..9e773ba 100644
goto fail;
cred = prepare_creds();
-@@ -556,7 +563,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -578,7 +585,7 @@ void do_coredump(const siginfo_t *siginfo)
need_suid_safe = true;
}
@@ -80269,7 +95182,7 @@ index dfc87c5..9e773ba 100644
if (retval < 0)
goto fail_creds;
-@@ -599,7 +606,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -621,7 +628,7 @@ void do_coredump(const siginfo_t *siginfo)
}
cprm.limit = RLIM_INFINITY;
@@ -80278,7 +95191,7 @@ index dfc87c5..9e773ba 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);
-@@ -633,6 +640,8 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -655,6 +662,8 @@ void do_coredump(const siginfo_t *siginfo)
int open_flags = O_CREAT | O_RDWR | O_NOFOLLOW |
O_LARGEFILE | O_EXCL;
@@ -80287,7 +95200,7 @@ index dfc87c5..9e773ba 100644
if (cprm.limit < binfmt->min_coredump)
goto fail_unlock;
-@@ -658,7 +667,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -680,7 +689,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().
*/
@@ -80296,7 +95209,7 @@ index dfc87c5..9e773ba 100644
set_fs(old_fs);
}
-@@ -739,7 +748,7 @@ close_fail:
+@@ -761,7 +770,7 @@ close_fail:
filp_close(cprm.file, NULL);
fail_dropcount:
if (ispipe)
@@ -80305,7 +95218,7 @@ index dfc87c5..9e773ba 100644
fail_unlock:
kfree(cn.corename);
coredump_finish(mm, core_dumped);
-@@ -760,6 +769,8 @@ int dump_emit(struct coredump_params *cprm, const void *addr, int nr)
+@@ -782,6 +791,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;
@@ -80315,7 +95228,7 @@ index dfc87c5..9e773ba 100644
return 0;
while (nr) {
diff --git a/fs/dcache.c b/fs/dcache.c
-index 18effa3..58ad60d 100644
+index 7566b26..660a3cc 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -328,8 +328,9 @@ static inline void dentry_rcuwalk_invalidate(struct dentry *dentry)
@@ -80500,12 +95413,12 @@ index 18effa3..58ad60d 100644
dentry->d_iname[DNAME_INLINE_LEN-1] = 0;
if (name->len > DNAME_INLINE_LEN-1) {
size_t size = offsetof(struct external_name, name[1]);
-- struct external_name *p = kmalloc(size + name->len, GFP_KERNEL);
-+ struct external_name *p = kmalloc(round_up(size + name->len, sizeof(unsigned long)), GFP_KERNEL);
+- 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);
- return NULL;
-@@ -1583,7 +1586,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1584,7 +1587,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
smp_wmb();
dentry->d_name.name = dname;
@@ -80514,7 +95427,7 @@ index 18effa3..58ad60d 100644
dentry->d_flags = 0;
spin_lock_init(&dentry->d_lock);
seqcount_init(&dentry->d_seq);
-@@ -1592,6 +1595,9 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1593,6 +1596,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;
@@ -80524,7 +95437,7 @@ index 18effa3..58ad60d 100644
INIT_HLIST_BL_NODE(&dentry->d_hash);
INIT_LIST_HEAD(&dentry->d_lru);
INIT_LIST_HEAD(&dentry->d_subdirs);
-@@ -2320,7 +2326,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
+@@ -2321,7 +2327,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
goto next;
}
@@ -80533,7 +95446,7 @@ index 18effa3..58ad60d 100644
found = dentry;
spin_unlock(&dentry->d_lock);
break;
-@@ -2388,7 +2394,7 @@ again:
+@@ -2389,7 +2395,7 @@ again:
spin_lock(&dentry->d_lock);
inode = dentry->d_inode;
isdir = S_ISDIR(inode->i_mode);
@@ -80542,7 +95455,7 @@ index 18effa3..58ad60d 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)
+@@ -3337,7 +3343,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;
@@ -80551,7 +95464,7 @@ index 18effa3..58ad60d 100644
}
}
return D_WALK_CONTINUE;
-@@ -3444,7 +3450,8 @@ void __init vfs_caches_init_early(void)
+@@ -3445,7 +3451,8 @@ void __init vfs_caches_init_early(void)
void __init vfs_caches_init(void)
{
names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0,
@@ -80562,10 +95475,21 @@ index 18effa3..58ad60d 100644
dcache_init();
inode_init();
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
-index b7fcc0d..5da55c8 100644
+index bece948..e657aeb 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
-@@ -406,6 +406,10 @@ EXPORT_SYMBOL_GPL(debugfs_create_file_size);
+@@ -247,6 +247,10 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
+ struct dentry *dentry;
+ int error;
+
++#ifdef CONFIG_GRKERNSEC_KMEM
++ return ERR_PTR(-ENODEV);
++#endif
++
+ pr_debug("debugfs: creating file '%s'\n",name);
+
+ if (IS_ERR(parent))
+@@ -406,6 +410,10 @@ EXPORT_SYMBOL_GPL(debugfs_create_file_size);
* If debugfs is not enabled in the kernel, the value -%ENODEV will be
* returned.
*/
@@ -80576,7 +95500,7 @@ index b7fcc0d..5da55c8 100644
struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
{
struct dentry *dentry = start_creating(name, parent);
-@@ -418,7 +422,12 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
+@@ -418,7 +426,12 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
if (unlikely(!inode))
return failed_creating(dentry);
@@ -80590,11 +95514,22 @@ index b7fcc0d..5da55c8 100644
inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &simple_dir_operations;
+@@ -721,6 +734,10 @@ static int __init debugfs_init(void)
+ {
+ int retval;
+
++#ifdef CONFIG_GRKERNSEC_KMEM
++ return -ENOSYS;
++#endif
++
+ retval = sysfs_create_mount_point(kernel_kobj, "debug");
+ if (retval)
+ return retval;
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
-index e2e47ba..221b0a3 100644
+index 4e685ac..462fc20 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
-@@ -662,7 +662,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz)
+@@ -660,7 +660,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,
@@ -80641,7 +95576,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 b06623a..d1a8125 100644
+index dcd4ac7..b1bb7fa 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -56,8 +56,20 @@
@@ -80939,7 +95874,7 @@ index b06623a..d1a8125 100644
+ int unsafe_flags = 0;
struct open_flags open_exec_flags = {
.open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC,
- .acc_mode = MAY_EXEC | MAY_OPEN,
+ .acc_mode = MAY_EXEC,
@@ -786,12 +863,22 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
if (path_noexec(&file->f_path))
goto exit;
@@ -81471,6 +96406,31 @@ index b06623a..d1a8125 100644
+}
+EXPORT_SYMBOL(report_size_overflow);
+#endif
+diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c
+index 9eaf595..46a4777a 100644
+--- a/fs/exofs/inode.c
++++ b/fs/exofs/inode.c
+@@ -470,6 +470,11 @@ fail:
+ return ret;
+ }
+
++static int readpage_filler(struct file *data, struct page *page)
++{
++ return readpage_strip(data, page);
++}
++
+ static int exofs_readpages(struct file *file, struct address_space *mapping,
+ struct list_head *pages, unsigned nr_pages)
+ {
+@@ -478,7 +483,7 @@ static int exofs_readpages(struct file *file, struct address_space *mapping,
+
+ _pcol_init(&pcol, nr_pages, mapping->host);
+
+- ret = read_cache_pages(mapping, pages, readpage_strip, &pcol);
++ ret = read_cache_pages(mapping, pages, readpage_filler, &pcol);
+ if (ret) {
+ EXOFS_ERR("read_cache_pages => %d\n", ret);
+ return ret;
diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c
index 9f9992b..8b59411 100644
--- a/fs/ext2/balloc.c
@@ -81489,7 +96449,7 @@ index 9f9992b..8b59411 100644
}
return 1;
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
-index 748d35a..87114f0 100644
+index 2a18841..d2398be 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -270,10 +270,8 @@ static int ext2_show_options(struct seq_file *seq, struct dentry *root)
@@ -81516,10 +96476,10 @@ index 748d35a..87114f0 100644
#ifdef CONFIG_EXT2_FS_POSIX_ACL
if (def_mount_opts & EXT2_DEFM_ACL)
diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
-index fa70848..57b36d2 100644
+index f57a7ab..b41d596 100644
--- a/fs/ext2/xattr.c
+++ b/fs/ext2/xattr.c
-@@ -247,7 +247,7 @@ ext2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size)
+@@ -245,7 +245,7 @@ ext2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size)
struct buffer_head *bh = NULL;
struct ext2_xattr_entry *entry;
char *end;
@@ -81528,8 +96488,8 @@ index fa70848..57b36d2 100644
int error;
ea_idebug(inode, "buffer=%p, buffer_size=%ld",
-@@ -304,9 +304,10 @@ bad_block: ext2_error(inode->i_sb, "ext2_xattr_list",
- buffer += size;
+@@ -307,9 +307,10 @@ bad_block: ext2_error(inode->i_sb, "ext2_xattr_list",
+ *buffer++ = 0;
}
rest -= size;
+ total_size += size;
@@ -81556,26 +96516,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 d4156e1..968858a 100644
+index b213449..39f6a05 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
-@@ -933,6 +933,15 @@ struct ext4_inode_info {
- * by other means, so we have i_data_sem.
- */
- struct rw_semaphore i_data_sem;
-+ /*
-+ * i_mmap_sem is for serializing page faults with truncate / punch hole
-+ * operations. We have to make sure that new page cannot be faulted in
-+ * a section of the inode that is being punched. We cannot easily use
-+ * i_data_sem for this since we need protection for the whole punch
-+ * operation and i_data_sem ranks below transaction start so we have
-+ * to occasionally drop it.
-+ */
-+ struct rw_semaphore i_mmap_sem;
- struct inode vfs_inode;
- struct jbd2_inode *jinode;
-
-@@ -1374,19 +1383,19 @@ struct ext4_sb_info {
+@@ -1434,19 +1434,19 @@ struct ext4_sb_info {
unsigned long s_mb_last_start;
/* stats for buddy allocator */
@@ -81605,26 +96549,8 @@ index d4156e1..968858a 100644
atomic_t s_lock_busy;
/* locality groups */
-@@ -2507,6 +2516,7 @@ extern int ext4_chunk_trans_blocks(struct inode *, int nrblocks);
- extern int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode,
- loff_t lstart, loff_t lend);
- extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf);
-+extern int ext4_filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
- extern qsize_t *ext4_get_reserved_space(struct inode *inode);
- extern void ext4_da_update_reserve_space(struct inode *inode,
- int used, int quota_claim);
-@@ -2871,6 +2881,9 @@ static inline int ext4_update_inode_size(struct inode *inode, loff_t newsize)
- return changed;
- }
-
-+int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset,
-+ loff_t len);
-+
- struct ext4_group_info {
- unsigned long bb_state;
- struct rb_root bb_free_root;
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
-index 551353b..1c45aae 100644
+index 3753ceb..bddcd49 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,
@@ -81636,527 +96562,8 @@ index 551353b..1c45aae 100644
int ret;
eh = ext_inode_hdr(inode);
-@@ -4685,10 +4685,6 @@ static int ext4_alloc_file_blocks(struct file *file, ext4_lblk_t offset,
- if (len <= EXT_UNWRITTEN_MAX_LEN)
- flags |= EXT4_GET_BLOCKS_NO_NORMALIZE;
-
-- /* Wait all existing dio workers, newcomers will block on i_mutex */
-- ext4_inode_block_unlocked_dio(inode);
-- inode_dio_wait(inode);
--
- /*
- * credits to insert 1 extent into extent tree
- */
-@@ -4752,8 +4748,6 @@ retry:
- goto retry;
- }
-
-- ext4_inode_resume_unlocked_dio(inode);
--
- return ret > 0 ? ret2 : ret;
- }
-
-@@ -4770,7 +4764,6 @@ static long ext4_zero_range(struct file *file, loff_t offset,
- int partial_begin, partial_end;
- loff_t start, end;
- ext4_lblk_t lblk;
-- struct address_space *mapping = inode->i_mapping;
- unsigned int blkbits = inode->i_blkbits;
-
- trace_ext4_zero_range(inode, offset, len, mode);
-@@ -4786,17 +4779,6 @@ static long ext4_zero_range(struct file *file, loff_t offset,
- }
-
- /*
-- * Write out all dirty pages to avoid race conditions
-- * Then release them.
-- */
-- if (mapping->nrpages && mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
-- ret = filemap_write_and_wait_range(mapping, offset,
-- offset + len - 1);
-- if (ret)
-- return ret;
-- }
--
-- /*
- * Round up offset. This is not fallocate, we neet to zero out
- * blocks, so convert interior block aligned part of the range to
- * unwritten and possibly manually zero out unaligned parts of the
-@@ -4839,6 +4821,10 @@ static long ext4_zero_range(struct file *file, loff_t offset,
- if (mode & FALLOC_FL_KEEP_SIZE)
- flags |= EXT4_GET_BLOCKS_KEEP_SIZE;
-
-+ /* Wait all existing dio workers, newcomers will block on i_mutex */
-+ ext4_inode_block_unlocked_dio(inode);
-+ inode_dio_wait(inode);
-+
- /* Preallocate the range including the unaligned edges */
- if (partial_begin || partial_end) {
- ret = ext4_alloc_file_blocks(file,
-@@ -4847,7 +4833,7 @@ static long ext4_zero_range(struct file *file, loff_t offset,
- round_down(offset, 1 << blkbits)) >> blkbits,
- new_size, flags, mode);
- if (ret)
-- goto out_mutex;
-+ goto out_dio;
-
- }
-
-@@ -4856,16 +4842,23 @@ static long ext4_zero_range(struct file *file, loff_t offset,
- flags |= (EXT4_GET_BLOCKS_CONVERT_UNWRITTEN |
- EXT4_EX_NOCACHE);
-
-- /* Now release the pages and zero block aligned part of pages*/
-+ /*
-+ * Prevent page faults from reinstantiating pages we have
-+ * released from page cache.
-+ */
-+ down_write(&EXT4_I(inode)->i_mmap_sem);
-+ ret = ext4_update_disksize_before_punch(inode, offset, len);
-+ if (ret) {
-+ up_write(&EXT4_I(inode)->i_mmap_sem);
-+ goto out_dio;
-+ }
-+ /* Now release the pages and zero block aligned part of pages */
- truncate_pagecache_range(inode, start, end - 1);
- inode->i_mtime = inode->i_ctime = ext4_current_time(inode);
-
-- /* Wait all existing dio workers, newcomers will block on i_mutex */
-- ext4_inode_block_unlocked_dio(inode);
-- inode_dio_wait(inode);
--
- ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size,
- flags, mode);
-+ up_write(&EXT4_I(inode)->i_mmap_sem);
- if (ret)
- goto out_dio;
- }
-@@ -4998,8 +4991,13 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
- goto out;
- }
-
-+ /* Wait all existing dio workers, newcomers will block on i_mutex */
-+ ext4_inode_block_unlocked_dio(inode);
-+ inode_dio_wait(inode);
-+
- ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size,
- flags, mode);
-+ ext4_inode_resume_unlocked_dio(inode);
- if (ret)
- goto out;
-
-@@ -5494,21 +5492,7 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
- return ret;
- }
-
-- /*
-- * Need to round down offset to be aligned with page size boundary
-- * for page size > block size.
-- */
-- ioffset = round_down(offset, PAGE_SIZE);
--
-- /* Write out all dirty pages */
-- ret = filemap_write_and_wait_range(inode->i_mapping, ioffset,
-- LLONG_MAX);
-- if (ret)
-- return ret;
--
-- /* Take mutex lock */
- mutex_lock(&inode->i_mutex);
--
- /*
- * There is no need to overlap collapse range with EOF, in which case
- * it is effectively a truncate operation
-@@ -5524,17 +5508,43 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
- goto out_mutex;
- }
-
-- truncate_pagecache(inode, ioffset);
--
- /* Wait for existing dio to complete */
- ext4_inode_block_unlocked_dio(inode);
- inode_dio_wait(inode);
-
-+ /*
-+ * Prevent page faults from reinstantiating pages we have released from
-+ * page cache.
-+ */
-+ down_write(&EXT4_I(inode)->i_mmap_sem);
-+ /*
-+ * Need to round down offset to be aligned with page size boundary
-+ * for page size > block size.
-+ */
-+ ioffset = round_down(offset, PAGE_SIZE);
-+ /*
-+ * Write tail of the last page before removed range since it will get
-+ * removed from the page cache below.
-+ */
-+ ret = filemap_write_and_wait_range(inode->i_mapping, ioffset, offset);
-+ if (ret)
-+ goto out_mmap;
-+ /*
-+ * Write data that will be shifted to preserve them when discarding
-+ * page cache below. We are also protected from pages becoming dirty
-+ * by i_mmap_sem.
-+ */
-+ ret = filemap_write_and_wait_range(inode->i_mapping, offset + len,
-+ LLONG_MAX);
-+ if (ret)
-+ goto out_mmap;
-+ truncate_pagecache(inode, ioffset);
-+
- credits = ext4_writepage_trans_blocks(inode);
- handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
- if (IS_ERR(handle)) {
- ret = PTR_ERR(handle);
-- goto out_dio;
-+ goto out_mmap;
- }
-
- down_write(&EXT4_I(inode)->i_data_sem);
-@@ -5573,7 +5583,8 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
-
- out_stop:
- ext4_journal_stop(handle);
--out_dio:
-+out_mmap:
-+ up_write(&EXT4_I(inode)->i_mmap_sem);
- ext4_inode_resume_unlocked_dio(inode);
- out_mutex:
- mutex_unlock(&inode->i_mutex);
-@@ -5627,21 +5638,7 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
- return ret;
- }
-
-- /*
-- * Need to round down to align start offset to page size boundary
-- * for page size > block size.
-- */
-- ioffset = round_down(offset, PAGE_SIZE);
--
-- /* Write out all dirty pages */
-- ret = filemap_write_and_wait_range(inode->i_mapping, ioffset,
-- LLONG_MAX);
-- if (ret)
-- return ret;
--
-- /* Take mutex lock */
- mutex_lock(&inode->i_mutex);
--
- /* Currently just for extent based files */
- if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
- ret = -EOPNOTSUPP;
-@@ -5660,17 +5657,32 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
- goto out_mutex;
- }
-
-- truncate_pagecache(inode, ioffset);
--
- /* Wait for existing dio to complete */
- ext4_inode_block_unlocked_dio(inode);
- inode_dio_wait(inode);
-
-+ /*
-+ * Prevent page faults from reinstantiating pages we have released from
-+ * page cache.
-+ */
-+ down_write(&EXT4_I(inode)->i_mmap_sem);
-+ /*
-+ * Need to round down to align start offset to page size boundary
-+ * for page size > block size.
-+ */
-+ ioffset = round_down(offset, PAGE_SIZE);
-+ /* Write out all dirty pages */
-+ ret = filemap_write_and_wait_range(inode->i_mapping, ioffset,
-+ LLONG_MAX);
-+ if (ret)
-+ goto out_mmap;
-+ truncate_pagecache(inode, ioffset);
-+
- credits = ext4_writepage_trans_blocks(inode);
- handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
- if (IS_ERR(handle)) {
- ret = PTR_ERR(handle);
-- goto out_dio;
-+ goto out_mmap;
- }
-
- /* Expand file to avoid data loss if there is error while shifting */
-@@ -5741,7 +5753,8 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
-
- out_stop:
- ext4_journal_stop(handle);
--out_dio:
-+out_mmap:
-+ up_write(&EXT4_I(inode)->i_mmap_sem);
- ext4_inode_resume_unlocked_dio(inode);
- out_mutex:
- mutex_unlock(&inode->i_mutex);
-diff --git a/fs/ext4/file.c b/fs/ext4/file.c
-index 113837e..0d24ebc 100644
---- a/fs/ext4/file.c
-+++ b/fs/ext4/file.c
-@@ -209,15 +209,18 @@ static int ext4_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
- {
- int result;
- handle_t *handle = NULL;
-- struct super_block *sb = file_inode(vma->vm_file)->i_sb;
-+ struct inode *inode = file_inode(vma->vm_file);
-+ struct super_block *sb = inode->i_sb;
- bool write = vmf->flags & FAULT_FLAG_WRITE;
-
- if (write) {
- sb_start_pagefault(sb);
- file_update_time(vma->vm_file);
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
- handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
- EXT4_DATA_TRANS_BLOCKS(sb));
-- }
-+ } else
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
-
- if (IS_ERR(handle))
- result = VM_FAULT_SIGBUS;
-@@ -228,8 +231,10 @@ static int ext4_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
- if (write) {
- if (!IS_ERR(handle))
- ext4_journal_stop(handle);
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
- sb_end_pagefault(sb);
-- }
-+ } else
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
-
- return result;
- }
-@@ -246,10 +251,12 @@ static int ext4_dax_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
- if (write) {
- sb_start_pagefault(sb);
- file_update_time(vma->vm_file);
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
- handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
- ext4_chunk_trans_blocks(inode,
- PMD_SIZE / PAGE_SIZE));
-- }
-+ } else
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
-
- if (IS_ERR(handle))
- result = VM_FAULT_SIGBUS;
-@@ -260,30 +267,71 @@ static int ext4_dax_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
- if (write) {
- if (!IS_ERR(handle))
- ext4_journal_stop(handle);
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
- sb_end_pagefault(sb);
-- }
-+ } else
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
-
- return result;
- }
-
- static int ext4_dax_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
- {
-- return dax_mkwrite(vma, vmf, ext4_get_block_dax,
-- ext4_end_io_unwritten);
-+ int err;
-+ struct inode *inode = file_inode(vma->vm_file);
-+
-+ sb_start_pagefault(inode->i_sb);
-+ file_update_time(vma->vm_file);
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
-+ err = __dax_mkwrite(vma, vmf, ext4_get_block_dax,
-+ ext4_end_io_unwritten);
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
-+ sb_end_pagefault(inode->i_sb);
-+
-+ return err;
-+}
-+
-+/*
-+ * Handle write fault for VM_MIXEDMAP mappings. Similarly to ext4_dax_mkwrite()
-+ * handler we check for races agaist truncate. Note that since we cycle through
-+ * i_mmap_sem, we are sure that also any hole punching that began before we
-+ * were called is finished by now and so if it included part of the file we
-+ * are working on, our pte will get unmapped and the check for pte_same() in
-+ * wp_pfn_shared() fails. Thus fault gets retried and things work out as
-+ * desired.
-+ */
-+static int ext4_dax_pfn_mkwrite(struct vm_area_struct *vma,
-+ struct vm_fault *vmf)
-+{
-+ struct inode *inode = file_inode(vma->vm_file);
-+ struct super_block *sb = inode->i_sb;
-+ int ret = VM_FAULT_NOPAGE;
-+ loff_t size;
-+
-+ sb_start_pagefault(sb);
-+ file_update_time(vma->vm_file);
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
-+ size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+ if (vmf->pgoff >= size)
-+ ret = VM_FAULT_SIGBUS;
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
-+ sb_end_pagefault(sb);
-+
-+ return ret;
- }
-
- static const struct vm_operations_struct ext4_dax_vm_ops = {
- .fault = ext4_dax_fault,
- .pmd_fault = ext4_dax_pmd_fault,
- .page_mkwrite = ext4_dax_mkwrite,
-- .pfn_mkwrite = dax_pfn_mkwrite,
-+ .pfn_mkwrite = ext4_dax_pfn_mkwrite,
- };
- #else
- #define ext4_dax_vm_ops ext4_file_vm_ops
- #endif
-
- static const struct vm_operations_struct ext4_file_vm_ops = {
-- .fault = filemap_fault,
-+ .fault = ext4_filemap_fault,
- .map_pages = filemap_map_pages,
- .page_mkwrite = ext4_page_mkwrite,
- };
-diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
-index 06bda03..e573d11 100644
---- a/fs/ext4/inode.c
-+++ b/fs/ext4/inode.c
-@@ -3587,6 +3587,35 @@ int ext4_can_truncate(struct inode *inode)
- }
-
- /*
-+ * We have to make sure i_disksize gets properly updated before we truncate
-+ * page cache due to hole punching or zero range. Otherwise i_disksize update
-+ * can get lost as it may have been postponed to submission of writeback but
-+ * that will never happen after we truncate page cache.
-+ */
-+int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset,
-+ loff_t len)
-+{
-+ handle_t *handle;
-+ loff_t size = i_size_read(inode);
-+
-+ WARN_ON(!mutex_is_locked(&inode->i_mutex));
-+ if (offset > size || offset + len < size)
-+ return 0;
-+
-+ if (EXT4_I(inode)->i_disksize >= size)
-+ return 0;
-+
-+ handle = ext4_journal_start(inode, EXT4_HT_MISC, 1);
-+ if (IS_ERR(handle))
-+ return PTR_ERR(handle);
-+ ext4_update_i_disksize(inode, size);
-+ ext4_mark_inode_dirty(handle, inode);
-+ ext4_journal_stop(handle);
-+
-+ return 0;
-+}
-+
-+/*
- * ext4_punch_hole: punches a hole in a file by releaseing the blocks
- * associated with the given offset and length
- *
-@@ -3651,17 +3680,26 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)
-
- }
-
-+ /* Wait all existing dio workers, newcomers will block on i_mutex */
-+ ext4_inode_block_unlocked_dio(inode);
-+ inode_dio_wait(inode);
-+
-+ /*
-+ * Prevent page faults from reinstantiating pages we have released from
-+ * page cache.
-+ */
-+ down_write(&EXT4_I(inode)->i_mmap_sem);
- first_block_offset = round_up(offset, sb->s_blocksize);
- last_block_offset = round_down((offset + length), sb->s_blocksize) - 1;
-
- /* Now release the pages and zero block aligned part of pages*/
-- if (last_block_offset > first_block_offset)
-+ if (last_block_offset > first_block_offset) {
-+ ret = ext4_update_disksize_before_punch(inode, offset, length);
-+ if (ret)
-+ goto out_dio;
- truncate_pagecache_range(inode, first_block_offset,
- last_block_offset);
--
-- /* Wait all existing dio workers, newcomers will block on i_mutex */
-- ext4_inode_block_unlocked_dio(inode);
-- inode_dio_wait(inode);
-+ }
-
- if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
- credits = ext4_writepage_trans_blocks(inode);
-@@ -3708,16 +3746,12 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)
- if (IS_SYNC(inode))
- ext4_handle_sync(handle);
-
-- /* Now release the pages again to reduce race window */
-- if (last_block_offset > first_block_offset)
-- truncate_pagecache_range(inode, first_block_offset,
-- last_block_offset);
--
- inode->i_mtime = inode->i_ctime = ext4_current_time(inode);
- ext4_mark_inode_dirty(handle, inode);
- out_stop:
- ext4_journal_stop(handle);
- out_dio:
-+ up_write(&EXT4_I(inode)->i_mmap_sem);
- ext4_inode_resume_unlocked_dio(inode);
- out_mutex:
- mutex_unlock(&inode->i_mutex);
-@@ -4851,6 +4885,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
- } else
- ext4_wait_for_tail_page_commit(inode);
- }
-+ down_write(&EXT4_I(inode)->i_mmap_sem);
- /*
- * Truncate pagecache after we've waited for commit
- * in data=journal mode to make pages freeable.
-@@ -4858,6 +4893,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
- truncate_pagecache(inode, inode->i_size);
- if (shrink)
- ext4_truncate(inode);
-+ up_write(&EXT4_I(inode)->i_mmap_sem);
- }
-
- if (!rc) {
-@@ -5306,6 +5342,8 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
-
- sb_start_pagefault(inode->i_sb);
- file_update_time(vma->vm_file);
-+
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
- /* Delalloc case is easy... */
- if (test_opt(inode->i_sb, DELALLOC) &&
- !ext4_should_journal_data(inode) &&
-@@ -5375,6 +5413,19 @@ retry_alloc:
- out_ret:
- ret = block_page_mkwrite_return(ret);
- out:
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
- sb_end_pagefault(inode->i_sb);
- return ret;
- }
-+
-+int ext4_filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
-+{
-+ struct inode *inode = file_inode(vma->vm_file);
-+ int err;
-+
-+ down_read(&EXT4_I(inode)->i_mmap_sem);
-+ err = filemap_fault(vma, vmf);
-+ up_read(&EXT4_I(inode)->i_mmap_sem);
-+
-+ return err;
-+}
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
-index 61eaf74..01a829b 100644
+index 4424b7b..c47c8ff 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -1912,7 +1912,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac,
@@ -82315,18 +96722,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 ba1cf0b..375d641 100644
+index a76ca67..adbf949 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
-@@ -958,6 +958,7 @@ static void init_once(void *foo)
- INIT_LIST_HEAD(&ei->i_orphan);
- init_rwsem(&ei->xattr_sem);
- init_rwsem(&ei->i_data_sem);
-+ init_rwsem(&ei->i_mmap_sem);
- inode_init_once(&ei->vfs_inode);
- }
-
-@@ -1274,7 +1275,7 @@ static ext4_fsblk_t get_sb_block(void **data)
+@@ -1306,7 +1306,7 @@ static ext4_fsblk_t get_sb_block(void **data)
}
#define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
@@ -82348,26 +96747,11 @@ index 1420a3c..e87523c 100644
static ssize_t session_write_kbytes_show(struct ext4_attr *a,
struct ext4_sb_info *sbi, char *buf)
-diff --git a/fs/ext4/truncate.h b/fs/ext4/truncate.h
-index 011ba66..c70d06a 100644
---- a/fs/ext4/truncate.h
-+++ b/fs/ext4/truncate.h
-@@ -10,8 +10,10 @@
- */
- static inline void ext4_truncate_failed_write(struct inode *inode)
- {
-+ down_write(&EXT4_I(inode)->i_mmap_sem);
- truncate_inode_pages(inode->i_mapping, inode->i_size);
- ext4_truncate(inode);
-+ up_write(&EXT4_I(inode)->i_mmap_sem);
- }
-
- /*
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
-index 6b6b3e7..0cbeeb9 100644
+index a95151e..ba59ee9 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
-@@ -398,7 +398,7 @@ static int
+@@ -396,7 +396,7 @@ static int
ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
char *buffer, size_t buffer_size)
{
@@ -82376,23 +96760,23 @@ index 6b6b3e7..0cbeeb9 100644
for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
const struct xattr_handler *handler =
-@@ -414,9 +414,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
- buffer += size;
+@@ -417,9 +417,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
+ *buffer++ = 0;
}
rest -= size;
+ total_size += size;
}
}
-- return buffer_size - rest;
+- return buffer_size - rest; /* total size */
+ return total_size;
}
static int
diff --git a/fs/fcntl.c b/fs/fcntl.c
-index ee85cd4..9dd0d20 100644
+index 350a2c8..9fb9bf7 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
-@@ -102,6 +102,10 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
+@@ -103,6 +103,10 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
int force)
{
security_file_set_fowner(filp);
@@ -82444,7 +96828,7 @@ index ca3c3dd..0c5456e 100644
retval = -EFAULT;
goto out_handle;
diff --git a/fs/file.c b/fs/file.c
-index 39f8f15..898d887 100644
+index 1fbc5c0..7cfb36d 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -16,6 +16,7 @@
@@ -82455,7 +96839,7 @@ index 39f8f15..898d887 100644
#include <linux/fdtable.h>
#include <linux/bitops.h>
#include <linux/interrupt.h>
-@@ -162,9 +163,10 @@ out:
+@@ -163,9 +164,10 @@ out:
* Return <0 error code on error; 1 on successful completion.
* The files->file_lock should be held on entry, and will be held on exit.
*/
@@ -82469,7 +96853,7 @@ index 39f8f15..898d887 100644
{
struct fdtable *new_fdt, *cur_fdt;
-@@ -207,9 +209,10 @@ static int expand_fdtable(struct files_struct *files, int nr)
+@@ -208,9 +210,10 @@ static int expand_fdtable(struct files_struct *files, int nr)
* expanded and execution may have blocked.
* The files->file_lock should be held on entry, and will be held on exit.
*/
@@ -82483,7 +96867,7 @@ index 39f8f15..898d887 100644
{
struct fdtable *fdt;
int expanded = 0;
-@@ -816,7 +819,9 @@ bool get_close_on_exec(unsigned int fd)
+@@ -817,7 +820,9 @@ bool get_close_on_exec(unsigned int fd)
static int do_dup2(struct files_struct *files,
struct file *file, unsigned fd, unsigned flags)
@@ -82494,7 +96878,7 @@ index 39f8f15..898d887 100644
{
struct file *tofree;
struct fdtable *fdt;
-@@ -866,6 +871,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
+@@ -867,6 +872,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
if (!file)
return __close_fd(files, fd);
@@ -82502,7 +96886,7 @@ index 39f8f15..898d887 100644
if (fd >= rlimit(RLIMIT_NOFILE))
return -EBADF;
-@@ -892,6 +898,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
+@@ -893,6 +899,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
if (unlikely(oldfd == newfd))
return -EINVAL;
@@ -82510,7 +96894,7 @@ index 39f8f15..898d887 100644
if (newfd >= rlimit(RLIMIT_NOFILE))
return -EBADF;
-@@ -947,6 +954,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
+@@ -948,6 +955,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
int f_dupfd(unsigned int from, struct file *file, unsigned flags)
{
int err;
@@ -82519,7 +96903,7 @@ index 39f8f15..898d887 100644
return -EINVAL;
err = alloc_fd(from, flags);
diff --git a/fs/filesystems.c b/fs/filesystems.c
-index 5797d45..7d7d79a 100644
+index c5618db..50c38f4 100644
--- a/fs/filesystems.c
+++ b/fs/filesystems.c
@@ -275,7 +275,11 @@ struct file_system_type *get_fs_type(const char *name)
@@ -82534,11 +96918,66 @@ index 5797d45..7d7d79a 100644
fs = __get_fs_type(name, len);
if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) {
+diff --git a/fs/freevxfs/vxfs_inode.c b/fs/freevxfs/vxfs_inode.c
+index 3e2ccad..9d5d23e 100644
+--- a/fs/freevxfs/vxfs_inode.c
++++ b/fs/freevxfs/vxfs_inode.c
+@@ -97,11 +97,11 @@ vxfs_blkiget(struct super_block *sbp, u_long extent, ino_t ino)
+
+ if (bp && buffer_mapped(bp)) {
+ struct vxfs_inode_info *vip;
+- struct vxfs_dinode *dip;
++ struct vxfs_inode_info *dip;
+
+ if (!(vip = kmem_cache_alloc(vxfs_inode_cachep, GFP_KERNEL)))
+ goto fail;
+- dip = (struct vxfs_dinode *)(bp->b_data + offset);
++ dip = (struct vxfs_inode_info *)(bp->b_data + offset);
+ memcpy(vip, dip, sizeof(*vip));
+ #ifdef DIAGNOSTIC
+ vxfs_dumpi(vip, ino);
+@@ -138,12 +138,12 @@ __vxfs_iget(ino_t ino, struct inode *ilistp)
+
+ if (!IS_ERR(pp)) {
+ struct vxfs_inode_info *vip;
+- struct vxfs_dinode *dip;
++ struct vxfs_inode_info *dip;
+ caddr_t kaddr = (char *)page_address(pp);
+
+ if (!(vip = kmem_cache_alloc(vxfs_inode_cachep, GFP_KERNEL)))
+ goto fail;
+- dip = (struct vxfs_dinode *)(kaddr + offset);
++ dip = (struct vxfs_inode_info *)(kaddr + offset);
+ memcpy(vip, dip, sizeof(*vip));
+ #ifdef DIAGNOSTIC
+ vxfs_dumpi(vip, ino);
+diff --git a/fs/freevxfs/vxfs_inode.h b/fs/freevxfs/vxfs_inode.h
+index 240aeb1..b7dad4f 100644
+--- a/fs/freevxfs/vxfs_inode.h
++++ b/fs/freevxfs/vxfs_inode.h
+@@ -96,7 +96,7 @@ struct vxfs_typed_dev4 {
+ /*
+ * The inode as contained on the physical device.
+ */
+-struct vxfs_dinode {
++struct vxfs_inode_info {
+ int32_t vdi_mode;
+ u_int32_t vdi_nlink; /* Link count */
+ u_int32_t vdi_uid; /* UID */
+@@ -152,7 +152,7 @@ struct vxfs_dinode {
+ *
+ * TBD: This should become a separate structure...
+ */
+-#define vxfs_inode_info vxfs_dinode
++//#define vxfs_inode_info vxfs_dinode
+
+ #define vii_mode vdi_mode
+ #define vii_uid vdi_uid
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
-index 60d6fc2..dffa2ca 100644
+index fee81e8..bfeb3ca 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
-@@ -882,9 +882,9 @@ fs_initcall(cgroup_writeback_init);
+@@ -880,9 +880,9 @@ fs_initcall(cgroup_writeback_init);
#else /* CONFIG_CGROUP_WRITEBACK */
static struct bdi_writeback *
@@ -82550,7 +96989,7 @@ index 60d6fc2..dffa2ca 100644
{
struct bdi_writeback *wb = inode_to_wb(inode);
-@@ -893,8 +893,8 @@ locked_inode_to_wb_and_lock_list(struct inode *inode)
+@@ -891,8 +891,8 @@ locked_inode_to_wb_and_lock_list(struct inode *inode)
return wb;
}
@@ -82560,7 +96999,7 @@ index 60d6fc2..dffa2ca 100644
{
struct bdi_writeback *wb = inode_to_wb(inode);
-@@ -1138,9 +1138,8 @@ static int write_inode(struct inode *inode, struct writeback_control *wbc)
+@@ -1136,9 +1136,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.
*/
@@ -82571,7 +97010,7 @@ index 60d6fc2..dffa2ca 100644
{
DEFINE_WAIT_BIT(wq, &inode->i_state, __I_SYNC);
wait_queue_head_t *wqh;
-@@ -1169,8 +1168,8 @@ void inode_wait_for_writeback(struct inode *inode)
+@@ -1167,8 +1166,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.
*/
@@ -84165,11 +98604,62 @@ index ebb5e37..beae05b 100644
do_wakeup = 1;
}
+diff --git a/fs/fuse/file.c b/fs/fuse/file.c
+index 416108b..c4b3802 100644
+--- a/fs/fuse/file.c
++++ b/fs/fuse/file.c
+@@ -825,9 +825,9 @@ struct fuse_fill_data {
+ unsigned nr_pages;
+ };
+
+-static int fuse_readpages_fill(void *_data, struct page *page)
++static int fuse_readpages_fill(struct file *_data, struct page *page)
+ {
+- struct fuse_fill_data *data = _data;
++ struct fuse_fill_data *data = (struct fuse_fill_data *)_data;
+ struct fuse_req *req = data->req;
+ struct inode *inode = data->inode;
+ struct fuse_conn *fc = get_fuse_conn(inode);
+diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
+index 4d69d5c..3093c70 100644
+--- a/fs/fuse/inode.c
++++ b/fs/fuse/inode.c
+@@ -29,7 +29,7 @@ static struct kmem_cache *fuse_inode_cachep;
+ struct list_head fuse_conn_list;
+ DEFINE_MUTEX(fuse_mutex);
+
+-static int set_global_limit(const char *val, struct kernel_param *kp);
++static int set_global_limit(const char *val, const struct kernel_param *kp);
+
+ 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)
+ *limit = (1 << 16) - 1;
+ }
+
+-static int set_global_limit(const char *val, struct kernel_param *kp)
++static int set_global_limit(const char *val, const struct kernel_param *kp)
+ {
+ int rv;
+
+diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
+index 93f0746..16e462a 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)
+ *
+ */
+
+-static int __gfs2_readpage(void *file, struct page *page)
++static int __gfs2_readpage(struct file *file, struct page *page)
+ {
+ 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 5e42546..ea321c8 100644
+index c9384f9..b89afe1 100644
--- a/fs/gfs2/file.c
+++ b/fs/gfs2/file.c
-@@ -781,7 +781,7 @@ static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len,
+@@ -775,7 +775,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);
@@ -84179,7 +98669,7 @@ index 5e42546..ea321c8 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 32e7471..ffc6973 100644
+index a4ff7b5..3bdde1a 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)
@@ -84251,7 +98741,7 @@ index 32e7471..ffc6973 100644
spin_unlock(&gl->gl_lockref.lock);
cond_resched_lock(&lru_lock);
}
-@@ -1667,7 +1667,7 @@ void gfs2_dump_glock(struct seq_file *seq, const struct gfs2_glock *gl)
+@@ -1669,7 +1669,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),
@@ -84261,10 +98751,10 @@ index 32e7471..ffc6973 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 f348cfb..e4274b2 100644
+index 437fd73..4f85148 100644
--- a/fs/gfs2/glops.c
+++ b/fs/gfs2/glops.c
-@@ -554,9 +554,9 @@ static void iopen_go_callback(struct gfs2_glock *gl, bool remote)
+@@ -556,9 +556,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) {
@@ -84277,7 +98767,7 @@ index f348cfb..e4274b2 100644
}
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
-index 3a31226..2fffbe9 100644
+index a398913..9034327 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -154,7 +154,7 @@ static enum lru_status gfs2_qd_isolate(struct list_head *item,
@@ -84308,7 +98798,7 @@ index 3a31226..2fffbe9 100644
spin_unlock(&qd->qd_lockref.lock);
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
-index 595ebdb..1264061 100644
+index e1f465a..ba6b5b8 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -174,6 +174,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
@@ -84348,9 +98838,9 @@ index 595ebdb..1264061 100644
info.high_limit = TASK_SIZE;
info.align_mask = PAGE_MASK & ~huge_page_mask(h);
info.align_offset = 0;
-@@ -1206,7 +1216,7 @@ static struct file_system_type hugetlbfs_fs_type = {
+@@ -1212,7 +1222,7 @@ static struct file_system_type hugetlbfs_fs_type = {
+ .kill_sb = kill_litter_super,
};
- MODULE_ALIAS_FS("hugetlbfs");
-static struct vfsmount *hugetlbfs_vfsmount[HUGE_MAX_HSTATE];
+struct vfsmount *hugetlbfs_vfsmount[HUGE_MAX_HSTATE];
@@ -84358,10 +98848,10 @@ index 595ebdb..1264061 100644
static int can_do_hugetlb_shm(void)
{
diff --git a/fs/inode.c b/fs/inode.c
-index 1be5f90..55702b0 100644
+index 69b8b52..9b58c2d 100644
--- a/fs/inode.c
+++ b/fs/inode.c
-@@ -844,19 +844,19 @@ unsigned int get_next_ino(void)
+@@ -850,19 +850,19 @@ unsigned int get_next_ino(void)
unsigned int *p = &get_cpu_var(last_ino);
unsigned int res = *p;
@@ -84387,43 +98877,6 @@ index 1be5f90..55702b0 100644
*p = res;
put_cpu_var(last_ino);
return res;
-diff --git a/fs/internal.h b/fs/internal.h
-index 71859c4d..e38c08c 100644
---- a/fs/internal.h
-+++ b/fs/internal.h
-@@ -151,3 +151,10 @@ extern void mnt_pin_kill(struct mount *m);
- * fs/nsfs.c
- */
- extern struct dentry_operations ns_dentry_operations;
-+
-+/*
-+ * fs/ioctl.c
-+ */
-+extern int do_vfs_ioctl(struct file *file, unsigned int fd, unsigned int cmd,
-+ unsigned long arg);
-+extern long vfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
-diff --git a/fs/ioctl.c b/fs/ioctl.c
-index 5d01d26..41c352e 100644
---- a/fs/ioctl.c
-+++ b/fs/ioctl.c
-@@ -15,6 +15,7 @@
- #include <linux/writeback.h>
- #include <linux/buffer_head.h>
- #include <linux/falloc.h>
-+#include "internal.h"
-
- #include <asm/ioctls.h>
-
-@@ -32,8 +33,7 @@
- *
- * Returns 0 on success, -errno on error.
- */
--static long vfs_ioctl(struct file *filp, unsigned int cmd,
-- unsigned long arg)
-+long vfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
- {
- int error = -ENOTTY;
-
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index 36345fe..f2d7dac 100644
--- a/fs/jbd2/commit.c
@@ -84438,7 +98891,7 @@ index 36345fe..f2d7dac 100644
commit_transaction->t_tid, &stats.run);
stats.ts_requested = (commit_transaction->t_requested) ? 1 : 0;
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
-index ca181e8..8262e59 100644
+index 081dff0..9f91ee0 100644
--- a/fs/jbd2/transaction.c
+++ b/fs/jbd2/transaction.c
@@ -91,7 +91,7 @@ jbd2_get_transaction(journal_t *journal, transaction_t *transaction)
@@ -84473,8 +98926,49 @@ index 4a6cf28..d3a29d3 100644
};
jffs2_prealloc_raw_node_refs(c, jeb, 1);
+diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c
+index cad86ba..a0bfc33 100644
+--- a/fs/jffs2/file.c
++++ b/fs/jffs2/file.c
+@@ -111,8 +111,9 @@ static int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg)
+ return ret;
+ }
+
+-int jffs2_do_readpage_unlock(struct inode *inode, struct page *pg)
++int jffs2_do_readpage_unlock(struct file *_inode, struct page *pg)
+ {
++ struct inode *inode = (struct inode *)_inode;
+ int ret = jffs2_do_readpage_nolock(inode, pg);
+ unlock_page(pg);
+ return ret;
+diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c
+index bead25a..5186b1c 100644
+--- a/fs/jffs2/fs.c
++++ b/fs/jffs2/fs.c
+@@ -686,7 +686,7 @@ unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
+ struct page *pg;
+
+ pg = read_cache_page(inode->i_mapping, offset >> PAGE_CACHE_SHIFT,
+- (void *)jffs2_do_readpage_unlock, inode);
++ jffs2_do_readpage_unlock, inode);
+ if (IS_ERR(pg))
+ return (void *)pg;
+
+diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h
+index 824e61e..2d686a6 100644
+--- a/fs/jffs2/os-linux.h
++++ b/fs/jffs2/os-linux.h
+@@ -154,7 +154,7 @@ extern const struct file_operations jffs2_file_operations;
+ extern const struct inode_operations jffs2_file_inode_operations;
+ extern const struct address_space_operations jffs2_file_address_operations;
+ int jffs2_fsync(struct file *, loff_t, loff_t, int);
+-int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg);
++int jffs2_do_readpage_unlock (struct file *_inode, struct page *pg);
+
+ /* ioctl.c */
+ long jffs2_ioctl(struct file *, unsigned int, unsigned long);
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
-index f3a4857..2542b7a 100644
+index 5a3da3f..de40276 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -1023,7 +1023,8 @@ static const struct jffs2_unknown_node oob_cleanmarker =
@@ -84488,20 +98982,20 @@ index f3a4857..2542b7a 100644
/*
diff --git a/fs/jfs/super.c b/fs/jfs/super.c
-index 8f9176c..6f2b910 100644
+index 4f5d85b..de5d4d8 100644
--- a/fs/jfs/super.c
+++ b/fs/jfs/super.c
@@ -898,7 +898,7 @@ static int __init init_jfs_fs(void)
jfs_inode_cachep =
kmem_cache_create("jfs_ip", sizeof(struct jfs_inode_info), 0,
-- SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD,
-+ SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|SLAB_USERCOPY,
+- SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|SLAB_ACCOUNT,
++ SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|SLAB_ACCOUNT|SLAB_USERCOPY,
init_once);
if (jfs_inode_cachep == NULL)
return -ENOMEM;
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
-index 91e0045..a654935 100644
+index 996b774..8358861 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -205,7 +205,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn)
@@ -84513,7 +99007,7 @@ index 91e0045..a654935 100644
{
unsigned long hash = init_name_hash();
unsigned int len = strlen(name);
-@@ -896,6 +896,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry,
+@@ -935,6 +935,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);
@@ -84610,7 +99104,7 @@ index 7247252..c73808e 100644
}
diff --git a/fs/libfs.c b/fs/libfs.c
-index c7cbfb0..fc3636d4 100644
+index 0ca80b2..4001920 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -155,6 +155,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
@@ -84637,6 +99131,135 @@ index c7cbfb0..fc3636d4 100644
d_inode(next)->i_ino, dt_type(d_inode(next))))
return 0;
spin_lock(&dentry->d_lock);
+diff --git a/fs/lockd/clnt4xdr.c b/fs/lockd/clnt4xdr.c
+index d3e40db..a300f9c 100644
+--- a/fs/lockd/clnt4xdr.c
++++ b/fs/lockd/clnt4xdr.c
+@@ -379,10 +379,11 @@ static void encode_nlm4_lock(struct xdr_stream *xdr,
+ * struct nlm4_lock alock;
+ * };
+ */
+-static void nlm4_xdr_enc_testargs(struct rpc_rqst *req,
++static void nlm4_xdr_enc_testargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -400,10 +401,11 @@ static void nlm4_xdr_enc_testargs(struct rpc_rqst *req,
+ * int state;
+ * };
+ */
+-static void nlm4_xdr_enc_lockargs(struct rpc_rqst *req,
++static void nlm4_xdr_enc_lockargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -422,10 +424,11 @@ static void nlm4_xdr_enc_lockargs(struct rpc_rqst *req,
+ * struct nlm4_lock alock;
+ * };
+ */
+-static void nlm4_xdr_enc_cancargs(struct rpc_rqst *req,
++static void nlm4_xdr_enc_cancargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -440,10 +443,11 @@ static void nlm4_xdr_enc_cancargs(struct rpc_rqst *req,
+ * struct nlm4_lock alock;
+ * };
+ */
+-static void nlm4_xdr_enc_unlockargs(struct rpc_rqst *req,
++static void nlm4_xdr_enc_unlockargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -456,10 +460,12 @@ static void nlm4_xdr_enc_unlockargs(struct rpc_rqst *req,
+ * nlm4_stat stat;
+ * };
+ */
+-static void nlm4_xdr_enc_res(struct rpc_rqst *req,
++static void nlm4_xdr_enc_res(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_res *result)
++ void *_result)
+ {
++ const struct nlm_res *result = _result;
++
+ encode_cookie(xdr, &result->cookie);
+ encode_nlm4_stat(xdr, result->status);
+ }
+@@ -477,10 +483,12 @@ static void nlm4_xdr_enc_res(struct rpc_rqst *req,
+ * nlm4_testrply test_stat;
+ * };
+ */
+-static void nlm4_xdr_enc_testres(struct rpc_rqst *req,
++static void nlm4_xdr_enc_testres(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_res *result)
++ void *_result)
+ {
++ const struct nlm_res *result = _result;
++
+ encode_cookie(xdr, &result->cookie);
+ encode_nlm4_stat(xdr, result->status);
+ if (result->status == nlm_lck_denied)
+@@ -523,10 +531,11 @@ out:
+ return error;
+ }
+
+-static int nlm4_xdr_dec_testres(struct rpc_rqst *req,
++static int nlm4_xdr_dec_testres(void *req,
+ struct xdr_stream *xdr,
+- struct nlm_res *result)
++ void *_result)
+ {
++ struct nlm_res *result = _result;
+ int error;
+
+ error = decode_cookie(xdr, &result->cookie);
+@@ -543,10 +552,11 @@ out:
+ * nlm4_stat stat;
+ * };
+ */
+-static int nlm4_xdr_dec_res(struct rpc_rqst *req,
++static int nlm4_xdr_dec_res(void *req,
+ struct xdr_stream *xdr,
+- struct nlm_res *result)
++ void *_result)
+ {
++ struct nlm_res *result = _result;
+ int error;
+
+ error = decode_cookie(xdr, &result->cookie);
+@@ -566,8 +576,8 @@ out:
+ #define PROC(proc, argtype, restype) \
+ [NLMPROC_##proc] = { \
+ .p_proc = NLMPROC_##proc, \
+- .p_encode = (kxdreproc_t)nlm4_xdr_enc_##argtype, \
+- .p_decode = (kxdrdproc_t)nlm4_xdr_dec_##restype, \
++ .p_encode = nlm4_xdr_enc_##argtype, \
++ .p_decode = nlm4_xdr_dec_##restype, \
+ .p_arglen = NLM4_##argtype##_sz, \
+ .p_replen = NLM4_##restype##_sz, \
+ .p_statidx = NLMPROC_##proc, \
diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
index 1129520..356aeca 100644
--- a/fs/lockd/clntproc.c
@@ -84655,6 +99278,1165 @@ index 1129520..356aeca 100644
memcpy(c->data, &cookie, 4);
c->len=4;
+diff --git a/fs/lockd/clntxdr.c b/fs/lockd/clntxdr.c
+index 3e9f787..c2177b8 100644
+--- a/fs/lockd/clntxdr.c
++++ b/fs/lockd/clntxdr.c
+@@ -372,10 +372,11 @@ static void encode_nlm_lock(struct xdr_stream *xdr,
+ * struct nlm_lock alock;
+ * };
+ */
+-static void nlm_xdr_enc_testargs(struct rpc_rqst *req,
++static void nlm_xdr_enc_testargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -393,10 +394,11 @@ static void nlm_xdr_enc_testargs(struct rpc_rqst *req,
+ * int state;
+ * };
+ */
+-static void nlm_xdr_enc_lockargs(struct rpc_rqst *req,
++static void nlm_xdr_enc_lockargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -415,10 +417,11 @@ static void nlm_xdr_enc_lockargs(struct rpc_rqst *req,
+ * struct nlm_lock alock;
+ * };
+ */
+-static void nlm_xdr_enc_cancargs(struct rpc_rqst *req,
++static void nlm_xdr_enc_cancargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -433,10 +436,11 @@ static void nlm_xdr_enc_cancargs(struct rpc_rqst *req,
+ * struct nlm_lock alock;
+ * };
+ */
+-static void nlm_xdr_enc_unlockargs(struct rpc_rqst *req,
++static void nlm_xdr_enc_unlockargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_args *args)
++ void *_args)
+ {
++ const struct nlm_args *args = _args;
+ const struct nlm_lock *lock = &args->lock;
+
+ encode_cookie(xdr, &args->cookie);
+@@ -449,10 +453,11 @@ static void nlm_xdr_enc_unlockargs(struct rpc_rqst *req,
+ * nlm_stat stat;
+ * };
+ */
+-static void nlm_xdr_enc_res(struct rpc_rqst *req,
++static void nlm_xdr_enc_res(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_res *result)
++ void *_result)
+ {
++ const struct nlm_res *result = _result;
+ encode_cookie(xdr, &result->cookie);
+ encode_nlm_stat(xdr, result->status);
+ }
+@@ -477,10 +482,11 @@ static void encode_nlm_testrply(struct xdr_stream *xdr,
+ encode_nlm_holder(xdr, result);
+ }
+
+-static void nlm_xdr_enc_testres(struct rpc_rqst *req,
++static void nlm_xdr_enc_testres(void *req,
+ struct xdr_stream *xdr,
+- const struct nlm_res *result)
++ void *_result)
+ {
++ const struct nlm_res *result = _result;
+ encode_cookie(xdr, &result->cookie);
+ encode_nlm_stat(xdr, result->status);
+ encode_nlm_testrply(xdr, result);
+@@ -521,11 +527,12 @@ out:
+ return error;
+ }
+
+-static int nlm_xdr_dec_testres(struct rpc_rqst *req,
++static int nlm_xdr_dec_testres(void *req,
+ struct xdr_stream *xdr,
+- struct nlm_res *result)
++ void *_result)
+ {
+ int error;
++ struct nlm_res *result = _result;
+
+ error = decode_cookie(xdr, &result->cookie);
+ if (unlikely(error))
+@@ -541,11 +548,12 @@ out:
+ * nlm_stat stat;
+ * };
+ */
+-static int nlm_xdr_dec_res(struct rpc_rqst *req,
++static int nlm_xdr_dec_res(void *req,
+ struct xdr_stream *xdr,
+- struct nlm_res *result)
++ void *_result)
+ {
+ int error;
++ struct nlm_res *result = _result;
+
+ error = decode_cookie(xdr, &result->cookie);
+ if (unlikely(error))
+@@ -564,8 +572,8 @@ out:
+ #define PROC(proc, argtype, restype) \
+ [NLMPROC_##proc] = { \
+ .p_proc = NLMPROC_##proc, \
+- .p_encode = (kxdreproc_t)nlm_xdr_enc_##argtype, \
+- .p_decode = (kxdrdproc_t)nlm_xdr_dec_##restype, \
++ .p_encode = nlm_xdr_enc_##argtype, \
++ .p_decode = nlm_xdr_dec_##restype, \
+ .p_arglen = NLM_##argtype##_sz, \
+ .p_replen = NLM_##restype##_sz, \
+ .p_statidx = NLMPROC_##proc, \
+diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c
+index 19166d4..c841d52 100644
+--- a/fs/lockd/mon.c
++++ b/fs/lockd/mon.c
+@@ -475,23 +475,22 @@ static void encode_priv(struct xdr_stream *xdr, const struct nsm_args *argp)
+ xdr_encode_opaque_fixed(p, argp->priv->data, SM_PRIV_SIZE);
+ }
+
+-static void nsm_xdr_enc_mon(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nsm_args *argp)
++static void nsm_xdr_enc_mon(void *req, struct xdr_stream *xdr, void *argp)
+ {
+ encode_mon_id(xdr, argp);
+ encode_priv(xdr, argp);
+ }
+
+-static void nsm_xdr_enc_unmon(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nsm_args *argp)
++static void nsm_xdr_enc_unmon(void *req, struct xdr_stream *xdr, void *argp)
+ {
+ encode_mon_id(xdr, argp);
+ }
+
+-static int nsm_xdr_dec_stat_res(struct rpc_rqst *rqstp,
++static int nsm_xdr_dec_stat_res(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nsm_res *resp)
++ void *_resp)
+ {
++ struct nsm_res *resp = _resp;
+ __be32 *p;
+
+ p = xdr_inline_decode(xdr, 4 + 4);
+@@ -505,10 +504,11 @@ static int nsm_xdr_dec_stat_res(struct rpc_rqst *rqstp,
+ return 0;
+ }
+
+-static int nsm_xdr_dec_stat(struct rpc_rqst *rqstp,
++static int nsm_xdr_dec_stat(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nsm_res *resp)
++ void *_resp)
+ {
++ struct nsm_res *resp = _resp;
+ __be32 *p;
+
+ p = xdr_inline_decode(xdr, 4);
+@@ -532,8 +532,8 @@ static int nsm_xdr_dec_stat(struct rpc_rqst *rqstp,
+ static struct rpc_procinfo nsm_procedures[] = {
+ [NSMPROC_MON] = {
+ .p_proc = NSMPROC_MON,
+- .p_encode = (kxdreproc_t)nsm_xdr_enc_mon,
+- .p_decode = (kxdrdproc_t)nsm_xdr_dec_stat_res,
++ .p_encode = nsm_xdr_enc_mon,
++ .p_decode = nsm_xdr_dec_stat_res,
+ .p_arglen = SM_mon_sz,
+ .p_replen = SM_monres_sz,
+ .p_statidx = NSMPROC_MON,
+@@ -541,8 +541,8 @@ static struct rpc_procinfo nsm_procedures[] = {
+ },
+ [NSMPROC_UNMON] = {
+ .p_proc = NSMPROC_UNMON,
+- .p_encode = (kxdreproc_t)nsm_xdr_enc_unmon,
+- .p_decode = (kxdrdproc_t)nsm_xdr_dec_stat,
++ .p_encode = nsm_xdr_enc_unmon,
++ .p_decode = nsm_xdr_dec_stat,
+ .p_arglen = SM_mon_id_sz,
+ .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
+--- a/fs/lockd/svc.c
++++ b/fs/lockd/svc.c
+@@ -591,7 +591,7 @@ static struct ctl_table nlm_sysctl_root[] = {
+ */
+
+ #define param_set_min_max(name, type, which_strtol, min, max) \
+-static int param_set_##name(const char *val, struct kernel_param *kp) \
++static int param_set_##name(const char *val, const struct kernel_param *kp)\
+ { \
+ char *endp; \
+ __typeof__(type) num = which_strtol(val, &endp, 0); \
+diff --git a/fs/lockd/svc4proc.c b/fs/lockd/svc4proc.c
+index 09c576f..89b4d3d 100644
+--- a/fs/lockd/svc4proc.c
++++ b/fs/lockd/svc4proc.c
+@@ -72,9 +72,10 @@ nlm4svc_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)
+ * TEST: Check for conflicting lock
+ */
+ static __be32
+-nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_test(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+ __be32 rc = rpc_success;
+@@ -99,9 +100,10 @@ nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
+ }
+
+ static __be32
+-nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_lock(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+ __be32 rc = rpc_success;
+@@ -141,9 +143,10 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+ }
+
+ static __be32
+-nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_cancel(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+
+@@ -174,9 +177,10 @@ nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * UNLOCK: release a lock
+ */
+ static __be32
+-nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_unlock(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+
+@@ -208,9 +212,11 @@ nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * was granted
+ */
+ static __be32
+-nlm4svc_proc_granted(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_granted(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
++
+ resp->cookie = argp->cookie;
+
+ dprintk("lockd: GRANTED called\n");
+@@ -244,7 +250,7 @@ static const struct rpc_call_ops nlm4svc_callback_ops = {
+ * doesn't break any clients.
+ */
+ static __be32 nlm4svc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args *argp,
+- __be32 (*func)(struct svc_rqst *, struct nlm_args *, struct nlm_res *))
++ __be32 (*func)(struct svc_rqst *, void *, void *))
+ {
+ struct nlm_host *host;
+ struct nlm_rqst *call;
+@@ -273,35 +279,35 @@ static __be32 nlm4svc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args
+ return rpc_success;
+ }
+
+-static __be32 nlm4svc_proc_test_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
++static __be32 nlm4svc_proc_test_msg(struct svc_rqst *rqstp, void *argp,
+ void *resp)
+ {
+ dprintk("lockd: TEST_MSG called\n");
+ return nlm4svc_callback(rqstp, NLMPROC_TEST_RES, argp, nlm4svc_proc_test);
+ }
+
+-static __be32 nlm4svc_proc_lock_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
++static __be32 nlm4svc_proc_lock_msg(struct svc_rqst *rqstp, void *argp,
+ void *resp)
+ {
+ dprintk("lockd: LOCK_MSG called\n");
+ return nlm4svc_callback(rqstp, NLMPROC_LOCK_RES, argp, nlm4svc_proc_lock);
+ }
+
+-static __be32 nlm4svc_proc_cancel_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
++static __be32 nlm4svc_proc_cancel_msg(struct svc_rqst *rqstp, void *argp,
+ void *resp)
+ {
+ dprintk("lockd: CANCEL_MSG called\n");
+ return nlm4svc_callback(rqstp, NLMPROC_CANCEL_RES, argp, nlm4svc_proc_cancel);
+ }
+
+-static __be32 nlm4svc_proc_unlock_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
++static __be32 nlm4svc_proc_unlock_msg(struct svc_rqst *rqstp, void *argp,
+ void *resp)
+ {
+ dprintk("lockd: UNLOCK_MSG called\n");
+ return nlm4svc_callback(rqstp, NLMPROC_UNLOCK_RES, argp, nlm4svc_proc_unlock);
+ }
+
+-static __be32 nlm4svc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
++static __be32 nlm4svc_proc_granted_msg(struct svc_rqst *rqstp, void *argp,
+ void *resp)
+ {
+ dprintk("lockd: GRANTED_MSG called\n");
+@@ -312,9 +318,10 @@ static __be32 nlm4svc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args *
+ * SHARE: create a DOS share or alter existing share.
+ */
+ static __be32
+-nlm4svc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_share(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+
+@@ -345,9 +352,10 @@ nlm4svc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * UNSHARE: Release a DOS share.
+ */
+ static __be32
+-nlm4svc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_unshare(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+
+@@ -378,9 +386,10 @@ nlm4svc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * NM_LOCK: Create an unmonitored lock
+ */
+ static __be32
+-nlm4svc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlm4svc_proc_nm_lock(struct svc_rqst *rqstp, void *_argp, void *resp)
+ {
++ struct nlm_args *argp = _argp;
++
+ dprintk("lockd: NM_LOCK called\n");
+
+ argp->monitor = 0; /* just clean the monitor flag */
+@@ -391,8 +400,7 @@ nlm4svc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * FREE_ALL: Release all locks and shares held by client
+ */
+ static __be32
+-nlm4svc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp,
+- void *resp)
++nlm4svc_proc_free_all(struct svc_rqst *rqstp, void *argp, void *resp)
+ {
+ struct nlm_host *host;
+
+@@ -409,7 +417,7 @@ nlm4svc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * SM_NOTIFY: private callback from statd (not part of official NLM proto)
+ */
+ static __be32
+-nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
++nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, void *argp,
+ void *resp)
+ {
+ dprintk("lockd: SM_NOTIFY called\n");
+@@ -429,9 +437,10 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
+ * client sent a GRANTED_RES, let's remove the associated block
+ */
+ static __be32
+-nlm4svc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp,
+- void *resp)
++nlm4svc_proc_granted_res(struct svc_rqst *rqstp, void *_argp, void *resp)
+ {
++ struct nlm_res *argp = _argp;
++
+ if (!nlmsvc_ops)
+ return rpc_success;
+
+@@ -463,9 +472,9 @@ nlm4svc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp,
+ struct nlm_void { int dummy; };
+
+ #define PROC(name, xargt, xrest, argt, rest, respsize) \
+- { .pc_func = (svc_procfunc) nlm4svc_proc_##name, \
+- .pc_decode = (kxdrproc_t) nlm4svc_decode_##xargt, \
+- .pc_encode = (kxdrproc_t) nlm4svc_encode_##xrest, \
++ { .pc_func = nlm4svc_proc_##name, \
++ .pc_decode = nlm4svc_decode_##xargt, \
++ .pc_encode = nlm4svc_encode_##xrest, \
+ .pc_release = NULL, \
+ .pc_argsize = sizeof(struct nlm_##argt), \
+ .pc_ressize = sizeof(struct nlm_##rest), \
+diff --git a/fs/lockd/svcproc.c b/fs/lockd/svcproc.c
+index fb26b9f..a6d5582 100644
+--- a/fs/lockd/svcproc.c
++++ b/fs/lockd/svcproc.c
+@@ -102,9 +102,10 @@ nlmsvc_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)
+ * TEST: Check for conflicting lock
+ */
+ static __be32
+-nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_test(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+ __be32 rc = rpc_success;
+@@ -130,9 +131,10 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
+ }
+
+ static __be32
+-nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_lock(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+ __be32 rc = rpc_success;
+@@ -172,9 +174,10 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+ }
+
+ static __be32
+-nlmsvc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_cancel(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+ struct net *net = SVC_NET(rqstp);
+@@ -206,9 +209,10 @@ nlmsvc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * UNLOCK: release a lock
+ */
+ static __be32
+-nlmsvc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_unlock(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+ struct net *net = SVC_NET(rqstp);
+@@ -241,9 +245,11 @@ nlmsvc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * was granted
+ */
+ static __be32
+-nlmsvc_proc_granted(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_granted(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
++
+ resp->cookie = argp->cookie;
+
+ dprintk("lockd: GRANTED called\n");
+@@ -285,7 +291,7 @@ static const struct rpc_call_ops nlmsvc_callback_ops = {
+ * doesn't break any clients.
+ */
+ static __be32 nlmsvc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args *argp,
+- __be32 (*func)(struct svc_rqst *, struct nlm_args *, struct nlm_res *))
++ __be32 (*func)(struct svc_rqst *, void *, void *))
+ {
+ struct nlm_host *host;
+ struct nlm_rqst *call;
+@@ -314,38 +320,33 @@ static __be32 nlmsvc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args
+ return rpc_success;
+ }
+
+-static __be32 nlmsvc_proc_test_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
+- void *resp)
++static __be32 nlmsvc_proc_test_msg(struct svc_rqst *rqstp,void *argp, void *resp)
+ {
+ dprintk("lockd: TEST_MSG called\n");
+ return nlmsvc_callback(rqstp, NLMPROC_TEST_RES, argp, nlmsvc_proc_test);
+ }
+
+-static __be32 nlmsvc_proc_lock_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
+- void *resp)
++static __be32 nlmsvc_proc_lock_msg(struct svc_rqst *rqstp, void *argp, void *resp)
+ {
+ dprintk("lockd: LOCK_MSG called\n");
+ return nlmsvc_callback(rqstp, NLMPROC_LOCK_RES, argp, nlmsvc_proc_lock);
+ }
+
+-static __be32 nlmsvc_proc_cancel_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
+- void *resp)
++static __be32 nlmsvc_proc_cancel_msg(struct svc_rqst *rqstp, void *argp, void *resp)
+ {
+ dprintk("lockd: CANCEL_MSG called\n");
+ return nlmsvc_callback(rqstp, NLMPROC_CANCEL_RES, argp, nlmsvc_proc_cancel);
+ }
+
+ static __be32
+-nlmsvc_proc_unlock_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
+- void *resp)
++nlmsvc_proc_unlock_msg(struct svc_rqst *rqstp, void *argp, void *resp)
+ {
+ dprintk("lockd: UNLOCK_MSG called\n");
+ return nlmsvc_callback(rqstp, NLMPROC_UNLOCK_RES, argp, nlmsvc_proc_unlock);
+ }
+
+ static __be32
+-nlmsvc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
+- void *resp)
++nlmsvc_proc_granted_msg(struct svc_rqst *rqstp, void *argp, void *resp)
+ {
+ dprintk("lockd: GRANTED_MSG called\n");
+ return nlmsvc_callback(rqstp, NLMPROC_GRANTED_RES, argp, nlmsvc_proc_granted);
+@@ -355,9 +356,10 @@ nlmsvc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * SHARE: create a DOS share or alter existing share.
+ */
+ static __be32
+-nlmsvc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_share(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+
+@@ -388,9 +390,10 @@ nlmsvc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * UNSHARE: Release a DOS share.
+ */
+ static __be32
+-nlmsvc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_unshare(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nlm_args *argp = _argp;
++ struct nlm_res *resp = _resp;
+ struct nlm_host *host;
+ struct nlm_file *file;
+
+@@ -421,9 +424,10 @@ nlmsvc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * NM_LOCK: Create an unmonitored lock
+ */
+ static __be32
+-nlmsvc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+- struct nlm_res *resp)
++nlmsvc_proc_nm_lock(struct svc_rqst *rqstp, void *_argp, void *resp)
+ {
++ struct nlm_args *argp = _argp;
++
+ dprintk("lockd: NM_LOCK called\n");
+
+ argp->monitor = 0; /* just clean the monitor flag */
+@@ -434,8 +438,7 @@ nlmsvc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * FREE_ALL: Release all locks and shares held by client
+ */
+ static __be32
+-nlmsvc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp,
+- void *resp)
++nlmsvc_proc_free_all(struct svc_rqst *rqstp, void *argp, void *resp)
+ {
+ struct nlm_host *host;
+
+@@ -452,8 +455,7 @@ nlmsvc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp,
+ * SM_NOTIFY: private callback from statd (not part of official NLM proto)
+ */
+ static __be32
+-nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
+- void *resp)
++nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, void *argp, void *resp)
+ {
+ dprintk("lockd: SM_NOTIFY called\n");
+
+@@ -472,9 +474,10 @@ nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp,
+ * client sent a GRANTED_RES, let's remove the associated block
+ */
+ static __be32
+-nlmsvc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp,
+- void *resp)
++nlmsvc_proc_granted_res(struct svc_rqst *rqstp, void *_argp, void *resp)
+ {
++ struct nlm_res *argp = _argp;
++
+ if (!nlmsvc_ops)
+ return rpc_success;
+
+@@ -505,9 +508,9 @@ nlmsvc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp,
+ struct nlm_void { int dummy; };
+
+ #define PROC(name, xargt, xrest, argt, rest, respsize) \
+- { .pc_func = (svc_procfunc) nlmsvc_proc_##name, \
+- .pc_decode = (kxdrproc_t) nlmsvc_decode_##xargt, \
+- .pc_encode = (kxdrproc_t) nlmsvc_encode_##xrest, \
++ { .pc_func = nlmsvc_proc_##name, \
++ .pc_decode = nlmsvc_decode_##xargt, \
++ .pc_encode = nlmsvc_encode_##xrest, \
+ .pc_release = NULL, \
+ .pc_argsize = sizeof(struct nlm_##argt), \
+ .pc_ressize = sizeof(struct nlm_##rest), \
+diff --git a/fs/lockd/xdr.c b/fs/lockd/xdr.c
+index 5b651da..cfe0944 100644
+--- a/fs/lockd/xdr.c
++++ b/fs/lockd/xdr.c
+@@ -182,8 +182,9 @@ nlm_encode_testres(__be32 *p, struct nlm_res *resp)
+ * First, the server side XDR functions
+ */
+ int
+-nlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlmsvc_decode_testargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
+ u32 exclusive;
+
+ if (!(p = nlm_decode_cookie(p, &argp->cookie)))
+@@ -199,16 +200,19 @@ nlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlmsvc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlmsvc_encode_testres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nlm_res *resp = _resp;
++
+ if (!(p = nlm_encode_testres(p, resp)))
+ return 0;
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ int
+-nlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlmsvc_decode_lockargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
+ u32 exclusive;
+
+ if (!(p = nlm_decode_cookie(p, &argp->cookie)))
+@@ -227,8 +231,9 @@ nlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlmsvc_decode_cancargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
+ u32 exclusive;
+
+ if (!(p = nlm_decode_cookie(p, &argp->cookie)))
+@@ -243,8 +248,10 @@ nlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlmsvc_decode_unlockargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
++
+ if (!(p = nlm_decode_cookie(p, &argp->cookie))
+ || !(p = nlm_decode_lock(p, &argp->lock)))
+ return 0;
+@@ -253,8 +260,10 @@ nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlmsvc_decode_shareargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
++
+ struct nlm_lock *lock = &argp->lock;
+
+ memset(lock, 0, sizeof(*lock));
+@@ -274,8 +283,10 @@ nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlmsvc_encode_shareres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nlm_res *resp = _resp;
++
+ if (!(p = nlm_encode_cookie(p, &resp->cookie)))
+ return 0;
+ *p++ = resp->status;
+@@ -284,8 +295,10 @@ nlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+ }
+
+ int
+-nlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlmsvc_encode_res(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nlm_res *resp = _resp;
++
+ if (!(p = nlm_encode_cookie(p, &resp->cookie)))
+ return 0;
+ *p++ = resp->status;
+@@ -293,8 +306,9 @@ nlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+ }
+
+ int
+-nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp)
++nlmsvc_decode_notify(void *rqstp, __be32 *p, void *_argp)
+ {
++ struct nlm_args *argp = _argp;
+ struct nlm_lock *lock = &argp->lock;
+
+ if (!(p = xdr_decode_string_inplace(p, &lock->caller,
+@@ -305,8 +319,10 @@ nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp)
+ }
+
+ int
+-nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp)
++nlmsvc_decode_reboot(void *rqstp, __be32 *p, void *_argp)
+ {
++ struct nlm_reboot *argp = _argp;
++
+ if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN)))
+ return 0;
+ argp->state = ntohl(*p++);
+@@ -316,8 +332,10 @@ nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp)
+ }
+
+ int
+-nlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlmsvc_decode_res(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nlm_res *resp = _resp;
++
+ if (!(p = nlm_decode_cookie(p, &resp->cookie)))
+ return 0;
+ resp->status = *p++;
+@@ -325,13 +343,13 @@ nlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+ }
+
+ int
+-nlmsvc_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nlmsvc_decode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_argsize_check(rqstp, p);
+ }
+
+ int
+-nlmsvc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nlmsvc_encode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_ressize_check(rqstp, p);
+ }
+diff --git a/fs/lockd/xdr4.c b/fs/lockd/xdr4.c
+index dfa4789..be443bd 100644
+--- a/fs/lockd/xdr4.c
++++ b/fs/lockd/xdr4.c
+@@ -179,8 +179,9 @@ nlm4_encode_testres(__be32 *p, struct nlm_res *resp)
+ * First, the server side XDR functions
+ */
+ int
+-nlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlm4svc_decode_testargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
+ u32 exclusive;
+
+ if (!(p = nlm4_decode_cookie(p, &argp->cookie)))
+@@ -196,7 +197,7 @@ nlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlm4svc_encode_testres(void *rqstp, __be32 *p, void *resp)
+ {
+ if (!(p = nlm4_encode_testres(p, resp)))
+ return 0;
+@@ -204,8 +205,9 @@ nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+ }
+
+ int
+-nlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlm4svc_decode_lockargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
+ u32 exclusive;
+
+ if (!(p = nlm4_decode_cookie(p, &argp->cookie)))
+@@ -224,8 +226,9 @@ nlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlm4svc_decode_cancargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
+ u32 exclusive;
+
+ if (!(p = nlm4_decode_cookie(p, &argp->cookie)))
+@@ -240,8 +243,10 @@ nlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlm4svc_decode_unlockargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
++
+ if (!(p = nlm4_decode_cookie(p, &argp->cookie))
+ || !(p = nlm4_decode_lock(p, &argp->lock)))
+ return 0;
+@@ -250,8 +255,9 @@ nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
++nlm4svc_decode_shareargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ nlm_args *argp = _argp;
+ struct nlm_lock *lock = &argp->lock;
+
+ memset(lock, 0, sizeof(*lock));
+@@ -271,8 +277,10 @@ nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp)
+ }
+
+ int
+-nlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlm4svc_encode_shareres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nlm_res *resp = _resp;
++
+ if (!(p = nlm4_encode_cookie(p, &resp->cookie)))
+ return 0;
+ *p++ = resp->status;
+@@ -281,8 +289,10 @@ nlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+ }
+
+ int
+-nlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlm4svc_encode_res(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nlm_res *resp = _resp;
++
+ if (!(p = nlm4_encode_cookie(p, &resp->cookie)))
+ return 0;
+ *p++ = resp->status;
+@@ -290,8 +300,9 @@ nlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+ }
+
+ int
+-nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp)
++nlm4svc_decode_notify(void *rqstp, __be32 *p, void *_argp)
+ {
++ struct nlm_args *argp = _argp;
+ struct nlm_lock *lock = &argp->lock;
+
+ if (!(p = xdr_decode_string_inplace(p, &lock->caller,
+@@ -302,8 +313,10 @@ nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp)
+ }
+
+ int
+-nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp)
++nlm4svc_decode_reboot(void *rqstp, __be32 *p, void *_argp)
+ {
++ struct nlm_reboot *argp = _argp;
++
+ if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN)))
+ return 0;
+ argp->state = ntohl(*p++);
+@@ -313,8 +326,10 @@ nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp
+ }
+
+ int
+-nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
++nlm4svc_decode_res(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nlm_res *resp = _resp;
++
+ if (!(p = nlm4_decode_cookie(p, &resp->cookie)))
+ return 0;
+ resp->status = *p++;
+@@ -322,13 +337,13 @@ nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp)
+ }
+
+ int
+-nlm4svc_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nlm4svc_decode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_argsize_check(rqstp, p);
+ }
+
+ int
+-nlm4svc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nlm4svc_encode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_ressize_check(rqstp, p);
+ }
+diff --git a/fs/logfs/dev_bdev.c b/fs/logfs/dev_bdev.c
+index a709d80..17ab4e7 100644
+--- a/fs/logfs/dev_bdev.c
++++ b/fs/logfs/dev_bdev.c
+@@ -33,9 +33,8 @@ static int sync_request(struct page *page, struct block_device *bdev, int rw)
+ return submit_bio_wait(rw, &bio);
+ }
+
+-static int bdev_readpage(void *_sb, struct page *page)
++static int bdev_readpage(struct super_block *sb, struct page *page)
+ {
+- struct super_block *sb = _sb;
+ struct block_device *bdev = logfs_super(sb)->s_bdev;
+ int err;
+
+@@ -51,6 +50,11 @@ static int bdev_readpage(void *_sb, struct page *page)
+ return err;
+ }
+
++static int bdev_filler(struct file *file, struct page *page)
++{
++ return bdev_readpage((struct super_block *)file, page);
++}
++
+ static DECLARE_WAIT_QUEUE_HEAD(wq);
+
+ static void writeseg_end_io(struct bio *bio)
+@@ -246,7 +250,7 @@ static struct page *bdev_find_first_sb(struct super_block *sb, u64 *ofs)
+ {
+ struct logfs_super *super = logfs_super(sb);
+ struct address_space *mapping = super->s_mapping_inode->i_mapping;
+- filler_t *filler = bdev_readpage;
++ filler_t *filler = bdev_filler;
+
+ *ofs = 0;
+ return read_cache_page(mapping, 0, filler, sb);
+@@ -256,7 +260,7 @@ static struct page *bdev_find_last_sb(struct super_block *sb, u64 *ofs)
+ {
+ struct logfs_super *super = logfs_super(sb);
+ struct address_space *mapping = super->s_mapping_inode->i_mapping;
+- filler_t *filler = bdev_readpage;
++ filler_t *filler = bdev_filler;
+ u64 pos = (super->s_bdev->bd_inode->i_size & ~0xfffULL) - 0x1000;
+ pgoff_t index = pos >> PAGE_SHIFT;
+
+@@ -287,6 +291,7 @@ static const struct logfs_device_ops bd_devops = {
+ .find_last_sb = bdev_find_last_sb,
+ .write_sb = bdev_write_sb,
+ .readpage = bdev_readpage,
++ .filler = bdev_filler,
+ .writeseg = bdev_writeseg,
+ .erase = bdev_erase,
+ .can_write_buf = bdev_can_write_buf,
+diff --git a/fs/logfs/dev_mtd.c b/fs/logfs/dev_mtd.c
+index 9c50144..c3740b7 100644
+--- a/fs/logfs/dev_mtd.c
++++ b/fs/logfs/dev_mtd.c
+@@ -122,9 +122,8 @@ static void logfs_mtd_sync(struct super_block *sb)
+ mtd_sync(mtd);
+ }
+
+-static int logfs_mtd_readpage(void *_sb, struct page *page)
++static int logfs_mtd_readpage(struct super_block *sb, struct page *page)
+ {
+- struct super_block *sb = _sb;
+ int err;
+
+ err = logfs_mtd_read(sb, page->index << PAGE_SHIFT, PAGE_SIZE,
+@@ -145,11 +144,16 @@ static int logfs_mtd_readpage(void *_sb, struct page *page)
+ return err;
+ }
+
++static int logfs_mtd_filler(struct file *file, struct page *page)
++{
++ return logfs_mtd_readpage((struct super_block *)file, page);
++}
++
+ static struct page *logfs_mtd_find_first_sb(struct super_block *sb, u64 *ofs)
+ {
+ struct logfs_super *super = logfs_super(sb);
+ struct address_space *mapping = super->s_mapping_inode->i_mapping;
+- filler_t *filler = logfs_mtd_readpage;
++ filler_t *filler = logfs_mtd_filler;
+ struct mtd_info *mtd = super->s_mtd;
+
+ *ofs = 0;
+@@ -166,7 +170,7 @@ static struct page *logfs_mtd_find_last_sb(struct super_block *sb, u64 *ofs)
+ {
+ struct logfs_super *super = logfs_super(sb);
+ struct address_space *mapping = super->s_mapping_inode->i_mapping;
+- filler_t *filler = logfs_mtd_readpage;
++ filler_t *filler = logfs_mtd_filler;
+ struct mtd_info *mtd = super->s_mtd;
+
+ *ofs = mtd->size - mtd->erasesize;
+@@ -254,6 +258,7 @@ static const struct logfs_device_ops mtd_devops = {
+ .find_first_sb = logfs_mtd_find_first_sb,
+ .find_last_sb = logfs_mtd_find_last_sb,
+ .readpage = logfs_mtd_readpage,
++ .filler = logfs_mtd_filler,
+ .writeseg = logfs_mtd_writeseg,
+ .erase = logfs_mtd_erase,
+ .can_write_buf = logfs_mtd_can_write_buf,
+diff --git a/fs/logfs/dir.c b/fs/logfs/dir.c
+index 542468e..8b1e52a 100644
+--- 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)
+ if (!logfs_exist_block(dir, index))
+ continue;
+ page = read_cache_page(dir->i_mapping, index,
+- (filler_t *)logfs_readpage, NULL);
++ logfs_readpage, NULL);
+ if (IS_ERR(page))
+ return page;
+ dd = kmap_atomic(page);
+@@ -306,7 +306,7 @@ static int logfs_readdir(struct file *file, struct dir_context *ctx)
+ continue;
+ }
+ page = read_cache_page(dir->i_mapping, pos,
+- (filler_t *)logfs_readpage, NULL);
++ logfs_readpage, NULL);
+ if (IS_ERR(page))
+ return PTR_ERR(page);
+ dd = kmap(page);
+diff --git a/fs/logfs/logfs.h b/fs/logfs/logfs.h
+index 27d040e..8959149 100644
+--- a/fs/logfs/logfs.h
++++ b/fs/logfs/logfs.h
+@@ -151,7 +151,8 @@ struct logfs_device_ops {
+ struct page *(*find_first_sb)(struct super_block *sb, u64 *ofs);
+ struct page *(*find_last_sb)(struct super_block *sb, u64 *ofs);
+ int (*write_sb)(struct super_block *sb, struct page *page);
+- int (*readpage)(void *_sb, struct page *page);
++ int (*readpage)(struct super_block *sb, struct page *page);
++ int (*filler)(struct file *file, struct page *page);
+ void (*writeseg)(struct super_block *sb, u64 ofs, size_t len);
+ int (*erase)(struct super_block *sb, loff_t ofs, size_t len,
+ int ensure_write);
+@@ -617,8 +618,6 @@ static inline int logfs_buf_recover(struct logfs_area *area, u64 ofs,
+ }
+
+ /* super.c */
+-struct page *emergency_read_begin(struct address_space *mapping, pgoff_t index);
+-void emergency_read_end(struct page *page);
+ void logfs_crash_dump(struct super_block *sb);
+ int logfs_statfs(struct dentry *dentry, struct kstatfs *stats);
+ int logfs_check_ds(struct logfs_disk_super *ds);
+diff --git a/fs/logfs/readwrite.c b/fs/logfs/readwrite.c
+index 20973c9..9ee7c57 100644
+--- a/fs/logfs/readwrite.c
++++ b/fs/logfs/readwrite.c
+@@ -1963,7 +1963,7 @@ int logfs_read_inode(struct inode *inode)
+ return -ENODATA;
+
+ page = read_cache_page(master_inode->i_mapping, ino,
+- (filler_t *)logfs_readpage, NULL);
++ logfs_readpage, NULL);
+ if (IS_ERR(page))
+ return PTR_ERR(page);
+
+diff --git a/fs/logfs/segment.c b/fs/logfs/segment.c
+index d270e4b..aa1fb41 100644
+--- a/fs/logfs/segment.c
++++ b/fs/logfs/segment.c
+@@ -54,7 +54,7 @@ static struct page *get_mapping_page(struct super_block *sb, pgoff_t index,
+ {
+ struct logfs_super *super = logfs_super(sb);
+ struct address_space *mapping = super->s_mapping_inode->i_mapping;
+- filler_t *filler = super->s_devops->readpage;
++ filler_t *filler = super->s_devops->filler;
+ struct page *page;
+
+ BUG_ON(mapping_gfp_constraint(mapping, __GFP_FS));
+diff --git a/fs/logfs/super.c b/fs/logfs/super.c
+index 5436029..4597ec8 100644
+--- a/fs/logfs/super.c
++++ b/fs/logfs/super.c
+@@ -18,39 +18,6 @@
+ #include <linux/statfs.h>
+ #include <linux/buffer_head.h>
+
+-static DEFINE_MUTEX(emergency_mutex);
+-static struct page *emergency_page;
+-
+-struct page *emergency_read_begin(struct address_space *mapping, pgoff_t index)
+-{
+- filler_t *filler = (filler_t *)mapping->a_ops->readpage;
+- struct page *page;
+- int err;
+-
+- page = read_cache_page(mapping, index, filler, NULL);
+- if (page)
+- return page;
+-
+- /* No more pages available, switch to emergency page */
+- printk(KERN_INFO"Logfs: Using emergency page\n");
+- mutex_lock(&emergency_mutex);
+- err = filler(NULL, emergency_page);
+- if (err) {
+- mutex_unlock(&emergency_mutex);
+- printk(KERN_EMERG"Logfs: Error reading emergency page\n");
+- return ERR_PTR(err);
+- }
+- return emergency_page;
+-}
+-
+-void emergency_read_end(struct page *page)
+-{
+- if (page == emergency_page)
+- mutex_unlock(&emergency_mutex);
+- else
+- page_cache_release(page);
+-}
+-
+ static void dump_segfile(struct super_block *sb)
+ {
+ struct logfs_super *super = logfs_super(sb);
+@@ -614,10 +581,6 @@ static int __init logfs_init(void)
+ {
+ int ret;
+
+- emergency_page = alloc_pages(GFP_KERNEL, 0);
+- if (!emergency_page)
+- return -ENOMEM;
+-
+ ret = logfs_compr_init();
+ if (ret)
+ goto out1;
+@@ -633,7 +596,6 @@ static int __init logfs_init(void)
+ out2:
+ logfs_compr_exit();
+ out1:
+- __free_pages(emergency_page, 0);
+ return ret;
+ }
+
+@@ -642,7 +604,6 @@ static void __exit logfs_exit(void)
+ unregister_filesystem(&logfs_fs_type);
+ logfs_destroy_inode_cache();
+ logfs_compr_exit();
+- __free_pages(emergency_page, 0);
+ }
+
+ module_init(logfs_init);
diff --git a/fs/mount.h b/fs/mount.h
index 14db05d..687f6d8 100644
--- a/fs/mount.h
@@ -84678,7 +100460,7 @@ index 14db05d..687f6d8 100644
#define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */
diff --git a/fs/namei.c b/fs/namei.c
-index d8ee4da..d6bf55e 100644
+index 9c590e0..654baa99 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -336,17 +336,32 @@ int generic_permission(struct inode *inode, int mask)
@@ -84734,7 +100516,7 @@ index d8ee4da..d6bf55e 100644
}
EXPORT_SYMBOL(generic_permission);
@@ -514,12 +521,35 @@ struct nameidata {
- struct nameidata *saved;
+ struct inode *link_inode;
unsigned root_seq;
int dfd;
-};
@@ -84770,20 +100552,18 @@ index d8ee4da..d6bf55e 100644
p->dfd = dfd;
p->name = name;
p->total_link_count = old ? old->total_link_count : 0;
-@@ -538,6 +568,12 @@ static void restore_nameidata(void)
+@@ -536,6 +566,10 @@ static void restore_nameidata(void)
+ old->total_link_count = now->total_link_count;
+ if (now->stack != now->internal)
kfree(now->stack);
- now->stack = now->internal;
- }
+#ifdef CONFIG_GRKERNSEC_SYMLINKOWN
-+ if (now->symlinkown_stack != now->symlinkown_internal) {
++ if (now->symlinkown_stack != now->symlinkown_internal)
+ kfree(now->symlinkown_stack);
-+ now->symlinkown_stack = now->symlinkown_internal;
-+ }
+#endif
}
static int __nd_alloc_stack(struct nameidata *nd)
-@@ -557,6 +593,7 @@ static int __nd_alloc_stack(struct nameidata *nd)
+@@ -555,6 +589,7 @@ static int __nd_alloc_stack(struct nameidata *nd)
}
memcpy(p, nd->internal, sizeof(nd->internal));
nd->stack = p;
@@ -84791,7 +100571,7 @@ index d8ee4da..d6bf55e 100644
return 0;
}
-@@ -578,8 +615,32 @@ static bool path_connected(const struct path *path)
+@@ -576,8 +611,32 @@ static bool path_connected(const struct path *path)
return is_subdir(path->dentry, mnt->mnt_root);
}
@@ -84824,7 +100604,7 @@ index d8ee4da..d6bf55e 100644
if (likely(nd->depth != EMBEDDED_LEVELS))
return 0;
if (likely(nd->stack != nd->internal))
-@@ -608,6 +669,14 @@ static void terminate_walk(struct nameidata *nd)
+@@ -603,6 +662,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);
@@ -84839,7 +100619,7 @@ index d8ee4da..d6bf55e 100644
if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
path_put(&nd->root);
nd->root.mnt = NULL;
-@@ -1001,6 +1070,9 @@ const char *get_link(struct nameidata *nd)
+@@ -1014,6 +1081,9 @@ const char *get_link(struct nameidata *nd)
if (unlikely(error))
return ERR_PTR(error);
@@ -84849,7 +100629,7 @@ index d8ee4da..d6bf55e 100644
nd->last_type = LAST_BIND;
res = inode->i_link;
if (!res) {
-@@ -1689,6 +1761,23 @@ static int pick_link(struct nameidata *nd, struct path *link,
+@@ -1690,6 +1760,23 @@ static int pick_link(struct nameidata *nd, struct path *link,
}
}
@@ -84872,8 +100652,8 @@ index d8ee4da..d6bf55e 100644
+
last = nd->stack + nd->depth++;
last->link = *link;
- last->cookie = NULL;
-@@ -1833,7 +1922,7 @@ EXPORT_SYMBOL(full_name_hash);
+ clear_delayed_call(&last->done);
+@@ -1834,7 +1921,7 @@ EXPORT_SYMBOL(full_name_hash);
static inline u64 hash_name(const char *name)
{
unsigned long a, b, adata, bdata, mask, hash, len;
@@ -84882,7 +100662,7 @@ index d8ee4da..d6bf55e 100644
hash = a = 0;
len = -sizeof(unsigned long);
-@@ -2001,6 +2090,10 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
+@@ -2002,6 +2089,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;
@@ -84893,7 +100673,7 @@ index d8ee4da..d6bf55e 100644
if (flags & LOOKUP_ROOT) {
struct dentry *root = nd->root.dentry;
struct inode *inode = root->d_inode;
-@@ -2138,6 +2231,14 @@ static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path
+@@ -2133,6 +2224,14 @@ static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path
if (!err)
err = complete_walk(nd);
@@ -84908,7 +100688,7 @@ index d8ee4da..d6bf55e 100644
if (!err && nd->flags & LOOKUP_DIRECTORY)
if (!d_can_lookup(nd->path.dentry))
err = -ENOTDIR;
-@@ -2186,6 +2287,14 @@ static int path_parentat(struct nameidata *nd, unsigned flags,
+@@ -2181,6 +2280,14 @@ static int path_parentat(struct nameidata *nd, unsigned flags,
err = link_path_walk(s, nd);
if (!err)
err = complete_walk(nd);
@@ -84923,7 +100703,7 @@ index d8ee4da..d6bf55e 100644
if (!err) {
*parent = nd->path;
nd->path.mnt = NULL;
-@@ -2717,6 +2826,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
+@@ -2779,6 +2886,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
if (flag & O_NOATIME && !inode_owner_or_capable(inode))
return -EPERM;
@@ -84937,7 +100717,7 @@ index d8ee4da..d6bf55e 100644
return 0;
}
-@@ -2983,6 +3099,21 @@ static int lookup_open(struct nameidata *nd, struct path *path,
+@@ -3045,6 +3159,21 @@ static int lookup_open(struct nameidata *nd, struct path *path,
/* Negative dentry, just create the file */
if (!dentry->d_inode && (op->open_flag & O_CREAT)) {
umode_t mode = op->mode;
@@ -84959,7 +100739,7 @@ index d8ee4da..d6bf55e 100644
if (!IS_POSIXACL(dir->d_inode))
mode &= ~current_umask();
/*
-@@ -3004,6 +3135,8 @@ static int lookup_open(struct nameidata *nd, struct path *path,
+@@ -3066,6 +3195,8 @@ static int lookup_open(struct nameidata *nd, struct path *path,
nd->flags & LOOKUP_EXCL);
if (error)
goto out_dput;
@@ -84968,7 +100748,7 @@ index d8ee4da..d6bf55e 100644
}
out_no_open:
path->dentry = dentry;
-@@ -3109,11 +3242,24 @@ retry_lookup:
+@@ -3171,11 +3302,24 @@ retry_lookup:
goto finish_open_created;
}
@@ -84994,7 +100774,7 @@ index d8ee4da..d6bf55e 100644
/*
* If atomic_open() acquired write access it is dropped now due to
-@@ -3166,6 +3312,21 @@ finish_open:
+@@ -3228,6 +3372,21 @@ finish_open:
path_put(&save_parent);
return error;
}
@@ -85008,7 +100788,7 @@ index d8ee4da..d6bf55e 100644
+ if (error)
+ goto out;
+
-+ if (gr_handle_nameidata_symlinkowner(nd, inode)) {
++ if (gr_handle_nameidata_symlinkowner(nd, nd->inode)) {
+ error = -EACCES;
+ goto out;
+ }
@@ -85016,7 +100796,7 @@ index d8ee4da..d6bf55e 100644
audit_inode(nd->name, nd->path.dentry, 0);
if (unlikely(d_is_symlink(nd->path.dentry)) && !(open_flag & O_PATH)) {
error = -ELOOP;
-@@ -3440,9 +3601,11 @@ static struct dentry *filename_create(int dfd, struct filename *name,
+@@ -3503,9 +3662,11 @@ static struct dentry *filename_create(int dfd, struct filename *name,
goto unlock;
error = -EEXIST;
@@ -85030,7 +100810,7 @@ index d8ee4da..d6bf55e 100644
/*
* Special case - lookup gave negative, but... we had foo/bar/
* From the vfs_mknod() POV we just have a negative dentry -
-@@ -3496,6 +3659,20 @@ inline struct dentry *user_path_create(int dfd, const char __user *pathname,
+@@ -3559,6 +3720,20 @@ inline struct dentry *user_path_create(int dfd, const char __user *pathname,
}
EXPORT_SYMBOL(user_path_create);
@@ -85051,7 +100831,7 @@ index d8ee4da..d6bf55e 100644
int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
{
int error = may_create(dir, dentry);
-@@ -3559,6 +3736,17 @@ retry:
+@@ -3622,6 +3797,17 @@ retry:
if (!IS_POSIXACL(path.dentry->d_inode))
mode &= ~current_umask();
@@ -85069,7 +100849,7 @@ index d8ee4da..d6bf55e 100644
error = security_path_mknod(&path, dentry, mode, dev);
if (error)
goto out;
-@@ -3574,6 +3762,8 @@ retry:
+@@ -3637,6 +3823,8 @@ retry:
error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
break;
}
@@ -85078,7 +100858,7 @@ index d8ee4da..d6bf55e 100644
out:
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
-@@ -3628,9 +3818,16 @@ retry:
+@@ -3691,9 +3879,16 @@ retry:
if (!IS_POSIXACL(path.dentry->d_inode))
mode &= ~current_umask();
@@ -85095,7 +100875,7 @@ index d8ee4da..d6bf55e 100644
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
-@@ -3663,7 +3860,7 @@ void dentry_unhash(struct dentry *dentry)
+@@ -3726,7 +3921,7 @@ void dentry_unhash(struct dentry *dentry)
{
shrink_dcache_parent(dentry);
spin_lock(&dentry->d_lock);
@@ -85104,7 +100884,7 @@ index d8ee4da..d6bf55e 100644
__d_drop(dentry);
spin_unlock(&dentry->d_lock);
}
-@@ -3716,6 +3913,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
+@@ -3779,6 +3974,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
struct path path;
struct qstr last;
int type;
@@ -85113,7 +100893,7 @@ index d8ee4da..d6bf55e 100644
unsigned int lookup_flags = 0;
retry:
name = user_path_parent(dfd, pathname,
-@@ -3748,10 +3947,20 @@ retry:
+@@ -3811,10 +4008,20 @@ retry:
error = -ENOENT;
goto exit3;
}
@@ -85134,7 +100914,7 @@ index d8ee4da..d6bf55e 100644
exit3:
dput(dentry);
exit2:
-@@ -3846,6 +4055,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
+@@ -3909,6 +4116,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
int type;
struct inode *inode = NULL;
struct inode *delegated_inode = NULL;
@@ -85143,7 +100923,7 @@ index d8ee4da..d6bf55e 100644
unsigned int lookup_flags = 0;
retry:
name = user_path_parent(dfd, pathname,
-@@ -3872,10 +4083,21 @@ retry_deleg:
+@@ -3935,10 +4144,21 @@ retry_deleg:
if (d_is_negative(dentry))
goto slashes;
ihold(inode);
@@ -85165,7 +100945,7 @@ index d8ee4da..d6bf55e 100644
exit2:
dput(dentry);
}
-@@ -3964,9 +4186,17 @@ retry:
+@@ -4027,9 +4247,17 @@ retry:
if (IS_ERR(dentry))
goto out_putname;
@@ -85183,7 +100963,7 @@ index d8ee4da..d6bf55e 100644
done_path_create(&path, dentry);
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
-@@ -4070,6 +4300,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
+@@ -4133,6 +4361,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;
@@ -85191,7 +100971,7 @@ index d8ee4da..d6bf55e 100644
int how = 0;
int error;
-@@ -4093,7 +4324,7 @@ retry:
+@@ -4156,7 +4385,7 @@ retry:
if (error)
return error;
@@ -85200,7 +100980,7 @@ index d8ee4da..d6bf55e 100644
(how & LOOKUP_REVAL));
error = PTR_ERR(new_dentry);
if (IS_ERR(new_dentry))
-@@ -4105,11 +4336,26 @@ retry:
+@@ -4168,11 +4397,26 @@ retry:
error = may_linkat(&old_path);
if (unlikely(error))
goto out_dput;
@@ -85227,7 +101007,7 @@ index d8ee4da..d6bf55e 100644
done_path_create(&new_path, new_dentry);
if (delegated_inode) {
error = break_deleg_wait(&delegated_inode);
-@@ -4424,6 +4670,20 @@ retry_deleg:
+@@ -4487,6 +4731,20 @@ retry_deleg:
if (new_dentry == trap)
goto exit5;
@@ -85248,7 +101028,7 @@ index d8ee4da..d6bf55e 100644
error = security_path_rename(&old_path, old_dentry,
&new_path, new_dentry, flags);
if (error)
-@@ -4431,6 +4691,9 @@ retry_deleg:
+@@ -4494,6 +4752,9 @@ retry_deleg:
error = vfs_rename(old_path.dentry->d_inode, old_dentry,
new_path.dentry->d_inode, new_dentry,
&delegated_inode, flags);
@@ -85258,7 +101038,7 @@ index d8ee4da..d6bf55e 100644
exit5:
dput(new_dentry);
exit4:
-@@ -4487,14 +4750,24 @@ EXPORT_SYMBOL(vfs_whiteout);
+@@ -4550,14 +4811,24 @@ EXPORT_SYMBOL(vfs_whiteout);
int readlink_copy(char __user *buffer, int buflen, const char *link)
{
@@ -85285,7 +101065,7 @@ index d8ee4da..d6bf55e 100644
out:
return len;
diff --git a/fs/namespace.c b/fs/namespace.c
-index 0570729..9de781d 100644
+index 4fb1691..a518f2e0 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1516,6 +1516,9 @@ static int do_umount(struct mount *mnt, int flags)
@@ -85308,7 +101088,7 @@ index 0570729..9de781d 100644
return retval;
}
-@@ -1592,7 +1598,7 @@ static inline bool may_mount(void)
+@@ -1600,7 +1606,7 @@ static inline bool may_mandlock(void)
* unixes. Our API is identical to OSF/1 to avoid making a mess of AMD
*/
@@ -85317,7 +101097,7 @@ index 0570729..9de781d 100644
{
struct path path;
struct mount *mnt;
-@@ -1637,7 +1643,7 @@ out:
+@@ -1645,7 +1651,7 @@ out:
/*
* The 2.0 compatible umount. No flags.
*/
@@ -85326,7 +101106,7 @@ index 0570729..9de781d 100644
{
return sys_umount(name, 0);
}
-@@ -2712,6 +2718,16 @@ long do_mount(const char *dev_name, const char __user *dir_name,
+@@ -2721,6 +2727,16 @@ long do_mount(const char *dev_name, const char __user *dir_name,
MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
MS_STRICTATIME);
@@ -85343,7 +101123,7 @@ index 0570729..9de781d 100644
if (flags & MS_REMOUNT)
retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,
data_page);
-@@ -2725,7 +2741,10 @@ long do_mount(const char *dev_name, const char __user *dir_name,
+@@ -2734,7 +2750,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:
@@ -85354,7 +101134,7 @@ index 0570729..9de781d 100644
return retval;
}
-@@ -2743,7 +2762,7 @@ static void free_mnt_ns(struct mnt_namespace *ns)
+@@ -2752,7 +2771,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.
*/
@@ -85363,7 +101143,7 @@ index 0570729..9de781d 100644
static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
{
-@@ -2759,7 +2778,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2768,7 +2787,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
return ERR_PTR(ret);
}
new_ns->ns.ops = &mntns_operations;
@@ -85372,7 +101152,7 @@ index 0570729..9de781d 100644
atomic_set(&new_ns->count, 1);
new_ns->root = NULL;
INIT_LIST_HEAD(&new_ns->list);
-@@ -2769,7 +2788,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2778,7 +2797,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
return new_ns;
}
@@ -85381,7 +101161,7 @@ index 0570729..9de781d 100644
struct user_namespace *user_ns, struct fs_struct *new_fs)
{
struct mnt_namespace *new_ns;
-@@ -2890,8 +2909,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
+@@ -2899,8 +2918,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
}
EXPORT_SYMBOL(mount_subtree);
@@ -85392,7 +101172,7 @@ index 0570729..9de781d 100644
{
int ret;
char *kernel_type;
-@@ -2997,6 +3016,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
+@@ -3006,6 +3025,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
if (error)
goto out2;
@@ -85404,7 +101184,7 @@ index 0570729..9de781d 100644
get_fs_root(current->fs, &root);
old_mp = lock_mount(&old);
error = PTR_ERR(old_mp);
-@@ -3315,7 +3339,7 @@ static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns)
+@@ -3324,7 +3348,7 @@ static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns)
!ns_capable(current_user_ns(), CAP_SYS_ADMIN))
return -EPERM;
@@ -85413,8 +101193,160 @@ index 0570729..9de781d 100644
return -EINVAL;
get_mnt_ns(mnt_ns);
+diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h
+index ff8195b..d82456d 100644
+--- a/fs/nfs/callback.h
++++ b/fs/nfs/callback.h
+@@ -113,8 +113,8 @@ struct cb_sequenceres {
+ uint32_t csr_target_highestslotid;
+ };
+
+-extern __be32 nfs4_callback_sequence(struct cb_sequenceargs *args,
+- struct cb_sequenceres *res,
++extern __be32 nfs4_callback_sequence(void *_args,
++ void *_res,
+ struct cb_process_state *cps);
+
+ #define RCA4_TYPE_MASK_RDATA_DLG 0
+@@ -133,14 +133,14 @@ struct cb_recallanyargs {
+ uint32_t craa_type_mask;
+ };
+
+-extern __be32 nfs4_callback_recallany(struct cb_recallanyargs *args,
++extern __be32 nfs4_callback_recallany(void *_args,
+ void *dummy,
+ struct cb_process_state *cps);
+
+ struct cb_recallslotargs {
+ uint32_t crsa_target_highest_slotid;
+ };
+-extern __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args,
++extern __be32 nfs4_callback_recallslot(void *_args,
+ void *dummy,
+ struct cb_process_state *cps);
+
+@@ -159,7 +159,7 @@ struct cb_layoutrecallargs {
+ };
+
+ extern __be32 nfs4_callback_layoutrecall(
+- struct cb_layoutrecallargs *args,
++ void *_args,
+ void *dummy, struct cb_process_state *cps);
+
+ struct cb_devicenotifyitem {
+@@ -175,15 +175,15 @@ struct cb_devicenotifyargs {
+ };
+
+ extern __be32 nfs4_callback_devicenotify(
+- struct cb_devicenotifyargs *args,
++ void *_args,
+ void *dummy, struct cb_process_state *cps);
+
+ #endif /* CONFIG_NFS_V4_1 */
+ extern int check_gss_callback_principal(struct nfs_client *, struct svc_rqst *);
+-extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args,
+- struct cb_getattrres *res,
++extern __be32 nfs4_callback_getattr(void *args,
++ void *res,
+ struct cb_process_state *cps);
+-extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy,
++extern __be32 nfs4_callback_recall(void *args, void *dummy,
+ struct cb_process_state *cps);
+ #if IS_ENABLED(CONFIG_NFS_V4)
+ extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt);
+diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
+index f0939d0..fc277c6 100644
+--- a/fs/nfs/callback_proc.c
++++ b/fs/nfs/callback_proc.c
+@@ -19,10 +19,12 @@
+
+ #define NFSDBG_FACILITY NFSDBG_CALLBACK
+
+-__be32 nfs4_callback_getattr(struct cb_getattrargs *args,
+- struct cb_getattrres *res,
++__be32 nfs4_callback_getattr(void *_args,
++ void *_res,
+ struct cb_process_state *cps)
+ {
++ struct cb_getattrargs *args = _args;
++ struct cb_getattrres *res = _res;
+ struct nfs_delegation *delegation;
+ struct nfs_inode *nfsi;
+ struct inode *inode;
+@@ -68,9 +70,10 @@ out:
+ return res->status;
+ }
+
+-__be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy,
++__be32 nfs4_callback_recall(void *_args, void *dummy,
+ struct cb_process_state *cps)
+ {
++ struct cb_recallargs *args = _args;
+ struct inode *inode;
+ __be32 res;
+
+@@ -269,7 +272,7 @@ static u32 do_callback_layoutrecall(struct nfs_client *clp,
+
+ }
+
+-__be32 nfs4_callback_layoutrecall(struct cb_layoutrecallargs *args,
++__be32 nfs4_callback_layoutrecall(void *args,
+ void *dummy, struct cb_process_state *cps)
+ {
+ u32 res;
+@@ -296,9 +299,10 @@ static void pnfs_recall_all_layouts(struct nfs_client *clp)
+ do_callback_layoutrecall(clp, &args);
+ }
+
+-__be32 nfs4_callback_devicenotify(struct cb_devicenotifyargs *args,
++__be32 nfs4_callback_devicenotify(void *_args,
+ void *dummy, struct cb_process_state *cps)
+ {
++ struct cb_devicenotifyargs *args = _args;
+ int i;
+ __be32 res = 0;
+ struct nfs_client *clp = cps->clp;
+@@ -452,10 +456,12 @@ out:
+ return status;
+ }
+
+-__be32 nfs4_callback_sequence(struct cb_sequenceargs *args,
+- struct cb_sequenceres *res,
++__be32 nfs4_callback_sequence(void *_args,
++ void *_res,
+ struct cb_process_state *cps)
+ {
++ struct cb_sequenceargs *args = _args;
++ struct cb_sequenceres *res = _res;
+ struct nfs4_slot_table *tbl;
+ struct nfs4_slot *slot;
+ struct nfs_client *clp;
+@@ -541,9 +547,10 @@ validate_bitmap_values(unsigned long mask)
+ return (mask & ~RCA4_TYPE_MASK_ALL) == 0;
+ }
+
+-__be32 nfs4_callback_recallany(struct cb_recallanyargs *args, void *dummy,
++__be32 nfs4_callback_recallany(void *_args, void *dummy,
+ struct cb_process_state *cps)
+ {
++ struct cb_recallanyargs *args = _args;
+ __be32 status;
+ fmode_t flags = 0;
+
+@@ -576,9 +583,10 @@ out:
+ }
+
+ /* Reduce the fore channel's max_slots to the target value */
+-__be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy,
++__be32 nfs4_callback_recallslot(void *_args, void *dummy,
+ struct cb_process_state *cps)
+ {
++ struct cb_recallslotargs *args = _args;
+ struct nfs4_slot_table *fc_tbl;
+ __be32 status;
+
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
-index 646cdac..cdfa595 100644
+index 646cdac..9cb55a2 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -53,7 +53,7 @@ struct callback_op {
@@ -85426,11 +101358,226 @@ index 646cdac..cdfa595 100644
static struct callback_op callback_ops[];
+@@ -62,12 +62,12 @@ static __be32 nfs4_callback_null(struct svc_rqst *rqstp, void *argp, void *resp)
+ return htonl(NFS4_OK);
+ }
+
+-static int nfs4_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++static int nfs4_decode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_argsize_check(rqstp, p);
+ }
+
+-static int nfs4_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++static int nfs4_encode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_ressize_check(rqstp, p);
+ }
+@@ -193,8 +193,9 @@ static __be32 decode_op_hdr(struct xdr_stream *xdr, unsigned int *op)
+ return 0;
+ }
+
+-static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_getattrargs *args)
++static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *_args)
+ {
++ struct cb_getattrargs *args = _args;
+ __be32 status;
+
+ status = decode_fh(xdr, &args->fh);
+@@ -206,8 +207,9 @@ out:
+ return status;
+ }
+
+-static __be32 decode_recall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_recallargs *args)
++static __be32 decode_recall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *_args)
+ {
++ struct cb_recallargs *args = _args;
+ __be32 *p;
+ __be32 status;
+
+@@ -230,8 +232,9 @@ out:
+
+ static __be32 decode_layoutrecall_args(struct svc_rqst *rqstp,
+ struct xdr_stream *xdr,
+- struct cb_layoutrecallargs *args)
++ void *_args)
+ {
++ struct cb_layoutrecallargs *args = _args;
+ __be32 *p;
+ __be32 status = 0;
+ uint32_t iomode;
+@@ -290,8 +293,9 @@ out:
+ static
+ __be32 decode_devicenotify_args(struct svc_rqst *rqstp,
+ struct xdr_stream *xdr,
+- struct cb_devicenotifyargs *args)
++ void *_args)
+ {
++ struct cb_devicenotifyargs *args = _args;
+ __be32 *p;
+ __be32 status = 0;
+ u32 tmp;
+@@ -431,8 +435,9 @@ out:
+
+ static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp,
+ struct xdr_stream *xdr,
+- struct cb_sequenceargs *args)
++ void *_args)
+ {
++ struct cb_sequenceargs *args = _args;
+ __be32 *p;
+ int i;
+ __be32 status;
+@@ -493,8 +498,9 @@ out_free:
+
+ static __be32 decode_recallany_args(struct svc_rqst *rqstp,
+ struct xdr_stream *xdr,
+- struct cb_recallanyargs *args)
++ void *_args)
+ {
++ struct cb_recallanyargs *args = _args;
+ uint32_t bitmap[2];
+ __be32 *p, status;
+
+@@ -512,8 +518,9 @@ static __be32 decode_recallany_args(struct svc_rqst *rqstp,
+
+ static __be32 decode_recallslot_args(struct svc_rqst *rqstp,
+ struct xdr_stream *xdr,
+- struct cb_recallslotargs *args)
++ void *_args)
+ {
++ struct cb_recallslotargs *args = _args;
+ __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)
+ return 0;
+ }
+
+-static __be32 encode_getattr_res(struct svc_rqst *rqstp, struct xdr_stream *xdr, const struct cb_getattrres *res)
++static __be32 encode_getattr_res(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *_res)
+ {
++ const struct cb_getattrres *res = _res;
+ __be32 *savep = NULL;
+ __be32 status = res->status;
+
+@@ -691,8 +699,9 @@ static __be32 encode_sessionid(struct xdr_stream *xdr,
+
+ static __be32 encode_cb_sequence_res(struct svc_rqst *rqstp,
+ struct xdr_stream *xdr,
+- const struct cb_sequenceres *res)
++ void *_res)
+ {
++ const struct cb_sequenceres *res = _res;
+ __be32 *p;
+ __be32 status = res->csr_status;
+
+@@ -950,43 +959,41 @@ static struct callback_op callback_ops[] = {
+ .res_maxsize = CB_OP_HDR_RES_MAXSZ,
+ },
+ [OP_CB_GETATTR] = {
+- .process_op = (callback_process_op_t)nfs4_callback_getattr,
+- .decode_args = (callback_decode_arg_t)decode_getattr_args,
+- .encode_res = (callback_encode_res_t)encode_getattr_res,
++ .process_op = nfs4_callback_getattr,
++ .decode_args = decode_getattr_args,
++ .encode_res = encode_getattr_res,
+ .res_maxsize = CB_OP_GETATTR_RES_MAXSZ,
+ },
+ [OP_CB_RECALL] = {
+- .process_op = (callback_process_op_t)nfs4_callback_recall,
+- .decode_args = (callback_decode_arg_t)decode_recall_args,
++ .process_op = nfs4_callback_recall,
++ .decode_args = decode_recall_args,
+ .res_maxsize = CB_OP_RECALL_RES_MAXSZ,
+ },
+ #if defined(CONFIG_NFS_V4_1)
+ [OP_CB_LAYOUTRECALL] = {
+- .process_op = (callback_process_op_t)nfs4_callback_layoutrecall,
+- .decode_args =
+- (callback_decode_arg_t)decode_layoutrecall_args,
++ .process_op = nfs4_callback_layoutrecall,
++ .decode_args = decode_layoutrecall_args,
+ .res_maxsize = CB_OP_LAYOUTRECALL_RES_MAXSZ,
+ },
+ [OP_CB_NOTIFY_DEVICEID] = {
+- .process_op = (callback_process_op_t)nfs4_callback_devicenotify,
+- .decode_args =
+- (callback_decode_arg_t)decode_devicenotify_args,
++ .process_op = nfs4_callback_devicenotify,
++ .decode_args = decode_devicenotify_args,
+ .res_maxsize = CB_OP_DEVICENOTIFY_RES_MAXSZ,
+ },
+ [OP_CB_SEQUENCE] = {
+- .process_op = (callback_process_op_t)nfs4_callback_sequence,
+- .decode_args = (callback_decode_arg_t)decode_cb_sequence_args,
+- .encode_res = (callback_encode_res_t)encode_cb_sequence_res,
++ .process_op = nfs4_callback_sequence,
++ .decode_args = decode_cb_sequence_args,
++ .encode_res = encode_cb_sequence_res,
+ .res_maxsize = CB_OP_SEQUENCE_RES_MAXSZ,
+ },
+ [OP_CB_RECALL_ANY] = {
+- .process_op = (callback_process_op_t)nfs4_callback_recallany,
+- .decode_args = (callback_decode_arg_t)decode_recallany_args,
++ .process_op = nfs4_callback_recallany,
++ .decode_args = decode_recallany_args,
+ .res_maxsize = CB_OP_RECALLANY_RES_MAXSZ,
+ },
+ [OP_CB_RECALL_SLOT] = {
+- .process_op = (callback_process_op_t)nfs4_callback_recallslot,
+- .decode_args = (callback_decode_arg_t)decode_recallslot_args,
++ .process_op = nfs4_callback_recallslot,
++ .decode_args = decode_recallslot_args,
+ .res_maxsize = CB_OP_RECALLSLOT_RES_MAXSZ,
+ },
+ #endif /* CONFIG_NFS_V4_1 */
+@@ -998,13 +1005,13 @@ static struct callback_op callback_ops[] = {
+ static struct svc_procedure nfs4_callback_procedures1[] = {
+ [CB_NULL] = {
+ .pc_func = nfs4_callback_null,
+- .pc_decode = (kxdrproc_t)nfs4_decode_void,
+- .pc_encode = (kxdrproc_t)nfs4_encode_void,
++ .pc_decode = nfs4_decode_void,
++ .pc_encode = nfs4_encode_void,
+ .pc_xdrressize = 1,
+ },
+ [CB_COMPOUND] = {
+ .pc_func = nfs4_callback_compound,
+- .pc_encode = (kxdrproc_t)nfs4_encode_void,
++ .pc_encode = nfs4_encode_void,
+ .pc_argsize = 256,
+ .pc_ressize = 256,
+ .pc_xdrressize = NFS4_CALLBACK_BUFSIZE,
+diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
+index 7ded177..593782f 100644
+--- a/fs/nfs/dir.c
++++ b/fs/nfs/dir.c
+@@ -681,8 +681,9 @@ out:
+ * We only need to convert from xdr once so future lookups are much simpler
+ */
+ static
+-int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page* page)
++int nfs_readdir_filler(struct file *_desc, struct page* page)
+ {
++ nfs_readdir_descriptor_t *desc = (nfs_readdir_descriptor_t *)_desc;
+ 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,
+- desc->page_index, (filler_t *)nfs_readdir_filler, desc);
++ desc->page_index, nfs_readdir_filler, desc);
+ }
+
+ /*
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
-index f714b98..352e5f8 100644
+index 847b678..bd0b3e7 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
-@@ -1284,16 +1284,16 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat
+@@ -1318,16 +1318,16 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat
return 0;
}
@@ -85451,7 +101598,7 @@ index f714b98..352e5f8 100644
EXPORT_SYMBOL_GPL(nfs_inc_attr_generation_counter);
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
-index 9dea85f..ceb98c9 100644
+index 9a547aa..898fa60 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -612,9 +612,10 @@ unsigned long nfs_block_size(unsigned long bsize, unsigned char *nrbitsp)
@@ -85467,11 +101614,4269 @@ index 9dea85f..ceb98c9 100644
}
/*
+diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c
+index 09b1900..344f4c2 100644
+--- a/fs/nfs/mount_clnt.c
++++ b/fs/nfs/mount_clnt.c
+@@ -303,8 +303,8 @@ static void encode_mntdirpath(struct xdr_stream *xdr, const char *pathname)
+ xdr_encode_opaque(p, pathname, pathname_len);
+ }
+
+-static void mnt_xdr_enc_dirpath(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const char *dirpath)
++static void mnt_xdr_enc_dirpath(void *req, struct xdr_stream *xdr,
++ void *dirpath)
+ {
+ encode_mntdirpath(xdr, dirpath);
+ }
+@@ -355,10 +355,11 @@ static int decode_fhandle(struct xdr_stream *xdr, struct mountres *res)
+ return 0;
+ }
+
+-static int mnt_xdr_dec_mountres(struct rpc_rqst *req,
++static int mnt_xdr_dec_mountres(void *req,
+ struct xdr_stream *xdr,
+- struct mountres *res)
++ void *_res)
+ {
++ struct mountres *res = _res;
+ int status;
+
+ status = decode_status(xdr, res);
+@@ -447,10 +448,11 @@ static int decode_auth_flavors(struct xdr_stream *xdr, struct mountres *res)
+ return 0;
+ }
+
+-static int mnt_xdr_dec_mountres3(struct rpc_rqst *req,
++static int mnt_xdr_dec_mountres3(void *req,
+ struct xdr_stream *xdr,
+- struct mountres *res)
++ void *_res)
+ {
++ struct mountres *res = _res;
+ int status;
+
+ status = decode_fhs_status(xdr, res);
+@@ -467,8 +469,8 @@ static int mnt_xdr_dec_mountres3(struct rpc_rqst *req,
+ static struct rpc_procinfo mnt_procedures[] = {
+ [MOUNTPROC_MNT] = {
+ .p_proc = MOUNTPROC_MNT,
+- .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath,
+- .p_decode = (kxdrdproc_t)mnt_xdr_dec_mountres,
++ .p_encode = mnt_xdr_enc_dirpath,
++ .p_decode = mnt_xdr_dec_mountres,
+ .p_arglen = MNT_enc_dirpath_sz,
+ .p_replen = MNT_dec_mountres_sz,
+ .p_statidx = MOUNTPROC_MNT,
+@@ -476,7 +478,7 @@ static struct rpc_procinfo mnt_procedures[] = {
+ },
+ [MOUNTPROC_UMNT] = {
+ .p_proc = MOUNTPROC_UMNT,
+- .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath,
++ .p_encode = mnt_xdr_enc_dirpath,
+ .p_arglen = MNT_enc_dirpath_sz,
+ .p_statidx = MOUNTPROC_UMNT,
+ .p_name = "UMOUNT",
+@@ -486,8 +488,8 @@ static struct rpc_procinfo mnt_procedures[] = {
+ static struct rpc_procinfo mnt3_procedures[] = {
+ [MOUNTPROC3_MNT] = {
+ .p_proc = MOUNTPROC3_MNT,
+- .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath,
+- .p_decode = (kxdrdproc_t)mnt_xdr_dec_mountres3,
++ .p_encode = mnt_xdr_enc_dirpath,
++ .p_decode = mnt_xdr_dec_mountres3,
+ .p_arglen = MNT_enc_dirpath_sz,
+ .p_replen = MNT_dec_mountres3_sz,
+ .p_statidx = MOUNTPROC3_MNT,
+@@ -495,7 +497,7 @@ static struct rpc_procinfo mnt3_procedures[] = {
+ },
+ [MOUNTPROC3_UMNT] = {
+ .p_proc = MOUNTPROC3_UMNT,
+- .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath,
++ .p_encode = mnt_xdr_enc_dirpath,
+ .p_arglen = MNT_enc_dirpath_sz,
+ .p_statidx = MOUNTPROC3_UMNT,
+ .p_name = "UMOUNT",
+diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c
+index b4e03ed..6907eb4 100644
+--- a/fs/nfs/nfs2xdr.c
++++ b/fs/nfs/nfs2xdr.c
+@@ -566,9 +566,9 @@ out_default:
+ * "NFS: Network File System Protocol Specification".
+ */
+
+-static void nfs2_xdr_enc_fhandle(struct rpc_rqst *req,
++static void nfs2_xdr_enc_fhandle(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_fh *fh)
++ void *fh)
+ {
+ encode_fhandle(xdr, fh);
+ }
+@@ -581,25 +581,31 @@ static void nfs2_xdr_enc_fhandle(struct rpc_rqst *req,
+ * sattr attributes;
+ * };
+ */
+-static void nfs2_xdr_enc_sattrargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_sattrargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_sattrargs *args)
++ void *_args)
+ {
++ const struct nfs_sattrargs *args = _args;
++
+ encode_fhandle(xdr, args->fh);
+ encode_sattr(xdr, args->sattr);
+ }
+
+-static void nfs2_xdr_enc_diropargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_diropargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_diropargs *args)
++ void *_args)
+ {
++ const struct nfs_diropargs *args = _args;
++
+ encode_diropargs(xdr, args->fh, args->name, args->len);
+ }
+
+-static void nfs2_xdr_enc_readlinkargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_readlinkargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_readlinkargs *args)
++ void *_args)
+ {
++ const struct nfs_readlinkargs *args = _args;
++
+ encode_fhandle(xdr, args->fh);
+ prepare_reply_buffer(req, args->pages, args->pgbase,
+ args->pglen, NFS_readlinkres_sz);
+@@ -630,10 +636,13 @@ static void encode_readargs(struct xdr_stream *xdr,
+ *p = cpu_to_be32(count);
+ }
+
+-static void nfs2_xdr_enc_readargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_readargs(void *_req,
+ struct xdr_stream *xdr,
+- const struct nfs_pgio_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ const struct nfs_pgio_args *args = _args;
++
+ encode_readargs(xdr, args);
+ prepare_reply_buffer(req, args->pages, args->pgbase,
+ args->count, NFS_readres_sz);
+@@ -670,9 +679,9 @@ static void encode_writeargs(struct xdr_stream *xdr,
+ xdr_write_pages(xdr, args->pages, args->pgbase, count);
+ }
+
+-static void nfs2_xdr_enc_writeargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_writeargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_pgio_args *args)
++ void *args)
+ {
+ encode_writeargs(xdr, args);
+ xdr->buf->flags |= XDRBUF_WRITE;
+@@ -686,18 +695,22 @@ static void nfs2_xdr_enc_writeargs(struct rpc_rqst *req,
+ * sattr attributes;
+ * };
+ */
+-static void nfs2_xdr_enc_createargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_createargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_createargs *args)
++ void *_args)
+ {
++ const struct nfs_createargs *args = _args;
++
+ encode_diropargs(xdr, args->fh, args->name, args->len);
+ encode_sattr(xdr, args->sattr);
+ }
+
+-static void nfs2_xdr_enc_removeargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_removeargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_removeargs *args)
++ void *_args)
+ {
++ const struct nfs_removeargs *args = _args;
++
+ encode_diropargs(xdr, args->fh, args->name.name, args->name.len);
+ }
+
+@@ -709,10 +722,11 @@ static void nfs2_xdr_enc_removeargs(struct rpc_rqst *req,
+ * diropargs to;
+ * };
+ */
+-static void nfs2_xdr_enc_renameargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_renameargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_renameargs *args)
++ void *_args)
+ {
++ const struct nfs_renameargs *args = _args;
+ const struct qstr *old = args->old_name;
+ const struct qstr *new = args->new_name;
+
+@@ -728,10 +742,12 @@ static void nfs2_xdr_enc_renameargs(struct rpc_rqst *req,
+ * diropargs to;
+ * };
+ */
+-static void nfs2_xdr_enc_linkargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_linkargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_linkargs *args)
++ void *_args)
+ {
++ const struct nfs_linkargs *args = _args;
++
+ encode_fhandle(xdr, args->fromfh);
+ encode_diropargs(xdr, args->tofh, args->toname, args->tolen);
+ }
+@@ -745,10 +761,12 @@ static void nfs2_xdr_enc_linkargs(struct rpc_rqst *req,
+ * sattr attributes;
+ * };
+ */
+-static void nfs2_xdr_enc_symlinkargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_symlinkargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_symlinkargs *args)
++ void *_args)
+ {
++ const struct nfs_symlinkargs *args = _args;
++
+ encode_diropargs(xdr, args->fromfh, args->fromname, args->fromlen);
+ encode_path(xdr, args->pages, args->pathlen);
+ encode_sattr(xdr, args->sattr);
+@@ -775,10 +793,12 @@ static void encode_readdirargs(struct xdr_stream *xdr,
+ *p = cpu_to_be32(args->count);
+ }
+
+-static void nfs2_xdr_enc_readdirargs(struct rpc_rqst *req,
++static void nfs2_xdr_enc_readdirargs(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_readdirargs *args)
++ void *_args)
+ {
++ const struct nfs_readdirargs *args = _args;
++
+ encode_readdirargs(xdr, args);
+ prepare_reply_buffer(req, args->pages, 0,
+ args->count, NFS_readdirres_sz);
+@@ -791,7 +811,7 @@ static void nfs2_xdr_enc_readdirargs(struct rpc_rqst *req,
+ * "NFS: Network File System Protocol Specification".
+ */
+
+-static int nfs2_xdr_dec_stat(struct rpc_rqst *req, struct xdr_stream *xdr,
++static int nfs2_xdr_dec_stat(void *req, struct xdr_stream *xdr,
+ void *__unused)
+ {
+ enum nfs_stat status;
+@@ -808,14 +828,14 @@ out_default:
+ return nfs_stat_to_errno(status);
+ }
+
+-static int nfs2_xdr_dec_attrstat(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_fattr *result)
++static int nfs2_xdr_dec_attrstat(void *req, struct xdr_stream *xdr,
++ void *result)
+ {
+ return decode_attrstat(xdr, result, NULL);
+ }
+
+-static int nfs2_xdr_dec_diropres(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_diropok *result)
++static int nfs2_xdr_dec_diropres(void *req, struct xdr_stream *xdr,
++ void *result)
+ {
+ return decode_diropres(xdr, result);
+ }
+@@ -830,7 +850,7 @@ static int nfs2_xdr_dec_diropres(struct rpc_rqst *req, struct xdr_stream *xdr,
+ * void;
+ * };
+ */
+-static int nfs2_xdr_dec_readlinkres(struct rpc_rqst *req,
++static int nfs2_xdr_dec_readlinkres(void *req,
+ struct xdr_stream *xdr, void *__unused)
+ {
+ enum nfs_stat status;
+@@ -859,9 +879,10 @@ out_default:
+ * void;
+ * };
+ */
+-static int nfs2_xdr_dec_readres(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_pgio_res *result)
++static int nfs2_xdr_dec_readres(void *req, struct xdr_stream *xdr,
++ void *_result)
+ {
++ struct nfs_pgio_res *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -881,9 +902,11 @@ out_default:
+ return nfs_stat_to_errno(status);
+ }
+
+-static int nfs2_xdr_dec_writeres(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_pgio_res *result)
++static int nfs2_xdr_dec_writeres(void *req, struct xdr_stream *xdr,
++ void *_result)
+ {
++ struct nfs_pgio_res *result = _result;
++
+ /* All NFSv2 writes are "file sync" writes */
+ result->verf->committed = NFS_FILE_SYNC;
+ return decode_attrstat(xdr, result->fattr, &result->op_status);
+@@ -981,7 +1004,7 @@ static int decode_readdirok(struct xdr_stream *xdr)
+ return xdr_read_pages(xdr, xdr->buf->page_len);
+ }
+
+-static int nfs2_xdr_dec_readdirres(struct rpc_rqst *req,
++static int nfs2_xdr_dec_readdirres(void *req,
+ struct xdr_stream *xdr, void *__unused)
+ {
+ enum nfs_stat status;
+@@ -1033,8 +1056,8 @@ out_overflow:
+ return -EIO;
+ }
+
+-static int nfs2_xdr_dec_statfsres(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs2_fsstat *result)
++static int nfs2_xdr_dec_statfsres(void *req, struct xdr_stream *xdr,
++ void *result)
+ {
+ enum nfs_stat status;
+ int error;
+@@ -1118,8 +1141,8 @@ static int nfs_stat_to_errno(enum nfs_stat status)
+ #define PROC(proc, argtype, restype, timer) \
+ [NFSPROC_##proc] = { \
+ .p_proc = NFSPROC_##proc, \
+- .p_encode = (kxdreproc_t)nfs2_xdr_enc_##argtype, \
+- .p_decode = (kxdrdproc_t)nfs2_xdr_dec_##restype, \
++ .p_encode = nfs2_xdr_enc_##argtype, \
++ .p_decode = nfs2_xdr_dec_##restype, \
+ .p_arglen = NFS_##argtype##_sz, \
+ .p_replen = NFS_##restype##_sz, \
+ .p_timer = timer, \
+diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
+index 267126d..19c97b8 100644
+--- a/fs/nfs/nfs3xdr.c
++++ b/fs/nfs/nfs3xdr.c
+@@ -844,9 +844,9 @@ static void encode_diropargs3(struct xdr_stream *xdr, const struct nfs_fh *fh,
+ * nfs_fh3 object;
+ * };
+ */
+-static void nfs3_xdr_enc_getattr3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_getattr3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_fh *fh)
++ void *fh)
+ {
+ encode_nfs_fh3(xdr, fh);
+ }
+@@ -882,10 +882,12 @@ static void encode_sattrguard3(struct xdr_stream *xdr,
+ }
+ }
+
+-static void nfs3_xdr_enc_setattr3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_setattr3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_sattrargs *args)
++ void *_args)
+ {
++ const struct nfs3_sattrargs *args = _args;
++
+ encode_nfs_fh3(xdr, args->fh);
+ encode_sattr3(xdr, args->sattr);
+ encode_sattrguard3(xdr, args);
+@@ -898,10 +900,12 @@ static void nfs3_xdr_enc_setattr3args(struct rpc_rqst *req,
+ * diropargs3 what;
+ * };
+ */
+-static void nfs3_xdr_enc_lookup3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_lookup3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_diropargs *args)
++ void *_args)
+ {
++ const struct nfs3_diropargs *args = _args;
++
+ encode_diropargs3(xdr, args->fh, args->name, args->len);
+ }
+
+@@ -920,9 +924,9 @@ static void encode_access3args(struct xdr_stream *xdr,
+ encode_uint32(xdr, args->access);
+ }
+
+-static void nfs3_xdr_enc_access3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_access3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_accessargs *args)
++ void *args)
+ {
+ encode_access3args(xdr, args);
+ }
+@@ -934,10 +938,11 @@ static void nfs3_xdr_enc_access3args(struct rpc_rqst *req,
+ * nfs_fh3 symlink;
+ * };
+ */
+-static void nfs3_xdr_enc_readlink3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_readlink3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_readlinkargs *args)
++ void *_args)
+ {
++ const struct nfs3_readlinkargs *args = _args;
+ encode_nfs_fh3(xdr, args->fh);
+ prepare_reply_buffer(req, args->pages, args->pgbase,
+ args->pglen, NFS3_readlinkres_sz);
+@@ -964,10 +969,12 @@ static void encode_read3args(struct xdr_stream *xdr,
+ *p = cpu_to_be32(args->count);
+ }
+
+-static void nfs3_xdr_enc_read3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_read3args(void *_req,
+ struct xdr_stream *xdr,
+- const struct nfs_pgio_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ const struct nfs_pgio_args *args = _args;
+ encode_read3args(xdr, args);
+ prepare_reply_buffer(req, args->pages, args->pgbase,
+ args->count, NFS3_readres_sz);
+@@ -1006,9 +1013,9 @@ static void encode_write3args(struct xdr_stream *xdr,
+ xdr_write_pages(xdr, args->pages, args->pgbase, args->count);
+ }
+
+-static void nfs3_xdr_enc_write3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_write3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_pgio_args *args)
++ void *args)
+ {
+ encode_write3args(xdr, args);
+ xdr->buf->flags |= XDRBUF_WRITE;
+@@ -1053,10 +1060,12 @@ static void encode_createhow3(struct xdr_stream *xdr,
+ }
+ }
+
+-static void nfs3_xdr_enc_create3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_create3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_createargs *args)
++ void *_args)
+ {
++ const struct nfs3_createargs *args = _args;
++
+ encode_diropargs3(xdr, args->fh, args->name, args->len);
+ encode_createhow3(xdr, args);
+ }
+@@ -1069,10 +1078,12 @@ static void nfs3_xdr_enc_create3args(struct rpc_rqst *req,
+ * sattr3 attributes;
+ * };
+ */
+-static void nfs3_xdr_enc_mkdir3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_mkdir3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_mkdirargs *args)
++ void *_args)
+ {
++ const struct nfs3_mkdirargs *args = _args;
++
+ encode_diropargs3(xdr, args->fh, args->name, args->len);
+ encode_sattr3(xdr, args->sattr);
+ }
+@@ -1097,10 +1108,12 @@ static void encode_symlinkdata3(struct xdr_stream *xdr,
+ encode_nfspath3(xdr, args->pages, args->pathlen);
+ }
+
+-static void nfs3_xdr_enc_symlink3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_symlink3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_symlinkargs *args)
++ void *_args)
+ {
++ const struct nfs3_symlinkargs *args = _args;
++
+ encode_diropargs3(xdr, args->fromfh, args->fromname, args->fromlen);
+ encode_symlinkdata3(xdr, args);
+ xdr->buf->flags |= XDRBUF_WRITE;
+@@ -1158,10 +1171,12 @@ static void encode_mknoddata3(struct xdr_stream *xdr,
+ }
+ }
+
+-static void nfs3_xdr_enc_mknod3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_mknod3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_mknodargs *args)
++ void *_args)
+ {
++ const struct nfs3_mknodargs *args = _args;
++
+ encode_diropargs3(xdr, args->fh, args->name, args->len);
+ encode_mknoddata3(xdr, args);
+ }
+@@ -1173,10 +1188,12 @@ static void nfs3_xdr_enc_mknod3args(struct rpc_rqst *req,
+ * diropargs3 object;
+ * };
+ */
+-static void nfs3_xdr_enc_remove3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_remove3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_removeargs *args)
++ void *_args)
+ {
++ const struct nfs_removeargs *args = _args;
++
+ encode_diropargs3(xdr, args->fh, args->name.name, args->name.len);
+ }
+
+@@ -1188,10 +1205,11 @@ static void nfs3_xdr_enc_remove3args(struct rpc_rqst *req,
+ * diropargs3 to;
+ * };
+ */
+-static void nfs3_xdr_enc_rename3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_rename3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_renameargs *args)
++ void *_args)
+ {
++ const struct nfs_renameargs *args = _args;
+ const struct qstr *old = args->old_name;
+ const struct qstr *new = args->new_name;
+
+@@ -1207,10 +1225,12 @@ static void nfs3_xdr_enc_rename3args(struct rpc_rqst *req,
+ * diropargs3 link;
+ * };
+ */
+-static void nfs3_xdr_enc_link3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_link3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_linkargs *args)
++ void *_args)
+ {
++ const struct nfs3_linkargs *args = _args;
++
+ encode_nfs_fh3(xdr, args->fromfh);
+ encode_diropargs3(xdr, args->tofh, args->toname, args->tolen);
+ }
+@@ -1238,10 +1258,12 @@ static void encode_readdir3args(struct xdr_stream *xdr,
+ *p = cpu_to_be32(args->count);
+ }
+
+-static void nfs3_xdr_enc_readdir3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_readdir3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_readdirargs *args)
++ void *_args)
+ {
++ const struct nfs3_readdirargs *args = _args;
++
+ encode_readdir3args(xdr, args);
+ prepare_reply_buffer(req, args->pages, 0,
+ args->count, NFS3_readdirres_sz);
+@@ -1278,10 +1300,12 @@ static void encode_readdirplus3args(struct xdr_stream *xdr,
+ *p = cpu_to_be32(args->count);
+ }
+
+-static void nfs3_xdr_enc_readdirplus3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_readdirplus3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_readdirargs *args)
++ void *_args)
+ {
++ const struct nfs3_readdirargs *args = _args;
++
+ encode_readdirplus3args(xdr, args);
+ prepare_reply_buffer(req, args->pages, 0,
+ args->count, NFS3_readdirres_sz);
+@@ -1308,19 +1332,21 @@ static void encode_commit3args(struct xdr_stream *xdr,
+ *p = cpu_to_be32(args->count);
+ }
+
+-static void nfs3_xdr_enc_commit3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_commit3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs_commitargs *args)
++ void *args)
+ {
+ encode_commit3args(xdr, args);
+ }
+
+ #ifdef CONFIG_NFS_V3_ACL
+
+-static void nfs3_xdr_enc_getacl3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_getacl3args(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs3_getaclargs *args)
++ void *_args)
+ {
++ const struct nfs3_getaclargs *args = _args;
++
+ encode_nfs_fh3(xdr, args->fh);
+ encode_uint32(xdr, args->mask);
+ if (args->mask & (NFS_ACL | NFS_DFACL))
+@@ -1329,10 +1355,12 @@ static void nfs3_xdr_enc_getacl3args(struct rpc_rqst *req,
+ ACL3_getaclres_sz);
+ }
+
+-static void nfs3_xdr_enc_setacl3args(struct rpc_rqst *req,
++static void nfs3_xdr_enc_setacl3args(void *_req,
+ struct xdr_stream *xdr,
+- const struct nfs3_setaclargs *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ const struct nfs3_setaclargs *args = _args;
+ unsigned int base;
+ int error;
+
+@@ -1380,9 +1408,9 @@ static void nfs3_xdr_enc_setacl3args(struct rpc_rqst *req,
+ * void;
+ * };
+ */
+-static int nfs3_xdr_dec_getattr3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_getattr3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_fattr *result)
++ void *result)
+ {
+ enum nfs_stat status;
+ int error;
+@@ -1417,9 +1445,9 @@ out_default:
+ * SETATTR3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_setattr3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_setattr3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_fattr *result)
++ void *result)
+ {
+ enum nfs_stat status;
+ int error;
+@@ -1458,10 +1486,11 @@ out_status:
+ * LOOKUP3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_lookup3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_lookup3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs3_diropres *result)
++ void *_result)
+ {
++ struct nfs3_diropres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -1505,10 +1534,11 @@ out_default:
+ * ACCESS3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_access3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_access3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs3_accessres *result)
++ void *_result)
+ {
++ struct nfs3_accessres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -1546,9 +1576,9 @@ out_default:
+ * READLINK3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_readlink3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_readlink3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_fattr *result)
++ void *result)
+ {
+ enum nfs_stat status;
+ int error;
+@@ -1625,9 +1655,10 @@ out_overflow:
+ return -EIO;
+ }
+
+-static int nfs3_xdr_dec_read3res(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_pgio_res *result)
++static int nfs3_xdr_dec_read3res(void *req, struct xdr_stream *xdr,
++ void *_result)
+ {
++ struct nfs_pgio_res *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -1698,9 +1729,10 @@ out_eio:
+ return -EIO;
+ }
+
+-static int nfs3_xdr_dec_write3res(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_pgio_res *result)
++static int nfs3_xdr_dec_write3res(void *req, struct xdr_stream *xdr,
++ void *_result)
+ {
++ struct nfs_pgio_res *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -1762,10 +1794,11 @@ out:
+ return error;
+ }
+
+-static int nfs3_xdr_dec_create3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_create3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs3_diropres *result)
++ void *_result)
+ {
++ struct nfs3_diropres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -1802,10 +1835,11 @@ out_default:
+ * REMOVE3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_remove3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_remove3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_removeres *result)
++ void *_result)
+ {
++ struct nfs_removeres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -1843,10 +1877,11 @@ out_status:
+ * RENAME3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_rename3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_rename3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_renameres *result)
++ void *_result)
+ {
++ struct nfs_renameres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -1887,9 +1922,10 @@ out_status:
+ * LINK3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_link3res(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs3_linkres *result)
++static int nfs3_xdr_dec_link3res(void *req, struct xdr_stream *xdr,
++ void *_result)
+ {
++ struct nfs3_linkres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -2070,10 +2106,11 @@ out:
+ return error;
+ }
+
+-static int nfs3_xdr_dec_readdir3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_readdir3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs3_readdirres *result)
++ void *_result)
+ {
++ struct nfs3_readdirres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -2138,10 +2175,11 @@ out_overflow:
+ return -EIO;
+ }
+
+-static int nfs3_xdr_dec_fsstat3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_fsstat3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_fsstat *result)
++ void *_result)
+ {
++ struct nfs_fsstat *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -2214,10 +2252,11 @@ out_overflow:
+ return -EIO;
+ }
+
+-static int nfs3_xdr_dec_fsinfo3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_fsinfo3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_fsinfo *result)
++ void *_result)
+ {
++ struct nfs_fsinfo *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -2277,10 +2316,11 @@ out_overflow:
+ return -EIO;
+ }
+
+-static int nfs3_xdr_dec_pathconf3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_pathconf3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_pathconf *result)
++ void *_result)
+ {
++ struct nfs_pathconf *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -2318,10 +2358,11 @@ out_status:
+ * COMMIT3resfail resfail;
+ * };
+ */
+-static int nfs3_xdr_dec_commit3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_commit3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_commitres *result)
++ void *_result)
+ {
++ struct nfs_commitres *result = _result;
+ enum nfs_stat status;
+ int error;
+
+@@ -2387,9 +2428,9 @@ out:
+ return error;
+ }
+
+-static int nfs3_xdr_dec_getacl3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_getacl3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs3_getaclres *result)
++ void *result)
+ {
+ enum nfs_stat status;
+ int error;
+@@ -2406,9 +2447,9 @@ out_default:
+ return nfs3_stat_to_errno(status);
+ }
+
+-static int nfs3_xdr_dec_setacl3res(struct rpc_rqst *req,
++static int nfs3_xdr_dec_setacl3res(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_fattr *result)
++ void *result)
+ {
+ enum nfs_stat status;
+ int error;
+@@ -2495,8 +2536,8 @@ static int nfs3_stat_to_errno(enum nfs_stat status)
+ #define PROC(proc, argtype, restype, timer) \
+ [NFS3PROC_##proc] = { \
+ .p_proc = NFS3PROC_##proc, \
+- .p_encode = (kxdreproc_t)nfs3_xdr_enc_##argtype##3args, \
+- .p_decode = (kxdrdproc_t)nfs3_xdr_dec_##restype##3res, \
++ .p_encode = nfs3_xdr_enc_##argtype##3args, \
++ .p_decode = nfs3_xdr_dec_##restype##3res, \
+ .p_arglen = NFS3_##argtype##args_sz, \
+ .p_replen = NFS3_##restype##res_sz, \
+ .p_timer = timer, \
+@@ -2538,8 +2579,8 @@ const struct rpc_version nfs_version3 = {
+ static struct rpc_procinfo nfs3_acl_procedures[] = {
+ [ACLPROC3_GETACL] = {
+ .p_proc = ACLPROC3_GETACL,
+- .p_encode = (kxdreproc_t)nfs3_xdr_enc_getacl3args,
+- .p_decode = (kxdrdproc_t)nfs3_xdr_dec_getacl3res,
++ .p_encode = nfs3_xdr_enc_getacl3args,
++ .p_decode = nfs3_xdr_dec_getacl3res,
+ .p_arglen = ACL3_getaclargs_sz,
+ .p_replen = ACL3_getaclres_sz,
+ .p_timer = 1,
+@@ -2547,8 +2588,8 @@ static struct rpc_procinfo nfs3_acl_procedures[] = {
+ },
+ [ACLPROC3_SETACL] = {
+ .p_proc = ACLPROC3_SETACL,
+- .p_encode = (kxdreproc_t)nfs3_xdr_enc_setacl3args,
+- .p_decode = (kxdrdproc_t)nfs3_xdr_dec_setacl3res,
++ .p_encode = nfs3_xdr_enc_setacl3args,
++ .p_decode = nfs3_xdr_dec_setacl3res,
+ .p_arglen = ACL3_setaclargs_sz,
+ .p_replen = ACL3_setaclres_sz,
+ .p_timer = 0,
+diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c
+index 0ca482a..5df90f3 100644
+--- a/fs/nfs/nfs42xdr.c
++++ b/fs/nfs/nfs42xdr.c
+@@ -165,10 +165,12 @@ static void encode_clone(struct xdr_stream *xdr,
+ /*
+ * Encode ALLOCATE request
+ */
+-static void nfs4_xdr_enc_allocate(struct rpc_rqst *req,
++static void nfs4_xdr_enc_allocate(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs42_falloc_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs42_falloc_args *args = _args;
+ 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,
+ /*
+ * Encode DEALLOCATE request
+ */
+-static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req,
++static void nfs4_xdr_enc_deallocate(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs42_falloc_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs42_falloc_args *args = _args;
+ 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,
+ /*
+ * Encode SEEK request
+ */
+-static void nfs4_xdr_enc_seek(struct rpc_rqst *req,
++static void nfs4_xdr_enc_seek(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs42_seek_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs42_seek_args *args = _args;
+ 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,
+ /*
+ * Encode LAYOUTSTATS request
+ */
+-static void nfs4_xdr_enc_layoutstats(struct rpc_rqst *req,
++static void nfs4_xdr_enc_layoutstats(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs42_layoutstat_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs42_layoutstat_args *args = _args;
+ int i;
+
+ struct compound_hdr hdr = {
+@@ -243,10 +251,12 @@ static void nfs4_xdr_enc_layoutstats(struct rpc_rqst *req,
+ /*
+ * Encode CLONE request
+ */
+-static void nfs4_xdr_enc_clone(struct rpc_rqst *req,
++static void nfs4_xdr_enc_clone(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs42_clone_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs42_clone_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -306,10 +316,12 @@ static int decode_clone(struct xdr_stream *xdr)
+ /*
+ * Decode ALLOCATE request
+ */
+-static int nfs4_xdr_dec_allocate(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_allocate(void *_rqstp,
+ struct xdr_stream *xdr,
+- struct nfs42_falloc_res *res)
++ void *_res)
+ {
++ struct rpc_rqst *rqstp = _rqstp;
++ struct nfs42_falloc_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -333,10 +345,12 @@ out:
+ /*
+ * Decode DEALLOCATE request
+ */
+-static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_deallocate(void *_rqstp,
+ struct xdr_stream *xdr,
+- struct nfs42_falloc_res *res)
++ void *_res)
+ {
++ struct rpc_rqst *rqstp = _rqstp;
++ struct nfs42_falloc_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -360,10 +374,12 @@ out:
+ /*
+ * Decode SEEK request
+ */
+-static int nfs4_xdr_dec_seek(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_seek(void *_rqstp,
+ struct xdr_stream *xdr,
+- struct nfs42_seek_res *res)
++ void *_res)
+ {
++ struct rpc_rqst *rqstp = _rqstp;
++ struct nfs42_seek_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -384,10 +400,12 @@ out:
+ /*
+ * Decode LAYOUTSTATS request
+ */
+-static int nfs4_xdr_dec_layoutstats(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_layoutstats(void *_rqstp,
+ struct xdr_stream *xdr,
+- struct nfs42_layoutstat_res *res)
++ void *_res)
+ {
++ struct rpc_rqst *rqstp = _rqstp;
++ struct nfs42_layoutstat_res *res = _res;
+ struct compound_hdr hdr;
+ int status, i;
+
+@@ -414,10 +432,12 @@ out:
+ /*
+ * Decode CLONE request
+ */
+-static int nfs4_xdr_dec_clone(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_clone(void *_rqstp,
+ struct xdr_stream *xdr,
+- struct nfs42_clone_res *res)
++ void *_res)
+ {
++ struct rpc_rqst *rqstp = _rqstp;
++ struct nfs42_clone_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
+index 4e44412..69ead07 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)
+ /*
+ * Encode an ACCESS request
+ */
+-static void nfs4_xdr_enc_access(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_accessargs *args)
++static void nfs4_xdr_enc_access(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs4_accessargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2094,9 +2095,10 @@ static void nfs4_xdr_enc_access(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode LOOKUP request
+ */
+-static void nfs4_xdr_enc_lookup(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_lookup_arg *args)
++static void nfs4_xdr_enc_lookup(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs4_lookup_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2113,10 +2115,11 @@ static void nfs4_xdr_enc_lookup(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode LOOKUP_ROOT request
+ */
+-static void nfs4_xdr_enc_lookup_root(struct rpc_rqst *req,
++static void nfs4_xdr_enc_lookup_root(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs4_lookup_root_arg *args)
++ void *_args)
+ {
++ const struct nfs4_lookup_root_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2132,9 +2135,10 @@ static void nfs4_xdr_enc_lookup_root(struct rpc_rqst *req,
+ /*
+ * Encode REMOVE request
+ */
+-static void nfs4_xdr_enc_remove(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs_removeargs *args)
++static void nfs4_xdr_enc_remove(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs_removeargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2149,9 +2153,10 @@ static void nfs4_xdr_enc_remove(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode RENAME request
+ */
+-static void nfs4_xdr_enc_rename(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs_renameargs *args)
++static void nfs4_xdr_enc_rename(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs_renameargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2168,9 +2173,10 @@ static void nfs4_xdr_enc_rename(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode LINK request
+ */
+-static void nfs4_xdr_enc_link(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_link_arg *args)
++static void nfs4_xdr_enc_link(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs4_link_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2189,9 +2195,10 @@ static void nfs4_xdr_enc_link(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode CREATE request
+ */
+-static void nfs4_xdr_enc_create(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_create_arg *args)
++static void nfs4_xdr_enc_create(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs4_create_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2208,8 +2215,8 @@ static void nfs4_xdr_enc_create(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode SYMLINK request
+ */
+-static void nfs4_xdr_enc_symlink(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_create_arg *args)
++static void nfs4_xdr_enc_symlink(void *req, struct xdr_stream *xdr,
++ void *args)
+ {
+ nfs4_xdr_enc_create(req, xdr, args);
+ }
+@@ -2217,9 +2224,10 @@ static void nfs4_xdr_enc_symlink(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode GETATTR request
+ */
+-static void nfs4_xdr_enc_getattr(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_getattr_arg *args)
++static void nfs4_xdr_enc_getattr(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs4_getattr_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2234,9 +2242,10 @@ static void nfs4_xdr_enc_getattr(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode a CLOSE request
+ */
+-static void nfs4_xdr_enc_close(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_closeargs *args)
++static void nfs4_xdr_enc_close(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs_closeargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2252,9 +2261,10 @@ static void nfs4_xdr_enc_close(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode an OPEN request
+ */
+-static void nfs4_xdr_enc_open(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_openargs *args)
++static void nfs4_xdr_enc_open(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs_openargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2273,10 +2283,11 @@ static void nfs4_xdr_enc_open(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode an OPEN_CONFIRM request
+ */
+-static void nfs4_xdr_enc_open_confirm(struct rpc_rqst *req,
++static void nfs4_xdr_enc_open_confirm(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_open_confirmargs *args)
++ void *_args)
+ {
++ struct nfs_open_confirmargs *args = _args;
+ struct compound_hdr hdr = {
+ .nops = 0,
+ };
+@@ -2290,10 +2301,11 @@ static void nfs4_xdr_enc_open_confirm(struct rpc_rqst *req,
+ /*
+ * Encode an OPEN request with no attributes.
+ */
+-static void nfs4_xdr_enc_open_noattr(struct rpc_rqst *req,
++static void nfs4_xdr_enc_open_noattr(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_openargs *args)
++ void *_args)
+ {
++ struct nfs_openargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2311,10 +2323,11 @@ static void nfs4_xdr_enc_open_noattr(struct rpc_rqst *req,
+ /*
+ * Encode an OPEN_DOWNGRADE request
+ */
+-static void nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req,
++static void nfs4_xdr_enc_open_downgrade(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_closeargs *args)
++ void *_args)
+ {
++ struct nfs_closeargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2330,9 +2343,10 @@ static void nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req,
+ /*
+ * Encode a LOCK request
+ */
+-static void nfs4_xdr_enc_lock(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_lock_args *args)
++static void nfs4_xdr_enc_lock(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs_lock_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2347,9 +2361,10 @@ static void nfs4_xdr_enc_lock(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode a LOCKT request
+ */
+-static void nfs4_xdr_enc_lockt(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_lockt_args *args)
++static void nfs4_xdr_enc_lockt(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs_lockt_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2364,9 +2379,10 @@ static void nfs4_xdr_enc_lockt(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode a LOCKU request
+ */
+-static void nfs4_xdr_enc_locku(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_locku_args *args)
++static void nfs4_xdr_enc_locku(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs_locku_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2378,10 +2394,11 @@ static void nfs4_xdr_enc_locku(struct rpc_rqst *req, struct xdr_stream *xdr,
+ encode_nops(&hdr);
+ }
+
+-static void nfs4_xdr_enc_release_lockowner(struct rpc_rqst *req,
++static void nfs4_xdr_enc_release_lockowner(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_release_lockowner_args *args)
++ void *_args)
+ {
++ struct nfs_release_lockowner_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = 0,
+ };
+@@ -2394,9 +2411,11 @@ static void nfs4_xdr_enc_release_lockowner(struct rpc_rqst *req,
+ /*
+ * Encode a READLINK request
+ */
+-static void nfs4_xdr_enc_readlink(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_readlink *args)
++static void nfs4_xdr_enc_readlink(void *_req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ const struct nfs4_readlink *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2414,9 +2433,11 @@ static void nfs4_xdr_enc_readlink(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode a READDIR request
+ */
+-static void nfs4_xdr_enc_readdir(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_readdir_arg *args)
++static void nfs4_xdr_enc_readdir(void *_req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ const struct nfs4_readdir_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2437,9 +2458,11 @@ static void nfs4_xdr_enc_readdir(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode a READ request
+ */
+-static void nfs4_xdr_enc_read(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_pgio_args *args)
++static void nfs4_xdr_enc_read(void *_req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs_pgio_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2458,9 +2481,11 @@ static void nfs4_xdr_enc_read(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode an SETATTR request
+ */
+-static void nfs4_xdr_enc_setattr(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_setattrargs *args)
++static void nfs4_xdr_enc_setattr(void *_req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs_setattrargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2476,9 +2501,11 @@ static void nfs4_xdr_enc_setattr(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode a GETACL request
+ */
+-static void nfs4_xdr_enc_getacl(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_getaclargs *args)
++static void nfs4_xdr_enc_getacl(void *_req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs_getaclargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2499,9 +2526,11 @@ static void nfs4_xdr_enc_getacl(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Encode a WRITE request
+ */
+-static void nfs4_xdr_enc_write(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_pgio_args *args)
++static void nfs4_xdr_enc_write(void *_req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs_pgio_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2519,9 +2548,10 @@ static void nfs4_xdr_enc_write(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * a COMMIT request
+ */
+-static void nfs4_xdr_enc_commit(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_commitargs *args)
++static void nfs4_xdr_enc_commit(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs_commitargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2536,9 +2566,10 @@ static void nfs4_xdr_enc_commit(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * FSINFO request
+ */
+-static void nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs4_fsinfo_arg *args)
++static void nfs4_xdr_enc_fsinfo(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs4_fsinfo_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2553,9 +2584,10 @@ static void nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * a PATHCONF request
+ */
+-static void nfs4_xdr_enc_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_pathconf_arg *args)
++static void nfs4_xdr_enc_pathconf(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs4_pathconf_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2571,9 +2603,10 @@ static void nfs4_xdr_enc_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * a STATFS request
+ */
+-static void nfs4_xdr_enc_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfs4_statfs_arg *args)
++static void nfs4_xdr_enc_statfs(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ const struct nfs4_statfs_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2589,10 +2622,11 @@ static void nfs4_xdr_enc_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * GETATTR_BITMAP request
+ */
+-static void nfs4_xdr_enc_server_caps(struct rpc_rqst *req,
++static void nfs4_xdr_enc_server_caps(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_server_caps_arg *args)
++ void *_args)
+ {
++ struct nfs4_server_caps_arg *args = _args;
+ const u32 *bitmask = args->bitmask;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+@@ -2608,9 +2642,10 @@ static void nfs4_xdr_enc_server_caps(struct rpc_rqst *req,
+ /*
+ * a RENEW request
+ */
+-static void nfs4_xdr_enc_renew(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_client *clp)
++static void nfs4_xdr_enc_renew(void *req, struct xdr_stream *xdr,
++ void *_clp)
+ {
++ struct nfs_client *clp = _clp;
+ struct compound_hdr hdr = {
+ .nops = 0,
+ };
+@@ -2623,9 +2658,9 @@ static void nfs4_xdr_enc_renew(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * a SETCLIENTID request
+ */
+-static void nfs4_xdr_enc_setclientid(struct rpc_rqst *req,
++static void nfs4_xdr_enc_setclientid(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_setclientid *sc)
++ void *sc)
+ {
+ struct compound_hdr hdr = {
+ .nops = 0,
+@@ -2639,9 +2674,9 @@ static void nfs4_xdr_enc_setclientid(struct rpc_rqst *req,
+ /*
+ * a SETCLIENTID_CONFIRM request
+ */
+-static void nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req,
++static void nfs4_xdr_enc_setclientid_confirm(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_setclientid_res *arg)
++ void *arg)
+ {
+ struct compound_hdr hdr = {
+ .nops = 0,
+@@ -2655,10 +2690,11 @@ static void nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req,
+ /*
+ * DELEGRETURN request
+ */
+-static void nfs4_xdr_enc_delegreturn(struct rpc_rqst *req,
++static void nfs4_xdr_enc_delegreturn(void *req,
+ struct xdr_stream *xdr,
+- const struct nfs4_delegreturnargs *args)
++ void *_args)
+ {
++ const struct nfs4_delegreturnargs *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2674,10 +2710,12 @@ static void nfs4_xdr_enc_delegreturn(struct rpc_rqst *req,
+ /*
+ * Encode FS_LOCATIONS request
+ */
+-static void nfs4_xdr_enc_fs_locations(struct rpc_rqst *req,
++static void nfs4_xdr_enc_fs_locations(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs4_fs_locations_arg *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs4_fs_locations_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2707,10 +2745,11 @@ static void nfs4_xdr_enc_fs_locations(struct rpc_rqst *req,
+ /*
+ * Encode SECINFO request
+ */
+-static void nfs4_xdr_enc_secinfo(struct rpc_rqst *req,
++static void nfs4_xdr_enc_secinfo(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_secinfo_arg *args)
++ void *_args)
+ {
++ struct nfs4_secinfo_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2725,10 +2764,11 @@ static void nfs4_xdr_enc_secinfo(struct rpc_rqst *req,
+ /*
+ * Encode FSID_PRESENT request
+ */
+-static void nfs4_xdr_enc_fsid_present(struct rpc_rqst *req,
++static void nfs4_xdr_enc_fsid_present(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_fsid_present_arg *args)
++ void *_args)
+ {
++ struct nfs4_fsid_present_arg *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2746,10 +2786,11 @@ static void nfs4_xdr_enc_fsid_present(struct rpc_rqst *req,
+ /*
+ * BIND_CONN_TO_SESSION request
+ */
+-static void nfs4_xdr_enc_bind_conn_to_session(struct rpc_rqst *req,
++static void nfs4_xdr_enc_bind_conn_to_session(void *req,
+ struct xdr_stream *xdr,
+- struct nfs41_bind_conn_to_session_args *args)
++ void *_args)
+ {
++ struct nfs41_bind_conn_to_session_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = args->client->cl_mvops->minor_version,
+ };
+@@ -2762,10 +2803,11 @@ static void nfs4_xdr_enc_bind_conn_to_session(struct rpc_rqst *req,
+ /*
+ * EXCHANGE_ID request
+ */
+-static void nfs4_xdr_enc_exchange_id(struct rpc_rqst *req,
++static void nfs4_xdr_enc_exchange_id(void *req,
+ struct xdr_stream *xdr,
+- struct nfs41_exchange_id_args *args)
++ void *_args)
+ {
++ struct nfs41_exchange_id_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = args->client->cl_mvops->minor_version,
+ };
+@@ -2778,10 +2820,11 @@ static void nfs4_xdr_enc_exchange_id(struct rpc_rqst *req,
+ /*
+ * a CREATE_SESSION request
+ */
+-static void nfs4_xdr_enc_create_session(struct rpc_rqst *req,
++static void nfs4_xdr_enc_create_session(void *req,
+ struct xdr_stream *xdr,
+- struct nfs41_create_session_args *args)
++ void *_args)
+ {
++ struct nfs41_create_session_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = args->client->cl_mvops->minor_version,
+ };
+@@ -2794,10 +2837,11 @@ static void nfs4_xdr_enc_create_session(struct rpc_rqst *req,
+ /*
+ * a DESTROY_SESSION request
+ */
+-static void nfs4_xdr_enc_destroy_session(struct rpc_rqst *req,
++static void nfs4_xdr_enc_destroy_session(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_session *session)
++ void *_session)
+ {
++ struct nfs4_session *session = _session;
+ struct compound_hdr hdr = {
+ .minorversion = session->clp->cl_mvops->minor_version,
+ };
+@@ -2810,10 +2854,11 @@ static void nfs4_xdr_enc_destroy_session(struct rpc_rqst *req,
+ /*
+ * a DESTROY_CLIENTID request
+ */
+-static void nfs4_xdr_enc_destroy_clientid(struct rpc_rqst *req,
++static void nfs4_xdr_enc_destroy_clientid(void *req,
+ struct xdr_stream *xdr,
+- struct nfs_client *clp)
++ void *_clp)
+ {
++ struct nfs_client *clp = _clp;
+ struct compound_hdr hdr = {
+ .minorversion = clp->cl_mvops->minor_version,
+ };
+@@ -2826,8 +2871,8 @@ static void nfs4_xdr_enc_destroy_clientid(struct rpc_rqst *req,
+ /*
+ * a SEQUENCE request
+ */
+-static void nfs4_xdr_enc_sequence(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs4_sequence_args *args)
++static void nfs4_xdr_enc_sequence(void *req, struct xdr_stream *xdr,
++ void *args)
+ {
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(args),
+@@ -2841,10 +2886,11 @@ static void nfs4_xdr_enc_sequence(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * a GET_LEASE_TIME request
+ */
+-static void nfs4_xdr_enc_get_lease_time(struct rpc_rqst *req,
++static void nfs4_xdr_enc_get_lease_time(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_get_lease_time_args *args)
++ void *_args)
+ {
++ struct nfs4_get_lease_time_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->la_seq_args),
+ };
+@@ -2860,10 +2906,11 @@ static void nfs4_xdr_enc_get_lease_time(struct rpc_rqst *req,
+ /*
+ * a RECLAIM_COMPLETE request
+ */
+-static void nfs4_xdr_enc_reclaim_complete(struct rpc_rqst *req,
++static void nfs4_xdr_enc_reclaim_complete(void *req,
+ struct xdr_stream *xdr,
+- struct nfs41_reclaim_complete_args *args)
++ void *_args)
+ {
++ struct nfs41_reclaim_complete_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args)
+ };
+@@ -2877,10 +2924,12 @@ static void nfs4_xdr_enc_reclaim_complete(struct rpc_rqst *req,
+ /*
+ * Encode GETDEVICEINFO request
+ */
+-static void nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req,
++static void nfs4_xdr_enc_getdeviceinfo(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs4_getdeviceinfo_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs4_getdeviceinfo_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2901,10 +2950,12 @@ static void nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req,
+ /*
+ * Encode LAYOUTGET request
+ */
+-static void nfs4_xdr_enc_layoutget(struct rpc_rqst *req,
++static void nfs4_xdr_enc_layoutget(void *_req,
+ struct xdr_stream *xdr,
+- struct nfs4_layoutget_args *args)
++ void *_args)
+ {
++ struct rpc_rqst *req = _req;
++ struct nfs4_layoutget_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2923,10 +2974,11 @@ static void nfs4_xdr_enc_layoutget(struct rpc_rqst *req,
+ /*
+ * Encode LAYOUTCOMMIT request
+ */
+-static void nfs4_xdr_enc_layoutcommit(struct rpc_rqst *req,
++static void nfs4_xdr_enc_layoutcommit(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_layoutcommit_args *args)
++ void *_args)
+ {
++ struct nfs4_layoutcommit_args *args = _args;
+ struct nfs4_layoutcommit_data *data =
+ container_of(args, struct nfs4_layoutcommit_data, args);
+ struct compound_hdr hdr = {
+@@ -2944,10 +2996,11 @@ static void nfs4_xdr_enc_layoutcommit(struct rpc_rqst *req,
+ /*
+ * Encode LAYOUTRETURN request
+ */
+-static void nfs4_xdr_enc_layoutreturn(struct rpc_rqst *req,
++static void nfs4_xdr_enc_layoutreturn(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_layoutreturn_args *args)
++ void *_args)
+ {
++ struct nfs4_layoutreturn_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2962,10 +3015,11 @@ static void nfs4_xdr_enc_layoutreturn(struct rpc_rqst *req,
+ /*
+ * Encode SECINFO_NO_NAME request
+ */
+-static int nfs4_xdr_enc_secinfo_no_name(struct rpc_rqst *req,
++static void nfs4_xdr_enc_secinfo_no_name(void *req,
+ struct xdr_stream *xdr,
+- struct nfs41_secinfo_no_name_args *args)
++ void *_args)
+ {
++ struct nfs41_secinfo_no_name_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2975,16 +3029,16 @@ static int nfs4_xdr_enc_secinfo_no_name(struct rpc_rqst *req,
+ encode_putrootfh(xdr, &hdr);
+ encode_secinfo_no_name(xdr, args, &hdr);
+ encode_nops(&hdr);
+- return 0;
+ }
+
+ /*
+ * Encode TEST_STATEID request
+ */
+-static void nfs4_xdr_enc_test_stateid(struct rpc_rqst *req,
++static void nfs4_xdr_enc_test_stateid(void *req,
+ struct xdr_stream *xdr,
+- struct nfs41_test_stateid_args *args)
++ void *_args)
+ {
++ struct nfs41_test_stateid_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -2998,10 +3052,11 @@ static void nfs4_xdr_enc_test_stateid(struct rpc_rqst *req,
+ /*
+ * Encode FREE_STATEID request
+ */
+-static void nfs4_xdr_enc_free_stateid(struct rpc_rqst *req,
++static void nfs4_xdr_enc_free_stateid(void *req,
+ struct xdr_stream *xdr,
+- struct nfs41_free_stateid_args *args)
++ void *_args)
+ {
++ struct nfs41_free_stateid_args *args = _args;
+ struct compound_hdr hdr = {
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
+ };
+@@ -6067,10 +6122,11 @@ static int decode_free_stateid(struct xdr_stream *xdr,
+ /*
+ * Decode OPEN_DOWNGRADE response
+ */
+-static int nfs4_xdr_dec_open_downgrade(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_open_downgrade(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs_closeres *res)
++ void *_res)
+ {
++ struct nfs_closeres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6094,9 +6150,10 @@ out:
+ /*
+ * Decode ACCESS response
+ */
+-static int nfs4_xdr_dec_access(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs4_accessres *res)
++static int nfs4_xdr_dec_access(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_accessres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6120,9 +6177,10 @@ out:
+ /*
+ * Decode LOOKUP response
+ */
+-static int nfs4_xdr_dec_lookup(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs4_lookup_res *res)
++static int nfs4_xdr_dec_lookup(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_lookup_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6149,10 +6207,11 @@ out:
+ /*
+ * Decode LOOKUP_ROOT response
+ */
+-static int nfs4_xdr_dec_lookup_root(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_lookup_root(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_lookup_res *res)
++ void *_res)
+ {
++ struct nfs4_lookup_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6176,9 +6235,10 @@ out:
+ /*
+ * Decode REMOVE response
+ */
+-static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_removeres *res)
++static int nfs4_xdr_dec_remove(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_removeres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6199,9 +6259,10 @@ out:
+ /*
+ * Decode RENAME response
+ */
+-static int nfs4_xdr_dec_rename(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_renameres *res)
++static int nfs4_xdr_dec_rename(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_renameres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6228,9 +6289,10 @@ out:
+ /*
+ * Decode LINK response
+ */
+-static int nfs4_xdr_dec_link(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs4_link_res *res)
++static int nfs4_xdr_dec_link(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_link_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6267,9 +6329,10 @@ out:
+ /*
+ * Decode CREATE response
+ */
+-static int nfs4_xdr_dec_create(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs4_create_res *res)
++static int nfs4_xdr_dec_create(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_create_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6296,8 +6359,8 @@ out:
+ /*
+ * Decode SYMLINK response
+ */
+-static int nfs4_xdr_dec_symlink(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs4_create_res *res)
++static int nfs4_xdr_dec_symlink(void *rqstp, struct xdr_stream *xdr,
++ void *res)
+ {
+ 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,
+ /*
+ * Decode GETATTR response
+ */
+-static int nfs4_xdr_dec_getattr(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs4_getattr_res *res)
++static int nfs4_xdr_dec_getattr(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_getattr_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6328,9 +6392,10 @@ out:
+ /*
+ * Encode an SETACL request
+ */
+-static void nfs4_xdr_enc_setacl(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs_setaclargs *args)
++static void nfs4_xdr_enc_setacl(void *req, struct xdr_stream *xdr,
++ void *_args)
+ {
++ struct nfs_setaclargs *args = _args;
+ 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,
+ * Decode SETACL response
+ */
+ static int
+-nfs4_xdr_dec_setacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_setaclres *res)
++nfs4_xdr_dec_setacl(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_setaclres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6370,9 +6436,10 @@ out:
+ * Decode GETACL response
+ */
+ static int
+-nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_getaclres *res)
++nfs4_xdr_dec_getacl(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_getaclres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6398,9 +6465,10 @@ out:
+ /*
+ * Decode CLOSE response
+ */
+-static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_closeres *res)
++static int nfs4_xdr_dec_close(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_closeres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6430,9 +6498,10 @@ out:
+ /*
+ * Decode OPEN response
+ */
+-static int nfs4_xdr_dec_open(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_openres *res)
++static int nfs4_xdr_dec_open(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_openres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6461,9 +6530,9 @@ out:
+ /*
+ * Decode OPEN_CONFIRM response
+ */
+-static int nfs4_xdr_dec_open_confirm(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_open_confirm(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs_open_confirmres *res)
++ void *res)
+ {
+ struct compound_hdr hdr;
+ int status;
+@@ -6482,10 +6551,11 @@ out:
+ /*
+ * Decode OPEN response
+ */
+-static int nfs4_xdr_dec_open_noattr(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_open_noattr(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs_openres *res)
++ void *_res)
+ {
++ struct nfs_openres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6511,10 +6581,11 @@ out:
+ /*
+ * Decode SETATTR response
+ */
+-static int nfs4_xdr_dec_setattr(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_setattr(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs_setattrres *res)
++ void *_res)
+ {
++ struct nfs_setattrres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6538,9 +6609,10 @@ out:
+ /*
+ * Decode LOCK response
+ */
+-static int nfs4_xdr_dec_lock(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_lock_res *res)
++static int nfs4_xdr_dec_lock(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_lock_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6561,9 +6633,10 @@ out:
+ /*
+ * Decode LOCKT response
+ */
+-static int nfs4_xdr_dec_lockt(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_lockt_res *res)
++static int nfs4_xdr_dec_lockt(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_lockt_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6584,9 +6657,10 @@ out:
+ /*
+ * Decode LOCKU response
+ */
+-static int nfs4_xdr_dec_locku(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_locku_res *res)
++static int nfs4_xdr_dec_locku(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_locku_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6604,7 +6678,7 @@ out:
+ return status;
+ }
+
+-static int nfs4_xdr_dec_release_lockowner(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_release_lockowner(void *rqstp,
+ 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,
+ /*
+ * Decode READLINK response
+ */
+-static int nfs4_xdr_dec_readlink(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_readlink(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_readlink_res *res)
++ void *_res)
+ {
++ struct nfs4_readlink_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6643,9 +6718,10 @@ out:
+ /*
+ * Decode READDIR response
+ */
+-static int nfs4_xdr_dec_readdir(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs4_readdir_res *res)
++static int nfs4_xdr_dec_readdir(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_readdir_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6666,9 +6742,10 @@ out:
+ /*
+ * Decode Read response
+ */
+-static int nfs4_xdr_dec_read(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_pgio_res *res)
++static int nfs4_xdr_dec_read(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_pgio_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6692,9 +6769,10 @@ out:
+ /*
+ * Decode WRITE response
+ */
+-static int nfs4_xdr_dec_write(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_pgio_res *res)
++static int nfs4_xdr_dec_write(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_pgio_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6722,9 +6800,10 @@ out:
+ /*
+ * Decode COMMIT response
+ */
+-static int nfs4_xdr_dec_commit(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+- struct nfs_commitres *res)
++static int nfs4_xdr_dec_commit(void *rqstp, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs_commitres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6746,9 +6825,10 @@ out:
+ /*
+ * Decode FSINFO response
+ */
+-static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs4_fsinfo_res *res)
++static int nfs4_xdr_dec_fsinfo(void *req, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_fsinfo_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6765,9 +6845,10 @@ static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Decode PATHCONF response
+ */
+-static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs4_pathconf_res *res)
++static int nfs4_xdr_dec_pathconf(void *req, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_pathconf_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6784,9 +6865,10 @@ static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Decode STATFS response
+ */
+-static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct nfs4_statfs_res *res)
++static int nfs4_xdr_dec_statfs(void *req, struct xdr_stream *xdr,
++ void *_res)
+ {
++ struct nfs4_statfs_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6803,10 +6885,11 @@ static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * Decode GETATTR_BITMAP response
+ */
+-static int nfs4_xdr_dec_server_caps(struct rpc_rqst *req,
++static int nfs4_xdr_dec_server_caps(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_server_caps_res *res)
++ void *_res)
+ {
++ struct nfs4_server_caps_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6827,7 +6910,7 @@ out:
+ /*
+ * Decode RENEW response
+ */
+-static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
++static int nfs4_xdr_dec_renew(void *rqstp, struct xdr_stream *xdr,
+ void *__unused)
+ {
+ struct compound_hdr hdr;
+@@ -6842,9 +6925,9 @@ static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
+ /*
+ * Decode SETCLIENTID response
+ */
+-static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req,
++static int nfs4_xdr_dec_setclientid(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_setclientid_res *res)
++ void *res)
+ {
+ struct compound_hdr hdr;
+ int status;
+@@ -6858,8 +6941,9 @@ static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req,
+ /*
+ * Decode SETCLIENTID_CONFIRM response
+ */
+-static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req,
+- struct xdr_stream *xdr)
++static int nfs4_xdr_dec_setclientid_confirm(void *req,
++ struct xdr_stream *xdr,
++ void *res)
+ {
+ struct compound_hdr hdr;
+ int status;
+@@ -6873,10 +6957,11 @@ static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req,
+ /*
+ * Decode DELEGRETURN response
+ */
+-static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_delegreturn(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_delegreturnres *res)
++ void *_res)
+ {
++ struct nfs4_delegreturnres *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6900,10 +6985,11 @@ out:
+ /*
+ * Decode FS_LOCATIONS response
+ */
+-static int nfs4_xdr_dec_fs_locations(struct rpc_rqst *req,
++static int nfs4_xdr_dec_fs_locations(void *req,
+ struct xdr_stream *xdr,
+- struct nfs4_fs_locations_res *res)
++ void *_res)
+ {
++ struct nfs4_fs_locations_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6943,10 +7029,11 @@ out:
+ /*
+ * Decode SECINFO response
+ */
+-static int nfs4_xdr_dec_secinfo(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_secinfo(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_secinfo_res *res)
++ void *_res)
+ {
++ struct nfs4_secinfo_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6967,10 +7054,11 @@ out:
+ /*
+ * Decode FSID_PRESENT response
+ */
+-static int nfs4_xdr_dec_fsid_present(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_fsid_present(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_fsid_present_res *res)
++ void *_res)
+ {
++ struct nfs4_fsid_present_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -6996,7 +7084,7 @@ out:
+ /*
+ * Decode BIND_CONN_TO_SESSION response
+ */
+-static int nfs4_xdr_dec_bind_conn_to_session(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_bind_conn_to_session(void *rqstp,
+ struct xdr_stream *xdr,
+ void *res)
+ {
+@@ -7012,7 +7100,7 @@ static int nfs4_xdr_dec_bind_conn_to_session(struct rpc_rqst *rqstp,
+ /*
+ * Decode EXCHANGE_ID response
+ */
+-static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_exchange_id(void *rqstp,
+ struct xdr_stream *xdr,
+ void *res)
+ {
+@@ -7028,9 +7116,9 @@ static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp,
+ /*
+ * Decode CREATE_SESSION response
+ */
+-static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_create_session(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs41_create_session_res *res)
++ void *res)
+ {
+ struct compound_hdr hdr;
+ int status;
+@@ -7044,7 +7132,7 @@ static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp,
+ /*
+ * Decode DESTROY_SESSION response
+ */
+-static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_destroy_session(void *rqstp,
+ struct xdr_stream *xdr,
+ void *res)
+ {
+@@ -7060,7 +7148,7 @@ static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp,
+ /*
+ * Decode DESTROY_CLIENTID response
+ */
+-static int nfs4_xdr_dec_destroy_clientid(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_destroy_clientid(void *rqstp,
+ struct xdr_stream *xdr,
+ void *res)
+ {
+@@ -7076,9 +7164,9 @@ static int nfs4_xdr_dec_destroy_clientid(struct rpc_rqst *rqstp,
+ /*
+ * Decode SEQUENCE response
+ */
+-static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_sequence(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_sequence_res *res)
++ void *res)
+ {
+ struct compound_hdr hdr;
+ int status;
+@@ -7092,10 +7180,11 @@ static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp,
+ /*
+ * Decode GET_LEASE_TIME response
+ */
+-static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_get_lease_time(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_get_lease_time_res *res)
++ void *_res)
+ {
++ struct nfs4_get_lease_time_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7112,10 +7201,11 @@ static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp,
+ /*
+ * Decode RECLAIM_COMPLETE response
+ */
+-static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_reclaim_complete(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs41_reclaim_complete_res *res)
++ void *_res)
+ {
++ struct nfs41_reclaim_complete_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7130,10 +7220,11 @@ static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp,
+ /*
+ * Decode GETDEVINFO response
+ */
+-static int nfs4_xdr_dec_getdeviceinfo(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_getdeviceinfo(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_getdeviceinfo_res *res)
++ void *_res)
+ {
++ struct nfs4_getdeviceinfo_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7151,10 +7242,11 @@ out:
+ /*
+ * Decode LAYOUTGET response
+ */
+-static int nfs4_xdr_dec_layoutget(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_layoutget(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_layoutget_res *res)
++ void *_res)
+ {
++ struct nfs4_layoutget_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7175,10 +7267,11 @@ out:
+ /*
+ * Decode LAYOUTRETURN response
+ */
+-static int nfs4_xdr_dec_layoutreturn(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_layoutreturn(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_layoutreturn_res *res)
++ void *_res)
+ {
++ struct nfs4_layoutreturn_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7199,10 +7292,11 @@ out:
+ /*
+ * Decode LAYOUTCOMMIT response
+ */
+-static int nfs4_xdr_dec_layoutcommit(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_layoutcommit(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_layoutcommit_res *res)
++ void *_res)
+ {
++ struct nfs4_layoutcommit_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7226,10 +7320,11 @@ out:
+ /*
+ * Decode SECINFO_NO_NAME response
+ */
+-static int nfs4_xdr_dec_secinfo_no_name(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_secinfo_no_name(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs4_secinfo_res *res)
++ void *_res)
+ {
++ struct nfs4_secinfo_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7250,10 +7345,11 @@ out:
+ /*
+ * Decode TEST_STATEID response
+ */
+-static int nfs4_xdr_dec_test_stateid(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_test_stateid(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs41_test_stateid_res *res)
++ void *_res)
+ {
++ struct nfs41_test_stateid_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7271,10 +7367,11 @@ out:
+ /*
+ * Decode FREE_STATEID response
+ */
+-static int nfs4_xdr_dec_free_stateid(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_free_stateid(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfs41_free_stateid_res *res)
++ void *_res)
+ {
++ struct nfs41_free_stateid_res *res = _res;
+ struct compound_hdr hdr;
+ int status;
+
+@@ -7439,8 +7536,8 @@ nfs4_stat_to_errno(int stat)
+ #define PROC(proc, argtype, restype) \
+ [NFSPROC4_CLNT_##proc] = { \
+ .p_proc = NFSPROC4_COMPOUND, \
+- .p_encode = (kxdreproc_t)nfs4_xdr_##argtype, \
+- .p_decode = (kxdrdproc_t)nfs4_xdr_##restype, \
++ .p_encode = nfs4_xdr_##argtype, \
++ .p_decode = nfs4_xdr_##restype, \
+ .p_arglen = NFS4_##argtype##_sz, \
+ .p_replen = NFS4_##restype##_sz, \
+ .p_statidx = NFSPROC4_CLNT_##proc, \
+diff --git a/fs/nfs/read.c b/fs/nfs/read.c
+index eb31e23..e3d68b7 100644
+--- a/fs/nfs/read.c
++++ b/fs/nfs/read.c
+@@ -346,7 +346,7 @@ struct nfs_readdesc {
+ };
+
+ static int
+-readpage_async_filler(void *data, struct page *page)
++readpage_async_filler(struct file *data, struct page *page)
+ {
+ struct nfs_readdesc *desc = (struct nfs_readdesc *)data;
+ struct nfs_page *new;
+diff --git a/fs/nfs/symlink.c b/fs/nfs/symlink.c
+index 4fe3eea..8922b2b 100644
+--- a/fs/nfs/symlink.c
++++ b/fs/nfs/symlink.c
+@@ -25,9 +25,10 @@
+ * and straight-forward than readdir caching.
+ */
+
+-static int nfs_symlink_filler(struct inode *inode, struct page *page)
++static int nfs_symlink_filler(struct file *_inode, struct page *page)
+ {
+ int error;
++ struct inode *inode = (struct inode *)_inode;
+
+ error = NFS_PROTO(inode)->readlink(inode, page, 0, PAGE_SIZE);
+ if (error < 0)
+@@ -64,8 +65,7 @@ static const char *nfs_get_link(struct dentry *dentry,
+ err = ERR_PTR(nfs_revalidate_mapping(inode, inode->i_mapping));
+ if (err)
+ return err;
+- page = read_cache_page(&inode->i_data, 0,
+- (filler_t *)nfs_symlink_filler, inode);
++ page = read_cache_page(&inode->i_data, 0, nfs_symlink_filler, inode);
+ if (IS_ERR(page))
+ return ERR_CAST(page);
+ }
+diff --git a/fs/nfsd/current_stateid.h b/fs/nfsd/current_stateid.h
+index 4123551..813b403 100644
+--- a/fs/nfsd/current_stateid.h
++++ b/fs/nfsd/current_stateid.h
+@@ -8,21 +8,21 @@ extern void clear_current_stateid(struct nfsd4_compound_state *cstate);
+ /*
+ * functions to set current state id
+ */
+-extern void nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *);
+-extern void nfsd4_set_openstateid(struct nfsd4_compound_state *, struct nfsd4_open *);
+-extern void nfsd4_set_lockstateid(struct nfsd4_compound_state *, struct nfsd4_lock *);
+-extern void nfsd4_set_closestateid(struct nfsd4_compound_state *, struct nfsd4_close *);
++extern void nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, void *);
++extern void nfsd4_set_openstateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_set_lockstateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_set_closestateid(struct nfsd4_compound_state *, void *);
+
+ /*
+ * functions to consume current state id
+ */
+-extern void nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *);
+-extern void nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *, struct nfsd4_delegreturn *);
+-extern void nfsd4_get_freestateid(struct nfsd4_compound_state *, struct nfsd4_free_stateid *);
+-extern void nfsd4_get_setattrstateid(struct nfsd4_compound_state *, struct nfsd4_setattr *);
+-extern void nfsd4_get_closestateid(struct nfsd4_compound_state *, struct nfsd4_close *);
+-extern void nfsd4_get_lockustateid(struct nfsd4_compound_state *, struct nfsd4_locku *);
+-extern void nfsd4_get_readstateid(struct nfsd4_compound_state *, struct nfsd4_read *);
+-extern void nfsd4_get_writestateid(struct nfsd4_compound_state *, struct nfsd4_write *);
++extern void nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, void *);
++extern void nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_get_freestateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_get_setattrstateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_get_closestateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_get_lockustateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_get_readstateid(struct nfsd4_compound_state *, void *);
++extern void nfsd4_get_writestateid(struct nfsd4_compound_state *, void *);
+
+ #endif /* _NFSD4_CURRENT_STATE_H */
+diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c
+index 1580ea6..9c7f44f 100644
+--- a/fs/nfsd/nfs2acl.c
++++ b/fs/nfsd/nfs2acl.c
+@@ -27,9 +27,10 @@ nfsacld_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)
+ /*
+ * Get the Access and/or Default ACL of a file.
+ */
+-static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp,
+- struct nfsd3_getaclargs *argp, struct nfsd3_getaclres *resp)
++static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_getaclargs *argp = _argp;
++ struct nfsd3_getaclres *resp = _resp;
+ struct posix_acl *acl;
+ struct inode *inode;
+ svc_fh *fh;
+@@ -87,10 +88,10 @@ fail:
+ /*
+ * Set the Access and/or Default ACL of a file.
+ */
+-static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp,
+- struct nfsd3_setaclargs *argp,
+- struct nfsd_attrstat *resp)
++static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_setaclargs *argp = _argp;
++ struct nfsd_attrstat *resp = _resp;
+ struct inode *inode;
+ svc_fh *fh;
+ __be32 nfserr = 0;
+@@ -141,9 +142,10 @@ out_errno:
+ /*
+ * Check file attributes
+ */
+-static __be32 nfsacld_proc_getattr(struct svc_rqst * rqstp,
+- struct nfsd_fhandle *argp, struct nfsd_attrstat *resp)
++static __be32 nfsacld_proc_getattr(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++ struct nfsd_attrstat *resp = _resp;
+ __be32 nfserr;
+ dprintk("nfsd: GETATTR %s\n", SVCFH_fmt(&argp->fh));
+
+@@ -158,9 +160,10 @@ static __be32 nfsacld_proc_getattr(struct svc_rqst * rqstp,
+ /*
+ * Check file access
+ */
+-static __be32 nfsacld_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessargs *argp,
+- struct nfsd3_accessres *resp)
++static __be32 nfsacld_proc_access(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_accessargs *argp = _argp;
++ struct nfsd3_accessres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: ACCESS(2acl) %s 0x%x\n",
+@@ -179,9 +182,10 @@ static __be32 nfsacld_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessarg
+ /*
+ * XDR decode functions
+ */
+-static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_getaclargs *argp)
++static int nfsaclsvc_decode_getaclargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ struct nfsd3_getaclargs *argp = _argp;
++
+ p = nfs2svc_decode_fh(p, &argp->fh);
+ if (!p)
+ return 0;
+@@ -191,9 +195,10 @@ static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+
+-static int nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_setaclargs *argp)
++static int nfsaclsvc_decode_setaclargs(void *_rqstp, __be32 *p, void *_argp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_setaclargs *argp = _argp;
+ struct kvec *head = rqstp->rq_arg.head;
+ unsigned int base;
+ int n;
+@@ -217,18 +222,20 @@ static int nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p,
+ return (n > 0);
+ }
+
+-static int nfsaclsvc_decode_fhandleargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_fhandle *argp)
++static int nfsaclsvc_decode_fhandleargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++
+ p = nfs2svc_decode_fh(p, &argp->fh);
+ if (!p)
+ return 0;
+ return xdr_argsize_check(rqstp, p);
+ }
+
+-static int nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_accessargs *argp)
++static int nfsaclsvc_decode_accessargs(void *rqstp, __be32 *p, void *_argp)
+ {
++ struct nfsd3_accessargs *argp = _argp;
++
+ p = nfs2svc_decode_fh(p, &argp->fh);
+ if (!p)
+ return 0;
+@@ -245,15 +252,16 @@ static int nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p,
+ * There must be an encoding function for void results so svc_process
+ * will work properly.
+ */
+-static int nfsaclsvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++static int nfsaclsvc_encode_voidres(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ /* GETACL */
+-static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_getaclres *resp)
++static int nfsaclsvc_encode_getaclres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_getaclres *resp = _resp;
+ struct dentry *dentry = resp->fh.fh_dentry;
+ struct inode *inode;
+ struct kvec *head = rqstp->rq_res.head;
+@@ -296,17 +304,19 @@ static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
+ return (n > 0);
+ }
+
+-static int nfsaclsvc_encode_attrstatres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_attrstat *resp)
++static int nfsaclsvc_encode_attrstatres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd_attrstat *resp = _resp;
++
+ p = nfs2svc_encode_fattr(rqstp, p, &resp->fh, &resp->stat);
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ /* ACCESS */
+-static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_accessres *resp)
++static int nfsaclsvc_encode_accessres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_accessres *resp = _resp;
++
+ p = nfs2svc_encode_fattr(rqstp, p, &resp->fh, &resp->stat);
+ *p++ = htonl(resp->access);
+ return xdr_ressize_check(rqstp, p);
+@@ -315,27 +325,30 @@ static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
+ /*
+ * XDR release functions
+ */
+-static int nfsaclsvc_release_getacl(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_getaclres *resp)
++static int nfsaclsvc_release_getacl(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_getaclres *resp = _resp;
++
+ fh_put(&resp->fh);
+ posix_acl_release(resp->acl_access);
+ posix_acl_release(resp->acl_default);
+ return 1;
+ }
+
+-static int nfsaclsvc_release_attrstat(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_attrstat *resp)
++static int nfsaclsvc_release_attrstat(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd_attrstat *resp = _resp;
++
+ fh_put(&resp->fh);
+ return 1;
+ }
+
+-static int nfsaclsvc_release_access(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_accessres *resp)
++static int nfsaclsvc_release_access(void *rqstp, __be32 *p, void *_resp)
+ {
+- fh_put(&resp->fh);
+- return 1;
++ struct nfsd3_accessres *resp = _resp;
++
++ fh_put(&resp->fh);
++ return 1;
+ }
+
+ #define nfsaclsvc_decode_voidargs NULL
+@@ -346,10 +359,10 @@ static int nfsaclsvc_release_access(struct svc_rqst *rqstp, __be32 *p,
+ struct nfsd3_voidargs { int dummy; };
+
+ #define PROC(name, argt, rest, relt, cache, respsize) \
+- { (svc_procfunc) nfsacld_proc_##name, \
+- (kxdrproc_t) nfsaclsvc_decode_##argt##args, \
+- (kxdrproc_t) nfsaclsvc_encode_##rest##res, \
+- (kxdrproc_t) nfsaclsvc_release_##relt, \
++ { nfsacld_proc_##name, \
++ nfsaclsvc_decode_##argt##args, \
++ nfsaclsvc_encode_##rest##res, \
++ nfsaclsvc_release_##relt, \
+ sizeof(struct nfsd3_##argt##args), \
+ sizeof(struct nfsd3_##rest##res), \
+ 0, \
+diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c
+index 01df4cd..f11e111 100644
+--- a/fs/nfsd/nfs3acl.c
++++ b/fs/nfsd/nfs3acl.c
+@@ -26,9 +26,10 @@ nfsd3_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)
+ /*
+ * Get the Access and/or Default ACL of a file.
+ */
+-static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp,
+- struct nfsd3_getaclargs *argp, struct nfsd3_getaclres *resp)
++static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_getaclargs *argp = _argp;
++ struct nfsd3_getaclres *resp = _resp;
+ struct posix_acl *acl;
+ struct inode *inode;
+ svc_fh *fh;
+@@ -80,10 +81,10 @@ fail:
+ /*
+ * Set the Access and/or Default ACL of a file.
+ */
+-static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp,
+- struct nfsd3_setaclargs *argp,
+- struct nfsd3_attrstat *resp)
++static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_setaclargs *argp = _argp;
++ struct nfsd3_attrstat *resp = _resp;
+ struct inode *inode;
+ svc_fh *fh;
+ __be32 nfserr = 0;
+@@ -125,9 +126,10 @@ out:
+ /*
+ * XDR decode functions
+ */
+-static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_getaclargs *args)
++static int nfs3svc_decode_getaclargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_getaclargs *args = _args;
++
+ p = nfs3svc_decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -137,9 +139,10 @@ static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+
+-static int nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_setaclargs *args)
++static int nfs3svc_decode_setaclargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_setaclargs *args = _args;
+ struct kvec *head = rqstp->rq_arg.head;
+ unsigned int base;
+ int n;
+@@ -168,9 +171,10 @@ static int nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p,
+ */
+
+ /* GETACL */
+-static int nfs3svc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_getaclres *resp)
++static int nfs3svc_encode_getaclres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_getaclres *resp = _resp;
+ struct dentry *dentry = resp->fh.fh_dentry;
+
+ p = nfs3svc_encode_post_op_attr(rqstp, p, &resp->fh);
+@@ -213,9 +217,10 @@ static int nfs3svc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ /* SETACL */
+-static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_attrstat *resp)
++static int nfs3svc_encode_setaclres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_attrstat *resp = _resp;
++
+ p = nfs3svc_encode_post_op_attr(rqstp, p, &resp->fh);
+
+ return xdr_ressize_check(rqstp, p);
+@@ -224,9 +229,10 @@ static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p,
+ /*
+ * XDR release functions
+ */
+-static int nfs3svc_release_getacl(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_getaclres *resp)
++static int nfs3svc_release_getacl(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_getaclres *resp = _resp;
++
+ fh_put(&resp->fh);
+ posix_acl_release(resp->acl_access);
+ posix_acl_release(resp->acl_default);
+@@ -240,10 +246,10 @@ static int nfs3svc_release_getacl(struct svc_rqst *rqstp, __be32 *p,
+ struct nfsd3_voidargs { int dummy; };
+
+ #define PROC(name, argt, rest, relt, cache, respsize) \
+- { (svc_procfunc) nfsd3_proc_##name, \
+- (kxdrproc_t) nfs3svc_decode_##argt##args, \
+- (kxdrproc_t) nfs3svc_encode_##rest##res, \
+- (kxdrproc_t) nfs3svc_release_##relt, \
++ { nfsd3_proc_##name, \
++ nfs3svc_decode_##argt##args, \
++ nfs3svc_encode_##rest##res, \
++ nfs3svc_release_##relt, \
+ sizeof(struct nfsd3_##argt##args), \
+ sizeof(struct nfsd3_##rest##res), \
+ 0, \
+diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c
+index 7b755b7..910495b 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)
+ * Get a file's attributes
+ */
+ static __be32
+-nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp,
+- struct nfsd3_attrstat *resp)
++nfsd3_proc_getattr(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++ struct nfsd3_attrstat *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: GETATTR(3) %s\n",
+@@ -63,9 +64,10 @@ nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp,
+ * Set a file's attributes
+ */
+ static __be32
+-nfsd3_proc_setattr(struct svc_rqst *rqstp, struct nfsd3_sattrargs *argp,
+- struct nfsd3_attrstat *resp)
++nfsd3_proc_setattr(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_sattrargs *argp = _argp;
++ struct nfsd3_attrstat *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: SETATTR(3) %s\n",
+@@ -81,9 +83,10 @@ nfsd3_proc_setattr(struct svc_rqst *rqstp, struct nfsd3_sattrargs *argp,
+ * Look up a path name component
+ */
+ static __be32
+-nfsd3_proc_lookup(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp,
+- struct nfsd3_diropres *resp)
++nfsd3_proc_lookup(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_diropargs *argp = _argp;
++ struct nfsd3_diropres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: LOOKUP(3) %s %.*s\n",
+@@ -105,9 +108,10 @@ nfsd3_proc_lookup(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp,
+ * Check file access
+ */
+ static __be32
+-nfsd3_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessargs *argp,
+- struct nfsd3_accessres *resp)
++nfsd3_proc_access(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_accessargs *argp = _argp;
++ struct nfsd3_accessres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: ACCESS(3) %s 0x%x\n",
+@@ -124,9 +128,10 @@ nfsd3_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessargs *argp,
+ * Read a symlink.
+ */
+ static __be32
+-nfsd3_proc_readlink(struct svc_rqst *rqstp, struct nfsd3_readlinkargs *argp,
+- struct nfsd3_readlinkres *resp)
++nfsd3_proc_readlink(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_readlinkargs *argp = _argp;
++ struct nfsd3_readlinkres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: READLINK(3) %s\n", SVCFH_fmt(&argp->fh));
+@@ -142,9 +147,10 @@ nfsd3_proc_readlink(struct svc_rqst *rqstp, struct nfsd3_readlinkargs *argp,
+ * Read a portion of a file.
+ */
+ static __be32
+-nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp,
+- struct nfsd3_readres *resp)
++nfsd3_proc_read(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_readargs *argp = _argp;
++ struct nfsd3_readres *resp = _resp;
+ __be32 nfserr;
+ u32 max_blocksize = svc_max_payload(rqstp);
+
+@@ -178,9 +184,10 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp,
+ * Write data to a file
+ */
+ static __be32
+-nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp,
+- struct nfsd3_writeres *resp)
++nfsd3_proc_write(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_writeargs *argp = _argp;
++ struct nfsd3_writeres *resp = _resp;
+ __be32 nfserr;
+ unsigned long cnt = argp->len;
+
+@@ -207,9 +214,10 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp,
+ * first reports about SunOS compatibility problems start to pour in...
+ */
+ static __be32
+-nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp,
+- struct nfsd3_diropres *resp)
++nfsd3_proc_create(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_createargs *argp = _argp;
++ struct nfsd3_diropres *resp = _resp;
+ svc_fh *dirfhp, *newfhp = NULL;
+ struct iattr *attr;
+ __be32 nfserr;
+@@ -244,9 +252,10 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp,
+ * Make directory. This operation is not idempotent.
+ */
+ static __be32
+-nfsd3_proc_mkdir(struct svc_rqst *rqstp, struct nfsd3_createargs *argp,
+- struct nfsd3_diropres *resp)
++nfsd3_proc_mkdir(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_createargs *argp = _argp;
++ struct nfsd3_diropres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: MKDIR(3) %s %.*s\n",
+@@ -264,9 +273,10 @@ nfsd3_proc_mkdir(struct svc_rqst *rqstp, struct nfsd3_createargs *argp,
+ }
+
+ static __be32
+-nfsd3_proc_symlink(struct svc_rqst *rqstp, struct nfsd3_symlinkargs *argp,
+- struct nfsd3_diropres *resp)
++nfsd3_proc_symlink(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_symlinkargs *argp = _argp;
++ struct nfsd3_diropres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: SYMLINK(3) %s %.*s -> %.*s\n",
+@@ -285,9 +295,10 @@ nfsd3_proc_symlink(struct svc_rqst *rqstp, struct nfsd3_symlinkargs *argp,
+ * Make socket/fifo/device.
+ */
+ static __be32
+-nfsd3_proc_mknod(struct svc_rqst *rqstp, struct nfsd3_mknodargs *argp,
+- struct nfsd3_diropres *resp)
++nfsd3_proc_mknod(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_mknodargs *argp = _argp;
++ struct nfsd3_diropres *resp = _resp;
+ __be32 nfserr;
+ int type;
+ dev_t rdev = 0;
+@@ -322,9 +333,10 @@ nfsd3_proc_mknod(struct svc_rqst *rqstp, struct nfsd3_mknodargs *argp,
+ * Remove file/fifo/socket etc.
+ */
+ static __be32
+-nfsd3_proc_remove(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp,
+- struct nfsd3_attrstat *resp)
++nfsd3_proc_remove(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_diropargs *argp = _argp;
++ struct nfsd3_attrstat *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: REMOVE(3) %s %.*s\n",
+@@ -343,9 +355,10 @@ nfsd3_proc_remove(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp,
+ * Remove a directory
+ */
+ static __be32
+-nfsd3_proc_rmdir(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp,
+- struct nfsd3_attrstat *resp)
++nfsd3_proc_rmdir(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_diropargs *argp = _argp;
++ struct nfsd3_attrstat *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: RMDIR(3) %s %.*s\n",
+@@ -360,9 +373,10 @@ nfsd3_proc_rmdir(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp,
+ }
+
+ static __be32
+-nfsd3_proc_rename(struct svc_rqst *rqstp, struct nfsd3_renameargs *argp,
+- struct nfsd3_renameres *resp)
++nfsd3_proc_rename(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_renameargs *argp = _argp;
++ struct nfsd3_renameres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: RENAME(3) %s %.*s ->\n",
+@@ -382,9 +396,10 @@ nfsd3_proc_rename(struct svc_rqst *rqstp, struct nfsd3_renameargs *argp,
+ }
+
+ static __be32
+-nfsd3_proc_link(struct svc_rqst *rqstp, struct nfsd3_linkargs *argp,
+- struct nfsd3_linkres *resp)
++nfsd3_proc_link(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_linkargs *argp = _argp;
++ struct nfsd3_linkres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: LINK(3) %s ->\n",
+@@ -405,9 +420,10 @@ nfsd3_proc_link(struct svc_rqst *rqstp, struct nfsd3_linkargs *argp,
+ * Read a portion of a directory.
+ */
+ static __be32
+-nfsd3_proc_readdir(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp,
+- struct nfsd3_readdirres *resp)
++nfsd3_proc_readdir(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_readdirargs *argp = _argp;
++ struct nfsd3_readdirres *resp = _resp;
+ __be32 nfserr;
+ int count;
+
+@@ -441,9 +457,10 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp,
+ * For now, we choose to ignore the dircount parameter.
+ */
+ static __be32
+-nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp,
+- struct nfsd3_readdirres *resp)
++nfsd3_proc_readdirplus(struct svc_rqst *rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_readdirargs *argp = _argp;
++ struct nfsd3_readdirres *resp = _resp;
+ __be32 nfserr;
+ int count = 0;
+ loff_t offset;
+@@ -508,9 +525,10 @@ nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp,
+ * Get file system stats
+ */
+ static __be32
+-nfsd3_proc_fsstat(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
+- struct nfsd3_fsstatres *resp)
++nfsd3_proc_fsstat(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++ struct nfsd3_fsstatres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: FSSTAT(3) %s\n",
+@@ -525,9 +543,10 @@ nfsd3_proc_fsstat(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
+ * Get file system info
+ */
+ static __be32
+-nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
+- struct nfsd3_fsinfores *resp)
++nfsd3_proc_fsinfo(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++ struct nfsd3_fsinfores *resp = _resp;
+ __be32 nfserr;
+ u32 max_blocksize = svc_max_payload(rqstp);
+
+@@ -568,9 +587,10 @@ nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
+ * Get pathconf info for the specified file
+ */
+ static __be32
+-nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
+- struct nfsd3_pathconfres *resp)
++nfsd3_proc_pathconf(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++ struct nfsd3_pathconfres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: PATHCONF(3) %s\n",
+@@ -611,9 +631,10 @@ nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
+ * Commit a file (range) to stable storage.
+ */
+ static __be32
+-nfsd3_proc_commit(struct svc_rqst * rqstp, struct nfsd3_commitargs *argp,
+- struct nfsd3_commitres *resp)
++nfsd3_proc_commit(struct svc_rqst * rqstp, void *_argp, void *_resp)
+ {
++ struct nfsd3_commitargs *argp = _argp;
++ struct nfsd3_commitres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: COMMIT(3) %s %u@%Lu\n",
+@@ -668,213 +689,213 @@ struct nfsd3_voidargs { int dummy; };
+
+ static struct svc_procedure nfsd_procedures3[22] = {
+ [NFS3PROC_NULL] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_null,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_voidres,
++ .pc_func = nfsd3_proc_null,
++ .pc_encode = nfs3svc_encode_voidres,
+ .pc_argsize = sizeof(struct nfsd3_voidargs),
+ .pc_ressize = sizeof(struct nfsd3_voidres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST,
+ },
+ [NFS3PROC_GETATTR] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_getattr,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_attrstatres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_getattr,
++ .pc_decode = nfs3svc_decode_fhandleargs,
++ .pc_encode = nfs3svc_encode_attrstatres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_fhandleargs),
+ .pc_ressize = sizeof(struct nfsd3_attrstatres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+AT,
+ },
+ [NFS3PROC_SETATTR] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_setattr,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_sattrargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_setattr,
++ .pc_decode = nfs3svc_decode_sattrargs,
++ .pc_encode = nfs3svc_encode_wccstatres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_sattrargs),
+ .pc_ressize = sizeof(struct nfsd3_wccstatres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+WC,
+ },
+ [NFS3PROC_LOOKUP] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_lookup,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_diropres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2,
++ .pc_func = nfsd3_proc_lookup,
++ .pc_decode = nfs3svc_decode_diropargs,
++ .pc_encode = nfs3svc_encode_diropres,
++ .pc_release = nfs3svc_release_fhandle2,
+ .pc_argsize = sizeof(struct nfsd3_diropargs),
+ .pc_ressize = sizeof(struct nfsd3_diropres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+FH+pAT+pAT,
+ },
+ [NFS3PROC_ACCESS] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_access,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_accessargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_accessres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_access,
++ .pc_decode = nfs3svc_decode_accessargs,
++ .pc_encode = nfs3svc_encode_accessres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_accessargs),
+ .pc_ressize = sizeof(struct nfsd3_accessres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+pAT+1,
+ },
+ [NFS3PROC_READLINK] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_readlink,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_readlinkargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_readlinkres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_readlink,
++ .pc_decode = nfs3svc_decode_readlinkargs,
++ .pc_encode = nfs3svc_encode_readlinkres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_readlinkargs),
+ .pc_ressize = sizeof(struct nfsd3_readlinkres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+pAT+1+NFS3_MAXPATHLEN/4,
+ },
+ [NFS3PROC_READ] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_read,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_readargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_readres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_read,
++ .pc_decode = nfs3svc_decode_readargs,
++ .pc_encode = nfs3svc_encode_readres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_readargs),
+ .pc_ressize = sizeof(struct nfsd3_readres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+pAT+4+NFSSVC_MAXBLKSIZE/4,
+ },
+ [NFS3PROC_WRITE] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_write,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_writeargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_writeres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_write,
++ .pc_decode = nfs3svc_decode_writeargs,
++ .pc_encode = nfs3svc_encode_writeres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_writeargs),
+ .pc_ressize = sizeof(struct nfsd3_writeres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+WC+4,
+ },
+ [NFS3PROC_CREATE] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_create,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_createargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2,
++ .pc_func = nfsd3_proc_create,
++ .pc_decode = nfs3svc_decode_createargs,
++ .pc_encode = nfs3svc_encode_createres,
++ .pc_release = nfs3svc_release_fhandle2,
+ .pc_argsize = sizeof(struct nfsd3_createargs),
+ .pc_ressize = sizeof(struct nfsd3_createres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+(1+FH+pAT)+WC,
+ },
+ [NFS3PROC_MKDIR] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_mkdir,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_mkdirargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2,
++ .pc_func = nfsd3_proc_mkdir,
++ .pc_decode = nfs3svc_decode_mkdirargs,
++ .pc_encode = nfs3svc_encode_createres,
++ .pc_release = nfs3svc_release_fhandle2,
+ .pc_argsize = sizeof(struct nfsd3_mkdirargs),
+ .pc_ressize = sizeof(struct nfsd3_createres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+(1+FH+pAT)+WC,
+ },
+ [NFS3PROC_SYMLINK] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_symlink,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_symlinkargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2,
++ .pc_func = nfsd3_proc_symlink,
++ .pc_decode = nfs3svc_decode_symlinkargs,
++ .pc_encode = nfs3svc_encode_createres,
++ .pc_release = nfs3svc_release_fhandle2,
+ .pc_argsize = sizeof(struct nfsd3_symlinkargs),
+ .pc_ressize = sizeof(struct nfsd3_createres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+(1+FH+pAT)+WC,
+ },
+ [NFS3PROC_MKNOD] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_mknod,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_mknodargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_createres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2,
++ .pc_func = nfsd3_proc_mknod,
++ .pc_decode = nfs3svc_decode_mknodargs,
++ .pc_encode = nfs3svc_encode_createres,
++ .pc_release = nfs3svc_release_fhandle2,
+ .pc_argsize = sizeof(struct nfsd3_mknodargs),
+ .pc_ressize = sizeof(struct nfsd3_createres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+(1+FH+pAT)+WC,
+ },
+ [NFS3PROC_REMOVE] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_remove,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_remove,
++ .pc_decode = nfs3svc_decode_diropargs,
++ .pc_encode = nfs3svc_encode_wccstatres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_diropargs),
+ .pc_ressize = sizeof(struct nfsd3_wccstatres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+WC,
+ },
+ [NFS3PROC_RMDIR] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_rmdir,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_rmdir,
++ .pc_decode = nfs3svc_decode_diropargs,
++ .pc_encode = nfs3svc_encode_wccstatres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_diropargs),
+ .pc_ressize = sizeof(struct nfsd3_wccstatres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+WC,
+ },
+ [NFS3PROC_RENAME] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_rename,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_renameargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_renameres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2,
++ .pc_func = nfsd3_proc_rename,
++ .pc_decode = nfs3svc_decode_renameargs,
++ .pc_encode = nfs3svc_encode_renameres,
++ .pc_release = nfs3svc_release_fhandle2,
+ .pc_argsize = sizeof(struct nfsd3_renameargs),
+ .pc_ressize = sizeof(struct nfsd3_renameres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+WC+WC,
+ },
+ [NFS3PROC_LINK] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_link,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_linkargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_linkres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2,
++ .pc_func = nfsd3_proc_link,
++ .pc_decode = nfs3svc_decode_linkargs,
++ .pc_encode = nfs3svc_encode_linkres,
++ .pc_release = nfs3svc_release_fhandle2,
+ .pc_argsize = sizeof(struct nfsd3_linkargs),
+ .pc_ressize = sizeof(struct nfsd3_linkres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+pAT+WC,
+ },
+ [NFS3PROC_READDIR] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_readdir,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_readdir,
++ .pc_decode = nfs3svc_decode_readdirargs,
++ .pc_encode = nfs3svc_encode_readdirres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_readdirargs),
+ .pc_ressize = sizeof(struct nfsd3_readdirres),
+ .pc_cachetype = RC_NOCACHE,
+ },
+ [NFS3PROC_READDIRPLUS] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_readdirplus,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirplusargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_readdirplus,
++ .pc_decode = nfs3svc_decode_readdirplusargs,
++ .pc_encode = nfs3svc_encode_readdirres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_readdirplusargs),
+ .pc_ressize = sizeof(struct nfsd3_readdirres),
+ .pc_cachetype = RC_NOCACHE,
+ },
+ [NFS3PROC_FSSTAT] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_fsstat,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_fsstatres,
++ .pc_func = nfsd3_proc_fsstat,
++ .pc_decode = nfs3svc_decode_fhandleargs,
++ .pc_encode = nfs3svc_encode_fsstatres,
+ .pc_argsize = sizeof(struct nfsd3_fhandleargs),
+ .pc_ressize = sizeof(struct nfsd3_fsstatres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+pAT+2*6+1,
+ },
+ [NFS3PROC_FSINFO] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_fsinfo,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_fsinfores,
++ .pc_func = nfsd3_proc_fsinfo,
++ .pc_decode = nfs3svc_decode_fhandleargs,
++ .pc_encode = nfs3svc_encode_fsinfores,
+ .pc_argsize = sizeof(struct nfsd3_fhandleargs),
+ .pc_ressize = sizeof(struct nfsd3_fsinfores),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+pAT+12,
+ },
+ [NFS3PROC_PATHCONF] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_pathconf,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_pathconfres,
++ .pc_func = nfsd3_proc_pathconf,
++ .pc_decode = nfs3svc_decode_fhandleargs,
++ .pc_encode = nfs3svc_encode_pathconfres,
+ .pc_argsize = sizeof(struct nfsd3_fhandleargs),
+ .pc_ressize = sizeof(struct nfsd3_pathconfres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+pAT+6,
+ },
+ [NFS3PROC_COMMIT] = {
+- .pc_func = (svc_procfunc) nfsd3_proc_commit,
+- .pc_decode = (kxdrproc_t) nfs3svc_decode_commitargs,
+- .pc_encode = (kxdrproc_t) nfs3svc_encode_commitres,
+- .pc_release = (kxdrproc_t) nfs3svc_release_fhandle,
++ .pc_func = nfsd3_proc_commit,
++ .pc_decode = nfs3svc_decode_commitargs,
++ .pc_encode = nfs3svc_encode_commitres,
++ .pc_release = nfs3svc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd3_commitargs),
+ .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
+--- a/fs/nfsd/nfs3xdr.c
++++ b/fs/nfsd/nfs3xdr.c
+@@ -273,8 +273,10 @@ void fill_post_wcc(struct svc_fh *fhp)
+ * XDR decode functions
+ */
+ int
+-nfs3svc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *args)
++nfs3svc_decode_fhandle(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_fhandle *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -282,9 +284,10 @@ nfs3svc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *a
+ }
+
+ int
+-nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_sattrargs *args)
++nfs3svc_decode_sattrargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_sattrargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -300,9 +303,10 @@ nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_diropargs *args)
++nfs3svc_decode_diropargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_diropargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->fh))
+ || !(p = decode_filename(p, &args->name, &args->len)))
+ return 0;
+@@ -311,9 +315,10 @@ nfs3svc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_accessargs *args)
++nfs3svc_decode_accessargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_accessargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -323,9 +328,10 @@ nfs3svc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_readargs *args)
++nfs3svc_decode_readargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_readargs *args = _args;
+ unsigned int len;
+ int v;
+ u32 max_blocksize = svc_max_payload(rqstp);
+@@ -353,9 +359,10 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_writeargs *args)
++nfs3svc_decode_writeargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_writeargs *args = _args;
+ unsigned int len, v, hdr, dlen;
+ u32 max_blocksize = svc_max_payload(rqstp);
+
+@@ -410,9 +417,11 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_createargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_createargs *args)
++nfs3svc_decode_createargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_createargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->fh))
+ || !(p = decode_filename(p, &args->name, &args->len)))
+ return 0;
+@@ -433,9 +442,10 @@ nfs3svc_decode_createargs(struct svc_rqst *rqstp, __be32 *p,
+ return xdr_argsize_check(rqstp, p);
+ }
+ int
+-nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_createargs *args)
++nfs3svc_decode_mkdirargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_createargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->fh)) ||
+ !(p = decode_filename(p, &args->name, &args->len)))
+ return 0;
+@@ -445,9 +455,10 @@ nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_symlinkargs *args)
++nfs3svc_decode_symlinkargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_symlinkargs *args = _args;
+ unsigned int len, avail;
+ char *old, *new;
+ struct kvec *vec;
+@@ -495,9 +506,10 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_mknodargs *args)
++nfs3svc_decode_mknodargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_mknodargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->fh))
+ || !(p = decode_filename(p, &args->name, &args->len)))
+ return 0;
+@@ -517,9 +529,10 @@ nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_renameargs *args)
++nfs3svc_decode_renameargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_renameargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->ffh))
+ || !(p = decode_filename(p, &args->fname, &args->flen))
+ || !(p = decode_fh(p, &args->tfh))
+@@ -530,9 +543,11 @@ nfs3svc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_readlinkargs *args)
++nfs3svc_decode_readlinkargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_readlinkargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -542,9 +557,10 @@ nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_linkargs *args)
++nfs3svc_decode_linkargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_linkargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->ffh))
+ || !(p = decode_fh(p, &args->tfh))
+ || !(p = decode_filename(p, &args->tname, &args->tlen)))
+@@ -554,9 +570,11 @@ nfs3svc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_readdirargs *args)
++nfs3svc_decode_readdirargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_readdirargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -571,9 +589,10 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_readdirargs *args)
++nfs3svc_decode_readdirplusargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_readdirargs *args = _args;
+ int len;
+ u32 max_blocksize = svc_max_payload(rqstp);
+
+@@ -597,9 +616,10 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_commitargs *args)
++nfs3svc_decode_commitargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd3_commitargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -617,16 +637,17 @@ nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p,
+ * will work properly.
+ */
+ int
+-nfs3svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nfs3svc_encode_voidres(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ /* GETATTR */
+ int
+-nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_attrstat *resp)
++nfs3svc_encode_attrstat(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_attrstat *resp = _resp;
++
+ if (resp->status == 0) {
+ lease_get_mtime(d_inode(resp->fh.fh_dentry),
+ &resp->stat.mtime);
+@@ -637,18 +658,20 @@ nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p,
+
+ /* SETATTR, REMOVE, RMDIR */
+ int
+-nfs3svc_encode_wccstat(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_attrstat *resp)
++nfs3svc_encode_wccstat(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_attrstat *resp = _resp;
++
+ p = encode_wcc_data(rqstp, p, &resp->fh);
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ /* LOOKUP */
+ int
+-nfs3svc_encode_diropres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_diropres *resp)
++nfs3svc_encode_diropres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_diropres *resp = _resp;
++
+ if (resp->status == 0) {
+ p = encode_fh(p, &resp->fh);
+ p = encode_post_op_attr(rqstp, p, &resp->fh);
+@@ -659,9 +682,10 @@ nfs3svc_encode_diropres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* ACCESS */
+ int
+-nfs3svc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_accessres *resp)
++nfs3svc_encode_accessres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_accessres *resp = _resp;
++
+ p = encode_post_op_attr(rqstp, p, &resp->fh);
+ if (resp->status == 0)
+ *p++ = htonl(resp->access);
+@@ -670,9 +694,11 @@ nfs3svc_encode_accessres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* READLINK */
+ int
+-nfs3svc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_readlinkres *resp)
++nfs3svc_encode_readlinkres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_readlinkres *resp = _resp;
++
+ p = encode_post_op_attr(rqstp, p, &resp->fh);
+ if (resp->status == 0) {
+ *p++ = htonl(resp->len);
+@@ -691,9 +717,11 @@ nfs3svc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* READ */
+ int
+-nfs3svc_encode_readres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_readres *resp)
++nfs3svc_encode_readres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_readres *resp = _resp;
++
+ p = encode_post_op_attr(rqstp, p, &resp->fh);
+ if (resp->status == 0) {
+ *p++ = htonl(resp->count);
+@@ -715,9 +743,10 @@ nfs3svc_encode_readres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* WRITE */
+ int
+-nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_writeres *resp)
++nfs3svc_encode_writeres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_writeres *resp = _resp;
+ struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
+
+ p = encode_wcc_data(rqstp, p, &resp->fh);
+@@ -732,9 +761,10 @@ nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* CREATE, MKDIR, SYMLINK, MKNOD */
+ int
+-nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_diropres *resp)
++nfs3svc_encode_createres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_diropres *resp = _resp;
++
+ if (resp->status == 0) {
+ *p++ = xdr_one;
+ p = encode_fh(p, &resp->fh);
+@@ -746,9 +776,10 @@ nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* RENAME */
+ int
+-nfs3svc_encode_renameres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_renameres *resp)
++nfs3svc_encode_renameres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_renameres *resp = _resp;
++
+ p = encode_wcc_data(rqstp, p, &resp->ffh);
+ p = encode_wcc_data(rqstp, p, &resp->tfh);
+ return xdr_ressize_check(rqstp, p);
+@@ -756,9 +787,10 @@ nfs3svc_encode_renameres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* LINK */
+ int
+-nfs3svc_encode_linkres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_linkres *resp)
++nfs3svc_encode_linkres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_linkres *resp = _resp;
++
+ p = encode_post_op_attr(rqstp, p, &resp->fh);
+ p = encode_wcc_data(rqstp, p, &resp->tfh);
+ return xdr_ressize_check(rqstp, p);
+@@ -766,9 +798,11 @@ nfs3svc_encode_linkres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* READDIR */
+ int
+-nfs3svc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_readdirres *resp)
++nfs3svc_encode_readdirres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_readdirres *resp = _resp;
++
+ p = encode_post_op_attr(rqstp, p, &resp->fh);
+
+ if (resp->status == 0) {
+@@ -1016,9 +1050,9 @@ nfs3svc_encode_entry_plus(void *cd, const char *name,
+
+ /* FSSTAT */
+ int
+-nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_fsstatres *resp)
++nfs3svc_encode_fsstatres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_fsstatres *resp = _resp;
+ struct kstatfs *s = &resp->stats;
+ u64 bs = s->f_bsize;
+
+@@ -1038,9 +1072,10 @@ nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* FSINFO */
+ int
+-nfs3svc_encode_fsinfores(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_fsinfores *resp)
++nfs3svc_encode_fsinfores(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_fsinfores *resp = _resp;
++
+ *p++ = xdr_zero; /* no post_op_attr */
+
+ if (resp->status == 0) {
+@@ -1062,9 +1097,10 @@ nfs3svc_encode_fsinfores(struct svc_rqst *rqstp, __be32 *p,
+
+ /* PATHCONF */
+ int
+-nfs3svc_encode_pathconfres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_pathconfres *resp)
++nfs3svc_encode_pathconfres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_pathconfres *resp = _resp;
++
+ *p++ = xdr_zero; /* no post_op_attr */
+
+ if (resp->status == 0) {
+@@ -1081,9 +1117,10 @@ nfs3svc_encode_pathconfres(struct svc_rqst *rqstp, __be32 *p,
+
+ /* COMMIT */
+ int
+-nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_commitres *resp)
++nfs3svc_encode_commitres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd3_commitres *resp = _resp;
+ struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
+
+ p = encode_wcc_data(rqstp, p, &resp->fh);
+@@ -1099,17 +1136,19 @@ nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p,
+ * XDR release functions
+ */
+ int
+-nfs3svc_release_fhandle(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_attrstat *resp)
++nfs3svc_release_fhandle(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_attrstat *resp = _resp;
++
+ fh_put(&resp->fh);
+ return 1;
+ }
+
+ int
+-nfs3svc_release_fhandle2(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd3_fhandle_pair *resp)
++nfs3svc_release_fhandle2(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd3_fhandle_pair *resp = _resp;
++
+ fh_put(&resp->fh1);
+ fh_put(&resp->fh2);
+ return 1;
+diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
+index 7389cb1..e031e30d 100644
+--- a/fs/nfsd/nfs4callback.c
++++ b/fs/nfsd/nfs4callback.c
+@@ -470,8 +470,7 @@ static int decode_cb_sequence4res(struct xdr_stream *xdr,
+ /*
+ * NB: Without this zero space reservation, callbacks over krb5p fail
+ */
+-static void nfs4_xdr_enc_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr,
+- void *__unused)
++static void nfs4_xdr_enc_cb_null(void *req, struct xdr_stream *xdr, void *__unused)
+ {
+ xdr_reserve_space(xdr, 0);
+ }
+@@ -479,9 +478,9 @@ static void nfs4_xdr_enc_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * 20.2. Operation 4: CB_RECALL - Recall a Delegation
+ */
+-static void nfs4_xdr_enc_cb_recall(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct nfsd4_callback *cb)
++static void nfs4_xdr_enc_cb_recall(void *req, struct xdr_stream *xdr, void *_cb)
+ {
++ const struct nfsd4_callback *cb = _cb;
+ const struct nfs4_delegation *dp = cb_to_delegation(cb);
+ struct nfs4_cb_compound_hdr hdr = {
+ .ident = cb->cb_clp->cl_cb_ident,
+@@ -504,8 +503,7 @@ static void nfs4_xdr_enc_cb_recall(struct rpc_rqst *req, struct xdr_stream *xdr,
+ * Protocol".
+ */
+
+-static int nfs4_xdr_dec_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr,
+- void *__unused)
++static int nfs4_xdr_dec_cb_null(void *req, struct xdr_stream *xdr, void *__unused)
+ {
+ return 0;
+ }
+@@ -513,10 +511,11 @@ static int nfs4_xdr_dec_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr,
+ /*
+ * 20.2. Operation 4: CB_RECALL - Recall a Delegation
+ */
+-static int nfs4_xdr_dec_cb_recall(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_cb_recall(void *rqstp,
+ struct xdr_stream *xdr,
+- struct nfsd4_callback *cb)
++ void *_cb)
+ {
++ struct nfsd4_callback *cb = _cb;
+ struct nfs4_cb_compound_hdr hdr;
+ int status;
+
+@@ -586,10 +585,12 @@ static void encode_cb_layout4args(struct xdr_stream *xdr,
+ hdr->nops++;
+ }
+
+-static void nfs4_xdr_enc_cb_layout(struct rpc_rqst *req,
++static void nfs4_xdr_enc_cb_layout(void *_req,
+ struct xdr_stream *xdr,
+- const struct nfsd4_callback *cb)
++ void *_cb)
+ {
++ struct rpc_rqst *req = _req;
++ const struct nfsd4_callback *cb = _cb;
+ const struct nfs4_layout_stateid *ls =
+ container_of(cb, struct nfs4_layout_stateid, ls_recall);
+ struct nfs4_cb_compound_hdr hdr = {
+@@ -603,10 +604,12 @@ static void nfs4_xdr_enc_cb_layout(struct rpc_rqst *req,
+ encode_cb_nops(&hdr);
+ }
+
+-static int nfs4_xdr_dec_cb_layout(struct rpc_rqst *rqstp,
++static int nfs4_xdr_dec_cb_layout(void *_rqstp,
+ struct xdr_stream *xdr,
+- struct nfsd4_callback *cb)
++ void *_cb)
+ {
++ struct rpc_rqst *rqstp = _rqstp;
++ struct nfsd4_callback *cb = _cb;
+ struct nfs4_cb_compound_hdr hdr;
+ int status;
+
+@@ -629,8 +632,8 @@ static int nfs4_xdr_dec_cb_layout(struct rpc_rqst *rqstp,
+ #define PROC(proc, call, argtype, restype) \
+ [NFSPROC4_CLNT_##proc] = { \
+ .p_proc = NFSPROC4_CB_##call, \
+- .p_encode = (kxdreproc_t)nfs4_xdr_enc_##argtype, \
+- .p_decode = (kxdrdproc_t)nfs4_xdr_dec_##restype, \
++ .p_encode = nfs4_xdr_enc_##argtype, \
++ .p_decode = nfs4_xdr_dec_##restype, \
+ .p_arglen = NFS4_enc_##argtype##_sz, \
+ .p_replen = NFS4_dec_##restype##_sz, \
+ .p_statidx = NFSPROC4_CB_##call, \
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
-index 7d5351c..144fc32 100644
+index f8082c7..ded62562 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
-@@ -1486,7 +1486,7 @@ struct nfsd4_operation {
+@@ -358,8 +358,9 @@ copy_clientid(clientid_t *clid, struct nfsd4_session *session)
+
+ static __be32
+ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_open *open)
++ void *_open)
+ {
++ struct nfsd4_open *open = _open;
+ __be32 status;
+ struct svc_fh *resfh = NULL;
+ struct net *net = SVC_NET(rqstp);
+@@ -496,8 +497,10 @@ static __be32 nfsd4_open_omfg(struct svc_rqst *rqstp, struct nfsd4_compound_stat
+ */
+ static __be32
+ nfsd4_getfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct svc_fh **getfh)
++ void *_getfh)
+ {
++ struct svc_fh **getfh = (struct svc_fh **)_getfh;
++
+ if (!cstate->current_fh.fh_dentry)
+ return nfserr_nofilehandle;
+
+@@ -507,8 +510,10 @@ nfsd4_getfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_putfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_putfh *putfh)
++ void *_putfh)
+ {
++ struct nfsd4_putfh *putfh = _putfh;
++
+ fh_put(&cstate->current_fh);
+ cstate->current_fh.fh_handle.fh_size = putfh->pf_fhlen;
+ memcpy(&cstate->current_fh.fh_handle.fh_base, putfh->pf_fhval,
+@@ -562,8 +567,10 @@ nfsd4_savefh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+ */
+ static __be32
+ nfsd4_access(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_access *access)
++ void *_access)
+ {
++ struct nfsd4_access *access = _access;
++
+ if (access->ac_req_access & ~NFS3_ACCESS_FULL)
+ return nfserr_inval;
+
+@@ -588,8 +595,10 @@ static void gen_boot_verifier(nfs4_verifier *verifier, struct net *net)
+
+ static __be32
+ nfsd4_commit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_commit *commit)
++ void *_commit)
+ {
++ struct nfsd4_commit *commit = _commit;
++
+ gen_boot_verifier(&commit->co_verf, SVC_NET(rqstp));
+ return nfsd_commit(rqstp, &cstate->current_fh, commit->co_offset,
+ commit->co_count);
+@@ -597,8 +606,9 @@ nfsd4_commit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_create *create)
++ void *_create)
+ {
++ struct nfsd4_create *create = _create;
+ struct svc_fh resfh;
+ __be32 status;
+ dev_t rdev;
+@@ -685,8 +695,9 @@ out:
+
+ static __be32
+ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_getattr *getattr)
++ void *_getattr)
+ {
++ struct nfsd4_getattr *getattr = _getattr;
+ __be32 status;
+
+ status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP);
+@@ -706,8 +717,9 @@ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_link(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_link *link)
++ void *_link)
+ {
++ struct nfsd4_link *link = _link;
+ __be32 status = nfserr_nofilehandle;
+
+ if (!cstate->save_fh.fh_dentry)
+@@ -745,8 +757,9 @@ nfsd4_lookupp(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_lookup *lookup)
++ void *_lookup)
+ {
++ struct nfsd4_lookup *lookup = _lookup;
+ return nfsd_lookup(rqstp, &cstate->current_fh,
+ lookup->lo_name, lookup->lo_len,
+ &cstate->current_fh);
+@@ -754,8 +767,9 @@ nfsd4_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_read *read)
++ void *_read)
+ {
++ struct nfsd4_read *read = _read;
+ __be32 status;
+
+ read->rd_filp = NULL;
+@@ -790,8 +804,9 @@ out:
+
+ static __be32
+ nfsd4_readdir(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_readdir *readdir)
++ void *_readdir)
+ {
++ struct nfsd4_readdir *readdir = _readdir;
+ u64 cookie = readdir->rd_cookie;
+ static const nfs4_verifier zeroverf;
+
+@@ -815,8 +830,10 @@ nfsd4_readdir(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_readlink(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_readlink *readlink)
++ void *_readlink)
+ {
++ struct nfsd4_readlink *readlink = _readlink;
++
+ readlink->rl_rqstp = rqstp;
+ readlink->rl_fhp = &cstate->current_fh;
+ return nfs_ok;
+@@ -824,8 +841,9 @@ nfsd4_readlink(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_remove(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_remove *remove)
++ void *_remove)
+ {
++ struct nfsd4_remove *remove = _remove;
+ __be32 status;
+
+ if (opens_in_grace(SVC_NET(rqstp)))
+@@ -841,8 +859,9 @@ nfsd4_remove(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_rename(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_rename *rename)
++ void *_rename)
+ {
++ struct nfsd4_rename *rename = _rename;
+ __be32 status = nfserr_nofilehandle;
+
+ if (!cstate->save_fh.fh_dentry)
+@@ -862,8 +881,9 @@ nfsd4_rename(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_secinfo *secinfo)
++ void *_secinfo)
+ {
++ struct nfsd4_secinfo *secinfo = _secinfo;
+ struct svc_fh resfh;
+ struct svc_export *exp;
+ struct dentry *dentry;
+@@ -893,8 +913,9 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_secinfo_no_name *sin)
++ void *_sin)
+ {
++ struct nfsd4_secinfo_no_name *sin = _sin;
+ __be32 err;
+
+ switch (sin->sin_style) {
+@@ -916,8 +937,9 @@ nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstat
+
+ static __be32
+ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_setattr *setattr)
++ void *_setattr)
+ {
++ struct nfsd4_setattr *setattr = _setattr;
+ __be32 status = nfs_ok;
+ int err;
+
+@@ -977,8 +999,9 @@ static int fill_in_write_vector(struct kvec *vec, struct nfsd4_write *write)
+
+ static __be32
+ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_write *write)
++ void *_write)
+ {
++ struct nfsd4_write *write = _write;
+ stateid_t *stateid = &write->wr_stateid;
+ struct file *filp = NULL;
+ __be32 status = nfs_ok;
+@@ -1014,8 +1037,9 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_clone(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_clone *clone)
++ void *_clone)
+ {
++ struct nfsd4_clone *clone = _clone;
+ struct file *src, *dst;
+ __be32 status;
+
+@@ -1078,23 +1102,28 @@ nfsd4_fallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_allocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_fallocate *fallocate)
++ void *_fallocate)
+ {
++ struct nfsd4_fallocate *fallocate = _fallocate;
++
+ return nfsd4_fallocate(rqstp, cstate, fallocate, 0);
+ }
+
+ static __be32
+ nfsd4_deallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_fallocate *fallocate)
++ void *_fallocate)
+ {
++ struct nfsd4_fallocate *fallocate = _fallocate;
++
+ return nfsd4_fallocate(rqstp, cstate, fallocate,
+ FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE);
+ }
+
+ static __be32
+ nfsd4_seek(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_seek *seek)
++ void *_seek)
+ {
++ struct nfsd4_seek *seek = (struct nfsd4_seek *)_seek;
+ int whence;
+ __be32 status;
+ struct file *file;
+@@ -1141,8 +1170,9 @@ out:
+ */
+ static __be32
+ _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_verify *verify)
++ void *_verify)
+ {
++ struct nfsd4_verify *verify = _verify;
+ __be32 *buf, *p;
+ int count;
+ __be32 status;
+@@ -1199,8 +1229,9 @@ out_kfree:
+
+ static __be32
+ nfsd4_nverify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_verify *verify)
++ void *_verify)
+ {
++ struct nfsd4_verify *verify = _verify;
+ __be32 status;
+
+ status = _nfsd4_verify(rqstp, cstate, verify);
+@@ -1209,8 +1240,9 @@ nfsd4_nverify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ static __be32
+ nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_verify *verify)
++ void *_verify)
+ {
++ struct nfsd4_verify *verify = _verify;
+ __be32 status;
+
+ status = _nfsd4_verify(rqstp, cstate, verify);
+@@ -1238,8 +1270,9 @@ nfsd4_layout_verify(struct svc_export *exp, unsigned int layout_type)
+ static __be32
+ nfsd4_getdeviceinfo(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_getdeviceinfo *gdp)
++ void *_gdp)
+ {
++ struct nfsd4_getdeviceinfo *gdp = _gdp;
+ const struct nfsd4_layout_ops *ops;
+ struct nfsd4_deviceid_map *map;
+ struct svc_export *exp;
+@@ -1282,8 +1315,9 @@ out:
+ static __be32
+ nfsd4_layoutget(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_layoutget *lgp)
++ void *_lgp)
+ {
++ struct nfsd4_layoutget *lgp = _lgp;
+ struct svc_fh *current_fh = &cstate->current_fh;
+ const struct nfsd4_layout_ops *ops;
+ struct nfs4_layout_stateid *ls;
+@@ -1362,8 +1396,9 @@ out:
+ static __be32
+ nfsd4_layoutcommit(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_layoutcommit *lcp)
++ void *_lcp)
+ {
++ struct nfsd4_layoutcommit *lcp = _lcp;
+ const struct nfsd4_layout_seg *seg = &lcp->lc_seg;
+ struct svc_fh *current_fh = &cstate->current_fh;
+ const struct nfsd4_layout_ops *ops;
+@@ -1426,8 +1461,9 @@ out:
+ static __be32
+ nfsd4_layoutreturn(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_layoutreturn *lrp)
++ void *_lrp)
+ {
++ struct nfsd4_layoutreturn *lrp = _lrp;
+ struct svc_fh *current_fh = &cstate->current_fh;
+ __be32 nfserr;
+
+@@ -1529,7 +1565,7 @@ struct nfsd4_operation {
nfsd4op_rsize op_rsize_bop;
stateid_getter op_get_currentstateid;
stateid_setter op_set_currentstateid;
@@ -85480,19 +105885,2098 @@ index 7d5351c..144fc32 100644
static struct nfsd4_operation nfsd4_ops[];
+@@ -1637,10 +1673,10 @@ static void svcxdr_init_encode(struct svc_rqst *rqstp,
+ * COMPOUND call.
+ */
+ static __be32
+-nfsd4_proc_compound(struct svc_rqst *rqstp,
+- struct nfsd4_compoundargs *args,
+- struct nfsd4_compoundres *resp)
++nfsd4_proc_compound(struct svc_rqst *rqstp, void *_args, void *_resp)
+ {
++ struct nfsd4_compoundargs *args = _args;
++ struct nfsd4_compoundres *resp = _resp;
+ struct nfsd4_op *op;
+ struct nfsd4_operation *opdesc;
+ struct nfsd4_compound_state *cstate = &resp->cstate;
+@@ -1999,338 +2035,338 @@ static inline u32 nfsd4_layoutreturn_rsize(struct svc_rqst *rqstp, struct nfsd4_
+
+ static struct nfsd4_operation nfsd4_ops[] = {
+ [OP_ACCESS] = {
+- .op_func = (nfsd4op_func)nfsd4_access,
++ .op_func = nfsd4_access,
+ .op_name = "OP_ACCESS",
+ },
+ [OP_CLOSE] = {
+- .op_func = (nfsd4op_func)nfsd4_close,
++ .op_func = nfsd4_close,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_CLOSE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_closestateid,
+- .op_set_currentstateid = (stateid_setter)nfsd4_set_closestateid,
++ .op_rsize_bop = nfsd4_status_stateid_rsize,
++ .op_get_currentstateid = nfsd4_get_closestateid,
++ .op_set_currentstateid = nfsd4_set_closestateid,
+ },
+ [OP_COMMIT] = {
+- .op_func = (nfsd4op_func)nfsd4_commit,
++ .op_func = nfsd4_commit,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_COMMIT",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_commit_rsize,
++ .op_rsize_bop = nfsd4_commit_rsize,
+ },
+ [OP_CREATE] = {
+- .op_func = (nfsd4op_func)nfsd4_create,
++ .op_func = nfsd4_create,
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME | OP_CLEAR_STATEID,
+ .op_name = "OP_CREATE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_create_rsize,
++ .op_rsize_bop = nfsd4_create_rsize,
+ },
+ [OP_DELEGRETURN] = {
+- .op_func = (nfsd4op_func)nfsd4_delegreturn,
++ .op_func = nfsd4_delegreturn,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_DELEGRETURN",
+ .op_rsize_bop = nfsd4_only_status_rsize,
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_delegreturnstateid,
++ .op_get_currentstateid = nfsd4_get_delegreturnstateid,
+ },
+ [OP_GETATTR] = {
+- .op_func = (nfsd4op_func)nfsd4_getattr,
++ .op_func = nfsd4_getattr,
+ .op_flags = ALLOWED_ON_ABSENT_FS,
+ .op_rsize_bop = nfsd4_getattr_rsize,
+ .op_name = "OP_GETATTR",
+ },
+ [OP_GETFH] = {
+- .op_func = (nfsd4op_func)nfsd4_getfh,
++ .op_func = nfsd4_getfh,
+ .op_name = "OP_GETFH",
+ },
+ [OP_LINK] = {
+- .op_func = (nfsd4op_func)nfsd4_link,
++ .op_func = nfsd4_link,
+ .op_flags = ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING
+ | OP_CACHEME,
+ .op_name = "OP_LINK",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_link_rsize,
++ .op_rsize_bop = nfsd4_link_rsize,
+ },
+ [OP_LOCK] = {
+- .op_func = (nfsd4op_func)nfsd4_lock,
++ .op_func = nfsd4_lock,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_LOCK",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_lock_rsize,
+- .op_set_currentstateid = (stateid_setter)nfsd4_set_lockstateid,
++ .op_rsize_bop = nfsd4_lock_rsize,
++ .op_set_currentstateid = nfsd4_set_lockstateid,
+ },
+ [OP_LOCKT] = {
+- .op_func = (nfsd4op_func)nfsd4_lockt,
++ .op_func = nfsd4_lockt,
+ .op_name = "OP_LOCKT",
+ },
+ [OP_LOCKU] = {
+- .op_func = (nfsd4op_func)nfsd4_locku,
++ .op_func = nfsd4_locku,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_LOCKU",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_lockustateid,
++ .op_rsize_bop = nfsd4_status_stateid_rsize,
++ .op_get_currentstateid = nfsd4_get_lockustateid,
+ },
+ [OP_LOOKUP] = {
+- .op_func = (nfsd4op_func)nfsd4_lookup,
++ .op_func = nfsd4_lookup,
+ .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID,
+ .op_name = "OP_LOOKUP",
+ },
+ [OP_LOOKUPP] = {
+- .op_func = (nfsd4op_func)nfsd4_lookupp,
++ .op_func = nfsd4_lookupp,
+ .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID,
+ .op_name = "OP_LOOKUPP",
+ },
+ [OP_NVERIFY] = {
+- .op_func = (nfsd4op_func)nfsd4_nverify,
++ .op_func = nfsd4_nverify,
+ .op_name = "OP_NVERIFY",
+ },
+ [OP_OPEN] = {
+- .op_func = (nfsd4op_func)nfsd4_open,
++ .op_func = nfsd4_open,
+ .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_OPEN",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_open_rsize,
+- .op_set_currentstateid = (stateid_setter)nfsd4_set_openstateid,
++ .op_rsize_bop = nfsd4_open_rsize,
++ .op_set_currentstateid = nfsd4_set_openstateid,
+ },
+ [OP_OPEN_CONFIRM] = {
+- .op_func = (nfsd4op_func)nfsd4_open_confirm,
++ .op_func = nfsd4_open_confirm,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_OPEN_CONFIRM",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
++ .op_rsize_bop = nfsd4_status_stateid_rsize,
+ },
+ [OP_OPEN_DOWNGRADE] = {
+- .op_func = (nfsd4op_func)nfsd4_open_downgrade,
++ .op_func = nfsd4_open_downgrade,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_OPEN_DOWNGRADE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_opendowngradestateid,
+- .op_set_currentstateid = (stateid_setter)nfsd4_set_opendowngradestateid,
++ .op_rsize_bop = nfsd4_status_stateid_rsize,
++ .op_get_currentstateid = nfsd4_get_opendowngradestateid,
++ .op_set_currentstateid = nfsd4_set_opendowngradestateid,
+ },
+ [OP_PUTFH] = {
+- .op_func = (nfsd4op_func)nfsd4_putfh,
++ .op_func = nfsd4_putfh,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID,
+ .op_name = "OP_PUTFH",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_PUTPUBFH] = {
+- .op_func = (nfsd4op_func)nfsd4_putrootfh,
++ .op_func = nfsd4_putrootfh,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID,
+ .op_name = "OP_PUTPUBFH",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_PUTROOTFH] = {
+- .op_func = (nfsd4op_func)nfsd4_putrootfh,
++ .op_func = nfsd4_putrootfh,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID,
+ .op_name = "OP_PUTROOTFH",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_READ] = {
+- .op_func = (nfsd4op_func)nfsd4_read,
++ .op_func = nfsd4_read,
+ .op_name = "OP_READ",
+ .op_rsize_bop = (nfsd4op_rsize)nfsd4_read_rsize,
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_readstateid,
++ .op_get_currentstateid = nfsd4_get_readstateid,
+ },
+ [OP_READDIR] = {
+- .op_func = (nfsd4op_func)nfsd4_readdir,
++ .op_func = nfsd4_readdir,
+ .op_name = "OP_READDIR",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_readdir_rsize,
++ .op_rsize_bop = nfsd4_readdir_rsize,
+ },
+ [OP_READLINK] = {
+- .op_func = (nfsd4op_func)nfsd4_readlink,
++ .op_func = nfsd4_readlink,
+ .op_name = "OP_READLINK",
+ },
+ [OP_REMOVE] = {
+- .op_func = (nfsd4op_func)nfsd4_remove,
++ .op_func = nfsd4_remove,
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_REMOVE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_remove_rsize,
++ .op_rsize_bop = nfsd4_remove_rsize,
+ },
+ [OP_RENAME] = {
+- .op_func = (nfsd4op_func)nfsd4_rename,
++ .op_func = nfsd4_rename,
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_RENAME",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_rename_rsize,
++ .op_rsize_bop = nfsd4_rename_rsize,
+ },
+ [OP_RENEW] = {
+- .op_func = (nfsd4op_func)nfsd4_renew,
++ .op_func = nfsd4_renew,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_RENEW",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+
+ },
+ [OP_RESTOREFH] = {
+- .op_func = (nfsd4op_func)nfsd4_restorefh,
++ .op_func = nfsd4_restorefh,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_IS_PUTFH_LIKE | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_RESTOREFH",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_SAVEFH] = {
+- .op_func = (nfsd4op_func)nfsd4_savefh,
++ .op_func = nfsd4_savefh,
+ .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_SAVEFH",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_SECINFO] = {
+- .op_func = (nfsd4op_func)nfsd4_secinfo,
++ .op_func = nfsd4_secinfo,
+ .op_flags = OP_HANDLES_WRONGSEC,
+ .op_name = "OP_SECINFO",
+ },
+ [OP_SETATTR] = {
+- .op_func = (nfsd4op_func)nfsd4_setattr,
++ .op_func = nfsd4_setattr,
+ .op_name = "OP_SETATTR",
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_setattr_rsize,
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_setattrstateid,
++ .op_rsize_bop = nfsd4_setattr_rsize,
++ .op_get_currentstateid = nfsd4_get_setattrstateid,
+ },
+ [OP_SETCLIENTID] = {
+- .op_func = (nfsd4op_func)nfsd4_setclientid,
++ .op_func = nfsd4_setclientid,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_SETCLIENTID",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_setclientid_rsize,
++ .op_rsize_bop = nfsd4_setclientid_rsize,
+ },
+ [OP_SETCLIENTID_CONFIRM] = {
+- .op_func = (nfsd4op_func)nfsd4_setclientid_confirm,
++ .op_func = nfsd4_setclientid_confirm,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_SETCLIENTID_CONFIRM",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_VERIFY] = {
+- .op_func = (nfsd4op_func)nfsd4_verify,
++ .op_func = nfsd4_verify,
+ .op_name = "OP_VERIFY",
+ },
+ [OP_WRITE] = {
+- .op_func = (nfsd4op_func)nfsd4_write,
++ .op_func = nfsd4_write,
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_WRITE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_write_rsize,
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_writestateid,
++ .op_rsize_bop = nfsd4_write_rsize,
++ .op_get_currentstateid = nfsd4_get_writestateid,
+ },
+ [OP_RELEASE_LOCKOWNER] = {
+- .op_func = (nfsd4op_func)nfsd4_release_lockowner,
++ .op_func = nfsd4_release_lockowner,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
+ | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_RELEASE_LOCKOWNER",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+
+ /* NFSv4.1 operations */
+ [OP_EXCHANGE_ID] = {
+- .op_func = (nfsd4op_func)nfsd4_exchange_id,
++ .op_func = nfsd4_exchange_id,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP
+ | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_EXCHANGE_ID",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_exchange_id_rsize,
++ .op_rsize_bop = nfsd4_exchange_id_rsize,
+ },
+ [OP_BACKCHANNEL_CTL] = {
+- .op_func = (nfsd4op_func)nfsd4_backchannel_ctl,
++ .op_func = nfsd4_backchannel_ctl,
+ .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_BACKCHANNEL_CTL",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_BIND_CONN_TO_SESSION] = {
+- .op_func = (nfsd4op_func)nfsd4_bind_conn_to_session,
++ .op_func = nfsd4_bind_conn_to_session,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP
+ | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_BIND_CONN_TO_SESSION",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_bind_conn_to_session_rsize,
++ .op_rsize_bop = nfsd4_bind_conn_to_session_rsize,
+ },
+ [OP_CREATE_SESSION] = {
+- .op_func = (nfsd4op_func)nfsd4_create_session,
++ .op_func = nfsd4_create_session,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP
+ | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_CREATE_SESSION",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_create_session_rsize,
++ .op_rsize_bop = nfsd4_create_session_rsize,
+ },
+ [OP_DESTROY_SESSION] = {
+- .op_func = (nfsd4op_func)nfsd4_destroy_session,
++ .op_func = nfsd4_destroy_session,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP
+ | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_DESTROY_SESSION",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_SEQUENCE] = {
+- .op_func = (nfsd4op_func)nfsd4_sequence,
++ .op_func = nfsd4_sequence,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
+ .op_name = "OP_SEQUENCE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_sequence_rsize,
++ .op_rsize_bop = nfsd4_sequence_rsize,
+ },
+ [OP_DESTROY_CLIENTID] = {
+- .op_func = (nfsd4op_func)nfsd4_destroy_clientid,
++ .op_func = nfsd4_destroy_clientid,
+ .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP
+ | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_DESTROY_CLIENTID",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_RECLAIM_COMPLETE] = {
+- .op_func = (nfsd4op_func)nfsd4_reclaim_complete,
++ .op_func = nfsd4_reclaim_complete,
+ .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_RECLAIM_COMPLETE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_SECINFO_NO_NAME] = {
+- .op_func = (nfsd4op_func)nfsd4_secinfo_no_name,
++ .op_func = nfsd4_secinfo_no_name,
+ .op_flags = OP_HANDLES_WRONGSEC,
+ .op_name = "OP_SECINFO_NO_NAME",
+ },
+ [OP_TEST_STATEID] = {
+- .op_func = (nfsd4op_func)nfsd4_test_stateid,
++ .op_func = nfsd4_test_stateid,
+ .op_flags = ALLOWED_WITHOUT_FH,
+ .op_name = "OP_TEST_STATEID",
+ },
+ [OP_FREE_STATEID] = {
+- .op_func = (nfsd4op_func)nfsd4_free_stateid,
++ .op_func = nfsd4_free_stateid,
+ .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING,
+ .op_name = "OP_FREE_STATEID",
+- .op_get_currentstateid = (stateid_getter)nfsd4_get_freestateid,
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_get_currentstateid = nfsd4_get_freestateid,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ #ifdef CONFIG_NFSD_PNFS
+ [OP_GETDEVICEINFO] = {
+- .op_func = (nfsd4op_func)nfsd4_getdeviceinfo,
++ .op_func = nfsd4_getdeviceinfo,
+ .op_flags = ALLOWED_WITHOUT_FH,
+ .op_name = "OP_GETDEVICEINFO",
+ },
+ [OP_LAYOUTGET] = {
+- .op_func = (nfsd4op_func)nfsd4_layoutget,
++ .op_func = nfsd4_layoutget,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_LAYOUTGET",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutget_rsize,
++ .op_rsize_bop = nfsd4_layoutget_rsize,
+ },
+ [OP_LAYOUTCOMMIT] = {
+- .op_func = (nfsd4op_func)nfsd4_layoutcommit,
++ .op_func = nfsd4_layoutcommit,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_LAYOUTCOMMIT",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutcommit_rsize,
++ .op_rsize_bop = nfsd4_layoutcommit_rsize,
+ },
+ [OP_LAYOUTRETURN] = {
+- .op_func = (nfsd4op_func)nfsd4_layoutreturn,
++ .op_func = nfsd4_layoutreturn,
+ .op_flags = OP_MODIFIES_SOMETHING,
+ .op_name = "OP_LAYOUTRETURN",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutreturn_rsize,
++ .op_rsize_bop = nfsd4_layoutreturn_rsize,
+ },
+ #endif /* CONFIG_NFSD_PNFS */
+
+ /* NFSv4.2 operations */
+ [OP_ALLOCATE] = {
+- .op_func = (nfsd4op_func)nfsd4_allocate,
++ .op_func = nfsd4_allocate,
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_ALLOCATE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_DEALLOCATE] = {
+- .op_func = (nfsd4op_func)nfsd4_deallocate,
++ .op_func = nfsd4_deallocate,
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_DEALLOCATE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_CLONE] = {
+- .op_func = (nfsd4op_func)nfsd4_clone,
++ .op_func = nfsd4_clone,
+ .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
+ .op_name = "OP_CLONE",
+- .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
++ .op_rsize_bop = nfsd4_only_status_rsize,
+ },
+ [OP_SEEK] = {
+- .op_func = (nfsd4op_func)nfsd4_seek,
++ .op_func = nfsd4_seek,
+ .op_name = "OP_SEEK",
+ },
+ };
+@@ -2368,17 +2404,17 @@ struct nfsd4_voidargs { int dummy; };
+
+ static struct svc_procedure nfsd_procedures4[2] = {
+ [NFSPROC4_NULL] = {
+- .pc_func = (svc_procfunc) nfsd4_proc_null,
+- .pc_encode = (kxdrproc_t) nfs4svc_encode_voidres,
++ .pc_func = nfsd4_proc_null,
++ .pc_encode = nfs4svc_encode_voidres,
+ .pc_argsize = sizeof(struct nfsd4_voidargs),
+ .pc_ressize = sizeof(struct nfsd4_voidres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = 1,
+ },
+ [NFSPROC4_COMPOUND] = {
+- .pc_func = (svc_procfunc) nfsd4_proc_compound,
+- .pc_decode = (kxdrproc_t) nfs4svc_decode_compoundargs,
+- .pc_encode = (kxdrproc_t) nfs4svc_encode_compoundres,
++ .pc_func = nfsd4_proc_compound,
++ .pc_decode = nfs4svc_decode_compoundargs,
++ .pc_encode = nfs4svc_encode_compoundres,
+ .pc_argsize = sizeof(struct nfsd4_compoundargs),
+ .pc_ressize = sizeof(struct nfsd4_compoundres),
+ .pc_release = nfsd4_release_compoundargs,
+diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
+index c484a2b6..a1e3dd7 100644
+--- a/fs/nfsd/nfs4state.c
++++ b/fs/nfsd/nfs4state.c
+@@ -2362,8 +2362,9 @@ static bool client_has_state(struct nfs4_client *clp)
+ __be32
+ nfsd4_exchange_id(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_exchange_id *exid)
++ void *_exid)
+ {
++ struct nfsd4_exchange_id *exid = _exid;
+ struct nfs4_client *conf, *new;
+ struct nfs4_client *unconf = NULL;
+ __be32 status;
+@@ -2633,8 +2634,9 @@ static __be32 nfsd4_check_cb_sec(struct nfsd4_cb_sec *cbs)
+ __be32
+ nfsd4_create_session(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_create_session *cr_ses)
++ void *_cr_ses)
+ {
++ struct nfsd4_create_session *cr_ses = _cr_ses;
+ struct sockaddr *sa = svc_addr(rqstp);
+ struct nfs4_client *conf, *unconf;
+ struct nfs4_client *old = NULL;
+@@ -2759,8 +2761,9 @@ static __be32 nfsd4_map_bcts_dir(u32 *dir)
+ return nfserr_inval;
+ }
+
+-__be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_backchannel_ctl *bc)
++__be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, void *_bc)
+ {
++ struct nfsd4_backchannel_ctl *bc = _bc;
+ struct nfsd4_session *session = cstate->session;
+ struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
+ __be32 status;
+@@ -2780,8 +2783,9 @@ __be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state
+
+ __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_bind_conn_to_session *bcts)
++ void *_bcts)
+ {
++ struct nfsd4_bind_conn_to_session *bcts = _bcts;
+ __be32 status;
+ struct nfsd4_conn *conn;
+ struct nfsd4_session *session;
+@@ -2823,8 +2827,9 @@ static bool nfsd4_compound_in_session(struct nfsd4_session *session, struct nfs4
+ __be32
+ nfsd4_destroy_session(struct svc_rqst *r,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_destroy_session *sessionid)
++ void *_sessionid)
+ {
++ struct nfsd4_destroy_session *sessionid = _sessionid;
+ struct nfsd4_session *ses;
+ __be32 status;
+ int ref_held_by_me = 0;
+@@ -2920,8 +2925,9 @@ static bool nfsd4_request_too_big(struct svc_rqst *rqstp,
+ __be32
+ nfsd4_sequence(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_sequence *seq)
++ void *_seq)
+ {
++ struct nfsd4_sequence *seq = _seq;
+ struct nfsd4_compoundres *resp = rqstp->rq_resp;
+ struct xdr_stream *xdr = &resp->xdr;
+ struct nfsd4_session *session;
+@@ -3055,8 +3061,9 @@ nfsd4_sequence_done(struct nfsd4_compoundres *resp)
+ }
+
+ __be32
+-nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_destroy_clientid *dc)
++nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, void *_dc)
+ {
++ struct nfsd4_destroy_clientid *dc = _dc;
+ struct nfs4_client *conf, *unconf;
+ struct nfs4_client *clp = NULL;
+ __be32 status = 0;
+@@ -3096,8 +3103,9 @@ out:
+ }
+
+ __be32
+-nfsd4_reclaim_complete(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_reclaim_complete *rc)
++nfsd4_reclaim_complete(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, void *_rc)
+ {
++ struct nfsd4_reclaim_complete *rc = _rc;
+ __be32 status = 0;
+
+ if (rc->rca_one_fs) {
+@@ -3134,8 +3142,9 @@ out:
+
+ __be32
+ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_setclientid *setclid)
++ void *_setclid)
+ {
++ struct nfsd4_setclientid *setclid = _setclid;
+ struct xdr_netobj clname = setclid->se_name;
+ nfs4_verifier clverifier = setclid->se_verf;
+ struct nfs4_client *conf, *new;
+@@ -3193,8 +3202,9 @@ out:
+ __be32
+ nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_setclientid_confirm *setclientid_confirm)
++ void *_setclientid_confirm)
+ {
++ struct nfsd4_setclientid_confirm *setclientid_confirm = _setclientid_confirm;
+ struct nfs4_client *conf, *unconf;
+ struct nfs4_client *old = NULL;
+ nfs4_verifier confirm = setclientid_confirm->sc_confirm;
+@@ -4431,8 +4441,9 @@ void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate,
+
+ __be32
+ nfsd4_renew(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- clientid_t *clid)
++ void *_clid)
+ {
++ clientid_t *clid = _clid;
+ struct nfs4_client *clp;
+ __be32 status;
+ struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
+@@ -4888,8 +4899,9 @@ out:
+ */
+ __be32
+ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_test_stateid *test_stateid)
++ void *_test_stateid)
+ {
++ struct nfsd4_test_stateid *test_stateid = _test_stateid;
+ struct nfsd4_test_stateid_id *stateid;
+ struct nfs4_client *cl = cstate->session->se_client;
+
+@@ -4902,8 +4914,9 @@ nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+
+ __be32
+ nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_free_stateid *free_stateid)
++ void *_free_stateid)
+ {
++ struct nfsd4_free_stateid *free_stateid = _free_stateid;
+ stateid_t *stateid = &free_stateid->fr_stateid;
+ struct nfs4_stid *s;
+ struct nfs4_delegation *dp;
+@@ -5041,8 +5054,9 @@ static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cs
+
+ __be32
+ nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_open_confirm *oc)
++ void *_oc)
+ {
++ struct nfsd4_open_confirm *oc = _oc;
+ __be32 status;
+ struct nfs4_openowner *oo;
+ struct nfs4_ol_stateid *stp;
+@@ -5110,8 +5124,9 @@ static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_ac
+ __be32
+ nfsd4_open_downgrade(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_open_downgrade *od)
++ void *_od)
+ {
++ struct nfsd4_open_downgrade *od = _od;
+ __be32 status;
+ struct nfs4_ol_stateid *stp;
+ struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
+@@ -5179,8 +5194,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s)
+ */
+ __be32
+ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_close *close)
++ void *_close)
+ {
++ struct nfsd4_close *close = _close;
+ __be32 status;
+ struct nfs4_ol_stateid *stp;
+ struct net *net = SVC_NET(rqstp);
+@@ -5209,8 +5225,9 @@ out:
+
+ __be32
+ nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_delegreturn *dr)
++ void *_dr)
+ {
++ struct nfsd4_delegreturn *dr = _dr;
+ struct nfs4_delegation *dp;
+ stateid_t *stateid = &dr->dr_stateid;
+ struct nfs4_stid *s;
+@@ -5544,8 +5561,9 @@ out:
+ */
+ __be32
+ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_lock *lock)
++ void *_lock)
+ {
++ struct nfsd4_lock *lock = _lock;
+ struct nfs4_openowner *open_sop = NULL;
+ struct nfs4_lockowner *lock_sop = NULL;
+ struct nfs4_ol_stateid *lock_stp = NULL;
+@@ -5748,8 +5766,9 @@ static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct
+ */
+ __be32
+ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_lockt *lockt)
++ void *_lockt)
+ {
++ struct nfsd4_lockt *lockt = _lockt;
+ struct file_lock *file_lock = NULL;
+ struct nfs4_lockowner *lo = NULL;
+ __be32 status;
+@@ -5821,8 +5840,9 @@ out:
+
+ __be32
+ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
+- struct nfsd4_locku *locku)
++ void *_locku)
+ {
++ struct nfsd4_locku *locku = _locku;
+ struct nfs4_ol_stateid *stp;
+ struct file *filp = NULL;
+ struct file_lock *file_lock = NULL;
+@@ -5928,8 +5948,9 @@ check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner)
+ __be32
+ nfsd4_release_lockowner(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *cstate,
+- struct nfsd4_release_lockowner *rlockowner)
++ void *_rlockowner)
+ {
++ struct nfsd4_release_lockowner *rlockowner = _rlockowner;
+ clientid_t *clid = &rlockowner->rl_clientid;
+ struct nfs4_stateowner *sop;
+ struct nfs4_lockowner *lo = NULL;
+@@ -6873,26 +6894,34 @@ clear_current_stateid(struct nfsd4_compound_state *cstate)
+ * functions to set current state id
+ */
+ void
+-nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *odp)
++nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, void *_odp)
+ {
++ struct nfsd4_open_downgrade *odp = _odp;
++
+ put_stateid(cstate, &odp->od_stateid);
+ }
+
+ void
+-nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, struct nfsd4_open *open)
++nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, void *_open)
+ {
++ struct nfsd4_open *open = _open;
++
+ put_stateid(cstate, &open->op_stateid);
+ }
+
+ void
+-nfsd4_set_closestateid(struct nfsd4_compound_state *cstate, struct nfsd4_close *close)
++nfsd4_set_closestateid(struct nfsd4_compound_state *cstate, void *_close)
+ {
++ struct nfsd4_close *close = _close;
++
+ put_stateid(cstate, &close->cl_stateid);
+ }
+
+ void
+-nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lock)
++nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, void *_lock)
+ {
++ struct nfsd4_lock *lock = _lock;
++
+ put_stateid(cstate, &lock->lk_resp_stateid);
+ }
+
+@@ -6901,49 +6930,65 @@ nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lo
+ */
+
+ void
+-nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *odp)
++nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, void *_odp)
+ {
++ struct nfsd4_open_downgrade *odp = _odp;
++
+ get_stateid(cstate, &odp->od_stateid);
+ }
+
+ void
+-nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *cstate, struct nfsd4_delegreturn *drp)
++nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *cstate, void *_drp)
+ {
++ struct nfsd4_delegreturn *drp = _drp;
++
+ get_stateid(cstate, &drp->dr_stateid);
+ }
+
+ void
+-nfsd4_get_freestateid(struct nfsd4_compound_state *cstate, struct nfsd4_free_stateid *fsp)
++nfsd4_get_freestateid(struct nfsd4_compound_state *cstate, void *_fsp)
+ {
++ struct nfsd4_free_stateid *fsp = _fsp;
++
+ get_stateid(cstate, &fsp->fr_stateid);
+ }
+
+ void
+-nfsd4_get_setattrstateid(struct nfsd4_compound_state *cstate, struct nfsd4_setattr *setattr)
++nfsd4_get_setattrstateid(struct nfsd4_compound_state *cstate, void *_setattr)
+ {
++ struct nfsd4_setattr *setattr = _setattr;
++
+ get_stateid(cstate, &setattr->sa_stateid);
+ }
+
+ void
+-nfsd4_get_closestateid(struct nfsd4_compound_state *cstate, struct nfsd4_close *close)
++nfsd4_get_closestateid(struct nfsd4_compound_state *cstate, void *_close)
+ {
++ struct nfsd4_close *close = _close;
++
+ get_stateid(cstate, &close->cl_stateid);
+ }
+
+ void
+-nfsd4_get_lockustateid(struct nfsd4_compound_state *cstate, struct nfsd4_locku *locku)
++nfsd4_get_lockustateid(struct nfsd4_compound_state *cstate, void *_locku)
+ {
++ struct nfsd4_locku *locku = _locku;
++
+ get_stateid(cstate, &locku->lu_stateid);
+ }
+
+ void
+-nfsd4_get_readstateid(struct nfsd4_compound_state *cstate, struct nfsd4_read *read)
++nfsd4_get_readstateid(struct nfsd4_compound_state *cstate, void *_read)
+ {
++ struct nfsd4_read *read = _read;
++
+ get_stateid(cstate, &read->rd_stateid);
+ }
+
+ void
+-nfsd4_get_writestateid(struct nfsd4_compound_state *cstate, struct nfsd4_write *write)
++nfsd4_get_writestateid(struct nfsd4_compound_state *cstate, void *_write)
+ {
++ struct nfsd4_write *write = _write;
++
+ get_stateid(cstate, &write->wr_stateid);
+ }
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
-index 1293520..4cc2062 100644
+index 1600ec4..2c62d8d 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
-@@ -1706,7 +1706,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
+@@ -447,8 +447,9 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval,
+ }
+
+ static __be32
+-nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, stateid_t *sid)
++nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, void *_sid)
+ {
++ stateid_t *sid = _sid;
+ DECODE_HEAD;
+
+ READ_BUF(sizeof(stateid_t));
+@@ -459,8 +460,9 @@ nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, stateid_t *sid)
+ }
+
+ static __be32
+-nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access)
++nfsd4_decode_access(struct nfsd4_compoundargs *argp, void *_access)
+ {
++ struct nfsd4_access *access = _access;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -469,8 +471,9 @@ nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access
+ DECODE_TAIL;
+ }
+
+-static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_cb_sec *cbs)
++static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, void *_cbs)
+ {
++ struct nfsd4_cb_sec *cbs = _cbs;
+ DECODE_HEAD;
+ u32 dummy, uid, gid;
+ char *machine_name;
+@@ -549,8 +552,9 @@ static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_
+ DECODE_TAIL;
+ }
+
+-static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, struct nfsd4_backchannel_ctl *bc)
++static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, void *_bc)
+ {
++ struct nfsd4_backchannel_ctl *bc = _bc;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -560,8 +564,9 @@ static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, stru
+ DECODE_TAIL;
+ }
+
+-static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts)
++static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, void *_bcts)
+ {
++ struct nfsd4_bind_conn_to_session *bcts = _bcts;
+ DECODE_HEAD;
+
+ READ_BUF(NFS4_MAX_SESSIONID_LEN + 8);
+@@ -573,8 +578,9 @@ static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp,
+ }
+
+ static __be32
+-nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close)
++nfsd4_decode_close(struct nfsd4_compoundargs *argp, void *_close)
+ {
++ struct nfsd4_close *close = _close;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -586,8 +592,9 @@ nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close)
+
+
+ static __be32
+-nfsd4_decode_commit(struct nfsd4_compoundargs *argp, struct nfsd4_commit *commit)
++nfsd4_decode_commit(struct nfsd4_compoundargs *argp, void *_commit)
+ {
++ struct nfsd4_commit *commit = _commit;
+ DECODE_HEAD;
+
+ READ_BUF(12);
+@@ -598,8 +605,9 @@ nfsd4_decode_commit(struct nfsd4_compoundargs *argp, struct nfsd4_commit *commit
+ }
+
+ static __be32
+-nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create)
++nfsd4_decode_create(struct nfsd4_compoundargs *argp, void *_create)
+ {
++ struct nfsd4_create *create = _create;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -642,20 +650,25 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create
+ }
+
+ static inline __be32
+-nfsd4_decode_delegreturn(struct nfsd4_compoundargs *argp, struct nfsd4_delegreturn *dr)
++nfsd4_decode_delegreturn(struct nfsd4_compoundargs *argp, void *_dr)
+ {
++ struct nfsd4_delegreturn *dr = _dr;
++
+ return nfsd4_decode_stateid(argp, &dr->dr_stateid);
+ }
+
+ static inline __be32
+-nfsd4_decode_getattr(struct nfsd4_compoundargs *argp, struct nfsd4_getattr *getattr)
++nfsd4_decode_getattr(struct nfsd4_compoundargs *argp, void *_getattr)
+ {
++ struct nfsd4_getattr *getattr = _getattr;
++
+ return nfsd4_decode_bitmap(argp, getattr->ga_bmval);
+ }
+
+ static __be32
+-nfsd4_decode_link(struct nfsd4_compoundargs *argp, struct nfsd4_link *link)
++nfsd4_decode_link(struct nfsd4_compoundargs *argp, void *_link)
+ {
++ struct nfsd4_link *link = _link;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -669,8 +682,9 @@ nfsd4_decode_link(struct nfsd4_compoundargs *argp, struct nfsd4_link *link)
+ }
+
+ static __be32
+-nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock)
++nfsd4_decode_lock(struct nfsd4_compoundargs *argp, void *_lock)
+ {
++ struct nfsd4_lock *lock = _lock;
+ DECODE_HEAD;
+
+ /*
+@@ -709,8 +723,9 @@ nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock)
+ }
+
+ static __be32
+-nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt)
++nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, void *_lockt)
+ {
++ struct nfsd4_lockt *lockt = _lockt;
+ DECODE_HEAD;
+
+ READ_BUF(32);
+@@ -728,8 +743,9 @@ nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt)
+ }
+
+ static __be32
+-nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku)
++nfsd4_decode_locku(struct nfsd4_compoundargs *argp, void *_locku)
+ {
++ struct nfsd4_locku *locku = _locku;
+ DECODE_HEAD;
+
+ READ_BUF(8);
+@@ -748,8 +764,9 @@ nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku)
+ }
+
+ static __be32
+-nfsd4_decode_lookup(struct nfsd4_compoundargs *argp, struct nfsd4_lookup *lookup)
++nfsd4_decode_lookup(struct nfsd4_compoundargs *argp, void *_lookup)
+ {
++ struct nfsd4_lookup *lookup = _lookup;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -847,8 +864,9 @@ xdr_error:
+ }
+
+ static __be32
+-nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
++nfsd4_decode_open(struct nfsd4_compoundargs *argp, void *_open)
+ {
++ struct nfsd4_open *open = _open;
+ DECODE_HEAD;
+ u32 dummy;
+
+@@ -960,8 +978,9 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
+ }
+
+ static __be32
+-nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_open_confirm *open_conf)
++nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, void *_open_conf)
+ {
++ struct nfsd4_open_confirm *open_conf = _open_conf;
+ DECODE_HEAD;
+
+ if (argp->minorversion >= 1)
+@@ -977,8 +996,9 @@ nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_open_con
+ }
+
+ static __be32
+-nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, struct nfsd4_open_downgrade *open_down)
++nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, void *_open_down)
+ {
++ struct nfsd4_open_downgrade *open_down = _open_down;
+ DECODE_HEAD;
+
+ status = nfsd4_decode_stateid(argp, &open_down->od_stateid);
+@@ -997,8 +1017,9 @@ nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, struct nfsd4_open_d
+ }
+
+ static __be32
+-nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, struct nfsd4_putfh *putfh)
++nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, void *_putfh)
+ {
++ struct nfsd4_putfh *putfh = _putfh;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -1020,8 +1041,9 @@ nfsd4_decode_putpubfh(struct nfsd4_compoundargs *argp, void *p)
+ }
+
+ static __be32
+-nfsd4_decode_read(struct nfsd4_compoundargs *argp, struct nfsd4_read *read)
++nfsd4_decode_read(struct nfsd4_compoundargs *argp, void *_read)
+ {
++ struct nfsd4_read *read = _read;
+ DECODE_HEAD;
+
+ status = nfsd4_decode_stateid(argp, &read->rd_stateid);
+@@ -1035,8 +1057,9 @@ nfsd4_decode_read(struct nfsd4_compoundargs *argp, struct nfsd4_read *read)
+ }
+
+ static __be32
+-nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *readdir)
++nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, void *_readdir)
+ {
++ struct nfsd4_readdir *readdir = _readdir;
+ DECODE_HEAD;
+
+ READ_BUF(24);
+@@ -1051,8 +1074,9 @@ nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *read
+ }
+
+ static __be32
+-nfsd4_decode_remove(struct nfsd4_compoundargs *argp, struct nfsd4_remove *remove)
++nfsd4_decode_remove(struct nfsd4_compoundargs *argp, void *_remove)
+ {
++ struct nfsd4_remove *remove = _remove;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -1066,8 +1090,9 @@ nfsd4_decode_remove(struct nfsd4_compoundargs *argp, struct nfsd4_remove *remove
+ }
+
+ static __be32
+-nfsd4_decode_rename(struct nfsd4_compoundargs *argp, struct nfsd4_rename *rename)
++nfsd4_decode_rename(struct nfsd4_compoundargs *argp, void *_rename)
+ {
++ struct nfsd4_rename *rename = _rename;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -1087,7 +1112,7 @@ nfsd4_decode_rename(struct nfsd4_compoundargs *argp, struct nfsd4_rename *rename
+ }
+
+ static __be32
+-nfsd4_decode_renew(struct nfsd4_compoundargs *argp, clientid_t *clientid)
++nfsd4_decode_renew(struct nfsd4_compoundargs *argp, void *clientid)
+ {
+ DECODE_HEAD;
+
+@@ -1102,8 +1127,9 @@ nfsd4_decode_renew(struct nfsd4_compoundargs *argp, clientid_t *clientid)
+
+ static __be32
+ nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp,
+- struct nfsd4_secinfo *secinfo)
++ void *_secinfo)
+ {
++ struct nfsd4_secinfo *secinfo = _secinfo;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -1118,8 +1144,9 @@ nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp,
+- struct nfsd4_secinfo_no_name *sin)
++ void *_sin)
+ {
++ struct nfsd4_secinfo_no_name *sin = _sin;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -1128,8 +1155,9 @@ nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp,
+ }
+
+ static __be32
+-nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *setattr)
++nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, void *_setattr)
+ {
++ struct nfsd4_setattr *setattr = _setattr;
+ __be32 status;
+
+ status = nfsd4_decode_stateid(argp, &setattr->sa_stateid);
+@@ -1140,8 +1168,9 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta
+ }
+
+ static __be32
+-nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid *setclientid)
++nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, void *_setclientid)
+ {
++ struct nfsd4_setclientid *setclientid = _setclientid;
+ DECODE_HEAD;
+
+ if (argp->minorversion >= 1)
+@@ -1170,8 +1199,9 @@ nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclient
+ }
+
+ static __be32
+-nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid_confirm *scd_c)
++nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, void *_scd_c)
+ {
++ struct nfsd4_setclientid_confirm *scd_c = _scd_c;
+ DECODE_HEAD;
+
+ if (argp->minorversion >= 1)
+@@ -1186,8 +1216,9 @@ nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_s
+
+ /* Also used for NVERIFY */
+ static __be32
+-nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify)
++nfsd4_decode_verify(struct nfsd4_compoundargs *argp, void *_verify)
+ {
++ struct nfsd4_verify *verify = _verify;
+ DECODE_HEAD;
+
+ if ((status = nfsd4_decode_bitmap(argp, verify->ve_bmval)))
+@@ -1205,8 +1236,9 @@ nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify
+ }
+
+ static __be32
+-nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write)
++nfsd4_decode_write(struct nfsd4_compoundargs *argp, void *_write)
+ {
++ struct nfsd4_write *write = _write;
+ int avail;
+ int len;
+ DECODE_HEAD;
+@@ -1256,8 +1288,9 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write)
+ }
+
+ static __be32
+-nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_release_lockowner *rlockowner)
++nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, void *_rlockowner)
+ {
++ struct nfsd4_release_lockowner *rlockowner = _rlockowner;
+ DECODE_HEAD;
+
+ if (argp->minorversion >= 1)
+@@ -1276,8 +1309,9 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel
+
+ static __be32
+ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp,
+- struct nfsd4_exchange_id *exid)
++ void *_exid)
+ {
++ struct nfsd4_exchange_id *exid = _exid;
+ int dummy, tmp;
+ DECODE_HEAD;
+
+@@ -1380,8 +1414,9 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_create_session(struct nfsd4_compoundargs *argp,
+- struct nfsd4_create_session *sess)
++ void *_sess)
+ {
++ struct nfsd4_create_session *sess = _sess;
+ DECODE_HEAD;
+ u32 dummy;
+
+@@ -1432,8 +1467,9 @@ nfsd4_decode_create_session(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp,
+- struct nfsd4_destroy_session *destroy_session)
++ void *_destroy_session)
+ {
++ struct nfsd4_destroy_session *destroy_session = _destroy_session;
+ DECODE_HEAD;
+ READ_BUF(NFS4_MAX_SESSIONID_LEN);
+ COPYMEM(destroy_session->sessionid.data, NFS4_MAX_SESSIONID_LEN);
+@@ -1443,8 +1479,9 @@ nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp,
+- struct nfsd4_free_stateid *free_stateid)
++ void *_free_stateid)
+ {
++ struct nfsd4_free_stateid *free_stateid = _free_stateid;
+ DECODE_HEAD;
+
+ READ_BUF(sizeof(stateid_t));
+@@ -1456,8 +1493,9 @@ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_sequence(struct nfsd4_compoundargs *argp,
+- struct nfsd4_sequence *seq)
++ void *_seq)
+ {
++ struct nfsd4_sequence *seq = _seq;
+ DECODE_HEAD;
+
+ READ_BUF(NFS4_MAX_SESSIONID_LEN + 16);
+@@ -1471,8 +1509,9 @@ nfsd4_decode_sequence(struct nfsd4_compoundargs *argp,
+ }
+
+ static __be32
+-nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_stateid *test_stateid)
++nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, void *_test_stateid)
+ {
++ struct nfsd4_test_stateid *test_stateid = _test_stateid;
+ int i;
+ __be32 *p, status;
+ struct nfsd4_test_stateid_id *stateid;
+@@ -1506,8 +1545,9 @@ xdr_error:
+ goto out;
+ }
+
+-static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, struct nfsd4_destroy_clientid *dc)
++static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, void *_dc)
+ {
++ struct nfsd4_destroy_clientid *dc = _dc;
+ DECODE_HEAD;
+
+ READ_BUF(8);
+@@ -1516,8 +1556,9 @@ static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, str
+ DECODE_TAIL;
+ }
+
+-static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, struct nfsd4_reclaim_complete *rc)
++static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, void *_rc)
+ {
++ struct nfsd4_reclaim_complete *rc = _rc;
+ DECODE_HEAD;
+
+ READ_BUF(4);
+@@ -1529,8 +1570,9 @@ static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, str
+ #ifdef CONFIG_NFSD_PNFS
+ static __be32
+ nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp,
+- struct nfsd4_getdeviceinfo *gdev)
++ void *_gdev)
+ {
++ struct nfsd4_getdeviceinfo *gdev = _gdev;
+ DECODE_HEAD;
+ u32 num, i;
+
+@@ -1554,8 +1596,9 @@ nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp,
+- struct nfsd4_layoutget *lgp)
++ void *_lgp)
+ {
++ struct nfsd4_layoutget *lgp = _lgp;
+ DECODE_HEAD;
+
+ READ_BUF(36);
+@@ -1578,8 +1621,9 @@ nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp,
+- struct nfsd4_layoutcommit *lcp)
++ void *_lcp)
+ {
++ struct nfsd4_layoutcommit *lcp = _lcp;
+ DECODE_HEAD;
+ u32 timechange;
+
+@@ -1626,8 +1670,9 @@ nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp,
+- struct nfsd4_layoutreturn *lrp)
++ void *_lrp)
+ {
++ struct nfsd4_layoutreturn *lrp = _lrp;
+ DECODE_HEAD;
+
+ READ_BUF(16);
+@@ -1661,8 +1706,9 @@ nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp,
+
+ static __be32
+ nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp,
+- struct nfsd4_fallocate *fallocate)
++ void *_fallocate)
+ {
++ struct nfsd4_fallocate *fallocate = _fallocate;
+ DECODE_HEAD;
+
+ status = nfsd4_decode_stateid(argp, &fallocate->falloc_stateid);
+@@ -1677,8 +1723,9 @@ nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp,
+ }
+
+ static __be32
+-nfsd4_decode_clone(struct nfsd4_compoundargs *argp, struct nfsd4_clone *clone)
++nfsd4_decode_clone(struct nfsd4_compoundargs *argp, void *_clone)
+ {
++ struct nfsd4_clone *clone = _clone;
+ DECODE_HEAD;
+
+ status = nfsd4_decode_stateid(argp, &clone->cl_src_stateid);
+@@ -1696,8 +1743,9 @@ nfsd4_decode_clone(struct nfsd4_compoundargs *argp, struct nfsd4_clone *clone)
+ }
+
+ static __be32
+-nfsd4_decode_seek(struct nfsd4_compoundargs *argp, struct nfsd4_seek *seek)
++nfsd4_decode_seek(struct nfsd4_compoundargs *argp, void *_seek)
+ {
++ struct nfsd4_seek *seek = _seek;
+ DECODE_HEAD;
+
+ status = nfsd4_decode_stateid(argp, &seek->seek_stateid);
+@@ -1725,88 +1773,88 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *);
-static nfsd4_dec nfsd4_dec_ops[] = {
+- [OP_ACCESS] = (nfsd4_dec)nfsd4_decode_access,
+- [OP_CLOSE] = (nfsd4_dec)nfsd4_decode_close,
+- [OP_COMMIT] = (nfsd4_dec)nfsd4_decode_commit,
+- [OP_CREATE] = (nfsd4_dec)nfsd4_decode_create,
+- [OP_DELEGPURGE] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_DELEGRETURN] = (nfsd4_dec)nfsd4_decode_delegreturn,
+- [OP_GETATTR] = (nfsd4_dec)nfsd4_decode_getattr,
+- [OP_GETFH] = (nfsd4_dec)nfsd4_decode_noop,
+- [OP_LINK] = (nfsd4_dec)nfsd4_decode_link,
+- [OP_LOCK] = (nfsd4_dec)nfsd4_decode_lock,
+- [OP_LOCKT] = (nfsd4_dec)nfsd4_decode_lockt,
+- [OP_LOCKU] = (nfsd4_dec)nfsd4_decode_locku,
+- [OP_LOOKUP] = (nfsd4_dec)nfsd4_decode_lookup,
+- [OP_LOOKUPP] = (nfsd4_dec)nfsd4_decode_noop,
+- [OP_NVERIFY] = (nfsd4_dec)nfsd4_decode_verify,
+- [OP_OPEN] = (nfsd4_dec)nfsd4_decode_open,
+- [OP_OPENATTR] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_OPEN_CONFIRM] = (nfsd4_dec)nfsd4_decode_open_confirm,
+- [OP_OPEN_DOWNGRADE] = (nfsd4_dec)nfsd4_decode_open_downgrade,
+- [OP_PUTFH] = (nfsd4_dec)nfsd4_decode_putfh,
+- [OP_PUTPUBFH] = (nfsd4_dec)nfsd4_decode_putpubfh,
+- [OP_PUTROOTFH] = (nfsd4_dec)nfsd4_decode_noop,
+- [OP_READ] = (nfsd4_dec)nfsd4_decode_read,
+- [OP_READDIR] = (nfsd4_dec)nfsd4_decode_readdir,
+- [OP_READLINK] = (nfsd4_dec)nfsd4_decode_noop,
+- [OP_REMOVE] = (nfsd4_dec)nfsd4_decode_remove,
+- [OP_RENAME] = (nfsd4_dec)nfsd4_decode_rename,
+- [OP_RENEW] = (nfsd4_dec)nfsd4_decode_renew,
+- [OP_RESTOREFH] = (nfsd4_dec)nfsd4_decode_noop,
+- [OP_SAVEFH] = (nfsd4_dec)nfsd4_decode_noop,
+- [OP_SECINFO] = (nfsd4_dec)nfsd4_decode_secinfo,
+- [OP_SETATTR] = (nfsd4_dec)nfsd4_decode_setattr,
+- [OP_SETCLIENTID] = (nfsd4_dec)nfsd4_decode_setclientid,
+- [OP_SETCLIENTID_CONFIRM] = (nfsd4_dec)nfsd4_decode_setclientid_confirm,
+- [OP_VERIFY] = (nfsd4_dec)nfsd4_decode_verify,
+- [OP_WRITE] = (nfsd4_dec)nfsd4_decode_write,
+- [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner,
+static const nfsd4_dec nfsd4_dec_ops[] = {
- [OP_ACCESS] = (nfsd4_dec)nfsd4_decode_access,
- [OP_CLOSE] = (nfsd4_dec)nfsd4_decode_close,
- [OP_COMMIT] = (nfsd4_dec)nfsd4_decode_commit,
++ [OP_ACCESS] = nfsd4_decode_access,
++ [OP_CLOSE] = nfsd4_decode_close,
++ [OP_COMMIT] = nfsd4_decode_commit,
++ [OP_CREATE] = nfsd4_decode_create,
++ [OP_DELEGPURGE] = nfsd4_decode_notsupp,
++ [OP_DELEGRETURN] = nfsd4_decode_delegreturn,
++ [OP_GETATTR] = nfsd4_decode_getattr,
++ [OP_GETFH] = nfsd4_decode_noop,
++ [OP_LINK] = nfsd4_decode_link,
++ [OP_LOCK] = nfsd4_decode_lock,
++ [OP_LOCKT] = nfsd4_decode_lockt,
++ [OP_LOCKU] = nfsd4_decode_locku,
++ [OP_LOOKUP] = nfsd4_decode_lookup,
++ [OP_LOOKUPP] = nfsd4_decode_noop,
++ [OP_NVERIFY] = nfsd4_decode_verify,
++ [OP_OPEN] = nfsd4_decode_open,
++ [OP_OPENATTR] = nfsd4_decode_notsupp,
++ [OP_OPEN_CONFIRM] = nfsd4_decode_open_confirm,
++ [OP_OPEN_DOWNGRADE] = nfsd4_decode_open_downgrade,
++ [OP_PUTFH] = nfsd4_decode_putfh,
++ [OP_PUTPUBFH] = nfsd4_decode_putpubfh,
++ [OP_PUTROOTFH] = nfsd4_decode_noop,
++ [OP_READ] = nfsd4_decode_read,
++ [OP_READDIR] = nfsd4_decode_readdir,
++ [OP_READLINK] = nfsd4_decode_noop,
++ [OP_REMOVE] = nfsd4_decode_remove,
++ [OP_RENAME] = nfsd4_decode_rename,
++ [OP_RENEW] = nfsd4_decode_renew,
++ [OP_RESTOREFH] = nfsd4_decode_noop,
++ [OP_SAVEFH] = nfsd4_decode_noop,
++ [OP_SECINFO] = nfsd4_decode_secinfo,
++ [OP_SETATTR] = nfsd4_decode_setattr,
++ [OP_SETCLIENTID] = nfsd4_decode_setclientid,
++ [OP_SETCLIENTID_CONFIRM] = nfsd4_decode_setclientid_confirm,
++ [OP_VERIFY] = nfsd4_decode_verify,
++ [OP_WRITE] = nfsd4_decode_write,
++ [OP_RELEASE_LOCKOWNER] = nfsd4_decode_release_lockowner,
+
+ /* new operations for NFSv4.1 */
+- [OP_BACKCHANNEL_CTL] = (nfsd4_dec)nfsd4_decode_backchannel_ctl,
+- [OP_BIND_CONN_TO_SESSION]= (nfsd4_dec)nfsd4_decode_bind_conn_to_session,
+- [OP_EXCHANGE_ID] = (nfsd4_dec)nfsd4_decode_exchange_id,
+- [OP_CREATE_SESSION] = (nfsd4_dec)nfsd4_decode_create_session,
+- [OP_DESTROY_SESSION] = (nfsd4_dec)nfsd4_decode_destroy_session,
+- [OP_FREE_STATEID] = (nfsd4_dec)nfsd4_decode_free_stateid,
+- [OP_GET_DIR_DELEGATION] = (nfsd4_dec)nfsd4_decode_notsupp,
++ [OP_BACKCHANNEL_CTL] = nfsd4_decode_backchannel_ctl,
++ [OP_BIND_CONN_TO_SESSION]= nfsd4_decode_bind_conn_to_session,
++ [OP_EXCHANGE_ID] = nfsd4_decode_exchange_id,
++ [OP_CREATE_SESSION] = nfsd4_decode_create_session,
++ [OP_DESTROY_SESSION] = nfsd4_decode_destroy_session,
++ [OP_FREE_STATEID] = nfsd4_decode_free_stateid,
++ [OP_GET_DIR_DELEGATION] = nfsd4_decode_notsupp,
+ #ifdef CONFIG_NFSD_PNFS
+- [OP_GETDEVICEINFO] = (nfsd4_dec)nfsd4_decode_getdeviceinfo,
+- [OP_GETDEVICELIST] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_LAYOUTCOMMIT] = (nfsd4_dec)nfsd4_decode_layoutcommit,
+- [OP_LAYOUTGET] = (nfsd4_dec)nfsd4_decode_layoutget,
+- [OP_LAYOUTRETURN] = (nfsd4_dec)nfsd4_decode_layoutreturn,
++ [OP_GETDEVICEINFO] = nfsd4_decode_getdeviceinfo,
++ [OP_GETDEVICELIST] = nfsd4_decode_notsupp,
++ [OP_LAYOUTCOMMIT] = nfsd4_decode_layoutcommit,
++ [OP_LAYOUTGET] = nfsd4_decode_layoutget,
++ [OP_LAYOUTRETURN] = nfsd4_decode_layoutreturn,
+ #else
+- [OP_GETDEVICEINFO] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_GETDEVICELIST] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_LAYOUTCOMMIT] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_LAYOUTGET] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_LAYOUTRETURN] = (nfsd4_dec)nfsd4_decode_notsupp,
++ [OP_GETDEVICEINFO] = nfsd4_decode_notsupp,
++ [OP_GETDEVICELIST] = nfsd4_decode_notsupp,
++ [OP_LAYOUTCOMMIT] = nfsd4_decode_notsupp,
++ [OP_LAYOUTGET] = nfsd4_decode_notsupp,
++ [OP_LAYOUTRETURN] = nfsd4_decode_notsupp,
+ #endif
+- [OP_SECINFO_NO_NAME] = (nfsd4_dec)nfsd4_decode_secinfo_no_name,
+- [OP_SEQUENCE] = (nfsd4_dec)nfsd4_decode_sequence,
+- [OP_SET_SSV] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_TEST_STATEID] = (nfsd4_dec)nfsd4_decode_test_stateid,
+- [OP_WANT_DELEGATION] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_DESTROY_CLIENTID] = (nfsd4_dec)nfsd4_decode_destroy_clientid,
+- [OP_RECLAIM_COMPLETE] = (nfsd4_dec)nfsd4_decode_reclaim_complete,
++ [OP_SECINFO_NO_NAME] = nfsd4_decode_secinfo_no_name,
++ [OP_SEQUENCE] = nfsd4_decode_sequence,
++ [OP_SET_SSV] = nfsd4_decode_notsupp,
++ [OP_TEST_STATEID] = nfsd4_decode_test_stateid,
++ [OP_WANT_DELEGATION] = nfsd4_decode_notsupp,
++ [OP_DESTROY_CLIENTID] = nfsd4_decode_destroy_clientid,
++ [OP_RECLAIM_COMPLETE] = nfsd4_decode_reclaim_complete,
+
+ /* new operations for NFSv4.2 */
+- [OP_ALLOCATE] = (nfsd4_dec)nfsd4_decode_fallocate,
+- [OP_COPY] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_COPY_NOTIFY] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_DEALLOCATE] = (nfsd4_dec)nfsd4_decode_fallocate,
+- [OP_IO_ADVISE] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_LAYOUTERROR] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_LAYOUTSTATS] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_OFFLOAD_CANCEL] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_OFFLOAD_STATUS] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_READ_PLUS] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_SEEK] = (nfsd4_dec)nfsd4_decode_seek,
+- [OP_WRITE_SAME] = (nfsd4_dec)nfsd4_decode_notsupp,
+- [OP_CLONE] = (nfsd4_dec)nfsd4_decode_clone,
++ [OP_ALLOCATE] = nfsd4_decode_fallocate,
++ [OP_COPY] = nfsd4_decode_notsupp,
++ [OP_COPY_NOTIFY] = nfsd4_decode_notsupp,
++ [OP_DEALLOCATE] = nfsd4_decode_fallocate,
++ [OP_IO_ADVISE] = nfsd4_decode_notsupp,
++ [OP_LAYOUTERROR] = nfsd4_decode_notsupp,
++ [OP_LAYOUTSTATS] = nfsd4_decode_notsupp,
++ [OP_OFFLOAD_CANCEL] = nfsd4_decode_notsupp,
++ [OP_OFFLOAD_STATUS] = nfsd4_decode_notsupp,
++ [OP_READ_PLUS] = nfsd4_decode_notsupp,
++ [OP_SEEK] = nfsd4_decode_seek,
++ [OP_WRITE_SAME] = nfsd4_decode_notsupp,
++ [OP_CLONE] = nfsd4_decode_clone,
+ };
+
+ static inline bool
+@@ -3036,8 +3084,9 @@ nfsd4_encode_stateid(struct xdr_stream *xdr, stateid_t *sid)
+ }
+
+ static __be32
+-nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_access *access)
++nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, void *_access)
+ {
++ struct nfsd4_access *access = _access;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3051,8 +3100,9 @@ nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
+ return nfserr;
+ }
+
+-static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_bind_conn_to_session *bcts)
++static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp, __be32 nfserr, void *_bcts)
+ {
++ struct nfsd4_bind_conn_to_session *bcts = _bcts;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3070,8 +3120,10 @@ static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp,
+ }
+
+ static __be32
+-nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_close *close)
++nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, void *_close)
+ {
++ struct nfsd4_close *close = _close;
++
+ struct xdr_stream *xdr = &resp->xdr;
+
+ if (!nfserr)
+@@ -3082,8 +3134,9 @@ nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_c
+
+
+ static __be32
+-nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_commit *commit)
++nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, void *_commit)
+ {
++ struct nfsd4_commit *commit = _commit;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3098,8 +3151,9 @@ nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
+ }
+
+ static __be32
+-nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_create *create)
++nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr, void *_create)
+ {
++ struct nfsd4_create *create = _create;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3115,8 +3169,9 @@ nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
+ }
+
+ static __be32
+-nfsd4_encode_getattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_getattr *getattr)
++nfsd4_encode_getattr(struct nfsd4_compoundres *resp, __be32 nfserr, void *_getattr)
+ {
++ struct nfsd4_getattr *getattr = _getattr;
+ struct svc_fh *fhp = getattr->ga_fhp;
+ struct xdr_stream *xdr = &resp->xdr;
+
+@@ -3130,8 +3185,9 @@ nfsd4_encode_getattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4
+ }
+
+ static __be32
+-nfsd4_encode_getfh(struct nfsd4_compoundres *resp, __be32 nfserr, struct svc_fh **fhpp)
++nfsd4_encode_getfh(struct nfsd4_compoundres *resp, __be32 nfserr, void *_fhpp)
+ {
++ struct svc_fh **fhpp = (struct svc_fh **)_fhpp;
+ struct xdr_stream *xdr = &resp->xdr;
+ struct svc_fh *fhp = *fhpp;
+ unsigned int len;
+@@ -3187,8 +3243,10 @@ again:
+ }
+
+ static __be32
+-nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lock *lock)
++nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lock)
+ {
++ struct nfsd4_lock *lock = _lock;
++
+ struct xdr_stream *xdr = &resp->xdr;
+
+ if (!nfserr)
+@@ -3200,8 +3258,9 @@ nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lo
+ }
+
+ static __be32
+-nfsd4_encode_lockt(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lockt *lockt)
++nfsd4_encode_lockt(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lockt)
+ {
++ struct nfsd4_lockt *lockt = _lockt;
+ struct xdr_stream *xdr = &resp->xdr;
+
+ if (nfserr == nfserr_denied)
+@@ -3210,8 +3269,9 @@ nfsd4_encode_lockt(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_l
+ }
+
+ static __be32
+-nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_locku *locku)
++nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, void *_locku)
+ {
++ struct nfsd4_locku *locku = _locku;
+ struct xdr_stream *xdr = &resp->xdr;
+
+ if (!nfserr)
+@@ -3222,8 +3282,9 @@ nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_l
+
+
+ static __be32
+-nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_link *link)
++nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr, void *_link)
+ {
++ struct nfsd4_link *link = _link;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3238,8 +3299,9 @@ nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_li
+
+
+ static __be32
+-nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open *open)
++nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, void *_open)
+ {
++ struct nfsd4_open *open = _open;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3336,8 +3398,10 @@ out:
+ }
+
+ static __be32
+-nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open_confirm *oc)
++nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, __be32 nfserr, void *_oc)
+ {
++ struct nfsd4_open_confirm *oc = _oc;
++
+ struct xdr_stream *xdr = &resp->xdr;
+
+ if (!nfserr)
+@@ -3347,8 +3411,10 @@ nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, __be32 nfserr, struct
+ }
+
+ static __be32
+-nfsd4_encode_open_downgrade(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open_downgrade *od)
++nfsd4_encode_open_downgrade(struct nfsd4_compoundres *resp, __be32 nfserr, void *_od)
+ {
++ struct nfsd4_open_downgrade *od = _od;
++
+ struct xdr_stream *xdr = &resp->xdr;
+
+ if (!nfserr)
+@@ -3478,9 +3544,9 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
+ }
+
+ static __be32
+-nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_read *read)
++nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr, void *_read)
+ {
++ struct nfsd4_read *read = _read;
+ unsigned long maxcount;
+ struct xdr_stream *xdr = &resp->xdr;
+ struct file *file = read->rd_filp;
+@@ -3532,8 +3598,9 @@ out:
+ }
+
+ static __be32
+-nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_readlink *readlink)
++nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, void *_readlink)
+ {
++ struct nfsd4_readlink *readlink = _readlink;
+ int maxcount;
+ __be32 wire_count;
+ int zero = 0;
+@@ -3577,8 +3644,9 @@ nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd
+ }
+
+ static __be32
+-nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_readdir *readdir)
++nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, void *_readdir)
+ {
++ struct nfsd4_readdir *readdir = _readdir;
+ int maxcount;
+ int bytes_left;
+ loff_t offset;
+@@ -3670,8 +3738,9 @@ err_no_verf:
+ }
+
+ static __be32
+-nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_remove *remove)
++nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, void *_remove)
+ {
++ struct nfsd4_remove *remove = _remove;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3685,8 +3754,9 @@ nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
+ }
+
+ static __be32
+-nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_rename *rename)
++nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, void *_rename)
+ {
++ struct nfsd4_rename *rename = _rename;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3702,8 +3772,9 @@ nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
+
+ static __be32
+ nfsd4_do_encode_secinfo(struct xdr_stream *xdr,
+- __be32 nfserr, struct svc_export *exp)
++ __be32 nfserr, void *_exp)
+ {
++ struct svc_export *exp = _exp;
+ u32 i, nflavs, supported;
+ struct exp_flavor_info *flavs;
+ struct exp_flavor_info def_flavs[2];
+@@ -3778,8 +3849,9 @@ out:
+
+ static __be32
+ nfsd4_encode_secinfo(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_secinfo *secinfo)
++ void *_secinfo)
+ {
++ struct nfsd4_secinfo *secinfo = _secinfo;
+ struct xdr_stream *xdr = &resp->xdr;
+
+ return nfsd4_do_encode_secinfo(xdr, nfserr, secinfo->si_exp);
+@@ -3787,8 +3859,9 @@ nfsd4_encode_secinfo(struct nfsd4_compoundres *resp, __be32 nfserr,
+
+ static __be32
+ nfsd4_encode_secinfo_no_name(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_secinfo_no_name *secinfo)
++ void *_secinfo)
+ {
++ struct nfsd4_secinfo_no_name *secinfo = _secinfo;
+ struct xdr_stream *xdr = &resp->xdr;
+
+ return nfsd4_do_encode_secinfo(xdr, nfserr, secinfo->sin_exp);
+@@ -3799,8 +3872,9 @@ nfsd4_encode_secinfo_no_name(struct nfsd4_compoundres *resp, __be32 nfserr,
+ * regardless of the error status.
+ */
+ static __be32
+-nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_setattr *setattr)
++nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, void *_setattr)
+ {
++ struct nfsd4_setattr *setattr = _setattr;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3823,8 +3897,9 @@ nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4
+ }
+
+ static __be32
+-nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_setclientid *scd)
++nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, void *_scd)
+ {
++ struct nfsd4_setclientid *scd = _scd;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3847,8 +3922,9 @@ nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, struct n
+ }
+
+ static __be32
+-nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_write *write)
++nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, void *_write)
+ {
++ struct nfsd4_write *write = _write;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -3874,8 +3950,9 @@ static const u32 nfs4_minimal_spo_must_enforce[2] = {
+
+ static __be32
+ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_exchange_id *exid)
++ void *_exid)
+ {
++ struct nfsd4_exchange_id *exid = _exid;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+ char *major_id;
+@@ -3952,8 +4029,9 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr,
+
+ static __be32
+ nfsd4_encode_create_session(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_create_session *sess)
++ void *_sess)
+ {
++ struct nfsd4_create_session *sess = _sess;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -4008,8 +4086,9 @@ nfsd4_encode_create_session(struct nfsd4_compoundres *resp, __be32 nfserr,
+
+ static __be32
+ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_sequence *seq)
++ void *_seq)
+ {
++ struct nfsd4_sequence *seq = _seq;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -4034,8 +4113,9 @@ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, __be32 nfserr,
+
+ static __be32
+ nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_test_stateid *test_stateid)
++ void *_test_stateid)
+ {
++ struct nfsd4_test_stateid *test_stateid = _test_stateid;
+ struct xdr_stream *xdr = &resp->xdr;
+ struct nfsd4_test_stateid_id *stateid, *next;
+ __be32 *p;
+@@ -4057,9 +4137,9 @@ nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr,
+
+ #ifdef CONFIG_NFSD_PNFS
+ static __be32
+-nfsd4_encode_getdeviceinfo(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_getdeviceinfo *gdev)
++nfsd4_encode_getdeviceinfo(struct nfsd4_compoundres *resp, __be32 nfserr, void *_gdev)
+ {
++ struct nfsd4_getdeviceinfo *gdev = _gdev;
+ struct xdr_stream *xdr = &resp->xdr;
+ const struct nfsd4_layout_ops *ops =
+ nfsd4_layout_ops[gdev->gd_layout_type];
+@@ -4127,9 +4207,9 @@ toosmall:
+ }
+
+ static __be32
+-nfsd4_encode_layoutget(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_layoutget *lgp)
++nfsd4_encode_layoutget(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lgp)
+ {
++ struct nfsd4_layoutget *lgp = _lgp;
+ struct xdr_stream *xdr = &resp->xdr;
+ const struct nfsd4_layout_ops *ops =
+ nfsd4_layout_ops[lgp->lg_layout_type];
+@@ -4162,9 +4242,9 @@ out:
+ }
+
+ static __be32
+-nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_layoutcommit *lcp)
++nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lcp)
+ {
++ struct nfsd4_layoutcommit *lcp = _lcp;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -4186,9 +4266,9 @@ nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr,
+ }
+
+ static __be32
+-nfsd4_encode_layoutreturn(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_layoutreturn *lrp)
++nfsd4_encode_layoutreturn(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lrp)
+ {
++ struct nfsd4_layoutreturn *lrp = _lrp;
+ struct xdr_stream *xdr = &resp->xdr;
+ __be32 *p;
+
+@@ -4207,8 +4287,9 @@ nfsd4_encode_layoutreturn(struct nfsd4_compoundres *resp, __be32 nfserr,
+
+ static __be32
+ nfsd4_encode_seek(struct nfsd4_compoundres *resp, __be32 nfserr,
+- struct nfsd4_seek *seek)
++ void *_seek)
+ {
++ struct nfsd4_seek *seek= (struct nfsd4_seek *)_seek;
+ __be32 *p;
+
+ if (nfserr)
+@@ -4235,87 +4316,87 @@ typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *);
+ * done in the decoding phase.
+ */
+ static nfsd4_enc nfsd4_enc_ops[] = {
+- [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access,
+- [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close,
+- [OP_COMMIT] = (nfsd4_enc)nfsd4_encode_commit,
+- [OP_CREATE] = (nfsd4_enc)nfsd4_encode_create,
+- [OP_DELEGPURGE] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_DELEGRETURN] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_GETATTR] = (nfsd4_enc)nfsd4_encode_getattr,
+- [OP_GETFH] = (nfsd4_enc)nfsd4_encode_getfh,
+- [OP_LINK] = (nfsd4_enc)nfsd4_encode_link,
+- [OP_LOCK] = (nfsd4_enc)nfsd4_encode_lock,
+- [OP_LOCKT] = (nfsd4_enc)nfsd4_encode_lockt,
+- [OP_LOCKU] = (nfsd4_enc)nfsd4_encode_locku,
+- [OP_LOOKUP] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_LOOKUPP] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_NVERIFY] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_OPEN] = (nfsd4_enc)nfsd4_encode_open,
+- [OP_OPENATTR] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_OPEN_CONFIRM] = (nfsd4_enc)nfsd4_encode_open_confirm,
+- [OP_OPEN_DOWNGRADE] = (nfsd4_enc)nfsd4_encode_open_downgrade,
+- [OP_PUTFH] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_PUTPUBFH] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_PUTROOTFH] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_READ] = (nfsd4_enc)nfsd4_encode_read,
+- [OP_READDIR] = (nfsd4_enc)nfsd4_encode_readdir,
+- [OP_READLINK] = (nfsd4_enc)nfsd4_encode_readlink,
+- [OP_REMOVE] = (nfsd4_enc)nfsd4_encode_remove,
+- [OP_RENAME] = (nfsd4_enc)nfsd4_encode_rename,
+- [OP_RENEW] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_RESTOREFH] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_SAVEFH] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_SECINFO] = (nfsd4_enc)nfsd4_encode_secinfo,
+- [OP_SETATTR] = (nfsd4_enc)nfsd4_encode_setattr,
+- [OP_SETCLIENTID] = (nfsd4_enc)nfsd4_encode_setclientid,
+- [OP_SETCLIENTID_CONFIRM] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write,
+- [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop,
++ [OP_ACCESS] = nfsd4_encode_access,
++ [OP_CLOSE] = nfsd4_encode_close,
++ [OP_COMMIT] = nfsd4_encode_commit,
++ [OP_CREATE] = nfsd4_encode_create,
++ [OP_DELEGPURGE] = nfsd4_encode_noop,
++ [OP_DELEGRETURN] = nfsd4_encode_noop,
++ [OP_GETATTR] = nfsd4_encode_getattr,
++ [OP_GETFH] = nfsd4_encode_getfh,
++ [OP_LINK] = nfsd4_encode_link,
++ [OP_LOCK] = nfsd4_encode_lock,
++ [OP_LOCKT] = nfsd4_encode_lockt,
++ [OP_LOCKU] = nfsd4_encode_locku,
++ [OP_LOOKUP] = nfsd4_encode_noop,
++ [OP_LOOKUPP] = nfsd4_encode_noop,
++ [OP_NVERIFY] = nfsd4_encode_noop,
++ [OP_OPEN] = nfsd4_encode_open,
++ [OP_OPENATTR] = nfsd4_encode_noop,
++ [OP_OPEN_CONFIRM] = nfsd4_encode_open_confirm,
++ [OP_OPEN_DOWNGRADE] = nfsd4_encode_open_downgrade,
++ [OP_PUTFH] = nfsd4_encode_noop,
++ [OP_PUTPUBFH] = nfsd4_encode_noop,
++ [OP_PUTROOTFH] = nfsd4_encode_noop,
++ [OP_READ] = nfsd4_encode_read,
++ [OP_READDIR] = nfsd4_encode_readdir,
++ [OP_READLINK] = nfsd4_encode_readlink,
++ [OP_REMOVE] = nfsd4_encode_remove,
++ [OP_RENAME] = nfsd4_encode_rename,
++ [OP_RENEW] = nfsd4_encode_noop,
++ [OP_RESTOREFH] = nfsd4_encode_noop,
++ [OP_SAVEFH] = nfsd4_encode_noop,
++ [OP_SECINFO] = nfsd4_encode_secinfo,
++ [OP_SETATTR] = nfsd4_encode_setattr,
++ [OP_SETCLIENTID] = nfsd4_encode_setclientid,
++ [OP_SETCLIENTID_CONFIRM] = nfsd4_encode_noop,
++ [OP_VERIFY] = nfsd4_encode_noop,
++ [OP_WRITE] = nfsd4_encode_write,
++ [OP_RELEASE_LOCKOWNER] = nfsd4_encode_noop,
+
+ /* NFSv4.1 operations */
+- [OP_BACKCHANNEL_CTL] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_BIND_CONN_TO_SESSION] = (nfsd4_enc)nfsd4_encode_bind_conn_to_session,
+- [OP_EXCHANGE_ID] = (nfsd4_enc)nfsd4_encode_exchange_id,
+- [OP_CREATE_SESSION] = (nfsd4_enc)nfsd4_encode_create_session,
+- [OP_DESTROY_SESSION] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_FREE_STATEID] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_GET_DIR_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop,
++ [OP_BACKCHANNEL_CTL] = nfsd4_encode_noop,
++ [OP_BIND_CONN_TO_SESSION] = nfsd4_encode_bind_conn_to_session,
++ [OP_EXCHANGE_ID] = nfsd4_encode_exchange_id,
++ [OP_CREATE_SESSION] = nfsd4_encode_create_session,
++ [OP_DESTROY_SESSION] = nfsd4_encode_noop,
++ [OP_FREE_STATEID] = nfsd4_encode_noop,
++ [OP_GET_DIR_DELEGATION] = nfsd4_encode_noop,
+ #ifdef CONFIG_NFSD_PNFS
+- [OP_GETDEVICEINFO] = (nfsd4_enc)nfsd4_encode_getdeviceinfo,
+- [OP_GETDEVICELIST] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_layoutcommit,
+- [OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_layoutget,
+- [OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_layoutreturn,
++ [OP_GETDEVICEINFO] = nfsd4_encode_getdeviceinfo,
++ [OP_GETDEVICELIST] = nfsd4_encode_noop,
++ [OP_LAYOUTCOMMIT] = nfsd4_encode_layoutcommit,
++ [OP_LAYOUTGET] = nfsd4_encode_layoutget,
++ [OP_LAYOUTRETURN] = nfsd4_encode_layoutreturn,
+ #else
+- [OP_GETDEVICEINFO] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_GETDEVICELIST] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_noop,
++ [OP_GETDEVICEINFO] = nfsd4_encode_noop,
++ [OP_GETDEVICELIST] = nfsd4_encode_noop,
++ [OP_LAYOUTCOMMIT] = nfsd4_encode_noop,
++ [OP_LAYOUTGET] = nfsd4_encode_noop,
++ [OP_LAYOUTRETURN] = nfsd4_encode_noop,
+ #endif
+- [OP_SECINFO_NO_NAME] = (nfsd4_enc)nfsd4_encode_secinfo_no_name,
+- [OP_SEQUENCE] = (nfsd4_enc)nfsd4_encode_sequence,
+- [OP_SET_SSV] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_TEST_STATEID] = (nfsd4_enc)nfsd4_encode_test_stateid,
+- [OP_WANT_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_DESTROY_CLIENTID] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_RECLAIM_COMPLETE] = (nfsd4_enc)nfsd4_encode_noop,
++ [OP_SECINFO_NO_NAME] = nfsd4_encode_secinfo_no_name,
++ [OP_SEQUENCE] = nfsd4_encode_sequence,
++ [OP_SET_SSV] = nfsd4_encode_noop,
++ [OP_TEST_STATEID] = nfsd4_encode_test_stateid,
++ [OP_WANT_DELEGATION] = nfsd4_encode_noop,
++ [OP_DESTROY_CLIENTID] = nfsd4_encode_noop,
++ [OP_RECLAIM_COMPLETE] = nfsd4_encode_noop,
+
+ /* NFSv4.2 operations */
+- [OP_ALLOCATE] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_COPY] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_COPY_NOTIFY] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_DEALLOCATE] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_IO_ADVISE] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_LAYOUTERROR] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_LAYOUTSTATS] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_OFFLOAD_CANCEL] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_OFFLOAD_STATUS] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_READ_PLUS] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_SEEK] = (nfsd4_enc)nfsd4_encode_seek,
+- [OP_WRITE_SAME] = (nfsd4_enc)nfsd4_encode_noop,
+- [OP_CLONE] = (nfsd4_enc)nfsd4_encode_noop,
++ [OP_ALLOCATE] = nfsd4_encode_noop,
++ [OP_COPY] = nfsd4_encode_noop,
++ [OP_COPY_NOTIFY] = nfsd4_encode_noop,
++ [OP_DEALLOCATE] = nfsd4_encode_noop,
++ [OP_IO_ADVISE] = nfsd4_encode_noop,
++ [OP_LAYOUTERROR] = nfsd4_encode_noop,
++ [OP_LAYOUTSTATS] = nfsd4_encode_noop,
++ [OP_OFFLOAD_CANCEL] = nfsd4_encode_noop,
++ [OP_OFFLOAD_STATUS] = nfsd4_encode_noop,
++ [OP_READ_PLUS] = nfsd4_encode_noop,
++ [OP_SEEK] = nfsd4_encode_seek,
++ [OP_WRITE_SAME] = nfsd4_encode_noop,
++ [OP_CLONE] = nfsd4_encode_noop,
+ };
+
+ /*
+@@ -4440,9 +4521,9 @@ nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op)
+ }
+
+ int
+-nfs4svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nfs4svc_encode_voidres(void *rqstp, __be32 *p, void *dummy)
+ {
+- return xdr_ressize_check(rqstp, p);
++ return xdr_ressize_check(rqstp, p);
+ }
+
+ int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp)
+@@ -4465,8 +4546,11 @@ int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp)
+ }
+
+ int
+-nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compoundargs *args)
++nfs4svc_decode_compoundargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd4_compoundargs *args = _args;
++
+ if (rqstp->rq_arg.head[0].iov_len % 4) {
+ /* client is nuts */
+ dprintk("%s: compound not properly padded! (peeraddr=%pISc xid=0x%x)",
+@@ -4486,11 +4570,13 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_comp
+ }
+
+ int
+-nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compoundres *resp)
++nfs4svc_encode_compoundres(void *_rqstp, __be32 *p, void *_resp)
+ {
+ /*
+ * All that remains is to write the tag and operation count...
+ */
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd4_compoundres *resp = _resp;
+ struct xdr_buf *buf = resp->xdr.buf;
+
+ WARN_ON_ONCE(buf->len != buf->head[0].iov_len + buf->page_len +
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
index 54cde9a..ff5756c 100644
--- a/fs/nfsd/nfscache.c
@@ -85533,11 +108017,692 @@ index 54cde9a..ff5756c 100644
rp->c_replstat = *statp;
break;
case RC_REPLBUFF:
+diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
+index 4cd78ef..eefe944 100644
+--- a/fs/nfsd/nfsproc.c
++++ b/fs/nfsd/nfsproc.c
+@@ -39,9 +39,11 @@ nfsd_return_dirop(__be32 err, struct nfsd_diropres *resp)
+ * N.B. After this call resp->fh needs an fh_put
+ */
+ static __be32
+-nfsd_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp,
+- struct nfsd_attrstat *resp)
++nfsd_proc_getattr(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++ struct nfsd_attrstat *resp = _resp;
+ __be32 nfserr;
+ dprintk("nfsd: GETATTR %s\n", SVCFH_fmt(&argp->fh));
+
+@@ -56,9 +58,11 @@ nfsd_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp,
+ * N.B. After this call resp->fh needs an fh_put
+ */
+ static __be32
+-nfsd_proc_setattr(struct svc_rqst *rqstp, struct nfsd_sattrargs *argp,
+- struct nfsd_attrstat *resp)
++nfsd_proc_setattr(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_sattrargs *argp = _argp;
++ struct nfsd_attrstat *resp = _resp;
+ struct iattr *iap = &argp->attrs;
+ struct svc_fh *fhp;
+ __be32 nfserr;
+@@ -124,9 +128,11 @@ done:
+ * N.B. After this call resp->fh needs an fh_put
+ */
+ static __be32
+-nfsd_proc_lookup(struct svc_rqst *rqstp, struct nfsd_diropargs *argp,
+- struct nfsd_diropres *resp)
++nfsd_proc_lookup(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_diropargs *argp = _argp;
++ struct nfsd_diropres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: LOOKUP %s %.*s\n",
+@@ -144,9 +150,11 @@ nfsd_proc_lookup(struct svc_rqst *rqstp, struct nfsd_diropargs *argp,
+ * Read a symlink.
+ */
+ static __be32
+-nfsd_proc_readlink(struct svc_rqst *rqstp, struct nfsd_readlinkargs *argp,
+- struct nfsd_readlinkres *resp)
++nfsd_proc_readlink(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_readlinkargs *argp = _argp;
++ struct nfsd_readlinkres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: READLINK %s\n", SVCFH_fmt(&argp->fh));
+@@ -164,9 +172,11 @@ nfsd_proc_readlink(struct svc_rqst *rqstp, struct nfsd_readlinkargs *argp,
+ * N.B. After this call resp->fh needs an fh_put
+ */
+ static __be32
+-nfsd_proc_read(struct svc_rqst *rqstp, struct nfsd_readargs *argp,
+- struct nfsd_readres *resp)
++nfsd_proc_read(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_readargs *argp = argp;
++ struct nfsd_readres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: READ %s %d bytes at %d\n",
+@@ -202,9 +212,11 @@ nfsd_proc_read(struct svc_rqst *rqstp, struct nfsd_readargs *argp,
+ * N.B. After this call resp->fh needs an fh_put
+ */
+ static __be32
+-nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp,
+- struct nfsd_attrstat *resp)
++nfsd_proc_write(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_writeargs *argp = _argp;
++ struct nfsd_attrstat *resp = _resp;
+ __be32 nfserr;
+ int stable = 1;
+ unsigned long cnt = argp->len;
+@@ -228,9 +240,11 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp,
+ * N.B. After this call _both_ argp->fh and resp->fh need an fh_put
+ */
+ static __be32
+-nfsd_proc_create(struct svc_rqst *rqstp, struct nfsd_createargs *argp,
+- struct nfsd_diropres *resp)
++nfsd_proc_create(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_createargs *argp = _argp;
++ struct nfsd_diropres *resp = _resp;
+ svc_fh *dirfhp = &argp->fh;
+ svc_fh *newfhp = &resp->fh;
+ struct iattr *attr = &argp->attrs;
+@@ -386,9 +400,10 @@ done:
+ }
+
+ static __be32
+-nfsd_proc_remove(struct svc_rqst *rqstp, struct nfsd_diropargs *argp,
++nfsd_proc_remove(struct svc_rqst *rqstp, void *_argp,
+ void *resp)
+ {
++ struct nfsd_diropargs *argp = _argp;
+ __be32 nfserr;
+
+ dprintk("nfsd: REMOVE %s %.*s\n", SVCFH_fmt(&argp->fh),
+@@ -401,9 +416,10 @@ nfsd_proc_remove(struct svc_rqst *rqstp, struct nfsd_diropargs *argp,
+ }
+
+ static __be32
+-nfsd_proc_rename(struct svc_rqst *rqstp, struct nfsd_renameargs *argp,
++nfsd_proc_rename(struct svc_rqst *rqstp, void *_argp,
+ void *resp)
+ {
++ struct nfsd_renameargs *argp = _argp;
+ __be32 nfserr;
+
+ dprintk("nfsd: RENAME %s %.*s -> \n",
+@@ -419,9 +435,10 @@ nfsd_proc_rename(struct svc_rqst *rqstp, struct nfsd_renameargs *argp,
+ }
+
+ static __be32
+-nfsd_proc_link(struct svc_rqst *rqstp, struct nfsd_linkargs *argp,
++nfsd_proc_link(struct svc_rqst *rqstp, void *_argp,
+ void *resp)
+ {
++ struct nfsd_linkargs *argp = _argp;
+ __be32 nfserr;
+
+ dprintk("nfsd: LINK %s ->\n",
+@@ -439,9 +456,10 @@ nfsd_proc_link(struct svc_rqst *rqstp, struct nfsd_linkargs *argp,
+ }
+
+ static __be32
+-nfsd_proc_symlink(struct svc_rqst *rqstp, struct nfsd_symlinkargs *argp,
++nfsd_proc_symlink(struct svc_rqst *rqstp, void *_argp,
+ void *resp)
+ {
++ struct nfsd_symlinkargs *argp = _argp;
+ struct svc_fh newfh;
+ __be32 nfserr;
+
+@@ -469,9 +487,11 @@ nfsd_proc_symlink(struct svc_rqst *rqstp, struct nfsd_symlinkargs *argp,
+ * N.B. After this call resp->fh needs an fh_put
+ */
+ static __be32
+-nfsd_proc_mkdir(struct svc_rqst *rqstp, struct nfsd_createargs *argp,
+- struct nfsd_diropres *resp)
++nfsd_proc_mkdir(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_createargs *argp = _argp;
++ struct nfsd_diropres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: MKDIR %s %.*s\n", SVCFH_fmt(&argp->fh), argp->len, argp->name);
+@@ -493,9 +513,10 @@ nfsd_proc_mkdir(struct svc_rqst *rqstp, struct nfsd_createargs *argp,
+ * Remove a directory
+ */
+ static __be32
+-nfsd_proc_rmdir(struct svc_rqst *rqstp, struct nfsd_diropargs *argp,
++nfsd_proc_rmdir(struct svc_rqst *rqstp, void *_argp,
+ void *resp)
+ {
++ struct nfsd_diropargs *argp = _argp;
+ __be32 nfserr;
+
+ dprintk("nfsd: RMDIR %s %.*s\n", SVCFH_fmt(&argp->fh), argp->len, argp->name);
+@@ -509,9 +530,11 @@ nfsd_proc_rmdir(struct svc_rqst *rqstp, struct nfsd_diropargs *argp,
+ * Read a portion of a directory.
+ */
+ static __be32
+-nfsd_proc_readdir(struct svc_rqst *rqstp, struct nfsd_readdirargs *argp,
+- struct nfsd_readdirres *resp)
++nfsd_proc_readdir(struct svc_rqst *rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_readdirargs *argp = _argp;
++ struct nfsd_readdirres *resp = _resp;
+ int count;
+ __be32 nfserr;
+ loff_t offset;
+@@ -549,9 +572,11 @@ nfsd_proc_readdir(struct svc_rqst *rqstp, struct nfsd_readdirargs *argp,
+ * Get file system info
+ */
+ static __be32
+-nfsd_proc_statfs(struct svc_rqst * rqstp, struct nfsd_fhandle *argp,
+- struct nfsd_statfsres *resp)
++nfsd_proc_statfs(struct svc_rqst * rqstp, void *_argp,
++ void *_resp)
+ {
++ struct nfsd_fhandle *argp = _argp;
++ struct nfsd_statfsres *resp = _resp;
+ __be32 nfserr;
+
+ dprintk("nfsd: STATFS %s\n", SVCFH_fmt(&argp->fh));
+@@ -574,166 +599,166 @@ struct nfsd_void { int dummy; };
+
+ static struct svc_procedure nfsd_procedures2[18] = {
+ [NFSPROC_NULL] = {
+- .pc_func = (svc_procfunc) nfsd_proc_null,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_void,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_func = nfsd_proc_null,
++ .pc_decode = nfssvc_decode_void,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_void),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_GETATTR] = {
+- .pc_func = (svc_procfunc) nfsd_proc_getattr,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
+- .pc_release = (kxdrproc_t) nfssvc_release_fhandle,
++ .pc_func = nfsd_proc_getattr,
++ .pc_decode = nfssvc_decode_fhandle,
++ .pc_encode = nfssvc_encode_attrstat,
++ .pc_release = nfssvc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd_fhandle),
+ .pc_ressize = sizeof(struct nfsd_attrstat),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+AT,
+ },
+ [NFSPROC_SETATTR] = {
+- .pc_func = (svc_procfunc) nfsd_proc_setattr,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_sattrargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
+- .pc_release = (kxdrproc_t) nfssvc_release_fhandle,
++ .pc_func = nfsd_proc_setattr,
++ .pc_decode = nfssvc_decode_sattrargs,
++ .pc_encode = nfssvc_encode_attrstat,
++ .pc_release = nfssvc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd_sattrargs),
+ .pc_ressize = sizeof(struct nfsd_attrstat),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+AT,
+ },
+ [NFSPROC_ROOT] = {
+- .pc_decode = (kxdrproc_t) nfssvc_decode_void,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_decode = nfssvc_decode_void,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_void),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_LOOKUP] = {
+- .pc_func = (svc_procfunc) nfsd_proc_lookup,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
+- .pc_release = (kxdrproc_t) nfssvc_release_fhandle,
++ .pc_func = nfsd_proc_lookup,
++ .pc_decode = nfssvc_decode_diropargs,
++ .pc_encode = nfssvc_encode_diropres,
++ .pc_release = nfssvc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd_diropargs),
+ .pc_ressize = sizeof(struct nfsd_diropres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+FH+AT,
+ },
+ [NFSPROC_READLINK] = {
+- .pc_func = (svc_procfunc) nfsd_proc_readlink,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_readlinkargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_readlinkres,
++ .pc_func = nfsd_proc_readlink,
++ .pc_decode = nfssvc_decode_readlinkargs,
++ .pc_encode = nfssvc_encode_readlinkres,
+ .pc_argsize = sizeof(struct nfsd_readlinkargs),
+ .pc_ressize = sizeof(struct nfsd_readlinkres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+1+NFS_MAXPATHLEN/4,
+ },
+ [NFSPROC_READ] = {
+- .pc_func = (svc_procfunc) nfsd_proc_read,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_readargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_readres,
+- .pc_release = (kxdrproc_t) nfssvc_release_fhandle,
++ .pc_func = nfsd_proc_read,
++ .pc_decode = nfssvc_decode_readargs,
++ .pc_encode = nfssvc_encode_readres,
++ .pc_release = nfssvc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd_readargs),
+ .pc_ressize = sizeof(struct nfsd_readres),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST+AT+1+NFSSVC_MAXBLKSIZE_V2/4,
+ },
+ [NFSPROC_WRITECACHE] = {
+- .pc_decode = (kxdrproc_t) nfssvc_decode_void,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_decode = nfssvc_decode_void,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_void),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_NOCACHE,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_WRITE] = {
+- .pc_func = (svc_procfunc) nfsd_proc_write,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_writeargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat,
+- .pc_release = (kxdrproc_t) nfssvc_release_fhandle,
++ .pc_func = nfsd_proc_write,
++ .pc_decode = nfssvc_decode_writeargs,
++ .pc_encode = nfssvc_encode_attrstat,
++ .pc_release = nfssvc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd_writeargs),
+ .pc_ressize = sizeof(struct nfsd_attrstat),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+AT,
+ },
+ [NFSPROC_CREATE] = {
+- .pc_func = (svc_procfunc) nfsd_proc_create,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_createargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
+- .pc_release = (kxdrproc_t) nfssvc_release_fhandle,
++ .pc_func = nfsd_proc_create,
++ .pc_decode = nfssvc_decode_createargs,
++ .pc_encode = nfssvc_encode_diropres,
++ .pc_release = nfssvc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd_createargs),
+ .pc_ressize = sizeof(struct nfsd_diropres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+FH+AT,
+ },
+ [NFSPROC_REMOVE] = {
+- .pc_func = (svc_procfunc) nfsd_proc_remove,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_func = nfsd_proc_remove,
++ .pc_decode = nfssvc_decode_diropargs,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_diropargs),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_REPLSTAT,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_RENAME] = {
+- .pc_func = (svc_procfunc) nfsd_proc_rename,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_renameargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_func = nfsd_proc_rename,
++ .pc_decode = nfssvc_decode_renameargs,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_renameargs),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_REPLSTAT,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_LINK] = {
+- .pc_func = (svc_procfunc) nfsd_proc_link,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_linkargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_func = nfsd_proc_link,
++ .pc_decode = nfssvc_decode_linkargs,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_linkargs),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_REPLSTAT,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_SYMLINK] = {
+- .pc_func = (svc_procfunc) nfsd_proc_symlink,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_symlinkargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_func = nfsd_proc_symlink,
++ .pc_decode = nfssvc_decode_symlinkargs,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_symlinkargs),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_REPLSTAT,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_MKDIR] = {
+- .pc_func = (svc_procfunc) nfsd_proc_mkdir,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_createargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_diropres,
+- .pc_release = (kxdrproc_t) nfssvc_release_fhandle,
++ .pc_func = nfsd_proc_mkdir,
++ .pc_decode = nfssvc_decode_createargs,
++ .pc_encode = nfssvc_encode_diropres,
++ .pc_release = nfssvc_release_fhandle,
+ .pc_argsize = sizeof(struct nfsd_createargs),
+ .pc_ressize = sizeof(struct nfsd_diropres),
+ .pc_cachetype = RC_REPLBUFF,
+ .pc_xdrressize = ST+FH+AT,
+ },
+ [NFSPROC_RMDIR] = {
+- .pc_func = (svc_procfunc) nfsd_proc_rmdir,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_void,
++ .pc_func = nfsd_proc_rmdir,
++ .pc_decode = nfssvc_decode_diropargs,
++ .pc_encode = nfssvc_encode_void,
+ .pc_argsize = sizeof(struct nfsd_diropargs),
+ .pc_ressize = sizeof(struct nfsd_void),
+ .pc_cachetype = RC_REPLSTAT,
+ .pc_xdrressize = ST,
+ },
+ [NFSPROC_READDIR] = {
+- .pc_func = (svc_procfunc) nfsd_proc_readdir,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_readdirargs,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_readdirres,
++ .pc_func = nfsd_proc_readdir,
++ .pc_decode = nfssvc_decode_readdirargs,
++ .pc_encode = nfssvc_encode_readdirres,
+ .pc_argsize = sizeof(struct nfsd_readdirargs),
+ .pc_ressize = sizeof(struct nfsd_readdirres),
+ .pc_cachetype = RC_NOCACHE,
+ },
+ [NFSPROC_STATFS] = {
+- .pc_func = (svc_procfunc) nfsd_proc_statfs,
+- .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle,
+- .pc_encode = (kxdrproc_t) nfssvc_encode_statfsres,
++ .pc_func = nfsd_proc_statfs,
++ .pc_decode = nfssvc_decode_fhandle,
++ .pc_encode = nfssvc_encode_statfsres,
+ .pc_argsize = sizeof(struct nfsd_fhandle),
+ .pc_ressize = sizeof(struct nfsd_statfsres),
+ .pc_cachetype = RC_NOCACHE,
+diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c
+index 79d964a..bbf050b 100644
+--- a/fs/nfsd/nfsxdr.c
++++ b/fs/nfsd/nfsxdr.c
+@@ -206,14 +206,16 @@ __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *f
+ * XDR decode functions
+ */
+ int
+-nfssvc_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nfssvc_decode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_argsize_check(rqstp, p);
+ }
+
+ int
+-nfssvc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *args)
++nfssvc_decode_fhandle(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_fhandle *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -221,9 +223,10 @@ nfssvc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *ar
+ }
+
+ int
+-nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_sattrargs *args)
++nfssvc_decode_sattrargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_sattrargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -233,9 +236,10 @@ nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_diropargs *args)
++nfssvc_decode_diropargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_diropargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->fh))
+ || !(p = decode_filename(p, &args->name, &args->len)))
+ return 0;
+@@ -244,9 +248,10 @@ nfssvc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_readargs *args)
++nfssvc_decode_readargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd_readargs *args = _args;
+ unsigned int len;
+ int v;
+ p = decode_fh(p, &args->fh);
+@@ -276,9 +281,10 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_writeargs *args)
++nfssvc_decode_writeargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd_writeargs *args = _args;
+ unsigned int len, hdr, dlen;
+ int v;
+
+@@ -330,9 +336,10 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_createargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_createargs *args)
++nfssvc_decode_createargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_createargs *args = _args;
++
+ if ( !(p = decode_fh(p, &args->fh))
+ || !(p = decode_filename(p, &args->name, &args->len)))
+ return 0;
+@@ -342,9 +349,10 @@ nfssvc_decode_createargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_renameargs *args)
++nfssvc_decode_renameargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_renameargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->ffh))
+ || !(p = decode_filename(p, &args->fname, &args->flen))
+ || !(p = decode_fh(p, &args->tfh))
+@@ -355,8 +363,11 @@ nfssvc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readlinkargs *args)
++nfssvc_decode_readlinkargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd_readlinkargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -366,9 +377,10 @@ nfssvc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readli
+ }
+
+ int
+-nfssvc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_linkargs *args)
++nfssvc_decode_linkargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_linkargs *args = _args;
++
+ if (!(p = decode_fh(p, &args->ffh))
+ || !(p = decode_fh(p, &args->tfh))
+ || !(p = decode_filename(p, &args->tname, &args->tlen)))
+@@ -378,9 +390,10 @@ nfssvc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_symlinkargs *args)
++nfssvc_decode_symlinkargs(void *rqstp, __be32 *p, void *_args)
+ {
++ struct nfsd_symlinkargs *args = _args;
++
+ if ( !(p = decode_fh(p, &args->ffh))
+ || !(p = decode_filename(p, &args->fname, &args->flen))
+ || !(p = decode_pathname(p, &args->tname, &args->tlen)))
+@@ -391,9 +404,11 @@ nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_readdirargs *args)
++nfssvc_decode_readdirargs(void *_rqstp, __be32 *p, void *_args)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd_readdirargs *args = _args;
++
+ p = decode_fh(p, &args->fh);
+ if (!p)
+ return 0;
+@@ -409,32 +424,36 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
+ * XDR encode functions
+ */
+ int
+-nfssvc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy)
++nfssvc_encode_void(void *rqstp, __be32 *p, void *dummy)
+ {
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ int
+-nfssvc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_attrstat *resp)
++nfssvc_encode_attrstat(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd_diropres *resp = _resp;
++
+ p = encode_fattr(rqstp, p, &resp->fh, &resp->stat);
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ int
+-nfssvc_encode_diropres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_diropres *resp)
++nfssvc_encode_diropres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd_diropres *resp = _resp;
++
+ p = encode_fh(p, &resp->fh);
+ p = encode_fattr(rqstp, p, &resp->fh, &resp->stat);
+ return xdr_ressize_check(rqstp, p);
+ }
+
+ int
+-nfssvc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_readlinkres *resp)
++nfssvc_encode_readlinkres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp= _rqstp;
++ struct nfsd_readlinkres *resp = _resp;
++
+ *p++ = htonl(resp->len);
+ xdr_ressize_check(rqstp, p);
+ rqstp->rq_res.page_len = resp->len;
+@@ -448,9 +467,11 @@ nfssvc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_encode_readres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_readres *resp)
++nfssvc_encode_readres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd_readres *resp = _resp;
++
+ p = encode_fattr(rqstp, p, &resp->fh, &resp->stat);
+ *p++ = htonl(resp->count);
+ xdr_ressize_check(rqstp, p);
+@@ -467,9 +488,11 @@ nfssvc_encode_readres(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_readdirres *resp)
++nfssvc_encode_readdirres(void *_rqstp, __be32 *p, void *_resp)
+ {
++ struct svc_rqst *rqstp = _rqstp;
++ struct nfsd_readdirres *resp = _resp;
++
+ xdr_ressize_check(rqstp, p);
+ p = resp->buffer;
+ *p++ = 0; /* no more entries */
+@@ -480,9 +503,9 @@ nfssvc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p,
+ }
+
+ int
+-nfssvc_encode_statfsres(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_statfsres *resp)
++nfssvc_encode_statfsres(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd_statfsres *resp = _resp;
+ struct kstatfs *stat = &resp->stats;
+
+ *p++ = htonl(NFSSVC_MAXBLKSIZE_V2); /* max transfer size */
+@@ -542,9 +565,10 @@ nfssvc_encode_entry(void *ccdv, const char *name,
+ * XDR release functions
+ */
+ int
+-nfssvc_release_fhandle(struct svc_rqst *rqstp, __be32 *p,
+- struct nfsd_fhandle *resp)
++nfssvc_release_fhandle(void *rqstp, __be32 *p, void *_resp)
+ {
++ struct nfsd_fhandle *resp = _resp;
++
+ fh_put(&resp->fh);
+ return 1;
+ }
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
-index 994d66f..a963779 100644
+index 5d2a57e..86c17842 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
-@@ -855,7 +855,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
+@@ -870,7 +870,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
oldfs = get_fs();
set_fs(KERNEL_DS);
@@ -85546,7 +108711,7 @@ index 994d66f..a963779 100644
set_fs(oldfs);
return nfsd_finish_read(file, count, host_err);
}
-@@ -942,7 +942,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
+@@ -957,7 +957,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);
@@ -85555,7 +108720,7 @@ index 994d66f..a963779 100644
set_fs(oldfs);
if (host_err < 0)
goto out_nfserr;
-@@ -1449,7 +1449,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
+@@ -1478,7 +1478,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
*/
oldfs = get_fs(); set_fs(KERNEL_DS);
@@ -85564,6 +108729,283 @@ index 994d66f..a963779 100644
set_fs(oldfs);
if (host_err < 0)
+diff --git a/fs/nfsd/xdr.h b/fs/nfsd/xdr.h
+index 4f0481d..193c8e7 100644
+--- a/fs/nfsd/xdr.h
++++ b/fs/nfsd/xdr.h
+@@ -131,40 +131,30 @@ union nfsd_xdrstore {
+ #define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore)
+
+
+-int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *);
+-int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
+-int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *,
+- struct nfsd_sattrargs *);
+-int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *,
+- struct nfsd_diropargs *);
+-int nfssvc_decode_readargs(struct svc_rqst *, __be32 *,
+- struct nfsd_readargs *);
+-int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *,
+- struct nfsd_writeargs *);
+-int nfssvc_decode_createargs(struct svc_rqst *, __be32 *,
+- struct nfsd_createargs *);
+-int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *,
+- struct nfsd_renameargs *);
+-int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *,
+- struct nfsd_readlinkargs *);
+-int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *,
+- struct nfsd_linkargs *);
+-int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *,
+- struct nfsd_symlinkargs *);
+-int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *,
+- struct nfsd_readdirargs *);
+-int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *);
+-int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *);
+-int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *);
+-int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *);
+-int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *);
+-int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *);
+-int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *);
++int nfssvc_decode_void(void *, __be32 *, void *);
++int nfssvc_decode_fhandle(void *, __be32 *, void *);
++int nfssvc_decode_sattrargs(void *, __be32 *, void *);
++int nfssvc_decode_diropargs(void *, __be32 *, void *);
++int nfssvc_decode_readargs(void *, __be32 *, void *);
++int nfssvc_decode_writeargs(void *, __be32 *, void *);
++int nfssvc_decode_createargs(void *, __be32 *, void *);
++int nfssvc_decode_renameargs(void *, __be32 *, void *);
++int nfssvc_decode_readlinkargs(void *, __be32 *, void *);
++int nfssvc_decode_linkargs(void *, __be32 *, void *);
++int nfssvc_decode_symlinkargs(void *, __be32 *, void *);
++int nfssvc_decode_readdirargs(void *, __be32 *, void *);
++int nfssvc_encode_void(void *, __be32 *, void *);
++int nfssvc_encode_attrstat(void *, __be32 *, void *);
++int nfssvc_encode_diropres(void *, __be32 *, void *);
++int nfssvc_encode_readlinkres(void *, __be32 *, void *);
++int nfssvc_encode_readres(void *, __be32 *, void *);
++int nfssvc_encode_statfsres(void *, __be32 *, void *);
++int nfssvc_encode_readdirres(void *, __be32 *, void *);
+
+ int nfssvc_encode_entry(void *, const char *name,
+ int namlen, loff_t offset, u64 ino, unsigned int);
+
+-int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
++int nfssvc_release_fhandle(void *, __be32 *, void *);
+
+ /* Helper functions for NFSv2 ACL code */
+ __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat);
+diff --git a/fs/nfsd/xdr3.h b/fs/nfsd/xdr3.h
+index 335e04a..d77a9c9 100644
+--- a/fs/nfsd/xdr3.h
++++ b/fs/nfsd/xdr3.h
+@@ -269,71 +269,41 @@ union nfsd3_xdrstore {
+
+ #define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore)
+
+-int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
+-int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_sattrargs *);
+-int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_diropargs *);
+-int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_accessargs *);
+-int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_readargs *);
+-int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_writeargs *);
+-int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_createargs *);
+-int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_createargs *);
+-int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_mknodargs *);
+-int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_renameargs *);
+-int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_readlinkargs *);
+-int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_linkargs *);
+-int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_symlinkargs *);
+-int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_readdirargs *);
+-int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_readdirargs *);
+-int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *,
+- struct nfsd3_commitargs *);
+-int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
+-int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *,
+- struct nfsd3_attrstat *);
+-int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *,
+- struct nfsd3_attrstat *);
+-int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *,
+- struct nfsd3_diropres *);
+-int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *,
+- struct nfsd3_accessres *);
+-int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *,
+- struct nfsd3_readlinkres *);
+-int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *);
+-int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *);
+-int nfs3svc_encode_createres(struct svc_rqst *, __be32 *,
+- struct nfsd3_diropres *);
+-int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *,
+- struct nfsd3_renameres *);
+-int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *,
+- struct nfsd3_linkres *);
+-int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *,
+- struct nfsd3_readdirres *);
+-int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *,
+- struct nfsd3_fsstatres *);
+-int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *,
+- struct nfsd3_fsinfores *);
+-int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *,
+- struct nfsd3_pathconfres *);
+-int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *,
+- struct nfsd3_commitres *);
++int nfs3svc_decode_fhandle(void *, __be32 *, void *);
++int nfs3svc_decode_sattrargs(void *, __be32 *, void *);
++int nfs3svc_decode_diropargs(void *, __be32 *, void *);
++int nfs3svc_decode_accessargs(void *, __be32 *, void *);
++int nfs3svc_decode_readargs(void *, __be32 *, void *);
++int nfs3svc_decode_writeargs(void *, __be32 *, void *);
++int nfs3svc_decode_createargs(void *, __be32 *, void *);
++int nfs3svc_decode_mkdirargs(void *, __be32 *, void *);
++int nfs3svc_decode_mknodargs(void *, __be32 *, void *);
++int nfs3svc_decode_renameargs(void *, __be32 *, void *);
++int nfs3svc_decode_readlinkargs(void *, __be32 *, void *);
++int nfs3svc_decode_linkargs(void *, __be32 *, void *);
++int nfs3svc_decode_symlinkargs(void *, __be32 *, void *);
++int nfs3svc_decode_readdirargs(void *, __be32 *, void *);
++int nfs3svc_decode_readdirplusargs(void *, __be32 *, void *);
++int nfs3svc_decode_commitargs(void *, __be32 *, void *);
++int nfs3svc_encode_voidres(void *, __be32 *, void *);
++int nfs3svc_encode_attrstat(void *, __be32 *, void *);
++int nfs3svc_encode_wccstat(void *, __be32 *, void *);
++int nfs3svc_encode_diropres(void *, __be32 *, void *);
++int nfs3svc_encode_accessres(void *, __be32 *, void *);
++int nfs3svc_encode_readlinkres(void *, __be32 *, void *);
++int nfs3svc_encode_readres(void *, __be32 *, void *);
++int nfs3svc_encode_writeres(void *, __be32 *, void *);
++int nfs3svc_encode_createres(void *, __be32 *, void *);
++int nfs3svc_encode_renameres(void *, __be32 *, void *);
++int nfs3svc_encode_linkres(void *, __be32 *, void *);
++int nfs3svc_encode_readdirres(void *, __be32 *, void *);
++int nfs3svc_encode_fsstatres(void *, __be32 *, void *);
++int nfs3svc_encode_fsinfores(void *, __be32 *, void *);
++int nfs3svc_encode_pathconfres(void *, __be32 *, void *);
++int nfs3svc_encode_commitres(void *, __be32 *, void *);
+
+-int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *,
+- struct nfsd3_attrstat *);
+-int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *,
+- struct nfsd3_fhandle_pair *);
++int nfs3svc_release_fhandle(void *, __be32 *, void *);
++int nfs3svc_release_fhandle2(void *, __be32 *, void *);
+ int nfs3svc_encode_entry(void *, const char *name,
+ int namlen, loff_t offset, u64 ino,
+ unsigned int);
+diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h
+index d955481..a985dc41 100644
+--- a/fs/nfsd/xdr4.h
++++ b/fs/nfsd/xdr4.h
+@@ -654,11 +654,9 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
+
+ }
+
+-int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
+-int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *,
+- struct nfsd4_compoundargs *);
+-int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *,
+- struct nfsd4_compoundres *);
++int nfs4svc_encode_voidres(void *, __be32 *, void *);
++int nfs4svc_decode_compoundargs(void *, __be32 *, void *);
++int nfs4svc_encode_compoundres(void *, __be32 *, void *);
+ __be32 nfsd4_check_resp_size(struct nfsd4_compoundres *, u32);
+ void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *);
+ void nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op);
+@@ -668,26 +666,26 @@ __be32 nfsd4_encode_fattr_to_buf(__be32 **p, int words,
+ u32 *bmval, struct svc_rqst *, int ignore_crossmnt);
+ extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *,
+- struct nfsd4_setclientid *setclid);
++ void *setclid);
+ extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *,
+- struct nfsd4_setclientid_confirm *setclientid_confirm);
++ void *setclientid_confirm);
+ extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
+- struct nfsd4_compound_state *, struct nfsd4_exchange_id *);
+-extern __be32 nfsd4_backchannel_ctl(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_backchannel_ctl *);
+-extern __be32 nfsd4_bind_conn_to_session(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_bind_conn_to_session *);
++ struct nfsd4_compound_state *, void *);
++extern __be32 nfsd4_backchannel_ctl(struct svc_rqst *, struct nfsd4_compound_state *, void *);
++extern __be32 nfsd4_bind_conn_to_session(struct svc_rqst *, struct nfsd4_compound_state *, void *);
+ extern __be32 nfsd4_create_session(struct svc_rqst *,
+ struct nfsd4_compound_state *,
+- struct nfsd4_create_session *);
++ void *);
+ extern __be32 nfsd4_sequence(struct svc_rqst *,
+ struct nfsd4_compound_state *,
+- struct nfsd4_sequence *);
++ void *);
+ extern void nfsd4_sequence_done(struct nfsd4_compoundres *resp);
+ extern __be32 nfsd4_destroy_session(struct svc_rqst *,
+ struct nfsd4_compound_state *,
+- struct nfsd4_destroy_session *);
+-extern __be32 nfsd4_destroy_clientid(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_destroy_clientid *);
+-__be32 nfsd4_reclaim_complete(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_reclaim_complete *);
++ void *);
++extern __be32 nfsd4_destroy_clientid(struct svc_rqst *, struct nfsd4_compound_state *, void *);
++__be32 nfsd4_reclaim_complete(struct svc_rqst *, struct nfsd4_compound_state *, void *);
+ extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
+ struct nfsd4_open *open, struct nfsd_net *nn);
+ extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
+@@ -696,34 +694,34 @@ extern void nfsd4_cstate_clear_replay(struct nfsd4_compound_state *cstate);
+ extern void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate,
+ struct nfsd4_open *open);
+ extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
+- struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc);
++ struct nfsd4_compound_state *, void *oc);
+ extern __be32 nfsd4_close(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *,
+- struct nfsd4_close *close);
++ void *close);
+ extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *,
+- struct nfsd4_open_downgrade *od);
++ void *od);
+ extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *,
+- struct nfsd4_lock *lock);
++ void *lock);
+ extern __be32 nfsd4_lockt(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *,
+- struct nfsd4_lockt *lockt);
++ void *lockt);
+ extern __be32 nfsd4_locku(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *,
+- struct nfsd4_locku *locku);
++ void *locku);
+ extern __be32
+ nfsd4_release_lockowner(struct svc_rqst *rqstp,
+ struct nfsd4_compound_state *,
+- struct nfsd4_release_lockowner *rlockowner);
++ void *rlockowner);
+ extern int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp);
+ extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp,
+- struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr);
++ struct nfsd4_compound_state *, void *dr);
+ extern __be32 nfsd4_renew(struct svc_rqst *rqstp,
+- struct nfsd4_compound_state *, clientid_t *clid);
++ struct nfsd4_compound_state *, void *clid);
+ extern __be32 nfsd4_test_stateid(struct svc_rqst *rqstp,
+- struct nfsd4_compound_state *, struct nfsd4_test_stateid *test_stateid);
++ struct nfsd4_compound_state *, void *test_stateid);
+ extern __be32 nfsd4_free_stateid(struct svc_rqst *rqstp,
+- struct nfsd4_compound_state *, struct nfsd4_free_stateid *free_stateid);
++ struct nfsd4_compound_state *, void *free_stateid);
+ extern void nfsd4_bump_seqid(struct nfsd4_compound_state *, __be32 nfserr);
+
+ #endif
diff --git a/fs/nls/nls_base.c b/fs/nls/nls_base.c
index 52ccd34..7a6b202 100644
--- a/fs/nls/nls_base.c
@@ -85635,10 +109077,71 @@ index 52ccd34..7a6b202 100644
{
return try_then_request_module(find_nls(charset), "nls_%s", charset);
}
+diff --git a/fs/nls/nls_cp932.c b/fs/nls/nls_cp932.c
+index 67b7398..38622e8 100644
+--- a/fs/nls/nls_cp932.c
++++ b/fs/nls/nls_cp932.c
+@@ -7834,7 +7834,7 @@ static const unsigned char charset2upper[256] = {
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */
+ };
+
+-static int uni2char(const wchar_t uni,
++static int uni2char(wchar_t uni,
+ unsigned char *out, int boundlen)
+ {
+ const unsigned char *uni2charset;
+diff --git a/fs/nls/nls_cp936.c b/fs/nls/nls_cp936.c
+index c96546c..d5dfe94 100644
+--- a/fs/nls/nls_cp936.c
++++ b/fs/nls/nls_cp936.c
+@@ -10997,7 +10997,7 @@ static const unsigned char charset2upper[256] = {
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */
+ };
+
+-static int uni2char(const wchar_t uni,
++static int uni2char(wchar_t uni,
+ unsigned char *out, int boundlen)
+ {
+ const unsigned char *uni2charset;
+diff --git a/fs/nls/nls_cp949.c b/fs/nls/nls_cp949.c
+index 199171e..709af9a 100644
+--- a/fs/nls/nls_cp949.c
++++ b/fs/nls/nls_cp949.c
+@@ -13858,7 +13858,7 @@ static const unsigned char charset2upper[256] = {
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */
+ };
+
+-static int uni2char(const wchar_t uni,
++static int uni2char(wchar_t uni,
+ unsigned char *out, int boundlen)
+ {
+ const unsigned char *uni2charset;
+diff --git a/fs/nls/nls_cp950.c b/fs/nls/nls_cp950.c
+index 8e14187..d9cec2f 100644
+--- a/fs/nls/nls_cp950.c
++++ b/fs/nls/nls_cp950.c
+@@ -9394,7 +9394,7 @@ static const unsigned char charset2upper[256] = {
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */
+ };
+
+-static int uni2char(const wchar_t uni,
++static int uni2char(wchar_t uni,
+ unsigned char *out, int boundlen)
+ {
+ const unsigned char *uni2charset;
diff --git a/fs/nls/nls_euc-jp.c b/fs/nls/nls_euc-jp.c
-index 162b3f1..6076a7c 100644
+index 162b3f1..2cb932a 100644
--- a/fs/nls/nls_euc-jp.c
+++ b/fs/nls/nls_euc-jp.c
+@@ -406,7 +406,7 @@ static inline int sjisnec2sjisibm(unsigned char *sjisibm,
+ return 2;
+ }
+
+-static int uni2char(const wchar_t uni,
++static int uni2char(wchar_t uni,
+ unsigned char *out, int boundlen)
+ {
+ int n;
@@ -560,8 +560,10 @@ static int __init init_nls_euc_jp(void)
p_nls = load_nls("cp932");
@@ -85653,9 +109156,18 @@ index 162b3f1..6076a7c 100644
}
diff --git a/fs/nls/nls_koi8-ru.c b/fs/nls/nls_koi8-ru.c
-index a80a741..7b96e1b 100644
+index a80a741..13030f7 100644
--- a/fs/nls/nls_koi8-ru.c
+++ b/fs/nls/nls_koi8-ru.c
+@@ -13,7 +13,7 @@
+
+ static struct nls_table *p_nls;
+
+-static int uni2char(const wchar_t uni,
++static int uni2char(wchar_t uni,
+ unsigned char *out, int boundlen)
+ {
+ if (boundlen <= 0)
@@ -62,8 +62,10 @@ static int __init init_nls_koi8_ru(void)
p_nls = load_nls("koi8-u");
@@ -85707,7 +109219,7 @@ index a95d8e0..a91a5fd 100644
EXPORT_SYMBOL_GPL(fsnotify_get_cookie);
diff --git a/fs/ntfs/dir.c b/fs/ntfs/dir.c
-index 9e38daf..5727cae 100644
+index b2eff58..a779b81 100644
--- a/fs/ntfs/dir.c
+++ b/fs/ntfs/dir.c
@@ -1310,7 +1310,7 @@ find_next_index_buffer:
@@ -85719,8 +109231,121 @@ index 9e38daf..5727cae 100644
ntfs_error(sb, "Out of bounds check failed. Corrupt directory "
"inode 0x%lx or driver bug.", vdir->i_ino);
goto err_out;
+@@ -1517,7 +1517,7 @@ static int ntfs_dir_fsync(struct file *filp, loff_t start, loff_t end,
+ na.type = AT_BITMAP;
+ na.name = I30;
+ na.name_len = 4;
+- bmp_vi = ilookup5(vi->i_sb, vi->i_ino, (test_t)ntfs_test_inode, &na);
++ bmp_vi = ilookup5(vi->i_sb, vi->i_ino, ntfs_test_inode, &na);
+ if (bmp_vi) {
+ write_inode_now(bmp_vi, !datasync);
+ iput(bmp_vi);
+diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c
+index d284f07..06984d4 100644
+--- a/fs/ntfs/inode.c
++++ b/fs/ntfs/inode.c
+@@ -57,8 +57,9 @@
+ * NOTE: This function runs with the inode_hash_lock spin lock held so it is not
+ * allowed to sleep.
+ */
+-int ntfs_test_inode(struct inode *vi, ntfs_attr *na)
++int ntfs_test_inode(struct inode *vi, void *_na)
+ {
++ ntfs_attr *na = _na;
+ ntfs_inode *ni;
+
+ if (vi->i_ino != na->mft_no)
+@@ -101,8 +102,9 @@ int ntfs_test_inode(struct inode *vi, ntfs_attr *na)
+ * NOTE: This function runs with the inode->i_lock spin lock held so it is not
+ * allowed to sleep. (Hence the GFP_ATOMIC allocation.)
+ */
+-static int ntfs_init_locked_inode(struct inode *vi, ntfs_attr *na)
++static int ntfs_init_locked_inode(struct inode *vi, void *_na)
+ {
++ ntfs_attr *na = _na;
+ ntfs_inode *ni = NTFS_I(vi);
+
+ vi->i_ino = na->mft_no;
+@@ -145,7 +147,6 @@ static int ntfs_init_locked_inode(struct inode *vi, ntfs_attr *na)
+ return 0;
+ }
+
+-typedef int (*set_t)(struct inode *, void *);
+ static int ntfs_read_locked_inode(struct inode *vi);
+ static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi);
+ static int ntfs_read_locked_index_inode(struct inode *base_vi,
+@@ -178,8 +179,8 @@ struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no)
+ na.name = NULL;
+ na.name_len = 0;
+
+- vi = iget5_locked(sb, mft_no, (test_t)ntfs_test_inode,
+- (set_t)ntfs_init_locked_inode, &na);
++ vi = iget5_locked(sb, mft_no, ntfs_test_inode,
++ ntfs_init_locked_inode, &na);
+ if (unlikely(!vi))
+ return ERR_PTR(-ENOMEM);
+
+@@ -239,8 +240,8 @@ struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPE type,
+ na.name = name;
+ na.name_len = name_len;
+
+- vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
+- (set_t)ntfs_init_locked_inode, &na);
++ vi = iget5_locked(base_vi->i_sb, na.mft_no, ntfs_test_inode,
++ ntfs_init_locked_inode, &na);
+ if (unlikely(!vi))
+ return ERR_PTR(-ENOMEM);
+
+@@ -294,8 +295,8 @@ struct inode *ntfs_index_iget(struct inode *base_vi, ntfschar *name,
+ na.name = name;
+ na.name_len = name_len;
+
+- vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
+- (set_t)ntfs_init_locked_inode, &na);
++ vi = iget5_locked(base_vi->i_sb, na.mft_no, ntfs_test_inode,
++ ntfs_init_locked_inode, &na);
+ if (unlikely(!vi))
+ return ERR_PTR(-ENOMEM);
+
+diff --git a/fs/ntfs/inode.h b/fs/ntfs/inode.h
+index b3c3469..17208ad 100644
+--- a/fs/ntfs/inode.h
++++ b/fs/ntfs/inode.h
+@@ -267,9 +267,7 @@ typedef struct {
+ ATTR_TYPE type;
+ } ntfs_attr;
+
+-typedef int (*test_t)(struct inode *, void *);
+-
+-extern int ntfs_test_inode(struct inode *vi, ntfs_attr *na);
++extern int ntfs_test_inode(struct inode *vi, void *_na);
+
+ extern struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no);
+ extern struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPE type,
+diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c
+index 3014a36..9fa26af 100644
+--- a/fs/ntfs/mft.c
++++ b/fs/ntfs/mft.c
+@@ -963,7 +963,7 @@ bool ntfs_may_write_mft_record(ntfs_volume *vol, const unsigned long mft_no,
+ * dirty code path of the inode dirty code path when writing
+ * $MFT occurs.
+ */
+- vi = ilookup5_nowait(sb, mft_no, (test_t)ntfs_test_inode, &na);
++ vi = ilookup5_nowait(sb, mft_no, ntfs_test_inode, &na);
+ }
+ if (vi) {
+ ntfs_debug("Base inode 0x%lx is in icache.", mft_no);
+@@ -1024,7 +1024,7 @@ bool ntfs_may_write_mft_record(ntfs_volume *vol, const unsigned long mft_no,
+ vi = igrab(mft_vi);
+ BUG_ON(vi != mft_vi);
+ } else
+- vi = ilookup5_nowait(sb, na.mft_no, (test_t)ntfs_test_inode,
++ vi = ilookup5_nowait(sb, na.mft_no, ntfs_test_inode,
+ &na);
+ if (!vi) {
+ /*
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
-index d1a8535..1cfa4a9 100644
+index 1b38abd..33913db 100644
--- a/fs/ntfs/super.c
+++ b/fs/ntfs/super.c
@@ -688,7 +688,7 @@ static struct buffer_head *read_ntfs_boot_sector(struct super_block *sb,
@@ -85750,8 +109375,17 @@ index d1a8535..1cfa4a9 100644
/* We failed. Cleanup and return. */
if (bh_primary)
brelse(bh_primary);
+@@ -2711,7 +2711,7 @@ static const struct super_operations ntfs_sops = {
+ *
+ * NOTE: @sb->s_flags contains the mount options flags.
+ */
+-static int ntfs_fill_super(struct super_block *sb, void *opt, const int silent)
++static int ntfs_fill_super(struct super_block *sb, void *opt, int silent)
+ {
+ ntfs_volume *vol;
+ struct buffer_head *bh;
diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h
-index e88ccf8..716dfce 100644
+index 68c607e..095cc08 100644
--- a/fs/ocfs2/dlm/dlmcommon.h
+++ b/fs/ocfs2/dlm/dlmcommon.h
@@ -151,9 +151,9 @@ struct dlm_ctxt
@@ -85824,7 +109458,7 @@ index 2ee7fe7..9cff42d 100644
}
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
-index 4e2162b..06d7446 100644
+index 9477d6e..69ffbb2 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -303,7 +303,7 @@ static void dlm_init_mle(struct dlm_master_list_entry *mle,
@@ -85845,11 +109479,31 @@ index 4e2162b..06d7446 100644
atomic_inc(&dlm->res_cur_count);
/* just for consistency */
+diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c
+index 03768bb..e92ce05 100644
+--- a/fs/ocfs2/dlmfs/dlmfs.c
++++ b/fs/ocfs2/dlmfs/dlmfs.c
+@@ -88,13 +88,13 @@ struct workqueue_struct *user_dlm_worker;
+ */
+ #define DLMFS_CAPABILITIES "bast stackglue"
+ static int param_set_dlmfs_capabilities(const char *val,
+- struct kernel_param *kp)
++ const struct kernel_param *kp)
+ {
+ printk(KERN_ERR "%s: readonly parameter\n", kp->name);
+ return -EINVAL;
+ }
+ static int param_get_dlmfs_capabilities(char *buffer,
+- struct kernel_param *kp)
++ const struct kernel_param *kp)
+ {
+ return strlcpy(buffer, DLMFS_CAPABILITIES,
+ strlen(DLMFS_CAPABILITIES) + 1);
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
-index 0a4457f..67ddb4f 100644
+index 7d62c43..e325680 100644
--- a/fs/ocfs2/localalloc.c
+++ b/fs/ocfs2/localalloc.c
-@@ -1319,7 +1319,7 @@ static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
+@@ -1317,7 +1317,7 @@ static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
goto bail;
}
@@ -85880,7 +109534,7 @@ index 7a01262..23667d1 100644
enum ocfs2_local_alloc_state
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
-index fc6d25f..7b72242 100644
+index 2f19aee..26ac57f 100644
--- a/fs/ocfs2/suballoc.c
+++ b/fs/ocfs2/suballoc.c
@@ -851,7 +851,7 @@ static int ocfs2_reserve_suballoc_bits(struct ocfs2_super *osb,
@@ -85938,7 +109592,7 @@ index fc6d25f..7b72242 100644
}
}
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
-index 2de4c8a..a106a0d 100644
+index faa1365..ded3cff 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -310,11 +310,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
@@ -85958,7 +109612,7 @@ index 2de4c8a..a106a0d 100644
out += snprintf(buf + out, len - out,
"%10s => State: %u Descriptor: %llu Size: %u bits "
-@@ -2106,11 +2106,11 @@ static int ocfs2_initialize_super(struct super_block *sb,
+@@ -2101,11 +2101,11 @@ static int ocfs2_initialize_super(struct super_block *sb,
mutex_init(&osb->system_file_mutex);
@@ -85976,7 +109630,7 @@ index 2de4c8a..a106a0d 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 6a24f98..c16baf7 100644
+index 17cb6b1..d64c63e 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -32,6 +32,8 @@
@@ -86056,7 +109710,7 @@ index 6a24f98..c16baf7 100644
@@ -511,6 +535,16 @@ static int chmod_common(struct path *path, umode_t mode)
return error;
retry_deleg:
- mutex_lock(&inode->i_mutex);
+ inode_lock(inode);
+
+ if (!gr_acl_handle_chmod(path->dentry, path->mnt, &mode)) {
+ error = -EACCES;
@@ -86080,7 +109734,7 @@ index 6a24f98..c16baf7 100644
retry_deleg:
newattrs.ia_valid = ATTR_CTIME;
if (user != (uid_t) -1) {
-@@ -1027,6 +1064,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
+@@ -1024,6 +1061,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
} else {
fsnotify_open(f);
fd_install(fd, f);
@@ -86089,7 +109743,7 @@ index 6a24f98..c16baf7 100644
}
putname(tmp);
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
-index eff6319..d8a12987 100644
+index d894e7c..8fa99559 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -153,7 +153,7 @@ static char *ovl_read_symlink(struct dentry *realdentry)
@@ -86102,10 +109756,10 @@ index eff6319..d8a12987 100644
if (res < 0) {
free_page((unsigned long) buf);
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
-index 05ac9a9..c60faca 100644
+index a4ff5d0..6034cb5 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
-@@ -358,6 +358,9 @@ struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags)
+@@ -347,6 +347,9 @@ struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags)
if (d_is_dir(dentry))
return d_backing_inode(dentry);
@@ -86116,10 +109770,10 @@ index 05ac9a9..c60faca 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 a1acc60..52c2657 100644
+index 4399ea8..4915433 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
-@@ -175,7 +175,7 @@ void ovl_path_lower(struct dentry *dentry, struct path *path)
+@@ -194,7 +194,7 @@ void ovl_path_lower(struct dentry *dentry, struct path *path)
{
struct ovl_entry *oe = dentry->d_fsdata;
@@ -86128,7 +109782,7 @@ index a1acc60..52c2657 100644
}
int ovl_want_write(struct dentry *dentry)
-@@ -917,8 +917,8 @@ static unsigned int ovl_split_lowerdirs(char *str)
+@@ -944,8 +944,8 @@ static unsigned int ovl_split_lowerdirs(char *str)
static int ovl_fill_super(struct super_block *sb, void *data, int silent)
{
@@ -86140,25 +109794,19 @@ index a1acc60..52c2657 100644
struct ovl_entry *oe;
struct ovl_fs *ufs;
diff --git a/fs/pipe.c b/fs/pipe.c
-index 42cf8dd..932cb27 100644
+index ab8dad3..932cb27 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
-@@ -36,7 +36,13 @@ unsigned int pipe_max_size = 1048576;
+@@ -36,7 +36,7 @@ unsigned int pipe_max_size = 1048576;
/*
* Minimum pipe size, as required by POSIX
*/
-unsigned int pipe_min_size = PAGE_SIZE;
+unsigned int pipe_min_size __read_only = PAGE_SIZE;
-+
-+/* Maximum allocatable pages per user. Hard limit is unset by default, soft
-+ * matches default values.
-+ */
-+unsigned long pipe_user_pages_hard;
-+unsigned long pipe_user_pages_soft = PIPE_DEF_BUFFERS * INR_OPEN_CUR;
- /*
- * We use a start+len construction, which provides full use of the
-@@ -55,7 +61,7 @@ unsigned int pipe_min_size = PAGE_SIZE;
+ /* Maximum allocatable pages per user. Hard limit is unset by default, soft
+ * matches default values.
+@@ -61,7 +61,7 @@ unsigned long pipe_user_pages_soft = PIPE_DEF_BUFFERS * INR_OPEN_CUR;
static void pipe_lock_nested(struct pipe_inode_info *pipe, int subclass)
{
@@ -86167,7 +109815,7 @@ index 42cf8dd..932cb27 100644
mutex_lock_nested(&pipe->mutex, subclass);
}
-@@ -70,7 +76,7 @@ EXPORT_SYMBOL(pipe_lock);
+@@ -76,7 +76,7 @@ EXPORT_SYMBOL(pipe_lock);
void pipe_unlock(struct pipe_inode_info *pipe)
{
@@ -86176,7 +109824,7 @@ index 42cf8dd..932cb27 100644
mutex_unlock(&pipe->mutex);
}
EXPORT_SYMBOL(pipe_unlock);
-@@ -291,9 +297,9 @@ pipe_read(struct kiocb *iocb, struct iov_iter *to)
+@@ -297,9 +297,9 @@ pipe_read(struct kiocb *iocb, struct iov_iter *to)
}
if (bufs) /* More to do? */
continue;
@@ -86188,7 +109836,7 @@ index 42cf8dd..932cb27 100644
/* syscall merging: Usually we must not sleep
* if O_NONBLOCK is set, or if we got some data.
* But if a writer sleeps in kernel space, then
-@@ -350,7 +356,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
+@@ -356,7 +356,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
__pipe_lock(pipe);
@@ -86197,7 +109845,7 @@ index 42cf8dd..932cb27 100644
send_sig(SIGPIPE, current, 0);
ret = -EPIPE;
goto out;
-@@ -385,7 +391,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
+@@ -391,7 +391,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
for (;;) {
int bufs;
@@ -86206,7 +109854,7 @@ index 42cf8dd..932cb27 100644
send_sig(SIGPIPE, current, 0);
if (!ret)
ret = -EPIPE;
-@@ -453,9 +459,9 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
+@@ -459,9 +459,9 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from)
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
do_wakeup = 0;
}
@@ -86218,7 +109866,7 @@ index 42cf8dd..932cb27 100644
}
out:
__pipe_unlock(pipe);
-@@ -510,7 +516,7 @@ pipe_poll(struct file *filp, poll_table *wait)
+@@ -516,7 +516,7 @@ pipe_poll(struct file *filp, poll_table *wait)
mask = 0;
if (filp->f_mode & FMODE_READ) {
mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
@@ -86227,7 +109875,7 @@ index 42cf8dd..932cb27 100644
mask |= POLLHUP;
}
-@@ -520,7 +526,7 @@ pipe_poll(struct file *filp, poll_table *wait)
+@@ -526,7 +526,7 @@ pipe_poll(struct file *filp, poll_table *wait)
* Most Unices do not set POLLERR for FIFOs but on Linux they
* behave exactly like pipes for poll().
*/
@@ -86236,7 +109884,7 @@ index 42cf8dd..932cb27 100644
mask |= POLLERR;
}
-@@ -532,7 +538,7 @@ static void put_pipe_info(struct inode *inode, struct pipe_inode_info *pipe)
+@@ -538,7 +538,7 @@ static void put_pipe_info(struct inode *inode, struct pipe_inode_info *pipe)
int kill = 0;
spin_lock(&inode->i_lock);
@@ -86245,7 +109893,7 @@ index 42cf8dd..932cb27 100644
inode->i_pipe = NULL;
kill = 1;
}
-@@ -549,11 +555,11 @@ pipe_release(struct inode *inode, struct file *file)
+@@ -555,11 +555,11 @@ pipe_release(struct inode *inode, struct file *file)
__pipe_lock(pipe);
if (file->f_mode & FMODE_READ)
@@ -86260,68 +109908,7 @@ index 42cf8dd..932cb27 100644
wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM | POLLERR | POLLHUP);
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
-@@ -583,20 +589,49 @@ pipe_fasync(int fd, struct file *filp, int on)
- return retval;
- }
-
-+static void account_pipe_buffers(struct pipe_inode_info *pipe,
-+ unsigned long old, unsigned long new)
-+{
-+ atomic_long_add(new - old, &pipe->user->pipe_bufs);
-+}
-+
-+static bool too_many_pipe_buffers_soft(struct user_struct *user)
-+{
-+ return pipe_user_pages_soft &&
-+ atomic_long_read(&user->pipe_bufs) >= pipe_user_pages_soft;
-+}
-+
-+static bool too_many_pipe_buffers_hard(struct user_struct *user)
-+{
-+ return pipe_user_pages_hard &&
-+ atomic_long_read(&user->pipe_bufs) >= pipe_user_pages_hard;
-+}
-+
- struct pipe_inode_info *alloc_pipe_info(void)
- {
- struct pipe_inode_info *pipe;
-
- pipe = kzalloc(sizeof(struct pipe_inode_info), GFP_KERNEL);
- if (pipe) {
-- pipe->bufs = kzalloc(sizeof(struct pipe_buffer) * PIPE_DEF_BUFFERS, GFP_KERNEL);
-+ unsigned long pipe_bufs = PIPE_DEF_BUFFERS;
-+ struct user_struct *user = get_current_user();
-+
-+ if (!too_many_pipe_buffers_hard(user)) {
-+ if (too_many_pipe_buffers_soft(user))
-+ pipe_bufs = 1;
-+ pipe->bufs = kzalloc(sizeof(struct pipe_buffer) * pipe_bufs, GFP_KERNEL);
-+ }
-+
- if (pipe->bufs) {
- init_waitqueue_head(&pipe->wait);
- pipe->r_counter = pipe->w_counter = 1;
-- pipe->buffers = PIPE_DEF_BUFFERS;
-+ pipe->buffers = pipe_bufs;
-+ pipe->user = user;
-+ account_pipe_buffers(pipe, 0, pipe_bufs);
- mutex_init(&pipe->mutex);
- return pipe;
- }
-+ free_uid(user);
- kfree(pipe);
- }
-
-@@ -607,6 +642,8 @@ void free_pipe_info(struct pipe_inode_info *pipe)
- {
- int i;
-
-+ account_pipe_buffers(pipe, pipe->buffers, 0);
-+ free_uid(pipe->user);
- for (i = 0; i < pipe->buffers; i++) {
- struct pipe_buffer *buf = pipe->bufs + i;
- if (buf->ops)
-@@ -618,7 +655,7 @@ void free_pipe_info(struct pipe_inode_info *pipe)
+@@ -655,7 +655,7 @@ void free_pipe_info(struct pipe_inode_info *pipe)
kfree(pipe);
}
@@ -86330,7 +109917,7 @@ index 42cf8dd..932cb27 100644
/*
* pipefs_dname() is called from d_path().
-@@ -648,8 +685,9 @@ static struct inode * get_pipe_inode(void)
+@@ -685,8 +685,9 @@ static struct inode * get_pipe_inode(void)
goto fail_iput;
inode->i_pipe = pipe;
@@ -86342,7 +109929,7 @@ index 42cf8dd..932cb27 100644
inode->i_fop = &pipefifo_fops;
/*
-@@ -831,17 +869,17 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -868,17 +869,17 @@ static int fifo_open(struct inode *inode, struct file *filp)
spin_lock(&inode->i_lock);
if (inode->i_pipe) {
pipe = inode->i_pipe;
@@ -86363,7 +109950,7 @@ index 42cf8dd..932cb27 100644
spin_unlock(&inode->i_lock);
free_pipe_info(pipe);
pipe = inode->i_pipe;
-@@ -866,10 +904,10 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -903,10 +904,10 @@ static int fifo_open(struct inode *inode, struct file *filp)
* opened, even when there is no process writing the FIFO.
*/
pipe->r_counter++;
@@ -86376,7 +109963,7 @@ index 42cf8dd..932cb27 100644
if ((filp->f_flags & O_NONBLOCK)) {
/* suppress POLLHUP until we have
* seen a writer */
-@@ -888,14 +926,14 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -925,14 +926,14 @@ static int fifo_open(struct inode *inode, struct file *filp)
* errno=ENXIO when there is no process reading the FIFO.
*/
ret = -ENXIO;
@@ -86394,7 +109981,7 @@ index 42cf8dd..932cb27 100644
if (wait_for_partner(pipe, &pipe->r_counter))
goto err_wr;
}
-@@ -909,11 +947,11 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -946,11 +947,11 @@ static int fifo_open(struct inode *inode, struct file *filp)
* the process can at least talk to itself.
*/
@@ -86409,7 +109996,7 @@ index 42cf8dd..932cb27 100644
wake_up_partner(pipe);
break;
-@@ -927,13 +965,13 @@ static int fifo_open(struct inode *inode, struct file *filp)
+@@ -964,13 +965,13 @@ static int fifo_open(struct inode *inode, struct file *filp)
return 0;
err_rd:
@@ -86425,15 +110012,7 @@ index 42cf8dd..932cb27 100644
wake_up_interruptible(&pipe->wait);
ret = -ERESTARTSYS;
goto err;
-@@ -998,6 +1036,7 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long nr_pages)
- memcpy(bufs + head, pipe->bufs, tail * sizeof(struct pipe_buffer));
- }
-
-+ account_pipe_buffers(pipe, pipe->buffers, nr_pages);
- pipe->curbuf = 0;
- kfree(pipe->bufs);
- pipe->bufs = bufs;
-@@ -1009,7 +1048,7 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long nr_pages)
+@@ -1047,7 +1048,7 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long nr_pages)
* Currently we rely on the pipe array holding a power-of-2 number
* of pages.
*/
@@ -86442,7 +110021,7 @@ index 42cf8dd..932cb27 100644
{
unsigned long nr_pages;
-@@ -1057,18 +1096,26 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
+@@ -1095,13 +1096,16 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg)
switch (cmd) {
case F_SETPIPE_SZ: {
@@ -86462,18 +110041,8 @@ index 42cf8dd..932cb27 100644
goto out;
if (!capable(CAP_SYS_RESOURCE) && size > pipe_max_size) {
- ret = -EPERM;
- goto out;
-+ } else if ((too_many_pipe_buffers_hard(pipe->user) ||
-+ too_many_pipe_buffers_soft(pipe->user)) &&
-+ !capable(CAP_SYS_RESOURCE) && !capable(CAP_SYS_ADMIN)) {
-+ ret = -EPERM;
-+ goto out;
- }
- ret = pipe_set_size(pipe, nr_pages);
- break;
diff --git a/fs/posix_acl.c b/fs/posix_acl.c
-index 4adde1e..9311892 100644
+index 711dd51..e55fd79 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -20,6 +20,7 @@
@@ -86750,7 +110319,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 b7de324..c1235e2 100644
+index 4f764c2..d16e8b1 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -113,6 +113,14 @@ struct pid_entry {
@@ -86961,9 +110530,9 @@ index b7de324..c1235e2 100644
if (write && copy_from_user(page, buf, this_len)) {
copied = -EFAULT;
-@@ -954,9 +1034,16 @@ static ssize_t environ_read(struct file *file, char __user *buf,
- int ret = 0;
+@@ -955,9 +1035,16 @@ static ssize_t environ_read(struct file *file, char __user *buf,
struct mm_struct *mm = file->private_data;
+ unsigned long env_start, env_end;
- if (!mm)
+ if (!mm || !mm->env_end)
@@ -86979,17 +110548,22 @@ index b7de324..c1235e2 100644
page = (char *)__get_free_page(GFP_TEMPORARY);
if (!page)
return -ENOMEM;
-@@ -966,7 +1053,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
- goto free;
+@@ -971,9 +1058,12 @@ static ssize_t environ_read(struct file *file, char __user *buf,
+ env_end = mm->env_end;
+ up_read(&mm->mmap_sem);
+
++ if (!env_end)
++ goto free;
++
while (count > 0) {
size_t this_len, max_len;
- int retval;
+ ssize_t retval;
- if (src >= (mm->env_end - mm->env_start))
+ if (src >= (env_end - env_start))
break;
-@@ -1572,7 +1659,7 @@ static const char *proc_pid_follow_link(struct dentry *dentry, void **cookie)
- int error = -EACCES;
+@@ -1583,7 +1673,7 @@ static const char *proc_pid_get_link(struct dentry *dentry,
+ return ERR_PTR(-ECHILD);
/* Are we allowed to snoop on the tasks file descriptors? */
- if (!proc_fd_access_allowed(inode))
@@ -86997,7 +110571,7 @@ index b7de324..c1235e2 100644
goto out;
error = PROC_I(inode)->op.proc_get_link(dentry, &path);
-@@ -1616,8 +1703,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b
+@@ -1627,8 +1717,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b
struct path path;
/* Are we allowed to snoop on the tasks file descriptors? */
@@ -87018,7 +110592,7 @@ index b7de324..c1235e2 100644
error = PROC_I(inode)->op.proc_get_link(dentry, &path);
if (error)
-@@ -1667,7 +1764,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t
+@@ -1678,7 +1778,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t
rcu_read_lock();
cred = __task_cred(task);
inode->i_uid = cred->euid;
@@ -87030,7 +110604,7 @@ index b7de324..c1235e2 100644
rcu_read_unlock();
}
security_task_to_inode(task, inode);
-@@ -1703,10 +1804,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+@@ -1714,10 +1818,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
return -ENOENT;
}
if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
@@ -87050,7 +110624,7 @@ index b7de324..c1235e2 100644
}
}
rcu_read_unlock();
-@@ -1744,11 +1854,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags)
+@@ -1755,11 +1868,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags)
if (task) {
if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
@@ -87071,7 +110645,7 @@ index b7de324..c1235e2 100644
rcu_read_unlock();
} else {
inode->i_uid = GLOBAL_ROOT_UID;
-@@ -2287,6 +2406,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
+@@ -2300,6 +2422,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
if (!task)
goto out_no_task;
@@ -87081,7 +110655,7 @@ index b7de324..c1235e2 100644
/*
* Yes, it does not scale. And it should not. Don't add
* new entries into /proc/<tgid>/ without very good reasons.
-@@ -2317,6 +2439,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
+@@ -2330,6 +2455,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
if (!task)
return -ENOENT;
@@ -87091,7 +110665,7 @@ index b7de324..c1235e2 100644
if (!dir_emit_dots(file, ctx))
goto out;
-@@ -2732,7 +2857,9 @@ static const struct inode_operations proc_task_inode_operations;
+@@ -2742,7 +2870,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),
@@ -87101,7 +110675,7 @@ index b7de324..c1235e2 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
-@@ -2750,7 +2877,7 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2760,7 +2890,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),
@@ -87110,7 +110684,7 @@ index b7de324..c1235e2 100644
ONE("syscall", S_IRUSR, proc_pid_syscall),
#endif
REG("cmdline", S_IRUGO, proc_pid_cmdline_ops),
-@@ -2775,10 +2902,10 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2785,10 +2915,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
@@ -87123,7 +110697,7 @@ index b7de324..c1235e2 100644
ONE("stack", S_IRUSR, proc_pid_stack),
#endif
#ifdef CONFIG_SCHED_INFO
-@@ -2812,6 +2939,9 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2822,6 +2952,9 @@ static const struct pid_entry tgid_base_stuff[] = {
#ifdef CONFIG_HARDWALL
ONE("hardwall", S_IRUGO, proc_pid_hardwall),
#endif
@@ -87133,7 +110707,7 @@ index b7de324..c1235e2 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),
-@@ -2944,7 +3074,14 @@ static int proc_pid_instantiate(struct inode *dir,
+@@ -2954,7 +3087,14 @@ static int proc_pid_instantiate(struct inode *dir,
if (!inode)
goto out;
@@ -87148,7 +110722,7 @@ index b7de324..c1235e2 100644
inode->i_op = &proc_tgid_base_inode_operations;
inode->i_fop = &proc_tgid_base_operations;
inode->i_flags|=S_IMMUTABLE;
-@@ -2982,7 +3119,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
+@@ -2992,7 +3132,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
if (!task)
goto out;
@@ -87160,7 +110734,7 @@ index b7de324..c1235e2 100644
put_task_struct(task);
out:
return ERR_PTR(result);
-@@ -3096,7 +3237,7 @@ static const struct pid_entry tid_base_stuff[] = {
+@@ -3106,7 +3250,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),
@@ -87169,7 +110743,7 @@ index b7de324..c1235e2 100644
ONE("syscall", S_IRUSR, proc_pid_syscall),
#endif
REG("cmdline", S_IRUGO, proc_pid_cmdline_ops),
-@@ -3123,10 +3264,10 @@ static const struct pid_entry tid_base_stuff[] = {
+@@ -3133,10 +3277,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
@@ -87215,7 +110789,7 @@ index 50493ed..248166b 100644
}
fs_initcall(proc_devices_init);
diff --git a/fs/proc/fd.c b/fs/proc/fd.c
-index 3c2a915..cb7934e 100644
+index 56afa5e..cb7934e 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)
@@ -87228,15 +110802,7 @@ index 3c2a915..cb7934e 100644
put_task_struct(task);
if (files) {
-@@ -258,6 +259,7 @@ static int proc_readfd_common(struct file *file, struct dir_context *ctx,
- name, len, instantiate, p,
- (void *)(unsigned long)fd))
- goto out_fd_loop;
-+ cond_resched();
- rcu_read_lock();
- }
- rcu_read_unlock();
-@@ -295,13 +297,15 @@ int proc_fd_permission(struct inode *inode, int mask)
+@@ -296,13 +297,15 @@ int proc_fd_permission(struct inode *inode, int mask)
int rv;
rv = generic_permission(inode, mask);
@@ -87374,7 +110940,7 @@ index ff3ffc7..1aec0a3 100644
{
umode_t mode = S_IFDIR | S_IRUGO | S_IXUGO;
diff --git a/fs/proc/inode.c b/fs/proc/inode.c
-index bd95b9f..a64a773 100644
+index 42305dd..968caba 100644
--- a/fs/proc/inode.c
+++ b/fs/proc/inode.c
@@ -23,11 +23,17 @@
@@ -87409,7 +110975,7 @@ index bd95b9f..a64a773 100644
}
static struct kmem_cache * proc_inode_cachep;
-@@ -429,7 +442,11 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
+@@ -431,7 +444,11 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
if (de->mode) {
inode->i_mode = de->mode;
inode->i_uid = de->uid;
@@ -87486,7 +111052,7 @@ index a352d57..cb94a5c 100644
}
fs_initcall(proc_interrupts_init);
diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
-index 92e6726..47a8d4c 100644
+index a939f5e..0de6e70 100644
--- a/fs/proc/kcore.c
+++ b/fs/proc/kcore.c
@@ -316,7 +316,7 @@ static char *storenote(struct memelfnote *men, char *bufp)
@@ -87564,10 +111130,10 @@ index 92e6726..47a8d4c 100644
.priority = 0,
};
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
-index 9155a5a..abe1823 100644
+index df4661a..03c3e5e 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
-@@ -191,7 +191,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
+@@ -188,7 +188,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
0ul, // used to be vmalloc 'used'
0ul // used to be vmalloc 'largest_chunk'
#ifdef CONFIG_MEMORY_FAILURE
@@ -88011,13 +111577,13 @@ 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 09cd3ed..862cbb3 100644
+index fa95ab2..7ab502b 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
-@@ -14,12 +14,19 @@
- #include <linux/swapops.h>
+@@ -15,12 +15,19 @@
#include <linux/mmu_notifier.h>
#include <linux/page_idle.h>
+ #include <linux/shmem_fs.h>
+#include <linux/grsecurity.h>
#include <asm/elf.h>
@@ -88033,8 +111599,8 @@ index 09cd3ed..862cbb3 100644
+
void task_mem(struct seq_file *m, struct mm_struct *mm)
{
- unsigned long data, text, lib, swap, ptes, pmds;
-@@ -58,8 +65,13 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
+ unsigned long text, lib, swap, ptes, pmds, anon, file, shmem;
+@@ -65,8 +72,13 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
"VmLib:\t%8lu kB\n"
"VmPTE:\t%8lu kB\n"
"VmPMD:\t%8lu kB\n"
@@ -88050,7 +111616,7 @@ index 09cd3ed..862cbb3 100644
total_vm << (PAGE_SHIFT-10),
mm->locked_vm << (PAGE_SHIFT-10),
mm->pinned_vm << (PAGE_SHIFT-10),
-@@ -69,7 +81,19 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
+@@ -79,7 +91,19 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
mm->stack_vm << (PAGE_SHIFT-10), text, lib,
ptes >> 10,
pmds >> 10,
@@ -88071,7 +111637,16 @@ index 09cd3ed..862cbb3 100644
hugetlb_report_usage(m, mm);
}
-@@ -287,13 +311,13 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -281,7 +305,7 @@ static int is_stack(struct proc_maps_private *priv,
+ stack = vma_is_stack_for_task(vma, task);
+ rcu_read_unlock();
+ }
+- return stack;
++ return stack || (vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP));
+ }
+
+ static void
+@@ -304,13 +328,13 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
}
@@ -88090,7 +111665,7 @@ index 09cd3ed..862cbb3 100644
seq_setwidth(m, 25 + sizeof(void *) * 6 - 1);
seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ",
-@@ -303,7 +327,11 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -320,7 +344,11 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
flags & VM_WRITE ? 'w' : '-',
flags & VM_EXEC ? 'x' : '-',
flags & VM_MAYSHARE ? 's' : 'p',
@@ -88102,7 +111677,7 @@ index 09cd3ed..862cbb3 100644
MAJOR(dev), MINOR(dev), ino);
/*
-@@ -312,7 +340,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -329,7 +357,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
*/
if (file) {
seq_pad(m, ' ');
@@ -88111,19 +111686,7 @@ index 09cd3ed..862cbb3 100644
goto done;
}
-@@ -343,8 +371,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
- * Thread stack in /proc/PID/task/TID/maps or
- * the main process stack.
- */
-- if (!is_pid || (vma->vm_start <= mm->start_stack &&
-- vma->vm_end >= mm->start_stack)) {
-+ if (!is_pid || (vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP)) ||
-+ (vma->vm_start <= mm->start_stack &&
-+ vma->vm_end >= mm->start_stack)) {
- name = "[stack]";
- } else {
- /* Thread stack in /proc/PID/maps */
-@@ -364,6 +393,12 @@ done:
+@@ -366,6 +394,12 @@ done:
static int show_map(struct seq_file *m, void *v, int is_pid)
{
@@ -88136,7 +111699,7 @@ index 09cd3ed..862cbb3 100644
show_map_vma(m, v, is_pid);
m_cache_vma(m, v);
return 0;
-@@ -601,6 +636,9 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma)
+@@ -646,6 +680,9 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma)
[ilog2(VM_RAND_READ)] = "rr",
[ilog2(VM_DONTCOPY)] = "dc",
[ilog2(VM_DONTEXPAND)] = "de",
@@ -88146,7 +111709,7 @@ index 09cd3ed..862cbb3 100644
[ilog2(VM_ACCOUNT)] = "ac",
[ilog2(VM_NORESERVE)] = "nr",
[ilog2(VM_HUGETLB)] = "ht",
-@@ -670,9 +708,18 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
+@@ -715,6 +752,12 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
.private = &mss,
};
@@ -88157,6 +111720,12 @@ index 09cd3ed..862cbb3 100644
+ }
+#endif
memset(&mss, 0, sizeof mss);
+
+ #ifdef CONFIG_SHMEM
+@@ -741,8 +784,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
+ }
+ #endif
+
- /* mmap_sem is held in m_start */
- walk_page_vma(vma, &smaps_walk);
+#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
@@ -88167,7 +111736,7 @@ index 09cd3ed..862cbb3 100644
show_map_vma(m, vma, is_pid);
-@@ -694,7 +741,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
+@@ -764,7 +810,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
"KernelPageSize: %8lu kB\n"
"MMUPageSize: %8lu kB\n"
"Locked: %8lu kB\n",
@@ -88179,7 +111748,7 @@ index 09cd3ed..862cbb3 100644
mss.resident >> 10,
(unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
mss.shared_clean >> 10,
-@@ -1518,6 +1569,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+@@ -1588,6 +1638,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
char buffer[64];
int nid;
@@ -88193,7 +111762,7 @@ index 09cd3ed..862cbb3 100644
if (!mm)
return 0;
-@@ -1532,11 +1590,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+@@ -1602,11 +1659,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);
}
@@ -88209,9 +111778,9 @@ index 09cd3ed..862cbb3 100644
+ seq_file_path(m, file, "\n\t\\= ");
} else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
seq_puts(m, " heap");
- } else {
+ } else if (is_stack(proc_priv, vma, is_pid)) {
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
-index e0d64c9..c44c96e 100644
+index faacb0c..ce736cd 100644
--- a/fs/proc/task_nommu.c
+++ b/fs/proc/task_nommu.c
@@ -51,7 +51,7 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
@@ -88223,15 +111792,24 @@ index e0d64c9..c44c96e 100644
sbytes += kobjsize(current->fs);
else
bytes += kobjsize(current->fs);
-@@ -180,7 +180,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
+@@ -142,7 +142,7 @@ static int is_stack(struct proc_maps_private *priv,
+ stack = vma_is_stack_for_task(vma, task);
+ rcu_read_unlock();
+ }
+- return stack;
++ return stack || (vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP));
+ }
+
+ /*
+@@ -183,7 +183,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
if (file) {
seq_pad(m, ' ');
- seq_file_path(m, file, "");
+ seq_file_path(m, file, "\n\\");
- } else if (mm) {
- pid_t tid = pid_of_stack(priv, vma, is_pid);
-
+ } else if (mm && is_stack(priv, vma, is_pid)) {
+ seq_pad(m, ' ');
+ seq_printf(m, "[stack]");
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 4e61388..1a2523d 100644
--- a/fs/proc/vmcore.c
@@ -88303,10 +111881,10 @@ index d3fb2b6..43a8140 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 bb2869f..d34ada8 100644
+index d07a2f9..380906a 100644
--- a/fs/quota/netlink.c
+++ b/fs/quota/netlink.c
-@@ -44,7 +44,7 @@ static struct genl_family quota_genl_family = {
+@@ -42,7 +42,7 @@ static struct genl_family quota_genl_family = {
void quota_send_warning(struct kqid qid, dev_t dev,
const char warntype)
{
@@ -88315,7 +111893,7 @@ index bb2869f..d34ada8 100644
struct sk_buff *skb;
void *msg_head;
int ret;
-@@ -60,7 +60,7 @@ void quota_send_warning(struct kqid qid, dev_t dev,
+@@ -58,7 +58,7 @@ void quota_send_warning(struct kqid qid, dev_t dev,
"VFS: Not enough memory to send quota warning.\n");
return;
}
@@ -88325,10 +111903,20 @@ index bb2869f..d34ada8 100644
if (!msg_head) {
printk(KERN_ERR
diff --git a/fs/read_write.c b/fs/read_write.c
-index 819ef3f..f07222d 100644
+index dadf24e..f8ca660 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
-@@ -505,7 +505,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
+@@ -23,7 +23,8 @@
+ #include <asm/uaccess.h>
+ #include <asm/unistd.h>
+
+-typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *);
++typedef ssize_t (*io_fnr_t)(struct file *, char __user *, size_t, loff_t *);
++typedef ssize_t (*io_fnw_t)(struct file *, const char __user *, size_t, loff_t *);
+ 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
old_fs = get_fs();
set_fs(get_ds());
@@ -88337,8 +111925,97 @@ index 819ef3f..f07222d 100644
if (count > MAX_RW_COUNT)
count = MAX_RW_COUNT;
ret = __vfs_write(file, p, count, pos);
+@@ -709,7 +710,7 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
+
+ /* Do it by hand, with file-ops */
+ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter,
+- loff_t *ppos, io_fn_t fn)
++ loff_t *ppos, io_fnr_t fnr, io_fnw_t fnw)
+ {
+ ssize_t ret = 0;
+
+@@ -717,7 +718,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;
+
+- nr = fn(filp, iovec.iov_base, iovec.iov_len, ppos);
++ if (fnr)
++ nr = fnr(filp, iovec.iov_base, iovec.iov_len, ppos);
++ else
++ nr = fnw(filp, iovec.iov_base, iovec.iov_len, ppos);
+
+ if (nr < 0) {
+ if (!ret)
+@@ -820,7 +824,8 @@ static ssize_t do_readv_writev(int type, struct file *file,
+ struct iovec *iov = iovstack;
+ struct iov_iter iter;
+ ssize_t ret;
+- io_fn_t fn;
++ io_fnr_t fnr;
++ io_fnw_t fnw;
+ iter_fn_t iter_fn;
+
+ ret = import_iovec(type, uvector, nr_segs,
+@@ -836,10 +841,12 @@ static ssize_t do_readv_writev(int type, struct file *file,
+ goto out;
+
+ if (type == READ) {
+- fn = file->f_op->read;
++ fnr = file->f_op->read;
++ fnw = NULL;
+ iter_fn = file->f_op->read_iter;
+ } else {
+- fn = (io_fn_t)file->f_op->write;
++ fnr = NULL;
++ fnw = file->f_op->write;
+ iter_fn = file->f_op->write_iter;
+ file_start_write(file);
+ }
+@@ -847,7 +854,7 @@ static ssize_t do_readv_writev(int type, struct file *file,
+ if (iter_fn)
+ ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
+ else
+- ret = do_loop_readv_writev(file, &iter, pos, fn);
++ ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw);
+
+ if (type != READ)
+ file_end_write(file);
+@@ -994,7 +1001,8 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
+ struct iovec *iov = iovstack;
+ struct iov_iter iter;
+ ssize_t ret;
+- io_fn_t fn;
++ io_fnr_t fnr;
++ io_fnw_t fnw;
+ iter_fn_t iter_fn;
+
+ ret = compat_import_iovec(type, uvector, nr_segs,
+@@ -1010,10 +1018,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
+ goto out;
+
+ if (type == READ) {
+- fn = file->f_op->read;
++ fnr = file->f_op->read;
++ fnw = NULL;
+ iter_fn = file->f_op->read_iter;
+ } else {
+- fn = (io_fn_t)file->f_op->write;
++ fnr = NULL;
++ fnw = file->f_op->write;
+ iter_fn = file->f_op->write_iter;
+ file_start_write(file);
+ }
+@@ -1021,7 +1031,7 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
+ if (iter_fn)
+ ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
+ else
+- ret = do_loop_readv_writev(file, &iter, pos, fn);
++ ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw);
+
+ if (type != READ)
+ file_end_write(file);
diff --git a/fs/readdir.c b/fs/readdir.c
-index ced6791..e0500c1 100644
+index e69ef3b..ffb5456 100644
--- a/fs/readdir.c
+++ b/fs/readdir.c
@@ -18,6 +18,7 @@
@@ -88486,7 +112163,7 @@ index aca73dd..e3c558d 100644
#if ! (TYPE_STAT_DATA == 0 && TYPE_INDIRECT == 1 && TYPE_DIRECT == 2 && TYPE_DIRENTRY == 3)
diff --git a/fs/reiserfs/procfs.c b/fs/reiserfs/procfs.c
-index 621b9f3..af527fd 100644
+index fe99915..24fd9bd 100644
--- a/fs/reiserfs/procfs.c
+++ b/fs/reiserfs/procfs.c
@@ -114,7 +114,7 @@ static int show_super(struct seq_file *m, void *unused)
@@ -88521,10 +112198,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 4a62fe8..5dc2f5f 100644
+index c0306ec..4083bee 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
-@@ -1870,6 +1870,10 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
+@@ -1871,6 +1871,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);
@@ -88536,7 +112213,7 @@ index 4a62fe8..5dc2f5f 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 0155473..da772c4 100644
+index 79d0d49..9203954 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -20,6 +20,7 @@
@@ -88659,7 +112336,7 @@ index e85664b..ad62e5f 100644
{
const struct seq_operations *op = ((struct seq_file *)file->private_data)->op;
diff --git a/fs/splice.c b/fs/splice.c
-index 0f77e96..9dce13e 100644
+index 19e0b10..288f7e0 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -195,7 +195,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
@@ -88692,7 +112369,7 @@ index 0f77e96..9dce13e 100644
}
pipe_unlock(pipe);
-@@ -582,7 +582,7 @@ static ssize_t kernel_readv(struct file *file, const struct iovec *vec,
+@@ -580,7 +580,7 @@ static ssize_t kernel_readv(struct file *file, const struct iovec *vec,
old_fs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
@@ -88701,7 +112378,7 @@ index 0f77e96..9dce13e 100644
set_fs(old_fs);
return res;
-@@ -597,7 +597,7 @@ ssize_t kernel_write(struct file *file, const char *buf, size_t count,
+@@ -595,7 +595,7 @@ ssize_t kernel_write(struct file *file, const char *buf, size_t count,
old_fs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
@@ -88710,7 +112387,7 @@ index 0f77e96..9dce13e 100644
set_fs(old_fs);
return res;
-@@ -650,7 +650,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
+@@ -648,7 +648,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
goto err;
this_len = min_t(size_t, len, PAGE_CACHE_SIZE - offset);
@@ -88719,7 +112396,7 @@ index 0f77e96..9dce13e 100644
vec[i].iov_len = this_len;
spd.pages[i] = page;
spd.nr_pages++;
-@@ -789,7 +789,7 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des
+@@ -787,7 +787,7 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des
ops->release(pipe, buf);
pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1);
pipe->nrbufs--;
@@ -88728,7 +112405,7 @@ index 0f77e96..9dce13e 100644
sd->need_wakeup = true;
}
-@@ -820,10 +820,10 @@ static int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_des
+@@ -818,10 +818,10 @@ static int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_des
return -ERESTARTSYS;
while (!pipe->nrbufs) {
@@ -88741,7 +112418,7 @@ index 0f77e96..9dce13e 100644
return 0;
if (sd->flags & SPLICE_F_NONBLOCK)
-@@ -1039,7 +1039,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
+@@ -1037,7 +1037,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
ops->release(pipe, buf);
pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1);
pipe->nrbufs--;
@@ -88750,7 +112427,7 @@ index 0f77e96..9dce13e 100644
sd.need_wakeup = true;
} else {
buf->offset += ret;
-@@ -1199,7 +1199,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
+@@ -1197,7 +1197,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
* out of the pipe right after the splice_to_pipe(). So set
* PIPE_READERS appropriately.
*/
@@ -88759,7 +112436,7 @@ index 0f77e96..9dce13e 100644
current->splice_pipe = pipe;
}
-@@ -1506,6 +1506,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
+@@ -1504,6 +1504,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
partial[buffers].offset = off;
partial[buffers].len = plen;
@@ -88767,7 +112444,7 @@ index 0f77e96..9dce13e 100644
off = 0;
len -= plen;
-@@ -1737,9 +1738,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1735,9 +1736,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
ret = -ERESTARTSYS;
break;
}
@@ -88779,7 +112456,7 @@ index 0f77e96..9dce13e 100644
if (flags & SPLICE_F_NONBLOCK) {
ret = -EAGAIN;
break;
-@@ -1771,7 +1772,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1769,7 +1770,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
pipe_lock(pipe);
while (pipe->nrbufs >= pipe->buffers) {
@@ -88788,7 +112465,7 @@ index 0f77e96..9dce13e 100644
send_sig(SIGPIPE, current, 0);
ret = -EPIPE;
break;
-@@ -1784,9 +1785,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1782,9 +1783,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
ret = -ERESTARTSYS;
break;
}
@@ -88800,7 +112477,7 @@ index 0f77e96..9dce13e 100644
}
pipe_unlock(pipe);
-@@ -1822,14 +1823,14 @@ retry:
+@@ -1820,14 +1821,14 @@ retry:
pipe_double_lock(ipipe, opipe);
do {
@@ -88817,7 +112494,7 @@ index 0f77e96..9dce13e 100644
break;
/*
-@@ -1926,7 +1927,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
+@@ -1924,7 +1925,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
pipe_double_lock(ipipe, opipe);
do {
@@ -88826,7 +112503,7 @@ index 0f77e96..9dce13e 100644
send_sig(SIGPIPE, current, 0);
if (!ret)
ret = -EPIPE;
-@@ -1971,7 +1972,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
+@@ -1969,7 +1970,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
* return EAGAIN if we have the potential of some data in the
* future, otherwise just return 0
*/
@@ -88836,7 +112513,7 @@ index 0f77e96..9dce13e 100644
pipe_unlock(ipipe);
diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c
-index 6a4cc34..acc9eef 100644
+index 1e9de96..a77cc8c 100644
--- a/fs/squashfs/xattr.c
+++ b/fs/squashfs/xattr.c
@@ -46,8 +46,8 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
@@ -88850,21 +112527,16 @@ index 6a4cc34..acc9eef 100644
/* check that the file system has xattrs */
if (msblk->xattr_id_table == NULL)
-@@ -68,11 +68,11 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
- name_size = le16_to_cpu(entry.size);
- handler = squashfs_xattr_handler(le16_to_cpu(entry.type));
- if (handler)
-- prefix_size = handler->list(handler, d, buffer, rest,
-+ prefix_size = handler->list(handler, d, buffer, buffer ? buffer_size - used : 0,
- NULL, name_size);
- if (prefix_size) {
+@@ -72,7 +72,7 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
+ size_t prefix_size = strlen(prefix);
+
if (buffer) {
- if (prefix_size + name_size + 1 > rest) {
+ if (prefix_size + name_size + 1 > buffer_size - used) {
err = -ERANGE;
goto failed;
}
-@@ -86,7 +86,7 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
+@@ -87,7 +87,7 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
buffer[name_size] = '\0';
buffer += name_size + 1;
}
@@ -88873,7 +112545,7 @@ index 6a4cc34..acc9eef 100644
} else {
/* no handler or insuffficient privileges, so skip */
err = squashfs_read_metadata(sb, NULL, &start,
-@@ -107,7 +107,7 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
+@@ -108,7 +108,7 @@ ssize_t squashfs_listxattr(struct dentry *d, char *buffer,
if (err < 0)
goto failed;
}
@@ -88883,7 +112555,7 @@ index 6a4cc34..acc9eef 100644
failed:
return err;
diff --git a/fs/stat.c b/fs/stat.c
-index d4a61d8..87dbeb3 100644
+index bc045c7..68725c1 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -28,8 +28,13 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
@@ -88922,7 +112594,7 @@ index d4a61d8..87dbeb3 100644
generic_fillattr(inode, stat);
return 0;
diff --git a/fs/super.c b/fs/super.c
-index f5f4b32..f6bedd2 100644
+index 74914b1..c570339 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -348,7 +348,8 @@ EXPORT_SYMBOL(deactivate_super);
@@ -89009,7 +112681,7 @@ index 6c21228..9afd5fe 100644
if (sbi->s_bytesex == BYTESEX_PDP)
return PDP_swab((__force __u32)n);
diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
-index c66f242..2e8701a 100644
+index 4a0e48f..ca5b016 100644
--- a/fs/tracefs/inode.c
+++ b/fs/tracefs/inode.c
@@ -53,7 +53,7 @@ static const struct file_operations tracefs_file_operations = {
@@ -89034,6 +112706,150 @@ index c66f242..2e8701a 100644
return dentry;
}
+diff --git a/fs/ubifs/find.c b/fs/ubifs/find.c
+index 2dcf3d4..fa1e496 100644
+--- a/fs/ubifs/find.c
++++ b/fs/ubifs/find.c
+@@ -94,8 +94,9 @@ static int valuable(struct ubifs_info *c, const struct ubifs_lprops *lprops)
+ */
+ static int scan_for_dirty_cb(struct ubifs_info *c,
+ const struct ubifs_lprops *lprops, int in_tree,
+- struct scan_data *data)
++ void *_data)
+ {
++ struct scan_data *data = _data;
+ int ret = LPT_SCAN_CONTINUE;
+
+ /* Exclude LEBs that are currently in use */
+@@ -179,7 +180,7 @@ static const struct ubifs_lprops *scan_for_dirty(struct ubifs_info *c,
+ data.lnum = -1;
+ data.exclude_index = exclude_index;
+ err = ubifs_lpt_scan_nolock(c, -1, c->lscan_lnum,
+- (ubifs_lpt_scan_callback)scan_for_dirty_cb,
++ scan_for_dirty_cb,
+ &data);
+ if (err)
+ return ERR_PTR(err);
+@@ -361,8 +362,9 @@ out:
+ */
+ static int scan_for_free_cb(struct ubifs_info *c,
+ const struct ubifs_lprops *lprops, int in_tree,
+- struct scan_data *data)
++ void *_data)
+ {
++ struct scan_data *data = _data;
+ int ret = LPT_SCAN_CONTINUE;
+
+ /* Exclude LEBs that are currently in use */
+@@ -458,7 +460,7 @@ const struct ubifs_lprops *do_find_free_space(struct ubifs_info *c,
+ data.pick_free = pick_free;
+ data.lnum = -1;
+ err = ubifs_lpt_scan_nolock(c, -1, c->lscan_lnum,
+- (ubifs_lpt_scan_callback)scan_for_free_cb,
++ scan_for_free_cb,
+ &data);
+ if (err)
+ return ERR_PTR(err);
+@@ -601,8 +603,9 @@ out:
+ */
+ static int scan_for_idx_cb(struct ubifs_info *c,
+ const struct ubifs_lprops *lprops, int in_tree,
+- struct scan_data *data)
++ void *_data)
+ {
++ struct scan_data *data = _data;
+ int ret = LPT_SCAN_CONTINUE;
+
+ /* Exclude LEBs that are currently in use */
+@@ -638,7 +641,7 @@ static const struct ubifs_lprops *scan_for_leb_for_idx(struct ubifs_info *c)
+
+ data.lnum = -1;
+ err = ubifs_lpt_scan_nolock(c, -1, c->lscan_lnum,
+- (ubifs_lpt_scan_callback)scan_for_idx_cb,
++ scan_for_idx_cb,
+ &data);
+ if (err)
+ return ERR_PTR(err);
+@@ -738,18 +741,21 @@ out:
+ return err;
+ }
+
+-static int cmp_dirty_idx(const struct ubifs_lprops **a,
+- const struct ubifs_lprops **b)
++static int cmp_dirty_idx(const void *_a,
++ const void *_b)
+ {
++ const struct ubifs_lprops **a = (const struct ubifs_lprops **)_a;
++ const struct ubifs_lprops **b = (const struct ubifs_lprops **)_b;
+ const struct ubifs_lprops *lpa = *a;
+ const struct ubifs_lprops *lpb = *b;
+
+ return lpa->dirty + lpa->free - lpb->dirty - lpb->free;
+ }
+
+-static void swap_dirty_idx(struct ubifs_lprops **a, struct ubifs_lprops **b,
+- int size)
++static void swap_dirty_idx(void *_a, void *_b, int size)
+ {
++ struct ubifs_lprops **a = (struct ubifs_lprops **)_a;
++ struct ubifs_lprops **b = (struct ubifs_lprops **)_b;
+ struct ubifs_lprops *t = *a;
+
+ *a = *b;
+@@ -775,8 +781,7 @@ int ubifs_save_dirty_idx_lnums(struct ubifs_info *c)
+ sizeof(void *) * c->dirty_idx.cnt);
+ /* Sort it so that the dirtiest is now at the end */
+ sort(c->dirty_idx.arr, c->dirty_idx.cnt, sizeof(void *),
+- (int (*)(const void *, const void *))cmp_dirty_idx,
+- (void (*)(void *, void *, int))swap_dirty_idx);
++ cmp_dirty_idx, swap_dirty_idx);
+ dbg_find("found %d dirty index LEBs", c->dirty_idx.cnt);
+ if (c->dirty_idx.cnt)
+ dbg_find("dirtiest index LEB is %d with dirty %d and free %d",
+@@ -804,8 +809,9 @@ int ubifs_save_dirty_idx_lnums(struct ubifs_info *c)
+ */
+ static int scan_dirty_idx_cb(struct ubifs_info *c,
+ const struct ubifs_lprops *lprops, int in_tree,
+- struct scan_data *data)
++ void *_data)
+ {
++ struct scan_data *data = _data;
+ int ret = LPT_SCAN_CONTINUE;
+
+ /* Exclude LEBs that are currently in use */
+@@ -865,7 +871,7 @@ static int find_dirty_idx_leb(struct ubifs_info *c)
+ /* All pnodes are in memory, so skip scan */
+ return -ENOSPC;
+ err = ubifs_lpt_scan_nolock(c, -1, c->lscan_lnum,
+- (ubifs_lpt_scan_callback)scan_dirty_idx_cb,
++ scan_dirty_idx_cb,
+ &data);
+ if (err)
+ return err;
+diff --git a/fs/ubifs/lprops.c b/fs/ubifs/lprops.c
+index a0011aa..c8cf709 100644
+--- a/fs/ubifs/lprops.c
++++ b/fs/ubifs/lprops.c
+@@ -1028,8 +1028,9 @@ out:
+ */
+ static int scan_check_cb(struct ubifs_info *c,
+ const struct ubifs_lprops *lp, int in_tree,
+- struct ubifs_lp_stats *lst)
++ void *_lst)
+ {
++ struct ubifs_lp_stats *lst = _lst;
+ struct ubifs_scan_leb *sleb;
+ struct ubifs_scan_node *snod;
+ int cat, lnum = lp->lnum, is_idx = 0, used = 0, free, dirty, ret;
+@@ -1283,7 +1284,7 @@ int dbg_check_lprops(struct ubifs_info *c)
+
+ memset(&lst, 0, sizeof(struct ubifs_lp_stats));
+ err = ubifs_lpt_scan_nolock(c, c->main_first, c->leb_cnt - 1,
+- (ubifs_lpt_scan_callback)scan_check_cb,
++ scan_check_cb,
+ &lst);
+ if (err && err != -ENOSPC)
+ goto out;
diff --git a/fs/udf/misc.c b/fs/udf/misc.c
index 71d1c25..084e2ad 100644
--- a/fs/udf/misc.c
@@ -89083,7 +112899,7 @@ index 66cdb44..2eb05e1 100644
/*
* Flush page faults out of all CPUs. NOTE: all page faults
diff --git a/fs/utimes.c b/fs/utimes.c
-index aa138d6..5f3a811 100644
+index 85c40f4..52fcd23 100644
--- a/fs/utimes.c
+++ b/fs/utimes.c
@@ -1,6 +1,7 @@
@@ -89104,15 +112920,15 @@ index aa138d6..5f3a811 100644
+ goto mnt_drop_write_and_out;
+ }
+
- mutex_lock(&inode->i_mutex);
+ inode_lock(inode);
error = notify_change(path->dentry, &newattrs, &delegated_inode);
- mutex_unlock(&inode->i_mutex);
+ inode_unlock(inode);
diff --git a/fs/xattr.c b/fs/xattr.c
-index 9b932b9..31cdeb7 100644
+index 4861322..205ea1d 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
-@@ -227,6 +227,27 @@ int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name,
- return rc;
+@@ -208,6 +208,27 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
+ return error;
}
+#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
@@ -89139,7 +112955,7 @@ index 9b932b9..31cdeb7 100644
ssize_t
vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
{
-@@ -319,7 +340,7 @@ EXPORT_SYMBOL_GPL(vfs_removexattr);
+@@ -300,7 +321,7 @@ EXPORT_SYMBOL_GPL(vfs_removexattr);
* Extended attribute SET operations
*/
static long
@@ -89148,7 +112964,7 @@ index 9b932b9..31cdeb7 100644
size_t size, int flags)
{
int error;
-@@ -355,7 +376,12 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
+@@ -334,7 +355,12 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
posix_acl_fix_xattr_from_user(kvalue, size);
}
@@ -89160,9 +112976,9 @@ index 9b932b9..31cdeb7 100644
+
+ error = vfs_setxattr(path->dentry, kname, kvalue, size, flags);
out:
- if (vvalue)
- vfree(vvalue);
-@@ -376,7 +402,7 @@ retry:
+ kvfree(kvalue);
+
+@@ -353,7 +379,7 @@ retry:
return error;
error = mnt_want_write(path.mnt);
if (!error) {
@@ -89171,7 +112987,7 @@ index 9b932b9..31cdeb7 100644
mnt_drop_write(path.mnt);
}
path_put(&path);
-@@ -412,7 +438,7 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
+@@ -389,7 +415,7 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
audit_file(f.file);
error = mnt_want_write_file(f.file);
if (!error) {
@@ -89180,7 +112996,7 @@ index 9b932b9..31cdeb7 100644
mnt_drop_write_file(f.file);
}
fdput(f);
-@@ -598,7 +624,7 @@ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
+@@ -569,7 +595,7 @@ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
* Extended attribute REMOVE operations
*/
static long
@@ -89189,7 +113005,7 @@ index 9b932b9..31cdeb7 100644
{
int error;
char kname[XATTR_NAME_MAX + 1];
-@@ -609,7 +635,10 @@ removexattr(struct dentry *d, const char __user *name)
+@@ -580,7 +606,10 @@ removexattr(struct dentry *d, const char __user *name)
if (error < 0)
return error;
@@ -89201,7 +113017,7 @@ index 9b932b9..31cdeb7 100644
}
static int path_removexattr(const char __user *pathname,
-@@ -623,7 +652,7 @@ retry:
+@@ -594,7 +623,7 @@ retry:
return error;
error = mnt_want_write(path.mnt);
if (!error) {
@@ -89210,7 +113026,7 @@ index 9b932b9..31cdeb7 100644
mnt_drop_write(path.mnt);
}
path_put(&path);
-@@ -649,14 +678,16 @@ SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname,
+@@ -620,14 +649,16 @@ SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname,
SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
{
struct fd f = fdget(fd);
@@ -89229,10 +113045,10 @@ index 9b932b9..31cdeb7 100644
}
fdput(f);
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
-index 119c242..a02e8da 100644
+index ef00156..931d812 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
-@@ -554,7 +554,7 @@ xfs_bmap_validate_ret(
+@@ -560,7 +560,7 @@ xfs_bmap_validate_ret(
#else
#define xfs_bmap_check_leaf_extents(cur, ip, whichfork) do { } while (0)
@@ -89242,10 +113058,10 @@ index 119c242..a02e8da 100644
/*
diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c
-index e89a0f8f..3165b4a 100644
+index 097bf77..ffe3cb3 100644
--- a/fs/xfs/libxfs/xfs_da_btree.c
+++ b/fs/xfs/libxfs/xfs_da_btree.c
-@@ -2011,6 +2011,7 @@ xfs_da_grow_inode_int(
+@@ -2012,6 +2012,7 @@ xfs_da_grow_inode_int(
struct xfs_inode *dp = args->dp;
int w = args->whichfork;
xfs_rfsblock_t nblks = dp->i_d.di_nblocks;
@@ -89253,7 +113069,7 @@ index e89a0f8f..3165b4a 100644
struct xfs_bmbt_irec map, *mapp;
int nmap, error, got, i, mapi;
-@@ -2079,7 +2080,8 @@ xfs_da_grow_inode_int(
+@@ -2080,7 +2081,8 @@ xfs_da_grow_inode_int(
}
/* account for newly allocated blocks in reserved blocks total */
@@ -89282,7 +113098,7 @@ index 642d55d..d8ccf82 100644
return 0;
sfep = dp->d_ops->sf_nextentry(sfp, sfep);
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
-index d42738d..7175979 100644
+index 478d04e..3d6a86b 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -121,7 +121,7 @@ xfs_find_handle(
@@ -94930,10 +118746,10 @@ index 0000000..25f54ef
+};
diff --git a/grsecurity/gracl_policy.c b/grsecurity/gracl_policy.c
new file mode 100644
-index 0000000..0773423
+index 0000000..302bda8
--- /dev/null
+++ b/grsecurity/gracl_policy.c
-@@ -0,0 +1,1786 @@
+@@ -0,0 +1,1784 @@
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
@@ -95001,11 +118817,10 @@ index 0000000..0773423
+
+extern int gr_init_uidset(void);
+extern void gr_free_uidset(void);
-+extern void gr_remove_uid(uid_t uid);
-+extern int gr_find_uid(uid_t uid);
++extern int gr_find_and_remove_uid(uid_t uid);
+
+extern struct acl_subject_label *__gr_get_subject_for_task(const struct gr_policy_state *state, struct task_struct *task, const char *filename, int fallback);
-+extern void __gr_apply_subject_to_task(struct gr_policy_state *state, struct task_struct *task, struct acl_subject_label *subj);
++extern void __gr_apply_subject_to_task(const struct gr_policy_state *state, struct task_struct *task, struct acl_subject_label *subj);
+extern int gr_streq(const char *a, const char *b, const unsigned int lena, const unsigned int lenb);
+extern void __insert_inodev_entry(const struct gr_policy_state *state, struct inodev_entry *entry);
+extern struct acl_role_label *__lookup_acl_role_label(const struct gr_policy_state *state, const struct task_struct *task, const uid_t uid, const gid_t gid);
@@ -96572,9 +120387,8 @@ index 0000000..0773423
+ segvacl->crashes = 0;
+ segvacl->expires = 0;
+ }
-+ } else if (gr_find_uid(gr_usermode->segv_uid) >= 0) {
-+ gr_remove_uid(gr_usermode->segv_uid);
-+ }
++ } else
++ gr_find_and_remove_uid(gr_usermode->segv_uid);
+ } else {
+ gr_log_noargs(GR_DONT_AUDIT, GR_SEGVMODF_ACL_MSG);
+ error = -EPERM;
@@ -96796,10 +120610,10 @@ index 0000000..39645c9
+}
diff --git a/grsecurity/gracl_segv.c b/grsecurity/gracl_segv.c
new file mode 100644
-index 0000000..9c6684d
+index 0000000..10f1617
--- /dev/null
+++ b/grsecurity/gracl_segv.c
-@@ -0,0 +1,291 @@
+@@ -0,0 +1,304 @@
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <asm/uaccess.h>
@@ -96831,7 +120645,7 @@ index 0000000..9c6684d
+extern rwlock_t gr_inode_lock;
+extern struct acl_subject_label *
+ lookup_acl_subj_label(const u64 inode, const dev_t dev,
-+ struct acl_role_label *role);
++ const struct acl_role_label *role);
+
+int
+gr_init_uidset(void)
@@ -96938,6 +120752,19 @@ index 0000000..9c6684d
+ return;
+}
+
++int gr_find_and_remove_uid(uid_t uid)
++{
++ int loc;
++
++ spin_lock(&gr_uid_lock);
++ loc = gr_find_uid(uid);
++ if (loc >= 0)
++ gr_remove_uid(loc);
++ spin_unlock(&gr_uid_lock);
++
++ return loc >= 0 ? 1 : 0;
++}
++
+int
+gr_check_crash_uid(const kuid_t kuid)
+{
@@ -97676,7 +121503,7 @@ index 0000000..1964ab1c
+}
diff --git a/grsecurity/grsec_disabled.c b/grsecurity/grsec_disabled.c
new file mode 100644
-index 0000000..e723c08
+index 0000000..0589fe2
--- /dev/null
+++ b/grsecurity/grsec_disabled.c
@@ -0,0 +1,445 @@
@@ -98078,13 +121905,13 @@ index 0000000..e723c08
+}
+
+int
-+gr_search_udp_recvmsg(const struct sock *sk, const struct sk_buff *skb)
++gr_search_udp_recvmsg(struct sock *sk, const struct sk_buff *skb)
+{
+ return 0;
+}
+
+int
-+gr_search_udp_sendmsg(const struct sock *sk, const struct sockaddr_in *addr)
++gr_search_udp_sendmsg(struct sock *sk, struct sockaddr_in *addr)
+{
+ return 0;
+}
@@ -99645,7 +123472,7 @@ index 0000000..a2b8b8f
+}
diff --git a/grsecurity/grsec_sock.c b/grsecurity/grsec_sock.c
new file mode 100644
-index 0000000..a523bd2
+index 0000000..3cdd946
--- /dev/null
+++ b/grsecurity/grsec_sock.c
@@ -0,0 +1,244 @@
@@ -99662,8 +123489,8 @@ index 0000000..a523bd2
+#include <linux/grinternal.h>
+#include <linux/gracl.h>
+
-+extern int gr_search_udp_recvmsg(const struct sock *sk, const struct sk_buff *skb);
-+extern int gr_search_udp_sendmsg(const struct sock *sk, const struct sockaddr_in *addr);
++extern int gr_search_udp_recvmsg(struct sock *sk, const struct sk_buff *skb);
++extern int gr_search_udp_sendmsg(struct sock *sk, struct sockaddr_in *addr);
+
+EXPORT_SYMBOL_GPL(gr_search_udp_recvmsg);
+EXPORT_SYMBOL_GPL(gr_search_udp_sendmsg);
@@ -101150,10 +124977,10 @@ 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 14b0ff32..f3993a4 100644
+index c370b26..24a0dae 100644
--- a/include/asm-generic/pgtable.h
+++ b/include/asm-generic/pgtable.h
-@@ -748,6 +748,22 @@ static inline int pmd_protnone(pmd_t pmd)
+@@ -757,6 +757,22 @@ static inline int pmd_protnone(pmd_t pmd)
}
#endif /* CONFIG_NUMA_BALANCING */
@@ -101177,10 +125004,10 @@ index 14b0ff32..f3993a4 100644
#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h
-index b58fd66..6cfae67 100644
+index af0254c..a4e4da3 100644
--- a/include/asm-generic/sections.h
+++ b/include/asm-generic/sections.h
-@@ -30,6 +30,7 @@ extern char _data[], _sdata[], _edata[];
+@@ -31,6 +31,7 @@ extern char _data[], _sdata[], _edata[];
extern char __bss_start[], __bss_stop[];
extern char __init_begin[], __init_end[];
extern char _sinittext[], _einittext[];
@@ -101293,8 +125120,49 @@ index c9fe145..9fb2337 100644
struct crypto_instance {
struct crypto_alg alg;
+diff --git a/include/crypto/cast6.h b/include/crypto/cast6.h
+index 32b60eb..1a592df 100644
+--- a/include/crypto/cast6.h
++++ b/include/crypto/cast6.h
+@@ -18,7 +18,7 @@ int __cast6_setkey(struct cast6_ctx *ctx, const u8 *key,
+ unsigned int keylen, u32 *flags);
+ int cast6_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen);
+
+-void __cast6_encrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src);
+-void __cast6_decrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src);
++void __cast6_encrypt(void *ctx, u8 *dst, const u8 *src);
++void __cast6_decrypt(void *ctx, u8 *dst, const u8 *src);
+
+ #endif
+diff --git a/include/crypto/serpent.h b/include/crypto/serpent.h
+index b7e0941..1a1f67f 100644
+--- a/include/crypto/serpent.h
++++ b/include/crypto/serpent.h
+@@ -21,7 +21,7 @@ int __serpent_setkey(struct serpent_ctx *ctx, const u8 *key,
+ unsigned int keylen);
+ int serpent_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen);
+
+-void __serpent_encrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src);
+-void __serpent_decrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src);
++void __serpent_encrypt(void *ctx, u8 *dst, const u8 *src);
++void __serpent_decrypt(void *ctx, u8 *dst, const u8 *src);
+
+ #endif
+diff --git a/include/crypto/xts.h b/include/crypto/xts.h
+index 72c09eb..c5c3a06 100644
+--- a/include/crypto/xts.h
++++ b/include/crypto/xts.h
+@@ -18,7 +18,7 @@ struct xts_crypt_req {
+ void (*crypt_fn)(void *ctx, u8 *blks, unsigned int nbytes);
+ };
+
+-#define XTS_TWEAK_CAST(x) ((void (*)(void *, u8*, const u8*))(x))
++#define XTS_TWEAK_CAST(x) (x)
+
+ 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 0a271ca..0e14d3d 100644
+index d7162cf..709bbda 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -59,6 +59,7 @@
@@ -101332,7 +125200,7 @@ index 0a271ca..0e14d3d 100644
/**
* Creates a driver or general drm_ioctl_desc array entry for the given
-@@ -645,7 +648,8 @@ struct drm_driver {
+@@ -654,7 +657,8 @@ struct drm_driver {
/* List of devices hanging off this driver with stealth attach. */
struct list_head legacy_dev_list;
@@ -101342,7 +125210,7 @@ index 0a271ca..0e14d3d 100644
enum drm_minor_type {
DRM_MINOR_LEGACY,
-@@ -663,7 +667,8 @@ struct drm_info_list {
+@@ -672,7 +676,8 @@ struct drm_info_list {
int (*show)(struct seq_file*, void*); /** show callback */
u32 driver_features; /**< Required driver features for this entry */
void *data;
@@ -101352,7 +125220,7 @@ index 0a271ca..0e14d3d 100644
/**
* debugfs node structure. This structure represents a debugfs file.
-@@ -752,7 +757,7 @@ struct drm_device {
+@@ -761,7 +766,7 @@ struct drm_device {
/** \name Usage Counters */
/*@{ */
@@ -101361,24 +125229,11 @@ index 0a271ca..0e14d3d 100644
spinlock_t buf_lock; /**< For drm_device::buf_use and a few other things. */
int buf_use; /**< Buffers in use -- cannot alloc */
atomic_t buf_alloc; /**< Buffer allocation in progress */
-diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
-index 3febb4b..afc5199 100644
---- a/include/drm/drm_crtc_helper.h
-+++ b/include/drm/drm_crtc_helper.h
-@@ -163,7 +163,7 @@ struct drm_encoder_helper_funcs {
- int (*atomic_check)(struct drm_encoder *encoder,
- struct drm_crtc_state *crtc_state,
- struct drm_connector_state *conn_state);
--};
-+} __no_const;
-
- /**
- * struct drm_connector_helper_funcs - helper operations for connectors
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
-index 0de6290..2a2c125 100644
+index fc65118..7d80068 100644
--- a/include/drm/drm_mm.h
+++ b/include/drm/drm_mm.h
-@@ -297,7 +297,7 @@ void drm_mm_remove_node(struct drm_mm_node *node);
+@@ -291,7 +291,7 @@ void drm_mm_remove_node(struct drm_mm_node *node);
void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new);
void drm_mm_init(struct drm_mm *mm,
u64 start,
@@ -101387,8 +125242,21 @@ index 0de6290..2a2c125 100644
void drm_mm_takedown(struct drm_mm *mm);
bool drm_mm_clean(struct drm_mm *mm);
+diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
+index a126a0d..8ad2332 100644
+--- 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 {
+ int (*atomic_check)(struct drm_encoder *encoder,
+ struct drm_crtc_state *crtc_state,
+ struct drm_connector_state *conn_state);
+-};
++} __no_const;
+
+ /**
+ * drm_encoder_helper_add - sets the helper vtable for an encoder
diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
-index 17c4456..da0c5eb 100644
+index f970209..77a4901 100644
--- a/include/drm/i915_pciids.h
+++ b/include/drm/i915_pciids.h
@@ -37,7 +37,7 @@
@@ -101453,6 +125321,45 @@ index 4915d40..8b913c0 100644
/**
* asymmetric_key_subtype - Get the subtype from an asymmetric key
+diff --git a/include/keys/encrypted-type.h b/include/keys/encrypted-type.h
+index 1d45413..377bc27 100644
+--- a/include/keys/encrypted-type.h
++++ b/include/keys/encrypted-type.h
+@@ -15,7 +15,7 @@
+ #ifndef _KEYS_ENCRYPTED_TYPE_H
+ #define _KEYS_ENCRYPTED_TYPE_H
+
+-#include <linux/key.h>
++#include <linux/key-type.h>
+ #include <linux/rcupdate.h>
+
+ struct encrypted_key_payload {
+diff --git a/include/keys/rxrpc-type.h b/include/keys/rxrpc-type.h
+index fc48754..ea15d5c 100644
+--- a/include/keys/rxrpc-type.h
++++ b/include/keys/rxrpc-type.h
+@@ -12,7 +12,7 @@
+ #ifndef _KEYS_RXRPC_TYPE_H
+ #define _KEYS_RXRPC_TYPE_H
+
+-#include <linux/key.h>
++#include <linux/key-type.h>
+
+ /*
+ * key type for AF_RXRPC keys
+diff --git a/include/keys/user-type.h b/include/keys/user-type.h
+index c56fef4..c9ebdc7 100644
+--- a/include/keys/user-type.h
++++ b/include/keys/user-type.h
+@@ -12,7 +12,7 @@
+ #ifndef _KEYS_USER_TYPE_H
+ #define _KEYS_USER_TYPE_H
+
+-#include <linux/key.h>
++#include <linux/key-type.h>
+ #include <linux/rcupdate.h>
+
+ #ifdef CONFIG_KEYS
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h
index c1da539..1dcec55 100644
--- a/include/linux/atmdev.h
@@ -101513,10 +125420,10 @@ index 301de78..f5f8e42 100644
return __atomic_add_unless(v, a, u) != u;
}
diff --git a/include/linux/audit.h b/include/linux/audit.h
-index 20eba1e..40b479d 100644
+index b40ed5d..16411f5 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
-@@ -227,7 +227,7 @@ static inline void audit_ptrace(struct task_struct *t)
+@@ -331,7 +331,7 @@ static inline void audit_ptrace(struct task_struct *t)
extern unsigned int audit_serial(void);
extern int auditsc_get_stamp(struct audit_context *ctx,
struct timespec *t, unsigned int *serial);
@@ -101712,10 +125619,10 @@ index c02e669..439bd4b 100644
}
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
-index 1687557..3a013dd 100644
+index 413c84f..f526678 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
-@@ -1647,7 +1647,7 @@ struct block_device_operations {
+@@ -1666,7 +1666,7 @@ struct block_device_operations {
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
struct module *owner;
const struct pr_ops *pr_ops;
@@ -101757,10 +125664,10 @@ index 17e7e82..1d7da26 100644
#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
#endif
diff --git a/include/linux/capability.h b/include/linux/capability.h
-index af9f0b9..71a5e5c 100644
+index f314275..96c8185 100644
--- a/include/linux/capability.h
+++ b/include/linux/capability.h
-@@ -237,15 +237,28 @@ static inline bool capable(int cap)
+@@ -231,15 +231,28 @@ static inline bool capable(int cap)
{
return true;
}
@@ -101802,10 +125709,10 @@ index 8609d57..86e4d79 100644
int (*generic_packet) (struct cdrom_device_info *,
struct packet_command *);
diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
-index a7c7f74..0f1870f 100644
+index 89d944b..1d98ada 100644
--- a/include/linux/cgroup-defs.h
+++ b/include/linux/cgroup-defs.h
-@@ -416,7 +416,7 @@ struct cftype {
+@@ -424,7 +424,7 @@ struct cftype {
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lock_class_key lockdep_key;
#endif
@@ -101815,7 +125722,7 @@ index a7c7f74..0f1870f 100644
/*
* Control Group subsystem type.
diff --git a/include/linux/cleancache.h b/include/linux/cleancache.h
-index bda5ec0b4..51d8ea1 100644
+index fccf7f4..1d5925e 100644
--- a/include/linux/cleancache.h
+++ b/include/linux/cleancache.h
@@ -35,7 +35,7 @@ struct cleancache_ops {
@@ -101825,13 +125732,13 @@ index bda5ec0b4..51d8ea1 100644
-};
+} __no_const;
- extern int cleancache_register_ops(struct cleancache_ops *ops);
+ 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 c56988a..ea6c518 100644
+index 1143e38..3a0056a 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
-@@ -214,6 +214,7 @@ struct clk_ops {
+@@ -215,6 +215,7 @@ struct clk_ops {
void (*init)(struct clk_hw *hw);
int (*debug_init)(struct clk_hw *hw, struct dentry *dentry);
};
@@ -101840,10 +125747,30 @@ index c56988a..ea6c518 100644
/**
* struct clk_init_data - holds init data that's common to all clocks and is
diff --git a/include/linux/compat.h b/include/linux/compat.h
-index a76c917..63b52db 100644
+index a76c917..75d6aeb 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
-@@ -316,7 +316,7 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
+@@ -45,14 +45,15 @@
+ COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
+
+ #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \
+- asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))\
+- __attribute__((alias(__stringify(compat_SyS##name)))); \
+ static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
+- asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__));\
+- asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))\
++ static inline asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))\
+ { \
+ return C_SYSC##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__)); \
+ } \
++ asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))\
++ { \
++ return compat_SyS##name(__MAP(x,__SC_ARGS,__VA_ARGS__));\
++ } \
+ static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
+
+ #ifndef compat_user_stack_pointer
+@@ -316,7 +317,7 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
compat_size_t __user *len_ptr);
asmlinkage long compat_sys_ipc(u32, int, int, u32, compat_uptr_t, u32);
@@ -101852,7 +125779,7 @@ index a76c917..63b52db 100644
asmlinkage long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
asmlinkage long compat_sys_msgsnd(int msqid, compat_uptr_t msgp,
compat_ssize_t msgsz, int msgflg);
-@@ -325,7 +325,7 @@ asmlinkage long compat_sys_msgrcv(int msqid, compat_uptr_t msgp,
+@@ -325,7 +326,7 @@ asmlinkage long compat_sys_msgrcv(int msqid, compat_uptr_t msgp,
long compat_sys_msgctl(int first, int second, void __user *uptr);
long compat_sys_shmctl(int first, int second, void __user *uptr);
long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
@@ -101861,7 +125788,7 @@ index a76c917..63b52db 100644
asmlinkage long compat_sys_keyctl(u32 option,
u32 arg2, u32 arg3, u32 arg4, u32 arg5);
asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32);
-@@ -439,7 +439,7 @@ extern int compat_ptrace_request(struct task_struct *child,
+@@ -439,7 +440,7 @@ extern int compat_ptrace_request(struct task_struct *child,
extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
compat_ulong_t addr, compat_ulong_t data);
asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
@@ -101871,20 +125798,22 @@ index a76c917..63b52db 100644
asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t);
/*
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
-index eeae401..4bf36c1 100644
+index eeae401..a2a9f48 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
-@@ -116,8 +116,8 @@
+@@ -116,9 +116,9 @@
*/
#define __pure __attribute__((pure))
#define __aligned(x) __attribute__((aligned(x)))
-#define __printf(a, b) __attribute__((format(printf, a, b)))
-#define __scanf(a, b) __attribute__((format(scanf, a, b)))
+-#define __attribute_const__ __attribute__((__const__))
+#define __printf(a, b) __attribute__((format(printf, a, b))) __nocapture(a, b)
+#define __scanf(a, b) __attribute__((format(scanf, a, b))) __nocapture(a, b)
- #define __attribute_const__ __attribute__((__const__))
++#define __attribute_const__ __attribute__((const))
#define __maybe_unused __attribute__((unused))
#define __always_unused __attribute__((unused))
+
@@ -184,9 +184,38 @@
# define __compiletime_warning(message) __attribute__((warning(message)))
# define __compiletime_error(message) __attribute__((error(message)))
@@ -101925,7 +125854,7 @@ index eeae401..4bf36c1 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 6fc9a6d..8ad4c2b 100644
+index 48f5aab..2d1c52f 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -5,11 +5,14 @@
@@ -102146,8 +126075,8 @@ index 6fc9a6d..8ad4c2b 100644
+ __val; \
})
- #endif /* __KERNEL__ */
-@@ -399,6 +415,38 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+ /**
+@@ -416,6 +432,38 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
# define __attribute_const__ /* unimplemented */
#endif
@@ -102186,7 +126115,7 @@ index 6fc9a6d..8ad4c2b 100644
/*
* Tell gcc if a function is cold. The compiler will assume any path
* directly leading to the call is unlikely.
-@@ -408,6 +456,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -425,6 +473,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
#define __cold
#endif
@@ -102209,7 +126138,7 @@ index 6fc9a6d..8ad4c2b 100644
/* Simple shorthand for a section definition */
#ifndef __section
# define __section(S) __attribute__ ((__section__(#S)))
-@@ -430,6 +494,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -447,6 +511,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
@@ -102218,7 +126147,7 @@ index 6fc9a6d..8ad4c2b 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))
-@@ -509,8 +575,9 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
+@@ -526,8 +592,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; \
@@ -102230,10 +126159,10 @@ index 6fc9a6d..8ad4c2b 100644
/**
* lockless_dereference() - safely load a pointer for later dereference
diff --git a/include/linux/configfs.h b/include/linux/configfs.h
-index 758a029..77c9e59 100644
+index f8165c1..4a757b2 100644
--- a/include/linux/configfs.h
+++ b/include/linux/configfs.h
-@@ -127,7 +127,7 @@ struct configfs_attribute {
+@@ -129,7 +129,7 @@ struct configfs_attribute {
umode_t ca_mode;
ssize_t (*show)(struct config_item *, char *);
ssize_t (*store)(struct config_item *, const char *, size_t);
@@ -102243,19 +126172,25 @@ index 758a029..77c9e59 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 177c768..663bdfb 100644
+index 88a4215..3ef686f 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
-@@ -210,6 +210,7 @@ struct global_attr {
- ssize_t (*store)(struct kobject *a, struct attribute *b,
+@@ -206,10 +206,11 @@ __ATTR(_name, 0644, show_##_name, store_##_name)
+ struct global_attr {
+ struct attribute attr;
+ ssize_t (*show)(struct kobject *kobj,
+- struct attribute *attr, char *buf);
+- ssize_t (*store)(struct kobject *a, struct attribute *b,
++ struct kobj_attribute *attr, char *buf);
++ ssize_t (*store)(struct kobject *a, struct kobj_attribute *b,
const char *c, size_t count);
};
+typedef struct global_attr __no_const global_attr_no_const;
#define define_one_global_ro(_name) \
static struct global_attr _name = \
-@@ -281,7 +282,7 @@ struct cpufreq_driver {
- bool boost_supported;
+@@ -280,7 +281,7 @@ struct cpufreq_driver {
+ /* platform specific boost support code */
bool boost_enabled;
int (*set_boost)(int state);
-};
@@ -102287,10 +126222,10 @@ index 786ad32..09d1fb1 100644
#ifdef CONFIG_CPU_IDLE
extern int cpuidle_register_governor(struct cpuidle_governor *gov);
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
-index 59915ea..81ebec0 100644
+index fc14275..8e1074d 100644
--- a/include/linux/cpumask.h
+++ b/include/linux/cpumask.h
-@@ -127,17 +127,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
+@@ -131,17 +131,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
}
/* Valid inputs for n are -1 and 0. */
@@ -102311,7 +126246,7 @@ index 59915ea..81ebec0 100644
const struct cpumask *srcp,
const struct cpumask *andp)
{
-@@ -181,7 +181,7 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
+@@ -185,7 +185,7 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
*
* Returns >= nr_cpu_ids if no further cpus set.
*/
@@ -102320,7 +126255,7 @@ index 59915ea..81ebec0 100644
{
/* -1 is a legal arg here. */
if (n != -1)
-@@ -196,7 +196,7 @@ static inline unsigned int cpumask_next(int n, const struct cpumask *srcp)
+@@ -200,7 +200,7 @@ static inline unsigned int cpumask_next(int n, const struct cpumask *srcp)
*
* Returns >= nr_cpu_ids if no further cpus unset.
*/
@@ -102329,7 +126264,7 @@ index 59915ea..81ebec0 100644
{
/* -1 is a legal arg here. */
if (n != -1)
-@@ -204,7 +204,7 @@ static inline unsigned int cpumask_next_zero(int n, const struct cpumask *srcp)
+@@ -208,7 +208,7 @@ static inline unsigned int cpumask_next_zero(int n, const struct cpumask *srcp)
return find_next_zero_bit(cpumask_bits(srcp), nr_cpumask_bits, n+1);
}
@@ -102338,7 +126273,7 @@ index 59915ea..81ebec0 100644
int cpumask_any_but(const struct cpumask *mask, unsigned int cpu);
unsigned int cpumask_local_spread(unsigned int i, int node);
-@@ -471,7 +471,7 @@ static inline bool cpumask_full(const struct cpumask *srcp)
+@@ -475,7 +475,7 @@ static inline bool cpumask_full(const struct cpumask *srcp)
* cpumask_weight - Count of bits in *srcp
* @srcp: the cpumask to count bits (< nr_cpu_ids) in.
*/
@@ -102423,7 +126358,7 @@ index 653589e..4ef254a 100644
return c | 0x20;
}
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
-index f513dd8..b264e06 100644
+index 03dda7b..430d42c 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -123,6 +123,9 @@ struct dentry {
@@ -102477,7 +126412,7 @@ index 7925bf0..d5143d2 100644
#define large_malloc(a) vmalloc(a)
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
-index 68030e2..c55bb73 100644
+index 6fa02a2..aac3093 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
@@ -117,7 +117,7 @@ struct devfreq_governor {
@@ -102490,10 +126425,10 @@ index 68030e2..c55bb73 100644
/**
* struct devfreq - Device devfreq structure
diff --git a/include/linux/device.h b/include/linux/device.h
-index b8f411b..49052b0 100644
+index 6d6f1fe..148f294 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
-@@ -342,7 +342,7 @@ struct subsys_interface {
+@@ -343,7 +343,7 @@ struct subsys_interface {
struct list_head node;
int (*add_dev)(struct device *dev, struct subsys_interface *sif);
void (*remove_dev)(struct device *dev, struct subsys_interface *sif);
@@ -102502,7 +126437,7 @@ index b8f411b..49052b0 100644
int subsys_interface_register(struct subsys_interface *sif);
void subsys_interface_unregister(struct subsys_interface *sif);
-@@ -538,7 +538,7 @@ struct device_type {
+@@ -539,7 +539,7 @@ struct device_type {
void (*release)(struct device *dev);
const struct dev_pm_ops *pm;
@@ -102511,7 +126446,7 @@ index b8f411b..49052b0 100644
/* interface for exporting device attributes */
struct device_attribute {
-@@ -548,11 +548,12 @@ struct device_attribute {
+@@ -549,11 +549,12 @@ struct device_attribute {
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
};
@@ -102526,10 +126461,10 @@ index b8f411b..49052b0 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 2e551e2..8ea30b5 100644
+index 728ef07..8a9e7f5 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
-@@ -65,7 +65,7 @@ struct dma_map_ops {
+@@ -68,7 +68,7 @@ struct dma_map_ops {
u64 (*get_required_mask)(struct device *dev);
#endif
int is_phys;
@@ -102571,7 +126506,7 @@ index 20fa8d8..3d0dd18 100644
#endif
diff --git a/include/linux/err.h b/include/linux/err.h
-index a729120..6ede2c9 100644
+index 56762ab..bc4a3e3 100644
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -20,12 +20,12 @@
@@ -102603,10 +126538,10 @@ index 7abf674..c0a73a0 100644
/**
diff --git a/include/linux/fb.h b/include/linux/fb.h
-index 3d00380..ce2dbdf9 100644
+index 55433f8..37437b8 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
-@@ -305,7 +305,8 @@ struct fb_ops {
+@@ -323,7 +323,8 @@ struct fb_ops {
/* called at KDB enter and leave time to prepare the console */
int (*fb_debug_enter)(struct fb_info *info);
int (*fb_debug_leave)(struct fb_info *info);
@@ -102629,11 +126564,24 @@ index 5295535..9852c7e 100644
void do_close_on_exec(struct files_struct *);
int iterate_fd(struct files_struct *, unsigned,
int (*)(const void *, struct file *, unsigned),
+diff --git a/include/linux/firewire.h b/include/linux/firewire.h
+index d4b7683..9feb066 100644
+--- a/include/linux/firewire.h
++++ b/include/linux/firewire.h
+@@ -451,7 +451,7 @@ struct fw_iso_context {
+
+ struct fw_iso_context *fw_iso_context_create(struct fw_card *card,
+ int type, int channel, int speed, size_t header_size,
+- fw_iso_callback_t callback, void *callback_data);
++ void *callback, void *callback_data);
+ int fw_iso_context_set_channels(struct fw_iso_context *ctx, u64 *channels);
+ 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 ab3d8d9..7e062a6 100644
+index 83c77b0..b0421bd 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -439,7 +439,7 @@ struct address_space {
+@@ -441,7 +441,7 @@ struct address_space {
spinlock_t private_lock; /* for use by the address_space */
struct list_head private_list; /* ditto */
void *private_data; /* ditto */
@@ -102642,7 +126590,7 @@ index ab3d8d9..7e062a6 100644
/*
* On most architectures that alignment is already the case; but
* must be enforced here for CRIS, to let the least significant bit
-@@ -482,7 +482,7 @@ struct block_device {
+@@ -484,7 +484,7 @@ struct block_device {
int bd_fsfreeze_count;
/* Mutex for freeze */
struct mutex bd_fsfreeze_mutex;
@@ -102651,7 +126599,7 @@ index ab3d8d9..7e062a6 100644
/*
* Radix-tree tags, for tagging dirty and writeback pages within the pagecache
-@@ -677,7 +677,7 @@ struct inode {
+@@ -679,7 +679,7 @@ struct inode {
#endif
void *i_private; /* fs or device private pointer */
@@ -102660,7 +126608,7 @@ index ab3d8d9..7e062a6 100644
static inline int inode_unhashed(struct inode *inode)
{
-@@ -872,7 +872,7 @@ struct file {
+@@ -899,7 +899,7 @@ struct file {
struct list_head f_tfile_llink;
#endif /* #ifdef CONFIG_EPOLL */
struct address_space *f_mapping;
@@ -102669,7 +126617,7 @@ index ab3d8d9..7e062a6 100644
struct file_handle {
__u32 handle_bytes;
-@@ -1007,7 +1007,7 @@ struct file_lock {
+@@ -1034,7 +1034,7 @@ struct file_lock {
int state; /* state of grant or error if -ve */
} afs;
} fl_u;
@@ -102678,7 +126626,7 @@ index ab3d8d9..7e062a6 100644
struct file_lock_context {
spinlock_t flc_lock;
-@@ -1383,7 +1383,7 @@ struct super_block {
+@@ -1410,7 +1410,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 */
@@ -102687,17 +126635,17 @@ index ab3d8d9..7e062a6 100644
extern struct timespec current_fs_time(struct super_block *sb);
-@@ -1639,7 +1639,8 @@ struct file_operations {
- #ifndef CONFIG_MMU
- unsigned (*mmap_capabilities)(struct file *);
- #endif
+@@ -1672,7 +1672,8 @@ struct file_operations {
+ u64);
+ ssize_t (*dedupe_file_range)(struct file *, u64, u64, struct file *,
+ u64);
-};
+} __do_const __randomize_layout;
+typedef struct file_operations __no_const file_operations_no_const;
struct inode_operations {
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
-@@ -2346,7 +2347,7 @@ extern int register_chrdev_region(dev_t, unsigned, const char *);
+@@ -2396,7 +2397,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);
@@ -102706,18 +126654,9 @@ index ab3d8d9..7e062a6 100644
unsigned int count, const char *name);
extern void unregister_chrdev_region(dev_t, unsigned);
extern void chrdev_show(struct seq_file *,off_t);
-@@ -2774,8 +2775,6 @@ extern int vfs_lstat(const char __user *, struct kstat *);
- extern int vfs_fstat(unsigned int, struct kstat *);
- extern int vfs_fstatat(int , const char __user *, struct kstat *, int);
-
--extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
-- unsigned long arg);
- extern int __generic_block_fiemap(struct inode *inode,
- struct fiemap_extent_info *fieinfo,
- loff_t start, loff_t len,
-@@ -3036,4 +3035,14 @@ static inline bool dir_relax(struct inode *inode)
-
+@@ -3088,4 +3089,14 @@ static inline bool dir_relax(struct inode *inode)
extern bool path_noexec(const struct path *path);
+ extern void inode_nohighmem(struct inode *inode);
+static inline bool is_sidechannel_device(const struct inode *inode)
+{
@@ -102810,10 +126749,10 @@ index 7ee1774..72505b8 100644
/*
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
-index 847cc1d..2d2699a 100644
+index 5c70676..0109dd5 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
-@@ -207,7 +207,7 @@ struct gendisk {
+@@ -208,7 +208,7 @@ struct gendisk {
struct kobject *slave_dir;
struct timer_rand_state *random;
@@ -102822,7 +126761,7 @@ index 847cc1d..2d2699a 100644
struct disk_events *ev;
#ifdef CONFIG_BLK_DEV_INTEGRITY
struct kobject integrity_kobj;
-@@ -448,7 +448,7 @@ extern void disk_flush_events(struct gendisk *disk, unsigned int mask);
+@@ -450,7 +450,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 */
@@ -102860,7 +126799,7 @@ index eecd19b..391d1957 100644
__field(attr_nr, attr_flag, name, NLA_U64, __u64, \
nla_get_u64, nla_put_u64, false)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
-index 8942af0..2c247c14 100644
+index af1f2b2..8fe7455 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -36,6 +36,13 @@ struct vm_area_struct;
@@ -102877,15 +126816,15 @@ index 8942af0..2c247c14 100644
/* If the above are modified, __GFP_BITS_SHIFT may need updating */
/*
-@@ -78,6 +85,7 @@ struct vm_area_struct;
- #define __GFP_WRITE ((__force gfp_t)___GFP_WRITE)
+@@ -82,6 +89,7 @@ struct vm_area_struct;
#define __GFP_HARDWALL ((__force gfp_t)___GFP_HARDWALL)
#define __GFP_THISNODE ((__force gfp_t)___GFP_THISNODE)
+ #define __GFP_ACCOUNT ((__force gfp_t)___GFP_ACCOUNT)
+#define __GFP_USERCOPY ((__force gfp_t)___GFP_USERCOPY)/* Allocator intends to copy page to/from userland */
/*
* Watermark modifiers -- controls access to emergency reserves
-@@ -183,7 +191,7 @@ struct vm_area_struct;
+@@ -186,7 +194,7 @@ struct vm_area_struct;
#define __GFP_OTHER_NODE ((__force gfp_t)___GFP_OTHER_NODE)
/* Room for N __GFP_FOO bits */
@@ -102894,7 +126833,7 @@ index 8942af0..2c247c14 100644
#define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
/*
-@@ -250,6 +258,8 @@ struct vm_area_struct;
+@@ -257,6 +265,8 @@ struct vm_area_struct;
__GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN) & \
~__GFP_KSWAPD_RECLAIM)
@@ -102903,6 +126842,15 @@ index 8942af0..2c247c14 100644
/* Convert GFP flags to their corresponding migrate type */
#define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
#define GFP_MOVABLE_SHIFT 3
+@@ -513,7 +523,7 @@ extern void free_kmem_pages(unsigned long addr, unsigned int order);
+ void page_alloc_init(void);
+ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
+ void drain_all_pages(struct zone *zone);
+-void drain_local_pages(struct zone *zone);
++void drain_local_pages(void *zone);
+
+ #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
+ void page_alloc_init_late(void);
diff --git a/include/linux/gracl.h b/include/linux/gracl.h
new file mode 100644
index 0000000..91858e4
@@ -104251,10 +128199,10 @@ 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 685c262..5d42d36 100644
+index 7d953c2..f511887 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
-@@ -317,7 +317,7 @@ struct hstate {
+@@ -314,7 +314,7 @@ struct hstate {
unsigned int surplus_huge_pages_node[MAX_NUMNODES];
#ifdef CONFIG_CGROUP_HUGETLB
/* cgroup control files */
@@ -104317,7 +128265,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 768063b..62ef5be 100644
+index 200cf13b..2a82cb4 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -412,6 +412,7 @@ struct i2c_algorithm {
@@ -104327,9 +128275,9 @@ index 768063b..62ef5be 100644
+typedef struct i2c_algorithm __no_const i2c_algorithm_no_const;
/**
- * struct i2c_bus_recovery_info - I2C bus recovery information
+ * struct i2c_timings - I2C timing information
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
-index b49cf92..0c29072 100644
+index ba7a9b0..33a0237 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
@@ -78,7 +78,7 @@ struct pppox_proto {
@@ -104374,7 +128322,7 @@ index b449f37..61005b3 100644
#define __meminitconst __constsection(.meminit.rodata)
#define __memexit __section(.memexit.text) __exitused __cold notrace
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
-index 1c1ff7e..97a439f 100644
+index f2cb8d4..2f0363e 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -159,6 +159,12 @@ extern struct task_group root_task_group;
@@ -104399,10 +128347,10 @@ index 1c1ff7e..97a439f 100644
.files = &init_files, \
.signal = &init_signals, \
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index ad16809..516b54d 100644
+index 0e95fcc..0694bbf 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
-@@ -435,8 +435,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
+@@ -436,8 +436,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
struct softirq_action
{
@@ -104413,7 +128361,7 @@ index ad16809..516b54d 100644
asmlinkage void do_softirq(void);
asmlinkage void __do_softirq(void);
-@@ -450,7 +450,7 @@ static inline void do_softirq_own_stack(void)
+@@ -451,7 +451,7 @@ static inline void do_softirq_own_stack(void)
}
#endif
@@ -104423,10 +128371,10 @@ index ad16809..516b54d 100644
extern void __raise_softirq_irqoff(unsigned int nr);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
-index f28dff3..2f6c413 100644
+index a5c539f..07d576c 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
-@@ -193,7 +193,7 @@ struct iommu_ops {
+@@ -201,7 +201,7 @@ struct iommu_ops {
unsigned long pgsize_bitmap;
void *priv;
@@ -104493,10 +128441,10 @@ index 3c1c967..ca8abc6 100644
/*
* irq_chip specific flags
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h
-index a587a33..0ff712d 100644
+index dcca77c..8503b4f 100644
--- a/include/linux/irqdesc.h
+++ b/include/linux/irqdesc.h
-@@ -59,7 +59,7 @@ struct irq_desc {
+@@ -62,7 +62,7 @@ struct irq_desc {
unsigned int irq_count; /* For detecting broken IRQs */
unsigned long last_unhandled; /* Aging timer for unhandled count */
unsigned int irqs_unhandled;
@@ -104506,7 +128454,7 @@ index a587a33..0ff712d 100644
raw_spinlock_t lock;
struct cpumask *percpu_enabled;
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
-index d5e5c5b..0e779bd 100644
+index 04579d9..b1278d4 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -38,6 +38,9 @@ struct device_node;
@@ -104596,7 +128544,7 @@ index 5fdc553..766e169 100644
return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32)
>> USEC_TO_HZ_SHR32;
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h
-index 6883e19..e854fcb 100644
+index 6883e19..d2c7746 100644
--- a/include/linux/kallsyms.h
+++ b/include/linux/kallsyms.h
@@ -15,7 +15,8 @@
@@ -104609,14 +128557,26 @@ index 6883e19..e854fcb 100644
/* Lookup the address for a symbol. Returns 0 if not found. */
unsigned long kallsyms_lookup_name(const char *name);
-@@ -106,6 +107,21 @@ static inline int lookup_symbol_attrs(unsigned long addr, unsigned long *size, u
+@@ -40,7 +41,7 @@ extern int sprint_symbol_no_offset(char *buffer, unsigned long address);
+ extern int sprint_backtrace(char *buffer, unsigned long address);
+
+ /* Look up a kernel symbol and print it to the kernel messages. */
+-extern void __print_symbol(const char *fmt, unsigned long address);
++extern __printf(1, 3) void __print_symbol(const char *fmt, unsigned long address, ...);
+
+ int lookup_symbol_name(unsigned long addr, char *symname);
+ int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
+@@ -104,21 +105,26 @@ static inline int lookup_symbol_attrs(unsigned long addr, unsigned long *size, u
+ }
+
/* Stupid that this does nothing, but I didn't create this mess. */
- #define __print_symbol(fmt, addr)
+-#define __print_symbol(fmt, addr)
++#define __print_symbol(fmt, addr, args...)
#endif /*CONFIG_KALLSYMS*/
+#else /* when included by kallsyms.c, vsnprintf.c, kprobes.c, or
+ arch/x86/kernel/dumpstack.c, with HIDESYM enabled */
+extern unsigned long kallsyms_lookup_name(const char *name);
-+extern void __print_symbol(const char *fmt, unsigned long address);
++extern __printf(1, 3) void __print_symbol(const char *fmt, unsigned long address, ...);
+extern int sprint_backtrace(char *buffer, unsigned long address);
+extern int sprint_symbol(char *buffer, unsigned long address);
+extern int sprint_symbol_no_offset(char *buffer, unsigned long address);
@@ -104629,8 +128589,23 @@ index 6883e19..e854fcb 100644
+ unsigned long *offset);
+#endif
- /* This macro allows us to keep printk typechecking */
- static __printf(1, 2)
+-/* This macro allows us to keep printk typechecking */
+-static __printf(1, 2)
+-void __check_printsym_format(const char *fmt, ...)
+-{
+-}
+-
+-static inline void print_symbol(const char *fmt, unsigned long addr)
+-{
+- __check_printsym_format(fmt, "");
+- __print_symbol(fmt, (unsigned long)
+- __builtin_extract_return_addr((void *)addr));
+-}
++#define print_symbol(fmt, addr) \
++ __print_symbol(fmt, addr, "")
+
+ 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
--- a/include/linux/key-type.h
@@ -104786,10 +128761,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 b20a275..4aff061 100644
+index 2c4ebef..f452c4d 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
-@@ -992,7 +992,7 @@ struct ata_port_operations {
+@@ -994,7 +994,7 @@ struct ata_port_operations {
* fields must be pointers.
*/
const struct ata_port_operations *inherits;
@@ -104799,7 +128774,7 @@ index b20a275..4aff061 100644
struct ata_port_info {
unsigned long flags;
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
-index a6a42dd..6c5ebce 100644
+index a6a42dd..6408042 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -36,6 +36,7 @@
@@ -104810,8 +128785,26 @@ index a6a42dd..6c5ebce 100644
#define __page_aligned_bss __section(.bss..page_aligned) __aligned(PAGE_SIZE)
/*
+@@ -84,6 +85,17 @@
+ ALIGN ASM_NL \
+ name:
+ #endif
++
++#ifdef CONFIG_PAX_RAP
++#define RAP_ENTRY(name) \
++ .globl name; \
++ ALIGN; \
++ .quad __rap_hash_##name; \
++ name:
++#else
++#define RAP_ENTRY(name) ENTRY(name)
++#endif
++
+ #endif /* LINKER_SCRIPT */
+
+ #ifndef WEAK
diff --git a/include/linux/list.h b/include/linux/list.h
-index 993395a..b481018 100644
+index 5356f4d..c99970b 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -113,6 +113,19 @@ extern void __list_del_entry(struct list_head *entry);
@@ -104843,6 +128836,98 @@ index 993395a..b481018 100644
/**
* list_move - delete from one list and add as another's head
* @list: the entry to move
+diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h
+index d39ed1c..8b5d98f 100644
+--- a/include/linux/lockd/xdr.h
++++ b/include/linux/lockd/xdr.h
+@@ -95,24 +95,24 @@ struct nlm_reboot {
+ */
+ #define NLMSVC_XDRSIZE sizeof(struct nlm_args)
+
+-int nlmsvc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlmsvc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlmsvc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlmsvc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlmsvc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlmsvc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlmsvc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlmsvc_encode_void(struct svc_rqst *, __be32 *, void *);
+-int nlmsvc_decode_void(struct svc_rqst *, __be32 *, void *);
+-int nlmsvc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlmsvc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlmsvc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlmsvc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *);
++int nlmsvc_decode_testargs(void *, __be32 *, void *);
++int nlmsvc_encode_testres(void *, __be32 *, void *);
++int nlmsvc_decode_lockargs(void *, __be32 *, void *);
++int nlmsvc_decode_cancargs(void *, __be32 *, void *);
++int nlmsvc_decode_unlockargs(void *, __be32 *, void *);
++int nlmsvc_encode_res(void *, __be32 *, void *);
++int nlmsvc_decode_res(void *, __be32 *, void *);
++int nlmsvc_encode_void(void *, __be32 *p, void *);
++int nlmsvc_decode_void(void *, __be32 *, void *);
++int nlmsvc_decode_shareargs(void *, __be32 *, void *);
++int nlmsvc_encode_shareres(void *, __be32 *, void *);
++int nlmsvc_decode_notify(void *, __be32 *, void *);
++int nlmsvc_decode_reboot(void *, __be32 *, void *);
+ /*
+-int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *);
+-int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
+-int nlmclt_encode_cancargs(struct rpc_rqst *, u32 *, struct nlm_args *);
+-int nlmclt_encode_unlockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
++int nlmclt_encode_testargs(void *, u32 *, void *);
++int nlmclt_encode_lockargs(void *, u32 *, void *);
++int nlmclt_encode_cancargs(void *, u32 *, void *);
++int nlmclt_encode_unlockargs(void *, u32 *, void *);
+ */
+
+ #endif /* LOCKD_XDR_H */
+diff --git a/include/linux/lockd/xdr4.h b/include/linux/lockd/xdr4.h
+index e58c88b..759ca71 100644
+--- a/include/linux/lockd/xdr4.h
++++ b/include/linux/lockd/xdr4.h
+@@ -23,24 +23,24 @@
+
+
+
+-int nlm4svc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlm4svc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlm4svc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlm4svc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlm4svc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlm4svc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlm4svc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlm4svc_encode_void(struct svc_rqst *, __be32 *, void *);
+-int nlm4svc_decode_void(struct svc_rqst *, __be32 *, void *);
+-int nlm4svc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlm4svc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *);
+-int nlm4svc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *);
+-int nlm4svc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *);
++int nlm4svc_decode_testargs(void *, __be32 *, void *);
++int nlm4svc_encode_testres(void *, __be32 *, void *);
++int nlm4svc_decode_lockargs(void *, __be32 *, void *);
++int nlm4svc_decode_cancargs(void *, __be32 *, void *);
++int nlm4svc_decode_unlockargs(void *, __be32 *, void *);
++int nlm4svc_encode_res(void *, __be32 *, void *);
++int nlm4svc_decode_res(void *, __be32 *, void *);
++int nlm4svc_encode_void(void *, __be32 *, void *);
++int nlm4svc_decode_void(void *, __be32 *, void *);
++int nlm4svc_decode_shareargs(void *, __be32 *, void *);
++int nlm4svc_encode_shareres(void *, __be32 *, void *);
++int nlm4svc_decode_notify(void *, __be32 *, void *);
++int nlm4svc_decode_reboot(void *, __be32 *, void *);
+ /*
+-int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *);
+-int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
+-int nlmclt_encode_cancargs(struct rpc_rqst *, u32 *, struct nlm_args *);
+-int nlmclt_encode_unlockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
++int nlmclt_encode_testargs(void *, u32 *, void *);
++int nlmclt_encode_lockargs(void *, u32 *, void *);
++int nlmclt_encode_cancargs(void *, u32 *, void *);
++int nlmclt_encode_unlockargs(void *, u32 *, void *);
+ */
+ extern const struct rpc_version nlm_version4;
+
diff --git a/include/linux/lockref.h b/include/linux/lockref.h
index b10b122..d37b3de 100644
--- a/include/linux/lockref.h
@@ -104889,10 +128974,10 @@ index b10b122..d37b3de 100644
#endif /* __LINUX_LOCKREF_H */
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
-index ec3a6ba..72c79d4 100644
+index 71969de..6257abb 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
-@@ -1824,7 +1824,7 @@ struct security_hook_heads {
+@@ -1830,7 +1830,7 @@ struct security_hook_heads {
struct list_head audit_rule_match;
struct list_head audit_rule_free;
#endif /* CONFIG_AUDIT */
@@ -104901,7 +128986,7 @@ index ec3a6ba..72c79d4 100644
/*
* Security module hook list structure.
-@@ -1834,7 +1834,7 @@ struct security_hook_list {
+@@ -1840,7 +1840,7 @@ struct security_hook_list {
struct list_head list;
struct list_head *head;
union security_list_options hook;
@@ -104960,10 +129045,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 cd0e241..ea80891 100644
+index 792c898..3f045d6 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
-@@ -259,7 +259,7 @@ struct mem_cgroup {
+@@ -246,7 +246,7 @@ struct mem_cgroup {
int last_scanned_node;
#if MAX_NUMNODES > 1
nodemask_t scan_nodes;
@@ -104973,7 +129058,7 @@ index cd0e241..ea80891 100644
#endif
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
-index 3d385c8..deacb6a 100644
+index 2696c1f..9320d41 100644
--- a/include/linux/mempolicy.h
+++ b/include/linux/mempolicy.h
@@ -91,6 +91,10 @@ static inline struct mempolicy *mpol_dup(struct mempolicy *pol)
@@ -104998,10 +129083,10 @@ index 3d385c8..deacb6a 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 00bad77..356be09 100644
+index 516e149..93b0b57 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
-@@ -143,6 +143,11 @@ extern unsigned int kobjsize(const void *objp);
+@@ -155,6 +155,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 */
@@ -105013,7 +129098,7 @@ index 00bad77..356be09 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 */
-@@ -268,8 +273,8 @@ struct vm_operations_struct {
+@@ -286,8 +291,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
*/
@@ -105024,7 +129109,7 @@ index 00bad77..356be09 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
-@@ -307,6 +312,7 @@ struct vm_operations_struct {
+@@ -325,6 +330,7 @@ struct vm_operations_struct {
struct page *(*find_special_page)(struct vm_area_struct *vma,
unsigned long addr);
};
@@ -105032,7 +129117,7 @@ index 00bad77..356be09 100644
struct mmu_gather;
struct inode;
-@@ -1142,8 +1148,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address,
+@@ -1175,8 +1181,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);
@@ -105043,7 +129128,7 @@ index 00bad77..356be09 100644
static inline void unmap_shared_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen)
-@@ -1183,9 +1189,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+@@ -1217,9 +1223,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
}
#endif
@@ -105056,7 +129141,7 @@ index 00bad77..356be09 100644
long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
-@@ -1276,39 +1282,11 @@ int clear_page_dirty_for_io(struct page *page);
+@@ -1310,39 +1316,11 @@ int clear_page_dirty_for_io(struct page *page);
int get_cmdline(struct task_struct *task, char *buffer, int buflen);
@@ -105093,10 +129178,10 @@ index 00bad77..356be09 100644
- !vma_growsup(vma->vm_next, addr);
-}
-
- extern struct task_struct *task_of_stack(struct task_struct *task,
- struct vm_area_struct *vma, bool in_group);
+ int vma_is_stack_for_task(struct vm_area_struct *vma, struct task_struct *t);
-@@ -1431,8 +1409,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
+ extern unsigned long move_page_tables(struct vm_area_struct *vma,
+@@ -1487,8 +1465,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
{
return 0;
}
@@ -105112,7 +129197,7 @@ index 00bad77..356be09 100644
#endif
#if defined(__PAGETABLE_PMD_FOLDED) || !defined(CONFIG_MMU)
-@@ -1442,6 +1427,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
+@@ -1498,6 +1483,12 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
return 0;
}
@@ -105125,7 +129210,7 @@ index 00bad77..356be09 100644
static inline void mm_nr_pmds_init(struct mm_struct *mm) {}
static inline unsigned long mm_nr_pmds(struct mm_struct *mm)
-@@ -1454,6 +1445,7 @@ static inline void mm_dec_nr_pmds(struct mm_struct *mm) {}
+@@ -1510,6 +1501,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);
@@ -105133,7 +129218,7 @@ index 00bad77..356be09 100644
static inline void mm_nr_pmds_init(struct mm_struct *mm)
{
-@@ -1491,11 +1483,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
+@@ -1547,11 +1539,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
NULL: pud_offset(pgd, address);
}
@@ -105157,7 +129242,7 @@ index 00bad77..356be09 100644
#endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */
#if USE_SPLIT_PTE_PTLOCKS
-@@ -1878,12 +1882,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
+@@ -1934,12 +1938,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
bool *need_rmap_locks);
extern void exit_mmap(struct mm_struct *);
@@ -105181,7 +129266,7 @@ index 00bad77..356be09 100644
if (rlim < RLIM_INFINITY) {
if (((new - start) + (end_data - start_data)) > rlim)
return -ENOSPC;
-@@ -1916,6 +1931,7 @@ extern unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1974,6 +1989,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);
@@ -105189,7 +129274,7 @@ index 00bad77..356be09 100644
static inline unsigned long
do_mmap_pgoff(struct file *file, unsigned long addr,
-@@ -1952,10 +1968,11 @@ struct vm_unmapped_area_info {
+@@ -2010,10 +2026,11 @@ struct vm_unmapped_area_info {
unsigned long high_limit;
unsigned long align_mask;
unsigned long align_offset;
@@ -105203,7 +129288,7 @@ index 00bad77..356be09 100644
/*
* Search for an unmapped address range.
-@@ -1967,7 +1984,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
+@@ -2025,7 +2042,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
@@ -105212,7 +129297,7 @@ index 00bad77..356be09 100644
{
if (info->flags & VM_UNMAPPED_AREA_TOPDOWN)
return unmapped_area_topdown(info);
-@@ -2027,6 +2044,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add
+@@ -2085,6 +2102,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);
@@ -105223,7 +129308,7 @@ index 00bad77..356be09 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)
-@@ -2056,10 +2077,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
+@@ -2114,10 +2135,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
}
#ifdef CONFIG_MMU
@@ -105236,19 +129321,7 @@ index 00bad77..356be09 100644
{
return __pgprot(0);
}
-@@ -2122,6 +2143,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
- static inline void vm_stat_account(struct mm_struct *mm,
- unsigned long flags, struct file *file, long pages)
- {
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+ if (!(mm->pax_flags & MF_PAX_RANDMMAP) || (flags & (VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)))
-+#endif
-+
- mm->total_vm += pages;
- }
- #endif /* CONFIG_PROC_FS */
-@@ -2226,7 +2252,7 @@ extern void put_hwpoison_page(struct page *page);
+@@ -2282,7 +2303,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);
@@ -105257,7 +129330,7 @@ index 00bad77..356be09 100644
extern int soft_offline_page(struct page *page, int flags);
-@@ -2311,5 +2337,11 @@ void __init setup_nr_node_ids(void);
+@@ -2367,5 +2388,11 @@ void __init setup_nr_node_ids(void);
static inline void setup_nr_node_ids(void) {}
#endif
@@ -105270,10 +129343,10 @@ index 00bad77..356be09 100644
#endif /* __KERNEL__ */
#endif /* _LINUX_MM_H */
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index f8d1492..a6dfed0 100644
+index 624b78b..47715c9 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
-@@ -355,7 +355,9 @@ struct vm_area_struct {
+@@ -352,7 +352,9 @@ struct vm_area_struct {
struct mempolicy *vm_policy; /* NUMA policy for the VMA */
#endif
struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
@@ -105284,7 +129357,7 @@ index f8d1492..a6dfed0 100644
struct core_thread {
struct task_struct *task;
-@@ -511,7 +513,25 @@ struct mm_struct {
+@@ -509,7 +511,25 @@ struct mm_struct {
#ifdef CONFIG_HUGETLB_PAGE
atomic_long_t hugetlb_usage;
#endif
@@ -105334,10 +129407,10 @@ index 3ba327a..85cd5ce 100644
}
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
-index e23a9e7..75994f3 100644
+index 7b6c2cf..7bce238 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
-@@ -527,7 +527,7 @@ struct zone {
+@@ -522,7 +522,7 @@ struct zone {
ZONE_PADDING(_pad3_)
/* Zone statistics */
@@ -105347,7 +129420,7 @@ index e23a9e7..75994f3 100644
enum zone_flags {
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
-index 64f36e0..fa7f0d8 100644
+index 6e4c645..3633f7b 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -139,7 +139,7 @@ struct usb_device_id {
@@ -105369,7 +129442,7 @@ index 64f36e0..fa7f0d8 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 b229a99..37a70e1 100644
+index 2bb0c30..dc42cbc 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -19,9 +19,11 @@
@@ -105408,7 +129481,35 @@ index b229a99..37a70e1 100644
extern ssize_t __modver_version_show(struct module_attribute *,
struct module_kobject *, char *);
-@@ -319,7 +322,7 @@ struct module {
+@@ -303,17 +306,18 @@ struct mod_tree_node {
+ };
+
+ struct module_layout {
+- /* The actual code + data. */
+- void *base;
+- /* Total size. */
+- unsigned int size;
+- /* The size of the executable code. */
+- unsigned int text_size;
+- /* Size of RO section of the module (text+rodata) */
+- unsigned int ro_size;
++ /* The actual code. */
++ void *base_rx;
++ /* The actual data. */
++ void *base_rw;
++ /* Code size. */
++ unsigned int size_rx;
++ /* Data size. */
++ unsigned int size_rw;
+
+ #ifdef CONFIG_MODULES_TREE_LOOKUP
+- struct mod_tree_node mtn;
++ struct mod_tree_node mtn_rx;
++ struct mod_tree_node mtn_rw;
+ #endif
+ };
+
+@@ -341,7 +345,7 @@ struct module {
/* Sysfs stuff. */
struct module_kobject mkobj;
@@ -105417,52 +129518,7 @@ index b229a99..37a70e1 100644
const char *version;
const char *srcversion;
struct kobject *holders_dir;
-@@ -376,20 +379,21 @@ struct module {
- * If this is non-NULL, vfree() after init() returns.
- *
- * Cacheline align here, such that:
-- * module_init, module_core, init_size, core_size,
-+ * module_init_*, module_core_*, init_size_*, core_size_*,
- * init_text_size, core_text_size and mtn_core::{mod,node[0]}
- * are on the same cacheline.
- */
-- void *module_init ____cacheline_aligned;
-+ void *module_init_rw ____cacheline_aligned;
-+ void *module_init_rx;
-
- /* Here is the actual code + data, vfree'd on unload. */
-- void *module_core;
-+ void *module_core_rx, *module_core_rw;
-
- /* Here are the sizes of the init and core sections */
-- unsigned int init_size, core_size;
-+ unsigned int init_size_rw, core_size_rw;
-
- /* The size of the executable code in each section. */
-- unsigned int init_text_size, core_text_size;
-+ unsigned int init_size_rx, core_size_rx;
-
- #ifdef CONFIG_MODULES_TREE_LOOKUP
- /*
-@@ -397,13 +401,12 @@ struct module {
- * above entries such that a regular lookup will only touch one
- * cacheline.
- */
-- struct mod_tree_node mtn_core;
-- struct mod_tree_node mtn_init;
-+ struct mod_tree_node mtn_core_rw;
-+ struct mod_tree_node mtn_core_rx;
-+ struct mod_tree_node mtn_init_rw;
-+ struct mod_tree_node mtn_init_rx;
- #endif
-
-- /* Size of RO sections of the module (text+rodata) */
-- unsigned int init_ro_size, core_ro_size;
--
- /* Arch-specific module values */
- struct mod_arch_specific arch;
-
-@@ -455,6 +458,10 @@ struct module {
+@@ -449,6 +453,10 @@ struct module {
unsigned int num_trace_events;
struct trace_enum_map **trace_enums;
unsigned int num_trace_enums;
@@ -105473,7 +129529,7 @@ index b229a99..37a70e1 100644
#endif
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
unsigned int num_ftrace_callsites;
-@@ -482,7 +489,8 @@ struct module {
+@@ -476,7 +484,8 @@ struct module {
ctor_fn_t *ctors;
unsigned int num_ctors;
#endif
@@ -105483,7 +129539,7 @@ index b229a99..37a70e1 100644
#ifndef MODULE_ARCH_INIT
#define MODULE_ARCH_INIT {}
#endif
-@@ -503,18 +511,48 @@ bool is_module_address(unsigned long addr);
+@@ -497,18 +506,38 @@ bool is_module_address(unsigned long addr);
bool is_module_percpu_address(unsigned long addr);
bool is_module_text_address(unsigned long addr);
@@ -105499,40 +129555,30 @@ index b229a99..37a70e1 100644
+ return ((void *)addr >= start && (void *)addr < start + size);
+}
+
-+static inline int within_module_core_rx(unsigned long addr, const struct module *mod)
-+{
-+ return within_module_range(addr, mod->module_core_rx, mod->core_size_rx);
-+}
-+
-+static inline int within_module_core_rw(unsigned long addr, const struct module *mod)
-+{
-+ return within_module_range(addr, mod->module_core_rw, mod->core_size_rw);
-+}
-+
-+static inline int within_module_init_rx(unsigned long addr, const struct module *mod)
++static inline int within_module_rx(unsigned long addr, const struct module_layout *layout)
+{
-+ return within_module_range(addr, mod->module_init_rx, mod->init_size_rx);
++ return within_module_range(addr, layout->base_rx, layout->size_rx);
+}
+
-+static inline int within_module_init_rw(unsigned long addr, const struct module *mod)
++static inline int within_module_rw(unsigned long addr, const struct module_layout *layout)
+{
-+ return within_module_range(addr, mod->module_init_rw, mod->init_size_rw);
++ return within_module_range(addr, layout->base_rw, layout->size_rw);
+}
+
static inline bool within_module_core(unsigned long addr,
const struct module *mod)
{
-- return (unsigned long)mod->module_core <= addr &&
-- addr < (unsigned long)mod->module_core + mod->core_size;
-+ return within_module_core_rx(addr, mod) || within_module_core_rw(addr, mod);
+- return (unsigned long)mod->core_layout.base <= addr &&
+- addr < (unsigned long)mod->core_layout.base + mod->core_layout.size;
++ return within_module_rx(addr, &mod->core_layout) || within_module_rw(addr, &mod->core_layout);
}
static inline bool within_module_init(unsigned long addr,
const struct module *mod)
{
-- return (unsigned long)mod->module_init <= addr &&
-- addr < (unsigned long)mod->module_init + mod->init_size;
-+ return within_module_init_rx(addr, mod) || within_module_init_rw(addr, mod);
+- return (unsigned long)mod->init_layout.base <= addr &&
+- addr < (unsigned long)mod->init_layout.base + mod->init_layout.size;
++ return within_module_rx(addr, &mod->init_layout) || within_module_rw(addr, &mod->init_layout);
}
static inline bool within_module(unsigned long addr, const struct module *mod)
@@ -105585,9 +129631,37 @@ index 4d0cb9b..3169ac7 100644
}
#endif
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
-index 52666d9..9701f5e 100644
+index 52666d9..f10563b 100644
--- a/include/linux/moduleparam.h
+++ b/include/linux/moduleparam.h
+@@ -54,7 +54,7 @@ struct kernel_param_ops {
+ int (*get)(char *buffer, const struct kernel_param *kp);
+ /* Optional function to free kp->arg when module unloaded. */
+ void (*free)(void *arg);
+-};
++} __do_const;
+
+ /*
+ * Flags available for kernel_param
+@@ -226,15 +226,15 @@ struct kparam_array
+
+ /* Obsolete - use module_param_cb() */
+ #define module_param_call(name, set, get, arg, perm) \
+- static const struct kernel_param_ops __param_ops_##name = \
+- { .flags = 0, (void *)set, (void *)get }; \
++ static const struct kernel_param_ops __param_ops_##name = \
++ { .flags = 0, set, get }; \
+ __module_param_call(MODULE_PARAM_PREFIX, \
+ name, &__param_ops_##name, arg, \
+ (perm) + sizeof(__check_old_set_param(set))*0, -1, 0)
+
+ /* We don't get oldget: it's often a new-style param_get_uint, etc. */
+ static inline int
+-__check_old_set_param(int (*oldset)(const char *, struct kernel_param *))
++__check_old_set_param(int (*oldset)(const char *, const struct kernel_param *))
+ {
+ return 0;
+ }
@@ -289,7 +289,7 @@ static inline void kernel_param_unlock(struct module *mod)
* @len is usually just sizeof(string).
*/
@@ -105646,10 +129720,10 @@ index 0b4ac7d..d4dc945 100644
struct iovec;
struct kvec;
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index 04c068e..828eebe 100644
+index 6d1d8f4..f1ed976 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -1238,6 +1238,7 @@ struct net_device_ops {
+@@ -1257,6 +1257,7 @@ struct net_device_ops {
int (*ndo_fill_metadata_dst)(struct net_device *dev,
struct sk_buff *skb);
};
@@ -105657,7 +129731,7 @@ index 04c068e..828eebe 100644
/**
* enum net_device_priv_flags - &struct net_device priv_flags
-@@ -1548,7 +1549,7 @@ struct net_device {
+@@ -1570,7 +1571,7 @@ struct net_device {
unsigned long base_addr;
int irq;
@@ -105666,7 +129740,7 @@ index 04c068e..828eebe 100644
/*
* Some hardware also needs these fields (state,dev_list,
-@@ -1587,8 +1588,8 @@ struct net_device {
+@@ -1609,8 +1610,8 @@ struct net_device {
struct net_device_stats stats;
@@ -105690,8 +129764,23 @@ index 0ad5567..79b35f5a 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_comment.h b/include/linux/netfilter/ipset/ip_set_comment.h
+index 8d02485..a1e1aa5 100644
+--- a/include/linux/netfilter/ipset/ip_set_comment.h
++++ b/include/linux/netfilter/ipset/ip_set_comment.h
+@@ -58,8 +58,9 @@ ip_set_put_comment(struct sk_buff *skb, struct ip_set_comment *comment)
+ * of the set data anymore.
+ */
+ static inline void
+-ip_set_comment_free(struct ip_set_comment *comment)
++ip_set_comment_free(void *_comment)
+ {
++ struct ip_set_comment *comment = _comment;
+ struct ip_set_comment_rcu *c;
+
+ c = rcu_dereference_protected(comment->c, 1);
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h
-index 5646b24..707819e 100644
+index ba0d978..5a9c6f1 100644
--- a/include/linux/netfilter/nfnetlink.h
+++ b/include/linux/netfilter/nfnetlink.h
@@ -19,7 +19,7 @@ struct nfnl_callback {
@@ -105719,10 +129808,10 @@ index 0000000..33f4af8
+
+#endif
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
-index 639e9b8..b37c9be 100644
+index 0b41959..71c4eea 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
-@@ -158,19 +158,19 @@ struct netlink_dump_control {
+@@ -160,19 +160,19 @@ struct netlink_dump_control {
void *data;
struct module *module;
u16 min_dump_alloc;
@@ -105813,6 +129902,28 @@ index 4386946..f50c615 100644
struct padata_cpumask cpumask;
spinlock_t lock ____cacheline_aligned;
unsigned int processed;
+diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
+index 92395a0..5ca2827 100644
+--- a/include/linux/pagemap.h
++++ b/include/linux/pagemap.h
+@@ -243,7 +243,7 @@ static inline struct page *page_cache_alloc_readahead(struct address_space *x)
+ __GFP_COLD | __GFP_NORETRY | __GFP_NOWARN);
+ }
+
+-typedef int filler_t(void *, struct page *);
++typedef int filler_t(struct file *, struct page *);
+
+ pgoff_t page_cache_next_hole(struct address_space *mapping,
+ pgoff_t index, unsigned long max_scan);
+@@ -387,7 +387,7 @@ extern int read_cache_pages(struct address_space *mapping,
+ static inline struct page *read_mapping_page(struct address_space *mapping,
+ pgoff_t index, void *data)
+ {
+- filler_t *filler = (filler_t *)mapping->a_ops->readpage;
++ filler_t *filler = mapping->a_ops->readpage;
+ return read_cache_page(mapping, index, filler, data);
+ }
+
diff --git a/include/linux/path.h b/include/linux/path.h
index d137218..be0c176 100644
--- a/include/linux/path.h
@@ -105849,10 +129960,10 @@ 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 caebf2a..4c3ae9d 100644
+index 4bc6daf..6edaab0 100644
--- a/include/linux/percpu.h
+++ b/include/linux/percpu.h
-@@ -34,7 +34,7 @@
+@@ -28,7 +28,7 @@
* preallocate for this. Keep PERCPU_DYNAMIC_RESERVE equal to or
* larger than PERCPU_DYNAMIC_EARLY_SIZE.
*/
@@ -105862,10 +129973,10 @@ index caebf2a..4c3ae9d 100644
/*
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
-index f9828a4..d5a70ba 100644
+index f5c5a3f..1330851 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
-@@ -470,8 +470,8 @@ struct perf_event {
+@@ -471,8 +471,8 @@ struct perf_event {
enum perf_event_active_state state;
unsigned int attach_state;
@@ -105876,7 +129987,7 @@ index f9828a4..d5a70ba 100644
/*
* These are the total time in nanoseconds that the event
-@@ -522,8 +522,8 @@ struct perf_event {
+@@ -523,8 +523,8 @@ struct perf_event {
* These accumulate total time (in nanoseconds) that children
* events have been enabled and running, respectively.
*/
@@ -105887,7 +129998,7 @@ index f9828a4..d5a70ba 100644
/*
* Protect attach/detach and child_list:
-@@ -950,7 +950,7 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
+@@ -948,7 +948,7 @@ static inline void perf_event_task_sched_out(struct task_struct *prev,
static inline u64 __perf_event_count(struct perf_event *event)
{
@@ -105896,7 +130007,7 @@ index f9828a4..d5a70ba 100644
}
extern void perf_event_mmap(struct vm_area_struct *vma);
-@@ -974,7 +974,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64
+@@ -972,7 +972,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64
entry->ip[entry->nr++] = ip;
}
@@ -105905,7 +130016,7 @@ index f9828a4..d5a70ba 100644
extern int sysctl_perf_event_mlock;
extern int sysctl_perf_event_sample_rate;
extern int sysctl_perf_cpu_time_max_percent;
-@@ -989,19 +989,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
+@@ -987,19 +987,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
loff_t *ppos);
@@ -105933,7 +130044,7 @@ index f9828a4..d5a70ba 100644
}
extern void perf_event_init(void);
-@@ -1164,7 +1169,7 @@ struct perf_pmu_events_attr {
+@@ -1162,7 +1167,7 @@ struct perf_pmu_events_attr {
struct device_attribute attr;
u64 id;
const char *event_str;
@@ -105942,6 +130053,21 @@ index f9828a4..d5a70ba 100644
ssize_t perf_event_sysfs_show(struct device *dev, struct device_attribute *attr,
char *page);
+diff --git a/include/linux/pid.h b/include/linux/pid.h
+index 23705a5..af2bfb4 100644
+--- a/include/linux/pid.h
++++ b/include/linux/pid.h
+@@ -169,8 +169,8 @@ static inline pid_t pid_nr(struct pid *pid)
+ return nr;
+ }
+
+-pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns);
+-pid_t pid_vnr(struct pid *pid);
++pid_t pid_nr_ns(const struct pid *pid, const struct pid_namespace *ns);
++pid_t pid_vnr(const struct pid *pid);
+
+ #define do_each_pid_task(pid, type, task) \
+ do { \
diff --git a/include/linux/pid_namespace.h b/include/linux/pid_namespace.h
index 918b117..7af374b7 100644
--- a/include/linux/pid_namespace.h
@@ -105956,16 +130082,10 @@ index 918b117..7af374b7 100644
extern struct pid_namespace init_pid_ns;
diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h
-index eb8b8ac..deb6089 100644
+index 24f5470..deb6089 100644
--- a/include/linux/pipe_fs_i.h
+++ b/include/linux/pipe_fs_i.h
-@@ -42,21 +42,23 @@ struct pipe_buffer {
- * @fasync_readers: reader side fasync
- * @fasync_writers: writer side fasync
- * @bufs: the circular array of pipe buffers
-+ * @user: the user who created this pipe
- **/
- struct pipe_inode_info {
+@@ -48,10 +48,10 @@ struct pipe_inode_info {
struct mutex mutex;
wait_queue_head_t wait;
unsigned int nrbufs, curbuf, buffers;
@@ -105980,27 +130100,11 @@ index eb8b8ac..deb6089 100644
unsigned int r_counter;
unsigned int w_counter;
struct page *tmp_page;
- struct fasync_struct *fasync_readers;
- struct fasync_struct *fasync_writers;
- struct pipe_buffer *bufs;
-+ struct user_struct *user;
- };
-
- /*
-@@ -123,6 +125,8 @@ void pipe_unlock(struct pipe_inode_info *);
- void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *);
-
- extern unsigned int pipe_max_size, pipe_min_size;
-+extern unsigned long pipe_user_pages_hard;
-+extern unsigned long pipe_user_pages_soft;
- int pipe_proc_fn(struct ctl_table *, int, void __user *, size_t *, loff_t *);
-
-
diff --git a/include/linux/pm.h b/include/linux/pm.h
-index 528be67..4643a08 100644
+index 6a5d654..1051ebc 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
-@@ -630,6 +630,7 @@ struct dev_pm_domain {
+@@ -631,6 +631,7 @@ struct dev_pm_domain {
void (*sync)(struct device *dev);
void (*dismiss)(struct device *dev);
};
@@ -106009,7 +130113,7 @@ index 528be67..4643a08 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 ba4ced3..7ce2a56 100644
+index db21d39..39a6aaa 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -35,7 +35,7 @@ struct gpd_dev_ops {
@@ -106022,10 +130126,10 @@ index ba4ced3..7ce2a56 100644
struct generic_pm_domain {
struct dev_pm_domain domain; /* PM domain operations */
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
-index 3bdbb41..2a6f56c 100644
+index 7af093d..122df16 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
-@@ -110,7 +110,7 @@ static inline bool pm_runtime_callbacks_present(struct device *dev)
+@@ -111,7 +111,7 @@ static inline bool pm_runtime_callbacks_present(struct device *dev)
static inline void pm_runtime_mark_last_busy(struct device *dev)
{
@@ -106048,10 +130152,10 @@ index 5df733b..d55f252 100644
/* config parameters */
#define PNP_CONFIG_NORMAL 0x0001
diff --git a/include/linux/poison.h b/include/linux/poison.h
-index 317e16d..ec214cb 100644
+index 4a27153..8106d5c 100644
--- a/include/linux/poison.h
+++ b/include/linux/poison.h
-@@ -19,15 +19,15 @@
+@@ -19,8 +19,8 @@
* under normal circumstances, used to verify that nobody uses
* non-initialized list entries.
*/
@@ -106062,14 +130166,6 @@ index 317e16d..ec214cb 100644
/********** include/linux/timer.h **********/
/*
- * Magic number "tsta" to indicate a static timer initializer
- * for the object debugging code.
- */
--#define TIMER_ENTRY_STATIC ((void *) 0x74737461)
-+#define TIMER_ENTRY_STATIC ((void *) 0x300 + POISON_POINTER_DELTA)
-
- /********** mm/debug-pagealloc.c **********/
- #define PAGE_POISON 0xaa
diff --git a/include/linux/power/smartreflex.h b/include/linux/power/smartreflex.h
index d8b187c3..9a9257a 100644
--- a/include/linux/power/smartreflex.h
@@ -106169,9 +130265,18 @@ index 75e4e30..fcfde15 100644
#define preempt_set_need_resched() \
do { \
diff --git a/include/linux/printk.h b/include/linux/printk.h
-index 9729565..e5e5255 100644
+index 9ccbdf2..9987ac2 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)
+ #define CONSOLE_LOGLEVEL_DEBUG 10 /* issue debug messages */
+ #define CONSOLE_LOGLEVEL_MOTORMOUTH 15 /* You can't shut this one up */
+
+-extern int console_printk[];
++extern int console_printk[4];
+
+ #define console_loglevel (console_printk[0])
+ #define default_message_loglevel (console_printk[1])
@@ -123,6 +123,7 @@ void early_printk(const char *s, ...) { }
#endif
@@ -106286,7 +130391,7 @@ index b2505ac..5f7ab55 100644
extern bool qid_valid(struct kqid qid);
diff --git a/include/linux/random.h b/include/linux/random.h
-index a75840c..e7c4305 100644
+index 9c29122..9112a5b9 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -18,9 +18,19 @@ struct random_ready_callback {
@@ -106311,7 +130416,7 @@ index a75840c..e7c4305 100644
extern void get_random_bytes(void *buf, int nbytes);
extern int add_random_ready_callback(struct random_ready_callback *rdy);
-@@ -52,6 +62,11 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
+@@ -53,6 +63,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))
@@ -106323,7 +130428,7 @@ index a75840c..e7c4305 100644
/**
* prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro)
* @ep_ro: right open interval endpoint
-@@ -64,7 +79,7 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
+@@ -65,7 +80,7 @@ void prandom_seed_full_state(struct rnd_state __percpu *pcpu_state);
*
* Returns: pseudo-random number in interval [0, ep_ro)
*/
@@ -106348,7 +130453,7 @@ index 14d7b83..a1edf56 100644
diff --git a/include/linux/rculist.h b/include/linux/rculist.h
-index 5ed5409..92c9f6a 100644
+index 14ec165..45c00c5 100644
--- a/include/linux/rculist.h
+++ b/include/linux/rculist.h
@@ -59,6 +59,9 @@ void __list_add_rcu(struct list_head *new,
@@ -106396,10 +130501,10 @@ index 5ed5409..92c9f6a 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 a0189ba..7e34269 100644
+index 14e6f47..0e6846b 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
-@@ -854,6 +854,7 @@ static inline void rcu_preempt_sleep_check(void)
+@@ -867,6 +867,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.
*/
@@ -106407,7 +130512,7 @@ index a0189ba..7e34269 100644
static inline void rcu_read_lock(void)
{
__rcu_read_lock();
-@@ -908,6 +909,7 @@ static inline void rcu_read_lock(void)
+@@ -921,6 +922,7 @@ static inline void rcu_read_lock(void)
*
* See rcu_read_lock() for more information.
*/
@@ -106415,7 +130520,7 @@ index a0189ba..7e34269 100644
static inline void rcu_read_unlock(void)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(),
-@@ -934,6 +936,7 @@ static inline void rcu_read_unlock(void)
+@@ -947,6 +949,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.
*/
@@ -106423,7 +130528,7 @@ index a0189ba..7e34269 100644
static inline void rcu_read_lock_bh(void)
{
local_bh_disable();
-@@ -948,6 +951,7 @@ static inline void rcu_read_lock_bh(void)
+@@ -961,6 +964,7 @@ static inline void rcu_read_lock_bh(void)
*
* See rcu_read_lock_bh() for more information.
*/
@@ -106431,7 +130536,7 @@ index a0189ba..7e34269 100644
static inline void rcu_read_unlock_bh(void)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(),
-@@ -970,6 +974,7 @@ static inline void rcu_read_unlock_bh(void)
+@@ -983,6 +987,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.
*/
@@ -106439,7 +130544,7 @@ index a0189ba..7e34269 100644
static inline void rcu_read_lock_sched(void)
{
preempt_disable();
-@@ -980,6 +985,7 @@ static inline void rcu_read_lock_sched(void)
+@@ -993,6 +998,7 @@ static inline void rcu_read_lock_sched(void)
}
/* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */
@@ -106447,7 +130552,7 @@ index a0189ba..7e34269 100644
static inline notrace void rcu_read_lock_sched_notrace(void)
{
preempt_disable_notrace();
-@@ -991,6 +997,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void)
+@@ -1004,6 +1010,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void)
*
* See rcu_read_lock_sched for more information.
*/
@@ -106455,7 +130560,7 @@ index a0189ba..7e34269 100644
static inline void rcu_read_unlock_sched(void)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(),
-@@ -1001,6 +1008,7 @@ static inline void rcu_read_unlock_sched(void)
+@@ -1014,6 +1021,7 @@ static inline void rcu_read_unlock_sched(void)
}
/* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */
@@ -106543,10 +130648,10 @@ index cde976e..ebd6033 100644
#define RIO_RESOURCE_MEM 0x00000100
#define RIO_RESOURCE_DOORBELL 0x00000200
diff --git a/include/linux/rmap.h b/include/linux/rmap.h
-index ddda2ac..4c6b6e1 100644
+index a07f42b..6b04a8d 100644
--- a/include/linux/rmap.h
+++ b/include/linux/rmap.h
-@@ -135,8 +135,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma)
+@@ -136,8 +136,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma)
void anon_vma_init(void); /* create anon_vma_cachep */
int anon_vma_prepare(struct vm_area_struct *);
void unlink_anon_vmas(struct vm_area_struct *);
@@ -106590,7 +130695,7 @@ index 556ec1e..38c19c9 100644
/*
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 21a6e96..25820d8 100644
+index a10494a..2facd6d 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -7,7 +7,7 @@
@@ -106610,7 +130715,7 @@ index 21a6e96..25820d8 100644
#define VMACACHE_BITS 2
#define VMACACHE_SIZE (1U << VMACACHE_BITS)
-@@ -437,6 +438,19 @@ struct nsproxy;
+@@ -441,6 +442,19 @@ struct nsproxy;
struct user_namespace;
#ifdef CONFIG_MMU
@@ -106630,7 +130735,7 @@ index 21a6e96..25820d8 100644
extern void arch_pick_mmap_layout(struct mm_struct *mm);
extern unsigned long
arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
-@@ -769,6 +783,17 @@ struct signal_struct {
+@@ -773,6 +787,17 @@ struct signal_struct {
#ifdef CONFIG_TASKSTATS
struct taskstats *stats;
#endif
@@ -106648,7 +130753,7 @@ index 21a6e96..25820d8 100644
#ifdef CONFIG_AUDIT
unsigned audit_tty;
unsigned audit_tty_log_passwd;
-@@ -783,7 +808,7 @@ struct signal_struct {
+@@ -787,7 +812,7 @@ struct signal_struct {
struct mutex cred_guard_mutex; /* guard against foreign influences on
* credential calculations
* (notably. ptrace) */
@@ -106657,14 +130762,7 @@ index 21a6e96..25820d8 100644
/*
* Bits in flags field of signal_struct.
-@@ -831,12 +856,21 @@ struct user_struct {
- #endif
- unsigned long locked_shm; /* How many pages of mlocked shm ? */
- unsigned long unix_inflight; /* How many files in flight in unix sockets */
-+ atomic_long_t pipe_bufs; /* how many pages are allocated in pipe buffers */
-
- #ifdef CONFIG_KEYS
- struct key *uid_keyring; /* UID specific keyring */
+@@ -842,6 +867,14 @@ struct user_struct {
struct key *session_keyring; /* UID's default session keyring */
#endif
@@ -106679,7 +130777,7 @@ index 21a6e96..25820d8 100644
/* Hash table maintenance information */
struct hlist_node uidhash_node;
kuid_t uid;
-@@ -844,7 +878,7 @@ struct user_struct {
+@@ -849,7 +882,7 @@ struct user_struct {
#if defined(CONFIG_PERF_EVENTS) || defined(CONFIG_BPF_SYSCALL)
atomic_long_t locked_vm;
#endif
@@ -106688,7 +130786,7 @@ index 21a6e96..25820d8 100644
extern int uids_sysfs_init(void);
-@@ -1379,6 +1413,9 @@ struct tlbflush_unmap_batch {
+@@ -1389,6 +1422,9 @@ struct tlbflush_unmap_batch {
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
void *stack;
@@ -106698,7 +130796,7 @@ index 21a6e96..25820d8 100644
atomic_t usage;
unsigned int flags; /* per process flags, defined below */
unsigned int ptrace;
-@@ -1514,8 +1551,8 @@ struct task_struct {
+@@ -1524,8 +1560,8 @@ struct task_struct {
struct list_head thread_node;
struct completion *vfork_done; /* for vfork() */
@@ -106709,7 +130807,7 @@ index 21a6e96..25820d8 100644
cputime_t utime, stime, utimescaled, stimescaled;
cputime_t gtime;
-@@ -1538,11 +1575,6 @@ struct task_struct {
+@@ -1551,11 +1587,6 @@ struct task_struct {
struct task_cputime cputime_expires;
struct list_head cpu_timers[3];
@@ -106721,7 +130819,7 @@ index 21a6e96..25820d8 100644
char comm[TASK_COMM_LEN]; /* executable name excluding path
- access with [gs]et_task_comm (which lock
it with task_lock())
-@@ -1558,6 +1590,8 @@ struct task_struct {
+@@ -1571,6 +1602,8 @@ struct task_struct {
/* hung task detection */
unsigned long last_switch_count;
#endif
@@ -106730,8 +130828,8 @@ index 21a6e96..25820d8 100644
/* filesystem information */
struct fs_struct *fs;
/* open file information */
-@@ -1632,6 +1666,10 @@ struct task_struct {
- gfp_t lockdep_reclaim_gfp;
+@@ -1648,6 +1681,10 @@ struct task_struct {
+ unsigned int in_ubsan;
#endif
+/* process credentials */
@@ -106741,7 +130839,7 @@ index 21a6e96..25820d8 100644
/* journalling filesystem info */
void *journal_info;
-@@ -1670,6 +1708,10 @@ struct task_struct {
+@@ -1686,6 +1723,10 @@ struct task_struct {
/* cg_list protected by css_set_lock and tsk->alloc_lock */
struct list_head cg_list;
#endif
@@ -106752,7 +130850,7 @@ index 21a6e96..25820d8 100644
#ifdef CONFIG_FUTEX
struct robust_list_head __user *robust_list;
#ifdef CONFIG_COMPAT
-@@ -1785,7 +1827,7 @@ struct task_struct {
+@@ -1801,7 +1842,7 @@ struct task_struct {
* Number of functions that haven't been traced
* because of depth overrun.
*/
@@ -106761,7 +130859,7 @@ index 21a6e96..25820d8 100644
/* Pause for the tracing */
atomic_t tracing_graph_pause;
#endif
-@@ -1814,22 +1856,89 @@ struct task_struct {
+@@ -1830,22 +1871,89 @@ struct task_struct {
unsigned long task_state_change;
#endif
int pagefault_disabled;
@@ -106861,7 +130959,7 @@ index 21a6e96..25820d8 100644
/* Future-safe accessor for struct task_struct's cpus_allowed. */
#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
-@@ -1911,7 +2020,7 @@ struct pid_namespace;
+@@ -1927,7 +2035,7 @@ struct pid_namespace;
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
struct pid_namespace *ns);
@@ -106870,7 +130968,7 @@ index 21a6e96..25820d8 100644
{
return tsk->pid;
}
-@@ -2273,6 +2382,25 @@ extern u64 sched_clock_cpu(int cpu);
+@@ -2289,6 +2397,25 @@ extern u64 sched_clock_cpu(int cpu);
extern void sched_clock_init(void);
@@ -106896,7 +130994,7 @@ index 21a6e96..25820d8 100644
#ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
static inline void sched_clock_tick(void)
{
-@@ -2401,7 +2529,9 @@ extern void set_curr_task(int cpu, struct task_struct *p);
+@@ -2417,7 +2544,9 @@ extern void set_curr_task(int cpu, struct task_struct *p);
void yield(void);
union thread_union {
@@ -106906,7 +131004,7 @@ index 21a6e96..25820d8 100644
unsigned long stack[THREAD_SIZE/sizeof(long)];
};
-@@ -2434,6 +2564,7 @@ extern struct pid_namespace init_pid_ns;
+@@ -2450,6 +2579,7 @@ extern struct pid_namespace init_pid_ns;
*/
extern struct task_struct *find_task_by_vpid(pid_t nr);
@@ -106914,7 +131012,7 @@ index 21a6e96..25820d8 100644
extern struct task_struct *find_task_by_pid_ns(pid_t nr,
struct pid_namespace *ns);
-@@ -2465,7 +2596,7 @@ extern void proc_caches_init(void);
+@@ -2481,7 +2611,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);
@@ -106923,7 +131021,7 @@ index 21a6e96..25820d8 100644
static inline int kernel_dequeue_signal(siginfo_t *info)
{
-@@ -2619,7 +2750,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
+@@ -2635,7 +2765,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
extern void exit_itimers(struct signal_struct *);
extern void flush_itimer_signals(void);
@@ -106932,7 +131030,7 @@ index 21a6e96..25820d8 100644
extern int do_execve(struct filename *,
const char __user * const __user *,
-@@ -2734,11 +2865,13 @@ static inline int thread_group_empty(struct task_struct *p)
+@@ -2750,11 +2880,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.
*/
@@ -106946,7 +131044,7 @@ index 21a6e96..25820d8 100644
static inline void task_unlock(struct task_struct *p)
{
spin_unlock(&p->alloc_lock);
-@@ -2824,9 +2957,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
+@@ -2840,9 +2972,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)
@@ -106984,7 +131082,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 2f4c1f7..5bc05d7 100644
+index 4824a4c..1fe498a 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -28,6 +28,7 @@
@@ -107136,7 +131234,7 @@ index e058210..386666a 100644
{
spin_unlock(&sl->lock);
diff --git a/include/linux/shm.h b/include/linux/shm.h
-index 6fb8016..2cf60e7 100644
+index 04e8818..af85805 100644
--- a/include/linux/shm.h
+++ b/include/linux/shm.h
@@ -22,7 +22,11 @@ struct shmid_kernel /* private to the kernel */
@@ -107166,10 +131264,10 @@ index 92557bb..53fa513 100644
static inline void disallow_signal(int sig)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index 4fde618..6d6edb3 100644
+index d3fcd45..67f86da 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -809,7 +809,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
+@@ -889,7 +889,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
int node);
struct sk_buff *__build_skb(void *data, unsigned int frag_size);
struct sk_buff *build_skb(void *data, unsigned int frag_size);
@@ -107178,7 +131276,7 @@ index 4fde618..6d6edb3 100644
gfp_t priority)
{
return __alloc_skb(size, priority, 0, NUMA_NO_NODE);
-@@ -2104,7 +2104,7 @@ static inline int skb_checksum_start_offset(const struct sk_buff *skb)
+@@ -2186,7 +2186,7 @@ static inline int skb_checksum_start_offset(const struct sk_buff *skb)
return skb->csum_start - skb_headroom(skb);
}
@@ -107187,7 +131285,7 @@ index 4fde618..6d6edb3 100644
{
return skb_transport_header(skb) - skb->data;
}
-@@ -2119,7 +2119,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
+@@ -2201,7 +2201,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
return skb->inner_transport_header - skb->inner_network_header;
}
@@ -107196,7 +131294,7 @@ index 4fde618..6d6edb3 100644
{
return skb_network_header(skb) - skb->data;
}
-@@ -2179,7 +2179,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len)
+@@ -2261,7 +2261,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
@@ -107205,7 +131303,7 @@ index 4fde618..6d6edb3 100644
#endif
int ___pskb_trim(struct sk_buff *skb, unsigned int len);
-@@ -2836,9 +2836,9 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
+@@ -2924,9 +2924,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);
@@ -107217,7 +131315,7 @@ index 4fde618..6d6edb3 100644
struct msghdr *msg, int size)
{
return skb_copy_datagram_iter(from, offset, &msg->msg_iter, size);
-@@ -3367,6 +3367,9 @@ static inline void nf_reset(struct sk_buff *skb)
+@@ -3455,6 +3455,9 @@ static inline void nf_reset(struct sk_buff *skb)
nf_bridge_put(skb->nf_bridge);
skb->nf_bridge = NULL;
#endif
@@ -107228,7 +131326,7 @@ index 4fde618..6d6edb3 100644
static inline void nf_reset_trace(struct sk_buff *skb)
diff --git a/include/linux/slab.h b/include/linux/slab.h
-index 2037a86..58fd323 100644
+index 3627d5c..f3bd455 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -15,14 +15,29 @@
@@ -107261,7 +131359,7 @@ index 2037a86..58fd323 100644
#define SLAB_HWCACHE_ALIGN 0x00002000UL /* Align objs on cache lines */
#define SLAB_CACHE_DMA 0x00004000UL /* Use GFP_DMA memory */
#define SLAB_STORE_USER 0x00010000UL /* DEBUG: Store the last owner for bug hunting */
-@@ -98,10 +113,13 @@
+@@ -103,10 +118,13 @@
* ZERO_SIZE_PTR can be passed to kfree though in the same way that NULL can.
* Both make kfree a no-op.
*/
@@ -107278,7 +131376,7 @@ index 2037a86..58fd323 100644
#include <linux/kmemleak.h>
#include <linux/kasan.h>
-@@ -143,6 +161,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t);
+@@ -148,6 +166,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t);
void kfree(const void *);
void kzfree(const void *);
size_t ksize(const void *);
@@ -107287,7 +131385,7 @@ index 2037a86..58fd323 100644
/*
* Some archs want to perform DMA into kmalloc caches and need a guaranteed
-@@ -253,6 +273,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -258,6 +278,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
#endif
@@ -107298,7 +131396,7 @@ index 2037a86..58fd323 100644
/*
* Figure out which kmalloc slab an allocation of a certain size
* belongs to.
-@@ -261,7 +285,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -266,7 +290,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
* 2 = 129 .. 192 bytes
* n = 2^(n-1)+1 .. 2^n
*/
@@ -107307,7 +131405,7 @@ index 2037a86..58fd323 100644
{
if (!size)
return 0;
-@@ -304,7 +328,7 @@ static __always_inline int kmalloc_index(size_t size)
+@@ -309,7 +333,7 @@ static __always_inline int kmalloc_index(size_t size)
}
#endif /* !CONFIG_SLOB */
@@ -107316,7 +131414,7 @@ index 2037a86..58fd323 100644
void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags) __assume_slab_alignment;
void kmem_cache_free(struct kmem_cache *, void *);
-@@ -319,10 +343,10 @@ void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **);
+@@ -324,10 +348,10 @@ void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **);
int kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **);
#ifdef CONFIG_NUMA
@@ -107330,7 +131428,7 @@ index 2037a86..58fd323 100644
return __kmalloc(size, flags);
}
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
-index 33d0490..70a6313 100644
+index cf139d3fa..b3b3358 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -40,7 +40,7 @@ struct kmem_cache {
@@ -107362,7 +131460,7 @@ index 33d0490..70a6313 100644
/*
* If debugging is enabled, then the allocator can add additional
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
-index 3388511..6252f90 100644
+index b7e57927..a8087e0 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -74,7 +74,7 @@ struct kmem_cache {
@@ -107389,13 +131487,13 @@ index c441407..f487b83 100644
/*
* Callback to arch code if there's nosmp or maxcpus=0 on the
diff --git a/include/linux/sock_diag.h b/include/linux/sock_diag.h
-index fddebc6..6f0ae39 100644
+index 4018b48..68baf26 100644
--- a/include/linux/sock_diag.h
+++ b/include/linux/sock_diag.h
-@@ -15,7 +15,7 @@ struct sock_diag_handler {
- __u8 family;
+@@ -16,7 +16,7 @@ struct sock_diag_handler {
int (*dump)(struct sk_buff *skb, struct nlmsghdr *nlh);
int (*get_info)(struct sk_buff *skb, struct sock *sk);
+ int (*destroy)(struct sk_buff *skb, struct nlmsghdr *nlh);
-};
+} __do_const;
@@ -107581,11 +131679,11 @@ index cc0fc71..b70c6b1 100644
/*
* Mode for mapping cpus to pools.
diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
-index f869807..6ab4834 100644
+index 5322fea..b8ca311 100644
--- a/include/linux/sunrpc/svc_rdma.h
+++ b/include/linux/sunrpc/svc_rdma.h
-@@ -53,15 +53,15 @@ extern unsigned int svcrdma_ord;
- extern unsigned int svcrdma_max_requests;
+@@ -54,15 +54,15 @@ extern unsigned int svcrdma_max_requests;
+ extern unsigned int svcrdma_max_bc_requests;
extern unsigned int svcrdma_max_req_size;
-extern atomic_t rdma_stat_recv;
@@ -107610,10 +131708,10 @@ index f869807..6ab4834 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 8d71d65..f79586e 100644
+index c00f53a..8802c3b 100644
--- a/include/linux/sunrpc/svcauth.h
+++ b/include/linux/sunrpc/svcauth.h
-@@ -120,7 +120,7 @@ struct auth_ops {
+@@ -127,7 +127,7 @@ struct auth_ops {
int (*release)(struct svc_rqst *rq);
void (*domain_release)(struct auth_domain *);
int (*set_client)(struct svc_rqst *rq);
@@ -107663,10 +131761,10 @@ index 5c3a5f3..84a8bef 100644
#else
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
-index e7a018e..49f8b17 100644
+index 017fced..d4a9fc9 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
-@@ -60,7 +60,8 @@ extern void
+@@ -63,7 +63,8 @@ extern void
extern void
swiotlb_free_coherent(struct device *hwdev, size_t size,
@@ -107677,7 +131775,7 @@ index e7a018e..49f8b17 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 c2b66a2..888e225 100644
+index 185815c..9901529 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -102,7 +102,12 @@ union bpf_attr;
@@ -107694,7 +131792,30 @@ index c2b66a2..888e225 100644
#define __SC_CAST(t, a) (t) a
#define __SC_ARGS(t, a) a
#define __SC_TEST(t, a) (void)BUILD_BUG_ON_ZERO(!__TYPE_IS_LL(t) && sizeof(t) > sizeof(long))
-@@ -384,11 +389,11 @@ asmlinkage long sys_sync(void);
+@@ -192,17 +197,18 @@ extern struct trace_event_functions exit_syscall_print_funcs;
+
+ #define __PROTECT(...) asmlinkage_protect(__VA_ARGS__)
+ #define __SYSCALL_DEFINEx(x, name, ...) \
+- asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \
+- __attribute__((alias(__stringify(SyS##name)))); \
+ static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
+- asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
+- asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
++ static inline asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
+ { \
+ long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \
+ __MAP(x,__SC_TEST,__VA_ARGS__); \
+ __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
+ return ret; \
+ } \
++ asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \
++ { \
++ return SyS##name(__MAP(x,__SC_ARGS,__VA_ARGS__)); \
++ } \
+ static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
+
+ asmlinkage long sys32_quotactl(unsigned int cmd, const char __user *special,
+@@ -384,11 +390,11 @@ asmlinkage long sys_sync(void);
asmlinkage long sys_fsync(unsigned int fd);
asmlinkage long sys_fdatasync(unsigned int fd);
asmlinkage long sys_bdflush(int func, long data);
@@ -107710,7 +131831,7 @@ index c2b66a2..888e225 100644
asmlinkage long sys_truncate(const char __user *path, long length);
asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length);
asmlinkage long sys_stat(const char __user *filename,
-@@ -604,7 +609,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *);
+@@ -604,7 +610,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *);
asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *);
asmlinkage long sys_send(int, void __user *, size_t, unsigned);
asmlinkage long sys_sendto(int, void __user *, size_t, unsigned,
@@ -107719,7 +131840,7 @@ index c2b66a2..888e225 100644
asmlinkage long sys_sendmsg(int fd, struct user_msghdr __user *msg, unsigned flags);
asmlinkage long sys_sendmmsg(int fd, struct mmsghdr __user *msg,
unsigned int vlen, unsigned flags);
-@@ -663,10 +668,10 @@ asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
+@@ -663,10 +669,10 @@ asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
asmlinkage long sys_semget(key_t key, int nsems, int semflg);
asmlinkage long sys_semop(int semid, struct sembuf __user *sops,
@@ -107732,7 +131853,16 @@ index c2b66a2..888e225 100644
const struct timespec __user *timeout);
asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg);
asmlinkage long sys_shmget(key_t key, size_t size, int flag);
-@@ -879,7 +884,7 @@ asmlinkage long sys_seccomp(unsigned int op, unsigned int flags,
+@@ -700,7 +706,7 @@ asmlinkage long sys_sysfs(int option,
+ unsigned long arg1, unsigned long arg2);
+ asmlinkage long sys_syslog(int type, char __user *buf, int len);
+ asmlinkage long sys_uselib(const char __user *library);
+-asmlinkage long sys_ni_syscall(void);
++asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
+ asmlinkage long sys_ptrace(long request, long pid, unsigned long addr,
+ unsigned long data);
+
+@@ -879,7 +885,7 @@ asmlinkage long sys_seccomp(unsigned int op, unsigned int flags,
const char __user *uargs);
asmlinkage long sys_getrandom(char __user *buf, size_t count,
unsigned int flags);
@@ -107890,10 +132020,10 @@ index b386361..cc87028 100644
unsigned int keepalive_intvl; /* time interval between keep alive probes */
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
-index ff307b5..f1a4468 100644
+index b4c2a48..0a13f65 100644
--- a/include/linux/thread_info.h
+++ b/include/linux/thread_info.h
-@@ -145,6 +145,13 @@ static inline bool test_and_clear_restore_sigmask(void)
+@@ -146,6 +146,13 @@ static inline bool test_and_clear_restore_sigmask(void)
#error "no set_restore_sigmask() provided and default one won't work"
#endif
@@ -107908,7 +132038,7 @@ index ff307b5..f1a4468 100644
#endif /* _LINUX_THREAD_INFO_H */
diff --git a/include/linux/tty.h b/include/linux/tty.h
-index 3bf03b6..340cab9 100644
+index 19199c2..e16a361 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -225,7 +225,7 @@ struct tty_port {
@@ -107929,7 +132059,7 @@ index 3bf03b6..340cab9 100644
/* Each of a tty's open files has private_data pointing to tty_file_private */
struct tty_file_private {
-@@ -575,7 +575,7 @@ extern int tty_port_open(struct tty_port *port,
+@@ -570,7 +570,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)
{
@@ -108005,17 +132135,18 @@ index 70dd3df..c61727f 100644
struct list_head {
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
-index 558129a..0c26e08 100644
+index 3495578..f479218 100644
--- a/include/linux/uaccess.h
+++ b/include/linux/uaccess.h
-@@ -109,6 +109,6 @@ extern long strncpy_from_unsafe(char *dst, const void *unsafe_addr, long count);
+@@ -109,7 +109,7 @@ extern long strncpy_from_unsafe(char *dst, const void *unsafe_addr, long count);
* Returns 0 on success, or -EFAULT.
*/
#define probe_kernel_address(addr, retval) \
- probe_kernel_read(&retval, addr, sizeof(retval))
+ probe_kernel_read(&(retval), addr, sizeof(retval))
- #endif /* __LINUX_UACCESS_H__ */
+ #ifndef user_access_begin
+ #define user_access_begin() do { } while (0)
diff --git a/include/linux/uidgid.h b/include/linux/uidgid.h
index 0383552..a0125dd 100644
--- a/include/linux/uidgid.h
@@ -108095,7 +132226,7 @@ index 99c1b4d..562e6f3 100644
static inline void put_unaligned_le16(u16 val, void *p)
diff --git a/include/linux/usb.h b/include/linux/usb.h
-index b79925d..67cf5d4 100644
+index 89533ba..78c419a 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -367,7 +367,7 @@ struct usb_bus {
@@ -108107,7 +132238,7 @@ index b79925d..67cf5d4 100644
int devnum_next; /* Next open device number in
* round-robin allocation */
-@@ -600,7 +600,7 @@ struct usb_device {
+@@ -598,7 +598,7 @@ struct usb_device {
int maxchild;
u32 quirks;
@@ -108116,7 +132247,7 @@ index b79925d..67cf5d4 100644
unsigned long active_duration;
-@@ -1793,10 +1793,10 @@ void usb_sg_wait(struct usb_sg_request *io);
+@@ -1791,10 +1791,10 @@ void usb_sg_wait(struct usb_sg_request *io);
/* NOTE: these are not the standard USB_ENDPOINT_XFER_* values!! */
/* (yet ... they're the values used by usbfs) */
@@ -108132,7 +132263,7 @@ index b79925d..67cf5d4 100644
#define usb_pipein(pipe) ((pipe) & USB_DIR_IN)
#define usb_pipeout(pipe) (!usb_pipein(pipe))
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
-index f89c24b..843dfb8 100644
+index 4dcf844..03630b4 100644
--- a/include/linux/usb/hcd.h
+++ b/include/linux/usb/hcd.h
@@ -23,6 +23,7 @@
@@ -108144,7 +132275,7 @@ index f89c24b..843dfb8 100644
#define MAX_TOPO_LEVEL 6
diff --git a/include/linux/usb/renesas_usbhs.h b/include/linux/usb/renesas_usbhs.h
-index bfb7472..b308c8d 100644
+index 4db191f..188ca98 100644
--- a/include/linux/usb/renesas_usbhs.h
+++ b/include/linux/usb/renesas_usbhs.h
@@ -39,7 +39,7 @@ enum {
@@ -108259,10 +132390,10 @@ index 69e1d4a1..566fa52 100644
#endif
#endif /* _LINUX_VGA_SWITCHEROO_H_ */
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
-index 3bff87a..66d8171 100644
+index d1f1d33..10415f2 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
-@@ -18,6 +18,14 @@ struct vm_area_struct; /* vma defining user mapping in mm_types.h */
+@@ -17,6 +17,14 @@ struct vm_area_struct; /* vma defining user mapping in mm_types.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 */
@@ -108277,7 +132408,7 @@ index 3bff87a..66d8171 100644
/* bits [20..32] reserved for arch specific ioremap internals */
/*
-@@ -67,6 +75,7 @@ static inline void vmalloc_init(void)
+@@ -66,6 +74,7 @@ static inline void vmalloc_init(void)
#endif
extern void *vmalloc(unsigned long size);
@@ -108285,7 +132416,7 @@ index 3bff87a..66d8171 100644
extern void *vzalloc(unsigned long size);
extern void *vmalloc_user(unsigned long size);
extern void *vmalloc_node(unsigned long size, int node);
-@@ -86,6 +95,10 @@ extern void *vmap(struct page **pages, unsigned int count,
+@@ -85,6 +94,10 @@ extern void *vmap(struct page **pages, unsigned int count,
unsigned long flags, pgprot_t prot);
extern void vunmap(const void *addr);
@@ -108296,7 +132427,7 @@ index 3bff87a..66d8171 100644
extern int remap_vmalloc_range_partial(struct vm_area_struct *vma,
unsigned long uaddr, void *kaddr,
unsigned long size);
-@@ -150,7 +163,7 @@ extern void free_vm_area(struct vm_struct *area);
+@@ -149,7 +162,7 @@ extern void free_vm_area(struct vm_struct *area);
/* for /dev/kmem */
extern long vread(char *buf, char *addr, unsigned long count);
@@ -108306,7 +132437,7 @@ index 3bff87a..66d8171 100644
/*
* Internals. Dont't use..
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
-index 3e5d907..037e86c 100644
+index 73fae8c..61f415d 100644
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
@@ -108,18 +108,18 @@ static inline void vm_events_fold_cpu(int cpu)
@@ -108355,7 +132486,7 @@ index 3e5d907..037e86c 100644
#ifdef CONFIG_SMP
int cpu;
-@@ -212,14 +212,14 @@ static inline void __mod_zone_page_state(struct zone *zone,
+@@ -213,14 +213,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)
{
@@ -108390,10 +132521,10 @@ index d0b5ca5..c13529b 100644
spin_unlock(&inode->i_lock);
}
diff --git a/include/linux/xattr.h b/include/linux/xattr.h
-index 89474b9..31b5dcb 100644
+index 4457541..cb0d355 100644
--- a/include/linux/xattr.h
+++ b/include/linux/xattr.h
-@@ -30,7 +30,7 @@ struct xattr_handler {
+@@ -34,7 +34,7 @@ struct xattr_handler {
int (*set)(const struct xattr_handler *, struct dentry *dentry,
const char *name, const void *buffer, size_t size,
int flags);
@@ -108402,7 +132533,7 @@ index 89474b9..31b5dcb 100644
const char *xattr_full_name(const struct xattr_handler *, const char *);
-@@ -41,6 +41,9 @@ struct xattr {
+@@ -45,6 +45,9 @@ struct xattr {
};
ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t);
@@ -108434,7 +132565,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 acbcd2f..c3abe84 100644
+index eeabf20..817154b 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -74,7 +74,7 @@ struct v4l2_file_operations {
@@ -108486,10 +132617,10 @@ index 9b4c418..f3ff431 100644
#define UNIXCB(skb) (*(struct unix_skb_parms *)&((skb)->cb))
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
-index 5289929..b4c41b3 100644
+index 5ee3c68..54f883a 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
-@@ -613,7 +613,7 @@ struct l2cap_ops {
+@@ -619,7 +619,7 @@ struct l2cap_ops {
struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan,
unsigned long hdr_len,
unsigned long len, int nb);
@@ -108499,10 +132630,10 @@ index 5289929..b4c41b3 100644
struct l2cap_conn {
struct hci_conn *hcon;
diff --git a/include/net/bonding.h b/include/net/bonding.h
-index 93abe5f..65b0405 100644
+index 791800d..db75e5f 100644
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
-@@ -669,7 +669,7 @@ extern struct rtnl_link_ops bond_link_ops;
+@@ -702,7 +702,7 @@ extern struct rtnl_link_ops bond_link_ops;
static inline void bond_tx_drop(struct net_device *dev, struct sk_buff *skb)
{
@@ -108535,6 +132666,55 @@ index f2ae33d..c457cf0 100644
struct list_head list;
/* Protects from simultaneous access to first_req list */
spinlock_t info_list_lock;
+diff --git a/include/net/cfg80211-wext.h b/include/net/cfg80211-wext.h
+index 25baddc..f9a1374 100644
+--- a/include/net/cfg80211-wext.h
++++ b/include/net/cfg80211-wext.h
+@@ -22,34 +22,34 @@
+ */
+ int cfg80211_wext_giwname(struct net_device *dev,
+ struct iw_request_info *info,
+- char *name, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
+- u32 *mode, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info,
+- u32 *mode, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_siwscan(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_giwscan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_giwrange(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_siwrts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_giwrts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_siwfrag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *frag, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_giwfrag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *frag, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_giwretry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *retry, char *extra);
++ union iwreq_data *wrqu, char *extra);
+
+ #endif /* __NET_CFG80211_WEXT_H */
diff --git a/include/net/cfg802154.h b/include/net/cfg802154.h
index 171cd76..15666d6 100644
--- a/include/net/cfg802154.h
@@ -108548,6 +132728,27 @@ index 171cd76..15666d6 100644
u8 min_be;
u8 max_be;
+diff --git a/include/net/fib_rules.h b/include/net/fib_rules.h
+index 59160de..f4dbdab 100644
+--- a/include/net/fib_rules.h
++++ b/include/net/fib_rules.h
+@@ -7,6 +7,7 @@
+ #include <linux/fib_rules.h>
+ #include <net/flow.h>
+ #include <net/rtnetlink.h>
++#include <net/ip6_fib.h>
+
+ struct fib_rule {
+ struct list_head list;
+@@ -33,7 +34,7 @@ struct fib_rule {
+ };
+
+ struct fib_lookup_arg {
+- void *lookup_ptr;
++ pol_lookup_t lookup_ptr;
+ void *result;
+ struct fib_rule *rule;
+ int flags;
diff --git a/include/net/flow.h b/include/net/flow.h
index 83969ee..ee0611d 100644
--- a/include/net/flow.h
@@ -108562,10 +132763,10 @@ index 83969ee..ee0611d 100644
__u32 __get_hash_from_flowi6(const struct flowi6 *fl6, struct flow_keys *keys);
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
-index 1b6b6dc..f6e691b 100644
+index 43c0e77..9f17774 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
-@@ -128,7 +128,7 @@ struct genl_ops {
+@@ -130,7 +130,7 @@ struct genl_ops {
u8 cmd;
u8 internal_flags;
u8 flags;
@@ -108601,10 +132802,10 @@ index 49dcad4..6d2c708 100644
/** inet_connection_sock - INET connection oriented sock
*
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
-index 625bdf9..5fd982c 100644
+index 012b1f9..6467f81 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
-@@ -43,7 +43,7 @@
+@@ -44,7 +44,7 @@
struct ip_options {
__be32 faddr;
__be32 nexthop;
@@ -108640,7 +132841,7 @@ index 1a98f1c..2a44de6 100644
static inline void ip_select_ident_segs(struct net *net, struct sk_buff *skb,
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
-index 3f98233..3d46645 100644
+index 4079fc1..cb82cad 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -174,7 +174,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh);
@@ -108689,10 +132890,10 @@ index 0816c87..b86fca5 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 9a5c9f0..929c0e3 100644
+index 6570f379..91cd2cb 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
-@@ -756,7 +756,7 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb,
+@@ -771,7 +771,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.
*/
@@ -108713,6 +132914,67 @@ index 8d4f588..2e37ad2 100644
#include <net/irda/irias_object.h>
#include <net/irda/ircomm_core.h>
+diff --git a/include/net/irda/irias_object.h b/include/net/irda/irias_object.h
+index 83f7808..a925cf8 100644
+--- a/include/net/irda/irias_object.h
++++ b/include/net/irda/irias_object.h
+@@ -83,7 +83,7 @@ void irias_insert_object(struct ias_object *obj);
+ int irias_delete_object(struct ias_object *obj);
+ int irias_delete_attrib(struct ias_object *obj, struct ias_attrib *attrib,
+ int cleanobject);
+-void __irias_delete_object(struct ias_object *obj);
++void __irias_delete_object(void *_obj);
+
+ void irias_add_integer_attrib(struct ias_object *obj, char *name, int value,
+ int user);
+diff --git a/include/net/irda/irlmp.h b/include/net/irda/irlmp.h
+index f132924..f80b01d 100644
+--- a/include/net/irda/irlmp.h
++++ b/include/net/irda/irlmp.h
+@@ -194,6 +194,7 @@ struct irlmp_cb {
+ /* Prototype declarations */
+ int irlmp_init(void);
+ void irlmp_cleanup(void);
++void irlmp_kfree(void *arg);
+ struct lsap_cb *irlmp_open_lsap(__u8 slsap, notify_t *notify, __u8 pid);
+ void irlmp_close_lsap( struct lsap_cb *self);
+
+diff --git a/include/net/irda/irlmp_event.h b/include/net/irda/irlmp_event.h
+index 9e4ec17..c3247bb 100644
+--- a/include/net/irda/irlmp_event.h
++++ b/include/net/irda/irlmp_event.h
+@@ -82,9 +82,9 @@ typedef enum {
+ extern const char *const irlmp_state[];
+ extern const char *const irlsap_state[];
+
+-void irlmp_watchdog_timer_expired(void *data);
+-void irlmp_discovery_timer_expired(void *data);
+-void irlmp_idle_timer_expired(void *data);
++void irlmp_watchdog_timer_expired(unsigned long data);
++void irlmp_discovery_timer_expired(unsigned long data);
++void irlmp_idle_timer_expired(unsigned long data);
+
+ void irlmp_do_lap_event(struct lap_cb *self, IRLMP_EVENT event,
+ struct sk_buff *skb);
+diff --git a/include/net/irda/timer.h b/include/net/irda/timer.h
+index cb2615c..8223ae7 100644
+--- a/include/net/irda/timer.h
++++ b/include/net/irda/timer.h
+@@ -72,12 +72,10 @@ struct lap_cb;
+
+ #define WATCHDOG_TIMEOUT (20*HZ) /* 20 sec */
+
+-typedef void (*TIMER_CALLBACK)(void *);
+-
+ static inline void irda_start_timer(struct timer_list *ptimer, int timeout,
+- void* data, TIMER_CALLBACK callback)
++ void* data, void (*callback)(unsigned long))
+ {
+- ptimer->function = (void (*)(unsigned long)) callback;
++ ptimer->function = callback;
+ ptimer->data = (unsigned long) data;
+
+ /* Set new value for timer (update or add timer).
diff --git a/include/net/iucv/af_iucv.h b/include/net/iucv/af_iucv.h
index 714cc9a..ea05f3e 100644
--- a/include/net/iucv/af_iucv.h
@@ -108794,10 +133056,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 760bc4d..84e4550 100644
+index 7c30faf..4c2d2d9 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -1497,7 +1497,7 @@ enum ieee80211_key_flags {
+@@ -1501,7 +1501,7 @@ enum ieee80211_key_flags {
* @iv_len: The IV length for this key type
*/
struct ieee80211_key_conf {
@@ -108806,7 +133068,7 @@ index 760bc4d..84e4550 100644
u32 cipher;
u8 icv_len;
u8 iv_len;
-@@ -5142,7 +5142,7 @@ struct ieee80211_tx_rate_control {
+@@ -5198,7 +5198,7 @@ struct ieee80211_tx_rate_control {
struct sk_buff *skb;
struct ieee80211_tx_rate reported_rate;
bool rts, short_preamble;
@@ -108815,7 +133077,7 @@ index 760bc4d..84e4550 100644
u32 rate_idx_mask;
u8 *rate_idx_mcs_mask;
bool bss;
-@@ -5179,7 +5179,7 @@ struct rate_control_ops {
+@@ -5235,7 +5235,7 @@ struct rate_control_ops {
void (*remove_sta_debugfs)(void *priv, void *priv_sta);
u32 (*get_expected_throughput)(void *priv_sta);
@@ -108856,7 +133118,7 @@ index 8b68384..48fe40e 100644
enum {
NEIGH_ARP_TABLE = 0,
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
-index 2dcea63..31d53ba 100644
+index 4089abc..bf8084a 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -53,7 +53,7 @@ struct net {
@@ -108868,7 +133130,7 @@ index 2dcea63..31d53ba 100644
struct list_head list; /* list of network namespaces */
struct list_head cleanup_list; /* namespaces on death row */
-@@ -138,8 +138,8 @@ struct net {
+@@ -141,8 +141,8 @@ struct net {
struct netns_mpls mpls;
#endif
struct sock *diag_nlsk;
@@ -108879,7 +133141,7 @@ index 2dcea63..31d53ba 100644
#include <linux/seq_file_net.h>
-@@ -274,7 +274,11 @@ static inline struct net *read_pnet(const possible_net_t *pnet)
+@@ -277,7 +277,11 @@ static inline struct net *read_pnet(const possible_net_t *pnet)
#define __net_init __init
#define __net_exit __exit_refok
#define __net_initdata __initdata
@@ -108891,7 +133153,7 @@ index 2dcea63..31d53ba 100644
#endif
int peernet2id_alloc(struct net *net, struct net *peer);
-@@ -289,7 +293,7 @@ struct pernet_operations {
+@@ -292,7 +296,7 @@ struct pernet_operations {
void (*exit_batch)(struct list_head *net_exit_list);
int *id;
size_t size;
@@ -108900,7 +133162,7 @@ index 2dcea63..31d53ba 100644
/*
* Use these carefully. If you implement a network device and it
-@@ -337,12 +341,12 @@ static inline void unregister_net_sysctl_table(struct ctl_table_header *header)
+@@ -340,12 +344,12 @@ static inline void unregister_net_sysctl_table(struct ctl_table_header *header)
static inline int rt_genid_ipv4(struct net *net)
{
@@ -108915,7 +133177,7 @@ index 2dcea63..31d53ba 100644
}
extern void (*__fib6_flush_trees)(struct net *net);
-@@ -369,12 +373,12 @@ static inline void rt_genid_bump_all(struct net *net)
+@@ -372,12 +376,12 @@ static inline void rt_genid_bump_all(struct net *net)
static inline int fnhe_genid(struct net *net)
{
@@ -108930,26 +133192,19 @@ index 2dcea63..31d53ba 100644
}
#endif /* __NET_NET_NAMESPACE_H */
-diff --git a/include/net/netfilter/nf_conntrack_core.h b/include/net/netfilter/nf_conntrack_core.h
-index 788ef58..62e17d1 100644
---- a/include/net/netfilter/nf_conntrack_core.h
-+++ b/include/net/netfilter/nf_conntrack_core.h
-@@ -79,12 +79,10 @@ print_tuple(struct seq_file *s, const struct nf_conntrack_tuple *tuple,
- const struct nf_conntrack_l3proto *l3proto,
- const struct nf_conntrack_l4proto *proto);
-
--#ifdef CONFIG_LOCKDEP
--# define CONNTRACK_LOCKS 8
--#else
--# define CONNTRACK_LOCKS 1024
--#endif
-+#define CONNTRACK_LOCKS 1024
-+
- extern spinlock_t nf_conntrack_locks[CONNTRACK_LOCKS];
-+void nf_conntrack_lock(spinlock_t *lock);
-
- extern spinlock_t nf_conntrack_expect_lock;
-
+diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
+index fde4068..d11e09b 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)
+
+ struct kernel_param;
+
+-int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp);
++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
--- a/include/net/netlink.h
@@ -108990,10 +133245,10 @@ index 723b61c..4386367 100644
};
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
-index c68926b..106c147 100644
+index 2b7907a..3de08ec 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
-@@ -93,7 +93,7 @@ struct netns_ipv4 {
+@@ -100,7 +100,7 @@ struct netns_ipv4 {
struct ping_group_range ping_group_range;
@@ -109002,7 +133257,7 @@ index c68926b..106c147 100644
#ifdef CONFIG_SYSCTL
unsigned long *sysctl_local_reserved_ports;
-@@ -107,6 +107,6 @@ struct netns_ipv4 {
+@@ -114,6 +114,6 @@ struct netns_ipv4 {
struct fib_rules_ops *mr_rules_ops;
#endif
#endif
@@ -109052,7 +133307,7 @@ index ac80cb4..ec1ed09 100644
struct pingfakehdr {
diff --git a/include/net/protocol.h b/include/net/protocol.h
-index d6fcc1f..ca277058 100644
+index da689f5..3b3d55b 100644
--- a/include/net/protocol.h
+++ b/include/net/protocol.h
@@ -49,7 +49,7 @@ struct net_protocol {
@@ -109124,10 +133379,10 @@ index 487ef34..d457f98 100644
/* Get the size of a DATA chunk payload. */
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
-index eea9bde..1d4ec5d 100644
+index 205630b..23a35dc 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
-@@ -513,7 +513,7 @@ struct sctp_pf {
+@@ -512,7 +512,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;
@@ -109136,7 +133391,7 @@ index eea9bde..1d4ec5d 100644
/* Structure to track chunk fragments that have been acked, but peer
-@@ -1099,7 +1099,7 @@ int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
+@@ -1098,7 +1098,7 @@ int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
const struct sctp_bind_addr *src,
gfp_t gfp);
int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
@@ -109189,10 +133444,10 @@ 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 14d3c07..c273ad8 100644
+index f5ea148..196f663 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
-@@ -202,7 +202,7 @@ struct sock_common {
+@@ -188,7 +188,7 @@ struct sock_common {
struct in6_addr skc_v6_rcv_saddr;
#endif
@@ -109201,7 +133456,7 @@ index 14d3c07..c273ad8 100644
/* following fields are padding to force
* offset(struct sock, sk_refcnt) == 128 on 64bit arches
-@@ -379,7 +379,7 @@ struct sock {
+@@ -364,7 +364,7 @@ struct sock {
unsigned int sk_napi_id;
unsigned int sk_ll_usec;
#endif
@@ -109210,25 +133465,25 @@ index 14d3c07..c273ad8 100644
int sk_rcvbuf;
struct sk_filter __rcu *sk_filter;
-@@ -1067,7 +1067,7 @@ struct proto {
- void (*destroy_cgroup)(struct mem_cgroup *memcg);
- struct cg_proto *(*proto_cgroup)(struct mem_cgroup *memcg);
+@@ -1037,7 +1037,7 @@ struct proto {
+ atomic_t socks;
#endif
+ int (*diag_destroy)(struct sock *sk, int err);
-};
+} __randomize_layout;
int proto_register(struct proto *prot, int alloc_slab);
void proto_unregister(struct proto *prot);
-@@ -1207,7 +1207,7 @@ static inline void memcg_memory_allocated_sub(struct cg_proto *prot,
- page_counter_uncharge(&prot->memory_allocated, amt);
+@@ -1124,7 +1124,7 @@ static inline long sk_prot_mem_limits(const struct sock *sk, int index)
+ return sk->sk_prot->sysctl_mem[index];
}
-static inline long
+static inline long __intentional_overflow(-1)
sk_memory_allocated(const struct sock *sk)
{
- struct proto *prot = sk->sk_prot;
-@@ -1799,7 +1799,7 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags)
+ return atomic_long_read(sk->sk_prot->memory_allocated);
+@@ -1683,7 +1683,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,
@@ -109237,7 +133492,7 @@ index 14d3c07..c273ad8 100644
int copy, int offset)
{
if (skb->ip_summed == CHECKSUM_NONE) {
-@@ -2050,7 +2050,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
+@@ -1928,7 +1928,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
}
}
@@ -109246,7 +133501,7 @@ index 14d3c07..c273ad8 100644
bool force_schedule);
/**
-@@ -2126,7 +2126,7 @@ struct sock_skb_cb {
+@@ -2004,7 +2004,7 @@ struct sock_skb_cb {
static inline void
sock_skb_set_dropcount(const struct sock *sk, struct sk_buff *skb)
{
@@ -109256,10 +133511,10 @@ index 14d3c07..c273ad8 100644
void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
diff --git a/include/net/tcp.h b/include/net/tcp.h
-index 414d822..f99ea64 100644
+index ae6468f..eaf0ae6 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
-@@ -550,7 +550,7 @@ void tcp_retransmit_timer(struct sock *sk);
+@@ -548,7 +548,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);
@@ -109268,7 +133523,7 @@ index 414d822..f99ea64 100644
void tcp_send_probe0(struct sock *);
void tcp_send_partial(struct sock *);
-@@ -736,8 +736,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
+@@ -734,8 +734,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 {
@@ -109279,7 +133534,7 @@ index 414d822..f99ea64 100644
union {
/* Note : tcp_tw_isn is used in input path only
* (isn chosen by tcp_timewait_state_process())
-@@ -765,7 +765,7 @@ struct tcp_skb_cb {
+@@ -763,7 +763,7 @@ struct tcp_skb_cb {
__u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */
/* 1 byte hole */
@@ -109363,6 +133618,32 @@ index d6f6e50..6fea29e 100644
#endif
static __inline__
+diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h
+index 92a7d85..1779570 100644
+--- a/include/rdma/ib_cm.h
++++ b/include/rdma/ib_cm.h
+@@ -486,8 +486,8 @@ int ib_cm_notify(struct ib_cm_id *cm_id, enum ib_event_type event);
+ * @private_data_len: Size of the private data buffer, in bytes.
+ */
+ int ib_send_cm_rej(struct ib_cm_id *cm_id,
+- enum ib_cm_rej_reason reason,
+- void *ari,
++ int reason,
++ const void *ari,
+ u8 ari_length,
+ const void *private_data,
+ u8 private_data_len);
+@@ -558,8 +558,8 @@ int ib_cm_init_qp_attr(struct ib_cm_id *cm_id,
+ * @private_data_len: Size of the private data buffer, in bytes.
+ */
+ int ib_send_cm_apr(struct ib_cm_id *cm_id,
+- enum ib_cm_apr_status status,
+- void *info,
++ int status,
++ const void *info,
+ u8 info_length,
+ const void *private_data,
+ u8 private_data_len);
diff --git a/include/rdma/iw_cm.h b/include/rdma/iw_cm.h
index 036bd27..c0d7f17 100644
--- a/include/rdma/iw_cm.h
@@ -109398,10 +133679,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 fe89d7c..cf05af3 100644
+index ba93c0f..90acd4d 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
-@@ -186,9 +186,9 @@ struct scsi_device {
+@@ -187,9 +187,9 @@ struct scsi_device {
unsigned int max_device_blocked; /* what device_blocked counts down from */
#define SCSI_DEFAULT_DEVICE_BLOCKED 3
@@ -109455,7 +133736,7 @@ index 3afec70..b196b43 100644
int pack_id; /* [i->o] unused internally (normally) */
void __user * usr_ptr; /* [i->o] unused internally */
diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
-index fa1d055..3647940 100644
+index c0abcdc..1b07286 100644
--- a/include/sound/compress_driver.h
+++ b/include/sound/compress_driver.h
@@ -130,7 +130,7 @@ struct snd_compr_ops {
@@ -109467,11 +133748,67 @@ index fa1d055..3647940 100644
/**
* struct snd_compr: Compressed device
+diff --git a/include/sound/control.h b/include/sound/control.h
+index 21d047f..9573462 100644
+--- a/include/sound/control.h
++++ b/include/sound/control.h
+@@ -214,8 +214,10 @@ int _snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave,
+ * Return: Zero if successful or a negative error code.
+ */
+ static inline int
+-snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave)
++snd_ctl_add_slave(void *_master, struct snd_kcontrol *slave)
+ {
++ struct snd_kcontrol *master = _master;
++
+ return _snd_ctl_add_slave(master, slave, 0);
+ }
+
+diff --git a/include/sound/pcm.h b/include/sound/pcm.h
+index b0be092..0e82b4f 100644
+--- a/include/sound/pcm.h
++++ b/include/sound/pcm.h
+@@ -1075,7 +1075,7 @@ int snd_pcm_update_state(struct snd_pcm_substream *substream,
+ struct snd_pcm_runtime *runtime);
+ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream);
+ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_uframes_t new_hw_ptr);
+-void snd_pcm_period_elapsed(struct snd_pcm_substream *substream);
++void snd_pcm_period_elapsed(void *_substream);
+ snd_pcm_sframes_t snd_pcm_lib_write(struct snd_pcm_substream *substream,
+ const void __user *buf,
+ snd_pcm_uframes_t frames);
+diff --git a/include/sound/rawmidi.h b/include/sound/rawmidi.h
+index f730b91..0079544 100644
+--- a/include/sound/rawmidi.h
++++ b/include/sound/rawmidi.h
+@@ -159,8 +159,7 @@ void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream,
+
+ /* callbacks */
+
+-int snd_rawmidi_receive(struct snd_rawmidi_substream *substream,
+- const unsigned char *buffer, int count);
++int snd_rawmidi_receive(void *_substream, const void *_buffer, int count);
+ int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream);
+ int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream,
+ unsigned char *buffer, int count);
+diff --git a/include/sound/seq_kernel.h b/include/sound/seq_kernel.h
+index feb58d4..9ce81c1 100644
+--- a/include/sound/seq_kernel.h
++++ b/include/sound/seq_kernel.h
+@@ -80,7 +80,7 @@ int snd_seq_kernel_client_ctl(int client, unsigned int cmd, void *arg);
+ #define SNDRV_SEQ_EXT_USRPTR 0x80000000
+ #define SNDRV_SEQ_EXT_CHAINED 0x40000000
+
+-typedef int (*snd_seq_dump_func_t)(void *ptr, void *buf, int count);
++typedef int (*snd_seq_dump_func_t)(void *ptr, const void *buf, int count);
+ int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, char *buf,
+ 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 fb955e6..6ff0ea9 100644
+index 7afb72c..1e67bd7 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
-@@ -905,7 +905,7 @@ struct snd_soc_codec_driver {
+@@ -920,7 +920,7 @@ struct snd_soc_codec_driver {
enum snd_soc_dapm_type, int);
bool ignore_pmdown_time; /* Doesn't benefit from pmdown delay */
@@ -109480,7 +133817,7 @@ index fb955e6..6ff0ea9 100644
/* SoC platform interface */
struct snd_soc_platform_driver {
-@@ -932,7 +932,7 @@ struct snd_soc_platform_driver {
+@@ -947,7 +947,7 @@ struct snd_soc_platform_driver {
const struct snd_compr_ops *compr_ops;
int (*bespoke_trigger)(struct snd_pcm_substream *, int);
@@ -109549,7 +133886,7 @@ index 0000000..fb634b7
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h
-index ff8f6c0..6b6bae3 100644
+index f95f25e..87ed448 100644
--- a/include/trace/events/irq.h
+++ b/include/trace/events/irq.h
@@ -51,7 +51,7 @@ SOFTIRQ_NAME_LIST
@@ -109857,20 +134194,19 @@ index 30f5362..8ed8ac9 100644
void *pmi_pal;
u8 *vbe_state_orig; /*
diff --git a/init/Kconfig b/init/Kconfig
-index 235c7a2..8dbf372 100644
+index 2232080..c5df76e 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -285,7 +285,8 @@ config FHANDLE
-
+@@ -286,6 +286,8 @@ config FHANDLE
config USELIB
bool "uselib syscall"
-- default y
+ def_bool ALPHA || M68K || SPARC || X86_32 || IA32_EMULATION
+ default n
+ depends on !GRKERNSEC
help
This option enables the uselib syscall, a system call used in the
dynamic linker from libc5 and earlier. glibc does not use this
-@@ -633,6 +634,7 @@ config RCU_FAST_NO_HZ
+@@ -628,6 +630,7 @@ config RCU_FAST_NO_HZ
config TREE_RCU_TRACE
def_bool RCU_TRACE && ( TREE_RCU || PREEMPT_RCU )
select DEBUG_FS
@@ -109878,7 +134214,7 @@ index 235c7a2..8dbf372 100644
help
This option provides tracing for the TREE_RCU and
PREEMPT_RCU implementations, permitting Makefile to
-@@ -1156,6 +1158,7 @@ endif # CGROUPS
+@@ -1132,6 +1135,7 @@ endif # CGROUPS
config CHECKPOINT_RESTORE
bool "Checkpoint/restore support" if EXPERT
select PROC_CHILDREN
@@ -109886,7 +134222,7 @@ index 235c7a2..8dbf372 100644
default n
help
Enables additional kernel features in a sake of checkpoint/restore.
-@@ -1701,7 +1704,7 @@ config SLUB_DEBUG
+@@ -1676,7 +1680,7 @@ config SLUB_DEBUG
config COMPAT_BRK
bool "Disable heap randomization"
@@ -109910,7 +134246,7 @@ index 7bc47ee..6da2dc7 100644
ifneq ($(CONFIG_BLK_DEV_INITRD),y)
obj-y += noinitramfs.o
diff --git a/init/do_mounts.c b/init/do_mounts.c
-index dea5de9..bbdbb5f 100644
+index dea5de9..497f996 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -363,11 +363,11 @@ static void __init get_fs_names(char *page)
@@ -109960,8 +134296,17 @@ index dea5de9..bbdbb5f 100644
}
static bool is_tmpfs;
+@@ -609,7 +609,7 @@ static struct dentry *rootfs_mount(struct file_system_type *fs_type,
+ int flags, const char *dev_name, void *data)
+ {
+ static unsigned long once;
+- void *fill = ramfs_fill_super;
++ int (*fill)(struct super_block *, void *, int) = ramfs_fill_super;
+
+ if (test_and_set_bit(0, &once))
+ return ERR_PTR(-ENODEV);
diff --git a/init/do_mounts.h b/init/do_mounts.h
-index f5b978a..69dbfe8 100644
+index 067af1d..b535547 100644
--- a/init/do_mounts.h
+++ b/init/do_mounts.h
@@ -15,15 +15,15 @@ extern int root_mountflags;
@@ -109993,7 +134338,7 @@ index f5b978a..69dbfe8 100644
if (!S_ISBLK(stat.st_mode))
return 0;
diff --git a/init/do_mounts_initrd.c b/init/do_mounts_initrd.c
-index 3e0878e..8a9d7a0 100644
+index a1000ca..3137150 100644
--- a/init/do_mounts_initrd.c
+++ b/init/do_mounts_initrd.c
@@ -37,13 +37,13 @@ static int init_linuxrc(struct subprocess_info *info, struct cred *new)
@@ -110064,19 +134409,19 @@ index 3e0878e..8a9d7a0 100644
printk(KERN_NOTICE "Trying to free ramdisk memory ... ");
if (fd < 0) {
error = fd;
-@@ -127,11 +127,11 @@ int __init initrd_load(void)
+@@ -127,11 +127,11 @@ bool __init initrd_load(void)
* mounted in the normal path.
*/
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
- sys_unlink("/initrd.image");
+ sys_unlink((const char __force_user *)"/initrd.image");
handle_initrd();
- return 1;
+ return true;
}
}
- sys_unlink("/initrd.image");
+ sys_unlink((const char __force_user *)"/initrd.image");
- return 0;
+ return false;
}
diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c
index 8cb6db5..d729f50 100644
@@ -110110,17 +134455,16 @@ index 8cb6db5..d729f50 100644
sys_ioctl(fd, RAID_AUTORUN, raid_autopart);
sys_close(fd);
diff --git a/init/init_task.c b/init/init_task.c
-index ba0a7f36..2bcf1d5 100644
+index ba0a7f36..a7b3aaa 100644
--- a/init/init_task.c
+++ b/init/init_task.c
-@@ -22,5 +22,9 @@ EXPORT_SYMBOL(init_task);
- * Initial thread structure. Alignment of this is handled by a special
+@@ -23,4 +23,8 @@ EXPORT_SYMBOL(init_task);
* linker map entry.
*/
+ union thread_union init_thread_union __init_task_data =
+#ifdef CONFIG_X86
-+union thread_union init_thread_union __init_task_data;
++ { .stack[0] = ~0xabcd1234, };
+#else
- union thread_union init_thread_union __init_task_data =
{ INIT_THREAD_INFO(init_task) };
+#endif
diff --git a/init/initramfs.c b/init/initramfs.c
@@ -110235,7 +134579,7 @@ index b32ad7d..05f6420 100644
next_state = Reset;
return 0;
diff --git a/init/main.c b/init/main.c
-index 9e64d70..2f40cd9 100644
+index 58c9e37..6de8339 100644
--- a/init/main.c
+++ b/init/main.c
@@ -97,6 +97,8 @@ extern void radix_tree_init(void);
@@ -110359,7 +134703,7 @@ index 9e64d70..2f40cd9 100644
static noinline void __init kernel_init_freeable(void);
static int __ref kernel_init(void *unused)
-@@ -951,6 +998,11 @@ static int __ref kernel_init(void *unused)
+@@ -953,6 +1000,11 @@ static int __ref kernel_init(void *unused)
ramdisk_execute_command, ret);
}
@@ -110371,7 +134715,7 @@ index 9e64d70..2f40cd9 100644
/*
* We try each of these until one succeeds.
*
-@@ -1008,7 +1060,7 @@ static noinline void __init kernel_init_freeable(void)
+@@ -1010,7 +1062,7 @@ static noinline void __init kernel_init_freeable(void)
do_basic_setup();
/* Open the /dev/console on the rootfs, this should never fail */
@@ -110380,7 +134724,7 @@ index 9e64d70..2f40cd9 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 +1075,13 @@ static noinline void __init kernel_init_freeable(void)
if (!ramdisk_execute_command)
ramdisk_execute_command = "/init";
@@ -110507,7 +134851,7 @@ index 68d4e95..1477ded 100644
mq_table.data = get_mq(table);
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
-index 161a180..be31d93 100644
+index 781c139..d5f1246 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -274,6 +274,7 @@ static struct inode *mqueue_get_inode(struct super_block *sb,
@@ -110555,7 +134899,7 @@ index ed81aaf..4bb6792 100644
goto out_err;
*pseg = seg;
diff --git a/ipc/sem.c b/ipc/sem.c
-index b471e5a..cb0c603 100644
+index cddd5b5..f328fa7 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -1790,7 +1790,7 @@ static int get_queue_result(struct sem_queue *q)
@@ -110587,7 +134931,7 @@ index b471e5a..cb0c603 100644
/*
diff --git a/ipc/shm.c b/ipc/shm.c
-index 3174634..215d679 100644
+index 331fc1b..ee0e110 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);
@@ -110669,7 +135013,7 @@ index 3174634..215d679 100644
shm_add_rss_swap(shp, &rss, &swp);
diff --git a/ipc/util.c b/ipc/util.c
-index 0f401d9..049b0ff 100644
+index 798cad1..d6ffc17 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -71,6 +71,8 @@ struct ipc_proc_iface {
@@ -110681,7 +135025,7 @@ index 0f401d9..049b0ff 100644
/**
* ipc_init - initialise ipc subsystem
*
-@@ -494,6 +496,10 @@ int ipcperms(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp, short flag)
+@@ -489,6 +491,10 @@ int ipcperms(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp, short flag)
granted_mode >>= 6;
else if (in_group_p(ipcp->cgid) || in_group_p(ipcp->gid))
granted_mode >>= 3;
@@ -110693,10 +135037,10 @@ index 0f401d9..049b0ff 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 5ffcbd3..166fa77 100644
+index 3a3e5de..3a2baad 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
-@@ -124,7 +124,7 @@ u32 audit_sig_sid = 0;
+@@ -123,7 +123,7 @@ u32 audit_sig_sid = 0;
3) suppressed due to audit_rate_limit
4) suppressed due to audit_backlog_limit
*/
@@ -110705,7 +135049,7 @@ index 5ffcbd3..166fa77 100644
/* The netlink socket. */
static struct sock *audit_sock;
-@@ -258,7 +258,7 @@ void audit_log_lost(const char *message)
+@@ -257,7 +257,7 @@ void audit_log_lost(const char *message)
unsigned long now;
int print;
@@ -110714,7 +135058,7 @@ index 5ffcbd3..166fa77 100644
print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit);
-@@ -275,7 +275,7 @@ void audit_log_lost(const char *message)
+@@ -274,7 +274,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",
@@ -110723,7 +135067,7 @@ index 5ffcbd3..166fa77 100644
audit_rate_limit,
audit_backlog_limit);
audit_panic(message);
-@@ -847,7 +847,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -846,7 +846,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;
@@ -110733,7 +135077,7 @@ index 5ffcbd3..166fa77 100644
s.feature_bitmap = AUDIT_FEATURE_BITMAP_ALL;
s.backlog_wait_time = audit_backlog_wait_time_master;
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
-index b86cc04..dfbfd4e 100644
+index 195ffae..fb880f9 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -1024,7 +1024,7 @@ static int audit_log_single_execve_arg(struct audit_context *context,
@@ -110764,10 +135108,19 @@ index b86cc04..dfbfd4e 100644
task->sessionid = sessionid;
task->loginuid = loginuid;
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
-index 334b1bd..67c97a2 100644
+index 972d9a8..367b6a1 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
-@@ -151,14 +151,17 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
+@@ -138,6 +138,8 @@ void __bpf_prog_free(struct bpf_prog *fp)
+ EXPORT_SYMBOL_GPL(__bpf_prog_free);
+
+ #ifdef CONFIG_BPF_JIT
++extern long __rap_hash___bpf_prog_run;
++
+ struct bpf_binary_header *
+ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
+ unsigned int alignment,
+@@ -151,27 +153,45 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
* random section of illegal instructions.
*/
size = round_up(proglen + sizeof(*hdr) + 128, PAGE_SIZE);
@@ -110785,8 +135138,28 @@ index 334b1bd..67c97a2 100644
+
hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)),
PAGE_SIZE - sizeof(*hdr));
++
++#ifdef CONFIG_PAX_RAP
++ hole -= 8;
++#endif
++
start = (prandom_u32() % hole) & ~(alignment - 1);
-@@ -171,7 +174,7 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
+
++#ifdef CONFIG_PAX_RAP
++ start += 8;
++#endif
++
+ /* Leave a random number of instructions before BPF code. */
+ *image_ptr = &hdr->image[start];
+
++#ifdef CONFIG_PAX_RAP
++ pax_open_kernel();
++ *(long *)(*image_ptr - 8) = (long)&__rap_hash___bpf_prog_run;
++ pax_close_kernel();
++#endif
++
+ return hdr;
+ }
void bpf_jit_binary_free(struct bpf_binary_header *hdr)
{
@@ -110795,11 +135168,29 @@ index 334b1bd..67c97a2 100644
}
#endif /* CONFIG_BPF_JIT */
+@@ -192,7 +212,7 @@ EXPORT_SYMBOL_GPL(__bpf_call_base);
+ *
+ * Decode and execute eBPF instructions.
+ */
+-static unsigned int __bpf_prog_run(void *ctx, const struct bpf_insn *insn)
++unsigned int __bpf_prog_run(const struct sk_buff *ctx, const struct bpf_insn *insn)
+ {
+ u64 stack[MAX_BPF_STACK / sizeof(u64)];
+ u64 regs[MAX_BPF_REG], tmp;
+@@ -696,7 +716,7 @@ static int bpf_check_tail_call(const struct bpf_prog *fp)
+ */
+ int bpf_prog_select_runtime(struct bpf_prog *fp)
+ {
+- fp->bpf_func = (void *) __bpf_prog_run;
++ fp->bpf_func = __bpf_prog_run;
+
+ bpf_int_jit_compile(fp);
+ bpf_prog_lock_ro(fp);
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
-index 3b39550..e470527 100644
+index 6373970..a4e1c851 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
-@@ -711,8 +711,16 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
+@@ -731,8 +731,16 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
union bpf_attr attr = {};
int err;
@@ -110817,6 +135208,18 @@ index 3b39550..e470527 100644
if (!access_ok(VERIFY_READ, uattr, 1))
return -EFAULT;
+diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
+index 2e7f7ab..7520d73 100644
+--- a/kernel/bpf/verifier.c
++++ b/kernel/bpf/verifier.c
+@@ -2003,7 +2003,6 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env)
+ if (IS_ERR(map)) {
+ verbose("fd %d is not pointing to valid bpf_map\n",
+ insn->imm);
+- fdput(f);
+ return PTR_ERR(map);
+ }
+
diff --git a/kernel/capability.c b/kernel/capability.c
index 45432b5..988f1e4 100644
--- a/kernel/capability.c
@@ -110916,10 +135319,10 @@ index 45432b5..988f1e4 100644
+}
+EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog);
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
-index dc94f8b..ccd3aea 100644
+index 6a498da..19ed7eb 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
-@@ -3354,7 +3354,7 @@ static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp,
+@@ -3330,7 +3330,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),
@@ -110928,7 +135331,7 @@ index dc94f8b..ccd3aea 100644
NULL, key);
if (IS_ERR(kn))
return PTR_ERR(kn);
-@@ -3458,11 +3458,14 @@ static void cgroup_exit_cftypes(struct cftype *cfts)
+@@ -3434,11 +3434,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);
@@ -110946,7 +135349,7 @@ index dc94f8b..ccd3aea 100644
}
}
-@@ -3493,8 +3496,10 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3469,8 +3472,10 @@ static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
kf_ops->atomic_write_len = cft->max_write_len;
}
@@ -110959,7 +135362,7 @@ index dc94f8b..ccd3aea 100644
}
return 0;
-@@ -3507,7 +3512,7 @@ static int cgroup_rm_cftypes_locked(struct cftype *cfts)
+@@ -3483,7 +3488,7 @@ static int cgroup_rm_cftypes_locked(struct cftype *cfts)
if (!cfts || !cfts[0].ss)
return -ENOENT;
@@ -110968,7 +135371,7 @@ index dc94f8b..ccd3aea 100644
cgroup_apply_cftypes(cfts, false);
cgroup_exit_cftypes(cfts);
return 0;
-@@ -3564,7 +3569,7 @@ static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3540,7 +3545,7 @@ static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
mutex_lock(&cgroup_mutex);
@@ -110977,7 +135380,7 @@ index dc94f8b..ccd3aea 100644
ret = cgroup_apply_cftypes(cfts, true);
if (ret)
cgroup_rm_cftypes_locked(cfts);
-@@ -3585,8 +3590,10 @@ int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3561,8 +3566,10 @@ int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
{
struct cftype *cft;
@@ -110989,7 +135392,7 @@ index dc94f8b..ccd3aea 100644
return cgroup_add_cftypes(ss, cfts);
}
-@@ -3602,8 +3609,10 @@ int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
+@@ -3578,8 +3585,10 @@ int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
{
struct cftype *cft;
@@ -111001,7 +135404,7 @@ index dc94f8b..ccd3aea 100644
return cgroup_add_cftypes(ss, cfts);
}
-@@ -5754,6 +5763,9 @@ static void cgroup_release_agent(struct work_struct *work)
+@@ -5722,6 +5731,9 @@ static void cgroup_release_agent(struct work_struct *work)
if (!pathbuf || !agentbuf)
goto out;
@@ -111011,7 +135414,7 @@ index dc94f8b..ccd3aea 100644
path = cgroup_path(cgrp, pathbuf, PATH_MAX);
if (!path)
goto out;
-@@ -5929,7 +5941,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v)
+@@ -5984,7 +5996,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v)
struct task_struct *task;
int count = 0;
@@ -111200,7 +135603,7 @@ index c18b1f1..b9a0132 100644
return -ENOMEM;
diff --git a/kernel/cred.c b/kernel/cred.c
-index 71179a0..a72ab47 100644
+index 0c0cd8a..faf7245 100644
--- a/kernel/cred.c
+++ b/kernel/cred.c
@@ -172,6 +172,15 @@ void exit_creds(struct task_struct *tsk)
@@ -111408,15 +135811,15 @@ index 0874e2e..5b32cc9 100644
}
EXPORT_SYMBOL_GPL(kgdb_schedule_breakpoint);
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
-index 41213454..861e178 100644
+index 2a20c0d..3eb7d03 100644
--- a/kernel/debug/kdb/kdb_main.c
+++ b/kernel/debug/kdb/kdb_main.c
@@ -2021,7 +2021,7 @@ static int kdb_lsmod(int argc, const char **argv)
continue;
kdb_printf("%-20s%8u 0x%p ", mod->name,
-- mod->core_size, (void *)mod);
-+ mod->core_size_rx + mod->core_size_rw, (void *)mod);
+- mod->core_layout.size, (void *)mod);
++ mod->core_layout.size_rx + mod->core_layout.size_rw, (void *)mod);
#ifdef CONFIG_MODULE_UNLOAD
kdb_printf("%4d ", module_refcount(mod));
#endif
@@ -111424,16 +135827,16 @@ index 41213454..861e178 100644
kdb_printf(" (Loading)");
else
kdb_printf(" (Live)");
-- kdb_printf(" 0x%p", mod->module_core);
-+ kdb_printf(" 0x%p 0x%p", mod->module_core_rx, mod->module_core_rw);
+- kdb_printf(" 0x%p", mod->core_layout.base);
++ kdb_printf(" 0x%p 0x%p", mod->core_layout.base_rx, mod->core_layout.base_rw);
#ifdef CONFIG_MODULE_UNLOAD
{
diff --git a/kernel/events/core.c b/kernel/events/core.c
-index 1e889a0..78b25c2 100644
+index f0b4b32..390e9b9 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
-@@ -175,8 +175,15 @@ static struct srcu_struct pmus_srcu;
+@@ -350,8 +350,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
@@ -111450,7 +135853,7 @@ index 1e889a0..78b25c2 100644
/* Minimum for 512 kiB + 1 user control page */
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
-@@ -202,7 +209,7 @@ static void update_perf_cpu_limits(void)
+@@ -377,7 +384,7 @@ static void update_perf_cpu_limits(void)
tmp *= sysctl_perf_cpu_time_max_percent;
do_div(tmp, 100);
@@ -111459,7 +135862,7 @@ index 1e889a0..78b25c2 100644
}
static int perf_rotate_context(struct perf_cpu_context *cpuctx);
-@@ -308,7 +315,7 @@ void perf_sample_event_took(u64 sample_len_ns)
+@@ -483,7 +490,7 @@ void perf_sample_event_took(u64 sample_len_ns)
}
}
@@ -111468,7 +135871,27 @@ index 1e889a0..78b25c2 100644
static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
enum event_type_t event_type);
-@@ -3898,9 +3905,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
+@@ -949,8 +956,9 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu)
+ timer->function = perf_mux_hrtimer_handler;
+ }
+
+-static int perf_mux_hrtimer_restart(struct perf_cpu_context *cpuctx)
++static int perf_mux_hrtimer_restart(void *_cpuctx)
+ {
++ struct perf_cpu_context *cpuctx = _cpuctx;
+ struct hrtimer *timer = &cpuctx->hrtimer;
+ struct pmu *pmu = cpuctx->ctx.pmu;
+ unsigned long flags;
+@@ -2883,7 +2891,7 @@ void __perf_event_task_sched_in(struct task_struct *prev,
+ perf_pmu_sched_task(prev, task, true);
+ }
+
+-static u64 perf_calculate_period(struct perf_event *event, u64 nsec, u64 count)
++static u64 perf_calculate_period(const struct perf_event *event, u64 nsec, u64 count)
+ {
+ u64 frequency = event->attr.sample_freq;
+ u64 sec = NSEC_PER_SEC;
+@@ -3934,9 +3942,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
total += perf_event_count(event);
*enabled += event->total_time_enabled +
@@ -111480,7 +135903,7 @@ index 1e889a0..78b25c2 100644
list_for_each_entry(child, &event->child_list, child_list) {
(void)perf_event_read(child, false);
-@@ -3932,12 +3939,12 @@ static int __perf_read_group_add(struct perf_event *leader,
+@@ -3968,12 +3976,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 +
@@ -111495,7 +135918,7 @@ index 1e889a0..78b25c2 100644
}
/*
-@@ -4478,10 +4485,10 @@ void perf_event_update_userpage(struct perf_event *event)
+@@ -4475,10 +4483,10 @@ void perf_event_update_userpage(struct perf_event *event)
userpg->offset -= local64_read(&event->hw.prev_count);
userpg->time_enabled = enabled +
@@ -111508,7 +135931,7 @@ index 1e889a0..78b25c2 100644
arch_perf_update_userpage(event, userpg, now);
-@@ -5156,7 +5163,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
+@@ -5153,7 +5161,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
/* Data. */
sp = perf_user_stack_pointer(regs);
@@ -111517,7 +135940,7 @@ index 1e889a0..78b25c2 100644
dyn_size = dump_size - rem;
perf_output_skip(handle, rem);
-@@ -5247,11 +5254,11 @@ static void perf_output_read_one(struct perf_output_handle *handle,
+@@ -5244,11 +5252,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 +
@@ -111531,7 +135954,17 @@ index 1e889a0..78b25c2 100644
}
if (read_format & PERF_FORMAT_ID)
values[n++] = primary_event_id(event);
-@@ -7906,7 +7913,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
+@@ -7558,8 +7566,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);
+
+- cpu_function_call(cpu,
+- (remote_function_f)perf_mux_hrtimer_restart, cpuctx);
++ cpu_function_call(cpu, perf_mux_hrtimer_restart, cpuctx);
+ }
+ put_online_cpus();
+ mutex_unlock(&mux_interval_mutex);
+@@ -7928,7 +7935,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));
@@ -111540,7 +135973,7 @@ index 1e889a0..78b25c2 100644
event->state = PERF_EVENT_STATE_INACTIVE;
-@@ -8268,6 +8275,11 @@ SYSCALL_DEFINE5(perf_event_open,
+@@ -8290,6 +8297,11 @@ SYSCALL_DEFINE5(perf_event_open,
if (flags & ~PERF_FLAG_ALL)
return -EINVAL;
@@ -111552,7 +135985,7 @@ index 1e889a0..78b25c2 100644
err = perf_copy_attr(attr_uptr, &attr);
if (err)
return err;
-@@ -8740,10 +8752,10 @@ static void sync_child_event(struct perf_event *child_event,
+@@ -8777,10 +8789,10 @@ static void sync_child_event(struct perf_event *child_event,
/*
* Add back the child's count to the parent's count:
*/
@@ -111564,8 +135997,8 @@ index 1e889a0..78b25c2 100644
- atomic64_add(child_event->total_time_running,
+ atomic64_add_unchecked(child_event->total_time_running,
&parent_event->child_total_time_running);
+ }
- /*
diff --git a/kernel/events/internal.h b/kernel/events/internal.h
index 2bbad9c..056f20c 100644
--- a/kernel/events/internal.h
@@ -111611,10 +136044,10 @@ index 2bbad9c..056f20c 100644
/* Callchain handling */
extern struct perf_callchain_entry *
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
-index 7dad849..d4eb8a5 100644
+index 0167679..f0336a8 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
-@@ -1689,7 +1689,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
+@@ -1690,7 +1690,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
{
struct page *page;
uprobe_opcode_t opcode;
@@ -111624,10 +136057,10 @@ index 7dad849..d4eb8a5 100644
pagefault_disable();
result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr,
diff --git a/kernel/exit.c b/kernel/exit.c
-index 07110c6..1125445 100644
+index 10e0882..afcc374 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
-@@ -171,6 +171,10 @@ void release_task(struct task_struct *p)
+@@ -169,6 +169,10 @@ void release_task(struct task_struct *p)
struct task_struct *leader;
int zap_leader;
repeat:
@@ -111638,7 +136071,7 @@ index 07110c6..1125445 100644
/* don't need to get the RCU readlock here - the process is dead and
* can't be modifying its own credentials. But shut RCU-lockdep up */
rcu_read_lock();
-@@ -450,9 +454,8 @@ static struct task_struct *find_alive_thread(struct task_struct *p)
+@@ -448,9 +452,8 @@ static struct task_struct *find_alive_thread(struct task_struct *p)
return NULL;
}
@@ -111649,7 +136082,7 @@ index 07110c6..1125445 100644
{
struct pid_namespace *pid_ns = task_active_pid_ns(father);
struct task_struct *reaper = pid_ns->child_reaper;
-@@ -549,6 +552,8 @@ static void reparent_leader(struct task_struct *father, struct task_struct *p,
+@@ -547,6 +550,8 @@ static void reparent_leader(struct task_struct *father, struct task_struct *p,
* jobs, send them a SIGHUP and then a SIGCONT. (POSIX 3.2.2.2)
*/
static void forget_original_parent(struct task_struct *father,
@@ -111658,7 +136091,7 @@ index 07110c6..1125445 100644
struct list_head *dead)
{
struct task_struct *p, *t, *reaper;
-@@ -656,6 +661,8 @@ void do_exit(long code)
+@@ -654,6 +659,8 @@ void do_exit(long code)
int group_dead;
TASKS_RCU(int tasks_rcu_i);
@@ -111667,7 +136100,7 @@ index 07110c6..1125445 100644
profile_task_exit(tsk);
WARN_ON(blk_needs_flush_plug(tsk));
-@@ -672,7 +679,6 @@ void do_exit(long code)
+@@ -670,7 +677,6 @@ void do_exit(long code)
* mm_release()->clear_child_tid() from writing to a user-controlled
* kernel address.
*/
@@ -111675,7 +136108,7 @@ index 07110c6..1125445 100644
ptrace_event(PTRACE_EVENT_EXIT, code);
-@@ -732,6 +738,9 @@ void do_exit(long code)
+@@ -730,6 +736,9 @@ void do_exit(long code)
tsk->exit_code = code;
taskstats_exit(tsk, group_dead);
@@ -111685,7 +136118,7 @@ index 07110c6..1125445 100644
exit_mm(tsk);
if (group_dead)
-@@ -851,7 +860,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
+@@ -849,7 +858,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
* Take down every thread in the group. This is called by fatal signals
* as well as by sys_exit_group (below).
*/
@@ -111694,7 +136127,7 @@ index 07110c6..1125445 100644
do_group_exit(int exit_code)
{
struct signal_struct *sig = current->signal;
-@@ -968,6 +977,7 @@ static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p,
+@@ -966,6 +975,7 @@ static int wait_noreap_copyout(struct wait_opts *wo, struct task_struct *p,
* the lock and this task is uninteresting. If we return nonzero, we have
* released the lock and the system call should return.
*/
@@ -111702,7 +136135,7 @@ index 07110c6..1125445 100644
static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
{
int state, retval, status;
-@@ -984,6 +994,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
+@@ -982,6 +992,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
get_task_struct(p);
read_unlock(&tasklist_lock);
@@ -111710,7 +136143,7 @@ index 07110c6..1125445 100644
sched_annotate_sleep();
if ((exit_code & 0x7f) == 0) {
-@@ -1006,6 +1017,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
+@@ -1004,6 +1015,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
* We own this thread, nobody else can reap it.
*/
read_unlock(&tasklist_lock);
@@ -111718,7 +136151,7 @@ index 07110c6..1125445 100644
sched_annotate_sleep();
/*
-@@ -1149,6 +1161,8 @@ static int *task_stopped_code(struct task_struct *p, bool ptrace)
+@@ -1146,6 +1158,8 @@ static int *task_stopped_code(struct task_struct *p, bool ptrace)
* search should terminate.
*/
static int wait_task_stopped(struct wait_opts *wo,
@@ -111727,7 +136160,7 @@ index 07110c6..1125445 100644
int ptrace, struct task_struct *p)
{
struct siginfo __user *infop;
-@@ -1196,6 +1210,7 @@ unlock_sig:
+@@ -1193,6 +1207,7 @@ unlock_sig:
pid = task_pid_vnr(p);
why = ptrace ? CLD_TRAPPED : CLD_STOPPED;
read_unlock(&tasklist_lock);
@@ -111735,7 +136168,7 @@ index 07110c6..1125445 100644
sched_annotate_sleep();
if (unlikely(wo->wo_flags & WNOWAIT))
-@@ -1233,6 +1248,7 @@ unlock_sig:
+@@ -1230,6 +1245,7 @@ unlock_sig:
* the lock and this task is uninteresting. If we return nonzero, we have
* released the lock and the system call should return.
*/
@@ -111743,7 +136176,7 @@ index 07110c6..1125445 100644
static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
{
int retval;
-@@ -1259,6 +1275,7 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
+@@ -1256,6 +1272,7 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
pid = task_pid_vnr(p);
get_task_struct(p);
read_unlock(&tasklist_lock);
@@ -111751,7 +136184,7 @@ index 07110c6..1125445 100644
sched_annotate_sleep();
if (!wo->wo_info) {
-@@ -1288,6 +1305,8 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
+@@ -1285,6 +1302,8 @@ static int wait_task_continued(struct wait_opts *wo, struct task_struct *p)
* or another error from security_task_wait(), or still -ECHILD.
*/
static int wait_consider_task(struct wait_opts *wo, int ptrace,
@@ -111760,7 +136193,7 @@ index 07110c6..1125445 100644
struct task_struct *p)
{
/*
-@@ -1413,6 +1432,7 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace,
+@@ -1410,6 +1429,7 @@ static int wait_consider_task(struct wait_opts *wo, int ptrace,
* ->notask_error is 0 if there were any eligible children,
* or another error from security_task_wait(), or still -ECHILD.
*/
@@ -111768,7 +136201,7 @@ index 07110c6..1125445 100644
static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk)
{
struct task_struct *p;
-@@ -1427,6 +1447,7 @@ static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk)
+@@ -1424,6 +1444,7 @@ static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk)
return 0;
}
@@ -111776,7 +136209,7 @@ index 07110c6..1125445 100644
static int ptrace_do_wait(struct wait_opts *wo, struct task_struct *tsk)
{
struct task_struct *p;
-@@ -1490,12 +1511,16 @@ repeat:
+@@ -1487,12 +1508,16 @@ repeat:
tsk = current;
do {
retval = do_wait_thread(wo, tsk);
@@ -111796,7 +136229,7 @@ index 07110c6..1125445 100644
if (wo->wo_flags & __WNOTHREAD)
break;
diff --git a/kernel/fork.c b/kernel/fork.c
-index 1155eac..0c9bd1f 100644
+index 2e391c7..555531a 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -188,12 +188,54 @@ static void free_thread_info(struct thread_info *ti)
@@ -112021,15 +136454,14 @@ index 1155eac..0c9bd1f 100644
uprobe_start_dup_mmap();
down_write(&oldmm->mmap_sem);
-@@ -430,53 +546,15 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -430,52 +546,14 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
prev = NULL;
for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) {
- struct file *file;
-
if (mpnt->vm_flags & VM_DONTCOPY) {
- vm_stat_account(mm, mpnt->vm_flags, mpnt->vm_file,
- -vma_pages(mpnt));
+ vm_stat_account(mm, mpnt->vm_flags, -vma_pages(mpnt));
continue;
}
- charge = 0;
@@ -112079,7 +136511,7 @@ index 1155eac..0c9bd1f 100644
}
/*
-@@ -508,6 +586,38 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -507,6 +585,38 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
if (retval)
goto out;
}
@@ -112118,7 +136550,7 @@ index 1155eac..0c9bd1f 100644
/* a new mm has just been created */
arch_dup_mmap(oldmm, mm);
retval = 0;
-@@ -517,14 +627,6 @@ out:
+@@ -516,14 +626,6 @@ out:
up_write(&oldmm->mmap_sem);
uprobe_end_dup_mmap();
return retval;
@@ -112133,7 +136565,7 @@ index 1155eac..0c9bd1f 100644
}
static inline int mm_alloc_pgd(struct mm_struct *mm)
-@@ -799,8 +901,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
+@@ -798,8 +900,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
return ERR_PTR(err);
mm = get_task_mm(task);
@@ -112144,7 +136576,7 @@ index 1155eac..0c9bd1f 100644
mmput(mm);
mm = ERR_PTR(-EACCES);
}
-@@ -1001,13 +1103,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
+@@ -1000,13 +1102,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
spin_unlock(&fs->lock);
return -EAGAIN;
}
@@ -112166,7 +136598,7 @@ index 1155eac..0c9bd1f 100644
return 0;
}
-@@ -1240,7 +1349,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid)
+@@ -1239,7 +1348,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.
*/
@@ -112175,7 +136607,7 @@ index 1155eac..0c9bd1f 100644
unsigned long stack_start,
unsigned long stack_size,
int __user *child_tidptr,
-@@ -1312,6 +1421,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1310,6 +1419,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
#endif
retval = -EAGAIN;
@@ -112185,7 +136617,7 @@ index 1155eac..0c9bd1f 100644
if (atomic_read(&p->real_cred->user->processes) >=
task_rlimit(p, RLIMIT_NPROC)) {
if (p->real_cred->user != INIT_USER &&
-@@ -1570,6 +1682,11 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1568,6 +1680,11 @@ static struct task_struct *copy_process(unsigned long clone_flags,
goto bad_fork_cancel_cgroup;
}
@@ -112197,7 +136629,7 @@ index 1155eac..0c9bd1f 100644
if (likely(p->pid)) {
ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
-@@ -1659,6 +1776,8 @@ bad_fork_cleanup_count:
+@@ -1657,6 +1774,8 @@ bad_fork_cleanup_count:
bad_fork_free:
free_task(p);
fork_out:
@@ -112206,7 +136638,7 @@ index 1155eac..0c9bd1f 100644
return ERR_PTR(retval);
}
-@@ -1721,6 +1840,7 @@ long _do_fork(unsigned long clone_flags,
+@@ -1719,6 +1838,7 @@ long _do_fork(unsigned long clone_flags,
p = copy_process(clone_flags, stack_start, stack_size,
child_tidptr, NULL, trace, tls);
@@ -112214,7 +136646,7 @@ index 1155eac..0c9bd1f 100644
/*
* Do this prior waking up the new thread - the thread pointer
* might get invalid after that point, if the thread exits quickly.
-@@ -1737,6 +1857,8 @@ long _do_fork(unsigned long clone_flags,
+@@ -1735,6 +1855,8 @@ long _do_fork(unsigned long clone_flags,
if (clone_flags & CLONE_PARENT_SETTID)
put_user(nr, parent_tidptr);
@@ -112223,16 +136655,16 @@ index 1155eac..0c9bd1f 100644
if (clone_flags & CLONE_VFORK) {
p->vfork_done = &vfork;
init_completion(&vfork);
-@@ -1869,7 +1991,7 @@ void __init proc_caches_init(void)
- mm_cachep = kmem_cache_create("mm_struct",
+@@ -1871,7 +1993,7 @@ void __init proc_caches_init(void)
sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN,
- SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK, NULL);
-- vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC);
-+ vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC | SLAB_NO_SANITIZE);
+ SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK|SLAB_ACCOUNT,
+ NULL);
+- vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC|SLAB_ACCOUNT);
++ vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC|SLAB_ACCOUNT|SLAB_NO_SANITIZE);
mmap_init();
nsproxy_cache_init();
}
-@@ -1917,7 +2039,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp)
+@@ -1919,7 +2041,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 */
@@ -112241,7 +136673,7 @@ index 1155eac..0c9bd1f 100644
return 0;
*new_fsp = copy_fs_struct(fs);
-@@ -2030,7 +2152,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
+@@ -2032,7 +2154,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
fs = current->fs;
spin_lock(&fs->lock);
current->fs = new_fs;
@@ -112251,7 +136683,7 @@ index 1155eac..0c9bd1f 100644
new_fs = NULL;
else
new_fs = fs;
-@@ -2094,7 +2217,7 @@ int unshare_files(struct files_struct **displaced)
+@@ -2096,7 +2219,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)
{
@@ -112261,7 +136693,7 @@ index 1155eac..0c9bd1f 100644
int threads = max_threads;
int min = MIN_THREADS;
diff --git a/kernel/futex.c b/kernel/futex.c
-index 461c72b..b4f4bd8 100644
+index 5d6ce64..3124491 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -202,7 +202,7 @@ struct futex_pi_state {
@@ -112282,8 +136714,8 @@ index 461c72b..b4f4bd8 100644
static const struct futex_q futex_q_init = {
/* list gets initialized in queue_me()*/
-@@ -472,6 +472,11 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
- struct page *page, *page_head;
+@@ -473,6 +473,11 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
+ struct address_space *mapping;
int err, ro = 0;
+#ifdef CONFIG_PAX_SEGMEXEC
@@ -112294,7 +136726,7 @@ index 461c72b..b4f4bd8 100644
/*
* The futex address must be "naturally" aligned.
*/
-@@ -678,7 +683,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr,
+@@ -643,7 +648,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr,
static int get_futex_value_locked(u32 *dest, u32 __user *from)
{
@@ -112303,7 +136735,7 @@ index 461c72b..b4f4bd8 100644
pagefault_disable();
ret = __copy_from_user_inatomic(dest, from, sizeof(u32));
-@@ -3136,6 +3141,7 @@ static void __init futex_detect_cmpxchg(void)
+@@ -3135,6 +3140,7 @@ static void __init futex_detect_cmpxchg(void)
{
#ifndef CONFIG_HAVE_FUTEX_CMPXCHG
u32 curval;
@@ -112311,7 +136743,7 @@ index 461c72b..b4f4bd8 100644
/*
* This will fail and we want it. Some arch implementations do
-@@ -3147,8 +3153,11 @@ static void __init futex_detect_cmpxchg(void)
+@@ -3146,8 +3152,11 @@ static void __init futex_detect_cmpxchg(void)
* implementation, the non-functional ones will return
* -ENOSYS.
*/
@@ -112336,33 +136768,8 @@ index 4ae3232..5adee02 100644
compat_long_t futex_offset)
{
compat_uptr_t base = ptr_to_compat(entry);
-diff --git a/kernel/gcov/base.c b/kernel/gcov/base.c
-index 7080ae1..c9b3761 100644
---- a/kernel/gcov/base.c
-+++ b/kernel/gcov/base.c
-@@ -123,11 +123,6 @@ void gcov_enable_events(void)
- }
-
- #ifdef CONFIG_MODULES
--static inline int within(void *addr, void *start, unsigned long size)
--{
-- return ((addr >= start) && (addr < start + size));
--}
--
- /* Update list and generate events when modules are unloaded. */
- static int gcov_module_notifier(struct notifier_block *nb, unsigned long event,
- void *data)
-@@ -142,7 +137,7 @@ static int gcov_module_notifier(struct notifier_block *nb, unsigned long event,
-
- /* Remove entries located in module from linked list. */
- while ((info = gcov_info_next(info))) {
-- if (within(info, mod->module_core, mod->core_size)) {
-+ if (within_module_core_rw((unsigned long)info, mod)) {
- gcov_info_unlink(prev, info);
- if (gcov_events_enabled)
- gcov_event(GCOV_REMOVE, info);
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
-index 6ead200..0cdeef1 100644
+index 84118723..317f7a5 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -958,7 +958,7 @@ static int irq_thread(void *data)
@@ -112375,10 +136782,10 @@ index 6ead200..0cdeef1 100644
irq_wake_secondary(desc, action);
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
-index 6b0c0b7..9314a9c 100644
+index 38e89ce..58960ac 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
-@@ -212,16 +212,18 @@ static void msi_domain_update_dom_ops(struct msi_domain_info *info)
+@@ -214,16 +214,18 @@ static void msi_domain_update_dom_ops(struct msi_domain_info *info)
return;
}
@@ -112402,7 +136809,7 @@ index 6b0c0b7..9314a9c 100644
}
static void msi_domain_update_chip_ops(struct msi_domain_info *info)
-@@ -229,8 +231,11 @@ static void msi_domain_update_chip_ops(struct msi_domain_info *info)
+@@ -231,8 +233,11 @@ static void msi_domain_update_chip_ops(struct msi_domain_info *info)
struct irq_chip *chip = info->chip;
BUG_ON(!chip || !chip->irq_mask || !chip->irq_unmask);
@@ -112465,7 +136872,7 @@ index 05254ee..a2e0725 100644
static int
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
-index 5c5987f..bc502b0 100644
+index 5c5987f..d59272e 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -11,6 +11,9 @@
@@ -112541,7 +136948,20 @@ index 5c5987f..bc502b0 100644
if (all_var)
return is_kernel(addr);
-@@ -481,7 +520,6 @@ static unsigned long get_ksymbol_core(struct kallsym_iter *iter)
+@@ -434,10 +473,11 @@ int sprint_backtrace(char *buffer, unsigned long address)
+ }
+
+ /* Look up a kernel symbol and print it to the kernel messages. */
+-void __print_symbol(const char *fmt, unsigned long address)
++void __print_symbol(const char *fmt, unsigned long address, ...)
+ {
+ char buffer[KSYM_SYMBOL_LEN];
+
++ address = (unsigned long)__builtin_extract_return_addr((void *)address);
+ sprint_symbol(buffer, address);
+
+ printk(fmt, buffer);
+@@ -481,7 +521,6 @@ static unsigned long get_ksymbol_core(struct kallsym_iter *iter)
static void reset_iter(struct kallsym_iter *iter, loff_t new_pos)
{
@@ -112549,7 +136969,7 @@ index 5c5987f..bc502b0 100644
iter->nameoff = get_symbol_offset(new_pos);
iter->pos = new_pos;
}
-@@ -529,6 +567,11 @@ static int s_show(struct seq_file *m, void *p)
+@@ -529,6 +568,11 @@ static int s_show(struct seq_file *m, void *p)
{
struct kallsym_iter *iter = m->private;
@@ -112561,7 +136981,7 @@ index 5c5987f..bc502b0 100644
/* Some debugging symbols have no name. Ignore them. */
if (!iter->name[0])
return 0;
-@@ -542,6 +585,7 @@ static int s_show(struct seq_file *m, void *p)
+@@ -542,6 +586,7 @@ static int s_show(struct seq_file *m, void *p)
*/
type = iter->exported ? toupper(iter->type) :
tolower(iter->type);
@@ -112585,7 +137005,7 @@ index 3a47fa9..bcb17e3 100644
/*
diff --git a/kernel/kexec.c b/kernel/kexec.c
-index d873b64..61f7c59 100644
+index ee70aef..55095dd 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -224,7 +224,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
@@ -112599,18 +137019,18 @@ index d873b64..61f7c59 100644
/* Don't allow clients that don't understand the native
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
-index 11b64a6..d011095 100644
+index 8dc6591..508a794 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
-@@ -851,7 +851,7 @@ int kimage_load_segment(struct kimage *image,
+@@ -848,7 +848,7 @@ int kimage_load_segment(struct kimage *image,
struct kimage *kexec_image;
struct kimage *kexec_crash_image;
-int kexec_load_disabled;
+int kexec_load_disabled __read_only;
- void crash_kexec(struct pt_regs *regs)
- {
+ /*
+ * No panic_cpu check version of crash_kexec(). This function is called
diff --git a/kernel/kmod.c b/kernel/kmod.c
index 0277d12..2d2899c 100644
--- a/kernel/kmod.c
@@ -112867,7 +137287,7 @@ index d10ab6b..1725fbd 100644
return 0;
}
diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c
-index e83b264..d09fae1 100644
+index 152da4a..4ab2150 100644
--- a/kernel/ksysfs.c
+++ b/kernel/ksysfs.c
@@ -50,6 +50,8 @@ static ssize_t uevent_helper_store(struct kobject *kobj,
@@ -112879,7 +137299,7 @@ index e83b264..d09fae1 100644
memcpy(uevent_helper, buf, count);
uevent_helper[count] = '\0';
if (count && uevent_helper[count-1] == '\n')
-@@ -176,7 +178,7 @@ static ssize_t notes_read(struct file *filp, struct kobject *kobj,
+@@ -195,7 +197,7 @@ static ssize_t notes_read(struct file *filp, struct kobject *kobj,
return count;
}
@@ -112889,7 +137309,7 @@ index e83b264..d09fae1 100644
.name = "notes",
.mode = S_IRUGO,
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index 60ace56..8392836 100644
+index 716547f..91e3067 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -613,6 +613,10 @@ static int static_obj(void *obj)
@@ -112911,7 +137331,7 @@ index 60ace56..8392836 100644
printk("the code is fine but needs lockdep annotation.\n");
printk("turning off the locking correctness validator.\n");
dump_stack();
-@@ -3102,7 +3107,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
+@@ -3106,7 +3111,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
if (!class)
return 0;
}
@@ -113049,7 +137469,7 @@ index 0551c21..f753f95 100644
debug_mutex_free_waiter(&waiter);
mutex_release(&lock->dep_map, 1, ip);
diff --git a/kernel/module.c b/kernel/module.c
-index 0e5c711..940c5c0 100644
+index 794ebe8..70e7897 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -59,6 +59,7 @@
@@ -113060,52 +137480,44 @@ index 0e5c711..940c5c0 100644
#include <uapi/linux/module.h>
#include "module-internal.h"
-@@ -108,7 +109,7 @@ static LIST_HEAD(modules);
- * Use a latched RB-tree for __module_address(); this allows us to use
- * RCU-sched lookups of the address from any context.
- *
-- * Because modules have two address ranges: init and core, we need two
-+ * Because modules have four address ranges: init_{rw,rx} and core_{rw,rx}, we need four
- * latch_tree_nodes entries. Therefore we need the back-pointer from
- * mod_tree_node.
- *
-@@ -125,10 +126,14 @@ static __always_inline unsigned long __mod_tree_val(struct latch_tree_node *n)
- struct mod_tree_node *mtn = container_of(n, struct mod_tree_node, node);
- struct module *mod = mtn->mod;
+@@ -106,16 +107,32 @@ static LIST_HEAD(modules);
-- if (unlikely(mtn == &mod->mtn_init))
-- return (unsigned long)mod->module_init;
-+ if (unlikely(mtn == &mod->mtn_init_rw))
-+ return (unsigned long)mod->module_init_rw;
-+ if (unlikely(mtn == &mod->mtn_init_rx))
-+ return (unsigned long)mod->module_init_rx;
+ static __always_inline unsigned long __mod_tree_val(struct latch_tree_node *n)
+ {
+- struct module_layout *layout = container_of(n, struct module_layout, mtn.node);
++ struct mod_tree_node *mtn = container_of(n, struct mod_tree_node, node);
++ struct module *mod = mtn->mod;
-- return (unsigned long)mod->module_core;
-+ if (unlikely(mtn == &mod->mtn_core_rw))
-+ return (unsigned long)mod->module_core_rw;
-+ return (unsigned long)mod->module_core_rx;
+- return (unsigned long)layout->base;
++ if (unlikely(mtn == &mod->init_layout.mtn_rw))
++ return (unsigned long)mod->init_layout.base_rw;
++ if (unlikely(mtn == &mod->init_layout.mtn_rx))
++ return (unsigned long)mod->init_layout.base_rx;
++
++ if (unlikely(mtn == &mod->core_layout.mtn_rw))
++ return (unsigned long)mod->core_layout.base_rw;
++ return (unsigned long)mod->core_layout.base_rx;
}
static __always_inline unsigned long __mod_tree_size(struct latch_tree_node *n)
-@@ -136,10 +141,14 @@ static __always_inline unsigned long __mod_tree_size(struct latch_tree_node *n)
- struct mod_tree_node *mtn = container_of(n, struct mod_tree_node, node);
- struct module *mod = mtn->mod;
-
-- if (unlikely(mtn == &mod->mtn_init))
-- return (unsigned long)mod->init_size;
-+ if (unlikely(mtn == &mod->mtn_init_rw))
-+ return (unsigned long)mod->init_size_rw;
-+ if (unlikely(mtn == &mod->mtn_init_rx))
-+ return (unsigned long)mod->init_size_rx;
+ {
+- struct module_layout *layout = container_of(n, struct module_layout, mtn.node);
++ struct mod_tree_node *mtn = container_of(n, struct mod_tree_node, node);
++ struct module *mod = mtn->mod;
-- return (unsigned long)mod->core_size;
-+ if (unlikely(mtn == &mod->mtn_core_rw))
-+ return (unsigned long)mod->core_size_rw;
-+ return (unsigned long)mod->core_size_rx;
+- return (unsigned long)layout->size;
++ if (unlikely(mtn == &mod->init_layout.mtn_rw))
++ return (unsigned long)mod->init_layout.size_rw;
++ if (unlikely(mtn == &mod->init_layout.mtn_rx))
++ return (unsigned long)mod->init_layout.size_rx;
++
++ if (unlikely(mtn == &mod->core_layout.mtn_rw))
++ return (unsigned long)mod->core_layout.size_rw;
++ return (unsigned long)mod->core_layout.size_rx;
}
static __always_inline bool
-@@ -172,14 +181,19 @@ static const struct latch_tree_ops mod_tree_ops = {
+@@ -148,14 +165,19 @@ static const struct latch_tree_ops mod_tree_ops = {
static struct mod_tree_root {
struct latch_tree_root root;
@@ -113130,47 +137542,47 @@ index 0e5c711..940c5c0 100644
static noinline void __mod_tree_insert(struct mod_tree_node *node)
{
-@@ -197,23 +211,31 @@ static void __mod_tree_remove(struct mod_tree_node *node)
+@@ -173,23 +195,31 @@ static void __mod_tree_remove(struct mod_tree_node *node)
*/
static void mod_tree_insert(struct module *mod)
{
-- mod->mtn_core.mod = mod;
-- mod->mtn_init.mod = mod;
-+ mod->mtn_core_rw.mod = mod;
-+ mod->mtn_core_rx.mod = mod;
-+ mod->mtn_init_rw.mod = mod;
-+ mod->mtn_init_rx.mod = mod;
+- mod->core_layout.mtn.mod = mod;
+- mod->init_layout.mtn.mod = mod;
++ mod->core_layout.mtn_rx.mod = mod;
++ mod->core_layout.mtn_rw.mod = mod;
++ mod->init_layout.mtn_rx.mod = mod;
++ mod->init_layout.mtn_rw.mod = mod;
-- __mod_tree_insert(&mod->mtn_core);
-- if (mod->init_size)
-- __mod_tree_insert(&mod->mtn_init);
-+ __mod_tree_insert(&mod->mtn_core_rw);
-+ __mod_tree_insert(&mod->mtn_core_rx);
-+ if (mod->init_size_rw)
-+ __mod_tree_insert(&mod->mtn_init_rw);
-+ if (mod->init_size_rx)
-+ __mod_tree_insert(&mod->mtn_init_rx);
+- __mod_tree_insert(&mod->core_layout.mtn);
+- if (mod->init_layout.size)
+- __mod_tree_insert(&mod->init_layout.mtn);
++ __mod_tree_insert(&mod->core_layout.mtn_rx);
++ __mod_tree_insert(&mod->core_layout.mtn_rw);
++ if (mod->init_layout.size_rx)
++ __mod_tree_insert(&mod->init_layout.mtn_rx);
++ if (mod->init_layout.size_rw)
++ __mod_tree_insert(&mod->init_layout.mtn_rw);
}
static void mod_tree_remove_init(struct module *mod)
{
-- if (mod->init_size)
-- __mod_tree_remove(&mod->mtn_init);
-+ if (mod->init_size_rw)
-+ __mod_tree_remove(&mod->mtn_init_rw);
-+ if (mod->init_size_rx)
-+ __mod_tree_remove(&mod->mtn_init_rx);
+- if (mod->init_layout.size)
+- __mod_tree_remove(&mod->init_layout.mtn);
++ if (mod->init_layout.size_rx)
++ __mod_tree_remove(&mod->init_layout.mtn_rx);
++ if (mod->init_layout.size_rw)
++ __mod_tree_remove(&mod->init_layout.mtn_rw);
}
static void mod_tree_remove(struct module *mod)
{
-- __mod_tree_remove(&mod->mtn_core);
-+ __mod_tree_remove(&mod->mtn_core_rw);
-+ __mod_tree_remove(&mod->mtn_core_rx);
+- __mod_tree_remove(&mod->core_layout.mtn);
++ __mod_tree_remove(&mod->core_layout.mtn_rx);
++ __mod_tree_remove(&mod->core_layout.mtn_rw);
mod_tree_remove_init(mod);
}
-@@ -230,7 +252,8 @@ static struct module *mod_find(unsigned long addr)
+@@ -206,7 +236,8 @@ static struct module *mod_find(unsigned long addr)
#else /* MODULES_TREE_LOOKUP */
@@ -113180,12 +137592,12 @@ index 0e5c711..940c5c0 100644
static void mod_tree_insert(struct module *mod) { }
static void mod_tree_remove_init(struct module *mod) { }
-@@ -254,22 +277,36 @@ static struct module *mod_find(unsigned long addr)
+@@ -230,22 +261,36 @@ static struct module *mod_find(unsigned long addr)
* Bounds of module text, for speeding up __module_address.
* Protected by module_mutex.
*/
-static void __mod_update_bounds(void *base, unsigned int size)
-+static void __mod_update_bounds_rw(void *base, unsigned int size)
++static void __mod_update_bounds_rx(void *base, unsigned int size)
{
unsigned long min = (unsigned long)base;
unsigned long max = min + size;
@@ -113194,38 +137606,38 @@ index 0e5c711..940c5c0 100644
- module_addr_min = min;
- if (max > module_addr_max)
- module_addr_max = max;
-+ if (min < module_addr_min_rw)
-+ module_addr_min_rw = min;
-+ if (max > module_addr_max_rw)
-+ module_addr_max_rw = max;
++ if (min < module_addr_min_rx)
++ module_addr_min_rx = min;
++ if (max > module_addr_max_rx)
++ module_addr_max_rx = max;
+}
+
-+static void __mod_update_bounds_rx(void *base, unsigned int size)
++static void __mod_update_bounds_rw(void *base, unsigned int size)
+{
+ unsigned long min = (unsigned long)base;
+ unsigned long max = min + size;
+
-+ if (min < module_addr_min_rx)
-+ module_addr_min_rx = min;
-+ if (max > module_addr_max_rx)
-+ module_addr_max_rx = max;
++ if (min < module_addr_min_rw)
++ module_addr_min_rw = min;
++ if (max > module_addr_max_rw)
++ module_addr_max_rw = max;
}
static void mod_update_bounds(struct module *mod)
{
-- __mod_update_bounds(mod->module_core, mod->core_size);
-- if (mod->init_size)
-- __mod_update_bounds(mod->module_init, mod->init_size);
-+ __mod_update_bounds_rw(mod->module_core_rw, mod->core_size_rw);
-+ __mod_update_bounds_rx(mod->module_core_rx, mod->core_size_rx);
-+ if (mod->init_size_rw)
-+ __mod_update_bounds_rw(mod->module_init_rw, mod->init_size_rw);
-+ if (mod->init_size_rx)
-+ __mod_update_bounds_rx(mod->module_init_rx, mod->init_size_rx);
+- __mod_update_bounds(mod->core_layout.base, mod->core_layout.size);
+- if (mod->init_layout.size)
+- __mod_update_bounds(mod->init_layout.base, mod->init_layout.size);
++ __mod_update_bounds_rx(mod->core_layout.base_rx, mod->core_layout.size_rx);
++ __mod_update_bounds_rw(mod->core_layout.base_rw, mod->core_layout.size_rw);
++ if (mod->init_layout.size_rx)
++ __mod_update_bounds_rw(mod->init_layout.base_rx, mod->init_layout.size_rx);
++ if (mod->init_layout.size_rw)
++ __mod_update_bounds_rw(mod->init_layout.base_rw, mod->init_layout.size_rw);
}
#ifdef CONFIG_KGDB_KDB
-@@ -298,7 +335,7 @@ module_param(sig_enforce, bool_enable_only, 0644);
+@@ -274,7 +319,7 @@ module_param(sig_enforce, bool_enable_only, 0644);
#endif /* !CONFIG_MODULE_SIG_FORCE */
/* Block module loading/unloading? */
@@ -113234,7 +137646,7 @@ index 0e5c711..940c5c0 100644
core_param(nomodule, modules_disabled, bint, 0);
/* Waiting for a module to finish initializing? */
-@@ -476,7 +513,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
+@@ -452,7 +497,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
return true;
list_for_each_entry_rcu(mod, &modules, list) {
@@ -113243,7 +137655,7 @@ index 0e5c711..940c5c0 100644
{ mod->syms, mod->syms + mod->num_syms, mod->crcs,
NOT_GPL_ONLY, false },
{ mod->gpl_syms, mod->gpl_syms + mod->num_gpl_syms,
-@@ -501,7 +538,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
+@@ -477,7 +522,7 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
if (mod->state == MODULE_STATE_UNFORMED)
continue;
@@ -113252,7 +137664,7 @@ index 0e5c711..940c5c0 100644
return true;
}
return false;
-@@ -647,7 +684,7 @@ static int percpu_modalloc(struct module *mod, struct load_info *info)
+@@ -623,7 +668,7 @@ static int percpu_modalloc(struct module *mod, struct load_info *info)
if (!pcpusec->sh_size)
return 0;
@@ -113261,25 +137673,25 @@ index 0e5c711..940c5c0 100644
pr_warn("%s: per-cpu alignment %li > %li\n",
mod->name, align, PAGE_SIZE);
align = PAGE_SIZE;
-@@ -1217,7 +1254,7 @@ struct module_attribute module_uevent =
+@@ -1195,7 +1240,7 @@ struct module_attribute module_uevent =
static ssize_t show_coresize(struct module_attribute *mattr,
struct module_kobject *mk, char *buffer)
{
-- return sprintf(buffer, "%u\n", mk->mod->core_size);
-+ return sprintf(buffer, "%u\n", mk->mod->core_size_rx + mk->mod->core_size_rw);
+- return sprintf(buffer, "%u\n", mk->mod->core_layout.size);
++ return sprintf(buffer, "%u\n", mk->mod->core_layout.size_rx + mk->mod->core_layout.size_rw);
}
static struct module_attribute modinfo_coresize =
-@@ -1226,7 +1263,7 @@ static struct module_attribute modinfo_coresize =
+@@ -1204,7 +1249,7 @@ static struct module_attribute modinfo_coresize =
static ssize_t show_initsize(struct module_attribute *mattr,
struct module_kobject *mk, char *buffer)
{
-- return sprintf(buffer, "%u\n", mk->mod->init_size);
-+ return sprintf(buffer, "%u\n", mk->mod->init_size_rx + mk->mod->init_size_rw);
+- return sprintf(buffer, "%u\n", mk->mod->init_layout.size);
++ return sprintf(buffer, "%u\n", mk->mod->init_layout.size_rx + mk->mod->init_layout.size_rw);
}
static struct module_attribute modinfo_initsize =
-@@ -1318,12 +1355,29 @@ static int check_version(Elf_Shdr *sechdrs,
+@@ -1296,12 +1341,29 @@ static int check_version(Elf_Shdr *sechdrs,
goto bad_version;
}
@@ -113309,7 +137721,7 @@ index 0e5c711..940c5c0 100644
return 0;
}
-@@ -1451,7 +1505,7 @@ resolve_symbol_wait(struct module *mod,
+@@ -1429,7 +1491,7 @@ resolve_symbol_wait(struct module *mod,
*/
#ifdef CONFIG_SYSFS
@@ -113318,7 +137730,7 @@ index 0e5c711..940c5c0 100644
static inline bool sect_empty(const Elf_Shdr *sect)
{
return !(sect->sh_flags & SHF_ALLOC) || sect->sh_size == 0;
-@@ -1589,7 +1643,7 @@ static void add_notes_attrs(struct module *mod, const struct load_info *info)
+@@ -1567,7 +1629,7 @@ static void add_notes_attrs(struct module *mod, const struct load_info *info)
{
unsigned int notes, loaded, i;
struct module_notes_attrs *notes_attrs;
@@ -113327,7 +137739,7 @@ index 0e5c711..940c5c0 100644
/* failed to create section attributes, so can't create notes */
if (!mod->sect_attrs)
-@@ -1701,7 +1755,7 @@ static void del_usage_links(struct module *mod)
+@@ -1679,7 +1741,7 @@ static void del_usage_links(struct module *mod)
static int module_add_modinfo_attrs(struct module *mod)
{
struct module_attribute *attr;
@@ -113336,119 +137748,90 @@ index 0e5c711..940c5c0 100644
int error = 0;
int i;
-@@ -1918,21 +1972,21 @@ static void set_section_ro_nx(void *base,
+@@ -1866,30 +1928,28 @@ static void mod_sysfs_teardown(struct module *mod)
+ static void frob_text(const struct module_layout *layout,
+ int (*set_memory)(unsigned long start, int num_pages))
+ {
+- BUG_ON((unsigned long)layout->base & (PAGE_SIZE-1));
+- BUG_ON((unsigned long)layout->text_size & (PAGE_SIZE-1));
+- set_memory((unsigned long)layout->base,
+- layout->text_size >> PAGE_SHIFT);
++ BUG_ON((unsigned long)layout->base_rx & (PAGE_SIZE-1));
++ BUG_ON((unsigned long)layout->size_rx & (PAGE_SIZE-1));
++ set_memory((unsigned long)layout->base_rx,
++ layout->size_rx >> PAGE_SHIFT);
+ }
- static void unset_module_core_ro_nx(struct module *mod)
+ static void frob_rodata(const struct module_layout *layout,
+ int (*set_memory)(unsigned long start, int num_pages))
{
-- set_page_attributes(mod->module_core + mod->core_text_size,
-- mod->module_core + mod->core_size,
-+ set_page_attributes(mod->module_core_rw,
-+ mod->module_core_rw + mod->core_size_rw,
- set_memory_x);
-- set_page_attributes(mod->module_core,
-- mod->module_core + mod->core_ro_size,
-+ set_page_attributes(mod->module_core_rx,
-+ mod->module_core_rx + mod->core_size_rx,
- set_memory_rw);
+- BUG_ON((unsigned long)layout->base & (PAGE_SIZE-1));
+- BUG_ON((unsigned long)layout->text_size & (PAGE_SIZE-1));
+- BUG_ON((unsigned long)layout->ro_size & (PAGE_SIZE-1));
+- set_memory((unsigned long)layout->base + layout->text_size,
+- (layout->ro_size - layout->text_size) >> PAGE_SHIFT);
++ BUG_ON((unsigned long)layout->base_rx & (PAGE_SIZE-1));
++ BUG_ON((unsigned long)layout->size_rx & (PAGE_SIZE-1));
++// BUG_ON((unsigned long)layout->size_ro & (PAGE_SIZE-1));
++// set_memory((unsigned long)layout->base_rx + layout->size_rx,
++// (layout->size_ro - layout->size_rx) >> PAGE_SHIFT);
}
- static void unset_module_init_ro_nx(struct module *mod)
+ static void frob_writable_data(const struct module_layout *layout,
+ int (*set_memory)(unsigned long start, int num_pages))
{
-- set_page_attributes(mod->module_init + mod->init_text_size,
-- mod->module_init + mod->init_size,
-+ set_page_attributes(mod->module_init_rw,
-+ mod->module_init_rw + mod->init_size_rw,
- set_memory_x);
-- set_page_attributes(mod->module_init,
-- mod->module_init + mod->init_ro_size,
-+ set_page_attributes(mod->module_init_rx,
-+ mod->module_init_rx + mod->init_size_rx,
- set_memory_rw);
+- BUG_ON((unsigned long)layout->base & (PAGE_SIZE-1));
+- BUG_ON((unsigned long)layout->ro_size & (PAGE_SIZE-1));
+- BUG_ON((unsigned long)layout->size & (PAGE_SIZE-1));
+- set_memory((unsigned long)layout->base + layout->ro_size,
+- (layout->size - layout->ro_size) >> PAGE_SHIFT);
++ BUG_ON((unsigned long)layout->base_rw & (PAGE_SIZE-1));
++ BUG_ON((unsigned long)layout->size_rw & (PAGE_SIZE-1));
++ set_memory((unsigned long)layout->base_rw, layout->size_rw >> PAGE_SHIFT);
+ }
+
+ /* livepatching wants to disable read-only so it can frob module. */
+@@ -1966,7 +2026,15 @@ static void disable_ro_nx(const struct module_layout *layout)
}
-@@ -1945,14 +1999,14 @@ void set_all_modules_text_rw(void)
- list_for_each_entry_rcu(mod, &modules, list) {
- if (mod->state == MODULE_STATE_UNFORMED)
- continue;
-- if ((mod->module_core) && (mod->core_text_size)) {
-- set_page_attributes(mod->module_core,
-- mod->module_core + mod->core_text_size,
-+ if ((mod->module_core_rx) && (mod->core_size_rx)) {
-+ set_page_attributes(mod->module_core_rx,
-+ mod->module_core_rx + mod->core_size_rx,
- set_memory_rw);
- }
-- if ((mod->module_init) && (mod->init_text_size)) {
-- set_page_attributes(mod->module_init,
-- mod->module_init + mod->init_text_size,
-+ if ((mod->module_init_rx) && (mod->init_size_rx)) {
-+ set_page_attributes(mod->module_init_rx,
-+ mod->module_init_rx + mod->init_size_rx,
- set_memory_rw);
- }
- }
-@@ -1968,14 +2022,14 @@ void set_all_modules_text_ro(void)
- list_for_each_entry_rcu(mod, &modules, list) {
- if (mod->state == MODULE_STATE_UNFORMED)
- continue;
-- if ((mod->module_core) && (mod->core_text_size)) {
-- set_page_attributes(mod->module_core,
-- mod->module_core + mod->core_text_size,
-+ if ((mod->module_core_rx) && (mod->core_size_rx)) {
-+ set_page_attributes(mod->module_core_rx,
-+ mod->module_core_rx + mod->core_size_rx,
- set_memory_ro);
- }
-- if ((mod->module_init) && (mod->init_text_size)) {
-- set_page_attributes(mod->module_init,
-- mod->module_init + mod->init_text_size,
-+ if ((mod->module_init_rx) && (mod->init_size_rx)) {
-+ set_page_attributes(mod->module_init_rx,
-+ mod->module_init_rx + mod->init_size_rx,
- set_memory_ro);
- }
- }
-@@ -1984,7 +2038,15 @@ void set_all_modules_text_ro(void)
#else
- static inline void set_section_ro_nx(void *base, unsigned long text_size, unsigned long ro_size, unsigned long total_size) { }
- static void unset_module_core_ro_nx(struct module *mod) { }
--static void unset_module_init_ro_nx(struct module *mod) { }
-+static void unset_module_init_ro_nx(struct module *mod)
+-static void disable_ro_nx(const struct module_layout *layout) { }
++static void disable_ro_nx(const struct module_layout *layout)
+{
+
+#ifdef CONFIG_PAX_KERNEXEC
-+ set_memory_nx((unsigned long)mod->module_init_rx, PFN_UP(mod->init_size_rx));
-+ set_memory_rw((unsigned long)mod->module_init_rx, PFN_UP(mod->init_size_rx));
++ set_memory_nx((unsigned long)layout->base_rx, PFN_UP(layout->size_rx));
++ set_memory_rw((unsigned long)layout->base_rx, PFN_UP(layout->size_rx));
+#endif
+
+}
+ static void module_enable_nx(const struct module *mod) { }
+ static void module_disable_nx(const struct module *mod) { }
#endif
-
- void __weak module_memfree(void *module_region)
-@@ -2039,16 +2101,19 @@ static void free_module(struct module *mod)
- /* This may be NULL, but that's OK */
- unset_module_init_ro_nx(mod);
+@@ -2023,16 +2091,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);
-- module_memfree(mod->module_init);
-+ module_memfree(mod->module_init_rw);
-+ module_memfree_exec(mod->module_init_rx);
+- module_memfree(mod->init_layout.base);
++ module_memfree(mod->init_layout.base_rw);
++ module_memfree_exec(mod->init_layout.base_rx);
kfree(mod->args);
percpu_modfree(mod);
/* Free lock-classes; relies on the preceding sync_rcu(). */
-- lockdep_free_key_range(mod->module_core, mod->core_size);
-+ lockdep_free_key_range(mod->module_core_rx, mod->core_size_rx);
-+ lockdep_free_key_range(mod->module_core_rw, mod->core_size_rw);
+- lockdep_free_key_range(mod->core_layout.base, mod->core_layout.size);
++ lockdep_free_key_range(mod->core_layout.base_rw, mod->core_layout.size_rw);
++ lockdep_free_key_range(mod->core_layout.base_rx, mod->core_layout.size_rx);
/* Finally, free the core (containing the module structure) */
- unset_module_core_ro_nx(mod);
-- module_memfree(mod->module_core);
-+ module_memfree_exec(mod->module_core_rx);
-+ module_memfree(mod->module_core_rw);
+ disable_ro_nx(&mod->core_layout);
+- module_memfree(mod->core_layout.base);
++ module_memfree_exec(mod->core_layout.base_rx);
++ module_memfree(mod->core_layout.base_rw);
#ifdef CONFIG_MPU
update_protections(current->mm);
-@@ -2117,9 +2182,31 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
+@@ -2101,9 +2172,31 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
int ret = 0;
const struct kernel_symbol *ksym;
@@ -113480,7 +137863,7 @@ index 0e5c711..940c5c0 100644
switch (sym[i].st_shndx) {
case SHN_COMMON:
/* Ignore common symbols */
-@@ -2144,7 +2231,9 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
+@@ -2128,7 +2221,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)) {
@@ -113490,7 +137873,7 @@ index 0e5c711..940c5c0 100644
break;
}
-@@ -2163,11 +2252,20 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
+@@ -2147,11 +2242,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;
@@ -113511,127 +137894,129 @@ index 0e5c711..940c5c0 100644
return ret;
}
-@@ -2251,22 +2349,12 @@ static void layout_sections(struct module *mod, struct load_info *info)
+@@ -2235,22 +2339,12 @@ static void layout_sections(struct module *mod, struct load_info *info)
|| s->sh_entsize != ~0UL
|| strstarts(sname, ".init"))
continue;
-- s->sh_entsize = get_offset(mod, &mod->core_size, s, i);
+- s->sh_entsize = get_offset(mod, &mod->core_layout.size, s, i);
+ if ((s->sh_flags & SHF_WRITE) || !(s->sh_flags & SHF_ALLOC))
-+ s->sh_entsize = get_offset(mod, &mod->core_size_rw, s, i);
++ s->sh_entsize = get_offset(mod, &mod->core_layout.size_rw, s, i);
+ else
-+ s->sh_entsize = get_offset(mod, &mod->core_size_rx, s, i);
++ s->sh_entsize = get_offset(mod, &mod->core_layout.size_rx, s, i);
pr_debug("\t%s\n", sname);
}
- switch (m) {
- case 0: /* executable */
-- mod->core_size = debug_align(mod->core_size);
-- mod->core_text_size = mod->core_size;
+- mod->core_layout.size = debug_align(mod->core_layout.size);
+- mod->core_layout.text_size = mod->core_layout.size;
- break;
- case 1: /* RO: text and ro-data */
-- mod->core_size = debug_align(mod->core_size);
-- mod->core_ro_size = mod->core_size;
+- mod->core_layout.size = debug_align(mod->core_layout.size);
+- mod->core_layout.ro_size = mod->core_layout.size;
- break;
- case 3: /* whole core */
-- mod->core_size = debug_align(mod->core_size);
+- mod->core_layout.size = debug_align(mod->core_layout.size);
- break;
- }
}
pr_debug("Init section allocation order:\n");
-@@ -2280,23 +2368,13 @@ static void layout_sections(struct module *mod, struct load_info *info)
+@@ -2264,23 +2358,13 @@ static void layout_sections(struct module *mod, struct load_info *info)
|| s->sh_entsize != ~0UL
|| !strstarts(sname, ".init"))
continue;
-- s->sh_entsize = (get_offset(mod, &mod->init_size, s, i)
+- s->sh_entsize = (get_offset(mod, &mod->init_layout.size, s, i)
- | INIT_OFFSET_MASK);
+ if ((s->sh_flags & SHF_WRITE) || !(s->sh_flags & SHF_ALLOC))
-+ s->sh_entsize = get_offset(mod, &mod->init_size_rw, s, i);
++ s->sh_entsize = get_offset(mod, &mod->init_layout.size_rw, s, i);
+ else
-+ s->sh_entsize = get_offset(mod, &mod->init_size_rx, s, i);
++ s->sh_entsize = get_offset(mod, &mod->init_layout.size_rx, s, i);
+ s->sh_entsize |= INIT_OFFSET_MASK;
pr_debug("\t%s\n", sname);
}
- switch (m) {
- case 0: /* executable */
-- mod->init_size = debug_align(mod->init_size);
-- mod->init_text_size = mod->init_size;
+- mod->init_layout.size = debug_align(mod->init_layout.size);
+- mod->init_layout.text_size = mod->init_layout.size;
- break;
- case 1: /* RO: text and ro-data */
-- mod->init_size = debug_align(mod->init_size);
-- mod->init_ro_size = mod->init_size;
+- mod->init_layout.size = debug_align(mod->init_layout.size);
+- mod->init_layout.ro_size = mod->init_layout.size;
- break;
- case 3: /* whole init */
-- mod->init_size = debug_align(mod->init_size);
+- mod->init_layout.size = debug_align(mod->init_layout.size);
- break;
- }
}
}
-@@ -2469,7 +2547,7 @@ static void layout_symtab(struct module *mod, struct load_info *info)
+@@ -2458,7 +2542,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;
-- symsect->sh_entsize = get_offset(mod, &mod->init_size, symsect,
-+ symsect->sh_entsize = get_offset(mod, &mod->init_size_rx, symsect,
+- symsect->sh_entsize = get_offset(mod, &mod->init_layout.size, symsect,
++ symsect->sh_entsize = get_offset(mod, &mod->init_layout.size_rx, symsect,
info->index.sym) | INIT_OFFSET_MASK;
pr_debug("\t%s\n", info->secstrings + symsect->sh_name);
-@@ -2486,23 +2564,23 @@ static void layout_symtab(struct module *mod, struct load_info *info)
+@@ -2476,23 +2560,23 @@ static void layout_symtab(struct module *mod, struct load_info *info)
}
/* Append room for core symbols at end of core part. */
-- info->symoffs = ALIGN(mod->core_size, symsect->sh_addralign ?: 1);
-- info->stroffs = mod->core_size = info->symoffs + ndst * sizeof(Elf_Sym);
-- mod->core_size += strtab_size;
-- mod->core_size = debug_align(mod->core_size);
-+ info->symoffs = ALIGN(mod->core_size_rx, symsect->sh_addralign ?: 1);
-+ info->stroffs = mod->core_size_rx = info->symoffs + ndst * sizeof(Elf_Sym);
-+ mod->core_size_rx += strtab_size;
-+ mod->core_size_rx = debug_align(mod->core_size_rx);
+- info->symoffs = ALIGN(mod->core_layout.size, symsect->sh_addralign ?: 1);
+- info->stroffs = mod->core_layout.size = info->symoffs + ndst * sizeof(Elf_Sym);
+- mod->core_layout.size += strtab_size;
+- mod->core_layout.size = debug_align(mod->core_layout.size);
++ info->symoffs = ALIGN(mod->core_layout.size_rx, symsect->sh_addralign ?: 1);
++ info->stroffs = mod->core_layout.size_rx = info->symoffs + ndst * sizeof(Elf_Sym);
++ mod->core_layout.size_rx += strtab_size;
++ mod->core_layout.size_rx = debug_align(mod->core_layout.size_rx);
/* Put string table section at end of init part of module. */
strsect->sh_flags |= SHF_ALLOC;
-- strsect->sh_entsize = get_offset(mod, &mod->init_size, strsect,
-+ strsect->sh_entsize = get_offset(mod, &mod->init_size_rx, strsect,
+- strsect->sh_entsize = get_offset(mod, &mod->init_layout.size, strsect,
++ strsect->sh_entsize = get_offset(mod, &mod->init_layout.size_rx, strsect,
info->index.str) | INIT_OFFSET_MASK;
pr_debug("\t%s\n", info->secstrings + strsect->sh_name);
/* We'll tack temporary mod_kallsyms on the end. */
-- mod->init_size = ALIGN(mod->init_size,
-+ mod->init_size_rx = ALIGN(mod->init_size_rx,
- __alignof__(struct mod_kallsyms));
-- info->mod_kallsyms_init_off = mod->init_size;
-- mod->init_size += sizeof(struct mod_kallsyms);
-- mod->init_size = debug_align(mod->init_size);
-+ info->mod_kallsyms_init_off = mod->init_size_rx;
-+ mod->init_size_rx += sizeof(struct mod_kallsyms);
-+ mod->init_size_rx = debug_align(mod->init_size_rx);
+- mod->init_layout.size = ALIGN(mod->init_layout.size,
++ mod->init_layout.size_rx = ALIGN(mod->init_layout.size_rx,
+ __alignof__(struct mod_kallsyms));
+- info->mod_kallsyms_init_off = mod->init_layout.size;
+- mod->init_layout.size += sizeof(struct mod_kallsyms);
+- mod->init_layout.size = debug_align(mod->init_layout.size);
++ info->mod_kallsyms_init_off = mod->init_layout.size_rx;
++ mod->init_layout.size_rx += sizeof(struct mod_kallsyms);
++ mod->init_layout.size_rx = debug_align(mod->init_layout.size_rx);
}
/*
-@@ -2519,7 +2597,9 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
+@@ -2509,7 +2593,11 @@ 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. */
-- mod->kallsyms = mod->module_init + info->mod_kallsyms_init_off;
-+ mod->kallsyms = mod->module_init_rx + info->mod_kallsyms_init_off;
+- mod->kallsyms = mod->init_layout.base + info->mod_kallsyms_init_off;
++ mod->kallsyms = mod->init_layout.base_rx + info->mod_kallsyms_init_off;
++
++ pax_open_kernel();
+
+ pax_open_kernel();
mod->kallsyms->symtab = (void *)symsec->sh_addr;
mod->kallsyms->num_symtab = symsec->sh_size / sizeof(Elf_Sym);
-@@ -2532,8 +2612,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
+@@ -2522,8 +2610,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
= elf_type(&mod->kallsyms->symtab[i], info);
/* Now populate the cut down core kallsyms for after init. */
-- mod->core_kallsyms.symtab = dst = mod->module_core + info->symoffs;
-- mod->core_kallsyms.strtab = s = mod->module_core + info->stroffs;
-+ mod->core_kallsyms.symtab = dst = mod->module_core_rx + info->symoffs;
-+ mod->core_kallsyms.strtab = s = mod->module_core_rx + info->stroffs;
+- mod->core_kallsyms.symtab = dst = mod->core_layout.base + info->symoffs;
+- mod->core_kallsyms.strtab = s = mod->core_layout.base + info->stroffs;
++ mod->core_kallsyms.symtab = dst = mod->core_layout.base_rx + info->symoffs;
++ 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 ||
-@@ -2545,6 +2625,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
+@@ -2536,6 +2624,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
}
}
mod->core_kallsyms.num_symtab = ndst;
@@ -113640,7 +138025,7 @@ index 0e5c711..940c5c0 100644
}
#else
static inline void layout_symtab(struct module *mod, struct load_info *info)
-@@ -2844,7 +2926,15 @@ static struct module *setup_load_info(struct load_info *info, int flags)
+@@ -2835,7 +2925,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) {
@@ -113656,14 +138041,14 @@ index 0e5c711..940c5c0 100644
return ERR_PTR(-ENOEXEC);
}
-@@ -2860,8 +2950,14 @@ static struct module *setup_load_info(struct load_info *info, int flags)
+@@ -2851,8 +2949,14 @@ 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");
+ const char *license = get_modinfo(info, "license");
int err;
-+#ifdef CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR
++#if defined(CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR) || defined(CONFIG_PAX_RAP)
+ if (!license || !license_is_gpl_compatible(license))
+ return -ENOEXEC;
+#endif
@@ -113671,7 +138056,7 @@ index 0e5c711..940c5c0 100644
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
modmagic = NULL;
-@@ -2886,7 +2982,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
+@@ -2877,7 +2981,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags)
}
/* Set up license info based on the info section */
@@ -113680,102 +138065,102 @@ index 0e5c711..940c5c0 100644
return 0;
}
-@@ -2983,7 +3079,7 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -2974,7 +3078,7 @@ static int move_module(struct module *mod, struct load_info *info)
void *ptr;
/* Do the allocs. */
-- ptr = module_alloc(mod->core_size);
-+ ptr = module_alloc(mod->core_size_rw);
+- ptr = module_alloc(mod->core_layout.size);
++ ptr = module_alloc(mod->core_layout.size_rw);
/*
* The pointer to this block is stored in the module structure
* which is inside the block. Just mark it as not being a
-@@ -2993,11 +3089,11 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -2984,11 +3088,11 @@ static int move_module(struct module *mod, struct load_info *info)
if (!ptr)
return -ENOMEM;
-- memset(ptr, 0, mod->core_size);
-- mod->module_core = ptr;
-+ memset(ptr, 0, mod->core_size_rw);
-+ mod->module_core_rw = ptr;
+- memset(ptr, 0, mod->core_layout.size);
+- mod->core_layout.base = ptr;
++ memset(ptr, 0, mod->core_layout.size_rw);
++ mod->core_layout.base_rw = ptr;
-- if (mod->init_size) {
-- ptr = module_alloc(mod->init_size);
-+ if (mod->init_size_rw) {
-+ ptr = module_alloc(mod->init_size_rw);
+- if (mod->init_layout.size) {
+- ptr = module_alloc(mod->init_layout.size);
++ if (mod->init_layout.size_rw) {
++ ptr = module_alloc(mod->init_layout.size_rw);
/*
* The pointer to this block is stored in the module structure
* which is inside the block. This block doesn't need to be
-@@ -3006,13 +3102,45 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -2997,13 +3101,45 @@ static int move_module(struct module *mod, struct load_info *info)
*/
kmemleak_ignore(ptr);
if (!ptr) {
-- module_memfree(mod->module_core);
-+ module_memfree(mod->module_core_rw);
+- module_memfree(mod->core_layout.base);
++ module_memfree(mod->core_layout.base_rw);
return -ENOMEM;
}
-- memset(ptr, 0, mod->init_size);
-- mod->module_init = ptr;
-+ memset(ptr, 0, mod->init_size_rw);
-+ mod->module_init_rw = ptr;
+- memset(ptr, 0, mod->init_layout.size);
+- mod->init_layout.base = ptr;
++ memset(ptr, 0, mod->init_layout.size_rw);
++ mod->init_layout.base_rw = ptr;
} else
-- mod->module_init = NULL;
-+ mod->module_init_rw = NULL;
+- mod->init_layout.base = NULL;
++ mod->init_layout.base_rw = NULL;
+
-+ ptr = module_alloc_exec(mod->core_size_rx);
++ ptr = module_alloc_exec(mod->core_layout.size_rx);
+ kmemleak_not_leak(ptr);
+ if (!ptr) {
-+ if (mod->module_init_rw)
-+ module_memfree(mod->module_init_rw);
-+ module_memfree(mod->module_core_rw);
++ if (mod->init_layout.base_rw)
++ module_memfree(mod->init_layout.base_rw);
++ module_memfree(mod->core_layout.base_rw);
+ return -ENOMEM;
+ }
+
+ pax_open_kernel();
-+ memset(ptr, 0, mod->core_size_rx);
++ memset(ptr, 0, mod->core_layout.size_rx);
+ pax_close_kernel();
-+ mod->module_core_rx = ptr;
++ mod->core_layout.base_rx = ptr;
+
-+ if (mod->init_size_rx) {
-+ ptr = module_alloc_exec(mod->init_size_rx);
++ if (mod->init_layout.size_rx) {
++ ptr = module_alloc_exec(mod->init_layout.size_rx);
+ kmemleak_ignore(ptr);
+ if (!ptr) {
-+ module_memfree_exec(mod->module_core_rx);
-+ if (mod->module_init_rw)
-+ module_memfree(mod->module_init_rw);
-+ module_memfree(mod->module_core_rw);
++ module_memfree(mod->core_layout.base_rx);
++ if (mod->init_layout.base_rw)
++ module_memfree(mod->init_layout.base_rw);
++ module_memfree(mod->core_layout.base_rw);
+ return -ENOMEM;
+ }
+
+ pax_open_kernel();
-+ memset(ptr, 0, mod->init_size_rx);
++ memset(ptr, 0, mod->init_layout.size_rx);
+ pax_close_kernel();
-+ mod->module_init_rx = ptr;
++ mod->init_layout.base_rx = ptr;
+ } else
-+ mod->module_init_rx = NULL;
++ mod->init_layout.base_rx = NULL;
/* Transfer each section which specifies SHF_ALLOC */
pr_debug("final section addresses:\n");
-@@ -3023,16 +3151,45 @@ static int move_module(struct module *mod, struct load_info *info)
+@@ -3014,16 +3150,45 @@ static int move_module(struct module *mod, struct load_info *info)
if (!(shdr->sh_flags & SHF_ALLOC))
continue;
- if (shdr->sh_entsize & INIT_OFFSET_MASK)
-- dest = mod->module_init
+- dest = mod->init_layout.base
- + (shdr->sh_entsize & ~INIT_OFFSET_MASK);
- else
-- dest = mod->module_core + shdr->sh_entsize;
+- dest = mod->core_layout.base + shdr->sh_entsize;
+ if (shdr->sh_entsize & INIT_OFFSET_MASK) {
+ if ((shdr->sh_flags & SHF_WRITE) || !(shdr->sh_flags & SHF_ALLOC))
-+ dest = mod->module_init_rw
++ dest = mod->init_layout.base_rw
+ + (shdr->sh_entsize & ~INIT_OFFSET_MASK);
+ else
-+ dest = mod->module_init_rx
++ dest = mod->init_layout.base_rx
+ + (shdr->sh_entsize & ~INIT_OFFSET_MASK);
+ } else {
+ if ((shdr->sh_flags & SHF_WRITE) || !(shdr->sh_flags & SHF_ALLOC))
-+ dest = mod->module_core_rw + shdr->sh_entsize;
++ dest = mod->core_layout.base_rw + shdr->sh_entsize;
+ else
-+ dest = mod->module_core_rx + shdr->sh_entsize;
++ dest = mod->core_layout.base_rx + shdr->sh_entsize;
+ }
+
+ if (shdr->sh_type != SHT_NOBITS) {
@@ -113808,39 +138193,39 @@ index 0e5c711..940c5c0 100644
pr_debug("\t0x%lx %s\n",
(long)shdr->sh_addr, info->secstrings + shdr->sh_name);
}
-@@ -3089,12 +3246,12 @@ static void flush_module_icache(const struct module *mod)
+@@ -3080,12 +3245,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.
*/
-- if (mod->module_init)
-- flush_icache_range((unsigned long)mod->module_init,
-- (unsigned long)mod->module_init
-- + mod->init_size);
-- flush_icache_range((unsigned long)mod->module_core,
-- (unsigned long)mod->module_core + mod->core_size);
-+ if (mod->module_init_rx)
-+ flush_icache_range((unsigned long)mod->module_init_rx,
-+ (unsigned long)mod->module_init_rx
-+ + mod->init_size_rx);
-+ flush_icache_range((unsigned long)mod->module_core_rx,
-+ (unsigned long)mod->module_core_rx + mod->core_size_rx);
+- if (mod->init_layout.base)
+- flush_icache_range((unsigned long)mod->init_layout.base,
+- (unsigned long)mod->init_layout.base
+- + mod->init_layout.size);
+- flush_icache_range((unsigned long)mod->core_layout.base,
+- (unsigned long)mod->core_layout.base + mod->core_layout.size);
++ if (mod->init_layout.base_rx)
++ flush_icache_range((unsigned long)mod->init_layout.base_rx,
++ (unsigned long)mod->init_layout.base_rx
++ + mod->init_layout.size_rx);
++ flush_icache_range((unsigned long)mod->core_layout.base_rx,
++ (unsigned long)mod->core_layout.base_rx + mod->core_layout.size_rx);
set_fs(old_fs);
}
-@@ -3152,8 +3309,10 @@ static void module_deallocate(struct module *mod, struct load_info *info)
+@@ -3143,8 +3308,10 @@ static void module_deallocate(struct module *mod, struct load_info *info)
{
percpu_modfree(mod);
module_arch_freeing_init(mod);
-- module_memfree(mod->module_init);
-- module_memfree(mod->module_core);
-+ module_memfree_exec(mod->module_init_rx);
-+ module_memfree_exec(mod->module_core_rx);
-+ module_memfree(mod->module_init_rw);
-+ module_memfree(mod->module_core_rw);
+- module_memfree(mod->init_layout.base);
+- module_memfree(mod->core_layout.base);
++ module_memfree_exec(mod->init_layout.base_rx);
++ module_memfree_exec(mod->core_layout.base_rx);
++ module_memfree(mod->init_layout.base_rw);
++ module_memfree(mod->core_layout.base_rw);
}
int __weak module_finalize(const Elf_Ehdr *hdr,
-@@ -3166,7 +3325,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr,
+@@ -3157,7 +3324,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. */
@@ -113850,7 +138235,7 @@ index 0e5c711..940c5c0 100644
/* Copy relocated percpu area over. */
percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr,
-@@ -3214,13 +3375,15 @@ static void do_mod_ctors(struct module *mod)
+@@ -3205,13 +3374,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;
@@ -113868,57 +138253,32 @@ index 0e5c711..940c5c0 100644
kfree(m);
}
-@@ -3240,7 +3403,8 @@ static noinline int do_init_module(struct module *mod)
+@@ -3231,7 +3402,8 @@ static noinline int do_init_module(struct module *mod)
ret = -ENOMEM;
goto fail;
}
-- freeinit->module_init = mod->module_init;
-+ freeinit->module_init_rw = mod->module_init_rw;
-+ freeinit->module_init_rx = mod->module_init_rx;
+- freeinit->module_init = mod->init_layout.base;
++ freeinit->module_init_rx = mod->init_layout.base_rx;
++ freeinit->module_init_rw = mod->init_layout.base_rw;
/*
* We want to find out whether @mod uses async during init. Clear
-@@ -3299,10 +3463,10 @@ static noinline int do_init_module(struct module *mod)
+@@ -3290,10 +3462,10 @@ static noinline int do_init_module(struct module *mod)
mod_tree_remove_init(mod);
- unset_module_init_ro_nx(mod);
+ disable_ro_nx(&mod->init_layout);
module_arch_freeing_init(mod);
-- mod->module_init = NULL;
-- mod->init_size = 0;
-- mod->init_ro_size = 0;
-- mod->init_text_size = 0;
-+ mod->module_init_rw = NULL;
-+ mod->module_init_rx = NULL;
-+ mod->init_size_rw = 0;
-+ mod->init_size_rx = 0;
+- mod->init_layout.base = NULL;
+- mod->init_layout.size = 0;
+- mod->init_layout.ro_size = 0;
+- mod->init_layout.text_size = 0;
++ mod->init_layout.base_rx = NULL;
++ mod->init_layout.base_rw = NULL;
++ mod->init_layout.size_rx = 0;
++ mod->init_layout.size_rw = 0;
/*
* We want to free module_init, but be aware that kallsyms may be
* walking this with preempt disabled. In all the failure paths, we
-@@ -3392,16 +3556,16 @@ static int complete_formation(struct module *mod, struct load_info *info)
- module_bug_finalize(info->hdr, info->sechdrs, mod);
-
- /* Set RO and NX regions for core */
-- set_section_ro_nx(mod->module_core,
-- mod->core_text_size,
-- mod->core_ro_size,
-- mod->core_size);
-+ set_section_ro_nx(mod->module_core_rx,
-+ mod->core_size_rx,
-+ mod->core_size_rx,
-+ mod->core_size_rx);
-
- /* Set RO and NX regions for init */
-- set_section_ro_nx(mod->module_init,
-- mod->init_text_size,
-- mod->init_ro_size,
-- mod->init_size);
-+ set_section_ro_nx(mod->module_init_rx,
-+ mod->init_size_rx,
-+ mod->init_size_rx,
-+ mod->init_size_rx);
-
- /* Mark state as coming so strong_try_module_get() ignores us,
- * but kallsyms etc. can see us. */
-@@ -3496,9 +3660,38 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3481,9 +3653,38 @@ static int load_module(struct load_info *info, const char __user *uargs,
if (err)
goto free_unload;
@@ -113957,7 +138317,7 @@ index 0e5c711..940c5c0 100644
/* Fix up syms, so that st_value is a pointer to location. */
err = simplify_symbols(mod, info);
if (err < 0)
-@@ -3514,13 +3707,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3499,13 +3700,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
flush_module_icache(mod);
@@ -113971,7 +138331,7 @@ index 0e5c711..940c5c0 100644
dynamic_debug_setup(info->debug, info->num_debug);
/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
-@@ -3572,11 +3758,10 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3557,11 +3751,10 @@ static int load_module(struct load_info *info, const char __user *uargs,
ddebug_cleanup:
dynamic_debug_remove(info->debug);
synchronize_sched();
@@ -113984,55 +138344,55 @@ index 0e5c711..940c5c0 100644
free_unload:
module_unload_free(mod);
unlink_mod:
-@@ -3596,7 +3781,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
+@@ -3581,7 +3774,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() */
-- lockdep_free_key_range(mod->module_core, mod->core_size);
-+ lockdep_free_key_range(mod->module_core_rx, mod->core_size_rx);
-+ lockdep_free_key_range(mod->module_core_rw, mod->core_size_rw);
+- lockdep_free_key_range(mod->core_layout.base, mod->core_layout.size);
++ lockdep_free_key_range(mod->core_layout.base_rw, mod->core_layout.size_rw);
++ lockdep_free_key_range(mod->core_layout.base_rx, mod->core_layout.size_rx);
module_deallocate(mod, info);
free_copy:
-@@ -3679,10 +3865,16 @@ static const char *get_ksymbol(struct module *mod,
+@@ -3664,10 +3858,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 */
- if (within_module_init(addr, mod))
-- nextval = (unsigned long)mod->module_init+mod->init_text_size;
-+ if (within_module_init_rx(addr, mod))
-+ nextval = (unsigned long)mod->module_init_rx+mod->init_size_rx;
-+ else if (within_module_init_rw(addr, mod))
-+ nextval = (unsigned long)mod->module_init_rw+mod->init_size_rw;
-+ else if (within_module_core_rx(addr, mod))
-+ nextval = (unsigned long)mod->module_core_rx+mod->core_size_rx;
-+ else if (within_module_core_rw(addr, mod))
-+ nextval = (unsigned long)mod->module_core_rw+mod->core_size_rw;
+- nextval = (unsigned long)mod->init_layout.base+mod->init_layout.text_size;
++ if (within_module_rx(addr, &mod->init_layout))
++ nextval = (unsigned long)mod->init_layout.base_rx+mod->init_layout.size_rx;
++ else if (within_module_rw(addr, &mod->init_layout))
++ nextval = (unsigned long)mod->init_layout.base_rw+mod->init_layout.size_rw;
++ else if (within_module_rx(addr, &mod->core_layout))
++ nextval = (unsigned long)mod->core_layout.base_rx+mod->core_layout.size_rx;
++ else if (within_module_rw(addr, &mod->core_layout))
++ nextval = (unsigned long)mod->core_layout.base_rw+mod->core_layout.size_rw;
else
-- nextval = (unsigned long)mod->module_core+mod->core_text_size;
+- nextval = (unsigned long)mod->core_layout.base+mod->core_layout.text_size;
+ return NULL;
/* Scan for closest preceding symbol, and next symbol. (ELF
starts real symbols at 1). */
-@@ -3935,7 +4127,7 @@ static int m_show(struct seq_file *m, void *p)
+@@ -3920,7 +4120,7 @@ static int m_show(struct seq_file *m, void *p)
return 0;
seq_printf(m, "%s %u",
-- mod->name, mod->init_size + mod->core_size);
-+ mod->name, mod->init_size_rx + mod->init_size_rw + mod->core_size_rx + mod->core_size_rw);
+- mod->name, mod->init_layout.size + mod->core_layout.size);
++ mod->name, mod->init_layout.size_rx + mod->init_layout.size_rw + mod->core_layout.size_rx + mod->core_layout.size_rw);
print_unload_info(m, mod);
/* Informative for users. */
-@@ -3944,7 +4136,7 @@ static int m_show(struct seq_file *m, void *p)
+@@ -3929,7 +4129,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. */
-- seq_printf(m, " 0x%pK", mod->module_core);
-+ seq_printf(m, " 0x%pK 0x%pK", mod->module_core_rx, mod->module_core_rw);
+- seq_printf(m, " 0x%pK", mod->core_layout.base);
++ seq_printf(m, " 0x%pK 0x%pK", mod->core_layout.base_rx, mod->core_layout.base_rw);
/* Taints info */
if (mod->taints)
-@@ -3980,7 +4172,17 @@ static const struct file_operations proc_modules_operations = {
+@@ -3965,7 +4165,17 @@ static const struct file_operations proc_modules_operations = {
static int __init proc_modules_init(void)
{
@@ -114050,7 +138410,7 @@ index 0e5c711..940c5c0 100644
return 0;
}
module_init(proc_modules_init);
-@@ -4041,7 +4243,8 @@ struct module *__module_address(unsigned long addr)
+@@ -4026,7 +4236,8 @@ struct module *__module_address(unsigned long addr)
{
struct module *mod;
@@ -114060,7 +138420,7 @@ index 0e5c711..940c5c0 100644
return NULL;
module_assert_mutex_or_preempt();
-@@ -4084,11 +4287,20 @@ bool is_module_text_address(unsigned long addr)
+@@ -4069,11 +4280,21 @@ bool is_module_text_address(unsigned long addr)
*/
struct module *__module_text_address(unsigned long addr)
{
@@ -114078,9 +138438,10 @@ index 0e5c711..940c5c0 100644
+
if (mod) {
/* Make sure it's within the text section. */
-- if (!within(addr, mod->module_init, mod->init_text_size)
-- && !within(addr, mod->module_core, mod->core_text_size))
-+ if (!within_module_init_rx(addr, mod) && !within_module_core_rx(addr, mod))
+- if (!within(addr, mod->init_layout.base, mod->init_layout.text_size)
+- && !within(addr, mod->core_layout.base, mod->core_layout.text_size))
++ if (!within_module_rx(addr, &mod->init_layout)
++ && !within_module_rx(addr, &mod->core_layout))
mod = NULL;
}
return mod;
@@ -114163,7 +138524,7 @@ index b38bea9..91acfbe 100644
atomic_set(&pd->refcnt, 0);
pd->pinst = pinst;
diff --git a/kernel/panic.c b/kernel/panic.c
-index 41e2b54..5292098 100644
+index d96469d..81d6d28 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -55,7 +55,7 @@ EXPORT_SYMBOL(panic_blink);
@@ -114175,7 +138536,7 @@ index 41e2b54..5292098 100644
{
while (1)
cpu_relax();
-@@ -438,7 +438,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller,
+@@ -461,7 +461,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller,
disable_trace_on_warning();
pr_warn("------------[ cut here ]------------\n");
@@ -114184,7 +138545,34 @@ index 41e2b54..5292098 100644
raw_smp_processor_id(), current->pid, file, line, caller);
if (args)
-@@ -503,7 +503,8 @@ EXPORT_SYMBOL(warn_slowpath_null);
+@@ -485,7 +485,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller,
+ add_taint(taint, LOCKDEP_STILL_OK);
+ }
+
+-void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)
++void warn_slowpath_fmt(const char *file, const int line, const char *fmt, ...)
+ {
+ struct slowpath_args args;
+
+@@ -497,7 +497,7 @@ void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)
+ }
+ EXPORT_SYMBOL(warn_slowpath_fmt);
+
+-void warn_slowpath_fmt_taint(const char *file, int line,
++void warn_slowpath_fmt_taint(const char *file, const int line,
+ unsigned taint, const char *fmt, ...)
+ {
+ struct slowpath_args args;
+@@ -510,7 +510,7 @@ void warn_slowpath_fmt_taint(const char *file, int line,
+ }
+ EXPORT_SYMBOL(warn_slowpath_fmt_taint);
+
+-void warn_slowpath_null(const char *file, int line)
++void warn_slowpath_null(const char *file, const int line)
+ {
+ warn_slowpath_common(file, line, __builtin_return_address(0),
+ TAINT_WARN, NULL);
+@@ -526,7 +526,8 @@ EXPORT_SYMBOL(warn_slowpath_null);
*/
__visible void __stack_chk_fail(void)
{
@@ -114195,7 +138583,7 @@ index 41e2b54..5292098 100644
}
EXPORT_SYMBOL(__stack_chk_fail);
diff --git a/kernel/pid.c b/kernel/pid.c
-index 78b3d9f..1f368d5 100644
+index 4d73a83..4712357 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -33,6 +33,7 @@
@@ -114248,6 +138636,24 @@ index 78b3d9f..1f368d5 100644
struct pid *get_task_pid(struct task_struct *task, enum pid_type type)
{
struct pid *pid;
+@@ -497,7 +513,7 @@ struct pid *find_get_pid(pid_t nr)
+ }
+ EXPORT_SYMBOL_GPL(find_get_pid);
+
+-pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns)
++pid_t pid_nr_ns(const struct pid *pid, const struct pid_namespace *ns)
+ {
+ struct upid *upid;
+ pid_t nr = 0;
+@@ -511,7 +527,7 @@ pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns)
+ }
+ EXPORT_SYMBOL_GPL(pid_nr_ns);
+
+-pid_t pid_vnr(struct pid *pid)
++pid_t pid_vnr(const struct pid *pid)
+ {
+ return pid_nr_ns(pid, task_active_pid_ns(current));
+ }
diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c
index a65ba13..f600dbb 100644
--- a/kernel/pid_namespace.c
@@ -114262,7 +138668,7 @@ index a65ba13..f600dbb 100644
if (write && !ns_capable(pid_ns->user_ns, CAP_SYS_ADMIN))
return -EPERM;
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
-index 02e8dfa..8b4a8d3 100644
+index 68d3ebc..82bb833 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -34,6 +34,8 @@ config HIBERNATE_CALLBACKS
@@ -114318,10 +138724,10 @@ index 564f786..361a18e 100644
if (pm_wakeup_pending()) {
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
-index c048e34..8ef7f71 100644
+index c963ba5..8d51e8b 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
-@@ -478,7 +478,7 @@ static int log_store(int facility, int level,
+@@ -479,7 +479,7 @@ static int log_store(int facility, int level,
return msg->text_len;
}
@@ -114330,7 +138736,7 @@ index c048e34..8ef7f71 100644
static int syslog_action_restricted(int type)
{
-@@ -501,6 +501,11 @@ int check_syslog_permissions(int type, int source)
+@@ -502,6 +502,11 @@ int check_syslog_permissions(int type, int source)
if (source == SYSLOG_FROM_PROC && type != SYSLOG_ACTION_OPEN)
goto ok;
@@ -114404,7 +138810,7 @@ index 99513e1..0caa643 100644
}
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index 3189e51..fcc8509 100644
+index 2341efe..97ff52b 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -207,12 +207,32 @@ static int ptrace_check_attach(struct task_struct *child, bool ignore_state)
@@ -114470,7 +138876,7 @@ index 3189e51..fcc8509 100644
flags |= PT_PTRACE_CAP;
rcu_read_unlock();
task->ptrace = flags;
-@@ -537,7 +557,7 @@ int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst
+@@ -543,7 +563,7 @@ int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst
break;
return -EIO;
}
@@ -114479,7 +138885,7 @@ index 3189e51..fcc8509 100644
return -EFAULT;
copied += retval;
src += retval;
-@@ -838,7 +858,7 @@ int ptrace_request(struct task_struct *child, long request,
+@@ -844,7 +864,7 @@ int ptrace_request(struct task_struct *child, long request,
bool seized = child->ptrace & PT_SEIZED;
int ret = -EIO;
siginfo_t siginfo, *si;
@@ -114488,7 +138894,7 @@ index 3189e51..fcc8509 100644
unsigned long __user *datalp = datavp;
unsigned long flags;
-@@ -1089,14 +1109,21 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
+@@ -1095,14 +1115,21 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
goto out;
}
@@ -114511,7 +138917,7 @@ index 3189e51..fcc8509 100644
goto out_put_task_struct;
}
-@@ -1124,7 +1151,7 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
+@@ -1130,7 +1157,7 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
if (copied != sizeof(tmp))
return -EIO;
@@ -114520,7 +138926,7 @@ index 3189e51..fcc8509 100644
}
int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
-@@ -1217,7 +1244,7 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request,
+@@ -1223,7 +1250,7 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request,
}
COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,
@@ -114529,7 +138935,7 @@ index 3189e51..fcc8509 100644
{
struct task_struct *child;
long ret;
-@@ -1233,14 +1260,21 @@ COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,
+@@ -1239,14 +1266,21 @@ COMPAT_SYSCALL_DEFINE4(ptrace, compat_long_t, request, compat_long_t, pid,
goto out;
}
@@ -114553,7 +138959,7 @@ index 3189e51..fcc8509 100644
}
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
-index d89328e..a2c42e2 100644
+index d2988d0..36d0b79 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -134,12 +134,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1],
@@ -114584,7 +138990,7 @@ index d89328e..a2c42e2 100644
static struct list_head rcu_torture_removed;
static int rcu_torture_writer_state;
-@@ -211,11 +211,11 @@ rcu_torture_alloc(void)
+@@ -232,11 +232,11 @@ rcu_torture_alloc(void)
spin_lock_bh(&rcu_torture_lock);
if (list_empty(&rcu_torture_freelist)) {
@@ -114598,7 +139004,7 @@ index d89328e..a2c42e2 100644
p = rcu_torture_freelist.next;
list_del_init(p);
spin_unlock_bh(&rcu_torture_lock);
-@@ -228,7 +228,7 @@ rcu_torture_alloc(void)
+@@ -249,7 +249,7 @@ rcu_torture_alloc(void)
static void
rcu_torture_free(struct rcu_torture *p)
{
@@ -114607,7 +139013,7 @@ index d89328e..a2c42e2 100644
spin_lock_bh(&rcu_torture_lock);
list_add_tail(&p->rtort_free, &rcu_torture_freelist);
spin_unlock_bh(&rcu_torture_lock);
-@@ -309,7 +309,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp)
+@@ -330,7 +330,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp)
i = rp->rtort_pipe_count;
if (i > RCU_TORTURE_PIPE_LEN)
i = RCU_TORTURE_PIPE_LEN;
@@ -114616,7 +139022,7 @@ index d89328e..a2c42e2 100644
if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) {
rp->rtort_mbtest = 0;
return true;
-@@ -839,7 +839,7 @@ rcu_torture_cbflood(void *arg)
+@@ -860,7 +860,7 @@ rcu_torture_cbflood(void *arg)
VERBOSE_TOROUT_STRING("rcu_torture_cbflood task started");
do {
schedule_timeout_interruptible(cbflood_inter_holdoff);
@@ -114625,7 +139031,7 @@ index d89328e..a2c42e2 100644
WARN_ON(signal_pending(current));
for (i = 0; i < cbflood_n_burst; i++) {
for (j = 0; j < cbflood_n_per_burst; j++) {
-@@ -967,7 +967,7 @@ rcu_torture_writer(void *arg)
+@@ -988,7 +988,7 @@ rcu_torture_writer(void *arg)
i = old_rp->rtort_pipe_count;
if (i > RCU_TORTURE_PIPE_LEN)
i = RCU_TORTURE_PIPE_LEN;
@@ -114634,7 +139040,7 @@ index d89328e..a2c42e2 100644
old_rp->rtort_pipe_count++;
switch (synctype[torture_random(&rand) % nsynctypes]) {
case RTWS_DEF_FREE:
-@@ -1106,7 +1106,7 @@ static void rcu_torture_timer(unsigned long unused)
+@@ -1127,7 +1127,7 @@ static void rcu_torture_timer(unsigned long unused)
return;
}
if (p->rtort_mbtest == 0)
@@ -114643,7 +139049,7 @@ index d89328e..a2c42e2 100644
spin_lock(&rand_lock);
cur_ops->read_delay(&rand);
n_rcu_torture_timers++;
-@@ -1182,7 +1182,7 @@ rcu_torture_reader(void *arg)
+@@ -1203,7 +1203,7 @@ rcu_torture_reader(void *arg)
continue;
}
if (p->rtort_mbtest == 0)
@@ -114652,7 +139058,7 @@ index d89328e..a2c42e2 100644
cur_ops->read_delay(&rand);
preempt_disable();
pipe_count = p->rtort_pipe_count;
-@@ -1250,11 +1250,11 @@ rcu_torture_stats_print(void)
+@@ -1271,11 +1271,11 @@ rcu_torture_stats_print(void)
rcu_torture_current,
rcu_torture_current_version,
list_empty(&rcu_torture_freelist),
@@ -114668,7 +139074,7 @@ index d89328e..a2c42e2 100644
n_rcu_torture_boost_ktrerror,
n_rcu_torture_boost_rterror);
pr_cont("rtbf: %ld rtb: %ld nt: %ld ",
-@@ -1266,17 +1266,17 @@ rcu_torture_stats_print(void)
+@@ -1287,17 +1287,17 @@ rcu_torture_stats_print(void)
n_barrier_successes,
n_barrier_attempts,
n_rcu_torture_barrier_error);
@@ -114689,7 +139095,7 @@ index d89328e..a2c42e2 100644
WARN_ON_ONCE(1);
}
pr_cont("Reader Pipe: ");
-@@ -1293,7 +1293,7 @@ rcu_torture_stats_print(void)
+@@ -1314,7 +1314,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++) {
@@ -114698,7 +139104,7 @@ index d89328e..a2c42e2 100644
}
pr_cont("\n");
-@@ -1647,7 +1647,7 @@ rcu_torture_cleanup(void)
+@@ -1669,7 +1669,7 @@ rcu_torture_cleanup(void)
rcu_torture_stats_print(); /* -After- the stats thread is stopped! */
@@ -114707,7 +139113,7 @@ index d89328e..a2c42e2 100644
rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE");
else if (torture_onoff_failures())
rcu_torture_print_module_parms(cur_ops,
-@@ -1772,18 +1772,18 @@ rcu_torture_init(void)
+@@ -1794,18 +1794,18 @@ rcu_torture_init(void)
rcu_torture_current = NULL;
rcu_torture_current_version = 0;
@@ -114755,10 +139161,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 f07343b..5a4e86f5 100644
+index e41dd41..529179d 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
-@@ -336,7 +336,7 @@ static void rcu_momentary_dyntick_idle(void)
+@@ -324,7 +324,7 @@ static void rcu_momentary_dyntick_idle(void)
*/
rdtp = this_cpu_ptr(&rcu_dynticks);
smp_mb__before_atomic(); /* Earlier stuff before QS. */
@@ -114767,7 +139173,7 @@ index f07343b..5a4e86f5 100644
smp_mb__after_atomic(); /* Later stuff after QS. */
break;
}
-@@ -658,10 +658,10 @@ static void rcu_eqs_enter_common(long long oldval, bool user)
+@@ -650,10 +650,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. */
@@ -114780,7 +139186,7 @@ index f07343b..5a4e86f5 100644
rcu_dynticks_task_enter();
/*
-@@ -784,11 +784,11 @@ static void rcu_eqs_exit_common(long long oldval, int user)
+@@ -786,11 +786,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. */
@@ -114794,7 +139200,7 @@ index f07343b..5a4e86f5 100644
rcu_cleanup_after_idle();
trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting);
if (IS_ENABLED(CONFIG_RCU_EQS_DEBUG) &&
-@@ -924,12 +924,12 @@ void rcu_nmi_enter(void)
+@@ -936,12 +936,12 @@ void rcu_nmi_enter(void)
* to be in the outermost NMI handler that interrupted an RCU-idle
* period (observation due to Andy Lutomirski).
*/
@@ -114810,7 +139216,7 @@ index f07343b..5a4e86f5 100644
incby = 1;
}
rdtp->dynticks_nmi_nesting += incby;
-@@ -954,7 +954,7 @@ void rcu_nmi_exit(void)
+@@ -966,7 +966,7 @@ void rcu_nmi_exit(void)
* to us!)
*/
WARN_ON_ONCE(rdtp->dynticks_nmi_nesting <= 0);
@@ -114819,7 +139225,7 @@ index f07343b..5a4e86f5 100644
/*
* If the nesting level is not 1, the CPU wasn't RCU-idle, so
-@@ -969,9 +969,9 @@ void rcu_nmi_exit(void)
+@@ -981,9 +981,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. */
@@ -114831,7 +139237,7 @@ index f07343b..5a4e86f5 100644
}
/**
-@@ -984,7 +984,7 @@ void rcu_nmi_exit(void)
+@@ -996,7 +996,7 @@ void rcu_nmi_exit(void)
*/
bool notrace __rcu_is_watching(void)
{
@@ -114840,7 +139246,7 @@ index f07343b..5a4e86f5 100644
}
/**
-@@ -1067,7 +1067,7 @@ static int rcu_is_cpu_rrupt_from_idle(void)
+@@ -1079,7 +1079,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)
{
@@ -114849,7 +139255,7 @@ index f07343b..5a4e86f5 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"));
-@@ -1093,7 +1093,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
+@@ -1105,7 +1105,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
int *rcrmp;
unsigned int snap;
@@ -114858,7 +139264,7 @@ index f07343b..5a4e86f5 100644
snap = (unsigned int)rdp->dynticks_snap;
/*
-@@ -2934,7 +2934,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
+@@ -2943,7 +2943,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
/*
* Do RCU core processing for the current CPU.
*/
@@ -114867,7 +139273,7 @@ index f07343b..5a4e86f5 100644
{
struct rcu_state *rsp;
-@@ -3587,7 +3587,7 @@ static void rcu_report_exp_rdp(struct rcu_state *rsp, struct rcu_data *rdp,
+@@ -3589,7 +3589,7 @@ static void rcu_report_exp_rdp(struct rcu_state *rsp, struct rcu_data *rdp,
/* Common code for synchronize_{rcu,sched}_expedited() work-done checking. */
static bool sync_exp_work_done(struct rcu_state *rsp, struct rcu_node *rnp,
struct rcu_data *rdp,
@@ -114876,7 +139282,7 @@ index f07343b..5a4e86f5 100644
{
if (rcu_exp_gp_seq_done(rsp, s)) {
if (rnp)
-@@ -3596,7 +3596,7 @@ static bool sync_exp_work_done(struct rcu_state *rsp, struct rcu_node *rnp,
+@@ -3598,7 +3598,7 @@ static bool sync_exp_work_done(struct rcu_state *rsp, struct rcu_node *rnp,
mutex_unlock(&rdp->exp_funnel_mutex);
/* Ensure test happens before caller kfree(). */
smp_mb__before_atomic(); /* ^^^ */
@@ -114894,7 +139300,7 @@ index f07343b..5a4e86f5 100644
mask_ofl_test |= rdp->grpmask;
}
mask_ofl_ipi = rnp->expmask & ~mask_ofl_test;
-@@ -4156,7 +4156,7 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
+@@ -4182,7 +4182,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);
@@ -114903,7 +139309,7 @@ index f07343b..5a4e86f5 100644
rdp->cpu = cpu;
rdp->rsp = rsp;
mutex_init(&rdp->exp_funnel_mutex);
-@@ -4187,8 +4187,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp)
+@@ -4213,8 +4213,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);
@@ -114915,7 +139321,7 @@ index f07343b..5a4e86f5 100644
/*
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
-index 9fb4e23..e47417d 100644
+index 83360b4..84f45b0 100644
--- a/kernel/rcu/tree.h
+++ b/kernel/rcu/tree.h
@@ -114,11 +114,11 @@ struct rcu_dynticks {
@@ -114932,30 +139338,37 @@ index 9fb4e23..e47417d 100644
/* "Idle" excludes userspace execution. */
unsigned long dynticks_idle_jiffies;
/* End of last non-NMI non-idle period. */
-@@ -498,12 +498,12 @@ struct rcu_state {
- /* End of fields guarded by barrier_mutex. */
-
- unsigned long expedited_sequence; /* Take a ticket. */
+@@ -386,10 +386,10 @@ struct rcu_data {
+ 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_t expedited_normal; /* # fallbacks to normal. */
-- atomic_t expedited_need_qs; /* # CPUs left to check in. */
+ 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_unchecked_t expedited_normal; /* # fallbacks to normal. */
-+ atomic_unchecked_t expedited_need_qs; /* # CPUs left to check in. */
+
+ /* 7) Callback offloading. */
+ #ifdef CONFIG_RCU_NOCB_CPU
+@@ -504,8 +504,8 @@ struct rcu_state {
+ /* End of fields guarded by barrier_mutex. */
+
+ 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. */
++ atomic_long_unchecked_t expedited_normal;/* # fallbacks to normal. */
++ atomic_unchecked_t expedited_need_qs; /* # CPUs left to check in. */
wait_queue_head_t expedited_wq; /* Wait for check-ins. */
int ncpus_snap; /* # CPUs seen last time. */
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
-index 630c197..1db30ad 100644
+index 9467a8b..6b9809d 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
-@@ -1276,7 +1276,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
+@@ -1269,7 +1269,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
free_cpumask_var(cm);
}
@@ -114964,7 +139377,7 @@ index 630c197..1db30ad 100644
.store = &rcu_cpu_kthread_task,
.thread_should_run = rcu_cpu_kthread_should_run,
.thread_fn = rcu_cpu_kthread,
-@@ -1749,7 +1749,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
+@@ -1738,7 +1738,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,
@@ -114973,7 +139386,7 @@ index 630c197..1db30ad 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,
-@@ -2279,8 +2279,8 @@ static int rcu_nocb_kthread(void *arg)
+@@ -2267,8 +2267,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. */
@@ -114984,7 +139397,7 @@ index 630c197..1db30ad 100644
rdp->n_nocbs_invoked += c;
}
return 0;
-@@ -2630,9 +2630,9 @@ static void rcu_sysidle_enter(int irq)
+@@ -2618,9 +2618,9 @@ static void rcu_sysidle_enter(int irq)
j = jiffies;
WRITE_ONCE(rdtp->dynticks_idle_jiffies, j);
smp_mb__before_atomic();
@@ -114996,7 +139409,7 @@ index 630c197..1db30ad 100644
}
/*
-@@ -2703,9 +2703,9 @@ static void rcu_sysidle_exit(int irq)
+@@ -2691,9 +2691,9 @@ static void rcu_sysidle_exit(int irq)
/* Record end of idle period. */
smp_mb__before_atomic();
@@ -115008,7 +139421,7 @@ index 630c197..1db30ad 100644
/*
* If we are the timekeeping CPU, we are permitted to be non-idle
-@@ -2751,7 +2751,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
+@@ -2739,7 +2739,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. */
@@ -115018,10 +139431,10 @@ index 630c197..1db30ad 100644
*isidle = false; /* We are not idle! */
return;
diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c
-index ef7093c..1cc3d0f 100644
+index 1088e64..d3b77f7 100644
--- a/kernel/rcu/tree_trace.c
+++ b/kernel/rcu/tree_trace.c
-@@ -125,7 +125,7 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
+@@ -124,7 +124,7 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)
rdp->rcu_qs_ctr_snap == per_cpu(rcu_qs_ctr, rdp->cpu),
rdp->core_needs_qs);
seq_printf(m, " dt=%d/%llx/%d df=%lu",
@@ -115030,27 +139443,30 @@ index ef7093c..1cc3d0f 100644
rdp->dynticks->dynticks_nesting,
rdp->dynticks->dynticks_nmi_nesting,
rdp->dynticks_fqs);
-@@ -187,12 +187,12 @@ static int show_rcuexp(struct seq_file *m, void *v)
+@@ -189,15 +189,15 @@ 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,
-- atomic_long_read(&rsp->expedited_workdone0),
-- atomic_long_read(&rsp->expedited_workdone1),
-- atomic_long_read(&rsp->expedited_workdone2),
-- atomic_long_read(&rsp->expedited_workdone3),
+ rsp->expedited_sequence, s0, s1, s2, s3,
- atomic_long_read(&rsp->expedited_normal),
- atomic_read(&rsp->expedited_need_qs),
-+ atomic_long_read_unchecked(&rsp->expedited_workdone0),
-+ atomic_long_read_unchecked(&rsp->expedited_workdone1),
-+ atomic_long_read_unchecked(&rsp->expedited_workdone2),
-+ atomic_long_read_unchecked(&rsp->expedited_workdone3),
+ atomic_long_read_unchecked(&rsp->expedited_normal),
+ atomic_read_unchecked(&rsp->expedited_need_qs),
rsp->expedited_sequence / 2);
return 0;
}
diff --git a/kernel/resource.c b/kernel/resource.c
-index 249b1eb..b3451db 100644
+index 3669d1b..7edf101 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -84,8 +84,8 @@ static void *r_next(struct seq_file *m, void *v, loff_t *pos)
@@ -115093,7 +139509,7 @@ index 249b1eb..b3451db 100644
}
__initcall(ioresources_init);
diff --git a/kernel/sched/auto_group.c b/kernel/sched/auto_group.c
-index 750ed60..eb01466 100644
+index a5d966c..9c2d28b 100644
--- a/kernel/sched/auto_group.c
+++ b/kernel/sched/auto_group.c
@@ -9,7 +9,7 @@
@@ -115115,10 +139531,10 @@ index 750ed60..eb01466 100644
#ifdef CONFIG_RT_GROUP_SCHED
/*
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 70e5e09..87f2797 100644
+index a74073f8..757e116 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -2162,7 +2162,7 @@ void set_numabalancing_state(bool enabled)
+@@ -2263,7 +2263,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)
{
@@ -115127,7 +139543,25 @@ index 70e5e09..87f2797 100644
int err;
int state = static_branch_likely(&sched_numa_balancing);
-@@ -2683,8 +2683,10 @@ context_switch(struct rq *rq, struct task_struct *prev,
+@@ -2702,7 +2702,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)
+ {
+- struct callback_head *head, *next;
++ struct balance_callback *head, *next;
+ void (*func)(struct rq *rq);
+ unsigned long flags;
+
+@@ -2710,7 +2710,7 @@ static void __balance_callback(struct rq *rq)
+ head = rq->balance_callback;
+ rq->balance_callback = NULL;
+ while (head) {
+- func = (void (*)(struct rq *))head->func;
++ func = head->func;
+ next = head->next;
+ head->next = NULL;
+ head = next;
+@@ -2784,8 +2784,10 @@ context_switch(struct rq *rq, struct task_struct *prev,
next->active_mm = oldmm;
atomic_inc(&oldmm->mm_count);
enter_lazy_tlb(oldmm, next);
@@ -115139,7 +139573,7 @@ index 70e5e09..87f2797 100644
if (!prev->mm) {
prev->active_mm = NULL;
-@@ -3506,6 +3508,8 @@ int can_nice(const struct task_struct *p, const int nice)
+@@ -3609,6 +3611,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);
@@ -115148,7 +139582,7 @@ index 70e5e09..87f2797 100644
return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) ||
capable(CAP_SYS_NICE));
}
-@@ -3532,7 +3536,8 @@ SYSCALL_DEFINE1(nice, int, increment)
+@@ -3635,7 +3639,8 @@ SYSCALL_DEFINE1(nice, int, increment)
nice = task_nice(current) + increment;
nice = clamp_val(nice, MIN_NICE, MAX_NICE);
@@ -115158,7 +139592,7 @@ index 70e5e09..87f2797 100644
return -EPERM;
retval = security_task_setnice(current, nice);
-@@ -3841,6 +3846,7 @@ recheck:
+@@ -3944,6 +3949,7 @@ recheck:
if (policy != p->policy && !rlim_rtprio)
return -EPERM;
@@ -115166,7 +139600,7 @@ index 70e5e09..87f2797 100644
/* can't increase priority */
if (attr->sched_priority > p->rt_priority &&
attr->sched_priority > rlim_rtprio)
-@@ -5180,6 +5186,7 @@ void idle_task_exit(void)
+@@ -5285,6 +5291,7 @@ void idle_task_exit(void)
if (mm != &init_mm) {
switch_mm(mm, &init_mm, current);
@@ -115174,7 +139608,7 @@ index 70e5e09..87f2797 100644
finish_arch_post_lock_switch();
}
mmdrop(mm);
-@@ -5305,7 +5312,7 @@ static void migrate_tasks(struct rq *dead_rq)
+@@ -5410,7 +5417,7 @@ static void migrate_tasks(struct rq *dead_rq)
#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL)
@@ -115183,7 +139617,7 @@ index 70e5e09..87f2797 100644
{
.procname = "sched_domain",
.mode = 0555,
-@@ -5322,17 +5329,17 @@ static struct ctl_table sd_ctl_root[] = {
+@@ -5427,17 +5434,17 @@ static struct ctl_table sd_ctl_root[] = {
{}
};
@@ -115205,7 +139639,7 @@ index 70e5e09..87f2797 100644
/*
* In the intermediate directories, both the child directory and
-@@ -5340,22 +5347,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
+@@ -5445,22 +5452,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
* will always be set. In the lowest directory the names are
* static strings and all have proc handlers.
*/
@@ -115237,7 +139671,7 @@ index 70e5e09..87f2797 100644
const char *procname, void *data, int maxlen,
umode_t mode, proc_handler *proc_handler,
bool load_idx)
-@@ -5375,7 +5385,7 @@ set_table_entry(struct ctl_table *entry,
+@@ -5480,7 +5490,7 @@ set_table_entry(struct ctl_table *entry,
static struct ctl_table *
sd_alloc_ctl_domain_table(struct sched_domain *sd)
{
@@ -115246,7 +139680,7 @@ index 70e5e09..87f2797 100644
if (table == NULL)
return NULL;
-@@ -5413,9 +5423,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
+@@ -5518,9 +5528,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
return table;
}
@@ -115258,7 +139692,7 @@ index 70e5e09..87f2797 100644
struct sched_domain *sd;
int domain_num = 0, i;
char buf[32];
-@@ -5442,11 +5452,13 @@ static struct ctl_table_header *sd_sysctl_header;
+@@ -5547,11 +5557,13 @@ static struct ctl_table_header *sd_sysctl_header;
static void register_sched_domain_sysctl(void)
{
int i, cpu_num = num_possible_cpus();
@@ -115273,7 +139707,7 @@ index 70e5e09..87f2797 100644
if (entry == NULL)
return;
-@@ -5468,8 +5480,12 @@ static void unregister_sched_domain_sysctl(void)
+@@ -5573,8 +5585,12 @@ static void unregister_sched_domain_sysctl(void)
{
unregister_sysctl_table(sd_sysctl_header);
sd_sysctl_header = NULL;
@@ -115288,6 +139722,21 @@ index 70e5e09..87f2797 100644
}
#else
static void register_sched_domain_sysctl(void)
+diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
+index 57b939c..cbedaf1 100644
+--- a/kernel/sched/deadline.c
++++ b/kernel/sched/deadline.c
+@@ -219,8 +219,8 @@ static inline bool need_pull_dl_task(struct rq *rq, struct task_struct *prev)
+ return dl_task(prev);
+ }
+
+-static DEFINE_PER_CPU(struct callback_head, dl_push_head);
+-static DEFINE_PER_CPU(struct callback_head, dl_pull_head);
++static DEFINE_PER_CPU(struct balance_callback, dl_push_head);
++static DEFINE_PER_CPU(struct balance_callback, dl_pull_head);
+
+ static void push_dl_tasks(struct rq *);
+ static void pull_dl_task(struct rq *);
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 6415117..7dc45dc 100644
--- a/kernel/sched/debug.c
@@ -115305,10 +139754,10 @@ index 6415117..7dc45dc 100644
return -ENOMEM;
return 0;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index cfdc0e6..71f2abd 100644
+index adff850..4f219e5 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
-@@ -7817,7 +7817,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { }
+@@ -7961,7 +7961,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).
*/
@@ -115317,11 +139766,56 @@ index cfdc0e6..71f2abd 100644
{
struct rq *this_rq = this_rq();
enum cpu_idle_type idle = this_rq->idle_balance ?
+diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
+index 8ec86ab..2d88518 100644
+--- a/kernel/sched/rt.c
++++ b/kernel/sched/rt.c
+@@ -354,8 +354,8 @@ static inline int has_pushable_tasks(struct rq *rq)
+ return !plist_head_empty(&rq->rt.pushable_tasks);
+ }
+
+-static DEFINE_PER_CPU(struct callback_head, rt_push_head);
+-static DEFINE_PER_CPU(struct callback_head, rt_pull_head);
++static DEFINE_PER_CPU(struct balance_callback, rt_push_head);
++static DEFINE_PER_CPU(struct balance_callback, rt_pull_head);
+
+ 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 0517abd..b185177 100644
+index ff87d88..818b3f5 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
-@@ -1228,7 +1228,7 @@ struct sched_class {
+@@ -631,7 +631,10 @@ struct rq {
+ unsigned long cpu_capacity;
+ unsigned long cpu_capacity_orig;
+
+- struct callback_head *balance_callback;
++ struct balance_callback {
++ struct balance_callback *next;
++ void (*func)(struct rq *rq);
++ } *balance_callback;
+
+ unsigned char idle_balance;
+ /* For active balancing */
+@@ -777,7 +780,7 @@ extern int migrate_swap(struct task_struct *, struct task_struct *);
+
+ static inline void
+ queue_balance_callback(struct rq *rq,
+- struct callback_head *head,
++ struct balance_callback *head,
+ void (*func)(struct rq *rq))
+ {
+ lockdep_assert_held(&rq->lock);
+@@ -785,7 +788,7 @@ queue_balance_callback(struct rq *rq,
+ if (unlikely(head->next))
+ return;
+
+- head->func = (void (*)(struct callback_head *))func;
++ head->func = func;
+ head->next = rq->balance_callback;
+ rq->balance_callback = head;
+ }
+@@ -1204,7 +1207,7 @@ struct sched_class {
#ifdef CONFIG_FAIR_GROUP_SCHED
void (*task_move_group) (struct task_struct *p);
#endif
@@ -115330,8 +139824,17 @@ index 0517abd..b185177 100644
static inline void put_prev_task(struct rq *rq, struct task_struct *prev)
{
+@@ -1274,7 +1277,7 @@ extern struct dl_bandwidth def_dl_bandwidth;
+ 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);
+
+-unsigned long to_ratio(u64 period, u64 runtime);
++unsigned long __attribute_const__ to_ratio(u64 period, u64 runtime);
+
+ extern void init_entity_runnable_average(struct sched_entity *se);
+
diff --git a/kernel/signal.c b/kernel/signal.c
-index f3f1f7a..d2e7863 100644
+index 0508544..a1106d5 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -53,12 +53,12 @@ static struct kmem_cache *sigqueue_cachep;
@@ -115525,6 +140028,37 @@ index f3f1f7a..d2e7863 100644
compat_user_stack_pointer());
set_fs(seg);
if (ret >= 0 && uoss_ptr) {
+@@ -3478,7 +3513,7 @@ SYSCALL_DEFINE1(ssetmask, int, newmask)
+ SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
+ {
+ struct k_sigaction new_sa, old_sa;
+- int ret;
++ long ret;
+
+ new_sa.sa.sa_handler = handler;
+ new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
+@@ -3486,7 +3521,7 @@ SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
+
+ ret = do_sigaction(sig, &new_sa, &old_sa);
+
+- return ret ? ret : (unsigned long)old_sa.sa.sa_handler;
++ return ret ? ret : (long)old_sa.sa.sa_handler;
+ }
+ #endif /* __ARCH_WANT_SYS_SIGNAL */
+
+diff --git a/kernel/smp.c b/kernel/smp.c
+index d903c02..c3efd35 100644
+--- a/kernel/smp.c
++++ b/kernel/smp.c
+@@ -588,7 +588,7 @@ void __init smp_init(void)
+ * early_boot_irqs_disabled is set. Use local_irq_save/restore() instead
+ * of local_irq_disable/enable().
+ */
+-int on_each_cpu(void (*func) (void *info), void *info, int wait)
++int on_each_cpu(smp_call_func_t func, void *info, int wait)
+ {
+ unsigned long flags;
+ int ret = 0;
diff --git a/kernel/smpboot.c b/kernel/smpboot.c
index d264f59..48b8da3 100644
--- a/kernel/smpboot.c
@@ -115606,10 +140140,10 @@ index 479e443..4072c49 100644
.thread_should_run = ksoftirqd_should_run,
.thread_fn = run_ksoftirqd,
diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
-index a3bbaee..e8cd0bf 100644
+index a467e6c..7743481 100644
--- a/kernel/stop_machine.c
+++ b/kernel/stop_machine.c
-@@ -503,7 +503,7 @@ void stop_machine_unpark(int cpu)
+@@ -501,7 +501,7 @@ void stop_machine_unpark(int cpu)
kthread_unpark(stopper->thread);
}
@@ -115801,8 +140335,27 @@ index 78947de..cb182d1 100644
}
if (!retval) {
if (old_rlim)
+diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
+index 2c5e3a8..301fb1a 100644
+--- a/kernel/sys_ni.c
++++ b/kernel/sys_ni.c
+@@ -6,12 +6,12 @@
+
+ /* we can't #include <linux/syscalls.h> here,
+ but tell gcc to not warn with -Wmissing-prototypes */
+-asmlinkage long sys_ni_syscall(void);
++asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
+
+ /*
+ * Non-implemented system calls get redirected here.
+ */
+-asmlinkage long sys_ni_syscall(void)
++asmlinkage long sys_ni_syscall(unsigned long a, unsigned long b, unsigned long c, unsigned long d, unsigned long e, unsigned long f)
+ {
+ return -ENOSYS;
+ }
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index dc6858d..93aa01c 100644
+index 97715fd..bf1e10a 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -95,7 +95,6 @@
@@ -116020,28 +140573,7 @@ index dc6858d..93aa01c 100644
#else
{
.procname = "nr_trim_pages",
-@@ -1735,6 +1795,20 @@ static struct ctl_table fs_table[] = {
- .proc_handler = &pipe_proc_fn,
- .extra1 = &pipe_min_size,
- },
-+ {
-+ .procname = "pipe-user-pages-hard",
-+ .data = &pipe_user_pages_hard,
-+ .maxlen = sizeof(pipe_user_pages_hard),
-+ .mode = 0644,
-+ .proc_handler = proc_doulongvec_minmax,
-+ },
-+ {
-+ .procname = "pipe-user-pages-soft",
-+ .data = &pipe_user_pages_soft,
-+ .maxlen = sizeof(pipe_user_pages_soft),
-+ .mode = 0644,
-+ .proc_handler = proc_doulongvec_minmax,
-+ },
- { }
- };
-
-@@ -1885,6 +1959,16 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -1921,6 +1981,16 @@ int proc_dostring(struct ctl_table *table, int write,
(char __user *)buffer, lenp, ppos);
}
@@ -116058,7 +140590,7 @@ index dc6858d..93aa01c 100644
static size_t proc_skip_spaces(char **buf)
{
size_t ret;
-@@ -1990,6 +2074,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
+@@ -2026,6 +2096,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
len = strlen(tmp);
if (len > *size)
len = *size;
@@ -116067,7 +140599,7 @@ index dc6858d..93aa01c 100644
if (copy_to_user(*buf, tmp, len))
return -EFAULT;
*size -= len;
-@@ -2168,6 +2254,44 @@ int proc_dointvec(struct ctl_table *table, int write,
+@@ -2196,6 +2268,44 @@ int proc_dointvec(struct ctl_table *table, int write,
NULL,NULL);
}
@@ -116112,7 +140644,7 @@ index dc6858d..93aa01c 100644
/*
* Taint values can only be increased
* This means we can safely use a temporary.
-@@ -2175,7 +2299,7 @@ int proc_dointvec(struct ctl_table *table, int write,
+@@ -2203,7 +2313,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)
{
@@ -116121,7 +140653,7 @@ index dc6858d..93aa01c 100644
unsigned long tmptaint = get_taint();
int err;
-@@ -2203,16 +2327,14 @@ static int proc_taint(struct ctl_table *table, int write,
+@@ -2231,16 +2341,14 @@ static int proc_taint(struct ctl_table *table, int write,
return err;
}
@@ -116140,7 +140672,7 @@ index dc6858d..93aa01c 100644
struct do_proc_dointvec_minmax_conv_param {
int *min;
-@@ -2243,6 +2365,32 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
+@@ -2271,6 +2379,32 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
return 0;
}
@@ -116173,7 +140705,7 @@ index dc6858d..93aa01c 100644
/**
* proc_dointvec_minmax - read a vector of integers with min/max values
* @table: the sysctl table
-@@ -2270,6 +2418,17 @@ int proc_dointvec_minmax(struct ctl_table *table, int write,
+@@ -2298,6 +2432,17 @@ int proc_dointvec_minmax(struct ctl_table *table, int write,
do_proc_dointvec_minmax_conv, &param);
}
@@ -116191,7 +140723,7 @@ index dc6858d..93aa01c 100644
static void validate_coredump_safety(void)
{
#ifdef CONFIG_COREDUMP
-@@ -2772,6 +2931,12 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -2785,6 +2930,12 @@ int proc_dostring(struct ctl_table *table, int write,
return -ENOSYS;
}
@@ -116204,7 +140736,7 @@ index dc6858d..93aa01c 100644
int proc_dointvec(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
-@@ -2828,5 +2993,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
+@@ -2841,5 +2992,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
EXPORT_SYMBOL(proc_dostring);
@@ -116239,10 +140771,19 @@ index 21f82c2..c1984e5 100644
return cmd_attr_register_cpumask(info);
else if (info->attrs[TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK])
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
-index 7fbba635..7cc64ae 100644
+index e840ed86..4a303b7 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
-@@ -820,7 +820,7 @@ static int __init alarmtimer_init(void)
+@@ -523,7 +523,7 @@ static int alarm_clock_getres(const clockid_t which_clock, struct timespec *tp)
+ *
+ * Provides the underlying alarm base time.
+ */
+-static int alarm_clock_get(clockid_t which_clock, struct timespec *tp)
++static int alarm_clock_get(const clockid_t which_clock, struct timespec *tp)
+ {
+ struct alarm_base *base = &alarm_bases[clock2alarm(which_clock)];
+
+@@ -837,7 +837,7 @@ static int __init alarmtimer_init(void)
struct platform_device *pdev;
int error = 0;
int i;
@@ -116251,6 +140792,46 @@ index 7fbba635..7cc64ae 100644
.clock_getres = alarm_clock_getres,
.clock_get = alarm_clock_get,
.timer_create = alarm_timer_create,
+diff --git a/kernel/time/posix-clock.c b/kernel/time/posix-clock.c
+index 9cff0ab..0e69c94 100644
+--- a/kernel/time/posix-clock.c
++++ b/kernel/time/posix-clock.c
+@@ -273,7 +273,7 @@ static void put_clock_desc(struct posix_clock_desc *cd)
+ fput(cd->fp);
+ }
+
+-static int pc_clock_adjtime(clockid_t id, struct timex *tx)
++static int pc_clock_adjtime(const clockid_t id, struct timex *tx)
+ {
+ struct posix_clock_desc cd;
+ int err;
+@@ -297,7 +297,7 @@ out:
+ return err;
+ }
+
+-static int pc_clock_gettime(clockid_t id, struct timespec *ts)
++static int pc_clock_gettime(const clockid_t id, struct timespec *ts)
+ {
+ struct posix_clock_desc cd;
+ int err;
+@@ -316,7 +316,7 @@ static int pc_clock_gettime(clockid_t id, struct timespec *ts)
+ return err;
+ }
+
+-static int pc_clock_getres(clockid_t id, struct timespec *ts)
++static int pc_clock_getres(const clockid_t id, struct timespec *ts)
+ {
+ struct posix_clock_desc cd;
+ int err;
+@@ -335,7 +335,7 @@ static int pc_clock_getres(clockid_t id, struct timespec *ts)
+ return err;
+ }
+
+-static int pc_clock_settime(clockid_t id, const struct timespec *ts)
++static int pc_clock_settime(const clockid_t id, const struct timespec *ts)
+ {
+ struct posix_clock_desc cd;
+ int err;
diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
index f5e86d2..33a4099 100644
--- a/kernel/time/posix-cpu-timers.c
@@ -116273,7 +140854,7 @@ index f5e86d2..33a4099 100644
.clock_get = thread_cpu_clock_get,
.timer_create = thread_cpu_timer_create,
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
-index f2826c3..c8d9d80 100644
+index f2826c3..7e6663a 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -43,6 +43,7 @@
@@ -116293,6 +140874,57 @@ index f2826c3..c8d9d80 100644
/*
* These ones are defined below.
+@@ -203,7 +204,7 @@ static inline void unlock_timer(struct k_itimer *timr, unsigned long flags)
+ }
+
+ /* Get clock_realtime */
+-static int posix_clock_realtime_get(clockid_t which_clock, struct timespec *tp)
++static int posix_clock_realtime_get(const clockid_t which_clock, struct timespec *tp)
+ {
+ ktime_get_real_ts(tp);
+ return 0;
+@@ -225,7 +226,7 @@ static int posix_clock_realtime_adj(const clockid_t which_clock,
+ /*
+ * Get monotonic time for posix timers
+ */
+-static int posix_ktime_get_ts(clockid_t which_clock, struct timespec *tp)
++static int posix_ktime_get_ts(const clockid_t which_clock, struct timespec *tp)
+ {
+ ktime_get_ts(tp);
+ return 0;
+@@ -234,20 +235,20 @@ static int posix_ktime_get_ts(clockid_t which_clock, struct timespec *tp)
+ /*
+ * Get monotonic-raw time for posix timers
+ */
+-static int posix_get_monotonic_raw(clockid_t which_clock, struct timespec *tp)
++static int posix_get_monotonic_raw(const clockid_t which_clock, struct timespec *tp)
+ {
+ getrawmonotonic(tp);
+ return 0;
+ }
+
+
+-static int posix_get_realtime_coarse(clockid_t which_clock, struct timespec *tp)
++static int posix_get_realtime_coarse(const clockid_t which_clock, struct timespec *tp)
+ {
+ *tp = current_kernel_time();
+ return 0;
+ }
+
+-static int posix_get_monotonic_coarse(clockid_t which_clock,
++static int posix_get_monotonic_coarse(const clockid_t which_clock,
+ struct timespec *tp)
+ {
+ *tp = get_monotonic_coarse();
+@@ -266,7 +267,7 @@ static int posix_get_boottime(const clockid_t which_clock, struct timespec *tp)
+ return 0;
+ }
+
+-static int posix_get_tai(clockid_t which_clock, struct timespec *tp)
++static int posix_get_tai(const clockid_t which_clock, struct timespec *tp)
+ {
+ timekeeping_clocktai(tp);
+ return 0;
@@ -284,7 +285,7 @@ static int posix_get_hrtimer_res(clockid_t which_clock, struct timespec *tp)
*/
static __init int init_posix_timers(void)
@@ -116405,7 +141037,7 @@ index 86751c6..7875536 100644
update_vsyscall_tz();
if (firsttime) {
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
-index 99188ee..29f96f9 100644
+index 34b4ced..08d344f 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -15,6 +15,7 @@
@@ -116416,7 +141048,7 @@ index 99188ee..29f96f9 100644
#include <linux/syscore_ops.h>
#include <linux/clocksource.h>
#include <linux/jiffies.h>
-@@ -915,6 +916,8 @@ int do_settimeofday64(const struct timespec64 *ts)
+@@ -928,6 +929,8 @@ int do_settimeofday64(const struct timespec64 *ts)
if (!timespec64_valid_strict(ts))
return -EINVAL;
@@ -116580,7 +141212,7 @@ index e45db6b..1fb429b 100644
select GENERIC_TRACER
select STACKTRACE
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
-index a990824..9c8e7ad 100644
+index 2aeb6ff..640418a 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,
@@ -116592,7 +141224,7 @@ index a990824..9c8e7ad 100644
return simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));
}
-@@ -386,7 +386,7 @@ static int blk_subbuf_start_callback(struct rchan_buf *buf, void *subbuf,
+@@ -380,7 +380,7 @@ static int blk_subbuf_start_callback(struct rchan_buf *buf, void *subbuf,
return 1;
bt = buf->chan->private_data;
@@ -116601,7 +141233,7 @@ index a990824..9c8e7ad 100644
return 0;
}
-@@ -485,7 +485,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
+@@ -479,7 +479,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
bt->dir = dir;
bt->dev = dev;
@@ -116611,10 +141243,22 @@ index a990824..9c8e7ad 100644
ret = -EIO;
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
-index 3f743b1..a3e3588 100644
+index 57a6eea..168c21f 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
-@@ -2423,12 +2423,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
+@@ -120,8 +120,9 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
+ struct ftrace_ops *op, struct pt_regs *regs);
+ #else
+ /* See comment below, where ftrace_ops_list_func is defined */
+-static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip);
+-#define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
++static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip,
++ struct ftrace_ops *op, struct pt_regs *regs);
++#define ftrace_ops_list_func (ftrace_ops_no_ops)
+ #endif
+
+ /*
+@@ -2463,13 +2464,18 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
if (unlikely(ftrace_disabled))
return 0;
@@ -116626,6 +141270,7 @@ index 3f743b1..a3e3588 100644
ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR);
+ FTRACE_WARN_ON(ftrace_arch_code_modify_post_process());
if (ret) {
+ ftrace_bug_type = FTRACE_BUG_INIT;
ftrace_bug(ret, rec);
- return 0;
}
@@ -116634,7 +141279,7 @@ index 3f743b1..a3e3588 100644
}
/*
-@@ -4813,8 +4818,10 @@ static int ftrace_process_locs(struct module *mod,
+@@ -4821,8 +4827,10 @@ static int ftrace_process_locs(struct module *mod,
if (!count)
return 0;
@@ -116645,7 +141290,32 @@ index 3f743b1..a3e3588 100644
start_pg = ftrace_allocate_pages(count);
if (!start_pg)
-@@ -5691,7 +5698,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
+@@ -5238,7 +5246,8 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
+ __ftrace_ops_list_func(ip, parent_ip, NULL, regs);
+ }
+ #else
+-static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip)
++static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip,
++ struct ftrace_ops *op, struct pt_regs *regs)
+ {
+ __ftrace_ops_list_func(ip, parent_ip, NULL, NULL);
+ }
+@@ -5699,8 +5708,12 @@ int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
+ }
+
+ /* The callbacks that hook a function */
+-trace_func_graph_ret_t ftrace_graph_return =
+- (trace_func_graph_ret_t)ftrace_stub;
++static void ftrace_graph_return_stub(struct ftrace_graph_ret *trace)
++{
++ ftrace_stub(0, 0, NULL, NULL);
++}
++
++trace_func_graph_ret_t ftrace_graph_return = ftrace_graph_return_stub;
+ trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub;
+ static trace_func_graph_ent_t __ftrace_graph_entry = ftrace_graph_entry_stub;
+
+@@ -5734,7 +5747,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
if (t->ret_stack == NULL) {
atomic_set(&t->tracing_graph_pause, 0);
@@ -116654,7 +141324,16 @@ index 3f743b1..a3e3588 100644
t->curr_ret_stack = -1;
/* Make sure the tasks see the -1 first: */
smp_wmb();
-@@ -5914,7 +5921,7 @@ static void
+@@ -5929,7 +5942,7 @@ void unregister_ftrace_graph(void)
+ goto out;
+
+ ftrace_graph_active--;
+- ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub;
++ ftrace_graph_return = ftrace_graph_return_stub;
+ ftrace_graph_entry = ftrace_graph_entry_stub;
+ __ftrace_graph_entry = ftrace_graph_entry_stub;
+ ftrace_shutdown(&graph_ops, FTRACE_STOP_FUNC_RET);
+@@ -5957,7 +5970,7 @@ static void
graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack)
{
atomic_set(&t->tracing_graph_pause, 0);
@@ -116664,7 +141343,7 @@ index 3f743b1..a3e3588 100644
/* make curr_ret_stack visible before we add the ret_stack */
smp_wmb();
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
-index 9c6045a..927be25 100644
+index 95181e3..3b49321 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -296,9 +296,9 @@ struct buffer_data_page {
@@ -116695,7 +141374,7 @@ index 9c6045a..927be25 100644
unsigned long read;
unsigned long read_bytes;
u64 write_stamp;
-@@ -1022,8 +1022,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -1018,8 +1018,8 @@ static void rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
*
* We add a counter to the write field to denote this.
*/
@@ -116706,7 +141385,7 @@ index 9c6045a..927be25 100644
/*
* Just make sure we have seen our old_write and synchronize
-@@ -1051,8 +1051,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -1047,8 +1047,8 @@ static void rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
* cmpxchg to only update if an interrupt did not already
* do it for us. If the cmpxchg fails, we don't care.
*/
@@ -116717,7 +141396,7 @@ index 9c6045a..927be25 100644
/*
* No need to worry about races with clearing out the commit.
-@@ -1420,12 +1420,12 @@ static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer);
+@@ -1411,12 +1411,12 @@ static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer);
static inline unsigned long rb_page_entries(struct buffer_page *bpage)
{
@@ -116732,7 +141411,7 @@ index 9c6045a..927be25 100644
}
static int
-@@ -1520,7 +1520,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages)
+@@ -1511,7 +1511,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages)
* bytes consumed in ring buffer from here.
* Increment overrun to account for the lost events.
*/
@@ -116741,7 +141420,7 @@ index 9c6045a..927be25 100644
local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes);
}
-@@ -1951,7 +1951,7 @@ rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -1942,7 +1942,7 @@ rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer,
* it is our responsibility to update
* the counters.
*/
@@ -116750,7 +141429,7 @@ index 9c6045a..927be25 100644
local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes);
/*
-@@ -2085,7 +2085,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2079,7 +2079,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
if (tail == BUF_PAGE_SIZE)
tail_page->real_end = 0;
@@ -116759,7 +141438,7 @@ index 9c6045a..927be25 100644
return;
}
-@@ -2120,7 +2120,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2114,7 +2114,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
rb_event_set_padding(event);
/* Set the write back to the previous setting */
@@ -116768,7 +141447,7 @@ index 9c6045a..927be25 100644
return;
}
-@@ -2132,7 +2132,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2126,7 +2126,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
/* Set write to end of buffer */
length = (tail + length) - BUF_PAGE_SIZE;
@@ -116776,8 +141455,8 @@ index 9c6045a..927be25 100644
+ local_sub_unchecked(length, &tail_page->write);
}
- /*
-@@ -2159,7 +2159,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
+ static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer);
+@@ -2154,7 +2154,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
* about it.
*/
if (unlikely(next_page == commit_page)) {
@@ -116786,7 +141465,7 @@ index 9c6045a..927be25 100644
goto out_reset;
}
-@@ -2189,7 +2189,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2184,7 +2184,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
* this is easy, just stop here.
*/
if (!(buffer->flags & RB_FL_OVERWRITE)) {
@@ -116795,7 +141474,7 @@ index 9c6045a..927be25 100644
goto out_reset;
}
-@@ -2215,7 +2215,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2210,7 +2210,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
cpu_buffer->tail_page) &&
(cpu_buffer->commit_page ==
cpu_buffer->reader_page))) {
@@ -116804,7 +141483,7 @@ index 9c6045a..927be25 100644
goto out_reset;
}
}
-@@ -2366,7 +2366,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2358,7 +2358,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
if (bpage->page == (void *)addr && rb_page_write(bpage) == old_index) {
unsigned long write_mask =
@@ -116813,7 +141492,7 @@ index 9c6045a..927be25 100644
unsigned long event_length = rb_event_length(event);
/*
* This is on the tail page. It is possible that
-@@ -2376,7 +2376,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2368,7 +2368,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
*/
old_index += write_mask;
new_index += write_mask;
@@ -116822,7 +141501,7 @@ index 9c6045a..927be25 100644
if (index == old_index) {
/* update counters */
local_sub(event_length, &cpu_buffer->entries_bytes);
-@@ -2391,7 +2391,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2383,7 +2383,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
static void rb_start_commit(struct ring_buffer_per_cpu *cpu_buffer)
{
local_inc(&cpu_buffer->committing);
@@ -116831,7 +141510,7 @@ index 9c6045a..927be25 100644
}
static void
-@@ -2456,7 +2456,7 @@ static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -2450,7 +2450,7 @@ static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer)
return;
again:
@@ -116840,7 +141519,7 @@ index 9c6045a..927be25 100644
/* synchronize with interrupts */
barrier();
if (local_read(&cpu_buffer->committing) == 1)
-@@ -2472,7 +2472,7 @@ static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -2466,7 +2466,7 @@ static inline void rb_end_commit(struct ring_buffer_per_cpu *cpu_buffer)
* updating of the commit page and the clearing of the
* committing counter.
*/
@@ -116849,16 +141528,16 @@ index 9c6045a..927be25 100644
!local_read(&cpu_buffer->committing)) {
local_inc(&cpu_buffer->committing);
goto again;
-@@ -2700,7 +2700,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
- info->length += RB_LEN_TIME_EXTEND;
+@@ -2695,7 +2695,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
- tail_page = info->tail_page = cpu_buffer->tail_page;
+ /* Don't let the compiler play games with cpu_buffer->tail_page */
+ tail_page = info->tail_page = READ_ONCE(cpu_buffer->tail_page);
- write = local_add_return(info->length, &tail_page->write);
+ write = local_add_return_unchecked(info->length, &tail_page->write);
/* set write to only the index of the write */
write &= RB_WRITE_MASK;
-@@ -2723,7 +2723,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2718,7 +2718,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
kmemcheck_annotate_bitfield(event, bitfield);
rb_update_event(cpu_buffer, event, info);
@@ -116867,7 +141546,7 @@ index 9c6045a..927be25 100644
/*
* If this is the first commit on the page, then update
-@@ -2760,7 +2760,7 @@ rb_reserve_next_event(struct ring_buffer *buffer,
+@@ -2755,7 +2755,7 @@ rb_reserve_next_event(struct ring_buffer *buffer,
barrier();
if (unlikely(ACCESS_ONCE(cpu_buffer->buffer) != buffer)) {
local_dec(&cpu_buffer->committing);
@@ -116876,7 +141555,7 @@ index 9c6045a..927be25 100644
return NULL;
}
#endif
-@@ -2889,7 +2889,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2884,7 +2884,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
/* Do the likely case first */
if (likely(bpage->page == (void *)addr)) {
@@ -116885,7 +141564,7 @@ index 9c6045a..927be25 100644
return;
}
-@@ -2901,7 +2901,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
+@@ -2896,7 +2896,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer,
start = bpage;
do {
if (bpage->page == (void *)addr) {
@@ -116894,7 +141573,7 @@ index 9c6045a..927be25 100644
return;
}
rb_inc_page(cpu_buffer, &bpage);
-@@ -3189,7 +3189,7 @@ static inline unsigned long
+@@ -3184,7 +3184,7 @@ static inline unsigned long
rb_num_of_entries(struct ring_buffer_per_cpu *cpu_buffer)
{
return local_read(&cpu_buffer->entries) -
@@ -116903,7 +141582,7 @@ index 9c6045a..927be25 100644
}
/**
-@@ -3278,7 +3278,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu)
+@@ -3273,7 +3273,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu)
return 0;
cpu_buffer = buffer->buffers[cpu];
@@ -116912,7 +141591,7 @@ index 9c6045a..927be25 100644
return ret;
}
-@@ -3301,7 +3301,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu)
+@@ -3296,7 +3296,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu)
return 0;
cpu_buffer = buffer->buffers[cpu];
@@ -116921,7 +141600,7 @@ index 9c6045a..927be25 100644
return ret;
}
-@@ -3323,7 +3323,7 @@ ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu)
+@@ -3318,7 +3318,7 @@ ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu)
return 0;
cpu_buffer = buffer->buffers[cpu];
@@ -116930,7 +141609,7 @@ index 9c6045a..927be25 100644
return ret;
}
-@@ -3386,7 +3386,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer)
+@@ -3381,7 +3381,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer)
/* if you care about this being correct, lock the buffer */
for_each_buffer_cpu(buffer, cpu) {
cpu_buffer = buffer->buffers[cpu];
@@ -116939,7 +141618,7 @@ index 9c6045a..927be25 100644
}
return overruns;
-@@ -3557,8 +3557,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -3552,8 +3552,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
/*
* Reset the reader page to size zero.
*/
@@ -116950,7 +141629,7 @@ index 9c6045a..927be25 100644
local_set(&cpu_buffer->reader_page->page->commit, 0);
cpu_buffer->reader_page->real_end = 0;
-@@ -3592,7 +3592,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -3587,7 +3587,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
* want to compare with the last_overrun.
*/
smp_mb();
@@ -116959,7 +141638,7 @@ index 9c6045a..927be25 100644
/*
* Here's the tricky part.
-@@ -4178,8 +4178,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -4173,8 +4173,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
cpu_buffer->head_page
= list_entry(cpu_buffer->pages, struct buffer_page, list);
@@ -116970,7 +141649,7 @@ index 9c6045a..927be25 100644
local_set(&cpu_buffer->head_page->page->commit, 0);
cpu_buffer->head_page->read = 0;
-@@ -4189,18 +4189,18 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -4184,18 +4184,18 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer)
INIT_LIST_HEAD(&cpu_buffer->reader_page->list);
INIT_LIST_HEAD(&cpu_buffer->new_pages);
@@ -116995,7 +141674,7 @@ index 9c6045a..927be25 100644
cpu_buffer->read = 0;
cpu_buffer->read_bytes = 0;
-@@ -4590,8 +4590,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
+@@ -4585,8 +4585,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
rb_init_page(bpage);
bpage = reader->page;
reader->page = *data_page;
@@ -117020,10 +141699,10 @@ index 8305cbb..c0d281a 100644
/* do nothing if flag is already set */
if (!!(tr->trace_flags & mask) == !!enabled)
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
-index 919d9d0..8db0243 100644
+index 8414fa4..27c2db4 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
-@@ -1335,7 +1335,7 @@ void trace_printk_control(bool enabled);
+@@ -1333,7 +1333,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);
@@ -117053,10 +141732,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 d202d99..1bf816c 100644
+index 05ddc08..5df5f88 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
-@@ -2369,7 +2369,6 @@ __trace_early_add_new_event(struct trace_event_call *call,
+@@ -2357,7 +2357,6 @@ __trace_early_add_new_event(struct trace_event_call *call,
return 0;
}
@@ -117127,7 +141806,7 @@ index 2be8c4f..444ecfb 100644
}
entry = ring_buffer_event_data(event);
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
-index 2829821..a290dc8 100644
+index 2829821..a290dc89 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -713,14 +713,16 @@ int register_trace_event(struct trace_event *event)
@@ -117165,7 +141844,7 @@ index e694c9f..6775a38 100644
if (unlikely(seq_buf_has_overflowed(&s->seq))) {
s->seq.len = save_len;
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
-index 202df6c..58bab5d 100644
+index 2a1abba..2a81a78 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -88,7 +88,7 @@ check_stack(unsigned long ip, unsigned long *stack)
@@ -117232,7 +141911,7 @@ index b069ccb..c59fe26 100644
uid_hash_remove(up);
spin_unlock_irqrestore(&uidhash_lock, flags);
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 88fefa6..d1e2bd7 100644
+index 9bafc21..cafd6e0 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -84,6 +84,21 @@ int create_user_ns(struct cred *new)
@@ -117257,7 +141936,7 @@ index 88fefa6..d1e2bd7 100644
ns = kmem_cache_zalloc(user_ns_cachep, GFP_KERNEL);
if (!ns)
return -ENOMEM;
-@@ -981,7 +996,7 @@ static int userns_install(struct nsproxy *nsproxy, struct ns_common *ns)
+@@ -974,7 +989,7 @@ static int userns_install(struct nsproxy *nsproxy, struct ns_common *ns)
if (!thread_group_empty(current))
return -EINVAL;
@@ -117280,10 +141959,10 @@ index c8eac43..4b5f08f 100644
memcpy(&uts_table, table, sizeof(uts_table));
uts_table.data = get_uts(table, write);
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
-index 198137b..cde169b 100644
+index 9acb29f..6fe517c 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
-@@ -664,7 +664,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
+@@ -680,7 +680,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
static void watchdog_nmi_disable(unsigned int cpu) { return; }
#endif /* CONFIG_HARDLOCKUP_DETECTOR */
@@ -117293,10 +141972,46 @@ index 198137b..cde169b 100644
.thread_should_run = watchdog_should_run,
.thread_fn = watchdog,
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
-index 450c21f..16482d9 100644
+index 7ff5dc7..72c5756 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
-@@ -1866,9 +1866,8 @@ static void pool_mayday_timeout(unsigned long __pool)
+@@ -667,6 +667,35 @@ static void set_work_pool_and_clear_pending(struct work_struct *work,
+ */
+ smp_wmb();
+ set_work_data(work, (unsigned long)pool_id << WORK_OFFQ_POOL_SHIFT, 0);
++ /*
++ * The following mb guarantees that previous clear of a PENDING bit
++ * will not be reordered with any speculative LOADS or STORES from
++ * work->current_func, which is executed afterwards. This possible
++ * reordering can lead to a missed execution on attempt to qeueue
++ * the same @work. E.g. consider this case:
++ *
++ * CPU#0 CPU#1
++ * ---------------------------- --------------------------------
++ *
++ * 1 STORE event_indicated
++ * 2 queue_work_on() {
++ * 3 test_and_set_bit(PENDING)
++ * 4 } set_..._and_clear_pending() {
++ * 5 set_work_data() # clear bit
++ * 6 smp_mb()
++ * 7 work->current_func() {
++ * 8 LOAD event_indicated
++ * }
++ *
++ * Without an explicit full barrier speculative LOAD on line 8 can
++ * be executed before CPU#0 does STORE on line 1. If that happens,
++ * CPU#0 observes the PENDING bit is still set and new execution of
++ * a @work is not queued in a hope, that CPU#1 will eventually
++ * finish the queued @work. Meanwhile CPU#1 does not see
++ * event_indicated is set, because speculative LOAD was executed
++ * before actual STORE.
++ */
++ smp_mb();
+ }
+
+ static void clear_work_data(struct work_struct *work)
+@@ -1921,9 +1950,8 @@ static void pool_mayday_timeout(unsigned long __pool)
* multiple times. Does GFP_KERNEL allocations. Called only from
* manager.
*/
@@ -117307,7 +142022,7 @@ index 450c21f..16482d9 100644
{
restart:
spin_unlock_irq(&pool->lock);
-@@ -1958,9 +1957,8 @@ static bool manage_workers(struct worker *worker)
+@@ -2013,9 +2041,8 @@ static bool manage_workers(struct worker *worker)
* CONTEXT:
* spin_lock_irq(pool->lock) which is released and regrabbed.
*/
@@ -117318,7 +142033,7 @@ index 450c21f..16482d9 100644
{
struct pool_workqueue *pwq = get_work_pwq(work);
struct worker_pool *pool = worker->pool;
-@@ -4462,7 +4460,7 @@ static void rebind_workers(struct worker_pool *pool)
+@@ -4561,7 +4588,7 @@ static void rebind_workers(struct worker_pool *pool)
WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
worker_flags |= WORKER_REBOUND;
worker_flags &= ~WORKER_UNBOUND;
@@ -117328,7 +142043,7 @@ index 450c21f..16482d9 100644
spin_unlock_irq(&pool->lock);
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 8c15b29..fc52e8e 100644
+index 8bfd1ac..18fd274 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -243,6 +243,7 @@ config PAGE_OWNER
@@ -117355,7 +142070,7 @@ index 8c15b29..fc52e8e 100644
select STACKTRACE if STACKTRACE_SUPPORT
select KALLSYMS
select CRC32
-@@ -945,7 +948,7 @@ config DEBUG_MUTEXES
+@@ -964,7 +967,7 @@ config DEBUG_MUTEXES
config DEBUG_WW_MUTEX_SLOWPATH
bool "Wait/wound mutex debugging: Slowpath testing"
@@ -117364,7 +142079,7 @@ index 8c15b29..fc52e8e 100644
select DEBUG_LOCK_ALLOC
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -962,7 +965,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
+@@ -981,7 +984,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
config DEBUG_LOCK_ALLOC
bool "Lock debugging: detect incorrect freeing of live locks"
@@ -117373,7 +142088,7 @@ index 8c15b29..fc52e8e 100644
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
select LOCKDEP
-@@ -976,7 +979,7 @@ config DEBUG_LOCK_ALLOC
+@@ -995,7 +998,7 @@ config DEBUG_LOCK_ALLOC
config PROVE_LOCKING
bool "Lock debugging: prove locking correctness"
@@ -117382,7 +142097,7 @@ index 8c15b29..fc52e8e 100644
select LOCKDEP
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -1027,7 +1030,7 @@ config LOCKDEP
+@@ -1046,7 +1049,7 @@ config LOCKDEP
config LOCK_STAT
bool "Lock usage statistics"
@@ -117391,7 +142106,7 @@ index 8c15b29..fc52e8e 100644
select LOCKDEP
select DEBUG_SPINLOCK
select DEBUG_MUTEXES
-@@ -1412,6 +1415,7 @@ config NOTIFIER_ERROR_INJECTION
+@@ -1446,6 +1449,7 @@ config NOTIFIER_ERROR_INJECTION
tristate "Notifier error injection"
depends on DEBUG_KERNEL
select DEBUG_FS
@@ -117399,15 +142114,7 @@ index 8c15b29..fc52e8e 100644
help
This option provides the ability to inject artificial errors to
specified notifier chain callbacks. It is useful to test the error
-@@ -1524,6 +1528,7 @@ config FAIL_IO_TIMEOUT
- config FAIL_MMC_REQUEST
- bool "Fault-injection capability for MMC IO"
- select DEBUG_FS
-+ depends on !GRKERNSEC_KMEM
- depends on FAULT_INJECTION && MMC
- help
- Provide fault-injection capability for MMC IO.
-@@ -1535,6 +1540,7 @@ config FAIL_MMC_REQUEST
+@@ -1591,6 +1595,7 @@ config FAIL_MMC_REQUEST
config FAIL_FUTEX
bool "Fault-injection capability for futexes"
select DEBUG_FS
@@ -117415,7 +142122,7 @@ index 8c15b29..fc52e8e 100644
depends on FAULT_INJECTION && FUTEX
help
Provide fault-injection capability for futexes.
-@@ -1560,6 +1566,7 @@ config LATENCYTOP
+@@ -1615,6 +1620,7 @@ config LATENCYTOP
depends on DEBUG_KERNEL
depends on STACKTRACE_SUPPORT
depends on PROC_FS
@@ -117423,7 +142130,7 @@ index 8c15b29..fc52e8e 100644
select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC
select KALLSYMS
select KALLSYMS_ALL
-@@ -1576,7 +1583,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
+@@ -1631,7 +1637,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
@@ -117432,7 +142139,7 @@ index 8c15b29..fc52e8e 100644
help
Enabling this option turns a certain set of sanity checks for user
copy operations into compile time failures.
-@@ -1710,7 +1717,7 @@ endmenu # runtime tests
+@@ -1765,7 +1771,7 @@ endmenu # runtime tests
config PROVIDE_OHCI1394_DMA_INIT
bool "Remote debugging over FireWire early on boot"
@@ -117455,7 +142162,7 @@ index 0fee5ac..b2b159d 100644
help
Enables kernel address sanitizer - runtime memory debugger,
diff --git a/lib/Makefile b/lib/Makefile
-index 7f1de26..ab68f1a 100644
+index a7c26a4..6747b22 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -66,7 +66,7 @@ obj-$(CONFIG_BTREE) += btree.o
@@ -117521,7 +142228,7 @@ index cff145f..724a0b8 100644
file = NULL;
line = 0;
diff --git a/lib/debugobjects.c b/lib/debugobjects.c
-index 547f7f9..a6d4ba0 100644
+index 519b5a1..4e58003 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
@@ -289,7 +289,7 @@ static void debug_object_is_on_stack(void *addr, int onstack)
@@ -117565,11 +142272,11 @@ index ed7a1fd..44a1a62 100644
for (i = 0; i < size; i++)
ret = (ret << 8) | ptr[size-i-1];
diff --git a/lib/div64.c b/lib/div64.c
-index 62a698a..32327d08 100644
+index 7f34525..c53be4b 100644
--- a/lib/div64.c
+++ b/lib/div64.c
-@@ -59,7 +59,7 @@ uint32_t __attribute__((weak)) __div64_32(uint64_t *n, uint32_t base)
- EXPORT_SYMBOL(__div64_32);
+@@ -61,7 +61,7 @@ EXPORT_SYMBOL(__div64_32);
+ #endif
#ifndef div_s64_rem
-s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder)
@@ -117577,7 +142284,7 @@ index 62a698a..32327d08 100644
{
u64 quotient;
-@@ -130,7 +130,7 @@ EXPORT_SYMBOL(div64_u64_rem);
+@@ -132,7 +132,7 @@ EXPORT_SYMBOL(div64_u64_rem);
* 'http://www.hackersdelight.org/hdcodetxt/divDouble.c.txt'
*/
#ifndef div64_u64
@@ -117643,6 +142350,19 @@ index 86c8911..f5bfc34 100644
if (!pud)
return -ENOMEM;
do {
+diff --git a/lib/irq_poll.c b/lib/irq_poll.c
+index 836f7db..44d9849 100644
+--- a/lib/irq_poll.c
++++ b/lib/irq_poll.c
+@@ -74,7 +74,7 @@ void irq_poll_complete(struct irq_poll *iop)
+ }
+ EXPORT_SYMBOL(irq_poll_complete);
+
+-static void irq_poll_softirq(struct softirq_action *h)
++static __latent_entropy void irq_poll_softirq(void)
+ {
+ struct list_head *list = this_cpu_ptr(&blk_cpu_iopoll);
+ int rearm = 0, budget = irq_poll_budget;
diff --git a/lib/is_single_threaded.c b/lib/is_single_threaded.c
index 391fd23..96e17b6 100644
--- a/lib/is_single_threaded.c
@@ -117674,7 +142394,7 @@ index 7cbccd2..37f089d 100644
enum kobj_ns_type type = ops->type;
int error;
diff --git a/lib/list_debug.c b/lib/list_debug.c
-index c24c2f7..f0296f4 100644
+index 3859bf6..818741d6 100644
--- a/lib/list_debug.c
+++ b/lib/list_debug.c
@@ -11,7 +11,9 @@
@@ -118094,10 +142814,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 51282f5..471b337 100644
+index cc80870..6378152 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
-@@ -558,8 +558,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_exit);
+@@ -555,8 +555,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_exit);
* will rewind back to the beginning and you may use it immediately
* by calling rhashtable_walk_next.
*/
@@ -118107,7 +142827,7 @@ index 51282f5..471b337 100644
{
struct rhashtable *ht = iter->ht;
-@@ -643,8 +643,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_next);
+@@ -640,8 +640,8 @@ EXPORT_SYMBOL_GPL(rhashtable_walk_next);
*
* Finish a hash table walk.
*/
@@ -118130,7 +142850,7 @@ index 1feed6a..4ede1e9 100644
#endif
}
diff --git a/lib/strncpy_from_user.c b/lib/strncpy_from_user.c
-index e0af6ff..fcc9f15 100644
+index 3384032..e4389a1 100644
--- a/lib/strncpy_from_user.c
+++ b/lib/strncpy_from_user.c
@@ -22,7 +22,7 @@
@@ -118143,7 +142863,7 @@ index e0af6ff..fcc9f15 100644
/*
diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c
-index 3a5f2b3..102f1ff 100644
+index 2625943..1541382 100644
--- a/lib/strnlen_user.c
+++ b/lib/strnlen_user.c
@@ -26,7 +26,7 @@
@@ -118183,7 +142903,7 @@ index 4f5b1dd..7cab418 100644
+}
+EXPORT_SYMBOL(copy_to_user_overflow);
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
-index f9cee8e..f0ed0f1 100644
+index f44e178..e5856a5 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -16,6 +16,9 @@
@@ -118196,7 +142916,7 @@ index f9cee8e..f0ed0f1 100644
#include <stdarg.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
-@@ -629,7 +632,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
+@@ -677,7 +680,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
#ifdef CONFIG_KALLSYMS
if (*fmt == 'B')
sprint_backtrace(sym, value);
@@ -118205,7 +142925,7 @@ index f9cee8e..f0ed0f1 100644
sprint_symbol(sym, value);
else
sprint_symbol_no_offset(sym, value);
-@@ -1361,7 +1364,11 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
+@@ -1407,7 +1410,11 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
}
}
@@ -118218,7 +142938,7 @@ index f9cee8e..f0ed0f1 100644
/*
* Show a '%p' thing. A kernel extension is that the '%p' is followed
-@@ -1372,8 +1379,10 @@ int kptr_restrict __read_mostly;
+@@ -1418,8 +1425,10 @@ int kptr_restrict __read_mostly;
*
* - 'F' For symbolic function descriptor pointers with offset
* - 'f' For simple symbolic function names without offset
@@ -118229,7 +142949,7 @@ index f9cee8e..f0ed0f1 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]
-@@ -1463,12 +1472,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1510,12 +1519,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
if (!ptr && *fmt != 'K') {
/*
@@ -118244,7 +142964,7 @@ index f9cee8e..f0ed0f1 100644
}
switch (*fmt) {
-@@ -1478,6 +1487,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1525,6 +1534,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
/* Fallthrough */
case 'S':
case 's':
@@ -118259,18 +142979,18 @@ index f9cee8e..f0ed0f1 100644
case 'B':
return symbol_string(buf, end, ptr, spec, fmt);
case 'R':
-@@ -1542,6 +1559,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1589,6 +1606,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
va_end(va);
return buf;
}
+ case 'P':
+ break;
case 'K':
- /*
- * %pK cannot be used in IRQ context because its test
-@@ -1601,6 +1620,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
- ((const struct file *)ptr)->f_path.dentry,
- spec, fmt);
+ switch (kptr_restrict) {
+ case 0:
+@@ -1649,6 +1668,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+ #endif
+
}
+
+#ifdef CONFIG_GRKERNSEC_HIDESYM
@@ -118291,7 +143011,7 @@ index f9cee8e..f0ed0f1 100644
spec.flags |= SMALL;
if (spec.field_width == -1) {
spec.field_width = default_width;
-@@ -2282,11 +2317,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2349,11 +2384,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)); \
@@ -118306,7 +143026,7 @@ index f9cee8e..f0ed0f1 100644
} \
args += sizeof(type); \
value; \
-@@ -2349,7 +2384,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2416,7 +2451,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;
@@ -118323,7 +143043,7 @@ index 0000000..7cd6065
@@ -0,0 +1 @@
+-grsec
diff --git a/mm/Kconfig b/mm/Kconfig
-index 97a4e06..b20ba55 100644
+index 03cbfa0..5a6d8e6 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -324,10 +324,11 @@ config KSM
@@ -118381,7 +143101,7 @@ index 957d3da..1d34e20 100644
depends on !KMEMCHECK
select PAGE_EXTENSION
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
-index cbe6f0b..200caf3 100644
+index c554d17..9ddceb5 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -12,7 +12,7 @@
@@ -118403,7 +143123,7 @@ index cbe6f0b..200caf3 100644
bdi_destroy(bdi);
return err;
diff --git a/mm/debug.c b/mm/debug.c
-index 668aa35..1b35d47 100644
+index f05b2d5..0d6e01f 100644
--- a/mm/debug.c
+++ b/mm/debug.c
@@ -127,6 +127,9 @@ static const struct trace_print_flags vmaflags_names[] = {
@@ -118417,10 +143137,10 @@ index 668aa35..1b35d47 100644
{VM_NORESERVE, "noreserve" },
{VM_HUGETLB, "hugetlb" },
diff --git a/mm/filemap.c b/mm/filemap.c
-index 1bb0076..b1f8586 100644
+index da7a35d..d10518d 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
-@@ -1759,15 +1759,16 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
+@@ -1860,15 +1860,16 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
ssize_t retval = 0;
loff_t *ppos = &iocb->ki_pos;
loff_t pos = *ppos;
@@ -118440,7 +143160,7 @@ index 1bb0076..b1f8586 100644
size = i_size_read(inode);
retval = filemap_write_and_wait_range(mapping, pos,
pos + count - 1);
-@@ -2161,7 +2162,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
+@@ -2262,7 +2263,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)
@@ -118449,7 +143169,43 @@ index 1bb0076..b1f8586 100644
file_accessed(file);
vma->vm_ops = &generic_file_vm_ops;
return 0;
-@@ -2342,6 +2343,7 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)
+@@ -2305,7 +2306,7 @@ static struct page *wait_on_page_read(struct page *page)
+
+ static struct page *__read_cache_page(struct address_space *mapping,
+ pgoff_t index,
+- int (*filler)(void *, struct page *),
++ filler_t *filler,
+ void *data,
+ gfp_t gfp)
+ {
+@@ -2338,7 +2339,7 @@ repeat:
+
+ static struct page *do_read_cache_page(struct address_space *mapping,
+ pgoff_t index,
+- int (*filler)(void *, struct page *),
++ filler_t *filler,
+ void *data,
+ gfp_t gfp)
+
+@@ -2391,7 +2392,7 @@ out:
+ */
+ struct page *read_cache_page(struct address_space *mapping,
+ pgoff_t index,
+- int (*filler)(void *, struct page *),
++ filler_t *filler,
+ void *data)
+ {
+ return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping));
+@@ -2413,7 +2414,7 @@ struct page *read_cache_page_gfp(struct address_space *mapping,
+ pgoff_t index,
+ gfp_t gfp)
+ {
+- filler_t *filler = (filler_t *)mapping->a_ops->readpage;
++ filler_t *filler = mapping->a_ops->readpage;
+
+ return do_read_cache_page(mapping, index, filler, NULL, gfp);
+ }
+@@ -2443,6 +2444,7 @@ inline ssize_t generic_write_checks(struct kiocb *iocb, struct iov_iter *from)
pos = iocb->ki_pos;
if (limit != RLIM_INFINITY) {
@@ -118458,10 +143214,10 @@ index 1bb0076..b1f8586 100644
send_sig(SIGXFSZ, current, 0);
return -EFBIG;
diff --git a/mm/gup.c b/mm/gup.c
-index deafa2c..1a4e46a 100644
+index 7bf19ff..c059128 100644
--- a/mm/gup.c
+++ b/mm/gup.c
-@@ -302,11 +302,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
+@@ -356,11 +356,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
/* mlock all present pages, but do not fault in new pages */
if ((*flags & (FOLL_POPULATE | FOLL_MLOCK)) == FOLL_MLOCK)
return -ENOENT;
@@ -118473,7 +143229,7 @@ index deafa2c..1a4e46a 100644
if (*flags & FOLL_WRITE)
fault_flags |= FAULT_FLAG_WRITE;
if (nonblocking)
-@@ -472,14 +467,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+@@ -524,14 +519,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
if (!(gup_flags & FOLL_FORCE))
gup_flags |= FOLL_NUMA;
@@ -118490,7 +143246,7 @@ index deafa2c..1a4e46a 100644
if (!vma && in_gate_area(mm, start)) {
int ret;
ret = get_gate_page(mm, start & PAGE_MASK,
-@@ -491,7 +486,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+@@ -543,7 +538,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
goto next_page;
}
@@ -118499,7 +143255,7 @@ index deafa2c..1a4e46a 100644
return i ? : -EFAULT;
if (is_vm_hugetlb_page(vma)) {
i = follow_hugetlb_page(mm, vma, pages, vmas,
-@@ -552,7 +547,7 @@ next_page:
+@@ -604,7 +599,7 @@ next_page:
i += page_increm;
start += page_increm * PAGE_SIZE;
nr_pages -= page_increm;
@@ -118536,10 +143292,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 ef6963b..09c45dc 100644
+index aefba5a..07b8545 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
-@@ -39,7 +39,60 @@ int hugepages_treat_as_movable;
+@@ -38,7 +38,60 @@ int hugepages_treat_as_movable;
int hugetlb_max_hstate __read_mostly;
unsigned int default_hstate_idx;
@@ -118601,7 +143357,7 @@ index ef6963b..09c45dc 100644
/*
* Minimum page order among possible hugepage sizes, set to a proper value
* at boot time.
-@@ -2780,6 +2833,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
+@@ -2746,6 +2799,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)
{
@@ -118609,9 +143365,9 @@ index ef6963b..09c45dc 100644
struct hstate *h = &default_hstate;
unsigned long tmp = h->max_huge_pages;
int ret;
-@@ -2787,9 +2841,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
+@@ -2753,9 +2807,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
if (!hugepages_supported())
- return -ENOTSUPP;
+ return -EOPNOTSUPP;
- table->data = &tmp;
- table->maxlen = sizeof(unsigned long);
@@ -118623,15 +143379,15 @@ index ef6963b..09c45dc 100644
if (ret)
goto out;
-@@ -2824,6 +2879,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
+@@ -2790,6 +2845,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
struct hstate *h = &default_hstate;
unsigned long tmp;
int ret;
+ ctl_table_no_const hugetlb_table;
if (!hugepages_supported())
- return -ENOTSUPP;
-@@ -2833,9 +2889,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
+ return -EOPNOTSUPP;
+@@ -2799,9 +2855,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
if (write && hstate_is_gigantic(h))
return -EINVAL;
@@ -118645,7 +143401,7 @@ index ef6963b..09c45dc 100644
if (ret)
goto out;
-@@ -3341,6 +3398,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3307,6 +3364,27 @@ static void unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma,
i_mmap_unlock_write(mapping);
}
@@ -118673,9 +143429,9 @@ index ef6963b..09c45dc 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
-@@ -3454,6 +3532,11 @@ retry_avoidcopy:
+@@ -3420,6 +3498,11 @@ retry_avoidcopy:
make_huge_pte(vma, new_page, 1));
- page_remove_rmap(old_page);
+ page_remove_rmap(old_page, true);
hugepage_add_new_anon_rmap(new_page, vma, address);
+
+#ifdef CONFIG_PAX_SEGMEXEC
@@ -118685,7 +143441,7 @@ index ef6963b..09c45dc 100644
/* Make the old page be freed below */
new_page = old_page;
}
-@@ -3627,6 +3710,10 @@ retry:
+@@ -3593,6 +3676,10 @@ retry:
&& (vma->vm_flags & VM_SHARED)));
set_huge_pte_at(mm, address, ptep, new_pte);
@@ -118696,7 +143452,7 @@ index ef6963b..09c45dc 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 */
-@@ -3695,6 +3782,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3661,6 +3748,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
struct address_space *mapping;
int need_wait_lock = 0;
@@ -118707,7 +143463,7 @@ index ef6963b..09c45dc 100644
address &= huge_page_mask(h);
ptep = huge_pte_offset(mm, address);
-@@ -3712,6 +3803,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3678,6 +3769,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
return VM_FAULT_OOM;
}
@@ -118841,10 +143597,10 @@ index d8fb10d..1c74822 100644
void __init hugetlb_cgroup_file_init(void)
diff --git a/mm/internal.h b/mm/internal.h
-index 38e24b8..73ff43d 100644
+index a38a21e..8398316 100644
--- a/mm/internal.h
+++ b/mm/internal.h
-@@ -177,6 +177,7 @@ __find_buddy_index(unsigned long page_idx, unsigned int order)
+@@ -134,6 +134,7 @@ __find_buddy_index(unsigned long page_idx, unsigned int order)
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);
@@ -118852,11 +143608,20 @@ index 38e24b8..73ff43d 100644
extern void prep_compound_page(struct page *page, unsigned int order);
#ifdef CONFIG_MEMORY_FAILURE
extern bool is_free_buddy_page(struct page *page);
+@@ -236,7 +237,7 @@ static inline bool is_exec_mapping(vm_flags_t flags)
+ */
+ static inline bool is_stack_mapping(vm_flags_t flags)
+ {
+- return (flags & VM_STACK) == VM_STACK;
++ return flags & (VM_GROWSUP | VM_GROWSDOWN);
+ }
+
+ /*
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
-index 19423a4..f591ad4 100644
+index 25c0ad3..1b474de 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
-@@ -366,7 +366,7 @@ static void print_unreferenced(struct seq_file *seq,
+@@ -365,7 +365,7 @@ static void print_unreferenced(struct seq_file *seq,
for (i = 0; i < object->trace_len; i++) {
void *ptr = (void *)object->trace[i];
@@ -118865,7 +143630,7 @@ index 19423a4..f591ad4 100644
}
}
-@@ -1958,7 +1958,7 @@ static int __init kmemleak_late_init(void)
+@@ -1957,7 +1957,7 @@ static int __init kmemleak_late_init(void)
return -ENOMEM;
}
@@ -118910,10 +143675,10 @@ index d159b1c..7655796 100644
return ret ? -EFAULT : 0;
}
diff --git a/mm/madvise.c b/mm/madvise.c
-index c889fcb..f181221 100644
+index f56825b..f86f118 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
-@@ -52,6 +52,10 @@ static long madvise_behavior(struct vm_area_struct *vma,
+@@ -56,6 +56,10 @@ static long madvise_behavior(struct vm_area_struct *vma,
pgoff_t pgoff;
unsigned long new_flags = vma->vm_flags;
@@ -118924,7 +143689,7 @@ index c889fcb..f181221 100644
switch (behavior) {
case MADV_NORMAL:
new_flags = new_flags & ~VM_RAND_READ & ~VM_SEQ_READ;
-@@ -128,6 +132,13 @@ success:
+@@ -132,6 +136,13 @@ success:
/*
* vm_flags is protected by the mmap_sem held in write mode.
*/
@@ -118938,7 +143703,7 @@ index c889fcb..f181221 100644
vma->vm_flags = new_flags;
out:
-@@ -279,11 +290,27 @@ static long madvise_dontneed(struct vm_area_struct *vma,
+@@ -471,11 +482,27 @@ static long madvise_dontneed(struct vm_area_struct *vma,
struct vm_area_struct **prev,
unsigned long start, unsigned long end)
{
@@ -118966,7 +143731,7 @@ index c889fcb..f181221 100644
return 0;
}
-@@ -486,6 +513,16 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
+@@ -687,6 +714,16 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
if (end < start)
return error;
@@ -118984,10 +143749,10 @@ index c889fcb..f181221 100644
if (end == start)
return error;
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
-index fc0bcc4..2e9eabc 100644
+index caf3bf7..162b323 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
-@@ -809,7 +809,7 @@ static void memcg_check_events(struct mem_cgroup *memcg, struct page *page)
+@@ -748,7 +748,7 @@ static void memcg_check_events(struct mem_cgroup *memcg, struct page *page)
mem_cgroup_update_tree(memcg, page);
#if MAX_NUMNODES > 1
if (unlikely(do_numainfo))
@@ -118996,7 +143761,7 @@ index fc0bcc4..2e9eabc 100644
#endif
}
}
-@@ -1451,7 +1451,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg)
+@@ -1381,7 +1381,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.
*/
@@ -119005,7 +143770,7 @@ index fc0bcc4..2e9eabc 100644
return;
if (atomic_inc_return(&memcg->numainfo_updating) > 1)
return;
-@@ -1465,7 +1465,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg)
+@@ -1395,7 +1395,7 @@ static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg)
node_clear(nid, memcg->scan_nodes);
}
@@ -119015,7 +143780,7 @@ index fc0bcc4..2e9eabc 100644
}
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
-index 750b789..b1b1b59 100644
+index ac595e7..78fa945 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -64,7 +64,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0;
@@ -119046,10 +143811,10 @@ index 750b789..b1b1b59 100644
/*
* free pages are specially detected outside this table:
diff --git a/mm/memory.c b/mm/memory.c
-index b80bf47..d3fd553 100644
+index 8132787..64b99d0 100644
--- a/mm/memory.c
+++ b/mm/memory.c
-@@ -415,6 +415,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
+@@ -416,6 +416,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);
@@ -119057,7 +143822,7 @@ index b80bf47..d3fd553 100644
start &= PUD_MASK;
if (start < floor)
return;
-@@ -430,6 +431,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
+@@ -431,6 +432,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);
@@ -119065,7 +143830,7 @@ index b80bf47..d3fd553 100644
}
static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
-@@ -449,6 +451,7 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
+@@ -450,6 +452,7 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
free_pmd_range(tlb, pud, addr, next, floor, ceiling);
} while (pud++, addr = next, addr != end);
@@ -119073,7 +143838,7 @@ index b80bf47..d3fd553 100644
start &= PGDIR_MASK;
if (start < floor)
return;
-@@ -463,6 +466,8 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
+@@ -464,6 +467,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);
@@ -119082,7 +143847,7 @@ index b80bf47..d3fd553 100644
}
/*
-@@ -691,7 +696,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
+@@ -686,7 +691,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
*/
@@ -119091,7 +143856,7 @@ index b80bf47..d3fd553 100644
vma->vm_file,
vma->vm_ops ? vma->vm_ops->fault : NULL,
vma->vm_file ? vma->vm_file->f_op->mmap : NULL,
-@@ -1464,6 +1469,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr,
+@@ -1448,6 +1453,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));
@@ -119102,7 +143867,7 @@ index b80bf47..d3fd553 100644
retval = 0;
pte_unmap_unlock(pte, ptl);
return retval;
-@@ -1508,9 +1517,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
+@@ -1492,9 +1501,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)) {
@@ -119124,15 +143889,15 @@ index b80bf47..d3fd553 100644
}
return insert_page(vma, addr, page, vma->vm_page_prot);
}
-@@ -1593,6 +1614,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
- unsigned long pfn)
+@@ -1580,6 +1601,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
+ pfn_t pfn)
{
BUG_ON(!(vma->vm_flags & VM_MIXEDMAP));
+ BUG_ON(vma->vm_mirror);
if (addr < vma->vm_start || addr >= vma->vm_end)
return -EFAULT;
-@@ -1840,7 +1862,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
+@@ -1832,7 +1854,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
BUG_ON(pud_huge(*pud));
@@ -119143,7 +143908,7 @@ index b80bf47..d3fd553 100644
if (!pmd)
return -ENOMEM;
do {
-@@ -1860,7 +1884,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
+@@ -1852,7 +1876,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
unsigned long next;
int err;
@@ -119154,7 +143919,7 @@ index b80bf47..d3fd553 100644
if (!pud)
return -ENOMEM;
do {
-@@ -2041,6 +2067,196 @@ static inline int wp_page_reuse(struct mm_struct *mm,
+@@ -2048,6 +2074,196 @@ static inline int wp_page_reuse(struct mm_struct *mm,
return VM_FAULT_WRITE;
}
@@ -119196,7 +143961,7 @@ index b80bf47..d3fd553 100644
+ dec_mm_counter_fast(mm, MM_ANONPAGES);
+ else
+ dec_mm_counter_fast(mm, MM_FILEPAGES);
-+ page_remove_rmap(page);
++ page_remove_rmap(page, false);
+ page_cache_release(page);
+ }
+ }
@@ -119237,7 +144002,7 @@ index b80bf47..d3fd553 100644
+
+ entry_m = pfn_pte(page_to_pfn(page_m), vma_m->vm_page_prot);
+ page_cache_get(page_m);
-+ page_add_anon_rmap(page_m, vma_m, address_m);
++ page_add_anon_rmap(page_m, vma_m, address_m, false);
+ inc_mm_counter_fast(mm, MM_ANONPAGES);
+ set_pte_at(mm, address_m, pte_m, entry_m);
+ update_mmu_cache(vma_m, address_m, pte_m);
@@ -119351,7 +144116,7 @@ index b80bf47..d3fd553 100644
/*
* Handle the case of a page which we actually need to copy to a new page.
*
-@@ -2095,6 +2311,12 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2102,6 +2318,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))) {
@@ -119363,9 +144128,9 @@ index b80bf47..d3fd553 100644
+
if (old_page) {
if (!PageAnon(old_page)) {
- dec_mm_counter_fast(mm, MM_FILEPAGES);
-@@ -2149,6 +2371,10 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
- page_remove_rmap(old_page);
+ dec_mm_counter_fast(mm,
+@@ -2157,6 +2379,10 @@ static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
+ page_remove_rmap(old_page, false);
}
+#ifdef CONFIG_PAX_SEGMEXEC
@@ -119375,9 +144140,9 @@ index b80bf47..d3fd553 100644
/* Free the old page.. */
new_page = old_page;
page_copied = 1;
-@@ -2580,6 +2806,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
- swap_free(entry);
- if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
+@@ -2585,6 +2811,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);
+
+#ifdef CONFIG_PAX_SEGMEXEC
@@ -119387,7 +144152,7 @@ index b80bf47..d3fd553 100644
unlock_page(page);
if (page != swapcache) {
/*
-@@ -2603,6 +2834,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2608,6 +2839,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);
@@ -119399,7 +144164,7 @@ index b80bf47..d3fd553 100644
unlock:
pte_unmap_unlock(page_table, ptl);
out:
-@@ -2622,40 +2858,6 @@ out_release:
+@@ -2627,40 +2863,6 @@ out_release:
}
/*
@@ -119440,7 +144205,7 @@ index b80bf47..d3fd553 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.
-@@ -2665,25 +2867,22 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2670,25 +2872,22 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned int flags)
{
struct mem_cgroup *memcg;
@@ -119472,7 +144237,7 @@ index b80bf47..d3fd553 100644
if (!pte_none(*page_table))
goto unlock;
/* Deliver the page fault to userland, check inside PT lock */
-@@ -2696,6 +2895,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2701,6 +2900,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
}
/* Allocate our own private page. */
@@ -119481,7 +144246,7 @@ index b80bf47..d3fd553 100644
if (unlikely(anon_vma_prepare(vma)))
goto oom;
page = alloc_zeroed_user_highpage_movable(vma, address);
-@@ -2729,6 +2930,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2734,6 +2935,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
VM_UFFD_MISSING);
}
@@ -119491,9 +144256,9 @@ index b80bf47..d3fd553 100644
+#endif
+
inc_mm_counter_fast(mm, MM_ANONPAGES);
- page_add_new_anon_rmap(page, vma, address);
- mem_cgroup_commit_charge(page, memcg, false);
-@@ -2738,6 +2944,12 @@ setpte:
+ page_add_new_anon_rmap(page, vma, address, false);
+ mem_cgroup_commit_charge(page, memcg, false, false);
+@@ -2743,6 +2949,12 @@ setpte:
/* No need to invalidate - it was non-present before */
update_mmu_cache(vma, address, page_table);
@@ -119506,7 +144271,7 @@ index b80bf47..d3fd553 100644
unlock:
pte_unmap_unlock(page_table, ptl);
return 0;
-@@ -2970,6 +3182,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2977,6 +3189,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);
@@ -119518,7 +144283,7 @@ index b80bf47..d3fd553 100644
unlock_page(fault_page);
unlock_out:
pte_unmap_unlock(pte, ptl);
-@@ -3021,7 +3238,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3028,7 +3245,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
}
goto uncharge_out;
}
@@ -119534,10 +144299,10 @@ index b80bf47..d3fd553 100644
+ pax_mirror_anon_pte(vma, address, new_page, ptl);
+#endif
+
- mem_cgroup_commit_charge(new_page, memcg, false);
+ mem_cgroup_commit_charge(new_page, memcg, false, false);
lru_cache_add_active_or_unevictable(new_page, vma);
pte_unmap_unlock(pte, ptl);
-@@ -3079,6 +3307,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3086,6 +3314,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);
@@ -119549,7 +144314,7 @@ index b80bf47..d3fd553 100644
pte_unmap_unlock(pte, ptl);
if (set_page_dirty(fault_page))
-@@ -3325,6 +3558,12 @@ static int handle_pte_fault(struct mm_struct *mm,
+@@ -3338,6 +3571,12 @@ static int handle_pte_fault(struct mm_struct *mm,
if (flags & FAULT_FLAG_WRITE)
flush_tlb_fix_spurious_fault(vma, address);
}
@@ -119562,7 +144327,7 @@ index b80bf47..d3fd553 100644
unlock:
pte_unmap_unlock(pte, ptl);
return 0;
-@@ -3344,9 +3583,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3357,9 +3596,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
pmd_t *pmd;
pte_t *pte;
@@ -119604,7 +144369,7 @@ index b80bf47..d3fd553 100644
pgd = pgd_offset(mm, address);
pud = pud_alloc(mm, pgd, address);
if (!pud)
-@@ -3488,6 +3759,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
+@@ -3493,6 +3764,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
@@ -119628,7 +144393,7 @@ index b80bf47..d3fd553 100644
#endif /* __PAGETABLE_PUD_FOLDED */
#ifndef __PAGETABLE_PMD_FOLDED
-@@ -3520,6 +3808,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
+@@ -3525,6 +3813,32 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
@@ -119661,7 +144426,7 @@ index b80bf47..d3fd553 100644
#endif /* __PAGETABLE_PMD_FOLDED */
static int __follow_pte(struct mm_struct *mm, unsigned long address,
-@@ -3629,8 +3943,8 @@ out:
+@@ -3634,8 +3948,8 @@ out:
return ret;
}
@@ -119672,7 +144437,7 @@ index b80bf47..d3fd553 100644
{
resource_size_t phys_addr;
unsigned long prot = 0;
-@@ -3656,8 +3970,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
+@@ -3661,8 +3975,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.
*/
@@ -119683,7 +144448,7 @@ index b80bf47..d3fd553 100644
{
struct vm_area_struct *vma;
void *old_buf = buf;
-@@ -3665,7 +3979,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3670,7 +3984,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) {
@@ -119692,7 +144457,7 @@ index b80bf47..d3fd553 100644
void *maddr;
struct page *page = NULL;
-@@ -3726,8 +4040,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3731,8 +4045,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
*
* The caller must hold a reference on @mm.
*/
@@ -119703,7 +144468,7 @@ index b80bf47..d3fd553 100644
{
return __access_remote_vm(NULL, mm, addr, buf, len, write);
}
-@@ -3737,11 +4051,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
+@@ -3742,11 +4056,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
*/
@@ -119719,10 +144484,10 @@ index b80bf47..d3fd553 100644
mm = get_task_mm(tsk);
if (!mm)
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
-index 87a1779..ebf95d4 100644
+index 9a3f6b9..b9af66c 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
-@@ -700,6 +700,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
+@@ -731,6 +731,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
unsigned long vmstart;
unsigned long vmend;
@@ -119733,7 +144498,7 @@ index 87a1779..ebf95d4 100644
vma = find_vma(mm, start);
if (!vma || vma->vm_start > start)
return -EFAULT;
-@@ -743,6 +747,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
+@@ -774,6 +778,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
err = vma_replace_policy(vma, new_pol);
if (err)
goto out;
@@ -119750,7 +144515,7 @@ index 87a1779..ebf95d4 100644
}
out:
-@@ -1158,6 +1172,17 @@ static long do_mbind(unsigned long start, unsigned long len,
+@@ -1189,6 +1203,17 @@ static long do_mbind(unsigned long start, unsigned long len,
if (end < start)
return -EINVAL;
@@ -119768,7 +144533,7 @@ index 87a1779..ebf95d4 100644
if (end == start)
return 0;
-@@ -1383,8 +1408,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1414,8 +1439,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) &&
@@ -119778,7 +144543,7 @@ index 87a1779..ebf95d4 100644
rcu_read_unlock();
err = -EPERM;
goto out_put;
-@@ -1415,6 +1439,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1446,6 +1470,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
goto out;
}
@@ -119795,10 +144560,10 @@ index 87a1779..ebf95d4 100644
capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE);
diff --git a/mm/migrate.c b/mm/migrate.c
-index 6d17e0a..64ef47b 100644
+index 3ad0fea..2b361a1 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
-@@ -1505,8 +1505,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,
+@@ -1509,8 +1509,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) &&
@@ -119809,7 +144574,7 @@ index 6d17e0a..64ef47b 100644
err = -EPERM;
goto out;
diff --git a/mm/mlock.c b/mm/mlock.c
-index d6006b1..a72cbda 100644
+index 96f0010..21004da 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -14,6 +14,7 @@
@@ -119820,7 +144585,7 @@ index d6006b1..a72cbda 100644
#include <linux/sched.h>
#include <linux/export.h>
#include <linux/rmap.h>
-@@ -560,7 +561,7 @@ static int apply_vma_lock_flags(unsigned long start, size_t len,
+@@ -573,7 +574,7 @@ static int apply_vma_lock_flags(unsigned long start, size_t len,
{
unsigned long nstart, end, tmp;
struct vm_area_struct * vma, * prev;
@@ -119829,7 +144594,7 @@ index d6006b1..a72cbda 100644
VM_BUG_ON(offset_in_page(start));
VM_BUG_ON(len != PAGE_ALIGN(len));
-@@ -569,6 +570,9 @@ static int apply_vma_lock_flags(unsigned long start, size_t len,
+@@ -582,6 +583,9 @@ static int apply_vma_lock_flags(unsigned long start, size_t len,
return -EINVAL;
if (end == start)
return 0;
@@ -119839,7 +144604,7 @@ index d6006b1..a72cbda 100644
vma = find_vma(current->mm, start);
if (!vma || vma->vm_start > start)
return -ENOMEM;
-@@ -578,8 +582,14 @@ static int apply_vma_lock_flags(unsigned long start, size_t len,
+@@ -591,8 +595,14 @@ static int apply_vma_lock_flags(unsigned long start, size_t len,
prev = vma;
for (nstart = start ; ; ) {
@@ -119855,7 +144620,7 @@ index d6006b1..a72cbda 100644
newflags |= flags;
/* Here we know that vma->vm_start <= nstart < vma->vm_end. */
-@@ -627,6 +637,10 @@ static int do_mlock(unsigned long start, size_t len, vm_flags_t flags)
+@@ -640,6 +650,10 @@ static int do_mlock(unsigned long start, size_t len, vm_flags_t flags)
locked += current->mm->locked_vm;
/* check against resource limits */
@@ -119866,7 +144631,7 @@ index d6006b1..a72cbda 100644
if ((locked <= lock_limit) || capable(CAP_IPC_LOCK))
error = apply_vma_lock_flags(start, len, flags);
-@@ -707,6 +721,11 @@ static int apply_mlockall_flags(int flags)
+@@ -720,6 +734,11 @@ static int apply_mlockall_flags(int flags)
for (vma = current->mm->mmap; vma ; vma = prev->vm_next) {
vm_flags_t newflags;
@@ -119878,7 +144643,7 @@ index d6006b1..a72cbda 100644
newflags = vma->vm_flags & VM_LOCKED_CLEAR_MASK;
newflags |= to_add;
-@@ -736,8 +755,12 @@ SYSCALL_DEFINE1(mlockall, int, flags)
+@@ -749,8 +768,12 @@ SYSCALL_DEFINE1(mlockall, int, flags)
lock_limit >>= PAGE_SHIFT;
ret = -ENOMEM;
@@ -119906,20 +144671,20 @@ index fdadf91..90c6bcc 100644
.priority = IPC_CALLBACK_PRI, /* use lowest priority */
};
diff --git a/mm/mmap.c b/mm/mmap.c
-index 455772a..5ce0964 100644
+index 76d1ec2..85ad30a 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
-@@ -42,6 +42,7 @@
- #include <linux/memory.h>
+@@ -43,6 +43,7 @@
#include <linux/printk.h>
#include <linux/userfaultfd_k.h>
+ #include <linux/moduleparam.h>
+#include <linux/random.h>
#include <asm/uaccess.h>
#include <asm/cacheflush.h>
-@@ -58,6 +59,16 @@
- #define arch_rebalance_pgtables(addr, len) (addr)
- #endif
+@@ -73,6 +74,16 @@ int mmap_rnd_compat_bits __read_mostly = CONFIG_ARCH_MMAP_RND_COMPAT_BITS;
+ static bool ignore_rlimit_data = true;
+ core_param(ignore_rlimit_data, ignore_rlimit_data, bool, 0644);
+static inline void verify_mm_writelocked(struct mm_struct *mm)
+{
@@ -119934,7 +144699,7 @@ index 455772a..5ce0964 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);
-@@ -77,16 +88,25 @@ static void unmap_region(struct mm_struct *mm,
+@@ -92,16 +103,25 @@ static void unmap_region(struct mm_struct *mm,
* x: (no) no x: (no) yes x: (no) yes x: (yes) yes
*
*/
@@ -119963,7 +144728,7 @@ index 455772a..5ce0964 100644
}
EXPORT_SYMBOL(vm_get_page_prot);
-@@ -115,6 +135,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly;
+@@ -130,6 +150,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly;
int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */
unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */
@@ -119971,7 +144736,7 @@ index 455772a..5ce0964 100644
/*
* Make sure vm_committed_as in one cacheline and not cacheline shared with
* other variables. It can be updated by several CPUs frequently.
-@@ -272,6 +293,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+@@ -287,6 +308,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
struct vm_area_struct *next = vma->vm_next;
might_sleep();
@@ -119979,7 +144744,7 @@ index 455772a..5ce0964 100644
if (vma->vm_ops && vma->vm_ops->close)
vma->vm_ops->close(vma);
if (vma->vm_file)
-@@ -285,6 +307,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len);
+@@ -300,6 +322,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len);
SYSCALL_DEFINE1(brk, unsigned long, brk)
{
@@ -119987,7 +144752,7 @@ index 455772a..5ce0964 100644
unsigned long retval;
unsigned long newbrk, oldbrk;
struct mm_struct *mm = current->mm;
-@@ -315,7 +338,13 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
+@@ -330,7 +353,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
*/
@@ -120002,7 +144767,7 @@ index 455772a..5ce0964 100644
mm->end_data, mm->start_data))
goto out;
-@@ -977,6 +1006,12 @@ can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
+@@ -995,6 +1024,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)
{
@@ -120015,7 +144780,7 @@ index 455772a..5ce0964 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)
-@@ -998,6 +1033,12 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
+@@ -1016,6 +1051,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)
{
@@ -120028,7 +144793,7 @@ index 455772a..5ce0964 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;
-@@ -1048,6 +1089,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -1066,6 +1107,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
struct vm_area_struct *area, *next;
int err;
@@ -120042,7 +144807,7 @@ index 455772a..5ce0964 100644
/*
* We later require that vma->vm_flags == vm_flags,
* so this tests vma->vm_flags & VM_SPECIAL, too.
-@@ -1063,6 +1111,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -1081,6 +1129,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;
@@ -120058,7 +144823,7 @@ index 455772a..5ce0964 100644
/*
* Can it merge with the predecessor?
*/
-@@ -1085,9 +1142,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -1103,9 +1160,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);
@@ -120084,7 +144849,7 @@ index 455772a..5ce0964 100644
if (err)
return NULL;
khugepaged_enter_vma_merge(prev, vm_flags);
-@@ -1102,12 +1174,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -1120,12 +1192,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)) {
@@ -120114,29 +144879,7 @@ index 455772a..5ce0964 100644
if (err)
return NULL;
khugepaged_enter_vma_merge(area, vm_flags);
-@@ -1216,8 +1303,10 @@ none:
- void vm_stat_account(struct mm_struct *mm, unsigned long flags,
- struct file *file, long pages)
- {
-- const unsigned long stack_flags
-- = VM_STACK_FLAGS & (VM_GROWSUP|VM_GROWSDOWN);
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+ if (!(mm->pax_flags & MF_PAX_RANDMMAP) || (flags & (VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)))
-+#endif
-
- mm->total_vm += pages;
-
-@@ -1225,7 +1314,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags,
- mm->shared_vm += pages;
- if ((flags & (VM_EXEC|VM_WRITE)) == VM_EXEC)
- mm->exec_vm += pages;
-- } else if (flags & stack_flags)
-+ } else if (flags & (VM_GROWSUP|VM_GROWSDOWN))
- mm->stack_vm += pages;
- }
- #endif /* CONFIG_PROC_FS */
-@@ -1255,6 +1344,10 @@ static inline int mlock_future_check(struct mm_struct *mm,
+@@ -1255,6 +1342,10 @@ static inline int mlock_future_check(struct mm_struct *mm,
locked += mm->locked_vm;
lock_limit = rlimit(RLIMIT_MEMLOCK);
lock_limit >>= PAGE_SHIFT;
@@ -120147,7 +144890,7 @@ index 455772a..5ce0964 100644
if (locked > lock_limit && !capable(CAP_IPC_LOCK))
return -EAGAIN;
}
-@@ -1282,7 +1375,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1282,7 +1373,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.)
*/
@@ -120156,7 +144899,7 @@ index 455772a..5ce0964 100644
if (!(file && path_noexec(&file->f_path)))
prot |= PROT_EXEC;
-@@ -1305,7 +1398,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1305,7 +1396,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.
*/
@@ -120165,7 +144908,7 @@ index 455772a..5ce0964 100644
if (offset_in_page(addr))
return addr;
-@@ -1316,6 +1409,43 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1316,6 +1407,43 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
vm_flags |= calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) |
mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
@@ -120209,7 +144952,7 @@ index 455772a..5ce0964 100644
if (flags & MAP_LOCKED)
if (!can_do_mlock())
return -EPERM;
-@@ -1403,6 +1533,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
+@@ -1403,6 +1531,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
vm_flags |= VM_NORESERVE;
}
@@ -120219,7 +144962,7 @@ index 455772a..5ce0964 100644
addr = mmap_region(file, addr, len, vm_flags, pgoff);
if (!IS_ERR_VALUE(addr) &&
((vm_flags & VM_LOCKED) ||
-@@ -1496,7 +1629,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma)
+@@ -1496,7 +1627,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 */
@@ -120228,7 +144971,7 @@ index 455772a..5ce0964 100644
return 0;
/* The backer wishes to know when pages are first written to? */
-@@ -1547,7 +1680,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1547,7 +1678,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
struct rb_node **rb_link, *rb_parent;
unsigned long charged = 0;
@@ -120248,10 +144991,10 @@ index 455772a..5ce0964 100644
+ if (!(mm->pax_flags & MF_PAX_RANDMMAP) || (vm_flags & (VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)))
+#endif
+
- if (!may_expand_vm(mm, len >> PAGE_SHIFT)) {
+ if (!may_expand_vm(mm, vm_flags, len >> PAGE_SHIFT)) {
unsigned long nr_pages;
-@@ -1569,6 +1717,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1567,6 +1713,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
&rb_parent)) {
if (do_munmap(mm, addr, len))
return -ENOMEM;
@@ -120259,7 +145002,7 @@ index 455772a..5ce0964 100644
}
/*
-@@ -1600,6 +1749,16 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1598,6 +1745,16 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
goto unacct_error;
}
@@ -120276,7 +145019,7 @@ index 455772a..5ce0964 100644
vma->vm_mm = mm;
vma->vm_start = addr;
vma->vm_end = addr + len;
-@@ -1630,6 +1789,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1628,6 +1785,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
if (error)
goto unmap_and_free_vma;
@@ -120290,7 +145033,7 @@ index 455772a..5ce0964 100644
/* Can addr have changed??
*
* Answer: Yes, several device drivers can do it in their
-@@ -1648,6 +1814,12 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1646,6 +1810,12 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
}
vma_link(mm, vma, prev, rb_link, rb_parent);
@@ -120303,15 +145046,15 @@ index 455772a..5ce0964 100644
/* Once vma denies write, undo our temporary denial count */
if (file) {
if (vm_flags & VM_SHARED)
-@@ -1660,6 +1832,7 @@ out:
+@@ -1658,6 +1828,7 @@ out:
perf_event_mmap(vma);
- vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
+ vm_stat_account(mm, vm_flags, len >> PAGE_SHIFT);
+ track_exec_limit(mm, addr, addr + len, vm_flags);
if (vm_flags & VM_LOCKED) {
if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) ||
vma == get_gate_vma(current->mm)))
-@@ -1697,6 +1870,12 @@ allow_write_and_free_vma:
+@@ -1695,6 +1866,12 @@ allow_write_and_free_vma:
if (vm_flags & VM_DENYWRITE)
allow_write_access(file);
free_vma:
@@ -120324,7 +145067,7 @@ index 455772a..5ce0964 100644
kmem_cache_free(vm_area_cachep, vma);
unacct_error:
if (charged)
-@@ -1704,7 +1883,63 @@ unacct_error:
+@@ -1702,7 +1879,63 @@ unacct_error:
return error;
}
@@ -120389,7 +145132,7 @@ index 455772a..5ce0964 100644
{
/*
* We implement the search by looking for an rbtree node that
-@@ -1752,11 +1987,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
+@@ -1750,11 +1983,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
}
}
@@ -120420,7 +145163,7 @@ index 455772a..5ce0964 100644
if (gap_end >= low_limit && gap_end - gap_start >= length)
goto found;
-@@ -1806,7 +2059,7 @@ found:
+@@ -1804,7 +2055,7 @@ found:
return gap_start;
}
@@ -120429,7 +145172,7 @@ index 455772a..5ce0964 100644
{
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
-@@ -1860,6 +2113,24 @@ check_current:
+@@ -1858,6 +2109,24 @@ check_current:
gap_end = vma->vm_start;
if (gap_end < low_limit)
return -ENOMEM;
@@ -120454,7 +145197,7 @@ index 455772a..5ce0964 100644
if (gap_start <= high_limit && gap_end - gap_start >= length)
goto found;
-@@ -1923,6 +2194,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1921,6 +2190,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;
@@ -120462,7 +145205,7 @@ index 455772a..5ce0964 100644
if (len > TASK_SIZE - mmap_min_addr)
return -ENOMEM;
-@@ -1930,11 +2202,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1928,11 +2198,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
if (flags & MAP_FIXED)
return addr;
@@ -120479,7 +145222,7 @@ index 455772a..5ce0964 100644
return addr;
}
-@@ -1943,6 +2219,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1941,6 +2215,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;
@@ -120487,7 +145230,7 @@ index 455772a..5ce0964 100644
return vm_unmapped_area(&info);
}
#endif
-@@ -1961,6 +2238,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1959,6 +2234,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;
@@ -120495,7 +145238,7 @@ index 455772a..5ce0964 100644
/* requested length too big for entire address space */
if (len > TASK_SIZE - mmap_min_addr)
-@@ -1969,12 +2247,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1967,12 +2243,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
if (flags & MAP_FIXED)
return addr;
@@ -120513,7 +145256,7 @@ index 455772a..5ce0964 100644
return addr;
}
-@@ -1983,6 +2265,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1981,6 +2261,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;
@@ -120521,7 +145264,7 @@ index 455772a..5ce0964 100644
addr = vm_unmapped_area(&info);
/*
-@@ -1995,6 +2278,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1993,6 +2274,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;
@@ -120534,7 +145277,7 @@ index 455772a..5ce0964 100644
info.high_limit = TASK_SIZE;
addr = vm_unmapped_area(&info);
}
-@@ -2094,6 +2383,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
+@@ -2092,6 +2379,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
return vma;
}
@@ -120563,7 +145306,7 @@ index 455772a..5ce0964 100644
/*
* Verify that the stack growth is acceptable and
* update accounting. This is shared with both the
-@@ -2111,8 +2422,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2109,8 +2418,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
/* Stack limit test */
actual_size = size;
@@ -120573,7 +145316,7 @@ index 455772a..5ce0964 100644
if (actual_size > READ_ONCE(rlim[RLIMIT_STACK].rlim_cur))
return -ENOMEM;
-@@ -2123,6 +2433,10 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2121,6 +2429,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;
@@ -120584,7 +145327,7 @@ index 455772a..5ce0964 100644
if (locked > limit && !capable(CAP_IPC_LOCK))
return -ENOMEM;
}
-@@ -2148,17 +2462,21 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2146,17 +2458,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.
*/
@@ -120608,7 +145351,7 @@ index 455772a..5ce0964 100644
else
return -ENOMEM;
-@@ -2166,15 +2484,24 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
+@@ -2164,15 +2480,24 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
if (unlikely(anon_vma_prepare(vma)))
return -ENOMEM;
@@ -120635,7 +145378,7 @@ index 455772a..5ce0964 100644
unsigned long size, grow;
size = address - vma->vm_start;
-@@ -2213,6 +2540,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
+@@ -2210,6 +2535,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
}
}
}
@@ -120644,7 +145387,7 @@ index 455772a..5ce0964 100644
anon_vma_unlock_write(vma->anon_vma);
khugepaged_enter_vma_merge(vma, vma->vm_flags);
validate_mm(mm);
-@@ -2228,6 +2557,8 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2225,6 +2552,8 @@ int expand_downwards(struct vm_area_struct *vma,
{
struct mm_struct *mm = vma->vm_mm;
int error;
@@ -120653,7 +145396,7 @@ index 455772a..5ce0964 100644
address &= PAGE_MASK;
error = security_mmap_addr(address);
-@@ -2238,6 +2569,15 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2235,6 +2564,15 @@ int expand_downwards(struct vm_area_struct *vma,
if (unlikely(anon_vma_prepare(vma)))
return -ENOMEM;
@@ -120669,7 +145412,7 @@ index 455772a..5ce0964 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
-@@ -2246,9 +2586,17 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2243,9 +2581,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 */
@@ -120688,7 +145431,7 @@ index 455772a..5ce0964 100644
size = vma->vm_end - address;
grow = (vma->vm_start - address) >> PAGE_SHIFT;
-@@ -2277,13 +2625,27 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2273,13 +2619,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);
@@ -120716,7 +145459,7 @@ index 455772a..5ce0964 100644
khugepaged_enter_vma_merge(vma, vma->vm_flags);
validate_mm(mm);
return error;
-@@ -2383,6 +2745,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2379,6 +2739,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
do {
long nrpages = vma_pages(vma);
@@ -120729,8 +145472,8 @@ index 455772a..5ce0964 100644
+
if (vma->vm_flags & VM_ACCOUNT)
nr_accounted += nrpages;
- vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages);
-@@ -2427,6 +2796,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
+ vm_stat_account(mm, vma->vm_flags, -nrpages);
+@@ -2423,6 +2790,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
insertion_point = (prev ? &prev->vm_next : &mm->mmap);
vma->vm_prev = NULL;
do {
@@ -120747,7 +145490,7 @@ index 455772a..5ce0964 100644
vma_rb_erase(vma, &mm->mm_rb);
mm->map_count--;
tail_vma = vma;
-@@ -2454,14 +2833,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2450,14 +2827,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
struct vm_area_struct *new;
int err;
@@ -120781,7 +145524,7 @@ index 455772a..5ce0964 100644
/* most fields are the same, copy all, and then fixup */
*new = *vma;
-@@ -2474,6 +2872,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2470,6 +2866,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);
}
@@ -120804,7 +145547,7 @@ index 455772a..5ce0964 100644
err = vma_dup_policy(vma, new);
if (err)
goto out_free_vma;
-@@ -2494,6 +2908,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2490,6 +2902,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);
@@ -120843,7 +145586,7 @@ index 455772a..5ce0964 100644
/* Success. */
if (!err)
return 0;
-@@ -2503,10 +2949,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2499,10 +2943,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);
@@ -120863,7 +145606,7 @@ index 455772a..5ce0964 100644
kmem_cache_free(vm_area_cachep, new);
return err;
}
-@@ -2518,6 +2972,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2514,6 +2966,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)
{
@@ -120879,7 +145622,7 @@ index 455772a..5ce0964 100644
if (mm->map_count >= sysctl_max_map_count)
return -ENOMEM;
-@@ -2529,11 +2992,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2525,11 +2986,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
* work. This now handles partial unmappings.
* Jeremy Fitzhardinge <jeremy@goop.org>
*/
@@ -120910,7 +145653,7 @@ index 455772a..5ce0964 100644
if ((offset_in_page(start)) || start > TASK_SIZE || len > TASK_SIZE-start)
return -EINVAL;
-@@ -2611,6 +3093,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
+@@ -2607,6 +3087,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);
@@ -120919,7 +145662,7 @@ index 455772a..5ce0964 100644
return 0;
}
-@@ -2619,6 +3103,13 @@ int vm_munmap(unsigned long start, size_t len)
+@@ -2615,6 +3097,13 @@ int vm_munmap(unsigned long start, size_t len)
int ret;
struct mm_struct *mm = current->mm;
@@ -120933,7 +145676,7 @@ index 455772a..5ce0964 100644
down_write(&mm->mmap_sem);
ret = do_munmap(mm, start, len);
up_write(&mm->mmap_sem);
-@@ -2665,6 +3156,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+@@ -2661,6 +3150,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
down_write(&mm->mmap_sem);
vma = find_vma(mm, start);
@@ -120945,7 +145688,7 @@ index 455772a..5ce0964 100644
if (!vma || !(vma->vm_flags & VM_SHARED))
goto out;
-@@ -2725,16 +3221,6 @@ out:
+@@ -2721,16 +3215,6 @@ out:
return ret;
}
@@ -120962,7 +145705,7 @@ index 455772a..5ce0964 100644
/*
* this is really a simplified "do_mmap". it only handles
* anonymous maps. eventually we may be able to do some
-@@ -2748,6 +3234,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2744,6 +3228,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
struct rb_node **rb_link, *rb_parent;
pgoff_t pgoff = addr >> PAGE_SHIFT;
int error;
@@ -120970,7 +145713,7 @@ index 455772a..5ce0964 100644
len = PAGE_ALIGN(len);
if (!len)
-@@ -2755,10 +3242,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2751,10 +3236,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
@@ -120995,7 +145738,7 @@ index 455772a..5ce0964 100644
error = mlock_future_check(mm, mm->def_flags, len);
if (error)
return error;
-@@ -2776,16 +3277,17 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2772,16 +3271,17 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
&rb_parent)) {
if (do_munmap(mm, addr, len))
return -ENOMEM;
@@ -121003,8 +145746,8 @@ index 455772a..5ce0964 100644
}
/* Check against address space limits *after* clearing old maps... */
-- if (!may_expand_vm(mm, len >> PAGE_SHIFT))
-+ if (!may_expand_vm(mm, charged))
+- if (!may_expand_vm(mm, flags, len >> PAGE_SHIFT))
++ if (!may_expand_vm(mm, flags, charged))
return -ENOMEM;
if (mm->map_count > sysctl_max_map_count)
@@ -121015,7 +145758,7 @@ index 455772a..5ce0964 100644
return -ENOMEM;
/* Can we just expand an old private anonymous mapping? */
-@@ -2799,7 +3301,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2795,7 +3295,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
*/
vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
if (!vma) {
@@ -121024,12 +145767,14 @@ index 455772a..5ce0964 100644
return -ENOMEM;
}
-@@ -2813,10 +3315,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2809,11 +3309,12 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
vma_link(mm, vma, prev, rb_link, rb_parent);
out:
perf_event_mmap(vma);
- mm->total_vm += len >> PAGE_SHIFT;
+- mm->data_vm += len >> PAGE_SHIFT;
+ mm->total_vm += charged;
++ mm->data_vm += charged;
if (flags & VM_LOCKED)
- mm->locked_vm += (len >> PAGE_SHIFT);
+ mm->locked_vm += charged;
@@ -121038,7 +145783,7 @@ index 455772a..5ce0964 100644
return addr;
}
-@@ -2878,6 +3381,7 @@ void exit_mmap(struct mm_struct *mm)
+@@ -2875,6 +3376,7 @@ void exit_mmap(struct mm_struct *mm)
while (vma) {
if (vma->vm_flags & VM_ACCOUNT)
nr_accounted += vma_pages(vma);
@@ -121046,7 +145791,7 @@ index 455772a..5ce0964 100644
vma = remove_vma(vma);
}
vm_unacct_memory(nr_accounted);
-@@ -2892,6 +3396,10 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2889,6 +3391,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;
@@ -121057,7 +145802,7 @@ index 455772a..5ce0964 100644
if (find_vma_links(mm, vma->vm_start, vma->vm_end,
&prev, &rb_link, &rb_parent))
return -ENOMEM;
-@@ -2899,6 +3407,9 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2896,6 +3402,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;
@@ -121067,7 +145812,7 @@ index 455772a..5ce0964 100644
/*
* The vm_pgoff of a purely anonymous vma should be irrelevant
* until its first write fault, when page's anon_vma and index
-@@ -2916,7 +3427,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2913,7 +3422,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
vma->vm_pgoff = vma->vm_start >> PAGE_SHIFT;
}
@@ -121089,7 +145834,7 @@ index 455772a..5ce0964 100644
return 0;
}
-@@ -2935,6 +3460,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -2932,6 +3455,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;
@@ -121098,7 +145843,7 @@ index 455772a..5ce0964 100644
/*
* If anonymous vma has not yet been faulted, update new pgoff
* to match new location, to increase its chance of merging.
-@@ -3001,6 +3528,39 @@ out:
+@@ -2998,25 +3523,69 @@ out:
return NULL;
}
@@ -121138,19 +145883,58 @@ index 455772a..5ce0964 100644
/*
* Return true if the calling process may expand its vm space by the passed
* number of pages
-@@ -3012,6 +3572,11 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages)
-
- lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT;
-
-+ if ((cur + npages) > (ULONG_MAX >> PAGE_SHIFT))
+ */
+ bool may_expand_vm(struct mm_struct *mm, vm_flags_t flags, unsigned long npages)
+ {
++ if ((mm->total_vm + npages) > (ULONG_MAX >> PAGE_SHIFT))
+ gr_learn_resource(current, RLIMIT_AS, ULONG_MAX, 1);
+ else
-+ gr_learn_resource(current, RLIMIT_AS, (cur + npages) << PAGE_SHIFT, 1);
++ gr_learn_resource(current, RLIMIT_AS, (mm->total_vm + npages) << PAGE_SHIFT, 1);
+
- if (cur + npages > lim)
- return 0;
- return 1;
-@@ -3086,6 +3651,22 @@ static struct vm_area_struct *__install_special_mapping(
+ if (mm->total_vm + npages > rlimit(RLIMIT_AS) >> PAGE_SHIFT)
+ return false;
+
+- 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",
+- current->comm, current->pid,
+- (mm->data_vm + npages) << PAGE_SHIFT,
+- rlimit(RLIMIT_DATA));
++ 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;
++ 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",
++ current->comm, current->pid,
++ (mm->data_vm + npages) << PAGE_SHIFT,
++ rlimit(RLIMIT_DATA));
++ else
++ return false;
++ }
+ }
+
+ return true;
+@@ -3024,6 +3593,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)
+ {
++
++#ifdef CONFIG_PAX_RANDMMAP
++ if (!(mm->pax_flags & MF_PAX_RANDMMAP) || (flags & (VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)))
++#endif
++
+ mm->total_vm += npages;
+
+ if (is_exec_mapping(flags))
+@@ -3103,6 +3677,22 @@ static struct vm_area_struct *__install_special_mapping(
vma->vm_start = addr;
vma->vm_end = addr + len;
@@ -121174,7 +145958,7 @@ index 455772a..5ce0964 100644
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
diff --git a/mm/mprotect.c b/mm/mprotect.c
-index ef5be8e..811ccb0 100644
+index f7cb3d4..7db167a 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -24,10 +24,18 @@
@@ -121196,7 +145980,7 @@ index ef5be8e..811ccb0 100644
#include "internal.h"
-@@ -254,6 +262,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
+@@ -257,6 +265,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
return pages;
}
@@ -121245,7 +146029,7 @@ index ef5be8e..811ccb0 100644
int
mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
unsigned long start, unsigned long end, unsigned long newflags)
-@@ -266,11 +316,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
+@@ -269,11 +319,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
int error;
int dirty_accountable = 0;
@@ -121275,7 +146059,7 @@ index ef5be8e..811ccb0 100644
/*
* If we make a private mapping writable we increase our commit;
* but (without finer accounting) cannot reduce our commit if we
-@@ -287,6 +355,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
+@@ -294,6 +362,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
}
}
@@ -121318,7 +146102,7 @@ index ef5be8e..811ccb0 100644
/*
* First try to merge with previous and/or next vma.
*/
-@@ -318,7 +422,19 @@ success:
+@@ -325,7 +429,19 @@ success:
* vm_flags and vm_page_prot are protected by the mmap_sem
* held in write mode.
*/
@@ -121338,7 +146122,7 @@ index ef5be8e..811ccb0 100644
dirty_accountable = vma_wants_writenotify(vma);
vma_set_page_prot(vma);
-@@ -363,6 +479,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -370,6 +486,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
end = start + len;
if (end <= start)
return -ENOMEM;
@@ -121356,7 +146140,7 @@ index ef5be8e..811ccb0 100644
if (!arch_validate_prot(prot))
return -EINVAL;
-@@ -370,7 +497,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -377,7 +504,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
/*
* Does the application expect PROT_READ to imply PROT_EXEC:
*/
@@ -121365,7 +146149,7 @@ index ef5be8e..811ccb0 100644
prot |= PROT_EXEC;
vm_flags = calc_vm_prot_bits(prot);
-@@ -402,6 +529,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -409,6 +536,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
if (start > vma->vm_start)
prev = vma;
@@ -121377,7 +146161,7 @@ index ef5be8e..811ccb0 100644
for (nstart = start ; ; ) {
unsigned long newflags;
-@@ -412,6 +544,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -419,6 +551,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)) {
@@ -121392,7 +146176,7 @@ index ef5be8e..811ccb0 100644
error = -EACCES;
goto out;
}
-@@ -426,6 +566,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -433,6 +573,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
error = mprotect_fixup(vma, &prev, nstart, tmp, newflags);
if (error)
goto out;
@@ -121403,7 +146187,7 @@ index ef5be8e..811ccb0 100644
if (nstart < prev->vm_end)
diff --git a/mm/mremap.c b/mm/mremap.c
-index c25bc62..900ca7f 100644
+index 8eeba02..311391a 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -143,6 +143,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd,
@@ -121419,7 +146203,7 @@ index c25bc62..900ca7f 100644
pte = move_soft_dirty_pte(pte);
set_pte_at(mm, new_addr, new_pte, pte);
}
-@@ -354,6 +360,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
+@@ -359,6 +365,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
if (is_vm_hugetlb_page(vma))
return ERR_PTR(-EINVAL);
@@ -121431,7 +146215,7 @@ index c25bc62..900ca7f 100644
/* We can't remap across vm area boundaries */
if (old_len > vma->vm_end - addr)
return ERR_PTR(-EFAULT);
-@@ -400,11 +411,19 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
+@@ -406,11 +417,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;
@@ -121452,7 +146236,7 @@ index c25bc62..900ca7f 100644
goto out;
/* Ensure the old/new locations do not overlap */
-@@ -477,6 +496,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -483,6 +502,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
unsigned long ret = -EINVAL;
unsigned long charged = 0;
bool locked = false;
@@ -121460,7 +146244,7 @@ index c25bc62..900ca7f 100644
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
return ret;
-@@ -498,6 +518,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -504,6 +524,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
if (!new_len)
return ret;
@@ -121478,7 +146262,7 @@ index c25bc62..900ca7f 100644
down_write(&current->mm->mmap_sem);
if (flags & MREMAP_FIXED) {
-@@ -548,6 +579,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;
@@ -121486,7 +146270,7 @@ index c25bc62..900ca7f 100644
goto out;
}
}
-@@ -571,7 +603,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;
}
@@ -121500,7 +146284,7 @@ index c25bc62..900ca7f 100644
out:
if (offset_in_page(ret)) {
diff --git a/mm/nommu.c b/mm/nommu.c
-index 92be862..30dc573 100644
+index fbf6f0f1..1c2b246 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -56,7 +56,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT;
@@ -121567,10 +146351,10 @@ index 92be862..30dc573 100644
struct mm_struct *mm;
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
-index c126809..02f1d52 100644
+index dc490c0..5087a19 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
-@@ -613,6 +613,10 @@ void oom_kill_process(struct oom_control *oc, struct task_struct *p,
+@@ -614,6 +614,10 @@ void oom_kill_process(struct oom_control *oc, struct task_struct *p,
if (p->signal->oom_score_adj == OOM_SCORE_ADJ_MIN)
continue;
@@ -121582,10 +146366,10 @@ index c126809..02f1d52 100644
}
rcu_read_unlock();
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
-index d15d88c..4316955 100644
+index 6fe7d15..60d7249 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
-@@ -860,7 +860,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
+@@ -870,7 +870,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
*/
@@ -121595,10 +146379,10 @@ index d15d88c..4316955 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 c69531a..36ab4e3 100644
+index 9d9044e..3d5a891 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
-@@ -62,6 +62,7 @@
+@@ -63,6 +63,7 @@
#include <linux/sched/rt.h>
#include <linux/page_owner.h>
#include <linux/kthread.h>
@@ -121606,24 +146390,7 @@ index c69531a..36ab4e3 100644
#include <asm/sections.h>
#include <asm/tlbflush.h>
-@@ -229,7 +230,6 @@ static char * const zone_names[MAX_NR_ZONES] = {
- #endif
- };
-
--static void free_compound_page(struct page *page);
- compound_page_dtor * const compound_page_dtors[] = {
- NULL,
- free_compound_page,
-@@ -457,7 +457,7 @@ out:
- * This usage means that zero-order pages may not be compound.
- */
-
--static void free_compound_page(struct page *page)
-+void free_compound_page(struct page *page)
- {
- __free_pages_ok(page, compound_order(page));
- }
-@@ -563,7 +563,7 @@ static inline void clear_page_guard(struct zone *zone, struct page *page,
+@@ -561,7 +562,7 @@ static inline void clear_page_guard(struct zone *zone, struct page *page,
__mod_zone_freepage_state(zone, (1 << order), migratetype);
}
#else
@@ -121632,7 +146399,7 @@ index c69531a..36ab4e3 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,
-@@ -975,6 +975,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
+@@ -995,6 +996,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
bool compound = PageCompound(page);
int i, bad = 0;
@@ -121643,7 +146410,7 @@ index c69531a..36ab4e3 100644
VM_BUG_ON_PAGE(PageTail(page), page);
VM_BUG_ON_PAGE(compound && compound_order(page) != order, page);
-@@ -1001,6 +1005,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
+@@ -1021,6 +1026,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
debug_check_no_obj_freed(page_address(page),
PAGE_SIZE << order);
}
@@ -121656,7 +146423,7 @@ index c69531a..36ab4e3 100644
arch_free_page(page, order);
kernel_map_pages(page, 1 << order, 0);
-@@ -1023,6 +1033,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
+@@ -1043,6 +1054,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
local_irq_restore(flags);
}
@@ -121677,7 +146444,7 @@ index c69531a..36ab4e3 100644
static void __init __free_pages_boot_core(struct page *page,
unsigned long pfn, unsigned int order)
{
-@@ -1039,6 +1063,19 @@ static void __init __free_pages_boot_core(struct page *page,
+@@ -1059,6 +1084,19 @@ static void __init __free_pages_boot_core(struct page *page,
__ClearPageReserved(p);
set_page_count(p, 0);
@@ -121697,7 +146464,7 @@ index c69531a..36ab4e3 100644
page_zone(page)->managed_pages += nr_pages;
set_page_refcounted(page);
__free_pages(page, order);
-@@ -1095,7 +1132,6 @@ static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node,
+@@ -1115,7 +1153,6 @@ static inline bool __meminit meminit_pfn_in_nid(unsigned long pfn, int node,
}
#endif
@@ -121705,7 +146472,7 @@ index c69531a..36ab4e3 100644
void __init __free_pages_bootmem(struct page *page, unsigned long pfn,
unsigned int order)
{
-@@ -1399,9 +1435,11 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags,
+@@ -1419,9 +1456,11 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags,
kernel_map_pages(page, 1 << order, 1);
kasan_alloc_pages(page, order);
@@ -121717,7 +146484,28 @@ index c69531a..36ab4e3 100644
if (order && (gfp_flags & __GFP_COMP))
prep_compound_page(page, order);
-@@ -2270,7 +2308,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
+@@ -1955,8 +1994,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.
+ */
+-void drain_local_pages(struct zone *zone)
++void drain_local_pages(void *_zone)
+ {
++ struct zone *zone = _zone;
+ int cpu = smp_processor_id();
+
+ if (zone)
+@@ -2016,8 +2056,7 @@ void drain_all_pages(struct zone *zone)
+ else
+ cpumask_clear_cpu(cpu, &cpus_with_pcps);
+ }
+- on_each_cpu_mask(&cpus_with_pcps, (smp_call_func_t) drain_local_pages,
+- zone, 1);
++ on_each_cpu_mask(&cpus_with_pcps, drain_local_pages, zone, 1);
+ }
+
+ #ifdef CONFIG_HIBERNATION
+@@ -2289,7 +2328,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
}
__mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order));
@@ -121726,7 +146514,7 @@ index c69531a..36ab4e3 100644
!test_bit(ZONE_FAIR_DEPLETED, &zone->flags))
set_bit(ZONE_FAIR_DEPLETED, &zone->flags);
-@@ -2487,7 +2525,7 @@ static void reset_alloc_batches(struct zone *preferred_zone)
+@@ -2506,7 +2545,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) -
@@ -121735,7 +146523,7 @@ index c69531a..36ab4e3 100644
clear_bit(ZONE_FAIR_DEPLETED, &zone->flags);
} while (zone++ != preferred_zone);
}
-@@ -6079,7 +6117,7 @@ static void __setup_per_zone_wmarks(void)
+@@ -6100,7 +6139,7 @@ static void __setup_per_zone_wmarks(void)
__mod_zone_page_state(zone, NR_ALLOC_BATCH,
high_wmark_pages(zone) - low_wmark_pages(zone) -
@@ -121745,7 +146533,7 @@ index c69531a..36ab4e3 100644
spin_unlock_irqrestore(&zone->lock, flags);
}
diff --git a/mm/percpu.c b/mm/percpu.c
-index 8a943b9..29d8b8d 100644
+index 998607a..4854f93 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -131,7 +131,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly;
@@ -121808,11 +146596,24 @@ index 5d453e5..4043093 100644
mm = mm_access(task, PTRACE_MODE_ATTACH_REALCREDS);
if (!mm || IS_ERR(mm)) {
rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;
+diff --git a/mm/readahead.c b/mm/readahead.c
+index 20e58e8..9045cb5 100644
+--- a/mm/readahead.c
++++ b/mm/readahead.c
+@@ -80,7 +80,7 @@ static void read_cache_pages_invalidate_pages(struct address_space *mapping,
+ * Hides the details of the LRU cache etc from the filesystems.
+ */
+ int read_cache_pages(struct address_space *mapping, struct list_head *pages,
+- int (*filler)(void *, struct page *), void *data)
++ filler_t *filler, void *data)
+ {
+ struct page *page;
+ int ret = 0;
diff --git a/mm/rmap.c b/mm/rmap.c
-index b577fbb..ccd4d4e 100644
+index 79f3bf0..92c8a7e 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
-@@ -171,6 +171,10 @@ int anon_vma_prepare(struct vm_area_struct *vma)
+@@ -172,6 +172,10 @@ int anon_vma_prepare(struct vm_area_struct *vma)
struct anon_vma *anon_vma = vma->anon_vma;
struct anon_vma_chain *avc;
@@ -121823,7 +146624,7 @@ index b577fbb..ccd4d4e 100644
might_sleep();
if (unlikely(!anon_vma)) {
struct mm_struct *mm = vma->vm_mm;
-@@ -180,6 +184,12 @@ int anon_vma_prepare(struct vm_area_struct *vma)
+@@ -181,6 +185,12 @@ int anon_vma_prepare(struct vm_area_struct *vma)
if (!avc)
goto out_enomem;
@@ -121836,7 +146637,7 @@ index b577fbb..ccd4d4e 100644
anon_vma = find_mergeable_anon_vma(vma);
allocated = NULL;
if (!anon_vma) {
-@@ -193,6 +203,19 @@ int anon_vma_prepare(struct vm_area_struct *vma)
+@@ -194,6 +204,19 @@ int anon_vma_prepare(struct vm_area_struct *vma)
/* page_table_lock to protect against threads */
spin_lock(&mm->page_table_lock);
if (likely(!vma->anon_vma)) {
@@ -121856,7 +146657,7 @@ index b577fbb..ccd4d4e 100644
vma->anon_vma = anon_vma;
anon_vma_chain_link(vma, avc, anon_vma);
/* vma reference or self-parent link for new root */
-@@ -205,12 +228,24 @@ int anon_vma_prepare(struct vm_area_struct *vma)
+@@ -206,12 +229,24 @@ int anon_vma_prepare(struct vm_area_struct *vma)
if (unlikely(allocated))
put_anon_vma(allocated);
@@ -121881,7 +146682,7 @@ index b577fbb..ccd4d4e 100644
anon_vma_chain_free(avc);
out_enomem:
return -ENOMEM;
-@@ -254,7 +289,7 @@ static inline void unlock_anon_vma_root(struct anon_vma *root)
+@@ -255,7 +290,7 @@ static inline void unlock_anon_vma_root(struct anon_vma *root)
* good chance of avoiding scanning the whole hierarchy when it searches where
* page is mapped.
*/
@@ -121890,7 +146691,7 @@ index b577fbb..ccd4d4e 100644
{
struct anon_vma_chain *avc, *pavc;
struct anon_vma *root = NULL;
-@@ -308,7 +343,7 @@ int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)
+@@ -309,7 +344,7 @@ int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)
* the corresponding VMA in the parent process is attached to.
* Returns 0 on success, non-zero on failure.
*/
@@ -121899,21 +146700,21 @@ index b577fbb..ccd4d4e 100644
{
struct anon_vma_chain *avc;
struct anon_vma *anon_vma;
-@@ -428,8 +463,10 @@ static void anon_vma_ctor(void *data)
+@@ -429,10 +464,10 @@ static void anon_vma_ctor(void *data)
void __init anon_vma_init(void)
{
anon_vma_cachep = kmem_cache_create("anon_vma", sizeof(struct anon_vma),
-- 0, SLAB_DESTROY_BY_RCU|SLAB_PANIC, anon_vma_ctor);
-- anon_vma_chain_cachep = KMEM_CACHE(anon_vma_chain, SLAB_PANIC);
-+ 0, SLAB_DESTROY_BY_RCU|SLAB_PANIC|SLAB_NO_SANITIZE,
-+ anon_vma_ctor);
-+ anon_vma_chain_cachep = KMEM_CACHE(anon_vma_chain,
-+ SLAB_PANIC|SLAB_NO_SANITIZE);
+- 0, SLAB_DESTROY_BY_RCU|SLAB_PANIC|SLAB_ACCOUNT,
++ 0, SLAB_DESTROY_BY_RCU|SLAB_PANIC|SLAB_ACCOUNT|SLAB_NO_SANITIZE,
+ anon_vma_ctor);
+ anon_vma_chain_cachep = KMEM_CACHE(anon_vma_chain,
+- SLAB_PANIC|SLAB_ACCOUNT);
++ SLAB_PANIC|SLAB_ACCOUNT|SLAB_NO_SANITIZE);
}
/*
diff --git a/mm/shmem.c b/mm/shmem.c
-index ea5a70c..4b38523 100644
+index 440e2a7..8aeebaa 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -33,7 +33,7 @@
@@ -121934,35 +146735,60 @@ index ea5a70c..4b38523 100644
/*
* shmem_fallocate communicates with shmem_fault or shmem_writepage via
-@@ -2564,6 +2564,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = {
- static int shmem_xattr_validate(const char *name)
- {
- struct { const char *prefix; size_t len; } arr[] = {
+@@ -2670,6 +2670,25 @@ 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 shmem_inode_info *info = SHMEM_I(d_inode(dentry));
+
+#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
-+ { XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN},
++ if (strcmp(name, XATTR_NAME_PAX_FLAGS))
++ return -EOPNOTSUPP;
++ if (size > 8)
++ return -EINVAL;
+#endif
+
- { XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN },
- { XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN }
- };
-@@ -2619,6 +2624,15 @@ static int shmem_setxattr(struct dentry *dentry, const char *name,
- if (err)
- return err;
++ name = xattr_full_name(handler, name);
++ return simple_xattr_set(&info->xattrs, name, value, size, flags);
++}
++#endif
++
+ static const struct xattr_handler shmem_security_xattr_handler = {
+ .prefix = XATTR_SECURITY_PREFIX,
+ .get = shmem_xattr_handler_get,
+@@ -2682,6 +2701,14 @@ static const struct xattr_handler shmem_trusted_xattr_handler = {
+ .set = shmem_xattr_handler_set,
+ };
+#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
-+ if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) {
-+ if (strcmp(name, XATTR_NAME_PAX_FLAGS))
-+ return -EOPNOTSUPP;
-+ if (size > 8)
-+ return -EINVAL;
-+ }
++static const struct xattr_handler shmem_user_xattr_handler = {
++ .prefix = XATTR_USER_PREFIX,
++ .get = shmem_xattr_handler_get,
++ .set = shmem_user_xattr_handler_set,
++};
+#endif
+
- return simple_xattr_set(&info->xattrs, name, value, size, flags);
- }
+ static const struct xattr_handler *shmem_xattr_handlers[] = {
+ #ifdef CONFIG_TMPFS_POSIX_ACL
+ &posix_acl_access_xattr_handler,
+@@ -2689,6 +2716,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = {
+ #endif
+ &shmem_security_xattr_handler,
+ &shmem_trusted_xattr_handler,
++
++#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
++ &shmem_user_xattr_handler,
++#endif
++
+ NULL
+ };
-@@ -3002,8 +3016,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent)
+@@ -3051,8 +3083,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 */
@@ -121973,7 +146799,7 @@ index ea5a70c..4b38523 100644
return -ENOMEM;
diff --git a/mm/slab.c b/mm/slab.c
-index 4765c97..26f5c11 100644
+index 621fbcb..272a1f3 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -116,6 +116,7 @@
@@ -122046,7 +146872,7 @@ index 4765c97..26f5c11 100644
/*
* Adjust the object sizes so that we clear
-@@ -3369,6 +3374,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
+@@ -3367,6 +3372,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
struct array_cache *ac = cpu_cache_get(cachep);
check_irq_off();
@@ -122067,7 +146893,7 @@ index 4765c97..26f5c11 100644
kmemleak_free_recursive(objp, cachep->flags);
objp = cache_free_debugcheck(cachep, objp, caller);
-@@ -3494,7 +3513,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller)
+@@ -3492,7 +3511,7 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller)
return kmem_cache_alloc_node_trace(cachep, flags, node, size);
}
@@ -122076,7 +146902,7 @@ index 4765c97..26f5c11 100644
{
return __do_kmalloc_node(size, flags, node, _RET_IP_);
}
-@@ -3514,7 +3533,7 @@ EXPORT_SYMBOL(__kmalloc_node_track_caller);
+@@ -3512,7 +3531,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
*/
@@ -122085,7 +146911,7 @@ index 4765c97..26f5c11 100644
unsigned long caller)
{
struct kmem_cache *cachep;
-@@ -3587,6 +3606,7 @@ void kfree(const void *objp)
+@@ -3585,6 +3604,7 @@ void kfree(const void *objp)
if (unlikely(ZERO_OR_NULL_PTR(objp)))
return;
@@ -122093,7 +146919,7 @@ index 4765c97..26f5c11 100644
local_irq_save(flags);
kfree_debugcheck(objp);
c = virt_to_cache(objp);
-@@ -4006,14 +4026,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
+@@ -4004,14 +4024,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
}
/* cpu stats */
{
@@ -122120,7 +146946,7 @@ index 4765c97..26f5c11 100644
#endif
}
-@@ -4221,13 +4249,80 @@ static const struct file_operations proc_slabstats_operations = {
+@@ -4219,13 +4247,80 @@ static const struct file_operations proc_slabstats_operations = {
static int __init slab_proc_init(void)
{
#ifdef CONFIG_DEBUG_SLAB_LEAK
@@ -122203,7 +147029,7 @@ index 4765c97..26f5c11 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 7b60871..dd645ce1 100644
+index 2eedace..cd94091 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -22,7 +22,7 @@ struct kmem_cache {
@@ -122246,7 +147072,7 @@ index 7b60871..dd645ce1 100644
#if defined(CONFIG_DEBUG_SLAB)
#define SLAB_DEBUG_FLAGS (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER)
-@@ -309,6 +324,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
+@@ -311,6 +326,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
return s;
page = virt_to_head_page(x);
@@ -122257,7 +147083,7 @@ index 7b60871..dd645ce1 100644
if (slab_equal_or_root(cachep, s))
return cachep;
diff --git a/mm/slab_common.c b/mm/slab_common.c
-index 3c6a86b..f143a66 100644
+index 065b7bd..3c2c410 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -25,11 +25,35 @@
@@ -122297,7 +147123,7 @@ index 3c6a86b..f143a66 100644
/*
* Set of flags that will prevent slab merging
*/
-@@ -43,7 +67,7 @@ struct kmem_cache *kmem_cache;
+@@ -44,7 +68,7 @@ struct kmem_cache *kmem_cache;
* Merge control. If this is set then no merging of slab caches will occur.
* (Could be removed. This was introduced to pacify the merge skeptics.)
*/
@@ -122306,7 +147132,7 @@ index 3c6a86b..f143a66 100644
static int __init setup_slab_nomerge(char *str)
{
-@@ -239,7 +263,7 @@ int slab_unmergeable(struct kmem_cache *s)
+@@ -240,7 +264,7 @@ int slab_unmergeable(struct kmem_cache *s)
/*
* We may have set a slab to be unmergeable during bootstrap.
*/
@@ -122315,7 +147141,7 @@ index 3c6a86b..f143a66 100644
return 1;
return 0;
-@@ -343,7 +367,7 @@ static struct kmem_cache *create_cache(const char *name,
+@@ -344,7 +368,7 @@ static struct kmem_cache *create_cache(const char *name,
if (err)
goto out_free_cache;
@@ -122324,7 +147150,7 @@ index 3c6a86b..f143a66 100644
list_add(&s->list, &slab_caches);
out:
if (err)
-@@ -407,6 +431,13 @@ kmem_cache_create(const char *name, size_t size, size_t align,
+@@ -408,6 +432,13 @@ kmem_cache_create(const char *name, size_t size, size_t align,
*/
flags &= CACHE_CREATE_MASK;
@@ -122338,7 +147164,7 @@ index 3c6a86b..f143a66 100644
s = __kmem_cache_alias(name, size, align, flags, ctor);
if (s)
goto out_unlock;
-@@ -468,7 +499,7 @@ static void release_caches(struct list_head *release, bool need_rcu_barrier)
+@@ -469,7 +500,7 @@ static void release_caches(struct list_head *release, bool need_rcu_barrier)
rcu_barrier();
list_for_each_entry_safe(s, s2, release, list) {
@@ -122347,7 +147173,7 @@ index 3c6a86b..f143a66 100644
sysfs_slab_remove(s);
#else
slab_kmem_cache_release(s);
-@@ -711,8 +742,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
+@@ -713,8 +744,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
mutex_lock(&slab_mutex);
@@ -122357,7 +147183,7 @@ index 3c6a86b..f143a66 100644
goto out_unlock;
err = shutdown_memcg_caches(s, &release, &need_rcu_barrier);
-@@ -778,7 +808,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz
+@@ -780,7 +810,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);
@@ -122366,7 +147192,7 @@ index 3c6a86b..f143a66 100644
}
struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
-@@ -791,7 +821,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
+@@ -793,7 +823,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);
@@ -122375,7 +147201,7 @@ index 3c6a86b..f143a66 100644
return s;
}
-@@ -803,6 +833,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -805,6 +835,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
EXPORT_SYMBOL(kmalloc_dma_caches);
#endif
@@ -122387,7 +147213,7 @@ index 3c6a86b..f143a66 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
-@@ -867,6 +902,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
+@@ -869,6 +904,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
return kmalloc_dma_caches[index];
#endif
@@ -122401,7 +147227,7 @@ index 3c6a86b..f143a66 100644
return kmalloc_caches[index];
}
-@@ -959,7 +1001,7 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -961,7 +1003,7 @@ void __init create_kmalloc_caches(unsigned long flags)
for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
if (!kmalloc_caches[i])
@@ -122410,7 +147236,7 @@ index 3c6a86b..f143a66 100644
/*
* Caches that are not of the two-to-the-power-of size.
-@@ -967,9 +1009,9 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -969,9 +1011,9 @@ void __init create_kmalloc_caches(unsigned long flags)
* earlier power of two caches
*/
if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)
@@ -122422,7 +147248,7 @@ index 3c6a86b..f143a66 100644
}
/* Kmalloc array is now usable */
-@@ -990,6 +1032,23 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -992,6 +1034,23 @@ void __init create_kmalloc_caches(unsigned long flags)
}
}
#endif
@@ -122446,7 +147272,7 @@ index 3c6a86b..f143a66 100644
}
#endif /* !CONFIG_SLOB */
-@@ -1049,6 +1108,9 @@ static void print_slabinfo_header(struct seq_file *m)
+@@ -1051,6 +1110,9 @@ static void print_slabinfo_header(struct seq_file *m)
seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> "
"<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
@@ -122456,7 +147282,7 @@ index 3c6a86b..f143a66 100644
#endif
seq_putc(m, '\n');
}
-@@ -1178,7 +1240,7 @@ static int __init slab_proc_init(void)
+@@ -1180,7 +1242,7 @@ static int __init slab_proc_init(void)
module_init(slab_proc_init);
#endif /* CONFIG_SLABINFO */
@@ -122466,7 +147292,7 @@ index 3c6a86b..f143a66 100644
{
void *ret;
diff --git a/mm/slob.c b/mm/slob.c
-index 17e8f8c..56d3370 100644
+index 5ec1580..017a002 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -67,6 +67,7 @@
@@ -122889,7 +147715,7 @@ index 17e8f8c..56d3370 100644
EXPORT_SYMBOL(kmem_cache_free);
diff --git a/mm/slub.c b/mm/slub.c
-index 4699751..bb1f0cf 100644
+index d8fbd4a..f864712 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -34,6 +34,7 @@
@@ -122909,7 +147735,7 @@ index 4699751..bb1f0cf 100644
static int sysfs_slab_add(struct kmem_cache *);
static int sysfs_slab_alias(struct kmem_cache *, const char *);
static void memcg_propagate_slab_attrs(struct kmem_cache *s);
-@@ -558,7 +559,7 @@ static void print_track(const char *s, struct track *t)
+@@ -560,7 +561,7 @@ static void print_track(const char *s, struct track *t)
if (!t->addr)
return;
@@ -122918,7 +147744,7 @@ index 4699751..bb1f0cf 100644
s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid);
#ifdef CONFIG_STACKTRACE
{
-@@ -2771,6 +2772,21 @@ static __always_inline void slab_free(struct kmem_cache *s, struct page *page,
+@@ -2767,6 +2768,21 @@ static __always_inline void slab_free(struct kmem_cache *s, struct page *page,
slab_free_freelist_hook(s, head, tail);
@@ -122940,7 +147766,7 @@ index 4699751..bb1f0cf 100644
redo:
/*
* Determine the currently cpus per cpu slab.
-@@ -3262,6 +3278,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
+@@ -3264,6 +3280,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
s->inuse = size;
if (((flags & (SLAB_DESTROY_BY_RCU | SLAB_POISON)) ||
@@ -122950,7 +147776,7 @@ index 4699751..bb1f0cf 100644
s->ctor)) {
/*
* Relocate free pointer after the object if it is not
-@@ -3516,7 +3535,7 @@ static int __init setup_slub_min_objects(char *str)
+@@ -3514,7 +3533,7 @@ static int __init setup_slub_min_objects(char *str)
__setup("slub_min_objects=", setup_slub_min_objects);
@@ -122959,7 +147785,7 @@ index 4699751..bb1f0cf 100644
{
struct kmem_cache *s;
void *ret;
-@@ -3554,7 +3573,7 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
+@@ -3552,7 +3571,7 @@ static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
return ptr;
}
@@ -122968,7 +147794,7 @@ index 4699751..bb1f0cf 100644
{
struct kmem_cache *s;
void *ret;
-@@ -3602,6 +3621,70 @@ static size_t __ksize(const void *object)
+@@ -3600,6 +3619,70 @@ static size_t __ksize(const void *object)
return slab_ksize(page->slab_cache);
}
@@ -123039,7 +147865,7 @@ index 4699751..bb1f0cf 100644
size_t ksize(const void *object)
{
size_t size = __ksize(object);
-@@ -3622,6 +3705,7 @@ void kfree(const void *x)
+@@ -3620,6 +3703,7 @@ void kfree(const void *x)
if (unlikely(ZERO_OR_NULL_PTR(x)))
return;
@@ -123047,7 +147873,7 @@ index 4699751..bb1f0cf 100644
page = virt_to_head_page(x);
if (unlikely(!PageSlab(page))) {
BUG_ON(!PageCompound(page));
-@@ -3939,7 +4023,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3937,7 +4021,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
s = find_mergeable(size, align, flags, name, ctor);
if (s) {
@@ -123056,7 +147882,7 @@ index 4699751..bb1f0cf 100644
/*
* Adjust the object sizes so that we clear
-@@ -3955,7 +4039,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3953,7 +4037,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
}
if (sysfs_slab_alias(s, name)) {
@@ -123065,7 +147891,7 @@ index 4699751..bb1f0cf 100644
s = NULL;
}
}
-@@ -4072,7 +4156,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
+@@ -4070,7 +4154,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
}
#endif
@@ -123074,7 +147900,7 @@ index 4699751..bb1f0cf 100644
static int count_inuse(struct page *page)
{
return page->inuse;
-@@ -4353,7 +4437,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
+@@ -4351,7 +4435,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
len += sprintf(buf + len, "%7ld ", l->count);
if (l->addr)
@@ -123086,7 +147912,7 @@ index 4699751..bb1f0cf 100644
else
len += sprintf(buf + len, "<not-available>");
-@@ -4451,12 +4539,12 @@ static void __init resiliency_test(void)
+@@ -4449,12 +4537,12 @@ static void __init resiliency_test(void)
validate_slab_cache(kmalloc_caches[9]);
}
#else
@@ -123101,7 +147927,7 @@ index 4699751..bb1f0cf 100644
enum slab_stat_type {
SL_ALL, /* All slabs */
SL_PARTIAL, /* Only partially allocated slabs */
-@@ -4693,13 +4781,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
+@@ -4691,13 +4779,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
{
if (!s->ctor)
return 0;
@@ -123120,7 +147946,7 @@ index 4699751..bb1f0cf 100644
}
SLAB_ATTR_RO(aliases);
-@@ -4787,6 +4879,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
+@@ -4785,6 +4877,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
SLAB_ATTR_RO(cache_dma);
#endif
@@ -123143,7 +147969,7 @@ index 4699751..bb1f0cf 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));
-@@ -4842,7 +4950,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf,
+@@ -4840,7 +4948,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.
*/
@@ -123152,7 +147978,7 @@ index 4699751..bb1f0cf 100644
return -EINVAL;
s->flags &= ~SLAB_TRACE;
-@@ -4962,7 +5070,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf)
+@@ -4960,7 +5068,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)
{
@@ -123161,7 +147987,7 @@ index 4699751..bb1f0cf 100644
return -EINVAL;
s->flags &= ~SLAB_FAILSLAB;
-@@ -5094,7 +5202,7 @@ STAT_ATTR(CPU_PARTIAL_NODE, cpu_partial_node);
+@@ -5092,7 +5200,7 @@ STAT_ATTR(CPU_PARTIAL_NODE, cpu_partial_node);
STAT_ATTR(CPU_PARTIAL_DRAIN, cpu_partial_drain);
#endif
@@ -123170,7 +147996,7 @@ index 4699751..bb1f0cf 100644
&slab_size_attr.attr,
&object_size_attr.attr,
&objs_per_slab_attr.attr,
-@@ -5129,6 +5237,12 @@ static struct attribute *slab_attrs[] = {
+@@ -5127,6 +5235,12 @@ static struct attribute *slab_attrs[] = {
#ifdef CONFIG_ZONE_DMA
&cache_dma_attr.attr,
#endif
@@ -123216,10 +148042,10 @@ index 4699751..bb1f0cf 100644
static int __init slab_sysfs_init(void)
{
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
-index 4cba9c2..b4f9fcc 100644
+index b60802b..0a05e3c 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
-@@ -131,7 +131,7 @@ pud_t * __meminit vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node)
+@@ -203,7 +203,7 @@ pud_t * __meminit vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node)
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
return NULL;
@@ -123228,7 +148054,7 @@ index 4cba9c2..b4f9fcc 100644
}
return pud;
}
-@@ -143,7 +143,7 @@ pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
+@@ -215,7 +215,7 @@ pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
return NULL;
@@ -123238,12 +148064,12 @@ index 4cba9c2..b4f9fcc 100644
return pgd;
}
diff --git a/mm/sparse.c b/mm/sparse.c
-index d1b48b6..6e8590e 100644
+index 3717cee..7ee2c16 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -750,7 +750,7 @@ static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages)
- for (i = 0; i < PAGES_PER_SECTION; i++) {
+ for (i = 0; i < nr_pages; i++) {
if (PageHWPoison(&memmap[i])) {
- atomic_long_sub(1, &num_poisoned_pages);
+ atomic_long_sub_unchecked(1, &num_poisoned_pages);
@@ -123251,20 +148077,25 @@ index d1b48b6..6e8590e 100644
}
}
diff --git a/mm/swap.c b/mm/swap.c
-index 39395fb..addaf53 100644
+index 09fe5e9..be5ad5b 100644
--- a/mm/swap.c
+++ b/mm/swap.c
-@@ -86,6 +86,8 @@ static void __put_compound_page(struct page *page)
+@@ -88,6 +88,13 @@ static void __put_compound_page(struct page *page)
if (!PageHuge(page))
__page_cache_release(page);
dtor = get_compound_page_dtor(page);
+ if (!PageHuge(page))
-+ BUG_ON(dtor != free_compound_page);
++ BUG_ON(dtor != free_compound_page
++#ifdef CONFIG_TRANSPARENT_HUGEPAGE
++ && dtor != free_transhuge_page
++#endif
++ );
++
(*dtor)(page);
}
diff --git a/mm/swapfile.c b/mm/swapfile.c
-index 5887731..e23a30e 100644
+index d2c3736..bf79426 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -84,7 +84,7 @@ static DEFINE_MUTEX(swapon_mutex);
@@ -123276,7 +148107,7 @@ index 5887731..e23a30e 100644
static inline unsigned char swap_count(unsigned char ent)
{
-@@ -1986,7 +1986,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
+@@ -1972,7 +1972,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
spin_unlock(&swap_lock);
err = 0;
@@ -123285,7 +148116,7 @@ index 5887731..e23a30e 100644
wake_up_interruptible(&proc_poll_wait);
out_dput:
-@@ -2003,8 +2003,8 @@ static unsigned swaps_poll(struct file *file, poll_table *wait)
+@@ -1989,8 +1989,8 @@ static unsigned swaps_poll(struct file *file, poll_table *wait)
poll_wait(file, &proc_poll_wait, wait);
@@ -123296,7 +148127,7 @@ index 5887731..e23a30e 100644
return POLLIN | POLLRDNORM | POLLERR | POLLPRI;
}
-@@ -2102,7 +2102,7 @@ static int swaps_open(struct inode *inode, struct file *file)
+@@ -2088,7 +2088,7 @@ static int swaps_open(struct inode *inode, struct file *file)
return ret;
seq = file->private_data;
@@ -123305,7 +148136,7 @@ index 5887731..e23a30e 100644
return 0;
}
-@@ -2551,7 +2551,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
+@@ -2537,7 +2537,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
(frontswap_map) ? "FS" : "");
mutex_unlock(&swapon_mutex);
@@ -123315,10 +148146,10 @@ index 5887731..e23a30e 100644
if (S_ISREG(inode->i_mode))
diff --git a/mm/util.c b/mm/util.c
-index 9af1c12..d58f645 100644
+index 4fb14ca..bb377d3 100644
--- a/mm/util.c
+++ b/mm/util.c
-@@ -233,6 +233,12 @@ struct task_struct *task_of_stack(struct task_struct *task,
+@@ -239,6 +239,12 @@ int vma_is_stack_for_task(struct vm_area_struct *vma, struct task_struct *t)
void arch_pick_mmap_layout(struct mm_struct *mm)
{
mm->mmap_base = TASK_UNMAPPED_BASE;
@@ -123331,18 +148162,18 @@ index 9af1c12..d58f645 100644
mm->get_unmapped_area = arch_get_unmapped_area;
}
#endif
-@@ -434,6 +440,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen)
+@@ -457,6 +463,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 */
+ if (gr_acl_handle_procpidmem(task))
+ goto out_mm;
+
- len = mm->arg_end - mm->arg_start;
-
- if (len > buflen)
+ down_read(&mm->mmap_sem);
+ arg_start = mm->arg_start;
+ arg_end = mm->arg_end;
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
-index 8e3c9c5..a4b63af 100644
+index fb42a5b..3f4666e 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -42,20 +42,65 @@ struct vfree_deferred {
@@ -123527,7 +148358,7 @@ index 8e3c9c5..a4b63af 100644
unsigned long align,
unsigned long vstart, unsigned long vend,
int node, gfp_t gfp_mask)
-@@ -1204,13 +1287,27 @@ void __init vmalloc_init(void)
+@@ -1203,13 +1286,27 @@ void __init vmalloc_init(void)
for_each_possible_cpu(i) {
struct vmap_block_queue *vbq;
struct vfree_deferred *p;
@@ -123556,7 +148387,7 @@ index 8e3c9c5..a4b63af 100644
}
/* Import existing vmlist entries. */
-@@ -1335,6 +1432,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
+@@ -1334,6 +1431,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
struct vm_struct *area;
BUG_ON(in_interrupt());
@@ -123573,7 +148404,7 @@ index 8e3c9c5..a4b63af 100644
if (flags & VM_IOREMAP)
align = 1ul << clamp_t(int, fls_long(size),
PAGE_SHIFT, IOREMAP_MAX_ORDER);
-@@ -1347,7 +1454,9 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
+@@ -1346,7 +1453,9 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
if (unlikely(!area))
return NULL;
@@ -123583,7 +148414,7 @@ index 8e3c9c5..a4b63af 100644
size += PAGE_SIZE;
va = alloc_vmap_area(size, align, start, end, node, gfp_mask);
-@@ -1532,13 +1641,36 @@ EXPORT_SYMBOL(vfree);
+@@ -1528,13 +1637,36 @@ EXPORT_SYMBOL(vfree);
*/
void vunmap(const void *addr)
{
@@ -123623,7 +148454,7 @@ index 8e3c9c5..a4b63af 100644
/**
* vmap - map an array of pages into virtually contiguous space
* @pages: array of page pointers
-@@ -1559,6 +1691,11 @@ void *vmap(struct page **pages, unsigned int count,
+@@ -1555,6 +1687,11 @@ void *vmap(struct page **pages, unsigned int count,
if (count > totalram_pages)
return NULL;
@@ -123635,7 +148466,7 @@ index 8e3c9c5..a4b63af 100644
area = get_vm_area_caller((count << PAGE_SHIFT), flags,
__builtin_return_address(0));
if (!area)
-@@ -1663,6 +1800,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
+@@ -1658,6 +1795,14 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
if (!size || (size >> PAGE_SHIFT) > totalram_pages)
goto fail;
@@ -123650,7 +148481,7 @@ index 8e3c9c5..a4b63af 100644
area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNINITIALIZED |
vm_flags, start, end, node, gfp_mask, caller);
if (!area)
-@@ -1716,6 +1861,14 @@ static void *__vmalloc_node(unsigned long size, unsigned long align,
+@@ -1711,6 +1856,14 @@ static void *__vmalloc_node(unsigned long size, unsigned long align,
gfp_mask, prot, 0, node, caller);
}
@@ -123665,7 +148496,7 @@ index 8e3c9c5..a4b63af 100644
void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
{
return __vmalloc_node(size, 1, gfp_mask, prot, NUMA_NO_NODE,
-@@ -1839,10 +1992,9 @@ EXPORT_SYMBOL(vzalloc_node);
+@@ -1834,10 +1987,9 @@ EXPORT_SYMBOL(vzalloc_node);
* For tight control over page level allocator and protection flags
* use __vmalloc() instead.
*/
@@ -123677,7 +148508,7 @@ index 8e3c9c5..a4b63af 100644
NUMA_NO_NODE, __builtin_return_address(0));
}
-@@ -2149,6 +2301,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
+@@ -2144,6 +2296,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr,
{
struct vm_struct *area;
@@ -123686,7 +148517,16 @@ index 8e3c9c5..a4b63af 100644
size = PAGE_ALIGN(size);
if (!PAGE_ALIGNED(uaddr) || !PAGE_ALIGNED(kaddr))
-@@ -2631,7 +2785,11 @@ static int s_show(struct seq_file *m, void *p)
+@@ -2513,7 +2667,7 @@ found:
+ /* insert all vm's */
+ for (area = 0; area < nr_vms; area++)
+ setup_vmalloc_vm(vms[area], vas[area], VM_ALLOC,
+- pcpu_get_vm_areas);
++ __builtin_return_address(0));
+
+ kfree(vas);
+ return vms;
+@@ -2626,7 +2780,11 @@ static int s_show(struct seq_file *m, void *p)
v->addr, v->addr + v->size, v->size);
if (v->caller)
@@ -123699,7 +148539,7 @@ index 8e3c9c5..a4b63af 100644
if (v->nr_pages)
seq_printf(m, " pages=%d", v->nr_pages);
diff --git a/mm/vmstat.c b/mm/vmstat.c
-index c54fd29..c37890c 100644
+index 084c672..50f9c10 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -27,6 +27,7 @@
@@ -123728,7 +148568,7 @@ index c54fd29..c37890c 100644
changes++;
}
return changes;
-@@ -476,7 +477,7 @@ static int refresh_cpu_vm_stats(void)
+@@ -476,7 +477,7 @@ static int refresh_cpu_vm_stats(bool do_pagesets)
v = this_cpu_xchg(p->vm_stat_diff[i], 0);
if (v) {
@@ -123737,7 +148577,7 @@ index c54fd29..c37890c 100644
global_diff[i] += v;
#ifdef CONFIG_NUMA
/* 3 seconds idle till flush */
-@@ -540,7 +541,7 @@ void cpu_vm_stats_fold(int cpu)
+@@ -542,7 +543,7 @@ void cpu_vm_stats_fold(int cpu)
v = p->vm_stat_diff[i];
p->vm_stat_diff[i] = 0;
@@ -123746,7 +148586,7 @@ index c54fd29..c37890c 100644
global_diff[i] += v;
}
}
-@@ -560,8 +561,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset)
+@@ -562,8 +563,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset)
if (pset->vm_stat_diff[i]) {
int v = pset->vm_stat_diff[i];
pset->vm_stat_diff[i] = 0;
@@ -123757,7 +148597,7 @@ index c54fd29..c37890c 100644
}
}
#endif
-@@ -1315,10 +1316,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
+@@ -1320,10 +1321,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
stat_items_size += sizeof(struct vm_event_state);
#endif
@@ -123781,7 +148621,7 @@ index c54fd29..c37890c 100644
for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
v[i] = global_page_state(i);
v += NR_VM_ZONE_STAT_ITEMS;
-@@ -1553,10 +1566,16 @@ static int __init setup_vmstat(void)
+@@ -1589,10 +1602,16 @@ static int __init setup_vmstat(void)
cpu_notifier_register_done();
#endif
#ifdef CONFIG_PROC_FS
@@ -123861,10 +148701,10 @@ index 6ab36ae..6f1841b 100644
}
EXPORT_SYMBOL(v9fs_unregister_trans);
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c
-index bced8c0..ef253b7 100644
+index 7bc2208..79c8068 100644
--- a/net/9p/trans_fd.c
+++ b/net/9p/trans_fd.c
-@@ -428,7 +428,7 @@ static int p9_fd_write(struct p9_client *client, void *v, int len)
+@@ -432,7 +432,7 @@ static int p9_fd_write(struct p9_client *client, void *v, int len)
oldfs = get_fs();
set_fs(get_ds());
/* The cast to a user pointer is valid due to the set_fs() */
@@ -123957,13 +148797,13 @@ index 4149db1..f2ab682 100644
/*
* ATM LAN Emulation supports both LLC & Dix Ethernet EtherType
diff --git a/net/atm/mpoa_caches.c b/net/atm/mpoa_caches.c
-index d1b2d9a..d549f7f 100644
+index 9e60e74..a89fdeb 100644
--- a/net/atm/mpoa_caches.c
+++ b/net/atm/mpoa_caches.c
-@@ -535,30 +535,30 @@ static void eg_destroy_cache(struct mpoa_client *mpc)
+@@ -535,33 +535,32 @@ static void eg_destroy_cache(struct mpoa_client *mpc)
- static struct in_cache_ops ingress_ops = {
+ static const struct in_cache_ops ingress_ops = {
- in_cache_add_entry, /* add_entry */
- in_cache_get, /* get */
- in_cache_get_with_mask, /* get_with_mask */
@@ -123988,7 +148828,7 @@ index d1b2d9a..d549f7f 100644
+ .destroy_cache = in_destroy_cache
};
- static struct eg_cache_ops egress_ops = {
+ static const struct eg_cache_ops egress_ops = {
- eg_cache_add_entry, /* add_entry */
- eg_cache_get_by_cache_id, /* get_by_cache_id */
- eg_cache_get_by_tag, /* get_by_tag */
@@ -124011,7 +148851,10 @@ index d1b2d9a..d549f7f 100644
+ .destroy_cache = eg_destroy_cache
};
-
+-
+ void atm_mpoa_init_cache(struct mpoa_client *mpc)
+ {
+ mpc->in_ops = &ingress_ops;
diff --git a/net/atm/proc.c b/net/atm/proc.c
index bbb6461..cf04016 100644
--- a/net/atm/proc.c
@@ -124065,10 +148908,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 912d9c3..2494d1e 100644
+index df625de..1ecaa3d 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
-@@ -316,7 +316,7 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface)
+@@ -318,7 +318,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));
@@ -124077,7 +148920,7 @@ index 912d9c3..2494d1e 100644
hard_iface->bat_iv.ogm_buff_len = BATADV_OGM_HLEN;
ogm_buff = kmalloc(hard_iface->bat_iv.ogm_buff_len, GFP_ATOMIC);
-@@ -919,9 +919,9 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface)
+@@ -918,9 +918,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 */
@@ -124089,7 +148932,7 @@ index 912d9c3..2494d1e 100644
batadv_iv_ogm_slide_own_bcast_window(hard_iface);
-@@ -1600,7 +1600,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset,
+@@ -1609,7 +1609,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset,
return;
/* could be changed by schedule_own_packet() */
@@ -124099,7 +148942,7 @@ index 912d9c3..2494d1e 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 700c96c..637df49 100644
+index 20d9282..c575313 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -468,7 +468,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb,
@@ -124112,7 +148955,7 @@ index 700c96c..637df49 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 3207667..c281989 100644
+index e4f2646..68a6e61 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -665,7 +665,7 @@ batadv_reroute_unicast_packet(struct batadv_priv *bat_priv,
@@ -124134,9 +148977,18 @@ index 3207667..c281989 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 ac4d08d..76780fe 100644
+index ac4d08d..482d3a0 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
+@@ -178,7 +178,7 @@ static void batadv_interface_set_rx_mode(struct net_device *dev)
+ {
+ }
+
+-static int batadv_interface_tx(struct sk_buff *skb,
++static netdev_tx_t batadv_interface_tx(struct sk_buff *skb,
+ struct net_device *soft_iface)
+ {
+ struct ethhdr *ethhdr;
@@ -330,7 +330,7 @@ send:
primary_if->net_dev->dev_addr);
@@ -124175,11 +149027,206 @@ index ac4d08d..76780fe 100644
.kind = "batadv",
.priv_size = sizeof(struct batadv_priv),
.setup = batadv_softif_init_early,
+diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c
+index fe87777..d115a3a 100644
+--- a/net/batman-adv/sysfs.c
++++ b/net/batman-adv/sysfs.c
+@@ -141,7 +141,7 @@ struct batadv_attribute batadv_attr_##_name = { \
+
+ #define BATADV_ATTR_SIF_STORE_BOOL(_name, _post_func) \
+ ssize_t batadv_store_##_name(struct kobject *kobj, \
+- struct attribute *attr, char *buff, \
++ struct kobj_attribute *attr, char *buff, \
+ size_t count) \
+ { \
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
+@@ -153,7 +153,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
+
+ #define BATADV_ATTR_SIF_SHOW_BOOL(_name) \
+ ssize_t batadv_show_##_name(struct kobject *kobj, \
+- struct attribute *attr, char *buff) \
++ struct kobj_attribute *attr, char *buff) \
+ { \
+ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); \
+ \
+@@ -173,7 +173,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, \
+- struct attribute *attr, char *buff, \
++ struct kobj_attribute *attr, char *buff, \
+ size_t count) \
+ { \
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
+@@ -186,7 +186,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
+
+ #define BATADV_ATTR_SIF_SHOW_UINT(_name, _var) \
+ ssize_t batadv_show_##_name(struct kobject *kobj, \
+- struct attribute *attr, char *buff) \
++ struct kobj_attribute *attr, char *buff) \
+ { \
+ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj); \
+ \
+@@ -204,7 +204,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, \
+- struct attribute *attr, char *buff, \
++ struct kobj_attribute *attr, char *buff,\
+ size_t count) \
+ { \
+ struct batadv_priv *bat_priv = batadv_vlan_kobj_to_batpriv(kobj);\
+@@ -220,7 +220,7 @@ ssize_t batadv_store_vlan_##_name(struct kobject *kobj, \
+
+ #define BATADV_ATTR_VLAN_SHOW_BOOL(_name) \
+ ssize_t batadv_show_vlan_##_name(struct kobject *kobj, \
+- struct attribute *attr, char *buff) \
++ struct kobj_attribute *attr, char *buff)\
+ { \
+ struct batadv_priv *bat_priv = batadv_vlan_kobj_to_batpriv(kobj);\
+ struct batadv_softif_vlan *vlan = batadv_kobj_to_vlan(bat_priv, \
+@@ -284,13 +284,13 @@ static int batadv_store_bool_attr(char *buff, size_t count,
+ static inline ssize_t
+ __batadv_store_bool_attr(char *buff, size_t count,
+ void (*post_func)(struct net_device *),
+- struct attribute *attr,
++ struct kobj_attribute *attr,
+ atomic_t *attr_store, struct net_device *net_dev)
+ {
+ bool changed;
+ int ret;
+
+- ret = batadv_store_bool_attr(buff, count, net_dev, attr->name,
++ ret = batadv_store_bool_attr(buff, count, net_dev, attr->attr.name,
+ attr_store, &changed);
+ if (post_func && changed)
+ post_func(net_dev);
+@@ -340,12 +340,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 *),
+- const struct attribute *attr,
++ const struct kobj_attribute *attr,
+ atomic_t *attr_store, struct net_device *net_dev)
+ {
+ int ret;
+
+- ret = batadv_store_uint_attr(buff, count, net_dev, attr->name, min, max,
++ ret = batadv_store_uint_attr(buff, count, net_dev, attr->attr.name, min, max,
+ attr_store);
+ if (post_func && ret)
+ post_func(net_dev);
+@@ -354,7 +354,7 @@ __batadv_store_uint_attr(const char *buff, size_t count,
+ }
+
+ static ssize_t batadv_show_bat_algo(struct kobject *kobj,
+- struct attribute *attr, char *buff)
++ struct kobj_attribute *attr, char *buff)
+ {
+ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
+
+@@ -368,7 +368,7 @@ static void batadv_post_gw_reselect(struct net_device *net_dev)
+ batadv_gw_reselect(bat_priv);
+ }
+
+-static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct attribute *attr,
++static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct kobj_attribute *attr,
+ char *buff)
+ {
+ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
+@@ -393,7 +393,7 @@ static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct attribute *attr,
+ }
+
+ static ssize_t batadv_store_gw_mode(struct kobject *kobj,
+- struct attribute *attr, char *buff,
++ struct kobj_attribute *attr, char *buff,
+ size_t count)
+ {
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
+@@ -461,7 +461,7 @@ static ssize_t batadv_store_gw_mode(struct kobject *kobj,
+ }
+
+ static ssize_t batadv_show_gw_bwidth(struct kobject *kobj,
+- struct attribute *attr, char *buff)
++ struct kobj_attribute *attr, char *buff)
+ {
+ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
+ u32 down, up;
+@@ -474,7 +474,7 @@ static ssize_t batadv_show_gw_bwidth(struct kobject *kobj,
+ }
+
+ static ssize_t batadv_store_gw_bwidth(struct kobject *kobj,
+- struct attribute *attr, char *buff,
++ struct kobj_attribute *attr, char *buff,
+ size_t count)
+ {
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
+@@ -495,7 +495,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,
+- struct attribute *attr, char *buff)
++ struct kobj_attribute *attr, char *buff)
+ {
+ struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
+
+@@ -514,7 +514,7 @@ static ssize_t batadv_show_isolation_mark(struct kobject *kobj,
+ * Returns 'count' on success or a negative error code in case of failure
+ */
+ static ssize_t batadv_store_isolation_mark(struct kobject *kobj,
+- struct attribute *attr, char *buff,
++ struct kobj_attribute *attr, char *buff,
+ size_t count)
+ {
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
+@@ -753,7 +753,7 @@ void batadv_sysfs_del_vlan(struct batadv_priv *bat_priv,
+ }
+
+ static ssize_t batadv_show_mesh_iface(struct kobject *kobj,
+- struct attribute *attr, char *buff)
++ struct kobj_attribute *attr, char *buff)
+ {
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
+ struct batadv_hard_iface *hard_iface;
+@@ -777,7 +777,7 @@ static ssize_t batadv_show_mesh_iface(struct kobject *kobj,
+ }
+
+ static ssize_t batadv_store_mesh_iface(struct kobject *kobj,
+- struct attribute *attr, char *buff,
++ struct kobj_attribute *attr, char *buff,
+ size_t count)
+ {
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
+@@ -834,7 +834,7 @@ out:
+ }
+
+ static ssize_t batadv_show_iface_status(struct kobject *kobj,
+- struct attribute *attr, char *buff)
++ struct kobj_attribute *attr, char *buff)
+ {
+ struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
+ struct batadv_hard_iface *hard_iface;
+diff --git a/net/batman-adv/sysfs.h b/net/batman-adv/sysfs.h
+index 6197442..d762dac 100644
+--- a/net/batman-adv/sysfs.h
++++ b/net/batman-adv/sysfs.h
+@@ -37,9 +37,9 @@ struct net_device;
+
+ struct batadv_attribute {
+ struct attribute attr;
+- ssize_t (*show)(struct kobject *kobj, struct attribute *attr,
++ ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr,
+ char *buf);
+- ssize_t (*store)(struct kobject *kobj, struct attribute *attr,
++ ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
+ char *buf, size_t count);
+ };
+
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
-index 83b0ca2..6ebbdf4 100644
+index 0e80fd1..65abb77 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
-@@ -607,7 +607,7 @@ bool batadv_tt_local_add(struct net_device *soft_iface, const u8 *addr,
+@@ -609,7 +609,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),
@@ -124188,7 +149235,7 @@ index 83b0ca2..6ebbdf4 100644
ether_addr_copy(tt_local->common.addr, addr);
/* The local entry has to be marked as NEW to avoid to send it in
-@@ -837,7 +837,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
+@@ -839,7 +839,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
}
(*tt_data)->flags = BATADV_NO_FLAGS;
@@ -124197,7 +149244,7 @@ index 83b0ca2..6ebbdf4 100644
(*tt_data)->num_vlan = htons(num_vlan);
tt_vlan = (struct batadv_tvlv_tt_vlan_data *)(*tt_data + 1);
-@@ -956,7 +956,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset)
+@@ -958,7 +958,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",
@@ -124206,7 +149253,7 @@ index 83b0ca2..6ebbdf4 100644
seq_printf(seq, " %-13s %s %-8s %-9s (%-10s)\n", "Client", "VID",
"Flags", "Last seen", "CRC");
-@@ -2733,7 +2733,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
+@@ -2747,7 +2747,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
spin_lock_bh(&bat_priv->tt.commit_lock);
@@ -124215,7 +149262,7 @@ index 83b0ca2..6ebbdf4 100644
req_ttvn = tt_data->ttvn;
orig_node = batadv_orig_hash_find(bat_priv, req_src);
-@@ -2772,7 +2772,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
+@@ -2786,7 +2786,7 @@ static bool batadv_send_my_tt_response(struct batadv_priv *bat_priv,
bat_priv->tt.last_changeset_len);
spin_unlock_bh(&bat_priv->tt.last_changeset_lock);
} else {
@@ -124224,7 +149271,7 @@ index 83b0ca2..6ebbdf4 100644
/* allocate the tvlv, put the tt_data and all the tt_vlan_data
* in the initial part
-@@ -3294,10 +3294,10 @@ static void batadv_tt_local_commit_changes_nolock(struct batadv_priv *bat_priv)
+@@ -3308,10 +3308,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 */
@@ -124238,7 +149285,7 @@ index 83b0ca2..6ebbdf4 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 d260efd..1548fb3 100644
+index 3437b66..8fa5b54 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -81,7 +81,7 @@ enum batadv_dhcp_recipient {
@@ -124250,7 +149297,7 @@ index d260efd..1548fb3 100644
};
/**
-@@ -529,7 +529,7 @@ enum batadv_counters {
+@@ -551,7 +551,7 @@ enum batadv_counters {
* @work: work queue callback item for translation table purging
*/
struct batadv_priv_tt {
@@ -124259,7 +149306,7 @@ index d260efd..1548fb3 100644
atomic_t ogm_append_cnt;
atomic_t local_changes;
struct list_head changes_list;
-@@ -784,7 +784,7 @@ struct batadv_priv {
+@@ -809,7 +809,7 @@ struct batadv_priv {
atomic_t bonding;
atomic_t fragmentation;
atomic_t packet_size_max;
@@ -124268,7 +149315,7 @@ index d260efd..1548fb3 100644
#ifdef CONFIG_BATMAN_ADV_BLA
atomic_t bridge_loop_avoidance;
#endif
-@@ -803,7 +803,7 @@ struct batadv_priv {
+@@ -828,7 +828,7 @@ struct batadv_priv {
#endif
u32 isolation_mark;
u32 isolation_mark_mask;
@@ -124278,10 +149325,10 @@ index d260efd..1548fb3 100644
atomic_t batman_queue_left;
char num_ifaces;
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
-index b1eb8c0..266b4100 100644
+index 1298d72..423f410 100644
--- a/net/bluetooth/hci_sock.c
+++ b/net/bluetooth/hci_sock.c
-@@ -1332,7 +1332,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname,
+@@ -1477,7 +1477,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname,
uf.event_mask[1] = *((u32 *) f->event_mask + 1);
}
@@ -124291,10 +149338,10 @@ index b1eb8c0..266b4100 100644
err = -EFAULT;
break;
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
-index 66e8b6e..6b53602 100644
+index eb4f5f2..2cc4c50 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
-@@ -3537,8 +3537,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
+@@ -3547,8 +3547,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
break;
case L2CAP_CONF_RFC:
@@ -124308,7 +149355,7 @@ index 66e8b6e..6b53602 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 1bb5515..17f48c6 100644
+index e4cae72..95cc097ba 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,
@@ -124416,10 +149463,10 @@ index 40197ff..58633af 100644
.priv_size = sizeof(struct net_bridge),
.setup = br_dev_setup,
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
-index f46ca41..6e76045 100644
+index 67b2e27..07fb939 100644
--- a/net/bridge/netfilter/ebtables.c
+++ b/net/bridge/netfilter/ebtables.c
-@@ -1513,6 +1513,8 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1521,6 +1521,8 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
if (copy_from_user(&tmp, user, sizeof(tmp)))
return -EFAULT;
@@ -124428,7 +149475,7 @@ index f46ca41..6e76045 100644
t = find_table_lock(net, tmp.name, &ret, &ebt_mutex);
if (!t)
return ret;
-@@ -1535,7 +1537,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1543,7 +1545,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
tmp.valid_hooks = t->table->valid_hooks;
}
mutex_unlock(&ebt_mutex);
@@ -124437,7 +149484,7 @@ index f46ca41..6e76045 100644
BUGPRINT("c2u Didn't work\n");
ret = -EFAULT;
break;
-@@ -2328,6 +2330,8 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
+@@ -2332,6 +2334,8 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
if (copy_from_user(&tmp, user, sizeof(tmp)))
return -EFAULT;
@@ -124446,7 +149493,7 @@ index f46ca41..6e76045 100644
t = find_table_lock(net, tmp.name, &ret, &ebt_mutex);
if (!t)
return ret;
-@@ -2341,7 +2345,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
+@@ -2345,7 +2349,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
goto out;
tmp.valid_hooks = t->valid_hooks;
@@ -124455,7 +149502,7 @@ index f46ca41..6e76045 100644
ret = -EFAULT;
break;
}
-@@ -2352,7 +2356,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
+@@ -2356,7 +2360,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
tmp.entries_size = t->table->entries_size;
tmp.valid_hooks = t->table->valid_hooks;
@@ -124508,9 +149555,18 @@ index f5afda1..dcf770a 100644
list_del(&p->list);
goto out;
diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
-index 67a4a36..8d28068 100644
+index 67a4a36..406eefc 100644
--- a/net/caif/chnl_net.c
+++ b/net/caif/chnl_net.c
+@@ -214,7 +214,7 @@ static void chnl_flowctrl_cb(struct cflayer *layr, enum caif_ctrlcmd flow,
+ }
+ }
+
+-static int chnl_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t chnl_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct chnl_net *priv;
+ struct cfpkt *pkt = NULL;
@@ -515,7 +515,7 @@ static const struct nla_policy ipcaif_policy[IFLA_CAIF_MAX + 1] = {
};
@@ -124590,11 +149646,24 @@ index 1a19b98..df2b4ec 100644
if (!can_dir) {
printk(KERN_INFO "can: failed to create /proc/net/can . "
+diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c
+index bcbec33..5a84f6f 100644
+--- a/net/ceph/ceph_common.c
++++ b/net/ceph/ceph_common.c
+@@ -5,7 +5,7 @@
+ #include <linux/fs.h>
+ #include <linux/inet.h>
+ #include <linux/in6.h>
+-#include <linux/key.h>
++#include <linux/key-type.h>
+ #include <keys/ceph-type.h>
+ #include <linux/module.h>
+ #include <linux/mount.h>
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
-index 63ae5dd..40e8dce 100644
+index 9382619..0a029e7 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
-@@ -190,7 +190,7 @@ static void con_fault(struct ceph_connection *con);
+@@ -187,7 +187,7 @@ static void con_fault(struct ceph_connection *con);
#define MAX_ADDR_STR_LEN 64 /* 54 is enough */
static char addr_str[ADDR_STR_COUNT][MAX_ADDR_STR_LEN];
@@ -124603,7 +149672,7 @@ index 63ae5dd..40e8dce 100644
static struct page *zero_page; /* used in certain error cases */
-@@ -201,7 +201,7 @@ const char *ceph_pr_addr(const struct sockaddr_storage *ss)
+@@ -198,7 +198,7 @@ const char *ceph_pr_addr(const struct sockaddr_storage *ss)
struct sockaddr_in *in4 = (struct sockaddr_in *) ss;
struct sockaddr_in6 *in6 = (struct sockaddr_in6 *) ss;
@@ -124731,10 +149800,10 @@ index 5cfd26a..3c50cb0 100644
a0 = a[0];
a1 = a[1];
diff --git a/net/core/datagram.c b/net/core/datagram.c
-index d62af69..2e07b22 100644
+index fa9dc64..73dd85a 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
-@@ -338,7 +338,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
+@@ -357,7 +357,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
}
kfree_skb(skb);
@@ -124744,10 +149813,10 @@ index d62af69..2e07b22 100644
return err;
diff --git a/net/core/dev.c b/net/core/dev.c
-index 9efbdb3..16a834b 100644
+index 0ef061b..6d2375a 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -1748,7 +1748,7 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
+@@ -1766,7 +1766,7 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
{
if (skb_orphan_frags(skb, GFP_ATOMIC) ||
unlikely(!is_skb_forwardable(dev, skb))) {
@@ -124756,7 +149825,7 @@ index 9efbdb3..16a834b 100644
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -3173,7 +3173,7 @@ recursion_alert:
+@@ -3379,7 +3379,7 @@ recursion_alert:
drop:
rcu_read_unlock_bh();
@@ -124765,7 +149834,7 @@ index 9efbdb3..16a834b 100644
kfree_skb_list(skb);
return rc;
out:
-@@ -3525,7 +3525,7 @@ drop:
+@@ -3731,7 +3731,7 @@ drop:
local_irq_restore(flags);
@@ -124774,7 +149843,7 @@ index 9efbdb3..16a834b 100644
kfree_skb(skb);
return NET_RX_DROP;
}
-@@ -3602,7 +3602,7 @@ int netif_rx_ni(struct sk_buff *skb)
+@@ -3808,7 +3808,7 @@ int netif_rx_ni(struct sk_buff *skb)
}
EXPORT_SYMBOL(netif_rx_ni);
@@ -124783,7 +149852,7 @@ index 9efbdb3..16a834b 100644
{
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
-@@ -3948,7 +3948,7 @@ ncls:
+@@ -4154,7 +4154,7 @@ ncls:
ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
} else {
drop:
@@ -124792,7 +149861,7 @@ index 9efbdb3..16a834b 100644
kfree_skb(skb);
/* Jamal, now you will not able to escape explaining
* me how you were going to use this. :-)
-@@ -4844,7 +4844,7 @@ out_unlock:
+@@ -5117,7 +5117,7 @@ out_unlock:
return work;
}
@@ -124801,7 +149870,7 @@ index 9efbdb3..16a834b 100644
{
struct softnet_data *sd = this_cpu_ptr(&softnet_data);
unsigned long time_limit = jiffies + 2;
-@@ -7004,8 +7004,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
+@@ -7298,8 +7298,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
} else {
netdev_stats_to_stats64(storage, &dev->stats);
}
@@ -124832,10 +149901,10 @@ index b94b1d2..da3ed7c 100644
EXPORT_SYMBOL(dev_load);
diff --git a/net/core/filter.c b/net/core/filter.c
-index f393a22..a106bc8 100644
+index fb2951c..27ce8a9 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
-@@ -580,7 +580,11 @@ do_pass:
+@@ -588,7 +588,11 @@ do_pass:
/* Unknown instruction. */
default:
@@ -124848,7 +149917,7 @@ index f393a22..a106bc8 100644
}
insn++;
-@@ -624,7 +628,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen)
+@@ -632,7 +636,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen)
u16 *masks, memvalid = 0; /* One bit per cell, 16 cells */
int pc, ret = 0;
@@ -124857,7 +149926,7 @@ index f393a22..a106bc8 100644
masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL);
if (!masks)
-@@ -1058,7 +1062,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
+@@ -1066,7 +1070,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
if (!fp)
return -ENOMEM;
@@ -125034,7 +150103,7 @@ index 2bf8329..2eb1423 100644
return 0;
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
-index f88a62ab..ba29125 100644
+index b6c8a66..0da5ffc 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -287,7 +287,7 @@ static ssize_t carrier_changes_show(struct device *dev,
@@ -125109,7 +150178,7 @@ index 94acfc8..01545c0 100644
iph->ttl = 64;
iph->protocol = IPPROTO_UDP;
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
-index 4da4d51..ef1aa60 100644
+index 1474cfd..961bc9f 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)
@@ -125122,7 +150191,7 @@ index 4da4d51..ef1aa60 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 ca966f7..34ad6fa 100644
+index 215e613..893522a 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -61,7 +61,7 @@ struct rtnl_link {
@@ -125160,7 +150229,7 @@ index ca966f7..34ad6fa 100644
}
EXPORT_SYMBOL_GPL(__rtnl_link_unregister);
-@@ -1234,7 +1237,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
+@@ -1235,7 +1238,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,
@@ -125169,7 +150238,7 @@ index ca966f7..34ad6fa 100644
nla_put_u8(skb, IFLA_PROTO_DOWN, dev->proto_down))
goto nla_put_failure;
-@@ -3386,7 +3389,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -3395,7 +3398,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
__rtnl_unlock();
rtnl = net->rtnl;
{
@@ -125179,7 +150248,7 @@ index ca966f7..34ad6fa 100644
.min_dump_alloc = min_dump_alloc,
};
diff --git a/net/core/scm.c b/net/core/scm.c
-index dce0acb..69f6cac 100644
+index 2696aef..dbd5807 100644
--- a/net/core/scm.c
+++ b/net/core/scm.c
@@ -215,9 +215,9 @@ EXPORT_SYMBOL(__scm_send);
@@ -125271,10 +150340,10 @@ index 8616d11..8b30348 100644
}
diff --git a/net/core/sock.c b/net/core/sock.c
-index 0d91f7d..47dcbc8 100644
+index 6c1c8bc..325316d 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
-@@ -451,7 +451,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -409,7 +409,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
struct sk_buff_head *list = &sk->sk_receive_queue;
if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) {
@@ -125283,7 +150352,7 @@ index 0d91f7d..47dcbc8 100644
trace_sock_rcvqueue_full(sk, skb);
return -ENOMEM;
}
-@@ -461,7 +461,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -419,7 +419,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
return err;
if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
@@ -125292,7 +150361,7 @@ index 0d91f7d..47dcbc8 100644
return -ENOBUFS;
}
-@@ -494,7 +494,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -452,7 +452,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
skb->dev = NULL;
if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
@@ -125301,7 +150370,7 @@ index 0d91f7d..47dcbc8 100644
goto discard_and_relse;
}
if (nested)
-@@ -512,7 +512,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -470,7 +470,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
} else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
bh_unlock_sock(sk);
@@ -125310,24 +150379,57 @@ index 0d91f7d..47dcbc8 100644
goto discard_and_relse;
}
-@@ -919,6 +919,7 @@ set_rcvbuf:
+@@ -877,19 +877,6 @@ set_rcvbuf:
+ }
+ break;
+
+- case SO_ATTACH_BPF:
+- ret = -EINVAL;
+- if (optlen == sizeof(u32)) {
+- u32 ufd;
+-
+- ret = -EFAULT;
+- if (copy_from_user(&ufd, optval, sizeof(ufd)))
+- break;
+-
+- ret = sk_attach_bpf(ufd, sk);
+- }
+- break;
+-
+ case SO_ATTACH_REUSEPORT_CBPF:
+ ret = -EINVAL;
+ if (optlen == sizeof(struct sock_fprog)) {
+@@ -903,6 +890,20 @@ set_rcvbuf:
}
break;
+#ifndef GRKERNSEC_BPF_HARDEN
- case SO_ATTACH_BPF:
++ case SO_ATTACH_BPF:
++ ret = -EINVAL;
++ if (optlen == sizeof(u32)) {
++ u32 ufd;
++
++ ret = -EFAULT;
++ if (copy_from_user(&ufd, optval, sizeof(ufd)))
++ break;
++
++ ret = sk_attach_bpf(ufd, sk);
++ }
++ break;
++
+ case SO_ATTACH_REUSEPORT_EBPF:
ret = -EINVAL;
if (optlen == sizeof(u32)) {
-@@ -931,7 +932,7 @@ set_rcvbuf:
- ret = sk_attach_bpf(ufd, sk);
+@@ -916,6 +917,8 @@ set_rcvbuf:
}
break;
--
+
+#endif
++
case SO_DETACH_FILTER:
ret = sk_detach_filter(sk);
break;
-@@ -1037,12 +1038,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1021,12 +1024,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
struct timeval tm;
} v;
@@ -125343,7 +150445,7 @@ index 0d91f7d..47dcbc8 100644
return -EINVAL;
memset(&v, 0, sizeof(v));
-@@ -1180,11 +1181,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1164,11 +1167,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
case SO_PEERNAME:
{
@@ -125357,7 +150459,7 @@ index 0d91f7d..47dcbc8 100644
return -EINVAL;
if (copy_to_user(optval, address, len))
return -EFAULT;
-@@ -1272,7 +1273,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1256,7 +1259,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
if (len > lv)
len = lv;
@@ -125366,7 +150468,7 @@ index 0d91f7d..47dcbc8 100644
return -EFAULT;
lenout:
if (put_user(len, optlen))
-@@ -1564,7 +1565,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
+@@ -1535,7 +1538,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();
@@ -125375,7 +150477,7 @@ index 0d91f7d..47dcbc8 100644
/*
* Before updating sk_refcnt, we must commit prior changes to memory
* (Documentation/RCU/rculist_nulls.txt for details)
-@@ -2424,7 +2425,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
+@@ -2402,7 +2405,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
*/
smp_wmb();
atomic_set(&sk->sk_refcnt, 1);
@@ -125384,7 +150486,7 @@ index 0d91f7d..47dcbc8 100644
}
EXPORT_SYMBOL(sock_init_data);
-@@ -2553,6 +2554,7 @@ void sock_enable_timestamp(struct sock *sk, int flag)
+@@ -2531,6 +2534,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)
{
@@ -125392,7 +150494,7 @@ index 0d91f7d..47dcbc8 100644
struct sock_exterr_skb *serr;
struct sk_buff *skb;
int copied, err;
-@@ -2574,7 +2576,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
+@@ -2552,7 +2556,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
sock_recv_timestamp(msg, sk, skb);
serr = SKB_EXT_ERR(skb);
@@ -125403,7 +150505,7 @@ index 0d91f7d..47dcbc8 100644
msg->msg_flags |= MSG_ERRQUEUE;
err = copied;
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
-index 0c1d58d..e6ad04f 100644
+index a996ce8..e0d5d3d 100644
--- a/net/core/sock_diag.c
+++ b/net/core/sock_diag.c
@@ -14,7 +14,7 @@
@@ -125589,10 +150691,10 @@ index 5325b54..a0d4d69 100644
*lenp = len;
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
-index 1eba07f..4859469 100644
+index d8fb47f..f0914ca 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
-@@ -999,7 +999,7 @@ static struct packet_type dsa_pack_type __read_mostly = {
+@@ -985,7 +985,7 @@ static struct packet_type dsa_pack_type __read_mostly = {
.func = dsa_switch_rcv,
};
@@ -125601,6 +150703,19 @@ index 1eba07f..4859469 100644
.notifier_call = dsa_slave_netdevice_event,
};
+diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c
+index c7d1adc..e4d688b 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,
+ }
+
+
+-static int hsr_dev_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t hsr_dev_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ 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
--- a/net/hsr/hsr_netlink.c
@@ -125615,10 +150730,10 @@ 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 20c49c7..94377ab 100644
+index 737c87a..33f9fec 100644
--- a/net/ieee802154/6lowpan/core.c
+++ b/net/ieee802154/6lowpan/core.c
-@@ -184,7 +184,7 @@ static void lowpan_dellink(struct net_device *ldev, struct list_head *head)
+@@ -182,7 +182,7 @@ static void lowpan_dellink(struct net_device *ldev, struct list_head *head)
dev_put(wdev);
}
@@ -125628,7 +150743,7 @@ index 20c49c7..94377ab 100644
.priv_size = LOWPAN_PRIV_SIZE(sizeof(struct lowpan_dev_info)),
.setup = lowpan_setup,
diff --git a/net/ieee802154/6lowpan/reassembly.c b/net/ieee802154/6lowpan/reassembly.c
-index 6b437e8..47c6566 100644
+index 30d875d..760f4f1 100644
--- a/net/ieee802154/6lowpan/reassembly.c
+++ b/net/ieee802154/6lowpan/reassembly.c
@@ -492,14 +492,13 @@ static struct ctl_table lowpan_frags_ctl_table[] = {
@@ -125671,18 +150786,6 @@ index 6b437e8..47c6566 100644
err_alloc:
return -ENOMEM;
}
-diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
-index 416dfa0..6e41f17 100644
---- a/net/ipv4/Kconfig
-+++ b/net/ipv4/Kconfig
-@@ -353,6 +353,7 @@ config INET_ESP
- select CRYPTO_CBC
- select CRYPTO_SHA1
- select CRYPTO_DES
-+ select CRYPTO_ECHAINIV
- ---help---
- Support for IPsec ESP.
-
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 5c5db66..c10a4a2 100644
--- a/net/ipv4/af_inet.c
@@ -125857,10 +150960,10 @@ index 6414891..30ec9bf 100644
newicsk->icsk_retransmits = 0;
newicsk->icsk_backoff = 0;
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c
-index ab9f8a6..238aa59 100644
+index 6029157..92bcf89 100644
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
-@@ -962,7 +962,7 @@ static int inet_diag_rcv_msg_compat(struct sk_buff *skb, struct nlmsghdr *nlh)
+@@ -985,7 +985,7 @@ static int inet_diag_rcv_msg_compat(struct sk_buff *skb, struct nlmsghdr *nlh)
return -EINVAL;
}
{
@@ -125869,7 +150972,7 @@ index ab9f8a6..238aa59 100644
.dump = inet_diag_dump_compat,
};
return netlink_dump_start(net->diag_nlsk, skb, nlh, &c);
-@@ -992,7 +992,7 @@ static int inet_diag_handler_dump(struct sk_buff *skb, struct nlmsghdr *h)
+@@ -1016,7 +1016,7 @@ static int inet_diag_handler_cmd(struct sk_buff *skb, struct nlmsghdr *h)
return -EINVAL;
}
{
@@ -125934,7 +151037,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 b8a0607d..0ef8880 100644
+index 187c6fc..f4a802c 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -284,7 +284,7 @@ static int ip_frag_too_far(struct ipq *qp)
@@ -125985,10 +151088,10 @@ index b8a0607d..0ef8880 100644
return -ENOMEM;
}
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
-index 6145214..77ebc63 100644
+index 41ba68d..599331a 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
-@@ -117,7 +117,7 @@ static bool log_ecn_error = true;
+@@ -116,7 +116,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");
@@ -125997,7 +151100,7 @@ index 6145214..77ebc63 100644
static int ipgre_tunnel_init(struct net_device *dev);
static int ipgre_net_id __read_mostly;
-@@ -1190,7 +1190,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
+@@ -1189,7 +1189,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
[IFLA_GRE_COLLECT_METADATA] = { .type = NLA_FLAG },
};
@@ -126006,7 +151109,7 @@ index 6145214..77ebc63 100644
.kind = "gre",
.maxtype = IFLA_GRE_MAX,
.policy = ipgre_policy,
-@@ -1205,7 +1205,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
+@@ -1204,7 +1204,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
.get_link_net = ip_tunnel_get_link_net,
};
@@ -126016,7 +151119,7 @@ index 6145214..77ebc63 100644
.maxtype = IFLA_GRE_MAX,
.policy = ipgre_policy,
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
-index b1209b6..c2f63ba 100644
+index d77eb0c..4482235 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -148,6 +148,10 @@
@@ -126064,10 +151167,10 @@ index a501242..ea6b81d 100644
msg.msg_flags = flags;
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
-index 4d8f0b6..a2c583b 100644
+index 5cf10b7..2e40e55 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
-@@ -45,7 +45,7 @@
+@@ -44,7 +44,7 @@
#include <net/net_namespace.h>
#include <net/netns/generic.h>
@@ -126076,7 +151179,7 @@ index 4d8f0b6..a2c583b 100644
static int vti_net_id __read_mostly;
static int vti_tunnel_init(struct net_device *dev);
-@@ -525,7 +525,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = {
+@@ -524,7 +524,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = {
[IFLA_VTI_REMOTE] = { .len = FIELD_SIZEOF(struct iphdr, daddr) },
};
@@ -126086,10 +151189,10 @@ index 4d8f0b6..a2c583b 100644
.maxtype = IFLA_VTI_MAX,
.policy = vti_policy,
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
-index 0bc7412..9bf43d2 100644
+index 2ed9dd2..0682cfe 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
-@@ -337,7 +337,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg)
+@@ -332,7 +332,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg)
mm_segment_t oldfs = get_fs();
set_fs(get_ds());
@@ -126098,7 +151201,7 @@ index 0bc7412..9bf43d2 100644
set_fs(oldfs);
return res;
}
-@@ -348,7 +348,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg)
+@@ -343,7 +343,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg)
mm_segment_t oldfs = get_fs();
set_fs(get_ds());
@@ -126107,7 +151210,7 @@ index 0bc7412..9bf43d2 100644
set_fs(oldfs);
return res;
}
-@@ -359,7 +359,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg)
+@@ -354,7 +354,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg)
mm_segment_t oldfs = get_fs();
set_fs(get_ds());
@@ -126117,10 +151220,10 @@ index 0bc7412..9bf43d2 100644
return res;
}
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
-index a09fb0d..24e19b2 100644
+index 4044da6..7e21175 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
-@@ -124,7 +124,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
+@@ -123,7 +123,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
static int ipip_net_id __read_mostly;
static int ipip_tunnel_init(struct net_device *dev);
@@ -126129,7 +151232,7 @@ index a09fb0d..24e19b2 100644
static int ipip_err(struct sk_buff *skb, u32 info)
{
-@@ -485,7 +485,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = {
+@@ -484,7 +484,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = {
[IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
};
@@ -126139,7 +151242,7 @@ index a09fb0d..24e19b2 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 11dccba..db794f4 100644
+index b488cac..7955324 100644
--- a/net/ipv4/netfilter/arp_tables.c
+++ b/net/ipv4/netfilter/arp_tables.c
@@ -359,11 +359,12 @@ unsigned int arpt_do_table(struct sk_buff *skb,
@@ -126540,7 +151643,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 aa67e0e..3c65672 100644
+index d3a2716..884331c 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -59,7 +59,7 @@ struct ping_table {
@@ -126592,7 +151695,7 @@ index aa67e0e..3c65672 100644
else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags)
ip_cmsg_recv(msg, skb);
#endif
-@@ -1119,7 +1119,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -1121,7 +1121,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,
@@ -126820,10 +151923,10 @@ index 02c6229..68cc2a6 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 a0bd7a5..79fdbb9 100644
+index 4d367b4..84f04b1 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
-@@ -67,7 +67,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write,
+@@ -66,7 +66,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write,
container_of(table->data, struct net, ipv4.ip_local_ports.range);
int ret;
int range[2];
@@ -126832,7 +151935,7 @@ index a0bd7a5..79fdbb9 100644
.data = &range,
.maxlen = sizeof(range),
.mode = table->mode,
-@@ -125,7 +125,7 @@ static int ipv4_ping_group_range(struct ctl_table *table, int write,
+@@ -124,7 +124,7 @@ static int ipv4_ping_group_range(struct ctl_table *table, int write,
int ret;
gid_t urange[2];
kgid_t low, high;
@@ -126841,7 +151944,7 @@ index a0bd7a5..79fdbb9 100644
.data = &urange,
.maxlen = sizeof(urange),
.mode = table->mode,
-@@ -156,7 +156,7 @@ static int proc_tcp_congestion_control(struct ctl_table *ctl, int write,
+@@ -155,7 +155,7 @@ static int proc_tcp_congestion_control(struct ctl_table *ctl, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
char val[TCP_CA_NAME_MAX];
@@ -126850,7 +151953,7 @@ index a0bd7a5..79fdbb9 100644
.data = val,
.maxlen = TCP_CA_NAME_MAX,
};
-@@ -175,7 +175,7 @@ static int proc_tcp_available_congestion_control(struct ctl_table *ctl,
+@@ -174,7 +174,7 @@ static int proc_tcp_available_congestion_control(struct ctl_table *ctl,
void __user *buffer, size_t *lenp,
loff_t *ppos)
{
@@ -126859,7 +151962,7 @@ index a0bd7a5..79fdbb9 100644
int ret;
tbl.data = kmalloc(tbl.maxlen, GFP_USER);
-@@ -192,7 +192,7 @@ static int proc_allowed_congestion_control(struct ctl_table *ctl,
+@@ -191,7 +191,7 @@ static int proc_allowed_congestion_control(struct ctl_table *ctl,
void __user *buffer, size_t *lenp,
loff_t *ppos)
{
@@ -126868,7 +151971,7 @@ index a0bd7a5..79fdbb9 100644
int ret;
tbl.data = kmalloc(tbl.maxlen, GFP_USER);
-@@ -211,7 +211,7 @@ static int proc_tcp_fastopen_key(struct ctl_table *ctl, int write,
+@@ -210,7 +210,7 @@ static int proc_tcp_fastopen_key(struct ctl_table *ctl, int write,
void __user *buffer, size_t *lenp,
loff_t *ppos)
{
@@ -126877,7 +151980,7 @@ index a0bd7a5..79fdbb9 100644
struct tcp_fastopen_context *ctxt;
int ret;
u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */
-@@ -955,13 +955,12 @@ static struct ctl_table ipv4_net_table[] = {
+@@ -965,13 +965,12 @@ static struct ctl_table ipv4_net_table[] = {
static __net_init int ipv4_sysctl_init_net(struct net *net)
{
@@ -126893,7 +151996,7 @@ index a0bd7a5..79fdbb9 100644
if (!table)
goto err_alloc;
-@@ -970,7 +969,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
+@@ -980,7 +979,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
table[i].data += (void *)net - (void *)&init_net;
}
@@ -126906,7 +152009,7 @@ index a0bd7a5..79fdbb9 100644
goto err_reg;
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
-index d4c5115..f949b08 100644
+index 3b2c8e9..601c090 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -266,11 +266,13 @@ static void tcp_ecn_rcv_synack(struct tcp_sock *tp, const struct tcphdr *th)
@@ -126932,7 +152035,7 @@ index d4c5115..f949b08 100644
sk->sk_max_pacing_rate);
}
-@@ -4674,7 +4676,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
+@@ -4675,7 +4677,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
* simplifies code)
*/
static void
@@ -126941,7 +152044,7 @@ index d4c5115..f949b08 100644
struct sk_buff *head, struct sk_buff *tail,
u32 start, u32 end)
{
-@@ -5669,6 +5671,7 @@ discard:
+@@ -5670,6 +5672,7 @@ discard:
tcp_paws_reject(&tp->rx_opt, 0))
goto discard_and_undo;
@@ -126949,7 +152052,7 @@ index d4c5115..f949b08 100644
if (th->syn) {
/* We see SYN without ACK. It is attempt of
* simultaneous connect with crossed SYNs.
-@@ -5720,6 +5723,7 @@ discard:
+@@ -5721,6 +5724,7 @@ discard:
goto discard;
#endif
}
@@ -126957,7 +152060,7 @@ index d4c5115..f949b08 100644
/* "fifth, if neither of the SYN or RST bits is set then
* drop the segment and return."
*/
-@@ -5765,7 +5769,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
+@@ -5766,7 +5770,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
goto discard;
if (th->syn) {
@@ -126966,7 +152069,7 @@ index d4c5115..f949b08 100644
goto discard;
if (icsk->icsk_af_ops->conn_request(sk, skb) < 0)
return 1;
-@@ -6097,7 +6101,7 @@ struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops,
+@@ -6098,7 +6102,7 @@ struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops,
kmemcheck_annotate_bitfield(ireq, flags);
ireq->opt = NULL;
@@ -126976,10 +152079,10 @@ index d4c5115..f949b08 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 048418b..bb14e83 100644
+index a7b1a90..9f6c261 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
-@@ -89,6 +89,10 @@ int sysctl_tcp_tw_reuse __read_mostly;
+@@ -88,6 +88,10 @@ int sysctl_tcp_tw_reuse __read_mostly;
int sysctl_tcp_low_latency __read_mostly;
EXPORT_SYMBOL(sysctl_tcp_low_latency);
@@ -126990,7 +152093,7 @@ index 048418b..bb14e83 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);
-@@ -1418,6 +1422,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
+@@ -1421,6 +1425,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0;
reset:
@@ -127000,7 +152103,7 @@ index 048418b..bb14e83 100644
tcp_v4_send_reset(rsk, skb);
discard:
kfree_skb(skb);
-@@ -1583,12 +1590,19 @@ int tcp_v4_rcv(struct sk_buff *skb)
+@@ -1586,12 +1593,19 @@ int tcp_v4_rcv(struct sk_buff *skb)
lookup:
sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
@@ -127023,7 +152126,7 @@ index 048418b..bb14e83 100644
if (sk->sk_state == TCP_NEW_SYN_RECV) {
struct request_sock *req = inet_reqsk(sk);
-@@ -1673,6 +1687,10 @@ csum_error:
+@@ -1676,6 +1690,10 @@ csum_error:
bad_packet:
TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
} else {
@@ -127035,7 +152138,7 @@ index 048418b..bb14e83 100644
}
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
-index 9475a27..8bc7bde 100644
+index 9b02af2..5b73e16 100644
--- a/net/ipv4/tcp_minisocks.c
+++ b/net/ipv4/tcp_minisocks.c
@@ -27,6 +27,10 @@
@@ -127049,7 +152152,7 @@ index 9475a27..8bc7bde 100644
int sysctl_tcp_syncookies __read_mostly = 1;
EXPORT_SYMBOL(sysctl_tcp_syncookies);
-@@ -787,7 +791,10 @@ embryonic_reset:
+@@ -784,7 +788,10 @@ embryonic_reset:
* avoid becoming vulnerable to outside attack aiming at
* resetting legit local connections.
*/
@@ -127075,7 +152178,7 @@ index ebf5ff5..4d1ff32 100644
cnt += width;
}
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
-index 193ba1f..aeda727 100644
+index a4730a2..1a92c3a 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -22,6 +22,10 @@
@@ -127088,8 +152191,8 @@ index 193ba1f..aeda727 100644
+
int sysctl_tcp_syn_retries __read_mostly = TCP_SYN_RETRIES;
int sysctl_tcp_synack_retries __read_mostly = TCP_SYNACK_RETRIES;
- int sysctl_tcp_keepalive_time __read_mostly = TCP_KEEPALIVE_TIME;
-@@ -207,6 +211,13 @@ static int tcp_write_timeout(struct sock *sk)
+ int sysctl_tcp_retries1 __read_mostly = TCP_RETR1;
+@@ -204,6 +208,13 @@ static int tcp_write_timeout(struct sock *sk)
}
}
@@ -127104,7 +152207,7 @@ index 193ba1f..aeda727 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 21fbb54..45345d8 100644
+index eb8933b..21e9109 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -87,6 +87,7 @@
@@ -127115,9 +152218,9 @@ index 21fbb54..45345d8 100644
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/igmp.h>
-@@ -114,6 +115,10 @@
- #include <net/busy_poll.h>
+@@ -115,6 +116,10 @@
#include "udp_impl.h"
+ #include <net/sock_reuseport.h>
+#ifdef CONFIG_GRKERNSEC_BLACKHOLE
+extern int grsec_enable_blackhole;
@@ -127126,7 +152229,7 @@ index 21fbb54..45345d8 100644
struct udp_table udp_table __read_mostly;
EXPORT_SYMBOL(udp_table);
-@@ -611,6 +616,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk,
+@@ -691,6 +696,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk,
return true;
}
@@ -127136,7 +152239,7 @@ index 21fbb54..45345d8 100644
/*
* This routine is called by the ICMP module when it gets some
* sort of error condition. If err < 0 then the socket should
-@@ -947,9 +955,18 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
+@@ -1029,9 +1037,18 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
dport = usin->sin_port;
if (dport == 0)
return -EINVAL;
@@ -127155,7 +152258,7 @@ index 21fbb54..45345d8 100644
daddr = inet->inet_daddr;
dport = inet->inet_dport;
/* Open fast path for connected socket.
-@@ -1206,7 +1223,7 @@ static unsigned int first_packet_length(struct sock *sk)
+@@ -1288,7 +1305,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));
@@ -127164,7 +152267,7 @@ index 21fbb54..45345d8 100644
__skb_unlink(skb, rcvq);
__skb_queue_tail(&list_kill, skb);
}
-@@ -1286,6 +1303,10 @@ try_again:
+@@ -1369,6 +1386,10 @@ try_again:
if (!skb)
goto out;
@@ -127175,7 +152278,7 @@ index 21fbb54..45345d8 100644
ulen = skb->len - sizeof(struct udphdr);
copied = len;
if (copied > ulen)
-@@ -1318,7 +1339,7 @@ try_again:
+@@ -1402,7 +1423,7 @@ try_again:
if (unlikely(err)) {
trace_kfree_skb(skb, udp_recvmsg);
if (!peeked) {
@@ -127184,7 +152287,7 @@ index 21fbb54..45345d8 100644
UDP_INC_STATS_USER(sock_net(sk),
UDP_MIB_INERRORS, is_udplite);
}
-@@ -1612,7 +1633,7 @@ csum_error:
+@@ -1704,7 +1725,7 @@ csum_error:
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
drop:
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
@@ -127193,7 +152296,7 @@ index 21fbb54..45345d8 100644
kfree_skb(skb);
return -1;
}
-@@ -1630,7 +1651,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
+@@ -1722,7 +1743,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
if (!skb1) {
@@ -127202,7 +152305,7 @@ index 21fbb54..45345d8 100644
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
IS_UDPLITE(sk));
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -1836,6 +1857,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+@@ -1928,6 +1949,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);
@@ -127212,7 +152315,7 @@ index 21fbb54..45345d8 100644
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
/*
-@@ -2444,7 +2468,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -2536,7 +2560,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,
@@ -127309,20 +152412,8 @@ index 542074c..648df74 100644
memset(XFRM_MODE_SKB_CB(skb)->flow_lbl, 0,
sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl));
-diff --git a/net/ipv6/Kconfig b/net/ipv6/Kconfig
-index 983bb99..ebc39e1 100644
---- a/net/ipv6/Kconfig
-+++ b/net/ipv6/Kconfig
-@@ -69,6 +69,7 @@ config INET6_ESP
- select CRYPTO_CBC
- select CRYPTO_SHA1
- select CRYPTO_DES
-+ select CRYPTO_ECHAINIV
- ---help---
- Support for IPsec ESP.
-
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
-index e8d3da0..c1ab725 100644
+index bdd7eac..5a18ee4 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -179,7 +179,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
@@ -127352,7 +152443,7 @@ index e8d3da0..c1ab725 100644
net->dev_base_seq;
hlist_for_each_entry_rcu(dev, head, index_hlist) {
if (idx < s_idx)
-@@ -2584,7 +2584,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
+@@ -2589,7 +2589,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
p.iph.ihl = 5;
p.iph.protocol = IPPROTO_IPV6;
p.iph.ttl = 64;
@@ -127361,7 +152452,7 @@ index e8d3da0..c1ab725 100644
if (ops->ndo_do_ioctl) {
mm_segment_t oldfs = get_fs();
-@@ -3867,16 +3867,23 @@ static const struct file_operations if6_fops = {
+@@ -3899,16 +3899,23 @@ static const struct file_operations if6_fops = {
.release = seq_release_net,
};
@@ -127386,7 +152477,7 @@ index e8d3da0..c1ab725 100644
}
static struct pernet_operations if6_proc_net_ops = {
-@@ -4495,7 +4502,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
+@@ -4527,7 +4534,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();
@@ -127395,7 +152486,7 @@ index e8d3da0..c1ab725 100644
for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
idx = 0;
head = &net->dev_index_head[h];
-@@ -4705,7 +4712,7 @@ static inline size_t inet6_if_nlmsg_size(void)
+@@ -4737,7 +4744,7 @@ static inline size_t inet6_if_nlmsg_size(void)
+ nla_total_size(inet6_ifla6_size()); /* IFLA_PROTINFO */
}
@@ -127404,7 +152495,7 @@ index e8d3da0..c1ab725 100644
int items, int bytes)
{
int i;
-@@ -4715,7 +4722,7 @@ static inline void __snmp6_fill_statsdev(u64 *stats, atomic_long_t *mib,
+@@ -4747,7 +4754,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++)
@@ -127413,7 +152504,7 @@ index e8d3da0..c1ab725 100644
memset(&stats[items], 0, pad);
}
-@@ -5169,7 +5176,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
+@@ -5202,7 +5209,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
rt_genid_bump_ipv6(net);
break;
}
@@ -127422,7 +152513,7 @@ index e8d3da0..c1ab725 100644
}
static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
-@@ -5189,7 +5196,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
+@@ -5222,7 +5229,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
@@ -127431,7 +152522,16 @@ index e8d3da0..c1ab725 100644
int ret;
/*
-@@ -5214,7 +5221,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
+@@ -5245,7 +5252,7 @@ static
+ int addrconf_sysctl_hop_limit(struct ctl_table *ctl, int write,
+ void __user *buffer, size_t *lenp, loff_t *ppos)
+ {
+- struct ctl_table lctl;
++ ctl_table_no_const lctl;
+ int min_hl = 1, max_hl = 255;
+
+ lctl = *ctl;
+@@ -5261,7 +5268,7 @@ int addrconf_sysctl_mtu(struct ctl_table *ctl, int write,
{
struct inet6_dev *idev = ctl->extra1;
int min_mtu = IPV6_MIN_MTU;
@@ -127440,7 +152540,7 @@ index e8d3da0..c1ab725 100644
lctl = *ctl;
lctl.extra1 = &min_mtu;
-@@ -5289,7 +5296,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
+@@ -5336,7 +5343,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
@@ -127449,7 +152549,7 @@ index e8d3da0..c1ab725 100644
int ret;
/*
-@@ -5354,7 +5361,7 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write,
+@@ -5401,7 +5408,7 @@ static int addrconf_sysctl_stable_secret(struct ctl_table *ctl, int write,
int err;
struct in6_addr addr;
char str[IPV6_MAX_STRLEN];
@@ -127458,7 +152558,7 @@ index e8d3da0..c1ab725 100644
struct net *net = ctl->extra2;
struct ipv6_stable_secret *secret = ctl->data;
-@@ -5423,7 +5430,7 @@ int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl,
+@@ -5470,7 +5477,7 @@ int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl,
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
@@ -127504,6 +152604,19 @@ index 0a37ddc..af81b1a 100644
table = kmemdup(ipv6_icmp_table_template,
sizeof(ipv6_icmp_table_template),
+diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c
+index 21ace5a..270fb64 100644
+--- a/net/ipv6/inet6_hashtables.c
++++ b/net/ipv6/inet6_hashtables.c
+@@ -192,7 +192,7 @@ struct sock *inet6_lookup(struct net *net, struct inet_hashinfo *hashinfo,
+ EXPORT_SYMBOL_GPL(inet6_lookup);
+
+ static int __inet6_check_established(struct inet_timewait_death_row *death_row,
+- struct sock *sk, const __u16 lport,
++ struct sock *sk, __u16 lport,
+ struct inet_timewait_sock **twp)
+ {
+ struct inet_hashinfo *hinfo = death_row->hashinfo;
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index 0c7e276..68d9b36 100644
--- a/net/ipv6/ip6_fib.c
@@ -127521,10 +152634,10 @@ index 0c7e276..68d9b36 100644
return new;
}
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
-index 4650c68..5b6762e 100644
+index c0d4dc1..96afdd9 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
-@@ -71,8 +71,8 @@ struct ip6gre_net {
+@@ -70,8 +70,8 @@ struct ip6gre_net {
struct net_device *fb_tunnel_dev;
};
@@ -127535,7 +152648,7 @@ index 4650c68..5b6762e 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);
-@@ -1304,7 +1304,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
+@@ -1303,7 +1303,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
}
@@ -127834,10 +152947,10 @@ index 99425cf..cc99e7c 100644
case IP6T_SO_GET_ENTRIES:
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
-index bab4441..233aa7a 100644
+index e4347ae..c7654e7 100644
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
-@@ -96,12 +96,11 @@ static struct ctl_table nf_ct_frag6_sysctl_table[] = {
+@@ -95,12 +95,11 @@ static struct ctl_table nf_ct_frag6_sysctl_table[] = {
static int nf_ct_frag6_sysctl_register(struct net *net)
{
@@ -127852,7 +152965,7 @@ index bab4441..233aa7a 100644
GFP_KERNEL);
if (table == NULL)
goto err_alloc;
-@@ -112,9 +111,9 @@ static int nf_ct_frag6_sysctl_register(struct net *net)
+@@ -111,9 +110,9 @@ static int nf_ct_frag6_sysctl_register(struct net *net)
table[2].data = &net->nf_frag.frags.high_thresh;
table[2].extra1 = &net->nf_frag.frags.low_thresh;
table[2].extra2 = &init_net.nf_frag.frags.high_thresh;
@@ -127865,7 +152978,7 @@ index bab4441..233aa7a 100644
if (hdr == NULL)
goto err_reg;
-@@ -122,8 +121,7 @@ static int nf_ct_frag6_sysctl_register(struct net *net)
+@@ -121,8 +120,7 @@ static int nf_ct_frag6_sysctl_register(struct net *net)
return 0;
err_reg:
@@ -127993,7 +153106,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 9914098..f3f8888 100644
+index fa59dd7..d9d9c9d 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)
@@ -128068,7 +153181,7 @@ index 9914098..f3f8888 100644
return 0;
default:
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
-index 45f5ae5..1c57cbe 100644
+index 18f3498..74cbfc9 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -630,12 +630,11 @@ static struct ctl_table ip6_frags_ctl_table[] = {
@@ -128110,10 +153223,10 @@ index 45f5ae5..1c57cbe 100644
return -ENOMEM;
}
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
-index 3f164d3..cd507d9 100644
+index ed44663..fa4d1d9 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
-@@ -3503,7 +3503,7 @@ struct ctl_table ipv6_route_table_template[] = {
+@@ -3523,7 +3523,7 @@ struct ctl_table ipv6_route_table_template[] = {
struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net)
{
@@ -128123,7 +153236,7 @@ index 3f164d3..cd507d9 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 dcccae8..33152e7 100644
+index 2066d1c..190a677 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -74,7 +74,7 @@ static void ipip6_tunnel_setup(struct net_device *dev);
@@ -128135,7 +153248,7 @@ index dcccae8..33152e7 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)
+@@ -1732,7 +1732,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head)
unregister_netdevice_queue(dev, head);
}
@@ -128158,10 +153271,10 @@ 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 b8d4056..9509e20 100644
+index 5c8c842..e67c742 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
-@@ -102,6 +102,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
+@@ -101,6 +101,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
}
}
@@ -128172,7 +153285,7 @@ index b8d4056..9509e20 100644
static __u32 tcp_v6_init_sequence(const struct sk_buff *skb)
{
return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32,
-@@ -1269,6 +1273,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
+@@ -1268,6 +1272,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0;
reset:
@@ -128182,7 +153295,7 @@ index b8d4056..9509e20 100644
tcp_v6_send_reset(sk, skb);
discard:
if (opt_skb)
-@@ -1379,12 +1386,20 @@ static int tcp_v6_rcv(struct sk_buff *skb)
+@@ -1378,12 +1385,20 @@ static int tcp_v6_rcv(struct sk_buff *skb)
lookup:
sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest,
inet6_iif(skb));
@@ -128205,7 +153318,7 @@ index b8d4056..9509e20 100644
if (sk->sk_state == TCP_NEW_SYN_RECV) {
struct request_sock *req = inet_reqsk(sk);
-@@ -1472,6 +1487,10 @@ csum_error:
+@@ -1471,6 +1486,10 @@ csum_error:
bad_packet:
TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
} else {
@@ -128217,10 +153330,10 @@ index b8d4056..9509e20 100644
}
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
-index 6665e1a..e84ef29 100644
+index 6794120..21d5fae 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
-@@ -76,6 +76,10 @@ static u32 udp6_ehashfn(const struct net *net,
+@@ -77,6 +77,10 @@ static u32 udp6_ehashfn(const struct net *net,
udp_ipv6_hash_secret + net_hash_mix(net));
}
@@ -128228,10 +153341,10 @@ index 6665e1a..e84ef29 100644
+extern int grsec_enable_blackhole;
+#endif
+
- int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
- {
- const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
-@@ -448,7 +452,7 @@ try_again:
+ /* match_wildcard == true: IPV6_ADDR_ANY equals to any IPv6 addresses if IPv6
+ * only, and any IPv4 addresses if not IPv6 only
+ * match_wildcard == false: addresses must be exactly the same, i.e.
+@@ -494,7 +498,7 @@ try_again:
if (unlikely(err)) {
trace_kfree_skb(skb, udpv6_recvmsg);
if (!peeked) {
@@ -128240,7 +153353,7 @@ index 6665e1a..e84ef29 100644
if (is_udp4)
UDP_INC_STATS_USER(sock_net(sk),
UDP_MIB_INERRORS,
-@@ -712,7 +716,7 @@ csum_error:
+@@ -758,7 +762,7 @@ csum_error:
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
drop:
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
@@ -128249,7 +153362,7 @@ index 6665e1a..e84ef29 100644
kfree_skb(skb);
return -1;
}
-@@ -753,7 +757,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
+@@ -799,7 +803,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) {
@@ -128258,7 +153371,7 @@ index 6665e1a..e84ef29 100644
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
IS_UDPLITE(sk));
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -935,6 +939,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+@@ -981,6 +985,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);
@@ -128347,11 +153460,98 @@ index c1d247e..9e5949d 100644
if (!ipx_proc_dir)
goto out;
+diff --git a/net/irda/discovery.c b/net/irda/discovery.c
+index 364d70a..c503f3f 100644
+--- a/net/irda/discovery.c
++++ b/net/irda/discovery.c
+@@ -136,7 +136,7 @@ void irlmp_add_discovery_log(hashbin_t *cachelog, hashbin_t *log)
+ }
+
+ /* Delete the now empty log */
+- hashbin_delete(log, (FREE_FUNC) kfree);
++ hashbin_delete(log, irlmp_kfree);
+ }
+
+ /*
+diff --git a/net/irda/ircomm/ircomm_core.c b/net/irda/ircomm/ircomm_core.c
+index 3af2195..a38e804 100644
+--- a/net/irda/ircomm/ircomm_core.c
++++ b/net/irda/ircomm/ircomm_core.c
+@@ -46,7 +46,7 @@
+ #include <net/irda/ircomm_param.h>
+ #include <net/irda/ircomm_core.h>
+
+-static int __ircomm_close(struct ircomm_cb *self);
++static void __ircomm_close(void *_self);
+ static void ircomm_control_indication(struct ircomm_cb *self,
+ struct sk_buff *skb, int clen);
+
+@@ -91,7 +91,7 @@ static int __init ircomm_init(void)
+
+ static void __exit ircomm_cleanup(void)
+ {
+- hashbin_delete(ircomm, (FREE_FUNC) __ircomm_close);
++ hashbin_delete(ircomm, __ircomm_close);
+
+ #ifdef CONFIG_PROC_FS
+ remove_proc_entry("ircomm", proc_irda);
+@@ -151,8 +151,10 @@ EXPORT_SYMBOL(ircomm_open);
+ * Remove IrCOMM instance
+ *
+ */
+-static int __ircomm_close(struct ircomm_cb *self)
++static void __ircomm_close(void *_self)
+ {
++ struct ircomm_cb *self = _self;
++
+ /* Disconnect link if any */
+ ircomm_do_event(self, IRCOMM_DISCONNECT_REQUEST, NULL, NULL);
+
+@@ -170,8 +172,6 @@ static int __ircomm_close(struct ircomm_cb *self)
+ self->magic = 0;
+
+ kfree(self);
+-
+- return 0;
+ }
+
+ /*
+@@ -191,7 +191,8 @@ int ircomm_close(struct ircomm_cb *self)
+
+ IRDA_ASSERT(entry == self, return -1;);
+
+- return __ircomm_close(self);
++ __ircomm_close(self);
++ return 0;
+ }
+
+ EXPORT_SYMBOL(ircomm_close);
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
-index a423770..a6e53a3 100644
+index a423770..e995a21 100644
--- a/net/irda/ircomm/ircomm_tty.c
+++ b/net/irda/ircomm/ircomm_tty.c
-@@ -310,10 +310,10 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
+@@ -172,8 +172,10 @@ static int __init ircomm_tty_init(void)
+ return 0;
+ }
+
+-static void __exit __ircomm_tty_cleanup(struct ircomm_tty_cb *self)
++static void __exit __ircomm_tty_cleanup(void *_self)
+ {
++ struct ircomm_tty_cb *self = _self;
++
+ IRDA_ASSERT(self != NULL, return;);
+ IRDA_ASSERT(self->magic == IRCOMM_TTY_MAGIC, return;);
+
+@@ -201,7 +203,7 @@ static void __exit ircomm_tty_cleanup(void)
+ return;
+ }
+
+- hashbin_delete(ircomm_tty, (FREE_FUNC) __ircomm_tty_cleanup);
++ hashbin_delete(ircomm_tty, __ircomm_tty_cleanup);
+ put_tty_driver(driver);
+ }
+
+@@ -310,10 +312,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",
@@ -128364,7 +153564,7 @@ index a423770..a6e53a3 100644
port->blocked_open++;
spin_unlock_irqrestore(&port->lock, flags);
-@@ -347,7 +347,7 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
+@@ -347,7 +349,7 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
}
pr_debug("%s(%d):block_til_ready blocking on %s open_count=%d\n",
@@ -128373,7 +153573,7 @@ index a423770..a6e53a3 100644
schedule();
}
-@@ -357,12 +357,12 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
+@@ -357,12 +359,12 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
spin_lock_irqsave(&port->lock, flags);
if (!tty_hung_up_p(filp))
@@ -128388,7 +153588,7 @@ index a423770..a6e53a3 100644
if (!retval)
port->flags |= ASYNC_NORMAL_ACTIVE;
-@@ -432,12 +432,12 @@ static int ircomm_tty_open(struct tty_struct *tty, struct file *filp)
+@@ -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 */
spin_lock_irqsave(&self->port.lock, flags);
@@ -128403,7 +153603,7 @@ index a423770..a6e53a3 100644
/* Not really used by us, but lets do it anyway */
self->port.low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
-@@ -932,7 +932,7 @@ static void ircomm_tty_hangup(struct tty_struct *tty)
+@@ -932,7 +934,7 @@ static void ircomm_tty_hangup(struct tty_struct *tty)
tty_kref_put(port->tty);
}
port->tty = NULL;
@@ -128412,7 +153612,7 @@ index a423770..a6e53a3 100644
spin_unlock_irqrestore(&port->lock, flags);
wake_up_interruptible(&port->open_wait);
-@@ -1279,7 +1279,7 @@ static void ircomm_tty_line_info(struct ircomm_tty_cb *self, struct seq_file *m)
+@@ -1279,7 +1281,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");
@@ -128421,6 +153621,375 @@ index a423770..a6e53a3 100644
seq_printf(m, "Max data size: %d\n", self->max_data_size);
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
+--- 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,
+ struct ias_value *value, void *priv);
+ static void ircomm_tty_start_watchdog_timer(struct ircomm_tty_cb *self,
+ int timeout);
+-static void ircomm_tty_watchdog_timer_expired(void *data);
++static void ircomm_tty_watchdog_timer_expired(unsigned long data);
+
+ static int ircomm_tty_state_idle(struct ircomm_tty_cb *self,
+ IRCOMM_TTY_EVENT event,
+@@ -597,7 +597,7 @@ static void ircomm_tty_start_watchdog_timer(struct ircomm_tty_cb *self,
+ * Called when the connect procedure have taken to much time.
+ *
+ */
+-static void ircomm_tty_watchdog_timer_expired(void *data)
++static void ircomm_tty_watchdog_timer_expired(unsigned long data)
+ {
+ struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) data;
+
+diff --git a/net/irda/irda_device.c b/net/irda/irda_device.c
+index 8567366..7c8aa51 100644
+--- a/net/irda/irda_device.c
++++ b/net/irda/irda_device.c
+@@ -52,12 +52,12 @@
+ #include <net/irda/timer.h>
+ #include <net/irda/wrapper.h>
+
+-static void __irda_task_delete(struct irda_task *task);
++static void __irda_task_delete(void *_task);
+
+ static hashbin_t *dongles = NULL;
+ static hashbin_t *tasks = NULL;
+
+-static void irda_task_timer_expired(void *data);
++static void irda_task_timer_expired(unsigned long data);
+
+ int __init irda_device_init( void)
+ {
+@@ -90,7 +90,7 @@ static void leftover_dongle(void *arg)
+
+ void irda_device_cleanup(void)
+ {
+- hashbin_delete(tasks, (FREE_FUNC) __irda_task_delete);
++ hashbin_delete(tasks, __irda_task_delete);
+
+ hashbin_delete(dongles, leftover_dongle);
+ }
+@@ -159,8 +159,10 @@ int irda_device_is_receiving(struct net_device *dev)
+ return req.ifr_receiving;
+ }
+
+-static void __irda_task_delete(struct irda_task *task)
++static void __irda_task_delete(void *_task)
+ {
++ struct irda_task *task = _task;
++
+ del_timer(&task->timer);
+
+ kfree(task);
+@@ -249,11 +251,11 @@ static int irda_task_kick(struct irda_task *task)
+ * Task time has expired. We now try to execute task (again), and restart
+ * the timer if the task has not finished yet
+ */
+-static void irda_task_timer_expired(void *data)
++static void irda_task_timer_expired(unsigned long data)
+ {
+ struct irda_task *task;
+
+- task = data;
++ task = (struct irda_task *)data;
+
+ irda_task_kick(task);
+ }
+diff --git a/net/irda/iriap.c b/net/irda/iriap.c
+index 4a7ae32a..bfe8e78 100644
+--- a/net/irda/iriap.c
++++ b/net/irda/iriap.c
+@@ -61,7 +61,7 @@ static const char *const ias_charset_types[] __maybe_unused = {
+ static hashbin_t *iriap = NULL;
+ static void *service_handle;
+
+-static void __iriap_close(struct iriap_cb *self);
++static void __iriap_close(void *_self);
+ static int iriap_register_lsap(struct iriap_cb *self, __u8 slsap_sel, int mode);
+ static void iriap_disconnect_indication(void *instance, void *sap,
+ LM_REASON reason, struct sk_buff *skb);
+@@ -76,7 +76,7 @@ static void iriap_connect_confirm(void *instance, void *sap,
+ static int iriap_data_indication(void *instance, void *sap,
+ struct sk_buff *skb);
+
+-static void iriap_watchdog_timer_expired(void *data);
++static void iriap_watchdog_timer_expired(unsigned long data);
+
+ static inline void iriap_start_watchdog_timer(struct iriap_cb *self,
+ int timeout)
+@@ -161,8 +161,8 @@ void iriap_cleanup(void)
+ {
+ irlmp_unregister_service(service_handle);
+
+- hashbin_delete(iriap, (FREE_FUNC) __iriap_close);
+- hashbin_delete(irias_objects, (FREE_FUNC) __irias_delete_object);
++ hashbin_delete(iriap, __iriap_close);
++ hashbin_delete(irias_objects, __irias_delete_object);
+ }
+
+ /*
+@@ -215,8 +215,10 @@ EXPORT_SYMBOL(iriap_open);
+ * Removes (deallocates) the IrIAP instance
+ *
+ */
+-static void __iriap_close(struct iriap_cb *self)
++static void __iriap_close(void *_self)
+ {
++ struct iriap_cb *self = _self;
++
+ IRDA_ASSERT(self != NULL, return;);
+ IRDA_ASSERT(self->magic == IAS_MAGIC, return;);
+
+@@ -942,7 +944,7 @@ void iriap_call_indication(struct iriap_cb *self, struct sk_buff *skb)
+ * Query has taken too long time, so abort
+ *
+ */
+-static void iriap_watchdog_timer_expired(void *data)
++static void iriap_watchdog_timer_expired(unsigned long data)
+ {
+ struct iriap_cb *self = (struct iriap_cb *) data;
+
+diff --git a/net/irda/irias_object.c b/net/irda/irias_object.c
+index 53b86d0..5b884f3 100644
+--- a/net/irda/irias_object.c
++++ b/net/irda/irias_object.c
+@@ -88,8 +88,10 @@ EXPORT_SYMBOL(irias_new_object);
+ * Delete given attribute and deallocate all its memory
+ *
+ */
+-static void __irias_delete_attrib(struct ias_attrib *attrib)
++static void __irias_delete_attrib(void *_attrib)
+ {
++ struct ias_attrib *attrib = _attrib;
++
+ IRDA_ASSERT(attrib != NULL, return;);
+ IRDA_ASSERT(attrib->magic == IAS_ATTRIB_MAGIC, return;);
+
+@@ -101,14 +103,16 @@ static void __irias_delete_attrib(struct ias_attrib *attrib)
+ kfree(attrib);
+ }
+
+-void __irias_delete_object(struct ias_object *obj)
++void __irias_delete_object(void *_obj)
+ {
++ struct ias_object *obj = _obj;
++
+ IRDA_ASSERT(obj != NULL, return;);
+ IRDA_ASSERT(obj->magic == IAS_OBJECT_MAGIC, return;);
+
+ kfree(obj->name);
+
+- hashbin_delete(obj->attribs, (FREE_FUNC) __irias_delete_attrib);
++ hashbin_delete(obj->attribs, __irias_delete_attrib);
+
+ obj->magic = ~IAS_OBJECT_MAGIC;
+
+diff --git a/net/irda/irlan/irlan_client.c b/net/irda/irlan/irlan_client.c
+index c5837a4..518b358 100644
+--- a/net/irda/irlan/irlan_client.c
++++ b/net/irda/irlan/irlan_client.c
+@@ -68,7 +68,7 @@ static void irlan_check_response_param(struct irlan_cb *self, char *param,
+ char *value, int val_len);
+ static void irlan_client_open_ctrl_tsap(struct irlan_cb *self);
+
+-static void irlan_client_kick_timer_expired(void *data)
++static void irlan_client_kick_timer_expired(unsigned long data)
+ {
+ struct irlan_cb *self = (struct irlan_cb *) data;
+
+diff --git a/net/irda/irlap.c b/net/irda/irlap.c
+index 1cde711..d05a5fb 100644
+--- a/net/irda/irlap.c
++++ b/net/irda/irlap.c
+@@ -56,7 +56,7 @@ int sysctl_slot_timeout = SLOT_TIMEOUT * 1000 / HZ;
+ int sysctl_warn_noreply_time = 3;
+
+ extern void irlap_queue_xmit(struct irlap_cb *self, struct sk_buff *skb);
+-static void __irlap_close(struct irlap_cb *self);
++static void __irlap_close(void *_self);
+ static void irlap_init_qos_capabilities(struct irlap_cb *self,
+ struct qos_info *qos_user);
+
+@@ -95,7 +95,7 @@ void irlap_cleanup(void)
+ {
+ IRDA_ASSERT(irlap != NULL, return;);
+
+- hashbin_delete(irlap, (FREE_FUNC) __irlap_close);
++ hashbin_delete(irlap, __irlap_close);
+ }
+
+ /*
+@@ -177,8 +177,10 @@ EXPORT_SYMBOL(irlap_open);
+ * Remove IrLAP and all allocated memory. Stop any pending timers.
+ *
+ */
+-static void __irlap_close(struct irlap_cb *self)
++static void __irlap_close(void *_self)
+ {
++ struct irlap_cb *self = _self;
++
+ IRDA_ASSERT(self != NULL, return;);
+ IRDA_ASSERT(self->magic == LAP_MAGIC, return;);
+
+@@ -482,6 +484,11 @@ void irlap_disconnect_indication(struct irlap_cb *self, LAP_REASON reason)
+ * Start one single discovery operation.
+ *
+ */
++static void irlap_kfree(void *arg)
++{
++ kfree(arg);
++}
++
+ void irlap_discovery_request(struct irlap_cb *self, discovery_t *discovery)
+ {
+ struct irlap_info info;
+@@ -513,7 +520,7 @@ void irlap_discovery_request(struct irlap_cb *self, discovery_t *discovery)
+ /* Check if last discovery request finished in time, or if
+ * it was aborted due to the media busy flag. */
+ if (self->discovery_log != NULL) {
+- hashbin_delete(self->discovery_log, (FREE_FUNC) kfree);
++ hashbin_delete(self->discovery_log, irlap_kfree);
+ self->discovery_log = NULL;
+ }
+
+diff --git a/net/irda/irlap_event.c b/net/irda/irlap_event.c
+index 0e1b4d7..7e39b12 100644
+--- a/net/irda/irlap_event.c
++++ b/net/irda/irlap_event.c
+@@ -163,7 +163,7 @@ static int (*state[])(struct irlap_cb *self, IRLAP_EVENT event,
+ * Poll timer has expired. Normally we must now send a RR frame to the
+ * remote device
+ */
+-static void irlap_poll_timer_expired(void *data)
++static void irlap_poll_timer_expired(unsigned long data)
+ {
+ struct irlap_cb *self = (struct irlap_cb *) data;
+
+diff --git a/net/irda/irlmp.c b/net/irda/irlmp.c
+index 4396459..cbf44c2 100644
+--- a/net/irda/irlmp.c
++++ b/net/irda/irlmp.c
+@@ -125,6 +125,11 @@ int __init irlmp_init(void)
+ * Remove IrLMP layer
+ *
+ */
++void irlmp_kfree(void *arg)
++{
++ kfree(arg);
++}
++
+ void irlmp_cleanup(void)
+ {
+ /* Check for main structure */
+@@ -133,11 +138,11 @@ void irlmp_cleanup(void)
+
+ del_timer(&irlmp->discovery_timer);
+
+- hashbin_delete(irlmp->links, (FREE_FUNC) kfree);
+- hashbin_delete(irlmp->unconnected_lsaps, (FREE_FUNC) kfree);
+- hashbin_delete(irlmp->clients, (FREE_FUNC) kfree);
+- hashbin_delete(irlmp->services, (FREE_FUNC) kfree);
+- hashbin_delete(irlmp->cachelog, (FREE_FUNC) kfree);
++ hashbin_delete(irlmp->links, irlmp_kfree);
++ hashbin_delete(irlmp->unconnected_lsaps, irlmp_kfree);
++ hashbin_delete(irlmp->clients, irlmp_kfree);
++ hashbin_delete(irlmp->services, irlmp_kfree);
++ hashbin_delete(irlmp->cachelog, irlmp_kfree);
+
+ /* De-allocate main structure */
+ kfree(irlmp);
+@@ -204,8 +209,10 @@ EXPORT_SYMBOL(irlmp_open_lsap);
+ *
+ * Remove an instance of LSAP
+ */
+-static void __irlmp_close_lsap(struct lsap_cb *self)
++static void __irlmp_close_lsap(void *_self)
+ {
++ struct lsap_cb *self = _self;
++
+ IRDA_ASSERT(self != NULL, return;);
+ IRDA_ASSERT(self->magic == LMP_LSAP_MAGIC, return;);
+
+@@ -354,7 +361,7 @@ void irlmp_unregister_link(__u32 saddr)
+ /* Final cleanup */
+ del_timer(&link->idle_timer);
+ link->magic = 0;
+- hashbin_delete(link->lsaps, (FREE_FUNC) __irlmp_close_lsap);
++ hashbin_delete(link->lsaps, __irlmp_close_lsap);
+ kfree(link);
+ }
+ }
+diff --git a/net/irda/irlmp_event.c b/net/irda/irlmp_event.c
+index e306cf2..e6e0e90 100644
+--- a/net/irda/irlmp_event.c
++++ b/net/irda/irlmp_event.c
+@@ -165,7 +165,7 @@ void irlmp_do_lap_event(struct lap_cb *self, IRLMP_EVENT event,
+ (*lap_state[self->lap_state]) (self, event, skb);
+ }
+
+-void irlmp_discovery_timer_expired(void *data)
++void irlmp_discovery_timer_expired(unsigned long data)
+ {
+ /* We always cleanup the log (active & passive discovery) */
+ irlmp_do_expiry();
+@@ -176,7 +176,7 @@ void irlmp_discovery_timer_expired(void *data)
+ irlmp_start_discovery_timer(irlmp, sysctl_discovery_timeout * HZ);
+ }
+
+-void irlmp_watchdog_timer_expired(void *data)
++void irlmp_watchdog_timer_expired(unsigned long data)
+ {
+ struct lsap_cb *self = (struct lsap_cb *) data;
+
+@@ -186,7 +186,7 @@ void irlmp_watchdog_timer_expired(void *data)
+ irlmp_do_lsap_event(self, LM_WATCHDOG_TIMEOUT, NULL);
+ }
+
+-void irlmp_idle_timer_expired(void *data)
++void irlmp_idle_timer_expired(unsigned long data)
+ {
+ struct lap_cb *self = (struct lap_cb *) data;
+
+diff --git a/net/irda/irnet/irnet.h b/net/irda/irnet/irnet.h
+index 8d65bb9..677364b 100644
+--- a/net/irda/irnet/irnet.h
++++ b/net/irda/irnet/irnet.h
+@@ -511,7 +511,7 @@ typedef struct irnet_ctrl_channel
+ /* -------------------------- IRDA PART -------------------------- */
+ int irda_irnet_create(irnet_socket *); /* Initialise an IrNET socket */
+ int irda_irnet_connect(irnet_socket *); /* Try to connect over IrDA */
+-void irda_irnet_destroy(irnet_socket *); /* Teardown an IrNET socket */
++void irda_irnet_destroy(void *); /* Teardown an IrNET socket */
+ int irda_irnet_init(void); /* Initialise IrDA part of IrNET */
+ void irda_irnet_cleanup(void); /* Teardown IrDA part of IrNET */
+
+diff --git a/net/irda/irnet/irnet_irda.c b/net/irda/irnet/irnet_irda.c
+index 7f17a80..98575e1 100644
+--- a/net/irda/irnet/irnet_irda.c
++++ b/net/irda/irnet/irnet_irda.c
+@@ -613,8 +613,10 @@ irda_irnet_connect(irnet_socket * self)
+ * Note : this need to be called from a process context.
+ */
+ void
+-irda_irnet_destroy(irnet_socket * self)
++irda_irnet_destroy(void *_self)
+ {
++ irnet_socket *self = _self;
++
+ DENTER(IRDA_SOCK_TRACE, "(self=0x%p)\n", self);
+ if(self == NULL)
+ return;
+@@ -1879,7 +1881,7 @@ irda_irnet_cleanup(void)
+ irnet_destroy_server();
+
+ /* Remove all instances of IrNET socket still present */
+- hashbin_delete(irnet_server.list, (FREE_FUNC) irda_irnet_destroy);
++ hashbin_delete(irnet_server.list, irda_irnet_destroy);
+
+ DEXIT(MODULE_TRACE, "\n");
+ }
diff --git a/net/irda/irproc.c b/net/irda/irproc.c
index b9ac598..f88cc56 100644
--- a/net/irda/irproc.c
@@ -128434,8 +154003,119 @@ index b9ac598..f88cc56 100644
if (proc_irda == NULL)
return;
+diff --git a/net/irda/irttp.c b/net/irda/irttp.c
+index b6ab41d..e2263ce 100644
+--- a/net/irda/irttp.c
++++ b/net/irda/irttp.c
+@@ -42,7 +42,7 @@
+
+ static struct irttp_cb *irttp;
+
+-static void __irttp_close_tsap(struct tsap_cb *self);
++static void __irttp_close_tsap(void *_self);
+
+ static int irttp_data_indication(void *instance, void *sap,
+ struct sk_buff *skb);
+@@ -121,7 +121,7 @@ void irttp_cleanup(void)
+ /*
+ * Delete hashbin and close all TSAP instances in it
+ */
+- hashbin_delete(irttp->tsaps, (FREE_FUNC) __irttp_close_tsap);
++ hashbin_delete(irttp->tsaps, __irttp_close_tsap);
+
+ irttp->magic = 0;
+
+@@ -469,8 +469,10 @@ EXPORT_SYMBOL(irttp_open_tsap);
+ * deallocation of the TSAP, and resetting of the TSAPs values;
+ *
+ */
+-static void __irttp_close_tsap(struct tsap_cb *self)
++static void __irttp_close_tsap(void *_self)
+ {
++ struct tsap_cb *self = _self;
++
+ /* First make sure we're connected. */
+ IRDA_ASSERT(self != NULL, return;);
+ IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+diff --git a/net/irda/timer.c b/net/irda/timer.c
+index f2280f7..c0a006f 100644
+--- a/net/irda/timer.c
++++ b/net/irda/timer.c
+@@ -34,12 +34,12 @@
+
+ extern int sysctl_slot_timeout;
+
+-static void irlap_slot_timer_expired(void* data);
+-static void irlap_query_timer_expired(void* data);
+-static void irlap_final_timer_expired(void* data);
+-static void irlap_wd_timer_expired(void* data);
+-static void irlap_backoff_timer_expired(void* data);
+-static void irlap_media_busy_expired(void* data);
++static void irlap_slot_timer_expired(unsigned long data);
++static void irlap_query_timer_expired(unsigned long data);
++static void irlap_final_timer_expired(unsigned long data);
++static void irlap_wd_timer_expired(unsigned long data);
++static void irlap_backoff_timer_expired(unsigned long data);
++static void irlap_media_busy_expired(unsigned long data);
+
+ void irlap_start_slot_timer(struct irlap_cb *self, int timeout)
+ {
+@@ -138,7 +138,7 @@ void irlmp_stop_idle_timer(struct lap_cb *self)
+ * IrLAP slot timer has expired
+ *
+ */
+-static void irlap_slot_timer_expired(void *data)
++static void irlap_slot_timer_expired(unsigned long data)
+ {
+ struct irlap_cb *self = (struct irlap_cb *) data;
+
+@@ -154,7 +154,7 @@ static void irlap_slot_timer_expired(void *data)
+ * IrLAP query timer has expired
+ *
+ */
+-static void irlap_query_timer_expired(void *data)
++static void irlap_query_timer_expired(unsigned long data)
+ {
+ struct irlap_cb *self = (struct irlap_cb *) data;
+
+@@ -170,7 +170,7 @@ static void irlap_query_timer_expired(void *data)
+ *
+ *
+ */
+-static void irlap_final_timer_expired(void *data)
++static void irlap_final_timer_expired(unsigned long data)
+ {
+ struct irlap_cb *self = (struct irlap_cb *) data;
+
+@@ -186,7 +186,7 @@ static void irlap_final_timer_expired(void *data)
+ *
+ *
+ */
+-static void irlap_wd_timer_expired(void *data)
++static void irlap_wd_timer_expired(unsigned long data)
+ {
+ struct irlap_cb *self = (struct irlap_cb *) data;
+
+@@ -202,7 +202,7 @@ static void irlap_wd_timer_expired(void *data)
+ *
+ *
+ */
+-static void irlap_backoff_timer_expired(void *data)
++static void irlap_backoff_timer_expired(unsigned long data)
+ {
+ struct irlap_cb *self = (struct irlap_cb *) data;
+
+@@ -218,7 +218,7 @@ static void irlap_backoff_timer_expired(void *data)
+ *
+ *
+ */
+-static void irlap_media_busy_expired(void *data)
++static void irlap_media_busy_expired(unsigned long data)
+ {
+ struct irlap_cb *self = (struct irlap_cb *) data;
+
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
-index 20ab7b2..1b7d8bb 100644
+index fc3598a..03a184e 100644
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -685,10 +685,10 @@ static void __iucv_auto_name(struct iucv_sock *iucv)
@@ -128482,7 +154162,7 @@ index f9c9ecb..060751e 100644
return res;
}
diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
-index e253c26..609e848 100644
+index e253c26..eec4c65 100644
--- a/net/l2tp/l2tp_eth.c
+++ b/net/l2tp/l2tp_eth.c
@@ -42,12 +42,12 @@ struct l2tp_eth {
@@ -128504,6 +154184,15 @@ index e253c26..609e848 100644
};
/* via l2tp_session_priv() */
+@@ -90,7 +90,7 @@ static void l2tp_eth_dev_uninit(struct net_device *dev)
+ dev_put(dev);
+ }
+
+-static int l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct l2tp_eth *priv = netdev_priv(dev);
+ struct l2tp_session *session = priv->session;
@@ -98,10 +98,10 @@ static int l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev)
int ret = l2tp_xmit_skb(session, skb, session->hdr_len);
@@ -128597,7 +154286,7 @@ index 1a3c7e0..80f8b0c 100644
goto out;
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
-index c12f348..adb3b48 100644
+index 166a29f..b9bec4b 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -378,7 +378,7 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
@@ -128618,7 +154307,7 @@ index c12f348..adb3b48 100644
local->_oper_chandef = *chandef;
ieee80211_hw_config(local, 0);
}
-@@ -3513,7 +3513,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
+@@ -3035,7 +3035,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
sdata->vif.probe_req_reg--;
}
@@ -128627,7 +154316,7 @@ index c12f348..adb3b48 100644
break;
if (sdata->vif.probe_req_reg == 1)
-@@ -3669,8 +3669,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
+@@ -3190,8 +3190,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
if (chanctx_conf) {
*chandef = sdata->vif.bss_conf.chandef;
ret = 0;
@@ -128638,6 +154327,19 @@ index c12f348..adb3b48 100644
sdata->vif.type == NL80211_IFTYPE_MONITOR) {
if (local->use_chanctx)
*chandef = local->monitor_chandef;
+diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c
+index 3e24d0d..be640c0 100644
+--- a/net/mac80211/debugfs.c
++++ b/net/mac80211/debugfs.c
+@@ -91,7 +91,7 @@ static const struct file_operations reset_ops = {
+ };
+ #endif
+
+-static const char *hw_flag_names[] = {
++static const char * const hw_flag_names[] = {
+ #define FLAG(F) [IEEE80211_HW_##F] = #F
+ FLAG(HAS_RATE_CONTROL),
+ FLAG(RX_INCLUDES_FCS),
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c
index 7961e7d..eea148f 100644
--- a/net/mac80211/debugfs_key.c
@@ -128661,7 +154363,7 @@ index 7961e7d..eea148f 100644
(u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24),
(u8)(pn >> 16), (u8)(pn >> 8), (u8)pn);
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
-index 6837a46..f8aaf7d 100644
+index f006f4a..884f09e 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -30,6 +30,7 @@
@@ -128672,7 +154374,7 @@ index 6837a46..f8aaf7d 100644
#include "key.h"
#include "sta_info.h"
#include "debug.h"
-@@ -1111,7 +1112,7 @@ struct ieee80211_local {
+@@ -1107,7 +1108,7 @@ struct ieee80211_local {
/* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
spinlock_t queue_stop_reason_lock;
@@ -128769,10 +154471,10 @@ index 7a2b791..3297152 100644
mutex_lock(&local->iflist_mtx);
list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
diff --git a/net/mac80211/key.c b/net/mac80211/key.c
-index 44388d6..a052880 100644
+index 5e5bc59..e033047 100644
--- a/net/mac80211/key.c
+++ b/net/mac80211/key.c
-@@ -914,7 +914,7 @@ void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
+@@ -962,7 +962,7 @@ void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
case WLAN_CIPHER_SUITE_GCMP_256:
BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) !=
offsetof(typeof(*seq), gcmp));
@@ -128781,7 +154483,7 @@ index 44388d6..a052880 100644
seq->ccmp.pn[5] = pn64;
seq->ccmp.pn[4] = pn64 >> 8;
seq->ccmp.pn[3] = pn64 >> 16;
-@@ -1014,7 +1014,7 @@ void ieee80211_set_key_tx_seq(struct ieee80211_key_conf *keyconf,
+@@ -1062,7 +1062,7 @@ void ieee80211_set_key_tx_seq(struct ieee80211_key_conf *keyconf,
((u64)seq->ccmp.pn[2] << 24) |
((u64)seq->ccmp.pn[1] << 32) |
((u64)seq->ccmp.pn[0] << 40);
@@ -128791,7 +154493,7 @@ index 44388d6..a052880 100644
default:
WARN_ON(1);
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
-index 175ffcf..2212fd2 100644
+index 8190bf27..a428476 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)
@@ -128839,10 +154541,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 67066d0..9d015cc 100644
+index 23ed038..cd63e86 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
-@@ -348,7 +348,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
+@@ -349,7 +349,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 *));
@@ -128852,7 +154554,7 @@ index 67066d0..9d015cc 100644
goto free;
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
-index bdc224d..11c229f 100644
+index 3311ce0..2b1323c 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -2825,7 +2825,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
@@ -128865,10 +154567,10 @@ index bdc224d..11c229f 100644
crypto_hdr[1] = pn >> 8;
crypto_hdr[4] = pn >> 16;
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
-index 33344f5..2e15b8f 100644
+index 58f58bd..8d39508 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
-@@ -1758,7 +1758,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -1761,7 +1761,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
bool suspended = local->suspended;
/* nothing to do if HW shouldn't run */
@@ -128877,16 +154579,16 @@ index 33344f5..2e15b8f 100644
goto wake_up;
#ifdef CONFIG_PM
-@@ -2051,7 +2051,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
- local->in_reconfig = false;
- barrier();
+@@ -2064,7 +2064,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+ mutex_unlock(&local->mtx);
+ }
- if (local->monitors == local->open_count && local->monitors > 0)
+ if (local->monitors == local_read(&local->open_count) && local->monitors > 0)
ieee80211_add_virtual_monitor(local);
/*
-@@ -2085,7 +2085,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -2098,7 +2098,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
* If this is for hw restart things are still running.
* We may want to change that later, however.
*/
@@ -128895,7 +154597,7 @@ index 33344f5..2e15b8f 100644
drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART);
if (!suspended)
-@@ -2099,7 +2099,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -2112,7 +2112,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
ieee80211_flush_completed_scan(local, false);
@@ -128985,10 +154687,10 @@ index 7079cd3..c299f08 100644
/* defaults per 802.15.4-2011 */
wpan_dev->min_be = 3;
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
-index 881bc20..a01db58 100644
+index 0b80a71..8b0a639 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
-@@ -831,7 +831,7 @@ static int mpls_dev_sysctl_register(struct net_device *dev,
+@@ -871,7 +871,7 @@ static int mpls_dev_sysctl_register(struct net_device *dev,
struct mpls_dev *mdev)
{
char path[sizeof("net/mpls/conf/") + IFNAMSIZ];
@@ -128997,7 +154699,25 @@ index 881bc20..a01db58 100644
int i;
table = kmemdup(&mpls_dev_table, sizeof(mpls_dev_table), GFP_KERNEL);
-@@ -1492,7 +1492,7 @@ static int mpls_platform_labels(struct ctl_table *table, int write,
+@@ -954,7 +954,7 @@ static void mpls_ifdown(struct net_device *dev, int event)
+ /* fall through */
+ case NETDEV_CHANGE:
+ nh->nh_flags |= RTNH_F_LINKDOWN;
+- ACCESS_ONCE(rt->rt_nhn_alive) = rt->rt_nhn_alive - 1;
++ ACCESS_ONCE_RW(rt->rt_nhn_alive) = rt->rt_nhn_alive - 1;
+ break;
+ }
+ if (event == NETDEV_UNREGISTER)
+@@ -995,7 +995,7 @@ static void mpls_ifup(struct net_device *dev, unsigned int nh_flags)
+ nh->nh_flags &= ~nh_flags;
+ } endfor_nexthops(rt);
+
+- ACCESS_ONCE(rt->rt_nhn_alive) = alive;
++ ACCESS_ONCE_RW(rt->rt_nhn_alive) = alive;
+ }
+
+ return;
+@@ -1621,7 +1621,7 @@ static int mpls_platform_labels(struct ctl_table *table, int write,
struct net *net = table->data;
int platform_labels = net->mpls.platform_labels;
int ret;
@@ -129006,7 +154726,7 @@ index 881bc20..a01db58 100644
.procname = table->procname,
.data = &platform_labels,
.maxlen = sizeof(int),
-@@ -1522,7 +1522,7 @@ static const struct ctl_table mpls_table[] = {
+@@ -1651,7 +1651,7 @@ static const struct ctl_table mpls_table[] = {
static int mpls_net_init(struct net *net)
{
@@ -129016,10 +154736,10 @@ index 881bc20..a01db58 100644
net->mpls.platform_labels = 0;
net->mpls.platform_label = NULL;
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
-index 4692782..24f2db1 100644
+index 95e757c..30e3a16 100644
--- a/net/netfilter/Kconfig
+++ b/net/netfilter/Kconfig
-@@ -1128,6 +1128,16 @@ config NETFILTER_XT_MATCH_ESP
+@@ -1150,6 +1150,16 @@ config NETFILTER_XT_MATCH_ESP
To compile it as a module, choose M here. If unsure, say N.
@@ -129037,10 +154757,10 @@ index 4692782..24f2db1 100644
tristate '"hashlimit" match support'
depends on IP6_NF_IPTABLES || IP6_NF_IPTABLES=n
diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
-index 7638c36..faf3ac2 100644
+index 6913454..43686aa 100644
--- a/net/netfilter/Makefile
+++ b/net/netfilter/Makefile
-@@ -138,6 +138,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DEVGROUP) += xt_devgroup.o
+@@ -145,6 +145,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DEVGROUP) += xt_devgroup.o
obj-$(CONFIG_NETFILTER_XT_MATCH_DSCP) += xt_dscp.o
obj-$(CONFIG_NETFILTER_XT_MATCH_ECN) += xt_ecn.o
obj-$(CONFIG_NETFILTER_XT_MATCH_ESP) += xt_esp.o
@@ -129049,10 +154769,27 @@ index 7638c36..faf3ac2 100644
obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o
obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o
diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
-index 54f3d7c..fba57f5 100644
+index 95db43f..ed368dc 100644
--- a/net/netfilter/ipset/ip_set_core.c
+++ b/net/netfilter/ipset/ip_set_core.c
-@@ -1422,7 +1422,7 @@ ip_set_dump(struct sock *ctnl, struct sk_buff *skb,
+@@ -324,7 +324,6 @@ ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr)
+ }
+ EXPORT_SYMBOL_GPL(ip_set_get_ipaddr6);
+
+-typedef void (*destroyer)(void *);
+ /* ipset data extension types, in size order */
+
+ const struct ip_set_ext_type ip_set_extensions[] = {
+@@ -350,7 +349,7 @@ const struct ip_set_ext_type ip_set_extensions[] = {
+ .flag = IPSET_FLAG_WITH_COMMENT,
+ .len = sizeof(struct ip_set_comment),
+ .align = __alignof__(struct ip_set_comment),
+- .destroy = (destroyer) ip_set_comment_free,
++ .destroy = ip_set_comment_free,
+ },
+ };
+ EXPORT_SYMBOL_GPL(ip_set_extensions);
+@@ -1414,7 +1413,7 @@ static int ip_set_dump(struct net *net, struct sock *ctnl, struct sk_buff *skb,
return -IPSET_ERR_PROTOCOL;
{
@@ -129061,7 +154798,7 @@ index 54f3d7c..fba57f5 100644
.dump = ip_set_dump_start,
.done = ip_set_dump_done,
};
-@@ -1997,7 +1997,7 @@ done:
+@@ -1983,7 +1982,7 @@ done:
return ret;
}
@@ -129283,93 +155020,19 @@ 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 3cb3cb8..c9fcad80 100644
+index f60b4fd..739155b 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
-@@ -66,6 +66,21 @@ EXPORT_SYMBOL_GPL(nf_conntrack_locks);
- __cacheline_aligned_in_smp DEFINE_SPINLOCK(nf_conntrack_expect_lock);
- EXPORT_SYMBOL_GPL(nf_conntrack_expect_lock);
+@@ -1581,7 +1581,7 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls)
+ }
+ EXPORT_SYMBOL_GPL(nf_ct_alloc_hashtable);
-+static __read_mostly spinlock_t nf_conntrack_locks_all_lock;
-+static __read_mostly bool nf_conntrack_locks_all;
-+
-+void nf_conntrack_lock(spinlock_t *lock) __acquires(lock)
-+{
-+ spin_lock(lock);
-+ while (unlikely(nf_conntrack_locks_all)) {
-+ spin_unlock(lock);
-+ spin_lock(&nf_conntrack_locks_all_lock);
-+ spin_unlock(&nf_conntrack_locks_all_lock);
-+ spin_lock(lock);
-+ }
-+}
-+EXPORT_SYMBOL_GPL(nf_conntrack_lock);
-+
- static void nf_conntrack_double_unlock(unsigned int h1, unsigned int h2)
+-int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp)
++int nf_conntrack_set_hashsize(const char *val, const struct kernel_param *kp)
{
- h1 %= CONNTRACK_LOCKS;
-@@ -82,12 +97,12 @@ static bool nf_conntrack_double_lock(struct net *net, unsigned int h1,
- h1 %= CONNTRACK_LOCKS;
- h2 %= CONNTRACK_LOCKS;
- if (h1 <= h2) {
-- spin_lock(&nf_conntrack_locks[h1]);
-+ nf_conntrack_lock(&nf_conntrack_locks[h1]);
- if (h1 != h2)
- spin_lock_nested(&nf_conntrack_locks[h2],
- SINGLE_DEPTH_NESTING);
- } else {
-- spin_lock(&nf_conntrack_locks[h2]);
-+ nf_conntrack_lock(&nf_conntrack_locks[h2]);
- spin_lock_nested(&nf_conntrack_locks[h1],
- SINGLE_DEPTH_NESTING);
- }
-@@ -102,16 +117,19 @@ static void nf_conntrack_all_lock(void)
- {
- int i;
-
-- for (i = 0; i < CONNTRACK_LOCKS; i++)
-- spin_lock_nested(&nf_conntrack_locks[i], i);
--}
-+ spin_lock(&nf_conntrack_locks_all_lock);
-+ nf_conntrack_locks_all = true;
-
--static void nf_conntrack_all_unlock(void)
--{
-- int i;
--
-- for (i = 0; i < CONNTRACK_LOCKS; i++)
-+ for (i = 0; i < CONNTRACK_LOCKS; i++) {
-+ spin_lock(&nf_conntrack_locks[i]);
- spin_unlock(&nf_conntrack_locks[i]);
-+ }
-+}
-+
-+static void nf_conntrack_all_unlock(void)
-+{
-+ nf_conntrack_locks_all = false;
-+ spin_unlock(&nf_conntrack_locks_all_lock);
- }
-
- unsigned int nf_conntrack_htable_size __read_mostly;
-@@ -757,7 +775,7 @@ restart:
- hash = hash_bucket(_hash, net);
- for (; i < net->ct.htable_size; i++) {
- lockp = &nf_conntrack_locks[hash % CONNTRACK_LOCKS];
-- spin_lock(lockp);
-+ nf_conntrack_lock(lockp);
- if (read_seqcount_retry(&net->ct.generation, sequence)) {
- spin_unlock(lockp);
- goto restart;
-@@ -1382,7 +1400,7 @@ get_next_corpse(struct net *net, int (*iter)(struct nf_conn *i, void *data),
- for (; *bucket < net->ct.htable_size; (*bucket)++) {
- lockp = &nf_conntrack_locks[*bucket % CONNTRACK_LOCKS];
- local_bh_disable();
-- spin_lock(lockp);
-+ nf_conntrack_lock(lockp);
- if (*bucket < net->ct.htable_size) {
- hlist_nulls_for_each_entry(h, n, &net->ct.hash[*bucket], hnnode) {
- if (NF_CT_DIRECTION(h) != IP_CT_DIR_ORIGINAL)
-@@ -1755,6 +1773,10 @@ void nf_conntrack_init_end(void)
+ int i, bucket, rc;
+ unsigned int hashsize, old_size;
+@@ -1778,6 +1778,10 @@ void nf_conntrack_init_end(void)
#define DYING_NULLS_VAL ((1<<30)+1)
#define TEMPLATE_NULLS_VAL ((1<<30)+2)
@@ -129380,7 +155043,7 @@ index 3cb3cb8..c9fcad80 100644
int nf_conntrack_init_net(struct net *net)
{
int ret = -ENOMEM;
-@@ -1779,7 +1801,11 @@ int nf_conntrack_init_net(struct net *net)
+@@ -1802,7 +1806,11 @@ int nf_conntrack_init_net(struct net *net)
if (!net->ct.stat)
goto err_pcpu_lists;
@@ -129406,7 +155069,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 bd9d315..fbd2fb7 100644
+index 3b40ec5..fbd2fb7 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[] = {
@@ -129418,29 +155081,11 @@ index bd9d315..fbd2fb7 100644
table = kmemdup(helper_sysctl_table, sizeof(helper_sysctl_table),
GFP_KERNEL);
-@@ -425,7 +425,7 @@ static void __nf_conntrack_helper_unregister(struct nf_conntrack_helper *me,
- }
- local_bh_disable();
- for (i = 0; i < net->ct.htable_size; i++) {
-- spin_lock(&nf_conntrack_locks[i % CONNTRACK_LOCKS]);
-+ nf_conntrack_lock(&nf_conntrack_locks[i % CONNTRACK_LOCKS]);
- if (i < net->ct.htable_size) {
- hlist_nulls_for_each_entry(h, nn, &net->ct.hash[i], hnnode)
- unhelp(h, me);
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
-index 9f52729..7e7a2c6 100644
+index 355e855..4973252 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
-@@ -840,7 +840,7 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
- for (; cb->args[0] < net->ct.htable_size; cb->args[0]++) {
- restart:
- lockp = &nf_conntrack_locks[cb->args[0] % CONNTRACK_LOCKS];
-- spin_lock(lockp);
-+ nf_conntrack_lock(lockp);
- if (cb->args[0] >= net->ct.htable_size) {
- spin_unlock(lockp);
- goto out;
-@@ -1184,10 +1184,11 @@ ctnetlink_get_conntrack(struct sock *ctnl, struct sk_buff *skb,
+@@ -1182,10 +1182,11 @@ static int ctnetlink_get_conntrack(struct net *net, struct sock *ctnl,
int err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129453,7 +155098,7 @@ index 9f52729..7e7a2c6 100644
if (cda[CTA_MARK] && cda[CTA_MARK_MASK]) {
struct ctnetlink_filter *filter;
-@@ -1196,9 +1197,9 @@ ctnetlink_get_conntrack(struct sock *ctnl, struct sk_buff *skb,
+@@ -1194,9 +1195,9 @@ static int ctnetlink_get_conntrack(struct net *net, struct sock *ctnl,
if (IS_ERR(filter))
return PTR_ERR(filter);
@@ -129465,8 +155110,8 @@ index 9f52729..7e7a2c6 100644
}
err = ctnetlink_parse_zone(cda[CTA_ZONE], &zone);
-@@ -1336,7 +1337,7 @@ ctnetlink_get_ct_dying(struct sock *ctnl, struct sk_buff *skb,
- const struct nlattr * const cda[])
+@@ -1334,7 +1335,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) {
- struct netlink_dump_control c = {
@@ -129474,8 +155119,8 @@ index 9f52729..7e7a2c6 100644
.dump = ctnetlink_dump_dying,
.done = ctnetlink_done_list,
};
-@@ -1358,7 +1359,7 @@ ctnetlink_get_ct_unconfirmed(struct sock *ctnl, struct sk_buff *skb,
- const struct nlattr * const cda[])
+@@ -1356,7 +1357,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) {
- struct netlink_dump_control c = {
@@ -129483,8 +155128,8 @@ index 9f52729..7e7a2c6 100644
.dump = ctnetlink_dump_unconfirmed,
.done = ctnetlink_done_list,
};
-@@ -2040,7 +2041,7 @@ ctnetlink_stat_ct_cpu(struct sock *ctnl, struct sk_buff *skb,
- const struct nlattr * const cda[])
+@@ -2037,7 +2038,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) {
- struct netlink_dump_control c = {
@@ -129492,7 +155137,7 @@ index 9f52729..7e7a2c6 100644
.dump = ctnetlink_ct_stat_cpu_dump,
};
return netlink_dump_start(ctnl, skb, nlh, &c);
-@@ -2741,7 +2742,7 @@ static int ctnetlink_dump_exp_ct(struct sock *ctnl, struct sk_buff *skb,
+@@ -2737,7 +2738,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;
@@ -129501,7 +155146,7 @@ index 9f52729..7e7a2c6 100644
.dump = ctnetlink_exp_ct_dump_table,
.done = ctnetlink_exp_done,
};
-@@ -2760,9 +2761,8 @@ static int ctnetlink_dump_exp_ct(struct sock *ctnl, struct sk_buff *skb,
+@@ -2756,9 +2757,8 @@ static int ctnetlink_dump_exp_ct(struct net *net, struct sock *ctnl,
return -ENOENT;
ct = nf_ct_tuplehash_to_ctrack(h);
@@ -129512,17 +155157,17 @@ index 9f52729..7e7a2c6 100644
nf_ct_put(ct);
return err;
-@@ -2786,7 +2786,7 @@ ctnetlink_get_expect(struct sock *ctnl, struct sk_buff *skb,
+@@ -2780,7 +2780,7 @@ static int ctnetlink_get_expect(struct net *net, struct sock *ctnl,
if (cda[CTA_EXPECT_MASTER])
- return ctnetlink_dump_exp_ct(ctnl, skb, nlh, cda);
+ return ctnetlink_dump_exp_ct(net, ctnl, skb, nlh, cda);
else {
- struct netlink_dump_control c = {
+ static struct netlink_dump_control c = {
.dump = ctnetlink_exp_dump_table,
.done = ctnetlink_exp_done,
};
-@@ -3248,7 +3248,7 @@ ctnetlink_stat_exp_cpu(struct sock *ctnl, struct sk_buff *skb,
- const struct nlattr * const cda[])
+@@ -3238,7 +3238,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) {
- struct netlink_dump_control c = {
@@ -129544,10 +155189,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 1fb3cac..a35219b 100644
+index 0f1a45b..a6ce792 100644
--- a/net/netfilter/nf_conntrack_standalone.c
+++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -497,7 +497,7 @@ static struct ctl_table nf_ct_netfilter_table[] = {
+@@ -504,7 +504,7 @@ static struct ctl_table nf_ct_netfilter_table[] = {
static int nf_conntrack_standalone_init_sysctl(struct net *net)
{
@@ -129601,6 +155246,32 @@ index a5d41df..1ff49be 100644
mutex_unlock(&nf_log_mutex);
}
+diff --git a/net/netfilter/nf_nat_ftp.c b/net/netfilter/nf_nat_ftp.c
+index e84a578..d76afaf 100644
+--- a/net/netfilter/nf_nat_ftp.c
++++ b/net/netfilter/nf_nat_ftp.c
+@@ -134,7 +134,7 @@ static int __init nf_nat_ftp_init(void)
+ }
+
+ /* Prior to 2.6.11, we had a ports param. No longer, but don't break users. */
+-static int warn_set(const char *val, struct kernel_param *kp)
++static int warn_set(const char *val, const struct kernel_param *kp)
+ {
+ printk(KERN_INFO KBUILD_MODNAME
+ ": kernel >= 2.6.10 only uses 'ports' for conntrack modules\n");
+diff --git a/net/netfilter/nf_nat_irc.c b/net/netfilter/nf_nat_irc.c
+index 1fb2258..8039bcd 100644
+--- a/net/netfilter/nf_nat_irc.c
++++ b/net/netfilter/nf_nat_irc.c
+@@ -107,7 +107,7 @@ static int __init nf_nat_irc_init(void)
+ }
+
+ /* Prior to 2.6.11, we had a ports param. No longer, but don't break users. */
+-static int warn_set(const char *val, struct kernel_param *kp)
++static int warn_set(const char *val, const struct kernel_param *kp)
+ {
+ printk(KERN_INFO KBUILD_MODNAME
+ ": kernel >= 2.6.10 only uses 'ports' for conntrack modules\n");
diff --git a/net/netfilter/nf_sockopt.c b/net/netfilter/nf_sockopt.c
index c68c1e5..8b5d670 100644
--- a/net/netfilter/nf_sockopt.c
@@ -129624,10 +155295,10 @@ 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 2cb429d..77adda0 100644
+index 2011977..ba46f29 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 sock *nlsk, struct sk_buff *skb,
+@@ -555,7 +555,7 @@ static int nf_tables_gettable(struct net *net, struct sock *nlsk,
int err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129636,7 +155307,7 @@ index 2cb429d..77adda0 100644
.dump = nf_tables_dump_tables,
};
return netlink_dump_start(nlsk, skb, nlh, &c);
-@@ -1112,7 +1112,7 @@ static int nf_tables_getchain(struct sock *nlsk, struct sk_buff *skb,
+@@ -1109,7 +1109,7 @@ static int nf_tables_getchain(struct net *net, struct sock *nlsk,
int err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129645,7 +155316,7 @@ index 2cb429d..77adda0 100644
.dump = nf_tables_dump_chains,
};
return netlink_dump_start(nlsk, skb, nlh, &c);
-@@ -1943,7 +1943,7 @@ static int nf_tables_getrule(struct sock *nlsk, struct sk_buff *skb,
+@@ -1935,7 +1935,7 @@ static int nf_tables_getrule(struct net *net, struct sock *nlsk,
int err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129654,7 +155325,7 @@ index 2cb429d..77adda0 100644
.dump = nf_tables_dump_rules,
};
return netlink_dump_start(nlsk, skb, nlh, &c);
-@@ -2630,7 +2630,7 @@ static int nf_tables_getset(struct sock *nlsk, struct sk_buff *skb,
+@@ -2622,7 +2622,7 @@ static int nf_tables_getset(struct net *net, struct sock *nlsk,
return err;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129663,7 +155334,7 @@ index 2cb429d..77adda0 100644
.dump = nf_tables_dump_sets,
.done = nf_tables_dump_sets_done,
};
-@@ -2641,9 +2641,8 @@ static int nf_tables_getset(struct sock *nlsk, struct sk_buff *skb,
+@@ -2633,9 +2633,8 @@ static int nf_tables_getset(struct net *net, struct sock *nlsk,
return -ENOMEM;
*ctx_dump = ctx;
@@ -129674,7 +155345,7 @@ index 2cb429d..77adda0 100644
}
/* Only accept unspec with dump */
-@@ -3222,7 +3221,7 @@ static int nf_tables_getsetelem(struct sock *nlsk, struct sk_buff *skb,
+@@ -3226,7 +3225,7 @@ static int nf_tables_getsetelem(struct net *net, struct sock *nlsk,
return -ENOENT;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129684,10 +155355,10 @@ index 2cb429d..77adda0 100644
};
return netlink_dump_start(nlsk, skb, nlh, &c);
diff --git a/net/netfilter/nfnetlink_acct.c b/net/netfilter/nfnetlink_acct.c
-index fefbf5f..996b6ef 100644
+index 5274b04..12fded1 100644
--- a/net/netfilter/nfnetlink_acct.c
+++ b/net/netfilter/nfnetlink_acct.c
-@@ -263,10 +263,11 @@ nfnl_acct_get(struct sock *nfnl, struct sk_buff *skb,
+@@ -261,10 +261,11 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl,
char *acct_name;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129700,7 +155371,7 @@ index fefbf5f..996b6ef 100644
if (tb[NFACCT_FILTER]) {
struct nfacct_filter *filter;
-@@ -275,9 +276,9 @@ nfnl_acct_get(struct sock *nfnl, struct sk_buff *skb,
+@@ -273,9 +274,9 @@ static int nfnl_acct_get(struct net *net, struct sock *nfnl,
if (IS_ERR(filter))
return PTR_ERR(filter);
@@ -129713,10 +155384,10 @@ index fefbf5f..996b6ef 100644
if (!tb[NFACCT_NAME])
diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
-index 54330fb..77d3fb1 100644
+index e924e95..1e2e233 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
-@@ -510,7 +510,7 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
+@@ -510,7 +510,7 @@ static int nfnl_cthelper_get(struct net *net, struct sock *nfnl,
bool tuple_set = false;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129726,10 +155397,10 @@ index 54330fb..77d3fb1 100644
};
return netlink_dump_start(nfnl, skb, nlh, &c);
diff --git a/net/netfilter/nfnetlink_cttimeout.c b/net/netfilter/nfnetlink_cttimeout.c
-index c7a2d0e..272225e 100644
+index 2671b9d..e518410 100644
--- a/net/netfilter/nfnetlink_cttimeout.c
+++ b/net/netfilter/nfnetlink_cttimeout.c
-@@ -250,7 +250,7 @@ cttimeout_get_timeout(struct sock *ctnl, struct sk_buff *skb,
+@@ -248,7 +248,7 @@ static int cttimeout_get_timeout(struct net *net, struct sock *ctnl,
struct ctnl_timeout *cur;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -129739,7 +155410,7 @@ index c7a2d0e..272225e 100644
};
return netlink_dump_start(ctnl, skb, nlh, &c);
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
-index 740cce4..4672d73 100644
+index 8ca9320..e509290 100644
--- a/net/netfilter/nfnetlink_log.c
+++ b/net/netfilter/nfnetlink_log.c
@@ -85,7 +85,7 @@ static int nfnl_log_net_id __read_mostly;
@@ -129751,7 +155422,7 @@ index 740cce4..4672d73 100644
};
static struct nfnl_log_net *nfnl_log_pernet(struct net *net)
-@@ -575,7 +575,7 @@ __build_packet_message(struct nfnl_log_net *log,
+@@ -571,7 +571,7 @@ __build_packet_message(struct nfnl_log_net *log,
/* global sequence number */
if ((inst->flags & NFULNL_CFG_F_SEQ_GLOBAL) &&
nla_put_be32(inst->skb, NFULA_SEQ_GLOBAL,
@@ -129761,7 +155432,7 @@ index 740cce4..4672d73 100644
if (ct && nfnl_ct->build(inst->skb, ct, ctinfo,
diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c
-index 9c8fab0..5080c7c 100644
+index 454841b..c8868616 100644
--- a/net/netfilter/nft_compat.c
+++ b/net/netfilter/nft_compat.c
@@ -322,14 +322,7 @@ static void nft_match_eval(const struct nft_expr *expr,
@@ -129780,6 +155451,49 @@ index 9c8fab0..5080c7c 100644
}
static const struct nla_policy nft_match_policy[NFTA_MATCH_MAX + 1] = {
+diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c
+index 29d2c31..bf2c6a0 100644
+--- a/net/netfilter/xt_IDLETIMER.c
++++ b/net/netfilter/xt_IDLETIMER.c
+@@ -41,19 +41,13 @@
+ #include <linux/workqueue.h>
+ #include <linux/sysfs.h>
+
+-struct idletimer_tg_attr {
+- struct attribute attr;
+- ssize_t (*show)(struct kobject *kobj,
+- struct attribute *attr, char *buf);
+-};
+-
+ struct idletimer_tg {
+ struct list_head entry;
+ struct timer_list timer;
+ struct work_struct work;
+
+ struct kobject *kobj;
+- struct idletimer_tg_attr attr;
++ struct device_attribute attr;
+
+ unsigned int refcnt;
+ };
+@@ -78,7 +72,7 @@ struct idletimer_tg *__idletimer_tg_find_by_label(const char *label)
+ return NULL;
+ }
+
+-static ssize_t idletimer_tg_show(struct kobject *kobj, struct attribute *attr,
++static ssize_t idletimer_tg_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+ {
+ struct idletimer_tg *timer;
+@@ -86,7 +80,7 @@ static ssize_t idletimer_tg_show(struct kobject *kobj, struct attribute *attr,
+
+ mutex_lock(&list_mutex);
+
+- timer = __idletimer_tg_find_by_label(attr->name);
++ timer = __idletimer_tg_find_by_label(attr->attr.name);
+ if (timer)
+ expires = timer->timer.expires;
+
diff --git a/net/netfilter/xt_gradm.c b/net/netfilter/xt_gradm.c
new file mode 100644
index 0000000..a7cb915
@@ -129903,7 +155617,7 @@ index 11de55e..f25e448 100644
return 0;
}
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
-index 59651af..45b9a6e 100644
+index f1ffb34..4e5a217 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -287,7 +287,7 @@ static void netlink_overrun(struct sock *sk)
@@ -129915,7 +155629,7 @@ index 59651af..45b9a6e 100644
}
static void netlink_rcv_wake(struct sock *sk)
-@@ -2876,7 +2876,9 @@ errout_skb:
+@@ -2877,7 +2877,9 @@ errout_skb:
int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
const struct nlmsghdr *nlh,
@@ -129926,7 +155640,7 @@ index 59651af..45b9a6e 100644
{
struct netlink_callback *cb;
struct sock *sk;
-@@ -2908,7 +2910,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
+@@ -2909,7 +2911,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
goto error_unlock;
}
/* add reference of module which cb->dump belongs to */
@@ -129935,7 +155649,7 @@ index 59651af..45b9a6e 100644
ret = -EPROTONOSUPPORT;
goto error_unlock;
}
-@@ -2918,8 +2920,8 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
+@@ -2920,8 +2922,8 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
cb->dump = control->dump;
cb->done = control->done;
cb->nlh = nlh;
@@ -129946,7 +155660,7 @@ index 59651af..45b9a6e 100644
cb->min_dump_alloc = control->min_dump_alloc;
cb->skb = skb;
-@@ -3183,7 +3185,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v)
+@@ -3188,7 +3190,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),
@@ -129969,10 +155683,10 @@ index 3ee63a3cf..d6df4d8 100644
};
return netlink_dump_start(net->diag_nlsk, skb, h, &c);
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
-index bc0e504..9a71c81 100644
+index f830326..162f6da 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
-@@ -573,26 +573,24 @@ static int genl_family_rcv_msg(struct genl_family *family,
+@@ -587,28 +587,26 @@ static int genl_family_rcv_msg(struct genl_family *family,
return -EOPNOTSUPP;
if (!family->parallel_ops) {
@@ -129981,6 +155695,7 @@ index bc0e504..9a71c81 100644
- /* we have const, but the netlink API doesn't */
- .data = (void *)ops,
+ static struct netlink_dump_control c = {
+ .start = genl_lock_start,
.dump = genl_lock_dumpit,
.done = genl_lock_done,
};
@@ -129996,6 +155711,7 @@ index bc0e504..9a71c81 100644
- struct netlink_dump_control c = {
- .module = family->module,
+ netlink_dump_control_no_const c = {
+ .start = ops->start,
.dump = ops->dumpit,
.done = ops->done,
};
@@ -130005,46 +155721,63 @@ index bc0e504..9a71c81 100644
}
return rc;
-diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
-index c88d0f2..2d59df5 100644
---- a/net/openvswitch/actions.c
-+++ b/net/openvswitch/actions.c
-@@ -1160,17 +1160,26 @@ int ovs_execute_actions(struct datapath *dp, struct sk_buff *skb,
- const struct sw_flow_actions *acts,
- struct sw_flow_key *key)
- {
-- int level = this_cpu_read(exec_actions_level);
-- int err;
-+ static const int ovs_recursion_limit = 5;
-+ int err, level;
-+
-+ level = __this_cpu_inc_return(exec_actions_level);
-+ if (unlikely(level > ovs_recursion_limit)) {
-+ net_crit_ratelimited("ovs: recursion limit reached on datapath %s, probable configuration error\n",
-+ ovs_dp_name(dp));
-+ kfree_skb(skb);
-+ err = -ENETDOWN;
-+ goto out;
-+ }
-
-- this_cpu_inc(exec_actions_level);
- err = do_execute_actions(dp, skb, key,
- acts->actions, acts->actions_len);
+diff --git a/net/openvswitch/vport-geneve.c b/net/openvswitch/vport-geneve.c
+index 30ab8e1..00ff20a 100644
+--- a/net/openvswitch/vport-geneve.c
++++ b/net/openvswitch/vport-geneve.c
+@@ -111,12 +111,17 @@ static struct vport *geneve_create(const struct vport_parms *parms)
+ return ovs_netdev_link(vport, parms->name);
+ }
-- if (!level)
-+ if (level == 1)
- process_deferred_actions(dp);
++static netdev_tx_t geneve_send(struct sk_buff *skb)
++{
++ return dev_queue_xmit(skb);
++}
++
+ static struct vport_ops ovs_geneve_vport_ops = {
+ .type = OVS_VPORT_TYPE_GENEVE,
+ .create = geneve_create,
+ .destroy = ovs_netdev_tunnel_destroy,
+ .get_options = geneve_get_options,
+- .send = dev_queue_xmit,
++ .send = geneve_send,
+ };
-- this_cpu_dec(exec_actions_level);
-+out:
-+ __this_cpu_dec(exec_actions_level);
- return err;
+ static int __init ovs_geneve_tnl_init(void)
+diff --git a/net/openvswitch/vport-gre.c b/net/openvswitch/vport-gre.c
+index 7f8897f..15b61a2 100644
+--- a/net/openvswitch/vport-gre.c
++++ b/net/openvswitch/vport-gre.c
+@@ -84,10 +84,15 @@ static struct vport *gre_create(const struct vport_parms *parms)
+ return ovs_netdev_link(vport, parms->name);
}
++static netdev_tx_t gre_send(struct sk_buff *skb)
++{
++ return dev_queue_xmit(skb);
++}
++
+ static struct vport_ops ovs_gre_vport_ops = {
+ .type = OVS_VPORT_TYPE_GRE,
+ .create = gre_create,
+- .send = dev_queue_xmit,
++ .send = gre_send,
+ .destroy = ovs_netdev_tunnel_destroy,
+ };
+
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
-index ec76398..52091dd 100644
+index ec76398..81d562c 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)
+ }
+
+ /* Called with rcu_read_lock_bh. */
+-static int internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev)
++static netdev_tx_t internal_dev_xmit(struct sk_buff *skb, struct net_device *netdev)
+ {
+ int len, err;
+
@@ -147,7 +147,7 @@ static const struct net_device_ops internal_dev_netdev_ops = {
.ndo_get_stats64 = internal_get_stats,
};
@@ -130054,6 +155787,51 @@ index ec76398..52091dd 100644
.kind = "openvswitch",
};
+diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c
+index 6a6adf3..055fe97 100644
+--- a/net/openvswitch/vport-netdev.c
++++ b/net/openvswitch/vport-netdev.c
+@@ -204,11 +204,16 @@ struct vport *ovs_netdev_get_vport(struct net_device *dev)
+ return NULL;
+ }
+
++static netdev_tx_t netdev_send(struct sk_buff *skb)
++{
++ return dev_queue_xmit(skb);
++}
++
+ static struct vport_ops ovs_netdev_vport_ops = {
+ .type = OVS_VPORT_TYPE_NETDEV,
+ .create = netdev_create,
+ .destroy = netdev_destroy,
+- .send = dev_queue_xmit,
++ .send = netdev_send,
+ };
+
+ int __init ovs_netdev_init(void)
+diff --git a/net/openvswitch/vport-vxlan.c b/net/openvswitch/vport-vxlan.c
+index 5eb7694..58d8f08 100644
+--- a/net/openvswitch/vport-vxlan.c
++++ b/net/openvswitch/vport-vxlan.c
+@@ -148,12 +148,17 @@ static struct vport *vxlan_create(const struct vport_parms *parms)
+ return ovs_netdev_link(vport, parms->name);
+ }
+
++static netdev_tx_t vxlan_send(struct sk_buff *skb)
++{
++ return dev_queue_xmit(skb);
++}
++
+ static struct vport_ops ovs_vxlan_netdev_vport_ops = {
+ .type = OVS_VPORT_TYPE_VXLAN,
+ .create = vxlan_create,
+ .destroy = ovs_netdev_tunnel_destroy,
+ .get_options = vxlan_get_options,
+- .send = dev_queue_xmit,
++ .send = vxlan_send,
+ };
+
+ static int __init ovs_vxlan_tnl_init(void)
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index da1ae0e1..3eb11c3 100644
--- a/net/packet/af_packet.c
@@ -130389,6 +156167,23 @@ index 9d6ddba..da3cd96 100644
sizeof(val));
set_fs(oldfs);
}
+diff --git a/net/rds/tcp.h b/net/rds/tcp.h
+index 64f873c..a52c8aa 100644
+--- a/net/rds/tcp.h
++++ b/net/rds/tcp.h
+@@ -13,9 +13,9 @@ struct rds_tcp_connection {
+ struct list_head t_tcp_node;
+ struct rds_connection *conn;
+ struct socket *t_sock;
+- void *t_orig_write_space;
+- void *t_orig_data_ready;
+- void *t_orig_state_change;
++ void (*t_orig_write_space)(struct sock *sk);
++ void (*t_orig_data_ready)(struct sock *sk);
++ void (*t_orig_state_change)(struct sock *sk);
+
+ 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
--- a/net/rds/tcp_send.c
@@ -130403,7 +156198,7 @@ index 2894e60..f9c01ac 100644
set_fs(oldfs);
}
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c
-index 1f8a144..2c93350 100644
+index 7e2d105..c060cb7 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;
@@ -130801,7 +156596,7 @@ index ce46f1c..47ef3e1 100644
/* Initialize IPv6 support and register with socket layer. */
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
-index 8b4ff31..9e73fb3 100644
+index 1099e99..e309828 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -216,6 +216,7 @@ int sctp_copy_local_addr_list(struct net *net, struct sctp_bind_addr *bp,
@@ -130866,19 +156661,10 @@ index 5d6a03f..7fe971e 100644
retval->next_tsn = retval->c.initial_tsn;
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
-index 6098d4c..9920c54 100644
+index b5327bb..807f714 100644
--- a/net/sctp/sm_sideeffect.c
+++ b/net/sctp/sm_sideeffect.c
-@@ -63,7 +63,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
- static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
- sctp_state_t state,
- struct sctp_endpoint *ep,
-- struct sctp_association *asoc,
-+ struct sctp_association **asoc,
- void *event_arg,
- sctp_disposition_t status,
- sctp_cmd_seq_t *commands,
-@@ -443,7 +443,7 @@ static void sctp_generate_sack_event(unsigned long data)
+@@ -431,7 +431,7 @@ static void sctp_generate_sack_event(unsigned long data)
sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_SACK);
}
@@ -130887,130 +156673,17 @@ index 6098d4c..9920c54 100644
NULL,
sctp_generate_t1_cookie_event,
sctp_generate_t1_init_event,
-@@ -1123,7 +1123,7 @@ int sctp_do_sm(struct net *net, sctp_event_t event_type, sctp_subtype_t subtype,
- debug_post_sfn();
-
- error = sctp_side_effects(event_type, subtype, state,
-- ep, asoc, event_arg, status,
-+ ep, &asoc, event_arg, status,
- &commands, gfp);
- debug_post_sfx();
-
-@@ -1136,7 +1136,7 @@ int sctp_do_sm(struct net *net, sctp_event_t event_type, sctp_subtype_t subtype,
- static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
- sctp_state_t state,
- struct sctp_endpoint *ep,
-- struct sctp_association *asoc,
-+ struct sctp_association **asoc,
- void *event_arg,
- sctp_disposition_t status,
- sctp_cmd_seq_t *commands,
-@@ -1151,7 +1151,7 @@ static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
- * disposition SCTP_DISPOSITION_CONSUME.
- */
- if (0 != (error = sctp_cmd_interpreter(event_type, subtype, state,
-- ep, asoc,
-+ ep, *asoc,
- event_arg, status,
- commands, gfp)))
- goto bail;
-@@ -1174,11 +1174,12 @@ static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
- break;
-
- case SCTP_DISPOSITION_DELETE_TCB:
-+ case SCTP_DISPOSITION_ABORT:
- /* This should now be a command. */
-+ *asoc = NULL;
- break;
-
- case SCTP_DISPOSITION_CONSUME:
-- case SCTP_DISPOSITION_ABORT:
- /*
- * We should no longer have much work to do here as the
- * real work has been done as explicit commands above.
-diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
-index 22c2bf3..f1f08c8 100644
---- a/net/sctp/sm_statefuns.c
-+++ b/net/sctp/sm_statefuns.c
-@@ -2976,7 +2976,7 @@ sctp_disposition_t sctp_sf_eat_data_6_2(struct net *net,
- SCTP_INC_STATS(net, SCTP_MIB_IN_DATA_CHUNK_DISCARDS);
- goto discard_force;
- case SCTP_IERROR_NO_DATA:
-- goto consume;
-+ return SCTP_DISPOSITION_ABORT;
- case SCTP_IERROR_PROTO_VIOLATION:
- return sctp_sf_abort_violation(net, ep, asoc, chunk, commands,
- (u8 *)chunk->subh.data_hdr, sizeof(sctp_datahdr_t));
-@@ -3043,9 +3043,6 @@ discard_noforce:
- sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, force);
-
- return SCTP_DISPOSITION_DISCARD;
--consume:
-- return SCTP_DISPOSITION_CONSUME;
--
- }
-
- /*
-@@ -3093,7 +3090,7 @@ sctp_disposition_t sctp_sf_eat_data_fast_4_4(struct net *net,
- case SCTP_IERROR_BAD_STREAM:
- break;
- case SCTP_IERROR_NO_DATA:
-- goto consume;
-+ return SCTP_DISPOSITION_ABORT;
- case SCTP_IERROR_PROTO_VIOLATION:
- return sctp_sf_abort_violation(net, ep, asoc, chunk, commands,
- (u8 *)chunk->subh.data_hdr, sizeof(sctp_datahdr_t));
-@@ -3119,7 +3116,6 @@ sctp_disposition_t sctp_sf_eat_data_fast_4_4(struct net *net,
- SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN));
- }
-
--consume:
- return SCTP_DISPOSITION_CONSUME;
- }
-
-@@ -4825,9 +4821,6 @@ sctp_disposition_t sctp_sf_do_9_1_prm_abort(
- * if necessary to fill gaps.
- */
- struct sctp_chunk *abort = arg;
-- sctp_disposition_t retval;
--
-- retval = SCTP_DISPOSITION_CONSUME;
-
- if (abort)
- sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort));
-@@ -4845,7 +4838,7 @@ sctp_disposition_t sctp_sf_do_9_1_prm_abort(
- SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS);
- SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB);
-
-- return retval;
-+ return SCTP_DISPOSITION_ABORT;
- }
-
- /* We tried an illegal operation on an association which is closed. */
-@@ -4960,12 +4953,10 @@ sctp_disposition_t sctp_sf_cookie_wait_prm_abort(
- sctp_cmd_seq_t *commands)
- {
- struct sctp_chunk *abort = arg;
-- sctp_disposition_t retval;
-
- /* Stop T1-init timer */
- sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
- SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT));
-- retval = SCTP_DISPOSITION_CONSUME;
-
- if (abort)
- sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort));
-@@ -4985,7 +4976,7 @@ sctp_disposition_t sctp_sf_cookie_wait_prm_abort(
- sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
- SCTP_PERR(SCTP_ERROR_USER_ABORT));
-
-- return retval;
-+ return SCTP_DISPOSITION_ABORT;
- }
-
- /*
+@@ -1095,7 +1095,7 @@ int sctp_do_sm(struct net *net, sctp_event_t event_type, sctp_subtype_t subtype,
+ const sctp_sm_table_entry_t *state_fn;
+ sctp_disposition_t status;
+ int error = 0;
+- typedef const char *(printfn_t)(sctp_subtype_t);
++ typedef const char *(printfn_t)(const sctp_subtype_t);
+ static printfn_t *table[] = {
+ NULL, sctp_cname, sctp_tname, sctp_oname, sctp_pname,
+ };
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
-index be1489f..9d8cbd9 100644
+index e878da0..f0f6b12 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -386,7 +386,8 @@ static int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
@@ -131031,7 +156704,7 @@ index be1489f..9d8cbd9 100644
SCTP_ADDR_NEW, GFP_ATOMIC);
addr_buf += af->sockaddr_len;
}
-@@ -2192,11 +2194,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval,
+@@ -2188,11 +2190,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval,
{
struct sctp_association *asoc;
struct sctp_ulpevent *event;
@@ -131046,7 +156719,7 @@ index be1489f..9d8cbd9 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
-@@ -4371,13 +4375,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
+@@ -4367,13 +4371,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
int __user *optlen)
{
@@ -131064,7 +156737,7 @@ index be1489f..9d8cbd9 100644
return -EFAULT;
return 0;
}
-@@ -4395,6 +4402,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
+@@ -4391,6 +4398,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
*/
static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen)
{
@@ -131073,7 +156746,7 @@ index be1489f..9d8cbd9 100644
/* Applicable to UDP-style socket only */
if (sctp_style(sk, TCP))
return -EOPNOTSUPP;
-@@ -4403,7 +4412,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
+@@ -4399,7 +4408,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
len = sizeof(int);
if (put_user(len, optlen))
return -EFAULT;
@@ -131083,7 +156756,7 @@ index be1489f..9d8cbd9 100644
return -EFAULT;
return 0;
}
-@@ -4777,12 +4787,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
+@@ -4773,12 +4783,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
*/
static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen)
{
@@ -131100,7 +156773,7 @@ index be1489f..9d8cbd9 100644
return -EFAULT;
return 0;
}
-@@ -4823,6 +4836,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
+@@ -4819,6 +4832,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
->addr_to_user(sp, &temp);
if (space_left < addrlen)
return -ENOMEM;
@@ -131110,10 +156783,10 @@ index be1489f..9d8cbd9 100644
return -EFAULT;
to += addrlen;
diff --git a/net/sctp/sysctl.c b/net/sctp/sysctl.c
-index 3e0fc51..289fe22 100644
+index daf8554..4ab495b 100644
--- a/net/sctp/sysctl.c
+++ b/net/sctp/sysctl.c
-@@ -317,7 +317,7 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl, int write,
+@@ -324,7 +324,7 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl, int write,
loff_t *ppos)
{
struct net *net = current->nsproxy->net_ns;
@@ -131122,7 +156795,7 @@ index 3e0fc51..289fe22 100644
bool changed = false;
char *none = "none";
char tmp[8] = {0};
-@@ -365,7 +365,7 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write,
+@@ -372,7 +372,7 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write,
struct net *net = current->nsproxy->net_ns;
unsigned int min = *(unsigned int *) ctl->extra1;
unsigned int max = *(unsigned int *) ctl->extra2;
@@ -131131,7 +156804,7 @@ index 3e0fc51..289fe22 100644
int ret, new_value;
memset(&tbl, 0, sizeof(struct ctl_table));
-@@ -394,7 +394,7 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write,
+@@ -401,7 +401,7 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write,
struct net *net = current->nsproxy->net_ns;
unsigned int min = *(unsigned int *) ctl->extra1;
unsigned int max = *(unsigned int *) ctl->extra2;
@@ -131140,7 +156813,7 @@ index 3e0fc51..289fe22 100644
int ret, new_value;
memset(&tbl, 0, sizeof(struct ctl_table));
-@@ -432,7 +432,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
+@@ -439,7 +439,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
loff_t *ppos)
{
struct net *net = current->nsproxy->net_ns;
@@ -131149,7 +156822,7 @@ index 3e0fc51..289fe22 100644
int new_value, ret;
memset(&tbl, 0, sizeof(struct ctl_table));
-@@ -459,7 +459,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
+@@ -466,7 +466,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
int sctp_sysctl_net_register(struct net *net)
{
@@ -131159,7 +156832,7 @@ index 3e0fc51..289fe22 100644
table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL);
diff --git a/net/socket.c b/net/socket.c
-index 263b334..bcfd0d6 100644
+index db13ae8..dabfbea 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -89,6 +89,7 @@
@@ -131369,7 +157042,7 @@ index 263b334..bcfd0d6 100644
ctl_len))
goto out_freectl;
msg_sys->msg_control = ctl_buf;
-@@ -2072,7 +2137,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 */
@@ -131378,7 +157051,7 @@ index 263b334..bcfd0d6 100644
/* user mode address pointers */
struct sockaddr __user *uaddr;
-@@ -2717,7 +2782,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);
@@ -131387,7 +157060,7 @@ index 263b334..bcfd0d6 100644
return -EFAULT;
if (put_user(convert_in ? rxnfc : compat_ptr(data),
-@@ -2828,7 +2893,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,
@@ -131396,7 +157069,7 @@ index 263b334..bcfd0d6 100644
set_fs(old_fs);
return err;
-@@ -2921,7 +2986,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);
@@ -131405,7 +157078,7 @@ index 263b334..bcfd0d6 100644
set_fs(old_fs);
if (cmd == SIOCGIFMAP && !err) {
-@@ -3005,7 +3070,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);
@@ -131414,7 +157087,7 @@ index 263b334..bcfd0d6 100644
devname[15] = 0;
} else
r4.rt_dev = NULL;
-@@ -3232,8 +3297,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;
@@ -131425,7 +157098,7 @@ index 263b334..bcfd0d6 100644
set_fs(KERNEL_DS);
if (level == SOL_SOCKET)
-@@ -3253,7 +3318,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;
@@ -131446,6 +157119,75 @@ index 04ce2c0..b1dd1bd 100644
help
This option enables a sysctl-based debugging interface
that is be used by the 'rpcdebug' utility to turn on or off
+diff --git a/net/sunrpc/auth_gss/gss_rpc_upcall.c b/net/sunrpc/auth_gss/gss_rpc_upcall.c
+index f0c6a8c..3acb459 100644
+--- a/net/sunrpc/auth_gss/gss_rpc_upcall.c
++++ b/net/sunrpc/auth_gss/gss_rpc_upcall.c
+@@ -55,8 +55,8 @@ enum {
+ #define PROC(proc, name) \
+ [GSSX_##proc] = { \
+ .p_proc = GSSX_##proc, \
+- .p_encode = (kxdreproc_t)gssx_enc_##name, \
+- .p_decode = (kxdrdproc_t)gssx_dec_##name, \
++ .p_encode = gssx_enc_##name, \
++ .p_decode = gssx_dec_##name, \
+ .p_arglen = GSSX_ARG_##name##_sz, \
+ .p_replen = GSSX_RES_##name##_sz, \
+ .p_statidx = GSSX_##proc, \
+diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c
+index eeeba5a..c0d96a1 100644
+--- a/net/sunrpc/auth_gss/gss_rpc_xdr.c
++++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c
+@@ -731,10 +731,12 @@ static int gssx_enc_cb(struct xdr_stream *xdr, struct gssx_cb *cb)
+ return err;
+ }
+
+-void gssx_enc_accept_sec_context(struct rpc_rqst *req,
++void gssx_enc_accept_sec_context(void *_req,
+ struct xdr_stream *xdr,
+- struct gssx_arg_accept_sec_context *arg)
++ void *_arg)
+ {
++ struct rpc_rqst *req = _req;
++ struct gssx_arg_accept_sec_context *arg = _arg;
+ int err;
+
+ err = gssx_enc_call_ctx(xdr, &arg->call_ctx);
+@@ -787,10 +789,11 @@ done:
+ dprintk("RPC: gssx_enc_accept_sec_context: %d\n", err);
+ }
+
+-int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp,
++int gssx_dec_accept_sec_context(void *rqstp,
+ struct xdr_stream *xdr,
+- struct gssx_res_accept_sec_context *res)
++ void *_res)
+ {
++ struct gssx_res_accept_sec_context *res = _res;
+ u32 value_follows;
+ int err;
+ struct page *scratch;
+diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.h b/net/sunrpc/auth_gss/gss_rpc_xdr.h
+index 9d88c62..53396b6 100644
+--- a/net/sunrpc/auth_gss/gss_rpc_xdr.h
++++ b/net/sunrpc/auth_gss/gss_rpc_xdr.h
+@@ -177,12 +177,12 @@ struct gssx_res_accept_sec_context {
+ #define gssx_dec_store_cred NULL
+ #define gssx_enc_init_sec_context NULL
+ #define gssx_dec_init_sec_context NULL
+-void gssx_enc_accept_sec_context(struct rpc_rqst *req,
++void gssx_enc_accept_sec_context(void *req,
+ struct xdr_stream *xdr,
+- struct gssx_arg_accept_sec_context *args);
+-int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp,
++ void *args);
++int gssx_dec_accept_sec_context(void *rqstp,
+ struct xdr_stream *xdr,
+- struct gssx_res_accept_sec_context *res);
++ void *res);
+ #define gssx_enc_release_handle NULL
+ #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 1095be9..815d777 100644
--- a/net/sunrpc/auth_gss/svcauth_gss.c
@@ -131469,7 +157211,7 @@ index 1095be9..815d777 100644
/* make a copy for the caller */
*handle = ctxh;
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
-index 21e2035..2e567b1 100644
+index 273bc3a..1a4b204 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -1623,7 +1623,7 @@ static int create_cache_proc_entries(struct cache_detail *cd, struct net *net)
@@ -131482,10 +157224,10 @@ index 21e2035..2e567b1 100644
goto out_nomem;
cd->u.procfs.channel_ent = NULL;
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
-index 23608eb..f2b5208 100644
+index b7f2104..62e2195d 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
-@@ -1428,7 +1428,9 @@ call_start(struct rpc_task *task)
+@@ -1429,7 +1429,9 @@ call_start(struct rpc_task *task)
(RPC_IS_ASYNC(task) ? "async" : "sync"));
/* Increment call count */
@@ -131496,6 +157238,179 @@ index 23608eb..f2b5208 100644
clnt->cl_stats->rpccnt++;
task->tk_action = call_reserve;
}
+diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
+index cf5770d..6309968 100644
+--- a/net/sunrpc/rpcb_clnt.c
++++ b/net/sunrpc/rpcb_clnt.c
+@@ -844,9 +844,11 @@ static void rpcb_getport_done(struct rpc_task *child, void *data)
+ * XDR functions for rpcbind
+ */
+
+-static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct rpcbind_args *rpcb)
++static void rpcb_enc_mapping(void *_req, struct xdr_stream *xdr,
++ void *_rpcb)
+ {
++ struct rpc_rqst *req = _req;
++ const struct rpcbind_args *rpcb = _rpcb;
+ __be32 *p;
+
+ dprintk("RPC: %5u encoding PMAP_%s call (%u, %u, %d, %u)\n",
+@@ -861,9 +863,11 @@ static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr,
+ *p = cpu_to_be32(rpcb->r_port);
+ }
+
+-static int rpcb_dec_getport(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct rpcbind_args *rpcb)
++static int rpcb_dec_getport(void *_req, struct xdr_stream *xdr,
++ void *_rpcb)
+ {
++ struct rpc_rqst *req = _req;
++ struct rpcbind_args *rpcb = _rpcb;
+ unsigned long port;
+ __be32 *p;
+
+@@ -883,9 +887,11 @@ static int rpcb_dec_getport(struct rpc_rqst *req, struct xdr_stream *xdr,
+ return 0;
+ }
+
+-static int rpcb_dec_set(struct rpc_rqst *req, struct xdr_stream *xdr,
+- unsigned int *boolp)
++static int rpcb_dec_set(void *_req, struct xdr_stream *xdr,
++ void *_boolp)
+ {
++ struct rpc_rqst *req = _req;
++ unsigned int *boolp = _boolp;
+ __be32 *p;
+
+ p = xdr_inline_decode(xdr, 4);
+@@ -918,9 +924,11 @@ static void encode_rpcb_string(struct xdr_stream *xdr, const char *string,
+ xdr_encode_opaque(p, string, len);
+ }
+
+-static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,
+- const struct rpcbind_args *rpcb)
++static void rpcb_enc_getaddr(void *_req, struct xdr_stream *xdr,
++ void *_rpcb)
+ {
++ struct rpc_rqst *req = _req;
++ const struct rpcbind_args *rpcb = _rpcb;
+ __be32 *p;
+
+ dprintk("RPC: %5u encoding RPCB_%s call (%u, %u, '%s', '%s')\n",
+@@ -938,9 +946,11 @@ static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,
+ encode_rpcb_string(xdr, rpcb->r_owner, RPCB_MAXOWNERLEN);
+ }
+
+-static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,
+- struct rpcbind_args *rpcb)
++static int rpcb_dec_getaddr(void *_req, struct xdr_stream *xdr,
++ void *_rpcb)
+ {
++ struct rpc_rqst *req = _req;
++ struct rpcbind_args *rpcb = _rpcb;
+ struct sockaddr_storage address;
+ struct sockaddr *sap = (struct sockaddr *)&address;
+ __be32 *p;
+@@ -994,8 +1004,8 @@ out_fail:
+ static struct rpc_procinfo rpcb_procedures2[] = {
+ [RPCBPROC_SET] = {
+ .p_proc = RPCBPROC_SET,
+- .p_encode = (kxdreproc_t)rpcb_enc_mapping,
+- .p_decode = (kxdrdproc_t)rpcb_dec_set,
++ .p_encode = rpcb_enc_mapping,
++ .p_decode = rpcb_dec_set,
+ .p_arglen = RPCB_mappingargs_sz,
+ .p_replen = RPCB_setres_sz,
+ .p_statidx = RPCBPROC_SET,
+@@ -1004,8 +1014,8 @@ static struct rpc_procinfo rpcb_procedures2[] = {
+ },
+ [RPCBPROC_UNSET] = {
+ .p_proc = RPCBPROC_UNSET,
+- .p_encode = (kxdreproc_t)rpcb_enc_mapping,
+- .p_decode = (kxdrdproc_t)rpcb_dec_set,
++ .p_encode = rpcb_enc_mapping,
++ .p_decode = rpcb_dec_set,
+ .p_arglen = RPCB_mappingargs_sz,
+ .p_replen = RPCB_setres_sz,
+ .p_statidx = RPCBPROC_UNSET,
+@@ -1014,8 +1024,8 @@ static struct rpc_procinfo rpcb_procedures2[] = {
+ },
+ [RPCBPROC_GETPORT] = {
+ .p_proc = RPCBPROC_GETPORT,
+- .p_encode = (kxdreproc_t)rpcb_enc_mapping,
+- .p_decode = (kxdrdproc_t)rpcb_dec_getport,
++ .p_encode = rpcb_enc_mapping,
++ .p_decode = rpcb_dec_getport,
+ .p_arglen = RPCB_mappingargs_sz,
+ .p_replen = RPCB_getportres_sz,
+ .p_statidx = RPCBPROC_GETPORT,
+@@ -1027,8 +1037,8 @@ static struct rpc_procinfo rpcb_procedures2[] = {
+ static struct rpc_procinfo rpcb_procedures3[] = {
+ [RPCBPROC_SET] = {
+ .p_proc = RPCBPROC_SET,
+- .p_encode = (kxdreproc_t)rpcb_enc_getaddr,
+- .p_decode = (kxdrdproc_t)rpcb_dec_set,
++ .p_encode = rpcb_enc_getaddr,
++ .p_decode = rpcb_dec_set,
+ .p_arglen = RPCB_getaddrargs_sz,
+ .p_replen = RPCB_setres_sz,
+ .p_statidx = RPCBPROC_SET,
+@@ -1037,8 +1047,8 @@ static struct rpc_procinfo rpcb_procedures3[] = {
+ },
+ [RPCBPROC_UNSET] = {
+ .p_proc = RPCBPROC_UNSET,
+- .p_encode = (kxdreproc_t)rpcb_enc_getaddr,
+- .p_decode = (kxdrdproc_t)rpcb_dec_set,
++ .p_encode = rpcb_enc_getaddr,
++ .p_decode = rpcb_dec_set,
+ .p_arglen = RPCB_getaddrargs_sz,
+ .p_replen = RPCB_setres_sz,
+ .p_statidx = RPCBPROC_UNSET,
+@@ -1047,8 +1057,8 @@ static struct rpc_procinfo rpcb_procedures3[] = {
+ },
+ [RPCBPROC_GETADDR] = {
+ .p_proc = RPCBPROC_GETADDR,
+- .p_encode = (kxdreproc_t)rpcb_enc_getaddr,
+- .p_decode = (kxdrdproc_t)rpcb_dec_getaddr,
++ .p_encode = rpcb_enc_getaddr,
++ .p_decode = rpcb_dec_getaddr,
+ .p_arglen = RPCB_getaddrargs_sz,
+ .p_replen = RPCB_getaddrres_sz,
+ .p_statidx = RPCBPROC_GETADDR,
+@@ -1060,8 +1070,8 @@ static struct rpc_procinfo rpcb_procedures3[] = {
+ static struct rpc_procinfo rpcb_procedures4[] = {
+ [RPCBPROC_SET] = {
+ .p_proc = RPCBPROC_SET,
+- .p_encode = (kxdreproc_t)rpcb_enc_getaddr,
+- .p_decode = (kxdrdproc_t)rpcb_dec_set,
++ .p_encode = rpcb_enc_getaddr,
++ .p_decode = rpcb_dec_set,
+ .p_arglen = RPCB_getaddrargs_sz,
+ .p_replen = RPCB_setres_sz,
+ .p_statidx = RPCBPROC_SET,
+@@ -1070,8 +1080,8 @@ static struct rpc_procinfo rpcb_procedures4[] = {
+ },
+ [RPCBPROC_UNSET] = {
+ .p_proc = RPCBPROC_UNSET,
+- .p_encode = (kxdreproc_t)rpcb_enc_getaddr,
+- .p_decode = (kxdrdproc_t)rpcb_dec_set,
++ .p_encode = rpcb_enc_getaddr,
++ .p_decode = rpcb_dec_set,
+ .p_arglen = RPCB_getaddrargs_sz,
+ .p_replen = RPCB_setres_sz,
+ .p_statidx = RPCBPROC_UNSET,
+@@ -1080,8 +1090,8 @@ static struct rpc_procinfo rpcb_procedures4[] = {
+ },
+ [RPCBPROC_GETADDR] = {
+ .p_proc = RPCBPROC_GETADDR,
+- .p_encode = (kxdreproc_t)rpcb_enc_getaddr,
+- .p_decode = (kxdrdproc_t)rpcb_dec_getaddr,
++ .p_encode = rpcb_enc_getaddr,
++ .p_decode = rpcb_dec_getaddr,
+ .p_arglen = RPCB_getaddrargs_sz,
+ .p_replen = RPCB_getaddrres_sz,
+ .p_statidx = RPCBPROC_GETADDR,
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
index 73ad57a..d7a0c08 100644
--- a/net/sunrpc/sched.c
@@ -131526,9 +157441,27 @@ index 2ecb994..5afb49f 100644
return -ENOMEM;
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
-index cc98528..f427662 100644
+index cc98528..925844d 100644
--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
+@@ -50,7 +50,7 @@ EXPORT_SYMBOL_GPL(svc_pool_map);
+ static DEFINE_MUTEX(svc_pool_map_mutex);/* protects svc_pool_map.count only */
+
+ static int
+-param_set_pool_mode(const char *val, struct kernel_param *kp)
++param_set_pool_mode(const char *val, const struct kernel_param *kp)
+ {
+ int *ip = (int *)kp->arg;
+ struct svc_pool_map *m = &svc_pool_map;
+@@ -80,7 +80,7 @@ out:
+ }
+
+ static int
+-param_get_pool_mode(char *buf, struct kernel_param *kp)
++param_get_pool_mode(char *buf, const struct kernel_param *kp)
+ {
+ int *ip = (int *)kp->arg;
+
@@ -1166,7 +1166,9 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
svc_putnl(resv, RPC_SUCCESS);
@@ -131541,7 +157474,7 @@ index cc98528..f427662 100644
/* Initialize storage for argp and resp */
memset(rqstp->rq_argp, 0, procp->pc_argsize);
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
-index 621ca7b..78bf76b 100644
+index dfacdc9..3cb08de 100644
--- a/net/sunrpc/svcauth_unix.c
+++ b/net/sunrpc/svcauth_unix.c
@@ -470,7 +470,7 @@ static void unix_gid_request(struct cache_detail *cd,
@@ -131554,10 +157487,10 @@ index 621ca7b..78bf76b 100644
static int unix_gid_parse(struct cache_detail *cd,
char *mesg, int mlen)
diff --git a/net/sunrpc/xprtrdma/svc_rdma.c b/net/sunrpc/xprtrdma/svc_rdma.c
-index 1b7051b..65b0d80 100644
+index c846ca9..d5968b4 100644
--- a/net/sunrpc/xprtrdma/svc_rdma.c
+++ b/net/sunrpc/xprtrdma/svc_rdma.c
-@@ -61,15 +61,15 @@ unsigned int svcrdma_max_req_size = RPCRDMA_MAX_REQ_SIZE;
+@@ -62,15 +62,15 @@ unsigned int svcrdma_max_req_size = RPCRDMA_MAX_REQ_SIZE;
static unsigned int min_max_inline = 4096;
static unsigned int max_max_inline = 65536;
@@ -131580,9 +157513,9 @@ index 1b7051b..65b0d80 100644
+atomic_unchecked_t rdma_stat_sq_poll;
+atomic_unchecked_t rdma_stat_sq_prod;
- /* Temporary NFS request map and context caches */
- struct kmem_cache *svc_rdma_map_cachep;
-@@ -87,17 +87,17 @@ static int read_reset_stat(struct ctl_table *table, int write,
+ struct workqueue_struct *svc_rdma_wq;
+
+@@ -84,17 +84,17 @@ static int read_reset_stat(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
loff_t *ppos)
{
@@ -131603,7 +157536,7 @@ index 1b7051b..65b0d80 100644
if (len >= 32)
return -EFAULT;
len = strlen(str_buf);
-@@ -109,7 +109,7 @@ static int read_reset_stat(struct ctl_table *table, int write,
+@@ -106,7 +106,7 @@ static int read_reset_stat(struct ctl_table *table, int write,
len -= *ppos;
if (len > *lenp)
len = *lenp;
@@ -131612,7 +157545,7 @@ index 1b7051b..65b0d80 100644
return -EFAULT;
*lenp = len;
*ppos += len;
-@@ -150,63 +150,63 @@ static struct ctl_table svcrdma_parm_table[] = {
+@@ -147,63 +147,63 @@ static struct ctl_table svcrdma_parm_table[] = {
{
.procname = "rdma_stat_read",
.data = &rdma_stat_read,
@@ -131686,7 +157619,7 @@ index 1b7051b..65b0d80 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 ff4f01e..997f03d 100644
+index c8b8a8b..75b302c 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,
@@ -131707,7 +157640,7 @@ index ff4f01e..997f03d 100644
return ret;
err:
ib_dma_unmap_sg(xprt->sc_cm_id->device,
-@@ -598,7 +598,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
+@@ -630,7 +630,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
dto_q);
list_del_init(&ctxt->dto_q);
} else {
@@ -131716,7 +157649,7 @@ index ff4f01e..997f03d 100644
clear_bit(XPT_DATA, &xprt->xpt_flags);
ctxt = NULL;
}
-@@ -616,7 +616,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
+@@ -648,7 +648,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);
@@ -131726,7 +157659,7 @@ index ff4f01e..997f03d 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 969a1ab..ee9b382 100644
+index df57f3c..5febb1e 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
@@ -291,7 +291,7 @@ static int send_write(struct svcxprt_rdma *xprt, struct svc_rqst *rqstp,
@@ -131739,10 +157672,10 @@ index 969a1ab..ee9b382 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 b348b4a..db45b20 100644
+index 5763825..6a73bd1 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
-@@ -346,7 +346,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt)
+@@ -477,7 +477,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt)
return;
ib_req_notify_cq(xprt->sc_rq_cq, IB_CQ_NEXT_COMP);
@@ -131751,7 +157684,7 @@ index b348b4a..db45b20 100644
while ((ret = ib_poll_cq(xprt->sc_rq_cq, 1, &wc)) > 0) {
ctxt = (struct svc_rdma_op_ctxt *)(unsigned long)wc.wr_id;
-@@ -368,7 +368,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt)
+@@ -499,7 +499,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt)
}
if (ctxt)
@@ -131760,7 +157693,7 @@ index b348b4a..db45b20 100644
set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags);
/*
-@@ -447,7 +447,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt)
+@@ -576,7 +576,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt)
return;
ib_req_notify_cq(xprt->sc_sq_cq, IB_CQ_NEXT_COMP);
@@ -131769,7 +157702,7 @@ index b348b4a..db45b20 100644
while ((ret = ib_poll_cq(cq, ARRAY_SIZE(wc_a), wc_a)) > 0) {
int i;
-@@ -476,7 +476,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt)
+@@ -605,7 +605,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt)
}
if (ctxt)
@@ -131778,7 +157711,7 @@ index b348b4a..db45b20 100644
}
static void sq_comp_handler(struct ib_cq *cq, void *cq_context)
-@@ -1273,7 +1273,7 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr)
+@@ -1381,7 +1381,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);
@@ -131801,7 +157734,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 1eadc95..f6ccd08 100644
+index 2c016fd..68f02f3 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -65,13 +65,13 @@ struct tipc_nl_compat_cmd_dump {
@@ -131843,7 +157776,7 @@ index 1eadc95..f6ccd08 100644
kfree_skb(args);
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
-index 69ee2ee..3352a8d 100644
+index f9ff73a..2f69dd4 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,
@@ -131856,7 +157789,7 @@ index 69ee2ee..3352a8d 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 898a53a..5a23004 100644
+index f75f847..3388f3a 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,
@@ -131906,7 +157839,7 @@ index 898a53a..5a23004 100644
return err;
}
-@@ -2806,9 +2825,13 @@ static int unix_seq_show(struct seq_file *seq, void *v)
+@@ -2814,9 +2833,13 @@ static int unix_seq_show(struct seq_file *seq, void *v)
seq_puts(seq, "Num RefCount Protocol Flags Type St "
"Inode Path\n");
else {
@@ -131921,7 +157854,7 @@ index 898a53a..5a23004 100644
seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5lu",
s,
-@@ -2833,10 +2856,29 @@ static int unix_seq_show(struct seq_file *seq, void *v)
+@@ -2841,10 +2864,29 @@ static int unix_seq_show(struct seq_file *seq, void *v)
seq_putc(seq, '@');
i++;
}
@@ -131982,13 +157915,13 @@ index b3d5150..ff3a837 100644
table = kmemdup(unix_table, sizeof(unix_table), GFP_KERNEL);
if (table == NULL)
diff --git a/net/vmw_vsock/vmci_transport_notify.c b/net/vmw_vsock/vmci_transport_notify.c
-index 9b7f207..2596621 100644
+index fd8cf02..1406db4 100644
--- a/net/vmw_vsock/vmci_transport_notify.c
+++ b/net/vmw_vsock/vmci_transport_notify.c
@@ -662,19 +662,19 @@ static void vmci_transport_notify_pkt_process_negotiate(struct sock *sk)
/* Socket control packet based operations. */
- struct vmci_transport_notify_ops vmci_transport_notify_pkt_ops = {
+ const struct vmci_transport_notify_ops vmci_transport_notify_pkt_ops = {
- vmci_transport_notify_pkt_socket_init,
- vmci_transport_notify_pkt_socket_destruct,
- vmci_transport_notify_pkt_poll_in,
@@ -132021,13 +157954,13 @@ index 9b7f207..2596621 100644
+ .process_negotiate = vmci_transport_notify_pkt_process_negotiate,
};
diff --git a/net/vmw_vsock/vmci_transport_notify_qstate.c b/net/vmw_vsock/vmci_transport_notify_qstate.c
-index dc9c792..3089de0 100644
+index 21e591d..f3a0afc 100644
--- a/net/vmw_vsock/vmci_transport_notify_qstate.c
+++ b/net/vmw_vsock/vmci_transport_notify_qstate.c
@@ -420,19 +420,19 @@ vmci_transport_notify_pkt_send_pre_enqueue(
/* Socket always on control packet based operations. */
- struct vmci_transport_notify_ops vmci_transport_notify_pkt_q_state_ops = {
+ const struct vmci_transport_notify_ops vmci_transport_notify_pkt_q_state_ops = {
- vmci_transport_notify_pkt_socket_init,
- vmci_transport_notify_pkt_socket_destruct,
- vmci_transport_notify_pkt_poll_in,
@@ -132059,6 +157992,413 @@ index dc9c792..3089de0 100644
+ .process_request = vmci_transport_notify_pkt_process_request,
+ .process_negotiate = vmci_transport_notify_pkt_process_negotiate,
};
+diff --git a/net/wireless/scan.c b/net/wireless/scan.c
+index 14d5369..7142d8e 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,
+
+ int cfg80211_wext_giwscan(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct cfg80211_registered_device *rdev;
+ int res;
+
+diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
+index fd68283..0681bb2 100644
+--- a/net/wireless/wext-compat.c
++++ b/net/wireless/wext-compat.c
+@@ -23,8 +23,9 @@
+
+ int cfg80211_wext_giwname(struct net_device *dev,
+ struct iw_request_info *info,
+- char *name, char *extra)
++ 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,
+ EXPORT_WEXT_HANDLER(cfg80211_wext_giwname);
+
+ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
+- u32 *mode, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ u32 *mode = &wrqu->mode;
+ 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,
+ EXPORT_WEXT_HANDLER(cfg80211_wext_siwmode);
+
+ int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info,
+- u32 *mode, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ u32 *mode = &wrqu->mode;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ if (!wdev)
+@@ -139,8 +142,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwmode);
+
+ int cfg80211_wext_giwrange(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ 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)
+
+ int cfg80211_wext_siwrts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ 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);
+
+ int cfg80211_wext_giwrts(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rts, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rts = &wrqu->rts;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ rts->value = wdev->wiphy->rts_threshold;
+@@ -321,8 +327,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwrts);
+
+ int cfg80211_wext_siwfrag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *frag, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *frag = &wrqu->frag;
+ 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);
+
+ int cfg80211_wext_giwfrag(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *frag, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *frag = &wrqu->frag;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ frag->value = wdev->wiphy->frag_threshold;
+@@ -361,8 +369,9 @@ EXPORT_WEXT_HANDLER(cfg80211_wext_giwfrag);
+
+ static int cfg80211_wext_siwretry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *retry, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *retry = &wrqu->retry;
+ 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,
+
+ int cfg80211_wext_giwretry(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *retry, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *retry = &wrqu->retry;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ retry->disabled = 0;
+@@ -586,8 +596,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,
+- struct iw_point *erq, char *keybuf)
++ union iwreq_data *wrqu, char *keybuf)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ 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,
+
+ static int cfg80211_wext_siwencodeext(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ 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,
+
+ static int cfg80211_wext_giwencode(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *erq, char *keybuf)
++ union iwreq_data *wrqu, char *keybuf)
+ {
++ struct iw_point *erq = &wrqu->encoding;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ int idx;
+
+@@ -774,8 +787,9 @@ static int cfg80211_wext_giwencode(struct net_device *dev,
+
+ static int cfg80211_wext_siwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *wextfreq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *wextfreq = &wrqu->freq;
+ 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,
+
+ static int cfg80211_wext_giwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *freq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_freq *freq = &wrqu->freq;
+ 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)
+
+ static int cfg80211_wext_siwauth(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *data = &wrqu->param;
+ 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,
+
+ static int cfg80211_wext_giwauth(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ /* XXX: what do we need? */
+
+@@ -1118,8 +1134,9 @@ static int cfg80211_wext_giwauth(struct net_device *dev,
+
+ static int cfg80211_wext_siwpower(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *wrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *wrq = &wrqu->power;
+ 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,
+
+ static int cfg80211_wext_giwpower(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *wrq, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *wrq = &wrqu->power;
+ 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,
+
+ static int cfg80211_wext_siwrate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rate, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rate = &wrqu->bitrate;
+ 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,
+
+ static int cfg80211_wext_giwrate(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_param *rate, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_param *rate = &wrqu->bitrate;
+ 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)
+
+ static int cfg80211_wext_siwap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *ap_addr, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct sockaddr *ap_addr = &wrqu->ap_addr;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ switch (wdev->iftype) {
+@@ -1397,8 +1418,9 @@ static int cfg80211_wext_siwap(struct net_device *dev,
+
+ static int cfg80211_wext_giwap(struct net_device *dev,
+ struct iw_request_info *info,
+- struct sockaddr *ap_addr, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct sockaddr *ap_addr = &wrqu->ap_addr;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ switch (wdev->iftype) {
+@@ -1415,8 +1437,9 @@ static int cfg80211_wext_giwap(struct net_device *dev,
+
+ static int cfg80211_wext_siwessid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *ssid)
++ union iwreq_data *wrqu, char *ssid)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ switch (wdev->iftype) {
+@@ -1431,8 +1454,9 @@ static int cfg80211_wext_siwessid(struct net_device *dev,
+
+ static int cfg80211_wext_giwessid(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *ssid)
++ union iwreq_data *wrqu, char *ssid)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+ data->flags = 0;
+@@ -1450,7 +1474,7 @@ static int cfg80211_wext_giwessid(struct net_device *dev,
+
+ static int cfg80211_wext_siwpmksa(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ 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,
+ }
+
+ static const iw_handler cfg80211_handlers[] = {
+- [IW_IOCTL_IDX(SIOCGIWNAME)] = (iw_handler) cfg80211_wext_giwname,
+- [IW_IOCTL_IDX(SIOCSIWFREQ)] = (iw_handler) cfg80211_wext_siwfreq,
+- [IW_IOCTL_IDX(SIOCGIWFREQ)] = (iw_handler) cfg80211_wext_giwfreq,
+- [IW_IOCTL_IDX(SIOCSIWMODE)] = (iw_handler) cfg80211_wext_siwmode,
+- [IW_IOCTL_IDX(SIOCGIWMODE)] = (iw_handler) cfg80211_wext_giwmode,
+- [IW_IOCTL_IDX(SIOCGIWRANGE)] = (iw_handler) cfg80211_wext_giwrange,
+- [IW_IOCTL_IDX(SIOCSIWAP)] = (iw_handler) cfg80211_wext_siwap,
+- [IW_IOCTL_IDX(SIOCGIWAP)] = (iw_handler) cfg80211_wext_giwap,
+- [IW_IOCTL_IDX(SIOCSIWMLME)] = (iw_handler) cfg80211_wext_siwmlme,
+- [IW_IOCTL_IDX(SIOCSIWSCAN)] = (iw_handler) cfg80211_wext_siwscan,
+- [IW_IOCTL_IDX(SIOCGIWSCAN)] = (iw_handler) cfg80211_wext_giwscan,
+- [IW_IOCTL_IDX(SIOCSIWESSID)] = (iw_handler) cfg80211_wext_siwessid,
+- [IW_IOCTL_IDX(SIOCGIWESSID)] = (iw_handler) cfg80211_wext_giwessid,
+- [IW_IOCTL_IDX(SIOCSIWRATE)] = (iw_handler) cfg80211_wext_siwrate,
+- [IW_IOCTL_IDX(SIOCGIWRATE)] = (iw_handler) cfg80211_wext_giwrate,
+- [IW_IOCTL_IDX(SIOCSIWRTS)] = (iw_handler) cfg80211_wext_siwrts,
+- [IW_IOCTL_IDX(SIOCGIWRTS)] = (iw_handler) cfg80211_wext_giwrts,
+- [IW_IOCTL_IDX(SIOCSIWFRAG)] = (iw_handler) cfg80211_wext_siwfrag,
+- [IW_IOCTL_IDX(SIOCGIWFRAG)] = (iw_handler) cfg80211_wext_giwfrag,
+- [IW_IOCTL_IDX(SIOCSIWTXPOW)] = (iw_handler) cfg80211_wext_siwtxpower,
+- [IW_IOCTL_IDX(SIOCGIWTXPOW)] = (iw_handler) cfg80211_wext_giwtxpower,
+- [IW_IOCTL_IDX(SIOCSIWRETRY)] = (iw_handler) cfg80211_wext_siwretry,
+- [IW_IOCTL_IDX(SIOCGIWRETRY)] = (iw_handler) cfg80211_wext_giwretry,
+- [IW_IOCTL_IDX(SIOCSIWENCODE)] = (iw_handler) cfg80211_wext_siwencode,
+- [IW_IOCTL_IDX(SIOCGIWENCODE)] = (iw_handler) cfg80211_wext_giwencode,
+- [IW_IOCTL_IDX(SIOCSIWPOWER)] = (iw_handler) cfg80211_wext_siwpower,
+- [IW_IOCTL_IDX(SIOCGIWPOWER)] = (iw_handler) cfg80211_wext_giwpower,
+- [IW_IOCTL_IDX(SIOCSIWGENIE)] = (iw_handler) cfg80211_wext_siwgenie,
+- [IW_IOCTL_IDX(SIOCSIWAUTH)] = (iw_handler) cfg80211_wext_siwauth,
+- [IW_IOCTL_IDX(SIOCGIWAUTH)] = (iw_handler) cfg80211_wext_giwauth,
+- [IW_IOCTL_IDX(SIOCSIWENCODEEXT)]= (iw_handler) cfg80211_wext_siwencodeext,
+- [IW_IOCTL_IDX(SIOCSIWPMKSA)] = (iw_handler) cfg80211_wext_siwpmksa,
++ [IW_IOCTL_IDX(SIOCGIWNAME)] = cfg80211_wext_giwname,
++ [IW_IOCTL_IDX(SIOCSIWFREQ)] = cfg80211_wext_siwfreq,
++ [IW_IOCTL_IDX(SIOCGIWFREQ)] = cfg80211_wext_giwfreq,
++ [IW_IOCTL_IDX(SIOCSIWMODE)] = cfg80211_wext_siwmode,
++ [IW_IOCTL_IDX(SIOCGIWMODE)] = cfg80211_wext_giwmode,
++ [IW_IOCTL_IDX(SIOCGIWRANGE)] = cfg80211_wext_giwrange,
++ [IW_IOCTL_IDX(SIOCSIWAP)] = cfg80211_wext_siwap,
++ [IW_IOCTL_IDX(SIOCGIWAP)] = cfg80211_wext_giwap,
++ [IW_IOCTL_IDX(SIOCSIWMLME)] = cfg80211_wext_siwmlme,
++ [IW_IOCTL_IDX(SIOCSIWSCAN)] = cfg80211_wext_siwscan,
++ [IW_IOCTL_IDX(SIOCGIWSCAN)] = cfg80211_wext_giwscan,
++ [IW_IOCTL_IDX(SIOCSIWESSID)] = cfg80211_wext_siwessid,
++ [IW_IOCTL_IDX(SIOCGIWESSID)] = cfg80211_wext_giwessid,
++ [IW_IOCTL_IDX(SIOCSIWRATE)] = cfg80211_wext_siwrate,
++ [IW_IOCTL_IDX(SIOCGIWRATE)] = cfg80211_wext_giwrate,
++ [IW_IOCTL_IDX(SIOCSIWRTS)] = cfg80211_wext_siwrts,
++ [IW_IOCTL_IDX(SIOCGIWRTS)] = cfg80211_wext_giwrts,
++ [IW_IOCTL_IDX(SIOCSIWFRAG)] = cfg80211_wext_siwfrag,
++ [IW_IOCTL_IDX(SIOCGIWFRAG)] = cfg80211_wext_giwfrag,
++ [IW_IOCTL_IDX(SIOCSIWTXPOW)] = cfg80211_wext_siwtxpower,
++ [IW_IOCTL_IDX(SIOCGIWTXPOW)] = cfg80211_wext_giwtxpower,
++ [IW_IOCTL_IDX(SIOCSIWRETRY)] = cfg80211_wext_siwretry,
++ [IW_IOCTL_IDX(SIOCGIWRETRY)] = cfg80211_wext_giwretry,
++ [IW_IOCTL_IDX(SIOCSIWENCODE)] = cfg80211_wext_siwencode,
++ [IW_IOCTL_IDX(SIOCGIWENCODE)] = cfg80211_wext_giwencode,
++ [IW_IOCTL_IDX(SIOCSIWPOWER)] = cfg80211_wext_siwpower,
++ [IW_IOCTL_IDX(SIOCGIWPOWER)] = cfg80211_wext_giwpower,
++ [IW_IOCTL_IDX(SIOCSIWGENIE)] = cfg80211_wext_siwgenie,
++ [IW_IOCTL_IDX(SIOCSIWAUTH)] = cfg80211_wext_siwauth,
++ [IW_IOCTL_IDX(SIOCGIWAUTH)] = cfg80211_wext_giwauth,
++ [IW_IOCTL_IDX(SIOCSIWENCODEEXT)]= cfg80211_wext_siwencodeext,
++ [IW_IOCTL_IDX(SIOCSIWPMKSA)] = cfg80211_wext_siwpmksa,
+ };
+
+ const struct iw_handler_def cfg80211_wext_handler = {
+diff --git a/net/wireless/wext-compat.h b/net/wireless/wext-compat.h
+index 94c7405..499cca4 100644
+--- a/net/wireless/wext-compat.h
++++ b/net/wireless/wext-compat.h
+@@ -12,7 +12,7 @@
+
+ int cfg80211_ibss_wext_siwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *freq, char *extra);
++ struct iw_freq *wextfreq, char *extra);
+ int cfg80211_ibss_wext_giwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_freq *freq, char *extra);
+@@ -31,7 +31,7 @@ int cfg80211_ibss_wext_giwessid(struct net_device *dev,
+
+ int cfg80211_mgd_wext_siwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_freq *freq, char *extra);
++ struct iw_freq *wextfreq, char *extra);
+ int cfg80211_mgd_wext_giwfreq(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_freq *freq, char *extra);
+@@ -50,10 +50,10 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
+
+ int cfg80211_wext_siwmlme(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra);
++ union iwreq_data *wrqu, char *extra);
+ int cfg80211_wext_siwgenie(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra);
++ union iwreq_data *wrqu, char *extra);
+
+
+ int cfg80211_wext_freq(struct iw_freq *freq);
diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c
index b50ee5d..ccf70ab 100644
--- a/net/wireless/wext-core.c
@@ -132096,6 +158436,30 @@ index b50ee5d..ccf70ab 100644
err = handler(dev, info, (union iwreq_data *) iwp, extra);
iwp->length += essid_compat;
+diff --git a/net/wireless/wext-sme.c b/net/wireless/wext-sme.c
+index a4e8af3..f8c0e76 100644
+--- a/net/wireless/wext-sme.c
++++ b/net/wireless/wext-sme.c
+@@ -330,8 +330,9 @@ int cfg80211_mgd_wext_giwap(struct net_device *dev,
+
+ int cfg80211_wext_siwgenie(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
++ struct iw_point *data = &wrqu->data;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
+ u8 *ie = extra;
+@@ -380,7 +381,7 @@ int cfg80211_wext_siwgenie(struct net_device *dev,
+
+ int cfg80211_wext_siwmlme(struct net_device *dev,
+ struct iw_request_info *info,
+- struct iw_point *data, char *extra)
++ union iwreq_data *wrqu, char *extra)
+ {
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ struct iw_mlme *mlme = (struct iw_mlme *)extra;
diff --git a/net/x25/sysctl_net_x25.c b/net/x25/sysctl_net_x25.c
index 4323952..a06dfe1 100644
--- a/net/x25/sysctl_net_x25.c
@@ -132367,7 +158731,7 @@ index 1db6d73..0819042 100644
# ld-option
# Usage: LDFLAGS += $(call ld-option, -X)
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
-index 01df30a..b687dbf 100644
+index 2c47f9c..9d46008 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -60,7 +60,7 @@ endif
@@ -132394,12 +158758,12 @@ index 55c96cb..e4e88ab 100644
__clean-files := $(filter-out $(no-clean-files), $(__clean-files))
diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
-index 4efedcb..0220ab2 100644
+index f9e47a7..b72022a 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
-@@ -26,6 +26,10 @@ warning-1 += $(call cc-option, -Wmissing-include-dirs)
- warning-1 += $(call cc-option, -Wunused-but-set-variable)
+@@ -27,6 +27,10 @@ warning-1 += $(call cc-option, -Wunused-but-set-variable)
warning-1 += $(call cc-disable-warning, missing-field-initializers)
+ warning-1 += $(call cc-disable-warning, sign-compare)
+#warning-1 += $(call cc-option, -Wnull-dereference)
+warning-1 += $(call cc-option, -Wduplicated-cond)
@@ -132410,11 +158774,10 @@ index 4efedcb..0220ab2 100644
warning-2 += -Wdisabled-optimization
diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins
new file mode 100644
-index 0000000..2972943
+index 0000000..02fd848
--- /dev/null
+++ b/scripts/Makefile.gcc-plugins
-@@ -0,0 +1,72 @@
-+ifndef DISABLE_PAX_PLUGINS
+@@ -0,0 +1,69 @@
+__PLUGINCC := $(call cc-ifversion, -ge, 0408, $(HOSTCXX), $(HOSTCC))
+PLUGINCC := $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-plugin.sh "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)")
+ifneq ($(PLUGINCC),)
@@ -132433,12 +158796,6 @@ index 0000000..2972943
+KERNEXEC_PLUGIN_CFLAGS += -fplugin-arg-kernexec_plugin-method=$(CONFIG_PAX_KERNEXEC_PLUGIN_METHOD) -DKERNEXEC_PLUGIN
+KERNEXEC_PLUGIN_AFLAGS := -DKERNEXEC_PLUGIN
+endif
-+ifdef CONFIG_GRKERNSEC_RANDSTRUCT
-+RANDSTRUCT_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/randomize_layout_plugin.so -DRANDSTRUCT_PLUGIN
-+ifdef CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE
-+RANDSTRUCT_PLUGIN_CFLAGS += -fplugin-arg-randomize_layout_plugin-performance-mode
-+endif
-+endif
+ifdef CONFIG_CHECKER_PLUGIN
+ifeq ($(call cc-ifversion, -ge, 0406, y), y)
+CHECKER_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/checker_plugin.so -DCHECKER_PLUGIN
@@ -132461,13 +158818,19 @@ index 0000000..2972943
+STRUCTLEAK_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/structleak_plugin.so -DSTRUCTLEAK_PLUGIN
+endif
+INITIFY_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/initify_plugin.so -DINITIFY_PLUGIN
++ifdef CONFIG_PAX_RAP
++RAP_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/rap_plugin/rap_plugin.so -fplugin-arg-rap_plugin-check=call -DRAP_PLUGIN
++#RAP_PLUGIN_CFLAGS += -fplugin-arg-rap_plugin-report=func,fptr,abs
++RAP_PLUGIN_ABS_CFLAGS := -fplugin-arg-rap_plugin-hash=abs-finish
++RAP_PLUGIN_AFLAGS := -DRAP_PLUGIN
++endif
+GCC_PLUGINS_CFLAGS := $(CONSTIFY_PLUGIN_CFLAGS) $(STACKLEAK_PLUGIN_CFLAGS) $(KALLOCSTAT_PLUGIN_CFLAGS)
+GCC_PLUGINS_CFLAGS += $(KERNEXEC_PLUGIN_CFLAGS) $(CHECKER_PLUGIN_CFLAGS) $(COLORIZE_PLUGIN_CFLAGS)
+GCC_PLUGINS_CFLAGS += $(SIZE_OVERFLOW_PLUGIN_CFLAGS) $(LATENT_ENTROPY_PLUGIN_CFLAGS) $(STRUCTLEAK_PLUGIN_CFLAGS)
+GCC_PLUGINS_CFLAGS += $(INITIFY_PLUGIN_CFLAGS)
-+GCC_PLUGINS_CFLAGS += $(RANDSTRUCT_PLUGIN_CFLAGS)
-+GCC_PLUGINS_AFLAGS := $(KERNEXEC_PLUGIN_AFLAGS)
-+export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGINS_AFLAGS CONSTIFY_PLUGIN LATENT_ENTROPY_PLUGIN_CFLAGS
++GCC_PLUGINS_CFLAGS += $(RAP_PLUGIN_CFLAGS) $(RAP_PLUGIN_ABS_CFLAGS)
++GCC_PLUGINS_AFLAGS := $(KERNEXEC_PLUGIN_AFLAGS) $(RAP_PLUGIN_AFLAGS)
++export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGINS_AFLAGS CONSTIFY_PLUGIN LATENT_ENTROPY_PLUGIN_CFLAGS RAP_PLUGIN_CFLAGS RAP_PLUGIN_ABS_CFLAGS
+ifeq ($(KBUILD_EXTMOD),)
+gcc-plugins:
+ $(Q)$(MAKE) $(build)=tools/gcc
@@ -132477,15 +158840,13 @@ index 0000000..2972943
+else
+gcc-plugins:
+ifeq ($(call cc-ifversion, -ge, 0405, y), y)
-+ $(error Your gcc installation does not support plugins. If the necessary headers for plugin support are missing, they should be installed. On Debian, apt-get install gcc-<ver>-plugin-dev. If you choose to ignore this error and lessen the improvements provided by this patch, re-run make with the DISABLE_PAX_PLUGINS=y argument.)
++ $(warning warning, your gcc installation does not support plugins, perhaps the necessary headers are missing?)
+ $(CONFIG_SHELL) -x $(srctree)/scripts/gcc-plugin.sh "$(__PLUGINCC)" "$(HOSTCXX)" "$(CC)"
+else
-+ $(warning Warning, your gcc version does not support plugins, you should upgrade it to gcc 4.5 at least.)
-+endif
-+ $(warning PAX_MEMORY_STACKLEAK, constification, PAX_LATENT_ENTROPY and other features will be less secure. PAX_SIZE_OVERFLOW will not be active.)
++ $(warning warning, your gcc version does not support plugins, you should upgrade it to gcc 4.5 at least)
+endif
++ $(warning PAX_MEMORY_STACKLEAK and other features will be less secure)
+endif
-+
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index 133edfa..3cc6af2 100644
--- a/scripts/Makefile.host
@@ -132586,7 +158947,7 @@ index 133edfa..3cc6af2 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 c68fd61..f9a3b74 100644
+index 5b327c6..f7bdbac 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)
@@ -132902,7 +159263,7 @@ index 91ca126..5f7cad6 100644
struct gstr str_new(void);
void str_free(struct gstr *gs);
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
-index b05cc3d..72fb2a8 100644
+index aed678e..1a703de 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -109,7 +109,7 @@ void menu_add_dep(struct expr *dep)
@@ -132952,7 +159313,7 @@ index ba6c34e..ea10bce 100755
kallsymso=""
kallsyms_vmlinux=""
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
-index 5b96206..fc27edc 100644
+index 161dd0d..ca7a0f1 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -156,7 +156,7 @@ static void device_id_check(const char *modname, const char *device_id,
@@ -133009,7 +159370,7 @@ index 5b96206..fc27edc 100644
buf_printf(&mod->dev_table_buf,
"MODULE_ALIAS(\"pnp:d%s*\");\n", id);
-@@ -981,7 +981,7 @@ static void dmi_ascii_filter(char *d, const char *s)
+@@ -980,7 +980,7 @@ static void dmi_ascii_filter(char *d, const char *s)
static int do_dmi_entry(const char *filename, void *symval,
char *alias)
{
@@ -133019,7 +159380,7 @@ index 5b96206..fc27edc 100644
sprintf(alias, "dmi*");
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
-index e080746..73f4e65 100644
+index 48958d3..d5ccb52 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -37,6 +37,7 @@ static int vmlinux_section_warnings = 1;
@@ -133030,7 +159391,7 @@ index e080746..73f4e65 100644
static int sec_mismatch_verbose = 1;
static int sec_mismatch_fatal = 0;
/* ignore missing files */
-@@ -946,6 +947,7 @@ enum mismatch {
+@@ -947,6 +948,7 @@ enum mismatch {
ANY_EXIT_TO_ANY_INIT,
EXPORT_TO_INIT_EXIT,
EXTABLE_TO_NON_TEXT,
@@ -133038,7 +159399,7 @@ index e080746..73f4e65 100644
};
/**
-@@ -1072,6 +1074,12 @@ static const struct sectioncheck sectioncheck[] = {
+@@ -1073,6 +1075,12 @@ static const struct sectioncheck sectioncheck[] = {
.good_tosec = {ALL_TEXT_SECTIONS , NULL},
.mismatch = EXTABLE_TO_NON_TEXT,
.handler = extable_mismatch_handler,
@@ -133051,7 +159412,7 @@ index e080746..73f4e65 100644
}
};
-@@ -1221,10 +1229,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
+@@ -1222,10 +1230,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
continue;
if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
continue;
@@ -133064,7 +159425,7 @@ index e080746..73f4e65 100644
if (d < 0)
d = addr - sym->st_value;
if (d < distance) {
-@@ -1383,7 +1391,11 @@ static void report_sec_mismatch(const char *modname,
+@@ -1384,7 +1392,11 @@ static void report_sec_mismatch(const char *modname,
char *prl_from;
char *prl_to;
@@ -133077,7 +159438,7 @@ index e080746..73f4e65 100644
if (!sec_mismatch_verbose)
return;
-@@ -1507,6 +1519,14 @@ static void report_sec_mismatch(const char *modname,
+@@ -1508,6 +1520,14 @@ static void report_sec_mismatch(const char *modname,
fatal("There's a special handler for this mismatch type, "
"we should never get here.");
break;
@@ -133092,7 +159453,7 @@ index e080746..73f4e65 100644
}
fprintf(stderr, "\n");
}
-@@ -1896,7 +1916,7 @@ static void section_rel(const char *modname, struct elf_info *elf,
+@@ -1897,7 +1917,7 @@ static void section_rel(const char *modname, struct elf_info *elf,
static void check_sec_ref(struct module *mod, const char *modname,
struct elf_info *elf)
{
@@ -133101,7 +159462,7 @@ index e080746..73f4e65 100644
Elf_Shdr *sechdrs = elf->sechdrs;
/* Walk through all sections */
-@@ -2027,7 +2047,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
+@@ -2028,7 +2048,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
va_end(ap);
}
@@ -133110,7 +159471,7 @@ index e080746..73f4e65 100644
{
if (buf->size - buf->pos < len) {
buf->size += len + SZ;
-@@ -2257,7 +2277,7 @@ static void write_if_changed(struct buffer *b, const char *fname)
+@@ -2258,7 +2278,7 @@ static void write_if_changed(struct buffer *b, const char *fname)
if (fstat(fileno(file), &st) < 0)
goto close_write;
@@ -133119,7 +159480,7 @@ index e080746..73f4e65 100644
goto close_write;
tmp = NOFAIL(malloc(b->pos));
-@@ -2495,6 +2515,14 @@ int main(int argc, char **argv)
+@@ -2496,6 +2516,14 @@ int main(int argc, char **argv)
"Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
}
}
@@ -133186,7 +159547,7 @@ index 73a2c7d..df11b31 100644
__ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
__ksymtab_unused 0 : { *(SORT(___ksymtab_unused+*)) }
diff --git a/scripts/package/Makefile b/scripts/package/Makefile
-index 1aca224..3c71eb0 100644
+index c2c7389..81b8117 100644
--- a/scripts/package/Makefile
+++ b/scripts/package/Makefile
@@ -40,7 +40,7 @@ if test "$(objtree)" != "$(srctree)"; then \
@@ -133329,7 +159690,7 @@ index ba87004..3f4852c 100644
unsigned int secindex_strings;
diff --git a/scripts/tags.sh b/scripts/tags.sh
-index 2628890..1c2f5c6 100755
+index 23ba1c6..cad2484 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -26,7 +26,7 @@ else
@@ -133342,10 +159703,10 @@ index 2628890..1c2f5c6 100755
# Find all available archs
find_all_archs()
diff --git a/security/Kconfig b/security/Kconfig
-index e452378..d8f5de9 100644
+index e452378..51e3107 100644
--- a/security/Kconfig
+++ b/security/Kconfig
-@@ -4,6 +4,974 @@
+@@ -4,6 +4,987 @@
menu "Security options"
@@ -134307,6 +160668,19 @@ index e452378..d8f5de9 100644
+ Note that entropy extracted this way is not cryptographically
+ secure!
+
++config PAX_RAP
++ bool "Prevent code reuse attacks"
++ depends on X86_64 && !PARAVIRT
++ default y if GRKERNSEC_CONFIG_AUTO
++ help
++ By saying Y here the kernel will check indirect control transfers
++ in order to detect and prevent attacks that try to hijack control
++ flow by overwriting code pointers.
++
++ Note that the implementation requires a gcc with plugin support,
++ i.e., gcc 4.5 or newer. You may need to install the supporting
++ headers explicitly in addition to the normal gcc package.
++
+endmenu
+
+endmenu
@@ -134320,7 +160694,7 @@ index e452378..d8f5de9 100644
source security/keys/Kconfig
config SECURITY_DMESG_RESTRICT
-@@ -104,7 +1072,7 @@ config INTEL_TXT
+@@ -104,7 +1085,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
@@ -134358,7 +160732,7 @@ index c28b0f2..3b9fee0 100644
struct dentry *dents[AAFS_NS_SIZEOF];
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
-index dec607c..2f291ad9 100644
+index dec607c..37fe357 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,
@@ -134390,6 +160764,58 @@ index dec607c..2f291ad9 100644
struct path_cond cond = { d_backing_inode(old_dentry)->i_uid,
d_backing_inode(old_dentry)->i_mode
};
+@@ -677,11 +677,11 @@ static const struct kernel_param_ops param_ops_aalockpolicy = {
+ .get = param_get_aalockpolicy
+ };
+
+-static int param_set_audit(const char *val, struct kernel_param *kp);
+-static int param_get_audit(char *buffer, struct kernel_param *kp);
++static int param_set_audit(const char *val, const struct kernel_param *kp);
++static int param_get_audit(char *buffer, const struct kernel_param *kp);
+
+-static int param_set_mode(const char *val, struct kernel_param *kp);
+-static int param_get_mode(char *buffer, struct kernel_param *kp);
++static int param_set_mode(const char *val, const struct kernel_param *kp);
++static int param_get_mode(char *buffer, const struct kernel_param *kp);
+
+ /* Flag values, also controllable via /sys/module/apparmor/parameters
+ * We define special types as we want to do additional mediation.
+@@ -791,7 +791,7 @@ static int param_get_aauint(char *buffer, const struct kernel_param *kp)
+ return param_get_uint(buffer, kp);
+ }
+
+-static int param_get_audit(char *buffer, struct kernel_param *kp)
++static int param_get_audit(char *buffer, const struct kernel_param *kp)
+ {
+ if (!capable(CAP_MAC_ADMIN))
+ return -EPERM;
+@@ -802,7 +802,7 @@ static int param_get_audit(char *buffer, struct kernel_param *kp)
+ return sprintf(buffer, "%s", audit_mode_names[aa_g_audit]);
+ }
+
+-static int param_set_audit(const char *val, struct kernel_param *kp)
++static int param_set_audit(const char *val, const struct kernel_param *kp)
+ {
+ int i;
+ if (!capable(CAP_MAC_ADMIN))
+@@ -824,7 +824,7 @@ static int param_set_audit(const char *val, struct kernel_param *kp)
+ return -EINVAL;
+ }
+
+-static int param_get_mode(char *buffer, struct kernel_param *kp)
++static int param_get_mode(char *buffer, const struct kernel_param *kp)
+ {
+ if (!capable(CAP_MAC_ADMIN))
+ return -EPERM;
+@@ -835,7 +835,7 @@ static int param_get_mode(char *buffer, struct kernel_param *kp)
+ return sprintf(buffer, "%s", aa_profile_mode_names[aa_g_profile_mode]);
+ }
+
+-static int param_set_mode(const char *val, struct kernel_param *kp)
++static int param_set_mode(const char *val, const struct kernel_param *kp)
+ {
+ int i;
+ if (!capable(CAP_MAC_ADMIN))
diff --git a/security/apparmor/policy.c b/security/apparmor/policy.c
index 705c287..81257f1 100644
--- a/security/apparmor/policy.c
@@ -134460,7 +160886,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 e2a60c3..2e41dd3 100644
+index 585af61..b7d35ff 100644
--- a/security/integrity/ima/ima.h
+++ b/security/integrity/ima/ima.h
@@ -125,8 +125,8 @@ int ima_init_template(void);
@@ -134488,10 +160914,10 @@ index 1d950fb..a8f4eab 100644
result = ima_alloc_init_template(&event_data, &entry);
if (result < 0) {
diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c
-index 816d175..20079ae 100644
+index f355231..c71f640 100644
--- a/security/integrity/ima/ima_fs.c
+++ b/security/integrity/ima/ima_fs.c
-@@ -28,12 +28,12 @@
+@@ -30,12 +30,12 @@ static DEFINE_MUTEX(ima_write_mutex);
static int valid_policy = 1;
#define TMPBUFLEN 12
static ssize_t ima_show_htable_value(char __user *buf, size_t count,
@@ -134552,7 +160978,7 @@ index 5105c2c..a5010e6 100644
extern struct key_type key_type_request_key_auth;
extern struct key *request_key_auth_new(struct key *target,
diff --git a/security/keys/key.c b/security/keys/key.c
-index ab7997d..adba677 100644
+index 09ef276..ab2894f 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,
@@ -134564,7 +160990,7 @@ index ab7997d..adba677 100644
key->index_key.type = type;
key->user = user;
key->quotalen = quotalen;
-@@ -1073,7 +1073,9 @@ int register_key_type(struct key_type *ktype)
+@@ -1077,7 +1077,9 @@ int register_key_type(struct key_type *ktype)
struct key_type *p;
int ret;
@@ -134575,7 +161001,7 @@ index ab7997d..adba677 100644
ret = -EEXIST;
down_write(&key_types_sem);
-@@ -1085,7 +1087,7 @@ int register_key_type(struct key_type *ktype)
+@@ -1089,7 +1091,7 @@ int register_key_type(struct key_type *ktype)
}
/* store the type */
@@ -134584,7 +161010,7 @@ index ab7997d..adba677 100644
pr_notice("Key type %s registered\n", ktype->name);
ret = 0;
-@@ -1107,7 +1109,7 @@ EXPORT_SYMBOL(register_key_type);
+@@ -1111,7 +1113,7 @@ EXPORT_SYMBOL(register_key_type);
void unregister_key_type(struct key_type *ktype)
{
down_write(&key_types_sem);
@@ -134593,7 +161019,7 @@ index ab7997d..adba677 100644
downgrade_write(&key_types_sem);
key_gc_keytype(ktype);
pr_notice("Key type %s unregistered\n", ktype->name);
-@@ -1125,10 +1127,10 @@ void __init key_init(void)
+@@ -1129,10 +1131,10 @@ void __init key_init(void)
0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
/* add the special key types */
@@ -134910,7 +161336,7 @@ index ffd2025..df062c9 100644
/* PCM3052 register definitions */
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
-index 33e72c8..2b72441 100644
+index ebc9fdf..61f491e 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -1193,10 +1193,10 @@ snd_pcm_sframes_t snd_pcm_oss_write3(struct snd_pcm_substream *substream, const
@@ -134997,8 +161423,23 @@ index 1f64ab0..26a7233 100644
snd_leave_user(fs);
if (err < 0)
return err;
+diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
+index 3a9b66c..2b38b21 100644
+--- a/sound/core/pcm_lib.c
++++ b/sound/core/pcm_lib.c
+@@ -1867,8 +1867,9 @@ EXPORT_SYMBOL(snd_pcm_lib_ioctl);
+ * Even if more than one periods have elapsed since the last call, you
+ * have to call this only once.
+ */
+-void snd_pcm_period_elapsed(struct snd_pcm_substream *substream)
++void snd_pcm_period_elapsed(void *_substream)
+ {
++ struct snd_pcm_substream *substream = _substream;
+ struct snd_pcm_runtime *runtime;
+ unsigned long flags;
+
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
-index 4ba64fd..49be507 100644
+index 9106d8e..e7e2e3c 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,
@@ -135015,6 +161456,38 @@ index 4ba64fd..49be507 100644
break;
default:
result = -EINVAL;
+diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
+index 795437b..3650746 100644
+--- a/sound/core/rawmidi.c
++++ b/sound/core/rawmidi.c
+@@ -871,9 +871,10 @@ static int snd_rawmidi_control_ioctl(struct snd_card *card,
+ *
+ * Return: The size of read data, or a negative error code on failure.
+ */
+-int snd_rawmidi_receive(struct snd_rawmidi_substream *substream,
+- const unsigned char *buffer, int count)
++int snd_rawmidi_receive(void *_substream, const void *_buffer, int count)
+ {
++ struct snd_rawmidi_substream *substream = _substream;
++ const unsigned char *buffer = _buffer;
+ unsigned long flags;
+ int result = 0, count1;
+ struct snd_rawmidi_runtime *runtime = substream->runtime;
+diff --git a/sound/core/seq/oss/seq_oss_synth.c b/sound/core/seq/oss/seq_oss_synth.c
+index b16dbef04..8eb05a4 100644
+--- a/sound/core/seq/oss/seq_oss_synth.c
++++ b/sound/core/seq/oss/seq_oss_synth.c
+@@ -653,8 +653,8 @@ snd_seq_oss_synth_info_read(struct snd_info_buffer *buf)
+ rec->synth_type, rec->synth_subtype,
+ rec->nr_voices);
+ snd_iprintf(buf, " capabilities : ioctl %s / load_patch %s\n",
+- enabled_str((long)rec->oper.ioctl),
+- enabled_str((long)rec->oper.load_patch));
++ enabled_str(!!rec->oper.ioctl),
++ enabled_str(!!rec->oper.load_patch));
+ snd_use_lock_free(&rec->use_lock);
+ }
+ }
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index 58e79e0..19751d1 100644
--- a/sound/core/seq/seq_clientmgr.c
@@ -135120,7 +161593,7 @@ index 062c446..a4b6f4c 100644
};
diff --git a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c
-index c850345..71c5fd4 100644
+index c850345..ec0a853 100644
--- a/sound/core/seq/seq_memory.c
+++ b/sound/core/seq/seq_memory.c
@@ -87,7 +87,7 @@ int snd_seq_dump_var_event(const struct snd_seq_event *event,
@@ -135132,7 +161605,29 @@ index c850345..71c5fd4 100644
while (len > 0) {
int size = sizeof(buf);
if (len < size)
-@@ -158,7 +158,7 @@ int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, char
+@@ -126,15 +126,19 @@ EXPORT_SYMBOL(snd_seq_dump_var_event);
+ * expand the variable length event to linear buffer space.
+ */
+
+-static int seq_copy_in_kernel(char **bufptr, const void *src, int size)
++static int seq_copy_in_kernel(void *_bufptr, const void *src, int size)
+ {
++ char **bufptr = (char **)_bufptr;
++
+ memcpy(*bufptr, src, size);
+ *bufptr += size;
+ return 0;
+ }
+
+-static int seq_copy_in_user(char __user **bufptr, const void *src, int size)
++static int seq_copy_in_user(void *_bufptr, const void *src, int size)
+ {
++ char __user **bufptr = (char __user **)_bufptr;
++
+ if (copy_to_user(*bufptr, src, size))
+ return -EFAULT;
+ *bufptr += size;
+@@ -158,13 +162,13 @@ int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, char
if (event->data.ext.len & SNDRV_SEQ_EXT_USRPTR) {
if (! in_kernel)
return -EINVAL;
@@ -135141,7 +161636,15 @@ index c850345..71c5fd4 100644
return -EFAULT;
return newlen;
}
-@@ -344,7 +344,7 @@ int snd_seq_event_dup(struct snd_seq_pool *pool, struct snd_seq_event *event,
+ err = snd_seq_dump_var_event(event,
+- in_kernel ? (snd_seq_dump_func_t)seq_copy_in_kernel :
+- (snd_seq_dump_func_t)seq_copy_in_user,
++ in_kernel ? seq_copy_in_kernel :
++ seq_copy_in_user,
+ &buf);
+ return err < 0 ? err : newlen;
+ }
+@@ -344,7 +348,7 @@ int snd_seq_event_dup(struct snd_seq_pool *pool, struct snd_seq_event *event,
tmp->event = src->event;
src = src->next;
} else if (is_usrptr) {
@@ -135150,6 +161653,43 @@ index c850345..71c5fd4 100644
err = -EFAULT;
goto __error;
}
+diff --git a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c
+index 5dd0ee2..0208e35 100644
+--- a/sound/core/seq/seq_midi.c
++++ b/sound/core/seq/seq_midi.c
+@@ -111,8 +111,9 @@ static void snd_midi_input_event(struct snd_rawmidi_substream *substream)
+ }
+ }
+
+-static int dump_midi(struct snd_rawmidi_substream *substream, const char *buf, int count)
++static int dump_midi(void *_substream, const void *buf, int count)
+ {
++ struct snd_rawmidi_substream *substream = _substream;
+ struct snd_rawmidi_runtime *runtime;
+ int tmp;
+
+@@ -148,7 +149,7 @@ static int event_process_midi(struct snd_seq_event *ev, int direct,
+ pr_debug("ALSA: seq_midi: invalid sysex event flags = 0x%x\n", ev->flags);
+ return 0;
+ }
+- snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)dump_midi, substream);
++ snd_seq_dump_var_event(ev, dump_midi, substream);
+ snd_midi_event_reset_decode(msynth->parser);
+ } else {
+ if (msynth->parser == NULL)
+diff --git a/sound/core/seq/seq_virmidi.c b/sound/core/seq/seq_virmidi.c
+index c82ed3e..e11d039 100644
+--- a/sound/core/seq/seq_virmidi.c
++++ b/sound/core/seq/seq_virmidi.c
+@@ -90,7 +90,7 @@ static int snd_virmidi_dev_receive_event(struct snd_virmidi_dev *rdev,
+ if (ev->type == SNDRV_SEQ_EVENT_SYSEX) {
+ if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE)
+ continue;
+- snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)snd_rawmidi_receive, vmidi->substream);
++ snd_seq_dump_var_event(ev, snd_rawmidi_receive, vmidi->substream);
+ } else {
+ len = snd_midi_event_decode(vmidi->parser, msg, sizeof(msg), ev);
+ if (len > 0)
diff --git a/sound/core/sound.c b/sound/core/sound.c
index 175f9e4..3518d31 100644
--- a/sound/core/sound.c
@@ -135306,7 +161846,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 b02a5e8c..96ac8b5 100644
+index 0ac92ab..a2081aa 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,
@@ -135362,39 +161902,35 @@ index 48d6dca..a0266c23 100644
break;
default:
return -EINVAL;
-diff --git a/sound/firewire/scs1x.c b/sound/firewire/scs1x.c
-index 2dba848..c682aef 100644
---- a/sound/firewire/scs1x.c
-+++ b/sound/firewire/scs1x.c
-@@ -74,7 +74,7 @@ static void scs_output_trigger(struct snd_rawmidi_substream *stream, int up)
- {
- struct scs *scs = stream->rmidi->private_data;
+diff --git a/sound/firewire/oxfw/oxfw-scs1x.c b/sound/firewire/oxfw/oxfw-scs1x.c
+index bb53eb3..670cd89 100644
+--- a/sound/firewire/oxfw/oxfw-scs1x.c
++++ b/sound/firewire/oxfw/oxfw-scs1x.c
+@@ -278,9 +278,9 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *stream, int up)
-- ACCESS_ONCE(scs->output) = up ? stream : NULL;
-+ ACCESS_ONCE_RW(scs->output) = up ? stream : NULL;
if (up) {
- scs->output_idle = false;
- tasklet_schedule(&scs->tasklet);
-@@ -257,7 +257,7 @@ static void scs_input_trigger(struct snd_rawmidi_substream *stream, int up)
- {
- struct scs *scs = stream->rmidi->private_data;
-
-- ACCESS_ONCE(scs->input) = up ? stream : NULL;
-+ ACCESS_ONCE_RW(scs->input) = up ? stream : NULL;
+ scs->input_escape_count = 0;
+- ACCESS_ONCE(scs->input) = stream;
++ ACCESS_ONCE_RW(scs->input) = stream;
+ } else {
+- ACCESS_ONCE(scs->input) = NULL;
++ ACCESS_ONCE_RW(scs->input) = NULL;
+ }
}
- static void scs_input_escaped_byte(struct snd_rawmidi_substream *stream,
-@@ -473,8 +473,8 @@ static void scs_remove(struct fw_unit *unit)
-
- snd_card_disconnect(scs->card);
-
-- ACCESS_ONCE(scs->output) = NULL;
-- ACCESS_ONCE(scs->input) = NULL;
-+ ACCESS_ONCE_RW(scs->output) = NULL;
-+ ACCESS_ONCE_RW(scs->input) = NULL;
-
- wait_event(scs->idle_wait, scs->output_idle);
+@@ -310,10 +310,10 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *stream, int up)
+ scs->output_escaped = false;
+ scs->output_idle = false;
+- ACCESS_ONCE(scs->output) = stream;
++ ACCESS_ONCE_RW(scs->output) = stream;
+ tasklet_schedule(&scs->tasklet);
+ } else {
+- ACCESS_ONCE(scs->output) = NULL;
++ ACCESS_ONCE_RW(scs->output) = NULL;
+ }
+ }
+ static void midi_playback_drain(struct snd_rawmidi_substream *stream)
diff --git a/sound/oss/sb_audio.c b/sound/oss/sb_audio.c
index dc91072..d85a10a 100644
--- a/sound/oss/sb_audio.c
@@ -135446,6 +161982,275 @@ index 213a416..aeab5c9 100644
list_add(&s->list, &cs4297a_devs);
+diff --git a/sound/pci/als300.c b/sound/pci/als300.c
+index add3176..c9394d9 100644
+--- a/sound/pci/als300.c
++++ b/sound/pci/als300.c
+@@ -647,7 +647,7 @@ static int snd_als300_create(struct snd_card *card,
+ struct snd_als300 **rchip)
+ {
+ struct snd_als300 *chip;
+- void *irq_handler;
++ irq_handler_t irq_handler;
+ int err;
+
+ static struct snd_device_ops ops = {
+diff --git a/sound/pci/aw2/aw2-alsa.c b/sound/pci/aw2/aw2-alsa.c
+index 1677143..85aca1d 100644
+--- a/sound/pci/aw2/aw2-alsa.c
++++ b/sound/pci/aw2/aw2-alsa.c
+@@ -458,7 +458,6 @@ static int snd_aw2_pcm_prepare_playback(struct snd_pcm_substream *substream)
+
+ /* Define Interrupt callback */
+ snd_aw2_saa7146_define_it_playback_callback(pcm_device->stream_number,
+- (snd_aw2_saa7146_it_cb)
+ snd_pcm_period_elapsed,
+ (void *)substream);
+
+@@ -487,7 +486,6 @@ static int snd_aw2_pcm_prepare_capture(struct snd_pcm_substream *substream)
+
+ /* Define Interrupt callback */
+ snd_aw2_saa7146_define_it_capture_callback(pcm_device->stream_number,
+- (snd_aw2_saa7146_it_cb)
+ snd_pcm_period_elapsed,
+ (void *)substream);
+
+diff --git a/sound/pci/aw2/aw2-saa7146.c b/sound/pci/aw2/aw2-saa7146.c
+index 1d78904..d9c1056 100644
+--- a/sound/pci/aw2/aw2-saa7146.c
++++ b/sound/pci/aw2/aw2-saa7146.c
+@@ -262,7 +262,7 @@ void snd_aw2_saa7146_define_it_playback_callback(unsigned int stream_number,
+ {
+ if (stream_number < NB_STREAM_PLAYBACK) {
+ arr_substream_it_playback_cb[stream_number].p_it_callback =
+- (snd_aw2_saa7146_it_cb) p_it_callback;
++ p_it_callback;
+ arr_substream_it_playback_cb[stream_number].p_callback_param =
+ (void *)p_callback_param;
+ }
+@@ -275,7 +275,7 @@ void snd_aw2_saa7146_define_it_capture_callback(unsigned int stream_number,
+ {
+ if (stream_number < NB_STREAM_CAPTURE) {
+ arr_substream_it_capture_cb[stream_number].p_it_callback =
+- (snd_aw2_saa7146_it_cb) p_it_callback;
++ p_it_callback;
+ arr_substream_it_capture_cb[stream_number].p_callback_param =
+ (void *)p_callback_param;
+ }
+diff --git a/sound/pci/ctxfi/ctamixer.c b/sound/pci/ctxfi/ctamixer.c
+index 5fcbb06..f4b85df 100644
+--- a/sound/pci/ctxfi/ctamixer.c
++++ b/sound/pci/ctxfi/ctamixer.c
+@@ -297,8 +297,9 @@ static int put_amixer_rsc(struct amixer_mgr *mgr, struct amixer *amixer)
+ return 0;
+ }
+
+-int amixer_mgr_create(struct hw *hw, struct amixer_mgr **ramixer_mgr)
++int amixer_mgr_create(struct hw *hw, void **_ramixer_mgr)
+ {
++ struct amixer_mgr **ramixer_mgr = (struct amixer_mgr **)_ramixer_mgr;
+ int err;
+ struct amixer_mgr *amixer_mgr;
+
+@@ -326,8 +327,10 @@ error:
+ return err;
+ }
+
+-int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr)
++int amixer_mgr_destroy(void *_amixer_mgr)
+ {
++ struct amixer_mgr *amixer_mgr = _amixer_mgr;
++
+ rsc_mgr_uninit(&amixer_mgr->mgr);
+ kfree(amixer_mgr);
+ return 0;
+@@ -452,8 +455,9 @@ static int put_sum_rsc(struct sum_mgr *mgr, struct sum *sum)
+ return 0;
+ }
+
+-int sum_mgr_create(struct hw *hw, struct sum_mgr **rsum_mgr)
++int sum_mgr_create(struct hw *hw, void **_rsum_mgr)
+ {
++ struct sum_mgr **rsum_mgr = (struct sum_mgr **)_rsum_mgr;
+ int err;
+ struct sum_mgr *sum_mgr;
+
+@@ -481,8 +485,10 @@ error:
+ return err;
+ }
+
+-int sum_mgr_destroy(struct sum_mgr *sum_mgr)
++int sum_mgr_destroy(void *_sum_mgr)
+ {
++ struct sum_mgr *sum_mgr = _sum_mgr;
++
+ rsc_mgr_uninit(&sum_mgr->mgr);
+ kfree(sum_mgr);
+ return 0;
+diff --git a/sound/pci/ctxfi/ctamixer.h b/sound/pci/ctxfi/ctamixer.h
+index 2de18aa..2fbd01b 100644
+--- a/sound/pci/ctxfi/ctamixer.h
++++ b/sound/pci/ctxfi/ctamixer.h
+@@ -47,8 +47,8 @@ struct sum_mgr {
+ };
+
+ /* Constructor and destructor of daio resource manager */
+-int sum_mgr_create(struct hw *hw, struct sum_mgr **rsum_mgr);
+-int sum_mgr_destroy(struct sum_mgr *sum_mgr);
++int sum_mgr_create(struct hw *hw, void **rsum_mgr);
++int sum_mgr_destroy(void *sum_mgr);
+
+ /* Define the descriptor of a amixer resource */
+ struct amixer_rsc_ops;
+@@ -93,7 +93,7 @@ struct amixer_mgr {
+ };
+
+ /* Constructor and destructor of amixer resource manager */
+-int amixer_mgr_create(struct hw *hw, struct amixer_mgr **ramixer_mgr);
+-int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr);
++int amixer_mgr_create(struct hw *hw, void **ramixer_mgr);
++int amixer_mgr_destroy(void *amixer_mgr);
+
+ #endif /* CTAMIXER_H */
+diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c
+index 977a598..a787004 100644
+--- a/sound/pci/ctxfi/ctatc.c
++++ b/sound/pci/ctxfi/ctatc.c
+@@ -113,16 +113,16 @@ static struct {
+ int (*create)(struct hw *hw, void **rmgr);
+ int (*destroy)(void *mgr);
+ } rsc_mgr_funcs[NUM_RSCTYP] = {
+- [SRC] = { .create = (create_t)src_mgr_create,
+- .destroy = (destroy_t)src_mgr_destroy },
+- [SRCIMP] = { .create = (create_t)srcimp_mgr_create,
+- .destroy = (destroy_t)srcimp_mgr_destroy },
+- [AMIXER] = { .create = (create_t)amixer_mgr_create,
+- .destroy = (destroy_t)amixer_mgr_destroy },
+- [SUM] = { .create = (create_t)sum_mgr_create,
+- .destroy = (destroy_t)sum_mgr_destroy },
+- [DAIO] = { .create = (create_t)daio_mgr_create,
+- .destroy = (destroy_t)daio_mgr_destroy }
++ [SRC] = { .create = src_mgr_create,
++ .destroy = src_mgr_destroy },
++ [SRCIMP] = { .create = srcimp_mgr_create,
++ .destroy = srcimp_mgr_destroy },
++ [AMIXER] = { .create = amixer_mgr_create,
++ .destroy = amixer_mgr_destroy },
++ [SUM] = { .create = sum_mgr_create,
++ .destroy = sum_mgr_destroy },
++ [DAIO] = { .create = daio_mgr_create,
++ .destroy = daio_mgr_destroy }
+ };
+
+ static int
+diff --git a/sound/pci/ctxfi/ctdaio.c b/sound/pci/ctxfi/ctdaio.c
+index 7f089cb..6bea28e 100644
+--- a/sound/pci/ctxfi/ctdaio.c
++++ b/sound/pci/ctxfi/ctdaio.c
+@@ -687,8 +687,9 @@ static int daio_mgr_commit_write(struct daio_mgr *mgr)
+ return 0;
+ }
+
+-int daio_mgr_create(struct hw *hw, struct daio_mgr **rdaio_mgr)
++int daio_mgr_create(struct hw *hw, void **_rdaio_mgr)
+ {
++ struct daio_mgr **rdaio_mgr = (struct daio_mgr **)_rdaio_mgr;
+ int err, i;
+ struct daio_mgr *daio_mgr;
+ struct imapper *entry;
+@@ -741,8 +742,9 @@ error1:
+ return err;
+ }
+
+-int daio_mgr_destroy(struct daio_mgr *daio_mgr)
++int daio_mgr_destroy(void *_daio_mgr)
+ {
++ struct daio_mgr *daio_mgr = _daio_mgr;
+ unsigned long flags;
+
+ /* free daio input mapper list */
+diff --git a/sound/pci/ctxfi/ctdaio.h b/sound/pci/ctxfi/ctdaio.h
+index a30be73..91b8dbd 100644
+--- a/sound/pci/ctxfi/ctdaio.h
++++ b/sound/pci/ctxfi/ctdaio.h
+@@ -119,7 +119,7 @@ struct daio_mgr {
+ };
+
+ /* Constructor and destructor of daio resource manager */
+-int daio_mgr_create(struct hw *hw, struct daio_mgr **rdaio_mgr);
+-int daio_mgr_destroy(struct daio_mgr *daio_mgr);
++int daio_mgr_create(struct hw *hw, void **rdaio_mgr);
++int daio_mgr_destroy(void *daio_mgr);
+
+ #endif /* CTDAIO_H */
+diff --git a/sound/pci/ctxfi/ctsrc.c b/sound/pci/ctxfi/ctsrc.c
+index a5a72df..f86edb8 100644
+--- a/sound/pci/ctxfi/ctsrc.c
++++ b/sound/pci/ctxfi/ctsrc.c
+@@ -544,8 +544,9 @@ static int src_mgr_commit_write(struct src_mgr *mgr)
+ return 0;
+ }
+
+-int src_mgr_create(struct hw *hw, struct src_mgr **rsrc_mgr)
++int src_mgr_create(struct hw *hw, void **_rsrc_mgr)
+ {
++ struct src_mgr **rsrc_mgr = (struct src_mgr **)_rsrc_mgr;
+ int err, i;
+ struct src_mgr *src_mgr;
+
+@@ -584,8 +585,10 @@ error1:
+ return err;
+ }
+
+-int src_mgr_destroy(struct src_mgr *src_mgr)
++int src_mgr_destroy(void *_src_mgr)
+ {
++ struct src_mgr *src_mgr = _src_mgr;
++
+ rsc_mgr_uninit(&src_mgr->mgr);
+ kfree(src_mgr);
+
+@@ -828,8 +831,9 @@ static int srcimp_imap_delete(struct srcimp_mgr *mgr, struct imapper *entry)
+ return err;
+ }
+
+-int srcimp_mgr_create(struct hw *hw, struct srcimp_mgr **rsrcimp_mgr)
++int srcimp_mgr_create(struct hw *hw, void **_rsrcimp_mgr)
+ {
++ struct srcimp_mgr **rsrcimp_mgr = (struct srcimp_mgr **)_rsrcimp_mgr;
+ int err;
+ struct srcimp_mgr *srcimp_mgr;
+ struct imapper *entry;
+@@ -873,8 +877,9 @@ error1:
+ return err;
+ }
+
+-int srcimp_mgr_destroy(struct srcimp_mgr *srcimp_mgr)
++int srcimp_mgr_destroy(void *_srcimp_mgr)
+ {
++ struct srcimp_mgr *srcimp_mgr = _srcimp_mgr;
+ unsigned long flags;
+
+ /* free src input mapper list */
+diff --git a/sound/pci/ctxfi/ctsrc.h b/sound/pci/ctxfi/ctsrc.h
+index 92944a0..fc78ed4 100644
+--- a/sound/pci/ctxfi/ctsrc.h
++++ b/sound/pci/ctxfi/ctsrc.h
+@@ -143,10 +143,10 @@ struct srcimp_mgr {
+ };
+
+ /* Constructor and destructor of SRC resource manager */
+-int src_mgr_create(struct hw *hw, struct src_mgr **rsrc_mgr);
+-int src_mgr_destroy(struct src_mgr *src_mgr);
++int src_mgr_create(struct hw *hw, void **rsrc_mgr);
++int src_mgr_destroy(void *src_mgr);
+ /* Constructor and destructor of SRCIMP resource manager */
+-int srcimp_mgr_create(struct hw *hw, struct srcimp_mgr **rsrc_mgr);
+-int srcimp_mgr_destroy(struct srcimp_mgr *srcimp_mgr);
++int srcimp_mgr_create(struct hw *hw, void **rsrc_mgr);
++int srcimp_mgr_destroy(void *srcimp_mgr);
+
+ #endif /* CTSRC_H */
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 8374188..f073778 100644
--- a/sound/pci/hda/hda_codec.c
@@ -135516,6 +162321,32 @@ index 4c26076..a13f370 100644
chip->card = card;
chip->pci = pci;
chip->irq = -1;
+diff --git a/sound/soc/codecs/cx20442.c b/sound/soc/codecs/cx20442.c
+index d6f4abb..5d59f0c 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)
+ return 0;
+ }
+
++static int v253_hw_write(void *client, const char *buf, int count)
++{
++ struct tty_struct *tty = client;
++ return tty->ops->write(client, buf, count);
++}
++
+ /* 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,
+
+ /* Set up codec driver access to modem controls */
+ cx20442->control_data = tty;
+- codec->hw_write = (hw_write_t)tty->ops->write;
++ codec->hw_write = v253_hw_write;
+ codec->component.card->pop_time = 1;
+ }
+ }
diff --git a/sound/soc/codecs/sti-sas.c b/sound/soc/codecs/sti-sas.c
index 160d61a..10bfd63 100644
--- a/sound/soc/codecs/sti-sas.c
@@ -135538,14 +162369,63 @@ index 160d61a..10bfd63 100644
/* Store context */
dev_set_drvdata(&pdev->dev, drvdata);
+diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
+index f7a6ce7..82310c8 100644
+--- a/sound/soc/codecs/tlv320dac33.c
++++ b/sound/soc/codecs/tlv320dac33.c
+@@ -1375,13 +1375,18 @@ static int dac33_set_dai_fmt(struct snd_soc_dai *codec_dai,
+ return 0;
+ }
+
++static int dac33_hw_write(void *client, const char *buf, int count)
++{
++ return i2c_master_send(client, buf, count);
++}
++
+ static int dac33_soc_probe(struct snd_soc_codec *codec)
+ {
+ struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
+ int ret = 0;
+
+ codec->control_data = dac33->control_data;
+- codec->hw_write = (hw_write_t) i2c_master_send;
++ codec->hw_write = dac33_hw_write;
+ dac33->codec = codec;
+
+ /* Read the tlv320dac33 ID registers */
+diff --git a/sound/soc/codecs/uda1380.c b/sound/soc/codecs/uda1380.c
+index 35f0469..7c25cd5 100644
+--- a/sound/soc/codecs/uda1380.c
++++ b/sound/soc/codecs/uda1380.c
+@@ -687,6 +687,11 @@ static struct snd_soc_dai_driver uda1380_dai[] = {
+ },
+ };
+
++static int uda1380_hw_write(void *client, const char *buf, int count)
++{
++ return i2c_master_send(client, buf, count);
++}
++
+ static int uda1380_probe(struct snd_soc_codec *codec)
+ {
+ struct uda1380_platform_data *pdata =codec->dev->platform_data;
+@@ -695,7 +700,7 @@ static int uda1380_probe(struct snd_soc_codec *codec)
+
+ uda1380->codec = codec;
+
+- codec->hw_write = (hw_write_t)i2c_master_send;
++ codec->hw_write = uda1380_hw_write;
+ codec->control_data = uda1380->control_data;
+
+ if (!pdata)
diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h
-index 6bfcef4..201ca47 100644
+index cbb4075..edda3dd 100644
--- a/sound/soc/intel/skylake/skl-sst-dsp.h
+++ b/sound/soc/intel/skylake/skl-sst-dsp.h
-@@ -114,14 +114,14 @@ struct skl_dsp_fw_ops {
- int (*set_state_D0)(struct sst_dsp *ctx);
- int (*set_state_D3)(struct sst_dsp *ctx);
- unsigned int (*get_fw_errcode)(struct sst_dsp *ctx);
+@@ -117,14 +117,14 @@ struct skl_dsp_fw_ops {
+ int (*load_mod)(struct sst_dsp *ctx, u16 mod_id, char *mod_name);
+ int (*unload_mod)(struct sst_dsp *ctx, u16 mod_id);
+
-};
+} __no_const;
@@ -135557,13 +162437,13 @@ index 6bfcef4..201ca47 100644
-};
+} __no_const;
- void skl_cldma_process_intr(struct sst_dsp *ctx);
- void skl_cldma_int_disable(struct sst_dsp *ctx);
+ struct skl_load_module_info {
+ u16 mod_id;
diff --git a/sound/soc/soc-ac97.c b/sound/soc/soc-ac97.c
-index d40efc9..4dbd571 100644
+index 7e0acd8..7fe0f65 100644
--- a/sound/soc/soc-ac97.c
+++ b/sound/soc/soc-ac97.c
-@@ -291,8 +291,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
+@@ -416,8 +416,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
if (ret)
return ret;
@@ -135772,10 +162652,10 @@ index 0000000..de92ed9
+randomize_layout_seed.h
diff --git a/tools/gcc/Makefile b/tools/gcc/Makefile
new file mode 100644
-index 0000000..4945d82
+index 0000000..f1db084
--- /dev/null
+++ b/tools/gcc/Makefile
-@@ -0,0 +1,54 @@
+@@ -0,0 +1,58 @@
+#CC := gcc
+#PLUGIN_SOURCE_FILES := pax_plugin.c
+#PLUGIN_OBJECT_FILES := $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
@@ -135784,11 +162664,11 @@ index 0000000..4945d82
+
+ifeq ($(PLUGINCC),$(HOSTCC))
+HOSTLIBS := hostlibs
-+HOST_EXTRACFLAGS += -I$(GCCPLUGINS_DIR)/include -I$(src) -std=gnu99 -ggdb
++HOST_EXTRACFLAGS += -I$(GCCPLUGINS_DIR)/include -I$(src) -std=gnu99 -ggdb -Wall -W
+export HOST_EXTRACFLAGS
+else
+HOSTLIBS := hostcxxlibs
-+HOST_EXTRACXXFLAGS += -I$(GCCPLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti -fno-exceptions -fasynchronous-unwind-tables -ggdb -Wno-unused-parameter -Wno-narrowing -Wno-unused-variable
++HOST_EXTRACXXFLAGS += -I$(GCCPLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti -fno-exceptions -fasynchronous-unwind-tables -ggdb -Wall -W -Wno-unused-parameter -Wno-narrowing -Wno-unused-variable
+export HOST_EXTRACXXFLAGS
+endif
+
@@ -135808,6 +162688,9 @@ index 0000000..4945d82
+subdir-$(CONFIG_PAX_SIZE_OVERFLOW) := size_overflow_plugin
+subdir- += size_overflow_plugin
+
++subdir-$(CONFIG_PAX_RAP) += rap_plugin
++subdir- += rap_plugin
++
+always := $($(HOSTLIBS)-y)
+
+constify_plugin-objs := constify_plugin.o
@@ -135819,6 +162702,7 @@ index 0000000..4945d82
+latent_entropy_plugin-objs := latent_entropy_plugin.o
+structleak_plugin-objs := structleak_plugin.o
+initify_plugin-objs := initify_plugin.o
++rap_plugin-objs := rap_plugin.o sip.o
+randomize_layout_plugin-objs := randomize_layout_plugin.o
+
+$(obj)/randomize_layout_plugin.o: $(objtree)/$(obj)/randomize_layout_seed.h
@@ -136334,7 +163218,7 @@ index 0000000..efaf576
+}
diff --git a/tools/gcc/colorize_plugin.c b/tools/gcc/colorize_plugin.c
new file mode 100644
-index 0000000..eec3fd1
+index 0000000..ffe60f6
--- /dev/null
+++ b/tools/gcc/colorize_plugin.c
@@ -0,0 +1,162 @@
@@ -136433,7 +163317,7 @@ index 0000000..eec3fd1
+
+#define PASS_NAME colorize_rearm
+#define NO_GATE
-+#include "gcc-generate-gimple-pass.h"
++#include "gcc-generate-simple_ipa-pass.h"
+
+static void colorize_start_unit(void *gcc_data, void *user_data)
+{
@@ -137029,10 +163913,10 @@ index 0000000..b52a700
+}
diff --git a/tools/gcc/gcc-common.h b/tools/gcc/gcc-common.h
new file mode 100644
-index 0000000..fbed673
+index 0000000..0c0b842
--- /dev/null
+++ b/tools/gcc/gcc-common.h
-@@ -0,0 +1,858 @@
+@@ -0,0 +1,879 @@
+#ifndef GCC_COMMON_H_INCLUDED
+#define GCC_COMMON_H_INCLUDED
+
@@ -137347,6 +164231,22 @@ index 0000000..fbed673
+ return NULL;
+}
+
++static inline bool cgraph_for_node_and_aliases(cgraph_node_ptr node, bool (*callback)(cgraph_node_ptr, void *), void *data, bool include_overwritable)
++{
++ cgraph_node_ptr alias;
++
++ if (callback(node, data))
++ return true;
++
++ for (alias = node->same_body; alias; alias = alias->next) {
++ if (include_overwritable || cgraph_function_body_availability(alias) > AVAIL_OVERWRITABLE)
++ if (cgraph_for_node_and_aliases(alias, callback, data, include_overwritable))
++ return true;
++ }
++
++ return false;
++}
++
+#define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
+ for ((node) = cgraph_first_function_with_gimple_body(); (node); \
+ (node) = cgraph_next_function_with_gimple_body(node))
@@ -137736,6 +164636,11 @@ index 0000000..fbed673
+ return node->get_alias_target();
+}
+
++static inline bool cgraph_for_node_and_aliases(cgraph_node_ptr node, bool (*callback)(cgraph_node_ptr, void *), void *data, bool include_overwritable)
++{
++ return node->call_for_symbol_thunks_and_aliases(callback, data, include_overwritable);
++}
++
+static inline struct cgraph_node_hook_list *cgraph_add_function_insertion_hook(cgraph_node_hook hook, void *data)
+{
+ return symtab->add_cgraph_insertion_hook(hook, data);
@@ -139428,7 +166333,7 @@ index 0000000..30ecc9a
+}
diff --git a/tools/gcc/kernexec_plugin.c b/tools/gcc/kernexec_plugin.c
new file mode 100644
-index 0000000..5598420
+index 0000000..e31e92f
--- /dev/null
+++ b/tools/gcc/kernexec_plugin.c
@@ -0,0 +1,407 @@
@@ -139816,10 +166721,10 @@ index 0000000..5598420
+ error(G_("no value supplied for option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
+ continue;
+ }
-+ if (!strcmp(argv[i].value, "bts")) {
++ if (!strcmp(argv[i].value, "bts") || !strcmp(argv[i].value, "\"bts\"")) {
+ kernexec_instrument_fptr = kernexec_instrument_fptr_bts;
+ kernexec_instrument_retaddr = kernexec_instrument_retaddr_bts;
-+ } else if (!strcmp(argv[i].value, "or")) {
++ } else if (!strcmp(argv[i].value, "or") || !strcmp(argv[i].value, "\"or\"")) {
+ kernexec_instrument_fptr = kernexec_instrument_fptr_or;
+ kernexec_instrument_retaddr = kernexec_instrument_retaddr_or;
+ fix_register("r12", 1, 1);
@@ -141208,6 +168113,1258 @@ index 0000000..c77d26d
+
+ return 0;
+}
+diff --git a/tools/gcc/rap_plugin/Makefile b/tools/gcc/rap_plugin/Makefile
+new file mode 100644
+index 0000000..8171be8
+--- /dev/null
++++ b/tools/gcc/rap_plugin/Makefile
+@@ -0,0 +1,4 @@
++$(HOSTLIBS)-$(CONFIG_PAX_RAP) += rap_plugin.so
++always := $($(HOSTLIBS)-y)
++
++rap_plugin-objs := $(patsubst $(srctree)/$(src)/%.c,%.o,$(wildcard $(srctree)/$(src)/*.c))
+diff --git a/tools/gcc/rap_plugin/rap.h b/tools/gcc/rap_plugin/rap.h
+new file mode 100644
+index 0000000..f6a284d
+--- /dev/null
++++ b/tools/gcc/rap_plugin/rap.h
+@@ -0,0 +1,36 @@
++#ifndef RAP_H_INCLUDED
++#define RAP_H_INCLUDED
++
++#include "gcc-common.h"
++
++typedef struct {
++ int hash; // will be sign extended to long in reality
++} rap_hash_t;
++
++typedef struct {
++ unsigned int qual_const:1;
++ unsigned int qual_volatile:1;
++} rap_hash_flags_t;
++extern rap_hash_flags_t imprecise_rap_hash_flags;
++
++extern bool report_fptr_hash;
++
++extern GTY(()) tree rap_hash_type_node;
++
++void siphash24fold(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *k);
++void rap_calculate_func_hashes(void *event_data, void *data);
++rap_hash_t rap_hash_function_type(const_tree fntype, rap_hash_flags_t flags);
++rap_hash_t rap_hash_function_decl(const_tree fndecl, rap_hash_flags_t flags);
++rap_hash_t rap_hash_function_node_imprecise(cgraph_node_ptr node);
++const_tree type_name(const_tree type);
++tree create_new_var(tree type, const char *name);
++
++gimple barrier(tree var, bool full);
++
++#if BUILDING_GCC_VERSION >= 4009
++opt_pass *make_rap_fptr_pass(void);
++#else
++struct opt_pass *make_rap_fptr_pass(void);
++#endif
++
++#endif
+diff --git a/tools/gcc/rap_plugin/rap_fptr_pass.c b/tools/gcc/rap_plugin/rap_fptr_pass.c
+new file mode 100644
+index 0000000..7e377d7
+--- /dev/null
++++ b/tools/gcc/rap_plugin/rap_fptr_pass.c
+@@ -0,0 +1,220 @@
++/*
++ * Copyright 2012-2016 by PaX Team <pageexec@freemail.hu>
++ * Licensed under the GPL v2
++ *
++ * Homepage: http://pax.grsecurity.net/
++ */
++
++#include "rap.h"
++
++bool report_fptr_hash;
++
++static bool rap_fptr_gate(void)
++{
++#ifdef TARGET_386
++ tree section;
++
++ if (!TARGET_64BIT || ix86_cmodel != CM_KERNEL)
++ return true;
++
++ section = lookup_attribute("section", DECL_ATTRIBUTES(current_function_decl));
++ if (!section || !TREE_VALUE(section))
++ return true;
++
++ section = TREE_VALUE(TREE_VALUE(section));
++ return strncmp(TREE_STRING_POINTER(section), ".vsyscall_", 10);
++#else
++#error unsupported target
++#endif
++}
++
++static tree build_rap_hash(gimple call_stmt, tree fntype)
++{
++ rap_hash_t hash;
++
++ hash = rap_hash_function_type(fntype, imprecise_rap_hash_flags);
++ if (report_fptr_hash)
++ inform(gimple_location(call_stmt), "fptr rap_hash: %x", hash.hash);
++ return build_int_cst_type(rap_hash_type_node, hash.hash);
++}
++
++// check the function hash of the target of the fptr
++static basic_block rap_instrument_fptr(gimple_stmt_iterator *gsi)
++{
++ gimple assign_hash, check_hash, call_stmt, stmt;
++ location_t loc;
++ tree computed_hash, target_hash, fptr, fntype;
++#if BUILDING_GCC_VERSION == 4005
++ tree fptr2;
++#endif
++ basic_block cond_bb, join_bb, true_bb;
++ edge e;
++ const HOST_WIDE_INT rap_hash_offset = 2 * sizeof(rap_hash_t);
++
++ call_stmt = gsi_stmt(*gsi);
++ loc = gimple_location(call_stmt);
++ fptr = gimple_call_fn(call_stmt);
++ fntype = TREE_TYPE(TREE_TYPE(fptr));
++
++ if (TREE_CODE(fntype) == FUNCTION_TYPE) {
++ computed_hash = build_rap_hash(call_stmt, fntype);
++ } else {
++ debug_tree(fntype);
++ gcc_unreachable();
++ }
++
++ // target_hash = ((s64*)fptr)[-rap_hash_offset]
++ target_hash = create_tmp_var(rap_hash_type_node, "rap_hash");
++ add_referenced_var(target_hash);
++ target_hash = make_ssa_name(target_hash, NULL);
++#if BUILDING_GCC_VERSION == 4005
++ fptr2 = create_tmp_var(ptr_type_node, "rap_fptr2");
++ fptr2 = make_ssa_name(fptr2, NULL);
++ assign_hash = gimple_build_assign(fptr2, build2(POINTER_PLUS_EXPR, ptr_type_node, fptr, build_int_cst_type(sizetype, -rap_hash_offset)));
++ gimple_set_location(assign_hash, loc);
++ SSA_NAME_DEF_STMT(fptr2) = assign_hash;
++ gsi_insert_before(gsi, assign_hash, GSI_SAME_STMT);
++ update_stmt(assign_hash);
++ fptr = gimple_get_lhs(assign_hash);
++
++ fptr2 = create_tmp_var(build_pointer_type(rap_hash_type_node), "rap_fptr2");
++ fptr2 = make_ssa_name(fptr2, NULL);
++ assign_hash = gimple_build_assign(fptr2, fold_convert(build_pointer_type(TREE_TYPE(target_hash)), fptr));
++ gimple_set_location(assign_hash, loc);
++ SSA_NAME_DEF_STMT(fptr2) = assign_hash;
++ gsi_insert_before(gsi, assign_hash, GSI_SAME_STMT);
++ update_stmt(assign_hash);
++ fptr = gimple_get_lhs(assign_hash);
++
++ assign_hash = gimple_build_assign(target_hash, build1(INDIRECT_REF, rap_hash_type_node, fptr));
++#else
++ assign_hash = gimple_build_assign(target_hash, build2(MEM_REF, rap_hash_type_node, fptr, build_int_cst_type(build_pointer_type(rap_hash_type_node), -rap_hash_offset)));
++#endif
++ gimple_set_location(assign_hash, loc);
++ SSA_NAME_DEF_STMT(target_hash) = assign_hash;
++ gsi_insert_before(gsi, assign_hash, GSI_NEW_STMT);
++ update_stmt(assign_hash);
++
++ // compare target_hash against computed function hash
++ // bail out on mismatch
++ check_hash = gimple_build_cond(NE_EXPR, target_hash, computed_hash, NULL_TREE, NULL_TREE);
++ gimple_set_location(check_hash, loc);
++ gsi_insert_after(gsi, check_hash, GSI_NEW_STMT);
++
++ cond_bb = gimple_bb(gsi_stmt(*gsi));
++ gcc_assert(!gsi_end_p(*gsi));
++ gcc_assert(check_hash == gsi_stmt(*gsi));
++
++ e = split_block(cond_bb, gsi_stmt(*gsi));
++ cond_bb = e->src;
++ join_bb = e->dest;
++ e->flags = EDGE_FALSE_VALUE;
++ e->probability = REG_BR_PROB_BASE;
++
++ true_bb = create_empty_bb(EXIT_BLOCK_PTR_FOR_FN(cfun)->prev_bb);
++ make_edge(cond_bb, true_bb, EDGE_TRUE_VALUE | EDGE_PRESERVE);
++
++ gcc_assert(dom_info_available_p(CDI_DOMINATORS));
++ set_immediate_dominator(CDI_DOMINATORS, true_bb, cond_bb);
++ set_immediate_dominator(CDI_DOMINATORS, join_bb, cond_bb);
++
++ gcc_assert(cond_bb->loop_father == join_bb->loop_father);
++ add_bb_to_loop(true_bb, cond_bb->loop_father);
++
++ *gsi = gsi_start_bb(true_bb);
++
++ // this fake dependency is to prevent PRE from merging this BB with others of the same kind
++ stmt = barrier(fptr, false);
++ gimple_set_location(stmt, loc);
++ gsi_insert_after(gsi, stmt, GSI_CONTINUE_LINKING);
++
++ stmt = gimple_build_call(builtin_decl_implicit(BUILT_IN_TRAP), 0);
++ gimple_set_location(stmt, loc);
++ gsi_insert_after(gsi, stmt, GSI_CONTINUE_LINKING);
++
++ return join_bb;
++}
++
++// find all language level function pointer dereferences and verify the target function
++static unsigned int rap_fptr_execute(void)
++{
++ basic_block bb;
++
++ loop_optimizer_init(LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS);
++ gcc_assert(current_loops);
++
++ calculate_dominance_info(CDI_DOMINATORS);
++ calculate_dominance_info(CDI_POST_DOMINATORS);
++
++ // 1. loop through BBs and GIMPLE statements
++ FOR_EACH_BB_FN(bb, cfun) {
++ gimple_stmt_iterator gsi;
++
++ for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi)) {
++ // gimple match: h_1 = get_fptr (); D.2709_3 = h_1 (x_2(D));
++ tree fptr, fntype;
++ gimple call_stmt;
++
++ // is it a call ...
++ call_stmt = gsi_stmt(gsi);
++ if (!is_gimple_call(call_stmt))
++ continue;
++
++ fptr = gimple_call_fn(call_stmt);
++ if (!fptr)
++ continue;
++
++ switch (TREE_CODE(fptr)) {
++ default:
++ debug_gimple_stmt(call_stmt);
++ debug_tree(fptr);
++ debug_tree(TREE_TYPE(fptr));
++ gcc_unreachable();
++
++ case ADDR_EXPR:
++ continue;
++
++ case SSA_NAME:
++ if (SSA_NAME_VAR(fptr) == NULL_TREE)
++ break;
++
++ switch (TREE_CODE(SSA_NAME_VAR(fptr))) {
++ default:
++ debug_gimple_stmt(call_stmt);
++ debug_tree(fptr);
++ gcc_unreachable();
++
++ case VAR_DECL:
++ case PARM_DECL:
++ break;
++ }
++ break;
++
++ case INTEGER_CST:
++ case OBJ_TYPE_REF:
++ break;
++ }
++
++ // ... through a function pointer
++ fntype = TREE_TYPE(fptr);
++ if (TREE_CODE(fntype) != POINTER_TYPE)
++ continue;
++
++ fntype = TREE_TYPE(fntype);
++ gcc_assert(TREE_CODE(fntype) == FUNCTION_TYPE || TREE_CODE(fntype) == METHOD_TYPE);
++
++ bb = rap_instrument_fptr(&gsi);
++ gsi = gsi_start_bb(bb);
++ }
++ }
++
++ free_dominance_info(CDI_DOMINATORS);
++ free_dominance_info(CDI_POST_DOMINATORS);
++ loop_optimizer_finalize();
++
++ return 0;
++}
++
++#define PASS_NAME rap_fptr
++#define TODO_FLAGS_FINISH TODO_verify_ssa | TODO_verify_stmts | TODO_dump_func | TODO_remove_unused_locals | TODO_update_ssa | TODO_cleanup_cfg | TODO_rebuild_cgraph_edges | TODO_verify_flow
++#include "gcc-generate-gimple-pass.h"
+diff --git a/tools/gcc/rap_plugin/rap_hash.c b/tools/gcc/rap_plugin/rap_hash.c
+new file mode 100644
+index 0000000..ebdcf7c
+--- /dev/null
++++ b/tools/gcc/rap_plugin/rap_hash.c
+@@ -0,0 +1,381 @@
++/*
++ * Copyright 2012-2016 by PaX Team <pageexec@freemail.hu>
++ * Licensed under the GPL v2
++ *
++ * Homepage: http://pax.grsecurity.net/
++ */
++
++#include "rap.h"
++
++static rap_hash_t *rap_imprecise_hashes;
++static int rap_cgraph_max_uid;
++
++static void rap_hash_function(const_tree fntype, rap_hash_flags_t flags, unsigned char sip_hash[8]);
++
++static const unsigned char rap_hash_tree_code[MAX_TREE_CODES] = {
++ [0] = 0,
++ [1] = 0,
++ [2] = 0,
++ [3] = 0,
++ [4] = 0,
++ [OFFSET_TYPE] = 10,
++ [ENUMERAL_TYPE] = 20,
++ [BOOLEAN_TYPE] = 30,
++ [INTEGER_TYPE] = 40,
++ [REAL_TYPE] = 50,
++ [POINTER_TYPE] = 60,
++ [REFERENCE_TYPE] = 70,
++#if BUILDING_GCC_VERSION >= 4006
++ [NULLPTR_TYPE] = 80,
++#endif
++ [FIXED_POINT_TYPE] = 0,
++ [COMPLEX_TYPE] = 100,
++ [VECTOR_TYPE] = 110,
++ [ARRAY_TYPE] = 120,
++ [RECORD_TYPE] = 130,
++ [UNION_TYPE] = 140,
++ [QUAL_UNION_TYPE] = 0,
++ [VOID_TYPE] = 160,
++#if BUILDING_GCC_VERSION >= 5000
++ [POINTER_BOUNDS_TYPE] = 170,
++#endif
++ [FUNCTION_TYPE] = 180,
++ [METHOD_TYPE] = 0,
++ [LANG_TYPE] = 0,
++};
++
++static void rap_fold_hash(unsigned char *out, const unsigned char *in, unsigned long long inlen)
++{
++ static const unsigned char rap_sip_key[16] = {
++ 'P', 'a', 'X', ' ', 'T', 'e', 'a', 'm',
++ 'R', 'A', 'P', ' ', 'H', 'A', 'S', 'H',
++ };
++
++ siphash24fold(out, in, inlen, rap_sip_key);
++}
++
++// compute the final hash value in the range [1,INT_MAX]
++// the % and +1 trick leaves the value 0 available for marking non-indirectly callable functions
++// and INT_MIN (0x80000000) for longjmp targets (sign extended)
++// return places will use the (sign extended) range [INT_MIN+1,-1] ([0x8000001,0xffffffff])
++static rap_hash_t rap_extract_hash(const unsigned char sip_hash[8])
++{
++ rap_hash_t hash;
++ unsigned long long dividend, divisor;
++
++ memcpy(&dividend, sip_hash, sizeof dividend);
++// divisor = 1ULL << (sizeof hash * 8 - 1);
++// divisor |= divisor - 1;
++ divisor = 0x7fffffffUL;
++ hash.hash = dividend % divisor + 1;
++ return hash;
++}
++
++static void rap_hash_type_name(const_tree type, unsigned char sip_hash[8])
++{
++ const_tree name = type_name(TYPE_MAIN_VARIANT(type));
++
++ // handle typedefs of anonymous structs/unions
++ if (name == NULL_TREE)
++ name = type_name(type);
++
++ if (name == NULL_TREE)
++ return;
++
++ gcc_assert(TREE_CODE(name) == IDENTIFIER_NODE);
++ rap_fold_hash(sip_hash, (const unsigned char *)IDENTIFIER_POINTER(name), IDENTIFIER_LENGTH(name));
++}
++
++static void rap_hash_type_precision(const_tree type, unsigned char sip_hash[8])
++{
++ unsigned HOST_WIDE_INT size;
++
++ gcc_assert(TYPE_PRECISION(type));
++
++ size = TYPE_PRECISION(type);
++ rap_fold_hash(sip_hash, (const unsigned char *)&size, sizeof size);
++}
++
++const_tree type_name(const_tree type)
++{
++ const_tree name;
++
++ name = TYPE_NAME(type);
++ if (!name)
++ return NULL_TREE;
++
++ switch (TREE_CODE(name)) {
++ case IDENTIFIER_NODE:
++ return name;
++
++ case TYPE_DECL:
++ gcc_assert(DECL_NAME(name));
++ return DECL_NAME(name);
++
++ default:
++ gcc_unreachable();
++ }
++}
++
++__attribute__((weak)) tree c_global_trees[CTI_MAX];
++
++// the core computation of the rap hash
++// the first piece is a (hopefully) compiler independent encondig of the type, derived from the gcc tree code
++// the second piece is type specific information, such as the size, qualifiers, (recursively) referenced types, etc
++static void rap_hash_tree(const_tree type, rap_hash_flags_t flags, unsigned char sip_hash[8])
++{
++ enum tree_code code;
++ unsigned int attrs;
++
++ code = TREE_CODE(type);
++ attrs = rap_hash_tree_code[code];
++ if (!attrs) {
++ fprintf(stderr, "unhandled tree_code %s %d\n", get_tree_code_name(code), code);
++ debug_tree(type);
++ gcc_unreachable();
++ }
++ rap_fold_hash(sip_hash, (const unsigned char *)&attrs, sizeof attrs);
++
++ enum {
++ // attrs layout for
++ // - all types:
++ RAP_HASH_VOLATILE = 1U << 31,
++ RAP_HASH_NOT_VOLATILE = 1U << 30,
++ RAP_HASH_CONST = 1U << 29,
++ RAP_HASH_NOT_CONST = 1U << 28,
++
++ // - pointer types:
++ RAP_HASH_RESTRICT = 1U << 27,
++ RAP_HASH_NOT_RESTRICT = 1U << 26,
++
++ // - C integer types:
++ RAP_HASH_UNSIGNED = 1U << 25,
++ RAP_HASH_SIGNED = 1U << 24,
++
++ RAP_HASH_UNQUALIFIED_CHAR = 1U << 23,
++ RAP_HASH_CHAR = 1U << 22,
++ RAP_HASH_SHORT = 1U << 21,
++ RAP_HASH_INT = 1U << 20,
++ RAP_HASH_LONG = 1U << 19,
++ RAP_HASH_LONG_LONG = 1U << 18,
++ RAP_HASH_WCHAR = 1U << 17,
++ RAP_HASH_CHAR16 = 1U << 16,
++ RAP_HASH_CHAR32 = 1U << 15,
++
++ // - C float types
++ RAP_HASH_FLOAT = 1U << 14,
++ RAP_HASH_DOUBLE = 1U << 13,
++ RAP_HASH_LONG_DOUBLE = 1U << 12,
++ RAP_HASH_DFLOAT32 = 1U << 11,
++ RAP_HASH_DFLOAT64 = 1U << 10,
++ RAP_HASH_DFLOAT128 = 1U << 9,
++ };
++
++ attrs = 0;
++ if (flags.qual_volatile)
++ attrs |= TYPE_VOLATILE(type) ? RAP_HASH_VOLATILE : RAP_HASH_NOT_VOLATILE;
++ if (flags.qual_const)
++ attrs |= TYPE_READONLY(type) ? RAP_HASH_CONST : RAP_HASH_NOT_CONST;
++
++ switch (code) {
++ default:
++ debug_tree(type);
++ gcc_unreachable();
++ break;
++
++ case VOID_TYPE:
++ break;
++
++ case OFFSET_TYPE:
++ rap_hash_tree(TREE_TYPE(type), flags, sip_hash);
++ rap_hash_tree(TYPE_OFFSET_BASETYPE(type), flags, sip_hash);
++ break;
++
++ case FUNCTION_TYPE:
++ rap_hash_function(type, flags, sip_hash);
++ break;
++
++ case RECORD_TYPE:
++ rap_hash_type_name(type, sip_hash);
++ break;
++
++ case UNION_TYPE:
++ rap_hash_type_name(type, sip_hash);
++ break;
++
++ case POINTER_TYPE:
++ rap_hash_tree(TREE_TYPE(type), flags, sip_hash);
++ break;
++
++ case VECTOR_TYPE:
++ rap_hash_tree(TREE_TYPE(type), flags, sip_hash);
++ rap_hash_type_precision(TREE_TYPE(type), sip_hash);
++ break;
++
++ case ARRAY_TYPE:
++ rap_hash_tree(TREE_TYPE(type), flags, sip_hash);
++ break;
++
++ case REAL_TYPE: {
++ const_tree main_variant = TYPE_MAIN_VARIANT(type);
++
++ switch (TYPE_PRECISION(main_variant)) {
++ default:
++ debug_tree(type);
++ debug_tree(TYPE_MAIN_VARIANT(type));
++ gcc_unreachable();
++
++ case 32:
++// attrs |= RAP_HASH_FLOAT;
++ break;
++
++ case 64:
++// attrs |= RAP_HASH_DOUBLE;
++ break;
++
++ case 80:
++ case 128:
++ attrs |= RAP_HASH_LONG_DOUBLE;
++ break;
++ }
++ rap_hash_type_precision(main_variant, sip_hash);
++ break;
++ }
++
++ case ENUMERAL_TYPE:
++ rap_hash_type_name(type, sip_hash);
++ case BOOLEAN_TYPE:
++ rap_hash_type_precision(type, sip_hash);
++ break;
++
++ case INTEGER_TYPE: {
++ attrs |= TYPE_UNSIGNED(type) ? RAP_HASH_UNSIGNED : RAP_HASH_SIGNED;
++ rap_hash_type_precision(type, sip_hash);
++ break;
++ }
++ }
++
++ rap_fold_hash(sip_hash, (const unsigned char *)&attrs, sizeof attrs);
++}
++
++static const_tree rap_dequal_argtype(const_tree argtype)
++{
++ // since gcc/tree.c:free_lang_data_in_type removes const/volatile from the top level param decl
++ // we have to simulate it here as this can be called earlier from the frontend as well
++ if (TYPE_READONLY(argtype) || TYPE_VOLATILE(argtype)) {
++ int quals;
++
++ quals = TYPE_QUALS(argtype) & ~TYPE_QUAL_CONST & ~TYPE_QUAL_VOLATILE;
++ argtype = build_qualified_type(CONST_CAST_TREE(argtype), quals);
++ }
++
++ return argtype;
++}
++
++// main function to compute the rap hash for function types
++// while virtual class methods are always replaced with their ancestor,
++// callers can decide whether to fully utilize that information via flags.method_ancestor
++static void rap_hash_function(const_tree fntype, rap_hash_flags_t flags, unsigned char sip_hash[8])
++{
++ function_args_iterator args_iter;
++ const_tree arg;
++
++ switch (TREE_CODE(fntype)) {
++ default:
++ debug_tree(fntype);
++ gcc_unreachable();
++
++ case FUNCTION_TYPE:
++ // 1. hash the result
++ rap_hash_tree(TREE_TYPE(fntype), flags, sip_hash);
++
++ // 2. hash the function parameters
++ FOREACH_FUNCTION_ARGS(fntype, arg, args_iter) {
++ const_tree argtype = arg;
++
++ argtype = rap_dequal_argtype(argtype);
++ rap_hash_tree(argtype, flags, sip_hash);
++ }
++ break;
++ }
++}
++
++rap_hash_t rap_hash_function_type(const_tree fntype, rap_hash_flags_t flags)
++{
++ unsigned char sip_hash[8] = { };
++ rap_hash_t hash;
++
++ rap_hash_function(fntype, flags, sip_hash);
++ hash = rap_extract_hash(sip_hash);
++
++ gcc_assert(hash.hash);
++ return hash;
++}
++
++rap_hash_t rap_hash_function_decl(const_tree fndecl, rap_hash_flags_t flags)
++{
++ tree fntype;
++
++ gcc_assert(TREE_CODE(fndecl) == FUNCTION_DECL);
++ fntype = TREE_TYPE(fndecl);
++
++ switch (TREE_CODE(fntype)) {
++ default:
++ debug_tree(fndecl);
++ gcc_unreachable();
++
++ case FUNCTION_TYPE:
++ return rap_hash_function_type(fntype, flags);
++ }
++}
++
++rap_hash_t rap_hash_function_node_imprecise(cgraph_node_ptr node)
++{
++ rap_hash_t hash;
++ tree fndecl;
++
++ gcc_assert(rap_imprecise_hashes);
++
++ hash.hash = 0;
++ if (node->uid < rap_cgraph_max_uid)
++ hash = rap_imprecise_hashes[node->uid];
++
++ if (hash.hash)
++ return hash;
++
++ fndecl = NODE_DECL(node);
++ if (TREE_CODE(TREE_TYPE(fndecl)) == FUNCTION_TYPE)
++ return rap_hash_function_decl(fndecl, imprecise_rap_hash_flags);
++
++ debug_cgraph_node(node);
++ debug_tree(fndecl);
++ error("indirect call to function %qD with a reserved hash value", fndecl);
++ return hash;
++}
++
++void rap_calculate_func_hashes(void *event_data __unused, void *data __unused)
++{
++ cgraph_node_ptr node;
++ int uid;
++
++ gcc_assert(!rap_imprecise_hashes);
++
++ rap_imprecise_hashes = (rap_hash_t *)xcalloc(cgraph_max_uid, sizeof(*rap_imprecise_hashes));
++ rap_cgraph_max_uid = cgraph_max_uid;
++
++ FOR_EACH_FUNCTION(node) {
++ const_tree fndecl;
++
++ uid = node->uid;
++ gcc_assert(uid < rap_cgraph_max_uid);
++
++ if (node->global.inlined_to)
++ continue;
++
++ fndecl = NODE_DECL(node);
++ gcc_assert(fndecl);
++
++ rap_imprecise_hashes[uid] = rap_hash_function_decl(fndecl, imprecise_rap_hash_flags);
++ gcc_assert(rap_imprecise_hashes[uid].hash);
++ }
++}
+diff --git a/tools/gcc/rap_plugin/rap_plugin.c b/tools/gcc/rap_plugin/rap_plugin.c
+new file mode 100644
+index 0000000..c5827cb
+--- /dev/null
++++ b/tools/gcc/rap_plugin/rap_plugin.c
+@@ -0,0 +1,479 @@
++/*
++ * Copyright 2012-2016 by PaX Team <pageexec@freemail.hu>
++ * Licensed under the GPL v2
++ *
++ * Homepage: http://pax.grsecurity.net/
++ *
++ * Usage:
++ * $ # for 4.5/4.6/C based 4.7
++ * $ gcc -I`gcc -print-file-name=plugin`/include -I`gcc -print-file-name=plugin`/include/c-family -fPIC -shared -O2 -o rap_plugin.so rap_plugin.c
++ * $ # for C++ based 4.7/4.8+
++ * $ g++ -I`g++ -print-file-name=plugin`/include -I`g++ -print-file-name=plugin`/include/c-family -fPIC -shared -O2 -o rap_plugin.so rap_plugin.c
++ * $ gcc -fplugin=./rap_plugin.so -fplugin-arg-rap_plugin-check=call test.c -O2
++ */
++
++#include "rap.h"
++
++int plugin_is_GPL_compatible;
++
++static struct plugin_info rap_plugin_info = {
++ .version = "201604272100",
++ .help = "check=call\tenable the corresponding features\n"
++ "hash=abs,abs-finish,const,volatile\n"
++ "report=func,fptr,abs\n"
++};
++
++rap_hash_flags_t imprecise_rap_hash_flags = {
++ .qual_const = 1,
++ .qual_volatile = 1,
++};
++
++tree rap_hash_type_node;
++
++static bool report_func_hash, report_abs_hash;
++
++// create the equivalent of
++// asm volatile("" : : : "memory");
++// or
++// asm("" : "+rm"(var));
++// or
++// asm("" : : "rm"(var));
++gimple barrier(tree var, bool full)
++{
++ gimple stmt;
++ gasm *asm_stmt;
++#if BUILDING_GCC_VERSION <= 4007
++ VEC(tree, gc) *inputs = NULL;
++ VEC(tree, gc) *outputs = NULL;
++ VEC(tree, gc) *clobbers = NULL;
++#else
++ vec<tree, va_gc> *inputs = NULL;
++ vec<tree, va_gc> *outputs = NULL;
++ vec<tree, va_gc> *clobbers = NULL;
++#endif
++
++ if (!var && full) {
++ tree clobber;
++
++ clobber = build_tree_list(NULL_TREE, build_string(7, "memory"));
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_safe_push(tree, gc, clobbers, clobber);
++#else
++ vec_safe_push(clobbers, clobber);
++#endif
++ } else if (full) {
++ tree input, output;
++
++ input = build_tree_list(NULL_TREE, build_string(2, "0"));
++ input = chainon(NULL_TREE, build_tree_list(input, var));
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_safe_push(tree, gc, inputs, input);
++#else
++ vec_safe_push(inputs, input);
++#endif
++
++ output = build_tree_list(NULL_TREE, build_string(4, "=rm"));
++ gcc_assert(SSA_NAME_VAR(var));
++ var = make_ssa_name(SSA_NAME_VAR(var), NULL);
++ output = chainon(NULL_TREE, build_tree_list(output, var));
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_safe_push(tree, gc, outputs, output);
++#else
++ vec_safe_push(outputs, output);
++#endif
++ } else {
++ tree input;
++
++ input = build_tree_list(NULL_TREE, build_string(3, "rm"));
++ input = chainon(NULL_TREE, build_tree_list(input, var));
++#if BUILDING_GCC_VERSION <= 4007
++ VEC_safe_push(tree, gc, inputs, input);
++#else
++ vec_safe_push(inputs, input);
++#endif
++ }
++
++ stmt = gimple_build_asm_vec("", inputs, outputs, clobbers, NULL);
++ asm_stmt = as_a_gasm(stmt);
++ if (!var && full)
++ gimple_asm_set_volatile(asm_stmt, true);
++ else if (full)
++ SSA_NAME_DEF_STMT(var) = stmt;
++ return stmt;
++}
++
++static const struct gcc_debug_hooks *old_debug_hooks;
++static struct gcc_debug_hooks rap_debug_hooks;
++
++static bool __rap_cgraph_indirectly_callable(cgraph_node_ptr node, void *data)
++{
++#if BUILDING_GCC_VERSION >= 4008
++ if (NODE_SYMBOL(node)->externally_visible)
++#else
++ if (node->local.externally_visible)
++#endif
++ return true;
++
++ if (NODE_SYMBOL(node)->address_taken)
++ return true;
++
++ return false;
++}
++
++static bool rap_cgraph_indirectly_callable(cgraph_node_ptr node)
++{
++ return cgraph_for_node_and_aliases(node, __rap_cgraph_indirectly_callable, NULL, true);
++}
++
++static void rap_begin_function(tree decl)
++{
++ cgraph_node_ptr node;
++ rap_hash_t imprecise_rap_hash;
++ unsigned HOST_WIDE_INT skip;
++
++ gcc_assert(debug_hooks == &rap_debug_hooks);
++
++ // chain to previous callback
++ if (old_debug_hooks && old_debug_hooks->begin_function)
++ old_debug_hooks->begin_function(decl);
++
++ // align the rap hash if necessary
++ skip = 1ULL << align_functions_log;
++ if (skip > 4 * sizeof(rap_hash_t))
++ ASM_OUTPUT_SKIP(asm_out_file, skip - 4 * sizeof(rap_hash_t));
++
++ // don't compute hash for functions called only directly
++ node = cgraph_get_node(decl);
++ gcc_assert(node);
++ if (!rap_cgraph_indirectly_callable(node)) {
++ imprecise_rap_hash.hash = 0;
++ } else {
++ imprecise_rap_hash = rap_hash_function_node_imprecise(node);
++ }
++
++ if (report_func_hash)
++ inform(DECL_SOURCE_LOCATION(decl), "func rap_hash: %x %s", imprecise_rap_hash.hash, IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(decl)));
++
++ fprintf(asm_out_file, ASM_QUAD " %#lx\t%s __rap_hash_%s\n", (long)imprecise_rap_hash.hash, ASM_COMMENT_START, IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(decl)));
++}
++
++static void rap_start_unit_common(void *gcc_data __unused, void *user_data __unused)
++{
++ rap_hash_type_node = long_integer_type_node;
++
++ if (debug_hooks)
++ rap_debug_hooks = *debug_hooks;
++ rap_debug_hooks.begin_function = rap_begin_function;
++ old_debug_hooks = debug_hooks;
++ debug_hooks = &rap_debug_hooks;
++}
++
++/*
++ emit an absolute symbol for each function that may be referenced through the plt
++ - all externs
++ - non-static functions
++ - use visibility instead?
++
++ .globl __rap_hash_func
++ .offset 0xhash_for_func
++ .type __rap_hash_func, @object
++ __rap_hash_func:
++ .previous
++*/
++static void rap_finish_unit(void *gcc_data __unused, void *user_data __unused)
++{
++ cgraph_node_ptr node;
++ rap_hash_t hash;
++
++ gcc_assert(debug_hooks == &rap_debug_hooks);
++
++ hash.hash = 0;
++ FOR_EACH_FUNCTION(node) {
++ tree fndecl;
++ const char *asmname;
++ char *name = NULL;
++
++ if (cgraph_function_body_availability(node) >= AVAIL_INTERPOSABLE) {
++ if (node->thunk.thunk_p || node->alias)
++ continue;
++ if (!rap_cgraph_indirectly_callable(node))
++ continue;
++ }
++
++#if BUILDING_GCC_VERSION >= 4007
++ gcc_assert(cgraph_function_or_thunk_node(node, NULL) == node);
++#endif
++
++ fndecl = NODE_DECL(node);
++ gcc_assert(fndecl);
++ if (DECL_IS_BUILTIN(fndecl) && DECL_BUILT_IN_CLASS(fndecl) == BUILT_IN_NORMAL)
++ continue;
++
++ if (!TREE_PUBLIC(fndecl))
++ continue;
++
++ if (DECL_ARTIFICIAL(fndecl))
++ continue;
++
++ if (DECL_ABSTRACT_ORIGIN(fndecl) && DECL_ABSTRACT_ORIGIN(fndecl) != fndecl)
++ continue;
++
++ gcc_assert(DECL_ASSEMBLER_NAME(fndecl));
++ asmname = IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(fndecl));
++ if (strchr(asmname, '.'))
++ continue;
++
++ if (asmname[0] == '*')
++ asmname++;
++
++ gcc_assert(asmname[0]);
++ gcc_assert(asprintf(&name, "__rap_hash_%s", asmname) != -1);
++
++ hash = rap_hash_function_node_imprecise(node);
++ if (report_abs_hash)
++ inform(DECL_SOURCE_LOCATION(fndecl), "abs rap_hash: %x %s", hash.hash, IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(fndecl)));
++
++ fprintf(asm_out_file, GLOBAL_ASM_OP " %s\n", name);
++ fprintf(asm_out_file, "\t.offset %#lx\n", (long)hash.hash);
++ ASM_OUTPUT_TYPE_DIRECTIVE(asm_out_file, name, "object");
++ ASM_OUTPUT_LABEL(asm_out_file, name);
++ free(name);
++ }
++ if (hash.hash)
++ fprintf(asm_out_file, "\t.previous\n");
++}
++
++// emit the rap hash as an absolute symbol for all functions seen in the frontend
++// this is necessary as later unreferenced nodes will be removed yet we'd like to emit as many hashes as possible
++static void rap_finish_decl(void *event_data, void *data __unused)
++{
++ tree fndecl = (tree)event_data;
++ rap_hash_t hash;
++ const char *asmname;
++ char *name = NULL;
++
++ if (fndecl == error_mark_node)
++ return;
++
++ if (TREE_CODE(fndecl) != FUNCTION_DECL)
++ return;
++
++ if (!TREE_PUBLIC(fndecl))
++ return;
++
++ if (DECL_ARTIFICIAL(fndecl))
++ return;
++
++ if (DECL_ABSTRACT_ORIGIN(fndecl) && DECL_ABSTRACT_ORIGIN(fndecl) != fndecl)
++ return;
++
++ asmname = DECL_NAME_POINTER(fndecl);
++ gcc_assert(asmname[0]);
++
++ if (strchr(asmname, '.'))
++ return;
++
++ gcc_assert(asprintf(&name, "__rap_hash_%s", asmname) != -1);
++
++ hash = rap_hash_function_decl(fndecl, imprecise_rap_hash_flags);
++
++ if (report_abs_hash)
++ inform(DECL_SOURCE_LOCATION(fndecl), "abs rap_hash: %x %s", hash.hash, asmname);
++
++ fprintf(asm_out_file, GLOBAL_ASM_OP " %s\n", name);
++ fprintf(asm_out_file, "\t.offset %#lx\n", (long)hash.hash);
++ ASM_OUTPUT_TYPE_DIRECTIVE(asm_out_file, name, "object");
++ ASM_OUTPUT_LABEL(asm_out_file, name);
++ free(name);
++
++ fprintf(asm_out_file, "\t.previous\n");
++}
++
++static bool rap_unignore_gate(void)
++{
++ if (!DECL_IGNORED_P(current_function_decl))
++ return false;
++
++ inform(DECL_SOURCE_LOCATION(current_function_decl), "DECL_IGNORED fixed");
++
++ DECL_IGNORED_P(current_function_decl) = 0;
++ return false;
++}
++
++#define PASS_NAME rap_unignore
++#define NO_EXECUTE
++#define TODO_FLAGS_FINISH TODO_dump_func
++#include "gcc-generate-rtl-pass.h"
++
++static bool rap_version_check(struct plugin_gcc_version *gcc_version, struct plugin_gcc_version *plugin_version)
++{
++ if (!gcc_version || !plugin_version)
++ return false;
++
++#if BUILDING_GCC_VERSION >= 5000
++ if (strncmp(gcc_version->basever, plugin_version->basever, 4))
++#else
++ if (strcmp(gcc_version->basever, plugin_version->basever))
++#endif
++ return false;
++ if (strcmp(gcc_version->datestamp, plugin_version->datestamp))
++ return false;
++ if (strcmp(gcc_version->devphase, plugin_version->devphase))
++ return false;
++ if (strcmp(gcc_version->revision, plugin_version->revision))
++ return false;
++// if (strcmp(gcc_version->configuration_arguments, plugin_version->configuration_arguments))
++// return false;
++ return true;
++}
++
++EXPORTED_CONST struct ggc_root_tab gt_ggc_r_gt_rap[] = {
++ {
++ .base = &rap_hash_type_node,
++ .nelt = 1,
++ .stride = sizeof(rap_hash_type_node),
++ .cb = &gt_ggc_mx_tree_node,
++ .pchw = &gt_pch_nx_tree_node
++ },
++ LAST_GGC_ROOT_TAB
++};
++
++int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gcc_version *version)
++{
++ int i;
++ const char * const plugin_name = plugin_info->base_name;
++ const int argc = plugin_info->argc;
++ const struct plugin_argument * const argv = plugin_info->argv;
++ bool enable_call = false;
++ bool enable_abs = false, enable_abs_finish = false;
++
++ struct register_pass_info rap_fptr_pass_info;
++ struct register_pass_info rap_unignore_pass_info;
++
++ rap_fptr_pass_info.pass = make_rap_fptr_pass();
++ rap_fptr_pass_info.reference_pass_name = "nrv";
++ rap_fptr_pass_info.ref_pass_instance_number = 1;
++ rap_fptr_pass_info.pos_op = PASS_POS_INSERT_AFTER;
++
++ rap_unignore_pass_info.pass = make_rap_unignore_pass();
++ rap_unignore_pass_info.reference_pass_name = "final";
++ rap_unignore_pass_info.ref_pass_instance_number = 1;
++ rap_unignore_pass_info.pos_op = PASS_POS_INSERT_BEFORE;
++
++ if (!rap_version_check(version, &gcc_version)) {
++ error(G_("incompatible gcc/plugin versions"));
++ return 1;
++ }
++
++#if BUILDING_GCC_VERSION >= 5000
++ if (flag_ipa_icf_functions) {
++// warning_at(UNKNOWN_LOCATION, 0, G_("-fipa-icf is incompatible with %s, disabling..."), plugin_name);
++// inform(UNKNOWN_LOCATION, G_("-fipa-icf is incompatible with %s, disabling..."), plugin_name);
++ flag_ipa_icf_functions = 0;
++ }
++#endif
++
++ for (i = 0; i < argc; ++i) {
++ if (!strcmp(argv[i].key, "disable"))
++ continue;
++
++ if (!strcmp(argv[i].key, "check")) {
++ char *values, *value, *saveptr;
++
++ if (!argv[i].value) {
++ error(G_("no value supplied for option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
++ continue;
++ }
++
++ values = xstrdup(argv[i].value);
++ value = strtok_r(values, ",", &saveptr);
++ while (value) {
++ if (!strcmp(value, "call"))
++ enable_call = TARGET_64BIT;//true;
++ else
++ error(G_("unknown value supplied for option '-fplugin-arg-%s-%s=%s'"), plugin_name, argv[i].key, value);
++ value = strtok_r(NULL, ",", &saveptr);
++ }
++ free(values);
++ continue;
++ }
++
++ if (!strcmp(argv[i].key, "hash")) {
++ char *values, *value, *saveptr;
++
++ if (!argv[i].value) {
++ error(G_("no value supplied for option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
++ continue;
++ }
++
++ values = xstrdup(argv[i].value);
++ value = strtok_r(values, ",", &saveptr);
++ while (value) {
++ if (!strcmp(value, "abs"))
++ enable_abs = enable_abs_finish = true;
++ else if (!strcmp(value, "abs-finish"))
++ enable_abs_finish = true;
++// else if (!strcmp(value, "const"))
++// imprecise_rap_hash_flags.qual_const = 1;
++// else if (!strcmp(value, "volatile"))
++// imprecise_rap_hash_flags.qual_volatile = 1;
++ else
++ error(G_("unknown value supplied for option '-fplugin-arg-%s-%s=%s'"), plugin_name, argv[i].key, value);
++ value = strtok_r(NULL, ",", &saveptr);
++ }
++ free(values);
++ continue;
++ }
++
++ if (!strcmp(argv[i].key, "report")) {
++ char *values, *value, *saveptr;
++
++ if (!argv[i].value) {
++ error(G_("no value supplied for option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
++ continue;
++ }
++
++ values = xstrdup(argv[i].value);
++ value = strtok_r(values, ",", &saveptr);
++ while (value) {
++ if (!strcmp(value, "func"))
++ report_func_hash = true;
++ else if (!strcmp(value, "fptr"))
++ report_fptr_hash = true;
++ else if (!strcmp(value, "abs"))
++ report_abs_hash = true;
++ else
++ error(G_("unknown value supplied for option '-fplugin-arg-%s-%s=%s'"), plugin_name, argv[i].key, value);
++ value = strtok_r(NULL, ",", &saveptr);
++ }
++ free(values);
++ continue;
++ }
++
++ error(G_("unkown option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
++ }
++
++ register_callback(plugin_name, PLUGIN_INFO, NULL, &rap_plugin_info);
++
++ if (enable_call) {
++#if BUILDING_GCC_VERSION >= 4007
++ if (enable_abs)
++ register_callback(plugin_name, PLUGIN_FINISH_DECL, rap_finish_decl, NULL);
++#else
++#warning TODO
++#endif
++ register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &rap_unignore_pass_info);
++ register_callback(plugin_name, PLUGIN_START_UNIT, rap_start_unit_common, NULL);
++ register_callback(plugin_name, PLUGIN_REGISTER_GGC_ROOTS, NULL, (void *)&gt_ggc_r_gt_rap);
++ if (enable_abs_finish)
++ register_callback(plugin_name, PLUGIN_FINISH_UNIT, rap_finish_unit, NULL);
++ }
++
++ if (enable_call)
++ register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &rap_fptr_pass_info);
++
++ if (enable_call)
++ register_callback(plugin_name, PLUGIN_ALL_IPA_PASSES_START, rap_calculate_func_hashes, NULL);
++
++ return 0;
++}
+diff --git a/tools/gcc/rap_plugin/sip.c b/tools/gcc/rap_plugin/sip.c
+new file mode 100644
+index 0000000..65bc1cd
+--- /dev/null
++++ b/tools/gcc/rap_plugin/sip.c
+@@ -0,0 +1,96 @@
++// SipHash-2-4 adapted by the PaX Team from the public domain version written by
++// Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
++// Daniel J. Bernstein <djb@cr.yp.to>
++
++#include <stdint.h>
++
++#define ROTL(x, b) (u64)(((x) << (b)) | ((x) >> (64 - (b))))
++
++#define U32TO8_LE(p, v) \
++ (p)[0] = (u8)((v) ); (p)[1] = (u8)((v) >> 8); \
++ (p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24);
++
++#define U64TO8_LE(p, v) \
++ U32TO8_LE((p), (u32)((v) )); \
++ U32TO8_LE((p) + 4, (u32)((v) >> 32));
++
++#define U8TO64_LE(p) ( \
++ ((u64)((p)[0]) ) | \
++ ((u64)((p)[1]) << 8) | \
++ ((u64)((p)[2]) << 16) | \
++ ((u64)((p)[3]) << 24) | \
++ ((u64)((p)[4]) << 32) | \
++ ((u64)((p)[5]) << 40) | \
++ ((u64)((p)[6]) << 48) | \
++ ((u64)((p)[7]) << 56))
++
++#define SIPROUND \
++do { \
++ v0 += v1; v1 = ROTL(v1, 13); v1 ^= v0; v0 = ROTL(v0, 32); \
++ v2 += v3; v3 = ROTL(v3, 16); v3 ^= v2; \
++ v0 += v3; v3 = ROTL(v3, 21); v3 ^= v0; \
++ v2 += v1; v1 = ROTL(v1, 17); v1 ^= v2; v2 = ROTL(v2, 32); \
++} while(0)
++
++typedef uint64_t u64;
++typedef uint32_t u32;
++typedef uint8_t u8;
++
++/* SipHash-2-4 with previous output folding, a poor man's streaming interface */
++void siphash24fold(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *k);
++
++void siphash24fold(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *k)
++{
++ u64 k0 = U8TO64_LE(k);
++ u64 k1 = U8TO64_LE(k + 8);
++ /* "somepseudorandomlygeneratedbytes" */
++ u64 v0 = 0x736f6d6570736575ULL ^ k0;
++ u64 v1 = 0x646f72616e646f6dULL ^ k1;
++ u64 v2 = 0x6c7967656e657261ULL ^ k0;
++ u64 v3 = 0x7465646279746573ULL ^ k1;
++ u64 b, m;
++ const u8 * const end = in + inlen - (inlen % sizeof(u64));
++ const int left = inlen & 7;
++ b = ((u64)inlen) << 56;
++
++ // fold in the previous output
++ m = U8TO64_LE(out);
++ v3 ^= m;
++ SIPROUND;
++ SIPROUND;
++ v0 ^= m;
++
++ // consume full input blocks
++ for (; in != end; in += 8) {
++ m = U8TO64_LE(in);
++ v3 ^= m;
++ SIPROUND;
++ SIPROUND;
++ v0 ^= m;
++ }
++
++ // consume the last potentially partial block
++ switch (left) {
++ case 7: b |= ((u64)in[6]) << 48;
++ case 6: b |= ((u64)in[5]) << 40;
++ case 5: b |= ((u64)in[4]) << 32;
++ case 4: b |= ((u64)in[3]) << 24;
++ case 3: b |= ((u64)in[2]) << 16;
++ case 2: b |= ((u64)in[1]) << 8;
++ case 1: b |= ((u64)in[0]); break;
++ case 0: break;
++ }
++
++ // finalize
++ v3 ^= b;
++ SIPROUND;
++ SIPROUND;
++ v0 ^= b;
++ v2 ^= 0xff;
++ SIPROUND;
++ SIPROUND;
++ SIPROUND;
++ SIPROUND;
++ b = v0 ^ v1 ^ v2 ^ v3;
++ U64TO8_LE(out, b);
++}
diff --git a/tools/gcc/size_overflow_plugin/.gitignore b/tools/gcc/size_overflow_plugin/.gitignore
new file mode 100644
index 0000000..c4b24b9
@@ -155985,10 +184142,10 @@ index 0000000..fc58e16
+}
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_hash.data b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
new file mode 100644
-index 0000000..951b3be
+index 0000000..837e6d0
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
-@@ -0,0 +1,21510 @@
+@@ -0,0 +1,21648 @@
+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
@@ -156010,6 +184167,7 @@ index 0000000..951b3be
+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
+enable_so_sis5595_device_add_fndecl_39 sis5595_device_add fndecl 1 39 NULL
++enable_so_nr_rings_blkfront_info_42 nr_rings blkfront_info 0 42 NULL
+enable_so_mc_vram_size_amdgpu_mc_45 mc_vram_size amdgpu_mc 0 45 NULL
+enable_so_pattern_len_tcf_em_text_57 pattern_len tcf_em_text 0 57 NULL nohasharray
+enable_so_p54_init_common_fndecl_57 p54_init_common fndecl 1 57 &enable_so_pattern_len_tcf_em_text_57
@@ -156063,6 +184221,7 @@ index 0000000..951b3be
+enable_so_bn_shadow_fndecl_211 bn_shadow fndecl 2 211 &enable_so_xfs_zero_file_space_fndecl_211
+enable_so_cxgb_alloc_mem_fndecl_212 cxgb_alloc_mem fndecl 1 212 NULL
+enable_so_copies_r10conf_216 copies r10conf 0 216 NULL
++enable_so_drm_universal_plane_init_fndecl_219 drm_universal_plane_init fndecl 6 219 NULL
+enable_so_optrom_size_qla_hw_data_230 optrom_size qla_hw_data 0 230 NULL
+enable_so_pvid_ocrdma_dev_231 pvid ocrdma_dev 0 231 NULL nohasharray
+enable_so_afs_cell_alloc_fndecl_231 afs_cell_alloc fndecl 2 231 &enable_so_pvid_ocrdma_dev_231
@@ -156097,6 +184256,7 @@ index 0000000..951b3be
+enable_so_MaxBufferSize_negotiate_rsp_314 MaxBufferSize negotiate_rsp 0 314 NULL nohasharray
+enable_so_ip_num_acl_subject_label_314 ip_num acl_subject_label 0 314 &enable_so_MaxBufferSize_negotiate_rsp_314
+enable_so_name_len_jffs2_raw_xattr_318 name_len jffs2_raw_xattr 0 318 NULL
++enable_so_bo_handle_count_drm_vc4_submit_cl_326 bo_handle_count drm_vc4_submit_cl 0 326 NULL
+enable_so_num_alt_usb_usbvision_328 num_alt usb_usbvision 0 328 NULL
+enable_so_start_fb_cmap_user_333 start fb_cmap_user 0 333 NULL
+enable_so_block_size_se_dev_attrib_334 block_size se_dev_attrib 0 334 NULL
@@ -156268,6 +184428,7 @@ index 0000000..951b3be
+enable_so_qi_dqperchunk_xfs_quotainfo_863 qi_dqperchunk xfs_quotainfo 0 863 NULL
+enable_so_adu_read_fndecl_866 adu_read fndecl 3 866 NULL
+enable_so_safe_prepare_write_buffer_fndecl_872 safe_prepare_write_buffer fndecl 3 872 NULL
++enable_so_dvb_register_media_device_fndecl_878 dvb_register_media_device fndecl 4 878 NULL
+enable_so_field_count_audit_rule_data_886 field_count audit_rule_data 0 886 NULL
+enable_so_octeon_read_device_mem64_fndecl_892 octeon_read_device_mem64 fndecl 0 892 NULL
+enable_so_orinoco_change_mtu_fndecl_895 orinoco_change_mtu fndecl 2 895 NULL nohasharray
@@ -156817,7 +184978,8 @@ index 0000000..951b3be
+enable_so_off_fuse_dirent_2561 off fuse_dirent 0 2561 NULL
+enable_so_active_duplex_niu_link_config_2566 active_duplex niu_link_config 0 2566 NULL
+enable_so_hdsp_external_sample_rate_fndecl_2568 hdsp_external_sample_rate fndecl 0 2568 NULL
-+enable_so_extend_brk_fndecl_2574 extend_brk fndecl 2-1 2574 NULL
++enable_so_extend_brk_fndecl_2574 extend_brk fndecl 2-1 2574 NULL nohasharray
++enable_so_sec_size_nvm_dev_2574 sec_size nvm_dev 0 2574 &enable_so_extend_brk_fndecl_2574
+enable_so___tun_chr_ioctl_fndecl_2575 __tun_chr_ioctl fndecl 4 2575 NULL
+enable_so_aio_offset_iocb_2576 aio_offset iocb 0 2576 NULL nohasharray
+enable_so_skb_checksum_trimmed_fndecl_2576 skb_checksum_trimmed fndecl 2 2576 &enable_so_aio_offset_iocb_2576
@@ -157031,6 +185193,7 @@ index 0000000..951b3be
+enable_so_lbs_rdbbp_write_fndecl_3237 lbs_rdbbp_write fndecl 3 3237 NULL
+enable_so_inlen_ib_udata_3242 inlen ib_udata 0 3242 NULL nohasharray
+enable_so_expect_class_max_nf_conntrack_helper_3242 expect_class_max nf_conntrack_helper 0 3242 &enable_so_inlen_ib_udata_3242
++enable_so_uniforms_size_drm_vc4_submit_cl_3245 uniforms_size drm_vc4_submit_cl 0 3245 NULL
+enable_so_max_wqe_ocrdma_dev_attr_3246 max_wqe ocrdma_dev_attr 0 3246 NULL
+enable_so_of_property_match_string_fndecl_3250 of_property_match_string fndecl 0 3250 NULL
+enable_so_shmem_kernel_file_setup_fndecl_3251 shmem_kernel_file_setup fndecl 2 3251 NULL
@@ -157165,6 +185328,7 @@ index 0000000..951b3be
+enable_so_sl_ib_ah_attr_3633 sl ib_ah_attr 0 3633 NULL
+enable_so_vmci_transport_queue_pair_alloc_fndecl_3639 vmci_transport_queue_pair_alloc fndecl 4-3 3639 NULL nohasharray
+enable_so_xfs_attr3_leaf_freextent_fndecl_3639 xfs_attr3_leaf_freextent fndecl 4-3 3639 &enable_so_vmci_transport_queue_pair_alloc_fndecl_3639
++enable_so_count_phm_clock_voltage_dependency_table_3642 count phm_clock_voltage_dependency_table 0 3642 NULL
+enable_so_t_blocknr_high_journal_block_tag_s_3648 t_blocknr_high journal_block_tag_s 0 3648 NULL
+enable_so_s_desc_size_ext4_sb_info_3652 s_desc_size ext4_sb_info 0 3652 NULL
+enable_so_pci_id_imc_uncore_pci_dev_3656 pci_id imc_uncore_pci_dev 0 3656 NULL
@@ -157189,6 +185353,7 @@ index 0000000..951b3be
+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
+enable_so_byte_len_ib_wc_3716 byte_len ib_wc 0 3716 NULL
++enable_so_dvb_create_media_entity_fndecl_3720 dvb_create_media_entity fndecl 3 3720 NULL
+enable_so_len_amp_assoc_3724 len amp_assoc 0 3724 NULL
+enable_so___v4l2_ctrl_modify_range_fndecl_3726 __v4l2_ctrl_modify_range fndecl 3-2-5 3726 NULL
+enable_so_SYSC_rt_sigpending_fndecl_3728 SYSC_rt_sigpending fndecl 2 3728 NULL
@@ -157386,7 +185551,8 @@ index 0000000..951b3be
+enable_so_h_next_leaf_blk_ocfs2_extent_block_4292 h_next_leaf_blk ocfs2_extent_block 0 4292 NULL
+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
++enable_so_maxpacket_musb_qh_4303 maxpacket musb_qh 0 4303 NULL nohasharray
++enable_so_key_size_pkcs1pad_ctx_4303 key_size pkcs1pad_ctx 0 4303 &enable_so_maxpacket_musb_qh_4303
+enable_so_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
@@ -157463,6 +185629,7 @@ index 0000000..951b3be
+enable_so_LoadBitmap_fndecl_4569 LoadBitmap fndecl 2 4569 NULL
+enable_so_far_copies_geom_4570 far_copies geom 0 4570 NULL
+enable_so_dlen_nft_set_4577 dlen nft_set 0 4577 NULL
++enable_so_wilc_spi_tx_fndecl_4583 wilc_spi_tx fndecl 3 4583 NULL
+enable_so_rx_buf_sz_gem_4593 rx_buf_sz gem 0 4593 NULL nohasharray
+enable_so_cxd2841er_read_regs_fndecl_4593 cxd2841er_read_regs fndecl 5 4593 &enable_so_rx_buf_sz_gem_4593
+enable_so_fdt_nop_node_fndecl_4595 fdt_nop_node fndecl 2 4595 NULL
@@ -157648,7 +185815,8 @@ index 0000000..951b3be
+enable_so_rlen_si2157_cmd_5138 rlen si2157_cmd 0 5138 NULL nohasharray
+enable_so_channel_count_il_priv_5138 channel_count il_priv 0 5138 &enable_so_rlen_si2157_cmd_5138
+enable_so_fnic_stats_debugfs_read_fndecl_5139 fnic_stats_debugfs_read fndecl 3 5139 NULL
-+enable_so_echo_client_prep_commit_fndecl_5142 echo_client_prep_commit fndecl 8 5142 NULL
++enable_so_echo_client_prep_commit_fndecl_5142 echo_client_prep_commit fndecl 8 5142 NULL nohasharray
++enable_so___nvme_submit_user_cmd_fndecl_5142 __nvme_submit_user_cmd fndecl 6 5142 &enable_so_echo_client_prep_commit_fndecl_5142
+enable_so_csio_scsi_eqsize_vardecl_5146 csio_scsi_eqsize vardecl 0 5146 NULL
+enable_so_ocfs2_iget_fndecl_5154 ocfs2_iget fndecl 2 5154 NULL
+enable_so_total_in_z_stream_s_5155 total_in z_stream_s 0 5155 NULL
@@ -157679,6 +185847,7 @@ index 0000000..951b3be
+enable_so_sq905_read_data_fndecl_5229 sq905_read_data fndecl 0 5229 NULL
+enable_so_madvise_hwpoison_fndecl_5231 madvise_hwpoison fndecl 2 5231 NULL
+enable_so_rx_tpa_end_cmp_misc_v1_rx_tpa_end_cmp_5235 rx_tpa_end_cmp_misc_v1 rx_tpa_end_cmp 0 5235 NULL
++enable_so_cnt_nfp_net_tx_ring_5239 cnt nfp_net_tx_ring 0 5239 NULL
+enable_so_nr_extents__ntfs_inode_5242 nr_extents _ntfs_inode 0 5242 NULL
+enable_so_nf_reject_iphdr_put_fndecl_5243 nf_reject_iphdr_put fndecl 3 5243 NULL nohasharray
+enable_so___scif_pin_pages_fndecl_5243 __scif_pin_pages fndecl 2 5243 &enable_so_nf_reject_iphdr_put_fndecl_5243
@@ -157733,6 +185902,7 @@ index 0000000..951b3be
+enable_so_len_iw_mgmt_info_element_5411 len iw_mgmt_info_element 0 5411 NULL
+enable_so_udpv6_setsockopt_fndecl_5412 udpv6_setsockopt fndecl 5 5412 NULL
+enable_so_session_key_encryption_key_bytes_ecryptfs_password_5413 session_key_encryption_key_bytes ecryptfs_password 0 5413 NULL
++enable_so_ies_len_user_conn_req_5414 ies_len user_conn_req 0 5414 NULL
+enable_so_value_xen_pci_op_5416 value xen_pci_op 0 5416 NULL
+enable_so_allocmin_nilfs_sufile_info_5418 allocmin nilfs_sufile_info 0 5418 NULL
+enable_so_nilfs_sufile_truncate_range_fndecl_5423 nilfs_sufile_truncate_range fndecl 3-2 5423 NULL nohasharray
@@ -157740,6 +185910,7 @@ index 0000000..951b3be
+enable_so_reg_size_intel_iommu_5423 reg_size intel_iommu 0 5423 &enable_so_ino_ncp_entry_info_5423
+enable_so_port_mad_size_fndecl_5434 port_mad_size fndecl 0 5434 NULL
+enable_so_sigmadsp_read_i2c_fndecl_5435 sigmadsp_read_i2c fndecl 4 5435 NULL
++enable_so_wilc_add_wep_key_bss_sta_fndecl_5436 wilc_add_wep_key_bss_sta fndecl 3 5436 NULL
+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
@@ -157873,11 +186044,13 @@ index 0000000..951b3be
+enable_so_read_len_t3_swsq_5880 read_len t3_swsq 0 5880 NULL
+enable_so_xfs_qm_vop_dqalloc_fndecl_5887 xfs_qm_vop_dqalloc fndecl 2-3-4 5887 NULL nohasharray
+enable_so_cydata_ofsh_cyttsp4_sysinfo_data_5887 cydata_ofsh cyttsp4_sysinfo_data 0 5887 &enable_so_xfs_qm_vop_dqalloc_fndecl_5887
-+enable_so_max_sg_count_hpt_iop_request_get_config_5890 max_sg_count hpt_iop_request_get_config 0 5890 NULL
++enable_so_max_sg_count_hpt_iop_request_get_config_5890 max_sg_count hpt_iop_request_get_config 0 5890 NULL nohasharray
++enable_so_entity_internal_idx_max_media_device_5890 entity_internal_idx_max media_device 0 5890 &enable_so_max_sg_count_hpt_iop_request_get_config_5890
+enable_so_force_max_req_size_vardecl_vub300_c_5891 force_max_req_size vardecl_vub300.c 0 5891 NULL
+enable_so_dma_common_pages_remap_fndecl_5893 dma_common_pages_remap fndecl 2 5893 NULL
+enable_so_size_squashfs_dir_entry_5896 size squashfs_dir_entry 0 5896 NULL
+enable_so___nla_reserve_fndecl_5901 __nla_reserve fndecl 3 5901 NULL
++enable_so_iproc_asiu_setup_fndecl_5902 iproc_asiu_setup fndecl 4 5902 NULL
+enable_so_alloc_rx_slot_fndecl_5908 alloc_rx_slot fndecl 0 5908 NULL
+enable_so_sctp_tsnmap_num_gabs_fndecl_5915 sctp_tsnmap_num_gabs fndecl 0 5915 NULL
+enable_so_grec_nsrcs_igmpv3_grec_5916 grec_nsrcs igmpv3_grec 0 5916 NULL
@@ -157920,6 +186093,7 @@ index 0000000..951b3be
+enable_so_icv_trunc_len_ah_data_6025 icv_trunc_len ah_data 0 6025 NULL nohasharray
+enable_so_flags_rtl8180_rx_desc_6025 flags rtl8180_rx_desc 0 6025 &enable_so_icv_trunc_len_ah_data_6025
+enable_so_xlog_bwrite_fndecl_6028 xlog_bwrite fndecl 2 6028 NULL
++enable_so_size_drm_vc4_create_shader_bo_6033 size drm_vc4_create_shader_bo 0 6033 NULL
+enable_so_msix_map_region_fndecl_6035 msix_map_region fndecl 2 6035 NULL
+enable_so_ceph_create_snap_context_fndecl_6041 ceph_create_snap_context fndecl 1 6041 NULL
+enable_so_cmipci_sb_reg_decode_fndecl_6048 cmipci_sb_reg_decode fndecl 2 6048 NULL
@@ -158061,6 +186235,7 @@ index 0000000..951b3be
+enable_so_skd_end_request_fndecl_6438 skd_end_request fndecl 3 6438 NULL
+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_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
@@ -158274,7 +186449,8 @@ index 0000000..951b3be
+enable_so_srq_entry_sz_mlx4_dev_cap_7052 srq_entry_sz mlx4_dev_cap 0 7052 NULL
+enable_so_SYSC_pselect6_fndecl_7055 SYSC_pselect6 fndecl 1 7055 NULL
+enable_so_packet_size_usbatm_channel_7056 packet_size usbatm_channel 0 7056 NULL
-+enable_so___btrfs_drop_extents_fndecl_7058 __btrfs_drop_extents fndecl 6-5 7058 NULL
++enable_so___btrfs_drop_extents_fndecl_7058 __btrfs_drop_extents fndecl 6-5 7058 NULL nohasharray
++enable_so_txd_cnt_nfp_net_7058 txd_cnt nfp_net 0 7058 &enable_so___btrfs_drop_extents_fndecl_7058
+enable_so_cryptd_alloc_instance_fndecl_7059 cryptd_alloc_instance fndecl 3-2 7059 NULL
+enable_so_dccph_doff_dccp_hdr_7060 dccph_doff dccp_hdr 0 7060 NULL nohasharray
+enable_so_ddebug_proc_write_fndecl_7060 ddebug_proc_write fndecl 3 7060 &enable_so_dccph_doff_dccp_hdr_7060
@@ -158453,7 +186629,8 @@ index 0000000..951b3be
+enable_so_count_ivtvfb_dma_frame_7586 count ivtvfb_dma_frame 0 7586 NULL
+enable_so_length_sctp_chunkhdr_7587 length sctp_chunkhdr 0 7587 NULL
+enable_so_ftdi_elan_edset_input_fndecl_7588 ftdi_elan_edset_input fndecl 0 7588 NULL
-+enable_so_scan_index_iio_chan_spec_7597 scan_index iio_chan_spec 0 7597 NULL
++enable_so_scan_index_iio_chan_spec_7597 scan_index iio_chan_spec 0 7597 NULL nohasharray
++enable_so_num_regions_wm_adsp_fw_caps_7597 num_regions wm_adsp_fw_caps 0 7597 &enable_so_scan_index_iio_chan_spec_7597
+enable_so_q_blkno_xfs_dquot_7601 q_blkno xfs_dquot 0 7601 NULL
+enable_so_pathmtu_sctp_transport_7603 pathmtu sctp_transport 0 7603 NULL
+enable_so_fuse_listxattr_fndecl_7605 fuse_listxattr fndecl 3 7605 NULL
@@ -158521,6 +186698,7 @@ index 0000000..951b3be
+enable_so_alloc_ep_fndecl_7782 alloc_ep fndecl 1 7782 NULL
+enable_so_mmu_private_affs_inode_info_7785 mmu_private affs_inode_info 0 7785 NULL nohasharray
+enable_so_pkt_len_rx_desc_7785 pkt_len rx_desc 0 7785 &enable_so_mmu_private_affs_inode_info_7785
++enable_so_read_index_wm_adsp_compr_buf_7788 read_index wm_adsp_compr_buf 0 7788 NULL
+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
@@ -158664,6 +186842,7 @@ index 0000000..951b3be
+enable_so_num_alloc_vsi_i40e_pf_8259 num_alloc_vsi i40e_pf 0 8259 NULL
+enable_so_datablkcnt_capi_register_params_8263 datablkcnt capi_register_params 0 8263 NULL
+enable_so_cow_file_range_inline_fndecl_8264 cow_file_range_inline fndecl 4-3 8264 NULL
++enable_so_num_u3_ports_xhci_hcd_mtk_8272 num_u3_ports xhci_hcd_mtk 0 8272 NULL
+enable_so_datablklen_capi_register_params_8275 datablklen capi_register_params 0 8275 NULL nohasharray
+enable_so_proc_scsi_devinfo_write_fndecl_8275 proc_scsi_devinfo_write fndecl 3 8275 &enable_so_datablklen_capi_register_params_8275
+enable_so_cdc_ncm_check_tx_max_fndecl_8278 cdc_ncm_check_tx_max fndecl 0-2 8278 NULL
@@ -158820,6 +186999,7 @@ index 0000000..951b3be
+enable_so_read_hdlc_status_fritz_adapter_8730 read_hdlc_status fritz_adapter 0 8730 NULL nohasharray
+enable_so_disconnect_fndecl_8730 disconnect fndecl 4 8730 &enable_so_read_hdlc_status_fritz_adapter_8730 nohasharray
+enable_so_ip_set_elem_len_fndecl_8730 ip_set_elem_len fndecl 0-4-3 8730 &enable_so_disconnect_fndecl_8730
++enable_so_alloc_state_change_fndecl_8735 alloc_state_change fndecl 1-2 8735 NULL
+enable_so_ext_param_page_length_nand_onfi_params_8736 ext_param_page_length nand_onfi_params 0 8736 NULL
+enable_so___blockdev_direct_IO_fndecl_8738 __blockdev_direct_IO fndecl 5-0 8738 NULL nohasharray
+enable_so_ipgre_header_fndecl_8738 ipgre_header fndecl 3 8738 &enable_so___blockdev_direct_IO_fndecl_8738
@@ -158856,6 +187036,7 @@ index 0000000..951b3be
+enable_so_dma_buf_mmap_fndecl_8825 dma_buf_mmap fndecl 3 8825 NULL
+enable_so_buflow_ring_desc_ex_8829 buflow ring_desc_ex 0 8829 NULL
+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_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
@@ -159029,7 +187210,8 @@ index 0000000..951b3be
+enable_so_htree_dirblock_to_tree_fndecl_9339 htree_dirblock_to_tree fndecl 3 9339 NULL
+enable_so_di_size_xfs_icdinode_9350 di_size xfs_icdinode 0 9350 NULL
+enable_so_tse_init_rx_buffer_fndecl_9354 tse_init_rx_buffer fndecl 3 9354 NULL
-+enable_so_offset_ore_io_state_9357 offset ore_io_state 0 9357 NULL
++enable_so_offset_ore_io_state_9357 offset ore_io_state 0 9357 NULL nohasharray
++enable_so_length_property_entry_9357 length property_entry 0 9357 &enable_so_offset_ore_io_state_9357
+enable_so_stv6110x_write_regs_fndecl_9359 stv6110x_write_regs fndecl 4 9359 NULL
+enable_so_qib_qp_rcv_fndecl_9365 qib_qp_rcv fndecl 5 9365 NULL
+enable_so_compat_sys_get_mempolicy_fndecl_9366 compat_sys_get_mempolicy fndecl 4-3 9366 NULL
@@ -159319,6 +187501,7 @@ index 0000000..951b3be
+enable_so_ext4_xattr_set_handle_fndecl_10221 ext4_xattr_set_handle fndecl 6 10221 NULL
+enable_so_alg_setkey_fndecl_10222 alg_setkey fndecl 3 10222 NULL
+enable_so_next_id_hfs_sb_info_10229 next_id hfs_sb_info 0 10229 NULL
++enable_so_storage_size_phm_runtime_table_header_10230 storage_size phm_runtime_table_header 0 10230 NULL
+enable_so_qlcnic_set_sds_ring_count_fndecl_10232 qlcnic_set_sds_ring_count fndecl 2 10232 NULL
+enable_so_input_get_new_minor_fndecl_10235 input_get_new_minor fndecl 0 10235 NULL
+enable_so_iio_devt_vardecl_industrialio_core_c_10237 iio_devt vardecl_industrialio-core.c 0 10237 NULL nohasharray
@@ -159647,6 +187830,7 @@ index 0000000..951b3be
+enable_so_o2nm_this_node_fndecl_11157 o2nm_this_node fndecl 0 11157 NULL
+enable_so_resource_from_user_fndecl_11158 resource_from_user fndecl 3 11158 NULL
+enable_so_batadv_bla_add_claim_fndecl_11159 batadv_bla_add_claim fndecl 3 11159 NULL
++enable_so_nvme_fill_device_id_eui64_fndecl_11160 nvme_fill_device_id_eui64 fndecl 4 11160 NULL
+enable_so_tclass_mlx5_av_11167 tclass mlx5_av 0 11167 NULL
+enable_so_rmtvaluelen2_xfs_da_args_11168 rmtvaluelen2 xfs_da_args 0 11168 NULL
+enable_so_FlNum_hfs_cat_file_11169 FlNum hfs_cat_file 0 11169 NULL nohasharray
@@ -159794,6 +187978,7 @@ index 0000000..951b3be
+enable_so_ceph_sync_direct_write_fndecl_11641 ceph_sync_direct_write fndecl 0-3 11641 NULL
+enable_so_vmw_execbuf_process_fndecl_11642 vmw_execbuf_process fndecl 5 11642 NULL
+enable_so_ath6kl_get_num_reg_fndecl_11647 ath6kl_get_num_reg fndecl 0 11647 NULL
++enable_so_device_property_read_u32_array_fndecl_11662 device_property_read_u32_array fndecl 0 11662 NULL
+enable_so_bulk_size_cam_11663 bulk_size cam 0 11663 NULL
+enable_so___setup_root_fndecl_11664 __setup_root fndecl 2-1 11664 NULL nohasharray
+enable_so_num_snd_ratnum_11664 num snd_ratnum 0 11664 &enable_so___setup_root_fndecl_11664 nohasharray
@@ -160094,6 +188279,7 @@ index 0000000..951b3be
+enable_so_m25p80_read_reg_fndecl_12535 m25p80_read_reg fndecl 4 12535 NULL
+enable_so_learn_buffer_user_len_vardecl_gracl_learn_c_12538 learn_buffer_user_len vardecl_gracl_learn.c 0 12538 NULL
+enable_so_mlxsw_cmd_mbox_query_aq_cap_max_num_cqs_get_fndecl_12540 mlxsw_cmd_mbox_query_aq_cap_max_num_cqs_get fndecl 0 12540 NULL
++enable_so_rxd_cnt_nfp_net_12541 rxd_cnt nfp_net 0 12541 NULL
+enable_so_sd_tuning_rx_cmd_fndecl_12543 sd_tuning_rx_cmd fndecl 2 12543 NULL
+enable_so_cdrom_read_cdda_old_fndecl_12547 cdrom_read_cdda_old fndecl 4 12547 NULL
+enable_so_qword_get_fndecl_12549 qword_get fndecl 0 12549 NULL
@@ -160288,6 +188474,7 @@ index 0000000..951b3be
+enable_so_num_pg_nvm_id_group_13160 num_pg nvm_id_group 0 13160 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
+enable_so_len_rsv_13186 len rsv 0 13186 NULL nohasharray
+enable_so_nouveau_compat_ioctl_fndecl_13186 nouveau_compat_ioctl fndecl 2 13186 &enable_so_len_rsv_13186
+enable_so_blocksize_f2fs_sb_info_13191 blocksize f2fs_sb_info 0 13191 NULL
@@ -160417,6 +188604,7 @@ index 0000000..951b3be
+enable_so_find_rsb_nodir_fndecl_13537 find_rsb_nodir fndecl 3 13537 NULL
+enable_so_hfi1_snoop_write_fndecl_13544 hfi1_snoop_write fndecl 3 13544 NULL
+enable_so_p_filesz_elf64_phdr_13545 p_filesz elf64_phdr 0 13545 NULL
++enable_so_pset_prop_count_elems_of_size_fndecl_13547 pset_prop_count_elems_of_size fndecl 3-0 13547 NULL
+enable_so_len_prism2_download_data_area_13551 len prism2_download_data_area 0 13551 NULL
+enable_so_nes_reg_user_mr_fndecl_13553 nes_reg_user_mr fndecl 2-3 13553 NULL nohasharray
+enable_so_nvme_trans_send_download_fw_cmd_fndecl_13553 nvme_trans_send_download_fw_cmd fndecl 4 13553 &enable_so_nes_reg_user_mr_fndecl_13553
@@ -160474,7 +188662,8 @@ index 0000000..951b3be
+enable_so_fixup_pmc551_fndecl_13679 fixup_pmc551 fndecl 0 13679 NULL
+enable_so_nfc_hci_send_cmd_async_fndecl_13680 nfc_hci_send_cmd_async fndecl 5 13680 NULL
+enable_so_receive_big_fndecl_13686 receive_big fndecl 5 13686 NULL
-+enable_so_writing_osst_buffer_13689 writing osst_buffer 0 13689 NULL
++enable_so_writing_osst_buffer_13689 writing osst_buffer 0 13689 NULL nohasharray
++enable_so___fwnode_property_read_string_array_fndecl_13689 __fwnode_property_read_string_array fndecl 0 13689 &enable_so_writing_osst_buffer_13689
+enable_so_w_align_bdisp_fmt_13694 w_align bdisp_fmt 0 13694 NULL
+enable_so_hpfs_free_sectors_fndecl_13696 hpfs_free_sectors fndecl 3 13696 NULL
+enable_so_skb_size_qlcnic_host_rds_ring_13698 skb_size qlcnic_host_rds_ring 0 13698 NULL
@@ -160577,7 +188766,8 @@ index 0000000..951b3be
+enable_so_rd_size_uhid_device_13986 rd_size uhid_device 0 13986 NULL
+enable_so_libipw_alloc_txb_fndecl_13992 libipw_alloc_txb fndecl 3-2-1 13992 NULL
+enable_so_size_urb_list_13995 size urb_list 0 13995 NULL
-+enable_so_i2400mu_notification_grok_fndecl_13997 i2400mu_notification_grok fndecl 3 13997 NULL
++enable_so_i2400mu_notification_grok_fndecl_13997 i2400mu_notification_grok fndecl 3 13997 NULL nohasharray
++enable_so_n_channels_iwl_mcc_update_resp_v1_13997 n_channels iwl_mcc_update_resp_v1 0 13997 &enable_so_i2400mu_notification_grok_fndecl_13997
+enable_so_pnp_add_io_resource_fndecl_14000 pnp_add_io_resource fndecl 3-2 14000 NULL
+enable_so_n_grants_vscsibk_pend_14001 n_grants vscsibk_pend 0 14001 NULL
+enable_so_blkno_xfs_da_state_blk_14003 blkno xfs_da_state_blk 0 14003 NULL nohasharray
@@ -160814,6 +189004,7 @@ index 0000000..951b3be
+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_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
@@ -160857,6 +189048,7 @@ index 0000000..951b3be
+enable_so_brcmf_sdio_verifymemory_fndecl_14795 brcmf_sdio_verifymemory fndecl 4-2 14795 NULL nohasharray
+enable_so_realloc_buffer_fndecl_14795 realloc_buffer fndecl 2 14795 &enable_so_brcmf_sdio_verifymemory_fndecl_14795
+enable_so_mthca_map_user_db_fndecl_14796 mthca_map_user_db fndecl 5 14796 NULL
++enable_so_alloc_component_match_14799 alloc component_match 0 14799 NULL
+enable_so_event_rx_pool_read_fndecl_14803 event_rx_pool_read fndecl 3 14803 NULL
+enable_so_sg_read_fndecl_14804 sg_read fndecl 3 14804 NULL
+enable_so_sb_max_fwd_alloc_hpfs_sb_info_14807 sb_max_fwd_alloc hpfs_sb_info 0 14807 NULL
@@ -160868,6 +189060,7 @@ index 0000000..951b3be
+enable_so_tg3_change_mtu_fndecl_14826 tg3_change_mtu fndecl 2 14826 NULL
+enable_so_mlxsw_sx_flood_init_fndecl_14827 mlxsw_sx_flood_init fndecl 0 14827 NULL
+enable_so_parport_read_fndecl_14828 parport_read fndecl 0 14828 NULL
++enable_so_mlx5_core_sriov_configure_fndecl_14829 mlx5_core_sriov_configure fndecl 2 14829 NULL
+enable_so_residual_length_response_14830 residual_length response 0 14830 NULL
+enable_so_sis5595_base_vardecl_i2c_sis5595_c_14832 sis5595_base vardecl_i2c-sis5595.c 0 14832 NULL
+enable_so_shift_arg_pages_fndecl_14835 shift_arg_pages fndecl 2 14835 NULL nohasharray
@@ -160880,6 +189073,7 @@ index 0000000..951b3be
+enable_so_iwl_pcie_alloc_fw_monitor_fndecl_14872 iwl_pcie_alloc_fw_monitor fndecl 2 14872 NULL
+enable_so_threads_mask_netns_ipvs_14873 threads_mask netns_ipvs 0 14873 NULL
+enable_so_inocache_hashsize_jffs2_sb_info_14875 inocache_hashsize jffs2_sb_info 0 14875 NULL
++enable_so_wm_adsp_buffer_write_fndecl_14879 wm_adsp_buffer_write fndecl 0 14879 NULL
+enable_so_submit_queues_vardecl_null_blk_c_14881 submit_queues vardecl_null_blk.c 0 14881 NULL
+enable_so_pg_first_page_collect_14888 pg_first page_collect 0 14888 NULL
+enable_so___vb2_get_done_vb_fndecl_14889 __vb2_get_done_vb fndecl 0 14889 NULL
@@ -161113,6 +189307,7 @@ index 0000000..951b3be
+enable_so_end_bttv_vbi_fmt_15637 end bttv_vbi_fmt 0 15637 NULL nohasharray
+enable_so_SyS_pselect6_fndecl_15637 SyS_pselect6 fndecl 1 15637 &enable_so_end_bttv_vbi_fmt_15637
+enable_so_dma_in_redrat3_dev_15639 dma_in redrat3_dev 0 15639 NULL
++enable_so_num_active_peers_ath10k_15643 num_active_peers ath10k 0 15643 NULL
+enable_so_akid_raw_issuer_size_x509_parse_context_15651 akid_raw_issuer_size x509_parse_context 0 15651 NULL
+enable_so_read_bytes_from_xdr_buf_fndecl_15654 read_bytes_from_xdr_buf fndecl 4-2 15654 NULL nohasharray
+enable_so_mapped_vram_radeonfb_info_15654 mapped_vram radeonfb_info 0 15654 &enable_so_read_bytes_from_xdr_buf_fndecl_15654 nohasharray
@@ -161182,6 +189377,7 @@ index 0000000..951b3be
+enable_so_msg_print_ext_body_fndecl_15847 msg_print_ext_body fndecl 0 15847 NULL
+enable_so_pnp_register_mem_resource_fndecl_15849 pnp_register_mem_resource fndecl 6-3-5 15849 NULL
+enable_so_net2272_read_fndecl_15850 net2272_read fndecl 0 15850 NULL
++enable_so_max_num_peers_ath10k_15853 max_num_peers ath10k 0 15853 NULL
+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
@@ -161315,7 +189511,8 @@ index 0000000..951b3be
+enable_so_crypto_alloc_instance2_fndecl_16302 crypto_alloc_instance2 fndecl 3 16302 NULL
+enable_so_isdn_tty_countDLE_fndecl_16304 isdn_tty_countDLE fndecl 0 16304 NULL
+enable_so_brcmf_sdiod_txglomsz_vardecl_bcmsdh_c_16306 brcmf_sdiod_txglomsz vardecl_bcmsdh.c 0 16306 NULL
-+enable_so_len_ieee80211_vendor_radiotap_16308 len ieee80211_vendor_radiotap 0 16308 NULL
++enable_so_len_ieee80211_vendor_radiotap_16308 len ieee80211_vendor_radiotap 0 16308 NULL nohasharray
++enable_so_wm_adsp_compr_copy_fndecl_16308 wm_adsp_compr_copy fndecl 3 16308 &enable_so_len_ieee80211_vendor_radiotap_16308
+enable_so_aac_fib_send_fndecl_16315 aac_fib_send fndecl 3 16315 NULL
+enable_so_memblock_mark_mirror_fndecl_16321 memblock_mark_mirror fndecl 2-1 16321 NULL
+enable_so_major_tty_driver_16323 major tty_driver 0 16323 NULL
@@ -161435,6 +189632,7 @@ index 0000000..951b3be
+enable_so_opcfg_ofsl_cyttsp4_sysinfo_data_16723 opcfg_ofsl cyttsp4_sysinfo_data 0 16723 NULL
+enable_so_multi_io_quirk_mmc_host_ops_16729 multi_io_quirk mmc_host_ops 0 16729 NULL
+enable_so_fat_length_fat_boot_sector_16730 fat_length fat_boot_sector 0 16730 NULL
++enable_so_shader_rec_size_drm_vc4_submit_cl_16731 shader_rec_size drm_vc4_submit_cl 0 16731 NULL
+enable_so_width_qxl_head_16734 width qxl_head 0 16734 NULL
+enable_so_nchannels_twl6030_gpadc_platform_data_16736 nchannels twl6030_gpadc_platform_data 0 16736 NULL
+enable_so_rx_rate_rx_frames_per_rates_read_fndecl_16737 rx_rate_rx_frames_per_rates_read fndecl 3 16737 NULL nohasharray
@@ -161445,6 +189643,7 @@ index 0000000..951b3be
+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
+enable_so_discard_next_dnode_fndecl_16758 discard_next_dnode fndecl 2 16758 NULL
++enable_so_ucNumEntries__ATOM_Tonga_PCIE_Table_16761 ucNumEntries _ATOM_Tonga_PCIE_Table 0 16761 NULL
+enable_so___vfs_write_fndecl_16765 __vfs_write fndecl 0-3 16765 NULL
+enable_so___blk_end_request_all_fndecl_16766 __blk_end_request_all fndecl 2 16766 NULL
+enable_so_cluster_vardecl_pd_c_16770 cluster vardecl_pd.c 0 16770 NULL nohasharray
@@ -161519,6 +189718,7 @@ index 0000000..951b3be
+enable_so_vcs_read_fndecl_16962 vcs_read fndecl 3 16962 NULL
+enable_so_call_id_rxrpc_call_16964 call_id rxrpc_call 0 16964 NULL
+enable_so_minor_oss_minor_dev_16965 minor oss_minor_dev 0 16965 NULL
++enable_so___alloc_dummy_extent_buffer_fndecl_16969 __alloc_dummy_extent_buffer fndecl 2 16969 NULL
+enable_so_cifs_sync_write_fndecl_16972 cifs_sync_write fndecl 6 16972 NULL
+enable_so_fat_reserved_fat_bios_param_block_16977 fat_reserved fat_bios_param_block 0 16977 NULL
+enable_so_virtio_gpu_alloc_cmd_fndecl_16978 virtio_gpu_alloc_cmd fndecl 3 16978 NULL
@@ -161607,6 +189807,7 @@ index 0000000..951b3be
+enable_so_offset_rbuf_info_17181 offset rbuf_info 0 17181 NULL
+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_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
@@ -161751,7 +189952,8 @@ index 0000000..951b3be
+enable_so_buf_len_ceph_none_authorizer_17652 buf_len ceph_none_authorizer 0 17652 NULL nohasharray
+enable_so_dvb_dmx_init_fndecl_17652 dvb_dmx_init fndecl 0 17652 &enable_so_buf_len_ceph_none_authorizer_17652
+enable_so_size_mem_array_17655 size mem_array 0 17655 NULL
-+enable_so_snd_wscale_tcp_options_received_17658 snd_wscale tcp_options_received 0 17658 NULL
++enable_so_snd_wscale_tcp_options_received_17658 snd_wscale tcp_options_received 0 17658 NULL nohasharray
++enable_so_btrfs_dedupe_file_range_fndecl_17658 btrfs_dedupe_file_range fndecl 3 17658 &enable_so_snd_wscale_tcp_options_received_17658
+enable_so_size_scsi_host_sg_pool_17661 size scsi_host_sg_pool 0 17661 NULL nohasharray
+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
@@ -162439,6 +190641,7 @@ index 0000000..951b3be
+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
+enable_so_memory_maker_code_mspro_sys_info_19650 memory_maker_code mspro_sys_info 0 19650 NULL
++enable_so_get_rq_pas_size_fndecl_19651 get_rq_pas_size fndecl 0 19651 NULL
+enable_so_af9033_rd_regs_fndecl_19652 af9033_rd_regs fndecl 4 19652 NULL
+enable_so_shadow_step_fndecl_19653 shadow_step fndecl 2 19653 NULL
+enable_so_thermal_false_irq_read_fndecl_19654 thermal_false_irq_read fndecl 3 19654 NULL
@@ -162483,6 +190686,7 @@ index 0000000..951b3be
+enable_so_fw_mem_block_size_wl1271_19784 fw_mem_block_size wl1271 0 19784 NULL
+enable_so_gss_decrypt_xdr_buf_fndecl_19786 gss_decrypt_xdr_buf fndecl 3 19786 NULL
+enable_so_get_alua_req_fndecl_19797 get_alua_req fndecl 3 19797 NULL
++enable_so_num_u2_ports_xhci_hcd_mtk_19801 num_u2_ports xhci_hcd_mtk 0 19801 NULL
+enable_so_pvscsi_get_max_targets_fndecl_19802 pvscsi_get_max_targets fndecl 0 19802 NULL
+enable_so_fromlen_nfs3_symlinkargs_19803 fromlen nfs3_symlinkargs 0 19803 NULL
+enable_so_exit_error_msb_data_19810 exit_error msb_data 0 19810 NULL
@@ -162596,6 +190800,7 @@ index 0000000..951b3be
+enable_so_usb_ftdi_elan_edset_single_fndecl_20181 usb_ftdi_elan_edset_single fndecl 0 20181 NULL nohasharray
+enable_so_swapRB_sd_20181 swapRB sd 0 20181 &enable_so_usb_ftdi_elan_edset_single_fndecl_20181
+enable_so___kmalloc_track_caller_fndecl_20188 __kmalloc_track_caller fndecl 1 20188 NULL
++enable_so_qp_attach_mbox_size_fndecl_20191 qp_attach_mbox_size fndecl 0 20191 NULL
+enable_so_lookup_memtype_fndecl_20192 lookup_memtype fndecl 1 20192 NULL
+enable_so_agp_memory_reserved_vardecl_20196 agp_memory_reserved vardecl 0 20196 NULL nohasharray
+enable_so_iram_base_intel_sst_drv_20196 iram_base intel_sst_drv 0 20196 &enable_so_agp_memory_reserved_vardecl_20196
@@ -162642,6 +190847,7 @@ index 0000000..951b3be
+enable_so_xfs_dir2_leaf_trim_data_fndecl_20310 xfs_dir2_leaf_trim_data fndecl 3 20310 NULL nohasharray
+enable_so_index_vardecl_nm256_c_20310 index vardecl_nm256.c 0 20310 &enable_so_xfs_dir2_leaf_trim_data_fndecl_20310
+enable_so_cx18_read_pos_fndecl_20312 cx18_read_pos fndecl 3 20312 NULL
++enable_so_wilc_spi_rx_fndecl_20314 wilc_spi_rx fndecl 3 20314 NULL
+enable_so_cas_change_mtu_fndecl_20320 cas_change_mtu fndecl 2 20320 NULL
+enable_so_ati_create_gatt_pages_fndecl_20321 ati_create_gatt_pages fndecl 1 20321 NULL
+enable_so_max_rxsz_cxgbi_ddp_info_20322 max_rxsz cxgbi_ddp_info 0 20322 NULL nohasharray
@@ -162679,6 +190885,7 @@ index 0000000..951b3be
+enable_so_regulator_register_always_on_fndecl_20403 regulator_register_always_on fndecl 1 20403 &enable_so_xfs_qm_dqusage_adjust_fndecl_20403
+enable_so_pwr_rcvd_bcns_cnt_read_fndecl_20405 pwr_rcvd_bcns_cnt_read fndecl 3 20405 NULL
+enable_so_diversity_total_num_of_toggles_read_fndecl_20407 diversity_total_num_of_toggles_read fndecl 3 20407 NULL
++enable_so_num_units_wlan_host_mem_req_20410 num_units wlan_host_mem_req 0 20410 NULL
+enable_so_mc_rreg_radeon_device_20418 mc_rreg radeon_device 0 20418 NULL
+enable_so_sd_log_head_gfs2_sbd_20435 sd_log_head gfs2_sbd 0 20435 NULL
+enable_so_max_vblank_mt9v032_model_data_20437 max_vblank mt9v032_model_data 0 20437 NULL nohasharray
@@ -162799,6 +191006,7 @@ index 0000000..951b3be
+enable_so_channels_min_snd_soc_pcm_stream_20771 channels_min snd_soc_pcm_stream 0 20771 NULL nohasharray
+enable_so_tx_ring_size_mlx4_en_port_profile_20771 tx_ring_size mlx4_en_port_profile 0 20771 &enable_so_channels_min_snd_soc_pcm_stream_20771
+enable_so_ltab_sz_ubifs_info_20776 ltab_sz ubifs_info 0 20776 NULL
++enable_so_amdgpu_sched_jobs_vardecl_20778 amdgpu_sched_jobs vardecl 0 20778 NULL
+enable_so_fat_fats_fat_bios_param_block_20785 fat_fats fat_bios_param_block 0 20785 NULL
+enable_so_orig_x_screen_info_20787 orig_x screen_info 0 20787 NULL nohasharray
+enable_so_ncp_search_for_fileset_fndecl_20787 ncp_search_for_fileset fndecl 6 20787 &enable_so_orig_x_screen_info_20787
@@ -162891,7 +191099,8 @@ index 0000000..951b3be
+enable_so_start_range_21034 start range 0 21034 NULL
+enable_so_crtc_vdisplay_drm_display_mode_21037 crtc_vdisplay drm_display_mode 0 21037 NULL
+enable_so_garp_attr_create_fndecl_21048 garp_attr_create fndecl 3 21048 NULL
-+enable_so_prep_umr_reg_wqe_fndecl_21050 prep_umr_reg_wqe fndecl 5 21050 NULL
++enable_so_prep_umr_reg_wqe_fndecl_21050 prep_umr_reg_wqe fndecl 5 21050 NULL nohasharray
++enable_so_vary_usbtest_param_32_21050 vary usbtest_param_32 0 21050 &enable_so_prep_umr_reg_wqe_fndecl_21050
+enable_so_erase_shift_onenand_chip_21052 erase_shift onenand_chip 0 21052 NULL nohasharray
+enable_so_tx_queues_rt2x00_ops_21052 tx_queues rt2x00_ops 0 21052 &enable_so_erase_shift_onenand_chip_21052
+enable_so_xfs_alloc_min_freelist_fndecl_21056 xfs_alloc_min_freelist fndecl 0 21056 NULL
@@ -163193,6 +191402,7 @@ index 0000000..951b3be
+enable_so_error_memstick_request_21931 error memstick_request 0 21931 NULL nohasharray
+enable_so_bfad_iocmd_rport_set_speed_fndecl_21931 bfad_iocmd_rport_set_speed fndecl 0 21931 &enable_so_error_memstick_request_21931 nohasharray
+enable_so_rx_eth_fndecl_21931 rx_eth fndecl 4 21931 &enable_so_bfad_iocmd_rport_set_speed_fndecl_21931
++enable_so_wilc_network_info_received_fndecl_21936 wilc_network_info_received fndecl 3 21936 NULL
+enable_so_page_cache_async_readahead_fndecl_21944 page_cache_async_readahead fndecl 5 21944 NULL
+enable_so_ssb_bus_ssbbus_register_fndecl_21946 ssb_bus_ssbbus_register fndecl 2 21946 NULL
+enable_so_in_pipe_ttusb_dec_21947 in_pipe ttusb_dec 0 21947 NULL
@@ -163520,6 +191730,7 @@ index 0000000..951b3be
+enable_so_count_nfs3_readdirargs_22881 count nfs3_readdirargs 0 22881 NULL
+enable_so_max_wrs_rds_iw_device_22882 max_wrs rds_iw_device 0 22882 NULL
+enable_so_len_prism2_download_area_22884 len prism2_download_area 0 22884 NULL
++enable_so_length_usbtest_param_32_22886 length usbtest_param_32 0 22886 NULL
+enable_so_frag_len_atmel_private_22893 frag_len atmel_private 0 22893 NULL
+enable_so_snap_names_len_rbd_image_header_ondisk_22898 snap_names_len rbd_image_header_ondisk 0 22898 NULL
+enable_so___btrfs_cow_block_fndecl_22902 __btrfs_cow_block fndecl 0 22902 NULL
@@ -163619,6 +191830,7 @@ index 0000000..951b3be
+enable_so_x_res_vbe_mode_ib_23177 x_res vbe_mode_ib 0 23177 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
+enable_so_ir_context_mask_fw_ohci_23196 ir_context_mask fw_ohci 0 23196 NULL
+enable_so_seq_lseek_fndecl_23197 seq_lseek fndecl 2 23197 NULL
+enable_so_bdev_erase_fndecl_23198 bdev_erase fndecl 2-3 23198 NULL
@@ -163685,6 +191897,7 @@ index 0000000..951b3be
+enable_so_calculate_xstate_size_fndecl_23404 calculate_xstate_size fndecl 0 23404 NULL
+enable_so_s5p_jpeg_get_subsampling_mode_fndecl_23405 s5p_jpeg_get_subsampling_mode fndecl 0 23405 NULL nohasharray
+enable_so_map_block_for_writepage_fndecl_23405 map_block_for_writepage fndecl 3 23405 &enable_so_s5p_jpeg_get_subsampling_mode_fndecl_23405
++enable_so_max_socks_sock_reuseport_23407 max_socks sock_reuseport 0 23407 NULL
+enable_so_nx_fw_cmd_set_gbe_port_fndecl_23412 nx_fw_cmd_set_gbe_port fndecl 3 23412 NULL
+enable_so_numerator_v4l2_fract_23413 numerator v4l2_fract 0 23413 NULL
+enable_so_logfs_safe_iget_fndecl_23415 logfs_safe_iget fndecl 2 23415 NULL
@@ -163920,6 +192133,7 @@ index 0000000..951b3be
+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_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
+enable_so_capture_bufsize_vardecl_nm256_c_24100 capture_bufsize vardecl_nm256.c 0 24100 NULL
+enable_so_dcbp_set_pad_bits_fndecl_24101 dcbp_set_pad_bits fndecl 2 24101 NULL
+enable_so_bus_mtu_brcmf_usbdev_24102 bus_mtu brcmf_usbdev 0 24102 NULL
@@ -164159,7 +192373,9 @@ index 0000000..951b3be
+enable_so_queue_depth_blk_mq_tag_set_24719 queue_depth blk_mq_tag_set 0 24719 NULL
+enable_so_qxl_ttm_tt_create_fndecl_24720 qxl_ttm_tt_create fndecl 2 24720 NULL
+enable_so_drm_gem_cma_create_with_handle_fndecl_24721 drm_gem_cma_create_with_handle fndecl 3 24721 NULL
++enable_so_wilc_set_join_req_fndecl_24725 wilc_set_join_req fndecl 4-6 24725 NULL
+enable_so_bfs_get_block_fndecl_24726 bfs_get_block fndecl 2 24726 NULL
++enable_so_outlen_ib_udata_24729 outlen ib_udata 0 24729 NULL
+enable_so_VBP_kyrofb_info_24731 VBP kyrofb_info 0 24731 NULL nohasharray
+enable_so_HiSax_readstatus_fndecl_24731 HiSax_readstatus fndecl 2 24731 &enable_so_VBP_kyrofb_info_24731
+enable_so_next_idtentry_24734 next idtentry 0 24734 NULL
@@ -164173,7 +192389,8 @@ index 0000000..951b3be
+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
@@ -164567,6 +192784,7 @@ index 0000000..951b3be
+enable_so_kvm_hv_set_msr_common_fndecl_25940 kvm_hv_set_msr_common fndecl 3 25940 NULL nohasharray
+enable_so_n_piobufs_efx_ef10_nic_data_25940 n_piobufs efx_ef10_nic_data 0 25940 &enable_so_kvm_hv_set_msr_common_fndecl_25940
+enable_so___xfs_bmbt_get_all_fndecl_25952 __xfs_bmbt_get_all fndecl 2-1 25952 NULL
++enable_so___media_entity_enum_init_fndecl_25953 __media_entity_enum_init fndecl 2 25953 NULL
+enable_so_cyttsp_spi_read_block_data_fndecl_25954 cyttsp_spi_read_block_data fndecl 4 25954 NULL
+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
@@ -164595,6 +192813,7 @@ index 0000000..951b3be
+enable_so_dataflash_read_user_otp_fndecl_26075 dataflash_read_user_otp fndecl 3-2 26075 NULL nohasharray
+enable_so_ep0_write_fndecl_26075 ep0_write fndecl 3 26075 &enable_so_dataflash_read_user_otp_fndecl_26075
+enable_so_hfsplus_ext_build_key_fndecl_26076 hfsplus_ext_build_key fndecl 3 26076 NULL
++enable_so_alloc_bitmap_fndecl_26079 alloc_bitmap fndecl 1 26079 NULL
+enable_so_fratio_arizona_fll_cfg_26082 fratio arizona_fll_cfg 0 26082 NULL
+enable_so_fdt_first_subnode_fndecl_26084 fdt_first_subnode fndecl 2 26084 NULL nohasharray
+enable_so_remap_to_origin_then_cache_fndecl_26084 remap_to_origin_then_cache fndecl 4 26084 &enable_so_fdt_first_subnode_fndecl_26084
@@ -164773,6 +192992,7 @@ index 0000000..951b3be
+enable_so_read_tree_block_fndecl_26587 read_tree_block fndecl 2 26587 NULL
+enable_so_early_init_dt_scan_chosen_fndecl_26588 early_init_dt_scan_chosen fndecl 1 26588 NULL
+enable_so_bytes_per_word_tegra_slink_data_26590 bytes_per_word tegra_slink_data 0 26590 NULL
++enable_so_rates_len_add_sta_param_26593 rates_len add_sta_param 0 26593 NULL
+enable_so_nvme_trans_completion_fndecl_26597 nvme_trans_completion fndecl 0 26597 NULL
+enable_so_tx_desc_count_xgbe_prv_data_26603 tx_desc_count xgbe_prv_data 0 26603 NULL
+enable_so_UMAsize_sis_video_info_26611 UMAsize sis_video_info 0 26611 NULL
@@ -165145,6 +193365,7 @@ index 0000000..951b3be
+enable_so_period_frames_usb_stream_config_27656 period_frames usb_stream_config 0 27656 NULL
+enable_so_WriteRegs_fndecl_27658 WriteRegs fndecl 4 27658 NULL
+enable_so_xen_get_pages_limit_fndecl_27661 xen_get_pages_limit fndecl 0 27661 NULL
++enable_so_ceph_osdc_wait_request_fndecl_27663 ceph_osdc_wait_request fndecl 0 27663 NULL
+enable_so_efx_ef10_mem_map_size_fndecl_27664 efx_ef10_mem_map_size fndecl 0 27664 NULL
+enable_so_mr_write_fndecl_27670 mr_write fndecl 0 27670 NULL
+enable_so_size_compat_ip6t_replace_27672 size compat_ip6t_replace 0 27672 NULL
@@ -165240,6 +193461,7 @@ index 0000000..951b3be
+enable_so_ext4_seek_hole_fndecl_27990 ext4_seek_hole fndecl 2 27990 NULL
+enable_so_write_mei_hw_ops_27991 write mei_hw_ops 0 27991 NULL
+enable_so_alloc_ccbs_blogic_adapter_27993 alloc_ccbs blogic_adapter 0 27993 NULL
++enable_so_cumulative_size_wm_adsp_buffer_region_27998 cumulative_size wm_adsp_buffer_region 0 27998 NULL
+enable_so___nf_ct_ext_add_length_fndecl_27999 __nf_ct_ext_add_length fndecl 3 27999 NULL
+enable_so_ubifs_end_scan_fndecl_28000 ubifs_end_scan fndecl 4 28000 NULL nohasharray
+enable_so_page_count_scrub_block_28000 page_count scrub_block 0 28000 &enable_so_ubifs_end_scan_fndecl_28000
@@ -165439,6 +193661,7 @@ index 0000000..951b3be
+enable_so_ci_ll_init_fndecl_28561 ci_ll_init fndecl 3 28561 NULL nohasharray
+enable_so_num_pads_uvc_entity_28561 num_pads uvc_entity 0 28561 &enable_so_ci_ll_init_fndecl_28561
+enable_so_PRO_RATE_DEFAULT_vardecl_ice1712_c_28563 PRO_RATE_DEFAULT vardecl_ice1712.c 0 28563 NULL
++enable_so_wm_adsp_write_data_word_fndecl_28566 wm_adsp_write_data_word fndecl 0 28566 NULL
+enable_so_wil_write_back_fndecl_28568 wil_write_back fndecl 3 28568 NULL
+enable_so_nvme_npages_fndecl_28569 nvme_npages fndecl 0-1 28569 NULL
+enable_so_out_max_chans_snd_card_asihpi_28574 out_max_chans snd_card_asihpi 0 28574 NULL nohasharray
@@ -166110,6 +194333,7 @@ index 0000000..951b3be
+enable_so_rx_filter_accum_arp_pend_requests_read_fndecl_30696 rx_filter_accum_arp_pend_requests_read fndecl 3 30696 &enable_so_status_urb_30696
+enable_so_hdsp_spdif_sample_rate_fndecl_30700 hdsp_spdif_sample_rate fndecl 0 30700 NULL
+enable_so_bm_entry_read_fndecl_30707 bm_entry_read fndecl 3 30707 NULL
++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_lbs_threshold_write_fndecl_30733 lbs_threshold_write fndecl 5 30733 NULL
@@ -166322,6 +194546,7 @@ index 0000000..951b3be
+enable_so_mmap_base_kioctx_31285 mmap_base kioctx 0 31285 NULL
+enable_so_igb_enable_sriov_fndecl_31288 igb_enable_sriov fndecl 2 31288 NULL
+enable_so_nfs_readdir_page_filler_fndecl_31292 nfs_readdir_page_filler fndecl 5 31292 NULL
++enable_so_avail_wm_adsp_compr_buf_31294 avail wm_adsp_compr_buf 0 31294 NULL
+enable_so_asymmetric_key_generate_id_fndecl_31299 asymmetric_key_generate_id fndecl 4-2 31299 NULL
+enable_so_fs_shift_hfsplus_sb_info_31309 fs_shift hfsplus_sb_info 0 31309 NULL
+enable_so_rxblen_brcmf_sdio_31317 rxblen brcmf_sdio 0 31317 NULL
@@ -166342,6 +194567,7 @@ index 0000000..951b3be
+enable_so_device_acpiphp_slot_31359 device acpiphp_slot 0 31359 NULL
+enable_so_romfs_dev_strcmp_fndecl_31365 romfs_dev_strcmp fndecl 4-2 31365 NULL nohasharray
+enable_so_SyS_migrate_pages_fndecl_31365 SyS_migrate_pages fndecl 2 31365 &enable_so_romfs_dev_strcmp_fndecl_31365
++enable_so_wilc_scan_fndecl_31368 wilc_scan fndecl 5-7 31368 NULL
+enable_so_req_lim_delta_srp_rsp_31371 req_lim_delta srp_rsp 0 31371 NULL
+enable_so_ioctl_fndecl_31375 ioctl fndecl 3 31375 NULL
+enable_so_gfs2_meta_read_fndecl_31379 gfs2_meta_read fndecl 2 31379 NULL
@@ -166566,6 +194792,7 @@ index 0000000..951b3be
+enable_so_blocksize_udf_options_32019 blocksize udf_options 0 32019 NULL
+enable_so_depth_zr364xx_fmt_32028 depth zr364xx_fmt 0 32028 NULL
+enable_so_recent_mt_proc_write_fndecl_32029 recent_mt_proc_write fndecl 3 32029 NULL
++enable_so_skl_tplg_tlv_control_get_fndecl_32038 skl_tplg_tlv_control_get fndecl 3 32038 NULL
+enable_so_check_xattr_ref_inode_fndecl_32039 check_xattr_ref_inode fndecl 0 32039 NULL
+enable_so_base_efifb_dmi_info_32041 base efifb_dmi_info 0 32041 NULL
+enable_so_balloon_set_new_target_fndecl_32044 balloon_set_new_target fndecl 1 32044 NULL
@@ -166700,6 +194927,7 @@ index 0000000..951b3be
+enable_so_permission_inode_operations_32455 permission inode_operations 0 32455 NULL
+enable_so_ext4_da_write_inline_data_end_fndecl_32456 ext4_da_write_inline_data_end fndecl 2-4 32456 NULL
+enable_so_snd_buf_bytes_vardecl_usbatm_c_32457 snd_buf_bytes vardecl_usbatm.c 0 32457 NULL
++enable_so_dvb_create_tsout_entity_fndecl_32460 dvb_create_tsout_entity fndecl 3 32460 NULL
+enable_so_isr_irqs_read_fndecl_32462 isr_irqs_read fndecl 3 32462 NULL nohasharray
+enable_so_ddata_ofs_cyttsp4_sysinfo_ofs_32462 ddata_ofs cyttsp4_sysinfo_ofs 0 32462 &enable_so_isr_irqs_read_fndecl_32462
+enable_so_neighbormtu_mastersmsl_ib_port_info_32464 neighbormtu_mastersmsl ib_port_info 0 32464 NULL
@@ -166751,6 +194979,7 @@ index 0000000..951b3be
+enable_so_msg_print_ext_header_fndecl_32580 msg_print_ext_header fndecl 0 32580 NULL
+enable_so_check_right_item_operations_32585 check_right item_operations 0 32585 NULL nohasharray
+enable_so_fnic_fc_trace_get_data_fndecl_32585 fnic_fc_trace_get_data fndecl 0 32585 &enable_so_check_right_item_operations_32585
++enable_so_mlx5_modify_nic_vport_vlans_fndecl_32595 mlx5_modify_nic_vport_vlans fndecl 3 32595 NULL
+enable_so_bop_assign_nilfs_bmap_operations_32598 bop_assign nilfs_bmap_operations 0 32598 NULL
+enable_so_paging32_prefetch_gpte_fndecl_32604 paging32_prefetch_gpte fndecl 4 32604 NULL
+enable_so_channel_num_sh_dmae_pdata_32606 channel_num sh_dmae_pdata 0 32606 NULL
@@ -166808,6 +195037,7 @@ index 0000000..951b3be
+enable_so_reg_word_size_snd_soc_codec_driver_32786 reg_word_size snd_soc_codec_driver 0 32786 &enable_so_hpi_instream_ancillary_write_fndecl_32786
+enable_so_portcntrs_2_read_fndecl_32793 portcntrs_2_read fndecl 3 32793 NULL
+enable_so_mp_register_ioapic_fndecl_32802 mp_register_ioapic fndecl 3 32802 NULL
++enable_so_wilc_setup_multicast_filter_fndecl_32803 wilc_setup_multicast_filter fndecl 3 32803 NULL
+enable_so_pipe_usb_fifo_32805 pipe usb_fifo 0 32805 NULL nohasharray
+enable_so_nfc_allocate_device_fndecl_32805 nfc_allocate_device fndecl 3 32805 &enable_so_pipe_usb_fifo_32805
+enable_so_info_len_ib_ucm_info_32807 info_len ib_ucm_info 0 32807 NULL
@@ -166836,7 +195066,8 @@ index 0000000..951b3be
+enable_so_dvb_ringbuffer_read_user_fndecl_32877 dvb_ringbuffer_read_user fndecl 3-0 32877 NULL nohasharray
+enable_so_dz_divisor_dn_zone_32877 dz_divisor dn_zone 0 32877 &enable_so_dvb_ringbuffer_read_user_fndecl_32877
+enable_so_mem_cgroup_move_charge_pte_range_fndecl_32885 mem_cgroup_move_charge_pte_range fndecl 2 32885 NULL nohasharray
-+enable_so_btrfs_cow_block_fndecl_32885 btrfs_cow_block fndecl 0 32885 &enable_so_mem_cgroup_move_charge_pte_range_fndecl_32885
++enable_so_btrfs_cow_block_fndecl_32885 btrfs_cow_block fndecl 0 32885 &enable_so_mem_cgroup_move_charge_pte_range_fndecl_32885 nohasharray
++enable_so_wilc_spi_write_fndecl_32885 wilc_spi_write fndecl 4 32885 &enable_so_btrfs_cow_block_fndecl_32885
+enable_so_m_ialloc_inos_xfs_mount_32889 m_ialloc_inos xfs_mount 0 32889 NULL
+enable_so_snoop_table_size_ib_mad_qp_info_32891 snoop_table_size ib_mad_qp_info 0 32891 NULL
+enable_so_snd_gus_dram_read_fndecl_32893 snd_gus_dram_read fndecl 4 32893 NULL
@@ -166997,6 +195228,7 @@ index 0000000..951b3be
+enable_so_dvb_register_device_fndecl_33363 dvb_register_device fndecl 0 33363 NULL
+enable_so_udl_prime_create_fndecl_33364 udl_prime_create fndecl 2 33364 NULL nohasharray
+enable_so_scanlength_usbvision_frame_33364 scanlength usbvision_frame 0 33364 &enable_so_udl_prime_create_fndecl_33364
++enable_so_mlx5_core_sriov_enable_fndecl_33369 mlx5_core_sriov_enable fndecl 2 33369 NULL
+enable_so_ihandlen_xfs_fsop_handlereq_33370 ihandlen xfs_fsop_handlereq 0 33370 NULL
+enable_so_lpfc_sg_seg_cnt_init_fndecl_33371 lpfc_sg_seg_cnt_init fndecl 2 33371 NULL
+enable_so_ib_qib_max_srq_wrs_vardecl_33376 ib_qib_max_srq_wrs vardecl 0 33376 NULL
@@ -167056,6 +195288,7 @@ index 0000000..951b3be
+enable_so_num_seq_vgastate_33544 num_seq vgastate 0 33544 &enable_so_sq_size_nes_hw_qp_33544
+enable_so_tx_queues_nicvf_33546 tx_queues nicvf 0 33546 NULL
+enable_so_dlfb_setup_modes_fndecl_33548 dlfb_setup_modes fndecl 4 33548 NULL
++enable_so_uinput_abs_setup_fndecl_33551 uinput_abs_setup fndecl 3 33551 NULL
+enable_so_kvm_vcpu_read_guest_fndecl_33552 kvm_vcpu_read_guest fndecl 2-4 33552 NULL
+enable_so_hns_nic_change_mtu_fndecl_33553 hns_nic_change_mtu fndecl 2 33553 NULL nohasharray
+enable_so_tcf_hash_create_fndecl_33553 tcf_hash_create fndecl 4 33553 &enable_so_hns_nic_change_mtu_fndecl_33553
@@ -167200,6 +195433,7 @@ index 0000000..951b3be
+enable_so_cwarn_cm4000_dev_33978 cwarn cm4000_dev 0 33978 NULL
+enable_so_buf_len_wmi_tlv_mgmt_rx_ev_33979 buf_len wmi_tlv_mgmt_rx_ev 0 33979 NULL
+enable_so_usbat_bulk_write_fndecl_33983 usbat_bulk_write fndecl 3-4 33983 NULL
++enable_so_spi_data_write_fndecl_33987 spi_data_write fndecl 3 33987 NULL
+enable_so_unit_off_ore_striping_info_33989 unit_off ore_striping_info 0 33989 NULL
+enable_so_size_fjes_hw_resource_33991 size fjes_hw_resource 0 33991 NULL
+enable_so_sectorsize_scrub_ctx_33993 sectorsize scrub_ctx 0 33993 NULL
@@ -167481,6 +195715,7 @@ index 0000000..951b3be
+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
++enable_so_pset_prop_read_string_array_fndecl_34862 pset_prop_read_string_array fndecl 0 34862 NULL
+enable_so_pfkey_recvmsg_fndecl_34863 pfkey_recvmsg fndecl 3 34863 NULL nohasharray
+enable_so_s_map_size_adfs_sb_info_34863 s_map_size adfs_sb_info 0 34863 &enable_so_pfkey_recvmsg_fndecl_34863
+enable_so_odm_num_comps_pnfs_osd_data_map_34865 odm_num_comps pnfs_osd_data_map 0 34865 NULL
@@ -167528,6 +195763,7 @@ index 0000000..951b3be
+enable_so_rfkill_fop_read_fndecl_34980 rfkill_fop_read fndecl 3 34980 NULL
+enable_so_amdgpu_cgs_add_irq_source_fndecl_34994 amdgpu_cgs_add_irq_source fndecl 3 34994 NULL
+enable_so_kfd_gtt_sa_init_fndecl_34996 kfd_gtt_sa_init fndecl 3-2 34996 NULL
++enable_so_wm_adsp_buffer_capture_block_fndecl_35001 wm_adsp_buffer_capture_block fndecl 2-0 35001 NULL
+enable_so_error_elp_while_tx_read_fndecl_35002 error_elp_while_tx_read fndecl 3 35002 NULL
+enable_so_rx_ring_count_ixgbe_adapter_35004 rx_ring_count ixgbe_adapter 0 35004 NULL
+enable_so_amb_len_i5k_amb_data_35007 amb_len i5k_amb_data 0 35007 NULL
@@ -168115,6 +196351,7 @@ index 0000000..951b3be
+enable_so___tty_alloc_driver_fndecl_36660 __tty_alloc_driver fndecl 1 36660 NULL
+enable_so_qp_alloc_host_work_fndecl_36661 qp_alloc_host_work fndecl 3-5 36661 NULL
+enable_so_dac_channels_mixer_oxygen_model_36662 dac_channels_mixer oxygen_model 0 36662 NULL
++enable_so_regmap_raw_write_fndecl_36664 regmap_raw_write fndecl 0 36664 NULL
+enable_so_roffset_scifioctl_copy_36667 roffset scifioctl_copy 0 36667 NULL
+enable_so_max_queue_pairs_virtnet_info_36669 max_queue_pairs virtnet_info 0 36669 NULL
+enable_so_i_file_acl_lo_ext4_inode_36684 i_file_acl_lo ext4_inode 0 36684 NULL
@@ -168213,6 +196450,7 @@ index 0000000..951b3be
+enable_so_to_fw_map_37020 to fw_map 0 37020 NULL
+enable_so_cb_group_width_exofs_dt_data_map_37027 cb_group_width exofs_dt_data_map 0 37027 NULL
+enable_so_result_fc_bsg_reply_37029 result fc_bsg_reply 0 37029 NULL
++enable_so_ib_is_udata_cleared_fndecl_37036 ib_is_udata_cleared fndecl 3 37036 NULL
+enable_so_dirty_poll_interval_fndecl_37038 dirty_poll_interval fndecl 0 37038 NULL nohasharray
+enable_so_mmio_size_vmw_private_37038 mmio_size vmw_private 0 37038 &enable_so_dirty_poll_interval_fndecl_37038
+enable_so_adjust_resource_fndecl_37046 adjust_resource fndecl 3-2 37046 NULL
@@ -168324,7 +196562,8 @@ index 0000000..951b3be
+enable_so_bt_alloc_fndecl_37370 bt_alloc fndecl 2 37370 NULL
+enable_so_peer_addr_len_drbd_connection_37371 peer_addr_len drbd_connection 0 37371 NULL
+enable_so_orig_bi_size_usb_idmouse_37372 orig_bi_size usb_idmouse 0 37372 NULL
-+enable_so_virtscsi_add_cmd_fndecl_37379 virtscsi_add_cmd fndecl 3-4 37379 NULL
++enable_so_virtscsi_add_cmd_fndecl_37379 virtscsi_add_cmd fndecl 3-4 37379 NULL nohasharray
++enable_so_size_list_size_vc4_bo_cache_37379 size_list_size vc4_bo_cache 0 37379 &enable_so_virtscsi_add_cmd_fndecl_37379
+enable_so_gotoxay_fndecl_37380 gotoxay fndecl 2-3 37380 NULL
+enable_so_nvkm_ramht_new_fndecl_37381 nvkm_ramht_new fndecl 2 37381 NULL
+enable_so_size_pnp_mem_37384 size pnp_mem 0 37384 NULL
@@ -168478,6 +196717,7 @@ index 0000000..951b3be
+enable_so_prod_xfs_alloc_arg_37897 prod xfs_alloc_arg 0 37897 NULL
+enable_so_calc_send_wqe_fndecl_37899 calc_send_wqe fndecl 0 37899 NULL nohasharray
+enable_so_logi_dj_hidpp_event_fndecl_37899 logi_dj_hidpp_event fndecl 4 37899 &enable_so_calc_send_wqe_fndecl_37899
++enable_so_vc4_get_cache_list_for_size_fndecl_37902 vc4_get_cache_list_for_size fndecl 2 37902 NULL
+enable_so_datalen_user_key_payload_37906 datalen user_key_payload 0 37906 NULL
+enable_so_pasid_kfd_process_37907 pasid kfd_process 0 37907 NULL
+enable_so_pvr2_i2c_basic_op_fndecl_37917 pvr2_i2c_basic_op fndecl 4-6 37917 NULL
@@ -168609,6 +196849,7 @@ index 0000000..951b3be
+enable_so_ext4_get_block_write_fndecl_38313 ext4_get_block_write fndecl 2 38313 NULL nohasharray
+enable_so_ftid_base_tid_info_38313 ftid_base tid_info 0 38313 &enable_so_ext4_get_block_write_fndecl_38313
+enable_so_nr_siblings_perf_event_38320 nr_siblings perf_event 0 38320 NULL
++enable_so_shader_rec_count_drm_vc4_submit_cl_38324 shader_rec_count drm_vc4_submit_cl 0 38324 NULL
+enable_so_ob_max_size_mvumi_hba_38327 ob_max_size mvumi_hba 0 38327 NULL
+enable_so_radeon_kms_compat_ioctl_fndecl_38328 radeon_kms_compat_ioctl fndecl 2 38328 NULL
+enable_so_xfs_vn_fiemap_fndecl_38336 xfs_vn_fiemap fndecl 3-4 38336 NULL
@@ -168723,7 +196964,8 @@ index 0000000..951b3be
+enable_so_level_kvm_shadow_walk_iterator_38631 level kvm_shadow_walk_iterator 0 38631 NULL
+enable_so_next_burst_len_iscsi_datain_req_38632 next_burst_len iscsi_datain_req 0 38632 NULL nohasharray
+enable_so_iscsi_if_send_reply_fndecl_38632 iscsi_if_send_reply fndecl 7 38632 &enable_so_next_burst_len_iscsi_datain_req_38632
-+enable_so_vmci_qp_broker_alloc_fndecl_38635 vmci_qp_broker_alloc fndecl 5-6 38635 NULL
++enable_so_vmci_qp_broker_alloc_fndecl_38635 vmci_qp_broker_alloc fndecl 5-6 38635 NULL nohasharray
++enable_so_data_offset_vb2_plane_38635 data_offset vb2_plane 0 38635 &enable_so_vmci_qp_broker_alloc_fndecl_38635
+enable_so_size_bucket_table_38640 size bucket_table 0 38640 NULL
+enable_so_f2fs_seek_block_fndecl_38641 f2fs_seek_block fndecl 2 38641 NULL
+enable_so_uart_offset_pciserial_board_38647 uart_offset pciserial_board 0 38647 NULL nohasharray
@@ -169125,6 +197367,7 @@ index 0000000..951b3be
+enable_so_delta_disks_mddev_39759 delta_disks mddev 0 39759 NULL
+enable_so_free_full_branch_fndecl_39768 free_full_branch fndecl 2 39768 NULL nohasharray
+enable_so_map_swap_page_fndecl_39768 map_swap_page fndecl 0 39768 &enable_so_free_full_branch_fndecl_39768
++enable_so_phy_get_sset_count_fndecl_39774 phy_get_sset_count fndecl 0 39774 NULL
+enable_so_write_flush_fndecl_39776 write_flush fndecl 3 39776 NULL
+enable_so_add_range_with_merge_fndecl_39778 add_range_with_merge fndecl 5-4 39778 NULL
+enable_so___collapse_huge_page_isolate_fndecl_39784 __collapse_huge_page_isolate fndecl 2 39784 NULL
@@ -169444,6 +197687,7 @@ index 0000000..951b3be
+enable_so_multi_write_idx_wmi_40801 multi_write_idx wmi 0 40801 NULL nohasharray
+enable_so_cmd_len_request_40801 cmd_len request 0 40801 &enable_so_multi_write_idx_wmi_40801 nohasharray
+enable_so_num_channels_hpb_dmae_pdata_40801 num_channels hpb_dmae_pdata 0 40801 &enable_so_cmd_len_request_40801
++enable_so_ath10k_wmi_alloc_chunk_fndecl_40804 ath10k_wmi_alloc_chunk fndecl 4-3-0 40804 NULL
+enable_so_sz_m1_mlx5_wq_ll_40805 sz_m1 mlx5_wq_ll 0 40805 NULL
+enable_so_ceph_osdc_readpages_fndecl_40814 ceph_osdc_readpages fndecl 0 40814 NULL nohasharray
+enable_so_sysctl_wmem_max_vardecl_40814 sysctl_wmem_max vardecl 0 40814 &enable_so_ceph_osdc_readpages_fndecl_40814
@@ -169575,6 +197819,7 @@ index 0000000..951b3be
+enable_so_ies_len_connect_attr_41234 ies_len connect_attr 0 41234 NULL
+enable_so_len_driver_data_41237 len driver_data 0 41237 NULL
+enable_so_opera1_usb_i2c_msgxfer_fndecl_41242 opera1_usb_i2c_msgxfer fndecl 4 41242 NULL
++enable_so_sel_write_validatetrans_fndecl_41243 sel_write_validatetrans fndecl 3 41243 NULL
+enable_so_ses_send_diag_fndecl_41244 ses_send_diag fndecl 4 41244 NULL
+enable_so_iwl_dbgfs_ucode_tracing_write_fndecl_41247 iwl_dbgfs_ucode_tracing_write fndecl 3 41247 NULL
+enable_so___apei_exec_run_fndecl_41248 __apei_exec_run fndecl 0 41248 NULL
@@ -169661,7 +197906,8 @@ index 0000000..951b3be
+enable_so_lpddr_info_query_fndecl_41492 lpddr_info_query fndecl 0 41492 NULL
+enable_so_compat_core_sys_select_fndecl_41494 compat_core_sys_select fndecl 1 41494 NULL
+enable_so_dir_entries_fat_floppy_defaults_41499 dir_entries fat_floppy_defaults 0 41499 NULL
-+enable_so_mpi_set_buffer_fndecl_41501 mpi_set_buffer fndecl 3 41501 NULL
++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
@@ -169925,7 +198171,8 @@ index 0000000..951b3be
+enable_so_generic_cont_expand_simple_fndecl_42301 generic_cont_expand_simple fndecl 2 42301 NULL nohasharray
+enable_so_ubi_more_leb_change_data_fndecl_42301 ubi_more_leb_change_data fndecl 4 42301 &enable_so_generic_cont_expand_simple_fndecl_42301
+enable_so_dcache_dir_lseek_fndecl_42308 dcache_dir_lseek fndecl 2 42308 NULL nohasharray
-+enable_so_iwch_reg_user_mr_fndecl_42308 iwch_reg_user_mr fndecl 2-3 42308 &enable_so_dcache_dir_lseek_fndecl_42308
++enable_so_iwch_reg_user_mr_fndecl_42308 iwch_reg_user_mr fndecl 2-3 42308 &enable_so_dcache_dir_lseek_fndecl_42308 nohasharray
++enable_so_level_cgroup_42308 level cgroup 0 42308 &enable_so_iwch_reg_user_mr_fndecl_42308
+enable_so_rproc_alloc_fndecl_42314 rproc_alloc fndecl 5 42314 NULL
+enable_so_log_pg_sz_remote_qpn_mlx5_qp_context_42315 log_pg_sz_remote_qpn mlx5_qp_context 0 42315 NULL
+enable_so_num_rcv_contexts_hfi1_devdata_42317 num_rcv_contexts hfi1_devdata 0 42317 NULL
@@ -169955,6 +198202,7 @@ index 0000000..951b3be
+enable_so_remote_payload_max_nfc_digital_dev_42391 remote_payload_max nfc_digital_dev 0 42391 NULL
+enable_so_no_of_vpath_vxgedev_42396 no_of_vpath vxgedev 0 42396 NULL
+enable_so_module_alloc_fndecl_42397 module_alloc fndecl 1 42397 NULL
++enable_so_xen_blkif_max_queues_vardecl_xen_blkfront_c_42404 xen_blkif_max_queues vardecl_xen-blkfront.c 0 42404 NULL
+enable_so_prof_len_vardecl_profile_c_42405 prof_len vardecl_profile.c 0 42405 NULL
+enable_so_maximum_v4l2_ctrl_42407 maximum v4l2_ctrl 0 42407 NULL
+enable_so_dma_rxsize_vardecl_stmmac_main_c_42409 dma_rxsize vardecl_stmmac_main.c 0 42409 NULL
@@ -170218,6 +198466,7 @@ index 0000000..951b3be
+enable_so_prepare_elf64_ram_headers_callback_fndecl_43123 prepare_elf64_ram_headers_callback fndecl 1-2 43123 NULL
+enable_so_output_pool_snd_seq_client_pool_43126 output_pool snd_seq_client_pool 0 43126 NULL
+enable_so_fm10k_change_mtu_fndecl_43135 fm10k_change_mtu fndecl 2 43135 NULL
++enable_so_ndev_init_isr_fndecl_43138 ndev_init_isr fndecl 3 43138 NULL
+enable_so_pcf8563_read_block_data_fndecl_43139 pcf8563_read_block_data fndecl 3 43139 NULL
+enable_so_Size_aac_fibhdr_43144 Size aac_fibhdr 0 43144 NULL
+enable_so_btrfs_create_subvol_root_fndecl_43148 btrfs_create_subvol_root fndecl 4 43148 NULL
@@ -170398,6 +198647,7 @@ index 0000000..951b3be
+enable_so_drm_format_plane_cpp_fndecl_43621 drm_format_plane_cpp fndecl 0 43621 NULL nohasharray
+enable_so_chipshift_cfi_private_43621 chipshift cfi_private 0 43621 &enable_so_drm_format_plane_cpp_fndecl_43621
+enable_so_btusb_recv_isoc_fndecl_43628 btusb_recv_isoc fndecl 3 43628 NULL
++enable_so_count_phm_ppt_v1_clock_voltage_dependency_table_43634 count phm_ppt_v1_clock_voltage_dependency_table 0 43634 NULL
+enable_so_drm_gtf2_k_fndecl_43638 drm_gtf2_k fndecl 0 43638 NULL nohasharray
+enable_so_technisat_usb2_eeprom_lrc_read_fndecl_43638 technisat_usb2_eeprom_lrc_read fndecl 4 43638 &enable_so_drm_gtf2_k_fndecl_43638
+enable_so_sdricoh_mmc_cmd_fndecl_43641 sdricoh_mmc_cmd fndecl 0 43641 NULL
@@ -170459,7 +198709,8 @@ index 0000000..951b3be
+enable_so_initrd_start_vardecl_43848 initrd_start vardecl 0 43848 NULL nohasharray
+enable_so_parport_ieee1284_ecp_write_data_fndecl_43848 parport_ieee1284_ecp_write_data fndecl 0 43848 &enable_so_initrd_start_vardecl_43848
+enable_so_xen_set_nslabs_fndecl_43849 xen_set_nslabs fndecl 0-1 43849 NULL
-+enable_so_wlcore_scan_fndecl_43850 wlcore_scan fndecl 4 43850 NULL
++enable_so_wlcore_scan_fndecl_43850 wlcore_scan fndecl 4 43850 NULL nohasharray
++enable_so_wm_adsp_read_data_block_fndecl_43850 wm_adsp_read_data_block fndecl 0 43850 &enable_so_wlcore_scan_fndecl_43850
+enable_so_scsi_host_alloc_fndecl_43858 scsi_host_alloc fndecl 2 43858 NULL
+enable_so_indat_endpoint_keyspan_device_details_43860 indat_endpoint keyspan_device_details 0 43860 NULL
+enable_so_get_sset_count_ethtool_ops_43861 get_sset_count ethtool_ops 0 43861 NULL
@@ -170526,8 +198777,10 @@ index 0000000..951b3be
+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_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
@@ -170862,6 +199115,7 @@ index 0000000..951b3be
+enable_so_tx_ring_count_e1000_adapter_45060 tx_ring_count e1000_adapter 0 45060 NULL
+enable_so_sd_sgentry_align_brcmfmac_sdio_platform_data_45061 sd_sgentry_align brcmfmac_sdio_platform_data 0 45061 NULL
+enable_so_write_buffer_size_vardecl_legousbtower_c_45062 write_buffer_size vardecl_legousbtower.c 0 45062 NULL
++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
@@ -171175,7 +199429,9 @@ index 0000000..951b3be
+enable_so___devcgroup_check_permission_fndecl_46082 __devcgroup_check_permission fndecl 0 46082 NULL
+enable_so_wSamplesPerFrame_uac_format_type_ii_ext_descriptor_46084 wSamplesPerFrame uac_format_type_ii_ext_descriptor 0 46084 NULL
+enable_so_alloc_dca_provider_fndecl_46085 alloc_dca_provider fndecl 2 46085 NULL
++enable_so_wilc_add_wep_key_bss_ap_fndecl_46087 wilc_add_wep_key_bss_ap fndecl 3 46087 NULL
+enable_so_dm_startblk_adfs_discmap_46088 dm_startblk adfs_discmap 0 46088 NULL
++enable_so_num_type_reg_regmap_irq_chip_46090 num_type_reg regmap_irq_chip 0 46090 NULL
+enable_so_nr_pages_splice_pipe_desc_46095 nr_pages splice_pipe_desc 0 46095 NULL
+enable_so_ubifs_setxattr_fndecl_46097 ubifs_setxattr fndecl 4 46097 NULL nohasharray
+enable_so_len_sfi_table_header_46097 len sfi_table_header 0 46097 &enable_so_ubifs_setxattr_fndecl_46097 nohasharray
@@ -171290,6 +199546,7 @@ index 0000000..951b3be
+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_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
+enable_so_snd_seq_oss_writeq_new_fndecl_46455 snd_seq_oss_writeq_new fndecl 2 46455 NULL
+enable_so_nfsd_nrpools_fndecl_46460 nfsd_nrpools fndecl 0 46460 NULL
@@ -171532,6 +199789,7 @@ index 0000000..951b3be
+enable_so_start_block_hfsplus_extent_47172 start_block hfsplus_extent 0 47172 NULL
+enable_so_max_blk_size_mmc_host_47174 max_blk_size mmc_host 0 47174 NULL
+enable_so_value_drm_radeon_setparam_47185 value drm_radeon_setparam 0 47185 NULL
++enable_so_msr_init_context_fndecl_47188 msr_init_context fndecl 2 47188 NULL
+enable_so_msix_count_qla_hw_data_47192 msix_count qla_hw_data 0 47192 NULL
+enable_so_max_sq_sg_mlx4_caps_47193 max_sq_sg mlx4_caps 0 47193 NULL
+enable_so_block_count_msb_data_47194 block_count msb_data 0 47194 NULL
@@ -171633,11 +199891,13 @@ index 0000000..951b3be
+enable_so_mac_offset_skb_gso_cb_47491 mac_offset skb_gso_cb 0 47491 NULL
+enable_so_page_size_cas_47493 page_size cas 0 47493 NULL
+enable_so_first_block_efs_sb_info_47499 first_block efs_sb_info 0 47499 NULL
++enable_so_rss_table_size_i40e_vsi_47500 rss_table_size i40e_vsi 0 47500 NULL
+enable_so_cifs_write_from_iter_fndecl_47501 cifs_write_from_iter fndecl 1-2 47501 NULL
+enable_so_gr_ep_init_fndecl_47502 gr_ep_init fndecl 4 47502 NULL
+enable_so_try_unmap_single_bt_fndecl_47503 try_unmap_single_bt fndecl 2-3 47503 NULL
+enable_so_btrfs_cont_expand_fndecl_47505 btrfs_cont_expand fndecl 3-2 47505 NULL
-+enable_so_romfs_blk_strcmp_fndecl_47510 romfs_blk_strcmp fndecl 4-2 47510 NULL
++enable_so_romfs_blk_strcmp_fndecl_47510 romfs_blk_strcmp fndecl 4-2 47510 NULL nohasharray
++enable_so_ucNumEntries__ATOM_Tonga_MCLK_Dependency_Table_47510 ucNumEntries _ATOM_Tonga_MCLK_Dependency_Table 0 47510 &enable_so_romfs_blk_strcmp_fndecl_47510
+enable_so_setcontrast_fndecl_47513 setcontrast fndecl 0 47513 NULL
+enable_so_elf_header_exclude_ranges_fndecl_47518 elf_header_exclude_ranges fndecl 2-3 47518 NULL nohasharray
+enable_so_gfs2_dir_get_new_buffer_fndecl_47518 gfs2_dir_get_new_buffer fndecl 2 47518 &enable_so_elf_header_exclude_ranges_fndecl_47518 nohasharray
@@ -171650,6 +199910,7 @@ index 0000000..951b3be
+enable_so_llcp_sock_sendmsg_fndecl_47535 llcp_sock_sendmsg fndecl 3 47535 NULL
+enable_so_bytes_nvmem_cell_47539 bytes nvmem_cell 0 47539 NULL
+enable_so_skb_headers_offset_update_fndecl_47543 skb_headers_offset_update fndecl 2 47543 NULL
++enable_so_skl_tplg_tlv_control_set_fndecl_47545 skl_tplg_tlv_control_set fndecl 3 47545 NULL
+enable_so_show_sysfs_ops_47546 show sysfs_ops 0 47546 NULL
+enable_so_relocs_num_drm_qxl_command_47550 relocs_num drm_qxl_command 0 47550 NULL
+enable_so_add_replay_bud_fndecl_47552 add_replay_bud fndecl 3 47552 NULL
@@ -171667,8 +199928,10 @@ index 0000000..951b3be
+enable_so_dir_logfs_transaction_47599 dir logfs_transaction 0 47599 NULL
+enable_so_ecryptfs_write_end_fndecl_47601 ecryptfs_write_end fndecl 5-3 47601 NULL
+enable_so_rx_page_order_iwl_trans_pcie_47605 rx_page_order iwl_trans_pcie 0 47605 NULL
++enable_so_num_codecs_snd_soc_dai_link_47607 num_codecs snd_soc_dai_link 0 47607 NULL
+enable_so_ebt_buf_count_fndecl_47612 ebt_buf_count fndecl 2 47612 NULL
+enable_so_control_1_vxge_hw_ring_rxd_1_47616 control_1 vxge_hw_ring_rxd_1 0 47616 NULL
++enable_so_nvme_fill_device_id_scsi_string_fndecl_47624 nvme_fill_device_id_scsi_string fndecl 4 47624 NULL
+enable_so_mincore_pte_range_fndecl_47625 mincore_pte_range fndecl 2 47625 NULL nohasharray
+enable_so_len_ib_ucm_req_47625 len ib_ucm_req 0 47625 &enable_so_mincore_pte_range_fndecl_47625
+enable_so_ubifs_load_znode_fndecl_47628 ubifs_load_znode fndecl 4 47628 NULL
@@ -171990,7 +200253,8 @@ index 0000000..951b3be
+enable_so_iomem_reg_shift_old_serial_port_48579 iomem_reg_shift old_serial_port 0 48579 NULL nohasharray
+enable_so_dynamic_fw_traces_read_fndecl_48579 dynamic_fw_traces_read fndecl 3 48579 &enable_so_iomem_reg_shift_old_serial_port_48579
+enable_so_vce_v2_0_bo_size_fndecl_48581 vce_v2_0_bo_size fndecl 0 48581 NULL
-+enable_so_tx_ring_size_bnx2x_48584 tx_ring_size bnx2x 0 48584 NULL
++enable_so_tx_ring_size_bnx2x_48584 tx_ring_size bnx2x 0 48584 NULL nohasharray
++enable_so_max_num_vdevs_ath10k_48584 max_num_vdevs ath10k 0 48584 &enable_so_tx_ring_size_bnx2x_48584
+enable_so_rc_position_rpcrdma_read_chunk_48586 rc_position rpcrdma_read_chunk 0 48586 NULL
+enable_so_flow_label_ib_sa_path_rec_48590 flow_label ib_sa_path_rec 0 48590 NULL nohasharray
+enable_so_backup_size_vmw_resource_48590 backup_size vmw_resource 0 48590 &enable_so_flow_label_ib_sa_path_rec_48590
@@ -172146,6 +200410,7 @@ index 0000000..951b3be
+enable_so_dev_id_rfcomm_dev_req_49039 dev_id rfcomm_dev_req 0 49039 NULL
+enable_so_reg_r_fndecl_49040 reg_r fndecl 0 49040 NULL
+enable_so_dwMaxVideoFrameSize_uvc_streaming_control_49044 dwMaxVideoFrameSize uvc_streaming_control 0 49044 NULL
++enable_so_max_port_per_lag_mlxsw_config_profile_49046 max_port_per_lag mlxsw_config_profile 0 49046 NULL
+enable_so_devices_per_bus__MPT_ADAPTER_49051 devices_per_bus _MPT_ADAPTER 0 49051 NULL nohasharray
+enable_so_devno_skd_device_49051 devno skd_device 0 49051 &enable_so_devices_per_bus__MPT_ADAPTER_49051
+enable_so_cxacru_cm_fndecl_49052 cxacru_cm fndecl 4 49052 NULL
@@ -172193,6 +200458,7 @@ index 0000000..951b3be
+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_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
+enable_so_fsl_edma_prep_dma_cyclic_fndecl_49197 fsl_edma_prep_dma_cyclic fndecl 4-2-3 49197 NULL nohasharray
+enable_so_of_get_child_count_fndecl_49197 of_get_child_count fndecl 0 49197 &enable_so_fsl_edma_prep_dma_cyclic_fndecl_49197
@@ -172639,6 +200905,7 @@ index 0000000..951b3be
+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_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
+enable_so_i915_gem_alloc_context_obj_fndecl_50671 i915_gem_alloc_context_obj fndecl 2 50671 NULL
+enable_so_nclips_bttv_overlay_50673 nclips bttv_overlay 0 50673 NULL
@@ -172728,6 +200995,7 @@ index 0000000..951b3be
+enable_so_exofs_read_kern_fndecl_50914 exofs_read_kern fndecl 6 50914 NULL nohasharray
+enable_so_oom_score_adj_read_fndecl_50914 oom_score_adj_read fndecl 3 50914 &enable_so_exofs_read_kern_fndecl_50914
+enable_so_vnet_hdr_sz_tun_struct_50916 vnet_hdr_sz tun_struct 0 50916 NULL
++enable_so_raid1_sync_request_fndecl_50917 raid1_sync_request fndecl 2 50917 NULL
+enable_so_num_chunks_drm_radeon_cs_50925 num_chunks drm_radeon_cs 0 50925 NULL nohasharray
+enable_so_first_minor_gendisk_50925 first_minor gendisk 0 50925 &enable_so_num_chunks_drm_radeon_cs_50925
+enable_so___spi_async_fndecl_50927 __spi_async fndecl 0 50927 NULL
@@ -172741,10 +201009,12 @@ index 0000000..951b3be
+enable_so_wil_rx_init_fndecl_50939 wil_rx_init fndecl 2 50939 NULL
+enable_so_ubi_start_update_fndecl_50948 ubi_start_update fndecl 3 50948 NULL
+enable_so_sync_key_len_pvr2_ioread_50952 sync_key_len pvr2_ioread 0 50952 NULL
-+enable_so_iser_prepare_write_cmd_fndecl_50953 iser_prepare_write_cmd fndecl 2-3 50953 NULL
++enable_so_iser_prepare_write_cmd_fndecl_50953 iser_prepare_write_cmd fndecl 2-3 50953 NULL nohasharray
++enable_so_brcmf_p2p_escan_fndecl_50953 brcmf_p2p_escan fndecl 2 50953 &enable_so_iser_prepare_write_cmd_fndecl_50953
+enable_so_reg_list_size_radeon_rlc_50955 reg_list_size radeon_rlc 0 50955 NULL
+enable_so_alloc_agpphysmem_i8xx_fndecl_50960 alloc_agpphysmem_i8xx fndecl 1 50960 NULL
+enable_so_nsegments_dsp_module_desc_50965 nsegments dsp_module_desc 0 50965 NULL
++enable_so_memdup_user_nul_fndecl_50968 memdup_user_nul fndecl 2 50968 NULL
+enable_so_gamma_sd_gl860_50970 gamma sd_gl860 0 50970 NULL
+enable_so_sdma_get_descq_cnt_fndecl_50975 sdma_get_descq_cnt fndecl 0 50975 NULL
+enable_so_irq_ssb_device_50977 irq ssb_device 0 50977 NULL nohasharray
@@ -172821,6 +201091,7 @@ index 0000000..951b3be
+enable_so_cirrus_ttm_tt_create_fndecl_51204 cirrus_ttm_tt_create fndecl 2 51204 NULL
+enable_so_vcc_recvmsg_fndecl_51205 vcc_recvmsg fndecl 3 51205 NULL
+enable_so_kvm_clear_guest_fndecl_51207 kvm_clear_guest fndecl 2-3 51207 NULL
++enable_so_goodix_i2c_write_fndecl_51209 goodix_i2c_write fndecl 4 51209 NULL
+enable_so_phys_vram_area_51217 phys vram_area 0 51217 NULL
+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
@@ -172849,6 +201120,7 @@ index 0000000..951b3be
+enable_so_mthca_alloc_icm_table_fndecl_51311 mthca_alloc_icm_table fndecl 3-4 51311 NULL
+enable_so__ipw_read_reg32_fndecl_51318 _ipw_read_reg32 fndecl 0 51318 NULL
+enable_so_drv_sds_rings_qlcnic_adapter_51319 drv_sds_rings qlcnic_adapter 0 51319 NULL
++enable_so_dvb_register_device_fndecl_51331 dvb_register_device fndecl 6 51331 NULL
+enable_so_size_bts_phys_51332 size bts_phys 0 51332 NULL
+enable_so_sync_dma_snd_usb_endpoint_51333 sync_dma snd_usb_endpoint 0 51333 NULL
+enable_so_counter_vardecl_inode_c_51334 counter vardecl_inode.c 0 51334 NULL
@@ -172936,7 +201208,8 @@ index 0000000..951b3be
+enable_so_klsi_105_prepare_write_buffer_fndecl_51599 klsi_105_prepare_write_buffer fndecl 3 51599 NULL nohasharray
+enable_so_af9013_wr_regs_i2c_fndecl_51599 af9013_wr_regs_i2c fndecl 5 51599 &enable_so_klsi_105_prepare_write_buffer_fndecl_51599 nohasharray
+enable_so_ep_count_bytes_remain_fndecl_51599 ep_count_bytes_remain fndecl 0 51599 &enable_so_af9013_wr_regs_i2c_fndecl_51599
-+enable_so_receive_mergeable_fndecl_51601 receive_mergeable fndecl 5-4 51601 NULL
++enable_so_receive_mergeable_fndecl_51601 receive_mergeable fndecl 5-4 51601 NULL nohasharray
++enable_so_wilc_add_beacon_fndecl_51601 wilc_add_beacon fndecl 6-4 51601 &enable_so_receive_mergeable_fndecl_51601
+enable_so_va_for_temp_scif_window_51603 va_for_temp scif_window 0 51603 NULL
+enable_so_data_transfer_length_vmscsi_request_51616 data_transfer_length vmscsi_request 0 51616 NULL nohasharray
+enable_so_cur_vfio_pci_fill_info_51616 cur vfio_pci_fill_info 0 51616 &enable_so_data_transfer_length_vmscsi_request_51616
@@ -173446,7 +201719,8 @@ index 0000000..951b3be
+enable_so_h_vlan_TCI_vlan_ethhdr_53095 h_vlan_TCI vlan_ethhdr 0 53095 NULL
+enable_so_packet_create_fndecl_53098 packet_create fndecl 3 53098 NULL nohasharray
+enable_so_size_fuse_attr_53098 size fuse_attr 0 53098 &enable_so_packet_create_fndecl_53098
-+enable_so_s_blocksize_minix3_super_block_53099 s_blocksize minix3_super_block 0 53099 NULL
++enable_so_s_blocksize_minix3_super_block_53099 s_blocksize minix3_super_block 0 53099 NULL nohasharray
++enable_so_wilc_spi_read_fndecl_53099 wilc_spi_read fndecl 4 53099 &enable_so_s_blocksize_minix3_super_block_53099
+enable_so_brcmf_fw_nvram_strip_fndecl_53102 brcmf_fw_nvram_strip fndecl 2 53102 NULL
+enable_so_prepare_header80_fndecl_53108 prepare_header80 fndecl 3-0 53108 NULL nohasharray
+enable_so_rx_nr_rings_bnxt_53108 rx_nr_rings bnxt 0 53108 &enable_so_prepare_header80_fndecl_53108
@@ -173754,6 +202028,7 @@ index 0000000..951b3be
+enable_so_c_srate_f_uac2_opts_53962 c_srate f_uac2_opts 0 53962 &enable_so_vmw_sou_backing_alloc_fndecl_53962
+enable_so_recover_orphan_inode_fndecl_53969 recover_orphan_inode fndecl 2 53969 NULL nohasharray
+enable_so_proc_fault_inject_read_fndecl_53969 proc_fault_inject_read fndecl 3 53969 &enable_so_recover_orphan_inode_fndecl_53969
++enable_so_dests_size_fs_fte_53973 dests_size fs_fte 0 53973 NULL
+enable_so_dib9000_fw_boot_fndecl_53978 dib9000_fw_boot fndecl 3-5 53978 NULL
+enable_so_rx_buf_sz_cp_private_53982 rx_buf_sz cp_private 0 53982 NULL
+enable_so_assoc_resp_len_wmi_connect_event_53983 assoc_resp_len wmi_connect_event 0 53983 NULL
@@ -173999,6 +202274,7 @@ index 0000000..951b3be
+enable_so_target_freq_mt9p031_platform_data_54660 target_freq mt9p031_platform_data 0 54660 NULL nohasharray
+enable_so_truncate_pagecache_fndecl_54660 truncate_pagecache fndecl 2 54660 &enable_so_target_freq_mt9p031_platform_data_54660 nohasharray
+enable_so_reshape_position_mddev_54660 reshape_position mddev 0 54660 &enable_so_truncate_pagecache_fndecl_54660
++enable_so_get_vddc_lookup_table_fndecl_54661 get_vddc_lookup_table fndecl 4 54661 NULL
+enable_so_s_session_udf_sb_info_54662 s_session udf_sb_info 0 54662 NULL
+enable_so_qed_cxt_set_proto_cid_count_fndecl_54663 qed_cxt_set_proto_cid_count fndecl 3 54663 NULL
+enable_so_ssid_len_hostap_bss_info_54670 ssid_len hostap_bss_info 0 54670 NULL
@@ -174492,6 +202768,7 @@ index 0000000..951b3be
+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
@@ -174619,6 +202896,7 @@ index 0000000..951b3be
+enable_so_ath6kl_wmi_set_rssi_filter_cmd_fndecl_56701 ath6kl_wmi_set_rssi_filter_cmd fndecl 2 56701 &enable_so_remove_migration_pte_fndecl_56701
+enable_so_usb_err_gspca_dev_56706 usb_err gspca_dev 0 56706 NULL
+enable_so_mmc_erase_fndecl_56707 mmc_erase fndecl 0 56707 NULL
++enable_so_mlx5_modify_nic_vport_mac_list_fndecl_56715 mlx5_modify_nic_vport_mac_list fndecl 4 56715 NULL
+enable_so_zlib_inflate_workspacesize_fndecl_56716 zlib_inflate_workspacesize fndecl 0 56716 NULL
+enable_so_qgroupid_btrfs_ioctl_qgroup_create_args_56717 qgroupid btrfs_ioctl_qgroup_create_args 0 56717 NULL
+enable_so_munlock_vma_pages_range_fndecl_56718 munlock_vma_pages_range fndecl 2 56718 NULL
@@ -174659,6 +202937,7 @@ index 0000000..951b3be
+enable_so_sc_max_requests_svcxprt_rdma_56840 sc_max_requests svcxprt_rdma 0 56840 NULL
+enable_so_tail_TxFifo_56844 tail TxFifo 0 56844 NULL
+enable_so_capacity_alauda_media_info_56845 capacity alauda_media_info 0 56845 NULL
++enable_so_unit_size_wlan_host_mem_req_56846 unit_size wlan_host_mem_req 0 56846 NULL
+enable_so_tomoyo_read_self_fndecl_56848 tomoyo_read_self fndecl 3 56848 NULL
+enable_so_blocks_mmc_test_area_56853 blocks mmc_test_area 0 56853 NULL
+enable_so_transfer_one_spi_master_56858 transfer_one spi_master 0 56858 NULL
@@ -174755,6 +203034,7 @@ index 0000000..951b3be
+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_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
+enable_so_gsm_mux_rx_netchar_fndecl_57131 gsm_mux_rx_netchar fndecl 3 57131 NULL
@@ -174781,7 +203061,8 @@ index 0000000..951b3be
+enable_so_num_vfs_mlx4_dev_persistent_57187 num_vfs mlx4_dev_persistent 0 57187 NULL
+enable_so_h_datalen_logfs_journal_header_57189 h_datalen logfs_journal_header 0 57189 NULL nohasharray
+enable_so_z1_zt_57189 z1 zt 0 57189 &enable_so_h_datalen_logfs_journal_header_57189
-+enable_so_cfs_trace_copyin_string_fndecl_57191 cfs_trace_copyin_string fndecl 4 57191 NULL
++enable_so_cfs_trace_copyin_string_fndecl_57191 cfs_trace_copyin_string fndecl 4 57191 NULL nohasharray
++enable_so_max_lag_mlxsw_config_profile_57191 max_lag mlxsw_config_profile 0 57191 &enable_so_cfs_trace_copyin_string_fndecl_57191
+enable_so_OutputCount_smb2_ioctl_rsp_57198 OutputCount smb2_ioctl_rsp 0 57198 NULL
+enable_so_sector_dm_crypt_io_57208 sector dm_crypt_io 0 57208 NULL
+enable_so_frag_max_size_inet6_skb_parm_57210 frag_max_size inet6_skb_parm 0 57210 NULL
@@ -175032,6 +203313,7 @@ index 0000000..951b3be
+enable_so_mei_cl_alloc_cb_fndecl_57971 mei_cl_alloc_cb fndecl 2 57971 NULL
+enable_so_sel_write_enforce_fndecl_57973 sel_write_enforce fndecl 3 57973 NULL
+enable_so_rds_rm_size_fndecl_57975 rds_rm_size fndecl 0-2 57975 NULL
++enable_so_input_count_cgs_acpi_method_info_57981 input_count cgs_acpi_method_info 0 57981 NULL
+enable_so_hpfs_map_anode_fndecl_57993 hpfs_map_anode fndecl 2 57993 NULL
+enable_so_faultin_page_fndecl_57994 faultin_page fndecl 3 57994 NULL
+enable_so_perf_sample_ustack_size_fndecl_57995 perf_sample_ustack_size fndecl 0-2-1 57995 NULL
@@ -175049,8 +203331,10 @@ index 0000000..951b3be
+enable_so_rindex_sc18is602_58043 rindex sc18is602 0 58043 NULL nohasharray
+enable_so_rtw_check_beacon_data23a_fndecl_58043 rtw_check_beacon_data23a fndecl 3 58043 &enable_so_rindex_sc18is602_58043
+enable_so_len_mic_vring_58048 len mic_vring 0 58048 NULL nohasharray
-+enable_so_num_sqsets_csio_hw_58048 num_sqsets csio_hw 0 58048 &enable_so_len_mic_vring_58048
++enable_so_num_sqsets_csio_hw_58048 num_sqsets csio_hw 0 58048 &enable_so_len_mic_vring_58048 nohasharray
++enable_so_cur_fw_iocb_count_qla_hw_data_58048 cur_fw_iocb_count qla_hw_data 0 58048 &enable_so_num_sqsets_csio_hw_58048
+enable_so_acpi_gbl_integer_byte_width_vardecl_58054 acpi_gbl_integer_byte_width vardecl 0 58054 NULL
++enable_so_num_pairs_nvm_id_lp_mlc_58055 num_pairs nvm_id_lp_mlc 0 58055 NULL
+enable_so_cylinders_mspro_devinfo_58057 cylinders mspro_devinfo 0 58057 NULL
+enable_so_offset_m48t59_plat_data_58063 offset m48t59_plat_data 0 58063 NULL nohasharray
+enable_so_buffer_size_octeon_droq_58063 buffer_size octeon_droq 0 58063 &enable_so_offset_m48t59_plat_data_58063 nohasharray
@@ -175249,7 +203533,8 @@ index 0000000..951b3be
+enable_so_thermal_tx_resume_read_fndecl_58616 thermal_tx_resume_read fndecl 3 58616 &enable_so_rd_count_ring_descr_hw_58616
+enable_so_mousedev_read_fndecl_58624 mousedev_read fndecl 3 58624 NULL
+enable_so_wusb_key_dump_fndecl_58627 wusb_key_dump fndecl 2 58627 NULL nohasharray
-+enable_so___erst_write_to_storage_fndecl_58627 __erst_write_to_storage fndecl 1 58627 &enable_so_wusb_key_dump_fndecl_58627
++enable_so___erst_write_to_storage_fndecl_58627 __erst_write_to_storage fndecl 1 58627 &enable_so_wusb_key_dump_fndecl_58627 nohasharray
++enable_so_ath10k_wmi_alloc_host_mem_fndecl_58627 ath10k_wmi_alloc_host_mem fndecl 4-3 58627 &enable_so___erst_write_to_storage_fndecl_58627
+enable_so_dccps_gss_dccp_sock_58634 dccps_gss dccp_sock 0 58634 NULL
+enable_so_layout_mdu_array_info_s_58636 layout mdu_array_info_s 0 58636 NULL nohasharray
+enable_so_ext4_ext_handle_unwritten_extents_fndecl_58636 ext4_ext_handle_unwritten_extents fndecl 7-0-6 58636 &enable_so_layout_mdu_array_info_s_58636
@@ -175677,6 +203962,7 @@ index 0000000..951b3be
+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
@@ -175786,7 +204072,8 @@ index 0000000..951b3be
+enable_so_l2cap_create_le_flowctl_pdu_fndecl_60233 l2cap_create_le_flowctl_pdu fndecl 3 60233 NULL
+enable_so_dlfb_alloc_urb_list_fndecl_60234 dlfb_alloc_urb_list fndecl 3 60234 NULL
+enable_so_bttv_crop_adjust_fndecl_60236 bttv_crop_adjust fndecl 4-3 60236 NULL nohasharray
-+enable_so_irnet_connect_indication_fndecl_60236 irnet_connect_indication fndecl 5 60236 &enable_so_bttv_crop_adjust_fndecl_60236
++enable_so_irnet_connect_indication_fndecl_60236 irnet_connect_indication fndecl 5 60236 &enable_so_bttv_crop_adjust_fndecl_60236 nohasharray
++enable_so_bo_count_vc4_exec_info_60236 bo_count vc4_exec_info 0 60236 &enable_so_irnet_connect_indication_fndecl_60236
+enable_so_mwifiex_usb_host_to_card_fndecl_60239 mwifiex_usb_host_to_card fndecl 2 60239 NULL
+enable_so_frag_len_pau_fpdu_frag_60242 frag_len pau_fpdu_frag 0 60242 NULL
+enable_so_max_pages_per_fmr_ib_fmr_pool_param_60248 max_pages_per_fmr ib_fmr_pool_param 0 60248 NULL
@@ -176158,6 +204445,7 @@ index 0000000..951b3be
+enable_so_total_size_iscsi_segment_61454 total_size iscsi_segment 0 61454 NULL
+enable_so_ocfs2_zero_range_for_truncate_fndecl_61461 ocfs2_zero_range_for_truncate fndecl 3-4 61461 NULL nohasharray
+enable_so_next_interface_id_usb_configuration_61461 next_interface_id usb_configuration 0 61461 &enable_so_ocfs2_zero_range_for_truncate_fndecl_61461
++enable_so_ucNumEntries__ATOM_Tonga_MM_Dependency_Table_61467 ucNumEntries _ATOM_Tonga_MM_Dependency_Table 0 61467 NULL
+enable_so_ath6kl_keepalive_read_fndecl_61468 ath6kl_keepalive_read fndecl 3 61468 NULL
+enable_so_irlan_client_ctrl_connect_confirm_fndecl_61475 irlan_client_ctrl_connect_confirm fndecl 5 61475 NULL
+enable_so_ubi_eba_write_leb_st_fndecl_61476 ubi_eba_write_leb_st fndecl 5 61476 NULL
@@ -176323,6 +204611,7 @@ index 0000000..951b3be
+enable_so_s_maxbytes_super_block_61963 s_maxbytes super_block 0 61963 NULL
+enable_so_periods_min_snd_pcm_hardware_61965 periods_min snd_pcm_hardware 0 61965 NULL
+enable_so_radeon_audio_calc_cts_fndecl_61966 radeon_audio_calc_cts fndecl 1-4 61966 NULL
++enable_so_wm_adsp_compr_read_fndecl_61972 wm_adsp_compr_read fndecl 3 61972 NULL
+enable_so_nfs_set_pgio_error_fndecl_61975 nfs_set_pgio_error fndecl 3 61975 NULL
+enable_so_physical_for_dev_replace_scrub_page_61977 physical_for_dev_replace scrub_page 0 61977 NULL
+enable_so_qla4xxx_alloc_work_fndecl_61982 qla4xxx_alloc_work fndecl 2 61982 NULL
@@ -176382,7 +204671,8 @@ index 0000000..951b3be
+enable_so___process_deleted_xattr_fndecl_62133 __process_deleted_xattr fndecl 4 62133 NULL
+enable_so_hfs_cat_create_fndecl_62139 hfs_cat_create fndecl 1 62139 NULL
+enable_so_next_setup_data_62142 next setup_data 0 62142 NULL
-+enable_so_drbd_recv_all_warn_fndecl_62144 drbd_recv_all_warn fndecl 3 62144 NULL
++enable_so_drbd_recv_all_warn_fndecl_62144 drbd_recv_all_warn fndecl 3 62144 NULL nohasharray
++enable_so_free_space_bitmap_size_fndecl_62144 free_space_bitmap_size fndecl 0 62144 &enable_so_drbd_recv_all_warn_fndecl_62144
+enable_so_cciss_tape_cmds_vardecl_cciss_c_62147 cciss_tape_cmds vardecl_cciss.c 0 62147 NULL
+enable_so_tcp_trim_head_fndecl_62157 tcp_trim_head fndecl 3 62157 NULL
+enable_so_ptrace_writedata_fndecl_62158 ptrace_writedata fndecl 4-3 62158 NULL
@@ -176417,6 +204707,7 @@ index 0000000..951b3be
+enable_so_omfs_scan_list_fndecl_62289 omfs_scan_list fndecl 2 62289 NULL
+enable_so___kvm_read_guest_page_fndecl_62291 __kvm_read_guest_page fndecl 2-5 62291 NULL
+enable_so_num_arq_entries_i40e_adminq_info_62293 num_arq_entries i40e_adminq_info 0 62293 NULL
++enable_so_num_chunks_icp_qat_suof_filehdr_62296 num_chunks icp_qat_suof_filehdr 0 62296 NULL
+enable_so_max_io_mvumi_hba_62301 max_io mvumi_hba 0 62301 NULL
+enable_so_ceph_llseek_fndecl_62305 ceph_llseek fndecl 2 62305 NULL
+enable_so_sb_rbmblocks_xfs_sb_62307 sb_rbmblocks xfs_sb 0 62307 NULL
@@ -176806,6 +205097,7 @@ index 0000000..951b3be
+enable_so_vb2_create_framevec_fndecl_63451 vb2_create_framevec fndecl 1-2 63451 NULL
+enable_so_cmd_status_netdev_desc_63452 cmd_status netdev_desc 0 63452 NULL
+enable_so_fuse_send_read_fndecl_63454 fuse_send_read fndecl 4 63454 NULL
++enable_so_bo_count_drm_vc4_get_hang_state_63455 bo_count drm_vc4_get_hang_state 0 63455 NULL
+enable_so_sysv_raw_inode_fndecl_63458 sysv_raw_inode fndecl 2 63458 NULL
+enable_so_c_width_g2d_frame_63459 c_width g2d_frame 0 63459 NULL
+enable_so_btrfs_drop_extent_cache_fndecl_63461 btrfs_drop_extent_cache fndecl 3-2 63461 NULL
@@ -176816,7 +205108,8 @@ index 0000000..951b3be
+enable_so_srq_lmt_max_sge_ocrdma_query_srq_rsp_63477 srq_lmt_max_sge ocrdma_query_srq_rsp 0 63477 NULL
+enable_so___bm_find_next_fndecl_63479 __bm_find_next fndecl 0-2 63479 NULL
+enable_so_mlx5_ib_read_user_wqe_fndecl_63480 mlx5_ib_read_user_wqe fndecl 3-5 63480 NULL nohasharray
-+enable_so_sctp_setsockopt_active_key_fndecl_63480 sctp_setsockopt_active_key fndecl 3 63480 &enable_so_mlx5_ib_read_user_wqe_fndecl_63480
++enable_so_sctp_setsockopt_active_key_fndecl_63480 sctp_setsockopt_active_key fndecl 3 63480 &enable_so_mlx5_ib_read_user_wqe_fndecl_63480 nohasharray
++enable_so_cur_fw_xcb_count_qla_hw_data_63480 cur_fw_xcb_count qla_hw_data 0 63480 &enable_so_sctp_setsockopt_active_key_fndecl_63480
+enable_so_gigaset_initcs_fndecl_63482 gigaset_initcs fndecl 2 63482 NULL nohasharray
+enable_so_length_dw_amdgpu_cs_chunk_63482 length_dw amdgpu_cs_chunk 0 63482 &enable_so_gigaset_initcs_fndecl_63482
+enable_so_width_v4l2_pix_format_63491 width v4l2_pix_format 0 63491 NULL
@@ -176967,6 +205260,7 @@ index 0000000..951b3be
+enable_so_start_btrfs_ioctl_defrag_range_args_63924 start btrfs_ioctl_defrag_range_args 0 63924 NULL
+enable_so_efx_change_mtu_fndecl_63926 efx_change_mtu fndecl 2 63926 NULL
+enable_so_cqm_max_rmid_vardecl_perf_event_intel_cqm_c_63930 cqm_max_rmid vardecl_perf_event_intel_cqm.c 0 63930 NULL
++enable_so_component_match_realloc_fndecl_63932 component_match_realloc fndecl 3 63932 NULL
+enable_so_dentry_needs_remove_privs_fndecl_63934 dentry_needs_remove_privs fndecl 0 63934 NULL
+enable_so_ro_maxpages_rpcrdma_memreg_ops_63937 ro_maxpages rpcrdma_memreg_ops 0 63937 NULL nohasharray
+enable_so_filemark_cnt_osst_tape_63937 filemark_cnt osst_tape 0 63937 &enable_so_ro_maxpages_rpcrdma_memreg_ops_63937
@@ -177479,6 +205773,7 @@ index 0000000..951b3be
+enable_so_data_in_size_mpt3_ioctl_command_65434 data_in_size mpt3_ioctl_command 0 65434 NULL
+enable_so_a2mp_send_fndecl_65436 a2mp_send fndecl 4 65436 NULL
+enable_so_lbs_bcnmiss_write_fndecl_65438 lbs_bcnmiss_write fndecl 3 65438 NULL
++enable_so_spi_cmd_complete_fndecl_65442 spi_cmd_complete fndecl 5 65442 NULL
+enable_so_rx_rx_pre_complt_read_fndecl_65446 rx_rx_pre_complt_read fndecl 3 65446 NULL
+enable_so_carm_handle_generic_fndecl_65450 carm_handle_generic fndecl 3 65450 NULL
+enable_so_squashfs_cache_init_fndecl_65451 squashfs_cache_init fndecl 3-2 65451 NULL
@@ -182349,7 +210644,7 @@ index 0a578fe..b81f62d 100644
})
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
-index fefbf2d..7b0dc7f 100644
+index 2984737..c142f22 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -90,12 +90,17 @@ LIST_HEAD(vm_list);
@@ -182372,7 +210667,7 @@ index fefbf2d..7b0dc7f 100644
struct dentry *kvm_debugfs_dir;
EXPORT_SYMBOL_GPL(kvm_debugfs_dir);
-@@ -843,7 +848,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
+@@ -833,7 +838,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)) ||
@@ -182381,7 +210676,7 @@ index fefbf2d..7b0dc7f 100644
(void __user *)(unsigned long)mem->userspace_addr,
mem->memory_size)))
goto out;
-@@ -1898,9 +1903,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
+@@ -1889,9 +1894,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len)
{
@@ -182401,7 +210696,7 @@ index fefbf2d..7b0dc7f 100644
}
EXPORT_SYMBOL_GPL(kvm_clear_guest_page);
-@@ -2237,7 +2250,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
+@@ -2228,7 +2241,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
return 0;
}
@@ -182410,7 +210705,7 @@ index fefbf2d..7b0dc7f 100644
.release = kvm_vcpu_release,
.unlocked_ioctl = kvm_vcpu_ioctl,
#ifdef CONFIG_KVM_COMPAT
-@@ -2953,7 +2966,7 @@ out:
+@@ -2942,7 +2955,7 @@ out:
}
#endif
@@ -182419,7 +210714,7 @@ index fefbf2d..7b0dc7f 100644
.release = kvm_vm_release,
.unlocked_ioctl = kvm_vm_ioctl,
#ifdef CONFIG_KVM_COMPAT
-@@ -3024,7 +3037,7 @@ out:
+@@ -3013,7 +3026,7 @@ out:
return r;
}
@@ -182428,7 +210723,7 @@ index fefbf2d..7b0dc7f 100644
.unlocked_ioctl = kvm_dev_ioctl,
.compat_ioctl = kvm_dev_ioctl,
.llseek = noop_llseek,
-@@ -3050,7 +3063,7 @@ static void hardware_enable_nolock(void *junk)
+@@ -3039,7 +3052,7 @@ static void hardware_enable_nolock(void *junk)
if (r) {
cpumask_clear_cpu(cpu, cpus_hardware_enabled);
@@ -182437,7 +210732,7 @@ index fefbf2d..7b0dc7f 100644
pr_info("kvm: enabling virtualization on CPU%d failed\n", cpu);
}
}
-@@ -3105,10 +3118,10 @@ static int hardware_enable_all(void)
+@@ -3094,10 +3107,10 @@ static int hardware_enable_all(void)
kvm_usage_count++;
if (kvm_usage_count == 1) {
@@ -182450,7 +210745,7 @@ index fefbf2d..7b0dc7f 100644
hardware_disable_all_nolock();
r = -EBUSY;
}
-@@ -3572,7 +3585,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3551,7 +3564,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,
@@ -182459,7 +210754,7 @@ index fefbf2d..7b0dc7f 100644
if (!kvm_vcpu_cache) {
r = -ENOMEM;
goto out_free_3;
-@@ -3582,9 +3595,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3561,9 +3574,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
if (r)
goto out_free;
@@ -182471,7 +210766,7 @@ index fefbf2d..7b0dc7f 100644
r = misc_register(&kvm_dev);
if (r) {
-@@ -3594,9 +3609,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3573,9 +3588,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
register_syscore_ops(&kvm_syscore_ops);
diff --git a/4.4.8/4425_grsec_remove_EI_PAX.patch b/4.5.2/4425_grsec_remove_EI_PAX.patch
index 2a1aa6c..2a1aa6c 100644
--- a/4.4.8/4425_grsec_remove_EI_PAX.patch
+++ b/4.5.2/4425_grsec_remove_EI_PAX.patch
diff --git a/4.5.2/4427_force_XATTR_PAX_tmpfs.patch b/4.5.2/4427_force_XATTR_PAX_tmpfs.patch
new file mode 100644
index 0000000..6db8e37
--- /dev/null
+++ b/4.5.2/4427_force_XATTR_PAX_tmpfs.patch
@@ -0,0 +1,57 @@
+From: Anthony G. Basile <blueness@gentoo.org>
+
+For users that emerge without XATTR_PAX support enabled, we still want user.pax.flags
+namespace supported on tmpfs so that the PaX markings survive emerge.
+
+diff -Naur a/mm/shmem.c b/mm/shmem.c
+--- a/mm/shmem.c 2016-04-29 19:56:25.306101147 -0400
++++ b/mm/shmem.c 2016-04-29 19:59:44.126104490 -0400
+@@ -2670,24 +2670,20 @@
+ 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 shmem_inode_info *info = SHMEM_I(d_inode(dentry));
+
+-#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
+ if (strcmp(name, XATTR_NAME_PAX_FLAGS))
+ return -EOPNOTSUPP;
+ if (size > 8)
+ return -EINVAL;
+-#endif
+
+ name = xattr_full_name(handler, name);
+ return simple_xattr_set(&info->xattrs, name, value, size, flags);
+ }
+-#endif
+
+ static const struct xattr_handler shmem_security_xattr_handler = {
+ .prefix = XATTR_SECURITY_PREFIX,
+@@ -2701,13 +2697,11 @@
+ .set = shmem_xattr_handler_set,
+ };
+
+-#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
+ static const struct xattr_handler shmem_user_xattr_handler = {
+ .prefix = XATTR_USER_PREFIX,
+ .get = shmem_xattr_handler_get,
+ .set = shmem_user_xattr_handler_set,
+ };
+-#endif
+
+ static const struct xattr_handler *shmem_xattr_handlers[] = {
+ #ifdef CONFIG_TMPFS_POSIX_ACL
+@@ -2717,9 +2711,7 @@
+ &shmem_security_xattr_handler,
+ &shmem_trusted_xattr_handler,
+
+-#ifdef CONFIG_PAX_XATTR_PAX_FLAGS
+ &shmem_user_xattr_handler,
+-#endif
+
+ NULL
+ };
diff --git a/4.4.8/4430_grsec-remove-localversion-grsec.patch b/4.5.2/4430_grsec-remove-localversion-grsec.patch
index 31cf878..31cf878 100644
--- a/4.4.8/4430_grsec-remove-localversion-grsec.patch
+++ b/4.5.2/4430_grsec-remove-localversion-grsec.patch
diff --git a/4.4.8/4435_grsec-mute-warnings.patch b/4.5.2/4435_grsec-mute-warnings.patch
index b7564e4..b7564e4 100644
--- a/4.4.8/4435_grsec-mute-warnings.patch
+++ b/4.5.2/4435_grsec-mute-warnings.patch
diff --git a/4.4.8/4440_grsec-remove-protected-paths.patch b/4.5.2/4440_grsec-remove-protected-paths.patch
index 741546d..741546d 100644
--- a/4.4.8/4440_grsec-remove-protected-paths.patch
+++ b/4.5.2/4440_grsec-remove-protected-paths.patch
diff --git a/4.4.8/4450_grsec-kconfig-default-gids.patch b/4.5.2/4450_grsec-kconfig-default-gids.patch
index 79a866b..79a866b 100644
--- a/4.4.8/4450_grsec-kconfig-default-gids.patch
+++ b/4.5.2/4450_grsec-kconfig-default-gids.patch
diff --git a/4.4.8/4465_selinux-avc_audit-log-curr_ip.patch b/4.5.2/4465_selinux-avc_audit-log-curr_ip.patch
index 7248385..7248385 100644
--- a/4.4.8/4465_selinux-avc_audit-log-curr_ip.patch
+++ b/4.5.2/4465_selinux-avc_audit-log-curr_ip.patch
diff --git a/4.4.8/4470_disable-compat_vdso.patch b/4.5.2/4470_disable-compat_vdso.patch
index 742df26..4aba080 100644
--- a/4.4.8/4470_disable-compat_vdso.patch
+++ b/4.5.2/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
-@@ -2010,29 +2010,8 @@
+@@ -2044,29 +2044,8 @@
config COMPAT_VDSO
def_bool n
diff --git a/4.4.8/4475_emutramp_default_on.patch b/4.5.2/4475_emutramp_default_on.patch
index afd6019..afd6019 100644
--- a/4.4.8/4475_emutramp_default_on.patch
+++ b/4.5.2/4475_emutramp_default_on.patch