Linux 6.2.8
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.2.8 kernel.
All users of the 6.2 kernel series must upgrade.
The updated 6.2.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.2.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/filesystems/vfs.rst | 2 Makefile | 2 arch/loongarch/kernel/time.c | 11 arch/powerpc/Makefile | 26 - arch/powerpc/boot/Makefile | 14 - arch/powerpc/mm/fault.c | 11 arch/powerpc/platforms/Kconfig.cputype | 20 + arch/riscv/include/asm/mmu.h | 2 arch/riscv/include/asm/tlbflush.h | 18 - arch/riscv/mm/context.c | 40 +- arch/riscv/mm/fault.c | 5 arch/riscv/mm/tlbflush.c | 28 +- arch/s390/boot/ipl_report.c | 8 arch/s390/pci/pci.c | 16 - arch/s390/pci/pci_bus.c | 12 arch/s390/pci/pci_bus.h | 3 arch/x86/include/asm/sev-common.h | 3 arch/x86/include/asm/svm.h | 12 arch/x86/kernel/cpu/mce/core.c | 1 arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 7 arch/x86/kernel/cpu/resctrl/internal.h | 1 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 25 + arch/x86/kernel/ftrace_64.S | 2 arch/x86/kernel/sev.c | 26 + arch/x86/kvm/svm/avic.c | 26 + arch/x86/kvm/vmx/nested.c | 10 arch/x86/mm/mem_encrypt_identity.c | 3 block/blk-core.c | 16 - block/blk-mq.c | 5 block/blk-mq.h | 5 drivers/acpi/pptt.c | 5 drivers/block/loop.c | 25 + drivers/block/null_blk/main.c | 6 drivers/block/sunvdc.c | 2 drivers/block/zram/zram_drv.c | 4 drivers/clk/Kconfig | 2 drivers/cpuidle/cpuidle-psci-domain.c | 3 drivers/firmware/xilinx/zynqmp.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 19 + drivers/gpu/drm/amd/amdkfd/kfd_device.c | 11 drivers/gpu/drm/amd/amdkfd/kfd_events.c | 9 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c | 3 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c | 6 drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c | 5 drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu13_driver_if_v13_0_4.h | 4 drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h | 2 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 43 ++- drivers/gpu/drm/drm_edid.c | 2 drivers/gpu/drm/drm_gem.c | 9 drivers/gpu/drm/drm_gem_shmem_helper.c | 9 drivers/gpu/drm/i915/display/intel_display_types.h | 2 drivers/gpu/drm/i915/display/intel_psr.c | 78 ++++- drivers/gpu/drm/i915/display/intel_snps_phy.c | 62 ++++ drivers/gpu/drm/i915/gt/intel_sseu.h | 2 drivers/gpu/drm/i915/i915_active.c | 25 + drivers/gpu/drm/meson/meson_vpp.c | 2 drivers/gpu/drm/msm/msm_gem_shrinker.c | 11 drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 drivers/gpu/drm/sun4i/sun4i_drv.c | 6 drivers/gpu/drm/ttm/ttm_device.c | 2 drivers/gpu/drm/virtio/virtgpu_vq.c | 4 drivers/hwmon/adt7475.c | 8 drivers/hwmon/ina3221.c | 2 drivers/hwmon/ltc2992.c | 1 drivers/hwmon/pmbus/adm1266.c | 1 drivers/hwmon/pmbus/ucd9000.c | 75 +++++ drivers/hwmon/tmp513.c | 2 drivers/hwmon/xgene-hwmon.c | 1 drivers/interconnect/core.c | 68 +++- drivers/interconnect/imx/imx.c | 20 - drivers/interconnect/qcom/icc-rpm.c | 29 +- drivers/interconnect/qcom/icc-rpmh.c | 30 +- drivers/interconnect/qcom/msm8974.c | 20 - drivers/interconnect/qcom/osm-l3.c | 14 - drivers/interconnect/samsung/exynos.c | 26 - drivers/md/Kconfig | 4 drivers/md/dm.c | 6 drivers/media/i2c/m5mols/m5mols_core.c | 2 drivers/memory/tegra/mc.c | 16 - drivers/memory/tegra/tegra124-emc.c | 12 drivers/memory/tegra/tegra20-emc.c | 12 drivers/memory/tegra/tegra30-emc.c | 12 drivers/mmc/host/sdhci_am654.c | 2 drivers/net/bonding/bond_main.c | 23 + drivers/net/dsa/microchip/ksz_common.c | 2 drivers/net/dsa/mt7530.c | 64 ++-- drivers/net/dsa/mv88e6xxx/chip.c | 16 - drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 28 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 56 ++-- drivers/net/ethernet/i825xx/sni_82596.c | 14 - drivers/net/ethernet/intel/i40e/i40e_main.c | 1 drivers/net/ethernet/intel/ice/ice.h | 14 - drivers/net/ethernet/intel/ice/ice_main.c | 19 - drivers/net/ethernet/intel/ice/ice_xsk.c | 5 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 4 drivers/net/ethernet/mediatek/mtk_sgmii.c | 28 +- drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 11 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 10 drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 1 drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c | 22 + drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 2 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 14 + drivers/net/ethernet/qlogic/qed/qed_dev.c | 5 drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c | 2 drivers/net/ethernet/renesas/ravb_main.c | 12 drivers/net/ethernet/renesas/rswitch.c | 74 ++--- drivers/net/ethernet/renesas/rswitch.h | 4 drivers/net/ethernet/renesas/sh_eth.c | 12 drivers/net/ethernet/sun/ldmvsw.c | 3 drivers/net/ethernet/sun/sunvnet.c | 3 drivers/net/ipvlan/ipvlan_l3s.c | 1 drivers/net/phy/nxp-c45-tja11xx.c | 2 drivers/net/phy/smsc.c | 5 drivers/net/usb/smsc75xx.c | 7 drivers/net/veth.c | 6 drivers/nfc/pn533/usb.c | 1 drivers/nfc/st-nci/ndlc.c | 6 drivers/nvme/host/core.c | 28 +- drivers/nvme/host/multipath.c | 8 drivers/nvme/host/pci.c | 2 drivers/nvme/target/core.c | 4 drivers/pci/bus.c | 21 + drivers/scsi/hosts.c | 3 drivers/scsi/mpi3mr/mpi3mr.h | 5 drivers/scsi/mpi3mr/mpi3mr_fw.c | 71 +++-- drivers/scsi/mpi3mr/mpi3mr_os.c | 25 + drivers/scsi/mpi3mr/mpi3mr_transport.c | 5 drivers/scsi/mpt3sas/mpt3sas_transport.c | 14 - drivers/scsi/scsi.c | 3 drivers/scsi/scsi_devinfo.c | 3 drivers/scsi/scsi_scan.c | 3 drivers/tty/serial/8250/8250_em.c | 4 drivers/tty/serial/8250/8250_fsl.c | 4 drivers/tty/serial/8250/Kconfig | 3 drivers/tty/serial/Kconfig | 2 drivers/tty/serial/fsl_lpuart.c | 23 - drivers/vdpa/mlx5/core/mlx5_vdpa.h | 1 drivers/vdpa/mlx5/net/mlx5_vnet.c | 6 drivers/vdpa/vdpa_sim/vdpa_sim.c | 13 drivers/vdpa/virtio_pci/vp_vdpa.c | 2 drivers/vhost/vdpa.c | 3 drivers/video/fbdev/chipsfb.c | 14 - drivers/video/fbdev/core/fb_defio.c | 17 - drivers/video/fbdev/stifb.c | 27 + drivers/virt/coco/sev-guest/sev-guest.c | 128 +++++---- fs/cifs/cifs_debug.c | 5 fs/cifs/cifs_dfs_ref.c | 1 fs/cifs/cifs_fs_sb.h | 2 fs/cifs/cifsglob.h | 4 fs/cifs/connect.c | 10 fs/cifs/dfs.c | 67 +++- fs/cifs/dfs.h | 19 + fs/cifs/dfs_cache.c | 140 ---------- fs/cifs/dfs_cache.h | 2 fs/cifs/fs_context.h | 1 fs/cifs/misc.c | 8 fs/cifs/smb2inode.c | 31 +- fs/cifs/smb2transport.c | 2 fs/cifs/transport.c | 21 - fs/ext4/namei.c | 4 fs/ext4/super.c | 7 fs/ext4/xattr.c | 11 fs/ocfs2/aops.c | 19 + include/drm/drm_bridge.h | 4 include/drm/drm_gem.h | 4 include/linux/blk-mq.h | 6 include/linux/blkdev.h | 5 include/linux/fb.h | 1 include/linux/interconnect-provider.h | 12 include/linux/netdevice.h | 6 include/linux/pci.h | 1 include/linux/sh_intc.h | 5 include/linux/tracepoint.h | 15 - include/scsi/scsi_device.h | 2 include/scsi/scsi_devinfo.h | 6 io_uring/msg_ring.c | 4 kernel/events/core.c | 2 kernel/trace/ftrace.c | 3 kernel/trace/trace.c | 2 kernel/trace/trace_events_hist.c | 12 kernel/trace/trace_hwlat.c | 7 mm/huge_memory.c | 6 mm/mincore.c | 2 net/9p/client.c | 2 net/dsa/slave.c | 9 net/ipv4/fib_frontend.c | 3 net/ipv4/inet_hashtables.c | 8 net/ipv4/ip_tunnel.c | 12 net/ipv4/tcp_output.c | 2 net/ipv6/ip6_tunnel.c | 4 net/iucv/iucv.c | 2 net/mptcp/pm_netlink.c | 16 + net/mptcp/protocol.c | 64 ++-- net/mptcp/protocol.h | 6 net/mptcp/subflow.c | 128 +++------ net/netfilter/nft_masq.c | 2 net/netfilter/nft_nat.c | 2 net/netfilter/nft_redir.c | 4 net/smc/smc_cdc.c | 3 net/smc/smc_core.c | 2 net/wireless/nl80211.c | 18 - net/xfrm/xfrm_state.c | 5 scripts/kconfig/confdata.c | 6 sound/hda/intel-dsp-config.c | 9 sound/pci/hda/hda_intel.c | 5 sound/pci/hda/patch_realtek.c | 2 sound/soc/intel/common/soc-acpi-intel-adl-match.c | 2 sound/soc/qcom/qdsp6/q6prm.c | 4 sound/soc/sof/intel/pci-apl.c | 1 sound/soc/sof/intel/pci-cnl.c | 2 sound/soc/sof/intel/pci-icl.c | 1 sound/soc/sof/intel/pci-mtl.c | 1 sound/soc/sof/intel/pci-skl.c | 2 sound/soc/sof/intel/pci-tgl.c | 7 sound/soc/sof/ipc4-topology.h | 2 tools/testing/selftests/amd-pstate/Makefile | 13 tools/testing/selftests/lib.mk | 2 tools/testing/selftests/net/devlink_port_split.py | 36 ++ 227 files changed, 1792 insertions(+), 1095 deletions(-)
Alex Hung (1):
drm/amd/display: fix shift-out-of-bounds in CalculateVMAndRowBytes
Alexander Sverdlin (1):
tty: serial: fsl_lpuart: fix race on RX DMA shutdown
Alexandra Winter (1):
net/iucv: Fix size of interrupt data
Andrea Righi (1):
drm/i915/sseu: fix max_subslices array-index-out-of-bounds access
Ankit Nautiyal (1):
drm/i915/dg2: Add HDMI pixel clock frequencies 267.30 and 319.89 MHz
Arnd Bergmann (1):
ftrace,kcfi: Define ftrace_stub_graph conditionally
Arınç ÜNAL (2):
net: dsa: mt7530: remove now incorrect comment regarding port 5
net: dsa: mt7530: set PLL frequency and trgmii only when trgmii is used
Ayush Gupta (1):
drm/amd/display: disconnect MPCC only on OTG change
Baokun Li (2):
ext4: update s_journal_inum if it changes after journal replay
ext4: fix task hung in ext4_xattr_delete_inode
Bard Liao (1):
ALSA: hda: intel-dsp-config: add MTL PCI id
Bart Van Assche (2):
scsi: core: Fix a procfs host directory removal regression
loop: Fix use-after-free issues
Benjamin Cheng (1):
drm/amd/display: Write to correct dirty_rect
Biju Das (1):
serial: 8250_em: Fix UART port type
Bjorn Helgaas (1):
ALSA: hda: Match only Intel devices with CONTROLLER_IN_GPU()
Borislav Petkov (AMD) (6):
virt/coco/sev-guest: Check SEV_SNP attribute at probe time virt/coco/sev-guest: Simplify extended guest request handling virt/coco/sev-guest: Remove the disable_vmpck label in handle_guest_request() virt/coco/sev-guest: Carve out the request issuing logic into a helper virt/coco/sev-guest: Do some code style cleanups virt/coco/sev-guest: Convert the sw_exit_info_2 checking to a switch-case
Breno Leitao (1):
tcp: tcp_make_synack() can be called from process context
Budimir Markovic (1):
perf: Fix check before add_event_to_groups() in perf_group_detach()
Błażej Szczygieł (1):
drm/amd/pm: Fix sienna cichlid incorrect OD volage after resume
Chen Zhongjin (1):
ftrace: Fix invalid address access in lookup_rec() when index is 0
Chris Leech (1):
blk-mq: fix "bad unlock balance detected" on q->srcu in __blk_mq_run_dispatch_ops
Christian Hewitt (1):
drm/meson: fix 1px pink line on GXM when scaling video overlay
Christophe Leroy (4):
powerpc/64: Set default CPU in Kconfig
powerpc: Pass correct CPU reference to assembler
powerpc: Disable CPU unknown by CLANG when CC_IS_CLANG powerpc/64: Replace -mcpu=e500mc64 by -mcpu=e5500
Cindy Lu (1):
vp_vdpa: fix the crash in hot unplug with vp_vdpa
D. Wythe (1):
net/smc: fix NULL sndbuf_desc in smc_cdc_tx_handler()
Damien Le Moal (2):
block: null_blk: Fix handling of fake timeout request
nvmet: avoid potential UAF in nvmet_req_complete()
Dan Carpenter (1):
fbdev: chipsfb: Fix error codes in chipsfb_pci_init()
Daniel Golle (2):
net: ethernet: mtk_eth_soc: reset PCS state
net: ethernet: mtk_eth_soc: only write values if needed
Daniel Jurgens (1):
net/mlx5: Disable eswitch before waiting for VF pages
Daniil Tatianin (2):
qed/qed_dev: guard against a possible division by zero qed/qed_mng_tlv: correctly zero out ->min instead of ->hour
Dave Ertman (1):
ice: avoid bonding causing auxiliary plug/unplug under RTNL lock
David Hildenbrand (1):
mm/userfaultfd: propagate uffd-wp bit when PTE-mapping the huge zeropage
Dionna Glaze (1):
virt/coco/sev-guest: Add throttling awareness
Dmitry Osipenko (3):
drm/msm/gem: Prevent blocking within shrinker loop drm/panfrost: Don't sync rpm suspension after mmu flushing drm/shmem-helper: Remove another errant put in error path
Dylan Jhong (1):
RISC-V: mm: Support huge page in vmalloc_fault()
Elmer Miroslav Mosher Golovin (1):
nvme-pci: add NVME_QUIRK_BOGUS_NID for Netac NV3000
Emeel Hakim (1):
net/mlx5e: Fix macsec ASO context alignment
Eric Dumazet (1):
net: tunnels: annotate lockless accesses to dev->needed_headroom
Eric Van Hensbergen (1):
net/9p: fix bug in client create for .L
Eugenio Pérez (2):
vdpa_sim: not reset state in vdpasim_queue_ready
vdpa_sim: set last_used_idx as last_avail_idx in vdpasim_queue_ready
Fedor Pchelkin (1):
nfc: pn533: initialize struct pn533_out_arg properly
Felix Kuehling (1):
drm/amdgpu: Don't resume IOMMU after incomplete init
Francesco Dolcini (1):
mmc: sdhci_am654: lower power-on failed message severity
Gautam Dawar (1):
vhost-vdpa: free iommu domain after last use during cleanup
Geliang Tang (1):
mptcp: add ro_after_init for tcp{,v6}_prot_override
Glenn Washburn (1):
docs: Correct missing "d_" prefix for dentry_operations member d_weak_revalidate
Greg Kroah-Hartman (1):
Linux 6.2.8
Guilherme G. Piccoli (1):
drm/amdgpu/vcn: Disable indirect SRAM on Vangogh broken BIOSes
Guillaume Tucker (2):
selftests: amd-pstate: fix TEST_FILES
selftests: fix LLVM build for i386 and x86_64
Guo Ren (1):
riscv: asid: Fixup stale TLB entry cause application crash
Hamidreza H. Fard (1):
ALSA: hda/realtek: Fix the speaker output on Samsung Galaxy Book2 Pro
Heiner Kallweit (1):
net: phy: smsc: bail out in lan87xx_read_status if genphy_read_status fails
Helge Deller (1):
fbdev: stifb: Provide valid pixelclock and add fb_check_var() checks
Herbert Xu (1):
xfrm: Allow transport-mode states with AF_UNSPEC selector
Horatio Zhang (1):
drm/amdgpu: fix ttm_bo calltrace warning in psp_hw_fini
Ido Schimmel (2):
mlxsw: spectrum: Fix incorrect parsing depth after reload
ipv4: Fix incorrect table ID in IOCTL path
Ivan Vecera (1):
i40e: Fix kernel crash during reboot when adapter is in recovery mode
James Houghton (1):
mm: teach mincore_hugetlb about pte markers
Jan Kara (1):
block: do not reverse request order when flushing plug list
Jan Kara via Ocfs2-devel (1):
ocfs2: fix data corruption after failed write
Janusz Krzysztofik (1):
drm/i915/active: Fix misuse of non-idle barriers as fence trackers
Jaska Uimonen (1):
ASoC: SOF: ipc4-topology: set dmic dai index from copier
Jeremy Sowden (4):
netfilter: nft_nat: correct length for loading protocol registers
netfilter: nft_masq: correct length for loading protocol registers
netfilter: nft_redir: correct length for loading protocol registers
netfilter: nft_redir: correct value of inet type .maxattrs
Jeremy Szu (1):
ALSA: hda/realtek: fix speaker, mute/micmute LEDs not work on a HP platform
Jianguo Wu (1):
ipvlan: Make skb->skb_iif track skb->dev for l3s mode
Johan Hovold (19):
serial: 8250_fsl: fix handle_irq locking
memory: tegra: fix interconnect registration race
memory: tegra20-emc: fix interconnect registration race
memory: tegra124-emc: fix interconnect registration race
memory: tegra30-emc: fix interconnect registration race
interconnect: fix icc_provider_del() error handling
interconnect: fix provider registration API
interconnect: imx: fix registration race
interconnect: fix mem leak when freeing nodes
interconnect: qcom: osm-l3: fix registration race
interconnect: qcom: rpm: fix probe child-node error handling
interconnect: qcom: rpm: fix registration race
interconnect: qcom: rpmh: fix probe child-node error handling
interconnect: qcom: rpmh: fix registration race
interconnect: qcom: msm8974: fix registration race
interconnect: exynos: fix node leak in probe PM QoS error path
interconnect: exynos: fix registration race drm/edid: fix info leak when failing to get panel id drm/sun4i: fix missing component unbind on bind errors
Johannes Berg (2):
wifi: nl80211: fix NULL-ptr deref in offchan check
wifi: cfg80211: fix MLO connection ownership
Jouni Högander (1):
drm/i915/psr: Use calculated io and fast wake lines
Jurica Vukadin (1):
kconfig: Update config changed flag before calling callback
Krzysztof Kozlowski (2):
hwmon: tmp512: drop of_match_ptr for ID table
ASoC: qcom: q6prm: fix incorrect clk_root passed to ADSP
Kuniyuki Iwashima (1):
tcp: Fix bind() conflict check for dual-stack wildcard address.
Lars-Peter Clausen (3):
hwmon: (ucd90320) Add minimum delay between bus accesses
hwmon: (adm1266) Set can_sleep flag for GPIO chip
hwmon: (ltc2992) Set can_sleep flag for GPIO chip
Lee Duncan (1):
scsi: core: Add BLIST_NO_VPD_SIZE for some VDASD
Liang He (2):
block: sunvdc: add check for mdesc_grab() returning NULL
ethernet: sun: add check for the mdesc_grab()
Linus Torvalds (1):
media: m5mols: fix off-by-one loop termination error
Liu Ying (1):
drm/bridge: Fix returned array size name for atomic_get_input_bus_fmts kdoc
Maciej Fijalkowski (1):
ice: xsk: disable txq irq before flushing hw
Maor Dickman (2):
net/mlx5: E-switch, Fix wrong usage of source port rewrite in split rules net/mlx5: E-switch, Fix missing set of split_count when forward to ovs internal port
Marcus Folkesson (1):
hwmon: (ina3221) return prober error code
Marek Vasut (1):
net: dsa: microchip: fix RGMII delay configuration on KSZ8765/KSZ8794/KSZ8795
Matthieu Baerts (1):
mptcp: avoid setting TCP_CLOSE state twice
Michael Karcher (1):
sh: intc: Avoid spurious sizeof-pointer-div warning
Ming Lei (1):
nvme: fix handling single range discard request
NeilBrown (1):
md: select BLOCK_LEGACY_AUTOLOAD
Nikita Zhandarovich (1):
x86/mm: Fix use of uninitialized buffer in sme_enable()
Niklas Schnelle (1):
PCI: s390: Fix use-after-free of PCI resources with per-function hotplug
Nikolay Aleksandrov (2):
bonding: restore IFF_MASTER/SLAVE flags on bond enslave ether type change
bonding: restore bond's IFF_SLAVE flag if a non-eth dev enslave fails
Oleksandr Tyshchenko (1):
drm/virtio: Pass correct device to dma_sync_sgtable_for_device()
Pali Rohár (1):
powerpc/boot: Don't always pass -mcpu=powerpc when building 32-bit uImage
Paolo Abeni (5):
mptcp: fix possible deadlock in subflow_error_report
mptcp: refactor passive socket initialization
mptcp: use the workqueue to destroy unaccepted sockets
mptcp: fix UaF in listener shutdown
mptcp: fix lockdep false positive in mptcp_pm_nl_create_listen_socket()
Paolo Bonzini (1):
KVM: nVMX: add missing consistency checks for CR0 and CR4
Parav Pandit (2):
net/mlx5e: Don't cache tunnel offloads capability net/mlx5: Fix setting ec_function bit in MANAGE_PAGES
Paul Blakey (1):
net/mlx5e: Fix cleanup null-ptr deref on encap lock
Paulo Alcantara (4):
cifs: set DFS root session in cifs_get_smb_ses()
cifs: fix use-after-free bug in refresh_cache_worker()
cifs: return DFS root session id in DebugData
cifs: use DFS root session instead of tcon ses
Pavel Begunkov (1):
io_uring/msg_ring: let target know allocated index
Pierre-Louis Bossart (1):
ASoC: Intel: soc-acpi: fix copy-paste issue in topology names
Po-Hsu Lin (1):
selftests: net: devlink_port_split.py: skip test if no suitable device available
Qu Huang (1):
drm/amdkfd: Fix an illegal memory access
Radu Pirea (OSS) (1):
net: phy: nxp-c45-tja11xx: fix MII_BASIC_CONFIG_REV bit
Randy Dunlap (2):
clk: HI655X: select REGMAP instead of depending on it
serial: 8250: ASPEED_VUART: select REGMAP instead of depending on it
Ranjan Kumar (2):
scsi: mpi3mr: Return proper values for failures in firmware init path
scsi: mpi3mr: ioctl timeout when disabling/enabling interrupt
Ranjani Sridharan (4):
ASoC: SOF: Intel: MTL: Fix the device description
ASoC: SOF: Intel: HDA: Fix device description
ASoC: SOF: Intel: SKL: Fix device description
ASOC: SOF: Intel: pci-tgl: Fix device description
Roman Gushchin (1):
firmware: xilinx: don't make a sleepable memory allocation from an atomic context
Russell Currey (1):
powerpc/mm: Fix false detection of read faults
Sean Christopherson (1):
KVM: SVM: Fix a benign off-by-one bug in AVIC physical table mask
Sergey Matyukevich (1):
Revert "riscv: mm: notify remote harts about mmu cache updates"
Shawn Bohrer (1):
veth: Fix use after free in XDP_REDIRECT
Shawn Guo (1):
cpuidle: psci: Iterate backwards over list in psci_pd_remove()
Shawn Wang (1):
x86/resctrl: Clear staged_config[] before and after it is used
Shay Drory (1):
net/mlx5: Set BREAK_FW_WAIT flag first when removing driver
Sherry Sun (1):
tty: serial: fsl_lpuart: skip waiting for transmission complete when UARTCTRL_SBK is asserted
Shyam Prasad N (1):
cifs: generate signkey for the channel that's reconnecting
Si-Wei Liu (1):
vdpa/mlx5: should not activate virtq object when suspended
Steven Rostedt (Google) (3):
tracing: Do not let histogram values have some modifiers
tracing: Check field value in hist_field_name()
tracing: Make tracepoint lockdep check actually test something
Sudeep Holla (1):
ACPI: PPTT: Fix to avoid sleep in the atomic context when PPTT is absent
Sung-hun Kim (1):
tracing: Make splice_read available again
Suravee Suthikulpanit (1):
KVM: SVM: Modify AVIC GATag to support max number of 512 vCPUs
Sven Schnelle (1):
s390/ipl: add missing intersection check to ipl_report handling
Szymon Heidrich (2):
net: usb: smsc75xx: Limit packet length to skb->len
net: usb: smsc75xx: Move packet length check to prevent kernel panic in skb_pull
Takashi Iwai (1):
fbdev: Fix incorrect page mapping clearance at fb_deferred_io_release()
Tero Kristo (2):
trace/hwlat: Do not wipe the contents of per-cpu thread data trace/hwlat: Do not start per-cpu thread if it is already running
Theodore Ts'o (1):
ext4: fix possible double unlock when moving a directory
Thomas Bogendoerfer (1):
i825xx: sni_82596: use eth_hw_addr_set()
Thomas Hellström (1):
drm/ttm: Fix a NULL pointer dereference
Tiezhu Yang (1):
LoongArch: Only call get_timer_irq() once in constant_clockevent_init()
Tim Huang (1):
drm/amd/pm: bump SMU 13.0.4 driver_if header version
Toke Høiland-Jørgensen (1):
net: atlantic: Fix crash when XDP is enabled but no program is loaded
Tom Rix (1):
Revert "tty: serial: fsl_lpuart: adjust SERIAL_FSL_LPUART_CONSOLE config dependency"
Tomas Henzl (6):
scsi: mpi3mr: Fix throttle_groups memory leak
scsi: mpi3mr: Fix config page DMA memory leak
scsi: mpi3mr: Fix mpi3mr_hba_port memory leak in mpi3mr_remove()
scsi: mpi3mr: Fix sas_hba.phy memory leak in mpi3mr_remove()
scsi: mpi3mr: Fix memory leaks in mpi3mr_init_ioc()
scsi: mpi3mr: Fix expander node leak in mpi3mr_remove()
Tony O'Brien (2):
hwmon: (adt7475) Display smoothing attributes in correct order
hwmon: (adt7475) Fix masking of hysteresis registers
Vadim Fedorenko (1):
bnxt_en: reset PHC frequency in free-running mode
Vladimir Oltean (2):
net: dsa: don't error out when drivers return ETH_DATA_LEN in .port_max_mtu()
net: dsa: mv88e6xxx: fix max_mtu of 1492 on 6165, 6191, 6220, 6250, 6290
Volker Lendecke (1):
cifs: Fix smb2_set_path_size()
Wenchao Hao (1):
scsi: mpt3sas: Fix NULL pointer access in mpt3sas_transport_port_add()
Wenjia Zhang (1):
net/smc: fix deadlock triggered by cancel_delayed_work_syn()
Wesley Chalmers (1):
drm/amd/display: Do not set DRR on pipe Commit
Wolfram Sang (2):
ravb: avoid PHY being resumed when interface is not up
sh_eth: avoid PHY being resumed when interface is not up
Yazen Ghannam (1):
x86/mce: Make sure logged MCEs are processed after sysfs update
Yoshihiro Shimoda (2):
net: renesas: rswitch: Rename rings in struct rswitch_gwca_queue
net: renesas: rswitch: Fix the output value of quote from rswitch_rx()
Yu Kuai (1):
block: count 'ios' and 'sectors' when io is done for bio-based device
Zhang Xiaoxu (1):
cifs: Move the in_send statistic to __smb_send_rqst()
Zheng Wang (2):
nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
hwmon: (xgene) Fix use after free bug in xgene_hwmon_remove due to race condition
Greg Kroah-Hartman
maintainerDocumentation/filesystems/vfs.rst +1 -1
@@ -1222,7 +1222,7 @@ defined: return -ECHILD and it will be called again in ref-walk mode. -``_weak_revalidate`` +``d_weak_revalidate`` called when the VFS needs to revalidate a "jumped" dentry. This is called when a path-walk ends at dentry that was not acquired by doing a lookup in the parent directory. This includes "/",
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 2 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/loongarch/kernel/time.c +6 -5
@@ -140,16 +140,17 @@ static int get_timer_irq(void)int constant_clockevent_init (void ) { -int irq;unsigned int cpu =smp_processor_id ();unsigned long min_delta =0x600 ;unsigned long max_delta = (1UL <<48 ) -1 ;struct clock_event_device *cd; -static int timer_irq_installed =0 ; +static int irq =0 , timer_irq_installed =0 ; - irq =get_timer_irq (); -if (irq <0 ) -pr_err ("Failed to map irq %d (timer)\n" , irq); +if (!timer_irq_installed) { + irq =get_timer_irq (); +if (irq <0 ) +pr_err ("Failed to map irq %d (timer)\n" , irq); + } cd = &per_cpu (constant_clockevent_device, cpu);
arch/powerpc/Makefile +5 -21
@@ -146,19 +146,6 @@ CFLAGS-$(CONFIG_PPC32) += $(call cc-option, $(MULTIPLEWORD)) CFLAGS-$(CONFIG_PPC32) += $(call cc-option,-mno-readonly-in-sdata) -ifdef CONFIG_PPC_BOOK3S_64 -ifdef CONFIG_CPU_LITTLE_ENDIAN -CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power8 -else -CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power4 -endif -CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power10, \ - $(call cc-option,-mtune=power9, \ - $(call cc-option,-mtune=power8))) -else ifdef CONFIG_PPC_BOOK3E_64 -CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64 -endif - ifdef CONFIG_FUNCTION_TRACER CC_FLAGS_FTRACE := -pg ifdef CONFIG_MPROFILE_KERNEL
@@ -166,11 +153,12 @@ CC_FLAGS_FTRACE += -mprofile-kernel endif endif -CFLAGS-$(CONFIG_TARGET_CPU_BOOL) += $(call cc-option,-mcpu=$(CONFIG_TARGET_CPU)) -AFLAGS-$(CONFIG_TARGET_CPU_BOOL) += $(call cc-option,-mcpu=$(CONFIG_TARGET_CPU)) +CFLAGS-$(CONFIG_TARGET_CPU_BOOL) += -mcpu=$(CONFIG_TARGET_CPU) +AFLAGS-$(CONFIG_TARGET_CPU_BOOL) += -mcpu=$(CONFIG_TARGET_CPU) -CFLAGS-$(CONFIG_E5500_CPU) += $(call cc-option,-mcpu=e500mc64,-mcpu=powerpc64) -CFLAGS-$(CONFIG_E6500_CPU) += $(call cc-option,-mcpu=e6500,$(E5500_CPU)) +CFLAGS-$(CONFIG_POWERPC64_CPU) += $(call cc-option,-mtune=power10, \ + $(call cc-option,-mtune=power9, \ + $(call cc-option,-mtune=power8))) asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1)
@@ -213,10 +201,7 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables # often slow when they are implemented at all KBUILD_CFLAGS += $(call cc-option,-mno-string) -cpu-as-$(CONFIG_40x) += -Wa,-m405 -cpu-as-$(CONFIG_44x) += -Wa,-m440 cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec) -cpu-as-$(CONFIG_PPC_E500) += -Wa,-me500 # When using '-many -mpower4' gas will first try and find a matching power4 # mnemonic and failing that it will allow any valid mnemonic that GAS knows
@@ -224,7 +209,6 @@ cpu-as-$(CONFIG_PPC_E500) += -Wa,-me500 # LLVM IAS doesn't understand either flag: https://github.com/ClangBuiltLinux/linux/issues/675 # but LLVM IAS only supports ISA >= 2.06 for Book3S 64 anyway... cpu-as-$(CONFIG_PPC_BOOK3S_64) += $(call as-option,-Wa$(comma)-mpower4) $(call as-option,-Wa$(comma)-many) -cpu-as-$(CONFIG_PPC_E500MC) += $(call as-option,-Wa$(comma)-me500mc) KBUILD_AFLAGS += $(cpu-as-y) KBUILD_CFLAGS += $(cpu-as-y)
arch/powerpc/boot/Makefile +10 -4
@@ -39,13 +39,19 @@ BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ $(LINUXINCLUDE) ifdef CONFIG_PPC64_BOOT_WRAPPER -ifdef CONFIG_CPU_LITTLE_ENDIAN -BOOTCFLAGS += -m64 -mcpu=powerpc64le +BOOTCFLAGS += -m64 else -BOOTCFLAGS += -m64 -mcpu=powerpc64 +BOOTCFLAGS += -m32 endif + +ifdef CONFIG_TARGET_CPU_BOOL +BOOTCFLAGS += -mcpu=$(CONFIG_TARGET_CPU) +else ifdef CONFIG_PPC64_BOOT_WRAPPER +ifdef CONFIG_CPU_LITTLE_ENDIAN +BOOTCFLAGS += -mcpu=powerpc64le else -BOOTCFLAGS += -m32 -mcpu=powerpc +BOOTCFLAGS += -mcpu=powerpc64 +endif endif BOOTCFLAGS += -isystem $(shell $(BOOTCC) -print-file-name=include)
arch/powerpc/mm/fault.c +8 -3
@@ -271,11 +271,16 @@ static bool access_error(bool is_write, bool is_exec, struct vm_area_struct *vma }/* -* Check for a read fault. This could be caused by a read on an -* inaccessible page (i.e. PROT_NONE), or a Radix MMU execute-only page. +* VM_READ, VM_WRITE and VM_EXEC all imply read permissions, as +* defined in protection_map[]. Read faults can only be caused by +* a PROT_NONE mapping, or with a PROT_EXEC-only mapping on Radix. */ -if (unlikely (!(vma->vm_flags &VM_READ ))) +if (unlikely (!vma_is_accessible (vma)))return true; + +if (unlikely (radix_enabled () && ((vma->vm_flags &VM_ACCESS_FLAGS ) ==VM_EXEC ))) +return true; +/* * We should ideally do the vma pkey access check here. But in the * fault path, handle_mm_fault() also does the same check. To avoid
arch/powerpc/platforms/Kconfig.cputype +15 -5
@@ -118,19 +118,18 @@ endchoice choice prompt "CPU selection" - default GENERIC_CPU help This will create a kernel which is optimised for a particular CPU. The resulting kernel may not run on other CPUs, so use this with care. If unsure, select Generic. -config GENERIC_CPU +config POWERPC64_CPU bool "Generic (POWER5 and PowerPC 970 and above)" depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN select PPC_64S_HASH_MMU -config GENERIC_CPU +config POWERPC64_CPU bool "Generic (POWER8 and above)" depends on PPC_BOOK3S_64 && CPU_LITTLE_ENDIAN select ARCH_HAS_FAST_MULTIPLIER
@@ -144,6 +143,7 @@ config POWERPC_CPU config CELL_CPU bool "Cell Broadband Engine" depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN + depends on !CC_IS_CLANG select PPC_64S_HASH_MMU config PPC_970_CPU
@@ -188,11 +188,13 @@ config E5500_CPU config E6500_CPU bool "Freescale e6500" depends on PPC64 && PPC_E500 + depends on !CC_IS_CLANG select PPC_HAS_LBARX_LHARX config 405_CPU bool "40x family" depends on 40x + depends on !CC_IS_CLANG config 440_CPU bool "440 (44x family)"
@@ -201,22 +203,27 @@ config 440_CPU config 464_CPU bool "464 (44x family)" depends on 44x + depends on !CC_IS_CLANG config 476_CPU bool "476 (47x family)" depends on PPC_47x + depends on !CC_IS_CLANG config 860_CPU bool "8xx family" depends on PPC_8xx + depends on !CC_IS_CLANG config E300C2_CPU bool "e300c2 (832x)" depends on PPC_BOOK3S_32 + depends on !CC_IS_CLANG config E300C3_CPU bool "e300c3 (831x)" depends on PPC_BOOK3S_32 + depends on !CC_IS_CLANG config G4_CPU bool "G4 (74xx)"
@@ -233,13 +240,12 @@ config E500MC_CPU config TOOLCHAIN_DEFAULT_CPU bool "Rely on the toolchain's implicit default CPU" - depends on PPC32 endchoice config TARGET_CPU_BOOL bool - default !GENERIC_CPU && !TOOLCHAIN_DEFAULT_CPU + default !TOOLCHAIN_DEFAULT_CPU config TARGET_CPU string
@@ -251,6 +257,10 @@ config TARGET_CPU default "power8" if POWER8_CPU default "power9" if POWER9_CPU default "power10" if POWER10_CPU + default "e5500" if E5500_CPU + default "e6500" if E6500_CPU + default "power4" if POWERPC64_CPU && !CPU_LITTLE_ENDIAN + default "power8" if POWERPC64_CPU && CPU_LITTLE_ENDIAN default "405" if 405_CPU default "440" if 440_CPU default "464" if 464_CPU
arch/riscv/include/asm/mmu.h +0 -2
@@ -19,8 +19,6 @@ typedef struct {#ifdef CONFIG_SMP /* A local icache flush is needed before user execution can resume. */ cpumask_t icache_stale_mask; -/* A local tlb flush is needed before user execution can resume. */ -cpumask_t tlb_stale_mask;#endif } mm_context_t;
arch/riscv/include/asm/tlbflush.h +0 -18
@@ -22,24 +22,6 @@ static inline void local_flush_tlb_page(unsigned long addr) {ALT_FLUSH_TLB_PAGE (__asm__ __volatile__ ("sfence.vma %0" : :"r" (addr) :"memory" )); } - -static inline void local_flush_tlb_all_asid (unsigned long asid) -{ - __asm__ __volatile__ ("sfence.vma x0, %0" - : - :"r" (asid) - :"memory" ); -} - -static inline void local_flush_tlb_page_asid (unsigned long addr, -unsigned long asid) -{ - __asm__ __volatile__ ("sfence.vma %0, %1" - : - :"r" (addr),"r" (asid) - :"memory" ); -} -#else /* CONFIG_MMU */ #define local_flush_tlb_all () do { } while (0)#define local_flush_tlb_page (addr) do { } while (0)
arch/riscv/mm/context.c +20 -20
@@ -196,16 +196,6 @@ static void set_mm_asid(struct mm_struct *mm, unsigned int cpu)if (need_flush_tlb)local_flush_tlb_all (); -#ifdef CONFIG_SMP - else { -cpumask_t *mask = &mm->context.tlb_stale_mask; - -if (cpumask_test_cpu (cpu, mask)) { -cpumask_clear_cpu (cpu, mask); -local_flush_tlb_all_asid (cntx & asid_mask); - } - } -#endif }static void set_mm_noasid (struct mm_struct *mm)
@@ -215,12 +205,24 @@ static void set_mm_noasid(struct mm_struct *mm)local_flush_tlb_all (); } -static inline void set_mm (struct mm_struct *mm,unsigned int cpu) +static inline void set_mm (struct mm_struct *prev, +struct mm_struct *next,unsigned int cpu) { -if (static_branch_unlikely (&use_asid_allocator)) -set_mm_asid (mm, cpu); -else -set_mm_noasid (mm); +/* +* The mm_cpumask indicates which harts' TLBs contain the virtual +* address mapping of the mm. Compared to noasid, using asid +* can't guarantee that stale TLB entries are invalidated because +* the asid mechanism wouldn't flush TLB for every switch_mm for +* performance. So when using asid, keep all CPUs footmarks in +* cpumask() until mm reset. +*/ +cpumask_set_cpu (cpu,mm_cpumask (next)); +if (static_branch_unlikely (&use_asid_allocator)) { +set_mm_asid (next, cpu); + }else { +cpumask_clear_cpu (cpu,mm_cpumask (prev)); +set_mm_noasid (next); + } }static int __init asids_init (void )
@@ -274,7 +276,8 @@ static int __init asids_init(void) }early_initcall (asids_init);#else -static inline void set_mm (struct mm_struct *mm,unsigned int cpu) +static inline void set_mm (struct mm_struct *prev, +struct mm_struct *next,unsigned int cpu) {/* Nothing to do here when there is no MMU */ }
@@ -327,10 +330,7 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next,*/ cpu =smp_processor_id (); -cpumask_clear_cpu (cpu,mm_cpumask (prev)); -cpumask_set_cpu (cpu,mm_cpumask (next)); - -set_mm (next, cpu); +set_mm (prev, next, cpu);flush_icache_deferred (next, cpu); }
arch/riscv/mm/fault.c +5 -0
@@ -143,6 +143,8 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long ano_context (regs, addr);return ; } +if (pud_leaf (*pud_k)) + goto flush_tlb;/* * Since the vmalloc area is global, it is unnecessary
@@ -153,6 +155,8 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long ano_context (regs, addr);return ; } +if (pmd_leaf (*pmd_k)) + goto flush_tlb;/* * Make sure the actual PTE exists as well to
@@ -172,6 +176,7 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a* ordering constraint, not a cache flush; it is * necessary even after writing invalid entries. */ +flush_tlb:local_flush_tlb_page (addr); }
arch/riscv/mm/tlbflush.c +17 -11
@@ -5,7 +5,23 @@#include <linux/sched.h> #include <asm/sbi.h> #include <asm/mmu_context.h> -#include <asm/tlbflush.h> + +static inline void local_flush_tlb_all_asid (unsigned long asid) +{ + __asm__ __volatile__ ("sfence.vma x0, %0" + : + :"r" (asid) + :"memory" ); +} + +static inline void local_flush_tlb_page_asid (unsigned long addr, +unsigned long asid) +{ + __asm__ __volatile__ ("sfence.vma %0, %1" + : + :"r" (addr),"r" (asid) + :"memory" ); +}void flush_tlb_all (void ) {
@@ -15,7 +31,6 @@ void flush_tlb_all(void)static void __sbi_tlb_flush_range (struct mm_struct *mm,unsigned long start,unsigned long size,unsigned long stride) { -struct cpumask *pmask = &mm->context.tlb_stale_mask;struct cpumask *cmask =mm_cpumask (mm);unsigned int cpuid;bool broadcast;
@@ -29,15 +44,6 @@ static void __sbi_tlb_flush_range(struct mm_struct *mm, unsigned long start,if (static_branch_unlikely (&use_asid_allocator)) {unsigned long asid =atomic_long_read (&mm->context.id); -/* -* TLB will be immediately flushed on harts concurrently -* executing this MM context. TLB flush on other harts -* is deferred until this MM context migrates there. -*/ -cpumask_setall (pmask); -cpumask_clear_cpu (cpuid, pmask); -cpumask_andnot (pmask, pmask, cmask); -if (broadcast) {sbi_remote_sfence_vma_asid (cmask, start, size, asid); }else if (size <= stride) {
arch/s390/boot/ipl_report.c +8 -0
@@ -57,11 +57,19 @@ static unsigned long find_bootdata_space(struct ipl_rb_components *comps,if (IS_ENABLED (CONFIG_BLK_DEV_INITRD ) && initrd_data.start && initrd_data.size &&intersects (initrd_data.start, initrd_data.size, safe_addr, size)) safe_addr = initrd_data.start + initrd_data.size; +if (intersects (safe_addr, size, (unsigned long )comps, comps->len)) { + safe_addr = (unsigned long )comps + comps->len; + goto repeat; + }for_each_rb_entry (comp, comps)if (intersects (safe_addr, size, comp->addr, comp->len)) { safe_addr = comp->addr + comp->len; goto repeat; } +if (intersects (safe_addr, size, (unsigned long )certs, certs->len)) { + safe_addr = (unsigned long )certs + certs->len; + goto repeat; + }for_each_rb_entry (cert, certs)if (intersects (safe_addr, size, cert->addr, cert->len)) { safe_addr = cert->addr + cert->len;
arch/s390/pci/pci.c +10 -6
@@ -544,8 +544,7 @@ static struct resource *__alloc_res(struct zpci_dev *zdev, unsigned long start,return r; } -int zpci_setup_bus_resources (struct zpci_dev *zdev, -struct list_head *resources) +int zpci_setup_bus_resources (struct zpci_dev *zdev) {unsigned long addr, size, flags;struct resource *res;
@@ -581,7 +580,6 @@ int zpci_setup_bus_resources(struct zpci_dev *zdev,return -ENOMEM ; } zdev->bars[i].res = res; -pci_add_resource (resources, res); } zdev->has_resources =1 ;
@@ -590,17 +588,23 @@ int zpci_setup_bus_resources(struct zpci_dev *zdev,static void zpci_cleanup_bus_resources (struct zpci_dev *zdev) { +struct resource *res;int i; +pci_lock_rescan_remove ();for (i =0 ; i <PCI_STD_NUM_BARS ; i++) { -if (!zdev->bars[i].size || !zdev->bars[i].res) + res = zdev->bars[i].res; +if (!res)continue ; +release_resource (res); +pci_bus_remove_resource (zdev->zbus->bus, res);zpci_free_iomap (zdev, zdev->bars[i].map_idx); -release_resource (zdev->bars[i].res); -kfree (zdev->bars[i].res); + zdev->bars[i].res =NULL ; +kfree (res); } zdev->has_resources =0 ; +pci_unlock_rescan_remove (); }int pcibios_device_add (struct pci_dev *pdev)
arch/s390/pci/pci_bus.c +5 -7
@@ -41,9 +41,7 @@ static int zpci_nb_devices;*/ static int zpci_bus_prepare_device (struct zpci_dev *zdev) { -struct resource_entry *window, *n; -struct resource *res; -int rc; +int rc, i;if (!zdev_enabled (zdev)) { rc =zpci_enable_device (zdev);
@@ -57,10 +55,10 @@ static int zpci_bus_prepare_device(struct zpci_dev *zdev) }if (!zdev->has_resources) { -zpci_setup_bus_resources (zdev, &zdev->zbus->resources); -resource_list_for_each_entry_safe (window, n, &zdev->zbus->resources) { - res = window->res; -pci_bus_add_resource (zdev->zbus->bus, res,0 ); +zpci_setup_bus_resources (zdev); +for (i =0 ; i <PCI_STD_NUM_BARS ; i++) { +if (zdev->bars[i].res) +pci_bus_add_resource (zdev->zbus->bus, zdev->bars[i].res,0 ); } }
arch/s390/pci/pci_bus.h +1 -2
@@ -30,8 +30,7 @@ static inline void zpci_zdev_get(struct zpci_dev *zdev)int zpci_alloc_domain (int domain);void zpci_free_domain (int domain); -int zpci_setup_bus_resources (struct zpci_dev *zdev, -struct list_head *resources); +int zpci_setup_bus_resources (struct zpci_dev *zdev);static inline struct zpci_dev *zdev_from_bus (struct pci_bus *bus,unsigned int devfn)
arch/x86/include/asm/sev-common.h +2 -1
@@ -128,8 +128,9 @@ struct snp_psc_desc {struct psc_entry entries[VMGEXIT_PSC_MAX_ENTRY ]; } __packed; -/* Guest message request error code */ +/* Guest message request error codes */ #define SNP_GUEST_REQ_INVALID_LEN BIT_ULL(32) +#define SNP_GUEST_REQ_ERR_BUSY BIT_ULL(33)#define GHCB_MSR_TERM_REQ 0x100#define GHCB_MSR_TERM_REASON_SET_POS 12
arch/x86/include/asm/svm.h +7 -5
@@ -261,20 +261,22 @@ enum avic_ipi_failure_cause { AVIC_IPI_FAILURE_INVALID_BACKING_PAGE, }; -#define AVIC_PHYSICAL_MAX_INDEX_MASK GENMASK_ULL(9, 0) +#define AVIC_PHYSICAL_MAX_INDEX_MASK GENMASK_ULL(8, 0)/* -* For AVIC, the max index allowed for physical APIC ID -* table is 0xff (255). +* For AVIC, the max index allowed for physical APIC ID table is 0xfe (254), as +* 0xff is a broadcast to all CPUs, i.e. can't be targeted individually. */ #define AVIC_MAX_PHYSICAL_ID 0XFEULL/* -* For x2AVIC, the max index allowed for physical APIC ID -* table is 0x1ff (511). +* For x2AVIC, the max index allowed for physical APIC ID table is 0x1ff (511). */ #define X2AVIC_MAX_PHYSICAL_ID 0x1FFUL +static_assert ((AVIC_MAX_PHYSICAL_ID &AVIC_PHYSICAL_MAX_INDEX_MASK ) ==AVIC_MAX_PHYSICAL_ID ); +static_assert ((X2AVIC_MAX_PHYSICAL_ID &AVIC_PHYSICAL_MAX_INDEX_MASK ) ==X2AVIC_MAX_PHYSICAL_ID ); +#define AVIC_HPA_MASK ~((0xFFFULL << 52) | 0xFFF)#define VMCB_AVIC_APIC_BAR_MASK 0xFFFFFFFFFF000ULL
arch/x86/kernel/cpu/mce/core.c +1 -0
@@ -2365,6 +2365,7 @@ static void mce_restart(void) {mce_timer_delete_all ();on_each_cpu (mce_cpu_restart,NULL ,1 ); +mce_schedule_work (); }/* Toggle features for corrected errors */
arch/x86/kernel/cpu/resctrl/ctrlmondata.c +2 -5
@@ -373,7 +373,6 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, {struct resctrl_schema *s;struct rdtgroup *rdtgrp; -struct rdt_domain *dom;struct rdt_resource *r;char *tok, *resname;int ret =0 ;
@@ -402,10 +401,7 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, goto out; } -list_for_each_entry (s, &resctrl_schema_all, list) { -list_for_each_entry (dom, &s->res->domains, list) -memset (dom->staged_config,0 ,sizeof (dom->staged_config)); - } +rdt_staged_configs_clear ();while ((tok =strsep (&buf,"\n" )) !=NULL ) { resname =strim (strsep (&tok,":" ));
@@ -450,6 +446,7 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, } out: +rdt_staged_configs_clear ();rdtgroup_kn_unlock (of->kn);cpus_read_unlock ();return ret ?: nbytes;
arch/x86/kernel/cpu/resctrl/internal.h +1 -0
@@ -527,5 +527,6 @@ bool has_busy_rmid(struct rdt_resource *r, struct rdt_domain *d);void __check_limbo (struct rdt_domain *d,bool force_free);void rdt_domain_reconfigure_cdp (struct rdt_resource *r);void __init thread_throttle_mode_init (void ); +void rdt_staged_configs_clear (void );#endif /* _ASM_X86_RESCTRL_INTERNAL_H */
arch/x86/kernel/cpu/resctrl/rdtgroup.c +21 -4
@@ -78,6 +78,19 @@ void rdt_last_cmd_printf(const char *fmt, ...)va_end (ap); } +void rdt_staged_configs_clear (void ) +{ +struct rdt_resource *r; +struct rdt_domain *dom; + +lockdep_assert_held (&rdtgroup_mutex); + +for_each_alloc_capable_rdt_resource (r) { +list_for_each_entry (dom, &r->domains, list) +memset (dom->staged_config,0 ,sizeof (dom->staged_config)); + } +} +/* * Trivial allocator for CLOSIDs. Since h/w only supports a small number, * we can keep a bitmap of free CLOSIDs in a single integer.
@@ -2851,7 +2864,9 @@ static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) {struct resctrl_schema *s;struct rdt_resource *r; -int ret; +int ret =0 ; + +rdt_staged_configs_clear ();list_for_each_entry (s, &resctrl_schema_all, list) { r = s->res;
@@ -2862,20 +2877,22 @@ static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) }else { ret =rdtgroup_init_cat (s, rdtgrp->closid);if (ret <0 ) -return ret; + goto out; } ret =resctrl_arch_update_domains (r, rdtgrp->closid);if (ret <0 ) {rdt_last_cmd_puts ("Failed to initialize allocations\n" ); -return ret; + goto out; } } rdtgrp->mode =RDT_MODE_SHAREABLE ; -return 0 ; +out: +rdt_staged_configs_clear (); +return ret; } static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
arch/x86/kernel/ftrace_64.S +2 -0
@@ -136,10 +136,12 @@ SYM_TYPED_FUNC_START(ftrace_stub) RET SYM_FUNC_END(ftrace_stub) +#ifdef CONFIG_FUNCTION_GRAPH_TRACER SYM_TYPED_FUNC_START(ftrace_stub_graph) CALL_DEPTH_ACCOUNT RET SYM_FUNC_END(ftrace_stub_graph) +#endif #ifdef CONFIG_DYNAMIC_FTRACE
arch/x86/kernel/sev.c +17 -9
@@ -2183,9 +2183,6 @@ int snp_issue_guest_request(u64 exit_code, struct snp_req_data *input, unsignedstruct ghcb *ghcb;int ret; -if (!cc_platform_has (CC_ATTR_GUEST_SEV_SNP )) -return -ENODEV ; -if (!fw_err)return -EINVAL ;
@@ -2212,15 +2209,26 @@ int snp_issue_guest_request(u64 exit_code, struct snp_req_data *input, unsignedif (ret) goto e_put; -if (ghcb->save.sw_exit_info_2) { -/* Number of expected pages are returned in RBX */ -if (exit_code ==SVM_VMGEXIT_EXT_GUEST_REQUEST && - ghcb->save.sw_exit_info_2 ==SNP_GUEST_REQ_INVALID_LEN ) - input->data_npages =ghcb_get_rbx (ghcb); + *fw_err = ghcb->save.sw_exit_info_2; +switch (*fw_err) { +case 0 : +break ; - *fw_err = ghcb->save.sw_exit_info_2; +case SNP_GUEST_REQ_ERR_BUSY : + ret = -EAGAIN ; +break ; +case SNP_GUEST_REQ_INVALID_LEN : +/* Number of expected pages are returned in RBX */ +if (exit_code ==SVM_VMGEXIT_EXT_GUEST_REQUEST ) { + input->data_npages =ghcb_get_rbx (ghcb); + ret = -ENOSPC ; +break ; + } + fallthrough; +default : ret = -EIO ; +break ; } e_put:
arch/x86/kvm/svm/avic.c +18 -8
@@ -27,19 +27,29 @@#include "irq.h" #include "svm.h" -/* AVIC GATAG is encoded using VM and VCPU IDs */ -#define AVIC_VCPU_ID_BITS 8 -#define AVIC_VCPU_ID_MASK ((1 << AVIC_VCPU_ID_BITS) - 1) +/* +* Encode the arbitrary VM ID and the vCPU's default APIC ID, i.e the vCPU ID, +* into the GATag so that KVM can retrieve the correct vCPU from a GALog entry +* if an interrupt can't be delivered, e.g. because the vCPU isn't running. +* +* For the vCPU ID, use however many bits are currently allowed for the max +* guest physical APIC ID (limited by the size of the physical ID table), and +* use whatever bits remain to assign arbitrary AVIC IDs to VMs. Note, the +* size of the GATag is defined by hardware (32 bits), but is an opaque value +* as far as hardware is concerned. +*/ +#define AVIC_VCPU_ID_MASK AVIC_PHYSICAL_MAX_INDEX_MASK -#define AVIC_VM_ID_BITS 24 -#define AVIC_VM_ID_NR (1 << AVIC_VM_ID_BITS) -#define AVIC_VM_ID_MASK ((1 << AVIC_VM_ID_BITS) - 1) +#define AVIC_VM_ID_SHIFT HWEIGHT32(AVIC_PHYSICAL_MAX_INDEX_MASK) +#define AVIC_VM_ID_MASK (GENMASK(31, AVIC_VM_ID_SHIFT) >> AVIC_VM_ID_SHIFT) -#define AVIC_GATAG (x, y) (((x & AVIC_VM_ID_MASK) << AVIC_VCPU_ID_BITS) | \ +#define AVIC_GATAG (x, y) (((x & AVIC_VM_ID_MASK) << AVIC_VM_ID_SHIFT) | \ (y & AVIC_VCPU_ID_MASK)) -#define AVIC_GATAG_TO_VMID (x) ((x >> AVIC_VCPU_ID_BITS) & AVIC_VM_ID_MASK) +#define AVIC_GATAG_TO_VMID (x) ((x >> AVIC_VM_ID_SHIFT) & AVIC_VM_ID_MASK)#define AVIC_GATAG_TO_VCPUID (x) (x & AVIC_VCPU_ID_MASK) +static_assert (AVIC_GATAG (AVIC_VM_ID_MASK ,AVIC_VCPU_ID_MASK ) ==-1u ); +static bool force_avic;module_param_unsafe (force_avic, bool,0444 );
arch/x86/kvm/vmx/nested.c +8 -2
@@ -3021,7 +3021,7 @@ static int nested_vmx_check_guest_state(struct kvm_vcpu *vcpu,struct vmcs12 *vmcs12, enum vm_entry_failure_code *entry_failure_code) { - bool ia32e; + bool ia32e = !!(vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE); *entry_failure_code =ENTRY_FAIL_DEFAULT ;
@@ -3047,6 +3047,13 @@ static int nested_vmx_check_guest_state(struct kvm_vcpu *vcpu, vmcs12->guest_ia32_perf_global_ctrl)))return -EINVAL ; +if (CC ((vmcs12->guest_cr0 & (X86_CR0_PG |X86_CR0_PE )) ==X86_CR0_PG )) +return -EINVAL ; + +if (CC (ia32e && !(vmcs12->guest_cr4 &X86_CR4_PAE )) || +CC (ia32e && !(vmcs12->guest_cr0 &X86_CR0_PG ))) +return -EINVAL ; +/* * If the load IA32_EFER VM-entry control is 1, the following checks * are performed on the field for the IA32_EFER MSR:
@@ -3058,7 +3065,6 @@ static int nested_vmx_check_guest_state(struct kvm_vcpu *vcpu,*/ if (to_vmx(vcpu)->nested.nested_run_pending && (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_EFER)) { - ia32e = (vmcs12->vm_entry_controls & VM_ENTRY_IA32E_MODE) != 0; if (CC(!kvm_valid_efer(vcpu, vmcs12->guest_ia32_efer)) || CC(ia32e != !!(vmcs12->guest_ia32_efer & EFER_LMA)) || CC(((vmcs12->guest_cr0 & X86_CR0_PG) &&
arch/x86/mm/mem_encrypt_identity.c +2 -1
@@ -600,7 +600,8 @@ void __init sme_enable(struct boot_params *bp) cmdline_ptr = (const char *)((u64 )bp->hdr.cmd_line_ptr | ((u64 )bp->ext_cmd_line_ptr <<32 )); -cmdline_find_option (cmdline_ptr, cmdline_arg, buffer,sizeof (buffer)); +if (cmdline_find_option (cmdline_ptr, cmdline_arg, buffer,sizeof (buffer)) <0 ) +return ;if (!strncmp (buffer, cmdline_on,sizeof (buffer))) sme_me_mask = me_mask;
block/blk-core.c +6 -10
@@ -946,16 +946,11 @@ void update_io_ticks(struct block_device *part, unsigned long now, bool end) } } -unsigned long bdev_start_io_acct (struct block_device *bdev, -unsigned int sectors,enum req_op op, +unsigned long bdev_start_io_acct (struct block_device *bdev,enum req_op op,unsigned long start_time) { -const int sgrp =op_stat_group (op); -part_stat_lock ();update_io_ticks (bdev, start_time, false); -part_stat_inc (bdev, ios[sgrp]); -part_stat_add (bdev, sectors[sgrp], sectors);part_stat_local_inc (bdev, in_flight[op_is_write (op)]);part_stat_unlock ();
@@ -971,13 +966,12 @@ EXPORT_SYMBOL(bdev_start_io_acct);*/ unsigned long bio_start_io_acct (struct bio *bio) { -return bdev_start_io_acct (bio->bi_bdev,bio_sectors (bio), -bio_op (bio), jiffies); +return bdev_start_io_acct (bio->bi_bdev,bio_op (bio), jiffies); }EXPORT_SYMBOL_GPL (bio_start_io_acct);void bdev_end_io_acct (struct block_device *bdev,enum req_op op, -unsigned long start_time) +unsigned int sectors,unsigned long start_time) {const int sgrp =op_stat_group (op);unsigned long now =READ_ONCE (jiffies);
@@ -985,6 +979,8 @@ void bdev_end_io_acct(struct block_device *bdev, enum req_op op,part_stat_lock ();update_io_ticks (bdev, now, true); +part_stat_inc (bdev, ios[sgrp]); +part_stat_add (bdev, sectors[sgrp], sectors);part_stat_add (bdev, nsecs[sgrp],jiffies_to_nsecs (duration));part_stat_local_dec (bdev, in_flight[op_is_write (op)]);part_stat_unlock ();
@@ -994,7 +990,7 @@ EXPORT_SYMBOL(bdev_end_io_acct);void bio_end_io_acct_remapped (struct bio *bio,unsigned long start_time,struct block_device *orig_bdev) { -bdev_end_io_acct (orig_bdev,bio_op (bio), start_time); +bdev_end_io_acct (orig_bdev,bio_op (bio),bio_sectors (bio), start_time); }EXPORT_SYMBOL_GPL (bio_end_io_acct_remapped);
block/blk-mq.c +3 -2
@@ -2743,6 +2743,7 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched)struct blk_mq_hw_ctx *this_hctx =NULL ;struct blk_mq_ctx *this_ctx =NULL ;struct request *requeue_list =NULL ; +struct request **requeue_lastp = &requeue_list;unsigned int depth =0 ;LIST_HEAD (list);
@@ -2753,10 +2754,10 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched) this_hctx = rq->mq_hctx; this_ctx = rq->mq_ctx; }else if (this_hctx != rq->mq_hctx || this_ctx != rq->mq_ctx) { -rq_list_add (&requeue_list, rq); +rq_list_add_tail (&requeue_lastp, rq);continue ; } -list_add_tail (&rq->queuelist, &list); +list_add (&rq->queuelist, &list); depth++; }while (!rq_list_empty (plug->mq_list));
block/blk-mq.h +3 -2
@@ -378,12 +378,13 @@ static inline bool hctx_may_queue(struct blk_mq_hw_ctx *hctx,#define __blk_mq_run_dispatch_ops (q, check_sleep, dispatch_ops) \ do { \ if ((q)->tag_set->flags & BLK_MQ_F_BLOCKING) { \ + struct blk_mq_tag_set *__tag_set = (q)->tag_set; \ int srcu_idx; \ \ might_sleep_if(check_sleep); \ - srcu_idx = srcu_read_lock((q)->tag_set->srcu); \ + srcu_idx = srcu_read_lock(__tag_set->srcu); \ (dispatch_ops); \ - srcu_read_unlock((q)->tag_set->srcu, srcu_idx); \ + srcu_read_unlock(__tag_set->srcu, srcu_idx); \ } else { \ rcu_read_lock(); \ (dispatch_ops); \
drivers/acpi/pptt.c +4 -1
@@ -537,16 +537,19 @@ static int topology_get_acpi_cpu_tag(struct acpi_table_header *table,static struct acpi_table_header *acpi_get_pptt (void ) {static struct acpi_table_header *pptt; +static bool is_pptt_checked;acpi_status status;/* * PPTT will be used at runtime on every CPU hotplug in path, so we * don't need to call acpi_put_table() to release the table mapping. */ -if (!pptt) { +if (!pptt && !is_pptt_checked) { status =acpi_get_table (ACPI_SIG_PPTT ,0 , &pptt);if (ACPI_FAILURE (status))acpi_pptt_warn_missing (); + + is_pptt_checked = true; }return pptt;
drivers/block/loop.c +17 -8
@@ -1853,35 +1853,44 @@ static blk_status_t loop_queue_rq(struct blk_mq_hw_ctx *hctx,static void loop_handle_cmd (struct loop_cmd *cmd) { +struct cgroup_subsys_state *cmd_blkcg_css = cmd->blkcg_css; +struct cgroup_subsys_state *cmd_memcg_css = cmd->memcg_css;struct request *rq =blk_mq_rq_from_pdu (cmd);const bool write =op_is_write (req_op (rq));struct loop_device *lo = rq->q->queuedata;int ret =0 ;struct mem_cgroup *old_memcg =NULL ; +const bool use_aio = cmd->use_aio;if (write && (lo->lo_flags &LO_FLAGS_READ_ONLY )) { ret = -EIO ; goto failed; } -if (cmd->blkcg_css) -kthread_associate_blkcg (cmd->blkcg_css); -if (cmd->memcg_css) +if (cmd_blkcg_css) +kthread_associate_blkcg (cmd_blkcg_css); +if (cmd_memcg_css) old_memcg =set_active_memcg ( -mem_cgroup_from_css (cmd->memcg_css)); +mem_cgroup_from_css (cmd_memcg_css)); +/* +* do_req_filebacked() may call blk_mq_complete_request() synchronously +* or asynchronously if using aio. Hence, do not touch 'cmd' after +* do_req_filebacked() has returned unless we are sure that 'cmd' has +* not yet been completed. +*/ ret =do_req_filebacked (lo, rq); -if (cmd->blkcg_css) +if (cmd_blkcg_css)kthread_associate_blkcg (NULL ); -if (cmd->memcg_css) { +if (cmd_memcg_css) {set_active_memcg (old_memcg); -css_put (cmd->memcg_css); +css_put (cmd_memcg_css); } failed:/* complete non-aio request */ -if (!cmd->use_aio || ret) { +if (!use_aio || ret) {if (ret == -EOPNOTSUPP ) cmd->ret = ret;else
drivers/block/null_blk/main.c +3 -3
@@ -1413,8 +1413,7 @@ static inline void nullb_complete_cmd(struct nullb_cmd *cmd)case NULL_IRQ_SOFTIRQ :switch (cmd->nq->dev->queue_mode) {case NULL_Q_MQ : -if (likely (!blk_should_fake_timeout (cmd->rq->q))) -blk_mq_complete_request (cmd->rq); +blk_mq_complete_request (cmd->rq);break ;case NULL_Q_BIO :/*
@@ -1675,7 +1674,8 @@ static blk_status_t null_queue_rq(struct blk_mq_hw_ctx *hctx, cmd->rq = bd->rq; cmd->error =BLK_STS_OK ; cmd->nq = nq; - cmd->fake_timeout =should_timeout_request (bd->rq); + cmd->fake_timeout =should_timeout_request (bd->rq) || +blk_should_fake_timeout (bd->rq->q);blk_mq_start_request (bd->rq);
drivers/block/sunvdc.c +2 -0
@@ -972,6 +972,8 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)print_version (); hp =mdesc_grab (); +if (!hp) +return -ENODEV ; err = -ENODEV ;if ((vdev->dev_no <<PARTITION_SHIFT ) & ~(u64 )MINORMASK ) {
drivers/block/zram/zram_drv.c +2 -2
@@ -2108,9 +2108,9 @@ static int zram_rw_page(struct block_device *bdev, sector_t sector, bv.bv_offset =0 ; start_time =bdev_start_io_acct (bdev->bd_disk->part0, -SECTORS_PER_PAGE , op, jiffies); + op, jiffies); ret =zram_bvec_rw (zram, &bv, index, offset, op,NULL ); -bdev_end_io_acct (bdev->bd_disk->part0, op, start_time); +bdev_end_io_acct (bdev->bd_disk->part0, op,SECTORS_PER_PAGE , start_time); out:/* * If I/O fails, just return error(ie, non-zero) without
drivers/clk/Kconfig +1 -1
@@ -92,7 +92,7 @@ config COMMON_CLK_RK808 config COMMON_CLK_HI655X tristate "Clock driver for Hi655x" if EXPERT depends on (MFD_HI655X_PMIC || COMPILE_TEST) - depends on REGMAP + select REGMAP default MFD_HI655X_PMIC help This driver supports the hi655x PMIC clock. This
drivers/cpuidle/cpuidle-psci-domain.c +2 -1
@@ -103,7 +103,8 @@ static void psci_pd_remove(void)struct psci_pd_provider *pd_provider, *it;struct generic_pm_domain *genpd; -list_for_each_entry_safe (pd_provider, it, &psci_pd_providers, link) { +list_for_each_entry_safe_reverse (pd_provider, it, + &psci_pd_providers, link) {of_genpd_del_provider (pd_provider->node); genpd =of_genpd_remove_last (pd_provider->node);
drivers/firmware/xilinx/zynqmp.c +1 -1
@@ -206,7 +206,7 @@ static int do_feature_check_call(const u32 api_id) }/* Add new entry if not present */ - feature_data =kmalloc (sizeof (*feature_data),GFP_KERNEL ); + feature_data =kmalloc (sizeof (*feature_data),GFP_ATOMIC );if (!feature_data)return -ENOMEM ;
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +3 -3
@@ -1685,7 +1685,7 @@ static int psp_hdcp_initialize(struct psp_context *psp) psp->hdcp_context.context.mem_context.shared_mem_size =PSP_HDCP_SHARED_MEM_SIZE ; psp->hdcp_context.context.ta_load_type =GFX_CMD_ID_LOAD_TA ; -if (!psp->hdcp_context.context.initialized) { +if (!psp->hdcp_context.context.mem_context.shared_buf) { ret =psp_ta_init_shared_buf (psp, &psp->hdcp_context.context.mem_context);if (ret)return ret;
@@ -1752,7 +1752,7 @@ static int psp_dtm_initialize(struct psp_context *psp) psp->dtm_context.context.mem_context.shared_mem_size =PSP_DTM_SHARED_MEM_SIZE ; psp->dtm_context.context.ta_load_type =GFX_CMD_ID_LOAD_TA ; -if (!psp->dtm_context.context.initialized) { +if (!psp->dtm_context.context.mem_context.shared_buf) { ret =psp_ta_init_shared_buf (psp, &psp->dtm_context.context.mem_context);if (ret)return ret;
@@ -1820,7 +1820,7 @@ static int psp_rap_initialize(struct psp_context *psp) psp->rap_context.context.mem_context.shared_mem_size =PSP_RAP_SHARED_MEM_SIZE ; psp->rap_context.context.ta_load_type =GFX_CMD_ID_LOAD_TA ; -if (!psp->rap_context.context.initialized) { +if (!psp->rap_context.context.mem_context.shared_buf) { ret =psp_ta_init_shared_buf (psp, &psp->rap_context.context.mem_context);if (ret)return ret;
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +19 -0
@@ -26,6 +26,7 @@#include <linux/firmware.h> #include <linux/module.h> +#include <linux/dmi.h> #include <linux/pci.h> #include <linux/debugfs.h> #include <drm/drm_drv.h>
@@ -222,6 +223,24 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)return r; } +/* +* Some Steam Deck's BIOS versions are incompatible with the +* indirect SRAM mode, leading to amdgpu being unable to get +* properly probed (and even potentially crashing the kernel). +* Hence, check for these versions here - notice this is +* restricted to Vangogh (Deck's APU). +*/ +if (adev->ip_versions[UVD_HWIP ][0 ] ==IP_VERSION (3 ,0 ,2 )) { +const char *bios_ver =dmi_get_system_info (DMI_BIOS_VERSION ); + +if (bios_ver && (!strncmp ("F7A0113" , bios_ver,7 ) || + !strncmp ("F7A0114" , bios_ver,7 ))) { + adev->vcn.indirect_sram = false; +dev_info (adev->dev, +"Steam Deck quirk: indirect SRAM disabled on BIOS %s\n" , bios_ver); + } + } + hdr = (const struct common_firmware_header *)adev->vcn.fw->data; adev->vcn.fw_version =le32_to_cpu (hdr->ucode_version);
drivers/gpu/drm/amd/amdkfd/kfd_device.c +10 -1
@@ -59,6 +59,7 @@ static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size, unsigned int chunk_size);static void kfd_gtt_sa_fini (struct kfd_dev *kfd); +static int kfd_resume_iommu (struct kfd_dev *kfd);static int kfd_resume (struct kfd_dev *kfd);static void kfd_device_info_set_sdma_info (struct kfd_dev *kfd)
@@ -635,7 +636,7 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,svm_migrate_init (kfd->adev); -if (kgd2kfd_resume_iommu (kfd)) +if (kfd_resume_iommu (kfd)) goto device_iommu_error;if (kfd_resume (kfd))
@@ -783,6 +784,14 @@ int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm) }int kgd2kfd_resume_iommu (struct kfd_dev *kfd) +{ +if (!kfd->init_complete) +return 0 ; + +return kfd_resume_iommu (kfd); +} + +static int kfd_resume_iommu (struct kfd_dev *kfd) {int err =0 ;
drivers/gpu/drm/amd/amdkfd/kfd_events.c +3 -6
@@ -778,16 +778,13 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)struct kfd_event_waiter *event_waiters;uint32_t i; - event_waiters =kmalloc_array (num_events, -sizeof (struct kfd_event_waiter ), -GFP_KERNEL ); + event_waiters =kcalloc (num_events,sizeof (struct kfd_event_waiter ), +GFP_KERNEL );if (!event_waiters)return NULL ; -for (i =0 ; (event_waiters) && (i < num_events) ; i++) { +for (i =0 ; i < num_events; i++)init_wait (&event_waiters[i].wait); - event_waiters[i].activated = false; - }return event_waiters; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +3 -3
@@ -4985,9 +4985,9 @@ static void fill_dc_dirty_rects(struct drm_plane *plane,for (; flip_addrs->dirty_rect_count < num_clips; clips++)fill_dc_dirty_rect (new_plane_state->plane, - &dirty_rects[i], clips->x1, - clips->y1, clips->x2 - clips->x1, - clips->y2 - clips->y1, + &dirty_rects[flip_addrs->dirty_rect_count], + clips->x1, clips->y1, + clips->x2 - clips->x1, clips->y2 - clips->y1, &flip_addrs->dirty_rect_count, false);return ;
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c +0 -3
@@ -992,8 +992,5 @@ void dcn30_prepare_bandwidth(struct dc *dc, dc->clk_mgr->funcs->set_max_memclk (dc->clk_mgr, dc->clk_mgr->bw_params->clk_table.entries[dc->clk_mgr->bw_params->clk_table.num_entries -1 ].memclk_mhz);dcn20_prepare_bandwidth (dc, context); - -dc_dmub_srv_p_state_delegate (dc, - context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching, context); }
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c +5 -1
@@ -1915,6 +1915,7 @@ int dcn32_populate_dml_pipes_from_context(bool subvp_in_use = false;uint8_t is_pipe_split_expected[MAX_PIPES ] = {0 };struct dc_crtc_timing *timing; +bool vsr_odm_support = false;dcn20_populate_dml_pipes_from_context (dc, context, pipes, fast_validate);
@@ -1932,12 +1933,15 @@ int dcn32_populate_dml_pipes_from_context( timing = &pipe->stream->timing; pipes[pipe_cnt].pipe.dest.odm_combine_policy = dm_odm_combine_policy_dal; + vsr_odm_support = (res_ctx->pipe_ctx[i].stream->src.width >=5120 && + res_ctx->pipe_ctx[i].stream->src.width > res_ctx->pipe_ctx[i].stream->dst.width);if (context->stream_count ==1 && context->stream_status[0 ].plane_count ==1 && !dc_is_hdmi_signal (res_ctx->pipe_ctx[i].stream->signal) &&is_h_timing_divisible_by_2 (res_ctx->pipe_ctx[i].stream) && pipe->stream->timing.pix_clk_100hz *100 >DCN3_2_VMIN_DISPCLK_HZ && - dc->debug.enable_single_display_2to1_odm_policy) { + dc->debug.enable_single_display_2to1_odm_policy && + !vsr_odm_support) {//excluding 2to1 ODM combine on >= 5k vsr pipes[pipe_cnt].pipe.dest.odm_combine_policy = dm_odm_combine_policy_2to1; } pipe_cnt++;
drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c +4 -1
@@ -1802,7 +1802,10 @@ static unsigned int CalculateVMAndRowBytes( }if (SurfaceTiling == dm_sw_linear) { - *dpte_row_height =dml_min (128 ,1 << (unsigned int )dml_floor (dml_log2 (PTEBufferSizeInRequests * *PixelPTEReqWidth / Pitch),1 )); +if (PTEBufferSizeInRequests ==0 ) + *dpte_row_height =1 ; +else + *dpte_row_height =dml_min (128 ,1 << (unsigned int )dml_floor (dml_log2 (PTEBufferSizeInRequests * *PixelPTEReqWidth / Pitch),1 )); *dpte_row_width_ub = (dml_ceil (((double ) SwathWidth -1 ) / *PixelPTEReqWidth,1 ) +1 ) * *PixelPTEReqWidth; *PixelPTEBytesPerRow = *dpte_row_width_ub / *PixelPTEReqWidth * *PTERequestSize; }else if (ScanDirection != dm_vert) {
drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu13_driver_if_v13_0_4.h +2 -2
@@ -27,7 +27,7 @@// *** IMPORTANT *** // SMU TEAM: Always increment the interface version if // any structure is changed in this file -#define PMFW_DRIVER_IF_VERSION 7 +#define PMFW_DRIVER_IF_VERSION 8 typedef struct { int32_t value;
@@ -198,7 +198,7 @@ typedef struct {uint16_t SkinTemp;uint16_t DeviceState;uint16_t CurTemp;//[centi-Celsius] -uint16_t spare2; +uint16_t FilterAlphaValue;uint16_t AverageGfxclkFrequency;uint16_t AverageFclkFrequency;
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h +1 -1
@@ -29,7 +29,7 @@#define SMU13_DRIVER_IF_VERSION_YELLOW_CARP 0x04#define SMU13_DRIVER_IF_VERSION_ALDE 0x08#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_0_0 0x37 -#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_4 0x07 +#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_4 0x08#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_5 0x04#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_0_10 0x32#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_7 0x37
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +33 -10
69 lines not on this page · raw message
drivers/gpu/drm/drm_edid.c +1 -1
@@ -2797,7 +2797,7 @@ u32 drm_edid_get_panel_id(struct i2c_adapter *adapter)* the EDID then we'll just return 0. */ - base_block =kmalloc (EDID_LENGTH ,GFP_KERNEL ); + base_block =kzalloc (EDID_LENGTH ,GFP_KERNEL );if (!base_block)return 0 ;
drivers/gpu/drm/drm_gem.c +7 -2
@@ -1375,10 +1375,13 @@ EXPORT_SYMBOL(drm_gem_lru_move_tail);* * @lru: The LRU to scan * @nr_to_scan: The number of pages to try to reclaim +* @remaining: The number of pages left to reclaim, should be initialized by caller * @shrink: Callback to try to shrink/reclaim the object. */ unsigned long -drm_gem_lru_scan (struct drm_gem_lru *lru,unsigned nr_to_scan, +drm_gem_lru_scan (struct drm_gem_lru *lru, +unsigned int nr_to_scan, +unsigned long *remaining,bool (*shrink)(struct drm_gem_object *obj)) {struct drm_gem_lru still_in_lru;
@@ -1417,8 +1420,10 @@ drm_gem_lru_scan(struct drm_gem_lru *lru, unsigned nr_to_scan,* hit shrinker in response to trying to get backing pages * for this obj (ie. while it's lock is already held) */ -if (!dma_resv_trylock (obj->resv)) +if (!dma_resv_trylock (obj->resv)) { + *remaining += obj->size >>PAGE_SHIFT ; goto tail; + }if (shrink (obj)) { freed += obj->size >>PAGE_SHIFT ;
drivers/gpu/drm/drm_gem_shmem_helper.c +6 -3
@@ -622,11 +622,14 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_structint ret;if (obj->import_attach) { -/* Drop the reference drm_gem_mmap_obj() acquired.*/ -drm_gem_object_put (obj); vma->vm_private_data =NULL ; + ret =dma_buf_mmap (obj->dma_buf, vma,0 ); + +/* Drop the reference drm_gem_mmap_obj() acquired.*/ +if (!ret) +drm_gem_object_put (obj); -return dma_buf_mmap (obj->dma_buf, vma,0 ); +return ret; } ret =drm_gem_shmem_get_pages (shmem);
drivers/gpu/drm/i915/display/intel_display_types.h +2 -0
@@ -1618,6 +1618,8 @@ struct intel_psr {bool psr2_sel_fetch_cff_enabled;bool req_psr2_sdp_prior_scanline;u8 sink_sync_latency; +u8 io_wake_lines; +u8 fast_wake_lines;ktime_t last_entry_attempt;ktime_t last_exit;bool sink_not_reliable;
drivers/gpu/drm/i915/display/intel_psr.c +61 -17
110 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_snps_phy.c +62 -0
82 lines not on this page · raw message
drivers/gpu/drm/i915/gt/intel_sseu.h +1 -1
@@ -27,7 +27,7 @@ struct drm_printer;* is only relevant to pre-Xe_HP platforms (Xe_HP and beyond use the * I915_MAX_SS_FUSE_BITS value below). */ -#define GEN_MAX_SS_PER_HSW_SLICE 6 +#define GEN_MAX_SS_PER_HSW_SLICE 8/* * Maximum number of 32-bit registers used by hardware to express the
drivers/gpu/drm/i915/i915_active.c +14 -11
@@ -422,12 +422,12 @@ replace_barrier(struct i915_active *ref, struct i915_active_fence *active)* we can use it to substitute for the pending idle-barrer * request that we want to emit on the kernel_context. */ -__active_del_barrier (ref,node_from_active (active)); -return true; +return __active_del_barrier (ref,node_from_active (active)); }int i915_active_add_request (struct i915_active *ref,struct i915_request *rq) { +u64 idx =i915_request_timeline (rq)->fence_context;struct dma_fence *fence = &rq->fence;struct i915_active_fence *active;int err;
@@ -437,16 +437,19 @@ int i915_active_add_request(struct i915_active *ref, struct i915_request *rq)if (err)return err; - active =active_instance (ref,i915_request_timeline (rq)->fence_context); -if (!active) { - err = -ENOMEM ; - goto out; - } +do { + active =active_instance (ref, idx); +if (!active) { + err = -ENOMEM ; + goto out; + } + +if (replace_barrier (ref, active)) { +RCU_INIT_POINTER (active->fence,NULL ); +atomic_dec (&ref->count); + } + }while (unlikely (is_barrier (active))); -if (replace_barrier (ref, active)) { -RCU_INIT_POINTER (active->fence,NULL ); -atomic_dec (&ref->count); - }if (!__i915_active_fence_set (active, fence))__i915_active_acquire (ref);
drivers/gpu/drm/meson/meson_vpp.c +2 -0
@@ -100,6 +100,8 @@ void meson_vpp_init(struct meson_drm *priv) priv->io_base + _REG(VPP_DOLBY_CTRL));writel_relaxed (0x1020080 , priv->io_base +_REG (VPP_DUMMY_DATA1 )); +writel_relaxed (0x42020 , + priv->io_base +_REG (VPP_DUMMY_DATA )); }else if (meson_vpu_is_compatible (priv,VPU_COMPATIBLE_G12A ))writel_relaxed (0xf , priv->io_base +_REG (DOLBY_PATH_CTRL ));
drivers/gpu/drm/msm/msm_gem_shrinker.c +9 -2
@@ -107,6 +107,7 @@ msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)bool (*shrink)(struct drm_gem_object *obj);bool cond;unsigned long freed; +unsigned long remaining; } stages[] = {/* Stages of progressively more aggressive/expensive reclaim: */ { &priv->lru.dontneed, purge, true },
@@ -116,14 +117,18 @@ msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) };long nr = sc->nr_to_scan;unsigned long freed =0 ; +unsigned long remaining =0 ;for (unsigned i =0 ; (nr >0 ) && (i <ARRAY_SIZE (stages)); i++) {if (!stages[i].cond)continue ; stages[i].freed = -drm_gem_lru_scan (stages[i].lru, nr, stages[i].shrink); +drm_gem_lru_scan (stages[i].lru, nr, + &stages[i].remaining, + stages[i].shrink); nr -= stages[i].freed; freed += stages[i].freed; + remaining += stages[i].remaining; }if (freed) {
@@ -132,7 +137,7 @@ msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) stages[3].freed); } -return (freed >0 ) ? freed :SHRINK_STOP ; +return (freed >0 && remaining >0 ) ? freed :SHRINK_STOP ; }#ifdef CONFIG_DEBUG_FS
@@ -182,10 +187,12 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr) NULL, };unsigned idx, unmapped =0 ; +unsigned long remaining =0 ;for (idx =0 ; lrus[idx] && unmapped < vmap_shrink_limit; idx++) { unmapped +=drm_gem_lru_scan (lrus[idx], vmap_shrink_limit - unmapped, + &remaining, vmap_shrink); }
drivers/gpu/drm/panfrost/panfrost_mmu.c +1 -1
@@ -282,7 +282,7 @@ static void panfrost_mmu_flush_range(struct panfrost_device *pfdev,if (pm_runtime_active (pfdev->dev))mmu_hw_do_operation (pfdev, mmu, iova, size,AS_COMMAND_FLUSH_PT ); -pm_runtime_put_sync_autosuspend (pfdev->dev); +pm_runtime_put_autosuspend (pfdev->dev); } static int mmu_map_sg(struct panfrost_device *pfdev, struct panfrost_mmu *mmu,
drivers/gpu/drm/sun4i/sun4i_drv.c +4 -2
@@ -95,12 +95,12 @@ static int sun4i_drv_bind(struct device *dev)/* drm_vblank_init calls kcalloc, which can fail */ ret =drm_vblank_init (drm, drm->mode_config.num_crtc);if (ret) - goto cleanup_mode_config; + goto unbind_all;/* Remove early framebuffers (ie. simplefb) */ ret =drm_aperture_remove_framebuffers (false, &sun4i_drv_driver);if (ret) - goto cleanup_mode_config; + goto unbind_all;sun4i_framebuffer_init (drm);
@@ -119,6 +119,8 @@ static int sun4i_drv_bind(struct device *dev) finish_poll:drm_kms_helper_poll_fini (drm); +unbind_all: +component_unbind_all (dev,NULL ); cleanup_mode_config:drm_mode_config_cleanup (drm);of_reserved_mem_device_release (dev);
drivers/gpu/drm/ttm/ttm_device.c +1 -1
@@ -158,7 +158,7 @@ int ttm_device_swapout(struct ttm_device *bdev, struct ttm_operation_ctx *ctx,struct ttm_buffer_object *bo = res->bo;uint32_t num_pages; -if (!bo) +if (!bo || bo->resource != res)continue ; num_pages =PFN_UP (bo->base.size);
drivers/gpu/drm/virtio/virtgpu_vq.c +2 -2
@@ -597,7 +597,7 @@ void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev,bool use_dma_api = !virtio_has_dma_quirk (vgdev->vdev);if (virtio_gpu_is_shmem (bo) && use_dma_api) -dma_sync_sgtable_for_device (&vgdev->vdev->dev, +dma_sync_sgtable_for_device (vgdev->vdev->dev.parent, bo->base.sgt,DMA_TO_DEVICE ); cmd_p =virtio_gpu_alloc_cmd (vgdev, &vbuf,sizeof (*cmd_p));
@@ -1019,7 +1019,7 @@ void virtio_gpu_cmd_transfer_to_host_3d(struct virtio_gpu_device *vgdev,bool use_dma_api = !virtio_has_dma_quirk (vgdev->vdev);if (virtio_gpu_is_shmem (bo) && use_dma_api) -dma_sync_sgtable_for_device (&vgdev->vdev->dev, +dma_sync_sgtable_for_device (vgdev->vdev->dev.parent, bo->base.sgt,DMA_TO_DEVICE ); cmd_p =virtio_gpu_alloc_cmd (vgdev, &vbuf,sizeof (*cmd_p));
drivers/hwmon/adt7475.c +4 -4
@@ -488,10 +488,10 @@ static ssize_t temp_store(struct device *dev, struct device_attribute *attr, val = (temp - val) /1000 ;if (sattr->index !=1 ) { - data->temp[HYSTERSIS ][sattr->index] &=0xF0 ; + data->temp[HYSTERSIS ][sattr->index] &=0x0F ; data->temp[HYSTERSIS ][sattr->index] |= (val &0xF ) <<4 ; }else { - data->temp[HYSTERSIS ][sattr->index] &=0x0F ; + data->temp[HYSTERSIS ][sattr->index] &=0xF0 ; data->temp[HYSTERSIS ][sattr->index] |= (val &0xF ); }
@@ -556,11 +556,11 @@ static ssize_t temp_st_show(struct device *dev, struct device_attribute *attr, val = data->enh_acoustics[0 ] &0xf ;break ;case 1 : - val = (data->enh_acoustics[1 ] >>4 ) &0xf ; + val = data->enh_acoustics[1 ] &0xf ;break ;case 2 :default : - val = data->enh_acoustics[1 ] &0xf ; + val = (data->enh_acoustics[1 ] >>4 ) &0xf ;break ; }
drivers/hwmon/ina3221.c +1 -1
@@ -772,7 +772,7 @@ static int ina3221_probe_child_from_dt(struct device *dev,return ret; }else if (val >INA3221_CHANNEL3 ) {dev_err (dev,"invalid reg %d of %pOFn\n" , val, child); -return ret; +return -EINVAL ; } input = &ina->inputs[val];
drivers/hwmon/ltc2992.c +1 -0
@@ -323,6 +323,7 @@ static int ltc2992_config_gpio(struct ltc2992_state *st) st->gc.label = name; st->gc.parent = &st->client->dev; st->gc.owner =THIS_MODULE ; + st->gc.can_sleep = true; st->gc.base =-1 ; st->gc.names = st->gpio_names; st->gc.ngpio =ARRAY_SIZE (st->gpio_names);
drivers/hwmon/pmbus/adm1266.c +1 -0
@@ -301,6 +301,7 @@ static int adm1266_config_gpio(struct adm1266_data *data) data->gc.label = name; data->gc.parent = &data->client->dev; data->gc.owner =THIS_MODULE ; + data->gc.can_sleep = true; data->gc.base =-1 ; data->gc.names = data->gpio_names; data->gc.ngpio =ARRAY_SIZE (data->gpio_names);
drivers/hwmon/pmbus/ucd9000.c +75 -0
105 lines not on this page · raw message
drivers/hwmon/tmp513.c +1 -1
@@ -758,7 +758,7 @@ static int tmp51x_probe(struct i2c_client *client)static struct i2c_driver tmp51x_driver = { .driver = { .name ="tmp51x" , - .of_match_table =of_match_ptr (tmp51x_of_match), + .of_match_table = tmp51x_of_match, }, .probe_new = tmp51x_probe, .id_table = tmp51x_id,
drivers/hwmon/xgene-hwmon.c +1 -0
@@ -761,6 +761,7 @@ static int xgene_hwmon_remove(struct platform_device *pdev) {struct xgene_hwmon_dev *ctx =platform_get_drvdata (pdev); +cancel_work_sync (&ctx->workq);hwmon_device_unregister (ctx->hwmon_dev);kfifo_free (&ctx->async_msg_fifo);if (acpi_disabled)
drivers/interconnect/core.c +43 -25
103 lines not on this page · raw message
drivers/interconnect/imx/imx.c +10 -10
@@ -295,6 +295,9 @@ int imx_icc_register(struct platform_device *pdev, provider->xlate = of_icc_xlate_onecell; provider->data = data; provider->dev = dev->parent; + +icc_provider_init (provider); +platform_set_drvdata (pdev, imx_provider);if (settings) {
@@ -306,20 +309,18 @@ int imx_icc_register(struct platform_device *pdev, } } - ret =icc_provider_add (provider); -if (ret) { -dev_err (dev,"error adding interconnect provider: %d\n" , ret); + ret =imx_icc_register_nodes (imx_provider, nodes, nodes_count, settings); +if (ret)return ret; - } - ret =imx_icc_register_nodes (imx_provider, nodes, nodes_count, settings); + ret =icc_provider_register (provider);if (ret) - goto provider_del; + goto err_unregister_nodes;return 0 ; -provider_del: -icc_provider_del (provider); +err_unregister_nodes: +imx_icc_unregister_nodes (&imx_provider->provider);return ret; }EXPORT_SYMBOL_GPL (imx_icc_register);
@@ -328,9 +329,8 @@ void imx_icc_unregister(struct platform_device *pdev) {struct imx_icc_provider *imx_provider =platform_get_drvdata (pdev); +icc_provider_deregister (&imx_provider->provider);imx_icc_unregister_nodes (&imx_provider->provider); - -icc_provider_del (&imx_provider->provider); }EXPORT_SYMBOL_GPL (imx_icc_unregister);
drivers/interconnect/qcom/icc-rpm.c +16 -13
@@ -503,7 +503,6 @@ int qnoc_probe(struct platform_device *pdev) } provider = &qp->provider; -INIT_LIST_HEAD (&provider->nodes); provider->dev = dev; provider->set = qcom_icc_set; provider->pre_aggregate = qcom_icc_pre_bw_aggregate;
@@ -511,12 +510,7 @@ int qnoc_probe(struct platform_device *pdev) provider->xlate_extended = qcom_icc_xlate_extended; provider->data = data; - ret =icc_provider_add (provider); -if (ret) { -dev_err (dev,"error adding interconnect provider: %d\n" , ret); -clk_bulk_disable_unprepare (qp->num_clks, qp->bus_clks); -return ret; - } +icc_provider_init (provider);for (i =0 ; i < num_nodes; i++) {size_t j;
@@ -524,7 +518,7 @@ int qnoc_probe(struct platform_device *pdev) node =icc_node_create (qnodes[i]->id);if (IS_ERR (node)) { ret =PTR_ERR (node); - goto err; + goto err_remove_nodes; } node->name = qnodes[i]->name;
@@ -538,17 +532,26 @@ int qnoc_probe(struct platform_device *pdev) } data->num_nodes = num_nodes; + ret =icc_provider_register (provider); +if (ret) + goto err_remove_nodes; +platform_set_drvdata (pdev, qp);/* Populate child NoC devices if any */ -if (of_get_child_count (dev->of_node) >0 ) -return of_platform_populate (dev->of_node,NULL ,NULL , dev); +if (of_get_child_count (dev->of_node) >0 ) { + ret =of_platform_populate (dev->of_node,NULL ,NULL , dev); +if (ret) + goto err_deregister_provider; + }return 0 ; -err: + +err_deregister_provider: +icc_provider_deregister (provider); +err_remove_nodes:icc_nodes_remove (provider);clk_bulk_disable_unprepare (qp->num_clks, qp->bus_clks); -icc_provider_del (provider);return ret; }
@@ -558,9 +561,9 @@ int qnoc_remove(struct platform_device *pdev) {struct qcom_icc_provider *qp =platform_get_drvdata (pdev); +icc_provider_deregister (&qp->provider);icc_nodes_remove (&qp->provider);clk_bulk_disable_unprepare (qp->num_clks, qp->bus_clks); -icc_provider_del (&qp->provider);return 0 ; }
drivers/interconnect/qcom/icc-rpmh.c +19 -11
@@ -192,9 +192,10 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) provider->pre_aggregate = qcom_icc_pre_aggregate; provider->aggregate = qcom_icc_aggregate; provider->xlate_extended = qcom_icc_xlate_extended; -INIT_LIST_HEAD (&provider->nodes); provider->data = data; +icc_provider_init (provider); + qp->dev = dev; qp->bcms = desc->bcms; qp->num_bcms = desc->num_bcms;
@@ -203,10 +204,6 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)if (IS_ERR (qp->voter))return PTR_ERR (qp->voter); - ret =icc_provider_add (provider); -if (ret) -return ret; -for (i =0 ; i < qp->num_bcms; i++)qcom_icc_bcm_init (qp->bcms[i], dev);
@@ -218,7 +215,7 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) node =icc_node_create (qn->id);if (IS_ERR (node)) { ret =PTR_ERR (node); - goto err; + goto err_remove_nodes; } node->name = qn->name;
@@ -232,16 +229,27 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) } data->num_nodes = num_nodes; + + ret =icc_provider_register (provider); +if (ret) + goto err_remove_nodes; +platform_set_drvdata (pdev, qp);/* Populate child NoC devices if any */ -if (of_get_child_count (dev->of_node) >0 ) -return of_platform_populate (dev->of_node,NULL ,NULL , dev); +if (of_get_child_count (dev->of_node) >0 ) { + ret =of_platform_populate (dev->of_node,NULL ,NULL , dev); +if (ret) + goto err_deregister_provider; + }return 0 ; -err: + +err_deregister_provider: +icc_provider_deregister (provider); +err_remove_nodes:icc_nodes_remove (provider); -icc_provider_del (provider); +return ret; }EXPORT_SYMBOL_GPL (qcom_icc_rpmh_probe);
@@ -250,8 +258,8 @@ int qcom_icc_rpmh_remove(struct platform_device *pdev) {struct qcom_icc_provider *qp =platform_get_drvdata (pdev); +icc_provider_deregister (&qp->provider);icc_nodes_remove (&qp->provider); -icc_provider_del (&qp->provider);return 0 ; }
drivers/interconnect/qcom/msm8974.c +8 -12
@@ -692,7 +692,6 @@ static int msm8974_icc_probe(struct platform_device *pdev)return ret; provider = &qp->provider; -INIT_LIST_HEAD (&provider->nodes); provider->dev = dev; provider->set = msm8974_icc_set; provider->aggregate = icc_std_aggregate;
@@ -700,11 +699,7 @@ static int msm8974_icc_probe(struct platform_device *pdev) provider->data = data; provider->get_bw = msm8974_get_bw; - ret =icc_provider_add (provider); -if (ret) { -dev_err (dev,"error adding interconnect provider: %d\n" , ret); - goto err_disable_clks; - } +icc_provider_init (provider);for (i =0 ; i < num_nodes; i++) {size_t j;
@@ -712,7 +707,7 @@ static int msm8974_icc_probe(struct platform_device *pdev) node =icc_node_create (qnodes[i]->id);if (IS_ERR (node)) { ret =PTR_ERR (node); - goto err_del_icc; + goto err_remove_nodes; } node->name = qnodes[i]->name;
@@ -729,15 +724,16 @@ static int msm8974_icc_probe(struct platform_device *pdev) } data->num_nodes = num_nodes; + ret =icc_provider_register (provider); +if (ret) + goto err_remove_nodes; +platform_set_drvdata (pdev, qp);return 0 ; -err_del_icc: +err_remove_nodes:icc_nodes_remove (provider); -icc_provider_del (provider); - -err_disable_clks:clk_bulk_disable_unprepare (qp->num_clks, qp->bus_clks);return ret;
@@ -747,9 +743,9 @@ static int msm8974_icc_remove(struct platform_device *pdev) {struct msm8974_icc_provider *qp =platform_get_drvdata (pdev); +icc_provider_deregister (&qp->provider);icc_nodes_remove (&qp->provider);clk_bulk_disable_unprepare (qp->num_clks, qp->bus_clks); -icc_provider_del (&qp->provider);return 0 ; }
drivers/interconnect/qcom/osm-l3.c +6 -8
@@ -158,8 +158,8 @@ static int qcom_osm_l3_remove(struct platform_device *pdev) {struct qcom_osm_l3_icc_provider *qp =platform_get_drvdata (pdev); +icc_provider_deregister (&qp->provider);icc_nodes_remove (&qp->provider); -icc_provider_del (&qp->provider);return 0 ; }
@@ -245,14 +245,9 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) provider->set = qcom_osm_l3_set; provider->aggregate = icc_std_aggregate; provider->xlate = of_icc_xlate_onecell; -INIT_LIST_HEAD (&provider->nodes); provider->data = data; - ret =icc_provider_add (provider); -if (ret) { -dev_err (&pdev->dev,"error adding interconnect provider\n" ); -return ret; - } +icc_provider_init (provider);for (i =0 ; i < num_nodes; i++) {size_t j;
@@ -275,12 +270,15 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) } data->num_nodes = num_nodes; + ret =icc_provider_register (provider); +if (ret) + goto err; +platform_set_drvdata (pdev, qp);return 0 ; err:icc_nodes_remove (provider); -icc_provider_del (provider);return ret; }
drivers/interconnect/samsung/exynos.c +13 -13
@@ -98,12 +98,13 @@ static int exynos_generic_icc_remove(struct platform_device *pdev)struct exynos_icc_priv *priv =platform_get_drvdata (pdev);struct icc_node *parent_node, *node = priv->node; +icc_provider_deregister (&priv->provider); + parent_node =exynos_icc_get_parent (priv->dev->parent->of_node);if (parent_node && !IS_ERR (parent_node))icc_link_destroy (node, parent_node);icc_nodes_remove (&priv->provider); -icc_provider_del (&priv->provider);return 0 ; }
@@ -132,15 +133,11 @@ static int exynos_generic_icc_probe(struct platform_device *pdev) provider->inter_set = true; provider->data = priv; - ret =icc_provider_add (provider); -if (ret <0 ) -return ret; +icc_provider_init (provider); icc_node =icc_node_create (pdev->id); -if (IS_ERR (icc_node)) { - ret =PTR_ERR (icc_node); - goto err_prov_del; - } +if (IS_ERR (icc_node)) +return PTR_ERR (icc_node); priv->node = icc_node; icc_node->name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%pOFn",
@@ -149,6 +146,9 @@ static int exynos_generic_icc_probe(struct platform_device *pdev) &priv->bus_clk_ratio)) priv->bus_clk_ratio =EXYNOS_ICC_DEFAULT_BUS_CLK_RATIO ; + icc_node->data = priv; +icc_node_add (icc_node, provider); +/* * Register a PM QoS request for the parent (devfreq) device. */
@@ -157,9 +157,6 @@ static int exynos_generic_icc_probe(struct platform_device *pdev)if (ret <0 ) goto err_node_del; - icc_node->data = priv; -icc_node_add (icc_node, provider); - icc_parent_node =exynos_icc_get_parent (bus_dev->of_node);if (IS_ERR (icc_parent_node)) { ret =PTR_ERR (icc_parent_node);
@@ -171,14 +168,17 @@ static int exynos_generic_icc_probe(struct platform_device *pdev) goto err_pmqos_del; } + ret =icc_provider_register (provider); +if (ret <0 ) + goto err_pmqos_del; +return 0 ; err_pmqos_del:dev_pm_qos_remove_request (&priv->qos_req); err_node_del:icc_nodes_remove (provider); -err_prov_del: -icc_provider_del (provider); +return ret; }
drivers/md/Kconfig +4 -0
@@ -16,6 +16,10 @@ if MD config BLK_DEV_MD tristate "RAID support" select BLOCK_HOLDER_DEPRECATED if SYSFS + # BLOCK_LEGACY_AUTOLOAD requirement should be removed + # after relevant mdadm enhancements - to make "names=yes" + # the default - are widely available. + select BLOCK_LEGACY_AUTOLOAD help This driver lets you combine several hard disk partitions into one logical block device. This can be used to simply append one
drivers/md/dm.c +3 -3
@@ -510,10 +510,10 @@ static void dm_io_acct(struct dm_io *io, bool end) sectors = io->sectors;if (!end) -bdev_start_io_acct (bio->bi_bdev, sectors,bio_op (bio), - start_time); +bdev_start_io_acct (bio->bi_bdev,bio_op (bio), start_time);else -bdev_end_io_acct (bio->bi_bdev,bio_op (bio), start_time); +bdev_end_io_acct (bio->bi_bdev,bio_op (bio), sectors, + start_time);if (static_branch_unlikely (&stats_enabled) &&unlikely (dm_stats_used (&md->stats))) {
drivers/media/i2c/m5mols/m5mols_core.c +1 -1
@@ -488,7 +488,7 @@ static enum m5mols_restype __find_restype(u32 code)do {if (code == m5mols_default_ffmt[type].code)return type; - }while (type++ !=SIZE_DEFAULT_FFMT ); + }while (++type !=SIZE_DEFAULT_FFMT );return 0 ; }
drivers/memory/tegra/mc.c +7 -9
@@ -794,16 +794,12 @@ static int tegra_mc_interconnect_setup(struct tegra_mc *mc) mc->provider.aggregate = mc->soc->icc_ops->aggregate; mc->provider.xlate_extended = mc->soc->icc_ops->xlate_extended; - err =icc_provider_add (&mc->provider); -if (err) -return err; +icc_provider_init (&mc->provider);/* create Memory Controller node */ node =icc_node_create (TEGRA_ICC_MC ); -if (IS_ERR (node)) { - err =PTR_ERR (node); - goto del_provider; - } +if (IS_ERR (node)) +return PTR_ERR (node); node->name ="Memory Controller" ;icc_node_add (node, &mc->provider);
@@ -830,12 +826,14 @@ static int tegra_mc_interconnect_setup(struct tegra_mc *mc) goto remove_nodes; } + err =icc_provider_register (&mc->provider); +if (err) + goto remove_nodes; +return 0 ; remove_nodes:icc_nodes_remove (&mc->provider); -del_provider: -icc_provider_del (&mc->provider);return err; }
drivers/memory/tegra/tegra124-emc.c +6 -6
@@ -1351,15 +1351,13 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc) emc->provider.aggregate = soc->icc_ops->aggregate; emc->provider.xlate_extended = emc_of_icc_xlate_extended; - err =icc_provider_add (&emc->provider); -if (err) - goto err_msg; +icc_provider_init (&emc->provider);/* create External Memory Controller node */ node =icc_node_create (TEGRA_ICC_EMC );if (IS_ERR (node)) { err =PTR_ERR (node); - goto del_provider; + goto err_msg; } node->name ="External Memory Controller" ;
@@ -1380,12 +1378,14 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc) node->name ="External Memory (DRAM)" ;icc_node_add (node, &emc->provider); + err =icc_provider_register (&emc->provider); +if (err) + goto remove_nodes; +return 0 ; remove_nodes:icc_nodes_remove (&emc->provider); -del_provider: -icc_provider_del (&emc->provider); err_msg:dev_err (emc->dev,"failed to initialize ICC: %d\n" , err);
drivers/memory/tegra/tegra20-emc.c +6 -6
@@ -1021,15 +1021,13 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc) emc->provider.aggregate = soc->icc_ops->aggregate; emc->provider.xlate_extended = emc_of_icc_xlate_extended; - err =icc_provider_add (&emc->provider); -if (err) - goto err_msg; +icc_provider_init (&emc->provider);/* create External Memory Controller node */ node =icc_node_create (TEGRA_ICC_EMC );if (IS_ERR (node)) { err =PTR_ERR (node); - goto del_provider; + goto err_msg; } node->name ="External Memory Controller" ;
@@ -1050,12 +1048,14 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc) node->name ="External Memory (DRAM)" ;icc_node_add (node, &emc->provider); + err =icc_provider_register (&emc->provider); +if (err) + goto remove_nodes; +return 0 ; remove_nodes:icc_nodes_remove (&emc->provider); -del_provider: -icc_provider_del (&emc->provider); err_msg:dev_err (emc->dev,"failed to initialize ICC: %d\n" , err);
drivers/memory/tegra/tegra30-emc.c +6 -6
@@ -1533,15 +1533,13 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc) emc->provider.aggregate = soc->icc_ops->aggregate; emc->provider.xlate_extended = emc_of_icc_xlate_extended; - err =icc_provider_add (&emc->provider); -if (err) - goto err_msg; +icc_provider_init (&emc->provider);/* create External Memory Controller node */ node =icc_node_create (TEGRA_ICC_EMC );if (IS_ERR (node)) { err =PTR_ERR (node); - goto del_provider; + goto err_msg; } node->name ="External Memory Controller" ;
@@ -1562,12 +1560,14 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc) node->name ="External Memory (DRAM)" ;icc_node_add (node, &emc->provider); + err =icc_provider_register (&emc->provider); +if (err) + goto remove_nodes; +return 0 ; remove_nodes:icc_nodes_remove (&emc->provider); -del_provider: -icc_provider_del (&emc->provider); err_msg:dev_err (emc->dev,"failed to initialize ICC: %d\n" , err);
drivers/mmc/host/sdhci_am654.c +1 -1
@@ -369,7 +369,7 @@ static void sdhci_am654_write_b(struct sdhci_host *host, u8 val, int reg)MAX_POWER_ON_TIMEOUT , false, host, val, reg);if (ret) -dev_warn (mmc_dev (host->mmc),"Power on failed\n" ); +dev_info (mmc_dev (host->mmc),"Power on failed\n" ); } }
drivers/net/bonding/bond_main.c +16 -7
@@ -1773,6 +1773,19 @@ void bond_lower_state_changed(struct slave *slave)slave_err (bond_dev, slave_dev,"Error: %s\n" , errmsg); \ }while (0 ) +/* The bonding driver uses ether_setup() to convert a master bond device +* to ARPHRD_ETHER, that resets the target netdevice's flags so we always +* have to restore the IFF_MASTER flag, and only restore IFF_SLAVE if it was set +*/ +static void bond_ether_setup(struct net_device *bond_dev) +{ +unsigned int slave_flag = bond_dev->flags &IFF_SLAVE ; + +ether_setup (bond_dev); + bond_dev->flags |=IFF_MASTER | slave_flag; + bond_dev->priv_flags &= ~IFF_TX_SKB_SHARING ; +} +/* enslave device <slave> to bond device <master> */ int bond_enslave (struct net_device *bond_dev,struct net_device *slave_dev,struct netlink_ext_ack *extack)
@@ -1864,10 +1877,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,if (slave_dev->type !=ARPHRD_ETHER )bond_setup_by_slave (bond_dev, slave_dev); -else { -ether_setup (bond_dev); - bond_dev->priv_flags &= ~IFF_TX_SKB_SHARING ; - } +else +bond_ether_setup (bond_dev);call_netdevice_notifiers (NETDEV_POST_TYPE_CHANGE , bond_dev);
@@ -2287,9 +2298,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,eth_hw_addr_random (bond_dev);if (bond_dev->type !=ARPHRD_ETHER ) {dev_close (bond_dev); -ether_setup (bond_dev); - bond_dev->flags |=IFF_MASTER ; - bond_dev->priv_flags &= ~IFF_TX_SKB_SHARING ; +bond_ether_setup (bond_dev); } }
drivers/net/dsa/microchip/ksz_common.c +1 -1
@@ -310,7 +310,7 @@ static const u16 ksz8795_regs[] = { [S_BROADCAST_CTRL] = 0x06, [S_MULTICAST_CTRL] = 0x04, [P_XMII_CTRL_0] = 0x06, - [P_XMII_CTRL_1] = 0x56, + [P_XMII_CTRL_1] = 0x06, };static const u32 ksz8795_masks[] = {
drivers/net/dsa/mt7530.c +32 -32
85 lines not on this page · raw message
drivers/net/dsa/mv88e6xxx/chip.c +12 -4
@@ -3549,7 +3549,7 @@ static int mv88e6xxx_get_max_mtu(struct dsa_switch *ds, int port)return 10240 -VLAN_ETH_HLEN -EDSA_HLEN -ETH_FCS_LEN ; else if (chip->info->ops->set_max_frame_size) return 1632 - VLAN_ETH_HLEN - EDSA_HLEN - ETH_FCS_LEN; -return 1522 -VLAN_ETH_HLEN -EDSA_HLEN -ETH_FCS_LEN ; +return ETH_DATA_LEN ; }static int mv88e6xxx_change_mtu (struct dsa_switch *ds,int port,int new_mtu)
@@ -3557,6 +3557,17 @@ static int mv88e6xxx_change_mtu(struct dsa_switch *ds, int port, int new_mtu)struct mv88e6xxx_chip *chip = ds->priv;int ret =0 ; +/* For families where we don't know how to alter the MTU, +* just accept any value up to ETH_DATA_LEN +*/ +if (!chip->info->ops->port_set_jumbo_size && + !chip->info->ops->set_max_frame_size) { +if (new_mtu >ETH_DATA_LEN ) +return -EINVAL ; + +return 0 ; + } +if (dsa_is_dsa_port (ds, port) ||dsa_is_cpu_port (ds, port)) new_mtu +=EDSA_HLEN ;
@@ -3565,9 +3576,6 @@ static int mv88e6xxx_change_mtu(struct dsa_switch *ds, int port, int new_mtu) ret = chip->info->ops->port_set_jumbo_size (chip, port, new_mtu); else if (chip->info->ops->set_max_frame_size) ret = chip->info->ops->set_max_frame_size (chip, new_mtu); - else - if (new_mtu > 1522) - ret = -EINVAL ;mv88e6xxx_reg_unlock (chip);return ret;
drivers/net/ethernet/aquantia/atlantic/aq_ring.c +21 -7
@@ -412,6 +412,25 @@ int aq_xdp_xmit(struct net_device *dev, int num_frames,return num_frames - drop; } +static struct sk_buff *aq_xdp_build_skb (struct xdp_buff *xdp, +struct net_device *dev, +struct aq_ring_buff_s *buff) +{ +struct xdp_frame *xdpf; +struct sk_buff *skb; + + xdpf =xdp_convert_buff_to_frame (xdp); +if (unlikely (!xdpf)) +return NULL ; + + skb =xdp_build_skb_from_frame (xdpf, dev); +if (!skb) +return NULL ; + +aq_get_rxpages_xdp (buff, xdp); +return skb; +} + static struct sk_buff *aq_xdp_run_prog(struct aq_nic_s *aq_nic, struct xdp_buff *xdp, struct aq_ring_s *rx_ring,
@@ -431,7 +450,7 @@ static struct sk_buff *aq_xdp_run_prog(struct aq_nic_s *aq_nic, prog =READ_ONCE (rx_ring->xdp_prog);if (!prog) - goto pass; +return aq_xdp_build_skb (xdp, aq_nic->ndev, buff);prefetchw (xdp->data_hard_start);/* xdp_frame write */
@@ -442,17 +461,12 @@ static struct sk_buff *aq_xdp_run_prog(struct aq_nic_s *aq_nic, act =bpf_prog_run_xdp (prog, xdp);switch (act) {case XDP_PASS : -pass: - xdpf =xdp_convert_buff_to_frame (xdp); -if (unlikely (!xdpf)) - goto out_aborted; - skb =xdp_build_skb_from_frame (xdpf, aq_nic->ndev); + skb =aq_xdp_build_skb (xdp, aq_nic->ndev, buff);if (!skb) goto out_aborted;u64_stats_update_begin (&rx_ring->stats.rx.syncp); ++rx_ring->stats.rx.xdp_pass;u64_stats_update_end (&rx_ring->stats.rx.syncp); -aq_get_rxpages_xdp (buff, xdp);return skb;case XDP_TX : xdpf =xdp_convert_buff_to_frame (xdp);
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -4
@@ -6991,11 +6991,9 @@ static int bnxt_hwrm_func_qcfg(struct bnxt *bp)if (flags &FUNC_QCFG_RESP_FLAGS_FW_DCBX_AGENT_ENABLED ) bp->fw_cap |=BNXT_FW_CAP_DCBX_AGENT ; } -if (BNXT_PF (bp) && (flags &FUNC_QCFG_RESP_FLAGS_MULTI_HOST )) { +if (BNXT_PF (bp) && (flags &FUNC_QCFG_RESP_FLAGS_MULTI_HOST )) bp->flags |=BNXT_FLAG_MULTI_HOST ; -if (bp->fw_cap &BNXT_FW_CAP_PTP_RTC ) - bp->fw_cap &= ~BNXT_FW_CAP_PTP_RTC ; - } +if (flags &FUNC_QCFG_RESP_FLAGS_RING_MONITOR_ENABLED ) bp->fw_cap |=BNXT_FW_CAP_RING_MONITOR ;
drivers/net/ethernet/broadcom/bnxt/bnxt.h +2 -0
@@ -1992,6 +1992,8 @@ struct bnxt {u32 fw_dbg_cap;#define BNXT_NEW_RM (bp) ((bp)->fw_cap & BNXT_FW_CAP_NEW_RM) +#define BNXT_PTP_USE_RTC (bp) (!BNXT_MH(bp) && \ + ((bp)->fw_cap & BNXT_FW_CAP_PTP_RTC))u32 hwrm_spec_code;u16 hwrm_cmd_seq;u16 hwrm_cmd_kong_seq;
drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c +31 -25
99 lines not on this page · raw message
drivers/net/ethernet/i825xx/sni_82596.c +8 -6
@@ -78,6 +78,7 @@ static int sni_82596_probe(struct platform_device *dev)void __iomem *mpu_addr;void __iomem *ca_addr;u8 __iomem *eth_addr; +u8 mac[ETH_ALEN ]; res =platform_get_resource (dev,IORESOURCE_MEM ,0 ); ca =platform_get_resource (dev,IORESOURCE_MEM ,1 );
@@ -109,12 +110,13 @@ static int sni_82596_probe(struct platform_device *dev) goto probe_failed;/* someone seems to like messed up stuff */ - netdevice->dev_addr[0 ] =readb (eth_addr +0x0b ); - netdevice->dev_addr[1 ] =readb (eth_addr +0x0a ); - netdevice->dev_addr[2 ] =readb (eth_addr +0x09 ); - netdevice->dev_addr[3 ] =readb (eth_addr +0x08 ); - netdevice->dev_addr[4 ] =readb (eth_addr +0x07 ); - netdevice->dev_addr[5 ] =readb (eth_addr +0x06 ); + mac[0 ] =readb (eth_addr +0x0b ); + mac[1 ] =readb (eth_addr +0x0a ); + mac[2 ] =readb (eth_addr +0x09 ); + mac[3 ] =readb (eth_addr +0x08 ); + mac[4 ] =readb (eth_addr +0x07 ); + mac[5 ] =readb (eth_addr +0x06 ); +eth_hw_addr_set (netdevice, mac);iounmap (eth_addr);if (netdevice->irq <0 ) {
drivers/net/ethernet/intel/i40e/i40e_main.c +1 -0
@@ -15518,6 +15518,7 @@ static int i40e_init_recovery_mode(struct i40e_pf *pf, struct i40e_hw *hw)int err;int v_idx; +pci_set_drvdata (pf->pdev, pf);pci_save_state (pf->pdev);/* set up periodic task facility */
drivers/net/ethernet/intel/ice/ice.h +5 -9
@@ -506,6 +506,7 @@ enum ice_pf_flags {ICE_FLAG_VF_VLAN_PRUNING ,ICE_FLAG_LINK_LENIENT_MODE_ENA ,ICE_FLAG_PLUG_AUX_DEV , +ICE_FLAG_UNPLUG_AUX_DEV ,ICE_FLAG_MTU_CHANGED ,ICE_FLAG_GNSS ,/* GNSS successfully initialized */ ICE_PF_FLAGS_NBITS /* must be last */
@@ -950,16 +951,11 @@ static inline void ice_set_rdma_cap(struct ice_pf *pf)*/ static inline void ice_clear_rdma_cap (struct ice_pf *pf) { -/* We can directly unplug aux device here only if the flag bit -* ICE_FLAG_PLUG_AUX_DEV is not set because ice_unplug_aux_dev() -* could race with ice_plug_aux_dev() called from -* ice_service_task(). In this case we only clear that bit now and -* aux device will be unplugged later once ice_plug_aux_device() -* called from ice_service_task() finishes (see ice_service_task()). +/* defer unplug to service task to avoid RTNL lock and +* clear PLUG bit so that pending plugs don't interfere */ -if (!test_and_clear_bit (ICE_FLAG_PLUG_AUX_DEV , pf->flags)) -ice_unplug_aux_dev (pf); - +clear_bit (ICE_FLAG_PLUG_AUX_DEV , pf->flags); +set_bit (ICE_FLAG_UNPLUG_AUX_DEV , pf->flags);clear_bit (ICE_FLAG_RDMA_ENA , pf->flags); }#endif /* _ICE_H_ */
drivers/net/ethernet/intel/ice/ice_main.c +8 -11
@@ -2316,18 +2316,15 @@ static void ice_service_task(struct work_struct *work) } } -if (test_bit (ICE_FLAG_PLUG_AUX_DEV , pf->flags)) { -/* Plug aux device per request */ -ice_plug_aux_dev (pf); +/* unplug aux dev per request, if an unplug request came in +* while processing a plug request, this will handle it +*/ +if (test_and_clear_bit (ICE_FLAG_UNPLUG_AUX_DEV , pf->flags)) +ice_unplug_aux_dev (pf); -/* Mark plugging as done but check whether unplug was -* requested during ice_plug_aux_dev() call -* (e.g. from ice_clear_rdma_cap()) and if so then -* plug aux device. -*/ -if (!test_and_clear_bit (ICE_FLAG_PLUG_AUX_DEV , pf->flags)) -ice_unplug_aux_dev (pf); - } +/* Plug aux device per request */ +if (test_and_clear_bit (ICE_FLAG_PLUG_AUX_DEV , pf->flags)) +ice_plug_aux_dev (pf);if (test_and_clear_bit (ICE_FLAG_MTU_CHANGED , pf->flags)) {struct iidc_event *event;
drivers/net/ethernet/intel/ice/ice_xsk.c +2 -3
@@ -184,8 +184,6 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx) }netif_tx_stop_queue (netdev_get_tx_queue (vsi->netdev, q_idx)); -ice_qvec_dis_irq (vsi, rx_ring, q_vector); -ice_fill_txq_meta (vsi, tx_ring, &txq_meta); err =ice_vsi_stop_tx_ring (vsi,ICE_NO_RESET ,0 , tx_ring, &txq_meta);if (err)
@@ -200,10 +198,11 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx)if (err)return err; } +ice_qvec_dis_irq (vsi, rx_ring, q_vector); + err =ice_vsi_ctrl_one_rx_ring (vsi, false, q_idx, true);if (err)return err; -ice_clean_rx_ring (rx_ring);ice_qvec_toggle_napi (vsi, q_vector, false);ice_qp_clean_rings (vsi, q_idx);
drivers/net/ethernet/mediatek/mtk_eth_soc.h +4 -0
@@ -528,6 +528,10 @@#define SGMII_SEND_AN_ERROR_EN BIT(11)#define SGMII_IF_MODE_MASK GENMASK(5, 1) +/* Register to reset SGMII design */ +#define SGMII_RESERVED_0 0x34 +#define SGMII_SW_RESET BIT(0) +/* Register to set SGMII speed, ANA RG_ Control Signals III*/ #define SGMSYS_ANA_RG_CS3 0x2028#define RG_PHY_SPEED_MASK (BIT(2) | BIT(3))
drivers/net/ethernet/mediatek/mtk_sgmii.c +16 -12
@@ -38,20 +38,16 @@ static int mtk_pcs_config(struct phylink_pcs *pcs, unsigned int mode,const unsigned long *advertising, bool permit_pause_to_mac) { + bool mode_changed = false, changed, use_an;struct mtk_pcs *mpcs =pcs_to_mtk_pcs (pcs);unsigned int rgc3, sgm_mode, bmcr;int advertise, link_timer; -bool changed, use_an; advertise =phylink_mii_c22_pcs_encode_advertisement (interface, advertising);if (advertise <0 )return advertise; - link_timer =phylink_get_link_timer_ns (interface); -if (link_timer <0 ) -return link_timer; -/* Clearing IF_MODE_BIT0 switches the PCS to BASE-X mode, and * we assume that fixes it's speed at bitrate = line rate (in * other words, 1000Mbps or 2500Mbps).
@@ -77,17 +73,24 @@ static int mtk_pcs_config(struct phylink_pcs *pcs, unsigned int mode, }if (use_an) { -/* FIXME: Do we need to set AN_RESTART here? */ - bmcr =SGMII_AN_RESTART |SGMII_AN_ENABLE ; + bmcr =SGMII_AN_ENABLE ; }else { bmcr =0 ; }if (mpcs->interface != interface) { + link_timer =phylink_get_link_timer_ns (interface); +if (link_timer <0 ) +return link_timer; +/* PHYA power down */ regmap_update_bits (mpcs->regmap,SGMSYS_QPHY_PWR_STATE_CTRL ,SGMII_PHYA_PWD ,SGMII_PHYA_PWD ); +/* Reset SGMII PCS state */ +regmap_update_bits (mpcs->regmap,SGMII_RESERVED_0 , +SGMII_SW_RESET ,SGMII_SW_RESET ); +if (interface ==PHY_INTERFACE_MODE_2500BASEX ) rgc3 =RG_PHY_SPEED_3_125G ;else
@@ -97,16 +100,17 @@ static int mtk_pcs_config(struct phylink_pcs *pcs, unsigned int mode,regmap_update_bits (mpcs->regmap, mpcs->ana_rgc3,RG_PHY_SPEED_3_125G , rgc3); +/* Setup the link timer */ +regmap_write (mpcs->regmap,SGMSYS_PCS_LINK_TIMER , link_timer /2 /8 ); + mpcs->interface = interface; + mode_changed = true; }/* Update the advertisement, noting whether it has changed */ regmap_update_bits_check (mpcs->regmap,SGMSYS_PCS_ADVERTISE ,SGMII_ADVERTISE , advertise, &changed); -/* Setup the link timer and QPHY power up inside SGMIISYS */ -regmap_write (mpcs->regmap,SGMSYS_PCS_LINK_TIMER , link_timer /2 /8 ); -/* Update the sgmsys mode register */ regmap_update_bits(mpcs->regmap, SGMSYS_SGMII_MODE, SGMII_REMOTE_FAULT_DIS | SGMII_SPEED_DUPLEX_AN |
@@ -114,7 +118,7 @@ static int mtk_pcs_config(struct phylink_pcs *pcs, unsigned int mode,/* Update the BMCR */ regmap_update_bits (mpcs->regmap,SGMSYS_PCS_CONTROL_1 , -SGMII_AN_RESTART |SGMII_AN_ENABLE , bmcr); +SGMII_AN_ENABLE , bmcr);/* Release PHYA power down state * Only removing bit SGMII_PHYA_PWD isn't enough.
@@ -128,7 +132,7 @@ static int mtk_pcs_config(struct phylink_pcs *pcs, unsigned int mode,usleep_range (50 ,100 );regmap_write (mpcs->regmap,SGMSYS_QPHY_PWR_STATE_CTRL ,0 ); -return changed; +return changed || mode_changed; }static void mtk_pcs_restart_an (struct phylink_pcs *pcs)
drivers/net/ethernet/mellanox/mlx5/core/en.h +0 -1
@@ -313,7 +313,6 @@ struct mlx5e_params { } channel; } mqprio;bool rx_cqe_compress_def; -bool tunneled_offload_en;struct dim_cq_moder rx_cq_moderation;struct dim_cq_moder tx_cq_moderation;struct mlx5e_packet_merge_param packet_merge;
drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c +1 -1
@@ -89,8 +89,8 @@ struct mlx5e_macsec_rx_sc { };struct mlx5e_macsec_umr { +u8 __aligned(64) ctx[MLX5_ST_SZ_BYTES (macsec_aso)];dma_addr_t dma_addr; -u8 ctx[MLX5_ST_SZ_BYTES (macsec_aso)];u32 mkey; };
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +1 -3
@@ -4923,8 +4923,6 @@ void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16/* TX inline */ mlx5_query_min_inline (mdev, ¶ms->tx_min_inline_mode); - params->tunneled_offload_en =mlx5_tunnel_inner_ft_supported (mdev); -/* AF_XDP */ params->xsk = xsk;
@@ -5223,7 +5221,7 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv) } features =MLX5E_RX_RES_FEATURE_PTP ; -if (priv->channels.params.tunneled_offload_en) +if (mlx5_tunnel_inner_ft_supported (mdev)) features |=MLX5E_RX_RES_FEATURE_INNER_FT ; err = mlx5e_rx_res_init(priv->rx_res, priv->mdev, features, priv->max_nch, priv->drop_rq.rqn,
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +0 -1
@@ -752,7 +752,6 @@ static void mlx5e_build_rep_params(struct net_device *netdev)mlx5e_set_rx_cq_mode_params (params, cq_period_mode); params->mqprio.num_tc =1 ; - params->tunneled_offload_en = false;if (rep->vport !=MLX5_VPORT_UPLINK ) params->vlan_strip_disable = true;
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +11 -0
@@ -4240,6 +4240,7 @@ int mlx5e_set_fwd_to_int_port_actions(struct mlx5e_priv *priv, esw_attr->dest_int_port = dest_int_port; esw_attr->dests[out_index].flags |=MLX5_ESW_DEST_CHAIN_WITH_SRC_PORT_CHANGE ; + esw_attr->split_count = out_index;/* Forward to root fdb for matching against the new source vport */ attr->dest_chain =0 ;
@@ -5373,6 +5374,16 @@ int mlx5e_tc_esw_init(struct mlx5_rep_uplink_priv *uplink_priv)void mlx5e_tc_esw_cleanup (struct mlx5_rep_uplink_priv *uplink_priv) { +struct mlx5e_rep_priv *rpriv; +struct mlx5_eswitch *esw; +struct mlx5e_priv *priv; + + rpriv = container_of(uplink_priv, struct mlx5e_rep_priv, uplink_priv); + priv =netdev_priv (rpriv->netdev); + esw = priv->mdev->priv.eswitch; +
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/main.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c +17 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +14 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qed/qed_dev.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/renesas/ravb_main.c +10 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/renesas/rswitch.c +39 -35
74 lines not on this page · raw message
drivers/scsi/mpi3mr/mpi3mr_fw.c +49 -22
71 lines not on this page · raw message
drivers/scsi/mpt3sas/mpt3sas_transport.c +12 -2
Lines of this file are not shown. View the raw message.
drivers/virt/coco/sev-guest/sev-guest.c +78 -50
128 lines not on this page · raw message
fs/cifs/dfs.c +45 -22
67 lines not on this page · raw message
fs/cifs/dfs_cache.c +0 -140
140 lines not on this page · raw message
net/mptcp/protocol.c +32 -32
64 lines not on this page · raw message
net/mptcp/subflow.c +42 -86
128 lines not on this page · raw message
sound/soc/intel/common/soc-acpi-intel-adl-match.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/amd-pstate/Makefile +9 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/devlink_port_split.py +31 -5
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.