Commit Graph

2604 Commits

Author SHA1 Message Date
Tze-nan Wu d64d8b7dab FROMGIT: rcu: Fix delayed execution of hurry callbacks
We observed a regression in our customer’s environment after enabling
CONFIG_LAZY_RCU. In the Android Update Engine scenario, where ioctl() is
used heavily, we found that callbacks queued via call_rcu_hurry (such as
percpu_ref_switch_to_atomic_rcu) can sometimes be delayed by up to 5
seconds before execution. This occurs because the new grace period does
not start immediately after the previous one completes.

The root cause is that the wake_nocb_gp_defer() function now checks
"rdp->nocb_defer_wakeup" instead of "rdp_gp->nocb_defer_wakeup". On CPUs
that are not rcuog, "rdp->nocb_defer_wakeup" may always be
RCU_NOCB_WAKE_NOT. This can cause "rdp_gp->nocb_defer_wakeup" to be
downgraded and the "rdp_gp->nocb_timer" to be postponed by up to 10
seconds, delaying the execution of hurry RCU callbacks.

The trace log of one scenario we encountered is as follow:
  // previous GP ends at this point
  rcu_preempt   [000] d..1.   137.240210: rcu_grace_period: rcu_preempt 8369 end
  rcu_preempt   [000] .....   137.240212: rcu_grace_period: rcu_preempt 8372 reqwait
  // call_rcu_hurry enqueues "percpu_ref_switch_to_atomic_rcu", the callback waited on by UpdateEngine
  update_engine [002] d..1.   137.301593: __call_rcu_common: wyy: unlikely p_ref = 00000000********. lazy = 0
  // FirstQ on cpu 2 rdp_gp->nocb_timer is set to fire after 1 jiffy (4ms)
  // and the rdp_gp->nocb_defer_wakeup is set to RCU_NOCB_WAKE
  update_engine [002] d..2.   137.301595: rcu_nocb_wake: rcu_preempt 2 FirstQ on cpu2 with rdp_gp (cpu0).
  // FirstBQ event on cpu2 during the 1 jiffy, make the timer postpond 10 seconds later.
  // also, the rdp_gp->nocb_defer_wakeup is overwrite to RCU_NOCB_WAKE_LAZY
  update_engine [002] d..1.   137.301601: rcu_nocb_wake: rcu_preempt 2 WakeEmptyIsDeferred
  ...
  ...
  ...
  // before the 10 seconds timeout, cpu0 received another call_rcu_hurry
  // reset the timer to jiffies+1 and set the waketype = RCU_NOCB_WAKE.
  kworker/u32:0 [000] d..2.   142.557564: rcu_nocb_wake: rcu_preempt 0 FirstQ
  kworker/u32:0 [000] d..1.   142.557576: rcu_nocb_wake: rcu_preempt 0 WakeEmptyIsDeferred
  kworker/u32:0 [000] d..1.   142.558296: rcu_nocb_wake: rcu_preempt 0 WakeNot
  kworker/u32:0 [000] d..1.   142.558562: rcu_nocb_wake: rcu_preempt 0 WakeNot
  // idle(do_nocb_deferred_wakeup) wake rcuog due to waketype == RCU_NOCB_WAKE
  <idle>        [000] d..1.   142.558786: rcu_nocb_wake: rcu_preempt 0 DoWake
  <idle>        [000] dN.1.   142.558839: rcu_nocb_wake: rcu_preempt 0 DeferredWake
  rcuog/0       [000] .....   142.558871: rcu_nocb_wake: rcu_preempt 0 EndSleep
  rcuog/0       [000] .....   142.558877: rcu_nocb_wake: rcu_preempt 0 Check
  // finally rcuog request a new GP at this point (5 seconds after the FirstQ event)
  rcuog/0       [000] d..2.   142.558886: rcu_grace_period: rcu_preempt 8372 newreq
  rcu_preempt   [001] d..1.   142.559458: rcu_grace_period: rcu_preempt 8373 start
  ...
  rcu_preempt   [000] d..1.   142.564258: rcu_grace_period: rcu_preempt 8373 end
  rcuop/2       [000] D..1.   142.566337: rcu_batch_start: rcu_preempt CBs=219 bl=10
  // the hurry CB is invoked at this point
  rcuop/2       [000] b....   142.566352: blk_queue_usage_counter_release: wyy: wakeup. p_ref = 00000000********.

This patch changes the condition to check "rdp_gp->nocb_defer_wakeup" in
the lazy path. This prevents an already scheduled "rdp_gp->nocb_timer"
from being postponed and avoids overwriting "rdp_gp->nocb_defer_wakeup"
when it is not RCU_NOCB_WAKE_NOT.

Fixes: 3cb278e73b ("rcu: Make call_rcu() lazy to save power")
Co-developed-by: Cheng-jui Wang <cheng-jui.wang@mediatek.com>
Signed-off-by: Cheng-jui Wang <cheng-jui.wang@mediatek.com>
Co-developed-by: Lorry.Luo@mediatek.com
Signed-off-by: Lorry.Luo@mediatek.com
Tested-by: weiyangyang@vivo.com
Signed-off-by: weiyangyang@vivo.com
Signed-off-by: Tze-nan Wu <Tze-nan.Wu@mediatek.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay (AMD) <neeraj.upadhyay@kernel.org>

