lkml.org 
[lkml]   [2020]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: Linux 4.14.183
    Date
    diff --git a/Makefile b/Makefile
    index 591582e26a57..aa9d8c79bff0 100644
    --- a/Makefile
    +++ b/Makefile
    @@ -1,7 +1,7 @@
    # SPDX-License-Identifier: GPL-2.0
    VERSION = 4
    PATCHLEVEL = 14
    -SUBLEVEL = 182
    +SUBLEVEL = 183
    EXTRAVERSION =
    NAME = Petit Gorille

    diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
    index e5f2cca86f04..120776d45441 100644
    --- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
    +++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
    @@ -25,7 +25,7 @@

    leds {
    act {
    - gpios = <&gpio 47 GPIO_ACTIVE_HIGH>;
    + gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
    };
    };

    diff --git a/arch/arm/boot/dts/imx6q-b450v3.dts b/arch/arm/boot/dts/imx6q-b450v3.dts
    index 404a93d9596b..dc7d65da7d01 100644
    --- a/arch/arm/boot/dts/imx6q-b450v3.dts
    +++ b/arch/arm/boot/dts/imx6q-b450v3.dts
    @@ -65,13 +65,6 @@
    };
    };

    -&clks {
    - assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
    - <&clks IMX6QDL_CLK_LDB_DI1_SEL>;
    - assigned-clock-parents = <&clks IMX6QDL_CLK_PLL3_USB_OTG>,
    - <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
    -};
    -
    &ldb {
    status = "okay";

    diff --git a/arch/arm/boot/dts/imx6q-b650v3.dts b/arch/arm/boot/dts/imx6q-b650v3.dts
    index 7f9f176901d4..101d61f93070 100644
    --- a/arch/arm/boot/dts/imx6q-b650v3.dts
    +++ b/arch/arm/boot/dts/imx6q-b650v3.dts
    @@ -65,13 +65,6 @@
    };
    };

    -&clks {
    - assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
    - <&clks IMX6QDL_CLK_LDB_DI1_SEL>;
    - assigned-clock-parents = <&clks IMX6QDL_CLK_PLL3_USB_OTG>,
    - <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
    -};
    -
    &ldb {
    status = "okay";

    diff --git a/arch/arm/boot/dts/imx6q-b850v3.dts b/arch/arm/boot/dts/imx6q-b850v3.dts
    index 46bdc6722715..8fc831dc3156 100644
    --- a/arch/arm/boot/dts/imx6q-b850v3.dts
    +++ b/arch/arm/boot/dts/imx6q-b850v3.dts
    @@ -53,17 +53,6 @@
    };
    };

    -&clks {
    - assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
    - <&clks IMX6QDL_CLK_LDB_DI1_SEL>,
    - <&clks IMX6QDL_CLK_IPU1_DI0_PRE_SEL>,
    - <&clks IMX6QDL_CLK_IPU2_DI0_PRE_SEL>;
    - assigned-clock-parents = <&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
    - <&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
    - <&clks IMX6QDL_CLK_PLL2_PFD2_396M>,
    - <&clks IMX6QDL_CLK_PLL2_PFD2_396M>;
    -};
    -
    &ldb {
    fsl,dual-channel;
    status = "okay";
    diff --git a/arch/arm/boot/dts/imx6q-bx50v3.dtsi b/arch/arm/boot/dts/imx6q-bx50v3.dtsi
    index 1015e55ca8f7..f3c2c5587616 100644
    --- a/arch/arm/boot/dts/imx6q-bx50v3.dtsi
    +++ b/arch/arm/boot/dts/imx6q-bx50v3.dtsi
    @@ -92,6 +92,56 @@
    mux-int-port = <1>;
    mux-ext-port = <4>;
    };
    +
    + aliases {
    + mdio-gpio0 = &mdio0;
    + };
    +
    + mdio0: mdio-gpio {
    + compatible = "virtual,mdio-gpio";
    + gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>, /* mdc */
    + <&gpio2 7 GPIO_ACTIVE_HIGH>; /* mdio */
    +
    + #address-cells = <1>;
    + #size-cells = <0>;
    +
    + switch@0 {
    + compatible = "marvell,mv88e6085"; /* 88e6240*/
    + #address-cells = <1>;
    + #size-cells = <0>;
    + reg = <0>;
    +
    + switch_ports: ports {
    + #address-cells = <1>;
    + #size-cells = <0>;
    + };
    +
    + mdio {
    + #address-cells = <1>;
    + #size-cells = <0>;
    +
    + switchphy0: switchphy@0 {
    + reg = <0>;
    + };
    +
    + switchphy1: switchphy@1 {
    + reg = <1>;
    + };
    +
    + switchphy2: switchphy@2 {
    + reg = <2>;
    + };
    +
    + switchphy3: switchphy@3 {
    + reg = <3>;
    + };
    +
    + switchphy4: switchphy@4 {
    + reg = <4>;
    + };
    + };
    + };
    + };
    };

    &ecspi5 {
    @@ -326,3 +376,30 @@
    tcxo-clock-frequency = <26000000>;
    };
    };
    +
    +&pcie {
    + /* Synopsys, Inc. Device */
    + pci_root: root@0,0 {
    + compatible = "pci16c3,abcd";
    + reg = <0x00000000 0 0 0 0>;
    +
    + #address-cells = <3>;
    + #size-cells = <2>;
    + #interrupt-cells = <1>;
    + };
    +};
    +
    +&clks {
    + assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
    + <&clks IMX6QDL_CLK_LDB_DI1_SEL>,
    + <&clks IMX6QDL_CLK_IPU1_DI0_PRE_SEL>,
    + <&clks IMX6QDL_CLK_IPU1_DI1_PRE_SEL>,
    + <&clks IMX6QDL_CLK_IPU2_DI0_PRE_SEL>,
    + <&clks IMX6QDL_CLK_IPU2_DI1_PRE_SEL>;
    + assigned-clock-parents = <&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
    + <&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>,
    + <&clks IMX6QDL_CLK_PLL2_PFD0_352M>,
    + <&clks IMX6QDL_CLK_PLL2_PFD0_352M>,
    + <&clks IMX6QDL_CLK_PLL2_PFD0_352M>,
    + <&clks IMX6QDL_CLK_PLL2_PFD0_352M>;
    +};
    diff --git a/arch/arm/boot/dts/rk3228-evb.dts b/arch/arm/boot/dts/rk3228-evb.dts
    index 1be9daacc4f9..b69c842d8306 100644
    --- a/arch/arm/boot/dts/rk3228-evb.dts
    +++ b/arch/arm/boot/dts/rk3228-evb.dts
    @@ -84,7 +84,7 @@
    #address-cells = <1>;
    #size-cells = <0>;

    - phy: phy@0 {
    + phy: ethernet-phy@0 {
    compatible = "ethernet-phy-id1234.d400", "ethernet-phy-ieee802.3-c22";
    reg = <0>;
    clocks = <&cru SCLK_MAC_PHY>;
    diff --git a/arch/arm/boot/dts/rk322x.dtsi b/arch/arm/boot/dts/rk322x.dtsi
    index f59f7cc62be6..0c60dbc4b46a 100644
    --- a/arch/arm/boot/dts/rk322x.dtsi
    +++ b/arch/arm/boot/dts/rk322x.dtsi
    @@ -950,7 +950,7 @@
    };
    };

    - spi-0 {
    + spi0 {
    spi0_clk: spi0-clk {
    rockchip,pins = <0 9 RK_FUNC_2 &pcfg_pull_up>;
    };
    @@ -968,7 +968,7 @@
    };
    };

    - spi-1 {
    + spi1 {
    spi1_clk: spi1-clk {
    rockchip,pins = <0 23 RK_FUNC_2 &pcfg_pull_up>;
    };
    diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
    index 88286dd483ff..1935b580f0e8 100644
    --- a/arch/arm/include/asm/assembler.h
    +++ b/arch/arm/include/asm/assembler.h
    @@ -21,11 +21,11 @@
    #endif

    #include <asm/ptrace.h>
    -#include <asm/domain.h>
    #include <asm/opcodes-virt.h>
    #include <asm/asm-offsets.h>
    #include <asm/page.h>
    #include <asm/thread_info.h>
    +#include <asm/uaccess-asm.h>

    #define IOMEM(x) (x)

    @@ -374,9 +374,9 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
    .macro usraccoff, instr, reg, ptr, inc, off, cond, abort, t=TUSER()
    9999:
    .if \inc == 1
    - \instr\cond\()b\()\t\().w \reg, [\ptr, #\off]
    + \instr\()b\t\cond\().w \reg, [\ptr, #\off]
    .elseif \inc == 4
    - \instr\cond\()\t\().w \reg, [\ptr, #\off]
    + \instr\t\cond\().w \reg, [\ptr, #\off]
    .else
    .error "Unsupported inc macro argument"
    .endif
    @@ -415,9 +415,9 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
    .rept \rept
    9999:
    .if \inc == 1
    - \instr\cond\()b\()\t \reg, [\ptr], #\inc
    + \instr\()b\t\cond \reg, [\ptr], #\inc
    .elseif \inc == 4
    - \instr\cond\()\t \reg, [\ptr], #\inc
    + \instr\t\cond \reg, [\ptr], #\inc
    .else
    .error "Unsupported inc macro argument"
    .endif
    @@ -447,79 +447,6 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
    .size \name , . - \name
    .endm

    - .macro csdb
    -#ifdef CONFIG_THUMB2_KERNEL
    - .inst.w 0xf3af8014
    -#else
    - .inst 0xe320f014
    -#endif
    - .endm
    -
    - .macro check_uaccess, addr:req, size:req, limit:req, tmp:req, bad:req
    -#ifndef CONFIG_CPU_USE_DOMAINS
    - adds \tmp, \addr, #\size - 1
    - sbcccs \tmp, \tmp, \limit
    - bcs \bad
    -#ifdef CONFIG_CPU_SPECTRE
    - movcs \addr, #0
    - csdb
    -#endif
    -#endif
    - .endm
    -
    - .macro uaccess_mask_range_ptr, addr:req, size:req, limit:req, tmp:req
    -#ifdef CONFIG_CPU_SPECTRE
    - sub \tmp, \limit, #1
    - subs \tmp, \tmp, \addr @ tmp = limit - 1 - addr
    - addhs \tmp, \tmp, #1 @ if (tmp >= 0) {
    - subhss \tmp, \tmp, \size @ tmp = limit - (addr + size) }
    - movlo \addr, #0 @ if (tmp < 0) addr = NULL
    - csdb
    -#endif
    - .endm
    -
    - .macro uaccess_disable, tmp, isb=1
    -#ifdef CONFIG_CPU_SW_DOMAIN_PAN
    - /*
    - * Whenever we re-enter userspace, the domains should always be
    - * set appropriately.
    - */
    - mov \tmp, #DACR_UACCESS_DISABLE
    - mcr p15, 0, \tmp, c3, c0, 0 @ Set domain register
    - .if \isb
    - instr_sync
    - .endif
    -#endif
    - .endm
    -
    - .macro uaccess_enable, tmp, isb=1
    -#ifdef CONFIG_CPU_SW_DOMAIN_PAN
    - /*
    - * Whenever we re-enter userspace, the domains should always be
    - * set appropriately.
    - */
    - mov \tmp, #DACR_UACCESS_ENABLE
    - mcr p15, 0, \tmp, c3, c0, 0
    - .if \isb
    - instr_sync
    - .endif
    -#endif
    - .endm
    -
    - .macro uaccess_save, tmp
    -#ifdef CONFIG_CPU_SW_DOMAIN_PAN
    - mrc p15, 0, \tmp, c3, c0, 0
    - str \tmp, [sp, #SVC_DACR]
    -#endif
    - .endm
    -
    - .macro uaccess_restore
    -#ifdef CONFIG_CPU_SW_DOMAIN_PAN
    - ldr r0, [sp, #SVC_DACR]
    - mcr p15, 0, r0, c3, c0, 0
    -#endif
    - .endm
    -
    .irp c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo
    .macro ret\c, reg
    #if __LINUX_ARM_ARCH__ < 6
    diff --git a/arch/arm/include/asm/uaccess-asm.h b/arch/arm/include/asm/uaccess-asm.h
    new file mode 100644
    index 000000000000..907571fd05c6
    --- /dev/null
    +++ b/arch/arm/include/asm/uaccess-asm.h
    @@ -0,0 +1,117 @@
    +/* SPDX-License-Identifier: GPL-2.0-only */
    +
    +#ifndef __ASM_UACCESS_ASM_H__
    +#define __ASM_UACCESS_ASM_H__
    +
    +#include <asm/asm-offsets.h>
    +#include <asm/domain.h>
    +#include <asm/memory.h>
    +#include <asm/thread_info.h>
    +
    + .macro csdb
    +#ifdef CONFIG_THUMB2_KERNEL
    + .inst.w 0xf3af8014
    +#else
    + .inst 0xe320f014
    +#endif
    + .endm
    +
    + .macro check_uaccess, addr:req, size:req, limit:req, tmp:req, bad:req
    +#ifndef CONFIG_CPU_USE_DOMAINS
    + adds \tmp, \addr, #\size - 1
    + sbcscc \tmp, \tmp, \limit
    + bcs \bad
    +#ifdef CONFIG_CPU_SPECTRE
    + movcs \addr, #0
    + csdb
    +#endif
    +#endif
    + .endm
    +
    + .macro uaccess_mask_range_ptr, addr:req, size:req, limit:req, tmp:req
    +#ifdef CONFIG_CPU_SPECTRE
    + sub \tmp, \limit, #1
    + subs \tmp, \tmp, \addr @ tmp = limit - 1 - addr
    + addhs \tmp, \tmp, #1 @ if (tmp >= 0) {
    + subshs \tmp, \tmp, \size @ tmp = limit - (addr + size) }
    + movlo \addr, #0 @ if (tmp < 0) addr = NULL
    + csdb
    +#endif
    + .endm
    +
    + .macro uaccess_disable, tmp, isb=1
    +#ifdef CONFIG_CPU_SW_DOMAIN_PAN
    + /*
    + * Whenever we re-enter userspace, the domains should always be
    + * set appropriately.
    + */
    + mov \tmp, #DACR_UACCESS_DISABLE
    + mcr p15, 0, \tmp, c3, c0, 0 @ Set domain register
    + .if \isb
    + instr_sync
    + .endif
    +#endif
    + .endm
    +
    + .macro uaccess_enable, tmp, isb=1
    +#ifdef CONFIG_CPU_SW_DOMAIN_PAN
    + /*
    + * Whenever we re-enter userspace, the domains should always be
    + * set appropriately.
    + */
    + mov \tmp, #DACR_UACCESS_ENABLE
    + mcr p15, 0, \tmp, c3, c0, 0
    + .if \isb
    + instr_sync
    + .endif
    +#endif
    + .endm
    +
    +#if defined(CONFIG_CPU_SW_DOMAIN_PAN) || defined(CONFIG_CPU_USE_DOMAINS)
    +#define DACR(x...) x
    +#else
    +#define DACR(x...)
    +#endif
    +
    + /*
    + * Save the address limit on entry to a privileged exception.
    + *
    + * If we are using the DACR for kernel access by the user accessors
    + * (CONFIG_CPU_USE_DOMAINS=y), always reset the DACR kernel domain
    + * back to client mode, whether or not \disable is set.
    + *
    + * If we are using SW PAN, set the DACR user domain to no access
    + * if \disable is set.
    + */
    + .macro uaccess_entry, tsk, tmp0, tmp1, tmp2, disable
    + ldr \tmp1, [\tsk, #TI_ADDR_LIMIT]
    + mov \tmp2, #TASK_SIZE
    + str \tmp2, [\tsk, #TI_ADDR_LIMIT]
    + DACR( mrc p15, 0, \tmp0, c3, c0, 0)
    + DACR( str \tmp0, [sp, #SVC_DACR])
    + str \tmp1, [sp, #SVC_ADDR_LIMIT]
    + .if \disable && IS_ENABLED(CONFIG_CPU_SW_DOMAIN_PAN)
    + /* kernel=client, user=no access */
    + mov \tmp2, #DACR_UACCESS_DISABLE
    + mcr p15, 0, \tmp2, c3, c0, 0
    + instr_sync
    + .elseif IS_ENABLED(CONFIG_CPU_USE_DOMAINS)
    + /* kernel=client */
    + bic \tmp2, \tmp0, #domain_mask(DOMAIN_KERNEL)
    + orr \tmp2, \tmp2, #domain_val(DOMAIN_KERNEL, DOMAIN_CLIENT)
    + mcr p15, 0, \tmp2, c3, c0, 0
    + instr_sync
    + .endif
    + .endm
    +
    + /* Restore the user access state previously saved by uaccess_entry */
    + .macro uaccess_exit, tsk, tmp0, tmp1
    + ldr \tmp1, [sp, #SVC_ADDR_LIMIT]
    + DACR( ldr \tmp0, [sp, #SVC_DACR])
    + str \tmp1, [\tsk, #TI_ADDR_LIMIT]
    + DACR( mcr p15, 0, \tmp0, c3, c0, 0)
    + .endm
    +
    +#undef DACR
    +
    +#endif /* __ASM_UACCESS_ASM_H__ */
    diff --git a/arch/arm/include/asm/vfpmacros.h b/arch/arm/include/asm/vfpmacros.h
    index ef5dfedacd8d..628c336e8e3b 100644
    --- a/arch/arm/include/asm/vfpmacros.h
    +++ b/arch/arm/include/asm/vfpmacros.h
    @@ -29,13 +29,13 @@
    ldr \tmp, =elf_hwcap @ may not have MVFR regs
    ldr \tmp, [\tmp, #0]
    tst \tmp, #HWCAP_VFPD32
    - ldcnel p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
    + ldclne p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
    addeq \base, \base, #32*4 @ step over unused register space
    #else
    VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
    and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
    cmp \tmp, #2 @ 32 x 64bit registers?
    - ldceql p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
    + ldcleq p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
    addne \base, \base, #32*4 @ step over unused register space
    #endif
    #endif
    @@ -53,13 +53,13 @@
    ldr \tmp, =elf_hwcap @ may not have MVFR regs
    ldr \tmp, [\tmp, #0]
    tst \tmp, #HWCAP_VFPD32
    - stcnel p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
    + stclne p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
    addeq \base, \base, #32*4 @ step over unused register space
    #else
    VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
    and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
    cmp \tmp, #2 @ 32 x 64bit registers?
    - stceql p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
    + stcleq p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
    addne \base, \base, #32*4 @ step over unused register space
    #endif
    #endif
    diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
    index fbc707626b3e..f3de76f7ad43 100644
    --- a/arch/arm/kernel/entry-armv.S
    +++ b/arch/arm/kernel/entry-armv.S
    @@ -30,6 +30,7 @@
    #include <asm/unistd.h>
    #include <asm/tls.h>
    #include <asm/system_info.h>
    +#include <asm/uaccess-asm.h>

    #include "entry-header.S"
    #include <asm/entry-macro-multi.S>
    @@ -186,15 +187,7 @@ ENDPROC(__und_invalid)
    stmia r7, {r2 - r6}

    get_thread_info tsk
    - ldr r0, [tsk, #TI_ADDR_LIMIT]
    - mov r1, #TASK_SIZE
    - str r1, [tsk, #TI_ADDR_LIMIT]
    - str r0, [sp, #SVC_ADDR_LIMIT]
    -
    - uaccess_save r0
    - .if \uaccess
    - uaccess_disable r0
    - .endif
    + uaccess_entry tsk, r0, r1, r2, \uaccess

    .if \trace
    #ifdef CONFIG_TRACE_IRQFLAGS
    diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
    index 62db1c9746cb..7b595f2d4a28 100644
    --- a/arch/arm/kernel/entry-header.S
    +++ b/arch/arm/kernel/entry-header.S
    @@ -6,6 +6,7 @@
    #include <asm/asm-offsets.h>
    #include <asm/errno.h>
    #include <asm/thread_info.h>
    +#include <asm/uaccess-asm.h>
    #include <asm/v7m.h>

    @ Bad Abort numbers
    @@ -217,9 +218,7 @@
    blne trace_hardirqs_off
    #endif
    .endif
    - ldr r1, [sp, #SVC_ADDR_LIMIT]
    - uaccess_restore
    - str r1, [tsk, #TI_ADDR_LIMIT]
    + uaccess_exit tsk, r0, r1

    #ifndef CONFIG_THUMB2_KERNEL
    @ ARM mode SVC restore
    @@ -263,9 +262,7 @@
    @ on the stack remains correct).
    @
    .macro svc_exit_via_fiq
    - ldr r1, [sp, #SVC_ADDR_LIMIT]
    - uaccess_restore
    - str r1, [tsk, #TI_ADDR_LIMIT]
    + uaccess_exit tsk, r0, r1
    #ifndef CONFIG_THUMB2_KERNEL
    @ ARM mode restore
    mov r0, sp
    diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h
    index 93cddab73072..95bd35991288 100644
    --- a/arch/arm/lib/bitops.h
    +++ b/arch/arm/lib/bitops.h
    @@ -7,7 +7,7 @@
    ENTRY( \name )
    UNWIND( .fnstart )
    ands ip, r1, #3
    - strneb r1, [ip] @ assert word-aligned
    + strbne r1, [ip] @ assert word-aligned
    mov r2, #1
    and r3, r0, #31 @ Get bit offset
    mov r0, r0, lsr #5
    @@ -32,7 +32,7 @@ ENDPROC(\name )
    ENTRY( \name )
    UNWIND( .fnstart )
    ands ip, r1, #3
    - strneb r1, [ip] @ assert word-aligned
    + strbne r1, [ip] @ assert word-aligned
    mov r2, #1
    and r3, r0, #31 @ Get bit offset
    mov r0, r0, lsr #5
    @@ -62,7 +62,7 @@ ENDPROC(\name )
    ENTRY( \name )
    UNWIND( .fnstart )
    ands ip, r1, #3
    - strneb r1, [ip] @ assert word-aligned
    + strbne r1, [ip] @ assert word-aligned
    and r2, r0, #31
    mov r0, r0, lsr #5
    mov r3, #1
    @@ -89,7 +89,7 @@ ENDPROC(\name )
    ENTRY( \name )
    UNWIND( .fnstart )
    ands ip, r1, #3
    - strneb r1, [ip] @ assert word-aligned
    + strbne r1, [ip] @ assert word-aligned
    and r3, r0, #31
    mov r0, r0, lsr #5
    save_and_disable_irqs ip
    diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
    index ff8df7fd44a7..b63d9653ff55 100644
    --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
    +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
    @@ -1691,10 +1691,10 @@
    gpu: gpu@ff9a0000 {
    compatible = "rockchip,rk3399-mali", "arm,mali-t860";
    reg = <0x0 0xff9a0000 0x0 0x10000>;
    - interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH 0>,
    - <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH 0>,
    - <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH 0>;
    - interrupt-names = "gpu", "job", "mmu";
    + interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH 0>,
    + <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH 0>,
    + <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH 0>;
    + interrupt-names = "job", "mmu", "gpu";
    clocks = <&cru ACLK_GPU>;
    power-domains = <&power RK3399_PD_GPU>;
    status = "disabled";
    diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
    index cc700f7dda54..8be075f81ce6 100644
    --- a/arch/parisc/mm/init.c
    +++ b/arch/parisc/mm/init.c
    @@ -608,7 +608,7 @@ void __init mem_init(void)
    > BITS_PER_LONG);

    high_memory = __va((max_pfn << PAGE_SHIFT));
    - set_max_mapnr(page_to_pfn(virt_to_page(high_memory - 1)) + 1);
    + set_max_mapnr(max_low_pfn);
    free_all_bootmem();

    #ifdef CONFIG_PA11
    diff --git a/arch/x86/include/asm/dma.h b/arch/x86/include/asm/dma.h
    index 00f7cf45e699..8e95aa4b0d17 100644
    --- a/arch/x86/include/asm/dma.h
    +++ b/arch/x86/include/asm/dma.h
    @@ -74,7 +74,7 @@
    #define MAX_DMA_PFN ((16UL * 1024 * 1024) >> PAGE_SHIFT)

    /* 4GB broken PCI/AGP hardware bus master zone */
    -#define MAX_DMA32_PFN ((4UL * 1024 * 1024 * 1024) >> PAGE_SHIFT)
    +#define MAX_DMA32_PFN (1UL << (32 - PAGE_SHIFT))

    #ifdef CONFIG_X86_32
    /* The maximum address that we can perform a DMA transfer to on this platform */
    diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
    index 87a57b7642d3..61c2fb8b1f8e 100644
    --- a/arch/x86/kernel/fpu/xstate.c
    +++ b/arch/x86/kernel/fpu/xstate.c
    @@ -964,18 +964,31 @@ static inline bool xfeatures_mxcsr_quirk(u64 xfeatures)
    return true;
    }

    -/*
    - * This is similar to user_regset_copyout(), but will not add offset to
    - * the source data pointer or increment pos, count, kbuf, and ubuf.
    - */
    -static inline void
    -__copy_xstate_to_kernel(void *kbuf, const void *data,
    - unsigned int offset, unsigned int size, unsigned int size_total)
    +static void fill_gap(unsigned to, void **kbuf, unsigned *pos, unsigned *count)
    {
    - if (offset < size_total) {
    - unsigned int copy = min(size, size_total - offset);
    + if (*pos < to) {
    + unsigned size = to - *pos;
    +
    + if (size > *count)
    + size = *count;
    + memcpy(*kbuf, (void *)&init_fpstate.xsave + *pos, size);
    + *kbuf += size;
    + *pos += size;
    + *count -= size;
    + }
    +}

    - memcpy(kbuf + offset, data, copy);
    +static void copy_part(unsigned offset, unsigned size, void *from,
    + void **kbuf, unsigned *pos, unsigned *count)
    +{
    + fill_gap(offset, kbuf, pos, count);
    + if (size > *count)
    + size = *count;
    + if (size) {
    + memcpy(*kbuf, from, size);
    + *kbuf += size;
    + *pos += size;
    + *count -= size;
    }
    }

    @@ -988,8 +1001,9 @@ __copy_xstate_to_kernel(void *kbuf, const void *data,
    */
    int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int offset_start, unsigned int size_total)
    {
    - unsigned int offset, size;
    struct xstate_header header;
    + const unsigned off_mxcsr = offsetof(struct fxregs_state, mxcsr);
    + unsigned count = size_total;
    int i;

    /*
    @@ -1005,46 +1019,42 @@ int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int of
    header.xfeatures = xsave->header.xfeatures;
    header.xfeatures &= ~XFEATURE_MASK_SUPERVISOR;

    + if (header.xfeatures & XFEATURE_MASK_FP)
    + copy_part(0, off_mxcsr,
    + &xsave->i387, &kbuf, &offset_start, &count);
    + if (header.xfeatures & (XFEATURE_MASK_SSE | XFEATURE_MASK_YMM))
    + copy_part(off_mxcsr, MXCSR_AND_FLAGS_SIZE,
    + &xsave->i387.mxcsr, &kbuf, &offset_start, &count);
    + if (header.xfeatures & XFEATURE_MASK_FP)
    + copy_part(offsetof(struct fxregs_state, st_space), 128,
    + &xsave->i387.st_space, &kbuf, &offset_start, &count);
    + if (header.xfeatures & XFEATURE_MASK_SSE)
    + copy_part(xstate_offsets[XFEATURE_MASK_SSE], 256,
    + &xsave->i387.xmm_space, &kbuf, &offset_start, &count);
    + /*
    + * Fill xsave->i387.sw_reserved value for ptrace frame:
    + */
    + copy_part(offsetof(struct fxregs_state, sw_reserved), 48,
    + xstate_fx_sw_bytes, &kbuf, &offset_start, &count);
    /*
    * Copy xregs_state->header:
    */
    - offset = offsetof(struct xregs_state, header);
    - size = sizeof(header);
    -
    - __copy_xstate_to_kernel(kbuf, &header, offset, size, size_total);
    + copy_part(offsetof(struct xregs_state, header), sizeof(header),
    + &header, &kbuf, &offset_start, &count);

    - for (i = 0; i < XFEATURE_MAX; i++) {
    + for (i = FIRST_EXTENDED_XFEATURE; i < XFEATURE_MAX; i++) {
    /*
    * Copy only in-use xstates:
    */
    if ((header.xfeatures >> i) & 1) {
    void *src = __raw_xsave_addr(xsave, 1 << i);

    - offset = xstate_offsets[i];
    - size = xstate_sizes[i];
    -
    - /* The next component has to fit fully into the output buffer: */
    - if (offset + size > size_total)
    - break;
    -
    - __copy_xstate_to_kernel(kbuf, src, offset, size, size_total);
    + copy_part(xstate_offsets[i], xstate_sizes[i],
    + src, &kbuf, &offset_start, &count);
    }

    }
    -
    - if (xfeatures_mxcsr_quirk(header.xfeatures)) {
    - offset = offsetof(struct fxregs_state, mxcsr);
    - size = MXCSR_AND_FLAGS_SIZE;
    - __copy_xstate_to_kernel(kbuf, &xsave->i387.mxcsr, offset, size, size_total);
    - }
    -
    - /*
    - * Fill xsave->i387.sw_reserved value for ptrace frame:
    - */
    - offset = offsetof(struct fxregs_state, sw_reserved);
    - size = sizeof(xstate_fx_sw_bytes);
    -
    - __copy_xstate_to_kernel(kbuf, xstate_fx_sw_bytes, offset, size, size_total);
    + fill_gap(size_total, &kbuf, &offset_start, &count);

    return 0;
    }
    diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
    index c139dedec12b..133b9b25e7c5 100644
    --- a/arch/x86/kvm/vmx.c
    +++ b/arch/x86/kvm/vmx.c
    @@ -9280,15 +9280,16 @@ static void vmx_set_virtual_apic_mode(struct kvm_vcpu *vcpu)
    if (!lapic_in_kernel(vcpu))
    return;

    + if (!flexpriority_enabled &&
    + !cpu_has_vmx_virtualize_x2apic_mode())
    + return;
    +
    /* Postpone execution until vmcs01 is the current VMCS. */
    if (is_guest_mode(vcpu)) {
    to_vmx(vcpu)->nested.change_vmcs01_virtual_apic_mode = true;
    return;
    }

    - if (!cpu_need_tpr_shadow(vcpu))
    - return;
    -
    sec_exec_control = vmcs_read32(SECONDARY_VM_EXEC_CONTROL);
    sec_exec_control &= ~(SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
    SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE);
    diff --git a/drivers/gpio/gpio-exar.c b/drivers/gpio/gpio-exar.c
    index a09d2f9ebacc..695c19901eff 100644
    --- a/drivers/gpio/gpio-exar.c
    +++ b/drivers/gpio/gpio-exar.c
    @@ -148,8 +148,10 @@ static int gpio_exar_probe(struct platform_device *pdev)
    mutex_init(&exar_gpio->lock);

    index = ida_simple_get(&ida_index, 0, 0, GFP_KERNEL);
    - if (index < 0)
    - goto err_destroy;
    + if (index < 0) {
    + ret = index;
    + goto err_mutex_destroy;
    + }

    sprintf(exar_gpio->name, "exar_gpio%d", index);
    exar_gpio->gpio_chip.label = exar_gpio->name;
    @@ -176,6 +178,7 @@ static int gpio_exar_probe(struct platform_device *pdev)

    err_destroy:
    ida_simple_remove(&ida_index, index);
    +err_mutex_destroy:
    mutex_destroy(&exar_gpio->lock);
    return ret;
    }
    diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
    index 1eb857e2f62f..dd801f5d5253 100644
    --- a/drivers/gpio/gpio-tegra.c
    +++ b/drivers/gpio/gpio-tegra.c
    @@ -356,6 +356,7 @@ static void tegra_gpio_irq_shutdown(struct irq_data *d)
    struct tegra_gpio_info *tgi = bank->tgi;
    unsigned int gpio = d->hwirq;

    + tegra_gpio_irq_mask(d);
    gpiochip_unlock_as_irq(&tgi->gc, gpio);
    }

    diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c
    index d831f3e61ae8..2626205780ee 100644
    --- a/drivers/infiniband/hw/qib/qib_sysfs.c
    +++ b/drivers/infiniband/hw/qib/qib_sysfs.c
    @@ -756,7 +756,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num,
    qib_dev_err(dd,
    "Skipping linkcontrol sysfs info, (err %d) port %u\n",
    ret, port_num);
    - goto bail;
    + goto bail_link;
    }
    kobject_uevent(&ppd->pport_kobj, KOBJ_ADD);

    @@ -766,7 +766,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num,
    qib_dev_err(dd,
    "Skipping sl2vl sysfs info, (err %d) port %u\n",
    ret, port_num);
    - goto bail_link;
    + goto bail_sl;
    }
    kobject_uevent(&ppd->sl2vl_kobj, KOBJ_ADD);

    @@ -776,7 +776,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num,
    qib_dev_err(dd,
    "Skipping diag_counters sysfs info, (err %d) port %u\n",
    ret, port_num);
    - goto bail_sl;
    + goto bail_diagc;
    }
    kobject_uevent(&ppd->diagc_kobj, KOBJ_ADD);

    @@ -789,7 +789,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num,
    qib_dev_err(dd,
    "Skipping Congestion Control sysfs info, (err %d) port %u\n",
    ret, port_num);
    - goto bail_diagc;
    + goto bail_cc;
    }

    kobject_uevent(&ppd->pport_cc_kobj, KOBJ_ADD);
    @@ -871,6 +871,7 @@ void qib_verbs_unregister_sysfs(struct qib_devdata *dd)
    &cc_table_bin_attr);
    kobject_put(&ppd->pport_cc_kobj);
    }
    + kobject_put(&ppd->diagc_kobj);
    kobject_put(&ppd->sl2vl_kobj);
    kobject_put(&ppd->pport_kobj);
    }
    diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
    index d549c9ffadcb..867303235f57 100644
    --- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
    +++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
    @@ -774,7 +774,7 @@ static int pvrdma_pci_probe(struct pci_dev *pdev,
    !(pci_resource_flags(pdev, 1) & IORESOURCE_MEM)) {
    dev_err(&pdev->dev, "PCI BAR region not MMIO\n");
    ret = -ENOMEM;
    - goto err_free_device;
    + goto err_disable_pdev;
    }

    ret = pci_request_regions(pdev, DRV_NAME);
    diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
    index 925571475005..2463d02e3f99 100644
    --- a/drivers/input/evdev.c
    +++ b/drivers/input/evdev.c
    @@ -342,20 +342,6 @@ static int evdev_fasync(int fd, struct file *file, int on)
    return fasync_helper(fd, file, on, &client->fasync);
    }

    -static int evdev_flush(struct file *file, fl_owner_t id)
    -{
    - struct evdev_client *client = file->private_data;
    - struct evdev *evdev = client->evdev;
    -
    - mutex_lock(&evdev->mutex);
    -
    - if (evdev->exist && !client->revoked)
    - input_flush_device(&evdev->handle, file);
    -
    - mutex_unlock(&evdev->mutex);
    - return 0;
    -}
    -
    static void evdev_free(struct device *dev)
    {
    struct evdev *evdev = container_of(dev, struct evdev, dev);
    @@ -469,6 +455,10 @@ static int evdev_release(struct inode *inode, struct file *file)
    unsigned int i;

    mutex_lock(&evdev->mutex);
    +
    + if (evdev->exist && !client->revoked)
    + input_flush_device(&evdev->handle, file);
    +
    evdev_ungrab(evdev, client);
    mutex_unlock(&evdev->mutex);

    @@ -1331,7 +1321,6 @@ static const struct file_operations evdev_fops = {
    .compat_ioctl = evdev_ioctl_compat,
    #endif
    .fasync = evdev_fasync,
    - .flush = evdev_flush,
    .llseek = no_llseek,
    };

    diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
    index 26476a64e663..54a6691d7d87 100644
    --- a/drivers/input/joystick/xpad.c
    +++ b/drivers/input/joystick/xpad.c
    @@ -475,6 +475,16 @@ static const u8 xboxone_fw2015_init[] = {
    0x05, 0x20, 0x00, 0x01, 0x00
    };

    +/*
    + * This packet is required for Xbox One S (0x045e:0x02ea)
    + * and Xbox One Elite Series 2 (0x045e:0x0b00) pads to
    + * initialize the controller that was previously used in
    + * Bluetooth mode.
    + */
    +static const u8 xboxone_s_init[] = {
    + 0x05, 0x20, 0x00, 0x0f, 0x06
    +};
    +
    /*
    * This packet is required for the Titanfall 2 Xbox One pads
    * (0x0e6f:0x0165) to finish initialization and for Hori pads
    @@ -533,6 +543,8 @@ static const struct xboxone_init_packet xboxone_init_packets[] = {
    XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init),
    XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init),
    XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init),
    + XBOXONE_INIT_PKT(0x045e, 0x02ea, xboxone_s_init),
    + XBOXONE_INIT_PKT(0x045e, 0x0b00, xboxone_s_init),
    XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init1),
    XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init2),
    XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
    diff --git a/drivers/input/keyboard/dlink-dir685-touchkeys.c b/drivers/input/keyboard/dlink-dir685-touchkeys.c
    index 88e321b76397..6fe4062e3ac2 100644
    --- a/drivers/input/keyboard/dlink-dir685-touchkeys.c
    +++ b/drivers/input/keyboard/dlink-dir685-touchkeys.c
    @@ -142,7 +142,7 @@ MODULE_DEVICE_TABLE(of, dir685_tk_of_match);

    static struct i2c_driver dir685_tk_i2c_driver = {
    .driver = {
    - .name = "dlin-dir685-touchkeys",
    + .name = "dlink-dir685-touchkeys",
    .of_match_table = of_match_ptr(dir685_tk_of_match),
    },
    .probe = dir685_tk_probe,
    diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
    index 997ccae7ee05..30a8d816c45c 100644
    --- a/drivers/input/rmi4/rmi_driver.c
    +++ b/drivers/input/rmi4/rmi_driver.c
    @@ -232,7 +232,7 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id)

    if (count) {
    kfree(attn_data.data);
    - attn_data.data = NULL;
    + drvdata->attn_data.data = NULL;
    }

    if (!kfifo_is_empty(&drvdata->attn_fifo))
    @@ -1220,7 +1220,8 @@ static int rmi_driver_probe(struct device *dev)
    if (data->input) {
    rmi_driver_set_input_name(rmi_dev, data->input);
    if (!rmi_dev->xport->input) {
    - if (input_register_device(data->input)) {
    + retval = input_register_device(data->input);
    + if (retval) {
    dev_err(dev, "%s: Failed to register input device.\n",
    __func__);
    goto err_destroy_functions;
    diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
    index 0d0f977a2f39..c4201d1da239 100644
    --- a/drivers/input/serio/i8042-x86ia64io.h
    +++ b/drivers/input/serio/i8042-x86ia64io.h
    @@ -666,6 +666,13 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
    DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"),
    },
    },
    + {
    + /* Lenovo ThinkPad Twist S230u */
    + .matches = {
    + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
    + DMI_MATCH(DMI_PRODUCT_NAME, "33474HU"),
    + },
    + },
    { }
    };

    diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
    index 2c41107240de..499402a975b3 100644
    --- a/drivers/input/touchscreen/usbtouchscreen.c
    +++ b/drivers/input/touchscreen/usbtouchscreen.c
    @@ -197,6 +197,7 @@ static const struct usb_device_id usbtouch_devices[] = {
    #endif

    #ifdef CONFIG_TOUCHSCREEN_USB_IRTOUCH
    + {USB_DEVICE(0x255e, 0x0001), .driver_info = DEVTYPE_IRTOUCH},
    {USB_DEVICE(0x595a, 0x0001), .driver_info = DEVTYPE_IRTOUCH},
    {USB_DEVICE(0x6615, 0x0001), .driver_info = DEVTYPE_IRTOUCH},
    {USB_DEVICE(0x6615, 0x0012), .driver_info = DEVTYPE_IRTOUCH_HIRES},
    diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
    index 2c48a9d6d91e..e0a6ae6a5796 100644
    --- a/drivers/iommu/iommu.c
    +++ b/drivers/iommu/iommu.c
    @@ -359,7 +359,7 @@ struct iommu_group *iommu_group_alloc(void)
    NULL, "%d", group->id);
    if (ret) {
    ida_simple_remove(&iommu_group_ida, group->id);
    - kfree(group);
    + kobject_put(&group->kobj);
    return ERR_PTR(ret);
    }

    diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
    index 916b88ee2de4..cbb72b460755 100644
    --- a/drivers/mmc/core/block.c
    +++ b/drivers/mmc/core/block.c
    @@ -2333,8 +2333,8 @@ static int mmc_rpmb_chrdev_release(struct inode *inode, struct file *filp)
    struct mmc_rpmb_data *rpmb = container_of(inode->i_cdev,
    struct mmc_rpmb_data, chrdev);

    - put_device(&rpmb->dev);
    mmc_blk_put(rpmb->md);
    + put_device(&rpmb->dev);

    return 0;
    }
    diff --git a/drivers/net/bonding/bond_sysfs_slave.c b/drivers/net/bonding/bond_sysfs_slave.c
    index 641a532b67cb..3f756fa2f603 100644
    --- a/drivers/net/bonding/bond_sysfs_slave.c
    +++ b/drivers/net/bonding/bond_sysfs_slave.c
    @@ -153,8 +153,10 @@ int bond_sysfs_slave_add(struct slave *slave)

    err = kobject_init_and_add(&slave->kobj, &slave_ktype,
    &(slave->dev->dev.kobj), "bonding_slave");
    - if (err)
    + if (err) {
    + kobject_put(&slave->kobj);
    return err;
    + }

    for (a = slave_attrs; *a; ++a) {
    err = sysfs_create_file(&slave->kobj, &((*a)->attr));
    diff --git a/drivers/net/ethernet/freescale/Kconfig b/drivers/net/ethernet/freescale/Kconfig
    index 6e490fd2345d..71f0640200bc 100644
    --- a/drivers/net/ethernet/freescale/Kconfig
    +++ b/drivers/net/ethernet/freescale/Kconfig
    @@ -76,6 +76,7 @@ config UCC_GETH
    depends on QUICC_ENGINE
    select FSL_PQ_MDIO
    select PHYLIB
    + select FIXED_PHY
    ---help---
    This driver supports the Gigabit Ethernet mode of the QUICC Engine,
    which is available on some Freescale SOCs.
    @@ -89,6 +90,7 @@ config GIANFAR
    depends on HAS_DMA
    select FSL_PQ_MDIO
    select PHYLIB
    + select FIXED_PHY
    select CRC32
    ---help---
    This driver supports the Gigabit TSEC on the MPC83xx, MPC85xx,
    diff --git a/drivers/net/ethernet/freescale/dpaa/Kconfig b/drivers/net/ethernet/freescale/dpaa/Kconfig
    index a654736237a9..8fec41e57178 100644
    --- a/drivers/net/ethernet/freescale/dpaa/Kconfig
    +++ b/drivers/net/ethernet/freescale/dpaa/Kconfig
    @@ -2,6 +2,7 @@ menuconfig FSL_DPAA_ETH
    tristate "DPAA Ethernet"
    depends on FSL_DPAA && FSL_FMAN
    select PHYLIB
    + select FIXED_PHY
    select FSL_FMAN_MAC
    ---help---
    Data Path Acceleration Architecture Ethernet driver,
    diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
    index 7d0f3cd8a002..9e1e2d5b80dc 100644
    --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
    +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
    @@ -2770,7 +2770,7 @@ static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port)
    struct hns_mac_cb *mac_cb;
    u8 addr[ETH_ALEN] = {0};
    u8 port_num;
    - u16 mskid;
    + int mskid;

    /* promisc use vague table match with vlanid = 0 & macaddr = 0 */
    hns_dsaf_set_mac_key(dsaf_dev, &mac_key, 0x00, port, addr);
    @@ -3142,6 +3142,9 @@ int hns_dsaf_roce_reset(struct fwnode_handle *dsaf_fwnode, bool dereset)
    dsaf_set_bit(credit, DSAF_SBM_ROCEE_CFG_CRD_EN_B, 1);
    dsaf_write_dev(dsaf_dev, DSAF_SBM_ROCEE_CFG_REG_REG, credit);
    }
    +
    + put_device(&pdev->dev);
    +
    return 0;
    }
    EXPORT_SYMBOL(hns_dsaf_roce_reset);
    diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c
    index 7440c769b30f..8aecc4f4f123 100644
    --- a/drivers/net/ethernet/mellanox/mlx4/fw.c
    +++ b/drivers/net/ethernet/mellanox/mlx4/fw.c
    @@ -2715,7 +2715,7 @@ void mlx4_opreq_action(struct work_struct *work)
    if (err) {
    mlx4_err(dev, "Failed to retrieve required operation: %d\n",
    err);
    - return;
    + goto out;
    }
    MLX4_GET(modifier, outbox, GET_OP_REQ_MODIFIER_OFFSET);
    MLX4_GET(token, outbox, GET_OP_REQ_TOKEN_OFFSET);
    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
    index 950ea980808b..6ae9a1987371 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
    @@ -804,6 +804,7 @@ static void cmd_work_handler(struct work_struct *work)
    int alloc_ret;
    int cmd_mode;

    + complete(&ent->handling);
    sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;
    down(sem);
    if (!ent->page_queue) {
    @@ -922,6 +923,11 @@ static int wait_func(struct mlx5_core_dev *dev, struct mlx5_cmd_work_ent *ent)
    struct mlx5_cmd *cmd = &dev->cmd;
    int err;

    + if (!wait_for_completion_timeout(&ent->handling, timeout) &&
    + cancel_work_sync(&ent->work)) {
    + ent->ret = -ECANCELED;
    + goto out_err;
    + }
    if (cmd->mode == CMD_MODE_POLLING || ent->polling) {
    wait_for_completion(&ent->done);
    } else if (!wait_for_completion_timeout(&ent->done, timeout)) {
    @@ -929,12 +935,17 @@ static int wait_func(struct mlx5_core_dev *dev, struct mlx5_cmd_work_ent *ent)
    mlx5_cmd_comp_handler(dev, 1UL << ent->idx, true);
    }

    +out_err:
    err = ent->ret;

    if (err == -ETIMEDOUT) {
    mlx5_core_warn(dev, "%s(0x%x) timeout. Will cause a leak of a command resource\n",
    mlx5_command_str(msg_to_opcode(ent->in)),
    msg_to_opcode(ent->in));
    + } else if (err == -ECANCELED) {
    + mlx5_core_warn(dev, "%s(0x%x) canceled on out of queue timeout.\n",
    + mlx5_command_str(msg_to_opcode(ent->in)),
    + msg_to_opcode(ent->in));
    }
    mlx5_core_dbg(dev, "err %d, delivery status %s(%d)\n",
    err, deliv_status_to_str(ent->status), ent->status);
    @@ -970,6 +981,7 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
    ent->token = token;
    ent->polling = force_polling;

    + init_completion(&ent->handling);
    if (!callback)
    init_completion(&ent->done);

    @@ -989,6 +1001,8 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
    err = wait_func(dev, ent);
    if (err == -ETIMEDOUT)
    goto out;
    + if (err == -ECANCELED)
    + goto out_free;

    ds = ent->ts2 - ent->ts1;
    op = MLX5_GET(mbox_in, in->first.data, opcode);
    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
    index d560047c0bf9..abdb444c6ed0 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
    @@ -496,8 +496,9 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget)
    void mlx5e_free_txqsq_descs(struct mlx5e_txqsq *sq)
    {
    struct mlx5e_tx_wqe_info *wi;
    + u32 nbytes = 0;
    + u16 ci, npkts = 0;
    struct sk_buff *skb;
    - u16 ci;
    int i;

    while (sq->cc != sq->pc) {
    @@ -518,8 +519,11 @@ void mlx5e_free_txqsq_descs(struct mlx5e_txqsq *sq)
    }

    dev_kfree_skb_any(skb);
    + npkts++;
    + nbytes += wi->num_bytes;
    sq->cc += wi->num_wqebbs;
    }
    + netdev_tx_completed_queue(sq->txq, npkts, nbytes);
    }

    #ifdef CONFIG_MLX5_CORE_IPOIB
    diff --git a/drivers/net/ethernet/microchip/encx24j600.c b/drivers/net/ethernet/microchip/encx24j600.c
    index f831238d9793..84b6ad76f5bc 100644
    --- a/drivers/net/ethernet/microchip/encx24j600.c
    +++ b/drivers/net/ethernet/microchip/encx24j600.c
    @@ -1075,7 +1075,7 @@ static int encx24j600_spi_probe(struct spi_device *spi)
    if (unlikely(ret)) {
    netif_err(priv, probe, ndev, "Error %d initializing card encx24j600 card\n",
    ret);
    - goto out_free;
    + goto out_stop;
    }

    eidled = encx24j600_read_reg(priv, EIDLED);
    @@ -1093,6 +1093,8 @@ static int encx24j600_spi_probe(struct spi_device *spi)

    out_unregister:
    unregister_netdev(priv->ndev);
    +out_stop:
    + kthread_stop(priv->kworker_task);
    out_free:
    free_netdev(ndev);

    @@ -1105,6 +1107,7 @@ static int encx24j600_spi_remove(struct spi_device *spi)
    struct encx24j600_priv *priv = dev_get_drvdata(&spi->dev);

    unregister_netdev(priv->ndev);
    + kthread_stop(priv->kworker_task);

    free_netdev(priv->ndev);

    diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
    index 1fc84d8f891b..aae81226a0a4 100644
    --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
    +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
    @@ -3650,7 +3650,7 @@ int qlcnic_83xx_interrupt_test(struct net_device *netdev)
    ahw->diag_cnt = 0;
    ret = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_INTRPT_TEST);
    if (ret)
    - goto fail_diag_irq;
    + goto fail_mbx_args;

    if (adapter->flags & QLCNIC_MSIX_ENABLED)
    intrpt_id = ahw->intr_tbl[0].id;
    @@ -3680,6 +3680,8 @@ int qlcnic_83xx_interrupt_test(struct net_device *netdev)

    done:
    qlcnic_free_mbx_args(&cmd);
    +
    +fail_mbx_args:
    qlcnic_83xx_diag_free_res(netdev, drv_sds_rings);

    fail_diag_irq:
    diff --git a/drivers/net/ethernet/sun/cassini.c b/drivers/net/ethernet/sun/cassini.c
    index 382993c1561c..7e5c0f182770 100644
    --- a/drivers/net/ethernet/sun/cassini.c
    +++ b/drivers/net/ethernet/sun/cassini.c
    @@ -4983,7 +4983,7 @@ static int cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
    cas_cacheline_size)) {
    dev_err(&pdev->dev, "Could not set PCI cache "
    "line size\n");
    - goto err_write_cacheline;
    + goto err_out_free_res;
    }
    }
    #endif
    @@ -5158,7 +5158,6 @@ static int cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
    err_out_free_res:
    pci_release_regions(pdev);

    -err_write_cacheline:
    /* Try to restore it in case the error occurred after we
    * set it.
    */
    diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
    index 6c7a169d906a..f3def96d35d4 100644
    --- a/drivers/net/usb/cdc_ether.c
    +++ b/drivers/net/usb/cdc_ether.c
    @@ -821,14 +821,21 @@ static const struct usb_device_id products[] = {
    .driver_info = 0,
    },

    -/* Microsoft Surface 3 dock (based on Realtek RTL8153) */
    +/* Microsoft Surface Ethernet Adapter (based on Realtek RTL8153) */
    {
    USB_DEVICE_AND_INTERFACE_INFO(MICROSOFT_VENDOR_ID, 0x07c6, USB_CLASS_COMM,
    USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
    .driver_info = 0,
    },

    - /* TP-LINK UE300 USB 3.0 Ethernet Adapters (based on Realtek RTL8153) */
    +/* Microsoft Surface Ethernet Adapter (based on Realtek RTL8153B) */
    +{
    + USB_DEVICE_AND_INTERFACE_INFO(MICROSOFT_VENDOR_ID, 0x0927, USB_CLASS_COMM,
    + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
    + .driver_info = 0,
    +},
    +
    +/* TP-LINK UE300 USB 3.0 Ethernet Adapters (based on Realtek RTL8153) */
    {
    USB_DEVICE_AND_INTERFACE_INFO(TPLINK_VENDOR_ID, 0x0601, USB_CLASS_COMM,
    USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
    diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
    index cadf5ded45a9..e30792380812 100644
    --- a/drivers/net/usb/r8152.c
    +++ b/drivers/net/usb/r8152.c
    @@ -5329,6 +5329,7 @@ static const struct usb_device_id rtl8152_table[] = {
    {REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8153)},
    {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07ab)},
    {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07c6)},
    + {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0927)},
    {REALTEK_USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101)},
    {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x304f)},
    {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3062)},
    diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
    index 94d1bcc83fa2..119238faf1ac 100644
    --- a/drivers/s390/scsi/zfcp_fsf.c
    +++ b/drivers/s390/scsi/zfcp_fsf.c
    @@ -1594,6 +1594,7 @@ int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port)
    {
    struct zfcp_qdio *qdio = wka_port->adapter->qdio;
    struct zfcp_fsf_req *req;
    + unsigned long req_id = 0;
    int retval = -EIO;

    spin_lock_irq(&qdio->req_q_lock);
    @@ -1616,6 +1617,8 @@ int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port)
    hton24(req->qtcb->bottom.support.d_id, wka_port->d_id);
    req->data = wka_port;

    + req_id = req->req_id;
    +
    zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
    retval = zfcp_fsf_req_send(req);
    if (retval)
    @@ -1623,7 +1626,7 @@ int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port)
    out:
    spin_unlock_irq(&qdio->req_q_lock);
    if (!retval)
    - zfcp_dbf_rec_run_wka("fsowp_1", wka_port, req->req_id);
    + zfcp_dbf_rec_run_wka("fsowp_1", wka_port, req_id);
    return retval;
    }

    @@ -1649,6 +1652,7 @@ int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port)
    {
    struct zfcp_qdio *qdio = wka_port->adapter->qdio;
    struct zfcp_fsf_req *req;
    + unsigned long req_id = 0;
    int retval = -EIO;

    spin_lock_irq(&qdio->req_q_lock);
    @@ -1671,6 +1675,8 @@ int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port)
    req->data = wka_port;
    req->qtcb->header.port_handle = wka_port->handle;

    + req_id = req->req_id;
    +
    zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
    retval = zfcp_fsf_req_send(req);
    if (retval)
    @@ -1678,7 +1684,7 @@ int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port)
    out:
    spin_unlock_irq(&qdio->req_q_lock);
    if (!retval)
    - zfcp_dbf_rec_run_wka("fscwp_1", wka_port, req->req_id);
    + zfcp_dbf_rec_run_wka("fscwp_1", wka_port, req_id);
    return retval;
    }

    diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c
    index c1655aba131f..590acca60134 100644
    --- a/drivers/tty/serial/sc16is7xx.c
    +++ b/drivers/tty/serial/sc16is7xx.c
    @@ -1524,10 +1524,12 @@ static int __init sc16is7xx_init(void)
    #endif
    return ret;

    +#ifdef CONFIG_SERIAL_SC16IS7XX_SPI
    err_spi:
    #ifdef CONFIG_SERIAL_SC16IS7XX_I2C
    i2c_del_driver(&sc16is7xx_i2c_uart_driver);
    #endif
    +#endif
    err_i2c:
    uart_unregister_driver(&sc16is7xx_uart);
    return ret;
    diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
    index 5c28bee327e1..e431a8bc3a9d 100644
    --- a/drivers/usb/gadget/legacy/inode.c
    +++ b/drivers/usb/gadget/legacy/inode.c
    @@ -1364,7 +1364,6 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)

    req->buf = dev->rbuf;
    req->context = NULL;
    - value = -EOPNOTSUPP;
    switch (ctrl->bRequest) {

    case USB_REQ_GET_DESCRIPTOR:
    @@ -1788,7 +1787,7 @@ static ssize_t
    dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
    {
    struct dev_data *dev = fd->private_data;
    - ssize_t value = len, length = len;
    + ssize_t value, length = len;
    unsigned total;
    u32 tag;
    char *kbuf;
    diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
    index 166846a40078..2c433c95adb5 100644
    --- a/fs/binfmt_elf.c
    +++ b/fs/binfmt_elf.c
    @@ -1740,7 +1740,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
    (!regset->active || regset->active(t->task, regset) > 0)) {
    int ret;
    size_t size = regset->n * regset->size;
    - void *data = kmalloc(size, GFP_KERNEL);
    + void *data = kzalloc(size, GFP_KERNEL);
    if (unlikely(!data))
    return 0;
    ret = regset->get(t->task, regset,
    diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c
    index 5e9176ec0d3a..c073a0f680fd 100644
    --- a/fs/cachefiles/rdwr.c
    +++ b/fs/cachefiles/rdwr.c
    @@ -64,9 +64,9 @@ static int cachefiles_read_waiter(wait_queue_entry_t *wait, unsigned mode,
    object = container_of(op->op.object, struct cachefiles_object, fscache);
    spin_lock(&object->work_lock);
    list_add_tail(&monitor->op_link, &op->to_do);
    + fscache_enqueue_retrieval(op);
    spin_unlock(&object->work_lock);

    - fscache_enqueue_retrieval(op);
    fscache_put_retrieval(op);
    return 0;
    }
    diff --git a/fs/cifs/file.c b/fs/cifs/file.c
    index 662977b8d6ae..72e7cbfb325a 100644
    --- a/fs/cifs/file.c
    +++ b/fs/cifs/file.c
    @@ -3496,7 +3496,7 @@ cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset)
    * than it negotiated since it will refuse the read
    * then.
    */
    - if ((tcon->ses) && !(tcon->ses->capabilities &
    + if (!(tcon->ses->capabilities &
    tcon->ses->server->vals->cap_large_files)) {
    current_read_size = min_t(uint,
    current_read_size, CIFSMaxBufSize);
    diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
    index e700fb162664..a833e2e07167 100644
    --- a/fs/gfs2/quota.c
    +++ b/fs/gfs2/quota.c
    @@ -1039,8 +1039,7 @@ int gfs2_quota_lock(struct gfs2_inode *ip, kuid_t uid, kgid_t gid)
    u32 x;
    int error = 0;

    - if (capable(CAP_SYS_RESOURCE) ||
    - sdp->sd_args.ar_quota != GFS2_QUOTA_ON)
    + if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON)
    return 0;

    error = gfs2_quota_hold(ip, uid, gid);
    diff --git a/fs/gfs2/quota.h b/fs/gfs2/quota.h
    index 836f29480be6..e3a6e2404d11 100644
    --- a/fs/gfs2/quota.h
    +++ b/fs/gfs2/quota.h
    @@ -47,7 +47,8 @@ static inline int gfs2_quota_lock_check(struct gfs2_inode *ip,
    int ret;

    ap->allowed = UINT_MAX; /* Assume we are permitted a whole lot */
    - if (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF)
    + if (capable(CAP_SYS_RESOURCE) ||
    + sdp->sd_args.ar_quota == GFS2_QUOTA_OFF)
    return 0;
    ret = gfs2_quota_lock(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE);
    if (ret)
    diff --git a/include/asm-generic/topology.h b/include/asm-generic/topology.h
    index 5d2add1a6c96..864fcfa1df41 100644
    --- a/include/asm-generic/topology.h
    +++ b/include/asm-generic/topology.h
    @@ -51,7 +51,7 @@
    #ifdef CONFIG_NEED_MULTIPLE_NODES
    #define cpumask_of_node(node) ((node) == 0 ? cpu_online_mask : cpu_none_mask)
    #else
    - #define cpumask_of_node(node) ((void)node, cpu_online_mask)
    + #define cpumask_of_node(node) ((void)(node), cpu_online_mask)
    #endif
    #endif
    #ifndef pcibus_to_node
    diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
    index 32d445315128..983cd796cbb3 100644
    --- a/include/linux/mlx5/driver.h
    +++ b/include/linux/mlx5/driver.h
    @@ -841,6 +841,7 @@ struct mlx5_cmd_work_ent {
    struct delayed_work cb_timeout_work;
    void *context;
    int idx;
    + struct completion handling;
    struct completion done;
    struct mlx5_cmd *cmd;
    struct work_struct work;
    diff --git a/include/linux/mm.h b/include/linux/mm.h
    index 858ce84ac7c5..6f852d5fbada 100644
    --- a/include/linux/mm.h
    +++ b/include/linux/mm.h
    @@ -549,6 +549,11 @@ static inline void *kvmalloc_array(size_t n, size_t size, gfp_t flags)

    extern void kvfree(const void *addr);

    +/*
    + * Mapcount of compound page as a whole, does not include mapped sub-pages.
    + *
    + * Must be called only for compound pages or any their tail sub-pages.
    + */
    static inline int compound_mapcount(struct page *page)
    {
    VM_BUG_ON_PAGE(!PageCompound(page), page);
    @@ -568,10 +573,16 @@ static inline void page_mapcount_reset(struct page *page)

    int __page_mapcount(struct page *page);

    +/*
    + * Mapcount of 0-order page; when compound sub-page, includes
    + * compound_mapcount().
    + *
    + * Result is undefined for pages which cannot be mapped into userspace.
    + * For example SLAB or special types of pages. See function page_has_type().
    + * They use this place in struct page differently.
    + */
    static inline int page_mapcount(struct page *page)
    {
    - VM_BUG_ON_PAGE(PageSlab(page), page);
    -
    if (unlikely(PageCompound(page)))
    return __page_mapcount(page);
    return atomic_read(&page->_mapcount) + 1;
    diff --git a/include/linux/netfilter/nf_conntrack_pptp.h b/include/linux/netfilter/nf_conntrack_pptp.h
    index 833a5b2255ea..ade993809ebc 100644
    --- a/include/linux/netfilter/nf_conntrack_pptp.h
    +++ b/include/linux/netfilter/nf_conntrack_pptp.h
    @@ -5,7 +5,7 @@

    #include <linux/netfilter/nf_conntrack_common.h>

    -extern const char *const pptp_msg_name[];
    +const char *pptp_msg_name(u_int16_t msg);

    /* state of the control session */
    enum pptp_ctrlsess_state {
    diff --git a/include/net/act_api.h b/include/net/act_api.h
    index 775387d6ca95..ff268bb0c60f 100644
    --- a/include/net/act_api.h
    +++ b/include/net/act_api.h
    @@ -69,7 +69,8 @@ static inline void tcf_tm_dump(struct tcf_t *dtm, const struct tcf_t *stm)
    {
    dtm->install = jiffies_to_clock_t(jiffies - stm->install);
    dtm->lastuse = jiffies_to_clock_t(jiffies - stm->lastuse);
    - dtm->firstuse = jiffies_to_clock_t(jiffies - stm->firstuse);
    + dtm->firstuse = stm->firstuse ?
    + jiffies_to_clock_t(jiffies - stm->firstuse) : 0;
    dtm->expires = jiffies_to_clock_t(stm->expires);
    }

    diff --git a/include/uapi/linux/xfrm.h b/include/uapi/linux/xfrm.h
    index e3af2859188b..0b636432cdf3 100644
    --- a/include/uapi/linux/xfrm.h
    +++ b/include/uapi/linux/xfrm.h
    @@ -304,7 +304,7 @@ enum xfrm_attr_type_t {
    XFRMA_PROTO, /* __u8 */
    XFRMA_ADDRESS_FILTER, /* struct xfrm_address_filter */
    XFRMA_PAD,
    - XFRMA_OFFLOAD_DEV, /* struct xfrm_state_offload */
    + XFRMA_OFFLOAD_DEV, /* struct xfrm_user_offload */
    XFRMA_OUTPUT_MARK, /* __u32 */
    __XFRMA_MAX

    diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c
    index 86ae0eb80b53..8b8cecd18cce 100644
    --- a/kernel/irq/migration.c
    +++ b/kernel/irq/migration.c
    @@ -38,17 +38,18 @@ bool irq_fixup_move_pending(struct irq_desc *desc, bool force_clear)
    void irq_move_masked_irq(struct irq_data *idata)
    {
    struct irq_desc *desc = irq_data_to_desc(idata);
    - struct irq_chip *chip = desc->irq_data.chip;
    + struct irq_data *data = &desc->irq_data;
    + struct irq_chip *chip = data->chip;

    - if (likely(!irqd_is_setaffinity_pending(&desc->irq_data)))
    + if (likely(!irqd_is_setaffinity_pending(data)))
    return;

    - irqd_clr_move_pending(&desc->irq_data);
    + irqd_clr_move_pending(data);

    /*
    * Paranoia: cpu-local interrupts shouldn't be calling in here anyway.
    */
    - if (irqd_is_per_cpu(&desc->irq_data)) {
    + if (irqd_is_per_cpu(data)) {
    WARN_ON(1);
    return;
    }
    @@ -73,9 +74,20 @@ void irq_move_masked_irq(struct irq_data *idata)
    * For correct operation this depends on the caller
    * masking the irqs.
    */
    - if (cpumask_any_and(desc->pending_mask, cpu_online_mask) < nr_cpu_ids)
    - irq_do_set_affinity(&desc->irq_data, desc->pending_mask, false);
    -
    + if (cpumask_any_and(desc->pending_mask, cpu_online_mask) < nr_cpu_ids) {
    + int ret;
    +
    + ret = irq_do_set_affinity(data, desc->pending_mask, false);
    + /*
    + * If the there is a cleanup pending in the underlying
    + * vector management, reschedule the move for the next
    + * interrupt. Leave desc->pending_mask intact.
    + */
    + if (ret == -EBUSY) {
    + irqd_set_move_pending(data);
    + return;
    + }
    + }
    cpumask_clear(desc->pending_mask);
    }

    diff --git a/mm/vmalloc.c b/mm/vmalloc.c
    index 63bf3f207e16..e8c64dddfecd 100644
    --- a/mm/vmalloc.c
    +++ b/mm/vmalloc.c
    @@ -1524,7 +1524,7 @@ static void __vunmap(const void *addr, int deallocate_pages)
    addr))
    return;

    - area = find_vmap_area((unsigned long)addr)->vm;
    + area = find_vm_area(addr);
    if (unlikely(!area)) {
    WARN(1, KERN_ERR "Trying to vfree() nonexistent vm area (%p)\n",
    addr);
    diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
    index 63fa6ea2341e..89d074ce10fc 100644
    --- a/net/ax25/af_ax25.c
    +++ b/net/ax25/af_ax25.c
    @@ -639,8 +639,10 @@ static int ax25_setsockopt(struct socket *sock, int level, int optname,
    break;

    case SO_BINDTODEVICE:
    - if (optlen > IFNAMSIZ)
    - optlen = IFNAMSIZ;
    + if (optlen > IFNAMSIZ - 1)
    + optlen = IFNAMSIZ - 1;
    +
    + memset(devname, 0, sizeof(devname));

    if (copy_from_user(devname, optval, optlen)) {
    res = -EFAULT;
    diff --git a/net/bridge/netfilter/nft_reject_bridge.c b/net/bridge/netfilter/nft_reject_bridge.c
    index b09ec869c913..0ab7688bb724 100644
    --- a/net/bridge/netfilter/nft_reject_bridge.c
    +++ b/net/bridge/netfilter/nft_reject_bridge.c
    @@ -34,6 +34,12 @@ static void nft_reject_br_push_etherhdr(struct sk_buff *oldskb,
    ether_addr_copy(eth->h_dest, eth_hdr(oldskb)->h_source);
    eth->h_proto = eth_hdr(oldskb)->h_proto;
    skb_pull(nskb, ETH_HLEN);
    +
    + if (skb_vlan_tag_present(oldskb)) {
    + u16 vid = skb_vlan_tag_get(oldskb);
    +
    + __vlan_hwaccel_put_tag(nskb, oldskb->vlan_proto, vid);
    + }
    }

    static int nft_bridge_iphdr_validate(struct sk_buff *skb)
    diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
    index 92b2641ab93b..753cbfd32dab 100644
    --- a/net/ceph/osd_client.c
    +++ b/net/ceph/osd_client.c
    @@ -3444,7 +3444,9 @@ static void handle_reply(struct ceph_osd *osd, struct ceph_msg *msg)
    * supported.
    */
    req->r_t.target_oloc.pool = m.redirect.oloc.pool;
    - req->r_flags |= CEPH_OSD_FLAG_REDIRECTED;
    + req->r_flags |= CEPH_OSD_FLAG_REDIRECTED |
    + CEPH_OSD_FLAG_IGNORE_OVERLAY |
    + CEPH_OSD_FLAG_IGNORE_CACHE;
    req->r_tid = 0;
    __submit_request(req, false);
    goto out_unlock_osdc;
    diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
    index c1693d75e196..33a85269a9f2 100644
    --- a/net/ipv4/ip_vti.c
    +++ b/net/ipv4/ip_vti.c
    @@ -50,7 +50,7 @@ static unsigned int vti_net_id __read_mostly;
    static int vti_tunnel_init(struct net_device *dev);

    static int vti_input(struct sk_buff *skb, int nexthdr, __be32 spi,
    - int encap_type)
    + int encap_type, bool update_skb_dev)
    {
    struct ip_tunnel *tunnel;
    const struct iphdr *iph = ip_hdr(skb);
    @@ -65,6 +65,9 @@ static int vti_input(struct sk_buff *skb, int nexthdr, __be32 spi,

    XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4 = tunnel;

    + if (update_skb_dev)
    + skb->dev = tunnel->dev;
    +
    return xfrm_input(skb, nexthdr, spi, encap_type);
    }

    @@ -74,25 +77,43 @@ static int vti_input(struct sk_buff *skb, int nexthdr, __be32 spi,
    return 0;
    }

    -static int vti_input_ipip(struct sk_buff *skb, int nexthdr, __be32 spi,
    - int encap_type)
    +static int vti_input_proto(struct sk_buff *skb, int nexthdr, __be32 spi,
    + int encap_type)
    {
    - struct ip_tunnel *tunnel;
    + return vti_input(skb, nexthdr, spi, encap_type, false);
    +}
    +
    +static int vti_rcv(struct sk_buff *skb, __be32 spi, bool update_skb_dev)
    +{
    + XFRM_SPI_SKB_CB(skb)->family = AF_INET;
    + XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr);
    +
    + return vti_input(skb, ip_hdr(skb)->protocol, spi, 0, update_skb_dev);
    +}
    +
    +static int vti_rcv_proto(struct sk_buff *skb)
    +{
    + return vti_rcv(skb, 0, false);
    +}
    +
    +static int vti_rcv_tunnel(struct sk_buff *skb)
    +{
    + struct ip_tunnel_net *itn = net_generic(dev_net(skb->dev), vti_net_id);
    const struct iphdr *iph = ip_hdr(skb);
    - struct net *net = dev_net(skb->dev);
    - struct ip_tunnel_net *itn = net_generic(net, vti_net_id);
    + struct ip_tunnel *tunnel;

    tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, TUNNEL_NO_KEY,
    iph->saddr, iph->daddr, 0);
    if (tunnel) {
    + struct tnl_ptk_info tpi = {
    + .proto = htons(ETH_P_IP),
    + };
    +
    if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
    goto drop;
    -
    - XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4 = tunnel;
    -
    - skb->dev = tunnel->dev;
    -
    - return xfrm_input(skb, nexthdr, spi, encap_type);
    + if (iptunnel_pull_header(skb, 0, tpi.proto, false))
    + goto drop;
    + return ip_tunnel_rcv(tunnel, skb, &tpi, NULL, false);
    }

    return -EINVAL;
    @@ -101,22 +122,6 @@ static int vti_input_ipip(struct sk_buff *skb, int nexthdr, __be32 spi,
    return 0;
    }

    -static int vti_rcv(struct sk_buff *skb)
    -{
    - XFRM_SPI_SKB_CB(skb)->family = AF_INET;
    - XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr);
    -
    - return vti_input(skb, ip_hdr(skb)->protocol, 0, 0);
    -}
    -
    -static int vti_rcv_ipip(struct sk_buff *skb)
    -{
    - XFRM_SPI_SKB_CB(skb)->family = AF_INET;
    - XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr);
    -
    - return vti_input_ipip(skb, ip_hdr(skb)->protocol, ip_hdr(skb)->saddr, 0);
    -}
    -
    static int vti_rcv_cb(struct sk_buff *skb, int err)
    {
    unsigned short family;
    @@ -482,31 +487,31 @@ static void __net_init vti_fb_tunnel_init(struct net_device *dev)
    }

    static struct xfrm4_protocol vti_esp4_protocol __read_mostly = {
    - .handler = vti_rcv,
    - .input_handler = vti_input,
    + .handler = vti_rcv_proto,
    + .input_handler = vti_input_proto,
    .cb_handler = vti_rcv_cb,
    .err_handler = vti4_err,
    .priority = 100,
    };

    static struct xfrm4_protocol vti_ah4_protocol __read_mostly = {
    - .handler = vti_rcv,
    - .input_handler = vti_input,
    + .handler = vti_rcv_proto,
    + .input_handler = vti_input_proto,
    .cb_handler = vti_rcv_cb,
    .err_handler = vti4_err,
    .priority = 100,
    };

    static struct xfrm4_protocol vti_ipcomp4_protocol __read_mostly = {
    - .handler = vti_rcv,
    - .input_handler = vti_input,
    + .handler = vti_rcv_proto,
    + .input_handler = vti_input_proto,
    .cb_handler = vti_rcv_cb,
    .err_handler = vti4_err,
    .priority = 100,
    };

    static struct xfrm_tunnel ipip_handler __read_mostly = {
    - .handler = vti_rcv_ipip,
    + .handler = vti_rcv_tunnel,
    .err_handler = vti4_err,
    .priority = 0,
    };
    diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
    index cdd627355ed1..df610245d21a 100644
    --- a/net/ipv4/ipip.c
    +++ b/net/ipv4/ipip.c
    @@ -702,7 +702,7 @@ static int __init ipip_init(void)

    rtnl_link_failed:
    #if IS_ENABLED(CONFIG_MPLS)
    - xfrm4_tunnel_deregister(&mplsip_handler, AF_INET);
    + xfrm4_tunnel_deregister(&mplsip_handler, AF_MPLS);
    xfrm_tunnel_mplsip_failed:

    #endif
    diff --git a/net/ipv4/netfilter/nf_nat_pptp.c b/net/ipv4/netfilter/nf_nat_pptp.c
    index 8a69363b4884..c66103de86bd 100644
    --- a/net/ipv4/netfilter/nf_nat_pptp.c
    +++ b/net/ipv4/netfilter/nf_nat_pptp.c
    @@ -165,8 +165,7 @@ pptp_outbound_pkt(struct sk_buff *skb,
    break;
    default:
    pr_debug("unknown outbound packet 0x%04x:%s\n", msg,
    - msg <= PPTP_MSG_MAX ? pptp_msg_name[msg] :
    - pptp_msg_name[0]);
    + pptp_msg_name(msg));
    /* fall through */
    case PPTP_SET_LINK_INFO:
    /* only need to NAT in case PAC is behind NAT box */
    @@ -267,9 +266,7 @@ pptp_inbound_pkt(struct sk_buff *skb,
    pcid_off = offsetof(union pptp_ctrl_union, setlink.peersCallID);
    break;
    default:
    - pr_debug("unknown inbound packet %s\n",
    - msg <= PPTP_MSG_MAX ? pptp_msg_name[msg] :
    - pptp_msg_name[0]);
    + pr_debug("unknown inbound packet %s\n", pptp_msg_name(msg));
    /* fall through */
    case PPTP_START_SESSION_REQUEST:
    case PPTP_START_SESSION_REPLY:
    diff --git a/net/ipv4/route.c b/net/ipv4/route.c
    index 967acf2844ef..a894adbb6c9b 100644
    --- a/net/ipv4/route.c
    +++ b/net/ipv4/route.c
    @@ -499,18 +499,16 @@ u32 ip_idents_reserve(u32 hash, int segs)
    atomic_t *p_id = ip_idents + hash % IP_IDENTS_SZ;
    u32 old = ACCESS_ONCE(*p_tstamp);
    u32 now = (u32)jiffies;
    - u32 new, delta = 0;
    + u32 delta = 0;

    if (old != now && cmpxchg(p_tstamp, old, now) == old)
    delta = prandom_u32_max(now - old);

    - /* Do not use atomic_add_return() as it makes UBSAN unhappy */
    - do {
    - old = (u32)atomic_read(p_id);
    - new = old + delta + segs;
    - } while (atomic_cmpxchg(p_id, old, new) != old);
    -
    - return new - segs;
    + /* If UBSAN reports an error there, please make sure your compiler
    + * supports -fno-strict-overflow before reporting it that was a bug
    + * in UBSAN, and it has been fixed in GCC-8.
    + */
    + return atomic_add_return(segs + delta, p_id) - segs;
    }
    EXPORT_SYMBOL(ip_idents_reserve);

    diff --git a/net/ipv6/esp6_offload.c b/net/ipv6/esp6_offload.c
    index f52c314d4c97..a50d1943dd62 100644
    --- a/net/ipv6/esp6_offload.c
    +++ b/net/ipv6/esp6_offload.c
    @@ -121,9 +121,16 @@ static void esp6_gso_encap(struct xfrm_state *x, struct sk_buff *skb)
    struct ip_esp_hdr *esph;
    struct ipv6hdr *iph = ipv6_hdr(skb);
    struct xfrm_offload *xo = xfrm_offload(skb);
    - int proto = iph->nexthdr;
    + u8 proto = iph->nexthdr;

    skb_push(skb, -skb_network_offset(skb));
    +
    + if (x->outer_mode->encap == XFRM_MODE_TRANSPORT) {
    + __be16 frag;
    +
    + ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &proto, &frag);
    + }
    +
    esph = ip_esp_hdr(skb);
    *skb_mac_header(skb) = IPPROTO_ESP;

    diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
    index 986e9b6b961d..fe65701fe95c 100644
    --- a/net/mac80211/mesh_hwmp.c
    +++ b/net/mac80211/mesh_hwmp.c
    @@ -1088,7 +1088,14 @@ void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata)
    mesh_path_sel_frame_tx(MPATH_PREQ, 0, sdata->vif.addr, ifmsh->sn,
    target_flags, mpath->dst, mpath->sn, da, 0,
    ttl, lifetime, 0, ifmsh->preq_id++, sdata);
    +
    + spin_lock_bh(&mpath->state_lock);
    + if (mpath->flags & MESH_PATH_DELETED) {
    + spin_unlock_bh(&mpath->state_lock);
    + goto enddiscovery;
    + }
    mod_timer(&mpath->timer, jiffies + mpath->discovery_timeout);
    + spin_unlock_bh(&mpath->state_lock);

    enddiscovery:
    rcu_read_unlock();
    diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
    index e563921e6af5..6ebd63a5d8ba 100644
    --- a/net/netfilter/ipset/ip_set_list_set.c
    +++ b/net/netfilter/ipset/ip_set_list_set.c
    @@ -61,7 +61,7 @@ list_set_ktest(struct ip_set *set, const struct sk_buff *skb,
    /* Don't lookup sub-counters at all */
    opt->cmdflags &= ~IPSET_FLAG_MATCH_COUNTERS;
    if (opt->cmdflags & IPSET_FLAG_SKIP_SUBCOUNTER_UPDATE)
    - opt->cmdflags &= ~IPSET_FLAG_SKIP_COUNTER_UPDATE;
    + opt->cmdflags |= IPSET_FLAG_SKIP_COUNTER_UPDATE;
    list_for_each_entry_rcu(e, &map->members, list) {
    if (SET_WITH_TIMEOUT(set) &&
    ip_set_timeout_expired(ext_timeout(e, set)))
    diff --git a/net/netfilter/nf_conntrack_pptp.c b/net/netfilter/nf_conntrack_pptp.c
    index 11562f2a08bb..203107ce2455 100644
    --- a/net/netfilter/nf_conntrack_pptp.c
    +++ b/net/netfilter/nf_conntrack_pptp.c
    @@ -71,24 +71,32 @@ EXPORT_SYMBOL_GPL(nf_nat_pptp_hook_expectfn);

    #if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
    /* PptpControlMessageType names */
    -const char *const pptp_msg_name[] = {
    - "UNKNOWN_MESSAGE",
    - "START_SESSION_REQUEST",
    - "START_SESSION_REPLY",
    - "STOP_SESSION_REQUEST",
    - "STOP_SESSION_REPLY",
    - "ECHO_REQUEST",
    - "ECHO_REPLY",
    - "OUT_CALL_REQUEST",
    - "OUT_CALL_REPLY",
    - "IN_CALL_REQUEST",
    - "IN_CALL_REPLY",
    - "IN_CALL_CONNECT",
    - "CALL_CLEAR_REQUEST",
    - "CALL_DISCONNECT_NOTIFY",
    - "WAN_ERROR_NOTIFY",
    - "SET_LINK_INFO"
    +static const char *const pptp_msg_name_array[PPTP_MSG_MAX + 1] = {
    + [0] = "UNKNOWN_MESSAGE",
    + [PPTP_START_SESSION_REQUEST] = "START_SESSION_REQUEST",
    + [PPTP_START_SESSION_REPLY] = "START_SESSION_REPLY",
    + [PPTP_STOP_SESSION_REQUEST] = "STOP_SESSION_REQUEST",
    + [PPTP_STOP_SESSION_REPLY] = "STOP_SESSION_REPLY",
    + [PPTP_ECHO_REQUEST] = "ECHO_REQUEST",
    + [PPTP_ECHO_REPLY] = "ECHO_REPLY",
    + [PPTP_OUT_CALL_REQUEST] = "OUT_CALL_REQUEST",
    + [PPTP_OUT_CALL_REPLY] = "OUT_CALL_REPLY",
    + [PPTP_IN_CALL_REQUEST] = "IN_CALL_REQUEST",
    + [PPTP_IN_CALL_REPLY] = "IN_CALL_REPLY",
    + [PPTP_IN_CALL_CONNECT] = "IN_CALL_CONNECT",
    + [PPTP_CALL_CLEAR_REQUEST] = "CALL_CLEAR_REQUEST",
    + [PPTP_CALL_DISCONNECT_NOTIFY] = "CALL_DISCONNECT_NOTIFY",
    + [PPTP_WAN_ERROR_NOTIFY] = "WAN_ERROR_NOTIFY",
    + [PPTP_SET_LINK_INFO] = "SET_LINK_INFO"
    };
    +
    +const char *pptp_msg_name(u_int16_t msg)
    +{
    + if (msg > PPTP_MSG_MAX)
    + return pptp_msg_name_array[0];
    +
    + return pptp_msg_name_array[msg];
    +}
    EXPORT_SYMBOL(pptp_msg_name);
    #endif

    @@ -275,7 +283,7 @@ pptp_inbound_pkt(struct sk_buff *skb, unsigned int protoff,
    typeof(nf_nat_pptp_hook_inbound) nf_nat_pptp_inbound;

    msg = ntohs(ctlh->messageType);
    - pr_debug("inbound control message %s\n", pptp_msg_name[msg]);
    + pr_debug("inbound control message %s\n", pptp_msg_name(msg));

    switch (msg) {
    case PPTP_START_SESSION_REPLY:
    @@ -310,7 +318,7 @@ pptp_inbound_pkt(struct sk_buff *skb, unsigned int protoff,
    pcid = pptpReq->ocack.peersCallID;
    if (info->pns_call_id != pcid)
    goto invalid;
    - pr_debug("%s, CID=%X, PCID=%X\n", pptp_msg_name[msg],
    + pr_debug("%s, CID=%X, PCID=%X\n", pptp_msg_name(msg),
    ntohs(cid), ntohs(pcid));

    if (pptpReq->ocack.resultCode == PPTP_OUTCALL_CONNECT) {
    @@ -327,7 +335,7 @@ pptp_inbound_pkt(struct sk_buff *skb, unsigned int protoff,
    goto invalid;

    cid = pptpReq->icreq.callID;
    - pr_debug("%s, CID=%X\n", pptp_msg_name[msg], ntohs(cid));
    + pr_debug("%s, CID=%X\n", pptp_msg_name(msg), ntohs(cid));
    info->cstate = PPTP_CALL_IN_REQ;
    info->pac_call_id = cid;
    break;
    @@ -346,7 +354,7 @@ pptp_inbound_pkt(struct sk_buff *skb, unsigned int protoff,
    if (info->pns_call_id != pcid)
    goto invalid;

    - pr_debug("%s, PCID=%X\n", pptp_msg_name[msg], ntohs(pcid));
    + pr_debug("%s, PCID=%X\n", pptp_msg_name(msg), ntohs(pcid));
    info->cstate = PPTP_CALL_IN_CONF;

    /* we expect a GRE connection from PAC to PNS */
    @@ -356,7 +364,7 @@ pptp_inbound_pkt(struct sk_buff *skb, unsigned int protoff,
    case PPTP_CALL_DISCONNECT_NOTIFY:
    /* server confirms disconnect */
    cid = pptpReq->disc.callID;
    - pr_debug("%s, CID=%X\n", pptp_msg_name[msg], ntohs(cid));
    + pr_debug("%s, CID=%X\n", pptp_msg_name(msg), ntohs(cid));
    info->cstate = PPTP_CALL_NONE;

    /* untrack this call id, unexpect GRE packets */
    @@ -383,7 +391,7 @@ pptp_inbound_pkt(struct sk_buff *skb, unsigned int protoff,
    invalid:
    pr_debug("invalid %s: type=%d cid=%u pcid=%u "
    "cstate=%d sstate=%d pns_cid=%u pac_cid=%u\n",
    - msg <= PPTP_MSG_MAX ? pptp_msg_name[msg] : pptp_msg_name[0],
    + pptp_msg_name(msg),
    msg, ntohs(cid), ntohs(pcid), info->cstate, info->sstate,
    ntohs(info->pns_call_id), ntohs(info->pac_call_id));
    return NF_ACCEPT;
    @@ -403,7 +411,7 @@ pptp_outbound_pkt(struct sk_buff *skb, unsigned int protoff,
    typeof(nf_nat_pptp_hook_outbound) nf_nat_pptp_outbound;

    msg = ntohs(ctlh->messageType);
    - pr_debug("outbound control message %s\n", pptp_msg_name[msg]);
    + pr_debug("outbound control message %s\n", pptp_msg_name(msg));

    switch (msg) {
    case PPTP_START_SESSION_REQUEST:
    @@ -425,7 +433,7 @@ pptp_outbound_pkt(struct sk_buff *skb, unsigned int protoff,
    info->cstate = PPTP_CALL_OUT_REQ;
    /* track PNS call id */
    cid = pptpReq->ocreq.callID;
    - pr_debug("%s, CID=%X\n", pptp_msg_name[msg], ntohs(cid));
    + pr_debug("%s, CID=%X\n", pptp_msg_name(msg), ntohs(cid));
    info->pns_call_id = cid;
    break;

    @@ -439,7 +447,7 @@ pptp_outbound_pkt(struct sk_buff *skb, unsigned int protoff,
    pcid = pptpReq->icack.peersCallID;
    if (info->pac_call_id != pcid)
    goto invalid;
    - pr_debug("%s, CID=%X PCID=%X\n", pptp_msg_name[msg],
    + pr_debug("%s, CID=%X PCID=%X\n", pptp_msg_name(msg),
    ntohs(cid), ntohs(pcid));

    if (pptpReq->icack.resultCode == PPTP_INCALL_ACCEPT) {
    @@ -479,7 +487,7 @@ pptp_outbound_pkt(struct sk_buff *skb, unsigned int protoff,
    invalid:
    pr_debug("invalid %s: type=%d cid=%u pcid=%u "
    "cstate=%d sstate=%d pns_cid=%u pac_cid=%u\n",
    - msg <= PPTP_MSG_MAX ? pptp_msg_name[msg] : pptp_msg_name[0],
    + pptp_msg_name(msg),
    msg, ntohs(cid), ntohs(pcid), info->cstate, info->sstate,
    ntohs(info->pns_call_id), ntohs(info->pac_call_id));
    return NF_ACCEPT;
    diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
    index dd1030f5dd5e..dfe4e6787219 100644
    --- a/net/netfilter/nfnetlink_cthelper.c
    +++ b/net/netfilter/nfnetlink_cthelper.c
    @@ -106,7 +106,7 @@ nfnl_cthelper_from_nlattr(struct nlattr *attr, struct nf_conn *ct)
    if (help->helper->data_len == 0)
    return -EINVAL;

    - nla_memcpy(help->data, nla_data(attr), sizeof(help->data));
    + nla_memcpy(help->data, attr, sizeof(help->data));
    return 0;
    }

    @@ -240,6 +240,7 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
    ret = -ENOMEM;
    goto err2;
    }
    + helper->data_len = size;

    helper->flags |= NF_CT_HELPER_F_USERSPACE;
    memcpy(&helper->tuple, tuple, sizeof(struct nf_conntrack_tuple));
    diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
    index 944ce686bfe5..b9b6235a4cf2 100644
    --- a/net/qrtr/qrtr.c
    +++ b/net/qrtr/qrtr.c
    @@ -660,7 +660,7 @@ static int qrtr_bcast_enqueue(struct qrtr_node *node, struct sk_buff *skb)
    }
    mutex_unlock(&qrtr_node_lock);

    - qrtr_local_enqueue(node, skb);
    + qrtr_local_enqueue(NULL, skb);

    return 0;
    }
    diff --git a/net/rxrpc/local_object.c b/net/rxrpc/local_object.c
    index 2af42c7d5b82..383292adcac6 100644
    --- a/net/rxrpc/local_object.c
    +++ b/net/rxrpc/local_object.c
    @@ -134,10 +134,10 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
    }

    switch (local->srx.transport.family) {
    - case AF_INET:
    - /* we want to receive ICMP errors */
    + case AF_INET6:
    + /* we want to receive ICMPv6 errors */
    opt = 1;
    - ret = kernel_setsockopt(local->socket, SOL_IP, IP_RECVERR,
    + ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_RECVERR,
    (char *) &opt, sizeof(opt));
    if (ret < 0) {
    _debug("setsockopt failed");
    @@ -145,19 +145,22 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
    }

    /* we want to set the don't fragment bit */
    - opt = IP_PMTUDISC_DO;
    - ret = kernel_setsockopt(local->socket, SOL_IP, IP_MTU_DISCOVER,
    + opt = IPV6_PMTUDISC_DO;
    + ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_MTU_DISCOVER,
    (char *) &opt, sizeof(opt));
    if (ret < 0) {
    _debug("setsockopt failed");
    goto error;
    }
    - break;

    - case AF_INET6:
    + /* Fall through and set IPv4 options too otherwise we don't get
    + * errors from IPv4 packets sent through the IPv6 socket.
    + */
    +
    + case AF_INET:
    /* we want to receive ICMP errors */
    opt = 1;
    - ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_RECVERR,
    + ret = kernel_setsockopt(local->socket, SOL_IP, IP_RECVERR,
    (char *) &opt, sizeof(opt));
    if (ret < 0) {
    _debug("setsockopt failed");
    @@ -165,8 +168,8 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
    }

    /* we want to set the don't fragment bit */
    - opt = IPV6_PMTUDISC_DO;
    - ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_MTU_DISCOVER,
    + opt = IP_PMTUDISC_DO;
    + ret = kernel_setsockopt(local->socket, SOL_IP, IP_MTU_DISCOVER,
    (char *) &opt, sizeof(opt));
    if (ret < 0) {
    _debug("setsockopt failed");
    diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
    index ba29d782af30..80b9f7f097fa 100644
    --- a/net/sctp/sm_statefuns.c
    +++ b/net/sctp/sm_statefuns.c
    @@ -1829,12 +1829,13 @@ static enum sctp_disposition sctp_sf_do_dupcook_a(
    /* Update the content of current association. */
    sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_ASSOC, SCTP_ASOC(new_asoc));
    sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev));
    - if (sctp_state(asoc, SHUTDOWN_PENDING) &&
    + if ((sctp_state(asoc, SHUTDOWN_PENDING) ||
    + sctp_state(asoc, SHUTDOWN_SENT)) &&
    (sctp_sstate(asoc->base.sk, CLOSING) ||
    sock_flag(asoc->base.sk, SOCK_DEAD))) {
    - /* if were currently in SHUTDOWN_PENDING, but the socket
    - * has been closed by user, don't transition to ESTABLISHED.
    - * Instead trigger SHUTDOWN bundled with COOKIE_ACK.
    + /* If the socket has been closed by user, don't
    + * transition to ESTABLISHED. Instead trigger SHUTDOWN
    + * bundled with COOKIE_ACK.
    */
    sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
    return sctp_sf_do_9_2_start_shutdown(net, ep, asoc,
    diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
    index 311597401b82..874735742152 100644
    --- a/net/xfrm/xfrm_input.c
    +++ b/net/xfrm/xfrm_input.c
    @@ -402,7 +402,7 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
    dev_put(skb->dev);

    spin_lock(&x->lock);
    - if (nexthdr <= 0) {
    + if (nexthdr < 0) {
    if (nexthdr == -EBADMSG) {
    xfrm_audit_state_icvfail(x, skb,
    x->type->proto);
    diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
    index b226b230e8bf..80760a753d72 100644
    --- a/net/xfrm/xfrm_output.c
    +++ b/net/xfrm/xfrm_output.c
    @@ -236,18 +236,20 @@ int xfrm_output(struct sock *sk, struct sk_buff *skb)
    xfrm_state_hold(x);

    if (skb_is_gso(skb)) {
    - skb_shinfo(skb)->gso_type |= SKB_GSO_ESP;
    + if (skb->inner_protocol)
    + return xfrm_output_gso(net, sk, skb);

    - return xfrm_output2(net, sk, skb);
    + skb_shinfo(skb)->gso_type |= SKB_GSO_ESP;
    + goto out;
    }

    if (x->xso.dev && x->xso.dev->features & NETIF_F_HW_ESP_TX_CSUM)
    goto out;
    + } else {
    + if (skb_is_gso(skb))
    + return xfrm_output_gso(net, sk, skb);
    }

    - if (skb_is_gso(skb))
    - return xfrm_output_gso(net, sk, skb);
    -
    if (skb->ip_summed == CHECKSUM_PARTIAL) {
    err = skb_checksum_help(skb);
    if (err) {
    @@ -284,7 +286,8 @@ void xfrm_local_error(struct sk_buff *skb, int mtu)

    if (skb->protocol == htons(ETH_P_IP))
    proto = AF_INET;
    - else if (skb->protocol == htons(ETH_P_IPV6))
    + else if (skb->protocol == htons(ETH_P_IPV6) &&
    + skb->sk->sk_family == AF_INET6)
    proto = AF_INET6;
    else
    return;
    diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
    index f76bb5237df3..f8fd0aebf771 100644
    --- a/net/xfrm/xfrm_policy.c
    +++ b/net/xfrm/xfrm_policy.c
    @@ -722,12 +722,7 @@ static void xfrm_policy_requeue(struct xfrm_policy *old,
    static bool xfrm_policy_mark_match(struct xfrm_policy *policy,
    struct xfrm_policy *pol)
    {
    - u32 mark = policy->mark.v & policy->mark.m;
    -
    - if (policy->mark.v == pol->mark.v && policy->mark.m == pol->mark.m)
    - return true;
    -
    - if ((mark & pol->mark.m) == pol->mark.v &&
    + if (policy->mark.v == pol->mark.v &&
    policy->priority == pol->priority)
    return true;

    diff --git a/samples/bpf/lwt_len_hist_user.c b/samples/bpf/lwt_len_hist_user.c
    index 7fcb94c09112..965108527a4f 100644
    --- a/samples/bpf/lwt_len_hist_user.c
    +++ b/samples/bpf/lwt_len_hist_user.c
    @@ -15,8 +15,6 @@
    #define MAX_INDEX 64
    #define MAX_STARS 38

    -char bpf_log_buf[BPF_LOG_BUF_SIZE];
    -
    static void stars(char *str, long val, long max, int width)
    {
    int i;
    diff --git a/security/commoncap.c b/security/commoncap.c
    index ae26ef006988..ac031fa39190 100644
    --- a/security/commoncap.c
    +++ b/security/commoncap.c
    @@ -711,6 +711,7 @@ int cap_bprm_set_creds(struct linux_binprm *bprm)
    int ret;
    kuid_t root_uid;

    + new->cap_ambient = old->cap_ambient;
    if (WARN_ON(!cap_ambient_invariant_ok(old)))
    return -EPERM;

    diff --git a/sound/core/hwdep.c b/sound/core/hwdep.c
    index a73baa1242be..727219f40201 100644
    --- a/sound/core/hwdep.c
    +++ b/sound/core/hwdep.c
    @@ -229,14 +229,14 @@ static int snd_hwdep_dsp_load(struct snd_hwdep *hw,
    if (copy_from_user(&info, _info, sizeof(info)))
    return -EFAULT;
    /* check whether the dsp was already loaded */
    - if (hw->dsp_loaded & (1 << info.index))
    + if (hw->dsp_loaded & (1u << info.index))
    return -EBUSY;
    if (!access_ok(VERIFY_READ, info.image, info.length))
    return -EFAULT;
    err = hw->ops.dsp_load(hw, &info);
    if (err < 0)
    return err;
    - hw->dsp_loaded |= (1 << info.index);
    + hw->dsp_loaded |= (1u << info.index);
    return 0;
    }

    diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
    index c4e97b3ba1dd..5be3c926364e 100644
    --- a/sound/pci/hda/patch_realtek.c
    +++ b/sound/pci/hda/patch_realtek.c
    @@ -341,6 +341,7 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
    case 0x10ec0282:
    case 0x10ec0283:
    case 0x10ec0286:
    + case 0x10ec0287:
    case 0x10ec0288:
    case 0x10ec0285:
    case 0x10ec0298:
    @@ -7290,6 +7291,7 @@ static int patch_alc269(struct hda_codec *codec)
    case 0x10ec0215:
    case 0x10ec0245:
    case 0x10ec0285:
    + case 0x10ec0287:
    case 0x10ec0289:
    spec->codec_variant = ALC269_TYPE_ALC215;
    spec->gen.mixer_nid = 0;
    @@ -8389,6 +8391,7 @@ static const struct hda_device_id snd_hda_id_realtek[] = {
    HDA_CODEC_ENTRY(0x10ec0284, "ALC284", patch_alc269),
    HDA_CODEC_ENTRY(0x10ec0285, "ALC285", patch_alc269),
    HDA_CODEC_ENTRY(0x10ec0286, "ALC286", patch_alc269),
    + HDA_CODEC_ENTRY(0x10ec0287, "ALC287", patch_alc269),
    HDA_CODEC_ENTRY(0x10ec0288, "ALC288", patch_alc269),
    HDA_CODEC_ENTRY(0x10ec0289, "ALC289", patch_alc269),
    HDA_CODEC_ENTRY(0x10ec0290, "ALC290", patch_alc269),
    diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
    index 7b75208d5cea..dbbc5609b453 100644
    --- a/sound/usb/mixer.c
    +++ b/sound/usb/mixer.c
    @@ -986,6 +986,14 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
    cval->res = 384;
    }
    break;
    + case USB_ID(0x0495, 0x3042): /* ESS Technology Asus USB DAC */
    + if ((strstr(kctl->id.name, "Playback Volume") != NULL) ||
    + strstr(kctl->id.name, "Capture Volume") != NULL) {
    + cval->min >>= 8;
    + cval->max = 0;
    + cval->res = 1;
    + }
    + break;
    }
    }

    \
     
     \ /
      Last update: 2020-06-03 14:04    [W:7.424 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site