Linux 6.1.162
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.162 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/admin-guide/kernel-parameters.txt | 3 Documentation/netlink/specs/fou.yaml | 130 Makefile | 2 arch/arm64/boot/dts/qcom/sc8280xp.dtsi | 16 arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts | 1 arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dts | 1 arch/arm64/kernel/hibernate.c | 2 arch/arm64/kernel/signal.c | 26 arch/loongarch/kernel/perf_event.c | 21 arch/riscv/include/asm/compat.h | 2 arch/x86/events/perf_event.h | 13 arch/x86/include/asm/kfence.h | 29 arch/x86/kernel/cpu/resctrl/core.c | 21 arch/x86/kernel/cpu/resctrl/internal.h | 3 arch/x86/kernel/fpu/core.c | 32 arch/x86/kvm/x86.c | 9 arch/x86/mm/fault.c | 15 arch/x86/mm/kaslr.c | 10 block/blk-cgroup.c | 4 crypto/authencesn.c | 6 drivers/ata/libata-core.c | 62 drivers/ata/libata-scsi.c | 30 drivers/base/regmap/regmap.c | 4 drivers/block/xen-blkback/xenbus.c | 4 drivers/block/xen-blkfront.c | 3 drivers/bluetooth/hci_ldisc.c | 4 drivers/char/tpm/xen-tpmfront.c | 3 drivers/clocksource/timer-riscv.c | 3 drivers/comedi/comedi_fops.c | 2 drivers/comedi/drivers/dmm32at.c | 32 drivers/comedi/range.c | 2 drivers/crypto/qat/qat_common/adf_common_drv.h | 1 drivers/crypto/qat/qat_common/adf_init.c | 1 drivers/crypto/qat/qat_common/adf_isr.c | 5 drivers/dma/apple-admac.c | 1 drivers/dma/at_hdmac.c | 9 drivers/dma/bcm-sba-raid.c | 6 drivers/dma/dw/rzn1-dmamux.c | 4 drivers/dma/idxd/compat.c | 23 drivers/dma/lpc18xx-dmamux.c | 19 drivers/dma/qcom/gpi.c | 6 drivers/dma/sh/rz-dmac.c | 5 drivers/dma/stm32-dmamux.c | 22 drivers/dma/tegra210-adma.c | 10 drivers/dma/ti/dma-crossbar.c | 18 drivers/dma/ti/k3-udma-private.c | 2 drivers/dma/ti/omap-dma.c | 4 drivers/dma/xilinx/xilinx_dma.c | 7 drivers/edac/i3200_edac.c | 11 drivers/edac/x38_edac.c | 9 drivers/firmware/efi/cper.c | 2 drivers/firmware/imx/imx-scu-irq.c | 24 drivers/gpio/gpio-rockchip.c | 8 drivers/gpio/gpiolib-acpi.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 3 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 2 drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 2 drivers/gpu/drm/amd/amdgpu/soc21.c | 8 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 18 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 3 drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 23 drivers/gpu/drm/imx/imx-tve.c | 13 drivers/gpu/drm/nouveau/dispnv50/curs507a.c | 1 drivers/gpu/drm/panel/panel-simple.c | 1 drivers/gpu/drm/radeon/radeon_fence.c | 8 drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 4 drivers/gpu/drm/xen/xen_drm_front.c | 3 drivers/hid/usbhid/hid-core.c | 17 drivers/hwtracing/intel_th/core.c | 19 drivers/iio/adc/ad7280a.c | 4 drivers/iio/adc/ad9467.c | 2 drivers/iio/adc/at91-sama5d2_adc.c | 1 drivers/iio/adc/exynos_adc.c | 13 drivers/iio/chemical/scd4x.c | 6 drivers/iio/dac/ad5686.c | 6 drivers/input/misc/xen-kbdfront.c | 5 drivers/input/serio/i8042-acpipnpio.h | 18 drivers/irqchip/irq-gic-v3-its.c | 8 drivers/isdn/mISDN/timerdev.c | 13 drivers/leds/led-class.c | 10 drivers/misc/mei/mei-trace.h | 18 drivers/misc/uacce/uacce.c | 42 drivers/mmc/host/rtsx_pci_sdmmc.c | 41 drivers/mmc/host/sdhci-of-dwcmshc.c | 20 drivers/net/bonding/bond_main.c | 29 drivers/net/bonding/bond_options.c | 8 drivers/net/can/ctucanfd/ctucanfd_base.c | 2 drivers/net/can/usb/ems_usb.c | 8 drivers/net/can/usb/esd_usb.c | 9 drivers/net/can/usb/etas_es58x/es58x_core.c | 2 drivers/net/can/usb/gs_usb.c | 11 drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 9 drivers/net/can/usb/mcba_usb.c | 8 drivers/net/can/usb/usb_8dev.c | 8 drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 5 drivers/net/ethernet/emulex/benet/be_cmds.c | 3 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | 2 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 2 drivers/net/ethernet/intel/ice/ice_main.c | 1 drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c | 2 drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 86 drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c | 2 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h | 7 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 22 drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c | 2 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 19 drivers/net/ethernet/rocker/rocker_main.c | 5 drivers/net/ethernet/stmicro/stmmac/dwmac5.c | 5 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 5 drivers/net/hyperv/hyperv_net.h | 5 drivers/net/hyperv/netvsc_drv.c | 13 drivers/net/hyperv/rndis_filter.c | 29 drivers/net/ipvlan/ipvlan.h | 2 drivers/net/ipvlan/ipvlan_core.c | 16 drivers/net/ipvlan/ipvlan_main.c | 49 drivers/net/macvlan.c | 20 drivers/net/netdevsim/bpf.c | 6 drivers/net/netdevsim/dev.c | 2 drivers/net/netdevsim/netdevsim.h | 1 drivers/net/team/team.c | 23 drivers/net/usb/dm9601.c | 4 drivers/net/usb/usbnet.c | 11 drivers/net/wireless/ath/ath10k/ce.c | 16 drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c | 6 drivers/net/wireless/rsi/rsi_91x_mac80211.c | 1 drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c | 9 drivers/net/xen-netback/xenbus.c | 3 drivers/net/xen-netfront.c | 4 drivers/nfc/virtual_ncidev.c | 4 drivers/nvme/host/fabrics.c | 15 drivers/nvme/host/fabrics.h | 1 drivers/nvme/host/fc.c | 5 drivers/nvme/host/nvme.h | 14 drivers/nvme/host/pci.c | 41 drivers/nvme/host/rdma.c | 1 drivers/nvme/host/tcp.c | 1 drivers/nvme/target/tcp.c | 28 drivers/of/base.c | 8 drivers/of/platform.c | 2 drivers/pci/Kconfig | 6 drivers/pci/xen-pcifront.c | 4 drivers/phy/broadcom/phy-bcm-ns-usb3.c | 2 drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 3 drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 56 drivers/phy/st/phy-stm32-usbphyc.c | 2 drivers/phy/tegra/xusb-tegra186.c | 3 drivers/pinctrl/meson/pinctrl-meson.c | 2 drivers/pinctrl/pinctrl-rockchip.c | 9 drivers/pinctrl/qcom/pinctrl-lpass-lpi.c | 17 drivers/ptp/ptp_chardev.c | 37 drivers/ptp/ptp_private.h | 16 drivers/scsi/be2iscsi/be_mgmt.c | 1 drivers/scsi/qla2xxx/qla_os.c | 2 drivers/scsi/scsi_error.c | 35 drivers/scsi/scsi_lib.c | 8 drivers/scsi/storvsc_drv.c | 3 drivers/scsi/xen-scsifront.c | 4 drivers/slimbus/core.c | 19 drivers/soc/imx/imx8m-blk-ctrl.c | 11 drivers/spi/spi-sprd-adi.c | 67 drivers/target/sbp/sbp_target.c | 4 drivers/tty/hvc/hvc_xen.c | 4 drivers/tty/serial/8250/8250_pci.c | 2 drivers/usb/core/config.c | 5 drivers/usb/core/quirks.c | 3 drivers/usb/dwc3/core.c | 2 drivers/usb/dwc3/core.h | 1 drivers/usb/host/ohci-platform.c | 1 drivers/usb/host/uhci-platform.c | 1 drivers/usb/host/xen-hcd.c | 4 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 2 drivers/usb/serial/option.c | 1 drivers/vhost/scsi.c | 24 drivers/video/fbdev/xen-fbfront.c | 6 drivers/w1/slaves/w1_therm.c | 62 drivers/w1/w1.c | 2 drivers/xen/pvcalls-back.c | 3 drivers/xen/pvcalls-front.c | 3 drivers/xen/xen-pciback/xenbus.c | 4 drivers/xen/xen-scsiback.c | 5 fs/btrfs/block-group.c | 60 fs/btrfs/ctree.h | 59 fs/btrfs/delayed-inode.c | 1 fs/btrfs/disk-io.c | 2 fs/btrfs/inode-item.c | 1 fs/btrfs/props.c | 1 fs/btrfs/relocation.c | 14 fs/btrfs/space-info.c | 76 fs/btrfs/space-info.h | 69 fs/btrfs/sysfs.c | 18 fs/btrfs/transaction.c | 11 fs/efivarfs/vars.c | 2 fs/ext4/xattr.c | 1 fs/fs-writeback.c | 14 fs/gfs2/log.c | 3 fs/gfs2/lops.c | 2 fs/gfs2/super.c | 4 fs/iomap/buffered-io.c | 2 fs/nfs/flexfilelayout/flexfilelayoutdev.c | 2 fs/nfsd/nfsctl.c | 17 fs/ntfs3/inode.c | 7 fs/smb/server/mgmt/user_session.c | 35 fs/smb/server/mgmt/user_session.h | 1 fs/smb/server/smb2pdu.c | 9 fs/smb/server/transport_ipc.c | 12 fs/smb/server/transport_rdma.c | 15 fs/xfs/libxfs/xfs_ialloc.c | 11 include/linux/kfence.h | 1 include/linux/libata.h | 36 include/linux/nvme.h | 3 include/linux/posix-clock.h | 39 include/linux/textsearch.h | 1 include/linux/usb/quirks.h | 3 include/net/bonding.h | 13 include/net/nfc/nfc.h | 2 include/scsi/scsi_eh.h | 6 include/sound/pcm.h | 2 include/uapi/linux/comedi.h | 2 include/xen/xenbus.h | 2 io_uring/io_uring.c | 8 kernel/bpf/cgroup.c | 8 kernel/dma/pool.c | 7 kernel/irq/irq_sim.c | 2 kernel/time/hrtimer.c | 2 kernel/time/posix-clock.c | 53 lib/flex_proportions.c | 5 mm/Kconfig | 12 mm/damon/sysfs.c | 15 mm/kfence/core.c | 23 mm/kmsan/shadow.c | 3 mm/migrate.c | 12 mm/mprotect.c | 101 mm/page_alloc.c | 47 mm/rmap.c | 20 net/9p/trans_xen.c | 3 net/bpf/test_run.c | 5 net/bridge/br_input.c | 2 net/can/j1939/transport.c | 10 net/core/dev.c | 25 net/core/filter.c | 25 net/ipv4/Makefile | 1 net/ipv4/esp4_offload.c | 4 net/ipv4/fou.c | 1313 ---------- net/ipv4/fou_core.c | 1283 +++++++++ net/ipv4/fou_nl.c | 48 net/ipv4/fou_nl.h | 25 net/ipv4/ip_gre.c | 11 net/ipv6/addrconf.c | 4 net/ipv6/esp6_offload.c | 4 net/ipv6/icmp.c | 4 net/ipv6/ip6_tunnel.c | 2 net/ipv6/ndisc.c | 4 net/l2tp/l2tp_core.c | 4 net/mac80211/ibss.c | 8 net/mac80211/ieee80211_i.h | 6 net/mac80211/iface.c | 10 net/mac80211/mesh.c | 10 net/mac80211/mesh_hwmp.c | 6 net/mac80211/mlme.c | 13 net/mac80211/ocb.c | 6 net/mac80211/rx.c | 2 net/mac80211/scan.c | 2 net/mac80211/status.c | 6 net/mac80211/tdls.c | 11 net/mac80211/util.c | 2 net/mptcp/protocol.c | 13 net/netrom/nr_route.c | 13 net/nfc/core.c | 27 net/nfc/llcp_commands.c | 17 net/nfc/llcp_core.c | 4 net/nfc/nci/core.c | 4 net/sched/act_ife.c | 12 net/sched/sch_qfq.c | 8 net/sched/sch_teql.c | 5 net/sctp/input.c | 2 net/sctp/sm_statefuns.c | 10 net/vmw_vsock/virtio_transport_common.c | 30 scripts/generate_rust_analyzer.py | 2 sound/core/oss/pcm_oss.c | 4 sound/core/pcm_native.c | 9 sound/pci/ctxfi/ctamixer.c | 2 sound/soc/amd/yc/acp6x-mach.c | 8 sound/soc/codecs/tlv320adcx140.c | 8 sound/soc/codecs/wsa881x.c | 54 sound/soc/codecs/wsa883x.c | 9 sound/soc/fsl/imx-card.c | 1 sound/soc/intel/boards/sof_es8336.c | 2 sound/usb/mixer.c | 22 sound/usb/mixer_scarlett2.c | 7 sound/xen/xen_snd_front.c | 3 tools/testing/selftests/net/amt.sh | 7 tools/testing/selftests/net/toeplitz.c | 4 tools/testing/selftests/ptp/testptp.c | 194 + tools/testing/vsock/util.c | 12 297 files changed, 3888 insertions(+), 2423 deletions(-)
Abdun Nihaal (1):
scsi: xen: scsiback: Fix potential memory leak in scsiback_remove()
Aboorva Devarajan (1):
mm/page_alloc: make percpu_pagelist_high_fraction reads lock-free
Aditya Garg (1):
net: hv_netvsc: reject RSS hash key programming without RX indirection table
Alex Deucher (3):
drm/amdgpu/soc21: fix xclk for APUs drm/amdgpu/gfx10: fix wptr reset in KGQ init drm/amdgpu/gfx11: fix wptr reset in KGQ init
Alex Hung (1):
drm/amd/display: Check dce_hwseq before dereferencing it
Alex Maftei (2):
selftests/ptp: Add -x option for testing PTP_SYS_OFFSET_EXTENDED selftests/ptp: Add -X option for testing PTP_SYS_OFFSET_PRECISE
Alexander Usyskin (1):
mei: trace: treat reg parameter as string
Alexis Lothoré (1):
net: stmmac: make sure that ptp_rate is not 0 before configuring EST
Alok Tiwari (1):
octeontx2: cn10k: fix RX flowid TCAM mask handling
Andreas Gruenbacher (2):
Revert "gfs2: Fix use of bio_chain"
gfs2: Fix NULL pointer dereference in gfs2_log_flush
Andrew Cooper (1):
x86/kfence: avoid writing L1TF-vulnerable PTEs
Andrew Davis (1):
spi: sprd: adi: Use devm_register_restart_handler()
Andrey Vatoropin (1):
be2net: Fix NULL pointer dereference in be_cmd_get_mac_from_list
Arnd Bergmann (1):
irqchip/gic-v3-its: Avoid truncating memory addresses
Arun Raghavan (1):
ALSA: usb: Increase volume range that triggers a warning
Bagas Sanjaya (2):
textsearch: describe @list member in ts_ops search mm, kfence: describe @slab parameter in __kfence_obj_info()
Bartlomiej Kubik (1):
fs/ntfs3: Initialize allocated memory before use
Bartosz Golaszewski (2):
pinctrl: meson: mark the GPIO controller as sleeping
pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver
Benjamin Tissoires (1):
HID: usbhid: paper over wrong bNumDescriptor field
Berk Cem Goksel (1):
ALSA: usb-audio: Fix use-after-free in snd_usb_mixer_free()
Biju Das (1):
dmaengine: sh: rz-dmac: Fix rz_dmac_terminate_all()
Boris Burkov (1):
btrfs: store fs_info in space_info
Brian Foster (1):
xfs: set max_agbno to allow sparse alloc of last full inode chunk
Brian Kao (1):
scsi: core: Fix error handler encryption support
Cedric Xing (1):
x86: make page fault handling disable interrupts properly
Chen Ni (1):
net/sched: act_ife: convert comma to semicolon
Cheng-Yu Lee (1):
regmap: Fix race condition in hwspinlock irqsave routine
Chenghai Huang (1):
uacce: ensure safe queue release with state management
Damien Le Moal (3):
ata: libata: Introduce ata_ncq_supported()
ata: libata: cleanup fua support detection
ata: libata-core: Introduce ata_dev_config_lpm()
Dan Carpenter (2):
phy: stm32-usphyc: Fix off by one in probe()
wifi: mwifiex: Fix a loop in mwifiex_update_ampdu_rxwinsize()
Dan Williams (1):
x86/kaslr: Recognize all ZONE_DEVICE users as physaddr consumers
Daniel Borkmann (1):
bpf: Do not let BPF test infra emit invalid GSO types to stack
Daniel Wagner (1):
nvme-fc: rename free_ctrl callback to match name pattern
David Hildenbrand (Red Hat) (1):
mm/rmap: fix two comments related to huge_pmd_unshare()
David Jeffery (1):
scsi: core: Wake up the error handler when final completions race against each other
Dawei Li (1):
xen: make remove callback of xen driver void returned
Denis Sergeev (1):
gpiolib: acpi: use BIT_ULL() for u64 mask in address space handler
Dmitry Skorodumov (1):
ipvlan: Make the addrs_lock be per port
Dragan Simic (1):
phy: phy-rockchip-inno-usb2: Use dev_err_probe() in the probe path
Emil Svendsen (2):
ASoC: tlv320adcx140: fix null pointer
ASoC: tlv320adcx140: fix word length
Eric Dumazet (12):
ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv()
net: update netdev_lock_{type,name}
macvlan: fix possible UAF in macvlan_forward_source()
ipv4: ip_gre: make ipgre_header() robust
net/sched: sch_qfq: do not free existing class in qfq_change_class()
bonding: limit BOND_MODE_8023AD to Ethernet devices
l2tp: avoid one data-race in l2tp_tunnel_del_work()
mISDN: annotate data-race around dev->work
ipv6: annotate data-race in ndisc_router_discovery()
bonding: provide a net pointer to __skb_flow_dissect() net/sched: act_ife: avoid possible NULL deref
bonding: annotate data-races around slave->last_rx
Ethan Nelson-Moore (2):
USB: serial: ftdi_sio: add support for PICAXE AXE027 cable
net: usb: dm9601: remove broken SR9700 support
Fabio Estevam (1):
ASoC: fsl: imx-card: Do not force slot width to sample width
Felix Gu (1):
spi: spi-sprd-adi: Fix double free in probe error path
Fernand Sieber (1):
perf/x86/intel: Do not enable BTS for guests
Fernando Fernandez Mancera (1):
ipv6: use the right ifindex when replying to icmpv6 from localhost
Fiona Klute (1):
iio: chemical: scd4x: fix reported channel endianness
Gal Pressman (2):
selftests: drv-net: fix RPS mask handling for high CPU numbers net/mlx5e: Account for netdev stats in ndo_get_stats64
Gavin Li (1):
Revert "net/mlx5: Block entering switchdev mode with ns inconsistency"
Geraldo Nascimento (2):
arm64: dts: rockchip: remove dangerous max-link-speed from helios64
arm64: dts: rockchip: remove redundant max-link-speed from nanopi-r4s
Giovanni Cabiddu (1):
crypto: qat - flush misc workqueue during device shutdown
Greg Kroah-Hartman (1):
Linux 6.1.162
Gyeyoung Baek (1):
genirq/irq_sim: Initialize work context pointers properly
Han Gao (1):
riscv: compat: fix COMPAT_UTS_MACHINE definition
Hans de Goede (1):
leds: led-class: Only Add LED to leds_list when it is fully ready
Haotian Zhang (1):
dmaengine: omap-dma: fix dma_pool resource leak in error paths
Haoxiang Li (6):
EDAC/x38: Fix a resource leak in x38_probe1() EDAC/i3200: Fix a resource leak in i3200_probe1() drm/vmwgfx: Fix an error return check in vmw_compat_shader_add()
w1: fix redundant counter decrement in w1_attach_slave_device()
scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo() drm/amdkfd: fix a memory leak in device_queue_manager_init()
Harry Yoo (1):
Revert "mm/mprotect: delete pmd_none_or_clear_bad_unless_trans_huge()"
Huacai Chen (1):
USB: OHCI/UHCI: Add soft dependencies on ehci_platform
Ian Abbott (2):
comedi: dmm32at: serialize use of paged registers
comedi: Fix getting range information for subdevices 16 to 255
Ilikara Zheng (1):
nvme-pci: disable secondary temp for Wodposit WPBSNM8
JP Kobryn (1):
btrfs: prevent use-after-free on page private data in btrfs_subpage_clear_uptodate()
Jakub Kicinski (3):
netlink: add a proto specification for FOU
net: fou: rename the source for linking
net: fou: use policy and operation tables generated from the spec
Jamal Hadi Salim (2):
net/sched: Enforce that teql can only be used as root qdisc
net/sched: qfq: Use cl_is_active to determine whether class is active in qfq_rm_from_ag
Jan Kara (1):
flex_proportions: make fprop_new_period() hardirq safe
Janne Grunau (1):
dmaengine: apple-admac: Add "apple,t8103-admac" compatible
Jaroslav Kysela (1):
ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer
Jeongjun Park (1):
netrom: fix double-free in nr_route_frame()
Jesse Brandeburg (1):
ice: stop counting UDP csum mismatch as rx_errors
Jia-Hong Su (1):
Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work
Jianbo Liu (1):
xfrm: Fix inner mode lookup in tunnel mode GSO segmentation
Jiasheng Jiang (1):
btrfs: fix memory leaks in create_space_info() error paths
Jijie Shao (2):
net: hns3: fix wrong GENMASK() for HCLGE_FD_AD_COUNTER_NUM_M
net: hns3: fix the HCLGE_FD_AD_NXT_KEY error setting issue
Johan Hovold (17):
dmaengine: at_hdmac: fix device leak on of_dma_xlate()
dmaengine: bcm-sba-raid: fix device leak on probe
dmaengine: dw: dmamux: fix OF node leak on route allocation failure
dmaengine: idxd: fix device leaks on compat bind and unbind
dmaengine: lpc18xx-dmamux: fix device leak on route allocation
dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation
dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation
dmaengine: ti: k3-udma: fix device leak on udma lookup
slimbus: core: fix runtime PM imbalance on report present
slimbus: core: fix device reference leak on report present
intel_th: fix device leak on output open()
dmaengine: stm32: dmamux: fix OF node leak on route allocation failure
dmaengine: stm32: dmamux: fix device leak on route allocation
iio: adc: exynos_adc: fix OF populate on driver rebind
ASoC: codecs: wsa881x: fix unnecessary initialisation
ASoC: codecs: wsa883x: fix unnecessary initialisation drm/imx/tve: fix probe device leak
Johannes Berg (2):
wifi: mac80211: use wiphy work for sdata->work
wifi: mac80211: move TDLS work to wiphy work
Johannes Brüderl (1):
usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor
Josef Bacik (1):
btrfs: move flush related definitions to space-info.h
Keith Busch (1):
nvme-pci: do not directly handle subsys reset fallout
Kery Qi (3):
net: wwan: t7xx: fix potential skb->frags overflow in RX path
rocker: fix memory leak in rocker_world_port_post_fini()
scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg()
Kohei Enju (1):
efivarfs: fix error propagation in efivar_entry_get()
Konrad Dybcio (1):
arm64: dts: qcom: sc8280xp: Add missing VDD_MXC links
Krzysztof Kozlowski (4):
phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again)
ASoC: codecs: wsa881x: Simplify &pdev->dev in probe
ASoC: codecs: wsa881x: Use proper shutdown GPIO polarity
ASoC: codecs: wsa881x: Drop unused version readout
Kuniyuki Iwashima (5):
ipv6: Fix use-after-free in inet6_addr_del().
gue: Fix skb memleak with inner IP protocol 0.
fou: Don't allow 0 for FOU_ATTR_IPPROTO.
nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame().
nfc: nci: Fix race between rfkill and nci_unregister_device().
Kübrich, Andreas (1):
iio: dac: ad5686: add AD5695R to ad5686_chip_info_tbl
Laurent Vivier (1):
usbnet: limit max_mtu based on device's hard_mtu
Laveesh Bansal (1):
writeback: fix 100% CPU usage when dirtytime_expire_interval is 0
Linus Torvalds (1):
Fix memory leak in posix_clock_open()
Lisa Robinson (1):
LoongArch: Fix PMU counter allocation for mixed-type event groups
Long Li (1):
scsi: storvsc: Process unsupported MODE_SENSE_10
Louis Chauvet (1):
phy: rockchip: inno-usb2: fix disconnection in gadget mode
Luca Ceresoli (1):
phy: rockchip: inno-usb2: fix communication disruption in gadget mode
Lyude Paul (1):
drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare
Mahesh Bandewar (1):
selftest/ptp: update ptp selftest to exercise the gettimex options
Maninder Singh (1):
NFSD: fix race between nfsd registration and exports_proc
Marc Kleine-Budde (8):
can: gs_usb: gs_usb_receive_bulk_callback(): fix URB memory leak
can: gs_usb: gs_usb_receive_bulk_callback(): unanchor URL on usb_submit_urb() error
can: ems_usb: ems_usb_read_bulk_callback(): fix URB memory leak
can: kvaser_usb: kvaser_usb_read_bulk_callback(): fix URB memory leak
can: mcba_usb: mcba_usb_read_bulk_callback(): fix URB memory leak
can: usb_8dev: usb_8dev_read_bulk_callback(): fix URB memory leak
can: gs_usb: gs_usb_receive_bulk_callback(): fix error message
can: esd_usb: esd_usb_read_bulk_callback(): fix URB memory leak
Marek Vasut (2):
drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel
wifi: rsi: Fix memory corruption due to not set vif driver data size
Marios Makassikis (1):
ksmbd: fix recursive locking in RPC handle list access
Mark Harmstone (1):
btrfs: fix missing fields in superblock backup with BLOCK_GROUP_TREE
Mark Rutland (2):
arm64/fpsimd: signal: Allocate SSVE storage when restoring ZA arm64/fpsimd: signal: Fix restoration of SVE context
Marnix Rijnart (1):
serial: 8250_pci: Fix broken RS485 for F81504/508/512
Martin Kaiser (1):
net: bridge: fix static key check
Matthew Schwartz (1):
mmc: rtsx_pci_sdmmc: implement sdmmc_card_busy function
Matthew Wilcox (Oracle) (1):
migrate: correct lock ordering for hugetlb file folios
Matthieu Baerts (NGI0) (2):
mptcp: only reset subflow errors when propagated
mptcp: avoid dup SUB_CLOSED events after disconnect
Maurizio Lombardi (1):
nvmet-tcp: remove boilerplate code
Melbin K Mathew (2):
vsock/virtio: fix potential underflow in virtio_transport_get_credit() vsock/virtio: cap TX credit to local buffer size
Miaoqian Lin (1):
dmaengine: qcom: gpi: Fix memory leak in gpi_peripheral_config()
Mike Christie (1):
vhost-scsi: Fix handling of multiple calls to vhost_scsi_set_endpoint
Ming Lei (1):
io_uring: move local task_work in exit cancel loop
Ming Qian (1):
pmdomain: imx8m-blk-ctrl: Remove separate rst and clk mask for 8mq vpu
Morduan Zang (1):
efi/cper: Fix cper_bits_to_str buffer handling and return value
Namjae Jeon (1):
ksmbd: fix use-after-free in ksmbd_session_rpc_open
Naohiko Shimizu (1):
riscv: clocksource: Fix stimecmp update hazard on RV32
Naohiro Aota (3):
btrfs: factor out init_space_info() from create_space_info()
btrfs: factor out check_removing_space_info() from btrfs_free_block_groups()
btrfs: introduce btrfs_space_info sub-group
Niklas Cassel (3):
ata: libata: Add cpr_log to ata_dev_print_features() early return
ata: libata: Call ata_dev_config_lpm() for ATAPI devices
ata: libata: Print features also for ATAPI devices
Nikola Z. Ivanov (1):
team: Move team device type change at the end of team_port_add
Nilay Shroff (1):
nvme: fix PCIe subsystem reset controller state transition
Ondrej Ille (1):
can: ctucanfd: fix SSP_SRC in cases when bit-rate is higher than 1 MBit.
Paul Chaignon (1):
bpf: Reject narrower access to pointer ctx fields
Pavel Zhigulin (1):
iio: adc: ad7280a: handle spi_setup() errors in probe()
Pei Xiao (1):
iio: adc: at91-sama5d2_adc: Fix potential use-after-free in sama5d2_adc driver
Peng Fan (1):
firmware: imx: scu-irq: Set mu_resource_id before get handle
Pimyn Girgis (1):
mm/kfence: randomize the freelist on initialization
Rafael Beims (1):
phy: freescale: imx8m-pcie: assert phy reset during power on
Rahul Rameshbabu (1):
testptp: Add support for testing ptp_clock_info .adjphase callback
Raju Rangoju (1):
amd-xgbe: avoid misleading per-packet error log
Ratheesh Kannoth (1):
octeontx2-af: Fix error handling
Ritesh Harjani (IBM) (1):
iomap: Fix possible overflow condition in iomap_write_delalloc_scan
Rob Herring (Arm) (1):
of: platform: Use default match table for /firmware
Robbie Ko (1):
btrfs: fix deadlock in wait_current_trans() due to ignored transaction type
Robert McClinton (1):
drm/radeon: delete radeon_fence_process in is_signaled, no deadlock
Robin Murphy (1):
gpio: rockchip: Stop calling pinctrl for set_direction
Ryan Roberts (1):
mm: kmsan: fix poisoning of high-order non-compound pages
Saeed Mahameed (1):
net/mlx5e: Restore destroying state bit after profile cleanup
Sai Sree Kartheek Adivi (1):
dma/pool: distinguish between missing and exhausted atomic pools
Samasth Norway Ananda (1):
ALSA: scarlett2: Fix buffer overflow in config retrieval
Sean Christopherson (1):
x86/fpu: Clear XSTATE_BV[i] in guest XSAVE state whenever XFD[i]=1
Sebastian Reichel (1):
phy: phy-rockchip-inno-usb2: simplify phy clock handling
SeongJae Park (3):
mm/damon/sysfs: cleanup attrs subdirs on context dir setup failure mm/damon/sysfs-scheme: cleanup quotas subdirs on scheme dir setup failure mm/damon/sysfs-scheme: cleanup access_pattern subdirs on scheme dir setup failure
Shawn Lin (2):
mmc: sdhci-of-dwcmshc: Update DLL and pre-change delay for rockchip platform
mmc: sdhci-of-dwcmshc: Prevent illegal clock reduction in HS200/HS400 mode
Sheetal (1):
dmaengine: tegra-adma: Fix use-after-free
Shivam Kumar (1):
nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec
Shradha Gupta (1):
hv_netvsc: Allocate rx indirection table size dynamically
Srinivasan Shanmugam (1):
drm/amdgpu: Replace Mutex with Spinlock for RLCG register access to avoid Priority Inversion in SRIOV
Stefano Garzarella (1):
vsock/test: add a final full barrier after run all tests
Suraj Gupta (1):
dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing
Szymon Wilczek (1):
can: etas_es58x: allow partial RX URB allocation to succeed
Taehee Yoo (1):
selftests: net: amt: wait longer for connection before sending packets
Taeyang Lee (1):
crypto: authencesn - reject too-short AAD (assoclen<8) to match ESP/ESN spec
Tagir Garaev (1):
ASoC: Intel: sof_es8336: fix headphone GPIO logic inversion
Takashi Iwai (1):
ALSA: ctxfi: Fix potential OOB access in audio mixer handling
Tamir Duberstein (1):
scripts: generate_rust_analyzer: Add compiler_builtins -> core dep
Tetsuo Handa (1):
net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts
Thadeu Lima de Souza Cascardo (1):
Revert "nfc/nci: Add the inconsistency check between the input data length and count"
Thinh Nguyen (1):
usb: dwc3: Check for USB4 IP_NAME
Thomas Fourier (4):
wifi: ath10k: fix dma_free_coherent() pointer
octeontx2: Fix otx2_dma_map_page() error return code
scsi: qla2xxx: edif: Fix dma_free_coherent() size
ksmbd: smbd: fix dma_unmap_sg() nents
Thomas Weißschuh (1):
hrtimer: Fix softirq base check in update_needs_ipi()
Thorsten Blum (1):
w1: therm: Fix off-by-one buffer overflow in alarms_store
Timur Kristóf (2):
drm/amd/pm: Don't clear SI SMC table when setting power limit drm/amd/pm: Workaround SI powertune issue on Radeon 430 (v2)
Tomas Melin (1):
iio: adc: ad9467: fix ad9434 vref mask
Ulrich Mohr (1):
USB: serial: option: add Telit LE910 MBIM composition
Uwe Kleine-König (1):
spi: sprd-adi: Convert to platform remove callback returning void
Vlastimil Babka (1):
mm/page_alloc: prevent pcp corruption with SMP=n
Waiman Long (1):
blk-cgroup: Reinit blkg_iostat_set after clearing in blkcg_reset_stats()
Wayne Chang (1):
phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7
Weigang He (1):
of: fix reference count leak in of_alias_scan()
Wenkai Lin (1):
uacce: fix cdev handling in the cleanup path
Wentao Liang (1):
phy: rockchip: inno-usb2: Fix a double free bug in rockchip_usb2phy_probe()
Wojtek Wasko (3):
posix-clock: Store file pointer in struct posix_clock_context
ptp: Add PHC file mode checks. Allow RO adjtime() without FMODE_WRITE.
testptp: Add option to open PHC in readonly mode
Xabier Marquiegui (2):
posix-clock: introduce posix_clock_context concept
ptp: add testptp mask test
Xiaochen Shen (2):
x86/resctrl: Add missing resctrl initialization for Hygon x86/resctrl: Fix memory bandwidth counter width for Hygon
Xin Long (2):
sctp: move SCTP_CMD_ASSOC_SHKEY right after SCTP_CMD_PEER_INIT
sctp: linearize cloned gso packets in sctp_rcv
Yafang Shao (1):
net/mlx5e: Report rx_discards_phy via rx_dropped
Yang Erkun (1):
ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref
Yang Li (1):
spi: sprd-adi: Use devm_platform_get_and_ioremap_resource()
Yang Shen (1):
uacce: implement mremap in uacce_vm_ops to return -EPERM
Yang Yingliang (1):
spi: sprd-adi: switch to use spi_alloc_host()
Yun Lu (1):
netdevsim: fix a race issue related to the operation on bpf_bound_progs list
Yunseong Kim (1):
ksmbd: Fix race condition in RPC handle list access
Zhang Heng (1):
ASoC: amd: yc: Add DMI quirk for Acer TravelMate P216-41-TCO
Zhaoyang Huang (1):
arm64: Set __nocfi on swsusp_arch_resume()
Zilin Guan (3):
pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node() net/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup()
net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins()
Zqiang (1):
usbnet: Fix using smp_processor_id() in preemptible code warnings
feng (1):
Input: i8042 - add quirk for ASUS Zenbook UX425QA_UM425QA
gongqi (1):
Input: i8042 - add quirks for MECHREVO Wujie 15X Pro
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +3 -0
@@ -2852,6 +2852,9 @@ * [no]setxfer: Indicate if transfer speed mode setting should be skipped. + * [no]fua: Disable or enable FUA (Force Unit Access) + support for devices supporting this feature. + * dump_id: Dump IDENTIFY data. * disable: Disable this device.
Documentation/netlink/specs/fou.yaml new file +130 -0
130 lines not on this page · raw message
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 161 +SUBLEVEL = 162 EXTRAVERSION = NAME = Curry Ramen
arch/arm64/boot/dts/qcom/sc8280xp.dtsi +12 -4
@@ -1819,8 +1819,12 @@ remoteproc_nsp0: remoteproc@1b300000 { clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&rpmhpd SC8280XP_NSP>; - power-domain-names = "nsp"; + power-domains = <&rpmhpd SC8280XP_NSP>, + <&rpmhpd SC8280XP_CX>, + <&rpmhpd SC8280XP_MXC>; + power-domain-names = "nsp", + "cx", + "mxc"; memory-region = <&pil_nsp0_mem>;
@@ -1950,8 +1954,12 @@ remoteproc_nsp1: remoteproc@21300000 { clocks = <&rpmhcc RPMH_CXO_CLK>; clock-names = "xo"; - power-domains = <&rpmhpd SC8280XP_NSP>; - power-domain-names = "nsp"; + power-domains = <&rpmhpd SC8280XP_NSP>, + <&rpmhpd SC8280XP_CX>, + <&rpmhpd SC8280XP_MXC>; + power-domain-names = "nsp", + "cx", + "mxc"; memory-region = <&pil_nsp1_mem>;
arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +0 -1
@@ -427,7 +427,6 @@ &pcie_phy { &pcie0 { ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; - max-link-speed = <2>; num-lanes = <2>; pinctrl-names = "default"; status = "okay";
arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dts +0 -1
@@ -73,7 +73,6 @@ &i2c4 { }; &pcie0 { - max-link-speed = <1>; num-lanes = <1>; vpcie3v3-supply = <&vcc3v3_sys>; };
arch/arm64/kernel/hibernate.c +1 -1
@@ -397,7 +397,7 @@ int swsusp_arch_suspend(void)* Memory allocated by get_safe_page() will be dealt with by the hibernate code, * we don't need to free it here. */ -int swsusp_arch_resume (void ) +int __nocfi swsusp_arch_resume(void) {int rc;void *zero_page;
arch/arm64/kernel/signal.c +20 -6
@@ -317,12 +317,28 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user)fpsimd_flush_task_state (current);/* From now, fpsimd_thread_switch() won't touch thread.sve_state */ +if (sve.flags &SVE_SIG_FLAG_SM ) { +sme_alloc (current, false); +if (!current->thread.za_state) +return -ENOMEM ; + } +sve_alloc (current, true);if (!current->thread.sve_state) {clear_thread_flag (TIF_SVE );return -ENOMEM ; } +if (sve.flags &SVE_SIG_FLAG_SM ) { + current->thread.svcr |=SVCR_SM_MASK ; +set_thread_flag (TIF_SME ); + }else { + current->thread.svcr &= ~SVCR_SM_MASK ; +set_thread_flag (TIF_SVE ); + } + + current->thread.fp_type =FP_STATE_SVE ; + err = __copy_from_user(current->thread.sve_state, (char __user const *)user->sve + SVE_SIG_REGS_OFFSET,
@@ -330,12 +346,6 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user)if (err)return -EFAULT ; -if (sve.flags &SVE_SIG_FLAG_SM ) - current->thread.svcr |=SVCR_SM_MASK ; -else -set_thread_flag (TIF_SVE ); - current->thread.fp_type =FP_STATE_SVE ; - fpsimd_only:/* copy the FP and status/control registers */ /* restore_sigframe() already checked that user->fpsimd != NULL. */
@@ -433,6 +443,10 @@ static int restore_za_context(struct user_ctxs *user)fpsimd_flush_task_state (current);/* From now, fpsimd_thread_switch() won't touch thread.sve_state */ +sve_alloc (current, false); +if (!current->thread.sve_state) +return -ENOMEM ; +sme_alloc (current, true);if (!current->thread.za_state) { current->thread.svcr &= ~SVCR_ZA_MASK ;
arch/loongarch/kernel/perf_event.c +18 -3
@@ -637,6 +637,18 @@ static const struct loongarch_perf_event *loongarch_pmu_map_cache_event(u64 confreturn pev; } +static inline bool loongarch_pmu_event_requires_counter (const struct perf_event *event) +{ +switch (event->attr.type) { +case PERF_TYPE_HARDWARE : +case PERF_TYPE_HW_CACHE : +case PERF_TYPE_RAW : +return true; +default : +return false; + } +} +static int validate_group (struct perf_event *event) {struct cpu_hw_events fake_cpuc;
@@ -644,15 +656,18 @@ static int validate_group(struct perf_event *event)memset (&fake_cpuc,0 ,sizeof (fake_cpuc)); -if (loongarch_pmu_alloc_counter (&fake_cpuc, &leader->hw) <0 ) +if (loongarch_pmu_event_requires_counter (leader) && +loongarch_pmu_alloc_counter (&fake_cpuc, &leader->hw) <0 )return -EINVAL ;for_each_sibling_event (sibling, leader) { -if (loongarch_pmu_alloc_counter (&fake_cpuc, &sibling->hw) <0 ) +if (loongarch_pmu_event_requires_counter (sibling) && +loongarch_pmu_alloc_counter (&fake_cpuc, &sibling->hw) <0 )return -EINVAL ; } -if (loongarch_pmu_alloc_counter (&fake_cpuc, &event->hw) <0 ) +if (loongarch_pmu_event_requires_counter (event) && +loongarch_pmu_alloc_counter (&fake_cpuc, &event->hw) <0 )return -EINVAL ;return 0 ;
arch/riscv/include/asm/compat.h +1 -1
@@ -2,7 +2,7 @@#ifndef __ASM_COMPAT_H#define __ASM_COMPAT_H -#define COMPAT_UTS_MACHINE "riscv\0\0" +#define COMPAT_UTS_MACHINE "riscv32\0\0"/* * Architecture specific compatibility types
arch/x86/events/perf_event.h +11 -2
@@ -1421,13 +1421,22 @@ static inline bool intel_pmu_has_bts_period(struct perf_event *event, u64 periodstruct hw_perf_event *hwc = &event->hw;unsigned int hw_event, bts_event; -if (event->attr.freq) +/* +* Only use BTS for fixed rate period==1 events. +*/ +if (event->attr.freq || period !=1 ) +return false; + +/* +* BTS doesn't virtualize. +*/ +if (event->attr.exclude_host)return false; hw_event = hwc->config &INTEL_ARCH_EVENT_MASK ; bts_event = x86_pmu.event_map (PERF_COUNT_HW_BRANCH_INSTRUCTIONS ); -return hw_event == bts_event && period ==1 ; +return hw_event == bts_event; }static inline bool intel_pmu_has_bts (struct perf_event *event)
arch/x86/include/asm/kfence.h +24 -5
@@ -42,10 +42,34 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect) {unsigned int level;pte_t *pte =lookup_address (addr, &level); +pteval_t val;if (WARN_ON (!pte || level !=PG_LEVEL_4K ))return false; + val =pte_val (*pte); + +/* +* protect requires making the page not-present. If the PTE is +* already in the right state, there's nothing to do. +*/ +if (protect != !!(val & _PAGE_PRESENT)) +return true; + +/* +* Otherwise, invert the entire PTE. This avoids writing out an +* L1TF-vulnerable PTE (not present, without the high address bits +* set). +*/ +set_pte (pte,__pte (~val)); + +/* +* If the page was protected (non-present) and we're making it +* present, there is no need to flush the TLB at all. +*/ +if (!protect) +return true; +/* * We need to avoid IPIs, as we may get KFENCE allocations or faults * with interrupts disabled. Therefore, the below is best-effort, and
@@ -53,11 +77,6 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)* lazy fault handling takes care of faults after the page is PRESENT. */ -if (protect) -set_pte (pte,__pte (pte_val (*pte) & ~_PAGE_PRESENT)); -else -set_pte (pte,__pte (pte_val (*pte) | _PAGE_PRESENT)); -/* * Flush this CPU's TLB, assuming whoever did the allocation/free is * likely to continue running on this CPU.
arch/x86/kernel/cpu/resctrl/core.c +17 -4
@@ -728,7 +728,8 @@ static __init bool get_mem_config(void)if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL )return __get_mem_config_intel (&hw_res->r_resctrl); -else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD ) +else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD || + boot_cpu_data.x86_vendor ==X86_VENDOR_HYGON )return __rdt_get_mem_config_amd (&hw_res->r_resctrl);return false;
@@ -863,7 +864,8 @@ static __init void rdt_init_res_defs(void) {if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL )rdt_init_res_defs_intel (); -else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD ) +else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD || + boot_cpu_data.x86_vendor ==X86_VENDOR_HYGON )rdt_init_res_defs_amd (); }
@@ -894,8 +896,19 @@ void resctrl_cpu_detect(struct cpuinfo_x86 *c) c->x86_cache_occ_scale = ebx; c->x86_cache_mbm_width_offset = eax &0xff ; -if (c->x86_vendor ==X86_VENDOR_AMD && !c->x86_cache_mbm_width_offset) - c->x86_cache_mbm_width_offset =MBM_CNTR_WIDTH_OFFSET_AMD ; +if (!c->x86_cache_mbm_width_offset) { +switch (c->x86_vendor) { +case X86_VENDOR_AMD : + c->x86_cache_mbm_width_offset =MBM_CNTR_WIDTH_OFFSET_AMD ; +break ; +case X86_VENDOR_HYGON : + c->x86_cache_mbm_width_offset =MBM_CNTR_WIDTH_OFFSET_HYGON ; +break ; +default : +/* Leave c->x86_cache_mbm_width_offset as 0 */ +break ; + } + } } }
arch/x86/kernel/cpu/resctrl/internal.h +3 -0
@@ -31,6 +31,9 @@#define MAX_MBA_BW_AMD 0x800#define MBM_CNTR_WIDTH_OFFSET_AMD 20 +/* Hygon MBM counter width as an offset from MBM_CNTR_WIDTH_BASE */ +#define MBM_CNTR_WIDTH_OFFSET_HYGON 8 +#define RMID_VAL_ERROR BIT_ULL(63)#define RMID_VAL_UNAVAIL BIT_ULL(62)/*
arch/x86/kernel/fpu/core.c +29 -3
@@ -294,10 +294,29 @@ EXPORT_SYMBOL_GPL(fpu_enable_guest_xfd_features);#ifdef CONFIG_X86_64 void fpu_update_guest_xfd (struct fpu_guest *guest_fpu,u64 xfd) { +struct fpstate *fpstate = guest_fpu->fpstate; +fpregs_lock (); - guest_fpu->fpstate->xfd = xfd; -if (guest_fpu->fpstate->in_use) -xfd_update_state (guest_fpu->fpstate); + +/* +* KVM's guest ABI is that setting XFD[i]=1 *can* immediately revert the +* save state to its initial configuration. Likewise, KVM_GET_XSAVE does +* the same as XSAVE and returns XSTATE_BV[i]=0 whenever XFD[i]=1. +* +* If the guest's FPU state is in hardware, just update XFD: the XSAVE +* in fpu_swap_kvm_fpstate will clear XSTATE_BV[i] whenever XFD[i]=1. +* +* If however the guest's FPU state is NOT resident in hardware, clear +* disabled components in XSTATE_BV now, or a subsequent XRSTOR will +* attempt to load disabled components and generate #NM _in the host_. +*/ +if (xfd &&test_thread_flag (TIF_NEED_FPU_LOAD )) + fpstate->regs.xsave.header.xfeatures &= ~xfd; + + fpstate->xfd = xfd; +if (fpstate->in_use) +xfd_update_state (fpstate); +fpregs_unlock (); }EXPORT_SYMBOL_GPL (fpu_update_guest_xfd);
@@ -405,6 +424,13 @@ int fpu_copy_uabi_to_guest_fpstate(struct fpu_guest *gfpu, const void *buf,if (ustate->xsave.header.xfeatures & ~xcr0)return -EINVAL ; +/* +* Disabled features must be in their initial state, otherwise XRSTOR +* causes an exception. +*/ +if (WARN_ON_ONCE (ustate->xsave.header.xfeatures & kstate->xfd)) +return -EINVAL ; +/* * Nullify @vpkru to preserve its current value if PKRU's bit isn't set * in the header. KVM's odd ABI is to leave PKRU untouched in this
arch/x86/kvm/x86.c +9 -0
@@ -5341,9 +5341,18 @@ static void kvm_vcpu_ioctl_x86_get_xsave(struct kvm_vcpu *vcpu,static int kvm_vcpu_ioctl_x86_set_xsave (struct kvm_vcpu *vcpu,struct kvm_xsave *guest_xsave) { +union fpregs_state *xstate = (union fpregs_state *)guest_xsave->region; +if (fpstate_is_confidential (&vcpu->arch.guest_fpu))return 0 ; +/* +* For backwards compatibility, do not expect disabled features to be in +* their initial state. XSTATE_BV[i] must still be cleared whenever +* XFD[i]=1, or XRSTOR would cause a #NM. +*/ + xstate->xsave.header.xfeatures &= ~vcpu->arch.guest_fpu.fpstate->xfd; + return fpu_copy_uabi_to_guest_fpstate(&vcpu->arch.guest_fpu, guest_xsave->region, kvm_caps.supported_xcr0,
arch/x86/mm/fault.c +5 -10
@@ -835,8 +835,6 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,force_sig_pkuerr ((void __user *)address, pkey); else force_sig_fault(SIGSEGV, si_code, (void __user *)address); - -local_irq_disable (); }static noinline void
@@ -1429,15 +1427,12 @@ handle_page_fault(struct pt_regs *regs, unsigned long error_code,do_kern_addr_fault (regs, error_code, address); }else {do_user_addr_fault (regs, error_code, address); -/* -* User address page fault handling might have reenabled -* interrupts. Fixing up all potential exit points of -* do_user_addr_fault() and its leaf functions is just not -* doable w/o creating an unholy mess or turning the code -* upside down. -*/ -local_irq_disable (); } +/* +* page fault handling might have reenabled interrupts, +* make sure to disable them again. +*/ +local_irq_disable (); }DEFINE_IDTENTRY_RAW_ERRORCODE (exc_page_fault)
arch/x86/mm/kaslr.c +5 -5
@@ -111,12 +111,12 @@ void __init kernel_randomize_memory(void)/* * Adapt physical memory region size based on available memory, -* except when CONFIG_PCI_P2PDMA is enabled. P2PDMA exposes the -* device BAR space assuming the direct map space is large enough -* for creating a ZONE_DEVICE mapping in the direct map corresponding -* to the physical BAR address. +* except when CONFIG_ZONE_DEVICE is enabled. ZONE_DEVICE wants to map +* any physical address into the direct-map. KASLR wants to reliably +* steal some physical address bits. Those design choices are in direct +* conflict. */ -if (!IS_ENABLED (CONFIG_PCI_P2PDMA ) && (memory_tb < kaslr_regions[0 ].size_tb)) +if (!IS_ENABLED (CONFIG_ZONE_DEVICE ) && (memory_tb < kaslr_regions[0 ].size_tb)) kaslr_regions[0 ].size_tb = memory_tb;/*
block/blk-cgroup.c +4 -0
@@ -531,8 +531,12 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css,struct blkg_iostat_set *bis =per_cpu_ptr (blkg->iostat_cpu, cpu);memset (bis,0 ,sizeof (*bis)); + +/* Re-initialize the cleared blkg_iostat_set */ +u64_stats_init (&bis->sync); }memset (&blkg->iostat,0 ,sizeof (blkg->iostat)); +u64_stats_init (&blkg->iostat.sync);for (i =0 ; i <BLKCG_MAX_POLS ; i++) {struct blkcg_policy *pol = blkcg_policy[i];
crypto/authencesn.c +6 -0
@@ -191,6 +191,9 @@ static int crypto_authenc_esn_encrypt(struct aead_request *req)struct scatterlist *src, *dst;int err; +if (assoclen <8 ) +return -EINVAL ; +sg_init_table (areq_ctx->src,2 ); src =scatterwalk_ffwd (areq_ctx->src, req->src, assoclen); dst = src;
@@ -284,6 +287,9 @@ static int crypto_authenc_esn_decrypt(struct aead_request *req)u32 tmp[2 ];int err; +if (assoclen <8 ) +return -EINVAL ; + cryptlen -= authsize;if (req->src != dst) {
drivers/ata/libata-core.c +60 -2
103 lines not on this page · raw message
drivers/ata/libata-scsi.c +2 -28
@@ -2283,30 +2283,6 @@ static unsigned int ata_msense_rw_recovery(u8 *buf, bool changeable)return sizeof (def_rw_recovery_mpage); } -/* -* We can turn this into a real blacklist if it's needed, for now just -* blacklist any Maxtor BANC1G10 revision firmware -*/ -static int ata_dev_supports_fua (u16 *id) -{ -unsigned char model[ATA_ID_PROD_LEN +1 ], fw[ATA_ID_FW_REV_LEN +1 ]; - -if (!libata_fua) -return 0 ; -if (!ata_id_has_fua (id)) -return 0 ; - -ata_id_c_string (id, model,ATA_ID_PROD ,sizeof (model)); -ata_id_c_string (id, fw,ATA_ID_FW_REV ,sizeof (fw)); - -if (strcmp (model,"Maxtor" )) -return 1 ; -if (strcmp (fw,"BANC1G10" )) -return 1 ; - -return 0 ;/* blacklisted */ -} -/** * ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands * @args: device IDENTIFY data / SCSI command of interest.
@@ -2330,7 +2306,7 @@ static unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf) };u8 pg, spg;unsigned int ebd, page_control, six_byte; -u8 dpofua, bp =0xff ; +u8 dpofua =0 , bp =0xff ;u16 fp; six_byte = (scsicmd[0 ] ==MODE_SENSE );
@@ -2393,9 +2369,7 @@ static unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf) goto invalid_fld; } - dpofua =0 ; -if (ata_dev_supports_fua (args->id) && (dev->flags &ATA_DFLAG_LBA48 ) && - (!(dev->flags &ATA_DFLAG_PIO ) || dev->multi_count)) +if (dev->flags &ATA_DFLAG_FUA ) dpofua =1 <<4 ;if (six_byte) {
drivers/base/regmap/regmap.c +3 -1
@@ -462,9 +462,11 @@ static void regmap_lock_hwlock_irq(void *__map)static void regmap_lock_hwlock_irqsave (void *__map) {struct regmap *map = __map; +unsigned long flags =0 ;hwspin_lock_timeout_irqsave (map->hwlock,UINT_MAX , - &map->spinlock_flags); + &flags); + map->spinlock_flags = flags; }static void regmap_unlock_hwlock (void *__map)
drivers/block/xen-blkback/xenbus.c +1 -3
@@ -524,7 +524,7 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,return 0 ; } -static int xen_blkbk_remove (struct xenbus_device *dev) +static void xen_blkbk_remove (struct xenbus_device *dev) {struct backend_info *be =dev_get_drvdata (&dev->dev);
@@ -547,8 +547,6 @@ static int xen_blkbk_remove(struct xenbus_device *dev)/* Put the reference we set in xen_blkif_alloc(). */ xen_blkif_put (be->blkif); } - -return 0 ; } int xen_blkbk_flush_diskcache(struct xenbus_transaction xbt,
drivers/block/xen-blkfront.c +1 -2
@@ -2469,7 +2469,7 @@ static void blkback_changed(struct xenbus_device *dev, } } -static int blkfront_remove (struct xenbus_device *xbdev) +static void blkfront_remove (struct xenbus_device *xbdev) {struct blkfront_info *info =dev_get_drvdata (&xbdev->dev);
@@ -2490,7 +2490,6 @@ static int blkfront_remove(struct xenbus_device *xbdev) }kfree (info); -return 0 ; }static int blkfront_is_ready (struct xenbus_device *dev)
drivers/bluetooth/hci_ldisc.c +2 -2
@@ -687,6 +687,8 @@ static int hci_uart_register_dev(struct hci_uart *hu)return err; } +set_bit (HCI_UART_PROTO_INIT , &hu->flags); +if (test_bit (HCI_UART_INIT_PENDING , &hu->hdev_flags))return 0 ;
@@ -714,8 +716,6 @@ static int hci_uart_set_proto(struct hci_uart *hu, int id) hu->proto = p; -set_bit (HCI_UART_PROTO_INIT , &hu->flags); - err =hci_uart_register_dev (hu);if (err) {return err;
drivers/char/tpm/xen-tpmfront.c +1 -2
@@ -360,14 +360,13 @@ static int tpmfront_probe(struct xenbus_device *dev,return tpm_chip_register (priv->chip); } -static int tpmfront_remove (struct xenbus_device *dev) +static void tpmfront_remove (struct xenbus_device *dev) {struct tpm_chip *chip =dev_get_drvdata (&dev->dev);struct tpm_private *priv =dev_get_drvdata (&chip->dev);tpm_chip_unregister (chip);ring_free (priv);dev_set_drvdata (&chip->dev,NULL ); -return 0 ; }static int tpmfront_resume (struct xenbus_device *dev)
drivers/clocksource/timer-riscv.c +2 -1
@@ -37,8 +37,9 @@ static int riscv_clock_next_event(unsigned long delta,csr_set (CSR_IE ,IE_TIE );if (static_branch_likely (&riscv_sstc_available)) {#if defined(CONFIG_32BIT ) -csr_write (CSR_STIMECMP , next_tval &0xFFFFFFFF ); +csr_write (CSR_STIMECMP ,ULONG_MAX );csr_write (CSR_STIMECMPH , next_tval >>32 ); +csr_write (CSR_STIMECMP , next_tval &0xFFFFFFFF );#else csr_write (CSR_STIMECMP , next_tval);#endif
drivers/comedi/comedi_fops.c +1 -1
@@ -1095,7 +1095,7 @@ static int do_chaninfo_ioctl(struct comedi_device *dev,for (i =0 ; i < s->n_chan; i++) {int x; - x = (dev->minor <<28 ) | (it->subdev <<24 ) | (i <<16 ) | + x = (it->subdev <<24 ) | (i <<16 ) | (s->range_table_list[i]->length);if (put_user (x, it->rangelist + i))return -EFAULT ;
drivers/comedi/drivers/dmm32at.c +30 -2
@@ -330,6 +330,7 @@ static int dmm32at_ai_cmdtest(struct comedi_device *dev,static void dmm32at_setaitimer (struct comedi_device *dev,unsigned int nansec) { +unsigned long irq_flags;unsigned char lo1, lo2, hi2;unsigned short both2;
@@ -342,6 +343,9 @@ static void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec)/* set counter clocks to 10MHz, disable all aux dio */ outb (0 , dev->iobase +DMM32AT_CTRDIO_CFG_REG ); +/* serialize access to control register and paged registers */ +spin_lock_irqsave (&dev->spinlock, irq_flags); +/* get access to the clock regs */ outb (DMM32AT_CTRL_PAGE_8254 , dev->iobase +DMM32AT_CTRL_REG );
@@ -354,6 +358,8 @@ static void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec)outb (lo2, dev->iobase +DMM32AT_CLK2 );outb (hi2, dev->iobase +DMM32AT_CLK2 ); +spin_unlock_irqrestore (&dev->spinlock, irq_flags); +/* enable the ai conversion interrupt and the clock to start scans */ outb(DMM32AT_INTCLK_ADINT | DMM32AT_INTCLK_CLKEN | DMM32AT_INTCLK_CLKSEL,
@@ -363,13 +369,19 @@ static void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec)static int dmm32at_ai_cmd (struct comedi_device *dev,struct comedi_subdevice *s) {struct comedi_cmd *cmd = &s->async->cmd; +unsigned long irq_flags;int ret;dmm32at_ai_set_chanspec (dev, s, cmd->chanlist[0 ], cmd->chanlist_len); +/* serialize access to control register and paged registers */ +spin_lock_irqsave (&dev->spinlock, irq_flags); +/* reset the interrupt just in case */ outb (DMM32AT_CTRL_INTRST , dev->iobase +DMM32AT_CTRL_REG ); +spin_unlock_irqrestore (&dev->spinlock, irq_flags); +/* * wait for circuit to settle * we don't have the 'insn' here but it's not needed
@@ -429,8 +441,13 @@ static irqreturn_t dmm32at_isr(int irq, void *d)comedi_handle_events (dev, s); } +/* serialize access to control register and paged registers */ +spin_lock (&dev->spinlock); +/* reset the interrupt */ outb (DMM32AT_CTRL_INTRST , dev->iobase +DMM32AT_CTRL_REG ); + +spin_unlock (&dev->spinlock);return IRQ_HANDLED ; }
@@ -481,14 +498,25 @@ static int dmm32at_ao_insn_write(struct comedi_device *dev,static int dmm32at_8255_io (struct comedi_device *dev,int dir,int port,int data,unsigned long regbase) { +unsigned long irq_flags; +int ret; + +/* serialize access to control register and paged registers */ +spin_lock_irqsave (&dev->spinlock, irq_flags); +/* get access to the DIO regs */ outb (DMM32AT_CTRL_PAGE_8255 , dev->iobase +DMM32AT_CTRL_REG );if (dir) {outb (data, dev->iobase + regbase + port); -return 0 ; + ret =0 ; + }else { + ret =inb (dev->iobase + regbase + port); } -return inb (dev->iobase + regbase + port); + +spin_unlock_irqrestore (&dev->spinlock, irq_flags); + +return ret; }/* Make sure the board is there and put it to a known state */
drivers/comedi/range.c +1 -1
@@ -52,7 +52,7 @@ int do_rangeinfo_ioctl(struct comedi_device *dev,const struct comedi_lrange *lr;struct comedi_subdevice *s; - subd = (it->range_type >>24 ) &0xf ; + subd = (it->range_type >>24 ) &0xff ; chan = (it->range_type >>16 ) &0xff ;if (!dev->attached)
drivers/crypto/qat/qat_common/adf_common_drv.h +1 -0
@@ -194,6 +194,7 @@ int qat_uclo_set_cfg_ae_mask(struct icp_qat_fw_loader_handle *handle,int adf_init_misc_wq (void );void adf_exit_misc_wq (void );bool adf_misc_wq_queue_work (struct work_struct *work); +void adf_misc_wq_flush (void );#if defined(CONFIG_PCI_IOV )int adf_sriov_configure (struct pci_dev *pdev,int numvfs);void adf_disable_sriov (struct adf_accel_dev *accel_dev);
drivers/crypto/qat/qat_common/adf_init.c +1 -0
@@ -337,6 +337,7 @@ void adf_dev_shutdown(struct adf_accel_dev *accel_dev) hw_data->exit_admin_comms (accel_dev);adf_cleanup_etr_data (accel_dev); +adf_misc_wq_flush ();adf_dev_restore (accel_dev); }EXPORT_SYMBOL_GPL (adf_dev_shutdown);
drivers/crypto/qat/qat_common/adf_isr.c +5 -0
@@ -380,3 +380,8 @@ bool adf_misc_wq_queue_work(struct work_struct *work) {return queue_work (adf_misc_wq, work); } + +void adf_misc_wq_flush (void ) +{ +flush_workqueue (adf_misc_wq); +}
drivers/dma/apple-admac.c +1 -0
@@ -937,6 +937,7 @@ static int admac_remove(struct platform_device *pdev) }static const struct of_device_id admac_of_match[] = { + { .compatible ="apple,t8103-admac" , }, { .compatible ="apple,admac" , }, { } };
drivers/dma/at_hdmac.c +7 -2
@@ -1586,6 +1586,7 @@ static void atc_free_chan_resources(struct dma_chan *chan) {struct at_dma_chan *atchan =to_at_dma_chan (chan);struct at_dma *atdma =to_at_dma (chan->device); +struct at_dma_slave *atslave;struct at_desc *desc, *_desc;LIST_HEAD (list);
@@ -1606,8 +1607,12 @@ static void atc_free_chan_resources(struct dma_chan *chan)/* * Free atslave allocated in at_dma_xlate() */ -kfree (chan->private); - chan->private =NULL ; + atslave = chan->private; +if (atslave) { +put_device (atslave->dma_dev); +kfree (atslave); + chan->private =NULL ; + }dev_vdbg (chan2dev (chan),"free_chan_resources: done\n" ); }
drivers/dma/bcm-sba-raid.c +5 -1
@@ -1697,7 +1697,7 @@ static int sba_probe(struct platform_device *pdev)/* Prealloc channel resource */ ret =sba_prealloc_channel_resources (sba);if (ret) - goto fail_free_mchan; + goto fail_put_mbox;/* Check availability of debugfs */ if (!debugfs_initialized ())
@@ -1727,6 +1727,8 @@ static int sba_probe(struct platform_device *pdev) fail_free_resources:debugfs_remove_recursive (sba->root);sba_freeup_channel_resources (sba); +fail_put_mbox: +put_device (sba->mbox_dev); fail_free_mchan:mbox_free_channel (sba->mchan);return ret;
@@ -1742,6 +1744,8 @@ static int sba_remove(struct platform_device *pdev)sba_freeup_channel_resources (sba); +put_device (sba->mbox_dev); +mbox_free_channel (sba->mchan);return 0 ;
drivers/dma/dw/rzn1-dmamux.c +3 -1
@@ -88,7 +88,7 @@ static void *rzn1_dmamux_route_allocate(struct of_phandle_args *dma_spec,if (test_and_set_bit (map->req_idx, dmamux->used_chans)) { ret = -EBUSY ; - goto free_map; + goto put_dma_spec_np; } mask =BIT (map->req_idx);
@@ -101,6 +101,8 @@ static void *rzn1_dmamux_route_allocate(struct of_phandle_args *dma_spec, clear_bitmap:clear_bit (map->req_idx, dmamux->used_chans); +put_dma_spec_np: +of_node_put (dma_spec->np); free_map:kfree (map); put_device:
drivers/dma/idxd/compat.c +19 -4
@@ -21,11 +21,16 @@ static ssize_t unbind_store(struct device_driver *drv, const char *buf, size_t cint rc = -ENODEV ; dev =bus_find_device_by_name (bus,NULL , buf); -if (dev && dev->driver) { +if (!dev) +return -ENODEV ; + +if (dev->driver) {device_driver_detach (dev); rc = count; } +put_device (dev); +return rc; } static DRIVER_ATTR_IGNORE_LOCKDEP(unbind, 0200, NULL, unbind_store);
@@ -39,9 +44,12 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf, size_t coustruct idxd_dev *idxd_dev; dev =bus_find_device_by_name (bus,NULL , buf); -if (!dev || dev->driver || drv != &dsa_drv.drv) +if (!dev)return -ENODEV ; +if (dev->driver || drv != &dsa_drv.drv) + goto err_put_dev; + idxd_dev =confdev_to_idxd_dev (dev);if (is_idxd_dev (idxd_dev)) { alt_drv =driver_find ("idxd" , bus);
@@ -54,13 +62,20 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf, size_t cou alt_drv =driver_find ("user" , bus); }if (!alt_drv) -return -ENODEV ; + goto err_put_dev; rc =device_driver_attach (alt_drv, dev);if (rc <0 ) -return rc; + goto err_put_dev; + +put_device (dev);return count; + +err_put_dev: +put_device (dev); + +return rc; } static DRIVER_ATTR_IGNORE_LOCKDEP(bind, 0200, NULL, bind_store);
drivers/dma/lpc18xx-dmamux.c +14 -5
@@ -55,30 +55,31 @@ static void *lpc18xx_dmamux_reserve(struct of_phandle_args *dma_spec,struct lpc18xx_dmamux_data *dmamux =platform_get_drvdata (pdev);unsigned long flags;unsigned mux; +int ret = -EINVAL ;if (dma_spec->args_count !=3 ) {dev_err (&pdev->dev,"invalid number of dma mux args\n" ); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; } mux = dma_spec->args[0 ];if (mux >= dmamux->dma_master_requests) {dev_err (&pdev->dev,"invalid mux number: %d\n" , dma_spec->args[0 ]); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }if (dma_spec->args[1 ] >LPC18XX_DMAMUX_MAX_VAL ) {dev_err (&pdev->dev,"invalid dma mux value: %d\n" , dma_spec->args[1 ]); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }/* The of_node_put() will be done in the core for the node */ dma_spec->np =of_parse_phandle (ofdma->of_node,"dma-masters" ,0 );if (!dma_spec->np) {dev_err (&pdev->dev,"can't get dma master\n" ); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }spin_lock_irqsave (&dmamux->lock, flags);
@@ -87,7 +88,8 @@ static void *lpc18xx_dmamux_reserve(struct of_phandle_args *dma_spec,dev_err (&pdev->dev,"dma request %u busy with %u.%u\n" , mux, mux, dmamux->muxes[mux].value);of_node_put (dma_spec->np); -return ERR_PTR (-EBUSY ); + ret = -EBUSY ; + goto err_put_pdev; } dmamux->muxes[mux].busy = true;
@@ -104,7 +106,14 @@ static void *lpc18xx_dmamux_reserve(struct of_phandle_args *dma_spec,dev_dbg (&pdev->dev,"mapping dmamux %u.%u to dma request %u\n" , mux, dmamux->muxes[mux].value, mux); +put_device (&pdev->dev); +return &dmamux->muxes[mux]; + +err_put_pdev: +put_device (&pdev->dev); + +return ERR_PTR (ret); }static int lpc18xx_dmamux_probe (struct platform_device *pdev)
drivers/dma/qcom/gpi.c +4 -2
@@ -1621,14 +1621,16 @@ static int gpi_peripheral_config(struct dma_chan *chan, struct dma_slave_config *config) { struct gchan *gchan = to_gchan(chan); +void *new_config;if (!config->peripheral_config)return -EINVAL ; - gchan->config =krealloc (gchan->config, config->peripheral_size,GFP_NOWAIT ); -if (!gchan->config) + new_config =krealloc (gchan->config, config->peripheral_size,GFP_NOWAIT ); +if (!new_config)return -ENOMEM ; + gchan->config = new_config;memcpy (gchan->config, config->peripheral_config, config->peripheral_size);return 0 ;
drivers/dma/sh/rz-dmac.c +5 -0
@@ -533,11 +533,16 @@ rz_dmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,static int rz_dmac_terminate_all (struct dma_chan *chan) {struct rz_dmac_chan *channel =to_rz_dmac_chan (chan); +struct rz_lmdesc *lmdesc = channel->lmdesc.base;unsigned long flags; +unsigned int i;LIST_HEAD (head);rz_dmac_disable_hw (channel);spin_lock_irqsave (&channel->vc.lock, flags); +for (i =0 ; i <DMAC_NR_LMDESC ; i++) + lmdesc[i].header =0 ; +list_splice_tail_init (&channel->ld_active, &channel->ld_free);list_splice_tail_init (&channel->ld_queue, &channel->ld_free);spin_unlock_irqrestore (&channel->vc.lock, flags);
drivers/dma/stm32-dmamux.c +15 -7
@@ -88,23 +88,25 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec,struct stm32_dmamux_data *dmamux =platform_get_drvdata (pdev);struct stm32_dmamux *mux;u32 i, min, max; -int ret; +int ret = -EINVAL ;unsigned long flags;if (dma_spec->args_count !=3 ) {dev_err (&pdev->dev,"invalid number of dma mux args\n" ); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }if (dma_spec->args[0 ] > dmamux->dmamux_requests) {dev_err (&pdev->dev,"invalid mux request number: %d\n" , dma_spec->args[0 ]); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; } mux =kzalloc (sizeof (*mux),GFP_KERNEL ); -if (!mux) -return ERR_PTR (-ENOMEM ); +if (!mux) { + ret = -ENOMEM ; + goto err_put_pdev; + }spin_lock_irqsave (&dmamux->lock, flags); mux->chan_id = find_first_zero_bit(dmamux->dma_inuse,
@@ -131,7 +133,6 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec, dma_spec->np =of_parse_phandle (ofdma->of_node,"dma-masters" , i -1 );if (!dma_spec->np) {dev_err (&pdev->dev,"can't get dma master\n" ); - ret = -EINVAL ; goto error; }
@@ -140,7 +141,7 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec, ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 ) {spin_unlock_irqrestore (&dmamux->lock, flags); - goto error; + goto err_put_dma_spec_np; }spin_unlock_irqrestore (&dmamux->lock, flags);
@@ -158,13 +159,20 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec,dev_dbg (&pdev->dev,"Mapping DMAMUX(%u) to DMA%u(%u)\n" , mux->request, mux->master, mux->chan_id); +put_device (&pdev->dev); +return mux; +err_put_dma_spec_np: +of_node_put (dma_spec->np); error:clear_bit (mux->chan_id, dmamux->dma_inuse); error_chan_id:kfree (mux); +err_put_pdev: +put_device (&pdev->dev); +return ERR_PTR (ret); }
drivers/dma/tegra210-adma.c +9 -1
@@ -341,10 +341,17 @@ static void tegra_adma_stop(struct tegra_adma_chan *tdc)return ; } -kfree (tdc->desc); +vchan_terminate_vdesc (&tdc->desc->vd); tdc->desc =NULL ; } +static void tegra_adma_synchronize (struct dma_chan *dc) +{ +struct tegra_adma_chan *tdc =to_tegra_adma_chan (dc); + +vchan_synchronize (&tdc->vc); +} +static void tegra_adma_start (struct tegra_adma_chan *tdc) {struct virt_dma_desc *vd =vchan_next_desc (&tdc->vc);
@@ -910,6 +917,7 @@ static int tegra_adma_probe(struct platform_device *pdev) tdma->dma_dev.device_config = tegra_adma_slave_config; tdma->dma_dev.device_tx_status = tegra_adma_tx_status; tdma->dma_dev.device_terminate_all = tegra_adma_terminate_all; + tdma->dma_dev.device_synchronize = tegra_adma_synchronize; tdma->dma_dev.src_addr_widths =BIT (DMA_SLAVE_BUSWIDTH_4_BYTES ); tdma->dma_dev.dst_addr_widths =BIT (DMA_SLAVE_BUSWIDTH_4_BYTES ); tdma->dma_dev.directions =BIT (DMA_DEV_TO_MEM ) |BIT (DMA_MEM_TO_DEV );
drivers/dma/ti/dma-crossbar.c +12 -6
@@ -78,34 +78,35 @@ static void *ti_am335x_xbar_route_allocate(struct of_phandle_args *dma_spec, {struct platform_device *pdev =of_find_device_by_node (ofdma->of_node);struct ti_am335x_xbar_data *xbar =platform_get_drvdata (pdev); -struct ti_am335x_xbar_map *map; +struct ti_am335x_xbar_map *map =ERR_PTR (-EINVAL );if (dma_spec->args_count !=3 ) -return ERR_PTR (-EINVAL ); + goto out_put_pdev;if (dma_spec->args[2 ] >= xbar->xbar_events) {dev_err (&pdev->dev,"Invalid XBAR event number: %d\n" , dma_spec->args[2 ]); -return ERR_PTR (-EINVAL ); + goto out_put_pdev; }if (dma_spec->args[0 ] >= xbar->dma_requests) {dev_err (&pdev->dev,"Invalid DMA request line number: %d\n" , dma_spec->args[0 ]); -return ERR_PTR (-EINVAL ); + goto out_put_pdev; }/* The of_node_put() will be done in the core for the node */ dma_spec->np =of_parse_phandle (ofdma->of_node,"dma-masters" ,0 );if (!dma_spec->np) {dev_err (&pdev->dev,"Can't get DMA master\n" ); -return ERR_PTR (-EINVAL ); + goto out_put_pdev; } map =kzalloc (sizeof (*map),GFP_KERNEL );if (!map) {of_node_put (dma_spec->np); -return ERR_PTR (-ENOMEM ); + map =ERR_PTR (-ENOMEM ); + goto out_put_pdev; } map->dma_line = (u16 )dma_spec->args[0 ];
@@ -119,6 +120,9 @@ static void *ti_am335x_xbar_route_allocate(struct of_phandle_args *dma_spec,ti_am335x_xbar_write (xbar->iomem, map->dma_line, map->mux_val); +out_put_pdev: +put_device (&pdev->dev); +return map; }
@@ -287,6 +291,8 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,ti_dra7_xbar_write (xbar->iomem, map->xbar_out, map->xbar_in); +put_device (&pdev->dev); +return map; }
drivers/dma/ti/k3-udma-private.c +1 -1
@@ -40,9 +40,9 @@ struct udma_dev *of_xudma_dev_get(struct device_node *np, const char *property) } ud =platform_get_drvdata (pdev); +put_device (&pdev->dev);if (!ud) {pr_debug ("UDMA has not been probed\n" ); -put_device (&pdev->dev);return ERR_PTR (-EPROBE_DEFER ); }
drivers/dma/ti/omap-dma.c +4 -0
@@ -1811,6 +1811,8 @@ static int omap_dma_probe(struct platform_device *pdev)if (rc) {pr_warn ("OMAP-DMA: failed to register slave DMA engine device: %d\n" , rc); +if (od->ll123_supported) +dma_pool_destroy (od->desc_pool);omap_dma_free (od);return rc; }
@@ -1826,6 +1828,8 @@ static int omap_dma_probe(struct platform_device *pdev)if (rc) {pr_warn ("OMAP-DMA: failed to register DMA controller\n" );dma_async_device_unregister (&od->ddev); +if (od->ll123_supported) +dma_pool_destroy (od->desc_pool);omap_dma_free (od); } }
drivers/dma/xilinx/xilinx_dma.c +5 -2
@@ -128,6 +128,7 @@#define XILINX_MCDMA_MAX_CHANS_PER_DEVICE 0x20#define XILINX_DMA_MAX_CHANS_PER_DEVICE 0x2#define XILINX_CDMA_MAX_CHANS_PER_DEVICE 0x1 +#define XILINX_DMA_DFAULT_ADDRWIDTH 0x20#define XILINX_DMA_DMAXR_ALL_IRQ_MASK \ (XILINX_DMA_DMASR_FRM_CNT_IRQ | \
@@ -3016,7 +3017,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)struct device_node *node = pdev->dev.of_node;struct xilinx_dma_device *xdev;struct device_node *child, *np = pdev->dev.of_node; -u32 num_frames, addr_width, len_width; +u32 num_frames, addr_width =XILINX_DMA_DFAULT_ADDRWIDTH , len_width;int i, err;/* Allocate and initialize the DMA engine structure */
@@ -3085,7 +3086,9 @@ static int xilinx_dma_probe(struct platform_device *pdev) err =of_property_read_u32 (node,"xlnx,addrwidth" , &addr_width);if (err <0 ) -dev_warn (xdev->dev,"missing xlnx,addrwidth property\n" ); +dev_warn (xdev->dev, +"missing xlnx,addrwidth property, using default value %d\n" , +XILINX_DMA_DFAULT_ADDRWIDTH );if (addr_width >32 ) xdev->ext_addr = true;
drivers/edac/i3200_edac.c +6 -5
@@ -358,10 +358,11 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx) layers[1 ].type =EDAC_MC_LAYER_CHANNEL ; layers[1 ].size = nr_channels; layers[1 ].is_virt_csrow = false; - mci =edac_mc_alloc (0 ,ARRAY_SIZE (layers), layers, -sizeof (struct i3200_priv )); + + rc = -ENOMEM ; + mci =edac_mc_alloc (0 ,ARRAY_SIZE (layers), layers,sizeof (struct i3200_priv ));if (!mci) -return -ENOMEM ; + goto unmap;edac_dbg (3 ,"MC: init mci\n" );
@@ -421,9 +422,9 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx)return 0 ; fail: +edac_mc_free (mci); +unmap:iounmap (window); -if (mci) -edac_mc_free (mci);return rc; }
drivers/edac/x38_edac.c +6 -3
@@ -341,9 +341,12 @@ static int x38_probe1(struct pci_dev *pdev, int dev_idx) layers[1 ].type =EDAC_MC_LAYER_CHANNEL ; layers[1 ].size = x38_channel_num; layers[1 ].is_virt_csrow = false; + + + rc = -ENOMEM ; mci =edac_mc_alloc (0 ,ARRAY_SIZE (layers), layers,0 );if (!mci) -return -ENOMEM ; + goto unmap;edac_dbg (3 ,"MC: init mci\n" );
@@ -403,9 +406,9 @@ static int x38_probe1(struct pci_dev *pdev, int dev_idx)return 0 ; fail: +edac_mc_free (mci); +unmap:iounmap (window); -if (mci) -edac_mc_free (mci);return rc; }
drivers/firmware/efi/cper.c +1 -1
@@ -161,7 +161,7 @@ int cper_bits_to_str(char *buf, int buf_size, unsigned long bits, len -= size; str += size; } -return len - buf_size; +return buf_size - len; }EXPORT_SYMBOL_GPL (cper_bits_to_str);
drivers/firmware/imx/imx-scu-irq.c +12 -12
@@ -137,6 +137,18 @@ int imx_scu_enable_general_irq_channel(struct device *dev)struct mbox_chan *ch;int ret =0 , i =0 ; +if (!of_parse_phandle_with_args (dev->of_node,"mboxes" , +"#mbox-cells" ,0 , &spec)) { + i =of_alias_get_id (spec.np,"mu" ); +of_node_put (spec.np); + } + +/* use mu1 as general mu irq channel if failed */ +if (i <0 ) + i =1 ; + + mu_resource_id =IMX_SC_R_MU_0A + i; + ret =imx_scu_get_handle (&imx_sc_irq_ipc_handle);if (ret)return ret;
@@ -159,18 +171,6 @@ int imx_scu_enable_general_irq_channel(struct device *dev)return ret; } -if (!of_parse_phandle_with_args (dev->of_node,"mboxes" , -"#mbox-cells" ,0 , &spec)) { - i =of_alias_get_id (spec.np,"mu" ); -of_node_put (spec.np); - } - -/* use mu1 as general mu irq channel if failed */ -if (i <0 ) - i =1 ; - - mu_resource_id =IMX_SC_R_MU_0A + i; -return ret; }EXPORT_SYMBOL (imx_scu_enable_general_irq_channel);
drivers/gpio/gpio-rockchip.c +0 -8
@@ -19,7 +19,6 @@#include <linux/of_address.h> #include <linux/of_device.h> #include <linux/of_irq.h> -#include <linux/pinctrl/consumer.h> #include <linux/pinctrl/pinconf-generic.h> #include <linux/regmap.h>
@@ -157,12 +156,6 @@ static int rockchip_gpio_set_direction(struct gpio_chip *chip,unsigned long flags;u32 data = input ?0 :1 ; - -if (input) -pinctrl_gpio_direction_input (bank->pin_base + offset); -else -pinctrl_gpio_direction_output (bank->pin_base + offset); -raw_spin_lock_irqsave (&bank->slock, flags);rockchip_gpio_writel_bit (bank, offset, data, bank->gpio_regs->port_ddr);raw_spin_unlock_irqrestore (&bank->slock, flags);
@@ -584,7 +577,6 @@ static int rockchip_gpiolib_register(struct rockchip_pin_bank *bank) gc->ngpio = bank->nr_pins; gc->label = bank->name; gc->parent = bank->dev; - gc->can_sleep = true; ret =gpiochip_add_data (gc, bank);if (ret) {
drivers/gpio/gpiolib-acpi.c +1 -1
@@ -1184,7 +1184,7 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,mutex_unlock (&achip->conn_lock);if (function ==ACPI_WRITE ) -gpiod_set_raw_value_cansleep (desc, !!(*value &BIT (i))); +gpiod_set_raw_value_cansleep (desc, !!(*value &BIT_ULL (i)));else *value |= (u64 )gpiod_get_raw_value_cansleep (desc) << i; }
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +1 -1
@@ -3652,7 +3652,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,mutex_init (&adev->grbm_idx_mutex);mutex_init (&adev->mn_lock);mutex_init (&adev->virt.vf_errors.lock); -mutex_init (&adev->virt.rlcg_reg_lock);hash_init (adev->mn_hash);mutex_init (&adev->psp.mutex);mutex_init (&adev->notifier_lock);
@@ -3674,6 +3673,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,spin_lock_init (&adev->se_cac_idx_lock);spin_lock_init (&adev->audio_endpt_idx_lock);spin_lock_init (&adev->mm_stats.lock); +spin_lock_init (&adev->virt.rlcg_reg_lock);INIT_LIST_HEAD (&adev->shadow_list);mutex_init (&adev->shadow_list_lock);
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +3 -2
@@ -965,6 +965,7 @@ static u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 vvoid *scratch_reg2;void *scratch_reg3;void *spare_int; +unsigned long flags;if (!adev->gfx.rlc.rlcg_reg_access_supported) { dev_err(adev->dev,
@@ -978,7 +979,7 @@ static u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v scratch_reg2 = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->scratch_reg2; scratch_reg3 = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->scratch_reg3; -mutex_lock (&adev->virt.rlcg_reg_lock); +spin_lock_irqsave (&adev->virt.rlcg_reg_lock, flags);if (reg_access_ctrl->spare_int) spare_int = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->spare_int;
@@ -1034,7 +1035,7 @@ static u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v ret =readl (scratch_reg0); -mutex_unlock (&adev->virt.rlcg_reg_lock); +spin_unlock_irqrestore (&adev->virt.rlcg_reg_lock, flags);return ret; }
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h +2 -1
@@ -264,7 +264,8 @@ struct amdgpu_virt {/* the ucode id to signal the autoload */ uint32_t autoload_ucode_id; -struct mutex rlcg_reg_lock; +/* Spinlock to protect access to the RLCG register interface */ +spinlock_t rlcg_reg_lock; };struct amdgpu_video_codec_info ;
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +1 -1
@@ -6584,7 +6584,7 @@ static int gfx_v10_0_gfx_init_queue(struct amdgpu_ring *ring)memcpy (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd));/* reset the ring */ ring->wptr =0 ; - *ring->wptr_cpu_addr =0 ; +atomic64_set ((atomic64_t *)ring->wptr_cpu_addr,0 );amdgpu_ring_clear_ring (ring);#ifdef BRING_UP_DEBUG mutex_lock (&adev->srbm_mutex);
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +1 -1
@@ -3716,7 +3716,7 @@ static int gfx_v11_0_gfx_init_queue(struct amdgpu_ring *ring)memcpy (mqd, adev->gfx.me.mqd_backup[mqd_idx],sizeof (*mqd));/* reset the ring */ ring->wptr =0 ; - *ring->wptr_cpu_addr =0 ; +atomic64_set ((atomic64_t *)ring->wptr_cpu_addr,0 );amdgpu_ring_clear_ring (ring);#ifdef BRING_UP_DEBUG mutex_lock (&adev->srbm_mutex);
drivers/gpu/drm/amd/amdgpu/soc21.c +7 -1
@@ -202,7 +202,13 @@ static u32 soc21_get_config_memsize(struct amdgpu_device *adev)static u32 soc21_get_xclk (struct amdgpu_device *adev) { -return adev->clock.spll.reference_freq; +u32 reference_clock = adev->clock.spll.reference_freq; + +/* reference clock is actually 99.81 Mhz rather than 100 Mhz */ +if ((adev->flags &AMD_IS_APU ) && reference_clock ==10000 ) +return 9981 ; + +return reference_clock; }
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +10 -8
@@ -2257,6 +2257,14 @@ static int allocate_hiq_sdma_mqd(struct device_queue_manager *dqm)return retval; } +static void deallocate_hiq_sdma_mqd (struct kfd_dev *dev, +struct kfd_mem_obj *mqd) +{ +WARN (!mqd,"No hiq sdma mqd trunk to free" ); + +amdgpu_amdkfd_free_gtt_mem (dev->adev, &mqd->gtt_mem); +} +struct device_queue_manager *device_queue_manager_init (struct kfd_dev *dev) {struct device_queue_manager *dqm;
@@ -2382,19 +2390,13 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev)if (!dqm->ops.initialize (dqm))return dqm; +deallocate_hiq_sdma_mqd (dev, &dqm->hiq_sdma_mqd); + out_free:kfree (dqm);return NULL ; } -static void deallocate_hiq_sdma_mqd (struct kfd_dev *dev, -struct kfd_mem_obj *mqd) -{ -WARN (!mqd,"No hiq sdma mqd trunk to free" ); - -amdgpu_amdkfd_free_gtt_mem (dev->adev, &mqd->gtt_mem); -} -void device_queue_manager_uninit (struct device_queue_manager *dqm) { dqm->ops.uninitialize (dqm);
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +2 -1
@@ -1233,7 +1233,8 @@ void dce110_blank_stream(struct pipe_ctx *pipe_ctx)struct dce_hwseq *hws = link->dc->hwseq;if (link->local_sink && link->local_sink->sink_signal ==SIGNAL_TYPE_EDP ) { - hws->funcs.edp_backlight_control (link, false); +if (hws) + hws->funcs.edp_backlight_control (link, false); link->dc->hwss.set_abm_immediate_disable (pipe_ctx); }
drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c +12 -11
@@ -2257,8 +2257,6 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,if (scaling_factor ==0 )return -EINVAL ; -memset (smc_table,0 ,sizeof (SISLANDS_SMC_STATETABLE )); - ret = si_calculate_adjusted_tdp_limits(adev, false, /* ??? */ adev->pm.dpm.tdp_adjustment,
@@ -2267,6 +2265,12 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,if (ret)return ret; +if (adev->pdev->device ==0x6611 && adev->pdev->revision ==0x87 ) { +/* Workaround buggy powertune on Radeon 430 and 520. */ + tdp_limit =32 ; + near_tdp_limit =28 ; + } + smc_table->dpm2Params.TDPLimit =cpu_to_be32 (si_scale_power_for_smc (tdp_limit, scaling_factor) *1000 ); smc_table->dpm2Params.NearTDPLimit =
@@ -2312,16 +2316,8 @@ static int si_populate_smc_tdp_limits_2(struct amdgpu_device *adev,if (ni_pi->enable_power_containment) {SISLANDS_SMC_STATETABLE *smc_table = &si_pi->smc_statetable; -u32 scaling_factor =si_get_smc_power_scaling_factor (adev);int ret; -memset (smc_table,0 ,sizeof (SISLANDS_SMC_STATETABLE )); - - smc_table->dpm2Params.NearTDPLimit = -cpu_to_be32 (si_scale_power_for_smc (adev->pm.dpm.near_tdp_limit_adjusted, scaling_factor) *1000 ); - smc_table->dpm2Params.SafePowerLimit = -cpu_to_be32 (si_scale_power_for_smc ((adev->pm.dpm.near_tdp_limit_adjusted *SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT ) /100 , scaling_factor) *1000 ); - ret = amdgpu_si_copy_bytes_to_smc(adev, (si_pi->state_table_start + offsetof(SISLANDS_SMC_STATETABLE, dpm2Params) +
@@ -3458,10 +3454,15 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev, (adev->pdev->revision ==0x80 ) || (adev->pdev->revision ==0x81 ) || (adev->pdev->revision ==0x83 ) || - (adev->pdev->revision == 0x87) || + (adev->pdev->revision ==0x87 && + adev->pdev->device !=0x6611 ) || (adev->pdev->device ==0x6604 ) || (adev->pdev->device == 0x6605)) { max_sclk = 75000; + }else if (adev->pdev->revision ==0x87 && + adev->pdev->device ==0x6611 ) { +/* Radeon 430 and 520 */ + max_sclk =78000 ; } }
drivers/gpu/drm/imx/imx-tve.c +13 -0
@@ -522,6 +522,13 @@ static const struct component_ops imx_tve_ops = { .bind = imx_tve_bind, }; +static void imx_tve_put_device (void *_dev) +{ +struct device *dev = _dev; + +put_device (dev); +} +static int imx_tve_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;
@@ -543,6 +550,12 @@ static int imx_tve_probe(struct platform_device *pdev)if (ddc_node) { tve->ddc =of_find_i2c_adapter_by_node (ddc_node);of_node_put (ddc_node); +if (tve->ddc) { + ret =devm_add_action_or_reset (dev, imx_tve_put_device, + &tve->ddc->dev); +if (ret) +return ret; + } } tve->mode =of_get_tve_mode (np);
drivers/gpu/drm/nouveau/dispnv50/curs507a.c +1 -0
@@ -83,6 +83,7 @@ curs507a_prepare(struct nv50_wndw *wndw, struct nv50_head_atom *asyh, asyh->curs.handle = handle; asyh->curs.offset = offset; asyh->set.curs = asyh->curs.visible; +nv50_atom (asyh->state.state)->lock_core = true; } }
drivers/gpu/drm/panel/panel-simple.c +1 -0
@@ -1518,6 +1518,7 @@ static const struct panel_desc dataimage_scf0700c48ggu18 = { }, .bus_format = MEDIA_BUS_FMT_RGB888_1X24, .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE, + .connector_type = DRM_MODE_CONNECTOR_DPI, };static const struct display_timing dlc_dlc0700yzg_1_timing = {
drivers/gpu/drm/radeon/radeon_fence.c +0 -8
@@ -362,14 +362,6 @@ static bool radeon_fence_is_signaled(struct dma_fence *f)return true; } -if (down_read_trylock (&rdev->exclusive_lock)) { -radeon_fence_process (rdev, ring); -up_read (&rdev->exclusive_lock); - -if (atomic64_read (&rdev->fence_drv[ring].last_seq) >= seq) { -return true; - } - }return false; }
drivers/gpu/drm/vmwgfx/vmwgfx_shader.c +3 -1
@@ -917,8 +917,10 @@ int vmw_compat_shader_add(struct vmw_private *dev_priv,ttm_bo_unreserve (&buf->base); res =vmw_shader_alloc (dev_priv, buf, size,0 , shader_type); -if (unlikely (ret !=0 )) +if (IS_ERR (res)) { + ret =PTR_ERR (res); goto no_reserve; + } ret = vmw_cmdbuf_res_add(man, vmw_cmdbuf_res_shader, vmw_shader_key(user_key, shader_type),
drivers/gpu/drm/xen/xen_drm_front.c +1 -2
@@ -717,7 +717,7 @@ static int xen_drv_probe(struct xenbus_device *xb_dev,return xenbus_switch_state (xb_dev, XenbusStateInitialising); } -static int xen_drv_remove (struct xenbus_device *dev) +static void xen_drv_remove (struct xenbus_device *dev) {struct xen_drm_front_info *front_info =dev_get_drvdata (&dev->dev);int to =100 ;
@@ -751,7 +751,6 @@ static int xen_drv_remove(struct xenbus_device *dev)xen_drm_drv_fini (front_info);xenbus_frontend_closed (dev); -return 0 ; }static const struct xenbus_device_id xen_driver_ids[] = {
drivers/hid/usbhid/hid-core.c +16 -1
@@ -983,6 +983,7 @@ static int usbhid_parse(struct hid_device *hid)struct usb_device *dev =interface_to_usbdev (intf);struct hid_descriptor *hdesc;struct hid_class_descriptor *hcdesc; +__u8 fixed_opt_descriptors_size;u32 quirks =0 ;unsigned int rsize =0 ;char *rdesc;
@@ -1013,7 +1014,21 @@ static int usbhid_parse(struct hid_device *hid) (hdesc->bNumDescriptors - 1) * sizeof(*hcdesc)) {dbg_hid ("hid descriptor invalid, bLen=%hhu bNum=%hhu\n" , hdesc->bLength, hdesc->bNumDescriptors); -return -EINVAL ; + +/* +* Some devices may expose a wrong number of descriptors compared +* to the provided length. +* However, we ignore the optional hid class descriptors entirely +* so we can safely recompute the proper field. +*/ +if (hdesc->bLength >=sizeof (*hdesc)) { + fixed_opt_descriptors_size = hdesc->bLength -sizeof (*hdesc); + +hid_warn (intf,"fixing wrong optional hid class descriptors count\n" ); + hdesc->bNumDescriptors = fixed_opt_descriptors_size /sizeof (*hcdesc) +1 ; + }else { +return -EINVAL ; + } } hid->version =le16_to_cpu (hdesc->bcdHID);
drivers/hwtracing/intel_th/core.c +16 -3
@@ -810,9 +810,12 @@ static int intel_th_output_open(struct inode *inode, struct file *file)int err; dev =bus_find_device_by_devt (&intel_th_bus, inode->i_rdev); -if (!dev || !dev->driver) { +if (!dev) +return -ENODEV ; + +if (!dev->driver) { err = -ENODEV ; - goto out_no_device; + goto out_put_device; } thdrv =to_intel_th_driver (dev->driver);
@@ -836,12 +839,22 @@ static int intel_th_output_open(struct inode *inode, struct file *file) out_put_device:put_device (dev); -out_no_device: +return err; } +static int intel_th_output_release (struct inode *inode,struct file *file) +{ +struct intel_th_device *thdev = file->private_data; + +put_device (&thdev->dev); + +return 0 ; +} +static const struct file_operations intel_th_output_fops = { .open = intel_th_output_open, + .release = intel_th_output_release, .llseek = noop_llseek, };
drivers/iio/adc/ad7280a.c +3 -1
@@ -1028,7 +1028,9 @@ static int ad7280_probe(struct spi_device *spi) st->spi->max_speed_hz =AD7280A_MAX_SPI_CLK_HZ ; st->spi->mode =SPI_MODE_1 ; -spi_setup (st->spi); + ret =spi_setup (st->spi); +if (ret <0 ) +return ret; st->ctrl_lb =FIELD_PREP (AD7280A_CTRL_LB_ACQ_TIME_MSK , st->acquisition_time) |FIELD_PREP (AD7280A_CTRL_LB_THERMISTOR_MSK , st->thermistor_term_en);
drivers/iio/adc/ad9467.c +1 -1
@@ -90,7 +90,7 @@#define CHIPID_AD9434 0x6A#define AD9434_DEF_OUTPUT_MODE 0x00 -#define AD9434_REG_VREF_MASK 0xC0 +#define AD9434_REG_VREF_MASK GENMASK(4, 0)/* * Analog Devices AD9467 16-Bit, 200/250 MSPS ADC
drivers/iio/adc/at91-sama5d2_adc.c +1 -0
@@ -2521,6 +2521,7 @@ static int at91_adc_remove(struct platform_device *pdev)struct at91_adc_state *st =iio_priv (indio_dev);iio_device_unregister (indio_dev); +cancel_work_sync (&st->touch_st.workq);at91_adc_dma_disable (st);
drivers/iio/adc/exynos_adc.c +2 -11
@@ -721,14 +721,7 @@ static const struct iio_chan_spec exynos_adc_iio_channels[] = { ADC_CHANNEL(9, "adc9"), }; -static int exynos_adc_remove_devices (struct device *dev,void *c) -{ -struct platform_device *pdev =to_platform_device (dev); - -platform_device_unregister (pdev); -return 0 ; -}static int exynos_adc_ts_open (struct input_dev *dev) {
@@ -929,8 +922,7 @@ static int exynos_adc_probe(struct platform_device *pdev)return 0 ; err_of_populate: -device_for_each_child (&indio_dev->dev,NULL , - exynos_adc_remove_devices); +of_platform_depopulate (&indio_dev->dev);if (has_ts) {input_unregister_device (info->input);free_irq (info->tsirq, info);
@@ -959,8 +951,7 @@ static int exynos_adc_remove(struct platform_device *pdev)free_irq (info->tsirq, info);input_unregister_device (info->input); } -device_for_each_child (&indio_dev->dev,NULL , - exynos_adc_remove_devices); +of_platform_depopulate (&indio_dev->dev);iio_device_unregister (indio_dev);free_irq (info->irq, info);if (info->data->exit_hw)
drivers/iio/chemical/scd4x.c +3 -3
@@ -518,7 +518,7 @@ static const struct iio_chan_spec scd4x_channels[] = { .sign = 'u', .realbits = 16, .storagebits = 16, - .endianness = IIO_BE, + .endianness = IIO_CPU, }, }, {
@@ -533,7 +533,7 @@ static const struct iio_chan_spec scd4x_channels[] = { .sign = 'u', .realbits = 16, .storagebits = 16, - .endianness = IIO_BE, + .endianness = IIO_CPU, }, }, {
@@ -546,7 +546,7 @@ static const struct iio_chan_spec scd4x_channels[] = { .sign = 'u', .realbits = 16, .storagebits = 16, - .endianness = IIO_BE, + .endianness = IIO_CPU, }, }, };
drivers/iio/dac/ad5686.c +6 -0
@@ -427,6 +427,12 @@ static const struct ad5686_chip_info ad5686_chip_info_tbl[] = { .num_channels = 4, .regmap_type = AD5686_REGMAP, }, + [ID_AD5695R] = { + .channels = ad5685r_channels, + .int_vref_mv = 2500, + .num_channels = 4, + .regmap_type = AD5686_REGMAP, + }, [ID_AD5696] = { .channels = ad5686_channels, .num_channels = 4,
drivers/input/misc/xen-kbdfront.c +2 -3
@@ -51,7 +51,7 @@ module_param_array(ptr_size, int, NULL, 0444);MODULE_PARM_DESC (ptr_size,"Pointing device width, height in pixels (default 800,600)" ); -static int xenkbd_remove (struct xenbus_device *); +static void xenkbd_remove (struct xenbus_device *);static int xenkbd_connect_backend (struct xenbus_device *,struct xenkbd_info *);static void xenkbd_disconnect_backend (struct xenkbd_info *);
@@ -404,7 +404,7 @@ static int xenkbd_resume(struct xenbus_device *dev)return xenkbd_connect_backend (dev, info); } -static int xenkbd_remove (struct xenbus_device *dev) +static void xenkbd_remove (struct xenbus_device *dev) {struct xenkbd_info *info =dev_get_drvdata (&dev->dev);
@@ -417,7 +417,6 @@ static int xenkbd_remove(struct xenbus_device *dev)input_unregister_device (info->mtouch);free_page ((unsigned long )info->page);kfree (info); -return 0 ; } static int xenkbd_connect_backend(struct xenbus_device *dev,
drivers/input/serio/i8042-acpipnpio.h +18 -0
@@ -115,6 +115,17 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { }, .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER) }, + { +/* +* ASUS Zenbook UX425QA_UM425QA +* Some Zenbooks report "Zenbook" with a lowercase b. +*/ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_PRODUCT_NAME, "Zenbook UX425QA_UM425QA"), + }, + .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER |SERIO_QUIRK_RESET_NEVER ) + }, {/* ASUS ZenBook UX425UA/QA */ .matches = {
@@ -1176,6 +1187,13 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) }, + { + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "WUJIE Series-X5SP4NAG"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | + SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) + }, /* * A lot of modern Clevo barebones have touchpad and/or keyboard issues * after suspend fixable with the forcenorestore quirk.
drivers/irqchip/irq-gic-v3-its.c +4 -4
@@ -613,7 +613,7 @@ static struct its_collection *its_build_mapd_cmd(struct its_node *its,struct its_cmd_block *cmd, struct its_cmd_desc *desc) { - unsigned long itt_addr; + phys_addr_t itt_addr;u8 size =ilog2 (desc->its_mapd_cmd.dev->nr_ites); itt_addr =virt_to_phys (desc->its_mapd_cmd.dev->itt);
@@ -784,7 +784,7 @@ static struct its_vpe *its_build_vmapp_cmd(struct its_node *its, struct its_cmd_desc *desc) {struct its_vpe *vpe =valid_vpe (its, desc->its_vmapp_cmd.vpe); -unsigned long vpt_addr, vconf_addr; +phys_addr_t vpt_addr, vconf_addr;u64 target;bool alloc;
@@ -2399,10 +2399,10 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, baser->psz = psz; tmp = indirect ?GITS_LVL1_ENTRY_SIZE : esz; -pr_info ("ITS@%pa: allocated %d %s @%lx (%s, esz %d, psz %dK, shr %d)\n" , +pr_info ("ITS@%pa: allocated %d %s @%llx (%s, esz %d, psz %dK, shr %d)\n" , &its->phys_base, (int )(PAGE_ORDER_TO_SIZE (order) / (int )tmp), its_base_type_string[type], - (unsigned long )virt_to_phys (base), + (u64 )virt_to_phys (base), indirect ?"indirect" :"flat" , (int )esz, psz /SZ_1K , (int )shr >>GITS_BASER_SHAREABILITY_SHIFT );
drivers/isdn/mISDN/timerdev.c +8 -5
@@ -109,14 +109,14 @@ mISDN_read(struct file *filep, char __user *buf, size_t count, loff_t *off)spin_unlock_irq (&dev->lock);if (filep->f_flags &O_NONBLOCK )return -EAGAIN ; -wait_event_interruptible (dev->wait, (dev->work || +wait_event_interruptible (dev->wait, (READ_ONCE (dev->work) || !list_empty (list)));if (signal_pending (current))return -ERESTARTSYS ;spin_lock_irq (&dev->lock); }if (dev->work) - dev->work =0 ; +WRITE_ONCE (dev->work,0 );if (!list_empty (list)) { timer = list_first_entry(list, struct mISDNtimer, list);list_del (&timer->list);
@@ -141,13 +141,16 @@ mISDN_poll(struct file *filep, poll_table *wait)if (*debug &DEBUG_TIMER )printk (KERN_DEBUG "%s(%p, %p)\n" , __func__, filep, wait);if (dev) { +u32 work; +poll_wait (filep, &dev->wait, wait); mask =0 ; -if (dev->work || !list_empty (&dev->expired)) + work =READ_ONCE (dev->work); +if (work || !list_empty (&dev->expired)) mask |= (EPOLLIN |EPOLLRDNORM );if (*debug &DEBUG_TIMER )printk (KERN_DEBUG "%s work(%d) empty(%d)\n" , __func__, - dev->work,list_empty (&dev->expired)); + work,list_empty (&dev->expired)); }return mask; }
@@ -172,7 +175,7 @@ misdn_add_timer(struct mISDNtimerdev *dev, int timeout)struct mISDNtimer *timer;if (!timeout) { - dev->work =1 ; +WRITE_ONCE (dev->work,1 );wake_up_interruptible (&dev->wait); id =0 ; }else {
drivers/leds/led-class.c +5 -5
@@ -410,11 +410,6 @@ int led_classdev_register_ext(struct device *parent,#ifdef CONFIG_LEDS_BRIGHTNESS_HW_CHANGED led_cdev->brightness_hw_changed =-1 ;#endif -/* add to the list of leds */ -down_write (&leds_list_lock); -list_add_tail (&led_cdev->node, &leds_list); -up_write (&leds_list_lock); -if (!led_cdev->max_brightness) led_cdev->max_brightness =LED_FULL ;
@@ -422,6 +417,11 @@ int led_classdev_register_ext(struct device *parent,led_init_core (led_cdev); +/* add to the list of leds */ +down_write (&leds_list_lock); +list_add_tail (&led_cdev->node, &leds_list); +up_write (&leds_list_lock); +#ifdef CONFIG_LEDS_TRIGGERS led_trigger_set_default (led_cdev);#endif
drivers/misc/mei/mei-trace.h +9 -9
@@ -21,18 +21,18 @@ TRACE_EVENT(mei_reg_read, TP_ARGS(dev, reg, offs, val),TP_STRUCT__entry (__string (dev ,dev_name (dev )) - __field(const char *, reg) +__string (reg, reg)__field (u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] read %s:[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) ); TRACE_EVENT(mei_reg_write,
@@ -40,18 +40,18 @@ TRACE_EVENT(mei_reg_write, TP_ARGS(dev, reg, offs, val),TP_STRUCT__entry (__string (dev ,dev_name (dev )) - __field(const char *, reg) +__string (reg, reg)__field (u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] write %s[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) ); TRACE_EVENT(mei_pci_cfg_read,
@@ -59,18 +59,18 @@ TRACE_EVENT(mei_pci_cfg_read,TP_ARGS (dev, reg, offs, val),TP_STRUCT__entry ( __string(dev, dev_name(dev)) - __field(const char *, reg) + __string(reg, reg) __field(u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] pci cfg read %s:[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) );#endif /* _MEI_TRACE_H_ */
drivers/misc/uacce/uacce.c +34 -8
82 lines not on this page · raw message
drivers/mmc/host/rtsx_pci_sdmmc.c +41 -0
53 lines not on this page · raw message
drivers/mmc/host/sdhci-of-dwcmshc.c +16 -4
@@ -48,6 +48,7 @@#define DWCMSHC_EMMC_DLL_RXCLK_SRCSEL 29#define DWCMSHC_EMMC_DLL_START_POINT 16#define DWCMSHC_EMMC_DLL_INC 8 +#define DWCMSHC_EMMC_DLL_BYPASS BIT(24)#define DWCMSHC_EMMC_DLL_DLYENA BIT(27)#define DLL_TXCLK_TAPNUM_DEFAULT 0x10#define DLL_TXCLK_TAPNUM_90_DEGREES 0xA
@@ -60,6 +61,7 @@#define DLL_RXCLK_NO_INVERTER 1#define DLL_RXCLK_INVERTER 0#define DLL_CMDOUT_TAPNUM_90_DEGREES 0x8 +#define DLL_RXCLK_ORI_GATE BIT(31)#define DLL_CMDOUT_TAPNUM_FROM_SW BIT(24)#define DLL_CMDOUT_SRC_CLK_NEG BIT(28)#define DLL_CMDOUT_EN_SRC_CLK_NEG BIT(29)
@@ -234,9 +236,19 @@ static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clocksdhci_writel (host, extra, reg);if (clock <=52000000 ) { -/* Disable DLL and reset both of sample and drive clock */ -sdhci_writel (host,0 ,DWCMSHC_EMMC_DLL_CTRL ); -sdhci_writel (host,0 ,DWCMSHC_EMMC_DLL_RXCLK ); +if (host->mmc->ios.timing ==MMC_TIMING_MMC_HS200 || + host->mmc->ios.timing ==MMC_TIMING_MMC_HS400 ) { +dev_err (mmc_dev (host->mmc), +"Can't reduce the clock below 52MHz in HS200/HS400 mode" ); +return ; + } + +/* +* Disable DLL and reset both of sample and drive clock. +* The bypass bit and start bit need to be set if DLL is not locked. +*/ +sdhci_writel (host,DWCMSHC_EMMC_DLL_BYPASS |DWCMSHC_EMMC_DLL_START ,DWCMSHC_EMMC_DLL_CTRL ); +sdhci_writel (host,DLL_RXCLK_ORI_GATE ,DWCMSHC_EMMC_DLL_RXCLK );sdhci_writel (host,0 ,DWCMSHC_EMMC_DLL_TXCLK );sdhci_writel (host,0 ,DECMSHC_EMMC_DLL_CMDOUT );/*
@@ -279,7 +291,7 @@ static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock } extra =0x1 <<16 |/* tune clock stop en */ -0x2 <<17 |/* pre-change delay */ +0x3 <<17 |/* pre-change delay */ 0x3 <<19 ;/* post-change delay */ sdhci_writel (host, extra, dwc_priv->vendor_specific_area1 +DWCMSHC_EMMC_ATCTRL );
drivers/net/bonding/bond_main.c +19 -10
@@ -1906,6 +1906,12 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,*/ if (!bond_has_slaves (bond)) {if (bond_dev->type != slave_dev->type) { +if (slave_dev->type !=ARPHRD_ETHER && +BOND_MODE (bond) ==BOND_MODE_8023AD ) { +SLAVE_NL_ERR (bond_dev, slave_dev, extack, +"8023AD mode requires Ethernet devices" ); +return -EINVAL ; + }slave_dbg (bond_dev, slave_dev,"change device type from %d to %d\n" , bond_dev->type, slave_dev->type);
@@ -3076,8 +3082,8 @@ static void bond_validate_arp(struct bonding *bond, struct slave *slave, __be32 __func__, &sip);return ; } - slave->last_rx = jiffies; - slave->target_last_arp_rx[i] = jiffies; +WRITE_ONCE (slave->last_rx, jiffies); +WRITE_ONCE (slave->target_last_arp_rx[i], jiffies); } static int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond,
@@ -3296,8 +3302,8 @@ static void bond_validate_na(struct bonding *bond, struct slave *slave, __func__, saddr);return ; } - slave->last_rx = jiffies; - slave->target_last_arp_rx[i] = jiffies; +WRITE_ONCE (slave->last_rx, jiffies); +WRITE_ONCE (slave->target_last_arp_rx[i], jiffies); } static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond,
@@ -3367,7 +3373,7 @@ int bond_rcv_validate(const struct sk_buff *skb, struct bonding *bond, (slave_do_arp_validate_only(bond) && is_ipv6) || #endif !slave_do_arp_validate_only(bond)) - slave->last_rx = jiffies; +WRITE_ONCE (slave->last_rx, jiffies); return RX_HANDLER_ANOTHER; }else if (is_arp) {return bond_arp_rcv (skb, bond, slave);
@@ -3435,7 +3441,7 @@ static void bond_loadbalance_arp_mon(struct bonding *bond)if (slave->link !=BOND_LINK_UP ) {if (bond_time_in_interval (bond, last_tx,1 ) && -bond_time_in_interval (bond, slave->last_rx,1 )) { +bond_time_in_interval (bond,READ_ONCE (slave->last_rx),1 )) {bond_propose_link_state (slave,BOND_LINK_UP ); slave_state_changed =1 ;
@@ -3459,8 +3465,10 @@ static void bond_loadbalance_arp_mon(struct bonding *bond)* when the source ip is 0, so don't take the link down * if we don't know our ip yet */ -if (!bond_time_in_interval (bond, last_tx, bond->params.missed_max) || - !bond_time_in_interval (bond, slave->last_rx, bond->params.missed_max)) { +if (!bond_time_in_interval (bond, last_tx, + bond->params.missed_max) || + !bond_time_in_interval (bond,READ_ONCE (slave->last_rx), + bond->params.missed_max)) {bond_propose_link_state (slave,BOND_LINK_DOWN ); slave_state_changed =1 ;
@@ -4122,8 +4130,9 @@ static bool bond_flow_dissect(struct bonding *bond, struct sk_buff *skb, const vcase BOND_XMIT_POLICY_ENCAP23 :case BOND_XMIT_POLICY_ENCAP34 :memset (fk,0 ,sizeof (*fk)); -return __skb_flow_dissect (NULL , skb, &flow_keys_bonding, - fk, data, l2_proto, nhoff, hlen,0 ); +return __skb_flow_dissect (dev_net (bond->dev), skb, + &flow_keys_bonding, fk, data, + l2_proto, nhoff, hlen,0 );default :break ; }
drivers/net/bonding/bond_options.c +4 -4
@@ -1133,7 +1133,7 @@ static void _bond_options_arp_ip_target_set(struct bonding *bond, int slot,if (slot >=0 && slot <BOND_MAX_ARP_TARGETS ) {bond_for_each_slave (bond, slave, iter) - slave->target_last_arp_rx[slot] = last_rx; +WRITE_ONCE (slave->target_last_arp_rx[slot], last_rx); targets[slot] = target; } }
@@ -1202,8 +1202,8 @@ static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)bond_for_each_slave (bond, slave, iter) { targets_rx = slave->target_last_arp_rx;for (i = ind; (i <BOND_MAX_ARP_TARGETS -1 ) && targets[i+1 ]; i++) - targets_rx[i] = targets_rx[i+1 ]; - targets_rx[i] =0 ; +WRITE_ONCE (targets_rx[i],READ_ONCE (targets_rx[i+1 ])); +WRITE_ONCE (targets_rx[i],0 ); }for (i = ind; (i <BOND_MAX_ARP_TARGETS -1 ) && targets[i+1 ]; i++) targets[i] = targets[i+1 ];
@@ -1358,7 +1358,7 @@ static void _bond_options_ns_ip6_target_set(struct bonding *bond, int slot,if (slot >=0 && slot <BOND_MAX_NS_TARGETS ) {bond_for_each_slave (bond, slave, iter) { - slave->target_last_arp_rx[slot] = last_rx; +WRITE_ONCE (slave->target_last_arp_rx[slot], last_rx);slave_set_ns_maddr (bond, slave, target, &targets[slot]); } targets[slot] = *target;
drivers/net/can/ctucanfd/ctucanfd_base.c +1 -1
@@ -310,7 +310,7 @@ static int ctucan_set_secondary_sample_point(struct net_device *ndev) } ssp_cfg =FIELD_PREP (REG_TRV_DELAY_SSP_OFFSET , ssp_offset); - ssp_cfg |=FIELD_PREP (REG_TRV_DELAY_SSP_SRC ,0x1 ); + ssp_cfg |=FIELD_PREP (REG_TRV_DELAY_SSP_SRC ,0x0 ); }ctucan_write32 (priv,CTUCANFD_TRV_DELAY , ssp_cfg);
drivers/net/can/usb/ems_usb.c +7 -1
@@ -486,11 +486,17 @@ static void ems_usb_read_bulk_callback(struct urb *urb) urb->transfer_buffer,RX_BUFFER_SIZE , ems_usb_read_bulk_callback, dev); +usb_anchor_urb (urb, &dev->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb);if (retval == -ENODEV )netif_device_detach (netdev); -else if (retval) +else netdev_err (netdev,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/can/usb/esd_usb.c +8 -1
@@ -447,13 +447,20 @@ static void esd_usb_read_bulk_callback(struct urb *urb) urb->transfer_buffer,RX_BUFFER_SIZE , esd_usb_read_bulk_callback, dev); +usb_anchor_urb (urb, &dev->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb); +if (retval == -ENODEV ) {for (i =0 ; i < dev->net_count; i++) {if (dev->nets[i])netif_device_detach (dev->nets[i]->netdev); } - }else if (retval) { + }else {dev_err (dev->udev->dev.parent,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/can/usb/etas_es58x/es58x_core.c +1 -1
@@ -1735,7 +1735,7 @@ static int es58x_alloc_rx_urbs(struct es58x_device *es58x_dev)dev_dbg (dev,"%s: Allocated %d rx URBs each of size %u\n" , __func__, i, rx_buf_len); -return ret; +return 0 ; }/**
drivers/net/can/usb/gs_usb.c +10 -1
@@ -526,7 +526,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) {struct gs_usb *parent = urb->context;struct gs_can *dev; -struct net_device *netdev; +struct net_device *netdev =NULL ;int rc;struct net_device_stats *stats;struct gs_host_frame *hf = urb->transfer_buffer;
@@ -657,7 +657,13 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) hf, parent->hf_size_rx, gs_usb_receive_bulk_callback, parent); +usb_anchor_urb (urb, &parent->rx_submitted); + rc =usb_submit_urb (urb,GFP_ATOMIC ); +if (!rc) +return ; + +usb_unanchor_urb (urb);/* USB failure take down all interfaces */ if (rc == -ENODEV ) {
@@ -666,6 +672,9 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)if (parent->canch[rc])netif_device_detach (parent->canch[rc]->netdev); } + }else if (rc != -ESHUTDOWN &&net_ratelimit ()) { +netdev_info (netdev,"failed to re-submit IN URB: %pe\n" , +ERR_PTR (rc)); } }
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +8 -1
@@ -349,7 +349,14 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) urb->transfer_buffer,KVASER_USB_RX_BUFFER_SIZE , kvaser_usb_read_bulk_callback, dev); +usb_anchor_urb (urb, &dev->rx_submitted); + err =usb_submit_urb (urb,GFP_ATOMIC ); +if (!err) +return ; + +usb_unanchor_urb (urb); +if (err == -ENODEV ) {for (i =0 ; i < dev->nchannels; i++) {if (!dev->nets[i])
@@ -357,7 +364,7 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb)netif_device_detach (dev->nets[i]->netdev); } - }else if (err) { + }else {dev_err (&dev->intf->dev,"Failed resubmitting read bulk urb: %d\n" , err); }
drivers/net/can/usb/mcba_usb.c +7 -1
@@ -608,11 +608,17 @@ static void mcba_usb_read_bulk_callback(struct urb *urb) urb->transfer_buffer,MCBA_USB_RX_BUFF_SIZE , mcba_usb_read_bulk_callback, priv); +usb_anchor_urb (urb, &priv->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb);if (retval == -ENODEV )netif_device_detach (netdev); -else if (retval) +else netdev_err (netdev,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/can/usb/usb_8dev.c +7 -1
@@ -541,11 +541,17 @@ static void usb_8dev_read_bulk_callback(struct urb *urb) urb->transfer_buffer,RX_BUFFER_SIZE , usb_8dev_read_bulk_callback, priv); +usb_anchor_urb (urb, &priv->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb);if (retval == -ENODEV )netif_device_detach (netdev); -else if (retval) +else netdev_err (netdev,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +1 -4
@@ -2105,7 +2105,7 @@ static void xgbe_get_stats64(struct net_device *netdev, s->multicast = pstats->rxmulticastframes_g; s->rx_length_errors = pstats->rxlengtherror; s->rx_crc_errors = pstats->rxcrcerror; - s->rx_fifo_errors = pstats->rxfifooverflow; + s->rx_over_errors = pstats->rxfifooverflow; s->tx_packets = pstats->txframecount_gb; s->tx_bytes = pstats->txoctetcount_gb;
@@ -2559,9 +2559,6 @@ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget) goto read_again;if (error || packet->errors) { -if (packet->errors) -netif_err (pdata, rx_err, netdev, -"error in received packet\n" );dev_kfree_skb (skb); goto next_packet; }
drivers/net/ethernet/emulex/benet/be_cmds.c +2 -1
@@ -3796,6 +3796,7 @@ int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) {int status;bool pmac_valid = false; +u32 pmac_id;eth_zero_addr (mac);
@@ -3808,7 +3809,7 @@ int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) adapter->if_handle, 0); }else { status =be_cmd_get_mac_from_list (adapter, mac, &pmac_valid, -NULL , adapter->if_handle,0 ); + &pmac_id, adapter->if_handle,0 ); }return status;
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +1 -1
@@ -731,7 +731,7 @@ struct hclge_fd_tcam_config_3_cmd {#define HCLGE_FD_AD_QID_M GENMASK(11, 2)#define HCLGE_FD_AD_USE_COUNTER_B 12#define HCLGE_FD_AD_COUNTER_NUM_S 13 -#define HCLGE_FD_AD_COUNTER_NUM_M GENMASK(20, 13) +#define HCLGE_FD_AD_COUNTER_NUM_M GENMASK(19, 13)#define HCLGE_FD_AD_NXT_STEP_B 20#define HCLGE_FD_AD_NXT_KEY_S 21#define HCLGE_FD_AD_NXT_KEY_M GENMASK(25, 21)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +1 -1
@@ -5717,7 +5717,7 @@ static int hclge_fd_ad_config(struct hclge_dev *hdev, u8 stage, int loc, HCLGE_FD_AD_COUNTER_NUM_S, action->counter_id);hnae3_set_bit (ad_data,HCLGE_FD_AD_NXT_STEP_B , action->use_next_stage);hnae3_set_field (ad_data,HCLGE_FD_AD_NXT_KEY_M ,HCLGE_FD_AD_NXT_KEY_S , - action->counter_id); + action->next_input_key); req->ad_data =cpu_to_le64 (ad_data); ret =hclge_cmd_send (&hdev->hw, &desc,1 );
drivers/net/ethernet/intel/ice/ice_main.c +0 -1
@@ -6546,7 +6546,6 @@ void ice_update_vsi_stats(struct ice_vsi *vsi) pf->stats.illegal_bytes + pf->stats.rx_len_errors + pf->stats.rx_undersize + - pf->hw_csum_rx_error + pf->stats.rx_jabber + pf->stats.rx_fragments + pf->stats.rx_oversize;
drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +1 -1
@@ -1389,7 +1389,7 @@ int mvpp2_ethtool_cls_rule_ins(struct mvpp2_port *port, efs->rule.flow_type =mvpp2_cls_ethtool_flow_to_type (info->fs.flow_type);if (efs->rule.flow_type <0 ) { ret = efs->rule.flow_type; - goto clean_rule; + goto clean_eth_rule; } ret =mvpp2_cls_rfs_parse_rule (&efs->rule);
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +64 -22
154 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c +1 -1
@@ -265,7 +265,7 @@ static int cn10k_mcs_write_rx_flowid(struct otx2_nic *pfvf, req->data[0 ] =FIELD_PREP (MCS_TCAM0_MAC_DA_MASK , mac_da); req->mask[0 ] = ~0ULL ; - req->mask[0 ] = ~MCS_TCAM0_MAC_DA_MASK ; + req->mask[0 ] &= ~MCS_TCAM0_MAC_DA_MASK ; req->data[1 ] =FIELD_PREP (MCS_TCAM1_ETYPE_MASK ,ETH_P_MACSEC ); req->mask[1 ] = ~0ULL ;
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h +1 -6
@@ -864,13 +864,8 @@ static inline dma_addr_t otx2_dma_map_page(struct otx2_nic *pfvf, size_t offset, size_t size, enum dma_data_direction dir) { - dma_addr_t iova; - - iova =dma_map_page_attrs (pfvf->dev, page, + return dma_map_page_attrs(pfvf->dev, page,offset ,size ,dir ,DMA_ATTR_SKIP_CPU_SYNC ); -if (unlikely (dma_mapping_error (pfvf->dev, iova))) -return (dma_addr_t )NULL ; -return iova; } static inline void otx2_dma_unmap_page(struct otx2_nic *pfvf,
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +14 -8
@@ -3650,6 +3650,8 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)mlx5e_queue_update_stats (priv); } +netdev_stats_to_stats64 (stats, &dev->stats); +if (mlx5e_is_uplink_rep (priv)) {struct mlx5e_vport_stats *vstats = &priv->stats.vport;
@@ -3666,20 +3668,21 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)mlx5e_fold_sw_stats64 (priv, stats); } - stats->rx_missed_errors = priv->stats.qcnt.rx_out_of_buffer; + stats->rx_missed_errors += priv->stats.qcnt.rx_out_of_buffer; + stats->rx_dropped +=PPORT_2863_GET (pstats, if_in_discards); - stats->rx_length_errors = + stats->rx_length_errors +=PPORT_802_3_GET (pstats, a_in_range_length_errors) +PPORT_802_3_GET (pstats, a_out_of_range_length_field) +PPORT_802_3_GET (pstats, a_frame_too_long_errors) +VNIC_ENV_GET (&priv->stats.vnic, eth_wqe_too_small); - stats->rx_crc_errors = + stats->rx_crc_errors +=PPORT_802_3_GET (pstats, a_frame_check_sequence_errors); - stats->rx_frame_errors =PPORT_802_3_GET (pstats, a_alignment_errors); - stats->tx_aborted_errors =PPORT_2863_GET (pstats, if_out_discards); - stats->rx_errors = stats->rx_length_errors + stats->rx_crc_errors + - stats->rx_frame_errors; - stats->tx_errors = stats->tx_aborted_errors + stats->tx_carrier_errors; + stats->rx_frame_errors +=PPORT_802_3_GET (pstats, a_alignment_errors); + stats->tx_aborted_errors +=PPORT_2863_GET (pstats, if_out_discards); + stats->rx_errors += stats->rx_length_errors + stats->rx_crc_errors + + stats->rx_frame_errors; + stats->tx_errors += stats->tx_aborted_errors + stats->tx_carrier_errors; }static void mlx5e_nic_set_rx_mode (struct mlx5e_priv *priv)
@@ -5566,6 +5569,7 @@ int mlx5e_priv_init(struct mlx5e_priv *priv,void mlx5e_priv_cleanup (struct mlx5e_priv *priv) { +bool destroying =test_bit (MLX5E_STATE_DESTROYING , &priv->state);int i;/* bail if change profile failed and also rollback failed */
@@ -5591,6 +5595,8 @@ void mlx5e_priv_cleanup(struct mlx5e_priv *priv) }memset (priv,0 ,sizeof (*priv)); +if (destroying)/* restore destroying bit, to allow unload */ +set_bit (MLX5E_STATE_DESTROYING , &priv->state); } static unsigned int mlx5e_get_max_num_txqs(struct mlx5_core_dev *mdev,
drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c +1 -1
@@ -188,7 +188,7 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,if (IS_ERR (vport->ingress.acl)) { err =PTR_ERR (vport->ingress.acl); vport->ingress.acl =NULL ; -return err; + goto out; } err =esw_acl_ingress_lgcy_groups_create (esw, vport);
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +0 -19
@@ -3493,18 +3493,6 @@ static int esw_inline_mode_to_devlink(u8 mlx5_mode, u8 *mode)return 0 ; } -static bool esw_offloads_devlink_ns_eq_netdev_ns (struct devlink *devlink) -{ -struct net *devl_net, *netdev_net; -struct mlx5_eswitch *esw; - - esw =mlx5_devlink_eswitch_get (devlink); - netdev_net =dev_net (esw->dev->mlx5e_res.uplink_netdev); - devl_net =devlink_net (devlink); - -return net_eq (devl_net, netdev_net); -} -int mlx5_devlink_eswitch_mode_set (struct devlink *devlink,u16 mode,struct netlink_ext_ack *extack) {
@@ -3519,13 +3507,6 @@ int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,if (esw_mode_from_devlink (mode, &mlx5_mode))return -EINVAL ; -if (mode ==DEVLINK_ESWITCH_MODE_SWITCHDEV && - !esw_offloads_devlink_ns_eq_netdev_ns (devlink)) { -NL_SET_ERR_MSG_MOD (extack, -"Can't change E-Switch mode to switchdev when netdev net namespace has diverged from the devlink's." ); -return -EPERM ; - } -mlx5_lag_disable_change (esw->dev); err =mlx5_esw_try_lock (esw);if (err <0 ) {
drivers/net/ethernet/rocker/rocker_main.c +2 -3
@@ -1525,9 +1525,8 @@ static void rocker_world_port_post_fini(struct rocker_port *rocker_port) {struct rocker_world_ops *wops = rocker_port->rocker->wops; -if (!wops->port_post_fini) -return ; - wops->port_post_fini (rocker_port); +if (wops->port_post_fini) + wops->port_post_fini (rocker_port);kfree (rocker_port->wpriv); }
drivers/net/ethernet/stmicro/stmmac/dwmac5.c +5 -0
@@ -597,6 +597,11 @@ int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,int i, ret =0x0 ;u32 ctrl; +if (!ptp_rate) { +pr_warn ("Dwmac5: Invalid PTP rate" ); +return -EINVAL ; + } + ret |=dwmac5_est_write (ioaddr,BTR_LOW , cfg->btr[0 ], false); ret |=dwmac5_est_write (ioaddr,BTR_HIGH , cfg->btr[1 ], false); ret |=dwmac5_est_write (ioaddr,TER , cfg->ter, false);
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c +5 -0
@@ -1497,6 +1497,11 @@ static int dwxgmac3_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,int i, ret =0x0 ;u32 ctrl; +if (!ptp_rate) { +pr_warn ("Dwxgmac2: Invalid PTP rate" ); +return -EINVAL ; + } + ret |=dwxgmac3_est_write (ioaddr,XGMAC_BTR_LOW , cfg->btr[0 ], false); ret |=dwxgmac3_est_write (ioaddr,XGMAC_BTR_HIGH , cfg->btr[1 ], false); ret |=dwxgmac3_est_write (ioaddr,XGMAC_TER , cfg->ter, false);
drivers/net/hyperv/hyperv_net.h +4 -1
@@ -74,6 +74,7 @@ struct ndis_recv_scale_cap { /* NDIS_RECEIVE_SCALE_CAPABILITIES */#define NDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2 40#define ITAB_NUM 128 +#define ITAB_NUM_MAX 256struct ndis_recv_scale_param {/* NDIS_RECEIVE_SCALE_PARAMETERS */ struct ndis_obj_header hdr;
@@ -1045,7 +1046,9 @@ struct net_device_context {u32 tx_table[VRSS_SEND_TAB_SIZE ]; -u16 rx_table[ITAB_NUM ]; +u16 *rx_table; + +u32 rx_table_sz;/* Ethtool settings */ u8 duplex;
drivers/net/hyperv/netvsc_drv.c +9 -4
@@ -1717,7 +1717,9 @@ static u32 netvsc_get_rxfh_key_size(struct net_device *dev)static u32 netvsc_rss_indir_size (struct net_device *dev) { -return ITAB_NUM ; +struct net_device_context *ndc =netdev_priv (dev); + +return ndc->rx_table_sz; } static int netvsc_get_rxfh(struct net_device *dev, u32 *indir, u8 *key,
@@ -1736,7 +1738,7 @@ static int netvsc_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, rndis_dev = ndev->extension;if (indir) { -for (i =0 ; i <ITAB_NUM ; i++) +for (i =0 ; i < ndc->rx_table_sz; i++) indir[i] = ndc->rx_table[i]; }
@@ -1760,13 +1762,16 @@ static int netvsc_set_rxfh(struct net_device *dev, const u32 *indir,if (hfunc !=ETH_RSS_HASH_NO_CHANGE && hfunc !=ETH_RSS_HASH_TOP )return -EOPNOTSUPP ; +if (!ndc->rx_table_sz) +return -EOPNOTSUPP ; + rndis_dev = ndev->extension;if (indir) { -for (i =0 ; i <ITAB_NUM ; i++) +for (i =0 ; i < ndc->rx_table_sz; i++)if (indir[i] >= ndev->num_chn)return -EINVAL ; -for (i =0 ; i <ITAB_NUM ; i++) +for (i =0 ; i < ndc->rx_table_sz; i++) ndc->rx_table[i] = indir[i]; }
drivers/net/hyperv/rndis_filter.c +25 -4
@@ -21,6 +21,7 @@#include <linux/rtnetlink.h> #include <linux/ucs2_string.h> #include <linux/string.h> +#include <linux/slab.h> #include "hyperv_net.h" #include "netvsc_trace.h"
@@ -913,7 +914,7 @@ static int rndis_set_rss_param_msg(struct rndis_device *rdev,struct rndis_set_request *set;struct rndis_set_complete *set_complete;u32 extlen =sizeof (struct ndis_recv_scale_param ) + -4 *ITAB_NUM +NETVSC_HASH_KEYLEN ; +4 * ndc->rx_table_sz +NETVSC_HASH_KEYLEN ;struct ndis_recv_scale_param *rssp;u32 *itab;u8 *keyp;
@@ -939,7 +940,7 @@ static int rndis_set_rss_param_msg(struct rndis_device *rdev, rssp->hashinfo =NDIS_HASH_FUNC_TOEPLITZ |NDIS_HASH_IPV4 |NDIS_HASH_TCP_IPV4 |NDIS_HASH_IPV6 |NDIS_HASH_TCP_IPV6 ; - rssp->indirect_tabsize =4 *ITAB_NUM ; + rssp->indirect_tabsize =4 * ndc->rx_table_sz; rssp->indirect_taboffset =sizeof (struct ndis_recv_scale_param ); rssp->hashkey_size =NETVSC_HASH_KEYLEN ; rssp->hashkey_offset = rssp->indirect_taboffset +
@@ -947,7 +948,7 @@ static int rndis_set_rss_param_msg(struct rndis_device *rdev,/* Set indirection table entries */ itab = (u32 *)(rssp +1 ); -for (i =0 ; i <ITAB_NUM ; i++) +for (i =0 ; i < ndc->rx_table_sz; i++) itab[i] = ndc->rx_table[i];/* Set hask key values */
@@ -1534,6 +1535,18 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,if (ret || rsscap.num_recv_que <2 ) goto out; +if (rsscap.num_indirect_tabent && + rsscap.num_indirect_tabent <=ITAB_NUM_MAX ) + ndc->rx_table_sz = rsscap.num_indirect_tabent; +else + ndc->rx_table_sz =ITAB_NUM ; + + ndc->rx_table =kcalloc (ndc->rx_table_sz,sizeof (u16),GFP_KERNEL ); +if (!ndc->rx_table) { + ret = -ENOMEM ; + goto err_dev_remv; + } +/* This guarantees that num_possible_rss_qs <= num_online_cpus */ num_possible_rss_qs =min_t (u32,num_online_cpus (), rsscap.num_recv_que);
@@ -1544,7 +1557,7 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev, net_device->num_chn =min (net_device->max_chn, device_info->num_chn);if (!netif_is_rxfh_configured (net)) { -for (i =0 ; i <ITAB_NUM ; i++) +for (i =0 ; i < ndc->rx_table_sz; i++) ndc->rx_table[i] =ethtool_rxfh_indir_default ( i, net_device->num_chn); }
@@ -1582,11 +1595,19 @@ void rndis_filter_device_remove(struct hv_device *dev, struct netvsc_device *net_dev) {struct rndis_device *rndis_dev = net_dev->extension; +struct net_device *net =hv_get_drvdata (dev); +struct net_device_context *ndc; + + ndc =netdev_priv (net);/* Halt and release the rndis device */ rndis_filter_halt_device (net_dev, rndis_dev);netvsc_device_remove (dev); + + ndc->rx_table_sz =0 ; +kfree (ndc->rx_table); + ndc->rx_table =NULL ; }int rndis_filter_open (struct netvsc_device *nvdev)
drivers/net/ipvlan/ipvlan.h +1 -1
@@ -69,7 +69,6 @@ struct ipvl_dev {DECLARE_BITMAP (mac_filters,IPVLAN_MAC_FILTER_SIZE );netdev_features_t sfeatures;u32 msg_enable; -spinlock_t addrs_lock; };struct ipvl_addr {
@@ -90,6 +89,7 @@ struct ipvl_port {struct net_device *dev;possible_net_t pnet;struct hlist_head hlhead[IPVLAN_HASH_SIZE ]; +spinlock_t addrs_lock;/* guards hash-table and addrs */ struct list_head ipvlans;u16 mode;u16 flags;
drivers/net/ipvlan/ipvlan_core.c +7 -9
@@ -107,17 +107,15 @@ void ipvlan_ht_addr_del(struct ipvl_addr *addr)struct ipvl_addr *ipvlan_find_addr (const struct ipvl_dev *ipvlan,const void *iaddr,bool is_v6) { -struct ipvl_addr *addr, *ret =NULL ; +struct ipvl_addr *addr; -rcu_read_lock (); -list_for_each_entry_rcu (addr, &ipvlan->addrs, anode) { -if (addr_equal (is_v6, addr, iaddr)) { - ret = addr; -break ; - } +assert_spin_locked (&ipvlan->port->addrs_lock); +
Lines of this file are not shown. View the raw message.
drivers/net/ipvlan/ipvlan_main.c +29 -20
49 lines not on this page · raw message
drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c +3 -3
Lines of this file are not shown. View the raw message.
drivers/net/wireless/rsi/rsi_91x_mac80211.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c +7 -2
Lines of this file are not shown. View the raw message.
drivers/nvme/host/pci.c +41 -0
41 lines not on this page · raw message
drivers/phy/freescale/phy-fsl-imx8m-pcie.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/phy/rockchip/phy-rockchip-inno-usb2.c +23 -33
56 lines not on this page · raw message
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c +17 -0
Lines of this file are not shown. View the raw message.
drivers/spi/spi-sprd-adi.c +19 -48
67 lines not on this page · raw message
drivers/w1/slaves/w1_therm.c +20 -42
62 lines not on this page · raw message
fs/btrfs/block-group.c +38 -22
60 lines not on this page · raw message
fs/btrfs/ctree.h +0 -59
59 lines not on this page · raw message
fs/btrfs/space-info.c +62 -14
76 lines not on this page · raw message
fs/btrfs/space-info.h +69 -0
69 lines not on this page · raw message
fs/nfs/flexfilelayout/flexfilelayoutdev.c +1 -1
Lines of this file are not shown. View the raw message.
kernel/time/posix-clock.c +37 -16
53 lines not on this page · raw message
mm/mprotect.c +58 -43
101 lines not on this page · raw message
mm/page_alloc.c +42 -5
47 lines not on this page · raw message
net/ipv4/fou.c deleted +0 -1313
1,313 lines not on this page · raw message
net/ipv4/fou_core.c new file +1283 -0
1,283 lines not on this page · raw message
net/ipv4/fou_nl.c new file +48 -0
48 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +21 -9
Lines of this file are not shown. View the raw message.
sound/soc/codecs/wsa881x.c +43 -11
54 lines not on this page · raw message
tools/testing/selftests/ptp/testptp.c +179 -15
194 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.