* [PATCH 6.6 000/134] 6.6.5-rc1 review
@ 2023-12-05 3:14 Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 001/134] leds: class: Dont expose color sysfs entry Greg Kroah-Hartman
` (146 more replies)
0 siblings, 147 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 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, allen.lkml
This is the start of the stable review cycle for the 6.6.5 release.
There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Linux 6.6.5-rc1
Sean Christopherson <seanjc@google.com>
vfio: Drop vfio_file_iommu_group() stub to fudge around a KVM wart
Juergen Gross <jgross@suse.com>
x86/xen: fix percpu vcpu_info allocation
Brett Creeley <brett.creeley@amd.com>
vfio/pds: Fix possible sleep while in atomic context
Brett Creeley <brett.creeley@amd.com>
vfio/pds: Fix mutex lock->magic != lock warning
Ilya Bakoulin <ilya.bakoulin@amd.com>
drm/amd/display: Fix MPCC 1DLUT programming
Camille Cho <camille.cho@amd.com>
drm/amd/display: Simplify brightness initialization
Swapnil Patel <swapnil.patel@amd.com>
drm/amd/display: Reduce default backlight min from 5 nits to 1 nits
Sherry Wang <yao.wang1@amd.com>
drm/amd/display: refactor ILR to make it work
Daniel Mentz <danielmentz@google.com>
iommu: Fix printk arg in of_iommu_get_resv_regions()
Dinghao Liu <dinghao.liu@zju.edu.cn>
drm/amd/pm: fix a memleak in aldebaran_tables_init
Ayush Jain <ayush.jain3@amd.com>
cpufreq/amd-pstate: Only print supported EPP values for performance governor
Wyes Karny <wyes.karny@amd.com>
cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update
Yang Yingliang <yangyingliang@huawei.com>
drm/panel: nt36523: fix return value check in nt36523_probe()
xiazhengqiao <xiazhengqiao@huaqin.corp-partner.google.com>
drm/panel: starry-2081101qfh032011-53g: Fine tune the panel power sequence
Tvrtko Ursulin <tvrtko.ursulin@intel.com>
drm/i915/gsc: Mark internal GSC engine with reserved uabi class
Lu Baolu <baolu.lu@linux.intel.com>
iommu/vt-d: Make context clearing consistent with context mapping
Lu Baolu <baolu.lu@linux.intel.com>
iommu/vt-d: Disable PCI ATS in legacy passthrough mode
Lu Baolu <baolu.lu@linux.intel.com>
iommu/vt-d: Omit devTLB invalidation requests when TES=0
Christoph Niedermaier <cniedermaier@dh-electronics.com>
cpufreq: imx6q: Don't disable 792 Mhz OPP unnecessarily
Agustin Gutierrez <agustin.gutierrez@amd.com>
drm/amd/display: Remove power sequencing check
Ian Chen <ian.chen@amd.com>
drm/amd/display: Refactor edp power control
Heiko Carstens <hca@linux.ibm.com>
s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir
Gaurav Batra <gbatra@linux.vnet.ibm.com>
powerpc/pseries/iommu: enable_ddw incorrectly returns direct mapping for SR-IOV device
Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
net: ravb: Keep reverse order of operations in ravb_remove()
Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
net: ravb: Stop DMA in case of failures on ravb_open()
Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
net: ravb: Start TX queues after HW initialization succeeded
Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
net: ravb: Make write access to CXR35 first before accessing other EMAC registers
Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
net: ravb: Use pm_runtime_resume_and_get()
Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
net: ravb: Check return value of reset_control_deassert()
Dave Ertman <david.m.ertman@intel.com>
ice: Fix VF Reset paths when interface in a failed over aggregate
John Fastabend <john.fastabend@gmail.com>
bpf, sockmap: af_unix stream sockets need to hold ref for pair sock
Jakub Kicinski <kuba@kernel.org>
ethtool: don't propagate EOPNOTSUPP from dumps
Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
ravb: Fix races between ravb_tx_timeout_work() and net related ops
Heiner Kallweit <hkallweit1@gmail.com>
r8169: prevent potential deadlock in rtl8169_close
Michael Roth <michael.roth@amd.com>
efi/unaccepted: Fix off-by-one when checking for overlapping ranges
Gustavo A. R. Silva <gustavoars@kernel.org>
neighbour: Fix __randomize_layout crash in struct neighbour
Subbaraya Sundeep <sbhatta@marvell.com>
octeontx2-pf: Restore TC ingress police rules when interface is up
Geetha sowjanya <gakula@marvell.com>
octeontx2-pf: Fix adding mbox work queue entry when num_vfs > 64
Furong Xu <0x1207@gmail.com>
net: stmmac: xgmac: Disable FPE MMC interrupts
Elena Salomatkina <elena.salomatkina.cmc@gmail.com>
octeontx2-af: Fix possible buffer overflow
Willem de Bruijn <willemb@google.com>
selftests/net: mptcp: fix uninitialized variable warnings
Willem de Bruijn <willemb@google.com>
selftests/net: unix: fix unused variable compiler warning
Willem de Bruijn <willemb@google.com>
selftests/net: fix a char signedness issue
Willem de Bruijn <willemb@google.com>
selftests/net: ipsec: fix constant out of range
Dmitry Antipov <dmantipov@yandex.ru>
uapi: propagate __struct_group() attributes to the container union
Hou Tao <houtao1@huawei.com>
bpf: Add missed allocation hint for bpf_mem_cache_alloc_flags()
Ioana Ciornei <ioana.ciornei@nxp.com>
dpaa2-eth: recycle the RX buffer only after all processing done
Ioana Ciornei <ioana.ciornei@nxp.com>
dpaa2-eth: increase the needed headroom to account for alignment
Greg Ungerer <gerg@kernel.org>
net: dsa: mv88e6xxx: fix marvell 6350 probe crash
Greg Ungerer <gerg@kernel.org>
net: dsa: mv88e6xxx: fix marvell 6350 switch probing
Oldřich Jedlička <oldium.pro@gmail.com>
wifi: mac80211: do not pass AP_VLAN vif pointer to drivers during flush
Dan Carpenter <dan.carpenter@linaro.org>
wifi: iwlwifi: mvm: fix an error code in iwl_mvm_mld_add_sta()
Zhengchao Shao <shaozhengchao@huawei.com>
ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet
Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
net: rswitch: Fix missing dev_kfree_skb_any() in error path
Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
net: rswitch: Fix return value in rswitch_start_xmit()
Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
net: rswitch: Fix type of ret in rswitch_start_xmit()
Stanislav Fomichev <sdf@google.com>
netdevsim: Don't accept device bound programs
Dan Carpenter <dan.carpenter@linaro.org>
media: v4l2-subdev: Fix a 64bit bug
Antonio Borneo <antonio.borneo@foss.st.com>
pinctrl: stm32: fix array read out of bound
Chen Ni <nichen@iscas.ac.cn>
pinctrl: stm32: Add check for devm_kcalloc
Johannes Berg <johannes.berg@intel.com>
wifi: cfg80211: fix CQM for non-range use
Jens Axboe <axboe@kernel.dk>
io_uring/kbuf: recycle freed mapped buffer ring entries
Jens Axboe <axboe@kernel.dk>
io_uring/kbuf: defer release of mapped buffer rings
Jens Axboe <axboe@kernel.dk>
io_uring: enable io_mem_alloc/free to be used in other parts
David Sterba <dsterba@suse.com>
btrfs: fix 64bit compat send ioctl arguments not initializing version member
Qu Wenruo <wqu@suse.com>
btrfs: free the allocated memory if btrfs_alloc_page_array() fails
Filipe Manana <fdmanana@suse.com>
btrfs: make error messages more clear when getting a chunk map
Jann Horn <jannh@google.com>
btrfs: send: ensure send_fd is writable
Filipe Manana <fdmanana@suse.com>
btrfs: fix off-by-one when checking chunk map includes logical address
Bragatheswaran Manickavel <bragathemanick0908@gmail.com>
btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod()
Qu Wenruo <wqu@suse.com>
btrfs: add dmesg output for first mount and last unmount of a filesystem
Helge Deller <deller@gmx.de>
parisc: Mark altinstructions read-only and 32-bit aligned
Helge Deller <deller@gmx.de>
parisc: Ensure 32-bit alignment on parisc unwind section
Helge Deller <deller@gmx.de>
parisc: Mark jump_table naturally aligned
Helge Deller <deller@gmx.de>
parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes
Helge Deller <deller@gmx.de>
parisc: Mark lock_aligned variables 16-byte aligned on SMP
Helge Deller <deller@gmx.de>
parisc: Use natural CPU alignment for bug_table
Helge Deller <deller@gmx.de>
parisc: Mark ex_table entries 32-bit aligned in uaccess.h
Helge Deller <deller@gmx.de>
parisc: Mark ex_table entries 32-bit aligned in assembly.h
Timothy Pearson <tpearson@raptorengineering.com>
powerpc: Don't clobber f0/vs0 during fp|altivec register save
Nicholas Piggin <npiggin@gmail.com>
KVM: PPC: Book3S HV: Fix KVM_RUN clobbering FP/VEC user registers
Abdul Halim, Mohd Syazwan <mohd.syazwan.abdul.halim@intel.com>
iommu/vt-d: Add MTL to quirk list to skip TE disabling
Ritesh Harjani (IBM) <ritesh.list@gmail.com>
ext2: Fix ki_pos update for DIO buffered-io fallback case
Markus Weippert <markus@gekmihesg.de>
bcache: revert replacing IS_ERR_OR_NULL with IS_ERR
Robin Murphy <robin.murphy@arm.com>
iommu: Avoid more races around device probe
Jens Axboe <axboe@kernel.dk>
io_uring: don't guard IORING_OFF_PBUF_RING with SETUP_NO_MMAP
Christian König <christian.koenig@amd.com>
dma-buf: fix check in dma_resv_add_fence
Gautham R. Shenoy <gautham.shenoy@amd.com>
cpufreq/amd-pstate: Fix the return value of amd_pstate_fast_switch()
Lukasz Luba <lukasz.luba@arm.com>
powercap: DTPM: Fix unneeded conversions to micro-Watts
Dave Airlie <airlied@redhat.com>
nouveau: find the smallest page allocation to cover a buffer alloc.
Jens Axboe <axboe@kernel.dk>
io_uring: free io_buffer_list entries via RCU
Lu Baolu <baolu.lu@linux.intel.com>
iommu/vt-d: Fix incorrect cache invalidation for mm notification
Jens Axboe <axboe@kernel.dk>
io_uring: don't allow discontig pages for IORING_SETUP_NO_MMAP
Hans de Goede <hdegoede@redhat.com>
ACPI: video: Use acpi_video_device for cooling-dev driver data
Heiner Kallweit <hkallweit1@gmail.com>
r8169: fix deadlock on RTL8125 in jumbo mtu mode
Ewan D. Milne <emilne@redhat.com>
nvme: check for valid nvme_identify_ns() before using it
Wu Bo <bo.wu@vivo.com>
dm verity: don't perform FEC for failed readahead IO
Wu Bo <bo.wu@vivo.com>
dm verity: initialize fec io before freeing it
Zhongwei <zhongwei.zhang@amd.com>
drm/amd/display: force toggle rate wa for first link training for a retimer
Hamza Mahfooz <hamza.mahfooz@amd.com>
drm/amd/display: fix ABM disablement
Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
drm/amd/display: Update min Z8 residency time to 2100 for DCN314
Alvin Lee <alvin.lee2@amd.com>
drm/amd/display: Use DRAM speed from validation for dummy p-state
Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
drm/amd/display: Remove min_dst_y_next_start check for Z8
Alvin Lee <alvin.lee2@amd.com>
drm/amd/display: Include udelay when waiting for INBOX0 ACK
Candice Li <candice.li@amd.com>
drm/amdgpu: Update EEPROM I2C address for smu v13_0_0
Tim Huang <Tim.Huang@amd.com>
drm/amdgpu: fix memory overflow in the IB test
Alex Sierra <alex.sierra@amd.com>
drm/amdgpu: Force order between a read and write to the same address
Prike Liang <Prike.Liang@amd.com>
drm/amdgpu: correct the amdgpu runtime dereference usage count
Mario Limonciello <mario.limonciello@amd.com>
drm/amd: Enable PCIe PME from D3
Peter Wang <peter.wang@mediatek.com>
scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode
Damien Le Moal <dlemoal@kernel.org>
scsi: sd: Fix system start for ATA devices
Damien Le Moal <dlemoal@kernel.org>
scsi: Change SCSI device boolean fields to single bit flags
Mikulas Patocka <mpatocka@redhat.com>
dm-verity: align struct dm_verity_fec_io properly
Jiawen Wu <jiawenwu@trustnetic.com>
net: libwx: fix memory leak on msix entry
Kailang Yang <kailang@realtek.com>
ALSA: hda/realtek: Add supported ALC257 for ChromeOS
Kailang Yang <kailang@realtek.com>
ALSA: hda/realtek: Headset Mic VREF to 100%
Takashi Iwai <tiwai@suse.de>
ALSA: hda: Disable power-save on KONTRON SinglePC
Ville Syrjälä <ville.syrjala@linux.intel.com>
drm/i915: Also check for VGA converter in eDP probe
Adrian Hunter <adrian.hunter@intel.com>
mmc: block: Be sure to wait while busy in CQE error recovery
Adrian Hunter <adrian.hunter@intel.com>
mmc: block: Do not lose cache flush during CQE error recovery
Adrian Hunter <adrian.hunter@intel.com>
mmc: block: Retry commands in CQE error recovery
Adrian Hunter <adrian.hunter@intel.com>
mmc: cqhci: Fix task clearing in CQE error recovery
Adrian Hunter <adrian.hunter@intel.com>
mmc: cqhci: Warn of halt or task clear failure
Adrian Hunter <adrian.hunter@intel.com>
mmc: cqhci: Increase recovery halt timeout
Wenchao Chen <wenchao.chen@unisoc.com>
mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled
Kornel Dulęba <korneld@chromium.org>
mmc: sdhci-pci-gli: Disable LPM during initialization
Yang Yingliang <yangyingliang@huawei.com>
firewire: core: fix possible memory leak in create_units()
Maria Yu <quic_aiquny@quicinc.com>
pinctrl: avoid reload of p state in list iteration
Namjae Jeon <linkinjeon@kernel.org>
ksmbd: fix possible deadlock in smb2_open
Paulo Alcantara <pc@manguebit.com>
smb: client: report correct st_size for SMB and NFS symlinks
Paulo Alcantara <pc@manguebit.com>
smb: client: fix missing mode bits for SMB symlinks
David Howells <dhowells@redhat.com>
cifs: Fix FALLOC_FL_INSERT_RANGE by setting i_size after EOF moved
David Howells <dhowells@redhat.com>
cifs: Fix FALLOC_FL_ZERO_RANGE by setting i_size if EOF moved
Takashi Iwai <tiwai@suse.de>
leds: class: Don't expose color sysfs entry
-------------
Diffstat:
Documentation/ABI/testing/sysfs-class-led | 9 --
Makefile | 4 +-
arch/parisc/include/asm/alternative.h | 9 +-
arch/parisc/include/asm/assembly.h | 1 +
arch/parisc/include/asm/bug.h | 30 ++--
arch/parisc/include/asm/jump_label.h | 8 +-
arch/parisc/include/asm/ldcw.h | 2 +-
arch/parisc/include/asm/uaccess.h | 1 +
arch/parisc/include/uapi/asm/errno.h | 2 -
arch/parisc/kernel/vmlinux.lds.S | 1 +
arch/powerpc/kernel/fpu.S | 13 ++
arch/powerpc/kernel/process.c | 6 +-
arch/powerpc/kernel/vector.S | 2 +
arch/powerpc/platforms/pseries/iommu.c | 8 +-
arch/s390/mm/page-states.c | 6 +
arch/x86/xen/enlighten.c | 6 +-
arch/x86/xen/xen-ops.h | 2 +-
drivers/acpi/acpi_video.c | 14 +-
drivers/acpi/scan.c | 7 +-
drivers/ata/libata-scsi.c | 9 +-
drivers/cpufreq/amd-pstate.c | 71 +++++++--
drivers/cpufreq/imx6q-cpufreq.c | 2 +-
drivers/dma-buf/dma-resv.c | 2 +-
drivers/firewire/core-device.c | 11 +-
drivers/firewire/sbp2.c | 6 +-
drivers/firmware/efi/unaccepted_memory.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 9 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c | 6 +
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 10 +-
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 4 +-
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 +-
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 4 +-
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 +-
drivers/gpu/drm/amd/display/dc/core/dc.c | 21 +++
drivers/gpu/drm/amd/display/dc/dc.h | 5 +-
drivers/gpu/drm/amd/display/dc/dc_stream.h | 1 -
drivers/gpu/drm/amd/display/dc/dc_types.h | 4 -
.../amd/display/dc/dce110/dce110_hw_sequencer.c | 2 +-
.../gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c | 3 +-
.../drm/amd/display/dc/dcn314/dcn314_resource.c | 2 +-
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c | 6 +-
.../gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c | 15 +-
.../gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c | 3 +-
drivers/gpu/drm/amd/display/dc/inc/link.h | 1 +
.../gpu/drm/amd/display/dc/link/link_detection.c | 8 +-
drivers/gpu/drm/amd/display/dc/link/link_dpms.c | 11 +-
drivers/gpu/drm/amd/display/dc/link/link_factory.c | 1 +
.../display/dc/link/protocols/link_dp_capability.c | 14 +-
.../amd/display/dc/link/protocols/link_dp_phy.c | 3 +-
.../link_dp_training_fixed_vs_pe_retimer.c | 6 +-
.../dc/link/protocols/link_edp_panel_control.c | 62 ++++++--
.../dc/link/protocols/link_edp_panel_control.h | 4 +-
drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c | 1 +
.../drm/amd/include/asic_reg/gc/gc_11_0_0_offset.h | 2 +
drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 5 +-
drivers/gpu/drm/i915/display/intel_dp.c | 28 +++-
drivers/gpu/drm/i915/gt/intel_engine_user.c | 39 ++---
drivers/gpu/drm/nouveau/nouveau_bo.c | 5 +-
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c | 1 +
drivers/gpu/drm/panel/panel-novatek-nt36523.c | 4 +-
drivers/iommu/intel/dmar.c | 18 +++
drivers/iommu/intel/iommu.c | 9 +-
drivers/iommu/intel/svm.c | 26 ++++
drivers/iommu/iommu.c | 20 +--
drivers/iommu/of_iommu.c | 14 +-
drivers/leds/led-class.c | 14 --
drivers/md/bcache/btree.c | 2 +-
drivers/md/dm-verity-fec.c | 3 +-
drivers/md/dm-verity-target.c | 7 +-
drivers/md/dm-verity.h | 6 -
drivers/mmc/core/block.c | 2 +
drivers/mmc/core/core.c | 9 +-
drivers/mmc/host/cqhci-core.c | 44 +++---
drivers/mmc/host/sdhci-pci-gli.c | 54 ++++---
drivers/mmc/host/sdhci-sprd.c | 25 +++
drivers/net/dsa/mv88e6xxx/chip.c | 26 +++-
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 16 +-
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 2 +-
drivers/net/ethernet/intel/ice/ice_lag.c | 122 +++++++++------
drivers/net/ethernet/intel/ice/ice_lag.h | 1 +
drivers/net/ethernet/intel/ice/ice_vf_lib.c | 20 +++
drivers/net/ethernet/intel/ice/ice_virtchnl.c | 25 +++
.../net/ethernet/marvell/octeontx2/af/rvu_nix.c | 4 +-
drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c | 3 +
.../ethernet/marvell/octeontx2/nic/otx2_common.h | 2 +
.../net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 9 +-
.../net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 120 ++++++++++++---
drivers/net/ethernet/realtek/r8169_main.c | 9 +-
drivers/net/ethernet/renesas/ravb_main.c | 69 ++++++---
drivers/net/ethernet/renesas/rswitch.c | 22 +--
drivers/net/ethernet/stmicro/stmmac/mmc_core.c | 4 +
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 2 +-
drivers/net/netdevsim/bpf.c | 4 +-
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c | 4 +-
drivers/nvme/host/core.c | 9 ++
drivers/pinctrl/core.c | 6 +-
drivers/pinctrl/stm32/pinctrl-stm32.c | 13 +-
drivers/powercap/dtpm_cpu.c | 6 +-
drivers/powercap/dtpm_devfreq.c | 11 +-
drivers/scsi/sd.c | 9 +-
drivers/ufs/core/ufshcd.c | 13 ++
drivers/vfio/pci/pds/pci_drv.c | 4 +-
drivers/vfio/pci/pds/vfio_dev.c | 30 ++--
drivers/vfio/pci/pds/vfio_dev.h | 2 +-
fs/btrfs/disk-io.c | 1 +
fs/btrfs/extent_io.c | 11 +-
fs/btrfs/ioctl.c | 1 +
fs/btrfs/ref-verify.c | 2 +
fs/btrfs/send.c | 2 +-
fs/btrfs/super.c | 5 +-
fs/btrfs/volumes.c | 9 +-
fs/ext2/file.c | 1 -
fs/smb/client/inode.c | 4 +-
fs/smb/client/smb2ops.c | 13 +-
fs/smb/server/smb2pdu.c | 47 +++---
fs/smb/server/smbacl.c | 7 +-
fs/smb/server/smbacl.h | 2 +-
fs/smb/server/vfs.c | 68 +++++----
fs/smb/server/vfs.h | 10 +-
include/linux/amd-pstate.h | 4 +
include/linux/dma-fence.h | 15 ++
include/linux/io_uring_types.h | 3 +
include/linux/iommu.h | 1 +
include/linux/skmsg.h | 1 +
include/linux/vfio.h | 8 +-
include/net/af_unix.h | 1 +
include/net/neighbour.h | 2 +-
include/scsi/scsi_device.h | 12 +-
include/uapi/linux/stddef.h | 2 +-
include/uapi/linux/v4l2-subdev.h | 2 +-
io_uring/io_uring.c | 59 +++----
io_uring/io_uring.h | 3 +
io_uring/kbuf.c | 169 ++++++++++++++++++---
io_uring/kbuf.h | 5 +
kernel/bpf/memalloc.c | 2 +
lib/errname.c | 6 -
net/core/skmsg.c | 2 +
net/ethtool/netlink.c | 1 +
net/ipv4/igmp.c | 6 +-
net/mac80211/driver-ops.h | 9 +-
net/unix/af_unix.c | 2 -
net/unix/unix_bpf.c | 5 +
net/wireless/core.h | 1 +
net/wireless/nl80211.c | 50 +++---
sound/pci/hda/hda_intel.c | 2 +
sound/pci/hda/patch_realtek.c | 12 ++
tools/arch/parisc/include/uapi/asm/errno.h | 2 -
tools/testing/selftests/net/af_unix/diag_uid.c | 1 -
tools/testing/selftests/net/cmsg_sender.c | 2 +-
tools/testing/selftests/net/ipsec.c | 4 +-
tools/testing/selftests/net/mptcp/mptcp_connect.c | 11 +-
tools/testing/selftests/net/mptcp/mptcp_inq.c | 11 +-
153 files changed, 1333 insertions(+), 624 deletions(-)
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 001/134] leds: class: Dont expose color sysfs entry
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 002/134] cifs: Fix FALLOC_FL_ZERO_RANGE by setting i_size if EOF moved Greg Kroah-Hartman
` (145 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Johannes Penßel, Takashi Iwai,
Hans de Goede, Lee Jones
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <tiwai@suse.de>
commit 8f2244c9af245ff72185c0473827125ee6b2d1a5 upstream.
The commit c7d80059b086 ("leds: class: Store the color index in struct
led_classdev") introduced a new sysfs entry "color" that is commonly
created for the led classdev. Unfortunately, this conflicts with the
"color" sysfs entry of already existing drivers such as Logitech HID
or System76 ACPI drivers. The driver probe fails due to the conflict,
hence it leads to a severe regression with the missing keyboard, for
example.
This patch reverts partially the change in the commit above for
removing the led class color sysfs entries again for addressing the
regressions. The newly introduced led_classdev.color field is kept as
it's already used by other driver.
Fixes: c7d80059b086 ("leds: class: Store the color index in struct led_classdev")
Reported-by: Johannes Penßel <johannes.penssel@gmail.com>
Closes: https://lore.kernel.org/r/b5646db3-acff-45aa-baef-df3f660486fb@gmail.com
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218045
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218155
Link: https://bugzilla.suse.com/show_bug.cgi?id=1217172
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20231121162359.9332-1-tiwai@suse.de
Signed-off-by: Lee Jones <lee@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
Documentation/ABI/testing/sysfs-class-led | 9 ---------
drivers/leds/led-class.c | 14 --------------
2 files changed, 23 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-class-led b/Documentation/ABI/testing/sysfs-class-led
index b2ff0012c0f2..2e24ac3bd7ef 100644
--- a/Documentation/ABI/testing/sysfs-class-led
+++ b/Documentation/ABI/testing/sysfs-class-led
@@ -59,15 +59,6 @@ Description:
brightness. Reading this file when no hw brightness change
event has happened will return an ENODATA error.
-What: /sys/class/leds/<led>/color
-Date: June 2023
-KernelVersion: 6.5
-Description:
- Color of the LED.
-
- This is a read-only file. Reading this file returns the color
- of the LED as a string (e.g: "red", "green", "multicolor").
-
What: /sys/class/leds/<led>/trigger
Date: March 2006
KernelVersion: 2.6.17
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 974b84f6bd6a..ba1be15cfd8e 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -75,19 +75,6 @@ static ssize_t max_brightness_show(struct device *dev,
}
static DEVICE_ATTR_RO(max_brightness);
-static ssize_t color_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- const char *color_text = "invalid";
- struct led_classdev *led_cdev = dev_get_drvdata(dev);
-
- if (led_cdev->color < LED_COLOR_ID_MAX)
- color_text = led_colors[led_cdev->color];
-
- return sysfs_emit(buf, "%s\n", color_text);
-}
-static DEVICE_ATTR_RO(color);
-
#ifdef CONFIG_LEDS_TRIGGERS
static BIN_ATTR(trigger, 0644, led_trigger_read, led_trigger_write, 0);
static struct bin_attribute *led_trigger_bin_attrs[] = {
@@ -102,7 +89,6 @@ static const struct attribute_group led_trigger_group = {
static struct attribute *led_class_attrs[] = {
&dev_attr_brightness.attr,
&dev_attr_max_brightness.attr,
- &dev_attr_color.attr,
NULL,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 002/134] cifs: Fix FALLOC_FL_ZERO_RANGE by setting i_size if EOF moved
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 001/134] leds: class: Dont expose color sysfs entry Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 003/134] cifs: Fix FALLOC_FL_INSERT_RANGE by setting i_size after " Greg Kroah-Hartman
` (144 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, David Howells, Paulo Alcantara,
Shyam Prasad N, Rohith Surabattula, Jeff Layton, linux-cifs,
linux-mm, Steve French
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Howells <dhowells@redhat.com>
commit 83d5518b124dfd605f10a68128482c839a239f9d upstream.
Fix the cifs filesystem implementations of FALLOC_FL_ZERO_RANGE, in
smb3_zero_range(), to set i_size after extending the file on the server.
Fixes: 72c419d9b073 ("cifs: fix smb3_zero_range so it can expand the file-size when required")
Cc: stable@vger.kernel.org
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Paulo Alcantara <pc@manguebit.com>
cc: Shyam Prasad N <nspmangalore@gmail.com>
cc: Rohith Surabattula <rohiths.msft@gmail.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-cifs@vger.kernel.org
cc: linux-mm@kvack.org
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/smb/client/smb2ops.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -3305,6 +3305,7 @@ static long smb3_zero_range(struct file
struct inode *inode = file_inode(file);
struct cifsInodeInfo *cifsi = CIFS_I(inode);
struct cifsFileInfo *cfile = file->private_data;
+ unsigned long long new_size;
long rc;
unsigned int xid;
__le64 eof;
@@ -3335,10 +3336,15 @@ static long smb3_zero_range(struct file
/*
* do we also need to change the size of the file?
*/
- if (keep_size == false && i_size_read(inode) < offset + len) {
- eof = cpu_to_le64(offset + len);
+ new_size = offset + len;
+ if (keep_size == false && (unsigned long long)i_size_read(inode) < new_size) {
+ eof = cpu_to_le64(new_size);
rc = SMB2_set_eof(xid, tcon, cfile->fid.persistent_fid,
cfile->fid.volatile_fid, cfile->pid, &eof);
+ if (rc >= 0) {
+ truncate_setsize(inode, new_size);
+ fscache_resize_cookie(cifs_inode_cookie(inode), new_size);
+ }
}
zero_range_exit:
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 003/134] cifs: Fix FALLOC_FL_INSERT_RANGE by setting i_size after EOF moved
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 001/134] leds: class: Dont expose color sysfs entry Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 002/134] cifs: Fix FALLOC_FL_ZERO_RANGE by setting i_size if EOF moved Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 004/134] smb: client: fix missing mode bits for SMB symlinks Greg Kroah-Hartman
` (143 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, David Howells, Paulo Alcantara,
Shyam Prasad N, Rohith Surabattula, Jeff Layton, linux-cifs,
linux-mm, Steve French
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Howells <dhowells@redhat.com>
commit 88010155f02b2c3b03c71609ba6ceeb457ece095 upstream.
Fix the cifs filesystem implementations of FALLOC_FL_INSERT_RANGE, in
smb3_insert_range(), to set i_size after extending the file on the server
and before we do the copy to open the gap (as we don't clean up the EOF
marker if the copy fails).
Fixes: 7fe6fe95b936 ("cifs: add FALLOC_FL_INSERT_RANGE support")
Cc: stable@vger.kernel.org
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Paulo Alcantara <pc@manguebit.com>
cc: Shyam Prasad N <nspmangalore@gmail.com>
cc: Rohith Surabattula <rohiths.msft@gmail.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-cifs@vger.kernel.org
cc: linux-mm@kvack.org
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/smb/client/smb2ops.c | 3 +++
1 file changed, 3 insertions(+)
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -3739,6 +3739,9 @@ static long smb3_insert_range(struct fil
if (rc < 0)
goto out_2;
+ truncate_setsize(inode, old_eof + len);
+ fscache_resize_cookie(cifs_inode_cookie(inode), i_size_read(inode));
+
rc = smb2_copychunk_range(xid, cfile, cfile, off, count, off + len);
if (rc < 0)
goto out_2;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 004/134] smb: client: fix missing mode bits for SMB symlinks
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (2 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 003/134] cifs: Fix FALLOC_FL_INSERT_RANGE by setting i_size after " Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 005/134] smb: client: report correct st_size for SMB and NFS symlinks Greg Kroah-Hartman
` (142 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Paulo Alcantara (SUSE), Steve French
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paulo Alcantara <pc@manguebit.com>
commit ef22bb800d967616c7638d204bc1b425beac7f5f upstream.
When instantiating inodes for SMB symlinks, add the mode bits from
@cifs_sb->ctx->file_mode as we already do for the other special files.
Cc: stable@vger.kernel.org
Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/smb/client/inode.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/fs/smb/client/inode.c
+++ b/fs/smb/client/inode.c
@@ -748,7 +748,7 @@ bool cifs_reparse_point_to_fattr(struct
case 0: /* SMB1 symlink */
case IO_REPARSE_TAG_SYMLINK:
case IO_REPARSE_TAG_NFS:
- fattr->cf_mode = S_IFLNK;
+ fattr->cf_mode = S_IFLNK | cifs_sb->ctx->file_mode;
fattr->cf_dtype = DT_LNK;
break;
default:
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 005/134] smb: client: report correct st_size for SMB and NFS symlinks
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (3 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 004/134] smb: client: fix missing mode bits for SMB symlinks Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 006/134] ksmbd: fix possible deadlock in smb2_open Greg Kroah-Hartman
` (141 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Paulo Alcantara (SUSE), Steve French
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paulo Alcantara <pc@manguebit.com>
commit 9d63509547a940225d06d7eba1dc412befae255d upstream.
We can't rely on FILE_STANDARD_INFORMATION::EndOfFile for reparse
points as they will be always zero. Set it to symlink target's length
as specified by POSIX.
This will make stat() family of syscalls return the correct st_size
for such files.
Cc: stable@vger.kernel.org
Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/smb/client/inode.c | 2 ++
1 file changed, 2 insertions(+)
--- a/fs/smb/client/inode.c
+++ b/fs/smb/client/inode.c
@@ -823,6 +823,8 @@ static void cifs_open_info_to_fattr(stru
out_reparse:
if (S_ISLNK(fattr->cf_mode)) {
+ if (likely(data->symlink_target))
+ fattr->cf_eof = strnlen(data->symlink_target, PATH_MAX);
fattr->cf_symlink_target = data->symlink_target;
data->symlink_target = NULL;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 006/134] ksmbd: fix possible deadlock in smb2_open
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (4 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 005/134] smb: client: report correct st_size for SMB and NFS symlinks Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 007/134] pinctrl: avoid reload of p state in list iteration Greg Kroah-Hartman
` (140 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Marios Makassikis, Namjae Jeon,
Steve French
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Namjae Jeon <linkinjeon@kernel.org>
commit 864fb5d3716303a045c3ffb397f651bfd37bfb36 upstream.
[ 8743.393379] ======================================================
[ 8743.393385] WARNING: possible circular locking dependency detected
[ 8743.393391] 6.4.0-rc1+ #11 Tainted: G OE
[ 8743.393397] ------------------------------------------------------
[ 8743.393402] kworker/0:2/12921 is trying to acquire lock:
[ 8743.393408] ffff888127a14460 (sb_writers#8){.+.+}-{0:0}, at: ksmbd_vfs_setxattr+0x3d/0xd0 [ksmbd]
[ 8743.393510]
but task is already holding lock:
[ 8743.393515] ffff8880360d97f0 (&type->i_mutex_dir_key#6/1){+.+.}-{3:3}, at: ksmbd_vfs_kern_path_locked+0x181/0x670 [ksmbd]
[ 8743.393618]
which lock already depends on the new lock.
[ 8743.393623]
the existing dependency chain (in reverse order) is:
[ 8743.393628]
-> #1 (&type->i_mutex_dir_key#6/1){+.+.}-{3:3}:
[ 8743.393648] down_write_nested+0x9a/0x1b0
[ 8743.393660] filename_create+0x128/0x270
[ 8743.393670] do_mkdirat+0xab/0x1f0
[ 8743.393680] __x64_sys_mkdir+0x47/0x60
[ 8743.393690] do_syscall_64+0x5d/0x90
[ 8743.393701] entry_SYSCALL_64_after_hwframe+0x72/0xdc
[ 8743.393711]
-> #0 (sb_writers#8){.+.+}-{0:0}:
[ 8743.393728] __lock_acquire+0x2201/0x3b80
[ 8743.393737] lock_acquire+0x18f/0x440
[ 8743.393746] mnt_want_write+0x5f/0x240
[ 8743.393755] ksmbd_vfs_setxattr+0x3d/0xd0 [ksmbd]
[ 8743.393839] ksmbd_vfs_set_dos_attrib_xattr+0xcc/0x110 [ksmbd]
[ 8743.393924] compat_ksmbd_vfs_set_dos_attrib_xattr+0x39/0x50 [ksmbd]
[ 8743.394010] smb2_open+0x3432/0x3cc0 [ksmbd]
[ 8743.394099] handle_ksmbd_work+0x2c9/0x7b0 [ksmbd]
[ 8743.394187] process_one_work+0x65a/0xb30
[ 8743.394198] worker_thread+0x2cf/0x700
[ 8743.394209] kthread+0x1ad/0x1f0
[ 8743.394218] ret_from_fork+0x29/0x50
This patch add mnt_want_write() above parent inode lock and remove
nested mnt_want_write calls in smb2_open().
Fixes: 40b268d384a2 ("ksmbd: add mnt_want_write to ksmbd vfs functions")
Cc: stable@vger.kernel.org
Reported-by: Marios Makassikis <mmakassikis@freebox.fr>
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 | 47 +++++++++++++++------------------
fs/smb/server/smbacl.c | 7 ++--
fs/smb/server/smbacl.h | 2 -
fs/smb/server/vfs.c | 68 ++++++++++++++++++++++++++++--------------------
fs/smb/server/vfs.h | 10 ++++---
5 files changed, 75 insertions(+), 59 deletions(-)
--- a/fs/smb/server/smb2pdu.c
+++ b/fs/smb/server/smb2pdu.c
@@ -2380,7 +2380,8 @@ static int smb2_set_ea(struct smb2_ea_in
rc = 0;
} else {
rc = ksmbd_vfs_setxattr(idmap, path, attr_name, value,
- le16_to_cpu(eabuf->EaValueLength), 0);
+ le16_to_cpu(eabuf->EaValueLength),
+ 0, true);
if (rc < 0) {
ksmbd_debug(SMB,
"ksmbd_vfs_setxattr is failed(%d)\n",
@@ -2443,7 +2444,7 @@ static noinline int smb2_set_stream_name
return -EBADF;
}
- rc = ksmbd_vfs_setxattr(idmap, path, xattr_stream_name, NULL, 0, 0);
+ rc = ksmbd_vfs_setxattr(idmap, path, xattr_stream_name, NULL, 0, 0, false);
if (rc < 0)
pr_err("Failed to store XATTR stream name :%d\n", rc);
return 0;
@@ -2518,7 +2519,7 @@ static void smb2_new_xattrs(struct ksmbd
da.flags = XATTR_DOSINFO_ATTRIB | XATTR_DOSINFO_CREATE_TIME |
XATTR_DOSINFO_ITIME;
- rc = ksmbd_vfs_set_dos_attrib_xattr(mnt_idmap(path->mnt), path, &da);
+ rc = ksmbd_vfs_set_dos_attrib_xattr(mnt_idmap(path->mnt), path, &da, false);
if (rc)
ksmbd_debug(SMB, "failed to store file attribute into xattr\n");
}
@@ -2608,7 +2609,7 @@ static int smb2_create_sd_buffer(struct
sizeof(struct create_sd_buf_req))
return -EINVAL;
return set_info_sec(work->conn, work->tcon, path, &sd_buf->ntsd,
- le32_to_cpu(sd_buf->ccontext.DataLength), true);
+ le32_to_cpu(sd_buf->ccontext.DataLength), true, false);
}
static void ksmbd_acls_fattr(struct smb_fattr *fattr,
@@ -3152,7 +3153,8 @@ int smb2_open(struct ksmbd_work *work)
idmap,
&path,
pntsd,
- pntsd_size);
+ pntsd_size,
+ false);
kfree(pntsd);
if (rc)
pr_err("failed to store ntacl in xattr : %d\n",
@@ -3228,12 +3230,6 @@ int smb2_open(struct ksmbd_work *work)
if (req->CreateOptions & FILE_DELETE_ON_CLOSE_LE)
ksmbd_fd_set_delete_on_close(fp, file_info);
- if (need_truncate) {
- rc = smb2_create_truncate(&path);
- if (rc)
- goto err_out;
- }
-
if (req->CreateContextsOffset) {
struct create_alloc_size_req *az_req;
@@ -3398,11 +3394,12 @@ int smb2_open(struct ksmbd_work *work)
}
err_out:
- if (file_present || created) {
- inode_unlock(d_inode(parent_path.dentry));
- path_put(&path);
- path_put(&parent_path);
- }
+ if (file_present || created)
+ ksmbd_vfs_kern_path_unlock(&parent_path, &path);
+
+ if (fp && need_truncate)
+ rc = smb2_create_truncate(&fp->filp->f_path);
+
ksmbd_revert_fsids(work);
err_out1:
if (!rc) {
@@ -5537,7 +5534,7 @@ static int smb2_rename(struct ksmbd_work
rc = ksmbd_vfs_setxattr(file_mnt_idmap(fp->filp),
&fp->filp->f_path,
xattr_stream_name,
- NULL, 0, 0);
+ NULL, 0, 0, true);
if (rc < 0) {
pr_err("failed to store stream name in xattr: %d\n",
rc);
@@ -5630,11 +5627,9 @@ static int smb2_create_link(struct ksmbd
if (rc)
rc = -EINVAL;
out:
- if (file_present) {
- inode_unlock(d_inode(parent_path.dentry));
- path_put(&path);
- path_put(&parent_path);
- }
+ if (file_present)
+ ksmbd_vfs_kern_path_unlock(&parent_path, &path);
+
if (!IS_ERR(link_name))
kfree(link_name);
kfree(pathname);
@@ -5701,7 +5696,8 @@ static int set_file_basic_info(struct ks
da.flags = XATTR_DOSINFO_ATTRIB | XATTR_DOSINFO_CREATE_TIME |
XATTR_DOSINFO_ITIME;
- rc = ksmbd_vfs_set_dos_attrib_xattr(idmap, &filp->f_path, &da);
+ rc = ksmbd_vfs_set_dos_attrib_xattr(idmap, &filp->f_path, &da,
+ true);
if (rc)
ksmbd_debug(SMB,
"failed to restore file attribute in EA\n");
@@ -6013,7 +6009,7 @@ static int smb2_set_info_sec(struct ksmb
fp->saccess |= FILE_SHARE_DELETE_LE;
return set_info_sec(fp->conn, fp->tcon, &fp->filp->f_path, pntsd,
- buf_len, false);
+ buf_len, false, true);
}
/**
@@ -7582,7 +7578,8 @@ static inline int fsctl_set_sparse(struc
da.attr = le32_to_cpu(fp->f_ci->m_fattr);
ret = ksmbd_vfs_set_dos_attrib_xattr(idmap,
- &fp->filp->f_path, &da);
+ &fp->filp->f_path,
+ &da, true);
if (ret)
fp->f_ci->m_fattr = old_fattr;
}
--- a/fs/smb/server/smbacl.c
+++ b/fs/smb/server/smbacl.c
@@ -1185,7 +1185,7 @@ pass:
pntsd_size += sizeof(struct smb_acl) + nt_size;
}
- ksmbd_vfs_set_sd_xattr(conn, idmap, path, pntsd, pntsd_size);
+ ksmbd_vfs_set_sd_xattr(conn, idmap, path, pntsd, pntsd_size, false);
kfree(pntsd);
}
@@ -1377,7 +1377,7 @@ err_out:
int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
const struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
- bool type_check)
+ bool type_check, bool get_write)
{
int rc;
struct smb_fattr fattr = {{0}};
@@ -1437,7 +1437,8 @@ int set_info_sec(struct ksmbd_conn *conn
if (test_share_config_flag(tcon->share_conf, KSMBD_SHARE_FLAG_ACL_XATTR)) {
/* Update WinACL in xattr */
ksmbd_vfs_remove_sd_xattrs(idmap, path);
- ksmbd_vfs_set_sd_xattr(conn, idmap, path, pntsd, ntsd_len);
+ ksmbd_vfs_set_sd_xattr(conn, idmap, path, pntsd, ntsd_len,
+ get_write);
}
out:
--- a/fs/smb/server/smbacl.h
+++ b/fs/smb/server/smbacl.h
@@ -207,7 +207,7 @@ int smb_check_perm_dacl(struct ksmbd_con
__le32 *pdaccess, int uid);
int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
const struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
- bool type_check);
+ bool type_check, bool get_write);
void id_to_sid(unsigned int cid, uint sidtype, struct smb_sid *ssid);
void ksmbd_init_domain(u32 *sub_auth);
--- a/fs/smb/server/vfs.c
+++ b/fs/smb/server/vfs.c
@@ -97,6 +97,13 @@ static int ksmbd_vfs_path_lookup_locked(
return -ENOENT;
}
+ err = mnt_want_write(parent_path->mnt);
+ if (err) {
+ path_put(parent_path);
+ putname(filename);
+ return -ENOENT;
+ }
+
inode_lock_nested(parent_path->dentry->d_inode, I_MUTEX_PARENT);
d = lookup_one_qstr_excl(&last, parent_path->dentry, 0);
if (IS_ERR(d))
@@ -123,6 +130,7 @@ static int ksmbd_vfs_path_lookup_locked(
err_out:
inode_unlock(d_inode(parent_path->dentry));
+ mnt_drop_write(parent_path->mnt);
path_put(parent_path);
putname(filename);
return -ENOENT;
@@ -451,7 +459,8 @@ static int ksmbd_vfs_stream_write(struct
fp->stream.name,
(void *)stream_buf,
size,
- 0);
+ 0,
+ true);
if (err < 0)
goto out;
@@ -593,10 +602,6 @@ int ksmbd_vfs_remove_file(struct ksmbd_w
goto out_err;
}
- err = mnt_want_write(path->mnt);
- if (err)
- goto out_err;
-
idmap = mnt_idmap(path->mnt);
if (S_ISDIR(d_inode(path->dentry)->i_mode)) {
err = vfs_rmdir(idmap, d_inode(parent), path->dentry);
@@ -607,7 +612,6 @@ int ksmbd_vfs_remove_file(struct ksmbd_w
if (err)
ksmbd_debug(VFS, "unlink failed, err %d\n", err);
}
- mnt_drop_write(path->mnt);
out_err:
ksmbd_revert_fsids(work);
@@ -907,18 +911,22 @@ ssize_t ksmbd_vfs_getxattr(struct mnt_id
* @attr_value: xattr value to set
* @attr_size: size of xattr value
* @flags: destination buffer length
+ * @get_write: get write access to a mount
*
* Return: 0 on success, otherwise error
*/
int ksmbd_vfs_setxattr(struct mnt_idmap *idmap,
const struct path *path, const char *attr_name,
- void *attr_value, size_t attr_size, int flags)
+ void *attr_value, size_t attr_size, int flags,
+ bool get_write)
{
int err;
- err = mnt_want_write(path->mnt);
- if (err)
- return err;
+ if (get_write == true) {
+ err = mnt_want_write(path->mnt);
+ if (err)
+ return err;
+ }
err = vfs_setxattr(idmap,
path->dentry,
@@ -928,7 +936,8 @@ int ksmbd_vfs_setxattr(struct mnt_idmap
flags);
if (err)
ksmbd_debug(VFS, "setxattr failed, err %d\n", err);
- mnt_drop_write(path->mnt);
+ if (get_write == true)
+ mnt_drop_write(path->mnt);
return err;
}
@@ -1251,6 +1260,13 @@ out1:
}
if (!err) {
+ err = mnt_want_write(parent_path->mnt);
+ if (err) {
+ path_put(path);
+ path_put(parent_path);
+ return err;
+ }
+
err = ksmbd_vfs_lock_parent(parent_path->dentry, path->dentry);
if (err) {
path_put(path);
@@ -1260,6 +1276,14 @@ out1:
return err;
}
+void ksmbd_vfs_kern_path_unlock(struct path *parent_path, struct path *path)
+{
+ inode_unlock(d_inode(parent_path->dentry));
+ mnt_drop_write(parent_path->mnt);
+ path_put(path);
+ path_put(parent_path);
+}
+
struct dentry *ksmbd_vfs_kern_path_create(struct ksmbd_work *work,
const char *name,
unsigned int flags,
@@ -1414,7 +1438,8 @@ out:
int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
struct mnt_idmap *idmap,
const struct path *path,
- struct smb_ntsd *pntsd, int len)
+ struct smb_ntsd *pntsd, int len,
+ bool get_write)
{
int rc;
struct ndr sd_ndr = {0}, acl_ndr = {0};
@@ -1474,7 +1499,7 @@ int ksmbd_vfs_set_sd_xattr(struct ksmbd_
rc = ksmbd_vfs_setxattr(idmap, path,
XATTR_NAME_SD, sd_ndr.data,
- sd_ndr.offset, 0);
+ sd_ndr.offset, 0, get_write);
if (rc < 0)
pr_err("Failed to store XATTR ntacl :%d\n", rc);
@@ -1563,7 +1588,8 @@ free_n_data:
int ksmbd_vfs_set_dos_attrib_xattr(struct mnt_idmap *idmap,
const struct path *path,
- struct xattr_dos_attrib *da)
+ struct xattr_dos_attrib *da,
+ bool get_write)
{
struct ndr n;
int err;
@@ -1573,7 +1599,7 @@ int ksmbd_vfs_set_dos_attrib_xattr(struc
return err;
err = ksmbd_vfs_setxattr(idmap, path, XATTR_NAME_DOS_ATTRIBUTE,
- (void *)n.data, n.offset, 0);
+ (void *)n.data, n.offset, 0, get_write);
if (err)
ksmbd_debug(SMB, "failed to store dos attribute in xattr\n");
kfree(n.data);
@@ -1845,10 +1871,6 @@ int ksmbd_vfs_set_init_posix_acl(struct
}
posix_state_to_acl(&acl_state, acls->a_entries);
- rc = mnt_want_write(path->mnt);
- if (rc)
- goto out_err;
-
rc = set_posix_acl(idmap, dentry, ACL_TYPE_ACCESS, acls);
if (rc < 0)
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n",
@@ -1860,9 +1882,7 @@ int ksmbd_vfs_set_init_posix_acl(struct
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n",
rc);
}
- mnt_drop_write(path->mnt);
-out_err:
free_acl_state(&acl_state);
posix_acl_release(acls);
return rc;
@@ -1892,10 +1912,6 @@ int ksmbd_vfs_inherit_posix_acl(struct m
}
}
- rc = mnt_want_write(path->mnt);
- if (rc)
- goto out_err;
-
rc = set_posix_acl(idmap, dentry, ACL_TYPE_ACCESS, acls);
if (rc < 0)
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_ACCESS) failed, rc : %d\n",
@@ -1907,9 +1923,7 @@ int ksmbd_vfs_inherit_posix_acl(struct m
ksmbd_debug(SMB, "Set posix acl(ACL_TYPE_DEFAULT) failed, rc : %d\n",
rc);
}
- mnt_drop_write(path->mnt);
-out_err:
posix_acl_release(acls);
return rc;
}
--- a/fs/smb/server/vfs.h
+++ b/fs/smb/server/vfs.h
@@ -109,7 +109,8 @@ ssize_t ksmbd_vfs_casexattr_len(struct m
int attr_name_len);
int ksmbd_vfs_setxattr(struct mnt_idmap *idmap,
const struct path *path, const char *attr_name,
- void *attr_value, size_t attr_size, int flags);
+ void *attr_value, size_t attr_size, int flags,
+ bool get_write);
int ksmbd_vfs_xattr_stream_name(char *stream_name, char **xattr_stream_name,
size_t *xattr_stream_name_size, int s_type);
int ksmbd_vfs_remove_xattr(struct mnt_idmap *idmap,
@@ -117,6 +118,7 @@ int ksmbd_vfs_remove_xattr(struct mnt_id
int ksmbd_vfs_kern_path_locked(struct ksmbd_work *work, char *name,
unsigned int flags, struct path *parent_path,
struct path *path, bool caseless);
+void ksmbd_vfs_kern_path_unlock(struct path *parent_path, struct path *path);
struct dentry *ksmbd_vfs_kern_path_create(struct ksmbd_work *work,
const char *name,
unsigned int flags,
@@ -144,14 +146,16 @@ int ksmbd_vfs_remove_sd_xattrs(struct mn
int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
struct mnt_idmap *idmap,
const struct path *path,
- struct smb_ntsd *pntsd, int len);
+ struct smb_ntsd *pntsd, int len,
+ bool get_write);
int ksmbd_vfs_get_sd_xattr(struct ksmbd_conn *conn,
struct mnt_idmap *idmap,
struct dentry *dentry,
struct smb_ntsd **pntsd);
int ksmbd_vfs_set_dos_attrib_xattr(struct mnt_idmap *idmap,
const struct path *path,
- struct xattr_dos_attrib *da);
+ struct xattr_dos_attrib *da,
+ bool get_write);
int ksmbd_vfs_get_dos_attrib_xattr(struct mnt_idmap *idmap,
struct dentry *dentry,
struct xattr_dos_attrib *da);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 007/134] pinctrl: avoid reload of p state in list iteration
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (5 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 006/134] ksmbd: fix possible deadlock in smb2_open Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 008/134] firewire: core: fix possible memory leak in create_units() Greg Kroah-Hartman
` (139 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Maria Yu, Linus Walleij
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maria Yu <quic_aiquny@quicinc.com>
commit 4198a9b571065978632276264e01d71d68000ac5 upstream.
When in the list_for_each_entry iteration, reload of p->state->settings
with a local setting from old_state will turn the list iteration into an
infinite loop.
The typical symptom when the issue happens, will be a printk message like:
"not freeing pin xx (xxx) as part of deactivating group xxx - it is
already used for some other setting".
This is a compiler-dependent problem, one instance occurred using Clang
version 10.0 on the arm64 architecture with linux version 4.19.
Fixes: 6e5e959dde0d ("pinctrl: API changes to support multiple states per device")
Signed-off-by: Maria Yu <quic_aiquny@quicinc.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20231115102824.23727-1-quic_aiquny@quicinc.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/pinctrl/core.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -1253,17 +1253,17 @@ static void pinctrl_link_add(struct pinc
static int pinctrl_commit_state(struct pinctrl *p, struct pinctrl_state *state)
{
struct pinctrl_setting *setting, *setting2;
- struct pinctrl_state *old_state = p->state;
+ struct pinctrl_state *old_state = READ_ONCE(p->state);
int ret;
- if (p->state) {
+ if (old_state) {
/*
* For each pinmux setting in the old state, forget SW's record
* of mux owner for that pingroup. Any pingroups which are
* still owned by the new state will be re-acquired by the call
* to pinmux_enable_setting() in the loop below.
*/
- list_for_each_entry(setting, &p->state->settings, node) {
+ list_for_each_entry(setting, &old_state->settings, node) {
if (setting->type != PIN_MAP_TYPE_MUX_GROUP)
continue;
pinmux_disable_setting(setting);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 008/134] firewire: core: fix possible memory leak in create_units()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (6 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 007/134] pinctrl: avoid reload of p state in list iteration Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 009/134] mmc: sdhci-pci-gli: Disable LPM during initialization Greg Kroah-Hartman
` (138 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Yang Yingliang, Takashi Sakamoto
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yang Yingliang <yangyingliang@huawei.com>
commit 891e0eab32a57fca4d36c5162628eb0bcb1f0edf upstream.
If device_register() fails, the refcount of device is not 0, the name
allocated in dev_set_name() is leaked. To fix this by calling put_device(),
so that it will be freed in callback function kobject_cleanup().
unreferenced object 0xffff9d99035c7a90 (size 8):
comm "systemd-udevd", pid 168, jiffies 4294672386 (age 152.089s)
hex dump (first 8 bytes):
66 77 30 2e 30 00 ff ff fw0.0...
backtrace:
[<00000000e1d62bac>] __kmem_cache_alloc_node+0x1e9/0x360
[<00000000bbeaff31>] __kmalloc_node_track_caller+0x44/0x1a0
[<00000000491f2fb4>] kvasprintf+0x67/0xd0
[<000000005b960ddc>] kobject_set_name_vargs+0x1e/0x90
[<00000000427ac591>] dev_set_name+0x4e/0x70
[<000000003b4e447d>] create_units+0xc5/0x110
fw_unit_release() will be called in the error path, move fw_device_get()
before calling device_register() to keep balanced with fw_device_put() in
fw_unit_release().
Cc: stable@vger.kernel.org
Fixes: 1fa5ae857bb1 ("driver core: get rid of struct device's bus_id string array")
Fixes: a1f64819fe9f ("firewire: struct device - replace bus_id with dev_name(), dev_set_name()")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/firewire/core-device.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
--- a/drivers/firewire/core-device.c
+++ b/drivers/firewire/core-device.c
@@ -717,14 +717,11 @@ static void create_units(struct fw_devic
fw_unit_attributes,
&unit->attribute_group);
- if (device_register(&unit->device) < 0)
- goto skip_unit;
-
fw_device_get(device);
- continue;
-
- skip_unit:
- kfree(unit);
+ if (device_register(&unit->device) < 0) {
+ put_device(&unit->device);
+ continue;
+ }
}
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 009/134] mmc: sdhci-pci-gli: Disable LPM during initialization
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (7 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 008/134] firewire: core: fix possible memory leak in create_units() Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 010/134] mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled Greg Kroah-Hartman
` (137 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Kornel Dulęba,
Sven van Ashbrook, Adrian Hunter, Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kornel Dulęba <korneld@chromium.org>
commit d9ed644f58670865cf067351deb71010bd87a52f upstream.
To address IO performance commit f9e5b33934ce
("mmc: host: Improve I/O read/write performance for GL9763E")
limited LPM negotiation to runtime suspend state.
The problem is that it only flips the switch in the runtime PM
resume/suspend logic.
Disable LPM negotiation in gl9763e_add_host.
This helps in two ways:
1. It was found that the LPM switch stays in the same position after
warm reboot. Having it set in init helps with consistency.
2. Disabling LPM during the first runtime resume leaves us susceptible
to the performance issue in the time window between boot and the
first runtime suspend.
Fixes: f9e5b33934ce ("mmc: host: Improve I/O read/write performance for GL9763E")
Cc: stable@vger.kernel.org
Signed-off-by: Kornel Dulęba <korneld@chromium.org>
Reviewed-by: Sven van Ashbrook <svenva@chromium.org>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20231114115516.1585361-1-korneld@chromium.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/host/sdhci-pci-gli.c | 54 ++++++++++++++++++++-------------------
1 file changed, 29 insertions(+), 25 deletions(-)
--- a/drivers/mmc/host/sdhci-pci-gli.c
+++ b/drivers/mmc/host/sdhci-pci-gli.c
@@ -1189,6 +1189,32 @@ static void gl9763e_hs400_enhanced_strob
sdhci_writel(host, val, SDHCI_GLI_9763E_HS400_ES_REG);
}
+static void gl9763e_set_low_power_negotiation(struct sdhci_pci_slot *slot,
+ bool enable)
+{
+ struct pci_dev *pdev = slot->chip->pdev;
+ u32 value;
+
+ pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
+ value &= ~GLI_9763E_VHS_REV;
+ value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
+ pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
+
+ pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG, &value);
+
+ if (enable)
+ value &= ~GLI_9763E_CFG_LPSN_DIS;
+ else
+ value |= GLI_9763E_CFG_LPSN_DIS;
+
+ pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG, value);
+
+ pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
+ value &= ~GLI_9763E_VHS_REV;
+ value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
+ pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
+}
+
static void sdhci_set_gl9763e_signaling(struct sdhci_host *host,
unsigned int timing)
{
@@ -1297,6 +1323,9 @@ static int gl9763e_add_host(struct sdhci
if (ret)
goto cleanup;
+ /* Disable LPM negotiation to avoid entering L1 state. */
+ gl9763e_set_low_power_negotiation(slot, false);
+
return 0;
cleanup:
@@ -1340,31 +1369,6 @@ static void gli_set_gl9763e(struct sdhci
}
#ifdef CONFIG_PM
-static void gl9763e_set_low_power_negotiation(struct sdhci_pci_slot *slot, bool enable)
-{
- struct pci_dev *pdev = slot->chip->pdev;
- u32 value;
-
- pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
- value &= ~GLI_9763E_VHS_REV;
- value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
- pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
-
- pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG, &value);
-
- if (enable)
- value &= ~GLI_9763E_CFG_LPSN_DIS;
- else
- value |= GLI_9763E_CFG_LPSN_DIS;
-
- pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG, value);
-
- pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
- value &= ~GLI_9763E_VHS_REV;
- value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
- pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
-}
-
static int gl9763e_runtime_suspend(struct sdhci_pci_chip *chip)
{
struct sdhci_pci_slot *slot = chip->slots[0];
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 010/134] mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (8 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 009/134] mmc: sdhci-pci-gli: Disable LPM during initialization Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 011/134] mmc: cqhci: Increase recovery halt timeout Greg Kroah-Hartman
` (136 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Wenchao Chen, Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wenchao Chen <wenchao.chen@unisoc.com>
commit 477865af60b2117ceaa1d558e03559108c15c78c upstream.
With cat regulator_summary, we found that vqmmc was not shutting
down after the card was pulled.
cat /sys/kernel/debug/regulator/regulator_summary
1.before fix
1)Insert SD card
vddsdio 1 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 1 0mA 3500mV 3600mV
2)Pull out the SD card
vddsdio 1 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 1 0mA 3500mV 3600mV
2.after fix
1)Insert SD cardt
vddsdio 1 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 1 0mA 3500mV 3600mV
2)Pull out the SD card
vddsdio 0 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 0 0mA 3500mV 3600mV
Fixes: fb8bd90f83c4 ("mmc: sdhci-sprd: Add Spreadtrum's initial host controller")
Signed-off-by: Wenchao Chen <wenchao.chen@unisoc.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20231115083406.7368-1-wenchao.chen@unisoc.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/host/sdhci-sprd.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
--- a/drivers/mmc/host/sdhci-sprd.c
+++ b/drivers/mmc/host/sdhci-sprd.c
@@ -416,12 +416,33 @@ static void sdhci_sprd_request_done(stru
mmc_request_done(host->mmc, mrq);
}
+static void sdhci_sprd_set_power(struct sdhci_host *host, unsigned char mode,
+ unsigned short vdd)
+{
+ struct mmc_host *mmc = host->mmc;
+
+ switch (mode) {
+ case MMC_POWER_OFF:
+ mmc_regulator_set_ocr(host->mmc, mmc->supply.vmmc, 0);
+
+ mmc_regulator_disable_vqmmc(mmc);
+ break;
+ case MMC_POWER_ON:
+ mmc_regulator_enable_vqmmc(mmc);
+ break;
+ case MMC_POWER_UP:
+ mmc_regulator_set_ocr(host->mmc, mmc->supply.vmmc, vdd);
+ break;
+ }
+}
+
static struct sdhci_ops sdhci_sprd_ops = {
.read_l = sdhci_sprd_readl,
.write_l = sdhci_sprd_writel,
.write_w = sdhci_sprd_writew,
.write_b = sdhci_sprd_writeb,
.set_clock = sdhci_sprd_set_clock,
+ .set_power = sdhci_sprd_set_power,
.get_max_clock = sdhci_sprd_get_max_clock,
.get_min_clock = sdhci_sprd_get_min_clock,
.set_bus_width = sdhci_set_bus_width,
@@ -823,6 +844,10 @@ static int sdhci_sprd_probe(struct platf
host->caps1 &= ~(SDHCI_SUPPORT_SDR50 | SDHCI_SUPPORT_SDR104 |
SDHCI_SUPPORT_DDR50);
+ ret = mmc_regulator_get_supply(host->mmc);
+ if (ret)
+ goto pm_runtime_disable;
+
ret = sdhci_setup_host(host);
if (ret)
goto pm_runtime_disable;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 011/134] mmc: cqhci: Increase recovery halt timeout
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (9 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 010/134] mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 012/134] mmc: cqhci: Warn of halt or task clear failure Greg Kroah-Hartman
` (135 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Adrian Hunter, Avri Altman,
Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <adrian.hunter@intel.com>
commit b578d5d18e929aa7c007a98cce32657145dde219 upstream.
Failing to halt complicates the recovery. Additionally, unless the card or
controller are stuck, which is expected to be very rare, then the halt
should succeed, so it is better to wait. Set a large timeout.
Fixes: a4080225f51d ("mmc: cqhci: support for command queue enabled host")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20231103084720.6886-3-adrian.hunter@intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/host/cqhci-core.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/drivers/mmc/host/cqhci-core.c
+++ b/drivers/mmc/host/cqhci-core.c
@@ -984,10 +984,10 @@ static bool cqhci_halt(struct mmc_host *
/*
* After halting we expect to be able to use the command line. We interpret the
* failure to halt to mean the data lines might still be in use (and the upper
- * layers will need to send a STOP command), so we set the timeout based on a
- * generous command timeout.
+ * layers will need to send a STOP command), however failing to halt complicates
+ * the recovery, so set a timeout that would reasonably allow I/O to complete.
*/
-#define CQHCI_START_HALT_TIMEOUT 5
+#define CQHCI_START_HALT_TIMEOUT 500
static void cqhci_recovery_start(struct mmc_host *mmc)
{
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 012/134] mmc: cqhci: Warn of halt or task clear failure
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (10 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 011/134] mmc: cqhci: Increase recovery halt timeout Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 013/134] mmc: cqhci: Fix task clearing in CQE error recovery Greg Kroah-Hartman
` (134 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Adrian Hunter, Avri Altman,
Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <adrian.hunter@intel.com>
commit 35597bdb04ec27ef3b1cea007dc69f8ff5df75a5 upstream.
A correctly operating controller should successfully halt and clear tasks.
Failure may result in errors elsewhere, so promote messages from debug to
warnings.
Fixes: a4080225f51d ("mmc: cqhci: support for command queue enabled host")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20231103084720.6886-6-adrian.hunter@intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/host/cqhci-core.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/drivers/mmc/host/cqhci-core.c
+++ b/drivers/mmc/host/cqhci-core.c
@@ -942,8 +942,8 @@ static bool cqhci_clear_all_tasks(struct
ret = cqhci_tasks_cleared(cq_host);
if (!ret)
- pr_debug("%s: cqhci: Failed to clear tasks\n",
- mmc_hostname(mmc));
+ pr_warn("%s: cqhci: Failed to clear tasks\n",
+ mmc_hostname(mmc));
return ret;
}
@@ -976,7 +976,7 @@ static bool cqhci_halt(struct mmc_host *
ret = cqhci_halted(cq_host);
if (!ret)
- pr_debug("%s: cqhci: Failed to halt\n", mmc_hostname(mmc));
+ pr_warn("%s: cqhci: Failed to halt\n", mmc_hostname(mmc));
return ret;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 013/134] mmc: cqhci: Fix task clearing in CQE error recovery
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (11 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 012/134] mmc: cqhci: Warn of halt or task clear failure Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 014/134] mmc: block: Retry commands " Greg Kroah-Hartman
` (133 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Kornel Dulęba, Adrian Hunter,
Avri Altman, Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <adrian.hunter@intel.com>
commit 1de1b77982e1a1df9707cb11f9b1789e6b8919d4 upstream.
If a task completion notification (TCN) is received when there is no
outstanding task, the cqhci driver issues a "spurious TCN" warning. This
was observed to happen right after CQE error recovery.
When an error interrupt is received the driver runs recovery logic.
It halts the controller, clears all pending tasks, and then re-enables
it. On some platforms, like Intel Jasper Lake, a stale task completion
event was observed, regardless of the CQHCI_CLEAR_ALL_TASKS bit being set.
This results in either:
a) Spurious TC completion event for an empty slot.
b) Corrupted data being passed up the stack, as a result of premature
completion for a newly added task.
Rather than add a quirk for affected controllers, ensure tasks are cleared
by toggling CQHCI_ENABLE, which would happen anyway if
cqhci_clear_all_tasks() timed out. This is simpler and should be safe and
effective for all controllers.
Fixes: a4080225f51d ("mmc: cqhci: support for command queue enabled host")
Cc: stable@vger.kernel.org
Reported-by: Kornel Dulęba <korneld@chromium.org>
Tested-by: Kornel Dulęba <korneld@chromium.org>
Co-developed-by: Kornel Dulęba <korneld@chromium.org>
Signed-off-by: Kornel Dulęba <korneld@chromium.org>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20231103084720.6886-7-adrian.hunter@intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/host/cqhci-core.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
--- a/drivers/mmc/host/cqhci-core.c
+++ b/drivers/mmc/host/cqhci-core.c
@@ -1075,28 +1075,28 @@ static void cqhci_recovery_finish(struct
ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
- if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
- ok = false;
-
/*
* The specification contradicts itself, by saying that tasks cannot be
* cleared if CQHCI does not halt, but if CQHCI does not halt, it should
* be disabled/re-enabled, but not to disable before clearing tasks.
* Have a go anyway.
*/
- if (!ok) {
- pr_debug("%s: cqhci: disable / re-enable\n", mmc_hostname(mmc));
- cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
- cqcfg &= ~CQHCI_ENABLE;
- cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
- cqcfg |= CQHCI_ENABLE;
- cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
- /* Be sure that there are no tasks */
- ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
- if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
- ok = false;
- WARN_ON(!ok);
- }
+ if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
+ ok = false;
+
+ /* Disable to make sure tasks really are cleared */
+ cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+ cqcfg &= ~CQHCI_ENABLE;
+ cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+ cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+ cqcfg |= CQHCI_ENABLE;
+ cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+ cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
+
+ if (!ok)
+ cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT);
cqhci_recover_mrqs(cq_host);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 014/134] mmc: block: Retry commands in CQE error recovery
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (12 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 013/134] mmc: cqhci: Fix task clearing in CQE error recovery Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 015/134] mmc: block: Do not lose cache flush during " Greg Kroah-Hartman
` (132 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Adrian Hunter, Avri Altman,
Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <adrian.hunter@intel.com>
commit 8155d1fa3a747baad5caff5f8303321d68ddd48c upstream.
It is important that MMC_CMDQ_TASK_MGMT command to discard the queue is
successful because otherwise a subsequent reset might fail to flush the
cache first. Retry it and the previous STOP command.
Fixes: 72a5af554df8 ("mmc: core: Add support for handling CQE requests")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20231103084720.6886-5-adrian.hunter@intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/core/core.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -551,7 +551,7 @@ int mmc_cqe_recovery(struct mmc_host *ho
cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
cmd.flags &= ~MMC_RSP_CRC; /* Ignore CRC */
cmd.busy_timeout = MMC_CQE_RECOVERY_TIMEOUT;
- mmc_wait_for_cmd(host, &cmd, 0);
+ mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
memset(&cmd, 0, sizeof(cmd));
cmd.opcode = MMC_CMDQ_TASK_MGMT;
@@ -559,10 +559,13 @@ int mmc_cqe_recovery(struct mmc_host *ho
cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
cmd.flags &= ~MMC_RSP_CRC; /* Ignore CRC */
cmd.busy_timeout = MMC_CQE_RECOVERY_TIMEOUT;
- err = mmc_wait_for_cmd(host, &cmd, 0);
+ err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
host->cqe_ops->cqe_recovery_finish(host);
+ if (err)
+ err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
+
mmc_retune_release(host);
return err;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 015/134] mmc: block: Do not lose cache flush during CQE error recovery
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (13 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 014/134] mmc: block: Retry commands " Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 016/134] mmc: block: Be sure to wait while busy in " Greg Kroah-Hartman
` (131 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Adrian Hunter, Avri Altman,
Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <adrian.hunter@intel.com>
commit 174925d340aac55296318e43fd96c0e1d196e105 upstream.
During CQE error recovery, error-free data commands get requeued if there
is any data left to transfer, but non-data commands are completed even
though they have not been processed. Requeue them instead.
Note the only non-data command is cache flush, which would have resulted in
a cache flush being lost if it was queued at the time of CQE recovery.
Fixes: 1e8e55b67030 ("mmc: block: Add CQE support")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20231103084720.6886-2-adrian.hunter@intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/core/block.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -1482,6 +1482,8 @@ static void mmc_blk_cqe_complete_rq(stru
blk_mq_requeue_request(req, true);
else
__blk_mq_end_request(req, BLK_STS_OK);
+ } else if (mq->in_recovery) {
+ blk_mq_requeue_request(req, true);
} else {
blk_mq_end_request(req, BLK_STS_OK);
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 016/134] mmc: block: Be sure to wait while busy in CQE error recovery
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (14 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 015/134] mmc: block: Do not lose cache flush during " Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 017/134] drm/i915: Also check for VGA converter in eDP probe Greg Kroah-Hartman
` (130 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Adrian Hunter, Avri Altman,
Christian Loehle, Ulf Hansson
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <adrian.hunter@intel.com>
commit c616696a902987352426fdaeec1b0b3240949e6b upstream.
STOP command does not guarantee to wait while busy, but subsequent command
MMC_CMDQ_TASK_MGMT to discard the queue will fail if the card is busy, so
be sure to wait by employing mmc_poll_for_busy().
Fixes: 72a5af554df8 ("mmc: core: Add support for handling CQE requests")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Christian Loehle <christian.loehle@arm.com>
Link: https://lore.kernel.org/r/20231103084720.6886-4-adrian.hunter@intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/mmc/core/core.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -553,6 +553,8 @@ int mmc_cqe_recovery(struct mmc_host *ho
cmd.busy_timeout = MMC_CQE_RECOVERY_TIMEOUT;
mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
+ mmc_poll_for_busy(host->card, MMC_CQE_RECOVERY_TIMEOUT, true, MMC_BUSY_IO);
+
memset(&cmd, 0, sizeof(cmd));
cmd.opcode = MMC_CMDQ_TASK_MGMT;
cmd.arg = 1; /* Discard entire queue */
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 017/134] drm/i915: Also check for VGA converter in eDP probe
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (15 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 016/134] mmc: block: Be sure to wait while busy in " Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 018/134] ALSA: hda: Disable power-save on KONTRON SinglePC Greg Kroah-Hartman
` (129 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Ville Syrjälä, Jani Nikula
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
commit f76f83a83c8fdbb62acbf8bd945f10821768145b upstream.
Unfortunately even the HPD based detection added in
commit cfe5bdfb27fa ("drm/i915: Check HPD live state during eDP probe")
fails to detect that the VBT's eDP/DDI-A is a ghost on
Asus B360M-A (CFL+CNP). On that board eDP/DDI-A has its HPD
asserted despite nothing being actually connected there :(
The straps/fuses also indicate that the eDP port is present.
So if one boots with a VGA monitor connected the eDP probe will
mistake the DP->VGA converter hooked to DDI-E for an eDP panel
on DDI-A.
As a last resort check what kind of DP device we've detected,
and if it looks like a DP->VGA converter then conclude that
the eDP port should be ignored.
Cc: stable@vger.kernel.org
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/9636
Fixes: cfe5bdfb27fa ("drm/i915: Check HPD live state during eDP probe")
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231114142333.15799-1-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
(cherry picked from commit fcd479a79120bf0cd507d85f898297a3b868dda6)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/i915/display/intel_dp.c | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5517,8 +5517,7 @@ static bool intel_edp_init_connector(str
* (eg. Acer Chromebook C710), so we'll check it only if multiple
* ports are attempting to use the same AUX CH, according to VBT.
*/
- if (intel_bios_dp_has_shared_aux_ch(encoder->devdata) &&
- !intel_digital_port_connected(encoder)) {
+ if (intel_bios_dp_has_shared_aux_ch(encoder->devdata)) {
/*
* If this fails, presume the DPCD answer came
* from some other port using the same AUX CH.
@@ -5526,10 +5525,27 @@ static bool intel_edp_init_connector(str
* FIXME maybe cleaner to check this before the
* DPCD read? Would need sort out the VDD handling...
*/
- drm_info(&dev_priv->drm,
- "[ENCODER:%d:%s] HPD is down, disabling eDP\n",
- encoder->base.base.id, encoder->base.name);
- goto out_vdd_off;
+ if (!intel_digital_port_connected(encoder)) {
+ drm_info(&dev_priv->drm,
+ "[ENCODER:%d:%s] HPD is down, disabling eDP\n",
+ encoder->base.base.id, encoder->base.name);
+ goto out_vdd_off;
+ }
+
+ /*
+ * Unfortunately even the HPD based detection fails on
+ * eg. Asus B360M-A (CFL+CNP), so as a last resort fall
+ * back to checking for a VGA branch device. Only do this
+ * on known affected platforms to minimize false positives.
+ */
+ if (DISPLAY_VER(dev_priv) == 9 && drm_dp_is_branch(intel_dp->dpcd) &&
+ (intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] & DP_DWN_STRM_PORT_TYPE_MASK) ==
+ DP_DWN_STRM_PORT_TYPE_ANALOG) {
+ drm_info(&dev_priv->drm,
+ "[ENCODER:%d:%s] VGA converter detected, disabling eDP\n",
+ encoder->base.base.id, encoder->base.name);
+ goto out_vdd_off;
+ }
}
mutex_lock(&dev_priv->drm.mode_config.mutex);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 018/134] ALSA: hda: Disable power-save on KONTRON SinglePC
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (16 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 017/134] drm/i915: Also check for VGA converter in eDP probe Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 019/134] ALSA: hda/realtek: Headset Mic VREF to 100% Greg Kroah-Hartman
` (128 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Takashi Iwai
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <tiwai@suse.de>
commit a337c355719c42a6c5b67e985ad753590ed844fb upstream.
It's been reported that the runtime PM on KONTRON SinglePC (PCI SSID
1734:1232) caused a stall of playback after a bunch of invocations.
(FWIW, this looks like an timing issue, and the stall happens rather
on the controller side.)
As a workaround, disable the default power-save on this platform.
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20231130151321.9813-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
sound/pci/hda/hda_intel.c | 2 ++
1 file changed, 2 insertions(+)
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2218,6 +2218,8 @@ static const struct snd_pci_quirk power_
SND_PCI_QUIRK(0x17aa, 0x36a7, "Lenovo C50 All in one", 0),
/* https://bugs.launchpad.net/bugs/1821663 */
SND_PCI_QUIRK(0x1631, 0xe017, "Packard Bell NEC IMEDIA 5204", 0),
+ /* KONTRON SinglePC may cause a stall at runtime resume */
+ SND_PCI_QUIRK(0x1734, 0x1232, "KONTRON SinglePC", 0),
{}
};
#endif /* CONFIG_PM */
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 019/134] ALSA: hda/realtek: Headset Mic VREF to 100%
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (17 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 018/134] ALSA: hda: Disable power-save on KONTRON SinglePC Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 020/134] ALSA: hda/realtek: Add supported ALC257 for ChromeOS Greg Kroah-Hartman
` (127 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Kailang Yang, Takashi Iwai
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kailang Yang <kailang@realtek.com>
commit baaacbff64d9f34b64f294431966d035aeadb81c upstream.
This platform need to set Mic VREF to 100%.
Signed-off-by: Kailang Yang <kailang@realtek.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/0916af40f08a4348a3298a9a59e6967e@realtek.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
sound/pci/hda/patch_realtek.c | 9 +++++++++
1 file changed, 9 insertions(+)
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -1986,6 +1986,7 @@ enum {
ALC887_FIXUP_ASUS_AUDIO,
ALC887_FIXUP_ASUS_HMIC,
ALCS1200A_FIXUP_MIC_VREF,
+ ALC888VD_FIXUP_MIC_100VREF,
};
static void alc889_fixup_coef(struct hda_codec *codec,
@@ -2539,6 +2540,13 @@ static const struct hda_fixup alc882_fix
{}
}
},
+ [ALC888VD_FIXUP_MIC_100VREF] = {
+ .type = HDA_FIXUP_PINCTLS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x18, PIN_VREF100 }, /* headset mic */
+ {}
+ }
+ },
};
static const struct snd_pci_quirk alc882_fixup_tbl[] = {
@@ -2608,6 +2616,7 @@ static const struct snd_pci_quirk alc882
SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_MBA11_VREF),
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD),
+ SND_PCI_QUIRK(0x10ec, 0x12d8, "iBase Elo Touch", ALC888VD_FIXUP_MIC_100VREF),
SND_PCI_QUIRK(0x13fe, 0x1009, "Advantech MIT-W101", ALC886_FIXUP_EAPD),
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 020/134] ALSA: hda/realtek: Add supported ALC257 for ChromeOS
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (18 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 019/134] ALSA: hda/realtek: Headset Mic VREF to 100% Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 021/134] net: libwx: fix memory leak on msix entry Greg Kroah-Hartman
` (126 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Kailang Yang, Takashi Iwai
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kailang Yang <kailang@realtek.com>
commit cae2bdb579ecc9d4219c58a7d3fde1958118dc1d upstream.
ChromeOS want to support ALC257.
Add codec ID to some relation function.
Signed-off-by: Kailang Yang <kailang@realtek.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/99a88a7dbdb045fd9d934abeb6cec15f@realtek.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
sound/pci/hda/patch_realtek.c | 3 +++
1 file changed, 3 insertions(+)
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -3264,6 +3264,7 @@ static void alc_disable_headset_jack_key
case 0x10ec0230:
case 0x10ec0236:
case 0x10ec0256:
+ case 0x10ec0257:
case 0x19e58326:
alc_write_coef_idx(codec, 0x48, 0x0);
alc_update_coef_idx(codec, 0x49, 0x0045, 0x0);
@@ -3293,6 +3294,7 @@ static void alc_enable_headset_jack_key(
case 0x10ec0230:
case 0x10ec0236:
case 0x10ec0256:
+ case 0x10ec0257:
case 0x19e58326:
alc_write_coef_idx(codec, 0x48, 0xd011);
alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
@@ -6504,6 +6506,7 @@ static void alc_combo_jack_hp_jd_restart
case 0x10ec0236:
case 0x10ec0255:
case 0x10ec0256:
+ case 0x10ec0257:
case 0x19e58326:
alc_update_coef_idx(codec, 0x1b, 0x8000, 1 << 15); /* Reset HP JD */
alc_update_coef_idx(codec, 0x1b, 0x8000, 0 << 15);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 021/134] net: libwx: fix memory leak on msix entry
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (19 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 020/134] ALSA: hda/realtek: Add supported ALC257 for ChromeOS Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 022/134] dm-verity: align struct dm_verity_fec_io properly Greg Kroah-Hartman
` (125 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jiawen Wu, Kalesh AP, Jakub Kicinski
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiawen Wu <jiawenwu@trustnetic.com>
commit 91fdb30ddfdb651509914d3ed0a0302712540fed upstream.
Since pci_free_irq_vectors() set pdev->msix_enabled as 0 in the
calling of pci_msix_shutdown(), wx->msix_entries is never freed.
Reordering the lines to fix the memory leak.
Cc: stable@vger.kernel.org
Fixes: 3f703186113f ("net: libwx: Add irq flow functions")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Link: https://lore.kernel.org/r/20231128095928.1083292-1-jiawenwu@trustnetic.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/wangxun/libwx/wx_lib.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c
+++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c
@@ -1965,11 +1965,11 @@ void wx_reset_interrupt_capability(struc
if (!pdev->msi_enabled && !pdev->msix_enabled)
return;
- pci_free_irq_vectors(wx->pdev);
if (pdev->msix_enabled) {
kfree(wx->msix_entries);
wx->msix_entries = NULL;
}
+ pci_free_irq_vectors(wx->pdev);
}
EXPORT_SYMBOL(wx_reset_interrupt_capability);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 022/134] dm-verity: align struct dm_verity_fec_io properly
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (20 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 021/134] net: libwx: fix memory leak on msix entry Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 023/134] scsi: Change SCSI device boolean fields to single bit flags Greg Kroah-Hartman
` (124 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Mikulas Patocka, Mike Snitzer
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mikulas Patocka <mpatocka@redhat.com>
commit 38bc1ab135db87577695816b190e7d6d8ec75879 upstream.
dm_verity_fec_io is placed after the end of two hash digests. If the hash
digest has unaligned length, struct dm_verity_fec_io could be unaligned.
This commit fixes the placement of struct dm_verity_fec_io, so that it's
aligned.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Fixes: a739ff3f543a ("dm verity: add support for forward error correction")
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/md/dm-verity-fec.c | 3 ++-
drivers/md/dm-verity.h | 6 ------
2 files changed, 2 insertions(+), 7 deletions(-)
--- a/drivers/md/dm-verity-fec.c
+++ b/drivers/md/dm-verity-fec.c
@@ -24,7 +24,8 @@ bool verity_fec_is_enabled(struct dm_ver
*/
static inline struct dm_verity_fec_io *fec_io(struct dm_verity_io *io)
{
- return (struct dm_verity_fec_io *) verity_io_digest_end(io->v, io);
+ return (struct dm_verity_fec_io *)
+ ((char *)io + io->v->ti->per_io_data_size - sizeof(struct dm_verity_fec_io));
}
/*
--- a/drivers/md/dm-verity.h
+++ b/drivers/md/dm-verity.h
@@ -115,12 +115,6 @@ static inline u8 *verity_io_want_digest(
return (u8 *)(io + 1) + v->ahash_reqsize + v->digest_size;
}
-static inline u8 *verity_io_digest_end(struct dm_verity *v,
- struct dm_verity_io *io)
-{
- return verity_io_want_digest(v, io) + v->digest_size;
-}
-
extern int verity_for_bv_block(struct dm_verity *v, struct dm_verity_io *io,
struct bvec_iter *iter,
int (*process)(struct dm_verity *v,
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 023/134] scsi: Change SCSI device boolean fields to single bit flags
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (21 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 022/134] dm-verity: align struct dm_verity_fec_io properly Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 024/134] scsi: sd: Fix system start for ATA devices Greg Kroah-Hartman
` (123 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Damien Le Moal, Niklas Cassel,
Martin K. Petersen
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Damien Le Moal <dlemoal@kernel.org>
commit 6371be7aeb986905bb60ec73d002fc02343393b4 upstream.
Commit 3cc2ffe5c16d ("scsi: sd: Differentiate system and runtime start/stop
management") changed the single bit manage_start_stop flag into 2 boolean
fields of the SCSI device structure. Commit 24eca2dce0f8 ("scsi: sd:
Introduce manage_shutdown device flag") introduced the manage_shutdown
boolean field for the same structure. Together, these 2 commits increase
the size of struct scsi_device by 8 bytes by using booleans instead of
defining the manage_xxx fields as single bit flags, similarly to other
flags of this structure.
Avoid this unnecessary structure size increase and be consistent with the
definition of other flags by reverting the definitions of the manage_xxx
fields as single bit flags.
Fixes: 3cc2ffe5c16d ("scsi: sd: Differentiate system and runtime start/stop management")
Fixes: 24eca2dce0f8 ("scsi: sd: Introduce manage_shutdown device flag")
Cc: <stable@vger.kernel.org>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20231120225631.37938-2-dlemoal@kernel.org
Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/ata/libata-scsi.c | 4 ++--
drivers/firewire/sbp2.c | 6 +++---
include/scsi/scsi_device.h | 6 +++---
3 files changed, 8 insertions(+), 8 deletions(-)
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -1056,8 +1056,8 @@ int ata_scsi_dev_config(struct scsi_devi
* and resume and shutdown only. For system level suspend/resume,
* devices power state is handled directly by libata EH.
*/
- sdev->manage_runtime_start_stop = true;
- sdev->manage_shutdown = true;
+ sdev->manage_runtime_start_stop = 1;
+ sdev->manage_shutdown = 1;
}
/*
--- a/drivers/firewire/sbp2.c
+++ b/drivers/firewire/sbp2.c
@@ -1519,9 +1519,9 @@ static int sbp2_scsi_slave_configure(str
sdev->use_10_for_rw = 1;
if (sbp2_param_exclusive_login) {
- sdev->manage_system_start_stop = true;
- sdev->manage_runtime_start_stop = true;
- sdev->manage_shutdown = true;
+ sdev->manage_system_start_stop = 1;
+ sdev->manage_runtime_start_stop = 1;
+ sdev->manage_shutdown = 1;
}
if (sdev->type == TYPE_ROM)
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -167,19 +167,19 @@ struct scsi_device {
* power state for system suspend/resume (suspend to RAM and
* hibernation) operations.
*/
- bool manage_system_start_stop;
+ unsigned manage_system_start_stop:1;
/*
* If true, let the high-level device driver (sd) manage the device
* power state for runtime device suspand and resume operations.
*/
- bool manage_runtime_start_stop;
+ unsigned manage_runtime_start_stop:1;
/*
* If true, let the high-level device driver (sd) manage the device
* power state for system shutdown (power off) operations.
*/
- bool manage_shutdown;
+ unsigned manage_shutdown:1;
unsigned removable:1;
unsigned changed:1; /* Data invalid due to media change */
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 024/134] scsi: sd: Fix system start for ATA devices
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (22 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 023/134] scsi: Change SCSI device boolean fields to single bit flags Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 025/134] scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode Greg Kroah-Hartman
` (122 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Damien Le Moal, Martin K. Petersen
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Damien Le Moal <dlemoal@kernel.org>
commit b09d7f8fd50f6e93cbadd8d27fde178f745b42a1 upstream.
It is not always possible to keep a device in the runtime suspended state
when a system level suspend/resume cycle is executed. E.g. for ATA devices
connected to AHCI adapters, system resume resets the ATA ports, which
causes connected devices to spin up. In such case, a runtime suspended disk
will incorrectly be seen with a suspended runtime state because the device
is not resumed by sd_resume_system(). The power state seen by the user is
different than the actual device physical power state.
Fix this issue by introducing the struct scsi_device flag
force_runtime_start_on_system_start. When set, this flag causes
sd_resume_system() to request a runtime resume operation for runtime
suspended devices. This results in the user seeing the device runtime_state
as active after a system resume, thus correctly reflecting the device
physical power state.
Fixes: 9131bff6a9f1 ("scsi: core: pm: Only runtime resume if necessary")
Cc: <stable@vger.kernel.org>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20231120225631.37938-3-dlemoal@kernel.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/ata/libata-scsi.c | 5 +++++
drivers/scsi/sd.c | 9 ++++++++-
include/scsi/scsi_device.h | 6 ++++++
3 files changed, 19 insertions(+), 1 deletion(-)
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -1055,9 +1055,14 @@ int ata_scsi_dev_config(struct scsi_devi
* Ask the sd driver to issue START STOP UNIT on runtime suspend
* and resume and shutdown only. For system level suspend/resume,
* devices power state is handled directly by libata EH.
+ * Given that disks are always spun up on system resume, also
+ * make sure that the sd driver forces runtime suspended disks
+ * to be resumed to correctly reflect the power state of the
+ * device.
*/
sdev->manage_runtime_start_stop = 1;
sdev->manage_shutdown = 1;
+ sdev->force_runtime_start_on_system_start = 1;
}
/*
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -3953,8 +3953,15 @@ static int sd_resume(struct device *dev,
static int sd_resume_system(struct device *dev)
{
- if (pm_runtime_suspended(dev))
+ if (pm_runtime_suspended(dev)) {
+ struct scsi_disk *sdkp = dev_get_drvdata(dev);
+ struct scsi_device *sdp = sdkp ? sdkp->device : NULL;
+
+ if (sdp && sdp->force_runtime_start_on_system_start)
+ pm_request_resume(dev);
+
return 0;
+ }
return sd_resume(dev, false);
}
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -181,6 +181,12 @@ struct scsi_device {
*/
unsigned manage_shutdown:1;
+ /*
+ * If set and if the device is runtime suspended, ask the high-level
+ * device driver (sd) to force a runtime resume of the device.
+ */
+ unsigned force_runtime_start_on_system_start:1;
+
unsigned removable:1;
unsigned changed:1; /* Data invalid due to media change */
unsigned busy:1; /* Used to prevent races */
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 025/134] scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (23 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 024/134] scsi: sd: Fix system start for ATA devices Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 026/134] drm/amd: Enable PCIe PME from D3 Greg Kroah-Hartman
` (121 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Peter Wang, Bart Van Assche,
Martin K. Petersen
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Wang <peter.wang@mediatek.com>
commit 93e6c0e19d5bb12b49534a411c85e21d333731fa upstream.
In MCQ mode, if cmd is pending in device and abort succeeds, response will
not be returned by device. So we need clear the cmd, otherwise timeout will
happen and next time we use same tag we will get a WARN_ON(lrbp->cmd).
Below is error log:
<3>[ 2277.447611][T21376] ufshcd-mtk 112b0000.ufshci: ufshcd_try_to_abort_task: cmd pending in the device. tag = 7
<3>[ 2277.476954][T21376] ufshcd-mtk 112b0000.ufshci: Aborting tag 7 / CDB 0x2a succeeded
<6>[ 2307.551263][T30974] ufshcd-mtk 112b0000.ufshci: ufshcd_abort: Device abort task at tag 7
<4>[ 2307.623264][ T327] WARNING: CPU: 5 PID: 327 at source/drivers/ufs/core/ufshcd.c:3021 ufshcd_queuecommand+0x66c/0xe34
Fixes: ab248643d3d6 ("scsi: ufs: core: Add error handling for MCQ mode")
Cc: <stable@vger.kernel.org>
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Link: https://lore.kernel.org/r/20231115131024.15829-1-peter.wang@mediatek.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/core/ufshcd.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -6347,11 +6347,24 @@ static bool ufshcd_abort_one(struct requ
struct scsi_device *sdev = cmd->device;
struct Scsi_Host *shost = sdev->host;
struct ufs_hba *hba = shost_priv(shost);
+ struct ufshcd_lrb *lrbp = &hba->lrb[tag];
+ struct ufs_hw_queue *hwq;
+ unsigned long flags;
*ret = ufshcd_try_to_abort_task(hba, tag);
dev_err(hba->dev, "Aborting tag %d / CDB %#02x %s\n", tag,
hba->lrb[tag].cmd ? hba->lrb[tag].cmd->cmnd[0] : -1,
*ret ? "failed" : "succeeded");
+
+ /* Release cmd in MCQ mode if abort succeeds */
+ if (is_mcq_enabled(hba) && (*ret == 0)) {
+ hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(lrbp->cmd));
+ spin_lock_irqsave(&hwq->cq_lock, flags);
+ if (ufshcd_cmd_inflight(lrbp->cmd))
+ ufshcd_release_scsi_cmd(hba, lrbp);
+ spin_unlock_irqrestore(&hwq->cq_lock, flags);
+ }
+
return *ret == 0;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 026/134] drm/amd: Enable PCIe PME from D3
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (24 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 025/134] scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 027/134] drm/amdgpu: correct the amdgpu runtime dereference usage count Greg Kroah-Hartman
` (120 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Mario Limonciello, Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <mario.limonciello@amd.com>
commit 6967741d26c87300a51b5e50d4acd104bc1a9759 upstream.
When dGPU is put into BOCO it may be in D3cold but still able send
PME on display hotplug event. For this to work it must be enabled
as wake source from D3.
When runpm is enabled use pci_wake_from_d3() to mark wakeup as
enabled by default.
Cc: stable@vger.kernel.org # 6.1+
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-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_drv.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -2195,6 +2195,8 @@ retry_init:
pm_runtime_mark_last_busy(ddev->dev);
pm_runtime_put_autosuspend(ddev->dev);
+ pci_wake_from_d3(pdev, TRUE);
+
/*
* For runpm implemented via BACO, PMFW will handle the
* timing for BACO in and out:
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 027/134] drm/amdgpu: correct the amdgpu runtime dereference usage count
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (25 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 026/134] drm/amd: Enable PCIe PME from D3 Greg Kroah-Hartman
@ 2023-12-05 3:14 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 028/134] drm/amdgpu: Force order between a read and write to the same address Greg Kroah-Hartman
` (119 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:14 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Prike Liang, Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Prike Liang <Prike.Liang@amd.com>
commit c6df7f313794c3ad41a49b9a7c95da369db607f3 upstream.
Fix the amdgpu runpm dereference usage count.
Signed-off-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@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_display.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -340,14 +340,11 @@ int amdgpu_display_crtc_set_config(struc
adev->have_disp_power_ref = true;
return ret;
}
- /* if we have no active crtcs, then drop the power ref
- * we got before
+ /* if we have no active crtcs, then go to
+ * drop the power ref we got before
*/
- if (!active && adev->have_disp_power_ref) {
- pm_runtime_put_autosuspend(dev->dev);
+ if (!active && adev->have_disp_power_ref)
adev->have_disp_power_ref = false;
- }
-
out:
/* drop the power reference we got coming in here */
pm_runtime_put_autosuspend(dev->dev);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 028/134] drm/amdgpu: Force order between a read and write to the same address
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (26 preceding siblings ...)
2023-12-05 3:14 ` [PATCH 6.6 027/134] drm/amdgpu: correct the amdgpu runtime dereference usage count Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 029/134] drm/amdgpu: fix memory overflow in the IB test Greg Kroah-Hartman
` (118 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Alex Sierra, Alex Deucher,
Felix Kuehling
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Sierra <alex.sierra@amd.com>
commit 4b27a33c3b173bef1d19ba89e0b9b812b4fddd25 upstream.
Setting register to force ordering to prevent read/write or write/read
hazards for un-cached modes.
Signed-off-by: Alex Sierra <alex.sierra@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.1.x
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 8 ++++++++
drivers/gpu/drm/amd/include/asic_reg/gc/gc_11_0_0_offset.h | 2 ++
2 files changed, 10 insertions(+)
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
@@ -83,6 +83,10 @@ MODULE_FIRMWARE("amdgpu/gc_11_0_4_me.bin
MODULE_FIRMWARE("amdgpu/gc_11_0_4_mec.bin");
MODULE_FIRMWARE("amdgpu/gc_11_0_4_rlc.bin");
+static const struct soc15_reg_golden golden_settings_gc_11_0[] = {
+ SOC15_REG_GOLDEN_VALUE(GC, 0, regTCP_CNTL, 0x20000000, 0x20000000)
+};
+
static const struct soc15_reg_golden golden_settings_gc_11_0_1[] =
{
SOC15_REG_GOLDEN_VALUE(GC, 0, regCGTT_GS_NGG_CLK_CTRL, 0x9fff8fff, 0x00000010),
@@ -275,6 +279,10 @@ static void gfx_v11_0_init_golden_regist
default:
break;
}
+ soc15_program_register_sequence(adev,
+ golden_settings_gc_11_0,
+ (const u32)ARRAY_SIZE(golden_settings_gc_11_0));
+
}
static void gfx_v11_0_write_data_to_reg(struct amdgpu_ring *ring, int eng_sel,
--- a/drivers/gpu/drm/amd/include/asic_reg/gc/gc_11_0_0_offset.h
+++ b/drivers/gpu/drm/amd/include/asic_reg/gc/gc_11_0_0_offset.h
@@ -6369,6 +6369,8 @@
#define regTCP_INVALIDATE_BASE_IDX 1
#define regTCP_STATUS 0x19a1
#define regTCP_STATUS_BASE_IDX 1
+#define regTCP_CNTL 0x19a2
+#define regTCP_CNTL_BASE_IDX 1
#define regTCP_CNTL2 0x19a3
#define regTCP_CNTL2_BASE_IDX 1
#define regTCP_DEBUG_INDEX 0x19a5
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 029/134] drm/amdgpu: fix memory overflow in the IB test
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (27 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 028/134] drm/amdgpu: Force order between a read and write to the same address Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 030/134] drm/amdgpu: Update EEPROM I2C address for smu v13_0_0 Greg Kroah-Hartman
` (117 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Tim Huang, Yifan Zhang,
Christian König, Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tim Huang <Tim.Huang@amd.com>
commit 6b0b7789a7a5f3e69185449f891beea58e563f9b upstream.
Fix a memory overflow issue in the gfx IB test
for some ASICs. At least 20 bytes are needed for
the IB test packet.
v2: correct code indentation errors. (Christian)
Signed-off-by: Tim Huang <Tim.Huang@amd.com>
Reviewed-by: Yifan Zhang <yifan1.zhang@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/gfx_v11_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 4 ++--
4 files changed, 7 insertions(+), 7 deletions(-)
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
@@ -398,7 +398,7 @@ static int gfx_v11_0_ring_test_ib(struct
adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
cpu_ptr = &adev->wb.wb[index];
- r = amdgpu_ib_get(adev, NULL, 16, AMDGPU_IB_POOL_DIRECT, &ib);
+ r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
if (r) {
DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
goto err1;
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -883,8 +883,8 @@ static int gfx_v8_0_ring_test_ib(struct
gpu_addr = adev->wb.gpu_addr + (index * 4);
adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
memset(&ib, 0, sizeof(ib));
- r = amdgpu_ib_get(adev, NULL, 16,
- AMDGPU_IB_POOL_DIRECT, &ib);
+
+ r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
if (r)
goto err1;
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -1039,8 +1039,8 @@ static int gfx_v9_0_ring_test_ib(struct
gpu_addr = adev->wb.gpu_addr + (index * 4);
adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
memset(&ib, 0, sizeof(ib));
- r = amdgpu_ib_get(adev, NULL, 16,
- AMDGPU_IB_POOL_DIRECT, &ib);
+
+ r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
if (r)
goto err1;
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
@@ -296,8 +296,8 @@ static int gfx_v9_4_3_ring_test_ib(struc
gpu_addr = adev->wb.gpu_addr + (index * 4);
adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
memset(&ib, 0, sizeof(ib));
- r = amdgpu_ib_get(adev, NULL, 16,
- AMDGPU_IB_POOL_DIRECT, &ib);
+
+ r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
if (r)
goto err1;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 030/134] drm/amdgpu: Update EEPROM I2C address for smu v13_0_0
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (28 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 029/134] drm/amdgpu: fix memory overflow in the IB test Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 031/134] drm/amd/display: Include udelay when waiting for INBOX0 ACK Greg Kroah-Hartman
` (116 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Candice Li, Hawking Zhang,
Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Candice Li <candice.li@amd.com>
commit e0409021e34af50e7b6f31635c8d21583d7c43dd upstream.
Check smu v13_0_0 SKU type to select EEPROM I2C address.
Signed-off-by: Candice Li <candice.li@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.1.x
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
@@ -214,6 +214,12 @@ static bool __get_eeprom_i2c_addr(struct
control->i2c_address = EEPROM_I2C_MADDR_0;
return true;
case IP_VERSION(13, 0, 0):
+ if (strnstr(atom_ctx->vbios_pn, "D707",
+ sizeof(atom_ctx->vbios_pn)))
+ control->i2c_address = EEPROM_I2C_MADDR_0;
+ else
+ control->i2c_address = EEPROM_I2C_MADDR_4;
+ return true;
case IP_VERSION(13, 0, 6):
case IP_VERSION(13, 0, 10):
control->i2c_address = EEPROM_I2C_MADDR_4;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 031/134] drm/amd/display: Include udelay when waiting for INBOX0 ACK
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (29 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 030/134] drm/amdgpu: Update EEPROM I2C address for smu v13_0_0 Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 032/134] drm/amd/display: Remove min_dst_y_next_start check for Z8 Greg Kroah-Hartman
` (115 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Samson Tam, Hamza Mahfooz, Alvin Lee,
Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alvin Lee <alvin.lee2@amd.com>
commit 3c9ea68cb61bd7e5bd312c06a12adada74ff5805 upstream.
When waiting for the ACK for INBOX0 message,
we have to ensure to include the udelay
for proper wait time
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Samson Tam <samson.tam@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Alvin Lee <alvin.lee2@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
+++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
@@ -997,6 +997,7 @@ enum dmub_status dmub_srv_wait_for_inbox
ack = dmub->hw_funcs.read_inbox0_ack_register(dmub);
if (ack)
return DMUB_STATUS_OK;
+ udelay(1);
}
return DMUB_STATUS_TIMEOUT;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 032/134] drm/amd/display: Remove min_dst_y_next_start check for Z8
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (30 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 031/134] drm/amd/display: Include udelay when waiting for INBOX0 ACK Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 033/134] drm/amd/display: Use DRAM speed from validation for dummy p-state Greg Kroah-Hartman
` (114 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Syed Hassan, Hamza Mahfooz,
Nicholas Kazlauskas, Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
commit 08448812acb2ab701cd5ff7e1a1dc97f7f10260c upstream.
[Why]
Flickering occurs on DRR supported panels when engaged in DRR due to
min_dst_y_next becoming larger than the frame size itself.
[How]
In general, we should be able to enter Z8 when this is engaged but it
might be a net power loss even if the calculation wasn't bugged.
Don't support enabling Z8 during the DRR region.
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Syed Hassan <syed.hassan@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c
@@ -948,10 +948,8 @@ static enum dcn_zstate_support_state de
{
int plane_count;
int i;
- unsigned int min_dst_y_next_start_us;
plane_count = 0;
- min_dst_y_next_start_us = 0;
for (i = 0; i < dc->res_pool->pipe_count; i++) {
if (context->res_ctx.pipe_ctx[i].plane_state)
plane_count++;
@@ -973,26 +971,15 @@ static enum dcn_zstate_support_state de
else if (context->stream_count == 1 && context->streams[0]->signal == SIGNAL_TYPE_EDP) {
struct dc_link *link = context->streams[0]->sink->link;
struct dc_stream_status *stream_status = &context->stream_status[0];
- struct dc_stream_state *current_stream = context->streams[0];
int minmum_z8_residency = dc->debug.minimum_z8_residency_time > 0 ? dc->debug.minimum_z8_residency_time : 1000;
bool allow_z8 = context->bw_ctx.dml.vba.StutterPeriod > (double)minmum_z8_residency;
bool is_pwrseq0 = link->link_index == 0;
- bool isFreesyncVideo;
-
- isFreesyncVideo = current_stream->adjust.v_total_min == current_stream->adjust.v_total_max;
- isFreesyncVideo = isFreesyncVideo && current_stream->timing.v_total < current_stream->adjust.v_total_min;
- for (i = 0; i < dc->res_pool->pipe_count; i++) {
- if (context->res_ctx.pipe_ctx[i].stream == current_stream && isFreesyncVideo) {
- min_dst_y_next_start_us = context->res_ctx.pipe_ctx[i].dlg_regs.min_dst_y_next_start_us;
- break;
- }
- }
/* Don't support multi-plane configurations */
if (stream_status->plane_count > 1)
return DCN_ZSTATE_SUPPORT_DISALLOW;
- if (is_pwrseq0 && (context->bw_ctx.dml.vba.StutterPeriod > 5000.0 || min_dst_y_next_start_us > 5000))
+ if (is_pwrseq0 && context->bw_ctx.dml.vba.StutterPeriod > 5000.0)
return DCN_ZSTATE_SUPPORT_ALLOW;
else if (is_pwrseq0 && link->psr_settings.psr_version == DC_PSR_VERSION_1 && !link->panel_config.psr.disable_psr)
return allow_z8 ? DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY : DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 033/134] drm/amd/display: Use DRAM speed from validation for dummy p-state
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (31 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 032/134] drm/amd/display: Remove min_dst_y_next_start check for Z8 Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 034/134] drm/amd/display: Update min Z8 residency time to 2100 for DCN314 Greg Kroah-Hartman
` (113 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Samson Tam, Hamza Mahfooz, Alvin Lee,
Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alvin Lee <alvin.lee2@amd.com>
commit 9be601135ba8ac69880c01606c82140f2dde105e upstream.
[Description]
When choosing which dummy p-state latency to use, we
need to use the DRAM speed from validation. The DRAMSpeed
DML variable can change because we use different input
params to DML when populating watermarks set B.
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Samson Tam <samson.tam@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Alvin Lee <alvin.lee2@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
@@ -1964,6 +1964,7 @@ void dcn32_calculate_wm_and_dlg_fpu(stru
int i, pipe_idx, vlevel_temp = 0;
double dcfclk = dcn3_2_soc.clock_limits[0].dcfclk_mhz;
double dcfclk_from_validation = context->bw_ctx.dml.vba.DCFCLKState[vlevel][context->bw_ctx.dml.vba.maxMpcComb];
+ double dram_speed_from_validation = context->bw_ctx.dml.vba.DRAMSpeed;
double dcfclk_from_fw_based_mclk_switching = dcfclk_from_validation;
bool pstate_en = context->bw_ctx.dml.vba.DRAMClockChangeSupport[vlevel][context->bw_ctx.dml.vba.maxMpcComb] !=
dm_dram_clock_change_unsupported;
@@ -2151,7 +2152,7 @@ void dcn32_calculate_wm_and_dlg_fpu(stru
}
if (dc->clk_mgr->bw_params->wm_table.nv_entries[WM_C].valid) {
- min_dram_speed_mts = context->bw_ctx.dml.vba.DRAMSpeed;
+ min_dram_speed_mts = dram_speed_from_validation;
min_dram_speed_mts_margin = 160;
context->bw_ctx.dml.soc.dram_clock_change_latency_us =
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 034/134] drm/amd/display: Update min Z8 residency time to 2100 for DCN314
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (32 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 033/134] drm/amd/display: Use DRAM speed from validation for dummy p-state Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 035/134] drm/amd/display: fix ABM disablement Greg Kroah-Hartman
` (112 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Syed Hassan, Hamza Mahfooz,
Nicholas Kazlauskas, Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
commit 4636a211980052ca0df90265c8a3ed2d46099091 upstream.
[Why]
Some panels with residency period of 2054 exhibit flickering with
Z8 at the end of the frame.
[How]
As a workaround, increase the limit to block these panels.
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Syed Hassan <syed.hassan@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c
@@ -869,7 +869,7 @@ static const struct dc_plane_cap plane_c
static const struct dc_debug_options debug_defaults_drv = {
.disable_z10 = false,
.enable_z9_disable_interface = true,
- .minimum_z8_residency_time = 2000,
+ .minimum_z8_residency_time = 2100,
.psr_skip_crtc_disable = true,
.replay_skip_crtc_disabled = true,
.disable_dmcu = true,
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 035/134] drm/amd/display: fix ABM disablement
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (33 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 034/134] drm/amd/display: Update min Z8 residency time to 2100 for DCN314 Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 036/134] drm/amd/display: force toggle rate wa for first link training for a retimer Greg Kroah-Hartman
` (111 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Harry Wentland, Hamza Mahfooz,
Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hamza Mahfooz <hamza.mahfooz@amd.com>
commit b9f46f0b98784e40288ee393f863f553fde062fa upstream.
On recent versions of DMUB firmware, if we want to completely disable
ABM we have to pass ABM_LEVEL_IMMEDIATE_DISABLE as the requested ABM
level to DMUB. Otherwise, LCD eDP displays are unable to reach their
maximum brightness levels. So, to fix this whenever the user requests an
ABM level of 0 pass ABM_LEVEL_IMMEDIATE_DISABLE to DMUB instead. Also,
to keep the user's experience consistent map ABM_LEVEL_IMMEDIATE_DISABLE
to 0 when a user tries to read the requested ABM level.
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6236,7 +6236,7 @@ int amdgpu_dm_connector_atomic_set_prope
dm_new_state->underscan_enable = val;
ret = 0;
} else if (property == adev->mode_info.abm_level_property) {
- dm_new_state->abm_level = val;
+ dm_new_state->abm_level = val ?: ABM_LEVEL_IMMEDIATE_DISABLE;
ret = 0;
}
@@ -6281,7 +6281,8 @@ int amdgpu_dm_connector_atomic_get_prope
*val = dm_state->underscan_enable;
ret = 0;
} else if (property == adev->mode_info.abm_level_property) {
- *val = dm_state->abm_level;
+ *val = (dm_state->abm_level != ABM_LEVEL_IMMEDIATE_DISABLE) ?
+ dm_state->abm_level : 0;
ret = 0;
}
@@ -6354,7 +6355,8 @@ void amdgpu_dm_connector_funcs_reset(str
state->pbn = 0;
if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
- state->abm_level = amdgpu_dm_abm_level;
+ state->abm_level = amdgpu_dm_abm_level ?:
+ ABM_LEVEL_IMMEDIATE_DISABLE;
__drm_atomic_helper_connector_reset(connector, &state->base);
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 036/134] drm/amd/display: force toggle rate wa for first link training for a retimer
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (34 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 035/134] drm/amd/display: fix ABM disablement Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 037/134] dm verity: initialize fec io before freeing it Greg Kroah-Hartman
` (110 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Michael Strauss, Hamza Mahfooz,
Zhongwei, Alex Deucher
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhongwei <zhongwei.zhang@amd.com>
commit eb28018943fed7639dfea1c9ec9c756ec692b99a upstream.
[WHY]
Handover from DMUB to driver does not perform link rate toggle.
It might cause link training failure for boot up.
[HOW]
Force toggle rate wa for first link train.
link->vendor_specific_lttpr_link_rate_wa should be zero then.
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Michael Strauss <michael.strauss@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Zhongwei <zhongwei.zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c
@@ -115,7 +115,7 @@ static enum link_training_result perform
lt_settings->cr_pattern_time = 16000;
/* Fixed VS/PE specific: Toggle link rate */
- apply_toggle_rate_wa = (link->vendor_specific_lttpr_link_rate_wa == target_rate);
+ apply_toggle_rate_wa = ((link->vendor_specific_lttpr_link_rate_wa == target_rate) || (link->vendor_specific_lttpr_link_rate_wa == 0));
target_rate = get_dpcd_link_rate(<_settings->link_settings);
toggle_rate = (target_rate == 0x6) ? 0xA : 0x6;
@@ -271,7 +271,7 @@ enum link_training_result dp_perform_fix
/* Vendor specific: Toggle link rate */
toggle_rate = (rate == 0x6) ? 0xA : 0x6;
- if (link->vendor_specific_lttpr_link_rate_wa == rate) {
+ if (link->vendor_specific_lttpr_link_rate_wa == rate || link->vendor_specific_lttpr_link_rate_wa == 0) {
core_link_write_dpcd(
link,
DP_LINK_BW_SET,
@@ -617,7 +617,7 @@ enum link_training_result dp_perform_fix
/* Vendor specific: Toggle link rate */
toggle_rate = (rate == 0x6) ? 0xA : 0x6;
- if (link->vendor_specific_lttpr_link_rate_wa == rate) {
+ if (link->vendor_specific_lttpr_link_rate_wa == rate || link->vendor_specific_lttpr_link_rate_wa == 0) {
core_link_write_dpcd(
link,
DP_LINK_BW_SET,
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 037/134] dm verity: initialize fec io before freeing it
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (35 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 036/134] drm/amd/display: force toggle rate wa for first link training for a retimer Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 038/134] dm verity: dont perform FEC for failed readahead IO Greg Kroah-Hartman
` (109 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Wu Bo, Mikulas Patocka, Mike Snitzer
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wu Bo <bo.wu@vivo.com>
commit 7be05bdfb4efc1396f7692562c7161e2b9f595f1 upstream.
If BIO error, verity_end_io() can call verity_finish_io() before
verity_fec_init_io(). Therefore, fec_io->rs is not initialized and
may crash when doing memory freeing in verity_fec_finish_io().
Crash call stack:
die+0x90/0x2b8
__do_kernel_fault+0x260/0x298
do_bad_area+0x2c/0xdc
do_translation_fault+0x3c/0x54
do_mem_abort+0x54/0x118
el1_abort+0x38/0x5c
el1h_64_sync_handler+0x50/0x90
el1h_64_sync+0x64/0x6c
free_rs+0x18/0xac
fec_rs_free+0x10/0x24
mempool_free+0x58/0x148
verity_fec_finish_io+0x4c/0xb0
verity_end_io+0xb8/0x150
Cc: stable@vger.kernel.org # v6.0+
Fixes: 5721d4e5a9cd ("dm verity: Add optional "try_verify_in_tasklet" feature")
Signed-off-by: Wu Bo <bo.wu@vivo.com>
Reviewed-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/md/dm-verity-target.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -642,7 +642,6 @@ static void verity_work(struct work_stru
io->in_tasklet = false;
- verity_fec_init_io(io);
verity_finish_io(io, errno_to_blk_status(verity_verify_io(io)));
}
@@ -792,6 +791,8 @@ static int verity_map(struct dm_target *
bio->bi_private = io;
io->iter = bio->bi_iter;
+ verity_fec_init_io(io);
+
verity_submit_prefetch(v, io);
submit_bio_noacct(bio);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 038/134] dm verity: dont perform FEC for failed readahead IO
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (36 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 037/134] dm verity: initialize fec io before freeing it Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 039/134] nvme: check for valid nvme_identify_ns() before using it Greg Kroah-Hartman
` (108 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Wu Bo, Mikulas Patocka, Mike Snitzer
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wu Bo <bo.wu@vivo.com>
commit 0193e3966ceeeef69e235975918b287ab093082b upstream.
We found an issue under Android OTA scenario that many BIOs have to do
FEC where the data under dm-verity is 100% complete and no corruption.
Android OTA has many dm-block layers, from upper to lower:
dm-verity
dm-snapshot
dm-origin & dm-cow
dm-linear
ufs
DM tables have to change 2 times during Android OTA merging process.
When doing table change, the dm-snapshot will be suspended for a while.
During this interval, many readahead IOs are submitted to dm_verity
from filesystem. Then the kverity works are busy doing FEC process
which cost too much time to finish dm-verity IO. This causes needless
delay which feels like system is hung.
After adding debugging it was found that each readahead IO needed
around 10s to finish when this situation occurred. This is due to IO
amplification:
dm-snapshot suspend
erofs_readahead // 300+ io is submitted
dm_submit_bio (dm_verity)
dm_submit_bio (dm_snapshot)
bio return EIO
bio got nothing, it's empty
verity_end_io
verity_verify_io
forloop range(0, io->n_blocks) // each io->nblocks ~= 20
verity_fec_decode
fec_decode_rsb
fec_read_bufs
forloop range(0, v->fec->rsn) // v->fec->rsn = 253
new_read
submit_bio (dm_snapshot)
end loop
end loop
dm-snapshot resume
Readahead BIOs get nothing while dm-snapshot is suspended, so all of
them will cause verity's FEC.
Each readahead BIO needs to verify ~20 (io->nblocks) blocks.
Each block needs to do FEC, and every block needs to do 253
(v->fec->rsn) reads.
So during the suspend interval(~200ms), 300 readahead BIOs trigger
~1518000 (300*20*253) IOs to dm-snapshot.
As readahead IO is not required by userspace, and to fix this issue,
it is best to pass readahead errors to upper layer to handle it.
Cc: stable@vger.kernel.org
Fixes: a739ff3f543a ("dm verity: add support for forward error correction")
Signed-off-by: Wu Bo <bo.wu@vivo.com>
Reviewed-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/md/dm-verity-target.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -667,7 +667,9 @@ static void verity_end_io(struct bio *bi
struct dm_verity_io *io = bio->bi_private;
if (bio->bi_status &&
- (!verity_fec_is_enabled(io->v) || verity_is_system_shutting_down())) {
+ (!verity_fec_is_enabled(io->v) ||
+ verity_is_system_shutting_down() ||
+ (bio->bi_opf & REQ_RAHEAD))) {
verity_finish_io(io, bio->bi_status);
return;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 039/134] nvme: check for valid nvme_identify_ns() before using it
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (37 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 038/134] dm verity: dont perform FEC for failed readahead IO Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 040/134] r8169: fix deadlock on RTL8125 in jumbo mtu mode Greg Kroah-Hartman
` (107 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Ewan D. Milne, Keith Busch
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ewan D. Milne <emilne@redhat.com>
commit d8b90d600aff181936457f032d116dbd8534db06 upstream.
When scanning namespaces, it is possible to get valid data from the first
call to nvme_identify_ns() in nvme_alloc_ns(), but not from the second
call in nvme_update_ns_info_block(). In particular, if the NSID becomes
inactive between the two commands, a storage device may return a buffer
filled with zero as per 4.1.5.1. In this case, we can get a kernel crash
due to a divide-by-zero in blk_stack_limits() because ns->lba_shift will
be set to zero.
PID: 326 TASK: ffff95fec3cd8000 CPU: 29 COMMAND: "kworker/u98:10"
#0 [ffffad8f8702f9e0] machine_kexec at ffffffff91c76ec7
#1 [ffffad8f8702fa38] __crash_kexec at ffffffff91dea4fa
#2 [ffffad8f8702faf8] crash_kexec at ffffffff91deb788
#3 [ffffad8f8702fb00] oops_end at ffffffff91c2e4bb
#4 [ffffad8f8702fb20] do_trap at ffffffff91c2a4ce
#5 [ffffad8f8702fb70] do_error_trap at ffffffff91c2a595
#6 [ffffad8f8702fbb0] exc_divide_error at ffffffff928506e6
#7 [ffffad8f8702fbd0] asm_exc_divide_error at ffffffff92a00926
[exception RIP: blk_stack_limits+434]
RIP: ffffffff92191872 RSP: ffffad8f8702fc80 RFLAGS: 00010246
RAX: 0000000000000000 RBX: ffff95efa0c91800 RCX: 0000000000000001
RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000001
RBP: 00000000ffffffff R8: ffff95fec7df35a8 R9: 0000000000000000
R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: ffff95fed33c09a8
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
#8 [ffffad8f8702fce0] nvme_update_ns_info_block at ffffffffc06d3533 [nvme_core]
#9 [ffffad8f8702fd18] nvme_scan_ns at ffffffffc06d6fa7 [nvme_core]
This happened when the check for valid data was moved out of nvme_identify_ns()
into one of the callers. Fix this by checking in both callers.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218186
Fixes: 0dd6fff2aad4 ("nvme: bring back auto-removal of deleted namespaces during sequential scan")
Cc: stable@vger.kernel.org
Signed-off-by: Ewan D. Milne <emilne@redhat.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/nvme/host/core.c | 9 +++++++++
1 file changed, 9 insertions(+)
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -2026,6 +2026,13 @@ static int nvme_update_ns_info_block(str
if (ret)
return ret;
+ if (id->ncap == 0) {
+ /* namespace not allocated or attached */
+ info->is_removed = true;
+ ret = -ENODEV;
+ goto error;
+ }
+
blk_mq_freeze_queue(ns->disk->queue);
lbaf = nvme_lbaf_index(id->flbas);
ns->lba_shift = id->lbaf[lbaf].ds;
@@ -2083,6 +2090,8 @@ out:
set_bit(NVME_NS_READY, &ns->flags);
ret = 0;
}
+
+error:
kfree(id);
return ret;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 040/134] r8169: fix deadlock on RTL8125 in jumbo mtu mode
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (38 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 039/134] nvme: check for valid nvme_identify_ns() before using it Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 041/134] ACPI: video: Use acpi_video_device for cooling-dev driver data Greg Kroah-Hartman
` (106 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Ian Chen, Heiner Kallweit,
Paolo Abeni
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiner Kallweit <hkallweit1@gmail.com>
commit 59d395ed606d8df14615712b0cdcdadb2d962175 upstream.
The original change results in a deadlock if jumbo mtu mode is used.
Reason is that the phydev lock is held when rtl_reset_work() is called
here, and rtl_jumbo_config() calls phy_start_aneg() which also tries
to acquire the phydev lock. Fix this by calling rtl_reset_work()
asynchronously.
Fixes: 621735f59064 ("r8169: fix rare issue with broken rx after link-down on RTL8125")
Reported-by: Ian Chen <free122448@hotmail.com>
Tested-by: Ian Chen <free122448@hotmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://lore.kernel.org/r/caf6a487-ef8c-4570-88f9-f47a659faf33@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/realtek/r8169_main.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -579,6 +579,7 @@ struct rtl8169_tc_offsets {
enum rtl_flag {
RTL_FLAG_TASK_ENABLED = 0,
RTL_FLAG_TASK_RESET_PENDING,
+ RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE,
RTL_FLAG_TASK_TX_TIMEOUT,
RTL_FLAG_MAX
};
@@ -4582,6 +4583,8 @@ static void rtl_task(struct work_struct
reset:
rtl_reset_work(tp);
netif_wake_queue(tp->dev);
+ } else if (test_and_clear_bit(RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE, tp->wk.flags)) {
+ rtl_reset_work(tp);
}
out_unlock:
rtnl_unlock();
@@ -4615,7 +4618,7 @@ static void r8169_phylink_handler(struct
} else {
/* In few cases rx is broken after link-down otherwise */
if (rtl_is_8125(tp))
- rtl_reset_work(tp);
+ rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE);
pm_runtime_idle(d);
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 041/134] ACPI: video: Use acpi_video_device for cooling-dev driver data
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (39 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 040/134] r8169: fix deadlock on RTL8125 in jumbo mtu mode Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 042/134] io_uring: dont allow discontig pages for IORING_SETUP_NO_MMAP Greg Kroah-Hartman
` (105 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Hans de Goede, Rafael J. Wysocki
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <hdegoede@redhat.com>
commit 172c48caed91a978bca078042222d09baea13717 upstream.
The acpi_video code was storing the acpi_video_device as driver_data
in the acpi_device children of the acpi_video_bus acpi_device.
But the acpi_video driver only binds to the bus acpi_device.
It uses, but does not bind to, the children. Since it is not
the driver it should not be using the driver_data of the children's
acpi_device-s.
Since commit 0d16710146a1 ("ACPI: bus: Set driver_data to NULL every
time .add() fails") the childen's driver_data ends up getting set
to NULL after a driver fails to bind to the children leading to a NULL
pointer deref in video_get_max_state when registering the cooling-dev:
[ 3.148958] BUG: kernel NULL pointer dereference, address: 0000000000000090
<snip>
[ 3.149015] Hardware name: Sony Corporation VPCSB2X9R/VAIO, BIOS R2087H4 06/15/2012
[ 3.149021] RIP: 0010:video_get_max_state+0x17/0x30 [video]
<snip>
[ 3.149105] Call Trace:
[ 3.149110] <TASK>
[ 3.149114] ? __die+0x23/0x70
[ 3.149126] ? page_fault_oops+0x171/0x4e0
[ 3.149137] ? exc_page_fault+0x7f/0x180
[ 3.149147] ? asm_exc_page_fault+0x26/0x30
[ 3.149158] ? video_get_max_state+0x17/0x30 [video 9b6f3f0d19d7b4a0e2df17a2d8b43bc19c2ed71f]
[ 3.149176] ? __pfx_video_get_max_state+0x10/0x10 [video 9b6f3f0d19d7b4a0e2df17a2d8b43bc19c2ed71f]
[ 3.149192] __thermal_cooling_device_register.part.0+0xf2/0x2f0
[ 3.149205] acpi_video_bus_register_backlight.part.0.isra.0+0x414/0x570 [video 9b6f3f0d19d7b4a0e2df17a2d8b43bc19c2ed71f]
[ 3.149227] acpi_video_register_backlight+0x57/0x80 [video 9b6f3f0d19d7b4a0e2df17a2d8b43bc19c2ed71f]
[ 3.149245] intel_acpi_video_register+0x68/0x90 [i915 1f3a758130b32ef13d301d4f8f78c7d766d57f2a]
[ 3.149669] intel_display_driver_register+0x28/0x50 [i915 1f3a758130b32ef13d301d4f8f78c7d766d57f2a]
[ 3.150064] i915_driver_probe+0x790/0xb90 [i915 1f3a758130b32ef13d301d4f8f78c7d766d57f2a]
[ 3.150402] local_pci_probe+0x45/0xa0
[ 3.150412] pci_device_probe+0xc1/0x260
<snip>
Fix this by directly using the acpi_video_device as devdata for
the cooling-device, which avoids the need to set driver-data on
the children at all.
Fixes: 0d16710146a1 ("ACPI: bus: Set driver_data to NULL every time .add() fails")
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/9718
Cc: 6.6+ <stable@vger.kernel.org> # 6.6+
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/acpi/acpi_video.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index d321ca7160d9..6cee536c229a 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -253,8 +253,7 @@ static const struct backlight_ops acpi_backlight_ops = {
static int video_get_max_state(struct thermal_cooling_device *cooling_dev,
unsigned long *state)
{
- struct acpi_device *device = cooling_dev->devdata;
- struct acpi_video_device *video = acpi_driver_data(device);
+ struct acpi_video_device *video = cooling_dev->devdata;
*state = video->brightness->count - ACPI_VIDEO_FIRST_LEVEL - 1;
return 0;
@@ -263,8 +262,7 @@ static int video_get_max_state(struct thermal_cooling_device *cooling_dev,
static int video_get_cur_state(struct thermal_cooling_device *cooling_dev,
unsigned long *state)
{
- struct acpi_device *device = cooling_dev->devdata;
- struct acpi_video_device *video = acpi_driver_data(device);
+ struct acpi_video_device *video = cooling_dev->devdata;
unsigned long long level;
int offset;
@@ -283,8 +281,7 @@ static int video_get_cur_state(struct thermal_cooling_device *cooling_dev,
static int
video_set_cur_state(struct thermal_cooling_device *cooling_dev, unsigned long state)
{
- struct acpi_device *device = cooling_dev->devdata;
- struct acpi_video_device *video = acpi_driver_data(device);
+ struct acpi_video_device *video = cooling_dev->devdata;
int level;
if (state >= video->brightness->count - ACPI_VIDEO_FIRST_LEVEL)
@@ -1125,7 +1122,6 @@ static int acpi_video_bus_get_one_device(struct acpi_device *device, void *arg)
strcpy(acpi_device_name(device), ACPI_VIDEO_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS);
- device->driver_data = data;
data->device_id = device_id;
data->video = video;
@@ -1747,8 +1743,8 @@ static void acpi_video_dev_register_backlight(struct acpi_video_device *device)
device->backlight->props.brightness =
acpi_video_get_brightness(device->backlight);
- device->cooling_dev = thermal_cooling_device_register("LCD",
- device->dev, &video_cooling_ops);
+ device->cooling_dev = thermal_cooling_device_register("LCD", device,
+ &video_cooling_ops);
if (IS_ERR(device->cooling_dev)) {
/*
* Set cooling_dev to NULL so we don't crash trying to free it.
--
2.43.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 042/134] io_uring: dont allow discontig pages for IORING_SETUP_NO_MMAP
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (40 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 041/134] ACPI: video: Use acpi_video_device for cooling-dev driver data Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 043/134] iommu/vt-d: Fix incorrect cache invalidation for mm notification Greg Kroah-Hartman
` (104 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jann Horn, Jens Axboe
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <axboe@kernel.dk>
commit 820d070feb668aab5bc9413c285a1dda2a70e076 upstream.
io_sqes_map() is used rather than io_mem_alloc(), if the application
passes in memory for mapping rather than have the kernel allocate it and
then mmap(2) the ranges. This then calls __io_uaddr_map() to perform the
page mapping and pinning, which checks if we end up with the same pages,
if more than one page is mapped. But this check is incorrect and only
checks if the first and last pages are the same, where it really should
be checking if the mapped pages are contigous. This allows mapping a
single normal page, or a huge page range.
Down the line we can add support for remapping pages to be virtually
contigous, which is really all that io_uring cares about.
Cc: stable@vger.kernel.org
Fixes: 03d89a2de25b ("io_uring: support for user allocated memory for rings/sqes")
Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
io_uring/io_uring.c | 41 ++++++++++++++++++++++-------------------
1 file changed, 22 insertions(+), 19 deletions(-)
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -2690,6 +2690,7 @@ static void *__io_uaddr_map(struct page
{
struct page **page_array;
unsigned int nr_pages;
+ void *page_addr;
int ret, i;
*npages = 0;
@@ -2711,27 +2712,29 @@ err:
io_pages_free(&page_array, ret > 0 ? ret : 0);
return ret < 0 ? ERR_PTR(ret) : ERR_PTR(-EFAULT);
}
- /*
- * Should be a single page. If the ring is small enough that we can
- * use a normal page, that is fine. If we need multiple pages, then
- * userspace should use a huge page. That's the only way to guarantee
- * that we get contigious memory, outside of just being lucky or
- * (currently) having low memory fragmentation.
- */
- if (page_array[0] != page_array[ret - 1])
- goto err;
-
- /*
- * Can't support mapping user allocated ring memory on 32-bit archs
- * where it could potentially reside in highmem. Just fail those with
- * -EINVAL, just like we did on kernels that didn't support this
- * feature.
- */
+
+ page_addr = page_address(page_array[0]);
for (i = 0; i < nr_pages; i++) {
- if (PageHighMem(page_array[i])) {
- ret = -EINVAL;
+ ret = -EINVAL;
+
+ /*
+ * Can't support mapping user allocated ring memory on 32-bit
+ * archs where it could potentially reside in highmem. Just
+ * fail those with -EINVAL, just like we did on kernels that
+ * didn't support this feature.
+ */
+ if (PageHighMem(page_array[i]))
+ goto err;
+
+ /*
+ * No support for discontig pages for now, should either be a
+ * single normal page, or a huge page. Later on we can add
+ * support for remapping discontig pages, for now we will
+ * just fail them with EINVAL.
+ */
+ if (page_address(page_array[i]) != page_addr)
goto err;
- }
+ page_addr += PAGE_SIZE;
}
*pages = page_array;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 043/134] iommu/vt-d: Fix incorrect cache invalidation for mm notification
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (41 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 042/134] io_uring: dont allow discontig pages for IORING_SETUP_NO_MMAP Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 044/134] io_uring: free io_buffer_list entries via RCU Greg Kroah-Hartman
` (103 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Huang Ying, Alistair Popple,
Jason Gunthorpe, Lu Baolu, Joerg Roedel, Luo Yuzhang, Tony Zhu
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Baolu <baolu.lu@linux.intel.com>
commit e7ad6c2a4b1aa710db94060b716f53c812cef565 upstream.
Commit 6bbd42e2df8f ("mmu_notifiers: call invalidate_range() when
invalidating TLBs") moved the secondary TLB invalidations into the TLB
invalidation functions to ensure that all secondary TLB invalidations
happen at the same time as the CPU invalidation and added a flush-all
type of secondary TLB invalidation for the batched mode, where a range
of [0, -1UL) is used to indicates that the range extends to the end of
the address space.
However, using an end address of -1UL caused an overflow in the Intel
IOMMU driver, where the end address was rounded up to the next page.
As a result, both the IOTLB and device ATC were not invalidated correctly.
Add a flush all helper function and call it when the invalidation range
is from 0 to -1UL, ensuring that the entire caches are invalidated
correctly.
Fixes: 6bbd42e2df8f ("mmu_notifiers: call invalidate_range() when invalidating TLBs")
Cc: stable@vger.kernel.org
Cc: Huang Ying <ying.huang@intel.com>
Cc: Alistair Popple <apopple@nvidia.com>
Tested-by: Luo Yuzhang <yuzhang.luo@intel.com> # QAT
Tested-by: Tony Zhu <tony.zhu@intel.com> # DSA
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Alistair Popple <apopple@nvidia.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20231117090933.75267-1-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iommu/intel/svm.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c
index 50a481c895b8..ac12f76c1212 100644
--- a/drivers/iommu/intel/svm.c
+++ b/drivers/iommu/intel/svm.c
@@ -216,6 +216,27 @@ static void intel_flush_svm_range(struct intel_svm *svm, unsigned long address,
rcu_read_unlock();
}
+static void intel_flush_svm_all(struct intel_svm *svm)
+{
+ struct device_domain_info *info;
+ struct intel_svm_dev *sdev;
+
+ rcu_read_lock();
+ list_for_each_entry_rcu(sdev, &svm->devs, list) {
+ info = dev_iommu_priv_get(sdev->dev);
+
+ qi_flush_piotlb(sdev->iommu, sdev->did, svm->pasid, 0, -1UL, 0);
+ if (info->ats_enabled) {
+ qi_flush_dev_iotlb_pasid(sdev->iommu, sdev->sid, info->pfsid,
+ svm->pasid, sdev->qdep,
+ 0, 64 - VTD_PAGE_SHIFT);
+ quirk_extra_dev_tlb_flush(info, 0, 64 - VTD_PAGE_SHIFT,
+ svm->pasid, sdev->qdep);
+ }
+ }
+ rcu_read_unlock();
+}
+
/* Pages have been freed at this point */
static void intel_arch_invalidate_secondary_tlbs(struct mmu_notifier *mn,
struct mm_struct *mm,
@@ -223,6 +244,11 @@ static void intel_arch_invalidate_secondary_tlbs(struct mmu_notifier *mn,
{
struct intel_svm *svm = container_of(mn, struct intel_svm, notifier);
+ if (start == 0 && end == -1UL) {
+ intel_flush_svm_all(svm);
+ return;
+ }
+
intel_flush_svm_range(svm, start,
(end - start + PAGE_SIZE - 1) >> VTD_PAGE_SHIFT, 0);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 044/134] io_uring: free io_buffer_list entries via RCU
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (42 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 043/134] iommu/vt-d: Fix incorrect cache invalidation for mm notification Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 045/134] nouveau: find the smallest page allocation to cover a buffer alloc Greg Kroah-Hartman
` (102 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jens Axboe
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <axboe@kernel.dk>
commit 5cf4f52e6d8aa2d3b7728f568abbf9d42a3af252 upstream.
mmap_lock nests under uring_lock out of necessity, as we may be doing
user copies with uring_lock held. However, for mmap of provided buffer
rings, we attempt to grab uring_lock with mmap_lock already held from
do_mmap(). This makes lockdep, rightfully, complain:
WARNING: possible circular locking dependency detected
6.7.0-rc1-00009-gff3337ebaf94-dirty #4438 Not tainted
------------------------------------------------------
buf-ring.t/442 is trying to acquire lock:
ffff00020e1480a8 (&ctx->uring_lock){+.+.}-{3:3}, at: io_uring_validate_mmap_request.isra.0+0x4c/0x140
but task is already holding lock:
ffff0000dc226190 (&mm->mmap_lock){++++}-{3:3}, at: vm_mmap_pgoff+0x124/0x264
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&mm->mmap_lock){++++}-{3:3}:
__might_fault+0x90/0xbc
io_register_pbuf_ring+0x94/0x488
__arm64_sys_io_uring_register+0x8dc/0x1318
invoke_syscall+0x5c/0x17c
el0_svc_common.constprop.0+0x108/0x130
do_el0_svc+0x2c/0x38
el0_svc+0x4c/0x94
el0t_64_sync_handler+0x118/0x124
el0t_64_sync+0x168/0x16c
-> #0 (&ctx->uring_lock){+.+.}-{3:3}:
__lock_acquire+0x19a0/0x2d14
lock_acquire+0x2e0/0x44c
__mutex_lock+0x118/0x564
mutex_lock_nested+0x20/0x28
io_uring_validate_mmap_request.isra.0+0x4c/0x140
io_uring_mmu_get_unmapped_area+0x3c/0x98
get_unmapped_area+0xa4/0x158
do_mmap+0xec/0x5b4
vm_mmap_pgoff+0x158/0x264
ksys_mmap_pgoff+0x1d4/0x254
__arm64_sys_mmap+0x80/0x9c
invoke_syscall+0x5c/0x17c
el0_svc_common.constprop.0+0x108/0x130
do_el0_svc+0x2c/0x38
el0_svc+0x4c/0x94
el0t_64_sync_handler+0x118/0x124
el0t_64_sync+0x168/0x16c
>From that mmap(2) path, we really just need to ensure that the buffer
list doesn't go away from underneath us. For the lower indexed entries,
they never go away until the ring is freed and we can always sanely
reference those as long as the caller has a file reference. For the
higher indexed ones in our xarray, we just need to ensure that the
buffer list remains valid while we return the address of it.
Free the higher indexed io_buffer_list entries via RCU. With that we can
avoid needing ->uring_lock inside mmap(2), and simply hold the RCU read
lock around the buffer list lookup and address check.
To ensure that the arrayed lookup either returns a valid fully formulated
entry via RCU lookup, add an 'is_ready' flag that we access with store
and release memory ordering. This isn't needed for the xarray lookups,
but doesn't hurt either. Since this isn't a fast path, retain it across
both types. Similarly, for the allocated array inside the ctx, ensure
we use the proper load/acquire as setup could in theory be running in
parallel with mmap.
While in there, add a few lockdep checks for documentation purposes.
Cc: stable@vger.kernel.org
Fixes: c56e022c0a27 ("io_uring: add support for user mapped provided buffer ring")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
io_uring/io_uring.c | 4 +--
io_uring/kbuf.c | 64 +++++++++++++++++++++++++++++++++++++++++-----------
io_uring/kbuf.h | 3 ++
3 files changed, 56 insertions(+), 15 deletions(-)
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -3452,9 +3452,9 @@ static void *io_uring_validate_mmap_requ
unsigned int bgid;
bgid = (offset & ~IORING_OFF_MMAP_MASK) >> IORING_OFF_PBUF_SHIFT;
- mutex_lock(&ctx->uring_lock);
+ rcu_read_lock();
ptr = io_pbuf_get_address(ctx, bgid);
- mutex_unlock(&ctx->uring_lock);
+ rcu_read_unlock();
if (!ptr)
return ERR_PTR(-EINVAL);
break;
--- a/io_uring/kbuf.c
+++ b/io_uring/kbuf.c
@@ -31,19 +31,35 @@ struct io_provide_buf {
__u16 bid;
};
+static struct io_buffer_list *__io_buffer_get_list(struct io_ring_ctx *ctx,
+ struct io_buffer_list *bl,
+ unsigned int bgid)
+{
+ if (bl && bgid < BGID_ARRAY)
+ return &bl[bgid];
+
+ return xa_load(&ctx->io_bl_xa, bgid);
+}
+
static inline struct io_buffer_list *io_buffer_get_list(struct io_ring_ctx *ctx,
unsigned int bgid)
{
- if (ctx->io_bl && bgid < BGID_ARRAY)
- return &ctx->io_bl[bgid];
+ lockdep_assert_held(&ctx->uring_lock);
- return xa_load(&ctx->io_bl_xa, bgid);
+ return __io_buffer_get_list(ctx, ctx->io_bl, bgid);
}
static int io_buffer_add_list(struct io_ring_ctx *ctx,
struct io_buffer_list *bl, unsigned int bgid)
{
+ /*
+ * Store buffer group ID and finally mark the list as visible.
+ * The normal lookup doesn't care about the visibility as we're
+ * always under the ->uring_lock, but the RCU lookup from mmap does.
+ */
bl->bgid = bgid;
+ smp_store_release(&bl->is_ready, 1);
+
if (bgid < BGID_ARRAY)
return 0;
@@ -194,18 +210,19 @@ void __user *io_buffer_select(struct io_
static __cold int io_init_bl_list(struct io_ring_ctx *ctx)
{
+ struct io_buffer_list *bl;
int i;
- ctx->io_bl = kcalloc(BGID_ARRAY, sizeof(struct io_buffer_list),
- GFP_KERNEL);
- if (!ctx->io_bl)
+ bl = kcalloc(BGID_ARRAY, sizeof(struct io_buffer_list), GFP_KERNEL);
+ if (!bl)
return -ENOMEM;
for (i = 0; i < BGID_ARRAY; i++) {
- INIT_LIST_HEAD(&ctx->io_bl[i].buf_list);
- ctx->io_bl[i].bgid = i;
+ INIT_LIST_HEAD(&bl[i].buf_list);
+ bl[i].bgid = i;
}
+ smp_store_release(&ctx->io_bl, bl);
return 0;
}
@@ -270,7 +287,7 @@ void io_destroy_buffers(struct io_ring_c
xa_for_each(&ctx->io_bl_xa, index, bl) {
xa_erase(&ctx->io_bl_xa, bl->bgid);
__io_remove_buffers(ctx, bl, -1U);
- kfree(bl);
+ kfree_rcu(bl, rcu);
}
while (!list_empty(&ctx->io_buffers_pages)) {
@@ -455,7 +472,16 @@ int io_provide_buffers(struct io_kiocb *
INIT_LIST_HEAD(&bl->buf_list);
ret = io_buffer_add_list(ctx, bl, p->bgid);
if (ret) {
- kfree(bl);
+ /*
+ * Doesn't need rcu free as it was never visible, but
+ * let's keep it consistent throughout. Also can't
+ * be a lower indexed array group, as adding one
+ * where lookup failed cannot happen.
+ */
+ if (p->bgid >= BGID_ARRAY)
+ kfree_rcu(bl, rcu);
+ else
+ WARN_ON_ONCE(1);
goto err;
}
}
@@ -550,6 +576,8 @@ int io_register_pbuf_ring(struct io_ring
struct io_buffer_list *bl, *free_bl = NULL;
int ret;
+ lockdep_assert_held(&ctx->uring_lock);
+
if (copy_from_user(®, arg, sizeof(reg)))
return -EFAULT;
@@ -604,7 +632,7 @@ int io_register_pbuf_ring(struct io_ring
return 0;
}
- kfree(free_bl);
+ kfree_rcu(free_bl, rcu);
return ret;
}
@@ -613,6 +641,8 @@ int io_unregister_pbuf_ring(struct io_ri
struct io_uring_buf_reg reg;
struct io_buffer_list *bl;
+ lockdep_assert_held(&ctx->uring_lock);
+
if (copy_from_user(®, arg, sizeof(reg)))
return -EFAULT;
if (reg.resv[0] || reg.resv[1] || reg.resv[2])
@@ -629,7 +659,7 @@ int io_unregister_pbuf_ring(struct io_ri
__io_remove_buffers(ctx, bl, -1U);
if (bl->bgid >= BGID_ARRAY) {
xa_erase(&ctx->io_bl_xa, bl->bgid);
- kfree(bl);
+ kfree_rcu(bl, rcu);
}
return 0;
}
@@ -638,7 +668,15 @@ void *io_pbuf_get_address(struct io_ring
{
struct io_buffer_list *bl;
- bl = io_buffer_get_list(ctx, bgid);
+ bl = __io_buffer_get_list(ctx, smp_load_acquire(&ctx->io_bl), bgid);
+
+ /*
+ * Ensure the list is fully setup. Only strictly needed for RCU lookup
+ * via mmap, and in that case only for the array indexed groups. For
+ * the xarray lookups, it's either visible and ready, or not at all.
+ */
+ if (!smp_load_acquire(&bl->is_ready))
+ return NULL;
if (!bl || !bl->is_mmap)
return NULL;
--- a/io_uring/kbuf.h
+++ b/io_uring/kbuf.h
@@ -15,6 +15,7 @@ struct io_buffer_list {
struct page **buf_pages;
struct io_uring_buf_ring *buf_ring;
};
+ struct rcu_head rcu;
};
__u16 bgid;
@@ -28,6 +29,8 @@ struct io_buffer_list {
__u8 is_mapped;
/* ring mapped provided buffers, but mmap'ed by application */
__u8 is_mmap;
+ /* bl is visible from an RCU point of view for lookup */
+ __u8 is_ready;
};
struct io_buffer {
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 045/134] nouveau: find the smallest page allocation to cover a buffer alloc.
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (43 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 044/134] io_uring: free io_buffer_list entries via RCU Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 046/134] powercap: DTPM: Fix unneeded conversions to micro-Watts Greg Kroah-Hartman
` (101 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dave Airlie, Faith Ekstrand,
Danilo Krummrich
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Airlie <airlied@redhat.com>
commit e9ba37d9f9a6872b069dd893bd86a7d77ba8c153 upstream.
With the new uapi we don't have the comp flags on the allocation,
so we shouldn't be using the first size that works, we should be
iterating until we get the correct one.
This reduces allocations from 2MB to 64k in lots of places.
Fixes dEQP-VK.memory.allocation.basic.size_8KiB.forward.count_4000
on my ampere/gsp system.
Cc: stable@vger.kernel.org # v6.6
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Signed-off-by: Danilo Krummrich <dakr@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230811031520.248341-1-airlied@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/nouveau/nouveau_bo.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 0f3bd187ede6..280d1d9a559b 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -318,8 +318,9 @@ nouveau_bo_alloc(struct nouveau_cli *cli, u64 *size, int *align, u32 domain,
(!vmm->page[i].host || vmm->page[i].shift > PAGE_SHIFT))
continue;
- if (pi < 0)
- pi = i;
+ /* pick the last one as it will be smallest. */
+ pi = i;
+
/* Stop once the buffer is larger than the current page size. */
if (*size >= 1ULL << vmm->page[i].shift)
break;
--
2.43.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 046/134] powercap: DTPM: Fix unneeded conversions to micro-Watts
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (44 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 045/134] nouveau: find the smallest page allocation to cover a buffer alloc Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 047/134] cpufreq/amd-pstate: Fix the return value of amd_pstate_fast_switch() Greg Kroah-Hartman
` (100 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Lukasz Luba, Rafael J. Wysocki
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukasz Luba <lukasz.luba@arm.com>
commit b817f1488fca548fe50e2654d84a1956a16a1a8a upstream.
The power values coming from the Energy Model are already in uW.
The PowerCap and DTPM frameworks operate on uW, so all places should
just use the values from the EM.
Fix the code by removing all of the conversion to uW still present in it.
Fixes: ae6ccaa65038 (PM: EM: convert power field to micro-Watts precision and align drivers)
Cc: 5.19+ <stable@vger.kernel.org> # v5.19+
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
[ rjw: Changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/powercap/dtpm_cpu.c | 6 +-----
drivers/powercap/dtpm_devfreq.c | 11 +++--------
2 files changed, 4 insertions(+), 13 deletions(-)
--- a/drivers/powercap/dtpm_cpu.c
+++ b/drivers/powercap/dtpm_cpu.c
@@ -24,7 +24,6 @@
#include <linux/of.h>
#include <linux/pm_qos.h>
#include <linux/slab.h>
-#include <linux/units.h>
struct dtpm_cpu {
struct dtpm dtpm;
@@ -104,8 +103,7 @@ static u64 get_pd_power_uw(struct dtpm *
if (pd->table[i].frequency < freq)
continue;
- return scale_pd_power_uw(pd_mask, pd->table[i].power *
- MICROWATT_PER_MILLIWATT);
+ return scale_pd_power_uw(pd_mask, pd->table[i].power);
}
return 0;
@@ -122,11 +120,9 @@ static int update_pd_power_uw(struct dtp
nr_cpus = cpumask_weight(&cpus);
dtpm->power_min = em->table[0].power;
- dtpm->power_min *= MICROWATT_PER_MILLIWATT;
dtpm->power_min *= nr_cpus;
dtpm->power_max = em->table[em->nr_perf_states - 1].power;
- dtpm->power_max *= MICROWATT_PER_MILLIWATT;
dtpm->power_max *= nr_cpus;
return 0;
--- a/drivers/powercap/dtpm_devfreq.c
+++ b/drivers/powercap/dtpm_devfreq.c
@@ -39,10 +39,8 @@ static int update_pd_power_uw(struct dtp
struct em_perf_domain *pd = em_pd_get(dev);
dtpm->power_min = pd->table[0].power;
- dtpm->power_min *= MICROWATT_PER_MILLIWATT;
dtpm->power_max = pd->table[pd->nr_perf_states - 1].power;
- dtpm->power_max *= MICROWATT_PER_MILLIWATT;
return 0;
}
@@ -54,13 +52,10 @@ static u64 set_pd_power_limit(struct dtp
struct device *dev = devfreq->dev.parent;
struct em_perf_domain *pd = em_pd_get(dev);
unsigned long freq;
- u64 power;
int i;
for (i = 0; i < pd->nr_perf_states; i++) {
-
- power = pd->table[i].power * MICROWATT_PER_MILLIWATT;
- if (power > power_limit)
+ if (pd->table[i].power > power_limit)
break;
}
@@ -68,7 +63,7 @@ static u64 set_pd_power_limit(struct dtp
dev_pm_qos_update_request(&dtpm_devfreq->qos_req, freq);
- power_limit = pd->table[i - 1].power * MICROWATT_PER_MILLIWATT;
+ power_limit = pd->table[i - 1].power;
return power_limit;
}
@@ -110,7 +105,7 @@ static u64 get_pd_power_uw(struct dtpm *
if (pd->table[i].frequency < freq)
continue;
- power = pd->table[i].power * MICROWATT_PER_MILLIWATT;
+ power = pd->table[i].power;
power *= status.busy_time;
power >>= 10;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 047/134] cpufreq/amd-pstate: Fix the return value of amd_pstate_fast_switch()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (45 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 046/134] powercap: DTPM: Fix unneeded conversions to micro-Watts Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 048/134] dma-buf: fix check in dma_resv_add_fence Greg Kroah-Hartman
` (99 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Huang Rui, Wyes Karny, Perry Yuan,
Gautham R. Shenoy, Rafael J. Wysocki
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gautham R. Shenoy <gautham.shenoy@amd.com>
commit bb87be267b8ee9b40917fb5bf51be5ddb33c37c2 upstream.
cpufreq_driver->fast_switch() callback expects a frequency as a return
value. amd_pstate_fast_switch() was returning the return value of
amd_pstate_update_freq(), which only indicates a success or failure.
Fix this by making amd_pstate_fast_switch() return the target_freq
when the call to amd_pstate_update_freq() is successful, and return
the current frequency from policy->cur when the call to
amd_pstate_update_freq() is unsuccessful.
Fixes: 4badf2eb1e98 ("cpufreq: amd-pstate: Add ->fast_switch() callback")
Acked-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Perry Yuan <perry.yuan@amd.com>
Cc: 6.4+ <stable@vger.kernel.org> # v6.4+
Signed-off-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/cpufreq/amd-pstate.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -518,7 +518,9 @@ static int amd_pstate_target(struct cpuf
static unsigned int amd_pstate_fast_switch(struct cpufreq_policy *policy,
unsigned int target_freq)
{
- return amd_pstate_update_freq(policy, target_freq, true);
+ if (!amd_pstate_update_freq(policy, target_freq, true))
+ return target_freq;
+ return policy->cur;
}
static void amd_pstate_adjust_perf(unsigned int cpu,
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 048/134] dma-buf: fix check in dma_resv_add_fence
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (46 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 047/134] cpufreq/amd-pstate: Fix the return value of amd_pstate_fast_switch() Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 049/134] io_uring: dont guard IORING_OFF_PBUF_RING with SETUP_NO_MMAP Greg Kroah-Hartman
` (98 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christian König,
Thomas Hellström
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian König <christian.koenig@amd.com>
commit 95ba893c9f4feb836ddce627efd0bb6af6667031 upstream.
It's valid to add the same fence multiple times to a dma-resv object and
we shouldn't need one extra slot for each.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Fixes: a3f7c10a269d5 ("dma-buf/dma-resv: check if the new fence is really later")
Cc: stable@vger.kernel.org # v5.19+
Link: https://patchwork.freedesktop.org/patch/msgid/20231115093035.1889-1-christian.koenig@amd.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/dma-buf/dma-resv.c | 2 +-
include/linux/dma-fence.h | 15 +++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
--- a/drivers/dma-buf/dma-resv.c
+++ b/drivers/dma-buf/dma-resv.c
@@ -301,7 +301,7 @@ void dma_resv_add_fence(struct dma_resv
dma_resv_list_entry(fobj, i, obj, &old, &old_usage);
if ((old->context == fence->context && old_usage >= usage &&
- dma_fence_is_later(fence, old)) ||
+ dma_fence_is_later_or_same(fence, old)) ||
dma_fence_is_signaled(old)) {
dma_resv_list_set(fobj, i, fence, usage);
dma_fence_put(old);
--- a/include/linux/dma-fence.h
+++ b/include/linux/dma-fence.h
@@ -499,6 +499,21 @@ static inline bool dma_fence_is_later(st
}
/**
+ * dma_fence_is_later_or_same - return true if f1 is later or same as f2
+ * @f1: the first fence from the same context
+ * @f2: the second fence from the same context
+ *
+ * Returns true if f1 is chronologically later than f2 or the same fence. Both
+ * fences must be from the same context, since a seqno is not re-used across
+ * contexts.
+ */
+static inline bool dma_fence_is_later_or_same(struct dma_fence *f1,
+ struct dma_fence *f2)
+{
+ return f1 == f2 || dma_fence_is_later(f1, f2);
+}
+
+/**
* dma_fence_later - return the chronologically later fence
* @f1: the first fence from the same context
* @f2: the second fence from the same context
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 049/134] io_uring: dont guard IORING_OFF_PBUF_RING with SETUP_NO_MMAP
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (47 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 048/134] dma-buf: fix check in dma_resv_add_fence Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 050/134] iommu: Avoid more races around device probe Greg Kroah-Hartman
` (97 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jens Axboe
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <axboe@kernel.dk>
commit 6f007b1406637d3d73d42e41d7e8d9b245185e69 upstream.
This flag only applies to the SQ and CQ rings, it's perfectly valid
to use a mmap approach for the provided ring buffers. Move the
check into where it belongs.
Cc: stable@vger.kernel.org
Fixes: 03d89a2de25b ("io_uring: support for user allocated memory for rings/sqes")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
io_uring/io_uring.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -3436,16 +3436,18 @@ static void *io_uring_validate_mmap_requ
struct page *page;
void *ptr;
- /* Don't allow mmap if the ring was setup without it */
- if (ctx->flags & IORING_SETUP_NO_MMAP)
- return ERR_PTR(-EINVAL);
-
switch (offset & IORING_OFF_MMAP_MASK) {
case IORING_OFF_SQ_RING:
case IORING_OFF_CQ_RING:
+ /* Don't allow mmap if the ring was setup without it */
+ if (ctx->flags & IORING_SETUP_NO_MMAP)
+ return ERR_PTR(-EINVAL);
ptr = ctx->rings;
break;
case IORING_OFF_SQES:
+ /* Don't allow mmap if the ring was setup without it */
+ if (ctx->flags & IORING_SETUP_NO_MMAP)
+ return ERR_PTR(-EINVAL);
ptr = ctx->sq_sqes;
break;
case IORING_OFF_PBUF_RING: {
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 050/134] iommu: Avoid more races around device probe
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (48 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 049/134] io_uring: dont guard IORING_OFF_PBUF_RING with SETUP_NO_MMAP Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 051/134] bcache: revert replacing IS_ERR_OR_NULL with IS_ERR Greg Kroah-Hartman
` (96 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zhenhua Huang, Robin Murphy,
André Draszik, Joerg Roedel
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Robin Murphy <robin.murphy@arm.com>
commit a2e7e59a94269484a83386972ca07c22fd188854 upstream.
It turns out there are more subtle races beyond just the main part of
__iommu_probe_device() itself running in parallel - the dev_iommu_free()
on the way out of an unsuccessful probe can still manage to trip up
concurrent accesses to a device's fwspec. Thus, extend the scope of
iommu_probe_device_lock() to also serialise fwspec creation and initial
retrieval.
Reported-by: Zhenhua Huang <quic_zhenhuah@quicinc.com>
Link: https://lore.kernel.org/linux-iommu/e2e20e1c-6450-4ac5-9804-b0000acdf7de@quicinc.com/
Fixes: 01657bc14a39 ("iommu: Avoid races around device probe")
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: André Draszik <andre.draszik@linaro.org>
Tested-by: André Draszik <andre.draszik@linaro.org>
Link: https://lore.kernel.org/r/16f433658661d7cadfea51e7c65da95826112a2b.1700071477.git.robin.murphy@arm.com
Cc: stable@vger.kernel.org
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/acpi/scan.c | 7 ++++++-
drivers/iommu/iommu.c | 20 ++++++++++----------
drivers/iommu/of_iommu.c | 12 +++++++++---
include/linux/iommu.h | 1 +
4 files changed, 26 insertions(+), 14 deletions(-)
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1568,17 +1568,22 @@ static const struct iommu_ops *acpi_iomm
int err;
const struct iommu_ops *ops;
+ /* Serialise to make dev->iommu stable under our potential fwspec */
+ mutex_lock(&iommu_probe_device_lock);
/*
* If we already translated the fwspec there is nothing left to do,
* return the iommu_ops.
*/
ops = acpi_iommu_fwspec_ops(dev);
- if (ops)
+ if (ops) {
+ mutex_unlock(&iommu_probe_device_lock);
return ops;
+ }
err = iort_iommu_configure_id(dev, id_in);
if (err && err != -EPROBE_DEFER)
err = viot_iommu_configure(dev);
+ mutex_unlock(&iommu_probe_device_lock);
/*
* If we have reason to believe the IOMMU driver missed the initial
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -479,11 +479,12 @@ static void iommu_deinit_device(struct d
dev_iommu_free(dev);
}
+DEFINE_MUTEX(iommu_probe_device_lock);
+
static int __iommu_probe_device(struct device *dev, struct list_head *group_list)
{
const struct iommu_ops *ops = dev->bus->iommu_ops;
struct iommu_group *group;
- static DEFINE_MUTEX(iommu_probe_device_lock);
struct group_device *gdev;
int ret;
@@ -496,17 +497,15 @@ static int __iommu_probe_device(struct d
* probably be able to use device_lock() here to minimise the scope,
* but for now enforcing a simple global ordering is fine.
*/
- mutex_lock(&iommu_probe_device_lock);
+ lockdep_assert_held(&iommu_probe_device_lock);
/* Device is probed already if in a group */
- if (dev->iommu_group) {
- ret = 0;
- goto out_unlock;
- }
+ if (dev->iommu_group)
+ return 0;
ret = iommu_init_device(dev, ops);
if (ret)
- goto out_unlock;
+ return ret;
group = dev->iommu_group;
gdev = iommu_group_alloc_device(group, dev);
@@ -542,7 +541,6 @@ static int __iommu_probe_device(struct d
list_add_tail(&group->entry, group_list);
}
mutex_unlock(&group->mutex);
- mutex_unlock(&iommu_probe_device_lock);
if (dev_is_pci(dev))
iommu_dma_set_pci_32bit_workaround(dev);
@@ -556,8 +554,6 @@ err_put_group:
iommu_deinit_device(dev);
mutex_unlock(&group->mutex);
iommu_group_put(group);
-out_unlock:
- mutex_unlock(&iommu_probe_device_lock);
return ret;
}
@@ -567,7 +563,9 @@ int iommu_probe_device(struct device *de
const struct iommu_ops *ops;
int ret;
+ mutex_lock(&iommu_probe_device_lock);
ret = __iommu_probe_device(dev, NULL);
+ mutex_unlock(&iommu_probe_device_lock);
if (ret)
return ret;
@@ -1783,7 +1781,9 @@ static int probe_iommu_group(struct devi
struct list_head *group_list = data;
int ret;
+ mutex_lock(&iommu_probe_device_lock);
ret = __iommu_probe_device(dev, group_list);
+ mutex_unlock(&iommu_probe_device_lock);
if (ret == -ENODEV)
ret = 0;
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -112,16 +112,20 @@ const struct iommu_ops *of_iommu_configu
const u32 *id)
{
const struct iommu_ops *ops = NULL;
- struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
+ struct iommu_fwspec *fwspec;
int err = NO_IOMMU;
if (!master_np)
return NULL;
+ /* Serialise to make dev->iommu stable under our potential fwspec */
+ mutex_lock(&iommu_probe_device_lock);
+ fwspec = dev_iommu_fwspec_get(dev);
if (fwspec) {
- if (fwspec->ops)
+ if (fwspec->ops) {
+ mutex_unlock(&iommu_probe_device_lock);
return fwspec->ops;
-
+ }
/* In the deferred case, start again from scratch */
iommu_fwspec_free(dev);
}
@@ -155,6 +159,8 @@ const struct iommu_ops *of_iommu_configu
fwspec = dev_iommu_fwspec_get(dev);
ops = fwspec->ops;
}
+ mutex_unlock(&iommu_probe_device_lock);
+
/*
* If we have reason to believe the IOMMU driver missed the initial
* probe for dev, replay it to get things in order.
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -703,6 +703,7 @@ static inline void dev_iommu_priv_set(st
dev->iommu->priv = priv;
}
+extern struct mutex iommu_probe_device_lock;
int iommu_probe_device(struct device *dev);
int iommu_dev_enable_feature(struct device *dev, enum iommu_dev_features f);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 051/134] bcache: revert replacing IS_ERR_OR_NULL with IS_ERR
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (49 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 050/134] iommu: Avoid more races around device probe Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 052/134] ext2: Fix ki_pos update for DIO buffered-io fallback case Greg Kroah-Hartman
` (95 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zheng Wang, Coly Li, Markus Weippert,
Jens Axboe
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Markus Weippert <markus@gekmihesg.de>
commit bb6cc253861bd5a7cf8439e2118659696df9619f upstream.
Commit 028ddcac477b ("bcache: Remove unnecessary NULL point check in
node allocations") replaced IS_ERR_OR_NULL by IS_ERR. This leads to a
NULL pointer dereference.
BUG: kernel NULL pointer dereference, address: 0000000000000080
Call Trace:
? __die_body.cold+0x1a/0x1f
? page_fault_oops+0xd2/0x2b0
? exc_page_fault+0x70/0x170
? asm_exc_page_fault+0x22/0x30
? btree_node_free+0xf/0x160 [bcache]
? up_write+0x32/0x60
btree_gc_coalesce+0x2aa/0x890 [bcache]
? bch_extent_bad+0x70/0x170 [bcache]
btree_gc_recurse+0x130/0x390 [bcache]
? btree_gc_mark_node+0x72/0x230 [bcache]
bch_btree_gc+0x5da/0x600 [bcache]
? cpuusage_read+0x10/0x10
? bch_btree_gc+0x600/0x600 [bcache]
bch_gc_thread+0x135/0x180 [bcache]
The relevant code starts with:
new_nodes[0] = NULL;
for (i = 0; i < nodes; i++) {
if (__bch_keylist_realloc(&keylist, bkey_u64s(&r[i].b->key)))
goto out_nocoalesce;
// ...
out_nocoalesce:
// ...
for (i = 0; i < nodes; i++)
if (!IS_ERR(new_nodes[i])) { // IS_ERR_OR_NULL before
028ddcac477b
btree_node_free(new_nodes[i]); // new_nodes[0] is NULL
rw_unlock(true, new_nodes[i]);
}
This patch replaces IS_ERR() by IS_ERR_OR_NULL() to fix this.
Fixes: 028ddcac477b ("bcache: Remove unnecessary NULL point check in node allocations")
Link: https://lore.kernel.org/all/3DF4A87A-2AC1-4893-AE5F-E921478419A9@suse.de/
Cc: stable@vger.kernel.org
Cc: Zheng Wang <zyytlz.wz@163.com>
Cc: Coly Li <colyli@suse.de>
Signed-off-by: Markus Weippert <markus@gekmihesg.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/md/bcache/btree.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -1510,7 +1510,7 @@ out_nocoalesce:
bch_keylist_free(&keylist);
for (i = 0; i < nodes; i++)
- if (!IS_ERR(new_nodes[i])) {
+ if (!IS_ERR_OR_NULL(new_nodes[i])) {
btree_node_free(new_nodes[i]);
rw_unlock(true, new_nodes[i]);
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 052/134] ext2: Fix ki_pos update for DIO buffered-io fallback case
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (50 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 051/134] bcache: revert replacing IS_ERR_OR_NULL with IS_ERR Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 053/134] iommu/vt-d: Add MTL to quirk list to skip TE disabling Greg Kroah-Hartman
` (94 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christoph Hellwig,
Ritesh Harjani (IBM), Jan Kara
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
commit 8abc712ea4867a81c860853048f24e511bbc20f2 upstream.
Commit "filemap: update ki_pos in generic_perform_write", made updating
of ki_pos into common code in generic_perform_write() function.
This also causes generic/091 to fail.
This happened due to an in-flight collision with:
fb5de4358e1a ("ext2: Move direct-io to use iomap"). I have chosen fixes tag
based on which commit got landed later to upstream kernel.
Fixes: 182c25e9c157 ("filemap: update ki_pos in generic_perform_write")
Cc: stable@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Message-Id: <d595bee9f2475ed0e8a2e7fb94f7afc2c6ffc36a.1700643443.git.ritesh.list@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/ext2/file.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/fs/ext2/file.c b/fs/ext2/file.c
index 1039e5bf90af..4ddc36f4dbd4 100644
--- a/fs/ext2/file.c
+++ b/fs/ext2/file.c
@@ -258,7 +258,6 @@ static ssize_t ext2_dio_write_iter(struct kiocb *iocb, struct iov_iter *from)
goto out_unlock;
}
- iocb->ki_pos += status;
ret += status;
endbyte = pos + status - 1;
ret2 = filemap_write_and_wait_range(inode->i_mapping, pos,
--
2.43.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 053/134] iommu/vt-d: Add MTL to quirk list to skip TE disabling
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (51 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 052/134] ext2: Fix ki_pos update for DIO buffered-io fallback case Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 054/134] KVM: PPC: Book3S HV: Fix KVM_RUN clobbering FP/VEC user registers Greg Kroah-Hartman
` (93 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Abdul Halim, Mohd Syazwan, Lu Baolu,
Joerg Roedel, Abdul, Halim
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Abdul Halim, Mohd Syazwan <mohd.syazwan.abdul.halim@intel.com>
commit 85b80fdffa867d75dfb9084a839e7949e29064e8 upstream.
The VT-d spec requires (10.4.4 Global Command Register, TE field) that:
Hardware implementations supporting DMA draining must drain any in-flight
DMA read/write requests queued within the Root-Complex before switching
address translation on or off and reflecting the status of the command
through the TES field in the Global Status register.
Unfortunately, some integrated graphic devices fail to do so after some
kind of power state transition. As the result, the system might stuck in
iommu_disable_translation(), waiting for the completion of TE transition.
Add MTL to the quirk list for those devices and skips TE disabling if the
qurik hits.
Fixes: b1012ca8dc4f ("iommu/vt-d: Skip TE disabling on quirky gfx dedicated iommu")
Cc: stable@vger.kernel.org
Signed-off-by: Abdul Halim, Mohd Syazwan <mohd.syazwan.abdul.halim@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20231116022324.30120-1-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/iommu/intel/iommu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -4928,7 +4928,7 @@ static void quirk_igfx_skip_te_disable(s
ver = (dev->device >> 8) & 0xff;
if (ver != 0x45 && ver != 0x46 && ver != 0x4c &&
ver != 0x4e && ver != 0x8a && ver != 0x98 &&
- ver != 0x9a && ver != 0xa7)
+ ver != 0x9a && ver != 0xa7 && ver != 0x7d)
return;
if (risky_device(dev))
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 054/134] KVM: PPC: Book3S HV: Fix KVM_RUN clobbering FP/VEC user registers
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (52 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 053/134] iommu/vt-d: Add MTL to quirk list to skip TE disabling Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 055/134] powerpc: Dont clobber f0/vs0 during fp|altivec register save Greg Kroah-Hartman
` (92 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Nicholas Piggin, Michael Ellerman
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Piggin <npiggin@gmail.com>
commit dc158d23b33df9033bcc8e7117e8591dd2f9d125 upstream.
Before running a guest, the host process (e.g., QEMU) FP/VEC registers
are saved if they were being used, similarly to when the kernel uses FP
registers. The guest values are then loaded into regs, and the host
process registers will be restored lazily when it uses FP/VEC.
KVM HV has a bug here: the host process registers do get saved, but the
user MSR bits remain enabled, which indicates the registers are valid
for the process. After they are clobbered by running the guest, this
valid indication causes the host process to take on the FP/VEC register
values of the guest.
Fixes: 34e119c96b2b ("KVM: PPC: Book3S HV P9: Reduce mtmsrd instructions required to save host SPRs")
Cc: stable@vger.kernel.org # v5.17+
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20231122025811.2973-1-npiggin@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/powerpc/kernel/process.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1198,11 +1198,11 @@ void kvmppc_save_user_regs(void)
usermsr = current->thread.regs->msr;
+ /* Caller has enabled FP/VEC/VSX/TM in MSR */
if (usermsr & MSR_FP)
- save_fpu(current);
-
+ __giveup_fpu(current);
if (usermsr & MSR_VEC)
- save_altivec(current);
+ __giveup_altivec(current);
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
if (usermsr & MSR_TM) {
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 055/134] powerpc: Dont clobber f0/vs0 during fp|altivec register save
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (53 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 054/134] KVM: PPC: Book3S HV: Fix KVM_RUN clobbering FP/VEC user registers Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 056/134] parisc: Mark ex_table entries 32-bit aligned in assembly.h Greg Kroah-Hartman
` (91 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Timothy Pearson, Jens Axboe,
Michael Ellerman
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Timothy Pearson <tpearson@raptorengineering.com>
commit 5e1d824f9a283cbf90f25241b66d1f69adb3835b upstream.
During floating point and vector save to thread data f0/vs0 are
clobbered by the FPSCR/VSCR store routine. This has been obvserved to
lead to userspace register corruption and application data corruption
with io-uring.
Fix it by restoring f0/vs0 after FPSCR/VSCR store has completed for
all the FP, altivec, VMX register save paths.
Tested under QEMU in kvm mode, running on a Talos II workstation with
dual POWER9 DD2.2 CPUs.
Additional detail (mpe):
Typically save_fpu() is called from __giveup_fpu() which saves the FP
regs and also *turns off FP* in the tasks MSR, meaning the kernel will
reload the FP regs from the thread struct before letting the task use FP
again. So in that case save_fpu() is free to clobber f0 because the FP
regs no longer hold live values for the task.
There is another case though, which is the path via:
sys_clone()
...
copy_process()
dup_task_struct()
arch_dup_task_struct()
flush_all_to_thread()
save_all()
That path saves the FP regs but leaves them live. That's meant as an
optimisation for a process that's using FP/VSX and then calls fork(),
leaving the regs live means the parent process doesn't have to take a
fault after the fork to get its FP regs back. The optimisation was added
in commit 8792468da5e1 ("powerpc: Add the ability to save FPU without
giving it up").
That path does clobber f0, but f0 is volatile across function calls,
and typically programs reach copy_process() from userspace via a syscall
wrapper function. So in normal usage f0 being clobbered across a
syscall doesn't cause visible data corruption.
But there is now a new path, because io-uring can call copy_process()
via create_io_thread() from the signal handling path. That's OK if the
signal is handled as part of syscall return, but it's not OK if the
signal is handled due to some other interrupt.
That path is:
interrupt_return_srr_user()
interrupt_exit_user_prepare()
interrupt_exit_user_prepare_main()
do_notify_resume()
get_signal()
task_work_run()
create_worker_cb()
create_io_worker()
copy_process()
dup_task_struct()
arch_dup_task_struct()
flush_all_to_thread()
save_all()
if (tsk->thread.regs->msr & MSR_FP)
save_fpu()
# f0 is clobbered and potentially live in userspace
Note the above discussion applies equally to save_altivec().
Fixes: 8792468da5e1 ("powerpc: Add the ability to save FPU without giving it up")
Cc: stable@vger.kernel.org # v4.6+
Closes: https://lore.kernel.org/all/480932026.45576726.1699374859845.JavaMail.zimbra@raptorengineeringinc.com/
Closes: https://lore.kernel.org/linuxppc-dev/480221078.47953493.1700206777956.JavaMail.zimbra@raptorengineeringinc.com/
Tested-by: Timothy Pearson <tpearson@raptorengineering.com>
Tested-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com>
[mpe: Reword change log to describe exact path of corruption & other minor tweaks]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/1921539696.48534988.1700407082933.JavaMail.zimbra@raptorengineeringinc.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/powerpc/kernel/fpu.S | 13 +++++++++++++
arch/powerpc/kernel/vector.S | 2 ++
2 files changed, 15 insertions(+)
--- a/arch/powerpc/kernel/fpu.S
+++ b/arch/powerpc/kernel/fpu.S
@@ -23,6 +23,15 @@
#include <asm/feature-fixups.h>
#ifdef CONFIG_VSX
+#define __REST_1FPVSR(n,c,base) \
+BEGIN_FTR_SECTION \
+ b 2f; \
+END_FTR_SECTION_IFSET(CPU_FTR_VSX); \
+ REST_FPR(n,base); \
+ b 3f; \
+2: REST_VSR(n,c,base); \
+3:
+
#define __REST_32FPVSRS(n,c,base) \
BEGIN_FTR_SECTION \
b 2f; \
@@ -41,9 +50,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX);
2: SAVE_32VSRS(n,c,base); \
3:
#else
+#define __REST_1FPVSR(n,b,base) REST_FPR(n, base)
#define __REST_32FPVSRS(n,b,base) REST_32FPRS(n, base)
#define __SAVE_32FPVSRS(n,b,base) SAVE_32FPRS(n, base)
#endif
+#define REST_1FPVSR(n,c,base) __REST_1FPVSR(n,__REG_##c,__REG_##base)
#define REST_32FPVSRS(n,c,base) __REST_32FPVSRS(n,__REG_##c,__REG_##base)
#define SAVE_32FPVSRS(n,c,base) __SAVE_32FPVSRS(n,__REG_##c,__REG_##base)
@@ -67,6 +78,7 @@ _GLOBAL(store_fp_state)
SAVE_32FPVSRS(0, R4, R3)
mffs fr0
stfd fr0,FPSTATE_FPSCR(r3)
+ REST_1FPVSR(0, R4, R3)
blr
EXPORT_SYMBOL(store_fp_state)
@@ -138,4 +150,5 @@ _GLOBAL(save_fpu)
2: SAVE_32FPVSRS(0, R4, R6)
mffs fr0
stfd fr0,FPSTATE_FPSCR(r6)
+ REST_1FPVSR(0, R4, R6)
blr
--- a/arch/powerpc/kernel/vector.S
+++ b/arch/powerpc/kernel/vector.S
@@ -33,6 +33,7 @@ _GLOBAL(store_vr_state)
mfvscr v0
li r4, VRSTATE_VSCR
stvx v0, r4, r3
+ lvx v0, 0, r3
blr
EXPORT_SYMBOL(store_vr_state)
@@ -109,6 +110,7 @@ _GLOBAL(save_altivec)
mfvscr v0
li r4,VRSTATE_VSCR
stvx v0,r4,r7
+ lvx v0,0,r7
blr
#ifdef CONFIG_VSX
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 056/134] parisc: Mark ex_table entries 32-bit aligned in assembly.h
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (54 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 055/134] powerpc: Dont clobber f0/vs0 during fp|altivec register save Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 057/134] parisc: Mark ex_table entries 32-bit aligned in uaccess.h Greg Kroah-Hartman
` (90 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit e11d4cccd094a7cd4696c8c42e672c76c092dad5 upstream.
Add an align statement to tell the linker that all ex_table entries and as
such the whole ex_table section should be 32-bit aligned in vmlinux and modules.
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/asm/assembly.h | 1 +
1 file changed, 1 insertion(+)
--- a/arch/parisc/include/asm/assembly.h
+++ b/arch/parisc/include/asm/assembly.h
@@ -574,6 +574,7 @@
*/
#define ASM_EXCEPTIONTABLE_ENTRY(fault_addr, except_addr) \
.section __ex_table,"aw" ! \
+ .align 4 ! \
.word (fault_addr - .), (except_addr - .) ! \
.previous
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 057/134] parisc: Mark ex_table entries 32-bit aligned in uaccess.h
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (55 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 056/134] parisc: Mark ex_table entries 32-bit aligned in assembly.h Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 058/134] parisc: Use natural CPU alignment for bug_table Greg Kroah-Hartman
` (89 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit a80aeb86542a50aa8521729ea4cc731ee7174f03 upstream.
Add an align statement to tell the linker that all ex_table entries and as
such the whole ex_table section should be 32-bit aligned in vmlinux and modules.
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/asm/uaccess.h | 1 +
1 file changed, 1 insertion(+)
--- a/arch/parisc/include/asm/uaccess.h
+++ b/arch/parisc/include/asm/uaccess.h
@@ -41,6 +41,7 @@ struct exception_table_entry {
#define ASM_EXCEPTIONTABLE_ENTRY( fault_addr, except_addr )\
".section __ex_table,\"aw\"\n" \
+ ".align 4\n" \
".word (" #fault_addr " - .), (" #except_addr " - .)\n\t" \
".previous\n"
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 058/134] parisc: Use natural CPU alignment for bug_table
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (56 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 057/134] parisc: Mark ex_table entries 32-bit aligned in uaccess.h Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 059/134] parisc: Mark lock_aligned variables 16-byte aligned on SMP Greg Kroah-Hartman
` (88 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit fe76a1349f235969381832c83d703bc911021eb6 upstream.
Make sure that the __bug_table section gets 32- or 64-bit aligned,
depending if a 32- or 64-bit kernel is being built.
Mark it non-writeable and use .blockz instead of the .org assembler
directive to pad the struct.
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/asm/bug.h | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
--- a/arch/parisc/include/asm/bug.h
+++ b/arch/parisc/include/asm/bug.h
@@ -28,13 +28,15 @@
do { \
asm volatile("\n" \
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
- "\t.pushsection __bug_table,\"aw\"\n" \
+ "\t.pushsection __bug_table,\"a\"\n" \
+ "\t.align %4\n" \
"2:\t" ASM_WORD_INSN "1b, %c0\n" \
- "\t.short %c1, %c2\n" \
- "\t.org 2b+%c3\n" \
+ "\t.short %1, %2\n" \
+ "\t.blockz %3-2*%4-2*2\n" \
"\t.popsection" \
: : "i" (__FILE__), "i" (__LINE__), \
- "i" (0), "i" (sizeof(struct bug_entry)) ); \
+ "i" (0), "i" (sizeof(struct bug_entry)), \
+ "i" (sizeof(long)) ); \
unreachable(); \
} while(0)
@@ -51,27 +53,31 @@
do { \
asm volatile("\n" \
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
- "\t.pushsection __bug_table,\"aw\"\n" \
+ "\t.pushsection __bug_table,\"a\"\n" \
+ "\t.align %4\n" \
"2:\t" ASM_WORD_INSN "1b, %c0\n" \
- "\t.short %c1, %c2\n" \
- "\t.org 2b+%c3\n" \
+ "\t.short %1, %2\n" \
+ "\t.blockz %3-2*%4-2*2\n" \
"\t.popsection" \
: : "i" (__FILE__), "i" (__LINE__), \
"i" (BUGFLAG_WARNING|(flags)), \
- "i" (sizeof(struct bug_entry)) ); \
+ "i" (sizeof(struct bug_entry)), \
+ "i" (sizeof(long)) ); \
} while(0)
#else
#define __WARN_FLAGS(flags) \
do { \
asm volatile("\n" \
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
- "\t.pushsection __bug_table,\"aw\"\n" \
+ "\t.pushsection __bug_table,\"a\"\n" \
+ "\t.align %2\n" \
"2:\t" ASM_WORD_INSN "1b\n" \
- "\t.short %c0\n" \
- "\t.org 2b+%c1\n" \
+ "\t.short %0\n" \
+ "\t.blockz %1-%2-2\n" \
"\t.popsection" \
: : "i" (BUGFLAG_WARNING|(flags)), \
- "i" (sizeof(struct bug_entry)) ); \
+ "i" (sizeof(struct bug_entry)), \
+ "i" (sizeof(long)) ); \
} while(0)
#endif
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 059/134] parisc: Mark lock_aligned variables 16-byte aligned on SMP
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (57 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 058/134] parisc: Use natural CPU alignment for bug_table Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 060/134] parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes Greg Kroah-Hartman
` (87 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit b28fc0d8739c03e7b6c44914a9d00d4c6dddc0ea upstream.
On parisc we need 16-byte alignment for variables which are used for
locking. Mark the __lock_aligned attribute acordingly so that the
.data..lock_aligned section will get that alignment in the generated
object files.
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/asm/ldcw.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/parisc/include/asm/ldcw.h
+++ b/arch/parisc/include/asm/ldcw.h
@@ -55,7 +55,7 @@
})
#ifdef CONFIG_SMP
-# define __lock_aligned __section(".data..lock_aligned")
+# define __lock_aligned __section(".data..lock_aligned") __aligned(16)
#endif
#endif /* __PARISC_LDCW_H */
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 060/134] parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (58 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 059/134] parisc: Mark lock_aligned variables 16-byte aligned on SMP Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 061/134] parisc: Mark jump_table naturally aligned Greg Kroah-Hartman
` (86 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller, Bruno Haible
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit e5f3e299a2b1e9c3ece24a38adfc089aef307e8a upstream.
Those return codes are only defined for the parisc architecture and
are leftovers from when we wanted to be HP-UX compatible.
They are not returned by any Linux kernel syscall but do trigger
problems with the glibc strerrorname_np() and strerror() functions as
reported in glibc issue #31080.
There is no need to keep them, so simply remove them.
Signed-off-by: Helge Deller <deller@gmx.de>
Reported-by: Bruno Haible <bruno@clisp.org>
Closes: https://sourceware.org/bugzilla/show_bug.cgi?id=31080
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/uapi/asm/errno.h | 2 --
lib/errname.c | 6 ------
tools/arch/parisc/include/uapi/asm/errno.h | 2 --
3 files changed, 10 deletions(-)
--- a/arch/parisc/include/uapi/asm/errno.h
+++ b/arch/parisc/include/uapi/asm/errno.h
@@ -75,7 +75,6 @@
/* We now return you to your regularly scheduled HPUX. */
-#define ENOSYM 215 /* symbol does not exist in executable */
#define ENOTSOCK 216 /* Socket operation on non-socket */
#define EDESTADDRREQ 217 /* Destination address required */
#define EMSGSIZE 218 /* Message too long */
@@ -101,7 +100,6 @@
#define ETIMEDOUT 238 /* Connection timed out */
#define ECONNREFUSED 239 /* Connection refused */
#define EREFUSED ECONNREFUSED /* for HP's NFS apparently */
-#define EREMOTERELEASE 240 /* Remote peer released connection */
#define EHOSTDOWN 241 /* Host is down */
#define EHOSTUNREACH 242 /* No route to host */
--- a/lib/errname.c
+++ b/lib/errname.c
@@ -111,9 +111,6 @@ static const char *names_0[] = {
E(ENOSPC),
E(ENOSR),
E(ENOSTR),
-#ifdef ENOSYM
- E(ENOSYM),
-#endif
E(ENOSYS),
E(ENOTBLK),
E(ENOTCONN),
@@ -144,9 +141,6 @@ static const char *names_0[] = {
#endif
E(EREMOTE),
E(EREMOTEIO),
-#ifdef EREMOTERELEASE
- E(EREMOTERELEASE),
-#endif
E(ERESTART),
E(ERFKILL),
E(EROFS),
--- a/tools/arch/parisc/include/uapi/asm/errno.h
+++ b/tools/arch/parisc/include/uapi/asm/errno.h
@@ -75,7 +75,6 @@
/* We now return you to your regularly scheduled HPUX. */
-#define ENOSYM 215 /* symbol does not exist in executable */
#define ENOTSOCK 216 /* Socket operation on non-socket */
#define EDESTADDRREQ 217 /* Destination address required */
#define EMSGSIZE 218 /* Message too long */
@@ -101,7 +100,6 @@
#define ETIMEDOUT 238 /* Connection timed out */
#define ECONNREFUSED 239 /* Connection refused */
#define EREFUSED ECONNREFUSED /* for HP's NFS apparently */
-#define EREMOTERELEASE 240 /* Remote peer released connection */
#define EHOSTDOWN 241 /* Host is down */
#define EHOSTUNREACH 242 /* No route to host */
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 061/134] parisc: Mark jump_table naturally aligned
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (59 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 060/134] parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 062/134] parisc: Ensure 32-bit alignment on parisc unwind section Greg Kroah-Hartman
` (85 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit 07eecff8ae78df7f28800484d31337e1f9bfca3a upstream.
The jump_table stores two 32-bit words and one 32- (on 32-bit kernel)
or one 64-bit word (on 64-bit kernel).
Ensure that the last word is always 64-bit aligned on a 64-bit kernel
by aligning the whole structure on sizeof(long).
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/asm/jump_label.h | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
--- a/arch/parisc/include/asm/jump_label.h
+++ b/arch/parisc/include/asm/jump_label.h
@@ -15,10 +15,12 @@ static __always_inline bool arch_static_
asm_volatile_goto("1:\n\t"
"nop\n\t"
".pushsection __jump_table, \"aw\"\n\t"
+ ".align %1\n\t"
".word 1b - ., %l[l_yes] - .\n\t"
__stringify(ASM_ULONG_INSN) " %c0 - .\n\t"
".popsection\n\t"
- : : "i" (&((char *)key)[branch]) : : l_yes);
+ : : "i" (&((char *)key)[branch]), "i" (sizeof(long))
+ : : l_yes);
return false;
l_yes:
@@ -30,10 +32,12 @@ static __always_inline bool arch_static_
asm_volatile_goto("1:\n\t"
"b,n %l[l_yes]\n\t"
".pushsection __jump_table, \"aw\"\n\t"
+ ".align %1\n\t"
".word 1b - ., %l[l_yes] - .\n\t"
__stringify(ASM_ULONG_INSN) " %c0 - .\n\t"
".popsection\n\t"
- : : "i" (&((char *)key)[branch]) : : l_yes);
+ : : "i" (&((char *)key)[branch]), "i" (sizeof(long))
+ : : l_yes);
return false;
l_yes:
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 062/134] parisc: Ensure 32-bit alignment on parisc unwind section
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (60 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 061/134] parisc: Mark jump_table naturally aligned Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 063/134] parisc: Mark altinstructions read-only and 32-bit aligned Greg Kroah-Hartman
` (84 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit c9fcb2b65c2849e8ff3be23fd8828312fb68dc19 upstream.
Make sure the .PARISC.unwind section will be 32-bit aligned.
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/kernel/vmlinux.lds.S | 1 +
1 file changed, 1 insertion(+)
--- a/arch/parisc/kernel/vmlinux.lds.S
+++ b/arch/parisc/kernel/vmlinux.lds.S
@@ -130,6 +130,7 @@ SECTIONS
RO_DATA(8)
/* unwind info */
+ . = ALIGN(4);
.PARISC.unwind : {
__start___unwind = .;
*(.PARISC.unwind)
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 063/134] parisc: Mark altinstructions read-only and 32-bit aligned
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (61 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 062/134] parisc: Ensure 32-bit alignment on parisc unwind section Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 064/134] btrfs: add dmesg output for first mount and last unmount of a filesystem Greg Kroah-Hartman
` (83 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Helge Deller
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <deller@gmx.de>
commit 33f806da2df68606f77d7b892cd1298ba3d463e8 upstream.
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v6.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/parisc/include/asm/alternative.h | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
--- a/arch/parisc/include/asm/alternative.h
+++ b/arch/parisc/include/asm/alternative.h
@@ -34,7 +34,8 @@ void apply_alternatives(struct alt_instr
/* Alternative SMP implementation. */
#define ALTERNATIVE(cond, replacement) "!0:" \
- ".section .altinstructions, \"aw\" !" \
+ ".section .altinstructions, \"a\" !" \
+ ".align 4 !" \
".word (0b-4-.) !" \
".hword 1, " __stringify(cond) " !" \
".word " __stringify(replacement) " !" \
@@ -44,7 +45,8 @@ void apply_alternatives(struct alt_instr
/* to replace one single instructions by a new instruction */
#define ALTERNATIVE(from, to, cond, replacement)\
- .section .altinstructions, "aw" ! \
+ .section .altinstructions, "a" ! \
+ .align 4 ! \
.word (from - .) ! \
.hword (to - from)/4, cond ! \
.word replacement ! \
@@ -52,7 +54,8 @@ void apply_alternatives(struct alt_instr
/* to replace multiple instructions by new code */
#define ALTERNATIVE_CODE(from, num_instructions, cond, new_instr_ptr)\
- .section .altinstructions, "aw" ! \
+ .section .altinstructions, "a" ! \
+ .align 4 ! \
.word (from - .) ! \
.hword -num_instructions, cond ! \
.word (new_instr_ptr - .) ! \
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 064/134] btrfs: add dmesg output for first mount and last unmount of a filesystem
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (62 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 063/134] parisc: Mark altinstructions read-only and 32-bit aligned Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 065/134] btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod() Greg Kroah-Hartman
` (82 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Anand Jain, Qu Wenruo, David Sterba
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <wqu@suse.com>
commit 2db313205f8b96eea467691917138d646bb50aef upstream.
There is a feature request to add dmesg output when unmounting a btrfs.
There are several alternative methods to do the same thing, but with
their own problems:
- Use eBPF to watch btrfs_put_super()/open_ctree()
Not end user friendly, they have to dip their head into the source
code.
- Watch for directory /sys/fs/<uuid>/
This is way more simple, but still requires some simple device -> uuid
lookups. And a script needs to use inotify to watch /sys/fs/.
Compared to all these, directly outputting the information into dmesg
would be the most simple one, with both device and UUID included.
And since we're here, also add the output when mounting a filesystem for
the first time for parity. A more fine grained monitoring of subvolume
mounts should be done by another layer, like audit.
Now mounting a btrfs with all default mkfs options would look like this:
[81.906566] BTRFS info (device dm-8): first mount of filesystem 633b5c16-afe3-4b79-b195-138fe145e4f2
[81.907494] BTRFS info (device dm-8): using crc32c (crc32c-intel) checksum algorithm
[81.908258] BTRFS info (device dm-8): using free space tree
[81.912644] BTRFS info (device dm-8): auto enabling async discard
[81.913277] BTRFS info (device dm-8): checking UUID tree
[91.668256] BTRFS info (device dm-8): last unmount of filesystem 633b5c16-afe3-4b79-b195-138fe145e4f2
CC: stable@vger.kernel.org # 5.4+
Link: https://github.com/kdave/btrfs-progs/issues/689
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
[ update changelog ]
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/disk-io.c | 1 +
fs/btrfs/super.c | 5 ++++-
2 files changed, 5 insertions(+), 1 deletion(-)
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3197,6 +3197,7 @@ int __cold open_ctree(struct super_block
goto fail_alloc;
}
+ btrfs_info(fs_info, "first mount of filesystem %pU", disk_super->fsid);
/*
* Verify the type first, if that or the checksum value are
* corrupted, we'll find out
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -79,7 +79,10 @@ static int btrfs_remount(struct super_bl
static void btrfs_put_super(struct super_block *sb)
{
- close_ctree(btrfs_sb(sb));
+ struct btrfs_fs_info *fs_info = btrfs_sb(sb);
+
+ btrfs_info(fs_info, "last unmount of filesystem %pU", fs_info->fs_devices->fsid);
+ close_ctree(fs_info);
}
enum {
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 065/134] btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (63 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 064/134] btrfs: add dmesg output for first mount and last unmount of a filesystem Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 066/134] btrfs: fix off-by-one when checking chunk map includes logical address Greg Kroah-Hartman
` (81 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Bragatheswaran Manickavel,
David Sterba, syzbot+d66de4cbf532749df35f
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bragatheswaran Manickavel <bragathemanick0908@gmail.com>
commit f91192cd68591c6b037da345bc9fcd5e50540358 upstream.
In btrfs_ref_tree_mod(), when !parent 're' was allocated through
kmalloc(). In the following code, if an error occurs, the execution will
be redirected to 'out' or 'out_unlock' and the function will be exited.
However, on some of the paths, 're' are not deallocated and may lead to
memory leaks.
For example: lookup_block_entry() for 'be' returns NULL, the out label
will be invoked. During that flow ref and 'ra' are freed but not 're',
which can potentially lead to a memory leak.
CC: stable@vger.kernel.org # 5.10+
Reported-and-tested-by: syzbot+d66de4cbf532749df35f@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=d66de4cbf532749df35f
Signed-off-by: Bragatheswaran Manickavel <bragathemanick0908@gmail.com>
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/ref-verify.c | 2 ++
1 file changed, 2 insertions(+)
--- a/fs/btrfs/ref-verify.c
+++ b/fs/btrfs/ref-verify.c
@@ -791,6 +791,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_i
dump_ref_action(fs_info, ra);
kfree(ref);
kfree(ra);
+ kfree(re);
goto out_unlock;
} else if (be->num_refs == 0) {
btrfs_err(fs_info,
@@ -800,6 +801,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_i
dump_ref_action(fs_info, ra);
kfree(ref);
kfree(ra);
+ kfree(re);
goto out_unlock;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 066/134] btrfs: fix off-by-one when checking chunk map includes logical address
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (64 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 065/134] btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod() Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 067/134] btrfs: send: ensure send_fd is writable Greg Kroah-Hartman
` (80 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Josef Bacik, Filipe Manana,
David Sterba
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <fdmanana@suse.com>
commit 5fba5a571858ce2d787fdaf55814e42725bfa895 upstream.
At btrfs_get_chunk_map() we get the extent map for the chunk that contains
the given logical address stored in the 'logical' argument. Then we do
sanity checks to verify the extent map contains the logical address. One
of these checks verifies if the extent map covers a range with an end
offset behind the target logical address - however this check has an
off-by-one error since it will consider an extent map whose start offset
plus its length matches the target logical address as inclusive, while
the fact is that the last byte it covers is behind the target logical
address (by 1).
So fix this condition by using '<=' rather than '<' when comparing the
extent map's "start + length" against the target logical address.
CC: stable@vger.kernel.org # 4.14+
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
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/volumes.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -3050,7 +3050,7 @@ struct extent_map *btrfs_get_chunk_map(s
return ERR_PTR(-EINVAL);
}
- if (em->start > logical || em->start + em->len < logical) {
+ if (em->start > logical || em->start + em->len <= logical) {
btrfs_crit(fs_info,
"found a bad mapping, wanted %llu-%llu, found %llu-%llu",
logical, length, em->start, em->start + em->len);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 067/134] btrfs: send: ensure send_fd is writable
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (65 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 066/134] btrfs: fix off-by-one when checking chunk map includes logical address Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 068/134] btrfs: make error messages more clear when getting a chunk map Greg Kroah-Hartman
` (79 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Jann Horn, David Sterba,
syzbot+12e098239d20385264d3
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jann Horn <jannh@google.com>
commit 0ac1d13a55eb37d398b63e6ff6db4a09a2c9128c upstream.
kernel_write() requires the caller to ensure that the file is writable.
Let's do that directly after looking up the ->send_fd.
We don't need a separate bailout path because the "out" path already
does fput() if ->send_filp is non-NULL.
This has no security impact for two reasons:
- the ioctl requires CAP_SYS_ADMIN
- __kernel_write() bails out on read-only files - but only since 5.8,
see commit a01ac27be472 ("fs: check FMODE_WRITE in __kernel_write")
Reported-and-tested-by: syzbot+12e098239d20385264d3@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=12e098239d20385264d3
Fixes: 31db9f7c23fb ("Btrfs: introduce BTRFS_IOC_SEND for btrfs send/receive")
CC: stable@vger.kernel.org # 4.14+
Signed-off-by: Jann Horn <jannh@google.com>
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/send.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -8158,7 +8158,7 @@ long btrfs_ioctl_send(struct inode *inod
}
sctx->send_filp = fget(arg->send_fd);
- if (!sctx->send_filp) {
+ if (!sctx->send_filp || !(sctx->send_filp->f_mode & FMODE_WRITE)) {
ret = -EBADF;
goto out;
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 068/134] btrfs: make error messages more clear when getting a chunk map
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (66 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 067/134] btrfs: send: ensure send_fd is writable Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 069/134] btrfs: free the allocated memory if btrfs_alloc_page_array() fails Greg Kroah-Hartman
` (78 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Josef Bacik, Filipe Manana,
David Sterba
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <fdmanana@suse.com>
commit 7d410d5efe04e42a6cd959bfe6d59d559fdf8b25 upstream.
When getting a chunk map, at btrfs_get_chunk_map(), we do some sanity
checks to verify we found a chunk map and that map found covers the
logical address the caller passed in. However the messages aren't very
clear in the sense that don't mention the issue is with a chunk map and
one of them prints the 'length' argument as if it were the end offset of
the requested range (while the in the string format we use %llu-%llu
which suggests a range, and the second %llu-%llu is actually a range for
the chunk map). So improve these two details in the error messages.
CC: stable@vger.kernel.org # 5.4+
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
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/volumes.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -3045,15 +3045,16 @@ struct extent_map *btrfs_get_chunk_map(s
read_unlock(&em_tree->lock);
if (!em) {
- btrfs_crit(fs_info, "unable to find logical %llu length %llu",
+ btrfs_crit(fs_info,
+ "unable to find chunk map for logical %llu length %llu",
logical, length);
return ERR_PTR(-EINVAL);
}
if (em->start > logical || em->start + em->len <= logical) {
btrfs_crit(fs_info,
- "found a bad mapping, wanted %llu-%llu, found %llu-%llu",
- logical, length, em->start, em->start + em->len);
+ "found a bad chunk map, wanted %llu-%llu, found %llu-%llu",
+ logical, logical + length, em->start, em->start + em->len);
free_extent_map(em);
return ERR_PTR(-EINVAL);
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 069/134] btrfs: free the allocated memory if btrfs_alloc_page_array() fails
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (67 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 068/134] btrfs: make error messages more clear when getting a chunk map Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 070/134] btrfs: fix 64bit compat send ioctl arguments not initializing version member Greg Kroah-Hartman
` (77 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Filipe Manana, Qu Wenruo,
David Sterba
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <wqu@suse.com>
commit 94dbf7c0871f7ae6349ba4b0341ce8f5f98a071d upstream.
[BUG]
If btrfs_alloc_page_array() fail to allocate all pages but part of the
slots, then the partially allocated pages would be leaked in function
btrfs_submit_compressed_read().
[CAUSE]
As explicitly stated, if btrfs_alloc_page_array() returned -ENOMEM,
caller is responsible to free the partially allocated pages.
For the existing call sites, most of them are fine:
- btrfs_raid_bio::stripe_pages
Handled by free_raid_bio().
- extent_buffer::pages[]
Handled btrfs_release_extent_buffer_pages().
- scrub_stripe::pages[]
Handled by release_scrub_stripe().
But there is one exception in btrfs_submit_compressed_read(), if
btrfs_alloc_page_array() failed, we didn't cleanup the array and freed
the array pointer directly.
Initially there is still the error handling in commit dd137dd1f2d7
("btrfs: factor out allocating an array of pages"), but later in commit
544fe4a903ce ("btrfs: embed a btrfs_bio into struct compressed_bio"),
the error handling is removed, leading to the possible memory leak.
[FIX]
This patch would add back the error handling first, then to prevent such
situation from happening again, also
Make btrfs_alloc_page_array() to free the allocated pages as a extra
safety net, then we don't need to add the error handling to
btrfs_submit_compressed_read().
Fixes: 544fe4a903ce ("btrfs: embed a btrfs_bio into struct compressed_bio")
CC: stable@vger.kernel.org # 6.4+
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
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/extent_io.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -675,8 +675,8 @@ static void end_bio_extent_readpage(stru
* the array will be skipped
*
* Return: 0 if all pages were able to be allocated;
- * -ENOMEM otherwise, and the caller is responsible for freeing all
- * non-null page pointers in the array.
+ * -ENOMEM otherwise, the partially allocated pages would be freed and
+ * the array slots zeroed
*/
int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array)
{
@@ -695,8 +695,13 @@ int btrfs_alloc_page_array(unsigned int
* though alloc_pages_bulk_array() falls back to alloc_page()
* if it could not bulk-allocate. So we must be out of memory.
*/
- if (allocated == last)
+ if (allocated == last) {
+ for (int i = 0; i < allocated; i++) {
+ __free_page(page_array[i]);
+ page_array[i] = NULL;
+ }
return -ENOMEM;
+ }
memalloc_retry_wait(GFP_NOFS);
}
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 070/134] btrfs: fix 64bit compat send ioctl arguments not initializing version member
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (68 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 069/134] btrfs: free the allocated memory if btrfs_alloc_page_array() fails Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 071/134] io_uring: enable io_mem_alloc/free to be used in other parts Greg Kroah-Hartman
` (76 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Filipe Manana, David Sterba
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Sterba <dsterba@suse.com>
commit 5de0434bc064606d6b7467ec3e5ad22963a18c04 upstream.
When the send protocol versioning was added in 5.16 e77fbf990316
("btrfs: send: prepare for v2 protocol"), the 32/64bit compat code was
not updated (added by 2351f431f727 ("btrfs: fix send ioctl on 32bit with
64bit kernel")), missing the version struct member. The compat code is
probably rarely used, nobody reported any bugs.
Found by tool https://github.com/jirislaby/clang-struct .
Fixes: e77fbf990316 ("btrfs: send: prepare for v2 protocol")
CC: stable@vger.kernel.org # 6.1+
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
fs/btrfs/ioctl.c | 1 +
1 file changed, 1 insertion(+)
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -4351,6 +4351,7 @@ static int _btrfs_ioctl_send(struct inod
arg->clone_sources = compat_ptr(args32.clone_sources);
arg->parent_root = args32.parent_root;
arg->flags = args32.flags;
+ arg->version = args32.version;
memcpy(arg->reserved, args32.reserved,
sizeof(args32.reserved));
#else
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 071/134] io_uring: enable io_mem_alloc/free to be used in other parts
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (69 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 070/134] btrfs: fix 64bit compat send ioctl arguments not initializing version member Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 072/134] io_uring/kbuf: defer release of mapped buffer rings Greg Kroah-Hartman
` (75 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jens Axboe
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <axboe@kernel.dk>
commit edecf1689768452ba1a64b7aaf3a47a817da651a upstream.
In preparation for using these helpers, make them non-static and add
them to our internal header.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
io_uring/io_uring.c | 4 ++--
io_uring/io_uring.h | 3 +++
2 files changed, 5 insertions(+), 2 deletions(-)
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -2659,7 +2659,7 @@ static int io_cqring_wait(struct io_ring
return READ_ONCE(rings->cq.head) == READ_ONCE(rings->cq.tail) ? ret : 0;
}
-static void io_mem_free(void *ptr)
+void io_mem_free(void *ptr)
{
if (!ptr)
return;
@@ -2771,7 +2771,7 @@ static void io_rings_free(struct io_ring
}
}
-static void *io_mem_alloc(size_t size)
+void *io_mem_alloc(size_t size)
{
gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN | __GFP_COMP;
void *ret;
--- a/io_uring/io_uring.h
+++ b/io_uring/io_uring.h
@@ -86,6 +86,9 @@ bool __io_alloc_req_refill(struct io_rin
bool io_match_task_safe(struct io_kiocb *head, struct task_struct *task,
bool cancel_all);
+void *io_mem_alloc(size_t size);
+void io_mem_free(void *ptr);
+
#if defined(CONFIG_PROVE_LOCKING)
static inline void io_lockdep_assert_cq_locked(struct io_ring_ctx *ctx)
{
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 072/134] io_uring/kbuf: defer release of mapped buffer rings
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (70 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 071/134] io_uring: enable io_mem_alloc/free to be used in other parts Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 073/134] io_uring/kbuf: recycle freed mapped buffer ring entries Greg Kroah-Hartman
` (74 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jann Horn, Jens Axboe
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <axboe@kernel.dk>
commit c392cbecd8eca4c53f2bf508731257d9d0a21c2d upstream.
If a provided buffer ring is setup with IOU_PBUF_RING_MMAP, then the
kernel allocates the memory for it and the application is expected to
mmap(2) this memory. However, io_uring uses remap_pfn_range() for this
operation, so we cannot rely on normal munmap/release on freeing them
for us.
Stash an io_buf_free entry away for each of these, if any, and provide
a helper to free them post ->release().
Cc: stable@vger.kernel.org
Fixes: c56e022c0a27 ("io_uring: add support for user mapped provided buffer ring")
Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/linux/io_uring_types.h | 3 ++
io_uring/io_uring.c | 2 +
io_uring/kbuf.c | 44 ++++++++++++++++++++++++++++++++++++-----
io_uring/kbuf.h | 2 +
4 files changed, 46 insertions(+), 5 deletions(-)
--- a/include/linux/io_uring_types.h
+++ b/include/linux/io_uring_types.h
@@ -327,6 +327,9 @@ struct io_ring_ctx {
struct list_head io_buffers_cache;
+ /* deferred free list, protected by ->uring_lock */
+ struct hlist_head io_buf_list;
+
/* Keep this last, we don't need it for the fast path */
struct wait_queue_head poll_wq;
struct io_restriction restrictions;
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -323,6 +323,7 @@ static __cold struct io_ring_ctx *io_rin
INIT_LIST_HEAD(&ctx->sqd_list);
INIT_LIST_HEAD(&ctx->cq_overflow_list);
INIT_LIST_HEAD(&ctx->io_buffers_cache);
+ INIT_HLIST_HEAD(&ctx->io_buf_list);
io_alloc_cache_init(&ctx->rsrc_node_cache, IO_NODE_ALLOC_CACHE_MAX,
sizeof(struct io_rsrc_node));
io_alloc_cache_init(&ctx->apoll_cache, IO_ALLOC_CACHE_MAX,
@@ -2942,6 +2943,7 @@ static __cold void io_ring_ctx_free(stru
ctx->mm_account = NULL;
}
io_rings_free(ctx);
+ io_kbuf_mmap_list_free(ctx);
percpu_ref_exit(&ctx->refs);
free_uid(ctx->user);
--- a/io_uring/kbuf.c
+++ b/io_uring/kbuf.c
@@ -41,6 +41,11 @@ static struct io_buffer_list *__io_buffe
return xa_load(&ctx->io_bl_xa, bgid);
}
+struct io_buf_free {
+ struct hlist_node list;
+ void *mem;
+};
+
static inline struct io_buffer_list *io_buffer_get_list(struct io_ring_ctx *ctx,
unsigned int bgid)
{
@@ -238,7 +243,10 @@ static int __io_remove_buffers(struct io
if (bl->is_mapped) {
i = bl->buf_ring->tail - bl->head;
if (bl->is_mmap) {
- folio_put(virt_to_folio(bl->buf_ring));
+ /*
+ * io_kbuf_list_free() will free the page(s) at
+ * ->release() time.
+ */
bl->buf_ring = NULL;
bl->is_mmap = 0;
} else if (bl->buf_nr_pages) {
@@ -552,18 +560,28 @@ error_unpin:
return -EINVAL;
}
-static int io_alloc_pbuf_ring(struct io_uring_buf_reg *reg,
+static int io_alloc_pbuf_ring(struct io_ring_ctx *ctx,
+ struct io_uring_buf_reg *reg,
struct io_buffer_list *bl)
{
- gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN | __GFP_COMP;
+ struct io_buf_free *ibf;
size_t ring_size;
void *ptr;
ring_size = reg->ring_entries * sizeof(struct io_uring_buf_ring);
- ptr = (void *) __get_free_pages(gfp, get_order(ring_size));
+ ptr = io_mem_alloc(ring_size);
if (!ptr)
return -ENOMEM;
+ /* Allocate and store deferred free entry */
+ ibf = kmalloc(sizeof(*ibf), GFP_KERNEL_ACCOUNT);
+ if (!ibf) {
+ io_mem_free(ptr);
+ return -ENOMEM;
+ }
+ ibf->mem = ptr;
+ hlist_add_head(&ibf->list, &ctx->io_buf_list);
+
bl->buf_ring = ptr;
bl->is_mapped = 1;
bl->is_mmap = 1;
@@ -622,7 +640,7 @@ int io_register_pbuf_ring(struct io_ring
if (!(reg.flags & IOU_PBUF_RING_MMAP))
ret = io_pin_pbuf_ring(®, bl);
else
- ret = io_alloc_pbuf_ring(®, bl);
+ ret = io_alloc_pbuf_ring(ctx, ®, bl);
if (!ret) {
bl->nr_entries = reg.ring_entries;
@@ -682,3 +700,19 @@ void *io_pbuf_get_address(struct io_ring
return bl->buf_ring;
}
+
+/*
+ * Called at or after ->release(), free the mmap'ed buffers that we used
+ * for memory mapped provided buffer rings.
+ */
+void io_kbuf_mmap_list_free(struct io_ring_ctx *ctx)
+{
+ struct io_buf_free *ibf;
+ struct hlist_node *tmp;
+
+ hlist_for_each_entry_safe(ibf, tmp, &ctx->io_buf_list, list) {
+ hlist_del(&ibf->list);
+ io_mem_free(ibf->mem);
+ kfree(ibf);
+ }
+}
--- a/io_uring/kbuf.h
+++ b/io_uring/kbuf.h
@@ -54,6 +54,8 @@ int io_provide_buffers(struct io_kiocb *
int io_register_pbuf_ring(struct io_ring_ctx *ctx, void __user *arg);
int io_unregister_pbuf_ring(struct io_ring_ctx *ctx, void __user *arg);
+void io_kbuf_mmap_list_free(struct io_ring_ctx *ctx);
+
unsigned int __io_put_kbuf(struct io_kiocb *req, unsigned issue_flags);
void io_kbuf_recycle_legacy(struct io_kiocb *req, unsigned issue_flags);
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 073/134] io_uring/kbuf: recycle freed mapped buffer ring entries
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (71 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 072/134] io_uring/kbuf: defer release of mapped buffer rings Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use Greg Kroah-Hartman
` (73 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Jens Axboe
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <axboe@kernel.dk>
commit b10b73c102a2eab91e1cd62a03d6446f1dfecc64 upstream.
Right now we stash any potentially mmap'ed provided ring buffer range
for freeing at release time, regardless of when they get unregistered.
Since we're keeping track of these ranges anyway, keep track of their
registration state as well, and use that to recycle ranges when
appropriate rather than always allocate new ones.
The lookup is a basic scan of entries, checking for the best matching
free entry.
Fixes: c392cbecd8ec ("io_uring/kbuf: defer release of mapped buffer rings")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
io_uring/kbuf.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 66 insertions(+), 11 deletions(-)
--- a/io_uring/kbuf.c
+++ b/io_uring/kbuf.c
@@ -44,6 +44,8 @@ static struct io_buffer_list *__io_buffe
struct io_buf_free {
struct hlist_node list;
void *mem;
+ size_t size;
+ int inuse;
};
static inline struct io_buffer_list *io_buffer_get_list(struct io_ring_ctx *ctx,
@@ -231,6 +233,24 @@ static __cold int io_init_bl_list(struct
return 0;
}
+/*
+ * Mark the given mapped range as free for reuse
+ */
+static void io_kbuf_mark_free(struct io_ring_ctx *ctx, struct io_buffer_list *bl)
+{
+ struct io_buf_free *ibf;
+
+ hlist_for_each_entry(ibf, &ctx->io_buf_list, list) {
+ if (bl->buf_ring == ibf->mem) {
+ ibf->inuse = 0;
+ return;
+ }
+ }
+
+ /* can't happen... */
+ WARN_ON_ONCE(1);
+}
+
static int __io_remove_buffers(struct io_ring_ctx *ctx,
struct io_buffer_list *bl, unsigned nbufs)
{
@@ -247,6 +267,7 @@ static int __io_remove_buffers(struct io
* io_kbuf_list_free() will free the page(s) at
* ->release() time.
*/
+ io_kbuf_mark_free(ctx, bl);
bl->buf_ring = NULL;
bl->is_mmap = 0;
} else if (bl->buf_nr_pages) {
@@ -560,6 +581,34 @@ error_unpin:
return -EINVAL;
}
+/*
+ * See if we have a suitable region that we can reuse, rather than allocate
+ * both a new io_buf_free and mem region again. We leave it on the list as
+ * even a reused entry will need freeing at ring release.
+ */
+static struct io_buf_free *io_lookup_buf_free_entry(struct io_ring_ctx *ctx,
+ size_t ring_size)
+{
+ struct io_buf_free *ibf, *best = NULL;
+ size_t best_dist;
+
+ hlist_for_each_entry(ibf, &ctx->io_buf_list, list) {
+ size_t dist;
+
+ if (ibf->inuse || ibf->size < ring_size)
+ continue;
+ dist = ibf->size - ring_size;
+ if (!best || dist < best_dist) {
+ best = ibf;
+ if (!dist)
+ break;
+ best_dist = dist;
+ }
+ }
+
+ return best;
+}
+
static int io_alloc_pbuf_ring(struct io_ring_ctx *ctx,
struct io_uring_buf_reg *reg,
struct io_buffer_list *bl)
@@ -569,20 +618,26 @@ static int io_alloc_pbuf_ring(struct io_
void *ptr;
ring_size = reg->ring_entries * sizeof(struct io_uring_buf_ring);
- ptr = io_mem_alloc(ring_size);
- if (!ptr)
- return -ENOMEM;
- /* Allocate and store deferred free entry */
- ibf = kmalloc(sizeof(*ibf), GFP_KERNEL_ACCOUNT);
+ /* Reuse existing entry, if we can */
+ ibf = io_lookup_buf_free_entry(ctx, ring_size);
if (!ibf) {
- io_mem_free(ptr);
- return -ENOMEM;
+ ptr = io_mem_alloc(ring_size);
+ if (!ptr)
+ return -ENOMEM;
+
+ /* Allocate and store deferred free entry */
+ ibf = kmalloc(sizeof(*ibf), GFP_KERNEL_ACCOUNT);
+ if (!ibf) {
+ io_mem_free(ptr);
+ return -ENOMEM;
+ }
+ ibf->mem = ptr;
+ ibf->size = ring_size;
+ hlist_add_head(&ibf->list, &ctx->io_buf_list);
}
- ibf->mem = ptr;
- hlist_add_head(&ibf->list, &ctx->io_buf_list);
-
- bl->buf_ring = ptr;
+ ibf->inuse = 1;
+ bl->buf_ring = ibf->mem;
bl->is_mapped = 1;
bl->is_mmap = 1;
return 0;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (72 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 073/134] io_uring/kbuf: recycle freed mapped buffer ring entries Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-09 10:05 ` Sven Joachim
2023-12-05 3:15 ` [PATCH 6.6 075/134] pinctrl: stm32: Add check for devm_kcalloc Greg Kroah-Hartman
` (72 subsequent siblings)
146 siblings, 1 reply; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Johannes Berg
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <johannes.berg@intel.com>
commit 7e7efdda6adb385fbdfd6f819d76bc68c923c394 upstream.
My prior race fix here broke CQM when ranges aren't used, as
the reporting worker now requires the cqm_config to be set in
the wdev, but isn't set when there's no range configured.
Rather than continuing to special-case the range version, set
the cqm_config always and configure accordingly, also tracking
if range was used or not to be able to clear the configuration
appropriately with the same API, which was actually not right
if both were implemented by a driver for some reason, as is
the case with mac80211 (though there the implementations are
equivalent so it doesn't matter.)
Also, the original multiple-RSSI commit lost checking for the
callback, so might have potentially crashed if a driver had
neither implementation, and userspace tried to use it despite
not being advertised as supported.
Cc: stable@vger.kernel.org
Fixes: 4a4b8169501b ("cfg80211: Accept multiple RSSI thresholds for CQM")
Fixes: 37c20b2effe9 ("wifi: cfg80211: fix cqm_config access race")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/wireless/core.h | 1
net/wireless/nl80211.c | 50 ++++++++++++++++++++++++++++++-------------------
2 files changed, 32 insertions(+), 19 deletions(-)
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -299,6 +299,7 @@ struct cfg80211_cqm_config {
u32 rssi_hyst;
s32 last_rssi_event_value;
enum nl80211_cqm_rssi_threshold_event last_rssi_event_type;
+ bool use_range_api;
int n_rssi_thresholds;
s32 rssi_thresholds[] __counted_by(n_rssi_thresholds);
};
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -12824,10 +12824,6 @@ static int cfg80211_cqm_rssi_update(stru
int i, n, low_index;
int err;
- /* RSSI reporting disabled? */
- if (!cqm_config)
- return rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
-
/*
* Obtain current RSSI value if possible, if not and no RSSI threshold
* event has been received yet, we should receive an event after a
@@ -12902,18 +12898,6 @@ static int nl80211_set_cqm_rssi(struct g
wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)
return -EOPNOTSUPP;
- if (n_thresholds <= 1 && rdev->ops->set_cqm_rssi_config) {
- if (n_thresholds == 0 || thresholds[0] == 0) /* Disabling */
- return rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
-
- return rdev_set_cqm_rssi_config(rdev, dev,
- thresholds[0], hysteresis);
- }
-
- if (!wiphy_ext_feature_isset(&rdev->wiphy,
- NL80211_EXT_FEATURE_CQM_RSSI_LIST))
- return -EOPNOTSUPP;
-
if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */
n_thresholds = 0;
@@ -12921,6 +12905,20 @@ static int nl80211_set_cqm_rssi(struct g
old = rcu_dereference_protected(wdev->cqm_config,
lockdep_is_held(&wdev->mtx));
+ /* if already disabled just succeed */
+ if (!n_thresholds && !old)
+ return 0;
+
+ if (n_thresholds > 1) {
+ if (!wiphy_ext_feature_isset(&rdev->wiphy,
+ NL80211_EXT_FEATURE_CQM_RSSI_LIST) ||
+ !rdev->ops->set_cqm_rssi_range_config)
+ return -EOPNOTSUPP;
+ } else {
+ if (!rdev->ops->set_cqm_rssi_config)
+ return -EOPNOTSUPP;
+ }
+
if (n_thresholds) {
cqm_config = kzalloc(struct_size(cqm_config, rssi_thresholds,
n_thresholds),
@@ -12935,13 +12933,26 @@ static int nl80211_set_cqm_rssi(struct g
memcpy(cqm_config->rssi_thresholds, thresholds,
flex_array_size(cqm_config, rssi_thresholds,
n_thresholds));
+ cqm_config->use_range_api = n_thresholds > 1 ||
+ !rdev->ops->set_cqm_rssi_config;
rcu_assign_pointer(wdev->cqm_config, cqm_config);
+
+ if (cqm_config->use_range_api)
+ err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config);
+ else
+ err = rdev_set_cqm_rssi_config(rdev, dev,
+ thresholds[0],
+ hysteresis);
} else {
RCU_INIT_POINTER(wdev->cqm_config, NULL);
+ /* if enabled as range also disable via range */
+ if (old->use_range_api)
+ err = rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
+ else
+ err = rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
}
- err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config);
if (err) {
rcu_assign_pointer(wdev->cqm_config, old);
kfree_rcu(cqm_config, rcu_head);
@@ -19131,10 +19142,11 @@ void cfg80211_cqm_rssi_notify_work(struc
wdev_lock(wdev);
cqm_config = rcu_dereference_protected(wdev->cqm_config,
lockdep_is_held(&wdev->mtx));
- if (!wdev->cqm_config)
+ if (!cqm_config)
goto unlock;
- cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config);
+ if (cqm_config->use_range_api)
+ cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config);
rssi_level = cqm_config->last_rssi_event_value;
rssi_event = cqm_config->last_rssi_event_type;
^ permalink raw reply [flat|nested] 154+ messages in thread
* [PATCH 6.6 075/134] pinctrl: stm32: Add check for devm_kcalloc
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (73 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 076/134] pinctrl: stm32: fix array read out of bound Greg Kroah-Hartman
` (71 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Chen Ni, Valentin Caron,
Linus Walleij, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chen Ni <nichen@iscas.ac.cn>
[ Upstream commit b0eeba527e704d6023a6cd9103f929226e326b03 ]
Add check for the return value of devm_kcalloc() and return the error
if it fails in order to avoid NULL pointer dereference.
Fixes: 32c170ff15b0 ("pinctrl: stm32: set default gpio line names using pin names")
Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
Acked-by: Valentin Caron <valentin.caron@foss.st.com>
Link: https://lore.kernel.org/r/20231031080807.3600656-1-nichen@iscas.ac.cn
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/pinctrl/stm32/pinctrl-stm32.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
index a73385a431de9..419eca49ccecb 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
@@ -1378,6 +1378,11 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
}
names = devm_kcalloc(dev, npins, sizeof(char *), GFP_KERNEL);
+ if (!names) {
+ err = -ENOMEM;
+ goto err_clk;
+ }
+
for (i = 0; i < npins; i++) {
stm32_pin = stm32_pctrl_get_desc_pin_from_gpio(pctl, bank, i);
if (stm32_pin && stm32_pin->pin.name)
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 076/134] pinctrl: stm32: fix array read out of bound
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (74 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 075/134] pinctrl: stm32: Add check for devm_kcalloc Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 077/134] media: v4l2-subdev: Fix a 64bit bug Greg Kroah-Hartman
` (70 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Antonio Borneo, Linus Walleij,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Antonio Borneo <antonio.borneo@foss.st.com>
[ Upstream commit edd48fd9d45370d6c8ba0dd834fcc51ff688cc87 ]
The existing code does not verify if the "tentative" index exceeds
the size of the array, causing out of bound read.
Issue identified with kasan.
Check the index before using it.
Signed-off-by: Antonio Borneo <antonio.borneo@foss.st.com>
Fixes: 32c170ff15b0 ("pinctrl: stm32: set default gpio line names using pin names")
Link: https://lore.kernel.org/r/20231107110520.4449-1-antonio.borneo@foss.st.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/pinctrl/stm32/pinctrl-stm32.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
index 419eca49ccecb..346a31f31bba8 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
@@ -1283,9 +1283,11 @@ static struct stm32_desc_pin *stm32_pctrl_get_desc_pin_from_gpio(struct stm32_pi
int i;
/* With few exceptions (e.g. bank 'Z'), pin number matches with pin index in array */
- pin_desc = pctl->pins + stm32_pin_nb;
- if (pin_desc->pin.number == stm32_pin_nb)
- return pin_desc;
+ if (stm32_pin_nb < pctl->npins) {
+ pin_desc = pctl->pins + stm32_pin_nb;
+ if (pin_desc->pin.number == stm32_pin_nb)
+ return pin_desc;
+ }
/* Otherwise, loop all array to find the pin with the right number */
for (i = 0; i < pctl->npins; i++) {
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 077/134] media: v4l2-subdev: Fix a 64bit bug
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (75 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 076/134] pinctrl: stm32: fix array read out of bound Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 078/134] netdevsim: Dont accept device bound programs Greg Kroah-Hartman
` (69 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dan Carpenter, Tomi Valkeinen,
Hans Verkuil, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@linaro.org>
[ Upstream commit 5d33213fac5929a2e7766c88d78779fd443b0fe8 ]
The problem is this line here from subdev_do_ioctl().
client_cap->capabilities &= ~V4L2_SUBDEV_CLIENT_CAP_STREAMS;
The "client_cap->capabilities" variable is a u64. The AND operation
is supposed to clear out the V4L2_SUBDEV_CLIENT_CAP_STREAMS flag. But
because it's a 32 bit variable it accidentally clears out the high 32
bits as well.
Currently we only use the first bit and none of the upper bits so this
doesn't affect runtime behavior.
Fixes: f57fa2959244 ("media: v4l2-subdev: Add new ioctl for client capabilities")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/uapi/linux/v4l2-subdev.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/uapi/linux/v4l2-subdev.h b/include/uapi/linux/v4l2-subdev.h
index 4a195b68f28f6..b383c2fe0cf35 100644
--- a/include/uapi/linux/v4l2-subdev.h
+++ b/include/uapi/linux/v4l2-subdev.h
@@ -239,7 +239,7 @@ struct v4l2_subdev_routing {
* set (which is the default), the 'stream' fields will be forced to 0 by the
* kernel.
*/
- #define V4L2_SUBDEV_CLIENT_CAP_STREAMS (1U << 0)
+ #define V4L2_SUBDEV_CLIENT_CAP_STREAMS (1ULL << 0)
/**
* struct v4l2_subdev_client_capability - Capabilities of the client accessing
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 078/134] netdevsim: Dont accept device bound programs
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (76 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 077/134] media: v4l2-subdev: Fix a 64bit bug Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 079/134] net: rswitch: Fix type of ret in rswitch_start_xmit() Greg Kroah-Hartman
` (68 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, syzbot+44c2416196b7c607f226,
Stanislav Fomichev, Daniel Borkmann, Jakub Kicinski,
Dipendra Khadka, Alexei Starovoitov, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stanislav Fomichev <sdf@google.com>
[ Upstream commit c0c6bde586c7dce82719b4ff32a2db6af9ee3d65 ]
Commit 2b3486bc2d23 ("bpf: Introduce device-bound XDP programs") introduced
device-bound programs by largely reusing existing offloading infrastructure.
This changed the semantics of 'prog->aux->offload' a bit. Now, it's non-NULL
for both offloaded and device-bound programs.
Instead of looking at 'prog->aux->offload' let's call bpf_prog_is_offloaded
which should be true iff the program is offloaded and not merely device-bound.
Fixes: 2b3486bc2d23 ("bpf: Introduce device-bound XDP programs")
Reported-by: syzbot+44c2416196b7c607f226@syzkaller.appspotmail.com
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Cc: Dipendra Khadka <kdipendra88@gmail.com>
Link: https://lore.kernel.org/bpf/20231114045453.1816995-2-sdf@google.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/netdevsim/bpf.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/netdevsim/bpf.c b/drivers/net/netdevsim/bpf.c
index f60eb97e3a627..608953d4f98da 100644
--- a/drivers/net/netdevsim/bpf.c
+++ b/drivers/net/netdevsim/bpf.c
@@ -93,7 +93,7 @@ static void nsim_prog_set_loaded(struct bpf_prog *prog, bool loaded)
{
struct nsim_bpf_bound_prog *state;
- if (!prog || !prog->aux->offload)
+ if (!prog || !bpf_prog_is_offloaded(prog->aux))
return;
state = prog->aux->offload->dev_priv;
@@ -311,7 +311,7 @@ nsim_setup_prog_hw_checks(struct netdevsim *ns, struct netdev_bpf *bpf)
if (!bpf->prog)
return 0;
- if (!bpf->prog->aux->offload) {
+ if (!bpf_prog_is_offloaded(bpf->prog->aux)) {
NSIM_EA(bpf->extack, "xdpoffload of non-bound program");
return -EINVAL;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 079/134] net: rswitch: Fix type of ret in rswitch_start_xmit()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (77 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 078/134] netdevsim: Dont accept device bound programs Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 080/134] net: rswitch: Fix return value " Greg Kroah-Hartman
` (67 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yoshihiro Shimoda, Wojciech Drewek,
David S. Miller, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
[ Upstream commit 109b25d13e0054337860d44841b990d11b32d262 ]
The type of ret in rswitch_start_xmit() should be netdev_tx_t. So,
fix it.
Fixes: 3590918b5d07 ("net: ethernet: renesas: Add support for "Ethernet Switch"")
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/rswitch.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c
index 0fc0b6bea7530..898f22aa796e2 100644
--- a/drivers/net/ethernet/renesas/rswitch.c
+++ b/drivers/net/ethernet/renesas/rswitch.c
@@ -1501,8 +1501,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd
{
struct rswitch_device *rdev = netdev_priv(ndev);
struct rswitch_gwca_queue *gq = rdev->tx_queue;
+ netdev_tx_t ret = NETDEV_TX_OK;
struct rswitch_ext_desc *desc;
- int ret = NETDEV_TX_OK;
dma_addr_t dma_addr;
if (rswitch_get_num_cur_queues(gq) >= gq->ring_size - 1) {
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 080/134] net: rswitch: Fix return value in rswitch_start_xmit()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (78 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 079/134] net: rswitch: Fix type of ret in rswitch_start_xmit() Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 081/134] net: rswitch: Fix missing dev_kfree_skb_any() in error path Greg Kroah-Hartman
` (66 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yoshihiro Shimoda, Wojciech Drewek,
David S. Miller, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
[ Upstream commit 1aaef8634a20b322c82e84f12a9b6aec1e2fd4fa ]
This .ndo_start_xmit() function should return netdev_tx_t value,
not -ENOMEM. So, fix it.
Fixes: 33f5d733b589 ("net: renesas: rswitch: Improve TX timestamp accuracy")
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/rswitch.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c
index 898f22aa796e2..3ccf93184c9b2 100644
--- a/drivers/net/ethernet/renesas/rswitch.c
+++ b/drivers/net/ethernet/renesas/rswitch.c
@@ -1532,7 +1532,7 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd
ts_info = kzalloc(sizeof(*ts_info), GFP_ATOMIC);
if (!ts_info) {
dma_unmap_single(ndev->dev.parent, dma_addr, skb->len, DMA_TO_DEVICE);
- return -ENOMEM;
+ return ret;
}
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 081/134] net: rswitch: Fix missing dev_kfree_skb_any() in error path
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (79 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 080/134] net: rswitch: Fix return value " Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 082/134] ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet Greg Kroah-Hartman
` (65 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yoshihiro Shimoda, Wojciech Drewek,
David S. Miller, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
[ Upstream commit 782486af9b5b76493012711413c141509ac45dec ]
Before returning the rswitch_start_xmit() in the error path,
dev_kfree_skb_any() should be called. So, fix it.
Fixes: 33f5d733b589 ("net: renesas: rswitch: Improve TX timestamp accuracy")
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/rswitch.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c
index 3ccf93184c9b2..ae9d8722b76f7 100644
--- a/drivers/net/ethernet/renesas/rswitch.c
+++ b/drivers/net/ethernet/renesas/rswitch.c
@@ -1514,10 +1514,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd
return ret;
dma_addr = dma_map_single(ndev->dev.parent, skb->data, skb->len, DMA_TO_DEVICE);
- if (dma_mapping_error(ndev->dev.parent, dma_addr)) {
- dev_kfree_skb_any(skb);
- return ret;
- }
+ if (dma_mapping_error(ndev->dev.parent, dma_addr))
+ goto err_kfree;
gq->skbs[gq->cur] = skb;
desc = &gq->tx_ring[gq->cur];
@@ -1530,10 +1528,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd
struct rswitch_gwca_ts_info *ts_info;
ts_info = kzalloc(sizeof(*ts_info), GFP_ATOMIC);
- if (!ts_info) {
- dma_unmap_single(ndev->dev.parent, dma_addr, skb->len, DMA_TO_DEVICE);
- return ret;
- }
+ if (!ts_info)
+ goto err_unmap;
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
rdev->ts_tag++;
@@ -1555,6 +1551,14 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd
gq->cur = rswitch_next_queue_index(gq, true, 1);
rswitch_modify(rdev->addr, GWTRC(gq->index), 0, BIT(gq->index % 32));
+ return ret;
+
+err_unmap:
+ dma_unmap_single(ndev->dev.parent, dma_addr, skb->len, DMA_TO_DEVICE);
+
+err_kfree:
+ dev_kfree_skb_any(skb);
+
return ret;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 082/134] ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (80 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 081/134] net: rswitch: Fix missing dev_kfree_skb_any() in error path Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 083/134] wifi: iwlwifi: mvm: fix an error code in iwl_mvm_mld_add_sta() Greg Kroah-Hartman
` (64 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Zhengchao Shao, Eric Dumazet,
Hangbin Liu, David S. Miller, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhengchao Shao <shaozhengchao@huawei.com>
[ Upstream commit e2b706c691905fe78468c361aaabc719d0a496f1 ]
When I perform the following test operations:
1.ip link add br0 type bridge
2.brctl addif br0 eth0
3.ip addr add 239.0.0.1/32 dev eth0
4.ip addr add 239.0.0.1/32 dev br0
5.ip addr add 224.0.0.1/32 dev br0
6.while ((1))
do
ifconfig br0 up
ifconfig br0 down
done
7.send IGMPv2 query packets to port eth0 continuously. For example,
./mausezahn ethX -c 0 "01 00 5e 00 00 01 00 72 19 88 aa 02 08 00 45 00 00
1c 00 01 00 00 01 02 0e 7f c0 a8 0a b7 e0 00 00 01 11 64 ee 9b 00 00 00 00"
The preceding tests may trigger the refcnt uaf issue of the mc list. The
stack is as follows:
refcount_t: addition on 0; use-after-free.
WARNING: CPU: 21 PID: 144 at lib/refcount.c:25 refcount_warn_saturate (lib/refcount.c:25)
CPU: 21 PID: 144 Comm: ksoftirqd/21 Kdump: loaded Not tainted 6.7.0-rc1-next-20231117-dirty #80
Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
RIP: 0010:refcount_warn_saturate (lib/refcount.c:25)
RSP: 0018:ffffb68f00657910 EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffff8a00c3bf96c0 RCX: ffff8a07b6160908
RDX: 00000000ffffffd8 RSI: 0000000000000027 RDI: ffff8a07b6160900
RBP: ffff8a00cba36862 R08: 0000000000000000 R09: 00000000ffff7fff
R10: ffffb68f006577c0 R11: ffffffffb0fdcdc8 R12: ffff8a00c3bf9680
R13: ffff8a00c3bf96f0 R14: 0000000000000000 R15: ffff8a00d8766e00
FS: 0000000000000000(0000) GS:ffff8a07b6140000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000055f10b520b28 CR3: 000000039741a000 CR4: 00000000000006f0
Call Trace:
<TASK>
igmp_heard_query (net/ipv4/igmp.c:1068)
igmp_rcv (net/ipv4/igmp.c:1132)
ip_protocol_deliver_rcu (net/ipv4/ip_input.c:205)
ip_local_deliver_finish (net/ipv4/ip_input.c:234)
__netif_receive_skb_one_core (net/core/dev.c:5529)
netif_receive_skb_internal (net/core/dev.c:5729)
netif_receive_skb (net/core/dev.c:5788)
br_handle_frame_finish (net/bridge/br_input.c:216)
nf_hook_bridge_pre (net/bridge/br_input.c:294)
__netif_receive_skb_core (net/core/dev.c:5423)
__netif_receive_skb_list_core (net/core/dev.c:5606)
__netif_receive_skb_list (net/core/dev.c:5674)
netif_receive_skb_list_internal (net/core/dev.c:5764)
napi_gro_receive (net/core/gro.c:609)
e1000_clean_rx_irq (drivers/net/ethernet/intel/e1000/e1000_main.c:4467)
e1000_clean (drivers/net/ethernet/intel/e1000/e1000_main.c:3805)
__napi_poll (net/core/dev.c:6533)
net_rx_action (net/core/dev.c:6735)
__do_softirq (kernel/softirq.c:554)
run_ksoftirqd (kernel/softirq.c:913)
smpboot_thread_fn (kernel/smpboot.c:164)
kthread (kernel/kthread.c:388)
ret_from_fork (arch/x86/kernel/process.c:153)
ret_from_fork_asm (arch/x86/entry/entry_64.S:250)
</TASK>
The root causes are as follows:
Thread A Thread B
... netif_receive_skb
br_dev_stop ...
br_multicast_leave_snoopers ...
__ip_mc_dec_group ...
__igmp_group_dropped igmp_rcv
igmp_stop_timer igmp_heard_query //ref = 1
ip_ma_put igmp_mod_timer
refcount_dec_and_test igmp_start_timer //ref = 0
... refcount_inc //ref increases from 0
When the device receives an IGMPv2 Query message, it starts the timer
immediately, regardless of whether the device is running. If the device is
down and has left the multicast group, it will cause the mc list refcount
uaf issue.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/ipv4/igmp.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 418e5fb58fd3f..d515881d02a6f 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -216,8 +216,10 @@ static void igmp_start_timer(struct ip_mc_list *im, int max_delay)
int tv = get_random_u32_below(max_delay);
im->tm_running = 1;
- if (!mod_timer(&im->timer, jiffies+tv+2))
- refcount_inc(&im->refcnt);
+ if (refcount_inc_not_zero(&im->refcnt)) {
+ if (mod_timer(&im->timer, jiffies + tv + 2))
+ ip_ma_put(im);
+ }
}
static void igmp_gq_start_timer(struct in_device *in_dev)
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 083/134] wifi: iwlwifi: mvm: fix an error code in iwl_mvm_mld_add_sta()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (81 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 082/134] ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 084/134] wifi: mac80211: do not pass AP_VLAN vif pointer to drivers during flush Greg Kroah-Hartman
` (63 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dan Carpenter, Gregory Greenman,
Johannes Berg, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@linaro.org>
[ Upstream commit 71b5e40651d89a8685bea1592dfcd2aa61559628 ]
This error path should return -EINVAL instead of success.
Fixes: 57974a55d995 ("wifi: iwlwifi: mvm: refactor iwl_mvm_mac_sta_state_common()")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Acked-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/75e4ea09-db58-462f-bd4e-5ad4e5e5dcb5@moroto.mountain
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
index 56f51344c193c..1ccbe8c1eeb42 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
@@ -705,8 +705,10 @@ int iwl_mvm_mld_add_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
rcu_dereference_protected(mvm_sta->link[link_id],
lockdep_is_held(&mvm->mutex));
- if (WARN_ON(!link_conf || !mvm_link_sta))
+ if (WARN_ON(!link_conf || !mvm_link_sta)) {
+ ret = -EINVAL;
goto err;
+ }
ret = iwl_mvm_mld_cfg_sta(mvm, sta, vif, link_sta, link_conf,
mvm_link_sta);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 084/134] wifi: mac80211: do not pass AP_VLAN vif pointer to drivers during flush
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (82 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 083/134] wifi: iwlwifi: mvm: fix an error code in iwl_mvm_mld_add_sta() Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 085/134] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Greg Kroah-Hartman
` (62 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Konstantin Demin, Koen Vandeputte,
Oldřich Jedlička, Johannes Berg, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oldřich Jedlička <oldium.pro@gmail.com>
[ Upstream commit 3e3a2b645c043f7e3e488d5011478cefb69bbe8b ]
This fixes WARN_ONs when using AP_VLANs after station removal. The flush
call passed AP_VLAN vif to driver, but because these vifs are virtual and
not registered with drivers, we need to translate to the correct AP vif
first.
Closes: https://github.com/openwrt/openwrt/issues/12420
Fixes: 0b75a1b1e42e ("wifi: mac80211: flush queues on STA removal")
Fixes: d00800a289c9 ("wifi: mac80211: add flush_sta method")
Tested-by: Konstantin Demin <rockdrilla@gmail.com>
Tested-by: Koen Vandeputte <koen.vandeputte@citymesh.com>
Signed-off-by: Oldřich Jedlička <oldium.pro@gmail.com>
Link: https://lore.kernel.org/r/20231104141333.3710-1-oldium.pro@gmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/mac80211/driver-ops.h | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index c4505593ba7a6..2bc2fbe58f944 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -23,7 +23,7 @@
static inline struct ieee80211_sub_if_data *
get_bss_sdata(struct ieee80211_sub_if_data *sdata)
{
- if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
+ if (sdata && sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
u.ap);
@@ -638,10 +638,13 @@ static inline void drv_flush(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
u32 queues, bool drop)
{
- struct ieee80211_vif *vif = sdata ? &sdata->vif : NULL;
+ struct ieee80211_vif *vif;
might_sleep();
+ sdata = get_bss_sdata(sdata);
+ vif = sdata ? &sdata->vif : NULL;
+
if (sdata && !check_sdata_in_driver(sdata))
return;
@@ -657,6 +660,8 @@ static inline void drv_flush_sta(struct ieee80211_local *local,
{
might_sleep();
+ sdata = get_bss_sdata(sdata);
+
if (sdata && !check_sdata_in_driver(sdata))
return;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 085/134] net: dsa: mv88e6xxx: fix marvell 6350 switch probing
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (83 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 084/134] wifi: mac80211: do not pass AP_VLAN vif pointer to drivers during flush Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 086/134] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Kroah-Hartman
` (61 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Greg Ungerer, Andrew Lunn,
David S. Miller, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Ungerer <gerg@kernel.org>
[ Upstream commit b3f1a164c7f742503dc7159011f7ad6b092b660e ]
As of commit de5c9bf40c45 ("net: phylink: require supported_interfaces to
be filled") Marvell 88e6350 switches fail to be probed:
...
mv88e6085 d0072004.mdio-mii:11: switch 0x3710 detected: Marvell 88E6350, revision 2
mv88e6085 d0072004.mdio-mii:11: phylink: error: empty supported_interfaces
error creating PHYLINK: -22
mv88e6085: probe of d0072004.mdio-mii:11 failed with error -22
...
The problem stems from the use of mv88e6185_phylink_get_caps() to get
the device capabilities. Create a new dedicated phylink_get_caps for the
6351 family (which the 6350 is one of) to properly support their set of
capabilities.
According to chip.h the 6351 switch family includes the 6171, 6175, 6350
and 6351 switches, so update each of these to use the correct
phylink_get_caps.
Fixes: de5c9bf40c45 ("net: phylink: require supported_interfaces to be filled")
Signed-off-by: Greg Ungerer <gerg@kernel.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/dsa/mv88e6xxx/chip.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index ab434a77b059a..6d7256ea477a1 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -577,6 +577,18 @@ static void mv88e6250_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,
config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100;
}
+static void mv88e6351_phylink_get_caps(struct mv88e6xxx_chip *chip, int port,
+ struct phylink_config *config)
+{
+ unsigned long *supported = config->supported_interfaces;
+
+ /* Translate the default cmode */
+ mv88e6xxx_translate_cmode(chip->ports[port].cmode, supported);
+
+ config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100 |
+ MAC_1000FD;
+}
+
static int mv88e6352_get_port4_serdes_cmode(struct mv88e6xxx_chip *chip)
{
u16 reg, val;
@@ -4340,7 +4352,7 @@ static const struct mv88e6xxx_ops mv88e6171_ops = {
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.stu_getnext = mv88e6352_g1_stu_getnext,
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
- .phylink_get_caps = mv88e6185_phylink_get_caps,
+ .phylink_get_caps = mv88e6351_phylink_get_caps,
};
static const struct mv88e6xxx_ops mv88e6172_ops = {
@@ -4440,7 +4452,7 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.stu_getnext = mv88e6352_g1_stu_getnext,
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
- .phylink_get_caps = mv88e6185_phylink_get_caps,
+ .phylink_get_caps = mv88e6351_phylink_get_caps,
};
static const struct mv88e6xxx_ops mv88e6176_ops = {
@@ -5069,7 +5081,7 @@ static const struct mv88e6xxx_ops mv88e6350_ops = {
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.stu_getnext = mv88e6352_g1_stu_getnext,
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
- .phylink_get_caps = mv88e6185_phylink_get_caps,
+ .phylink_get_caps = mv88e6351_phylink_get_caps,
};
static const struct mv88e6xxx_ops mv88e6351_ops = {
@@ -5117,7 +5129,7 @@ static const struct mv88e6xxx_ops mv88e6351_ops = {
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
.avb_ops = &mv88e6352_avb_ops,
.ptp_ops = &mv88e6352_ptp_ops,
- .phylink_get_caps = mv88e6185_phylink_get_caps,
+ .phylink_get_caps = mv88e6351_phylink_get_caps,
};
static const struct mv88e6xxx_ops mv88e6352_ops = {
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 086/134] net: dsa: mv88e6xxx: fix marvell 6350 probe crash
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (84 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 085/134] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 087/134] dpaa2-eth: increase the needed headroom to account for alignment Greg Kroah-Hartman
` (60 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Greg Ungerer, Andrew Lunn,
David S. Miller, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Ungerer <gerg@kernel.org>
[ Upstream commit a524eabcd72d28425d9db242cf375d0389d74eba ]
As of commit b92143d4420f ("net: dsa: mv88e6xxx: add infrastructure for
phylink_pcs") probing of a Marvell 88e6350 switch causes a NULL pointer
de-reference like this example:
...
mv88e6085 d0072004.mdio-mii:11: switch 0x3710 detected: Marvell 88E6350, revision 2
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 00000000 when read
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1] ARM
Modules linked in:
CPU: 0 PID: 8 Comm: kworker/u2:0 Not tainted 6.7.0-rc2-dirty #26
Hardware name: Marvell Armada 370/XP (Device Tree)
Workqueue: events_unbound deferred_probe_work_func
PC is at mv88e6xxx_port_setup+0x1c/0x44
LR is at dsa_port_devlink_setup+0x74/0x154
pc : [<c057ea24>] lr : [<c0819598>] psr: a0000013
sp : c184fce0 ip : c542b8f4 fp : 00000000
r10: 00000001 r9 : c542a540 r8 : c542bc00
r7 : c542b838 r6 : c5244580 r5 : 00000005 r4 : c5244580
r3 : 00000000 r2 : c542b840 r1 : 00000005 r0 : c1a02040
...
The Marvell 6350 switch has no SERDES interface and so has no
corresponding pcs_ops defined for it. But during probing a call is made
to mv88e6xxx_port_setup() which unconditionally expects pcs_ops to exist -
though the presence of the pcs_ops->pcs_init function is optional.
Modify code to check for pcs_ops first, before checking for and calling
pcs_ops->pcs_init. Modify checking and use of pcs_ops->pcs_teardown
which may potentially suffer the same problem.
Fixes: b92143d4420f ("net: dsa: mv88e6xxx: add infrastructure for phylink_pcs")
Signed-off-by: Greg Ungerer <gerg@kernel.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 6d7256ea477a1..dc7f9b99f409f 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3892,7 +3892,8 @@ static int mv88e6xxx_port_setup(struct dsa_switch *ds, int port)
struct mv88e6xxx_chip *chip = ds->priv;
int err;
- if (chip->info->ops->pcs_ops->pcs_init) {
+ if (chip->info->ops->pcs_ops &&
+ chip->info->ops->pcs_ops->pcs_init) {
err = chip->info->ops->pcs_ops->pcs_init(chip, port);
if (err)
return err;
@@ -3907,7 +3908,8 @@ static void mv88e6xxx_port_teardown(struct dsa_switch *ds, int port)
mv88e6xxx_teardown_devlink_regions_port(ds, port);
- if (chip->info->ops->pcs_ops->pcs_teardown)
+ if (chip->info->ops->pcs_ops &&
+ chip->info->ops->pcs_ops->pcs_teardown)
chip->info->ops->pcs_ops->pcs_teardown(chip, port);
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 087/134] dpaa2-eth: increase the needed headroom to account for alignment
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (85 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 086/134] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Kroah-Hartman
@ 2023-12-05 3:15 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 088/134] dpaa2-eth: recycle the RX buffer only after all processing done Greg Kroah-Hartman
` (59 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:15 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ioana Ciornei, David S. Miller,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ioana Ciornei <ioana.ciornei@nxp.com>
[ Upstream commit f422abe3f23d483cf01f386819f26fb3fe0dbb2b ]
Increase the needed headroom to account for a 64 byte alignment
restriction which, with this patch, we make mandatory on the Tx path.
The case in which the amount of headroom needed is not available is
already handled by the driver which instead sends a S/G frame with the
first buffer only holding the SW and HW annotation areas.
Without this patch, we can empirically see data corruption happening
between Tx and Tx confirmation which sometimes leads to the SW
annotation area being overwritten.
Since this is an old IP where the hardware team cannot help to
understand the underlying behavior, we make the Tx alignment mandatory
for all frames to avoid the crash on Tx conf. Also, remove the comment
that suggested that this is just an optimization.
This patch also sets the needed_headroom net device field to the usual
value that the driver would need on the Tx path:
- 64 bytes for the software annotation area
- 64 bytes to account for a 64 byte aligned buffer address
Fixes: 6e2387e8f19e ("staging: fsl-dpaa2/eth: Add Freescale DPAA2 Ethernet driver")
Closes: https://lore.kernel.org/netdev/aa784d0c-85eb-4e5d-968b-c8f74fa86be6@gin.de/
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 8 ++++----
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
index 15bab41cee48d..774377db0b4bd 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -1073,14 +1073,12 @@ static int dpaa2_eth_build_single_fd(struct dpaa2_eth_priv *priv,
dma_addr_t addr;
buffer_start = skb->data - dpaa2_eth_needed_headroom(skb);
-
- /* If there's enough room to align the FD address, do it.
- * It will help hardware optimize accesses.
- */
aligned_start = PTR_ALIGN(buffer_start - DPAA2_ETH_TX_BUF_ALIGN,
DPAA2_ETH_TX_BUF_ALIGN);
if (aligned_start >= skb->head)
buffer_start = aligned_start;
+ else
+ return -ENOMEM;
/* Store a backpointer to the skb at the beginning of the buffer
* (in the private data area) such that we can release it
@@ -4967,6 +4965,8 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev)
if (err)
goto err_dl_port_add;
+ net_dev->needed_headroom = DPAA2_ETH_SWA_SIZE + DPAA2_ETH_TX_BUF_ALIGN;
+
err = register_netdev(net_dev);
if (err < 0) {
dev_err(dev, "register_netdev() failed\n");
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
index bfb6c96c3b2f0..834cba8c3a416 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
@@ -740,7 +740,7 @@ static inline bool dpaa2_eth_rx_pause_enabled(u64 link_options)
static inline unsigned int dpaa2_eth_needed_headroom(struct sk_buff *skb)
{
- unsigned int headroom = DPAA2_ETH_SWA_SIZE;
+ unsigned int headroom = DPAA2_ETH_SWA_SIZE + DPAA2_ETH_TX_BUF_ALIGN;
/* If we don't have an skb (e.g. XDP buffer), we only need space for
* the software annotation area
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 088/134] dpaa2-eth: recycle the RX buffer only after all processing done
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (86 preceding siblings ...)
2023-12-05 3:15 ` [PATCH 6.6 087/134] dpaa2-eth: increase the needed headroom to account for alignment Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 089/134] bpf: Add missed allocation hint for bpf_mem_cache_alloc_flags() Greg Kroah-Hartman
` (58 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Ioana Ciornei, David S. Miller,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ioana Ciornei <ioana.ciornei@nxp.com>
[ Upstream commit beb1930f966d1517921488bd5d64147f58f79abf ]
The blamed commit added support for Rx copybreak. This meant that for
certain frame sizes, a new skb was allocated and the initial data buffer
was recycled. Instead of waiting to recycle the Rx buffer only after all
processing was done on it (like accessing the parse results or timestamp
information), the code path just went ahead and re-used the buffer right
away.
This sometimes lead to corrupted HW and SW annotation areas.
Fix this by delaying the moment when the buffer is recycled.
Fixes: 50f826999a80 ("dpaa2-eth: add rx copybreak support")
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
index 774377db0b4bd..888509cf1f210 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -516,8 +516,6 @@ struct sk_buff *dpaa2_eth_alloc_skb(struct dpaa2_eth_priv *priv,
memcpy(skb->data, fd_vaddr + fd_offset, fd_length);
- dpaa2_eth_recycle_buf(priv, ch, dpaa2_fd_get_addr(fd));
-
return skb;
}
@@ -589,6 +587,7 @@ void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,
struct rtnl_link_stats64 *percpu_stats;
struct dpaa2_eth_drv_stats *percpu_extras;
struct device *dev = priv->net_dev->dev.parent;
+ bool recycle_rx_buf = false;
void *buf_data;
u32 xdp_act;
@@ -618,6 +617,8 @@ void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,
dma_unmap_page(dev, addr, priv->rx_buf_size,
DMA_BIDIRECTIONAL);
skb = dpaa2_eth_build_linear_skb(ch, fd, vaddr);
+ } else {
+ recycle_rx_buf = true;
}
} else if (fd_format == dpaa2_fd_sg) {
WARN_ON(priv->xdp_prog);
@@ -637,6 +638,9 @@ void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,
goto err_build_skb;
dpaa2_eth_receive_skb(priv, ch, fd, vaddr, fq, percpu_stats, skb);
+
+ if (recycle_rx_buf)
+ dpaa2_eth_recycle_buf(priv, ch, dpaa2_fd_get_addr(fd));
return;
err_build_skb:
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 089/134] bpf: Add missed allocation hint for bpf_mem_cache_alloc_flags()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (87 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 088/134] dpaa2-eth: recycle the RX buffer only after all processing done Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 090/134] uapi: propagate __struct_group() attributes to the container union Greg Kroah-Hartman
` (57 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Hou Tao, Yonghong Song,
Alexei Starovoitov, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hou Tao <houtao1@huawei.com>
[ Upstream commit 75a442581d05edaee168222ffbe00d4389785636 ]
bpf_mem_cache_alloc_flags() may call __alloc() directly when there is no
free object in free list, but it doesn't initialize the allocation hint
for the returned pointer. It may lead to bad memory dereference when
freeing the pointer, so fix it by initializing the allocation hint.
Fixes: 822fb26bdb55 ("bpf: Add a hint to allocated objects.")
Signed-off-by: Hou Tao <houtao1@huawei.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20231111043821.2258513-1-houtao@huaweicloud.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
kernel/bpf/memalloc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/kernel/bpf/memalloc.c b/kernel/bpf/memalloc.c
index d93ddac283d40..956f80ee6f5c5 100644
--- a/kernel/bpf/memalloc.c
+++ b/kernel/bpf/memalloc.c
@@ -958,6 +958,8 @@ void notrace *bpf_mem_cache_alloc_flags(struct bpf_mem_alloc *ma, gfp_t flags)
memcg = get_memcg(c);
old_memcg = set_active_memcg(memcg);
ret = __alloc(c, NUMA_NO_NODE, GFP_KERNEL | __GFP_NOWARN | __GFP_ACCOUNT);
+ if (ret)
+ *(struct bpf_mem_cache **)ret = c;
set_active_memcg(old_memcg);
mem_cgroup_put(memcg);
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 090/134] uapi: propagate __struct_group() attributes to the container union
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (88 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 089/134] bpf: Add missed allocation hint for bpf_mem_cache_alloc_flags() Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 091/134] selftests/net: ipsec: fix constant out of range Greg Kroah-Hartman
` (56 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, kernel test robot, Dmitry Antipov,
Kees Cook, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Antipov <dmantipov@yandex.ru>
[ Upstream commit 4e86f32a13af1970d21be94f659cae56bbe487ee ]
Recently the kernel test robot has reported an ARM-specific BUILD_BUG_ON()
in an old and unmaintained wil6210 wireless driver. The problem comes from
the structure packing rules of old ARM ABI ('-mabi=apcs-gnu'). For example,
the following structure is packed to 18 bytes instead of 16:
struct poorly_packed {
unsigned int a;
unsigned int b;
unsigned short c;
union {
struct {
unsigned short d;
unsigned int e;
} __attribute__((packed));
struct {
unsigned short d;
unsigned int e;
} __attribute__((packed)) inner;
};
} __attribute__((packed));
To fit it into 16 bytes, it's required to add packed attribute to the
container union as well:
struct poorly_packed {
unsigned int a;
unsigned int b;
unsigned short c;
union {
struct {
unsigned short d;
unsigned int e;
} __attribute__((packed));
struct {
unsigned short d;
unsigned int e;
} __attribute__((packed)) inner;
} __attribute__((packed));
} __attribute__((packed));
Thanks to Andrew Pinski of GCC team for sorting the things out at
https://gcc.gnu.org/pipermail/gcc/2023-November/242888.html.
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202311150821.cI4yciFE-lkp@intel.com
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Link: https://lore.kernel.org/r/20231120110607.98956-1-dmantipov@yandex.ru
Fixes: 50d7bd38c3aa ("stddef: Introduce struct_group() helper macro")
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/uapi/linux/stddef.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/uapi/linux/stddef.h b/include/uapi/linux/stddef.h
index 5c6c4269f7efe..2ec6f35cda32e 100644
--- a/include/uapi/linux/stddef.h
+++ b/include/uapi/linux/stddef.h
@@ -27,7 +27,7 @@
union { \
struct { MEMBERS } ATTRS; \
struct TAG { MEMBERS } ATTRS NAME; \
- }
+ } ATTRS
#ifdef __cplusplus
/* sizeof(struct{}) is 1 in C++, not 0, can't use C version of the macro. */
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 091/134] selftests/net: ipsec: fix constant out of range
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (89 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 090/134] uapi: propagate __struct_group() attributes to the container union Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 092/134] selftests/net: fix a char signedness issue Greg Kroah-Hartman
` (55 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Willem de Bruijn, Dmitry Safonov,
Jakub Kicinski, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willem de Bruijn <willemb@google.com>
[ Upstream commit 088559815477c6f623a5db5993491ddd7facbec7 ]
Fix a small compiler warning.
nr_process must be a signed long: it is assigned a signed long by
strtol() and is compared against LONG_MIN and LONG_MAX.
ipsec.c:2280:65:
error: result of comparison of constant -9223372036854775808
with expression of type 'unsigned int' is always false
[-Werror,-Wtautological-constant-out-of-range-compare]
if ((errno == ERANGE && (nr_process == LONG_MAX || nr_process == LONG_MIN))
Fixes: bc2652b7ae1e ("selftest/net/xfrm: Add test for ipsec tunnel")
Signed-off-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: Dmitry Safonov <0x7f454c46@gmail.com>
Link: https://lore.kernel.org/r/20231124171645.1011043-2-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/net/ipsec.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/net/ipsec.c b/tools/testing/selftests/net/ipsec.c
index 9a8229abfa026..be4a30a0d02ae 100644
--- a/tools/testing/selftests/net/ipsec.c
+++ b/tools/testing/selftests/net/ipsec.c
@@ -2263,7 +2263,7 @@ static int check_results(void)
int main(int argc, char **argv)
{
- unsigned int nr_process = 1;
+ long nr_process = 1;
int route_sock = -1, ret = KSFT_SKIP;
int test_desc_fd[2];
uint32_t route_seq;
@@ -2284,7 +2284,7 @@ int main(int argc, char **argv)
exit_usage(argv);
}
- if (nr_process > MAX_PROCESSES || !nr_process) {
+ if (nr_process > MAX_PROCESSES || nr_process < 1) {
printk("nr_process should be between [1; %u]",
MAX_PROCESSES);
exit_usage(argv);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 092/134] selftests/net: fix a char signedness issue
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (90 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 091/134] selftests/net: ipsec: fix constant out of range Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 093/134] selftests/net: unix: fix unused variable compiler warning Greg Kroah-Hartman
` (54 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Willem de Bruijn, Jakub Kicinski,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willem de Bruijn <willemb@google.com>
[ Upstream commit 7b29828c5af6841bdeb9fafa32fdfeff7ab9c407 ]
Signedness of char is signed on x86_64, but unsigned on arm64.
Fix the warning building cmsg_sender.c on signed platforms or
forced with -fsigned-char:
msg_sender.c:455:12:
error: implicit conversion from 'int' to 'char'
changes value from 128 to -128
[-Werror,-Wconstant-conversion]
buf[0] = ICMPV6_ECHO_REQUEST;
constant ICMPV6_ECHO_REQUEST is 128.
Link: https://lwn.net/Articles/911914
Fixes: de17e305a810 ("selftests: net: cmsg_sender: support icmp and raw sockets")
Signed-off-by: Willem de Bruijn <willemb@google.com>
Link: https://lore.kernel.org/r/20231124171645.1011043-3-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/net/cmsg_sender.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/cmsg_sender.c b/tools/testing/selftests/net/cmsg_sender.c
index 24b21b15ed3fb..6ff3e732f449f 100644
--- a/tools/testing/selftests/net/cmsg_sender.c
+++ b/tools/testing/selftests/net/cmsg_sender.c
@@ -416,9 +416,9 @@ int main(int argc, char *argv[])
{
struct addrinfo hints, *ai;
struct iovec iov[1];
+ unsigned char *buf;
struct msghdr msg;
char cbuf[1024];
- char *buf;
int err;
int fd;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 093/134] selftests/net: unix: fix unused variable compiler warning
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (91 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 092/134] selftests/net: fix a char signedness issue Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 094/134] selftests/net: mptcp: fix uninitialized variable warnings Greg Kroah-Hartman
` (53 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Willem de Bruijn, Jakub Kicinski,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willem de Bruijn <willemb@google.com>
[ Upstream commit 59fef379d453781f0dabfa1f1a1e86e78aee919a ]
Remove an unused variable.
diag_uid.c:151:24:
error: unused variable 'udr'
[-Werror,-Wunused-variable]
Fixes: ac011361bd4f ("af_unix: Add test for sock_diag and UDIAG_SHOW_UID.")
Signed-off-by: Willem de Bruijn <willemb@google.com>
Link: https://lore.kernel.org/r/20231124171645.1011043-4-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/net/af_unix/diag_uid.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/tools/testing/selftests/net/af_unix/diag_uid.c b/tools/testing/selftests/net/af_unix/diag_uid.c
index 5b88f7129fea4..79a3dd75590e8 100644
--- a/tools/testing/selftests/net/af_unix/diag_uid.c
+++ b/tools/testing/selftests/net/af_unix/diag_uid.c
@@ -148,7 +148,6 @@ void receive_response(struct __test_metadata *_metadata,
.msg_iov = &iov,
.msg_iovlen = 1
};
- struct unix_diag_req *udr;
struct nlmsghdr *nlh;
int ret;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 094/134] selftests/net: mptcp: fix uninitialized variable warnings
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (92 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 093/134] selftests/net: unix: fix unused variable compiler warning Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 095/134] octeontx2-af: Fix possible buffer overflow Greg Kroah-Hartman
` (52 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Florian Westphal, Willem de Bruijn,
Matthieu Baerts, Jakub Kicinski, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willem de Bruijn <willemb@google.com>
[ Upstream commit 00a4f8fd9c750f20d8fd4535c71c9caa7ef5ff2f ]
Same init_rng() in both tests. The function reads /dev/urandom to
initialize srand(). In case of failure, it falls back onto the
entropy in the uninitialized variable. Not sure if this is on purpose.
But failure reading urandom should be rare, so just fail hard. While
at it, convert to getrandom(). Which man 4 random suggests is simpler
and more robust.
mptcp_inq.c:525:6:
mptcp_connect.c:1131:6:
error: variable 'foo' is used uninitialized
whenever 'if' condition is false
[-Werror,-Wsometimes-uninitialized]
Fixes: 048d19d444be ("mptcp: add basic kselftest for mptcp")
Fixes: b51880568f20 ("selftests: mptcp: add inq test case")
Cc: Florian Westphal <fw@strlen.de>
Signed-off-by: Willem de Bruijn <willemb@google.com>
----
When input is randomized because this is expected to meaningfully
explore edge cases, should we also add
1. logging the random seed to stdout and
2. adding a command line argument to replay from a specific seed
I can do this in net-next, if authors find it useful in this case.
Reviewed-by: Matthieu Baerts <matttbe@kernel.org>
Link: https://lore.kernel.org/r/20231124171645.1011043-5-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
tools/testing/selftests/net/mptcp/mptcp_connect.c | 11 ++++-------
tools/testing/selftests/net/mptcp/mptcp_inq.c | 11 ++++-------
2 files changed, 8 insertions(+), 14 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/testing/selftests/net/mptcp/mptcp_connect.c
index c7f9ebeebc2c5..d2043ec3bf6d6 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.c
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c
@@ -18,6 +18,7 @@
#include <sys/ioctl.h>
#include <sys/poll.h>
+#include <sys/random.h>
#include <sys/sendfile.h>
#include <sys/stat.h>
#include <sys/socket.h>
@@ -1125,15 +1126,11 @@ int main_loop_s(int listensock)
static void init_rng(void)
{
- int fd = open("/dev/urandom", O_RDONLY);
unsigned int foo;
- if (fd > 0) {
- int ret = read(fd, &foo, sizeof(foo));
-
- if (ret < 0)
- srand(fd + foo);
- close(fd);
+ if (getrandom(&foo, sizeof(foo), 0) == -1) {
+ perror("getrandom");
+ exit(1);
}
srand(foo);
diff --git a/tools/testing/selftests/net/mptcp/mptcp_inq.c b/tools/testing/selftests/net/mptcp/mptcp_inq.c
index 8672d898f8cda..218aac4673212 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_inq.c
+++ b/tools/testing/selftests/net/mptcp/mptcp_inq.c
@@ -18,6 +18,7 @@
#include <time.h>
#include <sys/ioctl.h>
+#include <sys/random.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
@@ -519,15 +520,11 @@ static int client(int unixfd)
static void init_rng(void)
{
- int fd = open("/dev/urandom", O_RDONLY);
unsigned int foo;
- if (fd > 0) {
- int ret = read(fd, &foo, sizeof(foo));
-
- if (ret < 0)
- srand(fd + foo);
- close(fd);
+ if (getrandom(&foo, sizeof(foo), 0) == -1) {
+ perror("getrandom");
+ exit(1);
}
srand(foo);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 095/134] octeontx2-af: Fix possible buffer overflow
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (93 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 094/134] selftests/net: mptcp: fix uninitialized variable warnings Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 096/134] net: stmmac: xgmac: Disable FPE MMC interrupts Greg Kroah-Hartman
` (51 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Elena Salomatkina, Simon Horman,
Subbaraya Sundeep, Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Elena Salomatkina <elena.salomatkina.cmc@gmail.com>
[ Upstream commit ad31c629ca3c87f6d557488c1f9faaebfbcd203c ]
A loop in rvu_mbox_handler_nix_bandprof_free() contains
a break if (idx == MAX_BANDPROF_PER_PFFUNC),
but if idx may reach MAX_BANDPROF_PER_PFFUNC
buffer '(*req->prof_idx)[layer]' overflow happens before that check.
The patch moves the break to the
beginning of the loop.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: e8e095b3b370 ("octeontx2-af: cn10k: Bandwidth profiles config support").
Signed-off-by: Elena Salomatkina <elena.salomatkina.cmc@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Subbaraya Sundeep <sbhatta@marvell.com>
Link: https://lore.kernel.org/r/20231124210802.109763-1-elena.salomatkina.cmc@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
index 23c2f2ed2fb83..c112c71ff576f 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
@@ -5505,6 +5505,8 @@ int rvu_mbox_handler_nix_bandprof_free(struct rvu *rvu,
ipolicer = &nix_hw->ipolicer[layer];
for (idx = 0; idx < req->prof_count[layer]; idx++) {
+ if (idx == MAX_BANDPROF_PER_PFFUNC)
+ break;
prof_idx = req->prof_idx[layer][idx];
if (prof_idx >= ipolicer->band_prof.max ||
ipolicer->pfvf_map[prof_idx] != pcifunc)
@@ -5518,8 +5520,6 @@ int rvu_mbox_handler_nix_bandprof_free(struct rvu *rvu,
ipolicer->pfvf_map[prof_idx] = 0x00;
ipolicer->match_id[prof_idx] = 0;
rvu_free_rsrc(&ipolicer->band_prof, prof_idx);
- if (idx == MAX_BANDPROF_PER_PFFUNC)
- break;
}
}
mutex_unlock(&rvu->rsrc_lock);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 096/134] net: stmmac: xgmac: Disable FPE MMC interrupts
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (94 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 095/134] octeontx2-af: Fix possible buffer overflow Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 097/134] octeontx2-pf: Fix adding mbox work queue entry when num_vfs > 64 Greg Kroah-Hartman
` (50 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Larysa Zaremba, Furong Xu,
Serge Semin, Wojciech Drewek, Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Furong Xu <0x1207@gmail.com>
[ Upstream commit e54d628a2721bfbb002c19f6e8ca6746cec7640f ]
Commit aeb18dd07692 ("net: stmmac: xgmac: Disable MMC interrupts
by default") tries to disable MMC interrupts to avoid a storm of
unhandled interrupts, but leaves the FPE(Frame Preemption) MMC
interrupts enabled, FPE MMC interrupts can cause the same problem.
Now we mask FPE TX and RX interrupts to disable all MMC interrupts.
Fixes: aeb18dd07692 ("net: stmmac: xgmac: Disable MMC interrupts by default")
Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
Signed-off-by: Furong Xu <0x1207@gmail.com>
Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
Link: https://lore.kernel.org/r/20231125060126.2328690-1-0x1207@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/stmicro/stmmac/mmc_core.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
index ea4910ae0921a..6a7c1d325c464 100644
--- a/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
+++ b/drivers/net/ethernet/stmicro/stmmac/mmc_core.c
@@ -177,8 +177,10 @@
#define MMC_XGMAC_RX_DISCARD_OCT_GB 0x1b4
#define MMC_XGMAC_RX_ALIGN_ERR_PKT 0x1bc
+#define MMC_XGMAC_TX_FPE_INTR_MASK 0x204
#define MMC_XGMAC_TX_FPE_FRAG 0x208
#define MMC_XGMAC_TX_HOLD_REQ 0x20c
+#define MMC_XGMAC_RX_FPE_INTR_MASK 0x224
#define MMC_XGMAC_RX_PKT_ASSEMBLY_ERR 0x228
#define MMC_XGMAC_RX_PKT_SMD_ERR 0x22c
#define MMC_XGMAC_RX_PKT_ASSEMBLY_OK 0x230
@@ -352,6 +354,8 @@ static void dwxgmac_mmc_intr_all_mask(void __iomem *mmcaddr)
{
writel(0x0, mmcaddr + MMC_RX_INTR_MASK);
writel(0x0, mmcaddr + MMC_TX_INTR_MASK);
+ writel(MMC_DEFAULT_MASK, mmcaddr + MMC_XGMAC_TX_FPE_INTR_MASK);
+ writel(MMC_DEFAULT_MASK, mmcaddr + MMC_XGMAC_RX_FPE_INTR_MASK);
writel(MMC_DEFAULT_MASK, mmcaddr + MMC_XGMAC_RX_IPC_INTR_MASK);
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 097/134] octeontx2-pf: Fix adding mbox work queue entry when num_vfs > 64
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (95 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 096/134] net: stmmac: xgmac: Disable FPE MMC interrupts Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 098/134] octeontx2-pf: Restore TC ingress police rules when interface is up Greg Kroah-Hartman
` (49 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Geetha sowjanya, Subbaraya Sundeep,
Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geetha sowjanya <gakula@marvell.com>
[ Upstream commit 51597219e0cd5157401d4d0ccb5daa4d9961676f ]
When more than 64 VFs are enabled for a PF then mbox communication
between VF and PF is not working as mbox work queueing for few VFs
are skipped due to wrong calculation of VF numbers.
Fixes: d424b6c02415 ("octeontx2-pf: Enable SRIOV and added VF mbox handling")
Signed-off-by: Geetha sowjanya <gakula@marvell.com>
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Link: https://lore.kernel.org/r/1700930042-5400-1-git-send-email-sbhatta@marvell.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
index ba95ac9132746..6d56fc1918455 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
@@ -566,7 +566,9 @@ static irqreturn_t otx2_pfvf_mbox_intr_handler(int irq, void *pf_irq)
otx2_write64(pf, RVU_PF_VFPF_MBOX_INTX(1), intr);
otx2_queue_work(mbox, pf->mbox_pfvf_wq, 64, vfs, intr,
TYPE_PFVF);
- vfs -= 64;
+ if (intr)
+ trace_otx2_msg_interrupt(mbox->mbox.pdev, "VF(s) to PF", intr);
+ vfs = 64;
}
intr = otx2_read64(pf, RVU_PF_VFPF_MBOX_INTX(0));
@@ -574,7 +576,8 @@ static irqreturn_t otx2_pfvf_mbox_intr_handler(int irq, void *pf_irq)
otx2_queue_work(mbox, pf->mbox_pfvf_wq, 0, vfs, intr, TYPE_PFVF);
- trace_otx2_msg_interrupt(mbox->mbox.pdev, "VF(s) to PF", intr);
+ if (intr)
+ trace_otx2_msg_interrupt(mbox->mbox.pdev, "VF(s) to PF", intr);
return IRQ_HANDLED;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 098/134] octeontx2-pf: Restore TC ingress police rules when interface is up
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (96 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 097/134] octeontx2-pf: Fix adding mbox work queue entry when num_vfs > 64 Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 099/134] neighbour: Fix __randomize_layout crash in struct neighbour Greg Kroah-Hartman
` (48 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Subbaraya Sundeep, Paolo Abeni,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Subbaraya Sundeep <sbhatta@marvell.com>
[ Upstream commit fd7f98b2e12a3d96a92bde6640657ec7116f4372 ]
TC ingress policer rules depends on interface receive queue
contexts since the bandwidth profiles are attached to RQ
contexts. When an interface is brought down all the queue
contexts are freed. This in turn frees bandwidth profiles in
hardware causing ingress police rules non-functional after
the interface is brought up. Fix this by applying all the ingress
police rules config to hardware in otx2_open. Also allow
adding ingress rules only when interface is running
since no contexts exist for the interface when it is down.
Fixes: 68fbff68dbea ("octeontx2-pf: Add police action for TC flower")
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Link: https://lore.kernel.org/r/1700930217-5707-1-git-send-email-sbhatta@marvell.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../ethernet/marvell/octeontx2/nic/cn10k.c | 3 +
.../marvell/octeontx2/nic/otx2_common.h | 2 +
.../ethernet/marvell/octeontx2/nic/otx2_pf.c | 2 +
.../ethernet/marvell/octeontx2/nic/otx2_tc.c | 120 ++++++++++++++----
4 files changed, 102 insertions(+), 25 deletions(-)
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c
index a4a258da8dd59..c1c99d7054f87 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c
@@ -450,6 +450,9 @@ int cn10k_set_ipolicer_rate(struct otx2_nic *pfvf, u16 profile,
aq->prof.pebs_mantissa = 0;
aq->prof_mask.pebs_mantissa = 0xFF;
+ aq->prof.hl_en = 0;
+ aq->prof_mask.hl_en = 1;
+
/* Fill AQ info */
aq->qidx = profile;
aq->ctype = NIX_AQ_CTYPE_BANDPROF;
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
index e7c69b57147e0..06910307085ef 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
@@ -1070,6 +1070,8 @@ int otx2_init_tc(struct otx2_nic *nic);
void otx2_shutdown_tc(struct otx2_nic *nic);
int otx2_setup_tc(struct net_device *netdev, enum tc_setup_type type,
void *type_data);
+void otx2_tc_apply_ingress_police_rules(struct otx2_nic *nic);
+
/* CGX/RPM DMAC filters support */
int otx2_dmacflt_get_max_cnt(struct otx2_nic *pf);
int otx2_dmacflt_add(struct otx2_nic *pf, const u8 *mac, u32 bit_pos);
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
index 6d56fc1918455..532e324bdcc8e 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
@@ -1873,6 +1873,8 @@ int otx2_open(struct net_device *netdev)
if (pf->flags & OTX2_FLAG_DMACFLTR_SUPPORT)
otx2_dmacflt_reinstall_flows(pf);
+ otx2_tc_apply_ingress_police_rules(pf);
+
err = otx2_rxtx_enable(pf, true);
/* If a mbox communication error happens at this point then interface
* will end up in a state such that it is in down state but hardware
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
index fab9d85bfb371..423ce54eaea69 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
@@ -45,6 +45,9 @@ struct otx2_tc_flow {
bool is_act_police;
u32 prio;
struct npc_install_flow_req req;
+ u64 rate;
+ u32 burst;
+ bool is_pps;
};
static void otx2_get_egress_burst_cfg(struct otx2_nic *nic, u32 burst,
@@ -282,21 +285,10 @@ static int otx2_tc_egress_matchall_delete(struct otx2_nic *nic,
return err;
}
-static int otx2_tc_act_set_police(struct otx2_nic *nic,
- struct otx2_tc_flow *node,
- struct flow_cls_offload *f,
- u64 rate, u32 burst, u32 mark,
- struct npc_install_flow_req *req, bool pps)
+static int otx2_tc_act_set_hw_police(struct otx2_nic *nic,
+ struct otx2_tc_flow *node)
{
- struct netlink_ext_ack *extack = f->common.extack;
- struct otx2_hw *hw = &nic->hw;
- int rq_idx, rc;
-
- rq_idx = find_first_zero_bit(&nic->rq_bmap, hw->rx_queues);
- if (rq_idx >= hw->rx_queues) {
- NL_SET_ERR_MSG_MOD(extack, "Police action rules exceeded");
- return -EINVAL;
- }
+ int rc;
mutex_lock(&nic->mbox.lock);
@@ -306,23 +298,17 @@ static int otx2_tc_act_set_police(struct otx2_nic *nic,
return rc;
}
- rc = cn10k_set_ipolicer_rate(nic, node->leaf_profile, burst, rate, pps);
+ rc = cn10k_set_ipolicer_rate(nic, node->leaf_profile,
+ node->burst, node->rate, node->is_pps);
if (rc)
goto free_leaf;
- rc = cn10k_map_unmap_rq_policer(nic, rq_idx, node->leaf_profile, true);
+ rc = cn10k_map_unmap_rq_policer(nic, node->rq, node->leaf_profile, true);
if (rc)
goto free_leaf;
mutex_unlock(&nic->mbox.lock);
- req->match_id = mark & 0xFFFFULL;
- req->index = rq_idx;
- req->op = NIX_RX_ACTIONOP_UCAST;
- set_bit(rq_idx, &nic->rq_bmap);
- node->is_act_police = true;
- node->rq = rq_idx;
-
return 0;
free_leaf:
@@ -334,6 +320,39 @@ static int otx2_tc_act_set_police(struct otx2_nic *nic,
return rc;
}
+static int otx2_tc_act_set_police(struct otx2_nic *nic,
+ struct otx2_tc_flow *node,
+ struct flow_cls_offload *f,
+ u64 rate, u32 burst, u32 mark,
+ struct npc_install_flow_req *req, bool pps)
+{
+ struct netlink_ext_ack *extack = f->common.extack;
+ struct otx2_hw *hw = &nic->hw;
+ int rq_idx, rc;
+
+ rq_idx = find_first_zero_bit(&nic->rq_bmap, hw->rx_queues);
+ if (rq_idx >= hw->rx_queues) {
+ NL_SET_ERR_MSG_MOD(extack, "Police action rules exceeded");
+ return -EINVAL;
+ }
+
+ req->match_id = mark & 0xFFFFULL;
+ req->index = rq_idx;
+ req->op = NIX_RX_ACTIONOP_UCAST;
+
+ node->is_act_police = true;
+ node->rq = rq_idx;
+ node->burst = burst;
+ node->rate = rate;
+ node->is_pps = pps;
+
+ rc = otx2_tc_act_set_hw_police(nic, node);
+ if (!rc)
+ set_bit(rq_idx, &nic->rq_bmap);
+
+ return rc;
+}
+
static int otx2_tc_parse_actions(struct otx2_nic *nic,
struct flow_action *flow_action,
struct npc_install_flow_req *req,
@@ -986,6 +1005,11 @@ static int otx2_tc_del_flow(struct otx2_nic *nic,
}
if (flow_node->is_act_police) {
+ __clear_bit(flow_node->rq, &nic->rq_bmap);
+
+ if (nic->flags & OTX2_FLAG_INTF_DOWN)
+ goto free_mcam_flow;
+
mutex_lock(&nic->mbox.lock);
err = cn10k_map_unmap_rq_policer(nic, flow_node->rq,
@@ -1001,11 +1025,10 @@ static int otx2_tc_del_flow(struct otx2_nic *nic,
"Unable to free leaf bandwidth profile(%d)\n",
flow_node->leaf_profile);
- __clear_bit(flow_node->rq, &nic->rq_bmap);
-
mutex_unlock(&nic->mbox.lock);
}
+free_mcam_flow:
otx2_del_mcam_flow_entry(nic, flow_node->entry, NULL);
otx2_tc_update_mcam_table(nic, flow_cfg, flow_node, false);
kfree_rcu(flow_node, rcu);
@@ -1025,6 +1048,11 @@ static int otx2_tc_add_flow(struct otx2_nic *nic,
if (!(nic->flags & OTX2_FLAG_TC_FLOWER_SUPPORT))
return -ENOMEM;
+ if (nic->flags & OTX2_FLAG_INTF_DOWN) {
+ NL_SET_ERR_MSG_MOD(extack, "Interface not initialized");
+ return -EINVAL;
+ }
+
if (flow_cfg->nr_flows == flow_cfg->max_flows) {
NL_SET_ERR_MSG_MOD(extack,
"Free MCAM entry not available to add the flow");
@@ -1384,3 +1412,45 @@ void otx2_shutdown_tc(struct otx2_nic *nic)
otx2_destroy_tc_flow_list(nic);
}
EXPORT_SYMBOL(otx2_shutdown_tc);
+
+static void otx2_tc_config_ingress_rule(struct otx2_nic *nic,
+ struct otx2_tc_flow *node)
+{
+ struct npc_install_flow_req *req;
+
+ if (otx2_tc_act_set_hw_police(nic, node))
+ return;
+
+ mutex_lock(&nic->mbox.lock);
+
+ req = otx2_mbox_alloc_msg_npc_install_flow(&nic->mbox);
+ if (!req)
+ goto err;
+
+ memcpy(req, &node->req, sizeof(struct npc_install_flow_req));
+
+ if (otx2_sync_mbox_msg(&nic->mbox))
+ netdev_err(nic->netdev,
+ "Failed to install MCAM flow entry for ingress rule");
+err:
+ mutex_unlock(&nic->mbox.lock);
+}
+
+void otx2_tc_apply_ingress_police_rules(struct otx2_nic *nic)
+{
+ struct otx2_flow_config *flow_cfg = nic->flow_cfg;
+ struct otx2_tc_flow *node;
+
+ /* If any ingress policer rules exist for the interface then
+ * apply those rules. Ingress policer rules depend on bandwidth
+ * profiles linked to the receive queues. Since no receive queues
+ * exist when interface is down, ingress policer rules are stored
+ * and configured in hardware after all receive queues are allocated
+ * in otx2_open.
+ */
+ list_for_each_entry(node, &flow_cfg->flow_list_tc, list) {
+ if (node->is_act_police)
+ otx2_tc_config_ingress_rule(nic, node);
+ }
+}
+EXPORT_SYMBOL(otx2_tc_apply_ingress_police_rules);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 099/134] neighbour: Fix __randomize_layout crash in struct neighbour
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (97 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 098/134] octeontx2-pf: Restore TC ingress police rules when interface is up Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 100/134] efi/unaccepted: Fix off-by-one when checking for overlapping ranges Greg Kroah-Hartman
` (47 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Gustavo A. R. Silva, Kees Cook,
Joey Gouly, Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <gustavoars@kernel.org>
[ Upstream commit 45b3fae4675dc1d4ee2d7aefa19d85ee4f891377 ]
Previously, one-element and zero-length arrays were treated as true
flexible arrays, even though they are actually "fake" flex arrays.
The __randomize_layout would leave them untouched at the end of the
struct, similarly to proper C99 flex-array members.
However, this approach changed with commit 1ee60356c2dc ("gcc-plugins:
randstruct: Only warn about true flexible arrays"). Now, only C99
flexible-array members will remain untouched at the end of the struct,
while one-element and zero-length arrays will be subject to randomization.
Fix a `__randomize_layout` crash in `struct neighbour` by transforming
zero-length array `primary_key` into a proper C99 flexible-array member.
Fixes: 1ee60356c2dc ("gcc-plugins: randstruct: Only warn about true flexible arrays")
Closes: https://lore.kernel.org/linux-hardening/20231124102458.GB1503258@e124191.cambridge.arm.com/
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Tested-by: Joey Gouly <joey.gouly@arm.com>
Link: https://lore.kernel.org/r/ZWJoRsJGnCPdJ3+2@work
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/net/neighbour.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/net/neighbour.h b/include/net/neighbour.h
index 07022bb0d44d4..0d28172193fa6 100644
--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
@@ -162,7 +162,7 @@ struct neighbour {
struct rcu_head rcu;
struct net_device *dev;
netdevice_tracker dev_tracker;
- u8 primary_key[0];
+ u8 primary_key[];
} __randomize_layout;
struct neigh_ops {
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 100/134] efi/unaccepted: Fix off-by-one when checking for overlapping ranges
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (98 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 099/134] neighbour: Fix __randomize_layout crash in struct neighbour Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 101/134] r8169: prevent potential deadlock in rtl8169_close Greg Kroah-Hartman
` (46 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Kirill A. Shutemov, Michael Roth,
Vlastimil Babka, Ard Biesheuvel, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Roth <michael.roth@amd.com>
[ Upstream commit 01b1e3ca0e5ce47bbae8217d47376ad01b331b07 ]
When a task needs to accept memory it will scan the accepting_list
to see if any ranges already being processed by other tasks overlap
with its range. Due to an off-by-one in the range comparisons, a task
might falsely determine that an overlapping range is being accepted,
leading to an unnecessary delay before it begins processing the range.
Fix the off-by-one in the range comparison to prevent this and slightly
improve performance.
Fixes: 50e782a86c98 ("efi/unaccepted: Fix soft lockups caused by parallel memory acceptance")
Link: https://lore.kernel.org/linux-mm/20231101004523.vseyi5bezgfaht5i@amd.com/T/#me2eceb9906fcae5fe958b3fe88e41f920f8335b6
Reviewed-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Michael Roth <michael.roth@amd.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/firmware/efi/unaccepted_memory.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/firmware/efi/unaccepted_memory.c b/drivers/firmware/efi/unaccepted_memory.c
index 135278ddaf627..79fb687bb90f9 100644
--- a/drivers/firmware/efi/unaccepted_memory.c
+++ b/drivers/firmware/efi/unaccepted_memory.c
@@ -100,7 +100,7 @@ void accept_memory(phys_addr_t start, phys_addr_t end)
* overlap on physical address level.
*/
list_for_each_entry(entry, &accepting_list, list) {
- if (entry->end < range.start)
+ if (entry->end <= range.start)
continue;
if (entry->start >= range.end)
continue;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 101/134] r8169: prevent potential deadlock in rtl8169_close
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (99 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 100/134] efi/unaccepted: Fix off-by-one when checking for overlapping ranges Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 102/134] ravb: Fix races between ravb_tx_timeout_work() and net related ops Greg Kroah-Hartman
` (45 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Heiner Kallweit, Paolo Abeni,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiner Kallweit <hkallweit1@gmail.com>
[ Upstream commit 91d3d149978ba7b238198dd80e4b823756aa7cfa ]
ndo_stop() is RTNL-protected by net core, and the worker function takes
RTNL as well. Therefore we will deadlock when trying to execute a
pending work synchronously. To fix this execute any pending work
asynchronously. This will do no harm because netif_running() is false
in ndo_stop(), and therefore the work function is effectively a no-op.
However we have to ensure that no task is running or pending after
rtl_remove_one(), therefore add a call to cancel_work_sync().
Fixes: abe5fc42f9ce ("r8169: use RTNL to protect critical sections")
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://lore.kernel.org/r/12395867-1d17-4cac-aa7d-c691938fcddf@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/realtek/r8169_main.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index a43e33e4b25e6..62cabeeb842a1 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -4694,7 +4694,7 @@ static int rtl8169_close(struct net_device *dev)
rtl8169_down(tp);
rtl8169_rx_clear(tp);
- cancel_work_sync(&tp->wk.work);
+ cancel_work(&tp->wk.work);
free_irq(tp->irq, tp);
@@ -4928,6 +4928,8 @@ static void rtl_remove_one(struct pci_dev *pdev)
if (pci_dev_run_wake(pdev))
pm_runtime_get_noresume(&pdev->dev);
+ cancel_work_sync(&tp->wk.work);
+
unregister_netdev(tp->dev);
if (tp->dash_type != RTL_DASH_NONE)
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 102/134] ravb: Fix races between ravb_tx_timeout_work() and net related ops
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (100 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 101/134] r8169: prevent potential deadlock in rtl8169_close Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 103/134] ethtool: dont propagate EOPNOTSUPP from dumps Greg Kroah-Hartman
` (44 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yoshihiro Shimoda, Sergey Shtylyov,
Jakub Kicinski, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
[ Upstream commit 9870257a0a338cd8d6c1cddab74e703f490f6779 ]
Fix races between ravb_tx_timeout_work() and functions of net_device_ops
and ethtool_ops by using rtnl_trylock() and rtnl_unlock(). Note that
since ravb_close() is under the rtnl lock and calls cancel_work_sync(),
ravb_tx_timeout_work() should calls rtnl_trylock(). Otherwise, a deadlock
may happen in ravb_tx_timeout_work() like below:
CPU0 CPU1
ravb_tx_timeout()
schedule_work()
...
__dev_close_many()
// Under rtnl lock
ravb_close()
cancel_work_sync()
// Waiting
ravb_tx_timeout_work()
rtnl_lock()
// This is possible to cause a deadlock
If rtnl_trylock() fails, rescheduling the work with sleep for 1 msec.
Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper")
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Link: https://lore.kernel.org/r/20231127122420.3706751-1-yoshihiro.shimoda.uh@renesas.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/ravb_main.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 0ef0b88b71459..de12c02c55cbc 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1874,6 +1874,12 @@ static void ravb_tx_timeout_work(struct work_struct *work)
struct net_device *ndev = priv->ndev;
int error;
+ if (!rtnl_trylock()) {
+ usleep_range(1000, 2000);
+ schedule_work(&priv->work);
+ return;
+ }
+
netif_tx_stop_all_queues(ndev);
/* Stop PTP Clock driver */
@@ -1907,7 +1913,7 @@ static void ravb_tx_timeout_work(struct work_struct *work)
*/
netdev_err(ndev, "%s: ravb_dmac_init() failed, error %d\n",
__func__, error);
- return;
+ goto out_unlock;
}
ravb_emac_init(ndev);
@@ -1917,6 +1923,9 @@ static void ravb_tx_timeout_work(struct work_struct *work)
ravb_ptp_init(ndev, priv->pdev);
netif_tx_start_all_queues(ndev);
+
+out_unlock:
+ rtnl_unlock();
}
/* Packet transmit function for Ethernet AVB */
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 103/134] ethtool: dont propagate EOPNOTSUPP from dumps
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (101 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 102/134] ravb: Fix races between ravb_tx_timeout_work() and net related ops Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 104/134] bpf, sockmap: af_unix stream sockets need to hold ref for pair sock Greg Kroah-Hartman
` (43 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Simon Horman, Jakub Kicinski,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jakub Kicinski <kuba@kernel.org>
[ Upstream commit cbeb989e41f4094f54bec2cecce993f26f547bea ]
The default dump handler needs to clear ret before returning.
Otherwise if the last interface returns an inconsequential
error this error will propagate to user space.
This may confuse user space (ethtool CLI seems to ignore it,
but YNL doesn't). It will also terminate the dump early
for mutli-skb dump, because netlink core treats EOPNOTSUPP
as a real error.
Fixes: 728480f12442 ("ethtool: default handlers for GET requests")
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20231126225806.2143528-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/ethtool/netlink.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c
index 3bbd5afb7b31c..fe3553f60bf39 100644
--- a/net/ethtool/netlink.c
+++ b/net/ethtool/netlink.c
@@ -505,6 +505,7 @@ static int ethnl_default_dumpit(struct sk_buff *skb,
ret = skb->len;
break;
}
+ ret = 0;
}
rtnl_unlock();
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 104/134] bpf, sockmap: af_unix stream sockets need to hold ref for pair sock
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (102 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 103/134] ethtool: dont propagate EOPNOTSUPP from dumps Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 105/134] ice: Fix VF Reset paths when interface in a failed over aggregate Greg Kroah-Hartman
` (42 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, John Fastabend, Daniel Borkmann,
Jakub Sitnicki, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Fastabend <john.fastabend@gmail.com>
[ Upstream commit 8866730aed5100f06d3d965c22f1c61f74942541 ]
AF_UNIX stream sockets are a paired socket. So sending on one of the pairs
will lookup the paired socket as part of the send operation. It is possible
however to put just one of the pairs in a BPF map. This currently increments
the refcnt on the sock in the sockmap to ensure it is not free'd by the
stack before sockmap cleans up its state and stops any skbs being sent/recv'd
to that socket.
But we missed a case. If the peer socket is closed it will be free'd by the
stack. However, the paired socket can still be referenced from BPF sockmap
side because we hold a reference there. Then if we are sending traffic through
BPF sockmap to that socket it will try to dereference the free'd pair in its
send logic creating a use after free. And following splat:
[59.900375] BUG: KASAN: slab-use-after-free in sk_wake_async+0x31/0x1b0
[59.901211] Read of size 8 at addr ffff88811acbf060 by task kworker/1:2/954
[...]
[59.905468] Call Trace:
[59.905787] <TASK>
[59.906066] dump_stack_lvl+0x130/0x1d0
[59.908877] print_report+0x16f/0x740
[59.910629] kasan_report+0x118/0x160
[59.912576] sk_wake_async+0x31/0x1b0
[59.913554] sock_def_readable+0x156/0x2a0
[59.914060] unix_stream_sendmsg+0x3f9/0x12a0
[59.916398] sock_sendmsg+0x20e/0x250
[59.916854] skb_send_sock+0x236/0xac0
[59.920527] sk_psock_backlog+0x287/0xaa0
To fix let BPF sockmap hold a refcnt on both the socket in the sockmap and its
paired socket. It wasn't obvious how to contain the fix to bpf_unix logic. The
primarily problem with keeping this logic in bpf_unix was: In the sock close()
we could handle the deref by having a close handler. But, when we are destroying
the psock through a map delete operation we wouldn't have gotten any signal
thorugh the proto struct other than it being replaced. If we do the deref from
the proto replace its too early because we need to deref the sk_pair after the
backlog worker has been stopped.
Given all this it seems best to just cache it at the end of the psock and eat 8B
for the af_unix and vsock users. Notice dgram sockets are OK because they handle
locking already.
Fixes: 94531cfcbe79 ("af_unix: Add unix_stream_proto for sockmap")
Signed-off-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
Link: https://lore.kernel.org/bpf/20231129012557.95371-2-john.fastabend@gmail.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/linux/skmsg.h | 1 +
include/net/af_unix.h | 1 +
net/core/skmsg.c | 2 ++
net/unix/af_unix.c | 2 --
net/unix/unix_bpf.c | 5 +++++
5 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/include/linux/skmsg.h b/include/linux/skmsg.h
index c1637515a8a41..c953b8c0d2f43 100644
--- a/include/linux/skmsg.h
+++ b/include/linux/skmsg.h
@@ -106,6 +106,7 @@ struct sk_psock {
struct mutex work_mutex;
struct sk_psock_work_state work_state;
struct delayed_work work;
+ struct sock *sk_pair;
struct rcu_work rwork;
};
diff --git a/include/net/af_unix.h b/include/net/af_unix.h
index 824c258143a3a..49c4640027d8a 100644
--- a/include/net/af_unix.h
+++ b/include/net/af_unix.h
@@ -75,6 +75,7 @@ struct unix_sock {
};
#define unix_sk(ptr) container_of_const(ptr, struct unix_sock, sk)
+#define unix_peer(sk) (unix_sk(sk)->peer)
#define peer_wait peer_wq.wait
diff --git a/net/core/skmsg.c b/net/core/skmsg.c
index 6c31eefbd7778..93ecfceac1bc4 100644
--- a/net/core/skmsg.c
+++ b/net/core/skmsg.c
@@ -826,6 +826,8 @@ static void sk_psock_destroy(struct work_struct *work)
if (psock->sk_redir)
sock_put(psock->sk_redir);
+ if (psock->sk_pair)
+ sock_put(psock->sk_pair);
sock_put(psock->sk);
kfree(psock);
}
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 3e6eeacb13aec..1e1a88bd4e688 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -212,8 +212,6 @@ static inline bool unix_secdata_eq(struct scm_cookie *scm, struct sk_buff *skb)
}
#endif /* CONFIG_SECURITY_NETWORK */
-#define unix_peer(sk) (unix_sk(sk)->peer)
-
static inline int unix_our_peer(struct sock *sk, struct sock *osk)
{
return unix_peer(osk) == sk;
diff --git a/net/unix/unix_bpf.c b/net/unix/unix_bpf.c
index 2f9d8271c6ec7..7ea7c3a0d0d06 100644
--- a/net/unix/unix_bpf.c
+++ b/net/unix/unix_bpf.c
@@ -159,12 +159,17 @@ int unix_dgram_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool re
int unix_stream_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore)
{
+ struct sock *sk_pair;
+
if (restore) {
sk->sk_write_space = psock->saved_write_space;
sock_replace_proto(sk, psock->sk_proto);
return 0;
}
+ sk_pair = unix_peer(sk);
+ sock_hold(sk_pair);
+ psock->sk_pair = sk_pair;
unix_stream_bpf_check_needs_rebuild(psock->sk_proto);
sock_replace_proto(sk, &unix_stream_bpf_prot);
return 0;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 105/134] ice: Fix VF Reset paths when interface in a failed over aggregate
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (103 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 104/134] bpf, sockmap: af_unix stream sockets need to hold ref for pair sock Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 106/134] net: ravb: Check return value of reset_control_deassert() Greg Kroah-Hartman
` (41 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dave Ertman, Sujai Buvaneswaran,
Tony Nguyen, Przemek Kitszel, Jakub Kicinski, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Ertman <david.m.ertman@intel.com>
[ Upstream commit 9f74a3dfcf83e11aedcb98250b8040dbc6d9659a ]
There is an error when an interface has the following conditions:
- PF is in an aggregate (bond)
- PF has VFs created on it
- bond is in a state where it is failed-over to the secondary interface
- A VF reset is issued on one or more of those VFs
The issue is generated by the originating PF trying to rebuild or
reconfigure the VF resources. Since the bond is failed over to the
secondary interface the queue contexts are in a modified state.
To fix this issue, have the originating interface reclaim its resources
prior to the tear-down and rebuild or reconfigure. Then after the process
is complete, move the resources back to the currently active interface.
There are multiple paths that can be used depending on what triggered the
event, so create a helper function to move the queues and use paired calls
to the helper (back to origin, process, then move back to active interface)
under the same lag_mutex lock.
Fixes: 1e0f9881ef79 ("ice: Flesh out implementation of support for SRIOV on bonded interface")
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Link: https://lore.kernel.org/r/20231127212340.1137657-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/intel/ice/ice_lag.c | 122 +++++++++++-------
drivers/net/ethernet/intel/ice/ice_lag.h | 1 +
drivers/net/ethernet/intel/ice/ice_vf_lib.c | 20 +++
drivers/net/ethernet/intel/ice/ice_virtchnl.c | 25 ++++
4 files changed, 118 insertions(+), 50 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_lag.c b/drivers/net/ethernet/intel/ice/ice_lag.c
index fb40ad98e6aad..d86e2460b5a4d 100644
--- a/drivers/net/ethernet/intel/ice/ice_lag.c
+++ b/drivers/net/ethernet/intel/ice/ice_lag.c
@@ -536,6 +536,50 @@ ice_lag_move_vf_node_tc(struct ice_lag *lag, u8 oldport, u8 newport,
dev_dbg(dev, "Problem restarting traffic for LAG node move\n");
}
+/**
+ * ice_lag_build_netdev_list - populate the lag struct's netdev list
+ * @lag: local lag struct
+ * @ndlist: pointer to netdev list to populate
+ */
+static void ice_lag_build_netdev_list(struct ice_lag *lag,
+ struct ice_lag_netdev_list *ndlist)
+{
+ struct ice_lag_netdev_list *nl;
+ struct net_device *tmp_nd;
+
+ INIT_LIST_HEAD(&ndlist->node);
+ rcu_read_lock();
+ for_each_netdev_in_bond_rcu(lag->upper_netdev, tmp_nd) {
+ nl = kzalloc(sizeof(*nl), GFP_ATOMIC);
+ if (!nl)
+ break;
+
+ nl->netdev = tmp_nd;
+ list_add(&nl->node, &ndlist->node);
+ }
+ rcu_read_unlock();
+ lag->netdev_head = &ndlist->node;
+}
+
+/**
+ * ice_lag_destroy_netdev_list - free lag struct's netdev list
+ * @lag: pointer to local lag struct
+ * @ndlist: pointer to lag struct netdev list
+ */
+static void ice_lag_destroy_netdev_list(struct ice_lag *lag,
+ struct ice_lag_netdev_list *ndlist)
+{
+ struct ice_lag_netdev_list *entry, *n;
+
+ rcu_read_lock();
+ list_for_each_entry_safe(entry, n, &ndlist->node, node) {
+ list_del(&entry->node);
+ kfree(entry);
+ }
+ rcu_read_unlock();
+ lag->netdev_head = NULL;
+}
+
/**
* ice_lag_move_single_vf_nodes - Move Tx scheduling nodes for single VF
* @lag: primary interface LAG struct
@@ -564,7 +608,6 @@ ice_lag_move_single_vf_nodes(struct ice_lag *lag, u8 oldport, u8 newport,
void ice_lag_move_new_vf_nodes(struct ice_vf *vf)
{
struct ice_lag_netdev_list ndlist;
- struct list_head *tmp, *n;
u8 pri_port, act_port;
struct ice_lag *lag;
struct ice_vsi *vsi;
@@ -588,38 +631,15 @@ void ice_lag_move_new_vf_nodes(struct ice_vf *vf)
pri_port = pf->hw.port_info->lport;
act_port = lag->active_port;
- if (lag->upper_netdev) {
- struct ice_lag_netdev_list *nl;
- struct net_device *tmp_nd;
-
- INIT_LIST_HEAD(&ndlist.node);
- rcu_read_lock();
- for_each_netdev_in_bond_rcu(lag->upper_netdev, tmp_nd) {
- nl = kzalloc(sizeof(*nl), GFP_ATOMIC);
- if (!nl)
- break;
-
- nl->netdev = tmp_nd;
- list_add(&nl->node, &ndlist.node);
- }
- rcu_read_unlock();
- }
-
- lag->netdev_head = &ndlist.node;
+ if (lag->upper_netdev)
+ ice_lag_build_netdev_list(lag, &ndlist);
if (ice_is_feature_supported(pf, ICE_F_SRIOV_LAG) &&
lag->bonded && lag->primary && pri_port != act_port &&
!list_empty(lag->netdev_head))
ice_lag_move_single_vf_nodes(lag, pri_port, act_port, vsi->idx);
- list_for_each_safe(tmp, n, &ndlist.node) {
- struct ice_lag_netdev_list *entry;
-
- entry = list_entry(tmp, struct ice_lag_netdev_list, node);
- list_del(&entry->node);
- kfree(entry);
- }
- lag->netdev_head = NULL;
+ ice_lag_destroy_netdev_list(lag, &ndlist);
new_vf_unlock:
mutex_unlock(&pf->lag_mutex);
@@ -646,6 +666,29 @@ static void ice_lag_move_vf_nodes(struct ice_lag *lag, u8 oldport, u8 newport)
ice_lag_move_single_vf_nodes(lag, oldport, newport, i);
}
+/**
+ * ice_lag_move_vf_nodes_cfg - move vf nodes outside LAG netdev event context
+ * @lag: local lag struct
+ * @src_prt: lport value for source port
+ * @dst_prt: lport value for destination port
+ *
+ * This function is used to move nodes during an out-of-netdev-event situation,
+ * primarily when the driver needs to reconfigure or recreate resources.
+ *
+ * Must be called while holding the lag_mutex to avoid lag events from
+ * processing while out-of-sync moves are happening. Also, paired moves,
+ * such as used in a reset flow, should both be called under the same mutex
+ * lock to avoid changes between start of reset and end of reset.
+ */
+void ice_lag_move_vf_nodes_cfg(struct ice_lag *lag, u8 src_prt, u8 dst_prt)
+{
+ struct ice_lag_netdev_list ndlist;
+
+ ice_lag_build_netdev_list(lag, &ndlist);
+ ice_lag_move_vf_nodes(lag, src_prt, dst_prt);
+ ice_lag_destroy_netdev_list(lag, &ndlist);
+}
+
#define ICE_LAG_SRIOV_CP_RECIPE 10
#define ICE_LAG_SRIOV_TRAIN_PKT_LEN 16
@@ -2022,7 +2065,6 @@ void ice_lag_rebuild(struct ice_pf *pf)
{
struct ice_lag_netdev_list ndlist;
struct ice_lag *lag, *prim_lag;
- struct list_head *tmp, *n;
u8 act_port, loc_port;
if (!pf->lag || !pf->lag->bonded)
@@ -2034,21 +2076,7 @@ void ice_lag_rebuild(struct ice_pf *pf)
if (lag->primary) {
prim_lag = lag;
} else {
- struct ice_lag_netdev_list *nl;
- struct net_device *tmp_nd;
-
- INIT_LIST_HEAD(&ndlist.node);
- rcu_read_lock();
- for_each_netdev_in_bond_rcu(lag->upper_netdev, tmp_nd) {
- nl = kzalloc(sizeof(*nl), GFP_ATOMIC);
- if (!nl)
- break;
-
- nl->netdev = tmp_nd;
- list_add(&nl->node, &ndlist.node);
- }
- rcu_read_unlock();
- lag->netdev_head = &ndlist.node;
+ ice_lag_build_netdev_list(lag, &ndlist);
prim_lag = ice_lag_find_primary(lag);
}
@@ -2078,13 +2106,7 @@ void ice_lag_rebuild(struct ice_pf *pf)
ice_clear_rdma_cap(pf);
lag_rebuild_out:
- list_for_each_safe(tmp, n, &ndlist.node) {
- struct ice_lag_netdev_list *entry;
-
- entry = list_entry(tmp, struct ice_lag_netdev_list, node);
- list_del(&entry->node);
- kfree(entry);
- }
+ ice_lag_destroy_netdev_list(lag, &ndlist);
mutex_unlock(&pf->lag_mutex);
}
diff --git a/drivers/net/ethernet/intel/ice/ice_lag.h b/drivers/net/ethernet/intel/ice/ice_lag.h
index facb6c894b6dd..7f22987675012 100644
--- a/drivers/net/ethernet/intel/ice/ice_lag.h
+++ b/drivers/net/ethernet/intel/ice/ice_lag.h
@@ -63,4 +63,5 @@ int ice_init_lag(struct ice_pf *pf);
void ice_deinit_lag(struct ice_pf *pf);
void ice_lag_rebuild(struct ice_pf *pf);
bool ice_lag_is_switchdev_running(struct ice_pf *pf);
+void ice_lag_move_vf_nodes_cfg(struct ice_lag *lag, u8 src_prt, u8 dst_prt);
#endif /* _ICE_LAG_H_ */
diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.c b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
index 24e4f4d897b66..d488c7156d093 100644
--- a/drivers/net/ethernet/intel/ice/ice_vf_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
@@ -827,12 +827,16 @@ static void ice_notify_vf_reset(struct ice_vf *vf)
int ice_reset_vf(struct ice_vf *vf, u32 flags)
{
struct ice_pf *pf = vf->pf;
+ struct ice_lag *lag;
struct ice_vsi *vsi;
+ u8 act_prt, pri_prt;
struct device *dev;
int err = 0;
bool rsd;
dev = ice_pf_to_dev(pf);
+ act_prt = ICE_LAG_INVALID_PORT;
+ pri_prt = pf->hw.port_info->lport;
if (flags & ICE_VF_RESET_NOTIFY)
ice_notify_vf_reset(vf);
@@ -843,6 +847,17 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)
return 0;
}
+ lag = pf->lag;
+ mutex_lock(&pf->lag_mutex);
+ if (lag && lag->bonded && lag->primary) {
+ act_prt = lag->active_port;
+ if (act_prt != pri_prt && act_prt != ICE_LAG_INVALID_PORT &&
+ lag->upper_netdev)
+ ice_lag_move_vf_nodes_cfg(lag, act_prt, pri_prt);
+ else
+ act_prt = ICE_LAG_INVALID_PORT;
+ }
+
if (flags & ICE_VF_RESET_LOCK)
mutex_lock(&vf->cfg_lock);
else
@@ -935,6 +950,11 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)
if (flags & ICE_VF_RESET_LOCK)
mutex_unlock(&vf->cfg_lock);
+ if (lag && lag->bonded && lag->primary &&
+ act_prt != ICE_LAG_INVALID_PORT)
+ ice_lag_move_vf_nodes_cfg(lag, pri_prt, act_prt);
+ mutex_unlock(&pf->lag_mutex);
+
return err;
}
diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl.c b/drivers/net/ethernet/intel/ice/ice_virtchnl.c
index db97353efd067..62337e6569b23 100644
--- a/drivers/net/ethernet/intel/ice/ice_virtchnl.c
+++ b/drivers/net/ethernet/intel/ice/ice_virtchnl.c
@@ -1600,9 +1600,24 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
(struct virtchnl_vsi_queue_config_info *)msg;
struct virtchnl_queue_pair_info *qpi;
struct ice_pf *pf = vf->pf;
+ struct ice_lag *lag;
struct ice_vsi *vsi;
+ u8 act_prt, pri_prt;
int i = -1, q_idx;
+ lag = pf->lag;
+ mutex_lock(&pf->lag_mutex);
+ act_prt = ICE_LAG_INVALID_PORT;
+ pri_prt = pf->hw.port_info->lport;
+ if (lag && lag->bonded && lag->primary) {
+ act_prt = lag->active_port;
+ if (act_prt != pri_prt && act_prt != ICE_LAG_INVALID_PORT &&
+ lag->upper_netdev)
+ ice_lag_move_vf_nodes_cfg(lag, act_prt, pri_prt);
+ else
+ act_prt = ICE_LAG_INVALID_PORT;
+ }
+
if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states))
goto error_param;
@@ -1710,6 +1725,11 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
}
}
+ if (lag && lag->bonded && lag->primary &&
+ act_prt != ICE_LAG_INVALID_PORT)
+ ice_lag_move_vf_nodes_cfg(lag, pri_prt, act_prt);
+ mutex_unlock(&pf->lag_mutex);
+
/* send the response to the VF */
return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_VSI_QUEUES,
VIRTCHNL_STATUS_SUCCESS, NULL, 0);
@@ -1724,6 +1744,11 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
vf->vf_id, i);
}
+ if (lag && lag->bonded && lag->primary &&
+ act_prt != ICE_LAG_INVALID_PORT)
+ ice_lag_move_vf_nodes_cfg(lag, pri_prt, act_prt);
+ mutex_unlock(&pf->lag_mutex);
+
ice_lag_move_new_vf_nodes(vf);
/* send the response to the VF */
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 106/134] net: ravb: Check return value of reset_control_deassert()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (104 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 105/134] ice: Fix VF Reset paths when interface in a failed over aggregate Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 107/134] net: ravb: Use pm_runtime_resume_and_get() Greg Kroah-Hartman
` (40 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sergey Shtylyov, Philipp Zabel,
Claudiu Beznea, Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
[ Upstream commit d8eb6ea4b302e7ff78535c205510e359ac10a0bd ]
reset_control_deassert() could return an error. Some devices cannot work
if reset signal de-assert operation fails. To avoid this check the return
code of reset_control_deassert() in ravb_probe() and take proper action.
Along with it, the free_netdev() call from the error path was moved after
reset_control_assert() on its own label (out_free_netdev) to free
netdev in case reset_control_deassert() fails.
Fixes: 0d13a1a464a0 ("ravb: Add reset support")
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/ravb_main.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index de12c02c55cbc..f76ccb543838c 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -2654,7 +2654,10 @@ static int ravb_probe(struct platform_device *pdev)
ndev->features = info->net_features;
ndev->hw_features = info->net_hw_features;
- reset_control_deassert(rstc);
+ error = reset_control_deassert(rstc);
+ if (error)
+ goto out_free_netdev;
+
pm_runtime_enable(&pdev->dev);
pm_runtime_get_sync(&pdev->dev);
@@ -2881,11 +2884,11 @@ static int ravb_probe(struct platform_device *pdev)
out_disable_refclk:
clk_disable_unprepare(priv->refclk);
out_release:
- free_netdev(ndev);
-
pm_runtime_put(&pdev->dev);
pm_runtime_disable(&pdev->dev);
reset_control_assert(rstc);
+out_free_netdev:
+ free_netdev(ndev);
return error;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 107/134] net: ravb: Use pm_runtime_resume_and_get()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (105 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 106/134] net: ravb: Check return value of reset_control_deassert() Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 108/134] net: ravb: Make write access to CXR35 first before accessing other EMAC registers Greg Kroah-Hartman
` (39 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sergey Shtylyov, Claudiu Beznea,
Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
[ Upstream commit 88b74831faaee455c2af380382d979fc38e79270 ]
pm_runtime_get_sync() may return an error. In case it returns with an error
dev->power.usage_count needs to be decremented. pm_runtime_resume_and_get()
takes care of this. Thus use it.
Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper")
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/ravb_main.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index f76ccb543838c..cdcac7d1f93a0 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -2659,7 +2659,9 @@ static int ravb_probe(struct platform_device *pdev)
goto out_free_netdev;
pm_runtime_enable(&pdev->dev);
- pm_runtime_get_sync(&pdev->dev);
+ error = pm_runtime_resume_and_get(&pdev->dev);
+ if (error < 0)
+ goto out_rpm_disable;
if (info->multi_irqs) {
if (info->err_mgmt_irqs)
@@ -2885,6 +2887,7 @@ static int ravb_probe(struct platform_device *pdev)
clk_disable_unprepare(priv->refclk);
out_release:
pm_runtime_put(&pdev->dev);
+out_rpm_disable:
pm_runtime_disable(&pdev->dev);
reset_control_assert(rstc);
out_free_netdev:
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 108/134] net: ravb: Make write access to CXR35 first before accessing other EMAC registers
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (106 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 107/134] net: ravb: Use pm_runtime_resume_and_get() Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 109/134] net: ravb: Start TX queues after HW initialization succeeded Greg Kroah-Hartman
` (38 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sergey Shtylyov, Claudiu Beznea,
Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
[ Upstream commit d78c0ced60d5e2f8b5a4a0468a5c400b24aeadf2 ]
Hardware manual of RZ/G3S (and RZ/G2L) specifies the following on the
description of CXR35 register (chapter "PHY interface select register
(CXR35)"): "After release reset, make write-access to this register before
making write-access to other registers (except MDIOMOD). Even if not need
to change the value of this register, make write-access to this register
at least one time. Because RGMII/MII MODE is recognized by accessing this
register".
The setup procedure for EMAC module (chapter "Setup procedure" of RZ/G3S,
RZ/G2L manuals) specifies the E-MAC.CXR35 register is the first EMAC
register that is to be configured.
Note [A] from chapter "PHY interface select register (CXR35)" specifies
the following:
[A] The case which CXR35 SEL_XMII is used for the selection of RGMII/MII
in APB Clock 100 MHz.
(1) To use RGMII interface, Set ‘H’03E8_0000’ to this register.
(2) To use MII interface, Set ‘H’03E8_0002’ to this register.
Take into account these indication.
Fixes: 1089877ada8d ("ravb: Add RZ/G2L MII interface support")
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/ravb_main.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index cdcac7d1f93a0..9bf938eed66bd 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -515,6 +515,15 @@ static void ravb_emac_init_gbeth(struct net_device *ndev)
{
struct ravb_private *priv = netdev_priv(ndev);
+ if (priv->phy_interface == PHY_INTERFACE_MODE_MII) {
+ ravb_write(ndev, (1000 << 16) | CXR35_SEL_XMII_MII, CXR35);
+ ravb_modify(ndev, CXR31, CXR31_SEL_LINK0 | CXR31_SEL_LINK1, 0);
+ } else {
+ ravb_write(ndev, (1000 << 16) | CXR35_SEL_XMII_RGMII, CXR35);
+ ravb_modify(ndev, CXR31, CXR31_SEL_LINK0 | CXR31_SEL_LINK1,
+ CXR31_SEL_LINK0);
+ }
+
/* Receive frame limit set register */
ravb_write(ndev, GBETH_RX_BUFF_MAX + ETH_FCS_LEN, RFLR);
@@ -537,14 +546,6 @@ static void ravb_emac_init_gbeth(struct net_device *ndev)
/* E-MAC interrupt enable register */
ravb_write(ndev, ECSIPR_ICDIP, ECSIPR);
-
- if (priv->phy_interface == PHY_INTERFACE_MODE_MII) {
- ravb_modify(ndev, CXR31, CXR31_SEL_LINK0 | CXR31_SEL_LINK1, 0);
- ravb_write(ndev, (1000 << 16) | CXR35_SEL_XMII_MII, CXR35);
- } else {
- ravb_modify(ndev, CXR31, CXR31_SEL_LINK0 | CXR31_SEL_LINK1,
- CXR31_SEL_LINK0);
- }
}
static void ravb_emac_init_rcar(struct net_device *ndev)
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 109/134] net: ravb: Start TX queues after HW initialization succeeded
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (107 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 108/134] net: ravb: Make write access to CXR35 first before accessing other EMAC registers Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 110/134] net: ravb: Stop DMA in case of failures on ravb_open() Greg Kroah-Hartman
` (37 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sergey Shtylyov, Claudiu Beznea,
Kalesh AP, Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
[ Upstream commit 6f32c086602050fc11157adeafaa1c1eb393f0af ]
ravb_phy_start() may fail. If that happens, the TX queues will remain
started. Thus, move the netif_tx_start_all_queues() after PHY is
successfully initialized.
Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper")
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/ravb_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 9bf938eed66bd..1b35cc216d386 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1812,13 +1812,13 @@ static int ravb_open(struct net_device *ndev)
if (info->gptp)
ravb_ptp_init(ndev, priv->pdev);
- netif_tx_start_all_queues(ndev);
-
/* PHY control start */
error = ravb_phy_start(ndev);
if (error)
goto out_ptp_stop;
+ netif_tx_start_all_queues(ndev);
+
return 0;
out_ptp_stop:
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 110/134] net: ravb: Stop DMA in case of failures on ravb_open()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (108 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 109/134] net: ravb: Start TX queues after HW initialization succeeded Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 111/134] net: ravb: Keep reverse order of operations in ravb_remove() Greg Kroah-Hartman
` (36 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sergey Shtylyov, Claudiu Beznea,
Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
[ Upstream commit eac16a733427ba0de2449ffc7bd3da32ddb65cb7 ]
In case ravb_phy_start() returns with error the settings applied in
ravb_dmac_init() are not reverted (e.g. config mode). For this call
ravb_stop_dma() on failure path of ravb_open().
Fixes: a0d2f20650e8 ("Renesas Ethernet AVB PTP clock driver")
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/ravb_main.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 1b35cc216d386..0b8af7be20fab 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1825,6 +1825,7 @@ static int ravb_open(struct net_device *ndev)
/* Stop PTP Clock driver */
if (info->gptp)
ravb_ptp_stop(ndev);
+ ravb_stop_dma(ndev);
out_free_irq_mgmta:
if (!info->multi_irqs)
goto out_free_irq;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 111/134] net: ravb: Keep reverse order of operations in ravb_remove()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (109 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 110/134] net: ravb: Stop DMA in case of failures on ravb_open() Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 112/134] powerpc/pseries/iommu: enable_ddw incorrectly returns direct mapping for SR-IOV device Greg Kroah-Hartman
` (35 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Sergey Shtylyov, Claudiu Beznea,
Paolo Abeni, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
[ Upstream commit edf9bc396e05081ca281ffb0cd41e44db478ff26 ]
On RZ/G3S SMARC Carrier II board having RGMII connections b/w Ethernet
MACs and PHYs it has been discovered that doing unbind/bind for ravb
driver in a loop leads to wrong speed and duplex for Ethernet links and
broken connectivity (the connectivity cannot be restored even with
bringing interface down/up). Before doing unbind/bind the Ethernet
interfaces were configured though systemd. The sh instructions used to
do unbind/bind were:
$ cd /sys/bus/platform/drivers/ravb/
$ while :; do echo 11c30000.ethernet > unbind ; \
echo 11c30000.ethernet > bind; done
It has been discovered that there is a race b/w IOCTLs initialized by
systemd at the response of success binding and the
"ravb_write(ndev, CCC_OPC_RESET, CCC)" call in ravb_remove() as
follows:
1/ as a result of bind success the user space open/configures the
interfaces tough an IOCTL; the following stack trace has been
identified on RZ/G3S:
Call trace:
dump_backtrace+0x9c/0x100
show_stack+0x20/0x38
dump_stack_lvl+0x48/0x60
dump_stack+0x18/0x28
ravb_open+0x70/0xa58
__dev_open+0xf4/0x1e8
__dev_change_flags+0x198/0x218
dev_change_flags+0x2c/0x80
devinet_ioctl+0x640/0x708
inet_ioctl+0x1e4/0x200
sock_do_ioctl+0x50/0x108
sock_ioctl+0x240/0x358
__arm64_sys_ioctl+0xb0/0x100
invoke_syscall+0x50/0x128
el0_svc_common.constprop.0+0xc8/0xf0
do_el0_svc+0x24/0x38
el0_svc+0x34/0xb8
el0t_64_sync_handler+0xc0/0xc8
el0t_64_sync+0x190/0x198
2/ this call may execute concurrently with ravb_remove() as the
unbind/bind operation was executed in a loop
3/ if the operation mode is changed to RESET (through
ravb_write(ndev, CCC_OPC_RESET, CCC) call in ravb_remove())
while the above ravb_open() is in progress it may lead to MAC
(or PHY, or MAC-PHY connection, the right point hasn't been identified
at the moment) to be broken, thus the Ethernet connectivity fails to
restore.
The simple fix for this is to move ravb_write(ndev, CCC_OPC_RESET, CCC))
after unregister_netdev() to avoid resetting the controller while the
netdev interface is still registered.
To avoid future issues in ravb_remove(), the patch follows the proper order
of operations in ravb_remove(): reverse order compared with ravb_probe().
This avoids described races as the IOCTLs as well as unregister_netdev()
(called now at the beginning of ravb_remove()) calls rtnl_lock() before
continuing and IOCTLs check (though devinet_ioctl()) if device is still
registered just after taking the lock:
int devinet_ioctl(struct net *net, unsigned int cmd, struct ifreq *ifr)
{
// ...
rtnl_lock();
ret = -ENODEV;
dev = __dev_get_by_name(net, ifr->ifr_name);
if (!dev)
goto done;
// ...
done:
rtnl_unlock();
out:
return ret;
}
Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper")
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/renesas/ravb_main.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 0b8af7be20fab..bb56cf4090423 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -2903,22 +2903,26 @@ static int ravb_remove(struct platform_device *pdev)
struct ravb_private *priv = netdev_priv(ndev);
const struct ravb_hw_info *info = priv->info;
- /* Stop PTP Clock driver */
- if (info->ccc_gac)
- ravb_ptp_stop(ndev);
-
- clk_disable_unprepare(priv->gptp_clk);
- clk_disable_unprepare(priv->refclk);
-
- /* Set reset mode */
- ravb_write(ndev, CCC_OPC_RESET, CCC);
unregister_netdev(ndev);
if (info->nc_queues)
netif_napi_del(&priv->napi[RAVB_NC]);
netif_napi_del(&priv->napi[RAVB_BE]);
+
ravb_mdio_release(priv);
+
+ /* Stop PTP Clock driver */
+ if (info->ccc_gac)
+ ravb_ptp_stop(ndev);
+
dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat,
priv->desc_bat_dma);
+
+ /* Set reset mode */
+ ravb_write(ndev, CCC_OPC_RESET, CCC);
+
+ clk_disable_unprepare(priv->gptp_clk);
+ clk_disable_unprepare(priv->refclk);
+
pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev);
reset_control_assert(priv->rstc);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 112/134] powerpc/pseries/iommu: enable_ddw incorrectly returns direct mapping for SR-IOV device
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (110 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 111/134] net: ravb: Keep reverse order of operations in ravb_remove() Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 113/134] s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir Greg Kroah-Hartman
` (34 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Gaurav Batra, Michael Ellerman,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gaurav Batra <gbatra@linux.vnet.ibm.com>
[ Upstream commit 3bf983e4e93ce8e6d69e9d63f52a66ec0856672e ]
When a device is initialized, the driver invokes dma_supported() twice -
first for streaming mappings followed by coherent mappings. For an
SR-IOV device, default window is deleted and DDW created. With vPMEM
enabled, TCE mappings are dynamically created for both vPMEM and SR-IOV
device. There are no direct mappings.
First time when dma_supported() is called with 64 bit mask, DDW is created
and marked as dynamic window. The second time dma_supported() is called,
enable_ddw() finds existing window for the device and incorrectly returns
it as "direct mapping".
This only happens when size of DDW is big enough to map max LPAR memory.
This results in streaming TCEs to not get dynamically mapped, since code
incorrently assumes these are already pre-mapped. The adapter initially
comes up but goes down due to EEH.
Fixes: 381ceda88c4c ("powerpc/pseries/iommu: Make use of DDW for indirect mapping")
Cc: stable@vger.kernel.org # v5.15+
Signed-off-by: Gaurav Batra <gbatra@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20231003030802.47914-1-gbatra@linux.vnet.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/powerpc/platforms/pseries/iommu.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 16d93b580f61f..496e16c588aaa 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -914,7 +914,8 @@ static int remove_ddw(struct device_node *np, bool remove_prop, const char *win_
return 0;
}
-static bool find_existing_ddw(struct device_node *pdn, u64 *dma_addr, int *window_shift)
+static bool find_existing_ddw(struct device_node *pdn, u64 *dma_addr, int *window_shift,
+ bool *direct_mapping)
{
struct dma_win *window;
const struct dynamic_dma_window_prop *dma64;
@@ -927,6 +928,7 @@ static bool find_existing_ddw(struct device_node *pdn, u64 *dma_addr, int *windo
dma64 = window->prop;
*dma_addr = be64_to_cpu(dma64->dma_base);
*window_shift = be32_to_cpu(dma64->window_shift);
+ *direct_mapping = window->direct;
found = true;
break;
}
@@ -1270,10 +1272,8 @@ static bool enable_ddw(struct pci_dev *dev, struct device_node *pdn)
mutex_lock(&dma_win_init_mutex);
- if (find_existing_ddw(pdn, &dev->dev.archdata.dma_offset, &len)) {
- direct_mapping = (len >= max_ram_len);
+ if (find_existing_ddw(pdn, &dev->dev.archdata.dma_offset, &len, &direct_mapping))
goto out_unlock;
- }
/*
* If we already went through this for a previous function of
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 113/134] s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (111 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 112/134] powerpc/pseries/iommu: enable_ddw incorrectly returns direct mapping for SR-IOV device Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 114/134] drm/amd/display: Refactor edp power control Greg Kroah-Hartman
` (33 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Claudio Imbrenda, Heiko Carstens,
Vasily Gorbik, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiko Carstens <hca@linux.ibm.com>
[ Upstream commit 84bb41d5df48868055d159d9247b80927f1f70f9 ]
If the cmma no-dat feature is available the kernel page tables are walked
to identify and mark all pages which are used for address translation (all
region, segment, and page tables). In a subsequent loop all other pages are
marked as "no-dat" pages with the ESSA instruction.
This information is visible to the hypervisor, so that the hypervisor can
optimize purging of guest TLB entries. All pages used for swapper_pg_dir
and invalid_pg_dir are incorrectly marked as no-dat, which in turn can
result in incorrect guest TLB flushes.
Fix this by marking those pages correctly as being used for DAT.
Cc: <stable@vger.kernel.org>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/s390/mm/page-states.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/s390/mm/page-states.c b/arch/s390/mm/page-states.c
index 00e7b0876dc50..79a037f49f707 100644
--- a/arch/s390/mm/page-states.c
+++ b/arch/s390/mm/page-states.c
@@ -181,6 +181,12 @@ void __init cmma_init_nodat(void)
return;
/* Mark pages used in kernel page tables */
mark_kernel_pgd();
+ page = virt_to_page(&swapper_pg_dir);
+ for (i = 0; i < 4; i++)
+ set_bit(PG_arch_1, &page[i].flags);
+ page = virt_to_page(&invalid_pg_dir);
+ for (i = 0; i < 4; i++)
+ set_bit(PG_arch_1, &page[i].flags);
/* Set all kernel pages not used for page tables to stable/no-dat */
for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, NULL) {
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 114/134] drm/amd/display: Refactor edp power control
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (112 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 113/134] s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 115/134] drm/amd/display: Remove power sequencing check Greg Kroah-Hartman
` (32 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Aric Cyr, Jun Lei, Wayne Lin,
Ian Chen, Daniel Wheeler, Alex Deucher, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Chen <ian.chen@amd.com>
[ Upstream commit 45f98fccb1f6895f527bd5f811f23478c2f920f5 ]
[Why & How]
To organize the edp power control a bit:
1. add flag in dc_link to indicate dc to skip all implicit eDP power control.
2. add edp_set_panel_power link service for DM to call.
Reviewed-by: Aric Cyr <aric.cyr@amd.com>
Reviewed-by: Jun Lei <jun.lei@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Ian Chen <ian.chen@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Stable-dep-of: b0399e22ada0 ("drm/amd/display: Remove power sequencing check")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 21 ++++++++++++++
drivers/gpu/drm/amd/display/dc/dc.h | 4 +++
drivers/gpu/drm/amd/display/dc/dc_stream.h | 1 -
.../display/dc/dce110/dce110_hw_sequencer.c | 2 +-
.../drm/amd/display/dc/dcn314/dcn314_hwseq.c | 3 +-
drivers/gpu/drm/amd/display/dc/inc/link.h | 1 +
.../gpu/drm/amd/display/dc/link/link_dpms.c | 9 +++---
.../drm/amd/display/dc/link/link_factory.c | 1 +
.../display/dc/link/protocols/link_dp_phy.c | 3 +-
.../link/protocols/link_edp_panel_control.c | 29 +++++++++++++++++++
.../link/protocols/link_edp_panel_control.h | 1 +
11 files changed, 66 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 186936ad283a5..a1be93f6385c6 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -5254,3 +5254,24 @@ void dc_query_current_properties(struct dc *dc, struct dc_current_properties *pr
properties->cursor_size_limit = subvp_in_use ? 64 : dc->caps.max_cursor_size;
}
+/**
+ *****************************************************************************
+ * dc_set_edp_power() - DM controls eDP power to be ON/OFF
+ *
+ * Called when DM wants to power on/off eDP.
+ * Only work on links with flag skip_implict_edp_power_control is set.
+ *
+ *****************************************************************************
+ */
+void dc_set_edp_power(const struct dc *dc, struct dc_link *edp_link,
+ bool powerOn)
+{
+ if (edp_link->connector_signal != SIGNAL_TYPE_EDP)
+ return;
+
+ if (edp_link->skip_implict_edp_power_control == false)
+ return;
+
+ edp_link->dc->link_srv->edp_set_panel_power(edp_link, powerOn);
+}
+
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
index c05e91b257ace..dd7bf31ef6b04 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1578,6 +1578,7 @@ struct dc_link {
struct phy_state phy_state;
// BW ALLOCATON USB4 ONLY
struct dc_dpia_bw_alloc dpia_bw_alloc_config;
+ bool skip_implict_edp_power_control;
};
/* Return an enumerated dc_link.
@@ -1597,6 +1598,9 @@ void dc_get_edp_links(const struct dc *dc,
struct dc_link **edp_links,
int *edp_num);
+void dc_set_edp_power(const struct dc *dc, struct dc_link *edp_link,
+ bool powerOn);
+
/* The function initiates detection handshake over the given link. It first
* determines if there are display connections over the link. If so it initiates
* detection protocols supported by the connected receiver device. The function
diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h b/drivers/gpu/drm/amd/display/dc/dc_stream.h
index 3697ea1d14c1b..d5b3e3a32cc6d 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_stream.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h
@@ -302,7 +302,6 @@ struct dc_stream_state {
bool vblank_synchronized;
bool fpo_in_use;
struct mall_stream_config mall_stream_config;
- bool skip_edp_power_down;
};
#define ABM_LEVEL_IMMEDIATE_DISABLE 255
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
index 2a6157555fd1e..9c78e42418f34 100644
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
@@ -1226,7 +1226,7 @@ void dce110_blank_stream(struct pipe_ctx *pipe_ctx)
struct dce_hwseq *hws = link->dc->hwseq;
if (link->local_sink && link->local_sink->sink_signal == SIGNAL_TYPE_EDP) {
- if (!stream->skip_edp_power_down)
+ if (!link->skip_implict_edp_power_control)
hws->funcs.edp_backlight_control(link, false);
link->dc->hwss.set_abm_immediate_disable(pipe_ctx);
}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c
index 4d2820ffe4682..33a8626bda735 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c
@@ -476,7 +476,8 @@ void dcn314_disable_link_output(struct dc_link *link,
struct dmcu *dmcu = dc->res_pool->dmcu;
if (signal == SIGNAL_TYPE_EDP &&
- link->dc->hwss.edp_backlight_control)
+ link->dc->hwss.edp_backlight_control &&
+ !link->skip_implict_edp_power_control)
link->dc->hwss.edp_backlight_control(link, false);
else if (dmcu != NULL && dmcu->funcs->lock_phy)
dmcu->funcs->lock_phy(dmcu);
diff --git a/drivers/gpu/drm/amd/display/dc/inc/link.h b/drivers/gpu/drm/amd/display/dc/inc/link.h
index e3e8c76c17cfa..d7685368140ab 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/link.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/link.h
@@ -295,6 +295,7 @@ struct link_service {
bool (*edp_receiver_ready_T9)(struct dc_link *link);
bool (*edp_receiver_ready_T7)(struct dc_link *link);
bool (*edp_power_alpm_dpcd_enable)(struct dc_link *link, bool enable);
+ void (*edp_set_panel_power)(struct dc_link *link, bool powerOn);
/*************************** DP CTS ************************************/
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
index 79aef205598b7..28cb1f5a504d1 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
@@ -1930,7 +1930,8 @@ static void disable_link_dp(struct dc_link *link,
dp_disable_link_phy(link, link_res, signal);
if (link->connector_signal == SIGNAL_TYPE_EDP) {
- if (!link->dc->config.edp_no_power_sequencing)
+ if (!link->dc->config.edp_no_power_sequencing &&
+ !link->skip_implict_edp_power_control)
link->dc->hwss.edp_power_control(link, false);
}
@@ -2219,7 +2220,7 @@ static enum dc_status enable_link(
* link settings. Need to call disable first before enabling at
* new link settings.
*/
- if (link->link_status.link_active && !stream->skip_edp_power_down)
+ if (link->link_status.link_active)
disable_link(link, &pipe_ctx->link_res, pipe_ctx->stream->signal);
switch (pipe_ctx->stream->signal) {
@@ -2338,9 +2339,7 @@ void link_set_dpms_off(struct pipe_ctx *pipe_ctx)
dc->hwss.disable_stream(pipe_ctx);
} else {
dc->hwss.disable_stream(pipe_ctx);
- if (!pipe_ctx->stream->skip_edp_power_down) {
- disable_link(pipe_ctx->stream->link, &pipe_ctx->link_res, pipe_ctx->stream->signal);
- }
+ disable_link(pipe_ctx->stream->link, &pipe_ctx->link_res, pipe_ctx->stream->signal);
}
if (pipe_ctx->stream->timing.flags.DSC) {
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_factory.c b/drivers/gpu/drm/amd/display/dc/link/link_factory.c
index 0895742a31024..e406561c2c237 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_factory.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_factory.c
@@ -223,6 +223,7 @@ static void construct_link_service_edp_panel_control(struct link_service *link_s
link_srv->edp_receiver_ready_T9 = edp_receiver_ready_T9;
link_srv->edp_receiver_ready_T7 = edp_receiver_ready_T7;
link_srv->edp_power_alpm_dpcd_enable = edp_power_alpm_dpcd_enable;
+ link_srv->edp_set_panel_power = edp_set_panel_power;
}
/* link dp cts implements dp compliance test automation protocols and manual
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c
index b7abba55bc2fd..0050e0a06cbc2 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c
@@ -73,7 +73,8 @@ void dp_disable_link_phy(struct dc_link *link,
{
struct dc *dc = link->ctx->dc;
- if (!link->wa_flags.dp_keep_receiver_powered)
+ if (!link->wa_flags.dp_keep_receiver_powered &&
+ !link->skip_implict_edp_power_control)
dpcd_write_rx_power_ctrl(link, false);
dc->hwss.disable_link_output(link, link_res, signal);
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
index 98e715aa6d8e3..24b47fa82f93c 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
@@ -33,6 +33,7 @@
#include "link_dp_capability.h"
#include "dm_helpers.h"
#include "dal_asic_id.h"
+#include "link_dp_phy.h"
#include "dce/dmub_psr.h"
#include "dc/dc_dmub_srv.h"
#include "dce/dmub_replay.h"
@@ -362,6 +363,34 @@ void edp_panel_backlight_power_on(struct dc_link *link, bool wait_for_hpd)
link->dc->hwss.edp_backlight_control(link, true);
}
+void edp_set_panel_power(struct dc_link *link, bool powerOn)
+{
+ if (powerOn) {
+ // 1. panel VDD on
+ if (!link->dc->config.edp_no_power_sequencing)
+ link->dc->hwss.edp_power_control(link, true);
+ link->dc->hwss.edp_wait_for_hpd_ready(link, true);
+
+ // 2. panel BL on
+ if (link->dc->hwss.edp_backlight_control)
+ link->dc->hwss.edp_backlight_control(link, true);
+
+ // 3. Rx power on
+ dpcd_write_rx_power_ctrl(link, true);
+ } else {
+ // 3. Rx power off
+ dpcd_write_rx_power_ctrl(link, false);
+
+ // 2. panel BL off
+ if (link->dc->hwss.edp_backlight_control)
+ link->dc->hwss.edp_backlight_control(link, false);
+
+ // 1. panel VDD off
+ if (!link->dc->config.edp_no_power_sequencing)
+ link->dc->hwss.edp_power_control(link, false);
+ }
+}
+
bool edp_wait_for_t12(struct dc_link *link)
{
if (link->connector_signal == SIGNAL_TYPE_EDP && link->dc->hwss.edp_wait_for_T12) {
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
index 0a5bbda8c739c..20f91de852e30 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
@@ -69,4 +69,5 @@ void edp_add_delay_for_T9(struct dc_link *link);
bool edp_receiver_ready_T9(struct dc_link *link);
bool edp_receiver_ready_T7(struct dc_link *link);
bool edp_power_alpm_dpcd_enable(struct dc_link *link, bool enable);
+void edp_set_panel_power(struct dc_link *link, bool powerOn);
#endif /* __DC_LINK_EDP_POWER_CONTROL_H__ */
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 115/134] drm/amd/display: Remove power sequencing check
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (113 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 114/134] drm/amd/display: Refactor edp power control Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 116/134] cpufreq: imx6q: Dont disable 792 Mhz OPP unnecessarily Greg Kroah-Hartman
` (31 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Swapnil Patel, Roman Li,
Agustin Gutierrez, Daniel Wheeler, Alex Deucher, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Agustin Gutierrez <agustin.gutierrez@amd.com>
[ Upstream commit b0399e22ada096435de3e3e73899aa8bc026820d ]
[Why]
Some ASICs keep backlight powered on after dpms off
command has been issued.
[How]
The check for no edp power sequencing was never going to pass.
The value is never changed from what it is set by design.
Cc: stable@vger.kernel.org # 6.1+
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2765
Reviewed-by: Swapnil Patel <swapnil.patel@amd.com>
Acked-by: Roman Li <roman.li@amd.com>
Signed-off-by: Agustin Gutierrez <agustin.gutierrez@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/link/link_dpms.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
index 28cb1f5a504d1..a17a06eb7762b 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
@@ -1930,8 +1930,7 @@ static void disable_link_dp(struct dc_link *link,
dp_disable_link_phy(link, link_res, signal);
if (link->connector_signal == SIGNAL_TYPE_EDP) {
- if (!link->dc->config.edp_no_power_sequencing &&
- !link->skip_implict_edp_power_control)
+ if (!link->skip_implict_edp_power_control)
link->dc->hwss.edp_power_control(link, false);
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 116/134] cpufreq: imx6q: Dont disable 792 Mhz OPP unnecessarily
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (114 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 115/134] drm/amd/display: Remove power sequencing check Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 117/134] iommu/vt-d: Omit devTLB invalidation requests when TES=0 Greg Kroah-Hartman
` (30 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Christoph Niedermaier, Marek Vasut,
Fabio Estevam, Viresh Kumar, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Niedermaier <cniedermaier@dh-electronics.com>
[ Upstream commit 2e4e0984c7d696cc74cf2fd7e7f62997f0e9ebe6 ]
For a 900MHz i.MX6ULL CPU the 792MHz OPP is disabled. There is no
convincing reason to disable this OPP. If a CPU can run at 900MHz,
it should also be able to cope with 792MHz. Looking at the voltage
level of 792MHz in [1] (page 24, table 10. "Operating Ranges") the
current defined OPP is above the minimum. So the voltage level
shouldn't be a problem. However in [2] (page 24, table 10.
"Operating Ranges"), it is not mentioned that 792MHz OPP isn't
allowed. Change it to only disable 792MHz OPP for i.MX6ULL types
below 792 MHz.
[1] https://www.nxp.com/docs/en/data-sheet/IMX6ULLIEC.pdf
[2] https://www.nxp.com/docs/en/data-sheet/IMX6ULLCEC.pdf
Fixes: 0aa9abd4c212 ("cpufreq: imx6q: check speed grades for i.MX6ULL")
Signed-off-by: Christoph Niedermaier <cniedermaier@dh-electronics.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Reviewed-by: Fabio Estevam <festevam@denx.de>
[ Viresh: Edited subject ]
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/cpufreq/imx6q-cpufreq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/cpufreq/imx6q-cpufreq.c b/drivers/cpufreq/imx6q-cpufreq.c
index 494d044b9e720..33728c242f66c 100644
--- a/drivers/cpufreq/imx6q-cpufreq.c
+++ b/drivers/cpufreq/imx6q-cpufreq.c
@@ -327,7 +327,7 @@ static int imx6ul_opp_check_speed_grading(struct device *dev)
imx6x_disable_freq_in_opp(dev, 696000000);
if (of_machine_is_compatible("fsl,imx6ull")) {
- if (val != OCOTP_CFG3_6ULL_SPEED_792MHZ)
+ if (val < OCOTP_CFG3_6ULL_SPEED_792MHZ)
imx6x_disable_freq_in_opp(dev, 792000000);
if (val != OCOTP_CFG3_6ULL_SPEED_900MHZ)
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 117/134] iommu/vt-d: Omit devTLB invalidation requests when TES=0
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (115 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 116/134] cpufreq: imx6q: Dont disable 792 Mhz OPP unnecessarily Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 118/134] iommu/vt-d: Disable PCI ATS in legacy passthrough mode Greg Kroah-Hartman
` (29 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Lu Baolu, Kevin Tian, Joerg Roedel,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Baolu <baolu.lu@linux.intel.com>
[ Upstream commit 0f5432a9b839847dcfe9fa369d72e3d646102ddf ]
The latest VT-d spec indicates that when remapping hardware is disabled
(TES=0 in Global Status Register), upstream ATS Invalidation Completion
requests are treated as UR (Unsupported Request).
Consequently, the spec recommends in section 4.3 Handling of Device-TLB
Invalidations that software refrain from submitting any Device-TLB
invalidation requests when address remapping hardware is disabled.
Verify address remapping hardware is enabled prior to submitting Device-
TLB invalidation requests.
Fixes: 792fb43ce2c9 ("iommu/vt-d: Enable Intel IOMMU scalable mode by default")
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20231114011036.70142-2-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/iommu/intel/dmar.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
index a3414afe11b07..23cb80d62a9ab 100644
--- a/drivers/iommu/intel/dmar.c
+++ b/drivers/iommu/intel/dmar.c
@@ -1522,6 +1522,15 @@ void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 pfsid,
{
struct qi_desc desc;
+ /*
+ * VT-d spec, section 4.3:
+ *
+ * Software is recommended to not submit any Device-TLB invalidation
+ * requests while address remapping hardware is disabled.
+ */
+ if (!(iommu->gcmd & DMA_GCMD_TE))
+ return;
+
if (mask) {
addr |= (1ULL << (VTD_PAGE_SHIFT + mask - 1)) - 1;
desc.qw1 = QI_DEV_IOTLB_ADDR(addr) | QI_DEV_IOTLB_SIZE;
@@ -1587,6 +1596,15 @@ void qi_flush_dev_iotlb_pasid(struct intel_iommu *iommu, u16 sid, u16 pfsid,
unsigned long mask = 1UL << (VTD_PAGE_SHIFT + size_order - 1);
struct qi_desc desc = {.qw1 = 0, .qw2 = 0, .qw3 = 0};
+ /*
+ * VT-d spec, section 4.3:
+ *
+ * Software is recommended to not submit any Device-TLB invalidation
+ * requests while address remapping hardware is disabled.
+ */
+ if (!(iommu->gcmd & DMA_GCMD_TE))
+ return;
+
desc.qw0 = QI_DEV_EIOTLB_PASID(pasid) | QI_DEV_EIOTLB_SID(sid) |
QI_DEV_EIOTLB_QDEP(qdep) | QI_DEIOTLB_TYPE |
QI_DEV_IOTLB_PFSID(pfsid);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 118/134] iommu/vt-d: Disable PCI ATS in legacy passthrough mode
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (116 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 117/134] iommu/vt-d: Omit devTLB invalidation requests when TES=0 Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 119/134] iommu/vt-d: Make context clearing consistent with context mapping Greg Kroah-Hartman
` (28 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Lu Baolu, Kevin Tian, Joerg Roedel,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Baolu <baolu.lu@linux.intel.com>
[ Upstream commit da37dddcf4caf015c400a930301d2ee27a7a15fb ]
When IOMMU hardware operates in legacy mode, the TT field of the context
entry determines the translation type, with three supported types (Section
9.3 Context Entry):
- DMA translation without device TLB support
- DMA translation with device TLB support
- Passthrough mode with translated and translation requests blocked
Device TLB support is absent when hardware is configured in passthrough
mode.
Disable the PCI ATS feature when IOMMU is configured for passthrough
translation type in legacy (non-scalable) mode.
Fixes: 0faa19a1515f ("iommu/vt-d: Decouple PASID & PRI enabling from SVA")
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20231114011036.70142-3-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/iommu/intel/iommu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 8e878c3beec5c..18fa71aadc903 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -2487,7 +2487,8 @@ static int dmar_domain_attach_device(struct dmar_domain *domain,
return ret;
}
- iommu_enable_pci_caps(info);
+ if (sm_supported(info->iommu) || !domain_type_is_si(info->domain))
+ iommu_enable_pci_caps(info);
return 0;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 119/134] iommu/vt-d: Make context clearing consistent with context mapping
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (117 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 118/134] iommu/vt-d: Disable PCI ATS in legacy passthrough mode Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 120/134] drm/i915/gsc: Mark internal GSC engine with reserved uabi class Greg Kroah-Hartman
` (27 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Lu Baolu, Kevin Tian, Joerg Roedel,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Baolu <baolu.lu@linux.intel.com>
[ Upstream commit 9a16ab9d640274b20813d2d17475e18d3e99d834 ]
In the iommu probe_device path, domain_context_mapping() allows setting
up the context entry for a non-PCI device. However, in the iommu
release_device path, domain_context_clear() only clears context entries
for PCI devices.
Make domain_context_clear() behave consistently with
domain_context_mapping() by clearing context entries for both PCI and
non-PCI devices.
Fixes: 579305f75d34 ("iommu/vt-d: Update to use PCI DMA aliases")
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20231114011036.70142-4-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/iommu/intel/iommu.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 18fa71aadc903..4c3707384bd92 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -3923,8 +3923,8 @@ static int domain_context_clear_one_cb(struct pci_dev *pdev, u16 alias, void *op
*/
static void domain_context_clear(struct device_domain_info *info)
{
- if (!info->iommu || !info->dev || !dev_is_pci(info->dev))
- return;
+ if (!dev_is_pci(info->dev))
+ domain_context_clear_one(info, info->bus, info->devfn);
pci_for_each_dma_alias(to_pci_dev(info->dev),
&domain_context_clear_one_cb, info);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 120/134] drm/i915/gsc: Mark internal GSC engine with reserved uabi class
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (118 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 119/134] iommu/vt-d: Make context clearing consistent with context mapping Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 121/134] drm/panel: starry-2081101qfh032011-53g: Fine tune the panel power sequence Greg Kroah-Hartman
` (26 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Tvrtko Ursulin,
Daniele Ceraolo Spurio, Alan Previn, Matt Roper, Jani Nikula,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
[ Upstream commit 503579448db93f9fbcc93cd99a1f2d5aa4b2cda6 ]
The GSC CS is not exposed to the user, so we skipped assigning a uabi
class number for it. However, the trace logs use the uabi class and
instance to identify the engine, so leaving uabi class unset makes the
GSC CS show up as the RCS in those logs.
Given that the engine is not exposed to the user, we can't add a new
case in the uabi enum, so we insted internally define a kernel
internal class as -1.
At the same time remove special handling for the name and complete
the uabi_classes array so internal class is automatically correctly
assigned.
Engine will show as 65535:0 other0 in the logs/traces which should
be unique enough.
v2:
* Fix uabi class u8 vs u16 type confusion.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Fixes: 194babe26bdc ("drm/i915/mtl: don't expose GSC command streamer to the user")
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Alan Previn <alan.previn.teres.alexis@intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231116084456.291533-1-tvrtko.ursulin@linux.intel.com
(cherry picked from commit dfed6b58d54f3a5d7e6bc1fb060e2c936330eba2)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/i915/gt/intel_engine_user.c | 39 ++++++++++++---------
1 file changed, 22 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_user.c b/drivers/gpu/drm/i915/gt/intel_engine_user.c
index dcedff41a825f..d304e0a948f0d 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_user.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_user.c
@@ -42,12 +42,15 @@ void intel_engine_add_user(struct intel_engine_cs *engine)
(struct llist_head *)&engine->i915->uabi_engines);
}
-static const u8 uabi_classes[] = {
+#define I915_NO_UABI_CLASS ((u16)(-1))
+
+static const u16 uabi_classes[] = {
[RENDER_CLASS] = I915_ENGINE_CLASS_RENDER,
[COPY_ENGINE_CLASS] = I915_ENGINE_CLASS_COPY,
[VIDEO_DECODE_CLASS] = I915_ENGINE_CLASS_VIDEO,
[VIDEO_ENHANCEMENT_CLASS] = I915_ENGINE_CLASS_VIDEO_ENHANCE,
[COMPUTE_CLASS] = I915_ENGINE_CLASS_COMPUTE,
+ [OTHER_CLASS] = I915_NO_UABI_CLASS, /* Not exposed to users, no uabi class. */
};
static int engine_cmp(void *priv, const struct list_head *A,
@@ -202,6 +205,7 @@ static void engine_rename(struct intel_engine_cs *engine, const char *name, u16
void intel_engines_driver_register(struct drm_i915_private *i915)
{
+ u16 name_instance, other_instance = 0;
struct legacy_ring ring = {};
struct list_head *it, *next;
struct rb_node **p, *prev;
@@ -219,27 +223,28 @@ void intel_engines_driver_register(struct drm_i915_private *i915)
if (intel_gt_has_unrecoverable_error(engine->gt))
continue; /* ignore incomplete engines */
- /*
- * We don't want to expose the GSC engine to the users, but we
- * still rename it so it is easier to identify in the debug logs
- */
- if (engine->id == GSC0) {
- engine_rename(engine, "gsc", 0);
- continue;
- }
-
GEM_BUG_ON(engine->class >= ARRAY_SIZE(uabi_classes));
engine->uabi_class = uabi_classes[engine->class];
+ if (engine->uabi_class == I915_NO_UABI_CLASS) {
+ name_instance = other_instance++;
+ } else {
+ GEM_BUG_ON(engine->uabi_class >=
+ ARRAY_SIZE(i915->engine_uabi_class_count));
+ name_instance =
+ i915->engine_uabi_class_count[engine->uabi_class]++;
+ }
+ engine->uabi_instance = name_instance;
- GEM_BUG_ON(engine->uabi_class >=
- ARRAY_SIZE(i915->engine_uabi_class_count));
- engine->uabi_instance =
- i915->engine_uabi_class_count[engine->uabi_class]++;
-
- /* Replace the internal name with the final user facing name */
+ /*
+ * Replace the internal name with the final user and log facing
+ * name.
+ */
engine_rename(engine,
intel_engine_class_repr(engine->class),
- engine->uabi_instance);
+ name_instance);
+
+ if (engine->uabi_class == I915_NO_UABI_CLASS)
+ continue;
rb_link_node(&engine->uabi_node, prev, p);
rb_insert_color(&engine->uabi_node, &i915->uabi_engines);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 121/134] drm/panel: starry-2081101qfh032011-53g: Fine tune the panel power sequence
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (119 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 120/134] drm/i915/gsc: Mark internal GSC engine with reserved uabi class Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 122/134] drm/panel: nt36523: fix return value check in nt36523_probe() Greg Kroah-Hartman
` (25 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, xiazhengqiao, Jessica Zhang,
Neil Armstrong, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: xiazhengqiao <xiazhengqiao@huaqin.corp-partner.google.com>
[ Upstream commit fc1ccc16271a0526518f19f460fed63d575a8a42 ]
For the "starry, 2081101qfh032011-53g" panel, it is stipulated in the
panel spec that MIPI needs to keep the LP11 state before the
lcm_reset pin is pulled high.
Fixes: 6069b66cd962 ("drm/panel: support for STARRY 2081101QFH032011-53G MIPI-DSI panel")
Signed-off-by: xiazhengqiao <xiazhengqiao@huaqin.corp-partner.google.com>
Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
Link: https://lore.kernel.org/r/20231129084115.7918-1-xiazhengqiao@huaqin.corp-partner.google.com
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20231129084115.7918-1-xiazhengqiao@huaqin.corp-partner.google.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c b/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c
index d76a8ca9c40f8..29e63cdfb8954 100644
--- a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c
+++ b/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c
@@ -2104,6 +2104,7 @@ static const struct panel_desc starry_qfh032011_53g_desc = {
.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
MIPI_DSI_MODE_LPM,
.init_cmds = starry_qfh032011_53g_init_cmd,
+ .lp11_before_reset = true,
};
static const struct drm_display_mode starry_himax83102_j02_default_mode = {
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 122/134] drm/panel: nt36523: fix return value check in nt36523_probe()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (120 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 121/134] drm/panel: starry-2081101qfh032011-53g: Fine tune the panel power sequence Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 123/134] cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update Greg Kroah-Hartman
` (24 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Yang Yingliang, Neil Armstrong,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yang Yingliang <yangyingliang@huawei.com>
[ Upstream commit fb18fe0fdf22a2f4512a8b644bb5ea1473829cda ]
mipi_dsi_device_register_full() never returns NULL pointer, it
will return ERR_PTR() when it fails, so replace the check with
IS_ERR().
Fixes: 0993234a0045 ("drm/panel: Add driver for Novatek NT36523")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20231129090715.856263-1-yangyingliang@huaweicloud.com
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20231129090715.856263-1-yangyingliang@huaweicloud.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/panel/panel-novatek-nt36523.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-novatek-nt36523.c b/drivers/gpu/drm/panel/panel-novatek-nt36523.c
index 9632b9e95b715..c4a804c5d6aac 100644
--- a/drivers/gpu/drm/panel/panel-novatek-nt36523.c
+++ b/drivers/gpu/drm/panel/panel-novatek-nt36523.c
@@ -1266,9 +1266,9 @@ static int nt36523_probe(struct mipi_dsi_device *dsi)
return dev_err_probe(dev, -EPROBE_DEFER, "cannot get secondary DSI host\n");
pinfo->dsi[1] = mipi_dsi_device_register_full(dsi1_host, info);
- if (!pinfo->dsi[1]) {
+ if (IS_ERR(pinfo->dsi[1])) {
dev_err(dev, "cannot get secondary DSI device\n");
- return -ENODEV;
+ return PTR_ERR(pinfo->dsi[1]);
}
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 123/134] cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (121 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 122/134] drm/panel: nt36523: fix return value check in nt36523_probe() Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 124/134] cpufreq/amd-pstate: Only print supported EPP values for performance governor Greg Kroah-Hartman
` (23 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Huang Rui, Wyes Karny,
Rafael J. Wysocki, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wyes Karny <wyes.karny@amd.com>
[ Upstream commit febab20caebac959fdc3d7520bc52de8b1184455 ]
When amd_pstate is running, writing to scaling_min_freq and
scaling_max_freq has no effect. These values are only passed to the
policy level, but not to the platform level. This means that the
platform does not know about the frequency limits set by the user.
To fix this, update the min_perf and max_perf values at the platform
level whenever the user changes the scaling_min_freq and scaling_max_freq
values.
Fixes: ffa5096a7c33 ("cpufreq: amd-pstate: implement Pstate EPP support for the AMD processors")
Acked-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/cpufreq/amd-pstate.c | 60 ++++++++++++++++++++++++++++--------
include/linux/amd-pstate.h | 4 +++
2 files changed, 51 insertions(+), 13 deletions(-)
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 300f81d36291b..3313d1d2c6ddf 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -307,11 +307,11 @@ static int pstate_init_perf(struct amd_cpudata *cpudata)
highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
WRITE_ONCE(cpudata->highest_perf, highest_perf);
-
+ WRITE_ONCE(cpudata->max_limit_perf, highest_perf);
WRITE_ONCE(cpudata->nominal_perf, AMD_CPPC_NOMINAL_PERF(cap1));
WRITE_ONCE(cpudata->lowest_nonlinear_perf, AMD_CPPC_LOWNONLIN_PERF(cap1));
WRITE_ONCE(cpudata->lowest_perf, AMD_CPPC_LOWEST_PERF(cap1));
-
+ WRITE_ONCE(cpudata->min_limit_perf, AMD_CPPC_LOWEST_PERF(cap1));
return 0;
}
@@ -329,11 +329,12 @@ static int cppc_init_perf(struct amd_cpudata *cpudata)
highest_perf = cppc_perf.highest_perf;
WRITE_ONCE(cpudata->highest_perf, highest_perf);
-
+ WRITE_ONCE(cpudata->max_limit_perf, highest_perf);
WRITE_ONCE(cpudata->nominal_perf, cppc_perf.nominal_perf);
WRITE_ONCE(cpudata->lowest_nonlinear_perf,
cppc_perf.lowest_nonlinear_perf);
WRITE_ONCE(cpudata->lowest_perf, cppc_perf.lowest_perf);
+ WRITE_ONCE(cpudata->min_limit_perf, cppc_perf.lowest_perf);
if (cppc_state == AMD_PSTATE_ACTIVE)
return 0;
@@ -432,6 +433,10 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
u64 prev = READ_ONCE(cpudata->cppc_req_cached);
u64 value = prev;
+ min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf,
+ cpudata->max_limit_perf);
+ max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf,
+ cpudata->max_limit_perf);
des_perf = clamp_t(unsigned long, des_perf, min_perf, max_perf);
if ((cppc_state == AMD_PSTATE_GUIDED) && (gov_flags & CPUFREQ_GOV_DYNAMIC_SWITCHING)) {
@@ -470,6 +475,22 @@ static int amd_pstate_verify(struct cpufreq_policy_data *policy)
return 0;
}
+static int amd_pstate_update_min_max_limit(struct cpufreq_policy *policy)
+{
+ u32 max_limit_perf, min_limit_perf;
+ struct amd_cpudata *cpudata = policy->driver_data;
+
+ max_limit_perf = div_u64(policy->max * cpudata->highest_perf, cpudata->max_freq);
+ min_limit_perf = div_u64(policy->min * cpudata->highest_perf, cpudata->max_freq);
+
+ WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf);
+ WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf);
+ WRITE_ONCE(cpudata->max_limit_freq, policy->max);
+ WRITE_ONCE(cpudata->min_limit_freq, policy->min);
+
+ return 0;
+}
+
static int amd_pstate_update_freq(struct cpufreq_policy *policy,
unsigned int target_freq, bool fast_switch)
{
@@ -480,6 +501,9 @@ static int amd_pstate_update_freq(struct cpufreq_policy *policy,
if (!cpudata->max_freq)
return -ENODEV;
+ if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
+ amd_pstate_update_min_max_limit(policy);
+
cap_perf = READ_ONCE(cpudata->highest_perf);
min_perf = READ_ONCE(cpudata->lowest_perf);
max_perf = cap_perf;
@@ -534,6 +558,10 @@ static void amd_pstate_adjust_perf(unsigned int cpu,
struct amd_cpudata *cpudata = policy->driver_data;
unsigned int target_freq;
+ if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
+ amd_pstate_update_min_max_limit(policy);
+
+
cap_perf = READ_ONCE(cpudata->highest_perf);
lowest_nonlinear_perf = READ_ONCE(cpudata->lowest_nonlinear_perf);
max_freq = READ_ONCE(cpudata->max_freq);
@@ -747,6 +775,8 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
/* Initial processor data capability frequencies */
cpudata->max_freq = max_freq;
cpudata->min_freq = min_freq;
+ cpudata->max_limit_freq = max_freq;
+ cpudata->min_limit_freq = min_freq;
cpudata->nominal_freq = nominal_freq;
cpudata->lowest_nonlinear_freq = lowest_nonlinear_freq;
@@ -1185,16 +1215,25 @@ static int amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy)
return 0;
}
-static void amd_pstate_epp_init(unsigned int cpu)
+static void amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
{
- struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
struct amd_cpudata *cpudata = policy->driver_data;
- u32 max_perf, min_perf;
+ u32 max_perf, min_perf, min_limit_perf, max_limit_perf;
u64 value;
s16 epp;
max_perf = READ_ONCE(cpudata->highest_perf);
min_perf = READ_ONCE(cpudata->lowest_perf);
+ max_limit_perf = div_u64(policy->max * cpudata->highest_perf, cpudata->max_freq);
+ min_limit_perf = div_u64(policy->min * cpudata->highest_perf, cpudata->max_freq);
+
+ max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf,
+ cpudata->max_limit_perf);
+ min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf,
+ cpudata->max_limit_perf);
+
+ WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf);
+ WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf);
value = READ_ONCE(cpudata->cppc_req_cached);
@@ -1212,9 +1251,6 @@ static void amd_pstate_epp_init(unsigned int cpu)
value &= ~AMD_CPPC_DES_PERF(~0L);
value |= AMD_CPPC_DES_PERF(0);
- if (cpudata->epp_policy == cpudata->policy)
- goto skip_epp;
-
cpudata->epp_policy = cpudata->policy;
/* Get BIOS pre-defined epp value */
@@ -1224,7 +1260,7 @@ static void amd_pstate_epp_init(unsigned int cpu)
* This return value can only be negative for shared_memory
* systems where EPP register read/write not supported.
*/
- goto skip_epp;
+ return;
}
if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
@@ -1238,8 +1274,6 @@ static void amd_pstate_epp_init(unsigned int cpu)
WRITE_ONCE(cpudata->cppc_req_cached, value);
amd_pstate_set_epp(cpudata, epp);
-skip_epp:
- cpufreq_cpu_put(policy);
}
static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
@@ -1254,7 +1288,7 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
cpudata->policy = policy->policy;
- amd_pstate_epp_init(policy->cpu);
+ amd_pstate_epp_update_limit(policy);
return 0;
}
diff --git a/include/linux/amd-pstate.h b/include/linux/amd-pstate.h
index 446394f846064..6ad02ad9c7b42 100644
--- a/include/linux/amd-pstate.h
+++ b/include/linux/amd-pstate.h
@@ -70,6 +70,10 @@ struct amd_cpudata {
u32 nominal_perf;
u32 lowest_nonlinear_perf;
u32 lowest_perf;
+ u32 min_limit_perf;
+ u32 max_limit_perf;
+ u32 min_limit_freq;
+ u32 max_limit_freq;
u32 max_freq;
u32 min_freq;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 124/134] cpufreq/amd-pstate: Only print supported EPP values for performance governor
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (122 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 123/134] cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 125/134] drm/amd/pm: fix a memleak in aldebaran_tables_init Greg Kroah-Hartman
` (22 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Wyes Karny, Ayush Jain, Huang Rui,
Rafael J. Wysocki, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ayush Jain <ayush.jain3@amd.com>
[ Upstream commit 142c169b31beb364ef39385b4e88735bd51d37fe ]
show_energy_performance_available_preferences() to show only supported
values which is performance in performance governor policy.
-------Before--------
$ cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_driver
amd-pstate-epp
$ cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
performance
$ cat /sys/devices/system/cpu/cpu1/cpufreq/energy_performance_preference
performance
$ cat /sys/devices/system/cpu/cpu1/cpufreq/energy_performance_available_preferences
default performance balance_performance balance_power power
-------After--------
$ cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_driver
amd-pstate-epp
$ cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
performance
$ cat /sys/devices/system/cpu/cpu1/cpufreq/energy_performance_preference
performance
$ cat /sys/devices/system/cpu/cpu1/cpufreq/energy_performance_available_preferences
performance
Fixes: ffa5096a7c33 ("cpufreq: amd-pstate: implement Pstate EPP support for the AMD processors")
Suggested-by: Wyes Karny <wyes.karny@amd.com>
Signed-off-by: Ayush Jain <ayush.jain3@amd.com>
Reviewed-by: Wyes Karny <wyes.karny@amd.com>
Acked-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/cpufreq/amd-pstate.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 3313d1d2c6ddf..1f6186475715e 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -882,11 +882,16 @@ static ssize_t show_energy_performance_available_preferences(
{
int i = 0;
int offset = 0;
+ struct amd_cpudata *cpudata = policy->driver_data;
+
+ if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
+ return sysfs_emit_at(buf, offset, "%s\n",
+ energy_perf_strings[EPP_INDEX_PERFORMANCE]);
while (energy_perf_strings[i] != NULL)
offset += sysfs_emit_at(buf, offset, "%s ", energy_perf_strings[i++]);
- sysfs_emit_at(buf, offset, "\n");
+ offset += sysfs_emit_at(buf, offset, "\n");
return offset;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 125/134] drm/amd/pm: fix a memleak in aldebaran_tables_init
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (123 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 124/134] cpufreq/amd-pstate: Only print supported EPP values for performance governor Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 126/134] iommu: Fix printk arg in of_iommu_get_resv_regions() Greg Kroah-Hartman
` (21 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable; +Cc: Greg Kroah-Hartman, patches, Dinghao Liu, Alex Deucher,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dinghao Liu <dinghao.liu@zju.edu.cn>
[ Upstream commit 7a88f23e768491bae653b444a96091d2aaeb0818 ]
When kzalloc() for smu_table->ecc_table fails, we should free
the previously allocated resources to prevent memleak.
Fixes: edd794208555 ("drm/amd/pm: add message smu to get ecc_table v2")
Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
index cc3169400c9b0..08fff9600bd29 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
@@ -257,8 +257,11 @@ static int aldebaran_tables_init(struct smu_context *smu)
}
smu_table->ecc_table = kzalloc(tables[SMU_TABLE_ECCINFO].size, GFP_KERNEL);
- if (!smu_table->ecc_table)
+ if (!smu_table->ecc_table) {
+ kfree(smu_table->metrics_table);
+ kfree(smu_table->gpu_metrics_table);
return -ENOMEM;
+ }
return 0;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 126/134] iommu: Fix printk arg in of_iommu_get_resv_regions()
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (124 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 125/134] drm/amd/pm: fix a memleak in aldebaran_tables_init Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 127/134] drm/amd/display: refactor ILR to make it work Greg Kroah-Hartman
` (20 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Daniel Mentz, Thierry Reding,
Joerg Roedel, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Mentz <danielmentz@google.com>
[ Upstream commit c2183b3dcc9dd41b768569ea88bededa58cceebb ]
The variable phys is defined as (struct resource *) which aligns with
the printk format specifier %pr. Taking the address of it results in a
value of type (struct resource **) which is incompatible with the format
specifier %pr. Therefore, remove the address of operator (&).
Fixes: a5bf3cfce8cb ("iommu: Implement of_iommu_get_resv_regions()")
Signed-off-by: Daniel Mentz <danielmentz@google.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20231108062226.928985-1-danielmentz@google.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/iommu/of_iommu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
index c25b4ae6aeee7..35ba090f3b5e2 100644
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -197,7 +197,7 @@ iommu_resv_region_get_type(struct device *dev,
if (start == phys->start && end == phys->end)
return IOMMU_RESV_DIRECT;
- dev_warn(dev, "treating non-direct mapping [%pr] -> [%pap-%pap] as reservation\n", &phys,
+ dev_warn(dev, "treating non-direct mapping [%pr] -> [%pap-%pap] as reservation\n", phys,
&start, &end);
return IOMMU_RESV_RESERVED;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 127/134] drm/amd/display: refactor ILR to make it work
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (125 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 126/134] iommu: Fix printk arg in of_iommu_get_resv_regions() Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 128/134] drm/amd/display: Reduce default backlight min from 5 nits to 1 nits Greg Kroah-Hartman
` (19 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Anthony Koo, Aurabindo Pillai,
Sherry Wang, Daniel Wheeler, Alex Deucher, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sherry Wang <yao.wang1@amd.com>
[ Upstream commit 6ec876472ff7edeaf2a07bf6afbff74d7f1dfa35 ]
[Why]
Current ILR toggle is on/off as a part of panel
config for new function, which breaks original
ILR logic
[How]
Refactor ILR and take panel config into account
Reviewed-by: Anthony Koo <anthony.koo@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Sherry Wang <yao.wang1@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Stable-dep-of: d9e865826c20 ("drm/amd/display: Simplify brightness initialization")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../drm/amd/display/dc/link/link_detection.c | 6 ++++++
.../dc/link/protocols/link_dp_capability.c | 14 ++++---------
.../link/protocols/link_edp_panel_control.c | 21 +++++++++++++++++--
.../link/protocols/link_edp_panel_control.h | 2 ++
4 files changed, 31 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
index e682d27e098f8..b3d3e46c466b3 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -1166,6 +1166,12 @@ static bool detect_link_and_local_sink(struct dc_link *link,
dm_helpers_init_panel_settings(dc_ctx, &link->panel_config, sink);
// Override dc_panel_config if system has specific settings
dm_helpers_override_panel_settings(dc_ctx, &link->panel_config);
+
+ //sink only can use supported link rate table, we are foreced to enable it
+ if (link->reported_link_cap.link_rate == LINK_RATE_UNKNOWN)
+ link->panel_config.ilr.optimize_edp_link_rate = true;
+ if (edp_is_ilr_optimization_enabled(link))
+ link->reported_link_cap.link_rate = get_max_link_rate_from_ilr_table(link);
}
} else {
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
index 237e0ff955f3c..db87aa7b5c90f 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
@@ -707,8 +707,7 @@ bool edp_decide_link_settings(struct dc_link *link,
* edp_supported_link_rates_count is only valid for eDP v1.4 or higher.
* Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h"
*/
- if (link->dpcd_caps.dpcd_rev.raw < DPCD_REV_13 ||
- link->dpcd_caps.edp_supported_link_rates_count == 0) {
+ if (!edp_is_ilr_optimization_enabled(link)) {
*link_setting = link->verified_link_cap;
return true;
}
@@ -772,8 +771,7 @@ bool decide_edp_link_settings_with_dsc(struct dc_link *link,
* edp_supported_link_rates_count is only valid for eDP v1.4 or higher.
* Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h"
*/
- if ((link->dpcd_caps.dpcd_rev.raw < DPCD_REV_13 ||
- link->dpcd_caps.edp_supported_link_rates_count == 0)) {
+ if (!edp_is_ilr_optimization_enabled(link)) {
/* for DSC enabled case, we search for minimum lane count */
memset(&initial_link_setting, 0, sizeof(initial_link_setting));
initial_link_setting.lane_count = LANE_COUNT_ONE;
@@ -1938,9 +1936,7 @@ void detect_edp_sink_caps(struct dc_link *link)
* edp_supported_link_rates_count is only valid for eDP v1.4 or higher.
* Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h"
*/
- if (link->dpcd_caps.dpcd_rev.raw >= DPCD_REV_13 &&
- (link->panel_config.ilr.optimize_edp_link_rate ||
- link->reported_link_cap.link_rate == LINK_RATE_UNKNOWN)) {
+ if (link->dpcd_caps.dpcd_rev.raw >= DPCD_REV_13) {
// Read DPCD 00010h - 0001Fh 16 bytes at one shot
core_link_read_dpcd(link, DP_SUPPORTED_LINK_RATES,
supported_link_rates, sizeof(supported_link_rates));
@@ -1958,12 +1954,10 @@ void detect_edp_sink_caps(struct dc_link *link)
link_rate = linkRateInKHzToLinkRateMultiplier(link_rate_in_khz);
link->dpcd_caps.edp_supported_link_rates[link->dpcd_caps.edp_supported_link_rates_count] = link_rate;
link->dpcd_caps.edp_supported_link_rates_count++;
-
- if (link->reported_link_cap.link_rate < link_rate)
- link->reported_link_cap.link_rate = link_rate;
}
}
}
+
core_link_read_dpcd(link, DP_EDP_BACKLIGHT_ADJUSTMENT_CAP,
&backlight_adj_cap, sizeof(backlight_adj_cap));
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
index 24b47fa82f93c..e1708c296b7df 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
@@ -300,6 +300,24 @@ bool set_cached_brightness_aux(struct dc_link *link)
return set_default_brightness_aux(link);
return false;
}
+bool edp_is_ilr_optimization_enabled(struct dc_link *link)
+{
+ if (link->dpcd_caps.edp_supported_link_rates_count == 0 || !link->panel_config.ilr.optimize_edp_link_rate)
+ return false;
+ return true;
+}
+
+enum dc_link_rate get_max_link_rate_from_ilr_table(struct dc_link *link)
+{
+ enum dc_link_rate link_rate = link->reported_link_cap.link_rate;
+
+ for (int i = 0; i < link->dpcd_caps.edp_supported_link_rates_count; i++) {
+ if (link_rate < link->dpcd_caps.edp_supported_link_rates[i])
+ link_rate = link->dpcd_caps.edp_supported_link_rates[i];
+ }
+
+ return link_rate;
+}
bool edp_is_ilr_optimization_required(struct dc_link *link,
struct dc_crtc_timing *crtc_timing)
@@ -312,8 +330,7 @@ bool edp_is_ilr_optimization_required(struct dc_link *link,
ASSERT(link || crtc_timing); // invalid input
- if (link->dpcd_caps.edp_supported_link_rates_count == 0 ||
- !link->panel_config.ilr.optimize_edp_link_rate)
+ if (!edp_is_ilr_optimization_enabled(link))
return false;
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
index 20f91de852e30..ebf7deb63d136 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
@@ -64,6 +64,8 @@ bool edp_get_replay_state(const struct dc_link *link, uint64_t *state);
bool edp_wait_for_t12(struct dc_link *link);
bool edp_is_ilr_optimization_required(struct dc_link *link,
struct dc_crtc_timing *crtc_timing);
+bool edp_is_ilr_optimization_enabled(struct dc_link *link);
+enum dc_link_rate get_max_link_rate_from_ilr_table(struct dc_link *link);
bool edp_backlight_enable_aux(struct dc_link *link, bool enable);
void edp_add_delay_for_T9(struct dc_link *link);
bool edp_receiver_ready_T9(struct dc_link *link);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 128/134] drm/amd/display: Reduce default backlight min from 5 nits to 1 nits
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (126 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 127/134] drm/amd/display: refactor ILR to make it work Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 129/134] drm/amd/display: Simplify brightness initialization Greg Kroah-Hartman
` (18 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Agustin Gutierrez, Roman Li,
Swapnil Patel, Daniel Wheeler, Alex Deucher, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Swapnil Patel <swapnil.patel@amd.com>
[ Upstream commit 5edb7cdff85af8f8c5fda5b88310535ab823f663 ]
[Why & How]
Currently set_default_brightness_aux function uses 5 nits as lower limit
to check for valid default_backlight setting. However some newer panels
can support even lower default settings
Reviewed-by: Agustin Gutierrez <agustin.gutierrez@amd.com>
Acked-by: Roman Li <roman.li@amd.com>
Signed-off-by: Swapnil Patel <swapnil.patel@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Stable-dep-of: d9e865826c20 ("drm/amd/display: Simplify brightness initialization")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../amd/display/dc/link/protocols/link_edp_panel_control.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
index e1708c296b7df..a602202610e09 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
@@ -281,8 +281,8 @@ bool set_default_brightness_aux(struct dc_link *link)
if (link && link->dpcd_sink_ext_caps.bits.oled == 1) {
if (!read_default_bl_aux(link, &default_backlight))
default_backlight = 150000;
- // if < 5 nits or > 5000, it might be wrong readback
- if (default_backlight < 5000 || default_backlight > 5000000)
+ // if < 1 nits or > 5000, it might be wrong readback
+ if (default_backlight < 1000 || default_backlight > 5000000)
default_backlight = 150000; //
return edp_set_backlight_level_nits(link, true,
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 129/134] drm/amd/display: Simplify brightness initialization
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (127 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 128/134] drm/amd/display: Reduce default backlight min from 5 nits to 1 nits Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 130/134] drm/amd/display: Fix MPCC 1DLUT programming Greg Kroah-Hartman
` (17 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Krunoslav Kovac, Hamza Mahfooz,
Camille Cho, Alex Deucher, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Camille Cho <camille.cho@amd.com>
[ Upstream commit d9e865826c202b262f9ee3f17a03cc4ac5d44ced ]
[Why]
Remove the brightness cache in DC. It uses a single value to represent
the brightness for both SDR and HDR mode. This leads to flash in HDR
on/off. It also unconditionally programs brightness as in HDR mode. This
may introduce garbage on SDR mode in miniLED panel.
[How]
Simplify the initialization flow by removing the DC cache and taking
what panel has as default. Expand the mechanism for PWM to DPCD Aux to
restore cached brightness value generally.
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Krunoslav Kovac <krunoslav.kovac@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Camille Cho <camille.cho@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/dc.h | 1 -
drivers/gpu/drm/amd/display/dc/dc_types.h | 4 ----
.../gpu/drm/amd/display/dc/link/link_detection.c | 2 +-
drivers/gpu/drm/amd/display/dc/link/link_dpms.c | 3 +--
.../dc/link/protocols/link_edp_panel_control.c | 16 +++-------------
.../dc/link/protocols/link_edp_panel_control.h | 1 -
6 files changed, 5 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
index dd7bf31ef6b04..3f33740e2f659 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1538,7 +1538,6 @@ struct dc_link {
enum edp_revision edp_revision;
union dpcd_sink_ext_caps dpcd_sink_ext_caps;
- struct backlight_settings backlight_settings;
struct psr_settings psr_settings;
struct replay_settings replay_settings;
diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/amd/display/dc/dc_types.h
index ba900b0a62a82..accffba5a6834 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_types.h
@@ -1003,10 +1003,6 @@ struct link_mst_stream_allocation_table {
struct link_mst_stream_allocation stream_allocations[MAX_CONTROLLER_NUM];
};
-struct backlight_settings {
- uint32_t backlight_millinits;
-};
-
/* PSR feature flags */
struct psr_settings {
bool psr_feature_enabled; // PSR is supported by sink
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
index b3d3e46c466b3..c7a9e286a5d4d 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -876,7 +876,7 @@ static bool detect_link_and_local_sink(struct dc_link *link,
(link->dpcd_sink_ext_caps.bits.oled == 1)) {
dpcd_set_source_specific_data(link);
msleep(post_oui_delay);
- set_cached_brightness_aux(link);
+ set_default_brightness_aux(link);
}
return true;
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
index a17a06eb7762b..35d087cf1980f 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
@@ -2140,8 +2140,7 @@ static enum dc_status enable_link_dp(struct dc_state *state,
if (link->dpcd_sink_ext_caps.bits.oled == 1 ||
link->dpcd_sink_ext_caps.bits.sdr_aux_backlight_control == 1 ||
link->dpcd_sink_ext_caps.bits.hdr_aux_backlight_control == 1) {
- set_cached_brightness_aux(link);
-
+ set_default_brightness_aux(link);
if (link->dpcd_sink_ext_caps.bits.oled == 1)
msleep(bl_oled_enable_delay);
edp_backlight_enable_aux(link, true);
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
index a602202610e09..fe74d4252a510 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
@@ -168,7 +168,6 @@ bool edp_set_backlight_level_nits(struct dc_link *link,
*(uint32_t *)&dpcd_backlight_set.backlight_level_millinits = backlight_millinits;
*(uint16_t *)&dpcd_backlight_set.backlight_transition_time_ms = (uint16_t)transition_time_in_ms;
- link->backlight_settings.backlight_millinits = backlight_millinits;
if (!link->dpcd_caps.panel_luminance_control) {
if (core_link_write_dpcd(link, DP_SOURCE_BACKLIGHT_LEVEL,
@@ -281,9 +280,9 @@ bool set_default_brightness_aux(struct dc_link *link)
if (link && link->dpcd_sink_ext_caps.bits.oled == 1) {
if (!read_default_bl_aux(link, &default_backlight))
default_backlight = 150000;
- // if < 1 nits or > 5000, it might be wrong readback
- if (default_backlight < 1000 || default_backlight > 5000000)
- default_backlight = 150000; //
+ // if > 5000, it might be wrong readback
+ if (default_backlight > 5000000)
+ default_backlight = 150000;
return edp_set_backlight_level_nits(link, true,
default_backlight, 0);
@@ -291,15 +290,6 @@ bool set_default_brightness_aux(struct dc_link *link)
return false;
}
-bool set_cached_brightness_aux(struct dc_link *link)
-{
- if (link->backlight_settings.backlight_millinits)
- return edp_set_backlight_level_nits(link, true,
- link->backlight_settings.backlight_millinits, 0);
- else
- return set_default_brightness_aux(link);
- return false;
-}
bool edp_is_ilr_optimization_enabled(struct dc_link *link)
{
if (link->dpcd_caps.edp_supported_link_rates_count == 0 || !link->panel_config.ilr.optimize_edp_link_rate)
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
index ebf7deb63d136..a034288ad75d4 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
@@ -30,7 +30,6 @@
enum dp_panel_mode dp_get_panel_mode(struct dc_link *link);
void dp_set_panel_mode(struct dc_link *link, enum dp_panel_mode panel_mode);
bool set_default_brightness_aux(struct dc_link *link);
-bool set_cached_brightness_aux(struct dc_link *link);
void edp_panel_backlight_power_on(struct dc_link *link, bool wait_for_hpd);
int edp_get_backlight_level(const struct dc_link *link);
bool edp_get_backlight_level_nits(struct dc_link *link,
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 130/134] drm/amd/display: Fix MPCC 1DLUT programming
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (128 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 129/134] drm/amd/display: Simplify brightness initialization Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 131/134] vfio/pds: Fix mutex lock->magic != lock warning Greg Kroah-Hartman
` (16 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Krunoslav Kovac, Hamza Mahfooz,
Ilya Bakoulin, Alex Deucher, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilya Bakoulin <ilya.bakoulin@amd.com>
[ Upstream commit 6f395cebdd8927fbffdc3a55a14fcacf93634359 ]
[Why]
Wrong function is used to translate LUT values to HW format, leading to
visible artifacting in some cases.
[How]
Use the correct cm3_helper function.
Cc: stable@vger.kernel.org # 6.1+
Reviewed-by: Krunoslav Kovac <krunoslav.kovac@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Ilya Bakoulin <ilya.bakoulin@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c
index c9140b50c3454..650e1598bddcb 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c
@@ -486,8 +486,7 @@ bool dcn32_set_mcm_luts(
if (plane_state->blend_tf->type == TF_TYPE_HWPWL)
lut_params = &plane_state->blend_tf->pwl;
else if (plane_state->blend_tf->type == TF_TYPE_DISTRIBUTED_POINTS) {
- cm_helper_translate_curve_to_hw_format(plane_state->ctx,
- plane_state->blend_tf,
+ cm3_helper_translate_curve_to_hw_format(plane_state->blend_tf,
&dpp_base->regamma_params, false);
lut_params = &dpp_base->regamma_params;
}
@@ -501,8 +500,7 @@ bool dcn32_set_mcm_luts(
else if (plane_state->in_shaper_func->type == TF_TYPE_DISTRIBUTED_POINTS) {
// TODO: dpp_base replace
ASSERT(false);
- cm_helper_translate_curve_to_hw_format(plane_state->ctx,
- plane_state->in_shaper_func,
+ cm3_helper_translate_curve_to_hw_format(plane_state->in_shaper_func,
&dpp_base->shaper_params, true);
lut_params = &dpp_base->shaper_params;
}
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 131/134] vfio/pds: Fix mutex lock->magic != lock warning
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (129 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 130/134] drm/amd/display: Fix MPCC 1DLUT programming Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 132/134] vfio/pds: Fix possible sleep while in atomic context Greg Kroah-Hartman
` (15 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Brett Creeley, Shannon Nelson,
Alex Williamson, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Brett Creeley <brett.creeley@amd.com>
[ Upstream commit 91aeb563bd4332e2988f8c0f64f125c4ecb5bcb3 ]
The following BUG was found when running on a kernel with
CONFIG_DEBUG_MUTEXES=y set:
DEBUG_LOCKS_WARN_ON(lock->magic != lock)
RIP: 0010:mutex_trylock+0x10d/0x120
Call Trace:
<TASK>
? __warn+0x85/0x140
? mutex_trylock+0x10d/0x120
? report_bug+0xfc/0x1e0
? handle_bug+0x3f/0x70
? exc_invalid_op+0x17/0x70
? asm_exc_invalid_op+0x1a/0x20
? mutex_trylock+0x10d/0x120
? mutex_trylock+0x10d/0x120
pds_vfio_reset+0x3a/0x60 [pds_vfio_pci]
pci_reset_function+0x4b/0x70
reset_store+0x5b/0xa0
kernfs_fop_write_iter+0x137/0x1d0
vfs_write+0x2de/0x410
ksys_write+0x5d/0xd0
do_syscall_64+0x3b/0x90
entry_SYSCALL_64_after_hwframe+0x6e/0xd8
As shown, lock->magic != lock. This is because
mutex_init(&pds_vfio->state_mutex) is called in the VFIO open path. So,
if a reset is initiated before the VFIO device is opened the mutex will
have never been initialized. Fix this by calling
mutex_init(&pds_vfio->state_mutex) in the VFIO init path.
Also, don't destroy the mutex on close because the device may
be re-opened, which would cause mutex to be uninitialized. Fix this by
implementing a driver specific vfio_device_ops.release callback that
destroys the mutex before calling vfio_pci_core_release_dev().
Fixes: bb500dbe2ac6 ("vfio/pds: Add VFIO live migration support")
Signed-off-by: Brett Creeley <brett.creeley@amd.com>
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
Link: https://lore.kernel.org/r/20231122192532.25791-2-brett.creeley@amd.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/vfio/pci/pds/vfio_dev.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/vfio/pci/pds/vfio_dev.c b/drivers/vfio/pci/pds/vfio_dev.c
index 649b18ee394bb..8c9fb87b13e1d 100644
--- a/drivers/vfio/pci/pds/vfio_dev.c
+++ b/drivers/vfio/pci/pds/vfio_dev.c
@@ -155,6 +155,8 @@ static int pds_vfio_init_device(struct vfio_device *vdev)
pds_vfio->vf_id = vf_id;
+ mutex_init(&pds_vfio->state_mutex);
+
vdev->migration_flags = VFIO_MIGRATION_STOP_COPY | VFIO_MIGRATION_P2P;
vdev->mig_ops = &pds_vfio_lm_ops;
vdev->log_ops = &pds_vfio_log_ops;
@@ -168,6 +170,16 @@ static int pds_vfio_init_device(struct vfio_device *vdev)
return 0;
}
+static void pds_vfio_release_device(struct vfio_device *vdev)
+{
+ struct pds_vfio_pci_device *pds_vfio =
+ container_of(vdev, struct pds_vfio_pci_device,
+ vfio_coredev.vdev);
+
+ mutex_destroy(&pds_vfio->state_mutex);
+ vfio_pci_core_release_dev(vdev);
+}
+
static int pds_vfio_open_device(struct vfio_device *vdev)
{
struct pds_vfio_pci_device *pds_vfio =
@@ -179,7 +191,6 @@ static int pds_vfio_open_device(struct vfio_device *vdev)
if (err)
return err;
- mutex_init(&pds_vfio->state_mutex);
pds_vfio->state = VFIO_DEVICE_STATE_RUNNING;
pds_vfio->deferred_reset_state = VFIO_DEVICE_STATE_RUNNING;
@@ -199,14 +210,13 @@ static void pds_vfio_close_device(struct vfio_device *vdev)
pds_vfio_put_save_file(pds_vfio);
pds_vfio_dirty_disable(pds_vfio, true);
mutex_unlock(&pds_vfio->state_mutex);
- mutex_destroy(&pds_vfio->state_mutex);
vfio_pci_core_close_device(vdev);
}
static const struct vfio_device_ops pds_vfio_ops = {
.name = "pds-vfio",
.init = pds_vfio_init_device,
- .release = vfio_pci_core_release_dev,
+ .release = pds_vfio_release_device,
.open_device = pds_vfio_open_device,
.close_device = pds_vfio_close_device,
.ioctl = vfio_pci_core_ioctl,
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 132/134] vfio/pds: Fix possible sleep while in atomic context
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (130 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 131/134] vfio/pds: Fix mutex lock->magic != lock warning Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 133/134] x86/xen: fix percpu vcpu_info allocation Greg Kroah-Hartman
` (14 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Dan Carpenter, Brett Creeley,
Shannon Nelson, Alex Williamson, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Brett Creeley <brett.creeley@amd.com>
[ Upstream commit ae2667cd8a479bb5abd6e24c12fcc9ef5bc06d75 ]
The driver could possibly sleep while in atomic context resulting
in the following call trace while CONFIG_DEBUG_ATOMIC_SLEEP=y is
set:
BUG: sleeping function called from invalid context at kernel/locking/mutex.c:283
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 2817, name: bash
preempt_count: 1, expected: 0
RCU nest depth: 0, expected: 0
Call Trace:
<TASK>
dump_stack_lvl+0x36/0x50
__might_resched+0x123/0x170
mutex_lock+0x1e/0x50
pds_vfio_put_lm_file+0x1e/0xa0 [pds_vfio_pci]
pds_vfio_put_save_file+0x19/0x30 [pds_vfio_pci]
pds_vfio_state_mutex_unlock+0x2e/0x80 [pds_vfio_pci]
pci_reset_function+0x4b/0x70
reset_store+0x5b/0xa0
kernfs_fop_write_iter+0x137/0x1d0
vfs_write+0x2de/0x410
ksys_write+0x5d/0xd0
do_syscall_64+0x3b/0x90
entry_SYSCALL_64_after_hwframe+0x6e/0xd8
This can happen if pds_vfio_put_restore_file() and/or
pds_vfio_put_save_file() grab the mutex_lock(&lm_file->lock)
while the spin_lock(&pds_vfio->reset_lock) is held, which can
happen during while calling pds_vfio_state_mutex_unlock().
Fix this by changing the reset_lock to reset_mutex so there are no such
conerns. Also, make sure to destroy the reset_mutex in the driver specific
VFIO device release function.
This also fixes a spinlock bad magic BUG that was caused
by not calling spinlock_init() on the reset_lock. Since, the lock is
being changed to a mutex, make sure to call mutex_init() on it.
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/kvm/1f9bc27b-3de9-4891-9687-ba2820c1b390@moroto.mountain/
Fixes: bb500dbe2ac6 ("vfio/pds: Add VFIO live migration support")
Signed-off-by: Brett Creeley <brett.creeley@amd.com>
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
Link: https://lore.kernel.org/r/20231122192532.25791-3-brett.creeley@amd.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/vfio/pci/pds/pci_drv.c | 4 ++--
drivers/vfio/pci/pds/vfio_dev.c | 14 ++++++++------
drivers/vfio/pci/pds/vfio_dev.h | 2 +-
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/vfio/pci/pds/pci_drv.c b/drivers/vfio/pci/pds/pci_drv.c
index ab4b5958e4131..caffa1a2cf591 100644
--- a/drivers/vfio/pci/pds/pci_drv.c
+++ b/drivers/vfio/pci/pds/pci_drv.c
@@ -55,10 +55,10 @@ static void pds_vfio_recovery(struct pds_vfio_pci_device *pds_vfio)
* VFIO_DEVICE_STATE_RUNNING.
*/
if (deferred_reset_needed) {
- spin_lock(&pds_vfio->reset_lock);
+ mutex_lock(&pds_vfio->reset_mutex);
pds_vfio->deferred_reset = true;
pds_vfio->deferred_reset_state = VFIO_DEVICE_STATE_ERROR;
- spin_unlock(&pds_vfio->reset_lock);
+ mutex_unlock(&pds_vfio->reset_mutex);
}
}
diff --git a/drivers/vfio/pci/pds/vfio_dev.c b/drivers/vfio/pci/pds/vfio_dev.c
index 8c9fb87b13e1d..4c351c59d05a9 100644
--- a/drivers/vfio/pci/pds/vfio_dev.c
+++ b/drivers/vfio/pci/pds/vfio_dev.c
@@ -29,7 +29,7 @@ struct pds_vfio_pci_device *pds_vfio_pci_drvdata(struct pci_dev *pdev)
void pds_vfio_state_mutex_unlock(struct pds_vfio_pci_device *pds_vfio)
{
again:
- spin_lock(&pds_vfio->reset_lock);
+ mutex_lock(&pds_vfio->reset_mutex);
if (pds_vfio->deferred_reset) {
pds_vfio->deferred_reset = false;
if (pds_vfio->state == VFIO_DEVICE_STATE_ERROR) {
@@ -39,23 +39,23 @@ void pds_vfio_state_mutex_unlock(struct pds_vfio_pci_device *pds_vfio)
}
pds_vfio->state = pds_vfio->deferred_reset_state;
pds_vfio->deferred_reset_state = VFIO_DEVICE_STATE_RUNNING;
- spin_unlock(&pds_vfio->reset_lock);
+ mutex_unlock(&pds_vfio->reset_mutex);
goto again;
}
mutex_unlock(&pds_vfio->state_mutex);
- spin_unlock(&pds_vfio->reset_lock);
+ mutex_unlock(&pds_vfio->reset_mutex);
}
void pds_vfio_reset(struct pds_vfio_pci_device *pds_vfio)
{
- spin_lock(&pds_vfio->reset_lock);
+ mutex_lock(&pds_vfio->reset_mutex);
pds_vfio->deferred_reset = true;
pds_vfio->deferred_reset_state = VFIO_DEVICE_STATE_RUNNING;
if (!mutex_trylock(&pds_vfio->state_mutex)) {
- spin_unlock(&pds_vfio->reset_lock);
+ mutex_unlock(&pds_vfio->reset_mutex);
return;
}
- spin_unlock(&pds_vfio->reset_lock);
+ mutex_unlock(&pds_vfio->reset_mutex);
pds_vfio_state_mutex_unlock(pds_vfio);
}
@@ -156,6 +156,7 @@ static int pds_vfio_init_device(struct vfio_device *vdev)
pds_vfio->vf_id = vf_id;
mutex_init(&pds_vfio->state_mutex);
+ mutex_init(&pds_vfio->reset_mutex);
vdev->migration_flags = VFIO_MIGRATION_STOP_COPY | VFIO_MIGRATION_P2P;
vdev->mig_ops = &pds_vfio_lm_ops;
@@ -177,6 +178,7 @@ static void pds_vfio_release_device(struct vfio_device *vdev)
vfio_coredev.vdev);
mutex_destroy(&pds_vfio->state_mutex);
+ mutex_destroy(&pds_vfio->reset_mutex);
vfio_pci_core_release_dev(vdev);
}
diff --git a/drivers/vfio/pci/pds/vfio_dev.h b/drivers/vfio/pci/pds/vfio_dev.h
index b8f2d667608f3..e7b01080a1ec3 100644
--- a/drivers/vfio/pci/pds/vfio_dev.h
+++ b/drivers/vfio/pci/pds/vfio_dev.h
@@ -18,7 +18,7 @@ struct pds_vfio_pci_device {
struct pds_vfio_dirty dirty;
struct mutex state_mutex; /* protect migration state */
enum vfio_device_mig_state state;
- spinlock_t reset_lock; /* protect reset_done flow */
+ struct mutex reset_mutex; /* protect reset_done flow */
u8 deferred_reset;
enum vfio_device_mig_state deferred_reset_state;
struct notifier_block nb;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 133/134] x86/xen: fix percpu vcpu_info allocation
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (131 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 132/134] vfio/pds: Fix possible sleep while in atomic context Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 134/134] vfio: Drop vfio_file_iommu_group() stub to fudge around a KVM wart Greg Kroah-Hartman
` (13 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Juergen Gross, Boris Ostrovsky,
Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <jgross@suse.com>
[ Upstream commit db2832309a82b9acc4b8cc33a1831d36507ec13e ]
Today the percpu struct vcpu_info is allocated via DEFINE_PER_CPU(),
meaning that it could cross a page boundary. In this case registering
it with the hypervisor will fail, resulting in a panic().
This can easily be fixed by using DEFINE_PER_CPU_ALIGNED() instead,
as struct vcpu_info is guaranteed to have a size of 64 bytes, matching
the cache line size of x86 64-bit processors (Xen doesn't support
32-bit processors).
Fixes: 5ead97c84fa7 ("xen: Core Xen implementation")
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.con>
Link: https://lore.kernel.org/r/20231124074852.25161-1-jgross@suse.com
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/x86/xen/enlighten.c | 6 +++++-
arch/x86/xen/xen-ops.h | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 0337392a31214..3c61bb98c10e2 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -33,9 +33,12 @@ EXPORT_SYMBOL_GPL(hypercall_page);
* and xen_vcpu_setup for details. By default it points to share_info->vcpu_info
* but during boot it is switched to point to xen_vcpu_info.
* The pointer is used in xen_evtchn_do_upcall to acknowledge pending events.
+ * Make sure that xen_vcpu_info doesn't cross a page boundary by making it
+ * cache-line aligned (the struct is guaranteed to have a size of 64 bytes,
+ * which matches the cache line size of 64-bit x86 processors).
*/
DEFINE_PER_CPU(struct vcpu_info *, xen_vcpu);
-DEFINE_PER_CPU(struct vcpu_info, xen_vcpu_info);
+DEFINE_PER_CPU_ALIGNED(struct vcpu_info, xen_vcpu_info);
/* Linux <-> Xen vCPU id mapping */
DEFINE_PER_CPU(uint32_t, xen_vcpu_id);
@@ -160,6 +163,7 @@ void xen_vcpu_setup(int cpu)
int err;
struct vcpu_info *vcpup;
+ BUILD_BUG_ON(sizeof(*vcpup) > SMP_CACHE_BYTES);
BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info);
/*
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
index 408a2aa66c692..a87ab36889e76 100644
--- a/arch/x86/xen/xen-ops.h
+++ b/arch/x86/xen/xen-ops.h
@@ -21,7 +21,7 @@ extern void *xen_initial_gdt;
struct trap_info;
void xen_copy_trap_info(struct trap_info *traps);
-DECLARE_PER_CPU(struct vcpu_info, xen_vcpu_info);
+DECLARE_PER_CPU_ALIGNED(struct vcpu_info, xen_vcpu_info);
DECLARE_PER_CPU(unsigned long, xen_cr3);
DECLARE_PER_CPU(unsigned long, xen_current_cr3);
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* [PATCH 6.6 134/134] vfio: Drop vfio_file_iommu_group() stub to fudge around a KVM wart
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (132 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 133/134] x86/xen: fix percpu vcpu_info allocation Greg Kroah-Hartman
@ 2023-12-05 3:16 ` Greg Kroah-Hartman
2023-12-05 11:10 ` [PATCH 6.6 000/134] 6.6.5-rc1 review Jon Hunter
` (12 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Greg Kroah-Hartman @ 2023-12-05 3:16 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, kernel test robot, Nick Desaulniers,
Jason Gunthorpe, Michael Ellerman, Sean Christopherson,
Alex Williamson, Sasha Levin
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sean Christopherson <seanjc@google.com>
[ Upstream commit 4ea95c04fa6b9043a1a301240996aeebe3cb28ec ]
Drop the vfio_file_iommu_group() stub and instead unconditionally declare
the function to fudge around a KVM wart where KVM tries to do symbol_get()
on vfio_file_iommu_group() (and other VFIO symbols) even if CONFIG_VFIO=n.
Ensuring the symbol is always declared fixes a PPC build error when
modules are also disabled, in which case symbol_get() simply points at the
address of the symbol (with some attributes shenanigans). Because KVM
does symbol_get() instead of directly depending on VFIO, the lack of a
fully defined symbol is not problematic (ugly, but "fine").
arch/powerpc/kvm/../../../virt/kvm/vfio.c:89:7:
error: attribute declaration must precede definition [-Werror,-Wignored-attributes]
fn = symbol_get(vfio_file_iommu_group);
^
include/linux/module.h:805:60: note: expanded from macro 'symbol_get'
#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak,visibility("hidden"))); &(x); })
^
include/linux/vfio.h:294:35: note: previous definition is here
static inline struct iommu_group *vfio_file_iommu_group(struct file *file)
^
arch/powerpc/kvm/../../../virt/kvm/vfio.c:89:7:
error: attribute declaration must precede definition [-Werror,-Wignored-attributes]
fn = symbol_get(vfio_file_iommu_group);
^
include/linux/module.h:805:65: note: expanded from macro 'symbol_get'
#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak,visibility("hidden"))); &(x); })
^
include/linux/vfio.h:294:35: note: previous definition is here
static inline struct iommu_group *vfio_file_iommu_group(struct file *file)
^
2 errors generated.
Although KVM is firmly in the wrong (there is zero reason for KVM to build
virt/kvm/vfio.c when VFIO is disabled), fudge around the error in VFIO as
the stub is unnecessary and doesn't serve its intended purpose (KVM is the
only external user of vfio_file_iommu_group()), and there is an in-flight
series to clean up the entire KVM<->VFIO interaction, i.e. fixing this in
KVM would result in more churn in the long run, and the stub needs to go
away regardless.
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202308251949.5IiaV0sz-lkp@intel.com
Closes: https://lore.kernel.org/oe-kbuild-all/202309030741.82aLACDG-lkp@intel.com
Closes: https://lore.kernel.org/oe-kbuild-all/202309110914.QLH0LU6L-lkp@intel.com
Link: https://lore.kernel.org/all/0-v1-08396538817d+13c5-vfio_kvm_kconfig_jgg@nvidia.com
Link: https://lore.kernel.org/all/20230916003118.2540661-1-seanjc@google.com
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Jason Gunthorpe <jgg@nvidia.com>
Tested-by: Michael Ellerman <mpe@ellerman.id.au>
Fixes: c1cce6d079b8 ("vfio: Compile vfio_group infrastructure optionally")
Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/20231130001000.543240-1-seanjc@google.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
include/linux/vfio.h | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/include/linux/vfio.h b/include/linux/vfio.h
index 454e9295970c4..a65b2513f8cdc 100644
--- a/include/linux/vfio.h
+++ b/include/linux/vfio.h
@@ -289,16 +289,12 @@ void vfio_combine_iova_ranges(struct rb_root_cached *root, u32 cur_nodes,
/*
* External user API
*/
-#if IS_ENABLED(CONFIG_VFIO_GROUP)
struct iommu_group *vfio_file_iommu_group(struct file *file);
+
+#if IS_ENABLED(CONFIG_VFIO_GROUP)
bool vfio_file_is_group(struct file *file);
bool vfio_file_has_dev(struct file *file, struct vfio_device *device);
#else
-static inline struct iommu_group *vfio_file_iommu_group(struct file *file)
-{
- return NULL;
-}
-
static inline bool vfio_file_is_group(struct file *file)
{
return false;
--
2.42.0
^ permalink raw reply related [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (133 preceding siblings ...)
2023-12-05 3:16 ` [PATCH 6.6 134/134] vfio: Drop vfio_file_iommu_group() stub to fudge around a KVM wart Greg Kroah-Hartman
@ 2023-12-05 11:10 ` Jon Hunter
2023-12-05 12:33 ` Takeshi Ogasawara
` (11 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Jon Hunter @ 2023-12-05 11:10 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Greg Kroah-Hartman, patches, linux-kernel, torvalds, akpm, linux,
shuah, patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, linux-tegra,
stable
On Tue, 05 Dec 2023 12:14:32 +0900, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
All tests passing for Tegra ...
Test results for stable-v6.6:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
116 tests: 116 pass, 0 fail
Linux version: 6.6.5-rc1-gb0b05ccdd77d
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: Jon Hunter <jonathanh@nvidia.com>
Jon
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (134 preceding siblings ...)
2023-12-05 11:10 ` [PATCH 6.6 000/134] 6.6.5-rc1 review Jon Hunter
@ 2023-12-05 12:33 ` Takeshi Ogasawara
2023-12-05 13:25 ` Bagas Sanjaya
` (10 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Takeshi Ogasawara @ 2023-12-05 12: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, allen.lkml
Hi Greg
On Tue, Dec 5, 2023 at 12:21 PM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
6.6.5-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] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (135 preceding siblings ...)
2023-12-05 12:33 ` Takeshi Ogasawara
@ 2023-12-05 13:25 ` Bagas Sanjaya
2023-12-05 15:49 ` Harshit Mogalapalli
` (9 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Bagas Sanjaya @ 2023-12-05 13:25 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, allen.lkml
[-- Attachment #1: Type: text/plain, Size: 557 bytes --]
On Tue, Dec 05, 2023 at 12:14:32PM +0900, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 the kernel 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] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (136 preceding siblings ...)
2023-12-05 13:25 ` Bagas Sanjaya
@ 2023-12-05 15:49 ` Harshit Mogalapalli
2023-12-05 15:53 ` Naresh Kamboju
` (8 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Harshit Mogalapalli @ 2023-12-05 15:49 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, allen.lkml, Vegard Nossum, Darren Kenny
Hi Greg,
On 05/12/23 8:44 am, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +0000.
> Anything received after that time might be too late.
>
Built and boot tested on x86_64 and aarch64.
Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Thanks,
Harshit
> The whole patch series can be found in one patch at:
> https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (137 preceding siblings ...)
2023-12-05 15:49 ` Harshit Mogalapalli
@ 2023-12-05 15:53 ` Naresh Kamboju
2023-12-05 16:13 ` Arnd Bergmann
2023-12-05 16:55 ` Guenter Roeck
` (7 subsequent siblings)
146 siblings, 1 reply; 154+ messages in thread
From: Naresh Kamboju @ 2023-12-05 15:53 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arnd Bergmann, Johannes Berg
Cc: stable, patches, linux-kernel, torvalds, akpm, linux, shuah,
patches, lkft-triage, pavel, jonathanh, f.fainelli,
sudipm.mukherjee, srw, rwarsow, conor, allen.lkml, Netdev,
linux-wireless
On Tue, 5 Dec 2023 at 08:51, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
The x86 allmodconfig with gcc-8 failed but passed with gcc-13.
x86_64: gcc-8-allmodconfig: FAILED
x86_64: gcc-13-allmodconfig: PASS
Build error:
------------
In function 'nl80211_set_cqm_rssi.isra.44',
inlined from 'nl80211_set_cqm' at net/wireless/nl80211.c:12994:10:
include/linux/fortify-string.h:57:29: error: '__builtin_memcpy'
pointer overflow between offset 36 and size [-1, 9223372036854775807]
[-Werror=array-bounds]
#define __underlying_memcpy __builtin_memcpy
^
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
Suspecting commit:
-------------
wifi: cfg80211: fix CQM for non-range use
commit 7e7efdda6adb385fbdfd6f819d76bc68c923c394 upstream.
Links:
- https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.4-135-gb0b05ccdd77d/testrun/21509070/suite/build/test/gcc-8-allmodconfig/log
- https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.4-135-gb0b05ccdd77d/testrun/21509070/suite/build/test/gcc-8-allmodconfig/history/
- https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.4-135-gb0b05ccdd77d/testrun/21509070/suite/build/test/gcc-8-allmodconfig/details/
--
Linaro LKFT
https://lkft.linaro.org
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 15:53 ` Naresh Kamboju
@ 2023-12-05 16:13 ` Arnd Bergmann
2023-12-05 16:16 ` Johannes Berg
0 siblings, 1 reply; 154+ messages in thread
From: Arnd Bergmann @ 2023-12-05 16:13 UTC (permalink / raw)
To: Naresh Kamboju, Greg Kroah-Hartman, Johannes Berg
Cc: stable, patches, linux-kernel, Linus Torvalds, Andrew Morton,
Guenter Roeck, shuah, patches, lkft-triage, Pavel Machek,
Jon Hunter, Florian Fainelli, Sudip Mukherjee, srw, rwarsow,
Conor Dooley, allen.lkml, Netdev, linux-wireless
On Tue, Dec 5, 2023, at 16:53, Naresh Kamboju wrote:
> On Tue, 5 Dec 2023 at 08:51, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
>>
>> This is the start of the stable review cycle for the 6.6.5 release.
>> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
>> and the diffstat can be found below.
>>
>
> The x86 allmodconfig with gcc-8 failed but passed with gcc-13.
>
> x86_64: gcc-8-allmodconfig: FAILED
> x86_64: gcc-13-allmodconfig: PASS
Note that at the moment gcc-13 (also 11 and 12) turns off the
-Warray-bounds checks because of excessive false positives,
see 0da6e5fd6c37 ("gcc: disable '-Warray-bounds' for gcc-13 too").
I have not yet figured out what gcc-8 complains about,
but I assume that gcc-13 would find the same thing with
the check enabled.
Arnd
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 16:13 ` Arnd Bergmann
@ 2023-12-05 16:16 ` Johannes Berg
0 siblings, 0 replies; 154+ messages in thread
From: Johannes Berg @ 2023-12-05 16:16 UTC (permalink / raw)
To: Arnd Bergmann, Naresh Kamboju, Greg Kroah-Hartman
Cc: stable, patches, linux-kernel, Linus Torvalds, Andrew Morton,
Guenter Roeck, shuah, patches, lkft-triage, Pavel Machek,
Jon Hunter, Florian Fainelli, Sudip Mukherjee, srw, rwarsow,
Conor Dooley, allen.lkml, Netdev, linux-wireless
On Tue, 2023-12-05 at 17:13 +0100, Arnd Bergmann wrote:
>
> I have not yet figured out what gcc-8 complains about,
> but I assume that gcc-13 would find the same thing with
> the check enabled.
>
See this thread:
https://lore.kernel.org/r/202311301016.84D0010@keescook
johannes
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
@ 2023-12-05 16:42 Ronald Warsow
0 siblings, 0 replies; 154+ messages in thread
From: Ronald Warsow @ 2023-12-05 16:42 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable; +Cc: linux-kernel
Hi Greg
6.6.5-rc1
compiles, boots and runs here on x86_64
(Intel Rocket Lake: i5-11400)
Thanks
Tested-by: Ronald Warsow <rwarsow@gmx.de>
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (138 preceding siblings ...)
2023-12-05 15:53 ` Naresh Kamboju
@ 2023-12-05 16:55 ` Guenter Roeck
2023-12-05 17:10 ` SeongJae Park
` (6 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Guenter Roeck @ 2023-12-05 16:55 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, allen.lkml
On Tue, Dec 05, 2023 at 12:14:32PM +0900, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +0000.
> Anything received after that time might be too late.
>
Build results:
total: 157 pass: 157 fail: 0
Qemu test results:
total: 538 pass: 538 fail: 0
Tested-by: Guenter Roeck <linux@roeck-us.net>
Guenter
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (139 preceding siblings ...)
2023-12-05 16:55 ` Guenter Roeck
@ 2023-12-05 17:10 ` SeongJae Park
2023-12-05 17:41 ` Naresh Kamboju
` (5 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: SeongJae Park @ 2023-12-05 17:10 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, allen.lkml, damon,
SeongJae Park
Hello,
On 2023-12-05T12:14:32+09:00 Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.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] b0b05ccdd77d ("Linux 6.6.5-rc1")
Thanks,
SJ
[...]
---
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: debugfs_rm_non_contexts.sh
ok 8 selftests: damon: sysfs.sh
ok 9 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 10 selftests: damon: reclaim.sh
ok 11 selftests: damon: lru_sort.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_arm64.sh
ok 12 selftests: damon-tests: build_i386_idle_flag.sh
ok 13 selftests: damon-tests: build_i386_highpte.sh
ok 14 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (140 preceding siblings ...)
2023-12-05 17:10 ` SeongJae Park
@ 2023-12-05 17:41 ` Naresh Kamboju
2023-12-05 18:28 ` Ron Economos
` (4 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Naresh Kamboju @ 2023-12-05 17:41 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, allen.lkml
On Tue, 5 Dec 2023 at 08:51, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
NOTE:
x86_64: gcc-8-allmodconfig: FAILED
- https://lore.kernel.org/stable/CA+G9fYuL_-Q67t+Y7ST5taYv1XkkoJegH2zBvw_ZUOhF9QRiOg@mail.gmail.com/
- https://lore.kernel.org/r/202311301016.84D0010@keescook
## Build
* kernel: 6.6.5-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-6.6.y
* git commit: b0b05ccdd77dde3d5f44e6849679a2af2f3af0e2
* git describe: v6.6.4-135-gb0b05ccdd77d
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.4-135-gb0b05ccdd77d
## Test Regressions (compared to v6.6.4)
## Metric Regressions (compared to v6.6.4)
## Test Fixes (compared to v6.6.4)
## Metric Fixes (compared to v6.6.4)
## Test result summary
total: 144804, pass: 124361, fail: 2511, skip: 17803, xfail: 129
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 145 total, 124 passed, 21 failed
* arm64: 52 total, 44 passed, 8 failed
* i386: 41 total, 40 passed, 1 failed
* mips: 26 total, 26 passed, 0 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 36 total, 36 passed, 0 failed
* riscv: 25 total, 25 passed, 0 failed
* s390: 13 total, 13 passed, 0 failed
* sh: 10 total, 10 passed, 0 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-livepatch
* 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-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-user_events
* kselftest-vDSO
* kselftest-vm
* kselftest-watchdog
* kselftest-x86
* kselftest-zram
* kunit
* libgpiod
* libhugetlbfs
* 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
--
Linaro LKFT
https://lkft.linaro.org
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (141 preceding siblings ...)
2023-12-05 17:41 ` Naresh Kamboju
@ 2023-12-05 18:28 ` Ron Economos
2023-12-05 18:46 ` Florian Fainelli
` (3 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Ron Economos @ 2023-12-05 18:28 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, allen.lkml
On 12/4/23 7:14 PM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.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] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (142 preceding siblings ...)
2023-12-05 18:28 ` Ron Economos
@ 2023-12-05 18:46 ` Florian Fainelli
2023-12-06 1:37 ` Shuah Khan
` (2 subsequent siblings)
146 siblings, 0 replies; 154+ messages in thread
From: Florian Fainelli @ 2023-12-05 18:46 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, allen.lkml
On 12/4/23 19:14, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on
BMIPS_GENERIC:
Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
--
Florian
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (143 preceding siblings ...)
2023-12-05 18:46 ` Florian Fainelli
@ 2023-12-06 1:37 ` Shuah Khan
2023-12-06 21:42 ` Ricardo B. Marliere
2023-12-06 22:34 ` Justin Forbes
146 siblings, 0 replies; 154+ messages in thread
From: Shuah Khan @ 2023-12-06 1: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, allen.lkml, Shuah Khan
On 12/4/23 20:14, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.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] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (144 preceding siblings ...)
2023-12-06 1:37 ` Shuah Khan
@ 2023-12-06 21:42 ` Ricardo B. Marliere
2023-12-06 22:34 ` Justin Forbes
146 siblings, 0 replies; 154+ messages in thread
From: Ricardo B. Marliere @ 2023-12-06 21:42 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, allen.lkml
On 23/12/05 12:14PM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
No regressions on my system,
[ 0.000000] Linux version 6.6.5-rc1+ (rbmarliere@debian) (Debian clang version 16.0.6 (19), GNU ld (GNU Binutils for Debian) 2.41) #10 SMP PREEMPT_DYNAMIC Wed Dec 6 18:35:57 -03 2023
Tested-by: Ricardo B. Marliere <ricardo@marliere.net>
Thanks!
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 000/134] 6.6.5-rc1 review
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
` (145 preceding siblings ...)
2023-12-06 21:42 ` Ricardo B. Marliere
@ 2023-12-06 22:34 ` Justin Forbes
146 siblings, 0 replies; 154+ messages in thread
From: Justin Forbes @ 2023-12-06 22:34 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, allen.lkml
On Tue, Dec 05, 2023 at 12:14:32PM +0900, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 6.6.5 release.
> There are 134 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 Thu, 07 Dec 2023 03:14:57 +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.6.5-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.6.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h
Tested rc1 against the Fedora build system (aarch64, ppc64le, s390x,
x86_64), and boot tested x86_64. No regressions noted.
Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use
2023-12-05 3:15 ` [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use Greg Kroah-Hartman
@ 2023-12-09 10:05 ` Sven Joachim
2023-12-10 9:32 ` Jaron Kent-Dobias
0 siblings, 1 reply; 154+ messages in thread
From: Sven Joachim @ 2023-12-09 10:05 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: stable, patches, Johannes Berg
On 2023-12-05 12:15 +0900, Greg Kroah-Hartman wrote:
> 6.6-stable review patch. If anyone has any objections, please let me know.
>
> From: Johannes Berg <johannes.berg@intel.com>
>
> commit 7e7efdda6adb385fbdfd6f819d76bc68c923c394 upstream.
>
> My prior race fix here broke CQM when ranges aren't used, as
> the reporting worker now requires the cqm_config to be set in
> the wdev, but isn't set when there's no range configured.
>
> Rather than continuing to special-case the range version, set
> the cqm_config always and configure accordingly, also tracking
> if range was used or not to be able to clear the configuration
> appropriately with the same API, which was actually not right
> if both were implemented by a driver for some reason, as is
> the case with mac80211 (though there the implementations are
> equivalent so it doesn't matter.)
>
> Also, the original multiple-RSSI commit lost checking for the
> callback, so might have potentially crashed if a driver had
> neither implementation, and userspace tried to use it despite
> not being advertised as supported.
>
> Cc: stable@vger.kernel.org
> Fixes: 4a4b8169501b ("cfg80211: Accept multiple RSSI thresholds for CQM")
> Fixes: 37c20b2effe9 ("wifi: cfg80211: fix cqm_config access race")
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
> net/wireless/core.h | 1
> net/wireless/nl80211.c | 50 ++++++++++++++++++++++++++++++-------------------
> 2 files changed, 32 insertions(+), 19 deletions(-)
>
> --- a/net/wireless/core.h
> +++ b/net/wireless/core.h
> @@ -299,6 +299,7 @@ struct cfg80211_cqm_config {
> u32 rssi_hyst;
> s32 last_rssi_event_value;
> enum nl80211_cqm_rssi_threshold_event last_rssi_event_type;
> + bool use_range_api;
> int n_rssi_thresholds;
> s32 rssi_thresholds[] __counted_by(n_rssi_thresholds);
> };
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -12824,10 +12824,6 @@ static int cfg80211_cqm_rssi_update(stru
> int i, n, low_index;
> int err;
>
> - /* RSSI reporting disabled? */
> - if (!cqm_config)
> - return rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
> -
> /*
> * Obtain current RSSI value if possible, if not and no RSSI threshold
> * event has been received yet, we should receive an event after a
> @@ -12902,18 +12898,6 @@ static int nl80211_set_cqm_rssi(struct g
> wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)
> return -EOPNOTSUPP;
>
> - if (n_thresholds <= 1 && rdev->ops->set_cqm_rssi_config) {
> - if (n_thresholds == 0 || thresholds[0] == 0) /* Disabling */
> - return rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
> -
> - return rdev_set_cqm_rssi_config(rdev, dev,
> - thresholds[0], hysteresis);
> - }
> -
> - if (!wiphy_ext_feature_isset(&rdev->wiphy,
> - NL80211_EXT_FEATURE_CQM_RSSI_LIST))
> - return -EOPNOTSUPP;
> -
> if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */
> n_thresholds = 0;
>
> @@ -12921,6 +12905,20 @@ static int nl80211_set_cqm_rssi(struct g
> old = rcu_dereference_protected(wdev->cqm_config,
> lockdep_is_held(&wdev->mtx));
>
> + /* if already disabled just succeed */
> + if (!n_thresholds && !old)
> + return 0;
> +
> + if (n_thresholds > 1) {
> + if (!wiphy_ext_feature_isset(&rdev->wiphy,
> + NL80211_EXT_FEATURE_CQM_RSSI_LIST) ||
> + !rdev->ops->set_cqm_rssi_range_config)
> + return -EOPNOTSUPP;
> + } else {
> + if (!rdev->ops->set_cqm_rssi_config)
> + return -EOPNOTSUPP;
> + }
> +
> if (n_thresholds) {
> cqm_config = kzalloc(struct_size(cqm_config, rssi_thresholds,
> n_thresholds),
> @@ -12935,13 +12933,26 @@ static int nl80211_set_cqm_rssi(struct g
> memcpy(cqm_config->rssi_thresholds, thresholds,
> flex_array_size(cqm_config, rssi_thresholds,
> n_thresholds));
> + cqm_config->use_range_api = n_thresholds > 1 ||
> + !rdev->ops->set_cqm_rssi_config;
>
> rcu_assign_pointer(wdev->cqm_config, cqm_config);
> +
> + if (cqm_config->use_range_api)
> + err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config);
> + else
> + err = rdev_set_cqm_rssi_config(rdev, dev,
> + thresholds[0],
> + hysteresis);
> } else {
> RCU_INIT_POINTER(wdev->cqm_config, NULL);
> + /* if enabled as range also disable via range */
> + if (old->use_range_api)
> + err = rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
> + else
> + err = rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
> }
>
> - err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config);
> if (err) {
> rcu_assign_pointer(wdev->cqm_config, old);
> kfree_rcu(cqm_config, rcu_head);
> @@ -19131,10 +19142,11 @@ void cfg80211_cqm_rssi_notify_work(struc
> wdev_lock(wdev);
> cqm_config = rcu_dereference_protected(wdev->cqm_config,
> lockdep_is_held(&wdev->mtx));
> - if (!wdev->cqm_config)
> + if (!cqm_config)
> goto unlock;
>
> - cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config);
> + if (cqm_config->use_range_api)
> + cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config);
>
> rssi_level = cqm_config->last_rssi_event_value;
> rssi_event = cqm_config->last_rssi_event_type;
After upgrading to 6.6.5, I noticed that my laptop would hang on
shutdown and bisected that problem to this patch. Reverting it makes
the problem go away.
More specifically, NetworkManager and wpa_supplicant processes are hung.
This can also be triggered by "systemctl stop NetworkManager.service"
which does not complete and brings these two processes into a state of
uninterruptible sleep.
I also tried 6.1 and mainline, and could reproduce the hang in 6.1.66
but _not_ in 6.7-rc4, so maybe some patch from Linus' tree needs to be
applied to the stable branches.
Cheers,
Sven
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use
2023-12-09 10:05 ` Sven Joachim
@ 2023-12-10 9:32 ` Jaron Kent-Dobias
2023-12-10 10:25 ` Linux regression tracking (Thorsten Leemhuis)
0 siblings, 1 reply; 154+ messages in thread
From: Jaron Kent-Dobias @ 2023-12-10 9:32 UTC (permalink / raw)
To: Sven Joachim; +Cc: Greg Kroah-Hartman, stable, patches, Johannes Berg
On Saturday, 9 December 2023 at 11:05 (+0100), Sven Joachim wrote:
>On 2023-12-05 12:15 +0900, Greg Kroah-Hartman wrote:
>
>> 6.6-stable review patch. If anyone has any objections, please let me know.
>>
>> From: Johannes Berg <johannes.berg@intel.com>
>>
>> commit 7e7efdda6adb385fbdfd6f819d76bc68c923c394 upstream.
>>
>> My prior race fix here broke CQM when ranges aren't used, as
>> the reporting worker now requires the cqm_config to be set in
>> the wdev, but isn't set when there's no range configured.
>>
>> Rather than continuing to special-case the range version, set
>> the cqm_config always and configure accordingly, also tracking
>> if range was used or not to be able to clear the configuration
>> appropriately with the same API, which was actually not right
>> if both were implemented by a driver for some reason, as is
>> the case with mac80211 (though there the implementations are
>> equivalent so it doesn't matter.)
>>
>> Also, the original multiple-RSSI commit lost checking for the
>> callback, so might have potentially crashed if a driver had
>> neither implementation, and userspace tried to use it despite
>> not being advertised as supported.
>>
>> Cc: stable@vger.kernel.org
>> Fixes: 4a4b8169501b ("cfg80211: Accept multiple RSSI thresholds for CQM")
>> Fixes: 37c20b2effe9 ("wifi: cfg80211: fix cqm_config access race")
>> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
>> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> ---
>> net/wireless/core.h | 1
>> net/wireless/nl80211.c | 50 ++++++++++++++++++++++++++++++-------------------
>> 2 files changed, 32 insertions(+), 19 deletions(-)
>>
>> --- a/net/wireless/core.h
>> +++ b/net/wireless/core.h
>> @@ -299,6 +299,7 @@ struct cfg80211_cqm_config {
>> u32 rssi_hyst;
>> s32 last_rssi_event_value;
>> enum nl80211_cqm_rssi_threshold_event last_rssi_event_type;
>> + bool use_range_api;
>> int n_rssi_thresholds;
>> s32 rssi_thresholds[] __counted_by(n_rssi_thresholds);
>> };
>> --- a/net/wireless/nl80211.c
>> +++ b/net/wireless/nl80211.c
>> @@ -12824,10 +12824,6 @@ static int cfg80211_cqm_rssi_update(stru
>> int i, n, low_index;
>> int err;
>>
>> - /* RSSI reporting disabled? */
>> - if (!cqm_config)
>> - return rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
>> -
>> /*
>> * Obtain current RSSI value if possible, if not and no RSSI threshold
>> * event has been received yet, we should receive an event after a
>> @@ -12902,18 +12898,6 @@ static int nl80211_set_cqm_rssi(struct g
>> wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)
>> return -EOPNOTSUPP;
>>
>> - if (n_thresholds <= 1 && rdev->ops->set_cqm_rssi_config) {
>> - if (n_thresholds == 0 || thresholds[0] == 0) /* Disabling */
>> - return rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
>> -
>> - return rdev_set_cqm_rssi_config(rdev, dev,
>> - thresholds[0], hysteresis);
>> - }
>> -
>> - if (!wiphy_ext_feature_isset(&rdev->wiphy,
>> - NL80211_EXT_FEATURE_CQM_RSSI_LIST))
>> - return -EOPNOTSUPP;
>> -
>> if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */
>> n_thresholds = 0;
>>
>> @@ -12921,6 +12905,20 @@ static int nl80211_set_cqm_rssi(struct g
>> old = rcu_dereference_protected(wdev->cqm_config,
>> lockdep_is_held(&wdev->mtx));
>>
>> + /* if already disabled just succeed */
>> + if (!n_thresholds && !old)
>> + return 0;
>> +
>> + if (n_thresholds > 1) {
>> + if (!wiphy_ext_feature_isset(&rdev->wiphy,
>> + NL80211_EXT_FEATURE_CQM_RSSI_LIST) ||
>> + !rdev->ops->set_cqm_rssi_range_config)
>> + return -EOPNOTSUPP;
>> + } else {
>> + if (!rdev->ops->set_cqm_rssi_config)
>> + return -EOPNOTSUPP;
>> + }
>> +
>> if (n_thresholds) {
>> cqm_config = kzalloc(struct_size(cqm_config, rssi_thresholds,
>> n_thresholds),
>> @@ -12935,13 +12933,26 @@ static int nl80211_set_cqm_rssi(struct g
>> memcpy(cqm_config->rssi_thresholds, thresholds,
>> flex_array_size(cqm_config, rssi_thresholds,
>> n_thresholds));
>> + cqm_config->use_range_api = n_thresholds > 1 ||
>> + !rdev->ops->set_cqm_rssi_config;
>>
>> rcu_assign_pointer(wdev->cqm_config, cqm_config);
>> +
>> + if (cqm_config->use_range_api)
>> + err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config);
>> + else
>> + err = rdev_set_cqm_rssi_config(rdev, dev,
>> + thresholds[0],
>> + hysteresis);
>> } else {
>> RCU_INIT_POINTER(wdev->cqm_config, NULL);
>> + /* if enabled as range also disable via range */
>> + if (old->use_range_api)
>> + err = rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
>> + else
>> + err = rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
>> }
>>
>> - err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config);
>> if (err) {
>> rcu_assign_pointer(wdev->cqm_config, old);
>> kfree_rcu(cqm_config, rcu_head);
>> @@ -19131,10 +19142,11 @@ void cfg80211_cqm_rssi_notify_work(struc
>> wdev_lock(wdev);
>> cqm_config = rcu_dereference_protected(wdev->cqm_config,
>> lockdep_is_held(&wdev->mtx));
>> - if (!wdev->cqm_config)
>> + if (!cqm_config)
>> goto unlock;
>>
>> - cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config);
>> + if (cqm_config->use_range_api)
>> + cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config);
>>
>> rssi_level = cqm_config->last_rssi_event_value;
>> rssi_event = cqm_config->last_rssi_event_type;
>
>After upgrading to 6.6.5, I noticed that my laptop would hang on
>shutdown and bisected that problem to this patch. Reverting it makes
>the problem go away.
>
>More specifically, NetworkManager and wpa_supplicant processes are hung.
>This can also be triggered by "systemctl stop NetworkManager.service"
>which does not complete and brings these two processes into a state of
>uninterruptible sleep.
I have a similar problem that I also traced to this commit. When I use
6.6.5 with iwd and the proprietary broadcom-wl driver, iwd deadlocks
when trying to associate with an access point, and eventually every
process that tries to query network information (ip, systemd, etc)
likewise deadlocks.
>I also tried 6.1 and mainline, and could reproduce the hang in 6.1.66
>but _not_ in 6.7-rc4, so maybe some patch from Linus' tree needs to be
>applied to the stable branches.
The problem goes away when I revert this commit on top of 6.6.5. I
haven't tried Linus' tree or the older stable branches.
Best,
Jaron
^ permalink raw reply [flat|nested] 154+ messages in thread
* Re: [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use
2023-12-10 9:32 ` Jaron Kent-Dobias
@ 2023-12-10 10:25 ` Linux regression tracking (Thorsten Leemhuis)
0 siblings, 0 replies; 154+ messages in thread
From: Linux regression tracking (Thorsten Leemhuis) @ 2023-12-10 10:25 UTC (permalink / raw)
To: Sven Joachim, Jaron Kent-Dobias
Cc: Greg Kroah-Hartman, stable, patches, Bagas Sanjaya, Johannes Berg
On 10.12.23 10:32, Jaron Kent-Dobias wrote:
> On Saturday, 9 December 2023 at 11:05 (+0100), Sven Joachim wrote:
>> On 2023-12-05 12:15 +0900, Greg Kroah-Hartman wrote:
>
>>> 6.6-stable review patch. If anyone has any objections, please let me
>>> know.
>>>
>>> From: Johannes Berg <johannes.berg@intel.com>
>>>
>>> commit 7e7efdda6adb385fbdfd6f819d76bc68c923c394 upstream.
>>>
>>> My prior race fix here broke CQM when ranges aren't used, as
>>> the reporting worker now requires the cqm_config to be set in
>>> the wdev, but isn't set when there's no range configured.> [...]
>> After upgrading to 6.6.5, I noticed that my laptop would hang on
>> shutdown and bisected that problem to this patch. Reverting it makes
>> the problem go away.
>>
>> More specifically, NetworkManager and wpa_supplicant processes are hung.
>> This can also be triggered by "systemctl stop NetworkManager.service"
>> which does not complete and brings these two processes into a state of
>> uninterruptible sleep.
>
> I have a similar problem that I also traced to this commit.
> [...]
TWIMC, there is another report about wifi problems bisected to above
commit here: https://bugzilla.kernel.org/show_bug.cgi?id=218247
Didn't CC the reporter here due to our bugzilla's privacy policy.
Ciao, Thorsten
P.S.: Thx for Bagas Sanjaya for bringing it to my attention, much
appreciated!
^ permalink raw reply [flat|nested] 154+ messages in thread
end of thread, other threads:[~2023-12-10 10:25 UTC | newest]
Thread overview: 154+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-05 3:14 [PATCH 6.6 000/134] 6.6.5-rc1 review Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 001/134] leds: class: Dont expose color sysfs entry Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 002/134] cifs: Fix FALLOC_FL_ZERO_RANGE by setting i_size if EOF moved Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 003/134] cifs: Fix FALLOC_FL_INSERT_RANGE by setting i_size after " Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 004/134] smb: client: fix missing mode bits for SMB symlinks Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 005/134] smb: client: report correct st_size for SMB and NFS symlinks Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 006/134] ksmbd: fix possible deadlock in smb2_open Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 007/134] pinctrl: avoid reload of p state in list iteration Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 008/134] firewire: core: fix possible memory leak in create_units() Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 009/134] mmc: sdhci-pci-gli: Disable LPM during initialization Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 010/134] mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 011/134] mmc: cqhci: Increase recovery halt timeout Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 012/134] mmc: cqhci: Warn of halt or task clear failure Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 013/134] mmc: cqhci: Fix task clearing in CQE error recovery Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 014/134] mmc: block: Retry commands " Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 015/134] mmc: block: Do not lose cache flush during " Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 016/134] mmc: block: Be sure to wait while busy in " Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 017/134] drm/i915: Also check for VGA converter in eDP probe Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 018/134] ALSA: hda: Disable power-save on KONTRON SinglePC Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 019/134] ALSA: hda/realtek: Headset Mic VREF to 100% Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 020/134] ALSA: hda/realtek: Add supported ALC257 for ChromeOS Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 021/134] net: libwx: fix memory leak on msix entry Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 022/134] dm-verity: align struct dm_verity_fec_io properly Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 023/134] scsi: Change SCSI device boolean fields to single bit flags Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 024/134] scsi: sd: Fix system start for ATA devices Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 025/134] scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 026/134] drm/amd: Enable PCIe PME from D3 Greg Kroah-Hartman
2023-12-05 3:14 ` [PATCH 6.6 027/134] drm/amdgpu: correct the amdgpu runtime dereference usage count Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 028/134] drm/amdgpu: Force order between a read and write to the same address Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 029/134] drm/amdgpu: fix memory overflow in the IB test Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 030/134] drm/amdgpu: Update EEPROM I2C address for smu v13_0_0 Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 031/134] drm/amd/display: Include udelay when waiting for INBOX0 ACK Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 032/134] drm/amd/display: Remove min_dst_y_next_start check for Z8 Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 033/134] drm/amd/display: Use DRAM speed from validation for dummy p-state Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 034/134] drm/amd/display: Update min Z8 residency time to 2100 for DCN314 Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 035/134] drm/amd/display: fix ABM disablement Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 036/134] drm/amd/display: force toggle rate wa for first link training for a retimer Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 037/134] dm verity: initialize fec io before freeing it Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 038/134] dm verity: dont perform FEC for failed readahead IO Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 039/134] nvme: check for valid nvme_identify_ns() before using it Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 040/134] r8169: fix deadlock on RTL8125 in jumbo mtu mode Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 041/134] ACPI: video: Use acpi_video_device for cooling-dev driver data Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 042/134] io_uring: dont allow discontig pages for IORING_SETUP_NO_MMAP Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 043/134] iommu/vt-d: Fix incorrect cache invalidation for mm notification Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 044/134] io_uring: free io_buffer_list entries via RCU Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 045/134] nouveau: find the smallest page allocation to cover a buffer alloc Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 046/134] powercap: DTPM: Fix unneeded conversions to micro-Watts Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 047/134] cpufreq/amd-pstate: Fix the return value of amd_pstate_fast_switch() Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 048/134] dma-buf: fix check in dma_resv_add_fence Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 049/134] io_uring: dont guard IORING_OFF_PBUF_RING with SETUP_NO_MMAP Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 050/134] iommu: Avoid more races around device probe Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 051/134] bcache: revert replacing IS_ERR_OR_NULL with IS_ERR Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 052/134] ext2: Fix ki_pos update for DIO buffered-io fallback case Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 053/134] iommu/vt-d: Add MTL to quirk list to skip TE disabling Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 054/134] KVM: PPC: Book3S HV: Fix KVM_RUN clobbering FP/VEC user registers Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 055/134] powerpc: Dont clobber f0/vs0 during fp|altivec register save Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 056/134] parisc: Mark ex_table entries 32-bit aligned in assembly.h Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 057/134] parisc: Mark ex_table entries 32-bit aligned in uaccess.h Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 058/134] parisc: Use natural CPU alignment for bug_table Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 059/134] parisc: Mark lock_aligned variables 16-byte aligned on SMP Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 060/134] parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 061/134] parisc: Mark jump_table naturally aligned Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 062/134] parisc: Ensure 32-bit alignment on parisc unwind section Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 063/134] parisc: Mark altinstructions read-only and 32-bit aligned Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 064/134] btrfs: add dmesg output for first mount and last unmount of a filesystem Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 065/134] btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod() Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 066/134] btrfs: fix off-by-one when checking chunk map includes logical address Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 067/134] btrfs: send: ensure send_fd is writable Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 068/134] btrfs: make error messages more clear when getting a chunk map Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 069/134] btrfs: free the allocated memory if btrfs_alloc_page_array() fails Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 070/134] btrfs: fix 64bit compat send ioctl arguments not initializing version member Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 071/134] io_uring: enable io_mem_alloc/free to be used in other parts Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 072/134] io_uring/kbuf: defer release of mapped buffer rings Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 073/134] io_uring/kbuf: recycle freed mapped buffer ring entries Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 074/134] wifi: cfg80211: fix CQM for non-range use Greg Kroah-Hartman
2023-12-09 10:05 ` Sven Joachim
2023-12-10 9:32 ` Jaron Kent-Dobias
2023-12-10 10:25 ` Linux regression tracking (Thorsten Leemhuis)
2023-12-05 3:15 ` [PATCH 6.6 075/134] pinctrl: stm32: Add check for devm_kcalloc Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 076/134] pinctrl: stm32: fix array read out of bound Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 077/134] media: v4l2-subdev: Fix a 64bit bug Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 078/134] netdevsim: Dont accept device bound programs Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 079/134] net: rswitch: Fix type of ret in rswitch_start_xmit() Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 080/134] net: rswitch: Fix return value " Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 081/134] net: rswitch: Fix missing dev_kfree_skb_any() in error path Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 082/134] ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 083/134] wifi: iwlwifi: mvm: fix an error code in iwl_mvm_mld_add_sta() Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 084/134] wifi: mac80211: do not pass AP_VLAN vif pointer to drivers during flush Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 085/134] net: dsa: mv88e6xxx: fix marvell 6350 switch probing Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 086/134] net: dsa: mv88e6xxx: fix marvell 6350 probe crash Greg Kroah-Hartman
2023-12-05 3:15 ` [PATCH 6.6 087/134] dpaa2-eth: increase the needed headroom to account for alignment Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 088/134] dpaa2-eth: recycle the RX buffer only after all processing done Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 089/134] bpf: Add missed allocation hint for bpf_mem_cache_alloc_flags() Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 090/134] uapi: propagate __struct_group() attributes to the container union Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 091/134] selftests/net: ipsec: fix constant out of range Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 092/134] selftests/net: fix a char signedness issue Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 093/134] selftests/net: unix: fix unused variable compiler warning Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 094/134] selftests/net: mptcp: fix uninitialized variable warnings Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 095/134] octeontx2-af: Fix possible buffer overflow Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 096/134] net: stmmac: xgmac: Disable FPE MMC interrupts Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 097/134] octeontx2-pf: Fix adding mbox work queue entry when num_vfs > 64 Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 098/134] octeontx2-pf: Restore TC ingress police rules when interface is up Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 099/134] neighbour: Fix __randomize_layout crash in struct neighbour Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 100/134] efi/unaccepted: Fix off-by-one when checking for overlapping ranges Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 101/134] r8169: prevent potential deadlock in rtl8169_close Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 102/134] ravb: Fix races between ravb_tx_timeout_work() and net related ops Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 103/134] ethtool: dont propagate EOPNOTSUPP from dumps Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 104/134] bpf, sockmap: af_unix stream sockets need to hold ref for pair sock Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 105/134] ice: Fix VF Reset paths when interface in a failed over aggregate Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 106/134] net: ravb: Check return value of reset_control_deassert() Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 107/134] net: ravb: Use pm_runtime_resume_and_get() Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 108/134] net: ravb: Make write access to CXR35 first before accessing other EMAC registers Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 109/134] net: ravb: Start TX queues after HW initialization succeeded Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 110/134] net: ravb: Stop DMA in case of failures on ravb_open() Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 111/134] net: ravb: Keep reverse order of operations in ravb_remove() Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 112/134] powerpc/pseries/iommu: enable_ddw incorrectly returns direct mapping for SR-IOV device Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 113/134] s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 114/134] drm/amd/display: Refactor edp power control Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 115/134] drm/amd/display: Remove power sequencing check Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 116/134] cpufreq: imx6q: Dont disable 792 Mhz OPP unnecessarily Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 117/134] iommu/vt-d: Omit devTLB invalidation requests when TES=0 Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 118/134] iommu/vt-d: Disable PCI ATS in legacy passthrough mode Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 119/134] iommu/vt-d: Make context clearing consistent with context mapping Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 120/134] drm/i915/gsc: Mark internal GSC engine with reserved uabi class Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 121/134] drm/panel: starry-2081101qfh032011-53g: Fine tune the panel power sequence Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 122/134] drm/panel: nt36523: fix return value check in nt36523_probe() Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 123/134] cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 124/134] cpufreq/amd-pstate: Only print supported EPP values for performance governor Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 125/134] drm/amd/pm: fix a memleak in aldebaran_tables_init Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 126/134] iommu: Fix printk arg in of_iommu_get_resv_regions() Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 127/134] drm/amd/display: refactor ILR to make it work Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 128/134] drm/amd/display: Reduce default backlight min from 5 nits to 1 nits Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 129/134] drm/amd/display: Simplify brightness initialization Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 130/134] drm/amd/display: Fix MPCC 1DLUT programming Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 131/134] vfio/pds: Fix mutex lock->magic != lock warning Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 132/134] vfio/pds: Fix possible sleep while in atomic context Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 133/134] x86/xen: fix percpu vcpu_info allocation Greg Kroah-Hartman
2023-12-05 3:16 ` [PATCH 6.6 134/134] vfio: Drop vfio_file_iommu_group() stub to fudge around a KVM wart Greg Kroah-Hartman
2023-12-05 11:10 ` [PATCH 6.6 000/134] 6.6.5-rc1 review Jon Hunter
2023-12-05 12:33 ` Takeshi Ogasawara
2023-12-05 13:25 ` Bagas Sanjaya
2023-12-05 15:49 ` Harshit Mogalapalli
2023-12-05 15:53 ` Naresh Kamboju
2023-12-05 16:13 ` Arnd Bergmann
2023-12-05 16:16 ` Johannes Berg
2023-12-05 16:55 ` Guenter Roeck
2023-12-05 17:10 ` SeongJae Park
2023-12-05 17:41 ` Naresh Kamboju
2023-12-05 18:28 ` Ron Economos
2023-12-05 18:46 ` Florian Fainelli
2023-12-06 1:37 ` Shuah Khan
2023-12-06 21:42 ` Ricardo B. Marliere
2023-12-06 22:34 ` Justin Forbes
-- strict thread matches above, loose matches on Subject: below --
2023-12-05 16:42 Ronald Warsow
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox