summaryrefslogtreecommitdiff
path: root/include
AgeCommit message (Collapse)Author
2026-09-29ASoC: SDCA: expose class SoundWire probe/remove as librarySrinivas Kandagatla
Split the internal class_sdw_probe/class_sdw_remove functions into caller-friendly library helpers: sdca_class_probe(sdw, drv) sdca_class_remove(drv) The class_sdw_probe/class_sdw_remove callbacks of the built-in class_sdw_driver are now thin wrappers that allocate a bare sdca_class_drv, stash it in drvdata, and defer to the exported helpers. The exported sdca_class_probe() takes a caller-owned struct sdca_class_drv * so codec-specific SoundWire drivers can embed the class state in their own priv struct, own dev_set_drvdata() themselves, and avoid a second allocation. No functional change for the built-in driver. This lays the groundwork for codec-specific SDCA SoundWire drivers that want to compose the class-side probe with their own quirks; the next patches add the class_ops mechanism on top. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20260925161049.758913-4-srinivas.kandagatla@oss.qualcomm.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-29ASoC: SDCA: export PM helpers keyed on sdca_class_drvSrinivas Kandagatla
The class PM callbacks pull sdca_class_drv out of drvdata, so the built-in class_sdw_driver owns the drvdata slot. That works for the generic case but blocks codec drivers that want to embed sdca_class_drv in their own private struct -- they need drvdata for their codec priv. Split the four callbacks into exported helpers that take a struct sdca_class_drv * directly: sdca_class_system_suspend() sdca_class_system_resume() sdca_class_runtime_suspend() sdca_class_runtime_resume() Codec drivers can now compose these into their own dev_pm_ops without going through drvdata. For the built-in class_sdw_driver, add small dev_pm_ops wrappers that fetch drv from drvdata and wire them into sdca_class_pm_ops. The ops struct itself stays private to this file; codec drivers build their own dev_pm_ops from the four exported helpers above. No functional change: the built-in class_sdw_driver keeps the same PM semantics; only the internal plumbing shifts to operate on sdca_class_drv instead of struct device *dev. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20260925161049.758913-3-srinivas.kandagatla@oss.qualcomm.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-29ASoC: SDCA: allow building without ACPISrinivas Kandagatla
The SDCA class driver is useful on non-ACPI platforms where the topology is supplied statically via sdca_class_ops.populate_function. Drop 'depends on ACPI' from SND_SOC_SDCA and guard the ACPI-specific enumeration helpers (sdca_lookup_functions, sdca_lookup_swft, sdca_lookup_interface_revision) in sdca_device.c and sdca_functions.c with IS_ENABLED(CONFIG_ACPI), providing empty stubs when ACPI is off. The fwnode-based DisCo parser (sdca_parse_function() and its helpers in sdca_functions.c) stays compiled unconditionally: it uses only fwnode_* APIs and can in principle be reached from any firmware backend that supplies a matching device tree. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com> Link: https://patch.msgid.link/20260925161049.758913-2-srinivas.kandagatla@oss.qualcomm.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-29net: use two lockdep classes for the netdev instance lockJakub Kicinski
netdev_lockdep_set_classes() puts dev->lock in a separate lockdep class, by type (netkit vs dummy etc), with the intent of keeping the instance locks of individual devices as independent from each other as possible. In practice it does the opposite. lockdep only calls the cmp_fn for locks of the same class, so netdev_lock_cmp_fn() never gets a say when devices from different classes are nested. Instead lockdep records a dependency between the classes, and reports a circular locking problem as soon as the nesting happens the other way round, e.g. when devices are unregistered in a batch. ====================================================== WARNING: possible circular locking dependency detected 7.3.0-rc3+ #26 Not tainted ------------------------------------------------------ kworker/u256:1/326 is trying to acquire lock: ff110000104fce28 (&dev_instance_lock_key#6){+.+.}-{4:4}, at: unregister_netdevice_many_notify+0x1141/0x1c30 but task is already holding lock: ff110000127f2e28 (&dev_instance_lock_key#7){+.+.}-{4:4}, at: unregister_netdevice_many_notify+0x1141/0x1c30 -> #1 (&dev_instance_lock_key#7){+.+.}-{4:4}: __lock_acquire+0x767/0xd60 lock_acquire.part.0+0xd0/0x260 __mutex_lock+0x17d/0x1f20 unregister_netdevice_many_notify+0x1141/0x1c30 default_device_exit_batch+0x3ee/0x520 ops_undo_list+0x2cc/0x8a0 cleanup_net+0x442/0x9c0 process_one_work+0x951/0x1ab0 worker_thread+0x5a6/0xd10 kthread+0x339/0x430 ret_from_fork+0x4a4/0x6f0 ret_from_fork_asm+0x1a/0x30 -> #0 (&dev_instance_lock_key#6){+.+.}-{4:4}: check_prev_add+0xeb/0xe60 validate_chain+0x598/0x900 __lock_acquire+0x767/0xd60 lock_acquire.part.0+0xd0/0x260 __mutex_lock+0x17d/0x1f20 unregister_netdevice_many_notify+0x1141/0x1c30 default_device_exit_batch+0x3ee/0x520 ops_undo_list+0x2cc/0x8a0 cleanup_net+0x442/0x9c0 process_one_work+0x951/0x1ab0 worker_thread+0x5a6/0xd10 kthread+0x339/0x430 ret_from_fork+0x4a4/0x6f0 ret_from_fork_asm+0x1a/0x30 Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&dev_instance_lock_key#7); lock(&dev_instance_lock_key#6); lock(&dev_instance_lock_key#7); lock(&dev_instance_lock_key#6); *** DEADLOCK *** locks held by kworker/u256:1/326: 6, last CPU#6: #0: ff11000001c2b540 ((wq_completion)netns){+.+.}-{0:0}, at: process_one_work+0x117c/0x1ab0 #1: ffa0000001a3fd18 (net_cleanup_work){+.+.}-{0:0}, at: process_one_work+0x8ce/0x1ab0 #2: ffffffff98f53288 (pernet_ops_rwsem){++++}-{4:4}, at: cleanup_net+0xc1/0x9c0 #3: ffffffff98f6ede0 (rtnl_mutex){+.+.}-{4:4}, at: default_device_exit_batch+0x92/0x520 #4: ff1100001321ae28 (&dev_instance_lock_key#7){+.+.}-{4:4}, at: unregister_netdevice_many_notify+0x1141/0x1c30 We can't put all devices in the same class, that'd be too permissive. netdev_nl_queue_create_doit() and netdev_nl_bind_tx_doit() lock a virtual device (netkit) before a physical device, without rtnl_lock. We can never allow locking in the opposite order even under rtnl_lock. cmp_fn cannot enforce this sort of rule: lockdep keys its chain cache on the sequence of lock classes, so with a single class both orders hash to the same chain and only whichever happens first is validated. netdev_lock_cmp_fn() itself has another source of false-negatives. lockdep calls it from within __lock_acquire(), with the recursion counter already raised, so lock_is_held_type() always returns LOCK_STATE_UNKNOWN, which means lockdep_rtnl_is_held() always returns true / held. Use rtnl_is_locked(), which looks at the mutex directly and does work from that context. We may still miss a bad case if some other process is holding the lock, not us, but that's better than the 100% false negative rate of lockdep_rtnl_is_held(). One last thing, lockdep compares the address of the cmp function, so it can't be a static inline - that would work similarly to having separate classes, again. Move it to a source file. Tested by nesting two instance locks from a module, one scenario per boot since the first splat turns debug_locks off: first second rtnl reported ----------------------------------------------------------- virt->virt no recursive locking virt->virt yes - virt->phys no - virt->phys yes - phys->virt no - (records the edge) phys->virt yes - (records the edge) phys->phys no recursive locking phys->phys yes - virt->phys phys->virt no, no circular dependency virt->phys phys->virt no, yes circular dependency virt->phys phys->virt yes, no circular dependency virt->phys phys->virt yes, yes circular dependency phys->virt virt->phys no, no circular dependency phys->virt virt->phys yes, yes circular dependency virt->virt virt->virt yes, no recursive locking phys->phys phys->phys yes, no recursive locking (netkit and dummy stood in for the virtual devices, virtio_net and netdevsim for the physical ones.) Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Eric Dumazet <edumazet@google.com> Acked-by: Stanislav Fomichev <sdf@fomichev.me> Link: https://patch.msgid.link/20260926041832.1649675-1-kuba@kernel.org Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-09-29mmc: core: add mmc_send_tuning_timeout()Shawn Lin
Add mmc_send_tuning_timeout() which takes the data timeout in milliseconds, and turn mmc_send_tuning() into a thin wrapper keeping the current 150 ms, so there is no behaviour change for the existing callers. This lets drivers pass a tighter timeout for software tuning, e.g. hosts which scan the tuning window phase by phase. Suggested-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Signed-off-by: Ulf Hansson <ulfh@kernel.org>
2026-09-29bpf: Check global subprog memory arguments in the common pathAmery Hung
Route fixed-size global ARG_PTR_TO_MEM arguments through check_func_arg(). Preserve their read-write access check, nullable contract, and support for BTF-defined allocated memory. Recognize subprog calls explicitly in the common checker. Global subprog stack liveness can prove that bytes in an argument are unused by the callee. Retain the existing allowance for those poisoned stack bytes when call metadata is present, and update the nullability log expectation. The verifier also rejects packet pointers when the callee may change packet data. The concrete packet-backed register state is only available while checking the call site; the independently verified callee sees generic PTR_TO_MEM. Record this property as subprog_may_change_pkt in subprog-only call metadata and retain the packet-pointer rejection in the common fixed-memory path. Signed-off-by: Amery Hung <ameryhung@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20260928185334.1004200-11-ameryhung@gmail.com
2026-09-29bpf: Build argument prototypes for subprog callsAmery Hung
The common argument checker consumes a parameter-indexed bpf_func_proto, while BPF subprogram argument metadata is cached by ABI slot in compact bpf_subprog_info entries. Embedding a full prototype in every fixed subprogram entry would waste memory. Embed a scratch prototype in the verifier environment. Fill it by walking BTF parameters and the cached slots with separate cursors, mirroring the kfunc representation for parameters that occupy multiple slots. Keep the compact cache as the source of truth. The verifier environment is already heap allocated, so this avoids a separate allocation, failure path, and cleanup. Keep the existing validation loop, but make it consume the generated prototype in preparation for moving BPF subprogram calls to the common argument checker. No functional change. Signed-off-by: Amery Hung <ameryhung@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20260928185334.1004200-4-ameryhung@gmail.com
2026-09-29cpufreq: intel_pstate: Fix max_freq fallback in cpufreq_update_pressure()Rafael J. Wysocki
After commit d2d5c129d07e ("cpufreq: Make cpufreq_update_pressure() fall back to cpuinfo.max_freq"), cpufreq pressure appears in the CPU load balancer unexpectedly in some cases in which it was not present before, leading to confusion and uncertainty. Clearly, the scheduler assumes that cpufreq pressure will not be set unless the capacity reference frequency of the CPU is known, and the commit mentioned above violates that assumption. However, in some cases the capacity reference frequency of the CPU is in fact known even though arch_scale_freq_ref() returns 0 and in those cases it should be possible to set cpufreq pressure as appropriate. For this purpose, introduce a new cpufreq driver callback returning the CPU capacity reference frequency, .scale_freq_ref(), and make cpufreq_update_pressure() invoke it, if present, instead of falling back to cpuinfo.max_freq unconditionally. Add that callback to the intel_pstate driver and make it return 0 unless the scale-invariant capacity of the given CPU has been explicitly set, in which cases its reference frequency is always cpuinfo.max_freq. Fixes: d2d5c129d07e ("cpufreq: Make cpufreq_update_pressure() fall back to cpuinfo.max_freq") Reported-by: Jianyong Wu <wujianyong@hygon.cn> Closes: https://lore.kernel.org/linux-pm/20260915065747.1671965-1-wujianyong@hygon.cn/ Tested-by: Jianyong Wu <wujianyong@hygon.cn> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> # Intel hybrid parts Tested-by: Chen Yu <yu.c.chen@intel.com> [ rjw: Add READ_ONCE() around a capacity_perf read ] Link: https://patch.msgid.link/12975163.O9o76ZdvQC@rafael.j.wysocki Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2026-09-29net: gso: limit recursive IP-in-IP segmentationZihan Xi
IP-in-IP GSO can re-enter inet_gso_segment() or ipv6_gso_segment() for each nested IP header. encap_level tracks header bytes, not callback depth, so a deep chain can exhaust the kernel stack. Making inet_gso_segment() stackable introduced unbounded IPv4 nesting; IPIP GSO/TSO later made the path reachable. The IPv6 stackable path was introduced separately and uses the same guard. Count IPv4 and IPv6 GSO handler entries in skb_gso_cb, initialized once per top-level GSO operation and preserved across GRE/UDP context changes. Use the existing IP_TUNNEL_RECURSION_LIMIT for both handlers. The first five entries pass, and the sixth returns -EINVAL before dispatching another GSO callback. Fixes: 3347c9602955 ("ipv4: gso: make inet_gso_segment() stackable") Cc: stable@vger.kernel.org Reported-by: Vega <vega@nebusec.ai> Closes: https://lore.kernel.org/all/cover.1790157745.git.zihanx@nebusec.ai/ Assisted-by: LLM Co-developed-by: Luxing Yin <root@tr0jan.top> Signed-off-by: Luxing Yin <root@tr0jan.top> Signed-off-by: Zihan Xi <zihanx@nebusec.ai> Reviewed-by: Willem de Bruijn <willemb@google.com> Link: https://patch.msgid.link/20260924051521.32568-2-zihanx@nebusec.ai Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-09-29bpf: Skip detached progs in trampoline images that are still in useFlorent Revest (Anthropic)
bpf_tramp_image_put() makes sure a trampoline image is not freed while a task may still be running in it, but nothing similar is done for the progs called by that image. Detach drops the last prog reference right away and the prog is freed after grace periods, on the basis that a task still in the traced function skips the fexit progs once the nop at ip_after_call is patched to a jump. That leaves out a task sleeping in a sleepable prog that runs before the detached one, which no grace period waits for: CPU 0 CPU 1 in image I, sleeping in prog S detach P from I's trampoline -> new image, bpf_tramp_image_put(I) bpf_prog_put(P), last ref grace periods, P freed back from S __bpf_prog_enter(P) call P->bpf_func If S and P are fexit progs the task is already past the patched jump, and fentry only images don't have one. On x86 this is an int3 in poisoned bpf_prog_pack memory: Oops: int3: 0000 [#1] SMP NOPTI CPU: 18 UID: 0 PID: 94573 Comm: x169 Not tainted 6.18.44 #1 PREEMPT(lazy) RIP: 0010:0xffffffffc0601d8d Call Trace: <TASK> ? bpf_trampoline_6442515411+0x1a4/0x21b bpf_lsm_bprm_committed_creds+0x5/0x10 security_bprm_committed_creds+0x5f/0x70 begin_new_exec+0x2d6/0x410 ... We hit this in production when progs attached through trampolines got detached while their hooks were busy, and it was independently found with a fuzzer and KASAN. Have the JITs emit a patchable nop in front of each prog call sequence and record it in the image. When a prog is detached, patch its nop to a jump over the call sequence. Progs that stay attached keep running for the tasks that are in the image, and ip_after_call isn't needed anymore. The task can be in any image that isn't freed yet, not only in the current one. It sleeps in image I1 that calls S, P and Q, then P is detached and the trampoline moves to image I2, then Q is detached and its call is still in I1. So the trampoline keeps a list of its images until they are freed, and detaching a prog patches its nop in all of them. Images hold a reference on the trampoline for that long. On riscv and loongarch a jump of any range takes several instructions, and a task preempted in the middle of them could resume into half of the new sequence. The nop is a single instruction there, patched to a near branch through arch_bpf_trampoline_skip(). With the extra nops, BPF_MAX_TRAMP_LINKS progs no longer fit in a page on x86 and arm64 (and already didn't on powerpc), so lower the limit there like s390 does. Fixes: e21aa341785c ("bpf: Fix fexit trampoline.") Reported-by: Sechang Lim <rhkrqnwk98@gmail.com> Suggested-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Florent Revest (Anthropic) <florent.revest@linux.dev> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20260926135605.1217928-3-florent.revest@linux.dev Closes: https://lore.kernel.org/bpf/20260815071927.147049-1-zirajs7@gmail.com/
2026-09-29bpf: Wait for an RCU tasks grace period before freeing trampoline progsFlorent Revest (Anthropic)
When a prog is detached from a trampoline, it is freed after an RCU grace period, or an RCU tasks trace one if it is sleepable. This covers the tasks that are running the prog, since the prog's enter helper takes the matching read lock before the prog is called. On a preemptible kernel, it doesn't cover a task that was preempted in the trampoline just before the enter helper. That task holds no lock yet, and it calls the prog after it was freed: BUG: KASAN: vmalloc-out-of-bounds in __bpf_prog_enter_recur+0x3a5/0x3f0 Read of size 8 at addr ffffc90000055040 by task candidate/110 CPU: 1 UID: 0 PID: 110 Comm: candidate Not tainted 7.3.0-rc2-00014-g15071f2a1263-dirty #2 PREEMPT(full) Call Trace: <TASK> __bpf_prog_enter_recur+0x3a5/0x3f0 bpf_trampoline_6442509193+0x37/0xf1 __x64_sys_futex+0x9/0x410 do_syscall_64+0xb0/0x530 ... Wait for an RCU tasks grace period before the existing one when freeing a prog that was linked to a trampoline. An RCU tasks grace period only ends once the tasks that were preempted have run again, and bpf_tramp_image_put() already relies on it to free the image. It doesn't wait for tasks that sleep in the trampoline, the next commit takes care of those. Only progs that were linked to a trampoline can be called this way, so bpf_trampoline_add_prog() marks them and other progs are still freed as before. Fixes: e21aa341785c ("bpf: Fix fexit trampoline.") Reported-by: Junseo Lim <zirajs7@gmail.com> Signed-off-by: Florent Revest (Anthropic) <florent.revest@linux.dev> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20260926135605.1217928-2-florent.revest@linux.dev Closes: https://lore.kernel.org/bpf/aqdrwVpanH3WGurX@omen-arch/
2026-09-29mmc: core: add NXP IW610 base ID and block size quirkJeff Chen
The NXP IW610 SDIO chipset identifies itself with a base card ID (0x0214) during the initial MMC bus scan, whereas the WLAN function reports a different ID (0x0215). Like the IW61x, the IW610 requires MMC_QUIRK_BLKSZ_FOR_BYTE_MODE for correct byte-mode block size handling. Since SDIO fixups are applied before function devices are enumerated, the quirk must be associated with the base card ID rather than the WLAN function ID. Add the SDIO_DEVICE_ID_NXP_IW610_BASE definition and apply the required fixup in the SDIO quirk table. Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com> Acked-by: Ulf Hansson <ulfh@kernel.org>
2026-09-29mmc: sdio: add NXP IW610 device IDJeff Chen
Add SDIO device ID (0x0215) for NXP IW610 to sdio_ids.h. It is used by the nxpwifi driver to probe the IW610 chip over SDIO. Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com> Acked-by: Ulf Hansson <ulfh@kernel.org>
2026-09-28Merge tag 'mm-hotfixes-stable-2026-09-27-19-12' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Pull MM fixes from Andrew Morton: - Fix module loading incorrectly returning success after alloc_tag codetag setup failed - Restore MADV_COLLAPSE semantics for shmem so forced collapse ignores the shmem THP/mTHP sysfs settings - Make alloc_tag UAPI structure padding explicit - Fix DAMON schemes unexpectedly stopping after quotas are disabled through the online parameter update interface - Fix a false SW_TAGS KASAN invalid-access report when freeing vmapped task stacks - Split the MEMORY MANAGEMENT - MEMORY POLICY AND MIGRATION MAINTAINERS entry into separate MIGRATION and NUMA PLACEMENT entries - Move memory tiering maintenance under NUMA PLACEMENT - Add Gregory Price as a NUMA PLACEMENT co-maintainer - Add Heming Zhao as an ocfs2 reviewer - Fix mmap_prepare() state being copied onto a merged VMA rather than only onto a newly allocated VMA * tag 'mm-hotfixes-stable-2026-09-27-19-12' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: mm/vma: predicate setting mmap_prepare VMA fields on new vma alloc MAINTAINERS: add Heming Zhao as ocfs2 reviewer MAINTAINERS: make Gregory a co-maintainer of MEMORY MANAGEMENT - NUMA PLACEMENT MAINTAINERS: move memory tiering under MEMORY MANAGEMENT - NUMA PLACEMENT MAINTAINERS: split up MEMORY MANAGEMENT - MEMORY POLICY AND MIGRATION kasan: unpoison task stack below watermark only in generic mode mm/damon/core: don't skip damos_adjust_quota() while esz is not zero alloc_tag: avoid implicit padding in uapi mm: shmem: ignore sysfs configs for shmem forced collapse module: fix lost error code from codetag_load_module()
2026-09-28Merge tag 'nf-next-26-09-28' of ↵Jakub Kicinski
git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next Pablo Neira Ayuso says: ==================== Netfilter updates for net-next The following patchset contains Netfilter updates for net-next. The fixes included in this batch are deemed to handle correctness issues present in the Netfilter tree: 1) TCP sequence tracking is not reset inconditionally by synproxy when recycling an entry, sashiko reports the zero offset case skips it. Add a new function to inconditionally reset TCP sequence tracking. From Fernando F. Mancera. 2) Update documentation to reflect that the default maximum number of expectations (nf_conntrack_expect_max) is nf_conntrack_buckets / 64. From Shaojie Sun. 3) Remove useless break; after return in nft_osf, from Linkui Xiao. 4) Fix typos in comments in the netfilter tree, from Hemanth Selam. 5) Remove a few conntrack error stats duplicated updates, from Phil Sutter. 6) Do not bump invalid and drop conntrack error stats when packet is dropped, this is another duplicate. also From Phil. 7) Set on netns pointer before registering the flowtable, this is a requirement by the next patch, not fixing an existing issue. From Qingfang Deng. 8) Remove unnecessary workqueue work flush for all of the existing netns when device is gone. Also from Qingfang Deng. 9) Rework-fix nfnetlink_hook to correctly deal with large netlink dumps. Use sequence numbers to detect interference with hook updates while netlink dump is ongoing. From Phil Sutter. 10) Fix ctnetlink dump filtering by the IPv6 address, this has only work correctly for IPv4 this far, from Piotr Kubik. 11) ctnetlink filtering by zone is supported, but the ctnetlink dump filtering infrastructure was never updated to include a flag from userspace, update it to fill this gap. From Ilya Maximets. * tag 'nf-next-26-09-28' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next: netfilter: conntrack: make filtering by zone discoverable netfilter: ctnetlink: fix inverted IPv6 address match in dump filter netfilter: nfnetlink: Fix for interrupted hook dumps netfilter: flowtable: check namespace before iterating flows net/sched: act_ct: set net pointer before publishing flowtable netfilter: conntrack: Untangle drop and invalid counters netfilter: conntrack: Untangle insert_failed counter from others netfilter: fix several typos in comments netfilter: osf: remove unreachable break in nf_osf_ttl() netfilter: conntrack: fix nf_conntrack_expect_max default value in documentation netfilter: synproxy: fix reset of ct seqadj when reopening a connection ==================== Link: https://patch.msgid.link/20260927223436.269024-1-pablo@netfilter.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-09-28Merge tag 'for-net-2026-09-28' of ↵Jakub Kicinski
git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth Luiz Augusto von Dentz says: ==================== bluetooth pull request for net: Core: - hci_core: Serialize ACL scheduling with channel deletion - hci_core: Serialize SCO and ISO scheduling with teardown - hci_core: Serialize fragmented ISO packet queueing - hci_core: Fix inquiry cache timestamps on 64-bit systems - hci_core: free the HCI ID if naming fails - hci_conn: Lock parent access during enhanced SCO setup - hci_sync: Fix inquiry cache use-after-free - hci_sync: don't drain cmd_sync backlog on unregister - RFCOMM: Fix initial port reference race - SMP: Serialize SMP remote OOB data access Drivers: - btintel: fix buffer over-read in btintel_hw_error() - btintel: validate DDC record lengths - btintel_pcie: fix plen overflow in btintel_pcie_recv_frame() - btintel_pcie: reject oversized TX packets in send_frame() * tag 'for-net-2026-09-28' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth: Bluetooth: hci_core: Serialize SCO and ISO scheduling with teardown Bluetooth: hci_core: Serialize ACL scheduling with channel deletion Bluetooth: Serialize SMP remote OOB data access Bluetooth: RFCOMM: Fix initial port reference race Bluetooth: hci_sync: Fix inquiry cache use-after-free Bluetooth: hci_sync: don't drain cmd_sync backlog on unregister Bluetooth: hci_core: Serialize fragmented ISO packet queueing Bluetooth: hci_conn: Lock parent access during enhanced SCO setup Bluetooth: btintel: validate DDC record lengths Bluetooth: hci_core: free the HCI ID if naming fails Bluetooth: hci_core: Fix inquiry cache timestamps on 64-bit systems Bluetooth: btintel_pcie: reject oversized TX packets in send_frame() Bluetooth: btintel_pcie: fix plen overflow in btintel_pcie_recv_frame() Bluetooth: btintel: fix buffer over-read in btintel_hw_error() ==================== Link: https://patch.msgid.link/20260928152919.942973-1-luiz.dentz@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-09-28net/mlx5: E-switch, derive manager vport from device capabilityShay Drory
mlx5_eswitch_manager_vport() hardcoded the e-switch manager vport as either the ECPF or the host PF. Read esw_manager_vport_number from the e-switch capability when esw_manager_vport_number_valid is set, so the manager vport can be a VF - a prerequisite for VFs acting as e-switch managers. Keep the previous mapping as fallback when the capability does not report a number. Signed-off-by: Shay Drory <shayd@nvidia.com> Reviewed-by: Moshe Shemesh <moshe@nvidia.com> Reviewed-by: Akiva Goldberger <agoldberger@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260923103830.1183-10-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-09-28vxlan: remove default_dst and use vxlan_config and lowerdevEric Dumazet
Now that vxlan->cfg is an RCU-protected pointer, storing default destination attributes (remote_ip, remote_vni, remote_ifindex) in vxlan->default_dst is redundant and creates potential data races for lockless readers. Furthermore, several fields of struct vxlan_rdst (remote_port, offloaded, list, rcu, dst_cache) in default_dst were completely unused. The remaining one, remote_dev, only tracked the lower device, a role now taken by vxlan->lowerdev, so drop it from struct vxlan_rdst. Replace vxlan->default_dst with a 'struct net_device *lowerdev' pointer in struct vxlan_dev to track adjacent upper/lower netdev topology under RTNL, and switch all remaining users over to reading configuration attributes from vxlan->cfg. Also update mlx5e_tc_tun_get_remote_ifindex() to read remote_ifindex from vxlan->cfg under rcu_read_lock(). In vxlan_changelink(), pass lowerdev to vxlan_config_apply() to preserve needed_headroom and needed_tailroom. The mtu is still only reconsidered when the lower device changes, so that an unrelated changelink can not shrink it. cfg->remote_ifindex is now committed unconditionally, where default_dst.remote_ifindex was left untouched when IFLA_VXLAN_LINK was cleared, so a changelink dropping the lower device no longer leaves a stale ifindex behind. For the same reason vxlan_changelink() no longer needs to compute the ifindex that will actually be committed. Setting IFLA_VXLAN_LINK to 0 now also tears down the upper/lower adjacency, which netdev_adjacent_change_commit() used to skip for a NULL new device, resets needed_tailroom, and is rejected if per-VNI multicast groups are configured. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260922181102.3989489-8-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-09-28vxlan: convert configuration to RCU protectionEric Dumazet
Move 'struct vxlan_config' from an embedded structure inside 'struct vxlan_dev' to a dynamically allocated RCU-protected pointer 'vxlan->cfg'. Updating configuration via vxlan_changelink() or vxlan_dev_configure() allocates a new struct vxlan_config and publishes it with rcu_assign_pointer(), freeing the previous config with kfree_rcu(). Readers are converted to use rcu_dereference() or rtnl_dereference(). In vxlan_xmit(), acquire rcu_read_lock() to protect config access. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260922181102.3989489-7-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-09-28vxlan: move VXLAN_F_MDB to struct vxlan_dev flagsEric Dumazet
VXLAN_F_MDB is an internal runtime state flag indicating whether any MDB entries are configured on the device, rather than a netlink configuration attribute. In preparation for converting vxlan->cfg to an RCU-protected pointer, move VXLAN_F_MDB from struct vxlan_config to a dedicated 'flags' field in struct vxlan_dev as VXLAN_DEV_F_MDB, using atomic bitops (set_bit(), clear_bit(), test_bit()) to avoid KCSAN data races between the TX path and RTNL operations. This avoids having to dynamically reallocate and publish a new vxlan_config structure via RCU whenever the first MDB entry is added or the last one is removed, and prevents potential memory allocation failures during MDB teardown under memory pressure. mlxsw validates cfg->flags against a deny-by-default mask, so VXLAN_F_MDB used to make mlxsw_sp_nve_vxlan_can_offload() reject a device with MDB entries as carrying an unsupported flag. Add an explicit VXLAN_DEV_F_MDB test there to keep that rejection, with a message naming the actual reason. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260922181102.3989489-6-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-09-28Merge branch '20260811-ipq9650_icc-v2-1-55b8efbd62c6@oss.qualcomm.com' into ↵Bjorn Andersson
arm64-for-7.4 Merge the IPQ9650 interconnect defines in order to be able to use the provided constants in DeviceTree source.
2026-09-28dt-bindings: interconnect: Add Qualcomm IPQ9650 supportKathiravan Thirumoorthy
On Qualcomm IPQ9650 platform the interconnect busses don't have separate RPM / RPMh controls. Instead they require direct votes through the GCC. To unify hardware descriptions (and software interfaces) between this platform and other Qualcomm platforms, make GCC export corresponding NoC clocks as interconnects. Add IDs for these Network-on-Chip interfaces. The GCC schema already defines #interconnect-cells since it was added in the commit f92b778251ad ("dt-bindings: clock: add Qualcomm IPQ9650 GCC"). Acked-by: Georgi Djakov <djakov@kernel.org> Signed-off-by: Kathiravan Thirumoorthy <kathiravan.thirumoorthy@oss.qualcomm.com> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Link: https://patch.msgid.link/20260811-ipq9650_icc-v2-1-55b8efbd62c6@oss.qualcomm.com Signed-off-by: Bjorn Andersson <andersson@kernel.org>
2026-09-28net/mlx5: Add ONCE and MMIO accessor variants to mlx5_ifc_macros.hJason Gunthorpe
Add MLX5_GET_ONCE / MLX5_SET_ONCE which include READ_ONCE/WRITE_ONCE semantics for touching ownership bits that hardware may read or write at any time. The kernel driver doesn't use the IFC struct for these ownership bits, but the VFIO driver will and needs these helpers. Add MLX5_GET_MMIO / MLX5_SET_MMIO for accessing the init seg using the IFC offsets. They embed a readl/writel using the IFC struct to generate the addressing. Add MLX5_ARRAY_GET64(), the missing counterpart to MLX5_ARRAY_SET64(). Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Acked-by: Leon Romanovsky <leonro@nvidia.com> Link: https://lore.kernel.org/r/4-v7-c6d30e8ce1e4+3dfa6-mlx5st_jgg@nvidia.com Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-09-28net/mlx5: Extract MLX5_SET/GET macros into mlx5_ifc_macros.hJason Gunthorpe
Extract the entire MLX5_SET/GET macro family and their internal helpers from device.h into a new lightweight header (include/linux/mlx5/mlx5_ifc_macros.h). device.h cannot be included by the VFIO selftest because it pulls in rdma/ib_verbs.h; the macros themselves depend only on endian helpers, BUILD_BUG_ON, and basic C types. The moved macros include the internal helpers (__mlx5_nullp through __mlx5_st_sz_bits), all size/address macros (MLX5_ST_SZ_BYTES, MLX5_BYTE_OFF, MLX5_ADDR_OF, etc.), the 32-bit accessors (MLX5_SET, MLX5_GET, MLX5_SET_TO_ONES, MLX5_ARRAY_SET, MLX5_GET_PR), the 64-bit accessors (MLX5_SET64, MLX5_GET64, MLX5_ARRAY_SET64, MLX5_GET64_PR), the 16-bit accessors (MLX5_GET16, MLX5_SET16), and the big-endian getters (MLX5_GET64_BE, MLX5_GET_BE). device.h includes the new header so existing kernel code is unchanged. Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Acked-by: Leon Romanovsky <leonro@nvidia.com> Link: https://lore.kernel.org/r/3-v7-c6d30e8ce1e4+3dfa6-mlx5st_jgg@nvidia.com Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-09-28net/mlx5: Move HW constant groups from device.h/cq.h to mlx5_ifc.hJason Gunthorpe
Generally the IFC file should contain enums for the fields it defines. Move the ones in device.h that are relevant to the VFIO selftests over to the IFC file: wqe_ctrl_seg_bits.opcode: all MLX5_OPCODE_* WQE opcodes wqe_ctrl_seg_bits.ce: new MLX5_WQE_CE_* completion/event modes cqe64_bits.opcode: all MLX5_CQE_* CQE opcode values eqe_bits.event_type: enum mlx5_event (all event types) cmd_out_bits.status: all MLX5_CMD_STAT_* status codes query_hca_cap_in_bits.op_mod: enum mlx5_cap_mode Tidy MLX5_PCI_CMD_XPORT which is an alias of MLX5_CMD_QUEUE_ENTRY_TYPE_PCIE_CMD_IF_TRANSPORT. No functional change. All existing users of device.h and cq.h continue to see these constants through the include chain. Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Acked-by: Leon Romanovsky <leonro@nvidia.com> Link: https://lore.kernel.org/r/2-v7-c6d30e8ce1e4+3dfa6-mlx5st_jgg@nvidia.com Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-09-28net/mlx5: Add IFC structures for CQE and WQEJason Gunthorpe
Building the WQE and CQE using the IFC system is easier than with a C layout struct. Add definitions for their layout. Structs for: - wqe_ctrl_seg_bits (16B): WQE control segment - wqe_raddr_seg_bits (16B): RDMA remote address segment - wqe_data_seg_bits (16B): data segment - cqe64_bits (64B): 64-byte CQE with error syndrome union The VFIO mlx5 selftest will use these. Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Acked-by: Leon Romanovsky <leonro@nvidia.com> Link: https://lore.kernel.org/r/1-v7-c6d30e8ce1e4+3dfa6-mlx5st_jgg@nvidia.com Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-09-28sched_ext: Handle proxy-exec races in remote DSQ transfersAndrea Righi
Without proxy execution, the DSQ lock and holding_cpu handshake ensure that a task cannot be dequeued or start running during an rq-lock handoff without clearing holding_cpu. Proxy execution is an exception: a task can start physically executing as a lock owner while its scheduling context remains on a DSQ; its on-CPU or migration-disabled state can therefore change without clearing holding_cpu. Recheck these states after acquiring the source rq lock. If the transfer can no longer proceed, park the task on the source rq's reject DSQ and reenqueue it through its owning scheduler. This preserves the BPF scheduler's placement policy and keeps descendant tasks within their sub-scheduler's cap grants. Queue a deferred drain for every rejection. If a drain finds a proxy-rejected task still running or donating, leave it parked and record a retry request on the rq. scx_proxy_reenqueue_retry() consumes the request and schedules another drain when proxy state changes. Without this change and proxy execution enabled, stress-ng --pipeherd can trigger this race and migrate an active execution context, leading to sleeping-while-atomic warnings and subsequent lockdep corruption. This is a preparatory change to support proxy execution with sched_ext. Suggested-by: Tejun Heo <tj@kernel.org> Signed-off-by: Andrea Righi <arighi@nvidia.com> Signed-off-by: Tejun Heo <tj@kernel.org>
2026-09-28sched_ext: Fix ops.running/stopping() pairing for proxy-exec donorsAndrea Righi
With proxy execution, pick_next_task() can select a blocked task as the scheduling context before find_proxy_task() resolves the execution context. From the BPF scheduler perspective, that donor is running while its scheduling context drives the lock owner; ops.tick() and other accounting must therefore remain enclosed by a matching ops.running()/ops.stopping() session. In this scenario, the session boundaries do not always match physical task switches. Keep the "running" session open when the same donor continues on the same CPU. When proxy execution migrates a donor's scheduling context to another CPU, end its running session on the source CPU and start a new session on the destination CPU only after proxy resolution succeeds. This prevents a failed resolution from exposing a provisional ops.running() event. Track these sessions with a new SCX_TASK_RUN_TRACKED flag. The explicit running-state tracking is also required by later donor-based accounting: it prevents an EXT owner executing for a non-EXT donor from being treated as the active EXT scheduling context when it is dequeued. This is a preparatory change for enabling proxy execution together with sched_ext. Acked-by: John Stultz <jstultz@google.com> Signed-off-by: Andrea Righi <arighi@nvidia.com> Signed-off-by: Tejun Heo <tj@kernel.org>
2026-09-28sched_ext: Merge branch 'sched/core' of ↵Tejun Heo
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into for-7.4 Pull to receive: 313b652837d0 ("sched/core: Drop mutex locks before proxy rescheduling") 8f8c0417e973 ("sched/core: Dequeue waking proxy donors before reset") a49653d0abeb ("sched/core: Mark wakeups completed through ttwu_runnable()") 57c75e3ae38c ("sched: Add helper to block retained proxy donors") be100c77178e ("sched: Add sched_ext hooks for proxy execution") for the upcoming sched_ext side of proxy execution support. Signed-off-by: Tejun Heo <tj@kernel.org>
2026-09-28RDMA/mana_ib: Poll UD completions and flush software error QPsKonstantin Taranov
Build WCs directly from CQEs and their corresponding published shadow entries. This avoids iterating over all QPs that share a CQ. Track only QPs in the error state instead of every QP associated with the CQ. Keep the explicit GSI send-drain path responsible for adding the QP to the send error list and invoking its CQ handler. To invoke the handler for WQEs posted after GSI draining, check the QP state after posting WQEs. This is required because MANA hardware ignores doorbells for QPs in the error state. Introduce a WC-budgeted polling context that caches CQEs representing multiple WCs. Before consuming a shadow entry, match the CQE against the low 24 bits of the posted WQE offset to filter out stale CQEs. Implement WR signaling to skip WC generation for unsignaled WQEs. Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com> Link: https://patch.msgid.link/20260923131155.4055875-6-kotaranov@linux.microsoft.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
2026-09-28RDMA/mana_ib: Make kernel CQ arming robustKonstantin Taranov
Track CQ polling credits and ring the doorbell promptly to advance the hardware CQ tail pointer. The distance between the new and previously armed tails must remain below four times the CQ length. Expose CQ arming to mana_ib through mana_gd_wq_ring_doorbell_ext(). RC QPs will also use this helper to ring special doorbell offsets. MANA hardware ignores duplicate doorbells. Calculate the arming offset from the previously armed offset and poll_credit to avoid duplicates. Do not arm the CQ if no CQE was produced, because the CQ remains armed. Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com> Link: https://patch.msgid.link/20260923131155.4055875-5-kotaranov@linux.microsoft.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
2026-09-28RDMA/mana_ib: Revise UD receive posting with GDMA_WR_IB_SGLKonstantin Taranov
Decouple RQ WQE posting from the QP structure so it can be reused by other QP types. Batch multiple receive WQEs under a single doorbell. Introduce GDMA_WR_IB_SGL to pass SGEs directly to GDMA instead of copying them into a small stack array. Support receive WQEs with num_sge set to zero. Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com> Link: https://patch.msgid.link/20260923131155.4055875-4-kotaranov@linux.microsoft.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
2026-09-28io_uring/notif: count pending zerocopy notifications per ringJens Axboe
SEND_ZC notifications are io_kiocbs like any other as far as request and task accounting goes, but they are special in that they cannot be canceled and only complete once the network stack is done with the data. With an unresponsive peer, that can take a while. The exit and release paths are about to start waiting for requests to finish so that the files they pin get released in a timely manner, and notifications neither pin files nor finish in a timely manner. Keep a per-ring count of them so those paths can leave them out. Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-09-28soc: ti: k3-ringacc: Fix DMA ring initialization kernel-docKarl Mehltretter
The heading for k3_ringacc_init_data repeats struct, so kernel-doc cannot match it to the declaration. Its three fields are also missing descriptions. Use the structure name and describe the firmware handle, device ID, and total number of available rings used during DMA ring initialization. Fixes: d782298c6f6b ("soc: ti: k3-ringacc: add AM64 DMA rings support.") Assisted-by: LLM Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com> Reviewed-by: Udit Kumar <u-kumar1@ti.com> Link: https://patch.msgid.link/20260923061658.20140-2-kmehltretter@gmail.com Signed-off-by: Nishanth Menon <nm@ti.com>
2026-09-28soc: ti: k3-ringacc: Correct ring API kernel-docKarl Mehltretter
The ring accelerator header labels k3_ring_cfg as an enum, uses propname instead of property, and gives the DMA reset helper the ordinary reset helper's name. The DMA reset comment also omits occ, including the convention that zero requests a hardware occupancy read. The proxy flag is parsed as a separate parameter, and the pop helpers describe pushing elements. Proxy access is supported in Message mode; the listed Credentials and Queue modes are not implemented. The phandle lookup returns encoded error pointers rather than integer error values. Match the declarations and document these argument and operation roles. Fixes: 3277e8aa2504 ("soc: ti: k3: add navss ringacc driver") Assisted-by: LLM Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com> Link: https://patch.msgid.link/20260923061658.20140-1-kmehltretter@gmail.com Signed-off-by: Nishanth Menon <nm@ti.com>
2026-09-28ASoC: mediatek: mt8192: Improve error handlingMark Brown
bui duc phuc <phucduc.bui@gmail.com> says: This series addresses part of the error handling in the MT8192 driver. It propagates errors from clock operations, GPIO requests, and DAPM event handlers, and uses dev_err_probe() for cleaner probe logic. Compile-tested only. Link: https://patch.msgid.link/20260918133912.133799-1-phucduc.bui@gmail.com
2026-09-28ALSA: uapi: Add hwdep interface ID for caiaq devicesNiko Huuskonen
Add SNDRV_HWDEP_IFACE_CAIAQ for the hwdep device that snd-usb-caiaq creates for the LCD of the Native Instruments Kore controllers, added by the next patch. Assisted-by: LLM Signed-off-by: Niko Huuskonen <niko.huuskonen.00@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20260927003532.289468-4-niko.huuskonen.00@gmail.com
2026-09-28iio: core: add an accessor for scan_timestampRupesh Majhi
indio_dev->scan_timestamp is __private, so a driver has no way to ask whether the timestamp channel is in the current scan. Hide the ACCESS_PRIVATE() behind a read-only helper, the way iio_get_masklength() already does. The dps310 FIFO patch later in this series is the first user: that hardware does not timestamp entries, so it refuses a buffer with the timestamp channel enabled. Suggested-by: Jonathan Cameron <jic23@kernel.org> Assisted-by: LLM Signed-off-by: Rupesh Majhi <zoone.rupert@gmail.com> Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
2026-09-28iio: add __counted_by_ptr attribute to channels in struct iio_devBill Wendling
In 'struct iio_dev', the 'channels' pointer refers to an array of IIO channel specifications ('struct iio_chan_spec const'), and the size of this array is tracked by the 'num_channels' field within the same struct. Applying the '__counted_by_ptr' attribute to 'channels' allows KASAN and compiler-based bounds checkers to verify that accesses to 'channels' remain within bounds at runtime. Cc: codemender-patching+linux@google.com Assisted-by: LLM Signed-off-by: Bill Wendling <morbo@google.com> Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org> Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
2026-09-28iio: adc: qcom-adc5-gen3: Annotate struct adc5_device_data with __counted_by_ptrBill Wendling
Under compiler-supported bounds checking (via KASAN or UBSAN), pointer fields inside structures can be annotated with the '__counted_by_ptr' attribute to specify which field in the same structure holds the element count. This enables the compiler to perform runtime bounds checking on the pointer. Annotate the "base" pointer field in "struct adc5_device_data" with the "__counted_by_ptr" attribute pointing to "num_sdams". The number of SDAMs is determined from the device property and assigned to "num_sdams" which is then used to initialize "base" via "devm_kcalloc". By ensuring "num_sdams" is set to the correct element count prior to the "base" pointer allocation, and since the size of "base" is never reallocated or changed, this annotation is safe and will not cause any false-positive runtime bounds check panics or KASAN issues. Cc: codemender-patching+linux@google.com Assisted-by: LLM Signed-off-by: Bill Wendling <morbo@google.com> Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org> Acked-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com> Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
2026-09-28iio: gts-helper: add __counted_by_ptr to struct iio_gtsBill Wendling
The compiler attribute __counted_by_ptr can be used by KASAN and UBSAN to detect out-of-bounds accesses to pointer fields in structs where a corresponding element count field is available. In "struct iio_gts", there are multiple pointer fields associated with an element count. This patch annotates these pointer fields with "__counted_by_ptr" to improve runtime safety: - 'hwgain_table': counted by 'num_hwgain' - 'itime_table': counted by 'num_itime' - 'per_time_avail_scale_tables': counted by 'num_itime' - 'avail_all_scales_table': counted by 'num_avail_all_scales' - 'avail_time_tables': counted by 'num_avail_time_tables' To ensure that the count is set correctly before any pointer is accessed or assigned, we update "iio_init_iio_gts()" to set the counts prior to assigning the pointers. Cc: codemender-patching+linux@google.com Assisted-by: LLM Signed-off-by: Bill Wendling <morbo@google.com> Acked-by: Matti Vaittinen <mazziesaccount@gmail.com> Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org> Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
2026-09-28PCI: liveupdate: Freeze preservation status during shutdownDavid Matlack
Freeze a device's outgoing preservation status (preserved or not preserved) during shutdown. This enables the PCI core and drivers to safely make decisions based on the device's preservation status during shutdown. Note that pci_liveupdate_freeze() is triggered by the PCI core rather than from drivers participating in Live Update so that all devices can have their status frozen (i.e. prevent non-preserved devices from getting preserved late). Reviewed-by: Pranjal Shrivastava <praan@google.com> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Samiullah Khawaja <skhawaja@google.com> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: David Matlack <dmatlack@google.com> Link: https://patch.msgid.link/20260918200640.887030-12-dmatlack@google.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
2026-09-28PCI: liveupdate: Preserve bus numbers during Live UpdateDavid Matlack
Keep the secondary and subordinate bus numbers that the previous kernel programmed into bridges, rather than assigning new ones, if the previous kernel preserved any device across a Live Update. Do this even on architectures that would otherwise always assign bus numbers themselves, e.g. when pci=assign-busses is passed. Preserved devices must be allowed to continue performing memory transactions across a Live Update, so the kernel cannot change the fabric topology. Changing the bus numbers of a bridge changes the RequesterIDs of the devices below it, which would require disabling and flushing any in-flight memory transactions first. Apply the policy globally rather than only to the paths that contain preserved devices. Bus numbers have to be preserved above a preserved device anyway, since an upstream bridge cannot expand its window. A global policy matches the scope of pcibios_assign_all_busses(), and gives an answer that cannot change part way through the two passes of a bridge scan. Bridges that do not have bus numbers are still assigned new ones, so hot-adding a bridge keeps working, both during and after a Live Update. The two-pass bridge scan guarantees such bridges are only assigned bus numbers above those already claimed by preserved bridges. The exception is a bridge that was preserved but comes up without a valid bus number configuration, e.g. because it was reset during kexec. Refuse to assign it new bus numbers, since that would silently change the BDF of every preserved device in its hierarchy. Also refuse to assign bus numbers to the other bridges on the same bus, since the bus numbers of the failed bridge can no longer be read from hardware and handing them out would let an unrelated device inherit the BDF of a preserved device. Require that CONFIG_CARDBUS is not enabled to enable CONFIG_PCI_LIVEUPDATE since preserving bus numbers on PCI-to-CardBus bridges requires additional work but is not a priority at the moment. Signed-off-by: David Matlack <dmatlack@google.com> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/20260918200640.887030-7-dmatlack@google.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
2026-09-28PCI: liveupdate: Auto-preserve upstream bridges across Live UpdateDavid Matlack
When a PCI device is preserved across a Live Update, all of its upstream bridges up to the root port must also be preserved. This enables the PCI core and any drivers bound to the bridges to manage bridges correctly across a Live Update. Notably, this will be used in subsequent commits to ensure that preserved devices can continue performing memory transactions without a disruption or change in routing. To preserve bridges, the PCI core tracks the number of downstream devices preserved under each bridge using a reference count in struct pci_dev_ser. This allows a bridge to remain preserved until all its downstream preserved devices are unpreserved or finish their participation in the Live Update. Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Pranjal Shrivastava <praan@google.com> Signed-off-by: David Matlack <dmatlack@google.com> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/20260918200640.887030-6-dmatlack@google.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
2026-09-28PCI: liveupdate: Track incoming preserved PCI devicesDavid Matlack
During PCI enumeration, the previous kernel might have passed state about devices that were preserved across kexec. The PCI core needs to fetch this state to identify which devices are "incoming" and require special handling. Add pci_liveupdate_setup_device() which is called during device setup to fetch the serialized state (struct pci_ser) from the Live Update Orchestrator. The first time this happens, pci_flb_retrieve() will run and convert the array of pci_dev_ser structs into an xarray so that it can be looked up efficiently. If a device is found in the xarray, the PCI core stores a pointer to its state in dev->liveupdate_incoming until pci_liveupdate_finish() is called by the driver. This pointer allows the PCI core and drivers to apply Live Update-specific logic to incoming devices in subsequent commits. Drivers can check if a device is an incoming preserved device (e.g. during probe) by calling pci_liveupdate_is_incoming(). Note that any error during pci_flb_retrieve() must be treated as fatal. The previous kernel handed off PCI devices that are performing DMA and the current kernel cannot safely take over those devices without this state. CONFIG_64BIT is now required to enable CONFIG_PCI_LIVEUPDATE so that the domain and bdf can be guaranteed to fit in an unsigned long and be used as the xarray key. Reviewed-by: Pranjal Shrivastava <praan@google.com> Reviewed-by: Samiullah Khawaja <skhawaja@google.com> Signed-off-by: David Matlack <dmatlack@google.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/20260918200640.887030-4-dmatlack@google.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
2026-09-28PCI: liveupdate: Track outgoing preserved PCI devicesDavid Matlack
Add APIs to allow drivers to notify the PCI core of which devices are being preserved across a Live Update for the next kernel, i.e. "outgoing" devices. Drivers must notify the PCI core when devices are preserved so that the PCI core can update its FLB data (struct pci_ser) and track the list of outgoing devices. pci_liveupdate_preserve() notifies the PCI core that a device must be preserved across Live Update. pci_liveupdate_unpreserve() reverses this (cancels the preservation of the device). This tracking ensures the PCI core is fully aware of which devices may need special handling during shutdown and kexec, and so the list of preserved devices can be handed off to the next kernel. For now, the API only supports preserving non-VF devices on a root bus (not behind an PCI-to-PCI bridges). Reviewed-by: Pranjal Shrivastava <praan@google.com> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Samiullah Khawaja <skhawaja@google.com> Signed-off-by: David Matlack <dmatlack@google.com> Link: https://patch.msgid.link/20260918200640.887030-3-dmatlack@google.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
2026-09-28PCI: liveupdate: Set up FLB handler for the PCI coreDavid Matlack
Set up a File-Lifecycle-Bound (FLB) handler so that the PCI core can preserve its own state across a Live Update kexec. Preserving a PCI device across kexec requires preserving two independent sets of state: - Driver state, e.g. everything vfio-pci needs so that userspace can keep using the device in the new kernel. The driver preserves this itself and the PCI core is not involved. - PCI core state, e.g. which devices are preserved, so that the new kernel knows not to disturb them while they are still running and doing DMA. That is what this commit adds, serialized into struct pci_ser. Userspace, not the kernel, decides which devices are preserved, and it does so through the Live Update Orchestrator's (LUO) support for file preservation: a driver exposes a file that represents a single PCI device, and userspace preserves that device with ioctl(LIVEUPDATE_SESSION_PRESERVE_FD) on that file. Binding preservation to a file gives it proper lifecycle management, e.g. the preservation is undone if userspace cancels it or goes away. How a driver exposes that file is up to the driver and invisible to the PCI core (vfio-pci variant drivers, the first intended use-case, use their per-device cdev). LUO only knows that a file was preserved; it does not know that it represents a PCI device, or which one. Bridging that gap, drivers register their liveupdate_file_handler with the PCI core: pci_liveupdate_register_flb(driver_file_handler); pci_liveupdate_unregister_flb(driver_file_handler); LUO then refcounts the PCI core's FLB against the files preserved by that handler, and that refcount drives the lifetime of struct pci_ser: - On the first preserved file, luo_flb_file_preserve_one() calls pci_flb_preserve(), which allocates struct pci_ser and preserves it with KHO. - On the last unpreserved file (i.e. preservation cancelled), liveupdate_flb_put_outgoing() calls pci_flb_unpreserve(), which unpreserves and frees struct pci_ser. - In the next kernel, pci_flb_retrieve() hands the PCI core the struct pci_ser built by the previous kernel, whenever the PCI core asks for it (e.g. during enumeration), and pci_flb_finish() frees it once the PCI core is done with it. So the flow for preserving a device, once a driver has registered, looks like this: ioctl(LIVEUPDATE_SESSION_PRESERVE_FD) luo_session_preserve_fd() luo_preserve_file() luo_flb_file_preserve() luo_flb_file_preserve_one() # only on the first preserved file pci_flb_preserve() # alloc + KHO-preserve pci_ser fh->ops->preserve() # driver callback, e.g. vfio-pci Note that struct pci_ser is deliberately not allocated when a driver calls pci_liveupdate_register_flb(). A driver can be loaded for the lifetime of the machine without ever preserving a device, and there is no reason to allocate memory and hand it to the next kernel in that case. Letting LUO own the lifetime also means the PCI core does not have to duplicate LUO's refcounting and unwind logic for preservation failures, session aborts and fd close, and the incoming side (retrieve/finish) comes from the same object rather than requiring a separate KHO FDT entry owned by the PCI core. Note: This commit only allocates struct pci_ser and preserves it across Live Update. A subsequent commit adds pci_liveupdate_preserve(), the API drivers call from their fh->ops->preserve() callback to tell the PCI core exactly which devices are being preserved. Note: There is no reason to check for kho_is_enabled() since it can be assumed to return true. If KHO was not enabled then Live Update would not be enabled and these routines would never run. Reviewed-by: Pranjal Shrivastava <praan@google.com> Reviewed-by: Samiullah Khawaja <skhawaja@google.com> Signed-off-by: David Matlack <dmatlack@google.com> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/20260918200640.887030-2-dmatlack@google.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
2026-09-28Bluetooth: Serialize SMP remote OOB data accessChengfeng Ye
build_pairing_cmd() looks up remote OOB data and copies its contents without holding hdev->lock, which serializes the list's writers. After SMP finds an entry, a concurrent management Remove Remote OOB Data command can unlink and free it before SMP reads its present flag or copies its random and confirmation values. Removal can also invalidate an entry while the lookup is still traversing the list. KASAN reported: BUG: KASAN: slab-use-after-free in build_pairing_cmd+0x948/0x9b0 Call Trace: build_pairing_cmd+0x948/0x9b0 smp_recv_cb+0x459f/0x8110 l2cap_recv_frame+0xf14/0x9190 l2cap_recv_acldata+0xa64/0xd40 hci_rx_work+0x4ca/0x730 Allocated by task 87: hci_add_remote_oob_data+0x11d/0x530 add_remote_oob_data+0x282/0x400 hci_sock_sendmsg+0x1033/0x1ea0 Freed by task 93: hci_remote_oob_data_clear+0x108/0x1c0 remove_remote_oob_data+0x198/0x220 hci_sock_sendmsg+0x1033/0x1ea0 Taking hdev->lock in build_pairing_cmd() would recurse for callers that already hold it and invert the device-to-L2CAP lock order on the receive path. Add a per-device remote_oob_lock instead, held across the SMP lookup and copies and by the add, remove and clear helpers. Cover initialization and in-place updates as well, so SMP cannot read partially initialized or updated OOB values. Release the mutex on allocation failure, preserving the existing error return. The new critical sections acquire no device, connection or channel locks. Writers retain their existing hdev->lock protection, which continues to serialize the other readers without changing their locking or behavior. Link: https://lore.kernel.org/r/00660cd3-7d71-13a4-f617-229e6defb701@gmail.com Fixes: 02b05bd8b0a6 ("Bluetooth: Set SMP OOB flag if OOB data is available") Cc: stable@vger.kernel.org Signed-off-by: Chengfeng Ye <nicoyip.dev@gmail.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2026-09-28hwmon: (core) Add support for currX_emergency and inX_[l]emergency attributesGuenter Roeck
Some hardware monitoring chips support three alarm levels for current and voltage high limits, and three alarm levels for voltage low limits. Add support for currX_emergency, inX_emergency, and inX_lemergency attributes together with the appropriate alarm attributes to support such chips. Cc: Manaf Meethalavalappu Pallikunhi <manaf.pallikunhi@oss.qualcomm.com> Tested-by: Manaf Meethalavalappu Pallikunhi <manaf.pallikunhi@oss.qualcomm.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Link: https://patch.msgid.link/20260813211433.879638-1-linux@roeck-us.net Signed-off-by: Guenter Roeck <linux@roeck-us.net>
2026-09-28PM / QoS: add lockless read for flagsKevin Hilman (TI)
Add a lockless read for QoS flags similar to the lockless read for resume latency (dev_pm_qos_raw_resume_latency) which may be called from atomic context (e.g. genpd governors running under a raw spinlock or in the syscore suspend path), where taking that sleeping lock would be invalid on PREEMPT_RT. dev_pm_qos_raw_flags() now reads dev->power.qos->flags.effective_flags with READ_ONCE() so also add corresponding WRITE_ONCE() to the two effective_flags writes, the same way pm_qos_set_value() already does for target_value/pm_qos_read_value(). Reviewed-by: Kendall Willis <k-willis@ti.com> Acked-by: Rafael J. Wysocki (Intel) <rafael@kernel.org> Signed-off-by: Kevin Hilman (TI) <khilman@baylibre.com> Signed-off-by: Ulf Hansson <ulfh@kernel.org>