Linux 5.11.16
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.11.16 kernel.
All users of the 5.11 kernel series must upgrade.
The updated 5.11.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.11.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/Kconfig | 8 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/mach-omap2/board-generic.c | 2 arch/arm/mach-omap2/sr_device.c | 2 arch/arm/mm/mmu.c | 3 arch/arm/mm/pmsa-v7.c | 4 arch/arm/mm/pmsa-v8.c | 4 arch/arm/probes/uprobes/core.c | 4 arch/arm64/Kconfig | 6 arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-lts.dts | 4 arch/arm64/boot/dts/allwinner/sun50i-a64-sopine.dtsi | 2 arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts | 4 arch/arm64/include/asm/alternative-macros.h | 8 arch/arm64/include/asm/word-at-a-time.h | 10 arch/arm64/kernel/entry.S | 10 arch/arm64/kernel/sleep.S | 2 arch/ia64/configs/generic_defconfig | 2 arch/powerpc/kernel/signal_32.c | 20 - arch/riscv/Kconfig | 2 arch/x86/kernel/acpi/wakeup_64.S | 2 arch/x86/kernel/setup.c | 5 arch/x86/kvm/vmx/nested.c | 42 +-- arch/x86/kvm/vmx/vmx.c | 78 ++--- arch/x86/kvm/vmx/vmx.h | 25 + drivers/dma/dmaengine.c | 1 drivers/dma/dw/Kconfig | 2 drivers/dma/idxd/device.c | 65 +++- drivers/dma/idxd/idxd.h | 3 drivers/dma/idxd/init.c | 11 drivers/dma/idxd/irq.c | 4 drivers/dma/idxd/sysfs.c | 19 - drivers/dma/plx_dma.c | 18 - drivers/gpio/gpiolib-sysfs.c | 8 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.h | 1 drivers/gpu/drm/i915/display/vlv_dsi.c | 4 drivers/gpu/drm/i915/intel_pm.c | 4 drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 2 drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 4 drivers/gpu/drm/xen/xen_drm_front.c | 6 drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 40 ++ drivers/hid/amd-sfh-hid/amd_sfh_pcie.h | 1 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/mtd/nand/raw/mtk_nand.c | 4 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/chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 102 ------- drivers/net/ethernet/davicom/dm9000.c | 6 drivers/net/ethernet/ibm/ibmvnic.c | 25 - drivers/net/ethernet/intel/i40e/i40e_main.c | 6 drivers/net/ethernet/intel/ice/ice_dcb.c | 4 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 14 - drivers/net/ethernet/mellanox/mlx5/core/en/port.c | 23 - drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 3 drivers/net/ethernet/realtek/r8169_main.c | 18 - drivers/net/ethernet/xilinx/xilinx_axienet.h | 12 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 12 drivers/net/phy/marvell.c | 32 ++ drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 1 drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 7 drivers/net/wireless/virt_wifi.c | 5 drivers/nvdimm/region_devs.c | 9 drivers/remoteproc/pru_rproc.c | 18 + drivers/scsi/libsas/sas_ata.c | 9 drivers/scsi/scsi_transport_srp.c | 2 drivers/vfio/pci/vfio_pci.c | 4 fs/readdir.c | 6 include/linux/bpf.h | 2 include/linux/kasan.h | 2 include/linux/marvell_phy.h | 5 include/linux/netfilter_arp/arp_tables.h | 5 include/linux/netfilter_bridge/ebtables.h | 5 include/uapi/linux/idxd.h | 4 kernel/bpf/trampoline.c | 30 ++ kernel/bpf/verifier.c | 138 ++++++---- kernel/locking/lockdep.c | 3 lib/Kconfig.debug | 6 lib/Kconfig.kasan | 9 mm/kasan/common.c | 2 mm/kasan/kasan.h | 2 mm/kasan/report_generic.c | 2 mm/ptdump.c | 2 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/ethtool/pause.c | 8 net/ieee802154/nl802154.c | 41 ++ net/ipv4/netfilter/arp_tables.c | 9 net/ipv4/netfilter/arptable_filter.c | 10 net/ipv4/sysctl_net_ipv4.c | 16 - 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/nf_flow_table_offload.c | 6 net/netfilter/nf_tables_api.c | 46 ++- net/netfilter/nft_limit.c | 4 net/sctp/socket.c | 13 net/xfrm/xfrm_output.c | 13 scripts/Makefile.kasan | 20 - security/Kconfig.hardening | 4 sound/soc/codecs/max98373-i2c.c | 1 sound/soc/codecs/max98373-sdw.c | 1 sound/soc/codecs/max98373.c | 2 sound/soc/fsl/fsl_esai.c | 8 tools/include/uapi/asm/errno.h | 2 tools/lib/bpf/xsk.c | 5 127 files changed, 916 insertions(+), 520 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 Duyck (1):
ixgbe: Fix NULL pointer dereference in ethtool loopback test
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
Ard Biesheuvel (1):
ARM: 9063/1: mm: reduce maximum number of CPUs if DEBUG_KMAP_LOCAL is enabled
Arnd Bergmann (4):
ARM: keystone: fix integer overflow warning
ARM: omap1: fix building with clang IAS
Input: i8042 - fix Pegatron C15B ID entry
kasan: fix hwasan build for gcc
Aya Levin (1):
net/mlx5e: Fix setting of RS FEC mode
Caleb Connolly (1):
Input: s6sy761 - fix coordinate read bit shift
Catalin Marinas (1):
arm64: mte: Ensure TIF_MTE_ASYNC_FAULT is set atomically
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
Christophe Leroy (2):
powerpc/signal32: Fix Oops on sigreturn with unmapped VDSO
mm: ptdump: fix build failure
Ciara Loftus (1):
libbpf: Fix potential NULL pointer dereference
Claudiu Beznea (1):
net: macb: fix the restore of cmp registers
Colin Ian King (1):
ice: Fix potential infinite loop when using u8 loop counter
Dan Carpenter (1):
dmaengine: plx_dma: add a missing put_device() on error path
Daniel Borkmann (6):
bpf: Use correct permission flag for mixed signed bounds arithmetic
bpf: Ensure off_reg has no mixed signed bounds for all types
bpf: Move off_reg into sanitize_ptr_alu
bpf: Rework ptr_limit into alu_limit and add common error path
bpf: Improve verifier error messages for users
bpf: Move sanitize_val_alu out of op switch
Daniel Mack (1):
net: axienet: allow setups without MDIO
Dave Jiang (6):
dmaengine: idxd: Fix clobbering of SWERR overflow bit on writeback
dmaengine: idxd: fix delta_rec and crc size field for completion record
dmaengine: idxd: fix opcap sysfs attribute output
dmaengine: idxd: fix wq size store permission state
dmaengine: idxd: clear MSIX permission entry on shutdown
dmaengine: idxd: fix wq cleanup of WQCFG registers
Dimitar Dimitrov (1):
remoteproc: pru: Fix loading of GNU Binutils ELF
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.11.16
Guenter Roeck (1):
pcnet32: Use pci_resource_len to validate PCI resource
Hans de Goede (4):
AMD_SFH: Removed unused activecontrolstatus member from the amd_mp2_dev struct
AMD_SFH: Add sensor_mask module parameter
AMD_SFH: Add DMI quirk table for BIOS-es which don't set the activestatus bits drm/i915/display/vlv_dsi: Do not skip panel_pwr_cycle_delay when disabling the panel
Hauke Mehrtens (1):
mtd: rawnand: mtk: Fix WAITRDY break condition and timeout
Heiner Kallweit (2):
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
Jakub Kicinski (1):
ethtool: pause: make sure we init driver stats
Jason Xing (1):
i40e: fix the panic when running bpf in xdpdrv mode
Jernej Skrabec (1):
arm64: dts: allwinner: h6: beelink-gs1: Remove ext. 32 kHz osc reference
Jiri Kosina (1):
iwlwifi: Fix softirq/hardirq disabling in iwl_pcie_enqueue_hcmd()
Jiri Olsa (1):
bpf: Take module reference for trampoline in module
John Paul Adrian Glaubitz (1):
ia64: tools: remove inclusion of ia64-specific version of errno.h header
Jolly Shah (1):
scsi: libsas: Reset num_scatter if libata marks qc as NODATA
Jonathon Reinhart (1):
net: Make tcp_allowed_congestion_control readonly in non-init netns
Julian Braha (1):
lib: fix kconfig dependency on ARCH_WANT_FRAME_POINTERS
Kefeng Wang (1):
riscv: Fix spelling mistake "SPARSEMEM" to "SPARSMEM"
Lijun Pan (4):
ibmvnic: correctly use dev_consume/free_skb_irq
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
Lv Yunlong (2):
dmaengine: Fix a double free in dma_async_device_register gpu/xen: Fix a use after free in xen_drm_drv_init
Martin Wilck (1):
scsi: scsi_transport_srp: Don't block target in SRP_PORT_LOST state
Matt Chen (1):
iwlwifi: add support for Qu with AX201 device
Matti Vaittinen (1):
gpio: sysfs: Obey valid_mask
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 (3):
netfilter: flowtable: fix NAT IPv6 offload mangling
netfilter: conntrack: do not print icmpv6 as unknown via /proc
netfilter: nftables: clone set element expression template
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
Qingqing Zhuo (1):
drm/amd/display: Add missing mask for DCN3
Rafael J. Wysocki (1):
ACPI: x86: Call acpi_boot_table_init() after acpi_table_upgrade()
Randy Dunlap (1):
ia64: remove duplicate entries in generic_defconfig
Reiji Watanabe (1):
KVM: VMX: Don't use vcpu->run->internal.ndata as an array index
Rob Clark (1):
drm/msm: Fix a5xx/a6xx timestamps
Russell King (1):
ARM: footbridge: fix PCI interrupt mapping
Ryan Lee (2):
ASoC: max98373: Changed amp shutdown register as volatile
ASoC: max98373: Added 30ms turn on/off time delay
Sean Christopherson (1):
KVM: VMX: Convert vcpu_vmx.exit_reason to a union
Seevalamuthu Mariappan (1):
mac80211: clear sta->fast_rx when STA removed from 4-addr VLAN
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 (4):
ARM: dts: Drop duplicate sha2md5_fck to fix clk_disable race
ARM: dts: Fix moving mmc devices with aliases for omap4 & 5
ARM: OMAP2+: Fix warning for omap_init_time_of()
ARM: OMAP2+: Fix uninitialized sr_inst
Vaibhav Jain (1):
libnvdimm/region: Fix nvdimm_has_flush() to handle ND_REGION_ASYNC
Ville Syrjälä (1):
drm/i915: Don't zero out the Y plane's watermarks
Vinay Kumar Yadav (4):
ch_ktls: Fix kernel panic
ch_ktls: fix device connection close
ch_ktls: tcb close causes tls connection failure
ch_ktls: do not send snd_una update to TCB in middle
Vladimir Murzin (1):
ARM: 9069/1: NOMMU: Fix conversion for_each_membock() to for_each_mem_range()
Walter Wu (1):
kasan: remove redundant config option
Wang Qing (1):
arc: kernel: Return -EFAULT if copy_to_user() fails
Xin Long (1):
xfrm: BEET mode doesn't support fragments for inner packets
Yongxin Liu (1):
ixgbe: fix unbalanced device enable/disable in suspend/resume
Zack Rusin (1):
drm/vmwgfx: Make sure we unpin no longer needed buffers
wenxu (1):
net/mlx5e: fix ingress_ifindex check in mlx5e_flower_parse_meta
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 11 -SUBLEVEL = 15 +SUBLEVEL = 16 EXTRAVERSION = NAME = 💕 Valentine's Day Edition 💕
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/Kconfig +7 -1
@@ -1310,9 +1310,15 @@ config KASAN_SHADOW_OFFSET config NR_CPUS int "Maximum number of CPUs (2-32)" - range 2 32 + range 2 16 if DEBUG_KMAP_LOCAL + range 2 32 if !DEBUG_KMAP_LOCAL depends on SMP default "4" + help + The maximum number of CPUs that the kernel can support. + Up to 32 CPUs can be supported, or up to 16 if kmap_local() + debugging is enabled, which uses half of the per-CPU fixmap + slots as guard regions. config HOTPLUG_CPU bool "Support for hot-pluggable CPUs"
arch/arm/boot/dts/omap4.dtsi +5 -0
@@ -22,6 +22,11 @@ aliases { 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 @@ per_abe_nc_fclk: per_abe_nc_fclk@108 { 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 @@ aliases { 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
@@ -65,7 +65,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 ();
@@ -78,7 +78,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/mach-omap2/board-generic.c +1 -1
@@ -33,7 +33,7 @@ static void __init __maybe_unused omap_generic_init(void) }/* Clocks are needed early, see drivers/clocksource for the rest */ -void __init __maybe_unused omap_init_time_of (void ) +static void __init __maybe_unused omap_init_time_of (void ) {omap_clk_init ();timer_probe ();
arch/arm/mach-omap2/sr_device.c +1 -1
@@ -188,7 +188,7 @@ static const char * const dra7_sr_instances[] = {int __init omap_devinit_smartreflex (void ) { -const char *const *sr_inst; +const char *const *sr_inst =NULL ;int i, nr_sr =0 ;if (soc_is_omap44xx ()) {
arch/arm/mm/mmu.c +1 -2
@@ -388,8 +388,7 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot)pte_t *pte =pte_offset_fixmap (pmd_off_k (vaddr), vaddr);/* Make sure fixmap region does not exceed available allocation. */ -BUILD_BUG_ON (FIXADDR_START + (__end_of_fixed_addresses *PAGE_SIZE ) > -FIXADDR_END ); +BUILD_BUG_ON (__fix_to_virt (__end_of_fixed_addresses) <FIXADDR_START );BUG_ON (idx >= __end_of_fixed_addresses);/* we only support device mappings until pgprot_kernel has been set */
arch/arm/mm/pmsa-v7.c +3 -1
@@ -235,6 +235,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)phys_addr_t mem_end;phys_addr_t reg_start, reg_end;unsigned int mem_max_regions; +bool first = true;int num;u64 i;
@@ -263,7 +264,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)#endif for_each_mem_range (i, ®_start, ®_end) { -if (i ==0 ) { +if (first) {phys_addr_t phys_offset =PHYS_OFFSET ;/*
@@ -275,6 +276,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) mem_start = reg_start; mem_end = reg_end; specified_mem_size = mem_end - mem_start; + first = false; }else {/* * memblock auto merges contiguous blocks, remove
arch/arm/mm/pmsa-v8.c +3 -1
@@ -95,10 +95,11 @@ void __init pmsav8_adjust_lowmem_bounds(void) {phys_addr_t mem_end;phys_addr_t reg_start, reg_end; +bool first = true;u64 i;for_each_mem_range (i, ®_start, ®_end) { -if (i ==0 ) { +if (first) {phys_addr_t phys_offset =PHYS_OFFSET ;/*
@@ -107,6 +108,7 @@ void __init pmsav8_adjust_lowmem_bounds(void)if (reg_start != phys_offset)panic ("First memory bank must be contiguous from PHYS_OFFSET" ); mem_end = reg_end; + first = false; }else {/* * memblock auto merges contiguous blocks, remove
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/Kconfig +5 -1
@@ -1399,10 +1399,13 @@ config ARM64_PAN config AS_HAS_LDAPR def_bool $(as-instr,.arch_extension rcpc) +config AS_HAS_LSE_ATOMICS + def_bool $(as-instr,.arch_extension lse) + config ARM64_LSE_ATOMICS bool default ARM64_USE_LSE_ATOMICS - depends on $(as-instr,.arch_extension lse) + depends on AS_HAS_LSE_ATOMICS config ARM64_USE_LSE_ATOMICS bool "Atomic instructions"
@@ -1659,6 +1662,7 @@ config ARM64_MTE default y depends on ARM64_AS_HAS_MTE && ARM64_TAGGED_ADDR_ABI depends on AS_HAS_ARMV8_5 + depends on AS_HAS_LSE_ATOMICS # Required for tag checking in the uaccess routines depends on ARM64_PAN select ARCH_USES_HIGH_VMA_FLAGS
arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-lts.dts +4 -0
@@ -8,3 +8,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
@@ -34,7 +34,7 @@ &mmc0 { 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/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts +0 -4
@@ -289,10 +289,6 @@ &r_pio { vcc-pm-supply = <®_aldo1>; }; -&rtc { - clocks = <&ext_osc32k>; -}; - &spdif { status = "okay"; };
arch/arm64/include/asm/alternative-macros.h +4 -4
@@ -97,9 +97,9 @@ .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
@@ -169,11 +169,11 @@*/ .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/arm64/kernel/entry.S +6 -4
@@ -148,16 +148,18 @@ alternative_cb_end .endm /* Check for MTE asynchronous tag check faults */ - .macro check_mte_async_tcf, flgs, tmp + .macro check_mte_async_tcf, tmp, ti_flags #ifdef CONFIG_ARM64_MTE + .arch_extension lse alternative_if_not ARM64_MTE b 1f alternative_else_nop_endif mrs_s \tmp, SYS_TFSRE0_EL1 tbz \tmp, #SYS_TFSR_EL1_TF0_SHIFT, 1f /* Asynchronous TCF occurred for TTBR0 access, set the TI flag */ - orr \flgs, \flgs, #_TIF_MTE_ASYNC_FAULT - str \flgs, [tsk, #TSK_TI_FLAGS] + mov \tmp, #_TIF_MTE_ASYNC_FAULT + add \ti_flags, tsk, #TSK_TI_FLAGS + stset \tmp, [\ti_flags] msr_s SYS_TFSRE0_EL1, xzr 1: #endif
@@ -244,7 +246,7 @@ alternative_else_nop_endif disable_step_tsk x19, x20 /* Check for asynchronous tag check faults in user space */ - check_mte_async_tcf x19, x22 + check_mte_async_tcf x22, x23 apply_ssbd 1, x22, x23 ptrauth_keys_install_kernel tsk, x20, x22, x23
arch/arm64/kernel/sleep.S +1 -1
@@ -133,7 +133,7 @@ SYM_FUNC_START(_cpu_resume) */ bl cpu_do_resume -#if defined(CONFIG_KASAN) && CONFIG_KASAN_STACK +#if defined(CONFIG_KASAN) && defined(CONFIG_KASAN_STACK) mov x0, sp bl kasan_unpoison_task_stack_below #endif
arch/ia64/configs/generic_defconfig +0 -2
@@ -55,8 +55,6 @@ CONFIG_CHR_DEV_SG=m CONFIG_SCSI_FC_ATTRS=y CONFIG_SCSI_SYM53C8XX_2=y CONFIG_SCSI_QLOGIC_1280=y -CONFIG_ATA=y -CONFIG_ATA_PIIX=y CONFIG_SATA_VITESSE=y CONFIG_MD=y CONFIG_BLK_DEV_MD=m
arch/powerpc/kernel/signal_32.c +8 -12
@@ -775,7 +775,7 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,else prepare_save_user_regs (1 ); -if (!user_write_access_begin (frame,sizeof (*frame))) +if (!user_access_begin (frame,sizeof (*frame))) goto badframe;/* Put the siginfo & fill in most of the ucontext */
@@ -809,17 +809,15 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,unsafe_put_user (PPC_INST_ADDI + __NR_rt_sigreturn, &mctx->mc_pad[0 ], failed);unsafe_put_user (PPC_INST_SC , &mctx->mc_pad[1 ], failed); + asm("dcbst %y0; sync; icbi %y0; sync" ::"Z" (mctx->mc_pad[0 ])); }unsafe_put_sigset_t (&frame->uc.uc_sigmask, oldset, failed); -user_write_access_end (); +user_access_end ();if (copy_siginfo_to_user (&frame->info, &ksig->info)) goto badframe; -if (tramp == (unsigned long )mctx->mc_pad) -flush_icache_range (tramp, tramp +2 *sizeof (unsigned long )); - regs->link = tramp;#ifdef CONFIG_PPC_FPU_REGS
@@ -844,7 +842,7 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,return 0 ; failed: -user_write_access_end (); +user_access_end (); badframe:signal_fault (tsk, regs,"handle_rt_signal32" , frame);
@@ -879,7 +877,7 @@ int handle_signal32(struct ksignal *ksig, sigset_t *oldset,else prepare_save_user_regs (1 ); -if (!user_write_access_begin (frame,sizeof (*frame))) +if (!user_access_begin (frame,sizeof (*frame))) goto badframe; sc = (struct sigcontext __user *) &frame->sctx;
@@ -908,11 +906,9 @@ int handle_signal32(struct ksignal *ksig, sigset_t *oldset,/* Set up the sigreturn trampoline: li r0,sigret; sc */ unsafe_put_user (PPC_INST_ADDI + __NR_sigreturn, &mctx->mc_pad[0 ], failed);unsafe_put_user (PPC_INST_SC , &mctx->mc_pad[1 ], failed); + asm("dcbst %y0; sync; icbi %y0; sync" ::"Z" (mctx->mc_pad[0 ])); } -user_write_access_end (); - -if (tramp == (unsigned long )mctx->mc_pad) -flush_icache_range (tramp, tramp +2 *sizeof (unsigned long )); +user_access_end (); regs->link = tramp;
@@ -934,7 +930,7 @@ int handle_signal32(struct ksignal *ksig, sigset_t *oldset,return 0 ; failed: -user_write_access_end (); +user_access_end (); badframe:signal_fault (tsk, regs,"handle_signal32" , frame);
arch/riscv/Kconfig +1 -1
@@ -147,7 +147,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
arch/x86/kernel/acpi/wakeup_64.S +1 -1
@@ -112,7 +112,7 @@ SYM_FUNC_START(do_suspend_lowlevel) movq pt_regs_r14(%rax), %r14 movq pt_regs_r15(%rax), %r15 -#if defined(CONFIG_KASAN) && CONFIG_KASAN_STACK +#if defined(CONFIG_KASAN) && defined(CONFIG_KASAN_STACK) /* * The suspend path may have poisoned some areas deeper in the stack, * which we now need to unpoison.
arch/x86/kernel/setup.c +2 -3
@@ -1046,9 +1046,6 @@ void __init setup_arch(char **cmdline_p)cleanup_highmap (); -/* Look for ACPI tables and reserve memory occupied by them. */ -acpi_boot_table_init (); -memblock_set_current_limit (ISA_END_ADDRESS );e820__memblock_setup ();
@@ -1133,6 +1130,8 @@ void __init setup_arch(char **cmdline_p)reserve_initrd ();acpi_table_upgrade (); +/* Look for ACPI tables and reserve memory occupied by them. */ +acpi_boot_table_init ();vsmp_init ();
arch/x86/kvm/vmx/nested.c +27 -15
127 lines not on this page · raw message
arch/x86/kvm/vmx/vmx.c +40 -38
168 lines not on this page · raw message
arch/x86/kvm/vmx/vmx.h +24 -1
@@ -70,6 +70,29 @@ struct pt_desc {struct pt_ctx guest; }; +union vmx_exit_reason { +struct { +u32 basic :16 ; +u32 reserved16 :1 ; +u32 reserved17 :1 ; +u32 reserved18 :1 ; +u32 reserved19 :1 ; +u32 reserved20 :1 ; +u32 reserved21 :1 ; +u32 reserved22 :1 ; +u32 reserved23 :1 ; +u32 reserved24 :1 ; +u32 reserved25 :1 ; +u32 reserved26 :1 ; +u32 enclave_mode :1 ; +u32 smi_pending_mtf :1 ; +u32 smi_from_vmx_root :1 ; +u32 reserved30 :1 ; +u32 failed_vmentry :1 ; + }; +u32 full; +}; +/* * The nested_vmx structure is part of vcpu_vmx, and holds information we need * for correct emulation of VMX (i.e., nested VMX) on this vcpu.
@@ -244,7 +267,7 @@ struct vcpu_vmx {int vpid;bool emulation_required; -u32 exit_reason; +union vmx_exit_reason exit_reason;/* Posted interrupt descriptor */ struct pi_desc pi_desc;
drivers/dma/dmaengine.c +1 -0
@@ -1086,6 +1086,7 @@ static int __dma_async_device_channel_register(struct dma_device *device,kfree (chan->dev); err_free_local:free_percpu (chan->local); + chan->local =NULL ;return rc; }
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/dma/idxd/device.c +54 -11
95 lines not on this page · raw message
drivers/dma/idxd/idxd.h +3 -0
@@ -316,6 +316,8 @@ void idxd_unregister_driver(void);struct bus_type *idxd_get_bus_type (struct idxd_device *idxd);/* device interrupt control */ +void idxd_msix_perm_setup (struct idxd_device *idxd); +void idxd_msix_perm_clear (struct idxd_device *idxd);irqreturn_t idxd_irq_handler (int vec,void *data);irqreturn_t idxd_misc_thread (int vec,void *data);irqreturn_t idxd_wq_thread (int irq,void *data);
@@ -341,6 +343,7 @@ void idxd_wq_free_resources(struct idxd_wq *wq);int idxd_wq_enable (struct idxd_wq *wq);int idxd_wq_disable (struct idxd_wq *wq);void idxd_wq_drain (struct idxd_wq *wq); +void idxd_wq_reset (struct idxd_wq *wq);int idxd_wq_map_portal (struct idxd_wq *wq);void idxd_wq_unmap_portal (struct idxd_wq *wq);void idxd_wq_disable_cleanup (struct idxd_wq *wq);
drivers/dma/idxd/init.c +2 -9
@@ -61,7 +61,6 @@ static int idxd_setup_interrupts(struct idxd_device *idxd)struct idxd_irq_entry *irq_entry;int i, msixcnt;int rc =0 ; -union msix_perm mperm; msixcnt =pci_msix_vec_count (pdev);if (msixcnt <0 ) {
@@ -140,14 +139,7 @@ static int idxd_setup_interrupts(struct idxd_device *idxd) }idxd_unmask_error_interrupts (idxd); - -/* Setup MSIX permission table */ - mperm.bits =0 ; - mperm.pasid = idxd->pasid; - mperm.pasid_en =device_pasid_enabled (idxd); -for (i =1 ; i < msixcnt; i++) -iowrite32 (mperm.bits, idxd->reg_base + idxd->msix_perm_offset + i *8 ); - +idxd_msix_perm_setup (idxd);return 0 ; err_no_irq:
@@ -504,6 +496,7 @@ static void idxd_shutdown(struct pci_dev *pdev)idxd_flush_work_list (irq_entry); } +idxd_msix_perm_clear (idxd);destroy_workqueue (idxd->wq); }
drivers/dma/idxd/irq.c +3 -1
@@ -124,7 +124,9 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)for (i =0 ; i <4 ; i++) idxd->sw_err.bits[i] =ioread64 (idxd->reg_base +IDXD_SWERR_OFFSET + i *sizeof (u64)); -iowrite64 (IDXD_SWERR_ACK , idxd->reg_base +IDXD_SWERR_OFFSET ); + +iowrite64 (idxd->sw_err.bits[0 ] &IDXD_SWERR_ACK , + idxd->reg_base +IDXD_SWERR_OFFSET );if (idxd->sw_err.valid && idxd->sw_err.wq_idx_valid) {int id = idxd->sw_err.wq_idx;
drivers/dma/idxd/sysfs.c +10 -9
@@ -275,7 +275,6 @@ static void disable_wq(struct idxd_wq *wq) {struct idxd_device *idxd = wq->idxd;struct device *dev = &idxd->pdev->dev; -int rc;mutex_lock (&wq->wq_lock);dev_dbg (dev,"%s removing WQ %s\n" , __func__,dev_name (&wq->conf_dev));
@@ -296,17 +295,13 @@ static void disable_wq(struct idxd_wq *wq)idxd_wq_unmap_portal (wq);idxd_wq_drain (wq); - rc =idxd_wq_disable (wq); +idxd_wq_reset (wq);idxd_wq_free_resources (wq); wq->client_count =0 ;mutex_unlock (&wq->wq_lock); -if (rc <0 ) -dev_warn (dev,"Failed to disable %s: %d\n" , -dev_name (&wq->conf_dev), rc); -else -dev_info (dev,"wq %s disabled\n" ,dev_name (&wq->conf_dev)); +dev_info (dev,"wq %s disabled\n" ,dev_name (&wq->conf_dev)); }static int idxd_config_bus_remove (struct device *dev)
@@ -989,7 +984,7 @@ static ssize_t wq_size_store(struct device *dev,if (!test_bit (IDXD_FLAG_CONFIGURABLE , &idxd->flags))return -EPERM ; -if (wq->state !=IDXD_WQ_DISABLED ) +if (idxd->state ==IDXD_DEV_ENABLED )return -EPERM ;if (size +total_claimed_wq_size (idxd) - wq->size > idxd->max_wq_size)
@@ -1449,8 +1444,14 @@ static ssize_t op_cap_show(struct device *dev, {struct idxd_device *idxd = container_of(dev, struct idxd_device, conf_dev); +int i, rc =0 ; + +for (i =0 ; i <4 ; i++) + rc +=sysfs_emit_at (buf, rc,"%#llx " , idxd->hw.opcap.bits[i]); -return sprintf (buf,"%#llx\n" , idxd->hw.opcap.bits[0 ]); + rc--; + rc +=sysfs_emit_at (buf, rc,"\n" ); +return rc; }static DEVICE_ATTR_RO (op_cap);
drivers/dma/plx_dma.c +11 -7
@@ -507,10 +507,8 @@ static int plx_dma_create(struct pci_dev *pdev) rc =request_irq (pci_irq_vector (pdev,0 ), plx_dma_isr,0 ,KBUILD_MODNAME , plxdev); -if (rc) { -kfree (plxdev); -return rc; - } +if (rc) + goto free_plx;spin_lock_init (&plxdev->ring_lock);tasklet_setup (&plxdev->desc_task, plx_dma_desc_task);
@@ -540,14 +538,20 @@ static int plx_dma_create(struct pci_dev *pdev) rc =dma_async_device_register (dma);if (rc) {pci_err (pdev,"Failed to register dma device: %d\n" , rc); -free_irq (pci_irq_vector (pdev,0 ), plxdev); -kfree (plxdev); -return rc; + goto put_device; }pci_set_drvdata (pdev, plxdev);return 0 ; + +put_device: +put_device (&pdev->dev); +free_irq (pci_irq_vector (pdev,0 ), plxdev); +free_plx: +kfree (plxdev); + +return rc; } static int plx_dma_probe(struct pci_dev *pdev,
drivers/gpio/gpiolib-sysfs.c +8 -0
@@ -458,6 +458,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 )
@@ -469,6 +471,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/amd/display/dc/dcn30/dcn30_hubp.h +1 -0
@@ -133,6 +133,7 @@HUBP_SF (HUBPREQ0_DCSURF_SURFACE_CONTROL ,SECONDARY_SURFACE_DCC_EN , mask_sh),\HUBP_SF (HUBPREQ0_DCSURF_SURFACE_CONTROL ,SECONDARY_SURFACE_DCC_IND_BLK , mask_sh),\HUBP_SF (HUBPREQ0_DCSURF_SURFACE_CONTROL ,SECONDARY_SURFACE_DCC_IND_BLK_C , mask_sh),\ +HUBP_SF (HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT ,SURFACE_FLIP_INT_MASK , mask_sh),\HUBP_SF (HUBPRET0_HUBPRET_CONTROL ,DET_BUF_PLANE1_BASE_ADDRESS , mask_sh),\HUBP_SF (HUBPRET0_HUBPRET_CONTROL ,CROSSBAR_SRC_CB_B , mask_sh),\ HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
drivers/gpu/drm/i915/display/vlv_dsi.c +2 -2
@@ -992,14 +992,14 @@ static void intel_dsi_post_disable(struct intel_atomic_state *state,* FIXME As we do with eDP, just make a note of the time here * and perform the wait before the next panel power on. */ -intel_dsi_msleep (intel_dsi, intel_dsi->panel_pwr_cycle_delay); +msleep (intel_dsi->panel_pwr_cycle_delay); }static void intel_dsi_shutdown (struct intel_encoder *encoder) {struct intel_dsi *intel_dsi =enc_to_intel_dsi (encoder); -intel_dsi_msleep (intel_dsi, intel_dsi->panel_pwr_cycle_delay); +msleep (intel_dsi->panel_pwr_cycle_delay); } static bool intel_dsi_get_hw_state(struct intel_encoder *encoder,
drivers/gpu/drm/i915/intel_pm.c +2 -2
@@ -5539,12 +5539,12 @@ static int icl_build_plane_wm(struct intel_crtc_state *crtc_state,struct skl_plane_wm *wm = &crtc_state->wm.skl.raw.planes[plane_id];int ret; -memset (wm,0 ,sizeof (*wm)); -/* Watermarks calculated in master */ if (plane_state->planar_slave)return 0 ; +memset (wm,0 ,sizeof (*wm)); +if (plane_state->planar_linked_plane) {const struct drm_framebuffer *fb = plane_state->hw.fb;enum plane_id y_plane_id = plane_state->planar_linked_plane->id;
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +2 -2
@@ -1239,8 +1239,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
@@ -1227,8 +1227,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_PERFCOUNTER_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_PERFCOUNTER_SET );mutex_unlock (&perfcounter_oob);
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +2 -0
@@ -1554,6 +1554,8 @@ static inline void vmw_bo_unreference(struct vmw_buffer_object **buf) *buf =NULL ;if (tmp_buf !=NULL ) { +if (tmp_buf->base.pin_count >0 ) +ttm_bo_unpin (&tmp_buf->base);ttm_bo_put (&tmp_buf->base); } }
drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +4 -0
@@ -277,6 +277,7 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, &batch->otables[i]); } +ttm_bo_unpin (batch->otable_bo);ttm_bo_put (batch->otable_bo); batch->otable_bo =NULL ;return ret;
@@ -342,6 +343,7 @@ static void vmw_otable_batch_takedown(struct vmw_private *dev_priv,vmw_bo_fence_single (bo,NULL );ttm_bo_unreserve (bo); +ttm_bo_unpin (batch->otable_bo);ttm_bo_put (batch->otable_bo); batch->otable_bo =NULL ; }
@@ -528,6 +530,7 @@ static void vmw_mob_pt_setup(struct vmw_mob *mob,void vmw_mob_destroy (struct vmw_mob *mob) {if (mob->pt_bo) { +ttm_bo_unpin (mob->pt_bo);ttm_bo_put (mob->pt_bo); mob->pt_bo =NULL ; }
@@ -643,6 +646,7 @@ int vmw_mob_bind(struct vmw_private *dev_priv, out_no_cmd_space:vmw_fifo_resource_dec (dev_priv);if (pt_set_up) { +ttm_bo_unpin (mob->pt_bo);ttm_bo_put (mob->pt_bo); mob->pt_bo =NULL ; }
drivers/gpu/drm/xen/xen_drm_front.c +4 -2
@@ -521,7 +521,7 @@ static int xen_drm_drv_init(struct xen_drm_front_info *front_info) drm_dev =drm_dev_alloc (&xen_drm_driver, dev);if (IS_ERR (drm_dev)) { ret =PTR_ERR (drm_dev); - goto fail; + goto fail_dev; } drm_info->drm_dev = drm_dev;
@@ -551,8 +551,10 @@ static int xen_drm_drv_init(struct xen_drm_front_info *front_info)drm_kms_helper_poll_fini (drm_dev);drm_mode_config_cleanup (drm_dev);drm_dev_put (drm_dev); -fail: +fail_dev:kfree (drm_info); + front_info->drm_info =NULL ; +fail:return ret; }
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c +37 -3
@@ -10,6 +10,7 @@#include <linux/bitops.h> #include <linux/delay.h> #include <linux/dma-mapping.h> +#include <linux/dmi.h> #include <linux/interrupt.h> #include <linux/io-64-nonatomic-lo-hi.h> #include <linux/module.h>
@@ -22,9 +23,13 @@#define ACEL_EN BIT(0)#define GYRO_EN BIT(1) -#define MAGNO_EN BIT(2) +#define MAGNO_EN BIT(2)#define ALS_EN BIT(19) +static int sensor_mask_override =-1 ; +module_param_named (sensor_mask, sensor_mask_override, int,0444 ); +MODULE_PARM_DESC (sensor_mask,"override the detected sensors mask" ); +void amd_start_sensor (struct amd_mp2_dev *privdata,struct amd_mp2_sensor_info info) {union sfh_cmd_param cmd_param;
@@ -73,12 +78,41 @@ void amd_stop_all_sensors(struct amd_mp2_dev *privdata)writel (cmd_base.ul, privdata->mmio +AMD_C2P_MSG0 ); } +static const struct dmi_system_id dmi_sensor_mask_overrides[] = { + { + .matches = { +DMI_MATCH (DMI_PRODUCT_NAME ,"HP ENVY x360 Convertible 13-ag0xxx" ), + }, + .driver_data = (void *)(ACEL_EN |MAGNO_EN ), + }, + { + .matches = { +DMI_MATCH (DMI_PRODUCT_NAME ,"HP ENVY x360 Convertible 15-cp0xxx" ), + }, + .driver_data = (void *)(ACEL_EN |MAGNO_EN ), + }, + { } +}; +int amd_mp2_get_sensor_num (struct amd_mp2_dev *privdata,u8 *sensor_id) {int activestatus, num_of_sensors =0 ; +const struct dmi_system_id *dmi_id; +u32 activecontrolstatus; + +if (sensor_mask_override ==-1 ) { + dmi_id =dmi_first_match (dmi_sensor_mask_overrides); +if (dmi_id) + sensor_mask_override = (long )dmi_id->driver_data; + } + +if (sensor_mask_override >=0 ) { + activestatus = sensor_mask_override; + }else { + activecontrolstatus =readl (privdata->mmio +AMD_P2C_MSG3 ); + activestatus = activecontrolstatus >>4 ; + } - privdata->activecontrolstatus =readl (privdata->mmio +AMD_P2C_MSG3 ); - activestatus = privdata->activecontrolstatus >>4 ;if (ACEL_EN & activestatus) sensor_id[num_of_sensors++] = accel_idx;
drivers/hid/amd-sfh-hid/amd_sfh_pcie.h +0 -1
@@ -61,7 +61,6 @@ struct amd_mp2_dev {struct pci_dev *pdev;struct amdtp_cl_data *cl_data;void __iomem *mmio; -u32 activecontrolstatus; };struct amd_mp2_sensor_info {
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/mtd/nand/raw/mtk_nand.c +2 -2
@@ -488,8 +488,8 @@ static int mtk_nfc_exec_instr(struct nand_chip *chip,return 0 ;case NAND_OP_WAITRDY_INSTR :return readl_poll_timeout (nfc->regs +NFI_STA , status, - status &STA_BUSY ,20 , - instr->ctx.waitrdy.timeout_ms); + !(status &STA_BUSY ),20 , + instr->ctx.waitrdy.timeout_ms *1000 );default :break ; }
drivers/net/dsa/mv88e6xxx/chip.c +13 -17
@@ -3002,10 +3002,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;
@@ -3016,23 +3023,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
@@ -1534,8 +1534,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 ;
@@ -1548,6 +1547,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
@@ -3914,6 +3914,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 ) {
@@ -3924,7 +3925,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/chelsio/inline_crypto/ch_ktls/chcr_ktls.c +11 -91
196 lines not on this page · raw message
drivers/net/ethernet/davicom/dm9000.c +4 -2
@@ -1471,8 +1471,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 +9 -16
@@ -1180,19 +1180,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; }
@@ -2026,7 +2020,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, "[S:%d FOP:%d] Reset reason %d, reset_state %d\n",
@@ -2172,10 +2166,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 )__netdev_notify_peers (netdev);
@@ -3274,9 +3264,6 @@ static int ibmvnic_complete_tx(struct ibmvnic_adapter *adapter, next =ibmvnic_next_scrq (adapter, scrq);for (i =0 ; i < next->tx_comp.num_comps; i++) { -if (next->tx_comp.rcs[i]) -dev_err (dev,"tx error %x\n" , - next->tx_comp.rcs[i]); index =be32_to_cpu (next->tx_comp.correlators[i]);if (index &IBMVNIC_TSO_POOL_MASK ) { tx_pool = &adapter->tso_pool[pool];
@@ -3290,7 +3277,13 @@ static int ibmvnic_complete_tx(struct ibmvnic_adapter *adapter, num_entries += txbuff->num_entries;if (txbuff->skb) { total_bytes += txbuff->skb->len; -dev_consume_skb_irq (txbuff->skb); +if (next->tx_comp.rcs[i]) { +dev_err (dev,"tx error %x\n" , + next->tx_comp.rcs[i]); +dev_kfree_skb_irq (txbuff->skb); + }else { +dev_consume_skb_irq (txbuff->skb); + } txbuff->skb =NULL ; }else { netdev_warn(adapter->netdev,
drivers/net/ethernet/intel/i40e/i40e_main.c +6 -0
@@ -11863,6 +11863,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 |
@@ -11881,6 +11882,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/intel/ice/ice_dcb.c +2 -2
@@ -747,8 +747,8 @@ ice_cee_to_dcb_cfg(struct ice_aqc_get_cee_dcb_cfg_resp *cee_cfg, struct ice_port_info *pi) {u32 status, tlv_status =le32_to_cpu (cee_cfg->tlv_status); -u32 ice_aqc_cee_status_mask, ice_aqc_cee_status_shift; -u8 i, j, err, sync, oper, app_index, ice_app_sel_type; +u32 ice_aqc_cee_status_mask, ice_aqc_cee_status_shift, j; +u8 i, err, sync, oper, app_index, ice_app_sel_type;u16 app_prio =le16_to_cpu (cee_cfg->oper_app_prio);u16 ice_aqc_cee_app_mask, ice_aqc_cee_app_shift;struct ice_dcbx_cfg *cmp_dcbcfg, *dcbcfg;
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +13 -1
@@ -6540,6 +6540,13 @@ static int ixgbe_setup_all_tx_resources(struct ixgbe_adapter *adapter)return err; } +static int ixgbe_rx_napi_id (struct ixgbe_ring *rx_ring) +{ +struct ixgbe_q_vector *q_vector = rx_ring->q_vector; + +return q_vector ? q_vector->napi.napi_id :0 ; +} +/** * ixgbe_setup_rx_resources - allocate Rx resources (Descriptors) * @adapter: pointer to ixgbe_adapter
@@ -6587,7 +6594,7 @@ int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter,/* XDP RX-queue info */ if (xdp_rxq_info_reg (&rx_ring->xdp_rxq, adapter->netdev, - rx_ring->queue_index, rx_ring->q_vector->napi.napi_id) <0 ) + rx_ring->queue_index,ixgbe_rx_napi_id (rx_ring)) <0 ) goto err; rx_ring->xdp_prog = adapter->xdp_prog;
@@ -6896,6 +6903,11 @@ static int __maybe_unused ixgbe_resume(struct device *dev_d) adapter->hw.hw_addr = adapter->io_addr; + err =pci_enable_device_mem (pdev); +if (err) { +e_dev_err ("Cannot enable PCI device from suspend\n" ); +return err; + }smp_mb__before_atomic ();clear_bit (__IXGBE_DISABLED, &adapter->state);pci_set_master (pdev);
drivers/net/ethernet/mellanox/mlx5/core/en/port.c +4 -19
@@ -387,21 +387,6 @@ enum mlx5e_fec_supported_link_mode { *_policy = MLX5_GET(pplm_reg, _buf, fec_override_admin_##link); \ }while (0 ) -#define MLX5E_FEC_OVERRIDE_ADMIN_50G_POLICY (buf, policy, write, link) \ - do { \ - unsigned long policy_long; \ - u16 *__policy = &(policy); \ - bool _write = (write); \ - \ - policy_long = *__policy; \ - if (_write && *__policy) \ - *__policy = find_first_bit(&policy_long, \ - sizeof(policy_long) * BITS_PER_BYTE);\ - MLX5E_FEC_OVERRIDE_ADMIN_POLICY(buf, *__policy, _write, link); \ - if (!_write && *__policy) \ - *__policy = 1 << *__policy; \ - } while (0) -/* get/set FEC admin field for a given speed */ static int mlx5e_fec_admin_field(u32 *pplm, u16 *fec_policy, bool write,enum mlx5e_fec_supported_link_mode link_mode)
@@ -423,16 +408,16 @@ static int mlx5e_fec_admin_field(u32 *pplm, u16 *fec_policy, bool write, MLX5E_FEC_OVERRIDE_ADMIN_POLICY(pplm, *fec_policy, write, 100g);break ;case MLX5E_FEC_SUPPORTED_LINK_MODE_50G_1X : - MLX5E_FEC_OVERRIDE_ADMIN_50G_POLICY(pplm, *fec_policy, write, 50g_1x); + MLX5E_FEC_OVERRIDE_ADMIN_POLICY(pplm, *fec_policy, write, 50g_1x);break ;case MLX5E_FEC_SUPPORTED_LINK_MODE_100G_2X : - MLX5E_FEC_OVERRIDE_ADMIN_50G_POLICY(pplm, *fec_policy, write, 100g_2x); + MLX5E_FEC_OVERRIDE_ADMIN_POLICY(pplm, *fec_policy, write, 100g_2x);break ;case MLX5E_FEC_SUPPORTED_LINK_MODE_200G_4X : - MLX5E_FEC_OVERRIDE_ADMIN_50G_POLICY(pplm, *fec_policy, write, 200g_4x); + MLX5E_FEC_OVERRIDE_ADMIN_POLICY(pplm, *fec_policy, write, 200g_4x);break ;case MLX5E_FEC_SUPPORTED_LINK_MODE_400G_8X : - MLX5E_FEC_OVERRIDE_ADMIN_50G_POLICY(pplm, *fec_policy, write, 400g_8x); + MLX5E_FEC_OVERRIDE_ADMIN_POLICY(pplm, *fec_policy, write, 400g_8x);break ;default :return -EINVAL ;
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +3 -0
@@ -2194,6 +2194,9 @@ static int mlx5e_flower_parse_meta(struct net_device *filter_dev,return 0 ;flow_rule_match_meta (rule, &match); +if (!match.mask->ingress_ifindex) +return 0 ; +if (match.mask->ingress_ifindex !=0xFFFFFFFF ) {NL_SET_ERR_MSG_MOD (extack,"Unsupported ingress ifindex mask" );return -EOPNOTSUPP ;
drivers/net/ethernet/realtek/r8169_main.c +12 -6
@@ -2342,13 +2342,14 @@ static void r8168b_1_hw_jumbo_disable(struct rtl8169_private *tp)static void rtl_jumbo_config (struct rtl8169_private *tp) {bool jumbo = tp->dev->mtu >ETH_DATA_LEN ; +int readrq =4096 ;rtl_unlock_config_regs (tp);switch (tp->mac_version) {case RTL_GIGA_MAC_VER_12 :case RTL_GIGA_MAC_VER_17 :if (jumbo) { -pcie_set_readrq (tp->pci_dev,512 ); + readrq =512 ;r8168b_1_hw_jumbo_enable (tp); }else {r8168b_1_hw_jumbo_disable (tp);
@@ -2356,7 +2357,7 @@ static void rtl_jumbo_config(struct rtl8169_private *tp)break ; case RTL_GIGA_MAC_VER_18 ... RTL_GIGA_MAC_VER_26:if (jumbo) { -pcie_set_readrq (tp->pci_dev,512 ); + readrq =512 ;r8168c_hw_jumbo_enable (tp); }else {r8168c_hw_jumbo_disable (tp);
@@ -2381,8 +2382,15 @@ static void rtl_jumbo_config(struct rtl8169_private *tp) }rtl_lock_config_regs (tp); -if (!jumbo &&pci_is_pcie (tp->pci_dev) && tp->supports_gmii) -pcie_set_readrq (tp->pci_dev,4096 ); +if (pci_is_pcie (tp->pci_dev) && tp->supports_gmii) +pcie_set_readrq (tp->pci_dev, readrq); + +/* Chip doesn't support pause in jumbo mode */ +linkmode_mod_bit (ETHTOOL_LINK_MODE_Pause_BIT, + tp->phydev->advertising, !jumbo); +linkmode_mod_bit (ETHTOOL_LINK_MODE_Asym_Pause_BIT, + tp->phydev->advertising, !jumbo); +phy_start_aneg (tp->phydev); }DECLARE_RTL_COND (rtl_chipcmd_cond)
@@ -4661,8 +4669,6 @@ static int r8169_phy_connect(struct rtl8169_private *tp)if (!tp->supports_gmii)phy_set_max_speed (phydev,SPEED_100 ); -phy_support_asym_pause (phydev); -phy_attached_info (phydev);return 0 ;
drivers/net/ethernet/xilinx/xilinx_axienet.h +12 -0
@@ -497,6 +497,18 @@ static inline u32 axinet_ior_read_mcr(struct axienet_local *lp)return axienet_ior (lp,XAE_MDIO_MCR_OFFSET ); } +static inline void axienet_lock_mii (struct axienet_local *lp) +{ +if (lp->mii_bus) +mutex_lock (&lp->mii_bus->mdio_lock); +} + +static inline void axienet_unlock_mii (struct axienet_local *lp) +{ +if (lp->mii_bus) +mutex_unlock (&lp->mii_bus->mdio_lock); +} +/** * axienet_iow - Memory mapped Axi Ethernet register write * @lp: Pointer to axienet local structure
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +6 -6
@@ -1053,9 +1053,9 @@ static int axienet_open(struct net_device *ndev)* including the MDIO. MDIO must be disabled before resetting. * Hold MDIO bus lock to avoid MDIO accesses during the reset. */ -mutex_lock (&lp->mii_bus->mdio_lock); +axienet_lock_mii (lp); ret =axienet_device_reset (ndev); -mutex_unlock (&lp->mii_bus->mdio_lock); +axienet_unlock_mii (lp); ret =phylink_of_phy_connect (lp->phylink, lp->dev->of_node,0 );if (ret) {
@@ -1148,9 +1148,9 @@ static int axienet_stop(struct net_device *ndev) }/* Do a reset to ensure DMA is really stopped */ -mutex_lock (&lp->mii_bus->mdio_lock); +axienet_lock_mii (lp);__axienet_device_reset (lp); -mutex_unlock (&lp->mii_bus->mdio_lock); +axienet_unlock_mii (lp);cancel_work_sync (&lp->dma_err_task);
@@ -1664,9 +1664,9 @@ static void axienet_dma_err_handler(struct work_struct *work)* including the MDIO. MDIO must be disabled before resetting. * Hold MDIO bus lock to avoid MDIO accesses during the reset. */ -mutex_lock (&lp->mii_bus->mdio_lock); +axienet_lock_mii (lp);__axienet_device_reset (lp); -mutex_unlock (&lp->mii_bus->mdio_lock); +axienet_unlock_mii (lp);for (i =0 ; i < lp->tx_bd_num; i++) { cur_p = &lp->tx_bd_v[i];
drivers/net/phy/marvell.c +29 -3
@@ -3019,9 +3019,34 @@ 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 */ + .flags = PHY_POLL_CABLE_TEST, + .probe = m88e1510_probe, + .config_init = marvell_config_init, + .config_aneg = m88e6390_config_aneg, + .read_status = marvell_read_status, + .config_intr = marvell_config_intr, + .handle_interrupt = marvell_handle_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, + .cable_test_start = marvell_vct7_cable_test_start, + .cable_test_tdr_start = marvell_vct5_cable_test_tdr_start, + .cable_test_get_status = marvell_vct7_cable_test_get_status, + }, + { + .phy_id = MARVELL_PHY_ID_88E6390_FAMILY, + .phy_id_mask = MARVELL_PHY_ID_MASK, + .name = "Marvell 88E6390 Family",/* PHY_GBIT_FEATURES */ .flags = PHY_POLL_CABLE_TEST, .probe = m88e6390_probe,
@@ -3105,7 +3130,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 }, { MARVELL_PHY_ID_88E1340S, MARVELL_PHY_ID_MASK }, { MARVELL_PHY_ID_88E1548P, MARVELL_PHY_ID_MASK }, { }
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +1 -0
@@ -628,6 +628,7 @@ static const struct iwl_dev_info iwl_dev_info_table[] = {IWL_DEV_INFO (0x4DF0 ,0x1652 , killer1650i_2ax_cfg_qu_b0_hr_b0,NULL ),IWL_DEV_INFO (0x4DF0 ,0x2074 , iwl_ax201_cfg_qu_hr,NULL ),IWL_DEV_INFO (0x4DF0 ,0x4070 , iwl_ax201_cfg_qu_hr,NULL ), +IWL_DEV_INFO (0x4DF0 ,0x6074 , iwl_ax201_cfg_qu_hr,NULL ), _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,
drivers/net/wireless/intel/iwlwifi/pcie/tx.c +4 -3
@@ -929,6 +929,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,u32 cmd_pos;const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD ];u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD ]; +unsigned long flags; if (WARN(!trans->wide_cmd_header && group_id > IWL_ALWAYS_LONG_GROUP,
@@ -1012,10 +1013,10 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans, goto free_dup_buf; } -spin_lock_bh (&txq->lock); +spin_lock_irqsave (&txq->lock, flags);if (iwl_txq_space (trans, txq) < ((cmd->flags &CMD_ASYNC ) ?2 :1 )) { -spin_unlock_bh (&txq->lock); +spin_unlock_irqrestore (&txq->lock, flags);IWL_ERR (trans,"No space in command queue\n" );iwl_op_mode_cmd_queue_full (trans->op_mode);
@@ -1175,7 +1176,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans, unlock_reg:spin_unlock (&trans_pcie->reg_lock); out: -spin_unlock_bh (&txq->lock); +spin_unlock_irqrestore (&txq->lock, flags); free_dup_buf:if (idx <0 )kfree (dup_buf);
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
@@ -1239,6 +1239,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;
@@ -1249,8 +1254,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/remoteproc/pru_rproc.c +18 -0
@@ -450,6 +450,24 @@ static void *pru_i_da_to_va(struct pru_rproc *pru, u32 da, size_t len)if (len ==0 )return NULL ; +/* +* GNU binutils do not support multiple address spaces. The GNU +* linker's default linker script places IRAM at an arbitrary high +* offset, in order to differentiate it from DRAM. Hence we need to +* strip the artificial offset in the IRAM addresses coming from the +* ELF file. +* +* The TI proprietary linker would never set those higher IRAM address +* bits anyway. PRU architecture limits the program counter to 16-bit +* word-address range. This in turn corresponds to 18-bit IRAM +* byte-address range for ELF. +* +* Two more bits are added just in case to make the final 20-bit mask. +* Idea is to have a safeguard in case TI decides to add banking +* in future SoCs. +*/ + da &=0xfffff ; +if (da >=PRU_IRAM_DA && da + len <=PRU_IRAM_DA + pru->mem_regions[PRU_IOMEM_IRAM ].size) { offset = da -PRU_IRAM_DA ;
drivers/scsi/libsas/sas_ata.c +4 -5
@@ -201,18 +201,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/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
@@ -1658,6 +1658,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 )
@@ -1666,7 +1668,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 ;
@@ -405,6 +408,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/bpf.h +2 -0
@@ -41,6 +41,7 @@ struct bpf_local_storage;struct bpf_local_storage_map ;struct kobject ;struct mem_cgroup ; +struct module ;extern struct idr btf_idr;extern spinlock_t btf_idr_lock;
@@ -630,6 +631,7 @@ struct bpf_trampoline {/* Executable image of trampoline */ struct bpf_tramp_image *cur_image;u64 selector; +struct module *mod; };struct bpf_attach_target_info {
include/linux/kasan.h +1 -1
@@ -306,7 +306,7 @@ static inline void kasan_kfree_large(void *ptr, unsigned long ip) {}#endif /* CONFIG_KASAN */ -#if defined(CONFIG_KASAN ) &&CONFIG_KASAN_STACK +#if defined(CONFIG_KASAN ) && defined(CONFIG_KASAN_STACK )void kasan_unpoison_task_stack (struct task_struct *task);#else static inline void kasan_unpoison_task_stack (struct task_struct *task) {}
include/linux/marvell_phy.h +3 -2
@@ -28,11 +28,12 @@/* Marvel 88E1111 in Finisar SFP module with modified PHY ID */ #define MARVELL_PHY_ID_88E1111_FINISAR 0x01ff0cc0 -/* 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);
include/uapi/linux/idxd.h +2 -2
@@ -247,8 +247,8 @@ struct dsa_completion_record { uint32_t rsvd2:8; }; -uint16_t delta_rec_size; -uint16_t crc_val; +uint32_t delta_rec_size; +uint32_t crc_val;/* DIF check & strip */ struct {
kernel/bpf/trampoline.c +30 -0
@@ -9,6 +9,7 @@#include <linux/btf.h> #include <linux/rcupdate_trace.h> #include <linux/rcupdate_wait.h> +#include <linux/module.h> /* dummy _ops. The verifier will operate on target program's ops. */ const struct bpf_verifier_ops bpf_extension_verifier_ops = {
@@ -87,6 +88,26 @@ static struct bpf_trampoline *bpf_trampoline_lookup(u64 key)return tr; } +static int bpf_trampoline_module_get (struct bpf_trampoline *tr) +{ +struct module *mod; +int err =0 ; + +preempt_disable (); + mod =__module_text_address ((unsigned long ) tr->func.addr); +if (mod && !try_module_get (mod)) + err = -ENOENT ; +preempt_enable (); + tr->mod = mod; +return err; +} + +static void bpf_trampoline_module_put (struct bpf_trampoline *tr) +{ +module_put (tr->mod); + tr->mod =NULL ; +} +static int is_ftrace_location (void *ip) {long addr;
@@ -108,6 +129,9 @@ static int unregister_fentry(struct bpf_trampoline *tr, void *old_addr) ret =unregister_ftrace_direct ((long )ip, (long )old_addr); else ret =bpf_arch_text_poke (ip,BPF_MOD_CALL , old_addr,NULL ); + +if (!ret) +bpf_trampoline_module_put (tr);return ret; }
@@ -134,10 +158,16 @@ static int register_fentry(struct bpf_trampoline *tr, void *new_addr)return ret; tr->func.ftrace_managed = ret; +if (bpf_trampoline_module_get (tr)) +return -ENOENT ; +if (tr->func.ftrace_managed) ret =register_ftrace_direct ((long )ip, (long )new_addr);else ret =bpf_arch_text_poke (ip,BPF_MOD_CALL ,NULL , new_addr); + +if (ret) +bpf_trampoline_module_put (tr);return ret; }
kernel/bpf/verifier.c +94 -44
242 lines not on this page · raw message
kernel/locking/lockdep.c +2 -1
@@ -930,7 +930,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;
lib/Kconfig.debug +3 -3
@@ -1325,7 +1325,7 @@ config LOCKDEP bool depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT select STACKTRACE - select FRAME_POINTER if !MIPS && !PPC && !ARM && !S390 && !MICROBLAZE && !ARC && !X86 + depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86 select KALLSYMS select KALLSYMS_ALL
@@ -1619,7 +1619,7 @@ config LATENCYTOP depends on DEBUG_KERNEL depends on STACKTRACE_SUPPORT depends on PROC_FS - select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86 + depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86 select KALLSYMS select KALLSYMS_ALL select STACKTRACE
@@ -1872,7 +1872,7 @@ config FAULT_INJECTION_STACKTRACE_FILTER depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT depends on !X86_64 select STACKTRACE - select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86 + depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86 help Provide stacktrace filter for fault-injection capabilities
lib/Kconfig.kasan +2 -7
@@ -138,9 +138,10 @@ config KASAN_INLINE endchoice -config KASAN_STACK_ENABLE +config KASAN_STACK bool "Enable stack instrumentation (unsafe)" if CC_IS_CLANG && !COMPILE_TEST depends on KASAN_GENERIC || KASAN_SW_TAGS + default y if CC_IS_GCC help The LLVM stack address sanitizer has a know problem that causes excessive stack usage in a lot of functions, see
@@ -154,12 +155,6 @@ config KASAN_STACK_ENABLE CONFIG_COMPILE_TEST. On gcc it is assumed to always be safe to use and enabled by default. -config KASAN_STACK - int - depends on KASAN_GENERIC || KASAN_SW_TAGS - default 1 if KASAN_STACK_ENABLE || CC_IS_GCC - default 0 - config KASAN_SW_TAGS_IDENTIFY bool "Enable memory corruption identification" depends on KASAN_SW_TAGS
mm/kasan/common.c +1 -1
@@ -63,7 +63,7 @@ void __kasan_unpoison_range(const void *address, size_t size)unpoison_range (address, size); } -#if CONFIG_KASAN_STACK +#ifdef CONFIG_KASAN_STACK /* Unpoison the entire stack for a task. */ void kasan_unpoison_task_stack (struct task_struct *task) {
mm/kasan/kasan.h +1 -1
@@ -224,7 +224,7 @@ void *find_first_bad_addr(void *addr, size_t size);const char *get_bug_type (struct kasan_access_info *info);void metadata_fetch_row (char *buffer,void *row); -#if defined(CONFIG_KASAN_GENERIC ) &&CONFIG_KASAN_STACK +#if defined(CONFIG_KASAN_GENERIC ) && defined(CONFIG_KASAN_STACK )void print_address_stack_frame (const void *addr);#else static inline void print_address_stack_frame (const void *addr) { }
mm/kasan/report_generic.c +1 -1
@@ -128,7 +128,7 @@ void metadata_fetch_row(char *buffer, void *row)memcpy (buffer,kasan_mem_to_shadow (row),META_BYTES_PER_ROW ); } -#if CONFIG_KASAN_STACK +#ifdef CONFIG_KASAN_STACK static bool __must_check tokenize_frame_descr (const char **frame_descr,char *token,size_t max_tok_len,unsigned long *value)
mm/ptdump.c +1 -1
@@ -111,7 +111,7 @@ static int ptdump_pte_entry(pte_t *pte, unsigned long addr, unsigned long next, struct mm_walk *walk) { struct ptdump_state *st = walk->private; -pte_t val =READ_ONCE (*pte); +pte_t val =ptep_get (pte);if (st->effective_prot) st->effective_prot (st,4 ,pte_val (val));
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
@@ -1232,10 +1232,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
@@ -5877,7 +5877,8 @@ static void skb_gro_reset_offset(struct sk_buff *skb)NAPI_GRO_CB (skb)->frag0_len =0 ;if (!skb_headlen (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
@@ -1380,7 +1380,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/ethtool/pause.c +4 -4
@@ -38,16 +38,16 @@ static int pause_prepare_data(const struct ethnl_req_info *req_base,if (!dev->ethtool_ops->get_pauseparam)return -EOPNOTSUPP ; +ethtool_stats_init ((u64 *)&data->pausestat, +sizeof (data->pausestat) /8 ); + ret =ethnl_ops_begin (dev);if (ret <0 )return ret; dev->ethtool_ops->get_pauseparam (dev, &data->pauseparam);if (req_base->flags ÐTOOL_FLAG_STATS && - dev->ethtool_ops->get_pause_stats) { -ethtool_stats_init ((u64 *)&data->pausestat, -sizeof (data->pausestat) /8 ); + dev->ethtool_ops->get_pause_stats) dev->ethtool_ops->get_pause_stats (dev, &data->pausestat); - }ethnl_ops_complete (dev);return 0 ;
net/ieee802154/nl802154.c +41 -0
107 lines not on this page · raw message
net/ipv4/netfilter/arp_tables.c +7 -2
@@ -1541,10 +1541,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/ipv4/sysctl_net_ipv4.c +13 -3
@@ -1369,9 +1369,19 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)if (!table) goto err_alloc; -/* Update the variables to point into the current struct net */ -for (i =0 ; i <ARRAY_SIZE (ipv4_net_table) -1 ; i++) - table[i].data += (void *)net - (void *)&init_net; +for (i =0 ; i <ARRAY_SIZE (ipv4_net_table) -1 ; i++) { +if (table[i].data) { +/* Update the variables to point into +* the current struct net +*/ + table[i].data += (void *)net - (void *)&init_net; + }else { +/* Entries without data pointer are global; +* Make them read-only in non-init_net ns +*/ + table[i].mode &= ~0222 ; + } + } } net->ipv4.ipv4_hdr =register_net_sysctl (net,"net/ipv4" , table);
net/ipv6/ip6_tunnel.c +10 -0
@@ -2244,6 +2244,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
@@ -1867,9 +1867,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
@@ -1788,8 +1788,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 ))
Lines of this file are not shown. View the raw message.
net/netfilter/nf_conntrack_standalone.c +1 -0
Lines of this file are not shown. View the raw message.
net/netfilter/nf_tables_api.c +34 -12
46 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.