Bug: 433659824
(cherry picked from commit 463d46044f04013306a4893242f65788b8a16b2e
 https://git.kernel.org/pub/scm/linux/kernel/git/neeraj.upadhyay/linux-rcu.git rcu.merge.22.07.2025)
Change-Id: I4a0cedfd3fe35f609262ba204f5fea2be2d5f9de
Signed-off-by: Tze-nan Wu <Tze-nan.Wu@mediatek.com>
2025-07-28 02:50:16 -07:00
Greg Kroah-Hartman 9222a6a6c0 Merge 6.12.37 into android16-6.12-lts
GKI (arm64) relevant 35 out of 230 changes, affecting 67 files +612/-427
  ec9be081c5 Revert "mmc: sdhci: Disable SD card clock before changing parameters" [1 file, +2/-7]
  0698a2eb7d Bluetooth: HCI: Set extended advertising data synchronously [2 files, +130/-113]
  3672fe9d1e Bluetooth: hci_sync: revert some mesh modifications [1 file, +4/-12]
  44bb1e13b4 Bluetooth: MGMT: set_mesh: update LE scan interval and window [1 file, +22/-0]
  a99f80c88a Bluetooth: MGMT: mesh_send: check instances prior disabling advertising [1 file, +2/-1]
  5581e694d3 usb: typec: altmodes/displayport: do not index invalid pin_assignments [2 files, +2/-1]
  b1abc5ab47 scsi: sd: Fix VPD page 0xb7 length check [1 file, +1/-1]
  381c1c1219 Bluetooth: Prevent unintended pause by checking if advertising is active [1 file, +4/-0]
  f0fee863a7 nvme: Fix incorrect cdw15 value in passthru error logging [1 file, +1/-1]
  50c86c0945 netfs: Fix i_size updating [2 files, +8/-2]
  a553afd91f net/sched: Always pass notifications when child class becomes empty [1 file, +5/-14]
  d78f79a2c1 spinlock: extend guard with spinlock_bh variants [1 file, +13/-0]
  0cc4721a71 sched/fair: Rename h_nr_running into h_nr_queued [5 files, +53/-53]
  a2562bdd35 sched/fair: Fixup wake_up_sync() vs DELAYED_DEQUEUE [1 file, +11/-2]
  5833026221 f2fs: decrease spare area for pinned files for zoned devices [3 files, +5/-2]
  8912b139a8 f2fs: zone: fix to calculate first_zoned_segno correctly [4 files, +69/-20]
  c5474a7b04 bpf: use common instruction history across all states [2 files, +63/-63]
  4265682c29 bpf: Do not include stack ptr register in precision backtracking bookkeeping [2 files, +24/-6]
  e0fefe9bc0 netfs: Fix oops in write-retry from mis-resetting the subreq iterator [1 file, +3/-2]
  acf9ab15ec selinux: change security_compute_sid to return the ssid or tsid on match [1 file, +11/-5]
  42c5a4b47d rcu: Return early if callback is not specified [1 file, +4/-0]
  e036efbe58 add a string-to-qstr constructor [10 files, +13/-23]
  f94c422157 fs: export anon_inode_make_secure_inode() and fix secretmem LSM bypass [3 files, +21/-13]
  8caccd2eac usb: xhci: Skip xhci_reset in xhci_resume if xhci is being removed [1 file, +4/-1]
  9f75893189 Revert "usb: xhci: Implement xhci_handshake_check_state() helper" [3 files, +3/-30]
  fbebc2254a usb: xhci: quirk for data loss in ISOC transfers [3 files, +30/-0]
  195597e0be xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS [1 file, +2/-1]
  dbdd2a2320 Input: xpad - support Acer NGR 200 Controller [1 file, +2/-0]
  3b1407caac usb: dwc3: Abort suspend on soft disconnect failure [2 files, +16/-15]
  7cb8750160 usb: acpi: fix device link removal [3 files, +8/-1]
  c745744a82 dma-buf: fix timeout handling in dma_resv_wait_timeout v2 [1 file, +7/-5]
  ccdc472b4d Logitech C-270 even more broken [1 file, +2/-1]
  c782f98eef usb: typec: displayport: Fix potential deadlock [1 file, +1/-2]
  ead91de35d mm/vmalloc: fix data race in show_numa_info() [1 file, +35/-28]
  4c443046d8 mm: userfaultfd: fix race of userfaultfd_move and swap cache [1 file, +31/-2]

Changes in 6.12.37
        rtc: pcf2127: add missing semicolon after statement
        rtc: pcf2127: fix SPI command byte for PCF2131
        rtc: cmos: use spin_lock_irqsave in cmos_interrupt
        virtio-net: xsk: rx: fix the frame's length check
        virtio-net: ensure the received length does not exceed allocated size
        s390/pci: Fix stale function handles in error handling
        s390/pci: Do not try re-enabling load/store if device is disabled
        net: txgbe: request MISC IRQ in ndo_open
        vsock/vmci: Clear the vmci transport packet properly when initializing it
        net: libwx: fix the incorrect display of the queue number
        mmc: sdhci: Add a helper function for dump register in dynamic debug mode
        Revert "mmc: sdhci: Disable SD card clock before changing parameters"
        mmc: core: sd: Apply BROKEN_SD_DISCARD quirk earlier
        Bluetooth: HCI: Set extended advertising data synchronously
        Bluetooth: hci_sync: revert some mesh modifications
        Bluetooth: MGMT: set_mesh: update LE scan interval and window
        Bluetooth: MGMT: mesh_send: check instances prior disabling advertising
        iommufd/selftest: Fix iommufd_dirty_tracking with large hugepage sizes
        regulator: gpio: Fix the out-of-bounds access to drvdata::gpiods
        Input: cs40l50-vibra - fix potential NULL dereference in cs40l50_upload_owt()
        usb: typec: altmodes/displayport: do not index invalid pin_assignments
        mtk-sd: Fix a pagefault in dma_unmap_sg() for not prepared data
        mtk-sd: Prevent memory corruption from DMA map failure
        mtk-sd: reset host->mrq on prepare_data() error
        drm/v3d: Disable interrupts before resetting the GPU
        firmware: arm_ffa: Fix memory leak by freeing notifier callback node
        firmware: arm_ffa: Move memory allocation outside the mutex locking
        firmware: arm_ffa: Replace mutex with rwlock to avoid sleep in atomic context
        arm64: dts: apple: t8103: Fix PCIe BCM4377 nodename
        platform/mellanox: mlxbf-tmfifo: fix vring_desc.len assignment
        RDMA/mlx5: Fix unsafe xarray access in implicit ODP handling
        RDMA/mlx5: Initialize obj_event->obj_sub_list before xa_insert
        nfs: Clean up /proc/net/rpc/nfs when nfs_fs_proc_net_init() fails.
        NFSv4/pNFS: Fix a race to wake on NFS_LAYOUT_DRAIN
        scsi: qla2xxx: Fix DMA mapping test in qla24xx_get_port_database()
        scsi: qla4xxx: Fix missing DMA mapping error in qla4xxx_alloc_pdu()
        scsi: sd: Fix VPD page 0xb7 length check
        scsi: ufs: core: Fix spelling of a sysfs attribute name
        RDMA/mlx5: Fix HW counters query for non-representor devices
        RDMA/mlx5: Fix CC counters query for MPV
        RDMA/mlx5: Fix vport loopback for MPV device
        platform/mellanox: mlxbf-pmc: Fix duplicate event ID for CACHE_DATA1
        platform/mellanox: nvsw-sn2201: Fix bus number in adapter error message
        Bluetooth: Prevent unintended pause by checking if advertising is active
        btrfs: fix missing error handling when searching for inode refs during log replay
        btrfs: fix iteration of extrefs during log replay
        btrfs: return a btrfs_inode from btrfs_iget_logging()
        btrfs: return a btrfs_inode from read_one_inode()
        btrfs: fix invalid inode pointer dereferences during log replay
        btrfs: fix inode lookup error handling during log replay
        btrfs: record new subvolume in parent dir earlier to avoid dir logging races
        btrfs: propagate last_unlink_trans earlier when doing a rmdir
        btrfs: use btrfs_record_snapshot_destroy() during rmdir
        ethernet: atl1: Add missing DMA mapping error checks and count errors
        dpaa2-eth: fix xdp_rxq_info leak
        drm/exynos: fimd: Guard display clock control with runtime PM calls
        spi: spi-fsl-dspi: Clear completion counter before initiating transfer
        drm/i915/selftests: Change mock_request() to return error pointers
        nvme: Fix incorrect cdw15 value in passthru error logging
        nvmet: fix memory leak of bio integrity
        platform/x86: dell-wmi-sysman: Fix WMI data block retrieval in sysfs callbacks
        platform/x86: hp-bioscfg: Directly use firmware_attributes_class
        platform/x86: hp-bioscfg: Fix class device unregistration
        platform/x86: firmware_attributes_class: Move include linux/device/class.h
        platform/x86: firmware_attributes_class: Simplify API
        platform/x86: think-lmi: Directly use firmware_attributes_class
        platform/x86: think-lmi: Fix class device unregistration
        platform/x86: dell-sysman: Directly use firmware_attributes_class
        platform/x86: dell-wmi-sysman: Fix class device unregistration
        platform/mellanox: mlxreg-lc: Fix logic error in power state check
        drm/bridge: aux-hpd-bridge: fix assignment of the of_node
        smb: client: fix warning when reconnecting channel
        net: usb: lan78xx: fix WARN in __netif_napi_del_locked on disconnect
        drm/i915/gt: Fix timeline left held on VMA alloc error
        drm/i915/gsc: mei interrupt top half should be in irq disabled context
        idpf: return 0 size for RSS key if not supported
        idpf: convert control queue mutex to a spinlock
        igc: disable L1.2 PCI-E link substate to avoid performance issue
        smb: client: set missing retry flag in smb2_writev_callback()
        smb: client: set missing retry flag in cifs_readv_callback()
        smb: client: set missing retry flag in cifs_writev_callback()
        netfs: Fix i_size updating
        lib: test_objagg: Set error message in check_expect_hints_stats()
        amd-xgbe: align CL37 AN sequence as per databook
        enic: fix incorrect MTU comparison in enic_change_mtu()
        rose: fix dangling neighbour pointers in rose_rt_device_down()
        nui: Fix dma_mapping_error() check
        net/sched: Always pass notifications when child class becomes empty
        amd-xgbe: do not double read link status
        smb: client: fix race condition in negotiate timeout by using more precise timing
        arm64: dts: rockchip: fix internal USB hub instability on RK3399 Puma
        crypto: iaa - Remove dst_null support
        crypto: iaa - Do not clobber req->base.data
        spinlock: extend guard with spinlock_bh variants
        crypto: zynqmp-sha - Add locking
        kunit: qemu_configs: sparc: use Zilog console
        kunit: qemu_configs: sparc: Explicitly enable CONFIG_SPARC32=y
        kunit: qemu_configs: Disable faulting tests on 32-bit SPARC
        gfs2: Initialize gl_no_formal_ino earlier
        gfs2: Rename GIF_{DEFERRED -> DEFER}_DELETE
        gfs2: Rename dinode_demise to evict_behavior
        gfs2: Prevent inode creation race
        gfs2: Decode missing glock flags in tracepoints
        gfs2: Add GLF_PENDING_REPLY flag
        gfs2: Replace GIF_DEFER_DELETE with GLF_DEFER_DELETE
        gfs2: Move gfs2_dinode_dealloc
        gfs2: Move GIF_ALLOC_FAILED check out of gfs2_ea_dealloc
        gfs2: deallocate inodes in gfs2_create_inode
        btrfs: prepare btrfs_page_mkwrite() for large folios
        btrfs: fix wrong start offset for delalloc space release during mmap write
        sched/fair: Rename h_nr_running into h_nr_queued
        sched/fair: Add new cfs_rq.h_nr_runnable
        sched/fair: Fixup wake_up_sync() vs DELAYED_DEQUEUE
        gfs2: Move gfs2_trans_add_databufs
        gfs2: Don't start unnecessary transactions during log flush
        ASoC: tas2764: Extend driver to SN012776
        ASoC: tas2764: Reinit cache on part reset
        ACPI: thermal: Fix stale comment regarding trip points
        ACPI: thermal: Execute _SCP before reading trip points
        bonding: Mark active offloaded xfrm_states
        wifi: ath12k: fix skb_ext_desc leak in ath12k_dp_tx() error path
        wifi: ath12k: Handle error cases during extended skb allocation
        wifi: ath12k: fix wrong handling of CCMP256 and GCMP ciphers
        RDMA/rxe: Fix "trying to register non-static key in rxe_qp_do_cleanup" bug
        iommu: ipmmu-vmsa: avoid Wformat-security warning
        f2fs: decrease spare area for pinned files for zoned devices
        f2fs: zone: introduce first_zoned_segno in f2fs_sb_info
        f2fs: zone: fix to calculate first_zoned_segno correctly
        scsi: lpfc: Remove NLP_RELEASE_RPI flag from nodelist structure
        scsi: lpfc: Change lpfc_nodelist nlp_flag member into a bitmask
        scsi: lpfc: Avoid potential ndlp use-after-free in dev_loss_tmo_callbk
        hisi_acc_vfio_pci: bugfix cache write-back issue
        hisi_acc_vfio_pci: bugfix the problem of uninstalling driver
        bpf: use common instruction history across all states
        bpf: Do not include stack ptr register in precision backtracking bookkeeping
        arm64: dts: qcom: sm8650: change labels to lower-case
        arm64: dts: qcom: sm8650: Fix domain-idle-state for CPU2
        arm64: dts: renesas: Use interrupts-extended for Ethernet PHYs
        arm64: dts: renesas: Factor out White Hawk Single board support
        arm64: dts: renesas: white-hawk-single: Improve Ethernet TSN description
        arm64: dts: qcom: sm8650: add the missing l2 cache node
        ubsan: integer-overflow: depend on BROKEN to keep this out of CI
        remoteproc: k3: Call of_node_put(rmem_np) only once in three functions
        remoteproc: k3-r5: Add devm action to release reserved memory
        remoteproc: k3-r5: Use devm_kcalloc() helper
        remoteproc: k3-r5: Use devm_ioremap_wc() helper
        remoteproc: k3-r5: Use devm_rproc_add() helper
        remoteproc: k3-r5: Refactor sequential core power up/down operations
        netfs: Fix oops in write-retry from mis-resetting the subreq iterator
        mfd: exynos-lpass: Fix another error handling path in exynos_lpass_probe()
        drm/xe: Fix DSB buffer coherency
        drm/xe: Move DSB l2 flush to a more sensible place
        drm/xe: add interface to request physical alignment for buffer objects
        drm/xe: Allow bo mapping on multiple ggtts
        drm/xe: move DPT l2 flush to a more sensible place
        drm/xe: Replace double space with single space after comma
        drm/xe/guc: Dead CT helper
        drm/xe/guc: Explicitly exit CT safe mode on unwind
        selinux: change security_compute_sid to return the ssid or tsid on match
        drm/simpledrm: Do not upcast in release helpers
        drm/amdgpu: VCN v5_0_1 to prevent FW checking RB during DPG pause
        drm/i915/dp_mst: Work around Thunderbolt sink disconnect after SINK_COUNT_ESI read
        drm/amdgpu: add kicker fws loading for gfx11/smu13/psp13
        drm/amd/display: Add more checks for DSC / HUBP ONO guarantees
        arm64: dts: qcom: x1e80100-crd: mark l12b and l15b always-on
        drm/amdgpu/mes: add missing locking in helper functions
        sched_ext: Make scx_group_set_weight() always update tg->scx.weight
        scsi: lpfc: Restore clearing of NLP_UNREG_INP in ndlp->nlp_flag
        drm/msm: Fix a fence leak in submit error path
        drm/msm: Fix another leak in the submit error path
        ALSA: sb: Don't allow changing the DMA mode during operations
        ALSA: sb: Force to disable DMAs once when DMA mode is changed
        ata: libata-acpi: Do not assume 40 wire cable if no devices are enabled
        ata: pata_cs5536: fix build on 32-bit UML
        ASoC: amd: yc: Add quirk for MSI Bravo 17 D7VF internal mic
        platform/x86/amd/pmc: Add PCSpecialist Lafite Pro V 14M to 8042 quirks list
        genirq/irq_sim: Initialize work context pointers properly
        powerpc: Fix struct termio related ioctl macros
        ASoC: amd: yc: update quirk data for HP Victus
        regulator: fan53555: add enable_time support and soft-start times
        scsi: target: Fix NULL pointer dereference in core_scsi3_decode_spec_i_port()
        aoe: defer rexmit timer downdev work to workqueue
        wifi: mac80211: drop invalid source address OCB frames
        wifi: ath6kl: remove WARN on bad firmware input
        ACPICA: Refuse to evaluate a method if arguments are missing
        mtd: spinand: fix memory leak of ECC engine conf
        rcu: Return early if callback is not specified
        add a string-to-qstr constructor
        module: Provide EXPORT_SYMBOL_GPL_FOR_MODULES() helper
        fs: export anon_inode_make_secure_inode() and fix secretmem LSM bypass
        RDMA/mlx5: Fix cache entry update on dereg error
        IB/mlx5: Fix potential deadlock in MR deregistration
        drm/xe/bmg: Update Wa_22019338487
        drm/xe: Allow dropping kunit dependency as built-in
        NFSv4/flexfiles: Fix handling of NFS level errors in I/O
        usb: xhci: Skip xhci_reset in xhci_resume if xhci is being removed
        Revert "usb: xhci: Implement xhci_handshake_check_state() helper"
        usb: xhci: quirk for data loss in ISOC transfers
        xhci: dbctty: disable ECHO flag by default
        xhci: dbc: Flush queued requests before stopping dbc
        xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS
        Input: xpad - support Acer NGR 200 Controller
        Input: iqs7222 - explicitly define number of external channels
        usb: cdnsp: do not disable slot for disabled slot
        usb: cdnsp: Fix issue with CV Bad Descriptor test
        usb: dwc3: Abort suspend on soft disconnect failure
        usb: chipidea: udc: disconnect/reconnect from host when do suspend/resume
        usb: acpi: fix device link removal
        smb: client: fix readdir returning wrong type with POSIX extensions
        cifs: all initializations for tcon should happen in tcon_info_alloc
        dma-buf: fix timeout handling in dma_resv_wait_timeout v2
        i2c/designware: Fix an initialization issue
        Logitech C-270 even more broken
        optee: ffa: fix sleep in atomic context
        iommu/rockchip: prevent iommus dead loop when two masters share one IOMMU
        powercap: intel_rapl: Do not change CLAMPING bit if ENABLE bit cannot be changed
        riscv: cpu_ops_sbi: Use static array for boot_data
        platform/x86: think-lmi: Create ksets consecutively
        platform/x86: think-lmi: Fix kobject cleanup
        platform/x86: think-lmi: Fix sysfs group cleanup
        usb: typec: displayport: Fix potential deadlock
        powerpc/kernel: Fix ppc_save_regs inclusion in build
        mm/vmalloc: fix data race in show_numa_info()
        mm: userfaultfd: fix race of userfaultfd_move and swap cache
        x86/bugs: Rename MDS machinery to something more generic
        x86/bugs: Add a Transient Scheduler Attacks mitigation
        KVM: SVM: Advertise TSA CPUID bits to guests
        x86/microcode/AMD: Add TSA microcode SHAs
        x86/process: Move the buffer clearing before MONITOR
        Linux 6.12.37

Change-Id: If1d8d0f83e11df1540bebaf0fb136fe340f25dcb
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2025-07-13 12:24:55 +00:00
Uladzislau Rezki (Sony) 42c5a4b47d rcu: Return early if callback is not specified
[ Upstream commit 33b6a1f155d627f5bd80c7485c598ce45428f74f ]

Currently the call_rcu() API does not check whether a callback
pointer is NULL. If NULL is passed, rcu_core() will try to invoke
it, resulting in NULL pointer dereference and a kernel crash.

To prevent this and improve debuggability, this patch adds a check
for NULL and emits a kernel stack trace to help identify a faulty
caller.

Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-07-10 16:05:08 +02:00
Greg Kroah-Hartman e5ead1ec40 Merge 48ca7139ab ("cifs: Fix validation of SMB1 query reparse point response") into android16-6.12-lts
Steps on the way to 6.12.34

Resolves merge conflicts in:
	kernel/sched/core.c
	net/netfilter/xt_mark.c

Change-Id: I6df5e27c2a5bfa8b077b1f2814ad98b2a3dc0877
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2025-07-04 07:05:22 +00:00
Greg Kroah-Hartman 69f799168c Merge 6.12.31 into android16-6.12-lts
GKI (arm64) relevant 137 out of 624 changes, affecting 192 files +1647/-1035
  a4f865ecdb nvmem: core: fix bit offsets of more than one byte [1 file, +17/-7]
  4327479e55 nvmem: core: verify cell's raw_len [1 file, +12/-0]
  410f8b72e0 nvmem: core: update raw_len if the bit reading is required [1 file, +3/-1]
  7aea1517fb scsi: ufs: Introduce quirk to extend PA_HIBERN8TIME for UFS devices [2 files, +35/-0]
  b730cb1096 virtio_ring: Fix data race by tagging event_triggered as racy for KCSAN [1 file, +1/-1]
  2998813177 dma/mapping.c: dev_dbg support for dma_addressing_limited [1 file, +10/-1]
  3eec42a17a dma-mapping: avoid potential unused data compilation warning [1 file, +8/-4]
  97edaa0ec6 cgroup: Fix compilation issue due to cgroup_mutex not being exported [1 file, +1/-1]
  f93675793b vhost_task: fix vhost_task_create() documentation [1 file, +1/-1]
  e22034cbee dma-mapping: Fix warning reported for missing prototype [1 file, +8/-8]
  4f5553a08f fs/buffer: split locking for pagecache lookups [1 file, +25/-16]
  e138fc2316 fs/buffer: introduce sleeping flavors for pagecache lookups [2 files, +17/-0]
  a49a4a87ce fs/buffer: use sleeping version of __find_get_block() [1 file, +9/-2]
  f1c5aa614b fs/jbd2: use sleeping version of __find_get_block() [1 file, +9/-6]
  9ece099e95 fs/ext4: use sleeping version of sb_find_get_block() [1 file, +2/-1]
  64f505b08e block: fix race between set_blocksize and read paths [4 files, +43/-1]
  218c838d03 io_uring: don't duplicate flushing in io_req_post_cqe [1 file, +8/-3]
  8014d3e56e bpf: fix possible endless loop in BPF map iteration [1 file, +1/-1]
  d40ca27602 fuse: Return EPERM rather than ENOSYS from link() [1 file, +2/-0]
  bab0bd1389 exfat: call bh_read in get_block only when necessary [1 file, +77/-82]
  01677e7ee1 io_uring/msg: initialise msg request opcode [1 file, +1/-0]
  e506751b7d arm64: Add support for HIP09 Spectre-BHB mitigation [2 files, +3/-0]
  4f427ca9ed tracing: Mark binary printing functions with __printf() attribute [4 files, +18/-21]
  15787ab82a mailbox: use error ret code of of_parse_phandle_with_args() [1 file, +4/-3]
  f48ee562c0 Bluetooth: Disable SCO support if READ_VOICE_SETTING is unsupported/broken [1 file, +3/-0]
  44b79041c4 dql: Fix dql->limit value when reset. [1 file, +1/-1]
  ac30595154 lockdep: Fix wait context check on softirq for PREEMPT_RT [1 file, +18/-0]
  e63b634806 PCI: dwc: ep: Ensure proper iteration over outbound map windows [1 file, +1/-1]
  37ac2434aa ext4: on a remount, only log the ro or r/w state when it has changed [1 file, +4/-3]
  1d1e1efad1 libnvdimm/labels: Fix divide error in nd_label_data_init() [1 file, +2/-1]
  123bcd8f42 pidfs: improve multi-threaded exec and premature thread-group leader exit polling [3 files, +9/-9]
  8f82cf305e cgroup/rstat: avoid disabling irqs for O(num_cpu) [1 file, +5/-7]
  a5a507fa5f blk-cgroup: improve policy registration error handling [1 file, +12/-10]
  94c3cbc69a ext4: reorder capability check last [1 file, +2/-2]
  e658f2d94a bpf: Return prog btf_id without capable check [1 file, +2/-2]
  e2520cc19b PCI: dwc: Use resource start as ioremap() input in dw_pcie_pme_turn_off() [1 file, +1/-1]
  50452704ec jbd2: do not try to recover wiped journal [1 file, +6/-5]
  dab35f4921 tcp: reorganize tcp_in_ack_event() and tcp_count_delivered() [1 file, +32/-24]
  555c0b713c bpf: Allow pre-ordering for bpf cgroup progs [5 files, +30/-9]
  572ed3fb99 kconfig: do not clear SYMBOL_VALID when reading include/config/auto.conf [1 file, +12/-7]
  174dedce64 dm: restrict dm device size to 2^63-512 bytes [1 file, +4/-0]
  2f5f326214 ext4: reject the 'data_err=abort' option in nojournal mode [1 file, +12/-0]
  d0dc233fe2 posix-timers: Add cond_resched() to posix_timer_add() search loop [1 file, +1/-0]
  ae22452d15 posix-timers: Ensure that timer initialization is fully visible [1 file, +14/-7]
  3fb9ee05ec timer_list: Don't use %pK through printk() [1 file, +2/-2]
  21153e0974 netfilter: conntrack: Bound nf_conntrack sysctl writes [1 file, +9/-3]
  236a87e9d2 PNP: Expand length of fixup id string [1 file, +1/-1]
  6215143ad3 arm64/mm: Check pmd_table() in pmd_trans_huge() [1 file, +12/-12]
  8ad58a7eba arm64/mm: Check PUD_TYPE_TABLE in pud_bad() [1 file, +2/-1]
  28306c58da mmc: sdhci: Disable SD card clock before changing parameters [1 file, +7/-2]
  3a75fe58a1 usb: xhci: Don't change the status of stalled TDs on failed Stop EP [1 file, +11/-1]
  101a3b9920 printk: Check CON_SUSPEND when unblanking a console [1 file, +12/-2]
  faba68a86a wifi: cfg80211: allow IR in 20 MHz configurations [5 files, +46/-25]
  c1502fc84d ipv6: save dontfrag in cork [2 files, +6/-4]
  75ae2a3553 badblocks: Fix a nonsense WARN_ON() which checks whether a u64 variable < 0 [1 file, +3/-2]
  7caad075ac crypto: lzo - Fix compression buffer overrun [6 files, +106/-28]
  73d01bcbf2 tcp: bring back NUMA dispersion in inet_ehash_locks_alloc() [1 file, +26/-11]
  1c17190880 usb: xhci: set page size to the xHCI-supported size [2 files, +22/-20]
  93f581d763 drm/gem: Test for imported GEM buffers with helper [2 files, +16/-2]
  c4525b513d net: phylink: use pl->link_interface in phylink_expects_phy() [1 file, +1/-1]
  f29c876d72 perf/core: Clean up perf_try_init_event() [1 file, +38/-27]
  af73c8fd73 ublk: enforce ublks_max only for unprivileged devices [1 file, +27/-15]
  592ba27580 perf/hw_breakpoint: Return EOPNOTSUPP for unsupported breakpoint type [1 file, +3/-2]
  3de322a98b scsi: logging: Fix scsi_logging_level bounds [1 file, +3/-1]
  f33b310eac ipv4: fib: Move fib_valid_key_len() to rtm_to_fib_config(). [2 files, +16/-24]
  564f03a797 block: mark bounce buffering as incompatible with integrity [2 files, +5/-2]
  82209faa87 ublk: complete command synchronously on error [1 file, +6/-5]
  b98aad5e5e media: uvcvideo: Add sanity check to uvc_ioctl_xu_ctrl_map [1 file, +6/-0]
  2d6231d5ce media: uvcvideo: Handle uvc menu translation inside uvc_get_le_value [1 file, +32/-45]
  e359d62886 perf: arm_pmuv3: Call kvm_vcpu_pmu_resync_el0() before enabling counters [1 file, +2/-2]
  673dde8d3c bpf: Search and add kfuncs in struct_ops prologue and epilogue [1 file, +24/-1]
  083383aba0 cpuidle: menu: Avoid discarding useful information [1 file, +12/-1]
  20a53c3689 loop: check in LO_FLAGS_DIRECT_IO in loop_default_blocksize [1 file, +1/-1]
  b55a97d1bd dm: fix unconditional IO throttle caused by REQ_PREFLUSH [1 file, +6/-2]
  9f27b38771 crypto: ahash - Set default reqsize from ahash_alg [2 files, +7/-0]
  897c98fb32 crypto: skcipher - Zap type in crypto_alloc_sync_skcipher [1 file, +1/-0]
  4d9fa2ebc0 net: ipv6: Init tunnel link-netns before registering dev [4 files, +9/-7]
  53f42776e4 genirq/msi: Store the IOMMU IOVA directly in msi_desc instead of iommu_cookie [2 files, +25/-36]
  2b129e89b8 bpf: don't do clean_live_states when state->loop_entry->branches > 0 [1 file, +4/-0]
  46ba5757a7 bpf: copy_verifier_state() should copy 'loop_entry' field [1 file, +3/-0]
  82b54455b6 PCI: Fix old_size lower bound in calculate_iosize() too [1 file, +2/-4]
  dc5f5c9d2b hrtimers: Replace hrtimer_clock_to_base_table with switch-case [1 file, +12/-17]
  000dd6e344 ASoC: ops: Enforce platform maximum on initial value [1 file, +28/-1]
  c4260bf83b ASoC: soc-dai: check return value at snd_soc_dai_set_tdm_slot() [1 file, +5/-3]
  5b1b4cb46d pinctrl: devicetree: do not goto err when probing hogs in pinctrl_dt_to_map [1 file, +8/-2]
  69689d1138 media: v4l: Memset argument to 0 before calling get_mbus_config pad op [2 files, +5/-1]
  e6e31b0182 sched: Reduce the default slice to avoid tasks getting an extra tick [1 file, +3/-3]
  ef31dc41cf phy: core: don't require set_mode() callback for phy_get_mode() to work [1 file, +4/-3]
  06daedb443 xfrm: prevent high SEQ input in non-ESN mode [1 file, +12/-0]
  9f2911868a ip: fib_rules: Fetch net from fib_rule in fib[46]_rule_configure(). [2 files, +4/-4]
  7fea5a9140 r8152: add vendor/device ID pair for Dell Alienware AW1022z [2 files, +2/-0]
  16ddd67bb5 pstore: Change kmsg_bytes storage size to u32 [3 files, +9/-8]
  73733c2fdb ext4: don't write back data before punch hole in nojournal mode [1 file, +5/-13]
  1d15319323 f2fs: introduce f2fs_base_attr for global sysfs entries [1 file, +52/-22]
  ded26f9e4c ipv4: ip_gre: Fix set but not used warning in ipgre_err() if IPv4-only [1 file, +10/-6]
  76e56dbe50 net: flush_backlog() small changes [1 file, +8/-4]
  58cdd1ee65 bridge: mdb: Allow replace of a host-joined group [2 files, +2/-2]
  fcabb69674 rcu: handle unstable rdp in rcu_read_unlock_strict() [2 files, +11/-2]
  d402437cde rcu: fix header guard for rcu_all_qs() [1 file, +1/-1]
  887e39ac47 perf: Avoid the read if the count is already updated [3 files, +24/-18]
  c80b2d159c bpf: Use kallsyms to find the function name of a struct_ops's stub function [1 file, +44/-54]
  46f1c2b508 firmware: arm_scmi: Relax duplicate name constraint across protocol ids [1 file, +6/-13]
  1351052877 drm/atomic: clarify the rules around drm_atomic_state->allow_modeset [1 file, +21/-2]
  9fddd1f154 drm: Add valid clones check [1 file, +28/-0]
  ff214b079d nvme-pci: add quirks for device 126f:1001 [1 file, +3/-0]
  6d196cae4b nvme-pci: add quirks for WDC Blue SN550 15b7:5009 [1 file, +3/-0]
  6a09b6bad0 ALSA: usb-audio: Fix duplicated name in MIDI substream names [1 file, +12/-4]
  ad3e83a6c8 io_uring/fdinfo: annotate racy sq/cq head/tail reads [1 file, +2/-2]
  7f7c8c03fe btrfs: correct the order of prelim_ref arguments in btrfs__prelim_ref [1 file, +1/-1]
  8cafd7266f __legitimize_mnt(): check for MNT_SYNC_UMOUNT should be under mount_lock [1 file, +1/-5]
  28756f22de espintcp: fix skb leaks [3 files, +9/-3]
  9cbca30102 espintcp: remove encap socket caching to avoid reference leak [4 files, +8/-94]
  b1a687eb15 xfrm: Fix UDP GRO handling for some corner cases [2 files, +20/-16]
  447c8f0c06 kernel/fork: only call untrack_pfn_clear() on VMAs duplicated for fork() [1 file, +5/-4]
  252f78a931 xfrm: Sanitize marks before insert [2 files, +6/-0]
  7207effe47 driver core: Split devres APIs to device/devres.h [2 files, +125/-118]
  1e8b7e96f7 Bluetooth: L2CAP: Fix not checking l2cap_chan security level [1 file, +8/-7]
  cd7f022296 loop: don't require ->write_iter for writable files in loop_configure [1 file, +0/-3]
  873ebaf3c1 io_uring: fix overflow resched cqe reordering [1 file, +1/-0]
  689a205cd9 net/tipc: fix slab-use-after-free Read in tipc_aead_encrypt_done [1 file, +5/-0]
  adb05149a9 can: slcan: allow reception of short error messages [1 file, +20/-6]
  cc55dd28c2 can: bcm: add locking for bcm_op runtime updates [1 file, +45/-21]
  63567ecd99 can: bcm: add missing rcu read protection for procfs content [1 file, +9/-4]
  bf85e49aaf ALSA: pcm: Fix race of buffer access at PCM OSS layer [3 files, +14/-2]
  e78908caf1 pmdomain: core: Fix error checking in genpd_dev_pm_attach_by_id() [1 file, +1/-1]
  dc9bdfb9b0 drm/edid: fixed the bug that hdr metadata was not reset [1 file, +1/-0]
  cb9a1019a6 Input: xpad - add more controllers [1 file, +3/-0]
  9b8263cae6 highmem: add folio_test_partial_kmap() [2 files, +12/-5]
  314bf771cb memcg: always call cond_resched() after fn() [1 file, +2/-4]
  9da33ce114 mm/page_alloc.c: avoid infinite retries caused by cpuset race [1 file, +8/-0]
  9f9517f156 mm: mmap: map MAP_STACK to VM_NOHUGEPAGE only if THP is enabled [1 file, +2/-0]
  94efb0d656 mm: vmalloc: actually use the in-place vrealloc region [1 file, +1/-0]
  483ac74183 mm: vmalloc: only zero-init on vrealloc shrink [1 file, +7/-5]
  1d45e0170c spi: use container_of_cont() for to_spi_device() [1 file, +1/-4]
  d28b0305f7 err.h: move IOMEM_ERR_PTR() to err.h [2 files, +3/-2]
  80eb73778d bpf: abort verification if env->cur_state->loop_entry != NULL [1 file, +4/-2]
  85fb1edd05 drm/gem: Internally test import_attach for imported objects [1 file, +1/-2]

Changes in 6.12.31
	drm/amd/display: Configure DTBCLK_P with OPTC only for dcn401
	drm/amd/display: Do not enable replay when vtotal update is pending.
	drm/amd/display: Correct timing_adjust_pending flag setting.
	drm/amd/display: Defer BW-optimization-blocked DRR adjustments
	i2c: designware: Use temporary variable for struct device
	i2c: designware: Fix an error handling path in i2c_dw_pci_probe()
	phy: renesas: rcar-gen3-usb2: Move IRQ request in probe
	phy: renesas: rcar-gen3-usb2: Lock around hardware registers and driver data
	phy: renesas: rcar-gen3-usb2: Assert PLL reset on PHY power off
	cpufreq: Add SM8650 to cpufreq-dt-platdev blocklist
	nvmem: rockchip-otp: Move read-offset into variant-data
	nvmem: rockchip-otp: add rk3576 variant data
	nvmem: core: fix bit offsets of more than one byte
	nvmem: core: verify cell's raw_len
	nvmem: core: update raw_len if the bit reading is required
	nvmem: qfprom: switch to 4-byte aligned reads
	scsi: target: iscsi: Fix timeout on deleted connection
	scsi: ufs: Introduce quirk to extend PA_HIBERN8TIME for UFS devices
	virtio_ring: Fix data race by tagging event_triggered as racy for KCSAN
	dma/mapping.c: dev_dbg support for dma_addressing_limited
	intel_th: avoid using deprecated page->mapping, index fields
	mei: vsc: Use struct vsc_tp_packet as vsc-tp tx_buf and rx_buf type
	dma-mapping: avoid potential unused data compilation warning
	cgroup: Fix compilation issue due to cgroup_mutex not being exported
	vhost_task: fix vhost_task_create() documentation
	vhost-scsi: protect vq->log_used with vq->mutex
	scsi: mpi3mr: Add level check to control event logging
	net: enetc: refactor bulk flipping of RX buffers to separate function
	dma-mapping: Fix warning reported for missing prototype
	ima: process_measurement() needlessly takes inode_lock() on MAY_READ
	fs/buffer: split locking for pagecache lookups
	fs/buffer: introduce sleeping flavors for pagecache lookups
	fs/buffer: use sleeping version of __find_get_block()
	fs/ocfs2: use sleeping version of __find_get_block()
	fs/jbd2: use sleeping version of __find_get_block()
	fs/ext4: use sleeping version of sb_find_get_block()
	drm/amd/display: Enable urgent latency adjustment on DCN35
	drm/amdgpu: Allow P2P access through XGMI
	selftests/bpf: Mitigate sockmap_ktls disconnect_after_delete failure
	block: fix race between set_blocksize and read paths
	io_uring: don't duplicate flushing in io_req_post_cqe
	bpf: fix possible endless loop in BPF map iteration
	samples/bpf: Fix compilation failure for samples/bpf on LoongArch Fedora
	kconfig: merge_config: use an empty file as initfile
	x86/fred: Fix system hang during S4 resume with FRED enabled
	s390/vfio-ap: Fix no AP queue sharing allowed message written to kernel log
	cifs: Add fallback for SMB2 CREATE without FILE_READ_ATTRIBUTES
	cifs: Fix querying and creating MF symlinks over SMB1
	cifs: Fix negotiate retry functionality
	smb: client: Store original IO parameters and prevent zero IO sizes
	fuse: Return EPERM rather than ENOSYS from link()
	exfat: call bh_read in get_block only when necessary
	io_uring/msg: initialise msg request opcode
	NFSv4: Check for delegation validity in nfs_start_delegation_return_locked()
	NFS: Don't allow waiting for exiting tasks
	SUNRPC: Don't allow waiting for exiting tasks
	arm64: Add support for HIP09 Spectre-BHB mitigation
	iommufd: Extend IOMMU_GET_HW_INFO to report PASID capability
	tracing: Mark binary printing functions with __printf() attribute
	ACPI: PNP: Add Intel OC Watchdog IDs to non-PNP device list
	tpm: Convert warn to dbg in tpm2_start_auth_session()
	mailbox: pcc: Use acpi_os_ioremap() instead of ioremap()
	mailbox: use error ret code of of_parse_phandle_with_args()
	riscv: Allow NOMMU kernels to access all of RAM
	fbdev: fsl-diu-fb: add missing device_remove_file()
	fbcon: Use correct erase colour for clearing in fbcon
	fbdev: core: tileblit: Implement missing margin clearing for tileblit
	cifs: Set default Netbios RFC1001 server name to hostname in UNC
	cifs: add validation check for the fields in smb_aces
	cifs: Fix establishing NetBIOS session for SMB2+ connection
	NFSv4: Treat ENETUNREACH errors as fatal for state recovery
	SUNRPC: rpc_clnt_set_transport() must not change the autobind setting
	SUNRPC: rpcbind should never reset the port to the value '0'
	spi-rockchip: Fix register out of bounds access
	ASoC: codecs: wsa884x: Correct VI sense channel mask
	ASoC: codecs: wsa883x: Correct VI sense channel mask
	mctp: Fix incorrect tx flow invalidation condition in mctp-i2c
	net: tn40xx: add pci-id of the aqr105-based Tehuti TN4010 cards
	net: tn40xx: create swnode for mdio and aqr105 phy and add to mdiobus
	thermal/drivers/mediatek/lvts: Start sensor interrupts disabled
	thermal/drivers/qoriq: Power down TMU on system suspend
	Bluetooth: btmtksdio: Prevent enabling interrupts after IRQ handler removal
	Bluetooth: Disable SCO support if READ_VOICE_SETTING is unsupported/broken
	dql: Fix dql->limit value when reset.
	lockdep: Fix wait context check on softirq for PREEMPT_RT
	objtool: Properly disable uaccess validation
	PCI: dwc: ep: Ensure proper iteration over outbound map windows
	r8169: disable RTL8126 ZRX-DC timeout
	tools/build: Don't pass test log files to linker
	pNFS/flexfiles: Report ENETDOWN as a connection error
	drm/amdgpu/discovery: check ip_discovery fw file available
	drm/amdkfd: set precise mem ops caps to disabled for gfx 11 and 12
	PCI: vmd: Disable MSI remapping bypass under Xen
	xen/pci: Do not register devices with segments >= 0x10000
	ext4: on a remount, only log the ro or r/w state when it has changed
	libnvdimm/labels: Fix divide error in nd_label_data_init()
	pidfs: improve multi-threaded exec and premature thread-group leader exit polling
	staging: vchiq_arm: Create keep-alive thread during probe
	mmc: host: Wait for Vdd to settle on card power off
	drm/amdgpu: Skip pcie_replay_count sysfs creation for VF
	cgroup/rstat: avoid disabling irqs for O(num_cpu)
	wifi: mt76: only mark tx-status-failed frames as ACKed on mt76x0/2
	wifi: mt76: mt7996: fix SER reset trigger on WED reset
	wifi: mt76: mt7996: revise TXS size
	wifi: mt76: mt7925: load the appropriate CLC data based on hardware type
	wifi: mt76: mt7925: fix fails to enter low power mode in suspend state
	x86/headers: Replace __ASSEMBLY__ with __ASSEMBLER__ in UAPI headers
	x86/stackprotector/64: Only export __ref_stack_chk_guard on CONFIG_SMP
	x86/smpboot: Fix INIT delay assignment for extended Intel Families
	x86/microcode: Update the Intel processor flag scan check
	x86/mm: Check return value from memblock_phys_alloc_range()
	i2c: qup: Vote for interconnect bandwidth to DRAM
	i2c: pxa: fix call balance of i2c->clk handling routines
	btrfs: make btrfs_discard_workfn() block_group ref explicit
	btrfs: avoid linker error in btrfs_find_create_tree_block()
	btrfs: run btrfs_error_commit_super() early
	btrfs: fix non-empty delayed iputs list on unmount due to async workers
	btrfs: get zone unusable bytes while holding lock at btrfs_reclaim_bgs_work()
	btrfs: send: return -ENAMETOOLONG when attempting a path that is too long
	blk-cgroup: improve policy registration error handling
	drm/amdgpu: release xcp_mgr on exit
	drm/amd/display: Guard against setting dispclk low for dcn31x
	drm/amdgpu: adjust drm_firmware_drivers_only() handling
	i3c: master: svc: Fix missing STOP for master request
	s390/tlb: Use mm_has_pgste() instead of mm_alloc_pgste()
	dlm: make tcp still work in multi-link env
	clocksource/drivers/timer-riscv: Stop stimecmp when cpu hotplug
	um: Store full CSGSFS and SS register from mcontext
	um: Update min_low_pfn to match changes in uml_reserved
	wifi: mwifiex: Fix HT40 bandwidth issue.
	bnxt_en: Query FW parameters when the CAPS_CHANGE bit is set
	riscv: Call secondary mmu notifier when flushing the tlb
	ext4: reorder capability check last
	hypfs_create_cpu_files(): add missing check for hypfs_mkdir() failure
	scsi: st: Tighten the page format heuristics with MODE SELECT
	scsi: st: ERASE does not change tape location
	vfio/pci: Handle INTx IRQ_NOTCONNECTED
	bpf: Return prog btf_id without capable check
	PCI: dwc: Use resource start as ioremap() input in dw_pcie_pme_turn_off()
	jbd2: do not try to recover wiped journal
	tcp: reorganize tcp_in_ack_event() and tcp_count_delivered()
	rtc: rv3032: fix EERD location
	objtool: Fix error handling inconsistencies in check()
	thunderbolt: Do not add non-active NVM if NVM upgrade is disabled for retimer
	erofs: initialize decompression early
	spi: spi-mux: Fix coverity issue, unchecked return value
	ASoC: pcm6240: Drop bogus code handling IRQ as GPIO
	ASoC: mediatek: mt6359: Add stub for mt6359_accdet_enable_jack_detect
	bpf: Allow pre-ordering for bpf cgroup progs
	kbuild: fix argument parsing in scripts/config
	kconfig: do not clear SYMBOL_VALID when reading include/config/auto.conf
	crypto: octeontx2 - suppress auth failure screaming due to negative tests
	dm: restrict dm device size to 2^63-512 bytes
	net/smc: use the correct ndev to find pnetid by pnetid table
	xen: Add support for XenServer 6.1 platform device
	pinctrl-tegra: Restore SFSEL bit when freeing pins
	mfd: tps65219: Remove TPS65219_REG_TI_DEV_ID check
	drm/amdgpu/gfx12: don't read registers in mqd init
	drm/amdgpu/gfx11: don't read registers in mqd init
	drm/amdgpu: Update SRIOV video codec caps
	ASoC: sun4i-codec: support hp-det-gpios property
	clk: qcom: lpassaudiocc-sc7280: Add support for LPASS resets for QCM6490
	ext4: reject the 'data_err=abort' option in nojournal mode
	ext4: do not convert the unwritten extents if data writeback fails
	RDMA/uverbs: Propagate errors from rdma_lookup_get_uobject()
	posix-timers: Add cond_resched() to posix_timer_add() search loop
	posix-timers: Ensure that timer initialization is fully visible
	net: stmmac: dwmac-rk: Validate GRF and peripheral GRF during probe
	net: hsr: Fix PRP duplicate detection
	timer_list: Don't use %pK through printk()
	wifi: rtw89: set force HE TB mode when connecting to 11ax AP
	netfilter: conntrack: Bound nf_conntrack sysctl writes
	PNP: Expand length of fixup id string
	phy: rockchip: usbdp: Only verify link rates/lanes/voltage when the corresponding set flags are set
	arm64/mm: Check pmd_table() in pmd_trans_huge()
	arm64/mm: Check PUD_TYPE_TABLE in pud_bad()
	mmc: dw_mmc: add exynos7870 DW MMC support
	mmc: sdhci: Disable SD card clock before changing parameters
	usb: xhci: Don't change the status of stalled TDs on failed Stop EP
	wifi: iwlwifi: mvm: fix setting the TK when associated
	hwmon: (dell-smm) Increment the number of fans
	iommu: Keep dev->iommu state consistent
	printk: Check CON_SUSPEND when unblanking a console
	wifi: iwlwifi: don't warn when if there is a FW error
	wifi: iwlwifi: w/a FW SMPS mode selection
	wifi: iwlwifi: fix debug actions order
	wifi: iwlwifi: mark Br device not integrated
	wifi: iwlwifi: fix the ECKV UEFI variable name
	wifi: mac80211: fix warning on disconnect during failed ML reconf
	wifi: mac80211_hwsim: Fix MLD address translation
	wifi: cfg80211: allow IR in 20 MHz configurations
	ipv6: save dontfrag in cork
	drm/amd/display: remove minimum Dispclk and apply oem panel timing.
	drm/amd/display: calculate the remain segments for all pipes
	drm/amd/display: not abort link train when bw is low
	drm/amd/display: Fix incorrect DPCD configs while Replay/PSR switch
	gfs2: Check for empty queue in run_queue
	auxdisplay: charlcd: Partially revert "Move hwidth and bwidth to struct hd44780_common"
	ASoC: qcom: sm8250: explicitly set format in sm8250_be_hw_params_fixup()
	badblocks: Fix a nonsense WARN_ON() which checks whether a u64 variable < 0
	coresight-etb10: change etb_drvdata spinlock's type to raw_spinlock_t
	iommu/amd/pgtbl_v2: Improve error handling
	cpufreq: tegra186: Share policy per cluster
	watchdog: aspeed: Update bootstatus handling
	PCI: endpoint: pci-epf-test: Fix double free that causes kernel to oops
	misc: pci_endpoint_test: Give disabled BARs a distinct error code
	crypto: lzo - Fix compression buffer overrun
	crypto: mxs-dcp - Only set OTP_KEY bit for OTP key
	drm/amdkfd: Set per-process flags only once for gfx9/10/11/12
	drm/amdkfd: Set per-process flags only once cik/vi
	drm/amdgpu: Fix missing drain retry fault the last entry
	arm64: tegra: p2597: Fix gpio for vdd-1v8-dis regulator
	arm64: tegra: Resize aperture for the IGX PCIe C5 slot
	powerpc/prom_init: Fixup missing #size-cells on PowerBook6,7
	ALSA: seq: Improve data consistency at polling
	tcp: bring back NUMA dispersion in inet_ehash_locks_alloc()
	rtc: ds1307: stop disabling alarms on probe
	ieee802154: ca8210: Use proper setters and getters for bitwise types
	drm/xe: Nuke VM's mapping upon close
	drm/xe: Retry BO allocation
	soc: samsung: include linux/array_size.h where needed
	ARM: tegra: Switch DSI-B clock parent to PLLD on Tegra114
	media: c8sectpfe: Call of_node_put(i2c_bus) only once in c8sectpfe_probe()
	usb: xhci: set page size to the xHCI-supported size
	dm cache: prevent BUG_ON by blocking retries on failed device resumes
	soc: mediatek: mtk-mutex: Add DPI1 SOF/EOF to MT8188 mutex tables
	orangefs: Do not truncate file size
	drm/gem: Test for imported GEM buffers with helper
	net: phylink: use pl->link_interface in phylink_expects_phy()
	blk-throttle: don't take carryover for prioritized processing of metadata
	remoteproc: qcom_wcnss: Handle platforms with only single power domain
	drm/amdgpu: Do not program AGP BAR regs under SRIOV in gfxhub_v1_0.c
	drm/amd/display: Ensure DMCUB idle before reset on DCN31/DCN35
	drm/amd/display: Skip checking FRL_MODE bit for PCON BW determination
	drm/amd/display: Fix DMUB reset sequence for DCN401
	drm/amd/display: Fix p-state type when p-state is unsupported
	drm/amd/display: Request HW cursor on DCN3.2 with SubVP
	perf/core: Clean up perf_try_init_event()
	media: cx231xx: set device_caps for 417
	pinctrl: bcm281xx: Use "unsigned int" instead of bare "unsigned"
	rcu: Fix get_state_synchronize_rcu_full() GP-start detection
	net: ethernet: ti: cpsw_new: populate netdev of_node
	net: phy: nxp-c45-tja11xx: add match_phy_device to TJA1103/TJA1104
	dpll: Add an assertion to check freq_supported_num
	ublk: enforce ublks_max only for unprivileged devices
	iommufd: Disallow allocating nested parent domain with fault ID
	media: imx335: Set vblank immediately
	net: pktgen: fix mpls maximum labels list parsing
	perf/hw_breakpoint: Return EOPNOTSUPP for unsupported breakpoint type
	ALSA: hda/realtek: Enable PC beep passthrough for HP EliteBook 855 G7
	scsi: logging: Fix scsi_logging_level bounds
	ipv4: fib: Move fib_valid_key_len() to rtm_to_fib_config().
	drm/rockchip: vop2: Add uv swap for cluster window
	block: mark bounce buffering as incompatible with integrity
	ublk: complete command synchronously on error
	media: uvcvideo: Add sanity check to uvc_ioctl_xu_ctrl_map
	media: uvcvideo: Handle uvc menu translation inside uvc_get_le_value
	clk: imx8mp: inform CCF of maximum frequency of clocks
	x86/bugs: Make spectre user default depend on MITIGATION_SPECTRE_V2
	hwmon: (gpio-fan) Add missing mutex locks
	ARM: at91: pm: fix at91_suspend_finish for ZQ calibration
	drm/mediatek: mtk_dpi: Add checks for reg_h_fre_con existence
	fpga: altera-cvp: Increase credit timeout
	perf: arm_pmuv3: Call kvm_vcpu_pmu_resync_el0() before enabling counters
	soc: apple: rtkit: Use high prio work queue
	soc: apple: rtkit: Implement OSLog buffers properly
	wifi: ath12k: Report proper tx completion status to mac80211
	PCI: brcmstb: Expand inbound window size up to 64GB
	PCI: brcmstb: Add a softdep to MIP MSI-X driver
	firmware: arm_ffa: Set dma_mask for ffa devices
	drm/xe/vf: Retry sending MMIO request to GUC on timeout error
	drm/xe/pf: Create a link between PF and VF devices
	net/mlx5: Avoid report two health errors on same syndrome
	selftests/net: have `gro.sh -t` return a correct exit code
	pinctrl: sophgo: avoid to modify untouched bit when setting cv1800 pinconf
	drm/amdkfd: KFD release_work possible circular locking
	drm/xe: xe_gen_wa_oob: replace program_invocation_short_name
	leds: pwm-multicolor: Add check for fwnode_property_read_u32
	net: ethernet: mtk_ppe_offload: Allow QinQ, double ETH_P_8021Q only
	net: xgene-v2: remove incorrect ACPI_PTR annotation
	bonding: report duplicate MAC address in all situations
	wifi: ath12k: Improve BSS discovery with hidden SSID in 6 GHz band
	soc: ti: k3-socinfo: Do not use syscon helper to build regmap
	bpf: Search and add kfuncs in struct_ops prologue and epilogue
	Octeontx2-af: RPM: Register driver with PCI subsys IDs
	x86/build: Fix broken copy command in genimage.sh when making isoimage
	drm/amd/display: handle max_downscale_src_width fail check
	drm/amd/display: fix dcn4x init failed
	drm/amd/display: Fix mismatch type comparison
	ASoC: mediatek: mt8188: Treat DMIC_GAINx_CUR as non-volatile
	ASoC: mediatek: mt8188: Add reference for dmic clocks
	x86/nmi: Add an emergency handler in nmi_desc & use it in nmi_shootdown_cpus()
	vhost-scsi: Return queue full for page alloc failures during copy
	vdpa/mlx5: Fix mlx5_vdpa_get_config() endianness on big-endian machines
	cpuidle: menu: Avoid discarding useful information
	media: adv7180: Disable test-pattern control on adv7180
	media: tc358746: improve calculation of the D-PHY timing registers
	net/mlx5e: Add correct match to check IPSec syndromes for switchdev mode
	scsi: mpi3mr: Update timestamp only for supervisor IOCs
	loop: check in LO_FLAGS_DIRECT_IO in loop_default_blocksize
	libbpf: Fix out-of-bound read
	dm: fix unconditional IO throttle caused by REQ_PREFLUSH
	scsi: scsi_debug: First fixes for tapes
	net/mlx5: Change POOL_NEXT_SIZE define value and make it global
	x86/kaslr: Reduce KASLR entropy on most x86 systems
	crypto: ahash - Set default reqsize from ahash_alg
	crypto: skcipher - Zap type in crypto_alloc_sync_skcipher
	net: ipv6: Init tunnel link-netns before registering dev
	drm/xe/oa: Ensure that polled read returns latest data
	MIPS: Use arch specific syscall name match function
	drm/amdgpu: remove all KFD fences from the BO on release
	x86/locking: Use ALT_OUTPUT_SP() for percpu_{,try_}cmpxchg{64,128}_op()
	genirq/msi: Store the IOMMU IOVA directly in msi_desc instead of iommu_cookie
	MIPS: pm-cps: Use per-CPU variables as per-CPU, not per-core
	clocksource: mips-gic-timer: Enable counter when CPUs start
	PCI: epf-mhi: Update device ID for SA8775P
	scsi: mpt3sas: Send a diag reset if target reset fails
	wifi: rtw88: Fix rtw_init_vht_cap() for RTL8814AU
	wifi: rtw88: Fix rtw_init_ht_cap() for RTL8814AU
	wifi: rtw88: Fix rtw_desc_to_mcsrate() to handle MCS16-31
	wifi: rtw89: fw: propagate error code from rtw89_h2c_tx()
	wifi: rtw89: fw: get sb_sel_ver via get_unaligned_le32()
	wifi: rtw89: fw: add blacklist to avoid obsolete secure firmware
	wifi: rtw89: 8922a: fix incorrect STA-ID in EHT MU PPDU
	net: pktgen: fix access outside of user given buffer in pktgen_thread_write()
	power: supply: axp20x_battery: Update temp sensor for AXP717 from device tree
	EDAC/ie31200: work around false positive build warning
	i3c: master: svc: Flush FIFO before sending Dynamic Address Assignment(DAA)
	mfd: axp20x: AXP717: Add AXP717_TS_PIN_CFG to writeable regs
	eeprom: ee1004: Check chip before probing
	irqchip/riscv-imsic: Separate next and previous pointers in IMSIC vector
	drm/amd/pm: Fetch current power limit from PMFW
	drm/amd/display: Add support for disconnected eDP streams
	drm/amd/display: Guard against setting dispclk low when active
	drm/amd/display: Fix BT2020 YCbCr limited/full range input
	drm/amd/display: Read LTTPR ALPM caps during link cap retrieval
	Revert "drm/amd/display: Request HW cursor on DCN3.2 with SubVP"
	drm/amd/display: Don't treat wb connector as physical in create_validate_stream_for_sink
	serial: mctrl_gpio: split disable_ms into sync and no_sync APIs
	RDMA/core: Fix best page size finding when it can cross SG entries
	pmdomain: imx: gpcv2: use proper helper for property detection
	can: c_can: Use of_property_present() to test existence of DT property
	bpf: don't do clean_live_states when state->loop_entry->branches > 0
	bpf: copy_verifier_state() should copy 'loop_entry' field
	eth: mlx4: don't try to complete XDP frames in netpoll
	PCI: Fix old_size lower bound in calculate_iosize() too
	ACPI: HED: Always initialize before evged
	vxlan: Join / leave MC group after remote changes
	hrtimers: Replace hrtimer_clock_to_base_table with switch-case
	irqchip/riscv-imsic: Set irq_set_affinity() for IMSIC base
	media: test-drivers: vivid: don't call schedule in loop
	net/mlx5: Modify LSB bitmask in temperature event to include only the first bit
	net/mlx5: Apply rate-limiting to high temperature warning
	firmware: arm_ffa: Reject higher major version as incompatible
	firmware: arm_ffa: Handle the presence of host partition in the partition info
	firmware: xilinx: Dont send linux address to get fpga config get status
	ASoC: ops: Enforce platform maximum on initial value
	ASoC: tas2764: Add reg defaults for TAS2764_INT_CLK_CFG
	ASoC: tas2764: Mark SW_RESET as volatile
	ASoC: tas2764: Power up/down amp on mute ops
	ASoC: soc-dai: check return value at snd_soc_dai_set_tdm_slot()
	pinctrl: devicetree: do not goto err when probing hogs in pinctrl_dt_to_map
	smack: recognize ipv4 CIPSO w/o categories
	smack: Revert "smackfs: Added check catlen"
	kunit: tool: Use qboot on QEMU x86_64
	media: i2c: imx219: Correct the minimum vblanking value
	media: v4l: Memset argument to 0 before calling get_mbus_config pad op
	net/mlx4_core: Avoid impossible mlx4_db_alloc() order value
	drm/xe: Stop ignoring errors from xe_ttm_stolen_mgr_init()
	drm/xe: Fix xe_tile_init_noalloc() error propagation
	clk: qcom: ipq5018: allow it to be bulid on arm32
	clk: qcom: clk-alpha-pll: Do not use random stack value for recalc rate
	drm/xe/debugfs: fixed the return value of wedged_mode_set
	drm/xe/debugfs: Add missing xe_pm_runtime_put in wedge_mode_set
	x86/ibt: Handle FineIBT in handle_cfi_failure()
	x86/traps: Cleanup and robustify decode_bug()
	sched: Reduce the default slice to avoid tasks getting an extra tick
	serial: sh-sci: Update the suspend/resume support
	pinctrl: renesas: rzg2l: Add suspend/resume support for pull up/down
	phy: phy-rockchip-samsung-hdptx: Swap the definitions of LCPLL_REF and ROPLL_REF
	phy: core: don't require set_mode() callback for phy_get_mode() to work
	phy: exynos5-usbdrd: fix EDS distribution tuning (gs101)
	soundwire: amd: change the soundwire wake enable/disable sequence
	soundwire: cadence_master: set frame shape and divider based on actual clk freq
	net: stmmac: dwmac-loongson: Set correct {tx,rx}_fifo_size
	drm/amdgpu/mes11: fix set_hw_resources_1 calculation
	drm/amdkfd: fix missing L2 cache info in topology
	drm/amdgpu: Set snoop bit for SDMA for MI series
	drm/amd/display: pass calculated dram_speed_mts to dml2
	drm/amd/display: Don't try AUX transactions on disconnected link
	drm/amdgpu: reset psp->cmd to NULL after releasing the buffer
	drm/amd/pm: Skip P2S load for SMU v13.0.12
	drm/amd/display: Support multiple options during psr entry.
	Revert "drm/amd/display: Exit idle optimizations before attempt to access PHY"
	drm/amd/display: Update CR AUX RD interval interpretation
	drm/amd/display: Initial psr_version with correct setting
	drm/amd/display: Increase block_sequence array size
	drm/amd/display: Use Nominal vBlank If Provided Instead Of Capping It
	drm/amd/display: Populate register address for dentist for dcn401
	drm/amdgpu: Use active umc info from discovery
	drm/amdgpu: enlarge the VBIOS binary size limit
	drm/amd/display/dm: drop hw_support check in amdgpu_dm_i2c_xfer()
	scsi: target: spc: Fix loop traversal in spc_rsoc_get_descr()
	net/mlx5: XDP, Enable TX side XDP multi-buffer support
	net/mlx5: Extend Ethtool loopback selftest to support non-linear SKB
	net/mlx5e: set the tx_queue_len for pfifo_fast
	net/mlx5e: reduce rep rxq depth to 256 for ECPF
	net/mlx5e: reduce the max log mpwrq sz for ECPF and reps
	drm/v3d: Add clock handling
	xfrm: prevent high SEQ input in non-ESN mode
	wifi: ath12k: fix the ampdu id fetch in the HAL_RX_MPDU_START TLV
	mptcp: pm: userspace: flags: clearer msg if no remote addr
	wifi: iwlwifi: use correct IMR dump variable
	wifi: iwlwifi: don't warn during reprobe
	wifi: mac80211: don't unconditionally call drv_mgd_complete_tx()
	wifi: mac80211: remove misplaced drv_mgd_complete_tx() call
	wifi: mac80211: set ieee80211_prep_tx_info::link_id upon Auth Rx
	net: fec: Refactor MAC reset to function
	powerpc/pseries/iommu: memory notifier incorrectly adds TCEs for pmemory
	powerpc/pseries/iommu: create DDW for devices with DMA mask less than 64-bits
	arch/powerpc/perf: Check the instruction type before creating sample with perf_mem_data_src
	ip: fib_rules: Fetch net from fib_rule in fib[46]_rule_configure().
	r8152: add vendor/device ID pair for Dell Alienware AW1022z
	iio: adc: ad7944: don't use storagebits for sizing
	pstore: Change kmsg_bytes storage size to u32
	leds: trigger: netdev: Configure LED blink interval for HW offload
	ext4: don't write back data before punch hole in nojournal mode
	ext4: remove writable userspace mappings before truncating page cache
	wifi: rtw88: Fix download_firmware_validate() for RTL8814AU
	wifi: rtw88: Fix __rtw_download_firmware() for RTL8814AU
	wifi: rtw89: coex: Assign value over than 0 to avoid firmware timer hang
	wifi: rtw89: fw: validate multi-firmware header before getting its size
	wifi: rtw89: fw: validate multi-firmware header before accessing
	wifi: rtw89: call power_on ahead before selecting firmware
	clk: qcom: camcc-sm8250: Use clk_rcg2_shared_ops for some RCGs
	net: page_pool: avoid false positive warning if NAPI was never added
	tools/power turbostat: Clustered Uncore MHz counters should honor show/hide options
	hwmon: (xgene-hwmon) use appropriate type for the latency value
	f2fs: introduce f2fs_base_attr for global sysfs entries
	media: qcom: camss: csid: Only add TPG v4l2 ctrl if TPG hardware is available
	media: qcom: camss: Add default case in vfe_src_pad_code
	drm/rockchip: vop2: Improve display modes handling on RK3588 HDMI0
	eth: fbnic: set IFF_UNICAST_FLT to avoid enabling promiscuous mode when adding unicast addrs
	tools: ynl-gen: don't output external constants
	net/mlx5e: Avoid WARN_ON when configuring MQPRIO with HTB offload enabled
	cpufreq: amd-pstate: Remove unnecessary driver_lock in set_boost
	vxlan: Annotate FDB data races
	ipv4: ip_gre: Fix set but not used warning in ipgre_err() if IPv4-only
	r8169: don't scan PHY addresses > 0
	net: flush_backlog() small changes
	bridge: mdb: Allow replace of a host-joined group
	ice: init flow director before RDMA
	ice: treat dyn_allowed only as suggestion
	rcu: handle quiescent states for PREEMPT_RCU=n, PREEMPT_COUNT=y
	rcu: handle unstable rdp in rcu_read_unlock_strict()
	rcu: fix header guard for rcu_all_qs()
	perf: Avoid the read if the count is already updated
	ice: count combined queues using Rx/Tx count
	drm/xe/relay: Don't use GFP_KERNEL for new transactions
	net/mana: fix warning in the writer of client oob
	scsi: lpfc: Handle duplicate D_IDs in ndlp search-by D_ID routine
	scsi: lpfc: Ignore ndlp rport mismatch in dev_loss_tmo callbk
	scsi: lpfc: Free phba irq in lpfc_sli4_enable_msi() when pci_irq_vector() fails
	scsi: st: Restore some drive settings after reset
	wifi: ath12k: Avoid napi_sync() before napi_enable()
	HID: usbkbd: Fix the bit shift number for LED_KANA
	arm64: zynqmp: add clock-output-names property in clock nodes
	ASoC: codecs: pcm3168a: Allow for 24-bit in provider mode
	ASoC: rt722-sdca: Add some missing readable registers
	irqchip/riscv-aplic: Add support for hart indexes
	dm vdo indexer: prevent unterminated string warning
	dm vdo: use a short static string for thread name prefix
	drm/ast: Find VBIOS mode from regular display size
	bpf: Use kallsyms to find the function name of a struct_ops's stub function
	bpftool: Fix readlink usage in get_fd_type
	firmware: arm_scmi: Relax duplicate name constraint across protocol ids
	perf/amd/ibs: Fix perf_ibs_op.cnt_mask for CurCnt
	perf/amd/ibs: Fix ->config to sample period calculation for OP PMU
	clk: renesas: rzg2l-cpg: Refactor Runtime PM clock validation
	wifi: rtl8xxxu: retry firmware download on error
	wifi: rtw88: Don't use static local variable in rtw8822b_set_tx_power_index_by_rate
	wifi: rtw89: add wiphy_lock() to work that isn't held wiphy_lock() yet
	spi: zynqmp-gqspi: Always acknowledge interrupts
	regulator: ad5398: Add device tree support
	wifi: ath12k: fix ath12k_hal_tx_cmd_ext_desc_setup() info1 override
	accel/qaic: Mask out SR-IOV PCI resources
	drm/xe/pf: Reset GuC VF config when unprovisioning critical resource
	wifi: ath9k: return by of_get_mac_address
	wifi: ath12k: Fetch regdb.bin file from board-2.bin
	wifi: ath12k: Fix end offset bit definition in monitor ring descriptor
	drm: bridge: adv7511: fill stream capabilities
	drm/nouveau: fix the broken marco GSP_MSG_MAX_SIZE
	wifi: ath11k: Use dma_alloc_noncoherent for rx_tid buffer allocation
	drm/xe: Move suballocator init to after display init
	drm/xe: Do not attempt to bootstrap VF in execlists mode
	wifi: rtw89: coex: Separated Wi-Fi connecting event from Wi-Fi scan event
	drm/xe/sa: Always call drm_suballoc_manager_fini()
	drm/xe: Reject BO eviction if BO is bound to current VM
	drm/atomic: clarify the rules around drm_atomic_state->allow_modeset
	drm/buddy: fix issue that force_merge cannot free all roots
	drm/panel-edp: Add Starry 116KHD024006
	drm: Add valid clones check
	ASoC: imx-card: Adjust over allocation of memory in imx_card_parse_of()
	book3s64/radix: Fix compile errors when CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=n
	pinctrl: meson: define the pull up/down resistor value as 60 kOhm
	smb: server: smb2pdu: check return value of xa_store()
	platform/x86/intel: hid: Add Pantherlake support
	platform/x86: asus-wmi: Disable OOBE state after resume from hibernation
	platform/x86: ideapad-laptop: add support for some new buttons
	ASoC: cs42l43: Disable headphone clamps during type detection
	ASoC: Intel: bytcr_rt5640: Add DMI quirk for Acer Aspire SW3-013
	ALSA: hda/realtek: Add quirk for HP Spectre x360 15-df1xxx
	nvme-pci: add quirks for device 126f:1001
	nvme-pci: add quirks for WDC Blue SN550 15b7:5009
	ALSA: usb-audio: Fix duplicated name in MIDI substream names
	nvmet-tcp: don't restore null sk_state_change
	io_uring/fdinfo: annotate racy sq/cq head/tail reads
	cifs: Fix and improve cifs_query_path_info() and cifs_query_file_info()
	cifs: Fix changing times and read-only attr over SMB1 smb_set_file_info() function
	ASoC: intel/sdw_utils: Add volume limit to cs42l43 speakers
	btrfs: compression: adjust cb->compressed_folios allocation type
	btrfs: correct the order of prelim_ref arguments in btrfs__prelim_ref
	btrfs: handle empty eb->folios in num_extent_folios()
	btrfs: avoid NULL pointer dereference if no valid csum tree
	tools: ynl-gen: validate 0 len strings from kernel
	block: only update request sector if needed
	wifi: iwlwifi: add support for Killer on MTL
	x86/Kconfig: make CFI_AUTO_DEFAULT depend on !RUST or Rust >= 1.88
	xenbus: Allow PVH dom0 a non-local xenstore
	drm/amd/display: Call FP Protect Before Mode Programming/Mode Support
	__legitimize_mnt(): check for MNT_SYNC_UMOUNT should be under mount_lock
	soundwire: bus: Fix race on the creation of the IRQ domain
	espintcp: fix skb leaks
	espintcp: remove encap socket caching to avoid reference leak
	xfrm: Fix UDP GRO handling for some corner cases
	dmaengine: idxd: Fix allowing write() from different address spaces
	x86/sev: Fix operator precedence in GHCB_MSR_VMPL_REQ_LEVEL macro
	kernel/fork: only call untrack_pfn_clear() on VMAs duplicated for fork()
	remoteproc: qcom_wcnss: Fix on platforms without fallback regulators
	clk: sunxi-ng: d1: Add missing divider for MMC mod clocks
	xfrm: Sanitize marks before insert
	dmaengine: idxd: Fix ->poll() return value
	dmaengine: fsl-edma: Fix return code for unhandled interrupts
	driver core: Split devres APIs to device/devres.h
	devres: Introduce devm_kmemdup_array()
	ASoC: SOF: Intel: hda: Fix UAF when reloading module
	irqchip/riscv-imsic: Start local sync timer on correct CPU
	perf/x86/intel: Fix segfault with PEBS-via-PT with sample_freq
	Bluetooth: L2CAP: Fix not checking l2cap_chan security level
	Bluetooth: btusb: use skb_pull to avoid unsafe access in QCA dump handling
	ptp: ocp: Limit signal/freq counts in summary output functions
	bridge: netfilter: Fix forwarding of fragmented packets
	ice: fix vf->num_mac count with port representors
	ice: Fix LACP bonds without SRIOV environment
	idpf: fix null-ptr-deref in idpf_features_check
	loop: don't require ->write_iter for writable files in loop_configure
	pinctrl: qcom: switch to devm_register_sys_off_handler()
	net: dwmac-sun8i: Use parsed internal PHY address instead of 1
	net: lan743x: Restore SGMII CTRL register on resume
	io_uring: fix overflow resched cqe reordering
	idpf: fix idpf_vport_splitq_napi_poll()
	sch_hfsc: Fix qlen accounting bug when using peek in hfsc_enqueue()
	octeontx2-pf: Add AF_XDP non-zero copy support
	net/tipc: fix slab-use-after-free Read in tipc_aead_encrypt_done
	octeontx2-af: Set LMT_ENA bit for APR table entries
	octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG
	clk: s2mps11: initialise clk_hw_onecell_data::num before accessing ::hws[] in probe()
	crypto: algif_hash - fix double free in hash_accept
	padata: do not leak refcount in reorder_work
	can: slcan: allow reception of short error messages
	can: bcm: add locking for bcm_op runtime updates
	can: bcm: add missing rcu read protection for procfs content
	ASoC: SOF: ipc4-control: Use SOF_CTRL_CMD_BINARY as numid for bytes_ext
	ASoC: SOF: Intel: hda-bus: Use PIO mode on ACE2+ platforms
	ASoc: SOF: topology: connect DAI to a single DAI link
	ASoC: SOF: ipc4-pcm: Delay reporting is only supported for playback direction
	ALSA: pcm: Fix race of buffer access at PCM OSS layer
	ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14ASP10
	llc: fix data loss when reading from a socket in llc_ui_recvmsg()
	can: kvaser_pciefd: Continue parsing DMA buf after dropped RX
	can: kvaser_pciefd: Fix echo_skb race
	net: dsa: microchip: linearize skb for tail-tagging switches
	vmxnet3: update MTU after device quiesce
	pmdomain: renesas: rcar: Remove obsolete nullify checks
	pmdomain: core: Fix error checking in genpd_dev_pm_attach_by_id()
	platform/x86: dell-wmi-sysman: Avoid buffer overflow in current_password_store()
	thermal: intel: x86_pkg_temp_thermal: Fix bogus trip temperature
	drm/edid: fixed the bug that hdr metadata was not reset
	smb: client: Fix use-after-free in cifs_fill_dirent
	arm64: dts: marvell: uDPU: define pinctrl state for alarm LEDs
	smb: client: Reset all search buffer pointers when releasing buffer
	Revert "drm/amd: Keep display off while going into S4"
	Input: xpad - add more controllers
	highmem: add folio_test_partial_kmap()
	memcg: always call cond_resched() after fn()
	mm/page_alloc.c: avoid infinite retries caused by cpuset race
	mm: mmap: map MAP_STACK to VM_NOHUGEPAGE only if THP is enabled
	mm: vmalloc: actually use the in-place vrealloc region
	mm: vmalloc: only zero-init on vrealloc shrink
	nilfs2: fix deadlock warnings caused by lock dependency in init_nilfs()
	Bluetooth: btmtksdio: Check function enabled before doing close
	Bluetooth: btmtksdio: Do close if SDIO card removed without close
	Revert "arm64: dts: allwinner: h6: Use RSB for AXP805 PMIC connection"
	ksmbd: fix stream write failure
	platform/x86: think-lmi: Fix attribute name usage for non-compliant items
	spi: use container_of_cont() for to_spi_device()
	spi: spi-fsl-dspi: restrict register range for regmap access
	spi: spi-fsl-dspi: Halt the module after a new message transfer
	spi: spi-fsl-dspi: Reset SR flags before sending a new message
	err.h: move IOMEM_ERR_PTR() to err.h
	gcc-15: make 'unterminated string initialization' just a warning
	gcc-15: disable '-Wunterminated-string-initialization' entirely for now
	Fix mis-uses of 'cc-option' for warning disablement
	kbuild: Properly disable -Wunterminated-string-initialization for clang
	drm/amd/display: Exit idle optimizations before accessing PHY
	bpf: abort verification if env->cur_state->loop_entry != NULL
	serial: sh-sci: Save and restore more registers
	drm/amdkfd: Correct F8_MODE for gfx950
	watchdog: aspeed: fix 64-bit division
	pinctrl: tegra: Fix off by one in tegra_pinctrl_get_group()
	i3c: master: svc: Fix implicit fallthrough in svc_i3c_master_ibi_work()
	x86/mm/init: Handle the special case of device private pages in add_pages(), to not increase max_pfn and trigger dma_addressing_limited() bounce buffers bounce buffers
	drm/gem: Internally test import_attach for imported objects
	Linux 6.12.31

Change-Id: I017795966fb764f9320a6a0df1571d19e5e631fe
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2025-07-03 07:19:01 +00:00
Greg Kroah-Hartman 05cc417ff3 Merge 0d508cefcd ("vdpa/mlx5: Fix mlx5_vdpa_get_config() endianness on big-endian machines") into android16-6.12-lts
Steps on the way to 6.12.31

Resolves merge conflicts in:
	drivers/media/usb/uvc/uvc_ctrl.c

Change-Id: I663a7a27e554e5a9d426532ff17f7dffc9619d22
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2025-07-02 07:03:57 +00:00
Yongliang Gao 58beaa1aee rcu/cpu_stall_cputime: fix the hardirq count for x86 architecture
[ Upstream commit da6b85598af30e9fec34d82882d7e1e39f3da769 ]

When counting the number of hardirqs in the x86 architecture,
it is essential to add arch_irq_stat_cpu to ensure accuracy.

For example, a CPU loop within the rcu_read_lock function.

Before:
[   70.910184] rcu: INFO: rcu_preempt self-detected stall on CPU
[   70.910436] rcu:     3-....: (4999 ticks this GP) idle=***
[   70.910711] rcu:              hardirqs   softirqs   csw/system
[   70.910870] rcu:      number:        0        657            0
[   70.911024] rcu:     cputime:        0          0         2498   ==> 2498(ms)
[   70.911278] rcu:     (t=5001 jiffies g=3677 q=29 ncpus=8)

After:
[   68.046132] rcu: INFO: rcu_preempt self-detected stall on CPU
[   68.046354] rcu:     2-....: (4999 ticks this GP) idle=***
[   68.046628] rcu:              hardirqs   softirqs   csw/system
[   68.046793] rcu:      number:     2498        663            0
[   68.046951] rcu:     cputime:        0          0         2496   ==> 2496(ms)
[   68.047244] rcu:     (t=5000 jiffies g=3825 q=4 ncpus=8)

Fixes: be42f00b73 ("rcu: Add RCU stall diagnosis information")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202501090842.SfI6QPGS-lkp@intel.com/
Signed-off-by: Yongliang Gao <leonylgao@tencent.com>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Link: https://lore.kernel.org/r/20250216084109.3109837-1-leonylgao@gmail.com
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-06-19 15:31:30 +02:00
Ankur Arora fcabb69674 rcu: handle unstable rdp in rcu_read_unlock_strict()
[ Upstream commit fcf0e25ad4c8d14d2faab4d9a17040f31efce205 ]

rcu_read_unlock_strict() can be called with preemption enabled
which can make for an unstable rdp and a racy norm value.

Fix this by dropping the preempt-count in __rcu_read_unlock()
after the call to rcu_read_unlock_strict(), adjusting the
preempt-count check appropriately.

Suggested-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-05-29 11:03:02 +02:00
Ankur Arora 5cdaa970d7 rcu: handle quiescent states for PREEMPT_RCU=n, PREEMPT_COUNT=y
[ Upstream commit 83b28cfe796464ebbde1cf7916c126da6d572685 ]

With PREEMPT_RCU=n, cond_resched() provides urgently needed quiescent
states for read-side critical sections via rcu_all_qs().
One reason why this was needed: lacking preempt-count, the tick
handler has no way of knowing whether it is executing in a
read-side critical section or not.

With (PREEMPT_LAZY=y, PREEMPT_DYNAMIC=n), we get (PREEMPT_COUNT=y,
PREEMPT_RCU=n). In this configuration cond_resched() is a stub and
does not provide quiescent states via rcu_all_qs().
(PREEMPT_RCU=y provides this information via rcu_read_unlock() and
its nesting counter.)

So, use the availability of preempt_count() to report quiescent states
in rcu_flavor_sched_clock_irq().

Suggested-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-05-29 11:03:02 +02:00
Paul E. McKenney 1a4a834f2a rcu: Fix get_state_synchronize_rcu_full() GP-start detection
[ Upstream commit 85aad7cc417877054c65bd490dc037b087ef21b4 ]

The get_state_synchronize_rcu_full() and poll_state_synchronize_rcu_full()
functions use the root rcu_node structure's ->gp_seq field to detect
the beginnings and ends of grace periods, respectively.  This choice is
necessary for the poll_state_synchronize_rcu_full() function because
(give or take counter wrap), the following sequence is guaranteed not
to trigger:

	get_state_synchronize_rcu_full(&rgos);
	synchronize_rcu();
	WARN_ON_ONCE(!poll_state_synchronize_rcu_full(&rgos));

The RCU callbacks that awaken synchronize_rcu() instances are
guaranteed not to be invoked before the root rcu_node structure's
->gp_seq field is updated to indicate the end of the grace period.
However, these callbacks might start being invoked immediately
thereafter, in particular, before rcu_state.gp_seq has been updated.
Therefore, poll_state_synchronize_rcu_full() must refer to the
root rcu_node structure's ->gp_seq field.  Because this field is
updated under this structure's ->lock, any code following a call to
poll_state_synchronize_rcu_full() will be fully ordered after the
full grace-period computation, as is required by RCU's memory-ordering
semantics.

By symmetry, the get_state_synchronize_rcu_full() function should also
use this same root rcu_node structure's ->gp_seq field.  But it turns out
that symmetry is profoundly (though extremely infrequently) destructive
in this case.  To see this, consider the following sequence of events:

1.	CPU 0 starts a new grace period, and updates rcu_state.gp_seq
	accordingly.

2.	As its first step of grace-period initialization, CPU 0 examines
	the current CPU hotplug state and decides that it need not wait
	for CPU 1, which is currently offline.

3.	CPU 1 comes online, and updates its state.  But this does not
	affect the current grace period, but rather the one after that.
	After all, CPU 1 was offline when the current grace period
	started, so all pre-existing RCU readers on CPU 1 must have
	completed or been preempted before it last went offline.
	The current grace period therefore has nothing it needs to wait
	for on CPU 1.

4.	CPU 1 switches to an rcutorture kthread which is running
	rcutorture's rcu_torture_reader() function, which starts a new
	RCU reader.

5.	CPU 2 is running rcutorture's rcu_torture_writer() function
	and collects a new polled grace-period "cookie" using
	get_state_synchronize_rcu_full().  Because the newly started
	grace period has not completed initialization, the root rcu_node
	structure's ->gp_seq field has not yet been updated to indicate
	that this new grace period has already started.

	This cookie is therefore set up for the end of the current grace
	period (rather than the end of the following grace period).

6.	CPU 0 finishes grace-period initialization.

7.	If CPU 1’s rcutorture reader is preempted, it will be added to
	the ->blkd_tasks list, but because CPU 1’s ->qsmask bit is not
	set in CPU 1's leaf rcu_node structure, the ->gp_tasks pointer
	will not be updated.  Thus, this grace period will not wait on
	it.  Which is only fair, given that the CPU did not come online
	until after the grace period officially started.

8.	CPUs 0 and 2 then detect the new grace period and then report
	a quiescent state to the RCU core.

9.	Because CPU 1 was offline at the start of the current grace
	period, CPUs 0 and 2 are the only CPUs that this grace period
	needs to wait on.  So the grace period ends and post-grace-period
	cleanup starts.  In particular, the root rcu_node structure's
	->gp_seq field is updated to indicate that this grace period
	has now ended.

10.	CPU 2 continues running rcu_torture_writer() and sees that,
	from the viewpoint of the root rcu_node structure consulted by
	the poll_state_synchronize_rcu_full() function, the grace period
	has ended.  It therefore updates state accordingly.

11.	CPU 1 is still running the same RCU reader, which notices this
	update and thus complains about the too-short grace period.

The fix is for the get_state_synchronize_rcu_full() function to use
rcu_state.gp_seq instead of the root rcu_node structure's ->gp_seq field.
With this change in place, if step 5's cookie indicates that the grace
period has not yet started, then any prior code executed by CPU 2 must
have happened before CPU 1 came online.  This will in turn prevent CPU
1's code in steps 3 and 11 from spanning CPU 2's grace-period wait,
thus preventing CPU 1 from being subjected to a too-short grace period.

This commit therefore makes this change.  Note that there is no change to
the poll_state_synchronize_rcu_full() function, which as noted above,
must continue to use the root rcu_node structure's ->gp_seq field.
This is of course an asymmetry between these two functions, but is an
asymmetry that is absolutely required for correct operation.  It is a
common human tendency to greatly value symmetry, and sometimes symmetry
is a wonderful thing.  Other times, symmetry results in poor performance.
But in this case, symmetry is just plain wrong.

Nevertheless, the asymmetry does require an additional adjustment.
It is possible for get_state_synchronize_rcu_full() to see a given
grace period as having started, but for an immediately following
poll_state_synchronize_rcu_full() to see it as having not yet started.
Given the current rcu_seq_done_exact() implementation, this will
result in a false-positive indication that the grace period is done
from poll_state_synchronize_rcu_full().  This is dealt with by making
rcu_seq_done_exact() reach back three grace periods rather than just
two of them.

However, simply changing get_state_synchronize_rcu_full() function to
use rcu_state.gp_seq instead of the root rcu_node structure's ->gp_seq
field results in a theoretical bug in kernels booted with
rcutree.rcu_normal_wake_from_gp=1 due to the following sequence of
events:

o	The rcu_gp_init() function invokes rcu_seq_start() to officially
	start a new grace period.

o	A new RCU reader begins, referencing X from some RCU-protected
	list.  The new grace period is not obligated to wait for this
	reader.

o	An updater removes X, then calls synchronize_rcu(), which queues
	a wait element.

o	The grace period ends, awakening the updater, which frees X
	while the reader is still referencing it.

The reason that this is theoretical is that although the grace period
has officially started, none of the CPUs are officially aware of this,
and thus will have to assume that the RCU reader pre-dated the start of
the grace period. Detailed explanation can be found at [2] and [3].

Except for kernels built with CONFIG_PROVE_RCU=y, which use the polled
grace-period APIs, which can and do complain bitterly when this sequence
of events occurs.  Not only that, there might be some future RCU
grace-period mechanism that pulls this sequence of events from theory
into practice.  This commit therefore also pulls the call to
rcu_sr_normal_gp_init() to precede that to rcu_seq_start().

Although this fixes commit 91a967fd69 ("rcu: Add full-sized polling
for get_completed*() and poll_state*()"), it is not clear that it is
worth backporting this commit.  First, it took me many weeks to convince
rcutorture to reproduce this more frequently than once per year.
Second, this cannot be reproduced at all without frequent CPU-hotplug
operations, as in waiting all of 50 milliseconds from the end of the
previous operation until starting the next one.  Third, the TREE03.boot
settings cause multi-millisecond delays during RCU grace-period
initialization, which greatly increase the probability of the above
sequence of events.  (Don't do this in production workloads!) Fourth,
the TREE03 rcutorture scenario was modified to use four-CPU guest OSes,
to have a single-rcu_node combining tree, no testing of RCU priority
boosting, and no random preemption, and these modifications were
necessary to reproduce this issue in a reasonable timeframe. Fifth,
extremely heavy use of get_state_synchronize_rcu_full() and/or
poll_state_synchronize_rcu_full() is required to reproduce this, and as
of v6.12, only kfree_rcu() uses it, and even then not particularly
heavily.

[boqun: Apply the fix [1], and add the comment before the moved
rcu_sr_normal_gp_init(). Additional links are added for explanation.]

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Tested-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Link: https://lore.kernel.org/rcu/d90bd6d9-d15c-4b9b-8a69-95336e74e8f4@paulmck-laptop/ [1]
Link: https://lore.kernel.org/rcu/20250303001507.GA3994772@joelnvbox/ [2]
Link: https://lore.kernel.org/rcu/Z8bcUsZ9IpRi1QoP@pc636/ [3]
Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-05-29 11:02:30 +02:00
Greg Kroah-Hartman 53b1477e59 Merge 9e79fdabd5 ("Revert "openvswitch: switch to per-action label counting in conntrack"") into android16-6.12
Steps on the way to 6.12.20

Resolves merge conflicts in:
	mm/userfaultfd.c

Change-Id: I315faea2e1375e21d4c743d33f28f7f2dd56fd14
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2025-04-22 07:05:46 +00:00
Uladzislau Rezki (Sony) a74979dce9 mm/slab/kvfree_rcu: Switch to WQ_MEM_RECLAIM wq
commit dfd3df31c9db752234d7d2e09bef2aeabb643ce4 upstream.

Currently kvfree_rcu() APIs use a system workqueue which is
"system_unbound_wq" to driver RCU machinery to reclaim a memory.

Recently, it has been noted that the following kernel warning can
be observed:

<snip>
workqueue: WQ_MEM_RECLAIM nvme-wq:nvme_scan_work is flushing !WQ_MEM_RECLAIM events_unbound:kfree_rcu_work
  WARNING: CPU: 21 PID: 330 at kernel/workqueue.c:3719 check_flush_dependency+0x112/0x120
  Modules linked in: intel_uncore_frequency(E) intel_uncore_frequency_common(E) skx_edac(E) ...
  CPU: 21 UID: 0 PID: 330 Comm: kworker/u144:6 Tainted: G            E      6.13.2-0_g925d379822da #1
  Hardware name: Wiwynn Twin Lakes MP/Twin Lakes Passive MP, BIOS YMM20 02/01/2023
  Workqueue: nvme-wq nvme_scan_work
  RIP: 0010:check_flush_dependency+0x112/0x120
  Code: 05 9a 40 14 02 01 48 81 c6 c0 00 00 00 48 8b 50 18 48 81 c7 c0 00 00 00 48 89 f9 48 ...
  RSP: 0018:ffffc90000df7bd8 EFLAGS: 00010082
  RAX: 000000000000006a RBX: ffffffff81622390 RCX: 0000000000000027
  RDX: 00000000fffeffff RSI: 000000000057ffa8 RDI: ffff88907f960c88
  RBP: 0000000000000000 R08: ffffffff83068e50 R09: 000000000002fffd
  R10: 0000000000000004 R11: 0000000000000000 R12: ffff8881001a4400
  R13: 0000000000000000 R14: ffff88907f420fb8 R15: 0000000000000000
  FS:  0000000000000000(0000) GS:ffff88907f940000(0000) knlGS:0000000000000000
  CR2: 00007f60c3001000 CR3: 000000107d010005 CR4: 00000000007726f0
  PKRU: 55555554
  Call Trace:
   <TASK>
   ? __warn+0xa4/0x140
   ? check_flush_dependency+0x112/0x120
   ? report_bug+0xe1/0x140
   ? check_flush_dependency+0x112/0x120
   ? handle_bug+0x5e/0x90
   ? exc_invalid_op+0x16/0x40
   ? asm_exc_invalid_op+0x16/0x20
   ? timer_recalc_next_expiry+0x190/0x190
   ? check_flush_dependency+0x112/0x120
   ? check_flush_dependency+0x112/0x120
   __flush_work.llvm.1643880146586177030+0x174/0x2c0
   flush_rcu_work+0x28/0x30
   kvfree_rcu_barrier+0x12f/0x160
   kmem_cache_destroy+0x18/0x120
   bioset_exit+0x10c/0x150
   disk_release.llvm.6740012984264378178+0x61/0xd0
   device_release+0x4f/0x90
   kobject_put+0x95/0x180
   nvme_put_ns+0x23/0xc0
   nvme_remove_invalid_namespaces+0xb3/0xd0
   nvme_scan_work+0x342/0x490
   process_scheduled_works+0x1a2/0x370
   worker_thread+0x2ff/0x390
   ? pwq_release_workfn+0x1e0/0x1e0
   kthread+0xb1/0xe0
   ? __kthread_parkme+0x70/0x70
   ret_from_fork+0x30/0x40
   ? __kthread_parkme+0x70/0x70
   ret_from_fork_asm+0x11/0x20
   </TASK>
  ---[ end trace 0000000000000000 ]---
<snip>

To address this switch to use of independent WQ_MEM_RECLAIM
workqueue, so the rules are not violated from workqueue framework
point of view.

Apart of that, since kvfree_rcu() does reclaim memory it is worth
to go with WQ_MEM_RECLAIM type of wq because it is designed for
this purpose.

Fixes: 6c6c47b063 ("mm, slab: call kvfree_rcu_barrier() from kmem_cache_destroy()"),
Reported-by: Keith Busch <kbusch@kernel.org>
Closes: https://lore.kernel.org/all/Z7iqJtCjHKfo8Kho@kbusch-mbp/
Cc: stable@vger.kernel.org
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-03-22 12:54:09 -07:00
Greg Kroah-Hartman 2bab7bdb88 Merge da7df496b8 ("perf trace: Avoid garbage when not printing a syscall's arguments") into android16-6.12
Steps on the way to 6.12.2

Resolves merge conflicts in:
	fs/fuse/fuse_i.h

Change-Id: If765bb10099fb7efad53a0a4bcda888cd571ac97
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2024-12-13 02:48:11 -08:00
Uladzislau Rezki (Sony) e63f11b15d rcuscale: Do a proper cleanup if kfree_scale_init() fails
[ Upstream commit 812a1c3b9f7c36d9255f0d29d0a3d324e2f52321 ]

A static analyzer for C, Smatch, reports and triggers below
warnings:

   kernel/rcu/rcuscale.c:1215 rcu_scale_init()
   warn: inconsistent returns 'global &fullstop_mutex'.

The checker complains about, we do not unlock the "fullstop_mutex"
mutex, in case of hitting below error path:

<snip>
...
    if (WARN_ON_ONCE(jiffies_at_lazy_cb - jif_start < 2 * HZ)) {
        pr_alert("ERROR: call_rcu() CBs are not being lazy as expected!\n");
        WARN_ON_ONCE(1);
        return -1;
        ^^^^^^^^^^
...
<snip>

it happens because "-1" is returned right away instead of
doing a proper unwinding.

Fix it by jumping to "unwind" label instead of returning -1.

Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Closes: https://lore.kernel.org/rcu/ZxfTrHuEGtgnOYWp@pc636/T/
Fixes: 084e04fff1 ("rcuscale: Add laziness and kfree tests")
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-12-05 14:01:21 +01:00
Zqiang 224b620289 rcu/nocb: Fix missed RCU barrier on deoffloading
[ Upstream commit 2996980e20b7a54a1869df15b3445374b850b155 ]

Currently, running rcutorture test with torture_type=rcu fwd_progress=8
n_barrier_cbs=8 nocbs_nthreads=8 nocbs_toggle=100 onoff_interval=60
test_boost=2, will trigger the following warning:

	WARNING: CPU: 19 PID: 100 at kernel/rcu/tree_nocb.h:1061 rcu_nocb_rdp_deoffload+0x292/0x2a0
	RIP: 0010:rcu_nocb_rdp_deoffload+0x292/0x2a0
	 Call Trace:
	  <TASK>
	  ? __warn+0x7e/0x120
	  ? rcu_nocb_rdp_deoffload+0x292/0x2a0
	  ? report_bug+0x18e/0x1a0
	  ? handle_bug+0x3d/0x70
	  ? exc_invalid_op+0x18/0x70
	  ? asm_exc_invalid_op+0x1a/0x20
	  ? rcu_nocb_rdp_deoffload+0x292/0x2a0
	  rcu_nocb_cpu_deoffload+0x70/0xa0
	  rcu_nocb_toggle+0x136/0x1c0
	  ? __pfx_rcu_nocb_toggle+0x10/0x10
	  kthread+0xd1/0x100
	  ? __pfx_kthread+0x10/0x10
	  ret_from_fork+0x2f/0x50
	  ? __pfx_kthread+0x10/0x10
	  ret_from_fork_asm+0x1a/0x30
	  </TASK>

CPU0                               CPU2                          CPU3
//rcu_nocb_toggle             //nocb_cb_wait                   //rcutorture

// deoffload CPU1             // process CPU1's rdp
rcu_barrier()
    rcu_segcblist_entrain()
        rcu_segcblist_add_len(1);
        // len == 2
        // enqueue barrier
        // callback to CPU1's
        // rdp->cblist
                             rcu_do_batch()
                                 // invoke CPU1's rdp->cblist
                                 // callback
                                 rcu_barrier_callback()
                                                             rcu_barrier()
                                                               mutex_lock(&rcu_state.barrier_mutex);
                                                               // still see len == 2
                                                               // enqueue barrier callback
                                                               // to CPU1's rdp->cblist
                                                               rcu_segcblist_entrain()
                                                                   rcu_segcblist_add_len(1);
                                                                   // len == 3
                                 // decrement len
                                 rcu_segcblist_add_len(-2);
                             kthread_parkme()

// CPU1's rdp->cblist len == 1
// Warn because there is
// still a pending barrier
// trigger warning
WARN_ON_ONCE(rcu_segcblist_n_cbs(&rdp->cblist));
cpus_read_unlock();

                                                                // wait CPU1 to comes online and
                                                                // invoke barrier callback on
                                                                // CPU1 rdp's->cblist
                                                                wait_for_completion(&rcu_state.barrier_completion);
// deoffload CPU4
cpus_read_lock()
  rcu_barrier()
    mutex_lock(&rcu_state.barrier_mutex);
    // block on barrier_mutex
    // wait rcu_barrier() on
    // CPU3 to unlock barrier_mutex
    // but CPU3 unlock barrier_mutex
    // need to wait CPU1 comes online
    // when CPU1 going online will block on cpus_write_lock

The above scenario will not only trigger a WARN_ON_ONCE(), but also
trigger a deadlock.

Thanks to nocb locking, a second racing rcu_barrier() on an offline CPU
will either observe the decremented callback counter down to 0 and spare
the callback enqueue, or rcuo will observe the new callback and keep
rdp->nocb_cb_sleep to false.

Therefore check rdp->nocb_cb_sleep before parking to make sure no
further rcu_barrier() is waiting on the rdp.

Fixes: 1fcb932c8b ("rcu/nocb: Simplify (de-)offloading state machine")
Suggested-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Zqiang <qiang.zhang1211@gmail.com>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-12-05 14:01:19 +01:00
Uladzislau Rezki (Sony) 5ced426d97 rcu/kvfree: Fix data-race in __mod_timer / kvfree_call_rcu
[ Upstream commit a23da88c6c80e41e0503e0b481a22c9eea63f263 ]

KCSAN reports a data race when access the krcp->monitor_work.timer.expires
variable in the schedule_delayed_monitor_work() function:

<snip>
BUG: KCSAN: data-race in __mod_timer / kvfree_call_rcu

read to 0xffff888237d1cce8 of 8 bytes by task 10149 on cpu 1:
 schedule_delayed_monitor_work kernel/rcu/tree.c:3520 [inline]
 kvfree_call_rcu+0x3b8/0x510 kernel/rcu/tree.c:3839
 trie_update_elem+0x47c/0x620 kernel/bpf/lpm_trie.c:441
 bpf_map_update_value+0x324/0x350 kernel/bpf/syscall.c:203
 generic_map_update_batch+0x401/0x520 kernel/bpf/syscall.c:1849
 bpf_map_do_batch+0x28c/0x3f0 kernel/bpf/syscall.c:5143
 __sys_bpf+0x2e5/0x7a0
 __do_sys_bpf kernel/bpf/syscall.c:5741 [inline]
 __se_sys_bpf kernel/bpf/syscall.c:5739 [inline]
 __x64_sys_bpf+0x43/0x50 kernel/bpf/syscall.c:5739
 x64_sys_call+0x2625/0x2d60 arch/x86/include/generated/asm/syscalls_64.h:322
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xc9/0x1c0 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

write to 0xffff888237d1cce8 of 8 bytes by task 56 on cpu 0:
 __mod_timer+0x578/0x7f0 kernel/time/timer.c:1173
 add_timer_global+0x51/0x70 kernel/time/timer.c:1330
 __queue_delayed_work+0x127/0x1a0 kernel/workqueue.c:2523
 queue_delayed_work_on+0xdf/0x190 kernel/workqueue.c:2552
 queue_delayed_work include/linux/workqueue.h:677 [inline]
 schedule_delayed_monitor_work kernel/rcu/tree.c:3525 [inline]
 kfree_rcu_monitor+0x5e8/0x660 kernel/rcu/tree.c:3643
 process_one_work kernel/workqueue.c:3229 [inline]
 process_scheduled_works+0x483/0x9a0 kernel/workqueue.c:3310
 worker_thread+0x51d/0x6f0 kernel/workqueue.c:3391
 kthread+0x1d1/0x210 kernel/kthread.c:389
 ret_from_fork+0x4b/0x60 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244

Reported by Kernel Concurrency Sanitizer on:
CPU: 0 UID: 0 PID: 56 Comm: kworker/u8:4 Not tainted 6.12.0-rc2-syzkaller-00050-g5b7c893ed5ed #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
Workqueue: events_unbound kfree_rcu_monitor
<snip>

kfree_rcu_monitor() rearms the work if a "krcp" has to be still
offloaded and this is done without holding krcp->lock, whereas
the kvfree_call_rcu() holds it.

Fix it by acquiring the "krcp->lock" for kfree_rcu_monitor() so
both functions do not race anymore.

Reported-by: syzbot+061d370693bdd99f9d34@syzkaller.appspotmail.com
Link: https://lore.kernel.org/lkml/ZxZ68KmHDQYU0yfD@pc636/T/
Fixes: 8fc5494ad5 ("rcu/kvfree: Move need_offload_krc() out of krcp->lock")
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-12-05 14:01:19 +01:00
Michal Schmidt fc5e1ad3bb rcu/srcutiny: don't return before reenabling preemption
[ Upstream commit 0ea3acbc804c2d5a165442cdf9c0526f4d324888 ]

Code after the return statement is dead. Enable preemption before
returning from srcu_drive_gp().

This will be important when/if PREEMPT_AUTO (lazy resched) gets merged.

Fixes: 65b4a59557 ("srcu: Make Tiny SRCU explicitly disable preemption")
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-12-05 14:01:19 +01:00
Greg Kroah-Hartman e3cec126d4 Merge tag 'v6.12-rc4' into android-mainline
Linux 6.12-rc4

Change-Id: I90e653f10aa32734dc451ff75a3ea5a9f11ecbb2
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2024-10-31 15:51:26 +00:00
Ingo Molnar be602cde65 Merge branch 'linus' into sched/urgent, to resolve conflict
Conflicts:
	kernel/sched/ext.c

There's a context conflict between this upstream commit:

  3fdb9ebcec sched_ext: Start schedulers with consistent p->scx.slice values

... and this fix in sched/urgent:

  98442f0ccd sched: Fix delayed_dequeue vs switched_from_fair()

Resolve it.

Signed-off-by: Ingo Molnar <mingo@kernel.org>
2024-10-17 09:58:07 +02:00
Greg Kroah-Hartman 842cf3e93e Merge tag 'v6.12-rc3' into android-mainline
Linux 6.12-rc3

Change-Id: I0de0d98513f7cacf9630e2d5a59f6697ca6b9f2a
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2024-10-14 11:10:17 +02:00
Peter Zijlstra cd9626e9eb sched/fair: Fix external p->on_rq users
Sean noted that ever since commit 152e11f6df ("sched/fair: Implement
delayed dequeue") KVM's preemption notifiers have started
mis-classifying preemption vs blocking.

Notably p->on_rq is no longer sufficient to determine if a task is
runnable or blocked -- the aforementioned commit introduces tasks that
remain on the runqueue even through they will not run again, and
should be considered blocked for many cases.

Add the task_is_runnable() helper to classify things and audit all
external users of the p->on_rq state. Also add a few comments.

Fixes: 152e11f6df ("sched/fair: Implement delayed dequeue")
Reported-by: Sean Christopherson <seanjc@google.com>
Tested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lkml.kernel.org/r/20241010091843.GK33184@noisy.programming.kicks-ass.net
2024-10-14 09:14:35 +02:00
Frederic Weisbecker f7345ccc62 rcu/nocb: Fix rcuog wake-up from offline softirq
After a CPU has set itself offline and before it eventually calls
rcutree_report_cpu_dead(), there are still opportunities for callbacks
to be enqueued, for example from a softirq. When that happens on NOCB,
the rcuog wake-up is deferred through an IPI to an online CPU in order
not to call into the scheduler and risk arming the RT-bandwidth after
hrtimers have been migrated out and disabled.

But performing a synchronized IPI from a softirq is buggy as reported in
the following scenario:

        WARNING: CPU: 1 PID: 26 at kernel/smp.c:633 smp_call_function_single
        Modules linked in: rcutorture torture
        CPU: 1 UID: 0 PID: 26 Comm: migration/1 Not tainted 6.11.0-rc1-00012-g9139f93209d1 #1
        Stopper: multi_cpu_stop+0x0/0x320 <- __stop_cpus+0xd0/0x120
        RIP: 0010:smp_call_function_single
        <IRQ>
        swake_up_one_online
        __call_rcu_nocb_wake
        __call_rcu_common
        ? rcu_torture_one_read
        call_timer_fn
        __run_timers
        run_timer_softirq
        handle_softirqs
        irq_exit_rcu
        ? tick_handle_periodic
        sysvec_apic_timer_interrupt
        </IRQ>

Fix this with forcing deferred rcuog wake up through the NOCB timer when
the CPU is offline. The actual wake up will happen from
rcutree_report_cpu_dead().

Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202409231644.4c55582d-lkp@intel.com
Fixes: 9139f93209 ("rcu/nocb: Fix RT throttling hrtimer armed from offline CPU")
Reviewed-by: "Joel Fernandes (Google)" <joel@joelfernandes.org>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-10-10 22:18:19 +05:30
Matthias Maennich 32fec317a6 Merge 8cf0b93919 ("Linux 6.12-rc2") into android-mainline
Bug: 367265496
Change-Id: I5fec4dbf7e9cd941e3fcd8adca6e0d26ba6adbfe
Signed-off-by: Matthias Maennich <maennich@google.com>
2024-10-07 17:20:05 +00:00
Uladzislau Rezki (Sony) 3c5d61ae91 rcu/kvfree: Refactor kvfree_rcu_queue_batch()
Improve readability of kvfree_rcu_queue_batch() function
in away that, after a first batch queuing, the loop is break
and success value is returned to a caller.

There is no reason to loop and check batches further as all
outstanding objects have already been picked and attached to
a certain batch to complete an offloading.

Fixes: 2b55d6a42d ("rcu/kvfree: Add kvfree_rcu_barrier() API")
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Closes: https://lore.kernel.org/lkml/ZvWUt2oyXRsvJRNc@pc636/T/
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
2024-10-01 18:30:42 +02:00
Matthias Maennich f5bf391ca4 Merge 4a39ac5b7d ("Merge tag 'random-6.12-rc1-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/crng/random") into android-mainline
Steps on the way to 6.12-rc1

Bug: 367265496
Change-Id: I115d487c6294c249dd30b708b3164f34be34d874
Signed-off-by: Matthias Maennich <maennich@google.com>
2024-09-27 02:18:36 +00:00
Matthias Maennich df2ebc4bcb Merge efdfcd40ad ("Merge tag 'lkmm.2024.09.14b' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu") into android-mainline
Steps on the way to 6.12-rc1

Bug: 367265496
Change-Id: I0a0d83175270f57ba857b91e7c1c403e939fa34f
Signed-off-by: Matthias Maennich <maennich@google.com>
2024-09-27 01:47:34 +00:00
Matthias Maennich b5aeebd6f1 Merge c903327d32 ("Merge tag 'printk-for-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux") into android-mainline
Steps on the way to 6.12-rc1

Bug: 367265496
Change-Id: I0d94aa9be16f183bf187f91dc4916add32722775
Signed-off-by: Matthias Maennich <maennich@google.com>
2024-09-25 08:51:49 +00:00
Linus Torvalds bdf56c7580 Merge tag 'slab-for-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab
Pull slab updates from Vlastimil Babka:
 "This time it's mostly refactoring and improving APIs for slab users in
  the kernel, along with some debugging improvements.

   - kmem_cache_create() refactoring (Christian Brauner)

     Over the years have been growing new parameters to
     kmem_cache_create() where most of them are needed only for a small
     number of caches - most recently the rcu_freeptr_offset parameter.

     To avoid adding new parameters to kmem_cache_create() and adjusting
     all its callers, or creating new wrappers such as
     kmem_cache_create_rcu(), we can now pass extra parameters using the
     new struct kmem_cache_args. Not explicitly initialized fields
     default to values interpreted as unused.

     kmem_cache_create() is for now a wrapper that works both with the
     new form: kmem_cache_create(name, object_size, args, flags) and the
     legacy form: kmem_cache_create(name, object_size, align, flags,
     ctor)

   - kmem_cache_destroy() waits for kfree_rcu()'s in flight (Vlastimil
     Babka, Uladislau Rezki)

     Since SLOB removal, kfree() is allowed for freeing objects
     allocated by kmem_cache_create(). By extension kfree_rcu() as
     allowed as well, which can allow converting simple call_rcu()
     callbacks that only do kmem_cache_free(), as there was never a
     kmem_cache_free_rcu() variant. However, for caches that can be
     destroyed e.g. on module removal, the cache owners knew to issue
     rcu_barrier() first to wait for the pending call_rcu()'s, and this
     is not sufficient for pending kfree_rcu()'s due to its internal
     batching optimizations. Ulad has provided a new
     kvfree_rcu_barrier() and to make the usage less error-prone,
     kmem_cache_destroy() calls it. Additionally, destroying
     SLAB_TYPESAFE_BY_RCU caches now again issues rcu_barrier()
     synchronously instead of using an async work, because the past
     motivation for async work no longer applies. Users of custom
     call_rcu() callbacks should however keep calling rcu_barrier()
     before cache destruction.

   - Debugging use-after-free in SLAB_TYPESAFE_BY_RCU caches (Jann Horn)

     Currently, KASAN cannot catch UAFs in such caches as it is legal to
     access them within a grace period, and we only track the grace
     period when trying to free the underlying slab page. The new
     CONFIG_SLUB_RCU_DEBUG option changes the freeing of individual
     object to be RCU-delayed, after which KASAN can poison them.

   - Delayed memcg charging (Shakeel Butt)

     In some cases, the memcg is uknown at allocation time, such as
     receiving network packets in softirq context. With
     kmem_cache_charge() these may be now charged later when the user
     and its memcg is known.

   - Misc fixes and improvements (Pedro Falcato, Axel Rasmussen,
     Christoph Lameter, Yan Zhen, Peng Fan, Xavier)"

* tag 'slab-for-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab: (34 commits)
  mm, slab: restore kerneldoc for kmem_cache_create()
  io_uring: port to struct kmem_cache_args
  slab: make __kmem_cache_create() static inline
  slab: make kmem_cache_create_usercopy() static inline
  slab: remove kmem_cache_create_rcu()
  file: port to struct kmem_cache_args
  slab: create kmem_cache_create() compatibility layer
  slab: port KMEM_CACHE_USERCOPY() to struct kmem_cache_args
  slab: port KMEM_CACHE() to struct kmem_cache_args
  slab: remove rcu_freeptr_offset from struct kmem_cache
  slab: pass struct kmem_cache_args to do_kmem_cache_create()
  slab: pull kmem_cache_open() into do_kmem_cache_create()
  slab: pass struct kmem_cache_args to create_cache()
  slab: port kmem_cache_create_usercopy() to struct kmem_cache_args
  slab: port kmem_cache_create_rcu() to struct kmem_cache_args
  slab: port kmem_cache_create() to struct kmem_cache_args
  slab: add struct kmem_cache_args
  slab: s/__kmem_cache_create/do_kmem_cache_create/g
  memcg: add charging of already allocated slab objects
  mm/slab: Optimize the code logic in find_mergeable()
  ...
2024-09-18 08:53:53 +02:00
Linus Torvalds 067610ebaa Merge tag 'rcu.release.v6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux
Pull RCU updates from Neeraj Upadhyay:
 "Context tracking:
   - rename context tracking state related symbols and remove references
     to "dynticks" in various context tracking state variables and
     related helpers
   - force context_tracking_enabled_this_cpu() to be inlined to avoid
     leaving a noinstr section

  CSD lock:
   - enhance CSD-lock diagnostic reports
   - add an API to provide an indication of ongoing CSD-lock stall

  nocb:
   - update and simplify RCU nocb code to handle (de-)offloading of
     callbacks only for offline CPUs
   - fix RT throttling hrtimer being armed from offline CPU

  rcutorture:
   - remove redundant rcu_torture_ops get_gp_completed fields
   - add SRCU ->same_gp_state and ->get_comp_state functions
   - add generic test for NUM_ACTIVE_*RCU_POLL* for testing RCU and SRCU
     polled grace periods
   - add CFcommon.arch for arch-specific Kconfig options
   - print number of update types in rcu_torture_write_types()
   - add rcutree.nohz_full_patience_delay testing to the TREE07 scenario
   - add a stall_cpu_repeat module parameter to test repeated CPU stalls
   - add argument to limit number of CPUs a guest OS can use in
     torture.sh

  rcustall:
   - abbreviate RCU CPU stall warnings during CSD-lock stalls
   - Allow dump_cpu_task() to be called without disabling preemption
   - defer printing stall-warning backtrace when holding rcu_node lock

  srcu:
   - make SRCU gp seq wrap-around faster
   - add KCSAN checks for concurrent updates to ->srcu_n_exp_nodelay and
     ->reschedule_count which are used in heuristics governing
     auto-expediting of normal SRCU grace periods and
     grace-period-state-machine delays
   - mark idle SRCU-barrier callbacks to help identify stuck
     SRCU-barrier callback

  rcu tasks:
   - remove RCU Tasks Rude asynchronous APIs as they are no longer used
   - stop testing RCU Tasks Rude asynchronous APIs
   - fix access to non-existent percpu regions
   - check processor-ID assumptions during chosen CPU calculation for
     callback enqueuing
   - update description of rtp->tasks_gp_seq grace-period sequence
     number
   - add rcu_barrier_cb_is_done() to identify whether a given
     rcu_barrier callback is stuck
   - mark idle Tasks-RCU-barrier callbacks
   - add *torture_stats_print() functions to print detailed diagnostics
     for Tasks-RCU variants
   - capture start time of rcu_barrier_tasks*() operation to help
     distinguish a hung barrier operation from a long series of barrier
     operations

  refscale:
   - add a TINY scenario to support tests of Tiny RCU and Tiny
     SRCU
   - optimize process_durations() operation

  rcuscale:
   - dump stacks of stalled rcu_scale_writer() instances and
     grace-period statistics when rcu_scale_writer() stalls
   - mark idle RCU-barrier callbacks to identify stuck RCU-barrier
     callbacks
   - print detailed grace-period and barrier diagnostics on
     rcu_scale_writer() hangs for Tasks-RCU variants
   - warn if async module parameter is specified for RCU implementations
     that do not have async primitives such as RCU Tasks Rude
   - make all writer tasks report upon hang
   - tolerate repeated GFP_KERNEL failure in rcu_scale_writer()
   - use special allocator for rcu_scale_writer()
   - NULL out top-level pointers to heap memory to avoid double-free
     bugs on modprobe failures
   - maintain per-task instead of per-CPU callbacks count to avoid any
     issues with migration of either tasks or callbacks
   - constify struct ref_scale_ops

  Fixes:
   - use system_unbound_wq for kfree_rcu work to avoid disturbing
     isolated CPUs

  Misc:
   - warn on unexpected rcu_state.srs_done_tail state
   - better define "atomic" for list_replace_rcu() and
     hlist_replace_rcu() routines
   - annotate struct kvfree_rcu_bulk_data with __counted_by()"

* tag 'rcu.release.v6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux: (90 commits)
  rcu: Defer printing stall-warning backtrace when holding rcu_node lock
  rcu/nocb: Remove superfluous memory barrier after bypass enqueue
  rcu/nocb: Conditionally wake up rcuo if not already waiting on GP
  rcu/nocb: Fix RT throttling hrtimer armed from offline CPU
  rcu/nocb: Simplify (de-)offloading state machine
  context_tracking: Tag context_tracking_enabled_this_cpu() __always_inline
  context_tracking, rcu: Rename rcu_dyntick trace event into rcu_watching
  rcu: Update stray documentation references to rcu_dynticks_eqs_{enter, exit}()
  rcu: Rename rcu_momentary_dyntick_idle() into rcu_momentary_eqs()
  rcu: Rename rcu_implicit_dynticks_qs() into rcu_watching_snap_recheck()
  rcu: Rename dyntick_save_progress_counter() into rcu_watching_snap_save()
  rcu: Rename struct rcu_data .exp_dynticks_snap into .exp_watching_snap
  rcu: Rename struct rcu_data .dynticks_snap into .watching_snap
  rcu: Rename rcu_dynticks_zero_in_eqs() into rcu_watching_zero_in_eqs()
  rcu: Rename rcu_dynticks_in_eqs_since() into rcu_watching_snap_stopped_since()
  rcu: Rename rcu_dynticks_in_eqs() into rcu_watching_snap_in_eqs()
  rcu: Rename rcu_dynticks_eqs_online() into rcu_watching_online()
  context_tracking, rcu: Rename rcu_dynticks_curr_cpu_in_eqs() into rcu_is_watching_curr_cpu()
  context_tracking, rcu: Rename rcu_dynticks_task*() into rcu_task*()
  refscale: Constify struct ref_scale_ops
  ...
2024-09-18 07:52:24 +02:00
Linus Torvalds c903327d32 Merge tag 'printk-for-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux
Pull printk updates from Petr Mladek:
 "This is the "last" part of the support for the new nbcon consoles.
  Where "nbcon" stays for "No Big console lock CONsoles" aka not under
  the console_lock.

  New callbacks are added to struct console:

   - write_thread() for flushing nbcon consoles in task context.

   - write_atomic() for flushing nbcon consoles in atomic context,
     including NMI.

   - con->device_lock() and device_unlock() for taking the driver
     specific lock, for example, port->lock.

  New printk-specific kthreads are created:

   - per-console kthreads which get responsible for flushing normal
     priority messages on nbcon consoles.

   - thread which gets responsible for flushing normal priority messages
     on all consoles when CONFIG_RT enabled.

  The new callbacks are called under a special per-console lock which
  has already been added back in v6.7. It allows to distinguish three
  severities: normal, emergency, and panic. A context with a higher
  priority could take over the ownership when it is safe even in the
  middle of handling a record. The panic context could do it even when
  it is not safe. But it is allowed only for the final desperate flush
  before entering the infinite loop.

  The new lock helps to flush the messages directly in emergency and
  panic contexts. But it is not enough in all situations:

   - console_lock() is still need for synchronization against boot
     consoles.

   - con->device_lock() is need for synchronization against other
     operations on the same HW, e.g. serial port speed setting,
     non-printk related read/write.

  The dependency on con->device_lock() is mutual. Any code taking the
  driver specific lock has to acquire the related nbcon console context
  as well. For example, see the new uart_port_lock() API. It provides
  the necessary synchronization against emergency and panic contexts
  where the messages are flushed only under the new per-console lock.

  Maybe surprisingly, a quite tricky part is the decision how to flush
  the consoles in various situations. It has to take into account:

   - message priority:    normal, emergency, panic

   - scheduling context:  task, atomic, deferred_legacy

   - registered consoles: boot, legacy, nbcon

   - threads are running: early boot, suspend, shutdown, panic

   - caller:              printk(), pr_flush(), printk_flush_in_panic(),
                          console_unlock(), console_start(), ...

  The primary decision is made in printk_get_console_flush_type(). It
  creates a hint what the caller should do:

   - flush nbcon consoles directly or via the kthread

   - call the legacy loop (console_unlock()) directly or via irq_work

  The existing behavior is preserved for the legacy consoles. The only
  exception is that they are not longer flushed directly from printk()
  in panic() before CPUs are stopped. But this blocking happens only
  when at least one nbcon console is registered. The motivation is to
  increase a chance to produce the crash dump. They legacy consoles
  might create a deadlock in compare with nbcon consoles. The nbcon
  console should allow to see the messages even when the crash dump
  fails.

  There are three possible ways how nbcon consoles are flushed:

   - The per-nbcon-console kthread is responsible for flushing messages
     added with the normal priority. This is the default mode.

   - The legacy loop, aka console_unlock(), is used when there is still
     a boot console registered. There is no easy way how to match an
     early console driver with a nbcon console driver. And the
     console_lock() provides the only reliable serialization at the
     moment.

     The legacy loop uses either con->write_atomic() or
     con->write_thread() callbacks depending on whether it is allowed to
     schedule. The atomic variant has to be used from printk().

   - In other situations, the messages are flushed directly using
     write_atomic() which can be called in any context, including NMI.
     It is primary needed during early boot or shutdown, in emergency
     situations, and panic.

  The emergency priority is used by a code called within
  nbcon_cpu_emergency_enter()/exit(). At the moment, it is used in four
  situations: WARN(), Oops, lockdep, and RCU stall reports.

  Finally, there is no nbcon console at the moment. It means that the
  changes should _not_ modify the existing behavior. The only exception
  is CONFIG_RT which would force offloading the legacy loop, for normal
  priority context, into the dedicated kthread"

* tag 'printk-for-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux: (54 commits)
  printk: Avoid false positive lockdep report for legacy printing
  printk: nbcon: Assign nice -20 for printing threads
  printk: Implement legacy printer kthread for PREEMPT_RT
  tty: sysfs: Add nbcon support for 'active'
  proc: Add nbcon support for /proc/consoles
  proc: consoles: Add notation to c_start/c_stop
  printk: nbcon: Show replay message on takeover
  printk: Provide helper for message prepending
  printk: nbcon: Rely on kthreads for normal operation
  printk: nbcon: Use thread callback if in task context for legacy
  printk: nbcon: Relocate nbcon_atomic_emit_one()
  printk: nbcon: Introduce printer kthreads
  printk: nbcon: Init @nbcon_seq to highest possible
  printk: nbcon: Add context to usable() and emit()
  printk: Flush console on unregister_console()
  printk: Fail pr_flush() if before SYSTEM_SCHEDULING
  printk: nbcon: Add function for printers to reacquire ownership
  printk: nbcon: Use raw_cpu_ptr() instead of open coding
  printk: Use the BITS_PER_LONG macro
  lockdep: Mark emergency sections in lockdep splats
  ...
2024-09-17 08:52:28 +02:00
Neeraj Upadhyay 355debb83b Merge branches 'context_tracking.15.08.24a', 'csd.lock.15.08.24a', 'nocb.09.09.24a', 'rcutorture.14.08.24a', 'rcustall.09.09.24a', 'srcu.12.08.24a', 'rcu.tasks.14.08.24a', 'rcu_scaling_tests.15.08.24a', 'fixes.12.08.24a' and 'misc.11.08.24a' into next.09.09.24a 2024-09-09 00:09:47 +05:30
Paul E. McKenney 1ecd9d68eb rcu: Defer printing stall-warning backtrace when holding rcu_node lock
The rcu_dump_cpu_stacks() holds the leaf rcu_node structure's ->lock
when dumping the stakcks of any CPUs stalling the current grace period.
This lock is held to prevent confusion that would otherwise occur when
the stalled CPU reported its quiescent state (and then went on to do
unrelated things) just as the backtrace NMI was heading towards it.

This has worked well, but on larger systems has recently been observed
to cause severe lock contention resulting in CSD-lock stalls and other
general unhappiness.

This commit therefore does printk_deferred_enter() before acquiring
the lock and printk_deferred_exit() after releasing it, thus deferring
the overhead of actually outputting the stack trace out of that lock's
critical section.

Reported-by: Rik van Riel <riel@surriel.com>
Suggested-by: Rik van Riel <riel@surriel.com>
Signed-off-by: "Paul E. McKenney" <paulmck@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-09-09 00:06:44 +05:30
Frederic Weisbecker 7562eed272 rcu/nocb: Remove superfluous memory barrier after bypass enqueue
Pre-GP accesses performed by the update side must be ordered against
post-GP accesses performed by the readers. This is ensured by the
bypass or nocb locking on enqueue time, followed by the fully ordered
rnp locking initiated while callbacks are accelerated, and then
propagated throughout the whole GP lifecyle associated with the
callbacks.

Therefore the explicit barrier advertizing ordering between bypass
enqueue and rcuo wakeup is superfluous. If anything, it would even only
order the first bypass callback enqueue against the rcuo wakeup and
ignore all the subsequent ones.

Remove the needless barrier.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-09-09 00:05:26 +05:30
Frederic Weisbecker 1b022b8763 rcu/nocb: Conditionally wake up rcuo if not already waiting on GP
A callback enqueuer currently wakes up the rcuo kthread if it is adding
the first non-done callback of a CPU, whether the kthread is waiting on
a grace period or not (unless the CPU is offline).

This looks like a desired behaviour because then the rcuo kthread
doesn't wait for the end of the current grace period to handle the
callback. It is accelerated right away and assigned to the next grace
period. The GP kthread is notified about that fact and iterates with
the upcoming GP without sleeping in-between.

However this best-case scenario is contradicted by a few details,
depending on the situation:

1) If the callback is a non-bypass one queued with IRQs enabled, the
   wake up only occurs if no other pending callbacks are on the list.
   Therefore the theoretical "optimization" actually applies on rare
   occasions.

2) If the callback is a non-bypass one queued with IRQs disabled, the
   situation is similar with even more uncertainty due to the deferred
   wake up.

3) If the callback is lazy, a few jiffies don't make any difference.

4) If the callback is bypass, the wake up timer is programmed 2 jiffies
   ahead by rcuo in case the regular pending queue has been handled
   in the meantime. The rare storm of callbacks can otherwise wait for
   the currently elapsing grace period to be flushed and handled.

