* [PATCH 6.1 000/149] 6.1.46-rc1 review
@ 2023-08-13 21:17 Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 001/149] gcc-plugins: Reorganize gimple includes for GCC 13 Greg Kroah-Hartman
` (161 more replies)
0 siblings, 162 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, linux-kernel, torvalds, akpm, linux,
shuah, patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor
This is the start of the stable review cycle for the 6.1.46 release.
There are 149 patches in this series, all will be posted as a response
to this one. If anyone has any issues with these being applied, please
let me know.
Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Linux 6.1.46-rc1
Alex Deucher <alexander.deucher@amd.com>
drm/amd/pm/smu7: move variables to where they are used
Eric Dumazet <edumazet@google.com>
sch_netem: fix issues in netem_change() vs get_dist_table()
Masahiro Yamada <masahiroy@kernel.org>
alpha: remove __init annotation from exported page_is_ram()
Simon Trimmer <simont@opensource.cirrus.com>
ACPI: scan: Create platform device for CS35L56
David Xu <xuwd1@hotmail.com>
platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551
Nilesh Javali <njavali@marvell.com>
scsi: qedf: Fix firmware halt over suspend and resume
Nilesh Javali <njavali@marvell.com>
scsi: qedi: Fix firmware halt over suspend and resume
Karan Tilak Kumar <kartilak@cisco.com>
scsi: fnic: Replace return codes in fnic_clean_pending_aborts()
Zhu Wang <wangzhu9@huawei.com>
scsi: core: Fix possible memory leak if device_add() fails
Zhu Wang <wangzhu9@huawei.com>
scsi: snic: Fix possible memory leak if device_add() fails
Alexandra Diupina <adiupina@astralinux.ru>
scsi: 53c700: Check that command slot is not NULL
Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
scsi: ufs: renesas: Fix private allocation
Michael Kelley <mikelley@microsoft.com>
scsi: storvsc: Fix handling of virtual Fibre Channel timeouts
Tony Battersby <tonyb@cybernetics.com>
scsi: core: Fix legacy /proc parsing buffer overflow
Pablo Neira Ayuso <pablo@netfilter.org>
netfilter: nf_tables: report use refcount overflow
Ming Lei <ming.lei@redhat.com>
nvme-rdma: fix potential unbalanced freeze & unfreeze
Ming Lei <ming.lei@redhat.com>
nvme-tcp: fix potential unbalanced freeze & unfreeze
Josef Bacik <josef@toxicpanda.com>
btrfs: set cache_block_group_error if we find an error
Qu Wenruo <wqu@suse.com>
btrfs: reject invalid reloc tree root keys with stack dump
Qu Wenruo <wqu@suse.com>
btrfs: exit gracefully if reloc roots don't match
Christoph Hellwig <hch@lst.de>
btrfs: properly clear end of the unreserved range in cow_file_range
Christoph Hellwig <hch@lst.de>
btrfs: don't stop integrity writeback too early
Josef Bacik <josef@toxicpanda.com>
btrfs: wait for actual caching progress during allocation
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
gpio: sim: mark the GPIO chip as a one that can sleep
William Breathitt Gray <william.gray@linaro.org>
gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent
Nick Child <nnac123@linux.ibm.com>
ibmvnic: Ensure login failure recovery is safe from other resets
Nick Child <nnac123@linux.ibm.com>
ibmvnic: Do partial reset on login failure
Nick Child <nnac123@linux.ibm.com>
ibmvnic: Handle DMA unmapping of login buffs in release functions
Nick Child <nnac123@linux.ibm.com>
ibmvnic: Unmap DMA login rsp buffer on send login fail
Nick Child <nnac123@linux.ibm.com>
ibmvnic: Enforce stronger sanity checks on login response
Moshe Shemesh <moshe@nvidia.com>
net/mlx5: Reload auxiliary devices in pci error handlers
Moshe Shemesh <moshe@nvidia.com>
net/mlx5: Skip clock update work when device is in error state
Shay Drory <shayd@nvidia.com>
net/mlx5: LAG, Check correct bucket when modifying LAG
Daniel Jurgens <danielj@nvidia.com>
net/mlx5: Allow 0 for total host VFs
Zhang Jianhua <chris.zjh@huawei.com>
dmaengine: owl-dma: Modify mismatched function name
Christophe JAILLET <christophe.jaillet@wanadoo.fr>
dmaengine: mcf-edma: Fix a potential un-allocated memory access
Hao Chen <chenhao418@huawei.com>
net: hns3: fix strscpy causing content truncation issue
Ido Schimmel <idosch@nvidia.com>
nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID
Ido Schimmel <idosch@nvidia.com>
nexthop: Make nexthop bucket dump more efficient
Ido Schimmel <idosch@nvidia.com>
nexthop: Fix infinite nexthop dump when using maximum nexthop ID
Yonglong Liu <liuyonglong@huawei.com>
net: hns3: fix deadlock issue when externel_lb and reset are executed together
Jie Wang <wangjie125@huawei.com>
net: hns3: add wait until mac link down
Jie Wang <wangjie125@huawei.com>
net: hns3: refactor hclge_mac_link_status_wait for interface reuse
Vladimir Oltean <vladimir.oltean@nxp.com>
net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove
Li Yang <leoyang.li@nxp.com>
net: phy: at803x: remove set/get wol callbacks for AR8032
Jonas Gorski <jonas.gorski@bisdn.de>
net: marvell: prestera: fix handling IPv4 routes with nhid
Jakub Kicinski <kuba@kernel.org>
net: tls: avoid discarding data on record close
Michael Guralnik <michaelgur@nvidia.com>
RDMA/umem: Set iova in ODP flow
Felix Fietkau <nbd@nbd.name>
wifi: cfg80211: fix sband iftype data lookup for AP_VLAN
Daniel Stone <daniels@collabora.com>
drm/rockchip: Don't spam logs in atomic check
Douglas Miller <doug.miller@cornelisnetworks.com>
IB/hfi1: Fix possible panic during hotplug remove
Piotr Gardocki <piotrx.gardocki@intel.com>
iavf: fix potential races for FDIR filters
Fedor Pchelkin <pchelkin@ispras.ru>
drivers: vxlan: vnifilter: free percpu vni stats on error path
Andrew Kanner <andrew.kanner@gmail.com>
drivers: net: prevent tun_build_skb() to exceed the packet size limit
Eric Dumazet <edumazet@google.com>
dccp: fix data-race around dp->dccps_mss_cache
Ziyang Xuan <william.xuanziyang@huawei.com>
bonding: Fix incorrect deletion of ETH_P_8021AD protocol vid from slaves
Magnus Karlsson <magnus.karlsson@intel.com>
xsk: fix refcount underflow in error path
Florian Westphal <fw@strlen.de>
tunnels: fix kasan splat when generating ipv4 pmtu error
Eric Dumazet <edumazet@google.com>
tcp: add missing family to tcp_set_ca_state() tracepoint
Gerd Bayer <gbayer@linux.ibm.com>
net/smc: Use correct buffer sizes when switching between TCP and SMC
Eric Dumazet <edumazet@google.com>
net/packet: annotate data-races around tp->status
Xiang Yang <xiangyang3@huawei.com>
mptcp: fix the incorrect judgment for msk->cb_flags
Eric Dumazet <edumazet@google.com>
macsec: use DEV_STATS_INC()
Nathan Chancellor <nathan@kernel.org>
mISDN: Update parameter type of dsp_cmx_send()
Xu Kuohai <xukuohai@huawei.com>
bpf, sockmap: Fix bug that strp_done cannot be called
Xu Kuohai <xukuohai@huawei.com>
bpf, sockmap: Fix map type error in sock_map_del_link
Andrew Kanner <andrew.kanner@gmail.com>
net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail()
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: tc_flower: Relax success criterion
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: Switch off timeout
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: Skip test when no interfaces are specified
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: hw_stats_l3_gre: Skip when using veth pairs
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: ethtool_extended_state: Skip when using veth pairs
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: ethtool: Skip when using veth pairs
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: Add a helper to skip test when using veth pairs
Mark Brown <broonie@kernel.org>
selftests/rseq: Fix build with undefined __weak
Neil Armstrong <neil.armstrong@linaro.org>
interconnect: qcom: sm8450: add enable_mask for bcm nodes
Mike Tipton <mdtipton@codeaurora.org>
interconnect: qcom: Add support for mask-based BCMs
Milan Zamazal <mzamazal@redhat.com>
iio: core: Prevent invalid memory access when there is no parent
Florian Westphal <fw@strlen.de>
netfilter: nf_tables: don't skip expired elements during walk
Karol Herbst <kherbst@redhat.com>
drm/nouveau/disp: Revert a NULL check inside nouveau_connector_get_modes
Arnd Bergmann <arnd@arndb.de>
x86: Move gds_ucode_mitigated() declaration to header
Arnd Bergmann <arnd@arndb.de>
x86/speculation: Add cpu_show_gds() prototype
Borislav Petkov (AMD) <bp@alien8.de>
x86/sev: Do not try to parse for the CC blob on non-AMD hardware
Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
x86/mm: Fix VDSO and VVAR placement on 5-level paging machines
Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405
Nick Desaulniers <ndesaulniers@google.com>
x86/srso: Fix build breakage with the LLVM linker
RD Babiera <rdbabiera@google.com>
usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment
Badhri Jagan Sridharan <badhri@google.com>
usb: typec: tcpm: Fix response to vsafe0V event
Prashanth K <quic_prashk@quicinc.com>
usb: common: usb-conn-gpio: Prevent bailing out if initial role is none
Alan Stern <stern@rowland.harvard.edu>
USB: Gadget: core: Help prevent panic during UVC unconfigure
Elson Roy Serrao <quic_eserrao@quicinc.com>
usb: dwc3: Properly handle processing of pending events
Alan Stern <stern@rowland.harvard.edu>
usb-storage: alauda: Fix uninit-value in alauda_check_media()
Ricky WU <ricky_wu@realtek.com>
misc: rtsx: judge ASPM Mode to set PETXCFG Reg
Qi Zheng <zhengqi.arch@bytedance.com>
binder: fix memory leak in binder_init()
Alvin Šipraga <alsi@bang-olufsen.dk>
iio: adc: ina2xx: avoid NULL pointer dereference on OF device match
Alisa Roman <alisa.roman@analog.com>
iio: adc: ad7192: Fix ac excitation feature
Dan Carpenter <dan.carpenter@linaro.org>
iio: frequency: admv1013: propagate errors from regulator_get_voltage()
Yiyuan Guo <yguoaz@gmail.com>
iio: cros_ec: Fix the allocation size for cros_ec_command
Aleksa Sarai <cyphar@cyphar.com>
io_uring: correct check for O_TMPFILE
Aurabindo Pillai <aurabindo.pillai@amd.com>
drm/amd/display: trigger timing sync only if TG is running
Alex Deucher <alexander.deucher@amd.com>
drm/amd/display: fix the build when DRM_AMD_DC_DCN is not set
Alvin Lee <Alvin.Lee2@amd.com>
drm/amd/display: Retain phantom plane/stream if validation fails
Alvin Lee <Alvin.Lee2@amd.com>
drm/amd/display: Disable phantom OTG after enable for plane disable
Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
drm/amd/display: Use update plane and stream routine for DCN32x
Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
drm/amd/display: Avoid ABM when ODM combine is enabled for eDP
Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
drm/amd/display: Update OTG instance in the commit stream
Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
drm/amd/display: Handle seamless boot stream
Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
drm/amd/display: Add function for validate and update new stream
Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
drm/amd/display: Handle virtual hardware detect
Evan Quan <evan.quan@amd.com>
drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuation
Evan Quan <evan.quan@amd.com>
drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings
Evan Quan <evan.quan@amd.com>
drm/amd/pm: expose swctf threshold setting for legacy powerplay
Evan Quan <evan.quan@amd.com>
drm/amd/pm: fulfill swsmu peak profiling mode shader/memory clock settings
Ryusuke Konishi <konishi.ryusuke@gmail.com>
nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput
Colin Ian King <colin.i.king@gmail.com>
radix tree test suite: fix incorrect allocation size for pthreads
Tao Ren <rentao.bupt@gmail.com>
hwmon: (pmbus/bel-pfe) Enable PMBUS_SKIP_STATUS_CHECK for pfe1100
Maulik Shah <quic_mkshah@quicinc.com>
cpuidle: dt_idle_genpd: Add helper function to remove genpd topology
Peichen Huang <peichen.huang@amd.com>
drm/amd/display: limit DPIA link rate to HBR3
Mario Limonciello <mario.limonciello@amd.com>
drm/amd: Disable S/G for APUs when 64GB or more host memory
Alex Deucher <alexander.deucher@amd.com>
drm/amdgpu: add S/G display parameter
Melissa Wen <mwen@igalia.com>
drm/amd/display: check attr flag before set cursor degamma on DCN3+
Alex Deucher <alexander.deucher@amd.com>
drm/amdgpu: fix possible UAF in amdgpu_cs_pass1()
Boris Brezillon <boris.brezillon@collabora.com>
drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap()
Lyude Paul <lyude@redhat.com>
drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issues
Karol Herbst <kherbst@redhat.com>
drm/nouveau/gr: enable memory loads on helper invocation on all channels
August Wikerfors <git@augustwikerfors.se>
nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G
Torsten Duwe <duwe@suse.de>
riscv/kexec: handle R_RISCV_CALL_PLT relocation type
Andrea Parri <parri.andrea@gmail.com>
riscv,mmio: Fix readX()-to-delay() ordering
Torsten Duwe <duwe@suse.de>
riscv/kexec: load initrd high in available memory
Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>
net: mana: Fix MANA VF unload when hardware is unresponsive
Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
dmaengine: pl330: Return DMA_PAUSED when transaction is paused
Paolo Abeni <pabeni@redhat.com>
mptcp: fix disconnect vs accept race
Paolo Abeni <pabeni@redhat.com>
mptcp: avoid bogus reset on fallback close
Andrea Claudi <aclaudi@redhat.com>
selftests: mptcp: join: fix 'implicit EP' test
Andrea Claudi <aclaudi@redhat.com>
selftests: mptcp: join: fix 'delete and re-add' test
Maciej Żenczykowski <maze@google.com>
ipv6: adjust ndisc_is_useropt() to also return true for PIO
Sergei Antonov <saproj@gmail.com>
mmc: moxart: read scr register without changing byte order
Jason A. Donenfeld <Jason@zx2c4.com>
wireguard: allowedips: expand maximum node depth
Ido Schimmel <idosch@nvidia.com>
selftests: forwarding: Set default IPv6 traceroute utility
Ping-Ke Shih <pkshih@realtek.com>
wifi: rtw89: fix 8852AE disconnection caused by RX full flags
Keith Yeo <keithyjy@gmail.com>
wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems()
Paolo Bonzini <pbonzini@redhat.com>
KVM: SEV: only access GHCB fields once
Paolo Bonzini <pbonzini@redhat.com>
KVM: SEV: snapshot the GHCB before accessing it
Namjae Jeon <linkinjeon@kernel.org>
ksmbd: fix wrong next length validation of ea buffer in smb2_set_ea()
Long Li <leo.lilong@huawei.com>
ksmbd: validate command request size
Mario Limonciello <mario.limonciello@amd.com>
tpm: Add a helper for checking hwrng enabled
Mario Limonciello <mario.limonciello@amd.com>
tpm: Disable RNG for all AMD fTPMs
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Revert "loongarch/cpu: Switch to arch_cpu_finalize_init()"
Kees Cook <keescook@chromium.org>
gcc-plugins: Reorganize gimple includes for GCC 13
-------------
Diffstat:
Makefile | 4 +-
arch/alpha/kernel/setup.c | 3 +-
arch/loongarch/Kconfig | 1 -
arch/loongarch/kernel/setup.c | 6 -
arch/riscv/include/asm/mmio.h | 16 +-
arch/riscv/kernel/elf_kexec.c | 3 +-
arch/x86/boot/compressed/idt_64.c | 9 +-
arch/x86/boot/compressed/sev.c | 37 +++-
arch/x86/entry/vdso/vma.c | 4 +-
arch/x86/include/asm/processor.h | 2 +
arch/x86/kernel/cpu/amd.c | 1 +
arch/x86/kernel/vmlinux.lds.S | 12 +-
arch/x86/kvm/svm/sev.c | 94 +++++----
arch/x86/kvm/svm/svm.h | 26 +++
arch/x86/kvm/x86.c | 2 -
drivers/acpi/scan.c | 1 +
drivers/android/binder.c | 1 +
drivers/android/binder_alloc.c | 6 +
drivers/android/binder_alloc.h | 1 +
drivers/char/tpm/tpm-chip.c | 83 ++------
drivers/char/tpm/tpm_crb.c | 30 +++
drivers/cpuidle/dt_idle_genpd.c | 24 +++
drivers/cpuidle/dt_idle_genpd.h | 7 +
drivers/dma/mcf-edma.c | 13 +-
drivers/dma/owl-dma.c | 2 +-
drivers/dma/pl330.c | 18 +-
drivers/gpio/gpio-sim.c | 1 +
drivers/gpio/gpio-ws16c48.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 5 +
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 +++
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 11 +
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +
drivers/gpu/drm/amd/display/dc/core/dc.c | 74 ++++++-
drivers/gpu/drm/amd/display/dc/core/dc_link.c | 5 +
drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 234 ++++++++++++++++++++-
drivers/gpu/drm/amd/display/dc/dc.h | 6 +
.../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 6 +
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 7 +-
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c | 8 +
.../gpu/drm/amd/display/dc/dcn32/dcn32_resource.c | 22 ++
.../gpu/drm/amd/display/dc/dcn32/dcn32_resource.h | 3 +
.../drm/amd/display/dc/dcn321/dcn321_resource.c | 1 +
drivers/gpu/drm/amd/display/dc/inc/core_types.h | 1 +
.../drm/amd/display/dc/inc/hw/timing_generator.h | 1 +
drivers/gpu/drm/amd/include/kgd_pp_interface.h | 2 +
drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 2 +
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 58 ++++-
.../drm/amd/pm/powerplay/hwmgr/hardwaremanager.c | 4 +-
.../gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c | 16 +-
.../gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 80 +++++--
.../gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c | 16 +-
.../gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c | 27 +--
.../gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 41 +++-
.../gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 26 +++
.../gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 24 +--
drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 4 +
drivers/gpu/drm/amd/pm/powerplay/inc/power_state.h | 1 +
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 42 ++++
drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 2 +
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 9 +-
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 9 +-
drivers/gpu/drm/drm_gem_shmem_helper.c | 6 +
drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 48 ++++-
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h | 1 +
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c | 4 +-
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.c | 10 +
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.c | 1 +
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.c | 1 +
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c | 1 +
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 17 +-
drivers/hwmon/pmbus/bel-pfe.c | 16 +-
drivers/iio/adc/ad7192.c | 16 +-
drivers/iio/adc/ina2xx-adc.c | 9 +-
.../common/cros_ec_sensors/cros_ec_sensors_core.c | 2 +-
drivers/iio/frequency/admv1013.c | 5 +-
drivers/iio/industrialio-core.c | 5 +-
drivers/infiniband/core/umem.c | 3 +-
drivers/infiniband/hw/hfi1/chip.c | 1 +
drivers/interconnect/qcom/bcm-voter.c | 5 +
drivers/interconnect/qcom/icc-rpmh.h | 2 +
drivers/interconnect/qcom/sm8450.c | 9 +
drivers/isdn/mISDN/dsp.h | 2 +-
drivers/isdn/mISDN/dsp_cmx.c | 2 +-
drivers/isdn/mISDN/dsp_core.c | 2 +-
drivers/misc/cardreader/rts5227.c | 2 +-
drivers/misc/cardreader/rts5228.c | 18 --
drivers/misc/cardreader/rts5249.c | 3 +-
drivers/misc/cardreader/rts5260.c | 18 --
drivers/misc/cardreader/rts5261.c | 18 --
drivers/misc/cardreader/rtsx_pcr.c | 5 +-
drivers/mmc/host/moxart-mmc.c | 8 +-
drivers/net/bonding/bond_main.c | 4 +-
drivers/net/dsa/ocelot/felix.c | 2 +
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 4 +-
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 14 +-
.../ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | 4 +-
.../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 24 ++-
drivers/net/ethernet/ibm/ibmvnic.c | 112 ++++++++--
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 5 +-
drivers/net/ethernet/intel/iavf/iavf_fdir.c | 11 +-
.../ethernet/marvell/prestera/prestera_router.c | 14 +-
.../net/ethernet/mellanox/mlx5/core/lag/port_sel.c | 2 +-
.../net/ethernet/mellanox/mlx5/core/lib/clock.c | 5 +
drivers/net/ethernet/mellanox/mlx5/core/main.c | 2 +-
drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 +-
drivers/net/ethernet/microsoft/mana/mana_en.c | 37 +++-
drivers/net/macsec.c | 28 +--
drivers/net/phy/at803x.c | 2 -
drivers/net/tun.c | 2 +-
drivers/net/vxlan/vxlan_vnifilter.c | 11 +-
drivers/net/wireguard/allowedips.c | 8 +-
drivers/net/wireguard/selftest/allowedips.c | 16 +-
drivers/net/wireless/realtek/rtw89/mac.c | 2 +-
drivers/nvme/host/pci.c | 3 +-
drivers/nvme/host/rdma.c | 3 +-
drivers/nvme/host/tcp.c | 3 +-
drivers/platform/x86/serial-multi-instantiate.c | 35 ++-
drivers/scsi/53c700.c | 2 +-
drivers/scsi/fnic/fnic.h | 2 +-
drivers/scsi/fnic/fnic_scsi.c | 6 +-
drivers/scsi/qedf/qedf_main.c | 18 ++
drivers/scsi/qedi/qedi_main.c | 18 ++
drivers/scsi/raid_class.c | 1 +
drivers/scsi/scsi_proc.c | 30 +--
drivers/scsi/snic/snic_disc.c | 1 +
drivers/scsi/storvsc_drv.c | 4 -
drivers/ufs/host/ufs-renesas.c | 2 +-
drivers/usb/common/usb-conn-gpio.c | 6 +-
drivers/usb/dwc3/gadget.c | 9 +-
drivers/usb/gadget/udc/core.c | 9 +
drivers/usb/storage/alauda.c | 12 +-
drivers/usb/typec/altmodes/displayport.c | 18 +-
drivers/usb/typec/tcpm/tcpm.c | 7 +
fs/btrfs/block-group.c | 17 +-
fs/btrfs/block-group.h | 2 +
fs/btrfs/disk-io.c | 3 +-
fs/btrfs/extent-tree.c | 5 +-
fs/btrfs/extent_io.c | 7 +-
fs/btrfs/inode.c | 10 +-
fs/btrfs/relocation.c | 45 +++-
fs/btrfs/tree-checker.c | 14 ++
fs/nilfs2/inode.c | 8 +
fs/nilfs2/segment.c | 2 +
fs/nilfs2/the_nilfs.h | 2 +
fs/smb/server/smb2misc.c | 10 +-
fs/smb/server/smb2pdu.c | 9 +-
include/linux/cpu.h | 2 +
include/linux/skmsg.h | 1 +
include/linux/tpm.h | 1 +
include/net/cfg80211.h | 3 +
include/net/netfilter/nf_tables.h | 31 ++-
include/trace/events/tcp.h | 5 +-
io_uring/openclose.c | 6 +-
net/core/filter.c | 6 -
net/core/skmsg.c | 10 +-
net/core/sock_map.c | 10 +-
net/dccp/output.c | 2 +-
net/dccp/proto.c | 10 +-
net/ipv4/ip_tunnel_core.c | 2 +-
net/ipv4/nexthop.c | 28 +--
net/ipv6/ndisc.c | 3 +-
net/mptcp/protocol.c | 4 +-
net/mptcp/protocol.h | 1 -
net/mptcp/subflow.c | 58 ++---
net/netfilter/nf_tables_api.c | 167 +++++++++------
net/netfilter/nft_flow_offload.c | 6 +-
net/netfilter/nft_immediate.c | 8 +-
net/netfilter/nft_objref.c | 8 +-
net/netfilter/nft_set_hash.c | 2 -
net/netfilter/nft_set_pipapo.c | 18 +-
net/netfilter/nft_set_rbtree.c | 2 -
net/packet/af_packet.c | 16 +-
net/sched/sch_netem.c | 59 +++---
net/smc/af_smc.c | 73 +++++--
net/tls/tls_device.c | 64 +++---
net/wireless/nl80211.c | 5 +-
net/xdp/xsk.c | 1 +
scripts/gcc-plugins/gcc-common.h | 4 +-
tools/testing/radix-tree/regression1.c | 2 +-
tools/testing/selftests/net/fib_nexthops.sh | 10 +
tools/testing/selftests/net/forwarding/ethtool.sh | 2 +
.../net/forwarding/ethtool_extended_state.sh | 2 +
.../selftests/net/forwarding/hw_stats_l3_gre.sh | 2 +
.../net/forwarding/ip6_forward_instats_vrf.sh | 2 +
tools/testing/selftests/net/forwarding/lib.sh | 17 ++
tools/testing/selftests/net/forwarding/settings | 1 +
.../testing/selftests/net/forwarding/tc_flower.sh | 8 +-
tools/testing/selftests/net/mptcp/mptcp_join.sh | 6 +-
tools/testing/selftests/rseq/Makefile | 4 +-
tools/testing/selftests/rseq/rseq.c | 2 +
192 files changed, 1992 insertions(+), 745 deletions(-)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 001/149] gcc-plugins: Reorganize gimple includes for GCC 13
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 002/149] Revert "loongarch/cpu: Switch to arch_cpu_finalize_init()" Greg Kroah-Hartman
` (160 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Palmer Dabbelt, linux-hardening,
Kees Cook, Naresh Kamboju
From: Kees Cook <keescook@chromium.org>
commit e6a71160cc145e18ab45195abf89884112e02dfb upstream.
The gimple-iterator.h header must be included before gimple-fold.h
starting with GCC 13. Reorganize gimple headers to work for all GCC
versions.
Reported-by: Palmer Dabbelt <palmer@rivosinc.com>
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
Link: https://lore.kernel.org/all/20230113173033.4380-1-palmer@rivosinc.com/
Cc: linux-hardening@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: Naresh Kamboju <naresh.kamboju@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
scripts/gcc-plugins/gcc-common.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/scripts/gcc-plugins/gcc-common.h
+++ b/scripts/gcc-plugins/gcc-common.h
@@ -71,7 +71,9 @@
#include "varasm.h"
#include "stor-layout.h"
#include "internal-fn.h"
+#include "gimple.h"
#include "gimple-expr.h"
+#include "gimple-iterator.h"
#include "gimple-fold.h"
#include "context.h"
#include "tree-ssa-alias.h"
@@ -85,10 +87,8 @@
#include "tree-eh.h"
#include "stmt.h"
#include "gimplify.h"
-#include "gimple.h"
#include "tree-phinodes.h"
#include "tree-cfg.h"
-#include "gimple-iterator.h"
#include "gimple-ssa.h"
#include "ssa-iterators.h"
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 002/149] Revert "loongarch/cpu: Switch to arch_cpu_finalize_init()"
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 001/149] gcc-plugins: Reorganize gimple includes for GCC 13 Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 003/149] tpm: Disable RNG for all AMD fTPMs Greg Kroah-Hartman
` (159 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Guenter Roeck, Thomas Gleixner,
Daniel Sneddon
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This reverts commit 08e86d42e2c916e362d124e3bc6c824eb1862498 which is
commit 9841c423164787feb8f1442f922b7d80a70c82f1 upstream.
As Gunter reports:
Building loongarch:defconfig ... failed
--------------
Error log:
<stdin>:569:2: warning: #warning syscall fstat not implemented [-Wcpp]
arch/loongarch/kernel/setup.c: In function 'arch_cpu_finalize_init':
arch/loongarch/kernel/setup.c:86:9: error: implicit declaration of function 'alternative_instructions'
Actually introduced in v6.1.44 with commit 08e86d42e2c9 ("loongarch/cpu:
Switch to arch_cpu_finalize_init()"). Alternative instruction support
was only introduced for loongarch in v6.2 with commit 19e5eb15b00c
("LoongArch: Add alternative runtime patching mechanism").
So revert it from 6.1.y.
Reported-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/fcd7b764-9047-22ba-a040-41b6ff99959c@roeck-us.net
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Daniel Sneddon <daniel.sneddon@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/loongarch/Kconfig | 1 -
arch/loongarch/kernel/setup.c | 6 ------
2 files changed, 7 deletions(-)
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -10,7 +10,6 @@ config LOONGARCH
select ARCH_ENABLE_MEMORY_HOTPLUG
select ARCH_ENABLE_MEMORY_HOTREMOVE
select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
- select ARCH_HAS_CPU_FINALIZE_INIT
select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
select ARCH_HAS_PTE_SPECIAL
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
--- a/arch/loongarch/kernel/setup.c
+++ b/arch/loongarch/kernel/setup.c
@@ -12,7 +12,6 @@
*/
#include <linux/init.h>
#include <linux/acpi.h>
-#include <linux/cpu.h>
#include <linux/dmi.h>
#include <linux/efi.h>
#include <linux/export.h>
@@ -81,11 +80,6 @@ const char *get_system_type(void)
return "generic-loongson-machine";
}
-void __init arch_cpu_finalize_init(void)
-{
- alternative_instructions();
-}
-
static const char *dmi_string_parse(const struct dmi_header *dm, u8 s)
{
const u8 *bp = ((u8 *) dm) + dm->length;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 003/149] tpm: Disable RNG for all AMD fTPMs
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 001/149] gcc-plugins: Reorganize gimple includes for GCC 13 Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 002/149] Revert "loongarch/cpu: Switch to arch_cpu_finalize_init()" Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 004/149] tpm: Add a helper for checking hwrng enabled Greg Kroah-Hartman
` (158 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, daniil.stas, bitlord0xff,
Mario Limonciello, Jarkko Sakkinen
From: Mario Limonciello <mario.limonciello@amd.com>
commit 554b841d470338a3b1d6335b14ee1cd0c8f5d754 upstream.
The TPM RNG functionality is not necessary for entropy when the CPU
already supports the RDRAND instruction. The TPM RNG functionality
was previously disabled on a subset of AMD fTPM series, but reports
continue to show problems on some systems causing stutter root caused
to TPM RNG functionality.
Expand disabling TPM RNG use for all AMD fTPMs whether they have versions
that claim to have fixed or not. To accomplish this, move the detection
into part of the TPM CRB registration and add a flag indicating that
the TPM should opt-out of registration to hwrng.
Cc: stable@vger.kernel.org # 6.1.y+
Fixes: b006c439d58d ("hwrng: core - start hwrng kthread also for untrusted sources")
Fixes: f1324bbc4011 ("tpm: disable hwrng for fTPM on some AMD designs")
Reported-by: daniil.stas@posteo.net
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217719
Reported-by: bitlord0xff@gmail.com
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217212
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/char/tpm/tpm-chip.c | 68 +-------------------------------------------
drivers/char/tpm/tpm_crb.c | 30 +++++++++++++++++++
include/linux/tpm.h | 1
3 files changed, 33 insertions(+), 66 deletions(-)
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -507,70 +507,6 @@ static int tpm_add_legacy_sysfs(struct t
return 0;
}
-/*
- * Some AMD fTPM versions may cause stutter
- * https://www.amd.com/en/support/kb/faq/pa-410
- *
- * Fixes are available in two series of fTPM firmware:
- * 6.x.y.z series: 6.0.18.6 +
- * 3.x.y.z series: 3.57.y.5 +
- */
-#ifdef CONFIG_X86
-static bool tpm_amd_is_rng_defective(struct tpm_chip *chip)
-{
- u32 val1, val2;
- u64 version;
- int ret;
-
- if (!(chip->flags & TPM_CHIP_FLAG_TPM2))
- return false;
-
- ret = tpm_request_locality(chip);
- if (ret)
- return false;
-
- ret = tpm2_get_tpm_pt(chip, TPM2_PT_MANUFACTURER, &val1, NULL);
- if (ret)
- goto release;
- if (val1 != 0x414D4400U /* AMD */) {
- ret = -ENODEV;
- goto release;
- }
- ret = tpm2_get_tpm_pt(chip, TPM2_PT_FIRMWARE_VERSION_1, &val1, NULL);
- if (ret)
- goto release;
- ret = tpm2_get_tpm_pt(chip, TPM2_PT_FIRMWARE_VERSION_2, &val2, NULL);
-
-release:
- tpm_relinquish_locality(chip);
-
- if (ret)
- return false;
-
- version = ((u64)val1 << 32) | val2;
- if ((version >> 48) == 6) {
- if (version >= 0x0006000000180006ULL)
- return false;
- } else if ((version >> 48) == 3) {
- if (version >= 0x0003005700000005ULL)
- return false;
- } else {
- return false;
- }
-
- dev_warn(&chip->dev,
- "AMD fTPM version 0x%llx causes system stutter; hwrng disabled\n",
- version);
-
- return true;
-}
-#else
-static inline bool tpm_amd_is_rng_defective(struct tpm_chip *chip)
-{
- return false;
-}
-#endif /* CONFIG_X86 */
-
static int tpm_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
{
struct tpm_chip *chip = container_of(rng, struct tpm_chip, hwrng);
@@ -585,7 +521,7 @@ static int tpm_hwrng_read(struct hwrng *
static int tpm_add_hwrng(struct tpm_chip *chip)
{
if (!IS_ENABLED(CONFIG_HW_RANDOM_TPM) || tpm_is_firmware_upgrade(chip) ||
- tpm_amd_is_rng_defective(chip))
+ chip->flags & TPM_CHIP_FLAG_HWRNG_DISABLED)
return 0;
snprintf(chip->hwrng_name, sizeof(chip->hwrng_name),
@@ -716,7 +652,7 @@ void tpm_chip_unregister(struct tpm_chip
{
tpm_del_legacy_sysfs(chip);
if (IS_ENABLED(CONFIG_HW_RANDOM_TPM) && !tpm_is_firmware_upgrade(chip) &&
- !tpm_amd_is_rng_defective(chip))
+ !(chip->flags & TPM_CHIP_FLAG_HWRNG_DISABLED))
hwrng_unregister(&chip->hwrng);
tpm_bios_log_teardown(chip);
if (chip->flags & TPM_CHIP_FLAG_TPM2 && !tpm_is_firmware_upgrade(chip))
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -463,6 +463,28 @@ static bool crb_req_canceled(struct tpm_
return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE;
}
+static int crb_check_flags(struct tpm_chip *chip)
+{
+ u32 val;
+ int ret;
+
+ ret = crb_request_locality(chip, 0);
+ if (ret)
+ return ret;
+
+ ret = tpm2_get_tpm_pt(chip, TPM2_PT_MANUFACTURER, &val, NULL);
+ if (ret)
+ goto release;
+
+ if (val == 0x414D4400U /* AMD */)
+ chip->flags |= TPM_CHIP_FLAG_HWRNG_DISABLED;
+
+release:
+ crb_relinquish_locality(chip, 0);
+
+ return ret;
+}
+
static const struct tpm_class_ops tpm_crb = {
.flags = TPM_OPS_AUTO_STARTUP,
.status = crb_status,
@@ -800,6 +822,14 @@ static int crb_acpi_add(struct acpi_devi
chip->acpi_dev_handle = device->handle;
chip->flags = TPM_CHIP_FLAG_TPM2;
+ rc = tpm_chip_bootstrap(chip);
+ if (rc)
+ goto out;
+
+ rc = crb_check_flags(chip);
+ if (rc)
+ goto out;
+
rc = tpm_chip_register(chip);
out:
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -282,6 +282,7 @@ enum tpm_chip_flags {
TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED = BIT(6),
TPM_CHIP_FLAG_FIRMWARE_UPGRADE = BIT(7),
TPM_CHIP_FLAG_SUSPENDED = BIT(8),
+ TPM_CHIP_FLAG_HWRNG_DISABLED = BIT(9),
};
#define to_tpm_chip(d) container_of(d, struct tpm_chip, dev)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 004/149] tpm: Add a helper for checking hwrng enabled
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (2 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 003/149] tpm: Disable RNG for all AMD fTPMs Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 005/149] ksmbd: validate command request size Greg Kroah-Hartman
` (157 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Mario Limonciello, Linus Torvalds
From: Mario Limonciello <mario.limonciello@amd.com>
commit cacc6e22932f373a91d7be55a9b992dc77f4c59b upstream.
The same checks are repeated in three places to decide whether to use
hwrng. Consolidate these into a helper.
Also this fixes a case that one of them was missing a check in the
cleanup path.
Fixes: 554b841d4703 ("tpm: Disable RNG for all AMD fTPMs")
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/char/tpm/tpm-chip.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -518,10 +518,20 @@ static int tpm_hwrng_read(struct hwrng *
return tpm_get_random(chip, data, max);
}
+static bool tpm_is_hwrng_enabled(struct tpm_chip *chip)
+{
+ if (!IS_ENABLED(CONFIG_HW_RANDOM_TPM))
+ return false;
+ if (tpm_is_firmware_upgrade(chip))
+ return false;
+ if (chip->flags & TPM_CHIP_FLAG_HWRNG_DISABLED)
+ return false;
+ return true;
+}
+
static int tpm_add_hwrng(struct tpm_chip *chip)
{
- if (!IS_ENABLED(CONFIG_HW_RANDOM_TPM) || tpm_is_firmware_upgrade(chip) ||
- chip->flags & TPM_CHIP_FLAG_HWRNG_DISABLED)
+ if (!tpm_is_hwrng_enabled(chip))
return 0;
snprintf(chip->hwrng_name, sizeof(chip->hwrng_name),
@@ -626,7 +636,7 @@ int tpm_chip_register(struct tpm_chip *c
return 0;
out_hwrng:
- if (IS_ENABLED(CONFIG_HW_RANDOM_TPM) && !tpm_is_firmware_upgrade(chip))
+ if (tpm_is_hwrng_enabled(chip))
hwrng_unregister(&chip->hwrng);
out_ppi:
tpm_bios_log_teardown(chip);
@@ -651,8 +661,7 @@ EXPORT_SYMBOL_GPL(tpm_chip_register);
void tpm_chip_unregister(struct tpm_chip *chip)
{
tpm_del_legacy_sysfs(chip);
- if (IS_ENABLED(CONFIG_HW_RANDOM_TPM) && !tpm_is_firmware_upgrade(chip) &&
- !(chip->flags & TPM_CHIP_FLAG_HWRNG_DISABLED))
+ if (tpm_is_hwrng_enabled(chip))
hwrng_unregister(&chip->hwrng);
tpm_bios_log_teardown(chip);
if (chip->flags & TPM_CHIP_FLAG_TPM2 && !tpm_is_firmware_upgrade(chip))
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 005/149] ksmbd: validate command request size
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (3 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 004/149] tpm: Add a helper for checking hwrng enabled Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 006/149] ksmbd: fix wrong next length validation of ea buffer in smb2_set_ea() Greg Kroah-Hartman
` (156 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Namjae Jeon, Long Li, Steve French
From: Long Li <leo.lilong@huawei.com>
commit 5aa4fda5aa9c2a5a7bac67b4a12b089ab81fee3c upstream.
In commit 2b9b8f3b68ed ("ksmbd: validate command payload size"), except
for SMB2_OPLOCK_BREAK_HE command, the request size of other commands
is not checked, it's not expected. Fix it by add check for request
size of other commands.
Cc: stable@vger.kernel.org
Fixes: 2b9b8f3b68ed ("ksmbd: validate command payload size")
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Long Li <leo.lilong@huawei.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/smb/server/smb2misc.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- a/fs/smb/server/smb2misc.c
+++ b/fs/smb/server/smb2misc.c
@@ -380,13 +380,13 @@ int ksmbd_smb2_check_message(struct ksmb
}
if (smb2_req_struct_sizes[command] != pdu->StructureSize2) {
- if (command == SMB2_OPLOCK_BREAK_HE &&
- le16_to_cpu(pdu->StructureSize2) != OP_BREAK_STRUCT_SIZE_20 &&
- le16_to_cpu(pdu->StructureSize2) != OP_BREAK_STRUCT_SIZE_21) {
+ if (!(command == SMB2_OPLOCK_BREAK_HE &&
+ (le16_to_cpu(pdu->StructureSize2) == OP_BREAK_STRUCT_SIZE_20 ||
+ le16_to_cpu(pdu->StructureSize2) == OP_BREAK_STRUCT_SIZE_21))) {
/* special case for SMB2.1 lease break message */
ksmbd_debug(SMB,
- "Illegal request size %d for oplock break\n",
- le16_to_cpu(pdu->StructureSize2));
+ "Illegal request size %u for command %d\n",
+ le16_to_cpu(pdu->StructureSize2), command);
return 1;
}
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 006/149] ksmbd: fix wrong next length validation of ea buffer in smb2_set_ea()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (4 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 005/149] ksmbd: validate command request size Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 007/149] KVM: SEV: snapshot the GHCB before accessing it Greg Kroah-Hartman
` (155 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Namjae Jeon, Steve French,
zdi-disclosures
From: Namjae Jeon <linkinjeon@kernel.org>
commit 79ed288cef201f1f212dfb934bcaac75572fb8f6 upstream.
There are multiple smb2_ea_info buffers in FILE_FULL_EA_INFORMATION request
from client. ksmbd find next smb2_ea_info using ->NextEntryOffset of
current smb2_ea_info. ksmbd need to validate buffer length Before
accessing the next ea. ksmbd should check buffer length using buf_len,
not next variable. next is the start offset of current ea that got from
previous ea.
Cc: stable@vger.kernel.org
Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-21598
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/smb/server/smb2pdu.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
--- a/fs/smb/server/smb2pdu.c
+++ b/fs/smb/server/smb2pdu.c
@@ -2340,9 +2340,16 @@ next:
break;
buf_len -= next;
eabuf = (struct smb2_ea_info *)((char *)eabuf + next);
- if (next < (u32)eabuf->EaNameLength + le16_to_cpu(eabuf->EaValueLength))
+ if (buf_len < sizeof(struct smb2_ea_info)) {
+ rc = -EINVAL;
break;
+ }
+ if (buf_len < sizeof(struct smb2_ea_info) + eabuf->EaNameLength +
+ le16_to_cpu(eabuf->EaValueLength)) {
+ rc = -EINVAL;
+ break;
+ }
} while (next != 0);
kfree(attr_name);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 007/149] KVM: SEV: snapshot the GHCB before accessing it
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (5 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 006/149] ksmbd: fix wrong next length validation of ea buffer in smb2_set_ea() Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 008/149] KVM: SEV: only access GHCB fields once Greg Kroah-Hartman
` (154 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
commit 4e15a0ddc3ff40e8ea84032213976ecf774d7f77 upstream.
Validation of the GHCB is susceptible to time-of-check/time-of-use vulnerabilities.
To avoid them, we would like to always snapshot the fields that are read in
sev_es_validate_vmgexit(), and not use the GHCB anymore after it returns.
This means:
- invoking sev_es_sync_from_ghcb() before any GHCB access, including before
sev_es_validate_vmgexit()
- snapshotting all fields including the valid bitmap and the sw_scratch field,
which are currently not caching anywhere.
The valid bitmap is the first thing to be copied out of the GHCB; then,
further accesses will use the copy in svm->sev_es.
Fixes: 291bd20d5d88 ("KVM: SVM: Add initial support for a VMGEXIT VMEXIT")
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/x86/kvm/svm/sev.c | 69 ++++++++++++++++++++++++-------------------------
arch/x86/kvm/svm/svm.h | 26 ++++++++++++++++++
2 files changed, 61 insertions(+), 34 deletions(-)
--- a/arch/x86/kvm/svm/sev.c
+++ b/arch/x86/kvm/svm/sev.c
@@ -2410,15 +2410,18 @@ static void sev_es_sync_from_ghcb(struct
*/
memset(vcpu->arch.regs, 0, sizeof(vcpu->arch.regs));
- vcpu->arch.regs[VCPU_REGS_RAX] = ghcb_get_rax_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RBX] = ghcb_get_rbx_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RCX] = ghcb_get_rcx_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RDX] = ghcb_get_rdx_if_valid(ghcb);
- vcpu->arch.regs[VCPU_REGS_RSI] = ghcb_get_rsi_if_valid(ghcb);
+ BUILD_BUG_ON(sizeof(svm->sev_es.valid_bitmap) != sizeof(ghcb->save.valid_bitmap));
+ memcpy(&svm->sev_es.valid_bitmap, &ghcb->save.valid_bitmap, sizeof(ghcb->save.valid_bitmap));
- svm->vmcb->save.cpl = ghcb_get_cpl_if_valid(ghcb);
+ vcpu->arch.regs[VCPU_REGS_RAX] = kvm_ghcb_get_rax_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RBX] = kvm_ghcb_get_rbx_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RCX] = kvm_ghcb_get_rcx_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RDX] = kvm_ghcb_get_rdx_if_valid(svm, ghcb);
+ vcpu->arch.regs[VCPU_REGS_RSI] = kvm_ghcb_get_rsi_if_valid(svm, ghcb);
- if (ghcb_xcr0_is_valid(ghcb)) {
+ svm->vmcb->save.cpl = kvm_ghcb_get_cpl_if_valid(svm, ghcb);
+
+ if (kvm_ghcb_xcr0_is_valid(svm)) {
vcpu->arch.xcr0 = ghcb_get_xcr0(ghcb);
kvm_update_cpuid_runtime(vcpu);
}
@@ -2429,6 +2432,7 @@ static void sev_es_sync_from_ghcb(struct
control->exit_code_hi = upper_32_bits(exit_code);
control->exit_info_1 = ghcb_get_sw_exit_info_1(ghcb);
control->exit_info_2 = ghcb_get_sw_exit_info_2(ghcb);
+ svm->sev_es.sw_scratch = kvm_ghcb_get_sw_scratch_if_valid(svm, ghcb);
/* Clear the valid entries fields */
memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap));
@@ -2457,56 +2461,56 @@ static int sev_es_validate_vmgexit(struc
reason = GHCB_ERR_MISSING_INPUT;
- if (!ghcb_sw_exit_code_is_valid(ghcb) ||
- !ghcb_sw_exit_info_1_is_valid(ghcb) ||
- !ghcb_sw_exit_info_2_is_valid(ghcb))
+ if (!kvm_ghcb_sw_exit_code_is_valid(svm) ||
+ !kvm_ghcb_sw_exit_info_1_is_valid(svm) ||
+ !kvm_ghcb_sw_exit_info_2_is_valid(svm))
goto vmgexit_err;
switch (ghcb_get_sw_exit_code(ghcb)) {
case SVM_EXIT_READ_DR7:
break;
case SVM_EXIT_WRITE_DR7:
- if (!ghcb_rax_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_RDTSC:
break;
case SVM_EXIT_RDPMC:
- if (!ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_CPUID:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
if (ghcb_get_rax(ghcb) == 0xd)
- if (!ghcb_xcr0_is_valid(ghcb))
+ if (!kvm_ghcb_xcr0_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_INVD:
break;
case SVM_EXIT_IOIO:
if (ghcb_get_sw_exit_info_1(ghcb) & SVM_IOIO_STR_MASK) {
- if (!ghcb_sw_scratch_is_valid(ghcb))
+ if (!kvm_ghcb_sw_scratch_is_valid(svm))
goto vmgexit_err;
} else {
if (!(ghcb_get_sw_exit_info_1(ghcb) & SVM_IOIO_TYPE_MASK))
- if (!ghcb_rax_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm))
goto vmgexit_err;
}
break;
case SVM_EXIT_MSR:
- if (!ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
if (ghcb_get_sw_exit_info_1(ghcb)) {
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rdx_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rdx_is_valid(svm))
goto vmgexit_err;
}
break;
case SVM_EXIT_VMMCALL:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_cpl_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_cpl_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_RDTSCP:
@@ -2514,19 +2518,19 @@ static int sev_es_validate_vmgexit(struc
case SVM_EXIT_WBINVD:
break;
case SVM_EXIT_MONITOR:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rcx_is_valid(ghcb) ||
- !ghcb_rdx_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rcx_is_valid(svm) ||
+ !kvm_ghcb_rdx_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_MWAIT:
- if (!ghcb_rax_is_valid(ghcb) ||
- !ghcb_rcx_is_valid(ghcb))
+ if (!kvm_ghcb_rax_is_valid(svm) ||
+ !kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
break;
case SVM_VMGEXIT_MMIO_READ:
case SVM_VMGEXIT_MMIO_WRITE:
- if (!ghcb_sw_scratch_is_valid(ghcb))
+ if (!kvm_ghcb_sw_scratch_is_valid(svm))
goto vmgexit_err;
break;
case SVM_VMGEXIT_NMI_COMPLETE:
@@ -2556,9 +2560,6 @@ vmgexit_err:
dump_ghcb(svm);
}
- /* Clear the valid entries fields */
- memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap));
-
ghcb_set_sw_exit_info_1(ghcb, 2);
ghcb_set_sw_exit_info_2(ghcb, reason);
@@ -2579,7 +2580,7 @@ void sev_es_unmap_ghcb(struct vcpu_svm *
*/
if (svm->sev_es.ghcb_sa_sync) {
kvm_write_guest(svm->vcpu.kvm,
- ghcb_get_sw_scratch(svm->sev_es.ghcb),
+ svm->sev_es.sw_scratch,
svm->sev_es.ghcb_sa,
svm->sev_es.ghcb_sa_len);
svm->sev_es.ghcb_sa_sync = false;
@@ -2630,7 +2631,7 @@ static int setup_vmgexit_scratch(struct
u64 scratch_gpa_beg, scratch_gpa_end;
void *scratch_va;
- scratch_gpa_beg = ghcb_get_sw_scratch(ghcb);
+ scratch_gpa_beg = svm->sev_es.sw_scratch;
if (!scratch_gpa_beg) {
pr_err("vmgexit: scratch gpa not provided\n");
goto e_scratch;
@@ -2846,11 +2847,11 @@ int sev_handle_vmgexit(struct kvm_vcpu *
exit_code = ghcb_get_sw_exit_code(ghcb);
+ sev_es_sync_from_ghcb(svm);
ret = sev_es_validate_vmgexit(svm);
if (ret)
return ret;
- sev_es_sync_from_ghcb(svm);
ghcb_set_sw_exit_info_1(ghcb, 0);
ghcb_set_sw_exit_info_2(ghcb, 0);
--- a/arch/x86/kvm/svm/svm.h
+++ b/arch/x86/kvm/svm/svm.h
@@ -196,10 +196,12 @@ struct vcpu_sev_es_state {
/* SEV-ES support */
struct sev_es_save_area *vmsa;
struct ghcb *ghcb;
+ u8 valid_bitmap[16];
struct kvm_host_map ghcb_map;
bool received_first_sipi;
/* SEV-ES scratch area support */
+ u64 sw_scratch;
void *ghcb_sa;
u32 ghcb_sa_len;
bool ghcb_sa_sync;
@@ -688,4 +690,28 @@ void sev_es_unmap_ghcb(struct vcpu_svm *
void __svm_sev_es_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
void __svm_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted);
+#define DEFINE_KVM_GHCB_ACCESSORS(field) \
+ static __always_inline bool kvm_ghcb_##field##_is_valid(const struct vcpu_svm *svm) \
+ { \
+ return test_bit(GHCB_BITMAP_IDX(field), \
+ (unsigned long *)&svm->sev_es.valid_bitmap); \
+ } \
+ \
+ static __always_inline u64 kvm_ghcb_get_##field##_if_valid(struct vcpu_svm *svm, struct ghcb *ghcb) \
+ { \
+ return kvm_ghcb_##field##_is_valid(svm) ? ghcb->save.field : 0; \
+ } \
+
+DEFINE_KVM_GHCB_ACCESSORS(cpl)
+DEFINE_KVM_GHCB_ACCESSORS(rax)
+DEFINE_KVM_GHCB_ACCESSORS(rcx)
+DEFINE_KVM_GHCB_ACCESSORS(rdx)
+DEFINE_KVM_GHCB_ACCESSORS(rbx)
+DEFINE_KVM_GHCB_ACCESSORS(rsi)
+DEFINE_KVM_GHCB_ACCESSORS(sw_exit_code)
+DEFINE_KVM_GHCB_ACCESSORS(sw_exit_info_1)
+DEFINE_KVM_GHCB_ACCESSORS(sw_exit_info_2)
+DEFINE_KVM_GHCB_ACCESSORS(sw_scratch)
+DEFINE_KVM_GHCB_ACCESSORS(xcr0)
+
#endif
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 008/149] KVM: SEV: only access GHCB fields once
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (6 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 007/149] KVM: SEV: snapshot the GHCB before accessing it Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 009/149] wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems() Greg Kroah-Hartman
` (153 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Andy Nguyen, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
commit 7588dbcebcbf0193ab5b76987396d0254270b04a upstream.
A KVM guest using SEV-ES or SEV-SNP with multiple vCPUs can trigger
a double fetch race condition vulnerability and invoke the VMGEXIT
handler recursively.
sev_handle_vmgexit() maps the GHCB page using kvm_vcpu_map() and then
fetches the exit code using ghcb_get_sw_exit_code(). Soon after,
sev_es_validate_vmgexit() fetches the exit code again. Since the GHCB
page is shared with the guest, the guest is able to quickly swap the
values with another vCPU and hence bypass the validation. One vmexit code
that can be rejected by sev_es_validate_vmgexit() is SVM_EXIT_VMGEXIT;
if sev_handle_vmgexit() observes it in the second fetch, the call
to svm_invoke_exit_handler() will invoke sev_handle_vmgexit() again
recursively.
To avoid the race, always fetch the GHCB data from the places where
sev_es_sync_from_ghcb stores it.
Exploiting recursions on linux kernel has been proven feasible
in the past, but the impact is mitigated by stack guard pages
(CONFIG_VMAP_STACK). Still, if an attacker manages to call the handler
multiple times, they can theoretically trigger a stack overflow and
cause a denial-of-service, or potentially guest-to-host escape in kernel
configurations without stack guard pages.
Note that winning the race reliably in every iteration is very tricky
due to the very tight window of the fetches; depending on the compiler
settings, they are often consecutive because of optimization and inlining.
Tested by booting an SEV-ES RHEL9 guest.
Fixes: CVE-2023-4155
Fixes: 291bd20d5d88 ("KVM: SVM: Add initial support for a VMGEXIT VMEXIT")
Cc: stable@vger.kernel.org
Reported-by: Andy Nguyen <theflow@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/x86/kvm/svm/sev.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
--- a/arch/x86/kvm/svm/sev.c
+++ b/arch/x86/kvm/svm/sev.c
@@ -2438,9 +2438,15 @@ static void sev_es_sync_from_ghcb(struct
memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap));
}
+static u64 kvm_ghcb_get_sw_exit_code(struct vmcb_control_area *control)
+{
+ return (((u64)control->exit_code_hi) << 32) | control->exit_code;
+}
+
static int sev_es_validate_vmgexit(struct vcpu_svm *svm)
{
- struct kvm_vcpu *vcpu;
+ struct vmcb_control_area *control = &svm->vmcb->control;
+ struct kvm_vcpu *vcpu = &svm->vcpu;
struct ghcb *ghcb;
u64 exit_code;
u64 reason;
@@ -2451,7 +2457,7 @@ static int sev_es_validate_vmgexit(struc
* Retrieve the exit code now even though it may not be marked valid
* as it could help with debugging.
*/
- exit_code = ghcb_get_sw_exit_code(ghcb);
+ exit_code = kvm_ghcb_get_sw_exit_code(control);
/* Only GHCB Usage code 0 is supported */
if (ghcb->ghcb_usage) {
@@ -2466,7 +2472,7 @@ static int sev_es_validate_vmgexit(struc
!kvm_ghcb_sw_exit_info_2_is_valid(svm))
goto vmgexit_err;
- switch (ghcb_get_sw_exit_code(ghcb)) {
+ switch (exit_code) {
case SVM_EXIT_READ_DR7:
break;
case SVM_EXIT_WRITE_DR7:
@@ -2483,18 +2489,18 @@ static int sev_es_validate_vmgexit(struc
if (!kvm_ghcb_rax_is_valid(svm) ||
!kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
- if (ghcb_get_rax(ghcb) == 0xd)
+ if (vcpu->arch.regs[VCPU_REGS_RAX] == 0xd)
if (!kvm_ghcb_xcr0_is_valid(svm))
goto vmgexit_err;
break;
case SVM_EXIT_INVD:
break;
case SVM_EXIT_IOIO:
- if (ghcb_get_sw_exit_info_1(ghcb) & SVM_IOIO_STR_MASK) {
+ if (control->exit_info_1 & SVM_IOIO_STR_MASK) {
if (!kvm_ghcb_sw_scratch_is_valid(svm))
goto vmgexit_err;
} else {
- if (!(ghcb_get_sw_exit_info_1(ghcb) & SVM_IOIO_TYPE_MASK))
+ if (!(control->exit_info_1 & SVM_IOIO_TYPE_MASK))
if (!kvm_ghcb_rax_is_valid(svm))
goto vmgexit_err;
}
@@ -2502,7 +2508,7 @@ static int sev_es_validate_vmgexit(struc
case SVM_EXIT_MSR:
if (!kvm_ghcb_rcx_is_valid(svm))
goto vmgexit_err;
- if (ghcb_get_sw_exit_info_1(ghcb)) {
+ if (control->exit_info_1) {
if (!kvm_ghcb_rax_is_valid(svm) ||
!kvm_ghcb_rdx_is_valid(svm))
goto vmgexit_err;
@@ -2546,8 +2552,6 @@ static int sev_es_validate_vmgexit(struc
return 0;
vmgexit_err:
- vcpu = &svm->vcpu;
-
if (reason == GHCB_ERR_INVALID_USAGE) {
vcpu_unimpl(vcpu, "vmgexit: ghcb usage %#x is not valid\n",
ghcb->ghcb_usage);
@@ -2845,8 +2849,6 @@ int sev_handle_vmgexit(struct kvm_vcpu *
trace_kvm_vmgexit_enter(vcpu->vcpu_id, ghcb);
- exit_code = ghcb_get_sw_exit_code(ghcb);
-
sev_es_sync_from_ghcb(svm);
ret = sev_es_validate_vmgexit(svm);
if (ret)
@@ -2855,6 +2857,7 @@ int sev_handle_vmgexit(struct kvm_vcpu *
ghcb_set_sw_exit_info_1(ghcb, 0);
ghcb_set_sw_exit_info_2(ghcb, 0);
+ exit_code = kvm_ghcb_get_sw_exit_code(control);
switch (exit_code) {
case SVM_VMGEXIT_MMIO_READ:
ret = setup_vmgexit_scratch(svm, true, control->exit_info_2);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 009/149] wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (7 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 008/149] KVM: SEV: only access GHCB fields once Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 010/149] wifi: rtw89: fix 8852AE disconnection caused by RX full flags Greg Kroah-Hartman
` (152 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Keith Yeo, Johannes Berg
From: Keith Yeo <keithyjy@gmail.com>
commit 6311071a056272e1e761de8d0305e87cc566f734 upstream.
nl80211_parse_mbssid_elems() uses a u8 variable num_elems to count the
number of MBSSID elements in the nested netlink attribute attrs, which can
lead to an integer overflow if a user of the nl80211 interface specifies
256 or more elements in the corresponding attribute in userspace. The
integer overflow can lead to a heap buffer overflow as num_elems determines
the size of the trailing array in elems, and this array is thereafter
written to for each element in attrs.
Note that this vulnerability only affects devices with the
wiphy->mbssid_max_interfaces member set for the wireless physical device
struct in the device driver, and can only be triggered by a process with
CAP_NET_ADMIN capabilities.
Fix this by checking for a maximum of 255 elements in attrs.
Cc: stable@vger.kernel.org
Fixes: dc1e3cb8da8b ("nl80211: MBSSID and EMA support in AP mode")
Signed-off-by: Keith Yeo <keithyjy@gmail.com>
Link: https://lore.kernel.org/r/20230731034719.77206-1-keithyjy@gmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/wireless/nl80211.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -5378,8 +5378,11 @@ nl80211_parse_mbssid_elems(struct wiphy
if (!wiphy->mbssid_max_interfaces)
return ERR_PTR(-EINVAL);
- nla_for_each_nested(nl_elems, attrs, rem_elems)
+ nla_for_each_nested(nl_elems, attrs, rem_elems) {
+ if (num_elems >= 255)
+ return ERR_PTR(-EINVAL);
num_elems++;
+ }
elems = kzalloc(struct_size(elems, elem, num_elems), GFP_KERNEL);
if (!elems)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 010/149] wifi: rtw89: fix 8852AE disconnection caused by RX full flags
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (8 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 009/149] wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems() Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 011/149] selftests: forwarding: Set default IPv6 traceroute utility Greg Kroah-Hartman
` (151 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Damian B, Stable, Ping-Ke Shih,
Johannes Berg
From: Ping-Ke Shih <pkshih@realtek.com>
commit b74bb07cdab6859e1a3fc9fe7351052176322ddf upstream.
RX full flags are raised if certain types of RX FIFO are full, and then
drop all following MPDU of AMPDU. In order to resume to receive MPDU
when RX FIFO becomes available, we clear the register bits by the
commit a0d99ebb3ecd ("wifi: rtw89: initialize DMA of CMAC"). But, 8852AE
needs more settings to support this. To quickly fix disconnection problem,
revert the behavior as before.
Fixes: a0d99ebb3ecd ("wifi: rtw89: initialize DMA of CMAC")
Reported-by: Damian B <bronecki.damian@gmail.com>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217710
Cc: <Stable@vger.kernel.org>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Tested-by: Damian B <bronecki.damian@gmail.com>
Link: https://lore.kernel.org/r/20230808005426.5327-1-pkshih@realtek.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/wireless/realtek/rtw89/mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/wireless/realtek/rtw89/mac.c
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
@@ -2209,7 +2209,7 @@ static int cmac_dma_init(struct rtw89_de
u32 reg;
int ret;
- if (chip_id != RTL8852A && chip_id != RTL8852B)
+ if (chip_id != RTL8852B)
return 0;
ret = rtw89_mac_check_mac_en(rtwdev, mac_idx, RTW89_CMAC_SEL);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 011/149] selftests: forwarding: Set default IPv6 traceroute utility
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (9 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 010/149] wifi: rtw89: fix 8852AE disconnection caused by RX full flags Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 012/149] wireguard: allowedips: expand maximum node depth Greg Kroah-Hartman
` (150 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mirsad Todorovac, Ido Schimmel,
Petr Machata, Hangbin Liu, Nikolay Aleksandrov, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 38f7c44d6e760a8513557e27340d61b820c91b8f upstream.
The test uses the 'TROUTE6' environment variable to encode the name of
the IPv6 traceroute utility. By default (without a configuration file),
this variable is not set, resulting in failures:
# ./ip6_forward_instats_vrf.sh
TEST: ping6 [ OK ]
TEST: Ip6InTooBigErrors [ OK ]
TEST: Ip6InHdrErrors [FAIL]
TEST: Ip6InAddrErrors [ OK ]
TEST: Ip6InDiscards [ OK ]
Fix by setting a default utility name and skip the test if the utility
is not present.
Fixes: 0857d6f8c759 ("ipv6: When forwarding count rx stats on the orig netdev")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/adc5e40d-d040-a65e-eb26-edf47dac5b02@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-6-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/ip6_forward_instats_vrf.sh | 2 ++
tools/testing/selftests/net/forwarding/lib.sh | 1 +
2 files changed, 3 insertions(+)
--- a/tools/testing/selftests/net/forwarding/ip6_forward_instats_vrf.sh
+++ b/tools/testing/selftests/net/forwarding/ip6_forward_instats_vrf.sh
@@ -14,6 +14,8 @@ ALL_TESTS="
NUM_NETIFS=4
source lib.sh
+require_command $TROUTE6
+
h1_create()
{
simple_if_init $h1 2001:1:1::2/64
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -30,6 +30,7 @@ REQUIRE_MZ=${REQUIRE_MZ:=yes}
REQUIRE_MTOOLS=${REQUIRE_MTOOLS:=no}
STABLE_MAC_ADDRS=${STABLE_MAC_ADDRS:=no}
TCPDUMP_EXTRA_FLAGS=${TCPDUMP_EXTRA_FLAGS:=}
+TROUTE6=${TROUTE6:=traceroute6}
relative_path="${BASH_SOURCE%/*}"
if [[ "$relative_path" == "${BASH_SOURCE}" ]]; then
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 012/149] wireguard: allowedips: expand maximum node depth
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (10 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 011/149] selftests: forwarding: Set default IPv6 traceroute utility Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 013/149] mmc: moxart: read scr register without changing byte order Greg Kroah-Hartman
` (149 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jason A. Donenfeld, Jakub Kicinski
From: Jason A. Donenfeld <Jason@zx2c4.com>
commit 46622219aae2b67813fe31a7b8cb7da5baff5c8a upstream.
In the allowedips self-test, nodes are inserted into the tree, but it
generated an even amount of nodes, but for checking maximum node depth,
there is of course the root node, which makes the total number
necessarily odd. With two few nodes added, it never triggered the
maximum depth check like it should have. So, add 129 nodes instead of
128 nodes, and do so with a more straightforward scheme, starting with
all the bits set, and shifting over one each time. Then increase the
maximum depth to 129, and choose a better name for that variable to
make it clear that it represents depth as opposed to bits.
Cc: stable@vger.kernel.org
Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Link: https://lore.kernel.org/r/20230807132146.2191597-2-Jason@zx2c4.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/wireguard/allowedips.c | 8 ++++----
drivers/net/wireguard/selftest/allowedips.c | 16 ++++++++++------
2 files changed, 14 insertions(+), 10 deletions(-)
--- a/drivers/net/wireguard/allowedips.c
+++ b/drivers/net/wireguard/allowedips.c
@@ -6,7 +6,7 @@
#include "allowedips.h"
#include "peer.h"
-enum { MAX_ALLOWEDIPS_BITS = 128 };
+enum { MAX_ALLOWEDIPS_DEPTH = 129 };
static struct kmem_cache *node_cache;
@@ -42,7 +42,7 @@ static void push_rcu(struct allowedips_n
struct allowedips_node __rcu *p, unsigned int *len)
{
if (rcu_access_pointer(p)) {
- if (WARN_ON(IS_ENABLED(DEBUG) && *len >= MAX_ALLOWEDIPS_BITS))
+ if (WARN_ON(IS_ENABLED(DEBUG) && *len >= MAX_ALLOWEDIPS_DEPTH))
return;
stack[(*len)++] = rcu_dereference_raw(p);
}
@@ -55,7 +55,7 @@ static void node_free_rcu(struct rcu_hea
static void root_free_rcu(struct rcu_head *rcu)
{
- struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_BITS] = {
+ struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_DEPTH] = {
container_of(rcu, struct allowedips_node, rcu) };
unsigned int len = 1;
@@ -68,7 +68,7 @@ static void root_free_rcu(struct rcu_hea
static void root_remove_peer_lists(struct allowedips_node *root)
{
- struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_BITS] = { root };
+ struct allowedips_node *node, *stack[MAX_ALLOWEDIPS_DEPTH] = { root };
unsigned int len = 1;
while (len > 0 && (node = stack[--len])) {
--- a/drivers/net/wireguard/selftest/allowedips.c
+++ b/drivers/net/wireguard/selftest/allowedips.c
@@ -593,16 +593,20 @@ bool __init wg_allowedips_selftest(void)
wg_allowedips_remove_by_peer(&t, a, &mutex);
test_negative(4, a, 192, 168, 0, 1);
- /* These will hit the WARN_ON(len >= MAX_ALLOWEDIPS_BITS) in free_node
+ /* These will hit the WARN_ON(len >= MAX_ALLOWEDIPS_DEPTH) in free_node
* if something goes wrong.
*/
- for (i = 0; i < MAX_ALLOWEDIPS_BITS; ++i) {
- part = cpu_to_be64(~(1LLU << (i % 64)));
- memset(&ip, 0xff, 16);
- memcpy((u8 *)&ip + (i < 64) * 8, &part, 8);
+ for (i = 0; i < 64; ++i) {
+ part = cpu_to_be64(~0LLU << i);
+ memset(&ip, 0xff, 8);
+ memcpy((u8 *)&ip + 8, &part, 8);
+ wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
+ memcpy(&ip, &part, 8);
+ memset((u8 *)&ip + 8, 0, 8);
wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
}
-
+ memset(&ip, 0, 16);
+ wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
wg_allowedips_free(&t, &mutex);
wg_allowedips_init(&t);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 013/149] mmc: moxart: read scr register without changing byte order
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (11 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 012/149] wireguard: allowedips: expand maximum node depth Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 014/149] ipv6: adjust ndisc_is_useropt() to also return true for PIO Greg Kroah-Hartman
` (148 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sergei Antonov, Jonas Jensen,
Ulf Hansson
From: Sergei Antonov <saproj@gmail.com>
commit d44263222134b5635932974c6177a5cba65a07e8 upstream.
Conversion from big-endian to native is done in a common function
mmc_app_send_scr(). Converting in moxart_transfer_pio() is extra.
Double conversion on a LE system returns an incorrect SCR value,
leads to errors:
mmc0: unrecognised SCR structure version 8
Fixes: 1b66e94e6b99 ("mmc: moxart: Add MOXA ART SD/MMC driver")
Signed-off-by: Sergei Antonov <saproj@gmail.com>
Cc: Jonas Jensen <jonas.jensen@gmail.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230627120549.2400325-1-saproj@gmail.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/host/moxart-mmc.c | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
--- a/drivers/mmc/host/moxart-mmc.c
+++ b/drivers/mmc/host/moxart-mmc.c
@@ -338,13 +338,7 @@ static void moxart_transfer_pio(struct m
return;
}
for (len = 0; len < remain && len < host->fifo_width;) {
- /* SCR data must be read in big endian. */
- if (data->mrq->cmd->opcode == SD_APP_SEND_SCR)
- *sgp = ioread32be(host->base +
- REG_DATA_WINDOW);
- else
- *sgp = ioread32(host->base +
- REG_DATA_WINDOW);
+ *sgp = ioread32(host->base + REG_DATA_WINDOW);
sgp++;
len += 4;
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 014/149] ipv6: adjust ndisc_is_useropt() to also return true for PIO
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (12 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 013/149] mmc: moxart: read scr register without changing byte order Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 015/149] selftests: mptcp: join: fix delete and re-add test Greg Kroah-Hartman
` (147 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jen Linkova, Lorenzo Colitti,
David Ahern, YOSHIFUJI Hideaki / 吉藤英明,
Maciej Żenczykowski, Jakub Kicinski
From: Maciej Żenczykowski <maze@google.com>
commit 048c796beb6eb4fa3a5a647ee1c81f5c6f0f6a2a upstream.
The upcoming (and nearly finalized):
https://datatracker.ietf.org/doc/draft-collink-6man-pio-pflag/
will update the IPv6 RA to include a new flag in the PIO field,
which will serve as a hint to perform DHCPv6-PD.
As we don't want DHCPv6 related logic inside the kernel, this piece of
information needs to be exposed to userspace. The simplest option is to
simply expose the entire PIO through the already existing mechanism.
Even without this new flag, the already existing PIO R (router address)
flag (from RFC6275) cannot AFAICT be handled entirely in kernel,
and provides useful information that should be exposed to userspace
(the router's global address, for use by Mobile IPv6).
Also cc'ing stable@ for inclusion in LTS, as while technically this is
not quite a bugfix, and instead more of a feature, it is absolutely
trivial and the alternative is manually cherrypicking into all Android
Common Kernel trees - and I know Greg will ask for it to be sent in via
LTS instead...
Cc: Jen Linkova <furry@google.com>
Cc: Lorenzo Colitti <lorenzo@google.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org>
Cc: stable@vger.kernel.org
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Link: https://lore.kernel.org/r/20230807102533.1147559-1-maze@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv6/ndisc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -197,7 +197,8 @@ static struct nd_opt_hdr *ndisc_next_opt
static inline int ndisc_is_useropt(const struct net_device *dev,
struct nd_opt_hdr *opt)
{
- return opt->nd_opt_type == ND_OPT_RDNSS ||
+ return opt->nd_opt_type == ND_OPT_PREFIX_INFO ||
+ opt->nd_opt_type == ND_OPT_RDNSS ||
opt->nd_opt_type == ND_OPT_DNSSL ||
opt->nd_opt_type == ND_OPT_CAPTIVE_PORTAL ||
opt->nd_opt_type == ND_OPT_PREF64 ||
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 015/149] selftests: mptcp: join: fix delete and re-add test
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (13 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 014/149] ipv6: adjust ndisc_is_useropt() to also return true for PIO Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 016/149] selftests: mptcp: join: fix implicit EP test Greg Kroah-Hartman
` (146 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andrea Claudi, Matthieu Baerts,
Jakub Kicinski
From: Andrea Claudi <aclaudi@redhat.com>
commit aaf2123a5cf46dbd97f84b6eee80269758064d93 upstream.
mptcp_join 'delete and re-add' test fails when using ip mptcp:
$ ./mptcp_join.sh -iI
<snip>
002 delete and re-add before delete[ ok ]
mptcp_info subflows=1 [ ok ]
Error: argument "ADDRESS" is wrong: invalid for non-zero id address
after delete[fail] got 2:2 subflows expected 1
This happens because endpoint delete includes an ip address while id is
not 0, contrary to what is indicated in the ip mptcp man page:
"When used with the delete id operation, an IFADDR is only included when
the ID is 0."
This fixes the issue using the $addr variable in pm_nl_del_endpoint()
only when id is 0.
Fixes: 34aa6e3bccd8 ("selftests: mptcp: add ip mptcp wrappers")
Cc: stable@vger.kernel.org
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Link: https://lore.kernel.org/r/20230803-upstream-net-20230803-misc-fixes-6-5-v1-1-6671b1ab11cc@tessares.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 1 +
1 file changed, 1 insertion(+)
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -650,6 +650,7 @@ pm_nl_del_endpoint()
local addr=$3
if [ $ip_mptcp -eq 1 ]; then
+ [ $id -ne 0 ] && addr=''
ip -n $ns mptcp endpoint delete id $id $addr
else
ip netns exec $ns ./pm_nl_ctl del $id $addr
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 016/149] selftests: mptcp: join: fix implicit EP test
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (14 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 015/149] selftests: mptcp: join: fix delete and re-add test Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 017/149] mptcp: avoid bogus reset on fallback close Greg Kroah-Hartman
` (145 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andrea Claudi, Matthieu Baerts,
Jakub Kicinski
From: Andrea Claudi <aclaudi@redhat.com>
commit c8c101ae390a3e817369e94a6f12a1ddea420702 upstream.
mptcp_join 'implicit EP' test currently fails when using ip mptcp:
$ ./mptcp_join.sh -iI
<snip>
001 implicit EP creation[fail] expected '10.0.2.2 10.0.2.2 id 1 implicit' found '10.0.2.2 id 1 rawflags 10 '
Error: too many addresses or duplicate one: -22.
ID change is prevented[fail] expected '10.0.2.2 10.0.2.2 id 1 implicit' found '10.0.2.2 id 1 rawflags 10 '
modif is allowed[fail] expected '10.0.2.2 10.0.2.2 id 1 signal' found '10.0.2.2 id 1 signal '
This happens because of two reasons:
- iproute v6.3.0 does not support the implicit flag, fixed with
iproute2-next commit 3a2535a41854 ("mptcp: add support for implicit
flag")
- pm_nl_check_endpoint wrongly expects the ip address to be repeated two
times in iproute output, and does not account for a final whitespace
in it.
This fixes the issue trimming the whitespace in the output string and
removing the double address in the expected string.
Fixes: 69c6ce7b6eca ("selftests: mptcp: add implicit endpoint test case")
Cc: stable@vger.kernel.org
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Link: https://lore.kernel.org/r/20230803-upstream-net-20230803-misc-fixes-6-5-v1-2-6671b1ab11cc@tessares.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -741,10 +741,11 @@ pm_nl_check_endpoint()
fi
if [ $ip_mptcp -eq 1 ]; then
+ # get line and trim trailing whitespace
line=$(ip -n $ns mptcp endpoint show $id)
+ line="${line% }"
# the dump order is: address id flags port dev
- expected_line="$addr"
- [ -n "$addr" ] && expected_line="$expected_line $addr"
+ [ -n "$addr" ] && expected_line="$addr"
expected_line="$expected_line $id"
[ -n "$_flags" ] && expected_line="$expected_line ${_flags//","/" "}"
[ -n "$dev" ] && expected_line="$expected_line $dev"
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 017/149] mptcp: avoid bogus reset on fallback close
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (15 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 016/149] selftests: mptcp: join: fix implicit EP test Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 018/149] mptcp: fix disconnect vs accept race Greg Kroah-Hartman
` (144 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Matthieu Baerts, Paolo Abeni,
Jakub Kicinski
From: Paolo Abeni <pabeni@redhat.com>
commit ff18f9ef30ee87740f741b964375d0cfb84e1ec2 upstream.
Since the blamed commit, the MPTCP protocol unconditionally sends
TCP resets on all the subflows on disconnect().
That fits full-blown MPTCP sockets - to implement the fastclose
mechanism - but causes unexpected corruption of the data stream,
caught as sporadic self-tests failures.
Fixes: d21f83485518 ("mptcp: use fastclose on more edge scenarios")
Cc: stable@vger.kernel.org
Tested-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/419
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Link: https://lore.kernel.org/r/20230803-upstream-net-20230803-misc-fixes-6-5-v1-3-6671b1ab11cc@tessares.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/mptcp/protocol.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2367,7 +2367,7 @@ static void __mptcp_close_ssk(struct soc
lock_sock_nested(ssk, SINGLE_DEPTH_NESTING);
- if (flags & MPTCP_CF_FASTCLOSE) {
+ if ((flags & MPTCP_CF_FASTCLOSE) && !__mptcp_check_fallback(msk)) {
/* be sure to force the tcp_disconnect() path,
* to generate the egress reset
*/
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 018/149] mptcp: fix disconnect vs accept race
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (16 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 017/149] mptcp: avoid bogus reset on fallback close Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 019/149] dmaengine: pl330: Return DMA_PAUSED when transaction is paused Greg Kroah-Hartman
` (143 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christoph Paasch, Paolo Abeni,
Matthieu Baerts, Jakub Kicinski
From: Paolo Abeni <pabeni@redhat.com>
commit 511b90e39250135a7f900f1c3afbce25543018a2 upstream.
Despite commit 0ad529d9fd2b ("mptcp: fix possible divide by zero in
recvmsg()"), the mptcp protocol is still prone to a race between
disconnect() (or shutdown) and accept.
The root cause is that the mentioned commit checks the msk-level
flag, but mptcp_stream_accept() does acquire the msk-level lock,
as it can rely directly on the first subflow lock.
As reported by Christoph than can lead to a race where an msk
socket is accepted after that mptcp_subflow_queue_clean() releases
the listener socket lock and just before it takes destructive
actions leading to the following splat:
BUG: kernel NULL pointer dereference, address: 0000000000000012
PGD 5a4ca067 P4D 5a4ca067 PUD 37d4c067 PMD 0
Oops: 0000 [#1] PREEMPT SMP
CPU: 2 PID: 10955 Comm: syz-executor.5 Not tainted 6.5.0-rc1-gdc7b257ee5dd #37
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-2.el7 04/01/2014
RIP: 0010:mptcp_stream_accept+0x1ee/0x2f0 include/net/inet_sock.h:330
Code: 0a 09 00 48 8b 1b 4c 39 e3 74 07 e8 bc 7c 7f fe eb a1 e8 b5 7c 7f fe 4c 8b 6c 24 08 eb 05 e8 a9 7c 7f fe 49 8b 85 d8 09 00 00 <0f> b6 40 12 88 44 24 07 0f b6 6c 24 07 bf 07 00 00 00 89 ee e8 89
RSP: 0018:ffffc90000d07dc0 EFLAGS: 00010293
RAX: 0000000000000000 RBX: ffff888037e8d020 RCX: ffff88803b093300
RDX: 0000000000000000 RSI: ffffffff833822c5 RDI: ffffffff8333896a
RBP: 0000607f82031520 R08: ffff88803b093300 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000003e83 R12: ffff888037e8d020
R13: ffff888037e8c680 R14: ffff888009af7900 R15: ffff888009af6880
FS: 00007fc26d708640(0000) GS:ffff88807dd00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000012 CR3: 0000000066bc5001 CR4: 0000000000370ee0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
do_accept+0x1ae/0x260 net/socket.c:1872
__sys_accept4+0x9b/0x110 net/socket.c:1913
__do_sys_accept4 net/socket.c:1954 [inline]
__se_sys_accept4 net/socket.c:1951 [inline]
__x64_sys_accept4+0x20/0x30 net/socket.c:1951
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x47/0xa0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x6e/0xd8
Address the issue by temporary removing the pending request socket
from the accept queue, so that racing accept() can't touch them.
After depleting the msk - the ssk still exists, as plain TCP sockets,
re-insert them into the accept queue, so that later inet_csk_listen_stop()
will complete the tcp socket disposal.
Fixes: 2a6a870e44dd ("mptcp: stops worker on unaccepted sockets at listener close")
Cc: stable@vger.kernel.org
Reported-by: Christoph Paasch <cpaasch@apple.com>
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/423
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Link: https://lore.kernel.org/r/20230803-upstream-net-20230803-misc-fixes-6-5-v1-4-6671b1ab11cc@tessares.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/mptcp/protocol.h | 1
net/mptcp/subflow.c | 60 +++++++++++++++++++++++++--------------------------
2 files changed, 30 insertions(+), 31 deletions(-)
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -312,7 +312,6 @@ struct mptcp_sock {
u32 setsockopt_seq;
char ca_name[TCP_CA_NAME_MAX];
- struct mptcp_sock *dl_next;
};
#define mptcp_data_lock(sk) spin_lock_bh(&(sk)->sk_lock.slock)
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -1724,16 +1724,31 @@ static void subflow_state_change(struct
void mptcp_subflow_queue_clean(struct sock *listener_sk, struct sock *listener_ssk)
{
struct request_sock_queue *queue = &inet_csk(listener_ssk)->icsk_accept_queue;
- struct mptcp_sock *msk, *next, *head = NULL;
- struct request_sock *req;
- struct sock *sk;
-
- /* build a list of all unaccepted mptcp sockets */
+ struct request_sock *req, *head, *tail;
+ struct mptcp_subflow_context *subflow;
+ struct sock *sk, *ssk;
+
+ /* Due to lock dependencies no relevant lock can be acquired under rskq_lock.
+ * Splice the req list, so that accept() can not reach the pending ssk after
+ * the listener socket is released below.
+ */
spin_lock_bh(&queue->rskq_lock);
- for (req = queue->rskq_accept_head; req; req = req->dl_next) {
- struct mptcp_subflow_context *subflow;
- struct sock *ssk = req->sk;
+ head = queue->rskq_accept_head;
+ tail = queue->rskq_accept_tail;
+ queue->rskq_accept_head = NULL;
+ queue->rskq_accept_tail = NULL;
+ spin_unlock_bh(&queue->rskq_lock);
+
+ if (!head)
+ return;
+
+ /* can't acquire the msk socket lock under the subflow one,
+ * or will cause ABBA deadlock
+ */
+ release_sock(listener_ssk);
+ for (req = head; req; req = req->dl_next) {
+ ssk = req->sk;
if (!sk_is_mptcp(ssk))
continue;
@@ -1741,32 +1756,10 @@ void mptcp_subflow_queue_clean(struct so
if (!subflow || !subflow->conn)
continue;
- /* skip if already in list */
sk = subflow->conn;
- msk = mptcp_sk(sk);
- if (msk->dl_next || msk == head)
- continue;
-
sock_hold(sk);
- msk->dl_next = head;
- head = msk;
- }
- spin_unlock_bh(&queue->rskq_lock);
- if (!head)
- return;
-
- /* can't acquire the msk socket lock under the subflow one,
- * or will cause ABBA deadlock
- */
- release_sock(listener_ssk);
-
- for (msk = head; msk; msk = next) {
- sk = (struct sock *)msk;
lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
- next = msk->dl_next;
- msk->dl_next = NULL;
-
__mptcp_unaccepted_force_close(sk);
release_sock(sk);
@@ -1790,6 +1783,13 @@ void mptcp_subflow_queue_clean(struct so
/* we are still under the listener msk socket lock */
lock_sock_nested(listener_ssk, SINGLE_DEPTH_NESTING);
+
+ /* restore the listener queue, to let the TCP code clean it up */
+ spin_lock_bh(&queue->rskq_lock);
+ WARN_ON_ONCE(queue->rskq_accept_head);
+ queue->rskq_accept_head = head;
+ queue->rskq_accept_tail = tail;
+ spin_unlock_bh(&queue->rskq_lock);
}
static int subflow_ulp_init(struct sock *sk)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 019/149] dmaengine: pl330: Return DMA_PAUSED when transaction is paused
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (17 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 018/149] mptcp: fix disconnect vs accept race Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 020/149] net: mana: Fix MANA VF unload when hardware is unresponsive Greg Kroah-Hartman
` (142 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Richard Tresidder,
Ilpo Järvinen, Vinod Koul
From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
commit 8cda3ececf07d374774f6a13e5a94bc2dc04c26c upstream.
pl330_pause() does not set anything to indicate paused condition which
causes pl330_tx_status() to return DMA_IN_PROGRESS. This breaks 8250
DMA flush after the fix in commit 57e9af7831dc ("serial: 8250_dma: Fix
DMA Rx rearm race"). The function comment for pl330_pause() claims
pause is supported but resume is not which is enough for 8250 DMA flush
to work as long as DMA status reports DMA_PAUSED when appropriate.
Add PAUSED state for descriptor and mark BUSY descriptors with PAUSED
in pl330_pause(). Return DMA_PAUSED from pl330_tx_status() when the
descriptor is PAUSED.
Reported-by: Richard Tresidder <rtresidd@electromag.com.au>
Tested-by: Richard Tresidder <rtresidd@electromag.com.au>
Fixes: 88987d2c7534 ("dmaengine: pl330: add DMA_PAUSE feature")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/linux-serial/f8a86ecd-64b1-573f-c2fa-59f541083f1a@electromag.com.au/
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20230526105434.14959-1-ilpo.jarvinen@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/dma/pl330.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -404,6 +404,12 @@ enum desc_status {
*/
BUSY,
/*
+ * Pause was called while descriptor was BUSY. Due to hardware
+ * limitations, only termination is possible for descriptors
+ * that have been paused.
+ */
+ PAUSED,
+ /*
* Sitting on the channel work_list but xfer done
* by PL330 core
*/
@@ -2041,7 +2047,7 @@ static inline void fill_queue(struct dma
list_for_each_entry(desc, &pch->work_list, node) {
/* If already submitted */
- if (desc->status == BUSY)
+ if (desc->status == BUSY || desc->status == PAUSED)
continue;
ret = pl330_submit_req(pch->thread, desc);
@@ -2326,6 +2332,7 @@ static int pl330_pause(struct dma_chan *
{
struct dma_pl330_chan *pch = to_pchan(chan);
struct pl330_dmac *pl330 = pch->dmac;
+ struct dma_pl330_desc *desc;
unsigned long flags;
pm_runtime_get_sync(pl330->ddma.dev);
@@ -2335,6 +2342,10 @@ static int pl330_pause(struct dma_chan *
_stop(pch->thread);
spin_unlock(&pl330->lock);
+ list_for_each_entry(desc, &pch->work_list, node) {
+ if (desc->status == BUSY)
+ desc->status = PAUSED;
+ }
spin_unlock_irqrestore(&pch->lock, flags);
pm_runtime_mark_last_busy(pl330->ddma.dev);
pm_runtime_put_autosuspend(pl330->ddma.dev);
@@ -2425,7 +2436,7 @@ pl330_tx_status(struct dma_chan *chan, d
else if (running && desc == running)
transferred =
pl330_get_current_xferred_count(pch, desc);
- else if (desc->status == BUSY)
+ else if (desc->status == BUSY || desc->status == PAUSED)
/*
* Busy but not running means either just enqueued,
* or finished and not yet marked done
@@ -2442,6 +2453,9 @@ pl330_tx_status(struct dma_chan *chan, d
case DONE:
ret = DMA_COMPLETE;
break;
+ case PAUSED:
+ ret = DMA_PAUSED;
+ break;
case PREP:
case BUSY:
ret = DMA_IN_PROGRESS;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 020/149] net: mana: Fix MANA VF unload when hardware is unresponsive
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (18 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 019/149] dmaengine: pl330: Return DMA_PAUSED when transaction is paused Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 021/149] riscv/kexec: load initrd high in available memory Greg Kroah-Hartman
` (141 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Souradeep Chakrabarti,
Jakub Kicinski
From: Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>
commit a7dfeda6fdeccab4c7c3dce9a72c4262b9530c80 upstream.
When unloading the MANA driver, mana_dealloc_queues() waits for the MANA
hardware to complete any inflight packets and set the pending send count
to zero. But if the hardware has failed, mana_dealloc_queues()
could wait forever.
Fix this by adding a timeout to the wait. Set the timeout to 120 seconds,
which is a somewhat arbitrary value that is more than long enough for
functional hardware to complete any sends.
Cc: stable@vger.kernel.org
Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)")
Signed-off-by: Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>
Link: https://lore.kernel.org/r/1691576525-24271-1-git-send-email-schakrabarti@linux.microsoft.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/microsoft/mana/mana_en.c | 37 +++++++++++++++++++++++---
1 file changed, 33 insertions(+), 4 deletions(-)
--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
+++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
@@ -8,6 +8,7 @@
#include <linux/ethtool.h>
#include <linux/filter.h>
#include <linux/mm.h>
+#include <linux/pci.h>
#include <net/checksum.h>
#include <net/ip6_checksum.h>
@@ -1972,9 +1973,12 @@ int mana_attach(struct net_device *ndev)
static int mana_dealloc_queues(struct net_device *ndev)
{
struct mana_port_context *apc = netdev_priv(ndev);
+ unsigned long timeout = jiffies + 120 * HZ;
struct gdma_dev *gd = apc->ac->gdma_dev;
struct mana_txq *txq;
+ struct sk_buff *skb;
int i, err;
+ u32 tsleep;
if (apc->port_is_up)
return -EINVAL;
@@ -1990,15 +1994,40 @@ static int mana_dealloc_queues(struct ne
* to false, but it doesn't matter since mana_start_xmit() drops any
* new packets due to apc->port_is_up being false.
*
- * Drain all the in-flight TX packets
+ * Drain all the in-flight TX packets.
+ * A timeout of 120 seconds for all the queues is used.
+ * This will break the while loop when h/w is not responding.
+ * This value of 120 has been decided here considering max
+ * number of queues.
*/
+
for (i = 0; i < apc->num_queues; i++) {
txq = &apc->tx_qp[i].txq;
-
- while (atomic_read(&txq->pending_sends) > 0)
- usleep_range(1000, 2000);
+ tsleep = 1000;
+ while (atomic_read(&txq->pending_sends) > 0 &&
+ time_before(jiffies, timeout)) {
+ usleep_range(tsleep, tsleep + 1000);
+ tsleep <<= 1;
+ }
+ if (atomic_read(&txq->pending_sends)) {
+ err = pcie_flr(to_pci_dev(gd->gdma_context->dev));
+ if (err) {
+ netdev_err(ndev, "flr failed %d with %d pkts pending in txq %u\n",
+ err, atomic_read(&txq->pending_sends),
+ txq->gdma_txq_id);
+ }
+ break;
+ }
}
+ for (i = 0; i < apc->num_queues; i++) {
+ txq = &apc->tx_qp[i].txq;
+ while ((skb = skb_dequeue(&txq->pending_skbs))) {
+ mana_unmap_skb(skb, apc);
+ dev_kfree_skb_any(skb);
+ }
+ atomic_set(&txq->pending_sends, 0);
+ }
/* We're 100% sure the queues can no longer be woken up, because
* we're sure now mana_poll_tx_cq() can't be running.
*/
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 021/149] riscv/kexec: load initrd high in available memory
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (19 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 020/149] net: mana: Fix MANA VF unload when hardware is unresponsive Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 022/149] riscv,mmio: Fix readX()-to-delay() ordering Greg Kroah-Hartman
` (140 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Torsten Duwe, Petr Tesarik,
Conor Dooley, Palmer Dabbelt
From: Torsten Duwe <duwe@suse.de>
commit 49af7a2cd5f678217b8b4f86a29411aebebf3e78 upstream.
When initrd is loaded low, the secondary kernel fails like this:
INITRD: 0xdc581000+0x00eef000 overlaps in-use memory region
This initrd load address corresponds to the _end symbol, but the
reservation is aligned on PMD_SIZE, as explained by a comment in
setup_bootmem().
It is technically possible to align the initrd load address accordingly,
leaving a hole between the end of kernel and the initrd, but it is much
simpler to allocate the initrd top-down.
Fixes: 838b3e28488f ("RISC-V: Load purgatory in kexec_file")
Signed-off-by: Torsten Duwe <duwe@suse.de>
Signed-off-by: Petr Tesarik <petr.tesarik.ext@huawei.com>
Cc: stable@vger.kernel.org
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Link: https://lore.kernel.org/all/67c8eb9eea25717c2c8208d9bfbfaa39e6e2a1c6.1690365011.git.petr.tesarik.ext@huawei.com/
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/riscv/kernel/elf_kexec.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c
index 38390d3bdcac..c08bb5c3b385 100644
--- a/arch/riscv/kernel/elf_kexec.c
+++ b/arch/riscv/kernel/elf_kexec.c
@@ -281,7 +281,7 @@ static void *elf_kexec_load(struct kimage *image, char *kernel_buf,
kbuf.buffer = initrd;
kbuf.bufsz = kbuf.memsz = initrd_len;
kbuf.buf_align = PAGE_SIZE;
- kbuf.top_down = false;
+ kbuf.top_down = true;
kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
ret = kexec_add_buffer(&kbuf);
if (ret)
--
2.41.0
^ permalink raw reply related [flat|nested] 167+ messages in thread
* [PATCH 6.1 022/149] riscv,mmio: Fix readX()-to-delay() ordering
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (20 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 021/149] riscv/kexec: load initrd high in available memory Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 023/149] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Greg Kroah-Hartman
` (139 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Andrea Parri, Palmer Dabbelt
From: Andrea Parri <parri.andrea@gmail.com>
commit 4eb2eb1b4c0eb07793c240744843498564a67b83 upstream.
Section 2.1 of the Platform Specification [1] states:
Unless otherwise specified by a given I/O device, I/O devices are on
ordering channel 0 (i.e., they are point-to-point strongly ordered).
which is not sufficient to guarantee that a readX() by a hart completes
before a subsequent delay() on the same hart (cf. memory-barriers.txt,
"Kernel I/O barrier effects").
Set the I(nput) bit in __io_ar() to restore the ordering, align inline
comments.
[1] https://github.com/riscv/riscv-platform-specs
Signed-off-by: Andrea Parri <parri.andrea@gmail.com>
Link: https://lore.kernel.org/r/20230803042738.5937-1-parri.andrea@gmail.com
Fixes: fab957c11efe ("RISC-V: Atomic and Locking Code")
Cc: stable@vger.kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/riscv/include/asm/mmio.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
--- a/arch/riscv/include/asm/mmio.h
+++ b/arch/riscv/include/asm/mmio.h
@@ -101,9 +101,9 @@ static inline u64 __raw_readq(const vola
* Relaxed I/O memory access primitives. These follow the Device memory
* ordering rules but do not guarantee any ordering relative to Normal memory
* accesses. These are defined to order the indicated access (either a read or
- * write) with all other I/O memory accesses. Since the platform specification
- * defines that all I/O regions are strongly ordered on channel 2, no explicit
- * fences are required to enforce this ordering.
+ * write) with all other I/O memory accesses to the same peripheral. Since the
+ * platform specification defines that all I/O regions are strongly ordered on
+ * channel 0, no explicit fences are required to enforce this ordering.
*/
/* FIXME: These are now the same as asm-generic */
#define __io_rbr() do {} while (0)
@@ -125,14 +125,14 @@ static inline u64 __raw_readq(const vola
#endif
/*
- * I/O memory access primitives. Reads are ordered relative to any
- * following Normal memory access. Writes are ordered relative to any prior
- * Normal memory access. The memory barriers here are necessary as RISC-V
+ * I/O memory access primitives. Reads are ordered relative to any following
+ * Normal memory read and delay() loop. Writes are ordered relative to any
+ * prior Normal memory write. The memory barriers here are necessary as RISC-V
* doesn't define any ordering between the memory space and the I/O space.
*/
#define __io_br() do {} while (0)
-#define __io_ar(v) __asm__ __volatile__ ("fence i,r" : : : "memory")
-#define __io_bw() __asm__ __volatile__ ("fence w,o" : : : "memory")
+#define __io_ar(v) ({ __asm__ __volatile__ ("fence i,ir" : : : "memory"); })
+#define __io_bw() ({ __asm__ __volatile__ ("fence w,o" : : : "memory"); })
#define __io_aw() mmiowb_set_pending()
#define readb(c) ({ u8 __v; __io_br(); __v = readb_cpu(c); __io_ar(__v); __v; })
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 023/149] riscv/kexec: handle R_RISCV_CALL_PLT relocation type
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (21 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 022/149] riscv,mmio: Fix readX()-to-delay() ordering Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 024/149] nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G Greg Kroah-Hartman
` (138 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Torsten Duwe, Petr Tesarik,
Li Zhengyu, Conor Dooley, Palmer Dabbelt
From: Torsten Duwe <duwe@suse.de>
commit d0b4f95a51038becce4bdab4789aa7ce59d4ea6e upstream.
R_RISCV_CALL has been deprecated and replaced by R_RISCV_CALL_PLT. See Enum
18-19 in Table 3. Relocation types here:
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc
It was deprecated in ("Deprecated R_RISCV_CALL, prefer R_RISCV_CALL_PLT"):
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/commit/a0dced85018d7a0ec17023c9389cbd70b1dbc1b0
Recent tools (at least GNU binutils-2.40) already use R_RISCV_CALL_PLT.
Kernels built with such binutils fail kexec_load_file(2) with:
kexec_image: Unknown rela relocation: 19
kexec_image: Error loading purgatory ret=-8
The binary code at the call site remains the same, so tell
arch_kexec_apply_relocations_add() to handle _PLT alike.
Fixes: 838b3e28488f ("RISC-V: Load purgatory in kexec_file")
Signed-off-by: Torsten Duwe <duwe@suse.de>
Signed-off-by: Petr Tesarik <petr.tesarik.ext@huawei.com>
Cc: Li Zhengyu <lizhengyu3@huawei.com>
Cc: stable@vger.kernel.org
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Link: https://lore.kernel.org/all/b046b164af8efd33bbdb7d4003273bdf9196a5b0.1690365011.git.petr.tesarik.ext@huawei.com/
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/riscv/kernel/elf_kexec.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c
index 5372b708fae2..38390d3bdcac 100644
--- a/arch/riscv/kernel/elf_kexec.c
+++ b/arch/riscv/kernel/elf_kexec.c
@@ -425,6 +425,7 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
* sym, instead of searching the whole relsec.
*/
case R_RISCV_PCREL_HI20:
+ case R_RISCV_CALL_PLT:
case R_RISCV_CALL:
*(u64 *)loc = CLEAN_IMM(UITYPE, *(u64 *)loc) |
ENCODE_UJTYPE_IMM(val - addr);
--
2.41.0
^ permalink raw reply related [flat|nested] 167+ messages in thread
* [PATCH 6.1 024/149] nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (22 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 023/149] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 025/149] drm/nouveau/gr: enable memory loads on helper invocation on all channels Greg Kroah-Hartman
` (137 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, August Wikerfors, Keith Busch
From: August Wikerfors <git@augustwikerfors.se>
commit 688b419c57c13637d95d7879e165fff3dec581eb upstream.
The Samsung PM9B1 512G SSD found in some Lenovo Yoga 7 14ARB7 laptop units
reports eui as 0001000200030004 when resuming from s2idle, causing the
device to be removed with this error in dmesg:
nvme nvme0: identifiers changed for nsid 1
To fix this, add a quirk to ignore namespace identifiers for this device.
Signed-off-by: August Wikerfors <git@augustwikerfors.se>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/nvme/host/pci.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -3504,7 +3504,8 @@ static const struct pci_device_id nvme_i
{ PCI_DEVICE(0x1d97, 0x2263), /* SPCC */
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
{ PCI_DEVICE(0x144d, 0xa80b), /* Samsung PM9B1 256G and 512G */
- .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
+ .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES |
+ NVME_QUIRK_BOGUS_NID, },
{ PCI_DEVICE(0x144d, 0xa809), /* Samsung MZALQ256HBJD 256G */
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
{ PCI_DEVICE(0x1cc4, 0x6303), /* UMIS RPJTJ512MGE1QDY 512G */
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 025/149] drm/nouveau/gr: enable memory loads on helper invocation on all channels
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (23 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 024/149] nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 026/149] drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issues Greg Kroah-Hartman
` (136 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ben Skeggs, David Airlie, nouveau,
Karol Herbst, Dave Airlie
From: Karol Herbst <kherbst@redhat.com>
commit 1cb9e2ef66d53b020842b18762e30d0eb4384de8 upstream.
We have a lurking bug where Fragment Shader Helper Invocations can't load
from memory. But this is actually required in OpenGL and is causing random
hangs or failures in random shaders.
It is unknown how widespread this issue is, but shaders hitting this can
end up with infinite loops.
We enable those only on all Kepler and newer GPUs where we use our own
Firmware.
Nvidia's firmware provides a way to set a kernelspace controlled list of
mmio registers in the gr space from push buffers via MME macros.
v2: drop code for gm200 and newer.
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: David Airlie <airlied@gmail.com>
Cc: nouveau@lists.freedesktop.org
Cc: stable@vger.kernel.org # 4.19+
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230622152017.2512101-1-kherbst@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h | 1 +
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c | 4 +++-
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.c | 10 ++++++++++
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.c | 1 +
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.c | 1 +
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c | 1 +
6 files changed, 17 insertions(+), 1 deletion(-)
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h
@@ -123,6 +123,7 @@ void gk104_grctx_generate_r418800(struct
extern const struct gf100_grctx_func gk110_grctx;
void gk110_grctx_generate_r419eb0(struct gf100_gr *);
+void gk110_grctx_generate_r419f78(struct gf100_gr *);
extern const struct gf100_grctx_func gk110b_grctx;
extern const struct gf100_grctx_func gk208_grctx;
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c
@@ -916,7 +916,9 @@ static void
gk104_grctx_generate_r419f78(struct gf100_gr *gr)
{
struct nvkm_device *device = gr->base.engine.subdev.device;
- nvkm_mask(device, 0x419f78, 0x00000001, 0x00000000);
+
+ /* bit 3 set disables loads in fp helper invocations, we need it enabled */
+ nvkm_mask(device, 0x419f78, 0x00000009, 0x00000000);
}
void
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.c
@@ -820,6 +820,15 @@ gk110_grctx_generate_r419eb0(struct gf10
nvkm_mask(device, 0x419eb0, 0x00001000, 0x00001000);
}
+void
+gk110_grctx_generate_r419f78(struct gf100_gr *gr)
+{
+ struct nvkm_device *device = gr->base.engine.subdev.device;
+
+ /* bit 3 set disables loads in fp helper invocations, we need it enabled */
+ nvkm_mask(device, 0x419f78, 0x00000008, 0x00000000);
+}
+
const struct gf100_grctx_func
gk110_grctx = {
.main = gf100_grctx_generate_main,
@@ -852,4 +861,5 @@ gk110_grctx = {
.gpc_tpc_nr = gk104_grctx_generate_gpc_tpc_nr,
.r418800 = gk104_grctx_generate_r418800,
.r419eb0 = gk110_grctx_generate_r419eb0,
+ .r419f78 = gk110_grctx_generate_r419f78,
};
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.c
@@ -101,4 +101,5 @@ gk110b_grctx = {
.gpc_tpc_nr = gk104_grctx_generate_gpc_tpc_nr,
.r418800 = gk104_grctx_generate_r418800,
.r419eb0 = gk110_grctx_generate_r419eb0,
+ .r419f78 = gk110_grctx_generate_r419f78,
};
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.c
@@ -566,4 +566,5 @@ gk208_grctx = {
.dist_skip_table = gf117_grctx_generate_dist_skip_table,
.gpc_tpc_nr = gk104_grctx_generate_gpc_tpc_nr,
.r418800 = gk104_grctx_generate_r418800,
+ .r419f78 = gk110_grctx_generate_r419f78,
};
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c
@@ -991,4 +991,5 @@ gm107_grctx = {
.r406500 = gm107_grctx_generate_r406500,
.gpc_tpc_nr = gk104_grctx_generate_gpc_tpc_nr,
.r419e00 = gm107_grctx_generate_r419e00,
+ .r419f78 = gk110_grctx_generate_r419f78,
};
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 026/149] drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issues
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (24 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 025/149] drm/nouveau/gr: enable memory loads on helper invocation on all channels Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 027/149] drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap() Greg Kroah-Hartman
` (135 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Lyude Paul, Karol Herbst
From: Lyude Paul <lyude@redhat.com>
commit e4060dad253352382b20420d8ef98daab24dbc17 upstream.
Currently we use the drm_dp_dpcd_read_caps() helper in the DRM side of
nouveau in order to read the DPCD of a DP connector, which makes sure we do
the right thing and also check for extended DPCD caps. However, it turns
out we're not currently doing this on the nvkm side since we don't have
access to the drm_dp_aux structure there - which means that the DRM side of
the driver and the NVKM side can end up with different DPCD capabilities
for the same connector.
Ideally in order to fix this, we just want to use the
drm_dp_read_dpcd_caps() helper in nouveau. That's not currently possible
though, and is going to depend on having a bunch of the DP code moved out
of nvkm and into the DRM side of things as part of the GSP enablement work.
Until then however, let's workaround this problem by porting a copy of
drm_dp_read_dpcd_caps() into NVKM - which should fix this issue.
Signed-off-by: Lyude Paul <lyude@redhat.com>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Link: https://gitlab.freedesktop.org/drm/nouveau/-/issues/211
Link: https://patchwork.freedesktop.org/patch/msgid/20230728225858.350581-1-lyude@redhat.com
(cherry picked from commit cc4adf3a7323212f303bc9ff0f96346c44fcba06 in drm-misc-next)
Cc: <stable@vger.kernel.org> # 6.3+
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 48 +++++++++++++++++++++++++-
1 file changed, 47 insertions(+), 1 deletion(-)
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c
@@ -26,6 +26,8 @@
#include "head.h"
#include "ior.h"
+#include <drm/display/drm_dp.h>
+
#include <subdev/bios.h>
#include <subdev/bios/init.h>
#include <subdev/gpio.h>
@@ -474,6 +476,50 @@ nvkm_dp_train(struct nvkm_outp *outp, u3
return ret;
}
+/* XXX: This is a big fat hack, and this is just drm_dp_read_dpcd_caps()
+ * converted to work inside nvkm. This is a temporary holdover until we start
+ * passing the drm_dp_aux device through NVKM
+ */
+static int
+nvkm_dp_read_dpcd_caps(struct nvkm_outp *outp)
+{
+ struct nvkm_i2c_aux *aux = outp->dp.aux;
+ u8 dpcd_ext[DP_RECEIVER_CAP_SIZE];
+ int ret;
+
+ ret = nvkm_rdaux(aux, DPCD_RC00_DPCD_REV, outp->dp.dpcd, DP_RECEIVER_CAP_SIZE);
+ if (ret < 0)
+ return ret;
+
+ /*
+ * Prior to DP1.3 the bit represented by
+ * DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT was reserved.
+ * If it is set DP_DPCD_REV at 0000h could be at a value less than
+ * the true capability of the panel. The only way to check is to
+ * then compare 0000h and 2200h.
+ */
+ if (!(outp->dp.dpcd[DP_TRAINING_AUX_RD_INTERVAL] &
+ DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT))
+ return 0;
+
+ ret = nvkm_rdaux(aux, DP_DP13_DPCD_REV, dpcd_ext, sizeof(dpcd_ext));
+ if (ret < 0)
+ return ret;
+
+ if (outp->dp.dpcd[DP_DPCD_REV] > dpcd_ext[DP_DPCD_REV]) {
+ OUTP_DBG(outp, "Extended DPCD rev less than base DPCD rev (%d > %d)\n",
+ outp->dp.dpcd[DP_DPCD_REV], dpcd_ext[DP_DPCD_REV]);
+ return 0;
+ }
+
+ if (!memcmp(outp->dp.dpcd, dpcd_ext, sizeof(dpcd_ext)))
+ return 0;
+
+ memcpy(outp->dp.dpcd, dpcd_ext, sizeof(dpcd_ext));
+
+ return 0;
+}
+
void
nvkm_dp_disable(struct nvkm_outp *outp, struct nvkm_ior *ior)
{
@@ -630,7 +676,7 @@ nvkm_dp_enable(struct nvkm_outp *outp, b
memset(outp->dp.lttpr, 0x00, sizeof(outp->dp.lttpr));
}
- if (!nvkm_rdaux(aux, DPCD_RC00_DPCD_REV, outp->dp.dpcd, sizeof(outp->dp.dpcd))) {
+ if (!nvkm_dp_read_dpcd_caps(outp)) {
const u8 rates[] = { 0x1e, 0x14, 0x0a, 0x06, 0 };
const u8 *rate;
int rate_max;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 027/149] drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (25 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 026/149] drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issues Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 028/149] drm/amdgpu: fix possible UAF in amdgpu_cs_pass1() Greg Kroah-Hartman
` (134 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Daniel Vetter, Roman Stratiienko,
Boris Brezillon, Thomas Zimmermann
From: Boris Brezillon <boris.brezillon@collabora.com>
commit 07dd476f6116966cb2006e25fdcf48f0715115ff upstream.
The dma-buf backend is supposed to provide its own vm_ops, but some
implementation just have nothing special to do and leave vm_ops
untouched, probably expecting this field to be zero initialized (this
is the case with the system_heap implementation for instance).
Let's reset vma->vm_ops to NULL to keep things working with these
implementations.
Fixes: 26d3ac3cb04d ("drm/shmem-helpers: Redirect mmap for imported dma-buf")
Cc: <stable@vger.kernel.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Reported-by: Roman Stratiienko <r.stratiienko@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Tested-by: Roman Stratiienko <r.stratiienko@gmail.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230724112610.60974-1-boris.brezillon@collabora.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/drm_gem_shmem_helper.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/drivers/gpu/drm/drm_gem_shmem_helper.c
+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c
@@ -622,7 +622,13 @@ int drm_gem_shmem_mmap(struct drm_gem_sh
int ret;
if (obj->import_attach) {
+ /* Reset both vm_ops and vm_private_data, so we don't end up with
+ * vm_ops pointing to our implementation if the dma-buf backend
+ * doesn't set those fields.
+ */
vma->vm_private_data = NULL;
+ vma->vm_ops = NULL;
+
ret = dma_buf_mmap(obj->dma_buf, vma, 0);
/* Drop the reference drm_gem_mmap_obj() acquired.*/
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 028/149] drm/amdgpu: fix possible UAF in amdgpu_cs_pass1()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (26 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 027/149] drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap() Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 029/149] drm/amd/display: check attr flag before set cursor degamma on DCN3+ Greg Kroah-Hartman
` (133 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Guchun Chen, Christian König,
Alex Deucher
From: Alex Deucher <alexander.deucher@amd.com>
commit 90e065677e0362a777b9db97ea21d43a39211399 upstream.
Since the gang_size check is outside of chunk parsing
loop, we need to reset i before we free the chunk data.
Suggested by Ye Zhang (@VAR10CK) of Baidu Security.
Reviewed-by: Guchun Chen <guchun.chen@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -287,7 +287,7 @@ static int amdgpu_cs_pass1(struct amdgpu
if (!p->gang_size) {
ret = -EINVAL;
- goto free_partial_kdata;
+ goto free_all_kdata;
}
for (i = 0; i < p->gang_size; ++i) {
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 029/149] drm/amd/display: check attr flag before set cursor degamma on DCN3+
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (27 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 028/149] drm/amdgpu: fix possible UAF in amdgpu_cs_pass1() Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 030/149] drm/amdgpu: add S/G display parameter Greg Kroah-Hartman
` (132 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Melissa Wen, Harry Wentland,
Alex Hung, Alex Deucher
From: Melissa Wen <mwen@igalia.com>
commit 96b020e2163fb2197266b2f71b1007495206e6bb upstream.
Don't set predefined degamma curve to cursor plane if the cursor
attribute flag is not set. Applying a degamma curve to the cursor by
default breaks userspace expectation. Checking the flag before
performing any color transformation prevents too dark cursor gamma in
DCN3+ on many Linux desktop environment (KDE Plasma, GNOME,
wlroots-based, etc.) as reported at:
- https://gitlab.freedesktop.org/drm/amd/-/issues/1513
This is the same approach followed by DCN2 drivers where the issue is
not present.
Fixes: 03f54d7d3448 ("drm/amd/display: Add DCN3 DPP")
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1513
Signed-off-by: Melissa Wen <mwen@igalia.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Tested-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
--- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c
@@ -357,8 +357,11 @@ void dpp3_set_cursor_attributes(
int cur_rom_en = 0;
if (color_format == CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA ||
- color_format == CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA)
- cur_rom_en = 1;
+ color_format == CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA) {
+ if (cursor_attributes->attribute_flags.bits.ENABLE_CURSOR_DEGAMMA) {
+ cur_rom_en = 1;
+ }
+ }
REG_UPDATE_3(CURSOR0_CONTROL,
CUR0_MODE, color_format,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 030/149] drm/amdgpu: add S/G display parameter
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (28 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 029/149] drm/amd/display: check attr flag before set cursor degamma on DCN3+ Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 031/149] drm/amd: Disable S/G for APUs when 64GB or more host memory Greg Kroah-Hartman
` (131 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Christian König,
Alex Deucher
From: Alex Deucher <alexander.deucher@amd.com>
commit bf0207e1727031798f300afa17f9bbeceac6da87 upstream.
Some users have reported flickerng with S/G display. We've
tried extensively to reproduce and debug the issue on a wide
variety of platform configurations (DRAM bandwidth, etc.) and
a variety of monitors, but so far have not been able to. We
disabled S/G display on a number of platforms to address this
but that leads to failure to pin framebuffers errors and
blank displays when there is memory pressure or no displays
at all on systems with limited carveout (e.g., Chromebooks).
Add a option to disable this as a debugging option as a
way for users to disable this, depending on their use case,
and for us to help debug this further.
v2: fix typo
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 11 +++++++++++
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 +++
3 files changed, 15 insertions(+)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -242,6 +242,7 @@ extern int amdgpu_num_kcq;
#define AMDGPU_VCNFW_LOG_SIZE (32 * 1024)
extern int amdgpu_vcnfw_log;
+extern int amdgpu_sg_display;
#define AMDGPU_VM_MAX_NUM_CTX 4096
#define AMDGPU_SG_THRESHOLD (256*1024*1024)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -185,6 +185,7 @@ int amdgpu_num_kcq = -1;
int amdgpu_smartshift_bias;
int amdgpu_use_xgmi_p2p = 1;
int amdgpu_vcnfw_log;
+int amdgpu_sg_display = -1; /* auto */
static void amdgpu_drv_delayed_reset_work_handler(struct work_struct *work);
@@ -930,6 +931,16 @@ MODULE_PARM_DESC(vcnfw_log, "Enable vcnf
module_param_named(vcnfw_log, amdgpu_vcnfw_log, int, 0444);
/**
+ * DOC: sg_display (int)
+ * Disable S/G (scatter/gather) display (i.e., display from system memory).
+ * This option is only relevant on APUs. Set this option to 0 to disable
+ * S/G display if you experience flickering or other issues under memory
+ * pressure and report the issue.
+ */
+MODULE_PARM_DESC(sg_display, "S/G Display (-1 = auto (default), 0 = disable)");
+module_param_named(sg_display, amdgpu_sg_display, int, 0444);
+
+/**
* DOC: smu_pptable_id (int)
* Used to override pptable id. id = 0 use VBIOS pptable.
* id > 0 use the soft pptable with specicfied id.
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -1634,6 +1634,9 @@ static int amdgpu_dm_init(struct amdgpu_
}
break;
}
+ if (init_data.flags.gpu_vm_support &&
+ (amdgpu_sg_display == 0))
+ init_data.flags.gpu_vm_support = false;
if (init_data.flags.gpu_vm_support)
adev->mode_info.gpu_vm_support = true;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 031/149] drm/amd: Disable S/G for APUs when 64GB or more host memory
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (29 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 030/149] drm/amdgpu: add S/G display parameter Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 032/149] drm/amd/display: limit DPIA link rate to HBR3 Greg Kroah-Hartman
` (130 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hamza Mahfooz, Roman Li,
Mario Limonciello, Alex Deucher
From: Mario Limonciello <mario.limonciello@amd.com>
commit 08fffa74d9772d9538338be3f304006c94dde6f0 upstream.
Users report a white flickering screen on multiple systems that
is tied to having 64GB or more memory. When S/G is enabled pages
will get pinned to both VRAM carve out and system RAM leading to
this.
Until it can be fixed properly, disable S/G when 64GB of memory or
more is detected. This will force pages to be pinned into VRAM.
This should fix white screen flickers but if VRAM pressure is
encountered may lead to black screens. It's a trade-off for now.
Fixes: 81d0bcf99009 ("drm/amdgpu: make display pinning more flexible (v2)")
Cc: Hamza Mahfooz <Hamza.Mahfooz@amd.com>
Cc: Roman Li <roman.li@amd.com>
Cc: <stable@vger.kernel.org> # 6.1.y: bf0207e172703 ("drm/amdgpu: add S/G display parameter")
Cc: <stable@vger.kernel.org> # 6.4.y
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2735
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2354
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 ++++++++++++++++++++++
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 +---
3 files changed, 29 insertions(+), 3 deletions(-)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1263,6 +1263,7 @@ int amdgpu_device_gpu_recover(struct amd
void amdgpu_device_pci_config_reset(struct amdgpu_device *adev);
int amdgpu_device_pci_reset(struct amdgpu_device *adev);
bool amdgpu_device_need_post(struct amdgpu_device *adev);
+bool amdgpu_sg_display_supported(struct amdgpu_device *adev);
bool amdgpu_device_pcie_dynamic_switching_supported(void);
bool amdgpu_device_should_use_aspm(struct amdgpu_device *adev);
bool amdgpu_device_aspm_support_quirk(void);
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1334,6 +1334,32 @@ bool amdgpu_device_need_post(struct amdg
}
/*
+ * On APUs with >= 64GB white flickering has been observed w/ SG enabled.
+ * Disable S/G on such systems until we have a proper fix.
+ * https://gitlab.freedesktop.org/drm/amd/-/issues/2354
+ * https://gitlab.freedesktop.org/drm/amd/-/issues/2735
+ */
+bool amdgpu_sg_display_supported(struct amdgpu_device *adev)
+{
+ switch (amdgpu_sg_display) {
+ case -1:
+ break;
+ case 0:
+ return false;
+ case 1:
+ return true;
+ default:
+ return false;
+ }
+ if ((totalram_pages() << (PAGE_SHIFT - 10)) +
+ (adev->gmc.real_vram_size / 1024) >= 64000000) {
+ DRM_WARN("Disabling S/G due to >=64GB RAM\n");
+ return false;
+ }
+ return true;
+}
+
+/*
* Intel hosts such as Raptor Lake and Sapphire Rapids don't support dynamic
* speed switching. Until we have confirmation from Intel that a specific host
* supports it, it's safer that we keep it disabled for all.
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -1634,9 +1634,8 @@ static int amdgpu_dm_init(struct amdgpu_
}
break;
}
- if (init_data.flags.gpu_vm_support &&
- (amdgpu_sg_display == 0))
- init_data.flags.gpu_vm_support = false;
+ if (init_data.flags.gpu_vm_support)
+ init_data.flags.gpu_vm_support = amdgpu_sg_display_supported(adev);
if (init_data.flags.gpu_vm_support)
adev->mode_info.gpu_vm_support = true;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 032/149] drm/amd/display: limit DPIA link rate to HBR3
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (30 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 031/149] drm/amd: Disable S/G for APUs when 64GB or more host memory Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 033/149] cpuidle: dt_idle_genpd: Add helper function to remove genpd topology Greg Kroah-Hartman
` (129 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mario Limonciello, Alex Deucher,
Stylon Wang, Peichen Huang, Mustapha Ghaddar, Daniel Wheeler
From: Peichen Huang <peichen.huang@amd.com>
commit 0e69ef6ea82e8eece7d2b2b45a0da9670eaaefff upstream.
[Why]
DPIA doesn't support UHBR, driver should not enable UHBR
for dp tunneling
[How]
limit DPIA link rate to HBR3
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Acked-by: Stylon Wang <stylon.wang@amd.com>
Signed-off-by: Peichen Huang <peichen.huang@amd.com>
Reviewed-by: Mustapha Ghaddar <Mustapha.Ghaddar@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc_link.c | 5 +++++
1 file changed, 5 insertions(+)
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
@@ -1141,6 +1141,11 @@ static bool detect_link_and_local_sink(s
(link->dpcd_caps.dongle_type !=
DISPLAY_DONGLE_DP_HDMI_CONVERTER))
converter_disable_audio = true;
+
+ /* limited link rate to HBR3 for DPIA until we implement USB4 V2 */
+ if (link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA &&
+ link->reported_link_cap.link_rate > LINK_RATE_HIGH3)
+ link->reported_link_cap.link_rate = LINK_RATE_HIGH3;
break;
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 033/149] cpuidle: dt_idle_genpd: Add helper function to remove genpd topology
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (31 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 032/149] drm/amd/display: limit DPIA link rate to HBR3 Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 034/149] hwmon: (pmbus/bel-pfe) Enable PMBUS_SKIP_STATUS_CHECK for pfe1100 Greg Kroah-Hartman
` (128 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Ulf Hanssson, Maulik Shah
From: Maulik Shah <quic_mkshah@quicinc.com>
commit 9a8fa00dad3c7b260071f2f220cfb00505372c40 upstream.
Genpd parent and child domain topology created using dt_idle_pd_init_topology()
needs to be removed during error cases.
Add new helper function dt_idle_pd_remove_topology() for same.
Cc: stable@vger.kernel.org
Reviewed-by: Ulf Hanssson <ulf.hansson@linaro.org>
Signed-off-by: Maulik Shah <quic_mkshah@quicinc.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/cpuidle/dt_idle_genpd.c | 24 ++++++++++++++++++++++++
drivers/cpuidle/dt_idle_genpd.h | 7 +++++++
2 files changed, 31 insertions(+)
--- a/drivers/cpuidle/dt_idle_genpd.c
+++ b/drivers/cpuidle/dt_idle_genpd.c
@@ -152,6 +152,30 @@ int dt_idle_pd_init_topology(struct devi
return 0;
}
+int dt_idle_pd_remove_topology(struct device_node *np)
+{
+ struct device_node *node;
+ struct of_phandle_args child, parent;
+ int ret;
+
+ for_each_child_of_node(np, node) {
+ if (of_parse_phandle_with_args(node, "power-domains",
+ "#power-domain-cells", 0, &parent))
+ continue;
+
+ child.np = node;
+ child.args_count = 0;
+ ret = of_genpd_remove_subdomain(&parent, &child);
+ of_node_put(parent.np);
+ if (ret) {
+ of_node_put(node);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
struct device *dt_idle_attach_cpu(int cpu, const char *name)
{
struct device *dev;
--- a/drivers/cpuidle/dt_idle_genpd.h
+++ b/drivers/cpuidle/dt_idle_genpd.h
@@ -14,6 +14,8 @@ struct generic_pm_domain *dt_idle_pd_all
int dt_idle_pd_init_topology(struct device_node *np);
+int dt_idle_pd_remove_topology(struct device_node *np);
+
struct device *dt_idle_attach_cpu(int cpu, const char *name);
void dt_idle_detach_cpu(struct device *dev);
@@ -35,6 +37,11 @@ static inline int dt_idle_pd_init_topolo
{
return 0;
}
+
+static inline int dt_idle_pd_remove_topology(struct device_node *np)
+{
+ return 0;
+}
static inline struct device *dt_idle_attach_cpu(int cpu, const char *name)
{
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 034/149] hwmon: (pmbus/bel-pfe) Enable PMBUS_SKIP_STATUS_CHECK for pfe1100
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (32 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 033/149] cpuidle: dt_idle_genpd: Add helper function to remove genpd topology Greg Kroah-Hartman
@ 2023-08-13 21:17 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 035/149] radix tree test suite: fix incorrect allocation size for pthreads Greg Kroah-Hartman
` (127 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:17 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Tao Ren, Guenter Roeck
From: Tao Ren <rentao.bupt@gmail.com>
commit f38963b9cd0645a336cf30c5da2e89e34e34fec3 upstream.
Skip status check for both pfe1100 and pfe3000 because the communication
error is also observed on pfe1100 devices.
Signed-off-by: Tao Ren <rentao.bupt@gmail.com>
Fixes: 626bb2f3fb3c hwmon: (pmbus) add driver for BEL PFE1100 and PFE3000
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230804221403.28931-1-rentao.bupt@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/hwmon/pmbus/bel-pfe.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
--- a/drivers/hwmon/pmbus/bel-pfe.c
+++ b/drivers/hwmon/pmbus/bel-pfe.c
@@ -17,12 +17,13 @@
enum chips {pfe1100, pfe3000};
/*
- * Disable status check for pfe3000 devices, because some devices report
- * communication error (invalid command) for VOUT_MODE command (0x20)
- * although correct VOUT_MODE (0x16) is returned: it leads to incorrect
- * exponent in linear mode.
+ * Disable status check because some devices report communication error
+ * (invalid command) for VOUT_MODE command (0x20) although the correct
+ * VOUT_MODE (0x16) is returned: it leads to incorrect exponent in linear
+ * mode.
+ * This affects both pfe3000 and pfe1100.
*/
-static struct pmbus_platform_data pfe3000_plat_data = {
+static struct pmbus_platform_data pfe_plat_data = {
.flags = PMBUS_SKIP_STATUS_CHECK,
};
@@ -94,16 +95,15 @@ static int pfe_pmbus_probe(struct i2c_cl
int model;
model = (int)i2c_match_id(pfe_device_id, client)->driver_data;
+ client->dev.platform_data = &pfe_plat_data;
/*
* PFE3000-12-069RA devices may not stay in page 0 during device
* probe which leads to probe failure (read status word failed).
* So let's set the device to page 0 at the beginning.
*/
- if (model == pfe3000) {
- client->dev.platform_data = &pfe3000_plat_data;
+ if (model == pfe3000)
i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
- }
return pmbus_do_probe(client, &pfe_driver_info[model]);
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 035/149] radix tree test suite: fix incorrect allocation size for pthreads
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (33 preceding siblings ...)
2023-08-13 21:17 ` [PATCH 6.1 034/149] hwmon: (pmbus/bel-pfe) Enable PMBUS_SKIP_STATUS_CHECK for pfe1100 Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 036/149] nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput Greg Kroah-Hartman
` (126 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Colin Ian King,
Konstantin Khlebnikov, Matthew Wilcox (Oracle), Andrew Morton
From: Colin Ian King <colin.i.king@gmail.com>
commit cac7ea57a06016e4914848b707477fb07ee4ae1c upstream.
Currently the pthread allocation for each array item is based on the size
of a pthread_t pointer and should be the size of the pthread_t structure,
so the allocation is under-allocating the correct size. Fix this by using
the size of each element in the pthreads array.
Static analysis cppcheck reported:
tools/testing/radix-tree/regression1.c:180:2: warning: Size of pointer
'threads' used instead of size of its data. [pointerSize]
Link: https://lkml.kernel.org/r/20230727160930.632674-1-colin.i.king@gmail.com
Fixes: 1366c37ed84b ("radix tree test harness")
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/radix-tree/regression1.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/tools/testing/radix-tree/regression1.c
+++ b/tools/testing/radix-tree/regression1.c
@@ -177,7 +177,7 @@ void regression1_test(void)
nr_threads = 2;
pthread_barrier_init(&worker_barrier, NULL, nr_threads);
- threads = malloc(nr_threads * sizeof(pthread_t *));
+ threads = malloc(nr_threads * sizeof(*threads));
for (i = 0; i < nr_threads; i++) {
arg = i;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 036/149] nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (34 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 035/149] radix tree test suite: fix incorrect allocation size for pthreads Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 037/149] drm/amd/pm: fulfill swsmu peak profiling mode shader/memory clock settings Greg Kroah-Hartman
` (125 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ryusuke Konishi,
syzbot+74db8b3087f293d3a13a, Andrew Morton
From: Ryusuke Konishi <konishi.ryusuke@gmail.com>
commit f8654743a0e6909dc634cbfad6db6816f10f3399 upstream.
During unmount process of nilfs2, nothing holds nilfs_root structure after
nilfs2 detaches its writer in nilfs_detach_log_writer(). Previously,
nilfs_evict_inode() could cause use-after-free read for nilfs_root if
inodes are left in "garbage_list" and released by nilfs_dispose_list at
the end of nilfs_detach_log_writer(), and this bug was fixed by commit
9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in
nilfs_evict_inode()").
However, it turned out that there is another possibility of UAF in the
call path where mark_inode_dirty_sync() is called from iput():
nilfs_detach_log_writer()
nilfs_dispose_list()
iput()
mark_inode_dirty_sync()
__mark_inode_dirty()
nilfs_dirty_inode()
__nilfs_mark_inode_dirty()
nilfs_load_inode_block() --> causes UAF of nilfs_root struct
This can happen after commit 0ae45f63d4ef ("vfs: add support for a
lazytime mount option"), which changed iput() to call
mark_inode_dirty_sync() on its final reference if i_state has I_DIRTY_TIME
flag and i_nlink is non-zero.
This issue appears after commit 28a65b49eb53 ("nilfs2: do not write dirty
data after degenerating to read-only") when using the syzbot reproducer,
but the issue has potentially existed before.
Fix this issue by adding a "purging flag" to the nilfs structure, setting
that flag while disposing the "garbage_list" and checking it in
__nilfs_mark_inode_dirty().
Unlike commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root
in nilfs_evict_inode()"), this patch does not rely on ns_writer to
determine whether to skip operations, so as not to break recovery on
mount. The nilfs_salvage_orphan_logs routine dirties the buffer of
salvaged data before attaching the log writer, so changing
__nilfs_mark_inode_dirty() to skip the operation when ns_writer is NULL
will cause recovery write to fail. The purpose of using the cleanup-only
flag is to allow for narrowing of such conditions.
Link: https://lkml.kernel.org/r/20230728191318.33047-1-konishi.ryusuke@gmail.com
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Reported-by: syzbot+74db8b3087f293d3a13a@syzkaller.appspotmail.com
Closes: https://lkml.kernel.org/r/000000000000b4e906060113fd63@google.com
Fixes: 0ae45f63d4ef ("vfs: add support for a lazytime mount option")
Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Cc: <stable@vger.kernel.org> # 4.0+
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/nilfs2/inode.c | 8 ++++++++
fs/nilfs2/segment.c | 2 ++
fs/nilfs2/the_nilfs.h | 2 ++
3 files changed, 12 insertions(+)
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -1101,9 +1101,17 @@ int nilfs_set_file_dirty(struct inode *i
int __nilfs_mark_inode_dirty(struct inode *inode, int flags)
{
+ struct the_nilfs *nilfs = inode->i_sb->s_fs_info;
struct buffer_head *ibh;
int err;
+ /*
+ * Do not dirty inodes after the log writer has been detached
+ * and its nilfs_root struct has been freed.
+ */
+ if (unlikely(nilfs_purging(nilfs)))
+ return 0;
+
err = nilfs_load_inode_block(inode, &ibh);
if (unlikely(err)) {
nilfs_warn(inode->i_sb,
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -2843,6 +2843,7 @@ void nilfs_detach_log_writer(struct supe
nilfs_segctor_destroy(nilfs->ns_writer);
nilfs->ns_writer = NULL;
}
+ set_nilfs_purging(nilfs);
/* Force to free the list of dirty files */
spin_lock(&nilfs->ns_inode_lock);
@@ -2855,4 +2856,5 @@ void nilfs_detach_log_writer(struct supe
up_write(&nilfs->ns_segctor_sem);
nilfs_dispose_list(nilfs, &garbage_list, 1);
+ clear_nilfs_purging(nilfs);
}
--- a/fs/nilfs2/the_nilfs.h
+++ b/fs/nilfs2/the_nilfs.h
@@ -29,6 +29,7 @@ enum {
THE_NILFS_DISCONTINUED, /* 'next' pointer chain has broken */
THE_NILFS_GC_RUNNING, /* gc process is running */
THE_NILFS_SB_DIRTY, /* super block is dirty */
+ THE_NILFS_PURGING, /* disposing dirty files for cleanup */
};
/**
@@ -208,6 +209,7 @@ THE_NILFS_FNS(INIT, init)
THE_NILFS_FNS(DISCONTINUED, discontinued)
THE_NILFS_FNS(GC_RUNNING, gc_running)
THE_NILFS_FNS(SB_DIRTY, sb_dirty)
+THE_NILFS_FNS(PURGING, purging)
/*
* Mount option operations
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 037/149] drm/amd/pm: fulfill swsmu peak profiling mode shader/memory clock settings
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (35 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 036/149] nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 038/149] drm/amd/pm: expose swctf threshold setting for legacy powerplay Greg Kroah-Hartman
` (124 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mario Limonciello, Evan Quan,
Alex Deucher
From: Evan Quan <evan.quan@amd.com>
commit 975b4b1d90ccf83da252907108f4090fb61b816e upstream
Enable peak profiling mode shader/memory clocks reporting for swsmu
framework.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/include/kgd_pp_interface.h | 2 ++
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 8 ++++++++
2 files changed, 10 insertions(+)
--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
@@ -139,6 +139,8 @@ enum amd_pp_sensors {
AMDGPU_PP_SENSOR_MIN_FAN_RPM,
AMDGPU_PP_SENSOR_MAX_FAN_RPM,
AMDGPU_PP_SENSOR_VCN_POWER_STATE,
+ AMDGPU_PP_SENSOR_PEAK_PSTATE_SCLK,
+ AMDGPU_PP_SENSOR_PEAK_PSTATE_MCLK,
};
enum amd_pp_task {
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -2520,6 +2520,14 @@ static int smu_read_sensor(void *handle,
*((uint32_t *)data) = pstate_table->uclk_pstate.standard * 100;
*size = 4;
break;
+ case AMDGPU_PP_SENSOR_PEAK_PSTATE_SCLK:
+ *((uint32_t *)data) = pstate_table->gfxclk_pstate.peak * 100;
+ *size = 4;
+ break;
+ case AMDGPU_PP_SENSOR_PEAK_PSTATE_MCLK:
+ *((uint32_t *)data) = pstate_table->uclk_pstate.peak * 100;
+ *size = 4;
+ break;
case AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK:
ret = smu_feature_get_enabled_mask(smu, (uint64_t *)data);
*size = 8;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 038/149] drm/amd/pm: expose swctf threshold setting for legacy powerplay
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (36 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 037/149] drm/amd/pm: fulfill swsmu peak profiling mode shader/memory clock settings Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 039/149] drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings Greg Kroah-Hartman
` (123 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mario Limonciello, Evan Quan,
Lijo Lazar, Alex Deucher
From: Evan Quan <evan.quan@amd.com>
commit 064329c595da56eff6d7a7e7760660c726433139 upstream
Preparation for coming optimization which eliminates the influence of
GPU temperature momentary fluctuation.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 2 ++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/hardwaremanager.c | 4 +++-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 2 ++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 10 ++++++++++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 4 ++++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 4 ++++
drivers/gpu/drm/amd/pm/powerplay/inc/power_state.h | 1 +
7 files changed, 26 insertions(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
+++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
@@ -89,6 +89,8 @@ struct amdgpu_dpm_thermal {
int max_mem_crit_temp;
/* memory max emergency(shutdown) temp */
int max_mem_emergency_temp;
+ /* SWCTF threshold */
+ int sw_ctf_threshold;
/* was last interrupt low to high or high to low */
bool high_to_low;
/* interrupt source */
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/hardwaremanager.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/hardwaremanager.c
@@ -241,7 +241,8 @@ int phm_start_thermal_controller(struct
TEMP_RANGE_MAX,
TEMP_RANGE_MIN,
TEMP_RANGE_MAX,
- TEMP_RANGE_MAX};
+ TEMP_RANGE_MAX,
+ 0};
struct amdgpu_device *adev = hwmgr->adev;
if (!hwmgr->not_vf)
@@ -265,6 +266,7 @@ int phm_start_thermal_controller(struct
adev->pm.dpm.thermal.min_mem_temp = range.mem_min;
adev->pm.dpm.thermal.max_mem_crit_temp = range.mem_crit_max;
adev->pm.dpm.thermal.max_mem_emergency_temp = range.mem_emergency_max;
+ adev->pm.dpm.thermal.sw_ctf_threshold = range.sw_ctf_threshold;
return ret;
}
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
@@ -5381,6 +5381,8 @@ static int smu7_get_thermal_temperature_
thermal_data->max = data->thermal_temp_setting.temperature_shutdown *
PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
+ thermal_data->sw_ctf_threshold = thermal_data->max;
+
return 0;
}
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
@@ -5221,6 +5221,9 @@ static int vega10_get_thermal_temperatur
{
struct vega10_hwmgr *data = hwmgr->backend;
PPTable_t *pp_table = &(data->smc_state_table.pp_table);
+ struct phm_ppt_v2_information *pp_table_info =
+ (struct phm_ppt_v2_information *)(hwmgr->pptable);
+ struct phm_tdp_table *tdp_table = pp_table_info->tdp_table;
memcpy(thermal_data, &SMU7ThermalWithDelayPolicy[0], sizeof(struct PP_TemperatureRange));
@@ -5237,6 +5240,13 @@ static int vega10_get_thermal_temperatur
thermal_data->mem_emergency_max = (pp_table->ThbmLimit + CTF_OFFSET_HBM)*
PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
+ if (tdp_table->usSoftwareShutdownTemp > pp_table->ThotspotLimit &&
+ tdp_table->usSoftwareShutdownTemp < VEGA10_THERMAL_MAXIMUM_ALERT_TEMP)
+ thermal_data->sw_ctf_threshold = tdp_table->usSoftwareShutdownTemp;
+ else
+ thermal_data->sw_ctf_threshold = VEGA10_THERMAL_MAXIMUM_ALERT_TEMP;
+ thermal_data->sw_ctf_threshold *= PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
+
return 0;
}
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
@@ -2742,6 +2742,8 @@ static int vega12_notify_cac_buffer_info
static int vega12_get_thermal_temperature_range(struct pp_hwmgr *hwmgr,
struct PP_TemperatureRange *thermal_data)
{
+ struct phm_ppt_v3_information *pptable_information =
+ (struct phm_ppt_v3_information *)hwmgr->pptable;
struct vega12_hwmgr *data =
(struct vega12_hwmgr *)(hwmgr->backend);
PPTable_t *pp_table = &(data->smc_state_table.pp_table);
@@ -2760,6 +2762,8 @@ static int vega12_get_thermal_temperatur
PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
thermal_data->mem_emergency_max = (pp_table->ThbmLimit + CTF_OFFSET_HBM)*
PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
+ thermal_data->sw_ctf_threshold = pptable_information->us_software_shutdown_temp *
+ PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
return 0;
}
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
@@ -4213,6 +4213,8 @@ static int vega20_notify_cac_buffer_info
static int vega20_get_thermal_temperature_range(struct pp_hwmgr *hwmgr,
struct PP_TemperatureRange *thermal_data)
{
+ struct phm_ppt_v3_information *pptable_information =
+ (struct phm_ppt_v3_information *)hwmgr->pptable;
struct vega20_hwmgr *data =
(struct vega20_hwmgr *)(hwmgr->backend);
PPTable_t *pp_table = &(data->smc_state_table.pp_table);
@@ -4231,6 +4233,8 @@ static int vega20_get_thermal_temperatur
PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
thermal_data->mem_emergency_max = (pp_table->ThbmLimit + CTF_OFFSET_HBM)*
PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
+ thermal_data->sw_ctf_threshold = pptable_information->us_software_shutdown_temp *
+ PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
return 0;
}
--- a/drivers/gpu/drm/amd/pm/powerplay/inc/power_state.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/inc/power_state.h
@@ -131,6 +131,7 @@ struct PP_TemperatureRange {
int mem_min;
int mem_crit_max;
int mem_emergency_max;
+ int sw_ctf_threshold;
};
struct PP_StateValidationBlock {
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 039/149] drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (37 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 038/149] drm/amd/pm: expose swctf threshold setting for legacy powerplay Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 040/149] drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuation Greg Kroah-Hartman
` (122 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mario Limonciello, Evan Quan,
Alex Deucher
From: Evan Quan <evan.quan@amd.com>
commit b1a9557a7d00c758ed9e701fbb3445a13a49506f upstream
Enable peak profiling mode shader/memory clock reporting for powerplay
framework.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 10 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c | 16 +++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 76 ++++++++++++++----
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c | 16 +++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 31 ++++++-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 22 +++++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 20 +---
drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 2
8 files changed, 155 insertions(+), 38 deletions(-)
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -769,10 +769,16 @@ static int pp_dpm_read_sensor(void *hand
switch (idx) {
case AMDGPU_PP_SENSOR_STABLE_PSTATE_SCLK:
- *((uint32_t *)value) = hwmgr->pstate_sclk;
+ *((uint32_t *)value) = hwmgr->pstate_sclk * 100;
return 0;
case AMDGPU_PP_SENSOR_STABLE_PSTATE_MCLK:
- *((uint32_t *)value) = hwmgr->pstate_mclk;
+ *((uint32_t *)value) = hwmgr->pstate_mclk * 100;
+ return 0;
+ case AMDGPU_PP_SENSOR_PEAK_PSTATE_SCLK:
+ *((uint32_t *)value) = hwmgr->pstate_sclk_peak * 100;
+ return 0;
+ case AMDGPU_PP_SENSOR_PEAK_PSTATE_MCLK:
+ *((uint32_t *)value) = hwmgr->pstate_mclk_peak * 100;
return 0;
case AMDGPU_PP_SENSOR_MIN_FAN_RPM:
*((uint32_t *)value) = hwmgr->thermal_controller.fanInfo.ulMinRPM;
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c
@@ -375,6 +375,17 @@ static int smu10_enable_gfx_off(struct p
return 0;
}
+static void smu10_populate_umdpstate_clocks(struct pp_hwmgr *hwmgr)
+{
+ hwmgr->pstate_sclk = SMU10_UMD_PSTATE_GFXCLK;
+ hwmgr->pstate_mclk = SMU10_UMD_PSTATE_FCLK;
+
+ smum_send_msg_to_smc(hwmgr,
+ PPSMC_MSG_GetMaxGfxclkFrequency,
+ &hwmgr->pstate_sclk_peak);
+ hwmgr->pstate_mclk_peak = SMU10_UMD_PSTATE_PEAK_FCLK;
+}
+
static int smu10_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
{
struct amdgpu_device *adev = hwmgr->adev;
@@ -398,6 +409,8 @@ static int smu10_enable_dpm_tasks(struct
return ret;
}
+ smu10_populate_umdpstate_clocks(hwmgr);
+
return 0;
}
@@ -574,9 +587,6 @@ static int smu10_hwmgr_backend_init(stru
hwmgr->platform_descriptor.minimumClocksReductionPercentage = 50;
- hwmgr->pstate_sclk = SMU10_UMD_PSTATE_GFXCLK * 100;
- hwmgr->pstate_mclk = SMU10_UMD_PSTATE_FCLK * 100;
-
/* enable the pp_od_clk_voltage sysfs file */
hwmgr->od_enabled = 1;
/* disabled fine grain tuning function by default */
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
@@ -1501,6 +1501,65 @@ static int smu7_populate_edc_leakage_reg
return ret;
}
+static void smu7_populate_umdpstate_clocks(struct pp_hwmgr *hwmgr)
+{
+ struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
+ struct smu7_dpm_table *golden_dpm_table = &data->golden_dpm_table;
+ struct phm_clock_voltage_dependency_table *vddc_dependency_on_sclk =
+ hwmgr->dyn_state.vddc_dependency_on_sclk;
+ struct phm_ppt_v1_information *table_info =
+ (struct phm_ppt_v1_information *)(hwmgr->pptable);
+ struct phm_ppt_v1_clock_voltage_dependency_table *vdd_dep_on_sclk =
+ table_info->vdd_dep_on_sclk;
+ int32_t tmp_sclk, count, percentage;
+
+ if (golden_dpm_table->mclk_table.count == 1) {
+ percentage = 70;
+ hwmgr->pstate_mclk = golden_dpm_table->mclk_table.dpm_levels[0].value;
+ } else {
+ percentage = 100 * golden_dpm_table->sclk_table.dpm_levels[golden_dpm_table->sclk_table.count - 1].value /
+ golden_dpm_table->mclk_table.dpm_levels[golden_dpm_table->mclk_table.count - 1].value;
+ hwmgr->pstate_mclk = golden_dpm_table->mclk_table.dpm_levels[golden_dpm_table->mclk_table.count - 2].value;
+ }
+
+ tmp_sclk = hwmgr->pstate_mclk * percentage / 100;
+
+ if (hwmgr->pp_table_version == PP_TABLE_V0) {
+ for (count = vddc_dependency_on_sclk->count - 1; count >= 0; count--) {
+ if (tmp_sclk >= vddc_dependency_on_sclk->entries[count].clk) {
+ hwmgr->pstate_sclk = vddc_dependency_on_sclk->entries[count].clk;
+ break;
+ }
+ }
+ if (count < 0)
+ hwmgr->pstate_sclk = vddc_dependency_on_sclk->entries[0].clk;
+
+ hwmgr->pstate_sclk_peak =
+ vddc_dependency_on_sclk->entries[vddc_dependency_on_sclk->count - 1].clk;
+ } else if (hwmgr->pp_table_version == PP_TABLE_V1) {
+ for (count = vdd_dep_on_sclk->count - 1; count >= 0; count--) {
+ if (tmp_sclk >= vdd_dep_on_sclk->entries[count].clk) {
+ hwmgr->pstate_sclk = vdd_dep_on_sclk->entries[count].clk;
+ break;
+ }
+ }
+ if (count < 0)
+ hwmgr->pstate_sclk = vdd_dep_on_sclk->entries[0].clk;
+
+ hwmgr->pstate_sclk_peak =
+ vdd_dep_on_sclk->entries[vdd_dep_on_sclk->count - 1].clk;
+ }
+
+ hwmgr->pstate_mclk_peak =
+ golden_dpm_table->mclk_table.dpm_levels[golden_dpm_table->mclk_table.count - 1].value;
+
+ /* make sure the output is in Mhz */
+ hwmgr->pstate_sclk /= 100;
+ hwmgr->pstate_mclk /= 100;
+ hwmgr->pstate_sclk_peak /= 100;
+ hwmgr->pstate_mclk_peak /= 100;
+}
+
static int smu7_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
{
int tmp_result = 0;
@@ -1625,6 +1684,8 @@ static int smu7_enable_dpm_tasks(struct
PP_ASSERT_WITH_CODE((0 == tmp_result),
"pcie performance request failed!", result = tmp_result);
+ smu7_populate_umdpstate_clocks(hwmgr);
+
return 0;
}
@@ -3143,15 +3204,12 @@ static int smu7_get_profiling_clk(struct
for (count = hwmgr->dyn_state.vddc_dependency_on_sclk->count-1;
count >= 0; count--) {
if (tmp_sclk >= hwmgr->dyn_state.vddc_dependency_on_sclk->entries[count].clk) {
- tmp_sclk = hwmgr->dyn_state.vddc_dependency_on_sclk->entries[count].clk;
*sclk_mask = count;
break;
}
}
- if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK) {
+ if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK)
*sclk_mask = 0;
- tmp_sclk = hwmgr->dyn_state.vddc_dependency_on_sclk->entries[0].clk;
- }
if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)
*sclk_mask = hwmgr->dyn_state.vddc_dependency_on_sclk->count-1;
@@ -3161,15 +3219,12 @@ static int smu7_get_profiling_clk(struct
for (count = table_info->vdd_dep_on_sclk->count-1; count >= 0; count--) {
if (tmp_sclk >= table_info->vdd_dep_on_sclk->entries[count].clk) {
- tmp_sclk = table_info->vdd_dep_on_sclk->entries[count].clk;
*sclk_mask = count;
break;
}
}
- if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK) {
+ if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK)
*sclk_mask = 0;
- tmp_sclk = table_info->vdd_dep_on_sclk->entries[0].clk;
- }
if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)
*sclk_mask = table_info->vdd_dep_on_sclk->count - 1;
@@ -3181,8 +3236,6 @@ static int smu7_get_profiling_clk(struct
*mclk_mask = golden_dpm_table->mclk_table.count - 1;
*pcie_mask = data->dpm_table.pcie_speed_table.count - 1;
- hwmgr->pstate_sclk = tmp_sclk;
- hwmgr->pstate_mclk = tmp_mclk;
return 0;
}
@@ -3195,9 +3248,6 @@ static int smu7_force_dpm_level(struct p
uint32_t mclk_mask = 0;
uint32_t pcie_mask = 0;
- if (hwmgr->pstate_sclk == 0)
- smu7_get_profiling_clk(hwmgr, level, &sclk_mask, &mclk_mask, &pcie_mask);
-
switch (level) {
case AMD_DPM_FORCED_LEVEL_HIGH:
ret = smu7_force_dpm_highest(hwmgr);
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c
@@ -1016,6 +1016,18 @@ static void smu8_reset_acp_boot_level(st
data->acp_boot_level = 0xff;
}
+static void smu8_populate_umdpstate_clocks(struct pp_hwmgr *hwmgr)
+{
+ struct phm_clock_voltage_dependency_table *table =
+ hwmgr->dyn_state.vddc_dependency_on_sclk;
+
+ hwmgr->pstate_sclk = table->entries[0].clk / 100;
+ hwmgr->pstate_mclk = 0;
+
+ hwmgr->pstate_sclk_peak = table->entries[table->count - 1].clk / 100;
+ hwmgr->pstate_mclk_peak = 0;
+}
+
static int smu8_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
{
smu8_program_voting_clients(hwmgr);
@@ -1024,6 +1036,8 @@ static int smu8_enable_dpm_tasks(struct
smu8_program_bootup_state(hwmgr);
smu8_reset_acp_boot_level(hwmgr);
+ smu8_populate_umdpstate_clocks(hwmgr);
+
return 0;
}
@@ -1167,8 +1181,6 @@ static int smu8_phm_unforce_dpm_levels(s
data->sclk_dpm.soft_min_clk = table->entries[0].clk;
data->sclk_dpm.hard_min_clk = table->entries[0].clk;
- hwmgr->pstate_sclk = table->entries[0].clk;
- hwmgr->pstate_mclk = 0;
level = smu8_get_max_sclk_level(hwmgr) - 1;
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
@@ -3008,6 +3008,30 @@ static int vega10_enable_disable_PCC_lim
return 0;
}
+static void vega10_populate_umdpstate_clocks(struct pp_hwmgr *hwmgr)
+{
+ struct phm_ppt_v2_information *table_info =
+ (struct phm_ppt_v2_information *)(hwmgr->pptable);
+
+ if (table_info->vdd_dep_on_sclk->count > VEGA10_UMD_PSTATE_GFXCLK_LEVEL &&
+ table_info->vdd_dep_on_mclk->count > VEGA10_UMD_PSTATE_MCLK_LEVEL) {
+ hwmgr->pstate_sclk = table_info->vdd_dep_on_sclk->entries[VEGA10_UMD_PSTATE_GFXCLK_LEVEL].clk;
+ hwmgr->pstate_mclk = table_info->vdd_dep_on_mclk->entries[VEGA10_UMD_PSTATE_MCLK_LEVEL].clk;
+ } else {
+ hwmgr->pstate_sclk = table_info->vdd_dep_on_sclk->entries[0].clk;
+ hwmgr->pstate_mclk = table_info->vdd_dep_on_mclk->entries[0].clk;
+ }
+
+ hwmgr->pstate_sclk_peak = table_info->vdd_dep_on_sclk->entries[table_info->vdd_dep_on_sclk->count - 1].clk;
+ hwmgr->pstate_mclk_peak = table_info->vdd_dep_on_mclk->entries[table_info->vdd_dep_on_mclk->count - 1].clk;
+
+ /* make sure the output is in Mhz */
+ hwmgr->pstate_sclk /= 100;
+ hwmgr->pstate_mclk /= 100;
+ hwmgr->pstate_sclk_peak /= 100;
+ hwmgr->pstate_mclk_peak /= 100;
+}
+
static int vega10_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
{
struct vega10_hwmgr *data = hwmgr->backend;
@@ -3082,6 +3106,8 @@ static int vega10_enable_dpm_tasks(struc
result = tmp_result);
}
+ vega10_populate_umdpstate_clocks(hwmgr);
+
return result;
}
@@ -4169,8 +4195,6 @@ static int vega10_get_profiling_clk_mask
*sclk_mask = VEGA10_UMD_PSTATE_GFXCLK_LEVEL;
*soc_mask = VEGA10_UMD_PSTATE_SOCCLK_LEVEL;
*mclk_mask = VEGA10_UMD_PSTATE_MCLK_LEVEL;
- hwmgr->pstate_sclk = table_info->vdd_dep_on_sclk->entries[VEGA10_UMD_PSTATE_GFXCLK_LEVEL].clk;
- hwmgr->pstate_mclk = table_info->vdd_dep_on_mclk->entries[VEGA10_UMD_PSTATE_MCLK_LEVEL].clk;
}
if (level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK) {
@@ -4281,9 +4305,6 @@ static int vega10_dpm_force_dpm_level(st
uint32_t mclk_mask = 0;
uint32_t soc_mask = 0;
- if (hwmgr->pstate_sclk == 0)
- vega10_get_profiling_clk_mask(hwmgr, level, &sclk_mask, &mclk_mask, &soc_mask);
-
switch (level) {
case AMD_DPM_FORCED_LEVEL_HIGH:
ret = vega10_force_dpm_highest(hwmgr);
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
@@ -1026,6 +1026,25 @@ static int vega12_get_all_clock_ranges(s
return 0;
}
+static void vega12_populate_umdpstate_clocks(struct pp_hwmgr *hwmgr)
+{
+ struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend);
+ struct vega12_single_dpm_table *gfx_dpm_table = &(data->dpm_table.gfx_table);
+ struct vega12_single_dpm_table *mem_dpm_table = &(data->dpm_table.mem_table);
+
+ if (gfx_dpm_table->count > VEGA12_UMD_PSTATE_GFXCLK_LEVEL &&
+ mem_dpm_table->count > VEGA12_UMD_PSTATE_MCLK_LEVEL) {
+ hwmgr->pstate_sclk = gfx_dpm_table->dpm_levels[VEGA12_UMD_PSTATE_GFXCLK_LEVEL].value;
+ hwmgr->pstate_mclk = mem_dpm_table->dpm_levels[VEGA12_UMD_PSTATE_MCLK_LEVEL].value;
+ } else {
+ hwmgr->pstate_sclk = gfx_dpm_table->dpm_levels[0].value;
+ hwmgr->pstate_mclk = mem_dpm_table->dpm_levels[0].value;
+ }
+
+ hwmgr->pstate_sclk_peak = gfx_dpm_table->dpm_levels[gfx_dpm_table->count].value;
+ hwmgr->pstate_mclk_peak = mem_dpm_table->dpm_levels[mem_dpm_table->count].value;
+}
+
static int vega12_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
{
int tmp_result, result = 0;
@@ -1077,6 +1096,9 @@ static int vega12_enable_dpm_tasks(struc
PP_ASSERT_WITH_CODE(!result,
"Failed to setup default DPM tables!",
return result);
+
+ vega12_populate_umdpstate_clocks(hwmgr);
+
return result;
}
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
@@ -1555,26 +1555,23 @@ static int vega20_set_mclk_od(
return 0;
}
-static int vega20_populate_umdpstate_clocks(
- struct pp_hwmgr *hwmgr)
+static void vega20_populate_umdpstate_clocks(struct pp_hwmgr *hwmgr)
{
struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend);
struct vega20_single_dpm_table *gfx_table = &(data->dpm_table.gfx_table);
struct vega20_single_dpm_table *mem_table = &(data->dpm_table.mem_table);
- hwmgr->pstate_sclk = gfx_table->dpm_levels[0].value;
- hwmgr->pstate_mclk = mem_table->dpm_levels[0].value;
-
if (gfx_table->count > VEGA20_UMD_PSTATE_GFXCLK_LEVEL &&
mem_table->count > VEGA20_UMD_PSTATE_MCLK_LEVEL) {
hwmgr->pstate_sclk = gfx_table->dpm_levels[VEGA20_UMD_PSTATE_GFXCLK_LEVEL].value;
hwmgr->pstate_mclk = mem_table->dpm_levels[VEGA20_UMD_PSTATE_MCLK_LEVEL].value;
+ } else {
+ hwmgr->pstate_sclk = gfx_table->dpm_levels[0].value;
+ hwmgr->pstate_mclk = mem_table->dpm_levels[0].value;
}
- hwmgr->pstate_sclk = hwmgr->pstate_sclk * 100;
- hwmgr->pstate_mclk = hwmgr->pstate_mclk * 100;
-
- return 0;
+ hwmgr->pstate_sclk_peak = gfx_table->dpm_levels[gfx_table->count - 1].value;
+ hwmgr->pstate_mclk_peak = mem_table->dpm_levels[mem_table->count - 1].value;
}
static int vega20_get_max_sustainable_clock(struct pp_hwmgr *hwmgr,
@@ -1753,10 +1750,7 @@ static int vega20_enable_dpm_tasks(struc
"[EnableDPMTasks] Failed to initialize odn settings!",
return result);
- result = vega20_populate_umdpstate_clocks(hwmgr);
- PP_ASSERT_WITH_CODE(!result,
- "[EnableDPMTasks] Failed to populate umdpstate clocks!",
- return result);
+ vega20_populate_umdpstate_clocks(hwmgr);
result = smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_GetPptLimit,
POWER_SOURCE_AC << 16, &hwmgr->default_power_limit);
--- a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
@@ -809,6 +809,8 @@ struct pp_hwmgr {
uint32_t workload_prority[Workload_Policy_Max];
uint32_t workload_setting[Workload_Policy_Max];
bool gfxoff_state_changed_by_workload;
+ uint32_t pstate_sclk_peak;
+ uint32_t pstate_mclk_peak;
};
int hwmgr_early_init(struct pp_hwmgr *hwmgr);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 040/149] drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuation
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (38 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 039/149] drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 041/149] drm/amd/display: Handle virtual hardware detect Greg Kroah-Hartman
` (121 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mario Limonciello, Evan Quan,
Lijo Lazar, Alex Deucher
From: Evan Quan <evan.quan@amd.com>
commit b75efe88b20c2be28b67e2821a794cc183e32374 upstream
An intentional delay is added on soft ctf triggered. Then there will
be a double check for the GPU temperature before taking further
action. This can avoid unintended shutdown due to temperature
momentary fluctuation.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
[ Hand-modified because:
* XCP support added to amdgpu.h in kernel 6.5
and is not necessary for this fix.
* SMU microcode initialization moved in
32806038aa76 ("drm/amd: Load SMU microcode during early_init") ]
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1267
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2779
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 48 ++++++++++++++++++++
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c | 27 +++--------
drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 2
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 34 ++++++++++++++
drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 2
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 9 ---
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 9 ---
8 files changed, 102 insertions(+), 32 deletions(-)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -284,6 +284,9 @@ extern int amdgpu_sg_display;
#define AMDGPU_SMARTSHIFT_MAX_BIAS (100)
#define AMDGPU_SMARTSHIFT_MIN_BIAS (-100)
+/* Extra time delay(in ms) to eliminate the influence of temperature momentary fluctuation */
+#define AMDGPU_SWCTF_EXTRA_DELAY 50
+
struct amdgpu_device;
struct amdgpu_irq_src;
struct amdgpu_fpriv;
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -26,6 +26,7 @@
#include <linux/gfp.h>
#include <linux/slab.h>
#include <linux/firmware.h>
+#include <linux/reboot.h>
#include "amd_shared.h"
#include "amd_powerplay.h"
#include "power_state.h"
@@ -91,6 +92,45 @@ static int pp_early_init(void *handle)
return 0;
}
+static void pp_swctf_delayed_work_handler(struct work_struct *work)
+{
+ struct pp_hwmgr *hwmgr =
+ container_of(work, struct pp_hwmgr, swctf_delayed_work.work);
+ struct amdgpu_device *adev = hwmgr->adev;
+ struct amdgpu_dpm_thermal *range =
+ &adev->pm.dpm.thermal;
+ uint32_t gpu_temperature, size;
+ int ret;
+
+ /*
+ * If the hotspot/edge temperature is confirmed as below SW CTF setting point
+ * after the delay enforced, nothing will be done.
+ * Otherwise, a graceful shutdown will be performed to prevent further damage.
+ */
+ if (range->sw_ctf_threshold &&
+ hwmgr->hwmgr_func->read_sensor) {
+ ret = hwmgr->hwmgr_func->read_sensor(hwmgr,
+ AMDGPU_PP_SENSOR_HOTSPOT_TEMP,
+ &gpu_temperature,
+ &size);
+ /*
+ * For some legacy ASICs, hotspot temperature retrieving might be not
+ * supported. Check the edge temperature instead then.
+ */
+ if (ret == -EOPNOTSUPP)
+ ret = hwmgr->hwmgr_func->read_sensor(hwmgr,
+ AMDGPU_PP_SENSOR_EDGE_TEMP,
+ &gpu_temperature,
+ &size);
+ if (!ret && gpu_temperature / 1000 < range->sw_ctf_threshold)
+ return;
+ }
+
+ dev_emerg(adev->dev, "ERROR: GPU over temperature range(SW CTF) detected!\n");
+ dev_emerg(adev->dev, "ERROR: System is going to shutdown due to GPU SW CTF!\n");
+ orderly_poweroff(true);
+}
+
static int pp_sw_init(void *handle)
{
struct amdgpu_device *adev = handle;
@@ -101,6 +141,10 @@ static int pp_sw_init(void *handle)
pr_debug("powerplay sw init %s\n", ret ? "failed" : "successfully");
+ if (!ret)
+ INIT_DELAYED_WORK(&hwmgr->swctf_delayed_work,
+ pp_swctf_delayed_work_handler);
+
return ret;
}
@@ -136,6 +180,8 @@ static int pp_hw_fini(void *handle)
struct amdgpu_device *adev = handle;
struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle;
+ cancel_delayed_work_sync(&hwmgr->swctf_delayed_work);
+
hwmgr_hw_fini(hwmgr);
return 0;
@@ -222,6 +268,8 @@ static int pp_suspend(void *handle)
struct amdgpu_device *adev = handle;
struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle;
+ cancel_delayed_work_sync(&hwmgr->swctf_delayed_work);
+
return hwmgr_suspend(hwmgr);
}
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c
@@ -603,21 +603,17 @@ int phm_irq_process(struct amdgpu_device
struct amdgpu_irq_src *source,
struct amdgpu_iv_entry *entry)
{
+ struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle;
uint32_t client_id = entry->client_id;
uint32_t src_id = entry->src_id;
if (client_id == AMDGPU_IRQ_CLIENTID_LEGACY) {
if (src_id == VISLANDS30_IV_SRCID_CG_TSS_THERMAL_LOW_TO_HIGH) {
- dev_emerg(adev->dev, "ERROR: GPU over temperature range(SW CTF) detected!\n");
- /*
- * SW CTF just occurred.
- * Try to do a graceful shutdown to prevent further damage.
- */
- dev_emerg(adev->dev, "ERROR: System is going to shutdown due to GPU SW CTF!\n");
- orderly_poweroff(true);
- } else if (src_id == VISLANDS30_IV_SRCID_CG_TSS_THERMAL_HIGH_TO_LOW)
+ schedule_delayed_work(&hwmgr->swctf_delayed_work,
+ msecs_to_jiffies(AMDGPU_SWCTF_EXTRA_DELAY));
+ } else if (src_id == VISLANDS30_IV_SRCID_CG_TSS_THERMAL_HIGH_TO_LOW) {
dev_emerg(adev->dev, "ERROR: GPU under temperature range detected!\n");
- else if (src_id == VISLANDS30_IV_SRCID_GPIO_19) {
+ } else if (src_id == VISLANDS30_IV_SRCID_GPIO_19) {
dev_emerg(adev->dev, "ERROR: GPU HW Critical Temperature Fault(aka CTF) detected!\n");
/*
* HW CTF just occurred. Shutdown to prevent further damage.
@@ -626,15 +622,10 @@ int phm_irq_process(struct amdgpu_device
orderly_poweroff(true);
}
} else if (client_id == SOC15_IH_CLIENTID_THM) {
- if (src_id == 0) {
- dev_emerg(adev->dev, "ERROR: GPU over temperature range(SW CTF) detected!\n");
- /*
- * SW CTF just occurred.
- * Try to do a graceful shutdown to prevent further damage.
- */
- dev_emerg(adev->dev, "ERROR: System is going to shutdown due to GPU SW CTF!\n");
- orderly_poweroff(true);
- } else
+ if (src_id == 0)
+ schedule_delayed_work(&hwmgr->swctf_delayed_work,
+ msecs_to_jiffies(AMDGPU_SWCTF_EXTRA_DELAY));
+ else
dev_emerg(adev->dev, "ERROR: GPU under temperature range detected!\n");
} else if (client_id == SOC15_IH_CLIENTID_ROM_SMUIO) {
dev_emerg(adev->dev, "ERROR: GPU HW Critical Temperature Fault(aka CTF) detected!\n");
--- a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
@@ -811,6 +811,8 @@ struct pp_hwmgr {
bool gfxoff_state_changed_by_workload;
uint32_t pstate_sclk_peak;
uint32_t pstate_mclk_peak;
+
+ struct delayed_work swctf_delayed_work;
};
int hwmgr_early_init(struct pp_hwmgr *hwmgr);
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -24,6 +24,7 @@
#include <linux/firmware.h>
#include <linux/pci.h>
+#include <linux/reboot.h>
#include "amdgpu.h"
#include "amdgpu_smu.h"
@@ -1061,6 +1062,34 @@ static void smu_interrupt_work_fn(struct
smu->ppt_funcs->interrupt_work(smu);
}
+static void smu_swctf_delayed_work_handler(struct work_struct *work)
+{
+ struct smu_context *smu =
+ container_of(work, struct smu_context, swctf_delayed_work.work);
+ struct smu_temperature_range *range =
+ &smu->thermal_range;
+ struct amdgpu_device *adev = smu->adev;
+ uint32_t hotspot_tmp, size;
+
+ /*
+ * If the hotspot temperature is confirmed as below SW CTF setting point
+ * after the delay enforced, nothing will be done.
+ * Otherwise, a graceful shutdown will be performed to prevent further damage.
+ */
+ if (range->software_shutdown_temp &&
+ smu->ppt_funcs->read_sensor &&
+ !smu->ppt_funcs->read_sensor(smu,
+ AMDGPU_PP_SENSOR_HOTSPOT_TEMP,
+ &hotspot_tmp,
+ &size) &&
+ hotspot_tmp / 1000 < range->software_shutdown_temp)
+ return;
+
+ dev_emerg(adev->dev, "ERROR: GPU over temperature range(SW CTF) detected!\n");
+ dev_emerg(adev->dev, "ERROR: System is going to shutdown due to GPU SW CTF!\n");
+ orderly_poweroff(true);
+}
+
static int smu_sw_init(void *handle)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
@@ -1109,6 +1138,9 @@ static int smu_sw_init(void *handle)
return ret;
}
+ INIT_DELAYED_WORK(&smu->swctf_delayed_work,
+ smu_swctf_delayed_work_handler);
+
ret = smu_smc_table_sw_init(smu);
if (ret) {
dev_err(adev->dev, "Failed to sw init smc table!\n");
@@ -1581,6 +1613,8 @@ static int smu_smc_hw_cleanup(struct smu
return ret;
}
+ cancel_delayed_work_sync(&smu->swctf_delayed_work);
+
ret = smu_disable_dpms(smu);
if (ret) {
dev_err(adev->dev, "Fail to disable dpm features!\n");
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
@@ -573,6 +573,8 @@ struct smu_context
u32 debug_param_reg;
u32 debug_msg_reg;
u32 debug_resp_reg;
+
+ struct delayed_work swctf_delayed_work;
};
struct i2c_adapter;
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -1438,13 +1438,8 @@ static int smu_v11_0_irq_process(struct
if (client_id == SOC15_IH_CLIENTID_THM) {
switch (src_id) {
case THM_11_0__SRCID__THM_DIG_THERM_L2H:
- dev_emerg(adev->dev, "ERROR: GPU over temperature range(SW CTF) detected!\n");
- /*
- * SW CTF just occurred.
- * Try to do a graceful shutdown to prevent further damage.
- */
- dev_emerg(adev->dev, "ERROR: System is going to shutdown due to GPU SW CTF!\n");
- orderly_poweroff(true);
+ schedule_delayed_work(&smu->swctf_delayed_work,
+ msecs_to_jiffies(AMDGPU_SWCTF_EXTRA_DELAY));
break;
case THM_11_0__SRCID__THM_DIG_THERM_H2L:
dev_emerg(adev->dev, "ERROR: GPU under temperature range detected\n");
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -1386,13 +1386,8 @@ static int smu_v13_0_irq_process(struct
if (client_id == SOC15_IH_CLIENTID_THM) {
switch (src_id) {
case THM_11_0__SRCID__THM_DIG_THERM_L2H:
- dev_emerg(adev->dev, "ERROR: GPU over temperature range(SW CTF) detected!\n");
- /*
- * SW CTF just occurred.
- * Try to do a graceful shutdown to prevent further damage.
- */
- dev_emerg(adev->dev, "ERROR: System is going to shutdown due to GPU SW CTF!\n");
- orderly_poweroff(true);
+ schedule_delayed_work(&smu->swctf_delayed_work,
+ msecs_to_jiffies(AMDGPU_SWCTF_EXTRA_DELAY));
break;
case THM_11_0__SRCID__THM_DIG_THERM_H2L:
dev_emerg(adev->dev, "ERROR: GPU under temperature range detected\n");
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 041/149] drm/amd/display: Handle virtual hardware detect
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (39 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 040/149] drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuation Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 042/149] drm/amd/display: Add function for validate and update new stream Greg Kroah-Hartman
` (120 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Rodrigo Siqueira,
Aurabindo Pillai, Alex Deucher, Mario Limonciello
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
commit 987b96eb860036ab79051fb271f7fbdc01c9daf5 upstream
If virtual hardware is detected, there is no reason to run the full
dc_commit_streams process, and DC can return true immediately.
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 3 +++
1 file changed, 3 insertions(+)
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1942,6 +1942,9 @@ enum dc_status dc_commit_streams(struct
struct pipe_ctx *pipe;
bool handle_exit_odm2to1 = false;
+ if (dc->ctx->dce_environment == DCE_ENV_VIRTUAL_HW)
+ return res;
+
if (!streams_changed(dc, streams, stream_count))
return res;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 042/149] drm/amd/display: Add function for validate and update new stream
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (40 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 041/149] drm/amd/display: Handle virtual hardware detect Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 043/149] drm/amd/display: Handle seamless boot stream Greg Kroah-Hartman
` (119 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Rodrigo Siqueira,
Aurabindo Pillai, Alex Deucher, Mario Limonciello
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
commit a5e39ae27c3a305c6aafc0e423b0cb2c677facde upstream
DC stream can be seen as a representation of the DCN backend or the data
struct that represents the center of the display pipeline. The front end
(i.e., planes) is connected to the DC stream, and in its turn, streams
are connected to the DC link. Due to this dynamic, DC must handle the
following scenarios:
1. A stream is removed;
2. A new stream is created;
3. An unchanged stream had some updates on its planes.
These combinations require that the new stream data struct become
updated and has a valid global state. For handling multiple corner cases
associated with stream operations, this commit introduces a function
dedicated to manipulating stream changes and invokes the state
validation function after that.
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 16 -
drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 219 +++++++++++++++++++++-
drivers/gpu/drm/amd/display/dc/dc.h | 6
3 files changed, 227 insertions(+), 14 deletions(-)
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1987,21 +1987,17 @@ enum dc_status dc_commit_streams(struct
dc_resource_state_copy_construct_current(dc, context);
- /*
- * Previous validation was perfomred with fast_validation = true and
- * the full DML state required for hardware programming was skipped.
- *
- * Re-validate here to calculate these parameters / watermarks.
- */
- res = dc_validate_global_state(dc, context, false);
+ res = dc_validate_with_context(dc, set, stream_count, context, false);
if (res != DC_OK) {
- DC_LOG_ERROR("DC commit global validation failure: %s (%d)",
- dc_status_to_str(res), res);
- return res;
+ BREAK_TO_DEBUGGER();
+ goto fail;
}
res = dc_commit_state_no_check(dc, context);
+fail:
+ dc_release_state(context);
+
context_alloc_fail:
DC_LOG_DC("%s Finished.\n", __func__);
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -2616,15 +2616,226 @@ bool dc_resource_is_dsc_encoding_support
return dc->res_pool->res_cap->num_dsc > 0;
}
+static bool planes_changed_for_existing_stream(struct dc_state *context,
+ struct dc_stream_state *stream,
+ const struct dc_validation_set set[],
+ int set_count)
+{
+ int i, j;
+ struct dc_stream_status *stream_status = NULL;
+
+ for (i = 0; i < context->stream_count; i++) {
+ if (context->streams[i] == stream) {
+ stream_status = &context->stream_status[i];
+ break;
+ }
+ }
+
+ if (!stream_status)
+ ASSERT(0);
+
+ for (i = 0; i < set_count; i++)
+ if (set[i].stream == stream)
+ break;
+
+ if (i == set_count)
+ ASSERT(0);
+
+ if (set[i].plane_count != stream_status->plane_count)
+ return true;
+
+ for (j = 0; j < set[i].plane_count; j++)
+ if (set[i].plane_states[j] != stream_status->plane_states[j])
+ return true;
+
+ return false;
+}
/**
- * dc_validate_global_state() - Determine if HW can support a given state
- * Checks HW resource availability and bandwidth requirement.
+ * dc_validate_with_context - Validate and update the potential new stream in the context object
+ *
+ * @dc: Used to get the current state status
+ * @set: An array of dc_validation_set with all the current streams reference
+ * @set_count: Total of streams
+ * @context: New context
+ * @fast_validate: Enable or disable fast validation
+ *
+ * This function updates the potential new stream in the context object. It
+ * creates multiple lists for the add, remove, and unchanged streams. In
+ * particular, if the unchanged streams have a plane that changed, it is
+ * necessary to remove all planes from the unchanged streams. In summary, this
+ * function is responsible for validating the new context.
+ *
+ * Return:
+ * In case of success, return DC_OK (1), otherwise, return a DC error.
+ */
+enum dc_status dc_validate_with_context(struct dc *dc,
+ const struct dc_validation_set set[],
+ int set_count,
+ struct dc_state *context,
+ bool fast_validate)
+{
+ struct dc_stream_state *unchanged_streams[MAX_PIPES] = { 0 };
+ struct dc_stream_state *del_streams[MAX_PIPES] = { 0 };
+ struct dc_stream_state *add_streams[MAX_PIPES] = { 0 };
+ int old_stream_count = context->stream_count;
+ enum dc_status res = DC_ERROR_UNEXPECTED;
+ int unchanged_streams_count = 0;
+ int del_streams_count = 0;
+ int add_streams_count = 0;
+ bool found = false;
+ int i, j, k;
+
+ DC_LOGGER_INIT(dc->ctx->logger);
+
+ /* First build a list of streams to be remove from current context */
+ for (i = 0; i < old_stream_count; i++) {
+ struct dc_stream_state *stream = context->streams[i];
+
+ for (j = 0; j < set_count; j++) {
+ if (stream == set[j].stream) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found)
+ del_streams[del_streams_count++] = stream;
+
+ found = false;
+ }
+
+ /* Second, build a list of new streams */
+ for (i = 0; i < set_count; i++) {
+ struct dc_stream_state *stream = set[i].stream;
+
+ for (j = 0; j < old_stream_count; j++) {
+ if (stream == context->streams[j]) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found)
+ add_streams[add_streams_count++] = stream;
+
+ found = false;
+ }
+
+ /* Build a list of unchanged streams which is necessary for handling
+ * planes change such as added, removed, and updated.
+ */
+ for (i = 0; i < set_count; i++) {
+ /* Check if stream is part of the delete list */
+ for (j = 0; j < del_streams_count; j++) {
+ if (set[i].stream == del_streams[j]) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ /* Check if stream is part of the add list */
+ for (j = 0; j < add_streams_count; j++) {
+ if (set[i].stream == add_streams[j]) {
+ found = true;
+ break;
+ }
+ }
+ }
+
+ if (!found)
+ unchanged_streams[unchanged_streams_count++] = set[i].stream;
+
+ found = false;
+ }
+
+ /* Remove all planes for unchanged streams if planes changed */
+ for (i = 0; i < unchanged_streams_count; i++) {
+ if (planes_changed_for_existing_stream(context,
+ unchanged_streams[i],
+ set,
+ set_count)) {
+ if (!dc_rem_all_planes_for_stream(dc,
+ unchanged_streams[i],
+ context)) {
+ res = DC_FAIL_DETACH_SURFACES;
+ goto fail;
+ }
+ }
+ }
+
+ /* Remove all planes for removed streams and then remove the streams */
+ for (i = 0; i < del_streams_count; i++) {
+ /* Need to cpy the dwb data from the old stream in order to efc to work */
+ if (del_streams[i]->num_wb_info > 0) {
+ for (j = 0; j < add_streams_count; j++) {
+ if (del_streams[i]->sink == add_streams[j]->sink) {
+ add_streams[j]->num_wb_info = del_streams[i]->num_wb_info;
+ for (k = 0; k < del_streams[i]->num_wb_info; k++)
+ add_streams[j]->writeback_info[k] = del_streams[i]->writeback_info[k];
+ }
+ }
+ }
+
+ if (!dc_rem_all_planes_for_stream(dc, del_streams[i], context)) {
+ res = DC_FAIL_DETACH_SURFACES;
+ goto fail;
+ }
+
+ res = dc_remove_stream_from_ctx(dc, context, del_streams[i]);
+ if (res != DC_OK)
+ goto fail;
+ }
+
+ /* Add new streams and then add all planes for the new stream */
+ for (i = 0; i < add_streams_count; i++) {
+ calculate_phy_pix_clks(add_streams[i]);
+ res = dc_add_stream_to_ctx(dc, context, add_streams[i]);
+ if (res != DC_OK)
+ goto fail;
+
+ if (!add_all_planes_for_stream(dc, add_streams[i], set, set_count, context)) {
+ res = DC_FAIL_ATTACH_SURFACES;
+ goto fail;
+ }
+ }
+
+ /* Add all planes for unchanged streams if planes changed */
+ for (i = 0; i < unchanged_streams_count; i++) {
+ if (planes_changed_for_existing_stream(context,
+ unchanged_streams[i],
+ set,
+ set_count)) {
+ if (!add_all_planes_for_stream(dc, unchanged_streams[i], set, set_count, context)) {
+ res = DC_FAIL_ATTACH_SURFACES;
+ goto fail;
+ }
+ }
+ }
+
+ res = dc_validate_global_state(dc, context, fast_validate);
+
+fail:
+ if (res != DC_OK)
+ DC_LOG_WARNING("%s:resource validation failed, dc_status:%d\n",
+ __func__,
+ res);
+
+ return res;
+}
+
+/**
+ * dc_validate_global_state() - Determine if hardware can support a given state
+ *
* @dc: dc struct for this driver
* @new_ctx: state to be validated
* @fast_validate: set to true if only yes/no to support matters
*
- * Return: DC_OK if the result can be programmed. Otherwise, an error code.
+ * Checks hardware resource availability and bandwidth requirement.
+ *
+ * Return:
+ * DC_OK if the result can be programmed. Otherwise, an error code.
*/
enum dc_status dc_validate_global_state(
struct dc *dc,
@@ -3757,4 +3968,4 @@ bool dc_resource_acquire_secondary_pipe_
}
return true;
-}
\ No newline at end of file
+}
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1298,6 +1298,12 @@ enum dc_status dc_validate_plane(struct
void get_clock_requirements_for_state(struct dc_state *state, struct AsicStateEx *info);
+enum dc_status dc_validate_with_context(struct dc *dc,
+ const struct dc_validation_set set[],
+ int set_count,
+ struct dc_state *context,
+ bool fast_validate);
+
bool dc_set_generic_gpio_for_stereo(bool enable,
struct gpio_service *gpio_service);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 043/149] drm/amd/display: Handle seamless boot stream
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (41 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 042/149] drm/amd/display: Add function for validate and update new stream Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 044/149] drm/amd/display: Update OTG instance in the commit stream Greg Kroah-Hartman
` (118 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Rodrigo Siqueira,
Aurabindo Pillai, Alex Deucher, Mario Limonciello
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
commit 170390e587a69b2a24abac39eb3ae6ec28a4d7f2 upstream
A seamless boot stream has hardware resources assigned to it, and adding
a new stream means rebuilding the current assignment. It is desirable to
avoid this situation since it may cause light-up issues on the VGA
monitor on USB-C. This commit swaps the seamless boot stream to pipe 0
(if necessary) to ensure that the pipe context matches.
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -2788,6 +2788,21 @@ enum dc_status dc_validate_with_context(
goto fail;
}
+ /* Swap seamless boot stream to pipe 0 (if needed) to ensure pipe_ctx
+ * matches. This may change in the future if seamless_boot_stream can be
+ * multiple.
+ */
+ for (i = 0; i < add_streams_count; i++) {
+ mark_seamless_boot_stream(dc, add_streams[i]);
+ if (add_streams[i]->apply_seamless_boot_optimization && i != 0) {
+ struct dc_stream_state *temp = add_streams[0];
+
+ add_streams[0] = add_streams[i];
+ add_streams[i] = temp;
+ break;
+ }
+ }
+
/* Add new streams and then add all planes for the new stream */
for (i = 0; i < add_streams_count; i++) {
calculate_phy_pix_clks(add_streams[i]);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 044/149] drm/amd/display: Update OTG instance in the commit stream
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (42 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 043/149] drm/amd/display: Handle seamless boot stream Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 045/149] drm/amd/display: Avoid ABM when ODM combine is enabled for eDP Greg Kroah-Hartman
` (117 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Rodrigo Siqueira,
Aurabindo Pillai, Alex Deucher, Mario Limonciello
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
commit eef019eabc3cd0fddcffefbf67806a4d8cca29bb upstream
OTG instance is not updated in dc_commit_state_no_check for newly
committed streams because mode_change is not set. Notice that OTG update
is part of the software state, and after hardware programming, it must
be updated; for this reason, this commit updates the OTG offset right
after hardware programming.
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1995,6 +1995,12 @@ enum dc_status dc_commit_streams(struct
res = dc_commit_state_no_check(dc, context);
+ for (i = 0; i < stream_count; i++) {
+ for (j = 0; j < context->stream_count; j++)
+ if (streams[i]->stream_id == context->streams[j]->stream_id)
+ streams[i]->out.otg_offset = context->stream_status[j].primary_otg_inst;
+ }
+
fail:
dc_release_state(context);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 045/149] drm/amd/display: Avoid ABM when ODM combine is enabled for eDP
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (43 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 044/149] drm/amd/display: Update OTG instance in the commit stream Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 046/149] drm/amd/display: Use update plane and stream routine for DCN32x Greg Kroah-Hartman
` (116 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Rodrigo Siqueira,
Aurabindo Pillai, Alex Deucher, Mario Limonciello
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
commit 7fffb03b4045c862f904a88b852dc509c4e46406 upstream
ODM to combine on the eDP panel with ABM causes the color difference to
the panel since the ABM module only sets one pipe. Hence, this commit
blocks ABM in case of ODM combined on eDP.
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1996,9 +1996,19 @@ enum dc_status dc_commit_streams(struct
res = dc_commit_state_no_check(dc, context);
for (i = 0; i < stream_count; i++) {
- for (j = 0; j < context->stream_count; j++)
+ for (j = 0; j < context->stream_count; j++) {
if (streams[i]->stream_id == context->streams[j]->stream_id)
streams[i]->out.otg_offset = context->stream_status[j].primary_otg_inst;
+
+ if (dc_is_embedded_signal(streams[i]->signal)) {
+ struct dc_stream_status *status = dc_stream_get_status_from_state(context, streams[i]);
+
+ if (dc->hwss.is_abm_supported)
+ status->is_abm_supported = dc->hwss.is_abm_supported(dc, context, streams[i]);
+ else
+ status->is_abm_supported = true;
+ }
+ }
}
fail:
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 046/149] drm/amd/display: Use update plane and stream routine for DCN32x
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (44 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 045/149] drm/amd/display: Avoid ABM when ODM combine is enabled for eDP Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 047/149] drm/amd/display: Disable phantom OTG after enable for plane disable Greg Kroah-Hartman
` (115 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Rodrigo Siqueira,
Aurabindo Pillai, Alex Deucher, Mario Limonciello
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
commit dddde627807c22d6f15f4417eb395b13a1ca88f9 upstream
Sub-viewport (Subvp) feature is used for changing MCLK without causing
any display artifact, requiring special treatment from the plane and
stream perspective since DC needs to read data from the cache when using
subvp. However, the function dc_commit_updates_for_stream does not
provide all the support needed by this feature which will make this
function legacy at some point. For this reason, this commit enables
dc_update_planes_and_stream for ASICs that support this feature but
preserves the old behavior for other ASICs. However,
dc_update_planes_and_stream should replace dc_commit_updates_for_stream
for all ASICs since it does most of the tasks executed by
dc_commit_updates_for_stream with other extra operations, but we need to
run tests before making this change.
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -4002,6 +4002,18 @@ void dc_commit_updates_for_stream(struct
struct dc_context *dc_ctx = dc->ctx;
int i, j;
+ /* TODO: Since change commit sequence can have a huge impact,
+ * we decided to only enable it for DCN3x. However, as soon as
+ * we get more confident about this change we'll need to enable
+ * the new sequence for all ASICs.
+ */
+ if (dc->ctx->dce_version >= DCN_VERSION_3_2) {
+ dc_update_planes_and_stream(dc, srf_updates,
+ surface_count, stream,
+ stream_update);
+ return;
+ }
+
stream_status = dc_stream_get_status(stream);
context = dc->current_state;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 047/149] drm/amd/display: Disable phantom OTG after enable for plane disable
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (45 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 046/149] drm/amd/display: Use update plane and stream routine for DCN32x Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 048/149] drm/amd/display: Retain phantom plane/stream if validation fails Greg Kroah-Hartman
` (114 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jun Lei, Alan Liu, Alvin Lee,
Daniel Wheeler, Alex Deucher, Mario Limonciello
From: Alvin Lee <Alvin.Lee2@amd.com>
commit dc55b106ad477c67f969f3432d9070c6846fb557 upstream
[Description]
- Need to disable phantom OTG after it's enabled
in order to restore it to it's original state.
- If it's enabled and then an MCLK switch comes in
we may not prefetch the correct data since the phantom
OTG could already be in the middle of the frame.
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Alan Liu <HaoPing.Liu@amd.com>
Signed-off-by: Alvin Lee <Alvin.Lee2@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 14 +++++++++++++-
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c | 8 ++++++++
drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h | 1 +
3 files changed, 22 insertions(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1079,6 +1079,7 @@ static void disable_dangling_plane(struc
struct dc_state *dangling_context = dc_create_state(dc);
struct dc_state *current_ctx;
struct pipe_ctx *pipe;
+ struct timing_generator *tg;
if (dangling_context == NULL)
return;
@@ -1122,6 +1123,7 @@ static void disable_dangling_plane(struc
if (should_disable && old_stream) {
pipe = &dc->current_state->res_ctx.pipe_ctx[i];
+ tg = pipe->stream_res.tg;
/* When disabling plane for a phantom pipe, we must turn on the
* phantom OTG so the disable programming gets the double buffer
* update. Otherwise the pipe will be left in a partially disabled
@@ -1129,7 +1131,8 @@ static void disable_dangling_plane(struc
* again for different use.
*/
if (old_stream->mall_stream_config.type == SUBVP_PHANTOM) {
- pipe->stream_res.tg->funcs->enable_crtc(pipe->stream_res.tg);
+ if (tg->funcs->enable_crtc)
+ tg->funcs->enable_crtc(tg);
}
dc_rem_all_planes_for_stream(dc, old_stream, dangling_context);
disable_all_writeback_pipes_for_stream(dc, old_stream, dangling_context);
@@ -1146,6 +1149,15 @@ static void disable_dangling_plane(struc
dc->hwss.interdependent_update_lock(dc, dc->current_state, false);
dc->hwss.post_unlock_program_front_end(dc, dangling_context);
}
+ /* We need to put the phantom OTG back into it's default (disabled) state or we
+ * can get corruption when transition from one SubVP config to a different one.
+ * The OTG is set to disable on falling edge of VUPDATE so the plane disable
+ * will still get it's double buffer update.
+ */
+ if (old_stream->mall_stream_config.type == SUBVP_PHANTOM) {
+ if (tg->funcs->disable_phantom_crtc)
+ tg->funcs->disable_phantom_crtc(tg);
+ }
}
}
--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c
@@ -167,6 +167,13 @@ static void optc32_phantom_crtc_post_ena
REG_WAIT(OTG_CLOCK_CONTROL, OTG_BUSY, 0, 1, 100000);
}
+static void optc32_disable_phantom_otg(struct timing_generator *optc)
+{
+ struct optc *optc1 = DCN10TG_FROM_TG(optc);
+
+ REG_UPDATE(OTG_CONTROL, OTG_MASTER_EN, 0);
+}
+
static void optc32_set_odm_bypass(struct timing_generator *optc,
const struct dc_crtc_timing *dc_crtc_timing)
{
@@ -260,6 +267,7 @@ static struct timing_generator_funcs dcn
.enable_crtc = optc32_enable_crtc,
.disable_crtc = optc32_disable_crtc,
.phantom_crtc_post_enable = optc32_phantom_crtc_post_enable,
+ .disable_phantom_crtc = optc32_disable_phantom_otg,
/* used by enable_timing_synchronization. Not need for FPGA */
.is_counter_moving = optc1_is_counter_moving,
.get_position = optc1_get_position,
--- a/drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h
@@ -184,6 +184,7 @@ struct timing_generator_funcs {
bool (*disable_crtc)(struct timing_generator *tg);
#ifdef CONFIG_DRM_AMD_DC_DCN
void (*phantom_crtc_post_enable)(struct timing_generator *tg);
+ void (*disable_phantom_crtc)(struct timing_generator *tg);
#endif
bool (*immediate_disable_crtc)(struct timing_generator *tg);
bool (*is_counter_moving)(struct timing_generator *tg);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 048/149] drm/amd/display: Retain phantom plane/stream if validation fails
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (46 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 047/149] drm/amd/display: Disable phantom OTG after enable for plane disable Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 049/149] drm/amd/display: fix the build when DRM_AMD_DC_DCN is not set Greg Kroah-Hartman
` (113 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jun Lei, Brian Chang, Alvin Lee,
Daniel Wheeler, Alex Deucher, Mario Limonciello
From: Alvin Lee <Alvin.Lee2@amd.com>
commit 9b216b7e38f5381bcc3ad21c5ac614aa577ab8f2 upstream
[Description]
- If we fail validation, we should retain the phantom
stream/planes
- Full updates assume that phantom pipes will be fully
removed, but if validation fails we keep the phantom
pipes
- Therefore we have to retain the plane/stream if validation
fails (since the refcount is decremented before validation,
and the expectation is that it's fully freed when the old
dc_state is released)
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Brian Chang <Brian.Chang@amd.com>
Signed-off-by: Alvin Lee <Alvin.Lee2@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 13 +++++++++
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c | 22 ++++++++++++++++
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.h | 3 ++
drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c | 1
drivers/gpu/drm/amd/display/dc/inc/core_types.h | 1
5 files changed, 40 insertions(+)
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -3149,6 +3149,19 @@ static bool update_planes_and_stream_sta
if (update_type == UPDATE_TYPE_FULL) {
if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) {
+ /* For phantom pipes we remove and create a new set of phantom pipes
+ * for each full update (because we don't know if we'll need phantom
+ * pipes until after the first round of validation). However, if validation
+ * fails we need to keep the existing phantom pipes (because we don't update
+ * the dc->current_state).
+ *
+ * The phantom stream/plane refcount is decremented for validation because
+ * we assume it'll be removed (the free comes when the dc_state is freed),
+ * but if validation fails we have to increment back the refcount so it's
+ * consistent.
+ */
+ if (dc->res_pool->funcs->retain_phantom_pipes)
+ dc->res_pool->funcs->retain_phantom_pipes(dc, dc->current_state);
BREAK_TO_DEBUGGER();
goto fail;
}
--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
@@ -1719,6 +1719,27 @@ static struct dc_stream_state *dcn32_ena
return phantom_stream;
}
+void dcn32_retain_phantom_pipes(struct dc *dc, struct dc_state *context)
+{
+ int i;
+ struct dc_plane_state *phantom_plane = NULL;
+ struct dc_stream_state *phantom_stream = NULL;
+
+ for (i = 0; i < dc->res_pool->pipe_count; i++) {
+ struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i];
+
+ if (!pipe->top_pipe && !pipe->prev_odm_pipe &&
+ pipe->plane_state && pipe->stream &&
+ pipe->stream->mall_stream_config.type == SUBVP_PHANTOM) {
+ phantom_plane = pipe->plane_state;
+ phantom_stream = pipe->stream;
+
+ dc_plane_state_retain(phantom_plane);
+ dc_stream_retain(phantom_stream);
+ }
+ }
+}
+
// return true if removed piped from ctx, false otherwise
bool dcn32_remove_phantom_pipes(struct dc *dc, struct dc_state *context)
{
@@ -2035,6 +2056,7 @@ static struct resource_funcs dcn32_res_p
.update_soc_for_wm_a = dcn30_update_soc_for_wm_a,
.add_phantom_pipes = dcn32_add_phantom_pipes,
.remove_phantom_pipes = dcn32_remove_phantom_pipes,
+ .retain_phantom_pipes = dcn32_retain_phantom_pipes,
};
static uint32_t read_pipe_fuses(struct dc_context *ctx)
--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.h
+++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.h
@@ -83,6 +83,9 @@ bool dcn32_release_post_bldn_3dlut(
bool dcn32_remove_phantom_pipes(struct dc *dc,
struct dc_state *context);
+void dcn32_retain_phantom_pipes(struct dc *dc,
+ struct dc_state *context);
+
void dcn32_add_phantom_pipes(struct dc *dc,
struct dc_state *context,
display_e2e_pipe_params_st *pipes,
--- a/drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c
@@ -1619,6 +1619,7 @@ static struct resource_funcs dcn321_res_
.update_soc_for_wm_a = dcn30_update_soc_for_wm_a,
.add_phantom_pipes = dcn32_add_phantom_pipes,
.remove_phantom_pipes = dcn32_remove_phantom_pipes,
+ .retain_phantom_pipes = dcn32_retain_phantom_pipes,
};
static uint32_t read_pipe_fuses(struct dc_context *ctx)
--- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h
@@ -234,6 +234,7 @@ struct resource_funcs {
unsigned int index);
bool (*remove_phantom_pipes)(struct dc *dc, struct dc_state *context);
+ void (*retain_phantom_pipes)(struct dc *dc, struct dc_state *context);
void (*get_panel_config_defaults)(struct dc_panel_config *panel_config);
};
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 049/149] drm/amd/display: fix the build when DRM_AMD_DC_DCN is not set
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (47 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 048/149] drm/amd/display: Retain phantom plane/stream if validation fails Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 050/149] drm/amd/display: trigger timing sync only if TG is running Greg Kroah-Hartman
` (112 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alvin Lee, Alan Liu, Harry Wentland,
Alex Deucher, Mario Limonciello
From: Alex Deucher <alexander.deucher@amd.com>
commit 5ca9b33ece9aa048b6ec9411f054e1b781662327 upstream
Move the new callback outside of the guard.
Fixes: dc55b106ad47 ("drm/amd/display: Disable phantom OTG after enable for plane disable")
CC: Alvin Lee <Alvin.Lee2@amd.com>
CC: Alan Liu <HaoPing.Liu@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/timing_generator.h
@@ -184,8 +184,8 @@ struct timing_generator_funcs {
bool (*disable_crtc)(struct timing_generator *tg);
#ifdef CONFIG_DRM_AMD_DC_DCN
void (*phantom_crtc_post_enable)(struct timing_generator *tg);
- void (*disable_phantom_crtc)(struct timing_generator *tg);
#endif
+ void (*disable_phantom_crtc)(struct timing_generator *tg);
bool (*immediate_disable_crtc)(struct timing_generator *tg);
bool (*is_counter_moving)(struct timing_generator *tg);
void (*get_position)(struct timing_generator *tg,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 050/149] drm/amd/display: trigger timing sync only if TG is running
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (48 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 049/149] drm/amd/display: fix the build when DRM_AMD_DC_DCN is not set Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 051/149] io_uring: correct check for O_TMPFILE Greg Kroah-Hartman
` (111 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Aurabindo Pillai, Rodrigo Siqueira,
Alex Deucher, Mario Limonciello
From: Aurabindo Pillai <aurabindo.pillai@amd.com>
commit 6066aaf74f510fc171dbe9375153aee2d60d37aa upstream
[Why&How]
If the timing generator isnt running, it does not make sense to trigger
a sync on the corresponding OTG. Check this condition before starting.
Otherwise, this will cause error like:
*ERROR* GSL: Timeout on reset trigger!
Fixes: dc55b106ad47 ("drm/amd/display: Disable phantom OTG after enable for plane disable")
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
[ NOTE: This is also 5f9f97c02dd2 ("drm/amd/display: trigger timing sync
only if TG is running") ]
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
@@ -2284,6 +2284,12 @@ void dcn10_enable_timing_synchronization
opp = grouped_pipes[i]->stream_res.opp;
tg = grouped_pipes[i]->stream_res.tg;
tg->funcs->get_otg_active_size(tg, &width, &height);
+
+ if (!tg->funcs->is_tg_enabled(tg)) {
+ DC_SYNC_INFO("Skipping timing sync on disabled OTG\n");
+ return;
+ }
+
if (opp->funcs->opp_program_dpg_dimensions)
opp->funcs->opp_program_dpg_dimensions(opp, width, 2*(height) + 1);
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 051/149] io_uring: correct check for O_TMPFILE
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (49 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 050/149] drm/amd/display: trigger timing sync only if TG is running Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 052/149] iio: cros_ec: Fix the allocation size for cros_ec_command Greg Kroah-Hartman
` (110 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Aleksa Sarai, Jens Axboe
From: Aleksa Sarai <cyphar@cyphar.com>
Commit 72dbde0f2afbe4af8e8595a89c650ae6b9d9c36f upstream.
O_TMPFILE is actually __O_TMPFILE|O_DIRECTORY. This means that the old
check for whether RESOLVE_CACHED can be used would incorrectly think
that O_DIRECTORY could not be used with RESOLVE_CACHED.
Cc: stable@vger.kernel.org # v5.12+
Fixes: 3a81fd02045c ("io_uring: enable LOOKUP_CACHED path resolution for filename lookups")
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
Link: https://lore.kernel.org/r/20230807-resolve_cached-o_tmpfile-v3-1-e49323e1ef6f@cyphar.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
io_uring/openclose.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--- a/io_uring/openclose.c
+++ b/io_uring/openclose.c
@@ -110,9 +110,11 @@ int io_openat2(struct io_kiocb *req, uns
if (issue_flags & IO_URING_F_NONBLOCK) {
/*
* Don't bother trying for O_TRUNC, O_CREAT, or O_TMPFILE open,
- * it'll always -EAGAIN
+ * it'll always -EAGAIN. Note that we test for __O_TMPFILE
+ * because O_TMPFILE includes O_DIRECTORY, which isn't a flag
+ * we need to force async for.
*/
- if (open->how.flags & (O_TRUNC | O_CREAT | O_TMPFILE))
+ if (open->how.flags & (O_TRUNC | O_CREAT | __O_TMPFILE))
return -EAGAIN;
op.lookup_flags |= LOOKUP_CACHED;
op.open_flag |= O_NONBLOCK;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 052/149] iio: cros_ec: Fix the allocation size for cros_ec_command
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (50 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 051/149] io_uring: correct check for O_TMPFILE Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 053/149] iio: frequency: admv1013: propagate errors from regulator_get_voltage() Greg Kroah-Hartman
` (109 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Tzung-Bi Shih, Yiyuan Guo, Stable,
Jonathan Cameron
From: Yiyuan Guo <yguoaz@gmail.com>
commit 8a4629055ef55177b5b63dab1ecce676bd8cccdd upstream.
The struct cros_ec_command contains several integer fields and a
trailing array. An allocation size neglecting the integer fields can
lead to buffer overrun.
Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
Signed-off-by: Yiyuan Guo <yguoaz@gmail.com>
Fixes: 974e6f02e27e ("iio: cros_ec_sensors_core: Add common functions for the ChromeOS EC Sensor Hub.")
Link: https://lore.kernel.org/r/20230630143719.1513906-1-yguoaz@gmail.com
Cc: <Stable@vger.kerenl.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
+++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
@@ -253,7 +253,7 @@ int cros_ec_sensors_core_init(struct pla
platform_set_drvdata(pdev, indio_dev);
state->ec = ec->ec_dev;
- state->msg = devm_kzalloc(&pdev->dev,
+ state->msg = devm_kzalloc(&pdev->dev, sizeof(*state->msg) +
max((u16)sizeof(struct ec_params_motion_sense),
state->ec->max_response), GFP_KERNEL);
if (!state->msg)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 053/149] iio: frequency: admv1013: propagate errors from regulator_get_voltage()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (51 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 052/149] iio: cros_ec: Fix the allocation size for cros_ec_command Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 054/149] iio: adc: ad7192: Fix ac excitation feature Greg Kroah-Hartman
` (108 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Dan Carpenter, Stable,
Jonathan Cameron
From: Dan Carpenter <dan.carpenter@linaro.org>
commit 507397d19b5a296aa339f7a1bd16284f668a1906 upstream.
The regulator_get_voltage() function returns negative error codes.
This function saves it to an unsigned int and then does some range
checking and, since the error code falls outside the correct range,
it returns -EINVAL.
Beyond the messiness, this is bad because the regulator_get_voltage()
function can return -EPROBE_DEFER and it's important to propagate that
back properly so it can be handled.
Fixes: da35a7b526d9 ("iio: frequency: admv1013: add support for ADMV1013")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Link: https://lore.kernel.org/r/ce75aac3-2aba-4435-8419-02e59fdd862b@moroto.mountain
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/frequency/admv1013.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/drivers/iio/frequency/admv1013.c
+++ b/drivers/iio/frequency/admv1013.c
@@ -344,9 +344,12 @@ static int admv1013_update_quad_filters(
static int admv1013_update_mixer_vgate(struct admv1013_state *st)
{
- unsigned int vcm, mixer_vgate;
+ unsigned int mixer_vgate;
+ int vcm;
vcm = regulator_get_voltage(st->reg);
+ if (vcm < 0)
+ return vcm;
if (vcm < 1800000)
mixer_vgate = (2389 * vcm / 1000000 + 8100) / 100;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 054/149] iio: adc: ad7192: Fix ac excitation feature
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (52 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 053/149] iio: frequency: admv1013: propagate errors from regulator_get_voltage() Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 055/149] iio: adc: ina2xx: avoid NULL pointer dereference on OF device match Greg Kroah-Hartman
` (107 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Alisa Roman, Nuno Sa,
Jonathan Cameron
From: Alisa Roman <alisa.roman@analog.com>
commit 6bc471b6c3aeaa7b95d1b86a1bb8d91a3c341fa5 upstream.
AC excitation enable feature exposed to user on AD7192, allowing a bit
which should be 0 to be set. This feature is specific only to AD7195. AC
excitation attribute moved accordingly.
In the AD7195 documentation, the AC excitation enable bit is on position
22 in the Configuration register. ACX macro changed to match correct
register and bit.
Note that the fix tag is for the commit that moved the driver out of
staging.
Fixes: b581f748cce0 ("staging: iio: adc: ad7192: move out of staging")
Signed-off-by: Alisa Roman <alisa.roman@analog.com>
Cc: stable@vger.kernel.org
Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20230614155242.160296-1-alisa.roman@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/adc/ad7192.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
--- a/drivers/iio/adc/ad7192.c
+++ b/drivers/iio/adc/ad7192.c
@@ -62,7 +62,6 @@
#define AD7192_MODE_STA_MASK BIT(20) /* Status Register transmission Mask */
#define AD7192_MODE_CLKSRC(x) (((x) & 0x3) << 18) /* Clock Source Select */
#define AD7192_MODE_SINC3 BIT(15) /* SINC3 Filter Select */
-#define AD7192_MODE_ACX BIT(14) /* AC excitation enable(AD7195 only)*/
#define AD7192_MODE_ENPAR BIT(13) /* Parity Enable */
#define AD7192_MODE_CLKDIV BIT(12) /* Clock divide by 2 (AD7190/2 only)*/
#define AD7192_MODE_SCYCLE BIT(11) /* Single cycle conversion */
@@ -91,6 +90,7 @@
/* Configuration Register Bit Designations (AD7192_REG_CONF) */
#define AD7192_CONF_CHOP BIT(23) /* CHOP enable */
+#define AD7192_CONF_ACX BIT(22) /* AC excitation enable(AD7195 only) */
#define AD7192_CONF_REFSEL BIT(20) /* REFIN1/REFIN2 Reference Select */
#define AD7192_CONF_CHAN(x) ((x) << 8) /* Channel select */
#define AD7192_CONF_CHAN_MASK (0x7FF << 8) /* Channel select mask */
@@ -473,7 +473,7 @@ static ssize_t ad7192_show_ac_excitation
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct ad7192_state *st = iio_priv(indio_dev);
- return sysfs_emit(buf, "%d\n", !!(st->mode & AD7192_MODE_ACX));
+ return sysfs_emit(buf, "%d\n", !!(st->conf & AD7192_CONF_ACX));
}
static ssize_t ad7192_show_bridge_switch(struct device *dev,
@@ -514,13 +514,13 @@ static ssize_t ad7192_set(struct device
ad_sd_write_reg(&st->sd, AD7192_REG_GPOCON, 1, st->gpocon);
break;
- case AD7192_REG_MODE:
+ case AD7192_REG_CONF:
if (val)
- st->mode |= AD7192_MODE_ACX;
+ st->conf |= AD7192_CONF_ACX;
else
- st->mode &= ~AD7192_MODE_ACX;
+ st->conf &= ~AD7192_CONF_ACX;
- ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
+ ad_sd_write_reg(&st->sd, AD7192_REG_CONF, 3, st->conf);
break;
default:
ret = -EINVAL;
@@ -580,12 +580,11 @@ static IIO_DEVICE_ATTR(bridge_switch_en,
static IIO_DEVICE_ATTR(ac_excitation_en, 0644,
ad7192_show_ac_excitation, ad7192_set,
- AD7192_REG_MODE);
+ AD7192_REG_CONF);
static struct attribute *ad7192_attributes[] = {
&iio_dev_attr_filter_low_pass_3db_frequency_available.dev_attr.attr,
&iio_dev_attr_bridge_switch_en.dev_attr.attr,
- &iio_dev_attr_ac_excitation_en.dev_attr.attr,
NULL
};
@@ -596,6 +595,7 @@ static const struct attribute_group ad71
static struct attribute *ad7195_attributes[] = {
&iio_dev_attr_filter_low_pass_3db_frequency_available.dev_attr.attr,
&iio_dev_attr_bridge_switch_en.dev_attr.attr,
+ &iio_dev_attr_ac_excitation_en.dev_attr.attr,
NULL
};
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 055/149] iio: adc: ina2xx: avoid NULL pointer dereference on OF device match
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (53 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 054/149] iio: adc: ad7192: Fix ac excitation feature Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 056/149] binder: fix memory leak in binder_init() Greg Kroah-Hartman
` (106 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alvin Šipraga, Stable,
Jonathan Cameron
From: Alvin Šipraga <alsi@bang-olufsen.dk>
commit a41e19cc0d6b6a445a4133170b90271e4a2553dc upstream.
The affected lines were resulting in a NULL pointer dereference on our
platform because the device tree contained the following list of
compatible strings:
power-sensor@40 {
compatible = "ti,ina232", "ti,ina231";
...
};
Since the driver doesn't declare a compatible string "ti,ina232", the OF
matching succeeds on "ti,ina231". But the I2C device ID info is
populated via the first compatible string, cf. modalias population in
of_i2c_get_board_info(). Since there is no "ina232" entry in the legacy
I2C device ID table either, the struct i2c_device_id *id pointer in the
probe function is NULL.
Fix this by using the already populated type variable instead, which
points to the proper driver data. Since the name is also wanted, add a
generic one to the ina2xx_config table.
Signed-off-by: Alvin Šipraga <alsi@bang-olufsen.dk>
Fixes: c43a102e67db ("iio: ina2xx: add support for TI INA2xx Power Monitors")
Link: https://lore.kernel.org/r/20230619141239.2257392-1-alvin@pqrs.dk
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/adc/ina2xx-adc.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
--- a/drivers/iio/adc/ina2xx-adc.c
+++ b/drivers/iio/adc/ina2xx-adc.c
@@ -124,6 +124,7 @@ static const struct regmap_config ina2xx
enum ina2xx_ids { ina219, ina226 };
struct ina2xx_config {
+ const char *name;
u16 config_default;
int calibration_value;
int shunt_voltage_lsb; /* nV */
@@ -155,6 +156,7 @@ struct ina2xx_chip_info {
static const struct ina2xx_config ina2xx_config[] = {
[ina219] = {
+ .name = "ina219",
.config_default = INA219_CONFIG_DEFAULT,
.calibration_value = 4096,
.shunt_voltage_lsb = 10000,
@@ -164,6 +166,7 @@ static const struct ina2xx_config ina2xx
.chip_id = ina219,
},
[ina226] = {
+ .name = "ina226",
.config_default = INA226_CONFIG_DEFAULT,
.calibration_value = 2048,
.shunt_voltage_lsb = 2500,
@@ -996,7 +999,7 @@ static int ina2xx_probe(struct i2c_clien
/* Patch the current config register with default. */
val = chip->config->config_default;
- if (id->driver_data == ina226) {
+ if (type == ina226) {
ina226_set_average(chip, INA226_DEFAULT_AVG, &val);
ina226_set_int_time_vbus(chip, INA226_DEFAULT_IT, &val);
ina226_set_int_time_vshunt(chip, INA226_DEFAULT_IT, &val);
@@ -1015,7 +1018,7 @@ static int ina2xx_probe(struct i2c_clien
}
indio_dev->modes = INDIO_DIRECT_MODE;
- if (id->driver_data == ina226) {
+ if (type == ina226) {
indio_dev->channels = ina226_channels;
indio_dev->num_channels = ARRAY_SIZE(ina226_channels);
indio_dev->info = &ina226_info;
@@ -1024,7 +1027,7 @@ static int ina2xx_probe(struct i2c_clien
indio_dev->num_channels = ARRAY_SIZE(ina219_channels);
indio_dev->info = &ina219_info;
}
- indio_dev->name = id->name;
+ indio_dev->name = id ? id->name : chip->config->name;
ret = devm_iio_kfifo_buffer_setup(&client->dev, indio_dev,
&ina2xx_setup_ops);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 056/149] binder: fix memory leak in binder_init()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (54 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 055/149] iio: adc: ina2xx: avoid NULL pointer dereference on OF device match Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 057/149] misc: rtsx: judge ASPM Mode to set PETXCFG Reg Greg Kroah-Hartman
` (105 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Qi Zheng, Carlos Llamas, stable
From: Qi Zheng <zhengqi.arch@bytedance.com>
commit adb9743d6a08778b78d62d16b4230346d3508986 upstream.
In binder_init(), the destruction of binder_alloc_shrinker_init() is not
performed in the wrong path, which will cause memory leaks. So this commit
introduces binder_alloc_shrinker_exit() and calls it in the wrong path to
fix that.
Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
Acked-by: Carlos Llamas <cmllamas@google.com>
Fixes: f2517eb76f1f ("android: binder: Add global lru shrinker to binder")
Cc: stable <stable@kernel.org>
Link: https://lore.kernel.org/r/20230625154937.64316-1-qi.zheng@linux.dev
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/android/binder.c | 1 +
drivers/android/binder_alloc.c | 6 ++++++
drivers/android/binder_alloc.h | 1 +
3 files changed, 8 insertions(+)
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -6602,6 +6602,7 @@ err_init_binder_device_failed:
err_alloc_device_names_failed:
debugfs_remove_recursive(binder_debugfs_dir_entry_root);
+ binder_alloc_shrinker_exit();
return ret;
}
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -1087,6 +1087,12 @@ int binder_alloc_shrinker_init(void)
return ret;
}
+void binder_alloc_shrinker_exit(void)
+{
+ unregister_shrinker(&binder_shrinker);
+ list_lru_destroy(&binder_alloc_lru);
+}
+
/**
* check_buffer() - verify that buffer/offset is safe to access
* @alloc: binder_alloc for this proc
--- a/drivers/android/binder_alloc.h
+++ b/drivers/android/binder_alloc.h
@@ -129,6 +129,7 @@ extern struct binder_buffer *binder_allo
int pid);
extern void binder_alloc_init(struct binder_alloc *alloc);
extern int binder_alloc_shrinker_init(void);
+extern void binder_alloc_shrinker_exit(void);
extern void binder_alloc_vma_close(struct binder_alloc *alloc);
extern struct binder_buffer *
binder_alloc_prepare_to_free(struct binder_alloc *alloc,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 057/149] misc: rtsx: judge ASPM Mode to set PETXCFG Reg
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (55 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 056/149] binder: fix memory leak in binder_init() Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 058/149] usb-storage: alauda: Fix uninit-value in alauda_check_media() Greg Kroah-Hartman
` (104 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Ricky Wu
From: Ricky WU <ricky_wu@realtek.com>
commit 101bd907b4244a726980ee67f95ed9cafab6ff7a upstream.
ASPM Mode is ASPM_MODE_CFG need to judge the value of clkreq_0
to set HIGH or LOW, if the ASPM Mode is ASPM_MODE_REG
always set to HIGH during the initialization.
Cc: stable@vger.kernel.org
Signed-off-by: Ricky Wu <ricky_wu@realtek.com>
Link: https://lore.kernel.org/r/52906c6836374c8cb068225954c5543a@realtek.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/misc/cardreader/rts5227.c | 2 +-
drivers/misc/cardreader/rts5228.c | 18 ------------------
drivers/misc/cardreader/rts5249.c | 3 +--
drivers/misc/cardreader/rts5260.c | 18 ------------------
drivers/misc/cardreader/rts5261.c | 18 ------------------
drivers/misc/cardreader/rtsx_pcr.c | 5 ++++-
6 files changed, 6 insertions(+), 58 deletions(-)
--- a/drivers/misc/cardreader/rts5227.c
+++ b/drivers/misc/cardreader/rts5227.c
@@ -195,7 +195,7 @@ static int rts5227_extra_init_hw(struct
}
}
- if (option->force_clkreq_0)
+ if (option->force_clkreq_0 && pcr->aspm_mode == ASPM_MODE_CFG)
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG,
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
else
--- a/drivers/misc/cardreader/rts5228.c
+++ b/drivers/misc/cardreader/rts5228.c
@@ -435,17 +435,10 @@ static void rts5228_init_from_cfg(struct
option->ltr_enabled = false;
}
}
-
- if (rtsx_check_dev_flag(pcr, ASPM_L1_1_EN | ASPM_L1_2_EN
- | PM_L1_1_EN | PM_L1_2_EN))
- option->force_clkreq_0 = false;
- else
- option->force_clkreq_0 = true;
}
static int rts5228_extra_init_hw(struct rtsx_pcr *pcr)
{
- struct rtsx_cr_option *option = &pcr->option;
rtsx_pci_write_register(pcr, RTS5228_AUTOLOAD_CFG1,
CD_RESUME_EN_MASK, CD_RESUME_EN_MASK);
@@ -476,17 +469,6 @@ static int rts5228_extra_init_hw(struct
else
rtsx_pci_write_register(pcr, PETXCFG, 0x30, 0x00);
- /*
- * If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
- * to drive low, and we forcibly request clock.
- */
- if (option->force_clkreq_0)
- rtsx_pci_write_register(pcr, PETXCFG,
- FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
- else
- rtsx_pci_write_register(pcr, PETXCFG,
- FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
-
rtsx_pci_write_register(pcr, PWD_SUSPEND_EN, 0xFF, 0xFB);
if (pcr->rtd3_en) {
--- a/drivers/misc/cardreader/rts5249.c
+++ b/drivers/misc/cardreader/rts5249.c
@@ -327,12 +327,11 @@ static int rts5249_extra_init_hw(struct
}
}
-
/*
* If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
* to drive low, and we forcibly request clock.
*/
- if (option->force_clkreq_0)
+ if (option->force_clkreq_0 && pcr->aspm_mode == ASPM_MODE_CFG)
rtsx_pci_write_register(pcr, PETXCFG,
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
else
--- a/drivers/misc/cardreader/rts5260.c
+++ b/drivers/misc/cardreader/rts5260.c
@@ -517,17 +517,10 @@ static void rts5260_init_from_cfg(struct
option->ltr_enabled = false;
}
}
-
- if (rtsx_check_dev_flag(pcr, ASPM_L1_1_EN | ASPM_L1_2_EN
- | PM_L1_1_EN | PM_L1_2_EN))
- option->force_clkreq_0 = false;
- else
- option->force_clkreq_0 = true;
}
static int rts5260_extra_init_hw(struct rtsx_pcr *pcr)
{
- struct rtsx_cr_option *option = &pcr->option;
/* Set mcu_cnt to 7 to ensure data can be sampled properly */
rtsx_pci_write_register(pcr, 0xFC03, 0x7F, 0x07);
@@ -546,17 +539,6 @@ static int rts5260_extra_init_hw(struct
rts5260_init_hw(pcr);
- /*
- * If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
- * to drive low, and we forcibly request clock.
- */
- if (option->force_clkreq_0)
- rtsx_pci_write_register(pcr, PETXCFG,
- FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
- else
- rtsx_pci_write_register(pcr, PETXCFG,
- FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
-
rtsx_pci_write_register(pcr, pcr->reg_pm_ctrl3, 0x10, 0x00);
return 0;
--- a/drivers/misc/cardreader/rts5261.c
+++ b/drivers/misc/cardreader/rts5261.c
@@ -498,17 +498,10 @@ static void rts5261_init_from_cfg(struct
option->ltr_enabled = false;
}
}
-
- if (rtsx_check_dev_flag(pcr, ASPM_L1_1_EN | ASPM_L1_2_EN
- | PM_L1_1_EN | PM_L1_2_EN))
- option->force_clkreq_0 = false;
- else
- option->force_clkreq_0 = true;
}
static int rts5261_extra_init_hw(struct rtsx_pcr *pcr)
{
- struct rtsx_cr_option *option = &pcr->option;
u32 val;
rtsx_pci_write_register(pcr, RTS5261_AUTOLOAD_CFG1,
@@ -554,17 +547,6 @@ static int rts5261_extra_init_hw(struct
else
rtsx_pci_write_register(pcr, PETXCFG, 0x30, 0x00);
- /*
- * If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
- * to drive low, and we forcibly request clock.
- */
- if (option->force_clkreq_0)
- rtsx_pci_write_register(pcr, PETXCFG,
- FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
- else
- rtsx_pci_write_register(pcr, PETXCFG,
- FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
-
rtsx_pci_write_register(pcr, PWD_SUSPEND_EN, 0xFF, 0xFB);
if (pcr->rtd3_en) {
--- a/drivers/misc/cardreader/rtsx_pcr.c
+++ b/drivers/misc/cardreader/rtsx_pcr.c
@@ -1326,8 +1326,11 @@ static int rtsx_pci_init_hw(struct rtsx_
return err;
}
- if (pcr->aspm_mode == ASPM_MODE_REG)
+ if (pcr->aspm_mode == ASPM_MODE_REG) {
rtsx_pci_write_register(pcr, ASPM_FORCE_CTL, 0x30, 0x30);
+ rtsx_pci_write_register(pcr, PETXCFG,
+ FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
+ }
/* No CD interrupt if probing driver with card inserted.
* So we need to initialize pcr->card_exist here.
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 058/149] usb-storage: alauda: Fix uninit-value in alauda_check_media()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (56 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 057/149] misc: rtsx: judge ASPM Mode to set PETXCFG Reg Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 059/149] usb: dwc3: Properly handle processing of pending events Greg Kroah-Hartman
` (103 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christophe JAILLET, Alan Stern,
syzbot+e7d46eb426883fb97efd
From: Alan Stern <stern@rowland.harvard.edu>
commit a6ff6e7a9dd69364547751db0f626a10a6d628d2 upstream.
Syzbot got KMSAN to complain about access to an uninitialized value in
the alauda subdriver of usb-storage:
BUG: KMSAN: uninit-value in alauda_transport+0x462/0x57f0
drivers/usb/storage/alauda.c:1137
CPU: 0 PID: 12279 Comm: usb-storage Not tainted 5.3.0-rc7+ #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x191/0x1f0 lib/dump_stack.c:113
kmsan_report+0x13a/0x2b0 mm/kmsan/kmsan_report.c:108
__msan_warning+0x73/0xe0 mm/kmsan/kmsan_instr.c:250
alauda_check_media+0x344/0x3310 drivers/usb/storage/alauda.c:460
The problem is that alauda_check_media() doesn't verify that its USB
transfer succeeded before trying to use the received data. What
should happen if the transfer fails isn't entirely clear, but a
reasonably conservative approach is to pretend that no media is
present.
A similar problem exists in a usb_stor_dbg() call in
alauda_get_media_status(). In this case, when an error occurs the
call is redundant, because usb_stor_ctrl_transfer() already will print
a debugging message.
Finally, unrelated to the uninitialized memory access, is the fact
that alauda_check_media() performs DMA to a buffer on the stack.
Fortunately usb-storage provides a general purpose DMA-able buffer for
uses like this. We'll use it instead.
Reported-and-tested-by: syzbot+e7d46eb426883fb97efd@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/all/0000000000007d25ff059457342d@google.com/T/
Suggested-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Fixes: e80b0fade09e ("[PATCH] USB Storage: add alauda support")
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/693d5d5e-f09b-42d0-8ed9-1f96cd30bcce@rowland.harvard.edu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/storage/alauda.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
--- a/drivers/usb/storage/alauda.c
+++ b/drivers/usb/storage/alauda.c
@@ -318,7 +318,8 @@ static int alauda_get_media_status(struc
rc = usb_stor_ctrl_transfer(us, us->recv_ctrl_pipe,
command, 0xc0, 0, 1, data, 2);
- usb_stor_dbg(us, "Media status %02X %02X\n", data[0], data[1]);
+ if (rc == USB_STOR_XFER_GOOD)
+ usb_stor_dbg(us, "Media status %02X %02X\n", data[0], data[1]);
return rc;
}
@@ -454,9 +455,14 @@ static int alauda_init_media(struct us_d
static int alauda_check_media(struct us_data *us)
{
struct alauda_info *info = (struct alauda_info *) us->extra;
- unsigned char status[2];
+ unsigned char *status = us->iobuf;
+ int rc;
- alauda_get_media_status(us, status);
+ rc = alauda_get_media_status(us, status);
+ if (rc != USB_STOR_XFER_GOOD) {
+ status[0] = 0xF0; /* Pretend there's no media */
+ status[1] = 0;
+ }
/* Check for no media or door open */
if ((status[0] & 0x80) || ((status[0] & 0x1F) == 0x10)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 059/149] usb: dwc3: Properly handle processing of pending events
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (57 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 058/149] usb-storage: alauda: Fix uninit-value in alauda_check_media() Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 060/149] USB: Gadget: core: Help prevent panic during UVC unconfigure Greg Kroah-Hartman
` (102 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Elson Roy Serrao, Thinh Nguyen,
Roger Quadros
From: Elson Roy Serrao <quic_eserrao@quicinc.com>
commit 3ddaa6a274578e23745b7466346fc2650df8f959 upstream.
If dwc3 is runtime suspended we defer processing the event buffer
until resume, by setting the pending_events flag. Set this flag before
triggering resume to avoid race with the runtime resume callback.
While handling the pending events, in addition to checking the event
buffer we also need to process it. Handle this by explicitly calling
dwc3_thread_interrupt(). Also balance the runtime pm get() operation
that triggered this processing.
Cc: stable@vger.kernel.org
Fixes: fc8bb91bc83e ("usb: dwc3: implement runtime PM")
Signed-off-by: Elson Roy Serrao <quic_eserrao@quicinc.com>
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Reviewed-by: Roger Quadros <rogerq@kernel.org>
Link: https://lore.kernel.org/r/20230801192658.19275-1-quic_eserrao@quicinc.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/dwc3/gadget.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -4342,9 +4342,14 @@ static irqreturn_t dwc3_check_event_buf(
u32 count;
if (pm_runtime_suspended(dwc->dev)) {
+ dwc->pending_events = true;
+ /*
+ * Trigger runtime resume. The get() function will be balanced
+ * after processing the pending events in dwc3_process_pending
+ * events().
+ */
pm_runtime_get(dwc->dev);
disable_irq_nosync(dwc->irq_gadget);
- dwc->pending_events = true;
return IRQ_HANDLED;
}
@@ -4609,6 +4614,8 @@ void dwc3_gadget_process_pending_events(
{
if (dwc->pending_events) {
dwc3_interrupt(dwc->irq_gadget, dwc->ev_buf);
+ dwc3_thread_interrupt(dwc->irq_gadget, dwc->ev_buf);
+ pm_runtime_put(dwc->dev);
dwc->pending_events = false;
enable_irq(dwc->irq_gadget);
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 060/149] USB: Gadget: core: Help prevent panic during UVC unconfigure
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (58 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 059/149] usb: dwc3: Properly handle processing of pending events Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 061/149] usb: common: usb-conn-gpio: Prevent bailing out if initial role is none Greg Kroah-Hartman
` (101 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alan Stern, Badhri Jagan Sridharan,
Avichal Rakesh
From: Alan Stern <stern@rowland.harvard.edu>
commit 65dadb2beeb7360232b09ebc4585b54475dfee06 upstream.
Avichal Rakesh reported a kernel panic that occurred when the UVC
gadget driver was removed from a gadget's configuration. The panic
involves a somewhat complicated interaction between the kernel driver
and a userspace component (as described in the Link tag below), but
the analysis did make one thing clear: The Gadget core should
accomodate gadget drivers calling usb_gadget_deactivate() as part of
their unbind procedure.
Currently this doesn't work. gadget_unbind_driver() calls
driver->unbind() while holding the udc->connect_lock mutex, and
usb_gadget_deactivate() attempts to acquire that mutex, which will
result in a deadlock.
The simple fix is for gadget_unbind_driver() to release the mutex when
invoking the ->unbind() callback. There is no particular reason for
it to be holding the mutex at that time, and the mutex isn't held
while the ->bind() callback is invoked. So we'll drop the mutex
before performing the unbind callback and reacquire it afterward.
We'll also add a couple of comments to usb_gadget_activate() and
usb_gadget_deactivate(). Because they run in process context they
must not be called from a gadget driver's ->disconnect() callback,
which (according to the kerneldoc for struct usb_gadget_driver in
include/linux/usb/gadget.h) may run in interrupt context. This may
help prevent similar bugs from arising in the future.
Reported-and-tested-by: Avichal Rakesh <arakesh@google.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Fixes: 286d9975a838 ("usb: gadget: udc: core: Prevent soft_connect_store() race")
Link: https://lore.kernel.org/linux-usb/4d7aa3f4-22d9-9f5a-3d70-1bd7148ff4ba@google.com/
Cc: Badhri Jagan Sridharan <badhri@google.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/48b2f1f1-0639-46bf-bbfc-98cb05a24914@rowland.harvard.edu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/gadget/udc/core.c | 9 +++++++++
1 file changed, 9 insertions(+)
--- a/drivers/usb/gadget/udc/core.c
+++ b/drivers/usb/gadget/udc/core.c
@@ -795,6 +795,9 @@ EXPORT_SYMBOL_GPL(usb_gadget_disconnect)
* usb_gadget_activate() is called. For example, user mode components may
* need to be activated before the system can talk to hosts.
*
+ * This routine may sleep; it must not be called in interrupt context
+ * (such as from within a gadget driver's disconnect() callback).
+ *
* Returns zero on success, else negative errno.
*/
int usb_gadget_deactivate(struct usb_gadget *gadget)
@@ -833,6 +836,8 @@ EXPORT_SYMBOL_GPL(usb_gadget_deactivate)
* This routine activates gadget which was previously deactivated with
* usb_gadget_deactivate() call. It calls usb_gadget_connect() if needed.
*
+ * This routine may sleep; it must not be called in interrupt context.
+ *
* Returns zero on success, else negative errno.
*/
int usb_gadget_activate(struct usb_gadget *gadget)
@@ -1611,7 +1616,11 @@ static void gadget_unbind_driver(struct
usb_gadget_disable_async_callbacks(udc);
if (gadget->irq)
synchronize_irq(gadget->irq);
+ mutex_unlock(&udc->connect_lock);
+
udc->driver->unbind(gadget);
+
+ mutex_lock(&udc->connect_lock);
usb_gadget_udc_stop_locked(udc);
mutex_unlock(&udc->connect_lock);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 061/149] usb: common: usb-conn-gpio: Prevent bailing out if initial role is none
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (59 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 060/149] USB: Gadget: core: Help prevent panic during UVC unconfigure Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 062/149] usb: typec: tcpm: Fix response to vsafe0V event Greg Kroah-Hartman
` (100 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Prashanth K,
AngeloGioacchino Del Regno, Heikki Krogerus
From: Prashanth K <quic_prashk@quicinc.com>
commit 8e21a620c7e6e00347ade1a6ed4967b359eada5a upstream.
Currently if we bootup a device without cable connected, then
usb-conn-gpio won't call set_role() because last_role is same
as current role. This happens since last_role gets initialised
to zero during the probe.
To avoid this, add a new flag initial_detection into struct
usb_conn_info, which prevents bailing out during initial
detection.
Cc: <stable@vger.kernel.org> # 5.4
Fixes: 4602f3bff266 ("usb: common: add USB GPIO based connection detection driver")
Signed-off-by: Prashanth K <quic_prashk@quicinc.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/1690880632-12588-1-git-send-email-quic_prashk@quicinc.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/common/usb-conn-gpio.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--- a/drivers/usb/common/usb-conn-gpio.c
+++ b/drivers/usb/common/usb-conn-gpio.c
@@ -42,6 +42,7 @@ struct usb_conn_info {
struct power_supply_desc desc;
struct power_supply *charger;
+ bool initial_detection;
};
/*
@@ -86,11 +87,13 @@ static void usb_conn_detect_cable(struct
dev_dbg(info->dev, "role %s -> %s, gpios: id %d, vbus %d\n",
usb_role_string(info->last_role), usb_role_string(role), id, vbus);
- if (info->last_role == role) {
+ if (!info->initial_detection && info->last_role == role) {
dev_warn(info->dev, "repeated role: %s\n", usb_role_string(role));
return;
}
+ info->initial_detection = false;
+
if (info->last_role == USB_ROLE_HOST && info->vbus)
regulator_disable(info->vbus);
@@ -258,6 +261,7 @@ static int usb_conn_probe(struct platfor
device_set_wakeup_capable(&pdev->dev, true);
/* Perform initial detection */
+ info->initial_detection = true;
usb_conn_queue_dwork(info, 0);
return 0;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 062/149] usb: typec: tcpm: Fix response to vsafe0V event
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (60 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 061/149] usb: common: usb-conn-gpio: Prevent bailing out if initial role is none Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 063/149] usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment Greg Kroah-Hartman
` (99 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Badhri Jagan Sridharan,
Heikki Krogerus
From: Badhri Jagan Sridharan <badhri@google.com>
commit 4270d2b4845e820b274702bfc2a7140f69e4d19d upstream.
Do not transition to SNK_UNATTACHED state when receiving vsafe0v event
while in SNK_HARD_RESET_WAIT_VBUS. Ignore VBUS off events as well as
in some platforms VBUS off can be signalled more than once.
[143515.364753] Requesting mux state 1, usb-role 2, orientation 2
[143515.365520] pending state change SNK_HARD_RESET_SINK_OFF -> SNK_HARD_RESET_SINK_ON @ 650 ms [rev3 HARD_RESET]
[143515.632281] CC1: 0 -> 0, CC2: 3 -> 0 [state SNK_HARD_RESET_SINK_OFF, polarity 1, disconnected]
[143515.637214] VBUS on
[143515.664985] VBUS off
[143515.664992] state change SNK_HARD_RESET_SINK_OFF -> SNK_HARD_RESET_WAIT_VBUS [rev3 HARD_RESET]
[143515.665564] VBUS VSAFE0V
[143515.665566] state change SNK_HARD_RESET_WAIT_VBUS -> SNK_UNATTACHED [rev3 HARD_RESET]
Fixes: 28b43d3d746b ("usb: typec: tcpm: Introduce vsafe0v for vbus")
Cc: <stable@vger.kernel.org>
Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20230712085722.1414743-1-badhri@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/typec/tcpm/tcpm.c | 7 +++++++
1 file changed, 7 insertions(+)
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -5322,6 +5322,10 @@ static void _tcpm_pd_vbus_off(struct tcp
/* Do nothing, vbus drop expected */
break;
+ case SNK_HARD_RESET_WAIT_VBUS:
+ /* Do nothing, its OK to receive vbus off events */
+ break;
+
default:
if (port->pwr_role == TYPEC_SINK && port->attached)
tcpm_set_state(port, SNK_UNATTACHED, tcpm_wait_for_discharge(port));
@@ -5368,6 +5372,9 @@ static void _tcpm_pd_vbus_vsafe0v(struct
case SNK_DEBOUNCED:
/*Do nothing, still waiting for VSAFE5V for connect */
break;
+ case SNK_HARD_RESET_WAIT_VBUS:
+ /* Do nothing, its OK to receive vbus off events */
+ break;
default:
if (port->pwr_role == TYPEC_SINK && port->auto_vbus_discharge_enabled)
tcpm_set_state(port, SNK_UNATTACHED, 0);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 063/149] usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (61 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 062/149] usb: typec: tcpm: Fix response to vsafe0V event Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 064/149] x86/srso: Fix build breakage with the LLVM linker Greg Kroah-Hartman
` (98 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, RD Babiera, Heikki Krogerus
From: RD Babiera <rdbabiera@google.com>
commit 5a5ccd61cfd76156cb3e0373c300c509d05448ce upstream.
When connecting to some DisplayPort partners, the initial status update
after entering DisplayPort Alt Mode notifies that the DFP_D/UFP_D is not in
the connected state. This leads to sending a configure message that keeps
the device in USB mode. The port partner then sets DFP_D/UFP_D to the
connected state and HPD to high in the same Attention message. Currently,
the HPD signal is dropped in order to handle configuration.
This patch saves changes to the HPD signal when the device chooses to
configure during dp_altmode_status_update, and invokes sysfs_notify if
necessary for HPD after configuring.
Fixes: 0e3bb7d6894d ("usb: typec: Add driver for DisplayPort alternate mode")
Cc: stable@vger.kernel.org
Signed-off-by: RD Babiera <rdbabiera@google.com>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20230726020903.1409072-1-rdbabiera@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/typec/altmodes/displayport.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
--- a/drivers/usb/typec/altmodes/displayport.c
+++ b/drivers/usb/typec/altmodes/displayport.c
@@ -60,6 +60,7 @@ struct dp_altmode {
enum dp_state state;
bool hpd;
+ bool pending_hpd;
struct mutex lock; /* device lock */
struct work_struct work;
@@ -144,8 +145,13 @@ static int dp_altmode_status_update(stru
dp->state = DP_STATE_EXIT;
} else if (!(con & DP_CONF_CURRENTLY(dp->data.conf))) {
ret = dp_altmode_configure(dp, con);
- if (!ret)
+ if (!ret) {
dp->state = DP_STATE_CONFIGURE;
+ if (dp->hpd != hpd) {
+ dp->hpd = hpd;
+ dp->pending_hpd = true;
+ }
+ }
} else {
if (dp->hpd != hpd) {
drm_connector_oob_hotplug_event(dp->connector_fwnode);
@@ -160,6 +166,16 @@ static int dp_altmode_configured(struct
{
sysfs_notify(&dp->alt->dev.kobj, "displayport", "configuration");
sysfs_notify(&dp->alt->dev.kobj, "displayport", "pin_assignment");
+ /*
+ * If the DFP_D/UFP_D sends a change in HPD when first notifying the
+ * DisplayPort driver that it is connected, then we wait until
+ * configuration is complete to signal HPD.
+ */
+ if (dp->pending_hpd) {
+ drm_connector_oob_hotplug_event(dp->connector_fwnode);
+ sysfs_notify(&dp->alt->dev.kobj, "displayport", "hpd");
+ dp->pending_hpd = false;
+ }
return dp_altmode_notify(dp);
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 064/149] x86/srso: Fix build breakage with the LLVM linker
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (62 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 063/149] usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 065/149] x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405 Greg Kroah-Hartman
` (97 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Nathan Chancellor, Daniel Kolesa,
Naresh Kamboju, Sven Volkinsfeld, Nick Desaulniers,
Borislav Petkov (AMD)
From: Nick Desaulniers <ndesaulniers@google.com>
commit cbe8ded48b939b9d55d2c5589ab56caa7b530709 upstream.
The assertion added to verify the difference in bits set of the
addresses of srso_untrain_ret_alias() and srso_safe_ret_alias() would fail
to link in LLVM's ld.lld linker with the following error:
ld.lld: error: ./arch/x86/kernel/vmlinux.lds:210: at least one side of
the expression must be absolute
ld.lld: error: ./arch/x86/kernel/vmlinux.lds:211: at least one side of
the expression must be absolute
Use ABSOLUTE to evaluate the expression referring to at least one of the
symbols so that LLD can evaluate the linker script.
Also, add linker version info to the comment about XOR being unsupported
in either ld.bfd or ld.lld until somewhat recently.
Fixes: fb3bd914b3ec ("x86/srso: Add a Speculative RAS Overflow mitigation")
Closes: https://lore.kernel.org/llvm/CA+G9fYsdUeNu-gwbs0+T6XHi4hYYk=Y9725-wFhZ7gJMspLDRA@mail.gmail.com/
Reported-by: Nathan Chancellor <nathan@kernel.org>
Reported-by: Daniel Kolesa <daniel@octaforge.org>
Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
Suggested-by: Sven Volkinsfeld <thyrc@gmx.net>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://github.com/ClangBuiltLinux/linux/issues/1907
Link: https://lore.kernel.org/r/20230809-gds-v1-1-eaac90b0cbcc@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/x86/kernel/vmlinux.lds.S | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -514,11 +514,17 @@ INIT_PER_CPU(irq_stack_backing_store);
#ifdef CONFIG_CPU_SRSO
/*
- * GNU ld cannot do XOR so do: (A | B) - (A & B) in order to compute the XOR
+ * GNU ld cannot do XOR until 2.41.
+ * https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=f6f78318fca803c4907fb8d7f6ded8295f1947b1
+ *
+ * LLVM lld cannot do XOR until lld-17.
+ * https://github.com/llvm/llvm-project/commit/fae96104d4378166cbe5c875ef8ed808a356f3fb
+ *
+ * Instead do: (A | B) - (A & B) in order to compute the XOR
* of the two function addresses:
*/
-. = ASSERT(((srso_untrain_ret_alias | srso_safe_ret_alias) -
- (srso_untrain_ret_alias & srso_safe_ret_alias)) == ((1 << 2) | (1 << 8) | (1 << 14) | (1 << 20)),
+. = ASSERT(((ABSOLUTE(srso_untrain_ret_alias) | srso_safe_ret_alias) -
+ (ABSOLUTE(srso_untrain_ret_alias) & srso_safe_ret_alias)) == ((1 << 2) | (1 << 8) | (1 << 14) | (1 << 20)),
"SRSO function pair won't alias");
#endif
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 065/149] x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (63 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 064/149] x86/srso: Fix build breakage with the LLVM linker Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 066/149] x86/mm: Fix VDSO and VVAR placement on 5-level paging machines Greg Kroah-Hartman
` (96 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Cristian Ciocaltea,
Borislav Petkov (AMD)
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
commit 6dbef74aeb090d6bee7d64ef3fa82ae6fa53f271 upstream.
Commit
522b1d69219d ("x86/cpu/amd: Add a Zenbleed fix")
provided a fix for the Zen2 VZEROUPPER data corruption bug affecting
a range of CPU models, but the AMD Custom APU 0405 found on SteamDeck
was not listed, although it is clearly affected by the vulnerability.
Add this CPU variant to the Zenbleed erratum list, in order to
unconditionally enable the fallback fix until a proper microcode update
is available.
Fixes: 522b1d69219d ("x86/cpu/amd: Add a Zenbleed fix")
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230811203705.1699914-1-cristian.ciocaltea@collabora.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/x86/kernel/cpu/amd.c | 1 +
1 file changed, 1 insertion(+)
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -73,6 +73,7 @@ static const int amd_erratum_1054[] =
static const int amd_zenbleed[] =
AMD_LEGACY_ERRATUM(AMD_MODEL_RANGE(0x17, 0x30, 0x0, 0x4f, 0xf),
AMD_MODEL_RANGE(0x17, 0x60, 0x0, 0x7f, 0xf),
+ AMD_MODEL_RANGE(0x17, 0x90, 0x0, 0x91, 0xf),
AMD_MODEL_RANGE(0x17, 0xa0, 0x0, 0xaf, 0xf));
static const int amd_div0[] =
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 066/149] x86/mm: Fix VDSO and VVAR placement on 5-level paging machines
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (64 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 065/149] x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405 Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 067/149] x86/sev: Do not try to parse for the CC blob on non-AMD hardware Greg Kroah-Hartman
` (95 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yingcong Wu, Kirill A. Shutemov,
Dave Hansen
From: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
commit 1b8b1aa90c9c0e825b181b98b8d9e249dc395470 upstream.
Yingcong has noticed that on the 5-level paging machine, VDSO and VVAR
VMAs are placed above the 47-bit border:
8000001a9000-8000001ad000 r--p 00000000 00:00 0 [vvar]
8000001ad000-8000001af000 r-xp 00000000 00:00 0 [vdso]
This might confuse users who are not aware of 5-level paging and expect
all userspace addresses to be under the 47-bit border.
So far problem has only been triggered with ASLR disabled, although it
may also occur with ASLR enabled if the layout is randomized in a just
right way.
The problem happens due to custom placement for the VMAs in the VDSO
code: vdso_addr() tries to place them above the stack and checks the
result against TASK_SIZE_MAX, which is wrong. TASK_SIZE_MAX is set to
the 56-bit border on 5-level paging machines. Use DEFAULT_MAP_WINDOW
instead.
Fixes: b569bab78d8d ("x86/mm: Prepare to expose larger address space to userspace")
Reported-by: Yingcong Wu <yingcong.wu@intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/all/20230803151609.22141-1-kirill.shutemov%40linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/x86/entry/vdso/vma.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/arch/x86/entry/vdso/vma.c
+++ b/arch/x86/entry/vdso/vma.c
@@ -322,8 +322,8 @@ static unsigned long vdso_addr(unsigned
/* Round the lowest possible end address up to a PMD boundary. */
end = (start + len + PMD_SIZE - 1) & PMD_MASK;
- if (end >= TASK_SIZE_MAX)
- end = TASK_SIZE_MAX;
+ if (end >= DEFAULT_MAP_WINDOW)
+ end = DEFAULT_MAP_WINDOW;
end -= len;
if (end > start) {
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 067/149] x86/sev: Do not try to parse for the CC blob on non-AMD hardware
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (65 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 066/149] x86/mm: Fix VDSO and VVAR placement on 5-level paging machines Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 068/149] x86/speculation: Add cpu_show_gds() prototype Greg Kroah-Hartman
` (94 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Tao Liu, Borislav Petkov (AMD),
Tom Lendacky, stable
From: Borislav Petkov (AMD) <bp@alien8.de>
commit bee6cf1a80b54548a039e224c651bb15b644a480 upstream.
Tao Liu reported a boot hang on an Intel Atom machine due to an unmapped
EFI config table. The reason being that the CC blob which contains the
CPUID page for AMD SNP guests is parsed for before even checking
whether the machine runs on AMD hardware.
Usually that's not a problem on !AMD hw - it simply won't find the CC
blob's GUID and return. However, if any parts of the config table
pointers array is not mapped, the kernel will #PF very early in the
decompressor stage without any opportunity to recover.
Therefore, do a superficial CPUID check before poking for the CC blob.
This will fix the current issue on real hardware. It would also work as
a guest on a non-lying hypervisor.
For the lying hypervisor, the check is done again, *after* parsing the
CC blob as the real CPUID page will be present then.
Clear the #VC handler in case SEV-{ES,SNP} hasn't been detected, as
a precaution.
Fixes: c01fce9cef84 ("x86/compressed: Add SEV-SNP feature detection/setup")
Reported-by: Tao Liu <ltao@redhat.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
Tested-by: Tao Liu <ltao@redhat.com>
Cc: <stable@kernel.org>
Link: https://lore.kernel.org/r/20230601072043.24439-1-ltao@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/x86/boot/compressed/idt_64.c | 9 ++++++++-
arch/x86/boot/compressed/sev.c | 37 +++++++++++++++++++++++++++++++++++--
2 files changed, 43 insertions(+), 3 deletions(-)
--- a/arch/x86/boot/compressed/idt_64.c
+++ b/arch/x86/boot/compressed/idt_64.c
@@ -63,7 +63,14 @@ void load_stage2_idt(void)
set_idt_entry(X86_TRAP_PF, boot_page_fault);
#ifdef CONFIG_AMD_MEM_ENCRYPT
- set_idt_entry(X86_TRAP_VC, boot_stage2_vc);
+ /*
+ * Clear the second stage #VC handler in case guest types
+ * needing #VC have not been detected.
+ */
+ if (sev_status & BIT(1))
+ set_idt_entry(X86_TRAP_VC, boot_stage2_vc);
+ else
+ set_idt_entry(X86_TRAP_VC, NULL);
#endif
load_boot_idt(&boot_idt_desc);
--- a/arch/x86/boot/compressed/sev.c
+++ b/arch/x86/boot/compressed/sev.c
@@ -355,12 +355,45 @@ void sev_enable(struct boot_params *bp)
bp->cc_blob_address = 0;
/*
+ * Do an initial SEV capability check before snp_init() which
+ * loads the CPUID page and the same checks afterwards are done
+ * without the hypervisor and are trustworthy.
+ *
+ * If the HV fakes SEV support, the guest will crash'n'burn
+ * which is good enough.
+ */
+
+ /* Check for the SME/SEV support leaf */
+ eax = 0x80000000;
+ ecx = 0;
+ native_cpuid(&eax, &ebx, &ecx, &edx);
+ if (eax < 0x8000001f)
+ return;
+
+ /*
+ * Check for the SME/SEV feature:
+ * CPUID Fn8000_001F[EAX]
+ * - Bit 0 - Secure Memory Encryption support
+ * - Bit 1 - Secure Encrypted Virtualization support
+ * CPUID Fn8000_001F[EBX]
+ * - Bits 5:0 - Pagetable bit position used to indicate encryption
+ */
+ eax = 0x8000001f;
+ ecx = 0;
+ native_cpuid(&eax, &ebx, &ecx, &edx);
+ /* Check whether SEV is supported */
+ if (!(eax & BIT(1)))
+ return;
+
+ /*
* Setup/preliminary detection of SNP. This will be sanity-checked
* against CPUID/MSR values later.
*/
snp = snp_init(bp);
- /* Check for the SME/SEV support leaf */
+ /* Now repeat the checks with the SNP CPUID table. */
+
+ /* Recheck the SME/SEV support leaf */
eax = 0x80000000;
ecx = 0;
native_cpuid(&eax, &ebx, &ecx, &edx);
@@ -368,7 +401,7 @@ void sev_enable(struct boot_params *bp)
return;
/*
- * Check for the SME/SEV feature:
+ * Recheck for the SME/SEV feature:
* CPUID Fn8000_001F[EAX]
* - Bit 0 - Secure Memory Encryption support
* - Bit 1 - Secure Encrypted Virtualization support
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 068/149] x86/speculation: Add cpu_show_gds() prototype
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (66 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 067/149] x86/sev: Do not try to parse for the CC blob on non-AMD hardware Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 069/149] x86: Move gds_ucode_mitigated() declaration to header Greg Kroah-Hartman
` (93 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Arnd Bergmann, Dave Hansen,
Daniel Sneddon, stable
From: Arnd Bergmann <arnd@arndb.de>
commit a57c27c7ad85c420b7de44c6ee56692d51709dda upstream.
The newly added function has two definitions but no prototypes:
drivers/base/cpu.c:605:16: error: no previous prototype for 'cpu_show_gds' [-Werror=missing-prototypes]
Add a declaration next to the other ones for this file to avoid the
warning.
Fixes: 8974eb588283b ("x86/speculation: Add Gather Data Sampling mitigation")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Tested-by: Daniel Sneddon <daniel.sneddon@linux.intel.com>
Cc: stable@kernel.org
Link: https://lore.kernel.org/all/20230809130530.1913368-1-arnd%40kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/linux/cpu.h | 2 ++
1 file changed, 2 insertions(+)
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -72,6 +72,8 @@ extern ssize_t cpu_show_retbleed(struct
struct device_attribute *attr, char *buf);
extern ssize_t cpu_show_spec_rstack_overflow(struct device *dev,
struct device_attribute *attr, char *buf);
+extern ssize_t cpu_show_gds(struct device *dev,
+ struct device_attribute *attr, char *buf);
extern __printf(4, 5)
struct device *cpu_device_create(struct device *parent, void *drvdata,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 069/149] x86: Move gds_ucode_mitigated() declaration to header
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (67 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 068/149] x86/speculation: Add cpu_show_gds() prototype Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 070/149] drm/nouveau/disp: Revert a NULL check inside nouveau_connector_get_modes Greg Kroah-Hartman
` (92 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Arnd Bergmann, Dave Hansen,
Daniel Sneddon, stable
From: Arnd Bergmann <arnd@arndb.de>
commit eb3515dc99c7c85f4170b50838136b2a193f8012 upstream.
The declaration got placed in the .c file of the caller, but that
causes a warning for the definition:
arch/x86/kernel/cpu/bugs.c:682:6: error: no previous prototype for 'gds_ucode_mitigated' [-Werror=missing-prototypes]
Move it to a header where both sides can observe it instead.
Fixes: 81ac7e5d74174 ("KVM: Add GDS_NO support to KVM")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Tested-by: Daniel Sneddon <daniel.sneddon@linux.intel.com>
Cc: stable@kernel.org
Link: https://lore.kernel.org/all/20230809130530.1913368-2-arnd%40kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/x86/include/asm/processor.h | 2 ++
arch/x86/kvm/x86.c | 2 --
2 files changed, 2 insertions(+), 2 deletions(-)
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -867,4 +867,6 @@ bool arch_is_platform_page(u64 paddr);
#define arch_is_platform_page arch_is_platform_page
#endif
+extern bool gds_ucode_mitigated(void);
+
#endif /* _ASM_X86_PROCESSOR_H */
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -311,8 +311,6 @@ u64 __read_mostly host_xcr0;
static struct kmem_cache *x86_emulator_cache;
-extern bool gds_ucode_mitigated(void);
-
/*
* When called, it means the previous get/set msr reached an invalid msr.
* Return true if we want to ignore/silent this failed msr access.
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 070/149] drm/nouveau/disp: Revert a NULL check inside nouveau_connector_get_modes
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (68 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 069/149] x86: Move gds_ucode_mitigated() declaration to header Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 071/149] netfilter: nf_tables: dont skip expired elements during walk Greg Kroah-Hartman
` (91 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Olaf Skibbe, Lyude Paul,
Karol Herbst
From: Karol Herbst <kherbst@redhat.com>
commit d5712cd22b9cf109fded1b7f178f4c1888c8b84b upstream.
The original commit adding that check tried to protect the kenrel against
a potential invalid NULL pointer access.
However we call nouveau_connector_detect_depth once without a native_mode
set on purpose for non LVDS connectors and this broke DP support in a few
cases.
Cc: Olaf Skibbe <news@kravcenko.com>
Cc: Lyude Paul <lyude@redhat.com>
Closes: https://gitlab.freedesktop.org/drm/nouveau/-/issues/238
Closes: https://gitlab.freedesktop.org/drm/nouveau/-/issues/245
Fixes: 20a2ce87fbaf8 ("drm/nouveau/dp: check for NULL nv_connector->native_mode")
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230805101813.2603989-1-kherbst@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -967,7 +967,7 @@ nouveau_connector_get_modes(struct drm_c
/* Determine display colour depth for everything except LVDS now,
* DP requires this before mode_valid() is called.
*/
- if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode)
+ if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS)
nouveau_connector_detect_depth(connector);
/* Find the native mode if this is a digital panel, if we didn't
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 071/149] netfilter: nf_tables: dont skip expired elements during walk
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (69 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 070/149] drm/nouveau/disp: Revert a NULL check inside nouveau_connector_get_modes Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 072/149] iio: core: Prevent invalid memory access when there is no parent Greg Kroah-Hartman
` (90 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Florian Westphal, Pablo Neira Ayuso
From: Florian Westphal <fw@strlen.de>
commit 24138933b97b055d486e8064b4a1721702442a9b upstream.
There is an asymmetry between commit/abort and preparation phase if the
following conditions are met:
1. set is a verdict map ("1.2.3.4 : jump foo")
2. timeouts are enabled
In this case, following sequence is problematic:
1. element E in set S refers to chain C
2. userspace requests removal of set S
3. kernel does a set walk to decrement chain->use count for all elements
from preparation phase
4. kernel does another set walk to remove elements from the commit phase
(or another walk to do a chain->use increment for all elements from
abort phase)
If E has already expired in 1), it will be ignored during list walk, so its use count
won't have been changed.
Then, when set is culled, ->destroy callback will zap the element via
nf_tables_set_elem_destroy(), but this function is only safe for
elements that have been deactivated earlier from the preparation phase:
lack of earlier deactivate removes the element but leaks the chain use
count, which results in a WARN splat when the chain gets removed later,
plus a leak of the nft_chain structure.
Update pipapo_get() not to skip expired elements, otherwise flush
command reports bogus ENOENT errors.
Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
Fixes: 8d8540c4f5e0 ("netfilter: nft_set_rbtree: add timeout support")
Fixes: 9d0982927e79 ("netfilter: nft_hash: add support for timeouts")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/netfilter/nf_tables_api.c | 4 ++++
net/netfilter/nft_set_hash.c | 2 --
net/netfilter/nft_set_pipapo.c | 18 ++++++++++++------
net/netfilter/nft_set_rbtree.c | 2 --
4 files changed, 16 insertions(+), 10 deletions(-)
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -5371,8 +5371,12 @@ static int nf_tables_dump_setelem(const
const struct nft_set_iter *iter,
struct nft_set_elem *elem)
{
+ const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv);
struct nft_set_dump_args *args;
+ if (nft_set_elem_expired(ext))
+ return 0;
+
args = container_of(iter, struct nft_set_dump_args, iter);
return nf_tables_fill_setelem(args->skb, set, elem);
}
--- a/net/netfilter/nft_set_hash.c
+++ b/net/netfilter/nft_set_hash.c
@@ -278,8 +278,6 @@ static void nft_rhash_walk(const struct
if (iter->count < iter->skip)
goto cont;
- if (nft_set_elem_expired(&he->ext))
- goto cont;
if (!nft_set_elem_active(&he->ext, iter->genmask))
goto cont;
--- a/net/netfilter/nft_set_pipapo.c
+++ b/net/netfilter/nft_set_pipapo.c
@@ -566,8 +566,7 @@ next_match:
goto out;
if (last) {
- if (nft_set_elem_expired(&f->mt[b].e->ext) ||
- (genmask &&
+ if ((genmask &&
!nft_set_elem_active(&f->mt[b].e->ext, genmask)))
goto next_match;
@@ -601,8 +600,17 @@ out:
static void *nft_pipapo_get(const struct net *net, const struct nft_set *set,
const struct nft_set_elem *elem, unsigned int flags)
{
- return pipapo_get(net, set, (const u8 *)elem->key.val.data,
- nft_genmask_cur(net));
+ struct nft_pipapo_elem *ret;
+
+ ret = pipapo_get(net, set, (const u8 *)elem->key.val.data,
+ nft_genmask_cur(net));
+ if (IS_ERR(ret))
+ return ret;
+
+ if (nft_set_elem_expired(&ret->ext))
+ return ERR_PTR(-ENOENT);
+
+ return ret;
}
/**
@@ -2006,8 +2014,6 @@ static void nft_pipapo_walk(const struct
goto cont;
e = f->mt[r].e;
- if (nft_set_elem_expired(&e->ext))
- goto cont;
elem.priv = e;
--- a/net/netfilter/nft_set_rbtree.c
+++ b/net/netfilter/nft_set_rbtree.c
@@ -552,8 +552,6 @@ static void nft_rbtree_walk(const struct
if (iter->count < iter->skip)
goto cont;
- if (nft_set_elem_expired(&rbe->ext))
- goto cont;
if (!nft_set_elem_active(&rbe->ext, iter->genmask))
goto cont;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 072/149] iio: core: Prevent invalid memory access when there is no parent
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (70 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 071/149] netfilter: nf_tables: dont skip expired elements during walk Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 073/149] interconnect: qcom: Add support for mask-based BCMs Greg Kroah-Hartman
` (89 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andy Shevchenko, Milan Zamazal,
Jonathan Cameron
From: Milan Zamazal <mzamazal@redhat.com>
commit b2a69969908fcaf68596dfc04369af0fe2e1d2f7 upstream.
Commit 813665564b3d ("iio: core: Convert to use firmware node handle
instead of OF node") switched the kind of nodes to use for label
retrieval in device registration. Probably an unwanted change in that
commit was that if the device has no parent then NULL pointer is
accessed. This is what happens in the stock IIO dummy driver when a
new entry is created in configfs:
# mkdir /sys/kernel/config/iio/devices/dummy/foo
BUG: kernel NULL pointer dereference, address: ...
...
Call Trace:
__iio_device_register
iio_dummy_probe
Since there seems to be no reason to make a parent device of an IIO
dummy device mandatory, let’s prevent the invalid memory access in
__iio_device_register when the parent device is NULL. With this
change, the IIO dummy driver works fine with configfs.
Fixes: 813665564b3d ("iio: core: Convert to use firmware node handle instead of OF node")
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
Link: https://lore.kernel.org/r/20230719083208.88149-1-mzamazal@redhat.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iio/industrialio-core.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -1916,7 +1916,7 @@ static const struct iio_buffer_setup_ops
int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod)
{
struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
- struct fwnode_handle *fwnode;
+ struct fwnode_handle *fwnode = NULL;
int ret;
if (!indio_dev->info)
@@ -1927,7 +1927,8 @@ int __iio_device_register(struct iio_dev
/* If the calling driver did not initialize firmware node, do it here */
if (dev_fwnode(&indio_dev->dev))
fwnode = dev_fwnode(&indio_dev->dev);
- else
+ /* The default dummy IIO device has no parent */
+ else if (indio_dev->dev.parent)
fwnode = dev_fwnode(indio_dev->dev.parent);
device_set_node(&indio_dev->dev, fwnode);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 073/149] interconnect: qcom: Add support for mask-based BCMs
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (71 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 072/149] iio: core: Prevent invalid memory access when there is no parent Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 074/149] interconnect: qcom: sm8450: add enable_mask for bcm nodes Greg Kroah-Hartman
` (88 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mike Tipton, Neil Armstrong,
Konrad Dybcio, Georgi Djakov
From: Mike Tipton <mdtipton@codeaurora.org>
commit d8630f050d3fd2079f8617dd6c00c6509109c755 upstream.
Some BCMs aren't directly associated with the data path (i.e. ACV) and
therefore don't communicate using BW. Instead, they are simply
enabled/disabled with a simple bit mask. Add support for these.
Origin commit retrieved from:
https://git.codelinaro.org/clo/la/kernel/msm-5.15/-/commit/2d1573e0206998151b342e6b52a4c0f7234d7e36
Signed-off-by: Mike Tipton <mdtipton@codeaurora.org>
[narmstrong: removed copyright change from original commit]
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Link: https://lore.kernel.org/r/20230619-topic-sm8550-upstream-interconnect-mask-vote-v2-1-709474b151cc@linaro.org
Fixes: fafc114a468e ("interconnect: qcom: Add SM8450 interconnect provider driver")
Signed-off-by: Georgi Djakov <djakov@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/interconnect/qcom/bcm-voter.c | 5 +++++
drivers/interconnect/qcom/icc-rpmh.h | 2 ++
2 files changed, 7 insertions(+)
diff --git a/drivers/interconnect/qcom/bcm-voter.c b/drivers/interconnect/qcom/bcm-voter.c
index 8f385f9c2dd3..d5f2a6b5376b 100644
--- a/drivers/interconnect/qcom/bcm-voter.c
+++ b/drivers/interconnect/qcom/bcm-voter.c
@@ -83,6 +83,11 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm)
temp = agg_peak[bucket] * bcm->vote_scale;
bcm->vote_y[bucket] = bcm_div(temp, bcm->aux_data.unit);
+
+ if (bcm->enable_mask && (bcm->vote_x[bucket] || bcm->vote_y[bucket])) {
+ bcm->vote_x[bucket] = 0;
+ bcm->vote_y[bucket] = bcm->enable_mask;
+ }
}
if (bcm->keepalive && bcm->vote_x[QCOM_ICC_BUCKET_AMC] == 0 &&
diff --git a/drivers/interconnect/qcom/icc-rpmh.h b/drivers/interconnect/qcom/icc-rpmh.h
index 04391c1ba465..7843d8864d6b 100644
--- a/drivers/interconnect/qcom/icc-rpmh.h
+++ b/drivers/interconnect/qcom/icc-rpmh.h
@@ -81,6 +81,7 @@ struct qcom_icc_node {
* @vote_x: aggregated threshold values, represents sum_bw when @type is bw bcm
* @vote_y: aggregated threshold values, represents peak_bw when @type is bw bcm
* @vote_scale: scaling factor for vote_x and vote_y
+ * @enable_mask: optional mask to send as vote instead of vote_x/vote_y
* @dirty: flag used to indicate whether the bcm needs to be committed
* @keepalive: flag used to indicate whether a keepalive is required
* @aux_data: auxiliary data used when calculating threshold values and
@@ -97,6 +98,7 @@ struct qcom_icc_bcm {
u64 vote_x[QCOM_ICC_NUM_BUCKETS];
u64 vote_y[QCOM_ICC_NUM_BUCKETS];
u64 vote_scale;
+ u32 enable_mask;
bool dirty;
bool keepalive;
struct bcm_db aux_data;
--
2.41.0
^ permalink raw reply related [flat|nested] 167+ messages in thread
* [PATCH 6.1 074/149] interconnect: qcom: sm8450: add enable_mask for bcm nodes
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (72 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 073/149] interconnect: qcom: Add support for mask-based BCMs Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 075/149] selftests/rseq: Fix build with undefined __weak Greg Kroah-Hartman
` (87 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Neil Armstrong, Konrad Dybcio,
Georgi Djakov
From: Neil Armstrong <neil.armstrong@linaro.org>
commit be02db24cf840bc0fdfbecc78ad803619dd143e6 upstream.
Set the proper enable_mask to nodes requiring such value
to be used instead of a bandwidth when voting.
The masks were copied from the downstream implementation at [1].
[1] https://git.codelinaro.org/clo/la/kernel/msm-5.10/-/blob/KERNEL.PLATFORM.1.0.r2-05600-WAIPIOLE.0/drivers/interconnect/qcom/waipio.c
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Link: https://lore.kernel.org/r/20230619-topic-sm8550-upstream-interconnect-mask-vote-v2-2-709474b151cc@linaro.org
Fixes: fafc114a468e ("interconnect: qcom: Add SM8450 interconnect provider driver")
Signed-off-by: Georgi Djakov <djakov@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/interconnect/qcom/sm8450.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/interconnect/qcom/sm8450.c b/drivers/interconnect/qcom/sm8450.c
index 2d7a8e7b85ec..e64c214b4020 100644
--- a/drivers/interconnect/qcom/sm8450.c
+++ b/drivers/interconnect/qcom/sm8450.c
@@ -1337,6 +1337,7 @@ static struct qcom_icc_node qns_mem_noc_sf_disp = {
static struct qcom_icc_bcm bcm_acv = {
.name = "ACV",
+ .enable_mask = 0x8,
.num_nodes = 1,
.nodes = { &ebi },
};
@@ -1349,6 +1350,7 @@ static struct qcom_icc_bcm bcm_ce0 = {
static struct qcom_icc_bcm bcm_cn0 = {
.name = "CN0",
+ .enable_mask = 0x1,
.keepalive = true,
.num_nodes = 55,
.nodes = { &qnm_gemnoc_cnoc, &qnm_gemnoc_pcie,
@@ -1383,6 +1385,7 @@ static struct qcom_icc_bcm bcm_cn0 = {
static struct qcom_icc_bcm bcm_co0 = {
.name = "CO0",
+ .enable_mask = 0x1,
.num_nodes = 2,
.nodes = { &qxm_nsp, &qns_nsp_gemnoc },
};
@@ -1403,6 +1406,7 @@ static struct qcom_icc_bcm bcm_mm0 = {
static struct qcom_icc_bcm bcm_mm1 = {
.name = "MM1",
+ .enable_mask = 0x1,
.num_nodes = 12,
.nodes = { &qnm_camnoc_hf, &qnm_camnoc_icp,
&qnm_camnoc_sf, &qnm_mdp,
@@ -1445,6 +1449,7 @@ static struct qcom_icc_bcm bcm_sh0 = {
static struct qcom_icc_bcm bcm_sh1 = {
.name = "SH1",
+ .enable_mask = 0x1,
.num_nodes = 7,
.nodes = { &alm_gpu_tcu, &alm_sys_tcu,
&qnm_nsp_gemnoc, &qnm_pcie,
@@ -1461,6 +1466,7 @@ static struct qcom_icc_bcm bcm_sn0 = {
static struct qcom_icc_bcm bcm_sn1 = {
.name = "SN1",
+ .enable_mask = 0x1,
.num_nodes = 4,
.nodes = { &qhm_gic, &qxm_pimem,
&xm_gic, &qns_gemnoc_gc },
@@ -1492,6 +1498,7 @@ static struct qcom_icc_bcm bcm_sn7 = {
static struct qcom_icc_bcm bcm_acv_disp = {
.name = "ACV",
+ .enable_mask = 0x1,
.num_nodes = 1,
.nodes = { &ebi_disp },
};
@@ -1510,6 +1517,7 @@ static struct qcom_icc_bcm bcm_mm0_disp = {
static struct qcom_icc_bcm bcm_mm1_disp = {
.name = "MM1",
+ .enable_mask = 0x1,
.num_nodes = 3,
.nodes = { &qnm_mdp_disp, &qnm_rot_disp,
&qns_mem_noc_sf_disp },
@@ -1523,6 +1531,7 @@ static struct qcom_icc_bcm bcm_sh0_disp = {
static struct qcom_icc_bcm bcm_sh1_disp = {
.name = "SH1",
+ .enable_mask = 0x1,
.num_nodes = 1,
.nodes = { &qnm_pcie_disp },
};
--
2.41.0
^ permalink raw reply related [flat|nested] 167+ messages in thread
* [PATCH 6.1 075/149] selftests/rseq: Fix build with undefined __weak
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (73 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 074/149] interconnect: qcom: sm8450: add enable_mask for bcm nodes Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 076/149] selftests: forwarding: Add a helper to skip test when using veth pairs Greg Kroah-Hartman
` (86 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Mark Brown, Paolo Bonzini
From: Mark Brown <broonie@kernel.org>
commit d5ad9aae13dcced333c1a7816ff0a4fbbb052466 upstream.
Commit 3bcbc20942db ("selftests/rseq: Play nice with binaries statically
linked against glibc 2.35+") which is now in Linus' tree introduced uses
of __weak but did nothing to ensure that a definition is provided for it
resulting in build failures for the rseq tests:
rseq.c:41:1: error: unknown type name '__weak'
__weak ptrdiff_t __rseq_offset;
^
rseq.c:41:17: error: expected ';' after top level declarator
__weak ptrdiff_t __rseq_offset;
^
;
rseq.c:42:1: error: unknown type name '__weak'
__weak unsigned int __rseq_size;
^
rseq.c:43:1: error: unknown type name '__weak'
__weak unsigned int __rseq_flags;
Fix this by using the definition from tools/include compiler.h.
Fixes: 3bcbc20942db ("selftests/rseq: Play nice with binaries statically linked against glibc 2.35+")
Signed-off-by: Mark Brown <broonie@kernel.org>
Message-Id: <20230804-kselftest-rseq-build-v1-1-015830b66aa9@kernel.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/rseq/Makefile | 4 +++-
tools/testing/selftests/rseq/rseq.c | 2 ++
2 files changed, 5 insertions(+), 1 deletion(-)
--- a/tools/testing/selftests/rseq/Makefile
+++ b/tools/testing/selftests/rseq/Makefile
@@ -4,8 +4,10 @@ ifneq ($(shell $(CC) --version 2>&1 | he
CLANG_FLAGS += -no-integrated-as
endif
+top_srcdir = ../../../..
+
CFLAGS += -O2 -Wall -g -I./ $(KHDR_INCLUDES) -L$(OUTPUT) -Wl,-rpath=./ \
- $(CLANG_FLAGS)
+ $(CLANG_FLAGS) -I$(top_srcdir)/tools/include
LDLIBS += -lpthread -ldl
# Own dependencies because we only want to build against 1st prerequisite, but
--- a/tools/testing/selftests/rseq/rseq.c
+++ b/tools/testing/selftests/rseq/rseq.c
@@ -29,6 +29,8 @@
#include <dlfcn.h>
#include <stddef.h>
+#include <linux/compiler.h>
+
#include "../kselftest.h"
#include "rseq.h"
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 076/149] selftests: forwarding: Add a helper to skip test when using veth pairs
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (74 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 075/149] selftests/rseq: Fix build with undefined __weak Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 077/149] selftests: forwarding: ethtool: Skip " Greg Kroah-Hartman
` (85 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ido Schimmel, Petr Machata,
Mirsad Todorovac, Hangbin Liu, Nikolay Aleksandrov,
Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 66e131861ab7bf754b50813216f5c6885cd32d63 upstream.
A handful of tests require physical loopbacks to be used instead of veth
pairs. Add a helper that these tests will invoke in order to be skipped
when executed with veth pairs.
Fixes: 64916b57c0b1 ("selftests: forwarding: Add speed and auto-negotiation test")
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-7-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/lib.sh | 11 +++++++++++
1 file changed, 11 insertions(+)
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -138,6 +138,17 @@ check_locked_port_support()
fi
}
+skip_on_veth()
+{
+ local kind=$(ip -j -d link show dev ${NETIFS[p1]} |
+ jq -r '.[].linkinfo.info_kind')
+
+ if [[ $kind == veth ]]; then
+ echo "SKIP: Test cannot be run with veth pairs"
+ exit $ksft_skip
+ fi
+}
+
if [[ "$(id -u)" -ne 0 ]]; then
echo "SKIP: need root privileges"
exit $ksft_skip
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 077/149] selftests: forwarding: ethtool: Skip when using veth pairs
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (75 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 076/149] selftests: forwarding: Add a helper to skip test when using veth pairs Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 078/149] selftests: forwarding: ethtool_extended_state: " Greg Kroah-Hartman
` (84 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mirsad Todorovac, Ido Schimmel,
Petr Machata, Hangbin Liu, Nikolay Aleksandrov, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 60a36e21915c31c0375d9427be9406aa8ce2ec34 upstream.
Auto-negotiation cannot be tested with veth pairs, resulting in
failures:
# ./ethtool.sh
TEST: force of same speed autoneg off [FAIL]
error in configuration. swp1 speed Not autoneg off
[...]
Fix by skipping the test when used with veth pairs.
Fixes: 64916b57c0b1 ("selftests: forwarding: Add speed and auto-negotiation test")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/adc5e40d-d040-a65e-eb26-edf47dac5b02@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-8-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/ethtool.sh | 2 ++
1 file changed, 2 insertions(+)
--- a/tools/testing/selftests/net/forwarding/ethtool.sh
+++ b/tools/testing/selftests/net/forwarding/ethtool.sh
@@ -286,6 +286,8 @@ different_speeds_autoneg_on()
ethtool -s $h1 autoneg on
}
+skip_on_veth
+
trap cleanup EXIT
setup_prepare
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 078/149] selftests: forwarding: ethtool_extended_state: Skip when using veth pairs
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (76 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 077/149] selftests: forwarding: ethtool: Skip " Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 079/149] selftests: forwarding: hw_stats_l3_gre: " Greg Kroah-Hartman
` (83 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mirsad Todorovac, Ido Schimmel,
Petr Machata, Hangbin Liu, Nikolay Aleksandrov, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit b3d9305e60d121dac20a77b6847c4cf14a4c0001 upstream.
Ethtool extended state cannot be tested with veth pairs, resulting in
failures:
# ./ethtool_extended_state.sh
TEST: Autoneg, No partner detected [FAIL]
Expected "Autoneg", got "Link detected: no"
[...]
Fix by skipping the test when used with veth pairs.
Fixes: 7d10bcce98cd ("selftests: forwarding: Add tests for ethtool extended state")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/adc5e40d-d040-a65e-eb26-edf47dac5b02@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-9-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/ethtool_extended_state.sh | 2 ++
1 file changed, 2 insertions(+)
--- a/tools/testing/selftests/net/forwarding/ethtool_extended_state.sh
+++ b/tools/testing/selftests/net/forwarding/ethtool_extended_state.sh
@@ -108,6 +108,8 @@ no_cable()
ip link set dev $swp3 down
}
+skip_on_veth
+
setup_prepare
tests_run
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 079/149] selftests: forwarding: hw_stats_l3_gre: Skip when using veth pairs
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (77 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 078/149] selftests: forwarding: ethtool_extended_state: " Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 080/149] selftests: forwarding: Skip test when no interfaces are specified Greg Kroah-Hartman
` (82 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mirsad Todorovac, Ido Schimmel,
Petr Machata, Hangbin Liu, Nikolay Aleksandrov, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 9a711cde07c245a163d95eee5b42ed1871e73236 upstream.
Layer 3 hardware stats cannot be used when the underlying interfaces are
veth pairs, resulting in failures:
# ./hw_stats_l3_gre.sh
TEST: ping gre flat [ OK ]
TEST: Test rx packets: [FAIL]
Traffic not reflected in the counter: 0 -> 0
TEST: Test tx packets: [FAIL]
Traffic not reflected in the counter: 0 -> 0
Fix by skipping the test when used with veth pairs.
Fixes: 813f97a26860 ("selftests: forwarding: Add a tunnel-based test for L3 HW stats")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/adc5e40d-d040-a65e-eb26-edf47dac5b02@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-10-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/hw_stats_l3_gre.sh | 2 ++
1 file changed, 2 insertions(+)
--- a/tools/testing/selftests/net/forwarding/hw_stats_l3_gre.sh
+++ b/tools/testing/selftests/net/forwarding/hw_stats_l3_gre.sh
@@ -99,6 +99,8 @@ test_stats_rx()
test_stats g2a rx
}
+skip_on_veth
+
trap cleanup EXIT
setup_prepare
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 080/149] selftests: forwarding: Skip test when no interfaces are specified
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (78 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 079/149] selftests: forwarding: hw_stats_l3_gre: " Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 081/149] selftests: forwarding: Switch off timeout Greg Kroah-Hartman
` (81 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mirsad Todorovac, Ido Schimmel,
Petr Machata, Hangbin Liu, Nikolay Aleksandrov, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit d72c83b1e4b4a36a38269c77a85ff52f95eb0d08 upstream.
As explained in [1], the forwarding selftests are meant to be run with
either physical loopbacks or veth pairs. The interfaces are expected to
be specified in a user-provided forwarding.config file or as command
line arguments. By default, this file is not present and the tests fail:
# make -C tools/testing/selftests TARGETS=net/forwarding run_tests
[...]
TAP version 13
1..102
# timeout set to 45
# selftests: net/forwarding: bridge_igmp.sh
# Command line is not complete. Try option "help"
# Failed to create netif
not ok 1 selftests: net/forwarding: bridge_igmp.sh # exit=1
[...]
Fix by skipping a test if interfaces are not provided either via the
configuration file or command line arguments.
# make -C tools/testing/selftests TARGETS=net/forwarding run_tests
[...]
TAP version 13
1..102
# timeout set to 45
# selftests: net/forwarding: bridge_igmp.sh
# SKIP: Cannot create interface. Name not specified
ok 1 selftests: net/forwarding: bridge_igmp.sh # SKIP
[1] tools/testing/selftests/net/forwarding/README
Fixes: 81573b18f26d ("selftests/net/forwarding: add Makefile to install tests")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/856d454e-f83c-20cf-e166-6dc06cbc1543@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-2-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/lib.sh | 5 +++++
1 file changed, 5 insertions(+)
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -211,6 +211,11 @@ create_netif_veth()
for ((i = 1; i <= NUM_NETIFS; ++i)); do
local j=$((i+1))
+ if [ -z ${NETIFS[p$i]} ]; then
+ echo "SKIP: Cannot create interface. Name not specified"
+ exit $ksft_skip
+ fi
+
ip link show dev ${NETIFS[p$i]} &> /dev/null
if [[ $? -ne 0 ]]; then
ip link add ${NETIFS[p$i]} type veth \
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 081/149] selftests: forwarding: Switch off timeout
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (79 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 080/149] selftests: forwarding: Skip test when no interfaces are specified Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 082/149] selftests: forwarding: tc_flower: Relax success criterion Greg Kroah-Hartman
` (80 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mirsad Todorovac, Ido Schimmel,
Petr Machata, Hangbin Liu, Nikolay Aleksandrov, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 0529883ad102f6c04e19fb7018f31e1bda575bbe upstream.
The default timeout for selftests is 45 seconds, but it is not enough
for forwarding selftests which can takes minutes to finish depending on
the number of tests cases:
# make -C tools/testing/selftests TARGETS=net/forwarding run_tests
TAP version 13
1..102
# timeout set to 45
# selftests: net/forwarding: bridge_igmp.sh
# TEST: IGMPv2 report 239.10.10.10 [ OK ]
# TEST: IGMPv2 leave 239.10.10.10 [ OK ]
# TEST: IGMPv3 report 239.10.10.10 is_include [ OK ]
# TEST: IGMPv3 report 239.10.10.10 include -> allow [ OK ]
#
not ok 1 selftests: net/forwarding: bridge_igmp.sh # TIMEOUT 45 seconds
Fix by switching off the timeout and setting it to 0. A similar change
was done for BPF selftests in commit 6fc5916cc256 ("selftests: bpf:
Switch off timeout").
Fixes: 81573b18f26d ("selftests/net/forwarding: add Makefile to install tests")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/8d149f8c-818e-d141-a0ce-a6bae606bc22@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-3-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/settings | 1 +
1 file changed, 1 insertion(+)
create mode 100644 tools/testing/selftests/net/forwarding/settings
--- /dev/null
+++ b/tools/testing/selftests/net/forwarding/settings
@@ -0,0 +1 @@
+timeout=0
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 082/149] selftests: forwarding: tc_flower: Relax success criterion
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (80 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 081/149] selftests: forwarding: Switch off timeout Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 083/149] net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail() Greg Kroah-Hartman
` (79 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Mirsad Todorovac, Ido Schimmel,
Petr Machata, Hangbin Liu, Nikolay Aleksandrov, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 9ee37e53e7687654b487fc94e82569377272a7a8 upstream.
The test checks that filters that match on source or destination MAC
were only hit once. A host can send more than one packet with a given
source or destination MAC, resulting in failures.
Fix by relaxing the success criterion and instead check that the filters
were not hit zero times. Using tc_check_at_least_x_packets() is also an
option, but it is not available in older kernels.
Fixes: 07e5c75184a1 ("selftests: forwarding: Introduce tc flower matching tests")
Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Closes: https://lore.kernel.org/netdev/adc5e40d-d040-a65e-eb26-edf47dac5b02@alu.unizg.hr/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Tested-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20230808141503.4060661-13-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/net/forwarding/tc_flower.sh | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
--- a/tools/testing/selftests/net/forwarding/tc_flower.sh
+++ b/tools/testing/selftests/net/forwarding/tc_flower.sh
@@ -52,8 +52,8 @@ match_dst_mac_test()
tc_check_packets "dev $h2 ingress" 101 1
check_fail $? "Matched on a wrong filter"
- tc_check_packets "dev $h2 ingress" 102 1
- check_err $? "Did not match on correct filter"
+ tc_check_packets "dev $h2 ingress" 102 0
+ check_fail $? "Did not match on correct filter"
tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower
tc filter del dev $h2 ingress protocol ip pref 2 handle 102 flower
@@ -78,8 +78,8 @@ match_src_mac_test()
tc_check_packets "dev $h2 ingress" 101 1
check_fail $? "Matched on a wrong filter"
- tc_check_packets "dev $h2 ingress" 102 1
- check_err $? "Did not match on correct filter"
+ tc_check_packets "dev $h2 ingress" 102 0
+ check_fail $? "Did not match on correct filter"
tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower
tc filter del dev $h2 ingress protocol ip pref 2 handle 102 flower
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 083/149] net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (81 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 082/149] selftests: forwarding: tc_flower: Relax success criterion Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 084/149] bpf, sockmap: Fix map type error in sock_map_del_link Greg Kroah-Hartman
` (78 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Andrew Kanner,
Jesper Dangaard Brouer, Jason Wang, Jakub Kicinski,
syzbot+f817490f5bd20541b90a
From: Andrew Kanner <andrew.kanner@gmail.com>
commit d14eea09edf427fa36bd446f4a3271f99164202f upstream.
Syzkaller reported the following issue:
=======================================
Too BIG xdp->frame_sz = 131072
WARNING: CPU: 0 PID: 5020 at net/core/filter.c:4121
____bpf_xdp_adjust_tail net/core/filter.c:4121 [inline]
WARNING: CPU: 0 PID: 5020 at net/core/filter.c:4121
bpf_xdp_adjust_tail+0x466/0xa10 net/core/filter.c:4103
...
Call Trace:
<TASK>
bpf_prog_4add87e5301a4105+0x1a/0x1c
__bpf_prog_run include/linux/filter.h:600 [inline]
bpf_prog_run_xdp include/linux/filter.h:775 [inline]
bpf_prog_run_generic_xdp+0x57e/0x11e0 net/core/dev.c:4721
netif_receive_generic_xdp net/core/dev.c:4807 [inline]
do_xdp_generic+0x35c/0x770 net/core/dev.c:4866
tun_get_user+0x2340/0x3ca0 drivers/net/tun.c:1919
tun_chr_write_iter+0xe8/0x210 drivers/net/tun.c:2043
call_write_iter include/linux/fs.h:1871 [inline]
new_sync_write fs/read_write.c:491 [inline]
vfs_write+0x650/0xe40 fs/read_write.c:584
ksys_write+0x12f/0x250 fs/read_write.c:637
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x38/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x63/0xcd
xdp->frame_sz > PAGE_SIZE check was introduced in commit c8741e2bfe87
("xdp: Allow bpf_xdp_adjust_tail() to grow packet size"). But Jesper
Dangaard Brouer <jbrouer@redhat.com> noted that after introducing the
xdp_init_buff() which all XDP driver use - it's safe to remove this
check. The original intend was to catch cases where XDP drivers have
not been updated to use xdp.frame_sz, but that is not longer a concern
(since xdp_init_buff).
Running the initial syzkaller repro it was discovered that the
contiguous physical memory allocation is used for both xdp paths in
tun_get_user(), e.g. tun_build_skb() and tun_alloc_skb(). It was also
stated by Jesper Dangaard Brouer <jbrouer@redhat.com> that XDP can
work on higher order pages, as long as this is contiguous physical
memory (e.g. a page).
Reported-and-tested-by: syzbot+f817490f5bd20541b90a@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/all/000000000000774b9205f1d8a80d@google.com/T/
Link: https://syzkaller.appspot.com/bug?extid=f817490f5bd20541b90a
Link: https://lore.kernel.org/all/20230725155403.796-1-andrew.kanner@gmail.com/T/
Fixes: 43b5169d8355 ("net, xdp: Introduce xdp_init_buff utility routine")
Signed-off-by: Andrew Kanner <andrew.kanner@gmail.com>
Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
Acked-by: Jason Wang <jasowang@redhat.com>
Link: https://lore.kernel.org/r/20230803190316.2380231-1-andrew.kanner@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/core/filter.c | 6 ------
1 file changed, 6 deletions(-)
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -4064,12 +4064,6 @@ BPF_CALL_2(bpf_xdp_adjust_tail, struct x
if (unlikely(data_end > data_hard_end))
return -EINVAL;
- /* ALL drivers MUST init xdp->frame_sz, chicken check below */
- if (unlikely(xdp->frame_sz > PAGE_SIZE)) {
- WARN_ONCE(1, "Too BIG xdp->frame_sz = %d\n", xdp->frame_sz);
- return -EINVAL;
- }
-
if (unlikely(data_end < xdp->data + ETH_HLEN))
return -EINVAL;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 084/149] bpf, sockmap: Fix map type error in sock_map_del_link
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (82 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 083/149] net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail() Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 085/149] bpf, sockmap: Fix bug that strp_done cannot be called Greg Kroah-Hartman
` (77 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Xu Kuohai, John Fastabend,
Martin KaFai Lau
From: Xu Kuohai <xukuohai@huawei.com>
commit 7e96ec0e6605b69bb21bbf6c0ff9051e656ec2b1 upstream.
sock_map_del_link() operates on both SOCKMAP and SOCKHASH, although
both types have member named "progs", the offset of "progs" member in
these two types is different, so "progs" should be accessed with the
real map type.
Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
Reviewed-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20230804073740.194770-2-xukuohai@huaweicloud.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/core/sock_map.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- a/net/core/sock_map.c
+++ b/net/core/sock_map.c
@@ -148,13 +148,13 @@ static void sock_map_del_link(struct soc
list_for_each_entry_safe(link, tmp, &psock->link, list) {
if (link->link_raw == link_raw) {
struct bpf_map *map = link->map;
- struct bpf_stab *stab = container_of(map, struct bpf_stab,
- map);
- if (psock->saved_data_ready && stab->progs.stream_parser)
+ struct sk_psock_progs *progs = sock_map_progs(map);
+
+ if (psock->saved_data_ready && progs->stream_parser)
strp_stop = true;
- if (psock->saved_data_ready && stab->progs.stream_verdict)
+ if (psock->saved_data_ready && progs->stream_verdict)
verdict_stop = true;
- if (psock->saved_data_ready && stab->progs.skb_verdict)
+ if (psock->saved_data_ready && progs->skb_verdict)
verdict_stop = true;
list_del(&link->list);
sk_psock_free_link(link);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 085/149] bpf, sockmap: Fix bug that strp_done cannot be called
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (83 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 084/149] bpf, sockmap: Fix map type error in sock_map_del_link Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 086/149] mISDN: Update parameter type of dsp_cmx_send() Greg Kroah-Hartman
` (76 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Xu Kuohai, John Fastabend,
Martin KaFai Lau
From: Xu Kuohai <xukuohai@huawei.com>
commit 809e4dc71a0f2b8d2836035d98603694fff11d5d upstream.
strp_done is only called when psock->progs.stream_parser is not NULL,
but stream_parser was set to NULL by sk_psock_stop_strp(), called
by sk_psock_drop() earlier. So, strp_done can never be called.
Introduce SK_PSOCK_RX_ENABLED to mark whether there is strp on psock.
Change the condition for calling strp_done from judging whether
stream_parser is set to judging whether this flag is set. This flag is
only set once when strp_init() succeeds, and will never be cleared later.
Fixes: c0d95d3380ee ("bpf, sockmap: Re-evaluate proto ops when psock is removed from sockmap")
Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
Reviewed-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/r/20230804073740.194770-3-xukuohai@huaweicloud.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/linux/skmsg.h | 1 +
net/core/skmsg.c | 10 ++++++++--
2 files changed, 9 insertions(+), 2 deletions(-)
--- a/include/linux/skmsg.h
+++ b/include/linux/skmsg.h
@@ -62,6 +62,7 @@ struct sk_psock_progs {
enum sk_psock_state_bits {
SK_PSOCK_TX_ENABLED,
+ SK_PSOCK_RX_STRP_ENABLED,
};
struct sk_psock_link {
--- a/net/core/skmsg.c
+++ b/net/core/skmsg.c
@@ -1117,13 +1117,19 @@ static void sk_psock_strp_data_ready(str
int sk_psock_init_strp(struct sock *sk, struct sk_psock *psock)
{
+ int ret;
+
static const struct strp_callbacks cb = {
.rcv_msg = sk_psock_strp_read,
.read_sock_done = sk_psock_strp_read_done,
.parse_msg = sk_psock_strp_parse,
};
- return strp_init(&psock->strp, sk, &cb);
+ ret = strp_init(&psock->strp, sk, &cb);
+ if (!ret)
+ sk_psock_set_state(psock, SK_PSOCK_RX_STRP_ENABLED);
+
+ return ret;
}
void sk_psock_start_strp(struct sock *sk, struct sk_psock *psock)
@@ -1151,7 +1157,7 @@ void sk_psock_stop_strp(struct sock *sk,
static void sk_psock_done_strp(struct sk_psock *psock)
{
/* Parser has been stopped */
- if (psock->progs.stream_parser)
+ if (sk_psock_test_state(psock, SK_PSOCK_RX_STRP_ENABLED))
strp_done(&psock->strp);
}
#else
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 086/149] mISDN: Update parameter type of dsp_cmx_send()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (84 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 085/149] bpf, sockmap: Fix bug that strp_done cannot be called Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 087/149] macsec: use DEV_STATS_INC() Greg Kroah-Hartman
` (75 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, kernel test robot, Nathan Chancellor,
Sami Tolvanen, Kees Cook, Jakub Kicinski
From: Nathan Chancellor <nathan@kernel.org>
commit 1696ec8654016dad3b1baf6c024303e584400453 upstream.
When booting a kernel with CONFIG_MISDN_DSP=y and CONFIG_CFI_CLANG=y,
there is a failure when dsp_cmx_send() is called indirectly from
call_timer_fn():
[ 0.371412] CFI failure at call_timer_fn+0x2f/0x150 (target: dsp_cmx_send+0x0/0x530; expected type: 0x92ada1e9)
The function pointer prototype that call_timer_fn() expects is
void (*fn)(struct timer_list *)
whereas dsp_cmx_send() has a parameter type of 'void *', which causes
the control flow integrity checks to fail because the parameter types do
not match.
Change dsp_cmx_send()'s parameter type to be 'struct timer_list' to
match the expected prototype. The argument is unused anyways, so this
has no functional change, aside from avoiding the CFI failure.
Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202308020936.58787e6c-oliver.sang@intel.com
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Sami Tolvanen <samitolvanen@google.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Fixes: e313ac12eb13 ("mISDN: Convert timers to use timer_setup()")
Link: https://lore.kernel.org/r/20230802-fix-dsp_cmx_send-cfi-failure-v1-1-2f2e79b0178d@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/isdn/mISDN/dsp.h | 2 +-
drivers/isdn/mISDN/dsp_cmx.c | 2 +-
drivers/isdn/mISDN/dsp_core.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
--- a/drivers/isdn/mISDN/dsp.h
+++ b/drivers/isdn/mISDN/dsp.h
@@ -247,7 +247,7 @@ extern void dsp_cmx_hardware(struct dsp_
extern int dsp_cmx_conf(struct dsp *dsp, u32 conf_id);
extern void dsp_cmx_receive(struct dsp *dsp, struct sk_buff *skb);
extern void dsp_cmx_hdlc(struct dsp *dsp, struct sk_buff *skb);
-extern void dsp_cmx_send(void *arg);
+extern void dsp_cmx_send(struct timer_list *arg);
extern void dsp_cmx_transmit(struct dsp *dsp, struct sk_buff *skb);
extern int dsp_cmx_del_conf_member(struct dsp *dsp);
extern int dsp_cmx_del_conf(struct dsp_conf *conf);
--- a/drivers/isdn/mISDN/dsp_cmx.c
+++ b/drivers/isdn/mISDN/dsp_cmx.c
@@ -1625,7 +1625,7 @@ static u16 dsp_count; /* last sample cou
static int dsp_count_valid; /* if we have last sample count */
void
-dsp_cmx_send(void *arg)
+dsp_cmx_send(struct timer_list *arg)
{
struct dsp_conf *conf;
struct dsp_conf_member *member;
--- a/drivers/isdn/mISDN/dsp_core.c
+++ b/drivers/isdn/mISDN/dsp_core.c
@@ -1195,7 +1195,7 @@ static int __init dsp_init(void)
}
/* set sample timer */
- timer_setup(&dsp_spl_tl, (void *)dsp_cmx_send, 0);
+ timer_setup(&dsp_spl_tl, dsp_cmx_send, 0);
dsp_spl_tl.expires = jiffies + dsp_tics;
dsp_spl_jiffies = dsp_spl_tl.expires;
add_timer(&dsp_spl_tl);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 087/149] macsec: use DEV_STATS_INC()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (85 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 086/149] mISDN: Update parameter type of dsp_cmx_send() Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 088/149] mptcp: fix the incorrect judgment for msk->cb_flags Greg Kroah-Hartman
` (74 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot, Eric Dumazet,
Sabrina Dubroca, David S. Miller
From: Eric Dumazet <edumazet@google.com>
commit 32d0a49d36a2a306c2e47fe5659361e424f0ed3f upstream.
syzbot/KCSAN reported data-races in macsec whenever dev->stats fields
are updated.
It appears all of these updates can happen from multiple cpus.
Adopt SMP safe DEV_STATS_INC() to update dev->stats fields.
Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/macsec.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -743,7 +743,7 @@ static bool macsec_post_decrypt(struct s
u64_stats_update_begin(&rxsc_stats->syncp);
rxsc_stats->stats.InPktsLate++;
u64_stats_update_end(&rxsc_stats->syncp);
- secy->netdev->stats.rx_dropped++;
+ DEV_STATS_INC(secy->netdev, rx_dropped);
return false;
}
@@ -767,7 +767,7 @@ static bool macsec_post_decrypt(struct s
rxsc_stats->stats.InPktsNotValid++;
u64_stats_update_end(&rxsc_stats->syncp);
this_cpu_inc(rx_sa->stats->InPktsNotValid);
- secy->netdev->stats.rx_errors++;
+ DEV_STATS_INC(secy->netdev, rx_errors);
return false;
}
@@ -1059,7 +1059,7 @@ static enum rx_handler_result handle_not
u64_stats_update_begin(&secy_stats->syncp);
secy_stats->stats.InPktsNoTag++;
u64_stats_update_end(&secy_stats->syncp);
- macsec->secy.netdev->stats.rx_dropped++;
+ DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
continue;
}
@@ -1169,7 +1169,7 @@ static rx_handler_result_t macsec_handle
u64_stats_update_begin(&secy_stats->syncp);
secy_stats->stats.InPktsBadTag++;
u64_stats_update_end(&secy_stats->syncp);
- secy->netdev->stats.rx_errors++;
+ DEV_STATS_INC(secy->netdev, rx_errors);
goto drop_nosa;
}
@@ -1186,7 +1186,7 @@ static rx_handler_result_t macsec_handle
u64_stats_update_begin(&rxsc_stats->syncp);
rxsc_stats->stats.InPktsNotUsingSA++;
u64_stats_update_end(&rxsc_stats->syncp);
- secy->netdev->stats.rx_errors++;
+ DEV_STATS_INC(secy->netdev, rx_errors);
if (active_rx_sa)
this_cpu_inc(active_rx_sa->stats->InPktsNotUsingSA);
goto drop_nosa;
@@ -1220,7 +1220,7 @@ static rx_handler_result_t macsec_handle
u64_stats_update_begin(&rxsc_stats->syncp);
rxsc_stats->stats.InPktsLate++;
u64_stats_update_end(&rxsc_stats->syncp);
- macsec->secy.netdev->stats.rx_dropped++;
+ DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
goto drop;
}
}
@@ -1261,7 +1261,7 @@ deliver:
if (ret == NET_RX_SUCCESS)
count_rx(dev, len);
else
- macsec->secy.netdev->stats.rx_dropped++;
+ DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
rcu_read_unlock();
@@ -1298,7 +1298,7 @@ nosci:
u64_stats_update_begin(&secy_stats->syncp);
secy_stats->stats.InPktsNoSCI++;
u64_stats_update_end(&secy_stats->syncp);
- macsec->secy.netdev->stats.rx_errors++;
+ DEV_STATS_INC(macsec->secy.netdev, rx_errors);
continue;
}
@@ -1317,7 +1317,7 @@ nosci:
secy_stats->stats.InPktsUnknownSCI++;
u64_stats_update_end(&secy_stats->syncp);
} else {
- macsec->secy.netdev->stats.rx_dropped++;
+ DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
}
}
@@ -3418,7 +3418,7 @@ static netdev_tx_t macsec_start_xmit(str
if (!secy->operational) {
kfree_skb(skb);
- dev->stats.tx_dropped++;
+ DEV_STATS_INC(dev, tx_dropped);
return NETDEV_TX_OK;
}
@@ -3426,7 +3426,7 @@ static netdev_tx_t macsec_start_xmit(str
skb = macsec_encrypt(skb, dev);
if (IS_ERR(skb)) {
if (PTR_ERR(skb) != -EINPROGRESS)
- dev->stats.tx_dropped++;
+ DEV_STATS_INC(dev, tx_dropped);
return NETDEV_TX_OK;
}
@@ -3663,9 +3663,9 @@ static void macsec_get_stats64(struct ne
dev_fetch_sw_netstats(s, dev->tstats);
- s->rx_dropped = dev->stats.rx_dropped;
- s->tx_dropped = dev->stats.tx_dropped;
- s->rx_errors = dev->stats.rx_errors;
+ s->rx_dropped = atomic_long_read(&dev->stats.__rx_dropped);
+ s->tx_dropped = atomic_long_read(&dev->stats.__tx_dropped);
+ s->rx_errors = atomic_long_read(&dev->stats.__rx_errors);
}
static int macsec_get_iflink(const struct net_device *dev)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 088/149] mptcp: fix the incorrect judgment for msk->cb_flags
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (86 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 087/149] macsec: use DEV_STATS_INC() Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 089/149] net/packet: annotate data-races around tp->status Greg Kroah-Hartman
` (73 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Xiang Yang, Matthieu Baerts,
Jakub Kicinski
From: Xiang Yang <xiangyang3@huawei.com>
commit 17ebf8a4c38b5481c29623f5e003fdf7583947f9 upstream.
Coccicheck reports the error below:
net/mptcp/protocol.c:3330:15-28: ERROR: test of a variable/field address
Since the address of msk->cb_flags is used in __test_and_clear_bit, the
address should not be NULL. The judgment for if (unlikely(msk->cb_flags))
will always be true, we should check the real value of msk->cb_flags here.
Fixes: 65a569b03ca8 ("mptcp: optimize release_cb for the common case")
Signed-off-by: Xiang Yang <xiangyang3@huawei.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Link: https://lore.kernel.org/r/20230803072438.1847500-1-xiangyang3@huawei.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/mptcp/protocol.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -3370,7 +3370,7 @@ static void mptcp_release_cb(struct sock
if (__test_and_clear_bit(MPTCP_CLEAN_UNA, &msk->cb_flags))
__mptcp_clean_una_wakeup(sk);
- if (unlikely(&msk->cb_flags)) {
+ if (unlikely(msk->cb_flags)) {
/* be sure to set the current sk state before tacking actions
* depending on sk_state, that is processing MPTCP_ERROR_REPORT
*/
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 089/149] net/packet: annotate data-races around tp->status
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (87 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 088/149] mptcp: fix the incorrect judgment for msk->cb_flags Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 090/149] net/smc: Use correct buffer sizes when switching between TCP and SMC Greg Kroah-Hartman
` (72 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot, Eric Dumazet,
Willem de Bruijn, Jakub Kicinski
From: Eric Dumazet <edumazet@google.com>
commit 8a9896177784063d01068293caea3f74f6830ff6 upstream.
Another syzbot report [1] is about tp->status lockless reads
from __packet_get_status()
[1]
BUG: KCSAN: data-race in __packet_rcv_has_room / __packet_set_status
write to 0xffff888117d7c080 of 8 bytes by interrupt on cpu 0:
__packet_set_status+0x78/0xa0 net/packet/af_packet.c:407
tpacket_rcv+0x18bb/0x1a60 net/packet/af_packet.c:2483
deliver_skb net/core/dev.c:2173 [inline]
__netif_receive_skb_core+0x408/0x1e80 net/core/dev.c:5337
__netif_receive_skb_one_core net/core/dev.c:5491 [inline]
__netif_receive_skb+0x57/0x1b0 net/core/dev.c:5607
process_backlog+0x21f/0x380 net/core/dev.c:5935
__napi_poll+0x60/0x3b0 net/core/dev.c:6498
napi_poll net/core/dev.c:6565 [inline]
net_rx_action+0x32b/0x750 net/core/dev.c:6698
__do_softirq+0xc1/0x265 kernel/softirq.c:571
invoke_softirq kernel/softirq.c:445 [inline]
__irq_exit_rcu+0x57/0xa0 kernel/softirq.c:650
sysvec_apic_timer_interrupt+0x6d/0x80 arch/x86/kernel/apic/apic.c:1106
asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:645
smpboot_thread_fn+0x33c/0x4a0 kernel/smpboot.c:112
kthread+0x1d7/0x210 kernel/kthread.c:379
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
read to 0xffff888117d7c080 of 8 bytes by interrupt on cpu 1:
__packet_get_status net/packet/af_packet.c:436 [inline]
packet_lookup_frame net/packet/af_packet.c:524 [inline]
__tpacket_has_room net/packet/af_packet.c:1255 [inline]
__packet_rcv_has_room+0x3f9/0x450 net/packet/af_packet.c:1298
tpacket_rcv+0x275/0x1a60 net/packet/af_packet.c:2285
deliver_skb net/core/dev.c:2173 [inline]
dev_queue_xmit_nit+0x38a/0x5e0 net/core/dev.c:2243
xmit_one net/core/dev.c:3574 [inline]
dev_hard_start_xmit+0xcf/0x3f0 net/core/dev.c:3594
__dev_queue_xmit+0xefb/0x1d10 net/core/dev.c:4244
dev_queue_xmit include/linux/netdevice.h:3088 [inline]
can_send+0x4eb/0x5d0 net/can/af_can.c:276
bcm_can_tx+0x314/0x410 net/can/bcm.c:302
bcm_tx_timeout_handler+0xdb/0x260
__run_hrtimer kernel/time/hrtimer.c:1685 [inline]
__hrtimer_run_queues+0x217/0x700 kernel/time/hrtimer.c:1749
hrtimer_run_softirq+0xd6/0x120 kernel/time/hrtimer.c:1766
__do_softirq+0xc1/0x265 kernel/softirq.c:571
run_ksoftirqd+0x17/0x20 kernel/softirq.c:939
smpboot_thread_fn+0x30a/0x4a0 kernel/smpboot.c:164
kthread+0x1d7/0x210 kernel/kthread.c:379
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
value changed: 0x0000000000000000 -> 0x0000000020000081
Reported by Kernel Concurrency Sanitizer on:
CPU: 1 PID: 19 Comm: ksoftirqd/1 Not tainted 6.4.0-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/27/2023
Fixes: 69e3c75f4d54 ("net: TX_RING and packet mmap")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://lore.kernel.org/r/20230803145600.2937518-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/packet/af_packet.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -404,18 +404,20 @@ static void __packet_set_status(struct p
{
union tpacket_uhdr h;
+ /* WRITE_ONCE() are paired with READ_ONCE() in __packet_get_status */
+
h.raw = frame;
switch (po->tp_version) {
case TPACKET_V1:
- h.h1->tp_status = status;
+ WRITE_ONCE(h.h1->tp_status, status);
flush_dcache_page(pgv_to_page(&h.h1->tp_status));
break;
case TPACKET_V2:
- h.h2->tp_status = status;
+ WRITE_ONCE(h.h2->tp_status, status);
flush_dcache_page(pgv_to_page(&h.h2->tp_status));
break;
case TPACKET_V3:
- h.h3->tp_status = status;
+ WRITE_ONCE(h.h3->tp_status, status);
flush_dcache_page(pgv_to_page(&h.h3->tp_status));
break;
default:
@@ -432,17 +434,19 @@ static int __packet_get_status(const str
smp_rmb();
+ /* READ_ONCE() are paired with WRITE_ONCE() in __packet_set_status */
+
h.raw = frame;
switch (po->tp_version) {
case TPACKET_V1:
flush_dcache_page(pgv_to_page(&h.h1->tp_status));
- return h.h1->tp_status;
+ return READ_ONCE(h.h1->tp_status);
case TPACKET_V2:
flush_dcache_page(pgv_to_page(&h.h2->tp_status));
- return h.h2->tp_status;
+ return READ_ONCE(h.h2->tp_status);
case TPACKET_V3:
flush_dcache_page(pgv_to_page(&h.h3->tp_status));
- return h.h3->tp_status;
+ return READ_ONCE(h.h3->tp_status);
default:
WARN(1, "TPACKET version not supported.\n");
BUG();
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 090/149] net/smc: Use correct buffer sizes when switching between TCP and SMC
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (88 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 089/149] net/packet: annotate data-races around tp->status Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 091/149] tcp: add missing family to tcp_set_ca_state() tracepoint Greg Kroah-Hartman
` (71 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Wenjia Zhang, Tony Lu, Gerd Bayer,
David S. Miller
From: Gerd Bayer <gbayer@linux.ibm.com>
commit 30c3c4a4497c3765bf6b298f5072c8165aeaf7cc upstream.
Tuning of the effective buffer size through setsockopts was working for
SMC traffic only but not for TCP fall-back connections even before
commit 0227f058aa29 ("net/smc: Unbind r/w buffer size from clcsock and
make them tunable"). That change made it apparent that TCP fall-back
connections would use net.smc.[rw]mem as buffer size instead of
net.ipv4_tcp_[rw]mem.
Amend the code that copies attributes between the (TCP) clcsock and the
SMC socket and adjust buffer sizes appropriately:
- Copy over sk_userlocks so that both sockets agree on whether tuning
via setsockopt is active.
- When falling back to TCP use sk_sndbuf or sk_rcvbuf as specified with
setsockopt. Otherwise, use the sysctl value for TCP/IPv4.
- Likewise, use either values from setsockopt or from sysctl for SMC
(duplicated) on successful SMC connect.
In smc_tcp_listen_work() drop the explicit copy of buffer sizes as that
is taken care of by the attribute copy.
Fixes: 0227f058aa29 ("net/smc: Unbind r/w buffer size from clcsock and make them tunable")
Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
Signed-off-by: Gerd Bayer <gbayer@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/smc/af_smc.c | 73 ++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 51 insertions(+), 22 deletions(-)
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -438,13 +438,60 @@ out:
return rc;
}
+/* copy only relevant settings and flags of SOL_SOCKET level from smc to
+ * clc socket (since smc is not called for these options from net/core)
+ */
+
+#define SK_FLAGS_SMC_TO_CLC ((1UL << SOCK_URGINLINE) | \
+ (1UL << SOCK_KEEPOPEN) | \
+ (1UL << SOCK_LINGER) | \
+ (1UL << SOCK_BROADCAST) | \
+ (1UL << SOCK_TIMESTAMP) | \
+ (1UL << SOCK_DBG) | \
+ (1UL << SOCK_RCVTSTAMP) | \
+ (1UL << SOCK_RCVTSTAMPNS) | \
+ (1UL << SOCK_LOCALROUTE) | \
+ (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE) | \
+ (1UL << SOCK_RXQ_OVFL) | \
+ (1UL << SOCK_WIFI_STATUS) | \
+ (1UL << SOCK_NOFCS) | \
+ (1UL << SOCK_FILTER_LOCKED) | \
+ (1UL << SOCK_TSTAMP_NEW))
+
+/* if set, use value set by setsockopt() - else use IPv4 or SMC sysctl value */
+static void smc_adjust_sock_bufsizes(struct sock *nsk, struct sock *osk,
+ unsigned long mask)
+{
+ struct net *nnet = sock_net(nsk);
+
+ nsk->sk_userlocks = osk->sk_userlocks;
+ if (osk->sk_userlocks & SOCK_SNDBUF_LOCK) {
+ nsk->sk_sndbuf = osk->sk_sndbuf;
+ } else {
+ if (mask == SK_FLAGS_SMC_TO_CLC)
+ WRITE_ONCE(nsk->sk_sndbuf,
+ READ_ONCE(nnet->ipv4.sysctl_tcp_wmem[1]));
+ else
+ WRITE_ONCE(nsk->sk_sndbuf,
+ 2 * READ_ONCE(nnet->smc.sysctl_wmem));
+ }
+ if (osk->sk_userlocks & SOCK_RCVBUF_LOCK) {
+ nsk->sk_rcvbuf = osk->sk_rcvbuf;
+ } else {
+ if (mask == SK_FLAGS_SMC_TO_CLC)
+ WRITE_ONCE(nsk->sk_rcvbuf,
+ READ_ONCE(nnet->ipv4.sysctl_tcp_rmem[1]));
+ else
+ WRITE_ONCE(nsk->sk_rcvbuf,
+ 2 * READ_ONCE(nnet->smc.sysctl_rmem));
+ }
+}
+
static void smc_copy_sock_settings(struct sock *nsk, struct sock *osk,
unsigned long mask)
{
/* options we don't get control via setsockopt for */
nsk->sk_type = osk->sk_type;
- nsk->sk_sndbuf = osk->sk_sndbuf;
- nsk->sk_rcvbuf = osk->sk_rcvbuf;
nsk->sk_sndtimeo = osk->sk_sndtimeo;
nsk->sk_rcvtimeo = osk->sk_rcvtimeo;
nsk->sk_mark = READ_ONCE(osk->sk_mark);
@@ -455,26 +502,10 @@ static void smc_copy_sock_settings(struc
nsk->sk_flags &= ~mask;
nsk->sk_flags |= osk->sk_flags & mask;
+
+ smc_adjust_sock_bufsizes(nsk, osk, mask);
}
-#define SK_FLAGS_SMC_TO_CLC ((1UL << SOCK_URGINLINE) | \
- (1UL << SOCK_KEEPOPEN) | \
- (1UL << SOCK_LINGER) | \
- (1UL << SOCK_BROADCAST) | \
- (1UL << SOCK_TIMESTAMP) | \
- (1UL << SOCK_DBG) | \
- (1UL << SOCK_RCVTSTAMP) | \
- (1UL << SOCK_RCVTSTAMPNS) | \
- (1UL << SOCK_LOCALROUTE) | \
- (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE) | \
- (1UL << SOCK_RXQ_OVFL) | \
- (1UL << SOCK_WIFI_STATUS) | \
- (1UL << SOCK_NOFCS) | \
- (1UL << SOCK_FILTER_LOCKED) | \
- (1UL << SOCK_TSTAMP_NEW))
-/* copy only relevant settings and flags of SOL_SOCKET level from smc to
- * clc socket (since smc is not called for these options from net/core)
- */
static void smc_copy_sock_settings_to_clc(struct smc_sock *smc)
{
smc_copy_sock_settings(smc->clcsock->sk, &smc->sk, SK_FLAGS_SMC_TO_CLC);
@@ -2466,8 +2497,6 @@ static void smc_tcp_listen_work(struct w
sock_hold(lsk); /* sock_put in smc_listen_work */
INIT_WORK(&new_smc->smc_listen_work, smc_listen_work);
smc_copy_sock_settings_to_smc(new_smc);
- new_smc->sk.sk_sndbuf = lsmc->sk.sk_sndbuf;
- new_smc->sk.sk_rcvbuf = lsmc->sk.sk_rcvbuf;
sock_hold(&new_smc->sk); /* sock_put in passive closing */
if (!queue_work(smc_hs_wq, &new_smc->smc_listen_work))
sock_put(&new_smc->sk);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 091/149] tcp: add missing family to tcp_set_ca_state() tracepoint
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (89 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 090/149] net/smc: Use correct buffer sizes when switching between TCP and SMC Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 092/149] tunnels: fix kasan splat when generating ipv4 pmtu error Greg Kroah-Hartman
` (70 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Eric Dumazet, Ping Gan, Manjusaka,
Simon Horman, Jakub Kicinski
From: Eric Dumazet <edumazet@google.com>
commit 8a70ed9520c5fafaac91053cacdd44625c39e188 upstream.
Before this code is copied, add the missing family, as we did in
commit 3dd344ea84e1 ("net: tracepoint: exposing sk_family in all tcp:tracepoints")
Fixes: 15fcdf6ae116 ("tcp: Add tracepoint for tcp_set_ca_state")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Ping Gan <jacky_gam_2001@163.com>
Cc: Manjusaka <me@manjusaka.me>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230808084923.2239142-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/trace/events/tcp.h | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/include/trace/events/tcp.h
+++ b/include/trace/events/tcp.h
@@ -381,6 +381,7 @@ TRACE_EVENT(tcp_cong_state_set,
__field(const void *, skaddr)
__field(__u16, sport)
__field(__u16, dport)
+ __field(__u16, family)
__array(__u8, saddr, 4)
__array(__u8, daddr, 4)
__array(__u8, saddr_v6, 16)
@@ -396,6 +397,7 @@ TRACE_EVENT(tcp_cong_state_set,
__entry->sport = ntohs(inet->inet_sport);
__entry->dport = ntohs(inet->inet_dport);
+ __entry->family = sk->sk_family;
p32 = (__be32 *) __entry->saddr;
*p32 = inet->inet_saddr;
@@ -409,7 +411,8 @@ TRACE_EVENT(tcp_cong_state_set,
__entry->cong_state = ca_state;
),
- TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c cong_state=%u",
+ TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c cong_state=%u",
+ show_family_name(__entry->family),
__entry->sport, __entry->dport,
__entry->saddr, __entry->daddr,
__entry->saddr_v6, __entry->daddr_v6,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 092/149] tunnels: fix kasan splat when generating ipv4 pmtu error
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (90 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 091/149] tcp: add missing family to tcp_set_ca_state() tracepoint Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 093/149] xsk: fix refcount underflow in error path Greg Kroah-Hartman
` (69 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Florian Westphal, Jakub Kicinski
From: Florian Westphal <fw@strlen.de>
commit 6a7ac3d20593865209dceb554d8b3f094c6bd940 upstream.
If we try to emit an icmp error in response to a nonliner skb, we get
BUG: KASAN: slab-out-of-bounds in ip_compute_csum+0x134/0x220
Read of size 4 at addr ffff88811c50db00 by task iperf3/1691
CPU: 2 PID: 1691 Comm: iperf3 Not tainted 6.5.0-rc3+ #309
[..]
kasan_report+0x105/0x140
ip_compute_csum+0x134/0x220
iptunnel_pmtud_build_icmp+0x554/0x1020
skb_tunnel_check_pmtu+0x513/0xb80
vxlan_xmit_one+0x139e/0x2ef0
vxlan_xmit+0x1867/0x2760
dev_hard_start_xmit+0x1ee/0x4f0
br_dev_queue_push_xmit+0x4d1/0x660
[..]
ip_compute_csum() cannot deal with nonlinear skbs, so avoid it.
After this change, splat is gone and iperf3 is no longer stuck.
Fixes: 4cb47a8644cc ("tunnels: PMTU discovery support for directly bridged IP packets")
Signed-off-by: Florian Westphal <fw@strlen.de>
Link: https://lore.kernel.org/r/20230803152653.29535-2-fw@strlen.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv4/ip_tunnel_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/net/ipv4/ip_tunnel_core.c
+++ b/net/ipv4/ip_tunnel_core.c
@@ -224,7 +224,7 @@ static int iptunnel_pmtud_build_icmp(str
.un.frag.__unused = 0,
.un.frag.mtu = htons(mtu),
};
- icmph->checksum = ip_compute_csum(icmph, len);
+ icmph->checksum = csum_fold(skb_checksum(skb, 0, len, 0));
skb_reset_transport_header(skb);
niph = skb_push(skb, sizeof(*niph));
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 093/149] xsk: fix refcount underflow in error path
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (91 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 092/149] tunnels: fix kasan splat when generating ipv4 pmtu error Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 094/149] bonding: Fix incorrect deletion of ETH_P_8021AD protocol vid from slaves Greg Kroah-Hartman
` (68 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot+8ada0057e69293a05fd4,
Magnus Karlsson, Martin KaFai Lau
From: Magnus Karlsson <magnus.karlsson@intel.com>
commit 85c2c79a07302fe68a1ad5cc449458cc559e314d upstream.
Fix a refcount underflow problem reported by syzbot that can happen
when a system is running out of memory. If xp_alloc_tx_descs() fails,
and it can only fail due to not having enough memory, then the error
path is triggered. In this error path, the refcount of the pool is
decremented as it has incremented before. However, the reference to
the pool in the socket was not nulled. This means that when the socket
is closed later, the socket teardown logic will think that there is a
pool attached to the socket and try to decrease the refcount again,
leading to a refcount underflow.
I chose this fix as it involved adding just a single line. Another
option would have been to move xp_get_pool() and the assignment of
xs->pool to after the if-statement and using xs_umem->pool instead of
xs->pool in the whole if-statement resulting in somewhat simpler code,
but this would have led to much more churn in the code base perhaps
making it harder to backport.
Fixes: ba3beec2ec1d ("xsk: Fix possible crash when multiple sockets are created")
Reported-by: syzbot+8ada0057e69293a05fd4@syzkaller.appspotmail.com
Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/r/20230809142843.13944-1-magnus.karlsson@gmail.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/xdp/xsk.c | 1 +
1 file changed, 1 insertion(+)
--- a/net/xdp/xsk.c
+++ b/net/xdp/xsk.c
@@ -994,6 +994,7 @@ static int xsk_bind(struct socket *sock,
err = xp_alloc_tx_descs(xs->pool, xs);
if (err) {
xp_put_pool(xs->pool);
+ xs->pool = NULL;
sockfd_put(sock);
goto out_unlock;
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 094/149] bonding: Fix incorrect deletion of ETH_P_8021AD protocol vid from slaves
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (92 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 093/149] xsk: fix refcount underflow in error path Greg Kroah-Hartman
@ 2023-08-13 21:18 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 095/149] dccp: fix data-race around dp->dccps_mss_cache Greg Kroah-Hartman
` (67 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:18 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ido Schimmel, Ziyang Xuan,
Ido Schimmel, Jakub Kicinski
From: Ziyang Xuan <william.xuanziyang@huawei.com>
commit 01f4fd27087078c90a0e22860d1dfa2cd0510791 upstream.
BUG_ON(!vlan_info) is triggered in unregister_vlan_dev() with
following testcase:
# ip netns add ns1
# ip netns exec ns1 ip link add bond0 type bond mode 0
# ip netns exec ns1 ip link add bond_slave_1 type veth peer veth2
# ip netns exec ns1 ip link set bond_slave_1 master bond0
# ip netns exec ns1 ip link add link bond_slave_1 name vlan10 type vlan id 10 protocol 802.1ad
# ip netns exec ns1 ip link add link bond0 name bond0_vlan10 type vlan id 10 protocol 802.1ad
# ip netns exec ns1 ip link set bond_slave_1 nomaster
# ip netns del ns1
The logical analysis of the problem is as follows:
1. create ETH_P_8021AD protocol vlan10 for bond_slave_1:
register_vlan_dev()
vlan_vid_add()
vlan_info_alloc()
__vlan_vid_add() // add [ETH_P_8021AD, 10] vid to bond_slave_1
2. create ETH_P_8021AD protocol bond0_vlan10 for bond0:
register_vlan_dev()
vlan_vid_add()
__vlan_vid_add()
vlan_add_rx_filter_info()
if (!vlan_hw_filter_capable(dev, proto)) // condition established because bond0 without NETIF_F_HW_VLAN_STAG_FILTER
return 0;
if (netif_device_present(dev))
return dev->netdev_ops->ndo_vlan_rx_add_vid(dev, proto, vid); // will be never called
// The slaves of bond0 will not refer to the [ETH_P_8021AD, 10] vid.
3. detach bond_slave_1 from bond0:
__bond_release_one()
vlan_vids_del_by_dev()
list_for_each_entry(vid_info, &vlan_info->vid_list, list)
vlan_vid_del(dev, vid_info->proto, vid_info->vid);
// bond_slave_1 [ETH_P_8021AD, 10] vid will be deleted.
// bond_slave_1->vlan_info will be assigned NULL.
4. delete vlan10 during delete ns1:
default_device_exit_batch()
dev->rtnl_link_ops->dellink() // unregister_vlan_dev() for vlan10
vlan_info = rtnl_dereference(real_dev->vlan_info); // real_dev of vlan10 is bond_slave_1
BUG_ON(!vlan_info); // bond_slave_1->vlan_info is NULL now, bug is triggered!!!
Add S-VLAN tag related features support to bond driver. So the bond driver
will always propagate the VLAN info to its slaves.
Fixes: 8ad227ff89a7 ("net: vlan: add 802.1ad support")
Suggested-by: Ido Schimmel <idosch@idosch.org>
Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://lore.kernel.org/r/20230802114320.4156068-1-william.xuanziyang@huawei.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/bonding/bond_main.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -5839,7 +5839,9 @@ void bond_setup(struct net_device *bond_
bond_dev->hw_features = BOND_VLAN_FEATURES |
NETIF_F_HW_VLAN_CTAG_RX |
- NETIF_F_HW_VLAN_CTAG_FILTER;
+ NETIF_F_HW_VLAN_CTAG_FILTER |
+ NETIF_F_HW_VLAN_STAG_RX |
+ NETIF_F_HW_VLAN_STAG_FILTER;
bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL;
bond_dev->features |= bond_dev->hw_features;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 095/149] dccp: fix data-race around dp->dccps_mss_cache
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (93 preceding siblings ...)
2023-08-13 21:18 ` [PATCH 6.1 094/149] bonding: Fix incorrect deletion of ETH_P_8021AD protocol vid from slaves Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 096/149] drivers: net: prevent tun_build_skb() to exceed the packet size limit Greg Kroah-Hartman
` (66 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, syzbot, Eric Dumazet, Jakub Kicinski
From: Eric Dumazet <edumazet@google.com>
commit a47e598fbd8617967e49d85c49c22f9fc642704c upstream.
dccp_sendmsg() reads dp->dccps_mss_cache before locking the socket.
Same thing in do_dccp_getsockopt().
Add READ_ONCE()/WRITE_ONCE() annotations,
and change dccp_sendmsg() to check again dccps_mss_cache
after socket is locked.
Fixes: 7c657876b63c ("[DCCP]: Initial implementation")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20230803163021.2958262-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/dccp/output.c | 2 +-
net/dccp/proto.c | 10 ++++++++--
2 files changed, 9 insertions(+), 3 deletions(-)
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -187,7 +187,7 @@ unsigned int dccp_sync_mss(struct sock *
/* And store cached results */
icsk->icsk_pmtu_cookie = pmtu;
- dp->dccps_mss_cache = cur_mps;
+ WRITE_ONCE(dp->dccps_mss_cache, cur_mps);
return cur_mps;
}
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -627,7 +627,7 @@ static int do_dccp_getsockopt(struct soc
return dccp_getsockopt_service(sk, len,
(__be32 __user *)optval, optlen);
case DCCP_SOCKOPT_GET_CUR_MPS:
- val = dp->dccps_mss_cache;
+ val = READ_ONCE(dp->dccps_mss_cache);
break;
case DCCP_SOCKOPT_AVAILABLE_CCIDS:
return ccid_getsockopt_builtin_ccids(sk, len, optval, optlen);
@@ -736,7 +736,7 @@ int dccp_sendmsg(struct sock *sk, struct
trace_dccp_probe(sk, len);
- if (len > dp->dccps_mss_cache)
+ if (len > READ_ONCE(dp->dccps_mss_cache))
return -EMSGSIZE;
lock_sock(sk);
@@ -769,6 +769,12 @@ int dccp_sendmsg(struct sock *sk, struct
goto out_discard;
}
+ /* We need to check dccps_mss_cache after socket is locked. */
+ if (len > dp->dccps_mss_cache) {
+ rc = -EMSGSIZE;
+ goto out_discard;
+ }
+
skb_reserve(skb, sk->sk_prot->max_header);
rc = memcpy_from_msg(skb_put(skb, len), msg, len);
if (rc != 0)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 096/149] drivers: net: prevent tun_build_skb() to exceed the packet size limit
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (94 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 095/149] dccp: fix data-race around dp->dccps_mss_cache Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 097/149] drivers: vxlan: vnifilter: free percpu vni stats on error path Greg Kroah-Hartman
` (65 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Andrew Kanner, Jakub Kicinski
From: Andrew Kanner <andrew.kanner@gmail.com>
commit 59eeb232940515590de513b997539ef495faca9a upstream.
Using the syzkaller repro with reduced packet size it was discovered
that XDP_PACKET_HEADROOM is not checked in tun_can_build_skb(),
although pad may be incremented in tun_build_skb(). This may end up
with exceeding the PAGE_SIZE limit in tun_build_skb().
Jason Wang <jasowang@redhat.com> proposed to count XDP_PACKET_HEADROOM
always (e.g. without rcu_access_pointer(tun->xdp_prog)) in
tun_can_build_skb() since there's a window during which XDP program
might be attached between tun_can_build_skb() and tun_build_skb().
Fixes: 7df13219d757 ("tun: reserve extra headroom only when XDP is set")
Link: https://syzkaller.appspot.com/bug?extid=f817490f5bd20541b90a
Signed-off-by: Andrew Kanner <andrew.kanner@gmail.com>
Link: https://lore.kernel.org/r/20230803185947.2379988-1-andrew.kanner@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/tun.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1588,7 +1588,7 @@ static bool tun_can_build_skb(struct tun
if (zerocopy)
return false;
- if (SKB_DATA_ALIGN(len + TUN_RX_PAD) +
+ if (SKB_DATA_ALIGN(len + TUN_RX_PAD + XDP_PACKET_HEADROOM) +
SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) > PAGE_SIZE)
return false;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 097/149] drivers: vxlan: vnifilter: free percpu vni stats on error path
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (95 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 096/149] drivers: net: prevent tun_build_skb() to exceed the packet size limit Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 098/149] iavf: fix potential races for FDIR filters Greg Kroah-Hartman
` (64 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ido Schimmel, Fedor Pchelkin,
David S. Miller
From: Fedor Pchelkin <pchelkin@ispras.ru>
commit b1c936e9af5dd08636d568736fc6075ed9d1d529 upstream.
In case rhashtable_lookup_insert_fast() fails inside vxlan_vni_add(), the
allocated percpu vni stats are not freed on the error path.
Introduce vxlan_vni_free() which would work as a nice wrapper to free
vxlan_vni_node resources properly.
Found by Linux Verification Center (linuxtesting.org).
Fixes: 4095e0e1328a ("drivers: vxlan: vnifilter: per vni stats")
Suggested-by: Ido Schimmel <idosch@idosch.org>
Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/vxlan/vxlan_vnifilter.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
--- a/drivers/net/vxlan/vxlan_vnifilter.c
+++ b/drivers/net/vxlan/vxlan_vnifilter.c
@@ -713,6 +713,12 @@ static struct vxlan_vni_node *vxlan_vni_
return vninode;
}
+static void vxlan_vni_free(struct vxlan_vni_node *vninode)
+{
+ free_percpu(vninode->stats);
+ kfree(vninode);
+}
+
static int vxlan_vni_add(struct vxlan_dev *vxlan,
struct vxlan_vni_group *vg,
u32 vni, union vxlan_addr *group,
@@ -740,7 +746,7 @@ static int vxlan_vni_add(struct vxlan_de
&vninode->vnode,
vxlan_vni_rht_params);
if (err) {
- kfree(vninode);
+ vxlan_vni_free(vninode);
return err;
}
@@ -763,8 +769,7 @@ static void vxlan_vni_node_rcu_free(stru
struct vxlan_vni_node *v;
v = container_of(rcu, struct vxlan_vni_node, rcu);
- free_percpu(v->stats);
- kfree(v);
+ vxlan_vni_free(v);
}
static int vxlan_vni_del(struct vxlan_dev *vxlan,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 098/149] iavf: fix potential races for FDIR filters
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (96 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 097/149] drivers: vxlan: vnifilter: free percpu vni stats on error path Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 099/149] IB/hfi1: Fix possible panic during hotplug remove Greg Kroah-Hartman
` (63 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Piotr Gardocki, Rafal Romanowski,
Tony Nguyen, Simon Horman, Jakub Kicinski
From: Piotr Gardocki <piotrx.gardocki@intel.com>
commit 0fb1d8eb234b6979d4981d2d385780dd7d8d9771 upstream.
Add fdir_fltr_lock locking in unprotected places.
The change in iavf_fdir_is_dup_fltr adds a spinlock around a loop which
iterates over all filters and looks for a duplicate. The filter can be
removed from list and freed from memory at the same time it's being
compared. All other places where filters are deleted are already
protected with spinlock.
The remaining changes protect adapter->fdir_active_fltr variable so now
all its uses are under a spinlock.
Fixes: 527691bf0682 ("iavf: Support IPv4 Flow Director filters")
Signed-off-by: Piotr Gardocki <piotrx.gardocki@intel.com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230807205011.3129224-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 5 ++++-
drivers/net/ethernet/intel/iavf/iavf_fdir.c | 11 ++++++++---
2 files changed, 12 insertions(+), 4 deletions(-)
--- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
@@ -1401,14 +1401,15 @@ static int iavf_add_fdir_ethtool(struct
if (fsp->flow_type & FLOW_MAC_EXT)
return -EINVAL;
+ spin_lock_bh(&adapter->fdir_fltr_lock);
if (adapter->fdir_active_fltr >= IAVF_MAX_FDIR_FILTERS) {
+ spin_unlock_bh(&adapter->fdir_fltr_lock);
dev_err(&adapter->pdev->dev,
"Unable to add Flow Director filter because VF reached the limit of max allowed filters (%u)\n",
IAVF_MAX_FDIR_FILTERS);
return -ENOSPC;
}
- spin_lock_bh(&adapter->fdir_fltr_lock);
if (iavf_find_fdir_fltr_by_loc(adapter, fsp->location)) {
dev_err(&adapter->pdev->dev, "Failed to add Flow Director filter, it already exists\n");
spin_unlock_bh(&adapter->fdir_fltr_lock);
@@ -1781,7 +1782,9 @@ static int iavf_get_rxnfc(struct net_dev
case ETHTOOL_GRXCLSRLCNT:
if (!FDIR_FLTR_SUPPORT(adapter))
break;
+ spin_lock_bh(&adapter->fdir_fltr_lock);
cmd->rule_cnt = adapter->fdir_active_fltr;
+ spin_unlock_bh(&adapter->fdir_fltr_lock);
cmd->data = IAVF_MAX_FDIR_FILTERS;
ret = 0;
break;
--- a/drivers/net/ethernet/intel/iavf/iavf_fdir.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_fdir.c
@@ -722,7 +722,9 @@ void iavf_print_fdir_fltr(struct iavf_ad
bool iavf_fdir_is_dup_fltr(struct iavf_adapter *adapter, struct iavf_fdir_fltr *fltr)
{
struct iavf_fdir_fltr *tmp;
+ bool ret = false;
+ spin_lock_bh(&adapter->fdir_fltr_lock);
list_for_each_entry(tmp, &adapter->fdir_list_head, list) {
if (tmp->flow_type != fltr->flow_type)
continue;
@@ -732,11 +734,14 @@ bool iavf_fdir_is_dup_fltr(struct iavf_a
!memcmp(&tmp->ip_data, &fltr->ip_data,
sizeof(fltr->ip_data)) &&
!memcmp(&tmp->ext_data, &fltr->ext_data,
- sizeof(fltr->ext_data)))
- return true;
+ sizeof(fltr->ext_data))) {
+ ret = true;
+ break;
+ }
}
+ spin_unlock_bh(&adapter->fdir_fltr_lock);
- return false;
+ return ret;
}
/**
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 099/149] IB/hfi1: Fix possible panic during hotplug remove
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (97 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 098/149] iavf: fix potential races for FDIR filters Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 100/149] drm/rockchip: Dont spam logs in atomic check Greg Kroah-Hartman
` (62 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Douglas Miller, Dennis Dalessandro,
Leon Romanovsky
From: Douglas Miller <doug.miller@cornelisnetworks.com>
commit 4fdfaef71fced490835145631a795497646f4555 upstream.
During hotplug remove it is possible that the update counters work
might be pending, and may run after memory has been freed.
Cancel the update counters work before freeing memory.
Fixes: 7724105686e7 ("IB/hfi1: add driver files")
Signed-off-by: Douglas Miller <doug.miller@cornelisnetworks.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
Link: https://lore.kernel.org/r/169099756100.3927190.15284930454106475280.stgit@awfm-02.cornelisnetworks.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/infiniband/hw/hfi1/chip.c | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/infiniband/hw/hfi1/chip.c
+++ b/drivers/infiniband/hw/hfi1/chip.c
@@ -12307,6 +12307,7 @@ static void free_cntrs(struct hfi1_devda
if (dd->synth_stats_timer.function)
del_timer_sync(&dd->synth_stats_timer);
+ cancel_work_sync(&dd->update_cntr_work);
ppd = (struct hfi1_pportdata *)(dd + 1);
for (i = 0; i < dd->num_pports; i++, ppd++) {
kfree(ppd->cntrs);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 100/149] drm/rockchip: Dont spam logs in atomic check
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (98 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 099/149] IB/hfi1: Fix possible panic during hotplug remove Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 101/149] wifi: cfg80211: fix sband iftype data lookup for AP_VLAN Greg Kroah-Hartman
` (61 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Daniel Stone, Heiko Stuebner
From: Daniel Stone <daniels@collabora.com>
commit 43dae319b50fac075ad864f84501c703ef20eb2b upstream.
Userspace should not be able to trigger DRM_ERROR messages to spam the
logs; especially not through atomic commit parameters which are
completely legitimate for userspace to attempt.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Fixes: 7707f7227f09 ("drm/rockchip: Add support for afbc")
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230808104405.522493-1-daniels@collabora.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -836,12 +836,12 @@ static int vop_plane_atomic_check(struct
* need align with 2 pixel.
*/
if (fb->format->is_yuv && ((new_plane_state->src.x1 >> 16) % 2)) {
- DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n");
+ DRM_DEBUG_KMS("Invalid Source: Yuv format not support odd xpos\n");
return -EINVAL;
}
if (fb->format->is_yuv && new_plane_state->rotation & DRM_MODE_REFLECT_Y) {
- DRM_ERROR("Invalid Source: Yuv format does not support this rotation\n");
+ DRM_DEBUG_KMS("Invalid Source: Yuv format does not support this rotation\n");
return -EINVAL;
}
@@ -849,7 +849,7 @@ static int vop_plane_atomic_check(struct
struct vop *vop = to_vop(crtc);
if (!vop->data->afbc) {
- DRM_ERROR("vop does not support AFBC\n");
+ DRM_DEBUG_KMS("vop does not support AFBC\n");
return -EINVAL;
}
@@ -858,15 +858,16 @@ static int vop_plane_atomic_check(struct
return ret;
if (new_plane_state->src.x1 || new_plane_state->src.y1) {
- DRM_ERROR("AFBC does not support offset display, xpos=%d, ypos=%d, offset=%d\n",
- new_plane_state->src.x1,
- new_plane_state->src.y1, fb->offsets[0]);
+ DRM_DEBUG_KMS("AFBC does not support offset display, " \
+ "xpos=%d, ypos=%d, offset=%d\n",
+ new_plane_state->src.x1, new_plane_state->src.y1,
+ fb->offsets[0]);
return -EINVAL;
}
if (new_plane_state->rotation && new_plane_state->rotation != DRM_MODE_ROTATE_0) {
- DRM_ERROR("No rotation support in AFBC, rotation=%d\n",
- new_plane_state->rotation);
+ DRM_DEBUG_KMS("No rotation support in AFBC, rotation=%d\n",
+ new_plane_state->rotation);
return -EINVAL;
}
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 101/149] wifi: cfg80211: fix sband iftype data lookup for AP_VLAN
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (99 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 100/149] drm/rockchip: Dont spam logs in atomic check Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 102/149] RDMA/umem: Set iova in ODP flow Greg Kroah-Hartman
` (60 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Felix Fietkau, Johannes Berg
From: Felix Fietkau <nbd@nbd.name>
commit 5fb9a9fb71a33be61d7d8e8ba4597bfb18d604d0 upstream.
AP_VLAN interfaces are virtual, so doesn't really exist as a type for
capabilities. When passed in as a type, AP is the one that's really intended.
Fixes: c4cbaf7973a7 ("cfg80211: Add support for HE")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Link: https://lore.kernel.org/r/20230622165919.46841-1-nbd@nbd.name
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/net/cfg80211.h | 3 +++
1 file changed, 3 insertions(+)
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -562,6 +562,9 @@ ieee80211_get_sband_iftype_data(const st
if (WARN_ON(iftype >= NL80211_IFTYPE_MAX))
return NULL;
+ if (iftype == NL80211_IFTYPE_AP_VLAN)
+ iftype = NL80211_IFTYPE_AP;
+
for (i = 0; i < sband->n_iftype_data; i++) {
const struct ieee80211_sband_iftype_data *data =
&sband->iftype_data[i];
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 102/149] RDMA/umem: Set iova in ODP flow
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (100 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 101/149] wifi: cfg80211: fix sband iftype data lookup for AP_VLAN Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 103/149] net: tls: avoid discarding data on record close Greg Kroah-Hartman
` (59 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Artemy Kovalyov, Michael Guralnik,
Leon Romanovsky
From: Michael Guralnik <michaelgur@nvidia.com>
commit 186b169cf1e4be85aa212a893ea783a543400979 upstream.
Fixing the ODP registration flow to set the iova correctly.
The calculation in ib_umem_num_dma_blocks() function assumes the iova of
the umem is set correctly.
When iova is not set, the calculation in ib_umem_num_dma_blocks() is
equivalent to length/page_size, which is true only when memory is aligned.
For unaligned memory, iova must be set for the ALIGN() in the
ib_umem_num_dma_blocks() to take effect and return a correct value.
mlx5_ib uses ib_umem_num_dma_blocks() to decide the mkey size to use for
the MR. Without this fix, when registering unaligned ODP MR, a wrong
size mkey might be chosen and this might cause the UMR to fail.
UMR would fail over insufficient size to update the mkey translation:
infiniband mlx5_0: dump_cqe:273:(pid 0): dump error cqe
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030: 00 00 00 00 0f 00 78 06 25 00 00 58 00 da ac d2
infiniband mlx5_0: mlx5_ib_post_send_wait:806:(pid 20311): reg umr
failed (6)
infiniband mlx5_0: pagefault_real_mr:661:(pid 20311): Failed to update
mkey page tables
Fixes: f0093fb1a7cb ("RDMA/mlx5: Move mlx5_ib_cont_pages() to the creation of the mlx5_ib_mr")
Fixes: a665aca89a41 ("RDMA/umem: Split ib_umem_num_pages() into ib_umem_num_dma_blocks()")
Signed-off-by: Artemy Kovalyov <artemyko@nvidia.com>
Signed-off-by: Michael Guralnik <michaelgur@nvidia.com>
Link: https://lore.kernel.org/r/3d4be7ca2155bf239dd8c00a2d25974a92c26ab8.1689757344.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/infiniband/core/umem.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -85,6 +85,8 @@ unsigned long ib_umem_find_best_pgsz(str
dma_addr_t mask;
int i;
+ umem->iova = va = virt;
+
if (umem->is_odp) {
unsigned int page_size = BIT(to_ib_umem_odp(umem)->page_shift);
@@ -100,7 +102,6 @@ unsigned long ib_umem_find_best_pgsz(str
*/
pgsz_bitmap &= GENMASK(BITS_PER_LONG - 1, PAGE_SHIFT);
- umem->iova = va = virt;
/* The best result is the smallest page size that results in the minimum
* number of required pages. Compute the largest page size that could
* work based on VA address bits that don't change.
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 103/149] net: tls: avoid discarding data on record close
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (101 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 102/149] RDMA/umem: Set iova in ODP flow Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 104/149] net: marvell: prestera: fix handling IPv4 routes with nhid Greg Kroah-Hartman
` (58 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jakub Kicinski, David S. Miller
From: Jakub Kicinski <kuba@kernel.org>
commit 6b47808f223c70ff564f9b363446d2a5fa1e05b2 upstream.
TLS records end with a 16B tag. For TLS device offload we only
need to make space for this tag in the stream, the device will
generate and replace it with the actual calculated tag.
Long time ago the code would just re-reference the head frag
which mostly worked but was suboptimal because it prevented TCP
from combining the record into a single skb frag. I'm not sure
if it was correct as the first frag may be shorter than the tag.
The commit under fixes tried to replace that with using the page
frag and if the allocation failed rolling back the data, if record
was long enough. It achieves better fragment coalescing but is
also buggy.
We don't roll back the iterator, so unless we're at the end of
send we'll skip the data we designated as tag and start the
next record as if the rollback never happened.
There's also the possibility that the record was constructed
with MSG_MORE and the data came from a different syscall and
we already told the user space that we "got it".
Allocate a single dummy page and use it as fallback.
Found by code inspection, and proven by forcing allocation
failures.
Fixes: e7b159a48ba6 ("net/tls: remove the record tail optimization")
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/tls/tls_device.c | 64 ++++++++++++++++++++++++++-------------------------
1 file changed, 33 insertions(+), 31 deletions(-)
--- a/net/tls/tls_device.c
+++ b/net/tls/tls_device.c
@@ -52,6 +52,8 @@ static LIST_HEAD(tls_device_list);
static LIST_HEAD(tls_device_down_list);
static DEFINE_SPINLOCK(tls_device_lock);
+static struct page *dummy_page;
+
static void tls_device_free_ctx(struct tls_context *ctx)
{
if (ctx->tx_conf == TLS_HW) {
@@ -313,36 +315,33 @@ static int tls_push_record(struct sock *
return tls_push_sg(sk, ctx, offload_ctx->sg_tx_data, 0, flags);
}
-static int tls_device_record_close(struct sock *sk,
- struct tls_context *ctx,
- struct tls_record_info *record,
- struct page_frag *pfrag,
- unsigned char record_type)
+static void tls_device_record_close(struct sock *sk,
+ struct tls_context *ctx,
+ struct tls_record_info *record,
+ struct page_frag *pfrag,
+ unsigned char record_type)
{
struct tls_prot_info *prot = &ctx->prot_info;
- int ret;
+ struct page_frag dummy_tag_frag;
/* append tag
* device will fill in the tag, we just need to append a placeholder
* use socket memory to improve coalescing (re-using a single buffer
* increases frag count)
- * if we can't allocate memory now, steal some back from data
+ * if we can't allocate memory now use the dummy page
*/
- if (likely(skb_page_frag_refill(prot->tag_size, pfrag,
- sk->sk_allocation))) {
- ret = 0;
- tls_append_frag(record, pfrag, prot->tag_size);
- } else {
- ret = prot->tag_size;
- if (record->len <= prot->overhead_size)
- return -ENOMEM;
+ if (unlikely(pfrag->size - pfrag->offset < prot->tag_size) &&
+ !skb_page_frag_refill(prot->tag_size, pfrag, sk->sk_allocation)) {
+ dummy_tag_frag.page = dummy_page;
+ dummy_tag_frag.offset = 0;
+ pfrag = &dummy_tag_frag;
}
+ tls_append_frag(record, pfrag, prot->tag_size);
/* fill prepend */
tls_fill_prepend(ctx, skb_frag_address(&record->frags[0]),
record->len - prot->overhead_size,
record_type);
- return ret;
}
static int tls_create_new_record(struct tls_offload_context_tx *offload_ctx,
@@ -535,18 +534,8 @@ last_record:
if (done || record->len >= max_open_record_len ||
(record->num_frags >= MAX_SKB_FRAGS - 1)) {
- rc = tls_device_record_close(sk, tls_ctx, record,
- pfrag, record_type);
- if (rc) {
- if (rc > 0) {
- size += rc;
- } else {
- size = orig_size;
- destroy_record(record);
- ctx->open_record = NULL;
- break;
- }
- }
+ tls_device_record_close(sk, tls_ctx, record,
+ pfrag, record_type);
rc = tls_push_record(sk,
tls_ctx,
@@ -1466,14 +1455,26 @@ int __init tls_device_init(void)
{
int err;
- destruct_wq = alloc_workqueue("ktls_device_destruct", 0, 0);
- if (!destruct_wq)
+ dummy_page = alloc_page(GFP_KERNEL);
+ if (!dummy_page)
return -ENOMEM;
+ destruct_wq = alloc_workqueue("ktls_device_destruct", 0, 0);
+ if (!destruct_wq) {
+ err = -ENOMEM;
+ goto err_free_dummy;
+ }
+
err = register_netdevice_notifier(&tls_dev_notifier);
if (err)
- destroy_workqueue(destruct_wq);
+ goto err_destroy_wq;
+ return 0;
+
+err_destroy_wq:
+ destroy_workqueue(destruct_wq);
+err_free_dummy:
+ put_page(dummy_page);
return err;
}
@@ -1482,4 +1483,5 @@ void __exit tls_device_cleanup(void)
unregister_netdevice_notifier(&tls_dev_notifier);
destroy_workqueue(destruct_wq);
clean_acked_data_flush();
+ put_page(dummy_page);
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 104/149] net: marvell: prestera: fix handling IPv4 routes with nhid
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (102 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 103/149] net: tls: avoid discarding data on record close Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 105/149] net: phy: at803x: remove set/get wol callbacks for AR8032 Greg Kroah-Hartman
` (57 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jonas Gorski, Elad Nachman,
Jakub Kicinski
From: Jonas Gorski <jonas.gorski@bisdn.de>
commit 2aa71b4b294ee2c3041d085404cea914be9b3225 upstream.
Fix handling IPv4 routes referencing a nexthop via its id by replacing
calls to fib_info_nh() with fib_info_nhc().
Trying to add an IPv4 route referencing a nextop via nhid:
$ ip link set up swp5
$ ip a a 10.0.0.1/24 dev swp5
$ ip nexthop add dev swp5 id 20 via 10.0.0.2
$ ip route add 10.0.1.0/24 nhid 20
triggers warnings when trying to handle the route:
[ 528.805763] ------------[ cut here ]------------
[ 528.810437] WARNING: CPU: 3 PID: 53 at include/net/nexthop.h:468 __prestera_fi_is_direct+0x2c/0x68 [prestera]
[ 528.820434] Modules linked in: prestera_pci act_gact act_police sch_ingress cls_u32 cls_flower prestera arm64_delta_tn48m_dn_led(O) arm64_delta_tn48m_dn_cpld(O) [last unloaded: prestera_pci]
[ 528.837485] CPU: 3 PID: 53 Comm: kworker/u8:3 Tainted: G O 6.4.5 #1
[ 528.845178] Hardware name: delta,tn48m-dn (DT)
[ 528.849641] Workqueue: prestera_ordered __prestera_router_fib_event_work [prestera]
[ 528.857352] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 528.864347] pc : __prestera_fi_is_direct+0x2c/0x68 [prestera]
[ 528.870135] lr : prestera_k_arb_fib_evt+0xb20/0xd50 [prestera]
[ 528.876007] sp : ffff80000b20bc90
[ 528.879336] x29: ffff80000b20bc90 x28: 0000000000000000 x27: ffff0001374d3a48
[ 528.886510] x26: ffff000105604000 x25: ffff000134af8a28 x24: ffff0001374d3800
[ 528.893683] x23: ffff000101c89148 x22: ffff000101c89000 x21: ffff000101c89200
[ 528.900855] x20: ffff00013641fda0 x19: ffff800009d01088 x18: 0000000000000059
[ 528.908027] x17: 0000000000000277 x16: 0000000000000000 x15: 0000000000000000
[ 528.915198] x14: 0000000000000003 x13: 00000000000fe400 x12: 0000000000000000
[ 528.922371] x11: 0000000000000002 x10: 0000000000000aa0 x9 : ffff8000013d2020
[ 528.929543] x8 : 0000000000000018 x7 : 000000007b1703f8 x6 : 000000001ca72f86
[ 528.936715] x5 : 0000000033399ea7 x4 : 0000000000000000 x3 : ffff0001374d3acc
[ 528.943886] x2 : 0000000000000000 x1 : ffff00010200de00 x0 : ffff000134ae3f80
[ 528.951058] Call trace:
[ 528.953516] __prestera_fi_is_direct+0x2c/0x68 [prestera]
[ 528.958952] __prestera_router_fib_event_work+0x100/0x158 [prestera]
[ 528.965348] process_one_work+0x208/0x488
[ 528.969387] worker_thread+0x4c/0x430
[ 528.973068] kthread+0x120/0x138
[ 528.976313] ret_from_fork+0x10/0x20
[ 528.979909] ---[ end trace 0000000000000000 ]---
[ 528.984998] ------------[ cut here ]------------
[ 528.989645] WARNING: CPU: 3 PID: 53 at include/net/nexthop.h:468 __prestera_fi_is_direct+0x2c/0x68 [prestera]
[ 528.999628] Modules linked in: prestera_pci act_gact act_police sch_ingress cls_u32 cls_flower prestera arm64_delta_tn48m_dn_led(O) arm64_delta_tn48m_dn_cpld(O) [last unloaded: prestera_pci]
[ 529.016676] CPU: 3 PID: 53 Comm: kworker/u8:3 Tainted: G W O 6.4.5 #1
[ 529.024368] Hardware name: delta,tn48m-dn (DT)
[ 529.028830] Workqueue: prestera_ordered __prestera_router_fib_event_work [prestera]
[ 529.036539] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 529.043533] pc : __prestera_fi_is_direct+0x2c/0x68 [prestera]
[ 529.049318] lr : __prestera_k_arb_fc_apply+0x280/0x2f8 [prestera]
[ 529.055452] sp : ffff80000b20bc60
[ 529.058781] x29: ffff80000b20bc60 x28: 0000000000000000 x27: ffff0001374d3a48
[ 529.065953] x26: ffff000105604000 x25: ffff000134af8a28 x24: ffff0001374d3800
[ 529.073126] x23: ffff000101c89148 x22: ffff000101c89148 x21: ffff00013641fda0
[ 529.080299] x20: ffff000101c89000 x19: ffff000101c89020 x18: 0000000000000059
[ 529.087471] x17: 0000000000000277 x16: 0000000000000000 x15: 0000000000000000
[ 529.094642] x14: 0000000000000003 x13: 00000000000fe400 x12: 0000000000000000
[ 529.101814] x11: 0000000000000002 x10: 0000000000000aa0 x9 : ffff8000013cee80
[ 529.108985] x8 : 0000000000000018 x7 : 000000007b1703f8 x6 : 0000000000000018
[ 529.116157] x5 : 00000000d3497eb6 x4 : ffff000105604081 x3 : 000000008e979557
[ 529.123329] x2 : 0000000000000000 x1 : ffff00010200de00 x0 : ffff000134ae3f80
[ 529.130501] Call trace:
[ 529.132958] __prestera_fi_is_direct+0x2c/0x68 [prestera]
[ 529.138394] prestera_k_arb_fib_evt+0x6b8/0xd50 [prestera]
[ 529.143918] __prestera_router_fib_event_work+0x100/0x158 [prestera]
[ 529.150313] process_one_work+0x208/0x488
[ 529.154348] worker_thread+0x4c/0x430
[ 529.158030] kthread+0x120/0x138
[ 529.161274] ret_from_fork+0x10/0x20
[ 529.164867] ---[ end trace 0000000000000000 ]---
and results in a non offloaded route:
$ ip route
10.0.0.0/24 dev swp5 proto kernel scope link src 10.0.0.1 rt_trap
10.0.1.0/24 nhid 20 via 10.0.0.2 dev swp5 rt_trap
When creating a route referencing a nexthop via its ID, the nexthop will
be stored in a separate nh pointer instead of the array of nexthops in
the fib_info struct. This causes issues since fib_info_nh() only handles
the nexthops array, but not the separate nh pointer, and will loudly
WARN about it.
In contrast fib_info_nhc() handles both, but returns a fib_nh_common
pointer instead of a fib_nh pointer. Luckily we only ever access fields
from the fib_nh_common parts, so we can just replace all instances of
fib_info_nh() with fib_info_nhc() and access the fields via their
fib_nh_common names.
This allows handling IPv4 routes with an external nexthop, and they now
get offloaded as expected:
$ ip route
10.0.0.0/24 dev swp5 proto kernel scope link src 10.0.0.1 rt_trap
10.0.1.0/24 nhid 20 via 10.0.0.2 dev swp5 offload rt_offload
Fixes: 396b80cb5cc8 ("net: marvell: prestera: Add neighbour cache accounting")
Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
Acked-by: Elad Nachman <enachman@marvell.com>
Link: https://lore.kernel.org/r/20230804101220.247515-1-jonas.gorski@bisdn.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/marvell/prestera/prestera_router.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
--- a/drivers/net/ethernet/marvell/prestera/prestera_router.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_router.c
@@ -166,11 +166,11 @@ prestera_util_neigh2nc_key(struct preste
static bool __prestera_fi_is_direct(struct fib_info *fi)
{
- struct fib_nh *fib_nh;
+ struct fib_nh_common *fib_nhc;
if (fib_info_num_path(fi) == 1) {
- fib_nh = fib_info_nh(fi, 0);
- if (fib_nh->fib_nh_gw_family == AF_UNSPEC)
+ fib_nhc = fib_info_nhc(fi, 0);
+ if (fib_nhc->nhc_gw_family == AF_UNSPEC)
return true;
}
@@ -261,7 +261,7 @@ static bool
__prestera_util_kern_n_is_reachable_v4(u32 tb_id, __be32 *addr,
struct net_device *dev)
{
- struct fib_nh *fib_nh;
+ struct fib_nh_common *fib_nhc;
struct fib_result res;
bool reachable;
@@ -269,8 +269,8 @@ __prestera_util_kern_n_is_reachable_v4(u
if (!prestera_util_kern_get_route(&res, tb_id, addr))
if (prestera_fi_is_direct(res.fi)) {
- fib_nh = fib_info_nh(res.fi, 0);
- if (dev == fib_nh->fib_nh_dev)
+ fib_nhc = fib_info_nhc(res.fi, 0);
+ if (dev == fib_nhc->nhc_dev)
reachable = true;
}
@@ -324,7 +324,7 @@ prestera_kern_fib_info_nhc(struct fib_no
if (info->family == AF_INET) {
fen4_info = container_of(info, struct fib_entry_notifier_info,
info);
- return &fib_info_nh(fen4_info->fi, n)->nh_common;
+ return fib_info_nhc(fen4_info->fi, n);
} else if (info->family == AF_INET6) {
fen6_info = container_of(info, struct fib6_entry_notifier_info,
info);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 105/149] net: phy: at803x: remove set/get wol callbacks for AR8032
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (103 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 104/149] net: marvell: prestera: fix handling IPv4 routes with nhid Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 106/149] net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove Greg Kroah-Hartman
` (56 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Li Yang, David Bauer,
David S. Miller
From: Li Yang <leoyang.li@nxp.com>
commit d7791cec2304aea22eb2ada944e4d467302f5bfe upstream.
Since the AR8032 part does not support wol, remove related callbacks
from it.
Fixes: 5800091a2061 ("net: phy: at803x: add support for AR8032 PHY")
Signed-off-by: Li Yang <leoyang.li@nxp.com>
Cc: David Bauer <mail@david-bauer.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/phy/at803x.c | 2 --
1 file changed, 2 deletions(-)
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
@@ -2087,8 +2087,6 @@ static struct phy_driver at803x_driver[]
.flags = PHY_POLL_CABLE_TEST,
.config_init = at803x_config_init,
.link_change_notify = at803x_link_change_notify,
- .set_wol = at803x_set_wol,
- .get_wol = at803x_get_wol,
.suspend = at803x_suspend,
.resume = at803x_resume,
/* PHY_BASIC_FEATURES */
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 106/149] net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (104 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 105/149] net: phy: at803x: remove set/get wol callbacks for AR8032 Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 107/149] net: hns3: refactor hclge_mac_link_status_wait for interface reuse Greg Kroah-Hartman
` (55 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Vladimir Oltean, Jakub Kicinski
From: Vladimir Oltean <vladimir.oltean@nxp.com>
commit a94c16a2fda010866b8858a386a8bfbeba4f72c5 upstream.
When the tagging protocol in current use is "ocelot-8021q" and we unbind
the driver, we see this splat:
$ echo '0000:00:00.2' > /sys/bus/pci/drivers/fsl_enetc/unbind
mscc_felix 0000:00:00.5 swp0: left promiscuous mode
sja1105 spi2.0: Link is Down
DSA: tree 1 torn down
mscc_felix 0000:00:00.5 swp2: left promiscuous mode
sja1105 spi2.2: Link is Down
DSA: tree 3 torn down
fsl_enetc 0000:00:00.2 eno2: left promiscuous mode
mscc_felix 0000:00:00.5: Link is Down
------------[ cut here ]------------
RTNL: assertion failed at net/dsa/tag_8021q.c (409)
WARNING: CPU: 1 PID: 329 at net/dsa/tag_8021q.c:409 dsa_tag_8021q_unregister+0x12c/0x1a0
Modules linked in:
CPU: 1 PID: 329 Comm: bash Not tainted 6.5.0-rc3+ #771
pc : dsa_tag_8021q_unregister+0x12c/0x1a0
lr : dsa_tag_8021q_unregister+0x12c/0x1a0
Call trace:
dsa_tag_8021q_unregister+0x12c/0x1a0
felix_tag_8021q_teardown+0x130/0x150
felix_teardown+0x3c/0xd8
dsa_tree_teardown_switches+0xbc/0xe0
dsa_unregister_switch+0x168/0x260
felix_pci_remove+0x30/0x60
pci_device_remove+0x4c/0x100
device_release_driver_internal+0x188/0x288
device_links_unbind_consumers+0xfc/0x138
device_release_driver_internal+0xe0/0x288
device_driver_detach+0x24/0x38
unbind_store+0xd8/0x108
drv_attr_store+0x30/0x50
---[ end trace 0000000000000000 ]---
------------[ cut here ]------------
RTNL: assertion failed at net/8021q/vlan_core.c (376)
WARNING: CPU: 1 PID: 329 at net/8021q/vlan_core.c:376 vlan_vid_del+0x1b8/0x1f0
CPU: 1 PID: 329 Comm: bash Tainted: G W 6.5.0-rc3+ #771
pc : vlan_vid_del+0x1b8/0x1f0
lr : vlan_vid_del+0x1b8/0x1f0
dsa_tag_8021q_unregister+0x8c/0x1a0
felix_tag_8021q_teardown+0x130/0x150
felix_teardown+0x3c/0xd8
dsa_tree_teardown_switches+0xbc/0xe0
dsa_unregister_switch+0x168/0x260
felix_pci_remove+0x30/0x60
pci_device_remove+0x4c/0x100
device_release_driver_internal+0x188/0x288
device_links_unbind_consumers+0xfc/0x138
device_release_driver_internal+0xe0/0x288
device_driver_detach+0x24/0x38
unbind_store+0xd8/0x108
drv_attr_store+0x30/0x50
DSA: tree 0 torn down
This was somewhat not so easy to spot, because "ocelot-8021q" is not the
default tagging protocol, and thus, not everyone who tests the unbinding
path may have switched to it beforehand. The default
felix_tag_npi_teardown() does not require rtnl_lock() to be held.
Fixes: 7c83a7c539ab ("net: dsa: add a second tagger for Ocelot switches based on tag_8021q")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20230803134253.2711124-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/dsa/ocelot/felix.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/net/dsa/ocelot/felix.c
+++ b/drivers/net/dsa/ocelot/felix.c
@@ -1606,8 +1606,10 @@ static void felix_teardown(struct dsa_sw
struct felix *felix = ocelot_to_felix(ocelot);
struct dsa_port *dp;
+ rtnl_lock();
if (felix->tag_proto_ops)
felix->tag_proto_ops->teardown(ds);
+ rtnl_unlock();
dsa_switch_for_each_available_port(dp, ds)
ocelot_deinit_port(ocelot, dp->index);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 107/149] net: hns3: refactor hclge_mac_link_status_wait for interface reuse
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (105 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 106/149] net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 108/149] net: hns3: add wait until mac link down Greg Kroah-Hartman
` (54 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jie Wang, Jijie Shao,
Leon Romanovsky, Jakub Kicinski
From: Jie Wang <wangjie125@huawei.com>
commit 08469dacfad25428b66549716811807203744f4f upstream.
Some nic configurations could only be performed after link is down. So this
patch refactor this API for reuse.
Signed-off-by: Jie Wang <wangjie125@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20230807113452.474224-3-shaojijie@huawei.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -72,6 +72,8 @@ static void hclge_restore_hw_table(struc
static void hclge_sync_promisc_mode(struct hclge_dev *hdev);
static void hclge_sync_fd_table(struct hclge_dev *hdev);
static void hclge_update_fec_stats(struct hclge_dev *hdev);
+static int hclge_mac_link_status_wait(struct hclge_dev *hdev, int link_ret,
+ int wait_cnt);
static struct hnae3_ae_algo ae_algo;
@@ -7656,10 +7658,9 @@ static void hclge_phy_link_status_wait(s
} while (++i < HCLGE_PHY_LINK_STATUS_NUM);
}
-static int hclge_mac_link_status_wait(struct hclge_dev *hdev, int link_ret)
+static int hclge_mac_link_status_wait(struct hclge_dev *hdev, int link_ret,
+ int wait_cnt)
{
-#define HCLGE_MAC_LINK_STATUS_NUM 100
-
int link_status;
int i = 0;
int ret;
@@ -7672,13 +7673,15 @@ static int hclge_mac_link_status_wait(st
return 0;
msleep(HCLGE_LINK_STATUS_MS);
- } while (++i < HCLGE_MAC_LINK_STATUS_NUM);
+ } while (++i < wait_cnt);
return -EBUSY;
}
static int hclge_mac_phy_link_status_wait(struct hclge_dev *hdev, bool en,
bool is_phy)
{
+#define HCLGE_MAC_LINK_STATUS_NUM 100
+
int link_ret;
link_ret = en ? HCLGE_LINK_STATUS_UP : HCLGE_LINK_STATUS_DOWN;
@@ -7686,7 +7689,8 @@ static int hclge_mac_phy_link_status_wai
if (is_phy)
hclge_phy_link_status_wait(hdev, link_ret);
- return hclge_mac_link_status_wait(hdev, link_ret);
+ return hclge_mac_link_status_wait(hdev, link_ret,
+ HCLGE_MAC_LINK_STATUS_NUM);
}
static int hclge_set_app_loopback(struct hclge_dev *hdev, bool en)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 108/149] net: hns3: add wait until mac link down
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (106 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 107/149] net: hns3: refactor hclge_mac_link_status_wait for interface reuse Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 109/149] net: hns3: fix deadlock issue when externel_lb and reset are executed together Greg Kroah-Hartman
` (53 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jie Wang, Jijie Shao,
Leon Romanovsky, Jakub Kicinski
From: Jie Wang <wangjie125@huawei.com>
commit 6265e242f7b95f2c1195b42ec912b84ad161470e upstream.
In some configure flow of hns3 driver, for example, change mtu, it will
disable MAC through firmware before configuration. But firmware disables
MAC asynchronously. The rx traffic may be not stopped in this case.
So fixes it by waiting until mac link is down.
Fixes: a9775bb64aa7 ("net: hns3: fix set and get link ksettings issue")
Signed-off-by: Jie Wang <wangjie125@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20230807113452.474224-4-shaojijie@huawei.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -7569,6 +7569,8 @@ static void hclge_enable_fd(struct hnae3
static void hclge_cfg_mac_mode(struct hclge_dev *hdev, bool enable)
{
+#define HCLGE_LINK_STATUS_WAIT_CNT 3
+
struct hclge_desc desc;
struct hclge_config_mac_mode_cmd *req =
(struct hclge_config_mac_mode_cmd *)desc.data;
@@ -7593,9 +7595,15 @@ static void hclge_cfg_mac_mode(struct hc
req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en);
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
- if (ret)
+ if (ret) {
dev_err(&hdev->pdev->dev,
"mac enable fail, ret =%d.\n", ret);
+ return;
+ }
+
+ if (!enable)
+ hclge_mac_link_status_wait(hdev, HCLGE_LINK_STATUS_DOWN,
+ HCLGE_LINK_STATUS_WAIT_CNT);
}
static int hclge_config_switch_param(struct hclge_dev *hdev, int vfid,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 109/149] net: hns3: fix deadlock issue when externel_lb and reset are executed together
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (107 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 108/149] net: hns3: add wait until mac link down Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 110/149] nexthop: Fix infinite nexthop dump when using maximum nexthop ID Greg Kroah-Hartman
` (52 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yonglong Liu, Jijie Shao,
Leon Romanovsky, Jakub Kicinski
From: Yonglong Liu <liuyonglong@huawei.com>
commit ac6257a3ae5db5193b1f19c268e4f72d274ddb88 upstream.
When externel_lb and reset are executed together, a deadlock may
occur:
[ 3147.217009] INFO: task kworker/u321:0:7 blocked for more than 120 seconds.
[ 3147.230483] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 3147.238999] task:kworker/u321:0 state:D stack: 0 pid: 7 ppid: 2 flags:0x00000008
[ 3147.248045] Workqueue: hclge hclge_service_task [hclge]
[ 3147.253957] Call trace:
[ 3147.257093] __switch_to+0x7c/0xbc
[ 3147.261183] __schedule+0x338/0x6f0
[ 3147.265357] schedule+0x50/0xe0
[ 3147.269185] schedule_preempt_disabled+0x18/0x24
[ 3147.274488] __mutex_lock.constprop.0+0x1d4/0x5dc
[ 3147.279880] __mutex_lock_slowpath+0x1c/0x30
[ 3147.284839] mutex_lock+0x50/0x60
[ 3147.288841] rtnl_lock+0x20/0x2c
[ 3147.292759] hclge_reset_prepare+0x68/0x90 [hclge]
[ 3147.298239] hclge_reset_subtask+0x88/0xe0 [hclge]
[ 3147.303718] hclge_reset_service_task+0x84/0x120 [hclge]
[ 3147.309718] hclge_service_task+0x2c/0x70 [hclge]
[ 3147.315109] process_one_work+0x1d0/0x490
[ 3147.319805] worker_thread+0x158/0x3d0
[ 3147.324240] kthread+0x108/0x13c
[ 3147.328154] ret_from_fork+0x10/0x18
In externel_lb process, the hns3 driver call napi_disable()
first, then the reset happen, then the restore process of the
externel_lb will fail, and will not call napi_enable(). When
doing externel_lb again, napi_disable() will be double call,
cause a deadlock of rtnl_lock().
This patch use the HNS3_NIC_STATE_DOWN state to protect the
calling of napi_disable() and napi_enable() in externel_lb
process, just as the usage in ndo_stop() and ndo_start().
Fixes: 04b6ba143521 ("net: hns3: add support for external loopback test")
Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20230807113452.474224-5-shaojijie@huawei.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index 9f6890059666..b7b51e56b030 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -5854,6 +5854,9 @@ void hns3_external_lb_prepare(struct net_device *ndev, bool if_running)
if (!if_running)
return;
+ if (test_and_set_bit(HNS3_NIC_STATE_DOWN, &priv->state))
+ return;
+
netif_carrier_off(ndev);
netif_tx_disable(ndev);
@@ -5882,7 +5885,16 @@ void hns3_external_lb_restore(struct net_device *ndev, bool if_running)
if (!if_running)
return;
- hns3_nic_reset_all_ring(priv->ae_handle);
+ if (hns3_nic_resetting(ndev))
+ return;
+
+ if (!test_bit(HNS3_NIC_STATE_DOWN, &priv->state))
+ return;
+
+ if (hns3_nic_reset_all_ring(priv->ae_handle))
+ return;
+
+ clear_bit(HNS3_NIC_STATE_DOWN, &priv->state);
for (i = 0; i < priv->vector_num; i++)
hns3_vector_enable(&priv->tqp_vector[i]);
--
2.41.0
^ permalink raw reply related [flat|nested] 167+ messages in thread
* [PATCH 6.1 110/149] nexthop: Fix infinite nexthop dump when using maximum nexthop ID
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (108 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 109/149] net: hns3: fix deadlock issue when externel_lb and reset are executed together Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 111/149] nexthop: Make nexthop bucket dump more efficient Greg Kroah-Hartman
` (51 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Petr Machata, Ido Schimmel,
David Ahern, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 913f60cacda73ccac8eead94983e5884c03e04cd upstream.
A netlink dump callback can return a positive number to signal that more
information needs to be dumped or zero to signal that the dump is
complete. In the second case, the core netlink code will append the
NLMSG_DONE message to the skb in order to indicate to user space that
the dump is complete.
The nexthop dump callback always returns a positive number if nexthops
were filled in the provided skb, even if the dump is complete. This
means that a dump will span at least two recvmsg() calls as long as
nexthops are present. In the last recvmsg() call the dump callback will
not fill in any nexthops because the previous call indicated that the
dump should restart from the last dumped nexthop ID plus one.
# ip nexthop add id 1 blackhole
# strace -e sendto,recvmsg -s 5 ip nexthop
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOP, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691394315, nlmsg_pid=0}, {nh_family=AF_UNSPEC, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 36
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{nlmsg_len=36, nlmsg_type=RTM_NEWNEXTHOP, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394315, nlmsg_pid=343}, {nh_family=AF_INET, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}, [[{nla_len=8, nla_type=NHA_ID}, 1], {nla_len=4, nla_type=NHA_BLACKHOLE}]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 36
id 1 blackhole
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394315, nlmsg_pid=343}, 0], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 20
+++ exited with 0 +++
This behavior is both inefficient and buggy. If the last nexthop to be
dumped had the maximum ID of 0xffffffff, then the dump will restart from
0 (0xffffffff + 1) and never end:
# ip nexthop add id $((2**32-1)) blackhole
# ip nexthop
id 4294967295 blackhole
id 4294967295 blackhole
[...]
Fix by adjusting the dump callback to return zero when the dump is
complete. After the fix only one recvmsg() call is made and the
NLMSG_DONE message is appended to the RTM_NEWNEXTHOP response:
# ip nexthop add id $((2**32-1)) blackhole
# strace -e sendto,recvmsg -s 5 ip nexthop
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOP, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691394080, nlmsg_pid=0}, {nh_family=AF_UNSPEC, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 56
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[[{nlmsg_len=36, nlmsg_type=RTM_NEWNEXTHOP, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394080, nlmsg_pid=342}, {nh_family=AF_INET, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}, [[{nla_len=8, nla_type=NHA_ID}, 4294967295], {nla_len=4, nla_type=NHA_BLACKHOLE}]], [{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394080, nlmsg_pid=342}, 0]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 56
id 4294967295 blackhole
+++ exited with 0 +++
Note that if the NLMSG_DONE message cannot be appended because of size
limitations, then another recvmsg() will be needed, but the core netlink
code will not invoke the dump callback and simply reply with a
NLMSG_DONE message since it knows that the callback previously returned
zero.
Add a test that fails before the fix:
# ./fib_nexthops.sh -t basic
[...]
TEST: Maximum nexthop ID dump [FAIL]
[...]
And passes after it:
# ./fib_nexthops.sh -t basic
[...]
TEST: Maximum nexthop ID dump [ OK ]
[...]
Fixes: ab84be7e54fc ("net: Initial nexthop code")
Reported-by: Petr Machata <petrm@nvidia.com>
Closes: https://lore.kernel.org/netdev/87sf91enuf.fsf@nvidia.com/
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20230808075233.3337922-2-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv4/nexthop.c | 6 +-----
tools/testing/selftests/net/fib_nexthops.sh | 5 +++++
2 files changed, 6 insertions(+), 5 deletions(-)
--- a/net/ipv4/nexthop.c
+++ b/net/ipv4/nexthop.c
@@ -3221,13 +3221,9 @@ static int rtm_dump_nexthop(struct sk_bu
&rtm_dump_nexthop_cb, &filter);
if (err < 0) {
if (likely(skb->len))
- goto out;
- goto out_err;
+ err = skb->len;
}
-out:
- err = skb->len;
-out_err:
cb->seq = net->nexthop.seq;
nl_dump_check_consistent(cb, nlmsg_hdr(skb));
return err;
--- a/tools/testing/selftests/net/fib_nexthops.sh
+++ b/tools/testing/selftests/net/fib_nexthops.sh
@@ -1981,6 +1981,11 @@ basic()
run_cmd "$IP link set dev lo up"
+ # Dump should not loop endlessly when maximum nexthop ID is configured.
+ run_cmd "$IP nexthop add id $((2**32-1)) blackhole"
+ run_cmd "timeout 5 $IP nexthop"
+ log_test $? 0 "Maximum nexthop ID dump"
+
#
# groups
#
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 111/149] nexthop: Make nexthop bucket dump more efficient
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (109 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 110/149] nexthop: Fix infinite nexthop dump when using maximum nexthop ID Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 112/149] nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID Greg Kroah-Hartman
` (50 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ido Schimmel, Petr Machata,
David Ahern, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit f10d3d9df49d9e6ee244fda6ca264f901a9c5d85 upstream.
rtm_dump_nexthop_bucket_nh() is used to dump nexthop buckets belonging
to a specific resilient nexthop group. The function returns a positive
return code (the skb length) upon both success and failure.
The above behavior is problematic. When a complete nexthop bucket dump
is requested, the function that walks the different nexthops treats the
non-zero return code as an error. This causes buckets belonging to
different resilient nexthop groups to be dumped using different buffers
even if they can all fit in the same buffer:
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id 10 group 1 type resilient buckets 1
# ip nexthop add id 20 group 1 type resilient buckets 1
# strace -e recvmsg -s 0 ip nexthop bucket
[...]
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[...], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 64
id 10 index 0 idle_time 10.27 nhid 1
[...]
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[...], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 64
id 20 index 0 idle_time 6.44 nhid 1
[...]
Fix by only returning a non-zero return code when an error occurred and
restarting the dump from the bucket index we failed to fill in. This
allows buckets belonging to different resilient nexthop groups to be
dumped using the same buffer:
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id 10 group 1 type resilient buckets 1
# ip nexthop add id 20 group 1 type resilient buckets 1
# strace -e recvmsg -s 0 ip nexthop bucket
[...]
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[...], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 128
id 10 index 0 idle_time 30.21 nhid 1
id 20 index 0 idle_time 26.7 nhid 1
[...]
While this change is more of a performance improvement change than an
actual bug fix, it is a prerequisite for a subsequent patch that does
fix a bug.
Fixes: 8a1bbabb034d ("nexthop: Add netlink handlers for bucket dump")
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20230808075233.3337922-3-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv4/nexthop.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
--- a/net/ipv4/nexthop.c
+++ b/net/ipv4/nexthop.c
@@ -3363,25 +3363,19 @@ static int rtm_dump_nexthop_bucket_nh(st
dd->filter.res_bucket_nh_id != nhge->nh->id)
continue;
+ dd->ctx->bucket_index = bucket_index;
err = nh_fill_res_bucket(skb, nh, bucket, bucket_index,
RTM_NEWNEXTHOPBUCKET, portid,
cb->nlh->nlmsg_seq, NLM_F_MULTI,
cb->extack);
- if (err < 0) {
- if (likely(skb->len))
- goto out;
- goto out_err;
- }
+ if (err)
+ return err;
}
dd->ctx->done_nh_idx = dd->ctx->nh.idx + 1;
- bucket_index = 0;
+ dd->ctx->bucket_index = 0;
-out:
- err = skb->len;
-out_err:
- dd->ctx->bucket_index = bucket_index;
- return err;
+ return 0;
}
static int rtm_dump_nexthop_bucket_cb(struct sk_buff *skb,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 112/149] nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (110 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 111/149] nexthop: Make nexthop bucket dump more efficient Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 113/149] net: hns3: fix strscpy causing content truncation issue Greg Kroah-Hartman
` (49 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ido Schimmel, Petr Machata,
David Ahern, Jakub Kicinski
From: Ido Schimmel <idosch@nvidia.com>
commit 8743aeff5bc4dcb5b87b43765f48d5ac3ad7dd9f upstream.
A netlink dump callback can return a positive number to signal that more
information needs to be dumped or zero to signal that the dump is
complete. In the second case, the core netlink code will append the
NLMSG_DONE message to the skb in order to indicate to user space that
the dump is complete.
The nexthop bucket dump callback always returns a positive number if
nexthop buckets were filled in the provided skb, even if the dump is
complete. This means that a dump will span at least two recvmsg() calls
as long as nexthop buckets are present. In the last recvmsg() call the
dump callback will not fill in any nexthop buckets because the previous
call indicated that the dump should restart from the last dumped nexthop
ID plus one.
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id 10 group 1 type resilient buckets 2
# strace -e sendto,recvmsg -s 5 ip nexthop bucket
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOPBUCKET, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691396980, nlmsg_pid=0}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 128
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[[{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396980, nlmsg_pid=347}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], [{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396980, nlmsg_pid=347}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 128
id 10 index 0 idle_time 6.66 nhid 1
id 10 index 1 idle_time 6.66 nhid 1
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396980, nlmsg_pid=347}, 0], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 20
+++ exited with 0 +++
This behavior is both inefficient and buggy. If the last nexthop to be
dumped had the maximum ID of 0xffffffff, then the dump will restart from
0 (0xffffffff + 1) and never end:
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id $((2**32-1)) group 1 type resilient buckets 2
# ip nexthop bucket
id 4294967295 index 0 idle_time 5.55 nhid 1
id 4294967295 index 1 idle_time 5.55 nhid 1
id 4294967295 index 0 idle_time 5.55 nhid 1
id 4294967295 index 1 idle_time 5.55 nhid 1
[...]
Fix by adjusting the dump callback to return zero when the dump is
complete. After the fix only one recvmsg() call is made and the
NLMSG_DONE message is appended to the RTM_NEWNEXTHOPBUCKET responses:
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id $((2**32-1)) group 1 type resilient buckets 2
# strace -e sendto,recvmsg -s 5 ip nexthop bucket
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOPBUCKET, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691396737, nlmsg_pid=0}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 148
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[[{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396737, nlmsg_pid=350}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], [{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396737, nlmsg_pid=350}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], [{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396737, nlmsg_pid=350}, 0]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 148
id 4294967295 index 0 idle_time 6.61 nhid 1
id 4294967295 index 1 idle_time 6.61 nhid 1
+++ exited with 0 +++
Note that if the NLMSG_DONE message cannot be appended because of size
limitations, then another recvmsg() will be needed, but the core netlink
code will not invoke the dump callback and simply reply with a
NLMSG_DONE message since it knows that the callback previously returned
zero.
Add a test that fails before the fix:
# ./fib_nexthops.sh -t basic_res
[...]
TEST: Maximum nexthop ID dump [FAIL]
[...]
And passes after it:
# ./fib_nexthops.sh -t basic_res
[...]
TEST: Maximum nexthop ID dump [ OK ]
[...]
Fixes: 8a1bbabb034d ("nexthop: Add netlink handlers for bucket dump")
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20230808075233.3337922-4-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv4/nexthop.c | 6 +-----
tools/testing/selftests/net/fib_nexthops.sh | 5 +++++
2 files changed, 6 insertions(+), 5 deletions(-)
--- a/net/ipv4/nexthop.c
+++ b/net/ipv4/nexthop.c
@@ -3424,13 +3424,9 @@ static int rtm_dump_nexthop_bucket(struc
if (err < 0) {
if (likely(skb->len))
- goto out;
- goto out_err;
+ err = skb->len;
}
-out:
- err = skb->len;
-out_err:
cb->seq = net->nexthop.seq;
nl_dump_check_consistent(cb, nlmsg_hdr(skb));
return err;
--- a/tools/testing/selftests/net/fib_nexthops.sh
+++ b/tools/testing/selftests/net/fib_nexthops.sh
@@ -2206,6 +2206,11 @@ basic_res()
run_cmd "$IP nexthop bucket list fdb"
log_test $? 255 "Dump all nexthop buckets with invalid 'fdb' keyword"
+ # Dump should not loop endlessly when maximum nexthop ID is configured.
+ run_cmd "$IP nexthop add id $((2**32-1)) group 1/2 type resilient buckets 4"
+ run_cmd "timeout 5 $IP nexthop bucket"
+ log_test $? 0 "Maximum nexthop ID dump"
+
#
# resilient nexthop buckets get requests
#
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 113/149] net: hns3: fix strscpy causing content truncation issue
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (111 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 112/149] nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 114/149] dmaengine: mcf-edma: Fix a potential un-allocated memory access Greg Kroah-Hartman
` (48 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Hao Chen, Jijie Shao, Jakub Kicinski
From: Hao Chen <chenhao418@huawei.com>
commit 5e3d20617b055e725e785e0058426368269949f3 upstream.
hns3_dbg_fill_content()/hclge_dbg_fill_content() is aim to integrate some
items to a string for content, and we add '\n' and '\0' in the last
two bytes of content.
strscpy() will add '\0' in the last byte of destination buffer(one of
items), it result in finishing content print ahead of schedule and some
dump content truncation.
One Error log shows as below:
cat mac_list/uc
UC MAC_LIST:
Expected:
UC MAC_LIST:
FUNC_ID MAC_ADDR STATE
pf 00:2b:19:05:03:00 ACTIVE
The destination buffer is length-bounded and not required to be
NUL-terminated, so just change strscpy() to memcpy() to fix it.
Fixes: 1cf3d5567f27 ("net: hns3: fix strncpy() not using dest-buf length as length issue")
Signed-off-by: Hao Chen <chenhao418@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
Link: https://lore.kernel.org/r/20230809020902.1941471-1-shaojijie@huawei.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 4 ++--
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
@@ -458,9 +458,9 @@ static void hns3_dbg_fill_content(char *
if (result) {
if (item_len < strlen(result[i]))
break;
- strscpy(pos, result[i], strlen(result[i]));
+ memcpy(pos, result[i], strlen(result[i]));
} else {
- strscpy(pos, items[i].name, strlen(items[i].name));
+ memcpy(pos, items[i].name, strlen(items[i].name));
}
pos += item_len;
len -= item_len;
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
@@ -110,9 +110,9 @@ static void hclge_dbg_fill_content(char
if (result) {
if (item_len < strlen(result[i]))
break;
- strscpy(pos, result[i], strlen(result[i]));
+ memcpy(pos, result[i], strlen(result[i]));
} else {
- strscpy(pos, items[i].name, strlen(items[i].name));
+ memcpy(pos, items[i].name, strlen(items[i].name));
}
pos += item_len;
len -= item_len;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 114/149] dmaengine: mcf-edma: Fix a potential un-allocated memory access
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (112 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 113/149] net: hns3: fix strscpy causing content truncation issue Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 115/149] dmaengine: owl-dma: Modify mismatched function name Greg Kroah-Hartman
` (47 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Christophe JAILLET, Vinod Koul
From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
commit 0a46781c89dece85386885a407244ca26e5c1c44 upstream.
When 'mcf_edma' is allocated, some space is allocated for a
flexible array at the end of the struct. 'chans' item are allocated, that is
to say 'pdata->dma_channels'.
Then, this number of item is stored in 'mcf_edma->n_chans'.
A few lines later, if 'mcf_edma->n_chans' is 0, then a default value of 64
is set.
This ends to no space allocated by devm_kzalloc() because chans was 0, but
64 items are read and/or written in some not allocated memory.
Change the logic to define a default value before allocating the memory.
Fixes: e7a3ff92eaf1 ("dmaengine: fsl-edma: add ColdFire mcf5441x edma support")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/f55d914407c900828f6fad3ea5fa791a5f17b9a4.1685172449.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/dma/mcf-edma.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
--- a/drivers/dma/mcf-edma.c
+++ b/drivers/dma/mcf-edma.c
@@ -191,7 +191,13 @@ static int mcf_edma_probe(struct platfor
return -EINVAL;
}
- chans = pdata->dma_channels;
+ if (!pdata->dma_channels) {
+ dev_info(&pdev->dev, "setting default channel number to 64");
+ chans = 64;
+ } else {
+ chans = pdata->dma_channels;
+ }
+
len = sizeof(*mcf_edma) + sizeof(*mcf_chan) * chans;
mcf_edma = devm_kzalloc(&pdev->dev, len, GFP_KERNEL);
if (!mcf_edma)
@@ -203,11 +209,6 @@ static int mcf_edma_probe(struct platfor
mcf_edma->drvdata = &mcf_data;
mcf_edma->big_endian = 1;
- if (!mcf_edma->n_chans) {
- dev_info(&pdev->dev, "setting default channel number to 64");
- mcf_edma->n_chans = 64;
- }
-
mutex_init(&mcf_edma->fsl_edma_mutex);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 115/149] dmaengine: owl-dma: Modify mismatched function name
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (113 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 114/149] dmaengine: mcf-edma: Fix a potential un-allocated memory access Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 116/149] net/mlx5: Allow 0 for total host VFs Greg Kroah-Hartman
` (46 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Zhang Jianhua, Randy Dunlap,
Vinod Koul
From: Zhang Jianhua <chris.zjh@huawei.com>
commit 74d7221c1f9c9f3a8c316a3557ca7dca8b99d14c upstream.
No functional modification involved.
drivers/dma/owl-dma.c:208: warning: expecting prototype for struct owl_dma_pchan. Prototype was for struct owl_dma_vchan instead HDRTEST usr/include/sound/asequencer.h
Fixes: 47e20577c24d ("dmaengine: Add Actions Semi Owl family S900 DMA driver")
Signed-off-by: Zhang Jianhua <chris.zjh@huawei.com>
Reviewed-by: Randy Dunlap <rdunlap@infradead.org>
Link: https://lore.kernel.org/r/20230722153244.2086949-1-chris.zjh@huawei.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/dma/owl-dma.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/dma/owl-dma.c
+++ b/drivers/dma/owl-dma.c
@@ -192,7 +192,7 @@ struct owl_dma_pchan {
};
/**
- * struct owl_dma_pchan - Wrapper for DMA ENGINE channel
+ * struct owl_dma_vchan - Wrapper for DMA ENGINE channel
* @vc: wrapped virtual channel
* @pchan: the physical channel utilized by this channel
* @txd: active transaction on this channel
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 116/149] net/mlx5: Allow 0 for total host VFs
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (114 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 115/149] dmaengine: owl-dma: Modify mismatched function name Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 117/149] net/mlx5: LAG, Check correct bucket when modifying LAG Greg Kroah-Hartman
` (45 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Daniel Jurgens, Saeed Mahameed
From: Daniel Jurgens <danielj@nvidia.com>
commit 2dc2b3922d3c0f52d3a792d15dcacfbc4cc76b8f upstream.
When querying eswitch functions 0 is a valid number of host VFs. After
introducing ARM SRIOV falling through to getting the max value from PCI
results in using the total VFs allowed on the ARM for the host.
Fixes: 86eec50beaf3 ("net/mlx5: Support querying max VFs from device");
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
--- a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c
@@ -264,8 +264,7 @@ static u16 mlx5_get_max_vfs(struct mlx5_
host_total_vfs = MLX5_GET(query_esw_functions_out, out,
host_params_context.host_total_vfs);
kvfree(out);
- if (host_total_vfs)
- return host_total_vfs;
+ return host_total_vfs;
}
done:
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 117/149] net/mlx5: LAG, Check correct bucket when modifying LAG
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (115 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 116/149] net/mlx5: Allow 0 for total host VFs Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 118/149] net/mlx5: Skip clock update work when device is in error state Greg Kroah-Hartman
` (44 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Shay Drory, Maor Gottlieb,
Saeed Mahameed
From: Shay Drory <shayd@nvidia.com>
commit 86ed7b773c01ba71617538b3b107c33fd9cf90b8 upstream.
Cited patch introduced buckets in hash mode, but missed to update
the ports/bucket check when modifying LAG.
Fix the check.
Fixes: 352899f384d4 ("net/mlx5: Lag, use buckets in hash mode")
Signed-off-by: Shay Drory <shayd@nvidia.com>
Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
@@ -574,7 +574,7 @@ static int __mlx5_lag_modify_definers_de
for (i = 0; i < ldev->ports; i++) {
for (j = 0; j < ldev->buckets; j++) {
idx = i * ldev->buckets + j;
- if (ldev->v2p_map[i] == ports[i])
+ if (ldev->v2p_map[idx] == ports[idx])
continue;
dest.vport.vhca_id = MLX5_CAP_GEN(ldev->pf[ports[idx] - 1].dev,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 118/149] net/mlx5: Skip clock update work when device is in error state
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (116 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 117/149] net/mlx5: LAG, Check correct bucket when modifying LAG Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 119/149] net/mlx5: Reload auxiliary devices in pci error handlers Greg Kroah-Hartman
` (43 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Moshe Shemesh, Aya Levin,
Saeed Mahameed, Ganesh G R
From: Moshe Shemesh <moshe@nvidia.com>
commit d006207625657322ba8251b6e7e829f9659755dc upstream.
When device is in error state, marked by the flag
MLX5_DEVICE_STATE_INTERNAL_ERROR, the HW and PCI may not be accessible
and so clock update work should be skipped. Furthermore, such access
through PCI in error state, after calling mlx5_pci_disable_device() can
result in failing to recover from pci errors.
Fixes: ef9814deafd0 ("net/mlx5e: Add HW timestamping (TS) support")
Reported-and-tested-by: Ganesh G R <ganeshgr@linux.ibm.com>
Closes: https://lore.kernel.org/netdev/9bdb9b9d-140a-7a28-f0de-2e64e873c068@nvidia.com
Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
Reviewed-by: Aya Levin <ayal@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c | 5 +++++
1 file changed, 5 insertions(+)
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
@@ -198,10 +198,15 @@ static void mlx5_timestamp_overflow(stru
clock = container_of(timer, struct mlx5_clock, timer);
mdev = container_of(clock, struct mlx5_core_dev, clock);
+ if (mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)
+ goto out;
+
write_seqlock_irqsave(&clock->lock, flags);
timecounter_read(&timer->tc);
mlx5_update_clock_info_page(mdev);
write_sequnlock_irqrestore(&clock->lock, flags);
+
+out:
schedule_delayed_work(&timer->overflow_work, timer->overflow_period);
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 119/149] net/mlx5: Reload auxiliary devices in pci error handlers
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (117 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 118/149] net/mlx5: Skip clock update work when device is in error state Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 120/149] ibmvnic: Enforce stronger sanity checks on login response Greg Kroah-Hartman
` (42 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Moshe Shemesh, Saeed Mahameed
From: Moshe Shemesh <moshe@nvidia.com>
commit aab8e1a200b926147db51e3f82fd07bb9edf6a98 upstream.
Handling pci errors should fully teardown and load back auxiliary
devices, same as done through mlx5 health recovery flow.
Fixes: 72ed5d5624af ("net/mlx5: Suspend auxiliary devices only in case of PCI device suspend")
Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/mellanox/mlx5/core/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -1794,7 +1794,7 @@ static pci_ers_result_t mlx5_pci_err_det
mlx5_enter_error_state(dev, false);
mlx5_error_sw_reset(dev);
- mlx5_unload_one(dev, true);
+ mlx5_unload_one(dev, false);
mlx5_drain_health_wq(dev);
mlx5_pci_disable_device(dev);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 120/149] ibmvnic: Enforce stronger sanity checks on login response
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (118 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 119/149] net/mlx5: Reload auxiliary devices in pci error handlers Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 121/149] ibmvnic: Unmap DMA login rsp buffer on send login fail Greg Kroah-Hartman
` (41 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Nick Child, Simon Horman,
Jakub Kicinski
From: Nick Child <nnac123@linux.ibm.com>
commit db17ba719bceb52f0ae4ebca0e4c17d9a3bebf05 upstream.
Ensure that all offsets in a login response buffer are within the size
of the allocated response buffer. Any offsets or lengths that surpass
the allocation are likely the result of an incomplete response buffer.
In these cases, a full reset is necessary.
When attempting to login, the ibmvnic device will allocate a response
buffer and pass a reference to the VIOS. The VIOS will then send the
ibmvnic device a LOGIN_RSP CRQ to signal that the buffer has been filled
with data. If the ibmvnic device does not get a response in 20 seconds,
the old buffer is freed and a new login request is sent. With 2
outstanding requests, any LOGIN_RSP CRQ's could be for the older
login request. If this is the case then the login response buffer (which
is for the newer login request) could be incomplete and contain invalid
data. Therefore, we must enforce strict sanity checks on the response
buffer values.
Testing has shown that the `off_rxadd_buff_size` value is filled in last
by the VIOS and will be the smoking gun for these circumstances.
Until VIOS can implement a mechanism for tracking outstanding response
buffers and a method for mapping a LOGIN_RSP CRQ to a particular login
response buffer, the best ibmvnic can do in this situation is perform a
full reset.
Fixes: dff515a3e71d ("ibmvnic: Harden device login requests")
Signed-off-by: Nick Child <nnac123@linux.ibm.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230809221038.51296-1-nnac123@linux.ibm.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/ibm/ibmvnic.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -5192,6 +5192,7 @@ static int handle_login_rsp(union ibmvni
int num_tx_pools;
int num_rx_pools;
u64 *size_array;
+ u32 rsp_len;
int i;
/* CHECK: Test/set of login_pending does not need to be atomic
@@ -5243,6 +5244,23 @@ static int handle_login_rsp(union ibmvni
ibmvnic_reset(adapter, VNIC_RESET_FATAL);
return -EIO;
}
+
+ rsp_len = be32_to_cpu(login_rsp->len);
+ if (be32_to_cpu(login->login_rsp_len) < rsp_len ||
+ rsp_len <= be32_to_cpu(login_rsp->off_txsubm_subcrqs) ||
+ rsp_len <= be32_to_cpu(login_rsp->off_rxadd_subcrqs) ||
+ rsp_len <= be32_to_cpu(login_rsp->off_rxadd_buff_size) ||
+ rsp_len <= be32_to_cpu(login_rsp->off_supp_tx_desc)) {
+ /* This can happen if a login request times out and there are
+ * 2 outstanding login requests sent, the LOGIN_RSP crq
+ * could have been for the older login request. So we are
+ * parsing the newer response buffer which may be incomplete
+ */
+ dev_err(dev, "FATAL: Login rsp offsets/lengths invalid\n");
+ ibmvnic_reset(adapter, VNIC_RESET_FATAL);
+ return -EIO;
+ }
+
size_array = (u64 *)((u8 *)(adapter->login_rsp_buf) +
be32_to_cpu(adapter->login_rsp_buf->off_rxadd_buff_size));
/* variable buffer sizes are not supported, so just read the
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 121/149] ibmvnic: Unmap DMA login rsp buffer on send login fail
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (119 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 120/149] ibmvnic: Enforce stronger sanity checks on login response Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 122/149] ibmvnic: Handle DMA unmapping of login buffs in release functions Greg Kroah-Hartman
` (40 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Nick Child, Simon Horman,
Jakub Kicinski
From: Nick Child <nnac123@linux.ibm.com>
commit 411c565b4bc63e9584a8493882bd566e35a90588 upstream.
If the LOGIN CRQ fails to send then we must DMA unmap the response
buffer. Previously, if the CRQ failed then the memory was freed without
DMA unmapping.
Fixes: c98d9cc4170d ("ibmvnic: send_login should check for crq errors")
Signed-off-by: Nick Child <nnac123@linux.ibm.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230809221038.51296-2-nnac123@linux.ibm.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/ibm/ibmvnic.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -4626,11 +4626,14 @@ static int send_login(struct ibmvnic_ada
if (rc) {
adapter->login_pending = false;
netdev_err(adapter->netdev, "Failed to send login, rc=%d\n", rc);
- goto buf_rsp_map_failed;
+ goto buf_send_failed;
}
return 0;
+buf_send_failed:
+ dma_unmap_single(dev, rsp_buffer_token, rsp_buffer_size,
+ DMA_FROM_DEVICE);
buf_rsp_map_failed:
kfree(login_rsp_buffer);
adapter->login_rsp_buf = NULL;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 122/149] ibmvnic: Handle DMA unmapping of login buffs in release functions
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (120 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 121/149] ibmvnic: Unmap DMA login rsp buffer on send login fail Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 123/149] ibmvnic: Do partial reset on login failure Greg Kroah-Hartman
` (39 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Nick Child, Simon Horman,
Jakub Kicinski
From: Nick Child <nnac123@linux.ibm.com>
commit d78a671eb8996af19d6311ecdee9790d2fa479f0 upstream.
Rather than leaving the DMA unmapping of the login buffers to the
login response handler, move this work into the login release functions.
Previously, these functions were only used for freeing the allocated
buffers. This could lead to issues if there are more than one
outstanding login buffer requests, which is possible if a login request
times out.
If a login request times out, then there is another call to send login.
The send login function makes a call to the login buffer release
function. In the past, this freed the buffers but did not DMA unmap.
Therefore, the VIOS could still write to the old login (now freed)
buffer. It is for this reason that it is a good idea to leave the DMA
unmap call to the login buffers release function.
Since the login buffer release functions now handle DMA unmapping,
remove the duplicate DMA unmapping in handle_login_rsp().
Fixes: dff515a3e71d ("ibmvnic: Harden device login requests")
Signed-off-by: Nick Child <nnac123@linux.ibm.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230809221038.51296-3-nnac123@linux.ibm.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/ibm/ibmvnic.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1397,12 +1397,22 @@ static int ibmvnic_login(struct net_devi
static void release_login_buffer(struct ibmvnic_adapter *adapter)
{
+ if (!adapter->login_buf)
+ return;
+
+ dma_unmap_single(&adapter->vdev->dev, adapter->login_buf_token,
+ adapter->login_buf_sz, DMA_TO_DEVICE);
kfree(adapter->login_buf);
adapter->login_buf = NULL;
}
static void release_login_rsp_buffer(struct ibmvnic_adapter *adapter)
{
+ if (!adapter->login_rsp_buf)
+ return;
+
+ dma_unmap_single(&adapter->vdev->dev, adapter->login_rsp_buf_token,
+ adapter->login_rsp_buf_sz, DMA_FROM_DEVICE);
kfree(adapter->login_rsp_buf);
adapter->login_rsp_buf = NULL;
}
@@ -5207,11 +5217,6 @@ static int handle_login_rsp(union ibmvni
}
adapter->login_pending = false;
- dma_unmap_single(dev, adapter->login_buf_token, adapter->login_buf_sz,
- DMA_TO_DEVICE);
- dma_unmap_single(dev, adapter->login_rsp_buf_token,
- adapter->login_rsp_buf_sz, DMA_FROM_DEVICE);
-
/* If the number of queues requested can't be allocated by the
* server, the login response will return with code 1. We will need
* to resend the login buffer with fewer queues requested.
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 123/149] ibmvnic: Do partial reset on login failure
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (121 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 122/149] ibmvnic: Handle DMA unmapping of login buffs in release functions Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 124/149] ibmvnic: Ensure login failure recovery is safe from other resets Greg Kroah-Hartman
` (38 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Nick Child, Simon Horman,
Jakub Kicinski
From: Nick Child <nnac123@linux.ibm.com>
commit 23cc5f667453ca7645a24c8d21bf84dbf61107b2 upstream.
Perform a partial reset before sending a login request if any of the
following are true:
1. If a previous request times out. This can be dangerous because the
VIOS could still receive the old login request at any point after
the timeout. Therefore, it is best to re-register the CRQ's and
sub-CRQ's before retrying.
2. If the previous request returns an error that is not described in
PAPR. PAPR provides procedures if the login returns with partial
success or aborted return codes (section L.5.1) but other values
do not have a defined procedure. Previously, these conditions
just returned error from the login function rather than trying
to resolve the issue.
This can cause further issues since most callers of the login
function are not prepared to handle an error when logging in. This
improper cleanup can lead to the device being permanently DOWN'd.
For example, if the VIOS believes that the device is already logged
in then it will return INVALID_STATE (-7). If we never re-register
CRQ's then it will always think that the device is already logged
in. This leaves the device inoperable.
The partial reset involves freeing the sub-CRQs, freeing the CRQ then
registering and initializing a new CRQ and sub-CRQs. This essentially
restarts all communication with VIOS to allow for a fresh login attempt
that will be unhindered by any previous failed attempts.
Fixes: dff515a3e71d ("ibmvnic: Harden device login requests")
Signed-off-by: Nick Child <nnac123@linux.ibm.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230809221038.51296-4-nnac123@linux.ibm.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/ibm/ibmvnic.c | 46 ++++++++++++++++++++++++++++++++-----
1 file changed, 40 insertions(+), 6 deletions(-)
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -96,6 +96,8 @@ static int pending_scrq(struct ibmvnic_a
static union sub_crq *ibmvnic_next_scrq(struct ibmvnic_adapter *,
struct ibmvnic_sub_crq_queue *);
static int ibmvnic_poll(struct napi_struct *napi, int data);
+static int reset_sub_crq_queues(struct ibmvnic_adapter *adapter);
+static inline void reinit_init_done(struct ibmvnic_adapter *adapter);
static void send_query_map(struct ibmvnic_adapter *adapter);
static int send_request_map(struct ibmvnic_adapter *, dma_addr_t, u32, u8);
static int send_request_unmap(struct ibmvnic_adapter *, u8);
@@ -1336,11 +1338,9 @@ static int ibmvnic_login(struct net_devi
if (!wait_for_completion_timeout(&adapter->init_done,
timeout)) {
- netdev_warn(netdev, "Login timed out, retrying...\n");
- retry = true;
- adapter->init_done_rc = 0;
- retry_count++;
- continue;
+ netdev_warn(netdev, "Login timed out\n");
+ adapter->login_pending = false;
+ goto partial_reset;
}
if (adapter->init_done_rc == ABORTED) {
@@ -1385,7 +1385,41 @@ static int ibmvnic_login(struct net_devi
} else if (adapter->init_done_rc) {
netdev_warn(netdev, "Adapter login failed, init_done_rc = %d\n",
adapter->init_done_rc);
- return -EIO;
+
+partial_reset:
+ /* adapter login failed, so free any CRQs or sub-CRQs
+ * and register again before attempting to login again.
+ * If we don't do this then the VIOS may think that
+ * we are already logged in and reject any subsequent
+ * attempts
+ */
+ netdev_warn(netdev,
+ "Freeing and re-registering CRQs before attempting to login again\n");
+ retry = true;
+ adapter->init_done_rc = 0;
+ retry_count++;
+ release_sub_crqs(adapter, true);
+ reinit_init_done(adapter);
+ release_crq_queue(adapter);
+ /* If we don't sleep here then we risk an unnecessary
+ * failover event from the VIOS. This is a known VIOS
+ * issue caused by a vnic device freeing and registering
+ * a CRQ too quickly.
+ */
+ msleep(1500);
+ rc = init_crq_queue(adapter);
+ if (rc) {
+ netdev_err(netdev, "login recovery: init CRQ failed %d\n",
+ rc);
+ return -EIO;
+ }
+
+ rc = ibmvnic_reset_init(adapter, false);
+ if (rc) {
+ netdev_err(netdev, "login recovery: Reset init failed %d\n",
+ rc);
+ return -EIO;
+ }
}
} while (retry);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 124/149] ibmvnic: Ensure login failure recovery is safe from other resets
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (122 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 123/149] ibmvnic: Do partial reset on login failure Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 125/149] gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent Greg Kroah-Hartman
` (37 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Nick Child, Simon Horman,
Jakub Kicinski
From: Nick Child <nnac123@linux.ibm.com>
commit 6db541ae279bd4e76dbd939e5fbf298396166242 upstream.
If a login request fails, the recovery process should be protected
against parallel resets. It is a known issue that freeing and
registering CRQ's in quick succession can result in a failover CRQ from
the VIOS. Processing a failover during login recovery is dangerous for
two reasons:
1. This will result in two parallel initialization processes, this can
cause serious issues during login.
2. It is possible that the failover CRQ is received but never executed.
We get notified of a pending failover through a transport event CRQ.
The reset is not performed until a INIT CRQ request is received.
Previously, if CRQ init fails during login recovery, then the ibmvnic
irq is freed and the login process returned error. If failover_pending
is true (a transport event was received), then the ibmvnic device
would never be able to process the reset since it cannot receive the
CRQ_INIT request due to the irq being freed. This leaved the device
in a inoperable state.
Therefore, the login failure recovery process must be hardened against
these possible issues. Possible failovers (due to quick CRQ free and
init) must be avoided and any issues during re-initialization should be
dealt with instead of being propagated up the stack. This logic is
similar to that of ibmvnic_probe().
Fixes: dff515a3e71d ("ibmvnic: Harden device login requests")
Signed-off-by: Nick Child <nnac123@linux.ibm.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20230809221038.51296-5-nnac123@linux.ibm.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/ibm/ibmvnic.c | 70 +++++++++++++++++++++++++------------
1 file changed, 48 insertions(+), 22 deletions(-)
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -115,6 +115,7 @@ static void ibmvnic_tx_scrq_clean_buffer
static void free_long_term_buff(struct ibmvnic_adapter *adapter,
struct ibmvnic_long_term_buff *ltb);
static void ibmvnic_disable_irqs(struct ibmvnic_adapter *adapter);
+static void flush_reset_queue(struct ibmvnic_adapter *adapter);
struct ibmvnic_stat {
char name[ETH_GSTRING_LEN];
@@ -1316,8 +1317,8 @@ static const char *adapter_state_to_stri
static int ibmvnic_login(struct net_device *netdev)
{
+ unsigned long flags, timeout = msecs_to_jiffies(20000);
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
- unsigned long timeout = msecs_to_jiffies(20000);
int retry_count = 0;
int retries = 10;
bool retry;
@@ -1382,6 +1383,7 @@ static int ibmvnic_login(struct net_devi
"SCRQ irq initialization failed\n");
return rc;
}
+ /* Default/timeout error handling, reset and start fresh */
} else if (adapter->init_done_rc) {
netdev_warn(netdev, "Adapter login failed, init_done_rc = %d\n",
adapter->init_done_rc);
@@ -1397,29 +1399,53 @@ partial_reset:
"Freeing and re-registering CRQs before attempting to login again\n");
retry = true;
adapter->init_done_rc = 0;
- retry_count++;
release_sub_crqs(adapter, true);
- reinit_init_done(adapter);
- release_crq_queue(adapter);
- /* If we don't sleep here then we risk an unnecessary
- * failover event from the VIOS. This is a known VIOS
- * issue caused by a vnic device freeing and registering
- * a CRQ too quickly.
+ /* Much of this is similar logic as ibmvnic_probe(),
+ * we are essentially re-initializing communication
+ * with the server. We really should not run any
+ * resets/failovers here because this is already a form
+ * of reset and we do not want parallel resets occurring
*/
- msleep(1500);
- rc = init_crq_queue(adapter);
- if (rc) {
- netdev_err(netdev, "login recovery: init CRQ failed %d\n",
- rc);
- return -EIO;
- }
-
- rc = ibmvnic_reset_init(adapter, false);
- if (rc) {
- netdev_err(netdev, "login recovery: Reset init failed %d\n",
- rc);
- return -EIO;
- }
+ do {
+ reinit_init_done(adapter);
+ /* Clear any failovers we got in the previous
+ * pass since we are re-initializing the CRQ
+ */
+ adapter->failover_pending = false;
+ release_crq_queue(adapter);
+ /* If we don't sleep here then we risk an
+ * unnecessary failover event from the VIOS.
+ * This is a known VIOS issue caused by a vnic
+ * device freeing and registering a CRQ too
+ * quickly.
+ */
+ msleep(1500);
+ /* Avoid any resets, since we are currently
+ * resetting.
+ */
+ spin_lock_irqsave(&adapter->rwi_lock, flags);
+ flush_reset_queue(adapter);
+ spin_unlock_irqrestore(&adapter->rwi_lock,
+ flags);
+
+ rc = init_crq_queue(adapter);
+ if (rc) {
+ netdev_err(netdev, "login recovery: init CRQ failed %d\n",
+ rc);
+ return -EIO;
+ }
+
+ rc = ibmvnic_reset_init(adapter, false);
+ if (rc)
+ netdev_err(netdev, "login recovery: Reset init failed %d\n",
+ rc);
+ /* IBMVNIC_CRQ_INIT will return EAGAIN if it
+ * fails, since ibmvnic_reset_init will free
+ * irq's in failure, we won't be able to receive
+ * new CRQs so we need to keep trying. probe()
+ * handles this similarly.
+ */
+ } while (rc == -EAGAIN && retry_count++ < retries);
}
} while (retry);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 125/149] gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (123 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 124/149] ibmvnic: Ensure login failure recovery is safe from other resets Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 126/149] gpio: sim: mark the GPIO chip as a one that can sleep Greg Kroah-Hartman
` (36 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Paul Demetrotion,
William Breathitt Gray, Andy Shevchenko, Linus Walleij,
Bartosz Golaszewski
From: William Breathitt Gray <william.gray@linaro.org>
commit 33f83d13ded164cd49ce2a3bd2770115abc64e6f upstream.
The WinSystems WS16C48 I/O address region spans offsets 0x0 through 0xA,
which is a total of 11 bytes. Fix the WS16C48_EXTENT define to the
correct value of 11 so that access to necessary device registers is
properly requested in the ws16c48_probe() callback by the
devm_request_region() function call.
Fixes: 2c05a0f29f41 ("gpio: ws16c48: Implement and utilize register structures")
Cc: stable@vger.kernel.org
Cc: Paul Demetrotion <pdemetrotion@winsystems.com>
Signed-off-by: William Breathitt Gray <william.gray@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpio/gpio-ws16c48.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/gpio/gpio-ws16c48.c
+++ b/drivers/gpio/gpio-ws16c48.c
@@ -18,7 +18,7 @@
#include <linux/spinlock.h>
#include <linux/types.h>
-#define WS16C48_EXTENT 10
+#define WS16C48_EXTENT 11
#define MAX_NUM_WS16C48 max_num_isa_dev(WS16C48_EXTENT)
static unsigned int base[MAX_NUM_WS16C48];
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 126/149] gpio: sim: mark the GPIO chip as a one that can sleep
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (124 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 125/149] gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 127/149] btrfs: wait for actual caching progress during allocation Greg Kroah-Hartman
` (35 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Bartosz Golaszewski, Andy Shevchenko,
Linus Walleij
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
commit 5a78d5db9c90c9dc84212f40a5f2687b7cafc8ec upstream.
Simulated chips use a mutex for synchronization in driver callbacks so
they must not be called from interrupt context. Set the can_sleep field
of the GPIO chip to true to force users to only use threaded irqs.
Fixes: cb8c474e79be ("gpio: sim: new testing module")
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpio/gpio-sim.c | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/gpio/gpio-sim.c
+++ b/drivers/gpio/gpio-sim.c
@@ -425,6 +425,7 @@ static int gpio_sim_add_bank(struct fwno
gc->set_config = gpio_sim_set_config;
gc->to_irq = gpio_sim_to_irq;
gc->free = gpio_sim_free;
+ gc->can_sleep = true;
ret = devm_gpiochip_add_data(dev, gc, chip);
if (ret)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 127/149] btrfs: wait for actual caching progress during allocation
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (125 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 126/149] gpio: sim: mark the GPIO chip as a one that can sleep Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 128/149] btrfs: dont stop integrity writeback too early Greg Kroah-Hartman
` (34 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Boris Burkov, Josef Bacik,
David Sterba
From: Josef Bacik <josef@toxicpanda.com>
commit fc1f91b9231a28fba333f931a031bf776bc6ef0e upstream.
Recently we've been having mysterious hangs while running generic/475 on
the CI system. This turned out to be something like this:
Task 1
dmsetup suspend --nolockfs
-> __dm_suspend
-> dm_wait_for_completion
-> dm_wait_for_bios_completion
-> Unable to complete because of IO's on a plug in Task 2
Task 2
wb_workfn
-> wb_writeback
-> blk_start_plug
-> writeback_sb_inodes
-> Infinite loop unable to make an allocation
Task 3
cache_block_group
->read_extent_buffer_pages
->Waiting for IO to complete that can't be submitted because Task 1
suspended the DM device
The problem here is that we need Task 2 to be scheduled completely for
the blk plug to flush. Normally this would happen, we normally wait for
the block group caching to finish (Task 3), and this schedule would
result in the block plug flushing.
However if there's enough free space available from the current caching
to satisfy the allocation we won't actually wait for the caching to
complete. This check however just checks that we have enough space, not
that we can make the allocation. In this particular case we were trying
to allocate 9MiB, and we had 10MiB of free space, but we didn't have
9MiB of contiguous space to allocate, and thus the allocation failed and
we looped.
We specifically don't cycle through the FFE loop until we stop finding
cached block groups because we don't want to allocate new block groups
just because we're caching, so we short circuit the normal loop once we
hit LOOP_CACHING_WAIT and we found a caching block group.
This is normally fine, except in this particular case where the caching
thread can't make progress because the DM device has been suspended.
Fix this by not only waiting for free space to >= the amount of space we
want to allocate, but also that we make some progress in caching from
the time we start waiting. This will keep us from busy looping when the
caching is taking a while but still theoretically has enough space for
us to allocate from, and fixes this particular case by forcing us to
actually sleep and wait for forward progress, which will flush the plug.
With this fix we're no longer hanging with generic/475.
CC: stable@vger.kernel.org # 6.1+
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/block-group.c | 17 +++++++++++++++--
fs/btrfs/block-group.h | 2 ++
2 files changed, 17 insertions(+), 2 deletions(-)
--- a/fs/btrfs/block-group.c
+++ b/fs/btrfs/block-group.c
@@ -436,13 +436,23 @@ void btrfs_wait_block_group_cache_progre
u64 num_bytes)
{
struct btrfs_caching_control *caching_ctl;
+ int progress;
caching_ctl = btrfs_get_caching_control(cache);
if (!caching_ctl)
return;
+ /*
+ * We've already failed to allocate from this block group, so even if
+ * there's enough space in the block group it isn't contiguous enough to
+ * allow for an allocation, so wait for at least the next wakeup tick,
+ * or for the thing to be done.
+ */
+ progress = atomic_read(&caching_ctl->progress);
+
wait_event(caching_ctl->wait, btrfs_block_group_done(cache) ||
- (cache->free_space_ctl->free_space >= num_bytes));
+ (progress != atomic_read(&caching_ctl->progress) &&
+ (cache->free_space_ctl->free_space >= num_bytes)));
btrfs_put_caching_control(caching_ctl);
}
@@ -660,8 +670,10 @@ next:
if (total_found > CACHING_CTL_WAKE_UP) {
total_found = 0;
- if (wakeup)
+ if (wakeup) {
+ atomic_inc(&caching_ctl->progress);
wake_up(&caching_ctl->wait);
+ }
}
}
path->slots[0]++;
@@ -767,6 +779,7 @@ int btrfs_cache_block_group(struct btrfs
init_waitqueue_head(&caching_ctl->wait);
caching_ctl->block_group = cache;
refcount_set(&caching_ctl->count, 2);
+ atomic_set(&caching_ctl->progress, 0);
btrfs_init_work(&caching_ctl->work, caching_thread, NULL, NULL);
spin_lock(&cache->lock);
--- a/fs/btrfs/block-group.h
+++ b/fs/btrfs/block-group.h
@@ -70,6 +70,8 @@ struct btrfs_caching_control {
wait_queue_head_t wait;
struct btrfs_work work;
struct btrfs_block_group *block_group;
+ /* Track progress of caching during allocation. */
+ atomic_t progress;
refcount_t count;
};
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 128/149] btrfs: dont stop integrity writeback too early
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (126 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 127/149] btrfs: wait for actual caching progress during allocation Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 129/149] btrfs: properly clear end of the unreserved range in cow_file_range Greg Kroah-Hartman
` (33 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Josef Bacik, Christoph Hellwig,
David Sterba
From: Christoph Hellwig <hch@lst.de>
commit effa24f689ce0948f68c754991a445a8d697d3a8 upstream.
extent_write_cache_pages stops writing pages as soon as nr_to_write hits
zero. That is the right thing for opportunistic writeback, but incorrect
for data integrity writeback, which needs to ensure that no dirty pages
are left in the range. Thus only stop the writeback for WB_SYNC_NONE
if nr_to_write hits 0.
This is a port of write_cache_pages changes in commit 05fe478dd04e
("mm: write_cache_pages integrity fix").
Note that I've only trigger the problem with other changes to the btrfs
writeback code, but this condition seems worthwhile fixing anyway.
CC: stable@vger.kernel.org # 4.14+
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
[ updated comment ]
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/extent_io.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -3015,11 +3015,12 @@ retry:
}
/*
- * the filesystem may choose to bump up nr_to_write.
+ * The filesystem may choose to bump up nr_to_write.
* We have to make sure to honor the new nr_to_write
- * at any time
+ * at any time.
*/
- nr_to_write_done = wbc->nr_to_write <= 0;
+ nr_to_write_done = (wbc->sync_mode == WB_SYNC_NONE &&
+ wbc->nr_to_write <= 0);
}
pagevec_release(&pvec);
cond_resched();
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 129/149] btrfs: properly clear end of the unreserved range in cow_file_range
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (127 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 128/149] btrfs: dont stop integrity writeback too early Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 130/149] btrfs: exit gracefully if reloc roots dont match Greg Kroah-Hartman
` (32 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Josef Bacik, Christoph Hellwig,
David Sterba
From: Christoph Hellwig <hch@lst.de>
commit 12b2d64e591652a2d97dd3afa2b062ca7a4ba352 upstream.
When the call to btrfs_reloc_clone_csums in cow_file_range returns an
error, we jump to the out_unlock label with the extent_reserved variable
set to false. The cleanup at the label will then call
extent_clear_unlock_delalloc on the range from start to end. But we've
already added cur_alloc_size to start before the jump, so there might no
range be left from the newly incremented start to end. Move the check for
'start < end' so that it is reached by also for the !extent_reserved case.
CC: stable@vger.kernel.org # 6.1+
Fixes: a315e68f6e8b ("Btrfs: fix invalid attempt to free reserved space on failure to cow range")
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/inode.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1429,8 +1429,6 @@ out_unlock:
clear_bits,
page_ops);
start += cur_alloc_size;
- if (start >= end)
- return ret;
}
/*
@@ -1439,9 +1437,11 @@ out_unlock:
* space_info's bytes_may_use counter, reserved in
* btrfs_check_data_free_space().
*/
- extent_clear_unlock_delalloc(inode, start, end, locked_page,
- clear_bits | EXTENT_CLEAR_DATA_RESV,
- page_ops);
+ if (start < end) {
+ clear_bits |= EXTENT_CLEAR_DATA_RESV;
+ extent_clear_unlock_delalloc(inode, start, end, locked_page,
+ clear_bits, page_ops);
+ }
return ret;
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 130/149] btrfs: exit gracefully if reloc roots dont match
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (128 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 129/149] btrfs: properly clear end of the unreserved range in cow_file_range Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 131/149] btrfs: reject invalid reloc tree root keys with stack dump Greg Kroah-Hartman
` (31 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot+ae97a827ae1c3336bbb4,
Filipe Manana, Qu Wenruo, David Sterba
From: Qu Wenruo <wqu@suse.com>
commit 05d7ce504545f7874529701664c90814ca645c5d upstream.
[BUG]
Syzbot reported a crash that an ASSERT() got triggered inside
prepare_to_merge().
[CAUSE]
The root cause of the triggered ASSERT() is we can have a race between
quota tree creation and relocation.
This leads us to create a duplicated quota tree in the
btrfs_read_fs_root() path, and since it's treated as fs tree, it would
have ROOT_SHAREABLE flag, causing us to create a reloc tree for it.
The bug itself is fixed by a dedicated patch for it, but this already
taught us the ASSERT() is not something straightforward for
developers.
[ENHANCEMENT]
Instead of using an ASSERT(), let's handle it gracefully and output
extra info about the mismatch reloc roots to help debug.
Also with the above ASSERT() removed, we can trigger ASSERT(0)s inside
merge_reloc_roots() later.
Also replace those ASSERT(0)s with WARN_ON()s.
CC: stable@vger.kernel.org # 5.15+
Reported-by: syzbot+ae97a827ae1c3336bbb4@syzkaller.appspotmail.com
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/relocation.c | 45 +++++++++++++++++++++++++++++++++++++--------
1 file changed, 37 insertions(+), 8 deletions(-)
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -1902,7 +1902,39 @@ again:
err = PTR_ERR(root);
break;
}
- ASSERT(root->reloc_root == reloc_root);
+
+ if (unlikely(root->reloc_root != reloc_root)) {
+ if (root->reloc_root) {
+ btrfs_err(fs_info,
+"reloc tree mismatch, root %lld has reloc root key (%lld %u %llu) gen %llu, expect reloc root key (%lld %u %llu) gen %llu",
+ root->root_key.objectid,
+ root->reloc_root->root_key.objectid,
+ root->reloc_root->root_key.type,
+ root->reloc_root->root_key.offset,
+ btrfs_root_generation(
+ &root->reloc_root->root_item),
+ reloc_root->root_key.objectid,
+ reloc_root->root_key.type,
+ reloc_root->root_key.offset,
+ btrfs_root_generation(
+ &reloc_root->root_item));
+ } else {
+ btrfs_err(fs_info,
+"reloc tree mismatch, root %lld has no reloc root, expect reloc root key (%lld %u %llu) gen %llu",
+ root->root_key.objectid,
+ reloc_root->root_key.objectid,
+ reloc_root->root_key.type,
+ reloc_root->root_key.offset,
+ btrfs_root_generation(
+ &reloc_root->root_item));
+ }
+ list_add(&reloc_root->root_list, &reloc_roots);
+ btrfs_put_root(root);
+ btrfs_abort_transaction(trans, -EUCLEAN);
+ if (!err)
+ err = -EUCLEAN;
+ break;
+ }
/*
* set reference count to 1, so btrfs_recover_relocation
@@ -1975,7 +2007,7 @@ again:
root = btrfs_get_fs_root(fs_info, reloc_root->root_key.offset,
false);
if (btrfs_root_refs(&reloc_root->root_item) > 0) {
- if (IS_ERR(root)) {
+ if (WARN_ON(IS_ERR(root))) {
/*
* For recovery we read the fs roots on mount,
* and if we didn't find the root then we marked
@@ -1984,17 +2016,14 @@ again:
* memory. However there's no reason we can't
* handle the error properly here just in case.
*/
- ASSERT(0);
ret = PTR_ERR(root);
goto out;
}
- if (root->reloc_root != reloc_root) {
+ if (WARN_ON(root->reloc_root != reloc_root)) {
/*
- * This is actually impossible without something
- * going really wrong (like weird race condition
- * or cosmic rays).
+ * This can happen if on-disk metadata has some
+ * corruption, e.g. bad reloc tree key offset.
*/
- ASSERT(0);
ret = -EINVAL;
goto out;
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 131/149] btrfs: reject invalid reloc tree root keys with stack dump
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (129 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 130/149] btrfs: exit gracefully if reloc roots dont match Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 132/149] btrfs: set cache_block_group_error if we find an error Greg Kroah-Hartman
` (30 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot+ae97a827ae1c3336bbb4,
Filipe Manana, Qu Wenruo, David Sterba
From: Qu Wenruo <wqu@suse.com>
commit 6ebcd021c92b8e4b904552e4d87283032100796d upstream.
[BUG]
Syzbot reported a crash that an ASSERT() got triggered inside
prepare_to_merge().
That ASSERT() makes sure the reloc tree is properly pointed back by its
subvolume tree.
[CAUSE]
After more debugging output, it turns out we had an invalid reloc tree:
BTRFS error (device loop1): reloc tree mismatch, root 8 has no reloc root, expect reloc root key (-8, 132, 8) gen 17
Note the above root key is (TREE_RELOC_OBJECTID, ROOT_ITEM,
QUOTA_TREE_OBJECTID), meaning it's a reloc tree for quota tree.
But reloc trees can only exist for subvolumes, as for non-subvolume
trees, we just COW the involved tree block, no need to create a reloc
tree since those tree blocks won't be shared with other trees.
Only subvolumes tree can share tree blocks with other trees (thus they
have BTRFS_ROOT_SHAREABLE flag).
Thus this new debug output proves my previous assumption that corrupted
on-disk data can trigger that ASSERT().
[FIX]
Besides the dedicated fix and the graceful exit, also let tree-checker to
check such root keys, to make sure reloc trees can only exist for subvolumes.
CC: stable@vger.kernel.org # 5.15+
Reported-by: syzbot+ae97a827ae1c3336bbb4@syzkaller.appspotmail.com
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/disk-io.c | 3 ++-
fs/btrfs/tree-checker.c | 14 ++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1455,7 +1455,8 @@ static int btrfs_init_fs_root(struct btr
goto fail;
if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID &&
- !btrfs_is_data_reloc_root(root)) {
+ !btrfs_is_data_reloc_root(root) &&
+ is_fstree(root->root_key.objectid)) {
set_bit(BTRFS_ROOT_SHAREABLE, &root->state);
btrfs_check_and_init_root_item(&root->root_item);
}
--- a/fs/btrfs/tree-checker.c
+++ b/fs/btrfs/tree-checker.c
@@ -442,6 +442,20 @@ static int check_root_key(struct extent_
btrfs_item_key_to_cpu(leaf, &item_key, slot);
is_root_item = (item_key.type == BTRFS_ROOT_ITEM_KEY);
+ /*
+ * Bad rootid for reloc trees.
+ *
+ * Reloc trees are only for subvolume trees, other trees only need
+ * to be COWed to be relocated.
+ */
+ if (unlikely(is_root_item && key->objectid == BTRFS_TREE_RELOC_OBJECTID &&
+ !is_fstree(key->offset))) {
+ generic_err(leaf, slot,
+ "invalid reloc tree for root %lld, root id is not a subvolume tree",
+ key->offset);
+ return -EUCLEAN;
+ }
+
/* No such tree id */
if (unlikely(key->objectid == 0)) {
if (is_root_item)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 132/149] btrfs: set cache_block_group_error if we find an error
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (130 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 131/149] btrfs: reject invalid reloc tree root keys with stack dump Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 133/149] nvme-tcp: fix potential unbalanced freeze & unfreeze Greg Kroah-Hartman
` (29 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Josef Bacik, David Sterba
From: Josef Bacik <josef@toxicpanda.com>
commit 92fb94b69c6accf1e49fff699640fa0ce03dc910 upstream.
We set cache_block_group_error if btrfs_cache_block_group() returns an
error, this is because we could end up not finding space to allocate and
mistakenly return -ENOSPC, and which could then abort the transaction
with the incorrect errno, and in the case of ENOSPC result in a
WARN_ON() that will trip up tests like generic/475.
However there's the case where multiple threads can be racing, one
thread gets the proper error, and the other thread doesn't actually call
btrfs_cache_block_group(), it instead sees ->cached ==
BTRFS_CACHE_ERROR. Again the result is the same, we fail to allocate
our space and return -ENOSPC. Instead we need to set
cache_block_group_error to -EIO in this case to make sure that if we do
not make our allocation we get the appropriate error returned back to
the caller.
CC: stable@vger.kernel.org # 4.14+
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/extent-tree.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -4411,8 +4411,11 @@ have_block_group:
ret = 0;
}
- if (unlikely(block_group->cached == BTRFS_CACHE_ERROR))
+ if (unlikely(block_group->cached == BTRFS_CACHE_ERROR)) {
+ if (!cache_block_group_error)
+ cache_block_group_error = -EIO;
goto loop;
+ }
bg_ret = NULL;
ret = do_allocation(block_group, ffe_ctl, &bg_ret);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 133/149] nvme-tcp: fix potential unbalanced freeze & unfreeze
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (131 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 132/149] btrfs: set cache_block_group_error if we find an error Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 134/149] nvme-rdma: " Greg Kroah-Hartman
` (28 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ming Lei, Yi Zhang, Sagi Grimberg,
Keith Busch
From: Ming Lei <ming.lei@redhat.com>
commit 99dc264014d5aed66ee37ddf136a38b5a2b1b529 upstream.
Move start_freeze into nvme_tcp_configure_io_queues(), and there is
at least two benefits:
1) fix unbalanced freeze and unfreeze, since re-connection work may
fail or be broken by removal
2) IO during error recovery can be failfast quickly because nvme fabrics
unquiesces queues after teardown.
One side-effect is that !mpath request may timeout during connecting
because of queue topo change, but that looks not one big deal:
1) same problem exists with current code base
2) compared with !mpath, mpath use case is dominant
Fixes: 2875b0aecabe ("nvme-tcp: fix controller reset hang during traffic")
Cc: stable@vger.kernel.org
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Tested-by: Yi Zhang <yi.zhang@redhat.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/nvme/host/tcp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -1890,6 +1890,7 @@ static int nvme_tcp_configure_io_queues(
goto out_cleanup_connect_q;
if (!new) {
+ nvme_start_freeze(ctrl);
nvme_start_queues(ctrl);
if (!nvme_wait_freeze_timeout(ctrl, NVME_IO_TIMEOUT)) {
/*
@@ -1898,6 +1899,7 @@ static int nvme_tcp_configure_io_queues(
* to be safe.
*/
ret = -ENODEV;
+ nvme_unfreeze(ctrl);
goto out_wait_freeze_timed_out;
}
blk_mq_update_nr_hw_queues(ctrl->tagset,
@@ -2002,7 +2004,6 @@ static void nvme_tcp_teardown_io_queues(
if (ctrl->queue_count <= 1)
return;
nvme_stop_admin_queue(ctrl);
- nvme_start_freeze(ctrl);
nvme_stop_queues(ctrl);
nvme_sync_io_queues(ctrl);
nvme_tcp_stop_io_queues(ctrl);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 134/149] nvme-rdma: fix potential unbalanced freeze & unfreeze
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (132 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 133/149] nvme-tcp: fix potential unbalanced freeze & unfreeze Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 135/149] netfilter: nf_tables: report use refcount overflow Greg Kroah-Hartman
` (27 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ming Lei, Yi Zhang, Sagi Grimberg,
Keith Busch
From: Ming Lei <ming.lei@redhat.com>
commit 29b434d1e49252b3ad56ad3197e47fafff5356a1 upstream.
Move start_freeze into nvme_rdma_configure_io_queues(), and there is
at least two benefits:
1) fix unbalanced freeze and unfreeze, since re-connection work may
fail or be broken by removal
2) IO during error recovery can be failfast quickly because nvme fabrics
unquiesces queues after teardown.
One side-effect is that !mpath request may timeout during connecting
because of queue topo change, but that looks not one big deal:
1) same problem exists with current code base
2) compared with !mpath, mpath use case is dominant
Fixes: 9f98772ba307 ("nvme-rdma: fix controller reset hang during traffic")
Cc: stable@vger.kernel.org
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Tested-by: Yi Zhang <yi.zhang@redhat.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/nvme/host/rdma.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -923,6 +923,7 @@ static int nvme_rdma_configure_io_queues
goto out_cleanup_tagset;
if (!new) {
+ nvme_start_freeze(&ctrl->ctrl);
nvme_start_queues(&ctrl->ctrl);
if (!nvme_wait_freeze_timeout(&ctrl->ctrl, NVME_IO_TIMEOUT)) {
/*
@@ -931,6 +932,7 @@ static int nvme_rdma_configure_io_queues
* to be safe.
*/
ret = -ENODEV;
+ nvme_unfreeze(&ctrl->ctrl);
goto out_wait_freeze_timed_out;
}
blk_mq_update_nr_hw_queues(ctrl->ctrl.tagset,
@@ -980,7 +982,6 @@ static void nvme_rdma_teardown_io_queues
bool remove)
{
if (ctrl->ctrl.queue_count > 1) {
- nvme_start_freeze(&ctrl->ctrl);
nvme_stop_queues(&ctrl->ctrl);
nvme_sync_io_queues(&ctrl->ctrl);
nvme_rdma_stop_io_queues(ctrl);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 135/149] netfilter: nf_tables: report use refcount overflow
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (133 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 134/149] nvme-rdma: " Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 136/149] scsi: core: Fix legacy /proc parsing buffer overflow Greg Kroah-Hartman
` (26 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Pablo Neira Ayuso
From: Pablo Neira Ayuso <pablo@netfilter.org>
commit 1689f25924ada8fe14a4a82c38925d04994c7142 upstream.
Overflow use refcount checks are not complete.
Add helper function to deal with object reference counter tracking.
Report -EMFILE in case UINT_MAX is reached.
nft_use_dec() splats in case that reference counter underflows,
which should not ever happen.
Add nft_use_inc_restore() and nft_use_dec_restore() which are used
to restore reference counter from error and abort paths.
Use u32 in nft_flowtable and nft_object since helper functions cannot
work on bitfields.
Remove the few early incomplete checks now that the helper functions
are in place and used to check for refcount overflow.
Fixes: 96518518cc41 ("netfilter: add nftables")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/net/netfilter/nf_tables.h | 31 ++++++-
net/netfilter/nf_tables_api.c | 163 +++++++++++++++++++++++---------------
net/netfilter/nft_flow_offload.c | 6 -
net/netfilter/nft_immediate.c | 8 -
net/netfilter/nft_objref.c | 8 +
5 files changed, 141 insertions(+), 75 deletions(-)
--- a/include/net/netfilter/nf_tables.h
+++ b/include/net/netfilter/nf_tables.h
@@ -1192,6 +1192,29 @@ int __nft_release_basechain(struct nft_c
unsigned int nft_do_chain(struct nft_pktinfo *pkt, void *priv);
+static inline bool nft_use_inc(u32 *use)
+{
+ if (*use == UINT_MAX)
+ return false;
+
+ (*use)++;
+
+ return true;
+}
+
+static inline void nft_use_dec(u32 *use)
+{
+ WARN_ON_ONCE((*use)-- == 0);
+}
+
+/* For error and abort path: restore use counter to previous state. */
+static inline void nft_use_inc_restore(u32 *use)
+{
+ WARN_ON_ONCE(!nft_use_inc(use));
+}
+
+#define nft_use_dec_restore nft_use_dec
+
/**
* struct nft_table - nf_tables table
*
@@ -1275,8 +1298,8 @@ struct nft_object {
struct list_head list;
struct rhlist_head rhlhead;
struct nft_object_hash_key key;
- u32 genmask:2,
- use:30;
+ u32 genmask:2;
+ u32 use;
u64 handle;
u16 udlen;
u8 *udata;
@@ -1378,8 +1401,8 @@ struct nft_flowtable {
char *name;
int hooknum;
int ops_len;
- u32 genmask:2,
- use:30;
+ u32 genmask:2;
+ u32 use;
u64 handle;
/* runtime data below here */
struct list_head hook_list ____cacheline_aligned;
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -255,8 +255,10 @@ int nf_tables_bind_chain(const struct nf
if (chain->bound)
return -EBUSY;
+ if (!nft_use_inc(&chain->use))
+ return -EMFILE;
+
chain->bound = true;
- chain->use++;
nft_chain_trans_bind(ctx, chain);
return 0;
@@ -439,7 +441,7 @@ static int nft_delchain(struct nft_ctx *
if (IS_ERR(trans))
return PTR_ERR(trans);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
nft_deactivate_next(ctx->net, ctx->chain);
return 0;
@@ -478,7 +480,7 @@ nf_tables_delrule_deactivate(struct nft_
/* You cannot delete the same rule twice */
if (nft_is_active_next(ctx->net, rule)) {
nft_deactivate_next(ctx->net, rule);
- ctx->chain->use--;
+ nft_use_dec(&ctx->chain->use);
return 0;
}
return -ENOENT;
@@ -645,7 +647,7 @@ static int nft_delset(const struct nft_c
nft_map_deactivate(ctx, set);
nft_deactivate_next(ctx->net, set);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
return err;
}
@@ -677,7 +679,7 @@ static int nft_delobj(struct nft_ctx *ct
return err;
nft_deactivate_next(ctx->net, obj);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
return err;
}
@@ -712,7 +714,7 @@ static int nft_delflowtable(struct nft_c
return err;
nft_deactivate_next(ctx->net, flowtable);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
return err;
}
@@ -2358,9 +2360,6 @@ static int nf_tables_addchain(struct nft
unsigned int data_size;
int err;
- if (table->use == UINT_MAX)
- return -EOVERFLOW;
-
if (nla[NFTA_CHAIN_HOOK]) {
struct nft_stats __percpu *stats = NULL;
struct nft_chain_hook hook;
@@ -2457,6 +2456,11 @@ static int nf_tables_addchain(struct nft
if (err < 0)
goto err_destroy_chain;
+ if (!nft_use_inc(&table->use)) {
+ err = -EMFILE;
+ goto err_use;
+ }
+
trans = nft_trans_chain_add(ctx, NFT_MSG_NEWCHAIN);
if (IS_ERR(trans)) {
err = PTR_ERR(trans);
@@ -2473,10 +2477,11 @@ static int nf_tables_addchain(struct nft
goto err_unregister_hook;
}
- table->use++;
-
return 0;
+
err_unregister_hook:
+ nft_use_dec_restore(&table->use);
+err_use:
nf_tables_unregister_hook(net, table, chain);
err_destroy_chain:
nf_tables_chain_destroy(ctx);
@@ -3663,9 +3668,6 @@ static int nf_tables_newrule(struct sk_b
return -EINVAL;
handle = nf_tables_alloc_handle(table);
- if (chain->use == UINT_MAX)
- return -EOVERFLOW;
-
if (nla[NFTA_RULE_POSITION]) {
pos_handle = be64_to_cpu(nla_get_be64(nla[NFTA_RULE_POSITION]));
old_rule = __nft_rule_lookup(chain, pos_handle);
@@ -3759,6 +3761,11 @@ static int nf_tables_newrule(struct sk_b
}
}
+ if (!nft_use_inc(&chain->use)) {
+ err = -EMFILE;
+ goto err_release_rule;
+ }
+
if (info->nlh->nlmsg_flags & NLM_F_REPLACE) {
err = nft_delrule(&ctx, old_rule);
if (err < 0)
@@ -3790,7 +3797,6 @@ static int nf_tables_newrule(struct sk_b
}
}
kvfree(expr_info);
- chain->use++;
if (flow)
nft_trans_flow_rule(trans) = flow;
@@ -3801,6 +3807,7 @@ static int nf_tables_newrule(struct sk_b
return 0;
err_destroy_flow_rule:
+ nft_use_dec_restore(&chain->use);
if (flow)
nft_flow_rule_destroy(flow);
err_release_rule:
@@ -4818,9 +4825,15 @@ static int nf_tables_newset(struct sk_bu
alloc_size = sizeof(*set) + size + udlen;
if (alloc_size < size || alloc_size > INT_MAX)
return -ENOMEM;
+
+ if (!nft_use_inc(&table->use))
+ return -EMFILE;
+
set = kvzalloc(alloc_size, GFP_KERNEL_ACCOUNT);
- if (!set)
- return -ENOMEM;
+ if (!set) {
+ err = -ENOMEM;
+ goto err_alloc;
+ }
name = nla_strdup(nla[NFTA_SET_NAME], GFP_KERNEL_ACCOUNT);
if (!name) {
@@ -4878,7 +4891,7 @@ static int nf_tables_newset(struct sk_bu
goto err_set_expr_alloc;
list_add_tail_rcu(&set->list, &table->sets);
- table->use++;
+
return 0;
err_set_expr_alloc:
@@ -4890,6 +4903,9 @@ err_set_init:
kfree(set->name);
err_set_name:
kvfree(set);
+err_alloc:
+ nft_use_dec_restore(&table->use);
+
return err;
}
@@ -5024,9 +5040,6 @@ int nf_tables_bind_set(const struct nft_
struct nft_set_binding *i;
struct nft_set_iter iter;
- if (set->use == UINT_MAX)
- return -EOVERFLOW;
-
if (!list_empty(&set->bindings) && nft_set_is_anonymous(set))
return -EBUSY;
@@ -5054,10 +5067,12 @@ int nf_tables_bind_set(const struct nft_
return iter.err;
}
bind:
+ if (!nft_use_inc(&set->use))
+ return -EMFILE;
+
binding->chain = ctx->chain;
list_add_tail_rcu(&binding->list, &set->bindings);
nft_set_trans_bind(ctx, set);
- set->use++;
return 0;
}
@@ -5131,7 +5146,7 @@ void nf_tables_activate_set(const struct
nft_clear(ctx->net, set);
}
- set->use++;
+ nft_use_inc_restore(&set->use);
}
EXPORT_SYMBOL_GPL(nf_tables_activate_set);
@@ -5147,7 +5162,7 @@ void nf_tables_deactivate_set(const stru
else
list_del_rcu(&binding->list);
- set->use--;
+ nft_use_dec(&set->use);
break;
case NFT_TRANS_PREPARE:
if (nft_set_is_anonymous(set)) {
@@ -5156,7 +5171,7 @@ void nf_tables_deactivate_set(const stru
nft_deactivate_next(ctx->net, set);
}
- set->use--;
+ nft_use_dec(&set->use);
return;
case NFT_TRANS_ABORT:
case NFT_TRANS_RELEASE:
@@ -5164,7 +5179,7 @@ void nf_tables_deactivate_set(const stru
set->flags & (NFT_SET_MAP | NFT_SET_OBJECT))
nft_map_deactivate(ctx, set);
- set->use--;
+ nft_use_dec(&set->use);
fallthrough;
default:
nf_tables_unbind_set(ctx, set, binding,
@@ -5937,7 +5952,7 @@ void nft_set_elem_destroy(const struct n
nft_set_elem_expr_destroy(&ctx, nft_set_ext_expr(ext));
if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
- (*nft_set_ext_obj(ext))->use--;
+ nft_use_dec(&(*nft_set_ext_obj(ext))->use);
kfree(elem);
}
EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
@@ -6439,8 +6454,16 @@ static int nft_add_set_elem(struct nft_c
set->objtype, genmask);
if (IS_ERR(obj)) {
err = PTR_ERR(obj);
+ obj = NULL;
goto err_parse_key_end;
}
+
+ if (!nft_use_inc(&obj->use)) {
+ err = -EMFILE;
+ obj = NULL;
+ goto err_parse_key_end;
+ }
+
err = nft_set_ext_add(&tmpl, NFT_SET_EXT_OBJREF);
if (err < 0)
goto err_parse_key_end;
@@ -6509,10 +6532,9 @@ static int nft_add_set_elem(struct nft_c
if (flags)
*nft_set_ext_flags(ext) = flags;
- if (obj) {
+ if (obj)
*nft_set_ext_obj(ext) = obj;
- obj->use++;
- }
+
if (ulen > 0) {
if (nft_set_ext_check(&tmpl, NFT_SET_EXT_USERDATA, ulen) < 0) {
err = -EINVAL;
@@ -6577,12 +6599,13 @@ err_element_clash:
kfree(trans);
err_elem_free:
nf_tables_set_elem_destroy(ctx, set, elem.priv);
- if (obj)
- obj->use--;
err_parse_data:
if (nla[NFTA_SET_ELEM_DATA] != NULL)
nft_data_release(&elem.data.val, desc.type);
err_parse_key_end:
+ if (obj)
+ nft_use_dec_restore(&obj->use);
+
nft_data_release(&elem.key_end.val, NFT_DATA_VALUE);
err_parse_key:
nft_data_release(&elem.key.val, NFT_DATA_VALUE);
@@ -6663,7 +6686,7 @@ void nft_data_hold(const struct nft_data
case NFT_JUMP:
case NFT_GOTO:
chain = data->verdict.chain;
- chain->use++;
+ nft_use_inc_restore(&chain->use);
break;
}
}
@@ -6678,7 +6701,7 @@ static void nft_setelem_data_activate(co
if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA))
nft_data_hold(nft_set_ext_data(ext), set->dtype);
if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
- (*nft_set_ext_obj(ext))->use++;
+ nft_use_inc_restore(&(*nft_set_ext_obj(ext))->use);
}
static void nft_setelem_data_deactivate(const struct net *net,
@@ -6690,7 +6713,7 @@ static void nft_setelem_data_deactivate(
if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA))
nft_data_release(nft_set_ext_data(ext), set->dtype);
if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
- (*nft_set_ext_obj(ext))->use--;
+ nft_use_dec(&(*nft_set_ext_obj(ext))->use);
}
static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,
@@ -7229,9 +7252,14 @@ static int nf_tables_newobj(struct sk_bu
nft_ctx_init(&ctx, net, skb, info->nlh, family, table, NULL, nla);
+ if (!nft_use_inc(&table->use))
+ return -EMFILE;
+
type = nft_obj_type_get(net, objtype);
- if (IS_ERR(type))
- return PTR_ERR(type);
+ if (IS_ERR(type)) {
+ err = PTR_ERR(type);
+ goto err_type;
+ }
obj = nft_obj_init(&ctx, type, nla[NFTA_OBJ_DATA]);
if (IS_ERR(obj)) {
@@ -7265,7 +7293,7 @@ static int nf_tables_newobj(struct sk_bu
goto err_obj_ht;
list_add_tail_rcu(&obj->list, &table->objects);
- table->use++;
+
return 0;
err_obj_ht:
/* queued in transaction log */
@@ -7281,6 +7309,9 @@ err_strdup:
kfree(obj);
err_init:
module_put(type->owner);
+err_type:
+ nft_use_dec_restore(&table->use);
+
return err;
}
@@ -7671,7 +7702,7 @@ void nf_tables_deactivate_flowtable(cons
case NFT_TRANS_PREPARE:
case NFT_TRANS_ABORT:
case NFT_TRANS_RELEASE:
- flowtable->use--;
+ nft_use_dec(&flowtable->use);
fallthrough;
default:
return;
@@ -8019,9 +8050,14 @@ static int nf_tables_newflowtable(struct
nft_ctx_init(&ctx, net, skb, info->nlh, family, table, NULL, nla);
+ if (!nft_use_inc(&table->use))
+ return -EMFILE;
+
flowtable = kzalloc(sizeof(*flowtable), GFP_KERNEL_ACCOUNT);
- if (!flowtable)
- return -ENOMEM;
+ if (!flowtable) {
+ err = -ENOMEM;
+ goto flowtable_alloc;
+ }
flowtable->table = table;
flowtable->handle = nf_tables_alloc_handle(table);
@@ -8076,7 +8112,6 @@ static int nf_tables_newflowtable(struct
goto err5;
list_add_tail_rcu(&flowtable->list, &table->flowtables);
- table->use++;
return 0;
err5:
@@ -8093,6 +8128,9 @@ err2:
kfree(flowtable->name);
err1:
kfree(flowtable);
+flowtable_alloc:
+ nft_use_dec_restore(&table->use);
+
return err;
}
@@ -9378,7 +9416,7 @@ static int nf_tables_commit(struct net *
*/
if (nft_set_is_anonymous(nft_trans_set(trans)) &&
!list_empty(&nft_trans_set(trans)->bindings))
- trans->ctx.table->use--;
+ nft_use_dec(&trans->ctx.table->use);
}
nf_tables_set_notify(&trans->ctx, nft_trans_set(trans),
NFT_MSG_NEWSET, GFP_KERNEL);
@@ -9597,7 +9635,7 @@ static int __nf_tables_abort(struct net
nft_trans_destroy(trans);
break;
}
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
nft_chain_del(trans->ctx.chain);
nf_tables_unregister_hook(trans->ctx.net,
trans->ctx.table,
@@ -9605,7 +9643,7 @@ static int __nf_tables_abort(struct net
}
break;
case NFT_MSG_DELCHAIN:
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, trans->ctx.chain);
nft_trans_destroy(trans);
break;
@@ -9614,7 +9652,7 @@ static int __nf_tables_abort(struct net
nft_trans_destroy(trans);
break;
}
- trans->ctx.chain->use--;
+ nft_use_dec_restore(&trans->ctx.chain->use);
list_del_rcu(&nft_trans_rule(trans)->list);
nft_rule_expr_deactivate(&trans->ctx,
nft_trans_rule(trans),
@@ -9623,7 +9661,7 @@ static int __nf_tables_abort(struct net
nft_flow_rule_destroy(nft_trans_flow_rule(trans));
break;
case NFT_MSG_DELRULE:
- trans->ctx.chain->use++;
+ nft_use_inc_restore(&trans->ctx.chain->use);
nft_clear(trans->ctx.net, nft_trans_rule(trans));
nft_rule_expr_activate(&trans->ctx, nft_trans_rule(trans));
if (trans->ctx.chain->flags & NFT_CHAIN_HW_OFFLOAD)
@@ -9636,7 +9674,7 @@ static int __nf_tables_abort(struct net
nft_trans_destroy(trans);
break;
}
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
if (nft_trans_set_bound(trans)) {
nft_trans_destroy(trans);
break;
@@ -9644,7 +9682,7 @@ static int __nf_tables_abort(struct net
list_del_rcu(&nft_trans_set(trans)->list);
break;
case NFT_MSG_DELSET:
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, nft_trans_set(trans));
if (nft_trans_set(trans)->flags & (NFT_SET_MAP | NFT_SET_OBJECT))
nft_map_activate(&trans->ctx, nft_trans_set(trans));
@@ -9687,12 +9725,12 @@ static int __nf_tables_abort(struct net
nft_obj_destroy(&trans->ctx, nft_trans_obj_newobj(trans));
nft_trans_destroy(trans);
} else {
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
nft_obj_del(nft_trans_obj(trans));
}
break;
case NFT_MSG_DELOBJ:
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, nft_trans_obj(trans));
nft_trans_destroy(trans);
break;
@@ -9701,7 +9739,7 @@ static int __nf_tables_abort(struct net
nft_unregister_flowtable_net_hooks(net,
&nft_trans_flowtable_hooks(trans));
} else {
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
list_del_rcu(&nft_trans_flowtable(trans)->list);
nft_unregister_flowtable_net_hooks(net,
&nft_trans_flowtable(trans)->hook_list);
@@ -9712,7 +9750,7 @@ static int __nf_tables_abort(struct net
list_splice(&nft_trans_flowtable_hooks(trans),
&nft_trans_flowtable(trans)->hook_list);
} else {
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, nft_trans_flowtable(trans));
}
nft_trans_destroy(trans);
@@ -10165,8 +10203,9 @@ static int nft_verdict_init(const struct
if (desc->flags & NFT_DATA_DESC_SETELEM &&
chain->flags & NFT_CHAIN_BINDING)
return -EINVAL;
+ if (!nft_use_inc(&chain->use))
+ return -EMFILE;
- chain->use++;
data->verdict.chain = chain;
break;
}
@@ -10184,7 +10223,7 @@ static void nft_verdict_uninit(const str
case NFT_JUMP:
case NFT_GOTO:
chain = data->verdict.chain;
- chain->use--;
+ nft_use_dec(&chain->use);
break;
}
}
@@ -10353,11 +10392,11 @@ int __nft_release_basechain(struct nft_c
nf_tables_unregister_hook(ctx->net, ctx->chain->table, ctx->chain);
list_for_each_entry_safe(rule, nr, &ctx->chain->rules, list) {
list_del(&rule->list);
- ctx->chain->use--;
+ nft_use_dec(&ctx->chain->use);
nf_tables_rule_release(ctx, rule);
}
nft_chain_del(ctx->chain);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
nf_tables_chain_destroy(ctx);
return 0;
@@ -10410,18 +10449,18 @@ static void __nft_release_table(struct n
ctx.chain = chain;
list_for_each_entry_safe(rule, nr, &chain->rules, list) {
list_del(&rule->list);
- chain->use--;
+ nft_use_dec(&chain->use);
nf_tables_rule_release(&ctx, rule);
}
}
list_for_each_entry_safe(flowtable, nf, &table->flowtables, list) {
list_del(&flowtable->list);
- table->use--;
+ nft_use_dec(&table->use);
nf_tables_flowtable_destroy(flowtable);
}
list_for_each_entry_safe(set, ns, &table->sets, list) {
list_del(&set->list);
- table->use--;
+ nft_use_dec(&table->use);
if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT))
nft_map_deactivate(&ctx, set);
@@ -10429,13 +10468,13 @@ static void __nft_release_table(struct n
}
list_for_each_entry_safe(obj, ne, &table->objects, list) {
nft_obj_del(obj);
- table->use--;
+ nft_use_dec(&table->use);
nft_obj_destroy(&ctx, obj);
}
list_for_each_entry_safe(chain, nc, &table->chains, list) {
ctx.chain = chain;
nft_chain_del(chain);
- table->use--;
+ nft_use_dec(&table->use);
nf_tables_chain_destroy(&ctx);
}
nf_tables_table_destroy(&ctx);
--- a/net/netfilter/nft_flow_offload.c
+++ b/net/netfilter/nft_flow_offload.c
@@ -404,8 +404,10 @@ static int nft_flow_offload_init(const s
if (IS_ERR(flowtable))
return PTR_ERR(flowtable);
+ if (!nft_use_inc(&flowtable->use))
+ return -EMFILE;
+
priv->flowtable = flowtable;
- flowtable->use++;
return nf_ct_netns_get(ctx->net, ctx->family);
}
@@ -424,7 +426,7 @@ static void nft_flow_offload_activate(co
{
struct nft_flow_offload *priv = nft_expr_priv(expr);
- priv->flowtable->use++;
+ nft_use_inc_restore(&priv->flowtable->use);
}
static void nft_flow_offload_destroy(const struct nft_ctx *ctx,
--- a/net/netfilter/nft_immediate.c
+++ b/net/netfilter/nft_immediate.c
@@ -168,7 +168,7 @@ static void nft_immediate_deactivate(con
nft_immediate_chain_deactivate(ctx, chain, phase);
nft_chain_del(chain);
chain->bound = false;
- chain->table->use--;
+ nft_use_dec(&chain->table->use);
break;
}
break;
@@ -207,7 +207,7 @@ static void nft_immediate_destroy(const
* let the transaction records release this chain and its rules.
*/
if (chain->bound) {
- chain->use--;
+ nft_use_dec(&chain->use);
break;
}
@@ -215,9 +215,9 @@ static void nft_immediate_destroy(const
chain_ctx = *ctx;
chain_ctx.chain = chain;
- chain->use--;
+ nft_use_dec(&chain->use);
list_for_each_entry_safe(rule, n, &chain->rules, list) {
- chain->use--;
+ nft_use_dec(&chain->use);
list_del(&rule->list);
nf_tables_rule_destroy(&chain_ctx, rule);
}
--- a/net/netfilter/nft_objref.c
+++ b/net/netfilter/nft_objref.c
@@ -41,8 +41,10 @@ static int nft_objref_init(const struct
if (IS_ERR(obj))
return -ENOENT;
+ if (!nft_use_inc(&obj->use))
+ return -EMFILE;
+
nft_objref_priv(expr) = obj;
- obj->use++;
return 0;
}
@@ -71,7 +73,7 @@ static void nft_objref_deactivate(const
if (phase == NFT_TRANS_COMMIT)
return;
- obj->use--;
+ nft_use_dec(&obj->use);
}
static void nft_objref_activate(const struct nft_ctx *ctx,
@@ -79,7 +81,7 @@ static void nft_objref_activate(const st
{
struct nft_object *obj = nft_objref_priv(expr);
- obj->use++;
+ nft_use_inc_restore(&obj->use);
}
static struct nft_expr_type nft_objref_type;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 136/149] scsi: core: Fix legacy /proc parsing buffer overflow
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (134 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 135/149] netfilter: nf_tables: report use refcount overflow Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 137/149] scsi: storvsc: Fix handling of virtual Fibre Channel timeouts Greg Kroah-Hartman
` (25 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Linus Torvalds, Martin K Petersen,
James Bottomley, Willy Tarreau, stable, Tony Battersby
From: Tony Battersby <tonyb@cybernetics.com>
commit 9426d3cef5000824e5f24f80ed5f42fb935f2488 upstream.
(lightly modified commit message mostly by Linus Torvalds)
The parsing code for /proc/scsi/scsi is disgusting and broken. We should
have just used 'sscanf()' or something simple like that, but the logic may
actually predate our kernel sscanf library routine for all I know. It
certainly predates both git and BK histories.
And we can't change it to be something sane like that now, because the
string matching at the start is done case-insensitively, and the separator
parsing between numbers isn't done at all, so *any* separator will work,
including a possible terminating NUL character.
This interface is root-only, and entirely for legacy use, so there is
absolutely no point in trying to tighten up the parsing. Because any
separator has traditionally worked, it's entirely possible that people have
used random characters rather than the suggested space.
So don't bother to try to pretty it up, and let's just make a minimal patch
that can be back-ported and we can forget about this whole sorry thing for
another two decades.
Just make it at least not read past the end of the supplied data.
Link: https://lore.kernel.org/linux-scsi/b570f5fe-cb7c-863a-6ed9-f6774c219b88@cybernetics.com/
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin K Petersen <martin.petersen@oracle.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Willy Tarreau <w@1wt.eu>
Cc: stable@kernel.org
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Signed-off-by: Martin K Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/scsi_proc.c | 30 +++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)
--- a/drivers/scsi/scsi_proc.c
+++ b/drivers/scsi/scsi_proc.c
@@ -311,7 +311,7 @@ static ssize_t proc_scsi_write(struct fi
size_t length, loff_t *ppos)
{
int host, channel, id, lun;
- char *buffer, *p;
+ char *buffer, *end, *p;
int err;
if (!buf || length > PAGE_SIZE)
@@ -326,10 +326,14 @@ static ssize_t proc_scsi_write(struct fi
goto out;
err = -EINVAL;
- if (length < PAGE_SIZE)
- buffer[length] = '\0';
- else if (buffer[PAGE_SIZE-1])
- goto out;
+ if (length < PAGE_SIZE) {
+ end = buffer + length;
+ *end = '\0';
+ } else {
+ end = buffer + PAGE_SIZE - 1;
+ if (*end)
+ goto out;
+ }
/*
* Usage: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi
@@ -338,10 +342,10 @@ static ssize_t proc_scsi_write(struct fi
if (!strncmp("scsi add-single-device", buffer, 22)) {
p = buffer + 23;
- host = simple_strtoul(p, &p, 0);
- channel = simple_strtoul(p + 1, &p, 0);
- id = simple_strtoul(p + 1, &p, 0);
- lun = simple_strtoul(p + 1, &p, 0);
+ host = (p < end) ? simple_strtoul(p, &p, 0) : 0;
+ channel = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
+ id = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
+ lun = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
err = scsi_add_single_device(host, channel, id, lun);
@@ -352,10 +356,10 @@ static ssize_t proc_scsi_write(struct fi
} else if (!strncmp("scsi remove-single-device", buffer, 25)) {
p = buffer + 26;
- host = simple_strtoul(p, &p, 0);
- channel = simple_strtoul(p + 1, &p, 0);
- id = simple_strtoul(p + 1, &p, 0);
- lun = simple_strtoul(p + 1, &p, 0);
+ host = (p < end) ? simple_strtoul(p, &p, 0) : 0;
+ channel = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
+ id = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
+ lun = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
err = scsi_remove_single_device(host, channel, id, lun);
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 137/149] scsi: storvsc: Fix handling of virtual Fibre Channel timeouts
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (135 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 136/149] scsi: core: Fix legacy /proc parsing buffer overflow Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 138/149] scsi: ufs: renesas: Fix private allocation Greg Kroah-Hartman
` (24 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Michael Kelley, Martin K. Petersen
From: Michael Kelley <mikelley@microsoft.com>
commit 175544ad48cbf56affeef2a679c6a4d4fb1e2881 upstream.
Hyper-V provides the ability to connect Fibre Channel LUNs to the host
system and present them in a guest VM as a SCSI device. I/O to the vFC
device is handled by the storvsc driver. The storvsc driver includes a
partial integration with the FC transport implemented in the generic
portion of the Linux SCSI subsystem so that FC attributes can be displayed
in /sys. However, the partial integration means that some aspects of vFC
don't work properly. Unfortunately, a full and correct integration isn't
practical because of limitations in what Hyper-V provides to the guest.
In particular, in the context of Hyper-V storvsc, the FC transport timeout
function fc_eh_timed_out() causes a kernel panic because it can't find the
rport and dereferences a NULL pointer. The original patch that added the
call from storvsc_eh_timed_out() to fc_eh_timed_out() is faulty in this
regard.
In many cases a timeout is due to a transient condition, so the situation
can be improved by just continuing to wait like with other I/O requests
issued by storvsc, and avoiding the guaranteed panic. For a permanent
failure, continuing to wait may result in a hung thread instead of a panic,
which again may be better.
So fix the panic by removing the storvsc call to fc_eh_timed_out(). This
allows storvsc to keep waiting for a response. The change has been tested
by users who experienced a panic in fc_eh_timed_out() due to transient
timeouts, and it solves their problem.
In the future we may want to deprecate the vFC functionality in storvsc
since it can't be fully fixed. But it has current users for whom it is
working well enough, so it should probably stay for a while longer.
Fixes: 3930d7309807 ("scsi: storvsc: use default I/O timeout handler for FC devices")
Cc: stable@vger.kernel.org
Signed-off-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/1690606764-79669-1-git-send-email-mikelley@microsoft.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/storvsc_drv.c | 4 ----
1 file changed, 4 deletions(-)
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1670,10 +1670,6 @@ static int storvsc_host_reset_handler(st
*/
static enum blk_eh_timer_return storvsc_eh_timed_out(struct scsi_cmnd *scmnd)
{
-#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
- if (scmnd->device->host->transportt == fc_transport_template)
- return fc_eh_timed_out(scmnd);
-#endif
return BLK_EH_RESET_TIMER;
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 138/149] scsi: ufs: renesas: Fix private allocation
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (136 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 137/149] scsi: storvsc: Fix handling of virtual Fibre Channel timeouts Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 139/149] scsi: 53c700: Check that command slot is not NULL Greg Kroah-Hartman
` (23 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yoshihiro Shimoda, Bart Van Assche,
Martin K. Petersen
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
commit b6d128f89a85771433a004e8656090ccbe1fb969 upstream.
Should use devm_kzalloc() for struct ufs_renesas_priv because the
.initialized should be false as default.
Fixes: d69520288efd ("scsi: ufs: ufs-renesas: Add support for Renesas R-Car UFS controller")
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Link: https://lore.kernel.org/r/20230803081812.1446282-1-yoshihiro.shimoda.uh@renesas.com
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/ufs/host/ufs-renesas.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/ufs/host/ufs-renesas.c b/drivers/ufs/host/ufs-renesas.c
index f8a5e79ed3b4..ab0652d8705a 100644
--- a/drivers/ufs/host/ufs-renesas.c
+++ b/drivers/ufs/host/ufs-renesas.c
@@ -359,7 +359,7 @@ static int ufs_renesas_init(struct ufs_hba *hba)
{
struct ufs_renesas_priv *priv;
- priv = devm_kmalloc(hba->dev, sizeof(*priv), GFP_KERNEL);
+ priv = devm_kzalloc(hba->dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
ufshcd_set_variant(hba, priv);
--
2.41.0
^ permalink raw reply related [flat|nested] 167+ messages in thread
* [PATCH 6.1 139/149] scsi: 53c700: Check that command slot is not NULL
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (137 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 138/149] scsi: ufs: renesas: Fix private allocation Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 140/149] scsi: snic: Fix possible memory leak if device_add() fails Greg Kroah-Hartman
` (22 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Vladimir Telezhnikov,
Alexandra Diupina, Martin K. Petersen
From: Alexandra Diupina <adiupina@astralinux.ru>
commit 8366d1f1249a0d0bba41d0bd1298d63e5d34c7f7 upstream.
Add a check for the command slot value to avoid dereferencing a NULL
pointer.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Co-developed-by: Vladimir Telezhnikov <vtelezhnikov@astralinux.ru>
Signed-off-by: Vladimir Telezhnikov <vtelezhnikov@astralinux.ru>
Signed-off-by: Alexandra Diupina <adiupina@astralinux.ru>
Link: https://lore.kernel.org/r/20230728123521.18293-1-adiupina@astralinux.ru
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/53c700.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -1598,7 +1598,7 @@ NCR_700_intr(int irq, void *dev_id)
printk("scsi%d (%d:%d) PHASE MISMATCH IN SEND MESSAGE %d remain, return %p[%04x], phase %s\n", host->host_no, pun, lun, count, (void *)temp, temp - hostdata->pScript, sbcl_to_string(NCR_700_readb(host, SBCL_REG)));
#endif
resume_offset = hostdata->pScript + Ent_SendMessagePhaseMismatch;
- } else if(dsp >= to32bit(&slot->pSG[0].ins) &&
+ } else if (slot && dsp >= to32bit(&slot->pSG[0].ins) &&
dsp <= to32bit(&slot->pSG[NCR_700_SG_SEGMENTS].ins)) {
int data_transfer = NCR_700_readl(host, DBC_REG) & 0xffffff;
int SGcount = (dsp - to32bit(&slot->pSG[0].ins))/sizeof(struct NCR_700_SG_List);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 140/149] scsi: snic: Fix possible memory leak if device_add() fails
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (138 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 139/149] scsi: 53c700: Check that command slot is not NULL Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 141/149] scsi: core: " Greg Kroah-Hartman
` (21 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zhu Wang, Narsimhulu Musini,
Martin K. Petersen
From: Zhu Wang <wangzhu9@huawei.com>
commit 41320b18a0e0dfb236dba4edb9be12dba1878156 upstream.
If device_add() returns error, the name allocated by dev_set_name() needs
be freed. As the comment of device_add() says, put_device() should be used
to give up the reference in the error path. So fix this by calling
put_device(), then the name can be freed in kobject_cleanp().
Fixes: c8806b6c9e82 ("snic: driver for Cisco SCSI HBA")
Signed-off-by: Zhu Wang <wangzhu9@huawei.com>
Acked-by: Narsimhulu Musini <nmusini@cisco.com>
Link: https://lore.kernel.org/r/20230801111421.63651-1-wangzhu9@huawei.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/snic/snic_disc.c | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/scsi/snic/snic_disc.c
+++ b/drivers/scsi/snic/snic_disc.c
@@ -303,6 +303,7 @@ snic_tgt_create(struct snic *snic, struc
"Snic Tgt: device_add, with err = %d\n",
ret);
+ put_device(&tgt->dev);
put_device(&snic->shost->shost_gendev);
spin_lock_irqsave(snic->shost->host_lock, flags);
list_del(&tgt->list);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 141/149] scsi: core: Fix possible memory leak if device_add() fails
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (139 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 140/149] scsi: snic: Fix possible memory leak if device_add() fails Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 142/149] scsi: fnic: Replace return codes in fnic_clean_pending_aborts() Greg Kroah-Hartman
` (20 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zhu Wang, Bart Van Assche,
Martin K. Petersen
From: Zhu Wang <wangzhu9@huawei.com>
commit 04b5b5cb0136ce970333a9c6cec7e46adba1ea3a upstream.
If device_add() returns error, the name allocated by dev_set_name() needs
be freed. As the comment of device_add() says, put_device() should be used
to decrease the reference count in the error path. So fix this by calling
put_device(), then the name can be freed in kobject_cleanp().
Fixes: ee959b00c335 ("SCSI: convert struct class_device to struct device")
Signed-off-by: Zhu Wang <wangzhu9@huawei.com>
Link: https://lore.kernel.org/r/20230803020230.226903-1-wangzhu9@huawei.com
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/raid_class.c | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/scsi/raid_class.c
+++ b/drivers/scsi/raid_class.c
@@ -248,6 +248,7 @@ int raid_component_add(struct raid_templ
return 0;
err_out:
+ put_device(&rc->dev);
list_del(&rc->node);
rd->component_count--;
put_device(component_dev);
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 142/149] scsi: fnic: Replace return codes in fnic_clean_pending_aborts()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (140 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 141/149] scsi: core: " Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 143/149] scsi: qedi: Fix firmware halt over suspend and resume Greg Kroah-Hartman
` (19 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sesidhar Baddela, Karan Tilak Kumar,
Martin K. Petersen
From: Karan Tilak Kumar <kartilak@cisco.com>
commit 5a43b07a87835660f91d88a4db11abfea8c523b7 upstream.
fnic_clean_pending_aborts() was returning a non-zero value irrespective of
failure or success. This caused the caller of this function to assume that
the device reset had failed, even though it would succeed in most cases. As
a consequence, a successful device reset would escalate to host reset.
Reviewed-by: Sesidhar Baddela <sebaddel@cisco.com>
Tested-by: Karan Tilak Kumar <kartilak@cisco.com>
Signed-off-by: Karan Tilak Kumar <kartilak@cisco.com>
Link: https://lore.kernel.org/r/20230727193919.2519-1-kartilak@cisco.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/fnic/fnic.h | 2 +-
drivers/scsi/fnic/fnic_scsi.c | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)
--- a/drivers/scsi/fnic/fnic.h
+++ b/drivers/scsi/fnic/fnic.h
@@ -27,7 +27,7 @@
#define DRV_NAME "fnic"
#define DRV_DESCRIPTION "Cisco FCoE HBA Driver"
-#define DRV_VERSION "1.6.0.54"
+#define DRV_VERSION "1.6.0.55"
#define PFX DRV_NAME ": "
#define DFX DRV_NAME "%d: "
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -2139,7 +2139,7 @@ static int fnic_clean_pending_aborts(str
bool new_sc)
{
- int ret = SUCCESS;
+ int ret = 0;
struct fnic_pending_aborts_iter_data iter_data = {
.fnic = fnic,
.lun_dev = lr_sc->device,
@@ -2159,9 +2159,11 @@ static int fnic_clean_pending_aborts(str
/* walk again to check, if IOs are still pending in fw */
if (fnic_is_abts_pending(fnic, lr_sc))
- ret = FAILED;
+ ret = 1;
clean_pending_aborts_end:
+ FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
+ "%s: exit status: %d\n", __func__, ret);
return ret;
}
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 143/149] scsi: qedi: Fix firmware halt over suspend and resume
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (141 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 142/149] scsi: fnic: Replace return codes in fnic_clean_pending_aborts() Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 144/149] scsi: qedf: " Greg Kroah-Hartman
` (18 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Nilesh Javali, Martin K. Petersen
From: Nilesh Javali <njavali@marvell.com>
commit 1516ee035df32115197cd93ae3619dba7b020986 upstream.
While performing certain power-off sequences, PCI drivers are called to
suspend and resume their underlying devices through PCI PM (power
management) interface. However the hardware does not support PCI PM
suspend/resume operations so system wide suspend/resume leads to bad MFW
(management firmware) state which causes various follow-up errors in driver
when communicating with the device/firmware.
To fix this driver implements PCI PM suspend handler to indicate
unsupported operation to the PCI subsystem explicitly, thus avoiding system
to go into suspended/standby mode.
Fixes: ace7f46ba5fd ("scsi: qedi: Add QLogic FastLinQ offload iSCSI driver framework.")
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Link: https://lore.kernel.org/r/20230807093725.46829-2-njavali@marvell.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/qedi/qedi_main.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
--- a/drivers/scsi/qedi/qedi_main.c
+++ b/drivers/scsi/qedi/qedi_main.c
@@ -69,6 +69,7 @@ static struct nvm_iscsi_block *qedi_get_
static void qedi_recovery_handler(struct work_struct *work);
static void qedi_schedule_hw_err_handler(void *dev,
enum qed_hw_err_type err_type);
+static int qedi_suspend(struct pci_dev *pdev, pm_message_t state);
static int qedi_iscsi_event_cb(void *context, u8 fw_event_code, void *fw_handle)
{
@@ -2510,6 +2511,22 @@ static void qedi_shutdown(struct pci_dev
__qedi_remove(pdev, QEDI_MODE_SHUTDOWN);
}
+static int qedi_suspend(struct pci_dev *pdev, pm_message_t state)
+{
+ struct qedi_ctx *qedi;
+
+ if (!pdev) {
+ QEDI_ERR(NULL, "pdev is NULL.\n");
+ return -ENODEV;
+ }
+
+ qedi = pci_get_drvdata(pdev);
+
+ QEDI_ERR(&qedi->dbg_ctx, "%s: Device does not support suspend operation\n", __func__);
+
+ return -EPERM;
+}
+
static int __qedi_probe(struct pci_dev *pdev, int mode)
{
struct qedi_ctx *qedi;
@@ -2868,6 +2885,7 @@ static struct pci_driver qedi_pci_driver
.remove = qedi_remove,
.shutdown = qedi_shutdown,
.err_handler = &qedi_err_handler,
+ .suspend = qedi_suspend,
};
static int __init qedi_init(void)
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 144/149] scsi: qedf: Fix firmware halt over suspend and resume
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (142 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 143/149] scsi: qedi: Fix firmware halt over suspend and resume Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 145/149] platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551 Greg Kroah-Hartman
` (17 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Saurav Kashyap, Nilesh Javali,
Martin K. Petersen
From: Nilesh Javali <njavali@marvell.com>
commit ef222f551e7c4e2008fc442ffc9edcd1a7fd8f63 upstream.
While performing certain power-off sequences, PCI drivers are called to
suspend and resume their underlying devices through PCI PM (power
management) interface. However the hardware does not support PCI PM
suspend/resume operations so system wide suspend/resume leads to bad MFW
(management firmware) state which causes various follow-up errors in driver
when communicating with the device/firmware.
To fix this driver implements PCI PM suspend handler to indicate
unsupported operation to the PCI subsystem explicitly, thus avoiding system
to go into suspended/standby mode.
Fixes: 61d8658b4a43 ("scsi: qedf: Add QLogic FastLinQ offload FCoE driver framework.")
Signed-off-by: Saurav Kashyap <skashyap@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Link: https://lore.kernel.org/r/20230807093725.46829-1-njavali@marvell.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/qedf/qedf_main.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
--- a/drivers/scsi/qedf/qedf_main.c
+++ b/drivers/scsi/qedf/qedf_main.c
@@ -31,6 +31,7 @@ static void qedf_remove(struct pci_dev *
static void qedf_shutdown(struct pci_dev *pdev);
static void qedf_schedule_recovery_handler(void *dev);
static void qedf_recovery_handler(struct work_struct *work);
+static int qedf_suspend(struct pci_dev *pdev, pm_message_t state);
/*
* Driver module parameters.
@@ -3276,6 +3277,7 @@ static struct pci_driver qedf_pci_driver
.probe = qedf_probe,
.remove = qedf_remove,
.shutdown = qedf_shutdown,
+ .suspend = qedf_suspend,
};
static int __qedf_probe(struct pci_dev *pdev, int mode)
@@ -4005,6 +4007,22 @@ static void qedf_shutdown(struct pci_dev
__qedf_remove(pdev, QEDF_MODE_NORMAL);
}
+static int qedf_suspend(struct pci_dev *pdev, pm_message_t state)
+{
+ struct qedf_ctx *qedf;
+
+ if (!pdev) {
+ QEDF_ERR(NULL, "pdev is NULL.\n");
+ return -ENODEV;
+ }
+
+ qedf = pci_get_drvdata(pdev);
+
+ QEDF_ERR(&qedf->dbg_ctx, "%s: Device does not support suspend operation\n", __func__);
+
+ return -EPERM;
+}
+
/*
* Recovery handler code
*/
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 145/149] platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (143 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 144/149] scsi: qedf: " Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 146/149] ACPI: scan: Create platform device for CS35L56 Greg Kroah-Hartman
` (16 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, David Xu, Hans de Goede
From: David Xu <xuwd1@hotmail.com>
commit 676b7c5ecab36274442887ceadd6dee8248a244f upstream.
The current code assumes that the CSC3551(multiple cs35l41) always have
its interrupt pin connected to GPIO thus the IRQ can be acquired with
acpi_dev_gpio_irq_get. However on some newer laptop models this is no
longer the case as they have the CSC3551's interrupt pin connected to
APIC. This causes smi_i2c_probe to fail on these machines.
To support these machines, a new macro IRQ_RESOURCE_AUTO was introduced
for cs35l41 smi_node, and smi_get_irq function was modified so it tries
to get GPIO irq resource first and if failed, tries to get
APIC irq resource for cs35l41.
This patch affects only the cs35l41's probing and brings no negative
influence on machines that indeed have the cs35l41's interrupt pin
connected to GPIO.
Signed-off-by: David Xu <xuwd1@hotmail.com>
Link: https://lore.kernel.org/r/SY4P282MB18350CD8288687B87FFD2243E037A@SY4P282MB1835.AUSP282.PROD.OUTLOOK.COM
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/platform/x86/serial-multi-instantiate.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
--- a/drivers/platform/x86/serial-multi-instantiate.c
+++ b/drivers/platform/x86/serial-multi-instantiate.c
@@ -21,6 +21,7 @@
#define IRQ_RESOURCE_NONE 0
#define IRQ_RESOURCE_GPIO 1
#define IRQ_RESOURCE_APIC 2
+#define IRQ_RESOURCE_AUTO 3
enum smi_bus_type {
SMI_I2C,
@@ -52,6 +53,18 @@ static int smi_get_irq(struct platform_d
int ret;
switch (inst->flags & IRQ_RESOURCE_TYPE) {
+ case IRQ_RESOURCE_AUTO:
+ ret = acpi_dev_gpio_irq_get(adev, inst->irq_idx);
+ if (ret > 0) {
+ dev_dbg(&pdev->dev, "Using gpio irq\n");
+ break;
+ }
+ ret = platform_get_irq(pdev, inst->irq_idx);
+ if (ret > 0) {
+ dev_dbg(&pdev->dev, "Using platform irq\n");
+ break;
+ }
+ break;
case IRQ_RESOURCE_GPIO:
ret = acpi_dev_gpio_irq_get(adev, inst->irq_idx);
break;
@@ -308,10 +321,10 @@ static const struct smi_node int3515_dat
static const struct smi_node cs35l41_hda = {
.instances = {
- { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 },
- { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 },
- { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 },
- { "cs35l41-hda", IRQ_RESOURCE_GPIO, 0 },
+ { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 },
+ { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 },
+ { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 },
+ { "cs35l41-hda", IRQ_RESOURCE_AUTO, 0 },
{}
},
.bus_type = SMI_AUTO_DETECT,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 146/149] ACPI: scan: Create platform device for CS35L56
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (144 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 145/149] platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551 Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 147/149] alpha: remove __init annotation from exported page_is_ram() Greg Kroah-Hartman
` (15 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Simon Trimmer, Richard Fitzgerald,
Rafael J. Wysocki, Hans de Goede
From: Simon Trimmer <simont@opensource.cirrus.com>
commit 1cd0302be5645420f73090aee26fa787287e1096 upstream.
The ACPI device CSC3556 is a Cirrus Logic CS35L56 mono amplifier which
is used in multiples, and can be connected either to I2C or SPI.
There will be multiple instances under the same Device() node. Add it
to ignore_serial_bus_ids and handle it in the serial-multi-instantiate
driver.
There can be a 5th I2cSerialBusV2, but this is an alias address and doesn't
represent a real device. Ignore this by having a dummy 5th entry in the
serial-multi-instantiate instance list with the name of a non-existent
driver, on the same pattern as done for bsg2150.
Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://lore.kernel.org/r/20230728111345.7224-1-rf@opensource.cirrus.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/acpi/scan.c | 1 +
drivers/platform/x86/serial-multi-instantiate.c | 14 ++++++++++++++
2 files changed, 15 insertions(+)
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1712,6 +1712,7 @@ static bool acpi_device_enumeration_by_p
{"BSG1160", },
{"BSG2150", },
{"CSC3551", },
+ {"CSC3556", },
{"INT33FE", },
{"INT3515", },
/* Non-conforming _HID for Cirrus Logic already released */
--- a/drivers/platform/x86/serial-multi-instantiate.c
+++ b/drivers/platform/x86/serial-multi-instantiate.c
@@ -330,6 +330,19 @@ static const struct smi_node cs35l41_hda
.bus_type = SMI_AUTO_DETECT,
};
+static const struct smi_node cs35l56_hda = {
+ .instances = {
+ { "cs35l56-hda", IRQ_RESOURCE_AUTO, 0 },
+ { "cs35l56-hda", IRQ_RESOURCE_AUTO, 0 },
+ { "cs35l56-hda", IRQ_RESOURCE_AUTO, 0 },
+ { "cs35l56-hda", IRQ_RESOURCE_AUTO, 0 },
+ /* a 5th entry is an alias address, not a real device */
+ { "cs35l56-hda_dummy_dev" },
+ {}
+ },
+ .bus_type = SMI_AUTO_DETECT,
+};
+
/*
* Note new device-ids must also be added to ignore_serial_bus_ids in
* drivers/acpi/scan.c: acpi_device_enumeration_by_parent().
@@ -338,6 +351,7 @@ static const struct acpi_device_id smi_a
{ "BSG1160", (unsigned long)&bsg1160_data },
{ "BSG2150", (unsigned long)&bsg2150_data },
{ "CSC3551", (unsigned long)&cs35l41_hda },
+ { "CSC3556", (unsigned long)&cs35l56_hda },
{ "INT3515", (unsigned long)&int3515_data },
/* Non-conforming _HID for Cirrus Logic already released */
{ "CLSA0100", (unsigned long)&cs35l41_hda },
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 147/149] alpha: remove __init annotation from exported page_is_ram()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (145 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 146/149] ACPI: scan: Create platform device for CS35L56 Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 148/149] sch_netem: fix issues in netem_change() vs get_dist_table() Greg Kroah-Hartman
` (14 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Masahiro Yamada, Randy Dunlap
From: Masahiro Yamada <masahiroy@kernel.org>
commit 6ccbd7fd474674654019a20177c943359469103a upstream.
EXPORT_SYMBOL and __init is a bad combination because the .init.text
section is freed up after the initialization.
Commit c5a130325f13 ("ACPI/APEI: Add parameter check before error
injection") exported page_is_ram(), hence the __init annotation should
be removed.
This fixes the modpost warning in ARCH=alpha builds:
WARNING: modpost: vmlinux: page_is_ram: EXPORT_SYMBOL used for init symbol. Remove __init or EXPORT_SYMBOL.
Fixes: c5a130325f13 ("ACPI/APEI: Add parameter check before error injection")
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/alpha/kernel/setup.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
--- a/arch/alpha/kernel/setup.c
+++ b/arch/alpha/kernel/setup.c
@@ -385,8 +385,7 @@ setup_memory(void *kernel_end)
#endif /* CONFIG_BLK_DEV_INITRD */
}
-int __init
-page_is_ram(unsigned long pfn)
+int page_is_ram(unsigned long pfn)
{
struct memclust_struct * cluster;
struct memdesc_struct * memdesc;
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 148/149] sch_netem: fix issues in netem_change() vs get_dist_table()
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (146 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 147/149] alpha: remove __init annotation from exported page_is_ram() Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 149/149] drm/amd/pm/smu7: move variables to where they are used Greg Kroah-Hartman
` (13 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot, Eric Dumazet,
Stephen Hemminger, Jamal Hadi Salim, Simon Horman, Jakub Kicinski,
Fedor Pchelkin
From: Eric Dumazet <edumazet@google.com>
commit 11b73313c12403f617b47752db0ab3deef201af7 upstream.
In blamed commit, I missed that get_dist_table() was allocating
memory using GFP_KERNEL, and acquiring qdisc lock to perform
the swap of newly allocated table with current one.
In this patch, get_dist_table() is allocating memory and
copy user data before we acquire the qdisc lock.
Then we perform swap operations while being protected by the lock.
Note that after this patch netem_change() no longer can do partial changes.
If an error is returned, qdisc conf is left unchanged.
Fixes: 2174a08db80d ("sch_netem: acquire qdisc lock in netem_change()")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Link: https://lore.kernel.org/r/20230622181503.2327695-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/sched/sch_netem.c | 59 +++++++++++++++++++++-----------------------------
1 file changed, 25 insertions(+), 34 deletions(-)
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -773,12 +773,10 @@ static void dist_free(struct disttable *
* signed 16 bit values.
*/
-static int get_dist_table(struct Qdisc *sch, struct disttable **tbl,
- const struct nlattr *attr)
+static int get_dist_table(struct disttable **tbl, const struct nlattr *attr)
{
size_t n = nla_len(attr)/sizeof(__s16);
const __s16 *data = nla_data(attr);
- spinlock_t *root_lock;
struct disttable *d;
int i;
@@ -793,13 +791,7 @@ static int get_dist_table(struct Qdisc *
for (i = 0; i < n; i++)
d->table[i] = data[i];
- root_lock = qdisc_root_sleeping_lock(sch);
-
- spin_lock_bh(root_lock);
- swap(*tbl, d);
- spin_unlock_bh(root_lock);
-
- dist_free(d);
+ *tbl = d;
return 0;
}
@@ -956,6 +948,8 @@ static int netem_change(struct Qdisc *sc
{
struct netem_sched_data *q = qdisc_priv(sch);
struct nlattr *tb[TCA_NETEM_MAX + 1];
+ struct disttable *delay_dist = NULL;
+ struct disttable *slot_dist = NULL;
struct tc_netem_qopt *qopt;
struct clgstate old_clg;
int old_loss_model = CLG_RANDOM;
@@ -966,6 +960,18 @@ static int netem_change(struct Qdisc *sc
if (ret < 0)
return ret;
+ if (tb[TCA_NETEM_DELAY_DIST]) {
+ ret = get_dist_table(&delay_dist, tb[TCA_NETEM_DELAY_DIST]);
+ if (ret)
+ goto table_free;
+ }
+
+ if (tb[TCA_NETEM_SLOT_DIST]) {
+ ret = get_dist_table(&slot_dist, tb[TCA_NETEM_SLOT_DIST]);
+ if (ret)
+ goto table_free;
+ }
+
sch_tree_lock(sch);
/* backup q->clg and q->loss_model */
old_clg = q->clg;
@@ -975,26 +981,17 @@ static int netem_change(struct Qdisc *sc
ret = get_loss_clg(q, tb[TCA_NETEM_LOSS]);
if (ret) {
q->loss_model = old_loss_model;
+ q->clg = old_clg;
goto unlock;
}
} else {
q->loss_model = CLG_RANDOM;
}
- if (tb[TCA_NETEM_DELAY_DIST]) {
- ret = get_dist_table(sch, &q->delay_dist,
- tb[TCA_NETEM_DELAY_DIST]);
- if (ret)
- goto get_table_failure;
- }
-
- if (tb[TCA_NETEM_SLOT_DIST]) {
- ret = get_dist_table(sch, &q->slot_dist,
- tb[TCA_NETEM_SLOT_DIST]);
- if (ret)
- goto get_table_failure;
- }
-
+ if (delay_dist)
+ swap(q->delay_dist, delay_dist);
+ if (slot_dist)
+ swap(q->slot_dist, slot_dist);
sch->limit = qopt->limit;
q->latency = PSCHED_TICKS2NS(qopt->latency);
@@ -1044,17 +1041,11 @@ static int netem_change(struct Qdisc *sc
unlock:
sch_tree_unlock(sch);
- return ret;
-get_table_failure:
- /* recover clg and loss_model, in case of
- * q->clg and q->loss_model were modified
- * in get_loss_clg()
- */
- q->clg = old_clg;
- q->loss_model = old_loss_model;
-
- goto unlock;
+table_free:
+ dist_free(delay_dist);
+ dist_free(slot_dist);
+ return ret;
}
static int netem_init(struct Qdisc *sch, struct nlattr *opt,
^ permalink raw reply [flat|nested] 167+ messages in thread
* [PATCH 6.1 149/149] drm/amd/pm/smu7: move variables to where they are used
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (147 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 148/149] sch_netem: fix issues in netem_change() vs get_dist_table() Greg Kroah-Hartman
@ 2023-08-13 21:19 ` Greg Kroah-Hartman
2023-08-14 5:11 ` [PATCH 6.1 000/149] 6.1.46-rc1 review Bagas Sanjaya
` (12 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-13 21:19 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Evan Quan, Alex Deucher
From: Alex Deucher <alexander.deucher@amd.com>
commit 63a9ab264a8c030482ab9e7e20b6c4c162299531 upstream.
Move variable declarations to where they are used. Fixes
a segfault on smu7 V0 structures where some tables don't
exist.
Cc: Evan Quan <evan.quan@amd.com>
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2388
Fixes: b1a9557a7d00 ("drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings")
Reviewed-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
@@ -1505,12 +1505,6 @@ static void smu7_populate_umdpstate_cloc
{
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
struct smu7_dpm_table *golden_dpm_table = &data->golden_dpm_table;
- struct phm_clock_voltage_dependency_table *vddc_dependency_on_sclk =
- hwmgr->dyn_state.vddc_dependency_on_sclk;
- struct phm_ppt_v1_information *table_info =
- (struct phm_ppt_v1_information *)(hwmgr->pptable);
- struct phm_ppt_v1_clock_voltage_dependency_table *vdd_dep_on_sclk =
- table_info->vdd_dep_on_sclk;
int32_t tmp_sclk, count, percentage;
if (golden_dpm_table->mclk_table.count == 1) {
@@ -1525,6 +1519,9 @@ static void smu7_populate_umdpstate_cloc
tmp_sclk = hwmgr->pstate_mclk * percentage / 100;
if (hwmgr->pp_table_version == PP_TABLE_V0) {
+ struct phm_clock_voltage_dependency_table *vddc_dependency_on_sclk =
+ hwmgr->dyn_state.vddc_dependency_on_sclk;
+
for (count = vddc_dependency_on_sclk->count - 1; count >= 0; count--) {
if (tmp_sclk >= vddc_dependency_on_sclk->entries[count].clk) {
hwmgr->pstate_sclk = vddc_dependency_on_sclk->entries[count].clk;
@@ -1537,6 +1534,11 @@ static void smu7_populate_umdpstate_cloc
hwmgr->pstate_sclk_peak =
vddc_dependency_on_sclk->entries[vddc_dependency_on_sclk->count - 1].clk;
} else if (hwmgr->pp_table_version == PP_TABLE_V1) {
+ struct phm_ppt_v1_information *table_info =
+ (struct phm_ppt_v1_information *)(hwmgr->pptable);
+ struct phm_ppt_v1_clock_voltage_dependency_table *vdd_dep_on_sclk =
+ table_info->vdd_dep_on_sclk;
+
for (count = vdd_dep_on_sclk->count - 1; count >= 0; count--) {
if (tmp_sclk >= vdd_dep_on_sclk->entries[count].clk) {
hwmgr->pstate_sclk = vdd_dep_on_sclk->entries[count].clk;
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (148 preceding siblings ...)
2023-08-13 21:19 ` [PATCH 6.1 149/149] drm/amd/pm/smu7: move variables to where they are used Greg Kroah-Hartman
@ 2023-08-14 5:11 ` Bagas Sanjaya
2023-08-14 10:33 ` Takeshi Ogasawara
` (11 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Bagas Sanjaya @ 2023-08-14 5:11 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
[-- Attachment #1: Type: text/plain, Size: 559 bytes --]
On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
Successfully compiled and installed bindeb-pkgs on my computer (Acer
Aspire E15, Intel Core i3 Haswell). No noticeable regressions.
Tested-by: Bagas Sanjaya <bagasdotme@gmail.com>
--
An old man doll... just what I always wanted! - Clara
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (149 preceding siblings ...)
2023-08-14 5:11 ` [PATCH 6.1 000/149] 6.1.46-rc1 review Bagas Sanjaya
@ 2023-08-14 10:33 ` Takeshi Ogasawara
2023-08-14 14:04 ` Guenter Roeck
` (10 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Takeshi Ogasawara @ 2023-08-14 10:33 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor
Hi Greg
On Mon, Aug 14, 2023 at 6:34 AM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
>
6.1.46-rc1 tested.
Build successfully completed.
Boot successfully completed.
No dmesg regressions.
Video output normal.
Sound output normal.
Lenovo ThinkPad X1 Carbon Gen10(Intel i7-1260P(x86_64) arch linux)
Thanks
Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (150 preceding siblings ...)
2023-08-14 10:33 ` Takeshi Ogasawara
@ 2023-08-14 14:04 ` Guenter Roeck
2023-08-16 16:26 ` Greg Kroah-Hartman
2023-08-14 14:06 ` Conor Dooley
` (9 subsequent siblings)
161 siblings, 1 reply; 167+ messages in thread
From: Guenter Roeck @ 2023-08-14 14:04 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
Booting with f2fs root file systems still crashes in this release
candidate. Would it make sense to mark f2fs as broken in v6.1.y ?
Guenter
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (151 preceding siblings ...)
2023-08-14 14:04 ` Guenter Roeck
@ 2023-08-14 14:06 ` Conor Dooley
2023-08-14 14:50 ` Thierry Reding
` (8 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Conor Dooley @ 2023-08-14 14:06 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor
[-- Attachment #1: Type: text/plain, Size: 434 bytes --]
On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
I think I replied to the wrong thing earlier for 6.1 testing..
Tested-by: Conor Dooley <conor.dooley@microchip.com>
Thanks,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (152 preceding siblings ...)
2023-08-14 14:06 ` Conor Dooley
@ 2023-08-14 14:50 ` Thierry Reding
2023-08-14 17:35 ` SeongJae Park
` (7 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Thierry Reding @ 2023-08-14 14:50 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: Greg Kroah-Hartman, patches, linux-kernel, torvalds, akpm, linux,
shuah, patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, linux-tegra
On Sun, 13 Aug 2023 23:17:25 +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
All tests passing for Tegra ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
116 tests: 116 pass, 0 fail
Linux version: 6.1.46-rc1-g1ff6999c9334
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04
Tested-by: Thierry Reding <treding@nvidia.com>
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (153 preceding siblings ...)
2023-08-14 14:50 ` Thierry Reding
@ 2023-08-14 17:35 ` SeongJae Park
2023-08-14 18:33 ` Guenter Roeck
` (6 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: SeongJae Park @ 2023-08-14 17:35 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, damon, SeongJae Park
Hello,
On Sun, 13 Aug 2023 23:17:25 +0200 Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
This rc kernel passes DAMON functionality test[1] on my test machine.
Attaching the test results summary below. Please note that I retrieved the
kernel from linux-stable-rc tree[2].
Tested-by: SeongJae Park <sj@kernel.org>
[1] https://github.com/awslabs/damon-tests/tree/next/corr
[2] dbb92b2240ba ("Linux 6.1.46-rc1")
Thanks,
SJ
[...]
---
# .config:1408:warning: override: reassigning to symbol CGROUPS
ok 15 selftests: damon-tests: build_nomemcg.sh
# kselftest dir '/home/sjpark/damon-tests-cont/linux/tools/testing/selftests/damon-tests' is in dirty state.
# the log is at '/home/sjpark/log'.
[32m
ok 1 selftests: damon: debugfs_attrs.sh
ok 2 selftests: damon: debugfs_schemes.sh
ok 3 selftests: damon: debugfs_target_ids.sh
ok 4 selftests: damon: debugfs_empty_targets.sh
ok 5 selftests: damon: debugfs_huge_count_read_write.sh
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: sysfs.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh
ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_m68k.sh
ok 12 selftests: damon-tests: build_arm64.sh
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m
_remote_run_corr.sh SUCCESS
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (154 preceding siblings ...)
2023-08-14 17:35 ` SeongJae Park
@ 2023-08-14 18:33 ` Guenter Roeck
2023-08-15 0:30 ` Ron Economos
` (5 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Guenter Roeck @ 2023-08-14 18:33 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
Build results:
total: 157 pass: 157 fail: 0
Qemu test results:
total: 521 pass: 519 fail: 2
Failed tests:
arm:fuji-bmc:aspeed_g5_defconfig:notests:mem1G:mtd128,0,8,1:net,nic:aspeed-bmc-facebook-fuji:rootfs
arm:bletchley-bmc,fmc-model=mt25qu02g,spi-model=mt25qu02g:aspeed_g5_defconfig:notests:mem1G:mtd256:net,nic:aspeed-bmc-facebook-bletchley:rootfs
As already reported, the failing tests are crashing in f2fs code.
This bears the questions 1) should I stop testing f2fs and 2),
would it make sense to mark f2fs as broken in v6.1.y ?
It doesn't seem to make sense to keep testing code which is known
to be broken.
Thanks,
Guenter
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (155 preceding siblings ...)
2023-08-14 18:33 ` Guenter Roeck
@ 2023-08-15 0:30 ` Ron Economos
2023-08-15 0:48 ` Shuah Khan
` (4 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Ron Economos @ 2023-08-15 0:30 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
On 8/13/23 2:17 PM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Tested-by: Ron Economos <re@w6rz.net>
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (156 preceding siblings ...)
2023-08-15 0:30 ` Ron Economos
@ 2023-08-15 0:48 ` Shuah Khan
2023-08-15 3:37 ` Daniel Díaz
` (3 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Shuah Khan @ 2023-08-15 0:48 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor, Shuah Khan
On 8/13/23 15:17, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
>
Compiled and booted on my test system. No dmesg regressions.
Tested-by: Shuah Khan <skhan@linuxfoundation.org>
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (157 preceding siblings ...)
2023-08-15 0:48 ` Shuah Khan
@ 2023-08-15 3:37 ` Daniel Díaz
2023-08-15 16:25 ` Florian Fainelli
` (2 subsequent siblings)
161 siblings, 0 replies; 167+ messages in thread
From: Daniel Díaz @ 2023-08-15 3:37 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor, broonie
Hello!
On 13/08/23 15:17, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
This branch exhibits the same problem with regards to x86 and Clang as reported on 6.4 [1].
(An old warning is restored in tools/testing/selftests/rseq/, now that it builds again, but it was there in 6.1.44 too, so this is not a newly introduced warning. This is the warning:
-----8<-----
clang --target=aarch64-linux-gnu -fintegrated-as -Werror=unknown-warning-option -Werror=ignored-optimization-argument -no-integrated-as --target=aarch64-linux-gnu -fintegrated-as -O2 -Wall -g -I./ -isystem /home/tuxbuild/.cache/tuxmake/builds/1/build/usr/include -L/home/tuxbuild/.cache/tuxmake/builds/1/build/kselftest/rseq -Wl,-rpath=./ --target=aarch64-linux-gnu -fintegrated-as -Werror=unknown-warning-option -Werror=ignored-optimization-argument -no-integrated-as --target=aarch64-linux-gnu -DBENCHMARK param_test.c -lpthread -ldl -lrseq -o /home/tuxbuild/.cache/tuxmake/builds/1/build/kselftest/rseq/param_test_benchmark
param_test.c:20:21: warning: unused function 'rseq_gettid' [-Wunused-function]
20 | static inline pid_t rseq_gettid(void)
| ^~~~~~~~~~~
1 warning generated.
----->8-----
As expected, this reappeared due to Broonie's patch to fix rseq's build ("selftests/rseq: Fix build with undefined __weak").)
Rest of the report as follows:
## Build
* kernel: 6.1.46-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-6.1.y
* git commit: dbb92b2240baeb83c338da3c22ea784f13375059
* git describe: v6.1.45-150-gdbb92b2240ba
* test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.1.y/build/v6.1.45-150-gdbb92b2240ba
## Test regressions (compared to v6.1.45)
* x86, log-parser-boot
- check-kernel-warning
## Metric regressions (compared to v6.1.45)
* arm64, build
- clang-17-lkftconfig-gki-kselftest-warnings
- clang-17-lkftconfig-gki-no-kselftest-frag-warnings
- clang-17-lkftconfig-no-kselftest-frag-warnings
- clang-nightly-lkftconfig-kselftest-warnings
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
## Test fixes (compared to v6.1.45)
* x86_64, build
- clang-17-allmodconfig
- clang-17-lkftconfig
- clang-17-lkftconfig-compat
- clang-17-lkftconfig-kcsan
- clang-17-lkftconfig-no-kselftest-frag
- clang-17-x86_64_defconfig
- clang-lkftconfig
- clang-nightly-lkftconfig
- clang-nightly-lkftconfig-kselftest
- clang-nightly-x86_64_defconfig
## Test result summary
total: 167336, pass: 141554, fail: 4214, skip: 21375, xfail: 193
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 151 total, 150 passed, 1 failed
* arm64: 57 total, 55 passed, 2 failed
* i386: 41 total, 39 passed, 2 failed
* mips: 30 total, 28 passed, 2 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 38 total, 36 passed, 2 failed
* riscv: 16 total, 14 passed, 2 failed
* s390: 16 total, 15 passed, 1 failed
* sh: 14 total, 12 passed, 2 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 46 total, 45 passed, 1 failed
## Test suites summary
* boot
* kselftest-android
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-exec
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-filesystems-epoll
* kselftest-firmware
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-net-forwarding
* kselftest-net-mptcp
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user_events
* kselftest-vDSO
* kselftest-watchdog
* kselftest-x86
* kunit
* kvm-unit-tests
* libgpiod
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-filecaps
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-fsx
* ltp-hugetlb
* ltp-io
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* network-basic-tests
* perf
* rcutorture
* v4l2-compliance
Greetings!
Daniel Díaz
daniel.diaz@linaro.org
[1] https://lore.kernel.org/stable/b2145971-5417-e1b1-40b4-f971e247e1ea@linaro.org/
--
Linaro LKFT
https://lkft.linaro.org
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (158 preceding siblings ...)
2023-08-15 3:37 ` Daniel Díaz
@ 2023-08-15 16:25 ` Florian Fainelli
2023-08-15 17:09 ` Allen Pais
2023-08-16 22:23 ` Joel Fernandes
161 siblings, 0 replies; 167+ messages in thread
From: Florian Fainelli @ 2023-08-15 16:25 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, linux-kernel, torvalds, akpm, linux, shuah, patches,
lkft-triage, pavel, jonathanh, sudipm.mukherjee, srw, rwarsow,
conor
On 8/13/23 14:17, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels:
Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
--
Florian
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (159 preceding siblings ...)
2023-08-15 16:25 ` Florian Fainelli
@ 2023-08-15 17:09 ` Allen Pais
2023-08-16 22:23 ` Joel Fernandes
161 siblings, 0 replies; 167+ messages in thread
From: Allen Pais @ 2023-08-15 17:09 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
>
Compiled and booted on my x86_64 and ARM64 test systems. No errors or
regressions.
Tested-by: Allen Pais <apais@linux.microsoft.com>
Thanks.
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-14 14:04 ` Guenter Roeck
@ 2023-08-16 16:26 ` Greg Kroah-Hartman
2023-08-26 15:48 ` Greg Kroah-Hartman
0 siblings, 1 reply; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-16 16:26 UTC (permalink / raw)
To: Guenter Roeck
Cc: stable, patches, linux-kernel, torvalds, akpm, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
On Mon, Aug 14, 2023 at 07:04:57AM -0700, Guenter Roeck wrote:
> On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> > This is the start of the stable review cycle for the 6.1.46 release.
> > There are 149 patches in this series, all will be posted as a response
> > to this one. If anyone has any issues with these being applied, please
> > let me know.
> >
> > Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> > Anything received after that time might be too late.
>
> Booting with f2fs root file systems still crashes in this release
> candidate. Would it make sense to mark f2fs as broken in v6.1.y ?
Ick, yeah, let me dig into this next week and figure out what went
wrong...
greg k-h
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
` (160 preceding siblings ...)
2023-08-15 17:09 ` Allen Pais
@ 2023-08-16 22:23 ` Joel Fernandes
161 siblings, 0 replies; 167+ messages in thread
From: Joel Fernandes @ 2023-08-16 22:23 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor
On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.1.46 release.
> There are 149 patches in this series, all will be posted as a response
> to this one. If anyone has any issues with these being applied, please
> let me know.
>
> Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> Anything received after that time might be too late.
>
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.46-rc1.gz
> or in the git tree and branch at:
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
> and the diffstat can be found below.
Little too late to the party, but
For RCU,
Tested-by: Joel Fernandes (Google) <joel@joelfernandes.org>
thanks,
- Joel
>
> thanks,
>
> greg k-h
>
> -------------
> Pseudo-Shortlog of commits:
>
> Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Linux 6.1.46-rc1
>
> Alex Deucher <alexander.deucher@amd.com>
> drm/amd/pm/smu7: move variables to where they are used
>
> Eric Dumazet <edumazet@google.com>
> sch_netem: fix issues in netem_change() vs get_dist_table()
>
> Masahiro Yamada <masahiroy@kernel.org>
> alpha: remove __init annotation from exported page_is_ram()
>
> Simon Trimmer <simont@opensource.cirrus.com>
> ACPI: scan: Create platform device for CS35L56
>
> David Xu <xuwd1@hotmail.com>
> platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551
>
> Nilesh Javali <njavali@marvell.com>
> scsi: qedf: Fix firmware halt over suspend and resume
>
> Nilesh Javali <njavali@marvell.com>
> scsi: qedi: Fix firmware halt over suspend and resume
>
> Karan Tilak Kumar <kartilak@cisco.com>
> scsi: fnic: Replace return codes in fnic_clean_pending_aborts()
>
> Zhu Wang <wangzhu9@huawei.com>
> scsi: core: Fix possible memory leak if device_add() fails
>
> Zhu Wang <wangzhu9@huawei.com>
> scsi: snic: Fix possible memory leak if device_add() fails
>
> Alexandra Diupina <adiupina@astralinux.ru>
> scsi: 53c700: Check that command slot is not NULL
>
> Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> scsi: ufs: renesas: Fix private allocation
>
> Michael Kelley <mikelley@microsoft.com>
> scsi: storvsc: Fix handling of virtual Fibre Channel timeouts
>
> Tony Battersby <tonyb@cybernetics.com>
> scsi: core: Fix legacy /proc parsing buffer overflow
>
> Pablo Neira Ayuso <pablo@netfilter.org>
> netfilter: nf_tables: report use refcount overflow
>
> Ming Lei <ming.lei@redhat.com>
> nvme-rdma: fix potential unbalanced freeze & unfreeze
>
> Ming Lei <ming.lei@redhat.com>
> nvme-tcp: fix potential unbalanced freeze & unfreeze
>
> Josef Bacik <josef@toxicpanda.com>
> btrfs: set cache_block_group_error if we find an error
>
> Qu Wenruo <wqu@suse.com>
> btrfs: reject invalid reloc tree root keys with stack dump
>
> Qu Wenruo <wqu@suse.com>
> btrfs: exit gracefully if reloc roots don't match
>
> Christoph Hellwig <hch@lst.de>
> btrfs: properly clear end of the unreserved range in cow_file_range
>
> Christoph Hellwig <hch@lst.de>
> btrfs: don't stop integrity writeback too early
>
> Josef Bacik <josef@toxicpanda.com>
> btrfs: wait for actual caching progress during allocation
>
> Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> gpio: sim: mark the GPIO chip as a one that can sleep
>
> William Breathitt Gray <william.gray@linaro.org>
> gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent
>
> Nick Child <nnac123@linux.ibm.com>
> ibmvnic: Ensure login failure recovery is safe from other resets
>
> Nick Child <nnac123@linux.ibm.com>
> ibmvnic: Do partial reset on login failure
>
> Nick Child <nnac123@linux.ibm.com>
> ibmvnic: Handle DMA unmapping of login buffs in release functions
>
> Nick Child <nnac123@linux.ibm.com>
> ibmvnic: Unmap DMA login rsp buffer on send login fail
>
> Nick Child <nnac123@linux.ibm.com>
> ibmvnic: Enforce stronger sanity checks on login response
>
> Moshe Shemesh <moshe@nvidia.com>
> net/mlx5: Reload auxiliary devices in pci error handlers
>
> Moshe Shemesh <moshe@nvidia.com>
> net/mlx5: Skip clock update work when device is in error state
>
> Shay Drory <shayd@nvidia.com>
> net/mlx5: LAG, Check correct bucket when modifying LAG
>
> Daniel Jurgens <danielj@nvidia.com>
> net/mlx5: Allow 0 for total host VFs
>
> Zhang Jianhua <chris.zjh@huawei.com>
> dmaengine: owl-dma: Modify mismatched function name
>
> Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> dmaengine: mcf-edma: Fix a potential un-allocated memory access
>
> Hao Chen <chenhao418@huawei.com>
> net: hns3: fix strscpy causing content truncation issue
>
> Ido Schimmel <idosch@nvidia.com>
> nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID
>
> Ido Schimmel <idosch@nvidia.com>
> nexthop: Make nexthop bucket dump more efficient
>
> Ido Schimmel <idosch@nvidia.com>
> nexthop: Fix infinite nexthop dump when using maximum nexthop ID
>
> Yonglong Liu <liuyonglong@huawei.com>
> net: hns3: fix deadlock issue when externel_lb and reset are executed together
>
> Jie Wang <wangjie125@huawei.com>
> net: hns3: add wait until mac link down
>
> Jie Wang <wangjie125@huawei.com>
> net: hns3: refactor hclge_mac_link_status_wait for interface reuse
>
> Vladimir Oltean <vladimir.oltean@nxp.com>
> net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove
>
> Li Yang <leoyang.li@nxp.com>
> net: phy: at803x: remove set/get wol callbacks for AR8032
>
> Jonas Gorski <jonas.gorski@bisdn.de>
> net: marvell: prestera: fix handling IPv4 routes with nhid
>
> Jakub Kicinski <kuba@kernel.org>
> net: tls: avoid discarding data on record close
>
> Michael Guralnik <michaelgur@nvidia.com>
> RDMA/umem: Set iova in ODP flow
>
> Felix Fietkau <nbd@nbd.name>
> wifi: cfg80211: fix sband iftype data lookup for AP_VLAN
>
> Daniel Stone <daniels@collabora.com>
> drm/rockchip: Don't spam logs in atomic check
>
> Douglas Miller <doug.miller@cornelisnetworks.com>
> IB/hfi1: Fix possible panic during hotplug remove
>
> Piotr Gardocki <piotrx.gardocki@intel.com>
> iavf: fix potential races for FDIR filters
>
> Fedor Pchelkin <pchelkin@ispras.ru>
> drivers: vxlan: vnifilter: free percpu vni stats on error path
>
> Andrew Kanner <andrew.kanner@gmail.com>
> drivers: net: prevent tun_build_skb() to exceed the packet size limit
>
> Eric Dumazet <edumazet@google.com>
> dccp: fix data-race around dp->dccps_mss_cache
>
> Ziyang Xuan <william.xuanziyang@huawei.com>
> bonding: Fix incorrect deletion of ETH_P_8021AD protocol vid from slaves
>
> Magnus Karlsson <magnus.karlsson@intel.com>
> xsk: fix refcount underflow in error path
>
> Florian Westphal <fw@strlen.de>
> tunnels: fix kasan splat when generating ipv4 pmtu error
>
> Eric Dumazet <edumazet@google.com>
> tcp: add missing family to tcp_set_ca_state() tracepoint
>
> Gerd Bayer <gbayer@linux.ibm.com>
> net/smc: Use correct buffer sizes when switching between TCP and SMC
>
> Eric Dumazet <edumazet@google.com>
> net/packet: annotate data-races around tp->status
>
> Xiang Yang <xiangyang3@huawei.com>
> mptcp: fix the incorrect judgment for msk->cb_flags
>
> Eric Dumazet <edumazet@google.com>
> macsec: use DEV_STATS_INC()
>
> Nathan Chancellor <nathan@kernel.org>
> mISDN: Update parameter type of dsp_cmx_send()
>
> Xu Kuohai <xukuohai@huawei.com>
> bpf, sockmap: Fix bug that strp_done cannot be called
>
> Xu Kuohai <xukuohai@huawei.com>
> bpf, sockmap: Fix map type error in sock_map_del_link
>
> Andrew Kanner <andrew.kanner@gmail.com>
> net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail()
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: tc_flower: Relax success criterion
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: Switch off timeout
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: Skip test when no interfaces are specified
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: hw_stats_l3_gre: Skip when using veth pairs
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: ethtool_extended_state: Skip when using veth pairs
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: ethtool: Skip when using veth pairs
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: Add a helper to skip test when using veth pairs
>
> Mark Brown <broonie@kernel.org>
> selftests/rseq: Fix build with undefined __weak
>
> Neil Armstrong <neil.armstrong@linaro.org>
> interconnect: qcom: sm8450: add enable_mask for bcm nodes
>
> Mike Tipton <mdtipton@codeaurora.org>
> interconnect: qcom: Add support for mask-based BCMs
>
> Milan Zamazal <mzamazal@redhat.com>
> iio: core: Prevent invalid memory access when there is no parent
>
> Florian Westphal <fw@strlen.de>
> netfilter: nf_tables: don't skip expired elements during walk
>
> Karol Herbst <kherbst@redhat.com>
> drm/nouveau/disp: Revert a NULL check inside nouveau_connector_get_modes
>
> Arnd Bergmann <arnd@arndb.de>
> x86: Move gds_ucode_mitigated() declaration to header
>
> Arnd Bergmann <arnd@arndb.de>
> x86/speculation: Add cpu_show_gds() prototype
>
> Borislav Petkov (AMD) <bp@alien8.de>
> x86/sev: Do not try to parse for the CC blob on non-AMD hardware
>
> Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> x86/mm: Fix VDSO and VVAR placement on 5-level paging machines
>
> Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
> x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405
>
> Nick Desaulniers <ndesaulniers@google.com>
> x86/srso: Fix build breakage with the LLVM linker
>
> RD Babiera <rdbabiera@google.com>
> usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment
>
> Badhri Jagan Sridharan <badhri@google.com>
> usb: typec: tcpm: Fix response to vsafe0V event
>
> Prashanth K <quic_prashk@quicinc.com>
> usb: common: usb-conn-gpio: Prevent bailing out if initial role is none
>
> Alan Stern <stern@rowland.harvard.edu>
> USB: Gadget: core: Help prevent panic during UVC unconfigure
>
> Elson Roy Serrao <quic_eserrao@quicinc.com>
> usb: dwc3: Properly handle processing of pending events
>
> Alan Stern <stern@rowland.harvard.edu>
> usb-storage: alauda: Fix uninit-value in alauda_check_media()
>
> Ricky WU <ricky_wu@realtek.com>
> misc: rtsx: judge ASPM Mode to set PETXCFG Reg
>
> Qi Zheng <zhengqi.arch@bytedance.com>
> binder: fix memory leak in binder_init()
>
> Alvin Šipraga <alsi@bang-olufsen.dk>
> iio: adc: ina2xx: avoid NULL pointer dereference on OF device match
>
> Alisa Roman <alisa.roman@analog.com>
> iio: adc: ad7192: Fix ac excitation feature
>
> Dan Carpenter <dan.carpenter@linaro.org>
> iio: frequency: admv1013: propagate errors from regulator_get_voltage()
>
> Yiyuan Guo <yguoaz@gmail.com>
> iio: cros_ec: Fix the allocation size for cros_ec_command
>
> Aleksa Sarai <cyphar@cyphar.com>
> io_uring: correct check for O_TMPFILE
>
> Aurabindo Pillai <aurabindo.pillai@amd.com>
> drm/amd/display: trigger timing sync only if TG is running
>
> Alex Deucher <alexander.deucher@amd.com>
> drm/amd/display: fix the build when DRM_AMD_DC_DCN is not set
>
> Alvin Lee <Alvin.Lee2@amd.com>
> drm/amd/display: Retain phantom plane/stream if validation fails
>
> Alvin Lee <Alvin.Lee2@amd.com>
> drm/amd/display: Disable phantom OTG after enable for plane disable
>
> Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> drm/amd/display: Use update plane and stream routine for DCN32x
>
> Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> drm/amd/display: Avoid ABM when ODM combine is enabled for eDP
>
> Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> drm/amd/display: Update OTG instance in the commit stream
>
> Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> drm/amd/display: Handle seamless boot stream
>
> Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> drm/amd/display: Add function for validate and update new stream
>
> Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
> drm/amd/display: Handle virtual hardware detect
>
> Evan Quan <evan.quan@amd.com>
> drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuation
>
> Evan Quan <evan.quan@amd.com>
> drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings
>
> Evan Quan <evan.quan@amd.com>
> drm/amd/pm: expose swctf threshold setting for legacy powerplay
>
> Evan Quan <evan.quan@amd.com>
> drm/amd/pm: fulfill swsmu peak profiling mode shader/memory clock settings
>
> Ryusuke Konishi <konishi.ryusuke@gmail.com>
> nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput
>
> Colin Ian King <colin.i.king@gmail.com>
> radix tree test suite: fix incorrect allocation size for pthreads
>
> Tao Ren <rentao.bupt@gmail.com>
> hwmon: (pmbus/bel-pfe) Enable PMBUS_SKIP_STATUS_CHECK for pfe1100
>
> Maulik Shah <quic_mkshah@quicinc.com>
> cpuidle: dt_idle_genpd: Add helper function to remove genpd topology
>
> Peichen Huang <peichen.huang@amd.com>
> drm/amd/display: limit DPIA link rate to HBR3
>
> Mario Limonciello <mario.limonciello@amd.com>
> drm/amd: Disable S/G for APUs when 64GB or more host memory
>
> Alex Deucher <alexander.deucher@amd.com>
> drm/amdgpu: add S/G display parameter
>
> Melissa Wen <mwen@igalia.com>
> drm/amd/display: check attr flag before set cursor degamma on DCN3+
>
> Alex Deucher <alexander.deucher@amd.com>
> drm/amdgpu: fix possible UAF in amdgpu_cs_pass1()
>
> Boris Brezillon <boris.brezillon@collabora.com>
> drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap()
>
> Lyude Paul <lyude@redhat.com>
> drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issues
>
> Karol Herbst <kherbst@redhat.com>
> drm/nouveau/gr: enable memory loads on helper invocation on all channels
>
> August Wikerfors <git@augustwikerfors.se>
> nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G
>
> Torsten Duwe <duwe@suse.de>
> riscv/kexec: handle R_RISCV_CALL_PLT relocation type
>
> Andrea Parri <parri.andrea@gmail.com>
> riscv,mmio: Fix readX()-to-delay() ordering
>
> Torsten Duwe <duwe@suse.de>
> riscv/kexec: load initrd high in available memory
>
> Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>
> net: mana: Fix MANA VF unload when hardware is unresponsive
>
> Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> dmaengine: pl330: Return DMA_PAUSED when transaction is paused
>
> Paolo Abeni <pabeni@redhat.com>
> mptcp: fix disconnect vs accept race
>
> Paolo Abeni <pabeni@redhat.com>
> mptcp: avoid bogus reset on fallback close
>
> Andrea Claudi <aclaudi@redhat.com>
> selftests: mptcp: join: fix 'implicit EP' test
>
> Andrea Claudi <aclaudi@redhat.com>
> selftests: mptcp: join: fix 'delete and re-add' test
>
> Maciej Żenczykowski <maze@google.com>
> ipv6: adjust ndisc_is_useropt() to also return true for PIO
>
> Sergei Antonov <saproj@gmail.com>
> mmc: moxart: read scr register without changing byte order
>
> Jason A. Donenfeld <Jason@zx2c4.com>
> wireguard: allowedips: expand maximum node depth
>
> Ido Schimmel <idosch@nvidia.com>
> selftests: forwarding: Set default IPv6 traceroute utility
>
> Ping-Ke Shih <pkshih@realtek.com>
> wifi: rtw89: fix 8852AE disconnection caused by RX full flags
>
> Keith Yeo <keithyjy@gmail.com>
> wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems()
>
> Paolo Bonzini <pbonzini@redhat.com>
> KVM: SEV: only access GHCB fields once
>
> Paolo Bonzini <pbonzini@redhat.com>
> KVM: SEV: snapshot the GHCB before accessing it
>
> Namjae Jeon <linkinjeon@kernel.org>
> ksmbd: fix wrong next length validation of ea buffer in smb2_set_ea()
>
> Long Li <leo.lilong@huawei.com>
> ksmbd: validate command request size
>
> Mario Limonciello <mario.limonciello@amd.com>
> tpm: Add a helper for checking hwrng enabled
>
> Mario Limonciello <mario.limonciello@amd.com>
> tpm: Disable RNG for all AMD fTPMs
>
> Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Revert "loongarch/cpu: Switch to arch_cpu_finalize_init()"
>
> Kees Cook <keescook@chromium.org>
> gcc-plugins: Reorganize gimple includes for GCC 13
>
>
> -------------
>
> Diffstat:
>
> Makefile | 4 +-
> arch/alpha/kernel/setup.c | 3 +-
> arch/loongarch/Kconfig | 1 -
> arch/loongarch/kernel/setup.c | 6 -
> arch/riscv/include/asm/mmio.h | 16 +-
> arch/riscv/kernel/elf_kexec.c | 3 +-
> arch/x86/boot/compressed/idt_64.c | 9 +-
> arch/x86/boot/compressed/sev.c | 37 +++-
> arch/x86/entry/vdso/vma.c | 4 +-
> arch/x86/include/asm/processor.h | 2 +
> arch/x86/kernel/cpu/amd.c | 1 +
> arch/x86/kernel/vmlinux.lds.S | 12 +-
> arch/x86/kvm/svm/sev.c | 94 +++++----
> arch/x86/kvm/svm/svm.h | 26 +++
> arch/x86/kvm/x86.c | 2 -
> drivers/acpi/scan.c | 1 +
> drivers/android/binder.c | 1 +
> drivers/android/binder_alloc.c | 6 +
> drivers/android/binder_alloc.h | 1 +
> drivers/char/tpm/tpm-chip.c | 83 ++------
> drivers/char/tpm/tpm_crb.c | 30 +++
> drivers/cpuidle/dt_idle_genpd.c | 24 +++
> drivers/cpuidle/dt_idle_genpd.h | 7 +
> drivers/dma/mcf-edma.c | 13 +-
> drivers/dma/owl-dma.c | 2 +-
> drivers/dma/pl330.c | 18 +-
> drivers/gpio/gpio-sim.c | 1 +
> drivers/gpio/gpio-ws16c48.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 5 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 +++
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 11 +
> drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +
> drivers/gpu/drm/amd/display/dc/core/dc.c | 74 ++++++-
> drivers/gpu/drm/amd/display/dc/core/dc_link.c | 5 +
> drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 234 ++++++++++++++++++++-
> drivers/gpu/drm/amd/display/dc/dc.h | 6 +
> .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 6 +
> drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 7 +-
> drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c | 8 +
> .../gpu/drm/amd/display/dc/dcn32/dcn32_resource.c | 22 ++
> .../gpu/drm/amd/display/dc/dcn32/dcn32_resource.h | 3 +
> .../drm/amd/display/dc/dcn321/dcn321_resource.c | 1 +
> drivers/gpu/drm/amd/display/dc/inc/core_types.h | 1 +
> .../drm/amd/display/dc/inc/hw/timing_generator.h | 1 +
> drivers/gpu/drm/amd/include/kgd_pp_interface.h | 2 +
> drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 2 +
> drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 58 ++++-
> .../drm/amd/pm/powerplay/hwmgr/hardwaremanager.c | 4 +-
> .../gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c | 16 +-
> .../gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 80 +++++--
> .../gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c | 16 +-
> .../gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c | 27 +--
> .../gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 41 +++-
> .../gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 26 +++
> .../gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 24 +--
> drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 4 +
> drivers/gpu/drm/amd/pm/powerplay/inc/power_state.h | 1 +
> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 42 ++++
> drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 2 +
> drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 9 +-
> drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 9 +-
> drivers/gpu/drm/drm_gem_shmem_helper.c | 6 +
> drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +-
> drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 48 ++++-
> drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h | 1 +
> drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c | 4 +-
> drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.c | 10 +
> drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.c | 1 +
> drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.c | 1 +
> drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c | 1 +
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 17 +-
> drivers/hwmon/pmbus/bel-pfe.c | 16 +-
> drivers/iio/adc/ad7192.c | 16 +-
> drivers/iio/adc/ina2xx-adc.c | 9 +-
> .../common/cros_ec_sensors/cros_ec_sensors_core.c | 2 +-
> drivers/iio/frequency/admv1013.c | 5 +-
> drivers/iio/industrialio-core.c | 5 +-
> drivers/infiniband/core/umem.c | 3 +-
> drivers/infiniband/hw/hfi1/chip.c | 1 +
> drivers/interconnect/qcom/bcm-voter.c | 5 +
> drivers/interconnect/qcom/icc-rpmh.h | 2 +
> drivers/interconnect/qcom/sm8450.c | 9 +
> drivers/isdn/mISDN/dsp.h | 2 +-
> drivers/isdn/mISDN/dsp_cmx.c | 2 +-
> drivers/isdn/mISDN/dsp_core.c | 2 +-
> drivers/misc/cardreader/rts5227.c | 2 +-
> drivers/misc/cardreader/rts5228.c | 18 --
> drivers/misc/cardreader/rts5249.c | 3 +-
> drivers/misc/cardreader/rts5260.c | 18 --
> drivers/misc/cardreader/rts5261.c | 18 --
> drivers/misc/cardreader/rtsx_pcr.c | 5 +-
> drivers/mmc/host/moxart-mmc.c | 8 +-
> drivers/net/bonding/bond_main.c | 4 +-
> drivers/net/dsa/ocelot/felix.c | 2 +
> drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 4 +-
> drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 14 +-
> .../ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | 4 +-
> .../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 24 ++-
> drivers/net/ethernet/ibm/ibmvnic.c | 112 ++++++++--
> drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 5 +-
> drivers/net/ethernet/intel/iavf/iavf_fdir.c | 11 +-
> .../ethernet/marvell/prestera/prestera_router.c | 14 +-
> .../net/ethernet/mellanox/mlx5/core/lag/port_sel.c | 2 +-
> .../net/ethernet/mellanox/mlx5/core/lib/clock.c | 5 +
> drivers/net/ethernet/mellanox/mlx5/core/main.c | 2 +-
> drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 +-
> drivers/net/ethernet/microsoft/mana/mana_en.c | 37 +++-
> drivers/net/macsec.c | 28 +--
> drivers/net/phy/at803x.c | 2 -
> drivers/net/tun.c | 2 +-
> drivers/net/vxlan/vxlan_vnifilter.c | 11 +-
> drivers/net/wireguard/allowedips.c | 8 +-
> drivers/net/wireguard/selftest/allowedips.c | 16 +-
> drivers/net/wireless/realtek/rtw89/mac.c | 2 +-
> drivers/nvme/host/pci.c | 3 +-
> drivers/nvme/host/rdma.c | 3 +-
> drivers/nvme/host/tcp.c | 3 +-
> drivers/platform/x86/serial-multi-instantiate.c | 35 ++-
> drivers/scsi/53c700.c | 2 +-
> drivers/scsi/fnic/fnic.h | 2 +-
> drivers/scsi/fnic/fnic_scsi.c | 6 +-
> drivers/scsi/qedf/qedf_main.c | 18 ++
> drivers/scsi/qedi/qedi_main.c | 18 ++
> drivers/scsi/raid_class.c | 1 +
> drivers/scsi/scsi_proc.c | 30 +--
> drivers/scsi/snic/snic_disc.c | 1 +
> drivers/scsi/storvsc_drv.c | 4 -
> drivers/ufs/host/ufs-renesas.c | 2 +-
> drivers/usb/common/usb-conn-gpio.c | 6 +-
> drivers/usb/dwc3/gadget.c | 9 +-
> drivers/usb/gadget/udc/core.c | 9 +
> drivers/usb/storage/alauda.c | 12 +-
> drivers/usb/typec/altmodes/displayport.c | 18 +-
> drivers/usb/typec/tcpm/tcpm.c | 7 +
> fs/btrfs/block-group.c | 17 +-
> fs/btrfs/block-group.h | 2 +
> fs/btrfs/disk-io.c | 3 +-
> fs/btrfs/extent-tree.c | 5 +-
> fs/btrfs/extent_io.c | 7 +-
> fs/btrfs/inode.c | 10 +-
> fs/btrfs/relocation.c | 45 +++-
> fs/btrfs/tree-checker.c | 14 ++
> fs/nilfs2/inode.c | 8 +
> fs/nilfs2/segment.c | 2 +
> fs/nilfs2/the_nilfs.h | 2 +
> fs/smb/server/smb2misc.c | 10 +-
> fs/smb/server/smb2pdu.c | 9 +-
> include/linux/cpu.h | 2 +
> include/linux/skmsg.h | 1 +
> include/linux/tpm.h | 1 +
> include/net/cfg80211.h | 3 +
> include/net/netfilter/nf_tables.h | 31 ++-
> include/trace/events/tcp.h | 5 +-
> io_uring/openclose.c | 6 +-
> net/core/filter.c | 6 -
> net/core/skmsg.c | 10 +-
> net/core/sock_map.c | 10 +-
> net/dccp/output.c | 2 +-
> net/dccp/proto.c | 10 +-
> net/ipv4/ip_tunnel_core.c | 2 +-
> net/ipv4/nexthop.c | 28 +--
> net/ipv6/ndisc.c | 3 +-
> net/mptcp/protocol.c | 4 +-
> net/mptcp/protocol.h | 1 -
> net/mptcp/subflow.c | 58 ++---
> net/netfilter/nf_tables_api.c | 167 +++++++++------
> net/netfilter/nft_flow_offload.c | 6 +-
> net/netfilter/nft_immediate.c | 8 +-
> net/netfilter/nft_objref.c | 8 +-
> net/netfilter/nft_set_hash.c | 2 -
> net/netfilter/nft_set_pipapo.c | 18 +-
> net/netfilter/nft_set_rbtree.c | 2 -
> net/packet/af_packet.c | 16 +-
> net/sched/sch_netem.c | 59 +++---
> net/smc/af_smc.c | 73 +++++--
> net/tls/tls_device.c | 64 +++---
> net/wireless/nl80211.c | 5 +-
> net/xdp/xsk.c | 1 +
> scripts/gcc-plugins/gcc-common.h | 4 +-
> tools/testing/radix-tree/regression1.c | 2 +-
> tools/testing/selftests/net/fib_nexthops.sh | 10 +
> tools/testing/selftests/net/forwarding/ethtool.sh | 2 +
> .../net/forwarding/ethtool_extended_state.sh | 2 +
> .../selftests/net/forwarding/hw_stats_l3_gre.sh | 2 +
> .../net/forwarding/ip6_forward_instats_vrf.sh | 2 +
> tools/testing/selftests/net/forwarding/lib.sh | 17 ++
> tools/testing/selftests/net/forwarding/settings | 1 +
> .../testing/selftests/net/forwarding/tc_flower.sh | 8 +-
> tools/testing/selftests/net/mptcp/mptcp_join.sh | 6 +-
> tools/testing/selftests/rseq/Makefile | 4 +-
> tools/testing/selftests/rseq/rseq.c | 2 +
> 192 files changed, 1992 insertions(+), 745 deletions(-)
>
>
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-16 16:26 ` Greg Kroah-Hartman
@ 2023-08-26 15:48 ` Greg Kroah-Hartman
2023-08-27 11:21 ` Guenter Roeck
0 siblings, 1 reply; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-26 15:48 UTC (permalink / raw)
To: Guenter Roeck
Cc: stable, patches, linux-kernel, torvalds, akpm, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
On Wed, Aug 16, 2023 at 06:26:47PM +0200, Greg Kroah-Hartman wrote:
> On Mon, Aug 14, 2023 at 07:04:57AM -0700, Guenter Roeck wrote:
> > On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> > > This is the start of the stable review cycle for the 6.1.46 release.
> > > There are 149 patches in this series, all will be posted as a response
> > > to this one. If anyone has any issues with these being applied, please
> > > let me know.
> > >
> > > Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> > > Anything received after that time might be too late.
> >
> > Booting with f2fs root file systems still crashes in this release
> > candidate. Would it make sense to mark f2fs as broken in v6.1.y ?
>
> Ick, yeah, let me dig into this next week and figure out what went
> wrong...
I've now pushed out 6.1.49-rc1 with the last 3 f2fs patches reverted,
and a single objtool fix. Hopefully that should resolve this issue, if
not, please let me know.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-26 15:48 ` Greg Kroah-Hartman
@ 2023-08-27 11:21 ` Guenter Roeck
2023-08-27 16:34 ` Greg Kroah-Hartman
0 siblings, 1 reply; 167+ messages in thread
From: Guenter Roeck @ 2023-08-27 11:21 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, torvalds, akpm, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
On Sat, Aug 26, 2023 at 05:48:59PM +0200, Greg Kroah-Hartman wrote:
> On Wed, Aug 16, 2023 at 06:26:47PM +0200, Greg Kroah-Hartman wrote:
> > On Mon, Aug 14, 2023 at 07:04:57AM -0700, Guenter Roeck wrote:
> > > On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> > > > This is the start of the stable review cycle for the 6.1.46 release.
> > > > There are 149 patches in this series, all will be posted as a response
> > > > to this one. If anyone has any issues with these being applied, please
> > > > let me know.
> > > >
> > > > Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> > > > Anything received after that time might be too late.
> > >
> > > Booting with f2fs root file systems still crashes in this release
> > > candidate. Would it make sense to mark f2fs as broken in v6.1.y ?
> >
> > Ick, yeah, let me dig into this next week and figure out what went
> > wrong...
>
> I've now pushed out 6.1.49-rc1 with the last 3 f2fs patches reverted,
> and a single objtool fix. Hopefully that should resolve this issue, if
> not, please let me know.
>
That does fix the problem.
Thanks,
Guenter
^ permalink raw reply [flat|nested] 167+ messages in thread
* Re: [PATCH 6.1 000/149] 6.1.46-rc1 review
2023-08-27 11:21 ` Guenter Roeck
@ 2023-08-27 16:34 ` Greg Kroah-Hartman
0 siblings, 0 replies; 167+ messages in thread
From: Greg Kroah-Hartman @ 2023-08-27 16:34 UTC (permalink / raw)
To: Guenter Roeck
Cc: stable, patches, linux-kernel, torvalds, akpm, shuah, patches,
lkft-triage, pavel, jonathanh, f.fainelli, sudipm.mukherjee, srw,
rwarsow, conor
On Sun, Aug 27, 2023 at 04:21:40AM -0700, Guenter Roeck wrote:
> On Sat, Aug 26, 2023 at 05:48:59PM +0200, Greg Kroah-Hartman wrote:
> > On Wed, Aug 16, 2023 at 06:26:47PM +0200, Greg Kroah-Hartman wrote:
> > > On Mon, Aug 14, 2023 at 07:04:57AM -0700, Guenter Roeck wrote:
> > > > On Sun, Aug 13, 2023 at 11:17:25PM +0200, Greg Kroah-Hartman wrote:
> > > > > This is the start of the stable review cycle for the 6.1.46 release.
> > > > > There are 149 patches in this series, all will be posted as a response
> > > > > to this one. If anyone has any issues with these being applied, please
> > > > > let me know.
> > > > >
> > > > > Responses should be made by Tue, 15 Aug 2023 21:16:53 +0000.
> > > > > Anything received after that time might be too late.
> > > >
> > > > Booting with f2fs root file systems still crashes in this release
> > > > candidate. Would it make sense to mark f2fs as broken in v6.1.y ?
> > >
> > > Ick, yeah, let me dig into this next week and figure out what went
> > > wrong...
> >
> > I've now pushed out 6.1.49-rc1 with the last 3 f2fs patches reverted,
> > and a single objtool fix. Hopefully that should resolve this issue, if
> > not, please let me know.
> >
>
> That does fix the problem.
Wonderful, thanks for testing.
greg k-h
^ permalink raw reply [flat|nested] 167+ messages in thread
end of thread, other threads:[~2023-08-27 16:34 UTC | newest]
Thread overview: 167+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 001/149] gcc-plugins: Reorganize gimple includes for GCC 13 Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 002/149] Revert "loongarch/cpu: Switch to arch_cpu_finalize_init()" Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 003/149] tpm: Disable RNG for all AMD fTPMs Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 004/149] tpm: Add a helper for checking hwrng enabled Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 005/149] ksmbd: validate command request size Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 006/149] ksmbd: fix wrong next length validation of ea buffer in smb2_set_ea() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 007/149] KVM: SEV: snapshot the GHCB before accessing it Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 008/149] KVM: SEV: only access GHCB fields once Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 009/149] wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 010/149] wifi: rtw89: fix 8852AE disconnection caused by RX full flags Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 011/149] selftests: forwarding: Set default IPv6 traceroute utility Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 012/149] wireguard: allowedips: expand maximum node depth Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 013/149] mmc: moxart: read scr register without changing byte order Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 014/149] ipv6: adjust ndisc_is_useropt() to also return true for PIO Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 015/149] selftests: mptcp: join: fix delete and re-add test Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 016/149] selftests: mptcp: join: fix implicit EP test Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 017/149] mptcp: avoid bogus reset on fallback close Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 018/149] mptcp: fix disconnect vs accept race Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 019/149] dmaengine: pl330: Return DMA_PAUSED when transaction is paused Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 020/149] net: mana: Fix MANA VF unload when hardware is unresponsive Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 021/149] riscv/kexec: load initrd high in available memory Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 022/149] riscv,mmio: Fix readX()-to-delay() ordering Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 023/149] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 024/149] nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 025/149] drm/nouveau/gr: enable memory loads on helper invocation on all channels Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 026/149] drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issues Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 027/149] drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 028/149] drm/amdgpu: fix possible UAF in amdgpu_cs_pass1() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 029/149] drm/amd/display: check attr flag before set cursor degamma on DCN3+ Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 030/149] drm/amdgpu: add S/G display parameter Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 031/149] drm/amd: Disable S/G for APUs when 64GB or more host memory Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 032/149] drm/amd/display: limit DPIA link rate to HBR3 Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 033/149] cpuidle: dt_idle_genpd: Add helper function to remove genpd topology Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 034/149] hwmon: (pmbus/bel-pfe) Enable PMBUS_SKIP_STATUS_CHECK for pfe1100 Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 035/149] radix tree test suite: fix incorrect allocation size for pthreads Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 036/149] nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 037/149] drm/amd/pm: fulfill swsmu peak profiling mode shader/memory clock settings Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 038/149] drm/amd/pm: expose swctf threshold setting for legacy powerplay Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 039/149] drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 040/149] drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuation Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 041/149] drm/amd/display: Handle virtual hardware detect Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 042/149] drm/amd/display: Add function for validate and update new stream Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 043/149] drm/amd/display: Handle seamless boot stream Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 044/149] drm/amd/display: Update OTG instance in the commit stream Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 045/149] drm/amd/display: Avoid ABM when ODM combine is enabled for eDP Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 046/149] drm/amd/display: Use update plane and stream routine for DCN32x Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 047/149] drm/amd/display: Disable phantom OTG after enable for plane disable Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 048/149] drm/amd/display: Retain phantom plane/stream if validation fails Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 049/149] drm/amd/display: fix the build when DRM_AMD_DC_DCN is not set Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 050/149] drm/amd/display: trigger timing sync only if TG is running Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 051/149] io_uring: correct check for O_TMPFILE Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 052/149] iio: cros_ec: Fix the allocation size for cros_ec_command Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 053/149] iio: frequency: admv1013: propagate errors from regulator_get_voltage() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 054/149] iio: adc: ad7192: Fix ac excitation feature Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 055/149] iio: adc: ina2xx: avoid NULL pointer dereference on OF device match Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 056/149] binder: fix memory leak in binder_init() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 057/149] misc: rtsx: judge ASPM Mode to set PETXCFG Reg Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 058/149] usb-storage: alauda: Fix uninit-value in alauda_check_media() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 059/149] usb: dwc3: Properly handle processing of pending events Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 060/149] USB: Gadget: core: Help prevent panic during UVC unconfigure Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 061/149] usb: common: usb-conn-gpio: Prevent bailing out if initial role is none Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 062/149] usb: typec: tcpm: Fix response to vsafe0V event Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 063/149] usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 064/149] x86/srso: Fix build breakage with the LLVM linker Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 065/149] x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405 Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 066/149] x86/mm: Fix VDSO and VVAR placement on 5-level paging machines Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 067/149] x86/sev: Do not try to parse for the CC blob on non-AMD hardware Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 068/149] x86/speculation: Add cpu_show_gds() prototype Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 069/149] x86: Move gds_ucode_mitigated() declaration to header Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 070/149] drm/nouveau/disp: Revert a NULL check inside nouveau_connector_get_modes Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 071/149] netfilter: nf_tables: dont skip expired elements during walk Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 072/149] iio: core: Prevent invalid memory access when there is no parent Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 073/149] interconnect: qcom: Add support for mask-based BCMs Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 074/149] interconnect: qcom: sm8450: add enable_mask for bcm nodes Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 075/149] selftests/rseq: Fix build with undefined __weak Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 076/149] selftests: forwarding: Add a helper to skip test when using veth pairs Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 077/149] selftests: forwarding: ethtool: Skip " Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 078/149] selftests: forwarding: ethtool_extended_state: " Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 079/149] selftests: forwarding: hw_stats_l3_gre: " Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 080/149] selftests: forwarding: Skip test when no interfaces are specified Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 081/149] selftests: forwarding: Switch off timeout Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 082/149] selftests: forwarding: tc_flower: Relax success criterion Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 083/149] net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 084/149] bpf, sockmap: Fix map type error in sock_map_del_link Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 085/149] bpf, sockmap: Fix bug that strp_done cannot be called Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 086/149] mISDN: Update parameter type of dsp_cmx_send() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 087/149] macsec: use DEV_STATS_INC() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 088/149] mptcp: fix the incorrect judgment for msk->cb_flags Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 089/149] net/packet: annotate data-races around tp->status Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 090/149] net/smc: Use correct buffer sizes when switching between TCP and SMC Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 091/149] tcp: add missing family to tcp_set_ca_state() tracepoint Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 092/149] tunnels: fix kasan splat when generating ipv4 pmtu error Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 093/149] xsk: fix refcount underflow in error path Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 094/149] bonding: Fix incorrect deletion of ETH_P_8021AD protocol vid from slaves Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 095/149] dccp: fix data-race around dp->dccps_mss_cache Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 096/149] drivers: net: prevent tun_build_skb() to exceed the packet size limit Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 097/149] drivers: vxlan: vnifilter: free percpu vni stats on error path Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 098/149] iavf: fix potential races for FDIR filters Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 099/149] IB/hfi1: Fix possible panic during hotplug remove Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 100/149] drm/rockchip: Dont spam logs in atomic check Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 101/149] wifi: cfg80211: fix sband iftype data lookup for AP_VLAN Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 102/149] RDMA/umem: Set iova in ODP flow Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 103/149] net: tls: avoid discarding data on record close Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 104/149] net: marvell: prestera: fix handling IPv4 routes with nhid Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 105/149] net: phy: at803x: remove set/get wol callbacks for AR8032 Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 106/149] net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 107/149] net: hns3: refactor hclge_mac_link_status_wait for interface reuse Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 108/149] net: hns3: add wait until mac link down Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 109/149] net: hns3: fix deadlock issue when externel_lb and reset are executed together Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 110/149] nexthop: Fix infinite nexthop dump when using maximum nexthop ID Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 111/149] nexthop: Make nexthop bucket dump more efficient Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 112/149] nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 113/149] net: hns3: fix strscpy causing content truncation issue Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 114/149] dmaengine: mcf-edma: Fix a potential un-allocated memory access Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 115/149] dmaengine: owl-dma: Modify mismatched function name Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 116/149] net/mlx5: Allow 0 for total host VFs Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 117/149] net/mlx5: LAG, Check correct bucket when modifying LAG Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 118/149] net/mlx5: Skip clock update work when device is in error state Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 119/149] net/mlx5: Reload auxiliary devices in pci error handlers Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 120/149] ibmvnic: Enforce stronger sanity checks on login response Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 121/149] ibmvnic: Unmap DMA login rsp buffer on send login fail Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 122/149] ibmvnic: Handle DMA unmapping of login buffs in release functions Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 123/149] ibmvnic: Do partial reset on login failure Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 124/149] ibmvnic: Ensure login failure recovery is safe from other resets Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 125/149] gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 126/149] gpio: sim: mark the GPIO chip as a one that can sleep Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 127/149] btrfs: wait for actual caching progress during allocation Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 128/149] btrfs: dont stop integrity writeback too early Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 129/149] btrfs: properly clear end of the unreserved range in cow_file_range Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 130/149] btrfs: exit gracefully if reloc roots dont match Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 131/149] btrfs: reject invalid reloc tree root keys with stack dump Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 132/149] btrfs: set cache_block_group_error if we find an error Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 133/149] nvme-tcp: fix potential unbalanced freeze & unfreeze Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 134/149] nvme-rdma: " Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 135/149] netfilter: nf_tables: report use refcount overflow Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 136/149] scsi: core: Fix legacy /proc parsing buffer overflow Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 137/149] scsi: storvsc: Fix handling of virtual Fibre Channel timeouts Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 138/149] scsi: ufs: renesas: Fix private allocation Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 139/149] scsi: 53c700: Check that command slot is not NULL Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 140/149] scsi: snic: Fix possible memory leak if device_add() fails Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 141/149] scsi: core: " Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 142/149] scsi: fnic: Replace return codes in fnic_clean_pending_aborts() Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 143/149] scsi: qedi: Fix firmware halt over suspend and resume Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 144/149] scsi: qedf: " Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 145/149] platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551 Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 146/149] ACPI: scan: Create platform device for CS35L56 Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 147/149] alpha: remove __init annotation from exported page_is_ram() Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 148/149] sch_netem: fix issues in netem_change() vs get_dist_table() Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 149/149] drm/amd/pm/smu7: move variables to where they are used Greg Kroah-Hartman
2023-08-14 5:11 ` [PATCH 6.1 000/149] 6.1.46-rc1 review Bagas Sanjaya
2023-08-14 10:33 ` Takeshi Ogasawara
2023-08-14 14:04 ` Guenter Roeck
2023-08-16 16:26 ` Greg Kroah-Hartman
2023-08-26 15:48 ` Greg Kroah-Hartman
2023-08-27 11:21 ` Guenter Roeck
2023-08-27 16:34 ` Greg Kroah-Hartman
2023-08-14 14:06 ` Conor Dooley
2023-08-14 14:50 ` Thierry Reding
2023-08-14 17:35 ` SeongJae Park
2023-08-14 18:33 ` Guenter Roeck
2023-08-15 0:30 ` Ron Economos
2023-08-15 0:48 ` Shuah Khan
2023-08-15 3:37 ` Daniel Díaz
2023-08-15 16:25 ` Florian Fainelli
2023-08-15 17:09 ` Allen Pais
2023-08-16 22:23 ` Joel Fernandes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).