Linux 5.4.114
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.114 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/kernel/signal.c | 4 arch/arm/boot/dts/omap4.dtsi | 5 arch/arm/boot/dts/omap44xx-clocks.dtsi | 8 arch/arm/boot/dts/omap5.dtsi | 5 arch/arm/mach-footbridge/cats-pci.c | 4 arch/arm/mach-footbridge/ebsa285-pci.c | 4 arch/arm/mach-footbridge/netwinder-pci.c | 2 arch/arm/mach-footbridge/personal-pci.c | 5 arch/arm/mach-keystone/keystone.c | 4 arch/arm/mach-omap1/ams-delta-fiq-handler.S | 1 arch/arm/probes/uprobes/core.c | 4 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-lts.dts | 4 arch/arm64/boot/dts/allwinner/sun50i-a64-sopine.dtsi | 2 arch/arm64/include/asm/alternative.h | 8 arch/arm64/include/asm/word-at-a-time.h | 10 - arch/riscv/Kconfig | 2 drivers/dma/dw/Kconfig | 2 drivers/gpio/gpiolib-sysfs.c | 8 drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 4 drivers/hid/wacom_wac.c | 6 drivers/input/keyboard/nspire-keypad.c | 56 +++--- drivers/input/serio/i8042-x86ia64io.h | 1 drivers/input/touchscreen/s6sy761.c | 4 drivers/md/dm-verity-fec.c | 11 - drivers/md/dm-verity-fec.h | 1 drivers/net/dsa/mv88e6xxx/chip.c | 30 +-- drivers/net/ethernet/amd/pcnet32.c | 5 drivers/net/ethernet/cadence/macb_main.c | 2 drivers/net/ethernet/davicom/dm9000.c | 6 drivers/net/ethernet/ibm/ibmvnic.c | 14 - drivers/net/ethernet/intel/i40e/i40e_main.c | 6 drivers/net/ethernet/realtek/r8169_main.c | 141 +++++----------- drivers/net/phy/marvell.c | 29 ++- drivers/net/wireless/virt_wifi.c | 5 drivers/nvdimm/region_devs.c | 9 - drivers/scsi/libsas/sas_ata.c | 9 - drivers/scsi/qla2xxx/qla_dbg.c | 2 drivers/scsi/qla2xxx/qla_def.h | 40 ++++ drivers/scsi/qla2xxx/qla_fw.h | 2 drivers/scsi/qla2xxx/qla_gbl.h | 3 drivers/scsi/qla2xxx/qla_gs.c | 44 ++-- drivers/scsi/qla2xxx/qla_init.c | 133 ++++++++------- drivers/scsi/qla2xxx/qla_inline.h | 36 ++++ drivers/scsi/qla2xxx/qla_iocb.c | 53 ++++-- drivers/scsi/qla2xxx/qla_mbx.c | 11 - drivers/scsi/qla2xxx/qla_os.c | 19 +- drivers/scsi/qla2xxx/qla_target.c | 11 - drivers/scsi/scsi_transport_srp.c | 2 drivers/vfio/pci/vfio_pci.c | 4 fs/readdir.c | 6 include/linux/marvell_phy.h | 5 include/linux/netfilter_arp/arp_tables.h | 5 include/linux/netfilter_bridge/ebtables.h | 5 kernel/locking/lockdep.c | 3 net/bridge/netfilter/ebtable_broute.c | 8 net/bridge/netfilter/ebtable_filter.c | 8 net/bridge/netfilter/ebtable_nat.c | 8 net/bridge/netfilter/ebtables.c | 30 +++ net/core/dev.c | 3 net/core/neighbour.c | 2 net/ieee802154/nl802154.c | 41 ++++ net/ipv4/netfilter/arp_tables.c | 9 - net/ipv4/netfilter/arptable_filter.c | 10 + net/ipv6/ip6_tunnel.c | 10 + net/ipv6/sit.c | 4 net/mac80211/cfg.c | 4 net/netfilter/nf_conntrack_standalone.c | 1 net/netfilter/nft_limit.c | 4 net/sctp/socket.c | 13 - sound/soc/codecs/max98373.c | 2 sound/soc/fsl/fsl_esai.c | 8 73 files changed, 617 insertions(+), 359 deletions(-)
A. Cody Schuffelen (1):
virt_wifi: Return micros for BSS TSF values
Alexander Aring (11):
net: ieee802154: stop dump llsec keys for monitors
net: ieee802154: forbid monitor for add llsec key
net: ieee802154: forbid monitor for del llsec key
net: ieee802154: stop dump llsec devs for monitors
net: ieee802154: forbid monitor for add llsec dev
net: ieee802154: forbid monitor for del llsec dev
net: ieee802154: stop dump llsec devkeys for monitors
net: ieee802154: forbid monitor for add llsec devkey
net: ieee802154: forbid monitor for del llsec devkey
net: ieee802154: stop dump llsec seclevels for monitors
net: ieee802154: forbid monitor for add llsec seclevel
Alexander Shiyan (1):
ASoC: fsl_esai: Fix TDM slot setup for I2S mode
Andre Przywara (1):
arm64: dts: allwinner: Fix SD card CD GPIO for SOPine systems
Andy Shevchenko (1):
dmaengine: dw: Make it dependent to HAS_IOMEM
Arnd Bergmann (3):
ARM: keystone: fix integer overflow warning
ARM: omap1: fix building with clang IAS
Input: i8042 - fix Pegatron C15B ID entry
Arun Easi (1):
scsi: qla2xxx: Fix device connect issues in P2P configuration
Caleb Connolly (1):
Input: s6sy761 - fix coordinate read bit shift
Christian A. Ehrhardt (1):
vfio/pci: Add missing range check in vfio_pci_mmap
Christophe JAILLET (1):
net: davicom: Fix regulator not turned off on failed probe
Claudiu Beznea (1):
net: macb: fix the restore of cmp registers
Eric Dumazet (2):
netfilter: nft_limit: avoid possible divide error in nft_limit_init
gro: ensure frag0 meets IP header alignment
Fabian Vogt (1):
Input: nspire-keypad - enable interrupts only when opened
Florian Westphal (2):
netfilter: bridge: add pre_exit hooks for ebtable unregistration
netfilter: arp_tables: add pre_exit hook for table unregister
Fredrik Strupe (1):
ARM: 9071/1: uprobes: Don't hook on thumb instructions
Greg Kroah-Hartman (1):
Linux 5.4.114
Guenter Roeck (1):
pcnet32: Use pci_resource_len to validate PCI resource
Heiner Kallweit (6):
r8169: remove fiddling with the PCIe max read request size
r8169: simplify setting PCI_EXP_DEVCTL_NOSNOOP_EN
r8169: fix performance regression related to PCIe max read request size
r8169: improve rtl_jumbo_config
r8169: tweak max read request size for newer chips also in jumbo mtu mode
r8169: don't advertise pause in jumbo mode
Hristo Venev (2):
net: sit: Unregister catch-all devices
net: ip6_tunnel: Unregister catch-all devices
Jaegeuk Kim (1):
dm verity fec: fix misaligned RS roots IO
Jason Xing (1):
i40e: fix the panic when running bpf in xdpdrv mode
Jolly Shah (1):
scsi: libsas: Reset num_scatter if libata marks qc as NODATA
Kefeng Wang (1):
riscv: Fix spelling mistake "SPARSEMEM" to "SPARSMEM"
Lijun Pan (3):
ibmvnic: avoid calling napi_disable() twice
ibmvnic: remove duplicate napi_schedule call in do_reset function
ibmvnic: remove duplicate napi_schedule call in open function
Linus Torvalds (1):
readdir: make sure to verify directory entry for legacy interfaces too
Martin Wilck (1):
scsi: scsi_transport_srp: Don't block target in SRP_PORT_LOST state
Matti Vaittinen (1):
gpio: sysfs: Obey valid_mask
Michael Hernandez (1):
scsi: qla2xxx: Dual FCP-NVMe target port support
Nathan Chancellor (1):
arm64: alternatives: Move length validation in alternative_{insn, endif}Or Cohen (1):
net/sctp: fix race condition in sctp_destroy_sock
Pablo Neira Ayuso (1):
netfilter: conntrack: do not print icmpv6 as unknown via /proc
Pali Rohár (1):
net: phy: marvell: fix detection of PHY on Topaz switches
Peter Collingbourne (1):
arm64: fix inline asm in load_unaligned_zeropad()
Ping Cheng (1):
HID: wacom: set EV_KEY and EV_ABS only for non-HID_GENERIC type of devices
Quinn Tran (3):
scsi: qla2xxx: Retry PLOGI on FC-NVMe PRLI failure
scsi: qla2xxx: Fix stuck login session using prli_pend_timer
scsi: qla2xxx: Fix fabric scan hang
Rob Clark (1):
drm/msm: Fix a5xx/a6xx timestamps
Russell King (1):
ARM: footbridge: fix PCI interrupt mapping
Ryan Lee (1):
ASoC: max98373: Added 30ms turn on/off time delay
Sasha Levin (2):
Revert "scsi: qla2xxx: Retry PLOGI on FC-NVMe PRLI failure" Revert "scsi: qla2xxx: Fix stuck login session using prli_pend_timer"
Seevalamuthu Mariappan (1):
mac80211: clear sta->fast_rx when STA removed from 4-addr VLAN
Shyam Sundar (1):
scsi: qla2xxx: Add a shadow variable to hold disc_state history of fcport
Tetsuo Handa (1):
lockdep: Add a missing initialization hint to the "INFO: Trying to register non-static key" message
Tong Zhu (1):
neighbour: Disregard DEAD dst in neigh_update
Tony Lindgren (2):
ARM: dts: Drop duplicate sha2md5_fck to fix clk_disable race
ARM: dts: Fix moving mmc devices with aliases for omap4 & 5
Vaibhav Jain (1):
libnvdimm/region: Fix nvdimm_has_flush() to handle ND_REGION_ASYNC
Wang Qing (1):
arc: kernel: Return -EFAULT if copy_to_user() fails
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 113 +SUBLEVEL = 114 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/kernel/signal.c +2 -2
@@ -96,7 +96,7 @@ stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs, sizeof(sf->uc.uc_mcontext.regs.scratch)); err |=__copy_to_user (&sf->uc.uc_sigmask, set,sizeof (sigset_t)); -return err; +return err ? -EFAULT :0 ; }static int restore_usr_regs (struct pt_regs *regs,struct rt_sigframe __user *sf)
@@ -110,7 +110,7 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf) &(sf->uc.uc_mcontext.regs.scratch), sizeof(sf->uc.uc_mcontext.regs.scratch));if (err) -return err; +return -EFAULT ;set_current_blocked (&set); regs->bta = uregs.scratch.bta;
arch/arm/boot/dts/omap4.dtsi +5 -0
@@ -22,6 +22,11 @@ i2c1 = &i2c2; i2c2 = &i2c3; i2c3 = &i2c4; + mmc0 = &mmc1; + mmc1 = &mmc2; + mmc2 = &mmc3; + mmc3 = &mmc4; + mmc4 = &mmc5; serial0 = &uart1; serial1 = &uart2; serial2 = &uart3;
arch/arm/boot/dts/omap44xx-clocks.dtsi +0 -8
@@ -770,14 +770,6 @@ ti,max-div = <2>; }; - sha2md5_fck: sha2md5_fck@15c8 { - #clock-cells = <0>; - compatible = "ti,gate-clock"; - clocks = <&l3_div_ck>; - ti,bit-shift = <1>; - reg = <0x15c8>; - }; - usb_phy_cm_clk32k: usb_phy_cm_clk32k@640 { #clock-cells = <0>; compatible = "ti,gate-clock";
arch/arm/boot/dts/omap5.dtsi +5 -0
@@ -25,6 +25,11 @@ i2c2 = &i2c3; i2c3 = &i2c4; i2c4 = &i2c5; + mmc0 = &mmc1; + mmc1 = &mmc2; + mmc2 = &mmc3; + mmc3 = &mmc4; + mmc4 = &mmc5; serial0 = &uart1; serial1 = &uart2; serial2 = &uart3;
arch/arm/mach-footbridge/cats-pci.c +2 -2
@@ -15,14 +15,14 @@#include <asm/mach-types.h> /* cats host-specific stuff */ -static int irqmap_cats[]__initdata = {IRQ_PCI ,IRQ_IN0 ,IRQ_IN1 ,IRQ_IN3 }; +static int irqmap_cats[] = {IRQ_PCI ,IRQ_IN0 ,IRQ_IN1 ,IRQ_IN3 };static u8 cats_no_swizzle (struct pci_dev *dev,u8 *pin) {return 0 ; } -static int __init cats_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) +static int cats_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) {if (dev->irq >=255 )return -1 ;/* not a valid interrupt. */
arch/arm/mach-footbridge/ebsa285-pci.c +2 -2
@@ -14,9 +14,9 @@#include <asm/mach/pci.h> #include <asm/mach-types.h> -static int irqmap_ebsa285[]__initdata = {IRQ_IN3 ,IRQ_IN1 ,IRQ_IN0 ,IRQ_PCI }; +static int irqmap_ebsa285[] = {IRQ_IN3 ,IRQ_IN1 ,IRQ_IN0 ,IRQ_PCI }; -static int __init ebsa285_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) +static int ebsa285_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) {if (dev->vendor ==PCI_VENDOR_ID_CONTAQ && dev->device ==PCI_DEVICE_ID_CONTAQ_82C693 )
arch/arm/mach-footbridge/netwinder-pci.c +1 -1
@@ -18,7 +18,7 @@* We now use the slot ID instead of the device identifiers to select * which interrupt is routed where. */ -static int __init netwinder_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) +static int netwinder_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) {switch (slot) {case 0 :/* host bridge */
arch/arm/mach-footbridge/personal-pci.c +2 -3
@@ -14,13 +14,12 @@#include <asm/mach/pci.h> #include <asm/mach-types.h> -static int irqmap_personal_server[]__initdata = { +static int irqmap_personal_server[] = {IRQ_IN0 ,IRQ_IN1 ,IRQ_IN2 ,IRQ_IN3 ,0 ,0 ,0 ,IRQ_DOORBELLHOST ,IRQ_DMA1 ,IRQ_DMA2 ,IRQ_PCI }; -static int __init personal_server_map_irq (const struct pci_dev *dev,u8 slot, -u8 pin) +static int personal_server_map_irq (const struct pci_dev *dev,u8 slot,u8 pin) {unsigned char line;
arch/arm/mach-keystone/keystone.c +2 -2
@@ -62,7 +62,7 @@ static void __init keystone_init(void)static long long __init keystone_pv_fixup (void ) {long long offset; -phys_addr_t mem_start, mem_end; +u64 mem_start, mem_end; mem_start =memblock_start_of_DRAM (); mem_end =memblock_end_of_DRAM ();
@@ -75,7 +75,7 @@ static long long __init keystone_pv_fixup(void)if (mem_start <KEYSTONE_HIGH_PHYS_START || mem_end >KEYSTONE_HIGH_PHYS_END ) {pr_crit ("Invalid address space for memory (%08llx-%08llx)\n" , - (u64 )mem_start, (u64 )mem_end); + mem_start, mem_end);return 0 ; }
arch/arm/mach-omap1/ams-delta-fiq-handler.S +1 -0
@@ -15,6 +15,7 @@ #include <linux/platform_data/gpio-omap.h> #include <asm/assembler.h> +#include <asm/irq.h> #include "ams-delta-fiq.h" #include "board-ams-delta.h"
arch/arm/probes/uprobes/core.c +2 -2
@@ -204,7 +204,7 @@ unsigned long uprobe_get_swbp_addr(struct pt_regs *regs)static struct undef_hook uprobes_arm_break_hook = { .instr_mask =0x0fffffff , .instr_val = (UPROBE_SWBP_ARM_INSN &0x0fffffff ), - .cpsr_mask =MODE_MASK , + .cpsr_mask = (PSR_T_BIT |MODE_MASK ), .cpsr_val =USR_MODE , .fn = uprobe_trap_handler, };
@@ -212,7 +212,7 @@ static struct undef_hook uprobes_arm_break_hook = {static struct undef_hook uprobes_arm_ss_hook = { .instr_mask =0x0fffffff , .instr_val = (UPROBE_SS_ARM_INSN &0x0fffffff ), - .cpsr_mask =MODE_MASK , + .cpsr_mask = (PSR_T_BIT |MODE_MASK ), .cpsr_val =USR_MODE , .fn = uprobe_trap_handler, };
arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-lts.dts +4 -0
@@ -11,3 +11,7 @@ compatible = "pine64,pine64-lts", "allwinner,sun50i-r18", "allwinner,sun50i-a64"; }; + +&mmc0 { + cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 push-push switch */ +};
arch/arm64/boot/dts/allwinner/sun50i-a64-sopine.dtsi +1 -1
@@ -57,7 +57,7 @@ vmmc-supply = <®_dcdc1>; disable-wp; bus-width = <4>; - cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */ + cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 push-pull switch */ status = "okay"; };
arch/arm64/include/asm/alternative.h +4 -4
@@ -119,9 +119,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { } .popsection .subsection 1 663: \insn2 -664: .previous - .org . - (664b-663b) + (662b-661b) +664: .org . - (664b-663b) + (662b-661b) .org . - (662b-661b) + (664b-663b) + .previous .endif .endm
@@ -191,11 +191,11 @@ static inline void apply_alternatives_module(void *start, size_t length) { }*/ .macro alternative_endif 664: + .org . - (664b-663b) + (662b-661b) + .org . - (662b-661b) + (664b-663b) .if .Lasm_alt_mode==0 .previous .endif - .org . - (664b-663b) + (662b-661b) - .org . - (662b-661b) + (664b-663b) .endm/*
arch/arm64/include/asm/word-at-a-time.h +5 -5
@@ -53,7 +53,7 @@ static inline unsigned long find_zero(unsigned long mask)*/ static inline unsigned long load_unaligned_zeropad (const void *addr) { -unsigned long ret, offset; +unsigned long ret, tmp;/* Load word from unaligned pointer addr */ asm(
@@ -61,9 +61,9 @@ static inline unsigned long load_unaligned_zeropad(const void *addr)"2:\n" " .pushsection .fixup,\"ax\"\n" " .align 2\n" -"3: and %1, %2, #0x7\n" -" bic %2, %2, #0x7\n" -" ldr %0, [%2]\n" +"3: bic %1, %2, #0x7\n" +" ldr %0, [%1]\n" +" and %1, %2, #0x7\n" " lsl %1, %1, #0x3\n" #ifndef __AARCH64EB__" lsr %0, %0, %1\n"
@@ -73,7 +73,7 @@ static inline unsigned long load_unaligned_zeropad(const void *addr)" b 2b\n" " .popsection\n" _ASM_EXTABLE(1b ,3b ) - : "=&r" (ret), "=&r" (offset) + : "=&r" (ret), "=&r" (tmp) : "r" (addr), "Q" (*(unsigned long *)addr)); return ret;
arch/riscv/Kconfig +1 -1
@@ -101,7 +101,7 @@ config ARCH_FLATMEM_ENABLE config ARCH_SPARSEMEM_ENABLE def_bool y depends on MMU - select SPARSEMEM_STATIC if 32BIT && SPARSMEM + select SPARSEMEM_STATIC if 32BIT && SPARSEMEM select SPARSEMEM_VMEMMAP_ENABLE if 64BIT config ARCH_SELECT_MEMORY_MODEL
drivers/dma/dw/Kconfig +2 -0
@@ -10,6 +10,7 @@ config DW_DMAC_CORE config DW_DMAC tristate "Synopsys DesignWare AHB DMA platform driver" + depends on HAS_IOMEM select DW_DMAC_CORE help Support the Synopsys DesignWare AHB DMA controller. This
@@ -18,6 +19,7 @@ config DW_DMAC config DW_DMAC_PCI tristate "Synopsys DesignWare AHB DMA PCI driver" depends on PCI + depends on HAS_IOMEM select DW_DMAC_CORE help Support the Synopsys DesignWare AHB DMA controller on the
drivers/gpio/gpiolib-sysfs.c +8 -0
@@ -457,6 +457,8 @@ static ssize_t export_store(struct class *class,long gpio;struct gpio_desc *desc;int status; +struct gpio_chip *gc; +int offset; status =kstrtol (buf,0 , &gpio);if (status <0 )
@@ -468,6 +470,12 @@ static ssize_t export_store(struct class *class,pr_warn ("%s: invalid GPIO %ld\n" , __func__, gpio);return -EINVAL ; } + gc = desc->gdev->chip; + offset =gpio_chip_hwgpio (desc); +if (!gpiochip_line_is_valid (gc, offset)) { +pr_warn ("%s: GPIO %ld masked\n" , __func__, gpio); +return -EINVAL ; + }/* No extra locking here; FLAG_SYSFS just signifies that the * request and export were done by on behalf of userspace, so
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +2 -2
@@ -1131,8 +1131,8 @@ static int a5xx_pm_suspend(struct msm_gpu *gpu)static int a5xx_get_timestamp (struct msm_gpu *gpu,uint64_t *value) { - *value =gpu_read64 (gpu,REG_A5XX_RBBM_PERFCTR_CP_0_LO , -REG_A5XX_RBBM_PERFCTR_CP_0_HI ); + *value =gpu_read64 (gpu,REG_A5XX_RBBM_ALWAYSON_COUNTER_LO , +REG_A5XX_RBBM_ALWAYSON_COUNTER_HI );return 0 ; }
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +2 -2
@@ -773,8 +773,8 @@ static int a6xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value)/* Force the GPU power on so we can read this register */ a6xx_gmu_set_oob (&a6xx_gpu->gmu,GMU_OOB_GPU_SET ); - *value =gpu_read64 (gpu,REG_A6XX_RBBM_PERFCTR_CP_0_LO , -REG_A6XX_RBBM_PERFCTR_CP_0_HI ); + *value =gpu_read64 (gpu,REG_A6XX_CP_ALWAYS_ON_COUNTER_LO , +REG_A6XX_CP_ALWAYS_ON_COUNTER_HI );a6xx_gmu_clear_oob (&a6xx_gpu->gmu,GMU_OOB_GPU_SET );return 0 ;
drivers/hid/wacom_wac.c +2 -4
@@ -3574,8 +3574,6 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, {struct wacom_features *features = &wacom_wac->features; - input_dev->evbit[0 ] |=BIT_MASK (EV_KEY ) |BIT_MASK (EV_ABS ); -if (!(features->device_type &WACOM_DEVICETYPE_PEN ))return -ENODEV ;
@@ -3590,6 +3588,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,return 0 ; } + input_dev->evbit[0 ] |=BIT_MASK (EV_KEY ) |BIT_MASK (EV_ABS );__set_bit (BTN_TOUCH , input_dev->keybit);__set_bit (ABS_MISC , input_dev->absbit);
@@ -3742,8 +3741,6 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev, {struct wacom_features *features = &wacom_wac->features; - input_dev->evbit[0 ] |=BIT_MASK (EV_KEY ) |BIT_MASK (EV_ABS ); -if (!(features->device_type &WACOM_DEVICETYPE_TOUCH ))return -ENODEV ;
@@ -3756,6 +3753,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,/* setup has already been done */ return 0 ; + input_dev->evbit[0 ] |=BIT_MASK (EV_KEY ) |BIT_MASK (EV_ABS );__set_bit (BTN_TOUCH , input_dev->keybit);if (features->touch_max ==1 ) {
drivers/input/keyboard/nspire-keypad.c +31 -25
82 lines not on this page · raw message
drivers/input/serio/i8042-x86ia64io.h +1 -0
@@ -588,6 +588,7 @@ static const struct dmi_system_id i8042_dmi_noselftest_table[] = {DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ),DMI_MATCH (DMI_CHASSIS_TYPE ,"10" ),/* Notebook */ }, + }, { .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */
drivers/input/touchscreen/s6sy761.c +2 -2
@@ -145,8 +145,8 @@ static void s6sy761_report_coordinates(struct s6sy761_data *sdata,u8 major = event[4 ];u8 minor = event[5 ];u8 z = event[6 ] &S6SY761_MASK_Z ; -u16 x = (event[1 ] <<3 ) | ((event[3 ] &S6SY761_MASK_X ) >>4 ); -u16 y = (event[2 ] <<3 ) | (event[3 ] &S6SY761_MASK_Y ); +u16 x = (event[1 ] <<4 ) | ((event[3 ] &S6SY761_MASK_X ) >>4 ); +u16 y = (event[2 ] <<4 ) | (event[3 ] &S6SY761_MASK_Y );input_mt_slot (sdata->input, tid);
drivers/md/dm-verity-fec.c +8 -3
@@ -65,7 +65,7 @@ static u8 *fec_read_parity(struct dm_verity *v, u64 rsb, int index,u8 *res; position = (index + rsb) * v->fec->roots; - block =div64_u64_rem (position, v->fec->roots <<SECTOR_SHIFT , &rem); + block =div64_u64_rem (position, v->fec->io_size, &rem); *offset = (unsigned )rem; res =dm_bufio_read (v->fec->bufio, block, buf);
@@ -154,7 +154,7 @@ static int fec_decode_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio,/* read the next block when we run out of parity bytes */ offset += v->fec->roots; -if (offset >= v->fec->roots <<SECTOR_SHIFT ) { +if (offset >= v->fec->io_size) {dm_bufio_release (buf); par =fec_read_parity (v, rsb, block_offset, &offset, &buf);
@@ -742,8 +742,13 @@ int verity_fec_ctr(struct dm_verity *v)return -E2BIG ; } +if ((f->roots <<SECTOR_SHIFT ) & ((1 << v->data_dev_block_bits) -1 )) + f->io_size =1 << v->data_dev_block_bits; +else + f->io_size = v->fec->roots <<SECTOR_SHIFT ; + f->bufio =dm_bufio_client_create (f->dev->bdev, - f->roots <<SECTOR_SHIFT , + f->io_size,1 ,0 ,NULL ,NULL );if (IS_ERR (f->bufio)) { ti->error ="Cannot initialize FEC bufio client" ;
drivers/md/dm-verity-fec.h +1 -0
@@ -36,6 +36,7 @@ struct dm_verity_fec {struct dm_dev *dev;/* parity data device */ struct dm_bufio_client *data_bufio;/* for data dev access */ struct dm_bufio_client *bufio;/* for parity data access */ +size_t io_size;/* IO size for roots */ sector_t start;/* parity data start in blocks */ sector_t blocks;/* number of blocks covered */ sector_t rounds;/* number of interleaving rounds */
drivers/net/dsa/mv88e6xxx/chip.c +13 -17
@@ -2766,10 +2766,17 @@ static int mv88e6xxx_setup(struct dsa_switch *ds)return err; } +/* prod_id for switch families which do not have a PHY model number */ +static const u16 family_prod_id_table[] = { + [MV88E6XXX_FAMILY_6341 ] =MV88E6XXX_PORT_SWITCH_ID_PROD_6341 , + [MV88E6XXX_FAMILY_6390 ] =MV88E6XXX_PORT_SWITCH_ID_PROD_6390 , +}; +static int mv88e6xxx_mdio_read (struct mii_bus *bus,int phy,int reg) {struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;struct mv88e6xxx_chip *chip = mdio_bus->chip; +u16 prod_id;u16 val;int err;
@@ -2780,23 +2787,12 @@ static int mv88e6xxx_mdio_read(struct mii_bus *bus, int phy, int reg) err = chip->info->ops->phy_read (chip, bus, phy, reg, &val);mv88e6xxx_reg_unlock (chip); -if (reg ==MII_PHYSID2 ) { -/* Some internal PHYs don't have a model number. */ -if (chip->info->family !=MV88E6XXX_FAMILY_6165 ) -/* Then there is the 6165 family. It gets is -* PHYs correct. But it can also have two -* SERDES interfaces in the PHY address -* space. And these don't have a model -* number. But they are not PHYs, so we don't -* want to give them something a PHY driver -* will recognise. -* -* Use the mv88e6390 family model number -* instead, for anything which really could be -* a PHY, -*/ -if (!(val &0x3f0 )) - val |=MV88E6XXX_PORT_SWITCH_ID_PROD_6390 >>4 ; +/* Some internal PHYs don't have a model number. */ +if (reg ==MII_PHYSID2 && !(val &0x3f0 ) && + chip->info->family <ARRAY_SIZE (family_prod_id_table)) { + prod_id = family_prod_id_table[chip->info->family]; +if (prod_id) + val |= prod_id >>4 ; }return err ? err : val;
drivers/net/ethernet/amd/pcnet32.c +3 -2
@@ -1548,8 +1548,7 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent) }pci_set_master (pdev); - ioaddr =pci_resource_start (pdev,0 ); -if (!ioaddr) { +if (!pci_resource_len (pdev,0 )) {if (pcnet32_debug &NETIF_MSG_PROBE )pr_err ("card has no PCI IO resources, aborting\n" ); err = -ENODEV ;
@@ -1562,6 +1561,8 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent)pr_err ("architecture does not support 32bit PCI busmaster DMA\n" ); goto err_disable_dev; } + + ioaddr =pci_resource_start (pdev,0 );if (!request_region (ioaddr,PCNET32_TOTAL_SIZE ,"pcnet32_probe_pci" )) {if (pcnet32_debug &NETIF_MSG_PROBE )pr_err ("io address range already allocated\n" );
drivers/net/ethernet/cadence/macb_main.c +1 -1
@@ -3590,6 +3590,7 @@ static int macb_init(struct platform_device *pdev) reg =gem_readl (bp,DCFG8 ); bp->max_tuples =min ((GEM_BFEXT (SCR2CMP , reg) /3 ),GEM_BFEXT (T2SCR , reg)); +INIT_LIST_HEAD (&bp->rx_fs_list.list);if (bp->max_tuples >0 ) {/* also needs one ethtype match to check IPv4 */ if (GEM_BFEXT (SCR2ETH , reg) >0 ) {
@@ -3600,7 +3601,6 @@ static int macb_init(struct platform_device *pdev)/* Filtering is supported in hw but don't enable it in kernel now */ dev->hw_features |=NETIF_F_NTUPLE ;/* init Rx flow definitions */ -INIT_LIST_HEAD (&bp->rx_fs_list.list); bp->rx_fs_list.count =0 ;spin_lock_init (&bp->rx_fs_lock); }else
drivers/net/ethernet/davicom/dm9000.c +4 -2
@@ -1476,8 +1476,10 @@ dm9000_probe(struct platform_device *pdev)/* Init network device */ ndev =alloc_etherdev (sizeof (struct board_info )); -if (!ndev) -return -ENOMEM ; +if (!ndev) { + ret = -ENOMEM ; + goto out_regulator_disable; + }SET_NETDEV_DEV (ndev, &pdev->dev);
drivers/net/ethernet/ibm/ibmvnic.c +2 -12
@@ -1081,19 +1081,13 @@ static int __ibmvnic_open(struct net_device *netdev) rc =set_link_state (adapter,IBMVNIC_LOGICAL_LNK_UP );if (rc) { -for (i =0 ; i < adapter->req_rx_queues; i++) -napi_disable (&adapter->napi[i]); +ibmvnic_napi_disable (adapter);release_resources (adapter);return rc; }netif_tx_start_all_queues (netdev); -if (prev_state ==VNIC_CLOSED ) { -for (i =0 ; i < adapter->req_rx_queues; i++) -napi_schedule (&adapter->napi[i]); - } - adapter->state =VNIC_OPEN ;return rc; }
@@ -1850,7 +1844,7 @@ static int do_reset(struct ibmvnic_adapter *adapter,u64 old_num_rx_queues, old_num_tx_queues;u64 old_num_rx_slots, old_num_tx_slots;struct net_device *netdev = adapter->netdev; -int i, rc; +int rc;netdev_dbg (adapter->netdev,"Re-setting driver (%d)\n" , rwi->reset_reason);
@@ -1995,10 +1989,6 @@ static int do_reset(struct ibmvnic_adapter *adapter,/* refresh device's multicast list */ ibmvnic_set_multi (netdev); -/* kick napi */ -for (i =0 ; i < adapter->req_rx_queues; i++) -napi_schedule (&adapter->napi[i]); -if (adapter->reset_reason ==VNIC_RESET_FAILOVER || adapter->reset_reason ==VNIC_RESET_MOBILITY ) {call_netdevice_notifiers (NETDEV_NOTIFY_PEERS , netdev);
drivers/net/ethernet/intel/i40e/i40e_main.c +6 -0
@@ -11872,6 +11872,7 @@ static int i40e_sw_init(struct i40e_pf *pf) {int err =0 ;int size; +u16 pow;/* Set default capability flags */ pf->flags = I40E_FLAG_RX_CSUM_ENABLED |
@@ -11890,6 +11891,11 @@ static int i40e_sw_init(struct i40e_pf *pf) pf->rss_table_size = pf->hw.func_caps.rss_table_size; pf->rss_size_max =min_t (int, pf->rss_size_max, pf->hw.func_caps.num_tx_qp); + +/* find the next higher power-of-2 of num cpus */ + pow =roundup_pow_of_two (num_online_cpus ()); + pf->rss_size_max =min_t (int, pf->rss_size_max, pow); +if (pf->hw.func_caps.rss) { pf->flags |=I40E_FLAG_RSS_ENABLED ; pf->alloc_rss_size = min_t(int, pf->rss_size_max,
drivers/net/ethernet/realtek/r8169_main.c +46 -95
289 lines not on this page · raw message
drivers/net/phy/marvell.c +26 -3
@@ -2401,9 +2401,31 @@ static struct phy_driver marvell_drivers[] = { .get_stats = marvell_get_stats, }, { - .phy_id = MARVELL_PHY_ID_88E6390, + .phy_id = MARVELL_PHY_ID_88E6341_FAMILY, .phy_id_mask = MARVELL_PHY_ID_MASK, - .name = "Marvell 88E6390", + .name = "Marvell 88E6341 Family", +/* PHY_GBIT_FEATURES */ + .probe = m88e1510_probe, + .config_init = &marvell_config_init, + .config_aneg = &m88e6390_config_aneg, + .read_status = &marvell_read_status, + .ack_interrupt = &marvell_ack_interrupt, + .config_intr = &marvell_config_intr, + .did_interrupt = &m88e1121_did_interrupt, + .resume = &genphy_resume, + .suspend = &genphy_suspend, + .read_page = marvell_read_page, + .write_page = marvell_write_page, + .get_sset_count = marvell_get_sset_count, + .get_strings = marvell_get_strings, + .get_stats = marvell_get_stats, + .get_tunable = m88e1540_get_tunable, + .set_tunable = m88e1540_set_tunable, + }, + { + .phy_id = MARVELL_PHY_ID_88E6390_FAMILY, + .phy_id_mask = MARVELL_PHY_ID_MASK, + .name = "Marvell 88E6390 Family",/* PHY_GBIT_FEATURES */ .probe = m88e6390_probe, .config_init = &marvell_config_init,
@@ -2441,7 +2463,8 @@ static struct mdio_device_id __maybe_unused marvell_tbl[] = { { MARVELL_PHY_ID_88E1540, MARVELL_PHY_ID_MASK }, { MARVELL_PHY_ID_88E1545, MARVELL_PHY_ID_MASK }, { MARVELL_PHY_ID_88E3016, MARVELL_PHY_ID_MASK }, - { MARVELL_PHY_ID_88E6390, MARVELL_PHY_ID_MASK }, + { MARVELL_PHY_ID_88E6341_FAMILY, MARVELL_PHY_ID_MASK }, + { MARVELL_PHY_ID_88E6390_FAMILY, MARVELL_PHY_ID_MASK }, { } };
drivers/net/wireless/virt_wifi.c +3 -2
@@ -12,6 +12,7 @@#include <net/cfg80211.h> #include <net/rtnetlink.h> #include <linux/etherdevice.h> +#include <linux/math64.h> #include <linux/module.h> static struct wiphy *common_wiphy;
@@ -168,11 +169,11 @@ static void virt_wifi_scan_result(struct work_struct *work) scan_result.work);struct wiphy *wiphy =priv_to_wiphy (priv);struct cfg80211_scan_info scan_info = { .aborted = false }; +u64 tsf =div_u64 (ktime_get_boottime_ns (),1000 ); informed_bss =cfg80211_inform_bss (wiphy, &channel_5ghz,CFG80211_BSS_FTYPE_PRESP , - fake_router_bssid, -ktime_get_boottime_ns (), + fake_router_bssid, tsf,WLAN_CAPABILITY_ESS ,0 , (void *)&ssid,sizeof (ssid),DBM_TO_MBM (-50 ),GFP_KERNEL );
drivers/nvdimm/region_devs.c +7 -2
@@ -1142,6 +1142,11 @@ int nvdimm_has_flush(struct nd_region *nd_region) || !IS_ENABLED(CONFIG_ARCH_HAS_PMEM_API))return -ENXIO ; +/* Test if an explicit flush function is defined */ +if (test_bit (ND_REGION_ASYNC , &nd_region->flags) && nd_region->flush) +return 1 ; + +/* Test if any flush hints for the region are available */ for (i =0 ; i < nd_region->ndr_mappings; i++) {struct nd_mapping *nd_mapping = &nd_region->mapping[i];struct nvdimm *nvdimm = nd_mapping->nvdimm;
@@ -1152,8 +1157,8 @@ int nvdimm_has_flush(struct nd_region *nd_region) }/* -* The platform defines dimm devices without hints, assume -* platform persistence mechanism like ADR +* The platform defines dimm devices without hints nor explicit flush, +* assume platform persistence mechanism like ADR */ return 0 ; }
drivers/scsi/libsas/sas_ata.c +4 -5
@@ -200,18 +200,17 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)memcpy (task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len); task->total_xfer_len = qc->nbytes; task->num_scatter = qc->n_elem; + task->data_dir = qc->dma_dir; + }else if (qc->tf.protocol ==ATA_PROT_NODATA ) { + task->data_dir =DMA_NONE ; }else {for_each_sg (qc->sg, sg, qc->n_elem, si) xfer +=sg_dma_len (sg); task->total_xfer_len = xfer; task->num_scatter = si; - } - -if (qc->tf.protocol ==ATA_PROT_NODATA ) - task->data_dir =DMA_NONE ; -else task->data_dir = qc->dma_dir; + } task->scatter = qc->sg; task->ata_task.retry_count =1 ; task->task_state_flags =SAS_TASK_STATE_PENDING ;
drivers/scsi/qla2xxx/qla_dbg.c +1 -1
@@ -18,7 +18,7 @@* | Device Discovery | 0x2134 | 0x210e-0x2116 | * | | | 0x211a | * | | | 0x211c-0x2128 | -* | | | 0x212a-0x2130 | +* | | | 0x212a-0x2134 | * | Queue Command and IO tracing | 0x3074 | 0x300b | * | | | 0x3027-0x3028 | * | | | 0x303d-0x3041 |
drivers/scsi/qla2xxx/qla_def.h +38 -2
@@ -2281,7 +2281,7 @@ typedef struct {uint8_t fabric_port_name[WWN_SIZE ];uint16_t fp_speed;uint8_t fc4_type; -uint8_t fc4f_nvme;/* nvme fc4 feature bits */ +uint8_t fc4_features; } sw_info_t;/* FCP-4 types */
@@ -2452,7 +2452,7 @@ typedef struct fc_port {u32 supported_classes;uint8_t fc4_type; -uint8_t fc4f_nvme; +uint8_t fc4_features;uint8_t scan_state;unsigned long last_queue_full;
@@ -2466,6 +2466,7 @@ typedef struct fc_port {struct qla_tgt_sess *tgt_session;struct ct_sns_desc ct_desc;enum discovery_state disc_state; +atomic_t shadow_disc_state;enum discovery_state next_disc_state;enum login_state fw_login_state;unsigned long dm_login_expire;
@@ -2483,6 +2484,9 @@ typedef struct fc_port {u16 n2n_chip_reset; } fc_port_t; +#define FC4_PRIORITY_NVME 0 +#define FC4_PRIORITY_FCP 1 +#define QLA_FCPORT_SCAN 1#define QLA_FCPORT_FOUND 2
@@ -2507,6 +2511,19 @@ struct event_arg {extern const char *const port_state_str[5 ]; +static const char *const port_dstate_str[] = { +"DELETED" , +"GNN_ID" , +"GNL" , +"LOGIN_PEND" , +"LOGIN_FAILED" , +"GPDB" , +"UPD_FCPORT" , +"LOGIN_COMPLETE" , +"ADISC" , +"DELETE_PEND" +}; +/* * FC port flags. */
@@ -4298,6 +4315,8 @@ struct qla_hw_data {atomic_t nvme_active_aen_cnt;uint16_t nvme_last_rptd_aen;/* Last recorded aen count */ +uint8_t fc4_type_priority; +atomic_t zio_threshold;uint16_t last_zio_threshold;
@@ -4823,6 +4842,23 @@ struct sff_8247_a0 { ha->current_topology == ISP_CFG_N || \ !ha->current_topology) +#define NVME_TYPE (fcport) \ + (fcport->fc4_type & FS_FC4TYPE_NVME) \ + +#define FCP_TYPE (fcport) \ + (fcport->fc4_type & FS_FC4TYPE_FCP) \ + +#define NVME_ONLY_TARGET (fcport) \ + (NVME_TYPE(fcport) && !FCP_TYPE(fcport)) \ + +#define NVME_FCP_TARGET (fcport) \ + (FCP_TYPE(fcport) && NVME_TYPE(fcport)) \ + +#define NVME_TARGET (ha, fcport) \ + ((NVME_FCP_TARGET(fcport) && \ + (ha->fc4_type_priority == FC4_PRIORITY_NVME)) || \ + NVME_ONLY_TARGET(fcport)) \ +#define PRLI_PHASE (_cls) \ ((_cls == DSC_LS_PRLI_PEND) || (_cls == DSC_LS_PRLI_COMP))
drivers/scsi/qla2xxx/qla_fw.h +2 -0
@@ -2105,4 +2105,6 @@ struct qla_fcp_prio_cfg {#define FA_FLASH_LAYOUT_ADDR_83 (0x3F1000/4)#define FA_FLASH_LAYOUT_ADDR_28 (0x11000/4) +#define NVRAM_DUAL_FCP_NVME_FLAG_OFFSET 0x196 +#endif
drivers/scsi/qla2xxx/qla_gbl.h +3 -0
@@ -80,6 +80,7 @@ extern int qla24xx_async_gnl(struct scsi_qla_host *, fc_port_t *);int qla2x00_post_work (struct scsi_qla_host *vha,struct qla_work_evt *e);extern void *qla2x00_alloc_iocbs_ready (struct qla_qpair *,srb_t *);extern int qla24xx_update_fcport_fcp_prio (scsi_qla_host_t *,fc_port_t *); +extern int qla24xx_async_abort_cmd (srb_t *,bool );extern void qla2x00_set_fcport_state (fc_port_t *fcport,int state); extern fc_port_t *
@@ -255,6 +256,7 @@ extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *);extern void qla2x00_mark_device_lost (scsi_qla_host_t *,fc_port_t *,int ,int );extern void qla2x00_mark_all_devices_lost (scsi_qla_host_t *,int ); +extern int qla24xx_async_abort_cmd (srb_t *,bool );extern struct fw_blob *qla2x00_request_firmware (scsi_qla_host_t *);
@@ -917,4 +919,5 @@ int qla2x00_set_data_rate(scsi_qla_host_t *vha, uint16_t mode);/* nvme.c */ void qla_nvme_unregister_remote_port (struct fc_port *fcport); +void qla_handle_els_plogi_done (scsi_qla_host_t *vha,struct event_arg *ea);#endif /* _QLA_GBL_H */
drivers/scsi/qla2xxx/qla_gs.c +26 -18
91 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_init.c +78 -55
333 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_inline.h +36 -0
@@ -105,6 +105,30 @@ qla2x00_clean_dsd_pool(struct qla_hw_data *ha, struct crc_context *ctx)INIT_LIST_HEAD (&ctx->dsd_list); } +static inline void +qla2x00_set_fcport_disc_state (fc_port_t *fcport,int state) +{ +int old_val; +uint8_t shiftbits, mask; + +/* This will have to change when the max no. of states > 16 */ + shiftbits =4 ; + mask = (1 << shiftbits) -1 ; + + fcport->disc_state = state; +while (1 ) { + old_val =atomic_read (&fcport->shadow_disc_state); +if (old_val ==atomic_cmpxchg (&fcport->shadow_disc_state, + old_val, (old_val << shiftbits) | state)) { +ql_dbg (ql_dbg_disc, fcport->vha,0x2134 , +"FCPort %8phC disc_state transition: %s to %s - portid=%06x.\n" , + fcport->port_name, port_dstate_str[old_val & mask], + port_dstate_str[state], fcport->d_id.b24); +return ; + } + } +} +static inline int qla2x00_hba_err_chk_enabled (srb_t *sp) {
@@ -312,3 +336,15 @@ qla_83xx_start_iocbs(struct qla_qpair *qpair)WRT_REG_DWORD (req->req_q_in, req->ring_index); } + +static inline int +qla2xxx_get_fc4_priority (struct scsi_qla_host *vha) +{ +uint32_t data; + + data = + ((uint8_t *)vha->hw->nvram)[NVRAM_DUAL_FCP_NVME_FLAG_OFFSET ]; + + +return ((data >>6 ) &BIT_0 ); +}
drivers/scsi/qla2xxx/qla_iocb.c +39 -14
105 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_mbx.c +6 -5
@@ -1924,7 +1924,7 @@ qla2x00_get_port_database(scsi_qla_host_t *vha, fc_port_t *fcport, uint8_t opt) pd24 = (struct port_database_24xx *) pd;/* Check for logged in state. */ -if (fcport->fc4f_nvme) { +if (NVME_TARGET (ha, fcport)) { current_login_state = pd24->current_login_state >>4 ; last_login_state = pd24->last_login_state >>4 ; }else {
@@ -3891,8 +3891,9 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, fcport->scan_state =QLA_FCPORT_FOUND ; fcport->n2n_flag =1 ; fcport->keep_nport_handle =1 ; + fcport->fc4_type =FS_FC4TYPE_FCP ;if (vha->flags.nvme_enabled) - fcport->fc4f_nvme =1 ; + fcport->fc4_type |=FS_FC4TYPE_NVME ;switch (fcport->disc_state) {case DSC_DELETED :
@@ -6350,7 +6351,7 @@ int __qla24xx_parse_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport,uint64_t zero =0 ;u8 current_login_state, last_login_state; -if (fcport->fc4f_nvme) { +if (NVME_TARGET (vha->hw, fcport)) { current_login_state = pd->current_login_state >>4 ; last_login_state = pd->last_login_state >>4 ; }else {
@@ -6385,8 +6386,8 @@ int __qla24xx_parse_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, fcport->d_id.b.al_pa = pd->port_id[2 ]; fcport->d_id.b.rsvd_1 =0 ; -if (fcport->fc4f_nvme) { - fcport->port_type =0 ; +if (NVME_TARGET (vha->hw, fcport)) { + fcport->port_type =FCT_NVME ;if ((pd->prli_svc_param_word_3[0 ] &BIT_5 ) ==0 ) fcport->port_type |=FCT_NVME_INITIATOR ;if ((pd->prli_svc_param_word_3[0 ] &BIT_4 ) ==0 )
drivers/scsi/qla2xxx/qla_os.c +9 -10
@@ -5014,7 +5014,7 @@ void qla24xx_sched_upd_fcport(fc_port_t *fcport) fcport->jiffies_at_registration = jiffies; fcport->sec_since_registration =0 ; fcport->next_disc_state =DSC_DELETED ; - fcport->disc_state =DSC_UPD_FCPORT ; +qla2x00_set_fcport_disc_state (fcport,DSC_UPD_FCPORT );spin_unlock_irqrestore (&fcport->vha->work_lock, flags);queue_work (system_unbound_wq, &fcport->reg_work);
@@ -5055,19 +5055,17 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e) fcport->d_id = e->u.new_sess.id; fcport->flags |=FCF_FABRIC_DEVICE ; fcport->fw_login_state =DSC_LS_PLOGI_PEND ; -if (e->u.new_sess.fc4_type ==FS_FC4TYPE_FCP ) - fcport->fc4_type =FC4_TYPE_FCP_SCSI ; - -if (e->u.new_sess.fc4_type ==FS_FC4TYPE_NVME ) { - fcport->fc4_type =FC4_TYPE_OTHER ; - fcport->fc4f_nvme =FC4_TYPE_NVME ; - }memcpy (fcport->port_name, e->u.new_sess.port_name,WWN_SIZE ); -if (e->u.new_sess.fc4_type &FS_FCP_IS_N2N ) + fcport->fc4_type = e->u.new_sess.fc4_type; +if (e->u.new_sess.fc4_type &FS_FCP_IS_N2N ) { + fcport->fc4_type =FS_FC4TYPE_FCP ; fcport->n2n_flag =1 ; +if (vha->flags.nvme_enabled) + fcport->fc4_type |=FS_FC4TYPE_NVME ; + } }else { ql_dbg(ql_dbg_disc, vha, 0xffff,
@@ -5171,7 +5169,8 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e) fcport->flags &= ~FCF_FABRIC_DEVICE ; fcport->keep_nport_handle =1 ;if (vha->flags.nvme_enabled) { - fcport->fc4f_nvme =1 ; + fcport->fc4_type = + (FS_FC4TYPE_NVME |FS_FC4TYPE_FCP ); fcport->n2n_flag =1 ; } fcport->fw_login_state =0 ;
drivers/scsi/qla2xxx/qla_target.c +6 -5
@@ -596,7 +596,8 @@ static void qla2x00_async_nack_sp_done(srb_t *sp, int res)spin_lock_irqsave (&vha->hw->tgt.sess_lock, flags); }else { sp->fcport->login_retry =0 ; - sp->fcport->disc_state =DSC_LOGIN_COMPLETE ; +qla2x00_set_fcport_disc_state (sp->fcport, +DSC_LOGIN_COMPLETE ); sp->fcport->deleted =0 ; sp->fcport->logout_on_delete =1 ; }
@@ -1056,7 +1057,7 @@ void qlt_free_session_done(struct work_struct *work) tgt->sess_count--; } - sess->disc_state =DSC_DELETED ; +qla2x00_set_fcport_disc_state (sess,DSC_DELETED ); sess->fw_login_state =DSC_LS_PORT_UNAVAIL ; sess->deleted =QLA_SESS_DELETED ;
@@ -1166,7 +1167,7 @@ void qlt_unreg_sess(struct fc_port *sess) vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map (sess); sess->deleted =QLA_SESS_DELETION_IN_PROGRESS ; - sess->disc_state =DSC_DELETE_PEND ; +qla2x00_set_fcport_disc_state (sess,DSC_DELETE_PEND ); sess->last_rscn_gen = sess->rscn_gen; sess->last_login_gen = sess->login_gen;
@@ -1268,7 +1269,7 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)spin_unlock_irqrestore (&sess->vha->work_lock, flags); sess->prli_pend_timer =0 ; - sess->disc_state =DSC_DELETE_PEND ; +qla2x00_set_fcport_disc_state (sess,DSC_DELETE_PEND );qla24xx_chk_fcp_state (sess);
@@ -6061,7 +6062,7 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,if (!IS_SW_RESV_ADDR (fcport->d_id)) vha->fcport_count++; fcport->login_gen++; - fcport->disc_state =DSC_LOGIN_COMPLETE ; +qla2x00_set_fcport_disc_state (fcport,DSC_LOGIN_COMPLETE ); fcport->login_succ =1 ; newfcport =1 ; }
drivers/scsi/scsi_transport_srp.c +1 -1
@@ -541,7 +541,7 @@ int srp_reconnect_rport(struct srp_rport *rport) res =mutex_lock_interruptible (&rport->mutex);if (res) goto out; -if (rport->state !=SRP_RPORT_FAIL_FAST ) +if (rport->state !=SRP_RPORT_FAIL_FAST && rport->state !=SRP_RPORT_LOST )/* * sdev state must be SDEV_TRANSPORT_OFFLINE, transition * to SDEV_BLOCK is illegal. Calling scsi_target_unblock()
drivers/vfio/pci/vfio_pci.c +3 -1
@@ -1474,6 +1474,8 @@ static int vfio_pci_mmap(void *device_data, struct vm_area_struct *vma) index = vma->vm_pgoff >> (VFIO_PCI_OFFSET_SHIFT -PAGE_SHIFT ); +if (index >=VFIO_PCI_NUM_REGIONS + vdev->num_regions) +return -EINVAL ;if (vma->vm_end < vma->vm_start)return -EINVAL ;if ((vma->vm_flags &VM_SHARED ) ==0 )
@@ -1482,7 +1484,7 @@ static int vfio_pci_mmap(void *device_data, struct vm_area_struct *vma)int regnum = index -VFIO_PCI_NUM_REGIONS ;struct vfio_pci_region *region = vdev->region + regnum; -if (region && region->ops && region->ops->mmap && +if (region->ops && region->ops->mmap && (region->flags &VFIO_REGION_INFO_FLAG_MMAP ))return region->ops->mmap (vdev, region, vma);return -EINVAL ;
fs/readdir.c +6 -0
@@ -150,6 +150,9 @@ static int fillonedir(struct dir_context *ctx, const char *name, int namlen,if (buf->result)return -EINVAL ; + buf->result =verify_dirent_name (name, namlen); +if (buf->result <0 ) +return buf->result; d_ino = ino;if (sizeof (d_ino) <sizeof (ino) && d_ino != ino) { buf->result = -EOVERFLOW ;
@@ -417,6 +420,9 @@ static int compat_fillonedir(struct dir_context *ctx, const char *name,if (buf->result)return -EINVAL ; + buf->result =verify_dirent_name (name, namlen); +if (buf->result <0 ) +return buf->result; d_ino = ino;if (sizeof (d_ino) <sizeof (ino) && d_ino != ino) { buf->result = -EOVERFLOW ;
include/linux/marvell_phy.h +3 -2
@@ -23,11 +23,12 @@#define MARVELL_PHY_ID_88X3310 0x002b09a0#define MARVELL_PHY_ID_88E2110 0x002b09b0 -/* The MV88e6390 Ethernet switch contains embedded PHYs. These PHYs do +/* These Ethernet switch families contain embedded PHYs, but they do * not have a model ID. So the switch driver traps reads to the ID2 * register and returns the switch family ID */ -#define MARVELL_PHY_ID_88E6390 0x01410f90 +#define MARVELL_PHY_ID_88E6341_FAMILY 0x01410f41 +#define MARVELL_PHY_ID_88E6390_FAMILY 0x01410f90#define MARVELL_PHY_FAMILY_ID (id) ((id) >> 4)
include/linux/netfilter_arp/arp_tables.h +3 -2
@@ -52,8 +52,9 @@ extern void *arpt_alloc_initial_table(const struct xt_table *);int arpt_register_table (struct net *net,const struct xt_table *table,const struct arpt_replace *repl,const struct nf_hook_ops *ops,struct xt_table **res); -void arpt_unregister_table (struct net *net,struct xt_table *table, -const struct nf_hook_ops *ops); +void arpt_unregister_table (struct net *net,struct xt_table *table); +void arpt_unregister_table_pre_exit (struct net *net,struct xt_table *table, +const struct nf_hook_ops *ops);extern unsigned int arpt_do_table (struct sk_buff *skb,const struct nf_hook_state *state,struct xt_table *table);
include/linux/netfilter_bridge/ebtables.h +3 -2
@@ -110,8 +110,9 @@ extern int ebt_register_table(struct net *net,const struct ebt_table *table, const struct nf_hook_ops *ops, struct ebt_table **res); -extern void ebt_unregister_table (struct net *net,struct ebt_table *table, -const struct nf_hook_ops *); +extern void ebt_unregister_table (struct net *net,struct ebt_table *table); +void ebt_unregister_table_pre_exit (struct net *net,const char *tablename, +const struct nf_hook_ops *ops);extern unsigned int ebt_do_table (struct sk_buff *skb,const struct nf_hook_state *state,struct ebt_table *table);
kernel/locking/lockdep.c +2 -1
@@ -875,7 +875,8 @@ static bool assign_lock_key(struct lockdep_map *lock)/* Debug-check: all keys must be persistent! */ debug_locks_off ();pr_err ("INFO: trying to register non-static key.\n" ); -pr_err ("the code is fine but needs lockdep annotation.\n" ); +pr_err ("The code is fine but needs lockdep annotation, or maybe\n" ); +pr_err ("you didn't initialize this object before use?\n" );pr_err ("turning off the locking correctness validator.\n" );dump_stack ();return false;
net/bridge/netfilter/ebtable_broute.c +7 -1
@@ -105,14 +105,20 @@ static int __net_init broute_net_init(struct net *net) &net->xt.broute_table); } +static void __net_exit broute_net_pre_exit(struct net *net) +{ +ebt_unregister_table_pre_exit (net,"broute" , &ebt_ops_broute); +} + static void __net_exit broute_net_exit(struct net *net) { -ebt_unregister_table (net, net->xt.broute_table, &ebt_ops_broute); +ebt_unregister_table (net, net->xt.broute_table); }static struct pernet_operations broute_net_ops = { .init = broute_net_init, .exit = broute_net_exit, + .pre_exit = broute_net_pre_exit, };static int __init ebtable_broute_init (void )
net/bridge/netfilter/ebtable_filter.c +7 -1
@@ -99,14 +99,20 @@ static int __net_init frame_filter_net_init(struct net *net) &net->xt.frame_filter); } +static void __net_exit frame_filter_net_pre_exit(struct net *net) +{ +ebt_unregister_table_pre_exit (net,"filter" , ebt_ops_filter); +} + static void __net_exit frame_filter_net_exit(struct net *net) { -ebt_unregister_table (net, net->xt.frame_filter, ebt_ops_filter); +ebt_unregister_table (net, net->xt.frame_filter); }static struct pernet_operations frame_filter_net_ops = { .init = frame_filter_net_init, .exit = frame_filter_net_exit, + .pre_exit = frame_filter_net_pre_exit, };static int __init ebtable_filter_init (void )
net/bridge/netfilter/ebtable_nat.c +7 -1
@@ -99,14 +99,20 @@ static int __net_init frame_nat_net_init(struct net *net) &net->xt.frame_nat); } +static void __net_exit frame_nat_net_pre_exit(struct net *net) +{ +ebt_unregister_table_pre_exit (net,"nat" , ebt_ops_nat); +} + static void __net_exit frame_nat_net_exit(struct net *net) { -ebt_unregister_table (net, net->xt.frame_nat, ebt_ops_nat); +ebt_unregister_table (net, net->xt.frame_nat); }static struct pernet_operations frame_nat_net_ops = { .init = frame_nat_net_init, .exit = frame_nat_net_exit, + .pre_exit = frame_nat_net_pre_exit, };static int __init ebtable_nat_init (void )
net/bridge/netfilter/ebtables.c +27 -3
@@ -1237,10 +1237,34 @@ int ebt_register_table(struct net *net, const struct ebt_table *input_table,return ret; } -void ebt_unregister_table (struct net *net,struct ebt_table *table, -const struct nf_hook_ops *ops) +static struct ebt_table *__ebt_find_table (struct net *net,const char *name) +{ +struct ebt_table *t; + +mutex_lock (&ebt_mutex); + +list_for_each_entry (t, &net->xt.tables[NFPROTO_BRIDGE ], list) { +if (strcmp (t->name, name) ==0 ) { +mutex_unlock (&ebt_mutex); +return t; + } + } + +mutex_unlock (&ebt_mutex); +return NULL ; +} + +void ebt_unregister_table_pre_exit (struct net *net,const char *name,const struct nf_hook_ops *ops) +{ +struct ebt_table *table =__ebt_find_table (net, name); + +if (table) +nf_unregister_net_hooks (net, ops,hweight32 (table->valid_hooks)); +} +EXPORT_SYMBOL (ebt_unregister_table_pre_exit); + +void ebt_unregister_table (struct net *net,struct ebt_table *table) { -nf_unregister_net_hooks (net, ops,hweight32 (table->valid_hooks));__ebt_unregister_table (net, table); }
net/core/dev.c +2 -1
@@ -5406,7 +5406,8 @@ static void skb_gro_reset_offset(struct sk_buff *skb)if (skb_mac_header (skb) ==skb_tail_pointer (skb) && pinfo->nr_frags && - !PageHighMem (skb_frag_page (frag0))) { + !PageHighMem (skb_frag_page (frag0)) && + (!NET_IP_ALIGN || !(skb_frag_off (frag0) &3 ))) {NAPI_GRO_CB (skb)->frag0 =skb_frag_address (frag0); NAPI_GRO_CB(skb)->frag0_len = min_t(unsigned int, skb_frag_size(frag0),
net/core/neighbour.c +1 -1
@@ -1379,7 +1379,7 @@ static int __neigh_update(struct neighbour *neigh, const u8 *lladdr,* we can reinject the packet there. */ n2 =NULL ; -if (dst) { +if (dst && dst->obsolete !=DST_OBSOLETE_DEAD ) { n2 =dst_neigh_lookup_skb (dst, skb);if (n2) n1 = n2;
net/ieee802154/nl802154.c +41 -0
107 lines not on this page · raw message
net/ipv4/netfilter/arp_tables.c +7 -2
@@ -1580,10 +1580,15 @@ int arpt_register_table(struct net *net,return ret; } -void arpt_unregister_table (struct net *net,struct xt_table *table, -const struct nf_hook_ops *ops) +void arpt_unregister_table_pre_exit (struct net *net,struct xt_table *table, +const struct nf_hook_ops *ops) {nf_unregister_net_hooks (net, ops,hweight32 (table->valid_hooks)); +} +EXPORT_SYMBOL (arpt_unregister_table_pre_exit); + +void arpt_unregister_table (struct net *net,struct xt_table *table) +{__arpt_unregister_table (net, table); }
net/ipv4/netfilter/arptable_filter.c +9 -1
@@ -56,16 +56,24 @@ static int __net_init arptable_filter_table_init(struct net *net)return err; } +static void __net_exit arptable_filter_net_pre_exit(struct net *net) +{ +if (net->ipv4.arptable_filter) +arpt_unregister_table_pre_exit (net, net->ipv4.arptable_filter, + arpfilter_ops); +} + static void __net_exit arptable_filter_net_exit(struct net *net) {if (!net->ipv4.arptable_filter)return ; -arpt_unregister_table (net, net->ipv4.arptable_filter, arpfilter_ops); +arpt_unregister_table (net, net->ipv4.arptable_filter); net->ipv4.arptable_filter =NULL ; }static struct pernet_operations arptable_filter_net_ops = { .exit = arptable_filter_net_exit, + .pre_exit = arptable_filter_net_pre_exit, };static int __init arptable_filter_init (void )
net/ipv6/ip6_tunnel.c +10 -0
@@ -2217,6 +2217,16 @@ static void __net_exit ip6_tnl_destroy_tunnels(struct net *net, struct list_head t =rtnl_dereference (t->next); } } + + t =rtnl_dereference (ip6n->tnls_wc[0 ]); +while (t) { +/* If dev is in the same netns, it has already +* been added to the list by the previous loop. +*/ +if (!net_eq (dev_net (t->dev), net)) +unregister_netdevice_queue (t->dev, list); + t =rtnl_dereference (t->next); + } }static int __net_init ip6_tnl_init_net (struct net *net)
net/ipv6/sit.c +2 -2
@@ -1819,9 +1819,9 @@ static void __net_exit sit_destroy_tunnels(struct net *net,if (dev->rtnl_link_ops == &sit_link_ops)unregister_netdevice_queue (dev, head); -for (prio =1 ; prio <4 ; prio++) { +for (prio =0 ; prio <4 ; prio++) {int h; -for (h =0 ; h <IP6_SIT_HASH_SIZE ; h++) { +for (h =0 ; h < (prio ?IP6_SIT_HASH_SIZE :1 ); h++) {struct ip_tunnel *t; t =rtnl_dereference (sitn->tunnels[prio][h]);
net/mac80211/cfg.c +3 -1
@@ -1670,8 +1670,10 @@ static int ieee80211_change_station(struct wiphy *wiphy, }if (sta->sdata->vif.type ==NL80211_IFTYPE_AP_VLAN && - sta->sdata->u.vlan.sta) + sta->sdata->u.vlan.sta) { +ieee80211_clear_fast_rx (sta);RCU_INIT_POINTER (sta->sdata->u.vlan.sta,NULL ); + }if (test_sta_flag (sta,WLAN_STA_AUTHORIZED ))ieee80211_vif_dec_num_mcast (sta->sdata);
net/netfilter/nf_conntrack_standalone.c +1 -0
@@ -266,6 +266,7 @@ static const char* l4proto_name(u16 proto)case IPPROTO_GRE :return "gre" ;case IPPROTO_SCTP :return "sctp" ;case IPPROTO_UDPLITE :return "udplite" ; +case IPPROTO_ICMPV6 :return "icmpv6" ; }return "unknown" ;
net/netfilter/nft_limit.c +2 -2
@@ -76,13 +76,13 @@ static int nft_limit_init(struct nft_limit *limit,return -EOVERFLOW ;if (pkts) { - tokens =div_u64 (limit->nsecs, limit->rate) * limit->burst; + tokens =div64_u64 (limit->nsecs, limit->rate) * limit->burst; }else {/* The token bucket size limits the number of tokens can be * accumulated. tokens_max specifies the bucket size. * tokens_max = unit * (rate + burst) / rate. */ - tokens =div_u64 (limit->nsecs * (limit->rate + limit->burst), + tokens =div64_u64 (limit->nsecs * (limit->rate + limit->burst), limit->rate); }
net/sctp/socket.c +5 -8
@@ -1539,11 +1539,9 @@ static void sctp_close(struct sock *sk, long timeout)/* Supposedly, no process has access to the socket, but * the net layers still may. -* Also, sctp_destroy_sock() needs to be called with addr_wq_lock -* held and that should be grabbed before socket lock. */ -spin_lock_bh (&net->sctp.addr_wq_lock); -bh_lock_sock_nested (sk); +local_bh_disable (); +bh_lock_sock (sk);/* Hold the sock, since sk_common_release() will put sock_put() * and we have just a little more cleanup.
@@ -1552,7 +1550,7 @@ static void sctp_close(struct sock *sk, long timeout)sk_common_release (sk);bh_unlock_sock (sk); -spin_unlock_bh (&net->sctp.addr_wq_lock); +local_bh_enable ();sock_put (sk);
@@ -5115,9 +5113,6 @@ static int sctp_init_sock(struct sock *sk)sk_sockets_allocated_inc (sk);sock_prot_inuse_add (net, sk->sk_prot,1 ); -/* Nothing can fail after this block, otherwise -* sctp_destroy_sock() will be called without addr_wq_lock held -*/ if (net->sctp.default_auto_asconf) {spin_lock (&sock_net (sk)->sctp.addr_wq_lock); list_add_tail(&sp->auto_asconf_list,
@@ -5152,7 +5147,9 @@ static void sctp_destroy_sock(struct sock *sk)if (sp->do_auto_asconf) { sp->do_auto_asconf =0 ; +spin_lock_bh (&sock_net (sk)->sctp.addr_wq_lock);list_del (&sp->auto_asconf_list); +spin_unlock_bh (&sock_net (sk)->sctp.addr_wq_lock); }sctp_endpoint_free (sp->ep);local_bh_disable ();
sound/soc/codecs/max98373.c +2 -0
@@ -410,11 +410,13 @@ static int max98373_dac_event(struct snd_soc_dapm_widget *w,regmap_update_bits (max98373->regmap,MAX98373_R20FF_GLOBAL_SHDN ,MAX98373_GLOBAL_EN_MASK ,1 ); +usleep_range (30000 ,31000 );break ;case SND_SOC_DAPM_POST_PMD :regmap_update_bits (max98373->regmap,MAX98373_R20FF_GLOBAL_SHDN ,MAX98373_GLOBAL_EN_MASK ,0 ); +usleep_range (30000 ,31000 ); max98373->tdm_mode = false;break ;default :
sound/soc/fsl/fsl_esai.c +5 -3
@@ -494,11 +494,13 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream,ESAI_SAICR_SYNC , esai_priv->synchronous ? ESAI_SAICR_SYNC : 0); -/* Set a default slot number -- 2 */ +/* Set slots count */ regmap_update_bits (esai_priv->regmap,REG_ESAI_TCCR , - ESAI_xCCR_xDC_MASK,ESAI_xCCR_xDC (2 )); + ESAI_xCCR_xDC_MASK, +ESAI_xCCR_xDC (esai_priv->slots));regmap_update_bits (esai_priv->regmap,REG_ESAI_RCCR , - ESAI_xCCR_xDC_MASK,ESAI_xCCR_xDC (2 )); + ESAI_xCCR_xDC_MASK, +ESAI_xCCR_xDC (esai_priv->slots)); }return 0 ;
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.4.114 kernel.
All users of the 5.4 kernel series must upgrade.
Quoted 9 lines
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.4.114,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.4.y
Version: 5.4.114
Commit: a7eb81c1d11ae311c25db88c25a7d5228fe5680a
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 5764
passed: 5764
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 5764
passed: 5764
failed: 0
timeout: 0
--------------------------------------------------------------------