For all those reasons, the optimization is only theoretical and
occasional. Therefore it is reasonable that callbacks enqueuers only
wake up the rcuo kthread when it is not already waiting on a grace
period to complete.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-09-09 00:05:26 +05:30
Frederic Weisbecker 9139f93209 rcu/nocb: Fix RT throttling hrtimer armed from offline CPU
After a CPU is marked offline and until it reaches its final trip to
idle, rcuo has several opportunities to be woken up, either because
a callback has been queued in the meantime or because
rcutree_report_cpu_dead() has issued the final deferred NOCB wake up.

If RCU-boosting is enabled, RCU kthreads are set to SCHED_FIFO policy.
And if RT-bandwidth is enabled, the related hrtimer might be armed.
However this then happens after hrtimers have been migrated at the
CPUHP_AP_HRTIMERS_DYING stage, which is broken as reported by the
following warning:

 Call trace:
  enqueue_hrtimer+0x7c/0xf8
  hrtimer_start_range_ns+0x2b8/0x300
  enqueue_task_rt+0x298/0x3f0
  enqueue_task+0x94/0x188
  ttwu_do_activate+0xb4/0x27c
  try_to_wake_up+0x2d8/0x79c
  wake_up_process+0x18/0x28
  __wake_nocb_gp+0x80/0x1a0
  do_nocb_deferred_wakeup_common+0x3c/0xcc
  rcu_report_dead+0x68/0x1ac
  cpuhp_report_idle_dead+0x48/0x9c
  do_idle+0x288/0x294
  cpu_startup_entry+0x34/0x3c
  secondary_start_kernel+0x138/0x158

