Linux 5.15.42
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.42 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/arm64/silicon-errata.rst | 3 Documentation/devicetree/bindings/pinctrl/aspeed,ast2600-pinctrl.yaml | 2 Makefile | 2 arch/arm/boot/dts/aspeed-bmc-ibm-everest.dts | 15 arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts | 15 arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi | 9 arch/arm/boot/dts/aspeed-g6.dtsi | 35 + arch/arm/kernel/entry-armv.S | 2 arch/arm/kernel/stacktrace.c | 10 arch/arm/mm/proc-v7-bugs.c | 1 arch/arm64/kernel/cpu_errata.c | 2 arch/arm64/kernel/mte.c | 3 arch/arm64/kernel/paravirt.c | 29 arch/mips/lantiq/falcon/sysctrl.c | 2 arch/mips/lantiq/xway/gptu.c | 2 arch/mips/lantiq/xway/sysctrl.c | 46 - arch/riscv/boot/dts/sifive/fu540-c000.dtsi | 2 arch/s390/kernel/traps.c | 6 arch/s390/pci/pci.c | 1 arch/s390/pci/pci_bus.h | 3 arch/s390/pci/pci_clp.c | 9 arch/s390/pci/pci_event.c | 7 arch/x86/crypto/chacha-avx512vl-x86_64.S | 4 arch/x86/kvm/mmu/mmu.c | 10 arch/x86/um/shared/sysdep/syscalls_64.h | 5 drivers/block/drbd/drbd_main.c | 7 drivers/block/floppy.c | 18 drivers/clk/at91/clk-generated.c | 4 drivers/crypto/qcom-rng.c | 1 drivers/crypto/stm32/stm32-crc32.c | 4 drivers/dma-buf/dma-buf.c | 8 drivers/gpio/gpio-mvebu.c | 3 drivers/gpio/gpio-vf610.c | 8 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 14 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 drivers/gpu/drm/drm_dp_mst_topology.c | 1 drivers/gpu/drm/i915/display/intel_dmc.c | 44 + drivers/gpu/drm/i915/display/intel_opregion.c | 15 drivers/gpu/drm/i915/i915_reg.h | 16 drivers/i2c/busses/i2c-mt7621.c | 10 drivers/i2c/busses/i2c-piix4.c | 213 +++++- drivers/input/input.c | 19 drivers/input/touchscreen/ili210x.c | 4 drivers/input/touchscreen/stmfts.c | 8 drivers/net/can/m_can/m_can_pci.c | 48 - drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 20 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 7 drivers/net/ethernet/broadcom/bcmsysport.c | 6 drivers/net/ethernet/cadence/macb_main.c | 2 drivers/net/ethernet/dec/tulip/tulip_core.c | 5 drivers/net/ethernet/intel/ice/ice_base.c | 2 drivers/net/ethernet/intel/ice/ice_ethtool.c | 38 - drivers/net/ethernet/intel/ice/ice_lib.c | 16 drivers/net/ethernet/intel/ice/ice_main.c | 7 drivers/net/ethernet/intel/ice/ice_ptp.c | 19 drivers/net/ethernet/intel/ice/ice_txrx.h | 17 drivers/net/ethernet/intel/igb/igb_main.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 7 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c | 6 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_fw.c | 4 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_types.h | 3 drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c | 4 drivers/net/ethernet/mellanox/mlx5/core/steering/mlx5dr.h | 3 drivers/net/ethernet/qlogic/qla3xxx.c | 3 drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 4 drivers/net/ipa/gsi.c | 6 drivers/net/ppp/pppoe.c | 1 drivers/net/vmxnet3/vmxnet3_drv.c | 6 drivers/net/wireless/mediatek/mt76/mt7921/dma.c | 115 --- drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 20 drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 121 +++ drivers/nvme/host/core.c | 1 drivers/nvme/host/multipath.c | 25 drivers/nvme/host/nvme.h | 4 drivers/nvme/host/pci.c | 5 drivers/nvme/target/admin-cmd.c | 2 drivers/nvme/target/configfs.c | 2 drivers/nvme/target/core.c | 24 drivers/nvme/target/fc.c | 8 drivers/nvme/target/fcloop.c | 16 drivers/nvme/target/io-cmd-file.c | 6 drivers/nvme/target/loop.c | 4 drivers/nvme/target/nvmet.h | 1 drivers/nvme/target/passthru.c | 2 drivers/nvme/target/rdma.c | 12 drivers/nvme/target/tcp.c | 10 drivers/pci/controller/pci-aardvark.c | 48 - drivers/pci/pci.c | 10 drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 14 drivers/pinctrl/mediatek/pinctrl-mt8365.c | 2 drivers/platform/chrome/cros_ec_debugfs.c | 12 drivers/rtc/class.c | 9 drivers/rtc/rtc-mc146818-lib.c | 16 drivers/rtc/rtc-pcf2127.c | 3 drivers/rtc/rtc-sun6i.c | 14 drivers/scsi/device_handler/scsi_dh_alua.c | 3 drivers/scsi/qla2xxx/qla_target.c | 3 drivers/scsi/ufs/ufshpb.c | 19 drivers/usb/gadget/legacy/raw_gadget.c | 2 drivers/vhost/net.c | 15 drivers/vhost/vdpa.c | 5 drivers/video/fbdev/core/fbmem.c | 5 drivers/video/fbdev/core/fbsysfs.c | 4 drivers/watchdog/sp5100_tco.c | 334 ++++++---- drivers/watchdog/sp5100_tco.h | 7 fs/afs/inode.c | 14 fs/gfs2/file.c | 4 fs/io_uring.c | 7 fs/ioctl.c | 2 fs/nilfs2/btnode.c | 23 fs/nilfs2/btnode.h | 1 fs/nilfs2/btree.c | 27 fs/nilfs2/dat.c | 4 fs/nilfs2/gcinode.c | 7 fs/nilfs2/inode.c | 159 ++++ fs/nilfs2/mdt.c | 43 - fs/nilfs2/mdt.h | 6 fs/nilfs2/nilfs.h | 16 fs/nilfs2/page.c | 7 fs/nilfs2/segment.c | 9 fs/nilfs2/super.c | 5 include/linux/ceph/osd_client.h | 3 include/linux/ioport.h | 2 include/linux/mc146818rtc.h | 2 include/linux/netdevice.h | 2 include/linux/security.h | 2 include/net/ip.h | 1 include/net/netns/xfrm.h | 6 include/net/xfrm.h | 58 - include/uapi/linux/dma-buf.h | 4 kernel/debug/debug_core.c | 24 kernel/debug/kdb/kdb_main.c | 62 + kernel/events/core.c | 14 mm/kfence/core.c | 11 net/bridge/br_input.c | 7 net/ceph/osd_client.c | 302 +++------ net/core/dev.c | 2 net/core/skbuff.c | 4 net/ipv4/route.c | 23 net/key/af_key.c | 6 net/mac80211/rx.c | 3 net/mptcp/options.c | 40 - net/mptcp/protocol.h | 1 net/mptcp/subflow.c | 15 net/netfilter/nf_flow_table_core.c | 80 -- net/netfilter/nf_flow_table_ip.c | 19 net/netfilter/nft_flow_offload.c | 28 net/nfc/nci/data.c | 2 net/nfc/nci/hci.c | 4 net/sched/act_pedit.c | 4 net/wireless/nl80211.c | 18 net/xfrm/xfrm_policy.c | 10 net/xfrm/xfrm_user.c | 43 - security/security.c | 2 security/selinux/ss/hashtab.c | 3 sound/isa/wavefront/wavefront_synth.c | 3 sound/pci/hda/patch_realtek.c | 17 sound/usb/quirks-table.h | 9 tools/build/Makefile.feature | 1 tools/build/feature/Makefile | 4 tools/build/feature/test-libbpf-btf__load_from_kernel_by_id.c | 7 tools/perf/Makefile.config | 7 tools/perf/arch/x86/util/perf_regs.c | 12 tools/perf/bench/numa.c | 2 tools/perf/util/bpf-event.c | 4 tools/testing/selftests/net/fcnal-test.sh | 12 tools/virtio/Makefile | 3 168 files changed, 1929 insertions(+), 1059 deletions(-)
Al Viro (1):
Fix double fget() in vhost_net_set_backend()
Alex Elder (1):
net: ipa: record proper RX transaction count
Andre Przywara (1):
rtc: sun6i: Fix time overflow handling
Andreas Gruenbacher (1):
gfs2: Disable page faults during lockless buffered reads
Andrew Lunn (1):
net: bridge: Clear offload_fwd_mark when passing frame up bridge interface.
Anton Eidelman (1):
nvme-multipath: fix hang when disk goes live over reconnect
Anusha Srivatsa (1):
drm/i915/dmc: Add MMIO range restrictions
Ard Biesheuvel (2):
ARM: 9196/1: spectre-bhb: enable for Cortex-A15
ARM: 9197/1: spectre-bhb: fix loop8 sequence for Thumb2
Arkadiusz Kubalewski (1):
ice: fix crash when writing timestamp on RX rings
Arnaldo Carvalho de Melo (1):
perf build: Fix check for btf__load_from_kernel_by_id() in libbpf
Brian Bunker (1):
scsi: scsi_dh_alua: Properly handle the ALUA transitioning state
Catalin Marinas (1):
arm64: mte: Ensure the cleared tags are visible before setting the PTE
Charan Teja Kalla (1):
dma-buf: ensure unique directory name for dmabuf stats
Christophe JAILLET (2):
net: systemport: Fix an error handling path in bcm_sysport_probe() net/qla3xxx: Fix a test in ql_reset_work()
Codrin Ciubotariu (1):
clk: at91: generated: consider range when calculating best rate
Daejun Park (1):
scsi: ufs: core: Fix referencing invalid rsp field
Daniel Thompson (1):
lockdown: also lock down previous kgdb use
Daniel Vetter (1):
fbdev: Prevent possible use-after-free in fb_release()
David Gow (1):
um: Cleanup syscall_handler_t definition/cast, fix warning
David Howells (1):
afs: Fix afs_getattr() to refetch file status if callback break occurred
Duoming Zhou (1):
NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc
Eddie James (1):
ARM: dts: aspeed: Add ADC for AST2600 and enable for Rainier and Everest
Eyal Birger (1):
xfrm: fix "disable_policy" flag use when arriving from different devices
Felix Fietkau (5):
netfilter: flowtable: fix excessive hw offload attempts after failure
netfilter: nft_flow_offload: skip dst neigh lookup for ppp devices
net: fix dev_fill_forward_path with pppoe + bridge
netfilter: nft_flow_offload: fix offload with pppoe + vlan
mac80211: fix rx reordering with non explicit / psmp ack policy
Geliang Tang (2):
mptcp: change the parameter of __mptcp_make_csum
mptcp: reuse __mptcp_make_csum in validate_data_csum
Gleb Chesnokov (1):
scsi: qla2xxx: Fix missed DMA unmap for aborted commands
Grant Grundler (4):
net: atlantic: fix "frag[0] not initialized"
net: atlantic: reduce scope of is_rsc_complete
net: atlantic: add check for MAX_SKB_FRAGS
net: atlantic: verify hw_head_ lies within TX buffer ring
Greg Kroah-Hartman (1):
Linux 5.15.42
Greg Thelen (1):
Revert "drm/i915/opregion: check port number bounds for SWSCI display power state"
Guo Xuenan (1):
fs: fix an infinite loop in iomap_fiemap
Haibo Chen (1):
gpio: gpio-vf610: do not touch other bits when set the target bit
Hangyu Hua (1):
drm/dp/mst: fix a possible memory leak in fetch_monitor_name()
Harini Katakam (1):
net: macb: Increment rx bd head after allocating skb and buffer
Heiko Carstens (1):
s390/traps: improve panic message for translation-specification exception
Howard Chiu (1):
ARM: dts: aspeed: Add video engine to g6
Hugo Villeneuve (1):
rtc: pcf2127: fix bug when reading alarm registers
Hyeonggon Yoo (1):
mm/kfence: reset PG_slab and memcg_data before freeing __kfence_pool
Ilya Dryomov (1):
libceph: fix potential use-after-free on linger ping and resends
Jae Hyun Yoo (4):
ARM: dts: aspeed-g6: remove FWQSPID group in pinctrl dtsi
pinctrl: pinctrl-aspeed-g6: remove FWQSPID group in pinctrl
ARM: dts: aspeed-g6: fix SPI1/SPI2 quad pin group
dt-bindings: pinctrl: aspeed-g6: remove FWQSPID group
Jakob Koschel (1):
drbd: remove usage of list iterator variable after loop
Jarkko Nikula (1):
Revert "can: m_can: pci: use custom bit timings for Elkhart Lake"
Javier Martinez Canillas (1):
Revert "fbdev: Make fb_release() return -ENODEV if fbdev was unregistered"
Jeff LaBundy (1):
Input: add bounds checking to input_set_capability()
Jiasheng Jiang (1):
net: af_key: add check for pfkey_broadcast in function pfkey_process
Joel Stanley (1):
ARM: dts: aspeed: Add secure boot controller node
Johannes Berg (1):
nl80211: fix locking in nl80211_set_tx_bitrate_mask()
Jérôme Pouiller (1):
dma-buf: fix use of DMA_BUF_SET_NAME_{A,B} in userspace
Kai-Heng Feng (1):
ALSA: hda/realtek: Enable headset mic on Lenovo P360
Kan Liang (1):
perf regs x86: Fix arch__intr_reg_mask() for the hybrid platform
Kevin Mitchell (1):
igb: skip phy status check where unavailable
Kieran Frewen (1):
nl80211: validate S1G channel width
Krzysztof Kozlowski (1):
riscv: dts: sifive: fu540-c000: align dma node name with dtschema
Lina Wang (1):
net: fix wrong network header length
Maciej Fijalkowski (1):
ice: move ice_container_type onto ice_ring_container
Maor Dickman (1):
net/mlx5: DR, Fix missing flow_source when creating multi-destination FW table
Marek Vasut (1):
Input: ili210x - fix reset timing
Mario Limonciello (2):
rtc: mc146818-lib: Fix the AltCentury for AMD platforms drm/amd: Don't reset dGPUs if the system is going to s2idle
Mattijs Korpershoek (1):
pinctrl: mediatek: mt8365: fix IES control pins
Maxim Mikityanskiy (1):
net/mlx5e: Properly block LRO when XDP is enabled
Michael S. Tsirkin (1):
tools/virtio: compile with -pthread
Michal Wilczynski (1):
ice: Fix interrupt moderation settings getting cleared
Monish Kumar R (1):
nvme-pci: add quirks for Samsung X5 SSDs
Nicolas Dichtel (2):
xfrm: rework default policy structure
selftests: add ping test with ping_group_range tuned
Niklas Schnelle (1):
s390/pci: improve zpci_dev reference counting
Ondrej Mosnacek (2):
selinux: fix bad cleanup on error in hashtab_duplicate()
crypto: qcom-rng - fix infinite loop on requests not multiple of WORD_SZ
Pablo Neira Ayuso (2):
netfilter: flowtable: fix TCP flow teardown
netfilter: flowtable: pass flowtable to nf_flow_table_iterate()
Pali Rohár (1):
Revert "PCI: aardvark: Rewrite IRQ code to chained IRQ handler"
Paolo Abeni (2):
net/sched: act_pedit: sanitize shift argument before usage
mptcp: fix checksum byte order
Paul Greenwalt (1):
ice: fix possible under reporting of ethtool Tx and Rx statistics
Pavel Begunkov (1):
io_uring: arm poll for non-nowait files
Peter Zijlstra (2):
crypto: x86/chacha20 - Avoid spurious jumps to other functions
perf: Fix sys_perf_event_open() race against self
Prakruthi Deepak Heragu (1):
arm64: paravirt: Use RCU read locks to guard stolen_time
Rafael J. Wysocki (1):
PCI/PM: Avoid putting Elo i2 PCIe Ports in D3cold
Randy Dunlap (1):
ALSA: hda - fix unused Realtek function when PM is not enabled
Ritaro Takenaka (1):
netfilter: flowtable: move dst_check to packet path
Ryusuke Konishi (2):
nilfs2: fix lockdep warnings in page operations for btree nodes
nilfs2: fix lockdep warnings during disk space reclamation
Sagi Grimberg (1):
nvmet: use a private workqueue instead of the system workqueue
Schspa Shi (1):
usb: gadget: fix race when gadget driver register via ioctl
Sean Christopherson (1):
KVM: x86/mmu: Update number of zapped pages even if page list is stable
Sean Wang (1):
mt76: mt7921e: fix possible probe failure after reboot
Shreyas K K (1):
arm64: Enable repeat tlbi workaround on KRYO4XX gold CPUs
Takashi Iwai (2):
ALSA: usb-audio: Restore Rane SL-1 quirk
ALSA: wavefront: Proper check of get_user() error
Terry Bowman (13):
kernel/resource: Introduce request_mem_region_muxed()
i2c: piix4: Replace hardcoded memory map size with a #define
i2c: piix4: Move port I/O region request/release code into functions
i2c: piix4: Move SMBus controller base address detect into function
i2c: piix4: Move SMBus port selection into function
i2c: piix4: Add EFCH MMIO support to region request and release
i2c: piix4: Add EFCH MMIO support to SMBus base address detect
i2c: piix4: Add EFCH MMIO support for SMBus port select
i2c: piix4: Enable EFCH MMIO for Family 17h+
Watchdog: sp5100_tco: Move timer initialization into function
Watchdog: sp5100_tco: Refactor MMIO base address initialization
Watchdog: sp5100_tco: Add initialization using EFCH MMIO
Watchdog: sp5100_tco: Enable Family 17h+ CPUs
Thomas Richter (1):
perf bench numa: Address compiler error on s390
Tzung-Bi Shih (1):
platform/chrome: cros_ec_debugfs: detach log reader wq from devm
Uwe Kleine-König (1):
gpio: mvebu/pwm: Refuse requests with inverted polarity
Vincent Whitchurch (1):
rtc: fix use-after-free on device removal
Werner Sembach (1):
ALSA: hda/realtek: Add quirk for TongFang devices with pop noise
Willy Tarreau (1):
floppy: use a statically allocated error counter
Xiaoke Wang (1):
MIPS: lantiq: check the return value of kzalloc()
Yang Yingliang (3):
ethernet: tulip: fix missing pci_disable_device() on error in tulip_init_one()
net: stmmac: fix missing pci_disable_device() on error in stmmac_pci_probe()
i2c: mt7621: fix missing clk_disable_unprepare() on error in mtk_i2c_probe()
Zheng Yongjun (2):
Input: stmfts - fix reference leak in stmfts_input_open
crypto: stm32 - fix reference leak in stm32_crc_remove
Zhu Lingshan (1):
vhost_vdpa: don't setup irq offloading when irq_num < 0
Zixuan Fu (2):
net: vmxnet3: fix possible use-after-free bugs in vmxnet3_rq_alloc_rx_buf()
net: vmxnet3: fix possible NULL pointer dereference in vmxnet3_rq_cleanup()
linyujun (1):
ARM: 9191/1: arm/stacktrace, kasan: Silence KASAN warnings in unwind_frame()
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.rst +3 -0
@@ -163,6 +163,9 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Qualcomm Tech. | Kryo4xx Silver | N/A | ARM64_ERRATUM_1024718 | +----------------+-----------------+-----------------+-----------------------------+ +| Qualcomm Tech. | Kryo4xx Gold | N/A | ARM64_ERRATUM_1286807 | ++----------------+-----------------+-----------------+-----------------------------+ + +----------------+-----------------+-----------------+-----------------------------+ | Fujitsu | A64FX | E#010001 | FUJITSU_ERRATUM_010001 | +----------------+-----------------+-----------------+-----------------------------+
Documentation/devicetree/bindings/pinctrl/aspeed,ast2600-pinctrl.yaml +1 -1
@@ -58,7 +58,7 @@ patternProperties: $ref: "/schemas/types.yaml#/definitions/string" enum: [ ADC0, ADC1, ADC10, ADC11, ADC12, ADC13, ADC14, ADC15, ADC2, ADC3, ADC4, ADC5, ADC6, ADC7, ADC8, ADC9, BMCINT, EMMCG1, EMMCG4, - EMMCG8, ESPI, ESPIALT, FSI1, FSI2, FWSPIABR, FWSPID, FWQSPID, FWSPIWP, + EMMCG8, ESPI, ESPIALT, FSI1, FSI2, FWSPIABR, FWSPID, FWSPIWP, GPIT0, GPIT1, GPIT2, GPIT3, GPIT4, GPIT5, GPIT6, GPIT7, GPIU0, GPIU1, GPIU2, GPIU3, GPIU4, GPIU5, GPIU6, GPIU7, HVI3C3, HVI3C4, I2C1, I2C10, I2C11, I2C12, I2C13, I2C14, I2C15, I2C16, I2C2, I2C3, I2C4, I2C5,
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 41 +SUBLEVEL = 42 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/aspeed-bmc-ibm-everest.dts +15 -0
@@ -231,6 +231,21 @@ led-pcieslot-power { gpios = <&gpio0 ASPEED_GPIO(P, 4) GPIO_ACTIVE_LOW>; }; }; + + iio-hwmon { + compatible = "iio-hwmon"; + io-channels = <&adc1 7>; + }; +}; + +&adc1 { + status = "okay"; + aspeed,int-vref-microvolt = <2500000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_adc8_default &pinctrl_adc9_default + &pinctrl_adc10_default &pinctrl_adc11_default + &pinctrl_adc12_default &pinctrl_adc13_default + &pinctrl_adc14_default &pinctrl_adc15_default>; }; &gpio0 {
arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts +15 -0
@@ -246,6 +246,21 @@ fan5-presence { linux,code = <11>; }; }; + + iio-hwmon { + compatible = "iio-hwmon"; + io-channels = <&adc1 7>; + }; +}; + +&adc1 { + status = "okay"; + aspeed,int-vref-microvolt = <2500000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_adc8_default &pinctrl_adc9_default + &pinctrl_adc10_default &pinctrl_adc11_default + &pinctrl_adc12_default &pinctrl_adc13_default + &pinctrl_adc14_default &pinctrl_adc15_default>; }; &ehci1 {
arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi +2 -7
@@ -117,11 +117,6 @@ pinctrl_fwspid_default: fwspid_default { groups = "FWSPID"; }; - pinctrl_fwqspid_default: fwqspid_default { - function = "FWSPID"; - groups = "FWQSPID"; - }; - pinctrl_fwspiwp_default: fwspiwp_default { function = "FWSPIWP"; groups = "FWSPIWP";
@@ -653,12 +648,12 @@ pinctrl_pwm9g1_default: pwm9g1_default { }; pinctrl_qspi1_default: qspi1_default { - function = "QSPI1"; + function = "SPI1"; groups = "QSPI1"; }; pinctrl_qspi2_default: qspi2_default { - function = "QSPI2"; + function = "SPI2"; groups = "QSPI2"; };
arch/arm/boot/dts/aspeed-g6.dtsi +35 -0
@@ -364,6 +364,41 @@ xdma: xdma@1e6e7000 { status = "disabled"; }; + adc0: adc@1e6e9000 { + compatible = "aspeed,ast2600-adc0"; + reg = <0x1e6e9000 0x100>; + clocks = <&syscon ASPEED_CLK_APB2>; + resets = <&syscon ASPEED_RESET_ADC>; + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; + #io-channel-cells = <1>; + status = "disabled"; + }; + + adc1: adc@1e6e9100 { + compatible = "aspeed,ast2600-adc1"; + reg = <0x1e6e9100 0x100>; + clocks = <&syscon ASPEED_CLK_APB2>; + resets = <&syscon ASPEED_RESET_ADC>; + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; + #io-channel-cells = <1>; + status = "disabled"; + }; + + sbc: secure-boot-controller@1e6f2000 { + compatible = "aspeed,ast2600-sbc"; + reg = <0x1e6f2000 0x1000>; + }; + + video: video@1e700000 { + compatible = "aspeed,ast2600-video-engine"; + reg = <0x1e700000 0x1000>; + clocks = <&syscon ASPEED_CLK_GATE_VCLK>, + <&syscon ASPEED_CLK_GATE_ECLK>; + clock-names = "vclk", "eclk"; + interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; + }; + gpio0: gpio@1e780000 { #gpio-cells = <2>; gpio-controller;
arch/arm/kernel/entry-armv.S +1 -1
@@ -1038,7 +1038,7 @@ vector_bhb_loop8_\name: @ bhb workaround mov r0, #8 -3: b . + 4 +3: W(b) . + 4 subs r0, r0, #1 bne 3b dsb
arch/arm/kernel/stacktrace.c +5 -5
@@ -53,17 +53,17 @@ int notrace unwind_frame(struct stackframe *frame)return -EINVAL ; frame->sp = frame->fp; - frame->fp = *(unsigned long *)(fp); - frame->pc = *(unsigned long *)(fp +4 ); + frame->fp =READ_ONCE_NOCHECK (*(unsigned long *)(fp)); + frame->pc =READ_ONCE_NOCHECK (*(unsigned long *)(fp +4 ));#else /* check current frame pointer is within bounds */ if (fp < low +12 || fp > high -4 )return -EINVAL ;/* restore the registers from the stack frame */ - frame->fp = *(unsigned long *)(fp -12 ); - frame->sp = *(unsigned long *)(fp -8 ); - frame->pc = *(unsigned long *)(fp -4 ); + frame->fp =READ_ONCE_NOCHECK (*(unsigned long *)(fp -12 )); + frame->sp =READ_ONCE_NOCHECK (*(unsigned long *)(fp -8 )); + frame->pc =READ_ONCE_NOCHECK (*(unsigned long *)(fp -4 ));#endif return 0 ;
arch/arm/mm/proc-v7-bugs.c +1 -0
@@ -288,6 +288,7 @@ void cpu_v7_ca15_ibe(void) {if (check_spectre_auxcr (this_cpu_ptr (&spectre_warned),BIT (0 )))cpu_v7_spectre_v2_init (); +cpu_v7_spectre_bhb_init (); }void cpu_v7_bugs_init (void )
arch/arm64/kernel/cpu_errata.c +2 -0
@@ -208,6 +208,8 @@ static const struct arm64_cpu_capabilities arm64_repeat_tlbi_list[] = { #ifdef CONFIG_ARM64_ERRATUM_1286807 { ERRATA_MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 0), + /* Kryo4xx Gold (rcpe to rfpe) => (r0p0 to r3p0) */ + ERRATA_MIDR_RANGE(MIDR_QCOM_KRYO_4XX_GOLD, 0xc, 0xe, 0xf, 0xe), }, #endif {},
arch/arm64/kernel/mte.c +3 -0
@@ -73,6 +73,9 @@ void mte_sync_tags(pte_t old_pte, pte_t pte)mte_sync_page_tags (page, old_pte, check_swap, pte_is_tagged); } + +/* ensure the tags are visible before the PTE is set */ +smp_wmb (); }int memcmp_pages (struct page *page1,struct page *page2)
arch/arm64/kernel/paravirt.c +21 -8
@@ -35,7 +35,7 @@ static u64 native_steal_clock(int cpu)DEFINE_STATIC_CALL (pv_steal_clock, native_steal_clock);struct pv_time_stolen_time_region { -struct pvclock_vcpu_stolen_time *kaddr; +struct pvclock_vcpu_stolen_time __rcu *kaddr; }; static DEFINE_PER_CPU(struct pv_time_stolen_time_region, stolen_time_region);
@@ -52,7 +52,9 @@ early_param("no-steal-acc", parse_no_stealacc);/* return stolen time in ns by asking the hypervisor */ static u64 para_steal_clock (int cpu) { +struct pvclock_vcpu_stolen_time *kaddr =NULL ;struct pv_time_stolen_time_region *reg; +u64 ret =0 ; reg =per_cpu_ptr (&stolen_time_region, cpu);
@@ -61,28 +63,37 @@ static u64 para_steal_clock(int cpu)* online notification callback runs. Until the callback * has run we just return zero. */ -if (!reg->kaddr) +rcu_read_lock (); + kaddr =rcu_dereference (reg->kaddr); +if (!kaddr) { +rcu_read_unlock ();return 0 ; + } -return le64_to_cpu (READ_ONCE (reg->kaddr->stolen_time)); + ret =le64_to_cpu (READ_ONCE (kaddr->stolen_time)); +rcu_read_unlock (); +return ret; }static int stolen_time_cpu_down_prepare (unsigned int cpu) { +struct pvclock_vcpu_stolen_time *kaddr =NULL ;struct pv_time_stolen_time_region *reg; reg =this_cpu_ptr (&stolen_time_region);if (!reg->kaddr)return 0 ; -memunmap (reg->kaddr); -memset (reg,0 ,sizeof (*reg)); + kaddr =rcu_replace_pointer (reg->kaddr,NULL , true); +synchronize_rcu (); +memunmap (kaddr);return 0 ; }static int stolen_time_cpu_online (unsigned int cpu) { +struct pvclock_vcpu_stolen_time *kaddr =NULL ;struct pv_time_stolen_time_region *reg;struct arm_smccc_res res;
@@ -93,17 +104,19 @@ static int stolen_time_cpu_online(unsigned int cpu)if (res.a0 ==SMCCC_RET_NOT_SUPPORTED )return -EINVAL ; - reg->kaddr =memremap (res.a0, + kaddr =memremap (res.a0,sizeof (struct pvclock_vcpu_stolen_time ),MEMREMAP_WB ); +rcu_assign_pointer (reg->kaddr, kaddr); +if (!reg->kaddr) {pr_warn ("Failed to map stolen time data structure\n" );return -ENOMEM ; } -if (le32_to_cpu (reg->kaddr->revision) !=0 || -le32_to_cpu (reg->kaddr->attributes) !=0 ) { +if (le32_to_cpu (kaddr->revision) !=0 || +le32_to_cpu (kaddr->attributes) !=0 ) {pr_warn_once ("Unexpected revision or attributes in stolen time data\n" );return -ENXIO ; }
arch/mips/lantiq/falcon/sysctrl.c +2 -0
@@ -167,6 +167,8 @@ static inline void clkdev_add_sys(const char *dev, unsigned int module, {struct clk *clk =kzalloc (sizeof (struct clk ),GFP_KERNEL ); +if (!clk) +return ; clk->cl.dev_id = dev; clk->cl.con_id =NULL ; clk->cl.clk = clk;
arch/mips/lantiq/xway/gptu.c +2 -0
@@ -122,6 +122,8 @@ static inline void clkdev_add_gptu(struct device *dev, const char *con, {struct clk *clk =kzalloc (sizeof (struct clk ),GFP_KERNEL ); +if (!clk) +return ; clk->cl.dev_id =dev_name (dev); clk->cl.con_id = con; clk->cl.clk = clk;
arch/mips/lantiq/xway/sysctrl.c +30 -16
75 lines not on this page · raw message
arch/riscv/boot/dts/sifive/fu540-c000.dtsi +1 -1
@@ -166,7 +166,7 @@ uart0: serial@10010000 { clocks = <&prci PRCI_CLK_TLCLK>; status = "disabled"; }; - dma: dma@3000000 { + dma: dma-controller@3000000 { compatible = "sifive,fu540-c000-pdma"; reg = <0x0 0x3000000 0x0 0x8000>; interrupt-parent = <&plic0>;
arch/s390/kernel/traps.c +3 -3
@@ -142,10 +142,10 @@ static inline void do_fp_trap(struct pt_regs *regs, __u32 fpc)do_trap (regs,SIGFPE , si_code,"floating point exception" ); } -static void translation_exception (struct pt_regs *regs) +static void translation_specification_exception (struct pt_regs *regs) {/* May never happen. */ -panic ("Translation exception" ); +panic ("Translation-Specification Exception" ); }static void illegal_op (struct pt_regs *regs)
@@ -374,7 +374,7 @@ static void (*pgm_check_table[128])(struct pt_regs *regs) = { [0x0f] = hfp_divide_exception, [0x10] = do_dat_exception, [0x11] = do_dat_exception, - [0x12] = translation_exception, + [0x12] = translation_specification_exception, [0x13] = special_op_exception, [0x14] = default_trap_handler, [0x15] = operand_exception,
arch/s390/pci/pci.c +1 -0
@@ -69,6 +69,7 @@ struct zpci_dev *get_zdev_by_fid(u32 fid)list_for_each_entry (tmp, &zpci_list, entry) {if (tmp->fid == fid) { zdev = tmp; +zpci_zdev_get (zdev);break ; } }
arch/s390/pci/pci_bus.h +2 -1
@@ -19,7 +19,8 @@ void zpci_bus_remove_device(struct zpci_dev *zdev, bool set_error);void zpci_release_device (struct kref *kref);static inline void zpci_zdev_put (struct zpci_dev *zdev) { -kref_put (&zdev->kref, zpci_release_device); +if (zdev) +kref_put (&zdev->kref, zpci_release_device); }static inline void zpci_zdev_get (struct zpci_dev *zdev)
arch/s390/pci/pci_clp.c +7 -2
@@ -22,6 +22,8 @@#include <asm/clp.h> #include <uapi/asm/clp.h> +#include "pci_bus.h" +bool zpci_unique_uid;void update_uid_checking (bool new)
@@ -403,8 +405,11 @@ static void __clp_add(struct clp_fh_list_entry *entry, void *data)return ; zdev =get_zdev_by_fid (entry->fid); -if (!zdev) -zpci_create_device (entry->fid, entry->fh, entry->config_state); +if (zdev) { +zpci_zdev_put (zdev); +return ; + } +zpci_create_device (entry->fid, entry->fh, entry->config_state); }int clp_scan_pci_devices (void )
arch/s390/pci/pci_event.c +6 -1
@@ -62,10 +62,12 @@ static void __zpci_event_error(struct zpci_ccdf_err *ccdf) pdev ? pci_name(pdev) : "n/a", ccdf->pec, ccdf->fid);if (!pdev) -return ; + goto no_pdev; pdev->error_state = pci_channel_io_perm_failure;pci_dev_put (pdev); +no_pdev: +zpci_zdev_put (zdev); }void zpci_event_error (void *data)
@@ -94,6 +96,7 @@ static void zpci_event_hard_deconfigured(struct zpci_dev *zdev, u32 fh)static void __zpci_event_availability (struct zpci_ccdf_avail *ccdf) {struct zpci_dev *zdev =get_zdev_by_fid (ccdf->fid); +bool existing_zdev = !!zdev;enum zpci_state state;zpci_err ("avail CCDF:\n" );
@@ -156,6 +159,8 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)default :break ; } +if (existing_zdev) +zpci_zdev_put (zdev); }void zpci_event_availability (void *data)
arch/x86/crypto/chacha-avx512vl-x86_64.S +2 -2
@@ -172,7 +172,7 @@ SYM_FUNC_START(chacha_2block_xor_avx512vl) # xor remaining bytes from partial register into output mov %rcx,%rax and $0xf,%rcx - jz .Ldone8 + jz .Ldone2 mov %rax,%r9 and $~0xf,%r9
@@ -438,7 +438,7 @@ SYM_FUNC_START(chacha_4block_xor_avx512vl) # xor remaining bytes from partial register into output mov %rcx,%rax and $0xf,%rcx - jz .Ldone8 + jz .Ldone4 mov %rax,%r9 and $~0xf,%r9
arch/x86/kvm/mmu/mmu.c +6 -4
@@ -5590,6 +5590,7 @@ static void kvm_zap_obsolete_pages(struct kvm *kvm) {struct kvm_mmu_page *sp, *node;int nr_zapped, batch =0 ; +bool unstable; restart: list_for_each_entry_safe_reverse(sp, node,
@@ -5621,11 +5622,12 @@ static void kvm_zap_obsolete_pages(struct kvm *kvm) goto restart; } -if (__kvm_mmu_prepare_zap_page (kvm, sp, - &kvm->arch.zapped_obsolete_pages, &nr_zapped)) { - batch += nr_zapped; + unstable =__kvm_mmu_prepare_zap_page (kvm, sp, + &kvm->arch.zapped_obsolete_pages, &nr_zapped); + batch += nr_zapped; + +if (unstable) goto restart; - } }/*
arch/x86/um/shared/sysdep/syscalls_64.h +2 -3
@@ -10,13 +10,12 @@#include <linux/msg.h> #include <linux/shm.h> -typedef long syscall_handler_t (void ); +typedef long syscall_handler_t (long ,long ,long ,long ,long ,long );extern syscall_handler_t *sys_call_table[];#define EXECUTE_SYSCALL (syscall, regs) \ - (((long (*)(long, long, long, long, long, long)) \ - (*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(®s->regs), \ + (((*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(®s->regs), \ UPT_SYSCALL_ARG2(®s->regs), \ UPT_SYSCALL_ARG3(®s->regs), \ UPT_SYSCALL_ARG4(®s->regs), \
drivers/block/drbd/drbd_main.c +5 -2
@@ -171,7 +171,7 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr, unsigned int set_size) {struct drbd_request *r; -struct drbd_request *req =NULL ; +struct drbd_request *req =NULL , *tmp =NULL ;int expect_epoch =0 ;int expect_size =0 ;
@@ -225,8 +225,11 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr,* to catch requests being barrier-acked "unexpectedly". * It usually should find the same req again, or some READ preceding it. */ list_for_each_entry (req, &connection->transfer_log, tl_requests) -if (req->epoch == expect_epoch) +if (req->epoch == expect_epoch) { + tmp = req;break ; + } + req =list_prepare_entry (tmp, &connection->transfer_log, tl_requests);list_for_each_entry_safe_from (req, r, &connection->transfer_log, tl_requests) {if (req->epoch != expect_epoch)break ;
drivers/block/floppy.c +8 -10
@@ -509,8 +509,8 @@ static unsigned long fdc_busy;static DECLARE_WAIT_QUEUE_HEAD (fdc_wait);static DECLARE_WAIT_QUEUE_HEAD (command_done); -/* Errors during formatting are counted here. */ -static int format_errors; +/* errors encountered on the current (or last) request */ +static int floppy_errors;/* Format request descriptor. */ static struct format_descr format_req;
@@ -530,7 +530,6 @@ static struct format_descr format_req;static char *floppy_track_buffer;static int max_buffer_sectors; -static int *errors;typedef void (*done_f )(int ); static const struct cont_t { void (*interrupt)(void);
@@ -1455,7 +1454,7 @@ static int interpret_errors(void)if (drive_params[current_drive].flags &FTD_MSG )DPRINT ("Over/Underrun - retrying\n" ); bad =0 ; - }else if (*errors >= drive_params[current_drive].max_errors.reporting) { + }else if (floppy_errors >= drive_params[current_drive].max_errors.reporting) {print_errors (); }if (reply_buffer[ST2 ] &ST2_WC || reply_buffer[ST2 ] &ST2_BC )
@@ -2095,7 +2094,7 @@ static void bad_flp_intr(void)if (!next_valid_format (current_drive))return ; } - err_count = ++(*errors); + err_count = ++floppy_errors;INFBOUND (write_errors[current_drive].badness, err_count);if (err_count > drive_params[current_drive].max_errors.abort) cont->done (0 );
@@ -2241,9 +2240,8 @@ static int do_format(int drive, struct format_descr *tmp_format_req)return -EINVAL ; } format_req = *tmp_format_req; - format_errors =0 ; cont = &format_cont; - errors = &format_errors; + floppy_errors =0 ; ret =wait_til_done (redo_format, true);if (ret == -EINTR )return -EINTR ;
@@ -2761,10 +2759,11 @@ static int set_next_request(void) current_req = list_first_entry_or_null(&floppy_reqs, struct request, queuelist);if (current_req) { - current_req->error_count =0 ; + floppy_errors =0 ;list_del_init (¤t_req->queuelist); +return 1 ; } -return current_req !=NULL ; +return 0 ; }/* Starts or continues processing request. Will automatically unlock the
@@ -2823,7 +2822,6 @@ static void redo_fd_request(void) _floppy = floppy_type + drive_params[current_drive].autodetect[drive_state[current_drive].probed_format]; }else probing =0 ; - errors = &(current_req->error_count); tmp =make_raw_rw_request ();if (tmp <2 ) {request_done (tmp);
drivers/clk/at91/clk-generated.c +4 -0
@@ -106,6 +106,10 @@ static void clk_generated_best_diff(struct clk_rate_request *req, tmp_rate = parent_rate; else tmp_rate = parent_rate / div; + +if (tmp_rate < req->min_rate || tmp_rate > req->max_rate) +return ; + tmp_diff =abs (req->rate - tmp_rate);if (*best_diff <0 || *best_diff >= tmp_diff) {
drivers/crypto/qcom-rng.c +1 -0
@@ -65,6 +65,7 @@ static int qcom_rng_read(struct qcom_rng *rng, u8 *data, unsigned int max) }else {/* copy only remaining bytes */ memcpy (data, &val, max - currsize); +break ; } }while (currsize < max);
drivers/crypto/stm32/stm32-crc32.c +3 -1
@@ -384,8 +384,10 @@ static int stm32_crc_remove(struct platform_device *pdev)struct stm32_crc *crc =platform_get_drvdata (pdev);int ret =pm_runtime_get_sync (crc->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (crc->dev);return ret; + }spin_lock (&crc_list.lock);list_del (&crc->list);
drivers/dma-buf/dma-buf.c +8 -0
@@ -436,6 +436,7 @@ static inline int is_dma_buf_file(struct file *file)static struct file *dma_buf_getfile (struct dma_buf *dmabuf,int flags) { +static atomic64_t dmabuf_inode =ATOMIC64_INIT (0 );struct file *file;struct inode *inode =alloc_anon_inode (dma_buf_mnt->mnt_sb);
@@ -445,6 +446,13 @@ static struct file *dma_buf_getfile(struct dma_buf *dmabuf, int flags) inode->i_size = dmabuf->size;inode_set_bytes (inode, dmabuf->size); +/* +* The ->i_ino acquired from get_next_ino() is not unique thus +* not suitable for using it as dentry name by dmabuf stats. +* Override ->i_ino with the unique and dmabuffs specific +* value. +*/ + inode->i_ino =atomic64_add_return (1 , &dmabuf_inode); file =alloc_file_pseudo (inode, dma_buf_mnt,"dmabuf" , flags, &dma_buf_fops);if (IS_ERR (file))
drivers/gpio/gpio-mvebu.c +3 -0
@@ -707,6 +707,9 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,unsigned long flags;unsigned int on, off; +if (state->polarity !=PWM_POLARITY_NORMAL ) +return -EINVAL ; + val = (unsigned long long ) mvpwm->clk_rate * state->duty_cycle;do_div (val,NSEC_PER_SEC );if (val >UINT_MAX +1ULL )
drivers/gpio/gpio-vf610.c +6 -2
@@ -125,9 +125,13 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, {struct vf610_gpio_port *port =gpiochip_get_data (chip);unsigned long mask =BIT (gpio); +u32 val; -if (port->sdata && port->sdata->have_paddr) -vf610_gpio_writel (mask, port->gpio_base +GPIO_PDDR ); +if (port->sdata && port->sdata->have_paddr) { + val =vf610_gpio_readl (port->gpio_base +GPIO_PDDR ); + val |= mask; +vf610_gpio_writel (val, port->gpio_base +GPIO_PDDR ); + }vf610_gpio_set (chip, gpio, value);
drivers/gpu/drm/amd/amdgpu/amdgpu.h +2 -0
@@ -1411,9 +1411,11 @@ static inline int amdgpu_acpi_smart_shift_update(struct drm_device *dev,#if defined(CONFIG_ACPI ) && defined(CONFIG_SUSPEND )bool amdgpu_acpi_is_s3_active (struct amdgpu_device *adev); +bool amdgpu_acpi_should_gpu_reset (struct amdgpu_device *adev);bool amdgpu_acpi_is_s0ix_active (struct amdgpu_device *adev);#else static inline bool amdgpu_acpi_is_s0ix_active (struct amdgpu_device *adev) {return false; } +static inline bool amdgpu_acpi_should_gpu_reset (struct amdgpu_device *adev) {return false; }static inline bool amdgpu_acpi_is_s3_active (struct amdgpu_device *adev) {return false; }#endif
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +14 -0
@@ -1045,6 +1045,20 @@ bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev) (pm_suspend_target_state ==PM_SUSPEND_MEM ); } +/** +* amdgpu_acpi_should_gpu_reset +* +* @adev: amdgpu_device_pointer +* +* returns true if should reset GPU, false if not +*/ +bool amdgpu_acpi_should_gpu_reset (struct amdgpu_device *adev) +{ +if (adev->flags &AMD_IS_APU ) +return false; +return pm_suspend_target_state !=PM_SUSPEND_TO_IDLE ; +} +/** * amdgpu_acpi_is_s0ix_active *
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -1
@@ -2259,7 +2259,7 @@ static int amdgpu_pmops_suspend_noirq(struct device *dev)struct drm_device *drm_dev =dev_get_drvdata (dev);struct amdgpu_device *adev =drm_to_adev (drm_dev); -if (!adev->in_s0ix) +if (amdgpu_acpi_should_gpu_reset (adev))return amdgpu_asic_reset (adev);return 0 ;
drivers/gpu/drm/drm_dp_mst_topology.c +1 -0
@@ -4834,6 +4834,7 @@ static void fetch_monitor_name(struct drm_dp_mst_topology_mgr *mgr, mst_edid =drm_dp_mst_get_edid (port->connector, mgr, port);drm_edid_get_monitor_name (mst_edid, name, namelen); +kfree (mst_edid); }/**
drivers/gpu/drm/i915/display/intel_dmc.c +44 -0
56 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_opregion.c +0 -15
@@ -376,21 +376,6 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,return -EINVAL ; } -/* -* The port numbering and mapping here is bizarre. The now-obsolete -* swsci spec supports ports numbered [0..4]. Port E is handled as a -* special case, but port F and beyond are not. The functionality is -* supposed to be obsolete for new platforms. Just bail out if the port -* number is out of bounds after mapping. -*/ -if (port >4 ) { -drm_dbg_kms (&dev_priv->drm, -"[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n" , - intel_encoder->base.base.id, intel_encoder->base.name, -port_name (intel_encoder->port), port); -return -EINVAL ; - } -if (!enable) parm |=4 <<8 ;
drivers/gpu/drm/i915/i915_reg.h +16 -0
@@ -7818,6 +7818,22 @@ enum {/* MMIO address range for DMC program (0x80000 - 0x82FFF) */ #define DMC_MMIO_START_RANGE 0x80000#define DMC_MMIO_END_RANGE 0x8FFFF +#define DMC_V1_MMIO_START_RANGE 0x80000 +#define TGL_MAIN_MMIO_START 0x8F000 +#define TGL_MAIN_MMIO_END 0x8FFFF +#define _TGL_PIPEA_MMIO_START 0x92000 +#define _TGL_PIPEA_MMIO_END 0x93FFF +#define _TGL_PIPEB_MMIO_START 0x96000 +#define _TGL_PIPEB_MMIO_END 0x97FFF +#define ADLP_PIPE_MMIO_START 0x5F000 +#define ADLP_PIPE_MMIO_END 0x5FFFF + +#define TGL_PIPE_MMIO_START (dmc_id) _PICK_EVEN(((dmc_id) - 1), _TGL_PIPEA_MMIO_START,\ + _TGL_PIPEB_MMIO_START) + +#define TGL_PIPE_MMIO_END (dmc_id) _PICK_EVEN(((dmc_id) - 1), _TGL_PIPEA_MMIO_END,\ + _TGL_PIPEB_MMIO_END) +#define SKL_DMC_DC3_DC5_COUNT _MMIO(0x80030)#define SKL_DMC_DC5_DC6_COUNT _MMIO(0x8002C)#define BXT_DMC_DC3_DC5_COUNT _MMIO(0x80038)
drivers/i2c/busses/i2c-mt7621.c +8 -2
@@ -304,7 +304,8 @@ static int mtk_i2c_probe(struct platform_device *pdev)if (i2c->bus_freq ==0 ) {dev_warn (i2c->dev,"clock-frequency 0 not supported\n" ); -return -EINVAL ; + ret = -EINVAL ; + goto err_disable_clk; } adap = &i2c->adap;
@@ -322,10 +323,15 @@ static int mtk_i2c_probe(struct platform_device *pdev) ret =i2c_add_adapter (adap);if (ret <0 ) -return ret; + goto err_disable_clk;dev_info (&pdev->dev,"clock %u kHz\n" , i2c->bus_freq /1000 ); +return 0 ; + +err_disable_clk: +clk_disable_unprepare (i2c->clk); +return ret; }
drivers/i2c/busses/i2c-piix4.c +167 -46
306 lines not on this page · raw message
drivers/input/input.c +19 -0
@@ -47,6 +47,17 @@ static DEFINE_MUTEX(input_mutex);static const struct input_value input_value_sync = {EV_SYN ,SYN_REPORT ,1 }; +static const unsigned int input_max_code[EV_CNT ] = { + [EV_KEY ] =KEY_MAX , + [EV_REL ] =REL_MAX , + [EV_ABS ] =ABS_MAX , + [EV_MSC ] =MSC_MAX , + [EV_SW ] =SW_MAX , + [EV_LED ] =LED_MAX , + [EV_SND ] =SND_MAX , + [EV_FF ] =FF_MAX , +}; +static inline int is_event_supported (unsigned int code,unsigned long *bm,unsigned int max) {
@@ -2074,6 +2085,14 @@ EXPORT_SYMBOL(input_get_timestamp);*/ void input_set_capability (struct input_dev *dev,unsigned int type,unsigned int code) { +if (type <EV_CNT && input_max_code[type] && + code > input_max_code[type]) { +pr_err ("%s: invalid code %u for type %u\n" , __func__, code, + type); +dump_stack (); +return ; + } +switch (type) {case EV_KEY :__set_bit (code, dev->keybit);
drivers/input/touchscreen/ili210x.c +2 -2
@@ -420,9 +420,9 @@ static int ili210x_i2c_probe(struct i2c_client *client,if (error)return error; -usleep_range (50 ,100 ); +usleep_range (12000 ,15000 );gpiod_set_value_cansleep (reset_gpio,0 ); -msleep (100 ); +msleep (160 ); } priv =devm_kzalloc (dev,sizeof (*priv),GFP_KERNEL );
drivers/input/touchscreen/stmfts.c +5 -3
@@ -339,11 +339,11 @@ static int stmfts_input_open(struct input_dev *dev) err =pm_runtime_get_sync (&sdata->client->dev);if (err <0 ) -return err; + goto out; err =i2c_smbus_write_byte (sdata->client,STMFTS_MS_MT_SENSE_ON );if (err) -return err; + goto out;mutex_lock (&sdata->mutex); sdata->running = true;
@@ -366,7 +366,9 @@ static int stmfts_input_open(struct input_dev *dev) "failed to enable touchkey\n"); } -return 0 ; +out: +pm_runtime_put_noidle (&sdata->client->dev); +return err; }static void stmfts_input_close (struct input_dev *dev)
drivers/net/can/m_can/m_can_pci.c +4 -44
83 lines not on this page · raw message
drivers/net/ethernet/aquantia/atlantic/aq_ring.c +11 -9
@@ -345,7 +345,6 @@ int aq_ring_rx_clean(struct aq_ring_s *self, int budget) {struct net_device *ndev =aq_nic_get_ndev (self->aq_nic); -bool is_rsc_completed = true;int err =0 ; for (; (self->sw_head != self->hw_head) && budget;
@@ -363,12 +362,17 @@ int aq_ring_rx_clean(struct aq_ring_s *self,continue ;if (!buff->is_eop) { +unsigned int frag_cnt =0U ; buff_ = buff; do { + bool is_rsc_completed = true; + if (buff_->next >= self->size) { err = -EIO; goto err_exit; } + + frag_cnt++; next_ = buff_->next, buff_ = &self->buff_ring[next_]; is_rsc_completed =
@@ -376,18 +380,17 @@ int aq_ring_rx_clean(struct aq_ring_s *self, next_, self->hw_head); -if (unlikely (!is_rsc_completed)) -break ; +if (unlikely (!is_rsc_completed) || + frag_cnt >MAX_SKB_FRAGS ) { + err =0 ; + goto err_exit; + } buff->is_error |= buff_->is_error; buff->is_cso_err |= buff_->is_cso_err; }while (!buff_->is_eop); -if (!is_rsc_completed) { - err =0 ; - goto err_exit; - }if (buff->is_error || (buff->is_lro && buff->is_cso_err)) { buff_ = buff;
@@ -445,7 +448,7 @@ int aq_ring_rx_clean(struct aq_ring_s *self, ALIGN(hdr_len, sizeof(long)));if (buff->len - hdr_len >0 ) { -skb_add_rx_frag (skb,0 , buff->rxdata.page, +skb_add_rx_frag (skb, i++, buff->rxdata.page, buff->rxdata.pg_off + hdr_len, buff->len - hdr_len,AQ_CFG_RX_FRAME_MAX );
@@ -454,7 +457,6 @@ int aq_ring_rx_clean(struct aq_ring_s *self,if (!buff->is_eop) { buff_ = buff; - i =1U ; do { next_ = buff_->next; buff_ = &self->buff_ring[next_];
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c +7 -0
@@ -889,6 +889,13 @@ int hw_atl_b0_hw_ring_tx_head_update(struct aq_hw_s *self, err = -ENXIO ; goto err_exit; } + +/* Validate that the new hw_head_ is reasonable. */ +if (hw_head_ >= ring->size) { + err = -ENXIO ; + goto err_exit; + } + ring->hw_head = hw_head_; err =aq_hw_err_from_flags (self);
drivers/net/ethernet/broadcom/bcmsysport.c +4 -2
@@ -2585,8 +2585,10 @@ static int bcm_sysport_probe(struct platform_device *pdev)device_set_wakeup_capable (&pdev->dev,1 ); priv->wol_clk =devm_clk_get_optional (&pdev->dev,"sw_sysportwol" ); -if (IS_ERR (priv->wol_clk)) -return PTR_ERR (priv->wol_clk); +if (IS_ERR (priv->wol_clk)) { + ret =PTR_ERR (priv->wol_clk); + goto err_deregister_fixed_link; + }/* Set the needed headroom once and for all */ BUILD_BUG_ON (sizeof (struct bcm_tsb ) !=8 );
drivers/net/ethernet/cadence/macb_main.c +1 -1
@@ -1250,7 +1250,6 @@ static void gem_rx_refill(struct macb_queue *queue)/* Make hw descriptor updates visible to CPU */ rmb (); - queue->rx_prepared_head++; desc =macb_rx_desc (queue, entry);if (!queue->rx_skbuff[entry]) {
@@ -1289,6 +1288,7 @@ static void gem_rx_refill(struct macb_queue *queue)dma_wmb (); desc->addr &= ~MACB_BIT (RX_USED ); } + queue->rx_prepared_head++; }/* Make descriptor updates visible to hardware */
drivers/net/ethernet/dec/tulip/tulip_core.c +4 -1
@@ -1398,8 +1398,10 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)/* alloc_etherdev ensures aligned and zeroed private structures */ dev =alloc_etherdev (sizeof (*tp)); -if (!dev) +if (!dev) { +pci_disable_device (pdev);return -ENOMEM ; + }SET_NETDEV_DEV (dev, &pdev->dev);if (pci_resource_len (pdev,0 ) < tulip_tbl[chip_idx].io_size) {
@@ -1778,6 +1780,7 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) err_out_free_netdev:free_netdev (dev); +pci_disable_device (pdev);return -ENODEV ; }
drivers/net/ethernet/intel/ice/ice_base.c +2 -0
@@ -115,6 +115,8 @@ static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, u16 v_idx) q_vector->rx.itr_setting =ICE_DFLT_RX_ITR ; q_vector->tx.itr_mode =ITR_DYNAMIC ; q_vector->rx.itr_mode =ITR_DYNAMIC ; + q_vector->tx.type =ICE_TX_CONTAINER ; + q_vector->rx.type =ICE_RX_CONTAINER ;if (vsi->type ==ICE_VSI_VF ) goto out;
drivers/net/ethernet/intel/ice/ice_ethtool.c +15 -23
@@ -3466,15 +3466,9 @@ static int ice_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)return 0 ; } -enum ice_container_type { -ICE_RX_CONTAINER , -ICE_TX_CONTAINER , -}; -/** * ice_get_rc_coalesce - get ITR values for specific ring container * @ec: ethtool structure to fill with driver's coalesce settings -* @c_type: container type, Rx or Tx * @rc: ring container that the ITR values will come from * * Query the device for ice_ring_container specific ITR values. This is
@@ -3484,13 +3478,12 @@ enum ice_container_type {* Returns 0 on success, negative otherwise. */ static int -ice_get_rc_coalesce (struct ethtool_coalesce *ec,enum ice_container_type c_type, -struct ice_ring_container *rc) +ice_get_rc_coalesce (struct ethtool_coalesce *ec,struct ice_ring_container *rc) {if (!rc->ring)return -EINVAL ; -switch (c_type) { +switch (rc->type) {case ICE_RX_CONTAINER : ec->use_adaptive_rx_coalesce =ITR_IS_DYNAMIC (rc); ec->rx_coalesce_usecs = rc->itr_setting;
@@ -3501,7 +3494,7 @@ ice_get_rc_coalesce(struct ethtool_coalesce *ec, enum ice_container_type c_type, ec->tx_coalesce_usecs = rc->itr_setting;break ;default : -dev_dbg (ice_pf_to_dev (rc->ring->vsi->back),"Invalid c_type %d\n" , c_type); +dev_dbg (ice_pf_to_dev (rc->ring->vsi->back),"Invalid c_type %d\n" , rc->type);return -EINVAL ; }
@@ -3522,18 +3515,18 @@ static int ice_get_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num) { if (q_num < vsi->num_rxq && q_num < vsi->num_txq) { - if (ice_get_rc_coalesce(ec, ICE_RX_CONTAINER, + if (ice_get_rc_coalesce(ec, &vsi->rx_rings[q_num]->q_vector->rx)) return -EINVAL; - if (ice_get_rc_coalesce(ec, ICE_TX_CONTAINER, + if (ice_get_rc_coalesce(ec, &vsi->tx_rings[q_num]->q_vector->tx)) return -EINVAL; } else if (q_num < vsi->num_rxq) { - if (ice_get_rc_coalesce(ec, ICE_RX_CONTAINER, + if (ice_get_rc_coalesce(ec, &vsi->rx_rings[q_num]->q_vector->rx)) return -EINVAL; } else if (q_num < vsi->num_txq) { - if (ice_get_rc_coalesce(ec, ICE_TX_CONTAINER, + if (ice_get_rc_coalesce(ec, &vsi->tx_rings[q_num]->q_vector->tx)) return -EINVAL; } else {
@@ -3585,7 +3578,6 @@ ice_get_per_q_coalesce(struct net_device *netdev, u32 q_num,/** * ice_set_rc_coalesce - set ITR values for specific ring container -* @c_type: container type, Rx or Tx * @ec: ethtool structure from user to update ITR settings * @rc: ring container that the ITR values will come from * @vsi: VSI associated to the ring container
@@ -3597,10 +3589,10 @@ ice_get_per_q_coalesce(struct net_device *netdev, u32 q_num,* Returns 0 on success, negative otherwise. */ static int -ice_set_rc_coalesce (enum ice_container_type c_type,struct ethtool_coalesce *ec, +ice_set_rc_coalesce (struct ethtool_coalesce *ec,struct ice_ring_container *rc,struct ice_vsi *vsi) { -const char *c_type_str = (c_type ==ICE_RX_CONTAINER ) ?"rx" :"tx" ; +const char *c_type_str = (rc->type ==ICE_RX_CONTAINER ) ?"rx" :"tx" ;u32 use_adaptive_coalesce, coalesce_usecs;struct ice_pf *pf = vsi->back;u16 itr_setting;
@@ -3608,7 +3600,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,if (!rc->ring)return -EINVAL ; -switch (c_type) { +switch (rc->type) {case ICE_RX_CONTAINER : if (ec->rx_coalesce_usecs_high > ICE_MAX_INTRL || (ec->rx_coalesce_usecs_high &&
@@ -3641,7 +3633,7 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,break ;default :dev_dbg (ice_pf_to_dev (pf),"Invalid container type %d\n" , - c_type); + rc->type);return -EINVAL ; }
@@ -3690,22 +3682,22 @@ static int ice_set_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num) { if (q_num < vsi->num_rxq && q_num < vsi->num_txq) { - if (ice_set_rc_coalesce(ICE_RX_CONTAINER, ec, + if (ice_set_rc_coalesce(ec, &vsi->rx_rings[q_num]->q_vector->rx, vsi)) return -EINVAL; - if (ice_set_rc_coalesce(ICE_TX_CONTAINER, ec, + if (ice_set_rc_coalesce(ec, &vsi->tx_rings[q_num]->q_vector->tx, vsi)) return -EINVAL; } else if (q_num < vsi->num_rxq) { - if (ice_set_rc_coalesce(ICE_RX_CONTAINER, ec, + if (ice_set_rc_coalesce(ec, &vsi->rx_rings[q_num]->q_vector->rx, vsi)) return -EINVAL; } else if (q_num < vsi->num_txq) { - if (ice_set_rc_coalesce(ICE_TX_CONTAINER, ec, + if (ice_set_rc_coalesce(ec, &vsi->tx_rings[q_num]->q_vector->tx, vsi)) return -EINVAL;
drivers/net/ethernet/intel/ice/ice_lib.c +8 -8
@@ -2980,8 +2980,8 @@ ice_vsi_rebuild_get_coalesce(struct ice_vsi *vsi,ice_for_each_q_vector (vsi, i) {struct ice_q_vector *q_vector = vsi->q_vectors[i]; - coalesce[i].itr_tx = q_vector->tx.itr_setting; - coalesce[i].itr_rx = q_vector->rx.itr_setting; + coalesce[i].itr_tx = q_vector->tx.itr_settings; + coalesce[i].itr_rx = q_vector->rx.itr_settings; coalesce[i].intrl = q_vector->intrl;if (i < vsi->num_txq)
@@ -3037,21 +3037,21 @@ ice_vsi_rebuild_set_coalesce(struct ice_vsi *vsi,*/ if (i < vsi->alloc_rxq && coalesce[i].rx_valid) { rc = &vsi->q_vectors[i]->rx; - rc->itr_setting = coalesce[i].itr_rx; + rc->itr_settings = coalesce[i].itr_rx;ice_write_itr (rc, rc->itr_setting); }else if (i < vsi->alloc_rxq) { rc = &vsi->q_vectors[i]->rx; - rc->itr_setting = coalesce[0 ].itr_rx; + rc->itr_settings = coalesce[0 ].itr_rx;ice_write_itr (rc, rc->itr_setting); }if (i < vsi->alloc_txq && coalesce[i].tx_valid) { rc = &vsi->q_vectors[i]->tx; - rc->itr_setting = coalesce[i].itr_tx; + rc->itr_settings = coalesce[i].itr_tx;ice_write_itr (rc, rc->itr_setting); }else if (i < vsi->alloc_txq) { rc = &vsi->q_vectors[i]->tx; - rc->itr_setting = coalesce[0 ].itr_tx; + rc->itr_settings = coalesce[0 ].itr_tx;ice_write_itr (rc, rc->itr_setting); }
@@ -3065,12 +3065,12 @@ ice_vsi_rebuild_set_coalesce(struct ice_vsi *vsi,for (; i < vsi->num_q_vectors; i++) {/* transmit */ rc = &vsi->q_vectors[i]->tx; - rc->itr_setting = coalesce[0 ].itr_tx; + rc->itr_settings = coalesce[0 ].itr_tx;ice_write_itr (rc, rc->itr_setting);/* receive */ rc = &vsi->q_vectors[i]->rx; - rc->itr_setting = coalesce[0 ].itr_rx; + rc->itr_settings = coalesce[0 ].itr_rx;ice_write_itr (rc, rc->itr_setting); vsi->q_vectors[i]->intrl = coalesce[0 ].intrl;
drivers/net/ethernet/intel/ice/ice_main.c +4 -3
@@ -5656,9 +5656,10 @@ static int ice_up_complete(struct ice_vsi *vsi)netif_carrier_on (vsi->netdev); } -/* clear this now, and the first stats read will be used as baseline */ - vsi->stat_offsets_loaded = false; - +/* Perform an initial read of the statistics registers now to +* set the baseline so counters are ready when interface is up +*/ +ice_update_eth_stats (vsi);ice_service_task_schedule (pf);return 0 ;
drivers/net/ethernet/intel/ice/ice_ptp.c +15 -4
@@ -254,12 +254,19 @@ ice_ptp_read_src_clk_reg(struct ice_pf *pf, struct ptp_system_timestamp *sts)* This function must be called periodically to ensure that the cached value * is never more than 2 seconds old. It must also be called whenever the PHC * time has been changed. +* +* Return: +* * 0 - OK, successfully updated +* * -EAGAIN - PF was busy, need to reschedule the update */ -static void ice_ptp_update_cached_phctime (struct ice_pf *pf) +static int ice_ptp_update_cached_phctime (struct ice_pf *pf) {u64 systime;int i; +if (test_and_set_bit (ICE_CFG_BUSY , pf->state)) +return -EAGAIN ; +/* Read the current PHC time */ systime =ice_ptp_read_src_clk_reg (pf,NULL );
@@ -282,6 +289,9 @@ static void ice_ptp_update_cached_phctime(struct ice_pf *pf)WRITE_ONCE (vsi->rx_rings[j]->cached_phctime, systime); } } +clear_bit (ICE_CFG_BUSY , pf->state); + +return 0 ; }/**
@@ -1418,17 +1428,18 @@ static void ice_ptp_periodic_work(struct kthread_work *work) { struct ice_ptp *ptp = container_of(work, struct ice_ptp, work.work); struct ice_pf *pf = container_of(ptp, struct ice_pf, ptp); +int err;if (!test_bit (ICE_FLAG_PTP , pf->flags))return ; -ice_ptp_update_cached_phctime (pf); + err =ice_ptp_update_cached_phctime (pf);ice_ptp_tx_tstamp_cleanup (&pf->hw, &pf->ptp.port.tx); -/* Run twice a second */ +/* Run twice a second or reschedule if phc update failed */ kthread_queue_delayed_work (ptp->kworker, &ptp->work, -msecs_to_jiffies (500 )); +msecs_to_jiffies (err ?10 :500 )); }/**
drivers/net/ethernet/intel/ice/ice_txrx.h +14 -3
@@ -332,6 +332,11 @@ static inline bool ice_ring_is_xdp(struct ice_ring *ring)return !!(ring->flags &ICE_TX_FLAGS_RING_XDP ); } +enum ice_container_type { +ICE_RX_CONTAINER , +ICE_TX_CONTAINER , +}; +struct ice_ring_container {/* head of linked-list of rings */ struct ice_ring *ring;
@@ -340,9 +345,15 @@ struct ice_ring_container {/* this matches the maximum number of ITR bits, but in usec * values, so it is shifted left one bit (bit zero is ignored) */ - u16 itr_setting:13; - u16 itr_reserved:2; - u16 itr_mode:1; +union { +struct { +u16 itr_setting:13 ; +u16 itr_reserved:2 ; +u16 itr_mode:1 ; + }; +u16 itr_settings; + }; +enum ice_container_type type; };struct ice_coalesce_stored {
drivers/net/ethernet/intel/igb/igb_main.c +2 -1
@@ -5505,7 +5505,8 @@ static void igb_watchdog_task(struct work_struct *work)break ; } -if (adapter->link_speed !=SPEED_1000 ) +if (adapter->link_speed !=SPEED_1000 || + !hw->phy.ops.read_reg) goto no_wait;/* wait for Remote receiver status OK */
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +7 -0
@@ -3542,6 +3542,13 @@ static netdev_features_t mlx5e_fix_features(struct net_device *netdev, } } +if (params->xdp_prog) { +if (features &NETIF_F_LRO ) { +netdev_warn (netdev,"LRO is incompatible with XDP\n" ); + features &= ~NETIF_F_LRO ; + } + } +if (MLX5E_GET_PFLAG (params,MLX5E_PFLAG_RX_CQE_COMPRESS )) { features &= ~NETIF_F_RXHASH ;if (netdev->features &NETIF_F_RXHASH )
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c +4 -2
@@ -846,7 +846,8 @@ struct mlx5dr_action * mlx5dr_action_create_mult_dest_tbl(struct mlx5dr_domain *dmn, struct mlx5dr_action_dest *dests, u32 num_of_dests, - bool ignore_flow_level) + bool ignore_flow_level, + u32 flow_source) { struct mlx5dr_cmd_flow_destination_hw_info *hw_dests;struct mlx5dr_action **ref_actions;
@@ -914,7 +915,8 @@ mlx5dr_action_create_mult_dest_tbl(struct mlx5dr_domain *dmn, reformat_req, &action->dest_tbl->fw_tbl.id, &action->dest_tbl->fw_tbl.group_id, - ignore_flow_level); + ignore_flow_level, + flow_source);if (ret) goto free_action;
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_fw.c +3 -1
@@ -104,7 +104,8 @@ int mlx5dr_fw_create_md_tbl(struct mlx5dr_domain *dmn,bool reformat_req, u32 *tbl_id, u32 *group_id, - bool ignore_flow_level) + bool ignore_flow_level, + u32 flow_source) { struct mlx5dr_cmd_create_flow_table_attr ft_attr = {};struct mlx5dr_cmd_fte_info fte_info = {};
@@ -139,6 +140,7 @@ int mlx5dr_fw_create_md_tbl(struct mlx5dr_domain *dmn, fte_info.val = val; fte_info.dest_arr = dest; fte_info.ignore_flow_level = ignore_flow_level; + fte_info.flow_context.flow_source = flow_source; ret =mlx5dr_cmd_set_fte (dmn->mdev,0 ,0 , &ft_info, *group_id, &fte_info);if (ret) {
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_types.h +2 -1
@@ -1394,7 +1394,8 @@ int mlx5dr_fw_create_md_tbl(struct mlx5dr_domain *dmn,bool reformat_req, u32 *tbl_id, u32 *group_id, - bool ignore_flow_level); + bool ignore_flow_level, + u32 flow_source);void mlx5dr_fw_destroy_md_tbl (struct mlx5dr_domain *dmn,u32 tbl_id,u32 group_id);#endif /* _DR_TYPES_H_ */
drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c +3 -1
@@ -492,11 +492,13 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns, }else if (num_term_actions >1 ) {bool ignore_flow_level = !!(fte->action.flags &FLOW_ACT_IGNORE_FLOW_LEVEL ); +u32 flow_source = fte->flow_context.flow_source; tmp_action =mlx5dr_action_create_mult_dest_tbl (domain, term_actions, num_term_actions, - ignore_flow_level); + ignore_flow_level, + flow_source);if (!tmp_action) { err = -EOPNOTSUPP ; goto free_actions;
drivers/net/ethernet/mellanox/mlx5/core/steering/mlx5dr.h +2 -1
@@ -96,7 +96,8 @@ struct mlx5dr_action * mlx5dr_action_create_mult_dest_tbl(struct mlx5dr_domain *dmn, struct mlx5dr_action_dest *dests, u32 num_of_dests, - bool ignore_flow_level); + bool ignore_flow_level, + u32 flow_source);struct mlx5dr_action *mlx5dr_action_create_drop (void );
drivers/net/ethernet/qlogic/qla3xxx.c +2 -1
@@ -3612,7 +3612,8 @@ static void ql_reset_work(struct work_struct *work) qdev->mem_map_registers;unsigned long hw_flags; -if (test_bit ((QL_RESET_PER_SCSI |QL_RESET_START ), &qdev->flags)) { +if (test_bit (QL_RESET_PER_SCSI , &qdev->flags) || +test_bit (QL_RESET_START , &qdev->flags)) {clear_bit (QL_LINK_MASTER , &qdev->flags);/*
drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +1 -3
@@ -181,7 +181,7 @@ static int stmmac_pci_probe(struct pci_dev *pdev,return -ENOMEM ;/* Enable pci device */ - ret =pci_enable_device (pdev); + ret =pcim_enable_device (pdev);if (ret) {dev_err (&pdev->dev,"%s: ERROR: failed to enable device\n" , __func__);
@@ -241,8 +241,6 @@ static void stmmac_pci_remove(struct pci_dev *pdev)pcim_iounmap_regions (pdev,BIT (i));break ; } - -pci_disable_device (pdev); }static int __maybe_unused stmmac_pci_suspend (struct device *dev)
drivers/net/ipa/gsi.c +4 -2
@@ -1370,9 +1370,10 @@ static void gsi_evt_ring_rx_update(struct gsi_evt_ring *evt_ring, u32 index)struct gsi_event *event_done;struct gsi_event *event;struct gsi_trans *trans; +u32 trans_count =0 ;u32 byte_count =0 ; -u32 old_index;u32 event_avail; +u32 old_index; trans_info = &channel->trans_info;
@@ -1393,6 +1394,7 @@ static void gsi_evt_ring_rx_update(struct gsi_evt_ring *evt_ring, u32 index) do { trans->len = __le16_to_cpu(event->len); byte_count += trans->len; + trans_count++; /* Move on to the next event and transaction */ if (--event_avail)
@@ -1404,7 +1406,7 @@ static void gsi_evt_ring_rx_update(struct gsi_evt_ring *evt_ring, u32 index)/* We record RX bytes when they are received */ channel->byte_count += byte_count; - channel->trans_count++; + channel->trans_count += trans_count; }/* Initialize a ring, including allocating DMA memory for its entries */
drivers/net/ppp/pppoe.c +1 -0
@@ -988,6 +988,7 @@ static int pppoe_fill_forward_path(struct net_device_path_ctx *ctx, path->encap.proto =htons (ETH_P_PPP_SES ); path->encap.id =be16_to_cpu (po->num);memcpy (path->encap.h_dest, po->pppoe_pa.remote,ETH_ALEN ); +memcpy (ctx->daddr, po->pppoe_pa.remote,ETH_ALEN ); path->dev = ctx->dev; ctx->dev = dev;
drivers/net/vmxnet3/vmxnet3_drv.c +6 -0
@@ -589,6 +589,7 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,if (dma_mapping_error (&adapter->pdev->dev, rbi->dma_addr)) {dev_kfree_skb_any (rbi->skb); + rbi->skb =NULL ; rq->stats.rx_buf_alloc_failure++;break ; }
@@ -613,6 +614,7 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,if (dma_mapping_error (&adapter->pdev->dev, rbi->dma_addr)) {put_page (rbi->page); + rbi->page =NULL ; rq->stats.rx_buf_alloc_failure++;break ; }
@@ -1666,6 +1668,10 @@ vmxnet3_rq_cleanup(struct vmxnet3_rx_queue *rq,u32 i, ring_idx;struct Vmxnet3_RxDesc *rxd; +/* ring has already been cleaned up */ +if (!rq->rx_ring[0 ].base) +return ; +for (ring_idx =0 ; ring_idx <2 ; ring_idx++) {for (i =0 ; i < rq->rx_ring[ring_idx].size; i++) {#ifdef __BIG_ENDIAN_BITFIELD
drivers/net/wireless/mediatek/mt76/mt7921/dma.c +0 -115
129 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +10 -10
@@ -1306,8 +1306,6 @@ int mt7921_mcu_sta_update(struct mt7921_dev *dev, struct ieee80211_sta *sta,int __mt7921_mcu_drv_pmctrl (struct mt7921_dev *dev) { -struct mt76_phy *mphy = &dev->mt76.phy; -struct mt76_connac_pm *pm = &dev->pm;int i, err =0 ;for (i =0 ; i <MT7921_DRV_OWN_RETRY_COUNT ; i++) {
@@ -1320,16 +1318,8 @@ int __mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev)if (i ==MT7921_DRV_OWN_RETRY_COUNT ) {dev_err (dev->mt76.dev,"driver own failed\n" ); err = -EIO ; - goto out; } -mt7921_wpdma_reinit_cond (dev); -clear_bit (MT76_STATE_PM , &mphy->state); - - pm->stats.last_wake_event = jiffies; - pm->stats.doze_time += pm->stats.last_wake_event - - pm->stats.last_doze_event; -out:return err; }
@@ -1345,6 +1335,16 @@ int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev) goto out; err =__mt7921_mcu_drv_pmctrl (dev); +if (err <0 ) + goto out; + +mt7921_wpdma_reinit_cond (dev); +clear_bit (MT76_STATE_PM , &mphy->state); + + pm->stats.last_wake_event = jiffies; + pm->stats.doze_time += pm->stats.last_wake_event - + pm->stats.last_doze_event; + out:mutex_unlock (&pm->mutex);
drivers/net/wireless/mediatek/mt76/mt7921/pci.c +121 -0
139 lines not on this page · raw message
drivers/nvme/host/core.c +1 -0
@@ -4358,6 +4358,7 @@ void nvme_start_ctrl(struct nvme_ctrl *ctrl)if (ctrl->queue_count >1 ) {nvme_queue_scan (ctrl);nvme_start_queues (ctrl); +nvme_mpath_update (ctrl); } }EXPORT_SYMBOL_GPL (nvme_start_ctrl);
drivers/nvme/host/multipath.c +23 -2
@@ -574,8 +574,17 @@ static void nvme_update_ns_ana_state(struct nvme_ana_group_desc *desc, ns->ana_grpid =le32_to_cpu (desc->grpid); ns->ana_state = desc->state;clear_bit (NVME_NS_ANA_PENDING , &ns->flags); - -if (nvme_state_is_live (ns->ana_state)) +/* +* nvme_mpath_set_live() will trigger I/O to the multipath path device +* and in turn to this path device. However we cannot accept this I/O +* if the controller is not live. This may deadlock if called from +* nvme_mpath_init_identify() and the ctrl will never complete +* initialization, preventing I/O from completing. For this case we +* will reprocess the ANA log page in nvme_mpath_update() once the +* controller is ready. +*/ +if (nvme_state_is_live (ns->ana_state) && + ns->ctrl->state ==NVME_CTRL_LIVE )nvme_mpath_set_live (ns); }
@@ -662,6 +671,18 @@ static void nvme_ana_work(struct work_struct *work)nvme_read_ana_log (ctrl); } +void nvme_mpath_update (struct nvme_ctrl *ctrl) +{ +u32 nr_change_groups =0 ; + +if (!ctrl->ana_log_buf) +return ; + +mutex_lock (&ctrl->ana_lock); +nvme_parse_ana_log (ctrl, &nr_change_groups, nvme_update_ana_state); +mutex_unlock (&ctrl->ana_lock); +} +static void nvme_anatt_timeout (struct timer_list *t) {struct nvme_ctrl *ctrl =from_timer (ctrl, t, anatt_timer);
drivers/nvme/host/nvme.h +4 -0
@@ -776,6 +776,7 @@ void nvme_mpath_add_disk(struct nvme_ns *ns, struct nvme_id_ns *id);void nvme_mpath_remove_disk (struct nvme_ns_head *head);int nvme_mpath_init_identify (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id);void nvme_mpath_init_ctrl (struct nvme_ctrl *ctrl); +void nvme_mpath_update (struct nvme_ctrl *ctrl);void nvme_mpath_uninit (struct nvme_ctrl *ctrl);void nvme_mpath_stop (struct nvme_ctrl *ctrl);bool nvme_mpath_clear_current_path (struct nvme_ns *ns);
@@ -850,6 +851,9 @@ static inline int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, "Please enable CONFIG_NVME_MULTIPATH for full support of multi-port devices.\n");return 0 ; } +static inline void nvme_mpath_update (struct nvme_ctrl *ctrl) +{ +}static inline void nvme_mpath_uninit (struct nvme_ctrl *ctrl) { }
drivers/nvme/host/pci.c +4 -1
@@ -3379,7 +3379,10 @@ static const struct pci_device_id nvme_id_table[] = { NVME_QUIRK_128_BYTES_SQES | NVME_QUIRK_SHARED_TAGS | NVME_QUIRK_SKIP_CID_GEN }, - + { PCI_DEVICE(0x144d, 0xa808), /* Samsung X5 */ + .driver_data =NVME_QUIRK_DELAY_BEFORE_CHK_RDY | +NVME_QUIRK_NO_DEEPEST_PS | + NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) }, { 0, } };
drivers/nvme/target/admin-cmd.c +1 -1
@@ -978,7 +978,7 @@ void nvmet_execute_async_event(struct nvmet_req *req) ctrl->async_event_cmds[ctrl->nr_async_event_cmds++] = req;mutex_unlock (&ctrl->lock); -schedule_work (&ctrl->async_event_work); +queue_work (nvmet_wq, &ctrl->async_event_work); }void nvmet_execute_keep_alive (struct nvmet_req *req)
drivers/nvme/target/configfs.c +1 -1
@@ -1554,7 +1554,7 @@ static void nvmet_port_release(struct config_item *item)struct nvmet_port *port =to_nvmet_port (item);/* Let inflight controllers teardown complete */ -flush_scheduled_work (); +flush_workqueue (nvmet_wq);list_del (&port->global_entry);kfree (port->ana_state);
drivers/nvme/target/core.c +18 -6
@@ -20,6 +20,9 @@ struct workqueue_struct *zbd_wq;static const struct nvmet_fabrics_ops *nvmet_transports[NVMF_TRTYPE_MAX ];static DEFINE_IDA (cntlid_ida); +struct workqueue_struct *nvmet_wq; +EXPORT_SYMBOL_GPL (nvmet_wq); +/* * This read/write semaphore is used to synchronize access to configuration * information on a target system that will result in discovery log page
@@ -205,7 +208,7 @@ void nvmet_add_async_event(struct nvmet_ctrl *ctrl, u8 event_type,list_add_tail (&aen->entry, &ctrl->async_events);mutex_unlock (&ctrl->lock); -schedule_work (&ctrl->async_event_work); +queue_work (nvmet_wq, &ctrl->async_event_work); }static void nvmet_add_to_changed_ns_log (struct nvmet_ctrl *ctrl,__le32 nsid)
@@ -385,7 +388,7 @@ static void nvmet_keep_alive_timer(struct work_struct *work)if (reset_tbkas) {pr_debug ("ctrl %d reschedule traffic based keep-alive timer\n" , ctrl->cntlid); -schedule_delayed_work (&ctrl->ka_work, ctrl->kato *HZ ); +queue_delayed_work (nvmet_wq, &ctrl->ka_work, ctrl->kato *HZ );return ; }
@@ -403,7 +406,7 @@ void nvmet_start_keep_alive_timer(struct nvmet_ctrl *ctrl)pr_debug ("ctrl %d start keep-alive timer for %d secs\n" , ctrl->cntlid, ctrl->kato); -schedule_delayed_work (&ctrl->ka_work, ctrl->kato *HZ ); +queue_delayed_work (nvmet_wq, &ctrl->ka_work, ctrl->kato *HZ ); }void nvmet_stop_keep_alive_timer (struct nvmet_ctrl *ctrl)
@@ -1477,7 +1480,7 @@ void nvmet_ctrl_fatal_error(struct nvmet_ctrl *ctrl)mutex_lock (&ctrl->lock);if (!(ctrl->csts &NVME_CSTS_CFS )) { ctrl->csts |=NVME_CSTS_CFS ; -schedule_work (&ctrl->fatal_err_work); +queue_work (nvmet_wq, &ctrl->fatal_err_work); }mutex_unlock (&ctrl->lock); }
@@ -1617,9 +1620,15 @@ static int __init nvmet_init(void) goto out_free_zbd_work_queue; } + nvmet_wq =alloc_workqueue ("nvmet-wq" ,WQ_MEM_RECLAIM ,0 ); +if (!nvmet_wq) { + error = -ENOMEM ; + goto out_free_buffered_work_queue; + } + error =nvmet_init_discovery ();if (error) - goto out_free_work_queue; + goto out_free_nvmet_work_queue; error =nvmet_init_configfs ();if (error)
@@ -1628,7 +1637,9 @@ static int __init nvmet_init(void) out_exit_discovery:nvmet_exit_discovery (); -out_free_work_queue: +out_free_nvmet_work_queue: +destroy_workqueue (nvmet_wq); +out_free_buffered_work_queue:destroy_workqueue (buffered_io_wq); out_free_zbd_work_queue:destroy_workqueue (zbd_wq);
@@ -1640,6 +1651,7 @@ static void __exit nvmet_exit(void)nvmet_exit_configfs ();nvmet_exit_discovery ();ida_destroy (&cntlid_ida); +destroy_workqueue (nvmet_wq);destroy_workqueue (buffered_io_wq);destroy_workqueue (zbd_wq);
drivers/nvme/target/fc.c +4 -4
@@ -1491,7 +1491,7 @@ __nvmet_fc_free_assocs(struct nvmet_fc_tgtport *tgtport)list_for_each_entry_rcu (assoc, &tgtport->assoc_list, a_list) {if (!nvmet_fc_tgt_a_get (assoc))continue ; -if (!schedule_work (&assoc->del_work)) +if (!queue_work (nvmet_wq, &assoc->del_work))/* already deleting - release local reference */ nvmet_fc_tgt_a_put (assoc); }
@@ -1546,7 +1546,7 @@ nvmet_fc_invalidate_host(struct nvmet_fc_target_port *target_port,continue ; assoc->hostport->invalid =1 ; noassoc = false; -if (!schedule_work (&assoc->del_work)) +if (!queue_work (nvmet_wq, &assoc->del_work))/* already deleting - release local reference */ nvmet_fc_tgt_a_put (assoc); }
@@ -1592,7 +1592,7 @@ nvmet_fc_delete_ctrl(struct nvmet_ctrl *ctrl)nvmet_fc_tgtport_put (tgtport);if (found_ctrl) { -if (!schedule_work (&assoc->del_work)) +if (!queue_work (nvmet_wq, &assoc->del_work))/* already deleting - release local reference */ nvmet_fc_tgt_a_put (assoc);return ;
@@ -2060,7 +2060,7 @@ nvmet_fc_rcv_ls_req(struct nvmet_fc_target_port *target_port, iod->rqstdatalen = lsreqbuf_len; iod->hosthandle = hosthandle; -schedule_work (&iod->work); +queue_work (nvmet_wq, &iod->work);return 0 ; }
drivers/nvme/target/fcloop.c +8 -8
@@ -360,7 +360,7 @@ fcloop_h2t_ls_req(struct nvme_fc_local_port *localport,spin_lock (&rport->lock);list_add_tail (&rport->ls_list, &tls_req->ls_list);spin_unlock (&rport->lock); -schedule_work (&rport->ls_work); +queue_work (nvmet_wq, &rport->ls_work);return ret; }
@@ -393,7 +393,7 @@ fcloop_h2t_xmt_ls_rsp(struct nvmet_fc_target_port *targetport,spin_lock (&rport->lock);list_add_tail (&rport->ls_list, &tls_req->ls_list);spin_unlock (&rport->lock); -schedule_work (&rport->ls_work); +queue_work (nvmet_wq, &rport->ls_work); }return 0 ;
@@ -448,7 +448,7 @@ fcloop_t2h_ls_req(struct nvmet_fc_target_port *targetport, void *hosthandle,spin_lock (&tport->lock);list_add_tail (&tport->ls_list, &tls_req->ls_list);spin_unlock (&tport->lock); -schedule_work (&tport->ls_work); +queue_work (nvmet_wq, &tport->ls_work);return ret; }
@@ -480,7 +480,7 @@ fcloop_t2h_xmt_ls_rsp(struct nvme_fc_local_port *localport,spin_lock (&tport->lock);list_add_tail (&tport->ls_list, &tls_req->ls_list);spin_unlock (&tport->lock); -schedule_work (&tport->ls_work); +queue_work (nvmet_wq, &tport->ls_work); }return 0 ;
@@ -520,7 +520,7 @@ fcloop_tgt_discovery_evt(struct nvmet_fc_target_port *tgtport) tgt_rscn->tport = tgtport->private;INIT_WORK (&tgt_rscn->work, fcloop_tgt_rscn_work); -schedule_work (&tgt_rscn->work); +queue_work (nvmet_wq, &tgt_rscn->work); } static void
@@ -739,7 +739,7 @@ fcloop_fcp_req(struct nvme_fc_local_port *localport,INIT_WORK (&tfcp_req->tio_done_work, fcloop_tgt_fcprqst_done_work);kref_init (&tfcp_req->ref); -schedule_work (&tfcp_req->fcp_rcv_work); +queue_work (nvmet_wq, &tfcp_req->fcp_rcv_work);return 0 ; }
@@ -921,7 +921,7 @@ fcloop_fcp_req_release(struct nvmet_fc_target_port *tgtport, {struct fcloop_fcpreq *tfcp_req =tgt_fcp_req_to_fcpreq (tgt_fcpreq); -schedule_work (&tfcp_req->tio_done_work); +queue_work (nvmet_wq, &tfcp_req->tio_done_work); } static void
@@ -976,7 +976,7 @@ fcloop_fcp_abort(struct nvme_fc_local_port *localport,if (abortio)/* leave the reference while the work item is scheduled */ -WARN_ON (!schedule_work (&tfcp_req->abort_rcv_work)); +WARN_ON (!queue_work (nvmet_wq, &tfcp_req->abort_rcv_work));else {/* * as the io has already had the done callback made,
drivers/nvme/target/io-cmd-file.c +3 -3
@@ -292,7 +292,7 @@ static void nvmet_file_execute_flush(struct nvmet_req *req)if (!nvmet_check_transfer_len (req,0 ))return ;INIT_WORK (&req->f.work, nvmet_file_flush_work); -schedule_work (&req->f.work); +queue_work (nvmet_wq, &req->f.work); }static void nvmet_file_execute_discard (struct nvmet_req *req)
@@ -352,7 +352,7 @@ static void nvmet_file_execute_dsm(struct nvmet_req *req)if (!nvmet_check_data_len_lte (req,nvmet_dsm_len (req)))return ;INIT_WORK (&req->f.work, nvmet_file_dsm_work); -schedule_work (&req->f.work); +queue_work (nvmet_wq, &req->f.work); }static void nvmet_file_write_zeroes_work (struct work_struct *w)
@@ -382,7 +382,7 @@ static void nvmet_file_execute_write_zeroes(struct nvmet_req *req)if (!nvmet_check_transfer_len (req,0 ))return ;INIT_WORK (&req->f.work, nvmet_file_write_zeroes_work); -schedule_work (&req->f.work); +queue_work (nvmet_wq, &req->f.work); }u16 nvmet_file_parse_io_cmd (struct nvmet_req *req)
drivers/nvme/target/loop.c +2 -2
@@ -166,7 +166,7 @@ static blk_status_t nvme_loop_queue_rq(struct blk_mq_hw_ctx *hctx, iod->req.transfer_len =blk_rq_payload_bytes (req); } -schedule_work (&iod->work); +queue_work (nvmet_wq, &iod->work);return BLK_STS_OK ; }
@@ -187,7 +187,7 @@ static void nvme_loop_submit_async_event(struct nvme_ctrl *arg)return ; } -schedule_work (&iod->work); +queue_work (nvmet_wq, &iod->work); } static int nvme_loop_init_iod(struct nvme_loop_ctrl *ctrl,
drivers/nvme/target/nvmet.h +1 -0
@@ -365,6 +365,7 @@ struct nvmet_req {extern struct workqueue_struct *buffered_io_wq;extern struct workqueue_struct *zbd_wq; +extern struct workqueue_struct *nvmet_wq;static inline void nvmet_set_result (struct nvmet_req *req,u32 result) {
drivers/nvme/target/passthru.c +1 -1
@@ -281,7 +281,7 @@ static void nvmet_passthru_execute_cmd(struct nvmet_req *req)if (req->p.use_workqueue || effects) {INIT_WORK (&req->p.work, nvmet_passthru_execute_cmd_work); req->p.rq = rq; -schedule_work (&req->p.work); +queue_work (nvmet_wq, &req->p.work); }else { rq->end_io_data = req; blk_execute_rq_nowait(ns ? ns->disk : NULL, rq, 0,
drivers/nvme/target/rdma.c +6 -6
@@ -1583,7 +1583,7 @@ static int nvmet_rdma_queue_connect(struct rdma_cm_id *cm_id,if (queue->host_qid ==0 ) {/* Let inflight controller teardown complete */ -flush_scheduled_work (); +flush_workqueue (nvmet_wq); } ret =nvmet_rdma_cm_accept (cm_id, queue, &event->param.conn);
@@ -1668,7 +1668,7 @@ static void __nvmet_rdma_queue_disconnect(struct nvmet_rdma_queue *queue)if (disconnect) {rdma_disconnect (queue->cm_id); -schedule_work (&queue->release_work); +queue_work (nvmet_wq, &queue->release_work); } }
@@ -1698,7 +1698,7 @@ static void nvmet_rdma_queue_connect_fail(struct rdma_cm_id *cm_id,mutex_unlock (&nvmet_rdma_queue_mutex);pr_err ("failed to connect queue %d\n" , queue->idx); -schedule_work (&queue->release_work); +queue_work (nvmet_wq, &queue->release_work); }/**
@@ -1772,7 +1772,7 @@ static int nvmet_rdma_cm_handler(struct rdma_cm_id *cm_id,if (!queue) {struct nvmet_rdma_port *port = cm_id->context; -schedule_delayed_work (&port->repair_work,0 ); +queue_delayed_work (nvmet_wq, &port->repair_work,0 );break ; } fallthrough;
@@ -1902,7 +1902,7 @@ static void nvmet_rdma_repair_port_work(struct work_struct *w)nvmet_rdma_disable_port (port); ret =nvmet_rdma_enable_port (port);if (ret) -schedule_delayed_work (&port->repair_work,5 *HZ ); +queue_delayed_work (nvmet_wq, &port->repair_work,5 *HZ ); }static int nvmet_rdma_add_port (struct nvmet_port *nport)
@@ -2046,7 +2046,7 @@ static void nvmet_rdma_remove_one(struct ib_device *ib_device, void *client_data }mutex_unlock (&nvmet_rdma_queue_mutex); -flush_scheduled_work (); +flush_workqueue (nvmet_wq); }static struct ib_client nvmet_rdma_ib_client = {
drivers/nvme/target/tcp.c +5 -5
@@ -1251,7 +1251,7 @@ static void nvmet_tcp_schedule_release_queue(struct nvmet_tcp_queue *queue)spin_lock (&queue->state_lock);if (queue->state !=NVMET_TCP_Q_DISCONNECTING ) { queue->state =NVMET_TCP_Q_DISCONNECTING ; -schedule_work (&queue->release_work); +queue_work (nvmet_wq, &queue->release_work); }spin_unlock (&queue->state_lock); }
@@ -1662,7 +1662,7 @@ static void nvmet_tcp_listen_data_ready(struct sock *sk) goto out;if (sk->sk_state ==TCP_LISTEN ) -schedule_work (&port->accept_work); +queue_work (nvmet_wq, &port->accept_work); out:read_unlock_bh (&sk->sk_callback_lock); }
@@ -1793,7 +1793,7 @@ static u16 nvmet_tcp_install_queue(struct nvmet_sq *sq)if (sq->qid ==0 ) {/* Let inflight controller teardown complete */ -flush_scheduled_work (); +flush_workqueue (nvmet_wq); } queue->nr_cmds = sq->size *2 ;
@@ -1854,12 +1854,12 @@ static void __exit nvmet_tcp_exit(void)nvmet_unregister_transport (&nvmet_tcp_ops); -flush_scheduled_work (); +flush_workqueue (nvmet_wq);mutex_lock (&nvmet_tcp_queue_mutex);list_for_each_entry (queue, &nvmet_tcp_queue_list, queue_list)kernel_sock_shutdown (queue->sock,SHUT_RDWR );mutex_unlock (&nvmet_tcp_queue_mutex); -flush_scheduled_work (); +flush_workqueue (nvmet_wq);destroy_workqueue (nvmet_tcp_wq); }
drivers/pci/controller/pci-aardvark.c +22 -26
95 lines not on this page · raw message
drivers/pci/pci.c +10 -0
@@ -2888,6 +2888,16 @@ static const struct dmi_system_id bridge_d3_blacklist[] = {DMI_MATCH (DMI_BOARD_VENDOR ,"Gigabyte Technology Co., Ltd." ), DMI_MATCH(DMI_BOARD_NAME, "X299 DESIGNARE EX-CF"), }, +/* +* Downstream device is not accessible after putting a root port +* into D3cold and back into D0 on Elo i2. +*/ + .ident ="Elo i2" , + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Elo Touch Solutions" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"Elo i2" ), + DMI_MATCH(DMI_PRODUCT_VERSION, "RevB"), + }, }, #endif { }
drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c +3 -11
@@ -1236,18 +1236,12 @@ FUNC_GROUP_DECL(SALT8, AA12);FUNC_GROUP_DECL (WDTRST4 ,AA12 );#define AE12 196 -SIG_EXPR_LIST_DECL_SEMG (AE12 ,FWSPIDQ2 ,FWQSPID ,FWSPID , -SIG_DESC_SET (SCU438 ,4 ));SIG_EXPR_LIST_DECL_SESG (AE12 ,GPIOY4 ,GPIOY4 ); -PIN_DECL_ (AE12 ,SIG_EXPR_LIST_PTR (AE12 ,FWSPIDQ2 ), -SIG_EXPR_LIST_PTR (AE12 ,GPIOY4 )); +PIN_DECL_ (AE12 ,SIG_EXPR_LIST_PTR (AE12 ,GPIOY4 ));#define AF12 197 -SIG_EXPR_LIST_DECL_SEMG (AF12 ,FWSPIDQ3 ,FWQSPID ,FWSPID , -SIG_DESC_SET (SCU438 ,5 ));SIG_EXPR_LIST_DECL_SESG (AF12 ,GPIOY5 ,GPIOY5 ); -PIN_DECL_ (AF12 ,SIG_EXPR_LIST_PTR (AF12 ,FWSPIDQ3 ), -SIG_EXPR_LIST_PTR (AF12 ,GPIOY5 )); +PIN_DECL_ (AF12 ,SIG_EXPR_LIST_PTR (AF12 ,GPIOY5 ));#define AC12 198SSSF_PIN_DECL (AC12 ,GPIOY6 ,FWSPIABR ,SIG_DESC_SET (SCU438 ,6 ));
@@ -1520,9 +1514,8 @@ SIG_EXPR_LIST_DECL_SEMG(Y4, EMMCDAT7, EMMCG8, EMMC, SIG_DESC_SET(SCU404, 3));PIN_DECL_3 (Y4 ,GPIO18E3 ,FWSPIDMISO ,VBMISO ,EMMCDAT7 );GROUP_DECL (FWSPID ,Y1 ,Y2 ,Y3 ,Y4 ); -GROUP_DECL (FWQSPID ,Y1 ,Y2 ,Y3 ,Y4 ,AE12 ,AF12 );GROUP_DECL (EMMCG8 ,AB4 ,AA4 ,AC4 ,AA5 ,Y5 ,AB5 ,AB6 ,AC5 ,Y1 ,Y2 ,Y3 ,Y4 ); -FUNC_DECL_2 (FWSPID ,FWSPID ,FWQSPID ); +FUNC_DECL_1 (FWSPID ,FWSPID );FUNC_GROUP_DECL (VB ,Y1 ,Y2 ,Y3 ,Y4 );FUNC_DECL_3 (EMMC ,EMMCG1 ,EMMCG4 ,EMMCG8 );/*
@@ -1918,7 +1911,6 @@ static const struct aspeed_pin_group aspeed_g6_groups[] = {ASPEED_PINCTRL_GROUP (FSI2 ),ASPEED_PINCTRL_GROUP (FWSPIABR ),ASPEED_PINCTRL_GROUP (FWSPID ), -ASPEED_PINCTRL_GROUP (FWQSPID ),ASPEED_PINCTRL_GROUP (FWSPIWP ),ASPEED_PINCTRL_GROUP (GPIT0 ), ASPEED_PINCTRL_GROUP(GPIT1),
drivers/pinctrl/mediatek/pinctrl-mt8365.c +1 -1
@@ -259,7 +259,7 @@ static const struct mtk_pin_ies_smt_set mt8365_ies_set[] = {MTK_PIN_IES_SMT_SPEC (104 ,104 ,0x420 ,13 ),MTK_PIN_IES_SMT_SPEC (105 ,109 ,0x420 ,14 ),MTK_PIN_IES_SMT_SPEC (110 ,113 ,0x420 ,15 ), -MTK_PIN_IES_SMT_SPEC (114 ,112 ,0x420 ,16 ), +MTK_PIN_IES_SMT_SPEC (114 ,116 ,0x420 ,16 ),MTK_PIN_IES_SMT_SPEC (117 ,119 ,0x420 ,17 ),MTK_PIN_IES_SMT_SPEC (120 ,122 ,0x420 ,18 ), MTK_PIN_IES_SMT_SPEC(123, 125, 0x420, 19),
drivers/platform/chrome/cros_ec_debugfs.c +6 -6
@@ -25,6 +25,9 @@#define CIRC_ADD (idx, size, value) (((idx) + (value)) & ((size) - 1)) +/* waitqueue for log readers */ +static DECLARE_WAIT_QUEUE_HEAD (cros_ec_debugfs_log_wq); +/** * struct cros_ec_debugfs - EC debugging information. *
@@ -33,7 +36,6 @@* @log_buffer: circular buffer for console log information * @read_msg: preallocated EC command and buffer to read console log * @log_mutex: mutex to protect circular buffer -* @log_wq: waitqueue for log readers * @log_poll_work: recurring task to poll EC for new console log data * @panicinfo_blob: panicinfo debugfs blob */
@@ -44,7 +46,6 @@ struct cros_ec_debugfs {struct circ_buf log_buffer;struct cros_ec_command *read_msg;struct mutex log_mutex; -wait_queue_head_t log_wq;struct delayed_work log_poll_work;/* EC panicinfo */ struct debugfs_blob_wrapper panicinfo_blob;
@@ -107,7 +108,7 @@ static void cros_ec_console_log_work(struct work_struct *__work) buf_space--; } -wake_up (&debug_info->log_wq); +wake_up (&cros_ec_debugfs_log_wq); }mutex_unlock (&debug_info->log_mutex);
@@ -141,7 +142,7 @@ static ssize_t cros_ec_console_log_read(struct file *file, char __user *buf,mutex_unlock (&debug_info->log_mutex); - ret =wait_event_interruptible (debug_info->log_wq, + ret =wait_event_interruptible (cros_ec_debugfs_log_wq,CIRC_CNT (cb->head, cb->tail,LOG_SIZE ));if (ret <0 )return ret;
@@ -173,7 +174,7 @@ static __poll_t cros_ec_console_log_poll(struct file *file,struct cros_ec_debugfs *debug_info = file->private_data;__poll_t mask =0 ; -poll_wait (file, &debug_info->log_wq, wait); +poll_wait (file, &cros_ec_debugfs_log_wq, wait);mutex_lock (&debug_info->log_mutex); if (CIRC_CNT(debug_info->log_buffer.head,
@@ -377,7 +378,6 @@ static int cros_ec_create_console_log(struct cros_ec_debugfs *debug_info) debug_info->log_buffer.tail =0 ;mutex_init (&debug_info->log_mutex); -init_waitqueue_head (&debug_info->log_wq);debugfs_create_file ("console_log" ,S_IFREG |0444 , debug_info->dir, debug_info, &cros_ec_console_log_fops);
drivers/rtc/class.c +9 -0
@@ -26,6 +26,15 @@ struct class *rtc_class;static void rtc_device_release (struct device *dev) {struct rtc_device *rtc =to_rtc_device (dev); +struct timerqueue_head *head = &rtc->timerqueue; +struct timerqueue_node *node; + +mutex_lock (&rtc->ops_lock); +while ((node =timerqueue_getnext (head))) +timerqueue_del (head, node); +mutex_unlock (&rtc->ops_lock); + +cancel_work_sync (&rtc->irqwork);ida_simple_remove (&rtc_ida, rtc->id);mutex_destroy (&rtc->ops_lock);
drivers/rtc/rtc-mc146818-lib.c +15 -1
@@ -146,6 +146,17 @@ int mc146818_get_time(struct rtc_time *time) }EXPORT_SYMBOL_GPL (mc146818_get_time); +/* AMD systems don't allow access to AltCentury with DV1 */ +static bool apply_amd_register_a_behavior (void ) +{ +#ifdef CONFIG_X86 +if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD || + boot_cpu_data.x86_vendor ==X86_VENDOR_HYGON ) +return true; +#endif +return false; +} +/* Set the current date and time in the real time clock. */ int mc146818_set_time (struct rtc_time *time) {
@@ -219,7 +230,10 @@ int mc146818_set_time(struct rtc_time *time) save_control =CMOS_READ (RTC_CONTROL );CMOS_WRITE ((save_control|RTC_SET ),RTC_CONTROL ); save_freq_select =CMOS_READ (RTC_FREQ_SELECT ); -CMOS_WRITE ((save_freq_select|RTC_DIV_RESET2 ),RTC_FREQ_SELECT ); +if (apply_amd_register_a_behavior ()) +CMOS_WRITE ((save_freq_select & ~RTC_AMD_BANK_SELECT ),RTC_FREQ_SELECT ); +else +CMOS_WRITE ((save_freq_select|RTC_DIV_RESET2 ),RTC_FREQ_SELECT );#ifdef CONFIG_MACH_DECSTATION CMOS_WRITE (real_yrs,RTC_DEC_YEAR );
drivers/rtc/rtc-pcf2127.c +2 -1
@@ -374,7 +374,8 @@ static int pcf2127_watchdog_init(struct device *dev, struct pcf2127 *pcf2127)static int pcf2127_rtc_read_alarm (struct device *dev,struct rtc_wkalrm *alrm) {struct pcf2127 *pcf2127 =dev_get_drvdata (dev); -unsigned int buf[5 ], ctrl2; +u8 buf[5 ]; +unsigned int ctrl2;int ret; ret =regmap_read (pcf2127->regmap,PCF2127_REG_CTRL2 , &ctrl2);
drivers/rtc/rtc-sun6i.c +5 -9
@@ -138,7 +138,7 @@ struct sun6i_rtc_dev {const struct sun6i_rtc_clk_data *data;void __iomem *base;int irq; -unsigned long alarm; +time64_t alarm;struct clk_hw hw;struct clk_hw *int_osc;
@@ -510,10 +510,8 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm)struct sun6i_rtc_dev *chip =dev_get_drvdata (dev);struct rtc_time *alrm_tm = &wkalrm->time;struct rtc_time tm_now; -unsigned long time_now =0 ; -unsigned long time_set =0 ; -unsigned long time_gap =0 ; -int ret =0 ; +time64_t time_now, time_set; +int ret; ret =sun6i_rtc_gettime (dev, &tm_now);if (ret <0 ) {
@@ -528,9 +526,7 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm)return -EINVAL ; } - time_gap = time_set - time_now; - -if (time_gap >U32_MAX ) { +if ((time_set - time_now) >U32_MAX ) {dev_err (dev,"Date too far in the future\n" );return -EINVAL ; }
@@ -539,7 +535,7 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm)writel (0 , chip->base +SUN6I_ALRM_COUNTER );usleep_range (100 ,300 ); -writel (time_gap, chip->base +SUN6I_ALRM_COUNTER ); +writel (time_set - time_now, chip->base +SUN6I_ALRM_COUNTER ); chip->alarm = time_set;sun6i_rtc_setaie (wkalrm->enabled, chip);
drivers/scsi/device_handler/scsi_dh_alua.c +1 -2
@@ -1172,9 +1172,8 @@ static blk_status_t alua_prep_fn(struct scsi_device *sdev, struct request *req)case SCSI_ACCESS_STATE_OPTIMAL :case SCSI_ACCESS_STATE_ACTIVE :case SCSI_ACCESS_STATE_LBA : -return BLK_STS_OK ;case SCSI_ACCESS_STATE_TRANSITIONING : -return BLK_STS_AGAIN ; +return BLK_STS_OK ;default : req->rq_flags |=RQF_QUIET ;return BLK_STS_IOERR ;
drivers/scsi/qla2xxx/qla_target.c +3 -0
@@ -3837,6 +3837,9 @@ int qlt_abort_cmd(struct qla_tgt_cmd *cmd)spin_lock_irqsave (&cmd->cmd_lock, flags);if (cmd->aborted) { +if (cmd->sg_mapped) +qlt_unmap_sg (vha, cmd); +spin_unlock_irqrestore (&cmd->cmd_lock, flags);/* * It's normal to see 2 calls in this path:
drivers/scsi/ufs/ufshpb.c +7 -12
@@ -1257,6 +1257,13 @@ void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)struct utp_hpb_rsp *rsp_field = &lrbp->ucd_rsp_ptr->hr;int data_seg_len; + data_seg_len =be32_to_cpu (lrbp->ucd_rsp_ptr->header.dword_2) + &MASK_RSP_UPIU_DATA_SEG_LEN ; + +/* If data segment length is zero, rsp_field is not valid */ +if (!data_seg_len) +return ; +if (unlikely (lrbp->lun != rsp_field->lun)) {struct scsi_device *sdev;bool found = false;
@@ -1291,18 +1298,6 @@ void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)return ; } - data_seg_len =be32_to_cpu (lrbp->ucd_rsp_ptr->header.dword_2) - &MASK_RSP_UPIU_DATA_SEG_LEN ; - -/* To flush remained rsp_list, we queue the map_work task */ -if (!data_seg_len) { -if (!ufshpb_is_general_lun (hpb->lun)) -return ; - -ufshpb_kick_map_work (hpb); -return ; - } -BUILD_BUG_ON (sizeof (struct utp_hpb_rsp ) !=UTP_HPB_RSP_SIZE );if (!ufshpb_is_hpb_rsp_valid (hba, lrbp, rsp_field))
drivers/usb/gadget/legacy/raw_gadget.c +2 -0
@@ -145,6 +145,7 @@ enum dev_state {STATE_DEV_INVALID =0 ,STATE_DEV_OPENED ,STATE_DEV_INITIALIZED , +STATE_DEV_REGISTERING ,STATE_DEV_RUNNING ,STATE_DEV_CLOSED ,STATE_DEV_FAILED
@@ -508,6 +509,7 @@ static int raw_ioctl_run(struct raw_dev *dev, unsigned long value) ret = -EINVAL ; goto out_unlock; } + dev->state =STATE_DEV_REGISTERING ;spin_unlock_irqrestore (&dev->lock, flags); ret =usb_gadget_probe_driver (&dev->driver);
drivers/vhost/net.c +7 -8
@@ -1450,13 +1450,9 @@ static struct socket *get_raw_socket(int fd)return ERR_PTR (r); } -static struct ptr_ring *get_tap_ptr_ring (int fd) +static struct ptr_ring *get_tap_ptr_ring (struct file *file) {struct ptr_ring *ring; -struct file *file =fget (fd); - -if (!file) -return NULL ; ring =tun_get_tx_ring (file);if (!IS_ERR (ring)) goto out;
@@ -1465,7 +1461,6 @@ static struct ptr_ring *get_tap_ptr_ring(int fd) goto out; ring =NULL ; out: -fput (file);return ring; }
@@ -1552,8 +1547,12 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) r =vhost_net_enable_vq (n, vq);if (r) goto err_used; -if (index ==VHOST_NET_VQ_RX ) - nvq->rx_ring =get_tap_ptr_ring (fd); +if (index ==VHOST_NET_VQ_RX ) { +if (sock) + nvq->rx_ring =get_tap_ptr_ring (sock->file); +else + nvq->rx_ring =NULL ; + } oldubufs = nvq->ubufs; nvq->ubufs = ubufs;
drivers/vhost/vdpa.c +4 -1
@@ -97,8 +97,11 @@ static void vhost_vdpa_setup_vq_irq(struct vhost_vdpa *v, u16 qid)return ; irq = ops->get_vq_irq (vdpa, qid); +if (irq <0 ) +return ; +irq_bypass_unregister_producer (&vq->call_ctx.producer); -if (!vq->call_ctx.ctx || irq <0 ) +if (!vq->call_ctx.ctx)return ; vq->call_ctx.producer.token = vq->call_ctx.ctx;
drivers/video/fbdev/core/fbmem.c +1 -4
@@ -1436,10 +1436,7 @@ fb_release(struct inode *inode, struct file *file) __acquires(&info->lock) __releases(&info->lock) { -struct fb_info *const info =file_fb_info (file); - -if (!info) -return -ENODEV ; +struct fb_info *const info = file->private_data;lock_fb_info (info);if (info->fbops->fb_release)
drivers/video/fbdev/core/fbsysfs.c +4 -0
@@ -80,6 +80,10 @@ void framebuffer_release(struct fb_info *info) {if (!info)return ; + +if (WARN_ON (refcount_read (&info->count))) +return ; +kfree (info->apertures);kfree (info); }
drivers/watchdog/sp5100_tco.c +219 -115
19 lines not on this page · raw message
fs/nilfs2/inode.c +145 -14
159 lines not on this page · raw message
fs/nilfs2/mdt.c +29 -14
43 lines not on this page · raw message
include/net/xfrm.h +29 -29
58 lines not on this page · raw message
kernel/debug/kdb/kdb_main.c +59 -3
62 lines not on this page · raw message
net/ceph/osd_client.c +119 -183
302 lines not on this page · raw message
net/netfilter/nf_flow_table_core.c +21 -59
80 lines not on this page · raw message
net/xfrm/xfrm_user.c +18 -25
43 lines not on this page · raw message
tools/build/feature/test-libbpf-btf__load_from_kernel_by_id.c new file +7 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/fcnal-test.sh +12 -0
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.