commit:     4a10e2795a26e06020a21f5e978cc6d762f649c5
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 27 11:20:31 2019 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Feb 27 11:20:31 2019 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=4a10e279

proj/linux-patches: Linux patch 4.9.161

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |    4 +
 1160_linux-4.9.161.patch | 2707 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 2711 insertions(+)

diff --git a/0000_README b/0000_README
index 203d1e5..b5f7603 100644
--- a/0000_README
+++ b/0000_README
@@ -683,6 +683,10 @@ Patch:  1159_linux-4.9.160.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.9.160
 
+Patch:  1160_linux-4.9.161.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.9.161
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1160_linux-4.9.161.patch b/1160_linux-4.9.161.patch
new file mode 100644
index 0000000..7dab518
--- /dev/null
+++ b/1160_linux-4.9.161.patch
@@ -0,0 +1,2707 @@
+diff --git a/Makefile b/Makefile
+index af70503df3f46..239b74a7147b5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 9
+-SUBLEVEL = 160
++SUBLEVEL = 161
+ EXTRAVERSION =
+ NAME = Roaring Lionus
+ 
+@@ -306,11 +306,6 @@ HOSTCXX      = g++
+ HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 
-fomit-frame-pointer -std=gnu89
+ HOSTCXXFLAGS = -O2
+ 
+-ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
+-HOSTCFLAGS  += -Wno-unused-value -Wno-unused-parameter \
+-              -Wno-missing-field-initializers -fno-delete-null-pointer-checks
+-endif
+-
+ # Decide whether to build built-in, modular, or both.
+ # Normally, just do built-in.
+ 
+@@ -511,36 +506,17 @@ endif
+ 
+ ifeq ($(cc-name),clang)
+ ifneq ($(CROSS_COMPILE),)
+-CLANG_TARGET  := -target $(notdir $(CROSS_COMPILE:%-=%))
++CLANG_FLAGS   := --target=$(notdir $(CROSS_COMPILE:%-=%))
+ GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD)))
+-CLANG_PREFIX  := --prefix=$(GCC_TOOLCHAIN_DIR)
++CLANG_FLAGS   += --prefix=$(GCC_TOOLCHAIN_DIR)
+ GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
+ endif
+ ifneq ($(GCC_TOOLCHAIN),)
+-CLANG_GCC_TC  := -gcc-toolchain $(GCC_TOOLCHAIN)
++CLANG_FLAGS   += --gcc-toolchain=$(GCC_TOOLCHAIN)
+ endif
+-KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
+-KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
+-KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
+-KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
+-KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
+-KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
+-KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
+-# Quiet clang warning: comparison of unsigned expression < 0 is always false
+-KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
+-# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
+-# source of a reference will be _MergedGlobals and not on of the whitelisted 
names.
+-# See modpost pattern 2
+-KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
+-KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
+-KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
+-KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
+-else
+-
+-# These warnings generated too much noise in a regular build.
+-# Use make W=1 to enable them (see scripts/Makefile.build)
+-KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
+-KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
++CLANG_FLAGS   += -no-integrated-as
++KBUILD_CFLAGS += $(CLANG_FLAGS)
++KBUILD_AFLAGS += $(CLANG_FLAGS)
+ endif
+ 
+ 
+@@ -739,6 +715,26 @@ ifdef CONFIG_CC_STACKPROTECTOR
+ endif
+ KBUILD_CFLAGS += $(stackp-flag)
+ 
++ifeq ($(cc-name),clang)
++KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
++KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
++KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
++KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
++# Quiet clang warning: comparison of unsigned expression < 0 is always false
++KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
++# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
++# source of a reference will be _MergedGlobals and not on of the whitelisted 
names.
++# See modpost pattern 2
++KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
++KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
++else
++
++# These warnings generated too much noise in a regular build.
++# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
++KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
++endif
++
++KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
+ ifdef CONFIG_FRAME_POINTER
+ KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
+ else
+diff --git a/arch/arc/include/asm/cache.h b/arch/arc/include/asm/cache.h
+index 4fd6272e6c01b..c5816a224571e 100644
+--- a/arch/arc/include/asm/cache.h
++++ b/arch/arc/include/asm/cache.h
+@@ -49,6 +49,17 @@
+ 
+ #define ARCH_DMA_MINALIGN      L1_CACHE_BYTES
+ 
++/*
++ * Make sure slab-allocated buffers are 64-bit aligned when atomic64_t uses
++ * ARCv2 64-bit atomics (LLOCKD/SCONDD). This guarantess runtime 64-bit
++ * alignment for any atomic64_t embedded in buffer.
++ * Default ARCH_SLAB_MINALIGN is __alignof__(long long) which has a relaxed
++ * value of 4 (and not 8) in ARC ABI.
++ */
++#if defined(CONFIG_ARC_HAS_LL64) && defined(CONFIG_ARC_HAS_LLSC)
++#define ARCH_SLAB_MINALIGN    8
++#endif
++
+ extern void arc_cache_init(void);
+ extern char *arc_cache_mumbojumbo(int cpu_id, char *buf, int len);
+ extern void read_decode_cache_bcr(void);
+diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S
+index 8b90d25a15cca..1f945d0f40daa 100644
+--- a/arch/arc/kernel/head.S
++++ b/arch/arc/kernel/head.S
+@@ -17,6 +17,7 @@
+ #include <asm/entry.h>
+ #include <asm/arcregs.h>
+ #include <asm/cache.h>
++#include <asm/irqflags.h>
+ 
+ .macro CPU_EARLY_SETUP
+ 
+@@ -47,6 +48,15 @@
+       sr      r5, [ARC_REG_DC_CTRL]
+ 
+ 1:
++
++#ifdef CONFIG_ISA_ARCV2
++      ; Unaligned access is disabled at reset, so re-enable early as
++      ; gcc 7.3.1 (ARC GNU 2018.03) onwards generates unaligned access
++      ; by default
++      lr      r5, [status32]
++      bset    r5, r5, STATUS_AD_BIT
++      kflag   r5
++#endif
+ .endm
+ 
+       .section .init.text, "ax",@progbits
+@@ -93,9 +103,9 @@ ENTRY(stext)
+ #ifdef CONFIG_ARC_UBOOT_SUPPORT
+       ; Uboot - kernel ABI
+       ;    r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2
+-      ;    r1 = magic number (board identity, unused as of now
++      ;    r1 = magic number (always zero as of now)
+       ;    r2 = pointer to uboot provided cmdline or external DTB in mem
+-      ; These are handled later in setup_arch()
++      ; These are handled later in handle_uboot_args()
+       st      r0, [@uboot_tag]
+       st      r2, [@uboot_arg]
+ #endif
+diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
+index 0385df77a6973..9119bea503a7c 100644
+--- a/arch/arc/kernel/setup.c
++++ b/arch/arc/kernel/setup.c
+@@ -381,43 +381,80 @@ void setup_processor(void)
+       arc_chk_core_config();
+ }
+ 
+-static inline int is_kernel(unsigned long addr)
++static inline bool uboot_arg_invalid(unsigned long addr)
+ {
+-      if (addr >= (unsigned long)_stext && addr <= (unsigned long)_end)
+-              return 1;
+-      return 0;
++      /*
++       * Check that it is a untranslated address (although MMU is not enabled
++       * yet, it being a high address ensures this is not by fluke)
++       */
++      if (addr < PAGE_OFFSET)
++              return true;
++
++      /* Check that address doesn't clobber resident kernel image */
++      return addr >= (unsigned long)_stext && addr <= (unsigned long)_end;
+ }
+ 
+-void __init setup_arch(char **cmdline_p)
++#define IGNORE_ARGS           "Ignore U-boot args: "
++
++/* uboot_tag values for U-boot - kernel ABI revision 0; see head.S */
++#define UBOOT_TAG_NONE                0
++#define UBOOT_TAG_CMDLINE     1
++#define UBOOT_TAG_DTB         2
++
++void __init handle_uboot_args(void)
+ {
++      bool use_embedded_dtb = true;
++      bool append_cmdline = false;
++
+ #ifdef CONFIG_ARC_UBOOT_SUPPORT
+-      /* make sure that uboot passed pointer to cmdline/dtb is valid */
+-      if (uboot_tag && is_kernel((unsigned long)uboot_arg))
+-              panic("Invalid uboot arg\n");
++      /* check that we know this tag */
++      if (uboot_tag != UBOOT_TAG_NONE &&
++          uboot_tag != UBOOT_TAG_CMDLINE &&
++          uboot_tag != UBOOT_TAG_DTB) {
++              pr_warn(IGNORE_ARGS "invalid uboot tag: '%08x'\n", uboot_tag);
++              goto ignore_uboot_args;
++      }
++
++      if (uboot_tag != UBOOT_TAG_NONE &&
++            uboot_arg_invalid((unsigned long)uboot_arg)) {
++              pr_warn(IGNORE_ARGS "invalid uboot arg: '%px'\n", uboot_arg);
++              goto ignore_uboot_args;
++      }
++
++      /* see if U-boot passed an external Device Tree blob */
++      if (uboot_tag == UBOOT_TAG_DTB) {
++              machine_desc = setup_machine_fdt((void *)uboot_arg);
+ 
+-      /* See if u-boot passed an external Device Tree blob */
+-      machine_desc = setup_machine_fdt(uboot_arg);    /* uboot_tag == 2 */
+-      if (!machine_desc)
++              /* external Device Tree blob is invalid - use embedded one */
++              use_embedded_dtb = !machine_desc;
++      }
++
++      if (uboot_tag == UBOOT_TAG_CMDLINE)
++              append_cmdline = true;
++
++ignore_uboot_args:
+ #endif
+-      {
+-              /* No, so try the embedded one */
++
++      if (use_embedded_dtb) {
+               machine_desc = setup_machine_fdt(__dtb_start);
+               if (!machine_desc)
+                       panic("Embedded DT invalid\n");
++      }
+ 
+-              /*
+-               * If we are here, it is established that @uboot_arg didn't
+-               * point to DT blob. Instead if u-boot says it is cmdline,
+-               * append to embedded DT cmdline.
+-               * setup_machine_fdt() would have populated @boot_command_line
+-               */
+-              if (uboot_tag == 1) {
+-                      /* Ensure a whitespace between the 2 cmdlines */
+-                      strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
+-                      strlcat(boot_command_line, uboot_arg,
+-                              COMMAND_LINE_SIZE);
+-              }
++      /*
++       * NOTE: @boot_command_line is populated by setup_machine_fdt() so this
++       * append processing can only happen after.
++       */
++      if (append_cmdline) {
++              /* Ensure a whitespace between the 2 cmdlines */
++              strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
++              strlcat(boot_command_line, uboot_arg, COMMAND_LINE_SIZE);
+       }
++}
++
++void __init setup_arch(char **cmdline_p)
++{
++      handle_uboot_args();
+ 
+       /* Save unparsed command line copy for /proc/cmdline */
+       *cmdline_p = boot_command_line;
+diff --git a/arch/arm64/include/asm/arch_gicv3.h 
b/arch/arm64/include/asm/arch_gicv3.h
+index f8ae6d6e4767e..85a15b38b6d8c 100644
+--- a/arch/arm64/include/asm/arch_gicv3.h
++++ b/arch/arm64/include/asm/arch_gicv3.h
+@@ -80,18 +80,8 @@
+ #include <linux/stringify.h>
+ #include <asm/barrier.h>
+ 
+-#define read_gicreg(r)                                                        
\
+-      ({                                                              \
+-              u64 reg;                                                \
+-              asm volatile("mrs_s %0, " __stringify(r) : "=r" (reg)); \
+-              reg;                                                    \
+-      })
+-
+-#define write_gicreg(v,r)                                             \
+-      do {                                                            \
+-              u64 __val = (v);                                        \
+-              asm volatile("msr_s " __stringify(r) ", %0" : : "r" (__val));\
+-      } while (0)
++#define read_gicreg                   read_sysreg_s
++#define write_gicreg                  write_sysreg_s
+ 
+ /*
+  * Low-level accessors
+@@ -102,13 +92,13 @@
+ 
+ static inline void gic_write_eoir(u32 irq)
+ {
+-      asm volatile("msr_s " __stringify(ICC_EOIR1_EL1) ", %0" : : "r" 
((u64)irq));
++      write_sysreg_s(irq, ICC_EOIR1_EL1);
+       isb();
+ }
+ 
+ static inline void gic_write_dir(u32 irq)
+ {
+-      asm volatile("msr_s " __stringify(ICC_DIR_EL1) ", %0" : : "r" 
((u64)irq));
++      write_sysreg_s(irq, ICC_DIR_EL1);
+       isb();
+ }
+ 
+@@ -116,7 +106,7 @@ static inline u64 gic_read_iar_common(void)
+ {
+       u64 irqstat;
+ 
+-      asm volatile("mrs_s %0, " __stringify(ICC_IAR1_EL1) : "=r" (irqstat));
++      irqstat = read_sysreg_s(ICC_IAR1_EL1);
+       dsb(sy);
+       return irqstat;
+ }
+@@ -134,10 +124,12 @@ static inline u64 gic_read_iar_cavium_thunderx(void)
+ 
+       asm volatile(
+               "nop;nop;nop;nop\n\t"
+-              "nop;nop;nop;nop\n\t"
+-              "mrs_s %0, " __stringify(ICC_IAR1_EL1) "\n\t"
+-              "nop;nop;nop;nop"
+-              : "=r" (irqstat));
++              "nop;nop;nop;nop");
++
++      irqstat = read_sysreg_s(ICC_IAR1_EL1);
++
++      asm volatile(
++              "nop;nop;nop;nop");
+       mb();
+ 
+       return irqstat;
+@@ -145,43 +137,40 @@ static inline u64 gic_read_iar_cavium_thunderx(void)
+ 
+ static inline void gic_write_pmr(u32 val)
+ {
+-      asm volatile("msr_s " __stringify(ICC_PMR_EL1) ", %0" : : "r" 
((u64)val));
++      write_sysreg_s(val, ICC_PMR_EL1);
+ }
+ 
+ static inline void gic_write_ctlr(u32 val)
+ {
+-      asm volatile("msr_s " __stringify(ICC_CTLR_EL1) ", %0" : : "r" 
((u64)val));
++      write_sysreg_s(val, ICC_CTLR_EL1);
+       isb();
+ }
+ 
+ static inline void gic_write_grpen1(u32 val)
+ {
+-      asm volatile("msr_s " __stringify(ICC_GRPEN1_EL1) ", %0" : : "r" 
((u64)val));
++      write_sysreg_s(val, ICC_GRPEN1_EL1);
+       isb();
+ }
+ 
+ static inline void gic_write_sgi1r(u64 val)
+ {
+-      asm volatile("msr_s " __stringify(ICC_SGI1R_EL1) ", %0" : : "r" (val));
++      write_sysreg_s(val, ICC_SGI1R_EL1);
+ }
+ 
+ static inline u32 gic_read_sre(void)
+ {
+-      u64 val;
+-
+-      asm volatile("mrs_s %0, " __stringify(ICC_SRE_EL1) : "=r" (val));
+-      return val;
++      return read_sysreg_s(ICC_SRE_EL1);
+ }
+ 
+ static inline void gic_write_sre(u32 val)
+ {
+-      asm volatile("msr_s " __stringify(ICC_SRE_EL1) ", %0" : : "r" 
((u64)val));
++      write_sysreg_s(val, ICC_SRE_EL1);
+       isb();
+ }
+ 
+ static inline void gic_write_bpr1(u32 val)
+ {
+-      asm volatile("msr_s " __stringify(ICC_BPR1_EL1) ", %0" : : "r" (val));
++      write_sysreg_s(val, ICC_BPR1_EL1);
+ }
+ 
+ #define gic_read_typer(c)             readq_relaxed(c)
+diff --git a/arch/mips/configs/ath79_defconfig 
b/arch/mips/configs/ath79_defconfig
+index 134879c1310a0..4ed369c0ec6a1 100644
+--- a/arch/mips/configs/ath79_defconfig
++++ b/arch/mips/configs/ath79_defconfig
+@@ -74,6 +74,7 @@ CONFIG_SERIAL_8250_CONSOLE=y
+ # CONFIG_SERIAL_8250_PCI is not set
+ CONFIG_SERIAL_8250_NR_UARTS=1
+ CONFIG_SERIAL_8250_RUNTIME_UARTS=1
++CONFIG_SERIAL_OF_PLATFORM=y
+ CONFIG_SERIAL_AR933X=y
+ CONFIG_SERIAL_AR933X_CONSOLE=y
+ # CONFIG_HW_RANDOM is not set
+diff --git a/arch/mips/jazz/jazzdma.c b/arch/mips/jazz/jazzdma.c
+index db6f5afff4ff1..ea897912bc712 100644
+--- a/arch/mips/jazz/jazzdma.c
++++ b/arch/mips/jazz/jazzdma.c
+@@ -71,14 +71,15 @@ static int __init vdma_init(void)
+                                                   get_order(VDMA_PGTBL_SIZE));
+       BUG_ON(!pgtbl);
+       dma_cache_wback_inv((unsigned long)pgtbl, VDMA_PGTBL_SIZE);
+-      pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR(pgtbl);
++      pgtbl = (VDMA_PGTBL_ENTRY *)CKSEG1ADDR((unsigned long)pgtbl);
+ 
+       /*
+        * Clear the R4030 translation table
+        */
+       vdma_pgtbl_init();
+ 
+-      r4030_write_reg32(JAZZ_R4030_TRSTBL_BASE, CPHYSADDR(pgtbl));
++      r4030_write_reg32(JAZZ_R4030_TRSTBL_BASE,
++                        CPHYSADDR((unsigned long)pgtbl));
+       r4030_write_reg32(JAZZ_R4030_TRSTBL_LIM, VDMA_PGTBL_SIZE);
+       r4030_write_reg32(JAZZ_R4030_TRSTBL_INV, 0);
+ 
+diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
+index e02d7b4d2b693..0780c375fe2e2 100644
+--- a/arch/parisc/kernel/ptrace.c
++++ b/arch/parisc/kernel/ptrace.c
+@@ -311,15 +311,29 @@ long compat_arch_ptrace(struct task_struct *child, 
compat_long_t request,
+ 
+ long do_syscall_trace_enter(struct pt_regs *regs)
+ {
+-      if (test_thread_flag(TIF_SYSCALL_TRACE) &&
+-          tracehook_report_syscall_entry(regs)) {
++      if (test_thread_flag(TIF_SYSCALL_TRACE)) {
++              int rc = tracehook_report_syscall_entry(regs);
++
+               /*
+-               * Tracing decided this syscall should not happen or the
+-               * debugger stored an invalid system call number. Skip
+-               * the system call and the system call restart handling.
++               * As tracesys_next does not set %r28 to -ENOSYS
++               * when %r20 is set to -1, initialize it here.
+                */
+-              regs->gr[20] = -1UL;
+-              goto out;
++              regs->gr[28] = -ENOSYS;
++
++              if (rc) {
++                      /*
++                       * A nonzero return code from
++                       * tracehook_report_syscall_entry() tells us
++                       * to prevent the syscall execution.  Skip
++                       * the syscall call and the syscall restart handling.
++                       *
++                       * Note that the tracer may also just change
++                       * regs->gr[20] to an invalid syscall number,
++                       * that is handled by tracesys_next.
++                       */
++                      regs->gr[20] = -1UL;
++                      return -1;
++              }
+       }
+ 
+       /* Do the secure computing check after ptrace. */
+@@ -343,7 +357,6 @@ long do_syscall_trace_enter(struct pt_regs *regs)
+                       regs->gr[24] & 0xffffffff,
+                       regs->gr[23] & 0xffffffff);
+ 
+-out:
+       /*
+        * Sign extend the syscall number to 64bit since it may have been
+        * modified by a compat ptrace call
+diff --git a/arch/x86/boot/compressed/Makefile 
b/arch/x86/boot/compressed/Makefile
+index cda8e14bd72a3..89b163351e642 100644
+--- a/arch/x86/boot/compressed/Makefile
++++ b/arch/x86/boot/compressed/Makefile
+@@ -34,6 +34,7 @@ KBUILD_CFLAGS += $(cflags-y)
+ KBUILD_CFLAGS += -mno-mmx -mno-sse
+ KBUILD_CFLAGS += $(call cc-option,-ffreestanding)
+ KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
++KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
+ 
+ KBUILD_AFLAGS  := $(KBUILD_CFLAGS) -D__ASSEMBLY__
+ GCOV_PROFILE := n
+diff --git a/drivers/atm/he.c b/drivers/atm/he.c
+index 31b513a23ae0c..985a5800a6376 100644
+--- a/drivers/atm/he.c
++++ b/drivers/atm/he.c
+@@ -717,7 +717,7 @@ static int he_init_cs_block_rcm(struct he_dev *he_dev)
+                       instead of '/ 512', use '>> 9' to prevent a call
+                       to divdu3 on x86 platforms
+               */
+-              rate_cps = (unsigned long long) (1 << exp) * (man + 512) >> 9;
++              rate_cps = (unsigned long long) (1UL << exp) * (man + 512) >> 9;
+ 
+               if (rate_cps < 10)
+                       rate_cps = 10;  /* 2.2.1 minimum payload rate is 10 cps 
*/
+diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
+index be54e5331a451..50272fe81f267 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,
+ }
+ 
+ static int
+-hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg,
++hpet_ioctl_common(struct hpet_dev *devp, unsigned int cmd, unsigned long arg,
+                 struct hpet_info *info)
+ {
+       struct hpet_timer __iomem *timer;
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+index 279d1e021421b..685247c3d489f 100644
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -1985,10 +1985,10 @@ static void ibx_irq_handler(struct drm_i915_private 
*dev_priv, u32 pch_iir)
+               DRM_DEBUG_DRIVER("PCH transcoder CRC error interrupt\n");
+ 
+       if (pch_iir & SDE_TRANSA_FIFO_UNDER)
+-              intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_A);
++              intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_A);
+ 
+       if (pch_iir & SDE_TRANSB_FIFO_UNDER)
+-              intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_B);
++              intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_B);
+ }
+ 
+ static void ivb_err_int_handler(struct drm_i915_private *dev_priv)
+@@ -2022,13 +2022,13 @@ static void cpt_serr_int_handler(struct 
drm_i915_private *dev_priv)
+               DRM_ERROR("PCH poison interrupt\n");
+ 
+       if (serr_int & SERR_INT_TRANS_A_FIFO_UNDERRUN)
+-              intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_A);
++              intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_A);
+ 
+       if (serr_int & SERR_INT_TRANS_B_FIFO_UNDERRUN)
+-              intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_B);
++              intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_B);
+ 
+       if (serr_int & SERR_INT_TRANS_C_FIFO_UNDERRUN)
+-              intel_pch_fifo_underrun_irq_handler(dev_priv, TRANSCODER_C);
++              intel_pch_fifo_underrun_irq_handler(dev_priv, PIPE_C);
+ 
+       I915_WRITE(SERR_INT, serr_int);
+ }
+diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
+index c185625d67f20..d915877b6ecbc 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -1849,7 +1849,7 @@ static void lpt_enable_pch_transcoder(struct 
drm_i915_private *dev_priv,
+ 
+       /* FDI must be feeding us bits for PCH ports */
+       assert_fdi_tx_enabled(dev_priv, (enum pipe) cpu_transcoder);
+-      assert_fdi_rx_enabled(dev_priv, TRANSCODER_A);
++      assert_fdi_rx_enabled(dev_priv, PIPE_A);
+ 
+       /* Workaround: set timing override bit. */
+       val = I915_READ(TRANS_CHICKEN2(PIPE_A));
+@@ -1950,7 +1950,7 @@ static void intel_enable_pipe(struct intel_crtc *crtc)
+       assert_sprites_disabled(dev_priv, pipe);
+ 
+       if (HAS_PCH_LPT(dev_priv))
+-              pch_transcoder = TRANSCODER_A;
++              pch_transcoder = PIPE_A;
+       else
+               pch_transcoder = pipe;
+ 
+@@ -4636,7 +4636,7 @@ static void lpt_pch_enable(struct drm_crtc *crtc)
+       struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+       enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
+ 
+-      assert_pch_transcoder_disabled(dev_priv, TRANSCODER_A);
++      assert_pch_transcoder_disabled(dev_priv, PIPE_A);
+ 
+       lpt_program_iclkip(crtc);
+ 
+@@ -5410,7 +5410,7 @@ static void haswell_crtc_enable(struct intel_crtc_state 
*pipe_config,
+               return;
+ 
+       if (intel_crtc->config->has_pch_encoder)
+-              intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
++              intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
+                                                     false);
+ 
+       intel_encoders_pre_pll_enable(crtc, pipe_config, old_state);
+@@ -5498,7 +5498,7 @@ static void haswell_crtc_enable(struct intel_crtc_state 
*pipe_config,
+               intel_wait_for_vblank(dev, pipe);
+               intel_wait_for_vblank(dev, pipe);
+               intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
+-              intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
++              intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
+                                                     true);
+       }
+ 
+@@ -5597,7 +5597,7 @@ static void haswell_crtc_disable(struct intel_crtc_state 
*old_crtc_state,
+       enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
+ 
+       if (intel_crtc->config->has_pch_encoder)
+-              intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
++              intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
+                                                     false);
+ 
+       intel_encoders_disable(crtc, old_crtc_state, old_state);
+@@ -5626,7 +5626,7 @@ static void haswell_crtc_disable(struct intel_crtc_state 
*old_crtc_state,
+       intel_encoders_post_disable(crtc, old_crtc_state, old_state);
+ 
+       if (old_crtc_state->has_pch_encoder)
+-              intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
++              intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A,
+                                                     true);
+ }
+ 
+diff --git a/drivers/gpu/drm/i915/intel_drv.h 
b/drivers/gpu/drm/i915/intel_drv.h
+index 6a9860df208f5..8aafb96015402 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -1095,12 +1095,12 @@ static inline unsigned int intel_num_planes(struct 
intel_crtc *crtc)
+ bool intel_set_cpu_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
+                                          enum pipe pipe, bool enable);
+ bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
+-                                         enum transcoder pch_transcoder,
++                                         enum pipe pch_transcoder,
+                                          bool enable);
+ void intel_cpu_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
+                                        enum pipe pipe);
+ void intel_pch_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
+-                                       enum transcoder pch_transcoder);
++                                       enum pipe pch_transcoder);
+ void intel_check_cpu_fifo_underruns(struct drm_i915_private *dev_priv);
+ void intel_check_pch_fifo_underruns(struct drm_i915_private *dev_priv);
+ 
+diff --git a/drivers/gpu/drm/i915/intel_fifo_underrun.c 
b/drivers/gpu/drm/i915/intel_fifo_underrun.c
+index 2aa744081f090..b6b64a2d4b71c 100644
+--- a/drivers/gpu/drm/i915/intel_fifo_underrun.c
++++ b/drivers/gpu/drm/i915/intel_fifo_underrun.c
+@@ -185,11 +185,11 @@ static void broadwell_set_fifo_underrun_reporting(struct 
drm_device *dev,
+ }
+ 
+ static void ibx_set_fifo_underrun_reporting(struct drm_device *dev,
+-                                          enum transcoder pch_transcoder,
++                                          enum pipe pch_transcoder,
+                                           bool enable)
+ {
+       struct drm_i915_private *dev_priv = to_i915(dev);
+-      uint32_t bit = (pch_transcoder == TRANSCODER_A) ?
++      uint32_t bit = (pch_transcoder == PIPE_A) ?
+                      SDE_TRANSA_FIFO_UNDER : SDE_TRANSB_FIFO_UNDER;
+ 
+       if (enable)
+@@ -201,7 +201,7 @@ static void ibx_set_fifo_underrun_reporting(struct 
drm_device *dev,
+ static void cpt_check_pch_fifo_underruns(struct intel_crtc *crtc)
+ {
+       struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
+-      enum transcoder pch_transcoder = (enum transcoder) crtc->pipe;
++      enum pipe pch_transcoder = crtc->pipe;
+       uint32_t serr_int = I915_READ(SERR_INT);
+ 
+       assert_spin_locked(&dev_priv->irq_lock);
+@@ -212,12 +212,12 @@ static void cpt_check_pch_fifo_underruns(struct 
intel_crtc *crtc)
+       I915_WRITE(SERR_INT, SERR_INT_TRANS_FIFO_UNDERRUN(pch_transcoder));
+       POSTING_READ(SERR_INT);
+ 
+-      DRM_ERROR("pch fifo underrun on pch transcoder %s\n",
+-                transcoder_name(pch_transcoder));
++      DRM_ERROR("pch fifo underrun on pch transcoder %c\n",
++                pipe_name(pch_transcoder));
+ }
+ 
+ static void cpt_set_fifo_underrun_reporting(struct drm_device *dev,
+-                                          enum transcoder pch_transcoder,
++                                          enum pipe pch_transcoder,
+                                           bool enable, bool old)
+ {
+       struct drm_i915_private *dev_priv = to_i915(dev);
+@@ -235,8 +235,8 @@ static void cpt_set_fifo_underrun_reporting(struct 
drm_device *dev,
+ 
+               if (old && I915_READ(SERR_INT) &
+                   SERR_INT_TRANS_FIFO_UNDERRUN(pch_transcoder)) {
+-                      DRM_ERROR("uncleared pch fifo underrun on pch 
transcoder %s\n",
+-                                transcoder_name(pch_transcoder));
++                      DRM_ERROR("uncleared pch fifo underrun on pch 
transcoder %c\n",
++                                pipe_name(pch_transcoder));
+               }
+       }
+ }
+@@ -311,7 +311,7 @@ bool intel_set_cpu_fifo_underrun_reporting(struct 
drm_i915_private *dev_priv,
+  * Returns the previous state of underrun reporting.
+  */
+ bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
+-                                         enum transcoder pch_transcoder,
++                                         enum pipe pch_transcoder,
+                                          bool enable)
+ {
+       struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pch_transcoder];
+@@ -384,12 +384,12 @@ void intel_cpu_fifo_underrun_irq_handler(struct 
drm_i915_private *dev_priv,
+  * interrupt to avoid an irq storm.
+  */
+ void intel_pch_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
+-                                       enum transcoder pch_transcoder)
++                                       enum pipe pch_transcoder)
+ {
+       if (intel_set_pch_fifo_underrun_reporting(dev_priv, pch_transcoder,
+                                                 false))
+-              DRM_ERROR("PCH transcoder %s FIFO underrun\n",
+-                        transcoder_name(pch_transcoder));
++              DRM_ERROR("PCH transcoder %c FIFO underrun\n",
++                        pipe_name(pch_transcoder));
+ }
+ 
+ /**
+diff --git a/drivers/infiniband/ulp/srp/ib_srp.c 
b/drivers/infiniband/ulp/srp/ib_srp.c
+index 646359025574a..74de1ae48d4f7 100644
+--- a/drivers/infiniband/ulp/srp/ib_srp.c
++++ b/drivers/infiniband/ulp/srp/ib_srp.c
+@@ -2639,7 +2639,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
+ {
+       struct srp_target_port *target = host_to_target(scmnd->device->host);
+       struct srp_rdma_ch *ch;
+-      int i, j;
+       u8 status;
+ 
+       shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
+@@ -2651,15 +2650,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
+       if (status)
+               return FAILED;
+ 
+-      for (i = 0; i < target->ch_count; i++) {
+-              ch = &target->ch[i];
+-              for (j = 0; j < target->req_ring_size; ++j) {
+-                      struct srp_request *req = &ch->req_ring[j];
+-
+-                      srp_finish_req(ch, req, scmnd->device, DID_RESET << 16);
+-              }
+-      }
+-
+       return SUCCESS;
+ }
+ 
+diff --git a/drivers/isdn/hardware/avm/b1.c b/drivers/isdn/hardware/avm/b1.c
+index 4d9b195547c5c..df2a10157720a 100644
+--- a/drivers/isdn/hardware/avm/b1.c
++++ b/drivers/isdn/hardware/avm/b1.c
+@@ -423,7 +423,7 @@ void b1_parse_version(avmctrl_info *cinfo)
+       int i, j;
+ 
+       for (j = 0; j < AVM_MAXVERSION; j++)
+-              cinfo->version[j] = "\0\0" + 1;
++              cinfo->version[j] = "";
+       for (i = 0, j = 0;
+            j < AVM_MAXVERSION && i < cinfo->versionlen;
+            j++, i += cinfo->versionbuf[i] + 1)
+diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c
+index 63eaa0a9f8a18..d4e0d1602c80f 100644
+--- a/drivers/isdn/i4l/isdn_tty.c
++++ b/drivers/isdn/i4l/isdn_tty.c
+@@ -1455,15 +1455,19 @@ isdn_tty_set_termios(struct tty_struct *tty, struct 
ktermios *old_termios)
+ {
+       modem_info *info = (modem_info *) tty->driver_data;
+ 
++      mutex_lock(&modem_info_mutex);
+       if (!old_termios)
+               isdn_tty_change_speed(info);
+       else {
+               if (tty->termios.c_cflag == old_termios->c_cflag &&
+                   tty->termios.c_ispeed == old_termios->c_ispeed &&
+-                  tty->termios.c_ospeed == old_termios->c_ospeed)
++                  tty->termios.c_ospeed == old_termios->c_ospeed) {
++                      mutex_unlock(&modem_info_mutex);
+                       return;
++              }
+               isdn_tty_change_speed(info);
+       }
++      mutex_unlock(&modem_info_mutex);
+ }
+ 
+ /*
+diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c
+index c5b30f06218a3..44ceed7ac3c5b 100644
+--- a/drivers/leds/leds-lp5523.c
++++ b/drivers/leds/leds-lp5523.c
+@@ -318,7 +318,9 @@ static int lp5523_init_program_engine(struct lp55xx_chip 
*chip)
+ 
+       /* Let the programs run for couple of ms and check the engine status */
+       usleep_range(3000, 6000);
+-      lp55xx_read(chip, LP5523_REG_STATUS, &status);
++      ret = lp55xx_read(chip, LP5523_REG_STATUS, &status);
++      if (ret)
++              return ret;
+       status &= LP5523_ENG_STATUS_MASK;
+ 
+       if (status != LP5523_ENG_STATUS_MASK) {
+diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c
+index 589eebfc13df9..2f212bdc187a4 100644
+--- a/drivers/mfd/ab8500-core.c
++++ b/drivers/mfd/ab8500-core.c
+@@ -257,7 +257,7 @@ static int get_register_interruptible(struct ab8500 
*ab8500, u8 bank,
+       mutex_unlock(&ab8500->lock);
+       dev_vdbg(ab8500->dev, "rd: addr %#x => data %#x\n", addr, ret);
+ 
+-      return ret;
++      return (ret < 0) ? ret : 0;
+ }
+ 
+ static int ab8500_get_register(struct device *dev, u8 bank,
+diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
+index ca38a6a141100..26ccf3f4ade9c 100644
+--- a/drivers/mfd/db8500-prcmu.c
++++ b/drivers/mfd/db8500-prcmu.c
+@@ -2588,7 +2588,7 @@ static struct irq_chip prcmu_irq_chip = {
+       .irq_unmask     = prcmu_irq_unmask,
+ };
+ 
+-static __init char *fw_project_name(u32 project)
++static char *fw_project_name(u32 project)
+ {
+       switch (project) {
+       case PRCMU_FW_PROJECT_U8500:
+@@ -2736,7 +2736,7 @@ void __init db8500_prcmu_early_init(u32 phy_base, u32 
size)
+       INIT_WORK(&mb0_transfer.mask_work, prcmu_mask_work);
+ }
+ 
+-static void __init init_prcm_registers(void)
++static void init_prcm_registers(void)
+ {
+       u32 val;
+ 
+diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
+index d7f54e492aa61..6c16f170529f5 100644
+--- a/drivers/mfd/mc13xxx-core.c
++++ b/drivers/mfd/mc13xxx-core.c
+@@ -274,7 +274,9 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, 
unsigned int mode,
+ 
+       mc13xxx->adcflags |= MC13XXX_ADC_WORKING;
+ 
+-      mc13xxx_reg_read(mc13xxx, MC13XXX_ADC0, &old_adc0);
++      ret = mc13xxx_reg_read(mc13xxx, MC13XXX_ADC0, &old_adc0);
++      if (ret)
++              goto out;
+ 
+       adc0 = MC13XXX_ADC0_ADINC1 | MC13XXX_ADC0_ADINC2;
+       adc1 = MC13XXX_ADC1_ADEN | MC13XXX_ADC1_ADTRIGIGN | MC13XXX_ADC1_ASC;
+diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c
+index e14d8b058f0c2..5d4c10f05450a 100644
+--- a/drivers/mfd/mt6397-core.c
++++ b/drivers/mfd/mt6397-core.c
+@@ -306,8 +306,7 @@ static int mt6397_probe(struct platform_device *pdev)
+ 
+       default:
+               dev_err(&pdev->dev, "unsupported chip: %d\n", id);
+-              ret = -ENODEV;
+-              break;
++              return -ENODEV;
+       }
+ 
+       if (ret) {
+diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
+index 52fafea06067e..8d420c37b2a61 100644
+--- a/drivers/mfd/qcom_rpm.c
++++ b/drivers/mfd/qcom_rpm.c
+@@ -638,6 +638,10 @@ static int qcom_rpm_probe(struct platform_device *pdev)
+               return -EFAULT;
+       }
+ 
++      writel(fw_version[0], RPM_CTRL_REG(rpm, 0));
++      writel(fw_version[1], RPM_CTRL_REG(rpm, 1));
++      writel(fw_version[2], RPM_CTRL_REG(rpm, 2));
++
+       dev_info(&pdev->dev, "RPM firmware %u.%u.%u\n", fw_version[0],
+                                                       fw_version[1],
+                                                       fw_version[2]);
+diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
+index 798f0a829637f..60286adbd6a1c 100644
+--- a/drivers/mfd/ti_am335x_tscadc.c
++++ b/drivers/mfd/ti_am335x_tscadc.c
+@@ -264,8 +264,9 @@ static     int ti_tscadc_probe(struct platform_device 
*pdev)
+               cell->pdata_size = sizeof(tscadc);
+       }
+ 
+-      err = mfd_add_devices(&pdev->dev, pdev->id, tscadc->cells,
+-                      tscadc->used_cells, NULL, 0, NULL);
++      err = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO,
++                            tscadc->cells, tscadc->used_cells, NULL,
++                            0, NULL);
+       if (err < 0)
+               goto err_disable_clk;
+ 
+diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
+index c64615dca2bd3..1d58df8565488 100644
+--- a/drivers/mfd/twl-core.c
++++ b/drivers/mfd/twl-core.c
+@@ -979,7 +979,7 @@ add_children(struct twl4030_platform_data *pdata, unsigned 
irq_base,
+  * letting it generate the right frequencies for USB, MADC, and
+  * other purposes.
+  */
+-static inline int __init protect_pm_master(void)
++static inline int protect_pm_master(void)
+ {
+       int e = 0;
+ 
+@@ -988,7 +988,7 @@ static inline int __init protect_pm_master(void)
+       return e;
+ }
+ 
+-static inline int __init unprotect_pm_master(void)
++static inline int unprotect_pm_master(void)
+ {
+       int e = 0;
+ 
+diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c
+index 1ee68bd440fbc..16c6e2accfaa5 100644
+--- a/drivers/mfd/wm5110-tables.c
++++ b/drivers/mfd/wm5110-tables.c
+@@ -1618,6 +1618,7 @@ static const struct reg_default wm5110_reg_default[] = {
+       { 0x00000ECD, 0x0000 },    /* R3789  - HPLPF4_2 */
+       { 0x00000EE0, 0x0000 },    /* R3808  - ASRC_ENABLE */
+       { 0x00000EE2, 0x0000 },    /* R3810  - ASRC_RATE1 */
++      { 0x00000EE3, 0x4000 },    /* R3811  - ASRC_RATE2 */
+       { 0x00000EF0, 0x0000 },    /* R3824  - ISRC 1 CTRL 1 */
+       { 0x00000EF1, 0x0000 },    /* R3825  - ISRC 1 CTRL 2 */
+       { 0x00000EF2, 0x0000 },    /* R3826  - ISRC 1 CTRL 3 */
+@@ -2869,6 +2870,7 @@ static bool wm5110_readable_register(struct device *dev, 
unsigned int reg)
+       case ARIZONA_ASRC_ENABLE:
+       case ARIZONA_ASRC_STATUS:
+       case ARIZONA_ASRC_RATE1:
++      case ARIZONA_ASRC_RATE2:
+       case ARIZONA_ISRC_1_CTRL_1:
+       case ARIZONA_ISRC_1_CTRL_2:
+       case ARIZONA_ISRC_1_CTRL_3:
+diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c 
b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+index 0b4d90ceea7a6..864f107ed48fa 100644
+--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
++++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+@@ -149,12 +149,10 @@ static void hns_ae_put_handle(struct hnae_handle *handle)
+       struct hnae_vf_cb *vf_cb = hns_ae_get_vf_cb(handle);
+       int i;
+ 
+-      vf_cb->mac_cb    = NULL;
+-
+-      kfree(vf_cb);
+-
+       for (i = 0; i < handle->q_num; i++)
+               hns_ae_get_ring_pair(handle->qs[i])->used_by_vf = 0;
++
++      kfree(vf_cb);
+ }
+ 
+ static void hns_ae_ring_enable_all(struct hnae_handle *handle, int val)
+diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c 
b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+index 1a92cd719e19d..ab2259c5808aa 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
++++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+@@ -777,13 +777,27 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, 
struct sk_buff *skb,
+       return 0;
+ }
+ #endif
++
++#define short_frame(size) ((size) <= ETH_ZLEN + ETH_FCS_LEN)
++
+ static int check_csum(struct mlx4_cqe *cqe, struct sk_buff *skb, void *va,
+                     netdev_features_t dev_features)
+ {
+       __wsum hw_checksum = 0;
++      void *hdr;
++
++      /* CQE csum doesn't cover padding octets in short ethernet
++       * frames. And the pad field is appended prior to calculating
++       * and appending the FCS field.
++       *
++       * Detecting these padded frames requires to verify and parse
++       * IP headers, so we simply force all those small frames to skip
++       * checksum complete.
++       */
++      if (short_frame(skb->len))
++              return -EINVAL;
+ 
+-      void *hdr = (u8 *)va + sizeof(struct ethhdr);
+-
++      hdr = (u8 *)va + sizeof(struct ethhdr);
+       hw_checksum = csum_unfold((__force __sum16)cqe->checksum);
+ 
+       if (cqe->vlan_my_qpn & cpu_to_be32(MLX4_CQE_CVLAN_PRESENT_MASK) &&
+@@ -945,6 +959,11 @@ xdp_drop:
+               }
+ 
+               if (likely(dev->features & NETIF_F_RXCSUM)) {
++                      /* TODO: For IP non TCP/UDP packets when csum complete 
is
++                       * not an option (not supported or any other reason) we 
can
++                       * actually check cqe IPOK status bit and report
++                       * CHECKSUM_UNNECESSARY rather than CHECKSUM_NONE
++                       */
+                       if (cqe->status & cpu_to_be16(MLX4_CQE_STATUS_TCP |
+                                                     MLX4_CQE_STATUS_UDP)) {
+                               if ((cqe->status & 
cpu_to_be16(MLX4_CQE_STATUS_IPOK)) &&
+diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c 
b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+index bf1c09ca73c03..b210c171a3806 100644
+--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+@@ -91,6 +91,7 @@ static void mlx5e_update_sw_rep_counters(struct mlx5e_priv 
*priv)
+ 
+                       s->tx_packets           += sq_stats->packets;
+                       s->tx_bytes             += sq_stats->bytes;
++                      s->tx_queue_dropped     += sq_stats->dropped;
+               }
+       }
+ }
+diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+index 60e1edcbe5734..7ca1ab5c19366 100644
+--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
++++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+@@ -794,7 +794,7 @@ static int mlxsw_sp_port_vlans_add(struct mlxsw_sp_port 
*mlxsw_sp_port,
+ static enum mlxsw_reg_sfd_rec_policy mlxsw_sp_sfd_rec_policy(bool dynamic)
+ {
+       return dynamic ? MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_INGRESS :
+-                       MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY;
++                       MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_MLAG;
+ }
+ 
+ static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op(bool adding)
+@@ -806,7 +806,7 @@ static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op(bool adding)
+ static int __mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port,
+                                    const char *mac, u16 fid, bool adding,
+                                    enum mlxsw_reg_sfd_rec_action action,
+-                                   bool dynamic)
++                                   enum mlxsw_reg_sfd_rec_policy policy)
+ {
+       char *sfd_pl;
+       u8 num_rec;
+@@ -817,8 +817,7 @@ static int __mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp 
*mlxsw_sp, u8 local_port,
+               return -ENOMEM;
+ 
+       mlxsw_reg_sfd_pack(sfd_pl, mlxsw_sp_sfd_op(adding), 0);
+-      mlxsw_reg_sfd_uc_pack(sfd_pl, 0, mlxsw_sp_sfd_rec_policy(dynamic),
+-                            mac, fid, action, local_port);
++      mlxsw_reg_sfd_uc_pack(sfd_pl, 0, policy, mac, fid, action, local_port);
+       num_rec = mlxsw_reg_sfd_num_rec_get(sfd_pl);
+       err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl);
+       if (err)
+@@ -837,7 +836,8 @@ static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp 
*mlxsw_sp, u8 local_port,
+                                  bool dynamic)
+ {
+       return __mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid, adding,
+-                                       MLXSW_REG_SFD_REC_ACTION_NOP, dynamic);
++                                       MLXSW_REG_SFD_REC_ACTION_NOP,
++                                       mlxsw_sp_sfd_rec_policy(dynamic));
+ }
+ 
+ int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid,
+@@ -845,7 +845,7 @@ int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const 
char *mac, u16 fid,
+ {
+       return __mlxsw_sp_port_fdb_uc_op(mlxsw_sp, 0, mac, fid, adding,
+                                        
MLXSW_REG_SFD_REC_ACTION_FORWARD_IP_ROUTER,
+-                                       false);
++                                       MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY);
+ }
+ 
+ static int mlxsw_sp_port_fdb_uc_lag_op(struct mlxsw_sp *mlxsw_sp, u16 lag_id,
+diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c 
b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
+index a3360cbdb30bd..5b968e6a0a7fb 100644
+--- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c
++++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
+@@ -1013,6 +1013,10 @@ static void qed_ll2_post_rx_buffer_notify_fw(struct 
qed_hwfn *p_hwfn,
+       cq_prod = qed_chain_get_prod_idx(&p_rx->rcq_chain);
+       rx_prod.bd_prod = cpu_to_le16(bd_prod);
+       rx_prod.cqe_prod = cpu_to_le16(cq_prod);
++
++      /* Make sure chain element is updated before ringing the doorbell */
++      dma_wmb();
++
+       DIRECT_REG_WR(p_rx->set_prod_addr, *((u32 *)&rx_prod));
+ }
+ 
+diff --git a/drivers/net/ethernet/stmicro/stmmac/chain_mode.c 
b/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
+index b3e669af30055..026e8e9cb9429 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
++++ b/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
+@@ -34,7 +34,7 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, 
int csum)
+       unsigned int entry = priv->cur_tx;
+       struct dma_desc *desc = priv->dma_tx + entry;
+       unsigned int nopaged_len = skb_headlen(skb);
+-      unsigned int bmax;
++      unsigned int bmax, des2;
+       unsigned int i = 1, len;
+ 
+       if (priv->plat->enh_desc)
+@@ -44,11 +44,12 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, 
int csum)
+ 
+       len = nopaged_len - bmax;
+ 
+-      desc->des2 = dma_map_single(priv->device, skb->data,
+-                                  bmax, DMA_TO_DEVICE);
+-      if (dma_mapping_error(priv->device, desc->des2))
++      des2 = dma_map_single(priv->device, skb->data,
++                            bmax, DMA_TO_DEVICE);
++      desc->des2 = cpu_to_le32(des2);
++      if (dma_mapping_error(priv->device, des2))
+               return -1;
+-      priv->tx_skbuff_dma[entry].buf = desc->des2;
++      priv->tx_skbuff_dma[entry].buf = des2;
+       priv->tx_skbuff_dma[entry].len = bmax;
+       /* do not close the descriptor and do not set own bit */
+       priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum, STMMAC_CHAIN_MODE,
+@@ -60,12 +61,13 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, 
int csum)
+               desc = priv->dma_tx + entry;
+ 
+               if (len > bmax) {
+-                      desc->des2 = dma_map_single(priv->device,
+-                                                  (skb->data + bmax * i),
+-                                                  bmax, DMA_TO_DEVICE);
+-                      if (dma_mapping_error(priv->device, desc->des2))
++                      des2 = dma_map_single(priv->device,
++                                            (skb->data + bmax * i),
++                                            bmax, DMA_TO_DEVICE);
++                      desc->des2 = cpu_to_le32(des2);
++                      if (dma_mapping_error(priv->device, des2))
+                               return -1;
+-                      priv->tx_skbuff_dma[entry].buf = desc->des2;
++                      priv->tx_skbuff_dma[entry].buf = des2;
+                       priv->tx_skbuff_dma[entry].len = bmax;
+                       priv->hw->desc->prepare_tx_desc(desc, 0, bmax, csum,
+                                                       STMMAC_CHAIN_MODE, 1,
+@@ -73,12 +75,13 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, 
int csum)
+                       len -= bmax;
+                       i++;
+               } else {
+-                      desc->des2 = dma_map_single(priv->device,
+-                                                  (skb->data + bmax * i), len,
+-                                                  DMA_TO_DEVICE);
+-                      if (dma_mapping_error(priv->device, desc->des2))
++                      des2 = dma_map_single(priv->device,
++                                            (skb->data + bmax * i), len,
++                                            DMA_TO_DEVICE);
++                      desc->des2 = cpu_to_le32(des2);
++                      if (dma_mapping_error(priv->device, des2))
+                               return -1;
+-                      priv->tx_skbuff_dma[entry].buf = desc->des2;
++                      priv->tx_skbuff_dma[entry].buf = des2;
+                       priv->tx_skbuff_dma[entry].len = len;
+                       /* last descriptor can be set now */
+                       priv->hw->desc->prepare_tx_desc(desc, 0, len, csum,
+@@ -119,19 +122,19 @@ static void stmmac_init_dma_chain(void *des, dma_addr_t 
phy_addr,
+               struct dma_extended_desc *p = (struct dma_extended_desc *)des;
+               for (i = 0; i < (size - 1); i++) {
+                       dma_phy += sizeof(struct dma_extended_desc);
+-                      p->basic.des3 = (unsigned int)dma_phy;
++                      p->basic.des3 = cpu_to_le32((unsigned int)dma_phy);
+                       p++;
+               }
+-              p->basic.des3 = (unsigned int)phy_addr;
++              p->basic.des3 = cpu_to_le32((unsigned int)phy_addr);
+ 
+       } else {
+               struct dma_desc *p = (struct dma_desc *)des;
+               for (i = 0; i < (size - 1); i++) {
+                       dma_phy += sizeof(struct dma_desc);
+-                      p->des3 = (unsigned int)dma_phy;
++                      p->des3 = cpu_to_le32((unsigned int)dma_phy);
+                       p++;
+               }
+-              p->des3 = (unsigned int)phy_addr;
++              p->des3 = cpu_to_le32((unsigned int)phy_addr);
+       }
+ }
+ 
+@@ -144,10 +147,10 @@ static void stmmac_refill_desc3(void *priv_ptr, struct 
dma_desc *p)
+                * 1588-2002 time stamping is enabled, hence reinitialize it
+                * to keep explicit chaining in the descriptor.
+                */
+-              p->des3 = (unsigned int)(priv->dma_rx_phy +
+-                                       (((priv->dirty_rx) + 1) %
+-                                        DMA_RX_SIZE) *
+-                                       sizeof(struct dma_desc));
++              p->des3 = cpu_to_le32((unsigned int)(priv->dma_rx_phy +
++                                    (((priv->dirty_rx) + 1) %
++                                     DMA_RX_SIZE) *
++                                    sizeof(struct dma_desc)));
+ }
+ 
+ static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p)
+@@ -161,9 +164,9 @@ static void stmmac_clean_desc3(void *priv_ptr, struct 
dma_desc *p)
+                * 1588-2002 time stamping is enabled, hence reinitialize it
+                * to keep explicit chaining in the descriptor.
+                */
+-              p->des3 = (unsigned int)((priv->dma_tx_phy +
+-                                        ((priv->dirty_tx + 1) % DMA_TX_SIZE))
+-                                        * sizeof(struct dma_desc));
++              p->des3 = cpu_to_le32((unsigned int)((priv->dma_tx_phy +
++                                    ((priv->dirty_tx + 1) % DMA_TX_SIZE))
++                                    * sizeof(struct dma_desc)));
+ }
+ 
+ const struct stmmac_mode_ops chain_mode_ops = {
+diff --git a/drivers/net/ethernet/stmicro/stmmac/descs.h 
b/drivers/net/ethernet/stmicro/stmmac/descs.h
+index e3c86d4221095..faeeef75d7f17 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/descs.h
++++ b/drivers/net/ethernet/stmicro/stmmac/descs.h
+@@ -87,7 +87,7 @@
+ #define       TDES0_ERROR_SUMMARY             BIT(15)
+ #define       TDES0_IP_HEADER_ERROR           BIT(16)
+ #define       TDES0_TIME_STAMP_STATUS         BIT(17)
+-#define       TDES0_OWN                       BIT(31)
++#define       TDES0_OWN                       ((u32)BIT(31))  /* silence 
sparse */
+ /* TDES1 */
+ #define       TDES1_BUFFER1_SIZE_MASK         GENMASK(10, 0)
+ #define       TDES1_BUFFER2_SIZE_MASK         GENMASK(21, 11)
+@@ -130,7 +130,7 @@
+ #define       ETDES0_FIRST_SEGMENT            BIT(28)
+ #define       ETDES0_LAST_SEGMENT             BIT(29)
+ #define       ETDES0_INTERRUPT                BIT(30)
+-#define       ETDES0_OWN                      BIT(31)
++#define       ETDES0_OWN                      ((u32)BIT(31))  /* silence 
sparse */
+ /* TDES1 */
+ #define       ETDES1_BUFFER1_SIZE_MASK        GENMASK(12, 0)
+ #define       ETDES1_BUFFER2_SIZE_MASK        GENMASK(28, 16)
+@@ -170,19 +170,19 @@
+ 
+ /* Basic descriptor structure for normal and alternate descriptors */
+ struct dma_desc {
+-      unsigned int des0;
+-      unsigned int des1;
+-      unsigned int des2;
+-      unsigned int des3;
++      __le32 des0;
++      __le32 des1;
++      __le32 des2;
++      __le32 des3;
+ };
+ 
+ /* Extended descriptor structure (e.g. >= databook 3.50a) */
+ struct dma_extended_desc {
+       struct dma_desc basic;  /* Basic descriptors */
+-      unsigned int des4;      /* Extended Status */
+-      unsigned int des5;      /* Reserved */
+-      unsigned int des6;      /* Tx/Rx Timestamp Low */
+-      unsigned int des7;      /* Tx/Rx Timestamp High */
++      __le32 des4;    /* Extended Status */
++      __le32 des5;    /* Reserved */
++      __le32 des6;    /* Tx/Rx Timestamp Low */
++      __le32 des7;    /* Tx/Rx Timestamp High */
+ };
+ 
+ /* Transmit checksum insertion control */
+diff --git a/drivers/net/ethernet/stmicro/stmmac/descs_com.h 
b/drivers/net/ethernet/stmicro/stmmac/descs_com.h
+index 7635a464ce41c..1d181e205d6ec 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/descs_com.h
++++ b/drivers/net/ethernet/stmicro/stmmac/descs_com.h
+@@ -35,47 +35,50 @@
+ /* Enhanced descriptors */
+ static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end)
+ {
+-      p->des1 |= ((BUF_SIZE_8KiB - 1) << ERDES1_BUFFER2_SIZE_SHIFT)
+-                 & ERDES1_BUFFER2_SIZE_MASK;
++      p->des1 |= cpu_to_le32(((BUF_SIZE_8KiB - 1)
++                      << ERDES1_BUFFER2_SIZE_SHIFT)
++                 & ERDES1_BUFFER2_SIZE_MASK);
+ 
+       if (end)
+-              p->des1 |= ERDES1_END_RING;
++              p->des1 |= cpu_to_le32(ERDES1_END_RING);
+ }
+ 
+ static inline void enh_desc_end_tx_desc_on_ring(struct dma_desc *p, int end)
+ {
+       if (end)
+-              p->des0 |= ETDES0_END_RING;
++              p->des0 |= cpu_to_le32(ETDES0_END_RING);
+       else
+-              p->des0 &= ~ETDES0_END_RING;
++              p->des0 &= cpu_to_le32(~ETDES0_END_RING);
+ }
+ 
+ static inline void enh_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
+ {
+       if (unlikely(len > BUF_SIZE_4KiB)) {
+-              p->des1 |= (((len - BUF_SIZE_4KiB) << ETDES1_BUFFER2_SIZE_SHIFT)
++              p->des1 |= cpu_to_le32((((len - BUF_SIZE_4KiB)
++                                      << ETDES1_BUFFER2_SIZE_SHIFT)
+                           & ETDES1_BUFFER2_SIZE_MASK) | (BUF_SIZE_4KiB
+-                          & ETDES1_BUFFER1_SIZE_MASK);
++                          & ETDES1_BUFFER1_SIZE_MASK));
+       } else
+-              p->des1 |= (len & ETDES1_BUFFER1_SIZE_MASK);
++              p->des1 |= cpu_to_le32((len & ETDES1_BUFFER1_SIZE_MASK));
+ }
+ 
+ /* Normal descriptors */
+ static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end)
+ {
+-      p->des1 |= ((BUF_SIZE_2KiB - 1) << RDES1_BUFFER2_SIZE_SHIFT)
+-                  & RDES1_BUFFER2_SIZE_MASK;
++      p->des1 |= cpu_to_le32(((BUF_SIZE_2KiB - 1)
++                              << RDES1_BUFFER2_SIZE_SHIFT)
++                  & RDES1_BUFFER2_SIZE_MASK);
+ 
+       if (end)
+-              p->des1 |= RDES1_END_RING;
++              p->des1 |= cpu_to_le32(RDES1_END_RING);
+ }
+ 
+ static inline void ndesc_end_tx_desc_on_ring(struct dma_desc *p, int end)
+ {
+       if (end)
+-              p->des1 |= TDES1_END_RING;
++              p->des1 |= cpu_to_le32(TDES1_END_RING);
+       else
+-              p->des1 &= ~TDES1_END_RING;
++              p->des1 &= cpu_to_le32(~TDES1_END_RING);
+ }
+ 
+ static inline void norm_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
+@@ -83,10 +86,11 @@ static inline void norm_set_tx_desc_len_on_ring(struct 
dma_desc *p, int len)
+       if (unlikely(len > BUF_SIZE_2KiB)) {
+               unsigned int buffer1 = (BUF_SIZE_2KiB - 1)
+                                       & TDES1_BUFFER1_SIZE_MASK;
+-              p->des1 |= ((((len - buffer1) << TDES1_BUFFER2_SIZE_SHIFT)
+-                          & TDES1_BUFFER2_SIZE_MASK) | buffer1);
++              p->des1 |= cpu_to_le32((((len - buffer1)
++                                      << TDES1_BUFFER2_SIZE_SHIFT)
++                              & TDES1_BUFFER2_SIZE_MASK) | buffer1);
+       } else
+-              p->des1 |= (len & TDES1_BUFFER1_SIZE_MASK);
++              p->des1 |= cpu_to_le32((len & TDES1_BUFFER1_SIZE_MASK));
+ }
+ 
+ /* Specific functions used for Chain mode */
+@@ -94,32 +98,32 @@ static inline void norm_set_tx_desc_len_on_ring(struct 
dma_desc *p, int len)
+ /* Enhanced descriptors */
+ static inline void ehn_desc_rx_set_on_chain(struct dma_desc *p)
+ {
+-      p->des1 |= ERDES1_SECOND_ADDRESS_CHAINED;
++      p->des1 |= cpu_to_le32(ERDES1_SECOND_ADDRESS_CHAINED);
+ }
+ 
+ static inline void enh_desc_end_tx_desc_on_chain(struct dma_desc *p)
+ {
+-      p->des0 |= ETDES0_SECOND_ADDRESS_CHAINED;
++      p->des0 |= cpu_to_le32(ETDES0_SECOND_ADDRESS_CHAINED);
+ }
+ 
+ static inline void enh_set_tx_desc_len_on_chain(struct dma_desc *p, int len)
+ {
+-      p->des1 |= (len & ETDES1_BUFFER1_SIZE_MASK);
++      p->des1 |= cpu_to_le32(len & ETDES1_BUFFER1_SIZE_MASK);
+ }
+ 
+ /* Normal descriptors */
+ static inline void ndesc_rx_set_on_chain(struct dma_desc *p, int end)
+ {
+-      p->des1 |= RDES1_SECOND_ADDRESS_CHAINED;
++      p->des1 |= cpu_to_le32(RDES1_SECOND_ADDRESS_CHAINED);
+ }
+ 
+ static inline void ndesc_tx_set_on_chain(struct dma_desc *p)
+ {
+-      p->des1 |= TDES1_SECOND_ADDRESS_CHAINED;
++      p->des1 |= cpu_to_le32(TDES1_SECOND_ADDRESS_CHAINED);
+ }
+ 
+ static inline void norm_set_tx_desc_len_on_chain(struct dma_desc *p, int len)
+ {
+-      p->des1 |= len & TDES1_BUFFER1_SIZE_MASK;
++      p->des1 |= cpu_to_le32(len & TDES1_BUFFER1_SIZE_MASK);
+ }
+ #endif /* __DESC_COM_H__ */
+diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
+index f988c7573ba59..3f5056858535a 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
+@@ -23,7 +23,7 @@ static int dwmac4_wrback_get_tx_status(void *data, struct 
stmmac_extra_stats *x,
+       unsigned int tdes3;
+       int ret = tx_done;
+ 
+-      tdes3 = p->des3;
++      tdes3 = le32_to_cpu(p->des3);
+ 
+       /* Get tx owner first */
+       if (unlikely(tdes3 & TDES3_OWN))
+@@ -77,9 +77,9 @@ static int dwmac4_wrback_get_rx_status(void *data, struct 
stmmac_extra_stats *x,
+                                      struct dma_desc *p)
+ {
+       struct net_device_stats *stats = (struct net_device_stats *)data;
+-      unsigned int rdes1 = p->des1;
+-      unsigned int rdes2 = p->des2;
+-      unsigned int rdes3 = p->des3;
++      unsigned int rdes1 = le32_to_cpu(p->des1);
++      unsigned int rdes2 = le32_to_cpu(p->des2);
++      unsigned int rdes3 = le32_to_cpu(p->des3);
+       int message_type;
+       int ret = good_frame;
+ 
+@@ -176,47 +176,48 @@ static int dwmac4_wrback_get_rx_status(void *data, 
struct stmmac_extra_stats *x,
+ 
+ static int dwmac4_rd_get_tx_len(struct dma_desc *p)
+ {
+-      return (p->des2 & TDES2_BUFFER1_SIZE_MASK);
++      return (le32_to_cpu(p->des2) & TDES2_BUFFER1_SIZE_MASK);
+ }
+ 
+ static int dwmac4_get_tx_owner(struct dma_desc *p)
+ {
+-      return (p->des3 & TDES3_OWN) >> TDES3_OWN_SHIFT;
++      return (le32_to_cpu(p->des3) & TDES3_OWN) >> TDES3_OWN_SHIFT;
+ }
+ 
+ static void dwmac4_set_tx_owner(struct dma_desc *p)
+ {
+-      p->des3 |= TDES3_OWN;
++      p->des3 |= cpu_to_le32(TDES3_OWN);
+ }
+ 
+ static void dwmac4_set_rx_owner(struct dma_desc *p)
+ {
+-      p->des3 |= RDES3_OWN;
++      p->des3 |= cpu_to_le32(RDES3_OWN);
+ }
+ 
+ static int dwmac4_get_tx_ls(struct dma_desc *p)
+ {
+-      return (p->des3 & TDES3_LAST_DESCRIPTOR) >> TDES3_LAST_DESCRIPTOR_SHIFT;
++      return (le32_to_cpu(p->des3) & TDES3_LAST_DESCRIPTOR)
++              >> TDES3_LAST_DESCRIPTOR_SHIFT;
+ }
+ 
+ static int dwmac4_wrback_get_rx_frame_len(struct dma_desc *p, int rx_coe)
+ {
+-      return (p->des3 & RDES3_PACKET_SIZE_MASK);
++      return (le32_to_cpu(p->des3) & RDES3_PACKET_SIZE_MASK);
+ }
+ 
+ static void dwmac4_rd_enable_tx_timestamp(struct dma_desc *p)
+ {
+-      p->des2 |= TDES2_TIMESTAMP_ENABLE;
++      p->des2 |= cpu_to_le32(TDES2_TIMESTAMP_ENABLE);
+ }
+ 
+ static int dwmac4_wrback_get_tx_timestamp_status(struct dma_desc *p)
+ {
+       /* Context type from W/B descriptor must be zero */
+-      if (p->des3 & TDES3_CONTEXT_TYPE)
++      if (le32_to_cpu(p->des3) & TDES3_CONTEXT_TYPE)
+               return -EINVAL;
+ 
+       /* Tx Timestamp Status is 1 so des0 and des1'll have valid values */
+-      if (p->des3 & TDES3_TIMESTAMP_STATUS)
++      if (le32_to_cpu(p->des3) & TDES3_TIMESTAMP_STATUS)
+               return 0;
+ 
+       return 1;
+@@ -227,9 +228,9 @@ static inline u64 dwmac4_get_timestamp(void *desc, u32 ats)
+       struct dma_desc *p = (struct dma_desc *)desc;
+       u64 ns;
+ 
+-      ns = p->des0;
++      ns = le32_to_cpu(p->des0);
+       /* convert high/sec time stamp value to nanosecond */
+-      ns += p->des1 * 1000000000ULL;
++      ns += le32_to_cpu(p->des1) * 1000000000ULL;
+ 
+       return ns;
+ }
+@@ -267,7 +268,7 @@ static int dwmac4_wrback_get_rx_timestamp_status(void 
*desc, u32 ats)
+ 
+       /* Get the status from normal w/b descriptor */
+       if (likely(p->des3 & TDES3_RS1V)) {
+-              if (likely(p->des1 & RDES1_TIMESTAMP_AVAILABLE)) {
++              if (likely(le32_to_cpu(p->des1) & RDES1_TIMESTAMP_AVAILABLE)) {
+                       int i = 0;
+ 
+                       /* Check if timestamp is OK from context descriptor */
+@@ -290,10 +291,10 @@ exit:
+ static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
+                                  int mode, int end)
+ {
+-      p->des3 = RDES3_OWN | RDES3_BUFFER1_VALID_ADDR;
++      p->des3 = cpu_to_le32(RDES3_OWN | RDES3_BUFFER1_VALID_ADDR);
+ 
+       if (!disable_rx_ic)
+-              p->des3 |= RDES3_INT_ON_COMPLETION_EN;
++              p->des3 |= cpu_to_le32(RDES3_INT_ON_COMPLETION_EN);
+ }
+ 
+ static void dwmac4_rd_init_tx_desc(struct dma_desc *p, int mode, int end)
+@@ -308,9 +309,9 @@ static void dwmac4_rd_prepare_tx_desc(struct dma_desc *p, 
int is_fs, int len,
+                                     bool csum_flag, int mode, bool tx_own,
+                                     bool ls)
+ {
+-      unsigned int tdes3 = p->des3;
++      unsigned int tdes3 = le32_to_cpu(p->des3);
+ 
+-      p->des2 |= (len & TDES2_BUFFER1_SIZE_MASK);
++      p->des2 |= cpu_to_le32(len & TDES2_BUFFER1_SIZE_MASK);
+ 
+       if (is_fs)
+               tdes3 |= TDES3_FIRST_DESCRIPTOR;
+@@ -338,7 +339,7 @@ static void dwmac4_rd_prepare_tx_desc(struct dma_desc *p, 
int is_fs, int len,
+                */
+               wmb();
+ 
+-      p->des3 = tdes3;
++      p->des3 = cpu_to_le32(tdes3);
+ }
+ 
+ static void dwmac4_rd_prepare_tso_tx_desc(struct dma_desc *p, int is_fs,
+@@ -346,14 +347,14 @@ static void dwmac4_rd_prepare_tso_tx_desc(struct 
dma_desc *p, int is_fs,
+                                         bool ls, unsigned int tcphdrlen,
+                                         unsigned int tcppayloadlen)
+ {
+-      unsigned int tdes3 = p->des3;
++      unsigned int tdes3 = le32_to_cpu(p->des3);
+ 
+       if (len1)
+-              p->des2 |= (len1 & TDES2_BUFFER1_SIZE_MASK);
++              p->des2 |= cpu_to_le32((len1 & TDES2_BUFFER1_SIZE_MASK));
+ 
+       if (len2)
+-              p->des2 |= (len2 << TDES2_BUFFER2_SIZE_MASK_SHIFT)
+-                          & TDES2_BUFFER2_SIZE_MASK;
++              p->des2 |= cpu_to_le32((len2 << TDES2_BUFFER2_SIZE_MASK_SHIFT)
++                          & TDES2_BUFFER2_SIZE_MASK);
+ 
+       if (is_fs) {
+               tdes3 |= TDES3_FIRST_DESCRIPTOR |
+@@ -381,7 +382,7 @@ static void dwmac4_rd_prepare_tso_tx_desc(struct dma_desc 
*p, int is_fs,
+                */
+               wmb();
+ 
+-      p->des3 = tdes3;
++      p->des3 = cpu_to_le32(tdes3);
+ }
+ 
+ static void dwmac4_release_tx_desc(struct dma_desc *p, int mode)
+@@ -392,7 +393,7 @@ static void dwmac4_release_tx_desc(struct dma_desc *p, int 
mode)
+ 
+ static void dwmac4_rd_set_tx_ic(struct dma_desc *p)
+ {
+-      p->des2 |= TDES2_INTERRUPT_ON_COMPLETION;
++      p->des2 |= cpu_to_le32(TDES2_INTERRUPT_ON_COMPLETION);
+ }
+ 
+ static void dwmac4_display_ring(void *head, unsigned int size, bool rx)
+@@ -405,7 +406,8 @@ static void dwmac4_display_ring(void *head, unsigned int 
size, bool rx)
+       for (i = 0; i < size; i++) {
+               pr_info("%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
+                       i, (unsigned int)virt_to_phys(p),
+-                      p->des0, p->des1, p->des2, p->des3);
++                      le32_to_cpu(p->des0), le32_to_cpu(p->des1),
++                      le32_to_cpu(p->des2), le32_to_cpu(p->des3));
+               p++;
+       }
+ }
+@@ -414,8 +416,8 @@ static void dwmac4_set_mss_ctxt(struct dma_desc *p, 
unsigned int mss)
+ {
+       p->des0 = 0;
+       p->des1 = 0;
+-      p->des2 = mss;
+-      p->des3 = TDES3_CONTEXT_TYPE | TDES3_CTXT_TCMSSV;
++      p->des2 = cpu_to_le32(mss);
++      p->des3 = cpu_to_le32(TDES3_CONTEXT_TYPE | TDES3_CTXT_TCMSSV);
+ }
+ 
+ const struct stmmac_desc_ops dwmac4_desc_ops = {
+diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c 
b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
+index e75549327c345..ce97e522566a8 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
++++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
+@@ -30,7 +30,7 @@ static int enh_desc_get_tx_status(void *data, struct 
stmmac_extra_stats *x,
+                                 struct dma_desc *p, void __iomem *ioaddr)
+ {
+       struct net_device_stats *stats = (struct net_device_stats *)data;
+-      unsigned int tdes0 = p->des0;
++      unsigned int tdes0 = le32_to_cpu(p->des0);
+       int ret = tx_done;
+ 
+       /* Get tx owner first */
+@@ -95,7 +95,7 @@ static int enh_desc_get_tx_status(void *data, struct 
stmmac_extra_stats *x,
+ 
+ static int enh_desc_get_tx_len(struct dma_desc *p)
+ {
+-      return (p->des1 & ETDES1_BUFFER1_SIZE_MASK);
++      return (le32_to_cpu(p->des1) & ETDES1_BUFFER1_SIZE_MASK);
+ }
+ 
+ static int enh_desc_coe_rdes0(int ipc_err, int type, int payload_err)
+@@ -134,8 +134,8 @@ static int enh_desc_coe_rdes0(int ipc_err, int type, int 
payload_err)
+ static void enh_desc_get_ext_status(void *data, struct stmmac_extra_stats *x,
+                                   struct dma_extended_desc *p)
+ {
+-      unsigned int rdes0 = p->basic.des0;
+-      unsigned int rdes4 = p->des4;
++      unsigned int rdes0 = le32_to_cpu(p->basic.des0);
++      unsigned int rdes4 = le32_to_cpu(p->des4);
+ 
+       if (unlikely(rdes0 & ERDES0_RX_MAC_ADDR)) {
+               int message_type = (rdes4 & ERDES4_MSG_TYPE_MASK) >> 8;
+@@ -199,7 +199,7 @@ static int enh_desc_get_rx_status(void *data, struct 
stmmac_extra_stats *x,
+                                 struct dma_desc *p)
+ {
+       struct net_device_stats *stats = (struct net_device_stats *)data;
+-      unsigned int rdes0 = p->des0;
++      unsigned int rdes0 = le32_to_cpu(p->des0);
+       int ret = good_frame;
+ 
+       if (unlikely(rdes0 & RDES0_OWN))
+@@ -265,8 +265,8 @@ static int enh_desc_get_rx_status(void *data, struct 
stmmac_extra_stats *x,
+ static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
+                                 int mode, int end)
+ {
+-      p->des0 |= RDES0_OWN;
+-      p->des1 |= ((BUF_SIZE_8KiB - 1) & ERDES1_BUFFER1_SIZE_MASK);
++      p->des0 |= cpu_to_le32(RDES0_OWN);
++      p->des1 |= cpu_to_le32((BUF_SIZE_8KiB - 1) & ERDES1_BUFFER1_SIZE_MASK);
+ 
+       if (mode == STMMAC_CHAIN_MODE)
+               ehn_desc_rx_set_on_chain(p);
+@@ -274,12 +274,12 @@ static void enh_desc_init_rx_desc(struct dma_desc *p, 
int disable_rx_ic,
+               ehn_desc_rx_set_on_ring(p, end);
+ 
+       if (disable_rx_ic)
+-              p->des1 |= ERDES1_DISABLE_IC;
++              p->des1 |= cpu_to_le32(ERDES1_DISABLE_IC);
+ }
+ 
+ static void enh_desc_init_tx_desc(struct dma_desc *p, int mode, int end)
+ {
+-      p->des0 &= ~ETDES0_OWN;
++      p->des0 &= cpu_to_le32(~ETDES0_OWN);
+       if (mode == STMMAC_CHAIN_MODE)
+               enh_desc_end_tx_desc_on_chain(p);
+       else
+@@ -288,27 +288,27 @@ static void enh_desc_init_tx_desc(struct dma_desc *p, 
int mode, int end)
+ 
+ static int enh_desc_get_tx_owner(struct dma_desc *p)
+ {
+-      return (p->des0 & ETDES0_OWN) >> 31;
++      return (le32_to_cpu(p->des0) & ETDES0_OWN) >> 31;
+ }
+ 
+ static void enh_desc_set_tx_owner(struct dma_desc *p)
+ {
+-      p->des0 |= ETDES0_OWN;
++      p->des0 |= cpu_to_le32(ETDES0_OWN);
+ }
+ 
+ static void enh_desc_set_rx_owner(struct dma_desc *p)
+ {
+-      p->des0 |= RDES0_OWN;
++      p->des0 |= cpu_to_le32(RDES0_OWN);
+ }
+ 
+ static int enh_desc_get_tx_ls(struct dma_desc *p)
+ {
+-      return (p->des0 & ETDES0_LAST_SEGMENT) >> 29;
++      return (le32_to_cpu(p->des0) & ETDES0_LAST_SEGMENT) >> 29;
+ }
+ 
+ static void enh_desc_release_tx_desc(struct dma_desc *p, int mode)
+ {
+-      int ter = (p->des0 & ETDES0_END_RING) >> 21;
++      int ter = (le32_to_cpu(p->des0) & ETDES0_END_RING) >> 21;
+ 
+       memset(p, 0, offsetof(struct dma_desc, des2));
+       if (mode == STMMAC_CHAIN_MODE)
+@@ -321,7 +321,7 @@ static void enh_desc_prepare_tx_desc(struct dma_desc *p, 
int is_fs, int len,
+                                    bool csum_flag, int mode, bool tx_own,
+                                    bool ls)
+ {
+-      unsigned int tdes0 = p->des0;
++      unsigned int tdes0 = le32_to_cpu(p->des0);
+ 
+       if (mode == STMMAC_CHAIN_MODE)
+               enh_set_tx_desc_len_on_chain(p, len);
+@@ -352,12 +352,12 @@ static void enh_desc_prepare_tx_desc(struct dma_desc *p, 
int is_fs, int len,
+                */
+               wmb();
+ 
+-      p->des0 = tdes0;
++      p->des0 = cpu_to_le32(tdes0);
+ }
+ 
+ static void enh_desc_set_tx_ic(struct dma_desc *p)
+ {
+-      p->des0 |= ETDES0_INTERRUPT;
++      p->des0 |= cpu_to_le32(ETDES0_INTERRUPT);
+ }
+ 
+ static int enh_desc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
+@@ -372,18 +372,18 @@ static int enh_desc_get_rx_frame_len(struct dma_desc *p, 
int rx_coe_type)
+       if (rx_coe_type == STMMAC_RX_COE_TYPE1)
+               csum = 2;
+ 
+-      return (((p->des0 & RDES0_FRAME_LEN_MASK) >> RDES0_FRAME_LEN_SHIFT) -
+-              csum);
++      return (((le32_to_cpu(p->des0) & RDES0_FRAME_LEN_MASK)
++                              >> RDES0_FRAME_LEN_SHIFT) - csum);
+ }
+ 
+ static void enh_desc_enable_tx_timestamp(struct dma_desc *p)
+ {
+-      p->des0 |= ETDES0_TIME_STAMP_ENABLE;
++      p->des0 |= cpu_to_le32(ETDES0_TIME_STAMP_ENABLE);
+ }
+ 
+ static int enh_desc_get_tx_timestamp_status(struct dma_desc *p)
+ {
+-      return (p->des0 & ETDES0_TIME_STAMP_STATUS) >> 17;
++      return (le32_to_cpu(p->des0) & ETDES0_TIME_STAMP_STATUS) >> 17;
+ }
+ 
+ static u64 enh_desc_get_timestamp(void *desc, u32 ats)
+@@ -392,13 +392,13 @@ static u64 enh_desc_get_timestamp(void *desc, u32 ats)
+ 
+       if (ats) {
+               struct dma_extended_desc *p = (struct dma_extended_desc *)desc;
+-              ns = p->des6;
++              ns = le32_to_cpu(p->des6);
+               /* convert high/sec time stamp value to nanosecond */
+-              ns += p->des7 * 1000000000ULL;
++              ns += le32_to_cpu(p->des7) * 1000000000ULL;
+       } else {
+               struct dma_desc *p = (struct dma_desc *)desc;
+-              ns = p->des2;
+-              ns += p->des3 * 1000000000ULL;
++              ns = le32_to_cpu(p->des2);
++              ns += le32_to_cpu(p->des3) * 1000000000ULL;
+       }
+ 
+       return ns;
+@@ -408,10 +408,11 @@ static int enh_desc_get_rx_timestamp_status(void *desc, 
u32 ats)
+ {
+       if (ats) {
+               struct dma_extended_desc *p = (struct dma_extended_desc *)desc;
+-              return (p->basic.des0 & RDES0_IPC_CSUM_ERROR) >> 7;
++              return (le32_to_cpu(p->basic.des0) & RDES0_IPC_CSUM_ERROR) >> 7;
+       } else {
+               struct dma_desc *p = (struct dma_desc *)desc;
+-              if ((p->des2 == 0xffffffff) && (p->des3 == 0xffffffff))
++              if ((le32_to_cpu(p->des2) == 0xffffffff) &&
++                  (le32_to_cpu(p->des3) == 0xffffffff))
+                       /* timestamp is corrupted, hence don't store it */
+                       return 0;
+               else
+diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c 
b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
+index 2beacd0d3043a..fd78406e2e9af 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
++++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
+@@ -30,8 +30,8 @@ static int ndesc_get_tx_status(void *data, struct 
stmmac_extra_stats *x,
+                              struct dma_desc *p, void __iomem *ioaddr)
+ {
+       struct net_device_stats *stats = (struct net_device_stats *)data;
+-      unsigned int tdes0 = p->des0;
+-      unsigned int tdes1 = p->des1;
++      unsigned int tdes0 = le32_to_cpu(p->des0);
++      unsigned int tdes1 = le32_to_cpu(p->des1);
+       int ret = tx_done;
+ 
+       /* Get tx owner first */
+@@ -77,7 +77,7 @@ static int ndesc_get_tx_status(void *data, struct 
stmmac_extra_stats *x,
+ 
+ static int ndesc_get_tx_len(struct dma_desc *p)
+ {
+-      return (p->des1 & RDES1_BUFFER1_SIZE_MASK);
++      return (le32_to_cpu(p->des1) & RDES1_BUFFER1_SIZE_MASK);
+ }
+ 
+ /* This function verifies if each incoming frame has some errors
+@@ -88,7 +88,7 @@ static int ndesc_get_rx_status(void *data, struct 
stmmac_extra_stats *x,
+                              struct dma_desc *p)
+ {
+       int ret = good_frame;
+-      unsigned int rdes0 = p->des0;
++      unsigned int rdes0 = le32_to_cpu(p->des0);
+       struct net_device_stats *stats = (struct net_device_stats *)data;
+ 
+       if (unlikely(rdes0 & RDES0_OWN))
+@@ -141,8 +141,8 @@ static int ndesc_get_rx_status(void *data, struct 
stmmac_extra_stats *x,
+ static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int 
mode,
+                              int end)
+ {
+-      p->des0 |= RDES0_OWN;
+-      p->des1 |= (BUF_SIZE_2KiB - 1) & RDES1_BUFFER1_SIZE_MASK;
++      p->des0 |= cpu_to_le32(RDES0_OWN);
++      p->des1 |= cpu_to_le32((BUF_SIZE_2KiB - 1) & RDES1_BUFFER1_SIZE_MASK);
+ 
+       if (mode == STMMAC_CHAIN_MODE)
+               ndesc_rx_set_on_chain(p, end);
+@@ -150,12 +150,12 @@ static void ndesc_init_rx_desc(struct dma_desc *p, int 
disable_rx_ic, int mode,
+               ndesc_rx_set_on_ring(p, end);
+ 
+       if (disable_rx_ic)
+-              p->des1 |= RDES1_DISABLE_IC;
++              p->des1 |= cpu_to_le32(RDES1_DISABLE_IC);
+ }
+ 
+ static void ndesc_init_tx_desc(struct dma_desc *p, int mode, int end)
+ {
+-      p->des0 &= ~TDES0_OWN;
++      p->des0 &= cpu_to_le32(~TDES0_OWN);
+       if (mode == STMMAC_CHAIN_MODE)
+               ndesc_tx_set_on_chain(p);
+       else
+@@ -164,27 +164,27 @@ static void ndesc_init_tx_desc(struct dma_desc *p, int 
mode, int end)
+ 
+ static int ndesc_get_tx_owner(struct dma_desc *p)
+ {
+-      return (p->des0 & TDES0_OWN) >> 31;
++      return (le32_to_cpu(p->des0) & TDES0_OWN) >> 31;
+ }
+ 
+ static void ndesc_set_tx_owner(struct dma_desc *p)
+ {
+-      p->des0 |= TDES0_OWN;
++      p->des0 |= cpu_to_le32(TDES0_OWN);
+ }
+ 
+ static void ndesc_set_rx_owner(struct dma_desc *p)
+ {
+-      p->des0 |= RDES0_OWN;
++      p->des0 |= cpu_to_le32(RDES0_OWN);
+ }
+ 
+ static int ndesc_get_tx_ls(struct dma_desc *p)
+ {
+-      return (p->des1 & TDES1_LAST_SEGMENT) >> 30;
++      return (le32_to_cpu(p->des1) & TDES1_LAST_SEGMENT) >> 30;
+ }
+ 
+ static void ndesc_release_tx_desc(struct dma_desc *p, int mode)
+ {
+-      int ter = (p->des1 & TDES1_END_RING) >> 25;
++      int ter = (le32_to_cpu(p->des1) & TDES1_END_RING) >> 25;
+ 
+       memset(p, 0, offsetof(struct dma_desc, des2));
+       if (mode == STMMAC_CHAIN_MODE)
+@@ -197,7 +197,7 @@ static void ndesc_prepare_tx_desc(struct dma_desc *p, int 
is_fs, int len,
+                                 bool csum_flag, int mode, bool tx_own,
+                                 bool ls)
+ {
+-      unsigned int tdes1 = p->des1;
++      unsigned int tdes1 = le32_to_cpu(p->des1);
+ 
+       if (is_fs)
+               tdes1 |= TDES1_FIRST_SEGMENT;
+@@ -212,7 +212,7 @@ static void ndesc_prepare_tx_desc(struct dma_desc *p, int 
is_fs, int len,
+       if (ls)
+               tdes1 |= TDES1_LAST_SEGMENT;
+ 
+-      p->des1 = tdes1;
++      p->des1 = cpu_to_le32(tdes1);
+ 
+       if (mode == STMMAC_CHAIN_MODE)
+               norm_set_tx_desc_len_on_chain(p, len);
+@@ -220,12 +220,12 @@ static void ndesc_prepare_tx_desc(struct dma_desc *p, 
int is_fs, int len,
+               norm_set_tx_desc_len_on_ring(p, len);
+ 
+       if (tx_own)
+-              p->des0 |= TDES0_OWN;
++              p->des0 |= cpu_to_le32(TDES0_OWN);
+ }
+ 
+ static void ndesc_set_tx_ic(struct dma_desc *p)
+ {
+-      p->des1 |= TDES1_INTERRUPT;
++      p->des1 |= cpu_to_le32(TDES1_INTERRUPT);
+ }
+ 
+ static int ndesc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
+@@ -241,19 +241,20 @@ static int ndesc_get_rx_frame_len(struct dma_desc *p, 
int rx_coe_type)
+       if (rx_coe_type == STMMAC_RX_COE_TYPE1)
+               csum = 2;
+ 
+-      return (((p->des0 & RDES0_FRAME_LEN_MASK) >> RDES0_FRAME_LEN_SHIFT) -
++      return (((le32_to_cpu(p->des0) & RDES0_FRAME_LEN_MASK)
++                              >> RDES0_FRAME_LEN_SHIFT) -
+               csum);
+ 
+ }
+ 
+ static void ndesc_enable_tx_timestamp(struct dma_desc *p)
+ {
+-      p->des1 |= TDES1_TIME_STAMP_ENABLE;
++      p->des1 |= cpu_to_le32(TDES1_TIME_STAMP_ENABLE);
+ }
+ 
+ static int ndesc_get_tx_timestamp_status(struct dma_desc *p)
+ {
+-      return (p->des0 & TDES0_TIME_STAMP_STATUS) >> 17;
++      return (le32_to_cpu(p->des0) & TDES0_TIME_STAMP_STATUS) >> 17;
+ }
+ 
+ static u64 ndesc_get_timestamp(void *desc, u32 ats)
+@@ -261,9 +262,9 @@ static u64 ndesc_get_timestamp(void *desc, u32 ats)
+       struct dma_desc *p = (struct dma_desc *)desc;
+       u64 ns;
+ 
+-      ns = p->des2;
++      ns = le32_to_cpu(p->des2);
+       /* convert high/sec time stamp value to nanosecond */
+-      ns += p->des3 * 1000000000ULL;
++      ns += le32_to_cpu(p->des3) * 1000000000ULL;
+ 
+       return ns;
+ }
+@@ -272,7 +273,8 @@ static int ndesc_get_rx_timestamp_status(void *desc, u32 
ats)
+ {
+       struct dma_desc *p = (struct dma_desc *)desc;
+ 
+-      if ((p->des2 == 0xffffffff) && (p->des3 == 0xffffffff))
++      if ((le32_to_cpu(p->des2) == 0xffffffff) &&
++          (le32_to_cpu(p->des3) == 0xffffffff))
+               /* timestamp is corrupted, hence don't store it */
+               return 0;
+       else
+diff --git a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c 
b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
+index 7723b5d2499a1..9983ce9bd90de 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
++++ b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
+@@ -34,7 +34,7 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, 
int csum)
+       unsigned int entry = priv->cur_tx;
+       struct dma_desc *desc;
+       unsigned int nopaged_len = skb_headlen(skb);
+-      unsigned int bmax, len;
++      unsigned int bmax, len, des2;
+ 
+       if (priv->extend_desc)
+               desc = (struct dma_desc *)(priv->dma_etx + entry);
+@@ -50,16 +50,17 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, 
int csum)
+ 
+       if (nopaged_len > BUF_SIZE_8KiB) {
+ 
+-              desc->des2 = dma_map_single(priv->device, skb->data,
+-                                          bmax, DMA_TO_DEVICE);
+-              if (dma_mapping_error(priv->device, desc->des2))
++              des2 = dma_map_single(priv->device, skb->data, bmax,
++                                    DMA_TO_DEVICE);
++              desc->des2 = cpu_to_le32(des2);
++              if (dma_mapping_error(priv->device, des2))
+                       return -1;
+ 
+-              priv->tx_skbuff_dma[entry].buf = desc->des2;
++              priv->tx_skbuff_dma[entry].buf = des2;
+               priv->tx_skbuff_dma[entry].len = bmax;
+               priv->tx_skbuff_dma[entry].is_jumbo = true;
+ 
+-              desc->des3 = desc->des2 + BUF_SIZE_4KiB;
++              desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
+               priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum,
+                                               STMMAC_RING_MODE, 0, false);
+               priv->tx_skbuff[entry] = NULL;
+@@ -70,26 +71,28 @@ static int stmmac_jumbo_frm(void *p, struct sk_buff *skb, 
int csum)
+               else
+                       desc = priv->dma_tx + entry;
+ 
+-              desc->des2 = dma_map_single(priv->device, skb->data + bmax,
+-                                          len, DMA_TO_DEVICE);
+-              if (dma_mapping_error(priv->device, desc->des2))
++              des2 = dma_map_single(priv->device, skb->data + bmax, len,
++                                    DMA_TO_DEVICE);
++              desc->des2 = cpu_to_le32(des2);
++              if (dma_mapping_error(priv->device, des2))
+                       return -1;
+-              priv->tx_skbuff_dma[entry].buf = desc->des2;
++              priv->tx_skbuff_dma[entry].buf = des2;
+               priv->tx_skbuff_dma[entry].len = len;
+               priv->tx_skbuff_dma[entry].is_jumbo = true;
+ 
+-              desc->des3 = desc->des2 + BUF_SIZE_4KiB;
++              desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
+               priv->hw->desc->prepare_tx_desc(desc, 0, len, csum,
+                                               STMMAC_RING_MODE, 1, true);
+       } else {
+-              desc->des2 = dma_map_single(priv->device, skb->data,
+-                                          nopaged_len, DMA_TO_DEVICE);
+-              if (dma_mapping_error(priv->device, desc->des2))
++              des2 = dma_map_single(priv->device, skb->data,
++                                    nopaged_len, DMA_TO_DEVICE);
++              desc->des2 = cpu_to_le32(des2);
++              if (dma_mapping_error(priv->device, des2))
+                       return -1;
+-              priv->tx_skbuff_dma[entry].buf = desc->des2;
++              priv->tx_skbuff_dma[entry].buf = des2;
+               priv->tx_skbuff_dma[entry].len = nopaged_len;
+               priv->tx_skbuff_dma[entry].is_jumbo = true;
+-              desc->des3 = desc->des2 + BUF_SIZE_4KiB;
++              desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
+               priv->hw->desc->prepare_tx_desc(desc, 1, nopaged_len, csum,
+                                               STMMAC_RING_MODE, 0, true);
+       }
+@@ -115,13 +118,13 @@ static void stmmac_refill_desc3(void *priv_ptr, struct 
dma_desc *p)
+ 
+       /* Fill DES3 in case of RING mode */
+       if (priv->dma_buf_sz >= BUF_SIZE_8KiB)
+-              p->des3 = p->des2 + BUF_SIZE_8KiB;
++              p->des3 = cpu_to_le32(le32_to_cpu(p->des2) + BUF_SIZE_8KiB);
+ }
+ 
+ /* In ring mode we need to fill the desc3 because it is used as buffer */
+ static void stmmac_init_desc3(struct dma_desc *p)
+ {
+-      p->des3 = p->des2 + BUF_SIZE_8KiB;
++      p->des3 = cpu_to_le32(le32_to_cpu(p->des2) + BUF_SIZE_8KiB);
+ }
+ 
+ static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p)
+diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+index 65ed02bc3ea34..20a2b01b392c1 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+@@ -1002,9 +1002,9 @@ static int stmmac_init_rx_buffers(struct stmmac_priv 
*priv, struct dma_desc *p,
+       }
+ 
+       if (priv->synopsys_id >= DWMAC_CORE_4_00)
+-              p->des0 = priv->rx_skbuff_dma[i];
++              p->des0 = cpu_to_le32(priv->rx_skbuff_dma[i]);
+       else
+-              p->des2 = priv->rx_skbuff_dma[i];
++              p->des2 = cpu_to_le32(priv->rx_skbuff_dma[i]);
+ 
+       if ((priv->hw->mode->init_desc3) &&
+           (priv->dma_buf_sz == BUF_SIZE_16KiB))
+@@ -1968,7 +1968,7 @@ static void stmmac_tso_allocator(struct stmmac_priv 
*priv, unsigned int des,
+               priv->cur_tx = STMMAC_GET_ENTRY(priv->cur_tx, DMA_TX_SIZE);
+               desc = priv->dma_tx + priv->cur_tx;
+ 
+-              desc->des0 = des + (total_len - tmp_len);
++              desc->des0 = cpu_to_le32(des + (total_len - tmp_len));
+               buff_size = tmp_len >= TSO_MAX_BUFF_SIZE ?
+                           TSO_MAX_BUFF_SIZE : tmp_len;
+ 
+@@ -2070,11 +2070,11 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff 
*skb, struct net_device *dev)
+       priv->tx_skbuff_dma[first_entry].len = skb_headlen(skb);
+       priv->tx_skbuff[first_entry] = skb;
+ 
+-      first->des0 = des;
++      first->des0 = cpu_to_le32(des);
+ 
+       /* Fill start of payload in buff2 of first descriptor */
+       if (pay_len)
+-              first->des1 =  des + proto_hdr_len;
++              first->des1 = cpu_to_le32(des + proto_hdr_len);
+ 
+       /* If needed take extra descriptors to fill the remaining payload */
+       tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE;
+@@ -2271,13 +2271,11 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, 
struct net_device *dev)
+ 
+               priv->tx_skbuff[entry] = NULL;
+ 
+-              if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00)) {
+-                      desc->des0 = des;
+-                      priv->tx_skbuff_dma[entry].buf = desc->des0;
+-              } else {
+-                      desc->des2 = des;
+-                      priv->tx_skbuff_dma[entry].buf = desc->des2;
+-              }
++              priv->tx_skbuff_dma[entry].buf = des;
++              if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
++                      desc->des0 = cpu_to_le32(des);
++              else
++                      desc->des2 = cpu_to_le32(des);
+ 
+               priv->tx_skbuff_dma[entry].map_as_page = true;
+               priv->tx_skbuff_dma[entry].len = len;
+@@ -2348,13 +2346,11 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, 
struct net_device *dev)
+               if (dma_mapping_error(priv->device, des))
+                       goto dma_map_err;
+ 
+-              if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00)) {
+-                      first->des0 = des;
+-                      priv->tx_skbuff_dma[first_entry].buf = first->des0;
+-              } else {
+-                      first->des2 = des;
+-                      priv->tx_skbuff_dma[first_entry].buf = first->des2;
+-              }
++              priv->tx_skbuff_dma[first_entry].buf = des;
++              if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
++                      first->des0 = cpu_to_le32(des);
++              else
++                      first->des2 = cpu_to_le32(des);
+ 
+               priv->tx_skbuff_dma[first_entry].len = nopaged_len;
+               priv->tx_skbuff_dma[first_entry].last_segment = last_segment;
+@@ -2468,10 +2464,10 @@ static inline void stmmac_rx_refill(struct stmmac_priv 
*priv)
+                       }
+ 
+                       if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00)) {
+-                              p->des0 = priv->rx_skbuff_dma[entry];
++                              p->des0 = 
cpu_to_le32(priv->rx_skbuff_dma[entry]);
+                               p->des1 = 0;
+                       } else {
+-                              p->des2 = priv->rx_skbuff_dma[entry];
++                              p->des2 = 
cpu_to_le32(priv->rx_skbuff_dma[entry]);
+                       }
+                       if (priv->hw->mode->refill_desc3)
+                               priv->hw->mode->refill_desc3(priv, p);
+@@ -2575,9 +2571,9 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
+                       unsigned int des;
+ 
+                       if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
+-                              des = p->des0;
++                              des = le32_to_cpu(p->des0);
+                       else
+-                              des = p->des2;
++                              des = le32_to_cpu(p->des2);
+ 
+                       frame_len = priv->hw->desc->get_rx_frame_len(p, coe);
+ 
+@@ -2951,14 +2947,17 @@ static void sysfs_display_ring(void *head, int size, 
int extend_desc,
+                       x = *(u64 *) ep;
+                       seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
+                                  i, (unsigned int)virt_to_phys(ep),
+-                                 ep->basic.des0, ep->basic.des1,
+-                                 ep->basic.des2, ep->basic.des3);
++                                 le32_to_cpu(ep->basic.des0),
++                                 le32_to_cpu(ep->basic.des1),
++                                 le32_to_cpu(ep->basic.des2),
++                                 le32_to_cpu(ep->basic.des3));
+                       ep++;
+               } else {
+                       x = *(u64 *) p;
+                       seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
+                                  i, (unsigned int)virt_to_phys(ep),
+-                                 p->des0, p->des1, p->des2, p->des3);
++                                 le32_to_cpu(p->des0), le32_to_cpu(p->des1),
++                                 le32_to_cpu(p->des2), le32_to_cpu(p->des3));
+                       p++;
+               }
+               seq_printf(seq, "\n");
+diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+index eafc28142cd21..49eaede34eea6 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+@@ -231,7 +231,17 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
+  */
+ static void stmmac_pci_remove(struct pci_dev *pdev)
+ {
++      int i;
++
+       stmmac_dvr_remove(&pdev->dev);
++
++      for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
++              if (pci_resource_len(pdev, i) == 0)
++                      continue;
++              pcim_iounmap_regions(pdev, BIT(i));
++              break;
++      }
++
+       pci_disable_device(pdev);
+ }
+ 
+diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
+index 94b05dd827af6..375b6810bf461 100644
+--- a/drivers/net/team/team.c
++++ b/drivers/net/team/team.c
+@@ -261,17 +261,6 @@ static void __team_option_inst_mark_removed_port(struct 
team *team,
+       }
+ }
+ 
+-static bool __team_option_inst_tmp_find(const struct list_head *opts,
+-                                      const struct team_option_inst *needle)
+-{
+-      struct team_option_inst *opt_inst;
+-
+-      list_for_each_entry(opt_inst, opts, tmp_list)
+-              if (opt_inst == needle)
+-                      return true;
+-      return false;
+-}
+-
+ static int __team_options_register(struct team *team,
+                                  const struct team_option *option,
+                                  size_t option_count)
+@@ -2466,7 +2455,6 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, 
struct genl_info *info)
+       int err = 0;
+       int i;
+       struct nlattr *nl_option;
+-      LIST_HEAD(opt_inst_list);
+ 
+       rtnl_lock();
+ 
+@@ -2486,6 +2474,7 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, 
struct genl_info *info)
+               struct nlattr *opt_attrs[TEAM_ATTR_OPTION_MAX + 1];
+               struct nlattr *attr;
+               struct nlattr *attr_data;
++              LIST_HEAD(opt_inst_list);
+               enum team_option_type opt_type;
+               int opt_port_ifindex = 0; /* != 0 for per-port options */
+               u32 opt_array_index = 0;
+@@ -2589,23 +2578,17 @@ static int team_nl_cmd_options_set(struct sk_buff 
*skb, struct genl_info *info)
+                       if (err)
+                               goto team_put;
+                       opt_inst->changed = true;
+-
+-                      /* dumb/evil user-space can send us duplicate opt,
+-                       * keep only the last one
+-                       */
+-                      if (__team_option_inst_tmp_find(&opt_inst_list,
+-                                                      opt_inst))
+-                              continue;
+-
+                       list_add(&opt_inst->tmp_list, &opt_inst_list);
+               }
+               if (!opt_found) {
+                       err = -ENOENT;
+                       goto team_put;
+               }
+-      }
+ 
+-      err = team_nl_send_event_options_get(team, &opt_inst_list);
++              err = team_nl_send_event_options_get(team, &opt_inst_list);
++              if (err)
++                      break;
++      }
+ 
+ team_put:
+       team_nl_team_put(team);
+diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c
+index 873424ab0e328..bd0e659002161 100644
+--- a/drivers/phy/tegra/xusb.c
++++ b/drivers/phy/tegra/xusb.c
+@@ -418,7 +418,7 @@ tegra_xusb_port_find_lane(struct tegra_xusb_port *port,
+ {
+       struct tegra_xusb_lane *lane, *match = ERR_PTR(-ENODEV);
+ 
+-      for (map = map; map->type; map++) {
++      for (; map->type; map++) {
+               if (port->index != map->port)
+                       continue;
+ 
+diff --git a/drivers/pinctrl/pinctrl-max77620.c 
b/drivers/pinctrl/pinctrl-max77620.c
+index d9ff53e8f715a..a7c4e32d31c36 100644
+--- a/drivers/pinctrl/pinctrl-max77620.c
++++ b/drivers/pinctrl/pinctrl-max77620.c
+@@ -34,14 +34,12 @@ enum max77620_pin_ppdrv {
+       MAX77620_PIN_PP_DRV,
+ };
+ 
+-enum max77620_pinconf_param {
+-      MAX77620_ACTIVE_FPS_SOURCE = PIN_CONFIG_END + 1,
+-      MAX77620_ACTIVE_FPS_POWER_ON_SLOTS,
+-      MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS,
+-      MAX77620_SUSPEND_FPS_SOURCE,
+-      MAX77620_SUSPEND_FPS_POWER_ON_SLOTS,
+-      MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS,
+-};
++#define MAX77620_ACTIVE_FPS_SOURCE            (PIN_CONFIG_END + 1)
++#define MAX77620_ACTIVE_FPS_POWER_ON_SLOTS    (PIN_CONFIG_END + 2)
++#define MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS  (PIN_CONFIG_END + 3)
++#define MAX77620_SUSPEND_FPS_SOURCE           (PIN_CONFIG_END + 4)
++#define MAX77620_SUSPEND_FPS_POWER_ON_SLOTS   (PIN_CONFIG_END + 5)
++#define MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS (PIN_CONFIG_END + 6)
+ 
+ struct max77620_pin_function {
+       const char *name;
+diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c
+index 77128d680e3bc..6f38fa1f468a7 100644
+--- a/drivers/scsi/isci/init.c
++++ b/drivers/scsi/isci/init.c
+@@ -595,6 +595,13 @@ static struct isci_host *isci_host_alloc(struct pci_dev 
*pdev, int id)
+       shost->max_lun = ~0;
+       shost->max_cmd_len = MAX_COMMAND_SIZE;
+ 
++      /* turn on DIF support */
++      scsi_host_set_prot(shost,
++                         SHOST_DIF_TYPE1_PROTECTION |
++                         SHOST_DIF_TYPE2_PROTECTION |
++                         SHOST_DIF_TYPE3_PROTECTION);
++      scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC);
++
+       err = scsi_add_host(shost, &pdev->dev);
+       if (err)
+               goto err_shost;
+@@ -682,13 +689,6 @@ static int isci_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *id)
+                       goto err_host_alloc;
+               }
+               pci_info->hosts[i] = h;
+-
+-              /* turn on DIF support */
+-              scsi_host_set_prot(to_shost(h),
+-                                 SHOST_DIF_TYPE1_PROTECTION |
+-                                 SHOST_DIF_TYPE2_PROTECTION |
+-                                 SHOST_DIF_TYPE3_PROTECTION);
+-              scsi_host_set_guard(to_shost(h), SHOST_DIX_GUARD_CRC);
+       }
+ 
+       err = isci_setup_interrupts(pdev);
+diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
+index d8c03431d0aa8..f9f899ec94270 100644
+--- a/drivers/scsi/qla4xxx/ql4_os.c
++++ b/drivers/scsi/qla4xxx/ql4_os.c
+@@ -7245,6 +7245,8 @@ static int qla4xxx_sysfs_ddb_tgt_create(struct 
scsi_qla_host *ha,
+ 
+       rc = qla4xxx_copy_from_fwddb_param(fnode_sess, fnode_conn,
+                                          fw_ddb_entry);
++      if (rc)
++              goto free_sess;
+ 
+       ql4_printk(KERN_INFO, ha, "%s: sysfs entry %s created\n",
+                  __func__, fnode_sess->dev.kobj.name);
+diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
+index 9ff5219d849e9..411e9df0d40e9 100644
+--- a/fs/ceph/snap.c
++++ b/fs/ceph/snap.c
+@@ -609,7 +609,8 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
+            capsnap->size);
+ 
+       spin_lock(&mdsc->snap_flush_lock);
+-      list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
++      if (list_empty(&ci->i_snap_flush_item))
++              list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
+       spin_unlock(&mdsc->snap_flush_lock);
+       return 1;  /* caller may want to ceph_flush_snaps */
+ }
+diff --git a/fs/proc/base.c b/fs/proc/base.c
+index 79702d405ba72..b9e41832315a6 100644
+--- a/fs/proc/base.c
++++ b/fs/proc/base.c
+@@ -1134,10 +1134,6 @@ static int __set_oom_adj(struct file *file, int 
oom_adj, bool legacy)
+ 
+                       task_lock(p);
+                       if (!p->vfork_done && process_shares_mm(p, mm)) {
+-                              pr_info("updating oom_score_adj for %d (%s) 
from %d to %d because it shares mm with %d (%s). Report if this is 
unexpected.\n",
+-                                              task_pid_nr(p), p->comm,
+-                                              p->signal->oom_score_adj, 
oom_adj,
+-                                              task_pid_nr(task), task->comm);
+                               p->signal->oom_score_adj = oom_adj;
+                               if (!legacy && has_capability_noaudit(current, 
CAP_SYS_RESOURCE))
+                                       p->signal->oom_score_adj_min = 
(short)oom_adj;
+diff --git a/include/keys/user-type.h b/include/keys/user-type.h
+index c56fef40f53ef..5d744ec8f644a 100644
+--- a/include/keys/user-type.h
++++ b/include/keys/user-type.h
+@@ -31,7 +31,7 @@
+ struct user_key_payload {
+       struct rcu_head rcu;            /* RCU destructor */
+       unsigned short  datalen;        /* length of this data */
+-      char            data[0];        /* actual data */
++      char            data[0] __aligned(__alignof__(u64)); /* actual data */
+ };
+ 
+ extern struct key_type key_type_user;
+diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
+index 08398182f56ec..36dc52067377b 100644
+--- a/include/linux/clocksource.h
++++ b/include/linux/clocksource.h
+@@ -117,7 +117,7 @@ struct clocksource {
+ #define CLOCK_SOURCE_RESELECT                 0x100
+ 
+ /* simplify initialization of mask field */
+-#define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : 
-1)
++#define CLOCKSOURCE_MASK(bits) GENMASK_ULL((bits) - 1, 0)
+ 
+ static inline u32 clocksource_freq2mult(u32 freq, u32 shift_constant, u64 
from)
+ {
+diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
+index 22db1e63707ec..05e8b6e4edcb6 100644
+--- a/include/linux/sched/sysctl.h
++++ b/include/linux/sched/sysctl.h
+@@ -33,9 +33,9 @@ extern unsigned int sysctl_numa_balancing_scan_period_max;
+ extern unsigned int sysctl_numa_balancing_scan_size;
+ 
+ #ifdef CONFIG_SCHED_DEBUG
+-extern unsigned int sysctl_sched_migration_cost;
+-extern unsigned int sysctl_sched_nr_migrate;
+-extern unsigned int sysctl_sched_time_avg;
++extern __read_mostly unsigned int sysctl_sched_migration_cost;
++extern __read_mostly unsigned int sysctl_sched_nr_migrate;
++extern __read_mostly unsigned int sysctl_sched_time_avg;
+ extern unsigned int sysctl_sched_shares_window;
+ 
+ int sched_proc_update_handler(struct ctl_table *table, int write,
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index a47339b156ce7..6786c507f1f98 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -3022,13 +3022,14 @@ static void test_cpu_buff_start(struct trace_iterator 
*iter)
+       if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
+               return;
+ 
+-      if (iter->started && cpumask_test_cpu(iter->cpu, iter->started))
++      if (cpumask_available(iter->started) &&
++          cpumask_test_cpu(iter->cpu, iter->started))
+               return;
+ 
+       if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
+               return;
+ 
+-      if (iter->started)
++      if (cpumask_available(iter->started))
+               cpumask_set_cpu(iter->cpu, iter->started);
+ 
+       /* Don't print started cpu buffer for the first entry of the trace */
+diff --git a/mm/mempolicy.c b/mm/mempolicy.c
+index e21d9b44247bc..593b74bed59b8 100644
+--- a/mm/mempolicy.c
++++ b/mm/mempolicy.c
+@@ -1327,7 +1327,7 @@ static int copy_nodes_to_user(unsigned long __user 
*mask, unsigned long maxnode,
+                             nodemask_t *nodes)
+ {
+       unsigned long copy = ALIGN(maxnode-1, 64) / 8;
+-      const int nbytes = BITS_TO_LONGS(MAX_NUMNODES) * sizeof(long);
++      unsigned int nbytes = BITS_TO_LONGS(nr_node_ids) * sizeof(long);
+ 
+       if (copy > nbytes) {
+               if (copy > PAGE_SIZE)
+@@ -1488,7 +1488,7 @@ SYSCALL_DEFINE5(get_mempolicy, int __user *, policy,
+       int uninitialized_var(pval);
+       nodemask_t nodes;
+ 
+-      if (nmask != NULL && maxnode < MAX_NUMNODES)
++      if (nmask != NULL && maxnode < nr_node_ids)
+               return -EINVAL;
+ 
+       err = do_get_mempolicy(&pval, &nodes, addr, flags);
+@@ -1517,7 +1517,7 @@ COMPAT_SYSCALL_DEFINE5(get_mempolicy, int __user *, 
policy,
+       unsigned long nr_bits, alloc_size;
+       DECLARE_BITMAP(bm, MAX_NUMNODES);
+ 
+-      nr_bits = min_t(unsigned long, maxnode-1, MAX_NUMNODES);
++      nr_bits = min_t(unsigned long, maxnode-1, nr_node_ids);
+       alloc_size = ALIGN(nr_bits, BITS_PER_LONG) / 8;
+ 
+       if (nmask)
+diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
+index d3548c48369f0..cf15851a7d2fb 100644
+--- a/mm/zsmalloc.c
++++ b/mm/zsmalloc.c
+@@ -473,7 +473,7 @@ static bool is_zspage_isolated(struct zspage *zspage)
+       return zspage->isolated;
+ }
+ 
+-static int is_first_page(struct page *page)
++static __maybe_unused int is_first_page(struct page *page)
+ {
+       return PagePrivate(page);
+ }
+@@ -558,20 +558,23 @@ static int get_size_class_index(int size)
+       return min(zs_size_classes - 1, idx);
+ }
+ 
++/* type can be of enum type zs_stat_type or fullness_group */
+ static inline void zs_stat_inc(struct size_class *class,
+-                              enum zs_stat_type type, unsigned long cnt)
++                              int type, unsigned long cnt)
+ {
+       class->stats.objs[type] += cnt;
+ }
+ 
++/* type can be of enum type zs_stat_type or fullness_group */
+ static inline void zs_stat_dec(struct size_class *class,
+-                              enum zs_stat_type type, unsigned long cnt)
++                              int type, unsigned long cnt)
+ {
+       class->stats.objs[type] -= cnt;
+ }
+ 
++/* type can be of enum type zs_stat_type or fullness_group */
+ static inline unsigned long zs_stat_get(struct size_class *class,
+-                              enum zs_stat_type type)
++                              int type)
+ {
+       return class->stats.objs[type];
+ }
+diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
+index 835af771a9fd1..a92512a46e91e 100644
+--- a/net/batman-adv/soft-interface.c
++++ b/net/batman-adv/soft-interface.c
+@@ -217,6 +217,8 @@ static int batadv_interface_tx(struct sk_buff *skb,
+ 
+       switch (ntohs(ethhdr->h_proto)) {
+       case ETH_P_8021Q:
++              if (!pskb_may_pull(skb, sizeof(*vhdr)))
++                      goto dropped;
+               vhdr = vlan_eth_hdr(skb);
+ 
+               /* drop batman-in-batman packets to prevent loops */
+diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
+index 4bd57507b9a45..2136e45f52777 100644
+--- a/net/bridge/br_multicast.c
++++ b/net/bridge/br_multicast.c
+@@ -1287,14 +1287,7 @@ static void br_multicast_query_received(struct 
net_bridge *br,
+               return;
+ 
+       br_multicast_update_query_timer(br, query, max_delay);
+-
+-      /* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules,
+-       * the arrival port for IGMP Queries where the source address
+-       * is 0.0.0.0 should not be added to router port list.
+-       */
+-      if ((saddr->proto == htons(ETH_P_IP) && saddr->u.ip4) ||
+-          saddr->proto == htons(ETH_P_IPV6))
+-              br_multicast_mark_router(br, port);
++      br_multicast_mark_router(br, port);
+ }
+ 
+ static int br_ip4_multicast_query(struct net_bridge *br,
+diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
+index 93eb606f76282..7e27cabb04ef9 100644
+--- a/net/ceph/messenger.c
++++ b/net/ceph/messenger.c
+@@ -2042,6 +2042,8 @@ static int process_connect(struct ceph_connection *con)
+       dout("process_connect on %p tag %d\n", con, (int)con->in_tag);
+ 
+       if (con->auth) {
++              int len = le32_to_cpu(con->in_reply.authorizer_len);
++
+               /*
+                * Any connection that defines ->get_authorizer()
+                * should also define ->add_authorizer_challenge() and
+@@ -2051,8 +2053,7 @@ static int process_connect(struct ceph_connection *con)
+                */
+               if (con->in_reply.tag == CEPH_MSGR_TAG_CHALLENGE_AUTHORIZER) {
+                       ret = con->ops->add_authorizer_challenge(
+-                                  con, con->auth->authorizer_reply_buf,
+-                                  le32_to_cpu(con->in_reply.authorizer_len));
++                                  con, con->auth->authorizer_reply_buf, len);
+                       if (ret < 0)
+                               return ret;
+ 
+@@ -2062,10 +2063,12 @@ static int process_connect(struct ceph_connection *con)
+                       return 0;
+               }
+ 
+-              ret = con->ops->verify_authorizer_reply(con);
+-              if (ret < 0) {
+-                      con->error_msg = "bad authorize reply";
+-                      return ret;
++              if (len) {
++                      ret = con->ops->verify_authorizer_reply(con);
++                      if (ret < 0) {
++                              con->error_msg = "bad authorize reply";
++                              return ret;
++                      }
+               }
+       }
+ 
+diff --git a/net/core/netpoll.c b/net/core/netpoll.c
+index 457f882b0f7ba..9b2d61120c0d7 100644
+--- a/net/core/netpoll.c
++++ b/net/core/netpoll.c
+@@ -666,7 +666,7 @@ int netpoll_setup(struct netpoll *np)
+       int err;
+ 
+       rtnl_lock();
+-      if (np->dev_name) {
++      if (np->dev_name[0]) {
+               struct net *net = current->nsproxy->net_ns;
+               ndev = __dev_get_by_name(net, np->dev_name);
+       }
+diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
+index fc7ca1e469081..4381ea53fa91d 100644
+--- a/net/ipv6/sit.c
++++ b/net/ipv6/sit.c
+@@ -540,7 +540,8 @@ static int ipip6_err(struct sk_buff *skb, u32 info)
+       }
+ 
+       err = 0;
+-      if (!ip6_err_gen_icmpv6_unreach(skb, iph->ihl * 4, type, data_len))
++      if (__in6_dev_get(skb->dev) &&
++          !ip6_err_gen_icmpv6_unreach(skb, iph->ihl * 4, type, data_len))
+               goto out;
+ 
+       if (t->parms.iph.daddr == 0)
+diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c
+index f0e6175a9821f..197753ad50b4e 100644
+--- a/net/mac80211/mesh_pathtbl.c
++++ b/net/mac80211/mesh_pathtbl.c
+@@ -449,17 +449,15 @@ struct mesh_path *mesh_path_add(struct 
ieee80211_sub_if_data *sdata,
+ 
+       } while (unlikely(ret == -EEXIST && !mpath));
+ 
+-      if (ret && ret != -EEXIST)
+-              return ERR_PTR(ret);
+-
+-      /* At this point either new_mpath was added, or we found a
+-       * matching entry already in the table; in the latter case
+-       * free the unnecessary new entry.
+-       */
+-      if (ret == -EEXIST) {
++      if (ret) {
+               kfree(new_mpath);
++
++              if (ret != -EEXIST)
++                      return ERR_PTR(ret);
++
+               new_mpath = mpath;
+       }
++
+       sdata->u.mesh.mesh_paths_generation++;
+       return new_mpath;
+ }
+@@ -489,6 +487,9 @@ int mpp_path_add(struct ieee80211_sub_if_data *sdata,
+                                           &new_mpath->rhash,
+                                           mesh_rht_params);
+ 
++      if (ret)
++              kfree(new_mpath);
++
+       sdata->u.mesh.mpp_paths_generation++;
+       return ret;
+ }
+diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
+index a3fb30f5a1a95..2fa1c4f2e94e0 100644
+--- a/net/netfilter/nf_tables_api.c
++++ b/net/netfilter/nf_tables_api.c
+@@ -263,6 +263,9 @@ static int nft_delrule_by_chain(struct nft_ctx *ctx)
+       int err;
+ 
+       list_for_each_entry(rule, &ctx->chain->rules, list) {
++              if (!nft_is_active_next(ctx->net, rule))
++                      continue;
++
+               err = nft_delrule(ctx, rule);
+               if (err < 0)
+                       return err;
+diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
+index 82e222cd48454..14df2fcf61384 100644
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -4316,7 +4316,7 @@ static int packet_set_ring(struct sock *sk, union 
tpacket_req_u *req_u,
+               rb->frames_per_block = req->tp_block_size / req->tp_frame_size;
+               if (unlikely(rb->frames_per_block == 0))
+                       goto out;
+-              if (unlikely(req->tp_block_size > UINT_MAX / req->tp_block_nr))
++              if (unlikely(rb->frames_per_block > UINT_MAX / 
req->tp_block_nr))
+                       goto out;
+               if (unlikely((rb->frames_per_block * req->tp_block_nr) !=
+                                       req->tp_frame_nr))
+diff --git a/net/sctp/offload.c b/net/sctp/offload.c
+index 6300f28c95888..31b9a12fc35a1 100644
+--- a/net/sctp/offload.c
++++ b/net/sctp/offload.c
+@@ -35,6 +35,7 @@
+ static __le32 sctp_gso_make_checksum(struct sk_buff *skb)
+ {
+       skb->ip_summed = CHECKSUM_NONE;
++      gso_reset_checksum(skb, ~0);
+       return sctp_compute_cksum(skb, skb_transport_offset(skb));
+ }
+ 
+diff --git a/security/keys/key.c b/security/keys/key.c
+index 7dc59069e8c76..7276d1a009d49 100644
+--- a/security/keys/key.c
++++ b/security/keys/key.c
+@@ -264,8 +264,8 @@ struct key *key_alloc(struct key_type *type, const char 
*desc,
+ 
+               spin_lock(&user->lock);
+               if (!(flags & KEY_ALLOC_QUOTA_OVERRUN)) {
+-                      if (user->qnkeys + 1 >= maxkeys ||
+-                          user->qnbytes + quotalen >= maxbytes ||
++                      if (user->qnkeys + 1 > maxkeys ||
++                          user->qnbytes + quotalen > maxbytes ||
+                           user->qnbytes + quotalen < user->qnbytes)
+                               goto no_quota;
+               }
+diff --git a/security/keys/keyring.c b/security/keys/keyring.c
+index 4e9b4d23e20ef..7308067dcc5d8 100644
+--- a/security/keys/keyring.c
++++ b/security/keys/keyring.c
+@@ -652,9 +652,6 @@ static bool search_nested_keyrings(struct key *keyring,
+       BUG_ON((ctx->flags & STATE_CHECKS) == 0 ||
+              (ctx->flags & STATE_CHECKS) == STATE_CHECKS);
+ 
+-      if (ctx->index_key.description)
+-              ctx->index_key.desc_len = strlen(ctx->index_key.description);
+-
+       /* Check to see if this top-level keyring is what we are looking for
+        * and whether it is valid or not.
+        */
+@@ -912,6 +909,7 @@ key_ref_t keyring_search(key_ref_t keyring,
+       struct keyring_search_context ctx = {
+               .index_key.type         = type,
+               .index_key.description  = description,
++              .index_key.desc_len     = strlen(description),
+               .cred                   = current_cred(),
+               .match_data.cmp         = key_default_cmp,
+               .match_data.raw_data    = description,
+diff --git a/security/keys/proc.c b/security/keys/proc.c
+index 0361286824638..ec493ddadd111 100644
+--- a/security/keys/proc.c
++++ b/security/keys/proc.c
+@@ -186,8 +186,7 @@ static int proc_keys_show(struct seq_file *m, void *v)
+       int rc;
+ 
+       struct keyring_search_context ctx = {
+-              .index_key.type         = key->type,
+-              .index_key.description  = key->description,
++              .index_key              = key->index_key,
+               .cred                   = current_cred(),
+               .match_data.cmp         = lookup_user_key_possessed,
+               .match_data.raw_data    = key,
+diff --git a/security/keys/request_key.c b/security/keys/request_key.c
+index cb7f8f730c6dd..aa292e01c5621 100644
+--- a/security/keys/request_key.c
++++ b/security/keys/request_key.c
+@@ -544,6 +544,7 @@ struct key *request_key_and_link(struct key_type *type,
+       struct keyring_search_context ctx = {
+               .index_key.type         = type,
+               .index_key.description  = description,
++              .index_key.desc_len     = strlen(description),
+               .cred                   = current_cred(),
+               .match_data.cmp         = key_default_cmp,
+               .match_data.raw_data    = description,
+diff --git a/security/keys/request_key_auth.c 
b/security/keys/request_key_auth.c
+index ba74a0b4d1cb6..f60baeb338e5f 100644
+--- a/security/keys/request_key_auth.c
++++ b/security/keys/request_key_auth.c
+@@ -254,7 +254,7 @@ struct key *key_get_instantiation_authkey(key_serial_t 
target_id)
+       struct key *authkey;
+       key_ref_t authkey_ref;
+ 
+-      sprintf(description, "%x", target_id);
++      ctx.index_key.desc_len = sprintf(description, "%x", target_id);
+ 
+       authkey_ref = search_process_keyrings(&ctx);
+ 

Reply via email to