Fix this with waking up rcuo using an IPI if necessary. Since the
existing API to deal with this situation only handles swait queue, rcuo
is only woken up from offline CPUs if it's not already waiting on a
grace period. In the worst case some callbacks will just wait for a
grace period to complete before being assigned to a subsequent one.

Reported-by: "Cheng-Jui Wang (王正睿)" <Cheng-Jui.Wang@mediatek.com>
Fixes: 5c0930ccaa ("hrtimers: Push pending hrtimers away from outgoing CPU earlier")
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-09-09 00:05:26 +05:30
Frederic Weisbecker 1fcb932c8b rcu/nocb: Simplify (de-)offloading state machine
Now that the (de-)offloading process can only apply to offline CPUs,
there is no more concurrency between rcu_core and nocb kthreads. Also
the mutation now happens on empty queues.

Therefore the state machine can be reduced to a single bit called
SEGCBLIST_OFFLOADED. Simplify the transition as follows:

* Upon offloading: queue the rdp to be added to the rcuog list and
  wait for the rcuog kthread to set the SEGCBLIST_OFFLOADED bit. Unpark
  rcuo kthread.

* Upon de-offloading: Park rcuo kthread. Queue the rdp to be removed
  from the rcuog list and wait for the rcuog kthread to clear the
  SEGCBLIST_OFFLOADED bit.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-09-09 00:03:55 +05:30
