Skip to contentSkip to conversation

Linux 5.17.10

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages May 25, 2022 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'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()

author maintainer
#1 lore raw
Documentation/arm64/silicon-errata.rst +3 -0
index ea281dd75517..29b136849d30 100644
@@ -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
index 57b68d6c7c70..eb6e2f2dc9eb 100644
@@ -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
index aba139bbd1c7..318597a4147e 100644
@@ -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
index e4775bbceecc..ac07c240419a 100644
@@ -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
index c32e87fad4dc..aac55b3aeded 100644
@@ -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
index ee3f7a599181..4bbd92d41031 100644
@@ -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
index 75e905508f27..f0c390e9d3ce 100644
@@ -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
index 06dbfb968182..fb9f3eb6bf48 100644
@@ -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
index fb99cc2827c7..7ab3627cc347 100644
@@ -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
index a92230bec1dd..bd212f6c351f 100644
@@ -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
index 146fa2e76834..10c865e311a0 100644
@@ -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
index f418ebc65f95..8a25b9df430e 100644
@@ -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
index 75fed4460407..57c7c211f8c7 100644
@@ -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
index f0a3df9e18a3..413f899e4ac6 100644
@@ -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
index 4dc2fba316ff..2ae664a3930f 100644
@@ -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
index 64726c670ca6..5204fc6d6d50 100644
@@ -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
index 3d5683e75cf1..200fe9ff641d 100644
@@ -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
index 3eef52b1a59b..fd93fdadd28c 100644
@@ -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
index 2b780786fc68..ead721965b9f 100644
@@ -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
index 792f8e0f2178..5bcd9228db5f 100644
@@ -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
index e359d2686178..ecef3a9e16c0 100644
@@ -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
index be077b39da33..5011d27461fd 100644
@@ -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
index 2e3e5b278925..ea9db5cea64e 100644
@@ -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
index 946f74dd6fba..259383e1ad44 100644
@@ -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
index e7cd16e1e0a0..32333dfc85b6 100644
@@ -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
index eca39f56c231..0604bc29f0b8 100644
@@ -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
index 48d6cd12f8a5..b6b997225841 100644
@@ -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(&regs->regs), \
+	(((*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(&regs->regs), \
 		 		      UPT_SYSCALL_ARG2(&regs->regs), \
 				      UPT_SYSCALL_ARG3(&regs->regs), \
 				      UPT_SYSCALL_ARG4(&regs->regs), \
block/mq-deadline.c +1 -0
index 3ed5eaf3446a..6ed602b2f80a 100644
@@ -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
index 478ba959362c..416f4f48f69b 100644
@@ -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
index a29cc2928be4..37b53d6779e4 100644
@@ -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(&current_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
index 23cc8297ec4c..d429ba52a719 100644
@@ -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
index 11f30fd48c14..031b5f701a0a 100644
@@ -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
index be1bf39a317d..90a920e7f664 100644
@@ -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
index a6fc96e42668..0ad5039e49b6 100644
@@ -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
index a2c8dd329b31..2db19cd640a4 100644
@@ -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
index 20780c35da1b..23cddb265a0d 100644
@@ -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
index 9a53a4de2bb7..e8e8a7402615 100644
@@ -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
index 0e12315fa0cb..98ac53ee6bb5 100644
@@ -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
index f09aeff513ee..e2c422a6825c 100644
@@ -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
index d7559e5a99ce..e708f07fe75a 100644
@@ -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
index 8b3822142fed..a1e5bb78f433 100644
@@ -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
index df10b6898987..4a2662838cd8 100644
@@ -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
index 7be0002d9d70..f577582ddd9f 100644
@@ -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(&gt->uc, true);
+	intel_uc_reset(&gt->uc, ALL_ENGINES);
 
 	intel_ggtt_restore_fences(gt->ggtt);
 
drivers/gpu/drm/i915/gt/uc/intel_guc.h +1 -1
index 3aabe164c329..e1fb8e1da128 100644
@@ -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
index 154ad726e266..1e51a365833b 100644
@@ -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
index 09ed29df67bc..cbfb5a01cc1d 100644
@@ -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
index 866b462821c0..a8f38c2c60e2 100644
@@ -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
index 4b8fee1be8ae..f4ab46ae6214 100644
@@ -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
index 45fe4a7fe0c0..901f0fb04fee 100644
@@ -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
index ccaeb2426385..ba246fabc6c1 100644
@@ -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
index 2bd407d86bae..3a48262fb3d3 100644
@@ -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
index bc11203c9cf7..72e0b767e1ba 100644
@@ -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
index 180d7e9d3400..81c55bfd6e0c 100644
@@ -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
index 77e76c9efd32..8201ce7adb77 100644
@@ -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
index d875ce3ec759..15ede7285fb5 100644
@@ -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
index 60dde29974bf..df51be3cbe06 100644
@@ -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
index c4f4b13ac469..c1100af5666b 100644
@@ -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
index 79df5a72877b..0040dcaab945 100644
@@ -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
index 15bb6f001a04..5f86cc1cfd09 100644
@@ -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
index 7f6715eb862f..30f055e1a92a 100644
@@ -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
index 45ae97b8b97d..836c67f1aa46 100644
@@ -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
index b7b3bd4816f0..ec4733272034 100644
@@ -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
index c1e4ad65b02d..4e0abfe68cfd 100644
@@ -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
index 169e3524bb1c..3500faf08671 100644
@@ -3829,6 +3829,10 @@ static netdev_features_t mlx5e_fix_uplink_rep_features(struct net_device *netdev
 	if (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
index 5469b08d635f..6366bf50a564 100644
@@ -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
index 862f5b7cb210..1c771287bee5 100644
@@ -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
index 7761ee5fc7d0..372046e173e7 100644
@@ -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
index bba72b220cc3..4e49dca94bc3 100644
@@ -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
index 68a4c32d5f34..f05ef0cd54ba 100644
@@ -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
index 2d62950f7a29..134c8484c901 100644
@@ -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
index 55fcb751e24a..64f41e7938e1 100644
@@ -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
index 3f311462bedf..05393fe11132 100644
@@ -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
index dfa223415fe2..74a7a2f4d50d 100644
@@ -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
index 1f60fd125a1d..fee148bbf13e 100644
@@ -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
index b30589a135c2..06f4d9a9e938 100644
@@ -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
index fcf17d8a0494..644bb54f5f02 100644
@@ -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
index bc981043cc80..a701178a1d13 100644
@@ -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
index 68291a3efd04..2ecfc17544a6 100644
@@ -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
index 3619520340b7..e172743948ed 100644
@@ -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
index d9d90baac72a..93e8d119d45f 100644
@@ -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
index 10f7c79caac2..0abd772c57f0 100644
@@ -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
index a703f1f5fb64..189175fff7e4 100644
@@ -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
index 68c42e831117..85f3f55c71c5 100644
@@ -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
index e4b79bee6206..94a0b933b133 100644
@@ -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
index 6fb24746de06..c3a9df5545cf 100644
@@ -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
index 496d775c6770..cea30e4f5053 100644
@@ -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
index 626caf6f1e4b..1c026a21f218 100644
@@ -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
index 22b5108168a6..c43bc5e1c7a2 100644
@@ -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
index 54606f1872b4..5c16372f3b53 100644
@@ -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
index 6be6e59d273b..80f079a7015d 100644
@@ -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
index eb1094254c82..2a968eeddda3 100644
@@ -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
index af193423c10b..ff26dbde8c1e 100644
@@ -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
index 9e5b89ae29df..2b5031b646e9 100644
@@ -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
index 1deb4043e242..0ebfe2191165 100644
@@ -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
index 7c1c43ce466b..31bab7477d53 100644
@@ -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
index 9ecce435fb3f..d25122fbe98a 100644
@@ -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
index a3fa03bcd9a3..54064714d73f 100644
@@ -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 198
 SSSF_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
index 79b1fee5a1eb..ddee0db72d26 100644
@@ -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
index 370459243007..61e3844cddbf 100644
@@ -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,      NON
 LAN966X_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
index 272c89837d74..0dbceee87a4b 100644
@@ -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)
[… more lines in the raw message]

Lines of this file are not shown. View the raw message.

drivers/platform/surface/surface_gpe.c +8 -0
index c1775db29efb..ec66fde28e75 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/intel/pmt/telemetry.c +1 -1
index 6b6f3e2a617a..f73ecfd4a309 100644

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/ptp/ptp_ocp.c +3 -2
index 17ad5f0d13b2..6585789ed695 100644

Lines of this file are not shown. View the raw message.

drivers/rtc/class.c +9 -0
index 4b460c61f1d8..40d504dac1a9 100644

Lines of this file are not shown. View the raw message.

drivers/rtc/rtc-mc146818-lib.c +15 -1
index 562f99b664a2..522449b25921 100644

Lines of this file are not shown. View the raw message.

drivers/rtc/rtc-pcf2127.c +2 -1
index 81a5b1f2e68c..6c9d8de41e7b 100644

Lines of this file are not shown. View the raw message.

drivers/rtc/rtc-sun6i.c +5 -9
index 711832c758ae..bcc0c2ce4b4e 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/device_handler/scsi_dh_alua.c +1 -2
index 37d06f993b76..1d9be771f3ee 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/qla2xxx/qla_target.c +3 -0
index b109716d44fb..7ab3c9e4d478 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/ufs/ufshpb.c +7 -12
index b34feba1f53d..8dc818b03939 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/legacy/raw_gadget.c +2 -0
index d86c3a36441e..3427ce37a5c5 100644

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/vhost/net.c +7 -8
index 792ab5f23647..297b5db47454 100644

Lines of this file are not shown. View the raw message.

drivers/vhost/vdpa.c +4 -1
index ec5249e8c32d..05f5fd2af58f 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/core/fbmem.c +1 -4
index 10a9369c9dea..00f0f282e7a1 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/core/fbsysfs.c +4 -0
index 26892940c213..82e31a2d845e 100644

Lines of this file are not shown. View the raw message.

drivers/watchdog/sp5100_tco.c +219 -115

334 lines not on this page · raw message

drivers/watchdog/sp5100_tco.h +7 -0
index adf015aa4126..6a0986d2c94b 100644

Lines of this file are not shown. View the raw message.

fs/afs/inode.c +13 -1
index 5964f8aee090..0d6c0885b2d7 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifs_debug.c +1 -1
index ea00e1a91250..9d334816eac0 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifsfs.c +2 -2
index 10aa0fb94613..59d22261e082 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifsglob.h +13 -5
index 48b343d03430..560ecc4ad87d 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifssmb.c +5 -6
index 071e2f21a7db..aca9338b0877 100644

Lines of this file are not shown. View the raw message.

fs/cifs/connect.c +16 -16
index 532770c30415..c3a26f06fdaa 100644

Lines of this file are not shown. View the raw message.

fs/cifs/misc.c +1 -1
index 56598f7dbe00..afaf59c22193 100644

Lines of this file are not shown. View the raw message.

fs/cifs/smb2pdu.c +2 -2
index f82d6fcb5c64..1704fd358b85 100644

Lines of this file are not shown. View the raw message.

fs/gfs2/file.c +3 -1
index fa071d738c78..c781c19303db 100644

Lines of this file are not shown. View the raw message.

fs/gfs2/glock.c +10 -0
index 6b23399eaee0..d368d9a2e8f0 100644

Lines of this file are not shown. View the raw message.

fs/gfs2/inode.c +27 -22

49 lines not on this page · raw message

fs/ioctl.c +1 -1
index 1ed097e94af2..85f7e4ee6924 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/btnode.c +20 -3
index 66bdaa2cf496..ca611ac09f7c 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/btnode.h +1 -0
index 11663650add7..bd5544e63a01 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/btree.c +19 -8
index 3594eabe1419..f544c22fff78 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/dat.c +3 -1
index dc51d3b7a7bf..3b55e239705f 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/gcinode.c +4 -3
index a8f5315f01e3..04fdd420eae7 100644

Lines of this file are not shown. View the 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

fs/nilfs2/mdt.h +2 -4
index 8f86080a436d..9e23bab3ff12 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/nilfs.h +7 -9
index a7b81755c350..1344f7d475d3 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/page.c +3 -4
index 063dd16d75b5..45e079295008 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/segment.c +6 -3
index 85a853334771..0afe0832c754 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/super.c +2 -3
index 63e5fa74016c..c4c6578185d5 100644

Lines of this file are not shown. View the raw message.

include/linux/audit.h +1 -1
index d06134ac6245..cece70231138 100644

Lines of this file are not shown. View the raw message.

include/linux/ceph/osd_client.h +3 -0
index 3431011f364d..cba8a6ffc329 100644

Lines of this file are not shown. View the raw message.

include/linux/ioport.h +2 -0
index 8359c50f9988..ec5f71f7135b 100644

Lines of this file are not shown. View the raw message.

include/linux/mc146818rtc.h +2 -0
index 808bb4cee230..b0da04fe087b 100644

Lines of this file are not shown. View the raw message.

include/linux/netdevice.h +1 -1
index f53ea7038441..dadd4d2f6d8a 100644

Lines of this file are not shown. View the raw message.

include/linux/security.h +2 -0
index 25b3ef71f495..7fc4e9f49f54 100644

Lines of this file are not shown. View the raw message.

include/net/ip.h +1 -0
index b51bae43b0dd..9fba950fdf12 100644

Lines of this file are not shown. View the raw message.

include/net/netns/xfrm.h +1 -5
index 947733a639a6..bd7c3be4af5d 100644

Lines of this file are not shown. View the raw message.

include/net/xfrm.h +29 -29

58 lines not on this page · raw message

include/uapi/linux/dma-buf.h +2 -2
index 8e4a2ca0bcbf..b1523cb8ab30 100644

Lines of this file are not shown. View the raw message.

kernel/auditsc.c +6 -0
index ea2ee1181921..f3a2abd6d1a1 100644

Lines of this file are not shown. View the raw message.

kernel/debug/debug_core.c +24 -0
index da06a5553835..7beceb447211 100644

Lines of this file are not shown. View the raw message.

kernel/debug/kdb/kdb_main.c +59 -3

62 lines not on this page · raw message

kernel/events/core.c +14 -0
index baa0fe350246..2d7a23a7507b 100644

Lines of this file are not shown. View the raw message.

net/bridge/br_input.c +7 -0
index b50382f957c1..6743c8a0fe8e 100644

Lines of this file are not shown. View the raw message.

net/ceph/osd_client.c +119 -183

302 lines not on this page · raw message

net/core/dev.c +1 -1
index 91cf709c98b3..5f1ac4812277 100644

Lines of this file are not shown. View the raw message.

net/core/skbuff.c +3 -1
index 180fa6a26ad4..708cc9b1b176 100644

Lines of this file are not shown. View the raw message.

net/ipv4/route.c +18 -5
index eef07b62b2d8..1cdfac733bd8 100644

Lines of this file are not shown. View the raw message.

net/key/af_key.c +4 -2
index fd51db3be91c..92e9d75dba2f 100644

Lines of this file are not shown. View the raw message.

net/mac80211/rx.c +1 -2
index 48d9553dafe3..7e2404fd85b6 100644

Lines of this file are not shown. View the raw message.

net/mptcp/options.c +24 -12
index 645dd984fef0..9ac75689a99d 100644

Lines of this file are not shown. View the raw message.

net/mptcp/pm.c +2 -3
index 7bea318ac5f2..1eb83cbe8aae 100644

Lines of this file are not shown. View the raw message.

net/mptcp/protocol.h +15 -1
index 85317ce38e3f..aec767ee047a 100644

Lines of this file are not shown. View the raw message.

net/mptcp/subflow.c +10 -4
index bea47a1180dc..651f01d13191 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_flow_table_core.c +21 -59

80 lines not on this page · raw message

net/netfilter/nf_flow_table_ip.c +19 -0
index 6257d87c3a56..28026467b54c 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nft_flow_offload.c +17 -11
index 0af34ad41479..aac6db8680d4 100644

Lines of this file are not shown. View the raw message.

net/nfc/nci/data.c +1 -1
index 6055dc9a82aa..aa5e712adf07 100644

Lines of this file are not shown. View the raw message.

net/nfc/nci/hci.c +2 -2
index 19703a649b5a..78c4b6addf15 100644

Lines of this file are not shown. View the raw message.

net/sched/act_pedit.c +4 -0
index 0eaaf1f45de1..211c757bfc3c 100644

Lines of this file are not shown. View the raw message.

net/wireless/nl80211.c +16 -2
index dc171ca0d1b1..0c20df052db3 100644

Lines of this file are not shown. View the raw message.

net/wireless/scan.c +1 -1
index 4a6d86432910..6d82bd9eaf8c 100644

Lines of this file are not shown. View the raw message.

net/xfrm/xfrm_policy.c +7 -3
index 882526159d3a..19aa994f5d2c 100644

Lines of this file are not shown. View the raw message.

net/xfrm/xfrm_user.c +18 -25

43 lines not on this page · raw message

scripts/kconfig/confdata.c +2 -0
index d3c3a61308ad..94dcec2cc803 100644

Lines of this file are not shown. View the raw message.

security/security.c +2 -0
index b7cf5cbfdc67..aaf6566deb9f 100644

Lines of this file are not shown. View the raw message.

security/selinux/ss/hashtab.c +2 -1
index 0ae4e4e57a40..3fb8f9026e9b 100644

Lines of this file are not shown. View the raw message.

sound/isa/wavefront/wavefront_synth.c +2 -1
index 69cbc79fbb71..2aaaa6807174 100644

Lines of this file are not shown. View the raw message.

sound/pci/hda/patch_realtek.c +12 -5
index 51c54cf0f312..e38acdbe1a3b 100644

Lines of this file are not shown. View the raw message.

sound/usb/quirks-table.h +9 -0
index 0ea39565e623..40a5e3eb4ef2 100644

Lines of this file are not shown. View the raw message.

tools/build/Makefile.feature +1 -0
index ae61f464043a..c6a48d0ef9ff 100644

Lines of this file are not shown. View the raw message.

tools/build/feature/Makefile +4 -0
index de66e1cc0734..cb4a2a4fa2e4 100644

Lines of this file are not shown. View the raw message.

tools/build/feature/test-libbpf-btf__load_from_kernel_by_id.c new file +7 -0
new file mode 100644
index 000000000000..f7c084428735

Lines of this file are not shown. View the raw message.

tools/perf/Makefile.config +7 -0
index f3bf9297bcc0..1bd64e7404b9 100644

Lines of this file are not shown. View the raw message.

tools/perf/arch/x86/util/perf_regs.c +12 -0
index 207c56805c55..0ed177991ad0 100644

Lines of this file are not shown. View the raw message.

tools/perf/bench/numa.c +1 -1
index f2640179ada9..c2c81567afa5 100644

Lines of this file are not shown. View the raw message.

tools/perf/tests/bpf.c +6 -4
index 573490530194..592ab02d5ba3 100644

Lines of this file are not shown. View the raw message.

tools/perf/tests/shell/stat_all_pmu.sh +10 -0
index b30dba455f36..9c9ef33e0b3c 100755

Lines of this file are not shown. View the raw message.

tools/perf/util/bpf-event.c +3 -1
index a517eaa51eb3..65dfd2c70246 100644

Lines of this file are not shown. View the raw message.

tools/perf/util/stat.c +14 -3
index ee6f03481215..9c230b908b76 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/net/fcnal-test.sh +12 -0
index 3f4c8cfe7aca..7cd9b31d0307 100755

Lines of this file are not shown. View the raw message.

tools/virtio/Makefile +2 -1
index 0d7bbe49359d..1b25cc7c64bb 100644

Lines of this file are not shown. View the raw message.

virt/kvm/kvm_main.c +1 -1
index 610cc7920c8a..717ee1b2e058 100644

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.