Linux 5.17.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.17.10 kernel.
All users of the 5.17 kernel series must upgrade.
The updated 5.17.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.17.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-g6-pinctrl.dtsi | 9 arch/arm/boot/dts/aspeed-g6.dtsi | 10 arch/arm/kernel/entry-armv.S | 2 arch/arm/kernel/stacktrace.c | 10 arch/arm/mm/proc-v7-bugs.c | 1 arch/arm64/boot/dts/qcom/sm8250-mtp.dts | 12 arch/arm64/boot/dts/qcom/sm8250.dtsi | 4 arch/arm64/kernel/cpu_errata.c | 2 arch/arm64/kernel/mte.c | 3 arch/arm64/kernel/paravirt.c | 29 arch/arm64/kernel/relocate_kernel.S | 22 arch/arm64/kvm/sys_regs.c | 3 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/kvm/pmu.c | 7 arch/x86/um/shared/sysdep/syscalls_64.h | 5 block/mq-deadline.c | 1 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/amd/display/dc/dcn31/dcn31_init.c | 5 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/gt/intel_reset.c | 2 drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 16 drivers/gpu/drm/i915/gt/uc/intel_uc.c | 2 drivers/gpu/drm/i915/gt/uc/intel_uc.h | 2 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/mmc/core/mmc_ops.c | 2 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_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 | 11 drivers/net/ethernet/intel/igb/igb_main.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 27 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 131 ++- drivers/net/ethernet/mellanox/mlx5/core/fs_core.h | 6 drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c | 25 drivers/net/ethernet/mellanox/mlx5/core/fw_reset.h | 1 drivers/net/ethernet/mellanox/mlx5/core/main.c | 19 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c | 71 +- drivers/net/ethernet/mellanox/mlx5/core/steering/dr_fw.c | 4 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste_v0.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/microchip/lan966x/lan966x_main.c | 28 drivers/net/ethernet/qlogic/qla3xxx.c | 3 drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 4 drivers/net/ipa/gsi.c | 6 drivers/net/ipa/ipa_endpoint.c | 13 drivers/net/ppp/pppoe.c | 1 drivers/net/vmxnet3/vmxnet3_drv.c | 6 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/pinctrl/pinctrl-ocelot.c | 4 drivers/platform/chrome/cros_ec_debugfs.c | 12 drivers/platform/surface/surface_gpe.c | 8 drivers/platform/x86/intel/pmt/telemetry.c | 2 drivers/platform/x86/thinkpad_acpi.c | 49 + drivers/ptp/ptp_ocp.c | 5 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/vdpa/mlx5/net/mlx5_vnet.c | 61 - 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/cifs/cifs_debug.c | 2 fs/cifs/cifsfs.c | 4 fs/cifs/cifsglob.h | 18 fs/cifs/cifssmb.c | 11 fs/cifs/connect.c | 32 fs/cifs/misc.c | 2 fs/cifs/smb2pdu.c | 4 fs/gfs2/file.c | 4 fs/gfs2/glock.c | 10 fs/gfs2/inode.c | 49 - 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/audit.h | 2 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/auditsc.c | 6 kernel/debug/debug_core.c | 24 kernel/debug/kdb/kdb_main.c | 62 + kernel/events/core.c | 14 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 | 36 - net/mptcp/pm.c | 5 net/mptcp/protocol.h | 16 net/mptcp/subflow.c | 14 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/wireless/scan.c | 2 net/xfrm/xfrm_policy.c | 10 net/xfrm/xfrm_user.c | 43 - scripts/kconfig/confdata.c | 2 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/tests/bpf.c | 10 tools/perf/tests/shell/stat_all_pmu.sh | 10 tools/perf/util/bpf-event.c | 4 tools/perf/util/stat.c | 17 tools/testing/selftests/net/fcnal-test.sh | 12 tools/virtio/Makefile | 3 virt/kvm/kvm_main.c | 2 204 files changed, 2185 insertions(+), 1147 deletions(-)
Aaron Lewis (1):
kvm: x86/pmu: Fix the compare function used by the pmu event filter
Al Viro (1):
Fix double fget() in vhost_net_set_backend()
Alex Elder (2):
net: ipa: certain dropped packets aren't accounted for
net: ipa: record proper RX transaction count
Andre Przywara (1):
rtc: sun6i: Fix time overflow handling
Andreas Gruenbacher (3):
gfs2: cancel timed-out glock requests
gfs2: Switch lock order of inode and iopen glock
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
Athira Rajeev (2):
perf test: Fix "all PMU test" to skip hv_24x7/hv_gpci tests on powerpc perf test bpf: Skip test if clang is not present
Aya Levin (1):
net/mlx5e: Block rx-gro-hw feature in switchdev mode
Bart Van Assche (1):
block/mq-deadline: Set the fifo_time member also if inserting at head
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
Dmitry Baryshkov (1):
arm64: dts: qcom: sm8250: don't enable rx/tx macro by default
Duoming Zhou (1):
NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc
Eli Cohen (1):
vdpa/mlx5: Use consistent RQT size
Eric Yang (1):
drm/amd/display: undo clearing of z10 related function pointers
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
Gal Pressman (1):
net/mlx5e: Remove HW-GRO from reported features
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.17.10
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
Horatiu Vultur (2):
pinctrl: ocelot: Fix for lan966x alt mode
net: lan966x: Fix assignment of the MAC address
Howard Chiu (1):
ARM: dts: aspeed: Add video engine to g6
Hugo Villeneuve (1):
rtc: pcf2127: fix bug when reading alarm registers
Ian Rogers (1):
perf stat: Fix and validate CPU map inputs in synthetic PERF_RECORD_STAT events
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
Johannes Berg (1):
nl80211: fix locking in nl80211_set_tx_bitrate_mask()
Jonathan Lemon (1):
ptp: ocp: have adjtime handle negative delta_ns correctly
Julian Orth (1):
audit,io_uring,io-wq: call __audit_uring_exit for dummy contexts
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 (2):
nl80211: validate S1G channel width
cfg80211: retrieve S1G operating channel number
Krzysztof Kozlowski (1):
riscv: dts: sifive: fu540-c000: align dma node name with dtschema
Lina Wang (1):
net: fix wrong network header length
Maor Dickman (1):
net/mlx5: DR, Fix missing flow_source when creating multi-destination FW table
Marc Zyngier (1):
KVM: arm64: vgic-v3: Consistently populate ID_AA64PFR0_EL1.GIC
Marek Vasut (1):
Input: ili210x - fix reset timing
Mario Limonciello (3):
rtc: mc146818-lib: Fix the AltCentury for AMD platforms drm/amd: Don't reset dGPUs if the system is going to s2idle platform/x86: thinkpad_acpi: Convert btusb DMI list to quirks
Mark Pearson (1):
platform/x86: thinkpad_acpi: Correct dual fan probe
Mark Rutland (1):
arm64: kexec: load from kimage prior to clobbering
Masahiro Yamada (1):
kconfig: add fflush() before ferror() check
Mattijs Korpershoek (1):
pinctrl: mediatek: mt8365: fix IES control pins
Maxim Mikityanskiy (2):
net/mlx5e: Properly block LRO when XDP is enabled net/mlx5e: Properly block HW GRO when XDP is enabled
Maximilian Luz (1):
platform/surface: gpe: Add support for Surface Pro 8
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 (3):
mptcp: fix subflow accounting on close 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
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
Prarit Bhargava (1):
platform/x86/intel: Fix 'rmmod pmt_telemetry' panic
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 (2):
KVM: x86/mmu: Update number of zapped pages even if page list is stable
KVM: Free new dirty bitmap if creating a new memslot fails
Shay Drory (2):
net/mlx5: Initialize flow steering during driver probe net/mlx5: Drain fw_reset when removing device
Shreyas K K (1):
arm64: Enable repeat tlbi workaround on KRYO4XX gold CPUs
Steve French (1):
smb3: cleanup and clarify status of tree connections
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
Ulf Hansson (1):
mmc: core: Fix busy polling for MMC_SEND_OP_COND again
Umesh Nerlige Ramappa (1):
i915/guc/reset: Make __guc_reset_context aware of guilty engines
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()
Yevgeny Kliteynik (1):
net/mlx5: DR, Ignore modify TTL on RX if device doesn't support it
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
@@ -189,6 +189,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 = 17 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Superb Owl
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 +10 -0
@@ -389,6 +389,16 @@ sbc: secure-boot-controller@1e6f2000 { 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
@@ -1040,7 +1040,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
@@ -54,17 +54,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 #ifdef CONFIG_KRETPROBES if (is_kretprobe_trampoline (frame->pc))
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/boot/dts/qcom/sm8250-mtp.dts +12 -0
@@ -622,6 +622,10 @@ &qupv3_id_2 { status = "okay"; }; +&rxmacro { + status = "okay"; +}; + &slpi { status = "okay"; firmware-name = "qcom/sm8250/slpi.mbn";
@@ -773,6 +777,8 @@ right_spkr: wsa8810-left@0,4{ }; &swr1 { + status = "okay"; + wcd_rx: wcd9380-rx@0,4 { compatible = "sdw20217010d00"; reg = <0 4>;
@@ -781,6 +787,8 @@ wcd_rx: wcd9380-rx@0,4 { }; &swr2 { + status = "okay"; + wcd_tx: wcd9380-tx@0,3 { compatible = "sdw20217010d00"; reg = <0 3>;
@@ -819,6 +827,10 @@ config { }; }; +&txmacro { + status = "okay"; +}; + &uart12 { status = "okay"; };
arch/arm64/boot/dts/qcom/sm8250.dtsi +4 -0
@@ -2150,6 +2150,7 @@ rxmacro: rxmacro@3200000 { pinctrl-0 = <&rx_swr_active>; compatible = "qcom,sm8250-lpass-rx-macro"; reg = <0 0x3200000 0 0x1000>; + status = "disabled"; clocks = <&q6afecc LPASS_CLK_ID_TX_CORE_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>, <&q6afecc LPASS_CLK_ID_TX_CORE_NPL_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
@@ -2168,6 +2169,7 @@ rxmacro: rxmacro@3200000 { swr1: soundwire-controller@3210000 { reg = <0 0x3210000 0 0x2000>; compatible = "qcom,soundwire-v1.5.1"; + status = "disabled"; interrupts = <GIC_SPI 298 IRQ_TYPE_LEVEL_HIGH>; clocks = <&rxmacro>; clock-names = "iface";
@@ -2195,6 +2197,7 @@ txmacro: txmacro@3220000 { pinctrl-0 = <&tx_swr_active>; compatible = "qcom,sm8250-lpass-tx-macro"; reg = <0 0x3220000 0 0x1000>; + status = "disabled"; clocks = <&q6afecc LPASS_CLK_ID_TX_CORE_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>, <&q6afecc LPASS_CLK_ID_TX_CORE_NPL_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
@@ -2218,6 +2221,7 @@ swr2: soundwire-controller@3230000 { compatible = "qcom,soundwire-v1.5.1"; interrupts-extended = <&intc GIC_SPI 297 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "core"; + status = "disabled"; clocks = <&txmacro>; clock-names = "iface";
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
@@ -76,6 +76,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/arm64/kernel/relocate_kernel.S +15 -7
@@ -37,6 +37,15 @@ * safe memory that has been set up to be preserved during the copy operation. */ SYM_CODE_START(arm64_relocate_new_kernel) + /* + * The kimage structure isn't allocated specially and may be clobbered + * during relocation. We must load any values we need from it prior to + * any relocation occurring. + */ + ldr x28, [x0, #KIMAGE_START] + ldr x27, [x0, #KIMAGE_ARCH_EL2_VECTORS] + ldr x26, [x0, #KIMAGE_ARCH_DTB_MEM] + /* Setup the list loop variables. */ ldr x18, [x0, #KIMAGE_ARCH_ZERO_PAGE] /* x18 = zero page for BBM */ ldr x17, [x0, #KIMAGE_ARCH_TTBR1] /* x17 = linear map copy */
@@ -72,21 +81,20 @@ SYM_CODE_START(arm64_relocate_new_kernel) ic iallu dsb nsh isb - ldr x4, [x0, #KIMAGE_START] /* relocation start */ - ldr x1, [x0, #KIMAGE_ARCH_EL2_VECTORS] /* relocation start */ - ldr x0, [x0, #KIMAGE_ARCH_DTB_MEM] /* dtb address */ turn_off_mmu x12, x13 /* Start new image. */ - cbz x1, .Lel1 - mov x1, x4 /* relocation start */ - mov x2, x0 /* dtb address */ + cbz x27, .Lel1 + mov x1, x28 /* kernel entry point */ + mov x2, x26 /* dtb address */ mov x3, xzr mov x4, xzr mov x0, #HVC_SOFT_RESTART hvc #0 /* Jumps from el2 */ .Lel1: + mov x0, x26 /* dtb address */ + mov x1, xzr mov x2, xzr mov x3, xzr - br x4 /* Jumps from el1 */ + br x28 /* Jumps from el1 */ SYM_CODE_END(arm64_relocate_new_kernel)
arch/arm64/kvm/sys_regs.c +1 -2
@@ -1080,8 +1080,7 @@ static u64 read_id_reg(const struct kvm_vcpu *vcpu, val |=FIELD_PREP (ARM64_FEATURE_MASK (ID_AA64PFR0_CSV2 ), (u64 )vcpu->kvm->arch.pfr0_csv2); val &= ~ARM64_FEATURE_MASK (ID_AA64PFR0_CSV3 ); val |=FIELD_PREP (ARM64_FEATURE_MASK (ID_AA64PFR0_CSV3 ), (u64 )vcpu->kvm->arch.pfr0_csv3); -if (irqchip_in_kernel (vcpu->kvm) && - vcpu->kvm->arch.vgic.vgic_model ==KVM_DEV_TYPE_ARM_VGIC_V3 ) { +if (kvm_vgic_global_state.type ==VGIC_V3 ) { val &= ~ARM64_FEATURE_MASK (ID_AA64PFR0_GIC ); val |=FIELD_PREP (ARM64_FEATURE_MASK (ID_AA64PFR0_GIC ),1 ); }
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
@@ -167,7 +167,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
@@ -269,7 +269,7 @@ 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;switch (ccdf->pec) {case 0x003a :/* Service Action or Error Recovery Successful */
@@ -286,6 +286,8 @@ static void __zpci_event_error(struct zpci_ccdf_err *ccdf)break ; }pci_dev_put (pdev); +no_pdev: +zpci_zdev_put (zdev); }void zpci_event_error (void *data)
@@ -314,6 +316,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_dbg(3, "avl fid:%x, fh:%x, pec:%x\n",
@@ -378,6 +381,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
@@ -5611,6 +5611,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,
@@ -5642,11 +5643,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/kvm/pmu.c +5 -2
@@ -171,9 +171,12 @@ static bool pmc_resume_counter(struct kvm_pmc *pmc)return true; } -static int cmp_u64 (const void *a,const void *b) +static int cmp_u64 (const void *pa,const void *pb) { -return *(__u64 *)a - *(__u64 *)b; +u64 a = *(u64 *)pa; +u64 b = *(u64 *)pb; + +return (a > b) - (a < b); }void reprogram_gp_counter (struct kvm_pmc *pmc,u64 eventsel)
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), \
block/mq-deadline.c +1 -0
@@ -742,6 +742,7 @@ static void dd_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,if (at_head) {list_add (&rq->queuelist, &per_prio->dispatch); + rq->fifo_time = jiffies; }else {deadline_add_rq_rb (per_prio, rq);
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
@@ -117,6 +117,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
@@ -407,6 +407,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);
@@ -416,6 +417,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
@@ -1422,9 +1422,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
@@ -2289,7 +2289,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/amd/display/dc/dcn31/dcn31_init.c +0 -5
@@ -153,9 +153,4 @@ void dcn31_hw_sequencer_construct(struct dc *dc) dc->hwss.init_hw = dcn20_fpga_init_hw; dc->hwseq->funcs.init_pipes =NULL ; } -if (dc->debug.disable_z10) { -/*hw not support z10 or sw disable it*/ - dc->hwss.z10_restore =NULL ; - dc->hwss.z10_save_init =NULL ; - } }
drivers/gpu/drm/drm_dp_mst_topology.c +1 -0
@@ -4852,6 +4852,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
@@ -375,21 +375,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/gt/intel_reset.c +1 -1
@@ -791,7 +791,7 @@ static int gt_reset(struct intel_gt *gt, intel_engine_mask_t stalled_mask)__intel_engine_reset (engine, stalled_mask & engine->mask);local_bh_enable (); -intel_uc_reset (>->uc, true); +intel_uc_reset (>->uc,ALL_ENGINES );intel_ggtt_restore_fences (gt->ggtt);
drivers/gpu/drm/i915/gt/uc/intel_guc.h +1 -1
@@ -417,7 +417,7 @@ int intel_guc_global_policies_update(struct intel_guc *guc);void intel_guc_context_ban (struct intel_context *ce,struct i915_request *rq);void intel_guc_submission_reset_prepare (struct intel_guc *guc); -void intel_guc_submission_reset (struct intel_guc *guc,bool stalled); +void intel_guc_submission_reset (struct intel_guc *guc,intel_engine_mask_t stalled);void intel_guc_submission_reset_finish (struct intel_guc *guc);void intel_guc_submission_cancel_requests (struct intel_guc *guc);
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +8 -8
@@ -1603,9 +1603,9 @@ __unwind_incomplete_requests(struct intel_context *ce)spin_unlock_irqrestore (&sched_engine->lock, flags); } -static void __guc_reset_context (struct intel_context *ce,bool stalled) +static void __guc_reset_context (struct intel_context *ce,intel_engine_mask_t stalled) { -bool local_stalled; +bool guilty;struct i915_request *rq;unsigned long flags;u32 head;
@@ -1647,7 +1647,7 @@ static void __guc_reset_context(struct intel_context *ce, bool stalled)if (!intel_context_is_pinned (ce)) goto next_context; - local_stalled = false; + guilty = false; rq =intel_context_find_active_request (ce);if (!rq) { head = ce->ring->tail;
@@ -1655,14 +1655,14 @@ static void __guc_reset_context(struct intel_context *ce, bool stalled) }if (i915_request_started (rq)) - local_stalled = true; + guilty = stalled & ce->engine->mask;GEM_BUG_ON (i915_active_is_idle (&ce->active)); head =intel_ring_wrap (ce->ring, rq->head); -__i915_request_reset (rq, local_stalled && stalled); +__i915_request_reset (rq, guilty); out_replay: -guc_reset_state (ce, head, local_stalled && stalled); +guc_reset_state (ce, head, guilty); next_context:if (i != number_children) ce =list_next_entry (ce, parallel.child_link);
@@ -1673,7 +1673,7 @@ static void __guc_reset_context(struct intel_context *ce, bool stalled)intel_context_put (parent); } -void intel_guc_submission_reset (struct intel_guc *guc,bool stalled) +void intel_guc_submission_reset (struct intel_guc *guc,intel_engine_mask_t stalled) {struct intel_context *ce;unsigned long index;
@@ -4042,7 +4042,7 @@ static void guc_context_replay(struct intel_context *ce) {struct i915_sched_engine *sched_engine = ce->engine->sched_engine; -__guc_reset_context (ce, true); +__guc_reset_context (ce, ce->engine->mask);tasklet_hi_schedule (&sched_engine->tasklet); }
drivers/gpu/drm/i915/gt/uc/intel_uc.c +1 -1
@@ -592,7 +592,7 @@ void intel_uc_reset_prepare(struct intel_uc *uc)__uc_sanitize (uc); } -void intel_uc_reset (struct intel_uc *uc,bool stalled) +void intel_uc_reset (struct intel_uc *uc,intel_engine_mask_t stalled) {struct intel_guc *guc = &uc->guc;
drivers/gpu/drm/i915/gt/uc/intel_uc.h +1 -1
@@ -42,7 +42,7 @@ void intel_uc_driver_late_release(struct intel_uc *uc);void intel_uc_driver_remove (struct intel_uc *uc);void intel_uc_init_mmio (struct intel_uc *uc);void intel_uc_reset_prepare (struct intel_uc *uc); -void intel_uc_reset (struct intel_uc *uc,bool stalled); +void intel_uc_reset (struct intel_uc *uc,intel_engine_mask_t stalled);void intel_uc_reset_finish (struct intel_uc *uc);void intel_uc_cancel_requests (struct intel_uc *uc);void intel_uc_suspend (struct intel_uc *uc);
drivers/gpu/drm/i915/i915_reg.h +16 -0
@@ -7938,6 +7938,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
@@ -951,9 +951,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/mmc/core/mmc_ops.c +1 -1
@@ -21,7 +21,7 @@#define MMC_BKOPS_TIMEOUT_MS (120 * 1000)/* 120s */ #define MMC_SANITIZE_TIMEOUT_MS (240 * 1000)/* 240s */ -#define MMC_OP_COND_PERIOD_US (1 * 1000)/* 1ms */ +#define MMC_OP_COND_PERIOD_US (4 * 1000)/* 4ms */ #define MMC_OP_COND_TIMEOUT_MS 1000/* 1s */ static const u8 tuning_blk_pattern_4bit[] = {
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
@@ -346,7 +346,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;
@@ -364,12 +363,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 =
@@ -377,18 +381,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;
@@ -446,7 +449,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 );
@@ -455,7 +458,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
@@ -1217,7 +1217,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]) {
@@ -1256,6 +1255,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
@@ -1399,8 +1399,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) {
@@ -1785,6 +1787,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_lib.c +8 -8
@@ -3207,8 +3207,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)
@@ -3264,21 +3264,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); }
@@ -3292,12 +3292,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
@@ -5907,9 +5907,10 @@ static int ice_up_complete(struct ice_vsi *vsi)ice_ptp_link_change (pf, pf->hw.pf_id, true); } -/* 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
@@ -499,12 +499,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 );
@@ -527,6 +534,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 ; }/**
@@ -2322,17 +2332,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 +8 -3
@@ -379,9 +379,14 @@ 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; };
drivers/net/ethernet/intel/igb/igb_main.c +2 -1
@@ -5512,7 +5512,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 +23 -4
@@ -3829,6 +3829,10 @@ static netdev_features_t mlx5e_fix_uplink_rep_features(struct net_device *netdevif (netdev->features &NETIF_F_NTUPLE )netdev_warn (netdev,"Disabling ntuple, not supported in switchdev mode\n" ); + features &= ~NETIF_F_GRO_HW ; +if (netdev->features &NETIF_F_GRO_HW ) +netdev_warn (netdev,"Disabling HW_GRO, not supported in switchdev mode\n" ); +return features; }
@@ -3861,6 +3865,25 @@ 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 (features &NETIF_F_GRO_HW ) { +netdev_warn (netdev,"HW GRO is incompatible with XDP\n" ); + features &= ~NETIF_F_GRO_HW ; + } + } + +if (priv->xsk.refcnt) { +if (features &NETIF_F_GRO_HW ) { +netdev_warn (netdev,"HW GRO is incompatible with AF_XDP (%u XSKs are active)\n" , + priv->xsk.refcnt); + features &= ~NETIF_F_GRO_HW ; + } + } +if (MLX5E_GET_PFLAG (params,MLX5E_PFLAG_RX_CQE_COMPRESS )) { features &= ~NETIF_F_RXHASH ;if (netdev->features &NETIF_F_RXHASH )
@@ -4805,10 +4828,6 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev) netdev->hw_features |=NETIF_F_HW_VLAN_CTAG_FILTER ; netdev->hw_features |=NETIF_F_HW_VLAN_STAG_TX ; -if (!!MLX5_CAP_GEN (mdev, shampo) && -mlx5e_check_fragmented_striding_rq_cap (mdev)) - netdev->hw_features |=NETIF_F_GRO_HW ; -if (mlx5e_tunnel_any_tx_proto_supported (mdev)) { netdev->hw_enc_features |=NETIF_F_HW_CSUM ; netdev->hw_enc_features |=NETIF_F_TSO ;
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +75 -56
153 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/fs_core.h +4 -2
@@ -293,8 +293,10 @@ int mlx5_flow_namespace_set_peer(struct mlx5_flow_root_namespace *ns,int mlx5_flow_namespace_set_mode (struct mlx5_flow_namespace *ns,enum mlx5_flow_steering_mode mode); -int mlx5_init_fs (struct mlx5_core_dev *dev); -void mlx5_cleanup_fs (struct mlx5_core_dev *dev); +int mlx5_fs_core_alloc (struct mlx5_core_dev *dev); +void mlx5_fs_core_free (struct mlx5_core_dev *dev); +int mlx5_fs_core_init (struct mlx5_core_dev *dev); +void mlx5_fs_core_cleanup (struct mlx5_core_dev *dev);int mlx5_fs_egress_acls_init (struct mlx5_core_dev *dev,int total_vports);void mlx5_fs_egress_acls_cleanup (struct mlx5_core_dev *dev);
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c +22 -3
@@ -8,7 +8,8 @@enum {MLX5_FW_RESET_FLAGS_RESET_REQUESTED ,MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST , -MLX5_FW_RESET_FLAGS_PENDING_COMP +MLX5_FW_RESET_FLAGS_PENDING_COMP , +MLX5_FW_RESET_FLAGS_DROP_NEW_REQUESTS };struct mlx5_fw_reset {
@@ -165,7 +166,10 @@ static void poll_sync_reset(struct timer_list *t)if (fatal_error) {mlx5_core_warn (dev,"Got Device Reset\n" ); -queue_work (fw_reset->wq, &fw_reset->reset_reload_work); +if (!test_bit (MLX5_FW_RESET_FLAGS_DROP_NEW_REQUESTS , &fw_reset->reset_flags)) +queue_work (fw_reset->wq, &fw_reset->reset_reload_work); +else +mlx5_core_err (dev,"Device is being removed, Drop new reset work\n" );return ; }
@@ -390,9 +394,12 @@ static int fw_reset_event_notifier(struct notifier_block *nb, unsigned long acti struct mlx5_fw_reset *fw_reset = mlx5_nb_cof(nb, struct mlx5_fw_reset, nb);struct mlx5_eqe *eqe = data; +if (test_bit (MLX5_FW_RESET_FLAGS_DROP_NEW_REQUESTS , &fw_reset->reset_flags)) +return NOTIFY_DONE ; +switch (eqe->sub_type) {case MLX5_GENERAL_SUBTYPE_FW_LIVE_PATCH_EVENT : -queue_work (fw_reset->wq, &fw_reset->fw_live_patch_work); +queue_work (fw_reset->wq, &fw_reset->fw_live_patch_work);break ;case MLX5_GENERAL_SUBTYPE_PCI_SYNC_FOR_FW_UPDATE_EVENT :mlx5_sync_reset_events_handle (fw_reset, eqe);
@@ -436,6 +443,18 @@ void mlx5_fw_reset_events_stop(struct mlx5_core_dev *dev)mlx5_eq_notifier_unregister (dev, &dev->priv.fw_reset->nb); } +void mlx5_drain_fw_reset (struct mlx5_core_dev *dev) +{ +struct mlx5_fw_reset *fw_reset = dev->priv.fw_reset; + +set_bit (MLX5_FW_RESET_FLAGS_DROP_NEW_REQUESTS , &fw_reset->reset_flags); +cancel_work_sync (&fw_reset->fw_live_patch_work); +cancel_work_sync (&fw_reset->reset_request_work); +cancel_work_sync (&fw_reset->reset_reload_work); +cancel_work_sync (&fw_reset->reset_now_work); +cancel_work_sync (&fw_reset->reset_abort_work); +} +int mlx5_fw_reset_init (struct mlx5_core_dev *dev) {struct mlx5_fw_reset *fw_reset =kzalloc (sizeof (*fw_reset),GFP_KERNEL );
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.h +1 -0
@@ -15,6 +15,7 @@ int mlx5_fw_reset_set_live_patch(struct mlx5_core_dev *dev);int mlx5_fw_reset_wait_reset_done (struct mlx5_core_dev *dev);void mlx5_fw_reset_events_start (struct mlx5_core_dev *dev);void mlx5_fw_reset_events_stop (struct mlx5_core_dev *dev); +void mlx5_drain_fw_reset (struct mlx5_core_dev *dev);int mlx5_fw_reset_init (struct mlx5_core_dev *dev);void mlx5_fw_reset_cleanup (struct mlx5_core_dev *dev);
drivers/net/ethernet/mellanox/mlx5/core/main.c +16 -3
@@ -939,6 +939,12 @@ static int mlx5_init_once(struct mlx5_core_dev *dev) goto err_sf_table_cleanup; } + err =mlx5_fs_core_alloc (dev); +if (err) { +mlx5_core_err (dev,"Failed to alloc flow steering\n" ); + goto err_fs; + } + dev->dm =mlx5_dm_create (dev);if (IS_ERR (dev->dm))mlx5_core_warn (dev,"Failed to init device memory%d\n" , err);
@@ -949,6 +955,8 @@ static int mlx5_init_once(struct mlx5_core_dev *dev)return 0 ; +err_fs: +mlx5_sf_table_cleanup (dev); err_sf_table_cleanup:mlx5_sf_hw_table_cleanup (dev); err_sf_hw_table_cleanup:
@@ -986,6 +994,7 @@ static void mlx5_cleanup_once(struct mlx5_core_dev *dev)mlx5_hv_vhca_destroy (dev->hv_vhca);mlx5_fw_tracer_destroy (dev->tracer);mlx5_dm_cleanup (dev); +mlx5_fs_core_free (dev);mlx5_sf_table_cleanup (dev);mlx5_sf_hw_table_cleanup (dev);mlx5_vhca_event_cleanup (dev);
@@ -1192,7 +1201,7 @@ static int mlx5_load(struct mlx5_core_dev *dev) goto err_tls_start; } - err =mlx5_init_fs (dev); + err =mlx5_fs_core_init (dev);if (err) {mlx5_core_err (dev,"Failed to init flow steering\n" ); goto err_fs;
@@ -1237,7 +1246,7 @@ static int mlx5_load(struct mlx5_core_dev *dev) err_vhca:mlx5_vhca_event_stop (dev); err_set_hca: -mlx5_cleanup_fs (dev); +mlx5_fs_core_cleanup (dev); err_fs:mlx5_accel_tls_cleanup (dev); err_tls_start:
@@ -1266,7 +1275,7 @@ static void mlx5_unload(struct mlx5_core_dev *dev)mlx5_ec_cleanup (dev);mlx5_sf_hw_table_destroy (dev);mlx5_vhca_event_stop (dev); -mlx5_cleanup_fs (dev); +mlx5_fs_core_cleanup (dev);mlx5_accel_ipsec_cleanup (dev);mlx5_accel_tls_cleanup (dev);mlx5_fpga_device_stop (dev);
@@ -1619,6 +1628,10 @@ static void remove_one(struct pci_dev *pdev)struct mlx5_core_dev *dev =pci_get_drvdata (pdev);struct devlink *devlink =priv_to_devlink (dev); +/* mlx5_drain_fw_reset() is using devlink APIs. Hence, we must drain +* fw_reset before unregistering the devlink. +*/ +mlx5_drain_fw_reset (dev);devlink_unregister (devlink);mlx5_crdump_disable (dev);mlx5_drain_health_wq (dev);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_action.c +50 -21
126 lines not on this page · raw message
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_ste_v0.c +2 -2
@@ -419,7 +419,7 @@ dr_ste_v0_set_actions_tx(struct mlx5dr_domain *dmn,* encapsulation. The reason for that is that we support * modify headers for outer headers only */ -if (action_type_set[DR_ACTION_TYP_MODIFY_HDR ]) { +if (action_type_set[DR_ACTION_TYP_MODIFY_HDR ] && attr->modify_actions) {dr_ste_v0_set_entry_type (last_ste,DR_STE_TYPE_MODIFY_PKT ); dr_ste_v0_set_rewrite_actions(last_ste, attr->modify_actions,
@@ -511,7 +511,7 @@ dr_ste_v0_set_actions_rx(struct mlx5dr_domain *dmn, } } -if (action_type_set[DR_ACTION_TYP_MODIFY_HDR ]) { +if (action_type_set[DR_ACTION_TYP_MODIFY_HDR ] && attr->modify_actions) {if (dr_ste_v0_get_entry_type (last_ste) ==DR_STE_TYPE_MODIFY_PKT ) dr_ste_v0_arr_init_next(&last_ste, added_stes,
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_types.h +2 -1
@@ -1463,7 +1463,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
@@ -520,6 +520,7 @@ 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;if (num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX || fs_dr_num_actions ==MLX5_FLOW_CONTEXT_ACTION_MAX ) {
@@ -529,7 +530,8 @@ static int mlx5_cmd_dr_create_fte(struct mlx5_flow_root_namespace *ns, 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/microchip/lan966x/lan966x_main.c +28 -0
@@ -100,6 +100,24 @@ static int lan966x_create_targets(struct platform_device *pdev,return 0 ; } +static bool lan966x_port_unique_address (struct net_device *dev) +{ +struct lan966x_port *port =netdev_priv (dev); +struct lan966x *lan966x = port->lan966x; +int p; + +for (p =0 ; p < lan966x->num_phys_ports; ++p) { + port = lan966x->ports[p]; +if (!port || port->dev == dev) +continue ; + +if (ether_addr_equal (dev->dev_addr, port->dev->dev_addr)) +return false; + } + +return true; +} +static int lan966x_port_set_mac_address (struct net_device *dev,void *p) {struct lan966x_port *port =netdev_priv (dev);
@@ -107,16 +125,26 @@ static int lan966x_port_set_mac_address(struct net_device *dev, void *p)const struct sockaddr *addr = p;int ret; +if (ether_addr_equal (addr->sa_data, dev->dev_addr)) +return 0 ; +/* Learn the new net device MAC address in the mac table. */ ret =lan966x_mac_cpu_learn (lan966x, addr->sa_data,HOST_PVID );if (ret)return ret; +/* If there is another port with the same address as the dev, then don't +* delete it from the MAC table +*/ +if (!lan966x_port_unique_address (dev)) + goto out; +/* Then forget the previous one. */ ret =lan966x_mac_cpu_forget (lan966x, dev->dev_addr,HOST_PVID );if (ret)return ret; +out:eth_hw_addr_set (dev, addr->sa_data);return ret; }
drivers/net/ethernet/qlogic/qla3xxx.c +2 -1
@@ -3614,7 +3614,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
@@ -1367,9 +1367,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;
@@ -1390,6 +1391,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)
@@ -1401,7 +1403,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/ipa/ipa_endpoint.c +6 -7
@@ -1169,13 +1169,12 @@ static void ipa_endpoint_skb_copy(struct ipa_endpoint *endpoint,return ; skb =__dev_alloc_skb (len,GFP_ATOMIC ); -if (!skb) -return ; - -/* Copy the data into the socket buffer and receive it */ -skb_put (skb, len); -memcpy (skb->data, data, len); - skb->truesize += extra; +if (skb) { +/* Copy the data into the socket buffer and receive it */ +skb_put (skb, len); +memcpy (skb->data, data, len); + skb->truesize += extra; + }ipa_modem_skb_rx (endpoint->netdev, skb); }
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/nvme/host/core.c +1 -0
@@ -4422,6 +4422,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
@@ -635,8 +635,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); }
@@ -723,6 +732,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
@@ -800,6 +800,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);
@@ -874,6 +875,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
@@ -3470,7 +3470,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
@@ -984,7 +984,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)
@@ -1479,7 +1482,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); }
@@ -1620,9 +1623,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)
@@ -1631,7 +1640,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);
@@ -1643,6 +1654,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
@@ -366,6 +366,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 (rq, false, nvmet_passthru_req_done);
drivers/nvme/target/rdma.c +6 -6
@@ -1584,7 +1584,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);
@@ -1669,7 +1669,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); } }
@@ -1699,7 +1699,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); }/**
@@ -1773,7 +1773,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;
@@ -1903,7 +1903,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)
@@ -2053,7 +2053,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
@@ -1269,7 +1269,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); }
@@ -1684,7 +1684,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); }
@@ -1815,7 +1815,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 ;
@@ -1876,12 +1876,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
@@ -2920,6 +2920,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/pinctrl/pinctrl-ocelot.c +3 -1
@@ -129,6 +129,7 @@ enum {FUNC_PTP1 ,FUNC_PTP2 ,FUNC_PTP3 , +FUNC_PTPSYNC_0 ,FUNC_PTPSYNC_1 ,FUNC_PTPSYNC_2 , FUNC_PTPSYNC_3,
@@ -252,6 +253,7 @@ static const char *const ocelot_function_names[] = { [FUNC_PTP1] = "ptp1", [FUNC_PTP2] = "ptp2", [FUNC_PTP3] = "ptp3", + [FUNC_PTPSYNC_0] = "ptpsync_0", [FUNC_PTPSYNC_1] = "ptpsync_1", [FUNC_PTPSYNC_2] = "ptpsync_2", [FUNC_PTPSYNC_3] = "ptpsync_3",
@@ -891,7 +893,7 @@ LAN966X_P(31, GPIO, FC3_c, CAN1, NONE, OB_TRG, RECO_b, NONLAN966X_P (32 ,GPIO , FC3_c,NONE , SGPIO_a,NONE , MIIM_Sa,NONE ,R );LAN966X_P (33 ,GPIO , FC1_b,NONE , SGPIO_a,NONE , MIIM_Sa, MIIM_b,R );LAN966X_P (34 ,GPIO , FC1_b,NONE , SGPIO_a,NONE , MIIM_Sa, MIIM_b,R ); -LAN966X_P (35 ,GPIO , FC1_b,NONE , SGPIO_a, CAN0_b,NONE ,NONE ,R ); +LAN966X_P (35 ,GPIO , FC1_b,PTPSYNC_0 , SGPIO_a, CAN0_b,NONE ,NONE ,R );LAN966X_P (36 ,GPIO ,NONE ,PTPSYNC_1 ,NONE , CAN0_b,NONE ,NONE ,R );LAN966X_P (37 ,GPIO ,FC_SHRD0 ,PTPSYNC_2 ,TWI_SLC_GATE_AD ,NONE ,NONE ,NONE ,R );LAN966X_P (38 ,GPIO ,NONE ,PTPSYNC_3 ,NONE ,NONE ,NONE ,NONE ,R );
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 )
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel/pmt/telemetry.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/platform/x86/thinkpad_acpi.c +37 -12
49 lines not on this page · raw message
drivers/scsi/device_handler/scsi_dh_alua.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/vdpa/mlx5/net/mlx5_vnet.c +21 -40
61 lines not on this page · raw message
drivers/watchdog/sp5100_tco.c +219 -115
334 lines not on this page · raw message
fs/gfs2/inode.c +27 -22
49 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/perf/tests/shell/stat_all_pmu.sh +10 -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.