Uladzislau Rezki (Sony) 2b55d6a42d rcu/kvfree: Add kvfree_rcu_barrier() API
Add a kvfree_rcu_barrier() function. It waits until all
in-flight pointers are freed over RCU machinery. It does
not wait any GP completion and it is within its right to
return immediately if there are no outstanding pointers.

This function is useful when there is a need to guarantee
that a memory is fully freed before destroying memory caches.
For example, during unloading a kernel module.

Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
2024-08-27 14:12:51 +02:00
John Ogness 8c03273a50 rcu: Mark emergency sections in rcu stalls
Mark emergency sections wherever multiple lines of
rcu stall information are generated. In an emergency
section, every printk() call will attempt to directly
flush to the consoles using the EMERGENCY priority.

Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Acked-by: Paul E. McKenney <paulmck@kernel.org>
Link: https://lore.kernel.org/r/20240820063001.36405-35-john.ogness@linutronix.de
Signed-off-by: Petr Mladek <pmladek@suse.com>
2024-08-21 15:03:04 +02:00
Caleb Sander Mateos e68ac2b488 softirq: Remove unused 'action' parameter from action callback
When soft interrupt actions are called, they are passed a pointer to the
struct softirq action which contains the action's function pointer.

This pointer isn't useful, as the action callback already knows what
function it is. And since each callback handles a specific soft interrupt,
the callback also knows which soft interrupt number is running.

