Linux 6.3.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.3.10 kernel.
All users of the 6.3 kernel series must upgrade.
The updated 6.3.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.3.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/am57xx-cl-som-am57x.dts | 2 arch/arm/boot/dts/at91sam9261ek.dts | 2 arch/arm/boot/dts/imx7d-pico-hobbit.dts | 2 arch/arm/boot/dts/imx7d-sdb.dts | 2 arch/arm/boot/dts/omap3-cm-t3x.dtsi | 2 arch/arm/boot/dts/omap3-devkit8000-lcd-common.dtsi | 2 arch/arm/boot/dts/omap3-lilly-a83x.dtsi | 2 arch/arm/boot/dts/omap3-overo-common-lcd35.dtsi | 2 arch/arm/boot/dts/omap3-overo-common-lcd43.dtsi | 2 arch/arm/boot/dts/omap3-pandora-common.dtsi | 2 arch/arm/boot/dts/omap5-cm-t54.dts | 2 arch/arm64/boot/dts/qcom/sc7280-idp.dtsi | 2 arch/arm64/boot/dts/qcom/sc7280-qcard.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3566-soquartz-cm4.dts | 18 arch/arm64/boot/dts/rockchip/rk3566-soquartz.dtsi | 29 arch/arm64/boot/dts/rockchip/rk3568.dtsi | 14 arch/arm64/boot/dts/rockchip/rk356x.dtsi | 7 arch/arm64/include/asm/sysreg.h | 6 arch/arm64/kvm/hyp/include/hyp/switch.h | 13 arch/arm64/kvm/vgic/vgic-init.c | 11 arch/riscv/Makefile | 2 arch/s390/purgatory/Makefile | 1 arch/x86/Makefile | 12 arch/x86/include/asm/Kbuild | 1 arch/x86/include/asm/orc_header.h | 19 arch/x86/kernel/apic/x2apic_phys.c | 5 arch/x86/kernel/unwind_orc.c | 3 arch/x86/mm/kaslr.c | 8 arch/x86/net/bpf_jit_comp.c | 2 block/blk-cgroup.c | 5 drivers/acpi/acpica/achware.h | 2 drivers/acpi/sleep.c | 16 drivers/ata/libata-core.c | 3 drivers/ata/libata-eh.c | 2 drivers/ata/libata-scsi.c | 22 drivers/base/regmap/regmap-spi-avmm.c | 2 drivers/block/null_blk/main.c | 1 drivers/block/virtio_blk.c | 82 - drivers/char/tpm/tpm_tis_core.c | 2 drivers/dma-buf/udmabuf.c | 47 drivers/firmware/efi/efi.c | 21 drivers/gpio/gpio-sifive.c | 8 drivers/gpio/gpiolib.c | 11 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 73 - drivers/gpu/drm/exynos/exynos_drm_g2d.c | 2 drivers/gpu/drm/exynos/exynos_drm_vidi.c | 2 drivers/gpu/drm/radeon/radeon_gem.c | 4 drivers/hid/wacom_sys.c | 7 drivers/hv/channel_mgmt.c | 18 drivers/hv/vmbus_drv.c | 5 drivers/i2c/busses/i2c-designware-core.h | 1 drivers/i2c/busses/i2c-designware-slave.c | 4 drivers/i2c/busses/i2c-imx-lpi2c.c | 4 drivers/i2c/busses/i2c-mchp-pci1xxxx.c | 6 drivers/input/misc/soc_button_array.c | 30 drivers/iommu/amd/iommu.c | 8 drivers/media/cec/core/cec-adap.c | 8 drivers/media/cec/core/cec-core.c | 2 drivers/media/cec/core/cec-priv.h | 1 drivers/mmc/host/bcm2835.c | 4 drivers/mmc/host/litex_mmc.c | 1 drivers/mmc/host/meson-gx-mmc.c | 14 drivers/mmc/host/mmci.c | 3 drivers/mmc/host/mtk-sd.c | 2 drivers/mmc/host/mvsdio.c | 2 drivers/mmc/host/omap.c | 2 drivers/mmc/host/omap_hsmmc.c | 6 drivers/mmc/host/owl-mmc.c | 2 drivers/mmc/host/sdhci-acpi.c | 2 drivers/mmc/host/sdhci-msm.c | 3 drivers/mmc/host/sdhci-spear.c | 4 drivers/mmc/host/sh_mmcif.c | 2 drivers/mmc/host/sunxi-mmc.c | 4 drivers/mmc/host/usdhi6rol0.c | 6 drivers/net/dsa/mt7530.c | 35 drivers/net/dsa/mt7530.h | 5 drivers/net/ethernet/emulex/benet/be_main.c | 4 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c | 9 drivers/net/ethernet/qualcomm/qca_spi.c | 3 drivers/net/ethernet/sfc/ef10.c | 25 drivers/net/ethernet/sfc/ef100_nic.c | 7 drivers/net/ethernet/sfc/ef100_tx.c | 4 drivers/net/ethernet/sfc/ef100_tx.h | 2 drivers/net/ethernet/sfc/tx_common.c | 4 drivers/net/ethernet/sfc/tx_common.h | 2 drivers/net/ieee802154/mac802154_hwsim.c | 6 drivers/net/phy/dp83867.c | 2 drivers/net/phy/mdio_bus.c | 2 drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 2 drivers/nfc/nfcsim.c | 4 drivers/nvme/host/core.c | 52 drivers/nvme/host/ioctl.c | 2 drivers/nvme/host/nvme.h | 3 drivers/nvme/target/passthru.c | 2 drivers/pci/controller/pci-hyperv.c | 139 +- drivers/platform/x86/amd/pmf/core.c | 10 drivers/platform/x86/intel/int3472/clk_and_regulator.c | 13 drivers/s390/cio/device.c | 5 drivers/soundwire/dmi-quirks.c | 7 drivers/soundwire/qcom.c | 17 drivers/spi/spi-fsl-lpspi.c | 7 drivers/spi/spi-geni-qcom.c | 2 drivers/target/iscsi/iscsi_target.c | 2 drivers/target/iscsi/iscsi_target_login.c | 63 - drivers/target/iscsi/iscsi_target_nego.c | 74 - drivers/target/iscsi/iscsi_target_util.c | 51 drivers/target/iscsi/iscsi_target_util.h | 4 drivers/thermal/intel/intel_soc_dts_iosf.c | 2 drivers/usb/gadget/udc/amd5536udc_pci.c | 3 drivers/vhost/net.c | 11 drivers/vhost/vdpa.c | 13 fs/afs/write.c | 7 fs/btrfs/tree-log.c | 2 fs/cifs/connect.c | 9 fs/cifs/dfs.c | 9 fs/cifs/smb2pdu.c | 2 fs/gfs2/file.c | 17 fs/internal.h | 2 fs/ksmbd/server.c | 33 fs/ksmbd/smb2misc.c | 33 fs/ksmbd/smb2pdu.c | 223 +--- fs/ksmbd/smbacl.c | 10 fs/ksmbd/vfs.c | 557 +++++----- fs/ksmbd/vfs.h | 36 fs/ksmbd/vfs_cache.c | 7 fs/namei.c | 125 +- fs/nilfs2/page.c | 10 fs/nilfs2/segbuf.c | 6 fs/nilfs2/segment.c | 7 fs/nilfs2/super.c | 23 include/acpi/acpixf.h | 1 include/asm-generic/vmlinux.lds.h | 3 include/linux/gpio/driver.h | 8 include/linux/libata.h | 2 include/linux/namei.h | 9 include/linux/regulator/pca9450.h | 4 include/net/dsa.h | 8 include/net/netfilter/nf_tables.h | 31 include/net/xfrm.h | 1 include/target/iscsi/iscsi_target_core.h | 7 include/trace/events/writeback.h | 2 io_uring/net.c | 17 io_uring/poll.c | 9 kernel/bpf/btf.c | 20 kernel/bpf/syscall.c | 5 kernel/bpf/verifier.c | 10 kernel/cgroup/cgroup.c | 20 kernel/cgroup/legacy_freezer.c | 8 kernel/time/tick-common.c | 13 kernel/time/tick-sched.c | 13 mm/maccess.c | 16 mm/memfd.c | 9 mm/mprotect.c | 2 mm/usercopy.c | 2 mm/vmalloc.c | 17 net/core/sock.c | 6 net/dsa/dsa.c | 24 net/ipv4/esp4_offload.c | 3 net/ipv4/xfrm4_input.c | 1 net/ipv6/esp6_offload.c | 3 net/ipv6/xfrm6_input.c | 3 net/mptcp/pm_netlink.c | 1 net/mptcp/protocol.c | 111 + net/mptcp/subflow.c | 17 net/netfilter/ipvs/ip_vs_xmit.c | 2 net/netfilter/nf_tables_api.c | 330 ++++- net/netfilter/nfnetlink_osf.c | 1 net/netfilter/nft_immediate.c | 90 + net/netfilter/nft_set_bitmap.c | 5 net/netfilter/nft_set_hash.c | 23 net/netfilter/nft_set_pipapo.c | 20 net/netfilter/nft_set_rbtree.c | 5 net/netfilter/xt_osf.c | 1 net/sched/sch_api.c | 2 net/sched/sch_netem.c | 8 net/xfrm/xfrm_input.c | 1 net/xfrm/xfrm_interface_core.c | 54 net/xfrm/xfrm_policy.c | 14 scripts/gfp-translate | 6 scripts/mod/modpost.c | 5 scripts/orc_hash.sh | 16 sound/pci/hda/patch_realtek.c | 2 sound/soc/amd/yc/acp6x-mach.c | 7 sound/soc/codecs/nau8824.c | 24 sound/soc/codecs/wcd938x-sdw.c | 1 sound/soc/fsl/fsl_sai.c | 11 sound/soc/fsl/fsl_sai.h | 1 sound/soc/generic/simple-card.c | 1 tools/testing/selftests/net/fcnal-test.sh | 27 tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d.sh | 4 tools/testing/selftests/net/forwarding/mirror_gre_bridge_1q.sh | 4 tools/testing/selftests/net/mptcp/config | 1 tools/testing/selftests/net/mptcp/diag.sh | 42 tools/testing/selftests/net/mptcp/mptcp_connect.c | 8 tools/testing/selftests/net/mptcp/mptcp_connect.sh | 20 tools/testing/selftests/net/mptcp/mptcp_join.sh | 523 ++++++--- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 64 + tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 18 tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 20 tools/testing/selftests/net/mptcp/pm_netlink.sh | 27 tools/testing/selftests/net/mptcp/userspace_pm.sh | 13 tools/testing/selftests/net/tls.c | 24 tools/testing/selftests/net/vrf-xfrm-tests.sh | 32 tools/virtio/ringtest/main.h | 11 virt/kvm/kvm_main.c | 20 206 files changed, 2801 insertions(+), 1444 deletions(-)
Al Viro (1):
fs: introduce lock_rename_child() helper
Alexander Gordeev (1):
s390/purgatory: disable branch profiling
Alexei Starovoitov (1):
mm: Fix copy_from_user_nofault().
Andreas Gruenbacher (1):
gfs2: Don't get stuck writing page onto itself under direct I/O
Andrew Powers-Holmes (1):
arm64: dts: rockchip: Fix rk356x PCIe register and range mappings
Andrey Smetanin (1):
vhost_net: revert upend_idx only on retriable error
Arınç ÜNAL (3):
net: dsa: mt7530: fix trapping frames on non-MT7621 SoC MT7530 switch
net: dsa: mt7530: fix handling of BPDUs on MT7530 switch
net: dsa: mt7530: fix handling of LLDP frames
Benedict Wong (2):
xfrm: Treat already-verified secpath entries as optional
xfrm: Ensure policies always checked on XFRM-I input path
Chancel Liu (1):
ASoC: fsl_sai: Enable BCI bit if SAI works on synchronous mode with BYP asserted
Chen Aotian (1):
ieee802154: hwsim: Fix possible memory leaks
Christophe Kerello (1):
mmc: mmci: stm32: fix max busy timeout calculation
Clark Wang (2):
spi: lpspi: disable lpspi module irq in DMA mode
i2c: imx-lpi2c: fix type char overflow issue when calculating the clock cycle
Damien Le Moal (1):
ata: libata-scsi: Avoid deadlock on rescan after device resume
Dan Carpenter (1):
usb: gadget: udc: fix NULL dereference in remove()
Danielle Ratson (1):
selftests: forwarding: Fix race condition in mirror installation
David Zheng (1):
i2c: designware: fix idx_write_cnt in read loop
Denis Arefev (1):
HID: wacom: Add error check to wacom_parse_and_register()
Dexuan Cui (6):
Drivers: hv: vmbus: Call hv_synic_free() if hv_synic_alloc() fails
PCI: hv: Fix a race condition bug in hv_pci_query_relations() Revert "PCI: hv: Fix a timing issue which causes kdump to fail occasionally"
PCI: hv: Remove the useless hv_pcichild_state from struct hv_pci_dev
PCI: hv: Fix a race condition in hv_irq_unmask() that can cause panic
PCI: hv: Add a per-bus mutex state_lock
Dheeraj Kumar Srivastava (1):
x86/apic: Fix kernel panic when booting with intremap=off and x2apic_phys
Edson Juliano Drosdeck (1):
ASoC: nau8824: Add quirk to active-high jack-detect
Eric Dumazet (1):
sch_netem: acquire qdisc lock in netem_change()
Florent Revest (1):
bpf/btf: Accept function names that contain dots
Francesco Dolcini (1):
Revert "net: phy: dp83867: perform soft reset and retain established link"
Gavin Shan (1):
KVM: Avoid illegal stage2 mapping on invalid memory slot
Greg Kroah-Hartman (1):
Linux 6.3.10
Hans Verkuil (2):
media: cec: core: disable adapter in cec_devnode_unregister
media: cec: core: don't set last_initiator if tx in progress
Hans de Goede (2):
thermal/intel/intel_soc_dts_iosf: Fix reporting wrong temperatures
Input: soc_button_array - add invalid acpi_index DMI quirk handling
Hao Yao (1):
platform/x86: int3472: Avoid crash in unregistering regulator gpio
Herve Codina (1):
ASoC: simple-card: Add missing of_node_put() in case of error
Inki Dae (1):
drm/exynos: vidi: fix a wrong error return
Jens Axboe (4):
io_uring/net: clear msg_controllen on partial sendmsg retry io_uring/net: disable partial retries for recvmsg with cmsg io_uring/poll: serialize poll linked timer start with poll removal io_uring/net: use the correct msghdr union member in io_sendmsg_copy_hdr
Jiasheng Jiang (1):
gpio: sifive: add missing check for platform_get_irq
Jiawen Wu (2):
net: mdio: fix the wrong parameters
gpiolib: Fix GPIO chip IRQ initialization restriction
Jiri Olsa (1):
bpf: Force kprobe multi expected_attach_type for kprobe_multi link
Jisheng Zhang (1):
mmc: litex_mmc: set PROBE_PREFER_ASYNCHRONOUS
Krister Johansen (1):
bpf: ensure main program has an extable
Krzysztof Kozlowski (3):
arm64: dts: qcom: sc7280-idp: drop incorrect dai-cells from WCD938x SDW
arm64: dts: qcom: sc7280-qcard: drop incorrect dai-cells from WCD938x SDW
soundwire: qcom: add proper error paths in qcom_swrm_startup()
Lee Jones (1):
x86/mm: Avoid using set_pgd() outside of real PGD pages
Leon Romanovsky (1):
xfrm: add missed call to delete offloaded policies
Liam R. Howlett (1):
mm/mprotect: fix do_mprotect_pkey() limit check
Lino Sanfilippo (1):
tpm, tpm_tis: Claim locality in interrupt handler
Linus Torvalds (1):
Revert "efi: random: refresh non-volatile random seed when RNG is initialized"
Linus Walleij (1):
ARM: dts: Fix erroneous ADS touchscreen polarities
Lorenzo Stoakes (1):
mm/vmalloc: do not output a spurious warning when huge vmalloc() fails
Maciej Żenczykowski (2):
xfrm: fix inbound ipv4/udp/esp packets to UDPv6 dualstack sockets revert "net: align SO_RCVMARK required privileges with SO_MARK"
Magali Lemes (3):
selftests: net: tls: check if FIPS mode is enabled
selftests: net: vrf-xfrm-tests: change authentication and encryption algos
selftests: net: fcnal-test: check if FIPS mode is enabled
Marc Zyngier (2):
arm64: Add missing Set/Way CMO encodings
KVM: arm64: Restore GICv2-on-GICv3 functionality
Martin Hundebøll (1):
mmc: meson-gx: remove redundant mmc_request_done() call from irq context
Matthieu Baerts (33):
selftests: mptcp: remove duplicated entries in usage
selftests: mptcp: join: fix ShellCheck warnings
selftests: mptcp: lib: skip if missing symbol
selftests: mptcp: connect: skip transp tests if not supported
selftests: mptcp: connect: skip disconnect tests if not supported
selftests: mptcp: connect: skip TFO tests if not supported
selftests: mptcp: diag: skip listen tests if not supported
selftests: mptcp: diag: skip inuse tests if not supported
selftests: mptcp: pm nl: remove hardcoded default limits
selftests: mptcp: pm nl: skip fullmesh flag checks if not supported
selftests: mptcp: sockopt: relax expected returned size
selftests: mptcp: sockopt: skip getsockopt checks if not supported
selftests: mptcp: sockopt: skip TCP_INQ checks if not supported
selftests: mptcp: userspace pm: skip if 'ip' tool is unavailable
selftests: mptcp: userspace pm: skip if not supported
selftests: mptcp: userspace pm: skip PM listener events tests if unavailable
selftests: mptcp: lib: skip if not below kernel version
selftests: mptcp: join: use 'iptables-legacy' if available
selftests: mptcp: join: helpers to skip tests
selftests: mptcp: join: skip check if MIB counter not supported
selftests: mptcp: join: skip test if iptables/tc cmds fail
selftests: mptcp: join: support local endpoint being tracked or not
selftests: mptcp: join: skip Fastclose tests if not supported
selftests: mptcp: join: support RM_ADDR for used endpoints or not
selftests: mptcp: join: skip implicit tests if not supported
selftests: mptcp: join: skip backup if set flag on ID not supported
selftests: mptcp: join: skip fullmesh flag tests if not supported
selftests: mptcp: join: skip userspace PM tests if not supported
selftests: mptcp: join: skip fail tests if not supported
selftests: mptcp: join: skip MPC backups tests if not supported
selftests: mptcp: join: skip PM listener tests if not supported
selftests: mptcp: join: uniform listener tests
selftests: mptcp: join: skip mixed tests if not supported
Maurizio Lombardi (3):
scsi: target: iscsi: Fix hang in the iSCSI login code
scsi: target: iscsi: Remove unused transport_timer
scsi: target: iscsi: Prevent login threads from racing between each other
Maxim Mikityanskiy (1):
bpf: Fix verifier id tracking of scalars on spill
Michael Kelley (1):
Drivers: hv: vmbus: Fix vmbus_wait_for_unload() to scan present CPUs
Michael S. Tsirkin (1):
Revert "virtio-blk: support completion batching for the IRQ path"
Michael Walle (1):
gpiolib: Fix irq_domain resource tracking for gpiochip_irqchip_add_domain()
Mike Kravetz (1):
udmabuf: revert 'Add support for mapping hugepages (v4)'
Min Li (2):
drm/exynos: fix race condition UAF in exynos_g2d_exec_ioctl drm/radeon: fix race condition UAF in radeon_gem_set_domain_ioctl
Min-Hua Chen (1):
net: sched: wrap tc_skip_wrapper with CONFIG_RETPOLINE
Ming Lei (1):
block: make sure local irq is disabled when calling __blkcg_rstat_flush
Mukesh Sisodiya (1):
wifi: iwlwifi: pcie: Handle SO-F device for PCI id 0x7AF0
Namjae Jeon (9):
ksmbd: validate command payload size
ksmbd: fix out-of-bound read in smb2_write
ksmbd: validate session id and tree id in the compound request
ksmbd: remove internal.h include
ksmbd: fix racy issue from using ->d_parent and ->d_name
ksmbd: add mnt_want_write to ksmbd vfs functions
ksmbd: fix uninitialized pointer read in ksmbd_vfs_rename()
ksmbd: fix uninitialized pointer read in smb2_create_link()
ksmbd: call putname after using the last component
Nathan Chancellor (1):
riscv: Link with '-z norelro'
Neil Armstrong (1):
spi: spi-geni-qcom: correctly handle -EPROBE_DEFER from dma_request_chan()
Nicolas Frattaroli (1):
arm64: dts: rockchip: fix nEXTRST on SOQuartz
Nitesh Shetty (1):
null_blk: Fix: memory release when memory_backed=1
Omar Sandoval (1):
x86/unwind/orc: Add ELF section with ORC version identifier
Osama Muhammad (1):
nfcsim.c: Fix error checking for debugfs_create_dir
Pablo Neira Ayuso (10):
netfilter: nf_tables: fix chain binding transaction logic
netfilter: nf_tables: add NFT_TRANS_PREPARE_ERROR to deal with bound set/chain
netfilter: nf_tables: drop map element references from preparation phase
netfilter: nft_set_pipapo: .walk does not deal with generations
netfilter: nf_tables: disallow element updates of bound anonymous sets
netfilter: nf_tables: reject unbound anonymous set before commit phase
netfilter: nf_tables: reject unbound chain set before commit phase
netfilter: nf_tables: disallow updates of anonymous sets
netfilter: nfnetlink_osf: fix module autoload
netfilter: nf_tables: drop module reference after updating chain
Paolo Abeni (5):
mptcp: handle correctly disconnect() failures
mptcp: fix possible divide by zero in recvmsg()
mptcp: fix possible list corruption on passive MPJ
mptcp: consolidate fallback and non fallback state machine
mptcp: ensure listener is unhashed before updating the sk status
Pierre-Louis Bossart (1):
soundwire: dmi-quirks: add new mapping for HP Spectre x360
Prathu Baronia (1):
scripts: fix the gfp flags header path in gfp-translate
Rafael Aquini (1):
writeback: fix dereferencing NULL mapping->host on writeback_page_template
Rafael J. Wysocki (1):
ACPI: sleep: Avoid breaking S3 wakeup due to might_sleep()
Reiji Watanabe (1):
KVM: arm64: PMU: Restore the host's PMUSERENR_EL0
Roberto Sassu (1):
memfd: check for non-NULL file_seals in memfd_create() syscall
Rodrigo Siqueira (2):
drm/amd/display: Use dc_update_planes_and_stream drm/amd/display: Add wrapper to call planes and stream update
Rong Tao (1):
tools/virtio: Fix arm64 ringtest compilation error
Ross Lagerwall (1):
be2net: Extend xmit workaround to BE3 chip
Russ Weight (1):
regmap: spi-avmm: Fix regmap_bus max_raw_write
Ryusuke Konishi (2):
nilfs2: fix buffer corruption due to concurrent device reads
nilfs2: prevent general protection fault in nilfs_clear_dirty_page()
Sayed, Karimuddin (1):
ALSA: hda/realtek: Add "Intel Reference board" and "NUC 13" SSID in the ALC256
Sebastian Andrzej Siewior (1):
xfrm: Linearize the skb after offloading if needed.
Sergey Shtylyov (12):
mmc: sdhci-spear: fix deferred probing
mmc: bcm2835: fix deferred probing
mmc: sunxi: fix deferred probing
mmc: meson-gx: fix deferred probing
mmc: mtk-sd: fix deferred probing
mmc: mvsdio: fix deferred probing
mmc: omap: fix deferred probing
mmc: omap_hsmmc: fix deferred probing
mmc: owl: fix deferred probing
mmc: sdhci-acpi: fix deferred probing
mmc: sh_mmcif: fix deferred probing
mmc: usdhi60rol0: fix deferred probing
Shannon Nelson (1):
vhost_vdpa: tell vqs about the negotiated
Shida Zhang (1):
btrfs: fix an uninitialized variable warning in btrfs_log_inode
Shyam Prasad N (1):
cifs: fix status checks in cifs_tree_connect
Shyam Sundar S K (1):
platform/x86/amd/pmf: Register notify handler only if SPS is enabled
Sicong Jiang (1):
ASoC: amd: yc: Add Thinkpad Neo14 to quirks list for acp6x
Simon Horman (1):
i2c: mchp-pci1xxxx: Avoid cast to incompatible function type
Srinivas Kandagatla (1):
ASoC: codecs: wcd938x-sdw: do not set can_multi_write flag
Stefan Wahren (1):
net: qca_spi: Avoid high load if QCA7000 is not available
Stephan Gerhold (1):
mmc: sdhci-msm: Disable broken 64-bit DMA on MSM8916
Steve French (1):
smb3: missing null check in SMB2_change_notify
Su Hui (1):
iommu/amd: Fix possible memory leak of 'domain'
Teresa Remmet (1):
regulator: pca9450: Fix LDO3OUT and LDO4OUT MASK
Terin Stock (1):
ipvs: align inner_mac_header for encapsulation
Tetsuo Handa (1):
cgroup,freezer: hold cpu_hotplug_lock before freezer_mutex in freezer_css_{online,offline}()
Thomas Gleixner (1):
tick/common: Align tick period during sched_timer setup
Tom Chung (1):
drm/amd/display: fix the system hang while disable PSR
Uday Shankar (3):
nvme: double KA polling frequency to avoid KATO with TBKAS on
nvme: check IO start time when deciding to defer KA
nvme: improve handling of long keep alives
Vineeth Vijayan (1):
s390/cio: unregister device when the only path is gone
Vishal Moola (Oracle) (2):
afs: Fix dangling folio ref counts in writeback
afs: Fix waiting for writeback then skipping folio
Vladimir Oltean (1):
net: dsa: introduce preferred_default_local_cpu_port and use on MT7530
Xiu Jianfeng (1):
cgroup: Do not corrupt task iteration when rebinding subsystem
Yevgeny Kliteynik (1):
net/mlx5: DR, Fix wrong action data allocation in decap action
Yonghong Song (1):
bpf: Fix a bpf_jit_dump issue for x86_64 with sysctl bpf_jit_enable.
min15.li (1):
nvme: fix miss command type check
Íñigo Huguet (1):
sfc: use budget for TX completions
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 3 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/boot/dts/am57xx-cl-som-am57x.dts +1 -1
@@ -527,7 +527,7 @@ touchscreen@1 { interrupt-parent = <&gpio1>; interrupts = <31 0>; - pendown-gpio = <&gpio1 31 0>; + pendown-gpio = <&gpio1 31 GPIO_ACTIVE_LOW>; ti,x-min = /bits/ 16 <0x0>;
arch/arm/boot/dts/at91sam9261ek.dts +1 -1
@@ -156,7 +156,7 @@ tsc2046@2 { compatible = "ti,ads7843"; interrupts-extended = <&pioC 2 IRQ_TYPE_EDGE_BOTH>; spi-max-frequency = <3000000>; - pendown-gpio = <&pioC 2 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&pioC 2 GPIO_ACTIVE_LOW>; ti,x-min = /bits/ 16 <150>; ti,x-max = /bits/ 16 <3830>;
arch/arm/boot/dts/imx7d-pico-hobbit.dts +1 -1
@@ -64,7 +64,7 @@ ads7846@0 { interrupt-parent = <&gpio2>; interrupts = <7 0>; spi-max-frequency = <1000000>; - pendown-gpio = <&gpio2 7 0>; + pendown-gpio = <&gpio2 7 GPIO_ACTIVE_LOW>; vcc-supply = <®_3p3v>; ti,x-min = /bits/ 16 <0>; ti,x-max = /bits/ 16 <4095>;
arch/arm/boot/dts/imx7d-sdb.dts +1 -1
@@ -205,7 +205,7 @@ tsc2046@0 { pinctrl-0 = <&pinctrl_tsc2046_pendown>; interrupt-parent = <&gpio2>; interrupts = <29 0>; - pendown-gpio = <&gpio2 29 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio2 29 GPIO_ACTIVE_LOW>; touchscreen-max-pressure = <255>; wakeup-source; };
arch/arm/boot/dts/omap3-cm-t3x.dtsi +1 -1
@@ -227,7 +227,7 @@ ads7846@0 { interrupt-parent = <&gpio2>; interrupts = <25 0>; /* gpio_57 */ - pendown-gpio = <&gpio2 25 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio2 25 GPIO_ACTIVE_LOW>; ti,x-min = /bits/ 16 <0x0>; ti,x-max = /bits/ 16 <0x0fff>;
arch/arm/boot/dts/omap3-devkit8000-lcd-common.dtsi +1 -1
@@ -54,7 +54,7 @@ ads7846@0 { interrupt-parent = <&gpio1>; interrupts = <27 0>; /* gpio_27 */ - pendown-gpio = <&gpio1 27 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio1 27 GPIO_ACTIVE_LOW>; ti,x-min = /bits/ 16 <0x0>; ti,x-max = /bits/ 16 <0x0fff>;
arch/arm/boot/dts/omap3-lilly-a83x.dtsi +1 -1
@@ -311,7 +311,7 @@ tsc2046@0 { interrupt-parent = <&gpio1>; interrupts = <8 0>; /* boot6 / gpio_8 */ spi-max-frequency = <1000000>; - pendown-gpio = <&gpio1 8 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>; vcc-supply = <®_vcc3>; pinctrl-names = "default"; pinctrl-0 = <&tsc2048_pins>;
arch/arm/boot/dts/omap3-overo-common-lcd35.dtsi +1 -1
@@ -149,7 +149,7 @@ ads7846@0 { interrupt-parent = <&gpio4>; interrupts = <18 0>; /* gpio_114 */ - pendown-gpio = <&gpio4 18 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio4 18 GPIO_ACTIVE_LOW>; ti,x-min = /bits/ 16 <0x0>; ti,x-max = /bits/ 16 <0x0fff>;
arch/arm/boot/dts/omap3-overo-common-lcd43.dtsi +1 -1
@@ -160,7 +160,7 @@ ads7846@0 { interrupt-parent = <&gpio4>; interrupts = <18 0>; /* gpio_114 */ - pendown-gpio = <&gpio4 18 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio4 18 GPIO_ACTIVE_LOW>; ti,x-min = /bits/ 16 <0x0>; ti,x-max = /bits/ 16 <0x0fff>;
arch/arm/boot/dts/omap3-pandora-common.dtsi +1 -1
@@ -651,7 +651,7 @@ tsc2046@0 { pinctrl-0 = <&penirq_pins>; interrupt-parent = <&gpio3>; interrupts = <30 IRQ_TYPE_NONE>; /* GPIO_94 */ - pendown-gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio3 30 GPIO_ACTIVE_LOW>; vcc-supply = <&vaux4>; ti,x-min = /bits/ 16 <0>;
arch/arm/boot/dts/omap5-cm-t54.dts +1 -1
@@ -354,7 +354,7 @@ ads7846@0 { interrupt-parent = <&gpio1>; interrupts = <15 0>; /* gpio1_wk15 */ - pendown-gpio = <&gpio1 15 GPIO_ACTIVE_HIGH>; + pendown-gpio = <&gpio1 15 GPIO_ACTIVE_LOW>; ti,x-min = /bits/ 16 <0x0>;
arch/arm64/boot/dts/qcom/sc7280-idp.dtsi +0 -2
@@ -480,7 +480,6 @@ &swr0 { wcd_rx: codec@0,4 { compatible = "sdw20217010d00"; reg = <0 4>; - #sound-dai-cells = <1>; qcom,rx-port-mapping = <1 2 3 4 5>; }; };
@@ -491,7 +490,6 @@ &swr1 { wcd_tx: codec@0,3 { compatible = "sdw20217010d00"; reg = <0 3>; - #sound-dai-cells = <1>; qcom,tx-port-mapping = <1 2 3 4>; }; };
arch/arm64/boot/dts/qcom/sc7280-qcard.dtsi +0 -2
@@ -419,7 +419,6 @@ &swr0 { wcd_rx: codec@0,4 { compatible = "sdw20217010d00"; reg = <0 4>; - #sound-dai-cells = <1>; qcom,rx-port-mapping = <1 2 3 4 5>; }; };
@@ -428,7 +427,6 @@ &swr1 { wcd_tx: codec@0,3 { compatible = "sdw20217010d00"; reg = <0 3>; - #sound-dai-cells = <1>; qcom,tx-port-mapping = <1 2 3 4>; }; };
arch/arm64/boot/dts/rockchip/rk3566-soquartz-cm4.dts +11 -7
@@ -28,6 +28,16 @@ vcc_5v: vcc-5v-regulator { regulator-max-microvolt = <5000000>; vin-supply = <&vcc12v_dcin>; }; + + vcc_sd_pwr: vcc-sd-pwr-regulator { + compatible = "regulator-fixed"; + regulator-name = "vcc_sd_pwr"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vcc3v3_sys>; + }; }; /* phy for pcie */
@@ -130,13 +140,7 @@ &saradc { }; &sdmmc0 { - vmmc-supply = <&sdmmc_pwr>; - status = "okay"; -}; - -&sdmmc_pwr { - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; + vmmc-supply = <&vcc_sd_pwr>; status = "okay"; };
arch/arm64/boot/dts/rockchip/rk3566-soquartz.dtsi +13 -16
@@ -104,16 +104,6 @@ vcc3v3_sys: vcc3v3-sys-regulator { regulator-max-microvolt = <3300000>; vin-supply = <&vcc5v0_sys>; }; - - sdmmc_pwr: sdmmc-pwr-regulator { - compatible = "regulator-fixed"; - enable-active-high; - gpio = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>; - pinctrl-names = "default"; - pinctrl-0 = <&sdmmc_pwr_h>; - regulator-name = "sdmmc_pwr"; - status = "disabled"; - }; }; &cpu0 {
@@ -155,6 +145,19 @@ &gmac1m0_clkinout status = "disabled"; }; +&gpio0 { + nextrst-hog { + gpio-hog; + /* + * GPIO_ACTIVE_LOW + output-low here means that the pin is set + * to high, because output-low decides the value pre-inversion. + */ + gpios = <RK_PA5 GPIO_ACTIVE_LOW>; + line-name = "nEXTRST"; + output-low; + }; +}; + &gpu { mali-supply = <&vdd_gpu>; status = "okay";
@@ -538,12 +541,6 @@ wifi_enable_h: wifi-enable-h { rockchip,pins = <2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>; }; }; - - sdmmc-pwr { - sdmmc_pwr_h: sdmmc-pwr-h { - rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>; - }; - }; }; &pmu_io_domains {
arch/arm64/boot/dts/rockchip/rk3568.dtsi +8 -6
@@ -94,9 +94,10 @@ pcie3x1: pcie@fe270000 { power-domains = <&power RK3568_PD_PIPE>; reg = <0x3 0xc0400000 0x0 0x00400000>, <0x0 0xfe270000 0x0 0x00010000>, - <0x3 0x7f000000 0x0 0x01000000>; - ranges = <0x01000000 0x0 0x3ef00000 0x3 0x7ef00000 0x0 0x00100000>, - <0x02000000 0x0 0x00000000 0x3 0x40000000 0x0 0x3ef00000>; + <0x0 0xf2000000 0x0 0x00100000>; + ranges = <0x01000000 0x0 0xf2100000 0x0 0xf2100000 0x0 0x00100000>, + <0x02000000 0x0 0xf2200000 0x0 0xf2200000 0x0 0x01e00000>, + <0x03000000 0x0 0x40000000 0x3 0x40000000 0x0 0x40000000>; reg-names = "dbi", "apb", "config"; resets = <&cru SRST_PCIE30X1_POWERUP>; reset-names = "pipe";
@@ -146,9 +147,10 @@ pcie3x2: pcie@fe280000 { power-domains = <&power RK3568_PD_PIPE>; reg = <0x3 0xc0800000 0x0 0x00400000>, <0x0 0xfe280000 0x0 0x00010000>, - <0x3 0xbf000000 0x0 0x01000000>; - ranges = <0x01000000 0x0 0x3ef00000 0x3 0xbef00000 0x0 0x00100000>, - <0x02000000 0x0 0x00000000 0x3 0x80000000 0x0 0x3ef00000>; + <0x0 0xf0000000 0x0 0x00100000>; + ranges = <0x01000000 0x0 0xf0100000 0x0 0xf0100000 0x0 0x00100000>, + <0x02000000 0x0 0xf0200000 0x0 0xf0200000 0x0 0x01e00000>, + <0x03000000 0x0 0x40000000 0x3 0x80000000 0x0 0x40000000>; reg-names = "dbi", "apb", "config"; resets = <&cru SRST_PCIE30X2_POWERUP>; reset-names = "pipe";
arch/arm64/boot/dts/rockchip/rk356x.dtsi +4 -3
@@ -952,7 +952,7 @@ pcie2x1: pcie@fe260000 { compatible = "rockchip,rk3568-pcie"; reg = <0x3 0xc0000000 0x0 0x00400000>, <0x0 0xfe260000 0x0 0x00010000>, - <0x3 0x3f000000 0x0 0x01000000>; + <0x0 0xf4000000 0x0 0x00100000>; reg-names = "dbi", "apb", "config"; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
@@ -982,8 +982,9 @@ pcie2x1: pcie@fe260000 { phys = <&combphy2 PHY_TYPE_PCIE>; phy-names = "pcie-phy"; power-domains = <&power RK3568_PD_PIPE>; - ranges = <0x01000000 0x0 0x3ef00000 0x3 0x3ef00000 0x0 0x00100000 - 0x02000000 0x0 0x00000000 0x3 0x00000000 0x0 0x3ef00000>; + ranges = <0x01000000 0x0 0xf4100000 0x0 0xf4100000 0x0 0x00100000>, + <0x02000000 0x0 0xf4200000 0x0 0xf4200000 0x0 0x01e00000>, + <0x03000000 0x0 0x40000000 0x3 0x00000000 0x0 0x40000000>; resets = <&cru SRST_PCIE20_POWERUP>; reset-names = "pipe"; #address-cells = <3>;
arch/arm64/include/asm/sysreg.h +6 -0
@@ -115,8 +115,14 @@#define SB_BARRIER_INSN __SYS_BARRIER_INSN(0, 7, 31)#define SYS_DC_ISW sys_insn(1, 0, 7, 6, 2) +#define SYS_DC_IGSW sys_insn(1, 0, 7, 6, 4) +#define SYS_DC_IGDSW sys_insn(1, 0, 7, 6, 6)#define SYS_DC_CSW sys_insn(1, 0, 7, 10, 2) +#define SYS_DC_CGSW sys_insn(1, 0, 7, 10, 4) +#define SYS_DC_CGDSW sys_insn(1, 0, 7, 10, 6)#define SYS_DC_CISW sys_insn(1, 0, 7, 14, 2) +#define SYS_DC_CIGSW sys_insn(1, 0, 7, 14, 4) +#define SYS_DC_CIGDSW sys_insn(1, 0, 7, 14, 6)/* * Automatically generated definitions for system registers, the
arch/arm64/kvm/hyp/include/hyp/switch.h +11 -2
@@ -81,7 +81,12 @@ static inline void __activate_traps_common(struct kvm_vcpu *vcpu)* EL1 instead of being trapped to EL2. */ if (kvm_arm_support_pmu_v3 ()) { +struct kvm_cpu_context *hctxt; +write_sysreg (0 , pmselr_el0); + + hctxt = &this_cpu_ptr (&kvm_host_data)->host_ctxt; +ctxt_sys_reg (hctxt,PMUSERENR_EL0 ) =read_sysreg (pmuserenr_el0);write_sysreg (ARMV8_PMU_USERENR_MASK , pmuserenr_el0); }
@@ -105,8 +110,12 @@ static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu)write_sysreg (vcpu->arch.mdcr_el2_host, mdcr_el2);write_sysreg (0 , hstr_el2); -if (kvm_arm_support_pmu_v3 ()) -write_sysreg (0 , pmuserenr_el0); +if (kvm_arm_support_pmu_v3 ()) { +struct kvm_cpu_context *hctxt; + + hctxt = &this_cpu_ptr (&kvm_host_data)->host_ctxt; +write_sysreg (ctxt_sys_reg (hctxt,PMUSERENR_EL0 ), pmuserenr_el0); + }if (cpus_have_final_cap (ARM64_SME )) { sysreg_clear_set_s(SYS_HFGRTR_EL2, 0,
arch/arm64/kvm/vgic/vgic-init.c +7 -4
@@ -446,6 +446,7 @@ int vgic_lazy_init(struct kvm *kvm)int kvm_vgic_map_resources (struct kvm *kvm) {struct vgic_dist *dist = &kvm->arch.vgic; +enum vgic_type type;gpa_t dist_base;int ret =0 ;
@@ -460,10 +461,13 @@ int kvm_vgic_map_resources(struct kvm *kvm)if (!irqchip_in_kernel (kvm)) goto out; -if (dist->vgic_model ==KVM_DEV_TYPE_ARM_VGIC_V2 ) +if (dist->vgic_model ==KVM_DEV_TYPE_ARM_VGIC_V2 ) { ret =vgic_v2_map_resources (kvm); -else + type =VGIC_V2 ; + }else { ret =vgic_v3_map_resources (kvm); + type =VGIC_V3 ; + }if (ret) {__kvm_vgic_destroy (kvm);
@@ -473,8 +477,7 @@ int kvm_vgic_map_resources(struct kvm *kvm) dist_base = dist->vgic_dist_base;mutex_unlock (&kvm->arch.config_lock); - ret =vgic_register_dist_iodev (kvm, dist_base, - kvm_vgic_global_state.type); + ret =vgic_register_dist_iodev (kvm, dist_base, type);if (ret) {kvm_err ("Unable to register VGIC dist MMIO regions\n" );kvm_vgic_destroy (kvm);
arch/riscv/Makefile +1 -1
@@ -7,7 +7,7 @@ # OBJCOPYFLAGS := -O binary -LDFLAGS_vmlinux := +LDFLAGS_vmlinux := -z norelro ifeq ($(CONFIG_DYNAMIC_FTRACE),y) LDFLAGS_vmlinux := --no-relax KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
arch/s390/purgatory/Makefile +1 -0
@@ -26,6 +26,7 @@ KBUILD_CFLAGS += -Wno-pointer-sign -Wno-sign-compare KBUILD_CFLAGS += -fno-zero-initialized-in-bss -fno-builtin -ffreestanding KBUILD_CFLAGS += -Os -m64 -msoft-float -fno-common KBUILD_CFLAGS += -fno-stack-protector +KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING KBUILD_CFLAGS += $(CLANG_FLAGS) KBUILD_CFLAGS += $(call cc-option,-fno-PIE) KBUILD_AFLAGS := $(filter-out -DCC_USING_EXPOLINE,$(KBUILD_AFLAGS))
arch/x86/Makefile +12 -0
@@ -305,6 +305,18 @@ ifeq ($(RETPOLINE_CFLAGS),) endif endif +ifdef CONFIG_UNWINDER_ORC +orc_hash_h := arch/$(SRCARCH)/include/generated/asm/orc_hash.h +orc_hash_sh := $(srctree)/scripts/orc_hash.sh +targets += $(orc_hash_h) +quiet_cmd_orc_hash = GEN $@ + cmd_orc_hash = mkdir -p $(dir $@); \ + $(CONFIG_SHELL) $(orc_hash_sh) < $< > $@ +$(orc_hash_h): $(srctree)/arch/x86/include/asm/orc_types.h $(orc_hash_sh) FORCE + $(call if_changed,orc_hash) +archprepare: $(orc_hash_h) +endif + archclean: $(Q)rm -rf $(objtree)/arch/i386 $(Q)rm -rf $(objtree)/arch/x86_64
arch/x86/include/asm/Kbuild +1 -0
@@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 +generated-y += orc_hash.h generated-y += syscalls_32.h generated-y += syscalls_64.h generated-y += syscalls_x32.h
arch/x86/include/asm/orc_header.h new file +19 -0
@@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* Copyright (c) Meta Platforms, Inc. and affiliates. */ + +#ifndef _ORC_HEADER_H +#define _ORC_HEADER_H + +#include <linux/types.h> +#include <linux/compiler.h> +#include <asm/orc_hash.h> + +/* +* The header is currently a 20-byte hash of the ORC entry definition; see +* scripts/orc_hash.sh. +*/ +#define ORC_HEADER \ + __used __section(".orc_header") __aligned(4) \ + static const u8 orc_header[] = { ORC_HASH } + +#endif /* _ORC_HEADER_H */
arch/x86/kernel/apic/x2apic_phys.c +4 -1
@@ -97,7 +97,10 @@ static void init_x2apic_ldr(void)static int x2apic_phys_probe (void ) { -if (x2apic_mode && (x2apic_phys ||x2apic_fadt_phys ())) +if (!x2apic_mode) +return 0 ; + +if (x2apic_phys ||x2apic_fadt_phys ())return 1 ;return apic == &apic_x2apic_phys;
arch/x86/kernel/unwind_orc.c +3 -0
@@ -7,6 +7,9 @@#include <asm/unwind.h> #include <asm/orc_types.h> #include <asm/orc_lookup.h> +#include <asm/orc_header.h> + +ORC_HEADER ;#define orc_warn (fmt, ...) \ printk_deferred_once(KERN_WARNING "WARNING: " fmt, ##__VA_ARGS__)
arch/x86/mm/kaslr.c +4 -4
@@ -172,10 +172,10 @@ void __meminit init_trampoline_kaslr(void)set_p4d (p4d_tramp,__p4d (_KERNPG_TABLE |__pa (pud_page_tramp))); -set_pgd (&trampoline_pgd_entry, -__pgd (_KERNPG_TABLE |__pa (p4d_page_tramp))); + trampoline_pgd_entry = +__pgd (_KERNPG_TABLE |__pa (p4d_page_tramp)); }else { -set_pgd (&trampoline_pgd_entry, -__pgd (_KERNPG_TABLE |__pa (pud_page_tramp))); + trampoline_pgd_entry = +__pgd (_KERNPG_TABLE |__pa (pud_page_tramp)); } }
arch/x86/net/bpf_jit_comp.c +1 -1
@@ -2570,7 +2570,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) }if (bpf_jit_enable >1 ) -bpf_jit_dump (prog->len, proglen, pass +1 , image); +bpf_jit_dump (prog->len, proglen, pass +1 , rw_image);if (image) {if (!prog->is_func || extra_pass) {
block/blk-cgroup.c +3 -2
@@ -907,6 +907,7 @@ static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu)struct llist_head *lhead =per_cpu_ptr (blkcg->lhead, cpu);struct llist_node *lnode;struct blkg_iostat_set *bisc, *next_bisc; +unsigned long flags;rcu_read_lock ();
@@ -920,7 +921,7 @@ static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu)* When flushing from cgroup, cgroup_rstat_lock is always held, so * this lock won't cause contention most of time. */ -raw_spin_lock (&blkg_stat_lock); +raw_spin_lock_irqsave (&blkg_stat_lock, flags);/* * Iterate only the iostat_cpu's queued in the lockless list.
@@ -946,7 +947,7 @@ static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu)blkcg_iostat_update (parent, &blkg->iostat.cur, &blkg->iostat.last); } -raw_spin_unlock (&blkg_stat_lock); +raw_spin_unlock_irqrestore (&blkg_stat_lock, flags); out:rcu_read_unlock (); }
drivers/acpi/acpica/achware.h +0 -2
@@ -101,8 +101,6 @@ acpi_status acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info, acpi_event_status *event_status); -acpi_status acpi_hw_disable_all_gpes (void ); -acpi_status acpi_hw_enable_all_runtime_gpes (void );acpi_status acpi_hw_enable_all_wakeup_gpes (void );
drivers/acpi/sleep.c +12 -4
@@ -636,11 +636,19 @@ static int acpi_suspend_enter(suspend_state_t pm_state) }/* -* Disable and clear GPE status before interrupt is enabled. Some GPEs -* (like wakeup GPE) haven't handler, this can avoid such GPE misfire. -* acpi_leave_sleep_state will reenable specific GPEs later +* Disable all GPE and clear their status bits before interrupts are +* enabled. Some GPEs (like wakeup GPEs) have no handlers and this can +* prevent them from producing spurious interrups. +* +* acpi_leave_sleep_state() will reenable specific GPEs later. +* +* Because this code runs on one CPU with disabled interrupts (all of +* the other CPUs are offline at this time), it need not acquire any +* sleeping locks which may trigger an implicit preemption point even +* if there is no contention, so avoid doing that by using a low-level +* library routine here. */ -acpi_disable_all_gpes (); +acpi_hw_disable_all_gpes ();/* Allow EC transactions to happen. */ acpi_ec_unblock_transactions ();
drivers/ata/libata-core.c +2 -1
@@ -5348,7 +5348,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host)mutex_init (&ap->scsi_scan_mutex);INIT_DELAYED_WORK (&ap->hotplug_task, ata_scsi_hotplug); -INIT_WORK (&ap->scsi_rescan_task, ata_scsi_dev_rescan); +INIT_DELAYED_WORK (&ap->scsi_rescan_task, ata_scsi_dev_rescan);INIT_LIST_HEAD (&ap->eh_done_q);init_waitqueue_head (&ap->eh_wait_q);init_completion (&ap->park_req_pending);
@@ -5954,6 +5954,7 @@ static void ata_port_detach(struct ata_port *ap)WARN_ON (!(ap->pflags &ATA_PFLAG_UNLOADED ));cancel_delayed_work_sync (&ap->hotplug_task); +cancel_delayed_work_sync (&ap->scsi_rescan_task); skip_eh:/* clean up zpodd on port removal */
drivers/ata/libata-eh.c +1 -1
@@ -2984,7 +2984,7 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link, ehc->i.flags |=ATA_EHI_SETMODE ;/* schedule the scsi_rescan_device() here */ -schedule_work (&(ap->scsi_rescan_task)); +schedule_delayed_work (&ap->scsi_rescan_task,0 ); }else if (dev->class ==ATA_DEV_UNKNOWN && ehc->tries[dev->devno] &&ata_class_enabled (ehc->classes[dev->devno])) {
drivers/ata/libata-scsi.c +21 -1
@@ -4597,10 +4597,11 @@ int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,void ata_scsi_dev_rescan (struct work_struct *work) {struct ata_port *ap = - container_of(work, struct ata_port, scsi_rescan_task); + container_of(work, struct ata_port, scsi_rescan_task.work);struct ata_link *link;struct ata_device *dev;unsigned long flags; +bool delay_rescan = false;mutex_lock (&ap->scsi_scan_mutex);spin_lock_irqsave (ap->lock, flags);
@@ -4614,6 +4615,21 @@ void ata_scsi_dev_rescan(struct work_struct *work)if (scsi_device_get (sdev))continue ; +/* +* If the rescan work was scheduled because of a resume +* event, the port is already fully resumed, but the +* SCSI device may not yet be fully resumed. In such +* case, executing scsi_rescan_device() may cause a +* deadlock with the PM code on device_lock(). Prevent +* this by giving up and retrying rescan after a short +* delay. +*/ + delay_rescan = sdev->sdev_gendev.power.is_suspended; +if (delay_rescan) { +scsi_device_put (sdev); +break ; + } +spin_unlock_irqrestore (ap->lock, flags);scsi_rescan_device (&(sdev->sdev_gendev));scsi_device_put (sdev);
@@ -4623,4 +4639,8 @@ void ata_scsi_dev_rescan(struct work_struct *work)spin_unlock_irqrestore (ap->lock, flags);mutex_unlock (&ap->scsi_scan_mutex); + +if (delay_rescan) +schedule_delayed_work (&ap->scsi_rescan_task, +msecs_to_jiffies (5 )); }
drivers/base/regmap/regmap-spi-avmm.c +1 -1
@@ -660,7 +660,7 @@ static const struct regmap_bus regmap_spi_avmm_bus = { .reg_format_endian_default = REGMAP_ENDIAN_NATIVE, .val_format_endian_default = REGMAP_ENDIAN_NATIVE, .max_raw_read = SPI_AVMM_VAL_SIZE * MAX_READ_CNT, - .max_raw_write = SPI_AVMM_VAL_SIZE * MAX_WRITE_CNT, + .max_raw_write = SPI_AVMM_REG_SIZE + SPI_AVMM_VAL_SIZE * MAX_WRITE_CNT, .free_context = spi_avmm_bridge_ctx_free, };
drivers/block/null_blk/main.c +1 -0
@@ -2212,6 +2212,7 @@ static void null_destroy_dev(struct nullb *nullb)struct nullb_device *dev = nullb->dev;null_del_dev (nullb); +null_free_device_storage (dev, false);null_free_dev (dev); }
drivers/block/virtio_blk.c +37 -45
115 lines not on this page · raw message
drivers/char/tpm/tpm_tis_core.c +2 -0
@@ -772,7 +772,9 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)wake_up_interruptible (&priv->int_queue);/* Clear interrupts handled with TPM_EOI */ +tpm_tis_request_locality (chip,0 ); rc =tpm_tis_write32 (priv,TPM_INT_STATUS (priv->locality), interrupt); +tpm_tis_relinquish_locality (chip,0 );if (rc <0 )return IRQ_NONE ;
drivers/dma-buf/udmabuf.c +6 -41
77 lines not on this page · raw message
drivers/firmware/efi/efi.c +0 -21
@@ -361,24 +361,6 @@ static void __init efi_debugfs_init(void)static inline void efi_debugfs_init (void ) {}#endif -static void refresh_nv_rng_seed (struct work_struct *work) -{ -u8 seed[EFI_RANDOM_SEED_SIZE ]; - -get_random_bytes (seed,sizeof (seed)); - efi.set_variable (L"RandomSeed" , &LINUX_EFI_RANDOM_SEED_TABLE_GUID , -EFI_VARIABLE_NON_VOLATILE |EFI_VARIABLE_BOOTSERVICE_ACCESS | -EFI_VARIABLE_RUNTIME_ACCESS ,sizeof (seed), seed); -memzero_explicit (seed,sizeof (seed)); -} -static int refresh_nv_rng_seed_notification (struct notifier_block *nb,unsigned long action,void *data) -{ - static DECLARE_WORK(work, refresh_nv_rng_seed); -schedule_work (&work); -return NOTIFY_DONE ; -} -static struct notifier_block refresh_nv_rng_seed_nb = { .notifier_call = refresh_nv_rng_seed_notification }; -/* * We register the efi subsystem with the firmware subsystem and the * efivars subsystem with the efi subsystem, if the system was booted with
@@ -451,9 +433,6 @@ static int __init efisubsys_init(void)platform_device_register_simple ("efi_secret" ,0 ,NULL ,0 );#endif -if (efi_rt_services_supported (EFI_RT_SUPPORTED_SET_VARIABLE )) -execute_with_initialized_rng (&refresh_nv_rng_seed_nb); -return 0 ; err_remove_group:
drivers/gpio/gpio-sifive.c +6 -2
@@ -221,8 +221,12 @@ static int sifive_gpio_probe(struct platform_device *pdev)return -ENODEV ; } -for (i =0 ; i < ngpio; i++) - chip->irq_number[i] =platform_get_irq (pdev, i); +for (i =0 ; i < ngpio; i++) { + ret =platform_get_irq (pdev, i); +if (ret <0 ) +return ret; + chip->irq_number[i] = ret; + } ret = bgpio_init(&chip->gc, dev, 4, chip->base + SIFIVE_GPIO_INPUT_VAL,
drivers/gpio/gpiolib.c +10 -1
@@ -1716,7 +1716,7 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gc) }/* Remove all IRQ mappings and delete the domain */ -if (gc->irq.domain) { +if (!gc->irq.domain_is_allocated_externally && gc->irq.domain) {unsigned int irq;for (offset =0 ; offset < gc->ngpio; offset++) {
@@ -1762,6 +1762,15 @@ int gpiochip_irqchip_add_domain(struct gpio_chip *gc, gc->to_irq = gpiochip_to_irq; gc->irq.domain = domain; + gc->irq.domain_is_allocated_externally = true; + +/* +* Using barrier() here to prevent compiler from reordering +* gc->irq.initialized before adding irqdomain. +*/ +barrier (); + + gc->irq.initialized = true;return 0 ; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +53 -20
103 lines not on this page · raw message
drivers/gpu/drm/exynos/exynos_drm_g2d.c +1 -1
@@ -1335,7 +1335,7 @@ int exynos_g2d_exec_ioctl(struct drm_device *drm_dev, void *data,/* Let the runqueue know that there is work to do. */ queue_work (g2d->g2d_workq, &g2d->runqueue_work); -if (runqueue_node->async) +if (req->async) goto out;wait_for_completion (&runqueue_node->complete);
drivers/gpu/drm/exynos/exynos_drm_vidi.c +0 -2
@@ -469,8 +469,6 @@ static int vidi_remove(struct platform_device *pdev)if (ctx->raw_edid != (struct edid *)fake_edid_info) {kfree (ctx->raw_edid); ctx->raw_edid =NULL ; - -return -EINVAL ; }component_del (&pdev->dev, &vidi_component_ops);
drivers/gpu/drm/radeon/radeon_gem.c +1 -3
@@ -459,7 +459,6 @@ int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data,struct radeon_device *rdev = dev->dev_private;struct drm_radeon_gem_set_domain *args = data;struct drm_gem_object *gobj; -struct radeon_bo *robj;int r;/* for now if someone requests domain CPU -
@@ -472,13 +471,12 @@ int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data,up_read (&rdev->exclusive_lock);return -ENOENT ; } - robj =gem_to_radeon_bo (gobj); r =radeon_gem_set_domain (gobj, args->read_domains, args->write_domain);drm_gem_object_put (gobj);up_read (&rdev->exclusive_lock); - r =radeon_gem_handle_lockup (robj->rdev, r); + r =radeon_gem_handle_lockup (rdev, r);return r; }
drivers/hid/wacom_sys.c +6 -1
@@ -2417,8 +2417,13 @@ static int wacom_parse_and_register(struct wacom *wacom, bool wireless) goto fail_quirks; } -if (features->device_type &WACOM_DEVICETYPE_WL_MONITOR ) +if (features->device_type &WACOM_DEVICETYPE_WL_MONITOR ) { error =hid_hw_open (hdev); +if (error) { +hid_err (hdev,"hw open failed\n" ); + goto fail_quirks; + } + }wacom_set_shared_values (wacom_wac);devres_close_group (&hdev->dev, wacom);
drivers/hv/channel_mgmt.c +16 -2
@@ -829,11 +829,22 @@ static void vmbus_wait_for_unload(void)if (completion_done (&vmbus_connection.unload_event)) goto completed; -for_each_online_cpu (cpu) { +for_each_present_cpu (cpu) {struct hv_per_cpu_context *hv_cpu =per_cpu_ptr (hv_context.cpu_context, cpu); +/* +* In a CoCo VM the synic_message_page is not allocated +* in hv_synic_alloc(). Instead it is set/cleared in +* hv_synic_enable_regs() and hv_synic_disable_regs() +* such that it is set only when the CPU is online. If +* not all present CPUs are online, the message page +* might be NULL, so skip such CPUs. +*/ page_addr = hv_cpu->synic_message_page; +if (!page_addr) +continue ; + msg = (struct hv_message *)page_addr +VMBUS_MESSAGE_SINT ;
@@ -867,11 +878,14 @@ static void vmbus_wait_for_unload(void)* maybe-pending messages on all CPUs to be able to receive new * messages after we reconnect. */ -for_each_online_cpu (cpu) { +for_each_present_cpu (cpu) {struct hv_per_cpu_context *hv_cpu =per_cpu_ptr (hv_context.cpu_context, cpu); page_addr = hv_cpu->synic_message_page; +if (!page_addr) +continue ; + msg = (struct hv_message *)page_addr +VMBUS_MESSAGE_SINT ; msg->header.message_type =HVMSG_NONE ; }
drivers/hv/vmbus_drv.c +2 -3
@@ -1525,7 +1525,7 @@ static int vmbus_bus_init(void) ret =cpuhp_setup_state (CPUHP_AP_ONLINE_DYN ,"hyperv/vmbus:online" , hv_synic_init, hv_synic_cleanup);if (ret <0 ) - goto err_cpuhp; + goto err_alloc; hyperv_cpuhp_online = ret; ret =vmbus_connect ();
@@ -1577,9 +1577,8 @@ static int vmbus_bus_init(void) err_connect:cpuhp_remove_state (hyperv_cpuhp_online); -err_cpuhp: -hv_synic_free (); err_alloc: +hv_synic_free ();if (vmbus_irq ==-1 ) {hv_remove_vmbus_handler (); }else {
drivers/i2c/busses/i2c-designware-core.h +1 -0
@@ -40,6 +40,7 @@#define DW_IC_CON_BUS_CLEAR_CTRL BIT(11)#define DW_IC_DATA_CMD_DAT GENMASK(7, 0) +#define DW_IC_DATA_CMD_FIRST_DATA_BYTE BIT(11)/* * Registers offset
drivers/i2c/busses/i2c-designware-slave.c +4 -0
@@ -176,6 +176,10 @@ static irqreturn_t i2c_dw_isr_slave(int this_irq, void *dev_id) do { regmap_read(dev->map, DW_IC_DATA_CMD, &tmp); + if (tmp & DW_IC_DATA_CMD_FIRST_DATA_BYTE) + i2c_slave_event(dev->slave, + I2C_SLAVE_WRITE_REQUESTED, + &val); val = tmp; i2c_slave_event(dev->slave, I2C_SLAVE_WRITE_RECEIVED, &val);
drivers/i2c/busses/i2c-imx-lpi2c.c +2 -2
@@ -201,8 +201,8 @@ static void lpi2c_imx_stop(struct lpi2c_imx_struct *lpi2c_imx)/* CLKLO = I2C_CLK_RATIO * CLKHI, SETHOLD = CLKHI, DATAVD = CLKHI/2 */ static int lpi2c_imx_config (struct lpi2c_imx_struct *lpi2c_imx) { -u8 prescale, filt, sethold, clkhi, clklo, datavd; -unsigned int clk_rate, clk_cycle; +u8 prescale, filt, sethold, datavd; +unsigned int clk_rate, clk_cycle, clkhi, clklo;enum lpi2c_imx_pincfg pincfg;unsigned int temp;
drivers/i2c/busses/i2c-mchp-pci1xxxx.c +4 -2
@@ -1118,8 +1118,10 @@ static int pci1xxxx_i2c_resume(struct device *dev) static DEFINE_SIMPLE_DEV_PM_OPS(pci1xxxx_i2c_pm_ops, pci1xxxx_i2c_suspend, pci1xxxx_i2c_resume); -static void pci1xxxx_i2c_shutdown (struct pci1xxxx_i2c *i2c) +static void pci1xxxx_i2c_shutdown (void *data) { +struct pci1xxxx_i2c *i2c = data; +pci1xxxx_i2c_config_padctrl (i2c, false);pci1xxxx_i2c_configure_core_reg (i2c, false); }
@@ -1156,7 +1158,7 @@ static int pci1xxxx_i2c_probe_pci(struct pci_dev *pdev,init_completion (&i2c->i2c_xfer_done);pci1xxxx_i2c_init (i2c); - ret =devm_add_action (dev, (void (*)(void *))pci1xxxx_i2c_shutdown, i2c); + ret =devm_add_action (dev, pci1xxxx_i2c_shutdown, i2c);if (ret)return ret;
drivers/input/misc/soc_button_array.c +30 -0
@@ -108,6 +108,27 @@ static const struct dmi_system_id dmi_use_low_level_irq[] = { {}/* Terminating entry */ }; +/* +* Some devices have a wrong entry which points to a GPIO which is +* required in another driver, so this driver must not claim it. +*/ +static const struct dmi_system_id dmi_invalid_acpi_index[] = { + { +/* +* Lenovo Yoga Book X90F / X90L, the PNP0C40 home button entry +* points to a GPIO which is not a home button and which is +* required by the lenovo-yogabook driver. +*/ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Intel Corporation" ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"CHERRYVIEW D1 PLATFORM" ), +DMI_EXACT_MATCH (DMI_PRODUCT_VERSION ,"YETI-11" ), + }, + .driver_data = (void *)1l , + }, + {}/* Terminating entry */ +}; +/* * Get the Nth GPIO number from the ACPI object. */
@@ -137,6 +158,8 @@ soc_button_device_create(struct platform_device *pdev,struct platform_device *pd;struct gpio_keys_button *gpio_keys;struct gpio_keys_platform_data *gpio_keys_pdata; +const struct dmi_system_id *dmi_id; +int invalid_acpi_index =-1 ;int error, gpio, irq;int n_buttons =0 ;
@@ -154,10 +177,17 @@ soc_button_device_create(struct platform_device *pdev, gpio_keys = (void *)(gpio_keys_pdata +1 ); n_buttons =0 ; + dmi_id =dmi_first_match (dmi_invalid_acpi_index); +if (dmi_id) + invalid_acpi_index = (long )dmi_id->driver_data; +for (info = button_info; info->name; info++) {if (info->autorepeat != autorepeat)continue ; +if (info->acpi_index == invalid_acpi_index) +continue ; + error =soc_button_lookup_gpio (&pdev->dev, info->acpi_index, &gpio, &irq);if (error || irq <0 ) {/*
drivers/iommu/amd/iommu.c +4 -4
@@ -2069,10 +2069,6 @@ static struct protection_domain *protection_domain_alloc(unsigned int type)int mode =DEFAULT_PGTABLE_LEVEL ;int ret; - domain =kzalloc (sizeof (*domain),GFP_KERNEL ); -if (!domain) -return NULL ; -/* * Force IOMMU v1 page table when iommu=pt and * when allocating domain for pass-through devices.
@@ -2088,6 +2084,10 @@ static struct protection_domain *protection_domain_alloc(unsigned int type)return NULL ; } + domain =kzalloc (sizeof (*domain),GFP_KERNEL ); +if (!domain) +return NULL ; +switch (pgtable) {case AMD_IOMMU_V1 : ret =protection_domain_init_v1 (domain, mode);
drivers/media/cec/core/cec-adap.c +6 -2
@@ -1090,7 +1090,8 @@ void cec_received_msg_ts(struct cec_adapter *adap,mutex_lock (&adap->lock);dprintk (2 ,"%s: %*ph\n" , __func__, msg->len, msg->msg); - adap->last_initiator =0xff ; +if (!adap->transmit_in_progress) + adap->last_initiator =0xff ;/* Check if this message was for us (directed or broadcast). */ if (!cec_msg_is_broadcast (msg))
@@ -1582,7 +1583,7 @@ static void cec_claim_log_addrs(struct cec_adapter *adap, bool block)* * This function is called with adap->lock held. */ -static int cec_adap_enable (struct cec_adapter *adap) +int cec_adap_enable (struct cec_adapter *adap) {bool enable;int ret =0 ;
@@ -1592,6 +1593,9 @@ static int cec_adap_enable(struct cec_adapter *adap)if (adap->needs_hpd) enable = enable && adap->phys_addr !=CEC_PHYS_ADDR_INVALID ; +if (adap->devnode.unregistered) + enable = false; +if (enable == adap->is_enabled)return 0 ;
drivers/media/cec/core/cec-core.c +2 -0
@@ -191,6 +191,8 @@ static void cec_devnode_unregister(struct cec_adapter *adap)mutex_lock (&adap->lock);__cec_s_phys_addr (adap,CEC_PHYS_ADDR_INVALID , false);__cec_s_log_addrs (adap,NULL , false); +// Disable the adapter (since adap->devnode.unregistered is true) +cec_adap_enable (adap);mutex_unlock (&adap->lock);cdev_device_del (&devnode->cdev, &devnode->dev);
drivers/media/cec/core/cec-priv.h +1 -0
@@ -47,6 +47,7 @@ int cec_monitor_pin_cnt_inc(struct cec_adapter *adap);void cec_monitor_pin_cnt_dec (struct cec_adapter *adap);int cec_adap_status (struct seq_file *file,void *priv);int cec_thread_func (void *_adap); +int cec_adap_enable (struct cec_adapter *adap);void __cec_s_phys_addr (struct cec_adapter *adap,u16 phys_addr,bool block);int __cec_s_log_addrs (struct cec_adapter *adap,struct cec_log_addrs *log_addrs,bool block);
drivers/mmc/host/bcm2835.c +2 -2
@@ -1403,8 +1403,8 @@ static int bcm2835_probe(struct platform_device *pdev) host->max_clk =clk_get_rate (clk); host->irq =platform_get_irq (pdev,0 ); -if (host->irq <=0 ) { - ret = -EINVAL ; +if (host->irq <0 ) { + ret = host->irq; goto err; }
drivers/mmc/host/litex_mmc.c +1 -0
@@ -649,6 +649,7 @@ static struct platform_driver litex_mmc_driver = { .driver = { .name = "litex-mmc", .of_match_table = litex_match, + .probe_type = PROBE_PREFER_ASYNCHRONOUS, }, };module_platform_driver (litex_mmc_driver);
drivers/mmc/host/meson-gx-mmc.c +4 -10
@@ -1006,11 +1006,8 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id)if (data && !cmd->error) data->bytes_xfered = data->blksz * data->blocks; -if (meson_mmc_bounce_buf_read (data) || -meson_mmc_get_next_command (cmd)) - ret =IRQ_WAKE_THREAD ; -else - ret =IRQ_HANDLED ; + +return IRQ_WAKE_THREAD ; } out:
@@ -1022,9 +1019,6 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id)writel (start, host->regs +SD_EMMC_START ); } -if (ret ==IRQ_HANDLED ) -meson_mmc_request_done (host->mmc, cmd->mrq); -return ret; }
@@ -1208,8 +1202,8 @@ static int meson_mmc_probe(struct platform_device *pdev)return PTR_ERR (host->regs); host->irq =platform_get_irq (pdev,0 ); -if (host->irq <=0 ) -return -EINVAL ; +if (host->irq <0 ) +return host->irq; cd_irq =platform_get_irq_optional (pdev,1 );mmc_gpio_set_cd_irq (mmc, cd_irq);
drivers/mmc/host/mmci.c +2 -1
@@ -1735,7 +1735,8 @@ static void mmci_set_max_busy_timeout(struct mmc_host *mmc)return ;if (host->variant->busy_timeout && mmc->actual_clock) - max_busy_timeout = ~0UL / (mmc->actual_clock /MSEC_PER_SEC ); + max_busy_timeout =U32_MAX /DIV_ROUND_UP (mmc->actual_clock, +MSEC_PER_SEC ); mmc->max_busy_timeout = max_busy_timeout; }
drivers/mmc/host/mtk-sd.c +1 -1
@@ -2680,7 +2680,7 @@ static int msdc_drv_probe(struct platform_device *pdev) host->irq =platform_get_irq (pdev,0 );if (host->irq <0 ) { - ret = -EINVAL ; + ret = host->irq; goto host_free; }
drivers/mmc/host/mvsdio.c +1 -1
@@ -704,7 +704,7 @@ static int mvsd_probe(struct platform_device *pdev) } irq =platform_get_irq (pdev,0 );if (irq <0 ) -return -ENXIO ; +return irq; mmc =mmc_alloc_host (sizeof (struct mvsd_host ), &pdev->dev);if (!mmc) {
drivers/mmc/host/omap.c +1 -1
@@ -1343,7 +1343,7 @@ static int mmc_omap_probe(struct platform_device *pdev) irq =platform_get_irq (pdev,0 );if (irq <0 ) -return -ENXIO ; +return irq; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); host->virt_base =devm_ioremap_resource (&pdev->dev, res);
drivers/mmc/host/omap_hsmmc.c +4 -2
@@ -1791,9 +1791,11 @@ static int omap_hsmmc_probe(struct platform_device *pdev) } res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - irq =platform_get_irq (pdev,0 ); -if (res ==NULL || irq <0 ) +if (!res)return -ENXIO ; + irq =platform_get_irq (pdev,0 ); +if (irq <0 ) +return irq; base =devm_ioremap_resource (&pdev->dev, res);if (IS_ERR (base))
drivers/mmc/host/owl-mmc.c +1 -1
@@ -638,7 +638,7 @@ static int owl_mmc_probe(struct platform_device *pdev) owl_host->irq =platform_get_irq (pdev,0 );if (owl_host->irq <0 ) { - ret = -EINVAL ; + ret = owl_host->irq; goto err_release_channel; }
drivers/mmc/host/sdhci-acpi.c +1 -1
@@ -829,7 +829,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev) host->ops = &sdhci_acpi_ops_dflt; host->irq =platform_get_irq (pdev,0 );if (host->irq <0 ) { - err = -EINVAL ; + err = host->irq; goto err_free; }
drivers/mmc/host/sdhci-msm.c +3 -0
@@ -2479,6 +2479,9 @@ static inline void sdhci_msm_get_of_property(struct platform_device *pdev, msm_host->ddr_config =DDR_CONFIG_POR_VAL ;of_property_read_u32 (node,"qcom,dll-config" , &msm_host->dll_config); + +if (of_device_is_compatible (node,"qcom,msm8916-sdhci" )) + host->quirks2 |=SDHCI_QUIRK2_BROKEN_64_BIT_DMA ; }static int sdhci_msm_gcc_reset (struct device *dev,struct sdhci_host *host)
drivers/mmc/host/sdhci-spear.c +2 -2
@@ -65,8 +65,8 @@ static int sdhci_probe(struct platform_device *pdev) host->hw_name ="sdhci" ; host->ops = &sdhci_pltfm_ops; host->irq =platform_get_irq (pdev,0 ); -if (host->irq <=0 ) { - ret = -EINVAL ; +if (host->irq <0 ) { + ret = host->irq; goto err_host; } host->quirks =SDHCI_QUIRK_BROKEN_ADMA ;
drivers/mmc/host/sh_mmcif.c +1 -1
@@ -1400,7 +1400,7 @@ static int sh_mmcif_probe(struct platform_device *pdev) irq[0 ] =platform_get_irq (pdev,0 ); irq[1 ] =platform_get_irq_optional (pdev,1 );if (irq[0 ] <0 ) -return -ENXIO ; +return irq[0 ]; reg =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (reg))
drivers/mmc/host/sunxi-mmc.c +2 -2
@@ -1350,8 +1350,8 @@ static int sunxi_mmc_resource_request(struct sunxi_mmc_host *host,return ret; host->irq =platform_get_irq (pdev,0 ); -if (host->irq <=0 ) { - ret = -EINVAL ; +if (host->irq <0 ) { + ret = host->irq; goto error_disable_mmc; }
drivers/mmc/host/usdhi6rol0.c +4 -2
@@ -1757,8 +1757,10 @@ static int usdhi6_probe(struct platform_device *pdev) irq_cd =platform_get_irq_byname (pdev,"card detect" ); irq_sd =platform_get_irq_byname (pdev,"data" ); irq_sdio =platform_get_irq_byname (pdev,"SDIO" ); -if (irq_sd <0 || irq_sdio <0 ) -return -ENODEV ; +if (irq_sd <0 ) +return irq_sd; +if (irq_sdio <0 ) +return irq_sdio; mmc =mmc_alloc_host (sizeof (struct usdhi6_host ), dev);if (!mmc)
drivers/net/dsa/mt7530.c +32 -3
@@ -419,6 +419,20 @@ static void mt7530_pll_setup(struct mt7530_priv *priv)core_set (priv,CORE_TRGMII_GSW_CLK_CG ,REG_GSWCK_EN ); } +/* If port 6 is available as a CPU port, always prefer that as the default, +* otherwise don't care. +*/ +static struct dsa_port * +mt753x_preferred_default_local_cpu_port (struct dsa_switch *ds) +{ +struct dsa_port *cpu_dp =dsa_to_port (ds,6 ); + +if (dsa_port_is_cpu (cpu_dp)) +return cpu_dp; + +return NULL ; +} +/* Setup port 6 interface mode and TRGMII TX circuit */ static int mt7530_pad_clk_setup (struct dsa_switch *ds,phy_interface_t interface)
@@ -991,6 +1005,18 @@ static void mt7530_setup_port5(struct dsa_switch *ds, phy_interface_t interface)mutex_unlock (&priv->reg_mutex); } +static void +mt753x_trap_frames (struct mt7530_priv *priv) +{ +/* Trap BPDUs to the CPU port(s) */ +mt7530_rmw (priv,MT753X_BPC ,MT753X_BPDU_PORT_FW_MASK , +MT753X_BPDU_CPU_ONLY ); + +/* Trap LLDP frames with :0E MAC DA to the CPU port(s) */ +mt7530_rmw (priv,MT753X_RGAC2 ,MT753X_R0E_PORT_FW_MASK , +MT753X_R0E_PORT_FW (MT753X_BPDU_CPU_ONLY )); +} +static int mt753x_cpu_port_enable (struct dsa_switch *ds,int port) {
@@ -1013,7 +1039,7 @@ mt753x_cpu_port_enable(struct dsa_switch *ds, int port) UNU_FFP(BIT(port)));/* Set CPU port number */ -if (priv->id ==ID_MT7621 ) +if (priv->id ==ID_MT7530 || priv->id ==ID_MT7621 )mt7530_rmw (priv,MT7530_MFC ,CPU_MASK ,CPU_EN |CPU_PORT (port));/* CPU port gets connected to all user ports of
@@ -2214,6 +2240,8 @@ mt7530_setup(struct dsa_switch *ds) priv->p6_interface =PHY_INTERFACE_MODE_NA ; +mt753x_trap_frames (priv); +/* Enable and reset MIB counters */ mt7530_mib_reset (ds);
@@ -2320,8 +2348,8 @@ mt7531_setup_common(struct dsa_switch *ds) BIT(cpu_dp->index));break ; } -mt7530_rmw (priv,MT753X_BPC ,MT753X_BPDU_PORT_FW_MASK , -MT753X_BPDU_CPU_ONLY ); + +mt753x_trap_frames (priv);/* Enable and reset MIB counters */ mt7530_mib_reset (ds);
@@ -3177,6 +3205,7 @@ static int mt753x_set_mac_eee(struct dsa_switch *ds, int port,static const struct dsa_switch_ops mt7530_switch_ops = { .get_tag_protocol = mtk_get_tag_protocol, .setup = mt753x_setup, + .preferred_default_local_cpu_port = mt753x_preferred_default_local_cpu_port, .get_strings = mt7530_get_strings, .get_ethtool_stats = mt7530_get_ethtool_stats, .get_sset_count = mt7530_get_sset_count,
drivers/net/dsa/mt7530.h +5 -0
@@ -65,6 +65,11 @@ enum mt753x_id {#define MT753X_BPC 0x24#define MT753X_BPDU_PORT_FW_MASK GENMASK(2, 0) +/* Register for :03 and :0E MAC DA frame control */ +#define MT753X_RGAC2 0x2c +#define MT753X_R0E_PORT_FW_MASK GENMASK(18, 16) +#define MT753X_R0E_PORT_FW (x) FIELD_PREP(MT753X_R0E_PORT_FW_MASK, x) +enum mt753x_bpdu_port_fw {MT753X_BPDU_FOLLOW_MFC ,MT753X_BPDU_CPU_EXCLUDE =4 ,
drivers/net/ethernet/emulex/benet/be_main.c +2 -2
@@ -1136,8 +1136,8 @@ static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter, eth_hdr_len =ntohs (skb->protocol) ==ETH_P_8021Q ?VLAN_ETH_HLEN :ETH_HLEN ;if (skb->len <=60 && - (lancer_chip (adapter) ||skb_vlan_tag_present (skb)) && -is_ipv4_pkt (skb)) { + (lancer_chip (adapter) ||BE3_chip (adapter) || +skb_vlan_tag_present (skb)) &&is_ipv4_pkt (skb)) { ip = (struct iphdr *)ip_hdr (skb);pskb_trim (skb, eth_hdr_len +ntohs (ip->tot_len)); }
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c +8 -1
@@ -1403,9 +1403,13 @@ dr_action_create_reformat_action(struct mlx5dr_domain *dmn, }case DR_ACTION_TYP_TNL_L3_TO_L2 : { -u8 hw_actions[ACTION_CACHE_LINE_SIZE ] = {}; +u8 *hw_actions;int ret; + hw_actions =kzalloc (ACTION_CACHE_LINE_SIZE ,GFP_KERNEL ); +if (!hw_actions) +return -ENOMEM ; + ret = mlx5dr_ste_set_action_decap_l3_list(dmn->ste_ctx, data, data_sz, hw_actions,
@@ -1413,6 +1417,7 @@ dr_action_create_reformat_action(struct mlx5dr_domain *dmn, &action->rewrite->num_of_actions);if (ret) {mlx5dr_dbg (dmn,"Failed creating decap l3 action list\n" ); +kfree (hw_actions);return ret; }
@@ -1420,6 +1425,7 @@ dr_action_create_reformat_action(struct mlx5dr_domain *dmn, DR_CHUNK_SIZE_8);if (!action->rewrite->chunk) {mlx5dr_dbg (dmn,"Failed allocating modify header chunk\n" ); +kfree (hw_actions);return -ENOMEM ; }
@@ -1433,6 +1439,7 @@ dr_action_create_reformat_action(struct mlx5dr_domain *dmn,if (ret) {mlx5dr_dbg (dmn,"Writing decap l3 actions to ICM failed\n" );mlx5dr_icm_free_chunk (action->rewrite->chunk); +kfree (hw_actions);return ret; }return 0 ;
drivers/net/ethernet/qualcomm/qca_spi.c +1 -2
@@ -582,8 +582,7 @@ qcaspi_spi_thread(void *data)while (!kthread_should_stop ()) {set_current_state (TASK_INTERRUPTIBLE );if ((qca->intr_req == qca->intr_svc) && - (qca->txr.skb[qca->txr.head] ==NULL ) && - (qca->sync ==QCASPI_SYNC_READY )) + !qca->txr.skb[qca->txr.head])schedule ();set_current_state (TASK_RUNNING );
drivers/net/ethernet/sfc/ef10.c +18 -7
@@ -2950,7 +2950,7 @@ static u32 efx_ef10_extract_event_ts(efx_qword_t *event)return tstamp; } -static void +static int efx_ef10_handle_tx_event (struct efx_channel *channel,efx_qword_t *event) {struct efx_nic *efx = channel->efx;
@@ -2958,13 +2958,14 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)unsigned int tx_ev_desc_ptr;unsigned int tx_ev_q_label;unsigned int tx_ev_type; +int work_done;u64 ts_part;if (unlikely (READ_ONCE (efx->reset_pending))) -return ; +return 0 ;if (unlikely (EFX_QWORD_FIELD (*event,ESF_DZ_TX_DROP_EVENT ))) -return ; +return 0 ;/* Get the transmit queue */ tx_ev_q_label =EFX_QWORD_FIELD (*event,ESF_DZ_TX_QLABEL );
@@ -2973,8 +2974,7 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)if (!tx_queue->timestamping) {/* Transmit completion */ tx_ev_desc_ptr =EFX_QWORD_FIELD (*event,ESF_DZ_TX_DESCR_INDX ); -efx_xmit_done (tx_queue, tx_ev_desc_ptr & tx_queue->ptr_mask); -return ; +return efx_xmit_done (tx_queue, tx_ev_desc_ptr & tx_queue->ptr_mask); }/* Transmit timestamps are only available for 8XXX series. They result
@@ -3000,6 +3000,7 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)* fields in the event. */ tx_ev_type =EFX_QWORD_FIELD (*event,ESF_EZ_TX_SOFT1 ); + work_done =0 ;switch (tx_ev_type) {case TX_TIMESTAMP_EVENT_TX_EV_COMPLETION :
@@ -3016,6 +3017,7 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) tx_queue->completed_timestamp_major = ts_part;efx_xmit_done_single (tx_queue); + work_done =1 ;break ;default :
@@ -3026,6 +3028,8 @@ efx_ef10_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) EFX_QWORD_VAL(*event));break ; } + +return work_done; } static void
@@ -3081,13 +3085,16 @@ static void efx_ef10_handle_driver_generated_event(struct efx_channel *channel, } } +#define EFX_NAPI_MAX_TX 512 +static int efx_ef10_ev_process (struct efx_channel *channel,int quota) {struct efx_nic *efx = channel->efx;efx_qword_t event, *p_event;unsigned int read_ptr; -int ev_code; +int spent_tx =0 ;int spent =0 ; +int ev_code;if (quota <=0 )return spent;
@@ -3126,7 +3133,11 @@ static int efx_ef10_ev_process(struct efx_channel *channel, int quota) }break ;case ESE_DZ_EV_CODE_TX_EV : -efx_ef10_handle_tx_event (channel, &event); + spent_tx +=efx_ef10_handle_tx_event (channel, &event); +if (spent_tx >=EFX_NAPI_MAX_TX ) { + spent = quota; + goto out; + }break ;case ESE_DZ_EV_CODE_DRIVER_EV :efx_ef10_handle_driver_event (channel, &event);
drivers/net/ethernet/sfc/ef100_nic.c +6 -1
@@ -253,6 +253,8 @@ static void ef100_ev_read_ack(struct efx_channel *channel) efx_reg(channel->efx, ER_GZ_EVQ_INT_PRIME)); } +#define EFX_NAPI_MAX_TX 512 +static int ef100_ev_process (struct efx_channel *channel,int quota) {struct efx_nic *efx = channel->efx;
@@ -260,6 +262,7 @@ static int ef100_ev_process(struct efx_channel *channel, int quota)bool evq_phase, old_evq_phase;unsigned int read_ptr;efx_qword_t *p_event; +int spent_tx =0 ;int spent =0 ;bool ev_phase;int ev_type;
@@ -295,7 +298,9 @@ static int ef100_ev_process(struct efx_channel *channel, int quota)efx_mcdi_process_event (channel, p_event);break ;case ESE_GZ_EF100_EV_TX_COMPLETION : -ef100_ev_tx (channel, p_event); + spent_tx +=ef100_ev_tx (channel, p_event); +if (spent_tx >=EFX_NAPI_MAX_TX ) + spent = quota;break ;case ESE_GZ_EF100_EV_DRIVER : netif_info(efx, drv, efx->net_dev,
drivers/net/ethernet/sfc/ef100_tx.c +2 -2
@@ -346,7 +346,7 @@ void ef100_tx_write(struct efx_tx_queue *tx_queue)ef100_tx_push_buffers (tx_queue); } -void ef100_ev_tx (struct efx_channel *channel,const efx_qword_t *p_event) +int ef100_ev_tx (struct efx_channel *channel,const efx_qword_t *p_event) {unsigned int tx_done =EFX_QWORD_FIELD (*p_event,ESF_GZ_EV_TXCMPL_NUM_DESC );
@@ -357,7 +357,7 @@ void ef100_ev_tx(struct efx_channel *channel, const efx_qword_t *p_event)unsigned int tx_index = (tx_queue->read_count + tx_done -1 ) & tx_queue->ptr_mask; -efx_xmit_done (tx_queue, tx_index); +return efx_xmit_done (tx_queue, tx_index); }/* Add a socket buffer to a TX queue
drivers/net/ethernet/sfc/ef100_tx.h +1 -1
@@ -20,7 +20,7 @@ void ef100_tx_init(struct efx_tx_queue *tx_queue);void ef100_tx_write (struct efx_tx_queue *tx_queue);unsigned int ef100_tx_max_skb_descs (struct efx_nic *efx); -void ef100_ev_tx (struct efx_channel *channel,const efx_qword_t *p_event); +int ef100_ev_tx (struct efx_channel *channel,const efx_qword_t *p_event);netdev_tx_t ef100_enqueue_skb (struct efx_tx_queue *tx_queue,struct sk_buff *skb); int __ef100_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb,
drivers/net/ethernet/sfc/tx_common.c +3 -1
@@ -249,7 +249,7 @@ void efx_xmit_done_check_empty(struct efx_tx_queue *tx_queue) } } -void efx_xmit_done (struct efx_tx_queue *tx_queue,unsigned int index) +int efx_xmit_done (struct efx_tx_queue *tx_queue,unsigned int index) {unsigned int fill_level, pkts_compl =0 , bytes_compl =0 ;unsigned int efv_pkts_compl =0 ;
@@ -279,6 +279,8 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) }efx_xmit_done_check_empty (tx_queue); + +return pkts_compl + efv_pkts_compl; }/* Remove buffers put into a tx_queue for the current packet.
drivers/net/ethernet/sfc/tx_common.h +1 -1
@@ -28,7 +28,7 @@ static inline bool efx_tx_buffer_in_use(struct efx_tx_buffer *buffer) }void efx_xmit_done_check_empty (struct efx_tx_queue *tx_queue); -void efx_xmit_done (struct efx_tx_queue *tx_queue,unsigned int index); +int efx_xmit_done (struct efx_tx_queue *tx_queue,unsigned int index);void efx_enqueue_unwind (struct efx_tx_queue *tx_queue,unsigned int insert_count);
drivers/net/ieee802154/mac802154_hwsim.c +4 -2
@@ -685,7 +685,7 @@ static int hwsim_del_edge_nl(struct sk_buff *msg, struct genl_info *info)static int hwsim_set_edge_lqi (struct sk_buff *msg,struct genl_info *info) {struct nlattr *edge_attrs[MAC802154_HWSIM_EDGE_ATTR_MAX +1 ]; -struct hwsim_edge_info *einfo; +struct hwsim_edge_info *einfo, *einfo_old;struct hwsim_phy *phy_v0;struct hwsim_edge *e;u32 v0, v1;
@@ -723,8 +723,10 @@ static int hwsim_set_edge_lqi(struct sk_buff *msg, struct genl_info *info)list_for_each_entry_rcu (e, &phy_v0->edges, list) {if (e->endpoint->idx == v1) { einfo->lqi = lqi; -rcu_assign_pointer (e->info, einfo); + einfo_old =rcu_replace_pointer (e->info, einfo, +lockdep_is_held (&hwsim_phys_lock));rcu_read_unlock (); +kfree_rcu (einfo_old, rcu);mutex_unlock (&hwsim_phys_lock);return 0 ; }
drivers/net/phy/dp83867.c +1 -1
@@ -905,7 +905,7 @@ static int dp83867_phy_reset(struct phy_device *phydev) {int err; - err =phy_write (phydev,DP83867_CTRL ,DP83867_SW_RESTART ); + err =phy_write (phydev,DP83867_CTRL ,DP83867_SW_RESET );if (err <0 )return err;
drivers/net/phy/mdio_bus.c +1 -1
@@ -1287,7 +1287,7 @@ EXPORT_SYMBOL_GPL(mdiobus_modify_changed);* @mask: bit mask of bits to clear * @set: bit mask of bits to set */ -int mdiobus_c45_modify_changed (struct mii_bus *bus,int devad,int addr, +int mdiobus_c45_modify_changed (struct mii_bus *bus,int addr,int devad,u32 regnum,u16 mask,u16 set) {int err;
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +2 -0
@@ -547,6 +547,8 @@ static const struct iwl_dev_info iwl_dev_info_table[] = {IWL_DEV_INFO (0x54F0 ,0x1692 , iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),IWL_DEV_INFO (0x7A70 ,0x1691 , iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),IWL_DEV_INFO (0x7A70 ,0x1692 , iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name), +IWL_DEV_INFO (0x7AF0 ,0x1691 , iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name), +IWL_DEV_INFO (0x7AF0 ,0x1692 , iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),IWL_DEV_INFO (0x271C ,0x0214 , iwl9260_2ac_cfg, iwl9260_1_name), IWL_DEV_INFO(0x7E40, 0x1691, iwl_cfg_ma_a0_gf4_a0, iwl_ax411_killer_1690s_name),
drivers/nfc/nfcsim.c +0 -4
@@ -336,10 +336,6 @@ static struct dentry *nfcsim_debugfs_root;static void nfcsim_debugfs_init (void ) { nfcsim_debugfs_root =debugfs_create_dir ("nfcsim" ,NULL ); - -if (!nfcsim_debugfs_root) -pr_err ("Could not create debugfs entry\n" ); - }static void nfcsim_debugfs_remove (void )
drivers/nvme/host/core.c +48 -4
102 lines not on this page · raw message
drivers/nvme/host/ioctl.c +1 -1
@@ -254,7 +254,7 @@ static int nvme_submit_user_cmd(struct request_queue *q,blk_mq_free_request (req);if (effects) -nvme_passthru_end (ctrl, effects, cmd, ret); +nvme_passthru_end (ctrl, ns, effects, cmd, ret);return ret; }
drivers/nvme/host/nvme.h +2 -1
@@ -328,6 +328,7 @@ struct nvme_ctrl {struct delayed_work ka_work;struct delayed_work failfast_work;struct nvme_command ka_cmd; +unsigned long ka_last_check_time;struct work_struct fw_act_work;unsigned long events;
@@ -1077,7 +1078,7 @@ u32 nvme_command_effects(struct nvme_ctrl *ctrl, struct nvme_ns *ns, u8 opcode);u32 nvme_passthru_start (struct nvme_ctrl *ctrl,struct nvme_ns *ns,u8 opcode);int nvme_execute_rq (struct request *rq,bool at_head); -void nvme_passthru_end (struct nvme_ctrl *ctrl,u32 effects, +void nvme_passthru_end (struct nvme_ctrl *ctrl,struct nvme_ns *ns,u32 effects,struct nvme_command *cmd,int status);struct nvme_ctrl *nvme_ctrl_from_file (struct file *file);struct nvme_ns *nvme_find_get_ns (struct nvme_ctrl *ctrl,unsigned nsid);
drivers/nvme/target/passthru.c +1 -1
@@ -243,7 +243,7 @@ static void nvmet_passthru_execute_cmd_work(struct work_struct *w)blk_mq_free_request (rq);if (effects) -nvme_passthru_end (ctrl, effects, req->cmd, status); +nvme_passthru_end (ctrl, ns, effects, req->cmd, status); } static enum rq_end_io_ret nvmet_passthru_req_done(struct request *rq,
drivers/pci/controller/pci-hyperv.c +82 -57
272 lines not on this page · raw message
drivers/platform/x86/amd/pmf/core.c +5 -5
@@ -297,6 +297,8 @@ static void amd_pmf_init_features(struct amd_pmf_dev *dev)/* Enable Static Slider */ if (is_apmf_func_supported (dev,APMF_FUNC_STATIC_SLIDER_GRANULAR )) {amd_pmf_init_sps (dev); + dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call; +power_supply_reg_notifier (&dev->pwr_src_notifier);dev_dbg (dev->dev,"SPS enabled and Platform Profiles registered\n" ); }
@@ -315,8 +317,10 @@ static void amd_pmf_init_features(struct amd_pmf_dev *dev)static void amd_pmf_deinit_features (struct amd_pmf_dev *dev) { -if (is_apmf_func_supported (dev,APMF_FUNC_STATIC_SLIDER_GRANULAR )) +if (is_apmf_func_supported (dev,APMF_FUNC_STATIC_SLIDER_GRANULAR )) { +power_supply_unreg_notifier (&dev->pwr_src_notifier);amd_pmf_deinit_sps (dev); + }if (is_apmf_func_supported (dev,APMF_FUNC_AUTO_MODE )) {amd_pmf_deinit_auto_mode (dev);
@@ -399,9 +403,6 @@ static int amd_pmf_probe(struct platform_device *pdev)apmf_install_handler (dev);amd_pmf_dbgfs_register (dev); - dev->pwr_src_notifier.notifier_call = amd_pmf_pwr_src_notify_call; -power_supply_reg_notifier (&dev->pwr_src_notifier); -dev_info (dev->dev,"registered PMF device successfully\n" );return 0 ;
@@ -411,7 +412,6 @@ static int amd_pmf_remove(struct platform_device *pdev) {struct amd_pmf_dev *dev =platform_get_drvdata (pdev); -power_supply_unreg_notifier (&dev->pwr_src_notifier);amd_pmf_deinit_features (dev);apmf_acpi_deinit (dev);amd_pmf_dbgfs_unregister (dev);
drivers/platform/x86/intel/int3472/clk_and_regulator.c +8 -5
@@ -101,9 +101,11 @@ int skl_int3472_register_clock(struct int3472_discrete_device *int3472, int3472->clock.ena_gpio =acpi_get_and_request_gpiod (path, agpio->pin_table[0 ],"int3472,clk-enable" ); -if (IS_ERR (int3472->clock.ena_gpio)) -return dev_err_probe (int3472->dev,PTR_ERR (int3472->clock.ena_gpio), -"getting clk-enable GPIO\n" ); +if (IS_ERR (int3472->clock.ena_gpio)) { + ret =PTR_ERR (int3472->clock.ena_gpio); + int3472->clock.ena_gpio =NULL ; +return dev_err_probe (int3472->dev, ret,"getting clk-enable GPIO\n" ); + }if (polarity ==GPIO_ACTIVE_LOW )gpiod_toggle_active_low (int3472->clock.ena_gpio);
@@ -199,8 +201,9 @@ int skl_int3472_register_regulator(struct int3472_discrete_device *int3472, int3472->regulator.gpio =acpi_get_and_request_gpiod (path, agpio->pin_table[0 ],"int3472,regulator" );if (IS_ERR (int3472->regulator.gpio)) { -dev_err (int3472->dev,"Failed to get regulator GPIO line\n" ); -return PTR_ERR (int3472->regulator.gpio); + ret =PTR_ERR (int3472->regulator.gpio); + int3472->regulator.gpio =NULL ; +return dev_err_probe (int3472->dev, ret,"getting regulator GPIO\n" ); }/* Ensure the pin is in output mode and non-active state */
drivers/s390/cio/device.c +4 -1
@@ -1376,6 +1376,7 @@ void ccw_device_set_notoper(struct ccw_device *cdev)enum io_sch_action {IO_SCH_UNREG ,IO_SCH_ORPH_UNREG , +IO_SCH_UNREG_CDEV ,IO_SCH_ATTACH ,IO_SCH_UNREG_ATTACH ,IO_SCH_ORPH_ATTACH ,
@@ -1408,7 +1409,7 @@ static enum io_sch_action sch_get_action(struct subchannel *sch) }if ((sch->schib.pmcw.pam & sch->opm) ==0 ) {if (ccw_device_notify (cdev,CIO_NO_PATH ) !=NOTIFY_OK ) -return IO_SCH_UNREG ; +return IO_SCH_UNREG_CDEV ;return IO_SCH_DISC ; }if (device_is_disconnected (cdev))
@@ -1470,6 +1471,7 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process)case IO_SCH_ORPH_ATTACH :ccw_device_set_disconnected (cdev);break ; +case IO_SCH_UNREG_CDEV :case IO_SCH_UNREG_ATTACH :case IO_SCH_UNREG :if (!cdev)
@@ -1503,6 +1505,7 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process)if (rc) goto out;break ; +case IO_SCH_UNREG_CDEV :case IO_SCH_UNREG_ATTACH :spin_lock_irqsave (sch->lock, flags);sch_set_cdev (sch,NULL );
drivers/soundwire/dmi-quirks.c +7 -0
@@ -99,6 +99,13 @@ static const struct dmi_system_id adr_remap_quirk_table[] = { }, .driver_data = (void *)intel_tgl_bios, }, + { + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"HP" ), + DMI_MATCH(DMI_BOARD_NAME, "8709"), + }, + .driver_data = (void *)intel_tgl_bios, + }, {/* quirk used for NUC15 'Bishop County' LAPBC510 and LAPBC710 skews */ .matches = {
drivers/soundwire/qcom.c +13 -4
@@ -1098,8 +1098,10 @@ static int qcom_swrm_startup(struct snd_pcm_substream *substream, } sruntime =sdw_alloc_stream (dai->name); -if (!sruntime) -return -ENOMEM ; +if (!sruntime) { + ret = -ENOMEM ; + goto err_alloc; + } ctrl->sruntime[dai->id] = sruntime;
@@ -1109,12 +1111,19 @@ static int qcom_swrm_startup(struct snd_pcm_substream *substream,if (ret <0 && ret != -ENOTSUPP ) {dev_err (dai->dev,"Failed to set sdw stream on %s\n" , codec_dai->name); -sdw_release_stream (sruntime); -return ret; + goto err_set_stream; } }return 0 ; + +err_set_stream: +sdw_release_stream (sruntime); +err_alloc: +pm_runtime_mark_last_busy (ctrl->dev); +pm_runtime_put_autosuspend (ctrl->dev); + +return ret; } static void qcom_swrm_shutdown(struct snd_pcm_substream *substream,
drivers/spi/spi-fsl-lpspi.c +6 -1
@@ -910,9 +910,14 @@ static int fsl_lpspi_probe(struct platform_device *pdev) ret =fsl_lpspi_dma_init (&pdev->dev, fsl_lpspi, controller);if (ret == -EPROBE_DEFER ) goto out_pm_get; -if (ret <0 )dev_err (&pdev->dev,"dma setup error %d, use pio\n" , ret); +else +/* +* disable LPSPI module IRQ when enable DMA mode successfully, +* to prevent the unexpected LPSPI module IRQ events. +*/ +disable_irq (irq); ret =devm_spi_register_controller (&pdev->dev, controller);if (ret <0 ) {
drivers/spi/spi-geni-qcom.c +2 -0
@@ -646,6 +646,8 @@ static int spi_geni_init(struct spi_geni_master *mas)geni_se_select_mode (se,GENI_GPI_DMA );dev_dbg (mas->dev,"Using GPI DMA mode for SPI\n" );break ; + }else if (ret == -EPROBE_DEFER ) { + goto out_pm; }/* * in case of failure to get gpi dma channel, we can still do the
drivers/target/iscsi/iscsi_target.c +0 -2
@@ -363,8 +363,6 @@ struct iscsi_np *iscsit_add_np(init_completion (&np->np_restart_comp);INIT_LIST_HEAD (&np->np_list); -timer_setup (&np->np_login_timer, iscsi_handle_login_thread_timeout,0 ); - ret =iscsi_target_setup_login_socket (np, sockaddr);if (ret !=0 ) {kfree (np);
drivers/target/iscsi/iscsi_target_login.c +5 -58
103 lines not on this page · raw message
drivers/target/iscsi/iscsi_target_nego.c +42 -32
147 lines not on this page · raw message
drivers/target/iscsi/iscsi_target_util.c +51 -0
57 lines not on this page · raw message
drivers/target/iscsi/iscsi_target_util.h +4 -0
@@ -56,6 +56,10 @@ extern void iscsit_handle_nopin_timeout(struct timer_list *t);extern void __iscsit_start_nopin_timer (struct iscsit_conn *);extern void iscsit_start_nopin_timer (struct iscsit_conn *);extern void iscsit_stop_nopin_timer (struct iscsit_conn *); +extern void iscsit_login_timeout (struct timer_list *t); +extern void iscsit_start_login_timer (struct iscsit_conn *,struct task_struct *kthr); +extern void iscsit_stop_login_timer (struct iscsit_conn *); +extern int iscsit_set_login_timer_kworker (struct iscsit_conn *,struct task_struct *kthr);extern int iscsit_send_tx_data (struct iscsit_cmd *,struct iscsit_conn *,int );extern int iscsit_fe_sendpage_sg (struct iscsit_cmd *,struct iscsit_conn *);extern int iscsit_tx_login_rsp (struct iscsit_conn *,u8 ,u8 );
drivers/thermal/intel/intel_soc_dts_iosf.c +1 -1
@@ -401,7 +401,7 @@ struct intel_soc_dts_sensors *intel_soc_dts_iosf_init(spin_lock_init (&sensors->intr_notify_lock);mutex_init (&sensors->dts_update_lock); sensors->intr_type = intr_type; - sensors->tj_max = tj_max; + sensors->tj_max = tj_max *1000 ;if (intr_type ==INTEL_SOC_DTS_INTERRUPT_NONE ) notification = false;else
drivers/usb/gadget/udc/amd5536udc_pci.c +3 -0
@@ -170,6 +170,9 @@ static int udc_pci_probe( retval = -ENODEV ; goto err_probe; } + + udc = dev; +return 0 ; err_probe:
drivers/vhost/net.c +8 -3
@@ -935,13 +935,18 @@ static void handle_tx_zerocopy(struct vhost_net *net, struct socket *sock) err = sock->ops->sendmsg (sock, &msg, len);if (unlikely (err <0 )) { +bool retry = err == -EAGAIN || err == -ENOMEM || err == -ENOBUFS ; +if (zcopy_used) {if (vq->heads[ubuf->desc].len ==VHOST_DMA_IN_PROGRESS )vhost_net_ubuf_put (ubufs); - nvq->upend_idx = ((unsigned )nvq->upend_idx -1 ) - %UIO_MAXIOV ; +if (retry) + nvq->upend_idx = ((unsigned )nvq->upend_idx -1 ) + %UIO_MAXIOV ; +else + vq->heads[ubuf->desc].len =VHOST_DMA_DONE_LEN ; } -if (err == -EAGAIN || err == -ENOMEM || err == -ENOBUFS ) { +if (retry) {vhost_discard_vq_desc (vq,1 );vhost_net_enable_vq (net, vq);break ;
drivers/vhost/vdpa.c +13 -0
@@ -385,7 +385,10 @@ static long vhost_vdpa_set_features(struct vhost_vdpa *v, u64 __user *featurep) {struct vdpa_device *vdpa = v->vdpa;const struct vdpa_config_ops *ops = vdpa->config; +struct vhost_dev *d = &v->vdev; +u64 actual_features;u64 features; +int i;/* * It's not allowed to change the features after they have
@@ -400,6 +403,16 @@ static long vhost_vdpa_set_features(struct vhost_vdpa *v, u64 __user *featurep)if (vdpa_set_features (vdpa, features))return -EINVAL ; +/* let the vqs know what has been configured */ + actual_features = ops->get_driver_features (vdpa); +for (i =0 ; i < d->nvqs; ++i) { +struct vhost_virtqueue *vq = d->vqs[i]; + +mutex_lock (&vq->mutex); + vq->acked_features = actual_features; +mutex_unlock (&vq->mutex); + } +return 0 ; }
fs/afs/write.c +5 -2
@@ -731,6 +731,7 @@ static int afs_writepages_region(struct address_space *mapping,* (changing page->mapping to NULL), or even swizzled * back from swapper_space to tmpfs file mapping */ +try_again:if (wbc->sync_mode !=WB_SYNC_NONE ) { ret =folio_lock_killable (folio);if (ret <0 ) {
@@ -757,12 +758,14 @@ static int afs_writepages_region(struct address_space *mapping,#ifdef CONFIG_AFS_FSCACHE folio_wait_fscache (folio);#endif - }else { - start +=folio_size (folio); + goto try_again; } + + start +=folio_size (folio);if (wbc->sync_mode ==WB_SYNC_NONE ) {if (skips >=5 ||need_resched ()) { *_next = start; +folio_batch_release (&fbatch);_leave (" = 0 [%llx]" , *_next);return 0 ; }
fs/btrfs/tree-log.c +1 -1
@@ -6163,7 +6163,7 @@ static int log_delayed_deletions_incremental(struct btrfs_trans_handle *trans, {struct btrfs_root *log = inode->root->log_root;const struct btrfs_delayed_item *curr; -u64 last_range_start; +u64 last_range_start =0 ;u64 last_range_end =0 ;struct btrfs_key key;
fs/cifs/connect.c +5 -4
@@ -4086,16 +4086,17 @@ int cifs_tree_connect(const unsigned int xid, struct cifs_tcon *tcon, const stru/* only send once per connect */ spin_lock (&tcon->tc_lock); +if (tcon->status ==TID_GOOD ) { +spin_unlock (&tcon->tc_lock); +return 0 ; + } +if (tcon->status !=TID_NEW && tcon->status !=TID_NEED_TCON ) {spin_unlock (&tcon->tc_lock);return -EHOSTDOWN ; } -if (tcon->status ==TID_GOOD ) { -spin_unlock (&tcon->tc_lock); -return 0 ; - } tcon->status =TID_IN_TCON ;spin_unlock (&tcon->tc_lock);
fs/cifs/dfs.c +5 -4
@@ -575,16 +575,17 @@ int cifs_tree_connect(const unsigned int xid, struct cifs_tcon *tcon, const stru/* only send once per connect */ spin_lock (&tcon->tc_lock); +if (tcon->status ==TID_GOOD ) { +spin_unlock (&tcon->tc_lock); +return 0 ; + } +if (tcon->status !=TID_NEW && tcon->status !=TID_NEED_TCON ) {spin_unlock (&tcon->tc_lock);return -EHOSTDOWN ; } -if (tcon->status ==TID_GOOD ) { -spin_unlock (&tcon->tc_lock); -return 0 ; - } tcon->status =TID_IN_TCON ;spin_unlock (&tcon->tc_lock);
fs/cifs/smb2pdu.c +1 -1
@@ -3777,7 +3777,7 @@ SMB2_change_notify(const unsigned int xid, struct cifs_tcon *tcon,if (*out_data ==NULL ) { rc = -ENOMEM ; goto cnotify_exit; - }else + }else if (plen) *plen =le32_to_cpu (smb_rsp->OutputBufferLength); }
fs/gfs2/file.c +14 -3
@@ -784,9 +784,13 @@ static inline bool should_fault_in_pages(struct iov_iter *i,if (!user_backed_iter (i))return false; +/* +* Try to fault in multiple pages initially. When that doesn't result +* in any progress, fall back to a single page. +*/ size =PAGE_SIZE ; offs =offset_in_page (iocb->ki_pos); -if (*prev_count != count || !*window_size) { +if (*prev_count != count) {size_t nr_dirtied; nr_dirtied = max(current->nr_dirtied_pause -
@@ -870,6 +874,7 @@ static ssize_t gfs2_file_direct_write(struct kiocb *iocb, struct iov_iter *from,struct gfs2_inode *ip =GFS2_I (inode);size_t prev_count =0 , window_size =0 ;size_t written =0 ; +bool enough_retries;ssize_t ret;/*
@@ -913,11 +918,17 @@ static ssize_t gfs2_file_direct_write(struct kiocb *iocb, struct iov_iter *from,if (ret >0 ) written = ret; + enough_retries = prev_count ==iov_iter_count (from) && + window_size <=PAGE_SIZE ;if (should_fault_in_pages (from, iocb, &prev_count, &window_size)) {gfs2_glock_dq (gh); window_size -=fault_in_iov_iter_readable (from, window_size); -if (window_size) - goto retry; +if (window_size) { +if (!enough_retries) + goto retry; +/* fall back to buffered I/O */ + ret =0 ; + } } out_unlock:if (gfs2_holder_queued (gh))
fs/internal.h +0 -2
@@ -59,8 +59,6 @@ extern int finish_clean_context(struct fs_context *fc);*/ extern int filename_lookup (int dfd,struct filename *name,unsigned flags,struct path *path,struct path *root); -extern int vfs_path_lookup (struct dentry *,struct vfsmount *, -const char *,unsigned int ,struct path *);int do_rmdir (int dfd,struct filename *name);int do_unlinkat (int dfd,struct filename *name);int may_linkat (struct mnt_idmap *idmap,const struct path *link);
fs/ksmbd/server.c +20 -13
@@ -185,24 +185,31 @@ static void __handle_ksmbd_work(struct ksmbd_work *work, goto send; } -if (conn->ops->check_user_session) { - rc = conn->ops->check_user_session (work); -if (rc <0 ) { - command = conn->ops->get_cmd_val (work); - conn->ops->set_rsp_status (work, -STATUS_USER_SESSION_DELETED ); - goto send; - }else if (rc >0 ) { - rc = conn->ops->get_ksmbd_tcon (work); + do { + if (conn->ops->check_user_session) { + rc = conn->ops->check_user_session(work); if (rc < 0) { - conn->ops->set_rsp_status (work, -STATUS_NETWORK_NAME_DELETED ); + if (rc == -EINVAL) + conn->ops->set_rsp_status(work, + STATUS_INVALID_PARAMETER); + else + conn->ops->set_rsp_status(work, + STATUS_USER_SESSION_DELETED); goto send; + } else if (rc > 0) { + rc = conn->ops->get_ksmbd_tcon(work); + if (rc < 0) { + if (rc == -EINVAL) + conn->ops->set_rsp_status(work, + STATUS_INVALID_PARAMETER); + else + conn->ops->set_rsp_status(work, + STATUS_NETWORK_NAME_DELETED); + goto send; + } } } - } - do { rc = __process_request(work, conn, &command); if (rc == SERVER_HANDLER_ABORT) break;
fs/ksmbd/smb2misc.c +20 -13
@@ -351,9 +351,16 @@ int ksmbd_smb2_check_message(struct ksmbd_work *work)int command;__u32 clc_len;/* calculated length */ __u32 len =get_rfc1002_len (work->request_buf); +__u32 req_struct_size, next_cmd =le32_to_cpu (hdr->NextCommand); -if (le32_to_cpu (hdr->NextCommand) >0 ) - len =le32_to_cpu (hdr->NextCommand); +if ((u64 )work->next_smb2_rcv_hdr_off + next_cmd > len) { +pr_err ("next command(%u) offset exceeds smb msg size\n" , + next_cmd); +return 1 ; + } + +if (next_cmd >0 ) + len = next_cmd;else if (work->next_smb2_rcv_hdr_off) len -= work->next_smb2_rcv_hdr_off;
@@ -373,17 +380,9 @@ int ksmbd_smb2_check_message(struct ksmbd_work *work) }if (smb2_req_struct_sizes[command] != pdu->StructureSize2) { -if (command !=SMB2_OPLOCK_BREAK_HE && - (hdr->Status ==0 || pdu->StructureSize2 !=SMB2_ERROR_STRUCTURE_SIZE2_LE )) { -/* error packets have 9 byte structure size */ -ksmbd_debug (SMB , -"Illegal request size %u for command %d\n" , -le16_to_cpu (pdu->StructureSize2), command); -return 1 ; - }else if (command ==SMB2_OPLOCK_BREAK_HE && - hdr->Status ==0 && -le16_to_cpu (pdu->StructureSize2) !=OP_BREAK_STRUCT_SIZE_20 && -le16_to_cpu (pdu->StructureSize2) !=OP_BREAK_STRUCT_SIZE_21 ) { +if (command ==SMB2_OPLOCK_BREAK_HE && +le16_to_cpu (pdu->StructureSize2) !=OP_BREAK_STRUCT_SIZE_20 && +le16_to_cpu (pdu->StructureSize2) !=OP_BREAK_STRUCT_SIZE_21 ) {/* special case for SMB2.1 lease break message */ ksmbd_debug(SMB, "Illegal request size %d for oplock break\n",
@@ -392,6 +391,14 @@ int ksmbd_smb2_check_message(struct ksmbd_work *work) } } + req_struct_size =le16_to_cpu (pdu->StructureSize2) + + __SMB2_HEADER_STRUCTURE_SIZE; +if (command ==SMB2_LOCK_HE ) + req_struct_size -=sizeof (struct smb2_lock_element ); + +if (req_struct_size > len +1 ) +return 1 ; +if (smb2_calc_size (hdr, &clc_len))return 1 ;
fs/ksmbd/smb2pdu.c +88 -135
126 lines not on this page · raw message
fs/ksmbd/vfs.c +285 -272
557 lines not on this page · raw message
fs/namei.c +102 -23
125 lines not on this page · raw message
include/target/iscsi/iscsi_target_core.h +4 -3
Lines of this file are not shown. View the raw message.
net/mptcp/protocol.c +64 -47
111 lines not on this page · raw message
net/netfilter/nf_tables_api.c +274 -56
330 lines not on this page · raw message
net/netfilter/nft_immediate.c +81 -9
90 lines not on this page · raw message
net/xfrm/xfrm_interface_core.c +50 -4
54 lines not on this page · raw message
tools/testing/selftests/net/fcnal-test.sh +19 -8
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d.sh +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/mirror_gre_bridge_1q.sh +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/config +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/diag.sh +17 -25
42 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_connect.c +4 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_connect.sh +20 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_join.sh +336 -187
523 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_lib.sh +64 -0
64 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_sockopt.c +12 -6
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +18 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/pm_netlink.sh +17 -10
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/userspace_pm.sh +12 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/vrf-xfrm-tests.sh +16 -16
Lines of this file are not shown. View the 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.