Linux 5.10.88
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.88 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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
------------
Documentation/networking/device_drivers/ethernet/intel/ixgbe.rst | 16 + Makefile | 2 arch/arm/boot/dts/imx6ull-pinfunc.h | 2 arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts | 2 arch/arm/boot/dts/socfpga_arria5_socdk.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_socdk.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_sockit.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_socrates.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_sodia.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts | 4 arch/arm64/boot/dts/freescale/imx8mm.dtsi | 7 arch/arm64/boot/dts/freescale/imx8mn.dtsi | 7 arch/arm64/boot/dts/freescale/imx8mp-evk.dts | 2 arch/arm64/boot/dts/freescale/imx8mp.dtsi | 7 arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts | 2 arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi | 1 arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts | 2 arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi | 2 arch/powerpc/platforms/85xx/smp.c | 4 arch/s390/kernel/machine_kexec_file.c | 7 arch/x86/kvm/x86.c | 2 block/blk-iocost.c | 9 drivers/ata/libata-scsi.c | 15 + drivers/block/xen-blkfront.c | 15 - drivers/bus/ti-sysc.c | 3 drivers/clk/clk.c | 15 - drivers/dma/st_fdma.c | 2 drivers/firmware/scpi_pm_domain.c | 10 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c | 3 drivers/gpu/drm/ast/ast_mode.c | 5 drivers/input/touchscreen/of_touchscreen.c | 42 +-- drivers/md/persistent-data/dm-btree-remove.c | 2 drivers/media/usb/dvb-usb-v2/mxl111sf.c | 16 + drivers/net/ethernet/broadcom/bcmsysport.c | 5 drivers/net/ethernet/broadcom/bcmsysport.h | 1 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c | 3 drivers/net/ethernet/intel/igb/igb_main.c | 28 +- drivers/net/ethernet/intel/igbvf/netdev.c | 1 drivers/net/ethernet/intel/igc/igc_i225.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 3 drivers/net/ethernet/sfc/ef100_nic.c | 3 drivers/net/netdevsim/bpf.c | 1 drivers/net/xen-netback/common.h | 1 drivers/net/xen-netback/rx.c | 77 +++--- drivers/net/xen-netfront.c | 125 +++++++--- drivers/pci/msi.c | 15 - drivers/scsi/scsi_debug.c | 42 ++- drivers/soc/imx/soc-imx.c | 4 drivers/soc/tegra/fuse/fuse-tegra.c | 2 drivers/soc/tegra/fuse/fuse.h | 2 drivers/tee/amdtee/core.c | 5 drivers/tty/hvc/hvc_xen.c | 30 ++ drivers/tty/n_hdlc.c | 23 + drivers/tty/serial/8250/8250_fintek.c | 20 - drivers/usb/core/quirks.c | 3 drivers/usb/dwc2/platform.c | 3 drivers/usb/early/xhci-dbc.c | 15 - drivers/usb/gadget/composite.c | 6 drivers/usb/gadget/legacy/dbgp.c | 6 drivers/usb/gadget/legacy/inode.c | 6 drivers/usb/host/xhci-pci.c | 6 drivers/usb/serial/cp210x.c | 6 drivers/usb/serial/option.c | 8 drivers/vhost/vdpa.c | 2 drivers/virtio/virtio_ring.c | 2 fs/btrfs/disk-io.c | 8 fs/btrfs/tree-log.c | 1 fs/ceph/caps.c | 16 - fs/ceph/mds_client.c | 3 fs/fuse/dir.c | 2 fs/overlayfs/dir.c | 3 fs/overlayfs/overlayfs.h | 1 fs/overlayfs/super.c | 12 fs/zonefs/super.c | 1 kernel/audit.c | 21 - kernel/bpf/verifier.c | 28 +- kernel/rcu/tree.c | 10 kernel/time/timekeeping.c | 3 net/core/skbuff.c | 2 net/ipv4/inet_diag.c | 4 net/ipv6/sit.c | 1 net/mac80211/agg-rx.c | 5 net/mac80211/agg-tx.c | 16 - net/mac80211/driver-ops.h | 5 net/mac80211/mlme.c | 13 - net/mac80211/sta_info.h | 1 net/mac80211/util.c | 7 net/mptcp/protocol.c | 4 net/packet/af_packet.c | 5 net/rds/connection.c | 1 net/sched/cls_api.c | 1 net/sched/sch_cake.c | 6 net/sched/sch_ets.c | 4 net/smc/af_smc.c | 4 net/vmw_vsock/virtio_transport_common.c | 3 scripts/recordmcount.pl | 2 tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c | 16 + tools/testing/selftests/bpf/verifier/value_ptr_arith.c | 23 + tools/testing/selftests/kvm/kvm_create_max_vcpus.c | 30 ++ tools/testing/selftests/net/fcnal-test.sh | 49 ++- tools/testing/selftests/net/forwarding/forwarding.config.sample | 2 virt/kvm/kvm_main.c | 6 104 files changed, 695 insertions(+), 304 deletions(-)
Alex Bee (1):
arm64: dts: rockchip: fix audio-supply for Rock Pi 4
Alyssa Ross (1):
dmaengine: st_fdma: fix MODULE_ALIAS
Amelie Delaunay (1):
usb: dwc2: fix STM ID/VBUS detection startup delay in dwc2_driver_probe
Artem Lapkin (1):
arm64: dts: rockchip: remove mmc-hs400-enhanced-strobe from rk3399-khadas-edge
Baowen Zheng (1):
flow_offload: return EOPNOTSUPP for the unsupported mpls action type
Cyril Novikov (1):
ixgbe: set X550 MDIO speed before talking to PHY
D. Wythe (1):
net/smc: Prevent smc_release() from long blocking
Dan Carpenter (2):
vdpa: check that offsets are within bounds
tee: amdtee: fix an IS_ERR() vs NULL bug
Daniel Borkmann (3):
bpf: Fix signed bounds propagation after mov32
bpf: Make 32->64 bounds propagation slightly more robust bpf, selftests: Add test case trying to taint map value pointer
Daniele Palmas (1):
USB: serial: option: add Telit FN990 compositions
David Ahern (3):
selftests: Add duplicate config only for MD5 VRF tests
selftests: Fix raw socket bind tests with VRF
selftests: Fix IPv6 address bind tests
Davide Caratti (1):
net/sched: sch_ets: don't remove idle classes from the round-robin list
Dinh Nguyen (1):
ARM: socfpga: dts: fix qspi node compatible
Eric Dumazet (3):
sch_cake: do not call cake_destroy() from cake_init()
inet_diag: fix kernel-infoleak for UDP sockets
sit: do not call ipip6_dev_free() from sit_init_net()
Fabio Estevam (2):
arm64: dts: imx8mp-evk: Improve the Ethernet PHY description
ARM: dts: imx6ull-pinfunc: Fix CSI_DATA07__ESAI_TX0 pad name
Felix Fietkau (2):
mac80211: fix regression in SSN handling of addba tx
mac80211: send ADDBA requests using the tid/queue of the aggregation session
Filipe Manana (1):
btrfs: fix double free of anon_dev after failure to create subvolume
Florian Fainelli (1):
net: systemport: Add global locking for descriptor lifecycle
Florian Westphal (1):
mptcp: clear 'kern' flag from fallback sockets
Gal Pressman (1):
net: Fix double 0x prefix print in SKB dump
George Kennedy (4):
libata: if T_LENGTH is zero, dma direction should be DMA_NONE
scsi: scsi_debug: Don't call kcalloc() if size arg is zero
scsi: scsi_debug: Fix type in min_t to avoid stack OOB
scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select()
Greg Kroah-Hartman (3):
USB: gadget: bRequestType is a bitfield, not a enum Revert "usb: early: convert to readl_poll_timeout_atomic()" Linux 5.10.88
Haimin Zhang (1):
netdevsim: Zero-initialize memory for new map's value in function nsim_bpf_map_alloc
Hangbin Liu (1):
selftest/net/forwarding: declare NETIFS p9 p10
Hangyu Hua (1):
rds: memory leak in __rds_conn_create()
Hu Weiwen (1):
ceph: fix duplicate increment of opened_inodes metric
Jerome Marchand (1):
recordmcount.pl: look for jgnop instruction as well as bcrl on s390
Ji-Ze Hong (Peter Hong) (1):
serial: 8250_fintek: Fix garbled text for console
Jianglei Nie (1):
btrfs: fix memory leak in __add_inode_ref()
Jiasheng Jiang (2):
drm/ast: potential dereference of null pointer
sfc_ef100: potential dereference of null pointer
Jie Wang (1):
net: hns3: fix use-after-free bug in hclgevf_send_mbx_msg
Jie2x Zhou (1):
selftests: net: Correct ping6 expected rc from 2 to 1
Jimmy Wang (1):
USB: NO_LPM quirk Lenovo USB-C to Ethernet Adapher(RTL8153-04)
Joakim Zhang (1):
arm64: dts: imx8m: correct assigned clocks for FEC
Joe Thornber (1):
dm btree remove: fix use after free in rebalance_children()
Johan Hovold (1):
USB: serial: cp210x: fix CP2105 GPIO registration
Johannes Berg (5):
mac80211: mark TX-during-stop for TX in in_reconfig
mac80211: validate extended element ID is present
mac80211: track only QoS data frames for admission control
mac80211: agg-tx: don't schedule_and_wake_txq() under sta->lock
mac80211: fix lookup when adding AddBA extension element
John Keeping (2):
arm64: dts: rockchip: fix rk3308-roc-cc vcc-sd supply
arm64: dts: rockchip: fix rk3399-leez-p710 vcc3v3-lan supply
Juergen Gross (5):
xen/blkfront: harden blkfront against event channel storms xen/netfront: harden netfront against event channel storms xen/console: harden hvc_xen against event channel storms xen/netback: fix rx queue stall detection xen/netback: don't queue unlimited number of packages
Karen Sornek (1):
igb: Fix removal of unicast MAC filters of VFs
Lang Yu (1):
drm/amd/pm: fix a potential gpu_metrics_table memory leak
Le Ma (1):
drm/amdgpu: correct register access for RLC_JUMP_TABLE_RESTORE
Letu Ren (1):
igbvf: fix double free in igbvf_probe
Magnus Karlsson (2):
xsk: Do not sleep in poll() when need_wakeup set Revert "xsk: Do not sleep in poll() when need_wakeup set"
Martin KaFai Lau (1):
bpf, selftests: Fix racing issue in btf_skc_cls_ingress test
Mike Tipton (1):
clk: Don't parent clks until the parent is fully registered
Miklos Szeredi (2):
fuse: annotate lock in fuse_reverse_inval_entry()
ovl: fix warning in ovl_create_real()
Naohiro Aota (1):
zonefs: add MODULE_ALIAS_FS
Nathan Chancellor (2):
soc/tegra: fuse: Fix bitwise vs. logical OR warning
Input: touchscreen - avoid bitwise vs logical OR warning
Nehal Bakulchandra Shah (1):
usb: xhci: Extend support for runtime power management for AMD's Yellow carp.
Paolo Bonzini (1):
KVM: downgrade two BUG_ONs to WARN_ON_ONCE
Paul E. McKenney (1):
rcu: Mark accesses to rcu_state.n_force_qs
Paul Moore (1):
audit: improve robustness of the audit queue handling
Pavel Skripkin (1):
media: mxl111sf: change mutex_init() location
Philipp Rudo (1):
s390/kexec_file: fix error handling when applying relocations
Robert Schlabbach (1):
ixgbe: Document how to enable NBASE-T support
Sasha Neftin (1):
igc: Fix typo in i225 LTR functions
Stefan Roese (1):
PCI/MSI: Mask MSI-X vectors only on success
Stephan Gerhold (1):
soc: imx: Register SoC device only on i.MX boards
Sudeep Holla (1):
firmware: arm_scpi: Fix string overflow in SCPI genpd driver
Tejun Heo (1):
iocost: Fix divide-by-zero on donation from low hweight cgroup
Tetsuo Handa (1):
tty: n_hdlc: make n_hdlc_tty_wakeup() asynchronous
Thomas Gleixner (1):
PCI/MSI: Clear PCI_MSIX_FLAGS_MASKALL on error
Tony Lindgren (1):
bus: ti-sysc: Fix variable set but not used warning for reinit_modules
Vitaly Kuznetsov (2):
KVM: selftests: Make sure kvm_create_max_vcpus test won't hit RLIMIT_NOFILE
KVM: x86: Drop guest CPUID check for host initiated writes to MSR_IA32_PERF_CAPABILITIES
Wei Wang (1):
virtio/vsock: fix the transport to work with VMADDR_CID_ANY
Will Deacon (1):
virtio_ring: Fix querying of maximum DMA mapping size for virtio device
Willem de Bruijn (1):
net/packet: rx_owner_map depends on pg_vec
Xiaoming Ni (1):
powerpc/85xx: Fix oops when CONFIG_FSL_PMC=n
Xiubo Li (1):
ceph: initialize pathlen variable in reconnect_caps_cb
Yu Liao (1):
timekeeping: Really make sure wall_to_monotonic isn't positive
Greg Kroah-Hartman
maintainerDocumentation/networking/device_drivers/ethernet/intel/ixgbe.rst +16 -0
@@ -440,6 +440,22 @@ NOTE: For 82599-based network connections, if you are enabling jumbo frames in a virtual function (VF), jumbo frames must first be enabled in the physical function (PF). The VF MTU setting cannot be larger than the PF MTU. +NBASE-T Support +--------------- +The ixgbe driver supports NBASE-T on some devices. However, the advertisement +of NBASE-T speeds is suppressed by default, to accommodate broken network +switches which cannot cope with advertised NBASE-T speeds. Use the ethtool +command to enable advertising NBASE-T speeds on devices which support it:: + + ethtool -s eth? advertise 0x1800000001028 + +On Linux systems with INTERFACES(5), this can be specified as a pre-up command +in /etc/network/interfaces so that the interface is always brought up with +NBASE-T support, e.g.:: + + iface eth? inet dhcp + pre-up ethtool -s eth? advertise 0x1800000001028 || true + Generic Receive Offload, aka GRO -------------------------------- The driver supports the in-kernel software implementation of GRO. GRO has
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 87 +SUBLEVEL = 88 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/imx6ull-pinfunc.h +1 -1
@@ -82,6 +82,6 @@#define MX6ULL_PAD_CSI_DATA04__ESAI_TX_FS 0x01F4 0x0480 0x0000 0x9 0x0#define MX6ULL_PAD_CSI_DATA05__ESAI_TX_CLK 0x01F8 0x0484 0x0000 0x9 0x0#define MX6ULL_PAD_CSI_DATA06__ESAI_TX5_RX0 0x01FC 0x0488 0x0000 0x9 0x0 -#define MX6ULL_PAD_CSI_DATA07__ESAI_T0 0x0200 0x048C 0x0000 0x9 0x0 +#define MX6ULL_PAD_CSI_DATA07__ESAI_TX0 0x0200 0x048C 0x0000 0x9 0x0#endif /* __DTS_IMX6ULL_PINFUNC_H */
arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts +1 -1
@@ -12,7 +12,7 @@ &qspi { flash0: n25q00@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00aa"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_arria5_socdk.dts +1 -1
@@ -119,7 +119,7 @@ &qspi { flash: flash@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q256a"; + compatible = "micron,n25q256a", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_socdk.dts +1 -1
@@ -124,7 +124,7 @@ &qspi { flash0: n25q00@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <0>; /* chip select */ spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_sockit.dts +1 -1
@@ -169,7 +169,7 @@ &qspi { flash: flash@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_socrates.dts +1 -1
@@ -80,7 +80,7 @@ &qspi { flash: flash@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q256a"; + compatible = "micron,n25q256a", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>; m25p,fast-read;
arch/arm/boot/dts/socfpga_cyclone5_sodia.dts +1 -1
@@ -116,7 +116,7 @@ &qspi { flash0: n25q512a@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q512a"; + compatible = "micron,n25q512a", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts +2 -2
@@ -224,7 +224,7 @@ &qspi { n25q128@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q128"; + compatible = "micron,n25q128", "jedec,spi-nor"; reg = <0>; /* chip select */ spi-max-frequency = <100000000>; m25p,fast-read;
@@ -241,7 +241,7 @@ n25q128@0 { n25q00@1 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <1>; /* chip select */ spi-max-frequency = <100000000>; m25p,fast-read;
arch/arm64/boot/dts/freescale/imx8mm.dtsi +4 -3
@@ -866,11 +866,12 @@ fec1: ethernet@30be0000 { assigned-clocks = <&clk IMX8MM_CLK_ENET_AXI>, <&clk IMX8MM_CLK_ENET_TIMER>, <&clk IMX8MM_CLK_ENET_REF>, - <&clk IMX8MM_CLK_ENET_TIMER>; + <&clk IMX8MM_CLK_ENET_PHY_REF>; assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_266M>, <&clk IMX8MM_SYS_PLL2_100M>, - <&clk IMX8MM_SYS_PLL2_125M>; - assigned-clock-rates = <0>, <0>, <125000000>, <100000000>; + <&clk IMX8MM_SYS_PLL2_125M>, + <&clk IMX8MM_SYS_PLL2_50M>; + assigned-clock-rates = <0>, <100000000>, <125000000>, <0>; fsl,num-tx-queues = <3>; fsl,num-rx-queues = <3>; status = "disabled";
arch/arm64/boot/dts/freescale/imx8mn.dtsi +4 -3
@@ -753,11 +753,12 @@ fec1: ethernet@30be0000 { assigned-clocks = <&clk IMX8MN_CLK_ENET_AXI>, <&clk IMX8MN_CLK_ENET_TIMER>, <&clk IMX8MN_CLK_ENET_REF>, - <&clk IMX8MN_CLK_ENET_TIMER>; + <&clk IMX8MN_CLK_ENET_PHY_REF>; assigned-clock-parents = <&clk IMX8MN_SYS_PLL1_266M>, <&clk IMX8MN_SYS_PLL2_100M>, - <&clk IMX8MN_SYS_PLL2_125M>; - assigned-clock-rates = <0>, <0>, <125000000>, <100000000>; + <&clk IMX8MN_SYS_PLL2_125M>, + <&clk IMX8MN_SYS_PLL2_50M>; + assigned-clock-rates = <0>, <100000000>, <125000000>, <0>; fsl,num-tx-queues = <3>; fsl,num-rx-queues = <3>; status = "disabled";
arch/arm64/boot/dts/freescale/imx8mp-evk.dts +2 -0
@@ -62,6 +62,8 @@ ethphy1: ethernet-phy@1 { reg = <1>; eee-broken-1000t; reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>; + reset-assert-us = <10000>; + reset-deassert-us = <80000>; }; }; };
arch/arm64/boot/dts/freescale/imx8mp.dtsi +4 -3
@@ -725,11 +725,12 @@ fec: ethernet@30be0000 { assigned-clocks = <&clk IMX8MP_CLK_ENET_AXI>, <&clk IMX8MP_CLK_ENET_TIMER>, <&clk IMX8MP_CLK_ENET_REF>, - <&clk IMX8MP_CLK_ENET_TIMER>; + <&clk IMX8MP_CLK_ENET_PHY_REF>; assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_266M>, <&clk IMX8MP_SYS_PLL2_100M>, - <&clk IMX8MP_SYS_PLL2_125M>; - assigned-clock-rates = <0>, <0>, <125000000>, <100000000>; + <&clk IMX8MP_SYS_PLL2_125M>, + <&clk IMX8MP_SYS_PLL2_50M>; + assigned-clock-rates = <0>, <100000000>, <125000000>, <0>; fsl,num-tx-queues = <3>; fsl,num-rx-queues = <3>; status = "disabled";
arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts +1 -1
@@ -91,7 +91,7 @@ vcc_sd: vcc-sd { regulator-max-microvolt = <3300000>; regulator-always-on; regulator-boot-on; - vim-supply = <&vcc_io>; + vin-supply = <&vcc_io>; }; vdd_core: vdd-core {
arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi +0 -1
@@ -699,7 +699,6 @@ &sdmmc { &sdhci { bus-width = <8>; mmc-hs400-1_8v; - mmc-hs400-enhanced-strobe; non-removable; status = "okay"; };
arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts +1 -1
@@ -49,7 +49,7 @@ vcc3v3_lan: vcc3v3-lan { regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; - vim-supply = <&vcc3v3_sys>; + vin-supply = <&vcc3v3_sys>; }; vcc3v3_sys: vcc3v3-sys {
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi +1 -1
@@ -459,7 +459,7 @@ &io_domains { status = "okay"; bt656-supply = <&vcc_3v0>; - audio-supply = <&vcc_3v0>; + audio-supply = <&vcc1v8_codec>; sdmmc-supply = <&vcc_sdio>; gpio1830-supply = <&vcc_3v0>; };
arch/powerpc/platforms/85xx/smp.c +2 -2
@@ -220,7 +220,7 @@ static int smp_85xx_start_cpu(int cpu)local_irq_save (flags);hard_irq_disable (); -if (qoriq_pm_ops) +if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) qoriq_pm_ops->cpu_up_prepare (cpu);/* if cpu is not spinning, reset it */
@@ -292,7 +292,7 @@ static int smp_85xx_kick_cpu(int nr) booting_thread_hwid =cpu_thread_in_core (nr); primary =cpu_first_thread_sibling (nr); -if (qoriq_pm_ops) +if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) qoriq_pm_ops->cpu_up_prepare (nr);/*
arch/s390/kernel/machine_kexec_file.c +6 -1
@@ -277,6 +277,7 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi, {Elf_Rela *relas;int i, r_type; +int ret; relas = (void *)pi->ehdr + relsec->sh_offset;
@@ -311,7 +312,11 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi, addr = section->sh_addr + relas[i].r_offset; r_type =ELF64_R_TYPE (relas[i].r_info); -arch_kexec_do_relocs (r_type, loc, val, addr); + ret =arch_kexec_do_relocs (r_type, loc, val, addr); +if (ret) { +pr_err ("Unknown rela relocation: %d\n" , r_type); +return -ENOEXEC ; + } }return 0 ; }
arch/x86/kvm/x86.c +1 -1
@@ -3065,7 +3065,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)if (!msr_info->host_initiated)return 1 ; -if (guest_cpuid_has (vcpu,X86_FEATURE_PDCM ) &&kvm_get_msr_feature (&msr_ent)) +if (kvm_get_msr_feature (&msr_ent))return 1 ;if (data & ~msr_ent.data)return 1 ;
block/blk-iocost.c +8 -1
@@ -2246,7 +2246,14 @@ static void ioc_timer_fn(struct timer_list *timer) hwm =current_hweight_max (iocg); new_hwi =hweight_after_donation (iocg, old_hwi, hwm, usage, &now); -if (new_hwi < hwm) { +/* +* Donation calculation assumes hweight_after_donation +* to be positive, a condition that a donor w/ hwa < 2 +* can't meet. Don't bother with donation if hwa is +* below 2. It's not gonna make a meaningful difference +* anyway. +*/ +if (new_hwi < hwm && hwa >=2 ) { iocg->hweight_donating = hwa; iocg->hweight_after_donation = new_hwi;list_add (&iocg->surplus_list, &surpluses);
drivers/ata/libata-scsi.c +13 -2
@@ -2870,8 +2870,19 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc) goto invalid_fld; } -if (ata_is_ncq (tf->protocol) && (cdb[2 + cdb_offset] &0x3 ) ==0 ) - tf->protocol =ATA_PROT_NCQ_NODATA ; +if ((cdb[2 + cdb_offset] &0x3 ) ==0 ) { +/* +* When T_LENGTH is zero (No data is transferred), dir should +* be DMA_NONE. +*/ +if (scmd->sc_data_direction !=DMA_NONE ) { + fp =2 + cdb_offset; + goto invalid_fld; + } + +if (ata_is_ncq (tf->protocol)) + tf->protocol =ATA_PROT_NCQ_NODATA ; + }/* enable LBA */ tf->flags |=ATA_TFLAG_LBA ;
drivers/block/xen-blkfront.c +12 -3
@@ -1573,9 +1573,12 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)unsigned long flags;struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id;struct blkfront_info *info = rinfo->dev_info; +unsigned int eoiflag =XEN_EOI_FLAG_SPURIOUS ; -if (unlikely (info->connected !=BLKIF_STATE_CONNECTED )) +if (unlikely (info->connected !=BLKIF_STATE_CONNECTED )) { +xen_irq_lateeoi (irq,XEN_EOI_FLAG_SPURIOUS );return IRQ_HANDLED ; + }spin_lock_irqsave (&rinfo->ring_lock, flags); again:
@@ -1591,6 +1594,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)unsigned long id;unsigned int op; + eoiflag =0 ; +RING_COPY_RESPONSE (&rinfo->ring, i, &bret); id = bret.id;
@@ -1707,6 +1712,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)spin_unlock_irqrestore (&rinfo->ring_lock, flags); +xen_irq_lateeoi (irq, eoiflag); +return IRQ_HANDLED ; err:
@@ -1714,6 +1721,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)spin_unlock_irqrestore (&rinfo->ring_lock, flags); +/* No EOI in order to avoid further interrupts. */ +pr_alert ("%s disabled for further use\n" , info->gd->disk_name);return IRQ_HANDLED ; }
@@ -1753,8 +1762,8 @@ static int setup_blkring(struct xenbus_device *dev,if (err) goto fail; - err =bind_evtchn_to_irqhandler (rinfo->evtchn, blkif_interrupt,0 , -"blkif" , rinfo); + err =bind_evtchn_to_irqhandler_lateeoi (rinfo->evtchn, blkif_interrupt, +0 ,"blkif" , rinfo);if (err <=0 ) {xenbus_dev_fatal (dev, err,"bind_evtchn_to_irqhandler failed" );
drivers/bus/ti-sysc.c +1 -2
@@ -2443,12 +2443,11 @@ static void sysc_reinit_modules(struct sysc_soc_info *soc)struct sysc_module *module;struct list_head *pos;struct sysc *ddata; -int error =0 ;list_for_each (pos, &sysc_soc->restored_modules) { module = list_entry(pos, struct sysc_module, node); ddata = module->ddata; - error =sysc_reinit_module (ddata, ddata->enabled); +sysc_reinit_module (ddata, ddata->enabled); } }
drivers/clk/clk.c +12 -3
@@ -3389,6 +3389,14 @@ static int __clk_core_init(struct clk_core *core)clk_prepare_lock (); +/* +* Set hw->core after grabbing the prepare_lock to synchronize with +* callers of clk_core_fill_parent_index() where we treat hw->core +* being NULL as the clk not being registered yet. This is crucial so +* that clks aren't parented until their parent is fully registered. +*/ + core->hw->core = core; + ret =clk_pm_runtime_get (core);if (ret) goto unlock;
@@ -3557,8 +3565,10 @@ static int __clk_core_init(struct clk_core *core) out:clk_pm_runtime_put (core); unlock: -if (ret) +if (ret) {hlist_del_init (&core->child_node); + core->hw->core =NULL ; + }clk_prepare_unlock ();
@@ -3804,7 +3814,6 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw) core->num_parents = init->num_parents; core->min_rate =0 ; core->max_rate =ULONG_MAX ; - hw->core = core; ret =clk_core_populate_parent_map (core, init);if (ret)
@@ -3822,7 +3831,7 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw) goto fail_create_clk; } -clk_core_link_consumer (hw->core, hw->clk); +clk_core_link_consumer (core, hw->clk); ret =__clk_core_init (core);if (!ret)
drivers/dma/st_fdma.c +1 -1
@@ -874,4 +874,4 @@ MODULE_LICENSE("GPL v2");MODULE_DESCRIPTION ("STMicroelectronics FDMA engine driver" );MODULE_AUTHOR ("Ludovic.barre <[email protected]>" );MODULE_AUTHOR ("Peter Griffin <[email protected]>" ); -MODULE_ALIAS ("platform: " DRIVER_NAME ); +MODULE_ALIAS ("platform:" DRIVER_NAME );
drivers/firmware/scpi_pm_domain.c +7 -3
@@ -16,7 +16,6 @@ struct scpi_pm_domain {struct generic_pm_domain genpd;struct scpi_ops *ops;u32 domain; -char name[30 ]; };/*
@@ -110,8 +109,13 @@ static int scpi_pm_domain_probe(struct platform_device *pdev) scpi_pd->domain = i; scpi_pd->ops = scpi_ops; -sprintf (scpi_pd->name,"%pOFn.%d" , np, i); - scpi_pd->genpd.name = scpi_pd->name; + scpi_pd->genpd.name =devm_kasprintf (dev,GFP_KERNEL , +"%pOFn.%d" , np, i); +if (!scpi_pd->genpd.name) { +dev_err (dev,"Failed to allocate genpd name:%pOFn.%d\n" , + np, i); +continue ; + } scpi_pd->genpd.power_off = scpi_pd_power_off; scpi_pd->genpd.power_on = scpi_pd_power_on;
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 -2
@@ -3002,8 +3002,8 @@ static void gfx_v9_0_init_pg(struct amdgpu_device *adev) AMD_PG_SUPPORT_CP | AMD_PG_SUPPORT_GDS | AMD_PG_SUPPORT_RLC_SMU_HS)) { -WREG32 (mmRLC_JUMP_TABLE_RESTORE, - adev->gfx.rlc.cp_table_gpu_addr >>8 ); +WREG32_SOC15 (GC ,0 , mmRLC_JUMP_TABLE_RESTORE, + adev->gfx.rlc.cp_table_gpu_addr >>8 );gfx_v9_0_init_gfx_power_gating (adev); } }
drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c +3 -0
@@ -187,6 +187,9 @@ int smu_v12_0_fini_smc_tables(struct smu_context *smu)kfree (smu_table->watermarks_table); smu_table->watermarks_table =NULL ; +kfree (smu_table->gpu_metrics_table); + smu_table->gpu_metrics_table =NULL ; +return 0 ; }
drivers/gpu/drm/ast/ast_mode.c +4 -1
@@ -857,7 +857,10 @@ static void ast_crtc_reset(struct drm_crtc *crtc)if (crtc->state) crtc->funcs->atomic_destroy_state (crtc, crtc->state); -__drm_atomic_helper_crtc_reset (crtc, &ast_state->base); +if (ast_state) +__drm_atomic_helper_crtc_reset (crtc, &ast_state->base); +else +__drm_atomic_helper_crtc_reset (crtc,NULL ); } static struct drm_crtc_state *
drivers/input/touchscreen/of_touchscreen.c +21 -21
59 lines not on this page · raw message
drivers/md/persistent-data/dm-btree-remove.c +1 -1
@@ -423,9 +423,9 @@ static int rebalance_children(struct shadow_spine *s,memcpy (n,dm_block_data (child),dm_bm_block_size (dm_tm_get_bm (info->tm))); -dm_tm_unlock (info->tm, child);dm_tm_dec (info->tm,dm_block_location (child)); +dm_tm_unlock (info->tm, child);return 0 ; }
drivers/media/usb/dvb-usb-v2/mxl111sf.c +14 -2
@@ -931,8 +931,6 @@ static int mxl111sf_init(struct dvb_usb_device *d) .len = sizeof(eeprom), .buf = eeprom }, }; -mutex_init (&state->msg_lock); - ret =get_chip_info (state);if (mxl_fail (ret))pr_err ("failed to get chip info during probe" );
@@ -1074,6 +1072,14 @@ static int mxl111sf_get_stream_config_dvbt(struct dvb_frontend *fe,return 0 ; } +static int mxl111sf_probe (struct dvb_usb_device *dev) +{ +struct mxl111sf_state *state =d_to_priv (dev); + +mutex_init (&state->msg_lock); +return 0 ; +} +static struct dvb_usb_device_properties mxl111sf_props_dvbt = { .driver_name =KBUILD_MODNAME , .owner =THIS_MODULE ,
@@ -1083,6 +1089,7 @@ static struct dvb_usb_device_properties mxl111sf_props_dvbt = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_dvbt, .tuner_attach = mxl111sf_attach_tuner,
@@ -1124,6 +1131,7 @@ static struct dvb_usb_device_properties mxl111sf_props_atsc = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_atsc, .tuner_attach = mxl111sf_attach_tuner,
@@ -1165,6 +1173,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mh = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_mh, .tuner_attach = mxl111sf_attach_tuner,
@@ -1233,6 +1242,7 @@ static struct dvb_usb_device_properties mxl111sf_props_atsc_mh = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_atsc_mh, .tuner_attach = mxl111sf_attach_tuner,
@@ -1311,6 +1321,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mercury = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_mercury, .tuner_attach = mxl111sf_attach_tuner,
@@ -1381,6 +1392,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mercury_mh = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_mercury_mh, .tuner_attach = mxl111sf_attach_tuner,
drivers/net/ethernet/broadcom/bcmsysport.c +4 -1
@@ -1304,11 +1304,11 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,struct bcm_sysport_priv *priv =netdev_priv (dev);struct device *kdev = &priv->pdev->dev;struct bcm_sysport_tx_ring *ring; +unsigned long flags, desc_flags;struct bcm_sysport_cb *cb;struct netdev_queue *txq;u32 len_status, addr_lo;unsigned int skb_len; -unsigned long flags;dma_addr_t mapping;u16 queue;int ret;
@@ -1368,8 +1368,10 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb, ring->desc_count--;/* Ports are latched, so write upper address first */ +spin_lock_irqsave (&priv->desc_lock, desc_flags);tdma_writel (priv, len_status,TDMA_WRITE_PORT_HI (ring->index));tdma_writel (priv, addr_lo,TDMA_WRITE_PORT_LO (ring->index)); +spin_unlock_irqrestore (&priv->desc_lock, desc_flags);/* Check ring space and update SW control flow */ if (ring->desc_count ==0 )
@@ -2008,6 +2010,7 @@ static int bcm_sysport_open(struct net_device *dev) }/* Initialize both hardware and software ring */ +spin_lock_init (&priv->desc_lock);for (i =0 ; i < dev->num_tx_queues; i++) { ret =bcm_sysport_init_tx_ring (priv, i);if (ret) {
drivers/net/ethernet/broadcom/bcmsysport.h +1 -0
@@ -742,6 +742,7 @@ struct bcm_sysport_priv {int wol_irq;/* Transmit rings */ +spinlock_t desc_lock;struct bcm_sysport_tx_ring *tx_rings;/* Receive queue */
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c +2 -1
@@ -109,7 +109,8 @@ int hclgevf_send_mbx_msg(struct hclgevf_dev *hdev,memcpy (&req->msg, send_msg,sizeof (struct hclge_vf_to_pf_msg )); -trace_hclge_vf_mbx_send (hdev, req); +if (test_bit (HCLGEVF_STATE_NIC_REGISTERED , &hdev->state)) +trace_hclge_vf_mbx_send (hdev, req);/* synchronous send */ if (need_resp) {
drivers/net/ethernet/intel/igb/igb_main.c +14 -14
@@ -7654,6 +7654,20 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,struct vf_mac_filter *entry =NULL ;int ret =0 ; +if ((vf_data->flags &IGB_VF_FLAG_PF_SET_MAC ) && + !vf_data->trusted) { +dev_warn (&pdev->dev, +"VF %d requested MAC filter but is administratively denied\n" , + vf); +return -EINVAL ; + } +if (!is_valid_ether_addr (addr)) { +dev_warn (&pdev->dev, +"VF %d attempted to set invalid MAC filter\n" , + vf); +return -EINVAL ; + } +switch (info) {case E1000_VF_MAC_FILTER_CLR :/* remove all unicast MAC filters related to the current VF */
@@ -7667,20 +7681,6 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf, }break ;case E1000_VF_MAC_FILTER_ADD : -if ((vf_data->flags &IGB_VF_FLAG_PF_SET_MAC ) && - !vf_data->trusted) { -dev_warn (&pdev->dev, -"VF %d requested MAC filter but is administratively denied\n" , - vf); -return -EINVAL ; - } -if (!is_valid_ether_addr (addr)) { -dev_warn (&pdev->dev, -"VF %d attempted to set invalid MAC filter\n" , - vf); -return -EINVAL ; - } -/* try to find empty slot in the list */ list_for_each (pos, &adapter->vf_macs.l) { entry = list_entry(pos, struct vf_mac_filter, l);
drivers/net/ethernet/intel/igbvf/netdev.c +1 -0
@@ -2873,6 +2873,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)return 0 ; err_hw_init: +netif_napi_del (&adapter->rx_ring->napi);kfree (adapter->tx_ring);kfree (adapter->rx_ring); err_sw_init:
drivers/net/ethernet/intel/igc/igc_i225.c +1 -1
@@ -636,7 +636,7 @@ s32 igc_set_ltr_i225(struct igc_hw *hw, bool link) ltrv =rd32 (IGC_LTRMAXV );if (ltr_max != (ltrv &IGC_LTRMAXV_LTRV_MASK )) { ltrv =IGC_LTRMAXV_LSNP_REQ | ltr_max | - (scale_min <<IGC_LTRMAXV_SCALE_SHIFT ); + (scale_max <<IGC_LTRMAXV_SCALE_SHIFT );wr32 (IGC_LTRMAXV , ltrv); } }
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +4 -0
@@ -5532,6 +5532,10 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)if (!speed && hw->mac.ops.get_link_capabilities) { ret = hw->mac.ops.get_link_capabilities (hw, &speed, &autoneg); +/* remove NBASE-T speeds from default autonegotiation +* to accommodate broken network switches in the field +* which cannot cope with advertised NBASE-T speeds +*/ speed &= ~(IXGBE_LINK_SPEED_5GB_FULL |IXGBE_LINK_SPEED_2_5GB_FULL ); }
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +3 -0
@@ -3405,6 +3405,9 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)/* flush pending Tx transactions */ ixgbe_clear_tx_pending (hw); +/* set MDIO speed before talking to the PHY in case it's the 1st time */ +ixgbe_set_mdio_speed (hw); +/* PHY ops must be identified and initialized prior to reset */ status = hw->phy.ops.init (hw); if (status == IXGBE_ERR_SFP_NOT_SUPPORTED ||
drivers/net/ethernet/sfc/ef100_nic.c +3 -0
@@ -597,6 +597,9 @@ static size_t ef100_update_stats(struct efx_nic *efx,ef100_common_stat_mask (mask);ef100_ethtool_stat_mask (mask); +if (!mc_stats) +return 0 ; +efx_nic_copy_stats (efx, mc_stats);efx_nic_update_stats (ef100_stat_desc,EF100_STAT_COUNT , mask, stats, mc_stats, false);
drivers/net/netdevsim/bpf.c +1 -0
@@ -514,6 +514,7 @@ nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap) goto err_free; key = nmap->entry[i].key; *key = i; +memset (nmap->entry[i].value,0 , offmap->map.value_size); } }
drivers/net/xen-netback/common.h +1 -0
@@ -203,6 +203,7 @@ struct xenvif_queue { /* Per-queue data for xenvif */unsigned int rx_queue_max;unsigned int rx_queue_len;unsigned long last_rx_time; +unsigned int rx_slots_needed;bool stalled;struct xenvif_copy_state rx_copy;
drivers/net/xen-netback/rx.c +49 -28
129 lines not on this page · raw message
drivers/net/xen-netfront.c +94 -31
250 lines not on this page · raw message
drivers/pci/msi.c +11 -4
@@ -828,9 +828,6 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, goto out_disable; } -/* Ensure that all table entries are masked. */ -msix_mask_all (base, tsize); - ret =msix_setup_entries (dev, base, entries, nvec, affd);if (ret) goto out_disable;
@@ -853,6 +850,16 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,/* Set MSI-X enabled bits and unmask the function */ pci_intx_for_msi (dev,0 ); dev->msix_enabled =1 ; + +/* +* Ensure that all table entries are masked to prevent +* stale entries from firing in a crash kernel. +* +* Done late to deal with a broken Marvell NVME device +* which takes the MSI-X mask bits into account even +* when MSI-X is disabled, which prevents MSI delivery. +*/ +msix_mask_all (base, tsize);pci_msix_clear_and_set_ctrl (dev,PCI_MSIX_FLAGS_MASKALL ,0 );pcibios_free_irq (dev);
@@ -879,7 +886,7 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,free_msi_irqs (dev); out_disable: -pci_msix_clear_and_set_ctrl (dev,PCI_MSIX_FLAGS_ENABLE ,0 ); +pci_msix_clear_and_set_ctrl (dev,PCI_MSIX_FLAGS_MASKALL |PCI_MSIX_FLAGS_ENABLE ,0 );return ret; }
drivers/scsi/scsi_debug.c +25 -17
137 lines not on this page · raw message
drivers/soc/imx/soc-imx.c +4 -0
@@ -33,6 +33,10 @@ static int __init imx_soc_device_init(void)u32 val;int ret; +/* Return early if this is running on devices with different SoCs */ +if (!__mxc_cpu_type) +return 0 ; +if (of_machine_is_compatible ("fsl,ls1021a" ))return 0 ;
drivers/soc/tegra/fuse/fuse-tegra.c +1 -1
@@ -260,7 +260,7 @@ static struct platform_driver tegra_fuse_driver = { };builtin_platform_driver (tegra_fuse_driver); -bool __init tegra_fuse_read_spare (unsigned int spare) +u32 __init tegra_fuse_read_spare (unsigned int spare) {unsigned int offset = fuse->soc->info->spare + spare *4 ;
drivers/soc/tegra/fuse/fuse.h +1 -1
@@ -63,7 +63,7 @@ struct tegra_fuse {void tegra_init_revision (void );void tegra_init_apbmisc (void ); -bool __init tegra_fuse_read_spare (unsigned int spare); +u32 __init tegra_fuse_read_spare (unsigned int spare);u32 __init tegra_fuse_read_early (unsigned int offset);u8 tegra_get_major_rev (void );
drivers/tee/amdtee/core.c +2 -3
@@ -203,9 +203,8 @@ static int copy_ta_binary(struct tee_context *ctx, void *ptr, void **ta, *ta_size =roundup (fw->size,PAGE_SIZE ); *ta = (void *)__get_free_pages (GFP_KERNEL ,get_order (*ta_size)); -if (IS_ERR (*ta)) { -pr_err ("%s: get_free_pages failed 0x%llx\n" , __func__, - (u64)*ta); +if (!*ta) { +pr_err ("%s: get_free_pages failed\n" , __func__); rc = -ENOMEM ; goto rel_fw; }
drivers/tty/hvc/hvc_xen.c +27 -3
@@ -37,6 +37,8 @@ struct xencons_info {struct xenbus_device *xbdev;struct xencons_interface *intf;unsigned int evtchn; +XENCONS_RING_IDX out_cons; +unsigned int out_cons_same;struct hvc_struct *hvc;int irq;int vtermno;
@@ -138,6 +140,8 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)XENCONS_RING_IDX cons, prod;int recv =0 ;struct xencons_info *xencons =vtermno_to_xencons (vtermno); +unsigned int eoiflag =0 ; +if (xencons ==NULL )return -EINVAL ; intf = xencons->intf;
@@ -157,7 +161,27 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)mb ();/* read ring before consuming */ intf->in_cons = cons; -notify_daemon (xencons); +/* +* When to mark interrupt having been spurious: +* - there was no new data to be read, and +* - the backend did not consume some output bytes, and +* - the previous round with no read data didn't see consumed bytes +* (we might have a race with an interrupt being in flight while +* updating xencons->out_cons, so account for that by allowing one +* round without any visible reason) +*/ +if (intf->out_cons != xencons->out_cons) { + xencons->out_cons = intf->out_cons; + xencons->out_cons_same =0 ; + } +if (recv) { +notify_daemon (xencons); + }else if (xencons->out_cons_same++ >1 ) { + eoiflag =XEN_EOI_FLAG_SPURIOUS ; + } + +xen_irq_lateeoi (xencons->irq, eoiflag); +return recv; }
@@ -386,7 +410,7 @@ static int xencons_connect_backend(struct xenbus_device *dev,if (ret)return ret; info->evtchn = evtchn; - irq =bind_evtchn_to_irq (evtchn); + irq =bind_interdomain_evtchn_to_irq_lateeoi (dev->otherend_id, evtchn);if (irq <0 )return irq; info->irq = irq;
@@ -550,7 +574,7 @@ static int __init xen_hvc_init(void)return r; info =vtermno_to_xencons (HVC_COOKIE ); - info->irq =bind_evtchn_to_irq (info->evtchn); + info->irq =bind_evtchn_to_irq_lateeoi (info->evtchn); }if (info->irq <0 ) info->irq =0 ;/* NO_IRQ */
drivers/tty/n_hdlc.c +22 -1
@@ -139,6 +139,8 @@ struct n_hdlc {struct n_hdlc_buf_list rx_buf_list;struct n_hdlc_buf_list tx_free_buf_list;struct n_hdlc_buf_list rx_free_buf_list; +struct work_struct write_work; +struct tty_struct *tty_for_write_work; };/*
@@ -153,6 +155,7 @@ static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *list);/* Local functions */ static struct n_hdlc *n_hdlc_alloc (void ); +static void n_hdlc_tty_write_work (struct work_struct *work);/* max frame size for memory allocations */ static int maxframe =4096 ;
@@ -209,6 +212,8 @@ static void n_hdlc_tty_close(struct tty_struct *tty)wake_up_interruptible (&tty->read_wait);wake_up_interruptible (&tty->write_wait); +cancel_work_sync (&n_hdlc->write_work); +n_hdlc_free_buf_list (&n_hdlc->rx_free_buf_list);n_hdlc_free_buf_list (&n_hdlc->tx_free_buf_list);n_hdlc_free_buf_list (&n_hdlc->rx_buf_list);
@@ -240,6 +245,8 @@ static int n_hdlc_tty_open(struct tty_struct *tty)return -ENFILE ; } +INIT_WORK (&n_hdlc->write_work, n_hdlc_tty_write_work); + n_hdlc->tty_for_write_work = tty; tty->disc_data = n_hdlc; tty->receive_room =65536 ;
@@ -333,6 +340,20 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) goto check_again; }/* end of n_hdlc_send_frames() */ +/** +* n_hdlc_tty_write_work - Asynchronous callback for transmit wakeup +* @work: pointer to work_struct +* +* Called when low level device driver can accept more send data. +*/ +static void n_hdlc_tty_write_work (struct work_struct *work) +{ + struct n_hdlc *n_hdlc = container_of(work, struct n_hdlc, write_work); +struct tty_struct *tty = n_hdlc->tty_for_write_work; + +n_hdlc_send_frames (n_hdlc, tty); +}/* end of n_hdlc_tty_write_work() */ +/** * n_hdlc_tty_wakeup - Callback for transmit wakeup * @tty: pointer to associated tty instance data
@@ -343,7 +364,7 @@ static void n_hdlc_tty_wakeup(struct tty_struct *tty) {struct n_hdlc *n_hdlc = tty->disc_data; -n_hdlc_send_frames (n_hdlc, tty); +schedule_work (&n_hdlc->write_work); }/* end of n_hdlc_tty_wakeup() */ /**
drivers/tty/serial/8250/8250_fintek.c +0 -20
@@ -290,25 +290,6 @@ static void fintek_8250_set_max_fifo(struct fintek_8250 *pdata) } } -static void fintek_8250_goto_highspeed (struct uart_8250_port *uart, -struct fintek_8250 *pdata) -{ -sio_write_reg (pdata,LDN , pdata->index); - -switch (pdata->pid) { -case CHIP_ID_F81966 : -case CHIP_ID_F81866 :/* set uart clock for high speed serial mode */ -sio_write_mask_reg (pdata,F81866_UART_CLK , -F81866_UART_CLK_MASK , -F81866_UART_CLK_14_769MHZ ); - - uart->port.uartclk =921600 *16 ; -break ; -default :/* leave clock speed untouched */ -break ; - } -} -static void fintek_8250_set_termios (struct uart_port *port,struct ktermios *termios,struct ktermios *old)
@@ -430,7 +411,6 @@ static int probe_setup_port(struct fintek_8250 *pdata,fintek_8250_set_irq_mode (pdata, level_mode);fintek_8250_set_max_fifo (pdata); -fintek_8250_goto_highspeed (uart, pdata);fintek_8250_exit_key (addr[i]);
drivers/usb/core/quirks.c +3 -0
@@ -435,6 +435,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x1532, 0x0116), .driver_info = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, + /* Lenovo USB-C to Ethernet Adapter RTL8153-04 */ + { USB_DEVICE(0x17ef, 0x720c), .driver_info = USB_QUIRK_NO_LPM }, + /* Lenovo Powered USB-C Travel Hub (4X90S92381, RTL8153 GigE) */ { USB_DEVICE(0x17ef, 0x721e), .driver_info = USB_QUIRK_NO_LPM },
drivers/usb/dwc2/platform.c +3 -0
@@ -542,6 +542,9 @@ static int dwc2_driver_probe(struct platform_device *dev) ggpio |=GGPIO_STM32_OTG_GCCFG_IDEN ; ggpio |=GGPIO_STM32_OTG_GCCFG_VBDEN ;dwc2_writel (hsotg, ggpio,GGPIO ); + +/* ID/VBUS detection startup time */ +usleep_range (5000 ,7000 ); } retval =dwc2_drd_init (hsotg);
drivers/usb/early/xhci-dbc.c +11 -4
@@ -14,7 +14,6 @@#include <linux/pci_ids.h> #include <linux/memblock.h> #include <linux/io.h> -#include <linux/iopoll.h> #include <asm/pci-direct.h> #include <asm/fixmap.h> #include <linux/bcd.h>
@@ -136,9 +135,17 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done, int wait, int delay) {u32 result; -return readl_poll_timeout_atomic (ptr, result, - ((result & mask) == done), - delay, wait); +/* Can not use readl_poll_timeout_atomic() for early boot things */ +do { + result =readl (ptr); + result &= mask; +if (result == done) +return 0 ; +udelay (delay); + wait -= delay; + }while (wait >0 ); + +return -ETIMEDOUT ; }static void __init xdbc_bios_handoff (void )
drivers/usb/gadget/composite.c +3 -3
@@ -1649,14 +1649,14 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)u8 endp;if (w_length >USB_COMP_EP0_BUFSIZ ) { -if (ctrl->bRequestType ==USB_DIR_OUT ) { - goto done; - }else { +if (ctrl->bRequestType &USB_DIR_IN ) {/* Cast away the const, we are going to overwrite on purpose. */ __le16 *temp = (__le16 *)&ctrl->wLength; *temp =cpu_to_le16 (USB_COMP_EP0_BUFSIZ ); w_length =USB_COMP_EP0_BUFSIZ ; + }else { + goto done; } }
drivers/usb/gadget/legacy/dbgp.c +3 -3
@@ -346,14 +346,14 @@ static int dbgp_setup(struct usb_gadget *gadget,u16 len =0 ;if (length >DBGP_REQ_LEN ) { -if (ctrl->bRequestType ==USB_DIR_OUT ) { -return err; - }else { +if (ctrl->bRequestType &USB_DIR_IN ) {/* Cast away the const, we are going to overwrite on purpose. */ __le16 *temp = (__le16 *)&ctrl->wLength; *temp =cpu_to_le16 (DBGP_REQ_LEN ); length =DBGP_REQ_LEN ; + }else { +return err; } }
drivers/usb/gadget/legacy/inode.c +3 -3
@@ -1336,14 +1336,14 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)u16 w_length =le16_to_cpu (ctrl->wLength);if (w_length >RBUF_SIZE ) { -if (ctrl->bRequestType ==USB_DIR_OUT ) { -return value; - }else { +if (ctrl->bRequestType &USB_DIR_IN ) {/* Cast away the const, we are going to overwrite on purpose. */ __le16 *temp = (__le16 *)&ctrl->wLength; *temp =cpu_to_le16 (RBUF_SIZE ); w_length =RBUF_SIZE ; + }else { +return value; } }
drivers/usb/host/xhci-pci.c +5 -1
@@ -70,6 +70,8 @@#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 0x161e#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 0x15d6#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 0x15d7 +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_7 0x161c +#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_8 0x161f#define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042#define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142
@@ -325,7 +327,9 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device ==PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_3 || pdev->device ==PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 || pdev->device ==PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 || - pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6)) + pdev->device ==PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 || + pdev->device ==PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_7 || + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_8)) xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;if (xhci->quirks &XHCI_RESET_ON_RESUME )
drivers/usb/serial/cp210x.c +4 -2
@@ -1750,6 +1750,8 @@ static int cp2105_gpioconf_init(struct usb_serial *serial)/* 2 banks of GPIO - One for the pins taken from each serial port */ if (intf_num ==0 ) { + priv->gc.ngpio =2 ; +if (mode.eci ==CP210X_PIN_MODE_MODEM ) {/* mark all GPIOs of this interface as reserved */ priv->gpio_altfunc =0xff ;
@@ -1760,8 +1762,9 @@ static int cp2105_gpioconf_init(struct usb_serial *serial) priv->gpio_pushpull = (u8)((le16_to_cpu (config.gpio_mode) &CP210X_ECI_GPIO_MODE_MASK ) >>CP210X_ECI_GPIO_MODE_OFFSET ); - priv->gc.ngpio =2 ; }else if (intf_num ==1 ) { + priv->gc.ngpio =3 ; +if (mode.sci ==CP210X_PIN_MODE_MODEM ) {/* mark all GPIOs of this interface as reserved */ priv->gpio_altfunc =0xff ;
@@ -1772,7 +1775,6 @@ static int cp2105_gpioconf_init(struct usb_serial *serial) priv->gpio_pushpull = (u8)((le16_to_cpu (config.gpio_mode) &CP210X_SCI_GPIO_MODE_MASK ) >>CP210X_SCI_GPIO_MODE_OFFSET ); - priv->gc.ngpio =3 ; }else {return -ENODEV ; }
drivers/usb/serial/option.c +8 -0
@@ -1219,6 +1219,14 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(2) | RSVD(3) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1063, 0xff), /* Telit LN920 (ECM) */ .driver_info = NCTRL(0) | RSVD(1) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1070, 0xff), /* Telit FN990 (rmnet) */ + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1071, 0xff), /* Telit FN990 (MBIM) */ + .driver_info = NCTRL(0) | RSVD(1) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1072, 0xff), /* Telit FN990 (RNDIS) */ + .driver_info = NCTRL(2) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1073, 0xff), /* Telit FN990 (ECM) */ + .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
drivers/vhost/vdpa.c +1 -1
@@ -196,7 +196,7 @@ static int vhost_vdpa_config_validate(struct vhost_vdpa *v,break ; } -if (c->len ==0 ) +if (c->len ==0 || c->off > size)return -EINVAL ;if (c->len > size - c->off)
drivers/virtio/virtio_ring.c +1 -1
@@ -263,7 +263,7 @@ size_t virtio_max_dma_size(struct virtio_device *vdev)size_t max_segment_size =SIZE_MAX ;if (vring_use_dma_api (vdev)) - max_segment_size =dma_max_mapping_size (&vdev->dev); + max_segment_size =dma_max_mapping_size (vdev->dev.parent);return max_segment_size; }
fs/btrfs/disk-io.c +8 -0
@@ -1603,6 +1603,14 @@ static struct btrfs_root *btrfs_get_root_ref(struct btrfs_fs_info *fs_info, }return root; fail: +/* +* If our caller provided us an anonymous device, then it's his +* responsability to free it in case we fail. So we have to set our +* root's anon_dev to 0 to avoid a double free, once by btrfs_put_root() +* and once again by our caller. +*/ +if (anon_dev) + root->anon_dev =0 ;btrfs_put_root (root);return ERR_PTR (ret); }
fs/btrfs/tree-log.c +1 -0
@@ -1109,6 +1109,7 @@ static inline int __add_inode_ref(struct btrfs_trans_handle *trans, parent_objectid, victim_name, victim_name_len);if (ret <0 ) { +kfree (victim_name);return ret; }else if (!ret) { ret = -ENOENT ;
fs/ceph/caps.c +8 -8
@@ -4359,7 +4359,7 @@ void ceph_get_fmode(struct ceph_inode_info *ci, int fmode, int count) {struct ceph_mds_client *mdsc =ceph_sb_to_mdsc (ci->vfs_inode.i_sb);int bits = (fmode <<1 ) |1 ; -bool is_opened = false; +bool already_opened = false;int i;if (count ==1 )
@@ -4367,19 +4367,19 @@ void ceph_get_fmode(struct ceph_inode_info *ci, int fmode, int count)spin_lock (&ci->i_ceph_lock);for (i =0 ; i <CEPH_FILE_MODE_BITS ; i++) { -if (bits & (1 << i)) - ci->i_nr_by_mode[i] += count; -/* -* If any of the mode ref is larger than 1, +* If any of the mode ref is larger than 0, * that means it has been already opened by * others. Just skip checking the PIN ref. */ -if (i && ci->i_nr_by_mode[i] >1 ) - is_opened = true; +if (i && ci->i_nr_by_mode[i]) + already_opened = true; + +if (bits & (1 << i)) + ci->i_nr_by_mode[i] += count; } -if (!is_opened) +if (!already_opened)percpu_counter_inc (&mdsc->metric.opened_inodes);spin_unlock (&ci->i_ceph_lock); }
fs/ceph/mds_client.c +1 -2
@@ -3696,7 +3696,7 @@ static int reconnect_caps_cb(struct inode *inode, struct ceph_cap *cap,struct ceph_pagelist *pagelist = recon_state->pagelist;struct dentry *dentry;char *path; -int pathlen, err; +int pathlen =0 , err;u64 pathbase;u64 snap_follows;
@@ -3716,7 +3716,6 @@ static int reconnect_caps_cb(struct inode *inode, struct ceph_cap *cap, } }else { path =NULL ; - pathlen =0 ; pathbase =0 ; }
fs/fuse/dir.c +1 -1
@@ -1132,7 +1132,7 @@ int fuse_reverse_inval_entry(struct fuse_conn *fc, u64 parent_nodeid,if (!parent)return -ENOENT ; -inode_lock (parent); +inode_lock_nested (parent,I_MUTEX_PARENT );if (!S_ISDIR (parent->i_mode)) goto unlock;
fs/overlayfs/dir.c +1 -2
@@ -137,8 +137,7 @@ int ovl_cleanup_and_whiteout(struct ovl_fs *ofs, struct inode *dir, goto out; } -static int ovl_mkdir_real (struct inode *dir,struct dentry **newdentry, -umode_t mode) +int ovl_mkdir_real (struct inode *dir,struct dentry **newdentry,umode_t mode) {int err;struct dentry *d, *dentry = *newdentry;
fs/overlayfs/overlayfs.h +1 -0
@@ -519,6 +519,7 @@ struct ovl_cattr {#define OVL_CATTR (m) (&(struct ovl_cattr) { .mode = (m) }) +int ovl_mkdir_real (struct inode *dir,struct dentry **newdentry,umode_t mode);struct dentry *ovl_create_real (struct inode *dir,struct dentry *newdentry,struct ovl_cattr *attr);int ovl_cleanup (struct inode *dir,struct dentry *dentry);
fs/overlayfs/super.c +8 -4
@@ -743,10 +743,14 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ofs, goto retry; } - work =ovl_create_real (dir, work,OVL_CATTR (attr.ia_mode)); - err =PTR_ERR (work); -if (IS_ERR (work)) - goto out_err; + err =ovl_mkdir_real (dir, &work, attr.ia_mode); +if (err) + goto out_dput; + +/* Weird filesystem returning with hashed negative (kernfs)? */ + err = -EINVAL ; +if (d_really_is_negative (work)) + goto out_dput;/* * Try to remove POSIX ACL xattrs from workdir. We are good if:
fs/zonefs/super.c +1 -0
@@ -1799,5 +1799,6 @@ static void __exit zonefs_exit(void)MODULE_AUTHOR ("Damien Le Moal" );MODULE_DESCRIPTION ("Zone file system for zoned block devices" );MODULE_LICENSE ("GPL" ); +MODULE_ALIAS_FS ("zonefs" );module_init (zonefs_init);module_exit (zonefs_exit);
kernel/audit.c +10 -11
@@ -718,7 +718,7 @@ static int kauditd_send_queue(struct sock *sk, u32 portid, {int rc =0 ;struct sk_buff *skb; -static unsigned int failed =0 ; +unsigned int failed =0 ;/* NOTE: kauditd_thread takes care of all our locking, we just use * the netlink info passed to us (e.g. sk and portid) */
@@ -735,32 +735,30 @@ static int kauditd_send_queue(struct sock *sk, u32 portid,continue ; } +retry:/* grab an extra skb reference in case of error */ skb_get (skb); rc =netlink_unicast (sk, skb, portid,0 );if (rc <0 ) { -/* fatal failure for our queue flush attempt? */ +/* send failed - try a few times unless fatal error */ if (++failed >= retry_limit || rc == -ECONNREFUSED || rc == -EPERM ) { -/* yes - error processing for the queue */ sk =NULL ;if (err_hook) (*err_hook)(skb); -if (!skb_hook) - goto out; -/* keep processing with the skb_hook */ +if (rc == -EAGAIN ) + rc =0 ; +/* continue to drain the queue */ continue ; }else -/* no - requeue to preserve ordering */ -skb_queue_head (queue, skb); + goto retry; }else { -/* it worked - drop the extra reference and continue */ +/* skb sent - drop the extra reference and continue */ consume_skb (skb); failed =0 ; } } -out:return (rc >=0 ?0 : rc); }
@@ -1609,7 +1607,8 @@ static int __net_init audit_net_init(struct net *net)audit_panic ("cannot initialize netlink socket in namespace" );return -ENOMEM ; } - aunet->sk->sk_sndtimeo =MAX_SCHEDULE_TIMEOUT ; +/* limit the timeout in case auditd is blocked/stopped */ + aunet->sk->sk_sndtimeo =HZ /10 ;return 0 ; }
kernel/bpf/verifier.c +19 -9
@@ -1249,22 +1249,28 @@ static void __reg_bound_offset(struct bpf_reg_state *reg) reg->var_off =tnum_or (tnum_clear_subreg (var64_off), var32_off); } +static bool __reg32_bound_s64 (s32 a) +{ +return a >=0 && a <=S32_MAX ; +} +static void __reg_assign_32_into_64 (struct bpf_reg_state *reg) { reg->umin_value = reg->u32_min_value; reg->umax_value = reg->u32_max_value; -/* Attempt to pull 32-bit signed bounds into 64-bit bounds -* but must be positive otherwise set to worse case bounds -* and refine later from tnum. + +/* Attempt to pull 32-bit signed bounds into 64-bit bounds but must +* be positive otherwise set to worse case bounds and refine later +* from tnum. */ -if (reg->s32_min_value >=0 && reg->s32_max_value >=0 ) - reg->smax_value = reg->s32_max_value; -else - reg->smax_value =U32_MAX ; -if (reg->s32_min_value >=0 ) +if (__reg32_bound_s64 (reg->s32_min_value) && +__reg32_bound_s64 (reg->s32_max_value)) { reg->smin_value = reg->s32_min_value; -else + reg->smax_value = reg->s32_max_value; + }else { reg->smin_value =0 ; + reg->smax_value =U32_MAX ; + } }static void __reg_combine_32_into_64 (struct bpf_reg_state *reg)
@@ -7125,6 +7131,10 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn) insn->dst_reg); }zext_32_to_64 (dst_reg); + +__update_reg_bounds (dst_reg); +__reg_deduce_bounds (dst_reg); +__reg_bound_offset (dst_reg); } }else {/* case: R = imm
kernel/rcu/tree.c +5 -5
@@ -1888,7 +1888,7 @@ static void rcu_gp_fqs(bool first_time)struct rcu_node *rnp =rcu_get_root ();WRITE_ONCE (rcu_state.gp_activity, jiffies); - rcu_state.n_force_qs++; +WRITE_ONCE (rcu_state.n_force_qs, rcu_state.n_force_qs +1 );if (first_time) {/* Collect dyntick-idle snapshots. */ force_qs_rnp (dyntick_save_progress_counter);
@@ -2530,7 +2530,7 @@ static void rcu_do_batch(struct rcu_data *rdp)/* Reset ->qlen_last_fqs_check trigger if enough CBs have drained. */ if (count ==0 && rdp->qlen_last_fqs_check !=0 ) { rdp->qlen_last_fqs_check =0 ; - rdp->n_force_qs_snap = rcu_state.n_force_qs; + rdp->n_force_qs_snap =READ_ONCE (rcu_state.n_force_qs); }else if (count < rdp->qlen_last_fqs_check - qhimark) rdp->qlen_last_fqs_check = count;
@@ -2876,10 +2876,10 @@ static void __call_rcu_core(struct rcu_data *rdp, struct rcu_head *head, }else {/* Give the grace period a kick. */ rdp->blimit =DEFAULT_MAX_RCU_BLIMIT ; -if (rcu_state.n_force_qs == rdp->n_force_qs_snap && +if (READ_ONCE (rcu_state.n_force_qs) == rdp->n_force_qs_snap &&rcu_segcblist_first_pend_cb (&rdp->cblist) != head)rcu_force_quiescent_state (); - rdp->n_force_qs_snap = rcu_state.n_force_qs; + rdp->n_force_qs_snap =READ_ONCE (rcu_state.n_force_qs); rdp->qlen_last_fqs_check =rcu_segcblist_n_cbs (&rdp->cblist); } }
@@ -3986,7 +3986,7 @@ int rcutree_prepare_cpu(unsigned int cpu)/* Set up local state, ensuring consistent view of global state. */ raw_spin_lock_irqsave_rcu_node (rnp, flags); rdp->qlen_last_fqs_check =0 ; - rdp->n_force_qs_snap = rcu_state.n_force_qs; + rdp->n_force_qs_snap =READ_ONCE (rcu_state.n_force_qs); rdp->blimit = blimit;if (rcu_segcblist_empty (&rdp->cblist) &&/* No early-boot CBs? */ !rcu_segcblist_is_offloaded (&rdp->cblist))
kernel/time/timekeeping.c +1 -2
@@ -1310,8 +1310,7 @@ int do_settimeofday64(const struct timespec64 *ts)timekeeping_forward_now (tk); xt =tk_xtime (tk); - ts_delta.tv_sec = ts->tv_sec - xt.tv_sec; - ts_delta.tv_nsec = ts->tv_nsec - xt.tv_nsec; + ts_delta =timespec64_sub (*ts, xt);if (timespec64_compare (&tk->wall_to_monotonic, &ts_delta) >0 ) { ret = -EINVAL ;
net/core/skbuff.c +1 -1
@@ -769,7 +769,7 @@ void skb_dump(const char *level, const struct sk_buff *skb, bool full_pkt) ntohs(skb->protocol), skb->pkt_type, skb->skb_iif);if (dev) -printk ("%sdev name=%s feat=0x%pNF\n" , +printk ("%sdev name=%s feat=%pNF\n" , level, dev->name, &dev->features);if (sk) printk("%ssk family=%hu type=%u proto=%u\n",
net/ipv4/inet_diag.c +1 -3
@@ -261,6 +261,7 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk, r->idiag_state = sk->sk_state; r->idiag_timer =0 ; r->idiag_retrans =0 ; + r->idiag_expires =0 ; if (inet_diag_msg_attrs_fill(sk, skb, r, ext, sk_user_ns(NETLINK_CB(cb->skb).sk),
@@ -314,9 +315,6 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk, r->idiag_retrans = icsk->icsk_probes_out; r->idiag_expires =jiffies_delta_to_msecs (sk->sk_timer.expires - jiffies); - }else { - r->idiag_timer =0 ; - r->idiag_expires =0 ; }if ((ext & (1 << (INET_DIAG_INFO -1 ))) && handler->idiag_info_size) {
net/ipv6/sit.c +0 -1
@@ -1924,7 +1924,6 @@ static int __net_init sit_init_net(struct net *net)return 0 ; err_reg_dev: -ipip6_dev_free (sitn->fb_tunnel_dev);free_netdev (sitn->fb_tunnel_dev); err_alloc_dev:return err;
net/mac80211/agg-rx.c +3 -2
@@ -9,7 +9,7 @@* Copyright 2007, Michael Wu <[email protected]> * Copyright 2007-2010, Intel Corporation * Copyright(c) 2015-2017 Intel Deutschland GmbH -* Copyright (C) 2018-2020 Intel Corporation +* Copyright (C) 2018-2021 Intel Corporation */ /**
@@ -191,7 +191,8 @@ static void ieee80211_add_addbaext(struct ieee80211_sub_if_data *sdata, sband =ieee80211_get_sband (sdata);if (!sband)return ; - he_cap =ieee80211_get_he_iftype_cap (sband, sdata->vif.type); + he_cap =ieee80211_get_he_iftype_cap (sband, +ieee80211_vif_type_p2p (&sdata->vif));if (!he_cap)return ;
net/mac80211/agg-tx.c +11 -5
@@ -9,7 +9,7 @@* Copyright 2007, Michael Wu <[email protected]> * Copyright 2007-2010, Intel Corporation * Copyright(c) 2015-2017 Intel Deutschland GmbH -* Copyright (C) 2018 - 2020 Intel Corporation +* Copyright (C) 2018 - 2021 Intel Corporation */ #include <linux/ieee80211.h>
@@ -106,7 +106,7 @@ static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata, mgmt->u.action.u.addba_req.start_seq_num =cpu_to_le16 (start_seq_num <<4 ); -ieee80211_tx_skb (sdata, skb); +ieee80211_tx_skb_tid (sdata, skb, tid); }void ieee80211_send_bar (struct ieee80211_vif *vif,u8 *ra,u16 tid,u16 ssn)
@@ -213,6 +213,8 @@ ieee80211_agg_start_txq(struct sta_info *sta, int tid, bool enable)struct ieee80211_txq *txq = sta->sta.txq[tid];struct txq_info *txqi; +lockdep_assert_held (&sta->ampdu_mlme.mtx); +if (!txq)return ;
@@ -290,7 +292,6 @@ static void ieee80211_remove_tid_tx(struct sta_info *sta, int tid)ieee80211_assign_tid_tx (sta, tid,NULL );ieee80211_agg_splice_finish (sta->sdata, tid); -ieee80211_agg_start_txq (sta, tid, false);kfree_rcu (tid_tx, rcu_head); }
@@ -480,8 +481,7 @@ static void ieee80211_send_addba_with_timeout(struct sta_info *sta,/* send AddBA request */ ieee80211_send_addba_request (sdata, sta->sta.addr, tid, - tid_tx->dialog_token, - sta->tid_seq[tid] >>4 , + tid_tx->dialog_token, tid_tx->ssn, buf_size, tid_tx->timeout);WARN_ON (test_and_set_bit (HT_AGG_STATE_SENT_ADDBA , &tid_tx->state));
@@ -523,6 +523,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) params.ssn = sta->tid_seq[tid] >>4 ; ret =drv_ampdu_action (local, sdata, ¶ms); + tid_tx->ssn = params.ssn;if (ret ==IEEE80211_AMPDU_TX_START_DELAY_ADDBA ) {return ; }else if (ret ==IEEE80211_AMPDU_TX_START_IMMEDIATE ) {
@@ -889,6 +890,7 @@ void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid, {struct ieee80211_sub_if_data *sdata = sta->sdata;bool send_delba = false; +bool start_txq = false;ht_dbg (sdata,"Stopping Tx BA session for %pM tid %d\n" , sta->sta.addr, tid);
@@ -906,10 +908,14 @@ void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid, send_delba = true;ieee80211_remove_tid_tx (sta, tid); + start_txq = true; unlock_sta:spin_unlock_bh (&sta->lock); +if (start_txq) +ieee80211_agg_start_txq (sta, tid, false); +if (send_delba)ieee80211_send_delba (sdata, sta->sta.addr, tid,WLAN_BACK_INITIATOR ,WLAN_REASON_QSTA_NOT_USE );
net/mac80211/driver-ops.h +4 -1
@@ -1201,8 +1201,11 @@ static inline void drv_wake_tx_queue(struct ieee80211_local *local, {struct ieee80211_sub_if_data *sdata =vif_to_sdata (txq->txq.vif); -if (local->in_reconfig) +/* In reconfig don't transmit now, but mark for waking later */ +if (local->in_reconfig) { +set_bit (IEEE80211_TXQ_STOP_NETIF_TX , &txq->flags);return ; + }if (!check_sdata_in_driver (sdata))return ;
net/mac80211/mlme.c +10 -3
@@ -2493,11 +2493,18 @@ static void ieee80211_sta_tx_wmm_ac_notify(struct ieee80211_sub_if_data *sdata, u16 tx_time) {struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; -u16 tid =ieee80211_get_tid (hdr); -int ac =ieee80211_ac_from_tid (tid); -struct ieee80211_sta_tx_tspec *tx_tspec = &ifmgd->tx_tspec[ac]; +u16 tid; +int ac; +struct ieee80211_sta_tx_tspec *tx_tspec;unsigned long now = jiffies; +if (!ieee80211_is_data_qos (hdr->frame_control)) +return ; + + tid =ieee80211_get_tid (hdr); + ac =ieee80211_ac_from_tid (tid); + tx_tspec = &ifmgd->tx_tspec[ac]; +if (likely (!tx_tspec->admitted_time))return ;
net/mac80211/sta_info.h +1 -0
@@ -190,6 +190,7 @@ struct tid_ampdu_tx {u8 stop_initiator;bool tx_stop;u16 buf_size; +u16 ssn;u16 failed_bar_ssn;bool bar_pending;
net/mac80211/util.c +6 -1
@@ -950,7 +950,12 @@ static void ieee80211_parse_extension_element(u32 *crc, struct ieee802_11_elems *elems) {const void *data = elem->data +1 ; -u8 len = elem->datalen -1 ; +u8 len; + +if (!elem->datalen) +return ; + + len = elem->datalen -1 ;switch (elem->data[0 ]) {case WLAN_EID_EXT_HE_MU_EDCA :
net/mptcp/protocol.c +3 -1
@@ -2149,7 +2149,7 @@ static struct sock *mptcp_accept(struct sock *sk, int flags, int *err,*/ if (WARN_ON_ONCE (!new_mptcp_sock)) {tcp_sk (newsk)->is_mptcp =0 ; -return newsk; + goto out; }/* acquire the 2nd reference for the owning socket */
@@ -2174,6 +2174,8 @@ static struct sock *mptcp_accept(struct sock *sk, int flags, int *err, MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK); } +out: + newsk->sk_kern_sock = kern;return newsk; }
net/packet/af_packet.c +3 -2
@@ -4461,9 +4461,10 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, } out_free_pg_vec: -bitmap_free (rx_owner_map); -if (pg_vec) +if (pg_vec) { +bitmap_free (rx_owner_map);free_pg_vec (pg_vec, order, req->tp_block_nr); + } out:return err; }
net/rds/connection.c +1 -0
@@ -253,6 +253,7 @@ static struct rds_connection *__rds_conn_create(struct net *net,* should end up here, but if it * does, reset/destroy the connection. */ +kfree (conn->c_path);kmem_cache_free (rds_conn_slab, conn); conn =ERR_PTR (-EOPNOTSUPP ); goto out;
net/sched/cls_api.c +1 -0
@@ -3703,6 +3703,7 @@ int tc_setup_flow_action(struct flow_action *flow_action, entry->mpls_mangle.ttl =tcf_mpls_ttl (act);break ;default : + err = -EOPNOTSUPP ; goto err_out_locked; } }else if (is_tcf_skbedit_ptype (act)) {
net/sched/sch_cake.c +1 -5
@@ -2736,7 +2736,7 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt, q->tins =kvcalloc (CAKE_MAX_TINS ,sizeof (struct cake_tin_data ),GFP_KERNEL );if (!q->tins) - goto nomem; +return -ENOMEM ;for (i =0 ; i <CAKE_MAX_TINS ; i++) {struct cake_tin_data *b = q->tins + i;
@@ -2766,10 +2766,6 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt, q->min_netlen = ~0 ; q->min_adjlen = ~0 ;return 0 ; - -nomem: -cake_destroy (sch); -return -ENOMEM ; }static int cake_dump (struct Qdisc *sch,struct sk_buff *skb)
net/sched/sch_ets.c +2 -2
@@ -668,9 +668,9 @@ static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt, } }for (i = q->nbands; i < oldbands; i++) { -qdisc_tree_flush_backlog (q->classes[i].qdisc); -if (i >= q->nstrict) +if (i >= q->nstrict && q->classes[i].qdisc->q.qlen)list_del (&q->classes[i].alist); +qdisc_tree_flush_backlog (q->classes[i].qdisc); } q->nstrict = nstrict;memcpy (q->prio2band, priomap,sizeof (priomap));
net/smc/af_smc.c +3 -1
@@ -191,7 +191,9 @@ static int smc_release(struct socket *sock)/* cleanup for a dangling non-blocking connect */ if (smc->connect_nonblock && sk->sk_state ==SMC_INIT )tcp_abort (smc->clcsock->sk,ECONNABORTED ); -flush_work (&smc->connect_work); + +if (cancel_work_sync (&smc->connect_work)) +sock_put (&smc->sk);/* sock_hold in smc_connect for passive closing */ if (sk->sk_state ==SMC_LISTEN )/* smc_close_non_accepted() is called and acquires
net/vmw_vsock/virtio_transport_common.c +2 -1
@@ -1153,7 +1153,8 @@ void virtio_transport_recv_pkt(struct virtio_transport *t, space_available =virtio_transport_space_update (sk, pkt);/* Update CID in case it has changed after a transport reset event */ - vsk->local_addr.svm_cid = dst.svm_cid; +if (vsk->local_addr.svm_cid !=VMADDR_CID_ANY ) + vsk->local_addr.svm_cid = dst.svm_cid;if (space_available) sk->sk_write_space (sk);
scripts/recordmcount.pl +1 -1
@@ -252,7 +252,7 @@ if ($arch eq "x86_64") { } elsif ($arch eq "s390" && $bits == 64) { if ($cc =~ /-DCC_USING_HOTPATCH/) { - $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*c0 04 00 00 00 00\\s*brcl\\s*0,[0-9a-f]+ <([^\+]*)>\$"; + $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*c0 04 00 00 00 00\\s*(bcrl\\s*0,|jgnop\\s*)[0-9a-f]+ <([^\+]*)>\$"; $mcount_adjust = 0; } else { $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_(PC|PLT)32DBL\\s+_mcount\\+0x2\$";
tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c +14 -2
@@ -90,7 +90,7 @@ static void print_err_line(void)static void test_conn (void ) { -int listen_fd =-1 , cli_fd =-1 , err; +int listen_fd =-1 , cli_fd =-1 , srv_fd =-1 , err;socklen_t addrlen =sizeof (srv_sa6);int srv_port;
@@ -112,6 +112,10 @@ static void test_conn(void)if (CHECK_FAIL (cli_fd ==-1 )) goto done; + srv_fd =accept (listen_fd,NULL ,NULL ); +if (CHECK_FAIL (srv_fd ==-1 )) + goto done; + if (CHECK(skel->bss->listen_tp_sport != srv_port || skel->bss->req_sk_sport != srv_port, "Unexpected sk src port",
@@ -134,11 +138,13 @@ static void test_conn(void)close (listen_fd);if (cli_fd !=-1 )close (cli_fd); +if (srv_fd !=-1 ) +close (srv_fd); }static void test_syncookie (void ) { -int listen_fd =-1 , cli_fd =-1 , err; +int listen_fd =-1 , cli_fd =-1 , srv_fd =-1 , err;socklen_t addrlen =sizeof (srv_sa6);int srv_port;
@@ -161,6 +167,10 @@ static void test_syncookie(void)if (CHECK_FAIL (cli_fd ==-1 )) goto done; + srv_fd =accept (listen_fd,NULL ,NULL ); +if (CHECK_FAIL (srv_fd ==-1 )) + goto done; + if (CHECK(skel->bss->listen_tp_sport != srv_port, "Unexpected tp src port", "listen_tp_sport:%u expected:%u\n",
@@ -188,6 +198,8 @@ static void test_syncookie(void)close (listen_fd);if (cli_fd !=-1 )close (cli_fd); +if (srv_fd !=-1 ) +close (srv_fd); }struct test {
tools/testing/selftests/bpf/verifier/value_ptr_arith.c +23 -0
@@ -848,6 +848,29 @@ .errstr = "R0 invalid mem access 'inv'", .errstr_unpriv = "R0 pointer -= pointer prohibited", }, +{ + "map access: trying to leak tained dst reg", + .insns = { +BPF_MOV64_IMM (BPF_REG_0 ,0 ), +BPF_ST_MEM (BPF_DW ,BPF_REG_10 ,-8 ,0 ), +BPF_MOV64_REG (BPF_REG_2 ,BPF_REG_10 ), +BPF_ALU64_IMM (BPF_ADD ,BPF_REG_2 ,-8 ), +BPF_LD_MAP_FD (BPF_REG_1 ,0 ), +BPF_RAW_INSN (BPF_JMP |BPF_CALL ,0 ,0 ,0 , BPF_FUNC_map_lookup_elem), +BPF_JMP_IMM (BPF_JNE ,BPF_REG_0 ,0 ,1 ), +BPF_EXIT_INSN (), +BPF_MOV64_REG (BPF_REG_2 ,BPF_REG_0 ), +BPF_MOV32_IMM (BPF_REG_1 ,0xFFFFFFFF ), +BPF_MOV32_REG (BPF_REG_1 ,BPF_REG_1 ), +BPF_ALU64_REG (BPF_SUB ,BPF_REG_2 ,BPF_REG_1 ), +BPF_STX_MEM (BPF_DW ,BPF_REG_0 ,BPF_REG_2 ,0 ), +BPF_MOV64_IMM (BPF_REG_0 ,0 ), + BPF_EXIT_INSN(), + }, + .fixup_map_array_48b = { 4 }, + .result = REJECT, + .errstr = "math between map_value pointer and 4294967295 is not allowed", +}, {"32bit pkt_ptr -= scalar" , .insns = {
tools/testing/selftests/kvm/kvm_create_max_vcpus.c +30 -0
@@ -12,6 +12,7 @@#include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/resource.h> #include "test_util.h"
@@ -40,10 +41,39 @@ int main(int argc, char *argv[]) {int kvm_max_vcpu_id =kvm_check_cap (KVM_CAP_MAX_VCPU_ID );int kvm_max_vcpus =kvm_check_cap (KVM_CAP_MAX_VCPUS ); +/* +* Number of file descriptors reqired, KVM_CAP_MAX_VCPUS for vCPU fds + +* an arbitrary number for everything else. +*/ +int nr_fds_wanted = kvm_max_vcpus +100 ; +struct rlimit rl;pr_info ("KVM_CAP_MAX_VCPU_ID: %d\n" , kvm_max_vcpu_id);pr_info ("KVM_CAP_MAX_VCPUS: %d\n" , kvm_max_vcpus); +/* +* Check that we're allowed to open nr_fds_wanted file descriptors and +* try raising the limits if needed. +*/ +TEST_ASSERT (!getrlimit (RLIMIT_NOFILE , &rl),"getrlimit() failed!" ); + +if (rl.rlim_cur < nr_fds_wanted) { + rl.rlim_cur = nr_fds_wanted; +if (rl.rlim_max < nr_fds_wanted) { +int old_rlim_max = rl.rlim_max; + rl.rlim_max = nr_fds_wanted; + +int r =setrlimit (RLIMIT_NOFILE , &rl); +if (r <0 ) { +printf ("RLIMIT_NOFILE hard limit is too low (%d, wanted %d)\n" , + old_rlim_max, nr_fds_wanted); +exit (KSFT_SKIP ); + } + }else { +TEST_ASSERT (!setrlimit (RLIMIT_NOFILE , &rl),"setrlimit() failed!" ); + } + } +/* * Upstream KVM prior to 4.8 does not support KVM_CAP_MAX_VCPU_ID. * Userspace is supposed to use KVM_CAP_MAX_VCPUS as the maximum ID
tools/testing/selftests/net/fcnal-test.sh +36 -13
104 lines not on this page · raw message
tools/testing/selftests/net/forwarding/forwarding.config.sample +2 -0
@@ -13,6 +13,8 @@ NETIFS[p5]=veth4 NETIFS[p6]=veth5 NETIFS[p7]=veth6 NETIFS[p8]=veth7 +NETIFS[p9]=veth8 +NETIFS[p10]=veth9 # Port that does not have a cable connected. NETIF_NO_CABLE=eth8
virt/kvm/kvm_main.c +4 -2
@@ -2590,7 +2590,8 @@ int kvm_write_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,int r;gpa_t gpa = ghc->gpa + offset; -BUG_ON (len + offset > ghc->len); +if (WARN_ON_ONCE (len + offset > ghc->len)) +return -EINVAL ;if (slots->generation != ghc->generation) {if (__kvm_gfn_to_hva_cache_init (slots, ghc, ghc->gpa, ghc->len))
@@ -2627,7 +2628,8 @@ int kvm_read_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,int r;gpa_t gpa = ghc->gpa + offset; -BUG_ON (len + offset > ghc->len); +if (WARN_ON_ONCE (len + offset > ghc->len)) +return -EINVAL ;if (slots->generation != ghc->generation) {if (__kvm_gfn_to_hva_cache_init (slots, ghc, ghc->gpa, ghc->len))