No soft interrupt action callback actually uses this parameter, so remove
it from the function pointer signature. This clarifies that soft interrupt
actions are global routines and makes it slightly cheaper to call them.

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/all/20240815171549.3260003-1-csander@purestorage.com
2024-08-20 17:13:40 +02:00
Valentin Schneider 32a9f26e5e rcu: Rename rcu_momentary_dyntick_idle() into rcu_momentary_eqs()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, replace "dyntick_idle" into "eqs" to drop the dyntick
reference.

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider 3b18eb3f9f rcu: Rename rcu_implicit_dynticks_qs() into rcu_watching_snap_recheck()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, drop the dyntick reference and update the name of this helper
to express that it rechecks rdp->watching_snap after an earlier
rcu_watching_snap_save().

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider 49f82c64fd rcu: Rename dyntick_save_progress_counter() into rcu_watching_snap_save()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, and the 'dynticks' prefix can be dropped without losing any
meaning.

Suggested-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider 76ce2b3d75 rcu: Rename struct rcu_data .exp_dynticks_snap into .exp_watching_snap
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, and the snapshot helpers are now prefix by
"rcu_watching". Reflect that change into the storage variables for these
snapshots.

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider 2dba2230f9 rcu: Rename struct rcu_data .dynticks_snap into .watching_snap
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, and the snapshot helpers are now prefix by
"rcu_watching". Reflect that change into the storage variables for these
snapshots.

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider fc1096ab1f rcu: Rename rcu_dynticks_zero_in_eqs() into rcu_watching_zero_in_eqs()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, reflect that change in the related helpers.

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider 3116a32eb4 rcu: Rename rcu_dynticks_in_eqs_since() into rcu_watching_snap_stopped_since()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, the dynticks prefix can go.

While at it, this helper is only meant to be called after failing an
earlier call to rcu_watching_snap_in_eqs(), document this in the comments
and add a WARN_ON_ONCE() for good measure.

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider 9629936d06 rcu: Rename rcu_dynticks_in_eqs() into rcu_watching_snap_in_eqs()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, reflect that change in the related helpers.

While at it, update a comment that still refers to rcu_dynticks_snap(),
which was removed by commit:

  7be2e6323b9b ("rcu: Remove full memory barrier on RCU stall printout")

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider 654b578e4d rcu: Rename rcu_dynticks_eqs_online() into rcu_watching_online()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, reflect that change in the related helpers.

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Valentin Schneider fda7020713 context_tracking, rcu: Rename rcu_dynticks_curr_cpu_in_eqs() into rcu_is_watching_curr_cpu()
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, reflect that change in the related helpers.

Note that "watching" is the opposite of "in EQS", so the negation is lifted
out of the helper and into the callsites.

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 21:30:42 +05:30
Christophe JAILLET 8f35fefad0 refscale: Constify struct ref_scale_ops
'struct ref_scale_ops' are not modified in these drivers.

Constifying this structure moves some data to a read-only section, so
increase overall security.

On a x86_64, with allmodconfig:
Before:
======
   text	   data	    bss	    dec	    hex	filename
  34231	   4167	    736	  39134	   98de	kernel/rcu/refscale.o

After:
=====
   text	   data	    bss	    dec	    hex	filename
  35175	   3239	    736	  39150	   98ee	kernel/rcu/refscale.o

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Tested-by: "Paul E. McKenney" <paulmck@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
2024-08-15 00:14:48 +05:30